2012-05-22  Vitaly Buka  <vitalybuka@chromium.org>

        Fix iframe printing.
        https://bugs.webkit.org/show_bug.cgi?id=85118

        Reviewed by Darin Adler, Eric Seidel.

        Patch fixed two issues by disabling special handling of subframes for printing.
        1. Regression. Division by zero when forceLayoutForPagination called for subframes
        and page sizes set to zero.
        2. Old issue. RendererView adjusted layout of subframes for printing and set invalid
        dimensions. Sometimes it caused missing iframe when printed.

        Test: printing/iframe-print.html

        * page/Frame.cpp:
        (WebCore::Frame::setPrinting): Calls forceLayoutForPagination for root frames only.
        (WebCore::Frame::resizePageRectsKeepingRatio): Added ASSERTs to catch division by zero.
        * rendering/RenderView.cpp: Replaced printing() with shouldUsePrintingLayout() for most calls.
        (WebCore::RenderView::computeLogicalHeight):
        (WebCore::RenderView::computeLogicalWidth):
        (WebCore::RenderView::layout):
        (WebCore::RenderView::shouldUsePrintingLayout): Returns true only if printing enabled and it's a root frame.
        (WebCore::RenderView::viewRect):
        (WebCore::RenderView::viewHeight):
        (WebCore::RenderView::viewWidth):
        * rendering/RenderView.h:

2012-05-22  Rafael Brandao  <rafael.lobo@openbossa.org>

        [Qt] canvas/philip/tests/2d.path.stroke.overlap.html fails with Qt-4.6.2 or higher
        https://bugs.webkit.org/show_bug.cgi?id=40362

        Reviewed by Noam Rosenthal.

        Before drawing the stroke from a certain path, it should make the union of the stroke areas.
        The previous implementation didn't consider that so the intersection was painted twice.
        By using QPainterPathStroker, we create a QPainterPath on top of the platform path, and
        then we fill it with the expected brush. This way we avoid repainting areas.

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

2012-05-21  Gavin Barraclough  <barraclough@apple.com>

        Disable private names by default in WebCore
        https://bugs.webkit.org/show_bug.cgi?id=87088

        Reviewed by Geoff Garen.

        r117859 introduced a preliminary implementation of ES6-like private name objects to JSC.
        These are probably not yet ready to be web-facing, so disabling by default in WebCore.
        Opting-in for JSC & DumpRenderTree so that we can still run the fast/js/names.html test.

        * WebCore.exp.in:
            - Added export.
        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore):
        (WebCore::JSDOMWindowBase::javaScriptExperimentsEnabled):
            - Override default from JSC, enable based on corresponding Setting.
        * bindings/js/JSDOMWindowBase.h:
        (JSDOMWindowBase):
            - Added declaration for javaScriptExperimentsEnabled. 
        * page/Settings.cpp:
        (WebCore::Settings::Settings):
        (WebCore::Settings::setJavaScriptExperimentsEnabled):
        (WebCore):
        * page/Settings.h:
        (Settings):
        (WebCore::Settings::javaScriptExperimentsEnabled):
            - Added Setting, reflecting WebPreference.

2012-05-22  Adam Barth  <abarth@webkit.org>

        !HAVE(ACCESSIBILITY) depends on AccessibilityObject::actionVerb in the Chromium Android build
        https://bugs.webkit.org/show_bug.cgi?id=87141

        Reviewed by Eric Seidel.

        In the Chromium Android build there is still one remaining dependency
        on object files in the accessibility directory:
        AccessibilityObject::actionVerb. I missed this function in my previous
        patch, but this patch changes it to be an inline stub.

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

2012-05-22  Joshua Bell  <jsbell@chromium.org>

        IndexedDB: Support Array-type key paths
        https://bugs.webkit.org/show_bug.cgi?id=84207

        Reviewed by Tony Chang.

        Implement IDB spec behavior that key paths can be arrays of strings; when 
        evaluated, these yield arrays of keys, providing compound key support. Also
        changes exception types to match the spec.

        Test: storage/indexeddb/keypath-arrays.html
        Test: storage/indexeddb/keypath-basics.html

        * Modules/indexeddb/IDBDatabase.cpp:
        (WebCore::IDBDatabase::createObjectStore): Look for both string and array in option dict,
        throw exceptions for forbidden combinations of key generator and key paths.
        * Modules/indexeddb/IDBObjectStore.cpp:
        (WebCore::IDBObjectStore::createIndex): Handle special cases (accepted and forbidden).
        (WebCore):
        * Modules/indexeddb/IDBObjectStore.h:
        (IDBObjectStore):
        (WebCore::IDBObjectStore::createIndex): Overloads to satisfy IDL overloads and optional dicts.
        * Modules/indexeddb/IDBObjectStore.idl: Add DOMString array overload.
        * bindings/v8/IDBBindingUtilities.cpp: Implement spec logic for evaluating array key paths.
        (WebCore::createIDBKeyFromSerializedValueAndKeyPath):
        (WebCore):

2012-05-22  Martin Robinson  <mrobinson@igalia.com>

        [GTK] REGRESSION(r116135): Keys that confirm composition trigger a default action
        https://bugs.webkit.org/show_bug.cgi?id=86925

        Reviewed by Gustavo Noronha Silva.

        No new tests. Creating tests for GTK+ input methods is quite difficult, as they
        can differ from machine to machine. It's also hard to simulate composition
        sequences.

        * platform/gtk/CompositionResults.h: Instead of holding composition results, just
        keep a flag describing whether or not this event had results.
        (CompositionResults):

2012-05-22  Abhishek Arya  <inferno@chromium.org>

        Assertion failure (toRenderBox() called on a RenderInline) beneath RenderBlock::blockBeforeWithinSelectionRoot()
        https://bugs.webkit.org/show_bug.cgi?id=86500

        Reviewed by Ojan Vafai.

        Patch by Dan Bernstein<mitz@apple.com>. I just added the test.

        Test: fast/block/line-layout/selection-highlight-crash.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::blockBeforeWithinSelectionRoot): Demoted the object local variable to
        RenderObject, changed use of parentBox() to parent(), and added toRenderBlock() in two places.

2012-05-22  Rob Buis  <rbuis@rim.com>

        ASSERTs in RenderInline::layout()
        https://bugs.webkit.org/show_bug.cgi?id=63365

        Reviewed by Nikolas Zimmermann.

        Do not allow creation of renderers for text content children in elements by default.
        Subclasses like SVGTextElement override this behavior.
        This also fixes the <a><textPath</a> case because the <a> parent decides to allow <textPath> or not:
        http://www.w3.org/2003/01/REC-SVG11-20030114-errata#linking-text-environment

        Test: svg/custom/disallowed-text-content-rendering.svg

        * svg/SVGElement.cpp:
        (WebCore::SVGElement::childShouldCreateRenderer):
        * svg/SVGElement.h:
        (SVGElement):

2012-05-22  Takashi Sakamoto  <tasak@google.com>

        Implement DOM_KEY_LOCATION_LEFT and RIGHT of KeyboardEvent's location property
        https://bugs.webkit.org/show_bug.cgi?id=86694

        As KeyboardEvent for left/right location key, e.g. left-control,
        right-control, provides DOM_KEY_LOCATION_STANDARD as keyLocation property,
        modified KeyCodeConversion to make PlatformKeyboardEvent
        provide virtual keycodes with location information, e.g. VK_LCONTROL or
        VK_RCONTROL, and modified KeyboardEvent to generate location information
        from the virtual keycodes, e.g. genrating DOM_KEY_LOCATION_LEFT for
        VK_LCONTROL. KeyboardEvent also removes location information from
        the virtual keycodes, e.g. genrating VK_CONTROL for VK_LCONTROL.
        The location property is defined in the W3C DOM3 specification:
        http://www.w3.org/TR/DOM-Level-3-Events/#events-keyboardevents

        Reviewed by Alexey Proskuryakov.

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

        * dom/KeyboardEvent.cpp:
        (WebCore::windowsVirtualKeyCodeWithoutLocation):
        Added a function which removes location information from a given
        keycode. For example, when VK_LCONTROL is given, returns VK_CONTROL.
        (WebCore::keyLocationCode):
        Added a function which provides location information from a given
        keycode. For example, when VK_LCONTROL is given,
        returns DOM_KEY_LOCATION_LEFT.
        (WebCore::KeyboardEvent::KeyboardEvent):
        Initialized m_keyLocation by using the above keyLocationCode.
        (WebCore::KeyboardEvent::keyCode):
        Modified to use the above two functions to initialize keycode property
        and keylocation property.
        * platform/chromium/KeyCodeConversionAndroid.cpp:
        (WebCore::windowsKeyCodeForKeyEvent):
        * platform/chromium/KeyCodeConversionGtk.cpp:
        (WebCore::windowsKeyCodeForKeyEvent):
        * platform/cocoa/KeyEventCocoa.mm:
        (WebCore::windowsKeyCodeForKeyCode):
        Modified these keycode conversions to return keycodes with location
        information, e.g. modified keycode conversions returns VK_LCONTROL
        for left control.

2012-05-22  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: provide content-related actions on the sources panel.
        https://bugs.webkit.org/show_bug.cgi?id=87144

        Reviewed by Vsevolod Vlasov.

        Now that the authoring focus moved to the Source panel, context menu actions should follow:
        - refactored context menu actions to be provider-based
        - edited call sites to add applicable actions.

        * English.lproj/localizedStrings.js:
        * inspector/front-end/ContextMenu.js:
        (WebInspector.ContextMenu.prototype.appendApplicableItems):
        * inspector/front-end/HandlerRegistry.js:
        (WebInspector.HandlerRegistry.prototype.unregisterHandler):
        (WebInspector.HandlerRegistry.prototype.appendApplicableItems.doSave):
        (WebInspector.HandlerRegistry.prototype.appendApplicableItems.save):
        (WebInspector.HandlerRegistry.prototype.appendApplicableItems):
        * inspector/front-end/JavaScriptSourceFrame.js:
        (WebInspector.JavaScriptSourceFrame.prototype.populateTextAreaContextMenu):
        * inspector/front-end/NavigatorView.js:
        (WebInspector.NavigatorView.prototype.handleContextMenu):
        (WebInspector.BaseNavigatorTreeElement.prototype.onattach):
        * inspector/front-end/NetworkPanel.js:
        (WebInspector.NetworkPanel):
        (WebInspector.NetworkPanel.prototype.searchCanceled):
        (WebInspector.NetworkPanel.prototype.appendApplicableItems.reveal):
        (WebInspector.NetworkPanel.prototype.appendApplicableItems):
        * inspector/front-end/ResourceView.js:
        (WebInspector.ResourceSourceFrame.prototype._contentChanged):
        (WebInspector.ResourceSourceFrame.prototype.populateTextAreaContextMenu):
        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.FrameResourceTreeElement.prototype._handleContextMenuEvent):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype.appendApplicableItems):
        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame.prototype.populateTextAreaContextMenu):
        * inspector/front-end/TextViewer.js:
        (WebInspector.TextViewer.prototype._contextMenu):
        * inspector/front-end/UIUtils.js:
        * inspector/front-end/externs.js:
        * inspector/front-end/inspector.js:
        (WebInspector._doLoadedDoneWithCapabilities.get if):

2012-05-22  Nico Weber  <thakis@chromium.org>

        Give FileInputType a setFiles() method, let Drag-n-Drop call it.
        https://bugs.webkit.org/show_bug.cgi?id=87139

        Reviewed by Ojan Vafai.

        filesChosen(), the FileChooserClient callback, used to modify
        m_fileList directly. Instead, convert the FileChooserClient
        data to a FileList and pass that to a factored-out setFiles()
        method. This is in preparation to making the files property
        writable.

        Pure refactoring, no functionality change.

        * html/FileInputType.cpp:
        (WebCore::FileInputType::toFileList):
        (WebCore::FileInputType::setFiles):
        (WebCore::FileInputType::filesChosen):
        (WebCore):
        * html/FileInputType.h:
        (FileInputType):

2012-05-22  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: JavaScriptSourceFrame should be based on JavaScriptSource not UISourceCode.
        https://bugs.webkit.org/show_bug.cgi?id=87135

        Reviewed by Pavel Feldman.

        Renamed _uiSourceCode to _javaScriptSource in JavaScriptSourceFrame.
        Removed unused uiSourceCode getter from JavaScriptSourceFrame.

        * inspector/front-end/JavaScriptSourceFrame.js:
        (WebInspector.JavaScriptSourceFrame):
        (WebInspector.JavaScriptSourceFrame.prototype.canEditSource):
        (WebInspector.JavaScriptSourceFrame.prototype.commitEditing):
        (WebInspector.JavaScriptSourceFrame.prototype._onContentChanged):
        (WebInspector.JavaScriptSourceFrame.prototype.populateLineGutterContextMenu):
        (WebInspector.JavaScriptSourceFrame.prototype.populateTextAreaContextMenu):
        (WebInspector.JavaScriptSourceFrame.prototype.afterTextChanged):
        (WebInspector.JavaScriptSourceFrame.prototype.beforeTextChanged):
        (WebInspector.JavaScriptSourceFrame.prototype._onMouseDown):
        (WebInspector.JavaScriptSourceFrame.prototype._breakpointAdded):
        (WebInspector.JavaScriptSourceFrame.prototype._breakpointRemoved):
        (WebInspector.JavaScriptSourceFrame.prototype.onTextViewerContentLoaded):
        (WebInspector.JavaScriptSourceFrame.prototype._setBreakpoint):
        (WebInspector.JavaScriptSourceFrame.prototype._continueToLine):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype._createSourceFrame):

2012-05-22  Lu Guanqun  <guanqun.lu@intel.com>

        add OVERRIDE annotations to classes derived from CCAnimationCurve
        https://bugs.webkit.org/show_bug.cgi?id=87073

        Reviewed by James Robinson.

        No new tests required.

        * platform/graphics/chromium/cc/CCAnimationCurve.h:

2012-05-22  Lu Guanqun  <guanqun.lu@intel.com>

        add OVERRIDE annotations to CCThreadTask
        https://bugs.webkit.org/show_bug.cgi?id=87074

        Reviewed by James Robinson.

        No new tests required.

        * platform/graphics/chromium/cc/CCThreadTask.h:

2012-05-22  Julien Chaffraix  <jchaffraix@webkit.org>

        Centralize and clean-up table column iteration
        https://bugs.webkit.org/show_bug.cgi?id=87051

        Reviewed by Eric Seidel.

        Tests: fast/table/caption-between-column-and-column-group.html
               fast/table/caption-between-column-group-and-column.html
               fast/table/caption-between-columns.html

        The existing code had duplications between different classes and some
        of the iterating functions could use a better place. That's what this
        change solves, along with several renamings.

        * rendering/RenderTableCol.h:
        (WebCore::RenderTableCol::isTableColumnGroupWithColumnChildren):
        Renamed isTableColGroup to this to better reflect what it checks.
        Also added a new function: nextColumn.

        * rendering/FixedTableLayout.cpp:
        (WebCore::FixedTableLayout::calcWidthArray):
        Updated after isTableColGroup renaming.

        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::firstColumn):
        Added this new function to get the first column (or column group).

        (WebCore::RenderTable::colElement):
        Cleaned up this function: switched the loop to a 'for' now that the
        helper functions make it easy. Cleaned up the ordering and the naming.

        * rendering/RenderTable.h:
        Added firstColumn.

        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::styleOrColLogicalWidth):
        Updated to use nextColumn().

        * rendering/RenderTableCol.cpp:
        (WebCore::RenderTableCol::nextColumn):
        Added this new helper function to centralize the code to iterate over columns.

2012-05-22  Hao Zheng  <zhenghao@chromium.org>

        [chromium] Make color of spelling check marker cross-platform.
        https://bugs.webkit.org/show_bug.cgi?id=87095

        Reviewed by Adam Barth.

        Pixel layout is RGBA on Android, while it is BGRA on other platforms.

        No new tests. To run tests on Android.

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

2012-05-22  Dana Jansens  <danakj@chromium.org>

        [chromium] Expand damage from the background-blurred layer to ensure readback is only including pixels below that layer
        https://bugs.webkit.org/show_bug.cgi?id=86884

        Reviewed by Adrienne Walker.

        Consider layers in back-to-front order A, B, and C, where layer B has
        a blur background filter applied, and C exactly covers A. When B does
        its readback to perform its blur, it should include the pixels of A
        not C. With partial swap, if B is damaged, that damaged area will read
        pixels from outside of the damage rect. Those pixels should use the
        contents of A, not C, so we must expand the damage to ensure we redraw
        all pixels that are going to be included in the blur for the current
        frame.

        Also, when a layer below B has damage outside the contentBounds of B
        but within its blur radius, then that damage will be blurred inside B,
        so expand all damage within B's blurred contentBounds.

        Unit test: CCDamageTrackerTest.verifyDamageForBackgroundBlurredChild

        * platform/graphics/chromium/cc/CCDamageTracker.cpp:
        (WebCore::expandRectWithFilters):
        (WebCore::expandDamageRectInsideRectWithFilters):
        (WebCore::CCDamageTracker::updateDamageTrackingState):
        (WebCore::CCDamageTracker::extendDamageForRenderSurface):

2012-05-22  Mihnea Ovidenie  <mihnea@adobe.com>

        [CSSRegions] Add region styling support for color property
        https://bugs.webkit.org/show_bug.cgi?id=85633

        Reviewed by David Hyatt.

        Test: fast/regions/region-style-color.html

        This patch extends the region styling support. In addition to background-color, it adds
        the possibility of styling color in regions.

        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::collectMatchingRulesForList):
        * rendering/RenderFlowThread.cpp:
        (WebCore::RenderFlowThread::removeFlowChildInfo):
        (WebCore::RenderFlowThread::addRegionToThread):
        (WebCore::RenderFlowThread::removeRegionFromThread):
        (WebCore::RenderFlowThread::clearRenderObjectCustomStyle):
        (WebCore::RenderFlowThread::setRegionRangeForBox):
        (WebCore):
        (WebCore::RenderFlowThread::checkRegionsWithStyling):
        * rendering/RenderFlowThread.h:
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::updateAlwaysCreateLineBoxes):
        * rendering/RenderObjectChildList.cpp:
        (WebCore::RenderObjectChildList::removeChildNode):
        * rendering/RenderRegion.cpp:
        (WebCore::RenderRegion::paintReplaced):
        (WebCore::RenderRegion::styleDidChange):
        (WebCore::RenderRegion::setRegionObjectsRegionStyle):
        (WebCore::RenderRegion::restoreRegionObjectsOriginalStyle):
        (WebCore::RenderRegion::computeStyleInRegion):
        (WebCore):
        (WebCore::RenderRegion::computeChildrenStyleInRegion):
        (WebCore::RenderRegion::setObjectStyleInRegion):
        (WebCore::RenderRegion::clearObjectStyleInRegion):
        * rendering/RenderRegion.h:
        (RenderRegion):
        (ObjectRegionStyleInfo):

2012-05-22  Kentaro Hara  <haraken@chromium.org>

        [V8] Remove GenerateSetDOMException() from CodeGeneratorV8.pm
        https://bugs.webkit.org/show_bug.cgi?id=87114

        Reviewed by Nate Chapin.

        GenerateSetDOMException() is used by only one place. This patch removes it.

        No tests. No change in behavior.

        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateNormalAttrGetter):

2012-05-22  David Grogan  <dgrogan@chromium.org>

        IndexedDB: Fire error when there are problems opening a DB
        https://bugs.webkit.org/show_bug.cgi?id=85579

        We used to either fire success or get into an infinite loop.

        Reviewed by Tony Chang.

        New unit test in
        Source/WebKit/chromium/tests/IDBAbortOnCorruptTest.cpp

        * Modules/indexeddb/IDBDatabaseBackendImpl.cpp:
        (WebCore::IDBDatabaseBackendImpl::IDBDatabaseBackendImpl):
        (WebCore::IDBDatabaseBackendImpl::openInternal):
        (WebCore::IDBDatabaseBackendImpl::openConnection):
        * Modules/indexeddb/IDBDatabaseBackendImpl.h:
        (WebCore::IDBDatabaseBackendImpl::create):
        (IDBDatabaseBackendImpl):
        * Modules/indexeddb/IDBFactoryBackendImpl.cpp:
        (WebCore::IDBFactoryBackendImpl::deleteDatabase):
        (WebCore::IDBFactoryBackendImpl::openInternal):
        * Modules/indexeddb/IDBFactoryBackendImpl.h:
        (IDBFactoryBackendImpl):
        * Modules/indexeddb/IDBLevelDBBackingStore.h:
        (IDBLevelDBBackingStore):

2012-05-22  Nikolas Zimmermann  <nzimmermann@rim.com>

        Not reviewed.

        Follow-up patch after r117975, as the strict approach fires assertions.
        CSS generated content can violate the ASSERT(child->isSVGInline() || child->isSVGInlineText()) logic.

        * rendering/svg/RenderSVGText.cpp:
        (WebCore::RenderSVGText::subtreeChildWasAdded):
        (WebCore::RenderSVGText::subtreeChildWillBeRemoved):

2012-05-22  Dominic Mazzoni  <dmazzoni@google.com>

        Chromium AX: Crash when menulist adds selected option via document.write
        https://bugs.webkit.org/show_bug.cgi?id=87028

        Reviewed by Chris Fleizach.

        Test: platform/chromium/accessibility/add-to-menu-list-crashes.html

        * rendering/RenderMenuList.cpp:
        (WebCore::RenderMenuList::addChild):

2012-05-22  Nikolas Zimmermann  <nzimmermann@rim.com>

        Crash in WebCore::SVGTextLayoutAttributesBuilder::fillCharacterDataMap
        https://bugs.webkit.org/show_bug.cgi?id=86781

        Reviewed by Rob Buis.

        Always invalidate the text positioning element cache if the <text> render subtree mutates.
        Currently only RenderSVGInlineText renderers are tracked correctly, RenderSVGInline
        renderers like RenderSVGTSpan didn't cause text positioning element cache mutations
        so far. Fix that.

        Test: svg/custom/bug86781.html

        * rendering/svg/RenderSVGInline.cpp:
        (WebCore::RenderSVGInline::removeChild):
        * rendering/svg/RenderSVGText.cpp:
        (WebCore::RenderSVGText::subtreeChildWasAdded):
        (WebCore::RenderSVGText::subtreeChildWillBeRemoved):
        (WebCore::RenderSVGText::removeChild):
        * rendering/svg/RenderSVGText.h:
        (RenderSVGText):

2012-05-22  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: make "Go to source" shortcut accessible from all panels.
        https://bugs.webkit.org/show_bug.cgi?id=87132

        Reviewed by Vsevolod Vlasov.

        * English.lproj/localizedStrings.js:
        * inspector/front-end/AdvancedSearchController.js:
        (WebInspector.AdvancedSearchController.prototype.handleShortcut):
        * inspector/front-end/FilteredItemSelectionDialog.js:
        (WebInspector.OpenResourceDialog.filterOutEmptyURLs):
        (WebInspector.OpenResourceDialog.compareFunction):
        (WebInspector.OpenResourceDialog):
        (WebInspector.OpenResourceDialog.prototype.itemTitleAt):
        (WebInspector.OpenResourceDialog.prototype.itemKeyAt):
        (WebInspector.OpenResourceDialog.prototype.itemsCount):
        (WebInspector.OpenResourceDialog.prototype.requestItems):
        (WebInspector.OpenResourceDialog.prototype.selectItem):
        (WebInspector.OpenResourceDialog.show):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype.appendApplicableItems):
        (WebInspector.ScriptsPanel.prototype.showGoToSourceDialog):
        * inspector/front-end/SearchController.js:
        (WebInspector.SearchController.prototype.handleShortcut):
        * inspector/front-end/inspector.js:
        (WebInspector._registerShortcuts):
        (WebInspector.documentKeyDown):

2012-05-22  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: HeapSnapshot: speedUp buildAggregates.
        https://bugs.webkit.org/show_bug.cgi?id=87131

        Engine can't inline getters and use fast-case if the function has for(i in object) loops.

        Reviewed by Yury Semikhatsky.

        No logic changes.

        * inspector/front-end/HeapSnapshot.js:
        (WebInspector.HeapSnapshotNode.prototype.classIndex):
        (WebInspector.HeapSnapshot.prototype._buildAggregates):
        (WebInspector.HeapSnapshot.prototype._calculateClassesRetainedSize):

2012-05-22  Nikolas Zimmermann  <nzimmermann@rim.com>

        Crash in WebCore::RenderSVGContainer::paint
        https://bugs.webkit.org/show_bug.cgi?id=86392

        Reviewed by Rob Buis.

        Modernize the <marker> code, switch to the same design pattern used for handling zero-length subpaths.
        Decouple the generation of the marker start/mid/end positions from the actual usage of these information.
        Only generate those marker positions if the underlying Path changes, and never else.

        When figuring out the bounds for a shape, access to current set of RenderSVGResourceMarker start/mid/end resources
        and ask the marker resources for their bounds using the previously figured out marker positions on the Path.
        Drawing markers is handled in the same way.

        Remove SVGMarkerLayoutInfo alltogether which stored raw pointers to the RenderSVGResourceMarkers.
        We assumed that those objects would stay alive from layout() to paint(), but that assumption is wrong.

        Tests: svg/custom/bug86392.html
               svg/custom/marker-zero-length-linecaps-expected.svg
               svg/custom/marker-zero-length-linecaps.svg

        * CMakeLists.txt: Remove SVGMarkerLayoutInfo.*.
        * GNUmakefile.list.am: Ditto.
        * Target.pri: Ditto.
        * WebCore.gypi: Ditto.
        * WebCore.order: Ditto.
        * WebCore.vcproj/WebCore.vcproj: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Ditto.
        * rendering/svg/RenderSVGAllInOne.cpp: Ditto.
        * rendering/svg/RenderSVGShape.cpp: Handle markers just like the existing zero leng subpath code, which is superior.
        (WebCore::RenderSVGShape::createShape):
        (WebCore::RenderSVGShape::layout):
        (WebCore::RenderSVGShape::shouldGenerateMarkerPositions):
        (WebCore::RenderSVGShape::paint):
        (WebCore::markerForType):
        (WebCore::RenderSVGShape::markerRect):
        (WebCore::RenderSVGShape::inflateWithStrokeAndMarkerBounds):
        (WebCore::RenderSVGShape::drawMarkers):
        (WebCore::RenderSVGShape::processMarkerPositions):
        * rendering/svg/RenderSVGShape.h:
        (RenderSVGShape):
        * rendering/svg/SVGMarkerData.h:
        (WebCore::MarkerPosition::MarkerPosition):
        (MarkerPosition):
        (WebCore::SVGMarkerData::SVGMarkerData):
        (WebCore::SVGMarkerData::updateFromPathElement):
        (WebCore::SVGMarkerData::pathIsDone):
        (SVGMarkerData):
        (WebCore::SVGMarkerData::currentAngle):
        * rendering/svg/SVGMarkerLayoutInfo.cpp: Removed.
        * rendering/svg/SVGMarkerLayoutInfo.h: Removed.
        * rendering/svg/SVGResourcesCache.cpp:
        (WebCore::resourcesCacheFromRenderObject):
        (WebCore::SVGResourcesCache::cachedResourcesForRenderObject):
        * rendering/svg/SVGResourcesCache.h:
        (SVGResourcesCache):

2012-05-22  Alexander Pavlov  <apavlov@chromium.org>

        [Chromium] Implement the ContextMenuItem SubMenu type
        https://bugs.webkit.org/show_bug.cgi?id=86625

        Reviewed by Pavel Feldman.

        This change is the WebKit part of a two-sided patch that adds subMenuItems to ContextMenuItem
        and introduces code needed to handle it properly.

        * platform/ContextMenuItem.h:
        (PlatformMenuItemDescription): Add a Vector for subMenuItems.
        * platform/PlatformMenuDescription.h:
        (WebCore): Introduce a meaningful typedef for PlatformMenuDescription in Chromium.
        * platform/chromium/ContextMenuChromium.cpp:
        (WebCore::ContextMenu::itemWithAction): Search submenus when looking up a requested action id.
        (WebCore::ContextMenu::platformDescription): Return a real PlatformMenuDescription rather than 0.
        * platform/chromium/ContextMenuItemChromium.cpp:
        (WebCore::ContextMenuItem::ContextMenuItem): Set submenu if one has been passed in.
        (WebCore::ContextMenuItem::platformSubMenu): Return real subMenuItems instead of an empty PlatformMenuDescription.
        (WebCore::ContextMenuItem::setSubMenu): Implemented.
        (WebCore):

2012-05-22  Andrey Kosyakov  <caseq@chromium.org>

        Web Inspector: use canvas to render timeline category strips in overview pane
        https://bugs.webkit.org/show_bug.cgi?id=87109

        Reviewed by Pavel Feldman.

        - use canvas, not DOM to represent timeline category strips in the default overview mode

        * inspector/front-end/TimelineOverviewPane.js:
        (WebInspector.TimelineOverviewPane):
        (WebInspector.TimelineOverviewPane.prototype._setVerticalOverview): propagate to TimelineCategoryStrips;
        (WebInspector.TimelineOverviewPane.prototype._onCategoryVisibilityChanged): force update of category strips;
        (WebInspector.TimelineOverviewPane.prototype._update):
        (WebInspector.TimelineOverviewPane.prototype.setShowShortEvents):
        (WebInspector.TimelineCategoryStrips):
        (WebInspector.TimelineCategoryStrips.prototype.update.appendRecord): process one record;
        (WebInspector.TimelineCategoryStrips.prototype.update): re-draw everything;
        (WebInspector.TimelineCategoryStrips.prototype.setShowShortEvents):
        (WebInspector.TimelineCategoryStrips.prototype._renderBar): render single bar;
        (WebInspector.TimelineVerticalOverview):
        (WebInspector.TimelineVerticalOverview.prototype._renderBar):
        * inspector/front-end/TimelinePresentationModel.js:
        (WebInspector.TimelinePresentationModel.categories):
        (WebInspector.TimelinePresentationModel.createFillStyle): utility methods to create gradients for category bars;
        (WebInspector.TimelinePresentationModel.createFillStyleForCategory):
        (WebInspector.TimelineCategory):

2012-05-22  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: [regression] dynamically created script tab is bound to the document resource.
        https://bugs.webkit.org/show_bug.cgi?id=87119

        Reviewed by Vsevolod Vlasov.

        Test: inspector/debugger/dynamic-script-tag.html

        * inspector/front-end/BreakpointManager.js:
        (WebInspector.BreakpointManager.Breakpoint.prototype._setInDebugger.didSetBreakpoint):
        (WebInspector.BreakpointManager.Breakpoint.prototype._setInDebugger):
        * inspector/front-end/DebuggerModel.js:
        (WebInspector.DebuggerModel.prototype.rawLocationToUILocation):
        * inspector/front-end/ResourceScriptMapping.js:
        (WebInspector.ResourceScriptMapping.prototype.addScript):
        (WebInspector.ResourceScriptMapping.prototype._shouldBindScriptToContentProvider):
        * inspector/front-end/Script.js:
        (WebInspector.Script.prototype.rawLocationToUILocation):
        (WebInspector.Script.Location.prototype.update):

2012-05-22  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: JavaScript breakpoints disappear when Ctrl+S is pressed for the script without changes.
        https://bugs.webkit.org/show_bug.cgi?id=87121

        Reviewed by Pavel Feldman.

        JavaScriptSourceFrame and StylesSourceFrame should not commit working copy unless UISourceCode is dirty.

        * inspector/front-end/JavaScriptSourceFrame.js:
        (WebInspector.JavaScriptSourceFrame.prototype.commitEditing):
        * inspector/front-end/StylesPanel.js:
        (WebInspector.StyleSourceFrame.prototype.commitEditing):
        * inspector/front-end/UISourceCode.js:
        (WebInspector.UISourceCode.prototype.commitWorkingCopy):

2012-05-22  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: HeapSnapshot: speed-up calculateRetainedSize functon.
        https://bugs.webkit.org/show_bug.cgi?id=87124

        I found that in all dominators related functions we use nodeOrdinals.
        At the moment we divide nodeIndex to nodeFieldCount and this operation too expensive for these simple algorithms.

        Reviewed by Yury Semikhatsky.

        Covered by existing tests.

        * inspector/front-end/HeapSnapshot.js:
        (WebInspector.HeapSnapshotNode.prototype.get dominatorIndex):
        (WebInspector.HeapSnapshot.prototype._init):
        (WebInspector.HeapSnapshot.prototype._buildPostOrderIndex):
        (WebInspector.HeapSnapshot.prototype._buildDominatorTree):
        (WebInspector.HeapSnapshot.prototype._calculateRetainedSizes):
        (WebInspector.HeapSnapshot.prototype._buildDominatedNodes):

2012-05-22  Yury Semikhatsky  <yurys@chromium.org>

        Web Inspector: annotate InjectedScriptSource.js for closure compiler
        https://bugs.webkit.org/show_bug.cgi?id=87120

        Reviewed by Pavel Feldman.

        Annotated InjectedScriptSource.js for closure compiler. Replaced call of undefined
        _isPrimitiveValue function with isPrimitiveValue.

        * inspector/InjectedScriptExterns.js: Added. External APIs used in InjectedScriptSource.js
        (console.log):
        (InjectedScriptHost.prototype.storageId):
        (InjectedScriptHost.prototype.functionDetails):
        (InjectedScriptHost.prototype.isHTMLAllCollection):
        (InjectedScriptHost.prototype.internalConstructorName):
        (InjectedScriptHost.prototype.copyText):
        (InjectedScriptHost.prototype.clearConsoleMessages):
        (InjectedScriptHost.prototype.inspectedObject):
        (InjectedScriptHost.prototype.databaseId):
        (InjectedScriptHost.prototype.inspect):
        (InjectedScriptHost.prototype.type):
        (InjectedScriptHost.prototype.getEventListeners):
        (JavaScriptCallFrame.prototype.scopeType):
        * inspector/InjectedScriptSource.js:

2012-05-22  Ian Vollick  <vollick@chromium.org>

        [chromium] Speed up CCLayerTreeHostTestTickAnimationWhileBackgrounded
        https://bugs.webkit.org/show_bug.cgi?id=86871

        Reviewed by James Robinson.

        With this patch, the background animation timer is lazily created,
        allowing for different time intervals to be used. In particular, a
        very short interval for unit tests.

        Unit tests: CCLayerTreeHostTestTickAnimationWhileBackgrounded.runSingleThread
                    CCLayerTreeHostTestTickAnimationWhileBackgrounded.runMultiThread

        * platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:
        (WebCore::CCLayerTreeHostImpl::CCLayerTreeHostImpl):
        (WebCore::CCLayerTreeHostImpl::setBackgroundTickingEnabled):
        (WebCore):
        (WebCore::CCLayerTreeHostImpl::setVisible):
        (WebCore::CCLayerTreeHostImpl::animateLayers):
        (WebCore::CCLayerTreeHostImpl::lowFrequencyAnimationInterval):
        * platform/graphics/chromium/cc/CCLayerTreeHostImpl.h:
        (CCLayerTreeHostImpl):
        * platform/graphics/chromium/cc/CCSingleThreadProxy.cpp:
        (WebCore::CCSingleThreadProxy::setVisible):

2012-05-22  Alexander Pavlov  <apavlov@chromium.org>

        Web Inspector: [Styles] Odd synthetic shorthands may appear in the style
        https://bugs.webkit.org/show_bug.cgi?id=87081

        Reviewed by Vsevolod Vlasov.

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

2012-05-22  Hayato Ito  <hayato@chromium.org>

        Fix crashes when a mouse points a <svg> element in shadow DOM subtree.
        https://bugs.webkit.org/show_bug.cgi?id=86795

        Reviewed by Nikolas Zimmermann.

        <svg> elements in shadow dom subtree are still not supported.
        This fixes only crashes.

        Test: fast/dom/shadow/shadow-dom-event-dispatching.html

        * dom/EventDispatcher.cpp:
        (WebCore::eventTargetRespectingSVGTargetRules):
        * page/EventHandler.cpp:
        (WebCore::instanceAssociatedWithShadowTreeElement):

2012-05-22  Andreas Kling  <kling@webkit.org>

        DOM Attr objects pointing to "style" attribute should force reification when read.
        <http://webkit.org/b/87076>

        Reviewed by Antti Koivisto.

        Make sure that the "style" attribute is reserialized as needed when it gets retrieved
        through an Attr object. This fixes a bug where updating an element's inline style
        through the CSSOM API, and then retrieving the style attribute through an Attr node
        that was previously created by element.getAttributeNode() would return the old style
        attribute value.

        Test: fast/dom/attr-style-too-lazy.html

        * dom/Attr.cpp:
        (WebCore::Attr::value):

2012-05-22  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: HeapProfiler: upstream retainedSize calculation.
        https://bugs.webkit.org/show_bug.cgi?id=87107

        This patch upstreams V8::HeapSnapshotGenerator::CalculateRetainedSizes function to front-end.
        After that we will be able to drop retainedSize field from the snapshot serialized data.
        See meta-bug https://bugs.webkit.org/show_bug.cgi?id=87089

        Reviewed by Yury Semikhatsky.

        * inspector/front-end/HeapSnapshot.js:
        (WebInspector.HeapSnapshotNode.prototype.get retainedSize):
        (WebInspector.HeapSnapshot.prototype._init):
        (WebInspector.HeapSnapshot.prototype._calculateRetainedSizes):

2012-05-22  Emil A Eklund  <eae@chromium.org>

        Change RenderBlock to user RenderBox/RenderInline writing mode logic
        https://bugs.webkit.org/show_bug.cgi?id=87040

        Reviewed by Eric Seidel.

        Remove unnecessary writing mode logic in RenderBlock and use the
        implementation in RenderBox and RenderInline instead.

        No new tests, no change in functionality.

        * rendering/RenderBlock.cpp:
        (WebCore):
        * rendering/RenderBlock.h:
        (WebCore::RenderBlock::marginBeforeForChild):
        (WebCore::RenderBlock::marginAfterForChild):
        (WebCore::RenderBlock::marginStartForChild):
        (WebCore::RenderBlock::marginEndForChild):
        (WebCore::RenderBlock::setMarginStartForChild):
        (WebCore::RenderBlock::setMarginEndForChild):
        (WebCore::RenderBlock::setMarginBeforeForChild):
        (WebCore::RenderBlock::setMarginAfterForChild):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::marginBefore):
        (WebCore::RenderBox::marginAfter):
        (WebCore::RenderBox::marginStart):
        (WebCore::RenderBox::marginEnd):
        (WebCore::RenderBox::setMarginStart):
        (WebCore::RenderBox::setMarginEnd):
        (WebCore::RenderBox::setMarginBefore):
        (WebCore::RenderBox::setMarginAfter):
        * rendering/RenderBox.h:
        (RenderBox):
        * rendering/RenderBoxModelObject.h:
        (RenderBoxModelObject):
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::marginStart):
        (WebCore::RenderInline::marginEnd):
        (WebCore::RenderInline::marginBefore):
        (WebCore::RenderInline::marginAfter):
        * rendering/RenderInline.h:
        (RenderInline):

2012-05-22  Li Yin  <li.yin@intel.com>

        [WebSocket] WebSocket object should fire a simple event named error when it is required to fail the websocket connection.
        https://bugs.webkit.org/show_bug.cgi?id=86958

        Reviewed by Kent Tamura.

        Spec:http://dev.w3.org/html5/websockets/#feedback-from-the-protocol
        If the user agent was required to fail the websocket connection or the 
        WebSocket connection is closed with prejudice, fire a simple event 
        named error at the WebSocket object.

        Tests: http/tests/websocket/tests/hybi/close.html

        * Modules/websockets/WebSocket.cpp:
        (WebCore::WebSocket::didReceiveMessageError):
        * Modules/websockets/WebSocketChannel.cpp:
        (WebCore::WebSocketChannel::fail):

2012-05-22  Yury Semikhatsky  <yurys@chromium.org>

        Web Inspector: allow showing selected object in another heap profiler view
        https://bugs.webkit.org/show_bug.cgi?id=87098

        Reviewed by Vsevolod Vlasov.

        Added 2 context menu actions: 1) to jump from a node in the heap snapshot summary
        view to the same node in the dominators view; 2) to jump from a node in the dominators
        view to the same node in the summary view.

        * inspector/front-end/HeapSnapshotDataGrids.js:
        (WebInspector.HeapSnapshotSortableDataGrid): "sorting complete" event is only dispatched on
        when the data grid is populated. If we switch to already populated data grid the event is not
        dispatched. However when switching between different views of a heap snapshot we want to track
        the moment when the data grid is shown and populated. I added
        WebInspector.HeapSnapshotSortableDataGrid.Events.ContentShown for such cases. The event will always
        be dispatched after the data grid is shown and its content is populated.
        (WebInspector.HeapSnapshotSortableDataGrid.prototype.wasShown):
        (WebInspector.HeapSnapshotSortableDataGrid.prototype._sortingComplete):
        (WebInspector.HeapSnapshotSortableDataGrid.prototype.populateContextMenu.revealInDominatorsView):
        (WebInspector.HeapSnapshotSortableDataGrid.prototype.populateContextMenu.else.revealInSummaryView):
        (WebInspector.HeapSnapshotSortableDataGrid.prototype.populateContextMenu):
        (WebInspector.HeapSnapshotSortableDataGrid.prototype._performSorting):
        * inspector/front-end/HeapSnapshotGridNodes.js:
        (WebInspector.HeapSnapshotGenericObjectNode.prototype._createObjectCell):
        (WebInspector.HeapSnapshotDominatorObjectNode.prototype.retrieveChildBySnapshotObjectId):
        * inspector/front-end/HeapSnapshotView.js:
        (WebInspector.HeapSnapshotView.prototype.populateContextMenu):
        (WebInspector.HeapSnapshotView.prototype.changeView.dataGridContentShown):
        (WebInspector.HeapSnapshotView.prototype.changeView):
        (WebInspector.HeapSnapshotView.prototype._onSelectedViewChanged):
        (WebInspector.HeapSnapshotView.prototype._changeView):
        * inspector/front-end/ProfilesPanel.js:
        (WebInspector.ProfilesPanel.prototype._handleContextMenuEvent):

2012-05-22  Yury Semikhatsky  <yurys@chromium.org>

        Web Inspector: show more button node should have height multiple of row height
        https://bugs.webkit.org/show_bug.cgi?id=87104

        Reviewed by Vsevolod Vlasov.

        Made "show more" button height multiple of the data grid row height.

        * inspector/front-end/ShowMoreDataGridNode.js:
        (WebInspector.ShowMoreDataGridNode.prototype.nodeHeight):
        * inspector/front-end/dataGrid.css:
        (.data-grid button):

2012-05-22  Kentaro Hara  <haraken@chromium.org>

        [V8] Add an optional 'isolate' argument to throwTypeError()
        https://bugs.webkit.org/show_bug.cgi?id=87070

        Reviewed by Adam Barth.

        The objective is to pass Isolate around in V8 bindings.
        This patch adds an optional 'isolate' argument to throwTypeError(),
        and passes Isolate to throwTypeError()s. In a following patch,
        I'll pass Isolate to all throwTypeError("message")s.

        No tests. No change in behavior.

        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateNormalAttrSetter):
        (GenerateOverloadedFunctionCallback):
        (GenerateParametersCheck):
        * bindings/scripts/test/V8/V8TestObj.cpp:
        (WebCore::TestObjV8Internal::overloadedMethodCallback):
        (WebCore::TestObjV8Internal::overloadedMethod1Callback):
        * bindings/v8/V8Proxy.cpp:
        (WebCore::V8Proxy::throwTypeError):
        * bindings/v8/V8Proxy.h:
        (V8Proxy):
        * bindings/v8/custom/V8ArrayBufferViewCustom.h:
        (WebCore::constructWebGLArray):
        * bindings/v8/custom/V8DataViewCustom.cpp:
        (WebCore::V8DataView::constructorCallback):
        * bindings/v8/custom/V8SVGLengthCustom.cpp:
        (WebCore::V8SVGLength::valueAccessorSetter):
        * bindings/v8/custom/V8WebGLRenderingContextCustom.cpp:
        (WebCore::V8WebGLRenderingContext::getAttachedShadersCallback):
        (WebCore::V8WebGLRenderingContext::getProgramParameterCallback):
        (WebCore::V8WebGLRenderingContext::getShaderParameterCallback):
        (WebCore::V8WebGLRenderingContext::getUniformCallback):
        (WebCore::vertexAttribAndUniformHelperf):
        (WebCore::uniformHelperi):
        (WebCore::uniformMatrixHelper):

2012-05-22  Yoshifumi Inoue  <yosin@chromium.org>

        [Forms][Meter][Progress] Change function signature of parseToDoubleForNumberType
        https://bugs.webkit.org/show_bug.cgi?id=87077

        Reviewed by Hajime Morita.

        This patch changes function signature of parseToDoubleForNumberType and
        parseToDoubleForNumberTypeWithDecimalPlaces to return double value instead
        of bool for reducing code in call sites for ease of maintenance. This patch
        also allows to use functional style of using these functions.

        No new tests. This patch doesn't change behavior.

        * html/HTMLMeterElement.cpp:
        (WebCore::HTMLMeterElement::min): Changed for using double return value.
        (WebCore::HTMLMeterElement::max): Changed for using double return value.
        (WebCore::HTMLMeterElement::value): Changed for using double return value.
        (WebCore::HTMLMeterElement::low): Changed for using double return value.
        (WebCore::HTMLMeterElement::high): Changed for using double return value.
        (WebCore::HTMLMeterElement::optimum): Changed for using double return value.
        * html/HTMLProgressElement.cpp:
        (WebCore::HTMLProgressElement::value): Changed for using double return value.
        (WebCore::HTMLProgressElement::max): Changed for using double return value.
        * html/NumberInputType.cpp:
        (WebCore::NumberInputType::typeMismatchFor): Changed for using double return value.
        (WebCore::NumberInputType::sizeShouldIncludeDecoration): Changed for using double return value.
        (WebCore::NumberInputType::parseToDouble): Changed for using double return value.
        (WebCore::NumberInputType::parseToDoubleWithDecimalPlaces): Changed for using double return value.
        (WebCore::NumberInputType::visibleValue): Changed for using double return value.
        (WebCore::NumberInputType::sanitizeValue): Changed for using double return value.
        * html/RangeInputType.cpp:
        (WebCore::RangeInputType::parseToDouble): Changed for using double return value.
        * html/StepRange.cpp:
        (WebCore::StepRange::parseStep): Changed for using double return value.
        * html/StepRange.h:
        (WebCore::StepRange::defaultValue): Added "const" attribute
        (WebCore::StepRange::proportionFromValue): Added "const" attribute
        (WebCore::StepRange::valueFromProportion): Added "const" attribute
        * html/parser/HTMLParserIdioms.cpp:
        (WebCore::parseToDoubleForNumberType): Changed for using double return value. Added one parameter function.
        (WebCore::parseToDoubleForNumberTypeWithDecimalPlaces): Changed for using double return value. Added function for providing default fallback value.
        * html/parser/HTMLParserIdioms.h: Changed function prototype and added one parameter prototypes.
        * html/shadow/SliderThumbElement.cpp:
        (WebCore::sliderPosition): Changed for using double return value.

2012-05-22  Kentaro Hara  <haraken@chromium.org>

        REGRESSION r110315: Event handler throws TypeError for an input element with name="arguments"
        https://bugs.webkit.org/show_bug.cgi?id=86991

        Reviewed by Ojan Vafai.

        Original Chromium bug: http://code.google.com/p/chromium/issues/detail?id=128723

        Consider the following html:

        <html><body><form>
        <input type="hidden" name="arguments"></input>
        <div onclick="onclicked()" id="divInsideForm">Click here</div>
        </form></body>
        <script>
        function onclicked() {
          alert("onclicked");
        }
        </script>
        </html>

        If we click "Click here", JavaScript throws "Uncaught TypeError: undefined has no properties".

        This is a regression caused by r110315. V8LazyEventListener should not use
        'arguments' to retrieve the execution contexts, since 'arguments' can be
        shadowed by JavaScript.

        This patch changes V8LazyEventListener so that it retrieves contexts
        by this[2], this[1] and this[0].

        Test: fast/forms/form-input-named-arguments.html

        * bindings/v8/V8LazyEventListener.cpp:
        (WebCore::V8LazyEventListener::prepareListenerObject):

2012-05-22  Kentaro Hara  <haraken@chromium.org>

        [V8] setDOMException() should return v8::Handle<v8::Value>()
        https://bugs.webkit.org/show_bug.cgi?id=87083

        Reviewed by Adam Barth.

        The following patterns are used here and there in V8 bindings:

            setDOMException();
            return v8::Handle<v8::Value>();

        and

            setDOMException();
            return v8::Undefined();

        By returning v8::Handle<v8::Value>() from setDOMException(), we can simplify the above patterns into this:

            return setDOMException();

        This patch just replaces the code in CodeGeneratorV8.pm. I'll replace
        all other custom bindings in a follow-up patch.

        No tests. No change in behavior.

        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateSetDOMException):
        (GenerateFunctionCallback):
        (GenerateFunctionCallString):
        * bindings/scripts/test/V8/V8TestEventTarget.cpp:
        (WebCore::TestEventTargetV8Internal::itemCallback):
        (WebCore::TestEventTargetV8Internal::dispatchEventCallback):
        * bindings/scripts/test/V8/V8TestInterface.cpp:
        (WebCore::TestInterfaceV8Internal::supplementalMethod2Callback):
        * bindings/scripts/test/V8/V8TestObj.cpp:
        (WebCore::TestObjV8Internal::attrWithGetterExceptionAttrGetter):
        (WebCore::TestObjV8Internal::stringAttrWithGetterExceptionAttrGetter):
        (WebCore::TestObjV8Internal::withScriptStateAttributeRaisesAttrGetter):
        (WebCore::TestObjV8Internal::withScriptExecutionContextAttributeRaisesAttrGetter):
        (WebCore::TestObjV8Internal::withScriptExecutionContextAndScriptStateAttributeRaisesAttrGetter):
        (WebCore::TestObjV8Internal::methodThatRequiresAllArgsAndThrowsCallback):
        (WebCore::TestObjV8Internal::methodWithExceptionCallback):
        (WebCore::TestObjV8Internal::withScriptStateVoidExceptionCallback):
        (WebCore::TestObjV8Internal::withScriptStateObjExceptionCallback):
        (WebCore::TestObjV8Internal::withScriptExecutionContextAndScriptStateObjExceptionCallback):
        (WebCore::TestObjV8Internal::getSVGDocumentCallback):
        (WebCore::TestObjV8Internal::strictFunctionCallback):
        * bindings/v8/V8Proxy.cpp:
        (WebCore::V8Proxy::setDOMException):
        * bindings/v8/V8Proxy.h:
        (V8Proxy):

2012-05-22  MORITA Hajime  <morrita@google.com>

        Unreviewed expectations update against r117989.

        * bindings/scripts/test/V8/V8Float64Array.cpp:
        * bindings/scripts/test/V8/V8TestActiveDOMObject.cpp:
        * bindings/scripts/test/V8/V8TestCustomNamedGetter.cpp:
        * bindings/scripts/test/V8/V8TestEventConstructor.cpp:
        * bindings/scripts/test/V8/V8TestEventTarget.cpp:
        * bindings/scripts/test/V8/V8TestException.cpp:
        * bindings/scripts/test/V8/V8TestInterface.cpp:
        * bindings/scripts/test/V8/V8TestMediaQueryListListener.cpp:
        * bindings/scripts/test/V8/V8TestNamedConstructor.cpp:
        * bindings/scripts/test/V8/V8TestNode.cpp:
        * bindings/scripts/test/V8/V8TestObj.cpp:
        (WebCore::V8TestObj::installPerContextProperties):
        * bindings/scripts/test/V8/V8TestSerializedScriptValueInterface.cpp:

2012-05-21  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: migrate dominatorIndex code to the front-end calculated dominatorsTree.
        https://bugs.webkit.org/show_bug.cgi?id=87024

        Reviewed by Yury Semikhatsky.

        * inspector/front-end/HeapSnapshot.js:
        (WebInspector.HeapSnapshotNode.prototype.get dominatorIndex):
        (WebInspector.HeapSnapshot.prototype._init):

2012-05-22  Kentaro Hara  <haraken@chromium.org>

        [V8] Replace 'throwError(); return Undefined();' with 'return throwError()'
        https://bugs.webkit.org/show_bug.cgi?id=87079

        Reviewed by Adam Barth.

        This patch replaces

            throwError();
            return v8::Undefined();

        with

            return throwError();

        No tests. No change in behavior.

        * bindings/v8/DateExtension.cpp:
        (WebCore::DateExtension::OnSleepDetected):
        * bindings/v8/custom/V8HTMLDocumentCustom.cpp:
        (WebCore::V8HTMLDocument::openCallback):
        * bindings/v8/custom/V8InjectedScriptHostCustom.cpp:
        (WebCore::V8InjectedScriptHost::inspectedObjectCallback):
        * bindings/v8/custom/V8SQLResultSetRowListCustom.cpp:
        (WebCore::V8SQLResultSetRowList::itemCallback):
        * bindings/v8/custom/V8WebGLRenderingContextCustom.cpp:
        (WebCore::V8WebGLRenderingContext::getAttachedShadersCallback):
        (WebCore::V8WebGLRenderingContext::getProgramParameterCallback):
        (WebCore::V8WebGLRenderingContext::getShaderParameterCallback):
        (WebCore::V8WebGLRenderingContext::getUniformCallback):
        (WebCore::vertexAttribAndUniformHelperf):
        (WebCore::uniformHelperi):
        (WebCore::uniformMatrixHelper):

2012-05-22  Kenneth Russell  <kbr@google.com>

        Must set/reset pixel unpack alignment to 1 during texSubImage2D
        https://bugs.webkit.org/show_bug.cgi?id=86877

        Reviewed by James Robinson.

        Set pixel unpack alignment to 1 during upload, resetting afterward.

        Tests: fast/canvas/webgl/tex-image-and-sub-image-2d-with-canvas-rgb565.html
               fast/canvas/webgl/tex-image-and-sub-image-2d-with-canvas-rgba4444.html
               fast/canvas/webgl/tex-image-and-sub-image-2d-with-canvas-rgba5551.html
               fast/canvas/webgl/tex-image-and-sub-image-2d-with-canvas.html
               fast/canvas/webgl/tex-image-and-sub-image-2d-with-image-data-rgb565.html
               fast/canvas/webgl/tex-image-and-sub-image-2d-with-image-data-rgba4444.html
               fast/canvas/webgl/tex-image-and-sub-image-2d-with-image-data-rgba5551.html
               fast/canvas/webgl/tex-image-and-sub-image-2d-with-image-rgb565.html
               fast/canvas/webgl/tex-image-and-sub-image-2d-with-image-rgba4444.html
               fast/canvas/webgl/tex-image-and-sub-image-2d-with-image-rgba5551.html

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::texSubImage2DImpl):
        (WebCore::WebGLRenderingContext::texSubImage2D):
            Set pixel unpack alignment to 1 during upload; reset afterward.

2012-05-21  Sam D  <dsam2912@gmail.com>

        Web Inspector: "Deactivate All Breakpoints" should visually get reflected in Breakpoints pane.
        https://bugs.webkit.org/show_bug.cgi?id=86844

        Reviewed by Pavel Feldman.

        Added an option for activate/deactivate breakpoints into Breakpoints
        pane section. Style properties has been attached with
        breakpoint list to reflect active state of breakpoints.

        No new tests. UI Change.

        * English.lproj/localizedStrings.js:
        * inspector/front-end/BreakpointsSidebarPane.js:
        (WebInspector.JavaScriptBreakpointsSidebarPane.prototype._breakpointContextMenu):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype._breakpointsActiveStateChanged):
        * inspector/front-end/inspector.css:
        (.breakpoints-list-deactivated):

2012-05-21  Alexis Menard  <alexis.menard@openbossa.org>

        Web Inspector: Remove some dead code in CSSStyleModel.js.
        https://bugs.webkit.org/show_bug.cgi?id=87048

        Reviewed by Pavel Feldman.

        Remove dead and unused code in CSSStyleModel.js.

        No new tests : the code is supposedly dead so we should not have
        any regressions.

        * inspector/front-end/CSSStyleModel.js:

2012-05-21  Adam Barth  <abarth@webkit.org>

        !HAVE(ACCESSIBILITY) should be able to build without linking in any code from WebCore/accessibility
        https://bugs.webkit.org/show_bug.cgi?id=87035

        Reviewed by Chris Fleizach.

        The OS(ANDROID) already builds with !HAVE(ACCESSIBILITY), but because
        there are a few straggling references to objects in the
        WebCore/accessibility directory, we end up pulling in a bunch of code
        into the binary that we don't need.

        This patch stubs out a few more functions for !HAVE(ACCESSIBILITY) so
        we can link without any objects from WebCore/accessibility. This patch
        also locks in that property by actually excluding the
        WebCore/accessibility directory from the build on OS(ANDROID).

        * WebCore.gyp/WebCore.gyp:
        * accessibility/AXObjectCache.h:
        (AXObjectCache):
        (WebCore::AXObjectCache::enableAccessibility):
        (WebCore::AXObjectCache::setEnhancedUserInterfaceAccessibility):
        (WebCore::AXObjectCache::accessibilityEnabled):
        (WebCore::AXObjectCache::accessibilityEnhancedUserInterfaceEnabled):
        (WebCore::AXObjectCache::AXObjectCache):
        (WebCore::AXObjectCache::~AXObjectCache):
        (WebCore::AXObjectCache::get):
        (WebCore::AXObjectCache::getOrCreate):
        (WebCore::AXObjectCache::rootObject):
        (WebCore::AXObjectCache::rootObjectForFrame):
        (WebCore::AXObjectCache::rootAXEditableElement):
        (WebCore::AXObjectCache::childrenChanged):
        (WebCore::AXObjectCache::contentChanged):
        (WebCore::AXObjectCache::detachWrapper):
        (WebCore::AXObjectCache::handleActiveDescendantChanged):
        (WebCore::AXObjectCache::handleAriaRoleChanged):
        (WebCore::AXObjectCache::handleFocusedUIElementChanged):
        (WebCore::AXObjectCache::handleScrolledToAnchor):
        (WebCore::AXObjectCache::nodeTextChangeNotification):
        (WebCore::AXObjectCache::nodeTextChangePlatformNotification):
        (WebCore::AXObjectCache::postNotification):
        (WebCore::AXObjectCache::postPlatformNotification):
        (WebCore::AXObjectCache::remove):
        (WebCore::AXObjectCache::selectedChildrenChanged):
        * accessibility/AccessibilityObject.h:
        (WebCore):
        (WebCore::AccessibilityObject::updateBackingStore):
        (WebCore::AccessibilityObject::lineForPosition):
        (WebCore::AccessibilityObject::children):

2012-05-21  Andreas Kling  <kling@webkit.org>

        Use stack-allocated BitArray in StylePropertySet serialization.
        <http://webkit.org/b/87071>

        Reviewed by Anders Carlsson.

        Use BitArray instead of BitVector to track seen properties in StylePropertySet::asText().
        This removes two heap allocations from this path.

        * css/StylePropertySet.cpp:
        (WebCore::StylePropertySet::asText):

2012-05-21  Hajime Morrita  <morrita@chromium.org>

        Unreviewed Qt build fix against r117898.

        * Target.pri:

2012-05-21  Hajime Morrita  <morrita@chromium.org>

        [V8] Shadow DOM should be per-window-configurable.
        https://bugs.webkit.org/show_bug.cgi?id=86555

        Reviewed by Kentaro Hara.

        This change introduces an IDL attribute named "V8EnabledAtContext"
        which allows DOMWindow properties to be turned on or off per
        windows basis. RuntimeEnabledFeatures::xxxAllowed() method decides the availability.

        - CodeGeneratorV8.pm now accepts V8EnabledAtContext and allows such properties
          to be configured per-Object basis, instead of per-ObjectTemplate basis.
          The script generates V8Window::installPerContextProperties(), which injects such
          per-object-turnable properties to newly created DOMWindow wrapper.
        - Added RuntimeEnabledFeatures::shadowDOMAllowed(DOMWindow*) which is used to
          decide the shadow dom availability of Shadow DOM feature.
          It delegates the call to FrameLoaderClient::shadowDOMAllowed() to make the decision.
        - The new IDL attribute is applied to DOMWindow.WebKitShadowRoot.
        - Updated existing shadowDOMEnabled() call sites with shadowDOMAllowed().

        No new tests except run-bindings-test. This isn't testable from
        DRT and this change itself doesn't chagne the behaviour.  It needs
        a client implementation.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/generic/ContextEnabledFeatures.cpp: Added.
        (WebCore):
        (WebCore::ContextEnabledFeatures::shadowDOMEnabled):
        * bindings/generic/ContextEnabledFeatures.h: Added.
        (WebCore):
        (ContextEnabledFeatures):
        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateHeader):
        (GenerateImplementation):
        (GetContextEnableFunction):
        * bindings/scripts/IDLAttributes.txt:
        * bindings/scripts/test/TestObj.idl:
        * bindings/scripts/test/V8/V8TestObj.cpp:
        (WebCore::TestObjV8Internal::enabledAtContextAttr1AttrGetter):
        (TestObjV8Internal):
        (WebCore::TestObjV8Internal::enabledAtContextAttr1AttrSetter):
        (WebCore::TestObjV8Internal::enabledAtContextAttr2AttrGetter):
        (WebCore::TestObjV8Internal::enabledAtContextAttr2AttrSetter):
        (WebCore::V8TestObj::installPerContextProperties):
        * bindings/scripts/test/V8/V8TestObj.h:
        (V8TestObj):
        * bindings/v8/V8DOMWindowShell.cpp:
        (WebCore::V8DOMWindowShell::installDOMWindow): Adopted installPerContextProperties()
        * bindings/v8/V8Proxy.h:
        (WebCore):
        (WebCore::configureAttribute): Generalized to accept both ObjectTemplate and Object.
        * dom/Position.cpp: Adopted ContextEnabledFeatures
        (WebCore::Position::Position):
        (WebCore::Position::findParent):
        * dom/ShadowRoot.idl:
        * dom/TreeScope.cpp:
        (WebCore::TreeScope::getSelection):
        * html/shadow/HTMLContentElement.cpp: Adopted ContextEnabledFeatures
        (WebCore::contentTagName):
        (WebCore::HTMLContentElement::create):
        * loader/FrameLoaderClient.h:
        (FrameLoaderClient):
        (WebCore::FrameLoaderClient::shadowDOMAllowed): Added with a default behavior.
        * page/DOMWindow.cpp:
        * page/DOMWindow.idl:


2012-05-21  Tony Chang  <tony@chromium.org>

        auto margins on flexbox should allocate space in the flex direction
        https://bugs.webkit.org/show_bug.cgi?id=83086

        Reviewed by Ojan Vafai.

        Test: css3/flexbox/flex-flow-auto-margins.html

        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::autoMarginOffsetInMainAxis):
        (WebCore):
        (WebCore::RenderFlexibleBox::updateAutoMarginsInMainAxis):
        (WebCore::RenderFlexibleBox::layoutAndPlaceChildren): Update the margins on the RenderBox *after* we do the final child layout.
        * rendering/RenderFlexibleBox.h:

2012-05-21  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        [EFL] Add inital mediaControlsEflfullscreen.css for fullscreen control UI
        https://bugs.webkit.org/show_bug.cgi?id=86988

        Reviewed by Eric Carlson.

        In order to support fullscreen feature, EFL port needs to have new css file for fullscreen media control UI.

        No new tests because this patch is covered by existing tests.

        * PlatformEfl.cmake:
        * css/mediaControlsEflFullscreen.css: Added.
        (video::-webkit-media-controls-panel):
        (video:-webkit-full-page-media::-webkit-media-controls-panel):
        (video::-webkit-media-controls-mute-button):
        (video::-webkit-media-controls-play-button):
        (video::-webkit-media-controls-timeline-container):
        (video::-webkit-media-controls-current-time-display):
        (video::-webkit-media-controls-time-remaining-display):
        (video::-webkit-media-controls-timeline):
        (video::-webkit-media-controls-volume-slider-container):
        (video::-webkit-media-controls-volume-slider):
        (video::-webkit-media-controls-seek-back-button):
        (video::-webkit-media-controls-seek-forward-button):
        (video::-webkit-media-controls-fullscreen-button):
        (video::-webkit-media-controls-rewind-button):
        (video::-webkit-media-controls-return-to-realtime-button):
        (video::-webkit-media-controls-toggle-closed-captions-button):
        * platform/efl/RenderThemeEfl.cpp:
        (WebCore):
        (WebCore::RenderThemeEfl::extraFullScreenStyleSheet):
        * platform/efl/RenderThemeEfl.h:
        (RenderThemeEfl):

2012-05-21  Kentaro Hara  <haraken@chromium.org>

        [V8] Remove V8Proxy::notHandledByInterceptor()
        https://bugs.webkit.org/show_bug.cgi?id=86831

        Reviewed by Adam Barth.

        This patch replaces 'return V8Proxy::notHandledByInterceptor()'
        with 'return v8::Handle<v8::Value>()'. See the discussion in
        https://bugs.webkit.org/show_bug.cgi?id=85330 for more details.

        No tests. No change in behavior.

        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateOverloadedFunctionCallback):
        (GenerateParametersCheck):
        * bindings/scripts/test/V8/V8TestObj.cpp:
        (WebCore::TestObjV8Internal::overloadedMethodCallback):
        (WebCore::TestObjV8Internal::overloadedMethod1Callback):
        * bindings/v8/V8Collection.h:
        (WebCore::collectionNamedPropertyGetter):
        * bindings/v8/V8DOMWrapper.cpp:
        (WebCore::V8DOMWrapper::convertEventTargetToV8Object):
        * bindings/v8/V8NPObject.cpp:
        (WebCore::npObjectSetProperty):
        * bindings/v8/V8Proxy.cpp:
        (WebCore::V8Proxy::runScript):
        (WebCore::V8Proxy::throwError):
        * bindings/v8/V8Proxy.h:
        (WebCore):
        * bindings/v8/custom/V8ArrayBufferViewCustom.h:
        (WebCore::constructWebGLArrayWithArrayBufferArgument):
        (WebCore::setWebGLArrayHelper):
        * bindings/v8/custom/V8CSSStyleDeclarationCustom.cpp:
        (WebCore::V8CSSStyleDeclaration::namedPropertyGetter):
        (WebCore::V8CSSStyleDeclaration::namedPropertySetter):
        * bindings/v8/custom/V8DOMStringMapCustom.cpp:
        (WebCore::V8DOMStringMap::namedPropertyGetter):
        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        (WebCore::V8DOMWindow::indexedPropertyGetter):
        (WebCore::V8DOMWindow::namedPropertyGetter):
        * bindings/v8/custom/V8HTMLAllCollectionCustom.cpp:
        (WebCore::V8HTMLAllCollection::namedPropertyGetter):
        * bindings/v8/custom/V8HTMLCollectionCustom.cpp:
        (WebCore::V8HTMLCollection::namedPropertyGetter):
        * bindings/v8/custom/V8HTMLFormElementCustom.cpp:
        (WebCore::V8HTMLFormElement::indexedPropertyGetter):
        (WebCore::V8HTMLFormElement::namedPropertyGetter):
        * bindings/v8/custom/V8HTMLFrameSetElementCustom.cpp:
        (WebCore::V8HTMLFrameSetElement::namedPropertyGetter):
        * bindings/v8/custom/V8HTMLOptionsCollectionCustom.cpp:
        (WebCore::V8HTMLOptionsCollection::indexedPropertyGetter):
        * bindings/v8/custom/V8HTMLPlugInElementCustom.cpp:
        (WebCore::npObjectNamedGetter):
        (WebCore::npObjectNamedSetter):
        (WebCore::npObjectIndexedGetter):
        (WebCore::npObjectIndexedSetter):
        * bindings/v8/custom/V8HTMLSelectElementCustom.cpp:
        (WebCore::V8HTMLSelectElement::indexedPropertyGetter):
        * bindings/v8/custom/V8NamedNodeMapCustom.cpp:
        (WebCore::V8NamedNodeMap::indexedPropertyGetter):
        (WebCore::V8NamedNodeMap::namedPropertyGetter):
        * bindings/v8/custom/V8NodeListCustom.cpp:
        (WebCore::V8NodeList::namedPropertyGetter):
        * bindings/v8/custom/V8StorageCustom.cpp:
        (WebCore::storageGetter):
        (WebCore::V8Storage::namedPropertyGetter):
        (WebCore::storageSetter):
        * bindings/v8/custom/V8StyleSheetListCustom.cpp:
        (WebCore::V8StyleSheetList::namedPropertyGetter):
        * bindings/v8/custom/V8WebGLRenderingContextCustom.cpp:
        (WebCore::V8WebGLRenderingContext::getAttachedShadersCallback):
        (WebCore::V8WebGLRenderingContext::getProgramParameterCallback):
        (WebCore::V8WebGLRenderingContext::getShaderParameterCallback):
        (WebCore::V8WebGLRenderingContext::getUniformCallback):
        (WebCore::vertexAttribAndUniformHelperf):
        (WebCore::uniformHelperi):
        (WebCore::uniformMatrixHelper):

2012-05-21  Rob Buis  <rbuis@rim.com>

        Shrink FontDescription object size
        https://bugs.webkit.org/show_bug.cgi?id=86950

        Reviewed by Alexey Proskuryakov.

        Reduce object size of FontDescription by 8 bytes on 64-bit, 4 bytes on 32-bit systems.
        Note that this means Font, StyleInheritedData and RenderSVGInlineText shrink too.

        * platform/graphics/FontDescription.cpp:
        * platform/graphics/FontDescription.h:
        (WebCore::FontDescription::script):
        (FontDescription):

2012-05-21  Abhishek Arya  <inferno@chromium.org>

        Regression(r117482): Run-in crashes relating to generated content and inline line box clearing.
        https://bugs.webkit.org/show_bug.cgi?id=86879

        Reviewed by Julien Chaffraix.

        Tests: fast/runin/generated-content-crash.html
               fast/runin/move-run-in-original-position-crash.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::addChildIgnoringAnonymousColumnBlocks): Use the new helper
        placeRunInIfNeeded. Do not place the run-in if it is a generated container since
        the caller such as updateBeforeAfterContent might be keeping a reference to it
        and adding children to it later.
        (WebCore::destroyRunIn): Add ability to clear line box tree for inlines.
        (WebCore::RenderBlock::placeRunInIfNeeded): Helper to place run-in. Add an
        argument to not modify generated content during addChild, it should be moved
        only at end of updateBeforeAfterContent.
        (WebCore::RenderBlock::moveRunInUnderSiblingBlockIfNeeded): 
        (WebCore::RenderBlock::runInIsPlacedIntoSiblingBlock): helper to tell if this run-in
        is actually placed into the next sibling block.
        (WebCore::RenderBlock::moveRunInToOriginalPosition):
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::deleteLineBoxTree): like RenderBlock, add a helper
        for deleteLineBoxTree. Virtualizing this might not be good, since this is
        the only call site for inline line box tree clearing and RenderBlock::deleteLineBoxTree
        is called a lot.
        * rendering/RenderObjectChildList.cpp:
        (WebCore::createRendererForBeforeAfterContent): fix a typo.
        (WebCore::RenderObjectChildList::updateBeforeAfterContent): If insertBefore is equal
        to the intruded run-in, then set it to next sibling so that new child will come after it. At
        the end, place the generatedContainer if it is a run-in.

2012-05-21  James Robinson  <jamesr@chromium.org>

        [chromium] Port chromium compositor to use WebFilterOperation(s)
        https://bugs.webkit.org/show_bug.cgi?id=87046

        Reviewed by Adrienne Walker.

        This converts all compositor implementation logic to use WebFilterOperation(s) directly instead of the WebCore
        types. GraphicsLayerChromium bridges between a WebCore::FilterOperations to WebFilterOperations, doing the
        necessary type conversions and checking for filters that our compositor implementation supports. This cleans up
        the chromium compositor's dependencies and removes any thread constraints from WebCore::FilterOperation /
        WebCore::FilterOperations.

        Covered by existing layout tests and unit tests in FilterOperationsTest.cpp

        * WebCore.gyp/WebCore.gyp:
        * WebCore.gypi:
        * platform/chromium/support/WebFilterOperations.cpp: Moved to Source/Platform/chromium/src/
        * platform/graphics/chromium/GraphicsLayerChromium.cpp:
        (WebCore::copyWebCoreFilterOperationsToWebFilterOperations):
        (WebCore):
        (WebCore::GraphicsLayerChromium::setFilters):
        (WebCore::GraphicsLayerChromium::setBackgroundFilters):
        (WebCore::GraphicsLayerChromium::updateTransform):
        (WebCore::GraphicsLayerChromium::updateChildrenTransform):
        * platform/graphics/chromium/GraphicsLayerChromium.h:
        (GraphicsLayerChromium):
        * platform/graphics/chromium/LayerChromium.cpp:
        (WebCore::LayerChromium::setFilters):
        (WebCore::LayerChromium::setBackgroundFilters):
        (WebCore::LayerChromium::pushPropertiesTo):
        * platform/graphics/chromium/LayerChromium.h:
        (LayerChromium):
        (WebCore::LayerChromium::filters):
        (WebCore::LayerChromium::backgroundFilters):
        * platform/graphics/chromium/RenderSurfaceChromium.h:
        (WebCore::RenderSurfaceChromium::setFilters):
        (WebCore::RenderSurfaceChromium::filters):
        (WebCore::RenderSurfaceChromium::setBackgroundFilters):
        (WebCore::RenderSurfaceChromium::backgroundFilters):
        (RenderSurfaceChromium):
        * platform/graphics/chromium/cc/CCDamageTracker.cpp:
        (WebCore::expandDamageRectWithFilters):
        (WebCore::expandDamageRectInsideRectWithFilters):
        (WebCore::CCDamageTracker::updateDamageTrackingState):
        * platform/graphics/chromium/cc/CCDamageTracker.h:
        (WebKit):
        (WebCore):
        (CCDamageTracker):
        * platform/graphics/chromium/cc/CCLayerImpl.cpp:
        (WebCore::CCLayerImpl::setFilters):
        (WebCore::CCLayerImpl::setBackgroundFilters):
        * platform/graphics/chromium/cc/CCLayerImpl.h:
        (CCLayerImpl):
        (WebCore::CCLayerImpl::filters):
        (WebCore::CCLayerImpl::backgroundFilters):
        * platform/graphics/chromium/cc/CCRenderSurface.cpp:
        (WebCore::CCRenderSurface::applyFilters):
        * platform/graphics/chromium/cc/CCRenderSurface.h:
        (WebCore::CCRenderSurface::setFilters):
        (WebCore::CCRenderSurface::filters):
        (CCRenderSurface):
        (WebCore::CCRenderSurface::setBackgroundFilters):
        (WebCore::CCRenderSurface::backgroundFilters):
        * platform/graphics/chromium/cc/CCRenderSurfaceFilters.cpp:
        (WebCore::CCRenderSurfaceFilters::apply):
        * platform/graphics/chromium/cc/CCRenderSurfaceFilters.h:
        (WebKit):
        (CCRenderSurfaceFilters):
        * testing/Internals.cpp:
        (WebCore::Internals::setBackgroundBlurOnNode):

2012-05-15  Gavin Barraclough  <barraclough@apple.com>

        Add support for private names
        https://bugs.webkit.org/show_bug.cgi?id=86509

        Reviewed by Oliver Hunt.

        The spec isn't final, but we can start adding support to allow property maps
        to contain keys that aren't identifiers.

        Test: fast/js/names.html

        * bindings/js/JSCSSStyleDeclarationCustom.cpp:
        (WebCore::cssPropertyIDForJSCSSPropertyName):
        * bindings/js/JSDOMBinding.cpp:
        (WebCore::findAtomicString):
        (WebCore::objectToStringFunctionGetter):
        * bindings/js/JSDOMBinding.h:
        (WebCore::propertyNameToString):
        (WebCore::propertyNameToAtomicString):
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::nonCachingStaticFunctionGetter):
        * bindings/js/JSHistoryCustom.cpp:
        (WebCore::nonCachingStaticBackFunctionGetter):
        (WebCore::nonCachingStaticForwardFunctionGetter):
        (WebCore::nonCachingStaticGoFunctionGetter):
        * bindings/js/JSLocationCustom.cpp:
        (WebCore::nonCachingStaticReplaceFunctionGetter):
        (WebCore::nonCachingStaticReloadFunctionGetter):
        (WebCore::nonCachingStaticAssignFunctionGetter):
        * bridge/c/c_class.cpp:
        (JSC::Bindings::CClass::methodsNamed):
        (JSC::Bindings::CClass::fieldNamed):
        * bridge/c/c_instance.cpp:
        (JSC::Bindings::CInstance::getMethod):
        * bridge/jni/jsc/JavaClassJSC.cpp:
        (JavaClass::methodsNamed):
        (JavaClass::fieldNamed):
        * bridge/jni/jsc/JavaInstanceJSC.cpp:
        * bridge/objc/objc_class.mm:
        (JSC::Bindings::ObjcClass::methodsNamed):
        (JSC::Bindings::ObjcClass::fieldNamed):
        (JSC::Bindings::ObjcClass::fallbackObject):
        * bridge/objc/objc_instance.mm:
        (ObjcInstance::setValueOfUndefinedField):
        (ObjcInstance::getValueOfUndefinedField):
            - Removed PropertyName::impl(), call publicName() to get the string associated with a name.

2012-05-21  Tim Horton  <timothy_horton@apple.com>

        GeneratorGeneratedImage should cache intermediate images
        https://bugs.webkit.org/show_bug.cgi?id=86906
        <rdar://problem/11484852>

        Reviewed by Dean Jackson.

        Cache generated images in GeneratorGeneratedImage. The cache is invalidated:
            a) if the Generator's hash changes.
            b) if the rendered size changes.
            c) if the cached image is incompatible with the destination context (acceleration state or CTM scale).
            d) after one second of disuse.

        Add a hash() function to Generator, which should be implemented in subclasses
        to provide a straightforward way to determine if Generators have been mutated
        in a way that will affect the resultant rendering.

        No new tests, performance optimization. Correctness is covered by the multitude of existing gradient tests.

        * platform/graphics/Generator.h:
        (Generator):
        * platform/graphics/GeneratorGeneratedImage.cpp:
        (WebCore::GeneratorGeneratedImage::drawPattern):
        * platform/graphics/GeneratorGeneratedImage.h:
        (WebCore):
        (GeneratorGeneratedImage):
        (WebCore::GeneratorGeneratedImage::~GeneratorGeneratedImage):
        (WebCore::GeneratorGeneratedImage::GeneratorGeneratedImage):
        (GeneratedImageCacheTimer):
        (WebCore::GeneratorGeneratedImage::GeneratedImageCacheTimer::GeneratedImageCacheTimer):
        (WebCore::GeneratorGeneratedImage::GeneratedImageCacheTimer::restart):
        * platform/graphics/Gradient.cpp:
        (WebCore::Gradient::Gradient):
        (WebCore::Gradient::addColorStop):
        (WebCore::Gradient::sortStopsIfNecessary):
        (WebCore::Gradient::setSpreadMethod):
        (WebCore::Gradient::setGradientSpaceTransform):
        (WebCore::Gradient::hash):
        * platform/graphics/Gradient.h:
        (WebCore::Gradient::setP0):
        (WebCore::Gradient::setP1):
        (WebCore::Gradient::setStartRadius):
        (WebCore::Gradient::setEndRadius):
        (Gradient):
        (WebCore::Gradient::clearHashCache):
        * platform/graphics/GraphicsContext.cpp:
        (WebCore::GraphicsContext::isCompatibleWithBuffer):
        (WebCore):
        * platform/graphics/GraphicsContext.h:
        (GraphicsContext):

2012-05-21  Emil A Eklund  <eae@chromium.org>

        Fix bug in paintNinePieceImage exposed by subpixel change
        https://bugs.webkit.org/show_bug.cgi?id=87060

        Reviewed by Levi Weintraub.

        Fix rounding in paintNinePieceImage where the left/right images where
        drawn on subpixel bounds.

        Covered by existing tests.

        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paintNinePieceImage):

2012-05-21  Emil A Eklund  <eae@chromium.org>

        Move padding/margin/offset writing mode logic from RenderStyle to LengthBox
        https://bugs.webkit.org/show_bug.cgi?id=86970

        Reviewed by Eric Seidel.

        Move writing mode and bidi logic for paddings, margins and offsets from
        RenderStyle to LengthBox. This way the same logic can be used for all
        three removing unnecessary code duplication.

        No new tests, no change in functionality.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/LengthBox.cpp: Added.
        * platform/LengthBox.h:
        * rendering/style/RenderStyle.cpp:
        * rendering/style/RenderStyle.h:

2012-05-21  Mike West  <mkwst@chromium.org>

        Improving console error for CSP-blocked  `setTimeout` and `setInterval` evaluation.
        https://bugs.webkit.org/show_bug.cgi?id=86943

        Reviewed by Adam Barth.

        If the inspector is open, a stack trace is generated before calling
        ContentSecurityPolicy::allowEval, and passed through to
        ContentSecurityPolicy::reportViolation for use in the console message.

        Test: http/tests/inspector-enabled/contentSecurityPolicy-blocks-setInterval.html
              http/tests/inspector-enabled/contentSecurityPolicy-blocks-setTimeout.html

        * bindings/js/ScheduledAction.cpp:
        (WebCore::ScheduledAction::create):
        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        (WebCore::WindowSetTimeoutImpl):
        * page/ContentSecurityPolicy.cpp:
        (CSPDirectiveList):
        (WebCore::CSPDirectiveList::reportViolation):
        (WebCore::CSPDirectiveList::checkEvalAndReportViolation):
        (WebCore::CSPDirectiveList::allowEval):
        (WebCore):
        (WebCore::isAllowedByAllWithCallStack):
        (WebCore::isAllowedByAllWithURL):
        (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::allowConnectToSource):
        * page/ContentSecurityPolicy.h:
        (WebCore):

2012-05-21  Antoine Labour  <piman@chromium.org>

        Don't force rendering in finishAllRendering
        https://bugs.webkit.org/show_bug.cgi?id=86919

        Reviewed by James Robinson.

        After we acquire the texture layers on the main thread, we can't draw.
        In particular if we destroyed the texture ids used previously by
        TextureLayerChromium, drawing before a commit would cause a
        bind-after-destroy.

        Tested by CCLayerTreeHostTestFinishAllRendering.

        * platform/graphics/chromium/cc/CCThreadProxy.cpp:
        (WebCore::CCThreadProxy::CCThreadProxy):
        (WebCore::CCThreadProxy::finishAllRenderingOnImplThread):
        (WebCore::CCThreadProxy::scheduledActionDrawAndSwapInternal):

2012-05-21  Joshua Bell  <jsbell@chromium.org>

        IndexedDB: Store key paths in IDBKeyPath type instead of String
        https://bugs.webkit.org/show_bug.cgi?id=85298

        Reviewed by Tony Chang, Kentaro Hara and James Robinson.

        Migrate from storing key paths as (nullable) Strings to a dedicated IDBKeyPath
        type. Prep work for supporting array-type key paths: http://webkit.org/b/84207

        Only functional change is handling of null/undefined parameters for key paths,
        to align with IDB spec, covered by layout test.

        Test: storage/indexeddb/keypath-basics.html
        Test: WebKit/chromium/IDBLevelDBCodingTest.cpp

        * Modules/indexeddb/IDBAny.cpp: Allow IDBAny to yield DOMStrings.
        (WebCore::IDBAny::createString):
        (WebCore):
        (WebCore::IDBAny::string):
        (WebCore::IDBAny::set):
        * Modules/indexeddb/IDBAny.h:
        (IDBAny):
        * Modules/indexeddb/IDBBackingStore.h: Switch from String to IDBKeyPath.
        (IDBBackingStore):
        * Modules/indexeddb/IDBDatabase.cpp: Switch from String to IDBKeyPath.
        (WebCore::IDBDatabase::createObjectStore):
        * Modules/indexeddb/IDBDatabaseBackendImpl.cpp: Switch from String to IDBKeyPath.
        (WebCore::IDBDatabaseBackendImpl::createObjectStore):
        (WebCore::IDBDatabaseBackendImpl::loadObjectStores):
        * Modules/indexeddb/IDBDatabaseBackendImpl.h: Switch from String to IDBKeyPath.
        (IDBDatabaseBackendImpl):
        * Modules/indexeddb/IDBDatabaseBackendInterface.h: Switch from String to IDBKeyPath.
        (WebCore):
        (IDBDatabaseBackendInterface):
        * Modules/indexeddb/IDBIndex.h: Switch from String to IDBAny (via IDBKeyPath).
        (WebCore::IDBIndex::keyPath):
        * Modules/indexeddb/IDBIndex.idl: Switch from DOMString? to IDBAny.
        * Modules/indexeddb/IDBIndexBackendImpl.cpp: Switch from String to IDBKeyPath.
        (WebCore::IDBIndexBackendImpl::IDBIndexBackendImpl):
        * Modules/indexeddb/IDBIndexBackendImpl.h: Switch from String to IDBKeyPath.
        (WebCore::IDBIndexBackendImpl::create):
        (WebCore::IDBIndexBackendImpl::keyPath):
        (IDBIndexBackendImpl):
        * Modules/indexeddb/IDBIndexBackendInterface.h: Switch from String to IDBKeyPath.
        (WebCore):
        (IDBIndexBackendInterface):
        * Modules/indexeddb/IDBKeyPath.cpp: Non-trivial method implementations.
        (WebCore::IDBKeyPath::isValid):
        (WebCore):
        (WebCore::IDBKeyPath::operator PassRefPtr<IDBAny>):
        * Modules/indexeddb/IDBKeyPath.h: Introduce IDBKeyPath type.
        (IDBKeyPath):
        (WebCore::IDBKeyPath::IDBKeyPath):
        (WebCore::IDBKeyPath::type):
        (WebCore::IDBKeyPath::array):
        (WebCore::IDBKeyPath::string):
        (WebCore::IDBKeyPath::isNull):
        (WebCore):
        * Modules/indexeddb/IDBKeyPathBackendImpl.cpp: Switch from String to IDBKeyPath.
        (WebCore::IDBKeyPathBackendImpl::createIDBKeysFromSerializedValuesAndKeyPath):
        (WebCore::IDBKeyPathBackendImpl::injectIDBKeyIntoSerializedValue):
        * Modules/indexeddb/IDBKeyPathBackendImpl.h: Switch from String to IDBKeyPath.
        (WebCore):
        (IDBKeyPathBackendImpl):
        * Modules/indexeddb/IDBLevelDBBackingStore.cpp: Switch from String to IDBKeyPath, with back-compat.
        (WebCore):
        (WebCore::putIDBKeyPath):
        (WebCore::IDBLevelDBBackingStore::getObjectStores):
        (WebCore::IDBLevelDBBackingStore::createObjectStore):
        (WebCore::IDBLevelDBBackingStore::getIndexes):
        (WebCore::IDBLevelDBBackingStore::createIndex):
        * Modules/indexeddb/IDBLevelDBBackingStore.h:
        (IDBLevelDBBackingStore):
        * Modules/indexeddb/IDBLevelDBCoding.cpp: New coding scheme for key paths (with back-compat).
        (IDBLevelDBCoding):
        (WebCore::IDBLevelDBCoding::encodeIDBKeyPath):
        (WebCore::IDBLevelDBCoding::decodeIDBKeyPath):
        * Modules/indexeddb/IDBLevelDBCoding.h: Add key-path-specific methods.
        (WebCore):
        (IDBLevelDBCoding):
        * Modules/indexeddb/IDBObjectStore.cpp: Switch from String to IDBKeyPath.
        (WebCore::IDBObjectStore::keyPath):
        (WebCore::IDBObjectStore::createIndex):
        (WebCore):
        * Modules/indexeddb/IDBObjectStore.h: Switch from String to IDBAny (via IDBKeyPath).
        (IDBObjectStore):
        * Modules/indexeddb/IDBObjectStore.idl: Switch from DOMString? to IDBAny.
        * Modules/indexeddb/IDBObjectStoreBackendImpl.cpp: Switch from String to IDBKeyPath.
        (WebCore::IDBObjectStoreBackendImpl::IDBObjectStoreBackendImpl):
        (WebCore::fetchKeyFromKeyPath):
        (WebCore::injectKeyIntoKeyPath):
        (WebCore::IDBObjectStoreBackendImpl::createIndex):
        (WebCore::IDBObjectStoreBackendImpl::loadIndexes):
        * Modules/indexeddb/IDBObjectStoreBackendImpl.h: Switch from String to IDBKeyPath.
        (WebCore::IDBObjectStoreBackendImpl::create):
        (WebCore::IDBObjectStoreBackendImpl::keyPath):
        (IDBObjectStoreBackendImpl):
        * Modules/indexeddb/IDBObjectStoreBackendInterface.h: Switch from String to IDBKeyPath.
        (WebCore):
        (IDBObjectStoreBackendInterface):
        * bindings/v8/Dictionary.cpp: Add getter for DOMString[] (i.e. Vector<String>)
        (WebCore):
        (WebCore::Dictionary::get):
        * bindings/v8/Dictionary.h:
        (Dictionary):
        * bindings/v8/IDBBindingUtilities.cpp: Switch from String to IDBKeyPath.
        (WebCore::createIDBKeyFromSerializedValueAndKeyPath):
        (WebCore::injectIDBKeyIntoSerializedValue):
        * bindings/v8/IDBBindingUtilities.h: Switch from String to IDBKeyPath.
        (WebCore):
        * bindings/v8/custom/V8IDBAnyCustom.cpp: Support String/DOMString.
        (WebCore::toV8):
        * dom/DOMStringList.h: Allow easy (const) access to strings.
        (WebCore::DOMStringList::operator const Vector<String>&):
        (DOMStringList):
        * inspector/InspectorIndexedDBAgent.cpp: Temporary shim for non-strings: see http://webkit.org/b/84303
        (WebCore):
        * platform/chromium/PlatformSupport.h: Switch from String to IDBKeyPath.
        (WebCore):
        (PlatformSupport):
        * storage/chromium/IDBKeyPathBackendImpl.cpp: Switch from String to IDBKeyPath.
        (WebCore::IDBKeyPathBackendImpl::createIDBKeysFromSerializedValuesAndKeyPath):
        (WebCore::IDBKeyPathBackendImpl::injectIDBKeyIntoSerializedValue):

2012-05-21  Zhenyao Mo  <zmo@google.com>

        Restore WebGL's framebuffer binding after DrawingBuffer's prepareBackBuffer()
        https://bugs.webkit.org/show_bug.cgi?id=87032

        Reviewed by James Robinson.

        * platform/graphics/chromium/DrawingBufferChromium.cpp:
        (WebCore::DrawingBuffer::prepareBackBuffer): restore the user's framebuffer binding if there is one.

2012-05-21  Ryosuke Niwa  <rniwa@webkit.org>

        isStartOfDocument and isEndOfDocument are poorly named
        https://bugs.webkit.org/show_bug.cgi?id=86649

        Reviewed by Levi Weintraub.

        Renamed isEndOfDocument to isEndOfEditableOrNonEditableContent because that's what this function checks.

        Also added new versions of isStartOfDocument and isEndOfDocument that correctly cross editing boundaries
        to be used in selectFrameElementInParentIfFullySelected.

        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::moveParagraphContentsToNewBlockIfNecessary):
        * editing/Editor.cpp:
        (WebCore::Editor::insertLineBreak):
        (WebCore::Editor::insertParagraphSeparator):
        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::doApply):
        * editing/VisibleSelection.cpp:
        (WebCore::VisibleSelection::setStartAndEndFromBaseAndExtentRespectingGranularity):
        * editing/visible_units.cpp:
        (WebCore::isEndOfEditableOrNonEditableContent):
        * editing/visible_units.h:

2012-05-21 Anna Cavender  <annacc@chromium.org>

        Only render text track cues if kind=captions or kind=subtitles.
        https://bugs.webkit.org/show_bug.cgi?id=83321

        Reviewed by Eric Carlson.

        No new tests. Modification to media/track/track-kind.html

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::textTrackKindChanged):
           If the kind changes from a 'visible' kind to a 'non-visible' kind,
           update the track's mode to HIDDEN.

        * html/shadow/MediaControlElements.cpp:
        (WebCore::MediaControlTextTrackContainerElement::updateDisplay):
            Do not render cues from tracks that are not captions or subtitles.

        * html/track/TextTrack.cpp:
        (WebCore::TextTrack::setMode):
            If the track's mode changes from SHOWING to HIDDEN or DISABLED,
            ensure any currently visible cues will no longer be rendered.

        * html/track/TextTrackCue.cpp:
        (WebCore::TextTrackCue::removeDisplayTree): New method.
        * html/track/TextTrackCue.h:
        (TextTrackCue):
 
2012-05-21  Andreas Kling  <kling@webkit.org>

        CSS: Move duplicate property elimination to parser.
        <http://webkit.org/b/86948>

        Reviewed by Antti Koivisto.

        Remove the StylePropertySet constructor that handled elimination of duplicate
        properties and move that to a new parser method, CSSParser::filteredProperties().
        Call sites are converted to using StylePropertySet(const Vector<CSSProperty>&).

        Instead of building a hashmap of seen properties, use the new WTF::BitArray class
        to track whether a given property ID has been seen, and whether we have an
        !important entry for a given ID.

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):
        (WebCore::CSSParser::parseDeclaration):
        (WebCore::CSSParser::filteredProperties):
        (WebCore::CSSParser::createStyleRule):
        (WebCore::CSSParser::createFontFaceRule):
        (WebCore::CSSParser::createPageRule):
        (WebCore::CSSParser::createKeyframe):
        * css/CSSParser.h:
        * css/StylePropertySet.cpp:
        (WebCore::StylePropertySet::StylePropertySet):
        (WebCore::StylePropertySet::addParsedProperties):
        * css/StylePropertySet.h:
        (WebCore::StylePropertySet::create):
        (StylePropertySet):
        * svg/SVGFontFaceElement.cpp:
        (WebCore::SVGFontFaceElement::rebuildFontFace):

2012-05-21  Joshua Bell  <jsbell@chromium.org>

        IndexedDB: Index key paths that yield invalid keys should not fail an add/put
        https://bugs.webkit.org/show_bug.cgi?id=86122

        Reviewed by Tony Chang.

        A clause was removed from the IDB spec. Previously, on add/put, if evaluating an
        index's key path yielded a value that was not a valid key, an exception would be
        raised. Now, it is treated the same as if no value was yielded.

        Test: storage/indexeddb/index-basics.html
        Test: storage/indexeddb/index-basics-workers.html
        Test: storage/indexeddb/objectstore-basics.html
        Test: storage/indexeddb/objectstore-basics-workers.html

        * Modules/indexeddb/IDBObjectStoreBackendImpl.cpp:
        (WebCore::IDBObjectStoreBackendImpl::put): Preconditions removed
        (WebCore::IDBObjectStoreBackendImpl::putInternal): Treat invalid keys the same as missing keys.

2012-05-21  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: refactor revision history to not include resource itself.
        https://bugs.webkit.org/show_bug.cgi?id=87026

        Reviewed by Vsevolod Vlasov.

        This change makes resource contain pure revisions, it stops updating Resources upon free flow editing.

        * inspector/front-end/JavaScriptSource.js:
        (WebInspector.JavaScriptSource.prototype.setFormatted.didGetContent.didFormatContent):
        (WebInspector.JavaScriptSource.prototype.setFormatted.didGetContent):
        (WebInspector.JavaScriptSource.prototype.setFormatted):
        * inspector/front-end/JavaScriptSourceFrame.js:
        (WebInspector.JavaScriptSourceFrame.prototype.commitEditing):
        (WebInspector.JavaScriptSourceFrame.prototype._onContentChanged):
        (WebInspector.JavaScriptSourceFrame.prototype._didEditContent):
        * inspector/front-end/Resource.js:
        (WebInspector.Resource.prototype.addRevision):
        (WebInspector.Resource.prototype._innerRequestContent.callback):
        (WebInspector.Resource.prototype._innerRequestContent):
        (WebInspector.Resource.prototype.revertToOriginal):
        (WebInspector.ResourceRevision.prototype.revertToThis):
        (WebInspector.ResourceRevision.prototype.requestContent):
        (WebInspector.ResourceRevision.prototype.searchInContent):
        (WebInspector.ResourceRevision.prototype._persistRevision):
        * inspector/front-end/RevisionHistoryView.js:
        (WebInspector.RevisionHistoryView):
        (WebInspector.RevisionHistoryView.prototype._revisionAdded):
        (WebInspector.RevisionHistoryTreeElement):
        * inspector/front-end/ScriptSnippetModel.js:
        (WebInspector.ScriptSnippetModel.prototype.setScriptSnippetContent):
        * inspector/front-end/StylesPanel.js:
        (WebInspector.StyleSourceFrame.prototype.commitEditing):
        (WebInspector.StyleSourceFrame.prototype._didEditContent):
        (WebInspector.StyleSourceFrame.prototype._onContentChanged):
        * inspector/front-end/UISourceCode.js:
        (WebInspector.UISourceCode.prototype._revisionAdded):
        (WebInspector.UISourceCode.prototype.contentChanged):
        (WebInspector.UISourceCode.prototype.commitWorkingCopy):
        * inspector/front-end/inspector.js:
        (WebInspector._doLoadedDoneWithCapabilities.get if):

2012-05-21  Allan Sandfeld Jensen  <allan.jensen@nokia.com>

        GCC 4.7 and C++11
        https://bugs.webkit.org/show_bug.cgi?id=86465

        Reviewed by Darin Adler.

        Avoid triggering C++11 string literals and use nullptr for correct type casting.

        * bindings/js/JSNodeFilterCondition.cpp:
        (WebCore::JSNodeFilterCondition::JSNodeFilterCondition):
        * platform/sql/SQLiteFileSystem.cpp:
        (WebCore::SQLiteFileSystem::getFileNameForNewDatabase):

2012-05-18  Michael Nordman  <michaeln@google.com>

        [chromium] DomStorage events handling needs TLC (2)
        https://bugs.webkit.org/show_bug.cgi?id=85221
        Alter the StorageArea virtual interface such that the mutators no longer
        return old values. This is to allow implementations of the interface to operate
        more asynchronously.

        Reviewed by Adam Barth.

        No new tests. Existing tests cover this.

        * storage/StorageArea.h: Alter the interface so the mutators no longer return previous values
        * storage/StorageAreaImpl.cpp:
        (WebCore::StorageAreaImpl::disabledByPrivateBrowsingInFrame):  removed an unneeded PLATFORM(CHROMIUM) guard
        (WebCore::StorageAreaImpl::setItem): no longer return the old value
        (WebCore::StorageAreaImpl::removeItem): no longer return the old value
        (WebCore::StorageAreaImpl::clear): no longer return whether something was cleared
        * storage/StorageAreaImpl.h: match StorageArea's virtual interface


2012-05-21  MORITA Hajime  <morrita@google.com>

        [Refactoring] Node should have youngestShadowRoot.
        https://bugs.webkit.org/show_bug.cgi?id=86427

        Reviewed by Dimitri Glazkov.

        This change adds Node::youngestShadowRoot() and replaced
        ElementShadow::youngestShadowRoot() with it if appropriate.

        By introducing this, traversal across node and its shadow tree can
        look more fluent and idiomatic. There are a few non-trivial traversal
        remaining like ElementShadow::recalcStyle() and attach().
        But they should be flattened out eventually.

        No new tests. Refactoring.

        * dom/ContainerNodeAlgorithms.cpp:
        (WebCore::ChildNodeInsertionNotifier::notifyDescendantInsertedIntoTree):
        * dom/Document.cpp:
        (WebCore::Document::buildAccessKeyMap):
        * dom/ElementShadow.cpp:
        * dom/ElementShadow.h:
        (ElementShadow):
        (WebCore::Node::youngestShadowRoot):
        (WebCore):
        * dom/Node.h:
        (Node):
        * dom/TreeScopeAdopter.cpp:
        (WebCore::TreeScopeAdopter::moveTreeToNewScope):
        (WebCore::TreeScopeAdopter::moveTreeToNewDocument):
        * dom/TreeScopeAdopter.h:
        (TreeScopeAdopter):
        * html/shadow/TextFieldDecorationElement.cpp:
        (WebCore::getDecorationRootAndDecoratedRoot):

2012-05-21  Christophe Dumez  <christophe.dumez@intel.com>

        Add support for MessagePortArray type to JSC
        https://bugs.webkit.org/show_bug.cgi?id=84093

        Reviewed by Adam Barth.

        Add support for MessagePortArray type to JSC code generator similarly
        to what was done for the V8 generator in r114319.

        Update bindings test results to reflect to change to the bindings
        generator.

        * CMakeLists.txt: Add new DeliveredIntent files to CMake.
        * bindings/js/JSDOMBinding.h:
        (WebCore):
        (WebCore::jsArray): Tweak jsArray() so that it accepts MessagePortArray as argument.
        * bindings/scripts/CodeGeneratorJS.pm:
        (JSValueToNative):
        (NativeToJSValue):
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::jsTestObjPrototypeFunctionSerializedValue):
        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp:
        (WebCore::JSTestSerializedScriptValueInterfaceConstructor::constructJSTestSerializedScriptValueInterface):
        (WebCore::jsTestSerializedScriptValueInterfacePorts):
        (WebCore::setJSTestSerializedScriptValueInterfaceValue):
        (WebCore::setJSTestSerializedScriptValueInterfaceCachedValue):
        (WebCore::jsTestSerializedScriptValueInterfacePrototypeFunctionAcceptTransferList):
        (WebCore::jsTestSerializedScriptValueInterfacePrototypeFunctionMultiTransferList):

2012-05-21  Alexander Pavlov  <apavlov@chromium.org>

        Web Inspector: [Styles] Cannot tab from selector of inherited rule, which in turn has leading inherited properties
        https://bugs.webkit.org/show_bug.cgi?id=87014

        Reviewed by Yury Semikhatsky.

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

2012-05-21  Greg Billock  <gbillock@google.com>

        Add suggestions field to web intents API.
        https://bugs.webkit.org/show_bug.cgi?id=86791

        Reviewed by Adam Barth.

        The |suggestions| field is used by the client to avoid an empty
        web intents selection window (picker). The UA can add the given
        suggestions to the picker if it would otherwise be empty. See
        http://dvcs.w3.org/hg/web-intents/raw-file/tip/spec/Overview.html#intent-parameters-dictionary

        * Modules/intents/DeliveredIntent.cpp:
        (WebCore::DeliveredIntent::DeliveredIntent):
        * Modules/intents/Intent.cpp:
        (WebCore::Intent::create):
        (WebCore::Intent::Intent):
        * Modules/intents/Intent.h:
        (WebCore::Intent::suggestions):
        (Intent):

2012-05-21  Stephen Chenney  <schenney@chromium.org>

        SVGAnimatedPropertyTearOff does not clear a self pointer on deletion
        https://bugs.webkit.org/show_bug.cgi?id=86119

        Reviewed by Nikolas Zimmermann.

        SVGAnimatedPropertyTearOff contains two SVGPropertyTearOff objects
        that have a pointer back to the SVGAnimatedPropertyTearOff. JS may
        also have a reference to these SVGPropertyTearOff objects. When the
        SVGAnimatedPropertyTearOff is deleted, the SVGPropertyTearOff objects
        may live on, but the pointer back to the deleted animated property
        tear off is left invalid. This patch clears the pointers on destruction
        of the SVGAnimatedPropertyTearOff.

        Test: svg/custom/bug86119.html

        * svg/properties/SVGAnimatedPropertyTearOff.h:
        (WebCore::SVGAnimatedPropertyTearOff::~SVGAnimatedPropertyTearOff):
        (SVGAnimatedPropertyTearOff):

2012-05-21  Stephen Chenney  <schenney@chromium.org>

        [Chromium] REGRESSION: Assertion failure on svg/custom/acid3-test-77.html
        https://bugs.webkit.org/show_bug.cgi?id=86715

        Reviewed by Nikolas Zimmermann.

        Calls to clear the text positioning elements in RenderSVGText must be
        protected with a FontCachePurgeProtector so that fonts are not removed
        before the SVG metrics are rebuilt. The protection must cover both the
        cache clearing and the reconstruction calls.

        Patch fixes existing tests.

        * rendering/svg/RenderSVGText.cpp:
        (WebCore::RenderSVGText::subtreeChildWasAdded):
        (WebCore::RenderSVGText::subtreeChildWasRemoved):
        (WebCore::RenderSVGText::subtreeTextDidChange):
        (WebCore::RenderSVGText::removeChild):

2012-05-21  Stephen Chenney  <schenney@chromium.org>

        SVGTextRunRenderingContext can return null font, calling code asserts not null
        https://bugs.webkit.org/show_bug.cgi?id=86738

        Reviewed by Nikolas Zimmermann.

        SVGTextRunRenderingContext::glyphDataForCharacter was returning a glyph with
        null font data for numerous code paths. It seems that it was doing so
        whenever it detected null fontData, rather than try to continue.
        Calling code would then immediately assert on this null fontData.

        This patch refactors SVGTextRunRenderingContext::glyphDataForCharacter
        so that it never returns null font data, adding an assertion to that
        effect. In particular, when the font data is null the code will reach
        the fallback glyph calculations.

        Refactoring covered by existing tests. A previously crashing test, svg/custom/acid3-test-77.html, no longer crashes.

        * rendering/svg/SVGTextRunRenderingContext.cpp:
        (WebCore::SVGTextRunRenderingContext::glyphDataForCharacter):

2012-05-21  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: switch buildDominatedNodes function to front-end calculated _dominatorsTree
        https://bugs.webkit.org/show_bug.cgi?id=87022

        The new version is using _dominatorsTree array that was build at front-end.

        Reviewed by Yury Semikhatsky.

        * inspector/front-end/HeapSnapshot.js:
        (WebInspector.HeapSnapshot.prototype._init):
        (WebInspector.HeapSnapshot.prototype._buildDominatedNodes):

2012-05-21  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: change WebCore/English.lproj/locallizedStrings encoding from UTF-16 to UTF-8.
        https://bugs.webkit.org/show_bug.cgi?id=86822

        Reviewed by Yury Semikhatsky.

        * English.lproj/localizedStrings.js:

2012-05-21  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Move working copy support to UISourceCode and use it for both styles and scripts.
        https://bugs.webkit.org/show_bug.cgi?id=87021

        Reviewed by Pavel Feldman.

        UISourceCode now listens for RevisionAdded event.
        Virtual methods workingCopyChanged and workingCopyCommitted added to UISourceCode and implemented in descendants.
        DebuggerResourceBinding does not call contentChanged on UISourceCode explicitly anymore.

        * inspector/front-end/DebuggerResourceBinding.js:
        (WebInspector.DebuggerResourceBinding.setScriptSource.didEditScriptSource):
        (WebInspector.DebuggerResourceBinding.setScriptSource):
        * inspector/front-end/JavaScriptSource.js:
        (WebInspector.JavaScriptSource.prototype.workingCopyCommitted):
        * inspector/front-end/JavaScriptSourceFrame.js:
        (WebInspector.JavaScriptSourceFrame.prototype.commitEditing):
        * inspector/front-end/ScriptSnippetModel.js:
        (WebInspector.SnippetJavaScriptSource.prototype.workingCopyCommitted):
        * inspector/front-end/StylesPanel.js:
        (WebInspector.StyleSource.prototype.workingCopyCommitted):
        (WebInspector.StyleSource.prototype.workingCopyChanged):
        (WebInspector.StyleSourceFrame):
        (WebInspector.StyleSourceFrame.prototype.commitEditing):
        (WebInspector.StyleSourceFrame.prototype.afterTextChanged):
        (WebInspector.StyleSourceFrame.prototype._didEditContent):
        (WebInspector.StyleSourceFrame.prototype._onContentChanged):
        * inspector/front-end/UISourceCode.js:
        (WebInspector.UISourceCode):
        (WebInspector.UISourceCode.prototype._revisionAdded):
        (WebInspector.UISourceCode.prototype.contentChanged):
        (WebInspector.UISourceCode.prototype.workingCopy):
        (WebInspector.UISourceCode.prototype.setWorkingCopy):
        (WebInspector.UISourceCode.prototype.workingCopyChanged):
        (WebInspector.UISourceCode.prototype.commitWorkingCopy):
        (WebInspector.UISourceCode.prototype.workingCopyCommitted):

2012-05-21  Andrey Kosyakov  <caseq@chromium.org>

        Web Inspector: [refactoring] promote fill/border colors used by timeline's frame overview to TimelineCategory
        https://bugs.webkit.org/show_bug.cgi?id=87016

        Reviewed by Pavel Feldman.

        - drop unused 'color' field from TimelineCategory;
        - add borderColor and fillColorStop[0-1] to TimelineCategory;
        - fix style in a handful of places.

        Note we store textual values for color stops, not premade gradients so we can build gradients with different
        orientations rather than transforming a gradient.

        * inspector/front-end/TimelineOverviewPane.js:
        (WebInspector.HeapGraph):
        (WebInspector.HeapGraph.prototype.get element):
        (WebInspector.HeapGraph.prototype.get visible):
        (WebInspector.HeapGraph.prototype.show):
        (WebInspector.HeapGraph.prototype.hide):
        (WebInspector.HeapGraph.prototype._clear):
        (WebInspector.TimelineCategoryStrips):
        (WebInspector.TimelineVerticalOverview):
        (WebInspector.TimelineVerticalOverview.prototype._renderBar):
        * inspector/front-end/TimelinePresentationModel.js:
        (WebInspector.TimelinePresentationModel.categories):
        (WebInspector.TimelinePresentationModel.recordStyle):
        (WebInspector.TimelineCategory):

2012-05-21  'Pavel Feldman'  <pfeldman@chromium.org>

        Web Inspector: declare setFormatted on UISourceCode (otherwise fails for styles).

        Not reviewed: front-end fix as a follow up to r117751.

        * inspector/front-end/UISourceCode.js:
        (WebInspector.UISourceCode.prototype.consoleMessagesCleared):
        (WebInspector.UISourceCode.prototype.setFormatted):

2012-05-21  Yury Semikhatsky  <yurys@chromium.org>

        Unreviewed. Fix Closure compiler error after r117753.

        * inspector/front-end/HeapSnapshotGridNodes.js:
        (WebInspector.HeapSnapshotConstructorNode.prototype.revealNodeBySnapshotObjectId.didGetNodePosition):

2012-05-21  Caio Marcelo de Oliveira Filho  <caio.oliveira@openbossa.org>

        Move setEditingBehavior() from layoutTestController to window.internals
        https://bugs.webkit.org/show_bug.cgi?id=42689

        Reviewed by Hajime Morita and Kenneth Rohde Christiansen.

        Add setEditingBehavior() to window.internals.settings. No new tests, but this
        change will allow more tests to run in WebKitTestRunner.

        * testing/InternalSettings.cpp:
        (WebCore::InternalSettings::InternalSettings):
        (WebCore::InternalSettings::restoreTo):
        (WebCore::InternalSettings::setEditingBehavior):
        (WebCore):
        * testing/InternalSettings.h:
        (InternalSettings):
        * testing/InternalSettings.idl:

2012-05-21  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Temporary UISourceCode should be replaced each time another inline script is added in RawSourceCode with pending request.
        https://bugs.webkit.org/show_bug.cgi?id=87003

        Reviewed by Pavel Feldman.

        This is needed to correctly show document content when debugger stops on several breakpoints in different scripts during page load.

        * inspector/front-end/RawSourceCode.js:
        (WebInspector.RawSourceCode.prototype.addScript):
        (WebInspector.RawSourceCode.prototype._finishedLoading):

2012-05-20  Kinuko Yasuda  <kinuko@chromium.org>

        Cleanup: Remove WebCore::revealFolderInOS() which is no longer used anywhere
        https://bugs.webkit.org/show_bug.cgi?id=86993

        Reviewed by Adam Barth.

        No new tests as this must be just removing dead code.

        * platform/FileSystem.h:
        * platform/chromium/FileSystemChromium.cpp:
        * platform/chromium/PlatformSupport.h:
        (PlatformSupport):

2012-05-21  Alexander Pavlov  <apavlov@chromium.org>

        Web Inspector: Annotate CSSStyleModel.js for the closure compiler
        https://bugs.webkit.org/show_bug.cgi?id=86858

        Reviewed by Yury Semikhatsky.

        * inspector/front-end/CSSStyleModel.js:
        (WebInspector.CSSStyleDeclaration.parseComputedStylePayload):
        (WebInspector.CSSStyleDeclaration.prototype.newBlankProperty):
        (WebInspector.CSSStyleDeclaration.prototype.insertPropertyAt):
        (WebInspector.CSSProperty.parsePayload):
        (WebInspector.CSSProperty.prototype.setText):
        (WebInspector.CSSProperty.prototype.setDisabled):
        (WebInspector.CSSStyleSheet.prototype.setText):
        (WebInspector.CSSStyleModelResourceBinding.prototype._innerSetContent.callbackWrapper):
        (WebInspector.CSSStyleModelResourceBinding.prototype._innerSetContent):
        (WebInspector.CSSStyleModelResourceBinding.prototype._loadStyleSheetHeaders):

2012-05-21  Rakesh KN  <rakesh.kn@motorola.com>

        [Forms] Refactor HTMLFormCollection
        https://bugs.webkit.org/show_bug.cgi?id=86602

        Reviewed by Kent Tamura.

        Modify HTMLFormCollection to be independent of HTMLFormElement which is needed
        for implementing HTMLFieldSetElement's element attribute.

        Covered by existing tests.

        * html/HTMLFormCollection.cpp:
        (WebCore::HTMLFormCollection::HTMLFormCollection):
        Modified to take more generic HTMLElement* instead of HTMLFormElement* so that
        HTMLFormCollection for HTMLFieldSetElement can also be created.
        (WebCore::HTMLFormCollection::create): Ditto.
        (WebCore::HTMLFormCollection::formControlElements):
        Helper function for getting the array of FormAssociatedElements for this form.
        (WebCore::HTMLFormCollection::formImageElements):
        Helper function for getting the array of image elements for this form.
        (WebCore::HTMLFormCollection::numberOfFormControlElements):
        Helper function for getting the number of elements in this form.
        (WebCore::HTMLFormCollection::calcLength):
        Modified to use new helper functions defined for getting the FormAssociatedElements
        and image elements array instead of static_cast to HTMLFormElement.
        (WebCore::HTMLFormCollection::item): Ditto.
        (WebCore::HTMLFormCollection::getNamedFormItem): Ditto.
        (WebCore::HTMLFormCollection::updateNameCache): Ditto.
        * html/HTMLFormCollection.h:
        (WebCore):
        (HTMLFormCollection):
        * html/HTMLFormElement.h:
        (WebCore::HTMLFormElement::imageElements):
        New accessor for image elements array of form element.
        Also HTMLFormCollection is not needed to be friend of HTMLFormElement as collection
        does not access the form element memebers directly now.

2012-05-21  Yury Semikhatsky  <yurys@chromium.org>

        Web Inspector: expand only neighbors of the highlighted node when revealing it in heap snapshot
        https://bugs.webkit.org/show_bug.cgi?id=86998

        Reviewed by Pavel Feldman.

        Only nearest nodes are expanded when a node is revealed in heap snapshot
        summary view.

        * inspector/front-end/HeapSnapshotDataGrids.js:
        (WebInspector.HeapSnapshotSortableDataGrid.prototype.highlightNode):
        (WebInspector.HeapSnapshotViewportDataGrid.prototype.highlightNode):
        (WebInspector.HeapSnapshotViewportDataGrid.prototype._isScrolledIntoView):
        * inspector/front-end/HeapSnapshotGridNodes.js:
        (WebInspector.HeapSnapshotConstructorNode.prototype.revealNodeBySnapshotObjectId):
        (WebInspector.HeapSnapshotConstructorNode.prototype.revealNodeBySnapshotObjectId.didGetNodePosition):
        * inspector/front-end/ProfilesPanel.js:
        (WebInspector.ProfilesPanel.prototype.showProfile):

2012-05-21  Mikhail Pozdnyakov  <mikhail.pozdnyakov@intel.com>

        [EFL] PlatformKeyboardEventEfl is missing ESC key handling.
        https://bugs.webkit.org/show_bug.cgi?id=86837

        Reviewed by Kenneth Rohde Christiansen.

        Added ESC key handling.

        * platform/efl/EflKeyboardUtilities.cpp:
        (WebCore::createKeyMap):
        (WebCore::singleCharacterString):

2012-05-21  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: move sources panel out of experimental.
        https://bugs.webkit.org/show_bug.cgi?id=86997

        Reviewed by Yury Semikhatsky.

        This change moves sources panel out of experimental, removes revision support from the resources panel.

        * English.lproj/localizedStrings.js:
        * inspector/front-end/JavaScriptSourceFrame.js:
        (WebInspector.JavaScriptSourceFrame.prototype._onContentChanged):
        (WebInspector.JavaScriptSourceFrame.prototype._continueToLine):
        * inspector/front-end/ResourceView.js:
        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.ResourcesPanel.prototype._showResourceView):
        (WebInspector.FrameTreeElement.prototype.appendResource):
        (WebInspector.FrameResourceTreeElement):
        (WebInspector.FrameResourceTreeElement.prototype.sourceView):
        * inspector/front-end/ScriptsNavigator.js:
        (WebInspector.ScriptsNavigator):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype.get toolbarItemLabel):
        (WebInspector.ScriptsPanel.prototype.appendApplicableItems):
        * inspector/front-end/Settings.js:
        (WebInspector.ExperimentsSettings):
        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame.prototype._setTextViewerDecorations):
        * inspector/front-end/textViewer.css:
        * inspector/front-end/utilities.js:

2012-05-21  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: implement revision history view.
        https://bugs.webkit.org/show_bug.cgi?id=86966

        Reviewed by Yury Semikhatsky.

        Added revision view into the drawer. It now lists all the revisions
        along with the inline diffs. Once source panel is enabled by default,
        this view will completely substitute the one in the resources panel.
        See the screenshot attached. View is updated when revisions are added
        and when editor view is switched.

        * English.lproj/localizedStrings.js:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * inspector/compile-front-end.py:
        * inspector/front-end/AdvancedSearchController.js:
        (WebInspector.FileBasedSearchResultsPane.prototype._appendSearchMatches):
        * inspector/front-end/ContextMenu.js:
        (WebInspector.ContextMenu.prototype._itemSelected):
        (WebInspector.ContextMenu.prototype.appendApplicableItems):
        (WebInspector.ContextMenu.Provider.prototype.appendApplicableItems):
        (WebInspector.ContextMenu.registerProvider):
        * inspector/front-end/JavaScriptSourceFrame.js:
        (WebInspector.JavaScriptSourceFrame.prototype.populateTextAreaContextMenu):
        * inspector/front-end/Resource.js:
        (WebInspector.ResourceRevision.prototype.revertToThis):
        * inspector/front-end/RevisionHistoryView.js: Added.
        (WebInspector.RevisionHistoryView):
        (WebInspector.RevisionHistoryView.showHistory):
        (WebInspector.RevisionHistoryView.uiSourceCodeSelected):
        (WebInspector.RevisionHistoryView.prototype._revisionAdded):
        (WebInspector.RevisionHistoryView.prototype._onclose):
        (WebInspector.RevisionHistoryTreeElement.else.revert):
        (WebInspector.RevisionHistoryTreeElement):
        (WebInspector.RevisionHistoryTreeElement.prototype.onexpand.step1):
        (WebInspector.RevisionHistoryTreeElement.prototype.onexpand.step2):
        (WebInspector.RevisionHistoryTreeElement.prototype.onexpand):
        (WebInspector.RevisionHistoryTreeElement.prototype._createLine):
        (WebInspector.RevisionHistoryTreeElement.prototype._diff.popsym):
        (WebInspector.RevisionHistoryTreeElement.prototype._diff):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype._editorSelected):
        (WebInspector.ScriptsPanel.prototype.registerUISourceCodeProvider):
        (WebInspector.ScriptsPanel.prototype._showLocalHistory):
        (WebInspector.ScriptsPanel.prototype.appendApplicableItems):
        * inspector/front-end/StylesPanel.js:
        (WebInspector.StyleSourceFrame.prototype._contentChanged):
        (WebInspector.StyleSourceFrame.prototype.populateTextAreaContextMenu):
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/inspector.css:
        (#search-results-pane-file-based .search-result):
        (#search-results-pane-file-based .search-result:hover):
        (#search-results-pane-file-based .search-match:hover):
        (#search-results-pane-file-based .search-match .search-match-content):
        * inspector/front-end/inspector.html:
        * inspector/front-end/scriptsPanel.css:
        (.outline-disclosure.revision-history-drawer):
        (.outline-disclosure.revision-history-drawer ol):
        (.outline-disclosure.revision-history-drawer > ol):
        (.outline-disclosure.revision-history-drawer li):
        (.outline-disclosure.revision-history-drawer li.parent):
        (.revision-history-link):
        (.outline-disclosure.revision-history-drawer .revision-history-line):
        (.revision-history-drawer .webkit-line-number):
        (.revision-history-line-added):
        (.revision-history-line-removed):
        * inspector/front-end/textViewer.css:
        (.webkit-added-line.webkit-line-number):
        (.webkit-removed-line.webkit-line-number):
        (.webkit-changed-line.webkit-line-number):

2012-05-18  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: upstream build dominators tree procedure from v8.
        https://bugs.webkit.org/show_bug.cgi?id=86640

        The idea is to reduce transfer size and move all the post-processing steps to the front-end.
        The JS implementation is ~1.5 times slower.

        Reviewed by Yury Semikhatsky.

        Covered by existing tests and performance tests.

        * inspector/front-end/HeapSnapshot.js:
        (WebInspector.HeapSnapshot.prototype._init):
        (WebInspector.HeapSnapshot.prototype._buildAggregates):
        (WebInspector.HeapSnapshot.prototype._buildPostOrderIndex):
        (WebInspector.HeapSnapshot.prototype._buildDominatorTree):
        (WebInspector.HeapSnapshot.prototype._markPageOwnedNodes):
        (WebInspector.HeapSnapshot.prototype._markQueriableHeapObjects):
        (WebInspector.HeapSnapshot.prototype._calculateFlags):

2012-05-21  Mike Lawther  <mikelawther@chromium.org>

        Crash in -webkit-calc
        https://bugs.webkit.org/show_bug.cgi?id=86954

        Reviewed by Abhishek Arya.

        Ensure that both ends of a blend are checked for being Calculated. The current
        check did not cover the case where the 'from' end was Calculated and nonzero,
        and the 'to' end was zero and not Calculated. 

        Blending doesn't work with calculated expressions and is being tracked in
        bug http://webkit.org/b/86160

        Tests: css3/calc/transition-crash3.html
               css3/calc/transition-crash4.html

        * platform/Length.h:
        (WebCore::Length::blend):

2012-05-21  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: make search results view more dense
        https://bugs.webkit.org/show_bug.cgi?id=86937

        Reviewed by Yury Semikhatsky.

        - moved search field to the 'drawer status bar'
        - search view is now shown on scripts panel only
        - switching from the scripts panel closes the search view
        - beautified the looks (see the screenshot)

        * English.lproj/localizedStrings.js:
        * inspector/front-end/AdvancedSearchController.js:
        (WebInspector.AdvancedSearchController.prototype.handleShortcut):
        (WebInspector.AdvancedSearchController.prototype.show):
        (WebInspector.AdvancedSearchController.prototype.close):
        (WebInspector.SearchView):
        (WebInspector.FileBasedSearchResultsPane):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype.willHide):
        * inspector/front-end/externs.js:
        (WebInspector.showViewInDrawer):
        (WebInspector.closeViewInDrawer):
        * inspector/front-end/inspector.css:
        (.search-drawer-header input[type="search"].search-config-search):
        (.search-drawer-header label.search-config-label):
        (.search-drawer-header input[type="checkbox"].search-config-checkbox):
        (body:not(.platform-mac) .search-drawer-header input[type="checkbox"].search-config-checkbox):
        (body.platform-mac .search-drawer-header input[type="checkbox"].search-config-checkbox):
        (.drawer-header):
        (.drawer-header-close-button):
        (.drawer-header-close-button:hover):
        (.drawer-header-close-button:active):
        (.search-view .search-results):
        (#search-results-pane-file-based li):
        (#search-results-pane-file-based ol):
        (#search-results-pane-file-based ol.children):
        (#search-results-pane-file-based ol.children.expanded):
        (#search-results-pane-file-based li.parent::before):
        (#search-results-pane-file-based li.parent.expanded::before):
        (#search-results-pane-file-based .search-result):
        (#search-results-pane-file-based .show-more-matches):
        * inspector/front-end/inspector.js:
        (WebInspector.showViewInDrawer.closeButtonPressed):
        (WebInspector.showViewInDrawer):
        (WebInspector.closeViewInDrawer):
        (WebInspector.postDocumentKeyDown):

2012-05-18  Andreas Kling  <kling@webkit.org>

        REGRESSION(r117501): IconDatabase asserts on startup in synchronousIconForPageURL().
        <http://webkit.org/b/86935>
        <rdar://problem/11480012>

        Reviewed by Anders Carlsson.

        - Correctly set m_retainOrReleaseIconRequested to true in retainIconForPageURL().
          This was causing the assertions, as we would end up doing nothing until the first
          icon release request came in.

        - Require that m_urlsToRetainOrReleaseLock be held when accessing m_retainOrReleaseIconRequested.
          This removes a possible race condition in double checked locking.

        - Swap over the retain/release work queues while holding m_urlsToRetainOrReleaseLock
          and release it right away to avoid sitting on the lock while updating the database.

        * loader/icon/IconDatabase.cpp:
        (WebCore::IconDatabase::synchronousIconForPageURL):
        (WebCore::IconDatabase::retainIconForPageURL):
        (WebCore::IconDatabase::releaseIconForPageURL):
        (WebCore::IconDatabase::retainedPageURLCount):
        (WebCore::IconDatabase::performURLImport):
        (WebCore::IconDatabase::syncThreadMainLoop):
        (WebCore::IconDatabase::performPendingRetainAndReleaseOperations):
        * loader/icon/IconDatabase.h:
        (IconDatabase):

2012-05-21  Kent Tamura  <tkent@chromium.org>

        Unreviewed, build fix.

        * html/StepRange.cpp:
        (WebCore::StepRange::parseStep): Remove bogus asssetions.

2012-05-21  Kent Tamura  <tkent@chromium.org>

        Unreviewed, build fix.

        * html/StepRange.cpp:
        (WebCore::StepRange::StepRange): Remove another ASSERT_NOT_REACHED.

2012-05-21  Kent Tamura  <tkent@chromium.org>

        Unreviewed, build fix.

        * html/StepRange.h:
        (WebCore::StepRange::StepDescription::StepDescription):
        Remove ASSERT_NOT_REACHED.

2012-05-21  Yoshifumi Inoue  <yosin@chromium.org>

        [Forms] Move numeric related methods in HTMLInputElement class to another place
        https://bugs.webkit.org/show_bug.cgi?id=82034

        Reviewed by Kent Tamura.

        This patch moves step and range related methods into StepRange class
        for ease of using step calculation other than double floating point
        number arithmetic, e.g. decimal, long double, and so on.

        New class StepRange::StepDescription holds values for calculating
        stepped value, defaultStep, defaultStepBase, integer rounding flags,
        step scale factor instead of virtual methods in InputType class.

        No new tests because of this patch doesn't change behavior.

        * WebCore.xcodeproj/project.pbxproj: Set attribute of StepRange.h to "Private" for including it in HTMLInputElement.cpp.
        * html/BaseDateAndTimeInputType.cpp:
        (WebCore::InputType::rangeOverflow): Moved to use InputType class.
        (WebCore::InputType::rangeUnderflow): Moved to use InputType class.
        (WebCore::BaseDateAndTimeInputType::stepMismatch): Moved to use stepRange.
        * html/BaseDateAndTimeInputType.h:
        (BaseDateAndTimeInputType): Removed method declaration for stepBase.
        * html/DateInputType.cpp:
        (WebCore::DateInputType::setupStepRange): Added.
        * html/DateInputType.h:
        (DateInputType): Removed method declarations.
        * html/DateTimeInputType.cpp:
        (WebCore::DateTimeInputType::defaultStep): Removed.
        (WebCore::DateTimeInputType::maximum): Removed.
        (WebCore::DateTimeInputType::minimum): Removed.
        (WebCore::DateTimeInputType::setupStepRange): Added
        (WebCore::DateTimeInputType::stepScaleFactor): Removed.
        * html/DateTimeInputType.h:
        (DateTimeInputType): Removed deprecated method declarations.
        * html/DateTimeLocalInputType.cpp:
        (WebCore::DateTimeLocalInputType::defaultStep): Removed.
        (WebCore::DateTimeLocalInputType::maximum): Removed.
        (WebCore::DateTimeLocalInputType::minimum): Removed.
        (WebCore::DateTimeLocalInputType::setupStepRange): Added.
        (WebCore::DateTimeLocalInputType::stepScaleFactor): Removed.
        * html/DateTimeLocalInputType.h:
        (DateTimeLocalInputType):
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::isInRange): Changed to call InputType::isInRange.
        (WebCore::HTMLInputElement::isOutOfRange): Changed to call InputType::isOutOfRange.
        (WebCore::HTMLInputElement::setupStepRange): Added.
        * html/HTMLInputElement.h:
        (HTMLInputElement):
        * html/InputType.cpp:
        (WebCore::InputType::acceptableError): Moved to StepRange class.
        (WebCore::InputType::alignValueForStep): Moved to StepRange class.
        (WebCore::InputType::minimum): Changed to use StepRange class.
        (WebCore::InputType::maximum): Changed to use StepRange class.
        (WebCore::InputType::parseToDouble): Changed to have ASSERT_NOT_REACHED.
        (WebCore::InputType::stepBaseWithDecimalPlaces): Changed to use StepRange class.
        (WebCore::InputType::validationMessage):  Changed to use StepRange class.
        (WebCore::InputType::applyStep):  Changed to use StepRange class.
        (WebCore::InputType::getAllowedValueStep):  Changed to use StepRange class.
        (WebCore::InputType::isInRange): Added.
        (WebCore::InputType::isOutOfRange): Added.
        (WebCore::InputType::rangeOverflow): Changed to use StepRange class.
        (WebCore::InputType::rangeUnderflow): Changed to use StepRange class.
        (WebCore::InputType::setupStepRange): Added.
        (WebCore::InputType::stepUpFromRenderer):  Changed to use StepRange class.
        (WebCore::InputType::stepMismatch): Changed to use StepRange class.
        * html/InputType.h:
        (InputType):
        * html/MonthInputType.cpp:
        (WebCore::MonthInputType::defaultStep): Removed.
        (WebCore::MonthInputType::maximum): Removed.
        (WebCore::MonthInputType::minimum): Removed.
        (WebCore::MonthInputType::setupStepRange): Added.
        (WebCore::MonthInputType::stepScaleFactor): Removed.
        * html/MonthInputType.h:
        (MonthInputType):
        * html/NumberInputType.cpp:
        (WebCore):
        (WebCore::NumberInputType::defaultStep): Removed.
        (WebCore::NumberInputType::maximum): Removed.
        (WebCore::NumberInputType::minimum): Removed.
        (WebCore::NumberInputType::rangeOverflow): Moved to InputType class.
        (WebCore::NumberInputType::rangeUnderflow): Moved to InputType class.
        (WebCore::NumberInputType::setupStepRange): Added.
        (WebCore::NumberInputType::stepMismatch): Moved to InputType class.
        (WebCore::NumberInputType::stepBaseWithDecimalPlaces): Changed to use StepRange class.
        (WebCore::NumberInputType::stepScaleFactor): Removed.
        * html/NumberInputType.h:
        (NumberInputType):
        * html/RangeInputType.cpp:
        (WebCore::RangeInputType::defaultStep): Removed.
        (WebCore::RangeInputType::maximum): Removed.
        (WebCore::RangeInputType::minimum): Removed.
        (WebCore::RangeInputType::setupStepRange): Added.
        (WebCore::RangeInputType::stepScaleFactor): Removed.
        (WebCore::RangeInputType::handleKeydownEvent): Changed to use StepRange class.
        (WebCore::RangeInputType::fallbackValue): Changed to use StepRange class.
        (WebCore::RangeInputType::sanitizeValue): Changed to use StepRange class.
        * html/RangeInputType.h:
        (RangeInputType):
        * html/StepRange.cpp:
        (WebCore::StepRange::StepRange): Added.
        (WebCore::StepRange::clampValue): Changed for member variable name changes.
        (WebCore::StepRange::hasStep): Added.
        (WebCore::StepRange::maximum): Added.
        (WebCore::StepRange::minimum): Added.
        (WebCore::StepRange::step): Added.
        (WebCore::StepRange::stepBase): Added.
        (WebCore::StepRange::stepDecimalPlaces): Added.
        (WebCore::StepRange::stepScaleFactor): Added.
        (WebCore::StepRange::setHasStep): Added.
        (WebCore::StepRange::setup): Added.
        (WebCore::StepRange::parse): Added.
        * html/StepRange.h:
        (StepDescription): Added
        (WebCore::StepRange::StepDescription::StepDescription):
        (WebCore::StepRange::acceptableError): Moved from InputType class.
        (WebCore::StepRange::alignValueForStep): Moved from InputType class.
        (WebCore::StepRange::defaultValue): Changed for member variable name changes.
        (WebCore::StepRange::proportionFromValue): Changed for member variable name changes.
        (WebCore::StepRange::valueFromProportion): Changed for member variable name changes.
        * html/TimeInputType.cpp:
        (WebCore::TimeInputType::defaultStep): Removed.
        (WebCore::TimeInputType::maximum): Removed.
        (WebCore::TimeInputType::minimum): Removed.
        (WebCore::TimeInputType::setupStepRange): Added.
        (WebCore::TimeInputType::stepScaleFactor): Removed.
        * html/TimeInputType.h:
        (TimeInputType):
        * html/WeekInputType.cpp:
        (WebCore):
        (WebCore::WeekInputType::defaultStep): Removed.
        (WebCore::WeekInputType::maximum): Removed.
        (WebCore::WeekInputType::minimum): Removed.
        (WebCore::WeekInputType::setupStepRange): Added.
        (WebCore::WeekInputType::stepScaleFactor): Removed.
        * html/WeekInputType.h:
        (WeekInputType):
        * html/shadow/SliderThumbElement.cpp:
        (WebCore::sliderPosition): Changed to use StepRange class.
        (WebCore::SliderThumbElement::setPositionFromPoint): Changed to use StepRange class.

2012-05-21  Kentaro Hara  <haraken@chromium.org>

        [V8] Pass Isolate to throwNotEnoughArgumentsError()
        https://bugs.webkit.org/show_bug.cgi?id=86983

        Reviewed by Adam Barth.

        The objective is to pass Isolate around in V8 bindings.
        This patch passes Isolate to throwNotEnoughArgumentsError().

        No tests. No change in behavior.

        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateArgumentsCountCheck):
        (GenerateEventConstructorCallback):
        * bindings/scripts/test/V8/V8Float64Array.cpp:
        (WebCore::Float64ArrayV8Internal::fooCallback):
        * bindings/scripts/test/V8/V8TestActiveDOMObject.cpp:
        (WebCore::TestActiveDOMObjectV8Internal::excitingFunctionCallback):
        (WebCore::TestActiveDOMObjectV8Internal::postMessageCallback):
        * bindings/scripts/test/V8/V8TestCustomNamedGetter.cpp:
        (WebCore::TestCustomNamedGetterV8Internal::anotherFunctionCallback):
        * bindings/scripts/test/V8/V8TestEventConstructor.cpp:
        (WebCore::V8TestEventConstructor::constructorCallback):
        * bindings/scripts/test/V8/V8TestEventTarget.cpp:
        (WebCore::TestEventTargetV8Internal::itemCallback):
        (WebCore::TestEventTargetV8Internal::dispatchEventCallback):
        * bindings/scripts/test/V8/V8TestInterface.cpp:
        (WebCore::TestInterfaceV8Internal::supplementalMethod2Callback):
        (WebCore::V8TestInterface::constructorCallback):
        * bindings/scripts/test/V8/V8TestMediaQueryListListener.cpp:
        (WebCore::TestMediaQueryListListenerV8Internal::methodCallback):
        * bindings/scripts/test/V8/V8TestNamedConstructor.cpp:
        (WebCore::V8TestNamedConstructorConstructorCallback):
        * bindings/scripts/test/V8/V8TestObj.cpp:
        (WebCore::TestObjV8Internal::voidMethodWithArgsCallback):
        (WebCore::TestObjV8Internal::intMethodWithArgsCallback):
        (WebCore::TestObjV8Internal::objMethodWithArgsCallback):
        (WebCore::TestObjV8Internal::methodWithSequenceArgCallback):
        (WebCore::TestObjV8Internal::methodReturningSequenceCallback):
        (WebCore::TestObjV8Internal::methodThatRequiresAllArgsAndThrowsCallback):
        (WebCore::TestObjV8Internal::serializedValueCallback):
        (WebCore::TestObjV8Internal::idbKeyCallback):
        (WebCore::TestObjV8Internal::optionsObjectCallback):
        (WebCore::TestObjV8Internal::methodWithNonOptionalArgAndOptionalArgCallback):
        (WebCore::TestObjV8Internal::methodWithNonOptionalArgAndTwoOptionalArgsCallback):
        (WebCore::TestObjV8Internal::methodWithCallbackArgCallback):
        (WebCore::TestObjV8Internal::methodWithNonCallbackArgAndCallbackArgCallback):
        (WebCore::TestObjV8Internal::overloadedMethod1Callback):
        (WebCore::TestObjV8Internal::overloadedMethod2Callback):
        (WebCore::TestObjV8Internal::overloadedMethod3Callback):
        (WebCore::TestObjV8Internal::overloadedMethod4Callback):
        (WebCore::TestObjV8Internal::overloadedMethod5Callback):
        (WebCore::TestObjV8Internal::overloadedMethod6Callback):
        (WebCore::TestObjV8Internal::overloadedMethod7Callback):
        (WebCore::TestObjV8Internal::overloadedMethod11Callback):
        (WebCore::TestObjV8Internal::overloadedMethod12Callback):
        (WebCore::TestObjV8Internal::enabledAtRuntimeMethod1Callback):
        (WebCore::TestObjV8Internal::enabledAtRuntimeMethod2Callback):
        (WebCore::TestObjV8Internal::convert1Callback):
        (WebCore::TestObjV8Internal::convert2Callback):
        (WebCore::TestObjV8Internal::convert3Callback):
        (WebCore::TestObjV8Internal::convert4Callback):
        (WebCore::TestObjV8Internal::convert5Callback):
        (WebCore::TestObjV8Internal::strictFunctionCallback):
        (WebCore::V8TestObj::constructorCallback):
        * bindings/scripts/test/V8/V8TestSerializedScriptValueInterface.cpp:
        (WebCore::TestSerializedScriptValueInterfaceV8Internal::acceptTransferListCallback):
        (WebCore::V8TestSerializedScriptValueInterface::constructorCallback):
        * bindings/v8/ScriptController.cpp:
        (WebCore::setValueAndClosePopupCallback):
        * bindings/v8/V8Proxy.cpp:
        (WebCore::V8Proxy::throwNotEnoughArgumentsError):
        * bindings/v8/V8Proxy.h:
        (V8Proxy):
        * bindings/v8/custom/V8AudioContextCustom.cpp:
        (WebCore::V8AudioContext::constructorCallback):
        * bindings/v8/custom/V8DataViewCustom.cpp:
        (WebCore::V8DataView::getInt8Callback):
        (WebCore::V8DataView::getUint8Callback):
        (WebCore::V8DataView::setInt8Callback):
        (WebCore::V8DataView::setUint8Callback):
        * bindings/v8/custom/V8DirectoryEntryCustom.cpp:
        (WebCore::V8DirectoryEntry::getDirectoryCallback):
        (WebCore::V8DirectoryEntry::getFileCallback):
        * bindings/v8/custom/V8IntentConstructor.cpp:
        (WebCore::V8Intent::constructorCallback):
        * bindings/v8/custom/V8SVGLengthCustom.cpp:
        (WebCore::V8SVGLength::convertToSpecifiedUnitsCallback):
        * bindings/v8/custom/V8WebGLRenderingContextCustom.cpp:
        (WebCore::getObjectParameter):
        (WebCore::V8WebGLRenderingContext::getAttachedShadersCallback):
        (WebCore::V8WebGLRenderingContext::getExtensionCallback):
        (WebCore::V8WebGLRenderingContext::getFramebufferAttachmentParameterCallback):
        (WebCore::V8WebGLRenderingContext::getParameterCallback):
        (WebCore::V8WebGLRenderingContext::getProgramParameterCallback):
        (WebCore::V8WebGLRenderingContext::getShaderParameterCallback):
        (WebCore::V8WebGLRenderingContext::getUniformCallback):
        (WebCore::vertexAttribAndUniformHelperf):
        (WebCore::uniformHelperi):
        (WebCore::uniformMatrixHelper):
        * bindings/v8/custom/V8WebKitMutationObserverCustom.cpp:
        (WebCore::V8WebKitMutationObserver::constructorCallback):
        (WebCore::V8WebKitMutationObserver::observeCallback):
        * bindings/v8/custom/V8WebSocketCustom.cpp:
        (WebCore::V8WebSocket::constructorCallback):
        (WebCore::V8WebSocket::sendCallback):
        * bindings/v8/custom/V8XMLHttpRequestCustom.cpp:
        (WebCore::V8XMLHttpRequest::openCallback):

2012-05-20  Kentaro Hara  <haraken@chromium.org>

        [V8] Pass Isolate to throwError()s in V8 custom bindings (Part 2)
        https://bugs.webkit.org/show_bug.cgi?id=86981

        Reviewed by Adam Barth.

        The objective is to pass Isolate around in V8 bindings.
        This patch passes Isolate to throwError()s in V8 custom bindings.

        No tests. No change in behavior.

        * bindings/v8/custom/V8HTMLImageElementConstructor.cpp:
        (WebCore::v8HTMLImageElementConstructorCallback):
        * bindings/v8/custom/V8HistoryCustom.cpp:
        (WebCore::V8History::pushStateCallback):
        (WebCore::V8History::replaceStateCallback):
        * bindings/v8/custom/V8IntentConstructor.cpp:
        (WebCore::V8Intent::constructorCallback):
        * bindings/v8/custom/V8MessagePortCustom.cpp:
        (WebCore::handlePostMessageCallback):
        * bindings/v8/custom/V8NotificationCenterCustom.cpp:
        (WebCore::V8NotificationCenter::createHTMLNotificationCallback):
        (WebCore::V8NotificationCenter::createNotificationCallback):
        (WebCore::V8NotificationCenter::requestPermissionCallback):
        * bindings/v8/custom/V8SQLResultSetRowListCustom.cpp:
        (WebCore::V8SQLResultSetRowList::itemCallback):
        * bindings/v8/custom/V8SQLTransactionCustom.cpp:
        (WebCore::V8SQLTransaction::executeSqlCallback):
        * bindings/v8/custom/V8SQLTransactionSyncCustom.cpp:
        (WebCore::V8SQLTransactionSync::executeSqlCallback):
        * bindings/v8/custom/V8StorageCustom.cpp:
        (WebCore::storageSetter):
        * bindings/v8/custom/V8WebKitMutationObserverCustom.cpp:
        (WebCore::V8WebKitMutationObserver::constructorCallback):
        (WebCore::V8WebKitMutationObserver::observeCallback):
        * bindings/v8/custom/V8WebSocketCustom.cpp:
        (WebCore::V8WebSocket::constructorCallback):
        (WebCore::V8WebSocket::sendCallback):
        (WebCore::V8WebSocket::closeCallback):
        * bindings/v8/custom/V8WorkerContextCustom.cpp:
        (WebCore::V8WorkerContext::importScriptsCallback):
        * bindings/v8/custom/V8WorkerCustom.cpp:
        (WebCore::handlePostMessageCallback):
        * bindings/v8/custom/V8XMLHttpRequestConstructor.cpp:
        (WebCore::V8XMLHttpRequest::constructorCallback):
        * bindings/v8/custom/V8XMLHttpRequestCustom.cpp:
        (WebCore::V8XMLHttpRequest::responseTextAccessorGetter):
        (WebCore::V8XMLHttpRequest::openCallback):
        (WebCore::V8XMLHttpRequest::sendCallback):

2012-05-20  Kentaro Hara  <haraken@chromium.org>

        [V8] Pass Isolate to throwError()s in V8 custom bindings (Part 1)
        https://bugs.webkit.org/show_bug.cgi?id=86980

        Reviewed by Adam Barth.

        The objective is to pass Isolate around in V8 bindings.
        This patch passes Isolate to throwError()s in V8 custom bindings.

        No tests. No change in behavior.

        * bindings/v8/custom/V8ArrayBufferCustom.cpp:
        (WebCore::V8ArrayBuffer::constructorCallback):
        * bindings/v8/custom/V8ArrayBufferViewCustom.h:
        (WebCore::constructWebGLArrayWithArrayBufferArgument):
        (WebCore::constructWebGLArray):
        * bindings/v8/custom/V8AudioContextCustom.cpp:
        (WebCore::V8AudioContext::constructorCallback):
        * bindings/v8/custom/V8BlobCustom.cpp:
        (WebCore::V8Blob::constructorCallback):
        * bindings/v8/custom/V8CSSStyleDeclarationCustom.cpp:
        (WebCore::V8CSSStyleDeclaration::namedPropertySetter):
        * bindings/v8/custom/V8ClipboardCustom.cpp:
        (WebCore::V8Clipboard::clearDataCallback):
        (WebCore::V8Clipboard::setDragImageCallback):
        * bindings/v8/custom/V8DOMFormDataCustom.cpp:
        (WebCore::V8DOMFormData::appendCallback):
        * bindings/v8/custom/V8DOMStringMapCustom.cpp:
        (WebCore::V8DOMStringMap::namedPropertySetter):
        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        (WebCore::handlePostMessageCallback):
        * bindings/v8/custom/V8DedicatedWorkerContextCustom.cpp:
        (WebCore::handlePostMessageCallback):
        * bindings/v8/custom/V8DirectoryEntryCustom.cpp:
        (WebCore::V8DirectoryEntry::getDirectoryCallback):
        (WebCore::V8DirectoryEntry::getFileCallback):
        * bindings/v8/custom/V8DocumentCustom.cpp:
        (WebCore::V8Document::evaluateCallback):

2012-05-20  Kentaro Hara  <haraken@chromium.org>

        [V8] Pass Isolate to V8NPObject::npObjectGetProperty() and V8NPObject::npObjectSetProperty()
        https://bugs.webkit.org/show_bug.cgi?id=86979

        Reviewed by Adam Barth.

        The objective is to pass Isolate around in V8 bindings.
        This patch passes Isolate to V8NPObject::npObjectGetProperty()
        and V8NPObject::npObjectSetProperty().

        No tests. No change in behavior.

        * bindings/v8/V8NPObject.cpp:
        (WebCore::npObjectGetProperty):
        (WebCore::npObjectNamedPropertyGetter):
        (WebCore::npObjectIndexedPropertyGetter):
        (WebCore::npObjectGetNamedProperty):
        (WebCore::npObjectGetIndexedProperty):
        (WebCore::npObjectQueryProperty):
        (WebCore::npObjectSetProperty):
        (WebCore::npObjectNamedPropertySetter):
        (WebCore::npObjectIndexedPropertySetter):
        (WebCore::npObjectSetNamedProperty):
        (WebCore::npObjectSetIndexedProperty):
        * bindings/v8/V8NPObject.h:
        (WebCore):
        * bindings/v8/custom/V8HTMLPlugInElementCustom.cpp:
        (WebCore::npObjectNamedGetter):
        (WebCore::npObjectNamedSetter):
        (WebCore::npObjectIndexedGetter):
        (WebCore::npObjectIndexedSetter):

2012-05-20  Ryosuke Niwa  <rniwa@webkit.org>

        Using createContextualFragment to insert a <script> does not cause the script to execute
        https://bugs.webkit.org/show_bug.cgi?id=12234

        Reviewed by Adam Barth.

        Renamed FragmentScriptingAllowed and FragmentScriptingNotAllowed to DisallowScriptingContent
        and AllowScriptingContent as these two flags are used in code for non-fragment cases and they
        indicate whether attributes and elements that can invoke scripting should be removed or not.

        To fix the bug, added a new value AllowScriptingContentAndDoNotMarkAlreadyStarted unset
        already-started and parser-inserted flags [1] on script elements in addition to allowing
        scripting contents.

        While the HTML5 specification and the DOM Parsing and Serialization specification [2] state that
        we should set these flags in the parser and later unset them, doing so would require traversing
        the parsed fragment to find relevant script elements. We short circuit this logic by simply not
        setting parser-inserted and already-started flags in createContextualFragment.

        [1] http://www.whatwg.org/specs/web-apps/current-work/multipage/scripting-1.html#already-started
        [2] http://html5.org/specs/dom-parsing.html#dom-range-createcontextualfragment

        Tests: fast/dom/Range/create-contextual-fragment-script-not-ran.html
               fast/dom/Range/create-contextual-fragment-script-unmark-already-started.html

        * dom/DocumentFragment.h:
        (DocumentFragment):
        * dom/Element.cpp:
        (WebCore::Element::parserSetAttributes):
        (WebCore::Element::setAttributeNS):
        * dom/Element.h:
        (Element):
        * dom/FragmentScriptingPermission.h:
        * dom/Range.cpp:
        (WebCore::Range::createContextualFragment): Removed FragmentScriptingPermission from the argument
        list since no one uses it. Always use AllowScriptingContentAndDoNotMarkAlreadyStarted instead.
        * dom/Range.h:
        * editing/markup.h:
        * html/parser/HTMLConstructionSite.cpp:
        (WebCore::HTMLConstructionSite::HTMLConstructionSite):
        (WebCore::HTMLConstructionSite::insertScriptElement): Pass false to both parserInserted and
        alreadyStarted when the scripting permission is AllowScriptingContentAndDoNotMarkAlreadyStarted.
        Also call parserSetAttributes when the scripting permission is either AllowScriptingContent or
        AllowScriptingContentAndDoNotMarkAlreadyStarted.
        * html/parser/HTMLDocumentParser.h:
        (HTMLDocumentParser):
        * html/parser/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::FragmentParsingContext::FragmentParsingContext):
        (WebCore::HTMLTreeBuilder::processEndTag):
        * html/parser/HTMLTreeBuilder.h:
        (FragmentParsingContext):
        * platform/blackberry/PasteboardBlackBerry.cpp:
        (WebCore::Pasteboard::documentFragment):
        * platform/chromium/DragDataChromium.cpp:
        (WebCore::DragData::asFragment):
        * platform/chromium/PasteboardChromium.cpp:
        (WebCore::Pasteboard::documentFragment):
        * platform/gtk/PasteboardGtk.cpp:
        (WebCore::Pasteboard::documentFragment):
        * platform/mac/PasteboardMac.mm:
        (WebCore::Pasteboard::documentFragment):
        * platform/qt/DragDataQt.cpp:
        (WebCore::DragData::asFragment):
        * platform/qt/PasteboardQt.cpp:
        (WebCore::Pasteboard::documentFragment):
        * platform/win/ClipboardUtilitiesWin.cpp:
        (WebCore::fragmentFromCFHTML):
        (WebCore::fragmentFromHTML):
        * xml/XMLErrors.cpp:
        (WebCore::createXHTMLParserErrorHeader):
        (WebCore::XMLErrors::insertErrorMessageBlock):
        * xml/parser/NewXMLDocumentParser.h:
        (NewXMLDocumentParser):
        * xml/parser/XMLDocumentParser.h:
        (XMLDocumentParser):
        * xml/parser/XMLDocumentParserLibxml2.cpp:
        (WebCore::XMLDocumentParser::XMLDocumentParser):
        (WebCore::XMLDocumentParser::endElementNs):
        * xml/parser/XMLDocumentParserQt.cpp:
        (WebCore::XMLDocumentParser::XMLDocumentParser):
        (WebCore::XMLDocumentParser::parseEndElement):

2012-05-20  Kentaro Hara  <haraken@chromium.org>

        [V8] Pass Isolate to V8Utilities::createFunctionCallback()
        https://bugs.webkit.org/show_bug.cgi?id=86978

        Reviewed by Adam Barth.

        The objective is to pass Isolate around in V8 bindings.
        This patch passes Isolate to V8Utilities::createFunctionCallback().

        No tests. No change in behavior.

        * bindings/v8/V8Utilities.cpp:
        (WebCore::throwTypeMismatchException):
        * bindings/v8/V8Utilities.h:
        (WebCore):
        (WebCore::createFunctionOnlyCallback):
        * bindings/v8/custom/V8GeolocationCustom.cpp:
        (WebCore::V8Geolocation::getCurrentPositionCallback):
        (WebCore::V8Geolocation::watchPositionCallback):
        * bindings/v8/custom/V8NotificationCustom.cpp:
        (WebCore::V8Notification::requestPermissionCallback):

2012-05-20  Kentaro Hara  <haraken@chromium.org>

        [V8] Pass Isolate to throwError()s in bindings/v8/*.{h,cpp}
        https://bugs.webkit.org/show_bug.cgi?id=86977

        Reviewed by Adam Barth.

        The objective is to pass Isolate around in V8 bindings.
        This patch passes Isolate to throwError()s in bindings/v8/*.{h,cpp}
        except for a couple of non-trivial cases. I'll upload a follow-up patch
        for the non-trivial cases.

        No tests. No change in behavior.

        * bindings/v8/DateExtension.cpp:
        (WebCore::DateExtension::OnSleepDetected):
        * bindings/v8/SerializedScriptValue.cpp:
        (WebCore::SerializedScriptValue::transferArrayBuffers):
        (WebCore::SerializedScriptValue::SerializedScriptValue):
        * bindings/v8/SerializedScriptValue.h:
        * bindings/v8/V8NPObject.cpp:
        (WebCore::npObjectInvokeImpl):
        (WebCore::npObjectPropertyEnumerator):
        * bindings/v8/V8Proxy.cpp:
        (WebCore::V8Proxy::checkNewLegal):

2012-05-20  Keishi Hattori  <keishi@webkit.org>

        [Chromium] Enable datalist for input type email
        https://bugs.webkit.org/show_bug.cgi?id=85356

        Reviewed by Kent Tamura.

        No new tests. Covered in fast/forms/datalist/input-list.html

        * rendering/RenderThemeChromiumCommon.cpp:
        (WebCore::RenderThemeChromiumCommon::supportsDataListUI):

2012-05-20  Kentaro Hara  <haraken@chromium.org>

        [V8] Pass Isolate to throwError()s in CodeGeneratorV8.pm
        https://bugs.webkit.org/show_bug.cgi?id=86976

        Reviewed by Adam Barth.

        The objective is to pass Isolate around in V8 bindings.
        This patch passes Isolate to throwError()s in CodeGeneratorV8.pm.

        No tests. No change in behavior.

        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateNormalAttrGetter):
        (GenerateNormalAttrSetter):
        (GenerateParametersCheck):
        (GenerateConstructorCallback):
        (GenerateNamedConstructorCallback):
        (GenerateFunctionCallString):
        * bindings/scripts/test/V8/V8TestInterface.cpp:
        (WebCore::V8TestInterface::constructorCallback):
        * bindings/scripts/test/V8/V8TestNamedConstructor.cpp:
        (WebCore::V8TestNamedConstructorConstructorCallback):
        * bindings/scripts/test/V8/V8TestObj.cpp:
        (WebCore::TestObjV8Internal::withScriptStateAttributeAttrSetter):
        (WebCore::TestObjV8Internal::withScriptStateAttributeRaisesAttrGetter):
        (WebCore::TestObjV8Internal::withScriptStateAttributeRaisesAttrSetter):
        (WebCore::TestObjV8Internal::withScriptExecutionContextAndScriptStateAttributeAttrSetter):
        (WebCore::TestObjV8Internal::withScriptExecutionContextAndScriptStateAttributeRaisesAttrGetter):
        (WebCore::TestObjV8Internal::withScriptExecutionContextAndScriptStateAttributeRaisesAttrSetter):
        (WebCore::TestObjV8Internal::withScriptExecutionContextAndScriptStateWithSpacesAttributeAttrSetter):
        (WebCore::TestObjV8Internal::withScriptStateVoidCallback):
        (WebCore::TestObjV8Internal::withScriptStateObjCallback):
        (WebCore::TestObjV8Internal::withScriptStateVoidExceptionCallback):
        (WebCore::TestObjV8Internal::withScriptStateObjExceptionCallback):
        (WebCore::TestObjV8Internal::withScriptExecutionContextAndScriptStateCallback):
        (WebCore::TestObjV8Internal::withScriptExecutionContextAndScriptStateObjExceptionCallback):
        (WebCore::TestObjV8Internal::withScriptExecutionContextAndScriptStateWithSpacesCallback):
        (WebCore::TestObjV8Internal::methodWithCallbackArgCallback):
        (WebCore::TestObjV8Internal::methodWithNonCallbackArgAndCallbackArgCallback):
        (WebCore::TestObjV8Internal::methodWithCallbackAndOptionalArgCallback):
        (WebCore::TestObjV8Internal::overloadedMethod5Callback):
        (WebCore::V8TestObj::constructorCallback):

2012-05-20  George Staikos  <staikos@webkit.org>

        [BlackBerry] Implement the Screen functions to get DPI.
        https://bugs.webkit.org/show_bug.cgi?id=86967

        Reviewed by Antonio Gomes.

        * platform/blackberry/PlatformScreenBlackBerry.cpp:
        (WebCore::screenHorizontalDPI):
        (WebCore::screenVerticalDPI):

2012-05-20  Shinya Kawanaka  <shinyak@chromium.org>

        [Refactoring] Node::shadowHost() and Node::setShadowHost() can be moved to ShadowRoot.
        https://bugs.webkit.org/show_bug.cgi?id=86585

        Reviewed by Hajime Morita.

        Since Node::shadowHost() and Node::setShadowHost() are valid only if Node is ShadowRoot,
        they should be moved to ShadowRoot.

        However, Node::setParent cannot be called from ShadowRoot, we add Node::setParentOrHostNode
        to call it as Node::parentOrHostNode() calls Node::parent(). Node::setParent() is now private.
        We also add SVGElementInstance::setParentOrHostNode() to share ContainerNodeAlgorithm.

        No new tests, no change in behavior.

        * dom/Attr.cpp:
        (WebCore::Attr::createTextChild):
        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::insertBeforeCommon):
        (WebCore::ContainerNode::removeBetween):
        (WebCore::ContainerNode::removeChildren):
        * dom/ContainerNodeAlgorithms.h:
        (WebCore::appendChildToContainer):
        (WebCore::Private::addChildNodesToDeletionQueue):
        * dom/ElementShadow.cpp:
        (WebCore::validateShadowRoot):
        (WebCore::ElementShadow::addShadowRoot):
        (WebCore::ElementShadow::removeAllShadowRoots):
        * dom/EventDispatcher.cpp:
        (WebCore::eventTargetRespectingSVGTargetRules):
        (WebCore::EventDispatcher::ensureEventAncestors):
        (WebCore::EventDispatcher::determineDispatchBehavior):
        * dom/EventDispatcher.h:
        (WebCore):
        (EventDispatcher):
        * dom/Node.cpp:
        (WebCore::Node::parentOrHostElement):
        * dom/Node.h:
        (Node):
        (WebCore::Node::setParentOrHostNode):
        (WebCore):
        * dom/NodeRenderingContext.cpp:
        (WebCore::NodeRenderingContext::NodeRenderingContext):
        * dom/ShadowRoot.h:
        (WebCore::ShadowRoot::host):
        (WebCore):
        (WebCore::ShadowRoot::setHost):
        * dom/TreeScope.cpp:
        (WebCore::TreeScope::focusedNode):
        * html/shadow/ContentSelectorQuery.cpp:
        (WebCore::ContentSelectorQuery::matches):
        * page/DragController.cpp:
        (WebCore::asFileInput):
        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleMousePressEvent):
        (WebCore::instanceAssociatedWithShadowTreeElement):
        (WebCore::EventHandler::dispatchMouseEvent):
        * page/FocusController.cpp:
        (WebCore::FocusScope::owner):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::hasLineIfEmpty):
        * svg/SVGElementInstance.h:
        (WebCore::SVGElementInstance::setParentOrHostNode):
        (SVGElementInstance):
        * svg/SVGStyledElement.cpp:
        (WebCore::SVGStyledElement::title):
        * svg/SVGTRefElement.cpp:
        (WebCore::SVGShadowText::willRecalcTextStyle):

2012-05-20  Joe Thomas  <joethomas@motorola.com>

        Unsupported commands should have queryCommandValue() = "", not false
        https://bugs.webkit.org/show_bug.cgi?id=86964

        Reviewed by Ryosuke Niwa.

        queryCommandValue for unsupported commands should return empty string.
        The specification related to this can be located at http://dvcs.w3.org/hg/editing/raw-file/tip/editing.html#methods-to-query-and-execute-commands

        Test: editing/execCommand/queryCommandValue-unsupported-commands.html

        * dom/Document.idl:

2012-05-20  Kentaro Hara  <haraken@chromium.org>

        Unreviewed. Rebaselined run-bindings-tests results.

        * bindings/scripts/test/JS/JSTestInterface.cpp:
        (WebCore::setJSTestInterfaceSupplementalStr2):
        (WebCore::setJSTestInterfaceSupplementalStr3):
        (WebCore::setJSTestInterfaceSupplementalNode):
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::setJSTestObjShortAttr):
        (WebCore::setJSTestObjUnsignedShortAttr):
        (WebCore::setJSTestObjIntAttr):
        (WebCore::setJSTestObjLongLongAttr):
        (WebCore::setJSTestObjUnsignedLongLongAttr):
        (WebCore::setJSTestObjStringAttr):
        (WebCore::setJSTestObjTestObjAttr):
        (WebCore::setJSTestObjSequenceAttr):
        (WebCore::setJSTestObjIntSequenceAttr):
        (WebCore::setJSTestObjShortSequenceAttr):
        (WebCore::setJSTestObjLongSequenceAttr):
        (WebCore::setJSTestObjLongLongSequenceAttr):
        (WebCore::setJSTestObjUnsignedIntSequenceAttr):
        (WebCore::setJSTestObjUnsignedShortSequenceAttr):
        (WebCore::setJSTestObjUnsignedLongSequenceAttr):
        (WebCore::setJSTestObjUnsignedLongLongSequenceAttr):
        (WebCore::setJSTestObjFloatSequenceAttr):
        (WebCore::setJSTestObjDoubleSequenceAttr):
        (WebCore::setJSTestObjBooleanSequenceAttr):
        (WebCore::setJSTestObjVoidSequenceAttr):
        (WebCore::setJSTestObjDateSequenceAttr):
        (WebCore::setJSTestObjXMLObjAttr):
        (WebCore::setJSTestObjCreate):
        (WebCore::setJSTestObjReflectedStringAttr):
        (WebCore::setJSTestObjReflectedIntegralAttr):
        (WebCore::setJSTestObjReflectedUnsignedIntegralAttr):
        (WebCore::setJSTestObjReflectedBooleanAttr):
        (WebCore::setJSTestObjReflectedURLAttr):
        (WebCore::setJSTestObjReflectedCustomIntegralAttr):
        (WebCore::setJSTestObjReflectedCustomBooleanAttr):
        (WebCore::setJSTestObjReflectedCustomURLAttr):
        (WebCore::setJSTestObjAttrWithGetterException):
        (WebCore::setJSTestObjAttrWithSetterException):
        (WebCore::setJSTestObjStringAttrWithGetterException):
        (WebCore::setJSTestObjStringAttrWithSetterException):
        (WebCore::setJSTestObjCustomAttr):
        (WebCore::setJSTestObjWithScriptStateAttribute):
        (WebCore::setJSTestObjWithScriptExecutionContextAttribute):
        (WebCore::setJSTestObjWithScriptStateAttributeRaises):
        (WebCore::setJSTestObjWithScriptExecutionContextAttributeRaises):
        (WebCore::setJSTestObjWithScriptExecutionContextAndScriptStateAttribute):
        (WebCore::setJSTestObjWithScriptExecutionContextAndScriptStateAttributeRaises):
        (WebCore::setJSTestObjWithScriptExecutionContextAndScriptStateWithSpacesAttribute):
        (WebCore::setJSTestObjWithScriptArgumentsAndCallStackAttribute):
        (WebCore::setJSTestObjConditionalAttr1):
        (WebCore::setJSTestObjConditionalAttr2):
        (WebCore::setJSTestObjConditionalAttr3):
        (WebCore::setJSTestObjConditionalAttr4Constructor):
        (WebCore::setJSTestObjConditionalAttr5Constructor):
        (WebCore::setJSTestObjConditionalAttr6Constructor):
        (WebCore::setJSTestObjMutablePoint):
        (WebCore::setJSTestObjImmutablePoint):
        (WebCore::setJSTestObjStrawberry):
        (WebCore::setJSTestObjStrictFloat):
        (WebCore::setJSTestObjId):
        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp:
        (WebCore::setJSTestSerializedScriptValueInterfaceValue):
        (WebCore::setJSTestSerializedScriptValueInterfaceCachedValue):

2012-05-20  George Staikos  <staikos@webkit.org>

        Use reinterpret_cast_ptr<> to fix an alignment warning.
        https://bugs.webkit.org/show_bug.cgi?id=80790

        Reviewed by Rob Buis.

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

2012-05-20  Takashi Sakamoto  <tasak@google.com>

        Needs style recalculation by changing applyAuthorStyles dynamically
        https://bugs.webkit.org/show_bug.cgi?id=84251

        Modifying setApplyAuthorStyles to invoke owner()'s
        setNeedsRedistributing if applyAuthorStyles changes.

        Reviewed by Hajime Morita.

        No new tests. Adding new tests to existing
        fast/dom/shadow/shadow-root-applyAuthorStyles.html to test this
        feature.

        * dom/ShadowRoot.cpp:
        (WebCore::ShadowRoot::setApplyAuthorStyles):
        If applyAuthorStyles changes, invoke owner's setNeedsRedistributing to
        recalculate styles of the shadow root's child elements.

2012-05-20  Philip Rogers  <pdr@google.com>

        Accumulate SVG animations into first contributing element
        https://bugs.webkit.org/show_bug.cgi?id=86385

        Reviewed by Nikolas Zimmermann.

        Previously we were accumulating animations into the first animation element when
        there were multiple animations for a single element. This crashed if the first
        animation ended first because the first animation was prematurely cleaned up.
        This change accumulates animations into the first _contributing_ animation element.

        Tests: svg/animations/multiple-animations-ending.html
               svg/animations/svg-two-animate-elements-crash-expected.svg
               svg/animations/svg-two-animate-elements-crash.svg

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

2012-05-20  Philip Rogers  <pdr@google.com>

        Fix hit testing on non-scaling strokes
        https://bugs.webkit.org/show_bug.cgi?id=82628

        Reviewed by Nikolas Zimmermann.

        This change fixes hit testing on non-scaling strokes. It contains fixes for 3 bugs:
        1) RenderSVGRect::shapeDependentStrokeContains was not falling back to shape-based hit testing.
        2) m_strokeAndMarkerBoundingBox did not account for non-scaling strokes.
        3) RenderSVGShape::shapeDependentStrokeContains did not have any support for non-scaling strokes.

        This change also contains some refactoring/cleanup of the non-scale-stroke codepaths.

        Test: svg/hittest/svg-shapes-non-scale-stroke.html

        * rendering/svg/RenderSVGEllipse.cpp:
        (WebCore::RenderSVGEllipse::createShape):
        * rendering/svg/RenderSVGRect.cpp:
        (WebCore::RenderSVGRect::createShape):
        (WebCore::RenderSVGRect::shapeDependentStrokeContains):
        * rendering/svg/RenderSVGShape.cpp:
        (WebCore::RenderSVGShape::shapeDependentStrokeContains):
        (WebCore::RenderSVGShape::shapeDependentFillContains):
        (WebCore::RenderSVGShape::nonScalingStrokePath):
        (WebCore):
        (WebCore::RenderSVGShape::setupNonScalingStrokeContext):
        (WebCore::RenderSVGShape::nonScalingStrokeTransform):
        (WebCore::RenderSVGShape::strokePath):
        (WebCore::RenderSVGShape::fillAndStrokePath):
        (WebCore::RenderSVGShape::updateCachedBoundaries):
        (WebCore::RenderSVGShape::inflateWithStrokeAndMarkerBounds):
        * rendering/svg/RenderSVGShape.h:
        (WebCore::RenderSVGShape::hasNonScalingStroke):
        (RenderSVGShape):

2012-05-19  Emil A Eklund  <eae@chromium.org>

        Simplify RenderOverflow by using Rects
        https://bugs.webkit.org/show_bug.cgi?id=86894

        Reviewed by Eric Seidel.

        Simplify the RenderOverflow class and the uses of it by storing the
        overflow values in rects and using the rects instead of the individual
        values where it makes sense.

        No new tests, no change in functionality.

        * page/FrameView.cpp:
        (WebCore::FrameView::adjustPageHeightDeprecated):
        Change to use layoutOverflowRect().maxX() and replace C style casts with
        C++ style to comply with style guide.
        
        * rendering/InlineFlowBox.h:
        (WebCore::InlineFlowBox::logicalLeftLayoutOverflow):
        (WebCore::InlineFlowBox::logicalRightLayoutOverflow):
        (WebCore::InlineFlowBox::logicalTopLayoutOverflow):
        (WebCore::InlineFlowBox::logicalBottomLayoutOverflow):
        (WebCore::InlineFlowBox::logicalLeftVisualOverflow):
        (WebCore::InlineFlowBox::logicalRightVisualOverflow):
        (WebCore::InlineFlowBox::logicalTopVisualOverflow):
        (WebCore::InlineFlowBox::logicalBottomVisualOverflow):
        Change methods to use layoutOverflowRect() and visualOverflowRect().
        
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::scrollWidth):
        (WebCore::RenderBox::scrollHeight):
        Change methods to use visualOverflowRect().
        
        (WebCore::RenderBox::clearLayoutOverflow):
        Use setLayoutOverflow instead of resetLayoutOverflow (which has been
        removed as it did exactly the same thing as the set method).
        
        * rendering/RenderBox.h:
        (WebCore::RenderBox::maxLayoutOverflow):
        (WebCore::RenderBox::logicalLeftLayoutOverflow):
        (WebCore::RenderBox::logicalRightLayoutOverflow):
        (WebCore::RenderBox::logicalLeftVisualOverflow):
        (WebCore::RenderBox::logicalRightVisualOverflow):
        Remove minYLayoutOverflow, maxYLayoutOverflow, minXLayoutOverflow and
        maxXLayoutOverflow and update the remaining methods to use
        layoutOverflowRect().
        
        * rendering/RenderMarquee.cpp:
        (WebCore::RenderMarquee::computePosition):
        Change to use layoutOverflowRect().
        
        * rendering/RenderOverflow.h:
        (WebCore::RenderOverflow::RenderOverflow):
        (WebCore::RenderOverflow::layoutOverflowRect):
        (WebCore::RenderOverflow::visualOverflowRect):
        (RenderOverflow):
        (WebCore::RenderOverflow::setMinYLayoutOverflow):
        (WebCore::RenderOverflow::setMaxYLayoutOverflow):
        (WebCore::RenderOverflow::setMinXLayoutOverflow):
        (WebCore::RenderOverflow::setMaxXLayoutOverflow):
        (WebCore::RenderOverflow::setMinYVisualOverflow):
        (WebCore::RenderOverflow::setMaxYVisualOverflow):
        (WebCore::RenderOverflow::setMinXVisualOverflow):
        (WebCore::RenderOverflow::setMaxXVisualOverflow):
        (WebCore):
        (WebCore::RenderOverflow::move):
        (WebCore::RenderOverflow::addLayoutOverflow):
        (WebCore::RenderOverflow::addVisualOverflow):
        (WebCore::RenderOverflow::setLayoutOverflow):
        (WebCore::RenderOverflow::setVisualOverflow):
        Change RenderOverflow to use two rects instead of two sets of four
        values. Remove [min|max][Layout|Visual]Overflow getters and change the
        layoutOverflowRect and visualOverflowRect methods to return the rects.
        
        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::shouldPaint):
        Change to use visualOverflowRect().
        
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::layout):
        Change to use visualOverflowRect().
        
        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::clippedOverflowRectForRepaint):
        Change to use visualOverflowRect().
        
        * rendering/RenderTreeAsText.cpp:
        (WebCore::writeLayers):
        Change to use layoutOverflowRect().

2012-05-19  Rob Buis  <rbuis@rim.com>

        Remove bbox caching from SVGPathElement
        https://bugs.webkit.org/show_bug.cgi?id=86233

        Reviewed by Nikolas Zimmermann.

        Remove caching of path bounding box, since SVGLocatable::getBBox is not used much at all.
        This saves 200k of memory for worldcup.svg on 64-bit machine.

        * svg/SVGPathElement.cpp:
        (WebCore::SVGPathElement::SVGPathElement):
        (WebCore::SVGPathElement::svgAttributeChanged):
        (WebCore::SVGPathElement::pathSegListChanged):
        (WebCore::SVGPathElement::getBBox):
        * svg/SVGPathElement.h:
        (SVGPathElement):

2012-05-19  Andy Estes  <aestes@apple.com>

        Fix build errors found when disabling ENABLE_DRAG_SUPPORT
        https://bugs.webkit.org/show_bug.cgi?id=86947

        Reviewed by Jon Honeycutt.

        * page/mac/EventHandlerMac.mm:
        (WebCore::EventHandler::passMouseMoveEventToSubframe):
        * platform/mac/ClipboardMac.mm:
        (WebCore):

2012-05-19  Joe Thomas  <joethomas@motorola.com>

        The order of CSS properties is wrong in background shorthand
        https://bugs.webkit.org/show_bug.cgi?id=86152

        Reviewed by Ryosuke Niwa.

        Corrected the order of properties returned in StylePropertySet::getPropertyValue for background shorthand property to match the specification  
        http://www.w3.org/TR/css3-background/#background.

        * css/StylePropertyShorthand.cpp:
        (WebCore::backgroundShorthand):

2012-05-19  Ryosuke Niwa  <rniwa@webkit.org>

        Touch Internals.* in an attempt to fix Windows builds after r117646.

        * testing/Internals.cpp:
        * testing/Internals.h:
        * testing/Internals.idl:

2012-05-18  Ryosuke Niwa  <rniwa@webkit.org>

        WebKit erroneously add 1px padding in input elements
        https://bugs.webkit.org/show_bug.cgi?id=86784

        Reviewed by Kent Tamura.

        Fixed the bug by removing the code that added left and right paddings in input elements.
        The code was added in r13567 to match a very old version of Internet Explorer but this quirk
        does not seem to exists in IE9 (both in quirks and standard modes).

        A lot of tests need to be rebaselined due to 1px difference inside input elements, and 2px
        differences for the width of input elements. (In some extreme cases, line breaking changed
        due to the width change).

        Test: fast/forms/input-textarea-padding-match.html

        * css/html.css:
        (input::-webkit-input-placeholder, isindex::-webkit-input-placeholder):
        * rendering/RenderTextControlSingleLine.cpp:
        (WebCore::RenderTextControlSingleLine::createInnerTextStyle):

2012-05-18  Adrienne Walker  <enne@google.com>

        [chromium] Add diagnostic CRASH calls for tiler crashes
        https://bugs.webkit.org/show_bug.cgi?id=86930

        Reviewed by James Robinson.

        These lines would normally crash on their own due to null pointers,
        but having an explicit CRASH call will help us differentiate what the
        real problem might be in the crash report.

        * platform/graphics/chromium/TiledLayerChromium.cpp:
        (WebCore::TiledLayerChromium::createTile):
        (WebCore::TiledLayerChromium::updateTiles):

2012-05-18  Aaron Colwell  <acolwell@chromium.org>

        Update Media Source implementation to reflect changes in 0.5 spec.
        https://bugs.webkit.org/show_bug.cgi?id=83607

        Reviewed by Darin Fisher.

        Tests: http/tests/media/media-source/video-media-source-event-attributes.html
               http/tests/media/media-source/webm/video-media-source-abort.html
               http/tests/media/media-source/webm/video-media-source-add-and-remove-ids.html

        * html/HTMLAttributeNames.in: Add onwebkitsourcexxx event attribute names.
        * html/HTMLMediaElement.cpp: 
        (WebCore::HTMLMediaElement::parseAttribute): Add code to register event listeners for the onwebkitsourcexxx attributes.
        (WebCore::HTMLMediaElement::pauseInternal):
        (WebCore):
        (WebCore::HTMLMediaElement::webkitSourceAddId): Changed code to pass the parsed type & codecs to m_player instead of the whole MIME-type string. This was done to allow some simple parsing & validation code to be shared in WebKit instead of reimplemented in every port.
        (WebCore::HTMLMediaElement::webkitSourceBuffered): New method in the v0.5 spec. It validates the parameters & that it is being called in the correct state. If so it forwards the call to m_player.
        (WebCore::HTMLMediaElement::webkitSourceAppend): Adds id parameter to match v0.5 signature. Minor logic changes that avoid calling m_player for 0 byte arrays and fixes exceptions reported for a null array and a parse error so they match the spec text.
        (WebCore::HTMLMediaElement::webkitSourceAbort): New method in the v0.5 spec. It validates the parameter & that it is being called in athe correct state. If so it forwards the call to m_player.
        * html/HTMLMediaElement.h:
        (HTMLMediaElement): Added new methods, signature updates, and onwebitsourcexxx event listener attributes.
        * html/HTMLMediaElement.idl: Added new methods, signature updates, and onwebitsourcexxx event listener attributes.
        * platform/ContentType.cpp:
        (WebCore::ContentType::codecs): A new method that parses the codecs parameter into a vector of codec strings.
        (WebCore):
        * platform/ContentType.h: 
        (ContentType):
        * platform/graphics/MediaPlayer.cpp:
        (WebCore::NullMediaPlayerPrivate::sourceAddId): Update the signature to take the parsed type and codecs vector.
        (WebCore::NullMediaPlayerPrivate::sourceBuffered): Add default implementation for this new method.
        (WebCore::NullMediaPlayerPrivate::sourceRemoveId): Remove id parameter name to match other methods.
        (WebCore::NullMediaPlayerPrivate::sourceAppend): Updated signature to include id parameter.
        (WebCore::NullMediaPlayerPrivate::sourceAbort): Add default implementation for this new method.
        (WebCore::NullMediaPlayerPrivate::sourceEndOfStream): Remove parameter name to match other methods.
        (WebCore::MediaPlayer::sourceAddId): Update the signature to take the parsed type and codecs vector.
        (WebCore):
        (WebCore::MediaPlayer::sourceBuffered): Add implementation for new method that forwards the call to the MediaPlayerPrivate interface.
        (WebCore::MediaPlayer::sourceAppend): Update method to forward the new id parameter in the signature.
        (WebCore::MediaPlayer::sourceAbort): Add implementation for new method that forwards the call to the MediaPlayerPrivate interface.
        * platform/graphics/MediaPlayer.h: Update interface to include new methods and updated signatures.
        * platform/graphics/MediaPlayerPrivate.h:
        (WebCore::MediaPlayerPrivateInterface::sourceAddId): Update the signature to take the parsed type and codecs vector.
        (WebCore::MediaPlayerPrivateInterface::sourceBuffered): Add default implementation for new method.
        (WebCore::MediaPlayerPrivateInterface::sourceAppend): Update method to forward the new id parameter in the signature.
        (WebCore::MediaPlayerPrivateInterface::sourceAbort): Add default implementation for new method.

2012-05-18  Levi Weintraub  <leviw@chromium.org>

        Revert to float method of selection rect alignment for line box tree
        https://bugs.webkit.org/show_bug.cgi?id=86904

        Reviewed by Eric Seidel.

        In r117491, we introduced a new method of alignment for the selection rect in the sub-pixel case.
        It turns out there is at least one case on Mac where this leaves a gap when painting selection rects
        originating in the line box tree. This patch reverts us to the float method for the line box tree,
        but retains the LayoutRect snapping for gap rects.

        No new tests. Covered by existing tests with sub-pixel layout enabled.

        * rendering/EllipsisBox.cpp:
        (WebCore::EllipsisBox::paintSelection): Re-enabling the FloatRect flavor of
        alignSelectionRectToDevicePixels for the line box tree.
        * rendering/InlineTextBox.cpp:
        (WebCore::alignSelectionRectToDevicePixels): Moving LayoutRect flavor to RenderBlock.
        (WebCore::InlineTextBox::paintSelection): Happily clearing up the bifurcation of algorithms for
        sub-pixel layout.
        * rendering/InlineTextBox.h: Re-enabling the FloatRect flavor of alignSelectionRectToDevicePixels
        for the line box tree.
        * rendering/RenderBlock.cpp:
        (WebCore::alignSelectionRectToDevicePixels): Re-seating the LayoutRect version of
        alignSelectionRectToDevicePixels for use with GapRects.

2012-05-18  Eric Seidel  <eric@webkit.org>

        Assertion failure in BidiResolver::commitExplicitEmbedding() (!inIsolate() || m_currentExplicitEmbeddingSequence.isEmpty()) at wikipedia.org
        https://bugs.webkit.org/show_bug.cgi?id=76574

        Reviewed by Levi Weintraub.

        Consider this example:
        <span style="unicode-bidi: embed"><span style="unicode-bidi: isolate">a</span></span>
        Before this patch, we would ASSERT when computing the text runs, as we would have encountered
        the "embed LTR" directive from the outer span, but not try to "commit" this embedding until
        we encountered the first charater (an optimization to avoid creating unnecessary bidi embedding contexts).
        The ASSERT we were hitting was to ensure that embedding directives inside an isolated span
        did not bleed out and effect the surrounding text.

        bidi "isolate" support uses a multi-pass Unicode Bidi Algorithm (UBA), which when encountering
        "isolated" sections of text ignores them in the first pass, and then goes back and runs
        a separate instance of the UBA on those isolated sections.

        Once we scan into an "isolate" section (during an outer UBA application) we should not respect
        any embedding directives inside that "isolate" section.

        However, in the above example, our "don't commit embeddings until we need them" and
        "assert we don't respect embeddings inside isolated spans" were conflicting.
        The fix is to make sure we always commit any pending embedding directives *before*
        we enter an isolate section.

        Luckly there was no functional bug here as we were still respecting
        the embedding directives we were belatedly committing. After this change we're commiting
        those directives at a more appropriate time, thus avoiding the ASSERT.

        Test: fast/text/bidi-isolate-embedding-crash.html

        * platform/text/BidiResolver.h:
        (WebCore::::commitExplicitEmbedding):
        * rendering/InlineIterator.h:
        (WebCore::notifyObserverEnteredObject):
        (WebCore::IsolateTracker::commitExplicitEmbedding):

2012-05-18  Pratik Solanki  <psolanki@apple.com>

        BitmapImage::BitmapImage(CGImageRef, ImageObserver*) needs to set m_sizeRespectingOrientation
        https://bugs.webkit.org/show_bug.cgi?id=86915

        Reviewed by Oliver Hunt.

        Set m_sizeRespectingOrientation to be the same as m_size. Otherwise it stays at 0x0 since
        this constructor also sets m_haveSize to true for the BitmapImage.

        * platform/graphics/cg/ImageCG.cpp:
        (WebCore::BitmapImage::BitmapImage):

2012-05-18  Dan Bernstein  <mitz@apple.com>

        Build fix after r117607.

        * platform/mac/WebCoreNSCellExtras.m:

2012-05-18  Caio Marcelo de Oliveira Filho  <caio.oliveira@openbossa.org>

        Fix remaining uses of JSValue::toBoolean()
        https://bugs.webkit.org/show_bug.cgi?id=86912

        Reviewed by Filip Pizlo.

        And unbreak Qt build.

        * bindings/scripts/test/JS/JSTestEventTarget.cpp:
        (WebCore::jsTestEventTargetPrototypeFunctionAddEventListener):
        (WebCore::jsTestEventTargetPrototypeFunctionRemoveEventListener):
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::setJSTestObjCreate):
        (WebCore::setJSTestObjReflectedBooleanAttr):
        (WebCore::setJSTestObjReflectedCustomBooleanAttr):
        (WebCore::jsTestObjPrototypeFunctionAddEventListener):
        (WebCore::jsTestObjPrototypeFunctionRemoveEventListener):
        * bridge/qt/qt_runtime.cpp:
        (JSC::Bindings::convertValueToQVariant):
        * bridge/qt/qt_runtime_qt4.cpp:
        (JSC::Bindings::convertValueToQVariant):

2012-04-27  Filip Pizlo  <fpizlo@apple.com>

        DFG should have control flow graph simplification
        https://bugs.webkit.org/show_bug.cgi?id=84553

        Reviewed by Oliver Hunt.

        Merged r115512 from dfgopt.

        JSValue::toBoolean(ExecState*) -> JSValue::toBoolean()
        
        No new tests, because no new behavior.

        * bindings/js/JSCustomSQLStatementErrorCallback.cpp:
        (WebCore::JSSQLStatementErrorCallback::handleEvent):
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::addEventListener):
        (WebCore::JSDOMWindow::removeEventListener):
        * bindings/js/JSDataViewCustom.cpp:
        (WebCore::getDataViewMember):
        * bindings/js/JSDeviceMotionEventCustom.cpp:
        (WebCore::JSDeviceMotionEvent::initDeviceMotionEvent):
        * bindings/js/JSDeviceOrientationEventCustom.cpp:
        (WebCore::JSDeviceOrientationEvent::initDeviceOrientationEvent):
        * bindings/js/JSDictionary.cpp:
        (WebCore::JSDictionary::convertValue):
        * bindings/js/JSDirectoryEntryCustom.cpp:
        (WebCore::JSDirectoryEntry::getFile):
        (WebCore::JSDirectoryEntry::getDirectory):
        * bindings/js/JSDirectoryEntrySyncCustom.cpp:
        (WebCore::getFlags):
        * bindings/js/JSHTMLCanvasElementCustom.cpp:
        (WebCore::JSHTMLCanvasElement::getContext):
        * bindings/js/JSInspectorFrontendHostCustom.cpp:
        (WebCore::JSInspectorFrontendHost::showContextMenu):
        * bindings/js/JSMessageEventCustom.cpp:
        (WebCore::handleInitMessageEvent):
        * bindings/js/JSWebGLRenderingContextCustom.cpp:
        (WebCore::dataFunctionMatrix):
        * bindings/js/JSXMLHttpRequestCustom.cpp:
        (WebCore::JSXMLHttpRequest::open):
        * bindings/js/ScriptDebugServer.cpp:
        (WebCore::ScriptDebugServer::hasBreakpoint):
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateEventListenerCall):
        (GenerateImplementation):
        (JSValueToNative):
        * bridge/c/c_utility.cpp:
        (JSC::Bindings::convertValueToNPVariant):
        * bridge/jni/jni_jsobject.mm:
        (JavaJSObject::convertValueToJObject):

2012-05-18  Shawn Singh  <shawnsingh@chromium.org>

        [chromium] add back-face visibility check for renderSurfaces
        https://bugs.webkit.org/show_bug.cgi?id=86870

        Reviewed by Adrienne Walker.

        Test added CCLayerTreeHostCommonTest::verifyBackFaceCullingWithPreserves3dForFlatteningSurface

        Chromium was not checking back-face visibility for renderSurfaces
        that needed it. This patch adds that check and the appropriate
        unit test.

        * platform/graphics/chromium/cc/CCLayerTreeHostCommon.cpp:
        (WebCore::layerIsInExisting3DRenderingContext):
        (WebCore):
        (WebCore::subtreeShouldRenderToSeparateSurface):
        (WebCore::calculateDrawTransformsAndVisibilityInternal):

2012-05-18  Levi Weintraub  <leviw@chromium.org>

        Standalone table-columns should be wrapped in anonymous tables
        https://bugs.webkit.org/show_bug.cgi?id=86671

        Reviewed by Julien Chaffraix.

        The CSS2 spec specifies that table-columns misparented outside of a table or
        table-column-group should be wrapped in an anonymous table. Updating 
        RenderObject::addChild to follow the spec.
        see http://www.w3.org/TR/CSS2/tables.html#anonymous-boxes for details.

        Tests: fast/table/table-column-generates-anonymous-table.html
               fast/table/table-column-group-generates-anonymous-table.html

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::addChild):

2012-05-18  Keyar Hood  <keyar@chromium.org>

        Support imageSmoothingEnabled
        https://bugs.webkit.org/show_bug.cgi?id=82804

        Reviewed by Stephen White.

        Test: fast/canvas/canvas-imageSmoothingEnabled.html

        Added the imageSmoothingEnabled parameter to the
        CanvasRenderingContext2D object. When it is set to false, it sets
        InterpolationQuality to InterpolationNone. When set to true, it sets
        the InterpolationQuality to DefaultInterpolationQuality (as that is the
        only other value used).

        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::CanvasRenderingContext2D):
        (WebCore::CanvasRenderingContext2D::webkitImageSmoothingEnabled):
        (WebCore):
        (WebCore::CanvasRenderingContext2D::setWebkitImageSmoothingEnabled):
        * html/canvas/CanvasRenderingContext2D.h:
        (CanvasRenderingContext2D):
        * html/canvas/CanvasRenderingContext2D.idl:

2012-05-18  Terry Anderson  <tdanderson@chromium.org>

        Percentage height replaced elements sometimes cause overflow of table contents
        https://bugs.webkit.org/show_bug.cgi?id=85581

        Reviewed by Eric Seidel.

        Test: fast/replaced/table-replaced-element.html

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::computeReplacedLogicalHeightUsing):
        This change guarantees that the containing block of a replaced element with percentage
        height will be marked as having a percentage height descendant.

2012-05-18  Viatcheslav Ostapenko  <ostapenko.viatcheslav@nokia.com>

        [Qt] REGRESSION(r117501): It made almost all tests assert in debug mode
        https://bugs.webkit.org/show_bug.cgi?id=86854

        Reviewed by Andreas Kling.

        Initialize boolean flag in constructor and recheck the flag which can be 
        modified by another thread under mutex.

        No new tests, fixes regression that caused layout test crash.

        * loader/icon/IconDatabase.cpp:
        (WebCore::IconDatabase::IconDatabase):
        (WebCore::IconDatabase::syncThreadMainLoop):

2012-05-18  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL] Web Intents code is not compiling
        https://bugs.webkit.org/show_bug.cgi?id=85364

        Reviewed by Adam Barth.

        Add missing implementation for
        JSIntentConstructor::constructJSIntent() in JS bindings.

        * CMakeLists.txt:
        * UseJSC.cmake:
        * bindings/js/JSIntentConstructor.cpp: Added.
        (WebCore):
        (WebCore::JSIntentConstructor::constructJSIntent):

2012-05-18  Joe Thomas  <joethomas@motorola.com>

        background-size specified by a single value in background shorthand fails to parse.
        https://bugs.webkit.org/show_bug.cgi?id=86739

        Reviewed by Tony Chang.

        While parsing the background shorthand property, if the second parsedValue is not a valid unit,
        parseFillSize should return the first parsedValue instead of failing.

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

2012-05-18  Tony Chang  <tony@chromium.org>

        remove the CSS_GRID_LAYOUT compiler define, but default grid layout to off
        https://bugs.webkit.org/show_bug.cgi?id=86767

        Reviewed by Ojan Vafai.

        We disable grid by ignoring the display type at CSS parse time.

        Test: fast/css-grid-layout/grid-disabled-by-default.html

        * Configurations/FeatureDefines.xcconfig:
        * css/CSSComputedStyleDeclaration.cpp: Remove compile checks.
        (WebCore):
        (WebCore::valueForGridPosition):
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        * css/CSSParser.cpp:
        (WebCore::CSSParserContext::CSSParserContext):
        (WebCore::operator==):
        (WebCore::isValidKeywordPropertyAndValue): Move display into parseValue.
        (WebCore::isKeywordPropertyID):
        (WebCore::CSSParser::parseValue): Ignore while parsing if not enabled.
        (WebCore::CSSParser::parseGridTrackList):
        (WebCore::CSSParser::cssGridLayoutEnabled):
        (WebCore):
        * css/CSSParser.h:
        * css/CSSParserMode.h:
        (CSSParserContext):
        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        * css/CSSProperty.cpp:
        (WebCore::CSSProperty::isInheritedProperty):
        * css/CSSPropertyNames.in:
        * css/CSSValueKeywords.in:
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::collectMatchingRulesForList):
        * dom/Document.cpp:
        (WebCore::Document::cssGridLayoutEnabled): Added to keep track of whether grid is enabled or not.
        (WebCore):
        * dom/Document.h:
        * page/Settings.cpp:
        (WebCore::Settings::Settings):
        * page/Settings.h:
        (WebCore::Settings::setCSSGridLayoutEnabled): Added.
        (WebCore::Settings::cssGridLayoutEnabled): Added.
        (Settings):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::createObject):
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::RenderStyle):
        (WebCore::RenderStyle::diff):
        * rendering/style/RenderStyle.h:
        * rendering/style/RenderStyleConstants.h:
        * rendering/style/StyleGridData.cpp:
        * rendering/style/StyleGridData.h:
        * rendering/style/StyleGridItemData.cpp:
        * rendering/style/StyleGridItemData.h:
        * rendering/style/StyleRareNonInheritedData.cpp:
        (WebCore::StyleRareNonInheritedData::StyleRareNonInheritedData):
        (WebCore::StyleRareNonInheritedData::operator==):
        * rendering/style/StyleRareNonInheritedData.h:
        (WebCore):
        (StyleRareNonInheritedData):

2012-05-18  Martin Robinson  <mrobinson@igalia.com>

        OOM running webgl/sdk/tests/conformance/context/context-creation-and-destruction.html
        https://bugs.webkit.org/show_bug.cgi?id=80509

        Reviewed by Alejandro G. Castro.

        No new tests. This is covered by by context-creation-and-destruction.html
        Khronos conformance test which will be part of the WebKit repository once
        bug 44310 is closed.

        Rework the ownership of GLContexts. Instead of having them managed by the
        state of window mapping or removed by calling a static method, always have
        them owned by the callers. This makes all GLContext creators factory methods
        that return PassOwnPtr.

        This change also switches the sharing context for a WebView from the window
        context to a global shared context. This simplifies things greatly, allowing
        the removal of GLContextGtk and makes the factory change easier.

        * GNUmakefile.list.am: Remove GLContextGtk.cpp from the source list.
        * platform/graphics/cairo/GLContext.cpp:
        (WebCore::GLContext::sharingContext): Added, getter for the global sharing context.
        (WebCore::GLContext::createContextForWindow): Added, a factory method for creating
        window contexts.
        (WebCore::GLContext::createOffscreenContext): Allow passing a sharing context here.
        (WebCore::GLContext::makeContextCurrent): Assert that this is the main thread, to
        increase the guarantee that we are only using these contexts on the main thread.
        (WebCore::GLContext::getCurrent): Ditto.
        * platform/graphics/cairo/GLContext.h: Update the above method signatures and remove
        createOffscreenContext, which has just been subsumed into the other factory methods.
        * platform/graphics/cairo/GraphicsContext3DCairo.cpp: The HostWindow is no longer needed
        to get the sharing context, so we can simplify things quite a bit and make a platform
        independent implementation here.
        * platform/graphics/cairo/GraphicsContext3DPrivate.cpp: Ditto.
        * platform/graphics/glx/GLContextGLX.cpp: Modify all the factory methods to return PassOwnPtr.
        * platform/graphics/glx/GLContextGLX.h: Ditto.
        * platform/graphics/gtk/GLContextGtk.cpp: Removed.

2012-05-18  Pablo Flouret  <pablof@motorola.com>

        Script elements inserted while fragment parsing should have their "already started" flag set.
        https://bugs.webkit.org/show_bug.cgi?id=86376

        Reviewed by Ryosuke Niwa.

        Step 3 of:
        http://www.whatwg.org/specs/web-apps/current-work/multipage/tree-construction.html#scriptTag

        Test: fast/parser/script-already-started-flag-in-fragment-parsing-mode.html

        * html/HTMLScriptElement.cpp:
        (WebCore::HTMLScriptElement::create):
        * html/HTMLScriptElement.h:
        (HTMLScriptElement):
        * html/parser/HTMLConstructionSite.cpp:
        (WebCore::HTMLConstructionSite::insertScriptElement):

2012-05-18  Shezan Baig  <shezbaig.wk@gmail.com>

        Expose FrameSelection::absoluteCaretBounds via window.internals
        https://bugs.webkit.org/show_bug.cgi?id=86390

        Reviewed by Ryosuke Niwa.

        Add 'absoluteCaretBounds' method to Internals, which returns the
        FrameSelection::absoluteCaretBounds.

        Test: editing/selection/internal-caret-rect.html

        * WebCore.exp.in: Export the necessary symbols.
        * testing/Internals.cpp:
        (WebCore::Internals::absoluteCaretBounds): Implementation of new method.
        (WebCore):
        * testing/Internals.h: Declare the new method.
        (Internals):
        * testing/Internals.idl: Declare the new method.

2012-05-18  Dan Bernstein  <mitz@apple.com>

        <rdar://problem/11467250> No focus ring around popup buttons

        Reviewed by Anders Carlsson.

        The exact same issue was fixed for buttons drawn in ThemeMac.mm in <rdar://problem/10542095>.
        This change extends the fix to also cover buttons drawn in RenderThemeMac.mm.

        * WebCore.xcodeproj/project.pbxproj: Added WebCoreNSCellExtras.{h.m}.
        * platform/mac/ThemeMac.mm: Removed the definitions of BUTTON_CELL_DRAW_WITH_FRAME_DRAWS_FOCUS_RING
        and -[NSCell _web_drawFocusRingWithFrame:inView:] from here. They are now in WebCoreNSCellExtras.
        * platform/mac/WebCoreNSCellExtras.h: Added.
        * platform/mac/WebCoreNSCellExtras.m: Added.
        (-[NSCell _web_drawFocusRingWithFrame:inView:]): Moved from ThemeMac.mm here.
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::paintMenuList): Changed to use -_web_drawFocusRingWithFrame:inView:.
        (WebCore::RenderThemeMac::setPopupButtonCellState): Removed call to updateFocusedState() when
        the focus ring is drawn separately.

2012-05-18  Philippe Normand  <pnormand@igalia.com>

        [GStreamer] Fix early return of the mimeTypeCache function after r117207.

        Rubber-stamped by Martin Robinson.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp: Set
        typeListInitialized to true after the cache has been filled so
        that next call to the function goes through the early return path.

2012-05-18  Martin Robinson  <mrobinson@igalia.com>

        Get IndexedDB closer to building for GTK+.

        Reviewed by Philippe Normand.

        No new tests. This is only a build fix.

        * GNUmakefile.am: Add the appropriate option to enable LevelDB support.
        * GNUmakefile.list.am: Add missing indexed database files to the source list.

2012-05-18  Dan Bernstein  <mitz@apple.com>

        Removed stale references in the Xcode project after r117369.

        * WebCore.xcodeproj/project.pbxproj: Removed references to CSSStyleDeclaration.cpp.

2012-05-18  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Add resource to UISourceCode constructor.
        https://bugs.webkit.org/show_bug.cgi?id=86853

        Reviewed by Pavel Feldman.

        This is a first step of merging resource revision support into UISourceCode.

        * inspector/front-end/CompilerScriptMapping.js:
        * inspector/front-end/DebuggerResourceBinding.js:
        (WebInspector.DebuggerResourceBinding.setScriptSource.didEditScriptSource):
        (WebInspector.DebuggerResourceBinding.setScriptSource):
        * inspector/front-end/DebuggerScriptMapping.js:
        (WebInspector.DebuggerScriptMapping.prototype._debuggerReset):
        * inspector/front-end/JavaScriptSource.js:
        * inspector/front-end/RawSourceCode.js:
        (WebInspector.RawSourceCode.prototype._createUISourceCode):
        * inspector/front-end/ResourceScriptMapping.js:
        (WebInspector.ResourceScriptMapping.prototype.addScript):
        * inspector/front-end/Script.js:
        (WebInspector.Script.prototype.isAnonymousScript):
        * inspector/front-end/ScriptSnippetModel.js:
        (WebInspector.ScriptSnippetModel.prototype._createUISourceCodeForScript):
        (WebInspector.SnippetJavaScriptSource):
        * inspector/front-end/StylesPanel.js:
        (WebInspector.StyleSource):
        (WebInspector.StyleSourceFrame):
        (WebInspector.StyleSourceFrame.prototype.commitEditing):
        (WebInspector.StyleSourceFrame.prototype.afterTextChanged):
        (WebInspector.StyleSourceFrame.prototype._contentChanged):
        * inspector/front-end/UISourceCode.js:
        (WebInspector.UISourceCode):
        (WebInspector.UISourceCode.prototype.resource):

2012-05-18  Yury Semikhatsky  <yurys@chromium.org>

        Web Inspector: error when expanding an HTMLAllCollection object in the console
        https://bugs.webkit.org/show_bug.cgi?id=86741

        Reviewed by Pavel Feldman.

        RuntimeAgent.callFunctionOn should work correcly with arguments of type HTMLAllCollection.

        * inspector/InjectedScriptSource.js:

2012-05-18  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: resource revision content is not rendered properly. Resource content is shown instead.
        https://bugs.webkit.org/show_bug.cgi?id=86856

        Reviewed by Vsevolod Vlasov.

        * inspector/front-end/ResourceView.js:
        (WebInspector.ResourceRevisionSourceFrame):
        (WebInspector.ResourceRevisionSourceFrame.prototype.get resource):

2012-05-18  Yi Shen  <yi.4.shen@nokia.com>

        REGRESSION (r102553): Smart links do not work
        https://bugs.webkit.org/show_bug.cgi?id=85463

        Reviewed by NOBODY Ryosuke Niwa.

        To fix the regression of smart links, we need to check TextCheckingTypeLink option in
        Editor::markAndReplaceFor().

        Test: editing/inserting/typing-space-to-trigger-smart-link.html

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

2012-05-18  Alexander Pavlov  <apavlov@chromium.org>

        Web Inspector: empty CSS Declaration is generated by clicking the left space of 'user agent stylesheet' on Styles sidebar of Elements panel
        https://bugs.webkit.org/show_bug.cgi?id=86850

        Reviewed by Yury Semikhatsky.

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

2012-05-18  Yury Semikhatsky  <yurys@chromium.org>

        Unreviewed. Remove console.error() call committed by mistake.

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

2012-05-18  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: live edit resets cursor to 0,0
        https://bugs.webkit.org/show_bug.cgi?id=86851

        Reviewed by Vsevolod Vlasov.

        * inspector/front-end/DebuggerResourceBinding.js:
        (WebInspector.DebuggerResourceBinding.setScriptSource.didEditScriptSource):
        (WebInspector.DebuggerResourceBinding.setScriptSource):

2012-05-18  Yury Semikhatsky  <yurys@chromium.org>

        Web Inspector: exception in console when pressing % button in CPU profile view
        https://bugs.webkit.org/show_bug.cgi?id=86849

        Reviewed by Pavel Feldman.

        Use root node to get children, not DataGrid object.

        * inspector/front-end/CPUProfileView.js:
        (WebInspector.CPUProfileView.prototype.refreshVisibleData):

2012-05-18  Yury Semikhatsky  <yurys@chromium.org>

        Web Inspector: remove unnecessary indirection from profile types
        https://bugs.webkit.org/show_bug.cgi?id=86845

        Reviewed by Pavel Feldman.

        Introduced CSSProfileHeader and CPUProfileHeader, moved view creation from
        the type to corresponding profile headers. Removed some inderection and
        private fields assigned in random places. Added type annotations.

        * inspector/front-end/CPUProfileView.js:
        (WebInspector.CPUProfileType.prototype.createTemporaryProfile):
        (WebInspector.CPUProfileType.prototype.createProfile):
        (WebInspector.CPUProfileHeader):
        (WebInspector.CPUProfileHeader.prototype.createSidebarTreeElement):
        (WebInspector.CPUProfileHeader.prototype.createView):
        * inspector/front-end/CSSSelectorProfileView.js:
        (WebInspector.CSSSelectorProfileType.prototype.stopRecordingProfile):
        (WebInspector.CSSSelectorProfileType.prototype.createTemporaryProfile):
        (WebInspector.CSSSelectorProfileType.prototype.createProfile):
        (WebInspector.CSSProfileHeader):
        (WebInspector.CSSProfileHeader.prototype.createSidebarTreeElement):
        (WebInspector.CSSProfileHeader.prototype.createView):
        * inspector/front-end/HeapSnapshotView.js:
        (WebInspector.HeapSnapshotProfileType.prototype.createTemporaryProfile):
        (WebInspector.HeapSnapshotProfileType.prototype.createProfile):
        (WebInspector.HeapProfileHeader):
        (WebInspector.HeapProfileHeader.prototype.createSidebarTreeElement):
        (WebInspector.HeapProfileHeader.prototype.createView):
        (WebInspector.HeapProfileHeader.prototype.load):
        (WebInspector.HeapProfileHeader.prototype.saveToFile):
        * inspector/front-end/ProfileLauncherView.js:
        (WebInspector.ProfileLauncherView):
        (WebInspector.ProfileLauncherView.prototype.addProfileType):
        (WebInspector.ProfileLauncherView.prototype._profileTypeChanged):
        * inspector/front-end/ProfilesPanel.js:
        (WebInspector.ProfileType):
        (WebInspector.ProfileHeader):
        (WebInspector.ProfileHeader.prototype.profileType):
        (WebInspector.ProfileHeader.prototype.createSidebarTreeElement):
        (WebInspector.ProfileHeader.prototype.existingView):
        (WebInspector.ProfileHeader.prototype.view):
        (WebInspector.ProfileHeader.prototype.createView):
        (WebInspector.ProfilesPanel.prototype._reset):
        (WebInspector.ProfilesPanel.prototype.addProfileHeader):
        (WebInspector.ProfilesPanel.prototype._removeProfileHeader):
        (WebInspector.ProfilesPanel.prototype.showProfile):
        (WebInspector.ProfilesPanel.prototype.getProfiles):
        (WebInspector.ProfilesPanel.prototype.findTemporaryProfile):
        (WebInspector.ProfilesPanel.prototype._searchableViews):
        * inspector/front-end/View.js:
        (WebInspector.View._assert):

2012-05-18  Kentaro Hara  <haraken@chromium.org>

        [V8][Refactoring] Remove V8Proxy::throwError(const char*, ErrorType, v8::Isolate*=0)
        https://bugs.webkit.org/show_bug.cgi?id=86802

        Reviewed by Adam Barth.

        As commented here (https://bugs.webkit.org/show_bug.cgi?id=84074#c5),
        I am refactoring a series of confusing throwError()s. This would be
        the final patch for the refactoring.

        This patch removes V8Proxy::throwError(const char*, ErrorType, v8::Isolate*=0).
        Also this patch refactors up a couple of throwError()s that I've forgot to
        refactor in the previous patches.

        No tests. No change in behavior.

        * bindings/v8/V8NodeFilterCondition.cpp:
        (WebCore::V8NodeFilterCondition::acceptNode):
        * bindings/v8/V8Proxy.h:
        * bindings/v8/custom/V8ArrayBufferCustom.cpp:
        (WebCore::V8ArrayBuffer::constructorCallback):
        * bindings/v8/custom/V8ArrayBufferViewCustom.h:
        (WebCore::constructWebGLArray):
        * bindings/v8/custom/V8SQLResultSetRowListCustom.cpp:
        (WebCore::V8SQLResultSetRowList::itemCallback):

2012-05-18  MORITA Hajime <morrita@google.com>

        Unreviewed attempt to fix build breakage on r117572

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

2012-05-18  MORITA Hajime  <morrita@google.com>

        https://bugs.webkit.org/show_bug.cgi?id=85515
        Stale frame in WebCore::SpellChecker::didCheckSucceeded

        Reviewed by Ryosuke Niwa.

        Added EditorClient::frameWillDetachPage() notification to give a
        change to invalidate pending spellcheck requests on the client.

        Test: editing/spelling/spellcheck-async-remove-frame.html

        * editing/Editor.cpp:
        (WebCore::Editor::Editor):
        * editing/Editor.h:
        (Editor):
        * loader/EmptyClients.h:
        (WebCore::EmptyEditorClient::frameWillDetachPage):
        * page/EditorClient.h:
        (EditorClient):

2012-05-18  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: add ContentProvider::contentType and use it when rendering navigator tree.
        https://bugs.webkit.org/show_bug.cgi?id=86833

        Reviewed by Vsevolod Vlasov.

        Added ContentProvider::contentType, regactored NavigatorView to use the icon defined by the content type.

        * inspector/front-end/CompilerScriptMapping.js:
        * inspector/front-end/ContentProvider.js:
        (WebInspector.ContentProvider.prototype.contentType):
        * inspector/front-end/ContentProviders.js:
        (WebInspector.ConcatenatedScriptsContentProvider.prototype.contentType):
        (WebInspector.CompilerSourceMappingContentProvider):
        (WebInspector.CompilerSourceMappingContentProvider.prototype.contentType):
        (WebInspector.CompilerSourceMappingContentProvider.prototype.requestContent):
        (WebInspector.StaticContentProvider):
        (WebInspector.StaticContentProvider.prototype.contentType):
        (WebInspector.StaticContentProvider.prototype.requestContent):
        * inspector/front-end/NavigatorView.js:
        (WebInspector.NavigatorTreeOutline.prototype.scriptTreeElements):
        (WebInspector.NavigatorSourceTreeElement):
        * inspector/front-end/NetworkRequest.js:
        (WebInspector.NetworkRequest.prototype.contentType):
        * inspector/front-end/Resource.js:
        (WebInspector.Resource.prototype.contentType):
        (WebInspector.Resource.prototype.canonicalMimeType):
        (WebInspector.ResourceRevision.prototype.contentType):
        * inspector/front-end/ResourceType.js:
        (WebInspector.ResourceType.prototype.toString):
        (WebInspector.ResourceType.prototype.canonicalMimeType):
        * inspector/front-end/Script.js:
        (WebInspector.Script.prototype.contentType):
        * inspector/front-end/ScriptSnippetModel.js:
        (WebInspector.SnippetContentProvider):
        * inspector/front-end/StylesPanel.js:
        * inspector/front-end/UISourceCode.js:
        (WebInspector.UISourceCode.prototype.contentType):
        * inspector/front-end/navigatorView.css:
        (.navigator-stylesheet-tree-item .icon):
        (.navigator-document-tree-item .icon):

2012-05-18  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r117556.
        http://trac.webkit.org/changeset/117556
        https://bugs.webkit.org/show_bug.cgi?id=86825

        Wrong fix. IE still adds 1px padding. We're missing that in
        textarea (Requested by rniwa on #webkit).

        * css/html.css:
        (input::-webkit-input-placeholder, isindex::-webkit-input-placeholder):
        * rendering/RenderTextControlSingleLine.cpp:
        (WebCore::RenderTextControlSingleLine::createInnerTextStyle):

2012-05-17  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: remove File abstraction from the AdvancedSearchController, migrate it to UISourceCode.
        https://bugs.webkit.org/show_bug.cgi?id=86809

        Reviewed by Yury Semikhatsky.

        This change migrates AdvancedSearchController from "Object" to "UISourceCode".
        I don't see why we need this abstraction and as a side effect, it makes search
        across scripts work for styles.

        * English.lproj/localizedStrings.js:
        * inspector/front-end/AdvancedSearchController.js:
        (WebInspector.SearchResult):
        (WebInspector.FileBasedSearchResultsPane.prototype._createAnchor):
        (WebInspector.FileBasedSearchResultsPane.prototype.addSearchResult):
        (WebInspector.FileBasedSearchResultsPane.prototype._appendSearchMatches):
        (WebInspector.FileBasedSearchResultsPane.prototype._regexMatchRanges):
        (WebInspector.FileBasedSearchResultsPane.SearchResult):
        * inspector/front-end/ScriptsSearchScope.js:
        (WebInspector.ScriptsSearchScope.prototype.createSearchResultsPane):
        * inspector/front-end/inspector.js:
        (WebInspector._registerShortcuts):

2012-05-17  Yury Semikhatsky  <yurys@chromium.org>

        Web Inspector: add an option to show last N hidden children of node in heap profiler
        https://bugs.webkit.org/show_bug.cgi?id=86757

        Reviewed by Pavel Feldman.

        Renamed "Show next N" to "Show N before" and added "Show N after" button. Also
        when all 3 buttons would have equal effect there is now only "Show all N" button.

        * English.lproj/localizedStrings.js:
        * inspector/front-end/ShowMoreDataGridNode.js:
        (WebInspector.ShowMoreDataGridNode):
        (WebInspector.ShowMoreDataGridNode.prototype._showLastChunk):
        (WebInspector.ShowMoreDataGridNode.prototype._updateLabels):
        (WebInspector.ShowMoreDataGridNode.prototype.createCells):

2012-05-17  Ryosuke Niwa  <rniwa@webkit.org>

        WebKit erroneously add 1px padding in input elements
        https://bugs.webkit.org/show_bug.cgi?id=86784

        Reviewed by Kent Tamura.

        Fixed the bug by removing the code that added left and right paddings in input elements.
        The code was added in r13567 to match a very old version of Internet Explorer but this quirk
        does not seem to exists in IE9 (both in quirks and standard modes).

        A lot of tests need to be rebaselined due to 1px difference inside input elements, and 2px
        differences for the width of input elements. (In some extreme cases, line breaking changed
        due to the width change).

        Test: fast/forms/input-textarea-padding-match.html

        * css/html.css:
        (input::-webkit-input-placeholder, isindex::-webkit-input-placeholder):
        * rendering/RenderTextControlSingleLine.cpp:
        (WebCore::RenderTextControlSingleLine::createInnerTextStyle):

2012-05-18  Zalan Bujtas  <zbujtas@gmail.com>

        [Qt] Gesture tap highlighter needs to take overflow clip into account.
        https://bugs.webkit.org/show_bug.cgi?id=84989

        Reviewed by Kenneth Rohde Christiansen.

        Apply overflow clip on the focus ring if needed.

        Follow up patches are needed to address the following cases.

        [Qt] Gesture tap highlighter should take parent iframe's transform into account.
        https://bugs.webkit.org/show_bug.cgi?id=86645

        [Qt] Gesture tap highlighter needs to take frame clipping into account.
        https://bugs.webkit.org/show_bug.cgi?id=86646

        [Qt] Gesture tap highlighter's overflow clip is not always correct when
        nested enclosing containers have transforms.
        https://bugs.webkit.org/show_bug.cgi?id=86641

        Manual test: ManualTests/qt/tap-highlighting-overflow-hidden.html

        * page/GestureTapHighlighter.cpp:
        (WebCore::GestureTapHighlighter::pathForNodeHighlight):

2012-05-17  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] KURL::fileSystemPath() should strip the query of the uri
        https://bugs.webkit.org/show_bug.cgi?id=86721

        Reviewed by Martin Robinson.

        * platform/gtk/KURLGtk.cpp:
        (WebCore::KURL::fileSystemPath): Use the already parsed path to
        create the GFile instead of the whole URL string. The parsed path
        doesn't include neither the fragment (#) nor the query (?) parts.

2012-05-17  Kentaro Hara  <haraken@chromium.org>

        [V8][Refactoring] Remove V8Proxy::deletionNotHandledByInterceptor()
        https://bugs.webkit.org/show_bug.cgi?id=86803

        Reviewed by Dimitri Glazkov.

        V8Proxy::deletionNotHandledByInterceptor() is used by V8StorageCustom.cpp
        only, just in order to return v8::Handle<v8::Boolean>(). In such cases,
        other custom bindings are hard-coding 'return v8::Handle<v8::Boolean>()'.
        Thus we can hard-code 'return v8::Handle<v8::Boolean>()' in V8StorageCustom.cpp
        too, and remove V8Proxy::deletionNotHandledByInterceptor().

        No tests. No change in behavior.

        * bindings/v8/V8Proxy.h:
        * bindings/v8/custom/V8StorageCustom.cpp:
        (WebCore::storageDeleter):

2012-05-17  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: speed-up markQueriableHeapObjects function.
        https://bugs.webkit.org/show_bug.cgi?id=86732

        Reviewed by Yury Semikhatsky.

        * inspector/front-end/HeapSnapshot.js:
        (WebInspector.HeapSnapshot.prototype._flagsOfNode):
        (WebInspector.HeapSnapshot.prototype._markDetachedDOMTreeNodes):
        (WebInspector.HeapSnapshot.prototype._markQueriableHeapObjects):
        (WebInspector.HeapSnapshot.prototype._calculateFlags):

2012-05-15  Kinuko Yasuda  <kinuko@chromium.org>

        Some Spelling Mistakes Result in Compile Errors with ENABLE(FILE_SYSTEM) in LocalFileSystem.cpp
        https://bugs.webkit.org/show_bug.cgi?id=86103

        Reviewed by Rob Buis.

        Added build fixes and some (limited) common implementation for non-chromium ports.

        No new tests as this should have no functionality changes.

        * Modules/filesystem/DOMFileSystemBase.cpp:
        (WebCore::DOMFileSystemBase::isValidType): Added common implementation for non-chromium ports.
        (WebCore::DOMFileSystemBase::crackFileSystemURL): Ditto.
        (WebCore::DOMFileSystemBase::supportsToURL): Ditto.
        (WebCore::DOMFileSystemBase::createFileSystemURL): Ditto.
        * Modules/filesystem/LocalFileSystem.cpp:
        (WebCore::LocalFileSystem::readFileSystem): Fixed.
        (WebCore::LocalFileSystem::requestFileSystem): Fixed.
        * platform/blackberry/AsyncFileSystemBlackBerry.cpp:
        (WebCore::AsyncFileSystem::openFileSystem): Fixed.
        * platform/gtk/AsyncFileSystemGtk.cpp:
        (WebCore::AsyncFileSystem::openFileSystem): Fixed.

2012-05-17  Wei James  <james.wei@intel.com>

        AudioBufferSourceNode and MediaElementAudioSourceNode should support multi-channel > stereo
        https://bugs.webkit.org/show_bug.cgi?id=75119

        Reviewed by Chris Rogers.

        As multiple channel support in AudioBus and other places is already
        implemented, the check can be removed here.  

        * Modules/webaudio/MediaElementAudioSourceNode.cpp:
        (WebCore::MediaElementAudioSourceNode::setFormat):

2012-05-17  Dan Bernstein  <mitz@apple.com>

        <rdar://problem/11419933> Problems with flipped writing modes and compositing
        https://bugs.webkit.org/show_bug.cgi?id=86032

        Reviewed by Anders Carlsson.

        Test: compositing/bounds-in-flipped-writing-mode.html

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::calculateLayerBounds): Apply a writing-mode flip to the bounding box
        if needed.

2012-05-17  Kentaro Hara  <haraken@chromium.org>

        [V8][Refactoring] Remove V8Proxy::throwError(const char*, v8::Isolate* = 0)
        https://bugs.webkit.org/show_bug.cgi?id=86794

        Reviewed by Adam Barth.

        As commented here (https://bugs.webkit.org/show_bug.cgi?id=84074#c5),
        I am refactoring a series of confusing throwError()s.
        This patch removes V8Proxy::throwError(const char*, v8::Isolate* = 0).

        No tests. No change in behavior.

        * bindings/v8/V8Utilities.cpp:
        (WebCore::extractTransferables):
        (WebCore::getMessagePortArray):
        * bindings/v8/custom/V8ArrayBufferViewCustom.h:
        (WebCore::constructWebGLArrayWithArrayBufferArgument):
        (WebCore::constructWebGLArray):
        * bindings/v8/custom/V8AudioBufferSourceNodeCustom.cpp:
        (WebCore::V8AudioBufferSourceNode::bufferAccessorSetter):
        * bindings/v8/custom/V8ClipboardCustom.cpp:
        (WebCore::V8Clipboard::setDragImageCallback):
        * bindings/v8/custom/V8HTMLDocumentCustom.cpp:
        (WebCore::V8HTMLDocument::openCallback):
        * bindings/v8/custom/V8HTMLInputElementCustom.cpp:
        (WebCore::V8HTMLInputElement::selectionStartAccessorGetter):
        (WebCore::V8HTMLInputElement::selectionStartAccessorSetter):
        (WebCore::V8HTMLInputElement::selectionEndAccessorGetter):
        (WebCore::V8HTMLInputElement::selectionEndAccessorSetter):
        (WebCore::V8HTMLInputElement::selectionDirectionAccessorGetter):
        (WebCore::V8HTMLInputElement::selectionDirectionAccessorSetter):
        (WebCore::V8HTMLInputElement::setSelectionRangeCallback):
        * bindings/v8/custom/V8HTMLMediaElementCustom.cpp:
        (WebCore::V8HTMLMediaElement::controllerAccessorSetter):
        * bindings/v8/custom/V8InjectedScriptHostCustom.cpp:
        (WebCore::V8InjectedScriptHost::inspectedObjectCallback):

2012-05-17  Dana Jansens  <danakj@chromium.org>

        [chromium] Scale all compositor output by the defaultDeviceScaleFactor
        https://bugs.webkit.org/show_bug.cgi?id=86051

        Reviewed by James Robinson.

        On initialization, give the defaultDeviceScaleFactor to the compositor
        to have it scale all output from WebCore's layout size to physical
        pixels. This allows us to scale up to high-dpi devices without using
        fixed-layout, so we can leave the WebCore frame size in layout pixels,
        while drawing the frame into a larger physical pixel size.

        CCLayerTreeHost becomes aware of the deviceScaleFactor and scales all
        output by this factor by scaling the viewport and all drawing
        transforms.

        Anything that works in physical pixels (content space), uses the
        deviceViewportSize() in place of the viewportSize(), since when
        deviceScaleFactor != 1 in CCLayerTreeHost, the WebCore viewport
        is no longer physical pixels.

        Scroll positions are in layout pixels, and must be scaled to/from
        content space within the compositor.

        Unit tests: CCLayerTreeHostTestDeviceScaleFactorScalesViewportAndLayers

        * platform/graphics/chromium/LayerRendererChromium.h:
        (LayerRendererChromiumClient):
        (WebCore::LayerRendererChromium::viewportSize):
        (WebCore::LayerRendererChromium::viewportWidth):
        (WebCore::LayerRendererChromium::viewportHeight):
        (LayerRendererChromium):
        * platform/graphics/chromium/cc/CCLayerTreeHost.cpp:
        (WebCore::CCLayerTreeHost::initializeLayerRenderer):
        (WebCore::CCLayerTreeHost::setViewportSize):
        (WebCore::CCLayerTreeHost::updateLayers):
        (WebCore::CCLayerTreeHost::paintLayerContents):
        * platform/graphics/chromium/cc/CCLayerTreeHost.h:
        (WebCore::CCSettings::CCSettings):
        (CCSettings):
        (CCLayerTreeHost):
        (WebCore::CCLayerTreeHost::deviceViewportSize):
        * platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:
        (WebCore::CCLayerTreeHostImpl::calculateRenderSurfaceLayerList):
        (WebCore::CCLayerTreeHostImpl::calculateRenderPasses):
        (WebCore::CCLayerTreeHostImpl::setViewportSize):
        (WebCore::CCLayerTreeHostImpl::updateMaxScrollPosition):
        (WebCore::CCLayerTreeHostImpl::scrollBegin):
        (WebCore::CCLayerTreeHostImpl::computePinchZoomDeltas):
        * platform/graphics/chromium/cc/CCLayerTreeHostImpl.h:
        (WebCore::CCLayerTreeHostImpl::viewportSize):
        (CCLayerTreeHostImpl):

2012-05-17  Hayato Ito  <hayato@chromium.org>

        [Shadow DOM] Add an assertion to make sure a visited node is not an active insertion point.
        https://bugs.webkit.org/show_bug.cgi?id=86708

        Reviewed by Eric Seidel.

        Since InsertionPoint now has isActive() member function,
        we can add an assertion to ComposedShadowTreeWalker::assertPrecondition()
        using that function.

        No new tests, no change in behavior.

        * dom/ComposedShadowTreeWalker.h:
        (WebCore::ComposedShadowTreeWalker::assertPrecondition):

2012-05-17  Ami Fischman  <fischman@chromium.org>

        [Chromium] Store HTTP version in WebURLResponse
        https://bugs.webkit.org/show_bug.cgi?id=86522

        Reviewed by Adam Barth.

        No new tests; this isn't exposed to the web platform.

        * platform/chromium/support/WebURLResponse.cpp:
        (WebKit::WebURLResponse::httpVersion):
        (WebKit):
        (WebKit::WebURLResponse::setHTTPVersion):
        * platform/network/chromium/ResourceResponse.h:
        (ResourceResponse):
        (WebCore::ResourceResponse::ResourceResponse):
        (WebCore::ResourceResponse::httpVersion):
        (WebCore::ResourceResponse::setHTTPVersion):

2012-05-17  Levi Weintraub  <leviw@chromium.org>

        Floor y coordinate in Chromium's GraphicsContext::drawLineForText to avoid anti-aliasing
        https://bugs.webkit.org/show_bug.cgi?id=86775

        Reviewed by Eric Seidel.

        Despite operating in floats, we always want to draw lines for text aligned to pixel boundaries.
        There are similar functions to do this in other platforms, but to get proper results, we only
        need to floor the y value, as we always draw these lines horizontally.

        No tests. No change in behavior prior to sub-pixel change.

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

2012-05-17  Michael Moss  <mmoss@chromium.org>

        Linux amd64 platform reported as i686
        https://bugs.webkit.org/show_bug.cgi?id=86778
        http://code.google.com/p/chromium/issues/detail?id=128167

        Remove the old hard-coded gyp define and allow the more recent (but
        still quite old) code in Source/WebCore/page/NavigatorBase.cpp to take
        precedence and detect this at runtime.

        Reviewed by Tony Chang.

        No new tests because it's hardware dependent.

        * WebCore.gyp/WebCore.gyp:

2012-05-17  Vangelis Kokkevis  <vangelis@chromium.org>

        [chromium] Expose layer tiling size options to WebSettings.
        https://bugs.webkit.org/show_bug.cgi?id=86425

        Removing hardcoded tile size and max untiled layer size from TiledLayerChromium
        and instead have the values passed in via the LTH CCSettings. This will allow
        different compositor instances to adjust tiling parameters as needed and makes
        it possible to set the values via command line arguments.

        Reviewed by Adrienne Walker.

        * platform/graphics/chromium/TiledLayerChromium.cpp:
        (WebCore::TiledLayerChromium::TiledLayerChromium):
        (WebCore::TiledLayerChromium::updateTileSizeAndTilingOption):
        Made some additional adjustments to the single-tile heuristic
        to make it work better with arbitrary sizes while still avoiding
        to create unreasonably large layers.
        * platform/graphics/chromium/cc/CCLayerTreeHost.cpp:
        (WebCore::CCLayerTreeHost::initializeLayerRenderer):
        * platform/graphics/chromium/cc/CCLayerTreeHost.h:
        (WebCore::CCSettings::CCSettings):
        (CCSettings):

2012-05-17  Sudarsana Nagineni  <sudarsana.nagineni@linux.intel.com>

        Memory leak in NetworkInfoClient
        https://bugs.webkit.org/show_bug.cgi?id=86603

        Reviewed by Adam Barth.

        Fix a memory leak in NetworkInfoClient by using OwnPtr and
        change the class not to inherite from RefCounted.

        * Modules/networkinfo/NetworkInfoClient.h:

2012-05-17  Joshua Bell  <jsbell@chromium.org>

        IndexedDB: Remove IDBIndex.storeName
        https://bugs.webkit.org/show_bug.cgi?id=86676

        Reviewed by Tony Chang.

        Older versions of the IDB spec exposed IDBIndex.storeName. While it's been removed
        from the IDL, the additional storage/plumbing are unnecessary clutter. Nuke it!

        No new tests - no functional changes.

        * Modules/indexeddb/IDBIndexBackendImpl.cpp:
        (WebCore::IDBIndexBackendImpl::IDBIndexBackendImpl): Remove storeName parameter, and
        const declaration on object store param. The former was used to get a non-const pointer
        via indirection in openCursorInternal.
        (WebCore::IDBIndexBackendImpl::openCursorInternal): Use store pointer directly, don't
        look it up by name in the transaction.
        * Modules/indexeddb/IDBIndexBackendImpl.h:
        (WebCore::IDBIndexBackendImpl::create): Remove storeName parameters.
        (IDBIndexBackendImpl): Remove storeName() method.
        * Modules/indexeddb/IDBIndexBackendInterface.h:
        (IDBIndexBackendInterface): Remove storeName parameter.
        * Modules/indexeddb/IDBObjectStoreBackendImpl.cpp:
        (WebCore::IDBObjectStoreBackendImpl::createIndex): Remove storeName parameter.
        (WebCore::IDBObjectStoreBackendImpl::loadIndexes): Remove storeName parameter.

2012-05-17  Joshua Bell  <jsbell@chromium.org>

        IndexedDB: Implement IDBObjectStore.autoIncrement
        https://bugs.webkit.org/show_bug.cgi?id=86662

        Reviewed by Dimitri Glazkov.

        Simple boolean accessor defined in the IDB spec, which reflects the
        object store's internal autoIncrement flag.

        Test: storage/indexeddb/objectstore-basics.html

        * Modules/indexeddb/IDBObjectStore.cpp:
        (WebCore::IDBObjectStore::autoIncrement): Forward call to back end.
        (WebCore):
        * Modules/indexeddb/IDBObjectStore.h: Expose attribute as method.
        (IDBObjectStore):
        * Modules/indexeddb/IDBObjectStore.idl: Define the attribute.
        * Modules/indexeddb/IDBObjectStoreBackendInterface.h: Expose in interface.
        (IDBObjectStoreBackendInterface):

2012-05-17  Kentaro Hara  <haraken@chromium.org>

        [V8][Refactoring] Remove throwError("message", XXXError) from CodeGeneratorV8.pm
        https://bugs.webkit.org/show_bug.cgi?id=86744

        Reviewed by Adam Barth.

        As commented in https://bugs.webkit.org/show_bug.cgi?id=84074#c5,
        I am refactoring a series of confusing throwError()s.

        This patch removes throwError("message", XXXError) in CodeGeneratorV8.pm
        and replaces it with throwTypeError("message") or throwError(XXXError, "message").

        No tests. No change in behavior.

        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateParametersCheck):
        (GenerateConstructorCallback):
        (GenerateEventConstructorCallback):
        (GenerateNamedConstructorCallback):
        * bindings/scripts/test/V8/V8TestEventConstructor.cpp:
        (WebCore::V8TestEventConstructor::constructorCallback):
        * bindings/scripts/test/V8/V8TestInterface.cpp:
        (WebCore::V8TestInterface::constructorCallback):
        * bindings/scripts/test/V8/V8TestNamedConstructor.cpp:
        (WebCore::V8TestNamedConstructorConstructorCallback):
        * bindings/scripts/test/V8/V8TestNode.cpp:
        (WebCore::V8TestNode::constructorCallback):
        * bindings/scripts/test/V8/V8TestObj.cpp:
        (WebCore::TestObjV8Internal::optionsObjectCallback):
        (WebCore::V8TestObj::constructorCallback):
        * bindings/scripts/test/V8/V8TestSerializedScriptValueInterface.cpp:
        (WebCore::TestSerializedScriptValueInterfaceV8Internal::acceptTransferListCallback):
        (WebCore::TestSerializedScriptValueInterfaceV8Internal::multiTransferListCallback):
        (WebCore::V8TestSerializedScriptValueInterface::constructorCallback):

2012-05-17  Gregg Tavares  <gman@google.com>

        Add more descriptive warnings for framebuffer incomplete conditions
        https://bugs.webkit.org/show_bug.cgi?id=86774

        Reviewed by Kenneth Russell.

        No new tests as there is no new functionality

        * html/canvas/WebGLFramebuffer.cpp:
        (WebCore::WebGLFramebuffer::checkStatus):
        (WebCore::WebGLFramebuffer::onAccess):
        (WebCore::WebGLFramebuffer::initializeRenderbuffers):
        * html/canvas/WebGLFramebuffer.h:
        (WebGLFramebuffer):
        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore):
        (WebCore::WebGLRenderingContext::checkFramebufferStatus):
        (WebCore::WebGLRenderingContext::clear):
        (WebCore::WebGLRenderingContext::copyTexImage2D):
        (WebCore::WebGLRenderingContext::copyTexSubImage2D):
        (WebCore::WebGLRenderingContext::drawArrays):
        (WebCore::WebGLRenderingContext::drawElements):
        (WebCore::WebGLRenderingContext::readPixels):
        (WebCore::WebGLRenderingContext::printGLWarningToConsole):
        * html/canvas/WebGLRenderingContext.h:

2012-05-17  Oliver Hunt  <oliver@apple.com>

        Endeavour to make the windows test bot actually able to run tests.
        https://bugs.webkit.org/show_bug.cgi?id=86772

        Reviewed by Sam Weinig.

        Use WEBKIT_EXPORT to get correct export behaviour on windows, rather than
        relying on the .def files.

        * bindings/js/JSDOMGlobalObject.h:
        (JSDOMGlobalObject):
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateHeader):

2012-05-17  Beth Dakin  <bdakin@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=86266
        r112643/r116697 break Webview form input fields
        -and corresponding-
        <rdar://problem/11400430>

        Reviewed by Dan Bernstein.

        There is a recent history of changes in this are that seem worth documenting. 
        First was the change to switch to using NSTextFieldCell to draw text fields: 
        http://trac.webkit.org/changeset/104240

        That led to problems because of the clear background that I thought at the time 
        were specific to MountainLion. To fix that, I made this change:
        http://trac.webkit.org/changeset/110480

        But that change resulted in styled text fields getting an un-themed border, which 
        led to this change on the branch: http://trac.webkit.org/changeset/112643 and a 
        change on TOT that was identical for Lion and SnowLeopard but introduced new 
        behavior for MountainLion: http://trac.webkit.org/changeset/116697

        And that brings us to this bug, where it turns out the clear background is a 
        problem on Lion and SnowLeopard too. This patch fixes the bug by using the 
        original WebCoreSystemInterface function to paint all text fields on Lion and 
        SnowLeopard that are styled. This is what we used to paint all text fields before 
        r104240, which is the first change listed above. Un-styled text fields will still 
        use NSTextFieldCell on these platforms, but with a hardcoded white background. 
        * rendering/RenderThemeMac.h:
        (RenderThemeMac):
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::paintTextField):
        (WebCore::RenderThemeMac::textField):

2012-05-15  Andreas Kling  <kling@webkit.org>

        IconDatabase: Move icon retain/release off of the main thread.
        <http://webkit.org/b/85799>
        <rdar://problem/9507113>

        Reviewed by Brady Eidson.

        Batch up the retain/release operations and execute them as part of the sync thread loop.
        The batch execution is guarded by a new mutex (m_urlsToRetainOrReleaseLock.)
        This avoids blocking the main thread on m_urlAndIconLock for basic retain/release.

        There is one exception; if there are pending retain/release operations in synchronousIconForPageURL,
        it will acquire the lock and flush the operations.

        There should be no behavior change, this is only meant to reduce lock contention.

        * loader/icon/PageURLRecord.h:
        (WebCore::PageURLRecord::retain):
        (WebCore::PageURLRecord::release):

            Added a 'count' argument to these so we can batch up the operations in IconDatabase.

        * loader/icon/IconDatabase.h:
        * loader/icon/IconDatabase.cpp:
        (WebCore::IconDatabase::performScheduleOrDeferSyncTimer):
        (WebCore::IconDatabase::performScheduleOrDeferSyncTimerOnMainThread):
        (WebCore::IconDatabase::scheduleOrDeferSyncTimer):

            Perform the the timer scheduling on the main thread as it can be done on a different
            thread by way of retainIconForPageURL or releaseIconForPageURL.

        (WebCore::IconDatabase::synchronousIconForPageURL):
        (WebCore::IconDatabase::retainIconForPageURL):
        (WebCore::IconDatabase::performRetainIconForPageURL):
        (WebCore::IconDatabase::releaseIconForPageURL):
        (WebCore::IconDatabase::performReleaseIconForPageURL):
        (WebCore::IconDatabase::retainedPageURLCount):
        (WebCore::IconDatabase::IconDatabase):
        (WebCore::IconDatabase::performURLImport):
        (WebCore::IconDatabase::syncThreadMainLoop):
        (WebCore::IconDatabase::performPendingRetainAndReleaseOperations):

2012-05-17  Julien Chaffraix  <jchaffraix@webkit.org>

        Kill RenderLayer::relativePositionOffset(LayoutUnit& relX, LayoutUnit& relY) and cleanup RenderInline::clippedOverflowRectForRepaint
        https://bugs.webkit.org/show_bug.cgi?id=86551

        Reviewed by Abhishek Arya.

        No test since there is no expected change in behavior.

        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::clippedOverflowRectForRepaint):
        Changed the function to use LayoutRect arithmetics instead of calculating
        top / left manually. While at it, improved the naming, removed some local
        variables and removed an unneeded style() NULL-check.

        * rendering/RenderLayer.h: Removed the function.

2012-05-17  Rob Buis  <rwlbuis@webkit.org>

        [BlackBerry] Fix linking errors
        https://bugs.webkit.org/show_bug.cgi?id=86768

        Reviewed by Antonio Gomes.

        Add some missing stubs so we can link again.

        * platform/blackberry/ContextMenuBlackBerry.cpp:
        (WebCore::ContextMenu::itemCount):
        (WebCore):
        * platform/blackberry/PlatformScreenBlackBerry.cpp:
        (WebCore::screenHorizontalDPI):
        (WebCore):
        (WebCore::screenVerticalDPI):

2012-05-17  Emil A Eklund  <eae@chromium.org>

        Fix rounding in paintSelection
        https://bugs.webkit.org/show_bug.cgi?id=86693

        Reviewed by Eric Seidel.

        Break out rounding logic from InlineTextBox::paintSelection into separate
        function and use it for all the EllipsisBox paintSelection implementation
        and selection gap calculation. This ensures that selections are painted
        without gaps and overlaps once we turn on subpixel layout.

        No new tests, covered by existing tests in editing/selection and
        editing/style.

        * rendering/EllipsisBox.cpp:
        (WebCore::EllipsisBox::paintSelection):
        * rendering/InlineTextBox.cpp:
        (WebCore::alignSelectionRectToDevicePixels):
        (WebCore):
        (WebCore::InlineTextBox::paintSelection):
        * rendering/InlineTextBox.h:
        (WebCore):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::logicalLeftSelectionGap):
        (WebCore::RenderBlock::logicalRightSelectionGap):

2012-05-17  Michal Mocny  <mmocny@google.com>

        [chromium] Limiting render surface texture manager memory to 0 when contentsMemoryUseBytes is large.
        https://bugs.webkit.org/show_bug.cgi?id=86764

        Reviewed by Adrienne Walker.

        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::beginDrawingFrame):

2012-05-17  Dan Bernstein  <mitz@apple.com>

        In vertical writing modes, pagination may split a line after a block shifts
        https://bugs.webkit.org/show_bug.cgi?id=86763

        Reviewed by Sam Weinig.

        Test: fast/multicol/pageLogicalOffset-vertical.html

        LayoutState::pageLogicalOffset() was returning bogus results in vertical writing modes,
        because it was always using physical heights. Changed it to take a RenderBox and use its
        writing mode to choose between heights and widths.

        * rendering/LayoutState.cpp:
        (WebCore::LayoutState::pageLogicalOffset):
        (WebCore::LayoutState::addForcedColumnBreak):
        * rendering/LayoutState.h:
        (LayoutState):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::layoutBlock):
        (WebCore::RenderBlock::markForPaginationRelayoutIfNeeded):
        (WebCore::RenderBlock::layoutColumns):
        (WebCore::RenderBlock::applyBeforeBreak):
        (WebCore::RenderBlock::applyAfterBreak):
        * rendering/RenderDeprecatedFlexibleBox.cpp:
        (WebCore::RenderDeprecatedFlexibleBox::layoutBlock):
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::layout):
        * rendering/RenderTableRow.cpp:
        (WebCore::RenderTableRow::layout):
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::layoutRows):

2012-05-17  Abhishek Arya  <inferno@chromium.org>

        Move run-in handling to addChild, instead of in layout.
        https://bugs.webkit.org/show_bug.cgi?id=86387

        Reviewed by Julien Chaffraix.

        Tests: fast/runin/insert-before-run-in.html
               fast/runin/run-in-after-run-in.html
               fast/runin/run-in-parent-add-child.html
               fast/runin/run-in-parent-block-child-add-and-intrude.html
               fast/runin/run-in-parent-block-child-add.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::addChildIgnoringAnonymousColumnBlocks): handle run-ins here
        instead of layout. We do run-in handling when we see a new child with run-in display
        or add a new block whose previous sibling is run-in.
        (WebCore::RenderBlock::makeChildrenNonInline): if we will have block children, need
        to move run-in back to its original position.
        (WebCore::RenderBlock::handleSpecialChild): no longer need to handle run-ins during layout.
        (WebCore::destroyRunIn): helper to destroy a block or inline run-in.
        (WebCore):
        (WebCore::RenderBlock::createReplacementRunIn): helper to create the new replacement run-in.
        For moveRunInUnderSiblingBlockIfNeeded, it will be used to create a new inline run-in
        that goes into the next sibling block. For moveRunInToOriginalPosition, it creates a new
        block run-in that goes back to where it came from.
        (WebCore::RenderBlock::moveRunInUnderSiblingBlockIfNeeded): almost same as previous
        handleRunInChild function, but with the return type removed. Also, we don't allow
        a run-in to intrude into a block that already has a run-in.
        (WebCore::RenderBlock::moveRunInToOriginalPosition): moves run-in back to where it came from.
        * rendering/RenderBlock.h:
        (RenderBlock):
        * rendering/RenderBox.cpp:
        * rendering/RenderBox.h:
        (RenderBox):
        * rendering/RenderBoxModelObject.cpp: move all moveChild* functions from RenderBox, since
        they can now be used to move children of inlines.
        (WebCore::RenderBoxModelObject::moveChildTo): same.
        (WebCore):
        (WebCore::RenderBoxModelObject::moveChildrenTo): same.
        * rendering/RenderBoxModelObject.h:
        (RenderBoxModelObject):
        (WebCore::RenderBoxModelObject::moveChildTo): same.
        (WebCore::RenderBoxModelObject::moveAllChildrenTo): same.
        (WebCore::RenderBoxModelObject::moveChildrenTo): same.

2012-05-17  Mikhail Naganov  <mnaganov@chromium.org>

        Support Copy ... actions for the Web Inspector remote debugging mode.
        https://bugs.webkit.org/show_bug.cgi?id=86621

        Reviewed by Pavel Feldman.

        * English.lproj/localizedStrings.js:
        * inspector/front-end/InspectorFrontendHostStub.js:
        (.WebInspector.InspectorFrontendHostStub):
        (.WebInspector.InspectorFrontendHostStub.prototype.documentCopy):
        (.WebInspector.InspectorFrontendHostStub.prototype.copyText):
        (.WebInspector.clipboardAccessDeniedMessage):
        (.WebInspector.ClipboardAccessDeniedScreen):
        * inspector/front-end/inspector.html:
        * inspector/front-end/inspector.js:
        (WebInspector.documentCopy):
        (WebInspector.documentCopyEventFired):

2012-05-02  Robert Hogan  <robert@webkit.org>

        CSS 2.1 failure: table-height-algorithm-023 and -024 fail
        https://bugs.webkit.org/show_bug.cgi?id=85405

        Reviewed by Eric Seidel.

        Treat vertical-align: [length] the same as vertical-align: baseline.

        Tests: css2.1/20110323/table-height-algorithm-023.htm
               css2.1/20110323/table-height-algorithm-024.htm
               fast/table/mozilla-bug10296-vertical-align-1.html
               fast/table/mozilla-bug10296-vertical-align-2.html

        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::calcRowLogicalHeight):
        (WebCore::RenderTableSection::layoutRows):

2012-05-17  Emil A Eklund  <eae@chromium.org>

        Fix rounding in RenderFlowThread::paintIntoRegion
        https://bugs.webkit.org/show_bug.cgi?id=86695

        Reviewed by Eric Seidel.

        Fix rounding of offset in paintIntoRegion to ensure that we paint on
        device pixel boundaries.

        Covered by existing tests in fast/regions.

        * platform/graphics/FractionalLayoutPoint.h:
        (WebCore::roundedIntPoint):
        Add roundedIntPoint(FractionalLayoutSize) function.
        (WebCore):
        * rendering/RenderFlowThread.cpp:
        (WebCore::RenderFlowThread::paintIntoRegion):

2012-05-17  Andreas Kling  <kling@webkit.org>

        Parser: Avoid unnecessary ref count churn in token constructors.
        <http://webkit.org/b/86667>

        Reviewed by Antti Koivisto.

        Pass AtomicString by const reference to avoid useless ref count churn
        in AtomicHTMLToken() and AtomicXMLToken().

        * html/parser/HTMLToken.h:
        (WebCore::AtomicHTMLToken::AtomicHTMLToken):
        * xml/parser/MarkupTokenBase.h:
        (WebCore::AtomicMarkupTokenBase::AtomicMarkupTokenBase):
        * xml/parser/XMLToken.h:
        (WebCore::AtomicXMLToken::AtomicXMLToken):

2012-05-16  Andreas Kling  <kling@webkit.org>

        Make PluginInfoStore properly thread-safe.
        <http://webkit.org/b/86648>
        <rdar://problem/11451178>

        Reviewed by Darin Adler.

        * plugins/PluginData.h:
        (WebCore::MimeClassInfo::isolatedCopy):
        (WebCore::PluginInfo::isolatedCopy):

2012-05-17  Hironori Bono  <hbono@chromium.org>

        [Refactoring] Move platform-specific code in Editor::respondToChangedSelection to the WebKit layer
        https://bugs.webkit.org/show_bug.cgi?id=86591

        Reviewed by Ryosuke Niwa.

        This change adds a TextCheckerClient::shouldEraseMarkersAfterChangeSelection
        function to remove platform-specific code from Editor::respondToChangedSelection
        function.

        No new tests, no change in behavior.

        * editing/Editor.cpp:
        (WebCore::Editor::respondToChangedSelection):
        * loader/EmptyClients.h:
        (WebCore::EmptyTextCheckerClient::shouldEraseMarkersAfterChangeSelection):
        * platform/text/TextCheckerClient.h:
        (TextCheckerClient):

2012-05-11  James Robinson  <jamesr@chromium.org>

        [chromium] Convert GraphicsLayerChromium to use WebLayer types
        https://bugs.webkit.org/show_bug.cgi?id=86269

        Reviewed by Adrienne Walker.

        This converts GraphicsLayerChromium over to use WebLayer and WebContentLayer. The conversion is not completely
        as the Web*Layer APIs are not yet quite complete enough to use everywhere, and the PlatformLayer typedef is not
        changed in this patch. The places where we have to punch out through API layer are marked by
        unwrap<*LayerChromium>() calls and FIXME's in the Web*Layer.h files.  There aren't many.

        Refactor only, existing tests apply.

        * platform/chromium/support/WebTransformationMatrix.cpp:
        (WebKit):
        (WebKit::WebTransformationMatrix::reset):
        (WebKit::WebTransformationMatrix::projectPoint):
        * platform/graphics/chromium/GraphicsLayerChromium.cpp:
        (WebCore::GraphicsLayerChromium::GraphicsLayerChromium):
        (WebCore::GraphicsLayerChromium::willBeDestroyed):
        (WebCore::GraphicsLayerChromium::setName):
        (WebCore::GraphicsLayerChromium::updateNames):
        (WebCore::GraphicsLayerChromium::removeFromParent):
        (WebCore::GraphicsLayerChromium::setSize):
        (WebCore::GraphicsLayerChromium::setTransform):
        (WebCore::GraphicsLayerChromium::setBackgroundColor):
        (WebCore::GraphicsLayerChromium::clearBackgroundColor):
        (WebCore::GraphicsLayerChromium::setContentsOpaque):
        (WebCore::GraphicsLayerChromium::setFilters):
        (WebCore::GraphicsLayerChromium::setMaskLayer):
        (WebCore::GraphicsLayerChromium::setBackfaceVisibility):
        (WebCore::GraphicsLayerChromium::setOpacity):
        (WebCore::GraphicsLayerChromium::setReplicatedByLayer):
        (WebCore::GraphicsLayerChromium::setContentsNeedsDisplay):
        (WebCore::GraphicsLayerChromium::setNeedsDisplay):
        (WebCore::GraphicsLayerChromium::setNeedsDisplayInRect):
        (WebCore::GraphicsLayerChromium::setContentsToImage):
        (WebCore::GraphicsLayerChromium::setContentsToCanvas):
        (WebCore::GraphicsLayerChromium::addAnimation):
        (WebCore::GraphicsLayerChromium::pauseAnimation):
        (WebCore::GraphicsLayerChromium::removeAnimation):
        (WebCore::GraphicsLayerChromium::suspendAnimations):
        (WebCore::GraphicsLayerChromium::resumeAnimations):
        (WebCore::GraphicsLayerChromium::setContentsToMedia):
        (WebCore::GraphicsLayerChromium::hostLayerForChildren):
        (WebCore::GraphicsLayerChromium::layerForParent):
        (WebCore::GraphicsLayerChromium::platformLayer):
        (WebCore::GraphicsLayerChromium::setDebugBackgroundColor):
        (WebCore::GraphicsLayerChromium::setDebugBorder):
        (WebCore::GraphicsLayerChromium::updateChildList):
        (WebCore::GraphicsLayerChromium::updateLayerPosition):
        (WebCore::GraphicsLayerChromium::updateLayerSize):
        (WebCore::GraphicsLayerChromium::updateAnchorPoint):
        (WebCore::GraphicsLayerChromium::updateTransform):
        (WebCore::GraphicsLayerChromium::updateChildrenTransform):
        (WebCore::GraphicsLayerChromium::updateMasksToBounds):
        (WebCore::GraphicsLayerChromium::updateLayerPreserves3D):
        (WebCore::GraphicsLayerChromium::updateLayerIsDrawable):
        (WebCore::GraphicsLayerChromium::updateLayerBackgroundColor):
        (WebCore::GraphicsLayerChromium::updateContentsRect):
        (WebCore::GraphicsLayerChromium::updateContentsScale):
        (WebCore::GraphicsLayerChromium::setupContentsLayer):
        * platform/graphics/chromium/GraphicsLayerChromium.h:
        (WebCore::GraphicsLayerChromium::hasContentsLayer):
        (WebCore::GraphicsLayerChromium::contentsLayer):
        (WebCore::GraphicsLayerChromium::primaryLayer):
        (GraphicsLayerChromium):
        * platform/graphics/chromium/LayerChromium.h:
        (LayerChromium):

2012-05-17  Tony Chang  <tony@chromium.org>

        remove bit rotted comment about css properties
        https://bugs.webkit.org/show_bug.cgi?id=86750

        Reviewed by Alexis Menard.

        It's not clear to me what the first block was even referring to.
        Aural doesn't seem to exist anymore. It might be worth keeping,
        "All the CSS properties are not supported by the renderer at the
        moment.", but it seems obvious to me.

        No new tests, just removing a comment.

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

2012-05-17  Adrienne Walker  <enne@google.com>

        Insert source file and line number for v8 function calls into tracing
        https://bugs.webkit.org/show_bug.cgi?id=84613

        Reviewed by Kentaro Hara.

        The trace for v8 function calls doesn't include any information about
        what function is being called. Pass this information along so it can
        be less opaque.

        * bindings/v8/V8Proxy.cpp:
        (WebCore::resourceInfo):
        (WebCore):
        (WebCore::resourceString):
        (WebCore::V8Proxy::instrumentedCallFunction):
        * platform/chromium/TraceEvent.h:
        (WebCore::TraceEvent::TraceStringWithCopy::TraceStringWithCopy):

2012-05-17  Caio Marcelo de Oliveira Filho  <caio.oliveira@openbossa.org>

        [Qt] REGRESSION(101967): It made editing/style/iframe-onload-crash-mac.html timeout
        https://bugs.webkit.org/show_bug.cgi?id=73802

        Reviewed by Ryosuke Niwa.

        Timeout was caused by an infinite in the outer loop of
        pushDownInlineStyleAroundNode(). The outer loop variable 'current' should point at the
        node containing 'targetNode'. The inner loop traverse the children of 'current'
        and discover the children that contains 'targetNode'.

        However, before the inner loop, we call removeInlineStyleFromElement() that can
        potentially remove the 'current' node from the tree, moving its children to
        'current' former parent. For that reason 'child' and 'lastChild' are collected
        before this call.

        The tricky part is that changing the 'current' children parent, we might trigger
        further side-effects, that can remove either 'child' or 'lastChild' from the tree
        too. The infinite loop was due to 'child' being off the document, so it's
        nextSibling() is 0, and we go another run of outer loop without changing
        'current' because the 'targetNode' wasn't in the first child that inner loop
        couldn't reach.

        When testing Qt on Mac, there was also a crash in RenderTextControl when the font
        family was empty, this patch fixes it as well.

        * editing/ApplyStyleCommand.cpp:
        (WebCore::ApplyStyleCommand::pushDownInlineStyleAroundNode): Use NodeVector
        instead of relying on first/last child being valid after
        removeInlineStyleFromElement() is called. Skip the child if it has no parent,
        this is an indication that it was removed from the tree.

        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::hasValidAvgCharWidth): Empty AtomicStrings aren't
        supported by HashSet, so we have to early return in this case.

2012-05-17  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: implement Go To selector for stylesheet files.
        https://bugs.webkit.org/show_bug.cgi?id=86751

        Reviewed by Yury Semikhatsky.

        StyleSheetOutlineDialog is introduced.

        * English.lproj/localizedStrings.js:
        * inspector/front-end/FilteredItemSelectionDialog.js:
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype._createDebugToolbar):
        (WebInspector.ScriptsPanel.prototype._createButtonAndRegisterShortcuts):
        (WebInspector.ScriptsPanel.prototype._showOutlineDialog):
        * inspector/front-end/StylesPanel.js:
        (WebInspector.StyleSheetOutlineDialog):
        (WebInspector.StyleSheetOutlineDialog.show):
        (WebInspector.StyleSheetOutlineDialog.prototype.itemTitleAt):
        (WebInspector.StyleSheetOutlineDialog.prototype.itemKeyAt):
        (WebInspector.StyleSheetOutlineDialog.prototype.itemsCount):
        (WebInspector.StyleSheetOutlineDialog.prototype.requestItems):
        (WebInspector.StyleSheetOutlineDialog.prototype.requestItems.didGetStyleSheet):
        (WebInspector.StyleSheetOutlineDialog.prototype.selectItem):
        * inspector/front-end/TabbedEditorContainer.js:
        (WebInspector.TabbedEditorContainer.prototype._generateTabId):
        (WebInspector.TabbedEditorContainer.prototype.currentFile):

2012-05-17  Dan Bernstein  <mitz@apple.com>

        REGRESSION (r117428): WebKit API/SPI was removed
        https://bugs.webkit.org/show_bug.cgi?id=86748

        Reverted r117428.

        * testing/InternalSettings.cpp:
        (WebCore::InternalSettings::setMediaPlaybackRequiresUserGesture):
        * testing/InternalSettings.h:
        (InternalSettings):
        * testing/InternalSettings.idl:

2012-05-17  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: create SourceFrames with content providers.
        https://bugs.webkit.org/show_bug.cgi?id=86742

        Reviewed by Vsevolod Vlasov.

        Simple refactoring.

        * inspector/front-end/JavaScriptSourceFrame.js:
        (WebInspector.JavaScriptSourceFrame):
        (WebInspector.JavaScriptSourceFrame.prototype.commitEditing):
        (WebInspector.JavaScriptSourceFrame.prototype.afterTextChanged):
        (WebInspector.JavaScriptSourceFrame.prototype._didEditContent):
        * inspector/front-end/ResourceView.js:
        (WebInspector.ResourceSourceFrame):
        (WebInspector.ResourceSourceFrame.prototype.get resource):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype._createSourceFrame):
        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame):
        (WebInspector.SourceFrame.prototype._ensureContentLoaded):
        * inspector/front-end/StylesPanel.js:
        (WebInspector.StyleSourceFrame):
        * inspector/front-end/UISourceCode.js:
        (WebInspector.UISourceCode.prototype.contentURL):

2012-05-17  Yury Semikhatsky  <yurys@chromium.org>

        Web Inspector: error when expanding an HTMLAllCollection object in the console
        https://bugs.webkit.org/show_bug.cgi?id=86741

        Reviewed by Pavel Feldman.

        Test: inspector/console/inspect-html-all-collection.html

        * inspector/InjectedScriptSource.js: take into account that typeof HTMLAllCollection is "undefined"
        when checking if object resolved by id is valid.

2012-05-17  Kinuko Yasuda  <kinuko@chromium.org>

        Unreviewed build fix attempt. Changing class to struct in forward declaration.

        * fileapi/File.h:
        (WebCore):

2012-05-17  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: convert styles panel into UISourceCodeProvider in the scripts panel.
        https://bugs.webkit.org/show_bug.cgi?id=86734

        Reviewed by Vsevolod Vlasov.

        This change also makes Scripts render ans Source Code under that experiment.

        * English.lproj/localizedStrings.js:
        * inspector/front-end/ScriptsNavigator.js:
        (WebInspector.ScriptsNavigator):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype.get toolbarItemLabel):
        (WebInspector.ScriptsPanel.prototype.canShowAnchorLocation):
        (WebInspector.ScriptsPanel.prototype._createSourceFrame):
        * inspector/front-end/Settings.js:
        (WebInspector.ExperimentsSettings):
        * inspector/front-end/StylesPanel.js:
        (WebInspector.StylesUISourceCodeProvider):
        (WebInspector.StylesUISourceCodeProvider.prototype.uiSourceCodes):
        (WebInspector.StylesUISourceCodeProvider.prototype._initialize):
        (WebInspector.StylesUISourceCodeProvider.prototype._resourceAdded):
        (WebInspector.StylesUISourceCodeProvider.prototype._reset):
        (WebInspector.StyleSource):
        (WebInspector.StyleSourceFrame):
        (WebInspector.StyleSourceFrame.prototype.canEditSource):
        (WebInspector.StyleSourceFrame.prototype.requestContent):
        (WebInspector.StyleSourceFrame.prototype.commitEditing):
        (WebInspector.StyleSourceFrame.prototype.afterTextChanged):
        (WebInspector.StyleSourceFrame.prototype._clearIncrementalUpdateTimer):
        (WebInspector.StyleSourceFrame.prototype._contentChanged):
        * inspector/front-end/StylesSidebarPane.js:
        (WebInspector.StylePropertiesSection):
        (WebInspector.StylePropertiesSection.prototype._createRuleOriginNode):
        * inspector/front-end/UISourceCode.js:
        * inspector/front-end/inspector.js:
        (WebInspector._createPanels):

2012-05-17  Antti Koivisto  <antti@apple.com>

        Frame flattening should not expand tiny frames
        https://bugs.webkit.org/show_bug.cgi?id=86736

        Reviewed by Kenneth Rohde Christiansen.
        
        If a frame has so small fixed size that it is not usefully scrollable on desktop it is probably
        not meant to be scrolled. Displaying any otherwise invisible content by expanding the frame
        may end up looking like a rendering error.

        The patch prevents expansion of frames that have fixed width or height less than 8px.

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

        * rendering/RenderFrameBase.cpp:
        (WebCore::shouldExpandFrame):
        (WebCore):
        (WebCore::RenderFrameBase::layoutWithFlattening):

2012-05-17  Yury Semikhatsky  <yurys@chromium.org>

        [Chromium] Web Inspector: assertion failure when inspecting a shared worker in debug mode
        https://bugs.webkit.org/show_bug.cgi?id=86726

        Reviewed by Pavel Feldman.

        No need to keep RefPtr to WorkerThread in a task that will be executed on
        that thread, raw pointer can be used instead.

        * inspector/WorkerDebuggerAgent.cpp:

2012-05-17  Kentaro Hara  <haraken@chromium.org>

        [V8][Refactoring] Support an optional 'message' argument for throwTypeError()
        https://bugs.webkit.org/show_bug.cgi?id=86576

        Reviewed by Adam Barth.

        As commented in https://bugs.webkit.org/show_bug.cgi?id=84074#c5,
        I am planning to refactor a series of confusing throwError()s into
        throwError() and throwTypeError().

        This patch supports an optional 'message' argument for V8Proxy::throwTypeError().
        Also this patch replaces throwError("message", V8Proxy::TypeError) in custom bindings
        with V8Proxy::throwTypeError("message").

        No tests. No change in behavior.

        * bindings/v8/V8Proxy.cpp:
        (WebCore::V8Proxy::throwTypeError):
        * bindings/v8/V8Proxy.h:
        (V8Proxy):
        * bindings/v8/custom/V8ArrayBufferViewCustom.h:
        (WebCore::constructWebGLArray):
        * bindings/v8/custom/V8AudioContextCustom.cpp:
        (WebCore::V8AudioContext::constructorCallback):
        * bindings/v8/custom/V8BlobCustom.cpp:
        (WebCore::V8Blob::constructorCallback):
        * bindings/v8/custom/V8DOMFormDataCustom.cpp:
        (WebCore::V8DOMFormData::constructorCallback):
        * bindings/v8/custom/V8DataViewCustom.cpp:
        (WebCore::V8DataView::constructorCallback):
        * bindings/v8/custom/V8HTMLImageElementConstructor.cpp:
        (WebCore::v8HTMLImageElementConstructorCallback):
        * bindings/v8/custom/V8IntentConstructor.cpp:
        (WebCore::V8Intent::constructorCallback):
        * bindings/v8/custom/V8MessageChannelConstructor.cpp:
        (WebCore::V8MessageChannel::constructorCallback):
        * bindings/v8/custom/V8NotificationCenterCustom.cpp:
        (WebCore::V8NotificationCenter::requestPermissionCallback):
        * bindings/v8/custom/V8WebKitMutationObserverCustom.cpp:
        (WebCore::V8WebKitMutationObserver::constructorCallback):
        * bindings/v8/custom/V8WebKitPointConstructor.cpp:
        (WebCore::V8WebKitPoint::constructorCallback):
        * bindings/v8/custom/V8WebSocketCustom.cpp:
        (WebCore::V8WebSocket::constructorCallback):
        * bindings/v8/custom/V8XMLHttpRequestConstructor.cpp:
        (WebCore::V8XMLHttpRequest::constructorCallback):

2012-05-16  Andrey Kosyakov  <caseq@chromium.org>

        Web Inspector: [Extensions API] pages shown in sidebar are limited in height to 150px
        https://bugs.webkit.org/show_bug.cgi?id=86659

        Reviewed by Vsevolod Vlasov.

        * inspector/front-end/ExtensionPanel.js:
        (WebInspector.ExtensionView):
        (WebInspector.ExtensionSidebarPane.prototype.setPage): set default iframe height to 150px, unless already set by user.
        * inspector/front-end/inspector.css: set extension view and iframe elements to "fill", iframe to 100% height.
        (iframe.extension):

2012-05-17  Sam D  <dsam2912@gmail.com>

        Web Inspector: Hover on a breakpoint in breakpoint-pane does not get differentiated.
        https://bugs.webkit.org/show_bug.cgi?id=86711

        Changed color values with background on hover over breakpoints.

        Reviewed by Yury Semikhatsky.

        UI change, No new tests.

        * inspector/front-end/inspector.css:
        (.breakpoint-list li:hover):

2012-05-17  Vivek Galatage  <vivekgalatage@gmail.com>

        Web Inspector: DOM Breakpoints Pane should allow to Remove All the breakpoints
        https://bugs.webkit.org/show_bug.cgi?id=86716

        Reviewed by Yury Semikhatsky.

        Added a new context menu to provide Remove All DOM breakpoint option.

        UI Feature. Tests not required.

        * English.lproj/localizedStrings.js:
        * inspector/front-end/DOMBreakpointsSidebarPane.js:
        (WebInspector.DOMBreakpointsSidebarPane.prototype._removeAllBreakpoints):
        (WebInspector.DOMBreakpointsSidebarPane.prototype._contextMenu):

2012-05-17  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: HeapSnapshot: speed-up calculateObjectToWindowDistance
        https://bugs.webkit.org/show_bug.cgi?id=86718

        The idea is to switch from nodeIndex2distance array to nodeOrdinal2distance external array.
        Due to nature of nodeIndex values the original array was sparsed.

        Reviewed by Yury Semikhatsky.

        * inspector/front-end/HeapSnapshot.js:
        (WebInspector.HeapSnapshotNode.prototype.get distanceToWindow):
        (WebInspector.HeapSnapshot.prototype._calculateObjectToWindowDistance):
        (WebInspector.HeapSnapshot.prototype._bfs):
        (WebInspector.HeapSnapshot.prototype._buildAggregates):

2012-05-11  Kinuko Yasuda  <kinuko@chromium.org>

        Allow FileSystem API implementation to pass snapshot metadata at File creation time
        https://bugs.webkit.org/show_bug.cgi?id=78879

        Reviewed by Jian Li.

        We query File metadata (e.g. size and modifiedTime) when File.size,
        lastModifiedTime or webkitSlice() is accessed / called, but in some
        platform-specific filesystems it may not be feasible since synchronous
        metadata query could take very long time.

        This patch adds new File constructor which takes metadata argument
        to allow each FileSystem API implementation to pass snapshot metadata
        so that File object could cache the given metadata not to make
        synchronous query.

        We only call this constructor if the filesystem type is neither
        Temporary nor Persistent, therefore this patch should not affect
        existing code behavior.

        Test: fast/filesystem/file-read-after-write.html

        * Modules/filesystem/DOMFileSystem.cpp:
        (WebCore::DOMFileSystem::createFile):
        * Modules/filesystem/DOMFileSystemSync.cpp:
        * fileapi/Blob.cpp:
        (WebCore::Blob::webkitSlice): Updated implementation.
        * fileapi/Blob.h:
        * fileapi/File.cpp:
        (WebCore::File::File): Added new constructor.
        (WebCore::File::lastModifiedDate): Updated implementation.
        (WebCore::File::size): Updated implementation.
        (WebCore::File::captureSnapshot): Updated implementation.
        * fileapi/File.h:
        (WebCore::File::createForFileSystemFile): Added.
        * platform/AsyncFileSystem.h:
        (AsyncFileSystem): Updated comment.

2012-05-17  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Convert setDomainRelaxationForbiddenForURLScheme to use InternalSettings interface
        https://bugs.webkit.org/show_bug.cgi?id=86704

        Reviewed by Eric Seidel.

        Add setDomainRelaxationForbiddenForURLScheme functions, because it is able to work in the
        cross-port way by means of the InternalSettings interface.

        No new tests, since we are improving here the infra-structure for testing
        a specific method.

        * testing/InternalSettings.cpp:
        (WebCore):
        (WebCore::InternalSettings::setDomainRelaxationForbiddenForURLScheme):
        * testing/InternalSettings.h:
        (InternalSettings):
        * testing/InternalSettings.idl:

2012-05-17  Shinya Kawanaka  <shinyak@chromium.org>

        ShadowRoot.selection should be ShadowRoot.getSelection()
        https://bugs.webkit.org/show_bug.cgi?id=86598

        Reviewed by Hajime Morita.

        In the latest spec, ShadowRoot.selection is changed to ShadowRoot.getSelection().
        So update the implementation.

        * dom/ShadowRoot.cpp:
        * dom/ShadowRoot.h:
        (ShadowRoot):
        * dom/ShadowRoot.idl:

2012-05-17  Shinya Kawanaka  <shinyak@chromium.org>

        [Refactoring] Remove TreeScopeAdjuster
        https://bugs.webkit.org/show_bug.cgi?id=86599

        Reviewed by Hajime Morita.

        It seems the right place of the method of TreeScopeAdjuster are in VisibleSelection
        and TreeScope. So we can remove TreeScopeAdjuster.

        No new tests, no change in behavior.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/DOMAllInOne.cpp:
        * dom/TreeScope.cpp:
        (WebCore::TreeScope::ancestorInThisScope):
        (WebCore):
        * dom/TreeScope.h:
        (TreeScope):
        * dom/TreeScopeAdjuster.cpp: Removed.
        * dom/TreeScopeAdjuster.h: Removed.
        * editing/VisibleSelection.cpp:
        (WebCore::VisibleSelection::adjustPositionBefore):
        (WebCore):
        (WebCore::VisibleSelection::adjustPositionAfter):
        (WebCore::VisibleSelection::adjustSelectionToAvoidCrossingShadowBoundaries):
        * editing/VisibleSelection.h:
        (VisibleSelection):
        * page/DOMSelection.cpp:
        (WebCore::DOMSelection::shadowAdjustedNode):
        (WebCore::DOMSelection::shadowAdjustedOffset):

2012-05-17  Zoltan Herczeg  <zherczeg@webkit.org>

        NEON intrinsic should be used with arithmetic mode of composite filter
        https://bugs.webkit.org/show_bug.cgi?id=86622

        Reviewed by Nikolas Zimmermann.

        Rewrite hand written assembly code to increase portability and readibility
        of the code. Remove the unnecessary FECompositeArithmeticNEON.cpp from the
        project

        Existing tests cover this issue.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/filters/FEComposite.cpp:
        (WebCore):
        (WebCore::computeArithmeticPixels):
        (WebCore::arithmeticSoftware):
        (WebCore::FEComposite::platformArithmeticSoftware):
        * platform/graphics/filters/FEComposite.h:
        * platform/graphics/filters/arm/FECompositeArithmeticNEON.cpp: Removed.
        * platform/graphics/filters/arm/FECompositeArithmeticNEON.h:
        (WebCore):
        (WebCore::FEComposite::computeArithmeticPixelsNeon):
        (WebCore::FEComposite::platformArithmeticNeon):

2012-05-17  Takashi Sakamoto  <tasak@google.com>

        showNodePath will be useful for debugging purpose.
        https://bugs.webkit.org/show_bug.cgi?id=86450

        This patch implements showNodePath, which outputs node information in
        a xpath-like format, e.g. /HTML/BODY/DIV[@id="test" and position()=0]/P[0]

        Reviewed by Hajime Morita.

        No new tests, just adding debugging interface.

        * dom/Node.cpp:
        (WebCore::Node::showNodePathForThis):
        (WebCore):
        (showNodePath):
        * dom/Node.h:
        (Node):

2012-05-17  Pravin D  <pravind.2k4@gmail.com>

        REGRESSION (r116331): RSS Headlines/links are missing (-webkit-box-flex broken?)
        https://bugs.webkit.org/show_bug.cgi?id=85991

        Fix for regression failures on deprecated flex box test cases. 

        Reviewed by Eric Seidel.

        Test: fast/css/deprecated-flex-box-zero-width-intrinsic-max-width.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::computePreferredLogicalWidths):
        Fix to use intrinsic width when the fixed width:0 , for deprecated flex boxes.

2012-05-17  Uday Kiran  <udaykiran@motorola.com>

        CSS3 Multicolumn: Content in normal flow extending into column gaps should be clipped at middle of column-gap
        https://bugs.webkit.org/show_bug.cgi?id=86441

        Reviewed by Eric Seidel.

        Content in the normal flow that extends into column gaps (e.g., long words or images)
        is clipped in the middle of the column gap.
        http://www.w3.org/TR/css3-multicol/#overflow-inside-multicol-elements

        Test: fast/multicol/overflow-into-columngap.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::paintColumnContents):

2012-05-16  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r117372.
        http://trac.webkit.org/changeset/117372
        https://bugs.webkit.org/show_bug.cgi?id=86710

        "triggerring crashes" (Requested by morrita on #webkit).

        * Modules/webaudio/AudioParam.cpp:
        (WebCore::AudioParam::calculateSampleAccurateValues):
        (WebCore::AudioParam::calculateAudioRateSignalValues):
        (WebCore::AudioParam::connect):
        (WebCore::AudioParam::disconnect):
        * Modules/webaudio/AudioParam.h:
        (WebCore::AudioParam::context):
        (WebCore::AudioParam::hasSampleAccurateValues):
        (WebCore::AudioParam::AudioParam):
        (AudioParam):

2012-05-16  Hayato Ito  <hayato@chromium.org>

        Implement a Shadow DOM spec's section 6 'Events'.
        https://bugs.webkit.org/show_bug.cgi?id=78586

        Reviewed by Dimitri Glazkov.

        This implements a Shadow DOM spec's section 6 'Events', introducing a new
        algorithm so that event dispatching use a composed shadow DOM tree,
        instead of normal DOM tree, in dispatching events to each node.

        The spec is here: http://dvcs.w3.org/hg/webcomponents/raw-file/tip/spec/shadow/index.html#events

        Summary of changes:
        - Attaching shadow DOM does not affect an event dispatching
        behavior of enclosing DOM tree. This applies even if some nodes
        are distributed to insertion points. We keep a compatibility of
        existing event dispatching mechanism so that we won't break Web.
        - Event ancestors, which are used in dispatching events in capture (or
        bubble) phase, are now the result of traversing ancestors in composed
        shadow DOM tree order, instead of normal DOM tree order.
        - Event's target and related-target are correctly adjusted so that
        we don't leak any node which is inaccessible from the event's
        current-target node. We enforce both upper and lower boundary
        encapsulation of Shadow DOM in event dispatching

        Here is an example of event dispatching. Suppose we have the following DOM tree, which
        includes some nested shadow hosts and insertion points
        A
        `--B-----[SR-B]
           |-C     `--G--------------[SR-G]
           | `-D      |-<H select=C>    |--J---------------[SR-J]
           `-E        `-<I select=E>    |  `-<K select=H>    `-<N select=K>
             `-F                        |
                                        `--L---------------[SR-L]
                                           `-<M select=I>    `-<O select=M>

          Notation: [SR-X]: Shadow Root
                    <X select=Y>: Insertion Point, called X, which selects Y.

        If a mouse moves from node '#F' to node '#D', the following
        'mouseover' events are dispatched in each ancestor node:

        [currentTarget] [target] [related-target]
          #D             #D       #F
          #C             #D       #F
          #H             #H       #I
          #K             #K       #M
          #N             #N       #M
          #SR-J          #N       #M
          #J             #K       #M
          #SR-G          #K       #M
          #G             #H       #I
          #SR-B          #H       #I
          #B             #D       #F
          #A             #D       #F

        Details are:
        - Insertion points, such as <content> or <shadow>, are resolved correctly
        in calculating event ancestors. That means if a node is distributed to
        an insertion point, the insertion point is now an ancestor of the node in
        bubbling (or capturing) events.
        - Both insertion points and shadow roots now can receive events. We can add
        event listeners to insertion points and shadow roots.
        - Dispatched event's target is now adjusted correctly using the re-targeting
        algorithm. The algorithm is now fully aware of insertion points.
        - Dispatched event's related-target can now differ in each tree scope of
        event ancestors. We choose the most appropriate related-target using the
        related target resolution algorithm for each node.

        Performance consideration:
        This patch can achieve the competitive performance. The results of
        ./Tools/Scripts/run-perf-tests PerformanceTests/DOM/Events.html for
        before/after this patch are:

        Before applying this patch:
            Running DOM/Events.html (1 of 1)
            RESULT DOM: Events= 270.310714286 ms
            median= 269.75 ms, stdev= 2.0042397663 ms, min= 267.357142857 ms, max= 276.5 ms

        After applying this patch:
            Running DOM/Events.html (1 of 1)
            RESULT DOM: Events= 268.108333333 ms
            median= 267.5 ms, stdev= 2.41883157195 ms, min= 263.625 ms, max= 273.142857143 ms

        I've also conducted a micro benchmark using both
        Shadow-Free-DOM-Tree and DOM-Tree-With-Shadow-Host.
        See https://bugs.webkit.org/show_bug.cgi?id=78586#c40 for the results.
        It seems that the new implementation has more capabilities, but
        doesn't sacrifice a performance of event dispatching in either cases.

        Test: fast/dom/shadow/shadow-dom-event-dispatching.html

        * dom/ComposedShadowTreeWalker.cpp:
        (WebCore::ComposedShadowTreeWalker::parentIncludingInsertionPointAndShadowRoot):
        (WebCore):
        (WebCore::ComposedShadowTreeWalker::traverseParentIncludingInsertionPointAndShadowRoot):
        * dom/ComposedShadowTreeWalker.h:
        (ComposedShadowTreeWalker):
        * dom/EventContext.cpp:
        (WebCore::EventContext::EventContext):
        (WebCore::EventContext::handleLocalEvents):
        * dom/EventContext.h:
        (EventContext):
        (WebCore::EventContext::relatedTarget):
        (WebCore):
        (WebCore::EventContext::setRelatedTarget):
        * dom/EventDispatcher.cpp:
        (WebCore::EventRelatedTargetAdjuster::EventRelatedTargetAdjuster):
        (WebCore):
        (WebCore::EventRelatedTargetAdjuster::adjust):
        (WebCore::EventRelatedTargetAdjuster::findRelatedTarget):
        (WebCore::EventDispatcher::adjustRelatedTarget):
        (WebCore::EventDispatcher::ensureEventAncestors):
        (WebCore::EventDispatcher::dispatchEvent):
        (WebCore::EventDispatcher::determineDispatchBehavior):
        * dom/EventDispatcher.h:
        (WebCore):
        (EventRelatedTargetAdjuster):
        (EventDispatcher):
        * dom/MouseEvent.cpp:
        (WebCore::MouseEventDispatchMediator::dispatchEvent):
        * dom/MouseEvent.h:
        (WebCore::toMouseEvent):
        (WebCore):

2012-05-16  Ryosuke Niwa  <rniwa@webkit.org>

        Moving caret up or down skips lines when there's a non-editable line
        https://bugs.webkit.org/show_bug.cgi?id=81490

        Reviewed by Eric Seidel.

        The bug was caused by previousRootInlineBoxCandidatePosition and nextRootInlineBoxCandidatePosition
        skipping leaf nodes that constitute a new line and belong to the same editable region because block elements
        that separate lines are not editable so it looked as if all editable lines belong to a single line as far as
        those two functions are concerned.

        Fixed the bug by using the first leaf node that belongs to the same editable region but does not belong in
        the same as the start node.

        This patch is based on a patch authored by Yi Shen (Nokia).

        Test: editing/selection/move-between-lines-of-different-editabilities.html

        * editing/visible_units.cpp:
        (WebCore::previousRootInlineBoxCandidatePosition):
        (WebCore::nextRootInlineBoxCandidatePosition):

2012-05-16  MORITA Hajime <morrita@google.com>

        Unreviewed attempt to fix Mac SL build.

        * platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:

2012-05-16  Levi Weintraub  <leviw@chromium.org>

        Use pixelSnappedLogicalHeight for TableSection layout
        https://bugs.webkit.org/show_bug.cgi?id=86665

        Reviewed by Eric Seidel.

        We do table layout using integers to ensure we follow the spec (see
        https://trac.webkit.org/wiki/LayoutUnit for details), but were previously
        flooring the logical height used in layoutRows. This caused us to mis-
        calculate the intrinsic padding and grow cells beyond their proper height.

        No new tests. Fully covered by existing tests with sub-pixel enabled.

        * rendering/RenderBox.h:
        (WebCore::RenderBox::pixelSnappedLogicalHeight): Added these convenience
        methods.
        (WebCore::RenderBox::pixelSnappedLogicalWidth):
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::layoutRows):

2012-05-16  Tony Chang  <tony@chromium.org>

        rename display:-webkit-flexbox to display:-webkit-flex
        https://bugs.webkit.org/show_bug.cgi?id=86529

        Reviewed by Eric Seidel.

        Also renames -webkit-inline-flexbox to -webkit-inline-flex.

        No new tests. Covered by existing tests.

        * css/CSSParser.cpp:
        (WebCore::isValidKeywordPropertyAndValue):
        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        * css/CSSValueKeywords.in: Update keyword values.
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::collectMatchingRulesForList):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::createObject):
        * rendering/RenderObject.h:
        (RenderObject):
        * rendering/style/RenderStyleConstants.h: Rename const values.

2012-05-16  Greg Billock  <gbillock@google.com>

        IDL and implementation for Web Intents delivery
        https://bugs.webkit.org/show_bug.cgi?id=83634

        Reviewed by Adam Barth.

        The delivered intent has some extra fields and methods (extras,
        postResult, postFailure) from the invocation intent. It is implemented
        as a subclass. Responses from the service JS are passed to an embedder
        client object provided when the intent is delivered.
        See http://dvcs.w3.org/hg/web-intents/raw-file/tip/spec/Overview.html
        Test: webintents/web-intents-delivery.html

        * Modules/intents/DOMWindowIntents.cpp: Copied from Source/WebCore/Modules/intents/DOMWindowIntents.idl.
        (WebCore):
        (WebCore::DOMWindowIntents::DOMWindowIntents):
        (WebCore::DOMWindowIntents::~DOMWindowIntents):
        (WebCore::DOMWindowIntents::from):
        (WebCore::DOMWindowIntents::webkitIntent):
        (WebCore::DOMWindowIntents::deliver):
        * Modules/intents/DOMWindowIntents.h: Copied from Source/WebCore/Modules/intents/DOMWindowIntents.idl.
        (WebCore):
        (DOMWindowIntents):
        * Modules/intents/DOMWindowIntents.idl:
        * Modules/intents/DeliveredIntent.cpp: Copied from Source/WebCore/Modules/intents/Intent.h.
        (WebCore):
        (WebCore::DeliveredIntent::create):
        (WebCore::DeliveredIntent::DeliveredIntent):
        (WebCore::DeliveredIntent::ports):
        (WebCore::DeliveredIntent::getExtra):
        (WebCore::DeliveredIntent::postResult):
        (WebCore::DeliveredIntent::postFailure):
        * Modules/intents/DeliveredIntent.h: Copied from Source/WebCore/Modules/intents/Intent.h.
        (WebCore):
        (DeliveredIntent):
        (WebCore::DeliveredIntent::~DeliveredIntent):
        * Modules/intents/DeliveredIntent.idl: Copied from Source/WebCore/Modules/intents/Intent.h.
        * Modules/intents/Intent.h:
        (WebCore::Intent::~Intent):
        (Intent):
        * WebCore.gyp/WebCore.gyp:
        * WebCore.gypi:
        * bindings/v8/custom/V8DeliveredIntentCustom.cpp: Copied from Source/WebCore/Modules/intents/Intent.h.
        (WebCore):
        (WebCore::V8DeliveredIntent::portsAccessorGetter):

2012-05-16  Kentaro Hara  <haraken@chromium.org>

        [V8][Refactoring] Replace throwError("message", XXXError)
        with throwError(XXXError, "message")
        https://bugs.webkit.org/show_bug.cgi?id=86579

        Reviewed by Adam Barth.

        This is one of a series of refactoring commented in
        https://bugs.webkit.org/show_bug.cgi?id=84074#c5

        Currently there are two equivalent throwError()s; i.e. throwError("message", XXXError)
        and throwError(XXXError, "message"). In this bug we replace
        throwError("message", XXXError) with throwError(XXXError, "message")
        (except for the case where XXXError == TypeError. This is because
        throwError("message", TypeError) will be replaced with throwTypeError("message")
        in a follow-up patch).

        No tests. No change in behavior.

        * bindings/v8/V8NPObject.cpp:
        (WebCore::npObjectInvokeImpl):
        (WebCore::npObjectGetProperty):
        (WebCore::npObjectSetProperty):
        (WebCore::npObjectPropertyEnumerator):
        * bindings/v8/V8Proxy.cpp:
        (WebCore::handleMaxRecursionDepthExceeded):
        * bindings/v8/custom/V8ArrayBufferCustom.cpp:
        (WebCore::V8ArrayBuffer::constructorCallback):
        * bindings/v8/custom/V8ArrayBufferViewCustom.h:
        (WebCore::constructWebGLArrayWithArrayBufferArgument):
        (WebCore::constructWebGLArray):
        * bindings/v8/custom/V8AudioContextCustom.cpp:
        (WebCore::V8AudioContext::constructorCallback):
        * bindings/v8/custom/V8BlobCustom.cpp:
        (WebCore::V8Blob::constructorCallback):
        * bindings/v8/custom/V8ClipboardCustom.cpp:
        (WebCore::V8Clipboard::clearDataCallback):
        (WebCore::V8Clipboard::setDragImageCallback):
        * bindings/v8/custom/V8DOMFormDataCustom.cpp:
        (WebCore::V8DOMFormData::appendCallback):
        * bindings/v8/custom/V8HTMLImageElementConstructor.cpp:
        (WebCore::v8HTMLImageElementConstructorCallback):
        * bindings/v8/custom/V8WebKitMutationObserverCustom.cpp:
        (WebCore::V8WebKitMutationObserver::constructorCallback):
        * bindings/v8/custom/V8WebSocketCustom.cpp:
        (WebCore::V8WebSocket::constructorCallback):
        * bindings/v8/custom/V8XMLHttpRequestConstructor.cpp:
        (WebCore::V8XMLHttpRequest::constructorCallback):

2012-05-16  Kentaro Hara  <haraken@chromium.org>

        [V8] Pass Isolate to remaining toV8()
        https://bugs.webkit.org/show_bug.cgi?id=86570

        Reviewed by Nate Chapin.

        The objective is to pass Isolate around in V8 bindings.
        This patch passes Isolate to toV8(). I've landed a bunch of
        patches to pass Isolate to toV8(), and this would be the last
        patch for passing Isolate to toV8().

        No tests. No change in behavior.

        * bindings/v8/custom/V8HTMLCollectionCustom.cpp:
        (WebCore::getNamedItems):
        * bindings/v8/custom/V8IDBAnyCustom.cpp:
        (WebCore::toV8):

2012-05-16  James Robinson  <jamesr@chromium.org>

        GraphicsContext3D interface should not be aware of CanvasRenderingContext
        https://bugs.webkit.org/show_bug.cgi?id=86550

        Reviewed by Darin Adler.

        GraphicsContext3D is a WebCore/platform API construct. CanvasRenderingContext is a WebCore/html concept. Thus,
        the former shouldn't depend on the latter.  In turns out that all everyone ever wants from a
        CanvasRenderingContext in GraphicsContext3D is its underlying ImageBuffer, which is a WebCore/platform concept,
        so this just updates the APIs and implementations to use that instead.

        Refactor only, no new tests.

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::paintRenderingResultsToCanvas):
        * platform/graphics/GraphicsContext3D.h:
        * platform/graphics/cairo/DrawingBufferCairo.cpp:
        (WebCore::DrawingBuffer::paintCompositedResultsToCanvas):
        * platform/graphics/chromium/DrawingBufferChromium.cpp:
        (WebCore::DrawingBuffer::paintCompositedResultsToCanvas):
        * platform/graphics/clutter/DrawingBufferClutter.cpp:
        (WebCore::DrawingBuffer::paintCompositedResultsToCanvas):
        * platform/graphics/efl/GraphicsContext3DEfl.cpp:
        (WebCore::GraphicsContext3D::paintRenderingResultsToCanvas):
        (WebCore::GraphicsContext3D::paintCompositedResultsToCanvas):
        * platform/graphics/gpu/DrawingBuffer.h:
        * platform/graphics/gpu/qt/DrawingBufferQt.cpp:
        (WebCore::DrawingBuffer::paintCompositedResultsToCanvas):
        * platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:
        (WebCore::GraphicsContext3D::paintRenderingResultsToCanvas):
        (WebCore::GraphicsContext3D::paintCompositedResultsToCanvas):

2012-05-16  Joshua Bell  <jsbell@chromium.org>

        SerializedScriptValue: lazy initialization of static nullValue not threadsafe
        https://bugs.webkit.org/show_bug.cgi?id=70833

        Reviewed by Kentaro Hara.

        Remove unsafe lazy initialization of static |null| SSV. None of the callers
        appeared to be in performance-critical areas - most were preparing an event to
        be dispatched to script - so no per-call-site caching was added.

        No new tests - no functional changes.

        * bindings/js/SerializedScriptValue.cpp: Mint a new one each time.
        (WebCore::SerializedScriptValue::nullValue):
        * bindings/js/SerializedScriptValue.h: Return via PassRefPtr.
        * bindings/v8/SerializedScriptValue.cpp: Mint a new one each time.
        (WebCore::SerializedScriptValue::nullValue):
        * bindings/v8/SerializedScriptValue.h: Return via PassRefPtr.
        (SerializedScriptValue):
        * dom/Document.cpp:
        (WebCore::Document::statePopped): Change to PassRefPtr to maintain refcount.
        * dom/Document.h:
        (Document):

2012-05-16  James Robinson  <jamesr@chromium.org>

        CachedImage does not clear the ImageObserver pointer when dropping its Image ref
        https://bugs.webkit.org/show_bug.cgi?id=86689

        Reviewed by Eric Seidel.

        Image instances keep a weak pointer to their ImageObserver, which may be null. CachedImage is an ImageObserver
        and holds a RefPtr<Image> m_image. When CachedImage initializes its m_image to either an SVGImage or BitmapImage,
        it sets itself as that Image's ImageObserver. However, CachedImage never clears the ImageObserver pointer, even
        when dropping its reference to the Image. This means if other code holds a RefPtr<Image> there is no promise
        that calls on that Image will be valid. This patch clears the CachedImage::m_image's ImageObserver pointer
        whenever the CachedImage drops its reference. Image already has null checks for its m_imageObserver so this is
        always a safe operation.

        * loader/cache/CachedImage.cpp:
        (WebCore::CachedImage::~CachedImage):
        (WebCore::CachedImage::clear):

2012-05-16  Kentaro Hara  <haraken@chromium.org>

        [V8] Fix a broken copyright of V8SVGElementCustom.cpp
        https://bugs.webkit.org/show_bug.cgi?id=86569

        Reviewed by Nate Chapin.

        This patch just fixes a broken copyright of V8SVGElementCustom.cpp.

        Blame changeset: r54153

        No tests. No change in behavior.

        * bindings/v8/custom/V8SVGElementCustom.cpp:

2012-05-16  Kentaro Hara  <haraken@chromium.org>

        [V8] Pass Isolate to convertEventTargetToV8Object()
        https://bugs.webkit.org/show_bug.cgi?id=86566

        Reviewed by Nate Chapin.

        The objective is to pass Isolate around in V8 bindings.
        This patch passes Isolate to convertEventTargetToV8Object().
        I made the 'isolate' argument optional, since
        convertEventTargetToV8Object() can be called from the WebCore context.

        No tests. No change in behavior.

        * bindings/scripts/CodeGeneratorV8.pm:
        (NativeToJSValue):
        * bindings/v8/V8DOMWrapper.cpp:
        (WebCore):
        (WebCore::V8DOMWrapper::convertEventTargetToV8Object):
        * bindings/v8/V8DOMWrapper.h:
        (WebCore::V8DOMWrapper::convertEventTargetToV8Object):
        (V8DOMWrapper):

2012-05-16  Peter Kasting  <pkasting@google.com>

        Correctly display malformed GIFs which specify bogus extension block
        sizes.
        https://bugs.webkit.org/show_bug.cgi?id=86531

        Reviewed by James Robinson.
        
        This was broken by r117333, which was an attempt to avoid memory errors
        on GIFs that were malformed in a similar way.  It turns out some GIFs
        in the wild (i.e. "our LayoutTests directory") relied on some of the
        effects of the old code.  This refixes in a way that doesn't break
        these.

        No new tests, covered by existing tests.

        * platform/image-decoders/gif/GIFImageReader.cpp:
        (GIFImageReader::read):

2012-05-16  Chris Rogers  <crogers@google.com>

        AudioParam must support fan-in (multiple audio connections)
        https://bugs.webkit.org/show_bug.cgi?id=83610

        Reviewed by Kenneth Russell.

        Test: webaudio/audioparam-summingjunction.html

        * Modules/webaudio/AudioParam.cpp:
        * Modules/webaudio/AudioParam.h:
        (WebCore::AudioParam::calculateSampleAccurateValues):
        (WebCore::AudioParam::calculateAudioRateSignalValues):
        Sums intrinsic parameter value with all audio-rate connections.

        (WebCore::AudioParam::connect):
        (WebCore::AudioParam::disconnect):
        Support multiple connections.

        (WebCore::AudioParam::hasSampleAccurateValues):
        If we have one or more audio-rate connections.

        (WebCore::AudioParam::AudioParam):
        AudioParam now sub-classes AudioSummingJunction.

2012-05-16  Kentaro Hara  <haraken@chromium.org>

        [V8] Pass Isolate to createV8HTMLWrapper() and createV8SVGWrapper()
        https://bugs.webkit.org/show_bug.cgi?id=86558

        Reviewed by Nate Chapin.

        The objective is to pass Isolate around in V8 bindings.
        This patch passes Isolate to createV8HTMLWrapper() and createV8SVGWrapper().

        Basically 'isolate' has been implemented as the last argument
        but before 'forceNewObject' argument, because 'forceNewObject' is an optional
        argument and omitted in most cases. Due to the convention,
        this patch puts 'isolate' before 'forceNewObject'.

        No tests. No change in behavior.

        * bindings/v8/custom/V8HTMLElementCustom.cpp:
        (WebCore::toV8):
        * bindings/v8/custom/V8SVGElementCustom.cpp:
        (WebCore::toV8):
        * dom/make_names.pl:
        (printWrapperFunctions):
        (printWrapperFactoryCppFile):
        (printWrapperFactoryHeaderFile):

2012-05-16  Ryosuke Niwa  <rniwa@webkit.org>

        Move showStyle from CSSStyleDeclaration to StylePropertySet
        https://bugs.webkit.org/show_bug.cgi?id=86675

        Reviewed by Andreas Kling.

        Moved the function. Also deleted CSSStyleDeclaration.cpp since it's no longer needed.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSAllInOne.cpp:
        * css/CSSStyleDeclaration.cpp:
        (WebCore):
        * css/CSSStyleDeclaration.h:
        (CSSStyleDeclaration):
        * css/StylePropertySet.cpp:
        (WebCore):
        (WebCore::StylePropertySet::showStyle):
        * css/StylePropertySet.h:
        (StylePropertySet):

2012-05-16  Martin Robinson  <mrobinson@igalia.com>

        Fix the indexed database build for GTK+.

        * GNUmakefile.list.am: Add missing files to the build.
        * bindings/gobject/GNUmakefile.am: Be smarter about filtering out deactivating indexed database.
        * bindings/scripts/CodeGeneratorGObject.pm:
        (SkipAttribute): Always skip attributes that return indexed database types.

2012-05-16  Jon Lee  <jonlee@apple.com>

        Animated GIFs in page cache get updated
        https://bugs.webkit.org/show_bug.cgi?id=86668
        <rdar://problem/11395549>

        Reviewed by Brady Eidson.

        Test: fast/loader/image-in-page-cache.html

        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::imageChanged): When we are notified by the CachedImage that the image has
        changed, we check to see if the document is in the page cache. If so, we should not be updating,
        so we bail out early.

2012-05-16  Tim Horton  <timothy_horton@apple.com>

        Crash if SVG gradient stop has display: none set
        https://bugs.webkit.org/show_bug.cgi?id=86686
        <rdar://problem/10751905>

        Reviewed by Dean Jackson.

        Create a renderer for SVGStopElement regardless of the "display" property.
        This matches the behavior of Opera and the SVG specification.

        Test: svg/custom/gradient-stop-display-none-crash.svg

        * svg/SVGStopElement.cpp:
        (WebCore::SVGStopElement::rendererIsNeeded):
        (WebCore):
        * svg/SVGStopElement.h:
        (SVGStopElement):

2012-05-16  Dana Jansens  <danakj@chromium.org>

        [chromium] Clear the m_private pointer when destroying WebFilterOperations to avoid assert in WebPrivateOwnPtr
        https://bugs.webkit.org/show_bug.cgi?id=86654

        Reviewed by James Robinson.

        * platform/chromium/support/WebFilterOperations.cpp:
        (WebKit::WebFilterOperations::reset):
        (WebKit::WebFilterOperations::destroy):
        (WebKit):

2012-05-16  Ryosuke Niwa  <rniwa@webkit.org>

        REGRESSION(r92823): WebKit strips font-weight: normal from b element when copying
        https://bugs.webkit.org/show_bug.cgi?id=86663

        Reviewed by Tony Chang.

        The bug was caused by removeStyleFromRulesAndContext incorrectly stripping font-weight property
        even when the context had no font-weight property because of a property name mismatch in getPropertiesNotIn.

        Fixed the mismatch.

        Test: editing/pasteboard/paste-text-with-style-5.html

        * editing/EditingStyle.cpp:
        (WebCore::getPropertiesNotIn):

2012-05-16  Ryosuke Niwa  <rniwa@webkit.org>

        Merge nextRootInlineBox with nextLinePosition
        https://bugs.webkit.org/show_bug.cgi?id=81593

        Reviewed by Enrica Casucci.

        Call previousRootInlineBox and nextRootInlineBox in previousLinePosition and nextLinePosition respectively
        to share the code. Moved out the nullity check of startBox and extracted the renderer's node from the former
        two, and added editableType to their argument lists to match the interface in both use cases.

        Also moved out the code to extract root inline box using RenderedPosition from those two functions and
        expanded in call sites since previousLinePosition and nextLinePosition need to return the candidate position
        even when the root inline box doesn't exist. To this end, renamed previousRootInlineBox and nextRootInlineBox
        to previousRootInlineBoxCandidatePosition and nextRootInlineBoxCandidatePosition respectively.

        In addition, got rid of one version of nextLeafWithSameEditability that adjusted node with respect to offset
        This variant did:

        Node* child = node->childNode(offset);
        node = child ? child->nextLeafNode() : node->lastDescendant()->nextLeafNode();

        instead of:

        node = node->nextLeafNode();

        at the beginning of the function. Observe that the former code is logically equivalent to:

        Node* child = node->childNode(offset);
        node = child ? child : node->lastDescendant();
        node = node->nextLeafNode();

        Thus, the first two lines of this logically equivalent code is added in nextLinePosition wherein we used to
        call the removed variant.

        This refactoring with no behavioral change would help us resolving the bug 81490.

        * editing/visible_units.cpp:
        (WebCore::previousRootInlineBoxCandidatePosition): Renamed from previousRootInlineBox.
        (WebCore::nextRootInlineBoxCandidatePosition): Renamed from nextRootInlineBox.
        (WebCore::logicallyPreviousBox): Checks the nullity of startBox's renderer and node. Also extracts the root
        inline box out of the position per the interface change.
        (WebCore::logicallyNextBox): Ditto.
        (WebCore::previousLinePosition): Calls previousRootInlineBoxCandidatePosition.
        (WebCore::nextLinePosition): Calls nextRootInlineBoxCandidatePosition.

2012-05-16  Noel Gordon  <noel.gordon@gmail.com>

        [chromium] Remove ImageDecoderCG.cpp from platform/image-decoders
        https://bugs.webkit.org/show_bug.cgi?id=86346

        Reviewed by Adam Barth.

        ImageDecoderCG.cpp was added for use in the Chromium port in r70846. Remove the
        implementation now that Chromium uses Skia on Mac OSX by default.

        No new tests. No change in behavior.
        
        * WebCore.gypi: Remove ImageDecoderCG.cpp from the gyp project.
        * platform/graphics/ImageSource.h: Revert the r70846 changes.
        * platform/image-decoders/ImageDecoder.cpp: Remove copyReferenceToBitmapData().
        (WebCore::ImageFrame::operator=): Return to using copyBitmapData() (as it was)
        given the removal of copyReferenceToBitmapData() above.
        * platform/image-decoders/ImageDecoder.h:
        (ImageFrame): Remove copyReferenceToBitmapData() declaration.
        * platform/image-decoders/cg/ImageDecoderCG.cpp: Removed, and it was the only
        decoder with a port-specific implementation of copyReferenceToBitmapData().

2012-05-16  Raymond Toy  <rtoy@google.com>

        Simplify AudioNode ref-counting by removing RefTypeDisabled
        https://bugs.webkit.org/show_bug.cgi?id=85681

        Reviewed by Chris Rogers.

        Existing tests should cover these changes.

        * Modules/webaudio/AudioNode.cpp: Remove RefTypeDiabled and m_disabledRefCount.
        (WebCore::AudioNode::AudioNode):
        (WebCore::AudioNode::~AudioNode):
        (WebCore::AudioNode::enableOutputsIfNecessary): New
        (WebCore::AudioNode::ref): 
        (WebCore::AudioNode::disableOutputsIfNecessary): New
        (WebCore::AudioNode::finishDeref):
        * Modules/webaudio/AudioNode.h: Remove RefTypeDisabled and m_disabledRefCount.
        * Modules/webaudio/AudioNodeInput.cpp: Removed uses of RefTypeDisbled.
        (WebCore::AudioNodeInput::disconnect):
        (WebCore::AudioNodeInput::disable):
        (WebCore::AudioNodeInput::enable):

2012-05-16  Ojan Vafai  <ojan@chromium.org>

        Fix perf regression from r116487
        https://bugs.webkit.org/show_bug.cgi?id=86680

        Reviewed by Ryosuke Niwa.

        http://trac.webkit.org/changeset/116487 caused a 6% regression on
        Dromaeo's dom-attr test. The issue is that we invalidated NodeList
        caches whenever an id/checked/type attribute changed.

        First, we don't need to invalidate on checked/type since that only
        affects the values return by NodeList items, not the list of items.
        Second, we only need to invalidate NodeList caches when an id attribute
        changes on a FormControlElement.

        Incidentally, we also don't need to invalidate caches for changes
        to attributes that don't have an ownerElement.

        No new tests. This is strictly a performance improvement.

        * dom/Attr.cpp:
        (WebCore::Attr::setValue):
        (WebCore::Attr::childrenChanged):
        * dom/Element.cpp:
        (WebCore::Element::attributeChanged):
        * dom/Node.cpp:
        (WebCore::Node::invalidateNodeListsCacheAfterAttributeChanged):
        * dom/Node.h:
        (Node):

2012-04-22  Robert Hogan  <robert@webkit.org>

        CSS 2.1 failure: inline-table-001 fails
        https://bugs.webkit.org/show_bug.cgi?id=84167

        Reviewed by Julien Chaffraix.

        Override lastLineBoxBaseline() in RenderTable so that it picks up the baseline
        of the text in the first row of the table. This allows inline tables to find the
        correct baseline to align to.

        Tests:
                css2.1/20110323/inline-table-001.htm
                css2.1/20110323/inline-table-002a.htm
                css2.1/20110323/inline-table-003.htm
                fast/css/empty-cell-baseline.html

        * rendering/RenderTable.cpp:
        (WebCore::getLineBoxBaseline):
        (WebCore):
        (WebCore::RenderTable::lastLineBoxBaseline):
        (WebCore::RenderTable::firstLineBoxBaseline):
        * rendering/RenderTable.h:
        (RenderTable):
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::firstLineBoxBaseline): if a cell is empty it cannot provide a 
          baseline. Tested by fast/css/empty-cell-baseline.html

2012-05-16  Joshua Bell  <jsbell@chromium.org>

        IndexedDB: Rename valid/finished methods to isValid/isFinished to match coding standard
        https://bugs.webkit.org/show_bug.cgi?id=86655

        Reviewed by Tony Chang.

        No new tests - no functional changes.

        * Modules/indexeddb/IDBKey.h:
        (WebCore::IDBKey::isValid): valid() => isValid()
        * Modules/indexeddb/IDBObjectStore.cpp:
        (WebCore::IDBObjectStore::deleteFunction):
        (WebCore::IDBObjectStore::index):
        (WebCore::IDBObjectStore::transactionFinished):
        * Modules/indexeddb/IDBObjectStoreBackendImpl.cpp:
        (WebCore::IDBObjectStoreBackendImpl::put):
        (WebCore::IDBObjectStoreBackendImpl::putInternal):
        (WebCore::IDBObjectStoreBackendImpl::deleteFunction):
        * Modules/indexeddb/IDBRequest.cpp:
        (WebCore::IDBRequest::onSuccess):
        * Modules/indexeddb/IDBTransaction.cpp:
        (WebCore::IDBTransaction::isFinished): finished() => isFinished()
        * Modules/indexeddb/IDBTransaction.h:
        * inspector/InspectorIndexedDBAgent.cpp:
        (WebCore):

2012-05-16  Jeffrey Pfau  <jpfau@apple.com>

        ImageLoader can still dispatch beforeload events for ImageDocuments
        https://bugs.webkit.org/show_bug.cgi?id=86658
        <rdar://problem/11465863>

        Reviewed by Brady Eidson.

        Prevent flags regarding sending beforeload events from being set on ImageDocuments.

        No new tests; testing framework doesn't allow for testing ImageDocuments with injected JavaScript.

        * loader/ImageLoader.cpp:
        (WebCore::ImageLoader::updateFromElement):

2012-05-16  Julien Chaffraix  <jchaffraix@webkit.org>

        layerX/layerY warning should be removed
        https://bugs.webkit.org/show_bug.cgi?id=86264

        Reviewed by James Robinson.

        Covered by: fast/dom/Window/window-xy-properties.html
                    fast/events/init-events.html
                    fast/events/mouse-relative-position.html
                    fast/events/mouseclick-target-and-positioning.html
                    fast/events/simulated-click-coords.html
                    jquery/event.html

        This change just removes the warning pending proper investigation.

        Longer explanation: The layerX/layerY warning was added prematurely
        as we didn't assess the web-compatibility potential breakage vs the
        maintenance cost. There is also not readily available replacement.

        * dom/MouseRelatedEvent.cpp:
        (WebCore::MouseRelatedEvent::layerX):
        (WebCore::MouseRelatedEvent::layerY):
        * dom/UIEvent.cpp:
        (WebCore::UIEvent::layerX):
        (WebCore::UIEvent::layerY):
        * dom/UIEvent.h:
        Removed warnDeprecatedLayerXYUsage and all the associated calls.

2012-05-16  Joshua Bell  <jsbell@chromium.org>

        IndexedDB: Use accessors for backing store / database id in store/index backends
        https://bugs.webkit.org/show_bug.cgi?id=86652

        Reviewed by Tony Chang.

        Hide the private members m_backingStore and m_databaseId of IDBObjectStoreBackendImpl
        and IDBIndexBackendImpl behind accessors. This is preparation for removing these
        members and only holding references to the IDBDatabaseBackendImpl: webkit.org/b/83074

        No new tests - no functional changes.

        * Modules/indexeddb/IDBIndexBackendImpl.cpp:
        (WebCore::IDBIndexBackendImpl::openCursorInternal):
        (WebCore::IDBIndexBackendImpl::countInternal):
        (WebCore::IDBIndexBackendImpl::getInternal):
        (WebCore::IDBIndexBackendImpl::getByRangeInternal):
        (WebCore::IDBIndexBackendImpl::getKeyInternal):
        (WebCore::IDBIndexBackendImpl::getKeyByRangeInternal):
        (WebCore::IDBIndexBackendImpl::addingKeyAllowed):
        * Modules/indexeddb/IDBIndexBackendImpl.h:
        (WebCore::IDBIndexBackendImpl::backingStore): Added.
        (WebCore::IDBIndexBackendImpl::databaseId): Added.
        (IDBIndexBackendImpl):
        * Modules/indexeddb/IDBObjectStoreBackendImpl.cpp:
        (WebCore::IDBObjectStoreBackendImpl::getByRangeInternal):
        (WebCore::IDBObjectStoreBackendImpl::getInternal):
        (WebCore::IDBObjectStoreBackendImpl::putInternal):
        (WebCore::IDBObjectStoreBackendImpl::deleteInternal):
        (WebCore::IDBObjectStoreBackendImpl::clearInternal):
        (WebCore):
        (WebCore::IDBObjectStoreBackendImpl::createIndex):
        (WebCore::IDBObjectStoreBackendImpl::createIndexInternal):
        (WebCore::IDBObjectStoreBackendImpl::deleteIndexInternal):
        (WebCore::IDBObjectStoreBackendImpl::openCursorInternal):
        (WebCore::IDBObjectStoreBackendImpl::countInternal):
        (WebCore::IDBObjectStoreBackendImpl::loadIndexes):
        (WebCore::IDBObjectStoreBackendImpl::genAutoIncrementKey):
        * Modules/indexeddb/IDBObjectStoreBackendImpl.h:
        (WebCore::IDBObjectStoreBackendImpl::backingStore): Added.
        (WebCore::IDBObjectStoreBackendImpl::databaseId): Added.
        (IDBObjectStoreBackendImpl):

2012-05-15  Peter Kasting  <pkasting@google.com>

        Malformed GIF can cause decoder to read off end of heap buffer
        https://bugs.webkit.org/show_bug.cgi?id=86531

        Reviewed by Adam Barth.

        Test: fast/images/read-past-end-of-buffer.html
        This test is only expected to catch problems if run under Address
        Sanitizer or a similar memory-checking utility.

        * platform/image-decoders/gif/GIFImageReader.cpp:
        (GIFImageReader::read):

2012-05-16  Varun Jain  <varunjain@google.com>

        [chromium] No modifier flags (shift/ctrl/alt) in drag&drop events on chromium linux
        https://bugs.webkit.org/show_bug.cgi?id=86236

        Reviewed by Tony Chang.

        ManualTests: ManualTests/chromium/modifiers-during-drag-and-drop.html

        * page/DragController.cpp:
        (WebCore::createMouseEvent):
        * platform/DragData.cpp:
        (WebCore):
        (WebCore::DragData::modifierKeyState):
        * platform/DragData.h:
        (DragData):
        * platform/chromium/ChromiumDataObject.cpp:
        (WebCore::ChromiumDataObject::ChromiumDataObject):
        * platform/chromium/ChromiumDataObject.h:
        (WebCore::ChromiumDataObject::modifierKeyState):
        (WebCore::ChromiumDataObject::setModifierKeyState):
        (ChromiumDataObject):
        * platform/chromium/DragDataChromium.cpp:
        (WebCore::DragData::modifierKeyState):
        (WebCore):

2012-05-16  Jer Noble  <jer.noble@apple.com>

        <video> elements with no video tracks report false for webkitSupportsFullscreen.
        https://bugs.webkit.org/show_bug.cgi?id=86650

        Reviewed by Eric Carlson.

        No new tests; updated media/media-fullscreen-inline.html.

        With the new Full Screen API, the restriction that only video elements with
        video tracks can enter full screen seems arbitrary. Some media types will
        occasionally determine they have video tracks long after loadedmetadata, which
        breaks websites who check for webkitSupportsFullscreen(). Relax the restriction
        on webkitSupportsFullscreen() for ports where the Full Screen API is enabled and
        supported so as to no longer require hasVideo().

        * html/HTMLVideoElement.cpp:
        (WebCore::HTMLVideoElement::supportsFullscreen):

2012-05-16  Andreas Kling  <kling@webkit.org>

        Avoid reparsing the style attribute when cloning elements.
        <http://webkit.org/b/86574>

        Reviewed by Antti Koivisto.

        Refactor cloning of attributes a bit to dodge the styleAttr reparse previously
        caused by ElementAttributeData::setAttributes().

        Introduced Element::cloneDataFromElement() which takes care of cloning the
        ElementAttributeData as well as "non-attribute properties" (which is currently
        specific to HTMLInputElement.)

        Also includes some additional dodging of attribute vector traversal to find
        old/new 'id' and 'name' attributes.

        I'm seeing a ~10% improvement on PerformanceTests/DOM/CloneNodes locally.

        * dom/Document.cpp:
        (WebCore::Document::importNode):
        * dom/Element.cpp:
        (WebCore::Element::cloneElementWithoutChildren):
        (WebCore::Element::cloneAttributesFromElement):
        (WebCore::Element::cloneDataFromElement):
        * dom/Element.h:
        (WebCore::Element::copyNonAttributePropertiesFromElement):
        * dom/ElementAttributeData.cpp:
        (WebCore::ElementAttributeData::cloneDataFrom):
        * dom/ElementAttributeData.h:
        (ElementAttributeData):
        * dom/Node.h:
        * dom/StyledElement.cpp:
        (WebCore::StyledElement::styleAttributeChanged):
        (WebCore::StyledElement::parseAttribute):
        * dom/StyledElement.h:
        * editing/ReplaceNodeWithSpanCommand.cpp:
        (WebCore::swapInNodePreservingAttributesAndChildren):
        * html/HTMLElement.cpp:
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::copyNonAttributePropertiesFromElement):
        * html/HTMLInputElement.h:
        * inspector/DOMPatchSupport.cpp:
        (WebCore::DOMPatchSupport::innerPatchNode):
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::setNodeName):
        * svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::expandSymbolElementsInShadowTree):
        (WebCore::SVGUseElement::transferUseAttributesToReplacedElement):

2012-05-16  Brent Fulgham  <bfulgham@webkit.org>

        [WinCairo] Unreviewed build change after r115385.  Several Cairo
        image routines were modified to use new wrapper classes, but the
        relevant WinCairo sources were not updated to match.

        * WebCore.vcproj/WebCore.vcproj:
        * platform/graphics/win/ImageCairoWin.cpp:
        (WebCore::BitmapImage::create):
        (WebCore::BitmapImage::drawFrameMatchingSourceSize):
        * platform/win/DragImageCairoWin.cpp:
        (WebCore::createDragImageFromImage):

2012-05-16  Tim Horton  <timothy_horton@apple.com>

        Scrollbar layers should respect accelerated drawing setting
        https://bugs.webkit.org/show_bug.cgi?id=86644
        <rdar://problem/11462038>

        Reviewed by Simon Fraser.

        When creating scrollbar layers, pass through the accelerated drawing setting.

        No new tests.

        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::updateOverflowControlsLayers):

2012-05-16  Tim Horton  <timothy_horton@apple.com>

        FrameView::scrollContentsFastPath should use painted area to determine whether to drop out of the fast path
        https://bugs.webkit.org/show_bug.cgi?id=86651
        <rdar://problem/11459243>

        Reviewed by Simon Fraser.

        Previously, we decided to fall out of the fast scrolling path by the number of fixed-position elements
        on the page. This was less than ideal if a single fixed position element took up a significant portion
        of the page, or if there were many small, cheap-to-paint fixed elements.

        Instead, we should use the fast path if less than 50% of the page will be repainted by fixed-position
        elements, and otherwise fall back to the slow path.

        I've tested a few different thresholds with an internal test; 50% seems to work relatively well,
        but the ideal value is hard to determine and likely depends on hardware.

        No new tests, performance improvement with few large fixed-position objects or many small ones.

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

2012-05-16  David Reveman  <reveman@chromium.org>

        [Chromium] Use ThrottledTextureUploader with threaded compositing.
        https://bugs.webkit.org/show_bug.cgi?id=85848

        Reviewed by Adrienne Walker.

        Switch to ThrottledUploader in CCThreadProxy.

        * platform/graphics/chromium/cc/CCThreadProxy.cpp:

2012-05-15  Emil A Eklund  <eae@chromium.org>

        Change ascents and descent back to ints for now
        https://bugs.webkit.org/show_bug.cgi?id=86518

        Reviewed by Eric Seidel.

        Change ascents and descent calculation back to integers for now as it
        looks like we'll need to support both the 1/60 and 1/1 implementations of
        FractionalLayoutUnit for the immediate future to ensure that text is
        rendered at the same offset and with the height regardless of the
        ENABLE_SUBPIXEL_LAYOUT flag.

        This ensures that most websites will look the same at 100% zoom
        regardless of the flag and also allows us to the same test expectations
        for the vast majority of layout tests.

        Eventually we want to move those back to FractionalLayoutUnits as that
        will result in more correct rendering.

        No new tests, no change in functionality.

        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::computeLogicalBoxHeights):
        * rendering/RootInlineBox.cpp:
        (WebCore::setAscentAndDescent):
        (WebCore::RootInlineBox::ascentAndDescentForBox):
        * rendering/RootInlineBox.h:
        (RootInlineBox):

2012-05-16  Ken Buchanan  <kenrb@chromium.org>

        Crash due to first-letter not getting computed on RenderTableCell
        https://bugs.webkit.org/show_bug.cgi?id=86133

        Reviewed by Abhishek Arya.

        RenderTableCell overrides RenderBlock::layout() but doesn't call
        updateFirstLetter() in it. This is normally not a problem because
        updateFirstLetter() gets called during preferred logical width
        computation, but there exist rare occasions when layout of the table
        cell happens without preferred logical widths being dirty, in which
        case the first-letter update can be skipped.

        This patch adds a call to updateFirstLetter() to
        RenderTableCell::layout(). This ensures that the first-letter is up
        to date before commencing block layout.

        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::layout)

2012-05-16  Mikhail Naganov  <mnaganov@chromium.org>

        Avoid jumpscroll when entering new text in a multi-line editor.
        https://bugs.webkit.org/show_bug.cgi?id=82875

        Reviewed by Ryosuke Niwa.

        Scroll caret to the edge of the viewport in case if a line break or a paragraph
        separator is inserted at the end of a multi-line editor.  This avoids
        undesirable jumpscroll in cases when there is content under the editor.

        Tests: editing/input/scroll-to-edge-if-line-break-at-end-of-document-contenteditable.html
               editing/input/scroll-to-edge-if-line-break-at-end-of-document-textarea.html
               editing/input/scroll-to-edge-if-paragraph-separator-at-end-of-document-contenteditable.html

        * editing/Editor.cpp:
        (WebCore::Editor::insertLineBreak):
        (WebCore::Editor::insertParagraphSeparator):
        (WebCore::Editor::revealSelectionAfterEditingOperation):
        * editing/Editor.h:
        (Editor):

2012-05-16  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Pressing esc after requesting snippet creation should remove snippet.
        https://bugs.webkit.org/show_bug.cgi?id=86639

        Reviewed by Pavel Feldman.

        Added committed parameter to NavigatorView.rename() callback.

        * inspector/front-end/NavigatorView.js:
        (WebInspector.NavigatorView.prototype.rename.commitHandler):
        (WebInspector.NavigatorView.prototype.rename.cancelHandler):
        (WebInspector.NavigatorView.prototype.rename.afterEditing):
        * inspector/front-end/ScriptsNavigator.js:
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype._snippetCreationRequested.callback):
        (WebInspector.ScriptsPanel.prototype._snippetCreationRequested):

2012-05-16  Abhishek Arya  <inferno@chromium.org>

        Missing RenderApplet cast check in HTMLAppletElement::renderWidgetForJSBindings.
        https://bugs.webkit.org/show_bug.cgi?id=86627

        Reviewed by Andreas Kling.

        Test: java/inline-applet-crash.html

        * html/HTMLAppletElement.cpp:
        (WebCore::HTMLAppletElement::renderWidgetForJSBindings):

2012-05-16  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: extract CompositeUISourceCodeProvider from DebuggerScriptMapping.
        https://bugs.webkit.org/show_bug.cgi?id=86634

        Reviewed by Vsevolod Vlasov.

        Extract refactoring.

        * inspector/front-end/DebuggerScriptMapping.js:
        (WebInspector.DebuggerScriptMapping):
        (WebInspector.DebuggerScriptMapping.prototype.uiSourceCodeProviders):
        (WebInspector.DebuggerScriptMapping.prototype._parsedScriptSource):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype._loadUISourceCodes):
        (WebInspector.ScriptsPanel.prototype._toggleFormatSource):
        (WebInspector.CompositeUISourceCodeProvider):
        (WebInspector.CompositeUISourceCodeProvider.prototype._registerUISourceCodeProvider):
        (WebInspector.CompositeUISourceCodeProvider.prototype._handleUISourceCodeAdded):
        (WebInspector.CompositeUISourceCodeProvider.prototype._handleUISourceCodeReplaced):
        (WebInspector.CompositeUISourceCodeProvider.prototype._handleUISourceCodeRemoved):
        (WebInspector.CompositeUISourceCodeProvider.prototype.uiSourceCodes):
        * inspector/front-end/UISourceCode.js:
        (WebInspector.UISourceCodeProvider.prototype.uiSourceCodes):
        (WebInspector.UISourceCodeProvider.prototype.addEventListener):
        (WebInspector.UISourceCodeProvider.prototype.removeEventListener):

2012-05-16  Alexander Pavlov  <apavlov@chromium.org>

        Web Inspector: Double Clicking on "No watch expressions" should add an expression
        https://bugs.webkit.org/show_bug.cgi?id=86631

        Reviewed by Vsevolod Vlasov.

        A double-click listener for the section element adds a new watch expression if the correct element
        has been clicked.
        Drive-by: do not persist deleted (null) watch expressions.

        * inspector/front-end/WatchExpressionsSidebarPane.js:
        (WebInspector.WatchExpressionsSection.prototype._sectionDoubleClick):
        (WebInspector.WatchExpressionsSection.prototype.updateExpression):

2012-05-16  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Support script snippets saving.
        https://bugs.webkit.org/show_bug.cgi?id=86632

        Reviewed by Pavel Feldman.

        Added SnippetJavaScriptSource extending JavaScriptSource and overriding isEditable() and commitWorkingCopy() methods.
        ScriptSnippetModel now creates instances of this new class for snippets.
        Also maps in ScriptSnippetModel simplified.

        * inspector/front-end/JavaScriptSource.js:
        (WebInspector.JavaScriptSource.prototype.commitWorkingCopy):
        (WebInspector):
        * inspector/front-end/JavaScriptSourceFrame.js:
        (WebInspector.JavaScriptSourceFrame.prototype.commitEditing):
        * inspector/front-end/ScriptSnippetModel.js:
        (WebInspector.ScriptSnippetModel):
        (WebInspector.ScriptSnippetModel.prototype._addScriptSnippet):
        (WebInspector.ScriptSnippetModel.prototype.deleteScriptSnippet):
        (WebInspector.ScriptSnippetModel.prototype.renameScriptSnippet):
        (WebInspector.ScriptSnippetModel.prototype.setScriptSnippetContent):
        (WebInspector.ScriptSnippetModel.prototype._uiSourceCodeList):
        (WebInspector.ScriptSnippetModel.prototype._releasedUISourceCodes):
        (WebInspector.SnippetJavaScriptSource):
        (WebInspector.SnippetJavaScriptSource.prototype.isEditable):
        (WebInspector.SnippetJavaScriptSource.prototype.commitWorkingCopy):
        (WebInspector.SnippetJavaScriptSource.prototype.get snippetId):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype.set _fileRenamed):
        (WebInspector.ScriptsPanel.prototype._snippetCreationRequested.callback):
        (WebInspector.ScriptsPanel.prototype._snippetCreationRequested):

2012-05-16  Sudarsana Nagineni  <sudarsana.nagineni@linux.intel.com>

        [EFL] Memory leak in RenderThemeEfl
        https://bugs.webkit.org/show_bug.cgi?id=86609

        Reviewed by Martin Robinson.

        Fix a memory leak by freeing the cairo surface with
        cairo_surface_destroy.

        * platform/efl/RenderThemeEfl.cpp:
        (WebCore::RenderThemeEfl::cacheThemePartFlush):

2012-05-16  Alexei Filippov  <alexeif@chromium.org>

        Web Inspector: Speedup heap snapshot postprocessing
        https://bugs.webkit.org/show_bug.cgi?id=86635

        Reviewed by Yury Semikhatsky.

        * inspector/front-end/HeapSnapshot.js:
        (WebInspector.HeapSnapshot.prototype._markQueriableHeapObjects):

2012-05-16  Alexander Pavlov  <apavlov@chromium.org>

        Unreviewed, followup for r117273 that fixes the Web Inspector's Computed Style pane layout.

        * inspector/front-end/elementsPanel.css:
        (.styles-section.computed-style.expanded .properties > li):
        (.styles-section.computed-style.expanded .properties > li .webkit-css-property):

2012-05-16  Andrey Kosyakov  <caseq@chromium.org>

        Web Inspector: [Extensions API] expose evaluateOptions in audit formatters
        https://bugs.webkit.org/show_bug.cgi?id=86617

        Reviewed by Pavel Feldman.

        Test: inspector/extensions/extensions-audits-content-script.html

        - apply extension-specific audit formatters earlier (in ExtensionAduitCategory, not along with the rest in AuditFormatters);
        - use ExtensionServer.evaluate() to handle evaluateOptions instead of PageAgent.evaluate();

        * inspector/front-end/AuditFormatters.js: Move node and object formatters to ExtensionAuditCategory.
        (WebInspector.partiallyApplyFormatters): Added a method to traverse formatters tree and apply formatters that are passed as input.
        * inspector/front-end/ExtensionAuditCategory.js:
        (WebInspector.ExtensionAuditCategory): Pass extensionOrigin.
        (WebInspector.ExtensionAuditCategoryResults.prototype._addNode): Apply extensions formatters before adding the result.
        (WebInspector.ExtensionAuditCategoryResults.prototype._addResult):
        (WebInspector.ExtensionAuditCategoryResults.prototype.evaluate): moved from AuditFormatters.
        (WebInspector.ExtensionAuditFormatters.object.onEvaluate):
        (WebInspector.ExtensionAuditFormatters.object):
        (WebInspector.ExtensionAuditFormatters.node.onNodeAvailable):
        (WebInspector.ExtensionAuditFormatters.node.onEvaluate):
        (WebInspector.ExtensionAuditFormatters.node):
        * inspector/front-end/ExtensionServer.js:
        (WebInspector.ExtensionServer.prototype._onAddAuditCategory): Plumb extensionOrigin through to audit category.

2012-05-16  Donald Carr  <donald.carr@nokia.com>

        Fixes the build with Qt 5 HEAD

        Reviewed by Csaba Osztrogonác.

        * WebCore.pri:
        * platform/graphics/texmap/TextureMapperGL.cpp:
        * plugins/qt/PluginViewQt.cpp:

2012-05-16  Rob Buis  <rbuis@rim.com>

        SVGSVGElement checkIntersection and checkEnclosure Mem corruption
        https://bugs.webkit.org/show_bug.cgi?id=67923

        Reviewed by Nikolas Zimmermann.

        Only call checkIntersection/checkEnclosure when we have a valid renderer.

        Test: svg/custom/intersection-list-null.svg

        * svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::checkIntersection):
        (WebCore::SVGSVGElement::checkEnclosure):

2012-05-16  Simon Hausmann  <simon.hausmann@nokia.com>

        Unreviewed, rolling out r110699.
        http://trac.webkit.org/changeset/110699
        https://bugs.webkit.org/show_bug.cgi?id=80982

        Not needed anymore and broke modal event loops

        * platform/qt/RunLoopQt.cpp:
        (WebCore::RunLoop::TimerObject::TimerObject):
        (WebCore::RunLoop::TimerObject::performWork):
        (RunLoop::TimerObject):

2012-05-16  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: split ScriptMapping into UISourceCodeProvider and SourceMapping.
        https://bugs.webkit.org/show_bug.cgi?id=86616

        Reviewed by Vsevolod Vlasov.

        This change simply splits the interface.

        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * inspector/compile-front-end.py:
        * inspector/front-end/CompilerScriptMapping.js:
        (WebInspector.CompilerScriptMapping.prototype.get uiSourceCodes):
        (WebInspector.CompilerScriptMapping.prototype.reset):
        * inspector/front-end/DebuggerModel.js:
        * inspector/front-end/DebuggerResourceBinding.js:
        (WebInspector.DebuggerResourceBinding):
        (WebInspector.DebuggerResourceBinding.prototype._uiSourceCodeForResource):
        * inspector/front-end/DebuggerScriptMapping.js:
        (WebInspector.DebuggerScriptMapping):
        (WebInspector.DebuggerScriptMapping.prototype.uiSourceCodes):
        (WebInspector.DebuggerScriptMapping.prototype._handleUISourceCodeAdded):
        (WebInspector.DebuggerScriptMapping.prototype._handleUISourceCodeReplaced):
        (WebInspector.DebuggerScriptMapping.prototype._handleUISourceCodeRemoved):
        * inspector/front-end/FilteredItemSelectionDialog.js:
        (WebInspector.OpenScriptDialog):
        (WebInspector.OpenScriptDialog.install):
        (WebInspector.OpenScriptDialog._show):
        * inspector/front-end/PresentationConsoleMessageHelper.js:
        (WebInspector.PresentationConsoleMessageHelper):
        (WebInspector.PresentationConsoleMessageHelper.prototype._consoleCleared):
        * inspector/front-end/ResourceScriptMapping.js:
        (WebInspector.ResourceScriptMapping.prototype.uiSourceCodes):
        (WebInspector.ResourceScriptMapping.prototype._uiSourceCodeAdded):
        (WebInspector.ResourceScriptMapping.prototype._uiSourceCodeReplaced):
        (WebInspector.ResourceScriptMapping.prototype._uiSourceCodeRemoved):
        * inspector/front-end/Script.js:
        * inspector/front-end/ScriptSnippetModel.js:
        (WebInspector.ScriptSnippetModel.prototype._uiSourceCodes):
        (WebInspector.SnippetScriptMapping.prototype.uiSourceCodes):
        (WebInspector.SnippetScriptMapping.prototype._fireUISourceCodeAdded):
        (WebInspector.SnippetScriptMapping.prototype._fireUISourceCodeRemoved):
        * inspector/front-end/ScriptsPanel.js:
        * inspector/front-end/ScriptsSearchScope.js:
        (WebInspector.ScriptsSearchScope):
        (WebInspector.ScriptsSearchScope.prototype._sortedUISourceCodes):
        * inspector/front-end/SourceMapping.js: Renamed from Source/WebCore/inspector/front-end/ScriptMapping.js.
        * inspector/front-end/UISourceCode.js:
        (WebInspector.UISourceCodeProvider):
        (WebInspector.UISourceCodeProvider.prototype.uiSourceCodes):
        (WebInspector.UILocation):
        (WebInspector.UILocation.prototype.uiLocationToRawLocation):
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/inspector.html:

2012-05-16  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Implement snippet creation/renaming in ScriptsNavigator.
        https://bugs.webkit.org/show_bug.cgi?id=82622

        Reviewed by Pavel Feldman.

        Implemented snippet creation and renaming.
        Added TitleChanged event to UISourceCode.

        * inspector/front-end/NavigatorOverlayController.js:
        (WebInspector.NavigatorOverlayController.prototype._containingElementFocused):
        (WebInspector.NavigatorOverlayController.prototype.isNavigatorPinned):
        (WebInspector.NavigatorOverlayController.prototype.isNavigatorHidden):
        * inspector/front-end/NavigatorView.js:
        (WebInspector.NavigatorView.prototype._uiSourceCodeTitleChanged):
        (WebInspector.NavigatorView.prototype._updateScriptTitle):
        (WebInspector.NavigatorView.prototype._addUISourceCodeListeners):
        (WebInspector.NavigatorView.prototype._removeUISourceCodeListeners):
        (WebInspector.NavigatorView.prototype._fileRenamed):
        (WebInspector.NavigatorScriptTreeElement.prototype.onattach):
        * inspector/front-end/ScriptSnippetModel.js:
        (WebInspector.ScriptSnippetModel.prototype._addScriptSnippet):
        * inspector/front-end/ScriptsNavigator.js:
        (WebInspector.ScriptsNavigator):
        (WebInspector.ScriptsNavigator.prototype._snippetsNavigatorViewForUISourceCode):
        (WebInspector.ScriptsNavigator.prototype.addUISourceCode):
        (WebInspector.ScriptsNavigator.prototype.isScriptSourceAdded):
        (WebInspector.ScriptsNavigator.prototype.revealUISourceCode):
        (WebInspector.ScriptsNavigator.prototype.replaceUISourceCode):
        (WebInspector.ScriptsNavigator.prototype.rename):
        (WebInspector.ScriptsNavigator.prototype._fileRenamed):
        (WebInspector.ScriptsNavigator.prototype._snippetCreationRequested):
        (WebInspector.SnippetsNavigatorView.prototype._handleCreateSnippet):
        (WebInspector.SnippetsNavigatorView.prototype._snippetCreationRequested):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype.set _hideDebuggerSidebar):
        (WebInspector.ScriptsPanel.prototype.set _fileRenamed):
        (WebInspector.ScriptsPanel.prototype._snippetCreationRequested.callback):
        (WebInspector.ScriptsPanel.prototype._snippetCreationRequested):
        * inspector/front-end/TabbedEditorContainer.js:
        (WebInspector.TabbedEditorContainer.prototype._appendFileTab):
        (WebInspector.TabbedEditorContainer.prototype._tabClosed):
        (WebInspector.TabbedEditorContainer.prototype._uiSourceCodeTitleChanged):
        * inspector/front-end/UISourceCode.js:
        (WebInspector.UISourceCode.prototype.urlChanged):

2012-05-16  Alexander Pavlov  <apavlov@chromium.org>

        Web Inspector: gradient properties are painful to inspect / author.
        https://bugs.webkit.org/show_bug.cgi?id=86379

        Reviewed by Pavel Feldman.

        The CSS styles layout has been changed to allow property values to wrap onto subsequent lines
        to let the users see the entire value text.

        * inspector/front-end/StylesSidebarPane.js:
        (WebInspector.StylePropertyTreeElement.prototype.updateTitle.): Avoid line breaks between the color swatch and value.
        * inspector/front-end/elementsPanel.css:
        (.styles-section .properties li.not-parsed-ok img.exclamation-mark):
        (.styles-section .properties li):
        (.styles-section .properties li .webkit-css-property):
        (.styles-section.expanded .properties > li):
        (.styles-section .properties > li .webkit-css-property):
        (.styles-section .properties > li.child-editing):
        (.styles-section .properties > li.child-editing .webkit-css-property):
        (.styles-section .properties .enabled-button):

2012-05-16  Yury Semikhatsky  <yurys@chromium.org>

        Web Inspector: rename ProfileView.js to CPUProfileView.js
        https://bugs.webkit.org/show_bug.cgi?id=86612

        Reviewed by Pavel Feldman.

        Renamed ProfileView.js to CPUProfileView.js to match the file content.

        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * inspector/compile-front-end.py:
        * inspector/front-end/CPUProfileView.js: Renamed from Source/WebCore/inspector/front-end/ProfileView.js.
        (WebInspector.CPUProfileView.profileCallback):
        (WebInspector.CPUProfileView.prototype.get statusBarItems):
        (WebInspector.CPUProfileView.prototype.get profile):
        (WebInspector.CPUProfileView.prototype.set profile):
        (WebInspector.CPUProfileView.prototype.get bottomUpProfileDataGridTree):
        (WebInspector.CPUProfileView.prototype.get topDownProfileDataGridTree):
        (WebInspector.CPUProfileView.prototype.get currentTree):
        (WebInspector.CPUProfileView.prototype.set currentTree):
        (WebInspector.CPUProfileView.prototype.willHide):
        (WebInspector.CPUProfileView.prototype.refresh):
        (WebInspector.CPUProfileView.prototype.refreshVisibleData):
        (WebInspector.CPUProfileView.prototype.refreshShowAsPercents):
        (WebInspector.CPUProfileView.prototype.searchCanceled):
        (WebInspector.CPUProfileView.prototype.performSearch.matchesQuery):
        (WebInspector.CPUProfileView.prototype.performSearch):
        (WebInspector.CPUProfileView.prototype.jumpToFirstSearchResult):
        (WebInspector.CPUProfileView.prototype.jumpToLastSearchResult):
        (WebInspector.CPUProfileView.prototype.jumpToNextSearchResult):
        (WebInspector.CPUProfileView.prototype.jumpToPreviousSearchResult):
        (WebInspector.CPUProfileView.prototype.showingFirstSearchResult):
        (WebInspector.CPUProfileView.prototype.showingLastSearchResult):
        (WebInspector.CPUProfileView.prototype._jumpToSearchResult):
        (WebInspector.CPUProfileView.prototype._changeView.set else):
        (WebInspector.CPUProfileView.prototype._focusClicked):
        (WebInspector.CPUProfileView.prototype._excludeClicked):
        (WebInspector.CPUProfileView.prototype._resetClicked):
        (WebInspector.CPUProfileView.prototype._dataGridNodeSelected):
        (WebInspector.CPUProfileView.prototype._dataGridNodeDeselected):
        (WebInspector.CPUProfileView.prototype._sortProfile):
        (WebInspector.CPUProfileView.prototype._assignParentsInProfile):
        (WebInspector.CPUProfileType):
        (WebInspector.CPUProfileType.prototype.get buttonTooltip):
        (WebInspector.CPUProfileType.prototype.buttonClicked):
        (WebInspector.CPUProfileType.prototype.get treeItemTitle):
        (WebInspector.CPUProfileType.prototype.get description):
        (WebInspector.CPUProfileType.prototype.isRecordingProfile):
        (WebInspector.CPUProfileType.prototype.startRecordingProfile):
        (WebInspector.CPUProfileType.prototype.stopRecordingProfile):
        (WebInspector.CPUProfileType.prototype.setRecordingProfile):
        (WebInspector.CPUProfileType.prototype.createSidebarTreeElementForProfile):
        (WebInspector.CPUProfileType.prototype.createView):
        (WebInspector.CPUProfileType.prototype.createTemporaryProfile):
        (WebInspector.CPUProfileType.prototype.createProfile):
        * inspector/front-end/HeapSnapshotView.js:
        (WebInspector.HeapSnapshotView.prototype.performSearch.matchesByName):
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/inspector.html:

2012-05-16  Arpita Bahuguna  <arpitabahuguna@gmail.com>

        "border: collapse" + "display: none" rows in the tbody while having thead or tfoot doesn't render the opposite border
        https://bugs.webkit.org/show_bug.cgi?id=67877

        Reviewed by Antti Koivisto.

        Test: fast/css/table-collapsed-borders.html

        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::computeCollapsedBeforeBorder):
        When getting the previous row group's after border, pass SkipEmptySections as the second param
        to the RenderTable::sectionAbove() call. Thus if the currSection is the top most section of the
        table passing SkipEmptySections to sectionAbove() would return null which should be the expected
        behavior.

        (WebCore::RenderTableCell::computeCollapsedAfterBorder):
        When getting the following row group's before border, pass SkipEmptySections as the second param
        to the RenderTable::sectionBelow() call. Thus if the currSection is the bottom most section of the
        table passing SkipEmptySections to sectionBelow() would return null which should be the expected
        behavior.

2012-05-16  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: follow up to r117267 - fixing typo and removing unnecessary dispatch.
        https://bugs.webkit.org/show_bug.cgi?id=86613

        Reviewed by Vsevolod Vlasov.

        * inspector/front-end/ResourceScriptMapping.js:
        (WebInspector.ResourceScriptMapping.prototype._uiSourceCodeAdded):
        (WebInspector.ResourceScriptMapping.prototype._uiSourceCodeReplaced):

2012-05-16  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Move edit/save script source logic to JavaScriptSource.
        https://bugs.webkit.org/show_bug.cgi?id=86604

        Reviewed by Pavel Feldman.

        Added working copy notion to UISourceCode.
        Moved DebuggerResourceBinding content edit calls to JavaScriptSource.
        Added WorkingCopyChanged event to UISourceCode.

        * inspector/front-end/CompilerScriptMapping.js:
        * inspector/front-end/DebuggerResourceBinding.js:
        (WebInspector.DebuggerResourceBinding.prototype.canSetContent):
        * inspector/front-end/JavaScriptSource.js:
        (WebInspector.JavaScriptSource):
        (WebInspector.JavaScriptSource.prototype.breakpointStorageId):
        (WebInspector.JavaScriptSource.prototype.isEditable):
        (WebInspector.JavaScriptSource.prototype.commitWorkingCopy):
        (WebInspector):
        * inspector/front-end/JavaScriptSourceFrame.js:
        (WebInspector.JavaScriptSourceFrame.prototype.wasShown):
        (WebInspector.JavaScriptSourceFrame.prototype.canEditSource):
        (WebInspector.JavaScriptSourceFrame.prototype.commitEditing):
        (WebInspector.JavaScriptSourceFrame.prototype.afterTextChanged):
        (WebInspector.JavaScriptSourceFrame.prototype.beforeTextChanged):
        (WebInspector.JavaScriptSourceFrame.prototype._didEditContent):
        (WebInspector.JavaScriptSourceFrame.prototype._onMouseDown):
        * inspector/front-end/NavigatorView.js:
        (WebInspector.NavigatorView.prototype._uiSourceCodeWorkingCopyChanged):
        (WebInspector.NavigatorView.prototype._uiSourceCodeContentChanged):
        (WebInspector.NavigatorView.prototype._updateScriptTitle):
        (WebInspector.NavigatorView.prototype._removeUISourceCode):
        (WebInspector.NavigatorView.prototype._addUISourceCodeListeners):
        (WebInspector.NavigatorView.prototype._removeUISourceCodeListeners):
        (WebInspector.NavigatorView.prototype.reset):
        * inspector/front-end/RawSourceCode.js:
        (WebInspector.RawSourceCode.prototype._createUISourceCode):
        * inspector/front-end/ScriptSnippetModel.js:
        (WebInspector.ScriptSnippetModel.prototype._addScriptSnippet):
        (WebInspector.ScriptSnippetModel.prototype._createUISourceCodeForScript):
        * inspector/front-end/ScriptsPanel.js:
        * inspector/front-end/TabbedEditorContainer.js:
        (WebInspector.TabbedEditorContainer):
        (WebInspector.TabbedEditorContainer.prototype._titleForFile):
        (WebInspector.TabbedEditorContainer.prototype._appendFileTab):
        (WebInspector.TabbedEditorContainer.prototype._tabClosed):
        (WebInspector.TabbedEditorContainer.prototype._updateFileTitle.get if):
        (WebInspector.TabbedEditorContainer.prototype._updateFileTitle):
        (WebInspector.TabbedEditorContainer.prototype._uiSourceCodeWorkingCopyChanged):
        (WebInspector.TabbedEditorContainer.prototype._uiSourceCodeContentChanged):
        * inspector/front-end/UISourceCode.js:
        (WebInspector.UISourceCode):
        (WebInspector.UISourceCode.prototype.contentChanged):
        (WebInspector.UISourceCode.prototype.isEditable):
        (WebInspector.UISourceCode.prototype.workingCopy):
        (WebInspector.UISourceCode.prototype.setWorkingCopy):
        (WebInspector.UISourceCode.prototype.isDirty):
        (WebInspector.UISourceCode.prototype.commitWorkingCopy):

2012-05-16  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: get rid of UISourceCodeListChanged event.
        https://bugs.webkit.org/show_bug.cgi?id=86601

        Reviewed by Vsevolod Vlasov.

        There was unnecessary conversion between this event and UISourceCodeAdded/Removed/Replaced.

        * inspector/front-end/CompilerScriptMapping.js:
        (WebInspector.CompilerScriptMapping.prototype.reset):
        * inspector/front-end/DebuggerScriptMapping.js:
        (WebInspector.DebuggerScriptMapping):
        (WebInspector.DebuggerScriptMapping.prototype._handleUISourceCodeAdded):
        (WebInspector.DebuggerScriptMapping.prototype._handleUISourceCodeReplaced):
        (WebInspector.DebuggerScriptMapping.prototype._handleUISourceCodeRemoved):
        * inspector/front-end/NavigatorView.js:
        * inspector/front-end/ResourceScriptMapping.js:
        (WebInspector.ResourceScriptMapping.prototype.addScript):
        (WebInspector.ResourceScriptMapping.prototype._handleUISourceCodeChanged):
        (WebInspector.ResourceScriptMapping.prototype._uiSourceCodeAdded):
        (WebInspector.ResourceScriptMapping.prototype._uiSourceCodeReplaced):
        (WebInspector.ResourceScriptMapping.prototype._uiSourceCodeRemoved):
        (WebInspector.ResourceScriptMapping.prototype.reset):
        * inspector/front-end/ScriptMapping.js:
        * inspector/front-end/ScriptSnippetModel.js:
        (WebInspector.ScriptSnippetModel.prototype._addScriptSnippet):
        (WebInspector.ScriptSnippetModel.prototype._createUISourceCodeForScript):
        (WebInspector.ScriptSnippetModel.prototype._reset):
        (WebInspector.SnippetScriptMapping.prototype._fireUISourceCodeAdded):
        (WebInspector.SnippetScriptMapping.prototype._fireUISourceCodeRemoved):
        * inspector/front-end/ScriptsNavigator.js:
        (WebInspector.ScriptsNavigator.prototype.replaceUISourceCode):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype._uiSourceCodeReplaced):
        * inspector/front-end/TabbedEditorContainer.js:

2012-05-16  Keishi Hattori  <keishi@webkit.org>

        [chromium] Add WebKit API to access inner text value of input element
        https://bugs.webkit.org/show_bug.cgi?id=85353

        Reviewed by Kent Tamura.

        Test: fast/forms/editing-value.html

        We need this to implement the datalist UI for  <input type=email multiple>.
        HTMLInputElement.value gives you the sanitized value so the whitespace between values are trimmed.
        We need to append the selected suggestion to the end without modifying the rest of the text.

        * WebCore.exp.in: Added HTMLInputElement::setEditingValue
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::setEditingValue):
        (WebCore):
        * html/HTMLInputElement.h:
        (HTMLInputElement):
        * testing/Internals.cpp:
        (WebCore::Internals::setEditingValue):
        (WebCore):
        * testing/Internals.h:
        (Internals):
        * testing/Internals.idl:

2012-05-16  Jason Liu  <jason.liu@torchmobile.com.cn>

        [BlackBerry] Cookies should be checked during parsing to improve performance.
        https://bugs.webkit.org/show_bug.cgi?id=85028

        Reviewed by George Staikos.

        We shouldn't waste time and memery on invalid cookies. It is better to drop them during parsing.
        We shouldn't check the default domain since it is set with host. So we only check domains which are parsed
        from response headers.

        No new tests. No functionality change.

        * platform/blackberry/CookieManager.cpp:
        (WebCore::CookieManager::setCookies):
        * platform/blackberry/CookieManager.h:
        * platform/blackberry/CookieParser.cpp:
        (WebCore::CookieParser::parseOneCookie):

2012-05-15  Pierre Rossi  <pierre.rossi@gmail.com>

        [Qt] Enable SVG Fonts by default
        https://bugs.webkit.org/show_bug.cgi?id=86463

        Reviewed by Nikolas Zimmermann.

        Another feature we can get for free after switching to using
        the font fast path with QRawFont.
        It will get disabled in features.prf if either SVG support is
        disabled or if we are not using QRawFont (e.g. for Qt 4).

        Covered by a series of tests that were skipped for the
        Qt port up until now.

        * platform/graphics/qt/FontPlatformData.h:
        (WebCore::FontPlatformDataPrivate::FontPlatformDataPrivate):
        Initialize the platform data used as fallback in conjunction with SVG
        fonts so it will honor size, weight and oblique-ness.
        * rendering/svg/SVGTextMetricsBuilder.cpp: Avoid forcing the complex path.
        (WebCore::SVGTextMetricsBuilder::advance):
        (WebCore::SVGTextMetricsBuilder::advanceSimpleText):
        (WebCore::SVGTextMetricsBuilder::initializeMeasurementWithTextRenderer):
        * svg/SVGFontElement.cpp:
        (WebCore::SVGFontElement::ensureGlyphCache): avoid ambiguity with String(const QString&)

2012-05-16  Kenichi Ishibashi  <bashi@chromium.org>

        [Chromium] WebTransformationMatrixTest.verifyDefaultConstructorCreatesIdentityMatrix is failing
        https://bugs.webkit.org/show_bug.cgi?id=86589

        Reviewed by Kent Tamura.

        Need to call m_private.reset(0) before destructing WebTransformationMatrix objects.

        No new tests. WebTransformationMatrixTest should pass on debug build.

        * platform/chromium/support/WebTransformationMatrix.cpp:
        (WebKit::WebTransformationMatrix::~WebTransformationMatrix):
        (WebKit):

2012-05-16  Shinya Kawanaka  <shinyak@chromium.org>

        ShadowRoot.selection should return the seleciton whose range is in a shadow tree.
        https://bugs.webkit.org/show_bug.cgi?id=82698

        Reviewed by Ryosuke Niwa.

        The selection object returned from shadowRoot.selection should be able to see
        the inner object of the shadowRoot.

        In the previous code, the node out of the shadow subtree was returned for
        anchorNode, focusNode, baseNode, and extentNode. This patch enables us to get
        the corresponding shadow ancestor in the specified TreeScope (m_treeScope).

        Tests: editing/shadow/selection-of-orphan-shadowroot.html
               editing/shadow/selection-of-shadowroot.html

        * dom/ShadowRoot.cpp:
        (WebCore::ShadowRoot::selection):
        * dom/ShadowRoot.h:
        (ShadowRoot):
        * dom/TreeScope.cpp:
        (WebCore::TreeScope::getSelection): When shadow DOM feature is not enabled, we want to use the same
        instance of DOMSelection among Document and ShadowRoot.
        * dom/TreeScopeAdjuster.cpp:
        (WebCore::TreeScopeAdjuster::TreeScopeAdjuster):
        (WebCore::TreeScopeAdjuster::ancestorInThisScope): Since node could be null, I've added a node check code.
        * dom/TreeScopeAdjuster.h:
        (TreeScopeAdjuster):
        (WebCore::TreeScopeAdjuster::treeScope):
        * page/DOMSelection.cpp:
        (WebCore::DOMSelection::anchorNode):
        (WebCore::DOMSelection::anchorOffset):
        (WebCore::DOMSelection::focusNode):
        (WebCore::DOMSelection::focusOffset):
        (WebCore::DOMSelection::baseNode):
        (WebCore::DOMSelection::baseOffset):
        (WebCore::DOMSelection::extentNode):
        (WebCore::DOMSelection::extentOffset):
        (WebCore::DOMSelection::shadowAdjustedNode): Gets the corresponding node in the m_treeScope from the Position.
        (WebCore):
        (WebCore::DOMSelection::shadowAdjustedOffset): Gets the corresponding node offset in the m_treeScope from the Position.
        * page/DOMSelection.h:
        (WebCore):
        (DOMSelection):

2012-05-16  Jason Liu  <jason.liu@torchmobile.com.cn>

        [BlackBerry] xhr request to non existent file response is 0 and not 404.
        https://bugs.webkit.org/show_bug.cgi?id=86344

        Reviewed by George Staikos.

        NetworkJob receives 404 for a XMLHttpRequest which calls open("HEAD", "notExist.html", true).
        There are no data received because its method is HEAD.
        This case should not be treated as a failure.

        Add shouldNotifyClientFailed() to treat XMLHttpRequest as a special case.
        XMLHttpRequest will fail when status code is smaller than zero.

        If we use "GET" and receive 404 without body, NetworkJob won't go through failing code path, too.
        So add http/tests/xmlhttprequest/xmlhttprequest-check-get-readystate-for-404-without-body.html
        to check this case.

        Test: http/tests/xmlhttprequest/xmlhttprequest-check-head-readystate-for-404.html
              http/tests/xmlhttprequest/xmlhttprequest-check-get-readystate-for-404-without-body.html
        * platform/network/blackberry/NetworkJob.cpp:
        (WebCore::NetworkJob::sendResponseIfNeeded):

2012-05-16  MORITA Hajime  <morrita@google.com>

        HasCustomWillOrDidRecalcStyleFlag and family should live in a bit.
        https://bugs.webkit.org/show_bug.cgi?id=86175

        Reviewed by Ryosuke Niwa.

        This change unifies following flags into one HasCustomCallbacksFlag.
        - HasCustomWillOrDidRecalcStyleFlag
        - HasCustomStyleForRendererFlag
        - IsFrameOwnerElementFlag

        By this change, some callbacks can be called even if there are no override.
        So all custom callbacks should just pass these invocations.

        No new tests. No behavior change.

        * dom/ContainerNodeAlgorithms.h:
        (WebCore::ChildFrameDisconnector::collectDescendant):
        * dom/Element.cpp:
        (WebCore::Element::styleForRenderer):
        (WebCore::Element::recalcStyle):
        (WebCore::Element::willRecalcStyle):
        (WebCore):
        (WebCore::Element::didRecalcStyle):
        (WebCore::Element::customStyleForRenderer):
        * dom/Element.h:
        (Element):
        * dom/Node.h:
        (WebCore::Node::isFrameOwnerElement):
        (WebCore::Node::hasCustomCallbacks):
        (WebCore::Node::setHasCustomCallbacks):
        * dom/Text.cpp:
        (WebCore::Text::recalcTextStyle):
        (WebCore::Text::willRecalcTextStyle):
        (WebCore):
        * dom/Text.h:
        (Text):
        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLFormControlElement::HTMLFormControlElement):
        * html/HTMLFrameOwnerElement.cpp:
        (WebCore::HTMLFrameOwnerElement::disconnectContentFrame):
        * html/HTMLFrameOwnerElement.h:
        * html/HTMLFrameSetElement.cpp:
        (WebCore::HTMLFrameSetElement::HTMLFrameSetElement):
        * html/HTMLIFrameElement.cpp:
        (WebCore::HTMLIFrameElement::HTMLIFrameElement):
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::HTMLMediaElement):
        * html/HTMLPlugInImageElement.cpp:
        (WebCore::HTMLPlugInImageElement::HTMLPlugInImageElement):
        (WebCore::HTMLPlugInImageElement::documentWillSuspendForPageCache):
        (WebCore::HTMLPlugInImageElement::documentDidResumeFromPageCache):
        (WebCore::HTMLPlugInImageElement::customStyleForRenderer):
        * html/HTMLPlugInImageElement.h:
        (HTMLPlugInImageElement):
        * html/shadow/TextControlInnerElements.cpp:
        (WebCore::TextControlInnerElement::TextControlInnerElement):
        (WebCore::TextControlInnerElement::customStyleForRenderer):
        (WebCore::TextControlInnerTextElement::TextControlInnerTextElement):
        (WebCore::TextControlInnerTextElement::customStyleForRenderer):
        * html/shadow/TextControlInnerElements.h:
        (TextControlInnerElement):
        (TextControlInnerTextElement):
        * html/shadow/TextFieldDecorationElement.cpp:
        (WebCore::TextFieldDecorationElement::TextFieldDecorationElement):
        (WebCore::TextFieldDecorationElement::customStyleForRenderer):
        * html/shadow/TextFieldDecorationElement.h:
        (TextFieldDecorationElement):
        * svg/SVGElement.cpp:
        (WebCore::SVGElement::SVGElement):
        (WebCore::SVGElement::customStyleForRenderer):
        * svg/SVGElement.h:
        (SVGElement):
        * svg/SVGTRefElement.cpp:
        (WebCore::SVGShadowText::SVGShadowText):
        * svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::SVGUseElement):

2012-05-16  Yury Semikhatsky  <yurys@chromium.org>

        Web Inspector: exception when switching to heap profiler comparison view
        https://bugs.webkit.org/show_bug.cgi?id=86224

        Reviewed by Pavel Feldman.

        Make sure the messages are dispatched in the same order as they are sent in
        case a fake worker is used for heap snapshot processing.

        * inspector/front-end/HeapSnapshotProxy.js:
        (WebInspector.AsyncTaskQueue):
        (WebInspector.AsyncTaskQueue.prototype.addTask):
        (WebInspector.AsyncTaskQueue.prototype._onTimeout):
        (WebInspector.AsyncTaskQueue.prototype._scheduleTimer):
        (WebInspector.HeapSnapshotFakeWorker):
        (WebInspector.HeapSnapshotFakeWorker.prototype.postMessage):
        (WebInspector.HeapSnapshotFakeWorker.prototype._postMessageFromWorker):

2012-05-16  Mikhail Pozdnyakov  <mikhail.pozdnyakov@intel.com>

        [EFL] PlatformKeyboardEvent: figures, letters and printscreen key handling
        https://bugs.webkit.org/show_bug.cgi?id=85503

        Reviewed by Gustavo Noronha Silva.

        * platform/efl/EflKeyboardUtilities.cpp:
        (WebCore::addCharactersToKeyMap): aux function
        (WebCore):
        (WebCore::createKeyMap): Figures and letters keys are added to the keyMap
        (WebCore::addCharactersToWinKeyMap): aux function
        (WebCore::createWindowsKeyMap): Capital letters keys are added to the windowsKeyMap. Corrected value for printscreen key.
        (WebCore::singleCharacterString): Return empty text for printscreen key.

2012-05-16  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: rename DebuggerPresentationModel to DebuggerScriptMapping, make it private to ScriptsPanel.
        https://bugs.webkit.org/show_bug.cgi?id=86594

        Reviewed by Vsevolod Vlasov.

        This change completes the elimination of the presentation model.

        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * inspector/compile-front-end.py:
        * inspector/front-end/AuditFormatters.js:
        (WebInspector.AuditFormatters.resourceLink):
        * inspector/front-end/DebuggerResourceBinding.js:
        (WebInspector.DebuggerResourceBinding):
        (WebInspector.DebuggerResourceBinding.prototype._uiSourceCodeForResource):
        * inspector/front-end/DebuggerScriptMapping.js: Renamed from Source/WebCore/inspector/front-end/DebuggerPresentationModel.js.
        (WebInspector.DebuggerScriptMapping):
        (WebInspector.DebuggerScriptMapping.prototype._handleUISourceCodeListChanged):
        * inspector/front-end/FilteredItemSelectionDialog.js:
        (WebInspector.OpenScriptDialog):
        (WebInspector.OpenScriptDialog.install):
        (WebInspector.OpenScriptDialog._show):
        * inspector/front-end/JavaScriptSourceFrame.js:
        (WebInspector.JavaScriptSourceFrame):
        * inspector/front-end/PresentationConsoleMessageHelper.js:
        (WebInspector.PresentationConsoleMessageHelper):
        (WebInspector.PresentationConsoleMessageHelper.prototype._consoleCleared):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype._loadUISourceCodes):
        (WebInspector.ScriptsPanel.prototype._createSourceFrame):
        (WebInspector.ScriptsPanel.prototype._toggleFormatSource):
        * inspector/front-end/ScriptsSearchScope.js:
        (WebInspector.ScriptsSearchScope):
        (WebInspector.ScriptsSearchScope.prototype._sortedUISourceCodes):
        * inspector/front-end/UISourceCode.js:
        (WebInspector.UISourceCodeProject):
        (WebInspector.UISourceCodeProject.prototype.uiSourceCodes):
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/inspector.html:
        * inspector/front-end/inspector.js:
        (WebInspector._createPanels):

2012-05-15  Yury Semikhatsky  <yurys@chromium.org>

        Web Inspector: use separate fields for storing HeapSnapshotLoaderProxy and HeapSnapshotProxy
        https://bugs.webkit.org/show_bug.cgi?id=86488

        Reviewed by Pavel Feldman.

        Simplified heap profiler snapshot loading code. Introduced dedicated fields for
        snapshot loader proxy and for snapshot proxy.

        * inspector/front-end/HeapSnapshotProxy.js:
        (WebInspector.HeapSnapshotWorker):
        (WebInspector.HeapSnapshotLoaderProxy):
        (WebInspector.HeapSnapshotLoaderProxy.prototype.finishLoading.updateStaticData):
        (WebInspector.HeapSnapshotLoaderProxy.prototype.finishLoading.callLoadCallbacks):
        (WebInspector.HeapSnapshotLoaderProxy.prototype.finishLoading):
        (WebInspector.HeapSnapshotLoaderProxy.prototype.get loaded):
        (WebInspector.HeapSnapshotLoaderProxy.prototype.startLoading):
        (WebInspector.HeapSnapshotLoaderProxy.prototype.pushJSONChunk):
        * inspector/front-end/HeapSnapshotView.js:
        (WebInspector.HeapSnapshotView.profileCallback):
        (WebInspector.HeapSnapshotView):
        (WebInspector.HeapSnapshotView.prototype.dispose):
        (WebInspector.HeapSnapshotView.prototype.get baseProfileWrapper):
        (WebInspector.HeapSnapshotView.prototype.wasShown.profileCallback1):
        (WebInspector.HeapSnapshotView.prototype._changeView):
        (WebInspector.HeapProfileHeader): split _proxy field into _loaderProxy and _snapshotProxy
        (WebInspector.HeapProfileHeader.prototype.snapshotProxy):
        (WebInspector.HeapProfileHeader.prototype.load):
        (WebInspector.HeapProfileHeader.prototype._setupWorker):
        (WebInspector.HeapProfileHeader.prototype.dispose):
        (WebInspector.HeapProfileHeader.prototype._saveStatusUpdate):
        (WebInspector.HeapProfileHeader.prototype.pushJSONChunk):
        (WebInspector.HeapProfileHeader.prototype.finishHeapSnapshot):
        (WebInspector.HeapProfileHeader.prototype.canSaveToFile):
        (WebInspector.HeapProfileHeader.prototype.loadFromFile.onLoad):
        (WebInspector.HeapProfileHeader.prototype.loadFromFile):

2012-05-16  Eugene Klyuchnikov  <eustas.bug@gmail.com>

        Web Inspector: Use CSS columns feature for HelpScreen contents.
        https://bugs.webkit.org/show_bug.cgi?id=86367

        Reviewed by Yury Semikhatsky.

        Right-docked inspector should show shortcuts/settings in one column.
        Bottom-docked inspector should use horizontal space more effectively
        (more than 2 columns in shortcuts/settings).

        Please see attached screenshots.

        UI adjustments, no new tests.

        * inspector/front-end/SettingsScreen.js:
        (WebInspector.SettingsScreen): Turned table to div.
        (WebInspector.SettingsScreen.prototype._appendSection): Removed.
        * inspector/front-end/ShortcutsScreen.js:
        (WebInspector.ShortcutsScreen.prototype._buildTable): Removed "balancing" algorithm.
        (WebInspector.ShortcutsSection.prototype.renderSection): Turned table to div.
        (WebInspector.ShortcutsSection.prototype._renderHeader): Ditto.
        * inspector/front-end/helpScreen.css: Use CSS columns feature.
        (.help-container): Added columns container.
        (.help-block): Added "section".
        (.help-line): Added key shortcut line.
        (.help-key-cell): Added key shortcut cell.
        (.help-cell): Ditto
        (.help-section-title): Combined title classes
        (.help-content p): Adjusted spacing.

2012-05-16  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r117050.
        http://trac.webkit.org/changeset/117050
        https://bugs.webkit.org/show_bug.cgi?id=86587

        "Some heap profiler tests started timing out" (Requested by
        yurys on #webkit).

        * inspector/front-end/HeapSnapshotProxy.js:
        (WebInspector.HeapSnapshotFakeWorker):
        (WebInspector.HeapSnapshotFakeWorker.prototype.postMessage):
        (WebInspector.HeapSnapshotFakeWorker.prototype._postMessageFromWorker):

2012-05-16  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r117206.
        http://trac.webkit.org/changeset/117206
        https://bugs.webkit.org/show_bug.cgi?id=86583

        breaks chromium browser_tests (Requested by bashi1 on
        #webkit).

        * loader/MainResourceLoader.cpp:
        (WebCore::MainResourceLoader::continueAfterContentPolicy):
        * loader/archive/mhtml/MHTMLArchive.cpp:
        (WebCore::MHTMLArchive::create):

2012-05-16  Nikolas Zimmermann  <nzimmermann@rim.com>

        REGRESSION(r105057): Infinite loop inside SVGTextLayoutEngine::currentLogicalCharacterMetrics
        https://bugs.webkit.org/show_bug.cgi?id=83405

        Reviewed by Darin Adler.

        Dynamically adding tspans carrying position information in the x/y/dx/dy/rotate lists is broken.
        To avoid mistakes like this in future, simplify the calling code in RenderSVGInlineText and centralize
        the management of all caches (text positioning element cache / metrics map / layout attributes) in
        RenderSVGText. This avoids the hack in SVGRootInlineBox::computePerCharacterLayoutInformation() which
        called textRoot->rebuildLayoutAttributes(), which was used to fix previous security issues with this code.
        Instead correctly handle destruction of RenderSVGInlineText in RenderSVGText, keeping the m_layoutAttributes
        synchronized with the current state of the render tree. Fixes highcharts problems.

        Tests: svg/text/add-tspan-position-bug.html
               svg/text/highcharts-assertion.html
               svg/text/modify-tspan-position-bug.html

        * rendering/svg/RenderSVGBlock.h:
        (RenderSVGBlock):
        * rendering/svg/RenderSVGInline.cpp:
        (WebCore::RenderSVGInline::addChild):
        (WebCore::RenderSVGInline::removeChild):
        * rendering/svg/RenderSVGInline.h:
        (RenderSVGInline):
        * rendering/svg/RenderSVGInlineText.cpp:
        (WebCore::RenderSVGInlineText::setTextInternal):
        (WebCore::RenderSVGInlineText::styleDidChange):
        * rendering/svg/RenderSVGInlineText.h:
        * rendering/svg/RenderSVGText.cpp:
        (WebCore::RenderSVGText::RenderSVGText):
        (WebCore::RenderSVGText::~RenderSVGText):
        (WebCore::collectLayoutAttributes):
        (WebCore::RenderSVGText::subtreeChildWasAdded):
        (WebCore::findPreviousAndNextAttributes):
        (WebCore::checkLayoutAttributesConsistency):
        (WebCore::RenderSVGText::willBeDestroyed):
        (WebCore::RenderSVGText::subtreeChildWillBeRemoved):
        (WebCore::RenderSVGText::subtreeChildWasRemoved):
        (WebCore::RenderSVGText::subtreeStyleDidChange):
        (WebCore::RenderSVGText::subtreeTextDidChange):
        (WebCore::updateFontInAllDescendants):
        (WebCore::RenderSVGText::layout):
        (WebCore::RenderSVGText::addChild):
        (WebCore::RenderSVGText::removeChild):
        * rendering/svg/RenderSVGText.h:
        (RenderSVGText):
        * rendering/svg/SVGRenderSupport.cpp:
        (WebCore::SVGRenderSupport::layoutChildren):
        * rendering/svg/SVGRootInlineBox.cpp:
        (WebCore::SVGRootInlineBox::computePerCharacterLayoutInformation):
        * rendering/svg/SVGTextLayoutAttributesBuilder.cpp:
        (WebCore::SVGTextLayoutAttributesBuilder::buildLayoutAttributesForTextRenderer):
        (WebCore::SVGTextLayoutAttributesBuilder::buildLayoutAttributesForWholeTree):
        (WebCore::SVGTextLayoutAttributesBuilder::rebuildMetricsForTextRenderer):
        (WebCore::SVGTextLayoutAttributesBuilder::buildCharacterDataMap):
        * rendering/svg/SVGTextLayoutAttributesBuilder.h:
        (SVGTextLayoutAttributesBuilder):
        (WebCore::SVGTextLayoutAttributesBuilder::numberOfTextPositioningElements):
        * svg/SVGAElement.cpp:
        * svg/SVGAElement.h:
        (SVGAElement):
        * svg/SVGTextContentElement.cpp:
        * svg/SVGTextContentElement.h:
        (SVGTextContentElement):

2012-05-15  Abhishek Arya  <inferno@chromium.org>

        Crash in Document::nodeChildrenWillBeRemoved.
        https://bugs.webkit.org/show_bug.cgi?id=85247

        Reviewed by Hajime Morita.

        Reverse ordering of commands to ref ptr the children set
        first before calling nodeChildrenWillBeRemoved, since it
        can fire mutation events.

        Test: fast/dom/HTMLObjectElement/beforeload-set-text-crash.xhtml

        * dom/ContainerNode.cpp:
        (WebCore::willRemoveChildren):

2012-05-15  Igor Oliveira  <igor.o@sisa.samsung.com>

        regression(111639): Issue with simultaneous CSS animations
        https://bugs.webkit.org/show_bug.cgi?id=85929

        Currently, previousTimeToNextService is just saving the previous CompositeAnimation::timeToNextService
        for AnimationControllerPrivate::updateAnimationTimerForRenderer, however CompositeAnimation::timeToNextService
        is also called and used by updateAnimationTimer. Make sure we save the existing timeToNextService from
        both places, updateAnimationTimerForRenderer and updateAnimationTimer.

        Reviewed by Dean Jackson.

        Test: animations/fill-mode-forwards.html

        * page/animation/AnimationController.cpp:
        (WebCore::AnimationControllerPrivate::AnimationControllerPrivate):
        (WebCore::AnimationControllerPrivate::updateAnimationTimerForRenderer):
        (WebCore::AnimationControllerPrivate::updateAnimationTimer):
        * page/animation/AnimationControllerPrivate.h:
        (AnimationControllerPrivate):

2012-05-15  Tien-Ren Chen  <trchen@chromium.org>

        [Chromium] CCTimer::isActive() is incorrect inside tick callback
        https://bugs.webkit.org/show_bug.cgi?id=86513

        This patch implements CCTimer::isActive() by clearing the task pointer
        when the timer fires.

        Reviewed by James Robinson.

        No new tests. Existing tests updated accordingly.

        * platform/graphics/chromium/cc/CCTimer.cpp:
        (WebCore::CCTimerTask::performTask):
        * rendering/RenderLayerBacking.cpp:

2012-05-15  Kentaro Hara  <haraken@chromium.org>

        Unreviewed. Rebaselined run-bindings-tests results.

        * bindings/scripts/test/JS/JSFloat64Array.cpp:
        (WebCore::JSFloat64Array::getOwnPropertySlot):
        (WebCore::JSFloat64Array::getOwnPropertyDescriptor):
        (WebCore::JSFloat64Array::put):
        * bindings/scripts/test/JS/JSTestEventTarget.cpp:
        (WebCore::JSTestEventTarget::getOwnPropertySlot):
        (WebCore::JSTestEventTarget::getOwnPropertyDescriptor):

2012-05-15  Shinya Kawanaka  <shinyak@chromium.org>

        Rename Node::shadowTreeRootNode() to Node::shadowRoot()
        https://bugs.webkit.org/show_bug.cgi?id=86449

        Reviewed by Darin Adler.

        Since Node::shadowTreeRootNode() returns always a ShadowRoot now, shadowRoot() is
        mure suitable than shadowTreeRootNode().

        This patch changes the method name.

        No new tests, no change in behavior.

        * WebCore.order:
        * dom/Node.cpp:
        (WebCore::Node::rendererIsEditable):
        (WebCore::Node::shadowAncestorNode):
        (WebCore::Node::shadowRoot):
        * dom/Node.h:
        (Node):
        * dom/NodeRenderingContext.cpp:
        (WebCore::NodeRenderingContext::NodeRenderingContext):
        * dom/Range.cpp:
        (WebCore::Range::shadowRoot):
        * dom/Range.h:
        (Range):
        * editing/Editor.cpp:
        (WebCore::Editor::nextVisibleRange):
        (WebCore::Editor::countMatchesForText):
        * editing/TextIterator.cpp:
        (WebCore::TextIterator::handleReplacedElement):
        * editing/htmlediting.cpp:
        (WebCore::indexForVisiblePosition):
        * html/shadow/ContentSelectorQuery.cpp:
        (WebCore::ContentSelectorQuery::matches):
        * html/shadow/HTMLContentElement.cpp:
        (WebCore::HTMLContentElement::parseAttribute):
        * html/shadow/InsertionPoint.cpp:
        (WebCore::InsertionPoint::detach):
        * page/EventHandler.cpp:
        (WebCore::instanceAssociatedWithShadowTreeElement):
        * svg/SVGElement.cpp:
        (WebCore::SVGElement::correspondingElement):
        (WebCore::collectInstancesForSVGElement):

2012-05-15  Nico Weber  <thakis@chromium.org>

        [chromium] Remove some unused gyp lines
        https://bugs.webkit.org/show_bug.cgi?id=86545

        Reviewed by Dirk Pranke.

        mac_framework_dirs adds directories to search for frameworks
        (similar to -I for includes), it doesn't add any frameworks.
        Having something that ends in .framewok in mac_framework_dirs
        doesn't make sense.

        No intended functionality change.

        * WebCore.gyp/WebCore.gyp:

2012-05-13  Philippe Normand  <pnormand@igalia.com>

        [GStreamer] build a static list of mime-types
        https://bugs.webkit.org/show_bug.cgi?id=86331

        Reviewed by Martin Robinson.

        Don't bother parsing the gstreamer typefind factories and doing
        ugly hacks around this. Instead build a static list and let our
        ::supportsType() method return MediaPlayer::MayBeSupported or
        MediaPlayer::IsSupported for them. Playback will still fail if a
        demuxer or decoder is missing for one of these mime-types but we
        will handle that case more properly soon by fixing bug 34085 and
        bug 34318.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:

2012-05-15  Greg Spencer  <gspencer@chromium.org>

        MHTML files should be loadable from all schemes considered local,
        not just file:

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

        Reviewed by Adam Barth.

        Current tests should assure that loading is still allowed locally.

        * loader/MainResourceLoader.cpp:
        (WebCore::MainResourceLoader::continueAfterContentPolicy):
        * loader/archive/mhtml/MHTMLArchive.cpp:
        (WebCore::MHTMLArchive::create):

2012-05-15  Fady Samuel  <fsamuel@chromium.org>

        [Chromium] Reset ScriptInstance in HTMLPlugInElement on WebPluginContainerImpl::setPlugin
        https://bugs.webkit.org/show_bug.cgi?id=86535

        Reviewed by Darin Fisher.
        
        When we swap out WebPluginImpls for the Browser Plugin, the HTMLPlugInElement continues
        to use a now invalid ScriptInstance, so we reset the ScriptInstance on WebPluginContainerImpl::setPlugin

        * html/HTMLPlugInElement.cpp:
        (WebCore::HTMLPlugInElement::resetInstance):
        (WebCore):
        * html/HTMLPlugInElement.h:
        (HTMLPlugInElement):

2012-05-15  Robert Hogan  <robert@webkit.org>

        Heap-use-after-free in WebCore::RenderBlock::layoutRunsAndFloats
        https://bugs.webkit.org/show_bug.cgi?id=86206

        Reviewed by Abhishek Arya.

        Revert https://trac.webkit.org/changeset/116438/. It caused three different regressions on 
        ClusterFuzz.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::updateFirstLetter):
        * rendering/RenderBlock.h:
        (RenderBlock):

2012-05-15  Beth Dakin  <bdakin@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=86549
        Page Scale + Tiled Drawing: Twitter sign in page content disappears 
        after typing into name and enabling password field
        -and corresponding-
        <rdar://problem/11415352>

        Reviewed by Oliver Hunt.

        The enormous rect we used to use would overflow in CA and do nothing 
        when there was any scale > 1 on the context. Instead, just call 
        setNeedsDisplay on each tile.
        * platform/graphics/ca/mac/TileCache.mm:
        (WebCore::TileCache::setNeedsDisplay):

2012-05-15  Andreas Kling  <kling@webkit.org>

        Pass Attribute by const reference as much as possible.
        <http://webkit.org/b/86487>

        Reviewed by Darin Adler.

        Switch to passing around "const Attribute&" instead of "Attribute*" wherever possible.
        This helps enforce the constness and non-nullity of these arguments at compile time.

        Also renamed 'attr' to 'attribute' in the touched code. Attr and Attribute are two
        different classes, so having "Attribute attr" just looks wrong.

        * bindings/js/ScriptEventListener.cpp:
        (WebCore::createAttributeEventListener):
        * bindings/js/ScriptEventListener.h:
        * bindings/v8/ScriptEventListener.cpp:
        (WebCore::createAttributeEventListener):
        * bindings/v8/ScriptEventListener.h:
        * dom/Attr.cpp:
        (WebCore::Attr::setPrefix):
        (WebCore::Attr::setValue):
        (WebCore::Attr::childrenChanged):
        (WebCore::Attr::style):
        (WebCore::Attr::elementAttribute):
        * dom/Attr.h:
        * dom/Element.cpp:
        (WebCore::Element::setAttributeInternal):
        (WebCore::Element::attributeChanged):
        (WebCore::Element::parserSetAttributes):
        (WebCore::Element::didAddAttribute):
        (WebCore::Element::didModifyAttribute):
        (WebCore::Element::didRemoveAttribute):
        * dom/Element.h:
        * dom/ElementAttributeData.cpp:
        (WebCore::ElementAttributeData::addAttribute):
        (WebCore::ElementAttributeData::setAttributes):
        (WebCore::ElementAttributeData::replaceAttribute):
        * dom/StyledElement.cpp:
        (WebCore::StyledElement::attributeChanged):
        (WebCore::StyledElement::parseAttribute):
        (WebCore::StyledElement::updateAttributeStyle):
        * dom/StyledElement.h:
        (WebCore::StyledElement::collectStyleForAttribute):
        * html/HTMLAnchorElement.cpp:
        (WebCore::HTMLAnchorElement::parseAttribute):
        * html/HTMLAnchorElement.h:
        * html/HTMLAppletElement.cpp:
        (WebCore::HTMLAppletElement::parseAttribute):
        * html/HTMLAppletElement.h:
        * html/HTMLAreaElement.cpp:
        (WebCore::HTMLAreaElement::parseAttribute):
        * html/HTMLAreaElement.h:
        * html/HTMLBRElement.cpp:
        (WebCore::HTMLBRElement::collectStyleForAttribute):
        * html/HTMLBRElement.h:
        * html/HTMLBaseElement.cpp:
        (WebCore::HTMLBaseElement::parseAttribute):
        * html/HTMLBaseElement.h:
        * html/HTMLBodyElement.cpp:
        (WebCore::HTMLBodyElement::collectStyleForAttribute):
        (WebCore::HTMLBodyElement::parseAttribute):
        * html/HTMLBodyElement.h:
        * html/HTMLButtonElement.cpp:
        (WebCore::HTMLButtonElement::parseAttribute):
        * html/HTMLButtonElement.h:
        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::parseAttribute):
        * html/HTMLCanvasElement.h:
        * html/HTMLDetailsElement.cpp:
        (WebCore::HTMLDetailsElement::parseAttribute):
        * html/HTMLDetailsElement.h:
        * html/HTMLDivElement.cpp:
        (WebCore::HTMLDivElement::collectStyleForAttribute):
        * html/HTMLDivElement.h:
        * html/HTMLElement.cpp:
        (WebCore::parseBorderWidthAttribute):
        (WebCore::HTMLElement::applyBorderAttributeToStyle):
        (WebCore::HTMLElement::mapLanguageAttributeToLocale):
        (WebCore::HTMLElement::collectStyleForAttribute):
        (WebCore::HTMLElement::parseAttribute):
        (WebCore::HTMLElement::applyAlignmentAttributeToStyle):
        (WebCore::HTMLElement::dirAttributeChanged):
        * html/HTMLElement.h:
        * html/HTMLEmbedElement.cpp:
        (WebCore::HTMLEmbedElement::collectStyleForAttribute):
        (WebCore::HTMLEmbedElement::parseAttribute):
        * html/HTMLEmbedElement.h:
        * html/HTMLFontElement.cpp:
        (WebCore::HTMLFontElement::collectStyleForAttribute):
        * html/HTMLFontElement.h:
        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLFormControlElement::parseAttribute):
        * html/HTMLFormControlElement.h:
        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::parseAttribute):
        * html/HTMLFormElement.h:
        * html/HTMLFrameElement.cpp:
        (WebCore::HTMLFrameElement::parseAttribute):
        * html/HTMLFrameElement.h:
        * html/HTMLFrameElementBase.cpp:
        (WebCore::HTMLFrameElementBase::parseAttribute):
        * html/HTMLFrameElementBase.h:
        (HTMLFrameElementBase):
        * html/HTMLFrameSetElement.cpp:
        (WebCore::HTMLFrameSetElement::collectStyleForAttribute):
        (WebCore::HTMLFrameSetElement::parseAttribute):
        * html/HTMLFrameSetElement.h:
        * html/HTMLHRElement.cpp:
        (WebCore::HTMLHRElement::collectStyleForAttribute):
        * html/HTMLHRElement.h:
        * html/HTMLIFrameElement.cpp:
        (WebCore::HTMLIFrameElement::collectStyleForAttribute):
        (WebCore::HTMLIFrameElement::parseAttribute):
        * html/HTMLIFrameElement.h:
        * html/HTMLImageElement.cpp:
        (WebCore::HTMLImageElement::collectStyleForAttribute):
        (WebCore::HTMLImageElement::parseAttribute):
        * html/HTMLImageElement.h:
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::updateType):
        (WebCore::HTMLInputElement::collectStyleForAttribute):
        (WebCore::HTMLInputElement::parseAttribute):
        (WebCore::HTMLInputElement::parseMaxLengthAttribute):
        * html/HTMLInputElement.h:
        * html/HTMLKeygenElement.cpp:
        (WebCore::HTMLKeygenElement::parseAttribute):
        * html/HTMLKeygenElement.h:
        * html/HTMLLIElement.cpp:
        (WebCore::HTMLLIElement::collectStyleForAttribute):
        (WebCore::HTMLLIElement::parseAttribute):
        * html/HTMLLIElement.h:
        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::parseAttribute):
        * html/HTMLLinkElement.h:
        * html/HTMLMapElement.cpp:
        (WebCore::HTMLMapElement::parseAttribute):
        * html/HTMLMapElement.h:
        * html/HTMLMarqueeElement.cpp:
        (WebCore::HTMLMarqueeElement::collectStyleForAttribute):
        * html/HTMLMarqueeElement.h:
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::parseAttribute):
        * html/HTMLMediaElement.h:
        * html/HTMLMetaElement.cpp:
        (WebCore::HTMLMetaElement::parseAttribute):
        * html/HTMLMetaElement.h:
        * html/HTMLMeterElement.cpp:
        (WebCore::HTMLMeterElement::parseAttribute):
        * html/HTMLMeterElement.h:
        * html/HTMLOListElement.cpp:
        (WebCore::HTMLOListElement::collectStyleForAttribute):
        (WebCore::HTMLOListElement::parseAttribute):
        * html/HTMLOListElement.h:
        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::collectStyleForAttribute):
        (WebCore::HTMLObjectElement::parseAttribute):
        * html/HTMLObjectElement.h:
        * html/HTMLOptGroupElement.cpp:
        (WebCore::HTMLOptGroupElement::parseAttribute):
        * html/HTMLOptGroupElement.h:
        * html/HTMLOptionElement.cpp:
        (WebCore::HTMLOptionElement::parseAttribute):
        * html/HTMLOptionElement.h:
        * html/HTMLOutputElement.cpp:
        (WebCore::HTMLOutputElement::parseAttribute):
        * html/HTMLOutputElement.h:
        * html/HTMLParagraphElement.cpp:
        (WebCore::HTMLParagraphElement::collectStyleForAttribute):
        * html/HTMLParagraphElement.h:
        * html/HTMLPlugInElement.cpp:
        (WebCore::HTMLPlugInElement::collectStyleForAttribute):
        * html/HTMLPlugInElement.h:
        * html/HTMLPreElement.cpp:
        (WebCore::HTMLPreElement::collectStyleForAttribute):
        * html/HTMLPreElement.h:
        * html/HTMLProgressElement.cpp:
        (WebCore::HTMLProgressElement::parseAttribute):
        * html/HTMLProgressElement.h:
        * html/HTMLScriptElement.cpp:
        (WebCore::HTMLScriptElement::parseAttribute):
        * html/HTMLScriptElement.h:
        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::parseAttribute):
        (WebCore::HTMLSelectElement::parseMultipleAttribute):
        * html/HTMLSelectElement.h:
        * html/HTMLStyleElement.cpp:
        (WebCore::HTMLStyleElement::parseAttribute):
        * html/HTMLStyleElement.h:
        * html/HTMLTableCaptionElement.cpp:
        (WebCore::HTMLTableCaptionElement::collectStyleForAttribute):
        * html/HTMLTableCaptionElement.h:
        * html/HTMLTableCellElement.cpp:
        (WebCore::HTMLTableCellElement::collectStyleForAttribute):
        (WebCore::HTMLTableCellElement::parseAttribute):
        * html/HTMLTableCellElement.h:
        * html/HTMLTableColElement.cpp:
        (WebCore::HTMLTableColElement::collectStyleForAttribute):
        (WebCore::HTMLTableColElement::parseAttribute):
        * html/HTMLTableColElement.h:
        * html/HTMLTableElement.cpp:
        (WebCore::HTMLTableElement::collectStyleForAttribute):
        (WebCore::HTMLTableElement::parseAttribute):
        * html/HTMLTableElement.h:
        * html/HTMLTablePartElement.cpp:
        (WebCore::HTMLTablePartElement::collectStyleForAttribute):
        * html/HTMLTablePartElement.h:
        * html/HTMLTextAreaElement.cpp:
        (WebCore::HTMLTextAreaElement::collectStyleForAttribute):
        (WebCore::HTMLTextAreaElement::parseAttribute):
        * html/HTMLTextAreaElement.h:
        * html/HTMLTextFormControlElement.cpp:
        (WebCore::HTMLTextFormControlElement::parseAttribute):
        * html/HTMLTextFormControlElement.h:
        * html/HTMLTrackElement.cpp:
        (WebCore::HTMLTrackElement::parseAttribute):
        * html/HTMLTrackElement.h:
        * html/HTMLUListElement.cpp:
        (WebCore::HTMLUListElement::collectStyleForAttribute):
        * html/HTMLUListElement.h:
        * html/HTMLVideoElement.cpp:
        (WebCore::HTMLVideoElement::collectStyleForAttribute):
        (WebCore::HTMLVideoElement::parseAttribute):
        * html/HTMLVideoElement.h:
        * html/shadow/HTMLContentElement.cpp:
        (WebCore::HTMLContentElement::parseAttribute):
        * html/shadow/HTMLContentElement.h:
        * mathml/MathMLElement.cpp:
        (WebCore::MathMLElement::collectStyleForAttribute):
        * mathml/MathMLElement.h:
        * svg/SVGAElement.cpp:
        (WebCore::SVGAElement::parseAttribute):
        * svg/SVGAElement.h:
        * svg/SVGAnimateMotionElement.cpp:
        (WebCore::SVGAnimateMotionElement::parseAttribute):
        * svg/SVGAnimateMotionElement.h:
        * svg/SVGAnimateTransformElement.cpp:
        (WebCore::SVGAnimateTransformElement::parseAttribute):
        * svg/SVGAnimateTransformElement.h:
        * svg/SVGAnimationElement.cpp:
        (WebCore::SVGAnimationElement::parseAttribute):
        * svg/SVGAnimationElement.h:
        * svg/SVGCircleElement.cpp:
        (WebCore::SVGCircleElement::parseAttribute):
        * svg/SVGCircleElement.h:
        * svg/SVGClipPathElement.cpp:
        (WebCore::SVGClipPathElement::parseAttribute):
        * svg/SVGClipPathElement.h:
        * svg/SVGComponentTransferFunctionElement.cpp:
        (WebCore::SVGComponentTransferFunctionElement::parseAttribute):
        * svg/SVGComponentTransferFunctionElement.h:
        * svg/SVGCursorElement.cpp:
        (WebCore::SVGCursorElement::parseAttribute):
        * svg/SVGCursorElement.h:
        * svg/SVGElement.cpp:
        (WebCore::SVGElement::reportAttributeParsingError):
        (WebCore::SVGElement::parseAttribute):
        (WebCore::SVGElement::attributeChanged):
        * svg/SVGElement.h:
        * svg/SVGEllipseElement.cpp:
        (WebCore::SVGEllipseElement::parseAttribute):
        * svg/SVGEllipseElement.h:
        * svg/SVGExternalResourcesRequired.cpp:
        (WebCore::SVGExternalResourcesRequired::parseAttribute):
        * svg/SVGExternalResourcesRequired.h:
        (SVGExternalResourcesRequired):
        * svg/SVGFEBlendElement.cpp:
        (WebCore::SVGFEBlendElement::parseAttribute):
        * svg/SVGFEBlendElement.h:
        * svg/SVGFEColorMatrixElement.cpp:
        (WebCore::SVGFEColorMatrixElement::parseAttribute):
        * svg/SVGFEColorMatrixElement.h:
        * svg/SVGFEComponentTransferElement.cpp:
        (WebCore::SVGFEComponentTransferElement::parseAttribute):
        * svg/SVGFEComponentTransferElement.h:
        * svg/SVGFECompositeElement.cpp:
        (WebCore::SVGFECompositeElement::parseAttribute):
        * svg/SVGFECompositeElement.h:
        * svg/SVGFEConvolveMatrixElement.cpp:
        (WebCore::SVGFEConvolveMatrixElement::parseAttribute):
        * svg/SVGFEConvolveMatrixElement.h:
        * svg/SVGFEDiffuseLightingElement.cpp:
        (WebCore::SVGFEDiffuseLightingElement::parseAttribute):
        * svg/SVGFEDiffuseLightingElement.h:
        * svg/SVGFEDisplacementMapElement.cpp:
        (WebCore::SVGFEDisplacementMapElement::parseAttribute):
        * svg/SVGFEDisplacementMapElement.h:
        * svg/SVGFEDropShadowElement.cpp:
        (WebCore::SVGFEDropShadowElement::parseAttribute):
        * svg/SVGFEDropShadowElement.h:
        * svg/SVGFEGaussianBlurElement.cpp:
        (WebCore::SVGFEGaussianBlurElement::parseAttribute):
        * svg/SVGFEGaussianBlurElement.h:
        * svg/SVGFEImageElement.cpp:
        (WebCore::SVGFEImageElement::parseAttribute):
        * svg/SVGFEImageElement.h:
        * svg/SVGFELightElement.cpp:
        (WebCore::SVGFELightElement::parseAttribute):
        * svg/SVGFELightElement.h:
        * svg/SVGFEMergeNodeElement.cpp:
        (WebCore::SVGFEMergeNodeElement::parseAttribute):
        * svg/SVGFEMergeNodeElement.h:
        * svg/SVGFEMorphologyElement.cpp:
        (WebCore::SVGFEMorphologyElement::parseAttribute):
        * svg/SVGFEMorphologyElement.h:
        * svg/SVGFEOffsetElement.cpp:
        (WebCore::SVGFEOffsetElement::parseAttribute):
        * svg/SVGFEOffsetElement.h:
        * svg/SVGFESpecularLightingElement.cpp:
        (WebCore::SVGFESpecularLightingElement::parseAttribute):
        * svg/SVGFESpecularLightingElement.h:
        * svg/SVGFETileElement.cpp:
        (WebCore::SVGFETileElement::parseAttribute):
        * svg/SVGFETileElement.h:
        * svg/SVGFETurbulenceElement.cpp:
        (WebCore::SVGFETurbulenceElement::parseAttribute):
        * svg/SVGFETurbulenceElement.h:
        * svg/SVGFilterElement.cpp:
        (WebCore::SVGFilterElement::parseAttribute):
        * svg/SVGFilterElement.h:
        * svg/SVGFilterPrimitiveStandardAttributes.cpp:
        (WebCore::SVGFilterPrimitiveStandardAttributes::parseAttribute):
        * svg/SVGFilterPrimitiveStandardAttributes.h:
        (SVGFilterPrimitiveStandardAttributes):
        * svg/SVGFitToViewBox.cpp:
        (WebCore::SVGFitToViewBox::parseAttribute):
        * svg/SVGFitToViewBox.h:
        (SVGFitToViewBox):
        * svg/SVGFontFaceElement.cpp:
        (WebCore::SVGFontFaceElement::parseAttribute):
        * svg/SVGFontFaceElement.h:
        * svg/SVGFontFaceUriElement.cpp:
        (WebCore::SVGFontFaceUriElement::parseAttribute):
        * svg/SVGFontFaceUriElement.h:
        * svg/SVGForeignObjectElement.cpp:
        (WebCore::SVGForeignObjectElement::parseAttribute):
        * svg/SVGForeignObjectElement.h:
        * svg/SVGGElement.cpp:
        (WebCore::SVGGElement::parseAttribute):
        * svg/SVGGElement.h:
        * svg/SVGGlyphElement.cpp:
        (WebCore::SVGGlyphElement::parseAttribute):
        * svg/SVGGlyphElement.h:
        * svg/SVGGlyphRefElement.cpp:
        (WebCore::SVGGlyphRefElement::parseAttribute):
        * svg/SVGGlyphRefElement.h:
        * svg/SVGGradientElement.cpp:
        (WebCore::SVGGradientElement::parseAttribute):
        * svg/SVGGradientElement.h:
        * svg/SVGImageElement.cpp:
        (WebCore::SVGImageElement::collectStyleForAttribute):
        (WebCore::SVGImageElement::parseAttribute):
        * svg/SVGImageElement.h:
        * svg/SVGImageLoader.cpp:
        (WebCore::SVGImageLoader::sourceURI):
        * svg/SVGLangSpace.cpp:
        (WebCore::SVGLangSpace::parseAttribute):
        * svg/SVGLangSpace.h:
        (SVGLangSpace):
        * svg/SVGLineElement.cpp:
        (WebCore::SVGLineElement::parseAttribute):
        * svg/SVGLineElement.h:
        * svg/SVGLinearGradientElement.cpp:
        (WebCore::SVGLinearGradientElement::parseAttribute):
        * svg/SVGLinearGradientElement.h:
        * svg/SVGMPathElement.cpp:
        (WebCore::SVGMPathElement::parseAttribute):
        * svg/SVGMPathElement.h:
        * svg/SVGMarkerElement.cpp:
        (WebCore::SVGMarkerElement::parseAttribute):
        * svg/SVGMarkerElement.h:
        * svg/SVGMaskElement.cpp:
        (WebCore::SVGMaskElement::parseAttribute):
        * svg/SVGMaskElement.h:
        * svg/SVGPathElement.cpp:
        (WebCore::SVGPathElement::parseAttribute):
        * svg/SVGPathElement.h:
        * svg/SVGPatternElement.cpp:
        (WebCore::SVGPatternElement::parseAttribute):
        * svg/SVGPatternElement.h:
        * svg/SVGPolyElement.cpp:
        (WebCore::SVGPolyElement::parseAttribute):
        * svg/SVGPolyElement.h:
        * svg/SVGRadialGradientElement.cpp:
        (WebCore::SVGRadialGradientElement::parseAttribute):
        * svg/SVGRadialGradientElement.h:
        * svg/SVGRectElement.cpp:
        (WebCore::SVGRectElement::parseAttribute):
        * svg/SVGRectElement.h:
        * svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::parseAttribute):
        * svg/SVGSVGElement.h:
        * svg/SVGScriptElement.cpp:
        (WebCore::SVGScriptElement::parseAttribute):
        * svg/SVGScriptElement.h:
        * svg/SVGStopElement.cpp:
        (WebCore::SVGStopElement::parseAttribute):
        * svg/SVGStopElement.h:
        * svg/SVGStyleElement.cpp:
        (WebCore::SVGStyleElement::parseAttribute):
        * svg/SVGStyleElement.h:
        * svg/SVGStyledElement.cpp:
        (WebCore::SVGStyledElement::collectStyleForAttribute):
        (WebCore::SVGStyledElement::parseAttribute):
        * svg/SVGStyledElement.h:
        * svg/SVGStyledTransformableElement.cpp:
        (WebCore::SVGStyledTransformableElement::parseAttribute):
        * svg/SVGStyledTransformableElement.h:
        * svg/SVGSymbolElement.cpp:
        (WebCore::SVGSymbolElement::parseAttribute):
        * svg/SVGSymbolElement.h:
        * svg/SVGTRefElement.cpp:
        (WebCore::SVGTRefElement::parseAttribute):
        * svg/SVGTRefElement.h:
        * svg/SVGTests.cpp:
        (WebCore::SVGTests::parseAttribute):
        * svg/SVGTests.h:
        (SVGTests):
        * svg/SVGTextContentElement.cpp:
        (WebCore::SVGTextContentElement::collectStyleForAttribute):
        (WebCore::SVGTextContentElement::parseAttribute):
        * svg/SVGTextContentElement.h:
        * svg/SVGTextElement.cpp:
        (WebCore::SVGTextElement::parseAttribute):
        * svg/SVGTextElement.h:
        * svg/SVGTextPathElement.cpp:
        (WebCore::SVGTextPathElement::parseAttribute):
        * svg/SVGTextPathElement.h:
        * svg/SVGTextPositioningElement.cpp:
        (WebCore::SVGTextPositioningElement::parseAttribute):
        * svg/SVGTextPositioningElement.h:
        * svg/SVGURIReference.cpp:
        (WebCore::SVGURIReference::parseAttribute):
        * svg/SVGURIReference.h:
        (SVGURIReference):
        * svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::parseAttribute):
        * svg/SVGUseElement.h:
        * svg/SVGViewElement.cpp:
        (WebCore::SVGViewElement::parseAttribute):
        * svg/SVGViewElement.h:
        * svg/SVGZoomAndPan.cpp:
        (WebCore::SVGZoomAndPan::parseAttribute):
        * svg/SVGZoomAndPan.h:
        (SVGZoomAndPan):
        * svg/animation/SVGSMILElement.cpp:
        (WebCore::SVGSMILElement::parseAttribute):
        * svg/animation/SVGSMILElement.h:

2012-05-15  Kenneth Russell  <kbr@google.com>

        Assertion failure running Mozilla's WebGL performance regression tests
        https://bugs.webkit.org/show_bug.cgi?id=85942

        Reviewed by Stephen White.

        Fixed incorrect assumptions about source formats and buffer sizes
        when uploading to floating-point textures. Added code paths
        supporting the necessary conversions.

        Tests have been added to the WebGL conformance suite which cover
        these new code paths; they verify uploads of HTMLCanvasElement,
        HTMLImageElement, HTMLVideoElement, and ImageData to
        floating-point textures. However, because floating-point texture
        support is optional, and generally only supported on bots which
        run with real GPUs and not in virtual machines, it isn't feasible
        to incorporate these tests as layout tests.

        Ran the new WebGL conformance tests in Chromium on Linux; all
        pass.

        * platform/graphics/GraphicsContext3D.cpp:
        (WebCore::GraphicsContext3D::extractImageData):
        Properly compute size of destination buffer.

        (WebCore):
        Add pack/unpack routines for converting RGBA8/BGRA8 to floating point.

        (WebCore::doFloatingPointPacking):
        Support RGBA8 and BGRA8 source formats.

        (WebCore::isFloatingPointSource):
        Factored out logic for assertions.

        (WebCore::GraphicsContext3D::packPixels):
        Generalized assertions and logic.

        * platform/graphics/cairo/GraphicsContext3DCairo.cpp:
        (WebCore::GraphicsContext3D::getImageData):
        Properly compute size of destination buffer.

        * platform/graphics/cg/GraphicsContext3DCG.cpp:
        (WebCore::GraphicsContext3D::getImageData):
        Properly compute size of destination buffer.

        * platform/graphics/qt/GraphicsContext3DQt.cpp:
        (WebCore::GraphicsContext3D::getImageData):
        Properly compute size of destination buffer.

        * platform/graphics/skia/GraphicsContext3DSkia.cpp:
        (WebCore::GraphicsContext3D::getImageData):
        Properly compute size of destination buffer.

2012-05-15  James Robinson  <jamesr@chromium.org>

        [chromium] Chromium port never sets USE(CG) so code behind it is dead
        https://bugs.webkit.org/show_bug.cgi?id=86537

        Reviewed by Adrienne Walker.

        Deletes code behind USE(CG) in chromium-specific code and removes unneeded USE(SKIA) guards.

        * platform/chromium/DragImageRef.h:
        (WebCore):
        * platform/chromium/MIMETypeRegistryChromium.cpp:
        (WebCore::MIMETypeRegistry::isSupportedImageMIMETypeForEncoding):
        * platform/chromium/ScrollbarThemeChromiumMac.mm:
        (WebCore::ScrollbarThemeChromiumMac::paint):
        * platform/chromium/ThemeChromiumMac.mm:
        (WebCore::paintStepper):
        * platform/graphics/chromium/PlatformImage.cpp:
        (WebCore::PlatformImage::updateFromImage):

2012-05-15  Keyar Hood  <keyar@chromium.org>

        Skia does not respect a specified InterpolationQuality
        https://bugs.webkit.org/show_bug.cgi?id=86249

        Reviewed by Stephen White.

        The added functionality is not exposed to higher layers of webkit.
        Tests will be added that will exercise these changes when bug 82804 is 
        fixed.

        * platform/graphics/GraphicsContext.cpp:
        (WebCore::GraphicsContext::drawImage):
        (WebCore::GraphicsContext::drawImageBuffer):
        Code to have the useLowQualityScale cause the InterpolationQuality be
        be set to low for Chromium but remain as none for other platforms.
        * platform/graphics/skia/ImageSkia.cpp:
        (WebCore::limitResamplingMode): Added
        (WebCore):
        (WebCore::paintSkBitmap):
        (WebCore::Image::drawPattern):
        We now limit the resampling choice based on what InterpolationQuality
        is set as. InterpolationNone restricts resampling to RESAMPLE_NONE,
        InterpolationLow and InterpolationMedium restricts resampling to
        RESAMPLE_LINEAR. InterpolationHigh and InterpolationDefault do not
        change the resampling.
        
        Furthermore, the choice on how to set the filter bitmap flag in
        paintSkBitmap was made to be consistent with that in
        Image::drawPattern.


2012-05-15  Jeffrey Pfau  <jpfau@apple.com>

        ImageDocuments erroneously trigger beforeload events for the main resource
        https://bugs.webkit.org/show_bug.cgi?id=86543
        <rdar://problem/11309013>

        Reviewed by Brady Eidson.

        No new tests; testing framework doesn't allow for testing ImageDocuments with injected JavaScript.

        * loader/ImageLoader.cpp:
        (WebCore::ImageLoader::updateFromElement):

2012-05-15  Dirk Pranke  <dpranke@chromium.org>

        [chromium] ScrollElasticityController.mm doesn't compile with the 10.6 SDK on mac
        https://bugs.webkit.org/show_bug.cgi?id=86544

        Reviewed by Anders Carlsson.

        This is a build fix for now until we can figure out what a
        better way to approach this is.

        * platform/mac/ScrollElasticityController.mm:
        (WebCore):

2012-05-15  Nate Chapin  <japhet@chromium.org>

        MainResourceLoader::load() always returns true, so make it return
        void and delete the related dead code.
        https://bugs.webkit.org/show_bug.cgi?id=86413

        Reviewed by Alexey Proskuryakov.

        No new tests, cleanup only.

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::startLoadingMainResource):
        * loader/MainResourceLoader.cpp:
        (WebCore::MainResourceLoader::load):
        * loader/MainResourceLoader.h:
        (MainResourceLoader):

2012-05-15  Ian Vollick  <vollick@chromium.org>

        [chromium] Ensure animations get ticked at least once when added.
        https://bugs.webkit.org/show_bug.cgi?id=86013

        Reviewed by James Robinson.

        Tested in
          CCLayerTreeHostTestTickAnimationWhileBackgrounded.runSingleThreaded
          CCLayerTreeHostTestAddAnimationWithTimingFunction.runSingleThreaded
          CCLayerTreeHostTestSynchronizeAnimationStartTimes.runSingleThreaded
          CCLayerTreeHostTestAnimationFinishedEvents.runSingleThreaded

        * platform/graphics/chromium/LayerChromium.cpp:
        (WebCore::LayerChromium::addAnimation):
        * platform/graphics/chromium/cc/CCLayerTreeHost.cpp:
        (WebCore::CCLayerTreeHost::finishCommitOnImplThread):
        (WebCore::CCLayerTreeHost::didAddAnimation):
        (WebCore):
        (WebCore::CCLayerTreeHost::didBecomeInvisibleOnImplThread):
        * platform/graphics/chromium/cc/CCLayerTreeHost.h:
        (CCLayerTreeHost):
        * platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:
        (WebCore::CCLayerTreeHostImpl::CCLayerTreeHostImpl):
        * platform/graphics/chromium/cc/CCProxy.h:
        (CCProxy):
        * platform/graphics/chromium/cc/CCSingleThreadProxy.cpp:
        (CCSingleThreadProxyAnimationTimer):
        (WebCore::CCSingleThreadProxyAnimationTimer::create):
        (WebCore::CCSingleThreadProxyAnimationTimer::CCSingleThreadProxyAnimationTimer):
        (WebCore):
        (WebCore::CCSingleThreadProxy::CCSingleThreadProxy):
        (WebCore::CCSingleThreadProxy::didAddAnimation):
        (WebCore::CCSingleThreadProxy::doComposite):
        * platform/graphics/chromium/cc/CCSingleThreadProxy.h:
        (WebCore):
        * platform/graphics/chromium/cc/CCThreadProxy.h:

2012-05-15  Alexandre Elias  <aelias@google.com>

        [chromium] Fix unsafe viewport tag dispatch
        https://bugs.webkit.org/show_bug.cgi?id=80554

        Reviewed by Adam Barth.

        In some uncommon situations (such as window.open() new tab on
        Android), dispatchViewportPropertiesDidChange may early-return without
        setting the page scale because the window size is not yet
        available from the embedder.  At that point, the previous behavior was
        to call it again in layoutUpdated(), but this is unsafe since it
        leaves a pending needsLayout.

        I moved the dispatch call into WebViewImpl::didChangeContentsSize and
        WebViewImpl::resize() instead -- these represent more explicitly the
        situations where the inputs to the viewport tag calculation change.  I
        removed the other dispatch call from setFrameRect as it's now
        redundant.

        Covered by FixedLayoutInitializeAtMinimumPageScale test introduced
        in http://webk.it/82949 (an assertion will fire there without
        this fix).

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

2012-05-15  Jer Noble  <jer.noble@apple.com>

        r117147 causes a null-deref crash in DOMImplementation::createDocument()
        https://bugs.webkit.org/show_bug.cgi?id=86532

        Reviewed by James Robinson.

        No new tests, but fixes many crashing tests.

        Protect against the possibility of being passed a NULL frame in
        DOMImplementation::createDocument().

        * dom/DOMImplementation.cpp:
        (WebCore::DOMImplementation::createDocument):

2012-05-15  Julien Chaffraix  <jchaffraix@webkit.org>

        Use posZOrderList() / negZOrderList() everywhere to avoid querying dirtied lists
        https://bugs.webkit.org/show_bug.cgi?id=86416

        Reviewed by Simon Fraser.

        Covered by existing tests that are not ASSERTing after this change.

        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateGraphicsLayerConfiguration):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::update3DTransformedDescendantStatus):
        Added a call to updateZOrderLists() to the previous sites as nothing guarantees
        that we have recomputed our z-order lists.

        (WebCore::RenderLayer::paintLayerContents):
        (WebCore::RenderLayer::hitTestLayer):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::needsContentsCompositingLayer):
        Converted those functions to use the safe getters.

        * rendering/RenderLayer.h:
        (WebCore::RenderLayer::hasNegativeZOrderList):
        Newly added funtion to return if we have a negative z-order list.

2012-05-15  Abhishek Arya  <inferno@chromium.org>

        Crash due shadow tree parent confusion in SVG.
        https://bugs.webkit.org/show_bug.cgi?id=84248

        Reviewed by Nikolas Zimmermann.

        Test: svg/foreignObject/viewport-foreignobject-crash.html

        When we try to make a decision on whether we need an outer
        SVGRoot container, we detect if we are in shadow tree or not.
        We also need to make sure that our parentOrHostElement is also
        an svg element. 

        * svg/SVGElement.cpp:
        (WebCore::SVGElement::isOutermostSVGSVGElement):

2012-05-15  Lauro Neto  <lauro.neto@openbossa.org>

        [File API] URL methods handling null arguments
        https://bugs.webkit.org/show_bug.cgi?id=69693

        Reviewed by Adam Barth.

        Per the latest editor's draft of the File API:
        http://dev.w3.org/2006/webapi/FileAPI/#dfn-createObjectURL

        Use null instead of undefined as return value when a
        null blob is given to URL.createObjectURL.

        Test: fast/files/url-null.html

        * html/DOMURL.idl:

2012-05-15  Jer Noble  <jer.noble@apple.com>

        Unreviewed build fix [Qt].

        Protect the definition of DOMImplementationSupportsTypeClient class with
        #if ENABLE(VIDEO) so as not to cause compilation errors on ports with
        VIDEO disabled.

        * dom/DOMImplementation.cpp:

2012-05-14  Jer Noble  <jer.noble@apple.com>

        Site-specific hack: Disclaim WebM as a supported type on Mac for YouTube.
        https://bugs.webkit.org/show_bug.cgi?id=86409

        Reviewed by Darin Adler.

        No new tests; site specific hack.

        Add a Mac-only site-specific hack which disclaims both video/webm and video/x-flv
        as supported types when the media element's document has a host of youtube.com.

        Add a new, pure-virtual prototype class for use by MediaPlayer::supportsType:
        * platform/graphics/MediaPlayer.h:
        (MediaPlayerSupportsTypeClient):
        (WebCore::MediaPlayerSupportsTypeClient::~MediaPlayerSupportsTypeClient):
        (WebCore::MediaPlayerSupportsTypeClient::mediaPlayerNeedsSiteSpecificHacks):
        (WebCore::MediaPlayerSupportsTypeClient::mediaPlayerDocumentHost):

        Use these new client calls to determine whether to apply the site-specific
        hack:
        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::supportsType):

        Add this prototype class as a superclass of HTMLMediaElement.  Pass in the
        HTMLMediaElement's this pointer when calling MediaPlayer::supportsType():
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::canPlayType):
        (WebCore::HTMLMediaElement::selectNextSourceChild):
        (WebCore::HTMLMediaElement::mediaPlayerNeedsSiteSpecificHacks):
        (WebCore::HTMLMediaElement::mediaPlayerDocumentHost):
        * html/HTMLMediaElement.h:

        As is HTMLMediaElement, a MediaPlayerSupportsTypeClient class is needed. Add a
        new class DOMImplementationSupportsTypeClient, an instance of which will be 
        passed to MediaPlayer::supportsType():
        * dom/DOMImplementation.cpp:
        (DOMImplementationSupportsTypeClient):
        (WebCore::DOMImplementationSupportsTypeClient::DOMImplementationSupportsTypeClient):
        (WebCore::DOMImplementation::createDocument):
        (WebCore::DOMImplementation::mediaPlayerNeedsSiteSpecificHacks):
        (WebCore::DOMImplementation::mediaPlayerDocumentHost):
        * dom/DOMImplementation.h:

2012-05-15  Anders Carlsson  <andersca@apple.com>

        Use unaccelerated scrolling deltas when rubber-banding
        https://bugs.webkit.org/show_bug.cgi?id=86503
        <rdar://problem/11378742>

        Reviewed by Sam Weinig.

        * WebCore.exp.in:
        * platform/PlatformWheelEvent.h:
        (WebCore::PlatformWheelEvent::PlatformWheelEvent):
        (PlatformWheelEvent):
        (WebCore::PlatformWheelEvent::scrollCount):
        (WebCore::PlatformWheelEvent::unacceleratedScrollingDeltaX):
        (WebCore::PlatformWheelEvent::unacceleratedScrollingDeltaY):
        Add scroll count and unaccelerated scrolling deltas.

        * platform/mac/ScrollElasticityController.mm:
        (WebCore::elasticDeltaForTimeDelta):
        (WebCore::elasticDeltaForReboundDelta):
        (WebCore::reboundDeltaForElasticDelta):
        Call the new WKSI functions.

        (WebCore::ScrollElasticityController::handleWheelEvent):
        Use the unaccelerated scrolling deltas when needed.

        * platform/mac/WebCoreSystemInterface.h:
        * platform/mac/WebCoreSystemInterface.mm:
        Add new WKSI functions.

2012-05-15  Terry Anderson  <tdanderson@chromium.org>

        [chromium] Compute the best target node on a GestureTap event
        https://bugs.webkit.org/show_bug.cgi?id=85101

        Reviewed by Adam Barth.

        Using the tests in the touchadjustment/ directory.

        * WebCore.gypi:
        Include TouchAdjustment.* files.
        * page/TouchAdjustment.cpp:
        (WebCore::TouchAdjustment::zoomableIntersectionQuotient):
        (WebCore::TouchAdjustment::findNodeWithLowestDistanceMetric):
        No longer using the INFINITY constant due to problems with compiling
        on chromium win.

2012-05-15  Chris Rogers  <crogers@google.com>

        Add AudioSummingJunction class to handle fan-in (abstracted from AudioNodeInput)
        https://bugs.webkit.org/show_bug.cgi?id=86396

        Reviewed by Kenneth Russell.

        No new tests.  Existing layout tests already extensively test summing.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        Add AudioSummingJunction files to makefiles.

        * Modules/webaudio/AudioContext.cpp:
        * Modules/webaudio/AudioContext.h:
        (WebCore::AudioContext::handlePreRenderTasks):
        (WebCore::AudioContext::handlePostRenderTasks):
        (WebCore::AudioContext::deleteMarkedNodes):
        (WebCore::AudioContext::markSummingJunctionDirty):
        (WebCore::AudioContext::removeMarkedSummingJunction):
        (WebCore::AudioContext::handleDirtyAudioSummingJunctions):
        Simple munge from AudioNodeInput -> AudioSummingJunction

        * Modules/webaudio/AudioNodeInput.cpp:
        * Modules/webaudio/AudioNodeInput.h:
        (WebCore::AudioNodeInput::AudioNodeInput):
        (WebCore::AudioNodeInput::didUpdate):
        Remove logic from AudioNodeInput which now is being moved to AudioSummingJunction.

        * Modules/webaudio/AudioSummingJunction.cpp: Added.
        * Modules/webaudio/AudioSummingJunction.h: Added.
        (WebCore::AudioSummingJunction::AudioSummingJunction):
        (WebCore::AudioSummingJunction::~AudioSummingJunction):
        (WebCore::AudioSummingJunction::changedOutputs):
        (WebCore::AudioSummingJunction::updateRenderingState):
        (WebCore::AudioSummingJunction::context):
        (WebCore::AudioSummingJunction::numberOfRenderingConnections):
        (WebCore::AudioSummingJunction::renderingOutput):
        (WebCore::AudioSummingJunction::isConnected):
        (WebCore::AudioSummingJunction::numberOfConnections):
        Add AudioSummingJunction which is an abstraction to manage/track the connections from AudioNodeOutputs
        representing the fan-in points for unity gain summing junctions.

        * WebCore.gypi:
        * WebCore.xcodeproj/project.pbxproj:
        Add AudioSummingJunction files to makefiles.

2012-05-15  Dan Bernstein  <mitz@apple.com>

        Ruby annotation is incorrectly identified as a paragraph boundary
        https://bugs.webkit.org/show_bug.cgi?id=86507

        Reviewed by Darin Adler.

        Test: editing/selection/paragraph-with-ruby.html

        * editing/htmlediting.cpp:
        (WebCore::isBlock): Changed to return false for ruby text.

2012-05-15  Philippe Normand  <pnormand@igalia.com>

        [GTK] Un-used GStreamer linker options
        https://bugs.webkit.org/show_bug.cgi?id=86407

        Reviewed by Martin Robinson.

        * GNUmakefile.am: Remove no-longer used webcore_libadd variable.

2012-05-15  Beth Dakin  <bdakin@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=86506
        REGRESSION (tiled drawing): No scrollbar while page is loading
        -and corresponding
        <rdar://problem/11444589>

        Reviewed by Anders Carlsson.

        We have always had a mechanism in place to suppress painting overlay 
        scrollbars while the page is loading. However, that mechaism is 
        overriden if the page has been scrolled. It should be, anyway. It was 
        not being overriden when the scrolling was handled as a wheel event by 
        the scrolling tree. This patch takes advantage of the fact that 
        ScrollingTree::handleWheelEvent() already calls back to the main 
        thread for handleWheelEventPhase() and just patches 
        handleWheelEventPhase to mark m_haveScrolledSincePageLoad as true.
        * platform/mac/ScrollAnimatorMac.mm:
        (WebCore::ScrollAnimatorMac::handleWheelEventPhase):

2012-05-15  Jessie Berlin  <jberlin@apple.com>

        WKContextSetCacheModel(contextref, kWKCacheModelDocumentViewer) doesn't prevent pages from
        going into the PageCache.
        https://bugs.webkit.org/show_bug.cgi?id=85891

        Reviewed by Brady Eidson.

        Do not claim that it is possible to cache a page when the page cache has a capacity of 0.

        Covered by the modified DOMWindowExtensionNoCache WK2 API test.

        * history/PageCache.cpp:
        (WebCore::PageCache::canCache):
        Check m_capacity.
        * history/PageCache.h:

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::commitProvisionalLoad):
        canCache is no longer static on PageCache.

2012-05-15  James Robinson  <jamesr@chromium.org>

        Unreviewed, rolling out r116811.
        http://trac.webkit.org/changeset/116811
        https://bugs.webkit.org/show_bug.cgi?id=86257

        Introduced layering violation

        * WebCore.gypi:

2012-05-15  Darin Adler  <darin@apple.com>

        Font copy constructor unnecessarily recalculates transcoding
        https://bugs.webkit.org/show_bug.cgi?id=86490

        Reviewed by Dan Bernstein.

        * platform/graphics/Font.cpp:
        (WebCore::Font::Font): Copy m_needsTranscoding instead of recomputing it.

2012-05-15  Andreas Kling  <kling@webkit.org>

        Deep copy PluginModuleInfo before passing across thread boundary.
        <http://webkit.org/b/86491>
        <rdar://problem/11451178>

        Reviewed by Anders Carlsson.

        * plugins/PluginData.h:
        (MimeClassInfo):
        (WebCore::MimeClassInfo::isolatedCopy):
        (PluginInfo):
        (WebCore::PluginInfo::isolatedCopy):

2012-05-15  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r116712.
        http://trac.webkit.org/changeset/116712
        https://bugs.webkit.org/show_bug.cgi?id=86484

        This patch is causing crashes in Chromium Canary builds
        (Requested by pilgrim_google__ on #webkit).

        * storage/StorageArea.h:
        (StorageArea):
        * storage/StorageAreaImpl.cpp:
        (WebCore::StorageAreaImpl::disabledByPrivateBrowsingInFrame):
        (WebCore::StorageAreaImpl::setItem):
        (WebCore::StorageAreaImpl::removeItem):
        (WebCore::StorageAreaImpl::clear):
        * storage/StorageAreaImpl.h:
        (StorageAreaImpl):

2012-05-15  Darin Adler  <darin@apple.com>

        Optimize save/restore with no drawing operations between them (shows up on some canvas benchmarks)
        https://bugs.webkit.org/show_bug.cgi?id=86448

        Reviewed by Simon Fraser.

        Since canvas programmers sometimes end up doing extra save/restore pairs with no actual drawing
        in between, optimize that case by not realizing saves until we have to. This is doubly important
        because saves are costly.

        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::CanvasRenderingContext2D): Initialize m_unrealizedSaveCount.
        (WebCore::CanvasRenderingContext2D::isAccelerated): Improve performance by calling the
        drawingContext function only once.
        (WebCore::CanvasRenderingContext2D::reset): Set m_unrealizedSaveCount to 0.
        (WebCore::CanvasRenderingContext2D::realizeSavesLoop): Added. Replaces the save function as the
        function that actually pushes context onto the state stack.
        (WebCore::CanvasRenderingContext2D::restore): Added code to do an early return if we can do the
        restore just by decrementing the unrealized save count.
        (WebCore::CanvasRenderingContext2D::setStrokeStyle): Added calls to realizeSaves and replaced
        calls to state with calls to modifiableState.
        (WebCore::CanvasRenderingContext2D::setFillStyle): Ditto.
        (WebCore::CanvasRenderingContext2D::setLineWidth): Ditto. Also added an early out for cases where
        the line width is not changing.
        (WebCore::CanvasRenderingContext2D::setLineCap): Ditto.
        (WebCore::CanvasRenderingContext2D::setLineJoin): Ditto.
        (WebCore::CanvasRenderingContext2D::setMiterLimit): Ditto.
        (WebCore::CanvasRenderingContext2D::setShadowOffsetX): Ditto.
        (WebCore::CanvasRenderingContext2D::setShadowOffsetY): Ditto.
        (WebCore::CanvasRenderingContext2D::setShadowBlur): Ditto.
        (WebCore::CanvasRenderingContext2D::setShadowColor): Ditto.
        (WebCore::CanvasRenderingContext2D::setWebkitLineDash): Ditto.
        (WebCore::CanvasRenderingContext2D::setWebkitLineDashOffset): Ditto.
        (WebCore::CanvasRenderingContext2D::setGlobalAlpha): Ditto.
        (WebCore::CanvasRenderingContext2D::setGlobalCompositeOperation): Ditto.
        (WebCore::CanvasRenderingContext2D::scale): Ditto.
        (WebCore::CanvasRenderingContext2D::rotate): Ditto.
        (WebCore::CanvasRenderingContext2D::translate): Ditto.
        (WebCore::CanvasRenderingContext2D::transform): Ditto.
        (WebCore::CanvasRenderingContext2D::setTransform): Ditto.
        (WebCore::CanvasRenderingContext2D::setStrokeColor): Ditto.
        (WebCore::CanvasRenderingContext2D::setFillColor): Ditto.
        (WebCore::CanvasRenderingContext2D::clip): Ditto.
        (WebCore::CanvasRenderingContext2D::clearRect): Changed implementation so it does not save
        the graphics context in the common case where shadows, global alpha, and global compositing
        operators do not interfer with the function's operation. This allowed us to get rid of the
        setAllAttributesToDefault function, which was used nowhere else.
        (WebCore::CanvasRenderingContext2D::setShadow): Added a new common bottleneck and made all
        the setShadow functions call it.
        (WebCore::CanvasRenderingContext2D::clearShadow): Changed to call the new setShadow.
        (WebCore::CanvasRenderingContext2D::setFont): Renamed tempDecl to the more friendly
        parsedStyle. Changed code structure so the CSS parser is deleted right after parsing is
        done. Used string concatenation instead of more expensive string append. Added calls to
        realizeSaves and modifiableState.
        (WebCore::CanvasRenderingContext2D::setTextAlign): Added calls to realizeSaves and replaced
        calls to state with calls to modifiableState. Also added an early out for cases where the
        alignment is not changing.
        (WebCore::CanvasRenderingContext2D::setTextBaseline): Ditto.

        * html/canvas/CanvasRenderingContext2D.h: Made save an inline function that bumps
        m_unrealizedSaveCount. Removed setAllAttributesToDefault. Added OVERRIDE for all the
        virtual function overrides, and made them all private. Moved m_path down with the other data
        members. Renamed the non-const state function to modifiableState. Added a realizeSaves
        function and the realizeSavesLoop for the unusual case where there is work to do.
        Added m_unrealizedSaveCount.

2012-05-15  Tommy Widenflycht  <tommyw@google.com>

        MediaStream API: Setting onended on a LocalMediaStream triggers an assertion in V8
        https://bugs.webkit.org/show_bug.cgi?id=86459

        Reviewed by Adam Barth.

        LocalMediaStream inherits from MediaStream, but only MediaStream have the
        EventTarget idl attribute. Adding the attribute to LocalMediaStream as well fixes the issue.

        Test: fast/mediastream/LocalMediaStream-onended.html

        * Modules/mediastream/LocalMediaStream.idl:

2012-05-15  Terry Anderson  <tdanderson@chromium.org>

        [chromium] Remove unused code for tap target fuzzing
        https://bugs.webkit.org/show_bug.cgi?id=86252

        Reviewed by Adam Barth.

        No tests required since this is a cleanup of unused code.

        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleGestureTap):
        * page/EventHandler.h:
        (EventHandler):
        The touch adjustment code will be used to determine the best target
        for a GestureTap event instead of passing in a pre-targeted node.
        * platform/PlatformGestureEvent.h:
        (WebCore::PlatformGestureEvent::PlatformGestureEvent):
        (PlatformGestureEvent):
        A rectangular touch region is defined by the touch center and the
        delta values only, so gammaX and gammaY are not needed.

2012-05-15  Caio Marcelo de Oliveira Filho  <caio.oliveira@openbossa.org>

        [Qt] WebKit with Qt5 hangs on Mac
        https://bugs.webkit.org/show_bug.cgi?id=79785

        Reviewed by Tor Arne Vestbø.

        Delay the initialization of our QNetworkConfigurationManager used in
        NetworkStateNotifierPrivate. On Mac it was causing a race condition because it
        spawns a thread that triggers a static initializer in Qt, while in the main
        thread NetworkStateNotifier is being static initialized. On Mac the lock for
        static initializers is shared between all of them, causing a deadlock.

        The issue was also reported in http://openradar.appspot.com/11217150.

        * platform/network/qt/NetworkStateNotifierPrivate.h:
        (NetworkStateNotifierPrivate):
        (WebCore::NetworkStateNotifierPrivate::effectivelyOnline):
        * platform/network/qt/NetworkStateNotifierQt.cpp:
        (WebCore::NetworkStateNotifierPrivate::NetworkStateNotifierPrivate):
        (WebCore::NetworkStateNotifierPrivate::setNetworkAccessAllowed):
        (WebCore::NetworkStateNotifierPrivate::setOnlineState):
        (WebCore::NetworkStateNotifierPrivate::initialize):
        (WebCore):
        (WebCore::NetworkStateNotifierPrivate::~NetworkStateNotifierPrivate):
        (WebCore::NetworkStateNotifier::updateState):
        (WebCore::NetworkStateNotifier::NetworkStateNotifier):
        (WebCore::NetworkStateNotifier::setNetworkAccessAllowed):

2012-05-15  Allan Sandfeld Jensen  <allan.jensen@nokia.com>

        Factor HitTestPoint out of HitTestResult.
        https://bugs.webkit.org/show_bug.cgi?id=85965

        Reviewed by Simon Fraser.

        In preparation for handling transformations on area-based hit-testing, 
        we need to factor test-point and test-area out of HitTestResult so that
        it can be transformed independently.

        To maintain the current API as closely as possible HitTestResult now
        inherit from HitTestPoint, representing the original untransformed
        hitTestPoint.

        No change in functionality. No new tests. 

        * rendering/HitTestResult.cpp:
        (WebCore::HitTestPoint::HitTestPoint):
        (WebCore::HitTestPoint::~HitTestPoint):
        (WebCore::HitTestPoint::operator=):
        (WebCore::HitTestPoint::rectForPoint):
        (WebCore::HitTestResult::HitTestResult):
        (WebCore::HitTestResult::operator=):
        (WebCore::HitTestResult::isSelected):
        (WebCore::HitTestResult::spellingToolTip):
        (WebCore::HitTestResult::replacedString):
        * rendering/HitTestResult.h:
        (HitTestPoint):
        (WebCore::HitTestPoint::point):
        (WebCore::HitTestPoint::roundedPoint):
        (WebCore::HitTestPoint::setPoint):
        (WebCore::HitTestPoint::isRectBasedTest):
        (WebCore::HitTestPoint::topPadding):
        (WebCore::HitTestPoint::rightPadding):
        (WebCore::HitTestPoint::bottomPadding):
        (WebCore::HitTestPoint::leftPadding):
        (HitTestResult):
        (WebCore::HitTestResult::hitTestPoint):
        (WebCore::HitTestPoint::rectForPoint):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::hitTestLayer):
        (WebCore::RenderLayer::hitTestList):

2012-05-15  Rob Buis  <rbuis@rim.com>

        Refactor SVG parts of Node::addEventListener/removeEventListener
        https://bugs.webkit.org/show_bug.cgi?id=86426

        Reviewed by Nikolas Zimmermann.

        Move SVG parts of Node::addEventListener/removeEventListener into svg/. Now we do not
        have to check in Node::addEventListener/removeEventListener if we are dealing with an SVG
        element. Make tryAddEventListener/tryRemoveEventListener protected methods on Node to be able to use
        it in SVGElement.

        No new tests, since no change in behavior, just refactoring.

        * dom/Node.cpp:
        (WebCore::tryAddEventListener):
        (WebCore::Node::addEventListener):
        (WebCore::tryRemoveEventListener):
        (WebCore::Node::removeEventListener):
        * svg/SVGElement.cpp:
        (WebCore::collectInstancesForSVGElement):
        (WebCore):
        (WebCore::SVGElement::addEventListener):
        (WebCore::SVGElement::removeEventListener):
        * svg/SVGElement.h:
        (SVGElement):

2012-05-15  Andreas Kling  <kling@webkit.org>

        RuleSet::addToRuleSet wastes a bit of Vector capacity.
        <http://webkit.org/b/86434>

        Reviewed by Antti Koivisto.

        Have makeRuleSet call shrinkToFit() on the vectors before returning them.
        This avoids wasting space for the rulesets constructed in collectFeatures().

        * css/StyleResolver.cpp:
        (WebCore::makeRuleSet):

2012-05-15  Darin Adler  <darin@apple.com>

        [CG] CGImageCreateWithImageInRect is too slow, but for now we still need to use it
        https://bugs.webkit.org/show_bug.cgi?id=86340

        Reviewed by Geoffrey Garen.

        This patch adds a subimage cache to defray the cost of CGImageCreateWithImageInRect.
        Later, we will restructure the code so it doesn't use that function, but at the
        moment there are CG issues blocking that change.

        * platform/graphics/cg/GraphicsContextCG.cpp:
        (SubimageCacheEntry): Added. An entry in the cache.
        (SubimageCacheEntryTraits): Added. Traits for the cache.
        (SubimageCacheHash): Added. Hash function for the cache.
        (SubimageCacheTimer): Added. Timer that clears the cache after a second
        of inactivity.
        (SubimageCacheWithTimer): Added. Cache and its timer.
        (WebCore::subimageCache): Added. Function returning the single global timer.
        (WebCore::SubimageCacheTimer::restart): Added. Start the timer.
        (WebCore::SubimageCacheTimer::fired): Added. Clear the cache when the timer fires.
        (SubimageRequest): Added. A key to look up in the cache.
        (SubimageCacheAdder): Added. Translator to add to the cache.
        (WebCore::subimage): Added. Puts an entry in the cache.
        (WebCore::GraphicsContext::drawNativeImage): Changed to call the subimage function.

2012-05-15  Eugene Klyuchnikov  <eustas.bug@gmail.com>

        Web Inspector: AdvancedSearchController is not stopped then view is hidden.
        https://bugs.webkit.org/show_bug.cgi?id=86466

        Reviewed by Vsevolod Vlasov.

        AdvancedSearchController overrides "wasHidden" method instead of "willHide".

        UI event-flow, not tested.

        * inspector/front-end/AdvancedSearchController.js:
        (WebInspector.SearchView.prototype.willHide): Renamed function.

2012-05-15  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        [Qt] http/tests/xmlhttprequest/xmlhttprequest-check-head-readystate-for-404.html times out
        https://bugs.webkit.org/show_bug.cgi?id=84016

        Reviewed by Simon Hausmann.

        Calling didFail abort the connection and doesn't activate the HEADERS_RECEIVED state.
        Since the goal of HEAD is to test then the request should be marked as finished
        also in cases of HTTP errors.
        This matches other ports behavior.

        * platform/network/qt/QNetworkReplyHandler.cpp:
        (WebCore::shouldIgnoreHttpError):

2012-05-15  Allan Sandfeld Jensen  <allan.jensen@nokia.com>

        [Qt][WK2] Fix scrolling in touch mode
        https://bugs.webkit.org/show_bug.cgi?id=75006

        Reviewed by Kenneth Rohde Christiansen.

        * page/FrameView.cpp:
        (WebCore::FrameView::setFixedVisibleContentRect):
            On changes to fixedVisibleContentRect update scroll-animators position, and
            recalculate page-step sizes in scrollbars.
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::scrollTo):
            Forward scrolling-request to the host window.
        (WebCore::ScrollView::updateScrollbars):
            Allow ScrollViews to have invisible scrollbars when scrolling is delegated.
        * platform/ScrollView.h:
        (ScrollView):

2012-05-15  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Refactor SnippetsModel: extract SnippetStorage, make SnippetScriptMapping delegate calls to ScriptSnippetModel and provide public interface on ScriptSnippetModel in terms of uiSourceCodes
        https://bugs.webkit.org/show_bug.cgi?id=86477

        Reviewed by Pavel Feldman.

        Extracted SnippetStorage to be reused for other snippet types.
        Made SnippetScriptMapping delegate all calls to ScriptSnippetModel and injected it in DebuggerPresentationModel.
        ScriptSnippetModel now provides public interface for ScriptsPanel in terms of uiSourceCodes.

        Tests: inspector/debugger/script-snippet-model.html
               inspector/snippet-storage.html

        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * inspector/compile-front-end.py:
        * inspector/front-end/DebuggerPresentationModel.js:
        (WebInspector.DebuggerPresentationModel):
        * inspector/front-end/ScriptSnippetModel.js: Added.
        (WebInspector.ScriptSnippetModel):
        (WebInspector.ScriptSnippetModel.prototype.get scriptMapping):
        (WebInspector.ScriptSnippetModel.prototype.createScriptSnippet):
        (WebInspector.ScriptSnippetModel.prototype._addScriptSnippet):
        (WebInspector.ScriptSnippetModel.prototype._rawLocationToUILocation):
        (WebInspector.ScriptSnippetModel.prototype._uiLocationToRawLocation.get if):
        (WebInspector.ScriptSnippetModel.prototype._uiLocationToRawLocation):
        (WebInspector.ScriptSnippetModel.prototype._uiSourceCodeList):
        (WebInspector.ScriptSnippetModel.prototype._releasedUISourceCodes):
        (WebInspector.ScriptSnippetModel.prototype._createUISourceCodeForScript):
        (WebInspector.ScriptSnippetModel.prototype._sourceURLForSnippet):
        (WebInspector.ScriptSnippetModel.prototype._snippetIdForSourceURL):
        (WebInspector.ScriptSnippetModel.prototype._snippetForSourceURL):
        (WebInspector.ScriptSnippetModel.prototype._reset):
        (WebInspector.SnippetScriptMapping):
        (WebInspector.SnippetScriptMapping.prototype.rawLocationToUILocation):
        (WebInspector.SnippetScriptMapping.prototype.uiLocationToRawLocation):
        (WebInspector.SnippetScriptMapping.prototype.uiSourceCodeList):
        (WebInspector.SnippetScriptMapping.prototype.snippetIdForSourceURL):
        (WebInspector.SnippetScriptMapping.prototype.addScript):
        (WebInspector.SnippetScriptMapping.prototype._uiSourceCodesAdded):
        (WebInspector.SnippetScriptMapping.prototype._uiSourceCodesRemoved):
        (WebInspector.SnippetScriptMapping.prototype.reset):
        (WebInspector.SnippetContentProvider):
        * inspector/front-end/SnippetStorage.js: Added.
        (WebInspector.SnippetStorage):
        (WebInspector.SnippetStorage.prototype.get namePrefix):
        (WebInspector.SnippetStorage.prototype._saveSettings):
        (WebInspector.SnippetStorage.prototype.set snippets):
        (WebInspector.SnippetStorage.prototype.snippetForId):
        (WebInspector.SnippetStorage.prototype.deleteSnippet):
        (WebInspector.SnippetStorage.prototype._snippetAdded):
        (WebInspector.SnippetStorage.prototype.reset.set this):
        (WebInspector.Snippet):
        (WebInspector.Snippet.fromObject):
        (WebInspector.Snippet.prototype.get id):
        (WebInspector.Snippet.prototype.get name):
        (WebInspector.Snippet.prototype.set name):
        (WebInspector.Snippet.prototype.get content):
        (WebInspector.Snippet.prototype.set content):
        (WebInspector.Snippet.prototype.serializeToObject):
        * inspector/front-end/SnippetsModel.js: Removed.
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/inspector.html:
        * inspector/front-end/inspector.js:

2012-05-15  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: add show/hide debugger sidebar button.
        https://bugs.webkit.org/show_bug.cgi?id=86478

        Reviewed by Vsevolod Vlasov.

        As with the navigator, but with no overlay. See the screenshot.

        * English.lproj/localizedStrings.js:
        * inspector/front-end/NavigatorOverlayController.js:
        (WebInspector.NavigatorOverlayController.prototype.set _pinNavigator):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype._debuggerPaused):
        (WebInspector.ScriptsPanel.prototype._debuggerResumed):
        (WebInspector.ScriptsPanel.prototype._showJavaScriptOutlineDialog):
        (WebInspector.ScriptsPanel.prototype._installDebuggerSidebarController.clickHandler):
        (WebInspector.ScriptsPanel.prototype._showDebuggerSidebar):
        (WebInspector.ScriptsPanel.prototype.set _hideDebuggerSidebar):
        * inspector/front-end/scriptsPanel.css:
        (#scripts-editor-container-tabbed-pane .tabbed-pane-header-contents):
        (button.status-bar-item.scripts-debugger-show-hide-button):
        (.status-bar-item.scripts-debugger-show-hide-button > .glyph):
        (.status-bar-item.scripts-debugger-show-hide-button.toggled-shown > .glyph):
        (.status-bar-item.scripts-debugger-show-hide-button.toggled-hidden > .glyph):

2012-05-15  Zoltan Herczeg  <zherczeg@webkit.org>

        NEONizing forceValidPreMultipliedPixels
        https://bugs.webkit.org/show_bug.cgi?id=86468

        Reviewed by Nikolas Zimmermann.

        Optimize forceValidPreMultipliedPixels with ARM-NEON intrinsics.

        Existing tests cover this feature.

        * platform/graphics/filters/FilterEffect.cpp:
        (WebCore::FilterEffect::forceValidPreMultipliedPixels):

2012-05-15  Yury Semikhatsky  <yurys@chromium.org>

        Web Inspector: remove unnecessary setTimeout in HeapSnapshotGridNodes.js
        https://bugs.webkit.org/show_bug.cgi?id=86464

        Reviewed by Pavel Feldman.

        * inspector/front-end/HeapSnapshotGridNodes.js:
        (WebInspector.HeapSnapshotGridNode.prototype._populateChildren.childrenRetrieved): Posting
        a message to worker is already asynchronous, no need to postpone the call via setTimeout.
        (WebInspector.HeapSnapshotGridNode.prototype._populateChildren):

2012-05-15  Florin Malita  <fmalita@chromium.org>

        Mask deformations when masked content is rotated
        https://bugs.webkit.org/show_bug.cgi?id=76527

        Reviewed by Nikolas Zimmermann.

        Test: svg/repaint/mask-clip-target-transform.svg

        RenderSVGResource::markForLayoutAndParentResourceInvalidation() needs to also
        invalidate parent mask and clip resources, not just filters.

        * rendering/svg/RenderSVGResource.cpp:
        (WebCore::removeFromCacheAndInvalidateDependencies):
        (WebCore::RenderSVGResource::markForLayoutAndParentResourceInvalidation):

2012-05-15  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: merge show navigator with pin navigator buttons.
        https://bugs.webkit.org/show_bug.cgi?id=86469

        Reviewed by Vsevolod Vlasov.

        See screenshots attached to the bug.

        * English.lproj/localizedStrings.js:
        * inspector/front-end/Images/navigatorPinButton.png: Removed.
        * inspector/front-end/Images/navigatorShowHideButton.png:
        * inspector/front-end/NavigatorOverlayController.js:
        (WebInspector.NavigatorOverlayController.prototype._toggleNavigator):
        (WebInspector.NavigatorOverlayController.prototype.set _pinNavigator):
        (WebInspector.NavigatorOverlayController.prototype.set showNavigatorOverlay):
        (WebInspector.NavigatorOverlayController.prototype.hideNavigatorOverlay):
        (WebInspector.NavigatorOverlayController.prototype._containingElementFocused):
        * inspector/front-end/SidebarOverlay.js:
        (WebInspector.SidebarOverlay):
        (WebInspector.SidebarOverlay.prototype.show):
        (WebInspector.SidebarOverlay.prototype.hide):
        * inspector/front-end/navigatorView.css:
        (.navigator-tabbed-pane .tabbed-pane-header-contents):
        * inspector/front-end/scriptsPanel.css:
        (.status-bar-item.scripts-navigator-show-hide-button > .glyph):
        (.status-bar-item.scripts-navigator-show-hide-button.toggled-shown > .glyph):
        (.status-bar-item.scripts-navigator-show-hide-button.toggled-overlay > .glyph):
        (button.status-bar-item.scripts-navigator-show-hide-button):
        (button.status-bar-item.scripts-navigator-show-hide-button.toggled-overlay):

2012-05-15  Yury Semikhatsky  <yurys@chromium.org>

        Web Inspector: implement "Reveal in Dominators view" context menu action
        https://bugs.webkit.org/show_bug.cgi?id=86455

        Reviewed by Pavel Feldman.

        Implemented "Reveal in Dominators view" context menu action for objects
        in the console.

        Test: inspector/profiler/heap-snapshot-reveal-in-dominators-view.html

        * English.lproj/localizedStrings.js:
        * inspector/front-end/HeapSnapshot.js:
        (WebInspector.HeapSnapshot.prototype._nodeForSnapshotObjectId):
        (WebInspector.HeapSnapshot.prototype.nodeClassName):
        (WebInspector.HeapSnapshot.prototype.dominatorIdsForNode):
        * inspector/front-end/HeapSnapshotDataGrids.js:
        (WebInspector.HeapSnapshotDominatorsDataGrid):
        (WebInspector.HeapSnapshotDominatorsDataGrid.prototype.setDataSource):
        (WebInspector.HeapSnapshotDominatorsDataGrid.prototype.sortingChanged):
        (WebInspector.HeapSnapshotDominatorsDataGrid.prototype.highlightObjectByHeapSnapshotId.didGetDominators):
        (WebInspector.HeapSnapshotDominatorsDataGrid.prototype.highlightObjectByHeapSnapshotId.expandNextDominator):
        (WebInspector.HeapSnapshotDominatorsDataGrid.prototype.highlightObjectByHeapSnapshotId):
        * inspector/front-end/HeapSnapshotGridNodes.js:
        (WebInspector.HeapSnapshotGridNode.prototype.childForPosition):
        (WebInspector.HeapSnapshotGridNode.prototype.expandWithoutPopulate):
        (WebInspector.HeapSnapshotGridNode.prototype._populateChildren.childrenRetrieved):
        (WebInspector.HeapSnapshotGridNode.prototype._populateChildren):
        (WebInspector.HeapSnapshotGridNode.prototype.sort):
        (WebInspector.HeapSnapshotDominatorObjectNode.prototype.retrieveChildBySnapshotObjectId):
        (WebInspector.HeapSnapshotDominatorObjectNode.prototype.retrieveChildBySnapshotObjectId.didGetNodePosition):
        (WebInspector.HeapSnapshotDominatorObjectNode.prototype.retrieveChildBySnapshotObjectId.didPopulateChildren):
        * inspector/front-end/HeapSnapshotProxy.js:
        (WebInspector.HeapSnapshotProxy.prototype.dominatorIdsForNode):
        * inspector/front-end/ProfilesPanel.js:
        (WebInspector.RevealInHeapSnapshotContextMenuProvider.prototype.populateContextMenu.revealInSummaryView):
        (WebInspector.RevealInHeapSnapshotContextMenuProvider.prototype.populateContextMenu.didReceiveHeapObjectId):
        (WebInspector.RevealInHeapSnapshotContextMenuProvider.prototype.populateContextMenu):

2012-05-15  Yury Semikhatsky  <yurys@chromium.org>

        Web Inspector: exception when switching to heap profiler comparison view
        https://bugs.webkit.org/show_bug.cgi?id=86224

        Reviewed by Pavel Feldman.

        Make sure the messages are dispatched in the same order as they are sent in
        case a fake worker is used for heap snapshot processing.

        * inspector/front-end/HeapSnapshotProxy.js:
        (WebInspector.TimerQueue):
        (WebInspector.TimerQueue.prototype.addTask):
        (WebInspector.TimerQueue.prototype._onTimeout):
        (WebInspector.TimerQueue.prototype._scheduleTimer):
        (WebInspector.HeapSnapshotFakeWorker):
        (WebInspector.HeapSnapshotFakeWorker.prototype.postMessage):
        (WebInspector.HeapSnapshotFakeWorker.prototype._postMessageFromWorker):

2012-05-15  Zoltan Herczeg  <zherczeg@webkit.org>

        The ARM NEON optimized filters does not compile on THUMB2
        https://bugs.webkit.org/show_bug.cgi?id=86457

        Reviewed by Csaba Osztrogonác.

        We should disable the compilation on Thumb2 until we fix the code.

        * platform/graphics/filters/FEComposite.cpp:
        (WebCore::FEComposite::platformArithmeticSoftware):
        * platform/graphics/filters/FEGaussianBlur.cpp:
        (WebCore::FEGaussianBlur::platformApplyWorker):
        (WebCore::FEGaussianBlur::platformApply):
        * platform/graphics/filters/FELighting.cpp:
        (WebCore::FELighting::platformApply):
        * platform/graphics/filters/arm/FECompositeArithmeticNEON.cpp:
        * platform/graphics/filters/arm/FECompositeArithmeticNEON.h:
        * platform/graphics/filters/arm/FEGaussianBlurNEON.cpp:
        * platform/graphics/filters/arm/FEGaussianBlurNEON.h:
        * platform/graphics/filters/arm/FELightingNEON.cpp:
        * platform/graphics/filters/arm/FELightingNEON.h:

2012-05-15  MORITA Hajime  <morrita@google.com>

        Kill unnecessary RuntimeEnabledFeatures.h inclusion
        https://bugs.webkit.org/show_bug.cgi?id=86451

        Reviewed by Kentaro Hara.

        No new tests. No behavior change.

        * dom/Element.cpp:
        * dom/ElementShadow.cpp:
        * dom/TreeScope.cpp:

2012-05-14  Shinya Kawanaka  <shinyak@chromium.org> 

        document.execCommand('Indent') in the direct child of ShadowRoot causes a crash.
        https://bugs.webkit.org/show_bug.cgi?id=86341

        Reviewed by Ryosuke Niwa.

        When document.execCommand('Indent') is executed in the direct child of ShadowRoot,
        the scope variable of TextIterator becomes ShadowRoot. However, an element is assumed for it,
        so a crash happended.

        This patch enables TextIterator to have ShadowRoot as a scope variable.

        Test: editing/shadow/execcommand-indent-in-shadow.html

        * WebCore.exp.in:
        * editing/ApplyBlockElementCommand.cpp:
        (WebCore::ApplyBlockElementCommand::doApply):
        * editing/InsertListCommand.cpp:
        (WebCore::InsertListCommand::doApply):
        * editing/TextIterator.cpp:
        (WebCore::TextIterator::rangeFromLocationAndLength):
        * editing/TextIterator.h:
        (TextIterator):
        * editing/htmlediting.cpp:
        (WebCore::indexForVisiblePosition):
        (WebCore::visiblePositionForIndex):
        * editing/htmlediting.h:
        (WebCore):

2012-05-14  Shinya Kawanaka  <shinyak@chromium.org>

        Node::shadowTreeRootNode() should return ShadowRoot instead of Node.
        https://bugs.webkit.org/show_bug.cgi?id=86428

        Reviewed by Hajime Morita.

        Since Node::shadowTreeRootNode() returns only ShadowRoot or 0 now, its return type should be ShadowRoot.
        This patch changes the return type and adds include directive to build.

        No new tests, no change in behavior.

        * dom/Node.cpp:
        (WebCore::Node::shadowAncestorNode):
        (WebCore::Node::shadowTreeRootNode):
        * dom/Node.h:
        (WebCore):
        (Node):
        * dom/NodeRenderingContext.cpp:
        (WebCore::NodeRenderingContext::NodeRenderingContext):
        * dom/Range.cpp:
        (WebCore::Range::shadowTreeRootNode):
        * dom/Range.h:
        (Range):
        * editing/Editor.cpp:
        * editing/TextIterator.cpp:
        * editing/htmlediting.cpp:
        * html/shadow/ContentSelectorQuery.cpp:
        * html/shadow/HTMLContentElement.cpp:
        (WebCore::HTMLContentElement::parseAttribute):
        * html/shadow/InsertionPoint.cpp:
        (WebCore::InsertionPoint::detach):
        * page/EventHandler.cpp:

2012-05-14  Luke Macpherson  <macpherson@chromium.org>

        Make StyleResolver::applyMatchedProperties and ::applyProperties use enum template parameter instead of bool.
        https://bugs.webkit.org/show_bug.cgi?id=86424

        Reviewed by Dimitri Glazkov.

        This patch changes from using a boolean template parameter for StyleResolver::applyMatchedProperties and
        StyleResolver::applyProperties functions. The motivation for this change is that it paves the way for
        CSS Variables to make the value tri-state, which is a requirement because variable definitions must occur
        before high priority CSS properties such that they can be referenced by the latter. This change affects
        only the type signatures of those functions, and not their behavior.

        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::collectMatchingRulesForList):
        * css/StyleResolver.h:

2012-05-14  MORITA Hajime  <morrita@google.com>

        [Refactoring] Get rid of ContentDistribution::Item
        https://bugs.webkit.org/show_bug.cgi?id=86350

        This change replaces the linked list on ContentDistribution with a Vector.
        We no longer link item class ContentDistribution::Item.
        This simplification also allows ContentDistribution to go.
        ContentDistribution is now just a typedef of Vector<RefPtr<Node> >.

        Reviewed by Dimitri Glazkov.

        No new tests. Covered by existing tests.

        * dom/ComposedShadowTreeWalker.cpp:
        (WebCore::ComposedShadowTreeWalker::traverseNode):
        (WebCore::ComposedShadowTreeWalker::traverseSiblingOrBackToInsertionPoint):
        * dom/ElementShadow.cpp:
        * dom/ElementShadow.h:
        (ElementShadow):
        * dom/NodeRenderingContext.cpp:
        (WebCore::nextRendererOfInsertionPoint):
        (WebCore::previousRendererOfInsertionPoint):
        (WebCore::firstRendererOfInsertionPoint):
        (WebCore::lastRendererOfInsertionPoint):
        * html/shadow/ContentDistributor.cpp:
        (WebCore::ContentDistributor::distribute):
        (WebCore::ContentDistributor::clearDistribution):
        (WebCore::ContentDistributor::findInsertionPointFor):
        * html/shadow/ContentDistributor.h:
        (WebCore):
        (ContentDistributor):
        * html/shadow/InsertionPoint.cpp:
        (WebCore::InsertionPoint::InsertionPoint):
        (WebCore::InsertionPoint::attachDistributedNode):
        (WebCore::InsertionPoint::assignShadowRoot):
        (WebCore::InsertionPoint::nextTo):
        (WebCore):
        (WebCore::InsertionPoint::previousTo):
        * html/shadow/InsertionPoint.h: Added a set of delegate method to m_distribution.
        (WebCore::InsertionPoint::hasDistribution):
        (WebCore::InsertionPoint::indexOf):
        (WebCore::InsertionPoint::size):
        (WebCore::InsertionPoint::at):
        (WebCore::InsertionPoint::first):
        (WebCore::InsertionPoint::last):
        (InsertionPoint):

2012-05-14  Tim Horton  <timothy_horton@apple.com>

        RenderLayer::repaintRectIncludingDescendants shouldn't include repaint rects of composited descendants
        https://bugs.webkit.org/show_bug.cgi?id=86429
        <rdar://problem/11445132>

        Reviewed by Simon Fraser.

        Change repaintRectIncludingDescendants to not include repaint rects for composited child layers,
        and rename the function to make it more clear that that's what it does now.

        No new tests, scrolling performance optimization.

        * page/FrameView.cpp:
        (WebCore::FrameView::scrollContentsFastPath):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::repaintRectIncludingNonCompositingDescendants):
        * rendering/RenderLayer.h:
        (RenderLayer):

2012-05-14  Gavin Peters  <gavinp@chromium.org>

        Add Prerenderer, PrerenderHandle and a chromium interface for Prerendering.
        https://bugs.webkit.org/show_bug.cgi?id=85005

        Reviewed by Adam Barth.

        The prerender case isn't quite a resource load, and using resource loading to
        retrieve them has constrained the API, and unnecessarily complicated the loader.

        The new Prerenderer and PrerenderHandle let <link rel=prerender...> elements signal
        removal and unload to their platform.

        No new tests, as this interface requires a full platform to work, and doesn't affect layout.  Test
        it with your platform when implemented for it.

        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/Document.cpp:
        (WebCore::Document::Document):
        * dom/Document.h:
        (WebCore):
        (Document):
        (WebCore::Document::prerenderer):
        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::removedFrom):
        * html/LinkRelAttribute.cpp:
        (WebCore::LinkRelAttribute::LinkRelAttribute):
        * html/LinkRelAttribute.h:
        (LinkRelAttribute):
        * loader/LinkLoader.cpp:
        (WebCore::LinkLoader::loadLink):
        (WebCore::LinkLoader::released):
        * loader/LinkLoader.h:
        (WebCore):
        (LinkLoader):
        * loader/Prerenderer.cpp: Added.
        (WebCore):
        (WebCore::Prerenderer::create):
        (WebCore::Prerenderer::Prerenderer):
        (WebCore::Prerenderer::~Prerenderer):
        (WebCore::Prerenderer::render):
        (WebCore::Prerenderer::stop):
        (WebCore::Prerenderer::suspend):
        (WebCore::Prerenderer::resume):
        (WebCore::Prerenderer::document):
        (WebCore::Prerenderer::client):
        * loader/Prerenderer.h: Copied from Source/Platform/chromium/public/WebPrerender.h.
        (WebCore):
        (Prerenderer):
        * loader/PrerendererClient.cpp: Copied from Source/WebCore/html/LinkRelAttribute.h.
        (WebCore):
        (WebCore::PrerendererClient::supplementName):
        (WebCore::PrerendererClient::from):
        (WebCore::providePrerendererClientTo):
        * loader/PrerendererClient.h: Copied from Source/WebCore/html/LinkRelAttribute.h.
        (WebCore):
        (PrerendererClient):
        (WebCore::PrerendererClient::~PrerendererClient):
        (WebCore::PrerendererClient::PrerendererClient):
        * loader/cache/CachedResource.cpp:
        (WebCore::defaultPriorityForResourceType):
        (WebCore::cachedResourceTypeToTargetType):
        (WebCore::CachedResource::load):
        * loader/cache/CachedResource.h:
        (WebCore::CachedResource::ignoreForRequestCount):
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::createResource):
        (WebCore::CachedResourceLoader::requestLinkResource):
        (WebCore::CachedResourceLoader::checkInsecureContent):
        (WebCore::CachedResourceLoader::canRequest):
        * platform/PrerenderHandle.h: Copied from Source/Platform/chromium/public/WebPrerender.h.
        (WebCore):
        (PrerenderHandle):
        * platform/chromium/Prerender.cpp: Added.
        (WebCore):
        (WebCore::Prerender::Prerender):
        (WebCore::Prerender::~Prerender):
        (WebCore::Prerender::setState):
        (WebCore::Prerender::add):
        (WebCore::Prerender::cancel):
        (WebCore::Prerender::abandon):
        (WebCore::Prerender::suspend):
        (WebCore::Prerender::resume):
        * platform/chromium/Prerender.h: Copied from Source/Platform/chromium/public/WebPrerender.h.
        (WebCore):
        (Prerender):
        (ExtraData):
        (WebCore::Prerender::ExtraData::~ExtraData):
        (WebCore::Prerender::url):
        (WebCore::Prerender::referrer):
        (WebCore::Prerender::referrerPolicy):
        (WebCore::Prerender::setExtraData):
        (WebCore::Prerender::extraData):
        * platform/chromium/PrerenderHandle.cpp: Copied from Source/Platform/chromium/public/WebPrerender.h.
        (WebCore):
        (WebCore::PrerenderHandle::create):
        (WebCore::PrerenderHandle::PrerenderHandle):
        (WebCore::PrerenderHandle::~PrerenderHandle):
        (WebCore::PrerenderHandle::prerender):
        (WebCore::PrerenderHandle::add):
        (WebCore::PrerenderHandle::cancel):
        (WebCore::PrerenderHandle::abandon):
        (WebCore::PrerenderHandle::suspend):
        (WebCore::PrerenderHandle::resume):
        (WebCore::PrerenderHandle::url):
        (WebCore::PrerenderHandle::referrer):
        (WebCore::PrerenderHandle::referrerPolicy):
        * platform/chromium/support/WebPrerender.cpp: Copied from Source/Platform/chromium/public/WebPrerender.h.
        (WebKit::WebPrerender::WebPrerender):
        (WebKit):
        (WebKit::WebPrerender::~WebPrerender):
        (WebKit::WebPrerender::url):
        (WebKit::WebPrerender::referrer):
        (WebKit::WebPrerender::referrerPolicy):
        (WebKit::WebPrerender::setExtraData):
        (WebKit::WebPrerender::extraData):
        * platform/network/blackberry/ResourceRequest.h:
        * platform/network/blackberry/ResourceRequestBlackBerry.cpp:
        (WebCore::platformTargetTypeForRequest):
        * platform/network/chromium/ResourceRequest.h:

2012-05-14  Luke Macpherson  <macpherson@chromium.org>

        Introduce ENABLE_CSS_VARIABLES compile flag.
        https://bugs.webkit.org/show_bug.cgi?id=86338

        Reviewed by Dimitri Glazkov.

        Add a configuration option for CSS Variables support, disabling it by default.

        No new tests. This patch only introduces an unused build flag.

        * Configurations/FeatureDefines.xcconfig:

2012-05-14  Eric Seidel  <eric@webkit.org>

        Styles are not recalculated when the seamless attribute is dynamically added/removed
        https://bugs.webkit.org/show_bug.cgi?id=86315

        Reviewed by Andreas Kling.

        Covered by fast/frames/seamless/seamless-css-cascade.html.

        * html/HTMLIFrameElement.cpp:
        (WebCore::HTMLIFrameElement::isPresentationAttribute):
         - Make seamless a presentational attribute, which means style on the <iframe> will
           be forced to recalculate when it changes.  This is correct, but not observable
           until the layout changes are landed (as then the iframe should correctly revert to not
           being sized to fit its content if seamless is removed).
        (WebCore::HTMLIFrameElement::parseAttribute):
         - When the seamless attribute is added or remove, force the content document to recalc
           its style resolver, which will refresh the list of inherited stylesheets from the
           parent.  This doesn't need to happen synchronously.  When the layout changes land
           the content document will actually cause that recalc to redirect to the parent document
           in the seamless case anyway, but it's more correct to ask the content document directly.

2012-05-14  Alexandre Elias  <aelias@google.com>

        [chromium] Prevent KeyCodeConversionAndroid from breaking on next NDK roll
        https://bugs.webkit.org/show_bug.cgi?id=86415

        Reviewed by Adam Barth.

        The new enum values added in this file have been added in recent
        versions of the NDK, so this file will fail to compile with duplicate
        enum error when we roll NDK to r7c or higher.  A workaround is
        to move our enum values to the WebCore namespace.  When the NDK
        upgrade is complete, we can delete them.

        No new tests. (No-op change.)

        * platform/chromium/KeyCodeConversionAndroid.cpp:
        (WebCore):

2012-05-14  Beth Dakin  <bdakin@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=86420
        ScrollbarPainter should support expansionTransitionProgress

        Reviewed by Sam Weinig.

        expansionTransitionProgress works the same as 
        uiStateTransitionProgress. This code just echoes that code, but for 
        expansion instead of uiState.
        * platform/mac/NSScrollerImpDetails.h:
        * platform/mac/ScrollAnimatorMac.mm:
        (supportsExpansionTransitionProgress):
        (-[WebScrollbarPartAnimation setCurrentProgress:]):
        (-[WebScrollbarPainterDelegate cancelAnimations]):
        (-[WebScrollbarPainterDelegate scrollerImp:animateExpansionTransitionWithDuration:]):
        (-[WebScrollbarPainterDelegate invalidate]):

2012-05-14  Andy Estes  <aestes@apple.com>

        Fix RunLoopCF.cpp's copyright string.

        * platform/cf/RunLoopCF.cpp:

2012-05-14  Andy Estes  <aestes@apple.com>

        Move the parts of RunLoopMac.mm that aren't Mac-specific into RunLoopCF.cpp
        https://bugs.webkit.org/show_bug.cgi?id=86411

        Reviewed by Anders Carlsson.

        Most of RunLoopMac.mm was written in terms of CF API. Move these bits
        to a new file called RunLoopCF.cpp, leaving only the bits dealing with
        NSApplication.

        * WebCore.xcodeproj/project.pbxproj: Xcode decided to give
        VisitedLinks.* new UUIDs. I'll allow it.
        * platform/cf/RunLoopCF.cpp: Copied from Source/WebCore/platform/mac/RunLoopMac.mm.
        * platform/mac/RunLoopMac.mm:

2012-05-14  Erik Arvidsson  <arv@chromium.org>

        [V8] Add "stack" property to DOMException
        https://bugs.webkit.org/show_bug.cgi?id=85057

        Reviewed by Kentaro Hara.

        When we create a DOM exception we define a V8 accessor for the stack property. This
        accessor uses a new Error object to get the underlying stack string.

        Test: fast/dom/DOMException/stack-trace.html

        * bindings/v8/V8Proxy.cpp:
        (WebCore::DOMExceptionStackGetter):
        (WebCore):
        (WebCore::DOMExceptionStackSetter):
        (WebCore::V8Proxy::setDOMException):

2012-05-14  Michael Saboff  <msaboff@apple.com>

        Enh: Add the Ability to Disable / Enable JavaScript GC Timer
        https://bugs.webkit.org/show_bug.cgi?id=86382

        Reviewed by Darin Adler.

        Plumbing to set / clear JS GC activity timer enable flag.

        * WebCore.exp.in:
        * bindings/js/GCController.cpp:
        (WebCore::GCController::setJavaScriptGarbageCollectorTimerEnabled):
        * bindings/js/GCController.h:

2012-05-14  Nate Chapin  <japhet@chromium.org>

        [V8] Crash in npObjectGetProperty() in V8NPObject.cpp
        https://bugs.webkit.org/show_bug.cgi?id=86131

        Reviewed by Adam Barth.

        Tests: plugins/npruntime/delete-plugin-within-getProperty.html
               plugins/npruntime/delete-plugin-within-hasProperty-return-false.html
               plugins/npruntime/delete-plugin-within-hasProperty-return-true.html
               plugins/npruntime/delete-plugin-within-invoke.html
               plugins/npruntime/delete-plugin-within-setProperty.html

        * bindings/v8/NPV8Object.cpp:
        (_NPN_EvaluateHelper):
        * bindings/v8/V8NPObject.cpp: Check NPN_IsAlive in a bunch of places we're not currently.
        (WebCore::npObjectInvokeImpl):
        (WebCore::npObjectGetProperty):
        (WebCore::npObjectSetProperty):

2012-05-14  Brent Fulgham  <bfulgham@webkit.org>

        [WinCairo] Unreviewed build correction.

        * platform/win/DragImageCairoWin.cpp: Add missing include for
        new NativeImageCairo.h type.

2012-05-14  Takashi Sakamoto  <tasak@google.com>

        Crash in WebCore::RenderObject::repaint
        https://bugs.webkit.org/show_bug.cgi?id=86162

        Reviewed by Abhishek Arya.

        As RenderScrollbarPart has no parent renderer, we crash in
        WebCore::RenderBoxModelObject::paddingLeft when paddingLeft has
        percent value, e.g. 5%. However if we set the scrollbar's parent
        renderer to a renderer owning the scrollbar by using setParent method,
        RenderScrollbarPart::styleWillChange will invoke parent renderer's
        repaint. This causes crash in WebCore::RenderObject::repaint if the
        owning renderer is already destroyed.
        To fix the first crash without the second crash, modify
        RenderObject::containingBlock() to check isRenderScrollbarPart or not,
        if parent() is 0.
        If so, use scrollbar's owningRenderer from RenderScrollbarPart.

        Test: scrollbars/scrollbar-percent-padding-crash.html
              scrollbars/scrollbar-scrollbarparts-repaint-crash.html

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::containingBlock):
        Modifying containingBlock. If parent() is 0 and isRenderScrollbarPart()
        is true, use RenderScrollbarPart's m_scrollbar->owningRenderer()
        instead of parent().
        * rendering/RenderObject.h:
        (WebCore::RenderObject::isRenderScrollbarPart):
        (RenderObject):
        Adding a new method, isRenderScrollbarPart.
        * rendering/RenderScrollbarPart.cpp:
        (WebCore::RenderScrollbarPart::rendererOwningScrollbar):
        (WebCore):
        Adding a new method, scrollbarOwningRenderer to obtain m_scrollar's
        owningRenderer.
        * rendering/RenderScrollbarPart.h:
        (RenderScrollbarPart):
        Removing "friend class RenderScrollbar".
        (WebCore::RenderScrollbarPart::isRenderScrollbarPart):
        (WebCore::toRenderScrollbarPart):
        (WebCore):
        Implementing isRenderScrollbarPart and toRenderScrollbarPart.

2012-05-14  Mike West  <mike@mikewest.org>

        Content Security Policy console errors include violated directive.
        https://bugs.webkit.org/show_bug.cgi?id=86323

        Reviewed by Adam Barth.

        Console errors generated when resources, inline script/style, or eval
        are blocked by Content Security Policy directives should include the
        text of the directive that's been violated. This gives developers more
        of the information they need to resolve the issue.

        Test: http/tests/security/contentSecurityPolicy/*

        * page/ContentSecurityPolicy.cpp:
        (WebCore::CSPDirectiveList::checkEvalAndReportViolation):
        (WebCore::CSPDirectiveList::checkInlineAndReportViolation):
        (WebCore::CSPDirectiveList::checkSourceAndReportViolation):
        (WebCore::CSPDirectiveList::allowJavaScriptURLs):
        (WebCore::CSPDirectiveList::allowInlineEventHandlers):
        (WebCore::CSPDirectiveList::allowInlineScript):
        (WebCore::CSPDirectiveList::allowInlineStyle):
        (WebCore::CSPDirectiveList::allowEval):

2012-05-14  Julien Chaffraix  <jchaffraix@webkit.org>

        Crash in FrameView::windowClipRectForFrameOwner after r116371
        https://bugs.webkit.org/show_bug.cgi?id=86035

        Reviewed by David Hyatt.

        Added a NULL-check for |parentView| as nothing guarantees it to be
        non-NULL. Unfortunately no test as this is a crasher I couldn't
        reproduce on my machine and the user logs were not helpful.

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

2012-05-14  Beth Dakin  <bdakin@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=86403
        ASSERTION FAILED: m_verticalScrollbarPainterDelegate on recent builds
        -and corresponding-
        <rdar://problem/11448841>

        Reviewed by Simon Fraser.

        http://trac.webkit.org/changeset/116476 accidentally started calling 
        these functions for custom scrollbars. This change replaces that 
        guard.
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::destroyScrollbar):

2012-05-14  Simon Fraser  <simon.fraser@apple.com>

        Remove redundant pixel snapping in calculateCompositedBounds()
        https://bugs.webkit.org/show_bug.cgi?id=86400

        Reviewed by Sam Weinig.

        RenderLayer::calculateLayerBounds() returns a pixel-snapped rect,
        so we don't need to pixel-snap it again.

        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::calculateCompositedBounds):

2012-05-14  Simon Fraser  <simon.fraser@apple.com>

        Avoid logging related to setting shadow-related properties on a transform-only layer
        https://bugs.webkit.org/show_bug.cgi?id=86398

        Reviewed by Dan Bernstein.

        When making a CATransformLayer to support transform-style: preserve-3d, avoid trying
        to set filters on the transform layer. We should never have this combination,
        because filters force flattening to occur.

        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::ensureStructuralLayer):

2012-05-14  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r116983.
        http://trac.webkit.org/changeset/116983
        https://bugs.webkit.org/show_bug.cgi?id=86397

        Does not compile on chromium-win (Requested by abarth on
        #webkit).

        * WebCore.gypi:
        * page/TouchAdjustment.cpp:

2012-05-14  Dan Bernstein  <mitz@apple.com>

        Pagination splits lines that could fit on a single page if it were not for their top leading
        https://bugs.webkit.org/show_bug.cgi?id=86388

        Reviewed by Darin Adler.

        Test: fast/multicol/split-in-top-margin.html

        When a line’s visible content fits on a page, but adding the top leading makes it taller than
        a page, instead of giving up and splitting the line in an arbitrary position, add a strut
        to push it downwards so that the split occurs in the top leading, and the visible content is
        fully contained on a single page.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::adjustLinePositionForPagination):

2012-05-14  Terry Anderson  <tdanderson@chromium.org>

        [chromium] Compute the best target node on a GestureTap event
        https://bugs.webkit.org/show_bug.cgi?id=85101

        Reviewed by Adam Barth.

        Using tests in the touchadjustment/ directory.

        * WebCore.gypi:
        Include TouchAdjustment.* files.
        * page/TouchAdjustment.cpp:
        Included math.h because of an 'Undeclared identifier: INFINITY' when
        this patch was landed before.

2012-05-14  Adrienne Walker  <enne@google.com>

        [chromium] Add compositor debug asserts for blocked main thread
        https://bugs.webkit.org/show_bug.cgi?id=86384

        Reviewed by James Robinson.

        Where we depend for thread-safety that the main thread is blocked,
        assert that this is actually the case.

        * platform/graphics/chromium/cc/CCProxy.cpp:
        (WebCore):
        (WebCore::CCProxy::isMainThreadBlocked):
        (WebCore::CCProxy::setMainThreadBlocked):
        * platform/graphics/chromium/cc/CCProxy.h:
        (CCProxy):
        (WebCore):
        (DebugScopedSetMainThreadBlocked):
        (WebCore::DebugScopedSetMainThreadBlocked::DebugScopedSetMainThreadBlocked):
        (WebCore::DebugScopedSetMainThreadBlocked::~DebugScopedSetMainThreadBlocked):
        * platform/graphics/chromium/cc/CCSingleThreadProxy.cpp:
        (WebCore::CCSingleThreadProxy::doCommit):
        (WebCore::CCSingleThreadProxy::stop):
        * platform/graphics/chromium/cc/CCThreadProxy.cpp:
        (WebCore::CCThreadProxy::stop):
        (WebCore::CCThreadProxy::beginFrame):
        * platform/graphics/chromium/cc/CCVideoLayerImpl.cpp:
        (WebCore::CCVideoLayerImpl::CCVideoLayerImpl):
        (WebCore::CCVideoLayerImpl::~CCVideoLayerImpl):

2012-05-14  Swapna P  <spottabathini@innominds.com>

        Reviewed by Eric Seidel.

        Bug: Cannot resize frames because frameborder=0
        https://bugs.webkit.org/show_bug.cgi?id=23750

        Removed check for frameborder, in order to allow resize of frames even in case of frameborder=0.

        Test: fast/frames/frames-with-frameborder-zero-can-be-resized.html

        * rendering/RenderFrameSet.cpp:
        (WebCore::RenderFrameSet::startResizing):
        (WebCore::RenderFrameSet::canResizeRow):
        (WebCore::RenderFrameSet::canResizeColumn):

2012-05-14  David Barton  <dbarton@mathscribe.com>

        Unify RenderMathMLSquareRoot.cpp and RenderMathMLRoot.cpp
        https://bugs.webkit.org/show_bug.cgi?id=86319

        Reviewed by Darin Adler.

        Most of RenderMathMLSquareRoot.cpp is duplicated in RenderMathMLRoot.cpp and can be
        eliminated. We also define RenderMathMLRoot::computePreferredLogicalWidths().

        Test: mathml/presentation/mroot-pref-width.html

        * rendering/mathml/RenderMathMLRoot.cpp:
        (WebCore::RenderMathMLRoot::computePreferredLogicalWidths):
        (WebCore::RenderMathMLRoot::layout):
        (WebCore::RenderMathMLRoot::paint):
        * rendering/mathml/RenderMathMLRoot.h:
        * rendering/mathml/RenderMathMLSquareRoot.cpp:
        (WebCore::RenderMathMLSquareRoot::RenderMathMLSquareRoot):
        (WebCore::RenderMathMLSquareRoot::addChild):
        * rendering/mathml/RenderMathMLSquareRoot.h:

2012-05-14  MORITA Hajime  <morrita@google.com>

        [Shadow DOM][Refactoring] HTMLContentSelector family should have better name
        https://bugs.webkit.org/show_bug.cgi?id=86064

        Reviewed by Dimitri Glazkov.

        This change renames classes around shadow content distribution.
        - Renamed HTMLContentSelector to ContentDistributor
        - Renamed HTMLContentSelectionList to ContentDistribution
        - Renamed HTMLContentSelection to ContentDistribution::Item
        - Inlined HTMLContentSelectionSet into ContentDistributor

        Associated rename and inlining are also happening for method names.

        No new tests. No behavior change.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/ComposedShadowTreeWalker.cpp:
        (WebCore::ComposedShadowTreeWalker::traverseNode):
        (WebCore::ComposedShadowTreeWalker::traverseSiblingOrBackToInsertionPoint):
        (WebCore::ComposedShadowTreeWalker::traverseParent):
        * dom/ElementShadow.cpp:
        (WebCore::ElementShadow::ElementShadow):
        (WebCore::ElementShadow::attach):
        (WebCore::ElementShadow::insertionPointFor):
        (WebCore::ElementShadow::distributionItemFor):
        (WebCore::ElementShadow::recalcStyle):
        (WebCore::ElementShadow::needsRedistributing):
        (WebCore::ElementShadow::hostChildrenChanged):
        (WebCore::ElementShadow::setNeedsRedistributing):
        * dom/ElementShadow.h:
        (WebCore):
        (ElementShadow):
        (WebCore::ElementShadow::distributor):
        (WebCore::ElementShadow::clearNeedsRedistributing):
        * dom/NodeRenderingContext.cpp:
        (WebCore::NodeRenderingContext::NodeRenderingContext):
        (WebCore::nextRendererOfInsertionPoint):
        (WebCore::previousRendererOfInsertionPoint):
        (WebCore::firstRendererOfInsertionPoint):
        (WebCore::lastRendererOfInsertionPoint):
        * dom/ShadowRoot.cpp:
        * dom/ShadowRoot.h:
        (WebCore):
        * html/shadow/ContentDistributor.cpp: Renamed from Source/WebCore/html/shadow/HTMLContentSelector.cpp.
        (WebCore):
        (WebCore::ContentDistribution::ContentDistribution):
        (WebCore::ContentDistribution::~ContentDistribution):
        (WebCore::ContentDistribution::find):
        (WebCore::ContentDistribution::clear):
        (WebCore::ContentDistribution::append):
        (WebCore::ContentDistributor::ContentDistributor):
        (WebCore::ContentDistributor::~ContentDistributor):
        (WebCore::ContentDistributor::distribute):
        (WebCore::ContentDistributor::clearDistribution):
        (WebCore::ContentDistributor::findFor):
        (WebCore::ContentDistributor::findInsertionPointFor):
        (WebCore::ContentDistributor::willDistribute):
        (WebCore::ContentDistributor::didDistribute):
        (WebCore::ContentDistributor::preparePoolFor):
        * html/shadow/ContentDistributor.h: Added.
        (WebCore):
        (ContentDistribution):
        (Item):
        (WebCore::ContentDistribution::Item::insertionPoint):
        (WebCore::ContentDistribution::Item::node):
        (WebCore::ContentDistribution::Item::next):
        (WebCore::ContentDistribution::Item::previous):
        (WebCore::ContentDistribution::Item::create):
        (WebCore::ContentDistribution::Item::Item):
        (WebCore::ContentDistribution::first):
        (WebCore::ContentDistribution::last):
        (WebCore::ContentDistribution::firstNode):
        (WebCore::ContentDistribution::lastNode):
        (WebCore::ContentDistribution::isEmpty):
        (ContentDistributor):
        (Translator):
        (WebCore::ContentDistributor::Translator::hash):
        (WebCore::ContentDistributor::Translator::equal):
        (WebCore::ContentDistributor::Hash::hash):
        (WebCore::ContentDistributor::Hash::equal):
        (Hash):
        (WebCore::ContentDistributor::inDistribution):
        (WebCore::ContentDistributor::poolIsReady):
        * html/shadow/HTMLContentElement.cpp:
        (WebCore::HTMLContentElement::parseAttribute):
        * html/shadow/HTMLContentSelector.h: Removed.
        * html/shadow/InsertionPoint.cpp:
        (WebCore::InsertionPoint::InsertionPoint):
        (WebCore::InsertionPoint::detach):
        (WebCore::InsertionPoint::distributeHostChildren):
        (WebCore::InsertionPoint::clearDistribution):
        (WebCore::InsertionPoint::attachDistributedNode):
        (WebCore::InsertionPoint::assignShadowRoot):
        (WebCore::InsertionPoint::clearAssignment):
        * html/shadow/InsertionPoint.h:
        (WebCore::InsertionPoint::distribution):
        (WebCore::InsertionPoint::hasDistribution):

2012-05-14  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r116969.
        http://trac.webkit.org/changeset/116969
        https://bugs.webkit.org/show_bug.cgi?id=86386

        i accidentally the icondatabase (Requested by kling on
        #webkit).

        * loader/icon/IconDatabase.cpp:
        (WebCore::IconDatabase::synchronousIconForPageURL):
        (WebCore::IconDatabase::retainIconForPageURL):
        (WebCore::IconDatabase::releaseIconForPageURL):
        (WebCore::IconDatabase::retainedPageURLCount):
        (WebCore::IconDatabase::performURLImport):
        (WebCore::IconDatabase::syncThreadMainLoop):
        * loader/icon/IconDatabase.h:
        (IconDatabase):

2012-05-14  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Unreviewed build fix. Fix for wxMSW windows.h load order bug.
        
        * platform/graphics/wx/ImageBufferDataWx.h:

2012-05-14  Eric Carlson  <eric.carlson@apple.com>

        <video> won't load when URL ends with .php
        https://bugs.webkit.org/show_bug.cgi?id=86308

        Reviewed by Darin Adler.

        Test: http/tests/media/video-query-url.html

        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::MediaPlayer): Initialize m_typeInferredFromExtension.
        (WebCore::MediaPlayer::load): Set m_typeInferredFromExtension appropriately.
        (WebCore::MediaPlayer::loadWithNextMediaEngine): If we don't find a media engine registered
            for a MIME type, and the type was inferred from the extension, give the first registered
            media engine a chance anwyay just as we do when there is no MIME type at all.
        * platform/graphics/MediaPlayer.h: Add m_typeInferredFromExtension.

2012-05-14  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: do not update $0-$4 console variables for the objects from loaded from file heap snapshot.
        https://bugs.webkit.org/show_bug.cgi?id=86371

        When the user selects an object in HeapSnapshot we are updating $0 variable in console API.
        But if the snapshot was loaded from file then we can't map object id for the selected obect
        from the snapshot to the live objects in the inspected page.

        Reviewed by Yury Semikhatsky.

        * inspector/front-end/HeapSnapshotView.js:
        (WebInspector.HeapSnapshotView.prototype._inspectedObjectChanged):
        (WebInspector.HeapSnapshotView.prototype._updateFilterOptions):
        (WebInspector.HeapProfileHeader):
        (WebInspector.HeapProfileHeader.prototype.canSaveToFile):
        (WebInspector.HeapProfileHeader.prototype.saveToFile):
        * inspector/front-end/ProfilesPanel.js:
        (WebInspector.ProfileHeader):
        (WebInspector.ProfileHeader.prototype.loadFromFile):
        (WebInspector.ProfileHeader.prototype.fromFile):
        (WebInspector.ProfilesPanel.prototype._loadFromFile):

2012-05-14  Andrey Kosyakov  <caseq@chromium.org>

        Web Inspector: [Extensions API] allow extensions to evaluate in the context of their content scripts
        https://bugs.webkit.org/show_bug.cgi?id=86361

        Reviewed by Yury Semikhatsky.

        Test: inspector/extensions/extensions-eval-content-script.html

        * inspector/front-end/ExtensionAPI.js: 
        (injectedExtensionAPI.ExtensionSidebarPaneImpl.prototype.setExpression): Added evaluateOptions optional parameter.
        (injectedExtensionAPI.InspectedWindow.prototype.eval):
        (injectedExtensionAPI.extractCallbackArgument): A helper to extract callback function from last argument.
        * inspector/front-end/ExtensionPanel.js:
        (WebInspector.ExtensionSidebarPane.prototype.setExpression): Added evaluateOptions optional parameter.
        * inspector/front-end/ExtensionServer.js:
        (WebInspector.ExtensionServer.prototype._onSetSidebarContent): Use ExtensionServer.evaluate() wrapper.
        (WebInspector.ExtensionServer.prototype._onEvaluateOnInspectedPage): Ditto.
        (WebInspector.ExtensionServer.prototype._normalizePath):
        (WebInspector.ExtensionServer.prototype.evaluate): A wrapper for PageAgent.evaluate() that handles evaluateOptions.
        * inspector/front-end/JavaScriptContextManager.js:
        (WebInspector.JavaScriptContextManager.prototype.contextByFrameAndSecurityOrigin): Expose interface to locate context id by frame and content script security origin.
        (WebInspector.FrameEvaluationContext.prototype._addExecutionContext): Maintain contexts sorted by name.
        (WebInspector.FrameEvaluationContext.prototype.isolatedContexts): ditto (skip sorting when returning contexts)
        (WebInspector.FrameEvaluationContext.prototype.contextBySecurityOrigin):
        * inspector/front-end/inspector.js: Hold/expose javaScriptContextManager.

2012-05-14  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: preserve tab index while widening / shrinking tabbed pane area.
        https://bugs.webkit.org/show_bug.cgi?id=86359

        Reviewed by Vsevolod Vlasov.

        After the drag'n'drop reorder, we should preserve tab index while widening /
        shrinking the tabbed pane area.

        * inspector/front-end/TabbedPane.js:
        (WebInspector.TabbedPane.prototype._innerCloseTab):
        (WebInspector.TabbedPane.prototype._showTabElement):
        (WebInspector.TabbedPane.prototype._hideTabElement):
        (WebInspector.TabbedPane.prototype._updateTabsDropDown):
        (WebInspector.TabbedPane.prototype.elementsToRestoreScrollPositionsFor):
        (WebInspector.TabbedPane.prototype._insertBefore):
        (WebInspector.TabbedPaneTab):
        (WebInspector.TabbedPaneTab.prototype._createTabElement):
        (WebInspector.TabbedPaneTab.prototype._tabDragging):

2012-05-14  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Request / response headers should be stored in name-value pairs array, not a map on front-end.
        https://bugs.webkit.org/show_bug.cgi?id=86357

        Reviewed by Pavel Feldman.

        Storing headers as name-value pairs array information more accurate and allows
        to treat Set-Cookie headers (which become not parseable when joined by comma) correctly.

        * inspector/front-end/AuditRules.js:
        (WebInspector.AuditRules.GzipRule.prototype._isCompressed):
        (WebInspector.AuditRules.CacheControlRule.prototype.responseHeader):
        (WebInspector.AuditRules.CacheControlRule.prototype.hasResponseHeader):
        (WebInspector.AuditRules.CacheControlRule.prototype.responseHeaderMatch):
        * inspector/front-end/HAREntry.js:
        (WebInspector.HAREntry.prototype._buildRequest):
        (WebInspector.HAREntry.prototype._buildResponse):
        * inspector/front-end/NetworkManager.js:
        (WebInspector.NetworkDispatcher.prototype._headersMapToHeadersArray):
        (WebInspector.NetworkDispatcher.prototype._updateNetworkRequestWithRequest):
        (WebInspector.NetworkDispatcher.prototype._updateNetworkRequestWithResponse):
        (WebInspector.NetworkDispatcher.prototype.webSocketWillSendHandshakeRequest):
        (WebInspector.NetworkDispatcher.prototype.webSocketHandshakeResponseReceived):
        * inspector/front-end/NetworkRequest.js:
        (WebInspector.NetworkRequest.prototype.get transferSize):
        (WebInspector.NetworkRequest.prototype.get requestHeaders):
        (WebInspector.NetworkRequest.prototype.get requestHeadersText):
        (WebInspector.NetworkRequest.prototype.get responseHeaders):
        (WebInspector.NetworkRequest.prototype.get responseHeadersText):
        (WebInspector.NetworkRequest.prototype._headerValue):
        * inspector/front-end/RequestHeadersView.js:
        (WebInspector.RequestHeadersView.prototype._refreshRequestHeaders):
        (WebInspector.RequestHeadersView.prototype._refreshResponseHeaders):
        (WebInspector.RequestHeadersView.prototype._refreshHeaders):
        * platform/chromium/support/WebHTTPLoadInfo.cpp:
        (WebKit::addHeader):

2012-05-14  Sriram Neelakandan  <sriram.neelakandan@gmail.com>

        [Gtk][DOM Bindings] Feature-protected interface usage in set/get property must be under condition guards
        https://bugs.webkit.org/show_bug.cgi?id=86060

        Reviewed by Martin Robinson.

        Property set/get functions generated was referencing WebCore::interface without any condition guard.
        This issue was triggered usually when an interface gets disabled; For instance; --disable-video, disables WebCore::HTMLMediaElement.
        Also updated the GObject binding reference tests

        No new tests - covered by existing bindings tests

        * bindings/scripts/CodeGeneratorGObject.pm:
        (GenerateProperties):
        * bindings/scripts/test/GObject/WebKitDOMTestActiveDOMObject.cpp:
        (webkit_dom_test_active_dom_object_get_property):
        * bindings/scripts/test/GObject/WebKitDOMTestEventConstructor.cpp:
        (webkit_dom_test_event_constructor_get_property):
        * bindings/scripts/test/GObject/WebKitDOMTestException.cpp:
        (webkit_dom_test_exception_get_property):
        * bindings/scripts/test/GObject/WebKitDOMTestInterface.cpp:
        (webkit_dom_test_interface_set_property):
        (webkit_dom_test_interface_get_property):
        * bindings/scripts/test/GObject/WebKitDOMTestObj.cpp:
        (webkit_dom_test_obj_set_property):
        (webkit_dom_test_obj_get_property):
        * bindings/scripts/test/GObject/WebKitDOMTestSerializedScriptValueInterface.cpp:
        (webkit_dom_test_serialized_script_value_interface_get_property):

2012-05-14  Alexander Pavlov  <apavlov@chromium.org>

        Web Inspector: [Styles] css properties copied into clipboard contain extra line breaks before color values
        https://bugs.webkit.org/show_bug.cgi?id=86372

        Reviewed by Vsevolod Vlasov.

        The "display: block" property found in the ".swatch-inner" CSS class was causing the issue
        (an additional \n was rendered in the plain text value).

        * inspector/front-end/inspector.css:
        (.swatch-inner):

2012-05-14  Pavel Feldman  <pfeldman@chromium.org>

        [Qt] REGRESSION (r116789): inspector/debugger/script-formatter-console.html fails
        https://bugs.webkit.org/show_bug.cgi?id=86336

        Reviewed by Yury Semikhatsky.

        * inspector/front-end/ConsoleMessage.js:
        (WebInspector.ConsoleMessageImpl.prototype.location):

2012-05-14  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        TiledBackingStore: Prevent partial tile updates when they intersect the keep rect.
        https://bugs.webkit.org/show_bug.cgi?id=85488

        Reviewed by Kenneth Rohde Christiansen.

        Right now an invalidate can cause problems for tiles on the boundary of the keep
        rect. Intersecting the dirty rect causes only part of the tile to be updated,
        and the glitch becomes visible if the user scrolls this tile back into the viewport.

        * platform/graphics/TiledBackingStore.cpp:
        (WebCore::TiledBackingStore::invalidate):

2012-05-14  Alexander Pavlov  <apavlov@chromium.org>

        Web Inspector: Esc should revert the colorpicker-modifed color to the original
        https://bugs.webkit.org/show_bug.cgi?id=86349

        Reviewed by Vsevolod Vlasov.

        A boolean parameter has been added to the Spectrum's hide() method to denote the picker cancellation,
        which gets passed into the "Hidden" event listeners. StylesSidebarPane is made to remember the original property value
        when the picker is opened, and restore it if the color picker is cancelled.

        * inspector/front-end/Spectrum.js:
        (WebInspector.Spectrum):
        (WebInspector.Spectrum.prototype.toggle):
        (WebInspector.Spectrum.prototype.show):
        (WebInspector.Spectrum.prototype.hide):
        (WebInspector.Spectrum.prototype._onKeyDown):
        * inspector/front-end/StylesSidebarPane.js:
        (WebInspector.StylesSidebarPane.prototype.update):
        (WebInspector.StylesSidebarPane.prototype.willHide):
        (WebInspector.StylePropertyTreeElement.prototype.updateTitle.):

2012-05-14  Zeno Albisser  <zeno@webkit.org>

        [Qt] TextureMapperGL::drawTexture marked OVERRIDE but does not override any member function.
        https://bugs.webkit.org/show_bug.cgi?id=86347

        This bug was introduced by r116834.
        TextureMapperGL implements two drawTexture functions.
        The first one takes a BitmapTexture as an argument and does override TextureMapper::drawTexture().
        The second one takes a texture id as an argument and does not override any member function.

        * platform/graphics/texmap/TextureMapperGL.h:

2012-05-12  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: implement tabs reordering via drag'n'drop.
        https://bugs.webkit.org/show_bug.cgi?id=86294

        Reviewed by Yury Semikhatsky.

        * inspector/front-end/TabbedPane.js:
        (WebInspector.TabbedPaneTab.prototype._createTabElement):
        (WebInspector.TabbedPaneTab.prototype._tabClicked):
        (WebInspector.TabbedPaneTab.prototype._tabMouseDown):
        (WebInspector.TabbedPaneTab.prototype._tabContextMenu):
        (WebInspector.TabbedPaneTab.prototype._tabMouseMove):
        (WebInspector.TabbedPaneTab.prototype._tabDragging):
        (WebInspector.TabbedPaneTab.prototype._endTabDragging):

2012-05-14  MORITA Hajime  <morrita@google.com>

        Should have Node::inDetach() for assertion purposes.
        https://bugs.webkit.org/show_bug.cgi?id=86157

        Reviewed by Darin Adler.

        Implemented Node::inDetach() and added an assertio in Document::setFocusedNode().
        This is a follow up of r116644 which removes inDetach() checking.

        No new tests. Just adding an asssertion.

        * dom/Document.cpp:
        (WebCore::Document::setFocusedNode):
        * dom/Node.cpp:
        (WebCore):
        (WebCore::Node::inDetach):
        (WebCore::Node::detach):
        * dom/Node.h:
        (Node):

2012-05-13  Noel Gordon  <noel.gordon@gmail.com>

        [chromium] Remove platform/image-decoders/xbm from WebCore.gyp
        https://bugs.webkit.org/show_bug.cgi?id=86333

        Reviewed by Adam Barth.

        No new tests. No change in behavior.

        * WebCore.gyp/WebCore.gyp: Remove reference to platform/image-decoders/xbm
        since that directory was removed from the repository long ago.

2012-05-13  Darin Adler  <darin@apple.com>

        [CG] Unneeded CFRetain/Release of CGImageRef in BitmapImage::draw
        https://bugs.webkit.org/show_bug.cgi?id=86332

        Reviewed by Dan Bernstein.

        * platform/graphics/cg/ImageCG.cpp:
        (WebCore::BitmapImage::draw): Don't use RetainPtr since the result of
        the function is used before anything could call CFRelease on it.

2012-05-13  Darin Adler  <darin@apple.com>

        Listeners map uses raw pointers, but should use OwnPtr
        https://bugs.webkit.org/show_bug.cgi?id=86298

        Reviewed by Dan Bernstein.

        * bindings/js/PageScriptDebugServer.cpp:
        (WebCore::PageScriptDebugServer::~PageScriptDebugServer): Removed call
        to deleteAllValues since the destructor now takes care of this
        (WebCore::PageScriptDebugServer::addListener): Changed idiom of the add
        function call here to use adoptPtr.
        (WebCore::PageScriptDebugServer::removeListener): Added a now-needed
        call to get and removed a now-uneeeded call to delete.
        * bindings/js/PageScriptDebugServer.h: Changed the key type of
        PageListenersMap to OwnPtr.

        * bindings/js/ScriptDebugServer.cpp:
        (WebCore::ScriptDebugServer::~ScriptDebugServer): Removed code to delete
        the values in m_pageListenersMap. This map was never used and so I have
        removed it.
        * bindings/js/ScriptDebugServer.h: Removed the type PageListenersMap
        and the unused data member, m_pageListenersMap.

2012-05-13  Yoshifumi Inoue  <yosin@chromium.org>

        [Forms] Move ValidityState methods implementation to another place
        https://bugs.webkit.org/show_bug.cgi?id=86058

        Reviewed by Kent Tamura.

        This patch changes ValidityState class for limiting scope of
        number/range input type related methods for introducing decimal
        arithmetic.

        Methods related to validation are moved from ValidateState to
        input, select and textarea elements with virtual method based
        dispatching via FormAssociateElement instead of tag name
        dispatching so far for code simplification.

        No new tests. This patch doesn't change behavior.

        * html/FormAssociatedElement.cpp:
        (WebCore::FormAssociatedElement::customError): Added. Called from ValidateState. Returns custom error mssage in member variable.
        (WebCore::FormAssociatedElement::patternMismatch): Added.  Called from ValidateState. This is default implementation.
        (WebCore::FormAssociatedElement::rangeOverflow): Added.  Called from ValidateState. This is default implementation.
        (WebCore::FormAssociatedElement::rangeUnderflow): Added.  Called from ValidateState. This is default implementation.
        (WebCore::FormAssociatedElement::stepMismatch): Added.  Called from ValidateState. This is default implementation.
        (WebCore::FormAssociatedElement::tooLong): Added.  Called from ValidateState. This is default implementation.
        (WebCore::FormAssociatedElement::typeMismatch): Added.  Called from ValidateState. This is default implementation.
        (WebCore::FormAssociatedElement::valid): Added.  Called from ValidateState. This is default implementation.
        (WebCore::FormAssociatedElement::valueMissing): Added.  Called from ValidateState. This is default implementation.
        (WebCore::FormAssociatedElement::customValidationMessage): Added.  Called from ValidateState. This is default implementation.
        (WebCore::FormAssociatedElement::validationMessage): Added.  Called from ValidateState. This is default implementation.
        (WebCore::FormAssociatedElement::setCustomValidity): Added.  set custom error message.
        * html/FormAssociatedElement.h:
        (FormAssociatedElement): Added new instance value m_customValidationMessage.
        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLFormControlElement::validationMessage): Removed. Note: HTMLInputElement, HTMLSelectElement, and HTMLTextAreaElement implement this method.
        (WebCore::HTMLFormControlElement::setCustomValidity): Changed. Calls base class setCustomValidity.
        * html/HTMLFormControlElement.h:
        (HTMLFormControlElement):
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::isValidValue): Call m_inputType methods instead of HTMLInputElement's.
        (WebCore::HTMLInputElement::tooLong): Call m_inputType methods instead of HTMLInputElement's.
        (WebCore):
        (WebCore::HTMLInputElement::typeMismatch): Move implementation to InputType.
        (WebCore::HTMLInputElement::valueMissing):  Move implementation to InputType.
        (WebCore::HTMLInputElement::patternMismatch): Move implementation to InputType.
        (WebCore::HTMLInputElement::rangeUnderflow): Move implementation to InputType.
        (WebCore::HTMLInputElement::rangeOverflow): Move implementation to InputType.
        (WebCore::HTMLInputElement::validationMessage): Move implementation to InputType.
        (WebCore::HTMLInputElement::stepMismatch): Move implementation to InputType.
        (WebCore::HTMLInputElement::isInRange): Call m_inputType methods instead of HTMLInputElement's.
        (WebCore::HTMLInputElement::isOutOfRange): Call m_inputType methods instead of HTMLInputElement's.
        * html/HTMLInputElement.h:
        (HTMLInputElement): Make tooLong method private.
        * html/HTMLObjectElement.h: Add "virtual" and "OVERRIDE".
        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::validationMessage): Added. Implementation for HTMLSelectElement.
        (WebCore::HTMLSelectElement::valueMissing): Added. Implementation for HTMLSelectElement.
        * html/HTMLSelectElement.h:
        (HTMLSelectElement):  Added entries for newly added methods.
        * html/HTMLTextAreaElement.cpp:
        (WebCore::HTMLTextAreaElement::validationMessage): Added. Implementation for HTMLTextAreaElement.
        (WebCore::HTMLTextAreaElement::valueMissing): Added. Implementation for HTMLTextAreaElement.
        (WebCore::HTMLTextAreaElement::tooLong): Added. Implementation for HTMLTextAreaElement.
        * html/HTMLTextAreaElement.h:
        (HTMLTextAreaElement): Added entries for newly added methods. Change tooLong and valueMissing private.
        * html/InputType.cpp:
        (WebCore::InputType::stepMismatch): Change method signature.
        (WebCore::InputType::alignValueForStep):  Changed for calling InputClass instead of HTMLINputElement.
        (WebCore::InputType::stepUpFromRenderer):  Added. Moved from HTMLInputElement.
        (WebCore::InputType::validationMessage): Added.  Moved from HTMLInputElement.
        * html/InputType.h:
        (InputType): Added entries for newly added methods and update methods signature.
        * html/ValidityState.cpp: Move actual implementation to FormAssociatedElement and derived classes for localizing implementation change of elements and input types.
        (WebCore::ValidityState::validationMessage): Changed to call FormAssociatedElement's method.
        (WebCore::ValidityState::valueMissing): Changed to call FormAssociatedElement's method.
        (WebCore::ValidityState::typeMismatch): Changed to call FormAssociatedElement's method.
        (WebCore::ValidityState::patternMismatch): Changed to call FormAssociatedElement's method.
        (WebCore::ValidityState::tooLong): Changed to call FormAssociatedElement's method.
        (WebCore::ValidityState::rangeUnderflow): Changed to call FormAssociatedElement's method.
        (WebCore::ValidityState::rangeOverflow): Changed to call FormAssociatedElement's method.
        (WebCore::ValidityState::stepMismatch): Changed to call FormAssociatedElement's method.
        (WebCore::ValidityState::customError): Changed to call FormAssociatedElement's method.
        (WebCore::ValidityState::valid):
        * html/ValidityState.h:
        (ValidityState): Remove custom validation message related things.

2012-05-13  Mike Lawther  <mikelawther@chromium.org>

        Heap-use-after-free in WTF::HashMap<int, WTF::RefPtr<WebCore::CalculationValue>, WTF::IntHash<unsigned int>, WTF::HashTrait
        https://bugs.webkit.org/show_bug.cgi?id=85195

        This bug was caused by Length not understanding that calc expressions shouldn't be 
        blended - a Length with a calc expression handle was created without incrementing
        the ref count of the expression. Length no longer attempts to blend calc expressions,
        http://webkit.org/b/86160 has been filed to track expression blending. Fixing this fixed
        the crash.

        Once this was fixed, the RenderStyle diff checker thought the style was changing,
        as Length didn't know how to compare calc expressions, resulting in an infinite
        loop of style recalcs. Expressions can now compare themselves.

        Reviewed by Darin Adler.

        Tests: css3/calc/transition-crash.html
               css3/calc/transition-crash2.html

        * platform/CalculationValue.h:
        (WebCore::CalcExpressionNode::CalcExpressionNode):
        (CalcExpressionNode):
        (WebCore::CalcExpressionNode::type):
        (CalculationValue):
        (WebCore::CalculationValue::operator==):
        (WebCore::CalcExpressionNumber::CalcExpressionNumber):
        (WebCore::CalcExpressionNumber::operator==):
        (CalcExpressionNumber):
        (WebCore::CalcExpressionLength::CalcExpressionLength):
        (WebCore::CalcExpressionLength::operator==):
        (CalcExpressionLength):
        (WebCore::CalcExpressionBinaryOperation::CalcExpressionBinaryOperation):
        (WebCore::CalcExpressionBinaryOperation::operator==):
        (CalcExpressionBinaryOperation):
        * platform/Length.cpp:
        (WebCore::Length::isCalculatedEqual):
        (WebCore):
        * platform/Length.h:
        (WebCore::Length::operator==):
        (Length):
        (WebCore::Length::blend):

2012-05-13  Darin Adler  <darin@apple.com>

        Roll out local changes accidentally landed in r116905.

        * platform/graphics/GraphicsContext.h:
        * platform/graphics/cg/GraphicsContextCG.cpp:
        * platform/graphics/cg/ImageCG.cpp:

2012-05-13  Rob Buis  <rbuis@rim.com>

        Use emptyString instead of String("")
        https://bugs.webkit.org/show_bug.cgi?id=86305

        Reviewed by Darin Adler.

        Use emptyString() instead of String("") because it is better style and faster.

        No new tests. No change in behavior.

        * Modules/webdatabase/AbstractDatabase.cpp:
        (WebCore::AbstractDatabase::performOpenAndVerify):
        * Modules/websockets/ThreadableWebSocketChannelClientWrapper.cpp:
        (WebCore::ThreadableWebSocketChannelClientWrapper::subprotocol):
        (WebCore::ThreadableWebSocketChannelClientWrapper::extensions):
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::setValueFromRenderer):
        * platform/SharedBufferChunkReader.cpp:
        (WebCore::SharedBufferChunkReader::nextChunkAsUTF8StringWithLatin1Fallback):
        * platform/network/curl/ResourceHandleManager.cpp:
        (WebCore::ResourceHandleManager::setProxyInfo):
        * platform/text/LocaleICU.cpp:
        (WebCore::LocaleICU::initializeLocalizedDateFormatText):
        * rendering/RenderQuote.cpp:
        (WebCore::RenderQuote::originalText):
        * storage/StorageNamespaceImpl.cpp:
        (WebCore::StorageNamespaceImpl::localStorageNamespace):
        * svg/SVGStringList.cpp:
        (WebCore::SVGStringList::reset):

2012-05-13  Darin Adler  <darin@apple.com>

        Image::initPlatformData is always an empty function so we can remove it
        https://bugs.webkit.org/show_bug.cgi?id=86297

        Reviewed by Dan Bernstein.

        * platform/graphics/BitmapImage.h: Removed declaration of initPlatformData.

        * platform/graphics/BitmapImage.cpp:
        (WebCore::BitmapImage::BitmapImage): Removed call to initPlatformData.
        * platform/graphics/cairo/BitmapImageCairo.cpp:
        (WebCore::BitmapImage::BitmapImage): Ditto.
        * platform/graphics/cg/ImageCG.cpp:
        (WebCore::BitmapImage::BitmapImage): Ditto.
        * platform/graphics/chromium/ImageChromiumMac.mm: Removed empty
        initPlatformData function.
        * platform/graphics/efl/ImageEfl.cpp: Ditto.
        * platform/graphics/gtk/ImageGtk.cpp:
        * platform/graphics/mac/ImageMac.mm:
        * platform/graphics/openvg/ImageOpenVG.cpp:
        (WebCore::BitmapImage::BitmapImage): Removed call to initPlatformData.
        Removed empty initPlatformData function.
        * platform/graphics/qt/ImageQt.cpp:
        (WebCore::BitmapImage::BitmapImage): Removed call to initPlatformData.
        Removed empty initPlatformData function.
        * platform/graphics/skia/ImageSkia.cpp: Removed empty initPlatformData function.
        * platform/graphics/win/ImageWin.cpp: Ditto.
        * platform/graphics/wx/ImageWx.cpp: Ditto.
        (WebCore::BitmapImage::BitmapImage): Removed call to initPlatformData.

2012-05-13  Darin Adler  <darin@apple.com>

        RenderView::selectionBounds and RenderView::setSelection use maps with raw pointers that should be OwnPtr
        https://bugs.webkit.org/show_bug.cgi?id=86300

        Reviewed by Eric Seidel.

        * rendering/RenderView.cpp:
        (WebCore::RenderView::selectionBounds): Changed SelectionMap type to use OwnPtr.
        Added code to do adoptPtr as needed and removed explicit delete code.
        (WebCore::RenderView::setSelection): Changed SelectedBlockMap type to use OwnPtr.
        Added code to do adoptPtr as needed and removed explicit delete code.

2012-05-13  Darin Adler  <darin@apple.com>

        FractionalLayoutUnit class has unneeded redundant uses of "inline" keyword
        https://bugs.webkit.org/show_bug.cgi?id=86301

        Reviewed by Andreas Kling.

        * platform/FractionalLayoutUnit.h: Removed uses of inline for functions
        defined inside a class definition. The C++ language defines that all such
        functions are treated as if specified with inline, and explicitly stating
        inline in addition does not add anything or change behavior.

2012-05-13  Darin Adler  <darin@apple.com>

        Dangling node to ID maps vector uses raw pointers, but should use OwnPtr
        https://bugs.webkit.org/show_bug.cgi?id=86299

        Reviewed by Pavel Feldman.

        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::releaseDanglingNodes): Removed now-unneeded call
        to deleteAllValues since the clear function now takes care of that.
        (WebCore::InspectorDOMAgent::pushNodePathToFrontend): Added code that uses
        adoptPtr and release as neeed to deal with a Vector<OwnPtr>.
        * inspector/InspectorDOMAgent.h: Changed m_danglingNodeToIdMaps to be
        Vector<OwnPtr> instead of a vector of raw pointers.

2012-05-13  Victor Carbune  <vcarbune@adobe.com>

        Volume slider needs to be displayed below the mute button
        https://bugs.webkit.org/show_bug.cgi?id=85990

        Reviewed by Dimitri Glazkov.

        Added back code for rendering offset, but used only when the volume slider
        needs to be displayed below the controls.

        Test: media/media-volume-slider-rendered-below.html

        * css/mediaControlsChromium.css:
        (audio::-webkit-media-controls-volume-slider-container, video::-webkit-media-controls-volume-slider-container):
        Changed positioning of the slider to absolute, otherwise it is not possible to position it from the layout() method.
        * css/mediaControlsQuickTime.css:
        Added back the double mute-button and changed the z-index of the original button. When the slider is displayed
        the second mute button is actually there.
        (audio::-webkit-media-controls-mute-button, video::-webkit-media-controls-mute-button):
        (audio::-webkit-media-controls-volume-slider-container, video::-webkit-media-controls-volume-slider-container):
        (audio::-webkit-media-controls-volume-slider-mute-button, video::-webkit-media-controls-volume-slider-mute-button):
        Added copy.
        * html/shadow/MediaControlElements.cpp:
        (WebCore::MediaControlPanelElement::makeTransparent): Disabled the possible of hiding controls. WebVTT rendering
        in the place of controls when these are visible is not possible with the current code.
        (RenderMediaVolumeSliderContainer):
        (WebCore):
        (WebCore::RenderMediaVolumeSliderContainer::RenderMediaVolumeSliderContainer):
        (WebCore::RenderMediaVolumeSliderContainer::layout):
        Checked if the absolute coordinates of the corner of the slider would be rendered outside the page. This part of the
        code is faulty if display:none is toggled on the controls.
        (WebCore::MediaControlVolumeSliderContainerElement::createRenderer):
        * html/shadow/MediaControlElements.h:
        (MediaControlVolumeSliderContainerElement):
        * html/shadow/MediaControlRootElement.cpp:
        (WebCore::MediaControlRootElement::create):

2012-05-13  Igor Oliveira  <igor.o@sisa.samsung.com>

        [Texmap] TextureMapperAnimations does not support keyframe with multiple animations
        https://bugs.webkit.org/show_bug.cgi?id=86303

        Qt and GTK, in WebKit1, use TextureMapper to store AC animations using
        TextureMapperAnimations::add(keyframeName, TextureMapperAnimation). And when a 
        CSS animation animates several CSS properties, TextureMapperAnimations::add is
        called more than once with the same keyframeName value. However, currently,
        TextureMapperAnimations can not store more than one animated property in the keyframe
        because it is using HashMap<String, TextureMapperAnimation>, and WebKit HashMap 
        does not support add the same key twice.

        Reviewed by Noam Rosenthal.

        * platform/graphics/texmap/TextureMapperAnimation.cpp:
        (WebCore::TextureMapperAnimations::hasActiveAnimationsOfType):
        (WebCore::TextureMapperAnimations::hasRunningAnimations):
        (WebCore::TextureMapperAnimations::add):
        (WebCore):
        (WebCore::TextureMapperAnimations::pause):
        (WebCore::TextureMapperAnimations::apply):
        * platform/graphics/texmap/TextureMapperAnimation.h:
        (TextureMapperAnimations): Use HashMap<String, Vector<TextureMapperAnimation> >,
        so we can support an keyframe with multiple animations.

2012-05-12  Abhishek Arya  <inferno@chromium.org>

        Crash in HTMLSelectElement::setOption
        https://bugs.webkit.org/show_bug.cgi?id=85420

        Reviewed by Eric Seidel
        
        RefPtr before option in HTMLSelectElement::setOption since it
        can get destroyed due to mutation events.

        Test: fast/dom/HTMLSelectElement/option-add-crash.html

        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::setOption):

2012-05-12  Robin Dunn  <robin@alldunn.com>

        [wx] Restore text paste implementation.
        https://bugs.webkit.org/show_bug.cgi?id=86311

        Reviewed by Kevin Ollivier.

        * platform/wx/PasteboardWx.cpp:
        (WebCore::Pasteboard::plainText):

2012-05-12  Philip Rogers  <pdr@google.com>

        Cleanup before changing attributeName in SVG <animate>
        https://bugs.webkit.org/show_bug.cgi?id=86100

        Reviewed by Nikolas Zimmermann.

        Changing attributeName caused a crash because references were not removed from the old target.
        This change simply cleans up before changing attributeName in SVG animation elements.

        Test: svg/animations/dynamic-modify-attributename-crash.svg

        * svg/animation/SVGSMILElement.cpp:
        (WebCore::SVGSMILElement::svgAttributeChanged):

2012-05-12  Max Feil  <mfeil@rim.com>

        [BlackBerry] Allow the platform media player to determine the media element's paused/playing status
        https://bugs.webkit.org/show_bug.cgi?id=86235

        Reviewed by George Staikos.

        The platform media player needs to know when the HTMLMediaElement
        is not paused. This is to address problems when switching
        source element, which causes the destruction of the old
        MediaPlayerPrivate object and construction of a new one. The
        new one must resume playing ASAP if the old one was playing.

        Test: media/media-continues-playing-after-replace-source.html

        * platform/graphics/blackberry/MediaPlayerPrivateBlackBerry.cpp:
        (WebCore::MediaPlayerPrivate::isElementPaused):
        (WebCore):
        * platform/graphics/blackberry/MediaPlayerPrivateBlackBerry.h:
        (MediaPlayerPrivate):

2012-05-12  Yury Semikhatsky  <yurys@chromium.org>

        Web Inspector: heap profiler should allow revealing an element which is logged to the console
        https://bugs.webkit.org/show_bug.cgi?id=86204

        Reviewed by Pavel Feldman.

        JS objects in the console have context menu item that allows to reveal them in a heap snapshot view.

        * English.lproj/localizedStrings.js:
        * inspector/front-end/ConsoleMessage.js:
        (WebInspector.ConsoleMessageImpl.prototype._formatParameterAsObject):
        * inspector/front-end/ContextMenu.js:
        (WebInspector.ContextMenu.prototype.isEmpty):
        * inspector/front-end/DataGrid.js:
        (WebInspector.DataGridNode.prototype._detach):
        (WebInspector.DataGridNode.prototype.wasDetached):
        * inspector/front-end/HeapSnapshot.js:
        (WebInspector.HeapSnapshot.prototype.nodeClassName):
        (WebInspector.HeapSnapshotNodesProvider.prototype.nodePosition):
        * inspector/front-end/HeapSnapshotDataGrids.js:
        (WebInspector.HeapSnapshotSortableDataGrid):
        (WebInspector.HeapSnapshotSortableDataGrid.prototype.highlightObjectByHeapSnapshotId):
        (WebInspector.HeapSnapshotSortableDataGrid.prototype.highlightNode):
        (WebInspector.HeapSnapshotSortableDataGrid.prototype.nodeWasDetached):
        (WebInspector.HeapSnapshotSortableDataGrid.prototype._clearCurrentHighlight):
        (WebInspector.HeapSnapshotViewportDataGrid):
        (WebInspector.HeapSnapshotViewportDataGrid.prototype.highlightNode):
        (WebInspector.HeapSnapshotViewportDataGrid.prototype._onScroll):
        (WebInspector.HeapSnapshotConstructorsDataGrid):
        (WebInspector.HeapSnapshotConstructorsDataGrid.prototype.highlightObjectByHeapSnapshotId.didGetClassName):
        (WebInspector.HeapSnapshotConstructorsDataGrid.prototype.highlightObjectByHeapSnapshotId):
        (WebInspector.HeapSnapshotConstructorsDataGrid.prototype.setDataSource):
        * inspector/front-end/HeapSnapshotGridNodes.js:
        (WebInspector.HeapSnapshotGridNode.prototype.wasDetached):
        (WebInspector.HeapSnapshotConstructorNode.prototype.revealNodeBySnapshotObjectId):
        (WebInspector.HeapSnapshotConstructorNode.prototype.revealNodeBySnapshotObjectId.didPopulateChildren):
        * inspector/front-end/HeapSnapshotProxy.js:
        (WebInspector.HeapSnapshotProxy.prototype.nodeClassName):
        (WebInspector.HeapSnapshotProviderProxy.prototype.nodePosition):
        * inspector/front-end/ObjectPropertiesSection.js:
        (WebInspector.ObjectPropertiesSection.ContextMenuProvider):
        (WebInspector.ObjectPropertiesSection.ContextMenuProvider.prototype.populateContextMenu):
        (WebInspector.ObjectPropertiesSection.addContextMenuProvider):
        (WebInspector.ObjectPropertiesSection.prototype.enableContextMenu):
        (WebInspector.ObjectPropertiesSection.prototype._contextMenuEventFired):
        * inspector/front-end/ProfilesPanel.js:
        (WebInspector.ProfilesPanel.prototype.showObject):
        (WebInspector.RevealInHeapSnapshotContextMenuProvider):
        (WebInspector.RevealInHeapSnapshotContextMenuProvider.prototype.populateContextMenu.revealInSummaryView):
        (WebInspector.RevealInHeapSnapshotContextMenuProvider.prototype.populateContextMenu.didReceiveHeapObjectId):
        (WebInspector.RevealInHeapSnapshotContextMenuProvider.prototype.populateContextMenu):
        * inspector/front-end/profilesPanel.css:
        (.highlighted-row):
        (@-webkit-keyframes row_highlight):
        (to):

2012-05-12  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: move recording button state control out of addProfileHeader.
        https://bugs.webkit.org/show_bug.cgi?id=86293

        Reviewed by Yury Semikhatsky.

        * inspector/front-end/CSSSelectorProfileView.js:
        (WebInspector.CSSSelectorProfileType.prototype.buttonClicked):
        * inspector/front-end/HeapSnapshotView.js:
        (WebInspector.HeapSnapshotProfileType.prototype.buttonClicked):
        * inspector/front-end/ProfileView.js:
        (WebInspector.CPUProfileType.prototype.buttonClicked):
        * inspector/front-end/ProfilesPanel.js:
        (WebInspector.ProfileType.prototype.buttonClicked):
        (WebInspector.ProfilesPanel.prototype.toggleRecordButton):
        (WebInspector.ProfilesPanel.prototype.addProfileHeader):
        (WebInspector.ProfilesPanel.prototype.setRecordingProfile):
        (WebInspector.ProfilesPanel.prototype.takeHeapSnapshot.done):
        (WebInspector.ProfilesPanel.prototype.takeHeapSnapshot):

2012-05-12  Eugene Klyuchnikov  <eustas.bug@gmail.com>

        Web Inspector: Turn HelpScreen to be View.
        https://bugs.webkit.org/show_bug.cgi?id=85711

        Reviewed by Yury Semikhatsky.

        Motivation: for further UI changes, HelpSceen needs to be View.
        It is planned to combine Settings Screen and Shortcuts Screen in one
        tabbed screen.
        Bonus: "helpScreen.css" will be lazy-loaded.
        Additional changes: move settingsScreen logic out of inspector.js

        UI change, no test required.

        * WebCore.gypi: Change "helpScreen.css" file group.
        * inspector/front-end/HelpScreen.js: 
        (WebInspector.HelpScreen): Turned to View subclass.
        (WebInspector.HelpScreen.prototype.showModal): Remove "onHide" param
        (WebInspector.HelpScreen.prototype.hide): Ditto.
        (WebInspector.HelpScreen.prototype._onKeyDown): Adopt View members.
        (WebInspector.HelpScreen.prototype._onBlur): Ditto.
        * inspector/front-end/SettingsScreen.js: Adopt new workflow.
        (WebInspector.SettingsScreen): Put onHide function to member
        (WebInspector.SettingsScreen.prototype.willHide): Invoke onHide
        (WebInspector.SettingsController): Mediator pattern - this class
        takes care of status bar button - settings screen relationship.
        (WebInspector.SettingsController.prototype.get statusBarItem):
        Getter fot representative element.
        (WebInspector.SettingsController.prototype._buttonClicked):
        Classifies user action.
        (WebInspector.SettingsController.prototype._onHideSettingsScreen):
        Cleanup after settings screen is hidden.
        (WebInspector.SettingsController.prototype._showSettingsScreen):
        Presents settings screen.
        (WebInspector.SettingsController.prototype._hideSettingsScreen):
        Hides settings screen.
        * inspector/front-end/ShortcutsScreen.js: Adopt new workflow.
        (WebInspector.ShortcutsScreen.prototype.wasShown): Lazy initialization.
        * inspector/front-end/WorkerManager.js: Adopt new workflow.
        (WebInspector.WorkerManager.prototype._disconnectedFromWorker): Ditto.
        (WebInspector.WorkerTerminatedScreen.prototype.willHide): Ditto.
        * inspector/front-end/helpScreen.css: Fix spacing.
        (.help-window-outer): Ditto.
        (body.compact .help-window-outer): Ditto.
        (body.compact .help-window-main): Ditto.
        (body.compact .help-window-caption): Ditto.
        (.help-content): Ditto.
        (body.compact .help-content): Ditto.
        (.help-content select): Ditto.
        * inspector/front-end/inspector.html: Ditto.
        * inspector/front-end/inspector.js: Ditto.
        (WebInspector._createGlobalStatusBarItems): Create SettingsController.
        (WebInspector.documentKeyDown): Adopt new workflow.

2012-05-12  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: add tab context menu
        https://bugs.webkit.org/show_bug.cgi?id=86292

        Reviewed by Yury Semikhatsky.

        This tab context menu will have "Close", "Close Others" and "Close All".

        * English.lproj/localizedStrings.js:
        * inspector/front-end/TabbedPane.js:
        (WebInspector.TabbedPane.prototype.closeOtherTabs):
        (WebInspector.TabbedPaneTab.prototype._createTabElement):
        (WebInspector.TabbedPaneTab.prototype._tabClicked):
        (WebInspector.TabbedPaneTab.prototype._tabContextMenu):
        (WebInspector.TabbedPaneTab.prototype._tabContextMenu.closeOthers):
        (WebInspector.TabbedPaneTab.prototype._tabContextMenu.closeAll):

2012-05-12  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: make call frame selector pane focusable, allow Up / Down to select current call frame.
        https://bugs.webkit.org/show_bug.cgi?id=86291

        Reviewed by Yury Semikhatsky.

        This change makes sidebar section focusable, introduces key listeners for Up and Down.

        * inspector/front-end/CallStackSidebarPane.js:
        (WebInspector.CallStackSidebarPane):
        (WebInspector.CallStackSidebarPane.prototype.setStatus):
        (WebInspector.CallStackSidebarPane.prototype._treeKeyDown):
        * inspector/front-end/UISourceCode.js:
        * inspector/front-end/scriptsPanel.css:
        (#scripts-debug-toolbar img):

2012-05-12  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: unreviewed one line fix.

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

2012-05-12  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: Load context menu item has to be shown for all Profiles panel.
        https://bugs.webkit.org/show_bug.cgi?id=86290

        Reviewed by Pavel Feldman.

        * inspector/front-end/ProfilesPanel.js:
        (WebInspector.ProfilesPanel.prototype._handleContextMenuEvent):

2012-05-12  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: shrink SourceFrame editing API to two methods (was 4).
        https://bugs.webkit.org/show_bug.cgi?id=86288

        Reviewed by Yury Semikhatsky.

        Used specific workflow in two SourceFrame implementations.

        * inspector/front-end/JavaScriptSourceFrame.js:
        (WebInspector.JavaScriptSourceFrame.prototype.commitEditing):
        (WebInspector.JavaScriptSourceFrame.prototype.afterTextChanged):
        (WebInspector.JavaScriptSourceFrame.prototype._didEditContent):
        * inspector/front-end/ResourceView.js:
        (WebInspector.EditableResourceSourceFrame.prototype.commitEditing.callbackWrapper):
        (WebInspector.EditableResourceSourceFrame.prototype.commitEditing):
        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame.prototype.commitEditing):
        (WebInspector.TextViewerDelegateForSourceFrame.prototype.commitEditing):

2012-05-11  Yury Semikhatsky  <yurys@chromium.org>

        Web Inspector: allow showing arbitrary range of nodes in heap snapshot view
        https://bugs.webkit.org/show_bug.cgi?id=86230

        Reviewed by Pavel Feldman.

        Test: inspector/profiler/heap-snapshot-summary-show-ranges.html

        It was only possible to expand heap snapshot node children sequentially starting
        from the first child and then pressing either "Show next X items" or "Show all X items".
        This change makes it possible to show any range of children.

        * inspector/front-end/HeapSnapshot.js:
        (WebInspector.HeapSnapshotFilteredOrderedIterator):
        (WebInspector.HeapSnapshotFilteredOrderedIterator.prototype.serializeItemsRange):
        (WebInspector.HeapSnapshotFilteredOrderedIterator.prototype.sortAll):
        (WebInspector.HeapSnapshotFilteredOrderedIterator.prototype.sortAndRewind):
        (WebInspector.HeapSnapshotEdgesProvider.prototype.serializeItem):
        (WebInspector.HeapSnapshotNodesProvider.prototype.serializeItem):
        * inspector/front-end/HeapSnapshotGridNodes.js:
        (WebInspector.HeapSnapshotGridNode):
        (WebInspector.HeapSnapshotGridNode.prototype._populate.sorted):
        (WebInspector.HeapSnapshotGridNode.prototype._populate):
        (WebInspector.HeapSnapshotGridNode.prototype._populateChildren.serializeNextChunk):
        (WebInspector.HeapSnapshotGridNode.prototype._populateChildren.insertRetrievedChild):
        (WebInspector.HeapSnapshotGridNode.prototype._populateChildren.insertShowMoreButton):
        (WebInspector.HeapSnapshotGridNode.prototype._populateChildren.childrenRetrieved):
        (WebInspector.HeapSnapshotGridNode.prototype._populateChildren):
        (WebInspector.HeapSnapshotGridNode.prototype._saveChildren):
        (WebInspector.HeapSnapshotGridNode.prototype.sort.afterSort):
        (WebInspector.HeapSnapshotGridNode.prototype.sort):
        (WebInspector.HeapSnapshotDiffNodesProvider):
        (WebInspector.HeapSnapshotDiffNodesProvider.prototype.serializeItemsRange):
        (WebInspector.HeapSnapshotDiffNodesProvider.prototype.serializeItemsRange.didReceiveDeletedItems):
        (WebInspector.HeapSnapshotDiffNodesProvider.prototype.serializeItemsRange.didReceiveAddedItems):
        (WebInspector.HeapSnapshotDiffNodesProvider.prototype.sortAndRewind):
        * inspector/front-end/HeapSnapshotProxy.js:
        (WebInspector.HeapSnapshotWorker):
        (WebInspector.HeapSnapshotProviderProxy.prototype.serializeItemsRange):
        * inspector/front-end/ShowMoreDataGridNode.js:
        (WebInspector.ShowMoreDataGridNode):
        (WebInspector.ShowMoreDataGridNode.prototype._showNextChunk):
        (WebInspector.ShowMoreDataGridNode.prototype._showAll):
        (WebInspector.ShowMoreDataGridNode.prototype._updateLabels):
        (WebInspector.ShowMoreDataGridNode.prototype.setStartPosition):
        (WebInspector.ShowMoreDataGridNode.prototype.setEndPosition):
        * inspector/front-end/utilities.js:

2012-05-12  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: remove UISourceCode.id since it is no longer used.
        https://bugs.webkit.org/show_bug.cgi?id=86286

        Reviewed by Vsevolod Vlasov.

        We are now using breakpointStorageId property for breakpoint persistence.

        * inspector/front-end/BreakpointManager.js:
        (WebInspector.BreakpointManager):
        (WebInspector.BreakpointManager.prototype._debuggerReset):
        (WebInspector.BreakpointManager.prototype._uiLocationAdded.get if):
        (WebInspector.BreakpointManager.prototype._uiLocationAdded):
        (WebInspector.BreakpointManager.prototype._uiLocationRemoved.get if):
        (WebInspector.BreakpointManager.prototype._uiLocationRemoved):
        * inspector/front-end/CompilerScriptMapping.js:
        * inspector/front-end/JavaScriptSource.js:
        (WebInspector.JavaScriptSource):
        * inspector/front-end/RawSourceCode.js:
        (WebInspector.RawSourceCode):
        (WebInspector.RawSourceCode.prototype.rawLocationToUILocation):
        (WebInspector.RawSourceCode.prototype._createUISourceCode):
        (WebInspector.RawSourceCode.prototype._finishedLoading):
        * inspector/front-end/SnippetsModel.js:
        (WebInspector.SnippetsScriptMapping.prototype._snippetAdded):
        (WebInspector.SnippetsScriptMapping.prototype._createUISourceCodeForScript):
        * inspector/front-end/UISourceCode.js:
        (WebInspector.UISourceCode):

2012-05-12  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: merge MainScriptMapping into DebuggerPresentationModel; move other classes into their own files.
        https://bugs.webkit.org/show_bug.cgi?id=86285

        Reviewed by Yury Semikhatsky.

        The only purpose of the debugger presentation model now is to manage mappings. Merging main script mapping back into it.
        Other classes defined in that class are moved out into their own files.

        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * inspector/compile-front-end.py:
        * inspector/front-end/DebuggerPresentationModel.js:
        (WebInspector.DebuggerPresentationModel):
        (WebInspector.DebuggerPresentationModel.prototype._parsedScriptSource):
        (WebInspector.DebuggerPresentationModel.prototype.uiSourceCodes):
        (WebInspector.DebuggerPresentationModel.prototype._debuggerReset):
        * inspector/front-end/DebuggerResourceBinding.js: Added.
        (WebInspector.DebuggerResourceBinding):
        (WebInspector.DebuggerResourceBinding.canEditScriptSource):
        (WebInspector.DebuggerResourceBinding.setScriptSource.didEditScriptSource):
        (WebInspector.DebuggerResourceBinding.setScriptSource):
        (WebInspector.DebuggerResourceBinding.prototype.canSetContent):
        (WebInspector.DebuggerResourceBinding.prototype.setContent):
        (WebInspector.DebuggerResourceBinding.prototype._uiSourceCodeForResource):
        (WebInspector.DebuggerResourceBinding.prototype._setContentWithInitialContent):
        * inspector/front-end/PresentationConsoleMessageHelper.js: Added.
        (WebInspector.PresentationConsoleMessageHelper):
        (WebInspector.PresentationConsoleMessageHelper.prototype._consoleMessageAdded):
        (WebInspector.PresentationConsoleMessageHelper.prototype._addConsoleMessageToScript):
        (WebInspector.PresentationConsoleMessageHelper.prototype._addPendingConsoleMessage):
        (WebInspector.PresentationConsoleMessageHelper.prototype._parsedScriptSource):
        (WebInspector.PresentationConsoleMessageHelper.prototype._consoleCleared):
        (WebInspector.PresentationConsoleMessageHelper.prototype._debuggerReset):
        (WebInspector.PresentationConsoleMessage):
        (WebInspector.PresentationConsoleMessage.prototype._updateLocation):
        (WebInspector.PresentationConsoleMessage.prototype.get lineNumber):
        (WebInspector.PresentationConsoleMessage.prototype.dispose):
        * inspector/front-end/ScriptMapping.js:
        * inspector/front-end/ScriptsPanel.js:
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/inspector.html:
        * inspector/front-end/inspector.js:

2012-05-12  Mike West  <mkwst@chromium.org>

        Cleanup ContentSecurityPolicy naming conventions.
        https://bugs.webkit.org/show_bug.cgi?id=86282

        Reviewed by Adam Barth.

        Two tiny changes:
        
        1. `reportURI` and `reportURL` are both used within the CSP
           implementation. We should standardize on `reportURI` to match the
           spec.
        
        2. Renames `ContentSecurityPolicy::allowConnectFromSource` to
           `ContentSecurityPolicy::allowConnectToSource` for clarity.

        No new tests, as there's no user-visible change.

        * Modules/websockets/WebSocket.cpp:
        (WebCore::WebSocket::connect):
        * page/ContentSecurityPolicy.cpp:
        (CSPDirectiveList):
        (WebCore::CSPDirectiveList::reportViolation):
        (WebCore::CSPDirectiveList::allowConnectToSource):
        (WebCore::CSPDirectiveList::parseReportURI):
        (WebCore::CSPDirectiveList::addDirective):
        (WebCore::ContentSecurityPolicy::allowConnectToSource):
        * page/ContentSecurityPolicy.h:
        * page/EventSource.cpp:
        (WebCore::EventSource::create):
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::open):

2012-05-11  Mark Pilgrim  <pilgrim@chromium.org>

        [Chromium] Call isLinkVisited directly
        https://bugs.webkit.org/show_bug.cgi?id=85412

        Reviewed by Adam Barth.

        Part of a refactoring series. See tracking bug 82948.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * page/PageGroup.cpp:
        (WebCore::PageGroup::isLinkVisited):
        * platform/VisitedLinks.cpp: Added.
        (WebCore):
        (WebCore::VisitedLinks::isLinkVisited):
        * platform/VisitedLinks.h: Added.
        (WebCore):
        (VisitedLinks):
        * platform/chromium/PlatformSupport.h:
        * platform/chromium/VisitedLinksChromium.cpp: Added.
        (WebCore):
        (WebCore::VisitedLinks::isLinkVisited):

2012-05-11  Martin Robinson  <mrobinson@igalia.com>

        [TextureMapper] Tiles are not created for large textures
        https://bugs.webkit.org/show_bug.cgi?id=86245

        Reviewed by Noam Rosenthal.

        No new tests. This will not produce any observable behavior changes,
        unless run on a machine with a small texture size limit.

        The maxTextureSize() method on TextureMapperGL was missing a "const"
        keyword, meaning that it was not properly overriding the version in
        the abstract base class (TextureMapper). This patch adds the const
        modifier and cleans up the list of override methods in the two 
        TextureMapper sublcasses, adding the OVERRIDE macro for compilers that
        support it and removing a couple unused methods.

        * platform/graphics/texmap/TextureMapperGL.cpp:
        * platform/graphics/texmap/TextureMapperGL.h:
        (WebCore::TextureMapperGL::create):
        * platform/graphics/texmap/TextureMapperImageBuffer.h:
        (TextureMapperImageBuffer):

2012-05-11  Adrienne Walker  <enne@google.com>

        [chromium] Prevent deadlock on CCVideoLayerImpl destruction
        https://bugs.webkit.org/show_bug.cgi?id=86258

        Reviewed by James Robinson.

        ~CCVideoLayerImpl had a common deadlock issue where if it got
        destroyed before WebMediaPlayerClientImpl, it would take a lock,
        call WebMediaPlayerClientImpl::setVideoFrameProviderClient(0),
        which in turn would call CCVideoLayerImpl::stopUsingProvider(),
        which would try to take the same lock and would deadlock.

        CCVideoLayerImpl is only created and destroyed during tree
        synchronization in a commit or during synchronous compositor thread
        destruction. In either case, the main thread is blocked, and so no
        lock needs to be taken at all.

        * platform/graphics/chromium/cc/CCVideoLayerImpl.cpp:
        (WebCore::CCVideoLayerImpl::CCVideoLayerImpl):
        (WebCore::CCVideoLayerImpl::~CCVideoLayerImpl):
        (WebCore::CCVideoLayerImpl::stopUsingProvider):

2012-05-11  Jeffrey Pfau  <jpfau@apple.com>

        REGRESSION (r114170): Scroll areas in nested frames improperly placed when tiled drawing is enabled
        https://bugs.webkit.org/show_bug.cgi?id=86239

        Reviewed by Anders Carlsson.

        Fixes a regression introduced in r114170 by recursively adding positions of parent frames to placement of nested frame scroll areas.

        Manual tests: ManualTests/scrollable-positioned-frame.html
                      ManualTests/scrollable-positioned-nested-frame.html

        * page/scrolling/ScrollingCoordinator.cpp:
        (WebCore::computeNonFastScrollableRegion):
        (WebCore::ScrollingCoordinator::frameViewLayoutUpdated):

2012-05-11  Beth Dakin  <bdakin@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=86278
        Composited layers should only run the overlay scrollbars painting pass 
        if necessary

        Reviewed by Dan Bernstein.

        It's not enough that the rootLayer has dirty scrollbars; we also have 
        to actually be doing the overlay scrollbars painting pass to skip the 
        early return.
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::paintLayer):

2012-05-11  Anders Carlsson  <andersca@apple.com>

        Comcast website displays bottom of page when loaded
        https://bugs.webkit.org/show_bug.cgi?id=86277
        <rdar://problem/11426887>

        Reviewed by Beth Dakin.

        There were two bugs here. The first bug was that FrameView::setScrollPosition didn't end up calling into the scrolling coordinator
        to update the scroll position. The second bug was that ScrollingTreeNodeMac::setScrollPosition didn't constrain the scroll position
        to the edge of the page.

        * page/FrameView.cpp:
        (WebCore::FrameView::setScrollPosition):
        Call requestScrollPositionUpdate.

        * page/scrolling/ScrollingTree.cpp:
        * page/scrolling/ScrollingTree.h:
        Remove setMainFrameScrollPosition, it is not called by anyone.

        * page/scrolling/mac/ScrollingTreeNodeMac.h:
        * page/scrolling/mac/ScrollingTreeNodeMac.mm:
        (WebCore::ScrollingTreeNodeMac::setScrollPosition):
        Clamp to the page size and call setScrollPositionWithoutContentEdgeConstraints.

        (WebCore::ScrollingTreeNodeMac::setScrollPositionWithoutContentEdgeConstraints):
        Update the scroll layer position and call back to the main thread.

        (WebCore::ScrollingTreeNodeMac::scrollBy):
        Call setScrollPosition.

        (WebCore::ScrollingTreeNodeMac::scrollByWithoutContentEdgeConstraints):
        Call setScrollPositionWithoutContentEdgeConstraints.

2012-05-11  Gavin Barraclough  <barraclough@apple.com>

        Introduce PropertyName class
        https://bugs.webkit.org/show_bug.cgi?id=86241

        Reviewed by Geoff Garen.

        Replace 'const Identifier&' arguments to functions accessing object properties with a new 'PropertyName' type.
        This change paves the way to allow for properties keyed by values that are not Identifiers.

        This change is largely a mechanical find & replace.
        It also changes JSFunction's constructor to take a UString& instead of an Identifier&
        (since in some cases we can no longer guarantee that we'lll have an Identifier), and
        unifies Identifier's methods to obtain array indices onto PropertyName.

        The new PropertyName class retains the ability to support .impl() and .ustring(), but
        in a future patch we may need to rework this, since not all PropertyNames should be
        equal based on their string representation.

        * WebCore.exp.in:
        * bindings/js/JSCSSStyleDeclarationCustom.cpp:
        (WebCore::cssPropertyIDForJSCSSPropertyName):
        (WebCore::JSCSSStyleDeclaration::getOwnPropertySlotDelegate):
        (WebCore::JSCSSStyleDeclaration::getOwnPropertyDescriptorDelegate):
        (WebCore::JSCSSStyleDeclaration::putDelegate):
        * bindings/js/JSDOMBinding.cpp:
        (WebCore::findAtomicString):
        (WebCore::objectToStringFunctionGetter):
        * bindings/js/JSDOMBinding.h:
        (WebCore):
        (WebCore::propertyNameToString):
        (WebCore::propertyNameToAtomicString):
        * bindings/js/JSDOMMimeTypeArrayCustom.cpp:
        (WebCore::JSDOMMimeTypeArray::canGetItemsForName):
        (WebCore::JSDOMMimeTypeArray::nameGetter):
        * bindings/js/JSDOMPluginArrayCustom.cpp:
        (WebCore::JSDOMPluginArray::canGetItemsForName):
        (WebCore::JSDOMPluginArray::nameGetter):
        * bindings/js/JSDOMPluginCustom.cpp:
        (WebCore::JSDOMPlugin::canGetItemsForName):
        (WebCore::JSDOMPlugin::nameGetter):
        * bindings/js/JSDOMStringMapCustom.cpp:
        (WebCore::JSDOMStringMap::canGetItemsForName):
        (WebCore::JSDOMStringMap::nameGetter):
        (WebCore::JSDOMStringMap::deleteProperty):
        (WebCore::JSDOMStringMap::putDelegate):
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::nonCachingStaticFunctionGetter):
        (WebCore::childFrameGetter):
        (WebCore::namedItemGetter):
        (WebCore::JSDOMWindow::getOwnPropertySlot):
        (WebCore::JSDOMWindow::getOwnPropertyDescriptor):
        (WebCore::JSDOMWindow::put):
        (WebCore::JSDOMWindow::deleteProperty):
        (WebCore::JSDOMWindow::defineOwnProperty):
        * bindings/js/JSDOMWindowShell.cpp:
        (WebCore::JSDOMWindowShell::getOwnPropertySlot):
        (WebCore::JSDOMWindowShell::getOwnPropertyDescriptor):
        (WebCore::JSDOMWindowShell::put):
        (WebCore::JSDOMWindowShell::putDirectVirtual):
        (WebCore::JSDOMWindowShell::defineOwnProperty):
        (WebCore::JSDOMWindowShell::deleteProperty):
        * bindings/js/JSDOMWindowShell.h:
        (JSDOMWindowShell):
        * bindings/js/JSHTMLAllCollectionCustom.cpp:
        (WebCore::getNamedItems):
        (WebCore::callHTMLAllCollection):
        (WebCore::JSHTMLAllCollection::canGetItemsForName):
        (WebCore::JSHTMLAllCollection::nameGetter):
        (WebCore::JSHTMLAllCollection::item):
        * bindings/js/JSHTMLAppletElementCustom.cpp:
        (WebCore::JSHTMLAppletElement::getOwnPropertySlotDelegate):
        (WebCore::JSHTMLAppletElement::getOwnPropertyDescriptorDelegate):
        (WebCore::JSHTMLAppletElement::putDelegate):
        * bindings/js/JSHTMLCollectionCustom.cpp:
        (WebCore::getNamedItems):
        (WebCore::JSHTMLCollection::canGetItemsForName):
        (WebCore::JSHTMLCollection::nameGetter):
        * bindings/js/JSHTMLDocumentCustom.cpp:
        (WebCore::JSHTMLDocument::canGetItemsForName):
        (WebCore::JSHTMLDocument::nameGetter):
        * bindings/js/JSHTMLEmbedElementCustom.cpp:
        (WebCore::JSHTMLEmbedElement::getOwnPropertySlotDelegate):
        (WebCore::JSHTMLEmbedElement::getOwnPropertyDescriptorDelegate):
        (WebCore::JSHTMLEmbedElement::putDelegate):
        * bindings/js/JSHTMLFormElementCustom.cpp:
        (WebCore::JSHTMLFormElement::canGetItemsForName):
        (WebCore::JSHTMLFormElement::nameGetter):
        * bindings/js/JSHTMLFrameSetElementCustom.cpp:
        (WebCore::JSHTMLFrameSetElement::canGetItemsForName):
        (WebCore::JSHTMLFrameSetElement::nameGetter):
        * bindings/js/JSHTMLObjectElementCustom.cpp:
        (WebCore::JSHTMLObjectElement::getOwnPropertySlotDelegate):
        (WebCore::JSHTMLObjectElement::getOwnPropertyDescriptorDelegate):
        (WebCore::JSHTMLObjectElement::putDelegate):
        * bindings/js/JSHistoryCustom.cpp:
        (WebCore::nonCachingStaticBackFunctionGetter):
        (WebCore::nonCachingStaticForwardFunctionGetter):
        (WebCore::nonCachingStaticGoFunctionGetter):
        (WebCore::JSHistory::getOwnPropertySlotDelegate):
        (WebCore::JSHistory::getOwnPropertyDescriptorDelegate):
        (WebCore::JSHistory::putDelegate):
        (WebCore::JSHistory::deleteProperty):
        * bindings/js/JSLocationCustom.cpp:
        (WebCore::nonCachingStaticReplaceFunctionGetter):
        (WebCore::nonCachingStaticReloadFunctionGetter):
        (WebCore::nonCachingStaticAssignFunctionGetter):
        (WebCore::JSLocation::getOwnPropertySlotDelegate):
        (WebCore::JSLocation::getOwnPropertyDescriptorDelegate):
        (WebCore::JSLocation::putDelegate):
        (WebCore::JSLocation::deleteProperty):
        (WebCore::JSLocation::defineOwnProperty):
        (WebCore::JSLocationPrototype::putDelegate):
        (WebCore::JSLocationPrototype::defineOwnProperty):
        * bindings/js/JSNamedNodeMapCustom.cpp:
        (WebCore::JSNamedNodeMap::canGetItemsForName):
        (WebCore::JSNamedNodeMap::nameGetter):
        * bindings/js/JSNodeListCustom.cpp:
        (WebCore::JSNodeList::canGetItemsForName):
        (WebCore::JSNodeList::nameGetter):
        * bindings/js/JSPluginElementFunctions.cpp:
        (WebCore::runtimeObjectPropertyGetter):
        (WebCore::runtimeObjectCustomGetOwnPropertySlot):
        (WebCore::runtimeObjectCustomGetOwnPropertyDescriptor):
        (WebCore::runtimeObjectCustomPut):
        * bindings/js/JSPluginElementFunctions.h:
        (WebCore):
        * bindings/js/JSStorageCustom.cpp:
        (WebCore::JSStorage::canGetItemsForName):
        (WebCore::JSStorage::nameGetter):
        (WebCore::JSStorage::deleteProperty):
        (WebCore::JSStorage::putDelegate):
        * bindings/js/JSStyleSheetListCustom.cpp:
        (WebCore::JSStyleSheetList::canGetItemsForName):
        (WebCore::JSStyleSheetList::nameGetter):
        * bindings/js/JSWorkerContextCustom.cpp:
        (WebCore::JSWorkerContext::getOwnPropertySlotDelegate):
        (WebCore::JSWorkerContext::getOwnPropertyDescriptorDelegate):
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateGetOwnPropertySlotBody):
        (GenerateGetOwnPropertyDescriptorBody):
        (GenerateHeader):
        (GenerateImplementation):
        (GenerateConstructorDeclaration):
        (GenerateConstructorDefinition):
        * bridge/c/c_class.cpp:
        (JSC::Bindings::CClass::methodsNamed):
        (JSC::Bindings::CClass::fieldNamed):
        * bridge/c/c_class.h:
        (CClass):
        * bridge/c/c_instance.cpp:
        (JSC::Bindings::CRuntimeMethod::create):
        (JSC::Bindings::CRuntimeMethod::finishCreation):
        (JSC::Bindings::CInstance::getMethod):
        * bridge/c/c_instance.h:
        (CInstance):
        * bridge/jni/jsc/JavaClassJSC.cpp:
        (JavaClass::methodsNamed):
        (JavaClass::fieldNamed):
        * bridge/jni/jsc/JavaClassJSC.h:
        (JavaClass):
        * bridge/jni/jsc/JavaInstanceJSC.cpp:
        (JavaRuntimeMethod::create):
        (JavaRuntimeMethod::finishCreation):
        * bridge/jni/jsc/JavaInstanceJSC.h:
        (JavaInstance):
        * bridge/jsc/BridgeJSC.h:
        (Class):
        (JSC::Bindings::Class::fallbackObject):
        (JSC::Bindings::Instance::setValueOfUndefinedField):
        (Instance):
        (JSC::Bindings::Instance::getOwnPropertySlot):
        (JSC::Bindings::Instance::getOwnPropertyDescriptor):
        (JSC::Bindings::Instance::put):
        * bridge/objc/objc_class.h:
        (ObjcClass):
        * bridge/objc/objc_class.mm:
        (JSC::Bindings::ObjcClass::methodsNamed):
        (JSC::Bindings::ObjcClass::fieldNamed):
        (JSC::Bindings::ObjcClass::fallbackObject):
        * bridge/objc/objc_instance.h:
        (ObjcInstance):
        * bridge/objc/objc_instance.mm:
        (ObjCRuntimeMethod::create):
        (ObjCRuntimeMethod::finishCreation):
        (ObjcInstance::setValueOfUndefinedField):
        (ObjcInstance::getValueOfUndefinedField):
        * bridge/objc/objc_runtime.h:
        (JSC::Bindings::ObjcFallbackObjectImp::create):
        (JSC::Bindings::ObjcFallbackObjectImp::propertyName):
        (ObjcFallbackObjectImp):
        * bridge/objc/objc_runtime.mm:
        (JSC::Bindings::ObjcFallbackObjectImp::ObjcFallbackObjectImp):
        (JSC::Bindings::ObjcFallbackObjectImp::getOwnPropertySlot):
        (JSC::Bindings::ObjcFallbackObjectImp::getOwnPropertyDescriptor):
        (JSC::Bindings::ObjcFallbackObjectImp::put):
        (JSC::Bindings::callObjCFallbackObject):
        (JSC::Bindings::ObjcFallbackObjectImp::deleteProperty):
        (JSC::Bindings::ObjcFallbackObjectImp::defaultValue):
        * bridge/runtime_array.cpp:
        (JSC::RuntimeArray::lengthGetter):
        (JSC::RuntimeArray::getOwnPropertySlot):
        (JSC::RuntimeArray::getOwnPropertyDescriptor):
        (JSC::RuntimeArray::put):
        (JSC::RuntimeArray::deleteProperty):
        * bridge/runtime_array.h:
        (RuntimeArray):
        * bridge/runtime_method.cpp:
        (JSC::RuntimeMethod::finishCreation):
        (JSC::RuntimeMethod::lengthGetter):
        (JSC::RuntimeMethod::getOwnPropertySlot):
        (JSC::RuntimeMethod::getOwnPropertyDescriptor):
        * bridge/runtime_method.h:
        (JSC::RuntimeMethod::create):
        (RuntimeMethod):
        * bridge/runtime_object.cpp:
        (JSC::Bindings::RuntimeObject::fallbackObjectGetter):
        (JSC::Bindings::RuntimeObject::fieldGetter):
        (JSC::Bindings::RuntimeObject::methodGetter):
        (JSC::Bindings::RuntimeObject::getOwnPropertySlot):
        (JSC::Bindings::RuntimeObject::getOwnPropertyDescriptor):
        (JSC::Bindings::RuntimeObject::put):
        (JSC::Bindings::RuntimeObject::deleteProperty):
        * bridge/runtime_object.h:
        (RuntimeObject):

2012-05-11  David Barton  <dbarton@mathscribe.com>

        use after free in WebCore::RenderObject::document
        https://bugs.webkit.org/show_bug.cgi?id=84891

        Reviewed by Julien Chaffraix.

        Change RenderMathMLFenced::addChild() to use the beforeChild parameter. When beforeChild
        is 0, insert child renderers before the closing fence, which might not be the same as
        this->lastChild(), e.g. possibly due to anonymous blocks or generated content.

        Tests: mathml/presentation/mfenced-add-child1-expected.html
               mathml/presentation/mfenced-add-child1.html
               mathml/presentation/mfenced-add-child2-expected.html
               mathml/presentation/mfenced-add-child2.html

        * rendering/mathml/RenderMathMLFenced.cpp:
        (WebCore::RenderMathMLFenced::RenderMathMLFenced):
        (WebCore::RenderMathMLFenced::makeFences):
        (WebCore::RenderMathMLFenced::addChild):
        * rendering/mathml/RenderMathMLFenced.h:
        (RenderMathMLFenced):

2012-05-11  Anders Carlsson  <andersca@apple.com>

        Can't scroll on webpage after following links from Blogger
        https://bugs.webkit.org/show_bug.cgi?id=86274
        <rdar://problem/11431352>

        Reviewed by Beth Dakin.

        When committing a new scroll layer, make sure to reset the scroll position.

        * page/scrolling/ScrollingTree.cpp:
        (WebCore::ScrollingTree::commitNewTreeState):

2012-05-11  Martin Robinson  <mrobinson@igalia.com>

        [TextureMapper] Support drawing debug borders
        https://bugs.webkit.org/show_bug.cgi?id=86237

        Reviewed by Noam Rosenthal.

        No new tests. This is the implementation of an interactive debugging
        feature.

        * platform/graphics/texmap/GraphicsLayerTextureMapper.cpp:
        (WebCore::GraphicsLayer::create): Moved this to the top of the file to
        reduce contention for the coveted last spot in the file. This also
        follows the pattern used in many WebCore files of having the factories
        at the top.
        (WebCore::GraphicsLayerTextureMapper::setDebugBorder): Added this
        plumbing.
        * platform/graphics/texmap/GraphicsLayerTextureMapper.h: Added
        plumbing.
        * platform/graphics/texmap/TextureMapper.h: Ditto.
        * platform/graphics/texmap/TextureMapperBackingStore.cpp:
        (WebCore::TextureMapperTiledBackingStore::TextureMapperTiledBackingStore):
        Initialize the new member.
        (WebCore::TextureMapperTiledBackingStore::paintToTextureMapper): When
        debug borders are enabled call the new drawBorder method on the TM.
        (WebCore::TextureMapperTiledBackingStore::setDebugBorder): Added this
        plumbing.
        * platform/graphics/texmap/TextureMapperBackingStore.h: Added plumbing
        and members to store debug border states. This is necessary because of
        the when painting there is no handle on the GraphicsLayers.
        * platform/graphics/texmap/TextureMapperGL.cpp:
        (WebCore::TextureMapperGL::drawRect): Factored out the common bits of
        drawTexture and drawBorder into this helper.
        (WebCore::TextureMapperGL::drawBorder): Added this method, which works
        very similarly to drawTexture, but uses a different shader program and
        must also set the line width and color.
        (WebCore::TextureMapperGL::drawTexture): Factored out the bits that
        are shared with drawRect.
        * platform/graphics/texmap/TextureMapperGL.h:
        (TextureMapperGL): Added the new method declarations.
        * platform/graphics/texmap/TextureMapperImageBuffer.h:
        (WebCore::TextureMapperImageBuffer::drawBorder): Added an empty
        implementation. Later we can add an implementation for the ImageBuffer
        TM.
        * platform/graphics/texmap/TextureMapperLayer.cpp:
        (WebCore::TextureMapperLayer::updateBackingStore): When updating the
        backing store send the debug border information through.
        (WebCore::TextureMapperLayer::syncCompositingStateSelf): When updating
        the layer state, also update the debug indicators. This is required to
        initialize the debug border values for the layer.
        (WebCore::TextureMapperLayer::setDebugBorder): Added this plumbing.
        * platform/graphics/texmap/TextureMapperLayer.h: Ditto.
        * platform/graphics/texmap/TextureMapperShaderManager.cpp: Added a
        solid color shader that doesn't care about texture coordinates or
        opacity values.
        (WebCore::TextureMapperShaderManager::solidColorProgram): Added. This
        is a shorter getter for the solid color program that doesn't require
        casting from the caller.
        (WebCore::TextureMapperShaderManager::getShaderProgram): Added support
        for the solid color program.
        (WebCore::TextureMapperShaderProgramSolidColor::create): Added.
        (WebCore::TextureMapperShaderProgramSolidColor::TextureMapperShaderProgramSolidColor):
        Ditto.
        (WebCore::TextureMapperShaderProgramSolidColor::vertexShaderSource):
        Ditto.
        (WebCore::TextureMapperShaderProgramSolidColor::fragmentShaderSource):
        Ditto.
        * platform/graphics/texmap/TextureMapperShaderManager.h:
        (TextureMapperShaderProgramSolidColor): Added.
        (WebCore::TextureMapperShaderProgramSolidColor::colorVariable): Added.

2012-05-10  Timothy Hatcher  <timothy@apple.com>

        Instrument timer function calls so they show up in the Web Inspector Timeline.

        https://webkit.org/b/86173

        Reviewed by Pavel Feldman.

        Test: inspector/timeline/timeline-timer.html

        * bindings/js/ScheduledAction.cpp:
        (WebCore::ScheduledAction::executeFunctionInContext): Wrap the call with JSMainThreadExecState::instrumentFunctionCall
        and InspectorInstrumentation::didCallFunction.

2012-05-11  Nico Weber  <thakis@chromium.org>

        [chromium/mac] Let libwebkit.dylib link in Debug/components build
        https://bugs.webkit.org/show_bug.cgi?id=86244

        Reviewed by James Robinson.

        In static builds, this was not needed because the targets depending on
        'webkit' already link in QuartzCore. In Release components builds, it wasn't
        needed because they are built with -dead_strip, which stripped the referencing
        code.

        * WebCore.gyp/WebCore.gyp:

2012-05-11  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r116802.
        http://trac.webkit.org/changeset/116802
        https://bugs.webkit.org/show_bug.cgi?id=86260

        This patch causes compiling error to chromium builds
        (Requested by jianli_ on #webkit).

        * WebCore.gypi:

2012-05-11  Ryosuke Niwa  <rniwa@webkit.org>

        Regression fix after r116798.

        We need to return true for the html element in the design mode
        in which case parentNode() is editable and is not a body element.

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

2012-05-11  James Robinson  <jamesr@chromium.org>

        [chromium] Move implementation of WebCore::GraphicsContext3D and related from WebKit/chromium/src to WebCore/platform/chromium/support
        https://bugs.webkit.org/show_bug.cgi?id=86257

        Reviewed by Adam Barth.

        The WebCore platform interfaces GraphicsContext3D and Extensions3DChromium are implemented in chromium on top of
        the Platform interface WebGraphicsContext3D. This moves the implementation support code from WebKit/chromium/src
        to WebCore/platform/chromium/support, which avoids having code in WebKit/ implementing WebCore interfaces and
        allows code in WebCore/platform to use this support code directly where appropriate.

        Refactor only, no new functionality or tests.

        * WebCore.gypi:
        * platform/chromium/support/Extensions3DChromium.cpp: Renamed from Source/WebKit/chromium/src/Extensions3DChromium.cpp.
        (WebCore):
        (WebCore::Extensions3DChromium::Extensions3DChromium):
        (WebCore::Extensions3DChromium::~Extensions3DChromium):
        (WebCore::Extensions3DChromium::supports):
        (WebCore::Extensions3DChromium::ensureEnabled):
        (WebCore::Extensions3DChromium::isEnabled):
        (WebCore::Extensions3DChromium::getGraphicsResetStatusARB):
        (WebCore::Extensions3DChromium::blitFramebuffer):
        (WebCore::Extensions3DChromium::renderbufferStorageMultisample):
        (WebCore::Extensions3DChromium::postSubBufferCHROMIUM):
        (WebCore::Extensions3DChromium::mapBufferSubDataCHROMIUM):
        (WebCore::Extensions3DChromium::unmapBufferSubDataCHROMIUM):
        (WebCore::Extensions3DChromium::mapTexSubImage2DCHROMIUM):
        (WebCore::Extensions3DChromium::unmapTexSubImage2DCHROMIUM):
        (WebCore::Extensions3DChromium::setVisibilityCHROMIUM):
        (WebCore::Extensions3DChromium::discardFramebufferEXT):
        (WebCore::Extensions3DChromium::ensureFramebufferCHROMIUM):
        (WebCore::Extensions3DChromium::setGpuMemoryAllocationChangedCallbackCHROMIUM):
        (WebCore::Extensions3DChromium::createVertexArrayOES):
        (WebCore::Extensions3DChromium::deleteVertexArrayOES):
        (WebCore::Extensions3DChromium::isVertexArrayOES):
        (WebCore::Extensions3DChromium::bindVertexArrayOES):
        (WebCore::Extensions3DChromium::getTranslatedShaderSourceANGLE):
        (WebCore::Extensions3DChromium::setSwapBuffersCompleteCallbackCHROMIUM):
        (WebCore::Extensions3DChromium::rateLimitOffscreenContextCHROMIUM):
        (WebCore::Extensions3DChromium::paintFramebufferToCanvas):
        (WebCore::Extensions3DChromium::texImageIOSurface2DCHROMIUM):
        (WebCore::Extensions3DChromium::texStorage2DEXT):
        (WebCore::Extensions3DChromium::createQueryEXT):
        (WebCore::Extensions3DChromium::deleteQueryEXT):
        (WebCore::Extensions3DChromium::isQueryEXT):
        (WebCore::Extensions3DChromium::beginQueryEXT):
        (WebCore::Extensions3DChromium::endQueryEXT):
        (WebCore::Extensions3DChromium::getQueryivEXT):
        (WebCore::Extensions3DChromium::getQueryObjectuivEXT):
        * platform/chromium/support/GraphicsContext3DChromium.cpp: Renamed from Source/WebKit/chromium/src/GraphicsContext3DChromium.cpp.
        (WebCore):
        (WebCore::GraphicsContext3DPrivate::GraphicsContext3DPrivate):
        (WebCore::GraphicsContext3DPrivate::~GraphicsContext3DPrivate):
        (WebCore::GraphicsContext3DPrivate::createGraphicsContextFromWebContext):
        (WebCore::GraphicsContext3DPrivate::extractWebGraphicsContext3D):
        (WebCore::GraphicsContext3DPrivate::platformGraphicsContext3D):
        (WebCore::GraphicsContext3DPrivate::platformTexture):
        (GrMemoryAllocationChangedCallback):
        (WebCore::GrMemoryAllocationChangedCallback::GrMemoryAllocationChangedCallback):
        (WebCore::GrMemoryAllocationChangedCallback::onGpuMemoryAllocationChanged):
        (WebCore::GraphicsContext3DPrivate::grContext):
        (WebCore::GraphicsContext3DPrivate::prepareTexture):
        (WebCore::GraphicsContext3DPrivate::markContextChanged):
        (WebCore::GraphicsContext3DPrivate::markLayerComposited):
        (WebCore::GraphicsContext3DPrivate::layerComposited):
        (WebCore::GraphicsContext3DPrivate::paintFramebufferToCanvas):
        (WebCore::GraphicsContext3DPrivate::paintRenderingResultsToCanvas):
        (WebCore::GraphicsContext3DPrivate::paintCompositedResultsToCanvas):
        (WebCore::GraphicsContext3DPrivate::paintRenderingResultsToImageData):
        (WebCore::GraphicsContext3DPrivate::reshape):
        (WebCore::GraphicsContext3DPrivate::getInternalFramebufferSize):
        (WebCore::GraphicsContext3DPrivate::isContextLost):
        (WebCore::GraphicsContext3DPrivate::isGLES2Compliant):
        (WebCore::GraphicsContext3DPrivate::bindAttribLocation):
        (WebCore::GraphicsContext3DPrivate::bufferData):
        (WebCore::GraphicsContext3DPrivate::bufferSubData):
        (WebCore::GraphicsContext3DPrivate::getActiveAttrib):
        (WebCore::GraphicsContext3DPrivate::getActiveUniform):
        (WebCore::GraphicsContext3DPrivate::getAttribLocation):
        (WebCore::GraphicsContext3DPrivate::getContextAttributes):
        (WebCore::GraphicsContext3DPrivate::getProgramInfoLog):
        (WebCore::GraphicsContext3DPrivate::getShaderInfoLog):
        (WebCore::GraphicsContext3DPrivate::getShaderSource):
        (WebCore::GraphicsContext3DPrivate::getString):
        (WebCore::GraphicsContext3DPrivate::getUniformLocation):
        (WebCore::GraphicsContext3DPrivate::shaderSource):
        (WebCore::GraphicsContext3DPrivate::texImage2D):
        (WebCore::GraphicsContext3DPrivate::texSubImage2D):
        (WebCore::GraphicsContext3DPrivate::uniform1fv):
        (WebCore::GraphicsContext3DPrivate::uniform1iv):
        (WebCore::GraphicsContext3DPrivate::uniform2fv):
        (WebCore::GraphicsContext3DPrivate::uniform2iv):
        (WebCore::GraphicsContext3DPrivate::uniform3fv):
        (WebCore::GraphicsContext3DPrivate::uniform3iv):
        (WebCore::GraphicsContext3DPrivate::uniform4fv):
        (WebCore::GraphicsContext3DPrivate::uniform4iv):
        (WebCore::GraphicsContext3DPrivate::uniformMatrix2fv):
        (WebCore::GraphicsContext3DPrivate::uniformMatrix3fv):
        (WebCore::GraphicsContext3DPrivate::uniformMatrix4fv):
        (WebCore::GraphicsContext3DPrivate::getExtensions):
        (WebCore::GraphicsContext3DPrivate::isResourceSafe):
        (WebCore::GraphicsContext3DPrivate::initializeExtensions):
        (WebCore::GraphicsContext3DPrivate::supportsExtension):
        (WebCore::GraphicsContext3DPrivate::ensureExtensionEnabled):
        (WebCore::GraphicsContext3DPrivate::isExtensionEnabled):
        (WebCore::GraphicsContext3D::GraphicsContext3D):
        (WebCore::GraphicsContext3D::~GraphicsContext3D):
        (WebCore::GraphicsContext3D::create):
        (WebCore::GraphicsContext3D::platformGraphicsContext3D):
        (WebCore::GraphicsContext3D::platformTexture):
        (WebCore::GraphicsContext3D::grContext):
        (WebCore::GraphicsContext3D::prepareTexture):
        (WebCore::GraphicsContext3D::getInternalFramebufferSize):
        (WebCore::GraphicsContext3D::isResourceSafe):
        (WebCore::GraphicsContext3D::platformLayer):
        (WebCore::GraphicsContext3D::layerComposited):
        (WebCore::GraphicsContext3D::paintRenderingResultsToCanvas):
        (WebCore::GraphicsContext3D::paintRenderingResultsToImageData):
        (GraphicsContextLostCallbackAdapter):
        (WebCore::GraphicsContextLostCallbackAdapter::~GraphicsContextLostCallbackAdapter):
        (WebCore::GraphicsContextLostCallbackAdapter::GraphicsContextLostCallbackAdapter):
        (WebCore::GraphicsContextLostCallbackAdapter::onContextLost):
        (WebCore::GraphicsContextLostCallbackAdapter::create):
        (WebCore::GraphicsContext3DPrivate::setContextLostCallback):
        (GraphicsErrorMessageCallbackAdapter):
        (WebCore::GraphicsErrorMessageCallbackAdapter::~GraphicsErrorMessageCallbackAdapter):
        (WebCore::GraphicsErrorMessageCallbackAdapter::GraphicsErrorMessageCallbackAdapter):
        (WebCore::GraphicsErrorMessageCallbackAdapter::onErrorMessage):
        (WebCore::GraphicsErrorMessageCallbackAdapter::create):
        (WebCore::GraphicsContext3DPrivate::setErrorMessageCallback):
        (WebCore::GraphicsContext3D::isGLES2Compliant):
        (GraphicsContext3DSwapBuffersCompleteCallbackAdapter):
        (WebCore::GraphicsContext3DSwapBuffersCompleteCallbackAdapter::~GraphicsContext3DSwapBuffersCompleteCallbackAdapter):
        (WebCore::GraphicsContext3DSwapBuffersCompleteCallbackAdapter::GraphicsContext3DSwapBuffersCompleteCallbackAdapter):
        (WebCore::GraphicsContext3DSwapBuffersCompleteCallbackAdapter::onSwapBuffersComplete):
        (WebCore::GraphicsContext3DSwapBuffersCompleteCallbackAdapter::create):
        (WebCore::GraphicsContext3DPrivate::setSwapBuffersCompleteCallbackCHROMIUM):
        (GraphicsContext3DMemoryAllocationChangedCallbackAdapter):
        (WebCore::GraphicsContext3DMemoryAllocationChangedCallbackAdapter::GraphicsContext3DMemoryAllocationChangedCallbackAdapter):
        (WebCore::GraphicsContext3DMemoryAllocationChangedCallbackAdapter::~GraphicsContext3DMemoryAllocationChangedCallbackAdapter):
        (WebCore::GraphicsContext3DMemoryAllocationChangedCallbackAdapter::onMemoryAllocationChanged):
        (WebCore::GraphicsContext3DPrivate::setGpuMemoryAllocationChangedCallbackCHROMIUM):
        * platform/chromium/support/GraphicsContext3DPrivate.h: Renamed from Source/WebKit/chromium/src/GraphicsContext3DPrivate.h.
        (WebKit):
        (WebCore):
        (GraphicsContext3DPrivate):

2012-05-11  Keyar Hood  <keyar@chromium.org>

        ImageSkia.cpp does not conform to style guidelines
        https://bugs.webkit.org/show_bug.cgi?id=86219

        Reviewed by Stephen White.

        No tests as this is purely style changees.

        * platform/graphics/skia/ImageSkia.cpp:
        (WebCore::TransformDimensions):
        (WebCore::BitmapImage::draw):
        (WebCore::BitmapImageSingleFrameSkia::draw):

2012-05-11  Tim Horton  <timothy_horton@apple.com>

        Unreviewed Chromium build fix after http://trac.webkit.org/changeset/116799.

        * rendering/RenderLayerBacking.cpp:

2012-05-11  Terry Anderson  <tdanderson@chromium.org>

        [chromium] Compute the best target node on a GestureTap event
        https://bugs.webkit.org/show_bug.cgi?id=85101

        Reviewed by Adam Barth.

        Will be using the tests in the touchadjustment/ directory.

        * WebCore.gypi:
        Include TouchAdjustment.* files.

2012-05-11  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r116498.
        http://trac.webkit.org/changeset/116498
        https://bugs.webkit.org/show_bug.cgi?id=86251

        Causes crashes in major sites and security issues (Requested
        by schenney on #webkit).

        * rendering/svg/RenderSVGInline.cpp:
        (WebCore::RenderSVGInline::addChild):
        * rendering/svg/RenderSVGInlineText.cpp:
        (WebCore::RenderSVGInlineText::willBeDestroyed):
        (WebCore::RenderSVGInlineText::setTextInternal):
        (WebCore::RenderSVGInlineText::styleDidChange):
        * rendering/svg/RenderSVGText.cpp:
        (WebCore::recursiveUpdateLayoutAttributes):
        (WebCore::RenderSVGText::layoutAttributesChanged):
        (WebCore::RenderSVGText::layoutAttributesWillBeDestroyed):
        (WebCore::RenderSVGText::invalidateTextPositioningElements):
        (WebCore::recursiveUpdateScaledFont):
        (WebCore::RenderSVGText::layout):
        (WebCore::RenderSVGText::addChild):
        (WebCore::recursiveCollectLayoutAttributes):
        (WebCore::RenderSVGText::rebuildLayoutAttributes):
        (WebCore):
        * rendering/svg/RenderSVGText.h:
        (RenderSVGText):
        (WebCore::RenderSVGText::layoutAttributes):
        * rendering/svg/SVGRootInlineBox.cpp:
        (WebCore::SVGRootInlineBox::computePerCharacterLayoutInformation):
        * rendering/svg/SVGTextLayoutAttributesBuilder.cpp:
        (WebCore::SVGTextLayoutAttributesBuilder::buildLayoutAttributes):

2012-05-11  Tim Horton  <timothy_horton@apple.com>

        FrameView->m_lastPaintTime is not updated in the tiled drawing case
        https://bugs.webkit.org/show_bug.cgi?id=86246
        <rdar://problem/11248475>

        Reviewed by Simon Fraser.

        Update FrameView's m_lastPaintTime from RenderLayerBacking::paintContents
        if the RenderLayerBacking is backing a tiled drawing layer.

        In the future we might want to consider updating m_lastPaintTime when any
        compositing layer is painted into, but this change gets us on par with the
        non-tiled-drawing case as it stands now.

        No new tests.

        * page/FrameView.h:
        (WebCore::FrameView::setLastPaintTime):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::paintContents):

2012-05-11  Shezan Baig  <shezbaig.wk@gmail.com>

        Add helper function for node()->rootEditableElement() == node()
        https://bugs.webkit.org/show_bug.cgi?id=86217

        Reviewed by Ryosuke Niwa.

        Added Node::isRootEditableElement and updated existing code that did
        (node->rootEditableElement() == node) to use isRootEditableElement
        instead.

        No new tests. No change in behavior.

        * dom/Node.cpp:
        (WebCore::Node::isRootEditableElement):
        (WebCore):
        * dom/Node.h:
        (Node):
        Added new helper function.

        * dom/Document.cpp:
        (WebCore::Document::setFocusedNode):
        * dom/Element.cpp:
        (WebCore::Element::updateFocusAppearance):
        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::cloneParagraphUnderNewElement):
        * editing/DeleteSelectionCommand.cpp:
        (WebCore::DeleteSelectionCommand::removeNode):
        * editing/InsertParagraphSeparatorCommand.cpp:
        (WebCore::InsertParagraphSeparatorCommand::doApply):
        * page/FocusController.cpp:
        (WebCore::FocusController::setFocusedNode):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::hasLineIfEmpty):
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::addOverflowFromInlineChildren):
        Updates to existing code to use the new helper function.

2012-05-11  Shawn Singh  <shawnsingh@chromium.org>

        [chromium] Create WebTransformationMatrix interface for chromium platform
        https://bugs.webkit.org/show_bug.cgi?id=86049

        Reviewed by James Robinson.

        This patch creates a WebTransformationMatrix interface. It will
        remain unused at the moment, until (a) unit tests are created
        and (b) when we are ready to make a brief transition of all other
        chromium code to use it.

        * WebCore.gypi:
        * platform/chromium/support/WebTransformationMatrix.cpp: Added.
        (WebKit):
        (WebKit::WebTransformationMatrix::WebTransformationMatrix):
        (WebKit::WebTransformationMatrix::operator=):
        (WebKit::WebTransformationMatrix::operator==):
        (WebKit::WebTransformationMatrix::operator*):
        (WebKit::WebTransformationMatrix::inverse):
        (WebKit::WebTransformationMatrix::to2dTransform):
        (WebKit::WebTransformationMatrix::multiply):
        (WebKit::WebTransformationMatrix::makeIdentity):
        (WebKit::WebTransformationMatrix::translate):
        (WebKit::WebTransformationMatrix::translate3d):
        (WebKit::WebTransformationMatrix::translateRight3d):
        (WebKit::WebTransformationMatrix::scale):
        (WebKit::WebTransformationMatrix::scaleNonUniform):
        (WebKit::WebTransformationMatrix::scale3d):
        (WebKit::WebTransformationMatrix::rotate):
        (WebKit::WebTransformationMatrix::rotate3d):
        (WebKit::WebTransformationMatrix::skewX):
        (WebKit::WebTransformationMatrix::skewY):
        (WebKit::WebTransformationMatrix::applyPerspective):
        (WebKit::WebTransformationMatrix::blend):
        (WebKit::WebTransformationMatrix::hasPerspective):
        (WebKit::WebTransformationMatrix::isInvertible):
        (WebKit::WebTransformationMatrix::isBackFaceVisible):
        (WebKit::WebTransformationMatrix::isIdentity):
        (WebKit::WebTransformationMatrix::isIdentityOrTranslation):
        (WebKit::WebTransformationMatrix::isIntegerTranslation):
        (WebKit::WebTransformationMatrix::m11):
        (WebKit::WebTransformationMatrix::setM11):
        (WebKit::WebTransformationMatrix::m12):
        (WebKit::WebTransformationMatrix::setM12):
        (WebKit::WebTransformationMatrix::m13):
        (WebKit::WebTransformationMatrix::setM13):
        (WebKit::WebTransformationMatrix::m14):
        (WebKit::WebTransformationMatrix::setM14):
        (WebKit::WebTransformationMatrix::m21):
        (WebKit::WebTransformationMatrix::setM21):
        (WebKit::WebTransformationMatrix::m22):
        (WebKit::WebTransformationMatrix::setM22):
        (WebKit::WebTransformationMatrix::m23):
        (WebKit::WebTransformationMatrix::setM23):
        (WebKit::WebTransformationMatrix::m24):
        (WebKit::WebTransformationMatrix::setM24):
        (WebKit::WebTransformationMatrix::m31):
        (WebKit::WebTransformationMatrix::setM31):
        (WebKit::WebTransformationMatrix::m32):
        (WebKit::WebTransformationMatrix::setM32):
        (WebKit::WebTransformationMatrix::m33):
        (WebKit::WebTransformationMatrix::setM33):
        (WebKit::WebTransformationMatrix::m34):
        (WebKit::WebTransformationMatrix::setM34):
        (WebKit::WebTransformationMatrix::m41):
        (WebKit::WebTransformationMatrix::setM41):
        (WebKit::WebTransformationMatrix::m42):
        (WebKit::WebTransformationMatrix::setM42):
        (WebKit::WebTransformationMatrix::m43):
        (WebKit::WebTransformationMatrix::setM43):
        (WebKit::WebTransformationMatrix::m44):
        (WebKit::WebTransformationMatrix::setM44):
        (WebKit::WebTransformationMatrix::a):
        (WebKit::WebTransformationMatrix::setA):
        (WebKit::WebTransformationMatrix::b):
        (WebKit::WebTransformationMatrix::setB):
        (WebKit::WebTransformationMatrix::c):
        (WebKit::WebTransformationMatrix::setC):
        (WebKit::WebTransformationMatrix::d):
        (WebKit::WebTransformationMatrix::setD):
        (WebKit::WebTransformationMatrix::e):
        (WebKit::WebTransformationMatrix::setE):
        (WebKit::WebTransformationMatrix::f):
        (WebKit::WebTransformationMatrix::setF):
        (WebKit::WebTransformationMatrix::toWebCoreTransform):
        (WebKit::WebTransformationMatrix::mapRect):
        (WebKit::WebTransformationMatrix::mapPoint):
        (WebKit::WebTransformationMatrix::mapQuad):
        (WebKit::WebTransformationMatrix::projectPoint):

2012-05-11  Alexandru Chiculita  <achicu@adobe.com>

        [CSS Shaders] Make CSS Shaders render to texture framebuffers
        https://bugs.webkit.org/show_bug.cgi?id=85113

        Reviewed by Dean Jackson.

        Added the required members to store the framebuffer, the texture and the depth buffer. Also removed the m_drawingBuffer
        because context->readPixels doesn't require one anymore.

        ReadPixels is not flipping the result, so I've also removed the flipping projection matrix that was specific only to Chromium.

        Added a test to check that colors are not switched and the resulting image is not mirrored.

        Test: css3/filters/custom/effect-color-check.html

        * platform/graphics/filters/FECustomFilter.cpp:
        (WebCore::FECustomFilter::FECustomFilter):
        (WebCore::FECustomFilter::~FECustomFilter):
        (WebCore):
        (WebCore::FECustomFilter::deleteRenderBuffers):
        (WebCore::FECustomFilter::platformApplySoftware):
        (WebCore::FECustomFilter::initializeContext):
        (WebCore::FECustomFilter::resizeContext):
        (WebCore::FECustomFilter::bindProgramAndBuffers):
        * platform/graphics/filters/FECustomFilter.h:
        (FECustomFilter):

2012-05-11  Anders Carlsson  <andersca@apple.com>

        REGRESSION(r116687): [Chromium] plugins/embed-attributes-style.html shows a garbled string
        https://bugs.webkit.org/show_bug.cgi?id=86170

        Reviewed by Andreas Kling.

        The string we are passing to the TextRun constructor needs to stay alive for longer so revert back to the old
        behavior where we store it as a member variable.

        * rendering/RenderEmbeddedObject.cpp:
        (WebCore::unavailablePluginReplacementText):
        (WebCore):
        (WebCore::RenderEmbeddedObject::setPluginUnavailabilityReason):
        (WebCore::RenderEmbeddedObject::getReplacementTextGeometry):
        * rendering/RenderEmbeddedObject.h:
        (RenderEmbeddedObject):

2012-05-11  Simon Fraser  <simon.fraser@apple.com>

        CVDisplayLink keeps running after a single requestAnimationFrame
        https://bugs.webkit.org/show_bug.cgi?id=86174
        
        Reviewed by Sam Weinig.
        
        A DisplayRefreshMonitor would keep its CVDisplayLink alive for as long
        as it had clients, and the client is the ScriptedAnimationController, which
        lives on the document. So a single requestAnimationFrame call would kick
        off a CVDisplayLink which lived until the document was destroyed.
        
        Fix by having the DisplayRefreshMonitor kill itself if the CVDisplayLink
        fires for 10 times with no scheduled callbacks (to avoid creation/deletion
        thrash on pages that call requestAnimationFrames with short setTimeouts,
        as some do).
        
        Use a HashMap in DisplayRefreshMonitorManager for the set of DisplayRefreshMonitor,
        with the displayID as the key (using UnsignedWithZeroKeyHashTraits<uint64_t> since
        we want to allow for 0 to be a valid displayID).
        
        Use a HashSet in DisplayRefreshMonitor for the client set, so that we don't have to
        worry about adding clients twice.
        
        Also fix a possible crash when the only client of a DisplayRefreshMonitor
        was removed from inside the callback by making DisplayRefreshMonitor ref-counted,
        with a protector.

        Test: fast/animation/request-animation-frame-detach-element2.html

        * platform/graphics/DisplayRefreshMonitor.cpp:
        (WebCore::DisplayRefreshMonitor::DisplayRefreshMonitor): Initialize m_unscheduledFireCount
        (WebCore::DisplayRefreshMonitor::handleDisplayRefreshedNotificationOnMainThread): Renamed
        from refreshDisplayOnMainThread, since it doesn't just refresh the display.
        (WebCore::DisplayRefreshMonitor::addClient): No longer inline.
        (WebCore::DisplayRefreshMonitor::removeClient): No longer inline.
        (WebCore::DisplayRefreshMonitor::displayDidRefresh): Keep track of m_unscheduledFireCount,
        which we used to kill this monitor if it has been idle for a while.
        Use a RefPtr<DisplayRefreshMonitor> to prevent deletion while running the callback.
        Copy the clients to a vector to protect against mutating the set while enumerating it.
        Notify the DisplayRefreshMonitorManager when we're done, so that it can decide
        to delete inactive monitors.
        
        (WebCore::DisplayRefreshMonitorManager::ensureMonitorForClient): find or allocate
        a DisplayRefreshMonitor for a given client.
        (WebCore::DisplayRefreshMonitorManager::registerClient): Simplified by use of HashMap.
        (WebCore::DisplayRefreshMonitorManager::unregisterClient): Ditto.
        (WebCore::DisplayRefreshMonitorManager::scheduleAnimation): Ditto. Uses
        ensureMonitorForClient() since an earlier inactive monitor may have been removed.
        (WebCore::DisplayRefreshMonitorManager::displayDidRefresh): Remove inactive
        monitors.
        * platform/graphics/DisplayRefreshMonitor.h: Make DisplayRefreshMonitor
        ref-counted, to make it easier to avoid deletion while it's on the stack.
        (WebCore::DisplayRefreshMonitor::create):
        (DisplayRefreshMonitor):
        (WebCore::DisplayRefreshMonitor::shouldBeTerminated):
        (DisplayRefreshMonitorManager):
        * platform/graphics/blackberry/DisplayRefreshMonitorBlackBerry.cpp: Attempt to
        keep things building.
        (WebCore::DisplayRefreshMonitor::~DisplayRefreshMonitor):
        (WebCore::DisplayRefreshMonitor::displayLinkFired):
        to give the manager a chance to kill this monitor.
        * platform/graphics/mac/DisplayRefreshMonitorMac.cpp:
        (WebCore::DisplayRefreshMonitor::~DisplayRefreshMonitor):
        (WebCore::DisplayRefreshMonitor::displayLinkFired): Don't bail early
        if not scheduled; we want to call handleDisplayRefreshedNotificationOnMainThread(),

2012-05-11  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: move canEditScriptSource and setScriptSource from DebuggerPresentationModel into ResourceBinding
        https://bugs.webkit.org/show_bug.cgi?id=86234

        Reviewed by Vsevolod Vlasov.

        Simple move refactoring.

        * inspector/front-end/DebuggerPresentationModel.js:
        (WebInspector.DebuggerPresentationModel):
        (WebInspector.DebuggerResourceBinding):
        (WebInspector.DebuggerResourceBinding.canEditScriptSource):
        (WebInspector.DebuggerResourceBinding.setScriptSource.didEditScriptSource):
        (WebInspector.DebuggerResourceBinding.setScriptSource):
        (WebInspector.DebuggerResourceBinding.prototype.canSetContent):
        (WebInspector.DebuggerResourceBinding.prototype._uiSourceCodeForResource):
        (WebInspector.DebuggerResourceBinding.prototype._setContentWithInitialContent):
        * inspector/front-end/JavaScriptSourceFrame.js:
        (WebInspector.JavaScriptSourceFrame.prototype.canEditSource):
        (WebInspector.JavaScriptSourceFrame.prototype.editContent):

2012-05-11  Julien Chaffraix  <jchaffraix@webkit.org>

        Remove RenderLayer::m_scrollOverflow
        https://bugs.webkit.org/show_bug.cgi?id=86226

        Reviewed by Simon Fraser.

        No expected change in behavior.

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::computeScrollDimensions):
        Added 2 local variables to compute the left / top scrollable overflows.

        * rendering/RenderLayer.h:
        (WebCore::RenderLayer::scrolledContentOffset):
        Returned m_scrollOffset directly as this is what the old code was doing by adding
        m_scrollOrigin then adding m_scrollOverflow (which was set to -m_scrollOrigin in
        computeScrollDimensions).

        (RenderLayer::m_scrollOffset): Improved the comment about what m_scrollOffset is.

2012-05-11  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: extract PresentationConsoleMessageHelper from DebuggerPresentationModel.
        https://bugs.webkit.org/show_bug.cgi?id=86229

        Reviewed by Vsevolod Vlasov.

        This change also starts tracking messages along with the live location changes.

        Tested with script-formatter-console.html.

        * inspector/front-end/BreakpointManager.js:
        * inspector/front-end/DebuggerPresentationModel.js:
        (WebInspector.DebuggerPresentationModel):
        (WebInspector.DebuggerPresentationModel.prototype._parsedScriptSource):
        (WebInspector.DebuggerPresentationModel.prototype._debuggerReset):
        (WebInspector.PresentationConsoleMessageHelper):
        (WebInspector.PresentationConsoleMessageHelper.prototype._addPendingConsoleMessage):
        (WebInspector.PresentationConsoleMessageHelper.prototype._parsedScriptSource):
        (WebInspector.PresentationConsoleMessageHelper.prototype._debuggerReset):
        (WebInspector.PresentationConsoleMessage):
        * inspector/front-end/JavaScriptSourceFrame.js:
        (WebInspector.JavaScriptSourceFrame.prototype.populateLineGutterContextMenu):
        (WebInspector.JavaScriptSourceFrame.prototype._consoleMessageAdded):
        (WebInspector.JavaScriptSourceFrame.prototype._setBreakpoint):

2012-05-11  Emil A Eklund  <eae@chromium.org>

        Simplify FloatingObject by removing unnecessary convenience methods.
        https://bugs.webkit.org/show_bug.cgi?id=86163

        Reviewed by Eric Seidel.

        Simplify the pixel snapping in FloatingObject by getting rid of a bunch
        of convenience methods.

        No new tests, no change in functionality.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::addOverhangingFloats):
        (WebCore::RenderBlock::addIntrudingFloats):
        (WebCore::RenderBlock::FloatingObjects::intervalForFloatingObject):
        (WebCore::::string):
        * rendering/RenderBlock.h:
        (FloatingObject):
        (WebCore::RenderBlock::pixelSnappedLogicalTopForFloat):
        (WebCore::RenderBlock::pixelSnappedLogicalBottomForFloat):
        (WebCore::RenderBlock::pixelSnappedLogicalLeftForFloat):
        (WebCore::RenderBlock::pixelSnappedLogicalRightForFloat):

2012-05-11  Ian Vollick  <vollick@chromium.org>

        [chromium] Ensure that animations continue to run when transform-style is changed
        https://bugs.webkit.org/show_bug.cgi?id=83283

        Make sure that we transfer animations when changing layers due to a transform-style change.
        Unit tested in GraphicsLayerChromiumTest.updateLayerPreserves3DWithAnimations

        Reviewed by James Robinson.

        Test: animations/change-transform-style-during-animation.html

        * platform/graphics/chromium/GraphicsLayerChromium.cpp:
        (WebCore::GraphicsLayerChromium::updateLayerPreserves3D):
        * platform/graphics/chromium/LayerChromium.cpp:
        (WebCore::LayerChromium::setLayerAnimationController):
        (WebCore::LayerChromium::releaseLayerAnimationController):
        (WebCore):
        (WebCore::LayerChromium::notifyAnimationStarted):
        * platform/graphics/chromium/LayerChromium.h:
        (LayerChromium):
        * platform/graphics/chromium/cc/CCLayerAnimationController.cpp:
        (WebCore::CCLayerAnimationController::CCLayerAnimationController):
        (WebCore::CCLayerAnimationController::pushAnimationUpdatesTo):
        (WebCore::CCLayerAnimationController::notifyAnimationStarted):
        (WebCore::CCLayerAnimationController::setClient):
        (WebCore):
        (WebCore::CCLayerAnimationController::pushNewAnimationsToImplThread):
        (WebCore::CCLayerAnimationController::replaceImplThreadAnimations):
        * platform/graphics/chromium/cc/CCLayerAnimationController.h:
        (CCLayerAnimationController):
        (WebCore::CCLayerAnimationController::setForceSync):

2012-05-11  Tommy Widenflycht  <tommyw@google.com>

        MediaStream API: Fix a reference counting issue in UserMediaRequest
        https://bugs.webkit.org/show_bug.cgi?id=86210

        Reviewed by Abhishek Arya.

        When contextDestroyed() is called on UserMediaRequest it does a callback to the
        page client. If the receiving code clears their stored copy the UserMediaRequest
        object is destroyed in the middle of the call.

        Currently only testable manually against chrome, preferably with asan turned on.
        I have added a manual test that verifies the fix, but I have started work
        to make DumpRenderTree able to test this and many other things. The first patch is here:
        https://bugs.webkit.org/show_bug.cgi?id=86215

        * Modules/mediastream/UserMediaRequest.cpp:
        (WebCore::UserMediaRequest::contextDestroyed):

2012-05-11  Min Qin  <qinmin@google.com>

        split MediaPlayer::enterFullscreen into 2 seperate functions
        https://bugs.webkit.org/show_bug.cgi?id=86052

        Reviewed by Adam Barth.

        It is confusing that enterFullscreen returns a boolean while exitFullscreen does
        not do the same. And ios does not need the return value.
        So remove the return value on enterFullscreen and make a seperate canEnterFullscreen()
        function for android.
        No tests as there are no behavior change, just refactoring.

        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::enterFullscreen):
        (WebCore):
        (WebCore::MediaPlayer::canEnterFullscreen):
        * platform/graphics/MediaPlayer.h:
        (MediaPlayer):
        * platform/graphics/MediaPlayerPrivate.h:
        (WebCore::MediaPlayerPrivateInterface::enterFullscreen):
        (MediaPlayerPrivateInterface):
        (WebCore::MediaPlayerPrivateInterface::canEnterFullscreen):

2012-05-11  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: move breakpoint manager from debuggerPresentationModel to WebInspector.
        https://bugs.webkit.org/show_bug.cgi?id=86220

        Reviewed by Yury Semikhatsky.

        Now that breakpoint manager does not depend on the source mapping instance from the
        debugger presentation model, it can be moved out.

        * inspector/front-end/DebuggerPresentationModel.js:
        (WebInspector.DebuggerPresentationModel):
        * inspector/front-end/JavaScriptSource.js:
        (WebInspector.JavaScriptSource):
        (WebInspector.JavaScriptSource.prototype.setFormatted.didGetContent.didFormatContent):
        (WebInspector.JavaScriptSource.prototype.setFormatted.didGetContent):
        (WebInspector.JavaScriptSource.prototype.setFormatted):
        * inspector/front-end/JavaScriptSourceFrame.js:
        (WebInspector.JavaScriptSourceFrame):
        * inspector/front-end/ScriptsPanel.js:
        * inspector/front-end/inspector.js:

2012-05-11  David Reveman  <reveman@chromium.org>

        [Chromium] Move instantiation of texture uploader to LayerRendererChromium.
        https://bugs.webkit.org/show_bug.cgi?id=85893

        Reviewed by Adrienne Walker.

        Move instantiation of texture uploader to LayerRendererChromium and
        allow CCProxy to decide between a throttled or unthrottled uploader
        using a flag passed to the LayerRendererChromium constructor.

        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::create):
        (WebCore::LayerRendererChromium::LayerRendererChromium):
        (WebCore::LayerRendererChromium::initializeSharedObjects):
        * platform/graphics/chromium/LayerRendererChromium.h:
        (LayerRendererChromium):
        * platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:
        (WebCore::CCLayerTreeHostImpl::initializeLayerRenderer):
        * platform/graphics/chromium/cc/CCLayerTreeHostImpl.h:
        (CCLayerTreeHostImpl):
        * platform/graphics/chromium/cc/CCSingleThreadProxy.cpp:
        (WebCore::CCSingleThreadProxy::initializeLayerRenderer):
        (WebCore::CCSingleThreadProxy::recreateContext):
        * platform/graphics/chromium/cc/CCThreadProxy.cpp:
        (WebCore::CCThreadProxy::initializeLayerRendererOnImplThread):
        (WebCore::CCThreadProxy::recreateContextOnImplThread):

2012-05-10  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: pass source mapping into UISourceCode's constructor; move formatting outside mapping.
        https://bugs.webkit.org/show_bug.cgi?id=86099

        Reviewed by Vsevolod Vlasov.

        This changes moves formatting out of the source mapping machinery.
        As a result, it removes most of the DebuggerPresentation's mapping-related code as well
        as most of the raw source code's code.

        * inspector/front-end/BreakpointManager.js:
        (WebInspector.BreakpointManager):
        (WebInspector.BreakpointManager.prototype.restoreBreakpoints):
        (WebInspector.BreakpointManager.Breakpoint):
        * inspector/front-end/CallStackSidebarPane.js:
        (WebInspector.CallStackSidebarPane.prototype.setStatus):
        * inspector/front-end/CompilerScriptMapping.js:
        * inspector/front-end/DebuggerPresentationModel.js:
        (WebInspector.DebuggerPresentationModel):
        (WebInspector.DebuggerPresentationModel.prototype._callFrameSelected):
        (WebInspector.DebuggerPresentationModel.prototype._handleUISourceCodeListChanged):
        (WebInspector.DebuggerPresentationModel.prototype.continueToLine):
        * inspector/front-end/JavaScriptSource.js:
        (WebInspector.JavaScriptSource):
        (WebInspector.JavaScriptSource.prototype.fireContentAvailable):
        (WebInspector.JavaScriptSource.prototype.setFormatted.if):
        (WebInspector.JavaScriptSource.prototype.setFormatted.didGetContent.didFormatContent):
        (WebInspector.JavaScriptSource.prototype.setFormatted.didGetContent):
        (WebInspector.JavaScriptSource.prototype.setFormatted):
        (WebInspector.JavaScriptSource.prototype.togglingFormatter):
        (WebInspector.JavaScriptSource.prototype.uiLocationToRawLocation):
        (WebInspector.JavaScriptSource.prototype.overrideLocation):
        (WebInspector.JavaScriptSource.prototype.breakpointStorageId):
        (WebInspector):
        * inspector/front-end/JavaScriptSourceFrame.js:
        (WebInspector.JavaScriptSourceFrame.prototype._onContentChanged):
        (WebInspector.JavaScriptSourceFrame.prototype._breakpointRemoved):
        * inspector/front-end/RawSourceCode.js:
        (WebInspector.RawSourceCode):
        (WebInspector.RawSourceCode.prototype.addScript):
        (WebInspector.RawSourceCode.prototype.rawLocationToUILocation):
        (WebInspector.RawSourceCode.prototype._createUISourceCode):
        (WebInspector.RawSourceCode.prototype.uiLocationToRawLocation):
        (WebInspector.RawSourceCode.prototype.uiSourceCode):
        (WebInspector.RawSourceCode.prototype._finishedLoading):
        * inspector/front-end/ResourceScriptMapping.js:
        (WebInspector.ResourceScriptMapping):
        (WebInspector.ResourceScriptMapping.prototype.addScript):
        (WebInspector.ResourceScriptMapping.prototype._handleUISourceCodeChanged):
        (WebInspector.ResourceScriptMapping.prototype._uiSourceCodeChanged):
        * inspector/front-end/Script.js:
        (WebInspector.Script.prototype.rawLocationToUILocation):
        * inspector/front-end/ScriptFormatter.js:
        (WebInspector.ScriptFormatter.prototype._didFormatContent):
        (WebInspector.FormatterSourceMapping):
        (WebInspector.FormatterSourceMapping.prototype.originalToFormatted):
        (WebInspector.FormatterSourceMapping.prototype.formattedToOriginal):
        (WebInspector.IdentityFormatterSourceMapping):
        (WebInspector.IdentityFormatterSourceMapping.prototype.originalToFormatted):
        (WebInspector.IdentityFormatterSourceMapping.prototype.formattedToOriginal):
        (WebInspector.FormatterSourceMappingImpl):
        (WebInspector.FormatterSourceMappingImpl.prototype.originalToFormatted):
        (WebInspector.FormatterSourceMappingImpl.prototype.formattedToOriginal):
        * inspector/front-end/ScriptMapping.js:
        (WebInspector.MainScriptMapping):
        (WebInspector.MainScriptMapping.prototype._handleUISourceCodeListChanged):
        (WebInspector.MainScriptMapping.prototype.reset):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype._handleUISourceCodeAdded):
        (WebInspector.ScriptsPanel.prototype.showFunctionDefinition):
        (WebInspector.ScriptsPanel.prototype._showFile):
        (WebInspector.ScriptsPanel.prototype._revealExecutionLine):
        (WebInspector.ScriptsPanel.prototype._toggleFormatSource):
        * inspector/front-end/ScriptsSearchScope.js:
        (WebInspector.ScriptsSearchResultsPane.prototype.createAnchor):
        * inspector/front-end/SnippetsModel.js:
        (WebInspector.SnippetsScriptMapping.prototype._snippetAdded):
        (WebInspector.SnippetsScriptMapping.prototype._createUISourceCodeForScript):
        * inspector/front-end/UISourceCode.js:
        (WebInspector.UISourceCode):
        (WebInspector.UISourceCode.prototype.requestContent):
        (WebInspector.UISourceCode.prototype.mimeType):
        (WebInspector.UISourceCode.prototype.content):
        (WebInspector.UISourceCode.prototype.fireContentAvailable):
        (WebInspector.UISourceCode.prototype.contentLoaded):
        (WebInspector.UISourceCode.prototype.uiLocationToRawLocation):

2012-05-11  Dominik Röttsches  <dominik.rottsches@intel.com>

        [EFL][DRT] Input Attribute Placeholder RefTests failing
        https://bugs.webkit.org/show_bug.cgi?id=85603

        Unreviewed, build fix for EFL.

        * platform/efl/RenderThemeEfl.cpp:

2012-05-11  Alexei Filippov  <alexeif@chromium.org>

        Web Inspector: Remove support of combined nodes and edges serialization schema.
        https://bugs.webkit.org/show_bug.cgi?id=86209

        Reviewed by Yury Semikhatsky.

        * inspector/front-end/HeapSnapshot.js:
        (WebInspector.HeapSnapshotNode.prototype.get _nodes):
        (WebInspector.HeapSnapshotNode.prototype._edgeIndexesStart):
        (WebInspector.HeapSnapshotNode.prototype._edgeIndexesEnd):
        (WebInspector.HeapSnapshot):
        (WebInspector.HeapSnapshot.prototype._init):
        (WebInspector.HeapSnapshot.prototype._buildRetainers):
        (WebInspector.HeapSnapshot.prototype._bfs):
        (WebInspector.HeapSnapshot.prototype._buildAggregates):
        (WebInspector.HeapSnapshot.prototype._calculateClassesRetainedSize):
        (WebInspector.HeapSnapshot.prototype._buildDominatedNodes):
        * inspector/front-end/HeapSnapshotLoader.js:
        (WebInspector.HeapSnapshotLoader.prototype.pushJSONChunk):

2012-05-11  Yury Semikhatsky  <yurys@chromium.org>

        Web Inspector: add Profiler.getHeapObjectId command
        https://bugs.webkit.org/show_bug.cgi?id=86211

        Reviewed by Pavel Feldman.

        Added Profiler.getHeapObjectId command to the protocol which allows to convert remote
        object id to heap snapshot object id.

        * bindings/js/ScriptProfiler.cpp:
        (WebCore::ScriptProfiler::getHeapObjectId):
        (WebCore):
        * bindings/js/ScriptProfiler.h:
        (WebCore):
        (ScriptProfiler):
        * bindings/v8/ScriptProfiler.cpp:
        (WebCore::ScriptProfiler::getHeapObjectId):
        (WebCore):
        * bindings/v8/ScriptProfiler.h:
        (WebCore):
        (ScriptProfiler):
        * inspector/InjectedScript.cpp:
        (WebCore::InjectedScript::findObjectById):
        (WebCore):
        * inspector/InjectedScript.h:
        (InjectedScript):
        * inspector/InjectedScriptSource.js:
        (.):
        * inspector/Inspector.json:
        * inspector/InspectorProfilerAgent.cpp:
        (WebCore::InspectorProfilerAgent::getHeapObjectId):
        (WebCore):
        * inspector/InspectorProfilerAgent.h:
        (InspectorProfilerAgent):

2012-05-11  Allan Sandfeld Jensen  <allan.jensen@nokia.com>

        Qt support for new layout types.
        https://bugs.webkit.org/show_bug.cgi?id=85607

        Reviewed by Simon Hausmann.

        Adds similar Qt support to FractionalLayout classes as Qt has for
        FloatSomething and IntSomething classes. This means Qt code can stay
        unchanged from after the redefinition of Layout classes.

        No new functionality. No new tests.

        * Target.pri:
        * platform/FractionalLayoutUnit.h:
        (WebCore::operator<<):
        (WebCore::operator>>):
        * platform/graphics/FractionalLayoutPoint.h:
        (FractionalLayoutPoint):
        * platform/graphics/FractionalLayoutRect.h:
        (FractionalLayoutRect):
        * platform/graphics/FractionalLayoutSize.h:
        (FractionalLayoutSize):
        * platform/graphics/qt/FractionalLayoutPointQt.cpp: Added.
        (WebCore::FractionalLayoutPoint::FractionalLayoutPoint):
        (WebCore::FractionalLayoutPoint::operator QPointF):
        * platform/graphics/qt/FractionalLayoutRectQt.cpp: Added.
        (WebCore::FractionalLayoutRect::FractionalLayoutRect):
        (WebCore::FractionalLayoutRect::operator QRectF):
        * platform/graphics/qt/FractionalLayoutSizeQt.cpp: Added.
        (WebCore::FractionalLayoutSize::FractionalLayoutSize):
        (WebCore::FractionalLayoutSize::operator QSizeF):

2012-05-11  Allan Sandfeld Jensen  <allan.jensen@nokia.com>

        Internals::touchPositionAdjustedToBestClickableNode adjust twice for scroll-offset
        https://bugs.webkit.org/show_bug.cgi?id=86205

        Reviewed by Simon Hausmann.

        Remove the redundant conversion from document to window coords.

        Test: touchadjustment/scroll-offset.html

        * testing/Internals.cpp:
        (WebCore::Internals::touchPositionAdjustedToBestClickableNode):
        (WebCore::Internals::bestZoomableAreaForTouchPoint):

2012-05-11  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: load heap snapshot implementation.
        https://bugs.webkit.org/show_bug.cgi?id=86097

        The idea is to have a hidden file selector control.
        When the user select a context menu item or click a button
        we redirect this user-action to file selector.
        As result we see the standard file selector dialog.
        When the user selects a file we load it's chunks and push the chunks to the worker.
        The loaded snapshot can be completely unrelated to the current page.
        Thats why we have to skip range selection options in Summary tab.

        Reviewed by Yury Semikhatsky.

        * English.lproj/localizedStrings.js:
        * inspector/front-end/CSSSelectorProfileView.js:
        (WebInspector.CSSSelectorProfileType.prototype.createTemporaryProfile): now it accepts a custom title.
        * inspector/front-end/HeapSnapshotView.js:
        (WebInspector.HeapSnapshotView.prototype._updateFilterOptions): we have to skip the profiles loaded from file because there is no guaranty t
        (WebInspector.HeapSnapshotProfileType.prototype.createTemporaryProfile): now it accepts a custom title.
        (WebInspector.HeapSnapshotProfileType.prototype.createProfile): cosmetic changes.
        (WebInspector.HeapProfileHeader):
        (WebInspector.HeapProfileHeader.prototype._setupWorker): a common part was extracted from load method and reused in loadFromFile.
        (WebInspector.HeapProfileHeader.prototype._saveStatusUpdate): cosmetic changes.
        (WebInspector.HeapProfileHeader.prototype.finishHeapSnapshot):
        (WebInspector.HeapProfileHeader.prototype.canSaveToFile): cosmetic rename for better consistency with 'load' part.
        (WebInspector.HeapProfileHeader.prototype.saveToFile): cosmetic rename for better consistency with 'load' part.
        (WebInspector.HeapProfileHeader.prototype.canLoadFromFile): cosmetic rename for better consistency with 'load' part.
        (WebInspector.HeapProfileHeader.prototype.loadFromFile): chunk based file loader.
        (WebInspector.HeapProfileHeader.prototype.loadFromFile.loadNextChunk):
        (WebInspector.HeapProfileHeader.prototype.loadFromFile.onLoad):
        * inspector/front-end/ProfileView.js:
        (WebInspector.CPUProfileType.prototype.createTemporaryProfile): now it accepts a custom title.
        * inspector/front-end/ProfilesPanel.js:
        (WebInspector.ProfileType.prototype.createTemporaryProfile): now it accepts a custom title.
        (WebInspector.ProfileHeader.prototype.canSaveToFile): cosmetic rename for better consistency with 'load' part.
        (WebInspector.ProfileHeader.prototype.saveToFile): cosmetic rename for better consistency with 'load' part.
        (WebInspector.ProfileHeader.prototype.canLoadFromFile): default implementation for 'load' part.
        (WebInspector.ProfileHeader.prototype.loadFromFile): default implementation for 'load' part.
        (WebInspector.ProfilesPanel.prototype._createFileSelectorElement):
        (WebInspector.ProfilesPanel.prototype._loadFromFile):
        (WebInspector.ProfileSidebarTreeElement.prototype.handleContextMenuEvent):

2012-05-11  Dominik Röttsches  <dominik.rottsches@intel.com>

        [EFL][DRT] Input Attribute Placeholder RefTests failing
        https://bugs.webkit.org/show_bug.cgi?id=85603

        Reviewed by Hajime Morita.

        Refrain from overriding style coloring by theme coloring.
        RenderThemeEfl was always overriding colors and whitespace
        handling leading to failures in reftests that verify placeholder styling
        which expect the user agent stylesheet to be applied correctly
        without any color overrides. Also, leave whitespace handling untouched.

        No new tests, covered by existing tests. See also
        the LayoutTests/ChangeLog in this commit for the required
        rebaselining.

        * platform/efl/RenderThemeEfl.cpp:
        (WebCore::RenderThemeEfl::createEdje):
        (WebCore::RenderThemeEfl::applyEdjeColors):
        (WebCore::RenderThemeEfl::RenderThemeEfl):
        (WebCore::RenderThemeEfl::adjustButtonStyle):
        (WebCore::RenderThemeEfl::adjustMenuListStyle):
        (WebCore::RenderThemeEfl::adjustTextFieldStyle):
        (WebCore::RenderThemeEfl::adjustSearchFieldStyle):
        * platform/efl/RenderThemeEfl.h:
        (RenderThemeEfl):

2012-05-11  Christophe Dumez  <christophe.dumez@intel.com>

        Web Intents code only supports V8
        https://bugs.webkit.org/show_bug.cgi?id=85954

        Reviewed by Adam Barth.

        Add necessary abstraction for js Dictionary and ScriptValue so that
        the Web Intents code in WebCore compiles with JSC, not just V8.

        This required changes in the JSC bindings generator to pass
        callback arguments of type SerializedScriptValue as raw pointers
        instead of RefPtr. This matches the change made to the V8 bindings
        generator in r104531.

        * CMakeLists.txt:
        * Modules/intents/Intent.cpp:
        * Modules/intents/Intent.h:
        * bindings/js/Dictionary.cpp:
        (WebCore::Dictionary::Dictionary):
        (WebCore):
        (WebCore::Dictionary::getOwnPropertiesAsStringHashMap):
        * bindings/js/Dictionary.h:
        (Dictionary):
        * bindings/js/JSBindingsAllInOne.cpp:
        * bindings/js/JSDictionary.cpp:
        (WebCore::JSDictionary::convertValue):
        (WebCore):
        * bindings/js/JSDictionary.h:
        (WebCore):
        (WebCore::JSDictionary::initializerObject):
        * bindings/js/ScriptValue.cpp:
        (WebCore::ScriptValue::serialize):
        (WebCore):
        * bindings/js/ScriptValue.h:
        (ScriptValue):
        * bindings/scripts/CodeGeneratorJS.pm:
        (AddIncludesForType):
        (GenerateCallbackHeader):
        (GenerateCallbackImplementation):
        (GetNativeTypeForCallbacks):

2012-05-11  Alexander Pavlov  <apavlov@chromium.org>

        Web Inspector: Can't type spaces in "Override User Agent" field
        https://bugs.webkit.org/show_bug.cgi?id=86202

        Reviewed by Yury Semikhatsky.

        * inspector/front-end/HelpScreen.js:
        (WebInspector.HelpScreen.prototype.isClosingKey):
        (WebInspector.HelpScreen.prototype._onKeyDown):
        * inspector/front-end/SettingsScreen.js:
        (WebInspector.SettingsScreen.prototype.isClosingKey):

2012-05-11  Dominik Röttsches  <dominik.rottsches@intel.com>

        [EFL][DRT] Input Attribute Placeholder RefTests failing
        https://bugs.webkit.org/show_bug.cgi?id=85603

        Reviewed by Hajime Morita.

        Refrain from overriding style coloring by theme coloring.
        RenderThemeEfl was always overriding colors and whitespace
        handling leading to failures in reftests that verify placeholder styling
        which expect the user agent stylesheet to be applied correctly
        without any color overrides. Also, leave whitespace handling untouched.

        No new tests, covered by existing tests. See also
        the LayoutTests/ChangeLog in this commit for the required
        rebaselining.

        * platform/efl/RenderThemeEfl.cpp:
        (WebCore::RenderThemeEfl::createEdje):
        (WebCore::RenderThemeEfl::applyEdjeColors):
        (WebCore::RenderThemeEfl::RenderThemeEfl):
        (WebCore::RenderThemeEfl::adjustButtonStyle):
        (WebCore::RenderThemeEfl::adjustMenuListStyle):
        (WebCore::RenderThemeEfl::adjustTextFieldStyle):
        (WebCore::RenderThemeEfl::adjustSearchFieldStyle):
        * platform/efl/RenderThemeEfl.h:
        (RenderThemeEfl):

2012-05-11  Gustavo Noronha Silva  <gns@gnome.org>

        REGRESSION(r116205): [GTK]: build no longer supports thin archives
        https://bugs.webkit.org/show_bug.cgi?id=86207

        * GNUmakefile.am: go back to not linking libWebCoreModules into
        libWebCore; when linking 2 convenience libraries libtools tries to
        extract the object files from one of them to add to the other, breaking
        thin archive builds

2012-05-11  Keishi Hattori  <keishi@webkit.org>

        Sanitization algorithm for input type=email should strip whitespaces
        https://bugs.webkit.org/show_bug.cgi?id=86177

        Reviewed by Kent Tamura.

        No new tests. Covered by: fast/forms/ValidityState-typeMismatch-email.html

        The spec says that the value sanitization algorithm should
        > Strip line breaks from the value, then strip leading and trailing whitespace from the value.

        * html/EmailInputType.cpp:
        (WebCore::EmailInputType::sanitizeValue):

2012-05-11  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r116752.
        http://trac.webkit.org/changeset/116752
        https://bugs.webkit.org/show_bug.cgi?id=86201

        Build failure on Chromium-mac (Requested by tkent on #webkit).

        * html/FormAssociatedElement.cpp:
        * html/FormAssociatedElement.h:
        (FormAssociatedElement):
        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLFormControlElement::setCustomValidity):
        * html/HTMLFormControlElement.h:
        (HTMLFormControlElement):
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::isValidValue):
        (WebCore::HTMLInputElement::typeMismatch):
        (WebCore::HTMLInputElement::valueMissing):
        (WebCore::HTMLInputElement::patternMismatch):
        (WebCore::HTMLInputElement::rangeUnderflow):
        (WebCore::HTMLInputElement::rangeOverflow):
        (WebCore::HTMLInputElement::minimum):
        (WebCore::HTMLInputElement::maximum):
        (WebCore::HTMLInputElement::stepMismatch):
        (WebCore::HTMLInputElement::minimumString):
        (WebCore::HTMLInputElement::maximumString):
        (WebCore):
        (WebCore::HTMLInputElement::stepBaseString):
        (WebCore::HTMLInputElement::stepString):
        (WebCore::HTMLInputElement::typeMismatchText):
        (WebCore::HTMLInputElement::valueMissingText):
        (WebCore::HTMLInputElement::isInRange):
        (WebCore::HTMLInputElement::isOutOfRange):
        * html/HTMLInputElement.h:
        (HTMLInputElement):
        * html/HTMLObjectElement.h:
        (WebCore::HTMLObjectElement::setCustomValidity):
        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::valueMissing):
        * html/HTMLSelectElement.h:
        (HTMLSelectElement):
        * html/HTMLTextAreaElement.cpp:
        * html/HTMLTextAreaElement.h:
        (WebCore::HTMLTextAreaElement::valueMissing):
        (HTMLTextAreaElement):
        * html/InputType.cpp:
        (WebCore::InputType::alignValueForStep):
        (WebCore::InputType::stepUpFromRenderer):
        * html/InputType.h:
        (InputType):
        * html/ValidityState.cpp:
        (WebCore::ValidityState::validationMessage):
        (WebCore):
        (WebCore::ValidityState::setCustomErrorMessage):
        (WebCore::ValidityState::valueMissing):
        (WebCore::ValidityState::typeMismatch):
        (WebCore::ValidityState::patternMismatch):
        (WebCore::ValidityState::tooLong):
        (WebCore::ValidityState::rangeUnderflow):
        (WebCore::ValidityState::rangeOverflow):
        (WebCore::ValidityState::stepMismatch):
        (WebCore::ValidityState::customError):
        (WebCore::ValidityState::valid):
        * html/ValidityState.h:
        (ValidityState):

2012-05-11  Alexander Pavlov  <apavlov@chromium.org>

        Web Inspector: Search box doesn't allow CSS selectors anymore
        https://bugs.webkit.org/show_bug.cgi?id=86196

        Reviewed by Pavel Feldman.

        Refactoring in http://trac.webkit.org/changeset/99983 inadvertently removed the selector matching during
        node search in the InspectorDOMAgent. This change re-introduces the Document::querySelectorAll() evaluation
        for the user query.

        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::performSearch):

2012-05-11  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r116527.
        http://trac.webkit.org/changeset/116527
        https://bugs.webkit.org/show_bug.cgi?id=86199

        Causing crashes on ClusterFuzz (Requested by inferno-sec on
        #webkit).

        * rendering/RenderScrollbar.cpp:
        (WebCore::RenderScrollbar::updateScrollbarPart):
        * rendering/RenderScrollbarPart.h:

2012-05-11  Yoshifumi Inoue  <yosin@chromium.org>

        [Forms] Move ValidityState methods implementation to another place
        https://bugs.webkit.org/show_bug.cgi?id=86058

        Reviewed by Kent Tamura.

        This patch changes ValidityState class for limiting scope of
        number/range input type related methods for introducing decimal
        arithmetic.

        Methods related to validation are moved from ValidateState to
        input, select and textarea elements with virtual method based
        dispatching via FormAssociateElement instead of tag name
        dispatching so far for code simplification.

        No new tests. This patch doesn't change behavior.

        * html/FormAssociatedElement.cpp:
        (WebCore::FormAssociatedElement::customError): Added. Called from ValidateState. Returns custom error mssage in member variable.
        (WebCore::FormAssociatedElement::patternMismatch): Added.  Called from ValidateState. This is default implementation.
        (WebCore::FormAssociatedElement::rangeOverflow): Added.  Called from ValidateState. This is default implementation.
        (WebCore::FormAssociatedElement::rangeUnderflow): Added.  Called from ValidateState. This is default implementation.
        (WebCore::FormAssociatedElement::stepMismatch): Added.  Called from ValidateState. This is default implementation.
        (WebCore::FormAssociatedElement::tooLong): Added.  Called from ValidateState. This is default implementation.
        (WebCore::FormAssociatedElement::typeMismatch): Added.  Called from ValidateState. This is default implementation.
        (WebCore::FormAssociatedElement::valid): Added.  Called from ValidateState. This is default implementation.
        (WebCore::FormAssociatedElement::valueMissing): Added.  Called from ValidateState. This is default implementation.
        (WebCore::FormAssociatedElement::customValidationMessage): Added.  Called from ValidateState. This is default implementation.
        (WebCore::FormAssociatedElement::validationMessage): Added.  Called from ValidateState. This is default implementation.
        (WebCore::FormAssociatedElement::setCustomValidity): Added.  set custom error message.
        * html/FormAssociatedElement.h:
        (FormAssociatedElement): Added new instance value m_customValidationMessage.
        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLFormControlElement::setCustomValidity): Changed. Calls base class setCustomValidity.
        * html/HTMLFormControlElement.h:
        (HTMLFormControlElement):
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::isValidValue): Call m_inputType methods instead of HTMLInputElement's.
        (WebCore::HTMLInputElement::tooLong): Call m_inputType methods instead of HTMLInputElement's.
        (WebCore):
        (WebCore::HTMLInputElement::typeMismatch): Move implementation to InputType.
        (WebCore::HTMLInputElement::valueMissing):  Move implementation to InputType.
        (WebCore::HTMLInputElement::patternMismatch): Move implementation to InputType.
        (WebCore::HTMLInputElement::rangeUnderflow): Move implementation to InputType.
        (WebCore::HTMLInputElement::rangeOverflow): Move implementation to InputType.
        (WebCore::HTMLInputElement::validationMessage): Move implementation to InputType.
        (WebCore::HTMLInputElement::stepMismatch): Move implementation to InputType.
        (WebCore::HTMLInputElement::isInRange): Call m_inputType methods instead of HTMLInputElement's.
        (WebCore::HTMLInputElement::isOutOfRange): Call m_inputType methods instead of HTMLInputElement's.
        * html/HTMLInputElement.h:
        (HTMLInputElement): Make tooLong method private.
        * html/HTMLObjectElement.h: Add "virtual" and "OVERRIDE".
        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::validationMessage): Added. Implementation for HTMLSelectElement.
        (WebCore::HTMLSelectElement::valueMissing): Added. Implementation for HTMLSelectElement.
        * html/HTMLSelectElement.h:
        (HTMLSelectElement):  Added entries for newly added methods.
        * html/HTMLTextAreaElement.cpp:
        (WebCore::HTMLTextAreaElement::validationMessage): Added. Implementation for HTMLTextAreaElement.
        (WebCore::HTMLTextAreaElement::valueMissing): Added. Implementation for HTMLTextAreaElement.
        (WebCore::HTMLTextAreaElement::tooLong): Added. Implementation for HTMLTextAreaElement.
        * html/HTMLTextAreaElement.h:
        (HTMLTextAreaElement): Added entries for newly added methods. Change tooLong and valueMissing private.
        * html/InputType.cpp:
        (WebCore::InputType::stepMismatch): Change method signature.
        (WebCore::InputType::alignValueForStep):  Changed for calling InputClass instead of HTMLINputElement.
        (WebCore::InputType::stepUpFromRenderer):  Added. Moved from HTMLInputElement.
        (WebCore::InputType::validationMessage): Added.  Moved from HTMLInputElement.
        * html/InputType.h:
        (InputType): Added entries for newly added methods and update methods signature.
        * html/ValidityState.cpp: Move actual implementation to FormAssociatedElement and derived classes for localizing implementation change of elements and input types.
        (WebCore::ValidityState::validationMessage): Changed to call FormAssociatedElement's method.
        (WebCore::ValidityState::valueMissing): Changed to call FormAssociatedElement's method.
        (WebCore::ValidityState::typeMismatch): Changed to call FormAssociatedElement's method.
        (WebCore::ValidityState::patternMismatch): Changed to call FormAssociatedElement's method.
        (WebCore::ValidityState::tooLong): Changed to call FormAssociatedElement's method.
        (WebCore::ValidityState::rangeUnderflow): Changed to call FormAssociatedElement's method.
        (WebCore::ValidityState::rangeOverflow): Changed to call FormAssociatedElement's method.
        (WebCore::ValidityState::stepMismatch): Changed to call FormAssociatedElement's method.
        (WebCore::ValidityState::customError): Changed to call FormAssociatedElement's method.
        (WebCore::ValidityState::valid):
        * html/ValidityState.h:
        (ValidityState): Remove custom validation message related things.

2012-05-11  Kent Tamura  <tkent@chromium.org>

        Fix a build error without SVG, introduced by tab-size support.

        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::collectMatchingRulesForList):

2012-05-11  Shinya Kawanaka  <shinyak@chromium.org>

        [Refactoring] Move Selection from DOMWindow to TreeScope.
        https://bugs.webkit.org/show_bug.cgi?id=82699

        Reviewed by Ryosuke Niwa.

        Since ShadowRoot will also manage its own version of DOMSelection, we would like to
        share the code among Document and DOMSelection. This patch moves DOMSelection from DOMWindow to TreeScope
        so that ShadowRoot can also use it.

        No new tests, should covered by existing tests.

        * dom/Document.cpp:
        (WebCore::Document::updateFocusAppearanceTimerFired):
        * dom/Document.h:
        (Document):
        * dom/ShadowRoot.cpp:
        (WebCore::ShadowRoot::selection):
        * dom/TreeScope.cpp:
        (WebCore::TreeScope::~TreeScope):
        (WebCore::TreeScope::getSelection):
        (WebCore):
        * dom/TreeScope.h:
        (WebCore):
        (TreeScope):
        * page/DOMSelection.cpp:
        (WebCore::DOMSelection::DOMSelection):
        (WebCore::DOMSelection::clearTreeScope):
        (WebCore):
        * page/DOMSelection.h:
        (WebCore):
        (WebCore::DOMSelection::create):
        (DOMSelection):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::~DOMWindow):
        (WebCore::DOMWindow::clearDOMWindowProperties):
        (WebCore::DOMWindow::getSelection):
        * page/DOMWindow.h:
        (DOMWindow):

2012-05-04  Yury Semikhatsky  <yurys@chromium.org>

        Web Inspector: console should allow JS execution in the context of an isolated world
        https://bugs.webkit.org/show_bug.cgi?id=85612

        Reviewed by Pavel Feldman.

        Added an option to select not only a frame but also isolated world in which
        to perform evaluation of the code typed into the console.

        Each execution context can be identified using it injected script id. We call it
        execution context id in the protocol. Runtime agent is extended with an event that
        is sent when new ExecutionContext is created. The event tracking can be enabled/disabled
        using setReportExecutionContextCreation command.

        * bindings/js/ScriptController.cpp:
        (WebCore):
        (WebCore::isolatedWorldToSecurityOriginMap):
        * bindings/js/ScriptController.h:
        (ScriptController):
        * bindings/js/ScriptState.cpp:
        (WebCore::isolatedWorldScriptState):
        (WebCore):
        * bindings/js/ScriptState.h:
        (WebCore):
        * bindings/v8/ScriptController.cpp:
        (WebCore):
        (WebCore::ScriptController::isolatedWorldToSecurityOriginMap):
        * bindings/v8/ScriptController.h:
        (ScriptController):
        * bindings/v8/ScriptState.cpp:
        (WebCore::isolatedWorldScriptState):
        (WebCore):
        * bindings/v8/ScriptState.h:
        (WebCore):
        * bindings/v8/V8IsolatedContext.cpp:
        (WebCore::V8IsolatedContext::setSecurityOrigin):
        * bindings/v8/V8Proxy.cpp:
        (WebCore::V8Proxy::setIsolatedWorldSecurityOrigin):
        (WebCore::V8Proxy::isolatedWorldContext):
        (WebCore):
        (WebCore::V8Proxy::isolatedWorldToSecurityOriginMap):
        * bindings/v8/V8Proxy.h:
        (V8Proxy):
        * inspector/CodeGeneratorInspector.py:
        (DomainNameFixes):
        * inspector/Inspector.json:
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::didCreateIsolatedContextImpl):
        (WebCore):
        * inspector/InspectorInstrumentation.h:
        (WebCore):
        (InspectorInstrumentation):
        (WebCore::InspectorInstrumentation::didCreateIsolatedContext):
        * inspector/InspectorRuntimeAgent.cpp:
        (WebCore::InspectorRuntimeAgent::evaluate):
        * inspector/InspectorRuntimeAgent.h:
        (InspectorRuntimeAgent):
        * inspector/InstrumentingAgents.h:
        (WebCore):
        (WebCore::InstrumentingAgents::InstrumentingAgents):
        (WebCore::InstrumentingAgents::pageRuntimeAgent):
        (WebCore::InstrumentingAgents::setPageRuntimeAgent):
        (InstrumentingAgents):
        * inspector/PageRuntimeAgent.cpp:
        (PageRuntimeAgentState):
        (WebCore):
        (WebCore::PageRuntimeAgent::PageRuntimeAgent):
        (WebCore::PageRuntimeAgent::setFrontend):
        (WebCore::PageRuntimeAgent::clearFrontend):
        (WebCore::PageRuntimeAgent::restore):
        (WebCore::PageRuntimeAgent::setReportExecutionContextCreation):
        (WebCore::PageRuntimeAgent::didCreateExecutionContext):
        (WebCore::PageRuntimeAgent::getScriptStateForEval):
        * inspector/PageRuntimeAgent.h:
        (WebCore):
        (PageRuntimeAgent):
        * inspector/WorkerRuntimeAgent.cpp:
        (WebCore::WorkerRuntimeAgent::setReportExecutionContextCreation):
        (WebCore::WorkerRuntimeAgent::getScriptStateForEval):
        * inspector/WorkerRuntimeAgent.h:
        (WorkerRuntimeAgent):
        * inspector/front-end/ConsoleView.js:
        (WebInspector.ConsoleView.prototype.get statusBarItems):
        (WebInspector.ConsoleView.prototype.addContext):
        (WebInspector.ConsoleView.prototype.removeContext):
        (WebInspector.ConsoleView.prototype._updateIsolatedWorldSelector):
        (WebInspector.ConsoleView.prototype._contextUpdated):
        (WebInspector.ConsoleView.prototype._addedExecutionContext):
        (WebInspector.ConsoleView.prototype._currentEvaluationContextId):
        (WebInspector.ConsoleView.prototype._currentEvaluationContext):
        (WebInspector.ConsoleView.prototype._currentIsolatedWorldId):
        (WebInspector.ConsoleView.prototype.evalInInspectedWindow):
        * inspector/front-end/ExtensionPanel.js:
        (WebInspector.ExtensionSidebarPane.prototype.setExpression):
        * inspector/front-end/ExtensionServer.js:
        (WebInspector.ExtensionServer.prototype._onEvaluateOnInspectedPage):
        * inspector/front-end/JavaScriptContextManager.js:
        (WebInspector.JavaScriptContextManager):
        (WebInspector.JavaScriptContextManager.prototype._didLoadCachedResources):
        (WebInspector.JavaScriptContextManager.prototype.isolatedContextCreated):
        (WebInspector.RuntimeDispatcher):
        (WebInspector.RuntimeDispatcher.prototype.isolatedContextCreated):
        (WebInspector.ExecutionContext):
        (WebInspector.ExecutionContext.comparator):
        (WebInspector.FrameEvaluationContext):
        (WebInspector.FrameEvaluationContext.prototype._frameNavigated):
        (WebInspector.FrameEvaluationContext.prototype._addExecutionContext):
        (WebInspector.FrameEvaluationContext.prototype._ensureMainWorldContextAdded):
        (WebInspector.FrameEvaluationContext.prototype.isolatedContexts):

2012-05-11  Andrey Kosyakov  <caseq@chromium.org>

        Web Inspector: use div, not span as a parent element for ElementsTreeOutline in Audits panel
        https://bugs.webkit.org/show_bug.cgi?id=86188

        Reviewed by Yury Semikhatsky.

        We need to use <div>, not <span> as a container for ElementsTreeOutline, as latter accesses its parent offsetWidth
        within _treeElementFromEvent(), which returns 0 for inline elements.

        * inspector/front-end/AuditFormatters.js:
        (WebInspector.AuditFormatters.node.onNodeAvailable):
        (WebInspector.AuditFormatters.node):

2012-05-11  Antti Koivisto  <antti@apple.com>

        Inline Node::traverseNextNode
        https://bugs.webkit.org/show_bug.cgi?id=85844

        Reviewed by Ryosuke Niwa.
        
        Inline traverseNextNode and traverseNextSibling to reduce entry/exit overhead and allow better code generation
        for many hot loops.

        In this version only the firstChild()/nextSibling() tests are inlined and the ancestor traversal is not.
        
        Performance bots will tell if this was worthwhile.

        * dom/ContainerNode.h:
        (WebCore::Node::traverseNextNode):
        (WebCore):
        (WebCore::Node::traverseNextSibling):
        * dom/Node.cpp:
        (WebCore::Node::traverseNextAncestorSibling):
        * dom/Node.h:
        (Node):
        * bindings/v8/RetainedDOMInfo.cpp:

2012-05-07  Yury Semikhatsky  <yurys@chromium.org>

        Web Inspector: get rid of InspectorAgent::emitCommitLoadIfNeeded method
        https://bugs.webkit.org/show_bug.cgi?id=85708

        Reviewed by Pavel Feldman.

        Instead of calling emitCommitLoadIfNeeded after all agents are restored
        required actions are performed directly in the restore() methods.

        * inspector/InspectorAgent.cpp:
        * inspector/InspectorAgent.h:
        (WebCore::InspectorAgent::didCommitLoadFired):
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        (WebCore::InspectorController::restoreInspectorStateFromCookie):
        * inspector/InspectorDatabaseAgent.cpp:
        (WebCore::InspectorDatabaseAgent::restore):
        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::create):
        (WebCore::InspectorPageAgent::InspectorPageAgent):
        (WebCore::InspectorPageAgent::restore):
        * inspector/InspectorPageAgent.h:
        (WebCore):
        * inspector/InspectorResourceAgent.cpp:
        (WebCore::InspectorResourceAgent::restore):

2012-05-10  Andrey Kosyakov  <caseq@chromium.org>

        Web Inspector: [Extensions API] add audit formatters for remote objects and DOM elements
        https://bugs.webkit.org/show_bug.cgi?id=86108

        Reviewed by Pavel Feldman.

       - added two new formatters to AuditResults object of webInspector.audits API;

        * inspector/front-end/AuditFormatters.js:
        (WebInspector.AuditFormatters.resourceLink):
        (WebInspector.AuditFormatters.object.onEvaluate):
        (WebInspector.AuditFormatters.object): format as a remote object property list;
        (WebInspector.AuditFormatters.node.onNodeAvailable):
        (WebInspector.AuditFormatters.node.onEvaluate):
        (WebInspector.AuditFormatters.node): format as a DOM elements sub-tree;
        (WebInspector.AuditFormatters.Utilities.evaluate): common expression evaluation logic for both new formatters;
        * inspector/front-end/ExtensionAPI.js:
        (injectedExtensionAPI.AuditResultImpl):
        * inspector/front-end/auditsPanel.css:
        (.audit-result-tree ol.outline-disclosure):
        (.audit-result-tree .section .header):
        (.audit-result-tree .section .header::before):

2012-05-11  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r116727.
        http://trac.webkit.org/changeset/116727
        https://bugs.webkit.org/show_bug.cgi?id=86181

        Build error on Chromium-Android (Requested by tkent on
        #webkit).

        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::enterFullscreen):
        (WebCore):
        * platform/graphics/MediaPlayer.h:
        (MediaPlayer):
        * platform/graphics/MediaPlayerPrivate.h:
        (WebCore::MediaPlayerPrivateInterface::enterFullscreen):
        (MediaPlayerPrivateInterface):

2012-05-11  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r116731.
        http://trac.webkit.org/changeset/116731
        https://bugs.webkit.org/show_bug.cgi?id=86178

        Build failure on Chromium-mac (Requested by tkent on #webkit).

        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::create):
        (WebCore::LayerRendererChromium::LayerRendererChromium):
        (WebCore::LayerRendererChromium::initializeSharedObjects):
        * platform/graphics/chromium/LayerRendererChromium.h:
        (LayerRendererChromium):
        * platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:
        (WebCore::CCLayerTreeHostImpl::initializeLayerRenderer):
        * platform/graphics/chromium/cc/CCLayerTreeHostImpl.h:
        (CCLayerTreeHostImpl):
        * platform/graphics/chromium/cc/CCSingleThreadProxy.cpp:
        (UnthrottledTextureUploader):
        (WebCore::UnthrottledTextureUploader::create):
        (WebCore::UnthrottledTextureUploader::~UnthrottledTextureUploader):
        (WebCore::UnthrottledTextureUploader::isBusy):
        (WebCore::UnthrottledTextureUploader::beginUploads):
        (WebCore::UnthrottledTextureUploader::endUploads):
        (WebCore::UnthrottledTextureUploader::uploadTexture):
        (WebCore::UnthrottledTextureUploader::UnthrottledTextureUploader):
        (WebCore):
        (WebCore::CCSingleThreadProxy::initializeLayerRenderer):
        (WebCore::CCSingleThreadProxy::recreateContext):
        * platform/graphics/chromium/cc/CCThreadProxy.cpp:
        (WebCore):
        (UnthrottledTextureUploader):
        (WebCore::UnthrottledTextureUploader::create):
        (WebCore::UnthrottledTextureUploader::~UnthrottledTextureUploader):
        (WebCore::UnthrottledTextureUploader::isBusy):
        (WebCore::UnthrottledTextureUploader::beginUploads):
        (WebCore::UnthrottledTextureUploader::endUploads):
        (WebCore::UnthrottledTextureUploader::uploadTexture):
        (WebCore::UnthrottledTextureUploader::UnthrottledTextureUploader):
        (WebCore::CCThreadProxy::initializeLayerRendererOnImplThread):
        (WebCore::CCThreadProxy::recreateContextOnImplThread):

2012-05-10  David Reveman  <reveman@chromium.org>

        [Chromium] Move instantiation of texture uploader to LayerRendererChromium.
        https://bugs.webkit.org/show_bug.cgi?id=85893

        Reviewed by Adrienne Walker.

        Move instantiation of texture uploader to LayerRendererChromium and
        allow CCProxy to decide between a throttled or unthrottled uploader
        using a flag passed to the LayerRendererChromium constructor.

        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::create):
        (WebCore::LayerRendererChromium::LayerRendererChromium):
        (WebCore::LayerRendererChromium::initializeSharedObjects):
        * platform/graphics/chromium/LayerRendererChromium.h:
        (LayerRendererChromium):
        * platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:
        (WebCore::CCLayerTreeHostImpl::initializeLayerRenderer):
        * platform/graphics/chromium/cc/CCLayerTreeHostImpl.h:
        (CCLayerTreeHostImpl):
        * platform/graphics/chromium/cc/CCSingleThreadProxy.cpp:
        (WebCore::CCSingleThreadProxy::initializeLayerRenderer):
        (WebCore::CCSingleThreadProxy::recreateContext):
        * platform/graphics/chromium/cc/CCThreadProxy.cpp:
        (WebCore::CCThreadProxy::initializeLayerRendererOnImplThread):
        (WebCore::CCThreadProxy::recreateContextOnImplThread):

2012-05-10  MORITA Hajime  <morrita@google.com>

        ElementShadow should minimize the usage of "ShadowRoot" name
        https://bugs.webkit.org/show_bug.cgi?id=85970

        Reviewed by Dimitri Glazkov.

        This change cleans two out dated assumptions which brought in at
        early stage of Shadow DOM implementation.

        - Removed Element::hasShadowRoot(): shadow existence can be checked by Element::shadow().
        - Made ElementShadow::removeAllShadowRoots() private: we no longer allow ShadowRoot removal.
          It can only happens at the ElementShadow destruction.

        Most of changes in element implementations are basically simple
        replacement from hasShadowRoot() to shadow().

        No new tests. Covered by existing tests.

        * WebCore.exp.in:
        * dom/ContainerNodeAlgorithms.h:
        (WebCore::ChildFrameDisconnector::collectDescendant):
        * dom/ComposedShadowTreeWalker.cpp:
        (WebCore::ComposedShadowTreeWalker::traverseChild):
        * dom/Document.cpp:
        (WebCore::Document::buildAccessKeyMap):
        * dom/Element.cpp:
        (WebCore::Element::recalcStyle):
        (WebCore::Element::ensureShadowRoot):
        (WebCore::Element::childrenChanged):
        * dom/Element.h:
        (Element):
        (WebCore::isShadowHost):
        (WebCore):
        * dom/ElementShadow.cpp:
        (WebCore::ElementShadow::~ElementShadow):
        (WebCore::ElementShadow::removeAllShadowRoots):
        * dom/ElementShadow.h:
        (ElementShadow):
        (WebCore::ElementShadow::host):
        * dom/EventDispatcher.cpp:
        * dom/Node.cpp:
        (WebCore::oldestShadowRootFor):
        * dom/NodeRenderingContext.cpp:
        (WebCore::NodeRenderingContext::NodeRenderingContext):
        * dom/ShadowRoot.cpp:
        (WebCore::ShadowRoot::create):
        * html/ColorInputType.cpp:
        (WebCore::ColorInputType::createShadowSubtree):
        * html/FileInputType.cpp:
        (WebCore::FileInputType::createShadowSubtree):
        (WebCore::FileInputType::multipleAttributeChanged):
        * html/HTMLDetailsElement.cpp:
        (WebCore::HTMLDetailsElement::createShadowSubtree):
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::createShadowSubtree):
        * html/HTMLKeygenElement.cpp:
        (WebCore::HTMLKeygenElement::HTMLKeygenElement):
        (WebCore::HTMLKeygenElement::shadowSelect):
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::hasMediaControls):
        * html/HTMLMeterElement.cpp:
        (WebCore::HTMLMeterElement::createShadowSubtree):
        * html/HTMLProgressElement.cpp:
        (WebCore::HTMLProgressElement::createShadowSubtree):
        * html/HTMLSummaryElement.cpp:
        (WebCore::HTMLSummaryElement::createShadowSubtree):
        * html/HTMLTextAreaElement.cpp:
        (WebCore::HTMLTextAreaElement::createShadowSubtree):
        * html/InputType.cpp:
        (WebCore::InputType::destroyShadowSubtree):
        * html/RangeInputType.cpp:
        (WebCore::RangeInputType::handleMouseDownEvent):
        (WebCore::RangeInputType::createShadowSubtree):
        * html/TextFieldInputType.cpp:
        (WebCore::TextFieldInputType::createShadowSubtree):
        * html/shadow/SliderThumbElement.cpp:
        (WebCore::trackLimiterElementOf):
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::unbind):
        (WebCore::InspectorDOMAgent::buildObjectForNode):
        * page/FocusController.cpp:
        (WebCore):
        * rendering/RenderFileUploadControl.cpp:
        (WebCore::RenderFileUploadControl::uploadButton):
        * svg/SVGTRefElement.cpp:
        (WebCore::SVGTRefElement::updateReferencedText):
        (WebCore::SVGTRefElement::detachTarget):
        * testing/Internals.cpp:
        (WebCore::Internals::ensureShadowRoot):
        (WebCore::Internals::youngestShadowRoot):
        (WebCore::Internals::oldestShadowRoot):
        * testing/Internals.h:
        (Internals):
        * testing/Internals.idl:

2012-05-10  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Move resumeAnimations to use Internals interface
        https://bugs.webkit.org/show_bug.cgi?id=86063

        Reviewed by Alexey Proskuryakov.

        Add resumeAnimations functions, because it is able to work in the
        cross-port way through the Internals interface.

        No new tests, since we are improving here the infra-structure for testing
        a specific method.

        * testing/Internals.cpp:
        (WebCore::Internals::resumeAnimations):
        (WebCore):
        * testing/Internals.h:
        (Internals):
        * testing/Internals.idl:

2012-05-10  Min Qin  <qinmin@google.com>

        split MediaPlayer::enterFullscreen into 2 seperate functions
        https://bugs.webkit.org/show_bug.cgi?id=86052

        Reviewed by Benjamin Poulain.

        It is confusing that enterFullscreen returns a boolean while exitFullscreen does
        not do the same. And ios does not need the return value.
        So remove the return value on enterFullscreen and make a seperate canEnterFullscreen()
        function for android.
        No tests as there are no behavior change, just refactoring.

        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::enterFullscreen):
        (WebCore):
        (WebCore::MediaPlayer::canEnterFullscreen):
        * platform/graphics/MediaPlayer.h:
        (MediaPlayer):
        * platform/graphics/MediaPlayerPrivate.h:
        (WebCore::MediaPlayerPrivateInterface::enterFullscreen):
        (MediaPlayerPrivateInterface):
        (WebCore::MediaPlayerPrivateInterface::canEnterFullscreen):

2012-05-10  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r116715.
        http://trac.webkit.org/changeset/116715
        https://bugs.webkit.org/show_bug.cgi?id=86172

        Broke http/tests/security/cross-frame-access-selection.html
        (Requested by tkent on #webkit).

        * dom/Document.cpp:
        (WebCore):
        (WebCore::Document::getSelection):
        * dom/Document.h:
        (Document):
        * dom/ShadowRoot.cpp:
        (WebCore::ShadowRoot::selection):
        * dom/TreeScope.cpp:
        (WebCore::TreeScope::~TreeScope):
        * dom/TreeScope.h:
        (WebCore):
        (TreeScope):
        * page/DOMSelection.cpp:
        (WebCore::DOMSelection::DOMSelection):
        * page/DOMSelection.h:
        (WebCore):
        (WebCore::DOMSelection::create):
        (DOMSelection):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::~DOMWindow):
        (WebCore::DOMWindow::clearDOMWindowProperties):
        (WebCore::DOMWindow::getSelection):
        * page/DOMWindow.h:
        (DOMWindow):

2012-05-10  Hajime Morrita  <morrita@google.com>

        WebKit should support tab-size.
        https://bugs.webkit.org/show_bug.cgi?id=52994

        - Added boilerplate for "tab-size" CSS property.
        - Added RenderStye::tabSize() as a RareInheritedData.
        - Replaced TextRun::m_allowTabs into TextRun::m_tabSize.

        Reviewed by Simon Fraser.

        Tests: fast/css/tab-size-expected.html
               fast/css/tab-size.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):
        * css/CSSProperty.cpp:
        (WebCore::CSSProperty::isInheritedProperty):
        * css/CSSPropertyNames.in:
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):
        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::drawTextInternal):
        * platform/chromium/PopupListBox.cpp:
        (WebCore::PopupListBox::paintRow):
        * platform/graphics/Font.h:
        (WebCore::Font::tabWidth):
        * platform/graphics/TextRun.h:
        (WebCore::TextRun::TextRun):
        (WebCore::TextRun::allowTabs):
        (WebCore::TextRun::tabSize):
        (WebCore::TextRun::setTabSize):
        * platform/graphics/WidthIterator.cpp:
        (WebCore::WidthIterator::advance):
        * platform/graphics/mac/ComplexTextController.cpp:
        (WebCore::ComplexTextController::adjustGlyphsAndAdvances):
        * platform/win/PopupMenuWin.cpp:
        (WebCore::PopupMenuWin::paint):
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::constructTextRun):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::constructTextRun):
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::textWidth):
        (WebCore::tryHyphenating):
        * rendering/RenderText.cpp:
        (WebCore::RenderText::widthFromCache):
        (WebCore::RenderText::computePreferredLogicalWidths):
        (WebCore::RenderText::width):
        * rendering/RenderText.h:
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::diff):
        * rendering/style/RenderStyle.h:
        (WebCore::RenderStyleBitfields::tabSize):
        (WebCore::RenderStyleBitfields::collapsedTabSize):
        (WebCore::RenderStyleBitfields::setTabSize):
        (WebCore::RenderStyleBitfields::initialTabSize):
        * rendering/style/StyleRareInheritedData.cpp:
        (WebCore::StyleRareInheritedData::StyleRareInheritedData):
        (WebCore::StyleRareInheritedData::operator==):
        * rendering/style/StyleRareInheritedData.h:
        * rendering/svg/SVGInlineTextBox.cpp:
        (WebCore::SVGInlineTextBox::constructTextRun):
        * rendering/svg/SVGTextMetrics.cpp:
        (WebCore::constructTextRun):

2012-05-10  Antoine Labour  <piman@chromium.org>

        Sync with impl thread when removing references to external textures
        https://bugs.webkit.org/show_bug.cgi?id=86054

        We want to ensure the client side is safe to release textures, so we
        sync with the impl thread when:
        - we change the texture (and we had one)
        - the layer is removed from the tree (and we had a texture)
        - the layer is destroyed (and we had a texture)

        Reviewed by James Robinson.

        Test: TextureLayerChromiumTest.

        * platform/graphics/chromium/TextureLayerChromium.cpp:
        (WebCore::TextureLayerChromium::~TextureLayerChromium):
        (WebCore::TextureLayerChromium::setTextureId):
        (WebCore::TextureLayerChromium::setLayerTreeHost):
        (WebCore):
        * platform/graphics/chromium/TextureLayerChromium.h:
        (TextureLayerChromium):

2012-05-10  Kent Tamura  <tkent@chromium.org>

        [Chromium] attempt to build fix for Chromium-mac.
        r116697 introduced an override of a system function. It's intentional
        and WebCoreTextFieldCell should be in the whitelist.

        * WebCore.gyp/WebCore.gyp:

2012-05-10  Anders Carlsson  <andersca@apple.com>

        PDF files won't scroll in Safari when using Adobe plug-in
        https://bugs.webkit.org/show_bug.cgi?id=86167
        <rdar://problem/11389719>

        Reviewed by Sam Weinig.

        * page/scrolling/ScrollingCoordinator.cpp:
        (WebCore::computeNonFastScrollableRegion):
        Loop over the frame view children looking for plug-in views that want wheel events
        and add them to the non-fast scrollable region. Ideally, the plug-ins should be added
        to the set of scrollable areas, but PluginView in WebKit2 is not a ScrollableArea yet.

        * plugins/PluginViewBase.h:
        (PluginViewBase):
        (WebCore::PluginViewBase::wantsWheelEvents):

2012-05-10  Alexey Proskuryakov  <ap@apple.com>

        Crash in 3rd party WebKit apps that disable cache at a wrong time
        https://bugs.webkit.org/show_bug.cgi?id=86027
        <rdar://problem/10615880>

        Reviewed by Antti Koivisto.

        Added an API test.

        The fix is to use CachedResourceHandle throughout MemoryCache, which will certainly
        keep the resource alive. Also removed earlier fixes.

        * css/CSSImageSetValue.cpp: (WebCore::CSSImageSetValue::cachedImageSet):
        * css/CSSImageValue.cpp: (WebCore::CSSImageValue::cachedImage):
        * css/WebKitCSSShaderValue.cpp: (WebCore::WebKitCSSShaderValue::cachedShader):
        * history/PageCache.cpp: (WebCore::PageCache::releaseAutoreleasedPagesNow):
        * loader/ImageLoader.cpp: (WebCore::ImageLoader::updateFromElement):
        * loader/TextTrackLoader.cpp: (WebCore::TextTrackLoader::load):
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::requestImage):
        (WebCore::CachedResourceLoader::requestFont):
        (WebCore::CachedResourceLoader::requestTextTrack):
        (WebCore::CachedResourceLoader::requestShader):
        (WebCore::CachedResourceLoader::requestCSSStyleSheet):
        (WebCore::CachedResourceLoader::requestUserCSSStyleSheet):
        (WebCore::CachedResourceLoader::requestScript):
        (WebCore::CachedResourceLoader::requestXSLStyleSheet):
        (WebCore::CachedResourceLoader::requestSVGDocument):
        (WebCore::CachedResourceLoader::requestLinkResource):
        (WebCore::CachedResourceLoader::requestRawResource):
        (WebCore::CachedResourceLoader::requestResource):
        (WebCore::CachedResourceLoader::revalidateResource):
        (WebCore::CachedResourceLoader::loadResource):
        (WebCore::CachedResourceLoader::requestPreload):
        * loader/cache/CachedResourceLoader.h: (CachedResourceLoader):
        * loader/cache/MemoryCache.h: (WebCore::MemoryCache::setPruneEnabled):

        * loader/cache/CachedResourceHandle.h:
        (WebCore::CachedResourceHandle::CachedResourceHandle):
        (WebCore::CachedResourceHandle::operator=):
        Teach CachedResourceHandle how to make CachedResourceHandle<CachedResource> from
        a handle to subclass.

2012-05-10  Tien-Ren Chen  <trchen@chromium.org>

        Eliminate duplicated code for culled line box in RenderInline
        https://bugs.webkit.org/show_bug.cgi?id=85725

        This patch extracts the common part of culledInlineBoundingBox() /
        culledInlineAbsoluteRects() / culledInlineAbsoluteQuads() to become a
        template function generateCulledLineBoxRects(). The template function
        accepts a new parameter, GeneratorContext functor, which will be
        invoked everytime a new line box rect has been generated. The generated
        rect will be in local coordinate. The functor will be responsible for
        appropriate transformation, then appending to vector or union with
        existing bounding box.

        Reviewed by Eric Seidel.

        No new tests. No change in behavior.

        * rendering/RenderInline.cpp:
        (WebCore):
        (WebCore::RenderInline::generateLineBoxRects):
        (WebCore::RenderInline::generateCulledLineBoxRects):
        (WebCore::RenderInline::absoluteRects):
        (WebCore::RenderInline::absoluteQuads):
        (WebCore::RenderInline::linesBoundingBox):
        (WebCore::RenderInline::culledInlineVisualOverflowBoundingBox):
        (WebCore::RenderInline::addFocusRingRects):
        * rendering/RenderInline.h:
        (RenderInline):

2012-05-10  Abhishek Arya  <inferno@chromium.org>

        Crash in swapInNodePreservingAttributesAndChildren.
        https://bugs.webkit.org/show_bug.cgi?id=85197
 
        Reviewed by Ryosuke Niwa.
 
        Keep the children in a ref vector before adding them to newNode.
        They can get destroyed due to mutation events.

        No new tests because we don't have a reduction.

        * editing/ReplaceNodeWithSpanCommand.cpp:
        (WebCore::swapInNodePreservingAttributesAndChildren):

2012-05-10  Shinya Kawanaka  <shinyak@chromium.org>

        [Refactoring] Move Selection from DOMWindow to TreeScope.
        https://bugs.webkit.org/show_bug.cgi?id=82699

        Reviewed by Ryosuke Niwa.

        Since ShadowRoot will also manage its own version of DOMSelection, we would like to
        share the code among Document and DOMSelection. This patch moves DOMSelection from DOMWindow to TreeScope
        so that ShadowRoot can also use it.

        No new tests, should covered by existing tests.

        * dom/Document.cpp:
        (WebCore::Document::updateFocusAppearanceTimerFired):
        * dom/Document.h:
        (Document):
        * dom/ShadowRoot.cpp:
        (WebCore::ShadowRoot::selection):
        * do/mTreeScope.cpp:
        (WebCore::TreeScope::~TreeScope):
        (WebCore::TreeScope::getSelection):
        (WebCore):
        * dom/TreeScope.h:
        (WebCore):
        (TreeScope):
        * page/DOMSelection.cpp:
        (WebCore::DOMSelection::DOMSelection):
        (WebCore::DOMSelection::clearTreeScope):
        (WebCore):
        * page/DOMSelection.h:
        (WebCore):
        (WebCore::DOMSelection::create):
        (DOMSelection):
        (WebCore::DOMSelection::frame):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::~DOMWindow):
        (WebCore::DOMWindow::clearDOMWindowProperties):
        (WebCore::DOMWindow::getSelection):
        * page/DOMWindow.h:
        (DOMWindow):

2012-05-10  Kent Tamura  <tkent@chromium.org>

        Unreviewed, rolling out r116594.
        http://trac.webkit.org/changeset/116594
        https://bugs.webkit.org/show_bug.cgi?id=86013

        r116594 might have made some composition tests flaky.

        * platform/graphics/chromium/LayerChromium.cpp:
        (WebCore::LayerChromium::addAnimation):
        * platform/graphics/chromium/cc/CCLayerAnimationController.cpp:
        (WebCore::CCLayerAnimationController::pushNewAnimationsToImplThread):
        * platform/graphics/chromium/cc/CCLayerTreeHost.cpp:
        (WebCore::CCLayerTreeHost::finishCommitOnImplThread):
        (WebCore::CCLayerTreeHost::didBecomeInvisibleOnImplThread):
        * platform/graphics/chromium/cc/CCLayerTreeHost.h:
        (CCLayerTreeHost):
        * platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:
        (WebCore::CCLayerTreeHostImpl::CCLayerTreeHostImpl):
        * platform/graphics/chromium/cc/CCProxy.h:
        (CCProxy):
        * platform/graphics/chromium/cc/CCSingleThreadProxy.cpp:
        (WebCore::CCSingleThreadProxy::CCSingleThreadProxy):
        (WebCore::CCSingleThreadProxy::doComposite):
        * platform/graphics/chromium/cc/CCSingleThreadProxy.h:
        (WebCore):
        * platform/graphics/chromium/cc/CCThreadProxy.h:
        (CCThreadProxy):

2012-05-10  Michael Nordman  <michaeln@google.com>

        [chromium] DomStorage events handling needs TLC (2)
        https://bugs.webkit.org/show_bug.cgi?id=85221
        Alter the StorageArea virtual interface such that the mutators no longer
        return old values. This is to allow implementations of the interface to operate
        more asynchronously.

        Reviewed by Adam Barth.

        No new tests. Existing tests cover this.

        * storage/StorageArea.h: Alter the interface so the mutators no longer return previous values
        * storage/StorageAreaImpl.cpp:
        (WebCore::StorageAreaImpl::disabledByPrivateBrowsingInFrame):  removed an unneeded PLATFORM(CHROMIUM) guard
        (WebCore::StorageAreaImpl::setItem): no longer return the old value
        (WebCore::StorageAreaImpl::removeItem): no longer return the old value
        (WebCore::StorageAreaImpl::clear): no longer return whether something was cleared
        * storage/StorageAreaImpl.h: match StorageArea's virtual interface

2012-05-10  Beth Dakin  <bdakin@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=86158
        Overlay scrollbars without layers never paint in overflow regions in 
        tiled drawing mode
        -and corresponding-
        <rdar://problem/11289546>

        Reviewed by Darin Adler.

        RenderLayers paint scrollbars that do not have their own layers by 
        running a second pass through the layer tree after the layer tree has 
        painted. This ensures that the scrollbars always paint on top of 
        content. However, this mechanism was relying on 
        FrameView::paintContents() as a choke-point for all painting to 
        trigger the second painting pass. That is not a reasonable choke-point 
        in tiled drawing, so this patch adds similar code to 
        RenderLayerBacking.

        Only opt into the second painting pass for scrollbars that do not have 
        their own layers.
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::paintOverflowControls):
        
        A layer that paints into its backing cannot return early here if it 
        has overlay scrollbars to paint.
        (WebCore::RenderLayer::paintLayer):
        
        This replicates code in FrameView::paintContents(). After painting the 
        owning layer, do a second pass if there are overlay scrollbars to 
        paint.
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::paintIntoLayer):

2012-05-10  Anders Carlsson  <andersca@apple.com>

        Well, at least fixing the GTK+ build is something!

        * platform/gtk/LocalizedStringsGtk.cpp:
        (WebCore::insecurePluginVersionText):
        (WebCore):

2012-05-10  Anders Carlsson  <andersca@apple.com>

        Add insecurePluginVersionText stubs.

        * platform/blackberry/LocalizedStringsBlackBerry.cpp:
        (WebCore::insecurePluginVersionText):
        (WebCore):
        * platform/efl/LocalizedStringsEfl.cpp:
        (WebCore::insecurePluginVersionText):
        (WebCore):
        * platform/qt/LocalizedStringsQt.cpp:
        (WebCore::insecurePluginVersionText):
        (WebCore):

2012-05-10  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r116677.
        http://trac.webkit.org/changeset/116677
        https://bugs.webkit.org/show_bug.cgi?id=86159

        This patch causes linker error to some mac bots (Requested by
        jianli_ on #webkit).

        * WebCore.exp.in:
        * dom/ContainerNode.h:
        * dom/Node.cpp:
        (WebCore::Node::traverseNextNode):
        (WebCore::Node::traverseNextSibling):
        * dom/Node.h:
        (Node):

2012-05-10  Abhishek Arya  <inferno@chromium.org>

        Crash in FontCache::releaseFontData due to infinite float size.
        https://bugs.webkit.org/show_bug.cgi?id=86110

        Reviewed by Andreas Kling.

        New callers always forget to clamp the font size, which overflows
        to infinity on multiplication. It is best to clamp it at the end
        to avoid getting greater than std::numeric_limits<float>::max().

        Test: fast/css/large-font-size-crash.html

        * platform/graphics/FontDescription.h:
        (WebCore::FontDescription::setComputedSize):
        (WebCore::FontDescription::setSpecifiedSize):

2012-05-10  Beth Dakin  <bdakin@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=82131
        [Mac] REGRESSION (r110480): Text field that specifies background-color 
        (or is auto-filled) gets un-themed border
        -and corresponding-
        <rdar://problem/11115221>

        Reviewed by Maciej Stachowiak.

        This change rolls out r110480 which is what caused styled text fields 
        to get the un-themed border, and it does a bunch of work to make sure 
        we get the pretty, new version of the NSTextField art whenever 
        possible. We do this differently for post-Lion OS's since there is now 
        a way to opt into it all the time. Lion and SnowLeopard can only use 
        the new art in HiDPI mode when the background color of the text field 
        is just white.

        RenderThemeMac::textField() takes a boolean paramter used to determine 
        if the new gradient will be used.
        * rendering/RenderThemeMac.h:
        (RenderThemeMac):
        
        This is the post-Lion workaround. This code has no effect on Lion and 
        SnowLeopard. This allows up to opt into a version of [NSTextField drawWithFrame:] that will only draw the frame of the text field; without this, it will draw the frame and the background, which creates a number of problems with styled text fields and text fields in HiDPI. There is a less comprehesive workaround for Lion and SnowLeopard in place in RenderThemeMac::textField().
        * rendering/RenderThemeMac.mm:
        (-[WebCoreTextFieldCell _coreUIDrawOptionsWithFrame:inView:includeFocus:]):
        
        This is the roll-out of r110480.
        (WebCore::RenderThemeMac::isControlStyled):
        
        See the comments for a full explanation, but this is mostly code for 
        Lion and SnowLeopard to determine if we can opt into the new artwork.
        (WebCore::RenderThemeMac::paintTextField):
        (WebCore::RenderThemeMac::textField):

2012-05-10  Anders Carlsson  <andersca@apple.com>

        WebKit1: Add a way to blacklist specific plug-ins/plug-in versions
        https://bugs.webkit.org/show_bug.cgi?id=86150
        <rdar://problem/9551196>

        Reviewed by Sam Weinig.

        * English.lproj/Localizable.strings:
        Update.

        * loader/SubframeLoader.cpp:
        (WebCore::SubframeLoader::loadPlugin):
        It is possible that the client has already set the unavailability reason so don't try to set it twice.

        * platform/LocalizedStrings.cpp:
        (WebCore::insecurePluginVersionText):
        * platform/LocalizedStrings.h:
        Add insecure plug-in version text.

        * rendering/RenderEmbeddedObject.cpp:
        (WebCore::RenderEmbeddedObject::unavailablePluginReplacementText):
        * rendering/RenderEmbeddedObject.h:
        Add InsecurePluginVersion unavailability reason.

2012-05-10  Eric Seidel  <eric@webkit.org>

        Make IFRAME_SEAMLESS child documents inherit styles from their parent iframe element
        https://bugs.webkit.org/show_bug.cgi?id=85940

        Reviewed by Ojan Vafai.

        The HTML5 <iframe seamless> spec says:
        In a CSS-supporting user agent: the user agent must, for the purpose of CSS property
        inheritance only, treat the root element of the active document of the iframe
        element's nested browsing context as being a child of the iframe element.
        (Thus inherited properties on the root element of the document in the
        iframe will inherit the computed values of those properties on the iframe
        element instead of taking their initial values.)

        Initially I implemented this support to the letter of the spec. However, doing so I learned
        that WebKit has a RenderStyle for the Document Node, not just the root element of the document.
        In this RenderStyle on the Document, we add a bunch of per-document styles from settings
        including designMode.

        This change makes StyleResolver::styleForDocument inherit style from the parent iframe's
        style, before applying any of these per-document styles.  This may or may not be correct
        depending on what behavior we want for rtl-ordering, page-zoom, locale, design mode, etc.
        For now, we continue to treat the iframe's document as independent in these regards, and
        the settings on that document override those inherited from the iframe.

        Also, intially when making this work, I added redirects in recalcStyle and scheduleStyleRecalc
        from the child document to the parent document in the case of seamless (since the parent
        document effectively manages the style resolve and layout of the child in seamless mode).
        However, I was not able to find a test which depended on this code change, so in this final patch
        I have removed both of these modifications and replaced them with FIXMEs.  Based on discussions
        with Ojan and James Robinson, I believe both of those changes may eventually be wanted.

        This change basically does 3 things:
        1.  Makes StyleResolver::styleForDocument inherit from the parent iframe.
        2.  Makes any recalcStyle calls on the iframe propogate down into the child document (HTMLIFrameElement::didRecalcStyle).
        3.  Makes Document::recalcStyle aware of the fact that the Document's style *can* change
            for reasons other than recalcStyle(Force).

        I'm open to more testing suggestions, if reviewers have settings on the Document's style
        that you want to make sure we inherit from the parent iframe, or don't inherit, etc.
        I view this as a complete solution to this aspect of the current <iframe seamless> spec,
        but likely not the last code we will write for this aspect of the seamless feature. :)

        Tested by fast/frames/seamlesss/seamless-css-cascade.html and seamless-designMode.html

        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::collectMatchingRulesForList):
        * dom/Document.cpp:
        (WebCore::Document::scheduleStyleRecalc):
        (WebCore::Document::recalcStyle):
        * html/HTMLIFrameElement.cpp:
        (WebCore::HTMLIFrameElement::HTMLIFrameElement):
        (WebCore::HTMLIFrameElement::didRecalcStyle):
        (WebCore):
        * html/HTMLIFrameElement.h:
        (HTMLIFrameElement):

2012-05-10  Julien Chaffraix  <jchaffraix@webkit.org>

        Crash in computedCSSPadding* functions due to RenderImage::imageDimensionsChanged called during attachment
        https://bugs.webkit.org/show_bug.cgi?id=85912

        Reviewed by Eric Seidel.

        Tests: fast/images/link-body-content-imageDimensionChanged-crash.html
               fast/images/script-counter-imageDimensionChanged-crash.html

        The bug comes from CSS generated images that could end up calling imageDimensionsChanged during attachment. As the
        rest of the code (e.g. computedCSSPadding*) would assumes that we are already inserted in the tree, we would crash.

        The solution is to bail out in this case as newly inserted RenderObject will trigger layout later on and properly
        handle what we would be doing as part of imageDimensionChanged (the only exception being updating our intrinsic
        size which should be done as part of imageDimensionsChanged).

        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::imageDimensionsChanged):

2012-05-10  Adam Barth  <abarth@webkit.org>

        ASSERT in BidiResolver<Iterator, Run>::commitExplicitEmbedding makes running debug builds annoying
        https://bugs.webkit.org/show_bug.cgi?id=86140

        Reviewed by Eric Seidel.

        The correct fix here is to resolve
        https://bugs.webkit.org/show_bug.cgi?id=76574, but in the mean time,
        this ASSERT is annoying.

        * platform/text/BidiResolver.h:
        (WebCore::::commitExplicitEmbedding):

2012-05-10  Mark Pilgrim  <pilgrim@chromium.org>

        [Chromium] Call addTraceEvent and getTraceCategoryEnabledFlag directly
        https://bugs.webkit.org/show_bug.cgi?id=85399

        Reviewed by Adam Barth.

        Part of a refactoring series. See tracking bug 82948.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/EventTracer.cpp: Added.
        (WebCore):
        (WebCore::EventTracer::getTraceCategoryEnabledFlag):
        (WebCore::EventTracer::addTraceEvent):
        * platform/EventTracer.h: Added.
        (WebCore):
        (EventTracer):
        * platform/chromium/EventTracerChromium.cpp: Added.
        (WebCore):
        (WebCore::EventTracer::getTraceCategoryEnabledFlag):
        (WebCore::EventTracer::addTraceEvent):
        * platform/chromium/PlatformSupport.h:
        * platform/chromium/TraceEvent.h:

2012-05-10  Adam Barth  <abarth@webkit.org>

        ScrollView::fixedVisibleContentRect should be public
        https://bugs.webkit.org/show_bug.cgi?id=86147

        Reviewed by Eric Seidel.

        Some code in the WebKit layer of OS(ANDROID) uses this function. That
        could will be upstreamed in a later patch. For now, this patch just
        makes this function public so that we remove the diff to this file.

        * platform/ScrollView.h:
        (WebCore::ScrollView::fixedVisibleContentRect):
        (WebCore::ScrollView::delegatesScrollingDidChange):

2012-05-10  Anders Carlsson  <andersca@apple.com>

        Rename the missing plug-in indicator to the unavailable plug-in indicator
        https://bugs.webkit.org/show_bug.cgi?id=86136

        Reviewed by Sam Weinig.

        Since the indicator is shown for more than just missing plug-ins, generalize it and use a plug-in unavailability
        reason enum to make it easier to extend. Also, pass the unavailability reason to the ChromeClient member functions.

        * WebCore.exp.in:
        * html/HTMLEmbedElement.cpp:
        (WebCore::HTMLEmbedElement::updateWidget):
        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::updateWidget):
        * html/HTMLPlugInElement.cpp:
        (WebCore::HTMLPlugInElement::defaultEventHandler):
        * html/HTMLPlugInImageElement.cpp:
        (WebCore::HTMLPlugInImageElement::updateWidgetIfNecessary):
        * loader/SubframeLoader.cpp:
        (WebCore::SubframeLoader::loadPlugin):
        * page/ChromeClient.h:
        (WebCore::ChromeClient::shouldUnavailablePluginMessageBeButton):
        (WebCore::ChromeClient::unavailablePluginButtonClicked):
        * page/FrameView.cpp:
        (WebCore::FrameView::updateWidget):
        * rendering/RenderEmbeddedObject.cpp:
        (WebCore::RenderEmbeddedObject::RenderEmbeddedObject):
        (WebCore::RenderEmbeddedObject::setPluginUnavailabilityReason):
        (WebCore::RenderEmbeddedObject::showsUnavailablePluginIndicator):
        (WebCore::RenderEmbeddedObject::setUnavailablePluginIndicatorIsPressed):
        (WebCore::RenderEmbeddedObject::paint):
        (WebCore::RenderEmbeddedObject::paintReplaced):
        (WebCore::RenderEmbeddedObject::getReplacementTextGeometry):
        (WebCore::RenderEmbeddedObject::unavailablePluginReplacementText):
        (WebCore):
        (WebCore::RenderEmbeddedObject::isInUnavailablePluginIndicator):
        (WebCore::shouldUnavailablePluginMessageBeButton):
        (WebCore::RenderEmbeddedObject::handleUnavailablePluginIndicatorEvent):
        (WebCore::RenderEmbeddedObject::getCursor):
        * rendering/RenderEmbeddedObject.h:
        (RenderEmbeddedObject):

2012-05-10  Brady Eidson  <beidson@apple.com>

        <rdar://problem/10972577> and https://bugs.webkit.org/show_bug.cgi?id=80170
        Contents of noscript elements turned into strings in WebArchives

        Reviewed by Andy Estes.

        There's a much deeper question about how innerHTML of <noscript> is expected to work in 
        both a scripting and non-scripting environment that we should pursue separately.

        But for webarchives, we can solve this by filtering out the <noscript> elements completely 
        if scripting is enabled.

        Test: webarchive/ignore-noscript-if-scripting-enabled.html

        * WebCore.exp.in:

        Add arguments to createMarkup and MarkupAccumulator methods to pass a Vector of QualifiedNames
        that should be filtered from the resulting markup:
        * editing/MarkupAccumulator.cpp:
        (WebCore::MarkupAccumulator::serializeNodes):
        (WebCore::MarkupAccumulator::serializeNodesWithNamespaces):
        * editing/MarkupAccumulator.h:
        * editing/markup.cpp:
        (WebCore::createMarkup):
        * editing/markup.h:

        If scripting is enabled, add the noscriptTag to the tag names to filter:
        * loader/archive/cf/LegacyWebArchive.cpp:
        (WebCore::LegacyWebArchive::create):

2012-05-10  Abhishek Arya  <inferno@chromium.org>

        Crash due to floats not removed from first-letter element.
        https://bugs.webkit.org/show_bug.cgi?id=86019

        Reviewed by Julien Chaffraix.

        Move clearing logic of a floating/positioned object from removeChild
        to removeChildNode. There are lot of places which use removeChildNode
        directly and hence the object is not removed from the floating or
        positioned objects list.

        Test: fast/block/float/float-not-removed-from-first-letter.html

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::removeChild):
        * rendering/RenderObjectChildList.cpp:
        (WebCore::RenderObjectChildList::removeChildNode):

2012-05-10  Andreas Kling  <kling@webkit.org>

        Remove empty ElementAttributeData destructor.
        <http://webkit.org/b/86126>

        Reviewed by Antti Koivisto.

        * dom/ElementAttributeData.cpp:
        * dom/ElementAttributeData.h:

2012-05-10  Yury Semikhatsky  <yurys@chromium.org>

        Web Inspector: heap snapshot comparison view is broken
        https://bugs.webkit.org/show_bug.cgi?id=86102

        Reviewed by Pavel Feldman.

        Pass HeapSnapshotProxy instead of undefined to the profile load callback. Added
        compiler annotations to avoid such errors in the future.

        * inspector/front-end/HeapSnapshotView.js:

2012-05-10  Zan Dobersek  <zandobersek@gmail.com>

        [GTK] ENABLE_IFRAME_SEAMLESS support
        https://bugs.webkit.org/show_bug.cgi?id=85843

        Reviewed by Eric Seidel.

        Export the ENABLE_IFRAME_SEAMLESS feature define when the feature is
        enabled.

        No new tests - all the related tests should now be passing.

        * GNUmakefile.am:

2012-05-10  Antti Koivisto  <antti@apple.com>

        Inline Node::traverseNextNode
        https://bugs.webkit.org/show_bug.cgi?id=85844

        Reviewed by Ryosuke Niwa.
        
        Inline traverseNextNode and traverseNextSibling to reduce entry/exit overhead and allow better code generation
        for many hot loops.

        In this version only the firstChild()/nextSibling() tests are inlined and the ancestor traversal is not.
        
        Performance bots will tell if this was worthwhile.

        * dom/ContainerNode.h:
        (WebCore::Node::traverseNextNode):
        (WebCore):
        (WebCore::Node::traverseNextSibling):
        * dom/Node.cpp:
        (WebCore::Node::traverseNextAncestorSibling):
        * dom/Node.h:
        (Node):

2012-05-10  Tommy Widenflycht  <tommyw@google.com>

        MediaStream API: Fix MediaHints parsing
        https://bugs.webkit.org/show_bug.cgi?id=86098

        Reviewed by Adam Barth.

        Not currently testable. Working on a series of patches that will fix that.

        * Modules/mediastream/PeerConnection00.cpp:
        (WebCore::PeerConnection00::createMediaHints):

2012-05-10  Tommy Widenflycht  <tommyw@google.com>

        [chromium] MediaStream API: Fix the ExtraData functionality in WebMediaStreamDescriptor
        https://bugs.webkit.org/show_bug.cgi?id=86087

        Reviewed by Adam Barth.

        Not easy to test but I have added code that excercises this to WebUserMediaClientMock (in DumpRenderTree).

        * platform/chromium/support/WebMediaStreamDescriptor.cpp:
        (WebKit::WebMediaStreamDescriptor::setExtraData):

2012-05-10  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: search title is shown beside the search field (not under) in the vertical mode.
        https://bugs.webkit.org/show_bug.cgi?id=86120

        Reviewed by Yury Semikhatsky.

        This change makes search title render as placeholder at all times.
        It also adjusts the size of the search field when navigation arrows appear.

        * inspector/front-end/SearchController.js:
        (WebInspector.SearchController):
        (WebInspector.SearchController.prototype.updateSearchLabel):
        (WebInspector.SearchController.prototype._updateSearchNavigationButtonState):
        (WebInspector.SearchController.prototype._createSearchNavigationButton):
        * inspector/front-end/inspector.css:
        (#toolbar-search-item):
        (.with-navigation-buttons #search):
        (.toolbar-search-navigation-label):
        (.with-navigation-buttons .toolbar-search-navigation-label):
        * inspector/front-end/inspector.html:

2012-05-10  Varun Jain  <varunjain@google.com>

        [chromium] Trigger context menu for long press gesture
        https://bugs.webkit.org/show_bug.cgi?id=85919

        Reviewed by Adam Barth.

        Test: fast/events/touch/gesture/context-menu-on-long-press.html

        * page/EventHandler.cpp:
        (WebCore):
        (WebCore::EventHandler::sendContextMenuEventForGesture):
        * page/EventHandler.h:
        (EventHandler):

2012-05-10  Abhishek Arya  <inferno@chromium.org>

        Crash in ApplyStyleCommand::joinChildTextNodes.
        https://bugs.webkit.org/show_bug.cgi?id=85939

        Reviewed by Ryosuke Niwa.

        Test: editing/style/apply-style-join-child-text-nodes-crash.html

        * editing/ApplyStyleCommand.cpp:
        (WebCore::ApplyStyleCommand::applyRelativeFontStyleChange): add conditions
        to bail out if our start and end position nodes are removed due to 
        mutation events in joinChildTextNodes.
        (WebCore::ApplyStyleCommand::applyInlineStyle): this executes after
        applyRelativeFontStyleChange in ApplyStyleCommand::doApply. So, need
        to bail out if our start and end position nodes are removed due to
        mutation events.
        (WebCore::ApplyStyleCommand::joinChildTextNodes): hold all the children
        in a ref vector to prevent them from getting destroyed due to mutation events.

2012-05-10  Erik Arvidsson  <arv@chromium.org>

        Unreviewed, rebaselined run-bindings-tests results.

        * bindings/scripts/test/JS/JSTestEventTarget.cpp:
        (WebCore::jsTestEventTargetPrototypeFunctionAddEventListener):
        (WebCore::jsTestEventTargetPrototypeFunctionRemoveEventListener):
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::jsTestObjPrototypeFunctionAddEventListener):
        (WebCore::jsTestObjPrototypeFunctionRemoveEventListener):
        * bindings/scripts/test/V8/V8TestException.cpp:
        (WebCore::V8TestException::wrapSlow):
        * bindings/scripts/test/V8/V8TestException.h:
        (WebCore::V8TestException::wrap):

2012-05-10  Abhishek Arya  <inferno@chromium.org>

        Crash in InsertParagraphSeparatorCommand::doApply.
        https://bugs.webkit.org/show_bug.cgi?id=84995

        Reviewed by Ryosuke Niwa.

        Test: editing/inserting/insert-paragraph-seperator-crash.html

        * editing/DeleteSelectionCommand.cpp:
        (WebCore::DeleteSelectionCommand::mergeParagraphs): no need of static cast, since
        type of enclosingBlock returned is already Element*.
        * editing/IndentOutdentCommand.cpp:
        (WebCore::IndentOutdentCommand::tryIndentingAsListItem): no need of static cast, since
        type of enclosingBlock returned is already Element*.
        * editing/InsertParagraphSeparatorCommand.cpp:
        (WebCore::InsertParagraphSeparatorCommand::doApply): RefPtr startBlock to guard against
        mutation events.
        * editing/htmlediting.cpp:
        (WebCore::enclosingBlock): make sure type of enclosingNode is an element before doing
        the static cast. This was already failing in a couple of layout tests. Also, isBlock
        check already exists in the function call to enclosingNodeOfType, so don't need it
        again on enclosingNode's renderer.
        * editing/htmlediting.h: 
        (WebCore):

2012-05-10  Allan Sandfeld Jensen  <allan.jensen@nokia.com>

        TouchAdjustment doesn't correct for scroll-offsets.
        https://bugs.webkit.org/show_bug.cgi?id=86083

        Reviewed by Kenneth Rohde Christiansen.

        Already tested by: touchadjustment/scroll-delegation

        * page/EventHandler.cpp:
        (WebCore::EventHandler::bestClickableNodeForTouchPoint):
        (WebCore::EventHandler::bestZoomableAreaForTouchPoint):
        * page/TouchAdjustment.cpp:
        (WebCore::TouchAdjustment::findNodeWithLowestDistanceMetric):
        * testing/Internals.cpp:
        (WebCore::Internals::bestZoomableAreaForTouchPoint):

2012-05-10  Konrad Piascik  <kpiascik@rim.com>

        Fix typo in filename
        https://bugs.webkit.org/show_bug.cgi?id=86095

        Reviewed by Andreas Kling.

        * UseJSC.cmake:

2012-05-10  Stephen Chenney  <schenney@chromium.org>

        SVG Filters allow invalid elements as children
        https://bugs.webkit.org/show_bug.cgi?id=83979

        Reviewed by Nikolas Zimmermann.

        According to the SVG spec, there are numerous restrictions on the
        content of nodes (that is, their children). Specific to this problem,
        SVGFilter elements may only contain SVGFilterPrimitive elements, and
        those may only contain animation related elements. This patch enforces
        the restriction on filters in the render tree, thus preventing us from
        having (for instance) content that is inside a filter yet filtered by
        the filter.

        Manual test: ManualTests/bugzilla-83979.svg

        * svg/SVGFilterElement.cpp:
        (WebCore::SVGFilterElement::childShouldCreateRenderer): Added to only allow renderers for fe* children
        (WebCore):
        * svg/SVGFilterElement.h:
        (SVGFilterElement):
        * svg/SVGFilterPrimitiveStandardAttributes.h: Do not allow any children at all for fe* elements.
        (SVGFilterPrimitiveStandardAttributes):

2012-05-10  Joe Thomas  <joethomas@motorola.com>

        [CSS3 Backgrounds and Borders] Add background-size to the background shorthand
        https://bugs.webkit.org/show_bug.cgi?id=27577

        Reviewed by Alexis Menard.

        Added CSSPropertyBackgroundSize to the background shorthand propery. Added the logic for parsing background-size.
        bakground-size appears after background-position followed by a '/'.
        The specification related to this change is http://www.w3.org/TR/css3-background/#the-background

        Tests: fast/backgrounds/background-shorthand-with-backgroundSize-style.html
               fast/backgrounds/size/backgroundSize-in-background-shorthand.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        (WebCore::CSSComputedStyleDeclaration::getBackgroundShorthandValue):
        (WebCore):
        * css/CSSComputedStyleDeclaration.h:
        (CSSComputedStyleDeclaration):
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):
        (WebCore::CSSParser::parseFillShorthand):
        * css/StylePropertySet.cpp:
        (WebCore::StylePropertySet::getLayeredShorthandValue):
        * css/StylePropertyShorthand.cpp:
        (WebCore):
        (WebCore::backgroundShorthand):

2012-05-10  MORITA Hajime <morrita@google.com>

        Node::InDetachFlag could be removed.
        https://bugs.webkit.org/show_bug.cgi?id=85963

        Reviewed by Antti Koivisto.

        Removed Node::inDetach() since it can never true
        on the only call site setFocusedNode().

        No new test. Covered by existing tests.

        * dom/Document.cpp:
        (WebCore::Document::setFocusedNode):
        * dom/Node.cpp:
        (WebCore::Node::detach):
        * dom/Node.h:
        (WebCore):
        (Node):

2012-05-10  Keishi Hattori  <keishi@webkit.org>

        Crash in HTMLFormControlElement::m_fieldSetAncestor
        https://bugs.webkit.org/show_bug.cgi?id=86070

        Reviewed by Kent Tamura.

        No new tests.

        The previous patch r115990 didn't completely resolve the crash (Bug 85453)
        We don't have a reproducible test case, so we are reverting to the old code for setting m_fieldSetAncestor.

        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLFormControlElement::HTMLFormControlElement):
        (WebCore::HTMLFormControlElement::updateFieldSetAndLegendAncestor):
        (WebCore::HTMLFormControlElement::insertedInto): Set m_dataListAncestorState to Unknown because ancestor has changed. Call setNeedsWillValidateCheck because style might need to be updated.
        (WebCore::HTMLFormControlElement::removedFrom):
        (WebCore::HTMLFormControlElement::disabled):
        (WebCore::HTMLFormControlElement::recalcWillValidate):
        (WebCore::HTMLFormControlElement::willValidate):
        (WebCore::HTMLFormControlElement::setNeedsWillValidateCheck):
        * html/HTMLFormControlElement.h:
        (HTMLFormControlElement): Added m_dataListAncestorState.

2012-05-10  Sam D  <dsam2912@gmail.com>

        Web Inspector: rename InspectorBackendStub.js to InspectorBackendCommands.js
        https://bugs.webkit.org/show_bug.cgi?id=72306

        Changed name for InspectorBackendStub.js to
        InspectorBackendCommands.js

        Reviewed by Yury Semikhatsky.

        No new tests required. File name is changed.

        * DerivedSources.pri:
        * GNUmakefile.am:
        * Target.pri:
        * WebCore.gyp/WebCore.gyp:
        * WebCore.gypi:
        * WebCore.vcproj/copyWebCoreResourceFiles.cmd:
        * WebCore.xcodeproj/project.pbxproj:
        * gyp/copy-inspector-resources.sh:
        * inspector/CodeGeneratorInspector.py:
        * inspector/front-end/InspectorBackendCommands.qrc: Added.
        * inspector/front-end/InspectorBackendStub.qrc: Removed.
        * inspector/front-end/inspector.html:

2012-05-10  Alexis Menard  <alexis.menard@openbossa.org>

        [Qt] Avoid string conversions to construct a QUrl when using Qt5.
        https://bugs.webkit.org/show_bug.cgi?id=86006

        Reviewed by Kenneth Rohde Christiansen.

        In Qt5, the QUrl constructor can handle the string directly, even in UTF-16 because the
        constructor QUrl(QString) has been fixed. Unfortunately we still need to use the old
        code path when building with Qt4.

        No new tests : it's a performance improvement which should be covered by tests.

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

2012-05-10  Noel Gordon  <noel.gordon@gmail.com>

        [chromium] REGRESSION(r107389) Visible line artifacts on some JPEG images
        https://bugs.webkit.org/show_bug.cgi?id=85772

        Reviewed by Kent Tamura.

        On some JPEG images, vertical and horizontal lines artifacts might appear in image
        regions with very high frequency color variation when using DCT_IFAST decodes. Use
        DCT_IFAST on small screen devices only (Chromium Android).

        No new tests. Covered by existing tests.

        * platform/image-decoders/jpeg/JPEGImageDecoder.cpp:
        (dctMethod): Permit DCT_IFAST decoding for Chromium Android only.

2012-05-10  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        [Qt] Implement fit-to-width behaviour
        https://bugs.webkit.org/show_bug.cgi?id=86085

        Reviewed by Simon Hausmann.

        Add a method to get the minimum scale factor that contains the content
        without showing any chrome background.

        * dom/ViewportArguments.cpp:
        (WebCore::computeMinimumScaleFactorForContentContained):
        (WebCore):
        * dom/ViewportArguments.h:
        (WebCore):

2012-05-10  MORITA Hajime  <morrita@google.com>

        Remove support for Node::willRemove()
        https://bugs.webkit.org/show_bug.cgi?id=55209

        Reviewed by Ryosuke Niwa.

        This change de-virtualizes Node::willRemove(), gains
        5% speedup on Dromaeo dom-modify.

        Originally there were 5 willRemove() overrides:
        - Element
        - HTMLStyleElement
        - HTMLSourceElement
        - HTMLTrackElement
        - HTMLFrameOwnerElement

        For first 4 items, this change moves their implementations to
        Node::removedFrom() overrides.

        Then HTMLFrameOwnerElement is the only class which needs the
        notification.  Because it emits the "unload" event, it needs some
        notification _before_ its removal. To handle that, this change
        introduces ChildFrameDisconnector which collects
        corresponding decendant elements and disconnect their content frame.

        Even though this approach doesn't kill pre-removal tree traversal
        completely, it's a bit more efficient due to the de-virtualization.

        No new tests. Covered by existing test.

        * dom/ContainerNode.cpp:
        (WebCore::willRemoveChild): Replaced willRemove() call with ChildFrameDisconnector.
        (WebCore::willRemoveChildren): Ditto.
        (WebCore::ContainerNode::disconnectDescendantFrames): Added. Used from FrameLoader to replace Document::willRemove() call.
        (WebCore):
        * dom/ContainerNode.h:
        (ContainerNode):
        * dom/ContainerNodeAlgorithms.cpp:
        (WebCore::ChildFrameDisconnector::collectDescendant):
        (WebCore):
        (WebCore::ChildFrameDisconnector::Target::disconnect):
        * dom/ContainerNodeAlgorithms.h:
        (ChildFrameDisconnector):
        (Target):
        (WebCore::ChildFrameDisconnector::Target::Target):
        (WebCore::ChildFrameDisconnector::Target::isValid):
        (WebCore):
        (WebCore::ChildFrameDisconnector::ChildFrameDisconnector):
        (WebCore::ChildFrameDisconnector::collectDescendant):
        (WebCore::ChildFrameDisconnector::disconnect):
        * dom/Element.cpp:
        (WebCore::Element::removedFrom):
        * dom/Element.h:
        * dom/ElementShadow.cpp:
        * dom/ElementShadow.h:
        (ElementShadow):
        * dom/Node.cpp:
        * dom/Node.h: Added IsFrameOwnerElement flag to de-virtualize IsFrameOwnerElement().
        (WebCore::Node::isFrameOwnerElement): De-virtualized.
        (Node):
        * html/HTMLElement.h:
        (HTMLElement):
        (WebCore::HTMLElement::HTMLElement):
        * html/HTMLFrameOwnerElement.cpp:
        (WebCore::HTMLFrameOwnerElement::HTMLFrameOwnerElement):
        (WebCore::HTMLFrameOwnerElement::disconnectContentFrame): Extracted from original willRemove().
        * html/HTMLFrameOwnerElement.h:
        (HTMLFrameOwnerElement):
        (WebCore::toFrameOwnerElement):
        (WebCore):
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::sourceWasRemoved): Renamed from sourceWillBeRemoved(), dealing with the timing change.
        * html/HTMLMediaElement.h:
        (HTMLMediaElement):
        (WebCore::isMediaElement):
        (WebCore):
        (WebCore::toMediaElement):
        * html/HTMLSourceElement.cpp:
        (WebCore::HTMLSourceElement::removedFrom): Moved some code from willRemove().
        * html/HTMLSourceElement.h:
        (HTMLSourceElement):
        * html/HTMLStyleElement.cpp:
        (WebCore::HTMLStyleElement::removedFrom):
        (WebCore):
        * html/HTMLStyleElement.h:
        (HTMLStyleElement):
        * html/HTMLTrackElement.cpp:
        (WebCore::HTMLTrackElement::removedFrom): Moved some code from willRemove().
        * html/HTMLTrackElement.h:
        (HTMLTrackElement):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::clear):

2012-05-10  Kinuko Yasuda  <kinuko@chromium.org>

        Change the return type of Entry.toURL() back to String from KURL
        https://bugs.webkit.org/show_bug.cgi?id=85858

        Reviewed by Ryosuke Niwa.

        I once changed it from String to KURL in r116273 but it turned out that
        it involves implicit conversion and may incur extra overhead.
        This partly reverts r116273 while keeping some internal functions
        returning KURL as it's what we initially create as and is more
        convenient to operate on.

        No new tests; no functional or visible changes.

        * Modules/filesystem/EntryBase.cpp:
        (WebCore::EntryBase::toURL):
        * Modules/filesystem/EntryBase.h:
        (EntryBase):

2012-05-10  Alexander Pavlov  <apavlov@chromium.org>

        Web Inspector: Autocomplete for CSS property values in the Styles pane behaving incorrectly
        https://bugs.webkit.org/show_bug.cgi?id=85784

        Reviewed by Vsevolod Vlasov.

        Before executing the number increment/decrement within CSS property value, the current word is checked
        for being a valid suggestion for the current property, and if it is, the numeric change is skipped
        in favor of the suggested property value switch by a suggest box.

        * inspector/front-end/StylesSidebarPane.js:

2012-05-10  Abhishek Arya  <inferno@chromium.org>

        Make DOMCharacterDataModified a scoped event (similar to r73690).
        https://bugs.webkit.org/show_bug.cgi?id=85920

        Reviewed by Ryosuke Niwa.

        DOMCharacterDataModified was missing in the list of already scoped
        DOM mutation events like DOMSubtreeModified, DOMNodeInserted, etc.
        It helps to delay event dispatches until the completion of each call
        of EditCommand::doApply. This has been useful in the past and helped to 
        prevent unexpected DOM tree mutations while the editing command is executing.

        * dom/CharacterData.cpp:
        (WebCore::CharacterData::dispatchModifiedEvent):

2012-05-10  Alexandre Elias  <aelias@google.com>

        Default to null value for HistoryItem::m_pageScaleFactor
        https://bugs.webkit.org/show_bug.cgi?id=84385

        Reviewed by Adam Barth.

        Previously, HistoryItem::m_pageScaleFactor defaulted to a value
        of 1, making it impossible to determine whether this value was never
        set, or intentionally set to 1.  This patch introduces a default value
        of 0 and makes restoreScrollPositionAndViewState not touch the page
        scale factor if this value is still present at time of reload.

        This is a no-op change for common navigation scenarios.  The
        motivation for this change is the corner case of syncing history items
        from a desktop browser to a mobile device.  In that case, we need a
        way to specify that the history item does not contain a
        pageScaleFactor so that the mobile device does not display the page
        overly zoomed in.

        No new tests.

        * history/HistoryItem.cpp:
        (WebCore::HistoryItem::HistoryItem):
        * loader/HistoryController.cpp:
        (WebCore::HistoryController::restoreScrollPositionAndViewState):

2012-05-10  Csaba Osztrogonác  <ossy@webkit.org>

        Use suitable viewport values when a Mobile DTD is used.
        https://bugs.webkit.org/show_bug.cgi?id=85425

        Unreviewed debug buildfix after r116571.

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

2012-05-10  Yoshifumi Inoue  <yosin@chromium.org>

        [Forms] Move step related methods to InputType class from HTMLInputElement class
        https://bugs.webkit.org/show_bug.cgi?id=85978

        Reviewed by Kent Tamura.

        This patch is part of re-factoring of HTMLInputElement.cpp for numeric input type.
        In this patch, we move implementation of getAllowedValueStep and stepUp/stepUpFromRenderer
        to InputType class because of these are for DateTime/Number/Range.

        Following patches will change implementation of getAllowedValueStep to use StepRange and
        remove step related methods, defaultStep, stepScaleFactor, and so on.

        No new tests. This patch should not change behavior.

        * html/HTMLInputElement.cpp:
        (WebCore):
        (WebCore::HTMLInputElement::getAllowedValueStep):
        (WebCore::HTMLInputElement::stepUp):
        (WebCore::HTMLInputElement::stepDown):
        (WebCore::HTMLInputElement::stepUpFromRenderer):
        * html/HTMLInputElement.h:
        (HTMLInputElement):
        * html/InputType.cpp:
        (WebCore::InputType::applyStep):
        (WebCore):
        (WebCore::InputType::alignValueForStep):
        (WebCore::InputType::getAllowedValueStep):
        (WebCore::InputType::getAllowedValueStepWithDecimalPlaces):
        (WebCore::InputType::stepUp):
        (WebCore::InputType::stepUpFromRenderer):
        * html/InputType.h:
        (InputType):

2012-05-09  Kent Tamura  <tkent@chromium.org>

        Calendar Picker: Fix a crash by changing input type.
        https://bugs.webkit.org/show_bug.cgi?id=86007

        Reviewed by Hajime Morita.

        Manual test: forms/calendar-picker-crash-by-type-change.html

        * html/shadow/CalendarPickerElement.cpp:
        (WebCore::CalendarPickerElement::~CalendarPickerElement):
        Added. Make sure the popup is closed.
        * html/shadow/CalendarPickerElement.h:
        (CalendarPickerElement): Add declaration of the destructor.

2012-05-09  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Move suspendAnimations to use Internals interface.
        https://bugs.webkit.org/show_bug.cgi?id=85986

        Reviewed by Ryosuke Niwa.

        Add suspendAnimations functions, because it is able to work in the
        cross-port way through the Internals interface.

        No new tests, since we are improving here the infra-structure for testing
        a specific method.

        * testing/Internals.cpp:
        (WebCore::Internals::suspendAnimations):
        (WebCore):
        * testing/Internals.h:
        (Internals):
        * testing/Internals.idl:

2012-05-09  Charlie Reis  <creis@chromium.org>

        Add dispatchMessageEventWithOriginCheck to DOMWindow
        https://bugs.webkit.org/show_bug.cgi?id=85815

        Reviewed by Adam Barth.

        Useful for ports that support cross-process postMessage.
        No new tests, since covered by existing postMessage tests.

        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::postMessageTimerFired):
        (WebCore):
        (WebCore::DOMWindow::dispatchMessageEventWithOriginCheck):
        * page/DOMWindow.h:
        (WebCore):
        (DOMWindow):

2012-05-09  Jason Liu  <jason.liu@torchmobile.com.cn>

        [BlackBerry] Cookie parsing issue. If the cookie value provided was (") then the browser creates a session cookie instead.
        https://bugs.webkit.org/show_bug.cgi?id=85775

        Reviewed by Rob Buis.

        Make CookieParser::parseOneCookie handle (cookiename="cookievalue;expires=xxxx) correctly.
        This cookie's value is "cookievalue not "cookievalue;expires=xxxx.

        Test: http/tests/cookies/single-quoted-value.html

        * platform/blackberry/CookieParser.cpp:
        (WebCore::CookieParser::parseOneCookie):

2012-05-09  Raymond Liu  <raymond.liu@intel.com>

        Add multi-channels support for CopyWithGainFrom in AudioBus
        https://bugs.webkit.org/show_bug.cgi?id=80675

        Reviewed by Chris Rogers.

        * platform/audio/AudioBus.cpp:
        (WebCore):
        (WebCore::AudioBus::AudioBus):
        (WebCore::AudioBus::copyWithGainFrom):
        * platform/audio/AudioBus.h:
        (AudioBus):

2012-05-09  Jessie Berlin  <jberlin@apple.com>

        Crash using the new WKBundleDOMWindowExtensions APIs.
        https://bugs.webkit.org/show_bug.cgi?id=85888

        Reviewed by Brady Eidson.

        WKBundlePageWillDestroyGlobalObjectForDOMWindowExtensionCallback was only being invoked when
        the WKPage was destroyed, and then only for the child frames. In addition, the
        DOMWindowExtension was holding onto a destroyed DOMWindow and attempting to unregister from
        when the WK2 wrapper object was attempting to destroy the DOMWindowExtension.

        The underlying issue here was that the DOMWindowProperties were getting disconnectFrame
        and willDetachPage called on them at the wrong times.

        Rename DOMWindowProperty::disconnectFrame and reconnectFrame to disconnectFrameForPageCache
        and reconnectFrameFromPageCache for clarity.

        Only invoke DOMWindowProperty::disconnectFrameForPageCache when the frame is going into the
        page cache.

        In the cases where the DOMWindow is getting destroyed, the frame is being destroyed, or the
        DOMWindow is getting cleared because the frame is being navigated, invoke
        DOMWindowProperty::willDestroyGlobalObjectInFrame instead of disconnectFrame.

        Invoke DOMWindowProperty::willDetachGlobalObjectFromFrame when a document is being detached
        because the frame has been detached (e.g. fast/storage/storage-detached-iframe.html) and
        won't be immediately destroyed.

        Invoke DOMWindowProperty::willDestroyGlobalObjectInCachedFrame when a cached frame is
        being destroyed.

        New WK2 API Test: DOMWindowExtensionNoCache.

        * Modules/indexeddb/DOMWindowIndexedDatabase.cpp:
        (WebCore::DOMWindowIndexedDatabase::disconnectFrameForPageCache):
        Updated for disconnectFrame rename.
        (WebCore::DOMWindowIndexedDatabase::reconnectFrameFromPageCache):
        Updated for reconnectFrame rename.
        (WebCore::DOMWindowIndexedDatabase::willDestroyGlobalObjectInCachedFrame):
        Get rid of the suspended IDBFactory.
        (WebCore::DOMWindowIndexedDatabase::willDestroyGlobalObjectInFrame):
        Get rid of the IDBFactory.
        (WebCore::DOMWindowIndexedDatabase::willDetachGlobalObjectFromFrame):
        Ditto.
        * Modules/indexeddb/DOMWindowIndexedDatabase.h:

        * dom/Document.cpp:
        (WebCore::Document::prepareForDestruction):
        Tell the DOMWindow before detaching the Document.
        * dom/Document.h:

        * history/CachedFrame.cpp:
        (WebCore::CachedFrame::destroy):
        Tell the DOMWindow.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::clear):
        Use Document::prepareForDestruction so that the DOMWindow is told about the main frame
        navigation before detaching the Document.

        * loader/appcache/DOMApplicationCache.cpp:
        (WebCore::DOMApplicationCache::disconnectFrameForPageCache):
        Updated for the disconnectFrame rename.
        (WebCore::DOMApplicationCache::reconnectFrameFromPageCache):
        Updated for the reconnectFrame rename.
        (WebCore::DOMApplicationCache::willDestroyGlobalObjectInFrame):
        Cover the cases formerly covered by disconnectFrame (which was sometimes being called when
        called when the frame was destroyed).
        * loader/appcache/DOMApplicationCache.h:

        * notifications/DOMWindowNotifications.cpp:
        (WebCore::DOMWindowNotifications::disconnectFrameForPageCache):
        Updated for the disconnectFrame rename.
        (WebCore::DOMWindowNotifications::reconnectFrameFromPageCache):
        Updated for the reconnectFrame rename.
        (WebCore::DOMWindowNotifications::willDestroyGlobalObjectInCachedFrame):
        Get rid of the suspended notification center.
        (WebCore::DOMWindowNotifications::willDestroyGlobalObjectInFrame):
        Get rid of the notification center.
        (WebCore::DOMWindowNotifications::willDetachGlobalObjectFromFrame):
        Do not allow use of the notification center by detached frames.
        * notifications/DOMWindowNotifications.h:

        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::clearDOMWindowProperties):
        Do not call disconnectDOMWindowProperties. It is now the responsibility of the callers to
        tell the DOMWindowProperties the correct cause of being cleared.
        (WebCore::DOMWindow::~DOMWindow):
        Make sure the DOMWindowProperties still know that the DOMWindow is going away.
        (WebCore::DOMWindow::frameDestroyed):
        Invoke willDestroyGlobalObjectInFrame on the DOMWindowProperties.
        (WebCore::DOMWindow::willDetachPage):
        It is no longer necessary to tell the DOMWindowProperties anything here.
        (WebCore::DOMWindow::willDestroyCachedFrame):
        Tell the DOMWindowProperties.
        (WebCore::DOMWindow::willDestroyDocumentInFrame):
        Ditto.
        (WebCore::DOMWindow::willDetachDocumentFromFrame):
        Ditto.
        (WebCore::DOMWindow::clear):
        Ditto.
        (WebCore::DOMWindow::disconnectDOMWindowProperties):
        Updated for the disconnectFrame rename.
        (WebCore::DOMWindow::reconnectDOMWindowProperties):
        Ditto.
        * page/DOMWindow.h:

        * page/DOMWindowExtension.cpp:
        (WebCore::DOMWindowExtension::DOMWindowExtension):
        Move the responsibility for tracking the disconnected DOMWindow to DOMWindowProperty, since
        DOMWindowProperty will need it to unregister the property when a cached frame is destroyed.
        (WebCore::DOMWindowExtension::disconnectFrameForPageCache):
        Remove the code to check for disconnectFrame being called twice - it is now only called when
        a frame goes into the page cache.
        Let the DOMWindowProperty keep track of the disconnected DOMWindow.
        (WebCore::DOMWindowExtension::reconnectFrameFromPageCache):
        Let the DOMWindowProperty keep track of the disconnected DOMWindow.
        (WebCore::DOMWindowExtension::willDestroyGlobalObjectInCachedFrame):
        Dispatch the willDestroyGlobalObjectForDOMWindowExtension callback.
        (WebCore::DOMWindowExtension::willDestroyGlobalObjectInFrame):
        Ditto, but only if the callback hasn't already been sent because the frame has been detached.
        (WebCore::DOMWindowExtension::willDetachGlobalObjectFromFrame):
        Send the callback because nothing interesting can be done in the frame once it has been
        detached.
        * page/DOMWindowExtension.h:

        * page/DOMWindowProperty.cpp:
        (WebCore::DOMWindowProperty::DOMWindowProperty):
        Keep track of the disconnected DOMWindow so it can be used to unregister the property when a
        cached frame is destroyed.
        (WebCore::DOMWindowProperty::~DOMWindowProperty):
        Also unregister the property when a DOMWindowProperty for a cached frame is destroyed.
        (WebCore::DOMWindowProperty::disconnectFrameForPageCache):
        Keep track of the disconnected DOMWindow.
        (WebCore::DOMWindowProperty::reconnectFrameFromPageCache):
        Ditto.
        (WebCore::DOMWindowProperty::willDestroyGlobalObjectInCachedFrame):
        Unregister the property from the disconnected DOMWindow.
        (WebCore::DOMWindowProperty::willDestroyGlobalObjectInFrame):
        Unregister the property from the DOMWindow and stop keeping track of the frame.
        (WebCore::DOMWindowProperty::willDetachGlobalObjectFromFrame):
        Do not set m_frame to 0 because detached frames still have access to the DOMWindow, even if
        they can't do anything meaningful with it.
        * page/DOMWindowProperty.h:

        * page/Frame.cpp:
        (WebCore::Frame::setView):
        Tell the DOMWindow that the Document is being detached so it can tell the
        DOMWindowProperties.

        * page/PointerLock.cpp:
        (WebCore::PointerLock::disconnectFrameForPageCache):
        Updated for disconnectFrame rename.
        (WebCore::PointerLock::willDestroyGlobalObjectInFrame):
        Cover the cases formerly covered by disconnectFrame (which was sometimes being called when
        called when the frame was destroyed).
        * page/PointerLock.h:

2012-05-09  Ian Vollick  <vollick@chromium.org>

        [chromium] Ensure animations get ticked at least once when added.
        https://bugs.webkit.org/show_bug.cgi?id=86013

        Reviewed by James Robinson.

        Tested in
          CCLayerTreeHostTestTickAnimationWhileBackgrounded.runSingleThreaded
          CCLayerTreeHostTestAddAnimationWithTimingFunction.runSingleThreaded
          CCLayerTreeHostTestSynchronizeAnimationStartTimes.runSingleThreaded
          CCLayerTreeHostTestAnimationFinishedEvents.runSingleThreaded

        * platform/graphics/chromium/LayerChromium.cpp:
        (WebCore::LayerChromium::addAnimation):
        * platform/graphics/chromium/cc/CCLayerAnimationController.cpp:
        (WebCore::CCLayerAnimationController::pushNewAnimationsToImplThread):
        * platform/graphics/chromium/cc/CCLayerTreeHost.cpp:
        (WebCore::CCLayerTreeHost::finishCommitOnImplThread):
        (WebCore::CCLayerTreeHost::didAddAnimation):
        (WebCore):
        (WebCore::CCLayerTreeHost::didBecomeInvisibleOnImplThread):
        * platform/graphics/chromium/cc/CCLayerTreeHost.h:
        (CCLayerTreeHost):
        * platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:
        (WebCore::CCLayerTreeHostImpl::CCLayerTreeHostImpl):
        * platform/graphics/chromium/cc/CCProxy.h:
        (CCProxy):
        * platform/graphics/chromium/cc/CCSingleThreadProxy.cpp:
        (CCSingleThreadProxyAnimationTimer):
        (WebCore::CCSingleThreadProxyAnimationTimer::create):
        (WebCore::CCSingleThreadProxyAnimationTimer::CCSingleThreadProxyAnimationTimer):
        (WebCore):
        (WebCore::CCSingleThreadProxy::CCSingleThreadProxy):
        (WebCore::CCSingleThreadProxy::didAddAnimation):
        (WebCore::CCSingleThreadProxy::doComposite):
        * platform/graphics/chromium/cc/CCSingleThreadProxy.h:
        (WebCore):
        * platform/graphics/chromium/cc/CCThreadProxy.h:

2012-05-09  Adam Barth  <abarth@webkit.org>

        Implement HTML Media Capture
        https://bugs.webkit.org/show_bug.cgi?id=85958

        Reviewed by Eric Seidel.

        This patch begins the implementation of
        http://www.w3.org/TR/html-media-capture/ by adding the capture
        attribute to HTMLInputElement.

        Test: fast/forms/file/file-input-capture.html

        * html/FileInputType.cpp:
        (WebCore::FileInputType::handleDOMActivateEvent):
        * html/HTMLAttributeNames.in:
        * html/HTMLInputElement.cpp:
        (WebCore):
        (WebCore::HTMLInputElement::capture):
        (WebCore::HTMLInputElement::setCapture):
        * html/HTMLInputElement.h:
        (HTMLInputElement):
        * html/HTMLInputElement.idl:
        * platform/FileChooser.h:
        (FileChooserSettings):

2012-05-09  Charles Wei  <charles.wei@torchmobile.com.cn>

        [BlackBerry]  Refactor data scheme support
        https://bugs.webkit.org/show_bug.cgi?id=85938

        Reviewed by Rob Buis.

        We will create a DataStream in our platform repository,
        so that can be wrapped up by NetworkJob for webkit rendering,
        and by DownloadStream for downloading.

        Refactor, no new tests.

        * platform/network/blackberry/NetworkJob.cpp:
        (WebCore::NetworkJob::NetworkJob):
        (WebCore::NetworkJob::initialize):
        (WebCore::NetworkJob::cancelJob):
        (WebCore::NetworkJob::sendResponseIfNeeded):
        * platform/network/blackberry/NetworkJob.h:
        (NetworkJob):
        * platform/network/blackberry/NetworkManager.cpp:
        (WebCore::NetworkManager::startJob):

2012-05-09  Dana Jansens  <danakj@chromium.org>

        [chromium] Don't draw when canDraw() is false
        https://bugs.webkit.org/show_bug.cgi?id=85829

        Reviewed by Adrienne Walker.

        This is based on the work of Daniel Sievers in bug
        https://bugs.webkit.org/show_bug.cgi?id=82680. When canDraw() is false,
        we should not call drawLayers() or prepareToDraw() in both Single- and
        Multi-Threaded mode.

        drawLayers() is crashing in single threaded mode, and this attempts to
        prevent it from being called with invalid state. While making it behave
        properly in single-threaded mode, it seems appropriate to unrevert the
        parts of 82680 that made threaded mode behave similarly appropriately.

        A single-threaded test is not included since LTHTests is unable to run
        in single-threaded mode at this time (pending work from Ian Vollick). So
        we test in threaded mode only with a note to include a single thread
        version.

        Tests: CCLayerTreeHostTestCanDrawBlocksDrawing.runMultiThread

        * platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:
        (WebCore::CCLayerTreeHostImpl::prepareToDraw):
        (WebCore::CCLayerTreeHostImpl::drawLayers):
        * platform/graphics/chromium/cc/CCSingleThreadProxy.cpp:
        (WebCore::CCSingleThreadProxy::doComposite):
        * platform/graphics/chromium/cc/CCThreadProxy.cpp:
        (WebCore::CCThreadProxy::scheduledActionDrawAndSwapInternal):

2012-05-09  Martin Robinson  <mrobinson@igalia.com>

        [Cairo] GLContextGLX releases the context with an uninitialized display
        https://bugs.webkit.org/show_bug.cgi?id=86039

        Reviewed by Philippe Normand.

        No new tests. This does not change behavior on most machines, but has
        the potential to prevent a pretty nasty crash on others.

        Use the shared display to release GLX contexts instead of the uninitialized
        m_display member.

        * platform/graphics/glx/GLContextGLX.cpp:
        (WebCore::GLContextGLX::~GLContextGLX): Release the display with the shared
        display.
        * platform/graphics/glx/GLContextGLX.h:
        (GLContextGLX): Remove the m_display member.

2012-05-09  Tony Gentilcore  <tonyg@chromium.org>

        Subresources loaded after a reload completes shouldn't be revalidated.
        https://bugs.webkit.org/show_bug.cgi?id=84614

        Based on patch by Darin Fisher.

        Reviewed by Darin Fisher.

        Tests: http/tests/cache/loaded-from-cache-after-reload-within-iframe.html
               http/tests/cache/loaded-from-cache-after-reload.html

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::checkLoadCompleteForThisFrame): Reset m_loadType after the load completes.

2012-05-09  Erik Arvidsson  <arv@chromium.org>

        [V8] Fix issue where V8BindingPerContextData could keep the context object alive
        https://bugs.webkit.org/show_bug.cgi?id=86036

        Reviewed by Kentaro Hara.

        This is a partial revert of http://trac.webkit.org/changeset/114320/. This keeps
        the layout tests that were introduced since it turns out that
        http://trac.webkit.org/changeset/114989 fixes the tests too.

        Covered by: http/tests/security/isolatedWorld/context-destroy.html

        * bindings/v8/V8IsolatedContext.cpp:
        (WebCore::V8IsolatedContext::destroy):

2012-05-09  Anders Carlsson  <andersca@apple.com>

        Speed up some parts of TileCache drawing
        https://bugs.webkit.org/show_bug.cgi?id=86033
        <rdar://problem/10919373>

        Reviewed by Sam Weinig.

        * platform/graphics/ca/mac/TileCache.mm:
        (WebCore::TileCache::tileCoverageRect):
        If we can't have scrollbars, there's not much need to extend the tile coverage rect outside of the visible rect, since it's
        unlikely that we'll do any form of scrolling here.

        (WebCore::TileCache::revalidateTiles):
        Don't update the tile layer frame if it's big enough to contain the tile size. Also, if there are no new tiles created,
        don't call platformCALayerDidCreateTiles since that will trigger an extra layer flush.

2012-05-09  Alexandre Elias  <aelias@google.com>

        setPageScaleFactor should setScrollPosition if scale is unchanged
        https://bugs.webkit.org/show_bug.cgi?id=84400

        Reviewed by Adam Barth.

        Previously, setPageScaleFactor forgot about its "origin" argument if
        the page scale factor is unchanged.  This has proven undesirable in
        practice because, for example, a single pinch gesture may zoom in and
        back out to the original page scale factor, but at a different scroll
        offset.

        New test case added to scale-and-scroll-body-expected.txt

        * page/Page.cpp:
        (WebCore::Page::setPageScaleFactor):

2012-05-09  Hugo Parente Lima  <hugo.lima@openbossa.org>

        Use suitable viewport values on XHTML-MP pages.
        https://bugs.webkit.org/show_bug.cgi?id=85425

        Reviewed by Kenneth Rohde Christiansen.

        Tests: fast/viewport/viewport-legacy-xhtmlmp-misplaced-doctype.html
               fast/viewport/viewport-legacy-xhtmlmp-ordering.html
               fast/viewport/viewport-legacy-xhtmlmp.html

        Use device-width and device-height as viewport size on
        XHTML-MP pages if the use feature LEGACY_VIEWPORT_ADAPTION
        is set according as the non normative section of
        http://www.w3.org/TR/css-device-adapt/

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

2012-05-09  Beth Dakin  <bdakin@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=86025
        RTL and vertical text documents do no scroll properly with the new 
        tiled scrolling model
        -and corresponding-
        <rdar://problem/11077589>

        Reviewed by Dan Bernstein.
        
        Most of the fix here is just to teach the scrolling tree about the 
        scroll origin.
        * page/scrolling/ScrollingCoordinator.cpp:
        (WebCore::ScrollingCoordinator::frameViewLayoutUpdated):
        (WebCore::ScrollingCoordinator::setScrollParameters):
        * page/scrolling/ScrollingCoordinator.h:
        (ScrollParameters):
        * page/scrolling/ScrollingTreeNode.cpp:
        (WebCore::ScrollingTreeNode::update):
        * page/scrolling/ScrollingTreeNode.h:
        (WebCore::ScrollingTreeNode::scrollOrigin):
        (ScrollingTreeNode):
        * page/scrolling/ScrollingTreeState.cpp:
        (WebCore::ScrollingTreeState::setScrollOrigin):
        (WebCore):
        * page/scrolling/ScrollingTreeState.h:
        (WebCore::ScrollingTreeState::scrollOrigin):
        (ScrollingTreeState):
        * page/scrolling/mac/ScrollingTreeNodeMac.mm:
        (WebCore::ScrollingTreeNodeMac::scrollPosition):
        (WebCore::ScrollingTreeNodeMac::setScrollLayerPosition):
        (WebCore::ScrollingTreeNodeMac::minimumScrollPosition):
        (WebCore::ScrollingTreeNodeMac::maximumScrollPosition):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::frameViewDidScroll):

        Teaching the scrolling tree about the scroll origin revealed this pre-
        existing bug. layoutOverflowRect() is not the right rect to use since 
        it is not writing-mode savvy. unscaledDocumentRect() is the right rect 
        for the view's bounds.
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateCompositedBounds):

2012-05-09  Rob Buis  <rwlbuis@webkit.org>

        Cleanup SVGElement.cpp
        https://bugs.webkit.org/show_bug.cgi?id=86004

        Reviewed by Eric Seidel.

        Remove unneeded includes. We do not need to check attr in SVGElement::attributeChanged,
        lower layers assume it is non-null and we do not call attributeChanged in SVG.

        * svg/SVGElement.cpp:
        (WebCore::SVGElement::attributeChanged):
        (WebCore::SVGElement::isAnimatableAttribute):

2012-05-09  Jochen Eisinger  <jochen@chromium.org>

        When creating a new page during a navigation, prime the initial document with the correct referrer policy
        https://bugs.webkit.org/show_bug.cgi?id=86001

        Reviewed by Adam Barth.

        Test: http/tests/security/referrer-policy-redirect-link.html

        * dom/Document.h:
        (WebCore::Document::setReferrerPolicy):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::continueLoadAfterNewWindowPolicy):

2012-05-09  Alec Flett  <alecflett@chromium.org>

        IndexedDB: call abort handler when there are problems committing
        https://bugs.webkit.org/show_bug.cgi?id=85841

        Reviewed by Ojan Vafai.

        No new tests. Every existing test that calls commit() is testing
        the success side of this, and this only throws when there are
        LevelDB errors, which is exactly what we're trying to diagnose
        with this patch.

        * Modules/indexeddb/IDBBackingStore.h:
        (Transaction):
        * Modules/indexeddb/IDBLevelDBBackingStore.cpp:
        (WebCore::IDBLevelDBBackingStore::deleteDatabase):
        (WebCore::IDBLevelDBBackingStore::Transaction::commit):
        * Modules/indexeddb/IDBLevelDBBackingStore.h:
        (Transaction):
        * Modules/indexeddb/IDBTransactionBackendImpl.cpp:
        (WebCore::IDBTransactionBackendImpl::commit):

2012-05-09  Mark Pilgrim  <pilgrim@chromium.org>

        [Chromium] Remove PlatformSupport::loadPlatformImageResource, call loadResource directly
        https://bugs.webkit.org/show_bug.cgi?id=84417

        Reviewed by Adam Barth.

        Part of a refactoring series. See tracking bug 82948.

        * WebCore.gyp/WebCore.gyp:
        * WebCore.gypi:
        * platform/chromium/PlatformSupport.h:
        (PlatformSupport):
        * platform/graphics/chromium/ImageChromium.cpp:
        (WebCore::Image::loadPlatformResource):
        * platform/graphics/chromium/ImageChromiumMac.mm: Removed.

2012-05-09  Rob Buis  <rbuis@rim.com>

        Remove some isSVGFoo methods
        https://bugs.webkit.org/show_bug.cgi?id=86009

        Reviewed by Eric Seidel.

        These are not used at the moment and were probably just copy and pasted from
        isSVGFoo methods in RenderObject.h.

        * rendering/RenderObject.h:
        * rendering/svg/RenderSVGEllipse.h:
        (RenderSVGEllipse):
        * rendering/svg/RenderSVGRect.h:
        (RenderSVGRect):
        * rendering/svg/RenderSVGShape.h:

2012-05-09  Ian Vollick  <vollick@chromium.org>

        [chromium] Add impl-thread support for fill-mode and direction css animation properties
        https://bugs.webkit.org/show_bug.cgi?id=77662

        Reviewed by James Robinson.

        Adds support for accelerating css animations with -webkit-animation-fill-mode,
        and -webkit-animation-direction properties.

        Tested in:
          CCActiveAnimationTest.TrimTimeAlternating
          CCLayerAnimationControllerTest.createReversedAnimation
          CCLayerAnimationControllerTest.createAlternatingAnimation
          CCLayerAnimationControllerTest.createReversedAlternatingAnimation

        * platform/graphics/chromium/cc/CCActiveAnimation.cpp:
        (WebCore::CCActiveAnimation::CCActiveAnimation):
        (WebCore::CCActiveAnimation::trimTimeToCurrentIteration):
        (WebCore::CCActiveAnimation::cloneForImplThread):
        * platform/graphics/chromium/cc/CCActiveAnimation.h:
        (CCActiveAnimation):
        (WebCore::CCActiveAnimation::alternatesDirection):
        (WebCore::CCActiveAnimation::setAlternatesDirection):
        * platform/graphics/chromium/cc/CCLayerAnimationController.cpp:

2012-05-09  Ken Buchanan  <kenrb@chromium.org>

        Crash from removal of a line break object
        https://bugs.webkit.org/show_bug.cgi?id=85997

        Reviewed by David Hyatt.

        Regression from r115343. That replaced a call to setNeedsLayout()
        with a separate call that used a different bit during linebox
        invalidation after renderer child removal. There are special cases
        where layout isn't marked on parent nodes just from the removal, so
        line dirtying needs to explicitly mark ancestors for layout.

        * rendering/RenderObject.h:
        (WebCore::RenderObject::setAncestorLineBoxDirty):

2012-05-09  Levi Weintraub  <leviw@chromium.org>

        Fix performance regression for floats caused by LayoutUnit change
        https://bugs.webkit.org/show_bug.cgi?id=85834

        Reviewed by Ojan Vafai.

        Refactoring FractionalLayout types to alleviate performance issues. Explicitly
        inlining constructor and operator functions in FractionalLayoutUnit, as well as
        pixelSnappedIntSize and pixelSnappedIntRect (particularly hot code paths). Also
        further simplifying round and ceil functions when sub-pixel layout is not enabled.

        pixelSnappedIntSize was the only function defined in FractionalLayoutSize.cpp,
        so it is removed.

        No new tests. No change in functionality.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/FractionalLayoutUnit.h:
        (WebCore::FractionalLayoutUnit::FractionalLayoutUnit):
        (FractionalLayoutUnit):
        (WebCore::FractionalLayoutUnit::toInt):
        (WebCore::FractionalLayoutUnit::toFloat):
        (WebCore::FractionalLayoutUnit::toDouble):
        (WebCore::FractionalLayoutUnit::toUnsigned):
        (WebCore::FractionalLayoutUnit::operator int):
        (WebCore::FractionalLayoutUnit::operator unsigned):
        (WebCore::FractionalLayoutUnit::operator float):
        (WebCore::FractionalLayoutUnit::operator double):
        (WebCore::FractionalLayoutUnit::operator bool):
        (WebCore::FractionalLayoutUnit::ceil):
        (WebCore::FractionalLayoutUnit::round):
        * platform/graphics/FractionalLayoutRect.cpp:
        (WebCore):
        * platform/graphics/FractionalLayoutRect.h:
        (WebCore::FractionalLayoutRect::pixelSnappedSize):
        (WebCore::pixelSnappedIntRect):
        (WebCore):
        * platform/graphics/FractionalLayoutSize.cpp: Removed.
        * platform/graphics/FractionalLayoutSize.h:
        (WebCore):
        * rendering/LayoutTypes.h:
        (WebCore::pixelSnappedIntSize):
        (WebCore):

2012-05-09  Abhishek Arya  <inferno@chromium.org>

        Crash in ReplaceSelectionCommand::performTrivialReplace
        https://bugs.webkit.org/show_bug.cgi?id=85943

        Reviewed by Ryosuke Niwa.

        RefPtr nodeAfterInsertionPos to guard against mutation events.

        Test: editing/inserting/insert-html-crash.html

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

2012-05-03  Shawn Singh  <shawnsingh@chromium.org>

        Hit testing is incorrect in some cases with perspective transforms
        https://bugs.webkit.org/show_bug.cgi?id=79136

        Reviewed by Simon Fraser.

        Tests: transforms/3d/hit-testing/coplanar-with-camera.html
               transforms/3d/hit-testing/perspective-clipped.html

        * platform/graphics/transforms/TransformationMatrix.cpp:
        (WebCore::TransformationMatrix::projectPoint): Fix a
        divide-by-zero error so that values do not become Inf or Nan. Also
        fix an overflow error by using a large, but not-too-large constant
        to represent infinity.

        (WebCore::TransformationMatrix::projectQuad): Fix an error where
        incorrect quads were being returned. Incorrect quads can occur
        when projectPoint clamped==true after returning.

2012-05-09  Caio Marcelo de Oliveira Filho  <caio.oliveira@openbossa.org>

        Simplify CSSParser::parseSimpleLengthValue()
        https://bugs.webkit.org/show_bug.cgi?id=85910

        Reviewed by Alexis Menard.

        Various small improvements to this function, mainly:
        - Move the check if the property ID accepts a simple length as early as possible;
        - Remove the check for the characters{8,16} pointers since they'll be valid (we ASSERT that);
        - Use a template to avoid duplicate code for 8 and 16 bit characters.

        * css/CSSParser.cpp:
        (WebCore):
        (WebCore::parseSimpleLength):
        (WebCore::parseSimpleLengthValue):

2012-05-09  Ami Fischman  <fischman@chromium.org>

        [chromium] Support multiple buffered time ranges
        https://bugs.webkit.org/show_bug.cgi?id=85926

        Reviewed by Eric Carlson.

        Preserve existing rendering of a single rect even in the presence of multiple buffered regions.

        No new tests as this change has no functional effects.

        * rendering/RenderMediaControlsChromium.cpp:
        (WebCore::paintMediaSlider):

2012-05-09  Dana Jansens  <danakj@chromium.org>

        Early-out and avoid any copying when possible for Region operations
        https://bugs.webkit.org/show_bug.cgi?id=85260

        Reviewed by Anders Carlsson.

        For an empty region, any intersection or subtraction will not modify
        the region, so we can simply return instead of creating a new Shape
        and replacing the current empty Shape.

        When a region is united with a region it contains, the orignal
        containing region is the result. So, if A.unite(B) and A.contains(B)
        then A does not need to change at all and we can return without making
        a copy of A's shape. When A is a rect, we can do this test even more
        simply.

        We also remove redundant checks from trySimpleOperation() methods, where
        the test is already done in the Region calling site.

        This change improves the performance of the Region overlap testing for
        composited layers, and allows us to avoid unnecessary copies of the
        Region during unite. With a layout test (attached to bug #81087), that
        creates a Region from the union of 225 composited layers, as well as
        600 overlapping layers above them, this change decreases the running
        time of the test by 3.2% by avoiding a copy of the entire Region for
        each insertion that does not change the resulting Region.

        Unit tests: RegionTest.unite

        * platform/graphics/Region.cpp:
        (WebCore::Region::Shape::UnionOperation::trySimpleOperation):
        (WebCore::Region::Shape::IntersectOperation::trySimpleOperation):
        (WebCore::Region::Shape::SubtractOperation::trySimpleOperation):
        (WebCore::Region::intersect):
        (WebCore::Region::unite):
        (WebCore::Region::subtract):
        * platform/graphics/Region.h:
        (WebCore::Region::isRect):
        (WebCore::Region::Shape::isRect):

2012-05-09  Tommy Widenflycht  <tommyw@google.com>

        MediaStream API: SessionDescription::addCandidate should not crash for malformed input
        https://bugs.webkit.org/show_bug.cgi?id=85988

        Reviewed by Adam Barth.

        Sending null would crash the browser. Added safeguards in both the bindings and the native code.

        Test: fast/mediastream/SessionDescription.html

        * Modules/mediastream/SessionDescription.cpp:
        (WebCore::SessionDescription::addCandidate):
        * Modules/mediastream/SessionDescription.h:
        (SessionDescription):
        * Modules/mediastream/SessionDescription.idl:

2012-05-09  Tommy Widenflycht  <tommyw@google.com>

        MediaStream API: Adding the possibility of port specific information in MediaStreamDescriptor
        https://bugs.webkit.org/show_bug.cgi?id=85794

        Reviewed by Adam Barth.

        To facilitate for ports I have added an ExtraData field that can be used for whatever purpose is needed.

        No behavioral changes.

        * platform/chromium/support/WebMediaStreamDescriptor.cpp:
        (ExtraDataContainer):
        (WebKit::ExtraDataContainer::ExtraDataContainer):
        (WebKit::ExtraDataContainer::extraData):
        (WebKit):
        (WebKit::WebMediaStreamDescriptor::extraData):
        (WebKit::WebMediaStreamDescriptor::setExtraData):
        * platform/mediastream/MediaStreamDescriptor.h:
        (ExtraData):
        (WebCore::MediaStreamDescriptor::ExtraData::~ExtraData):
        (MediaStreamDescriptor):
        (WebCore::MediaStreamDescriptor::extraData):
        (WebCore::MediaStreamDescriptor::setExtraData):

2012-05-09  Takashi Sakamoto  <tasak@google.com>

        Crash in WebCore::RenderBoxModelObject::paddingLeft
        https://bugs.webkit.org/show_bug.cgi?id=83889

        Reviewed by Abhishek Arya.

        RenderScrollbar creates RenderScrollbarPart without any parent
        renderers. However, if the scrollbar has percent padding styles,
        non-null parent renderer is required. So after creating/destroying
        RenderScrollbarPart instances, set owningRenderer(creating)/0
        (destroying) as its parent renderer.

        Test: scrollbars/scrollbar-percent-padding-crash.html
              scrollbars/scrollbar-percent-padding-crash-expected.txt

        * rendering/RenderScrollbar.cpp:
        (WebCore::RenderScrollbar::updateScrollbarPart):
        Added setParent after creating/destroying RenderScrollbarPart.
        * rendering/RenderScrollbarPart.cpp:
        Made RenderScollbar friend, because setParent is protected and
        RenderScrollbar is not inherited from class RenderObject.

2012-05-09  Takashi Sakamoto  <tasak@google.com>

        ShadowRoot needs applyAuthorStyles
        https://bugs.webkit.org/show_bug.cgi?id=78472

        Reviewed by Hajime Morita.

        Implemented applyAuthorStyles attribute defined in the following spec:
        http://dvcs.w3.org/hg/webcomponents/raw-file/tip/spec/shadow/index.html#shadow-root-attributes
        Since applyAuthorSheets attribute has been already implemented,
        renamed all applyAuthorSheets to applyAuthorStyles and
        added applyAuthorStyles to ShadowRoot.idl.
        Currently, changing dynamically applyAuthorStyles doesn't work. I will fix this isse in bugs:84215: https://bugs.webkit.org/show_bug.cgi?id=84251

        Test: fast/dom/shadow/shadow-root-applyAuthorStyles.html
              fast/dom/shadow/shadow-root-applyAuthorStyles-expected.html

        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::collectMatchingRulesForList):
        * dom/ShadowRoot.cpp:
        (WebCore::ShadowRoot::ShadowRoot):
        (WebCore::ShadowRoot::applyAuthorStyles):
        (WebCore::ShadowRoot::setApplyAuthorStyles):
        * dom/ShadowRoot.h:
        * dom/TreeScope.cpp:
        (WebCore::TreeScope::applyAuthorStyles):
        * dom/TreeScope.h:
        (TreeScope):
        Changed all applyAuthorSheets to applyAuthorSytles.
        (ShadowRoot):
        * dom/ShadowRoot.idl:
        Added a new attribute, boolean applyAuthorStyles.

2012-05-09  Yoshifumi Inoue  <yosin@chromium.org>

        [Chromium][Forms] HTMLOptionsCollection doesn't have indexed properties on property enumeration
        https://bugs.webkit.org/show_bug.cgi?id=85937

        Reviewed by Kentaro Hara.

        This patch adds numeric indices to properties in enumeration to HTMLOptionsCollection V8 binding
        to changes Objects.keys in ECMAScript5 and for-in statement behavior for compatibility with
        Firefox 12, IE9, Opera 11, and Safari 5.

        Test: fast/forms/select/options-indexed-properties.html

        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateImplementationIndexer): Set $hasEnumerator true for interface HTMLOptionsCollection

2012-05-09  Shinya Kawanaka  <shinyak@chromium.org>

        Position should be able to have ShadowRoot as a container.
        https://bugs.webkit.org/show_bug.cgi?id=82021

        Reviewed by Ryosuke Niwa.

        Since Position could not take a shadow root as a container node, pointing the direct children
        of a shadow root was difficult.

        This patch makes it enabled, and fixes a lot of crashes caused by that limitation.
        Also, we confirm that ShadowRoot is not exposed to JavaScript layer.

        Currently this change is only enabled if shadow dom flag is enabled, since we cannot
        prove this change does not destroy the existing behavior. However, this change is really required
        to fix other editing bugs in Shadow DOM. A bunch of patches and tests will be added to
        fix other editing bugs and they will check this patch does not break editing.
        We will also add a fuzzer to check the stability of editing in Shadow DOM later, and it will
        also help to confirm the patch will not break the editing.

        Tests: editing/shadow/doubleclick-on-meter-in-shadow-crash.html
               editing/shadow/rightclick-on-meter-in-shadow-crash.html
               editing/shadow/shadow-selection-not-exported.html

        * dom/Position.cpp:
        (WebCore::Position::Position):
        (WebCore::Position::containerNode):
        (WebCore::Position::parentAnchoredEquivalent):
        (WebCore::Position::previous):
        (WebCore::Position::next):
        (WebCore::Position::atStartOfTree):
        (WebCore::Position::atEndOfTree):
        (WebCore::Position::findParent):
        * dom/Position.h:
        (WebCore):
        (WebCore::positionInParentBeforeNode):
        (WebCore::positionInParentAfterNode):

2012-05-09  Zoltan Horvath  <zoltan@webkit.org>

        [Qt] Build fix when using libpng version != 1.2
        https://bugs.webkit.org/show_bug.cgi?id=85614

        Reviewed by Eric Seidel.

        Don't enforce the version of libpng when passing the option to the linker.

        No new tests, no intended functionality change.

        * WebCore.pri:

2012-05-09  Oli Lan  <olilan@chromium.org>

        Add identifying methods for date/time input types.

        This patch adds methods isDateField(), isDateTimeField(), isDateTimeLocalField(),
        isMonthField(), isTimeField() and isWeekField() to InputType and the appropriate
        HTMLInputElement classes, to allow date/time input types to be identified.

        The new methods match the existing methods for types such as email, search and number.

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

        Reviewed by Kent Tamura.

        A new test WebViewTest.TextInputType has been added in WebKit/chromium/tests that calls
        through to these methods via WebViewImpl.textInputType().

        * html/DateInputType.cpp:
        (WebCore::DateInputType::isDateField):
        (WebCore):
        * html/DateInputType.h:
        (DateInputType):
        * html/DateTimeInputType.cpp:
        (WebCore::DateTimeInputType::isDateTimeField):
        (WebCore):
        * html/DateTimeInputType.h:
        (DateTimeInputType):
        * html/DateTimeLocalInputType.cpp:
        (WebCore::DateTimeLocalInputType::isDateTimeLocalField):
        (WebCore):
        * html/DateTimeLocalInputType.h:
        (DateTimeLocalInputType):
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::isDateField):
        (WebCore):
        (WebCore::HTMLInputElement::isDateTimeField):
        (WebCore::HTMLInputElement::isDateTimeLocalField):
        (WebCore::HTMLInputElement::isMonthField):
        (WebCore::HTMLInputElement::isTimeField):
        (WebCore::HTMLInputElement::isWeekField):
        * html/HTMLInputElement.h:
        (HTMLInputElement):
        * html/InputType.cpp:
        (WebCore::InputType::isDateField):
        (WebCore):
        (WebCore::InputType::isDateTimeField):
        (WebCore::InputType::isDateTimeLocalField):
        (WebCore::InputType::isMonthField):
        (WebCore::InputType::isTimeField):
        (WebCore::InputType::isWeekField):
        * html/InputType.h:
        (InputType):
        * html/MonthInputType.cpp:
        (WebCore::MonthInputType::isMonthField):
        (WebCore):
        * html/MonthInputType.h:
        (MonthInputType):
        * html/TimeInputType.cpp:
        (WebCore::TimeInputType::isTimeField):
        (WebCore):
        * html/TimeInputType.h:
        (TimeInputType):
        * html/WeekInputType.cpp:
        (WebCore::WeekInputType::isWeekField):
        (WebCore):
        * html/WeekInputType.h:
        (WeekInputType):

2012-05-09  Nikolas Zimmermann  <nzimmermann@rim.com>

        REGRESSION(r105057): Infinite loop inside SVGTextLayoutEngine::currentLogicalCharacterMetrics
        https://bugs.webkit.org/show_bug.cgi?id=83405

        Reviewed by Darin Adler.

        Dynamically adding tspans carrying position information in the x/y/dx/dy/rotate lists is broken.
        To avoid mistakes like this in future, simplify the calling code in RenderSVGInlineText and centralize
        the managment of all caches (text positioning element cache / metrics map / layout attributes) in
        RenderSVGText. This avoids the hack in SVGRootInlineBox::computePerCharacterLayoutInformation() which
        called textRoot->rebuildLayoutAttributes(), which was used to fix previous security issues with this code.
        Instead correctly handle destruction of RenderSVGInlineText in RenderSVGText, keeping the m_layoutAttributes
        synchronized with the current state of the render tree. Fixes highcharts problems.

        Tests: svg/text/add-tspan-position-bug.html
               svg/text/modify-tspan-position-bug.html

        * rendering/svg/RenderSVGInline.cpp:
        (WebCore::RenderSVGInline::addChild):
        * rendering/svg/RenderSVGInlineText.cpp:
        (WebCore::RenderSVGInlineText::willBeDestroyed):
        (WebCore::RenderSVGInlineText::setTextInternal):
        (WebCore::RenderSVGInlineText::styleDidChange):
        * rendering/svg/RenderSVGText.cpp:
        (WebCore::recursiveUpdateMetrics):
        (WebCore::RenderSVGText::subtreeChildAdded):
        (WebCore::RenderSVGText::subtreeChildWillBeDestroyed):
        (WebCore::recursiveCollectLayoutAttributes):
        (WebCore::checkLayoutAttributesConsistency):
        (WebCore::RenderSVGText::subtreeChildWasDestroyed):
        (WebCore::RenderSVGText::subtreeStyleChanged):
        (WebCore::RenderSVGText::subtreeTextChanged):
        (WebCore::RenderSVGText::layout):
        (WebCore::RenderSVGText::addChild):
        (WebCore::RenderSVGText::rebuildAllLayoutAttributes):
        (WebCore::RenderSVGText::rebuildLayoutAttributes):
        * rendering/svg/RenderSVGText.h:
        (WebCore::RenderSVGText::layoutAttributes):
        * rendering/svg/SVGRootInlineBox.cpp:
        (WebCore::SVGRootInlineBox::computePerCharacterLayoutInformation):
        * rendering/svg/SVGTextLayoutAttributesBuilder.cpp:
        (WebCore::SVGTextLayoutAttributesBuilder::buildLayoutAttributes):

2012-05-08  Dongwoo Im  <dw.im@samsung.com>

        NavigatorRegisterProtocolHandler can call ChromeClient directly.
        https://bugs.webkit.org/show_bug.cgi?id=85944

        Reviewed by Adam Barth.

        Covered by fast/dom/register-protocol-handler.html

        * page/Chrome.cpp: Remove registerProtocolHandler function.
        * page/Chrome.h: Remove registerProtocolHandler prototype.
        (Chrome):
        * page/NavigatorRegisterProtocolHandler.cpp: Call ChromeClient::registerProtocolHandler directly.
        (WebCore::NavigatorRegisterProtocolHandler::registerProtocolHandler):

2012-05-08  Mario Sanchez Prada  <msanchez@igalia.com>

        Coding style issues present in RenderFrameSet.cpp
        https://bugs.webkit.org/show_bug.cgi?id=85955

        Reviewed by Eric Seidel.

        Just fixed those coding style issues.

        * rendering/RenderFrameSet.cpp:
        (WebCore::RenderFrameSet::GridAxis::resize):
        (WebCore::RenderFrameSet::layOutAxis):
        (WebCore::RenderFrameSet::continueResizing):

2012-05-08  Jon Lee  <jonlee@apple.com>

        Unreviewed build fix.

        * platform/mac/WebCoreSystemInterface.h:

2012-05-08  Jason Liu  <jason.liu@torchmobile.com.cn>

        [BlackBerry] Auth credentials set in private mode are reused in public mode.
        https://bugs.webkit.org/show_bug.cgi?id=84697

        Reviewed by Rob Buis.

        Add setPrivateMode function for CredentialStorage.

        Now, we only save credentials in memory and CredentialBackingStore isn't enabled.
        When we set private mode from on to off, we clear all these temporary credentials.

        We have to change Private Browsing to test, so have to write a manual test case.
        Test: ManualTests/blackberry/http-auth-private-mode-changed.html

        * network/CredentialStorage.cpp:
        (WebCore::CredentialStorage::setPrivateMode):
        (WebCore):
        * platform/network/CredentialStorage.h:
        (CredentialStorage):

2012-05-08  Rakesh KN  <rakesh.kn@motorola.com>

        RadioNodeList support in HTMLFormElement::elements
        https://bugs.webkit.org/show_bug.cgi?id=81854

        Reviewed by Ryosuke Niwa.

        Implement RadioNodeList support spec'ed at
        http://www.whatwg.org/specs/web-apps/current-work/multipage/common-dom-interfaces.html#radionodelist

        Test: fast/forms/form-collection-radio-node-list.html

        * CMakeLists.txt:
        Added entries for new files.
        * DerivedSources.cpp: Ditto.
        * DerivedSources.make: Ditto.
        * DerivedSources.pri: Ditto.
        * GNUmakefile.list.am: Ditto.
        * Target.pri: Ditto.
        * WebCore.gypi: Ditto.
        * WebCore.vcproj/WebCore.vcproj: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Ditto.
        * bindings/js/JSHTMLCollectionCustom.cpp:
        (WebCore::getNamedItems):
        Modified to create RadioNodeList object when FormControlCollection has more than
        one element of same name/id.
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateImplementation):
        Added code to include Node.h and JSNode.h in JSRadioNodeElement.cpp.
        * bindings/v8/custom/V8HTMLCollectionCustom.cpp:
        (WebCore::getNamedItems):
        Modified to create RadioNodeList object when FormControlCollection has more than
        one element of same name/id.
        * dom/Node.cpp:
        (WebCore::Node::invalidateNodeListsCacheAfterAttributeChanged):
        Invalidate lists even for change in id, type, checked attributes.
        (WebCore::NodeListsNodeData::invalidateCachesThatDependOnAttributes):
        Invalidate radioNodeList cache.
        (WebCore::NodeListsNodeData::isEmpty):
        Changes for radioNodeList.
        (WebCore::Node::radioNodeList):
        Creates if needed a RadioNodeList and adds it to the cache.
        (WebCore::Node::removeCachedRadioNodeList):
        Removes a cached radioNodeList.
        * dom/Node.h: Ditto
        * dom/NodeRareData.h:
        (WebCore):
        (NodeListsNodeData):
        Added radioNodeList list.
        * html/CollectionType.h:
        Added new FormControls type.
        * html/HTMLCollection.cpp:
        (WebCore::HTMLCollection::shouldIncludeChildren):
        (WebCore::HTMLCollection::isAcceptableElement):
        Handle FormControls collection type.
        * html/HTMLFormCollection.cpp:
        (WebCore::HTMLFormCollection::HTMLFormCollection):
        Contruct collection of FormControls type.
        * html/RadioNodeList.cpp: Added.
        (WebCore):
        (WebCore::RadioNodeList::RadioNodeList):
        (WebCore::RadioNodeList::~RadioNodeList):
        (WebCore::toRadioButtonInputElement):
        (WebCore::RadioNodeList::value):
        (WebCore::RadioNodeList::setValue):
        (WebCore::RadioNodeList::nodeMatches):
        * html/RadioNodeList.h: Added.
        (WebCore):
        (RadioNodeList):
        (WebCore::RadioNodeList::create):
        RadioNodeList implementation.
        * html/RadioNodeList.idl: Added.
        Idl for generating RadioNodeList JS/V8 bindings.

2012-05-08  Benjamin Poulain  <bpoulain@apple.com>

        [JSC] Regression: addEventListener() and removeEventListener() raise an exception on missing args
        https://bugs.webkit.org/show_bug.cgi?id=85928

        Reviewed by Geoffrey Garen.

        The functions addEventListener() and removeEventListener() raise an exception if there are missin arguments.
        This behavior breaks existing content.

        This patch change the code generator of JavaScript core to have an exception for addEventListener() and removeEventListener().
        For those function, we do not raise an exception on missin argument.

        This patch does not modify the V8 code generator because such exceptions are already in place there.

        Tests: fast/dom/Window/window-legacy-event-listener.html
               fast/dom/XMLHttpRequest-legacy-event-listener.html
               fast/dom/node-legacy-event-listener.html

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateImplementation):

2012-05-08  Chris Rogers  <crogers@google.com>

        AudioParam should directly be given context in create() method
        https://bugs.webkit.org/show_bug.cgi?id=85905

        Reviewed by James Robinson.

        No new tests.  This is a low-level re-factoring and is covered by existing tests.

        * Modules/webaudio/AudioBufferSourceNode.cpp:
        (WebCore::AudioBufferSourceNode::AudioBufferSourceNode):
        * Modules/webaudio/AudioGain.h:
        (WebCore::AudioGain::create):
        (WebCore::AudioGain::AudioGain):
        * Modules/webaudio/AudioGainNode.cpp:
        (WebCore::AudioGainNode::AudioGainNode):
        * Modules/webaudio/AudioPannerNode.cpp:
        (WebCore::AudioPannerNode::AudioPannerNode):
        * Modules/webaudio/AudioParam.h:
        (WebCore::AudioParam::create):
        (AudioParam):
        (WebCore::AudioParam::AudioParam):
        * Modules/webaudio/BiquadFilterNode.cpp:
        (WebCore::BiquadFilterNode::BiquadFilterNode):
        * Modules/webaudio/BiquadProcessor.cpp:
        (WebCore::BiquadProcessor::BiquadProcessor):
        * Modules/webaudio/BiquadProcessor.h:
        * Modules/webaudio/DelayNode.cpp:
        (WebCore::DelayNode::DelayNode):
        * Modules/webaudio/DelayProcessor.cpp:
        (WebCore::DelayProcessor::DelayProcessor):
        * Modules/webaudio/DelayProcessor.h:
        (DelayProcessor):
        * Modules/webaudio/DynamicsCompressorNode.cpp:
        (WebCore::DynamicsCompressorNode::DynamicsCompressorNode):
        * Modules/webaudio/Oscillator.cpp:
        (WebCore::Oscillator::Oscillator):

2012-05-08  Dana Jansens  <danakj@chromium.org>

        [chromium] Show borders for partial-draw-culled quads to visualize culling behaviour
        https://bugs.webkit.org/show_bug.cgi?id=85414

        Reviewed by Adrienne Walker.

        The borders are brown, and are only shown when the quad's visible rect
        is non-empty and is different from the quad's original rect.

        Adds a flag to CCQuadCuller constructor, to enable showing debug borders
        around what it leaves after culling (when it culls anything in a quad
        at all).

        * platform/graphics/chromium/cc/CCDrawQuad.h:
        (WebCore::CCDrawQuad::isDebugQuad):
        (WebCore::CCDrawQuad::sharedQuadState):
        (CCDrawQuad):
        * platform/graphics/chromium/cc/CCQuadCuller.cpp:
        (WebCore):
        (WebCore::CCQuadCuller::CCQuadCuller):
        (WebCore::appendQuadInternal):
        (WebCore::CCQuadCuller::append):
        (WebCore::CCQuadCuller::appendSurface):
        (WebCore::CCQuadCuller::appendReplica):
        * platform/graphics/chromium/cc/CCQuadCuller.h:
        (CCQuadCuller):
        * platform/graphics/chromium/cc/CCRenderPass.cpp:
        (WebCore::CCRenderPass::appendQuadsForLayer):
        (WebCore::CCRenderPass::appendQuadsForRenderSurfaceLayer):

2012-05-08  Julien Chaffraix  <jchaffraix@webkit.org>

        Move RenderLayers z-index lists dirtying to post style change
        https://bugs.webkit.org/show_bug.cgi?id=85437

        Reviewed by Darin Adler.

        No expected change in behavior.

        This change moves the z-order lists to RenderLayer::styleChanged. As part of this
        change, also added proper handling of stacking context transition. This enabled
        us to tighten more of the dirtyZOrderLists / clearZOrderLists code.

        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::styleWillChange):
        Removed this code, moved to updateStackingContextsAfterStyleChange.

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::RenderLayer):
        Only stacking contexts start with dirty z-order lists.

        (WebCore::RenderLayer::dirtyZOrderLists):
        Added an ASSERT.

        (WebCore::RenderLayer::updateStackingContextsAfterStyleChange):
        Refactored the code to handle the transition between stacking context status.

        (WebCore::RenderLayer::styleChanged):
        Added a call to updateStackingContextsAfterStyleChange.

        * rendering/RenderLayer.h:
        (WebCore::RenderLayer::isStackingContext):
        Added a call to the next function.

        (WebCore::RenderLayer::layerWithStyleIsStackingContext):
        Factored the isStackingContext logic here so that we can reuse it inside
        updateStackingContextsAfterStyleChange.

        (WebCore::RenderLayer::clearZOrderLists):
        Added an ASSERT.

2012-05-08  Abhishek Arya  <inferno@chromium.org>

        Crash due to owning renderer not removed from custom scrollbar.
        https://bugs.webkit.org/show_bug.cgi?id=80610

        Reviewed by Eric Seidel.

        Test: scrollbars/scrollbar-owning-renderer-crash.html

        Changed RenderScrollbar to keep pointer to owning node, instead of the
        renderer. Renderer can get destroyed without informing the scrollbar, causing
        crashes later. Remove code from r94107 since it is not needed anymore and saves
        times when RenderBox is getting destroyed.

        * page/FrameView.cpp:
        (WebCore::FrameView::createScrollbar): pass renderer's node.
        * page/FrameView.h:
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::willBeDestroyed): no longer need this. came originally from r94107.
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::createScrollbar): pass renderer's node.
        (WebCore::RenderLayer::destroyScrollbar): no longer need to clear owning renderer.
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::createScrollbar): pass renderer's node.
        * rendering/RenderMenuList.cpp:
        (WebCore::RenderMenuList::createScrollbar): pass renderer's node.
        * rendering/RenderScrollbar.cpp:
        (WebCore::RenderScrollbar::createCustomScrollbar): Store owner node instead of renderer.
        (WebCore::RenderScrollbar::RenderScrollbar): Store owner node instead of renderer.
        (WebCore::RenderScrollbar::owningRenderer): calculate owning renderer from owner node.
        * rendering/RenderScrollbar.h:
        (RenderScrollbar):
        * rendering/RenderTextControlSingleLine.cpp:
        (WebCore::RenderTextControlSingleLine::createScrollbar): pass renderer's node.

2012-05-08  Jon Lee  <jonlee@apple.com>

        Safari warns that it needs to resend the form in an iFrame when going back
        https://bugs.webkit.org/show_bug.cgi?id=82658
        <rdar://problem/11292558>

        Reviewed by Darin Adler.

        Test: http/tests/loading/post-in-iframe-with-back-navigation.html

        * WebCore.exp.in: Add _wkCFURLRequestAllowAllPostCaching.
        * platform/mac/WebCoreSystemInterface.h: Add wkCFURLRequestAllowAllPostCaching.
        * platform/mac/WebCoreSystemInterface.mm: Add wkCFURLRequestAllowAllPostCaching.
        * platform/network/cf/ResourceRequestCFNet.cpp:
        (WebCore::ResourceRequest::doUpdatePlatformRequest): Set the bit to cache all POST responses.
        * platform/network/mac/ResourceRequestMac.mm:
        (WebCore::ResourceRequest::doUpdatePlatformRequest): Set the bit to cache all POST responses.

2012-05-08  Dana Jansens  <danakj@chromium.org>

        [chromium] Reflections with masks should not occlude
        https://bugs.webkit.org/show_bug.cgi?id=85927

        Reviewed by James Robinson.

        When a surface does not have a mask, we make both it and its reflection
        occlude the things below them. However, if the reflection has a mask
        applied to it, then we should not consider it as occluding.

        Adds replicaHasMask() to the render surface classes so we can test if
        the mask is present.

        Unit Tests: CCOcclusionTrackerTestReplicaWithMask

        * platform/graphics/chromium/RenderSurfaceChromium.cpp:
        (WebCore::RenderSurfaceChromium::hasMask):
        This is unusued right now, but will allow us to remove a FIXME from
        CCOcclusionTracker::finishedTargetRenderSurface().
        (WebCore):
        (WebCore::RenderSurfaceChromium::replicaHasMask):
        * platform/graphics/chromium/RenderSurfaceChromium.h:
        (RenderSurfaceChromium):
        * platform/graphics/chromium/cc/CCOcclusionTracker.cpp:
        (WebCore::::leaveToTargetRenderSurface):
        * platform/graphics/chromium/cc/CCRenderSurface.cpp:
        (WebCore::CCRenderSurface::hasMask):
        This is unusued right now, but will allow us to remove a FIXME from
        CCOcclusionTracker::finishedTargetRenderSurface().
        (WebCore):
        (WebCore::CCRenderSurface::replicaHasMask):
        * platform/graphics/chromium/cc/CCRenderSurface.h:
        (CCRenderSurface):

2012-05-08  Eric Seidel  <eric@webkit.org>

        Add stylesheet inheritance support to IFRAME_SEAMLESS
        https://bugs.webkit.org/show_bug.cgi?id=85914

        Reviewed by Ojan Vafai.

        This work is already guarded by IFRAME_SEAMLESS, as
        Document::shouldDisplaySeamlesslyWithParent always returns false
        when IFRAME_SEAMLESS is off.

        This makes the child document use all author stylesheets from all parent documents,
        per the seamless spec:
        http://www.whatwg.org/specs/web-apps/current-work/#attr-iframe-seamless

        This support is slightly inefficient as every time a sheet is added
        to a parent document, the child document must do a full style selector recalc.
        Normally author sheet additions have a fast-path which avoids the full selector recalc,
        but such is not possible in the seamless case as we're inserting the parents sheets
        earlier in the child's cascade (instead of just appending them to the end of the list).

        The test covers both the static inheritance as well as addition of a stylesheet
        to the parent and testing that it caused a recalc of the child.

        Covered by fast/frames/seamless/seamless-css-cascade.html

        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::StyleResolver):
        (WebCore::StyleResolver::addStylesheetsFromSeamlessParents):
        (WebCore):
        * css/StyleResolver.h:
        (StyleResolver):
        * dom/Document.cpp:
        (WebCore::Document::seamlessParentUpdatedStylesheets):
        (WebCore):
        (WebCore::Document::notifySeamlessChildDocumentsOfStylesheetUpdate):
        (WebCore::Document::updateActiveStylesheets):
        * dom/Document.h:
        (Document):

2012-05-08  Raphael Kubo da Costa  <rakuco@webkit.org>

        [CMake] FindGStreamer: Fix the build with static WebCore.
        https://bugs.webkit.org/show_bug.cgi?id=85930

        Reviewed by Daniel Bates.

        No new tests, build fix.

        Building WebCore statically was failing because files in
        WebCore/platform/gstreamer when ENABLE_VIDEO was set required
        gstreamer-base, which was not being linked to after r116453.

        Fix that by looking for gstreamer-base, requiring and linking
        against it if GStreamer is used.

        * PlatformEfl.cmake: Link to GSTREAMER_LIBRARIES and
        GSTREAMER_BASE_LIBRARIES, and include GSTREAMER_INCLUDE_DIRS and
        GSTREAMER_BASE_INCLUDE_DIRS.

2012-05-08  Raymond Toy  <rtoy@google.com>

        JavaScriptAudioNode should not ASSERT if number of input channels is 0
        https://bugs.webkit.org/show_bug.cgi?id=85818

        Reviewed by Eric Seidel.

        Test: webaudio/javascriptaudionode-zero-input-channels.html

        * Modules/webaudio/JavaScriptAudioNode.cpp:
        (WebCore::JavaScriptAudioNode::process): Update buffersAreGood.
        (WebCore::JavaScriptAudioNode::fireProcessEvent): Remove ASSERT.

2012-05-08  Dana Jansens  <danakj@chromium.org>

        Region reads past end of spans
        https://bugs.webkit.org/show_bug.cgi?id=85909

        Reviewed by Anders Carlsson.

        Region currently checks aSpan == aSpanEnd as the indicator that
        we passed all the spans. When aSpan < aSpanEnd, it uses aSpan+1
        to find the height of the span.

        If aSpan == aSpanEnd - 1, then aSpan+1 == aSpanEnd. This does not
        represent a valid span, since aSpanEnd is past the end of the
        array, not the last element in the array. The loop should terminate
        in this case.

        Checking aSegment != aSegmentEnd is acceptable in the inner loop since
        it increments by two each time (segments come in pairs, while spans
        come in singles).

        Test: RegionTest.ReadPastFullSpanVectorInIntersectsTest

        * platform/graphics/Region.cpp:
        (WebCore::Region::Shape::compareShapes):

2012-05-08  Philip Rogers  <pdr@google.com>

        Prevent crash in animated lists
        https://bugs.webkit.org/show_bug.cgi?id=85382

        Reviewed by Nikolas Zimmermann.

        Animated lists blindly assign the last list value to m_toAtEndOfDurationType
        in SVGAnimationElement::startedActiveInterval. If the last list value's length
        is larger or smaller than the animated "to" length, we crash.

        This change prevents accessing values off the end of toAtEndOfDuration by adding
        a check for this case. It may seem inefficient to perform this check on every
        animation update but the "to" value can change (in cardinality) while animating.

        I checked each of the other animation types (e.g., SVGAnimatedAngle,
        SVGAnimatedBoolean, etc.) and was only able to hit this style of crash
        in the three types modified in this change:
        SVGAnimatedLengthList, SVGAnimatedNumberList, and SVGAnimatedPointList.

        Tests: svg/animations/animate-linear-discrete-additive-b-expected.svg
               svg/animations/animate-linear-discrete-additive-b.svg
               svg/animations/animate-linear-discrete-additive-c-expected.svg
               svg/animations/animate-linear-discrete-additive-c.svg
               svg/animations/animate-linear-discrete-additive-expected.svg
               svg/animations/animate-linear-discrete-additive.svg
               svg/animations/animate-list-crash.svg

        * svg/SVGAnimatedLengthList.cpp:
        (WebCore::SVGAnimatedLengthListAnimator::calculateAnimatedValue):
        * svg/SVGAnimatedNumberList.cpp:
        (WebCore::SVGAnimatedNumberListAnimator::calculateAnimatedValue):
        * svg/SVGAnimatedPointList.cpp:
        (WebCore::SVGAnimatedPointListAnimator::calculateAnimatedValue):

2012-05-08  Rafael Weinstein  <rafaelw@chromium.org>

        HTMLElementStack::hasOnlyHTMLElementsInScope is no longer called
        https://bugs.webkit.org/show_bug.cgi?id=85908

        Reviewed by Eric Seidel.

        This patch just removes the dead code.

        No tests needed. Cleanup only.

        * html/parser/HTMLElementStack.cpp:
        * html/parser/HTMLElementStack.h:
        (HTMLElementStack):

2012-05-08  W. James MacLean  <wjmaclean@chromium.org>

        [chromium] Create LinkHighlightLayerChromium class to provide link-highlight preview animations for GraphicsLayerChromium.
        https://bugs.webkit.org/show_bug.cgi?id=85084

        Reviewed by James Robinson.

        Unit test provided.

        Creates a layer delegate class to provide link highlight animations for link-preview feature.
        These are added to a GraphicsLayerChromium via provided methods. Moves dispensing of animation
        ids into a separate class.

        * WebCore.gypi:
        * platform/graphics/chromium/AnimationIdVendor.cpp: Added.
        (WebCore):
        (WebCore::AnimationIdVendor::getNextAnimationId):
        (WebCore::AnimationIdVendor::getNextGroupId):
        * platform/graphics/chromium/AnimationIdVendor.h: Added.
        (WebCore):
        (AnimationIdVendor):
        * platform/graphics/chromium/GraphicsLayerChromium.cpp:
        (WebCore::GraphicsLayerChromium::willBeDestroyed):
        (WebCore::GraphicsLayerChromium::updateNames):
        (WebCore::GraphicsLayerChromium::addAnimation):
        (WebCore::GraphicsLayerChromium::addLinkHighlight):
        (WebCore):
        (WebCore::GraphicsLayerChromium::didFinishLinkHighlight):
        (WebCore::GraphicsLayerChromium::updateChildList):
        (WebCore::GraphicsLayerChromium::mapAnimationNameToId):
        * platform/graphics/chromium/GraphicsLayerChromium.h:
        (WebCore):
        (GraphicsLayerChromium):
        * platform/graphics/chromium/LinkHighlight.cpp: Added.
        (WebCore):
        (WebCore::LinkHighlight::create):
        (WebCore::LinkHighlight::LinkHighlight):
        (WebCore::LinkHighlight::~LinkHighlight):
        (WebCore::LinkHighlight::contentLayer):
        (WebCore::LinkHighlight::paintContents):
        (WebCore::LinkHighlight::notifyAnimationStarted):
        (WebCore::LinkHighlight::notifyAnimationFinished):
        * platform/graphics/chromium/LinkHighlight.h: Added.
        (WebCore):
        (LinkHighlight):

2012-05-08  Raphael Kubo da Costa  <rakuco@webkit.org>

        [CMake] Rewrite FindGStreamer.cmake.
        https://bugs.webkit.org/show_bug.cgi?id=85857

        Reviewed by Daniel Bates.

        No new tests, build system change.

        We are currently kind of duplicating the same
        FindGStreamer-Foo.cmake file whenever a new GStreamer plugin needs
        to be found. Besides this approach not scaling very well, it
        relies on pkg-config for version checking, uses the LibFindMacros
        package that we should deprecate and all the find files could be
        merged into one, with users using the COMPONENTS feature of the
        FIND_PACKAGE() call to find the desired plugins.

        FindGStreamer.cmake has then been rewritten to take all that into
        account:
        - The LibFindMacros.cmake package is not used anymore.
        - Version check is performed in the CMake file itself by parsing
        the gstversion.h header.
        - All GStreamer plugins are searched and the COMPONENTS keyword
        used in the FIND_PACKAGE() call is used to check which plugins are
        required.
        - The plugins-base and base GStreamer plugins are not searched, as
        they were not used anywhere in the build system.

        * PlatformEfl.cmake: Update GStreamer-related variable names.

2012-05-08  Mikhail Pozdnyakov  <mikhail.pozdnyakov@intel.com>

        [EFL] Handling of numeric-pad keys in EFL's PlatformKeyboardEvent
        https://bugs.webkit.org/show_bug.cgi?id=85479

        Reviewed by Gustavo Noronha Silva.

        EFL's PlatformKeyboardEvent::isKeypad() now returns meaningful value.
        Added numeric-pad keys to the Key Map and Windows Key Map.

        No new tests.

        * platform/efl/EflKeyboardUtilities.cpp:
        (WebCore::createKeyMap):
        (WebCore::createWindowsKeyMap):
        * platform/efl/PlatformKeyboardEventEfl.cpp:
        (WebCore::PlatformKeyboardEvent::PlatformKeyboardEvent):

2012-05-04  Nikolas Zimmermann  <nzimmermann@rim.com>

        Tie lifetime of SVGAnimateElement::m_animatedType to the duration of the animation
        https://bugs.webkit.org/show_bug.cgi?id=85627

        Reviewed by Antti Koivisto.

        Example:
        <rect width="10" height="100">
            <animate attributeName="width" from="10" to="100" begin="2s" dur="4s" fill="remove"/>
        </rect>

        At t=0s the <animate> element receives its first interval: begin=2s, end=6s.
        At this point we've created the 'OwnPtr<SVGAnimatedType> m_animatedType' in
        SVGAnimateElement, which holds the current animated value of the target type.
        In this example it contains a SVGLength with '10' as value at t=0s.

        Calling "rect.width.animVal.value" will return the value currently contained in the
        m_animatedType from the SVGAnimateElement, even though the animation didn't begin
        yet. This is fine, as the animVal equals to the baseVal, as long as no animation is
        running.

        At t=6s you'd expect that the whole 'animVal' object is destructed again, as it's no
        longer needed, as animVal will be equal to baseVal again, but the current code keeps
        the animVal alive, and just resets it to the baseVal. The animVals will be destructed
        once the animate element leaves the tree.

        CSS animations suffer from the same problem, we never remove the animated SMIL properties
        but we only reset them to the base value. This makes integration with CSS Animations and
        CSS Transitions harder, so this needs to be changed.

        This patch starts tracking the start/end of an animation chain properly, to destruct
        the animation effect for non-frozen animations at the end of their duration. This has to
        work properly together with seeking (SVGSVGElement.setCurrentTime), as our testing relies
        on the ability to drive the SMIL timeline from script.

        Tests: svg/animations/list-wrapper-assertion-expected.svg
               svg/animations/list-wrapper-assertion.svg

        * svg/SVGAnimateElement.cpp:
        (WebCore::SVGAnimateElement::resetAnimatedType):
        (WebCore::applyCSSPropertyToTarget):
        (WebCore::removeCSSPropertyFromTarget):
        (WebCore::applyCSSPropertyToTargetAndInstances):
        (WebCore::removeCSSPropertyFromTargetAndInstances):
        (WebCore::notifyTargetAboutAnimValChange):
        (WebCore::notifyTargetAndInstancesAboutAnimValChange):
        (WebCore::SVGAnimateElement::clearAnimatedType):
        (WebCore::SVGAnimateElement::applyResultsToTarget):
        (WebCore::SVGAnimateElement::targetElementWillChange):
        * svg/SVGAnimateElement.h:
        (SVGAnimateElement):
        * svg/SVGAnimateMotionElement.cpp:
        (WebCore::SVGAnimateMotionElement::resetAnimatedType):
        (WebCore::SVGAnimateMotionElement::clearAnimatedType):
        * svg/SVGAnimateMotionElement.h:
        (SVGAnimateMotionElement):
        * svg/SVGAnimationElement.cpp:
        * svg/SVGAnimationElement.h:
        * svg/animation/SMILTimeContainer.cpp:
        (WebCore::SMILTimeContainer::updateAnimations):
        * svg/animation/SVGSMILElement.cpp:
        (WebCore::SVGSMILElement::reset):
        (WebCore::SVGSMILElement::targetElementWillChange):
        (WebCore::SVGSMILElement::determineActiveState):
        (WebCore::SVGSMILElement::progress):
        * svg/animation/SVGSMILElement.h:
        (SVGSMILElement):
        * svg/properties/SVGAnimatedListPropertyTearOff.h:
            Remove svgAttributeChanged() calls from animationEnded/animValDidChange.
            Callers are now required to notify the target about changes. There are cases
            where we want to call animValDidChange without invoking svgAttributeChanged().
            That is supported now.
        (WebCore::SVGAnimatedListPropertyTearOff::animationEnded):
        (WebCore::SVGAnimatedListPropertyTearOff::animValDidChange):
        * svg/properties/SVGAnimatedProperty.h: Ditto.
        (WebCore::SVGAnimatedProperty::commitChange): Add safety guard.
        * svg/properties/SVGAnimatedPropertyTearOff.h: Ditto.
        (WebCore::SVGAnimatedPropertyTearOff::animationEnded):
        (WebCore::SVGAnimatedPropertyTearOff::animValDidChange):
        * svg/properties/SVGAnimatedStaticPropertyTearOff.h: Ditto.
        (WebCore::SVGAnimatedStaticPropertyTearOff::animationEnded):
        (WebCore::SVGAnimatedStaticPropertyTearOff::animValDidChange):

2012-05-08  Ryuan Choi  <ryuan.choi@samsung.com>

        [EFL][DRT]Do not create ScrollbarEfl when mockScrollbar is enabled.
        https://bugs.webkit.org/show_bug.cgi?id=81315

        Reviewed by Chang Shu.

        ScrollbarEfl creates custom scrollbars as separated layer and they are
        not related to ScrollbarTheme.
        So, DRT/Efl creates custom scrollbars on webview which paints mockScrollbar.

        This patch prevents creating custom scrollbars when mockScrollbar is enabled.

        Because DRT/Efl only renders the webview now, expected results are same
        until Bug 79853 is landed.

        * platform/efl/ScrollbarEfl.cpp:
        (Scrollbar::createNativeScrollbar):

2012-05-08  Timothy Hatcher  <timothy@apple.com>

        Fix the SOFT_LINK_STAGED_FRAMEWORK_OPTIONAL macro so it passes the full path to dlopen.

        dyld only considers libraries in the versioned framework path if their install name
        matches the library that it is attempting to load. The path we were passing to
        dlopen lacked the Versions/A component of the path so dyld did not recognize that
        we wanted it to use the staged version if it is newer.

        <rdar://problem/11406517>

        Reviewed by Mark Rowe.

        * platform/mac/SoftLinking.h: Have SOFT_LINK_STAGED_FRAMEWORK_OPTIONAL take the
        framework version as an argument and use it when constructing the path to dlopen.

2012-05-08  Rafael Brandao  <rafael.lobo@openbossa.org>

        Build fix for Qt Snowleopard Release
        https://bugs.webkit.org/show_bug.cgi?id=85895

        Reviewed by Alexis Menard.

        The enum value JSUint8ClampedArray conflicted with the JSUint8ClampedArray class.
        I've added the 'Type' suffix to the enum value to make their names different.

        No new tests needed.

        * bridge/qt/qt_runtime_qt4.cpp:
        (JSC::Bindings::valueRealType):
        (JSC::Bindings::convertValueToQVariant):

2012-05-08  Shezan Baig  <shezbaig.wk@gmail.com>

        offsetLeft broken within CSS3 columns
        https://bugs.webkit.org/show_bug.cgi?id=34875

        Reviewed by Julien Chaffraix.

        Reimplement offsetLeft and offsetTop in terms of a new method called
        'offsetTopLeft'. The new method starts from a reference point (the
        top-left coordinate of a box or inline) and adjusts this reference
        point for columns as we traverse each parent. Note that the reference
        point needs to be adjusted in both dimensions, even though offsetLeft
        and offsetTop return only one of them.

        A new method called 'offsetForColumns' was added to RenderObject. This
        method is similar to adjustForColumns, except that it returns the
        offset instead of modifying a reference. This method is necessary to
        simplify the implementation of offsetTopLeft.

        Tests: fast/block/positioning/offsetLeft-offsetTop-multicolumn-expected.txt
               fast/block/positioning/offsetLeft-offsetTop-multicolumn.html

        * rendering/RenderBox.h:
        (RenderBox):
        Override offsetLeft and offsetTop.
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::offsetLeft):
        Implemented in terms of RenderBoxModelObject::offsetTopLeft, using
        topLeftLocation as startPoint.
        (WebCore::RenderBox::offsetTop):
        Implemented in terms of RenderBoxModelObject::offsetTopLeft, using
        topLeftLocation as startPoint.
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::offsetTopLeft):
        New method to compute offsetLeft and offsetTop simultaneously, and
        adjusting for columns at each parent.
        (WebCore::RenderBoxModelObject::offsetLeft):
        Reimplemented in terms of offsetTopLeft.
        (WebCore::RenderBoxModelObject::offsetTop):
        Reimplemented in terms of offsetTopLeft.
        * rendering/RenderBoxModelObject.h:
        (RenderBoxModelObject):
        Declare new offsetTopLeft method.
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::offsetLeft):
        Reimplemented in terms of RenderBoxModelObject::offsetTopLeft.
        (WebCore::RenderInline::offsetTop):
        Reimplemented in terms of RenderBoxModelObject::offsetTopLeft.
        * rendering/RenderObject.h:
        (RenderObject):
        (WebCore::RenderObject::offsetForColumns):
        New helper method to simplify implementation of offsetTopLeft.

2012-03-31  Robert Hogan  <robert@webkit.org>

        CSS 2.1 failure: first-letter-nested-004.htm fails
        https://bugs.webkit.org/show_bug.cgi?id=72987

        Reviewed by Eric Seidel.

        When styling first-letter check each sibling and drill into its inlines until we find either (i) a text node 
        that is not all whitespace, or (ii) a line break.

        This makes our rendering of the following tests compatible with FF and Opera. Our current behaviour is also conformant
        since the spec allows UAs to style just one element:
            css2.1/20110323/first-letter-quote-002.htm
            css2.1/20110323/first-letter-quote-003.htm
            css2.1/20110323/first-letter-quote-004.htm
            css2.1/20110323/first-letter-quote-005.htm

        This fixes the following two tests. We now drill into the descendants of an element styled with :first-letter looking
        for text to style:
            css2.1/20110323/first-letter-nested-004.htm
            css2.1/20110323/first-letter-nested-006.htm

        This patch changes our rendering of first-letter-dynamic-001.htm as we now render adjacent quotes in the second line as 
        green. This is consistent with the spec, which allows this behaviour but does not require it. It's the 'right' behaviour
        since it is consistent with the rendering of such quotes in a single element with :first-letter style.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::findLastObjectWithFirstLetterText): Iterate through the child's siblings looking for the last
          object to be styled :first-letter.
        (WebCore::RenderBlock::findLastObjectAfterFirstLetterPunctuation): Style any leading punctuation as first-letter, drill
          down into the child's descendants looking for text if necessary.
        (WebCore::RenderBlock::updateFirstLetter): Refactor to drill into sibling's children looking for inlines
         that should be styled as first-letter.
        (WebCore::RenderBlock::addFirstLetter): Split out from updateFirstLetter so that it can be used when a
         descendant node inside a sibling is found in findLastObjectWithFirstLetterText() needs to be styled as first-letter.
        * rendering/RenderBlock.h:

2012-05-08  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r116402.
        http://trac.webkit.org/changeset/116402
        https://bugs.webkit.org/show_bug.cgi?id=85898

        Caused a 3% regression on Chromium's bloat-http test on Linux
        (Requested by ojan_gardening on #webkit).

        * WebCore.exp.in:
        * bindings/v8/RetainedDOMInfo.cpp:
        * dom/ContainerNode.h:
        * dom/Node.cpp:
        (WebCore::Node::traverseNextNode):
        (WebCore):
        (WebCore::Node::traverseNextSibling):
        * dom/Node.h:
        (Node):

2012-05-08  Hironori Bono  <hbono@chromium.org>

        [Chromium] Fix the position of an RTL resizer
        https://bugs.webkit.org/show_bug.cgi?id=80640

        Reviewed by Tony Chang.

        When rendering an RTL resizer, my r110073 renders it at the same position as the
        one used for rendering a LTR resizer. Unfortunately, this code renders the RTL
        resizer image at an incorrect position on Mac and Linux. This change uses the
        correct formula to calculate the position of an RTL resizer.

        Test: platform/chromium/scrollbars/rtl-resizer-position.html

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::drawPlatformResizerImage):

2012-05-08  Andreas Kling  <kling@webkit.org>

        Element: isURLAttribute() should take a const Attribute&.
        <http://webkit.org/b/85890>

        Reviewed by Anders Carlsson.

        Change isURLAttribute(Attribute*) to isURLAttribute(const Attribute&) to enforce
        the fact that the Attribute can't be null, and shouldn't be mutated, at compile-time.
        Also sprinkle OVERRIDE while we're at it.

        * dom/Element.cpp:
        (WebCore::Element::getURLAttribute):
        (WebCore::Element::getNonEmptyURLAttribute):
        * dom/Element.h:
        (WebCore::Element::isURLAttribute):
        * editing/MarkupAccumulator.cpp:
        (WebCore::MarkupAccumulator::appendQuotedURLAttributeValue):
        (WebCore::MarkupAccumulator::appendAttribute):
        * editing/markup.cpp:
        (WebCore::completeURLs):
        * html/HTMLAnchorElement.cpp:
        (WebCore::HTMLAnchorElement::isURLAttribute):
        * html/HTMLAnchorElement.h:
        * html/HTMLBaseElement.cpp:
        (WebCore::HTMLBaseElement::isURLAttribute):
        * html/HTMLBaseElement.h:
        * html/HTMLBodyElement.cpp:
        (WebCore::HTMLBodyElement::isURLAttribute):
        * html/HTMLBodyElement.h:
        * html/HTMLButtonElement.cpp:
        (WebCore::HTMLButtonElement::isURLAttribute):
        * html/HTMLButtonElement.h:
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::isURLAttribute):
        * html/HTMLElement.h:
        * html/HTMLEmbedElement.cpp:
        (WebCore::HTMLEmbedElement::isURLAttribute):
        * html/HTMLEmbedElement.h:
        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::isURLAttribute):
        * html/HTMLFormElement.h:
        * html/HTMLFrameElementBase.cpp:
        (WebCore::HTMLFrameElementBase::isURLAttribute):
        * html/HTMLFrameElementBase.h:
        (HTMLFrameElementBase):
        * html/HTMLHtmlElement.cpp:
        (WebCore::HTMLHtmlElement::isURLAttribute):
        * html/HTMLHtmlElement.h:
        * html/HTMLImageElement.cpp:
        (WebCore::HTMLImageElement::isURLAttribute):
        * html/HTMLImageElement.h:
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::isURLAttribute):
        * html/HTMLInputElement.h:
        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::isURLAttribute):
        * html/HTMLLinkElement.h:
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::isURLAttribute):
        * html/HTMLMediaElement.h:
        * html/HTMLModElement.cpp:
        (WebCore::HTMLModElement::isURLAttribute):
        * html/HTMLModElement.h:
        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::isURLAttribute):
        * html/HTMLObjectElement.h:
        * html/HTMLParamElement.cpp:
        (WebCore::HTMLParamElement::isURLAttribute):
        * html/HTMLParamElement.h:
        * html/HTMLQuoteElement.cpp:
        (WebCore::HTMLQuoteElement::isURLAttribute):
        * html/HTMLQuoteElement.h:
        * html/HTMLScriptElement.cpp:
        (WebCore::HTMLScriptElement::isURLAttribute):
        * html/HTMLScriptElement.h:
        * html/HTMLSourceElement.cpp:
        (WebCore::HTMLSourceElement::isURLAttribute):
        * html/HTMLSourceElement.h:
        * html/HTMLTableCellElement.cpp:
        (WebCore::HTMLTableCellElement::isURLAttribute):
        * html/HTMLTableCellElement.h:
        * html/HTMLTableElement.cpp:
        (WebCore::HTMLTableElement::isURLAttribute):
        * html/HTMLTableElement.h:
        * html/HTMLTrackElement.cpp:
        (WebCore::HTMLTrackElement::isURLAttribute):
        * html/HTMLTrackElement.h:
        * html/HTMLVideoElement.cpp:
        (WebCore::HTMLVideoElement::isURLAttribute):
        * html/HTMLVideoElement.h:
        * svg/SVGScriptElement.cpp:
        (WebCore::SVGScriptElement::isURLAttribute):
        * svg/SVGScriptElement.h:

2012-05-08  Stephen Chenney  <schenney@chromium.org>

        Shrink ElementAttributeData by factoring out Attr object count.
        https://bugs.webkit.org/show_bug.cgi?id=85825

        Unreviewed build fix.

        * dom/ElementAttributeData.cpp:
        (WebCore::attrListForElement): Was returning false instead of 0 for a pointer value. Now returns 0.

2012-05-08  Andreas Kling  <kling@webkit.org>

        Element: Merge idAttributeChanged() into attributeChanged().
        <http://webkit.org/b/85885>

        Reviewed by Antti Koivisto.

        No new tests, code churn only.

        * dom/Element.h:
        * dom/Element.cpp:
        (WebCore::Element::attributeChanged): There's no need for this to be a standalone function anymore.

2012-05-08  Andreas Kling  <kling@webkit.org>

        Shrink ElementAttributeData by factoring out Attr object count.
        <http://webkit.org/b/85825>

        Reviewed by Antti Koivisto.

        Stop tracking the number of Attr objects that point to a given Element on the
        Element itself and manage this by having a global hashmap of Element => AttrList,
        where AttrList is a vector of (pointers to) the associated Attr objects.

        This shrinks ElementAttributeData by one integer, effectively reducing memory
        consumption by ~530kB when viewing the full HTML5 spec at <http://whatwg.org/c>.

        * dom/ElementAttributeData.h:
        (ElementAttributeData):

            Remove m_attrCount...

        * dom/Node.h:
        (WebCore::Node::hasAttrList):
        (WebCore::Node::setHasAttrList):
        (WebCore::Node::clearHasAttrList):

            ...replacing it with a Node flag that tells us whether there's an Attr
            object map for this Node (only applies to Elements.)

        * dom/ElementAttributeData.cpp:
        (WebCore::attrListMap):
        (WebCore::attrListForElement):
        (WebCore::ensureAttrListForElement):
        (WebCore::removeAttrListForElement):
        (WebCore::ElementAttributeData::attrIfExists):
        (WebCore::ElementAttributeData::ensureAttr):
        (WebCore::ElementAttributeData::setAttr):
        (WebCore::ElementAttributeData::removeAttr):
        (WebCore::ElementAttributeData::detachAttributesFromElement):

            Map Element => per-Element AttrList in a global hash.

2012-05-08  Chris Guan  <chris.guan@torchmobile.com.cn>

        [Blackberry] remove m_isRequestedByPlugin in ResourceRequest
        https://bugs.webkit.org/show_bug.cgi?id=84559

        Reviewed by Antonio Gomes.

        ResourceRequest is a network level abstraction, and it should
        not know anything about web concepts such as plug-ins, and Blackberry
        does not need m_isRequestedByPlugin any longer, So clean up all related
        code.

        Tested on a website of http://edition.cnn.com, a new window should be
        opened only when user has a singe tap gesture on a plugin element.

        * platform/network/blackberry/ResourceRequest.h:
        (WebCore::ResourceRequest::ResourceRequest):
        (ResourceRequest):
        (CrossThreadResourceRequestData):
        * platform/network/blackberry/ResourceRequestBlackBerry.cpp:
        (WebCore::ResourceRequest::doPlatformCopyData):
        (WebCore::ResourceRequest::doPlatformAdopt):

2012-05-03  Alexander Pavlov  <apavlov@chromium.org>

        Extra line-breaks added when copying from source.
        https://bugs.webkit.org/show_bug.cgi?id=85282

        Reviewed by Ryosuke Niwa.

        The code used to replace any \n by \r\n, even the one that had a preceding \r, resulting in \r\r\n.
        This change introduces a check for the preceding \r when replacing \n's.

        Test: platform/win/editing/pasteboard/pasting-crlf-isnt-translated-to-crcrlf-win.html

        * platform/chromium/ClipboardUtilitiesChromium.cpp:
        (WebCore::replaceNewlinesWithWindowsStyleNewlines):
        * platform/win/ClipboardUtilitiesWin.cpp:
        (WebCore::replaceNewlinesWithWindowsStyleNewlines):

2012-05-08  Adam Barth  <abarth@webkit.org>

        OS(ANDROID) JNI AttachCurrentThread take JNIEnv** as a parameter, not void**
        https://bugs.webkit.org/show_bug.cgi?id=85869

        Reviewed by Eric Seidel.

        According to
        http://docs.oracle.com/javase/1.5.0/docs/guide/jni/spec/invocation.html,
        AttachCurrentThread takes a JNIEnv** rather than a void**.  Apparently,
        most implementations actually take a void**.  The OS(ANDROID)
        implementation, however, actually takes an JNIEnv**.  This patch
        introduces a typedef to give each implementation what it desires.

        * bridge/jni/JNIUtility.cpp:
        (JSC::Bindings::getJNIEnv):

2012-05-08  Balazs Kelemen  <kbalazs@webkit.org>

        [Qt] X11 plugins need to be reworked for Qt5+WK1
        https://bugs.webkit.org/show_bug.cgi?id=80691

        Reviewed by Simon Hausmann.

        Implement basic windowless plugin support with Qt5.
        The solution is the same that has been chosen for
        WebKit2. We get the content drawed by the plugin
        from the X server as an image, create a QImage
        from it and paint it to the window surface with QPainter.
        Performance is sufficient for basic video playback.

        No new tests, covered by existing plugin tests.

        * Target.pri:
        * WebCore.pri:
        * platform/qt/QWebPageClient.h:
        (QWebPageClient):
        * plugins/PluginView.h:
        (PluginView):
        * plugins/qt/PluginPackageQt.cpp:
        (WebCore::PluginPackage::isPluginBlacklisted):
        Blacklist plugins that are incompatible with Qt5.
        The only one I know about currently is skypebuttons
        but the list can be extended in the future.
        (WebCore):
        (WebCore::PluginPackage::load):
        * plugins/qt/PluginViewQt.cpp:
        (X11Environment):
        (WebCore):
        (WebCore::x11Display):
        (WebCore::x11Screen):
        (WebCore::rootWindowID):
        (WebCore::displayDepth):
        (WebCore::syncX):
        (WebCore::PluginView::platformPageClient): Added a safe
        convenience getter for the QWebpageClient.
        (WebCore::PluginView::updatePluginWidget):
        (WebCore::PluginView::setFocus):
        (WebCore::setupGraphicsExposeEvent):
        (WebCore::PluginView::paintUsingXPixmap):
        (WebCore::setSharedXEventFields):
        (WebCore::PluginView::initXEvent):
        (WebCore::PluginView::setXKeyEventSpecificFields):
        (WebCore::setXButtonEventSpecificFields):
        (WebCore::setXMotionEventSpecificFields):
        (WebCore::setXCrossingEventSpecificFields):
        (WebCore::PluginView::setNPWindowIfNeeded):
        (WebCore::PluginView::setParentVisible):
        (WebCore::PluginView::platformGetValue):
        (WebCore::PluginView::invalidateRect):
        (WebCore::getVisualAndColormap):
        Refactored this function to make it more clear
        what does it actually do.
        (WebCore::PluginView::platformStart):
        (WebCore::PluginView::platformDestroy):

2012-05-07  Antti Koivisto  <antti@apple.com>

        Inline Node::traverseNextNode
        https://bugs.webkit.org/show_bug.cgi?id=85844

        Reviewed by Ryosuke Niwa.

        Inline traverseNextNode and traverseNextSibling to reduce entry/exit overhead and allow better code generation
        for many hot loops. Also added separate versions of stayWithin and unscoped cases (the function is
        so simple that this seemed like the cleanest way to do it, the most reliable too) and used UNLIKELY for the 
        end-of-traversal conditions.
        
        The traversal function can show up to ~1% in normal page loading profiles.
        
        run-perf-tests seems to think this is a progression in some subtests though bots will tell for certain.

        * WebCore.exp.in:
        * dom/ContainerNode.h:
        
            Following the existing pattern, function bodies go to ContainerNode.h so they can call parentNode().
            (which returns ContainerNode, not Node).

        (WebCore::Node::traverseNextNode):
        (WebCore):
        (WebCore::Node::traverseNextSibling):
        * dom/Node.cpp:
        (WebCore):
        * dom/Node.h:
        (Node):

2012-05-05  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: make JavaScriptSourceFrame use breakpoint manager's breakpoints store.
        https://bugs.webkit.org/show_bug.cgi?id=85714

        Reviewed by Yury Semikhatsky.

        It is currently using its own copy of breakpoints which is not necessary.

        * inspector/front-end/BreakpointManager.js:
        (WebInspector.BreakpointManager):
        (WebInspector.BreakpointManager.prototype.restoreBreakpoints):
        (WebInspector.BreakpointManager.prototype.setBreakpoint):
        (WebInspector.BreakpointManager.prototype._innerSetBreakpoint):
        (WebInspector.BreakpointManager.prototype.findBreakpoint):
        (WebInspector.BreakpointManager.prototype.reset):
        (WebInspector.BreakpointManager.prototype._debuggerReset):
        (WebInspector.BreakpointManager.prototype._breakpointResolved):
        (WebInspector.BreakpointManager.prototype._uiLocationAdded):
        (WebInspector.BreakpointManager.prototype._uiLocationRemoved):
        (WebInspector.BreakpointManager.Breakpoint.prototype._breakpointStorageId):
        (WebInspector.BreakpointManager.Storage.prototype._restoreBreakpoints):
        (set WebInspector.BreakpointManager.Storage.Item):
        * inspector/front-end/JavaScriptSource.js:
        (WebInspector.JavaScriptSource.prototype.consoleMessagesCleared):
        (WebInspector.JavaScriptSource.prototype.breakpointStorageId):
        * inspector/front-end/JavaScriptSourceFrame.js:
        (WebInspector.JavaScriptSourceFrame):
        (WebInspector.JavaScriptSourceFrame.prototype._onContentChanged):
        (WebInspector.JavaScriptSourceFrame.prototype.populateLineGutterContextMenu):
        (WebInspector.JavaScriptSourceFrame.prototype.beforeTextChanged):
        (WebInspector.JavaScriptSourceFrame.prototype._onMouseDown):
        (WebInspector.JavaScriptSourceFrame.prototype._breakpointAdded):
        (WebInspector.JavaScriptSourceFrame.prototype._breakpointRemoved):
        (WebInspector.JavaScriptSourceFrame.prototype.onTextViewerContentLoaded):
        (WebInspector.JavaScriptSourceFrame.prototype._continueToLine):
        (WebInspector.JavaScriptSourceFrame.prototype._updateBreakpointsAfterLiveEdit):

2012-05-07  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: do not create locations for resolved provisional breakpoints
        https://bugs.webkit.org/show_bug.cgi?id=85716

        Reviewed by Yury Semikhatsky.

        Marked provisional breakpoints as such.

        * inspector/front-end/BreakpointManager.js:
        (WebInspector.BreakpointManager.prototype._debuggerReset):
        (WebInspector.BreakpointManager.prototype._breakpointResolved):

2012-05-07  Simon Fraser  <simon.fraser@apple.com>

        Compositing layers with transformed children not large enough to show contents
        https://bugs.webkit.org/show_bug.cgi?id=85855

        Reviewed by Dan Bernstein.
        
        r114518 added a code path to RenderLayer::calculateLayerBounds() which
        does an early return if the layer has clipping. However, this code
        path omitted to take local transforms into account.
        
        Fix is to handle transforms as we do in the non-clipped case.

        Test: compositing/geometry/bounds-clipped-composited-child.html

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::calculateLayerBounds):

2012-05-07  Scott Graham  <scottmg@chromium.org>

        Fix signed/unsigned mismatch
        https://bugs.webkit.org/show_bug.cgi?id=85845

        Make literal in assert be unsigned to match comparison on LHS. Avoids
        warning on Windows.

        Reviewed by Eric Seidel.

        No new tests. No intended functionality change.

        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::splitColumn):

2012-05-07  Emil A Eklund  <eae@chromium.org>

        Fix performance regression for floats caused by LayoutUnit change
        https://bugs.webkit.org/show_bug.cgi?id=85834

        Reviewed by Eric Seidel.

        Fix performance regression caused by r116009 by disabling the use of
        64bit math in FractionalLayoutUnit, simplifying the pixelSnappedMaxX/Y
        math, inlining a couple of methods and replacing the literal 0 (zero)
        with ZERO_LAYOUT_UNIT.

        No new tests, no change in functionality.

        * platform/FractionalLayoutUnit.h:
        (WebCore::boundedMultiply):
        (WebCore::operator*):
        (WebCore::operator/):
        Disable the use of 64bit (long long) math in the case where the fraction
        is set to 1.
        
        * platform/graphics/FractionalLayoutRect.h:
        (WebCore::FractionalLayoutRect::pixelSnappedMaxX):
        (WebCore::FractionalLayoutRect::pixelSnappedMaxY):
        Simplify the pixel snapping logic for maxX/maxY.
        
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::isSelfCollapsingBlock):
        (WebCore::RenderBlock::layoutBlock):
        (WebCore::RenderBlock::computeOverflow):
        (WebCore::RenderBlock::clearFloatsIfNeeded):
        (WebCore::RenderBlock::paintChildren):
        (WebCore::RenderBlock::blockSelectionGap):
        (WebCore::RenderBlock::logicalLeftSelectionGap):
        (WebCore::RenderBlock::logicalRightSelectionGap):
        (WebCore::RenderBlock::computeLogicalLocationForFloat):
        (WebCore::RenderBlock::lowestFloatLogicalBottom):
        (WebCore::RenderBlock::getClearDelta):
        (WebCore::RenderBlock::computeBlockPreferredLogicalWidths):
        (WebCore::RenderBlock::addFocusRingRects):
        (WebCore::RenderBlock::adjustLinePositionForPagination):
        * rendering/RenderBlock.h:
        (WebCore::RenderBlock::availableLogicalWidthForLine):
        (WebCore::RenderBlock::availableLogicalWidthForContent):
        (WebCore::RenderBlock::FloatingObject::x):
        (WebCore::RenderBlock::FloatingObject::maxX):
        (WebCore::RenderBlock::FloatingObject::y):
        (WebCore::RenderBlock::FloatingObject::maxY):
        (WebCore::RenderBlock::FloatingObject::width):
        (WebCore::RenderBlock::FloatingObject::height):
        (FloatingObject):
        (WebCore::RenderBlock::FloatingObject::pixelSnappedX):
        (WebCore::RenderBlock::FloatingObject::pixelSnappedMaxX):
        (WebCore::RenderBlock::FloatingObject::pixelSnappedY):
        (WebCore::RenderBlock::FloatingObject::pixelSnappedMaxY):
        (WebCore::RenderBlock::FloatingObject::pixelSnappedWidth):
        (WebCore::RenderBlock::FloatingObject::pixelSnappedHeight):
        (WebCore::RenderBlock::RenderBlockRareData::positiveMarginBeforeDefault):
        (WebCore::RenderBlock::RenderBlockRareData::negativeMarginBeforeDefault):
        (WebCore::RenderBlock::RenderBlockRareData::positiveMarginAfterDefault):
        (WebCore::RenderBlock::RenderBlockRareData::negativeMarginAfterDefault):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::accumulateRelativePositionOffsets):
        (WebCore::RenderBoxModelObject::offsetLeft):
        (WebCore::RenderBoxModelObject::offsetTop):
        (WebCore::RenderBoxModelObject::computedCSSPaddingTop):
        (WebCore::RenderBoxModelObject::computedCSSPaddingBottom):
        (WebCore::RenderBoxModelObject::computedCSSPaddingLeft):
        (WebCore::RenderBoxModelObject::computedCSSPaddingRight):
        (WebCore::RenderBoxModelObject::computedCSSPaddingBefore):
        (WebCore::RenderBoxModelObject::computedCSSPaddingAfter):
        (WebCore::RenderBoxModelObject::computedCSSPaddingStart):
        (WebCore::RenderBoxModelObject::computedCSSPaddingEnd):

2012-05-07  Dongwoo Im  <dw.im@samsung.com>

        width/height attributes of input element cannot be accessed by JavaScript.
        https://bugs.webkit.org/show_bug.cgi?id=70304

        Reviewed by Darin Adler.

        If the type of input element is image button, width/height attributes should be supported.
        These attributes are defined in HTML5 spec.
        http://www.w3.org/TR/html5/the-map-element.html#attr-dim-width

        Tests: fast/forms/input-width-height-attributes-without-renderer-loaded-image.html
               fast/forms/input-width-height-attributes-without-renderer-not-loaded-image.html
               fast/forms/input-width-height-attributes-without-renderer.html
               fast/forms/input-width-height-attributes.html

        * html/HTMLInputElement.cpp: Add setter/getter functions to query/set width/height of input element.
        (WebCore):
        (WebCore::HTMLInputElement::height): Gets height of input element.
        (WebCore::HTMLInputElement::width): Gets width of input element.
        (WebCore::HTMLInputElement::setHeight): Sets height of input element.
        (WebCore::HTMLInputElement::setWidth): Sets width of input element.
        * html/HTMLInputElement.h: Add public prototype.
        (HTMLInputElement):
        * html/HTMLInputElement.idl: Add width/height attributes.
        * html/ImageInputType.cpp: Add getter functions if the element is an image button.
        (WebCore):
        (WebCore::ImageInputType::height): Gets height of input element.
        (WebCore::ImageInputType::width): Gets width of input element.
        * html/ImageInputType.h: Add prototype.
        (ImageInputType):
        * html/InputType.cpp: Add getter functions.
        (WebCore::InputType::height): Returns zero.
        (WebCore):
        (WebCore::InputType::width): Returns zero.
        * html/InputType.h: Add prototype.
        (InputType):

2012-05-07  Kinuko Yasuda  <kinuko@chromium.org>

        Support cross-filesystem operations in FileSystem API
        https://bugs.webkit.org/show_bug.cgi?id=84135

        Reviewed by David Levin.

        Currently we pass Entry's fullPath to AsyncFileSystem layer where
        we convert the given path to filesystem URL which includes origin and
        filesystem type information, but in that way we cannot handle
        cross-filesystem operations (e.g. cross-filesystem copy and move)
        well since we end up with always attaching the source filesystem's
        origin and type information for argument paths.

        This patch does:
        - change AsyncFileSystem's operation methods not to take entry paths
          but complete filesystem URLs.
        - move type and rootURL information from AsyncFileSystem instance into
          DOMFileSystemBase instance (platform layer to Modules/filesystem layer)
        - move filesystem-type related code in AsyncFileSystemChromium.cpp into
          DOMFileSystemChromium.cpp, which implements chromioum-specific
          DOMFileSystem code.
        - move platform/FileSystemType.h into Modules/filesystem/FileSystemType.h.
        - adding FileSystemType.h entry to build files (e.g. WebCore.gypi, WebCore.xcodeproj etc)

        Test: fast/filesystem/cross-filesystem-op.html

        * Modules/filesystem/DOMFileSystem.cpp:
        (WebCore::DOMFileSystem::create):
        (WebCore::DOMFileSystem::DOMFileSystem):
        (WebCore::DOMFileSystem::createWriter):
        (WebCore::DOMFileSystem::createFile):
        * Modules/filesystem/DOMFileSystem.h:
        * Modules/filesystem/DOMFileSystemBase.cpp:
        (WebCore::DOMFileSystemBase::DOMFileSystemBase):
        (WebCore::DOMFileSystemBase::createFileSystemURL): Added as an internal
        implementation of Entry.toURL().
        (WebCore::DOMFileSystemBase::getMetadata):
        (WebCore::verifyAndGetDestinationPathForCopyOrMove):
        (WebCore::DOMFileSystemBase::move):
        (WebCore::DOMFileSystemBase::copy):
        (WebCore::DOMFileSystemBase::remove):
        (WebCore::DOMFileSystemBase::removeRecursively):
        (WebCore::DOMFileSystemBase::getParent):
        (WebCore::DOMFileSystemBase::getFile):
        (WebCore::DOMFileSystemBase::getDirectory):
        (WebCore::DOMFileSystemBase::readDirectory):
        * Modules/filesystem/DOMFileSystemBase.h: Changed to make each
        DOMFileSystemBase instance have filesystem type and rootURL (they were
        held by AsyncFileSystem previously)
        (WebCore::DOMFileSystemBase::create): Changed to take additional parameters.
        (WebCore::DOMFileSystemBase::type): Added.(Moved from AsyncFileSystem::type)
        (WebCore::DOMFileSystemBase::rootURL): Added.(Moved from AsyncFileSystem::rootURL).
        * Modules/filesystem/DOMFileSystemSync.cpp:
        (WebCore::DOMFileSystemSync::create):
        (WebCore::DOMFileSystemSync::DOMFileSystemSync):
        (WebCore::DOMFileSystemSync::createFile):
        (WebCore::DOMFileSystemSync::createWriter):
        * Modules/filesystem/DOMFileSystemSync.h:
        (WebCore::DOMFileSystemSync::create):
        * Modules/filesystem/DOMWindowFileSystem.cpp:
        (WebCore::DOMWindowFileSystem::webkitRequestFileSystem):
        (WebCore::DOMWindowFileSystem::webkitResolveLocalFileSystemURL):
        * Modules/filesystem/EntryBase.cpp:
        (WebCore::EntryBase::toURL):
        * Modules/filesystem/FileSystemCallbacks.cpp:
        (WebCore::FileSystemCallbacks::create):
        (WebCore::FileSystemCallbacks::FileSystemCallbacks):
        (WebCore::FileSystemCallbacks::didOpenFileSystem):
        (WebCore::ResolveURICallbacks::create):
        (WebCore::ResolveURICallbacks::ResolveURICallbacks):
        (WebCore::ResolveURICallbacks::didOpenFileSystem):
        * Modules/filesystem/FileSystemCallbacks.h:
        (FileSystemCallbacks):
        (ResolveURICallbacks):
        * Modules/filesystem/FileSystemType.h: Renamed from Source/WebCore/platform/FileSystemType.h.
        * Modules/filesystem/LocalFileSystem.cpp:
        (WebCore::openFileSystem):
        (WebCore::LocalFileSystem::readFileSystem):
        (WebCore::LocalFileSystem::requestFileSystem):
        * Modules/filesystem/LocalFileSystem.h:
        * Modules/filesystem/WorkerContextFileSystem.cpp:
        (WebCore::WorkerContextFileSystem::webkitRequestFileSystem):
        (WebCore::WorkerContextFileSystem::webkitRequestFileSystemSync):
        (WebCore::WorkerContextFileSystem::webkitResolveLocalFileSystemURL):
        (WebCore::WorkerContextFileSystem::webkitResolveLocalFileSystemSyncURL):
        * Modules/filesystem/chromium/DOMFileSystemChromium.cpp: Added for chromium-specific
        implementation. Almost all of the code is moved from AsyncFileSystemChromium.
        (WebCore::DOMFileSystemBase::isValidType):
        (WebCore::DOMFileSystemBase::crackFileSystemURL):
        (WebCore::DOMFileSystemBase::supportsToURL):
        (WebCore::DOMFileSystemBase::createFileSystemURL):
        (WebCore::DOMFileSystemChromium::createIsolatedFileSystem):
        * Modules/filesystem/chromium/DOMFileSystemChromium.h: Added.
        * Modules/filesystem/chromium/DataTransferItemFileSystemChromium.cpp:
        (WebCore::DataTransferItemFileSystem::webkitGetAsEntry):
        * Modules/filesystem/chromium/DraggedIsolatedFileSystem.cpp:
        (WebCore::DraggedIsolatedFileSystem::getDOMFileSystem):
        * WebCore.gypi:
        * platform/AsyncFileSystem.cpp:
        (WebCore::AsyncFileSystem::openFileSystem):
        * platform/AsyncFileSystem.h:
        (AsyncFileSystem):
        (WebCore::AsyncFileSystem::AsyncFileSystem):
        * platform/AsyncFileSystemCallbacks.h:
        (WebCore::AsyncFileSystemCallbacks::didOpenFileSystem):
        * platform/blackberry/AsyncFileSystemBlackBerry.cpp:
        (WebCore::AsyncFileSystem::create):
        (WebCore::AsyncFileSystem::openFileSystem):
        (WebCore::AsyncFileSystemBlackBerry::AsyncFileSystemBlackBerry):
        (WebCore::AsyncFileSystemBlackBerry::move):
        (WebCore::AsyncFileSystemBlackBerry::copy):
        (WebCore::AsyncFileSystemBlackBerry::remove):
        (WebCore::AsyncFileSystemBlackBerry::removeRecursively):
        (WebCore::AsyncFileSystemBlackBerry::readMetadata):
        (WebCore::AsyncFileSystemBlackBerry::createFile):
        (WebCore::AsyncFileSystemBlackBerry::createDirectory):
        (WebCore::AsyncFileSystemBlackBerry::fileExists):
        (WebCore::AsyncFileSystemBlackBerry::directoryExists):
        (WebCore::AsyncFileSystemBlackBerry::readDirectory):
        (WebCore::AsyncFileSystemBlackBerry::createWriter):
        (WebCore::AsyncFileSystemBlackBerry::createSnapshotFileAndReadMetadata):
        * platform/blackberry/AsyncFileSystemBlackBerry.h:
        * platform/chromium/PlatformSupport.h:
        * platform/gtk/AsyncFileSystemGtk.cpp:
        (WebCore::AsyncFileSystem::create):
        (WebCore::AsyncFileSystem::openFileSystem):
        (WebCore::AsyncFileSystemGtk::AsyncFileSystemGtk):
        (WebCore::AsyncFileSystemGtk::move):
        (WebCore::AsyncFileSystemGtk::copy):
        (WebCore::AsyncFileSystemGtk::remove):
        (WebCore::AsyncFileSystemGtk::removeRecursively):
        (WebCore::AsyncFileSystemGtk::readMetadata):
        (WebCore::AsyncFileSystemGtk::createFile):
        (WebCore::AsyncFileSystemGtk::createDirectory):
        (WebCore::AsyncFileSystemGtk::fileExists):
        (WebCore::AsyncFileSystemGtk::directoryExists):
        (WebCore::AsyncFileSystemGtk::readDirectory):
        (WebCore::AsyncFileSystemGtk::createWriter):
        * platform/gtk/AsyncFileSystemGtk.h:

        * GNUmakefile.list.am: Added FileSystemType.h.
        * WebCore.gypi: Added FileSystemType.h.
        * WebCore.vcproj/WebCore.vcproj: Added FileSystemType.h.
        * WebCore.xcodeproj/project.pbxproj: Added FileSystemType.h.

2012-05-07  Adam Barth  <abarth@webkit.org>

        [Chromium] Android wishes to use an empty implementation if AXObjectCache
        https://bugs.webkit.org/show_bug.cgi?id=85842

        Reviewed by Eric Seidel.

        Add proper HAVE(ACCESSIBILITY) ifdefs so that Chromium builds without
        accessibility.

        * accessibility/chromium/AXObjectCacheChromium.cpp:
        * accessibility/chromium/AccessibilityObjectChromium.cpp:

2012-05-07  Greg Billock  <gbillock@google.com>

        [Web Intents] Flagged-off implementation of an intent tag for registration.
        https://bugs.webkit.org/show_bug.cgi?id=73039

        Reviewed by Adam Barth.

        The intent tag is a declarative way for pages to register that they
        accept delivery of web intent invocations of particular types. See the
        spec at http://dvcs.w3.org/hg/web-intents/raw-file/tip/spec/Overview.html

        After discussion on the WhatWG list (see thread at
        http://lists.whatwg.org/pipermail/whatwg-whatwg.org/2012-April/035301.html)
        the current plan is to combine declarative registration of Web
        Intents and protocol/content handlers with this tag. Alternatives
        considered were the meta and link tags.

        * WebCore.gypi:
        * html/HTMLAttributeNames.in:
        * html/HTMLElementsAllInOne.cpp:
        * html/HTMLIntentElement.cpp: Added.
        (WebCore::HTMLIntentElement::HTMLIntentElement):
        (WebCore::HTMLIntentElement::create):
        (WebCore::HTMLIntentElement::insertedIntoDocument):
        * html/HTMLIntentElement.h: Added.
        * html/HTMLIntentElement.idl: Added.
        * html/HTMLTagNames.in:
        * loader/FrameLoaderClient.h:
        (WebCore::FrameLoaderClient::registerIntentService):
        * page/DOMWindow.idl:

2012-05-07  Dana Jansens  <danakj@chromium.org>

        Region::intersects() and Region::contains() are slow due to copy overhead
        https://bugs.webkit.org/show_bug.cgi?id=81076

        Reviewed by Anders Carlsson.

        Testing contains() and intersects() requires a copy which ends up
        invoking a malloc on sufficiently complicated web pages, and slows down
        the test unnecessarily. These methods can be done by iterating over the
        Region::Shape values rather than making a copy of the entire region and
        manipulating it.

        This uses Region::Shape::compareShapes() to walk the query regions and
        compute the result of the intersects or contains tests without making a
        copy.

        This change improves the performance of the Region overlap testing for
        composited layers, and allows for testing contains() before unite() to
        avoid unnecessary copies of the Region when inserting into complex
        Regions. With a layout test that has 225 composited layers, and tests
        Region.intersects() for 1000 layers above them, this change decreases
        the running time of the test by 1.2% by avoiding a copy of the 225
        rects each time.

        Unit test: RegionTest.intersectsRegion
                   RegionTest.containsRegion

        * platform/graphics/Region.cpp:
        (WebCore::Region::contains):
        (WebCore::Region::intersects):
        (WebCore):
        (WebCore::Region::Shape::compareShapes):
        (Region::Shape::CompareContainsOperation):
        (WebCore::Region::Shape::CompareContainsOperation::aOutsideB):
        (WebCore::Region::Shape::CompareContainsOperation::bOutsideA):
        (WebCore::Region::Shape::CompareContainsOperation::aOverlapsB):
        (Region::Shape::CompareIntersectsOperation):
        (WebCore::Region::Shape::CompareIntersectsOperation::aOutsideB):
        (WebCore::Region::Shape::CompareIntersectsOperation::bOutsideA):
        (WebCore::Region::Shape::CompareIntersectsOperation::aOverlapsB):
        * platform/graphics/Region.h:
        (Shape):

2012-05-07  David Tseng  <dtseng@google.com>

        Correct logical error in accessibilityIsIgnored.
        https://bugs.webkit.org/show_bug.cgi?id=85828

        Reviewed by Chris Fleizach.

        Covered by existing tests.

        * accessibility/AccessibilityMenuListOption.cpp:
        (WebCore::AccessibilityMenuListOption::accessibilityIsIgnored):
        * accessibility/AccessibilityMenuListPopup.cpp:
        (WebCore::AccessibilityMenuListPopup::accessibilityIsIgnored):

2012-05-04  Zhenyao Mo  <zmo@google.com>

        vertexAttribPointer needs to reject large negative offsets
        https://bugs.webkit.org/show_bug.cgi?id=85117

        Reviewed by Kenneth Russell.

        * html/canvas/WebGLRenderingContext.cpp: Use long long for GLsizeiptr and GLintptr
        (WebCore):
        (WebCore::WebGLRenderingContext::bufferData):
        (WebCore::WebGLRenderingContext::bufferSubData):
        (WebCore::WebGLRenderingContext::drawElements):
        (WebCore::WebGLRenderingContext::getVertexAttribOffset):
        (WebCore::WebGLRenderingContext::vertexAttribPointer):
        * html/canvas/WebGLRenderingContext.h: Ditto
        (WebGLRenderingContext):
        * html/canvas/WebGLRenderingContext.idl: Ditto

2012-05-07  Pravin D  <pravind.2k4@gmail.com>

        :first-line text-decorations are not rendered
        https://bugs.webkit.org/show_bug.cgi?id=6047

        Text-decorations are applied during paint phase. The style was not being properly selected in case of
        first line box. The patch fixes this. 

        Reviewed by Eric Seidel.

        Tests: fast/css/first-line-text-decoration-inherited-from-parent.html
               fast/css/first-line-text-decoration.html

        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::paintDecoration):
        Inform the decoration color retriever if this box is part of the first line box or not.

        * rendering/RenderObject.cpp:
        (WebCore::decorationColor):
        Changed the argument from RenderObject* to RenderStyle*. As this function is just a helper to getTextDecorationColors
        as used RenderObject solely to retrieve the corresponding RenderStyle, which(RenderStyle*) was already available with the latter function. 

        (WebCore::RenderObject::getTextDecorationColors):
        Take a new variable to check if first line style or the regular style has to be used.
        Sends RenderStyle* as an argument to decorationColor(). 

        * rendering/RenderObject.h:
        (RenderObject):

2012-05-07  Julien Chaffraix  <jchaffraix@webkit.org>

        Refactor windowClipRectForLayer to remove the explicit RenderLayer dependency
        https://bugs.webkit.org/show_bug.cgi?id=84090

        Reviewed by David Hyatt.

        No observable change in behavior.

        The function name was ambiguous as it was not a general purpose function but was
        working directly on HTMLFrameOwnerElement. The rename makes this more obvious as
        well as removes the explicit dependency on RenderLayer.

        One of the slight change of this refactoring is that we now always null-check the
        HTMLFrameOwnerElement's renderer as part windowClipRectForFrameOwner as I don't see
        any evidence for the other code paths not to hit that. Also we may recur more on our
        frame tree if we have no layer as we now call windowClipRect() in this case.

        * page/FrameView.h:
        (FrameView):
        * plugins/PluginView.cpp:
        (WebCore::PluginView::windowClipRect):
        * WebCore.exp.in:
        * WebCore.order:
        * page/FrameView.cpp:
        (WebCore::FrameView::windowClipRect):
        Updated after windowClipRectForLayer name and signature change.

        (WebCore::FrameView::windowClipRectForFrameOwner):
        This function now takes the HTMLFrameOwnerElement directly.

        * plugins/PluginView.cpp:
        (WebCore::PluginView::PluginView):
        (WebCore::PluginView::create):
        * plugins/PluginView.h:
        (PluginView):
        Updated |m_element| to be an HTMLPlugInElement as this was what was
        passed by every caller. This makes the conversion to HTMLFrameOwnerElement
        possible.

2012-05-07  Enrica Casucci  <enrica@apple.com>

        REGRESSION (r101575): Chinese input is broken when composing mail in iCloud using Safari.
        https://bugs.webkit.org/show_bug.cgi?id=85840
        <rdar://problem/11115520> 
        
        Reviewed by Alexey Proskuryakov.

        The revision that broke this, introduced a way to sanitize the markup when deleting a range selection.
        iCloud listens for DOM modification events and clears the selection, altering the input method state.
        The fix consists in adding a paramenter to DeleteSelectionCommand to control when we sanitize the
        markup.
        
        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::deleteSelection):
        * editing/CompositeEditCommand.h:
        * editing/DeleteSelectionCommand.cpp:
        (WebCore::DeleteSelectionCommand::DeleteSelectionCommand):
        (WebCore::DeleteSelectionCommand::doApply):
        * editing/DeleteSelectionCommand.h:
        (WebCore::DeleteSelectionCommand::create):
        * editing/InsertTextCommand.cpp:
        (WebCore::InsertTextCommand::doApply):

2012-05-07  Andy Estes  <aestes@apple.com>

        ENABLE_IFRAME_SEAMLESS should be part of FEATURE_DEFINES.

        * Configurations/FeatureDefines.xcconfig:

2012-05-06  Martin Robinson  <mrobinson@igalia.com>

        [Cairo] Implement ImageBuffer::copyImage for BackingStoreCopy == DontCopyBackingStore
        https://bugs.webkit.org/show_bug.cgi?id=85728

        Reviewed by Alejandro G. Castro.

        No new tests. This should not change functionality, only increase performance.

        * platform/graphics/cairo/ImageBufferCairo.cpp:
        (WebCore::ImageBuffer::copyImage): Add an implementation that knows how to avoid copying the backing store.
        (WebCore::ImageBuffer::draw): Use the copyImage constructor now that it knows how to
        avoid copying the backing store.
        (WebCore::ImageBuffer::drawPattern): Ditto.
        * platform/graphics/texmap/TextureMapperLayer.cpp:
        (WebCore::TextureMapperLayer::updateBackingStore): Use DontCopyBackingStore for Cairo
        as well.

2012-05-07  Noel Gordon  <noel.gordon@gmail.com>

        [CG] Separate image encoding from dataURL construction
        https://bugs.webkit.org/show_bug.cgi?id=85782

        Reviewed by Kenneth Russell.

        Remove the implicit assumption that a dataURL is the only desired output format
        of the image encoding phase.

        No new tests. No behavioral change. Covered by canvas 2d and 3d tests:
            canvas/philip/tests/*toDataURL*.html
            fast/canvas/webgl/premultiplyalpha-test.html

        * platform/graphics/cg/ImageBufferCG.cpp:
        (WebCore::CGImageEncodeToData): Image encoding helper: encode the image using the
        uti-defined encoder (PNG/JPEG/etc) and output to the given CFMutableDataRef data.
        (WebCore):
        (WebCore::CGImageToDataURL): Refactor to use CGImageEncodeToData().

2012-05-07  Scott Graham  <scottmg@chromium.org>

        [Chromium] Suppress switch-without-cases warning
        https://bugs.webkit.org/show_bug.cgi?id=85830

        Warnings like 
        ...\webkit\CSSGrammar.cpp(2075) : warning C4065: switch statement contains 'default' but no 'case' labels
        are generated. These are bogus, so just suppress them in the build
        settings.

        Reviewed by Dirk Pranke

        No new tests, no intended functionlity change. Just changing compiler
        settings.

        * WebCore.gyp/WebCore.gyp:

2012-05-07  Adrienne Walker  <enne@google.com>

        [chromium] Allow for asymmetric tile sizes on composited tiled layers
        https://bugs.webkit.org/show_bug.cgi?id=85687

        Reviewed by James Robinson.

        Update TiledLayerChromium/CCLayerTilingData/TilingData to allow for a
        the width and height of tile sizes to differ. Modify TilingData to use
        IntSize everywhere for these width/height pairs.

        Also, remove some unused functions from TilingData.

        Test: TilingDataTest.*

        * platform/graphics/chromium/TiledLayerChromium.cpp:
        (WebCore::TiledLayerChromium::TiledLayerChromium):
        (WebCore::TiledLayerChromium::updateTileSizeAndTilingOption):
        * platform/graphics/chromium/cc/CCLayerTilingData.cpp:
        (WebCore::CCLayerTilingData::CCLayerTilingData):
        (WebCore::CCLayerTilingData::setTileSize):
        (WebCore):
        (WebCore::CCLayerTilingData::tileSize):
        (WebCore::CCLayerTilingData::operator=):
        (WebCore::CCLayerTilingData::tileRect):
        (WebCore::CCLayerTilingData::setBounds):
        (WebCore::CCLayerTilingData::bounds):
        * platform/graphics/chromium/cc/CCLayerTilingData.h:
        (CCLayerTilingData):
        * platform/graphics/gpu/Texture.cpp:
        (WebCore::Texture::Texture):
        (WebCore::Texture::create):
        (WebCore::Texture::load):
        (WebCore::Texture::updateSubRect):
        * platform/graphics/gpu/TilingData.cpp:
        (WebCore::TilingData::TilingData):
        (WebCore::TilingData::setTotalSize):
        (WebCore::TilingData::setMaxTextureSize):
        (WebCore::TilingData::tileXIndexFromSrcCoord):
        (WebCore::TilingData::tileYIndexFromSrcCoord):
        (WebCore::TilingData::tileBounds):
        (WebCore::TilingData::tileSizeX):
        (WebCore::TilingData::tileSizeY):
        (WebCore::TilingData::recomputeNumTiles):
        * platform/graphics/gpu/TilingData.h:
        (TilingData):
        (WebCore::TilingData::totalSize):
        (WebCore::TilingData::maxTextureSize):
        (WebCore::TilingData::TilingData):

2012-05-07  Raymond Toy  <rtoy@google.com>

        ConvolverNode setBuffer() should not ASSERT on null buffer
        https://bugs.webkit.org/show_bug.cgi?id=85653

        Reviewed by Chris Rogers.

        Test: webaudio/convolver-setBuffer-null.html

        * Modules/webaudio/ConvolverNode.cpp:
        (WebCore::ConvolverNode::setBuffer):  Don't ASSERT on null buffer.

2012-05-07  Ken Buchanan  <kenrb@chromium.org>

        Crash due to positioned object list not being cleared during block flow split
        https://bugs.webkit.org/show_bug.cgi?id=85074

        Reviewed by Abhishek Arya.

        When an element is being split due to a column span element being
        inserted, any of its ancestors that are underneath the column
        containing block also get split. If an ancestor has an object in
        its positioned object list from a previous layout, then the list
        will have to be cleared because the positioned object could have moved
        to be under the continuation. This patch causes the list to be
        cleared.

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

2012-05-07  Eric Seidel  <eric@webkit.org>

        Add ENABLE_IFRAME_SEAMLESS so Apple can turn off SEAMLESS if needed
        https://bugs.webkit.org/show_bug.cgi?id=85822

        Reviewed by Adam Barth.

        * Configurations/FeatureDefines.xcconfig:
        * dom/Document.cpp:
        (WebCore::Document::shouldDisplaySeamlesslyWithParent):

2012-05-07  Shezan Baig  <shezbaig.wk@gmail.com>

        Selection Background Color Error
        https://bugs.webkit.org/show_bug.cgi?id=80382

        Reviewed by David Hyatt.

        Determine the text colors and selection colors before painting the
        background behind the text.  This is because when determining whether
        to invert the selection background, the selection text color should be
        used instead of the regular text color.  With this patch, the selection
        text color is passed to 'paintSelection' so that the selection
        background can be compared against it, instead of comparing against the
        CSSPropertyColor value.

        Test: fast/backgrounds/selection-background-color.html

        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::paint):
            Pass selection text color to paintSelection

        (WebCore::InlineTextBox::paintSelection):
            Use the selection text color instead of CSSPropertyColor

        * rendering/InlineTextBox.h:
        (InlineTextBox):
            Adjust signature of paintSelection to accept text color

2012-05-07  David Reveman  <reveman@chromium.org>

        [Chromium] Use GL_CHROMIUM_command_buffer_query to throttle texture uploads.
        https://bugs.webkit.org/show_bug.cgi?id=81004

        Reviewed by Adrienne Walker.

        Add ThrottledTextureUploader class that uses GL_CHROMIUM_command_buffer_query
        to throttle texture uploads based on number of currently pending queries.

        Unit test: ThrottledTextureUploaderTest.IsBusy

        * WebCore.gypi:
        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::create):
        (WebCore::LayerRendererChromium::LayerRendererChromium):
        (WebCore::LayerRendererChromium::initializeSharedObjects):
        * platform/graphics/chromium/LayerRendererChromium.h:
        (LayerRendererChromium):
        * platform/graphics/chromium/TextureUploader.cpp: Removed.
        * platform/graphics/chromium/TextureUploader.h:
        (TextureUploader):
        * platform/graphics/chromium/ThrottledTextureUploader.cpp: Added.
        (WebCore):
        (WebCore::ThrottledTextureUploader::Query::Query):
        (WebCore::ThrottledTextureUploader::Query::~Query):
        (WebCore::ThrottledTextureUploader::Query::begin):
        (WebCore::ThrottledTextureUploader::Query::end):
        (WebCore::ThrottledTextureUploader::Query::isPending):
        (WebCore::ThrottledTextureUploader::Query::wait):
        (WebCore::ThrottledTextureUploader::ThrottledTextureUploader):
        (WebCore::ThrottledTextureUploader::~ThrottledTextureUploader):
        (WebCore::ThrottledTextureUploader::isBusy):
        (WebCore::ThrottledTextureUploader::beginUploads):
        (WebCore::ThrottledTextureUploader::endUploads):
        (WebCore::ThrottledTextureUploader::uploadTexture):
        (WebCore::ThrottledTextureUploader::processQueries):
        * platform/graphics/chromium/ThrottledTextureUploader.h: Copied from Source/WebCore/platform/graphics/chromium/TextureUploader.h.
        (WebCore):
        (ThrottledTextureUploader):
        (WebCore::ThrottledTextureUploader::create):
        (Query):
        (WebCore::ThrottledTextureUploader::Query::create):
        * platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:
        (WebCore::CCLayerTreeHostImpl::initializeLayerRenderer):
        * platform/graphics/chromium/cc/CCLayerTreeHostImpl.h:
        (CCLayerTreeHostImpl):
        * platform/graphics/chromium/cc/CCSingleThreadProxy.cpp:
        (UnthrottledTextureUploader):
        (WebCore::UnthrottledTextureUploader::create):
        (WebCore::UnthrottledTextureUploader::~UnthrottledTextureUploader):
        (WebCore::UnthrottledTextureUploader::isBusy):
        (WebCore::UnthrottledTextureUploader::beginUploads):
        (WebCore::UnthrottledTextureUploader::endUploads):
        (WebCore::UnthrottledTextureUploader::uploadTexture):
        (WebCore::UnthrottledTextureUploader::UnthrottledTextureUploader):
        (WebCore):
        (WebCore::CCSingleThreadProxy::initializeLayerRenderer):
        (WebCore::CCSingleThreadProxy::recreateContext):
        (WebCore::CCSingleThreadProxy::doCommit):
        * platform/graphics/chromium/cc/CCTextureUpdater.cpp:
        (WebCore::CCTextureUpdater::update):
        * platform/graphics/chromium/cc/CCTextureUpdater.h:
        (CCTextureUpdater):
        * platform/graphics/chromium/cc/CCThreadProxy.cpp:
        (WebCore):
        (UnthrottledTextureUploader):
        (WebCore::UnthrottledTextureUploader::create):
        (WebCore::UnthrottledTextureUploader::~UnthrottledTextureUploader):
        (WebCore::UnthrottledTextureUploader::isBusy):
        (WebCore::UnthrottledTextureUploader::beginUploads):
        (WebCore::UnthrottledTextureUploader::endUploads):
        (WebCore::UnthrottledTextureUploader::uploadTexture):
        (WebCore::UnthrottledTextureUploader::UnthrottledTextureUploader):
        (WebCore::CCThreadProxy::initializeLayerRendererOnImplThread):
        (WebCore::CCThreadProxy::recreateContextOnImplThread):

2012-05-07  Rob Buis  <rbuis@rim.com>

        Shrink SVGInlineTextBox object size
        https://bugs.webkit.org/show_bug.cgi?id=85805

        Reviewed by Darin Adler.

        Reduce the object size of SVGInlineTextBox by using bitfields. This
        should be 4 bytes on 32-bits and 8 bytes on 64-bits systems.

        * rendering/svg/RenderSVGResource.h:
        * rendering/svg/SVGInlineTextBox.cpp:
        (ExpectedSVGInlineTextBoxSize):
        (WebCore):
        * rendering/svg/SVGInlineTextBox.h:
        (SVGInlineTextBox):

2012-05-07  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r116334.
        http://trac.webkit.org/changeset/116334
        https://bugs.webkit.org/show_bug.cgi?id=85816

        Broke the Chromium Win/Mac compile (Requested by
        ojan_gardening on #webkit).

        * WebCore.gypi:
        * platform/graphics/chromium/AnimationIdVendor.cpp: Removed.
        * platform/graphics/chromium/AnimationIdVendor.h: Removed.
        * platform/graphics/chromium/GraphicsLayerChromium.cpp:
        (std):
        (WebCore::GraphicsLayerChromium::updateNames):
        (WebCore::GraphicsLayerChromium::addAnimation):
        (WebCore::GraphicsLayerChromium::updateChildList):
        (WebCore::GraphicsLayerChromium::mapAnimationNameToId):
        * platform/graphics/chromium/GraphicsLayerChromium.h:
        (WebCore):
        (GraphicsLayerChromium):
        * platform/graphics/chromium/LinkHighlightLayerDelegate.cpp: Removed.
        * platform/graphics/chromium/LinkHighlightLayerDelegate.h: Removed.

2012-05-07  Adrienne Walker  <enne@google.com>

        Fix containerForRepaint() assumption about non-null enclosingLayer()
        https://bugs.webkit.org/show_bug.cgi?id=85807

        Reviewed by Simon Fraser.

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::containerForRepaint):

2012-05-07  Alec Flett  <alecflett@chromium.org>

        IndexedDB: Replace numeric constants with strings
        https://bugs.webkit.org/show_bug.cgi?id=84894

        Reviewed by Tony Chang.

        Test: storage/indexeddb/legacy-constants.html

        Update IDBObjectStore.openCursor, IDBIndex.openCursor,
        IDBIndex.openKeyCursor, IDBDatabase.transaction,
        IDBCursor.direction, IDBTransaction.mode, and
        IDBRequest.readyState to meet the latest spec. All of these APIs
        now support string-based values in addition to the
        legacy/deprecated enum-based values.

        * Modules/indexeddb/IDBCursor.cpp:
        (WebCore):
        (WebCore::IDBCursor::direction):
        (WebCore::IDBCursor::stringToDirection):
        (WebCore::IDBCursor::directionToString):
        * Modules/indexeddb/IDBCursor.h:
        (IDBCursor):
        * Modules/indexeddb/IDBCursor.idl:
        * Modules/indexeddb/IDBDatabase.cpp:
        (WebCore::IDBDatabase::transaction):
        (WebCore):
        * Modules/indexeddb/IDBDatabase.h:
        (IDBDatabase):
        * Modules/indexeddb/IDBDatabase.idl:
        * Modules/indexeddb/IDBIndex.cpp:
        (WebCore::IDBIndex::openCursor):
        (WebCore):
        (WebCore::IDBIndex::openKeyCursor):
        * Modules/indexeddb/IDBIndex.h:
        (WebCore::IDBIndex::openCursor):
        (IDBIndex):
        (WebCore::IDBIndex::openKeyCursor):
        * Modules/indexeddb/IDBIndex.idl:
        * Modules/indexeddb/IDBObjectStore.cpp:
        (WebCore::IDBObjectStore::openCursor):
        (WebCore):
        * Modules/indexeddb/IDBObjectStore.h:
        (WebCore::IDBObjectStore::openCursor):
        (IDBObjectStore):
        * Modules/indexeddb/IDBObjectStore.idl:
        * Modules/indexeddb/IDBRequest.cpp:
        (WebCore::IDBRequest::IDBRequest):
        (WebCore::IDBRequest::readyState):
        (WebCore::IDBRequest::markEarlyDeath):
        (WebCore::IDBRequest::resetReadyState):
        (WebCore::IDBRequest::abort):
        (WebCore::IDBRequest::finishCursor):
        (WebCore::IDBRequest::onSuccess):
        (WebCore::IDBRequest::stop):
        * Modules/indexeddb/IDBRequest.h:
        * Modules/indexeddb/IDBRequest.idl:
        * Modules/indexeddb/IDBTransaction.cpp:
        (WebCore):
        (WebCore::IDBTransaction::mode):
        (WebCore::IDBTransaction::stringToMode):
        (WebCore::IDBTransaction::modeToString):
        * Modules/indexeddb/IDBTransaction.h:
        (IDBTransaction):
        * Modules/indexeddb/IDBTransaction.idl:

2012-05-07  W. James MacLean  <wjmaclean@chromium.org>

        [chromium] Create LinkHighlightLayerChromium class to provide link-highlight preview animations for GraphicsLayerChromium.
        https://bugs.webkit.org/show_bug.cgi?id=85084

        Reviewed by Adrienne Walker.

        Unit test provided.

        Creates a layer delegate class to provide link highlight animations for link-preview feature.
        These are added to a GraphicsLayerChromium via provided methods. Moves dispensing of animation
        ids into a separate class.

        * WebCore.gypi:
        * platform/graphics/chromium/AnimationIdVendor.cpp: Added.
        (WebCore):
        (WebCore::AnimationIdVendor::getNextAnimationId):
        (WebCore::AnimationIdVendor::getNextGroupId):
        * platform/graphics/chromium/AnimationIdVendor.h: Added.
        (WebCore):
        (AnimationIdVendor):
        * platform/graphics/chromium/GraphicsLayerChromium.cpp:
        (WebCore::GraphicsLayerChromium::updateNames):
        (WebCore::GraphicsLayerChromium::addAnimation):
        (WebCore::GraphicsLayerChromium::addLinkHighlightLayer):
        (WebCore):
        (WebCore::GraphicsLayerChromium::didFinishLinkHighlightLayer):
        (WebCore::GraphicsLayerChromium::updateChildList):
        (WebCore::GraphicsLayerChromium::mapAnimationNameToId):
        * platform/graphics/chromium/GraphicsLayerChromium.h:
        (WebCore):
        (GraphicsLayerChromium):
        * platform/graphics/chromium/LinkHighlightLayerDelegate.cpp: Added.
        (WebCore):
        (WebCore::LinkHighlightLayerDelegate::create):
        (WebCore::LinkHighlightLayerDelegate::LinkHighlightLayerDelegate):
        (WebCore::LinkHighlightLayerDelegate::~LinkHighlightLayerDelegate):
        (WebCore::LinkHighlightLayerDelegate::getContentLayer):
        (WebCore::LinkHighlightLayerDelegate::paintContents):
        (WebCore::LinkHighlightLayerDelegate::didScroll):
        (WebCore::LinkHighlightLayerDelegate::notifyAnimationStarted):
        (WebCore::LinkHighlightLayerDelegate::notifyAnimationFinished):
        * platform/graphics/chromium/LinkHighlightLayerDelegate.h: Added.
        (WebCore):
        (LinkHighlightLayerDelegate):

2012-05-07  Joshua Bell  <jsbell@chromium.org>

        IndexedDB: LevelDB coding for bools is broken
        https://bugs.webkit.org/show_bug.cgi?id=85810

        Reviewed by Tony Chang.

        Code was appending to a pre-sized Vector, rather than using an
        index setter. This caused uninitialized data to be written out.
        Issue was detected on the Chromium side in http://crbug.com/126388

        Tests: webkit_unit_tests --gtest_filter='IDBLevelDBCodingTest.*codeBool'

        * Modules/indexeddb/IDBLevelDBCoding.cpp:
        (WebCore::IDBLevelDBCoding::encodeBool):

2012-05-07  Shawn Singh  <shawnsingh@chromium.org>

        [chromium] CCMathUtil projectPoint needs to avoid divide-by-zero
        https://bugs.webkit.org/show_bug.cgi?id=85560

        Reviewed by Adrienne Walker.

        Unit test added: CCMathUtilTest.cpp - verifyProjectionOfPerpendicularPlane
        Unit test updated/renamed: CCLayerTreeHostCommonTest.cpp - verifyVisibleRectFor3dPerspectiveWhenClippedByW

        The divide-by-zero occurs in an innocuous case where the layers
        are probably invisible anyway. However, producing Infs and NaNs
        could cause values to be used when un-intended, so its appropriate
        to handle the divide-by-zero correctly.

        * platform/graphics/chromium/cc/CCMathUtil.cpp:
        (WebCore::projectPoint):

2012-05-07  Pravin D  <pravind.2k4@gmail.com>

        Wrong positioning due to wrong width calculation wrt width:0
        https://bugs.webkit.org/show_bug.cgi?id=50135

        Reviewed by Eric Seidel.

        Test: fast/block/block-parent-with-zero-width-child.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::computePreferredLogicalWidths):
        When width is fixed, the specified width must be taken, provided the value is positive.
        Width=0 case was being ignored.

2012-05-07  Noel Gordon  <noel.gordon@gmail.com>

        [CG] ImageBuffer::ImageDataToDataURL: Remove alpha stuffing when encoding to JPEG
        https://bugs.webkit.org/show_bug.cgi?id=85779

        Reviewed by Eric Seidel.

        No change in behavior. Covered by fast/canvas/webgl/premultiplyalpha-test.html

        * platform/graphics/cg/ImageBufferCG.cpp:
        (WebCore::ImageDataToDataURL): Remove the need to stuff the alpha channel with 255.
        Rename dataVector to premultipliedData and verify that its resize() worked. Rewrite
        the premultiplication loop without the alpha channel = 255 part and ask the CG JPEG
        encoder to ignore the alpha channel (kCGImageAlphaNoneSkipLast) instead.

2012-05-07  Dominik Röttsches  <dominik.rottsches@linux.intel.com>

        [GTK] media/video-seek-past-end-playing.html times out
        https://bugs.webkit.org/show_bug.cgi?id=84858

        Reviewed by Philippe Normand.

        Removing the intentional state change to PAUSED on didEnd().
        My understanding is that the fix works because the additional
        state transition to PAUSED was resetting the internal m_seeking state to early,
        so that updatePlayState() in HTMLMediaElement was not able to
        correctly figure out/recover playstate after seeking.

        No new tests, covered by existing media tests, and fixing
        video-seek-past-end-playing.html flakiness on GTK, failure on EFL.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:

2012-05-07  Abhishek Arya  <inferno@chromium.org>

        Crash in RenderBlock::updateFirstLetterStyle.
        https://bugs.webkit.org/show_bug.cgi?id=85759

        Reviewed by Julien Chaffraix.

        Test: fast/css-generated-content/first-letter-next-sibling-crash.html

        RenderBlock::removeChild can bring up the children from last single anonymous block,
        causing |nextSibling| in RenderBlock::updateFirstLetterStyle to go stale. We prevent
        this by removing the child safely using removeChildNode before destroying it.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::updateFirstLetterStyle):

2012-05-07  Tommy Widenflycht  <tommyw@google.com>

        MediaStream API: Rename MediaStreamCenter::didConstructMediaStream
        https://bugs.webkit.org/show_bug.cgi?id=85796

        Reviewed by Adam Barth.

        Renamed MediaStreamCenter::didConstructMediaStream to didCreateMediaStream,
        and change so that it is only called for MediaStreams created from JS.

        Not really testable.

        * Modules/mediastream/MediaStream.cpp:
        (WebCore::MediaStream::create):
        * platform/mediastream/MediaStreamCenter.h:
        (MediaStreamCenter):
        * platform/mediastream/chromium/MediaStreamCenterChromium.cpp:
        (WebCore::MediaStreamCenterChromium::didCreateMediaStream):
        * platform/mediastream/chromium/MediaStreamCenterChromium.h:
        (MediaStreamCenterChromium):
        * platform/mediastream/gstreamer/MediaStreamCenterGStreamer.cpp:
        (WebCore::MediaStreamCenterGStreamer::didCreateMediaStream):
        * platform/mediastream/gstreamer/MediaStreamCenterGStreamer.h:
        (MediaStreamCenterGStreamer):

2012-05-07  Nat Duca  <nduca@chromium.org>

        Unreviewed, rolling out r115525.
        http://trac.webkit.org/changeset/115525
        https://bugs.webkit.org/show_bug.cgi?id=66683

        Too many pages rely on DOMTimeStamp as first argument.
        Reverting while we consider next steps.

        * WebCore.exp.in:
        * bindings/js/JSRequestAnimationFrameCallbackCustom.cpp:
        (WebCore::JSRequestAnimationFrameCallback::handleEvent):
        * dom/Document.cpp:
        (WebCore::Document::serviceScriptedAnimations):
        * dom/Document.h:
        (Document):
        * dom/RequestAnimationFrameCallback.h:
        (RequestAnimationFrameCallback):
        * dom/RequestAnimationFrameCallback.idl:
        * dom/ScriptedAnimationController.cpp:
        (WebCore::ScriptedAnimationController::ScriptedAnimationController):
        (WebCore::ScriptedAnimationController::serviceScriptedAnimations):
        (WebCore):
        (WebCore::ScriptedAnimationController::windowScreenDidChange):
        (WebCore::ScriptedAnimationController::scheduleAnimation):
        (WebCore::ScriptedAnimationController::animationTimerFired):
        * dom/ScriptedAnimationController.h:
        (ScriptedAnimationController):
        (WebCore::ScriptedAnimationController::displayRefreshFired):
        * page/FrameView.cpp:
        (WebCore::FrameView::serviceScriptedAnimations):
        * page/FrameView.h:
        (FrameView):
        * platform/graphics/DisplayRefreshMonitor.cpp:
        (WebCore::DisplayRefreshMonitor::DisplayRefreshMonitor):
        (WebCore::DisplayRefreshMonitor::notifyClients):
        * platform/graphics/DisplayRefreshMonitor.h:
        (DisplayRefreshMonitor):
        * platform/graphics/blackberry/DisplayRefreshMonitorBlackBerry.cpp:
        (WebCore::DisplayRefreshMonitor::displayLinkFired):
        * platform/graphics/mac/DisplayRefreshMonitorMac.cpp:
        (WebCore):
        (WebCore::DisplayRefreshMonitor::requestRefreshCallback):
        (WebCore::DisplayRefreshMonitor::displayLinkFired):

2012-05-07  Tommy Widenflycht  <tommyw@google.com>

        MediaStream API: Allow UserMediaRequest::succeed to take an MediaStreamDescriptor
        https://bugs.webkit.org/show_bug.cgi?id=85798

        Reviewed by Adam Barth.

        Adding another UserMediaRequest::succeed function that takes an MediaStreamDescriptor
        instead of the two MediaStreamSource arrays.

        Not currently testable.

        * Modules/mediastream/LocalMediaStream.cpp:
        (WebCore::LocalMediaStream::create):
        (WebCore):
        (WebCore::LocalMediaStream::LocalMediaStream):
        * Modules/mediastream/LocalMediaStream.h:
        (LocalMediaStream):
        * Modules/mediastream/UserMediaRequest.cpp:
        (WebCore::UserMediaRequest::succeed):
        (WebCore):
        * Modules/mediastream/UserMediaRequest.h:
        (WebCore):
        (UserMediaRequest):

2012-05-07  Michal Mocny  <mmocny@google.com>

        [chromium] setContentsMemoryAllocationLimitBytes needs to setNeedsCommit.
        https://bugs.webkit.org/show_bug.cgi?id=85801

        Reviewed by Adrienne Walker.

        CCLayerTreeHost::setContentsMemoryAllocationLimitBytes needs to call setNeedsCommit after adjusting memory
        limits, so that we push a new frame.  In particular, when returning from non visibile state, we adjust
        memory allocation from 0 to non 0, and we need to push a non blank frame.

        * platform/graphics/chromium/cc/CCLayerTreeHost.cpp:
        (WebCore::CCLayerTreeHost::setVisible):
        (WebCore::CCLayerTreeHost::setContentsMemoryAllocationLimitBytes):

2012-05-07  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL] media/track/track-cue-rendering-snap-to-lines-not-set.html fails
        https://bugs.webkit.org/show_bug.cgi?id=85602

        Reviewed by Eric Carlson.

        Fix positioning of the controls panel back to relative, as it is
        in the parent CSS.

        * css/mediaControlsEfl.css:
        (audio::-webkit-media-controls-panel, video::-webkit-media-controls-panel):

2012-05-07  Adam Bergkvist  <adam.bergkvist@ericsson.com>

        MediaStream should not be an ActiveDOMObject
        https://bugs.webkit.org/show_bug.cgi?id=85191

        Reviewed by Adam Barth.

        The model with MediaStreamDescriptor and MediaStream (and LocalMediaStream)
        allows the JavaScript objects (MediaStream and LocalMediaStream) to be
        cleaned up while the MediaStreamDescriptor lives on to manage the stream in
        the platform. This happens for example when a URL is created to represent
        a MediaStream (using createObjectURL()). In that case, the MediaStreamDescriptor
        is put into the MediaStreamRegistry and even though the MediaStream object is
        lost, the URL still works since the descriptor is kept in the registry.

        The changes introduced in r113460 (http://webkit.org/b/83143) turned
        MediaStream and LocalMediaStream into ActiveDOMObjects. For example on page
        reload, LocalMediaStream calls MediaStreamCenter::didStopLocalMediaStream()
        via its ActiveDOMObject::stop() method. However, when a page reload occurs,
        the LocalMediaStream object may have been cleaned up already and
        MediaStreamCenter::didStopLocalMediaStream() will not be called.

        One way to make the behavior consistent would be to call
        MediaStreamCenter::didStopLocalMediaStream() when the descriptor is cleaned up,
        cause then we wouldn't be dependent on the LocalMediaStream object being alive.
        However, calling MediaStreamCenter::didStopLocalMediaStream() might not be the
        correct thing to do when all references to the descriptor are lost since there
        can be MediaStream objects constructed from the tracks of the LocalMediaStream
        that should continue to work. MediaStreamCenter::didStopLocalMediaStream() was
        intended for LocalMediaStream.stop() which is used to revoke access to devices;
        that should not necessarily happen when the descriptor of a LocalMediaStream is
        cleaned up. If it's necessary for some ports to signal to the platform that a
        MediaStreamDescriptor is cleaned up, then I would suggest adding a new function,
        willDestroyMediaStreamDescriptor(), to the MediaStreamCenter interface.

        The current resolution is to make MediaStream a ContextDestructionObserver
        instead of an ActiveDOMObject.

        Currently not testable.

        * Modules/mediastream/LocalMediaStream.cpp:
        (WebCore::LocalMediaStream::create):
        * Modules/mediastream/LocalMediaStream.h:
        (LocalMediaStream):
        * Modules/mediastream/LocalMediaStream.idl:
        * Modules/mediastream/MediaStream.cpp:
        (WebCore::MediaStream::create):
        (WebCore::MediaStream::MediaStream):
        (WebCore::MediaStream::scriptExecutionContext):
        * Modules/mediastream/MediaStream.h:

2012-05-07  Liam Quinn  <lquinn@rim.com>

        [BlackBerry] WWW-Authenticate header on 200 response pops up authentication dialog
        https://bugs.webkit.org/show_bug.cgi?id=85643

        Reviewed by George Staikos.

        RIM PR: 151992
        Ignore WWW-Authenticate header if the response code is not 401.
        Ignore Proxy-Authenticate header if the response code is not 407.

        Manual test added to observe whether the authentication dialog appears on a 200 response with WWW-Authenticate.

        * platform/network/blackberry/NetworkJob.cpp:
        (WebCore::NetworkJob::handleNotifyHeaderReceived):

2012-05-07  Alexander Pavlov  <apavlov@chromium.org>

        Web Inspector: [TextPrompt] Event listeners and CSS style are not removed on detachment
        https://bugs.webkit.org/show_bug.cgi?id=85789

        Reviewed by Yury Semikhatsky.

        * inspector/front-end/TextPrompt.js:
        (WebInspector.TextPrompt.prototype._attachInternal):
        (WebInspector.TextPrompt.prototype.detach):

2012-05-07  Csaba Osztrogonác  <ossy@webkit.org>

        Buildfix for buggy GCC
        https://bugs.webkit.org/show_bug.cgi?id=85781

        Reviewed by Zoltan Herczeg.

        * rendering/RenderBlock.h:
        (WebCore::RenderBlock::MarginInfo::clearMargin):

2012-05-07  Alexander Pavlov  <apavlov@chromium.org>

        Web Inspector: [REGRESSION] Context menu for the left Script view gutter is broken
        https://bugs.webkit.org/show_bug.cgi?id=85785

        Reviewed by Pavel Feldman.

        Fixed remaining usages of WebInspector.save to be WebInspector.fileManager.save.

        * inspector/front-end/NetworkPanel.js:
        (WebInspector.NetworkLogView.prototype._exportAll):
        (WebInspector.NetworkLogView.prototype._exportRequest):
        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.FrameResourceTreeElement.prototype._appendSaveAsAction.doSave):
        (WebInspector.ResourceRevisionTreeElement.prototype._handleContextMenuEvent.doSave):
        * inspector/front-end/TextViewer.js:
        (WebInspector.TextViewer.prototype._contextMenu):


2012-05-07  Antti Koivisto  <antti@apple.com>

        Share stylesheet data structures between documents
        https://bugs.webkit.org/show_bug.cgi?id=85598

        Reviewed by Darin Adler.

        We currently make a copy of the data structures when restoring a cached stylesheet. This patch lets us share
        the data until someone uses a mutating CSSOM API to modify the sheet.
        
        The patch implements copy-on-write for the internal style sheet data structures. If any mutating CSSOM API is
        invoked, we check if the mutation is safe (there is only one client, the sheet is not cached). If not then the
        internal structures are copied and any existing CSSOM objects are re-attached to the new style tree. The copied
        tree is mutated while the other clients stay attached to the original tree.
        
        Sharing can save significant amount of memory on sites with large stylesheets. For example if you have
        multiple articles open on wsj.com this saves ~2.6MB per tab.
        
        Test: http/tests/css/shared-stylesheet-mutation.html
              http/tests/css/shared-stylesheet-mutation-preconstruct.html

        * css/CSSFontFaceRule.cpp:
        (WebCore::CSSFontFaceRule::reattach):
        (WebCore):
        * css/CSSFontFaceRule.h:
        (CSSFontFaceRule):
        * css/CSSMediaRule.cpp:
        (WebCore::CSSMediaRule::insertRule):
        (WebCore::CSSMediaRule::deleteRule):
        (WebCore::CSSMediaRule::reattach):
        (WebCore):
        * css/CSSMediaRule.h:
        (CSSMediaRule):
        * css/CSSPageRule.cpp:
        (WebCore::CSSPageRule::setSelectorText):
        (WebCore::CSSPageRule::reattach):
        (WebCore):
        * css/CSSPageRule.h:
        (CSSPageRule):
        * css/CSSRule.cpp:
        (WebCore::CSSRule::reattach):
        
            After the internal stylerule tree has been copied, the existing wrappers are re-attached using recursive reattach() function.

        * css/CSSRule.h:
        (WebCore):
        (CSSRule):
        * css/CSSStyleRule.cpp:
        (WebCore::CSSStyleRule::setSelectorText):
        (WebCore::CSSStyleRule::reattach):
        (WebCore):
        * css/CSSStyleRule.h:
        (CSSStyleRule):
        * css/CSSStyleSheet.cpp:
        (WebCore::StyleSheetInternal::StyleSheetInternal):
        (WebCore::StyleSheetInternal::isCacheable):
        (WebCore::StyleSheetInternal::ruleAt):
        
            Add ruleAt(), use it for both wrapper creation and reattaching.  Remove createChildRuleCSSOMWrapper .

        (WebCore):
        (WebCore::StyleSheetInternal::wrapperInsertRule):
        (WebCore::StyleSheetInternal::wrapperDeleteRule):
        
            Invalidation moves to the calling wrapper.

        (WebCore::StyleSheetInternal::addedToMemoryCache):
        (WebCore::StyleSheetInternal::removedFromMemoryCache):
        (WebCore::CSSStyleSheet::willMutateRules):
        
            This is called whenever StyleSheetInternal is going to be mutated. It will do copy-on-write if needed.
            
            Usually invoked by CSSStyleSheet::RuleMutation RAII type.

        (WebCore::CSSStyleSheet::didMutateRules):
        
            This is called after the mutation is complete and will trigger the style recalc in the document.

        (WebCore::CSSStyleSheet::didMutate):
        
            This is called directly after mutations that don't change StyleSheetInternal so don't require copy-on-write.

        (WebCore::CSSStyleSheet::reattachChildRuleCSSOMWrappers):
        (WebCore::CSSStyleSheet::setDisabled):
        (WebCore::CSSStyleSheet::insertRule):
        (WebCore::CSSStyleSheet::deleteRule):
        * css/CSSStyleSheet.h:
        (StyleSheetInternal):
        (WebCore::StyleSheetInternal::hasOneClient):
        (WebCore::StyleSheetInternal::isMutable):
        (WebCore::StyleSheetInternal::setMutable):
        
            Track mutability. Mutation is allowed only after willMutate call.

        (WebCore::StyleSheetInternal::isInMemoryCache):
        
            Track if the object is in memory cache.

        (WebCore::CSSStyleSheet::clearOwnerRule):
        (CSSStyleSheet):
        * css/MediaList.cpp:
        (WebCore::MediaList::setMediaText):
        (WebCore::MediaList::deleteMedium):
        (WebCore::MediaList::appendMedium):
        (WebCore::MediaList::didMutate):
        (WebCore):
        (WebCore::MediaList::reattach):
        * css/MediaList.h:
        (MediaList):
        * css/PropertySetCSSStyleDeclaration.cpp:
        (WebCore::PropertySetCSSStyleDeclaration::setCssText):
        (WebCore::PropertySetCSSStyleDeclaration::setProperty):
        (WebCore::PropertySetCSSStyleDeclaration::removeProperty):
        (WebCore::PropertySetCSSStyleDeclaration::setPropertyInternal):
        (WebCore):
        (WebCore::StyleRuleCSSStyleDeclaration::willMutate):
        (WebCore::StyleRuleCSSStyleDeclaration::didMutate):
        (WebCore::StyleRuleCSSStyleDeclaration::reattach):
        (WebCore::InlineCSSStyleDeclaration::didMutate):
        * css/PropertySetCSSStyleDeclaration.h:
        (WebCore::PropertySetCSSStyleDeclaration::willMutate):
        (WebCore::PropertySetCSSStyleDeclaration::didMutate):
        (StyleRuleCSSStyleDeclaration):
        * css/WebKitCSSKeyframesRule.cpp:
        (WebCore::WebKitCSSKeyframesRule::setName):
        (WebCore::WebKitCSSKeyframesRule::insertRule):
        (WebCore::WebKitCSSKeyframesRule::deleteRule):
        (WebCore::WebKitCSSKeyframesRule::reattach):
        (WebCore):
        * css/WebKitCSSKeyframesRule.h:
        (WebKitCSSKeyframesRule):
        * css/WebKitCSSRegionRule.cpp:
        (WebCore::WebKitCSSRegionRule::reattach):
        * css/WebKitCSSRegionRule.h:
        (WebKitCSSRegionRule):
        * inspector/InspectorStyleSheet.cpp:
        (WebCore::InspectorStyleSheet::reparseStyleSheet):
        * loader/cache/CachedCSSStyleSheet.cpp:
        (WebCore::CachedCSSStyleSheet::~CachedCSSStyleSheet):
        (WebCore::CachedCSSStyleSheet::destroyDecodedData):
        (WebCore::CachedCSSStyleSheet::restoreParsedStyleSheet):
        
            Don't copy when restoring. It is no longer necessary.
            Set the cache bit on the stylesheet.

        (WebCore::CachedCSSStyleSheet::saveParsedStyleSheet):

2012-05-06  Kinuko Yasuda  <kinuko@chromium.org>

        Cleanup: Change boolean synchronous flag argument into enum in FileSystem API code
        https://bugs.webkit.org/show_bug.cgi?id=85741

        Reviewed by David Levin.

        No new tests as this change has no functional effects.

        * Modules/filesystem/DOMWindowFileSystem.cpp:
        (WebCore::DOMWindowFileSystem::webkitRequestFileSystem):
        * Modules/filesystem/LocalFileSystem.cpp:
        (WebCore::LocalFileSystem::requestFileSystem):
        * Modules/filesystem/LocalFileSystem.h:
        (LocalFileSystem):
        * Modules/filesystem/WorkerContextFileSystem.cpp:
        (WebCore::WorkerContextFileSystem::webkitRequestFileSystem):
        (WebCore::WorkerContextFileSystem::webkitRequestFileSystemSync):
        (WebCore::WorkerContextFileSystem::webkitResolveLocalFileSystemSyncURL):
        * platform/FileSystemType.h: Added FileSystemSynchronousType enum.

2012-05-07  Antti Koivisto  <antti@apple.com>

        Revert the previous.

        Not reviewed.
        
        Apparently r116235 was already rolled out.

        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::determineScope):

2012-05-07  Antti Koivisto  <antti@apple.com>

        REGRESSION(r116235): broke a lot of tests on all chromium debug bots
        https://bugs.webkit.org/show_bug.cgi?id=85773

        Not reviewed.

        Try to fix assert when scoped stylesheets are enabled.

        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::determineScope):

2012-05-06  Kinuko Yasuda  <kinuko@chromium.org>

        Cleanup: Move FileSystem API type definitions into a separate header file
        https://bugs.webkit.org/show_bug.cgi?id=85738

        Reviewed by David Levin.

        Move FileSystem API type definitions from AsyncFileSystem.h and
        AsyncFileSystemChromium.cpp for chromium port into a single separate
        header file: FileSystemType.h

        By doing this we make it clearer that every filesystem type can be
        found in the header file and also can save including entire
        AsyncFileSystem definition just for referring type enum value.

        No new tests as this change has no visible or functional changes.

        * Modules/filesystem/DOMFileSystemBase.cpp:
        (WebCore::pathToAbsolutePath):
        * Modules/filesystem/DOMWindowFileSystem.cpp:
        (WebCore::DOMWindowFileSystem::webkitRequestFileSystem):
        (WebCore::DOMWindowFileSystem::webkitResolveLocalFileSystemURL):
        (WebCore):
        * Modules/filesystem/DOMWindowFileSystem.h:
        * Modules/filesystem/LocalFileSystem.h:
        (LocalFileSystem):
        * Modules/filesystem/WorkerContextFileSystem.cpp:
        (WebCore::WorkerContextFileSystem::webkitRequestFileSystem):
        (WebCore::WorkerContextFileSystem::webkitRequestFileSystemSync):
        (WebCore::WorkerContextFileSystem::webkitResolveLocalFileSystemURL):
        (WebCore::WorkerContextFileSystem::webkitResolveLocalFileSystemSyncURL):
        (WebCore):
        * Modules/filesystem/WorkerContextFileSystem.h:
        * platform/AsyncFileSystem.cpp:
        (WebCore::AsyncFileSystem::isValidType):
        (WebCore::AsyncFileSystem::create):
        (WebCore::AsyncFileSystem::openFileSystem):
        * platform/AsyncFileSystem.h:
        (AsyncFileSystem):
        (WebCore::AsyncFileSystem::type):
        (WebCore::AsyncFileSystem::AsyncFileSystem):
        * platform/FileSystemType.h: Added.
        (WebCore):
        * platform/blackberry/AsyncFileSystemBlackBerry.cpp:
        (WebCore::AsyncFileSystem::isValidType):
        (WebCore::AsyncFileSystem::create):
        (WebCore::AsyncFileSystem::openFileSystem):
        (WebCore::AsyncFileSystem::crackFileSystemURL):
        (WebCore::AsyncFileSystemBlackBerry::AsyncFileSystemBlackBerry):
        * platform/blackberry/AsyncFileSystemBlackBerry.h:
        (AsyncFileSystemBlackBerry):
        * platform/gtk/AsyncFileSystemGtk.cpp:
        (WebCore::AsyncFileSystem::isValidType):
        (WebCore::AsyncFileSystem::create):
        (WebCore::AsyncFileSystem::openFileSystem):
        (WebCore::AsyncFileSystem::crackFileSystemURL):
        (WebCore::AsyncFileSystemGtk::AsyncFileSystemGtk):
        * platform/gtk/AsyncFileSystemGtk.h:
        (AsyncFileSystemGtk):

2012-05-06  MORITA Hajime  <morrita@google.com>

        https://bugs.webkit.org/show_bug.cgi?id=85265
        [Shadow DOM] ShadowTree needs a better name

        Reviewed by Dimitri Glazkov.

        Renamed ShadowTree to ElementShadow, The ElementShadow class is
        going to be a facade of Shadow related APIs.

        Following renames follow:
        - Element::shadowTree() to Element::shadow()
        - ShadowRoot::tree() to ShadowRoot::owner()
        - ShadowTree::recalcShadowTreeStyle() to ElementShadow::recalcStyle()

        No new tests. Just renames.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.exp.in:
        * WebCore.gypi:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/ComposedShadowTreeWalker.cpp:
        (WebCore::shadowFor):
        (WebCore::shadowOfParent):
        (WebCore::ComposedShadowTreeWalker::traverseChild):
        (WebCore::ComposedShadowTreeWalker::traverseSiblingOrBackToInsertionPoint):
        (WebCore::ComposedShadowTreeWalker::traverseParent):
        * dom/ContainerNodeAlgorithms.cpp:
        (WebCore::ChildNodeInsertionNotifier::notifyDescendantInsertedIntoDocument):
        (WebCore::ChildNodeInsertionNotifier::notifyDescendantInsertedIntoTree):
        (WebCore::ChildNodeRemovalNotifier::notifyDescendantRemovedFromDocument):
        (WebCore::ChildNodeRemovalNotifier::notifyDescendantRemovedFromTree):
        * dom/DOMAllInOne.cpp:
        * dom/Document.cpp:
        (WebCore::Document::buildAccessKeyMap):
        * dom/Element.cpp:
        (WebCore::Element::~Element):
        (WebCore::Element::willRemove):
        (WebCore::Element::attach):
        (WebCore::Element::detach):
        (WebCore::Element::recalcStyle):
        (WebCore::Element::hasShadowRoot):
        (WebCore::Element::shadow):
        (WebCore::Element::ensureShadow):
        (WebCore::Element::ensureShadowRoot):
        (WebCore::Element::childrenChanged):
        * dom/Element.h:
        (WebCore):
        (Element):
        * dom/ElementRareData.h:
        (ElementRareData):
        (WebCore::ElementRareData::~ElementRareData):
        * dom/ElementShadow.cpp: Renamed from Source/WebCore/dom/ShadowTree.cpp.
        (WebCore):
        (WebCore::ElementShadow::ElementShadow):
        (WebCore::ElementShadow::~ElementShadow):
        (WebCore::validateShadowRoot):
        (WebCore::ElementShadow::addShadowRoot):
        (WebCore::ElementShadow::removeAllShadowRoots):
        (WebCore::ElementShadow::willRemove):
        (WebCore::ElementShadow::setParentTreeScope):
        (WebCore::ElementShadow::attach):
        (WebCore::ElementShadow::attachHost):
        (WebCore::ElementShadow::detach):
        (WebCore::ElementShadow::detachHost):
        (WebCore::ElementShadow::insertionPointFor):
        (WebCore::ElementShadow::selectionFor):
        (WebCore::ElementShadow::reattach):
        (WebCore::ElementShadow::childNeedsStyleRecalc):
        (WebCore::ElementShadow::needsStyleRecalc):
        (WebCore::ElementShadow::recalcStyle):
        (WebCore::ElementShadow::needsReattachHostChildrenAndShadow):
        (WebCore::ElementShadow::hostChildrenChanged):
        (WebCore::ElementShadow::setNeedsReattachHostChildrenAndShadow):
        (WebCore::ElementShadow::reattachHostChildrenAndShadow):
        * dom/ElementShadow.h: Renamed from Source/WebCore/dom/ShadowTree.h.
        (WebCore):
        (ElementShadow):
        (WebCore::ElementShadow::hasShadowRoot):
        (WebCore::ElementShadow::youngestShadowRoot):
        (WebCore::ElementShadow::oldestShadowRoot):
        (WebCore::ElementShadow::selector):
        (WebCore::ElementShadow::clearNeedsReattachHostChildrenAndShadow):
        (WebCore::ElementShadow::host):
        (ShadowRootVector):
        (WebCore::ShadowRootVector::ShadowRootVector):
        * dom/Node.cpp:
        (WebCore::oldestShadowRootFor):
        * dom/NodeRenderingContext.cpp:
        (WebCore::NodeRenderingContext::NodeRenderingContext):
        (WebCore::NodeRenderingContext::hostChildrenChanged):
        * dom/NodeRenderingContext.h:
        (WebCore):
        * dom/ShadowRoot.cpp:
        (WebCore::ShadowRoot::create):
        (WebCore::ShadowRoot::owner):
        * dom/ShadowRoot.h:
        (WebCore):
        (ShadowRoot):
        * dom/TreeScopeAdopter.cpp:
        (WebCore::shadowFor):
        (WebCore::TreeScopeAdopter::moveTreeToNewScope):
        (WebCore::TreeScopeAdopter::moveTreeToNewDocument):
        (WebCore::TreeScopeAdopter::moveShadowToNewDocument):
        * dom/TreeScopeAdopter.h:
        (TreeScopeAdopter):
        * html/ColorInputType.cpp:
        (WebCore::ColorInputType::createShadowSubtree):
        (WebCore::ColorInputType::shadowColorSwatch):
        * html/FileInputType.cpp:
        (WebCore::FileInputType::createShadowSubtree):
        (WebCore::FileInputType::multipleAttributeChanged):
        * html/HTMLDetailsElement.cpp:
        (WebCore::HTMLDetailsElement::findMainSummary):
        * html/HTMLKeygenElement.cpp:
        (WebCore::HTMLKeygenElement::shadowSelect):
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::mediaControls):
        (WebCore::HTMLMediaElement::hasMediaControls):
        * html/HTMLSummaryElement.cpp:
        * html/HTMLTextAreaElement.cpp:
        (WebCore::HTMLTextAreaElement::innerTextElement):
        (WebCore::HTMLTextAreaElement::updatePlaceholderText):
        * html/InputType.cpp:
        (WebCore::InputType::destroyShadowSubtree):
        * html/RangeInputType.cpp:
        (WebCore::RangeInputType::handleMouseDownEvent):
        (WebCore::RangeInputType::createShadowSubtree):
        * html/TextFieldInputType.cpp:
        (WebCore::TextFieldInputType::createShadowSubtree):
        (WebCore::TextFieldInputType::updatePlaceholderText):
        * html/ValidationMessage.cpp:
        (WebCore::ValidationMessage::deleteBubbleTree):
        * html/shadow/HTMLContentElement.cpp:
        (WebCore::HTMLContentElement::parseAttribute):
        * html/shadow/InsertionPoint.cpp:
        (WebCore::InsertionPoint::attach):
        (WebCore::InsertionPoint::detach):
        (WebCore::InsertionPoint::distributeHostChildren):
        (WebCore::InsertionPoint::clearDistribution):
        * html/shadow/InsertionPoint.h:
        * html/shadow/SliderThumbElement.cpp:
        (WebCore::sliderThumbElementOf):
        (WebCore::RenderSliderContainer::layout):
        (WebCore::trackLimiterElementOf):
        * html/shadow/TextFieldDecorationElement.cpp:
        (WebCore::getDecorationRootAndDecoratedRoot):
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::unbind):
        (WebCore::InspectorDOMAgent::buildObjectForNode):
        * page/FocusController.cpp:
        (WebCore::FocusScope::focusScopeOf):
        (WebCore::FocusScope::focusScopeOwnedByShadowHost):
        * rendering/RenderFileUploadControl.cpp:
        (WebCore::RenderFileUploadControl::uploadButton):
        * svg/SVGTRefElement.cpp:
        (WebCore::SVGTRefElement::updateReferencedText):
        (WebCore::SVGTRefElement::detachTarget):
        * svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::clearResourceReferences):
        (WebCore::SVGUseElement::buildShadowAndInstanceTree):
        (WebCore::SVGUseElement::buildShadowTree):
        * testing/Internals.cpp:
        (WebCore::Internals::ensureShadowRoot):
        (WebCore::Internals::youngestShadowRoot):
        (WebCore::Internals::oldestShadowRoot):
        (WebCore::Internals::removeShadowRoot):

2012-05-06  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r116235.
        http://trac.webkit.org/changeset/116235
        https://bugs.webkit.org/show_bug.cgi?id=85773

        broke a lot of tests on all chromium debug bots (Requested by
        caseq_ on #webkit).

        * bindings/objc/DOMCSS.mm:
        * css/CSSFontFaceRule.cpp:
        * css/CSSFontFaceRule.h:
        (CSSFontFaceRule):
        * css/CSSImportRule.cpp:
        * css/CSSMediaRule.cpp:
        (WebCore::CSSMediaRule::insertRule):
        (WebCore::CSSMediaRule::deleteRule):
        * css/CSSMediaRule.h:
        (CSSMediaRule):
        * css/CSSPageRule.cpp:
        (WebCore::CSSPageRule::setSelectorText):
        * css/CSSPageRule.h:
        (CSSPageRule):
        * css/CSSRule.cpp:
        * css/CSSRule.h:
        (CSSRule):
        (WebCore::CSSRule::parserContext):
        * css/CSSStyleRule.cpp:
        (WebCore::CSSStyleRule::setSelectorText):
        * css/CSSStyleRule.h:
        * css/CSSStyleSheet.cpp:
        (WebCore::StyleSheetInternal::StyleSheetInternal):
        (WebCore::StyleSheetInternal::isCacheable):
        (WebCore::StyleSheetInternal::createChildRuleCSSOMWrapper):
        (WebCore::StyleSheetInternal::wrapperInsertRule):
        (WebCore::StyleSheetInternal::wrapperDeleteRule):
        (WebCore::StyleSheetInternal::styleSheetChanged):
        (WebCore):
        (WebCore::CSSStyleSheet::setDisabled):
        (WebCore::CSSStyleSheet::item):
        (WebCore::CSSStyleSheet::insertRule):
        (WebCore::CSSStyleSheet::deleteRule):
        * css/CSSStyleSheet.h:
        (StyleSheetInternal):
        (WebCore::StyleSheetInternal::hasCharsetRule):
        (WebCore::CSSStyleSheet::styleSheetChanged):
        (CSSStyleSheet):
        * css/MediaList.cpp:
        (WebCore::MediaList::setMediaText):
        (WebCore::MediaList::deleteMedium):
        (WebCore::MediaList::appendMedium):
        (WebCore::MediaList::notifyChanged):
        * css/MediaList.h:
        (MediaList):
        * css/PropertySetCSSStyleDeclaration.cpp:
        (WebCore::PropertySetCSSStyleDeclaration::setCssText):
        (WebCore::PropertySetCSSStyleDeclaration::setProperty):
        (WebCore::PropertySetCSSStyleDeclaration::removeProperty):
        (WebCore::PropertySetCSSStyleDeclaration::setPropertyInternal):
        (WebCore::PropertySetCSSStyleDeclaration::didMutate):
        (WebCore):
        (WebCore::StyleRuleCSSStyleDeclaration::setNeedsStyleRecalc):
        (WebCore::InlineCSSStyleDeclaration::setNeedsStyleRecalc):
        * css/PropertySetCSSStyleDeclaration.h:
        (WebCore::PropertySetCSSStyleDeclaration::setNeedsStyleRecalc):
        (PropertySetCSSStyleDeclaration):
        (StyleRuleCSSStyleDeclaration):
        * css/StylePropertySet.cpp:
        * css/WebKitCSSKeyframesRule.cpp:
        (WebCore::WebKitCSSKeyframesRule::setName):
        (WebCore::WebKitCSSKeyframesRule::insertRule):
        (WebCore::WebKitCSSKeyframesRule::deleteRule):
        * css/WebKitCSSKeyframesRule.h:
        (WebKitCSSKeyframesRule):
        * css/WebKitCSSRegionRule.cpp:
        * css/WebKitCSSRegionRule.h:
        (WebKitCSSRegionRule):
        * inspector/InspectorStyleSheet.cpp:
        (WebCore::InspectorStyleSheet::reparseStyleSheet):
        * loader/cache/CachedCSSStyleSheet.cpp:
        (WebCore::CachedCSSStyleSheet::~CachedCSSStyleSheet):
        (WebCore::CachedCSSStyleSheet::destroyDecodedData):
        (WebCore::CachedCSSStyleSheet::restoreParsedStyleSheet):
        (WebCore::CachedCSSStyleSheet::saveParsedStyleSheet):

2012-05-06  Adam Barth  <abarth@webkit.org>

        Attempt to fix the !ENABLE(INSPECTOR) build by making InspectorValues
        available unconditionally.  We should probably rename these classes to
        JSONValues and move them into WebCore/platform.

        * inspector/InspectorValues.cpp:
        * inspector/InspectorValues.h:

2012-05-06  Adam Barth  <abarth@webkit.org>

        CSP violation reports should have all the fields required by the spec
        https://bugs.webkit.org/show_bug.cgi?id=85682

        Reviewed by Darin Adler.

        This patch updates our CSP violation reports to include all the fields
        in the spec.  We've discussed all these fields in the working group,
        and we have fairly high confidence that these are safe to expose.

        Tests: http/tests/security/contentSecurityPolicy/report-and-enforce.html
               http/tests/security/contentSecurityPolicy/report-blocked-uri-cross-origin.html
               http/tests/security/contentSecurityPolicy/report-blocked-uri.html
               http/tests/security/contentSecurityPolicy/report-only-from-header.html
               http/tests/security/contentSecurityPolicy/report-only.html
               http/tests/security/contentSecurityPolicy/report-uri-from-child-frame.html
               http/tests/security/contentSecurityPolicy/report-uri.html

        * page/ContentSecurityPolicy.cpp:
        (CSPDirectiveList):
        (WebCore::CSPDirectiveList::reportViolation):
        (WebCore::CSPDirectiveList::checkSourceAndReportViolation):

2012-05-06  Kinuko Yasuda  <kinuko@chromium.org>

        Cleanup: FileSystem API's Entry.toURL() impl should return KURL instead of String
        https://bugs.webkit.org/show_bug.cgi?id=85736

        Change the return type of Entry::toURL() from String to KURL.

        Reviewed by David Levin.

        No new tests as this change should not have any visible impact in the javascript layer.

        * Modules/filesystem/EntryBase.cpp:
        (WebCore::EntryBase::toURL):
        * Modules/filesystem/EntryBase.h:
        * platform/AsyncFileSystem.h:
        * platform/blackberry/AsyncFileSystemBlackberry.cpp:
        (AsyncFileSystemBlackberry::toURL):
        * platform/blackberry/AsyncFileSystemBlackberry.h:
        * platform/gtk/AsyncFileSystemGtk.cpp:
        (AsyncFileSystemGtk::toURL):
        * platform/gtk/AsyncFileSystemGtk.h:

2012-05-06  Kentaro Hara  <haraken@chromium.org>

        [V8][Performance] Remove Isolate lookup from the call path
        to get a cached JS wrapper object by getDOMXXXXMap().
        https://bugs.webkit.org/show_bug.cgi?id=85205

        Reviewed by Adam Barth.

        The patch improves the performance of getting a cached JS wrapper
        by getDOMXXXXMap(). For example, it improves the performance
        of toV8(NodeList*) in getElementsByTagName(), getElementsByName(),
        getElementsByClassName() by 7 ~ 9%.

        Performance tests: https://bugs.webkit.org/attachment.cgi?id=139468

        The performance test results in my Linux desktop:

        getElementsByTagName :   40.76 ms => 37.52ms (+8.6%)
        getElementsByName :      41.02 ms => 37.42ms (+9.6%)
        getElementsByClassName : 40.32 ms => 37.68ms (+7.0%)

        Unfortunately we cannot observe performance improvement in
        Dromaeo/dom-query.html, which are testing getElementsByTagName(),
        getElementsByName(), getElementsByClassName(). This is because
        the bottleneck of these Dromaeo tests is not toV8(NodeList*) but
        .length and .nodeType accesses. The patch for optimizing them
        will be coming soon.

        No tests. No change in behavior.

        * bindings/scripts/CodeGeneratorV8.pm: Modified as described above.
        (GenerateHeader):
        (GenerateNormalAttrGetter):
        (GetDomMapFunction):
        (NativeToJSValue):
        * bindings/v8/DOMData.cpp:
        (WebCore::DOMData::getCurrentStore):

        * bindings/scripts/test/V8/V8Float64Array.h: Updated run-bindings-tests results.
        (WebCore::V8Float64Array::wrap):
        * bindings/scripts/test/V8/V8TestActiveDOMObject.h:
        (WebCore::V8TestActiveDOMObject::wrap):
        * bindings/scripts/test/V8/V8TestCustomNamedGetter.h:
        (WebCore::V8TestCustomNamedGetter::wrap):
        * bindings/scripts/test/V8/V8TestEventConstructor.h:
        (WebCore::V8TestEventConstructor::wrap):
        * bindings/scripts/test/V8/V8TestEventTarget.cpp:
        (WebCore::TestEventTargetV8Internal::itemCallback):
        * bindings/scripts/test/V8/V8TestEventTarget.h:
        (WebCore::V8TestEventTarget::wrap):
        * bindings/scripts/test/V8/V8TestInterface.cpp:
        (WebCore::TestInterfaceV8Internal::supplementalNodeAttrGetter):
        * bindings/scripts/test/V8/V8TestInterface.h:
        (WebCore::V8TestInterface::wrap):
        * bindings/scripts/test/V8/V8TestMediaQueryListListener.h:
        (WebCore::V8TestMediaQueryListListener::wrap):
        * bindings/scripts/test/V8/V8TestNamedConstructor.h:
        (WebCore::V8TestNamedConstructor::wrap):
        * bindings/scripts/test/V8/V8TestObj.cpp:
        (WebCore::TestObjV8Internal::readOnlyTestObjAttrAttrGetter):
        (WebCore::TestObjV8Internal::cachedAttribute1AttrGetter):
        (WebCore::TestObjV8Internal::cachedAttribute2AttrGetter):
        (WebCore::TestObjV8Internal::contentDocumentAttrGetter):
        (WebCore::TestObjV8Internal::getSVGDocumentCallback):
        * bindings/scripts/test/V8/V8TestObj.h:
        (WebCore::V8TestObj::wrap):
        * bindings/scripts/test/V8/V8TestSerializedScriptValueInterface.h:
        (WebCore::V8TestSerializedScriptValueInterface::wrap):

2012-05-06  Adam Barth  <abarth@webkit.org>

        Content Security Policy reports should be reported with content-type application/json, should contain all required fields
        https://bugs.webkit.org/show_bug.cgi?id=61360

        Reviewed by Eric Seidel.

        This patch changes ContentSecurityPolicy to use JSON format for sending
        violation reports rather than wwwform-encoding.  This patch aligns our
        behavior with the specification and with Mozilla.  A follow up patch
        will update the list of fields in the report to match the spec.

        * loader/PingLoader.cpp:
        (WebCore::PingLoader::reportContentSecurityPolicyViolation):
        * page/ContentSecurityPolicy.cpp:
        (WebCore::CSPDirectiveList::reportViolation):

2012-05-06  Mary Wu  <mary.wu@torchmobile.com.cn>

        [BlackBerry] Support html5 download attribute.
        https://bugs.webkit.org/show_bug.cgi?id=85044

        Reviewed by Antonio Gomes.

        Pass download attribute filename to networkJob and it could be
        overridden by the Content-Disposition HTTP header's filename parameter.

        * platform/network/blackberry/NetworkJob.cpp:
        (WebCore::NetworkJob::initialize):
        * platform/network/blackberry/ResourceRequest.h:
        (WebCore::ResourceRequest::setSuggestSaveName):
        (WebCore::ResourceRequest::suggestSaveName):
        (ResourceRequest):
        * platform/network/blackberry/ResourceRequestBlackBerry.cpp:
        (WebCore::ResourceRequest::initializePlatformRequest):

2012-05-06  Kenichi Ishibashi  <bashi@chromium.org>

        Disallow unquoted -webkit-font-feature-settings tags
        https://bugs.webkit.org/show_bug.cgi?id=85362

        Reviewed by Kent Tamura.

        Disallow unquoted tags to follow the current draft.
        http://dev.w3.org/csswg/css3-fonts/#font-feature-settings-prop

        No new tests. css3/font-feature-settings-parsing.html was updated.

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseFontFeatureTag): Accepts only 4-characters string.

2012-05-06  Raphael Kubo da Costa  <rakuco@webkit.org>

        Unreviewed build fix for r116260.

        COMPILE_ASSERT() does not expect a string in its second parameter.

        * platform/graphics/TextRun.cpp:
        (WebCore):

2012-05-06  Rob Buis  <rbuis@rim.com>

        Shrink TextRun object size
        https://bugs.webkit.org/show_bug.cgi?id=85751

        Reviewed by Darin Adler.

        Reorder the member variables in TextRun so it shrinks from 56 to 40 bytes on my 64-bit build. This is important
        for SVG, since RenderSVGText shrinks because of this.

        Also add a compile assert for the expected object size.

        * platform/graphics/TextRun.cpp:
        (ExpectedTextRunSize):
        (WebCore):
        * platform/graphics/TextRun.h:
        (WebCore::TextRun::TextRun):
        (WebCore::TextRun::direction):
        (TextRun):

2012-05-06  Jonathan Dong  <jonathan.dong@torchmobile.com.cn>

        [BlackBerry] Autofill backing store implementation upstream
        https://bugs.webkit.org/show_bug.cgi?id=85575

        Reviewed by Rob Buis.

        Implemented class AutofillBackingStore which is responsible
        for handling interaction with autofill database.

        Replaced static function
        CredentialBackingStore* CredentialBackingStore::instance()
        with a helper function
        CredentialBackingStore& credentialBackingStore(),
        and used DEFINE_STATIC_LOCAL to construct the singleton
        object.
        Also removed unnecessary function close() and combined with
        the destructor of class CredentialBackingStore.

        Initial upstream, No new tests.

        * PlatformBlackBerry.cmake:
        * platform/network/blackberry/AutofillBackingStore.cpp: Added.
        (WebCore):
        (WebCore::autofillBackingStore):
        (WebCore::AutofillBackingStore::AutofillBackingStore):
        (WebCore::AutofillBackingStore::~AutofillBackingStore):
        (WebCore::AutofillBackingStore::open):
        (WebCore::AutofillBackingStore::add):
        (WebCore::AutofillBackingStore::update):
        (WebCore::AutofillBackingStore::contains):
        (WebCore::AutofillBackingStore::get):
        (WebCore::AutofillBackingStore::clear):
        * platform/network/blackberry/AutofillBackingStore.h: Added.
        (WebCore):
        (AutofillBackingStore):
        * platform/network/blackberry/CredentialBackingStore.cpp:
        (WebCore::credentialBackingStore):
        (WebCore::CredentialBackingStore::~CredentialBackingStore):
        * platform/network/blackberry/CredentialBackingStore.h:
        (CredentialBackingStore):
        (WebCore):
        * platform/network/blackberry/CredentialStorageBlackBerry.cpp:
        (WebCore::CredentialStorage::getFromPersistentStorage):

2012-05-06  MORITA Hajime  <morrita@google.com>

        [Shadow DOM] Node distribution should be refreshed before style recalc.
        https://bugs.webkit.org/show_bug.cgi?id=85259

        Reviewed by Dimitri Glazkov.

        Element::recalcStyle() calls child element's recalcStyle()
        recursively, following ShadowTree::recalcShadowTreeStyle(). But
        recalcShadowTreeStyle() should be called before such recursion if
        necessary.

        This is because style calculation and following renderer attachment
        of each child element depends on up-to-date node distribution result
        which is computed during the recalcShadowTreeStyle().

        Test: fast/dom/shadow/shadow-dynamic-style-change-via-mutation-and-selector.html

        * dom/Element.cpp: Moved recalcShadowTreeStyle() before child traversals.
        (WebCore::Element::recalcStyle):

2012-05-06  Adam Barth  <abarth@webkit.org>

        CSP should let sites both enforce one policy and monitor another
        https://bugs.webkit.org/show_bug.cgi?id=85561

        Reviewed by Eric Seidel.

        This patch lets us enforce and/or monitor multiple CSP policies.
        Rather than having a single directive list, we now have a vector of
        directive lists.

        Tests: http/tests/security/contentSecurityPolicy/combine-multiple-policies.html
               http/tests/security/contentSecurityPolicy/report-and-enforce.html

        * page/ContentSecurityPolicy.cpp:
        (WebCore::ContentSecurityPolicy::copyStateFrom):
        (WebCore::ContentSecurityPolicy::didReceiveHeader):
        (WebCore::ContentSecurityPolicy::deprecatedHeader):
        (WebCore::ContentSecurityPolicy::deprecatedHeaderType):
            - Even after this patch, workers aren't smart enough to enforce
              multiple policies.  They just use the first header, like they did
              before.  We'll need to teach workers how to enforce multiple
              policies in a future patch.
        (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::allowConnectFromSource):
        * page/ContentSecurityPolicy.h:
        * workers/DefaultSharedWorkerRepository.cpp:
        (WebCore::SharedWorkerScriptLoader::notifyFinished):
        * workers/WorkerMessagingProxy.cpp:
        (WebCore::WorkerMessagingProxy::startWorkerContext):

2012-05-06  Rob Buis  <rbuis@rim.com>

        InlineBox::setHasBadParent should be debug only
        https://bugs.webkit.org/show_bug.cgi?id=85748

        Reviewed by Eric Seidel.

        Do not provide InlineBox::setHasBadParent in release builds.

        * rendering/InlineBox.h:
        (InlineBox):
        (WebCore):
        (WebCore::InlineBox::setHasBadParent):

2012-05-06  Mike West  <mkwst@chromium.org>

        KURL::isBlankURL would be a nicer idiom than KURL::protocolIs("about")
        https://bugs.webkit.org/show_bug.cgi?id=85641

        Reviewed by Adam Barth.

        * dom/Document.cpp:
        (WebCore::shouldInheritSecurityOriginFromOwner):
        * page/ContentSecurityPolicy.cpp:
        (WebCore::CSPDirectiveList::allowObjectFromSource):
        (WebCore::CSPDirectiveList::allowChildFrameFromSource):
        * page/PageSerializer.cpp:
        (WebCore::SerializerMarkupAccumulator::appendCustomAttributes):
        (WebCore::PageSerializer::serializeFrame):
        * platform/KURL.cpp:
        (WebCore::KURL::isBlankURL):
        (WebCore):
        * platform/KURL.h:
        (KURL):
        (WebCore):

2012-05-06  Martin Robinson  <mrobinson@igalia.com>

        [TextureMapper] Layer images is uploaded to the GPU for each sync
        https://bugs.webkit.org/show_bug.cgi?id=85727

        Reviewed by Noam Rosenthal.

        No new tests. This does not change functionality,
        it only improves performance.

        * platform/graphics/texmap/TextureMapperLayer.cpp:
        (WebCore::TextureMapperLayer::updateBackingStore): Reset the needsDisplay
        and needsDisplayRect variables after uploading the layer image.

2012-05-06  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Convert isPageBoxVisible to use Internals interface.
        https://bugs.webkit.org/show_bug.cgi?id=85692

        Reviewed by Darin Adler.

        Add isPageBoxVisible functions, because it is able to work in the
        cross-port way through the Internals interface.

        No new tests, since we are improving here the infra-structure for testing
        a specific method.

        * testing/Internals.cpp:
        (WebCore):
        (WebCore::Internals::isPageBoxVisible):
        * testing/Internals.h:
        (Internals):
        * testing/Internals.idl:

2012-05-06  Eugene Klyuchnikov  <eustas.bug@gmail.com>

        Web Inspector: "Goto Function" filtering should be less restrictive.
        https://bugs.webkit.org/show_bug.cgi?id=85586

        Reviewed by Pavel Feldman.

        Added tests for generated regex.

        Changes:
        1) Avoid asterisks in filtering queue.
        2) Optimization: do not create regexp for each item.

        * inspector/front-end/FilteredItemSelectionDialog.js: 
        (WebInspector.FilteredItemSelectionDialog.prototype.get _itemsLoaded):
        Applied new filtering workflow.
        (WebInspector.FilteredItemSelectionDialog.prototype._checkItemAt):
        Removed.
        (WebInspector.FilteredItemSelectionDialog.prototype._createSearchRegExp):
        Removed unused "suffix" logic; changed the way regexp is composed from query.
        (WebInspector.FilteredItemSelectionDialog.prototype._filterItems):
        Applied new filtering workflow.
        (WebInspector.FilteredItemSelectionDialog.prototype._onKeyDown):
        Removed unused var.

2012-05-06  Kent Tamura  <tkent@chromium.org>

        Rename ICULocale to LocaleICU, part 2
        https://bugs.webkit.org/show_bug.cgi?id=85695

        Reviewed by Kentaro Hara.

        No behavior change

        * platform/text/LocaleICU.cpp: Rename ICULocale to LocaleICU.
        * platform/text/LocaleICU.h: ditto.
        Also, update obsolete comments.
        * platform/text/LocalizedDateICU.cpp: Rename ICULocale to LocaleICU.
        (WebCore::parseLocalizedDate):
        (WebCore::formatLocalizedDate):
        (WebCore::localizedDateFormatText):
        (WebCore::monthLabels):
        (WebCore::weekDayShortLabels):
        (WebCore::firstDayOfWeek):
        * platform/text/LocalizedNumberICU.cpp: ditto.
        (WebCore::convertToLocalizedNumber):
        (WebCore::convertFromLocalizedNumber):

2012-05-06  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Unreviewed. Build fixes for recent trunk changes.

        * platform/graphics/SimpleFontData.h:
        (SimpleFontData):
        * platform/graphics/wx/FontPlatformData.h:
        (FontPlatformData):
        (WebCore::FontPlatformData::isCompositeFontReference):
        * platform/graphics/wx/SimpleFontDataWx.cpp:
        (WebCore):
        (WebCore::SimpleFontData::getCompositeFontReferenceFontData):
        * plugins/mac/PluginViewMac.mm:
        * rendering/RenderObject.h:

2012-05-06  Andrey Kosyakov  <caseq@chromium.org>

        Web Inspector: take timeline frame mode out of experimental
        https://bugs.webkit.org/show_bug.cgi?id=85707

        Reviewed by Pavel Feldman.

        - remove "Vertical timeline overview" experiment;
        - add supportsFrameInstrumentation capability to InspectorTimelineAgent;
        - show frame mode selector conditionally on supportsFrameInstrumentation capability.

        * inspector/Inspector.json: Add Timeline.supportsFrameInstrumentation capability;
        * inspector/InspectorClient.h: Add supportsFrameInstrumentation();
        (InspectorClient):
        (WebCore::InspectorClient::supportsFrameInstrumentation):
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        * inspector/InspectorTimelineAgent.cpp:
        (WebCore::InspectorTimelineAgent::supportsFrameInstrumentation):
        (WebCore):
        (WebCore::InspectorTimelineAgent::InspectorTimelineAgent): Added FrameInstrumentationSupport parameter.
        * inspector/InspectorTimelineAgent.h:
        (WebCore):
        (WebCore::InspectorTimelineAgent::create): ditto.
        (InspectorTimelineAgent):
        * inspector/WorkerInspectorController.cpp: Updated call site for InspectorTimelineAgent::create() to indicate frame instrumentation not supported.
        (WebCore::WorkerInspectorController::WorkerInspectorController):
        * inspector/front-end/Settings.js:
        (WebInspector.ExperimentsSettings): Removed "Vertical Overview" experiment.
        * inspector/front-end/TimelineOverviewPane.js: Expose frame mode conditionally on capability, not the experiment.
        (WebInspector.TimelineOverviewPane):
        * inspector/front-end/inspector.js: Added initialization for Capabilities.timelineSupportsFrameInstrumentation;
        (WebInspector.doLoadedDone):

2012-05-06  Antti Koivisto  <antti@apple.com>

        Build fix.

        Not reviewed.

        * css/PropertySetCSSStyleDeclaration.cpp:

2012-05-04  Antti Koivisto  <antti@apple.com>

        Share stylesheet data structures between documents
        https://bugs.webkit.org/show_bug.cgi?id=85598

        Reviewed by Darin Adler.

        We currently make a copy of the data structures when restoring a cached stylesheet. This patch lets us share
        the data until someone uses CSSOM to modify the sheet.
        
        The patch implements copy-on-write for the internal style sheet data structures. If any mutation CSSOM API is
        invoked, we check if the stylesheet can be safely mutated (we are the only client, it is not cached). If not
        then the internal structures are copied and any existing CSSOM objects are re-attached to the new tree.
        
        Sharing can save significant amount of memory on sites with large stylesheets. For example if you have
        multiple articles open on wsj.com this saves ~2.6MB per tab.
        
        Test: http/tests/css/shared-stylesheet-mutation.html
              http/tests/css/shared-stylesheet-mutation-preconstruct.html

        * css/CSSFontFaceRule.cpp:
        (WebCore::CSSFontFaceRule::reattach):
        (WebCore):
        * css/CSSFontFaceRule.h:
        (CSSFontFaceRule):
        * css/CSSMediaRule.cpp:
        (WebCore::CSSMediaRule::insertRule):
        (WebCore::CSSMediaRule::deleteRule):
        (WebCore::CSSMediaRule::reattach):
        (WebCore):
        * css/CSSMediaRule.h:
        (CSSMediaRule):
        * css/CSSPageRule.cpp:
        (WebCore::CSSPageRule::setSelectorText):
        (WebCore::CSSPageRule::reattach):
        (WebCore):
        * css/CSSPageRule.h:
        (CSSPageRule):
        * css/CSSRule.cpp:
        (WebCore::CSSRule::reattach):
        
            After the internal stylerule tree has been copied, the existing wrappers are re-attached using recursive reattach() function.

        * css/CSSRule.h:
        (WebCore):
        (CSSRule):
        * css/CSSStyleRule.cpp:
        (WebCore::CSSStyleRule::setSelectorText):
        (WebCore::CSSStyleRule::reattach):
        (WebCore):
        * css/CSSStyleRule.h:
        (CSSStyleRule):
        * css/CSSStyleSheet.cpp:
        (WebCore::StyleSheetInternal::StyleSheetInternal):
        (WebCore::StyleSheetInternal::isCacheable):
        (WebCore::StyleSheetInternal::ruleAt):
        
            Add ruleAt(), use it for both wrapper creation and reattaching.  Remove createChildRuleCSSOMWrapper .

        (WebCore):
        (WebCore::StyleSheetInternal::wrapperInsertRule):
        (WebCore::StyleSheetInternal::wrapperDeleteRule):
        
            Invalidation moves to the calling wrapper.

        (WebCore::StyleSheetInternal::addedToMemoryCache):
        (WebCore::StyleSheetInternal::removedFromMemoryCache):
        (WebCore::CSSStyleSheet::willMutateRules):
        
            This is called whenever StyleSheetInternal is going to be mutated. It will do copy-on-write if needed.
            
            Usually invoked by CSSStyleSheet::RuleMutation RAII type.

        (WebCore::CSSStyleSheet::didMutateRules):
        
            This is called after the mutation is complete and will trigger the style recalc in the document.

        (WebCore::CSSStyleSheet::didMutate):
        
            This is called directly after mutations that don't change StyleSheetInternal so don't require copy-on-write.

        (WebCore::CSSStyleSheet::reattachChildRuleCSSOMWrappers):
        (WebCore::CSSStyleSheet::setDisabled):
        (WebCore::CSSStyleSheet::insertRule):
        (WebCore::CSSStyleSheet::deleteRule):
        * css/CSSStyleSheet.h:
        (StyleSheetInternal):
        (WebCore::StyleSheetInternal::hasOneClient):
        (WebCore::StyleSheetInternal::isMutable):
        (WebCore::StyleSheetInternal::setMutable):
        
            Track mutability. Mutation is allowed only after willMutate call.

        (WebCore::StyleSheetInternal::isInMemoryCache):
        
            Track if the object is in memory cache.

        (WebCore::CSSStyleSheet::clearOwnerRule):
        (CSSStyleSheet):
        * css/MediaList.cpp:
        (WebCore::MediaList::setMediaText):
        (WebCore::MediaList::deleteMedium):
        (WebCore::MediaList::appendMedium):
        (WebCore::MediaList::didMutate):
        (WebCore):
        (WebCore::MediaList::reattach):
        * css/MediaList.h:
        (MediaList):
        * css/PropertySetCSSStyleDeclaration.cpp:
        (WebCore::PropertySetCSSStyleDeclaration::setCssText):
        (WebCore::PropertySetCSSStyleDeclaration::setProperty):
        (WebCore::PropertySetCSSStyleDeclaration::removeProperty):
        (WebCore::PropertySetCSSStyleDeclaration::setPropertyInternal):
        (WebCore):
        (WebCore::StyleRuleCSSStyleDeclaration::willMutate):
        (WebCore::StyleRuleCSSStyleDeclaration::didMutate):
        (WebCore::StyleRuleCSSStyleDeclaration::reattach):
        (WebCore::InlineCSSStyleDeclaration::didMutate):
        * css/PropertySetCSSStyleDeclaration.h:
        (WebCore::PropertySetCSSStyleDeclaration::willMutate):
        (WebCore::PropertySetCSSStyleDeclaration::didMutate):
        (StyleRuleCSSStyleDeclaration):
        * css/WebKitCSSKeyframesRule.cpp:
        (WebCore::WebKitCSSKeyframesRule::setName):
        (WebCore::WebKitCSSKeyframesRule::insertRule):
        (WebCore::WebKitCSSKeyframesRule::deleteRule):
        (WebCore::WebKitCSSKeyframesRule::reattach):
        (WebCore):
        * css/WebKitCSSKeyframesRule.h:
        (WebKitCSSKeyframesRule):
        * css/WebKitCSSRegionRule.cpp:
        (WebCore::WebKitCSSRegionRule::reattach):
        * css/WebKitCSSRegionRule.h:
        (WebKitCSSRegionRule):
        * inspector/InspectorStyleSheet.cpp:
        (WebCore::InspectorStyleSheet::reparseStyleSheet):
        * loader/cache/CachedCSSStyleSheet.cpp:
        (WebCore::CachedCSSStyleSheet::~CachedCSSStyleSheet):
        (WebCore::CachedCSSStyleSheet::destroyDecodedData):
        (WebCore::CachedCSSStyleSheet::restoreParsedStyleSheet):
        
            Don't copy when restoring. It is no longer necessary.
            Set the cache bit on the stylesheet.

        (WebCore::CachedCSSStyleSheet::saveParsedStyleSheet):

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

        Unreviewed, rolling out r116221.
        http://trac.webkit.org/changeset/116221
        https://bugs.webkit.org/show_bug.cgi?id=85722

        broke builds that use -Wshorten-64-to-32 (Requested by pizlo
        on #webkit).

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore):
        (WebCore::WebGLRenderingContext::bufferData):
        (WebCore::WebGLRenderingContext::bufferSubData):
        (WebCore::WebGLRenderingContext::drawElements):
        (WebCore::WebGLRenderingContext::getVertexAttribOffset):
        (WebCore::WebGLRenderingContext::vertexAttribPointer):
        * html/canvas/WebGLRenderingContext.h:
        (WebGLRenderingContext):
        * html/canvas/WebGLRenderingContext.idl:

2012-05-05  Martin Robinson  <mrobinson@igalia.com>

        [GTK] WebKit should properly set the input method context window location
        https://bugs.webkit.org/show_bug.cgi?id=84981

        Reviewed by Gustavo Noronha Silva.

        * platform/gtk/GtkInputMethodFilter.cpp:
        (WebCore::GtkInputMethodFilter::setCursorRect): Add this method to plumb the
        cursor rect through to the input method.
        * platform/gtk/GtkInputMethodFilter.h: Add the new method declaration.

2012-05-05  Dean Jackson  <dino@apple.com>

        Add new Setting/Preference to disable requestAnimationFrame
        https://bugs.webkit.org/show_bug.cgi?id=85693

        Reviewed by Simon Fraser.

        Hook up the new WebPreference for disabling requestAnimationFrame
        to Settings. This isn't disabling the feature in the typical
        WebKit ENABLE() way - it's still available in the DOM, it's
        just that the animations will never be serviced. This allows a client
        to disable the machinery without breaking content (other than the
        animations).

        The new test is currently skipped on all platforms because toggling
        the preference interferes with the other tests that are running
        at the same time (and expect a working requestAnimationFrame).
        https://bugs.webkit.org/show_bug.cgi?id=85689

        Test: fast/animation/request-animation-frame-disabled.html

        * dom/ScriptedAnimationController.cpp:
        (WebCore::ScriptedAnimationController::serviceScriptedAnimations):
        (WebCore::ScriptedAnimationController::windowScreenDidChange):
        (WebCore::ScriptedAnimationController::scheduleAnimation):
        Check the setting before deciding to act.
        * page/Settings.cpp:
        (WebCore::Settings::Settings):
        * page/Settings.h:
        (WebCore::Settings::setRequestAnimationFrameEnabled):
        (WebCore::Settings::requestAnimationFrameEnabled):
        (Settings):

2012-05-05  Gustavo Noronha Silva  <gns@gnome.org>

        Unreviewed, make distcheck fix.

        * GNUmakefile.list.am: Add missing headers to the sources list.

2012-05-05  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: convert standalone functions save/append/savedURL/appendedToURL into WebInspector.FileManager object.
        https://bugs.webkit.org/show_bug.cgi?id=85710

        The idea is to have an object and be able to add/remove event listeners from it.

        Reviewed by Yury Semikhatsky.

        * English.lproj/localizedStrings.js:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * inspector/compile-front-end.py:
        * inspector/front-end/FileManager.js: Copied from Source/WebCore/inspector/front-end/InspectorFrontendHostStub.js.
        (WebInspector.FileManager):
        (WebInspector.FileManager.prototype.canSave):
        (WebInspector.FileManager.prototype.canAppend):
        (WebInspector.FileManager.prototype.append):
        (WebInspector.FileManager.prototype.appendedToURL):
        * inspector/front-end/HeapSnapshotView.js:
        (WebInspector.HeapProfileHeader.prototype.canSave):
        (WebInspector.HeapProfileHeader.prototype.save):
        * inspector/front-end/InspectorFrontendHostStub.js:
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/inspector.html:

2012-05-05  Zhenyao Mo  <zmo@google.com>

        vertexAttribPointer needs to reject large negative offsets
        https://bugs.webkit.org/show_bug.cgi?id=85117

        Reviewed by Kenneth Russell.

        * html/canvas/WebGLRenderingContext.cpp: Use long long for GLsizeiptr and GLintptr
        (WebCore):
        (WebCore::WebGLRenderingContext::bufferData):
        (WebCore::WebGLRenderingContext::bufferSubData):
        (WebCore::WebGLRenderingContext::drawElements):
        (WebCore::WebGLRenderingContext::getVertexAttribOffset):
        (WebCore::WebGLRenderingContext::vertexAttribPointer):
        * html/canvas/WebGLRenderingContext.h: Ditto
        (WebGLRenderingContext):
        * html/canvas/WebGLRenderingContext.idl: Ditto

2012-05-05  Andrey Kosyakov  <caseq@chromium.org>

        Web Inspector: add separate timeline overview item for the frame mode
        https://bugs.webkit.org/show_bug.cgi?id=85706

        - remove two-buttons horizontal/vertical mode switch from Timelines item of the timeline overview menu;
        - rename "Timeline" into "Events";
        - add "Frames" item;
        - replace overview sidebar icons with smaller, monochrome ones.

        * English.lproj/localizedStrings.js: Added "Frames" and "Events".
        * inspector/front-end/Images/statusbarButtonGlyphs.png: Added icon for "Memory".
        * inspector/front-end/TimelineOverviewPane.js:
        (WebInspector.TimelineOverviewPane):
        (WebInspector.TimelineOverviewPane.prototype._showEvents):
        (WebInspector.TimelineOverviewPane.prototype._showFrames):
        (WebInspector.TimelineOverviewPane.prototype._showMemoryGraph):
        (WebInspector.TimelineOverviewPane.prototype._setMode):
        * inspector/front-end/timelinePanel.css:
        (#timeline-overview-sidebar .sidebar-tree-item):
        (#timeline-overview-sidebar .sidebar-tree-item .titles.no-subtitle):
        (#timeline-overview-sidebar .icon):
        (.timeline-overview-sidebar-events .icon):
        (.timeline-overview-sidebar-frames .icon):
        (.timeline-overview-sidebar-memory .icon):

2012-05-05  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: save HeapSnapshot implementation.
        https://bugs.webkit.org/show_bug.cgi?id=85595

        HeapSnapshot specific implementation for loading was moved
        from ProfilesPanel to HeapProfileHeader class.

        Reviewed by Yury Semikhatsky.

        * inspector/front-end/HeapSnapshotView.js:
        (WebInspector.HeapSnapshotView.prototype.get profileWrapper):
        (WebInspector.HeapSnapshotView.prototype.get baseProfileWrapper):
        (WebInspector.HeapProfileHeader):
        (WebInspector.HeapProfileHeader.prototype.load.setProfileWait):
        (WebInspector.HeapProfileHeader.prototype.load.done):
        (WebInspector.HeapProfileHeader.prototype.load):
        (WebInspector.HeapProfileHeader.prototype._saveStatusUpdate):
        (WebInspector.HeapProfileHeader.prototype.pushJSONChunk):
        (WebInspector.HeapProfileHeader.prototype.finishHeapSnapshot):
        (WebInspector.HeapProfileHeader.prototype.canSave):
        (WebInspector.HeapProfileHeader.prototype.save):
        * inspector/front-end/InspectorFrontendAPI.js:
        (InspectorFrontendAPI.appendedToURL):
        * inspector/front-end/ProfilesPanel.js:
        (WebInspector.ProfilesPanel.prototype._registerProfileType):
        (WebInspector.ProfilesPanel.prototype._handleContextMenuEvent):
        (WebInspector.ProfilesPanel.prototype.loadHeapSnapshot):
        (WebInspector.ProfilesPanel.prototype._addHeapSnapshotChunk):
        (WebInspector.ProfilesPanel.prototype._finishHeapSnapshot):
        (WebInspector.ProfileSidebarTreeElement.prototype.set searchMatches):
        (WebInspector.ProfileSidebarTreeElement.prototype.handleContextMenuEvent):
        * inspector/front-end/inspector.js:
        (WebInspector.append):
        (WebInspector.appendedToURL):

2012-05-05  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: allow overriding the script mapping on the UI level
        https://bugs.webkit.org/show_bug.cgi?id=85702

        Reviewed by Yury Semikhatsky.

        This allows formatting update live locations all over the place automatically.

        * inspector/front-end/Script.js:
        (WebInspector.Script.prototype.rawLocationToUILocation):
        (WebInspector.Script.Location):
        (WebInspector.Script.Location.prototype.update):
        (WebInspector.Script.Location.prototype.dispose):
        * inspector/front-end/UISourceCode.js:
        (WebInspector.UISourceCode):
        (WebInspector.UISourceCode.prototype.addLiveLocation):
        (WebInspector.UISourceCode.prototype.removeLiveLocation):
        (WebInspector.UISourceCode.prototype.updateLiveLocations):
        (WebInspector.UISourceCode.prototype.overrideLocation):

2012-05-05  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: simplify the JavaScriptOutline dialog interaction.
        https://bugs.webkit.org/show_bug.cgi?id=85701

        Reviewed by Yury Semikhatsky.

        Removed bidirectional dependency between scripts panel and outline dialog.

        * inspector/front-end/FilteredItemSelectionDialog.js:
        (WebInspector.JavaScriptOutlineDialog):
        (WebInspector.JavaScriptOutlineDialog.show):
        (WebInspector.JavaScriptOutlineDialog.prototype.requestItems):
        (WebInspector.JavaScriptOutlineDialog.prototype._didBuildOutlineChunk):
        (WebInspector.JavaScriptOutlineDialog.prototype.selectItem):
        * inspector/front-end/ScriptFormatterWorker.js:
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype.addToWatch):
        (WebInspector.ScriptsPanel.prototype._showJavaScriptOutlineDialog):

2012-05-04  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: annotate ProfilerAgent.
        https://bugs.webkit.org/show_bug.cgi?id=85630

        Reviewed by Pavel Feldman.

        * inspector/Inspector.json:
        * inspector/InspectorProfilerAgent.cpp:
        (WebCore::InspectorProfilerAgent::createProfileHeader):
        (WebCore::InspectorProfilerAgent::createSnapshotHeader):
        (WebCore::InspectorProfilerAgent::getProfileHeaders):
        (WebCore):
        (WebCore::InspectorProfilerAgent::getProfile):
        * inspector/InspectorProfilerAgent.h:
        (InspectorProfilerAgent):
        * inspector/front-end/CSSSelectorProfileView.js:
        * inspector/front-end/HeapSnapshotView.js:
        (WebInspector.HeapSnapshotProfileType.prototype.createProfile):
        * inspector/front-end/ProfileView.js:
        * inspector/front-end/ProfilesPanel.js:
        (WebInspector.ProfilesPanel.prototype.addProfileHeader):
        (WebInspector.ProfilesPanel.prototype._addHeapSnapshotChunk):
        (WebInspector.ProfilerDispatcher.prototype.resetProfiles):

2012-05-04  Gustavo Noronha Silva  <gns@gnome.org>

        [GTK] Simplify how libWebCoreModules is linked in, and fix WebKit2 build
        https://bugs.webkit.org/show_bug.cgi?id=85691

        * GNUmakefile.am: link libWebCoreModules into libWebCore.

2012-05-04  Kent Tamura  <tkent@chromium.org>

        Rename ICULocale to LocaleICU, part 1
        https://bugs.webkit.org/show_bug.cgi?id=85688

        Reviewed by Kentaro Hara.

        Rename it for consistency. Our convention is Foo<Platform>.{cpp,h}.
        This patch changes only file names. We'll rename ICULocale class
        by a following patch.

        No behavior changes.

        * WebCore.gypi:
        * platform/text/LocaleICU.cpp: Renamed from Source/WebCore/platform/text/ICULocale.cpp.
        * platform/text/LocaleICU.h: Renamed from Source/WebCore/platform/text/ICULocale.h.
        * platform/text/LocalizedDateICU.cpp: Rename ICULocale.h to LocaleICU.h.
        * platform/text/LocalizedNumberICU.cpp: ditto.

2012-05-04  Julien Chaffraix  <jchaffraix@webkit.org>

        Leaf non self-painting layers should bail out early in RenderLayer::paintLayer
        https://bugs.webkit.org/show_bug.cgi?id=85678

        Reviewed by Darin Adler.

        Performance optimization, no expected change in behavior.

        The gist of the change is that leaf non self-painting layers don't need to be painted as their
        associated RenderBoxModelObject should properly paint itself without any help.

        For RenderLayer trees that have a large number of leafs nodes (like a table with a leaf RenderLayer for
        each cells), not bailing out is a big overhead as it ends up doing a lot of computation for no real
        painting. See http://dglazkov.github.com/performance-tests/biggrid.html for a benchmark for that. On
        my machine, it reduces the paint time when scrolling to 70ms from 120ms (45% speedup).

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::paintLayer):

2012-05-04  Rob Buis  <rbuis@rim.com>

        Remove InlineBox::next()
        https://bugs.webkit.org/show_bug.cgi?id=85668

        Reviewed by Nikolas Zimmermann.

        InlineBox::next() not needed since nextOnLine() does the same.

        * rendering/InlineBox.h:
        (InlineBox):
        * rendering/InlineFlowBox.h:
        (WebCore::InlineFlowBox::setConstructed):

2012-05-04  Chris Rogers  <crogers@google.com>

        Oscillator must implement noteOn() and noteOff()
        https://bugs.webkit.org/show_bug.cgi?id=85236

        Reviewed by Kenneth Russell.

        Test: webaudio/oscillator-scheduling.html
        to be landed separately to get proper platform baselines

        * Modules/webaudio/AudioBufferSourceNode.cpp:
        (WebCore::AudioBufferSourceNode::process):
        Simplify/remove zeroing-out silence at end of buffer, since it's now handled in the base-class AudioScheduledSourceNode::updateSchedulingInfo().

        * Modules/webaudio/AudioContext.cpp:
        (WebCore::AudioContext::createBufferSource):
        Improve comment about ownership and dynamic-lifetime of AudioBufferSourceNode.

        (WebCore::AudioContext::createOscillator):
        AudioContext keeps a reference to the Oscillator and that reference is released in AudioScheduledSourceNode,
        when it has finished playing.

        * Modules/webaudio/AudioScheduledSourceNode.h:
        * Modules/webaudio/AudioScheduledSourceNode.cpp:
        (WebCore::AudioScheduledSourceNode::updateSchedulingInfo):
        updateSchedulingInfo() is now responsible for zeroing out the very start (before a note starts)
        and the very end (after note ends) of the output AudioBus.  We've also simplified the number
        of arguments passed to this method, because of this. It now handles playbackState transition to FINISHED_STATE.

        * Modules/webaudio/Oscillator.cpp:
        (WebCore::Oscillator::Oscillator):
        (WebCore::Oscillator::calculateSampleAccuratePhaseIncrements):
        The frequency value needs to snap immediately to its correct value the very first time.
        This bug needs to be fixed here so that the Oscillator layout scheduling test works correctly.

        (WebCore::Oscillator::process):
        Since Oscillator in now changing to be a AudioScheduledSourceNode, we need to call AudioScheduledSourceNode::updateSchedulingInfo()
        to handle playbackState for us.

        (WebCore::Oscillator::propagatesSilence):
        Add scheduling logic for propagatesSilence().

        (Oscillator):
        * Modules/webaudio/Oscillator.idl:
        Add noteOn(), noteOff() methods and playbackState according to specification.

2012-05-04  Andy Estes  <aestes@apple.com>

        Remove uses of ASSERT(false)
        https://bugs.webkit.org/show_bug.cgi?id=85686

        Reviewed by Dean Jackson.

        Replace uses of ASSERT(false) with ASSERT_NOT_REACHED(). Also, in two places, there was code structured like:

        if (expr) {
            // do something
        } else {
            ASSERT(false);
        }

        Replace this with:

        ASSERT(expr);
        if (!expr)
            return;

        // do something

        * Modules/webdatabase/DatabaseTracker.cpp:
        (WebCore::DatabaseTracker::deleteOrigin):
        (WebCore::DatabaseTracker::doneCreatingDatabase):
        (WebCore::DatabaseTracker::doneDeletingDatabase):
        (WebCore::DatabaseTracker::deleteDatabase):
        * bridge/objc/objc_instance.mm:
        (ObjcInstance::invokeObjcMethod):
        * bridge/objc/objc_utility.mm:
        (JSC::Bindings::convertObjcValueToValue):
        (JSC::Bindings::objcValueTypeForType):
        * dom/Node.cpp:
        (WebCore::Node::createRenderer):
        * loader/icon/IconDatabase.cpp:
        (WebCore::IconDatabase::setIconURLForPageURLInSQLDatabase):
        (WebCore::IconDatabase::setIconIDForPageURLInSQLDatabase):
        * platform/graphics/GraphicsContext3D.cpp:
        (WebCore::doPacking):
        * platform/text/BidiResolver.h:
        (WebCore::::createBidiRunsForLine):

2012-05-04  Noel Gordon  <noel.gordon@gmail.com>

        [CG] Minor refactor of ImageBuffer::CGImageToDataURL and its callers
        https://bugs.webkit.org/show_bug.cgi?id=85280

        Reviewed by Kenneth Russell.

        This patch means to simplify the diff of an upcoming patch. Refactoring
        here in preparation for that patch.

        No new tests. No behavioral change. Covered by canvas 2d and 3d tests:
          canvas/philip/tests/*toDataURL*.html
          fast/canvas/webgl/premultiplyalpha-test.html

        * platform/graphics/cg/ImageBufferCG.cpp:
        (WebCore::CGImageToDataURL): Move the invalid image (!image) test here.
        The comments are about JPEG images; say that. Rename out to base64Data.
        (WebCore::ImageBuffer::toDataURL): Remove the !image test.
        (WebCore::ImageDataToDataURL): Move and define variables where used and
        make the code flow read similarly to toDataURL. Remove the !image test.

2012-05-04  Shawn Singh  <shawnsingh@chromium.org>

        [chromium] Changes to layer tree structure need to be tracked properly
        https://bugs.webkit.org/show_bug.cgi?id=85421

        Reviewed by Adrienne Walker.

        Unit test added: TreeSynchronizerTest.syncSimpleTreeAndTrackStackingOrderChange

        Earlier, we were relying on WebCore behavior that always called
        setNeedsDisplay whenever the layer tree structure changed.
        However, in general it is more correct to consider layer tree
        changes even when things don't need repainting; for example Aura
        code is encountring this bug now. This patch corrects the
        compositor so that layer tree structural changes are considered
        property changes, without requiring that layers needed to be
        repainted.

        * platform/graphics/chromium/LayerChromium.cpp:
        (WebCore::LayerChromium::LayerChromium):
        (WebCore::LayerChromium::insertChild):
        (WebCore::LayerChromium::pushPropertiesTo):
        * platform/graphics/chromium/LayerChromium.h:
        (LayerChromium):
        * platform/graphics/chromium/cc/CCLayerImpl.cpp:
        (WebCore::CCLayerImpl::setStackingOrderChanged):
        (WebCore):
        * platform/graphics/chromium/cc/CCLayerImpl.h:
        (CCLayerImpl):

2012-05-04  Jeffrey Pfau  <jpfau@apple.com>

        Unreviewed; build fix after r116191.

        * bindings/js/JSEventListener.h:

2012-05-04  Enrica Casucci  <enrica@apple.com>

        REGRESSION: Cursor jumps to the first line after deleting the last word.
        https://bugs.webkit.org/show_bug.cgi?id=85334
        <rdar://problem/11210059>

        Reviewed by Ryosuke Niwa.

        This regression was introduced with the work to remove redundant divs.
        When we decide to remove a DIV, we need to adjust the selection, if it is
        expressed in terms of the node being removed. The new position was computed
        using updatePositionForNodeRemoval that was not designed for the case where we
        remove preserving children.
        This patch adds a new method to CompositeEditCommand to do this properly.
        
        Test: editing/deleting/delete-word-from-unstyled-div.html

        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::isRemovableBlock): Code clenup.
        (WebCore::CompositeEditCommand::updatePositionForNodeRemovalPreservingChildren): Added.
         * editing/CompositeEditCommand.h:
        * editing/DeleteSelectionCommand.cpp:
        (WebCore::DeleteSelectionCommand::removeRedundantBlocks): Uses updatePositionForNodeRemovalPreservingChildren.

2012-05-04  Jeffrey Pfau  <jpfau@apple.com>

        Prevent early EventListener deletion
        https://bugs.webkit.org/show_bug.cgi?id=73970

        Reviewed by Oliver Hunt.

        Test: fast/events/attribute-listener-deletion-crash.html

        * bindings/js/JSEventListener.h:
        (WebCore::JSEventListener::jsFunction):

2012-05-04  Yongjun Zhang  <yongjun_zhang@apple.com>

        Add "combining short stroke overlay character (u0335)" to lookalike characters blacklist.
        https://bugs.webkit.org/show_bug.cgi?id=85440

        Reviewed by David Kilzer.

        We should add u0335 to the characters blacklist.

        * platform/mac/WebCoreNSURLExtras.mm:
        (WebCore::isLookalikeCharacter):

2012-05-04  Satoru Takabayashi  <satorux@chromium.org>

        [chromium] Add plumbing for file display names for drag and drop
        https://bugs.webkit.org/show_bug.cgi?id=85673

        Reviewed by Darin Fisher.

        No new tests: this change itself shouldn't change existing behavior.

        * platform/chromium/ChromiumDataObject.cpp:
        (WebCore::ChromiumDataObject::addFilename):
        * platform/chromium/ChromiumDataObject.h:
        (ChromiumDataObject):

2012-05-04  Levi Weintraub  <leviw@chromium.org>

        Correct pixel snapping in RenderSVGRoot::paintReplaced
        https://bugs.webkit.org/show_bug.cgi?id=85671

        Reviewed by Eric Seidel.

        SVG root elements are still painted on pixel boundaries, so their children should
        apply transforms based on their actual painted location, not their sub-pixel
        one. This corrects a clipping and painting issue where these sub-pixel units are
        incorrectly applied to the graphics context.

        Covered by existing tests when sub-pixel layout is enabled.

        * rendering/svg/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::paintReplaced):

2012-05-04  Adam Barth  <abarth@webkit.org>

        Refactor CSP state to prepare for having both a ReportOnly and an Enforced policy
        https://bugs.webkit.org/show_bug.cgi?id=85662

        Reviewed by Eric Seidel.

        This patch refactors the ContentSecurityPolicy state into a separate
        DirectiveList class to prepare for
        https://bugs.webkit.org/show_bug.cgi?id=85561, which will cause us to
        need two directive lists: one for enforcement and one for monitoring.

        This patch shouldn't cause any change in behavior.

        * page/ContentSecurityPolicy.cpp:
        (CSPDirectiveList):
        (WebCore::CSPDirectiveList::header):
        (WebCore::CSPDirectiveList::headerType):
        (WebCore::CSPDirectiveList::denyIfEnforcingPolicy):
        (WebCore):
        (WebCore::CSPDirectiveList::CSPDirectiveList):
        (WebCore::CSPDirectiveList::create):
        (WebCore::CSPDirectiveList::reportViolation):
        (WebCore::CSPDirectiveList::logUnrecognizedDirective):
        (WebCore::CSPDirectiveList::checkEval):
        (WebCore::CSPDirectiveList::operativeDirective):
        (WebCore::CSPDirectiveList::checkInlineAndReportViolation):
        (WebCore::CSPDirectiveList::checkEvalAndReportViolation):
        (WebCore::CSPDirectiveList::checkSourceAndReportViolation):
        (WebCore::CSPDirectiveList::allowJavaScriptURLs):
        (WebCore::CSPDirectiveList::allowInlineEventHandlers):
        (WebCore::CSPDirectiveList::allowInlineScript):
        (WebCore::CSPDirectiveList::allowInlineStyle):
        (WebCore::CSPDirectiveList::allowEval):
        (WebCore::CSPDirectiveList::allowScriptFromSource):
        (WebCore::CSPDirectiveList::allowObjectFromSource):
        (WebCore::CSPDirectiveList::allowChildFrameFromSource):
        (WebCore::CSPDirectiveList::allowImageFromSource):
        (WebCore::CSPDirectiveList::allowStyleFromSource):
        (WebCore::CSPDirectiveList::allowFontFromSource):
        (WebCore::CSPDirectiveList::allowMediaFromSource):
        (WebCore::CSPDirectiveList::allowConnectFromSource):
        (WebCore::CSPDirectiveList::parse):
        (WebCore::CSPDirectiveList::parseDirective):
        (WebCore::CSPDirectiveList::parseReportURI):
        (WebCore::CSPDirectiveList::createCSPDirective):
        (WebCore::CSPDirectiveList::applySandboxPolicy):
        (WebCore::CSPDirectiveList::addDirective):
        (WebCore::ContentSecurityPolicy::ContentSecurityPolicy):
        (WebCore::ContentSecurityPolicy::~ContentSecurityPolicy):
        (WebCore::ContentSecurityPolicy::copyStateFrom):
        (WebCore::ContentSecurityPolicy::didReceiveHeader):
        (WebCore::ContentSecurityPolicy::setOverrideAllowInlineStyle):
        (WebCore::ContentSecurityPolicy::header):
        (WebCore::ContentSecurityPolicy::headerType):
        (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::allowConnectFromSource):
        * page/ContentSecurityPolicy.h:
        (WebCore):
        * workers/WorkerMessagingProxy.cpp:
        (WebCore::WorkerMessagingProxy::startWorkerContext):

2012-05-04  Abhishek Arya  <inferno@chromium.org>

        ASSERT(beforeChildAnonymousContainer->isTable()); fails in RenderBlock::addChildIgnoringAnonymousColumnBlocks.
        https://bugs.webkit.org/show_bug.cgi?id=84606

        Reviewed by Julien Chaffraix.

        RenderBlock::removeChild forgot to set display on the anonymous block, causing it
        to display as INLINE. To prevent this kind of failure in future, we replace
        createAnonymousStyle with createAnonymousStyleWithDisplay to make everyone explictly
        pass display as the argument.

        Test: fast/block/block-add-child-crash.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::removeChild): 
        (WebCore::RenderBlock::createAnonymousWithParentRendererAndDisplay):
        (WebCore::RenderBlock::createAnonymousColumnsWithParentRenderer):
        (WebCore::RenderBlock::createAnonymousColumnSpanWithParentRenderer):
        * rendering/RenderInline.cpp:
        (WebCore::updateStyleOfAnonymousBlockContinuations):
        (WebCore::RenderInline::addChildIgnoringContinuation):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::propagateStyleToAnonymousChildren):
        * rendering/RenderRuby.cpp:
        (WebCore::createAnonymousRubyInlineBlock):
        * rendering/RenderRubyRun.cpp:
        (WebCore::RenderRubyRun::createRubyBase):
        (WebCore::RenderRubyRun::staticCreateRubyRun):
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::createAnonymousWithParentRenderer):
        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::createAnonymousWithParentRenderer):
        * rendering/RenderTableRow.cpp:
        (WebCore::RenderTableRow::createAnonymousWithParentRenderer):
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::createAnonymousWithParentRenderer):
        * rendering/mathml/RenderMathMLBlock.cpp:
        (WebCore::RenderMathMLBlock::createAlmostAnonymousBlock):
        * rendering/mathml/RenderMathMLRow.cpp:
        (WebCore::RenderMathMLRow::createAnonymousWithParentRenderer):
        * rendering/mathml/RenderMathMLSubSup.cpp:
        (WebCore::RenderMathMLSubSup::addChild):
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::createAnonymousStyleWithDisplay):
        * rendering/style/RenderStyle.h:

2012-04-27  Erik Arvidsson  <arv@chromium.org>

        WebKit IDL does not use exception syntax
        https://bugs.webkit.org/show_bug.cgi?id=85100

        Reviewed by Dimitri Glazkov.

        This adds support for exception ExceptionName { ... } which currently sets a flag
        on the domClass.

        Binding tests updated.

        * Modules/indexeddb/IDBDatabaseException.idl:
        * Modules/webdatabase/SQLException.idl:
        * bindings/scripts/IDLParser.pm:
        (ParseInterface):
        (DetermineParseMode):
        (ProcessSection):
        * bindings/scripts/IDLStructure.pm:
        * bindings/scripts/test/CPP/WebDOMTestException.cpp: Added.
        (WebDOMTestException::WebDOMTestExceptionPrivate::WebDOMTestExceptionPrivate):
        (WebDOMTestException::WebDOMTestExceptionPrivate):
        (WebDOMTestException::WebDOMTestException):
        (WebDOMTestException::operator=):
        (WebDOMTestException::impl):
        (WebDOMTestException::~WebDOMTestException):
        (WebDOMTestException::name):
        (toWebCore):
        (toWebKit):
        * bindings/scripts/test/CPP/WebDOMTestException.h: Added.
        (WebCore):
        (WebDOMTestException):
        * bindings/scripts/test/GObject/WebKitDOMTestException.cpp: Added.
        (WebKit):
        (WebKit::kit):
        (WebKit::core):
        (WebKit::wrapTestException):
        (webkit_dom_test_exception_finalize):
        (webkit_dom_test_exception_set_property):
        (webkit_dom_test_exception_get_property):
        (webkit_dom_test_exception_constructed):
        (webkit_dom_test_exception_class_init):
        (webkit_dom_test_exception_init):
        (webkit_dom_test_exception_get_name):
        * bindings/scripts/test/GObject/WebKitDOMTestException.h: Added.
        (_WebKitDOMTestException):
        (_WebKitDOMTestExceptionClass):
        * bindings/scripts/test/GObject/WebKitDOMTestExceptionPrivate.h: Added.
        (WebKit):
        * bindings/scripts/test/JS/JSTestException.cpp: Added.
        (WebCore):
        (WebCore::JSTestExceptionConstructor::JSTestExceptionConstructor):
        (WebCore::JSTestExceptionConstructor::finishCreation):
        (WebCore::JSTestExceptionConstructor::getOwnPropertySlot):
        (WebCore::JSTestExceptionConstructor::getOwnPropertyDescriptor):
        (WebCore::JSTestExceptionPrototype::self):
        (WebCore::JSTestException::JSTestException):
        (WebCore::JSTestException::finishCreation):
        (WebCore::JSTestException::createPrototype):
        (WebCore::JSTestException::destroy):
        (WebCore::JSTestException::~JSTestException):
        (WebCore::JSTestException::getOwnPropertySlot):
        (WebCore::JSTestException::getOwnPropertyDescriptor):
        (WebCore::jsTestExceptionName):
        (WebCore::jsTestExceptionConstructor):
        (WebCore::JSTestException::getConstructor):
        (WebCore::isObservable):
        (WebCore::JSTestExceptionOwner::isReachableFromOpaqueRoots):
        (WebCore::JSTestExceptionOwner::finalize):
        (WebCore::toJS):
        (WebCore::toTestException):
        * bindings/scripts/test/JS/JSTestException.h: Added.
        (WebCore):
        (JSTestException):
        (WebCore::JSTestException::create):
        (WebCore::JSTestException::createStructure):
        (WebCore::JSTestException::impl):
        (WebCore::JSTestException::releaseImpl):
        (WebCore::JSTestException::releaseImplIfNotNull):
        (JSTestExceptionOwner):
        (WebCore::wrapperOwner):
        (WebCore::wrapperContext):
        (JSTestExceptionPrototype):
        (WebCore::JSTestExceptionPrototype::create):
        (WebCore::JSTestExceptionPrototype::createStructure):
        (WebCore::JSTestExceptionPrototype::JSTestExceptionPrototype):
        (JSTestExceptionConstructor):
        (WebCore::JSTestExceptionConstructor::create):
        (WebCore::JSTestExceptionConstructor::createStructure):
        * bindings/scripts/test/ObjC/DOMTestException.h: Added.
        * bindings/scripts/test/ObjC/DOMTestException.mm: Added.
        (-[DOMTestException dealloc]):
        (-[DOMTestException finalize]):
        (-[DOMTestException name]):
        (core):
        (kit):
        * bindings/scripts/test/ObjC/DOMTestExceptionInternal.h: Added.
        (WebCore):
        * bindings/scripts/test/TestException.idl: Copied from Source/WebCore/xml/XPathException.idl.
        * bindings/scripts/test/V8/V8TestException.cpp: Added.
        (WebCore):
        (TestExceptionV8Internal):
        (WebCore::TestExceptionV8Internal::V8_USE):
        (WebCore::TestExceptionV8Internal::nameAttrGetter):
        (WebCore::ConfigureV8TestExceptionTemplate):
        (WebCore::V8TestException::GetRawTemplate):
        (WebCore::V8TestException::GetTemplate):
        (WebCore::V8TestException::HasInstance):
        (WebCore::V8TestException::wrapSlow):
        (WebCore::V8TestException::derefObject):
        * bindings/scripts/test/V8/V8TestException.h: Added.
        (WebCore):
        (V8TestException):
        (WebCore::V8TestException::toNative):
        (WebCore::V8TestException::wrap):
        (WebCore::toV8):
        * dom/DOMCoreException.idl:
        * dom/EventException.idl:
        * dom/RangeException.idl:
        * fileapi/FileException.idl:
        * fileapi/OperationNotAllowedException.idl:
        * svg/SVGException.idl:
        * xml/XMLHttpRequestException.idl:
        * xml/XPathException.idl:

2012-05-04  Rafael Weinstein  <rafaelw@chromium.org>

        V8RecursionScope not declared in V8Proxy::newInstance which causes ASSERT() failure from NPAPI
        https://bugs.webkit.org/show_bug.cgi?id=85659

        Reviewed by Ojan Vafai.

        Added a stack-allocted V8RecursionScope to the newInstance call.

        No new tests. No change in observable behavior.

        * bindings/v8/V8Proxy.cpp:
        (WebCore::V8Proxy::newInstance):

2012-05-04  Joshua Bell  <jsbell@chromium.org>

        IndexedDB: Remove all index metadata records when deleting an index
        https://bugs.webkit.org/show_bug.cgi?id=85557

        Reviewed by Tony Chang.

        An assert is hit when re-loading database from backing store due to stale index
        metadata entry. Do a range delete to clear all metadata entries when deleting an
        index. Define metadata entries as enum and limits as consts instead of hardcoded ints.

        No new tests - issue does not repro as layout test. Will land test in Chromium.

        * Modules/indexeddb/IDBLevelDBBackingStore.cpp:
        (WebCore::getBool): Helper functions; replaces pattern of putInt()/read only lead byte.
        (WebCore):
        (WebCore::putBool):
        (WebCore::IDBLevelDBBackingStore::getObjectStores): Skip stale data. Use enums, helpers.
        (WebCore::IDBLevelDBBackingStore::createObjectStore): Use enums.
        (WebCore::IDBLevelDBBackingStore::deleteObjectStore): Use enums.
        (WebCore::getNewVersionNumber): Use enums.
        (WebCore::IDBLevelDBBackingStore::getIndexes): Skip stale data. Use enums, helpers.
        (WebCore::getNewIndexId): Use enums.
        (WebCore::IDBLevelDBBackingStore::createIndex): Use enums.
        (WebCore::IDBLevelDBBackingStore::deleteIndex): Delete metadata by range.
        * Modules/indexeddb/IDBLevelDBCoding.cpp:
        (IDBLevelDBCoding): Add constants for metadata maximum values.
        (WebCore::IDBLevelDBCoding::encodeBool):
        (WebCore::IDBLevelDBCoding::decodeBool):
        (WebCore::IDBLevelDBCoding::ObjectStoreMetaDataKey::encodeMaxKey): Use consts.
        (WebCore::IDBLevelDBCoding::IndexMetaDataKey::encodeMaxKey): Use consts.
        * Modules/indexeddb/IDBLevelDBCoding.h:
        (IDBLevelDBCoding): Expose enums for metadata types.

2012-05-04  Anders Carlsson  <andersca@apple.com>

        Move markPagesForFullStyleRecalc to PageCache
        https://bugs.webkit.org/show_bug.cgi?id=85664

        Reviewed by Dan Bernstein.

        Instead of going through all the history items in the back/forward list looking for cached pages, just iterate over the cached pages in the page.

        * history/BackForwardController.cpp:
        * history/BackForwardController.h:
        * history/HistoryItem.cpp:
        * history/HistoryItem.h:
        * history/PageCache.cpp:
        (WebCore::PageCache::markPagesForFullStyleRecalc):
        (WebCore):
        * history/PageCache.h:
        (PageCache):
        * page/Frame.cpp:
        (WebCore::Frame::setPageAndTextZoomFactors):
        * page/Page.cpp:
        (WebCore::Page::setDeviceScaleFactor):
        (WebCore::Page::setPagination):

2012-05-04  Tony Chang  <tony@chromium.org>

        The computed style of flex-item-align should never be auto.
        https://bugs.webkit.org/show_bug.cgi?id=85656

        Reviewed by Ojan Vafai.

        If the node lacks a parent and flex-item-align is auto, we should
        return stretch. This was recently clarified in the spec.

        New testcase in css3/flexbox/css-properties.html.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):

2012-05-04  Christophe Dumez  <christophe.dumez@intel.com>

        [soup] URL of the ResourceResponse passed to willSendRequest is incorrect
        https://bugs.webkit.org/show_bug.cgi?id=85072

        Reviewed by Gustavo Noronha Silva.

        Store the response message by catching the "got-headers" signal so
        that it can be passed later to willSendRequest() in case of
        redirection. This is required because the SoupMessage headers and URL
        have already been updated once restartedCallback() is called.

        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore):
        (WebCore::gotHeadersCallback):
        (WebCore::restartedCallback):
        (WebCore::sendRequestCallback):
        (WebCore::startHTTPRequest):

2012-05-04  Ian Vollick  <vollick@chromium.org>

        [chromium] CCProxy's shouldn't try to draw if there is no layer renderer
        https://bugs.webkit.org/show_bug.cgi?id=85218

        Reviewed by Adrienne Walker.

        * platform/graphics/chromium/cc/CCThreadProxy.cpp:
        (WebCore::CCThreadProxy::scheduledActionDrawAndSwapInternal):

2012-05-04  Rob Buis  <rbuis@rim.com>

        [BlackBerry] Rendering bmp file as text file when Content-Type:image/x-ms-bmp from apache web server.
        https://bugs.webkit.org/show_bug.cgi?id=85036

        Reviewed by Antonio Gomes.

        Move getNormalizedMIMEType from WebKit into MIMETypeRegistry. This way we support uncommon mime types like image/pjpeg
        and image/x-ms-bmp out of the box since we map to the more common image/jpeg and image/bmp respectively.

        * platform/MIMETypeRegistry.cpp:
        (WebCore::initializeSupportedImageMIMETypes):
        (WebCore::MIMETypeRegistry::isSupportedImageMIMEType):
        (WebCore::MIMETypeRegistry::isSupportedImageResourceMIMEType):
        (WebCore):
        (WebCore::mimeTypeAssociationMap):
        (WebCore::MIMETypeRegistry::getNormalizedMIMEType):
        * platform/MIMETypeRegistry.h:
        (MIMETypeRegistry):

2012-05-04  Sami Kyostila  <skyostil@chromium.org>

        [chromium] Revert compositor layer scrolling
        https://bugs.webkit.org/show_bug.cgi?id=85644

        Reviewed by Steve Block.

        This patch reverts the following commits because they were found to
        trigger crashes. See discussion at http://code.google.com/p/chromium/issues/detail?id=124393.

            [chromium] Allow scrolling non-root layers in the compositor thread
            http://trac.webkit.org/changeset/114651

            [chromium] Don't crash when scrolling empty layer tree
            http://trac.webkit.org/changeset/114761

            [chromium] Don't keep pointers to released layer tree
            http://trac.webkit.org/changeset/115080

        * platform/graphics/chromium/ContentLayerChromium.cpp:
        * platform/graphics/chromium/ContentLayerChromium.h:
        (ContentLayerChromium):
        * platform/graphics/chromium/GraphicsLayerChromium.h:
        (GraphicsLayerChromium):
        * platform/graphics/chromium/LayerChromium.cpp:
        (WebCore::LayerChromium::pushPropertiesTo):
        * platform/graphics/chromium/LayerChromium.h:
        (LayerChromium):
        * platform/graphics/chromium/cc/CCLayerImpl.cpp:
        * platform/graphics/chromium/cc/CCLayerImpl.h:
        * platform/graphics/chromium/cc/CCLayerTreeHost.cpp:
        (WebCore::CCLayerTreeHost::applyScrollAndScale):
        * platform/graphics/chromium/cc/CCLayerTreeHostCommon.h:
        (CCLayerTreeHostCommon):
        * platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:
        (WebCore::CCLayerTreeHostImpl::CCLayerTreeHostImpl):
        (WebCore::CCLayerTreeHostImpl::startPageScaleAnimation):
        (WebCore::CCLayerTreeHostImpl::calculateRenderSurfaceLayerList):
        (WebCore::CCLayerTreeHostImpl::contentSize):
        (WebCore::CCLayerTreeHostImpl::prepareToDraw):
        (WebCore::findScrollLayer):
        (WebCore::CCLayerTreeHostImpl::setRootLayer):
        (WebCore::CCLayerTreeHostImpl::setPageScaleFactorAndLimits):
        (WebCore):
        (WebCore::CCLayerTreeHostImpl::adjustScrollsForPageScaleChange):
        (WebCore::CCLayerTreeHostImpl::setPageScaleDelta):
        (WebCore::CCLayerTreeHostImpl::applyPageScaleDeltaToScrollLayer):
        (WebCore::CCLayerTreeHostImpl::updateMaxScrollPosition):
        (WebCore::CCLayerTreeHostImpl::scrollBegin):
        (WebCore::CCLayerTreeHostImpl::scrollBy):
        (WebCore::CCLayerTreeHostImpl::scrollEnd):
        (WebCore::CCLayerTreeHostImpl::pinchGestureUpdate):
        (WebCore::CCLayerTreeHostImpl::computePinchZoomDeltas):
        (WebCore::CCLayerTreeHostImpl::makeScrollAndScaleSet):
        (WebCore::CCLayerTreeHostImpl::processScrollDeltas):
        (WebCore::CCLayerTreeHostImpl::animatePageScale):
        * platform/graphics/chromium/cc/CCLayerTreeHostImpl.h:
        (WebCore::CCLayerTreeHostImpl::releaseRootLayer):
        (WebCore::CCLayerTreeHostImpl::scrollLayer):
        (CCLayerTreeHostImpl):

2012-05-04  Ojan Vafai  <ojan@chromium.org>

        Remove file that was deleted in http://trac.webkit.org/changeset/116085/.
        For some reason, this was breaking the chromium build (probably a gyp bug
        since chromium shouldn't be pulling in this file).

        * WebCore.gypi:

2012-05-04  Tony Chang  <tony@chromium.org>

        fix bit packing in FillLayer on Windows
        https://bugs.webkit.org/show_bug.cgi?id=85636

        Reviewed by Ryosuke Niwa.

        Use unsigned for all bit packed types. I manually verified that
        the current uses of these member variables always assign true or false.

        No new tests, adding a compile assert to verify bit packing.

        * rendering/style/FillLayer.cpp:
        (SameSizeAsFillLayer): Added compile assert.
        (WebCore):
        (WebCore::FillLayer::FillLayer): Reorder m_sizeLength so bit packed fields are adjacent.
        (WebCore::FillLayer::operator=): Ditto.
        * rendering/style/FillLayer.h:
        (FillLayer): Convert bools to unsigned to match other bit packed fields.

2012-05-04  Tommy Widenflycht  <tommyw@google.com>

        MediaStream API: Make PeerConnection00's API fully compliant with the draft
        https://bugs.webkit.org/show_bug.cgi?id=85491

        Reviewed by Adam Barth.

        Mainly making the relevant API's use objects (aka Dictionaries) instead of the temporary strings,
        but also making a few API's exception aware and changing the name of a flag.

        Test: fast/mediastream/peerconnection-iceoptions.html

        * Modules/mediastream/PeerConnection00.cpp:
        (WebCore::PeerConnection00::createMediaHints):
        (WebCore::PeerConnection00::createOffer):
        (WebCore):
        (WebCore::PeerConnection00::createAnswer):
        (WebCore::PeerConnection00::createIceOptions):
        (WebCore::PeerConnection00::createDefaultIceOptions):
        (WebCore::PeerConnection00::startIce):
        (WebCore::PeerConnection00::addStream):
        (WebCore::PeerConnection00::changeReadyState):
        * Modules/mediastream/PeerConnection00.h:
        (WebCore):
        (PeerConnection00):
        * Modules/mediastream/PeerConnection00.idl:
        * platform/mediastream/chromium/PeerConnection00HandlerInternal.cpp:
        (WebCore::PeerConnection00HandlerInternal::startIce):

2012-05-04  David Tseng  <dtseng@google.com>

        Chromium should include MenuListPopups' and MenuListOptions' within the ax tree.
        https://bugs.webkit.org/show_bug.cgi?id=85541

        Reviewed by Chris Fleizach.

        Covered by existing tests. 
        LayoutTests/accessibility/menu-list-sends-change-notification.html

        * accessibility/AccessibilityMockObject.h:
        (WebCore::AccessibilityMockObject::accessibilityIsIgnored):
        * accessibility/chromium/AccessibilityObjectChromium.cpp:
        (WebCore::AccessibilityObject::accessibilityPlatformIncludesObject):

2012-05-04  Levi Weintraub <leviw@chromium.org>

        Unreviewed. Fixing ChangeLog conflict markers after 116009.

2012-05-04  Dan Winship  <danw@gnome.org>

        [GTK] ASSERTION FAILED: shouldLoadAsEmptyDocument(r.url()) ||
        !defersLoading() in MainResourceLoader.cpp:382

        Remove a soup_session_pause_message() call that got left behind,
        update the defersLoading stuff to handle this case.

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

        Reviewed by Martin Robinson.

        No new tests. Now passes loader/load-defer-resume-crash.html under
        debug build.

        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::sendRequestCallback):
        (WebCore::ResourceHandle::platformSetDefersLoading):

2012-05-03  Martin Robinson  <mrobinson@igalia.com>

        [GTK] Rework IME handling to fix bugs and prepare for WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=84556

        Reviewed by Gustavo Noronha Silva.

        No new tests. This change is already covered by a suite of keyboard
        handling unit tests in WebKitGTK+. There are some changes in behavior,
        but they are difficult to test without mocking out an entire GtkIMContext.

        Add a struct, CompositionResults, which is used by PlatformKeyboardEvent
        to package composition information with a keyboard event. Also add some logic
        to PlatformKeyboardEvent to give the right information when it has composition
        results.

        * GNUmakefile.list.am: Added new sources to the list.
        * platform/PlatformKeyboardEvent.h:  Added a new CompositionResults member,
        getter, and argument to the constructor.
        * platform/gtk/CompositionResults.h: Added.
        * platform/gtk/GtkInputMethodFilter.cpp: Added.
        * platform/gtk/GtkInputMethodFilter.h: Added.
        * platform/gtk/PlatformKeyboardEventGtk.cpp:
        (WebCore::PlatformKeyboardEvent::windowsKeyCodeForGdkKeyCode): When
        the key value is void return the VK_PROCESS keycode, which is the keycode
        that web content expects with keystrokes that trigger composition events.
        (WebCore::eventTypeForGdkKeyEvent): Abstract out this helper.
        (WebCore::modifiersForGdkKeyEvent): Abstract out this helper.
        (WebCore::PlatformKeyboardEvent::PlatformKeyboardEvent): When a PlatformKeyEvent
        has composition results, use VK_PROCESS as the keycode for this event.
        (WebCore::PlatformKeyboardEvent::disambiguateKeyDownEvent): When this event is
        transformed into a Char event, the PlatformKeyboardEvent used for DOM keypress
        events, and it has composition results clear the text members. This forces the
        EventHandler code to drop the keypress event. Platform events that change the
        composition states do not have corresponding keypress DOM events (only keydown
        and keyup events), so this is necessary to ensure web compatibility.

2012-05-04  Jochen Eisinger  <jochen@chromium.org>

        Correctly update the outgoing referrer when navigating back from an history item created by pushState/replaceState
        https://bugs.webkit.org/show_bug.cgi?id=85374

        Reviewed by Nate Chapin.

        Test: http/tests/history/history-navigations-set-referrer.html

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

2012-05-04  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Clean up and split features.prf into a static list of defaults

        The static list of feature defaults is used as a fallback for any
        feature that's not dynamically detected or overriden on the command
        line (though build-webkit or passing DEFINES+= to qmake).

        The static list is complete, which allows for auto-generation based
        on Features.py (see bug https://bugs.webkit.org/show_bug.cgi?id=85456)

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

        Reviewed by Simon Hausmann.

        * Target.pri:

2012-05-04  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r116085, r116091, and r116095.
        http://trac.webkit.org/changeset/116085
        http://trac.webkit.org/changeset/116091
        http://trac.webkit.org/changeset/116095
        https://bugs.webkit.org/show_bug.cgi?id=85628

        We are not ready with dependencies on all platform yet (mac) +
        problems with debug builds. (Requested by Zoltan on #webkit).

        * Target.pri:
        * WebCore.pri:
        * platform/MIMETypeRegistry.cpp:
        (WebCore::initializeSupportedImageMIMETypes):
        (WebCore::initializeSupportedImageMIMETypesForEncoding):
        * platform/graphics/ImageSource.cpp:
        * platform/graphics/ImageSource.h:
        (WebCore):
        * platform/graphics/qt/ImageDecoderQt.cpp:
        (WebCore::ImageDecoder::create):
        (WebCore):
        (WebCore::ImageDecoderQt::filenameExtension):
        (WebCore::ImageDecoderQt::internalHandleCurrentImage):
        (WebCore::ImageDecoderQt::clearPointers):
        * platform/image-decoders/ImageDecoder.cpp:
        (WebCore::ImageDecoder::create):
        * platform/image-decoders/ImageDecoder.h:
        (WebCore::ImageFrame::getAddr):
        (ImageFrame):
        * platform/image-decoders/qt/ImageFrameQt.cpp: Added.
        (WebCore):
        (WebCore::ImageFrame::ImageFrame):
        (WebCore::ImageFrame::operator=):
        (WebCore::ImageFrame::clearPixelData):
        (WebCore::ImageFrame::zeroFillPixelData):
        (WebCore::ImageFrame::copyBitmapData):
        (WebCore::ImageFrame::setSize):
        (WebCore::ImageFrame::asNewNativeImage):
        (WebCore::ImageFrame::hasAlpha):
        (WebCore::ImageFrame::setHasAlpha):
        (WebCore::ImageFrame::setColorProfile):
        (WebCore::ImageFrame::setStatus):
        (WebCore::ImageFrame::setPixmap):
        (WebCore::ImageFrame::width):
        (WebCore::ImageFrame::height):

2012-05-04  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: eliminate temporaryProfile property from ProfilesPanel.
        https://bugs.webkit.org/show_bug.cgi?id=85623

        We can run different profilers at the same time therefore we have to keep temorary profile per profiler type.

        Reviewed by Yury Semikhatsky.

        * inspector/front-end/CSSSelectorProfileView.js:
        (WebInspector.CSSSelectorProfileType.prototype.createView):
        (WebInspector.CSSSelectorProfileType.prototype.createTemporaryProfile):
        (WebInspector.CSSSelectorProfileType.prototype.createProfile):
        * inspector/front-end/HeapSnapshotView.js:
        (WebInspector.HeapSnapshotProfileType.prototype.createView):
        (WebInspector.HeapSnapshotProfileType.prototype.createTemporaryProfile):
        (WebInspector.HeapSnapshotProfileType.prototype.createProfile):
        * inspector/front-end/ProfileView.js:
        (WebInspector.CPUProfileType.prototype.startRecordingProfile):
        (WebInspector.CPUProfileType.prototype.createView):
        (WebInspector.CPUProfileType.prototype.createTemporaryProfile):
        (WebInspector.CPUProfileType.prototype.createProfile):
        * inspector/front-end/ProfilesPanel.js:
        (WebInspector.ProfileType.prototype.createSidebarTreeElementForProfile):
        (WebInspector.ProfileType.prototype.createTemporaryProfile):
        (WebInspector.ProfileType.prototype.createProfile):
        (WebInspector.ProfileHeader):
        (WebInspector.HeapProfileHeader):
        (WebInspector.ProfilesPanel.prototype.addProfileHeader):
        (WebInspector.ProfilesPanel.prototype.findTemporaryProfile):
        (WebInspector.ProfilesPanel.prototype._removeTemporaryProfile):
        (WebInspector.ProfilesPanel.prototype._populateProfiles.populateCallback.var):
        (WebInspector.ProfilesPanel.prototype._populateProfiles.populateCallback):
        (WebInspector.ProfilesPanel.prototype._populateProfiles):
        (WebInspector.ProfilesPanel.prototype.setRecordingProfile):
        (WebInspector.ProfilesPanel.prototype.takeHeapSnapshot):
        (WebInspector.ProfilesPanel.prototype._reportHeapSnapshotProgress):
        (WebInspector.ProfilerDispatcher.prototype.addProfileHeader):

2012-05-04  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: [chromium] ScriptGCEvent should not be static.
        https://bugs.webkit.org/show_bug.cgi?id=80788

        The static members of ScriptGCEvent were moved into per isolate data structure.
        Drive by fix: Sometimes the used heap size after a GC is slightly more than it was before.

        Reviewed by Yury Semikhatsky.

        * bindings/v8/ScriptGCEvent.cpp:
        (WebCore::ScriptGCEvent::gcPrologueCallback):
        (WebCore::ScriptGCEvent::gcEpilogueCallback):
        * bindings/v8/V8Binding.h:
        (WebCore::GCEventData::GCEventData):
        (WebCore::GCEventData::clear):
        (GCEventData):
        (WebCore):
        (WebCore::V8BindingPerIsolateData::gcEventData):
        (V8BindingPerIsolateData):

2012-05-04  Kent Hansen <kent.hansen@nokia.com>

        [Qt] Update Qt bridge after changes to QMetaMethod
        https://bugs.webkit.org/show_bug.cgi?id=85478

        Reviewed by Tor Arne Vestbø.

        QMetaMethod::signature() has been renamed to methodSignature() and
        returns a QByteArray.

        The new function QMetaMethod::name() gives direct access to a
        method's name. returnType(), parameterCount(), and parameterType()
        give direct access to type information.

        Ported the custom QtConnectionObject meta-object to revision 7;
        revision 6 and below aren't supported (and don't compile) with Qt5.

        * Target.pri:
        * bridge/qt/qt_class.cpp:
        (JSC::Bindings::QtClass::fallbackObject):
        * bridge/qt/qt_instance.cpp:
        (JSC::Bindings::QtInstance::getPropertyNames):
        * bridge/qt/qt_runtime.cpp:
        (JSC::Bindings::findMethodIndex):
        (Bindings):
        (qt_meta_stringdata_QtConnectionObject_t):
        (JSC::Bindings::QtConnectionObject::qt_static_metacall):
        (JSC::Bindings::QtConnectionObject::qt_metacast):
        (JSC::Bindings::QtConnectionObject::qt_metacall):
        (JSC::Bindings::QtConnectionObject::execute):
        * bridge/qt/qt_runtime.h:
        (QtConnectionObject):
        * bridge/qt/qt_runtime_qt4.cpp: Copied from Source/WebCore/bridge/qt/qt_runtime.cpp.
        (Bindings):
        (QWKNoDebug):
        (JSC::Bindings::QWKNoDebug::QWKNoDebug):
        (JSC::Bindings::QWKNoDebug::~QWKNoDebug):
        (JSC::Bindings::QWKNoDebug::operator<<):
        (JSC::Bindings::operator<<):
        (RuntimeConversion):
        (JSC::Bindings::registerCustomType):
        (JSC::Bindings::isJSUint8ClampedArray):
        (JSC::Bindings::valueRealType):
        (JSC::Bindings::convertValueToQVariantMap):
        (JSC::Bindings::convertValueToQVariant):
        (JSC::Bindings::convertQVariantToValue):
        (JSC::Bindings::QtRuntimeMethod::QtRuntimeMethod):
        (JSC::Bindings::QtRuntimeMethod::finishCreation):
        (JSC::Bindings::QtRuntimeMethod::~QtRuntimeMethod):
        (JSC::Bindings::QtRuntimeMethod::destroy):
        (JSC::Bindings::QtRuntimeMethodData::~QtRuntimeMethodData):
        (JSC::Bindings::QtRuntimeMethodData::finalize):
        (JSC::Bindings::QtRuntimeMetaMethodData::~QtRuntimeMetaMethodData):
        (JSC::Bindings::QtRuntimeConnectionMethodData::~QtRuntimeConnectionMethodData):
        (QtMethodMatchType):
        (JSC::Bindings::QtMethodMatchType::QtMethodMatchType):
        (JSC::Bindings::QtMethodMatchType::kind):
        (JSC::Bindings::QtMethodMatchType::isValid):
        (JSC::Bindings::QtMethodMatchType::isVariant):
        (JSC::Bindings::QtMethodMatchType::isMetaType):
        (JSC::Bindings::QtMethodMatchType::isUnresolved):
        (JSC::Bindings::QtMethodMatchType::isMetaEnum):
        (JSC::Bindings::QtMethodMatchType::enumeratorIndex):
        (JSC::Bindings::QtMethodMatchType::variant):
        (JSC::Bindings::QtMethodMatchType::metaType):
        (JSC::Bindings::QtMethodMatchType::metaEnum):
        (JSC::Bindings::QtMethodMatchType::unresolved):
        (JSC::Bindings::QtMethodMatchType::typeId):
        (JSC::Bindings::QtMethodMatchType::name):
        (QtMethodMatchData):
        (JSC::Bindings::QtMethodMatchData::QtMethodMatchData):
        (JSC::Bindings::QtMethodMatchData::isValid):
        (JSC::Bindings::QtMethodMatchData::firstUnresolvedIndex):
        (JSC::Bindings::indexOfMetaEnum):
        (JSC::Bindings::findMethodIndex):
        (JSC::Bindings::findSignalIndex):
        (JSC::Bindings::QtRuntimeMetaMethod::QtRuntimeMetaMethod):
        (JSC::Bindings::QtRuntimeMetaMethod::finishCreation):
        (JSC::Bindings::QtRuntimeMetaMethod::visitChildren):
        (JSC::Bindings::QtRuntimeMetaMethod::call):
        (JSC::Bindings::QtRuntimeMetaMethod::getCallData):
        (JSC::Bindings::QtRuntimeMetaMethod::getOwnPropertySlot):
        (JSC::Bindings::QtRuntimeMetaMethod::getOwnPropertyDescriptor):
        (JSC::Bindings::QtRuntimeMetaMethod::getOwnPropertyNames):
        (JSC::Bindings::QtRuntimeMetaMethod::lengthGetter):
        (JSC::Bindings::QtRuntimeMetaMethod::connectGetter):
        (JSC::Bindings::QtRuntimeMetaMethod::disconnectGetter):
        (JSC::Bindings::QtRuntimeConnectionMethod::QtRuntimeConnectionMethod):
        (JSC::Bindings::QtRuntimeConnectionMethod::finishCreation):
        (JSC::Bindings::QtRuntimeConnectionMethod::call):
        (JSC::Bindings::QtRuntimeConnectionMethod::getCallData):
        (JSC::Bindings::QtRuntimeConnectionMethod::getOwnPropertySlot):
        (JSC::Bindings::QtRuntimeConnectionMethod::getOwnPropertyDescriptor):
        (JSC::Bindings::QtRuntimeConnectionMethod::getOwnPropertyNames):
        (JSC::Bindings::QtRuntimeConnectionMethod::lengthGetter):
        (JSC::Bindings::QtConnectionObject::QtConnectionObject):
        (JSC::Bindings::QtConnectionObject::~QtConnectionObject):
        (JSC::Bindings::QtConnectionObject::metaObject):
        (JSC::Bindings::QtConnectionObject::qt_metacast):
        (JSC::Bindings::QtConnectionObject::qt_metacall):
        (JSC::Bindings::isJavaScriptFunction):
        (JSC::Bindings::QtConnectionObject::execute):
        (JSC::Bindings::QtConnectionObject::match):
        (JSC::Bindings::QtConnectionObject::createWithInternalJSC):
        (JSC::Bindings::::QtArray):
        (JSC::Bindings::::~QtArray):
        (JSC::Bindings::::rootObject):
        (JSC::Bindings::::setValueAt):
        (JSC::Bindings::::valueAt):

2012-05-04  Yury Semikhatsky  <yurys@chromium.org>

        Web Inspector: use single method for retrieving evaluation context in the runtime agent
        https://bugs.webkit.org/show_bug.cgi?id=85621

        Reviewed by Pavel Feldman.

        Merged two script state retrieval methods into one. Moved Page specific logic
        into PageRuntimeAgent.

        * inspector/InspectorRuntimeAgent.cpp:
        (WebCore::InspectorRuntimeAgent::evaluate):
        * inspector/InspectorRuntimeAgent.h:
        (InspectorRuntimeAgent):
        * inspector/PageRuntimeAgent.cpp:
        (WebCore::PageRuntimeAgent::scriptStateForEval):
        * inspector/PageRuntimeAgent.h:
        (PageRuntimeAgent):
        * inspector/WorkerRuntimeAgent.cpp:
        (WebCore::WorkerRuntimeAgent::scriptStateForEval):
        * inspector/WorkerRuntimeAgent.h:
        (WorkerRuntimeAgent):

2012-05-04  Jochen Eisinger  <jochen@chromium.org>

        Unreviewed, rolling out r115549.
        http://trac.webkit.org/changeset/115549
        https://bugs.webkit.org/show_bug.cgi?id=83894

        The newly added CRASH() statements are triggered too often

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::init):
        (WebCore::FrameLoader::setupForReplace):
        (WebCore::FrameLoader::stopAllLoaders):
        (WebCore::FrameLoader::clearProvisionalLoad):
        (WebCore::FrameLoader::continueFragmentScrollAfterNavigationPolicy):
        (WebCore::FrameLoader::continueLoadAfterNavigationPolicy):

2012-05-04  Zoltan Horvath  <zoltan@webkit.org>

        [Qt] Error message fix after r116091
        https://bugs.webkit.org/show_bug.cgi?id=85614

        Reviewed by Alexis Menard.

        No new tests : error message fix.

        * WebCore.pri:

2012-05-04  Alexis Menard  <alexis.menard@openbossa.org>

        [Qt] Build fix when using libpng version > 1.2.
        https://bugs.webkit.org/show_bug.cgi?id=85614

        Reviewed by Tor Arne Vestbø.

        Don't enforce the version of libpng when passing the option to the linker.

        No new tests : build fix.

        * WebCore.pri:

2012-05-04  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] Images are scaled badly in WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=85610

        Reviewed by Jocelyn Turcotte.

        Enable smooth pixmap transforms when rendering into the GraphicsSurface image.
        This class is only used in WK2.

        * platform/graphics/surfaces/qt/GraphicsSurfaceQt.cpp:
        (WebCore::GraphicsSurface::platformBeginPaint):

2012-05-04  Zoltan Horvath  <zoltan@webkit.org>

        [Qt] Remove unnecessary executeable bits after r116085

        No new tests.

        * Target.pri:
        * WebCore.pri:
        * platform/graphics/ImageSource.cpp:
        * platform/graphics/ImageSource.h:
        * platform/graphics/qt/ImageDecoderQt.cpp:
        * platform/graphics/qt/ImageDecoderQt.h:
        * platform/image-decoders/ImageDecoder.cpp:
        * platform/image-decoders/ImageDecoder.h:

2012-05-04  Zoltan Horvath  <zoltan@webkit.org>

        [Qt] Set WebCore imagedecoders as default and add fallback to QImageDecoder
        https://bugs.webkit.org/show_bug.cgi?id=80400

        This change modifies the default ImageDecoder for Qt-port from QImageDecoder to WebCore ImageDecoder.
        The new behavior is to use QImageDecoder only if WebCoreImageDecoder doesn't support the requested
        image type.
        The WTF_USE_QT_IMAGE_DECODER macro has been removed, since it is no longer needed.

        This change adds build depedency for libpng-dev and libjpeg-dev packages, becuase PNG and JPEG imagedecoders
        need not only these libraries, but their headers also. Qmake-config tests for these libraries were
        introduced in r110045.

        Reviewed by Simon Hausmann.

        No new tests needed.

        * Target.pri: Move WebCore ImageDecoder files out of guards. Remove ImageFrameQt.cpp from sources.
        * WebCore.pri: Move WebCore ImageDecoder include paths out of guards.
        * platform/MIMETypeRegistry.cpp:
        (WebCore::initializeSupportedImageMIMETypes): Add WebCore supported and Qt supported MIME types.
        (WebCore::initializeSupportedImageMIMETypesForEncoding): Use Qt supported MIME types.
        * platform/graphics/ImageSource.cpp: Remove unnecessary includes.
        * platform/graphics/ImageSource.h: Remove unnecessary typedefs.
        (WebCore):
        * platform/graphics/qt/ImageDecoderQt.cpp:
        (WebCore::ImageDecoderQt::filenameExtension): Remove unnecessary semicolon.
        (WebCore::ImageDecoderQt::internalHandleCurrentImage): Use QImage and ImageFrame instead of QPixmap.
        (WebCore):
        (WebCore::ImageFrame::asNewNativeImage): Moved here from removed ImageFrameQt.cpp.
        * platform/image-decoders/ImageDecoder.cpp: Reorganize the includes of the header.
        (WebCore::ImageDecoder::create): Add platform macro guarded fallback case for QImageDecoder.
        * platform/image-decoders/ImageDecoder.h: Remove Qt-specific codes.
        (WebCore::ImageFrame::getAddr): Remove Qt-specific case, since it is no longer needed.
        (ImageFrame):
        * platform/image-decoders/qt/ImageFrameQt.cpp: Removed. Dead code, other code has been moved to
        ImageDecoderQt.cpp.

2012-05-03  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: createRawLocationByURL is too slow if a big number of evals happen.
        https://bugs.webkit.org/show_bug.cgi?id=85477

        It iterates through all the _scripts even they have no url.
        We can keep a separate map of scripts with url.

        Reviewed by Yury Semikhatsky.

        * inspector/front-end/DebuggerModel.js:
        (WebInspector.DebuggerModel):
        (WebInspector.DebuggerModel.prototype._globalObjectCleared):
        (WebInspector.DebuggerModel.prototype._resetScriptsMap):
        (WebInspector.DebuggerModel.prototype._parsedScriptSource):
        (WebInspector.DebuggerModel.prototype.createRawLocationByURL):

2012-05-03  David Barr  <davidbarr@chromium.org>

        Antialias single-edge solid borders
        https://bugs.webkit.org/show_bug.cgi?id=85031

        Reviewed by Simon Fraser.

        Antialiasing is avoided for adjacent edges due to artifacts at the seam.
        There are no such artifacts for single-edge borders so enable antialiasing.

        Test: fast/css/border-solid-single-edge-antialias.html

        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paintBorder):

2012-05-03  Adam Barth  <abarth@webkit.org>

        CSP: Eval isn't blocked in about:blank subframes
        https://bugs.webkit.org/show_bug.cgi?id=85553

        Reviewed by Eric Seidel.

        ContentSecurityPolicy has a back pointer to ScriptExecutionContext.
        That means we shouldn't share a single ContentSecurityPolicy object
        between multiple ScriptExecutionContexts.  This patch copies the state
        from one ScriptExecutionContext to another rather than sharing the
        ContentSecurityPolicy object itself.

        This resulted in a subtle but w.r.t. blocking eval.  Because we block
        eval by setting a bit in the JavaScript engine when enforcing the
        policy, that bit wasn't copied along with the rest of the state when we
        were sharing the ContentSecurityPolicy object.  Now that we use the
        more robust ContentSecurityPolicy::copyStateFrom function, we don't
        have that bug.

        Test: http/tests/security/contentSecurityPolicy/eval-blocked-in-about-blank-iframe.html

        * dom/Document.cpp:
        (WebCore::Document::initSecurityContext):
        (WebCore):
        (WebCore::Document::initContentSecurityPolicy):
        * dom/Document.h:
        (Document):
        * dom/SecurityContext.cpp:
        (WebCore::SecurityContext::setContentSecurityPolicy):
        * dom/SecurityContext.h:
        (SecurityContext):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::didBeginDocument):
        * page/ContentSecurityPolicy.h:
        (WebCore::ContentSecurityPolicy::create):

2012-05-03  Abhishek Arya  <inferno@chromium.org>

        Regression(r113769): Crash in AudioNodeOutput::disconnectAllParams.
        https://bugs.webkit.org/show_bug.cgi?id=85196

        Reviewed by Chris Rogers.

        RefPtr the AudioParam hashset in AudioNodeOutput to prevent accessing
        destroyed entries.

        No new tests. Unable to reproduce it in DRT.

        * Modules/webaudio/AudioNodeOutput.cpp:
        (WebCore::AudioNodeOutput::disconnectAllParams):
        * Modules/webaudio/AudioNodeOutput.h:
        (AudioNodeOutput):

2012-05-03  Noel Gordon  <noel.gordon@gmail.com>

        PNGImageDecoder: Clean up rowAvailable() some more
        https://bugs.webkit.org/show_bug.cgi?id=85464

        Reviewed by Eric Seidel.

        No new tests. Covered by existing tests: fast/images/png-extra-row-crash.html in
        particular.

        * platform/image-decoders/png/PNGImageDecoder.cpp:
        (WebCore::PNGImageDecoder::rowAvailable): Use colorChannels consistently. Split
        the useful libpng comments in two, then place the early-out code and conditions
        inbetween. The png variable is only used in one place so move it there.

2012-05-03  Ojan Vafai  <ojan@chromium.org>

        Histogram total allocated bytes in the arena in addition to the render tree size
        https://bugs.webkit.org/show_bug.cgi?id=85537

        Reviewed by Eric Seidel.

        We only free bytes allocated to a RenderArena when destroying the Document.
        Histogram both the render tree size and the total bytes allocated. This
        gives a better sense of the overhead of RenderArena as well as giving a more
        accurate number for the amount of actual memory used by the render tree.

        No new tests. This is not webfacing, so this can't be tested without adding
        API to layout test controller, which doesn't seem worth it for this code.

        * page/Page.cpp:
        (WebCore::Page::renderTreeSize):
        (WebCore::Page::setVisibilityState):
        * page/Page.h:
        (Page):
        * platform/Arena.cpp:
        (WebCore::ArenaAllocate):
        * platform/Arena.h:
        (WebCore):
        * rendering/RenderArena.cpp:
        (WebCore::RenderArena::allocate):
        * rendering/RenderArena.h:
        (WebCore::RenderArena::totalRenderArenaAllocatedBytes):
        (RenderArena):

2012-05-03  Mary Wu  <mary.wu@torchmobile.com.cn>

        [BlackBerry] Add missed member in CrossThreadResourceRequestData
        https://bugs.webkit.org/show_bug.cgi?id=85448

        Reviewed by Antonio Gomes.

        * platform/network/blackberry/ResourceRequest.h:
        (CrossThreadResourceRequestData):
        * platform/network/blackberry/ResourceRequestBlackBerry.cpp:
        (WebCore::ResourceRequest::doPlatformCopyData):
        (WebCore::ResourceRequest::doPlatformAdopt):

2012-05-03  Adam Barth  <abarth@webkit.org>

        CSP shouldn't block about:blank for iframes
        https://bugs.webkit.org/show_bug.cgi?id=85233

        Reviewed by Eric Seidel.

        As discussed at the W3C WebAppSec face-to-face meeting, there's no
        point in blocking about:blank iframes or objects because blocking a
        frame or object just results in displaying about:blank anyway.  This
        patch just removes the spurious console message and violation report.

        Test: http/tests/security/contentSecurityPolicy/frame-src-about-blank-allowed-by-default.html

        * page/ContentSecurityPolicy.cpp:
        (WebCore::ContentSecurityPolicy::allowObjectFromSource):
        (WebCore::ContentSecurityPolicy::allowChildFrameFromSource):

2012-05-03  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r116040.
        http://trac.webkit.org/changeset/116040
        https://bugs.webkit.org/show_bug.cgi?id=85559

        Broke a few IndexedDB browsertests (Requested by zhenyao on
        #webkit).

        * Modules/indexeddb/IDBCursor.cpp:
        (WebCore::IDBCursor::direction):
        * Modules/indexeddb/IDBCursor.h:
        (IDBCursor):
        * Modules/indexeddb/IDBCursor.idl:
        * Modules/indexeddb/IDBDatabase.cpp:
        (WebCore::IDBDatabase::transaction):
        (WebCore):
        * Modules/indexeddb/IDBDatabase.h:
        * Modules/indexeddb/IDBDatabase.idl:
        * Modules/indexeddb/IDBIndex.cpp:
        (WebCore::IDBIndex::openCursor):
        (WebCore::IDBIndex::openKeyCursor):
        * Modules/indexeddb/IDBIndex.h:
        (WebCore::IDBIndex::openCursor):
        (WebCore::IDBIndex::openKeyCursor):
        * Modules/indexeddb/IDBIndex.idl:
        * Modules/indexeddb/IDBObjectStore.cpp:
        (WebCore::IDBObjectStore::openCursor):
        * Modules/indexeddb/IDBObjectStore.h:
        (WebCore::IDBObjectStore::openCursor):
        (IDBObjectStore):
        * Modules/indexeddb/IDBObjectStore.idl:
        * Modules/indexeddb/IDBRequest.cpp:
        (WebCore::IDBRequest::IDBRequest):
        (WebCore::IDBRequest::readyState):
        (WebCore::IDBRequest::markEarlyDeath):
        (WebCore::IDBRequest::resetReadyState):
        (WebCore::IDBRequest::abort):
        (WebCore::IDBRequest::finishCursor):
        (WebCore::IDBRequest::onSuccess):
        (WebCore::IDBRequest::stop):
        * Modules/indexeddb/IDBRequest.h:
        * Modules/indexeddb/IDBRequest.idl:
        * Modules/indexeddb/IDBTransaction.cpp:
        (WebCore::IDBTransaction::mode):
        * Modules/indexeddb/IDBTransaction.h:
        (IDBTransaction):
        * Modules/indexeddb/IDBTransaction.idl:

2012-05-03  Raphael Kubo da Costa  <rakuco@webkit.org>

        [CMake] Rewrite FindCairo.cmake.
        https://bugs.webkit.org/show_bug.cgi?id=84895

        Reviewed by Daniel Bates.

        The old approach relied on pkg-config for finding Cairo (which
        introduced a dependency on pkg-config that could be avoided), used
        the LibFindMacros code that we should probably remove in the
        future and did not use the FindPackageHandleStandardArguments
        module.

        Change all that by rewriting the module.
        - Use the pkg-config output optionally instead of requiring it
        like LibFindMacros did.
        - Remove the implicit dependency on FreeType which often found it
        the wrong way via pkg-config and without considering
        CMAKE_PREFIX_PATH.
        - Retrieve the Cairo version by looking at cairo-version.h instead
        of relying on pkg-config. It requires some additional code for
        checking if the desired version has been found, but that will not
        be needed once we start depending on CMake 2.8.3 or later.

        The only downside is that FPHSA sets <UPPERCASED_NAME>_FOUND
        instead of <Name>_FOUND, and to keep things consistent
        Cairo_LIBRARIES and Cairo_INCLUDE_DIRS have become CAIRO_LIBRARIES
        and CAIRO_INCLUDE_DIRS.

        No new tests, build system change.

        * PlatformEfl.cmake: Use CAIRO_FOO instead of Cairo_FOO.

2012-05-03  Anders Carlsson  <andersca@apple.com>

        Focus ring only appears in top-left tile
        https://bugs.webkit.org/show_bug.cgi?id=85556
        <rdar://problem/11359656>

        Reviewed by Simon Fraser.

        It is sufficient to just apply the current CTM to the clip rect and set that as the focus ring clip rect.

        * platform/graphics/mac/WebLayer.mm:
        (drawLayerContents):

2012-05-03  Alec Flett  <alecflett@chromium.org>

        IndexedDB: Replace numeric constants with strings
        https://bugs.webkit.org/show_bug.cgi?id=84894

        Reviewed by Tony Chang.

        Test: storage/indexeddb/legacy-constants.html

        Update IDBObjectStore.openCursor, IDBIndex.openCursor,
        IDBIndex.openKeyCursor, IDBDatabase.transaction,
        IDBCursor.direction, IDBTransaction.mode, and
        IDBRequest.readyState to meet the latest spec. All of these APIs
        now support string-based values in addition to the
        legacy/deprecated enum-based values.

        * Modules/indexeddb/IDBCursor.cpp:
        (WebCore):
        (WebCore::IDBCursor::direction):
        (WebCore::IDBCursor::stringToDirection):
        (WebCore::IDBCursor::directionToString):
        * Modules/indexeddb/IDBCursor.h:
        (IDBCursor):
        * Modules/indexeddb/IDBCursor.idl:
        * Modules/indexeddb/IDBDatabase.cpp:
        (WebCore::IDBDatabase::transaction):
        (WebCore):
        * Modules/indexeddb/IDBDatabase.h:
        (IDBDatabase):
        * Modules/indexeddb/IDBDatabase.idl:
        * Modules/indexeddb/IDBIndex.cpp:
        (WebCore::IDBIndex::openCursor):
        (WebCore):
        (WebCore::IDBIndex::openKeyCursor):
        * Modules/indexeddb/IDBIndex.h:
        (WebCore::IDBIndex::openCursor):
        (IDBIndex):
        (WebCore::IDBIndex::openKeyCursor):
        * Modules/indexeddb/IDBIndex.idl:
        * Modules/indexeddb/IDBObjectStore.cpp:
        (WebCore::IDBObjectStore::openCursor):
        (WebCore):
        * Modules/indexeddb/IDBObjectStore.h:
        (WebCore::IDBObjectStore::openCursor):
        (IDBObjectStore):
        * Modules/indexeddb/IDBObjectStore.idl:
        * Modules/indexeddb/IDBRequest.cpp:
        (WebCore::IDBRequest::IDBRequest):
        (WebCore::IDBRequest::readyState):
        (WebCore::IDBRequest::markEarlyDeath):
        (WebCore::IDBRequest::resetReadyState):
        (WebCore::IDBRequest::abort):
        (WebCore::IDBRequest::finishCursor):
        (WebCore::IDBRequest::onSuccess):
        (WebCore::IDBRequest::stop):
        * Modules/indexeddb/IDBRequest.h:
        * Modules/indexeddb/IDBRequest.idl:
        * Modules/indexeddb/IDBTransaction.cpp:
        (WebCore):
        (WebCore::IDBTransaction::mode):
        (WebCore::IDBTransaction::stringToMode):
        (WebCore::IDBTransaction::modeToString):
        * Modules/indexeddb/IDBTransaction.h:
        (IDBTransaction):
        * Modules/indexeddb/IDBTransaction.idl:

2012-05-03  Sam Weinig  <sam@webkit.org>

        Add an eventPhase NONE constant
        https://bugs.webkit.org/show_bug.cgi?id=85397

        Reviewed by Anders Carlsson.

        Updates existing tests.

        * dom/Event.h:
        * dom/Event.idl:
        Add NONE constant.

2012-05-03  Tony Chang  <tony@chromium.org>

        Height overflow when nesting multiple new Flexbox'es.
        https://bugs.webkit.org/show_bug.cgi?id=83572

        Reviewed by Ojan Vafai.

        Test: css3/flexbox/nested-stretch.html

        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::computeAvailableFreeSpace):

2012-05-03  Julien Chaffraix  <jchaffraix@webkit.org>

        ASSERT(!m_zOrderListsDirty) is triggering in Safari
        https://bugs.webkit.org/show_bug.cgi?id=85512

        Reviewed by Simon Fraser.

        Unfortunately no test as I don't think the 2 cases are testable reliably.

        A better fix would be to introduce some iterator that handle updating the
        lists for you. For now, just adding the missing updateLayerListsIfNeeded()
        calls.

        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::hasVisibleNonCompositingDescendantLayers):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::layerHas3DContent):

2012-05-03  Philip Rogers  <pdr@google.com>

        Fix numeric precision issue in SVG animations
        https://bugs.webkit.org/show_bug.cgi?id=85502

        Reviewed by Dirk Schulze.

        r93938 had a bug where floating point numbers where compared exactly,
        exposing a bug when floating point precision was not sufficient. This
        change compares against an epsilon value to get around these precision
        issues.

        Test: svg/animations/animate-end-attribute-numeric-precision.html

        * svg/animation/SVGSMILElement.cpp:
        (WebCore::SVGSMILElement::calculateAnimationPercentAndRepeat):

2012-05-03  Joshua Bell  <jsbell@chromium.org>

        Fix coding style issues in IDBLevelDBCoding.cpp
        https://bugs.webkit.org/show_bug.cgi?id=85536

        Reviewed by Tony Chang.

        No tests - just code formatting changes.

        * Modules/indexeddb/IDBLevelDBCoding.cpp:
        (WebCore::IDBLevelDBCoding::encodeIDBKey):
        (WebCore::IDBLevelDBCoding::decodeIDBKey):
        (WebCore::IDBLevelDBCoding::extractEncodedIDBKey):
        (WebCore::IDBLevelDBCoding::compareEncodedIDBKeys):

2012-04-30  Filip Pizlo  <fpizlo@apple.com>

        PageCache autorelease should not wait until 3 seconds and 42 pages
        https://bugs.webkit.org/show_bug.cgi?id=85254
        <rdar://problem/11349613>

        Reviewed by Geoffrey Garen.

        No new tests, since there is no change in behavior.

        * history/PageCache.cpp:
        (WebCore):
        (WebCore::PageCache::PageCache):
        (WebCore::PageCache::releaseAutoreleasedPagesNowDueToTimer):
        * history/PageCache.h:
        (PageCache):

2012-05-03  Levi Weintraub  <leviw@chromium.org>

        Unreviewed build fix for Mac WK2. Adding a mistakenly removed symbol back to WebCore.exp.in.

        * WebCore.exp.in:

2012-05-03  Levi Weintraub  <leviw@chromium.org>

        Unreviewed build fix for Qt after 116009. No changes in behavior.

        * rendering/RenderTreeAsText.cpp:
        (WebCore::RenderTreeAsText::writeRenderObject):

2012-05-03  W. James MacLean  <wjmaclean@chromium.org>

        [chromium] Revise touchpad fling curve to use exponential curve, to improve feel and small fling performance.
        https://bugs.webkit.org/show_bug.cgi?id=85530

        Reviewed by Kenneth Russell.

        Existing unit tests updated for new curve.

        Modifies TouchpadFLingGestureCurve to use an exponential, rather than polynomial, curve.
        This change appears to improve the overall feel of touchpad fling, and substantially
        improves small-fling performance.

        * platform/TouchpadFlingPlatformGestureCurve.cpp:
        (WebCore::TouchpadFlingPlatformGestureCurve::create):
        (WebCore):
        (WebCore::position):
        (WebCore::velocity):
        (WebCore::TouchpadFlingPlatformGestureCurve::TouchpadFlingPlatformGestureCurve):

2012-04-23  Levi Weintraub  <leviw@chromium.org> and Emil A Eklund <eae@chromium.org>

        [meta] Switch away from integers representing pixels for layout/event handling/rendering
        https://bugs.webkit.org/show_bug.cgi?id=60318

        Reviewed by Eric Seidel.

        Swapping the LayoutUnit backend to FractionalLayoutUnit from int.
        
        FractionalLayoutUnit is a new type that uses an integer to represent a fraction of a pixel.
        We're also adding a feature flag -- ENABLE_SUBPIXEL_LAYOUT -- that toggles this fraction
        between 1/1 and 1/60. Initially, all platforms will default to subpixel layout being off,
        so FractionalLayoutUnits will effectively continue to act as integers.
        
        With ENABLE_SUBPIXEL_LAYOUT turned on, FractionalLayoutUnits accumulate error from sub-pixel
        CSS values and applied zooming, and painting uses pixel-snapping to align these values
        to pixels. See http://trac.webkit.org/wiki/LayoutUnit for details.

        In a number of previous patches, LayoutUnits were plumbed throughout the rendering tree
        to prepare for this change. This included a number of functions in LayoutTypes.h and
        the IntRect/Point/Size classes that were effectively no-ops while LayoutUnits were
        integers. Subsequent patches will remove unnecessary versions of these functions; see
        http://webkit.org/b/84616 for tracking these changes.

        Tests: fast/sub-pixel/client-width-height-snapping.html
               fast/sub-pixel/layout-boxes-with-zoom.html
               fast/sub-pixel/size-of-box-with-zoom.html

        * WebCore.exp.in: Updating function signatures that expose FractionalLayoutUnits.
        * WebCore.xcodeproj/project.pbxproj: Adding missing FractionalLayoutPoint.h header.
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::zoomAdjustedPixelValue): Using adjustFloatForAbsoluteZoom instead of int
        to make use of extra precision before returning the pixel value.
        * css/CSSPrimitiveValue.cpp:
        (WebCore::CSSPrimitiveValue::computeLength): No longer rounds for imprecise conversion
        when sub-pixel layout is enabled.
        (WebCore::CSSPrimitiveValue::customCssText): Returning integer values for pixels.
        * dom/Element.cpp:
        (WebCore::adjustForLocalZoom): Using rounding instead of incrementing the value before
        adjusting to account for truncation when sub-pixel layout is enabled.
        * page/SpatialNavigation.cpp:
        (WebCore::distanceDataForNode): Using FractionalLayoutUnit::abs instead of std::abs.
        * platform/FractionalLayoutUnit.h: Adding some missing operators and a flag around the
        constant denominator to switch it between 1/1 and 1/60 depending on the feature flag.
        * platform/Length.h: Changing the default type for value to float, and adding intValue
        since this more closely matches usage in a sub-pixel layout world.
        * platform/win/PopupMenuWin.cpp:
        (WebCore::PopupMenuWin::paint): Using minimumIntValueForLength in this platform code
        instead of LayoutUnits.
        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::placeBoxesInBlockDirection):
        * rendering/LayoutTypes.h: This file contains the actual switch for changing LayoutUnits
        to be FractionalLayoutUnits. Also updating stub methods with their proper implementations.
        * rendering/PaintInfo.h:
        (WebCore::PaintInfo::infiniteRect): Ensuring the infiniteRect doesn't overflow the
        FractionalLayoutUnit bounds.
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::checkPaginationAndFloatsAtEndLine): Switch to
        FractionalLayoutUnit's abs function instead of std::abs.
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::calculateBackgroundImageGeometry): Add rounding for
        setting the phase of the background geometry before applying modulo from the tile size.
        * rendering/RenderDeprecatedFlexibleBox.cpp:
        (WebCore::RenderDeprecatedFlexibleBox::layoutVerticalBox): Stop applying flex when
        we have less than a pixel to distribute.
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::backgroundClipRect): Replace PaintInfo::infiniteRect with the
        LayoutRect equivalent.
        * rendering/RenderLineBoxList.cpp:
        (WebCore::RenderLineBoxList::rangeIntersectsRect): Using FractionalLayoutUnit::abs
        instead of std::abs.
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::repaintAfterLayoutIfNeeded): Ditto.
        * rendering/RenderObject.h:
        (WebCore): Removing unnecessary adjustForAbsoluteZoom function.
        (WebCore::RenderObject::outlineSize): Outlines remain ints.
        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::styleOrColLogicalWidth): Build fix. Using floats because
        colWidthSum is a Length which uses floats.
        * rendering/RenderThemeChromiumSkia.cpp:
        (WebCore::RenderThemeChromiumSkia::paintSearchFieldResultsButton): Explicit templatization
        for max.
        * rendering/RenderTreeAsText.cpp: Adding code to minimize test expectation churn. It
        may be worth outputting float values in test expectations, but this isn't done with
        the inline box tree yet, either.
        * rendering/RenderTreeAsText.h:
        (WebCore): Adding a FractionalLayoutPoint operator.
        * rendering/RenderWidget.cpp:
        (WebCore::RenderWidget::updateWidgetGeometry): Adding missing pixel snapping, and switching
        absoluteContentBox to an IntRect, as this is what boundingBox returns.
        * rendering/svg/SVGRenderTreeAsText.cpp:
        (WebCore::writePositionAndStyle): Adding an enclosingIntRect for consistency with old results.

2012-05-03  Levi Weintraub  <leviw@chromium.org> and Emil A Eklund <eae@chromium.org>

        [meta] Switch away from integers representing pixels for layout/event handling/rendering
        https://bugs.webkit.org/show_bug.cgi?id=60318

        Reviewed by Eric Seidel.

        Swapping the LayoutUnit backend to FractionalLayoutUnit from int.
        
        FractionalLayoutUnit is a new type that uses an integer that can represent a fraction of a
        pixel. The ENABLE_SUBPIXEL_LAYOUT feature flags toggles this fraction between 1/1 and 1/60.
        Initially, all platforms will default to subpixel layout being off, so FractionalLayoutUnits
        will effectively continue to act as integers.
        
        With ENABLE_SUBPIXEL_LAYOUT turned on, FractionalLayoutUnits accumulate error from sub-pixel
        CSS values and applied zooming, and painting uses pixel-snapping to align these values
        to pixels and prevent unwanted anti-aliasing. See http://trac.webkit.org/wiki/LayoutUnit for
        details.

        In a number of previous patches, LayoutUnits were plumbed throughout the rendering tree to
        prepare for this change. This included a number of functions in LayoutTypes.h and the
        IntRect/Point/Size classes that were effectively no-ops while LayoutUnits were integers. See
        http://webkit.org/b/60318 for the exhaustive list of changes that were done in preparation
        for this. Subsequent patches will remove unnecessary versions of these functions.
        http://webkit.org/b/84616 tracks these changes.

        Tests: fast/sub-pixel/client-width-height-snapping.html
               fast/sub-pixel/layout-boxes-with-zoom.html
               fast/sub-pixel/size-of-box-with-zoom.html

        * WebCore.exp.in: Updating function signatures that expose FractionalLayoutUnits.
        * WebCore.order: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Adding missing FractionalLayoutPoint.h header.
        * css/CSSPrimitiveValue.cpp:
        (WebCore::CSSPrimitiveValue::computeLength): No longer rounds for imprecise conversion
        when sub-pixel layout is enabled.
        * dom/Element.cpp:
        (WebCore::adjustForLocalZoom): Using rounding instead of incrementing the value before
        adjusting to account for truncation when sub-pixel layout is enabled.
        * rendering/mathml/RenderMathMLBlock.cpp:
        (WebCore): Fixing a static initializer build error by moving an integer constant to be
        an int.
        * rendering/LayoutTypes.h: This file contains the actual switch for changing LayoutUnits
        to be FractionalLayoutUnits. Also updating stub methods with their proper implementations.
        * rendering/PaintInfo.h:
        (WebCore::PaintInfo::infiniteRect): Ensuring the infiniteRect doesn't overflow the
        FractionalLayoutUnit bounds. LayoutRect::infiniteRect() is the largest rectangle that can
        be represented using LayoutUnits.
        * rendering/RenderLayer.h:
        (WebCore::ClipRect::operator!=): Add overload of != to fix complaining compilers when
        * rendering/RenderTreeAsText.cpp: Adding code to minimize test expectation churn. It
        may be worth outputting float values in test expectations, but this isn't done with
        the inline box tree yet, either.
        * rendering/RenderTreeAsText.h:
        (WebCore): Adding a FractionalLayoutPoint operator.
        * rendering/svg/SVGRenderTreeAsText.cpp:
        (WebCore::writePositionAndStyle):
        (WebCore): Adding a FractionalLayoutPoint operator.

2012-05-03  Anders Carlsson  <andersca@apple.com>

        Move repaint counter drawing code out into a separate function
        https://bugs.webkit.org/show_bug.cgi?id=85539

        Reviewed by Simon Fraser.

        The majority of code in TileCache::drawLayer deals with drawing the repaint counter. Move this code out
        into a separate function to make it more clear what drawLayer does.

        * platform/graphics/ca/mac/TileCache.h:
        (TileCache):
        * platform/graphics/ca/mac/TileCache.mm:
        (WebCore::TileCache::drawLayer):
        (WebCore::TileCache::drawRepaintCounter):
        (WebCore):

2012-05-03  Simon Fraser  <simon.fraser@apple.com>

        Compositing 'requiresOwnBackingStore' logic caused new clip rect assertions
        https://bugs.webkit.org/show_bug.cgi?id=85455

        Reviewed by Dean Jackson.
        
        r114283 added logic that allows compositing layers to avoid allocating their own
        backing store and to paint into an ancestor instead. However, that caused
        assertions in RenderLayer::updateClipRects() about m_clipRectsRoot being
        incorrect, because clip rect code assumed that compositing layers
        always painted themselves.
        
        Fixed by calling paintsIntoCompositedAncestor() in RenderLayer::clippingRoot(),
        so that clip rect computation matches painting.

        I wasn't able to easily make a test that reproduces the assertion in DRT.

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::clippingRoot):

2012-05-03  Tim Horton  <timothy_horton@apple.com>

        REGRESSION(99539): SVG <img> disregards page scale and device scale
        https://bugs.webkit.org/show_bug.cgi?id=77237
        <rdar://problem/10767413>

        Reviewed by Simon Fraser.

        Rename SVGImageCache::SizeAndZoom to SVGImageCache::SizeAndScales, as it carries more than just zoom now.

        Pass the product of the device and page scales through everything that takes a SVGImageCache::SizeAndScales,
        using it to inflate the size of the buffer created in lookupOrCreateBitmapImageForRenderer,
        and to inflate the destination rectangle passed to SVGImage::draw, which will cause a transformation
        on the context being drawn into.

        Invalidate the SVGImageCache entry on device/page scale changes in addition to zoom changes.

        This patch does not cause SVGImageCache to take into account scale caused by CSS transforms; that is tracked
        separately by https://bugs.webkit.org/show_bug.cgi?id=85335.

        Tests: svg/as-image/image-respects-deviceScaleFactor.html
               svg/as-image/image-respects-pageScaleFactor.html

        * loader/cache/CachedImage.cpp:
        (WebCore::CachedImage::setContainerSizeForRenderer):
        (WebCore::CachedImage::imageSizeForRenderer):
        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::drawSVGToImageBuffer):
        * svg/graphics/SVGImage.h:
        * svg/graphics/SVGImageCache.cpp:
        (WebCore::SVGImageCache::~SVGImageCache):
        (WebCore::SVGImageCache::removeRendererFromCache):
        (WebCore::SVGImageCache::setRequestedSizeAndScales):
        (WebCore::SVGImageCache::requestedSizeAndScales):
        (WebCore::SVGImageCache::redraw):
        (WebCore::SVGImageCache::lookupOrCreateBitmapImageForRenderer):
        * svg/graphics/SVGImageCache.h:
        (WebCore::SVGImageCache::SizeAndScales::SizeAndScales):
        (SizeAndScales):
        (SVGImageCache):
        (WebCore::SVGImageCache::ImageData::ImageData):
        (ImageData):

2012-05-03  Fady Samuel  <fsamuel@chromium.org>

        Removing line in computeViewportAttributes that enforces a minimum scale factor to never allow zooming out more than viewport
        https://bugs.webkit.org/show_bug.cgi?id=70609

        Reviewed by Kenneth Rohde Christiansen.

        Make Viewport Attributes' layoutSize be a FloatRect to avoid rounding
        too early, and the occasional off by one fixed layout dimensions.

        * dom/ViewportArguments.cpp:
        (WebCore::computeViewportAttributes):
        * dom/ViewportArguments.h:
        (ViewportAttributes):

2012-05-03  Joshua Bell  <jsbell@chromium.org>

        IndexedDB: Handle generated keys up to 2^53
        https://bugs.webkit.org/show_bug.cgi?id=85114

        The spec defines the behavior for generated keys up to 2^53
        (the maximum integer storable as an ECMAScript number) and
        the error case when going beyond that. Ensure that we can
        handle values up to that point and generate errors beyond.

        Reviewed by Tony Chang.

        Test: storage/indexeddb/key-generator.html

        * Modules/indexeddb/IDBBackingStore.h:
        (IDBBackingStore):
        * Modules/indexeddb/IDBLevelDBBackingStore.cpp:
        (WebCore::IDBLevelDBBackingStore::nextAutoIncrementNumber):
        * Modules/indexeddb/IDBLevelDBBackingStore.h:
        (IDBLevelDBBackingStore):
        * Modules/indexeddb/IDBObjectStoreBackendImpl.cpp:
        (WebCore::IDBObjectStoreBackendImpl::putInternal):
        (WebCore::IDBObjectStoreBackendImpl::genAutoIncrementKey):
        * Modules/indexeddb/IDBObjectStoreBackendImpl.h:
        (IDBObjectStoreBackendImpl):

2012-05-03  Simon Fraser  <simon.fraser@apple.com>

        Remove RenderLayerCompositor::didStartAcceleratedAnimation()
        https://bugs.webkit.org/show_bug.cgi?id=85514

        Reviewed by Antti Koivisto.
        
        Remove RenderLayerCompositor::didStartAcceleratedAnimation(), which is no longer
        needed.

        Code removal, no new tests.

        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::startAnimation):
        (WebCore::RenderLayerBacking::startTransition):
        * rendering/RenderLayerCompositor.cpp:
        * rendering/RenderLayerCompositor.h:

2012-05-03  Andreas Kling  <kling@webkit.org>

        REGRESSION(r111387): CSSOM representation of 'background-image' values should be CSSPrimitiveValue.
        <http://webkit.org/b/85500>

        Reviewed by Antti Koivisto.

        Use the cloneForCSSOM() mechanism in CSSValue to expose CSSImageValue to bindings as a URI
        primitive value. This matches the specced behavior of computed image values, and restores our
        previous behavior without having CSSImageValue subclass CSSPrimitiveValue.

        Also added a failsafe return after the isCSSOMSafe() assertion in the JSC bindings, since it's
        better to expose an incorrect return value than an insecurely shared one, should we have or add
        bugs in this code.

        * bindings/js/JSCSSValueCustom.cpp:
        (WebCore::toJS):
        * css/CSSImageValue.cpp:
        (WebCore::CSSImageValue::cloneForCSSOM):
        * css/CSSImageValue.h:
        * css/CSSValue.cpp:
        (WebCore::CSSValue::cloneForCSSOM):

2012-05-03  Keishi Hattori  <keishi@webkit.org>

        Crash in HTMLFormControlElement::m_fieldSetAncestor
        https://bugs.webkit.org/show_bug.cgi?id=85453

        Reviewed by Kent Tamura.

        Modified tests: fast/forms/datalist/datalist-child-validation.html
                        fast/forms/form-control-element-crash.html

        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLFormControlElement::removedFrom): Only set the invalid ancestor flag.
        The element will be detached from the document so there is no need to update the style.
        And the validation message will be hidden by the blur event.
        (WebCore::HTMLFormControlElement::willValidate): Because of the change to removedFrom,
        m_ancestorsValid may be false.

2012-05-03  Simon Fraser  <simon.fraser@apple.com>

        Keep overlap testing for compositing on pages with 3d transforms when possible
        https://bugs.webkit.org/show_bug.cgi?id=62487

        Reviewed by Antti Koivisto.
        
        Change RenderLayerCompositor to always use overlap testing when possible.

        Rather than turn off overlap testing wholesale when encountering a non-affine
        transform, or starting an accelerated transform animation, we constrain
        the disabling of overlap testing to within overflow:hidden areas when possible.

        Tests: compositing/layer-creation/overlap-animation.html
               compositing/layer-creation/overlap-transforms.html

        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::setCompositedBounds): Whitespace fix.
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::CompositingState::CompositingState):
        (CompositingState): Add a member boolean to track whether we're testing overlap. Add a copy
        constructor.
        (WebCore::RenderLayerCompositor::updateCompositingLayers): Initialize the 'testing overlap'
        setting based on m_compositingConsultsOverlap (though this will always be true until removed
        in a future commit).
        (WebCore::RenderLayerCompositor::updateBacking): No longer turn off overlap testing
        when we see a non-affine transform.
        (WebCore::RenderLayerCompositor::computeCompositingRequirements): No need for the 'struct'
        in the arguments.
        Consult compositingState.m_testingOverlap to see if we want to test overlap.
        Use the new CompositingState copy ctor for childState, but set m_subtreeIsCompositing to false
        as before.
        If this layer is composited, look to see if need to disable over lap testing based on
        the transform or an animation.
        Just as we propagate m_subtreeIsCompositing, we have to propagate m_testingOverlap=false
        for the rest of the traverse.
        If we've just processed a layer which clips compositing descendants, we can go back
        to testing for overlap.
        (WebCore::RenderLayerCompositor::didStartAcceleratedAnimation): No need to do anything
        here now. It will be removed in future.
        (WebCore::RenderLayerCompositor::hasNonAffineTransform): No longer check
        perspective here, since that doesn't affect whether _this_ layer should disable
        overlap testing. Checking for a non-affine transform is sufficient.
        (WebCore::RenderLayerCompositor::isRunningAcceleratedTransformAnimation):
        New method to check if AnimationController is running a transform animation.
        * rendering/RenderLayerCompositor.h:
        (RenderLayerCompositor):

2012-05-03  Chris Fleizach  <cfleizach@apple.com>

        accessibility/misspelled-attributed-string.html test sometimes throws exceptions
        https://bugs.webkit.org/show_bug.cgi?id=85081

        Reviewed by Darin Adler.

        Add in more range checking in case we get back ranges from spell checking that are wrong.

        * accessibility/mac/WebAccessibilityObjectWrapper.mm:
        (AXAttributeStringSetFont):
        (AXAttributeStringSetColor):
        (AXAttributeStringSetNumber):
        (AXAttributeStringSetBlockquoteLevel):
        (AXAttributeStringSetHeadingLevel):
        (AXAttributeStringSetElement):

2012-05-03  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: move canonical mime type calculation to Resource
        https://bugs.webkit.org/show_bug.cgi?id=85507

        Reviewed by Yury Semikhatsky.

        Drive-by: small refactoring that prepares code for formatter extraction.

        * inspector/front-end/BreakpointsSidebarPane.js:
        * inspector/front-end/DebuggerModel.js:
        (WebInspector.DebuggerModel.prototype.createLiveLocation):
        (WebInspector.DebuggerModel.prototype.rawLocationToUILocation):
        * inspector/front-end/DebuggerPresentationModel.js:
        (WebInspector.DebuggerPresentationModelResourceBinding.prototype._uiSourceCodeForResource):
        * inspector/front-end/NetworkManager.js:
        (WebInspector.NetworkDispatcher.prototype._createNetworkRequest):
        (get WebInspector):
        * inspector/front-end/Resource.js:
        (WebInspector.Resource.prototype.requestContent):
        (WebInspector.Resource.prototype.canonicalMimeType):
        (WebInspector.Resource.prototype._innerRequestContent.callback):
        (WebInspector.Resource.prototype._innerRequestContent):
        * inspector/front-end/ResourceView.js:
        (WebInspector.ResourceSourceFrame.prototype.requestContent):
        (WebInspector.ResourceSourceFrame.prototype._contentChanged):

2012-05-03  Yury Semikhatsky  <yurys@chromium.org>

        Web Inspector: 'expires' value is incorrect for cookies
        https://bugs.webkit.org/show_bug.cgi?id=85489

        Reviewed by Pavel Feldman.

        Fixed cookie 'expires' property type from integer to number so that
        we don't lose precision when assembling Cookie parameter in InspectorResourceAgent.

        * inspector/Inspector.json:

2012-05-03  Dan Bernstein  <mitz@apple.com>

        highlight for Ruby text is mispositioned in the Web Inspector
        https://bugs.webkit.org/show_bug.cgi?id=82684

        Reviewed by Simon Fraser.

        Tests: fast/writing-mode/flipped-blocks-inline-map-local-to-container-expected.html
               fast/writing-mode/flipped-blocks-inline-map-local-to-container.html

        In flipped blocks writing modes, flipping was being applied twice to box descendants of
        inline children of the flipped block, once during RenderBox::mapLocalToContainer, and then
        again by RenderInline::mapLocalToContainer. The fix is to make the latter only apply the
        flip to local coordinates originating in the inline or a descendant inline. This is done
        by adding a parameter of type ApplyContainerFlipOrNot, which defaults to ApplyContainerFlip
        but is reset to DoNotApplyContainerFlip in recursive calls into mapLocalToContainer().

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::mapLocalToContainer): Added ApplyContainerFlipOrNot parameter, passing
        DoNotApplyContainerFlip when recursing into the container.
        * rendering/RenderBox.h:

        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::mapLocalToContainer): Added ApplyContainerFlipOrNot paramerer, and
        made the flipping conditional on its value.

        * rendering/RenderInline.h:

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::mapLocalToContainer): Added ApplyContainerFlipOrNot parameter,
        passing DoNotApplyContainerFlip when recursing into the container.
        (WebCore::RenderObject::localToContainerQuad): Pass ApplyContainerFlip.
        (WebCore::RenderObject::localToContainerPoint): Ditto.
        * rendering/RenderObject.h:

        * rendering/RenderView.cpp:
        (WebCore::RenderView::mapLocalToContainer): Added ApplyContainerFlipOrNot parameter.
        * rendering/RenderView.h:

        * rendering/svg/RenderSVGForeignObject.cpp:
        (WebCore::RenderSVGForeignObject::mapLocalToContainer): Ditto.
        * rendering/svg/RenderSVGForeignObject.h:

        * rendering/svg/RenderSVGInline.cpp:
        (WebCore::RenderSVGInline::mapLocalToContainer): Ditto.
        * rendering/svg/RenderSVGInline.h:

        * rendering/svg/RenderSVGModelObject.cpp:
        (WebCore::RenderSVGModelObject::mapLocalToContainer): Ditto.
        * rendering/svg/RenderSVGModelObject.h:

        * rendering/svg/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::mapLocalToContainer): Ditto.
        * rendering/svg/RenderSVGRoot.h:

        * rendering/svg/RenderSVGText.cpp:
        (WebCore::RenderSVGText::mapLocalToContainer): Ditto.
        * rendering/svg/RenderSVGText.h:

        * rendering/svg/SVGRenderSupport.cpp:
        (WebCore::SVGRenderSupport::mapLocalToContainer): Pass DoNotApplyContainerFlip when
        recursing into the parent.

2012-05-03  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: make Script a ContentProvider.
        https://bugs.webkit.org/show_bug.cgi?id=85486

        Reviewed by Yury Semikhatsky.

        This allows us to get rid of the corresponding content provider wrapper.

        * inspector/front-end/ContentProviders.js:
        * inspector/front-end/RawSourceCode.js:
        (WebInspector.RawSourceCode.prototype._createContentProvider):
        * inspector/front-end/Script.js:
        (WebInspector.Script.prototype.contentURL):
        (WebInspector.Script.prototype.requestContent.didGetScriptSource):
        (WebInspector.Script.prototype.requestContent):
        * inspector/front-end/SnippetsModel.js:
        (WebInspector.SnippetsScriptMapping.prototype._createUISourceCodeForScript):

2012-05-03  Caio Marcelo de Oliveira Filho  <caio.oliveira@openbossa.org>

        Remove extra checks for empty string when parsing CSS value
        https://bugs.webkit.org/show_bug.cgi?id=85480

        Reviewed by Alexis Menard.

        Each parse value helper function was checking whether the value string was empty. For the
        common case this check is already done by StylePropertySet::setProperty(). So this patch
        make CSSParser::parseValue() assume the value string is not empty, and fix the other two
        clients.

        Test: fast/html/font-face-empty-should-not-crash.html

        * css/CSSParser.cpp:
        (WebCore::parseColorValue): Replace the string empty check by an ASSERT() to document
        function's expectations.
        (WebCore::parseSimpleLengthValue): Ditto.
        (WebCore::parseKeywordValue): Ditto.
        (WebCore::CSSParser::parseFontFaceValue): This will be covered by the added test.
        (WebCore::CSSParser::parseValue):
        * css/WebKitCSSMatrix.cpp:
        (WebCore::WebKitCSSMatrix::setMatrixValue): This is already covered by
        transforms/cssmatrix-2d-interface.xhtml.

2012-05-03  Arpita Bahuguna  <arpitabahuguna@gmail.com>

        Broken handling of pseudo-elements in selectors API
        https://bugs.webkit.org/show_bug.cgi?id=83446

        Reviewed by Antti Koivisto.

        Test: fast/dom/Window/querySelectorAll-with-pseudo-elements.html

        * css/SelectorChecker.cpp:
        (WebCore::SelectorChecker::SelectorChecker):
        Setting the default value for the enum member m_mode to ResolvingStyle.

        (WebCore::SelectorChecker::checkSelector):
        Instead of verifying against the bool m_isCollectingRulesOnly, we now check whether or not
        m_mode is set to ResolvingStyle.

        (WebCore::SelectorChecker::checkOneSelector):
        Instead of verifying against the bool m_isCollectingRulesOnly, we now check whether or not
        m_mode is set to ResolvingStyle. Also, for the pseudo-elements case we check if its
        value is set to QueryingRules in which case we return false.

        * css/SelectorChecker.h:
        (WebCore::SelectorChecker::mode):
        Returns the mode (m_mode) value.

        (WebCore::SelectorChecker::setMode):
        Sets the mode (m_mode) to the passed enum value.

        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::sortAndTransferMatchedRules):
        (WebCore::StyleResolver::collectMatchingRulesForList):
        Retrieves SelectorChecker's mode value.

        * dom/SelectorQuery.cpp:
        (WebCore::SelectorQuery::SelectorQuery):
        Sets SelectorChecker's mode to QueryingRules.

        * html/shadow/ContentSelectorQuery.cpp:
        (WebCore::ContentSelectorQuery::ContentSelectorQuery):
        Sets SelectorChecker's mode to CollectingRules.

2012-05-03  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: EXC_BAD_ACCESS in DOM breakpoint processing code.
        https://bugs.webkit.org/show_bug.cgi?id=85482

        Reviewed by Yury Semikhatsky.

        0 check added since we are guaranteed to get immediate parent, but not the whole ancestor tree.

        * inspector/InspectorDOMDebuggerAgent.cpp:
        (WebCore::InspectorDOMDebuggerAgent::descriptionForDOMEvent):

2012-05-03  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: compile time ambiguity happens when I try to assign a TypeBuilder object to an out argument.
        https://bugs.webkit.org/show_bug.cgi?id=85462

        It happens because we have type casting operators for both types RefPtr<*Type*> and PassRefPtr<*Type*>.
        I think we can drop PassRefPtr type casting operator and use a named function 'release'.

        Reviewed by Yury Semikhatsky.

        * inspector/CodeGeneratorInspector.py:
        * inspector/ContentSearchUtils.cpp:
        (WebCore::ContentSearchUtils::buildObjectForSearchMatch):
        * inspector/InspectorApplicationCacheAgent.cpp:
        (WebCore::InspectorApplicationCacheAgent::buildObjectForApplicationCache):
        * inspector/InspectorPageAgent.cpp:
        (WebCore::buildObjectForCookie):
        (WebCore::buildObjectForSearchResult):
        * inspector/InspectorResourceAgent.cpp:
        (WebCore::buildObjectForTiming):
        (WebCore::InspectorResourceAgent::buildInitiatorObject):
        * inspector/ScriptCallFrame.cpp:
        (WebCore::ScriptCallFrame::buildInspectorObject):

2012-05-03  Yury Semikhatsky  <yurys@chromium.org>

        Web Inspector: crash in InspectorResourceAgent::didReceiveWebSocketFrame
        https://bugs.webkit.org/show_bug.cgi?id=85394

        Reviewed by Pavel Feldman.

        Pass string length explicitely when creating String object from non-null-terminated
        char* strings.

        * inspector/InspectorResourceAgent.cpp:
        (WebCore):
        (WebCore::InspectorResourceAgent::didReceiveWebSocketFrame):
        (WebCore::InspectorResourceAgent::didSendWebSocketFrame):

2012-05-03  'Pavel Feldman'  <pfeldman@chromium.org>

        Not reviewed: never surround InspectorInstrumentation:: with ENABLED(INSPECTOR)

        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::insertBefore):
        (WebCore::ContainerNode::replaceChild):
        (WebCore::ContainerNode::appendChild):
        (WebCore::dispatchChildRemovalEvents):

2012-04-30  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: migrate breakpoint manager to live locations.
        https://bugs.webkit.org/show_bug.cgi?id=85136

        Reviewed by Yury Semikhatsky.

        - Merges Breakpoint and UIBreakpoint to have single instance
        - Extracts storage from the breakpoint manager
        - Makes breakpoint manager use source mapping from the script, not the presentation model
        - Removes breakpoints collection from the UISourceCode
        Unfortunately, there are too many inter-dependencies that require that these changes are done simultaneously.

        * inspector/front-end/BreakpointManager.js:
        (WebInspector.BreakpointManager):
        (WebInspector.BreakpointManager.prototype.setBreakpoint):
        (WebInspector.BreakpointManager.prototype.breakpoint):
        (WebInspector.BreakpointManager.prototype.breakpointLocationsForUISourceCode):
        (WebInspector.BreakpointManager.prototype.removeAllBreakpoints):
        (WebInspector.BreakpointManager.prototype.reset):
        (WebInspector.BreakpointManager.prototype.debuggerReset):
        (WebInspector.BreakpointManager.prototype._breakpointResolved):
        (WebInspector.BreakpointManager.prototype._removeBreakpoint):
        (WebInspector.BreakpointManager.prototype._uiLocationAdded):
        (WebInspector.BreakpointManager.prototype._uiLocationRemoved):
        (WebInspector.BreakpointManager.prototype.storage):
        (WebInspector.BreakpointManager.Breakpoint):
        (WebInspector.BreakpointManager.Breakpoint.prototype.primaryUILocation):
        (WebInspector.BreakpointManager.Breakpoint.prototype._addResolvedLocation):
        (WebInspector.BreakpointManager.Breakpoint.prototype.enabled):
        (WebInspector.BreakpointManager.Breakpoint.prototype.setEnabled):
        (WebInspector.BreakpointManager.Breakpoint.prototype.condition):
        (WebInspector.BreakpointManager.Breakpoint.prototype.setCondition):
        (WebInspector.BreakpointManager.Breakpoint.prototype._updateBreakpoint):
        (WebInspector.BreakpointManager.Breakpoint.prototype.remove):
        (WebInspector.BreakpointManager.Breakpoint.prototype._setInDebugger.didSetBreakpoint):
        (WebInspector.BreakpointManager.Breakpoint.prototype._setInDebugger):
        (WebInspector.BreakpointManager.Breakpoint.prototype._removeFromDebugger):
        (WebInspector.BreakpointManager.Breakpoint.prototype._resetLocations):
        (WebInspector.BreakpointManager.Breakpoint.prototype._breakpointStorageId):
        (WebInspector.BreakpointManager.Breakpoint.prototype._fakeBreakpointAtPrimaryLocation):
        (WebInspector.BreakpointManager.Storage.get this):
        (WebInspector.BreakpointManager.Storage):
        (WebInspector.BreakpointManager.Storage.prototype.restoreBreakpoints):
        (WebInspector.BreakpointManager.Storage.prototype._updateBreakpoint):
        (WebInspector.BreakpointManager.Storage.prototype._removeBreakpoint):
        (WebInspector.BreakpointManager.Storage.prototype._save):
        (set WebInspector.BreakpointManager.Storage.Item):
        * inspector/front-end/BreakpointsSidebarPane.js:
        (WebInspector.JavaScriptBreakpointsSidebarPane):
        (WebInspector.JavaScriptBreakpointsSidebarPane.prototype._breakpointAdded.didRequestContent):
        (WebInspector.JavaScriptBreakpointsSidebarPane.prototype._breakpointAdded):
        (WebInspector.JavaScriptBreakpointsSidebarPane.prototype._breakpointRemoved):
        (WebInspector.JavaScriptBreakpointsSidebarPane.prototype.highlightBreakpoint):
        (WebInspector.JavaScriptBreakpointsSidebarPane.prototype._createBreakpointItemId):
        (WebInspector.JavaScriptBreakpointsSidebarPane.prototype._breakpointClicked):
        (WebInspector.JavaScriptBreakpointsSidebarPane.prototype._breakpointCheckboxClicked):
        (WebInspector.JavaScriptBreakpointsSidebarPane.prototype._breakpointContextMenu):
        * inspector/front-end/DebuggerModel.js:
        (WebInspector.DebuggerModel):
        (WebInspector.DebuggerModel.prototype.breakpointsActive):
        (WebInspector.DebuggerModel.prototype.createLiveLocation):
        * inspector/front-end/DebuggerPresentationModel.js:
        (WebInspector.DebuggerPresentationModel.prototype._handleUISourceCodeListChanged):
        (WebInspector.DebuggerPresentationModelResourceBinding.prototype._setContentWithInitialContent):
        * inspector/front-end/JavaScriptSource.js:
        (WebInspector.JavaScriptSource):
        (WebInspector.JavaScriptSource.prototype.consoleMessagesCleared):
        * inspector/front-end/JavaScriptSourceFrame.js:
        (WebInspector.JavaScriptSourceFrame):
        (WebInspector.JavaScriptSourceFrame.prototype.canEditSource):
        (WebInspector.JavaScriptSourceFrame.prototype.editContent):
        (WebInspector.JavaScriptSourceFrame.prototype._onContentChanged):
        (WebInspector.JavaScriptSourceFrame.prototype.populateLineGutterContextMenu):
        (WebInspector.JavaScriptSourceFrame.prototype.beforeTextChanged):
        (WebInspector.JavaScriptSourceFrame.prototype.didEditContent):
        (WebInspector.JavaScriptSourceFrame.prototype._addBreakpointDecoration):
        (WebInspector.JavaScriptSourceFrame.prototype._onMouseDown):
        (WebInspector.JavaScriptSourceFrame.prototype._editBreakpointCondition.finishEditing):
        (WebInspector.JavaScriptSourceFrame.prototype._editBreakpointCondition):
        (WebInspector.JavaScriptSourceFrame.prototype._breakpointAdded):
        (WebInspector.JavaScriptSourceFrame.prototype._breakpointRemoved):
        (WebInspector.JavaScriptSourceFrame.prototype.onTextViewerContentLoaded):
        (WebInspector.JavaScriptSourceFrame.prototype._setBreakpoint):
        (WebInspector.JavaScriptSourceFrame.prototype._continueToLine):
        (WebInspector.JavaScriptSourceFrame.prototype._updateBreakpointsAfterLiveEdit):
        * inspector/front-end/Script.js:
        (WebInspector.Script.prototype.rawLocationToUILocation):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype._uiSourceCodeAdded):
        (WebInspector.ScriptsPanel.prototype._uiSourceCodeRemoved):
        (WebInspector.ScriptsPanel.prototype._debuggerPaused.else.didGetUILocation):
        (WebInspector.ScriptsPanel.prototype._debuggerPaused):
        (WebInspector.ScriptsPanel.prototype._uiSourceCodeReplaced):
        * inspector/front-end/UISourceCode.js:
        (WebInspector.UISourceCode.prototype.contentChanged):

2012-05-03  Andrey Kosyakov  <caseq@chromium.org>

        Unreviewed attemp to fix chromium win build broken at r115943.

        * notifications/NotificationClient.h:
        (WebCore):

2012-05-03  Vivek Galatage  <vivekgalatage@gmail.com>

        Linker warnings due to duplicate symbols for SimplifyMarkupCommand.cpp on Windows
        https://bugs.webkit.org/show_bug.cgi?id=85467

        Reviewed by Ryosuke Niwa.

        Removed the multiple inclusion of the file SimplifyMarkupCommand.cpp 

        No new tests required.

        * WebCore.vcproj/WebCore.vcproj:

2012-05-03  Uday Kiran  <udaykiran@motorola.com>

        CSS clip: auto clips to box borders instead of removing clipping
        https://bugs.webkit.org/show_bug.cgi?id=36772

        Reviewed by Andreas Kling.

        According to CSS 2.1 spec, http://www.w3.org/TR/CSS2/visufx.html#propdef-clip,
        clip property with value 'auto' the element does not clip.
        Also getPropertyValue for clip when auto is specified should return "auto"
        and not "rect(0px 0px 0px 0px)".

        Tests: css2.1/20110323/clip-001-expected.html
               css2.1/20110323/clip-001.html

        * css/StyleBuilder.cpp:
        (WebCore::ApplyPropertyClip::applyValue):

2012-05-02  Antti Koivisto  <antti@apple.com>

        Add temporary feature define for parsed stylesheet caching
        https://bugs.webkit.org/show_bug.cgi?id=85413

        Rubber-stamped by Nikolas Zimmermann.

        While not an externally visible feature this is still a significant internal change.
        It is good to have define in case someone has an urgent need to turn it off.
        
        Caching is enabled by default on all platforms. The define should be removed after some bake time.

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

2012-05-03  Nikolas Zimmermann  <nzimmermann@rim.com>

        Accumulation for values-animation is broken
        https://bugs.webkit.org/show_bug.cgi?id=85158

        Reviewed by Zoltan Herczeg.

        Follow-up patch: Add const Foo& foo() const accessors to SVGAnimatedType,
        to avoid the "Foo& foo = animated->foo()" idiom in all cases where we
        don't need to mutate 'foo'. Use "const Foo& foo = animated->foo()" instead.
        Inline all of these methods to avoid the function call overhead.

        For to-animations we actually mutated the from value before, but it wasn't a
        problem in practive, as we did that on every animation step. Fully avoid these
        inconsitencies by never mutating the from/to types stored in SVGAnimateElement.

        Cache toAtEndOfDurationType just like m_toType/m_fromType in SVGAnimateElement,
        to avoid reconstructing it on every animation step.

        No new tests, only design/performance fixes.

        * svg/SVGAnimateElement.cpp:
        (WebCore::SVGAnimateElement::calculateAnimatedValue):
        (WebCore::SVGAnimateElement::calculateToAtEndOfDurationValue):
        (WebCore::SVGAnimateElement::targetElementWillChange):
        * svg/SVGAnimateElement.h:
        (SVGAnimateElement):
        * svg/SVGAnimateMotionElement.cpp:
        (WebCore::SVGAnimateMotionElement::SVGAnimateMotionElement):
        (WebCore::SVGAnimateMotionElement::calculateToAtEndOfDurationValue):
        (WebCore::SVGAnimateMotionElement::calculateFromAndToValues):
        (WebCore::SVGAnimateMotionElement::calculateFromAndByValues):
        (WebCore::SVGAnimateMotionElement::calculateAnimatedValue):
        * svg/SVGAnimateMotionElement.h:
        (SVGAnimateMotionElement):
        * svg/SVGAnimatedAngle.cpp:
        (WebCore::SVGAnimatedAngleAnimator::addAnimatedTypes):
        (WebCore::SVGAnimatedAngleAnimator::calculateAnimatedValue):
        * svg/SVGAnimatedBoolean.cpp:
        (WebCore::SVGAnimatedBooleanAnimator::calculateAnimatedValue):
        * svg/SVGAnimatedColor.cpp:
        (WebCore::SVGAnimatedColorAnimator::calculateAnimatedValue):
        * svg/SVGAnimatedEnumeration.cpp:
        (WebCore::SVGAnimatedEnumerationAnimator::calculateAnimatedValue):
        * svg/SVGAnimatedInteger.cpp:
        (WebCore::SVGAnimatedIntegerAnimator::calculateAnimatedValue):
        * svg/SVGAnimatedIntegerOptionalInteger.cpp:
        (WebCore::SVGAnimatedIntegerOptionalIntegerAnimator::addAnimatedTypes):
        (WebCore::SVGAnimatedIntegerOptionalIntegerAnimator::calculateAnimatedValue):
        * svg/SVGAnimatedLength.cpp:
        (WebCore::SVGAnimatedLengthAnimator::addAnimatedTypes):
        (WebCore::SVGAnimatedLengthAnimator::calculateAnimatedValue):
        * svg/SVGAnimatedLengthList.cpp:
        (WebCore::SVGAnimatedLengthListAnimator::addAnimatedTypes):
        (WebCore::SVGAnimatedLengthListAnimator::calculateAnimatedValue):
        * svg/SVGAnimatedNumber.cpp:
        (WebCore::SVGAnimatedNumberAnimator::calculateAnimatedValue):
        * svg/SVGAnimatedNumberList.cpp:
        (WebCore::SVGAnimatedNumberListAnimator::addAnimatedTypes):
        (WebCore::SVGAnimatedNumberListAnimator::calculateAnimatedValue):
        * svg/SVGAnimatedNumberOptionalNumber.cpp:
        (WebCore::SVGAnimatedNumberOptionalNumberAnimator::addAnimatedTypes):
        (WebCore::SVGAnimatedNumberOptionalNumberAnimator::calculateAnimatedValue):
        * svg/SVGAnimatedPath.cpp:
        (WebCore::SVGAnimatedPathAnimator::calculateAnimatedValue):
        * svg/SVGAnimatedPointList.cpp:
        (WebCore::SVGAnimatedPointListAnimator::addAnimatedTypes):
        (WebCore::SVGAnimatedPointListAnimator::calculateAnimatedValue):
        * svg/SVGAnimatedPreserveAspectRatio.cpp:
        (WebCore::SVGAnimatedPreserveAspectRatioAnimator::calculateAnimatedValue):
        * svg/SVGAnimatedRect.cpp:
        (WebCore::SVGAnimatedRectAnimator::calculateAnimatedValue):
        * svg/SVGAnimatedString.cpp:
        (WebCore::SVGAnimatedStringAnimator::calculateAnimatedValue):
        * svg/SVGAnimatedTransformList.cpp:
        (WebCore::SVGAnimatedTransformListAnimator::addAnimatedTypes):
        (WebCore::SVGAnimatedTransformListAnimator::calculateAnimatedValue):
        * svg/SVGAnimatedType.cpp:
        * svg/SVGAnimatedType.h:
        (WebCore::SVGAnimatedType::angleAndEnumeration):
        (SVGAnimatedType):
        (WebCore::SVGAnimatedType::boolean):
        (WebCore::SVGAnimatedType::color):
        (WebCore::SVGAnimatedType::enumeration):
        (WebCore::SVGAnimatedType::integer):
        (WebCore::SVGAnimatedType::integerOptionalInteger):
        (WebCore::SVGAnimatedType::length):
        (WebCore::SVGAnimatedType::lengthList):
        (WebCore::SVGAnimatedType::number):
        (WebCore::SVGAnimatedType::numberList):
        (WebCore::SVGAnimatedType::numberOptionalNumber):
        (WebCore::SVGAnimatedType::path):
        (WebCore::SVGAnimatedType::pointList):
        (WebCore::SVGAnimatedType::preserveAspectRatio):
        (WebCore::SVGAnimatedType::rect):
        (WebCore::SVGAnimatedType::string):
        (WebCore::SVGAnimatedType::transformList):
        * svg/SVGAnimationElement.cpp:
        (WebCore::SVGAnimationElement::currentValuesForValuesAnimation):
        (WebCore::SVGAnimationElement::startedActiveInterval):
        (WebCore::SVGAnimationElement::updateAnimation):
        * svg/SVGAnimationElement.h:
        (WebCore::SVGAnimationElement::adjustFromToListValues):
        (WebCore::SVGAnimationElement::animateDiscreteType):
        (SVGAnimationElement):

2012-05-02  Alexander Færøy  <ahf@0x90.dk>

        Rename deviceDPI to devicePixelRatio
        https://bugs.webkit.org/show_bug.cgi?id=85049

        Reviewed by Kenneth Rohde Christiansen.

        No new tests added since this is a minor refactoring with no changes
        that should affect tests.

        * page/Settings.cpp:
        (WebCore::Settings::Settings):
        * page/Settings.h:
        (WebCore::Settings::setDevicePixelRatio):
        (WebCore::Settings::devicePixelRatio):
        (Settings):

2012-05-03  Nikolas Zimmermann  <nzimmermann@rim.com>

        Fix multiple begin values support - especially with seeking through setCurrentTime
        https://bugs.webkit.org/show_bug.cgi?id=85372

        Reviewed by Zoltan Herczeg.

        Multiple begin values aka. begin="0s; 2s" aren't correctly handled - resulting in broken & unexpected behavior.
        Supporting seeking properly on documents containing such animations is very important, otherwise we can't reliable
        test animations using either reftests or the SVG JS animation test framework.

        Testcase:
        <rect height="100" fill="green">
            <animate attributeName="width" begin="0s; 2s" dur="8s" from="0" to="100" fill="freeze"/>
        </rect>

        What's expected?
        Two times should be contained in the 'begin' times list in SVGSMILElement: m_beginTimes = { 0s, 2s }.
        The initial first resolved interval is: m_intervalBegin=0.0s, m_intervalEnd=8.0s.

        During t=0s..1.9999s the m_intervalBegin/m_intervalEnd are correct.
        At t=2s, a new interval can be started. m_intervalEnd should be set to nextBeginTime, where nextBeginTime=2s.
        The current interval should get cropped to: m_intervalBegin=0s, m_intervalEnd=2s. The following call to
        resolveNextInterval() sees that elapsed >= m_intervalEnd, and thus moves on to the next interval.
        m_intervalBegin should be 2s and m_intervalEnd=10s after that.

        In trunk this behavior is only partly implemented and broken. Especially broken together with seeking via SVGSVGElement.setCurrentTime.
        That's because we don't correctly seek to the right interval in case of multiple begin values, eg. if we sample an animation with
        begin="0s; 3s" dur="6s" we always remain in the first interval and don't move on.

        Fix all of these issues, making lots more tests work in Dr. Olaf Hofmanns SVG Animation test suite.

        Tests: svg/animations/multiple-begin-additive-animation.html
               svg/animations/multiple-begin-animation-discrete-expected.svg
               svg/animations/multiple-begin-animation-discrete.svg
               svg/animations/multiple-begin-animation-expected.svg
               svg/animations/multiple-begin-animation.svg

        * svg/animation/SMILTimeContainer.cpp:
        (WebCore::SMILTimeContainer::begin):
        (WebCore::SMILTimeContainer::setElapsed):
        (WebCore::SMILTimeContainer::updateAnimations):
        * svg/animation/SMILTimeContainer.h:
        (SMILTimeContainer):
        * svg/animation/SVGSMILElement.cpp:
        (WebCore::SVGSMILElement::findInstanceTime):
        (WebCore::SVGSMILElement::resolveInterval):
        (WebCore::SVGSMILElement::resolveNextInterval):
        (WebCore):
        (WebCore::SVGSMILElement::checkRestart):
        (WebCore::SVGSMILElement::seekToIntervalCorrespondingToTime):
        (WebCore::SVGSMILElement::progress):
        * svg/animation/SVGSMILElement.h:
        (SVGSMILElement):

2012-05-03  Dana Jansens  <danakj@chromium.org>

        [chromium] Don't add small opaque areas to the occlusion tracker's Region
        https://bugs.webkit.org/show_bug.cgi?id=85297

        Reviewed by Adrienne Walker.

        Don't add small opaque areas (smaller than 160x160) to the occlusion
        tracker's Region objects to avoid high Region::unite() costs.

        We would like Region to just be fast enough that this isn't a concern,
        and there are patches in flight to do this, but at the moment, small
        opaque areas add significant cost if there is many of them, for
        potentially small gains since they do not cover entire tiles.

        Comments in http://code.google.com/p/chromium/issues/detail?id=124687
        motivate this approach for now, and point to around 160x160 being
        a reasonable threshold.

        Removes the opaque paint tracking flag while we're here. The flag is
        no longer used, and was broken when we moved the "paint vs opaque
        flag" distinction out to the layers.

        Unit test: CCOcclusionTrackerTestMinimumTrackingSize

        * platform/graphics/chromium/cc/CCLayerTreeHost.cpp:
        (WebCore::CCLayerTreeHost::paintLayerContents):
        * platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:
        (WebCore::CCLayerTreeHostImpl::calculateRenderPasses):
        * platform/graphics/chromium/cc/CCOcclusionTracker.cpp:
        (WebCore::::CCOcclusionTrackerBase):
        (WebCore::addOcclusionBehindLayer):
        (WebCore::::markOccludedBehindLayer):
        * platform/graphics/chromium/cc/CCOcclusionTracker.h:
        (WebCore::CCOcclusionTrackerBase::setMinimumTrackingSize):
        (CCOcclusionTrackerBase):
        (WebCore::CCOcclusionTrackerBase::preferredMinimumTrackingSize):

2012-05-02  Jon Lee  <jonlee@apple.com>

        Migrate permission functions to Notification from NotificationCenter
        https://bugs.webkit.org/show_bug.cgi?id=80485
        <rdar://problem/10965458>

        Reviewed by Jian Li.

        * notifications/Notification.idl: Add permission functions.
        * notifications/DOMWindowNotifications.idl: Wrap webkitNotifications as part of legacy API.

        * notifications/Notification.cpp: New permission functions are wrapped with ENABLE(NOTIFICATIONS)
        (WebCore::Notification::taskTimerFired): Use the new permission functions to determine whether we can show the
        notification.
        (WebCore::Notification::permissionLevel):
        (WebCore::Notification::permissionString): Declare three static locals for each of the values, and return
        based on the permission enum.
        (WebCore::Notification::requestPermission): Forward request to client.
        * notifications/Notification.h:

        * notifications/NotificationPermissionCallback.h: Added.
        (NotificationPermissionCallback):
        (WebCore::NotificationPermissionCallback::~NotificationPermissionCallback):
        * notifications/NotificationPermissionCallback.idl: Added.

        * notifications/NotificationCenter.cpp: Wrap permission functions in ENABLE(LEGACY_NOTIFICATIONS)
        * notifications/NotificationCenter.h: Wrap permission functions in ENABLE(LEGACY_NOTIFICATIONS)
        * notifications/NotificationCenter.idl: Refactor conditionals to make the center available only when
        ENABLE(LEGACY_NOTIFICATIONS) is on.
        * notifications/NotificationPresenter.h:
        (WebCore::NotificationPresenter::requestPermission): Add new requestPermission() function for new
        NotificationPermissionCallback type. Make it a stub implementation until all ports have adopted.

        * notifications/NotificationClient.h: Add another requestPermission() client call, wrapped in
        ENABLE(NOTIFICATIONS) that accepts the NotificationPermissionCallback. Wrap the original one in
        ENABLE(LEGACY_NOTIFICATIONS).

        * bindings/js/JSDesktopNotificationsCustom.cpp: Change to include the implementation only in
        ENABLE(LEGACY_NOTIFICATIONS).
        * bindings/js/JSNotificationsCustom.cpp: Custom implementation of requestPermission().
        * bindings/v8/custom/V8NotificationCustom.cpp: Custom implementation of requestPermission().

        * notifications/WorkerContextNotifications.idl: Make webktNotifications available only in legacy API.
        * CMakeLists.txt: Add new callback idl.
        * DerivedSources.make: Add new callback idl.
        * DerivedSources.pri: Add new callback idl.
        * GNUmakefile.list.am: Add NotificationPermissionCallback files.
        * Target.pri: Include JSNotificationCustom.cpp, V8NotificationCustom.cpp
        * UseJSC.cmake: Include JSNotificationCustom.cpp
        * UseV8.cmake: Include V8NotificationCustom.cpp
        * WebCore.gypi: Include JSNotificationCustom.cpp, V8NotificationCustom.cpp, JSNotificationPermissionCallback.{h,cpp}
        * WebCore.vcproj/WebCore.vcproj: Include JSNotificationCustom.cpp, JSNotificationPermissionCallback.{h,cpp}
        * WebCore.exp.in: Export permissionString().
        * WebCore.xcodeproj/project.pbxproj: Add callback idl, h, and cpp files.

2012-05-02  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r115907.
        http://trac.webkit.org/changeset/115907
        https://bugs.webkit.org/show_bug.cgi?id=85458

        It broke all viewport tests on Qt and on GTK (Requested by
        Ossy on #webkit).

        * dom/ViewportArguments.cpp:
        (WebCore::computeViewportAttributes):
        * dom/ViewportArguments.h:
        (ViewportAttributes):

2012-05-02  Gustavo Noronha Silva  <gns@gnome.org>

        [GTK] Finish moving modules into libWebCoreModules.la
        https://bugs.webkit.org/show_bug.cgi?id=85449

        Unreviewed build fix.

        * GNUmakefile.list.am: move remaining modules source files into the
        libWebCoreModules library, this should fix the problems people had
        building the 1.9.1 tarball with unpatched make.

2012-05-02  Dongwoo Im  <dw.im@samsung.com>

        [EFL] Unreviewed, Fix build break when WEB_AUDIO is enabled.
        https://bugs.webkit.org/show_bug.cgi?id=85443

        Unreviewed build fix.

        Three new files were added in the Modules/webaudio directory.
        These files should be included into the CMakeLists.txt file.

        * CMakeLists.txt: Add the newly created files into the CMakeLists.txt

2012-05-02  Eric Seidel  <eric@webkit.org>

        Sort ENABLE_ defines in FeatureDefines.xcconfig files to make them easier to compare with one another (and easier to autogenerate)
        https://bugs.webkit.org/show_bug.cgi?id=85433

        Reviewed by Adam Barth.

        I have a script which can autogenerate these xcconfig files as well as the
        vsprops files (and soon the Chromium, cmake, gnumake and qmake) feature lists
        from a central feature list file.
        In preparation for posting such a tool, I'm re-sorting these xcconfig files to be
        alphabetically ordered (currently they're close, but not quite).
        There is also at least one inconsistency between these files (CSS_LEGACY_PREFIXES) which
        I will fix in a second pass.  I will also sort the FEATURE_DEFINES = line in a follow-up patch.

        * Configurations/FeatureDefines.xcconfig:

2012-05-02  Dana Jansens  <danakj@chromium.org>

        [chromium] Don't occlude pixels in a surface that are needed for a background filter blur
        https://bugs.webkit.org/show_bug.cgi?id=84317

        Reviewed by Adrienne Walker.

        Blur filters move pixels around, so a pixel can influence the value of
        pixels at some distance away. If a pixel is not occluded, then all
        pixels within the radius of the blur may influence the value of that
        pixel, so they should also stay unoccluded.

        For background filters, the pixels are read from the filter's target
        surface, so we remove occlusion from that target surface from pixels
        that will blur into visible pixels.

        Unit test: CCOcclusionTrackerTestDontOccludePixelsNeededForBackgroundFilter
                   CCOcclusionTrackerTestTwoBackgroundFiltersReduceOcclusionTwice
                   CCOcclusionTrackerTestDontOccludePixelsNeededForBackgroundFilterWithClip
                   CCOcclusionTrackerTestDontReduceOcclusionBelowBackgroundFilter
                   CCOcclusionTrackerTestDontReduceOcclusionIfBackgroundFilterIsOccluded
                   CCOcclusionTrackerTestReduceOcclusionWhenBackgroundFilterIsPartiallyOccluded

        * platform/graphics/chromium/cc/CCOcclusionTracker.cpp:
        (WebCore::reduceOcclusion):
        (WebCore):
        (WebCore::reduceOcclusionBelowSurface):
        (WebCore::::leaveToTargetRenderSurface):
        (WebCore::::unoccludedContributingSurfaceContentRect):
        * platform/graphics/chromium/cc/CCOcclusionTracker.h:
        (CCOcclusionTrackerBase):
        * platform/graphics/chromium/cc/CCQuadCuller.cpp:
        (WebCore::CCQuadCuller::appendSurface):
        (WebCore::CCQuadCuller::appendReplica):

2012-05-02  Levi Weintraub  <leviw@chromium.org>

        Convert FractionalLayoutUnit overflow assertions to stderr warnings
        https://bugs.webkit.org/show_bug.cgi?id=85393

        Reviewed by Eric Seidel.

        Writing warnings to stderr when FractionalLayoutUnits overflow on debug builds instead of asserting
        and crashing. It can be very useful to WebKit developers know when overflow is occurring, but it's
        not always a programming error, so assert wasn't the right action.

        No new tests. No change in behavior.

        * platform/FractionalLayoutUnit.h:
        (WebCore):
        (WebCore::FractionalLayoutUnit::FractionalLayoutUnit):
        (WebCore::FractionalLayoutUnit::toUnsigned):
        (WebCore::FractionalLayoutUnit::setRawValue):

2012-04-18  Jon Honeycutt  <jhoneycutt@apple.com>

        FrameLoaderClient::dispatchWillSendSubmitEvent() should be given more
        information about the form being submitted
        https://bugs.webkit.org/show_bug.cgi?id=84297

        Reviewed by Andy Estes.

        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::prepareForSubmission):
        Get the form field names and values, and use them to create a FormState
        object. Pass this object when calling dispatchWillSendSubmitEvent().
        (WebCore::HTMLFormElement::getTextFieldValues):
        Loop over the associated elements, looking for <input> elements.
        Collect their names and values.

        * html/HTMLFormElement.h:
        Declare getTextFieldData().

        * loader/EmptyClients.h:
        (WebCore::EmptyFrameLoaderClient::dispatchWillSendSubmitEvent):
        Updated declaration for new parameter type.

        * loader/FrameLoaderClient.h:
        Updated declaration of dispatchWillSendSubmitEvent() for new param
        type.

2012-04-13  Jon Honeycutt  <jhoneycutt@apple.com>

        Make Page::setDefersLoading() have a call count so that each time
        loading is deferred, it must be balanced with a call to resume.
        https://bugs.webkit.org/show_bug.cgi?id=84522

        Reviewed by Andy Estes.

        * page/Page.cpp:
        (WebCore::Page::Page):
        Initialize new call count member.
        (WebCore::Page::setDefersLoading):
        Check whether the callers wants balanced defer/resume loading behavior.
        If the call count is not changing from 0 to 1 or 1 to 0, return early.
        Otherwise, defer or resume loading for frames in this page.

        * page/Page.h:
        (WebCore::Page::defersLoading):
        Added a member to hold the call count.

        * page/Settings.cpp:
        (WebCore::Settings::Settings):
        Initialized new member m_wantsBalancedSetDefersLoadingBehavior.

        * page/Settings.h:
        (Settings):
        Added new member m_wantsBalancedSetDefersLoadingBehavior.
        (WebCore::Settings::setWantsBalancedSetDefersLoadingBehavior):
        Setter.
        (WebCore::Settings::wantsBalancedSetDefersLoadingBehavior):
        Getter.

2012-05-02  Ojan Vafai  <ojan@chromium.org>

        Add a histogram for rendertree size
        https://bugs.webkit.org/show_bug.cgi?id=85226

        Reviewed by Eric Seidel.

        We record it when the page gets hidden, since this is a point
        at which, in theory, we could kill the rendertree.

        No new tests. This isn't web visible, so there's no way to test it.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::clear):
        * page/Page.cpp:
        (WebCore::Page::renderTreeSize):
        (WebCore):
        (WebCore::Page::setVisibilityState):
        * page/Page.h:
        (Page):
        * platform/HistogramSupport.cpp:
        (WebCore::HistogramSupport::histogramCustomCounts):
        (WebCore):
        * platform/HistogramSupport.h:
        (HistogramSupport):
        * platform/chromium/HistogramSupportChromium.cpp:
        (WebCore::HistogramSupport::histogramCustomCounts):
        (WebCore):

2012-05-02  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r115902.
        http://trac.webkit.org/changeset/115902
        https://bugs.webkit.org/show_bug.cgi?id=85441

        Compile failure on linux 32 (Requested by zhenyao on #webkit).

        * Modules/indexeddb/IDBBackingStore.h:
        (IDBBackingStore):
        * Modules/indexeddb/IDBLevelDBBackingStore.cpp:
        (WebCore::IDBLevelDBBackingStore::nextAutoIncrementNumber):
        * Modules/indexeddb/IDBLevelDBBackingStore.h:
        (IDBLevelDBBackingStore):
        * Modules/indexeddb/IDBObjectStoreBackendImpl.cpp:
        (WebCore::IDBObjectStoreBackendImpl::putInternal):
        (WebCore::IDBObjectStoreBackendImpl::genAutoIncrementKey):
        * Modules/indexeddb/IDBObjectStoreBackendImpl.h:
        (IDBObjectStoreBackendImpl):

2012-05-02  Julien Chaffraix  <jchaffraix@webkit.org>

        Add ASSERTs to avoid querying dirtied z-index or normal flow lists on RenderLayer
        https://bugs.webkit.org/show_bug.cgi?id=84920

        Reviewed by Simon Fraser.

        Covered by existing tests in Debug (at least several time!).

        This change adds some ASSERTs on RenderLayer that prevent any use of its lists if they
        are dirtied.

        On top of this change, we added an invariant that non-stacking contexts should have their
        z-index lists NULL (instead of empty or NULL previously). This is enforced at
        updateZOrderLists time as we now ensure that it is called in a timely manner.

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::calculateLayerBounds):
        Added call to updateLayersIfNeeded as we will query them later and there is no guarantee
        that they are not dirty (we recurse in our children as part of calculateLayerBounds).
        This was causing the new ASSERTs to trigger on css3/filter/ tests.

        (WebCore::RenderLayer::dirtyZOrderLists):
        Added a comment as to why we can't ASSERT that we are in a stacking context here.

        (WebCore::RenderLayer::rebuildZOrderLists):
        Added an ASSERT that we only rebuild z-index lists for dirtied stacking context.

        (WebCore::RenderLayer::updateLayerListsIfNeeded):
        Updated to ensure that the reflection layer has its layers updated too. This was triggering
        the new ASSERTs on fast/runins/run-in-layer-not-removed-crash.html.

        (WebCore::RenderLayer::updateCompositingAndLayerListsIfNeeded):
        Updated to use the new isDirtyStackingContext function.

        * rendering/RenderLayer.h:
        (WebCore::RenderLayer::isDirtyStackingContext):
        New helper function. Also made updateLayerListsIfNeeded() the only way
        to update layer. That should prevent any misuse.

        (WebCore::RenderLayer::posZOrderList):
        (WebCore::RenderLayer::negZOrderList):
        (WebCore::RenderLayer::normalFlowList):
        ASSERT that we don't query any of the previous lists if they are dirty. Also
        enforce the invariant that non-stacking contexts should have NULL z-index lists.

        (WebCore::RenderLayer::clearZOrderLists):
        New function to clearZOrderLists so that we can enfore the previous invariant.

        (WebCore::RenderLayer::updateZOrderLists):
        Updated to clear the dirty flag and the z-index lists for non-stacking context.

        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::addToOverlapMapRecursive):
        (WebCore::RenderLayerCompositor::computeCompositingRequirements):
        (WebCore::RenderLayerCompositor::rebuildCompositingLayerTree):
        Removed the explicit ASSERTs.

        (WebCore::RenderLayerCompositor::updateLayerTreeGeometry):
        (WebCore::RenderLayerCompositor::canBeComposited):
        Disabled compositing on RenderLayer in flow thread. Because flow thread's
        RenderLayer are not collected as part of RenderLayer's lists and could be composited,
        this was causing the new ASSERTs to trigger (e.g. on fast/regions/webkit-flow-renderer-layer.html).

        * rendering/RenderTreeAsText.cpp:
        (WebCore::writeLayers):
        Updated to use updateLayerListsIfNeeded().

2012-05-02  Levi Weintraub  <leviw@chromium.org>

        Remove unused adjustForAbsoluteZoom method in RenderObject.h
        https://bugs.webkit.org/show_bug.cgi?id=85396

        Reviewed by Eric Seidel.

        We only want to use the integer adjustForAbsoluteZoom method, so this remnant is both unused
        and potentially confusing.

        No new tests. Removing unused code.

        * rendering/RenderObject.h:
        (WebCore):

2012-05-02  Fady Samuel  <fsamuel@chromium.org>

        Removing line in computeViewportAttributes that enforces a minimum scale factor to never allow zooming out more than viewport
        https://bugs.webkit.org/show_bug.cgi?id=70609

        Reviewed by Kenneth Rohde Christiansen.

        Make ViewportAttributes' layoutSize be a FloatRect to avoid rounding
        too early, and the occasional off by one fixed layout dimensions.

        * dom/ViewportArguments.cpp:
        (WebCore::computeViewportAttributes):
        * dom/ViewportArguments.h:
        (ViewportAttributes):

2012-05-02  Joshua Bell  <jsbell@chromium.org>

        IndexedDB: Handle generated keys up to 2^53
        https://bugs.webkit.org/show_bug.cgi?id=85114

        The spec defines the behavior for generated keys up to 2^53
        (the maximum integer storable as an ECMAScript number) and
        the error case when going beyond that. Ensure that we can
        handle values up to that point and generate errors beyond.

        Reviewed by Tony Chang.

        Test: storage/indexeddb/key-generator.html

        * Modules/indexeddb/IDBBackingStore.h:
        (IDBBackingStore):
        * Modules/indexeddb/IDBLevelDBBackingStore.cpp:
        (WebCore::IDBLevelDBBackingStore::nextAutoIncrementNumber):
        * Modules/indexeddb/IDBLevelDBBackingStore.h:
        (IDBLevelDBBackingStore):
        * Modules/indexeddb/IDBObjectStoreBackendImpl.cpp:
        (WebCore::IDBObjectStoreBackendImpl::putInternal):
        (WebCore::IDBObjectStoreBackendImpl::genAutoIncrementKey):
        * Modules/indexeddb/IDBObjectStoreBackendImpl.h:
        (IDBObjectStoreBackendImpl):

2012-05-02  Adam Klein  <adamk@chromium.org>

        Childlist mutations in shadow DOM should be observable with MutationObservers
        https://bugs.webkit.org/show_bug.cgi?id=85402

        Reviewed by Ojan Vafai.

        Though Mutation Events are not supported in Shadow DOM,
        MutationObservers are supposed to be. Due to a misplacement of the
        ChildListMutationScope, they were erroneously getting skipped.

        This patch moves code around to properly notify when childlist are
        mutated in shadow DOM and covers that change with a new test.

        Test: fast/mutation/shadow-dom.html

        * dom/ContainerNode.cpp:
        (WebCore::willRemoveChild): Handle notification of removal directly.
        (WebCore::willRemoveChildren): ditto.
        (WebCore::dispatchChildInsertionEvents): Remove notification of insertion.
        (WebCore::dispatchChildRemovalEvents): Remove notification of removal.
        (WebCore::updateTreeAfterInsertion): Handle notification of insertion directly.

2012-05-02  Eric Carlson  <eric.carlson@apple.com>

        Crash in WebCore::TextTrackList::remove
        https://bugs.webkit.org/show_bug.cgi?id=85095

        Reviewed by Maciej Stachowiak.

        Test: media/track/track-remove-quickly.html

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::willRemoveTrack): Return immediately if the tracks collection
            has not been allocated yet.

2012-05-02  David Barton  <dbarton@mathscribe.com>

        After appending MathML with jquery the table renders with overlaps
        https://bugs.webkit.org/show_bug.cgi?id=52444

        Reviewed by Julien Chaffraix.

        This patch also fixes bugs 72834 and 47781. The main problem is that correct preferred
        logical widths are affected by operator stretching. Thus we add a call to
        setNeedsLayoutAndPrefWidthsRecalc() after the stretching code in
        RenderMathMLOperator.cpp, and change RenderMathMLBlock and RenderMathMLRow to make sure
        that stretching of children is done before an <mrow>'s preferred logical widths are
        computed.
        
        Test: Added a test to mathml/presentation/mo-stretch.html

        * rendering/mathml/RenderMathMLBlock.cpp:
        (WebCore::RenderMathMLBlock::RenderMathMLBlock):
        (WebCore::RenderMathMLBlock::computePreferredLogicalWidths):
        (WebCore::RenderMathMLBlock::computeChildrenPreferredLogicalHeights):
        (WebCore::RenderMathMLBlock::preferredLogicalHeightAfterSizing):
        * rendering/mathml/RenderMathMLBlock.h:
        (WebCore::RenderMathMLBlock::unembellishedOperator):
        (WebCore::RenderMathMLBlock::isPreferredLogicalHeightDirty):
        (WebCore::RenderMathMLBlock::preferredLogicalHeight):
        (WebCore::RenderMathMLBlock::setPreferredLogicalHeight):
            - Add m_preferredLogicalHeight and methods to compute and return it.
            - Remove stretchToHeight() from most classes as it no longer needs to be done
              recursively. We just call it on the base of an embellished operator, and that
              calls setNeedsLayoutAndPrefWidthsRecalc() to mark itself and its container
              chain.
        
        * rendering/mathml/RenderMathMLOperator.cpp:
        (WebCore::RenderMathMLOperator::stretchToHeight):
            - Don't compare an unexpanded height to an expanded one.
        (WebCore::RenderMathMLOperator::computePreferredLogicalWidths):
        (WebCore::RenderMathMLOperator::updateFromElement):
            - After stretching, call setNeedsLayoutAndPrefWidthsRecalc().
        * rendering/mathml/RenderMathMLOperator.h:
        (RenderMathMLOperator):
        
        * rendering/mathml/RenderMathMLRow.cpp:
        (WebCore::RenderMathMLRow::computePreferredLogicalWidths):
        (WebCore::RenderMathMLRow::layout):
        * rendering/mathml/RenderMathMLRow.h:
        (RenderMathMLRow):
            - Add computePreferredLogicalWidths(), using computeChildrenPreferredLogicalHeights()
              to compute our children's preferred logical heights if necessary, followed by
              operator stretching.
        
        * rendering/mathml/RenderMathMLSubSup.cpp:
        * rendering/mathml/RenderMathMLSubSup.h:
        (RenderMathMLSubSup):
        * rendering/mathml/RenderMathMLUnderOver.cpp:
        * rendering/mathml/RenderMathMLUnderOver.h:
        (RenderMathMLUnderOver):

2012-05-02  Dana Jansens  <danakj@chromium.org>

        [chromium] Avoid extra Region copies in CCOcclusionTracker
        https://bugs.webkit.org/show_bug.cgi?id=85257

        Reviewed by Adrienne Walker.

        Instead of making a Region for each layer and then uniting the region
        with the current occlusion, directly add the rects for the given layer
        to the current occlusion.

        When subtracting a region from a rect, just subtract the region
        directly instead of computing the intersecting region.

        Covered by existing tests.

        * platform/graphics/chromium/cc/CCOcclusionTracker.cpp:
        (WebCore::addOcclusionBehindLayer):
        (WebCore::::markOccludedBehindLayer):
        (WebCore::rectSubtractRegion):

2012-05-02  Keith Rosenblatt  <keith.rosenblatt@nokia.com>

        [Qt] ASSERT in FontCustomPlatformDataQt.cpp with invalid font in data URI
        https://bugs.webkit.org/show_bug.cgi?id=85089

        Reviewed by Simon Hausmann.

        Do not return data referencing an invalid QRawFont from createFontCustomPlatformData().  Instead
        return null.

        Test: fast/css/font-face-data-uri-invalid.html

        * platform/graphics/qt/FontCustomPlatformDataQt.cpp:
        (WebCore::createFontCustomPlatformData):

2012-05-02  Michal Mocny  <mmocny@google.com>

        [chromium] Set contents texture manager preferred memory limit based on GpuMemoryManager suggestion.
        https://bugs.webkit.org/show_bug.cgi?id=84270

        Reviewed by Kenneth Russell.

        Updates the content texture manager memory limits based on GpuMemoryManager memory allocation suggestions.

        The memory allocation size (in bytes) is fed from LayerRendererChromium memory allocation changed callback
        handler to CCLayerTreeHost.  At that point we adjust the limits, using the existing notions of preferred and
        max limits.

        On android, the preferred limit is half the maximum (as it has always been), but on all other platforms the
        preferred limit is now equal to max, in order to allow more agressive prepainting.

        Finally, android has memory constraints dependant on viewportSize, but that logic has been pushed into
        the GpuMemoryManager.

        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererGpuMemoryAllocationChangedCallbackAdapter::onGpuMemoryAllocationChanged):
        (WebCore::LayerRendererChromium::beginDrawingFrame):
        * platform/graphics/chromium/LayerRendererChromium.h:
        (LayerRendererChromiumClient):
        * platform/graphics/chromium/TextureManager.cpp:
        (WebCore::TextureManager::setMemoryAllocationLimitBytes):
        (WebCore):
        * platform/graphics/chromium/TextureManager.h:
        (TextureManager):
        * platform/graphics/chromium/cc/CCLayerTreeHost.cpp:
        (WebCore::CCLayerTreeHost::setViewportSize):
        (WebCore::CCLayerTreeHost::setContentsMemoryAllocationLimitBytes):
        (WebCore):
        * platform/graphics/chromium/cc/CCLayerTreeHost.h:
        (CCLayerTreeHost):
        * platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:
        (WebCore::CCLayerTreeHostImpl::setContentsMemoryAllocationLimitBytes):
        (WebCore):
        * platform/graphics/chromium/cc/CCLayerTreeHostImpl.h:
        (CCLayerTreeHostImplClient):
        * platform/graphics/chromium/cc/CCSingleThreadProxy.cpp:
        (WebCore::CCSingleThreadProxy::postSetContentsMemoryAllocationLimitBytesToMainThreadOnImplThread):
        (WebCore):
        * platform/graphics/chromium/cc/CCSingleThreadProxy.h:
        * platform/graphics/chromium/cc/CCThreadProxy.cpp:
        (WebCore::CCThreadProxy::postSetContentsMemoryAllocationLimitBytesToMainThreadOnImplThread):
        (WebCore):
        (WebCore::CCThreadProxy::setContentsMemoryAllocationLimitBytes):
        * platform/graphics/chromium/cc/CCThreadProxy.h:
        (CCThreadProxy):

2012-05-02  Emil A Eklund  <eae@chromium.org>

        Fix usage of layout types in platform code
        https://bugs.webkit.org/show_bug.cgi?id=85392

        Reviewed by Eric Seidel.

        No new tests, no change in functionality.

        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleGestureTap):
        Use rounded point for gestures as event handling is still mostly int based.

2012-05-02  Kenneth Russell  <kbr@google.com>

        Don't allocate stencil buffer if stencil flag is false in context creation attributes
        https://bugs.webkit.org/show_bug.cgi?id=85317

        Reviewed by Dimitri Glazkov.

        Make it appear to WebGL application that there is no stencil
        buffer even if the underlying GraphicsContext3D allocated one.
        Verified intended behavior with test case from Mozilla's bug report.

        Updated context-attributes-alpha-depth-stencil-antialias.html test
        from Khronos repository. Ran WebGL layout tests on Linux in
        Chrome's DRT and on Mac OS in Safari's.

        * html/canvas/WebGLFramebuffer.cpp:
        (WebCore::WebGLFramebuffer::hasStencilBuffer): Added query method.
        (WebCore): Changed desired semantics of isValidRenderbuffer.
        * html/canvas/WebGLFramebuffer.h:
        (WebGLFramebuffer): Added hasStencilBuffer.
        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore):
        (WebCore::WebGLRenderingContext::initializeNewContext):
            Clear new flag.
        (WebCore::WebGLRenderingContext::bindFramebuffer):
            Reset stencil test upon framebuffer change.
        (WebCore::WebGLRenderingContext::disable):
            Cache flag; reset stencil test.
        (WebCore::WebGLRenderingContext::enable):
            Cache flag; reset stencil test.
        (WebCore::WebGLRenderingContext::framebufferRenderbuffer):
            Reset stencil test upon renderbuffer change.
        (WebCore::WebGLRenderingContext::getContextAttributes):
            Force depth and stencil to false if false was requested.
        (WebCore::WebGLRenderingContext::isEnabled):
            Return cached flag.
        (WebCore::WebGLRenderingContext::renderbufferStorage):
            Reset stencil test upon renderbuffer reallocation.
        (WebCore::WebGLRenderingContext::applyStencilTest):
            Enable or disable stencil test based on request and availability.
        (WebCore::WebGLRenderingContext::enableOrDisable):
            Helper function.
        * html/canvas/WebGLRenderingContext.h:
        (WebGLRenderingContext):
            Added cache of STENCIL_TEST flag. Deleted unused m_stencilBits.

2012-05-02  Ryosuke Niwa  <rniwa@webkit.org>

        Drag and drop text into table is pasting the text in the next <td> element
        https://bugs.webkit.org/show_bug.cgi?id=75004

        Reviewed by Darin Adler.

        The bug was caused by ReplaceSelectionCommand adjusting the insertion position to be before
        of the block element containing the insertion position even when the block element is a table cell.

        Fixed the bug by not moving the insertion position before the table cell in this case.

        Test: editing/pasteboard/paste-into-table-cell.html

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

2012-05-02  Beth Dakin  <bdakin@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=85309
        supportsExpandedScrollbars() should check for the method we actually call rather 
        than a related method

        Reviewed by Anders Carlsson.

        Missing colon.
        * platform/mac/ScrollbarThemeMac.mm:
        (WebCore::supportsExpandedScrollbars):

2012-05-02  Antti Koivisto  <antti@apple.com>

        Move title and media queries from StyleSheetInternal to CSSStyleSheet
        https://bugs.webkit.org/show_bug.cgi?id=85387

        Reviewed by Anders Carlsson.

        Stylesheet title and media queries are determined by the owner, not by the stylesheet itself.
        The fields belong to CSSStyleSheet.
        
        This will make it easier to share StyleSheetInternal instances between documents.

        * css/CSSStyleSheet.cpp:
        (WebCore::StyleSheetInternal::StyleSheetInternal):
        (WebCore::StyleSheetInternal::isCacheable):
        (WebCore):
        (WebCore::CSSStyleSheet::setDisabled):
        
            Invalidate the document style directly instead of ping-ponging through StyleSheetInternal.

        (WebCore::CSSStyleSheet::setMediaQueries):
        (WebCore::CSSStyleSheet::media):
        * css/CSSStyleSheet.h:
        (StyleSheetInternal):
        (WebCore::StyleSheetInternal::originalURL):
        (WebCore::StyleSheetInternal::hasCharsetRule):
        (WebCore::CSSStyleSheet::mediaQueries):
        (CSSStyleSheet):
        (WebCore::CSSStyleSheet::setTitle):
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::appendAuthorStylesheets):
        (WebCore::StyleResolver::collectMatchingRulesForList):
        * dom/DOMImplementation.cpp:
        (WebCore::DOMImplementation::createCSSStyleSheet):
        * dom/ProcessingInstruction.cpp:
        (WebCore::ProcessingInstruction::setCSSStyleSheet):
        * dom/StyleElement.cpp:
        (WebCore::StyleElement::createSheet):
        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::parseAttribute):
        (WebCore::HTMLLinkElement::setCSSStyleSheet):
        * html/HTMLStyleElement.cpp:
        (WebCore::HTMLStyleElement::parseAttribute):
        * svg/SVGStyleElement.cpp:
        (WebCore::SVGStyleElement::parseAttribute):

2012-05-02  Alexis Menard  <alexis.menard@openbossa.org>

        Unreviewed Qt build fix with GCC 4.7.0.

        * platform/qt/DeviceMotionProviderQt.h:
        (DeviceMotionProviderQt):
        * platform/qt/DeviceOrientationProviderQt.cpp:
        (WebCore::DeviceOrientationProviderQt::~DeviceOrientationProviderQt):
        (WebCore):
        * platform/qt/DeviceOrientationProviderQt.h:
        (DeviceOrientationProviderQt):

2012-05-02  No'am Rosenthal  <noam.rosenthal@nokia.com>

        [Texmap] Enable css filters in TextureMapperGL
        https://bugs.webkit.org/show_bug.cgi?id=75778

        Unreviewed build fix to greenify the Qt Minimal bot.

        * platform/graphics/texmap/TextureMapperShaderManager.h:

2012-05-02  Philippe Normand  <pnormand@igalia.com>

        [GTK] Compilation warnings in RenderTheme
        https://bugs.webkit.org/show_bug.cgi?id=85286

        Reviewed by Martin Robinson.

        Removed un-needed code and refactored fileListNameForWidth
        accordingly to avoid un-used variable warnings during compilation.

        * platform/gtk/RenderThemeGtk.cpp:
        (WebCore):
        (WebCore::RenderThemeGtk::fileListNameForWidth):

2012-05-02  Ryosuke Niwa  <rniwa@webkit.org>

        NULL ptr in WebCore::AppendNodeCommand::AppendNodeCommand
        https://bugs.webkit.org/show_bug.cgi?id=75843

        Reviewed by Tony Chang.

        The crash was caused by indentIntoBlockquote's passing a bad outerBlock to moveParagraphsWithClone.

        When the position is created after blockquote in the following DOM:
        BODY
        * BLOCKQUOTE style=margin: 0 0 0 40px; border: none; padding: 0px;
            E
                #text "\nx\n"
        VisiblePosition's constructor (of startOfContents) turns the position into a legacy position (blockquote, 0).
        The crash occurs because this position doesn't belong in the same paragraph as E, which is the paragraph
        we're trying to move into the blockquote.

        Fixed bug by calling positionInParentAfterNode instead of positionAfterNode for now. We should eventually be
        able to use positionAfterNode here once VisiblePosition's constructor starts handling before/after positions
        properly.

        Test: editing/execCommand/indent-with-after-content-crash.html

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

2012-05-02  Jer Noble  <jer.noble@apple.com>

        WebWindowFadeAnimation ignores "duration" parameter.
        https://bugs.webkit.org/show_bug.cgi?id=85386

        Reviewed by Brady Eidson.

        Ignoring the "duration" parameter causes the full screen fade and scale animations
        to get out of sync.

        * platform/mac/WebWindowAnimation.mm:
        (-[WebWindowFadeAnimation initWithDuration:window:initialAlpha:finalAlpha:]):

2012-05-02  Julien Chaffraix  <jchaffraix@webkit.org>

        REGRESSION(110072): Clipping is not applied on layers that are animated using platform code
        https://bugs.webkit.org/show_bug.cgi?id=83954

        Reviewed by Simon Fraser.

        Tests: fast/layers/no-clipping-overflow-hidden-added-after-transform-expected.html
               fast/layers/no-clipping-overflow-hidden-added-after-transform.html
               fast/layers/no-clipping-overflow-hidden-added-after-transition-expected.html
               fast/layers/no-clipping-overflow-hidden-added-after-transition.html
               fast/layers/no-clipping-overflow-hidden-hardware-acceleration-expected.html
               fast/layers/no-clipping-overflow-hidden-hardware-acceleration.html
               (and all the tests that will need to be rebaselined)

        r110072 changed the way we create layers to lazily allocate overflow: hidden ones
        based on layout overflow. However with hardware acceleration, certain operations
        do cause overflow without actually calling layout (the test cases added as part
        of this change are using transition / animation). This means that those cases
        wouldn't properly clip.

        Due to the above issue and the other regressions from r110072, the easiest fix is
        to just to roll it out.

        * rendering/RenderBox.h:
        Changed to allocate a layer whenever we have an overflow clip.

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::scrolledContentOffset):
        (WebCore::RenderBox::cachedSizeForOverflowClip):
        Reverted those 2 to avoid using the cached size logic.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::updateScrollInfoAfterLayout):
        (WebCore::RenderBlock::layoutBlock):
        (WebCore::RenderBlock::paint):
        (WebCore::RenderBlock::isPointInOverflowControl):
        * rendering/RenderBlock.h:
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::willBeDestroyed):
        (WebCore::RenderBox::styleDidChange):
        (WebCore::RenderBox::layout):
        (WebCore::RenderBox::scrollWidth):
        (WebCore::RenderBox::scrollHeight):
        (WebCore::RenderBox::scrollLeft):
        (WebCore::RenderBox::scrollTop):
        (WebCore::RenderBox::setScrollLeft):
        (WebCore::RenderBox::setScrollTop):
        (WebCore::RenderBox::includeVerticalScrollbarSize):
        (WebCore::RenderBox::includeHorizontalScrollbarSize):
        (WebCore::RenderBox::pushContentsClip):
        (WebCore::RenderBox::popContentsClip):
        (WebCore::RenderBox::addLayoutOverflow):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::styleDidChange):
        * rendering/RenderBoxModelObject.h:
        (RenderBoxModelObject):
        * rendering/RenderDeprecatedFlexibleBox.cpp:
        (WebCore::RenderDeprecatedFlexibleBox::layoutBlock):
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::layoutBlock):
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::layout):
        * rendering/RenderTableRow.h:
        (RenderTableRow):
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::layout):
        Removed the previous scaffolding code and reverted some functions to
        being private (as they were prior to r110072).

2012-05-02  No'am Rosenthal  <noam.rosenthal@nokia.com>

        [Texmap] Enable css filters in TextureMapperGL
        https://bugs.webkit.org/show_bug.cgi?id=75778

        Reviewed by Jocelyn Turcotte.

        Added support for color filters in TextureMapperGL. Blur and shadow would be done in a
        different patch.

        Modified BitmapTexture::applyFilters to return a texture, since GL cannot paint a texture
        into itself.
        Created a shader map for standard filters, since all of them work more or less the same way
        with a single uniform. Added the colorization shaders based on the W3C filter spec, as
        already implemented in FEFilterRenderer.cpp and FEColorMatrix.cpp.
        We use two swapping textures to render the filters.

        Covered by tests in css3/filters.

        * platform/graphics/texmap/TextureMapper.cpp:
        (WebCore::TextureMapper::acquireTextureFromPool):
        * platform/graphics/texmap/TextureMapper.h:
        (WebCore::BitmapTexture::applyFilters):
        * platform/graphics/texmap/TextureMapperGL.cpp:
        (WebCore::BitmapTextureGL::updateContents):
        (WebCore):
        (WebCore::TextureMapperGL::drawFiltered):
        (WebCore::BitmapTextureGL::applyFilters):
        (WebCore::BitmapTextureGL::bind):
        * platform/graphics/texmap/TextureMapperGL.h:
        (TextureMapperGL):
        (BitmapTextureGL):
        * platform/graphics/texmap/TextureMapperImageBuffer.cpp:
        (WebCore::BitmapTextureImageBuffer::applyFilters):
        * platform/graphics/texmap/TextureMapperImageBuffer.h:
        (BitmapTextureImageBuffer):
        * platform/graphics/texmap/TextureMapperLayer.cpp:
        (WebCore::applyFilters):
        (WebCore::TextureMapperLayer::syncCompositingStateSelf):
        * platform/graphics/texmap/TextureMapperShaderManager.cpp:
        (WebCore::TextureMapperShaderManager::~TextureMapperShaderManager):
        (WebCore):
        (WebCore::StandardFilterProgram::~StandardFilterProgram):
        (WebCore::StandardFilterProgram::StandardFilterProgram):
        (WebCore::StandardFilterProgram::create):
        (WebCore::StandardFilterProgram::prepare):
        (WebCore::TextureMapperShaderManager::getShaderForFilter):
        * platform/graphics/texmap/TextureMapperShaderManager.h:
        (WebCore):
        (StandardFilterProgram):
        (WebCore::StandardFilterProgram::vertexAttrib):
        (WebCore::StandardFilterProgram::texCoordAttrib):
        (WebCore::StandardFilterProgram::textureUniform):
        (TextureMapperShaderManager):

2012-05-02  Philippe Normand  <pnormand@igalia.com>

        [GTK] media/track/track-cue-rendering-snap-to-lines-not-set.html fails
        https://bugs.webkit.org/show_bug.cgi?id=84378

        Reviewed by Eric Carlson.

        Fix positioning of the controls panel back to relative, as it is
        in the parent CSS. Also remove some duplicate CSS attributes.

        * css/mediaControlsGtk.css:
        (audio::-webkit-media-controls-panel, video::-webkit-media-controls-panel):

2012-05-02  Beth Dakin  <bdakin@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=85309
        supportsExpandedScrollbars() should check for the method we actually call rather 
        than a related method
        -and corresponding-
        <rdar://problem/11065691>

        Reviewed by Anders Carlsson.

        * platform/mac/ScrollbarThemeMac.mm:
        (WebCore::supportsExpandedScrollbars):

2012-05-02  Zalan Bujtas  <zbujtas@gmail.com>

        [Qt] Remove redundant updateViewportArguments() call from HTMLBodyElement::didNotifyDescendantInseretions()
        https://bugs.webkit.org/show_bug.cgi?id=84241

        Reviewed by Kenneth Rohde Christiansen.

        No need to update viewport arguments when the body element is inserted into the Document.
        Viewport arguments are updated first when the Document is set on the Frame, and later
        on any subsequent occurence of the viewport meta tag in the document.
        It is sufficient to dispatch viewport update once per main frame, if no viewport meta tag is present.

        Also add a flag to be able to track viewport argument update dispatch.

        No tests. Currrent viewport tests cover this behaviour.

        * dom/Document.cpp:
        (WebCore::Document::Document):
        (WebCore::Document::updateViewportArguments):
        (WebCore::Document::documentWillSuspendForPageCache):
        * dom/Document.h:
        (Document):
        (WebCore::Document::didDispatchViewportPropertiesChanged):
        * html/HTMLBodyElement.cpp:
        (WebCore::HTMLBodyElement::didNotifyDescendantInseretions):

2012-05-02  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: Cannot read property 'length' of undefined TextEditorModel.js:467
        https://bugs.webkit.org/show_bug.cgi?id=85360

        Reviewed by Yury Semikhatsky.

        Added the undo/redo stack length checks.

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

2012-05-02  Pavel Feldman  <pfeldman@chromium.org>

        WebInspector: Scripts panel editor dirty state is cleared when the tab with editor is closed.
        https://bugs.webkit.org/show_bug.cgi?id=85361

        Reviewed by Yury Semikhatsky.

        Added content validation upon script show.

        * inspector/front-end/JavaScriptSourceFrame.js:
        (WebInspector.JavaScriptSourceFrame.prototype.wasShown):

2012-05-02  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: breakpoints are de-activated only upon the second click.
        https://bugs.webkit.org/show_bug.cgi?id=85359

        Reviewed by Yury Semikhatsky.

        Initial value for activated state is set.

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

2012-05-02  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: live edit fails to report error
        https://bugs.webkit.org/show_bug.cgi?id=85357

        Reviewed by Yury Semikhatsky.

        ProtocolError is now a string, not an error object.

        * inspector/front-end/DatabaseQueryView.js:
        (WebInspector.DatabaseQueryView.prototype._queryError):
        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame.prototype.didEditContent):

2012-05-02  Lars Knudsen  <lars.knudsen@nokia.com>

        [Qt] Make DeviceMotion and DeviceOrientation work with WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=64595

        Reviewed by Kenneth Rohde Christiansen.

        No new tests added.  This change adds support for WK2
        what was in WK1.

        Also moving DeviceMotion and DeviceOrientation clients and
        providers to WebCore.  This is done to allow clean dependencies
        when statically linking WK2.

        * Target.pri:
        * WebCore.pri:
        * platform/qt/DeviceMotionClientQt.cpp: Renamed from Source/WebKit/qt/WebCoreSupport/DeviceMotionClientQt.cpp.
        (WebCore):
        (WebCore::DeviceMotionClientQt::~DeviceMotionClientQt):
        (WebCore::DeviceMotionClientQt::deviceMotionControllerDestroyed):
        (WebCore::DeviceMotionClientQt::setController):
        (WebCore::DeviceMotionClientQt::startUpdating):
        (WebCore::DeviceMotionClientQt::stopUpdating):
        (WebCore::DeviceMotionClientQt::currentDeviceMotion):
        * platform/qt/DeviceMotionClientQt.h: Renamed from Source/WebKit/qt/WebCoreSupport/DeviceMotionClientQt.h.
        (WebCore):
        (DeviceMotionClientQt):
        (WebCore::DeviceMotionClientQt::DeviceMotionClientQt):
        * platform/qt/DeviceMotionProviderQt.cpp: Renamed from Source/WebKit/qt/WebCoreSupport/DeviceMotionProviderQt.cpp.
        (WebCore):
        (WebCore::DeviceMotionProviderQt::DeviceMotionProviderQt):
        (WebCore::DeviceMotionProviderQt::~DeviceMotionProviderQt):
        (WebCore::DeviceMotionProviderQt::setController):
        (WebCore::DeviceMotionProviderQt::start):
        (WebCore::DeviceMotionProviderQt::stop):
        (WebCore::DeviceMotionProviderQt::filter):
        * platform/qt/DeviceMotionProviderQt.h: Renamed from Source/WebKit/qt/WebCoreSupport/DeviceMotionProviderQt.h.
        (WebCore):
        (DeviceMotionProviderQt):
        (WebCore::DeviceMotionProviderQt::currentDeviceMotion):
        * platform/qt/DeviceOrientationClientQt.cpp: Renamed from Source/WebKit/qt/WebCoreSupport/DeviceOrientationClientQt.cpp.
        (WebCore):
        (WebCore::DeviceOrientationClientQt::deviceOrientationControllerDestroyed):
        (WebCore::DeviceOrientationClientQt::setController):
        (WebCore::DeviceOrientationClientQt::startUpdating):
        (WebCore::DeviceOrientationClientQt::stopUpdating):
        (WebCore::DeviceOrientationClientQt::lastOrientation):
        * platform/qt/DeviceOrientationClientQt.h: Renamed from Source/WebKit/qt/WebCoreSupport/DeviceOrientationClientQt.h.
        (WebCore):
        (DeviceOrientationClientQt):
        * platform/qt/DeviceOrientationProviderQt.cpp: Renamed from Source/WebKit/qt/WebCoreSupport/DeviceOrientationProviderQt.cpp.
        (WebCore):
        (WebCore::DeviceOrientationProviderQt::DeviceOrientationProviderQt):
        (WebCore::DeviceOrientationProviderQt::~DeviceOrientationProviderQt):
        (WebCore::DeviceOrientationProviderQt::setController):
        (WebCore::DeviceOrientationProviderQt::start):
        (WebCore::DeviceOrientationProviderQt::stop):
        (WebCore::DeviceOrientationProviderQt::filter):
        * platform/qt/DeviceOrientationProviderQt.h: Renamed from Source/WebKit/qt/WebCoreSupport/DeviceOrientationProviderQt.h.
        (WebCore):
        (DeviceOrientationProviderQt):
        (WebCore::DeviceOrientationProviderQt::isActive):
        (WebCore::DeviceOrientationProviderQt::lastOrientation):
        (WebCore::DeviceOrientationProviderQt::hasAlpha):

2012-05-02  Yury Semikhatsky  <yurys@chromium.org>

        Web Inspector: exception in console when there are watch expressions
        https://bugs.webkit.org/show_bug.cgi?id=85351

        Check if script execution is still paused before trying to resolve an
        object for script popover because execution may be resumed after popover
        showing is scheduled but before we start resolving the object under
        the cursor in which case there is no selected call frame any more and
        we should hide the popover.

        Reviewed by Pavel Feldman.

        * inspector/front-end/JavaScriptSourceFrame.js:
        (WebInspector.JavaScriptSourceFrame.prototype._resolveObjectForPopover):

2012-05-02  Tommy Widenflycht  <tommyw@google.com>

        MediaStream API: Changing webkitGetUserMedia to take an object instead of a string
        https://bugs.webkit.org/show_bug.cgi?id=84850

        Reviewed by Dimitri Glazkov.

        The standard changed a while back to use an object as a dictionary but since JSC
        didn't support the Dictionary class until just recently we have not updated the API until now.

        Change covered by existing, and edited, tests.

        * Modules/mediastream/NavigatorMediaStream.cpp:
        (WebCore::NavigatorMediaStream::webkitGetUserMedia):
        * Modules/mediastream/NavigatorMediaStream.h:
        (WebCore):
        (NavigatorMediaStream):
        * Modules/mediastream/NavigatorMediaStream.idl:
        * Modules/mediastream/UserMediaRequest.cpp:
        (WebCore::UserMediaRequest::create):
        (WebCore::UserMediaRequest::UserMediaRequest):
        * Modules/mediastream/UserMediaRequest.h:
        (WebCore):
        (UserMediaRequest):
        * platform/mediastream/MediaStreamSourcesQueryClient.h:
        (MediaStreamSourcesQueryClient):

2012-05-02  Antti Koivisto  <antti@apple.com>

        StyleSheetInternal::parseUserStyleSheet() should be called parseAuthorStyleSheet().

        Rubber-stamped by Nikolas Zimmermann.

        * css/CSSImportRule.cpp:
        (WebCore::StyleRuleImport::setCSSStyleSheet):
        * css/CSSStyleSheet.cpp:
        (WebCore::StyleSheetInternal::parseAuthorStyleSheet):
        * css/CSSStyleSheet.h:
        (StyleSheetInternal):
        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::setCSSStyleSheet):

2012-05-02  Yury Semikhatsky  <yurys@chromium.org>

        REGRESSION: Web Inspector doesn't show cookies anymore
        https://bugs.webkit.org/show_bug.cgi?id=85349

        Pass root node instead of DataGrid object to the "populateNode" method.
        Added compiler annotations so that closure compiler catches such errors.

        Reviewed by Pavel Feldman.

        * inspector/front-end/CookiesTable.js:
        (WebInspector.CookiesTable.prototype._rebuildTable):
        * inspector/front-end/NetworkRequest.js:
        (WebInspector.NetworkRequest.prototype.addFrameError):

2012-05-02  Dongwoo Im  <dw.im@samsung.com>

        [EFL] Implement the Web Audio API feature.
        https://bugs.webkit.org/show_bug.cgi?id=78688

        Reviewed by Philippe Normand.

        Implement the Web Audio API feature on the EFL port.
        https://dvcs.w3.org/hg/audio/raw-file/tip/webaudio/specification.html

        * CMakeLists.txt: Add the list of the files which are needed for the Web Audio APi.
        * PlatformEfl.cmake: Add the list of the files which are needed for the Web Audio APi.
        * UseJSC.cmake: Add the list of the files which are needed for the Web Audio APi.
        * platform/audio/HRTFElevation.cpp: Enable the USE_CONCATENATED_IMPULSE_RESPONSES macro.
        (WebCore):
        * platform/audio/efl/AudioBusEfl.cpp: Added.
        (WebCore):
        (WebCore::AudioBus::loadPlatformResource): Create the absolute path of the audio resource.

2012-05-01  Kentaro Hara  <haraken@chromium.org>

        [V8] Add an Isolate parameter to setJSWrapperForXXX()
        https://bugs.webkit.org/show_bug.cgi?id=85329

        Reviewed by Adam Barth.

        The objective is to pass Isolate around in V8 bindings.
        This patch adds an Isolate parameter to setJSWrapperForXXX()
        and passes Isolate to setJSWrapperForXXX() in CodeGeneratorV8.pm.
        I'll pass Isolate to setJSWrapperForXXX() in custom bindings
        in a follow-up patch.

        No tests. No change in behavior.

        * bindings/scripts/CodeGeneratorV8.pm: Modified as described above.
        (GenerateConstructorCallback):
        (GenerateEventConstructorCallback):
        (GenerateNamedConstructorCallback):
        (GenerateToV8Converters):
        * bindings/v8/V8DOMWrapper.cpp:
        (WebCore::V8DOMWrapper::setJSWrapperForDOMNode):
        (WebCore::V8DOMWrapper::setJSWrapperForActiveDOMNode):
        * bindings/v8/V8DOMWrapper.h:
        (V8DOMWrapper):
        (WebCore::V8DOMWrapper::setJSWrapperForDOMObject):
        (WebCore::V8DOMWrapper::setJSWrapperForActiveDOMObject):

        * bindings/scripts/test/V8/V8Float64Array.cpp: Updated run-bindings-tests results.
        (WebCore::V8Float64Array::wrapSlow):
        * bindings/scripts/test/V8/V8TestActiveDOMObject.cpp:
        (WebCore::V8TestActiveDOMObject::wrapSlow):
        * bindings/scripts/test/V8/V8TestCustomNamedGetter.cpp:
        (WebCore::V8TestCustomNamedGetter::wrapSlow):
        * bindings/scripts/test/V8/V8TestEventConstructor.cpp:
        (WebCore::V8TestEventConstructor::constructorCallback):
        (WebCore::V8TestEventConstructor::wrapSlow):
        * bindings/scripts/test/V8/V8TestEventTarget.cpp:
        (WebCore::V8TestEventTarget::wrapSlow):
        * bindings/scripts/test/V8/V8TestInterface.cpp:
        (WebCore::V8TestInterface::constructorCallback):
        (WebCore::V8TestInterface::wrapSlow):
        * bindings/scripts/test/V8/V8TestMediaQueryListListener.cpp:
        (WebCore::V8TestMediaQueryListListener::wrapSlow):
        * bindings/scripts/test/V8/V8TestNamedConstructor.cpp:
        (WebCore::V8TestNamedConstructorConstructorCallback):
        (WebCore::V8TestNamedConstructor::wrapSlow):
        * bindings/scripts/test/V8/V8TestNode.cpp:
        (WebCore::V8TestNode::constructorCallback):
        (WebCore::V8TestNode::wrapSlow):
        * bindings/scripts/test/V8/V8TestObj.cpp:
        (WebCore::V8TestObj::constructorCallback):
        (WebCore::V8TestObj::wrapSlow):
        * bindings/scripts/test/V8/V8TestSerializedScriptValueInterface.cpp:
        (WebCore::V8TestSerializedScriptValueInterface::constructorCallback):
        (WebCore::V8TestSerializedScriptValueInterface::wrapSlow):

2012-05-01  Eric Seidel  <eric@webkit.org>

        Add <iframe seamless> navigation code (and pass all the navigation tests)
        https://bugs.webkit.org/show_bug.cgi?id=85340

        Reviewed by Adam Barth.

        This code was primarily written by Adam Barth and then submitted to my
        GitHub branch via a pull request:
        https://github.com/eseidel/webkit/compare/master...seamless
        https://github.com/eseidel/webkit/pull/2
        https://github.com/eseidel/webkit/pull/3

        I rewrote parts of it to use Docment::shouldDisplaySeamlesslyWithParent.

        Other parts of the original change have already been committed to WebKit by Adam
        as part of prep-work for making the loader seamless-ready.

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

2012-05-01  Vincent Scheib  <scheib@chromium.org>

        Fullscreen pop-up logic restored to using processingUserGesture.
        https://bugs.webkit.org/show_bug.cgi?id=85105

        WebKit was recently updated to the new Fullscreen API:
        http://dvcs.w3.org/hg/fullscreen/raw-file/tip/Overview.html#api
        http://trac.webkit.org/changeset/111028

        This change reverts back to using processingUserGesture() instead
        of DOMWindow::allowPopUp(). This fixes incorrect behavior in
        at least the Chromium port and is consistent with the cited
        definition of "allowed to show a pop-up":
          An algorithm is allowed to show a pop-up if, in the task in which the algorithm is running, either:
          - an activation behavior is currently being processed whose click event was trusted, or
          - the event listener for a trusted click event is being handled.

        Reviewed by Dimitri Glazkov.

        No new tests.

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

2012-05-01  Xiaomei Ji  <xji@chromium.org>

        enable ctrl-arrow move by word visually in non-Windows platforms.
        https://bugs.webkit.org/show_bug.cgi?id=85017

        Reviewed by Ryosuke Niwa.

        Enable ctrl-arrow moves caret by word in visual order in non-Windows platforms that use ICU word
        break iterator (it is not enabled for WinCE and Qt where ICU is not used). For those platforms, ctrl-arrow
        moves caret to word break position before spaces. For example, given a logical text "abc def hij", the word
        break positions using ctrl-left-arrow from rightmost position are "|abc |def |hij".
        The word break positions using ctrl-right-arrow from leftmost position are "abc| def| hij|".

        Test: editing/selection/move-by-word-visually-mac.html

        * editing/EditingBehavior.h:
        (EditingBehavior):
        (WebCore::EditingBehavior::shouldEatSpaceToNextWord): To control different word break positions
        (regards to space) for different platforms.
        * editing/FrameSelection.cpp:
        (WebCore::FrameSelection::modifyMovingRight): Enable visual word movement for all platforms that use ICU.
        (WebCore::FrameSelection::modifyMovingLeft):
        * editing/visible_units.cpp:
        (WebCore::visualWordPosition): Determine the right word break position (regards to space) based on EditingBehavior.
        (WebCore::leftWordPosition):
        (WebCore::rightWordPosition):
        * editing/visible_units.h:

2012-05-01  Raymond Liu  <raymond.liu@intel.com>

        Modify RealtimeAnalyserNode pull mechanism
        https://bugs.webkit.org/show_bug.cgi?id=77515

        Reviewed by Chris Rogers.

        Test: webaudio/automatic-pull-node.html

        * GNUmakefile.list.am:
        * Modules/webaudio/AudioBasicInspectorNode.cpp: Added.
        (WebCore):
        (WebCore::AudioBasicInspectorNode::AudioBasicInspectorNode):
        (WebCore::AudioBasicInspectorNode::pullInputs):
        (WebCore::AudioBasicInspectorNode::connect):
        (WebCore::AudioBasicInspectorNode::disconnect):
        (WebCore::AudioBasicInspectorNode::checkNumberOfChannelsForInput):
        (WebCore::AudioBasicInspectorNode::updatePullStatus):
        * Modules/webaudio/AudioBasicInspectorNode.h: Added.
        (WebCore):
        (AudioBasicInspectorNode):
        * Modules/webaudio/AudioContext.cpp:
        (WebCore::AudioContext::AudioContext):
        (WebCore::AudioContext::~AudioContext):
        (WebCore::AudioContext::handlePreRenderTasks):
        (WebCore::AudioContext::handlePostRenderTasks):
        (WebCore::AudioContext::markForDeletion):
        (WebCore):
        (WebCore::AudioContext::addAutomaticPullNode):
        (WebCore::AudioContext::removeAutomaticPullNode):
        (WebCore::AudioContext::updateAutomaticPullNodes):
        (WebCore::AudioContext::processAutomaticPullNodes):
        * Modules/webaudio/AudioContext.h:
        (AudioContext):
        * Modules/webaudio/AudioDestinationNode.cpp:
        (WebCore::AudioDestinationNode::provideInput):
        * Modules/webaudio/AudioNode.h:
        (AudioNode):
        * Modules/webaudio/AudioNodeOutput.h:
        (WebCore::AudioNodeOutput::isConnected):
        (AudioNodeOutput):
        * Modules/webaudio/RealtimeAnalyserNode.cpp:
        (WebCore::RealtimeAnalyserNode::RealtimeAnalyserNode):
        * Modules/webaudio/RealtimeAnalyserNode.h:
        (RealtimeAnalyserNode):
        * WebCore.gypi:
        * WebCore.xcodeproj/project.pbxproj:

2012-05-01  Keishi Hattori  <keishi@webkit.org>

        datalist: Form control in a <datalist> should be barred from constraint validation
        https://bugs.webkit.org/show_bug.cgi?id=84359

        Reviewed by Kent Tamura.

        Tests: fast/forms/datalist/datalist-child-validation.html
               fast/forms/form-control-element-crash.html

        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLFormControlElement::HTMLFormControlElement):
        (WebCore::HTMLFormControlElement::updateAncestors): Updates the ancestor information.
        (WebCore::HTMLFormControlElement::insertedInto): Invalidate the ancestor information and call setNeedsWillValidateCheck because willValidate might have changed.
        (WebCore::HTMLFormControlElement::removedFrom): Ditto.
        (WebCore::HTMLFormControlElement::disabled):
        (WebCore::HTMLFormControlElement::recalcWillValidate): Returns false if element has a datalist ancestor.
        (WebCore::HTMLFormControlElement::willValidate): Check if ancestor information is valid too.
        (WebCore::HTMLFormControlElement::setNeedsWillValidateCheck):
        * html/HTMLFormControlElement.h:
        (HTMLFormControlElement):

2012-05-01  Kent Tamura  <tkent@chromium.org>

        Calendar Picker: Close the picker by ESC key
        https://bugs.webkit.org/show_bug.cgi?id=85337

        Reviewed by Kentaro Hara.

        No new tests. Calendar picker is not testable in DRT yet.

        * Resources/calendarPicker.js:
        (handleGlobalKey): Close the popup by ESC key.

2012-05-01  Noel Gordon  <noel.gordon@gmail.com>

        PNGImageDecoder: Handle interlace buffer allocation failure
        https://bugs.webkit.org/show_bug.cgi?id=85276

        Reviewed by Eric Seidel.

        No new tests. Not something we can easily test (malloc failure).

        * platform/image-decoders/png/PNGImageDecoder.cpp:
        (WebCore::PNGImageDecoder::rowAvailable): Check interlace buffer allocations
        and bail via longjmp on failure. Note PNG_INTERLACE_ADAM7 is the only libpng
        supported interlace type so test for it explicitly.

2012-05-01  Kent Tamura  <tkent@chromium.org>

        Calendar Picker: Too wide in Japanese locale
        https://bugs.webkit.org/show_bug.cgi?id=85331

        Reviewed by Kentaro Hara.

        No new tests. This is a locale-specific behavior.

        * Resources/calendarPicker.js:
        (formatJapaneseImperialEra):
        Do not show an imperial era later than 平成99年 to avoid very long
        year string like "275760年(平成273772年)."
        (YearMonthController.prototype.attachTo):
        - Respect the maximum year specfied by <input max=...>
          If <input max="9999-12-31"> is specified, we don't need to
          secure space for the year 275,760.
        - Check the width for 平成99年 as well as the maximum year because
          "2087年(平成99年)" is usually wider than "275760年".

2012-05-01  Noel Gordon  <noel.gordon@gmail.com>

        PNGImageDecoder: Add ENABLE(IMAGE_DECODER_DOWN_SAMPLING) guards to rowAvailable
        https://bugs.webkit.org/show_bug.cgi?id=85268

        Reviewed by Eric Seidel.

        PNGImageDecoder supports image downsampling. Add ENABLE guards to show where
        downsampling is applied when outputting decoded rows to the frame buffer. Most
        ports don't enable the flag: don't penalize them in terms speed in this tight
        row pixel write loop. s/y/destY/ to match setRGBA() and amend some comments.

        No new tests. No change in behavior.

        * platform/image-decoders/png/PNGImageDecoder.cpp:
        (WebCore::PNGImageDecoder::rowAvailable):

2012-05-01  Eric Seidel  <eric@webkit.org>

        Remove uneeded min/max pref width assignment from RenderView
        https://bugs.webkit.org/show_bug.cgi?id=85325

        Reviewed by Julien Chaffraix.

        This code has been with us since the original import from KDE:
        http://trac.webkit.org/browser/trunk/WebCore/khtml/rendering/render_root.cpp?annotate=blame&rev=4#L93
        It's never been documented, or explained.  Removing it showed no
        effect on my local layout tests run.
        However this code blocks proper implementation of <iframe seamless>
        as we have to do proper min/max width negotiation across the iframe boundary.

        I would remove the whole function, but doing so opens a whole can of worms
        as this override is public, yet normally this function is *private* (well protected on RenderBox).
        It seems plausible that frame flattening code needs this override since it doesn't always
        call the min/maxPreferredWidth() calls which normally automatically call this compute*
        function if the pref-widths are dirty.
        Instead of trying to track that all down, I'm just removing this line, and we'll go
        back and remove the whole function at a later date if possible.

        * rendering/RenderView.cpp:
        (WebCore::RenderView::computePreferredLogicalWidths):

2012-05-01  Nate Chapin  <japhet@chromium.org>

        REGRESSION(r115654): PDFs come up blank
        https://bugs.webkit.org/show_bug.cgi?id=85275

        Reviewed by Alexey Proskuryakov.

        Test: http/tests/loading/pdf-commit-load-callbacks.html

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::finishedLoading): The load needs to be
            committed before we call finishedLoading on the
            FrameLoaderClient.
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::transitionToCommitted): We're guaranteeing
            that receivedFirstData() will be called other ways (namely,
            DocumentLoader won't finish without doing so). This call now
            causes custom representations to double-commit, which is bad.

2012-05-01  Eric Seidel  <eric@webkit.org>

        Add support for seamless attribute as well as seamless sandbox flag and default CSS styling
        https://bugs.webkit.org/show_bug.cgi?id=85302

        Reviewed by Ojan Vafai.

        This also adds support for the seamless sandbox flag from HTML 5.
        The sandbox flag is not speficially overridable in the current HTML5,
        but it is set (like all sandbox flags) by default when sandbox is specified.
        Unfortunately this support is not yet observable in this patch, as
        this patch adds not observable features of seamless.

        This patch also adds the html.css additions for seamless, as specified:
        http://www.whatwg.org/specs/web-apps/current-work/multipage/rendering.html#replaced-elements

        I noticed that my previous testing did not confirm that iframes marked
        for seamless (but not possible to display as seamless due to sandbox, etc.)
        were still to have this seamless styling.  I've added additional testing for this case.

        I also added another test for the about:blank FIXME added as part of this change.

        In order to support srcdoc w/ seamless, we needed to move the srcdoc determination
        sooner in the initSecurityContext function (before the should-inherit early return).

        The next patch will make seamless actually observable from JS/DOM, this one
        just lays down all the plumbing, and separates the security aspects for
        easy review.

        Test: fast/frames/seamless/seamless-inherited-origin.html

        * css/html.css:
        (iframe:not([seamless])):
        (iframe[seamless]):
        * dom/Document.cpp:
        (WebCore::isEligibleForSeamless):
        (WebCore):
        (WebCore::Document::initSecurityContext):
        (WebCore::Document::seamlessParentIFrame):
        (WebCore::Document::shouldDisplaySeamlesslyWithParent):
        * dom/Document.h:
        (WebCore):
        (Document):
        * dom/SecurityContext.cpp:
        (WebCore::SecurityContext::SecurityContext):
        * dom/SecurityContext.h:
        (WebCore::SecurityContext::mayDisplaySeamlessWithParent):
        (SecurityContext):
        * html/HTMLAttributeNames.in:
        * html/HTMLIFrameElement.cpp:
        (WebCore::HTMLIFrameElement::shouldDisplaySeamlessly):
        (WebCore):
        * html/HTMLIFrameElement.h:
        (HTMLIFrameElement):
        * html/HTMLIFrameElement.idl:

2012-05-01  Min Qin  <qinmin@google.com>

        use USE(NATIVE_FULLSCREEN_VIDEO) instead of ENABLE(NATIVE_FULLSCREEN_VIDEO)
        https://bugs.webkit.org/show_bug.cgi?id=85316

        Reviewed by Kent Tamura.

        NATIVE_FULLSCREEN_VIDEO means the fullscreen video is implemented by native
        system view instead of webkit.
        So it is more appropriate to use USE(NATIVE_FULLSCREEN_VIDEO).
        This chagne also disabled the rendering of the fullscreen video element in webkit
        when that flag is set.
        Just renaming the variable, no new tests.

        * dom/Document.cpp:
        (WebCore::Document::webkitWillEnterFullScreenForElement):
        (WebCore):
        * platform/graphics/MediaPlayer.cpp:
        (WebCore):
        * platform/graphics/MediaPlayer.h:
        (MediaPlayer):
        * platform/graphics/MediaPlayerPrivate.h:
        (MediaPlayerPrivateInterface):

2012-05-01  Jeffrey Pfau  <jpfau@apple.com>

        <rdar://problem/10422318> Support for web content filter delegate for filtering https content
        https://bugs.webkit.org/show_bug.cgi?id=85300

        Reviewed by Alexey Proskuryakov.

        No new tests.

        * WebCore.exp.in:
        * loader/MainResourceLoader.cpp:
        (WebCore::MainResourceLoader::MainResourceLoader):
        (WebCore::MainResourceLoader::~MainResourceLoader):
        (WebCore::MainResourceLoader::didCancel):
        (WebCore::MainResourceLoader::didReceiveResponse):
        (WebCore::MainResourceLoader::didReceiveData):
        (WebCore::MainResourceLoader::didFinishLoading):
        (WebCore::MainResourceLoader::didFail):
        * loader/MainResourceLoader.h:
        (MainResourceLoader):
        * platform/mac/WebCoreSystemInterface.h:
        * platform/mac/WebCoreSystemInterface.mm:

2012-05-01  Kent Tamura  <tkent@chromium.org>

        Calendar Picker: Add capability to add platform-specific style sheet
        https://bugs.webkit.org/show_bug.cgi?id=85272

        Reviewed by Kentaro Hara.

        Add RenderTheme::extraCalendarPickerStyleSheet(). The resultant string
        of the function is inserted into the calendar picker page.

        No new tests. Calendar picker apperance is not testable yet.

        * Resources/calendarPicker.css: Removed styles for year-month buttons.
        * Resources/calendarPickerMac.css:
        Moved from calendarPicker.css, and adjust styles so that they look
        standard Lion buttons.
        (.year-month-button):
        (.year-month-button:active):
        (.year-month-button:disabled):
        * WebCore.gyp/WebCore.gyp: Add a rule to produce CalendarPickerMac.{cpp,h}.
        * html/shadow/CalendarPickerElement.cpp:
        (WebCore::CalendarPickerElement::writeDocument):
        Add extraCalendarPickerStyleSheet() result to the document.
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::extraCalendarPickerStyleSheet):
        Added. Returns an empty CString by default.
        * rendering/RenderTheme.h:
        (RenderTheme): Added extraCalendarPickerStyleSheet().
        * rendering/RenderThemeChromiumMac.h: Added extraCalendarPickerStyleSheet().
        * rendering/RenderThemeChromiumMac.mm:
        (WebCore::RenderThemeChromiumMac::extraCalendarPickerStyleSheet):
        Added. Returns the content of Resources/calendarPickerMac.css.

2012-05-01  James Simonsen  <simonjam@chromium.org>

        Ensure HTMLElementStack fails gracefully if it has a non-Element.
        https://bugs.webkit.org/show_bug.cgi?id=85167

        Reviewed by Adam Barth.

        Test: Added to html5lib/resources/webkit02.dat

        * html/parser/HTMLElementStack.cpp:
        (WebCore::HTMLElementStack::oneBelowTop):
        * html/parser/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::processEndTag):

2012-05-01  Ryosuke Niwa  <rniwa@webkit.org>

        *Command.h files shouldn't be exported to WebKit layer
        https://bugs.webkit.org/show_bug.cgi?id=74778

        Reviewed by Eric Seidel.

        Remove the dependency on *Command.h files from Mac port's WebKit layer.
        Also wrapped the call to TypingCommand::insertParagraphSeparatorInQuotedContent in the Editor class
        so that we can just expose Editor's method instead of directly exposing the said static method.

        * WebCore.exp.in:
        * WebCore.xcodeproj/project.pbxproj:
        * editing/Editor.h:
        (Editor):
        * editing/mac/EditorMac.mm:
        (WebCore::Editor::insertParagraphSeparatorInQuotedContent):
        (WebCore):

2012-05-01  Julien Chaffraix  <jchaffraix@webkit.org>

        Remove one bit from m_column to pack RenderTableCell bits more
        https://bugs.webkit.org/show_bug.cgi?id=85291

        Reviewed by Ojan Vafai.

        Memory improvement, covered by the existing unit tests.

        * rendering/RenderTableCell.cpp:
        * rendering/RenderTableCell.h:
        Remove one bit from m_column (which should be fine as I wouldn't expect tables above 1 millions
        columns to render at all anyway) to pack the bitfields in 32 bits. Re-arranged the bits to have the bigger
        bitfield first.

2012-05-01  Anders Carlsson  <andersca@apple.com>

        Slow scrolling on www.sholby.net
        https://bugs.webkit.org/show_bug.cgi?id=85304
        <rdar://problem/11138952>

        Reviewed by Beth Dakin.

        Fix two performance issues that showed up on the profiles.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::checkLoadCompleteForThisFrame):
        Reset the relevant painted object counter; it's only interesting when loading.

        * page/Page.cpp:
        (WebCore::Page::startCountingRelevantRepaintedObjects):
        Set m_isCountingRelevantRepaintedObjects to true after calling reset, since reset now sets it to false.

        (WebCore::Page::resetRelevantPaintedObjectCounter):
        Set m_isCountingRelevantRepaintedObjects to false.

        (WebCore::Page::addRelevantRepaintedObject):
        Use HashSet::find to avoid an extra hash lookup.

        * page/scrolling/ScrollingCoordinator.cpp:
        (WebCore::ScrollingCoordinator::updateMainFrameScrollPositionAndScrollLayerPosition):
        Remove the call to FrameView::updateCompositingLayersAfterLayout now, since FrameView::notifyScrollPositionChanged
        already calls this and was making us to a lot of work twice.

2012-05-01  Silvia Pfeiffer  <silviapf@chromium.org>

        Audio controls have a 1px surplus outline coming from RenderImage::paintReplaced base class,
        which needs overwriting.
        https://bugs.webkit.org/show_bug.cgi?id=84570

        Reviewed by Eric Carlson.

        No new tests - covered by existing audio rendering tests.

        * rendering/RenderMedia.cpp:
        (WebCore::RenderMedia::paintReplaced): Overwrite inherited function.
        (WebCore):
        * rendering/RenderMedia.h:
        (RenderMedia):

2012-05-01  Terry Anderson  <tdanderson@chromium.org>

        Allow a pre-targeted node to be specified when dispatching a GestureTap event
        https://bugs.webkit.org/show_bug.cgi?id=85296

        Reviewed by Adam Barth.

        https://bugs.webkit.org/show_bug.cgi?id=85101
            The new parameter will be used and tested in this patch.

        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleGestureTap):
            The new preTargetedNode parameter can be used to pass in the Node that is
            the target of the GestureTap event. If this parameter is used, adjustedPoint
            is changed to be the center of the Node's bounding rectangle.
        * page/EventHandler.h:
        (EventHandler):

2012-05-01  Jessie Berlin  <jberlin@apple.com>

        Crash calling disconnectFrame on a DOMWindowExtension a second time.
        https://bugs.webkit.org/show_bug.cgi?id=85301

        Reviewed by Darin Adler.

        DOMWindowExtension::disconnectFrame assumed it would only be called when there was a frame
        to disconnect. However, DOMWindow's destructor invokes disconnectFrame on all its
        DOMWindowProperties, even if it already did so when it entered the page cache.

        * page/DOMWindowExtension.cpp:
        (WebCore::DOMWindowExtension::disconnectFrame):
        Don't do anything if the frame has already been disconnected.

2012-05-01  Aaron Colwell  <acolwell@chromium.org>

        Temporarily remove webkitSourceAddId() & webkitSourceRemoveId() from DOM
        until the rest of the Media Source v0.5 methods are implemented. This is
        to prevent ambiguity about whether v0.5 is fully supported or not.
        https://bugs.webkit.org/show_bug.cgi?id=85295

        Reviewed by Eric Carlson.

        No new tests. Removing methods from DOM so relevant tests are removed.

        * html/HTMLMediaElement.idl:

2012-05-01  Douglas Stockwell  <dstockwell@chromium.org>

        IndexedDB: stale index entries may not be removed in some cases
        https://bugs.webkit.org/show_bug.cgi?id=85224

        Reviewed by Ojan Vafai.

        Ensure that stale index entries are removed when the corresponding
        object store entry no longer exists.

        No new tests. Addresses a performance / storage leak that is
        not amenable to verification in a layout test.

        * Modules/indexeddb/IDBLevelDBBackingStore.cpp:
        (WebCore):

2012-05-01  Igor Oliveira  <igor.o@sisa.samsung.com>

        Use HashMap<OwnPtr> for CounterMap in RenderCounter
        https://bugs.webkit.org/show_bug.cgi?id=85294

        Reviewed by Eric Seidel.

        * rendering/RenderCounter.cpp:
        (WebCore):
        (WebCore::makeCounterNode):
        (WebCore::RenderCounter::destroyCounterNodes):

2012-05-01  Philip Rogers  <pdr@google.com>

        Skip building instance tree for disallowed target
        https://bugs.webkit.org/show_bug.cgi?id=85202

        Reviewed by Nikolas Zimmermann.

        When the target of a use is disallowed (e.g., a mask element) we can
        skip building the instance tree because the shadow tree will be
        skipped as well.

        Test: svg/custom/animate-disallowed-mask-element.svg

        * svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::buildInstanceTree):

2012-04-29  Nikolas Zimmermann  <nzimmermann@rim.com>

        Accumulation for values-animation is broken
        https://bugs.webkit.org/show_bug.cgi?id=85158

        Reviewed by Darin Adler.

        Example:
        <rect width="999" height="100" fill="green"/>
            <animate begin="0s" values="0; 30; 20" accumulate="sum" repeatCount="5" dur="2s"/>
        </rect>

        The rect should animate like this:
        0.000s -> 0
        0.500s -> 15
        1.000s -> 30
        1.500s -> 25
        1.999s -> 20
        2.000s -> 20 (first accumulation, starts accumulating from the last set value, here '20').
        2.500s -> 45
        3.000s -> 50
        3.500s -> 45
        3.999s -> 40
        4.000s -> 40 (second accumulation)
        etc.

        This is currently broken for values-animation. The accumulation should happen after a full cycle of the values animation ran (aka. at the end of the duration).
        A values animation works like this: iterate over the list of values, and calculate a 'from' and 'to' value for a given time. Example for values="0; 30; 20" dur="2s":
            - 0.0s .. 1.0s -> from=0, to=30
            - 1.0s .. 2.0s -> from=30, to=20

        Accumulation currently is taken into account at each interval for a values-animation instead of the end of the cycle. Fix that
        by passing an additional 'toAtEndOfDuration' type to calculateAnimatedValue() which is used for accumulation instead of the
        current 'to' value.

        Test: svg/animations/accumulate-values-width-animation.html

        * svg/SVGAnimateElement.cpp:
        (WebCore::SVGAnimateElement::calculateAnimatedValue):
        * svg/SVGAnimateElement.h:
        (SVGAnimateElement):
        * svg/SVGAnimateMotionElement.cpp:
        (WebCore::SVGAnimateMotionElement::calculateAnimatedValue):
        * svg/SVGAnimateMotionElement.h:
        (SVGAnimateMotionElement):
        * svg/SVGAnimatedAngle.cpp:
        (WebCore::SVGAnimatedAngleAnimator::calculateAnimatedValue):
        * svg/SVGAnimatedAngle.h:
        (SVGAnimatedAngleAnimator):
        * svg/SVGAnimatedBoolean.cpp:
        (WebCore::SVGAnimatedBooleanAnimator::calculateAnimatedValue):
        * svg/SVGAnimatedBoolean.h:
        (SVGAnimatedBooleanAnimator):
        * svg/SVGAnimatedColor.cpp:
        (WebCore::SVGAnimatedColorAnimator::calculateAnimatedValue):
        * svg/SVGAnimatedColor.h:
        (SVGAnimatedColorAnimator):
        * svg/SVGAnimatedEnumeration.cpp:
        (WebCore::SVGAnimatedEnumerationAnimator::calculateAnimatedValue):
        * svg/SVGAnimatedEnumeration.h:
        (SVGAnimatedEnumerationAnimator):
        * svg/SVGAnimatedInteger.cpp:
        (WebCore::SVGAnimatedIntegerAnimator::calculateAnimatedInteger):
        (WebCore::SVGAnimatedIntegerAnimator::calculateAnimatedValue):
        * svg/SVGAnimatedInteger.h:
        (SVGAnimatedIntegerAnimator):
        * svg/SVGAnimatedIntegerOptionalInteger.cpp:
        (WebCore::SVGAnimatedIntegerOptionalIntegerAnimator::calculateAnimatedValue):
        * svg/SVGAnimatedIntegerOptionalInteger.h:
        (SVGAnimatedIntegerOptionalIntegerAnimator):
        * svg/SVGAnimatedLength.cpp:
        (WebCore::SVGAnimatedLengthAnimator::calculateAnimatedValue):
        * svg/SVGAnimatedLength.h:
        (SVGAnimatedLengthAnimator):
        * svg/SVGAnimatedLengthList.cpp:
        (WebCore::SVGAnimatedLengthListAnimator::calculateAnimatedValue):
        * svg/SVGAnimatedLengthList.h:
        (SVGAnimatedLengthListAnimator):
        * svg/SVGAnimatedNumber.cpp:
        (WebCore::SVGAnimatedNumberAnimator::calculateAnimatedValue):
        * svg/SVGAnimatedNumber.h:
        (SVGAnimatedNumberAnimator):
        * svg/SVGAnimatedNumberList.cpp:
        (WebCore::SVGAnimatedNumberListAnimator::calculateAnimatedValue):
        * svg/SVGAnimatedNumberList.h:
        (SVGAnimatedNumberListAnimator):
        * svg/SVGAnimatedNumberOptionalNumber.cpp:
        (WebCore::SVGAnimatedNumberOptionalNumberAnimator::calculateAnimatedValue):
        * svg/SVGAnimatedNumberOptionalNumber.h:
        (SVGAnimatedNumberOptionalNumberAnimator):
        * svg/SVGAnimatedPath.cpp:
        (WebCore::SVGAnimatedPathAnimator::calculateAnimatedValue):
        * svg/SVGAnimatedPath.h:
        (SVGAnimatedPathAnimator):
        * svg/SVGAnimatedPointList.cpp:
        (WebCore::SVGAnimatedPointListAnimator::calculateAnimatedValue):
        * svg/SVGAnimatedPointList.h:
        (SVGAnimatedPointListAnimator):
        * svg/SVGAnimatedPreserveAspectRatio.cpp:
        (WebCore::SVGAnimatedPreserveAspectRatioAnimator::calculateAnimatedValue):
        * svg/SVGAnimatedPreserveAspectRatio.h:
        (SVGAnimatedPreserveAspectRatioAnimator):
        * svg/SVGAnimatedRect.cpp:
        (WebCore::SVGAnimatedRectAnimator::calculateAnimatedValue):
        * svg/SVGAnimatedRect.h:
        (SVGAnimatedRectAnimator):
        * svg/SVGAnimatedString.cpp:
        (WebCore::SVGAnimatedStringAnimator::calculateAnimatedValue):
        * svg/SVGAnimatedString.h:
        (SVGAnimatedStringAnimator):
        * svg/SVGAnimatedTransformList.cpp:
        (WebCore::SVGAnimatedTransformListAnimator::calculateAnimatedValue):
        * svg/SVGAnimatedTransformList.h:
        (SVGAnimatedTransformListAnimator):
        * svg/SVGAnimatedTypeAnimator.h:
        (SVGAnimatedTypeAnimator):
        * svg/SVGAnimationElement.cpp:
        (WebCore::SVGAnimationElement::currentValuesForValuesAnimation):
        (WebCore::SVGAnimationElement::updateAnimation):
        * svg/SVGAnimationElement.h:
        (WebCore::SVGAnimationElement::animateAdditiveNumber):
        (SVGAnimationElement):

2012-05-01  Beth Dakin  <bdakin@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=85231
        Fixed position objects that are removed from the DOM don't kick off 
        fixed position recalculation
        -and corresponding-
        <rdar://problem/11297916>

        Reviewed by Darin Adler.

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

2012-05-01  Dana Jansens  <danakj@chromium.org>

        Early-out for subtracting a non-intersecting region
        https://bugs.webkit.org/show_bug.cgi?id=85258

        Reviewed by Hajime Morita.

        Given regions A and B, if the bounds of the regions do not intersect,
        then the regions themselves do not intersect. If the intersection of
        A and B is empty, then A subtract B == A.

        * platform/graphics/Region.cpp:
        (WebCore::Region::subtract):

2012-04-30  Kent Tamura  <tkent@chromium.org>

        [Chromium/Windows] Add LocalizedDateWin
        https://bugs.webkit.org/show_bug.cgi?id=84935

        Reviewed by Kentaro Hara.

        LocalizedDateICU.cpp doesn't reflect system settings. So there were some
        problems such as <input type=date> doesn't use system's date format.

        We need to use Windows API to get a date format and calendar parameters.

        We obtain a date format like "MM/dd/yy" via Windows API, and
        format/parse dates for the format by our own code because Windows API
        can't handle years older than 1601 and doesn't have date parsing API.

        Unit test: Source/WebKit/chromium/tests/LocaleWinTest.cpp

        * WebCore.gypi: Add LocalizedDateWin.cpp.
        * WebCore.gyp/WebCore.gyp:
        For Windows, remove LocalizedDateICU.cpp and add LocalizedDateWin.cpp.
        All of *Win.cpp files are excluded by default.

        * platform/text/LocaleWin.cpp: Added.
        (WebCore::LocaleWin::LocaleWin):
        (WebCore::LocaleWin::create):
        (WebCore::LocaleWin::currentLocale):
        (WebCore::LocaleWin::~LocaleWin):
        (WebCore::LocaleWin::getLocaleInfoString):
        A helper function to obtain a string by GetLocaleInfo().
        (WebCore::LocaleWin::initializeShortMonthLabels):
        Obtain short month names from Windows.

        (WebCore::DateFormatToken): A struct to represent a token in a date format.
        e.g. A format string "MM/dd/yy" generates five DateFormatToken:
         Month2, Literal, Day2, Literal, Year2.
        (isEraSymbol): A readability helper function.
        (isYearSymbol): ditto.
        (isMonthSymbol): ditto.
        (isDaySymbol): ditto.
        (countContinuousLetters):
        (commitLiteralToken): A helper for parseDateFormat().
        (parseDateFormat):
        Parse a format string, and generate a list of DateFormatToken.

        (WebCore::parseNumber): A helper for parseDate().
        (WebCore::LocaleWin::parseNumberOrMonth): ditto.
        (WebCore::LocaleWin::parseDate):
        Parse a user-provided date string by matching with a DateFormatToken list.

        (WebCore::appendNumber): A helper for formatDate().
        (WebCore::appendTwoDigitsNumber): ditto. Write at least two digits.
        (WebCore::appendFourDigitsNumber): ditto. Write at least four digits.
        (WebCore::LocaleWin::formatDate):
        Format a DateComponents by iterating a DateFormatToken list.

        (WebCore::LocaleWin::initializeShortDateTokens):
        (WebCore::substituteLabelsIntoFormat):
        Creates a user-visible format string by iterating a DateFormatToken list.
        (WebCore::LocaleWin::dateFormatText):
        (WebCore::LocaleWin::initializeMonthLabels):
        Creates month names by Windows API.
        (WebCore::LocaleWin::initializeWeekDayShortLabels):
         Creates day names by Windows API.
        (WebCore::LocaleWin::monthLabels):
        Public accessor function for month names.
        (WebCore::LocaleWin::weekDayShortLabels):
        Public accessor function for day names.
        * platform/text/LocaleWin.h: Added.

        * platform/text/LocalizedDateWin.cpp:
        Added. The following functions simply delegate to LocaleWin::currentLocale().
        (WebCore::parseLocalizedDate):
        (WebCore::formatLocalizedDate):
        (WebCore::localizedDateFormatText):
        (WebCore::monthLabels):
        (WebCore::weekDayShortLabels):
        (WebCore::firstDayOfWeek):

2012-04-30  Kent Tamura  <tkent@chromium.org>

        REGRESSION(r115600): parseLocalizedDate() should fail for invalid inputs
        https://bugs.webkit.org/show_bug.cgi?id=85176

        Reviewed by Kentaro Hara.

        Test: fast/forms/date/input-date-commit-valid-only.html

        * platform/text/mac/LocalizedDateMac.mm:
        (WebCore::parseLocalizedDate):
        We should check nil for the result of NSDateFormtter::dateFromString.

2012-04-30  Mark Rowe  <mrowe@apple.com>

        Fix another leak due to misuse of createCFString.

        Reviewed by Darin Adler.

        * plugins/mac/PluginPackageMac.cpp:
        (WebCore::PluginPackage::fetchInfo): Adopt the result of createCFString.

2012-04-30  Mark Rowe  <mrowe@apple.com>

        <rdar://problem/11312198> Many leaks during fast/events/dropzone-002.html

        Reviewed by Darin Adler.

        * platform/mac/ClipboardMac.mm:
        (WebCore::utiTypeFromCocoaType): Adopt the result of createCFString.

2012-04-30  Mark Rowe  <mrowe@apple.com>

        <rdar://problem/11352575> Many CGImageRefs leaked during media layout tests

        Reviewed by Brian Weinstein.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createImageForTimeInRect): Adopt the CGImageRef.

2012-04-30  Emil A Eklund  <eae@chromium.org>

        Change RenderBoxModelObject::calculateBackgroundImageGeometry to use roundToInt
        https://bugs.webkit.org/show_bug.cgi?id=85249

        Reviewed by Eric Seidel.

        Prepare RenderBoxModelObject for FractionalLayoutUnits by adding rounding
        logic to calculateBackgroundImageGeometry. Background images, as all
        images, needs to be layed out on pixel boundaries thus we need to convert
        it to a integer value.

        No new tests, no change in functionality.

        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::calculateBackgroundImageGeometry):

2012-04-30  Ilya Sherman  <isherman@chromium.org>

        Unreviewed, rolling out r113511.
        http://trac.webkit.org/changeset/113511
        https://bugs.webkit.org/show_bug.cgi?id=66032
        https://bugs.webkit.org/show_bug.cgi?id=85150

        Regression: Many autofilled form fields lack the default
        autofill background even when authors don’t override the
        autofill colors

        * css/html.css:
        (input:-webkit-autofill): Restore !important modifiers

2012-04-30  Julien Chaffraix  <jchaffraix@webkit.org>

        Move RenderTableCell's row index to RenderTableRow
        https://bugs.webkit.org/show_bug.cgi?id=85229

        Reviewed by Ojan Vafai.

        Covered by the existing table tests.

        Row index is a RenderTableRow concept and as such this change moves
        the relevant logic into the class.

        While touching the code, renamed row() -> rowIndex() as now RenderTableCell
        can return its parent RenderTableRow and we were returning an index, not the row
        itself.

        * accessibility/AccessibilityTable.cpp:
        (WebCore::AccessibilityTable::cellForColumnAndRow):
        * accessibility/AccessibilityTableCell.cpp:
        (WebCore::AccessibilityTableCell::rowIndexRange):
        (WebCore::AccessibilityTableCell::titleUIElement):
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::cellAbove):
        (WebCore::RenderTable::cellBelow):
        (WebCore::RenderTable::cellBefore):
        (WebCore::RenderTable::cellAfter):
        * rendering/RenderTreeAsText.cpp:
        (WebCore::RenderTreeAsText::writeRenderObject):
        Updated after the renaming RenderTableCell::row() -> rowIndex().

        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::RenderTableCell):
        (WebCore::RenderTableCell::computeCollapsedBeforeBorder):
        (WebCore::RenderTableCell::computeCollapsedAfterBorder):
        Updated after m_rowIndex removal and row() -> rowIndex() renaming.

        (WebCore::RenderTableCell::styleDidChange):
        Switched the rowWasSet check to an ASSERT. The new logic guarantees that
        row index was set straight when we insert the row. The previous logic was
        opened to some race conditions as we could wait for a recalcCells call before
        setting the index on the rows which made this check necessary.

        * rendering/RenderTableCell.h:
        (WebCore::RenderTableCell::row):
        Added this RenderTableRow getter.

        (WebCore::RenderTableCell::rowIndex):
        Renamed from row().

        * rendering/RenderTableRow.cpp:
        (WebCore::RenderTableRow::RenderTableRow):
        (WebCore::RenderTableRow::styleDidChange):
        Updated after adding m_rowIndex / rowIndex().

        * rendering/RenderTableRow.h:
        (WebCore::RenderTableRow::setRowIndex):
        (WebCore::RenderTableRow::rowIndex):
        Added those getter / setter. Also kept m_rowIndex's smaller size
        for future optimization and for symmetry with the column index on
        RenderTableCell.

        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::addChild):
        (WebCore::RenderTableSection::recalcCells):
        Made sure that whenever we insert or update our row index
        we do call setRowIndex().

        (WebCore::RenderTableSection::addCell):
        This logic now doesn't need to query insertionRow as the cell's
        should have the index of the row in which it is inserted.

        (WebCore::RenderTableSection::calcRowLogicalHeight):
        (WebCore::RenderTableSection::layoutRows):
        (WebCore::compareCellPositionsWithOverflowingCells):
        More updates after row() -> rowIndex() renaming.

        * rendering/RenderTableSection.h:
        Removed rowIndexForRenderer now that the row caches this informatin.

2012-04-30  Keishi Hattori  <keishi@webkit.org>

        datalist: Inconsistent behavior of HTMLInputElement::list
        https://bugs.webkit.org/show_bug.cgi?id=84351

        Each platform will have a different set of input types that support the datalist UI.
        This patch makes shouldRespectListAttribute ask the RenderTheme if it supports datalist UI for that input type.
        Thus making it possible to do feature detection with JS.

        Reviewed by Kent Tamura.

        * WebCore.gypi: Added RenderThemeChromiumCommon.{cpp,h}
        * html/ColorInputType.cpp:
        (WebCore::ColorInputType::shouldRespectListAttribute):
        (WebCore):
        * html/ColorInputType.h:
        (ColorInputType):
        * html/InputType.cpp:
        (WebCore::InputType::themeSupportsDataListUI): Static method used by TextFieldInputType, RangeInputType, and ColorInputType.
        (WebCore):
        * html/InputType.h:
        (InputType):
        * html/RangeInputType.cpp:
        (WebCore::RangeInputType::shouldRespectListAttribute):
        * html/TextFieldInputType.cpp:
        (WebCore::TextFieldInputType::shouldRespectListAttribute):
        * rendering/RenderTheme.h:
        (RenderTheme):
        (WebCore::RenderTheme::supportsDataListUI): Returns true if the platform can show the datalist suggestions for a given input type.
        * rendering/RenderThemeChromiumCommon.cpp: Added.
        (WebCore):
        (WebCore::RenderThemeChromiumCommon::supportsDataListUI):
        * rendering/RenderThemeChromiumCommon.h: Added.
        (WebCore):
        (RenderThemeChromiumCommon):
        * rendering/RenderThemeChromiumMac.h:
        (RenderThemeChromiumMac):
        * rendering/RenderThemeChromiumMac.mm:
        (WebCore::RenderThemeChromiumMac::supportsDataListUI):
        (WebCore):
        * rendering/RenderThemeChromiumSkia.cpp:
        (WebCore::RenderThemeChromiumMac::supportsDataListUI):
        (WebCore):
        * rendering/RenderThemeChromiumSkia.h:
        (RenderThemeChromiumSkia):

2012-04-30  Levi Weintraub  <leviw@chromium.org>

        RenderObject incorrectly lists maximalOutlineSize as a LayoutUnit
        https://bugs.webkit.org/show_bug.cgi?id=85248

        Reviewed by Eric Seidel.

        Reverting RenderObject::maximalOutlineSize to int. This is a slop value for repaint
        rects that doesn't affect layout. It also derives its value from RenderView's function
        of the same name, which is already an integer.

        No new tests. No change in behavior.

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::maximalOutlineSize):
        * rendering/RenderObject.h:
        (RenderObject):

2012-04-30  Xingnan Wang  <xingnan.wang@intel.com>

        Add multichannel support for input of JavaScriptAudioNode
        https://bugs.webkit.org/show_bug.cgi?id=84687

        Reviewed by Chris Rogers.

        Tests: webaudio/javascriptaudionode-downmix8-2channel-input.html
               webaudio/javascriptaudionode-upmix2-8channel-input.html

        * Modules/webaudio/JavaScriptAudioNode.cpp:
        (WebCore::JavaScriptAudioNode::create):
        (WebCore::JavaScriptAudioNode::JavaScriptAudioNode):
        (WebCore::JavaScriptAudioNode::initialize):
        (WebCore::JavaScriptAudioNode::process):
        * Modules/webaudio/JavaScriptAudioNode.h:
        (JavaScriptAudioNode):

2012-04-30  Oliver Hunt  <oliver@apple.com>

        Harden arithmetic in ImageBufferDataCG
        https://bugs.webkit.org/show_bug.cgi?id=61373

        Reviewed by Gavin Barraclough.

        We have a checked type that allows us to automate many of the
        bounds checks we want here, so let's replace the floating point
        math, and just use Checked<> throughout.  We use a non-recording
        Checked<> as no overflows should reach this point, so we'll take
        a hard early failure, over the cost of many branches when
        accessing the raw values in loops.

        * platform/graphics/cg/ImageBufferDataCG.cpp:
        (WebCore::ImageBufferData::getData):
        (WebCore::ImageBufferData::putData):

2012-04-30  Levi Weintraub  <leviw@chromium.org>

        Add absoluteValue method for LayoutUnits to allow overloading abs()
        https://bugs.webkit.org/show_bug.cgi?id=85214

        Reviewed by Eric Seidel.

        Adding an absoluteValue free inline function that operates on LayoutUnits, which
        allows us to have one function signature for ints or FractionalLayoutUnits. We
        can't simply add a FractionalLayoutUnit flavor of abs because it confuses
        some compilers due to the implicit FractionalLayoutUnit constructors that take
        ints and floats.

        No new tests. No change in behavior.

        * page/SpatialNavigation.cpp:
        (WebCore::distanceDataForNode):
        * rendering/LayoutTypes.h:
        (WebCore::absoluteValue):
        (WebCore):
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::checkPaginationAndFloatsAtEndLine):
        * rendering/RenderLineBoxList.cpp:
        (WebCore::RenderLineBoxList::rangeIntersectsRect):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::repaintAfterLayoutIfNeeded):

2012-04-30  Levi Weintraub  <leviw@chromium.org>

        Update LayoutUnit usage in InlineFlowBox and RenderWidget
        https://bugs.webkit.org/show_bug.cgi?id=85239

        Reviewed by Eric Seidel.

        Updating LayoutUnit usage in a pair of remaining functions to minimize the remaining work to switching
        to FractionalLayoutUnits for layout instead of integers.

        No new tests. No change in behavior.

        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::placeBoxesInBlockDirection): Though stored as a float, the top is always
        set to an integer value. When we move to sub-pixel, we need to preserve this. Not preserving this
        behavior affects text decorations, most notably underlines.
        * rendering/RenderWidget.cpp:
        (WebCore::RenderWidget::updateWidgetGeometry): Adding pixel snapping for the content box if it's
        not transformed (absoluteContentBox includes pixel snapping), and properly treating the boundingBox
        as an IntRect.

2012-04-30  Levi Weintraub  <leviw@chromium.org>

        Prepare RenderDeprecatedFlexibleBox for sub-pixel layout
        https://bugs.webkit.org/show_bug.cgi?id=85217

        Reviewed by Eric Seidel.

        Bailing from the space distribution loop in layoutHorizontal/VerticalBox when
        the remaining space falls below one pixel. This has no effect in whole-pixel
        layout, but avoids unnecessary work/infinite loops in the sub-pixel case.

        No new tests. No change in behavior.

        * rendering/RenderDeprecatedFlexibleBox.cpp:
        (WebCore::RenderDeprecatedFlexibleBox::layoutHorizontalBox):
        (WebCore::RenderDeprecatedFlexibleBox::layoutVerticalBox):

2012-04-30  Ryosuke Niwa  <rniwa@webkit.org>

        NULL ptr in WebCore::Range::getBorderAndTextQuads
        https://bugs.webkit.org/show_bug.cgi?id=77218

        Reviewed by Eric Seidel.

        The crash was caused by a malformed range obtained within an event handler of mutation events
        (DOMNodeRemovedFromDocument). Because this range wasn't updated per node removal, range functions
        end up not behaving well.

        Fixed the bug by changing the order of the notifications in ContainerNode::willRemoveChild.
        We now fire mutation events first before updating ranges so that any range created inside those
        event handlers can also be updated prior to the actual node removal.

        Test: fast/dom/Range/range-created-in-mutation-event-crash.xhtml

        * dom/ContainerNode.cpp:
        (WebCore::willRemoveChild):

2012-04-30  Anders Carlsson  <andersca@apple.com>

        ScrollingCoordinator::requestScrollPositionUpdate should not update the main frame scroll position
        https://bugs.webkit.org/show_bug.cgi?id=85240
        <rdar://problem/11286609>

        Reviewed by Sam Weinig.

        The call to updateMainFrameScrollPosition was added to make the WebKit2 find overlay work, since it relies
        on scroll position updates being synchronous. Change the find code in WebKit2 to handle asynchronous scroll
        position updates and remove the call to updateMainFrameScrollPosition.

        * page/scrolling/ScrollingCoordinator.cpp:
        (WebCore::ScrollingCoordinator::requestScrollPositionUpdate):

2012-04-30  Anders Carlsson  <andersca@apple.com>

        Add a way to asynchronously call a function once the scroll position of a page has been updated
        https://bugs.webkit.org/show_bug.cgi?id=85237

        Reviewed by Sam Weinig.

        * WebCore.exp.in:
        Export functions needed by WebKit2.

        * page/scrolling/ScrollingCoordinator.h:
        Make commitTreeStateIfNeeded public.

2012-04-30  Kentaro Hara  <haraken@chromium.org>

        WebGLRenderingContext methods should throw TypeError for not enough arguments
        https://bugs.webkit.org/show_bug.cgi?id=84787

        Reviewed by Kenneth Russell.

        Currently, WebGLRenderingcontext methods implement
        "Not enough arguments" error as SyntaxError. The Web IDL
        spec requires that it should be TypeError:
        http://www.w3.org/TR/WebIDL/#dfn-overload-resolution-algorithm

        This patch changes SyntaxError to TypeError.

        I wanted to confirm the behavior of Firefox and Opera,
        but they do not implement WebGL yet.

        Test: fast/canvas/webgl/webgl-exceptions.html

        * bindings/js/JSWebGLRenderingContextCustom.cpp:
        (WebCore::getObjectParameter):
        (WebCore::JSWebGLRenderingContext::getAttachedShaders):
        (WebCore::JSWebGLRenderingContext::getExtension):
        (WebCore::JSWebGLRenderingContext::getFramebufferAttachmentParameter):
        (WebCore::JSWebGLRenderingContext::getParameter):
        (WebCore::JSWebGLRenderingContext::getProgramParameter):
        (WebCore::JSWebGLRenderingContext::getShaderParameter):
        (WebCore::JSWebGLRenderingContext::getUniform):
        (WebCore::dataFunctionf):
        (WebCore::dataFunctioni):
        (WebCore::dataFunctionMatrix):
        * bindings/v8/custom/V8WebGLRenderingContextCustom.cpp:
        (WebCore::getObjectParameter):
        (WebCore::V8WebGLRenderingContext::getAttachedShadersCallback):
        (WebCore::V8WebGLRenderingContext::getExtensionCallback):
        (WebCore::V8WebGLRenderingContext::getFramebufferAttachmentParameterCallback):
        (WebCore::V8WebGLRenderingContext::getParameterCallback):
        (WebCore::V8WebGLRenderingContext::getProgramParameterCallback):
        (WebCore::V8WebGLRenderingContext::getShaderParameterCallback):
        (WebCore::V8WebGLRenderingContext::getUniformCallback):
        (WebCore::vertexAttribAndUniformHelperf):
        (WebCore::uniformHelperi):
        (WebCore::uniformMatrixHelper):

2012-04-30  Emil A Eklund  <eae@chromium.org>

        [gtk, qt, chromium, win] Fix usage of LayoutUnits and rounding in platform code
        https://bugs.webkit.org/show_bug.cgi?id=85222

        Reviewed by Eric Seidel.

        Update platform code to use the pixel snapped values for painting rects
        to line up with device pixels and change platform specific hit testing
        code to use roundedPoint as hit testing is still mostly done on integer
        bounds.

        No new tests, no change in functionality.

        * platform/qt/RenderThemeQt.cpp:
        (WebCore::RenderThemeQt::paintMediaVolumeSliderTrack):
        * platform/win/PopupMenuWin.cpp:
        (WebCore::PopupMenuWin::paint):
        * rendering/RenderThemeChromiumSkia.cpp:
        (WebCore::RenderThemeChromiumSkia::paintSearchFieldCancelButton):
        (WebCore::RenderThemeChromiumSkia::paintSearchFieldResultsDecoration):
        (WebCore::RenderThemeChromiumSkia::paintSearchFieldResultsButton):

2012-04-30  Kentaro Hara  <haraken@chromium.org>

        [V8][JSC] Remove hard-coded "Not enough arguments" errors
        https://bugs.webkit.org/show_bug.cgi?id=85207

        Reviewed by Sam Weinig.

        In bug 85022 and bug 85097, we implemented
        createNotEnoughArgumentsError() in JSC and
        V8Proxy::throwNotEnoughArgumentsError() in V8 and partially
        removed hard-coded "Not enough arguments" errors.
        This patch removes hard-coded "Not enough arguments"
        errors by using the helper methods.

        No tests. No change in behavior.

        * bindings/js/JSAudioContextCustom.cpp:
        (WebCore::JSAudioContextConstructor::constructJSAudioContext):
        * bindings/js/JSSVGLengthCustom.cpp:
        (WebCore::JSSVGLength::convertToSpecifiedUnits):
        * bindings/js/JSWebSocketCustom.cpp:
        (WebCore::JSWebSocketConstructor::constructJSWebSocket):
        (WebCore::JSWebSocket::send):
        * bindings/js/JSXMLHttpRequestCustom.cpp:
        (WebCore::JSXMLHttpRequest::open):
        * bindings/v8/ScriptController.cpp:
        (WebCore::setValueAndClosePopupCallback):
        * bindings/v8/custom/V8AudioContextCustom.cpp:
        (WebCore::V8AudioContext::constructorCallback):
        * bindings/v8/custom/V8SVGLengthCustom.cpp:
        (WebCore::V8SVGLength::convertToSpecifiedUnitsCallback):
        * bindings/v8/custom/V8WebSocketCustom.cpp:
        (WebCore::V8WebSocket::constructorCallback):
        (WebCore::V8WebSocket::sendCallback):
        * bindings/v8/custom/V8XMLHttpRequestCustom.cpp:
        (WebCore::V8XMLHttpRequest::openCallback):

2012-04-30  Benjamin Poulain  <benjamin@webkit.org>

        Add String::startsWith() and endsWith() for string literals
        https://bugs.webkit.org/show_bug.cgi?id=85154

        Reviewed by Darin Adler.

        Update WebCore to use the simpler startsWith() and endsWith() taking
        a UChar.

        * css/CSSParser.cpp:
        (WebCore::CSSParser::markPropertyEnd):
        * css/WebKitCSSKeyframeRule.cpp:
        (WebCore::StyleKeyframe::parseKeyString):
        * editing/markup.cpp:
        (WebCore::createFragmentFromText):
        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::addSubresourceAttributeURLs):
        * html/HTMLTextFormControlElement.cpp:
        (WebCore::HTMLTextFormControlElement::setInnerTextValue):
        * inspector/ContentSearchUtils.cpp:
        (WebCore::ContentSearchUtils::getRegularExpressionMatchesByLines):
        * inspector/InspectorCSSAgent.cpp:
        (WebCore::InspectorCSSAgent::SetPropertyTextAction::redo):
        * loader/MainResourceLoader.cpp:
        (WebCore::MainResourceLoader::substituteMIMETypeFromPluginDatabase):
        * loader/appcache/ManifestParser.cpp:
        (WebCore::parseManifest):
        * platform/blackberry/CookieManager.cpp:
        (WebCore::CookieManager::shouldRejectForSecurityReason):
        * platform/posix/FileSystemPOSIX.cpp:
        (WebCore::pathByAppendingComponent):
        * plugins/PluginDatabase.cpp:
        (WebCore::PluginDatabase::findPlugin):
        * svg/SVGStopElement.cpp:
        (WebCore::SVGStopElement::parseAttribute):
        * svg/animation/SVGSMILElement.cpp:
        (WebCore::SVGSMILElement::parseOffsetValue):
        (WebCore::SVGSMILElement::parseCondition):

2012-04-30  Abhishek Arya  <inferno@chromium.org>

        Remove positioned float code.
        https://bugs.webkit.org/show_bug.cgi?id=84795

        Reviewed by Dan Bernstein.

        Backout r92004 and some pieces from r91702.

        Test: fast/block/float/positioned-float-crash.html

        * css/CSSParser.cpp:
        (WebCore::isValidKeywordPropertyAndValue):
        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        (WebCore::CSSPrimitiveValue::operator EFloat):
        * css/CSSValueKeywords.in:
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::RenderBlock):
        (WebCore::RenderBlock::layoutBlock):
        (WebCore::RenderBlock::addOverflowFromFloats):
        (WebCore::RenderBlock::layoutBlockChild):
        (WebCore::RenderBlock::simplifiedLayout):
        (WebCore::RenderBlock::layoutPositionedObjects):
        (WebCore::RenderBlock::insertFloatingObject):
        (WebCore::RenderBlock::positionNewFloats):
        (WebCore::RenderBlock::clearFloats):
        (WebCore::RenderBlock::FloatingObjects::clear):
        (WebCore::RenderBlock::FloatingObjects::increaseObjectsCount):
        (WebCore::RenderBlock::FloatingObjects::decreaseObjectsCount):
        * rendering/RenderBlock.h:
        (RenderBlock):
        (WebCore::RenderBlock::forceLayoutInlineChildren):
        (FloatingObject):
        (WebCore::RenderBlock::FloatingObject::FloatingObject):
        (WebCore::RenderBlock::hasOverhangingFloats):
        (WebCore::RenderBlock::FloatingObjects::FloatingObjects):
        (FloatingObjects):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::updateBoxModelInfoFromStyle):
        * rendering/RenderDeprecatedFlexibleBox.cpp:
        (WebCore::RenderDeprecatedFlexibleBox::layoutBlock):
        * rendering/RenderDeprecatedFlexibleBox.h:
        (RenderDeprecatedFlexibleBox):
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::layoutBlock):
        * rendering/RenderFlexibleBox.h:
        (RenderFlexibleBox):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateScrollbarsAfterLayout):
        * rendering/style/RenderStyleConstants.h:

2012-04-29  Sam Weinig  <sam@webkit.org>

        Remove BlobBuilder
        https://bugs.webkit.org/show_bug.cgi?id=84036

        Reviewed by Anders Carlsson.

        * GNUmakefile.am:
        * fileapi/WebKitBlobBuilder.idl:
        * page/DOMWindow.idl:
        * workers/WorkerContext.idl:
        Make exposing the WebKitBlobBuilder JS object conditional on a new
        ENABLE_LEGACY_WEBKIT_BLOB_BUILDER flag. Don't enable this for the Mac,
        but do for everyone else.

2012-04-30  Anders Carlsson  <andersca@apple.com>

        Add a barrier-style dispatch member function to ScrollingThread
        https://bugs.webkit.org/show_bug.cgi?id=85228

        Reviewed by Sam Weinig.

        Add a ScrollingThread::dispatchBarrier function which takes a WTF::Function and dispatches it to the main thread
        once all the currently scheduled scrolling thread functions have run. This is to be used for synchronization between the
        scrolling thread and the main thread.

        * page/scrolling/ScrollingThread.cpp:
        (WebCore::callFunctionOnMainThread):
        (WebCore):
        (WebCore::ScrollingThread::dispatchBarrier):
        * page/scrolling/ScrollingThread.h:
        (ScrollingThread):

2012-04-30  Min Qin  <qinmin@google.com>

        Expose a flag so that fullscreen video on android can work with FULLSCREEN_API
        https://bugs.webkit.org/show_bug.cgi?id=84414

        Reviewed by Darin Fisher.

        No tests, just exposing the flag, and will be used by android later.
        Sorry, there is a merge error during the previous commit, resolved now

        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::setControls):
        (WebCore):
        (WebCore::MediaPlayer::enterFullscreen):
        (WebCore::MediaPlayer::exitFullscreen):
        * platform/graphics/MediaPlayer.h:
        (MediaPlayer):
        * platform/graphics/MediaPlayerPrivate.h:
        (MediaPlayerPrivateInterface):
        (WebCore::MediaPlayerPrivateInterface::enterFullscreen):

2012-04-30  Nate Chapin  <japhet@chromium.org>

        Move more of committing and starting to write a Document
        to DocumentLoader.
        https://bugs.webkit.org/show_bug.cgi?id=83908

        Reviewed by Adam Barth.

        No new tests, refactor only.

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::commitIfReady): Ignore m_gotFirstByte here, since
            it was always true here anyway.
        (WebCore::DocumentLoader::finishedLoading): If we are finishing an empty
            document, create the document now, so that FrameLoaderClient doesn't
            have to do it later (FrameLoaderClient code will be removed in a later
            patch).
        (WebCore::DocumentLoader::commitData): Call receivedFirstData() directly and
            do some work receivedFirstData() used to do, setEncoding() only once per
            load.
        (WebCore::DocumentLoader::receivedData):
        (WebCore::DocumentLoader::maybeCreateArchive):
        * loader/DocumentLoader.h:
        * loader/DocumentWriter.cpp:
        (WebCore::DocumentWriter::setEncoding):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::receivedFirstData): Move DocumentLoader calls
            to DocumentLoader.
        * loader/FrameLoader.h: Remove m_hasReceivedFirstData and willSetEncoding(),
            allow hasReceivedData() to be called directly.
        (FrameLoader):

2012-04-30  Kentaro Hara  <haraken@chromium.org>

        Unreviewed. Fix test crashes in Win/Linux debug builds.

        * bindings/v8/V8LazyEventListener.cpp:
        (WebCore::V8LazyEventListener::V8LazyEventListener):
        (WebCore::V8LazyEventListener::prepareListenerObject):
        * bindings/v8/V8LazyEventListener.h:
        (V8LazyEventListener):

2012-04-30  Tommy Widenflycht  <tommyw@google.com>

        MediaStream API: Change LocalMediaStream::stop to be synchronous
        https://bugs.webkit.org/show_bug.cgi?id=84942

        Reviewed by Dimitri Glazkov.

        Since I changed LocalMediaStream to be a ActiveDOMObject recently the stop()
        behaviour needs to change since it is no longer a good idea to start a timer when called.

        Not possible to write a test for this.

        * Modules/mediastream/LocalMediaStream.cpp:
        (WebCore::LocalMediaStream::LocalMediaStream):
        (WebCore::LocalMediaStream::stop):
        * Modules/mediastream/LocalMediaStream.h:
        (LocalMediaStream):

2012-04-28  Emil A Eklund  <eae@chromium.org> and Levi Weintraub  <leviw@chromium.org>

        Add ENABLE_SUBPIXEL_LAYOUT controlling FractionalLayoutUnit denominator
        https://bugs.webkit.org/show_bug.cgi?id=85146

        Reviewed by Eric Seidel.

        Add a new flag for controlling the fixed point denominator in
        FractionalLayoutUnit. Controls whether the denominator is set to 60 or 1.
        Until we change the LayoutUnit typedef this change will have no effect.

        No new tests, no change in functionality.

        * platform/FractionalLayoutUnit.h:
        (WebCore):
        (WebCore::FractionalLayoutUnit::operator++):
        (WebCore::operator/):
        (WebCore::operator+):
        Add ++, / double and and + double operators. These are needed when
        ENABLE_SUBPIXEL_LAYOUT is not enabled.
        
        * platform/graphics/FractionalLayoutRect.cpp:
        (WebCore::enclosingFractionalLayoutRect):

2012-04-30  Justin Schuh  <jschuh@chromium.org>

        loadOrRedirectSubframe should return the owner element's frame
        https://bugs.webkit.org/show_bug.cgi?id=84780

        Reviewed by Nate Chapin.

        Test: fast/loader/javascript-url-iframe-remove-on-navigate.html

        * loader/SubframeLoader.cpp:
        (WebCore::SubframeLoader::loadOrRedirectSubframe):

2012-04-30  Caio Marcelo de Oliveira Filho  <caio.oliveira@openbossa.org>

        Use Vector<Attribute> directly instead of encapsulating it in AttributeVector
        https://bugs.webkit.org/show_bug.cgi?id=84413

        Reviewed by Andreas Kling.

        As commented in https://bugs.webkit.org/show_bug.cgi?id=79963#c16 we do not
        usually subclass basic types like Vector. This patch changes code to use
        Vector<Attribute> directly and move around the functionality of the former
        methods to more specific helper functions or inline code at the callers.

        * dom/Element.cpp:
        (WebCore::Element::parserSetAttributes):
        (WebCore::Element::normalizeAttributes):
        * dom/Element.h:
        (Element):
        * dom/ElementAttributeData.cpp:
        * dom/ElementAttributeData.h:
        (WebCore::findAttributeInVector):
        (WebCore::ElementAttributeData::getAttributeItem):
        (ElementAttributeData):
        (WebCore::ElementAttributeData::attributeVector):
        (WebCore::ElementAttributeData::clonedAttributeVector):
        (WebCore::ElementAttributeData::getAttributeItemIndex):
        (WebCore):
        * html/parser/HTMLConstructionSite.cpp:
        (WebCore::HTMLConstructionSite::createHTMLElementFromSavedElement):
        * html/parser/HTMLToken.h:
        (WebCore::AtomicHTMLToken::AtomicHTMLToken):
        * html/parser/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::processFakeStartTag):
        (WebCore::HTMLTreeBuilder::attributesForIsindexInput): Loop through the attributes
        backwards so we can remove items without affecting the rest of the loop run.
        * html/parser/HTMLTreeBuilder.h:
        * html/parser/TextDocumentParser.cpp:
        (WebCore::TextDocumentParser::insertFakePreElement):
        * xml/XMLErrors.cpp:
        (WebCore::createXHTMLParserErrorHeader):
        (WebCore::XMLErrors::insertErrorMessageBlock):
        * xml/parser/MarkupTokenBase.h:
        (WebCore::AtomicMarkupTokenBase::AtomicMarkupTokenBase):
        (WebCore::AtomicMarkupTokenBase::getAttributeItem):
        (WebCore::AtomicMarkupTokenBase::attributes):
        (AtomicMarkupTokenBase):
        (WebCore::::initializeAttributes):
        * xml/parser/XMLToken.h:
        (WebCore::AtomicXMLToken::AtomicXMLToken):

2012-04-30  Mark Pilgrim  <pilgrim@chromium.org>

        [Chromium] Remove PlatformSupport::loadPlatformAudioResource, call loadResource directly
        https://bugs.webkit.org/show_bug.cgi?id=85193

        Reviewed by Kentaro Hara.

        Part of a refactoring series. See tracking bug 82948.

        * platform/audio/chromium/AudioBusChromium.cpp:
        (WebCore::AudioBus::loadPlatformResource):
        * platform/chromium/PlatformSupport.h:
        (PlatformSupport):

2012-04-30  Mark Pilgrim  <pilgrim@chromium.org>

        [Chromium] Call defaultLocale directly
        https://bugs.webkit.org/show_bug.cgi?id=85192

        Reviewed by Kentaro Hara.

        Part of a refactoring series. See tracking bug 82948.

        * platform/chromium/LanguageChromium.cpp:
        (WebCore::platformLanguage):
        * platform/chromium/PlatformSupport.h:
        (PlatformSupport):

2012-04-30  Beth Dakin  <bdakin@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=82922
        border-image with image-set does not render correctly when viewed at 
        2x
        -and corresponding-
        <rdar://problem/11167820>

        Reviewed by Dan Bernstein.

        StyleImage::computeIntrinsicDimensions() is only called from one 
        place: RenderBoxModelObject::calculateIntrinsicDimensions(), and that 
        is only used for background images and border images. In my original 
        image-set work, I decided that 
        StyleCachedImageSet::computeIntrinsicDimensions() would compute 
        "intrinsic" dimensions, meaning that they would compute the dimensions 
        that the image resource was pretending to be rather than the actual 
        dimensions of the resource. I chose to do this because it made 
        background images work great without changing the call-site. But border 
        images need to know the actual intrinsic dimensions, so this design 
        decision (which was admittedly questionable from the start) won't 
        stick.
        
        This patch makes StyleImage::computeIntrinsicDimensions() return 
        actual intrinsic dimensions. Then the border-image and background-
        image code is very lightly patched to account for the image's scale 
        factor.

        These functions no longer need the scale factor parameter.
        * loader/cache/CachedImage.cpp:
        (WebCore::CachedImage::computeIntrinsicDimensions):
        * loader/cache/CachedImage.h:
        (CachedImage):
        * platform/graphics/GeneratedImage.h:
        (GeneratedImage):
        * platform/graphics/GeneratorGeneratedImage.cpp:
        (WebCore::GeneratedImage::computeIntrinsicDimensions):
        * platform/graphics/Image.cpp:
        (WebCore::Image::computeIntrinsicDimensions):
        * platform/graphics/Image.h:
        (Image):
        * platform/graphics/cg/PDFDocumentImage.cpp:
        (WebCore::PDFDocumentImage::computeIntrinsicDimensions):
        * platform/graphics/cg/PDFDocumentImage.h:
        (PDFDocumentImage):
        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::computeIntrinsicDimensions):
        * svg/graphics/SVGImage.h:
        (SVGImage):
        * rendering/style/StyleCachedImageSet.cpp:
        (WebCore::StyleCachedImageSet::computeIntrinsicDimensions):
        
        New function on StyleImage returns the image's scale factor. 
        * rendering/style/StyleCachedImageSet.h:
        (WebCore::StyleCachedImageSet::imageScaleFactor):
        * rendering/style/StyleImage.h:
        (WebCore::StyleImage::imageScaleFactor):

        Scale the intrinsic size of the background image down by the scale 
        factor.
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::calculateFillTileSize):
        
        Slices should be multiplied by the image's scale factor since they are 
        always expected to the specified in the 1x image's coordinate space.
        (WebCore::RenderBoxModelObject::paintNinePieceImage):

2012-04-30  Arko Saha  <arko@motorola.com>

        Remove custom bindings code in JSHTMLCollectionCustom.cpp for HTMLPropertiesCollection.
        https://bugs.webkit.org/show_bug.cgi?id=85172

        Reviewed by Kentaro Hara.

        Use [JSGenerateToJSObject] in HTMLPropertiesCollection.idl, so that it can generate toJS()
        in JSHTMLPropertiesCollection.cpp automatically.

        * bindings/js/JSHTMLCollectionCustom.cpp:
        (WebCore::toJS):
        * html/HTMLPropertiesCollection.idl:

2012-04-30  No'am Rosenthal  <noam.rosenthal@nokia.com>

        [Texmap] TextureMapperLayer uses intermediate surfaces too eagerly
        https://bugs.webkit.org/show_bug.cgi?id=85103

        Reviewed by Kenneth Rohde Christiansen.

        Instead of automatically using an intermediate surface for layers with opacity and
        children, we limit surface usage for layers with more than one child and for layers with
        one child and contents of its own.

        This prevents us from using intermediate surfaces in cases where a single layer with
        opacity has a single descendant with content, in which case normal blending can be used.

        Covered by existing compositing layout tests.

        * platform/graphics/texmap/TextureMapperLayer.cpp:
        (WebCore):
        * platform/graphics/texmap/TextureMapperLayer.h:

2012-04-30  Yi Shen  <yi.4.shen@nokia.com>

        Inserting a paragraph between quoted lines in editing/deleting/delete-4038408-fix.html doesn't work
        https://bugs.webkit.org/show_bug.cgi?id=78193

        Reviewed by Ryosuke Niwa.

        When pasting a copied portion of a blockquote with a newline at the end into an unquoted area,
        the newline is inserted after the blockquote since we don't want it also to be quoted. However,
        this behavior has also applied when we insert a paragraph between quoted lines, which is incorrect.
        To figure out the right place to insert a paragraph, we need providing more information to the
        InsertParagraphSeparatorCommand by introducing a boolean parameter "pasteBlockqutoeIntoUnquotedArea".

        Tests: editing/inserting/insert-paragraph-separator-in-blockquote.html
               editing/pasteboard/paste-wrapped-blockquote-into-nonblockquote.html

        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::insertParagraphSeparator):
        * editing/CompositeEditCommand.h:
        (CompositeEditCommand):
        * editing/InsertParagraphSeparatorCommand.cpp:
        (WebCore::InsertParagraphSeparatorCommand::InsertParagraphSeparatorCommand):
        (WebCore::InsertParagraphSeparatorCommand::doApply):
        * editing/InsertParagraphSeparatorCommand.h:
        (WebCore::InsertParagraphSeparatorCommand::create):
        (InsertParagraphSeparatorCommand):
        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::doApply):

2012-04-30  Antti Koivisto  <antti@apple.com>

        Protect current element in HTMLLinkElement::setCSSStyleSheet
        https://bugs.webkit.org/show_bug.cgi?id=85166

        Reviewed by Andreas Kling.
        
        Stylesheet loading can trigger script execution.
        
        Test: fast/css/cached-sheet-restore-crash.html

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

2012-04-29  Keishi Hattori  <keishi@webkit.org>

        Build fix for LocalizedDateMac.mm
        https://bugs.webkit.org/show_bug.cgi?id=85164

        Reviewed by Kent Tamura.

        * platform/text/mac/LocalizedDateMac.mm:
        (WebCore::monthLabels):

2012-04-29  Luke Macpherson  <macpherson@chromium.org>

        Initialize member variables in CSSParser's constructor.
        https://bugs.webkit.org/show_bug.cgi?id=84377

        Reviewed by Kentaro Hara.

        It is good practice not to leave member variables uninitialized. They make debugging more difficult by reducing
        repeatability, and in some cases lead to the possibility of information leakage occuring. This patch simply adds
        initialization of m_numParsedPropertiesBeforeMarginBox to CSSParser's constructor to INVALID_NUM_PARSED_PROPERTIES
        so that the initial state is the same as the state after the properties are cleared.

        No tests added because this is a code style fix, not an actual bug so long as the bison generated code calls
        startDeclarationsForMarginBox() and endDeclarationsForMarginBox() symmetrically. The lack of initialization was
        originally detected by coverity.

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

2012-04-29  Kent Tamura  <tkent@chromium.org>

        [Mac] Add LocalizedDateMac
        https://bugs.webkit.org/show_bug.cgi?id=85039

        Reviewed by Kentaro Hara.

        A date shown <input type=date> should be formatted for user's OS
        settings. Chromium-Mac used LocalizedDateICU.cpp to format/parse visible
        date strings and it didn't reflect user-settings.

        Test: covered by fast/forms/date/date-appearance.html

        * WebCore.gyp/WebCore.gyp:
        Use LocalizedDateMac.mm for OS X instead of LocalizedDateICU.cpp.
        * WebCore.gypi: Add LocalizedDateMac.mm
        * platform/text/mac/LocalizedDateMac.mm: Added.
        (WebCore::createShortDateFormatter):
        Creates a NSDateFormatter with desired settings.
        (WebCore::parseLocalizedDate): Impelment for tyep=date.
        (WebCore::formatLocalizedDate): ditto.
        (WebCore::isYearSymbol): A readability helper for format string parsing.
        (WebCore::isMonthSymbol): ditto.
        (WebCore::isDaySymbol): ditto.
        (WebCore::localizeDateFormat):
        Parse a format string, and replace symbols with user-friendly labels.
        (WebCore::localizedDateFormatText):
        Gets a format string, and apply localizeDateFormat().
        (WebCore::monthLabels): Obtain month names from the system.
        (WebCore::weekDayShortLabels): Obtain week day symbols from the system.
        (WebCore::firstDayOfWeek): Obtain first day of week from the system.
        * platform/text/ICULocale.cpp:
        (WebCore::createFallbackMonthLabels): Uses WTF::monthFullName.

2012-04-29  Sam Weinig  <sam@webkit.org>

        Add support for the Blob constructor (Part 2)
        https://bugs.webkit.org/show_bug.cgi?id=84555

        Address additional feedback on Blob construction.
        - Add exception when the dictionary is not an object.
        - Ensure the proper ordering of dictionary access. Tested via
          throwing exceptions in toString, and ensuring correct one is
          fired first.
        - Changed type of exception throw for invalid enumeration to a
          TypeError.

        Reviewed by Kentaro Hara.

        Updated fast/files/blob-constructor.html to be more comprehensive.

        * bindings/js/JSBlobCustom.cpp:
        (WebCore::JSBlobConstructor::constructJSBlob):
        * bindings/v8/custom/V8BlobCustom.cpp:
        (WebCore::V8Blob::constructorCallback):

2012-04-29  No'am Rosenthal  <noam.rosenthal@nokia.com>

        [Texmap] Leaves demo: wrong geometry when opacity animation kicks in
        https://bugs.webkit.org/show_bug.cgi?id=85096

        Reviewed by Kenneth Rohde Christiansen.

        We should use combined() instead of combinedForChildren() since we don't allow
        intermediate surfaces for preserves-3d. Also, we should apply the offset before
        multiplying the transforms, otherwise the transform-origin is incorrect.

        Covered by existing compositing tests.

        * platform/graphics/texmap/TextureMapperLayer.cpp:
        (WebCore::TextureMapperLayer::paintSelf):
        (WebCore::TextureMapperLayer::paintRecursive):

2012-04-29  Mark Pilgrim  <pilgrim@chromium.org>

        [Chromium] Call highUsageDeltaMB directly
        https://bugs.webkit.org/show_bug.cgi?id=84844

        Reviewed by Kentaro Hara.

        Part of a refactoring series. See tracking bug 82948.

        * bindings/v8/V8GCController.cpp:
        (WebCore::V8GCController::checkMemoryUsage):
        * platform/MemoryUsageSupport.cpp:
        (WebCore):
        (WebCore::MemoryUsageSupport::highUsageDeltaMB):
        * platform/MemoryUsageSupport.h:
        (MemoryUsageSupport):
        * platform/chromium/MemoryUsageSupportChromium.cpp:
        (WebCore::MemoryUsageSupport::highUsageDeltaMB):
        (WebCore):
        * platform/chromium/PlatformSupport.h:
        (PlatformSupport):

2012-04-29  Kentaro Hara  <haraken@chromium.org>

        REGRESSION(r113086): onresize event handler can be deleted in popup window
        https://bugs.webkit.org/show_bug.cgi?id=84908

        Reviewed by Ojan Vafai.

        In a nutshell, an onresize event handler in the popup window
        can be non-deterministically deleted. For more details, please
        look at Chromium issue 123642:
        http://code.google.com/p/chromium/issues/detail?id=123642

        I confirmed that this bug is the regression caused by r113086.

        r113086 introduced the following code:

        void V8LazyEventListener::prepareListenerObject(...) {
            if (hasExistingListenerObject())
                return;
            ...;
            // Since we only parse once, there's no need to keep data
            // used for parsing around anymore.
            m_functionName = String();
            m_code = String();
            m_eventParameterName = String();
            m_sourceURL = String();

            setListenerObject(wrappedFunction);
        }

        This is not correct. The parsing can be done more than once,
        and thus we cannot clear data. This patch removes the above code.

        Consider the following situation:

        (1) Assume '<body onresize="f()"></body>'.
        (2) prepareListenerObject() runs.
        (3) Since this is the first parsing, hasExistingListenerObject()
        returns false. After the parsing, the listener object is set
        by setListenerObject().
        (4) GC runs. Since there is no strong reference to the listener
        object, weakEventListenerCallback() is called back, and the listener
        object is disposed.
        (5) A resize event is triggered.
        (6) prepareListenerObject() is called again. Since the listener object
        is already disposed, hasExistingListenerObject() returns false,
        and the second parsing starts.

        In my investigation, the above situation is happening in the reported
        Chromium bug. Anyway, I am sure that potentially the parsing can be
        done more than once, and thus we must keep m_xxxx data.

        However, this is just a temporary fix. We should fix the code so that
        an alive event listener object is never reclaimed.
        See https://bugs.webkit.org/show_bug.cgi?id=85152 for more details.

        No tests: I tried hard to create a DRT test, but could not.
        The bug depends on the behavior of GC, and thus the reported bug is
        non-deterministic. For example, (as explained in the Chromium issue,)
        the bug does not happen if we load an HTML from network because
        the network latency hides the bug. Also the bug happens in the
        popup window only. If we open the reported HTML in the main window,
        we cannot reproduce the bug.

        * bindings/v8/V8LazyEventListener.cpp:
        (WebCore::V8LazyEventListener::prepareListenerObject):

2012-04-28  Sam Weinig  <sam@webkit.org>

        Smooth scrolling needs a new key
        <rdar://problem/11331632>

        Reviewed by Geoffrey Garen.

        * platform/mac/ScrollAnimatorMac.mm:
        (WebCore::scrollAnimationEnabledForSystem):
        (WebCore::ScrollAnimatorMac::scroll):
        Update for new key.

2012-04-28  Li Yin  <li.yin@intel.com>

        MessagePort must set m_closed to be true at the end of MessagePort::close function
        https://bugs.webkit.org/show_bug.cgi?id=85139

        In the function MessagePort::close, the "m_closed = true" must be executed at the end, not at the beginning.
        Or, the m_entangledChannel->close() will not be executed.
        And it resulted in the failure of MS bench mark messagechannel_close.htm.
        http://samples.msdn.microsoft.com/ietestcenter/WebWorkers/messagechannel_close.htm

        Reviewed by Kentaro Hara.

        Test: fast/events/message-port-close.html

        * dom/MessagePort.cpp:
        (WebCore::MessagePort::close):

2012-04-28  Sam Weinig  <sam@webkit.org>

        And again.

        * bindings/v8/custom/V8BlobCustom.cpp:
        (WebCore::V8Blob::constructorCallback):

2012-04-28  Sam Weinig  <sam@webkit.org>

        Once again, try to make these puppies work.

        * bindings/v8/custom/V8BlobCustom.cpp:

2012-04-28  Sam Weinig  <sam@webkit.org>

        Fix the Chromium build.

        * bindings/v8/custom/V8BlobCustom.cpp:
        (WebCore::V8Blob::constructorCallback):

2012-04-27  Sam Weinig  <sam@webkit.org>

        Add support for the Blob constructor
        https://bugs.webkit.org/show_bug.cgi?id=84555

        Reviewed by Maciej Stachowiak.

        Test: fast/files/blob-constructor.html

        This adds an implementation of the Blob constructor that willfully
        violates the W3C Editor’s Draft 29 February 2012 in the following ways:
        - Elements in the parts array are coerced to DOMStrings https://www.w3.org/Bugs/Public/show_bug.cgi?id=16721 
        - Don't throw for invalid key in the dictionary https://www.w3.org/Bugs/Public/show_bug.cgi?id=16727
        - Values for the endings property are treated as enums https://www.w3.org/Bugs/Public/show_bug.cgi?id=16729 

        * bindings/js/JSBlobCustom.cpp:
        (WebCore::JSBlobConstructor::constructJSBlob):
        Implement blob constructor.

        * bindings/v8/custom/V8BlobCustom.cpp:
        (WebCore::V8Blob::constructorCallback):
        Implement blob constructor.

        * fileapi/Blob.idl:
        Add constructor to IDL.

        * workers/WorkerContext.idl:
        Add Blob constructor to the worker global object.

2012-04-28  Igor Oliveira  <igor.o@sisa.samsung.com>

        Move PropertyWrapper out of the  AnimationBase
        https://bugs.webkit.org/show_bug.cgi?id=84978

        Reviewed by Dean Jackson.

        AnimationBase is a complex class. It has a state machine and a bunch of
        property handlers. This patch moves the property handlers to a separate
        class making AnimationBase simpler.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * page/animation/AnimationBase.cpp:
        * page/animation/AnimationBase.h:
        (AnimationBase):
        * page/animation/AnimationController.cpp:
        (WebCore::AnimationController::supportsAcceleratedAnimationOfProperty):
        * page/animation/CSSPropertyAnimation.cpp: Added.
        (WebCore):
        (WebCore::blendFunc):
        (WebCore::crossfadeBlend):
        (AnimationPropertyWrapperBase):
        (WebCore::AnimationPropertyWrapperBase::AnimationPropertyWrapperBase):
        (WebCore::AnimationPropertyWrapperBase::~AnimationPropertyWrapperBase):
        (WebCore::AnimationPropertyWrapperBase::isShorthandWrapper):
        (WebCore::AnimationPropertyWrapperBase::property):
        (WebCore::AnimationPropertyWrapperBase::animationIsAccelerated):
        (WebCore::addPropertyWrapper):
        (WebCore::wrapperForProperty):
        (PropertyWrapperGetter):
        (WebCore::PropertyWrapperGetter::PropertyWrapperGetter):
        (WebCore::PropertyWrapperGetter::equals):
        (PropertyWrapper):
        (WebCore::PropertyWrapper::PropertyWrapper):
        (WebCore::PropertyWrapper::blend):
        (RefCountedPropertyWrapper):
        (WebCore::RefCountedPropertyWrapper::RefCountedPropertyWrapper):
        (WebCore::RefCountedPropertyWrapper::blend):
        (StyleImagePropertyWrapper):
        (WebCore::StyleImagePropertyWrapper::StyleImagePropertyWrapper):
        (WebCore::StyleImagePropertyWrapper::equals):
        (PropertyWrapperColor):
        (WebCore::PropertyWrapperColor::PropertyWrapperColor):
        (WebCore::PropertyWrapperColor::blend):
        (PropertyWrapperAcceleratedOpacity):
        (WebCore::PropertyWrapperAcceleratedOpacity::PropertyWrapperAcceleratedOpacity):
        (WebCore::PropertyWrapperAcceleratedOpacity::animationIsAccelerated):
        (WebCore::PropertyWrapperAcceleratedOpacity::blend):
        (PropertyWrapperAcceleratedTransform):
        (WebCore::PropertyWrapperAcceleratedTransform::PropertyWrapperAcceleratedTransform):
        (WebCore::PropertyWrapperAcceleratedTransform::animationIsAccelerated):
        (WebCore::PropertyWrapperAcceleratedTransform::blend):
        (PropertyWrapperAcceleratedFilter):
        (WebCore::PropertyWrapperAcceleratedFilter::PropertyWrapperAcceleratedFilter):
        (WebCore::PropertyWrapperAcceleratedFilter::animationIsAccelerated):
        (WebCore::PropertyWrapperAcceleratedFilter::blend):
        (WebCore::shadowListLength):
        (WebCore::shadowForBlending):
        (PropertyWrapperShadow):
        (WebCore::PropertyWrapperShadow::PropertyWrapperShadow):
        (WebCore::PropertyWrapperShadow::equals):
        (WebCore::PropertyWrapperShadow::blend):
        (WebCore::PropertyWrapperShadow::blendSimpleOrMatchedShadowLists):
        (WebCore::PropertyWrapperShadow::blendMismatchedShadowLists):
        (PropertyWrapperMaybeInvalidColor):
        (WebCore::PropertyWrapperMaybeInvalidColor::PropertyWrapperMaybeInvalidColor):
        (WebCore::PropertyWrapperMaybeInvalidColor::equals):
        (WebCore::PropertyWrapperMaybeInvalidColor::blend):
        (PropertyWrapperVisitedAffectedColor):
        (WebCore::PropertyWrapperVisitedAffectedColor::PropertyWrapperVisitedAffectedColor):
        (WebCore::PropertyWrapperVisitedAffectedColor::equals):
        (WebCore::PropertyWrapperVisitedAffectedColor::blend):
        (FillLayerAnimationPropertyWrapperBase):
        (WebCore::FillLayerAnimationPropertyWrapperBase::FillLayerAnimationPropertyWrapperBase):
        (WebCore::FillLayerAnimationPropertyWrapperBase::~FillLayerAnimationPropertyWrapperBase):
        (FillLayerPropertyWrapperGetter):
        (WebCore::FillLayerPropertyWrapperGetter::FillLayerPropertyWrapperGetter):
        (WebCore::FillLayerPropertyWrapperGetter::equals):
        (FillLayerPropertyWrapper):
        (WebCore::FillLayerPropertyWrapper::FillLayerPropertyWrapper):
        (WebCore::FillLayerPropertyWrapper::blend):
        (FillLayerRefCountedPropertyWrapper):
        (WebCore::FillLayerRefCountedPropertyWrapper::FillLayerRefCountedPropertyWrapper):
        (WebCore::FillLayerRefCountedPropertyWrapper::blend):
        (FillLayerStyleImagePropertyWrapper):
        (WebCore::FillLayerStyleImagePropertyWrapper::FillLayerStyleImagePropertyWrapper):
        (WebCore::FillLayerStyleImagePropertyWrapper::equals):
        (FillLayersPropertyWrapper):
        (WebCore::FillLayersPropertyWrapper::FillLayersPropertyWrapper):
        (WebCore::FillLayersPropertyWrapper::equals):
        (WebCore::FillLayersPropertyWrapper::blend):
        (ShorthandPropertyWrapper):
        (WebCore::ShorthandPropertyWrapper::ShorthandPropertyWrapper):
        (WebCore::ShorthandPropertyWrapper::isShorthandWrapper):
        (WebCore::ShorthandPropertyWrapper::equals):
        (WebCore::ShorthandPropertyWrapper::blend):
        (WebCore::ShorthandPropertyWrapper::propertyWrappers):
        (PropertyWrapperFlex):
        (WebCore::PropertyWrapperFlex::PropertyWrapperFlex):
        (WebCore::PropertyWrapperFlex::equals):
        (WebCore::PropertyWrapperFlex::blend):
        (PropertyWrapperSVGPaint):
        (WebCore::PropertyWrapperSVGPaint::PropertyWrapperSVGPaint):
        (WebCore::PropertyWrapperSVGPaint::equals):
        (WebCore::PropertyWrapperSVGPaint::blend):
        (WebCore::addShorthandProperties):
        (WebCore::CSSPropertyAnimation::ensurePropertyMap):
        (WebCore::gatherEnclosingShorthandProperties):
        (WebCore::CSSPropertyAnimation::blendProperties):
        (WebCore::CSSPropertyAnimation::animationOfPropertyIsAccelerated):
        (WebCore::CSSPropertyAnimation::animatableShorthandsAffectingProperty):
        (WebCore::CSSPropertyAnimation::propertiesEqual):
        (WebCore::CSSPropertyAnimation::getPropertyAtIndex):
        (WebCore::CSSPropertyAnimation::getNumProperties):
        * page/animation/CSSPropertyAnimation.h: Added.
        (WebCore):
        (CSSPropertyAnimation):
        * page/animation/CompositeAnimation.cpp:
        (WebCore::CompositeAnimation::updateTransitions):
        (WebCore::CompositeAnimation::pauseTransitionAtTime):
        * page/animation/ImplicitAnimation.cpp:
        (WebCore::ImplicitAnimation::animate):
        (WebCore::ImplicitAnimation::getAnimatedStyle):
        (WebCore::ImplicitAnimation::isTargetPropertyEqual):
        (WebCore::ImplicitAnimation::blendPropertyValueInStyle):
        (WebCore::ImplicitAnimation::timeToNextService):
        * page/animation/KeyframeAnimation.cpp:
        (WebCore::KeyframeAnimation::animate):
        (WebCore::KeyframeAnimation::getAnimatedStyle):
        (WebCore::KeyframeAnimation::timeToNextService):
        * rendering/style/RenderStyle.h:

2012-04-28  Geoffrey Garen  <ggaren@apple.com>

        Clarified JSGlobalData (JavaScript VM) lifetime
        https://bugs.webkit.org/show_bug.cgi?id=85142

        Reviewed by Anders Carlsson.

        * bindings/js/WorkerScriptController.cpp:
        (WebCore::WorkerScriptController::~WorkerScriptController): Slightly 
        simpler than before. We can't just rely on our default destructor 
        because we need to hold the JSLock when we tear down the VM.

        * bridge/NP_jsobject.cpp:
        (_NPN_InvokeDefault):
        (_NPN_Invoke):
        (_NPN_Evaluate):
        (_NPN_Construct): Don't RefPtr<> the JSGlobalData because it makes it 
        seem like you know something the rest of our code doesn't know. The 
        plugin JSGlobalData is immortal, anyway.

        I also removed some timeout checker related code because that feature 
        doesn't work anymore, so it was effectively dead code.

2012-04-28  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: InspectorFrontendHost.append has to be implemented for saving heap snapshots.
        https://bugs.webkit.org/show_bug.cgi?id=85137

        We can save a file with help of InspectorFrontendHost.save method,
        but it is suitable only for relatively small portions of data and
        can't process the 6Gb heap snapshot.
        These methods just pass the url and content into embedder.

        Reviewed by Yury Semikhatsky.

        * inspector/InspectorFrontendClient.h:
        (InspectorFrontendClient):
        * inspector/InspectorFrontendClientLocal.h:
        (WebCore::InspectorFrontendClientLocal::append):
        * inspector/InspectorFrontendHost.cpp:
        (WebCore::InspectorFrontendHost::append):
        (WebCore):
        * inspector/InspectorFrontendHost.h:
        (InspectorFrontendHost):
        * inspector/InspectorFrontendHost.idl:

2012-04-28  No'am Rosenthal  <noam.rosenthal@nokia.com>

        [Qt][Texmap] Error of cross-compiling webkit with Qt 4.8.1
        https://bugs.webkit.org/show_bug.cgi?id=84321

        Speculative build-fix for Qt 4.8.
        Use QGLContext for Qt 4.x instead of the platform-specific context.

        Reviewed by Simon Hausmann.

        No new tests, build fix.

        * platform/graphics/texmap/TextureMapperGL.cpp:
        (SharedGLData):
        (WebCore::TextureMapperGLData::SharedGLData::getCurrentGLContext):

2012-04-28  No'am Rosenthal  <noam.rosenthal@nokia.com>

        [Texmap] Falling leaves demo missing opacity fade out animation
        https://bugs.webkit.org/show_bug.cgi?id=83691

        Reviewed by Martin Robinson.

        The bug originated from clearing an intermediate surface with glClear while the scissor
        state was wrong.
        When using intermediate surfaces, maintain a clip-stack for each surface, rather than
        a single clip-stack for the whole scene. When a surface is bound, its clip stack should
        be applied.

        Covered by existing compositing tests.

        * platform/graphics/texmap/TextureMapperGL.cpp:
        (SharedGLData):
        (WebCore::TextureMapperGL::ClipStack::push):
        (WebCore):
        (WebCore::TextureMapperGL::ClipStack::pop):
        (WebCore::scissorClip):
        (WebCore::TextureMapperGL::ClipStack::apply):
        (WebCore::TextureMapperGL::clipStack):
        (WebCore::TextureMapperGL::beginPainting):
        (WebCore::TextureMapperGL::drawTexture):
        (WebCore::BitmapTextureGL::didReset):
        (WebCore::BitmapTextureGL::clearIfNeeded):
        (WebCore::BitmapTextureGL::createFboIfNeeded):
        (WebCore::BitmapTextureGL::bind):
        (WebCore::TextureMapperGL::bindDefaultSurface):
        (WebCore::TextureMapperGL::bindSurface):
        (WebCore::TextureMapperGL::beginScissorClip):
        (WebCore::TextureMapperGL::beginClip):
        (WebCore::TextureMapperGL::endClip):
        * platform/graphics/texmap/TextureMapperGL.h:
        (TextureMapperGL):
        (ClipState):
        (WebCore::TextureMapperGL::ClipState::ClipState):
        (ClipStack):
        (WebCore::TextureMapperGL::ClipStack::current):
        (WebCore::TextureMapperGL::ClipStack::clear):
        (BitmapTextureGL):
        (WebCore::BitmapTextureGL::BitmapTextureGL):

2012-04-26  Emil A Eklund  <eae@chromium.org> and Levi Weintraub  <leviw@chromium.org>

        Move Length and CSS length computation to float
        https://bugs.webkit.org/show_bug.cgi?id=84801

        Reviewed by Eric Seidel.

        Change Length and CSS length computation to floating point. This gets us
        closer to the goal of supporting subpixel layout and improves precision
        for SVG which already uses floating point for its layout.

        This change makes computedStyle return fractional values for pixel values
        if a fraction is specified. It also changes the result of computations
        where two or more values with fractional precision. Prior to this change
        the result of Length(2.9) + Length(2.9) would be 4 as each value would be
        floored. With this change the result is 5 as the addition is done with
        floating point precision and then the result will be floored. Once we
        enable subpixel layout the resulting value in this example would be 5.8.

        Updated existing layout tests.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::zoomAdjustedPixelValue):
        * css/CSSPrimitiveValue.cpp:
        (WebCore::CSSPrimitiveValue::computeLength):
        * css/CSSPrimitiveValue.h:
        (WebCore):
        (WebCore::roundForImpreciseConversion):
        Add specialized float version of roundForImpreciseConversion that matches
        the int versions rounding logic.
        
        If a value is sufficiently close to the next integer round it up to
        ensure that a style rule such as "width: 4.999px" evaluates to 5px
        instead of 4px. This is needed as, although Lengths are using floating
        point, the layout system still uses integer precision and floors the
        Length values.
        This will change once we move to FractionalLayoutUnits but for now this
        is needed to ensure compatibility with the existing system and tests.
        
        Without this specialized rounding logic we fail a handful of tests
        including acid3.
        
        * platform/Length.h:
        (WebCore::Length::value):
        (Length):
        (WebCore::Length::intValue):
        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::styleOrColLogicalWidth):

2012-04-28  Alexander Pavlov  <apavlov@chromium.org>

        Web Inspector: Enable touch events feature fails touch feature detection
        https://bugs.webkit.org/show_bug.cgi?id=84397

        Whenever the touch emulation is enabled, Inspector adds a script to evaluate on load,
        that adds ontouch(start|end|move|cancel) properties to window.__proto__ and document.__proto__.

        Reviewed by Pavel Feldman.

        * inspector/front-end/DOMAgent.js:
        (WebInspector.DOMAgent.prototype._emulateTouchEventsChanged.get if):
        (WebInspector.DOMAgent.prototype._emulateTouchEventsChanged.scriptAddedCallback):
        (WebInspector.DOMAgent.prototype._emulateTouchEventsChanged):
        * inspector/front-end/inspector.js:

2012-04-28  Eugene Klyuchnikov  <eustas.bug@gmail.com>

        Web Inspector: Shortcuts screen UI polish
        https://bugs.webkit.org/show_bug.cgi?id=84708

          1) remove inconsistent shadow;
          2) reduce border radius;
          3) vertically center the “X” button;
          4) replace unreadable symbolic shortcuts with text;
          5) gaps / colors / opacity adjustments;
          6) section-to-column distribution algorithm is replaced with a fair one.

        Reviewed by Pavel Feldman.

        This is a UI polising patch, so no new tests added.

        * English.lproj/localizedStrings.js: added keyboars arrow keys items
        * inspector/front-end/KeyboardShortcut.js: replace unreadable symbolic shortcuts with text
        * inspector/front-end/ShortcutsScreen.js:
        (WebInspector.ShortcutsScreen):
        (WebInspector.ShortcutsScreen.prototype.show): remove redundant parameter
        (WebInspector.ShortcutsScreen.prototype._buildTable): change section distributing algorithm
        (WebInspector.ShortcutsSection.prototype.renderSection): render colon with margins
        (WebInspector.ShortcutsSection.prototype._renderHeader): apply classname to th elements
        * inspector/front-end/helpScreen.css:
        (.help-window-main): reduce radius, remove shadow; tune color and opacity
        (.help-window-caption): fix spacing; add ruler
        (.help-window-title): fix spacing; remove ruler
        (.help-content): fix spacing
        (.help-close-button): fix spacing; adjust background color
        (.help-column-table): fix spacing
        (.help-table > tr > th): fix color
        (.help-key): fix color
        (.help-combine-keys, .help-key-delimiter): extract common style
        (.help-combine-keys): remove dupe
        (.help-section-title): add space between sections

2012-04-28  Noel Gordon  <noel.gordon@gmail.com>

        Remove PlatformTouchPointQt.cpp PlatformTouchEventQt.cpp from the gyp projects
        https://bugs.webkit.org/show_bug.cgi?id=85132

        Unreviewed VS2010 gyp project generation fix.

        PlatformTouchPointQt.cpp and PlatformTouchEventQt.cpp were removed in r115312,
        so remove them from the gyp projects.

        * WebCore.gypi:

2012-04-28  Nikolas Zimmermann  <nzimmermann@rim.com>

        <animateTransform type="scale"> should use '0' as effective from value not '1', if no base value is specified and from is not given
        https://bugs.webkit.org/show_bug.cgi?id=85133

        It should start from scale=0. I had that fixed before, but it got lost during merging. Restore the fix.
        See bug 85051, for more context why this is correct.

        Tests: svg/animations/animateTransform-by-scale-1-expected.svg
               svg/animations/animateTransform-by-scale-1.svg

        * svg/SVGAnimatedTransformList.cpp:
        (WebCore::SVGAnimatedTransformListAnimator::calculateAnimatedValue):

2012-04-28  Nikolas Zimmermann  <nzimmermann@rim.com>

        SVGAnimateColorElement doesn't support by/to animations properly
        https://bugs.webkit.org/show_bug.cgi?id=36704

        Reviewed by Antti Koivisto.

        Switch AnimatedColorAnimator to use the standard animateAdditiveNumber() method, taking progress & repeatCount into account.
        This gives us accumulation/repeatCount support for free.

        We just animate the four color components on their own now and clamp once at the end after addition/accumulation finished.
        Import <animateColor> tests from Dr. Olaf Hoffmanns SVG Animation test suite, which all pass now.

        While I was at it, remove the includeSMILProperties boolean from computeCSSPropertyValue - we always use the computed style
        without SMIL effects included, whenever we want to retrieve the "base value", or handle "inherit/currentColor".

        Tests: svg/animations/animateColor-additive-2a-expected.svg
               svg/animations/animateColor-additive-2a.svg
               svg/animations/animateColor-additive-2b-expected.svg
               svg/animations/animateColor-additive-2b.svg
               svg/animations/animateColor-additive-2c-expected.svg
               svg/animations/animateColor-additive-2c.svg
               svg/animations/animateColor-additive-2d-expected.svg
               svg/animations/animateColor-additive-2d.svg

        * svg/ColorDistance.cpp:
        (WebCore::ColorDistance::clampColor):
        (WebCore::ColorDistance::addColors):
        (WebCore::ColorDistance::addToColor):
        * svg/ColorDistance.h:
        (ColorDistance):
        * svg/SVGAnimateElement.cpp:
        (WebCore::SVGAnimateElement::resetToBaseValue):
        * svg/SVGAnimatedColor.cpp:
        (WebCore::SVGAnimatedColorAnimator::addAnimatedTypes):
        (WebCore::SVGAnimatedColorAnimator::calculateAnimatedValue):
        * svg/SVGAnimationElement.cpp:
        (WebCore::SVGAnimationElement::computeCSSPropertyValue):
        (WebCore::SVGAnimationElement::adjustForInheritance):
        * svg/SVGAnimationElement.h:
        (SVGAnimationElement):

2012-04-28  Nikolas Zimmermann  <nzimmermann@rim.com>

        Not reviewed. Fix Qt build -- I was too quick.

        * rendering/svg/SVGPathData.cpp: Add back Path.h include.

2012-04-28  Nikolas Zimmermann  <nzimmermann@rim.com>

        Rename SVGPathParserFactory to SVGPathUtilities and remove the obsolete singleton
        https://bugs.webkit.org/show_bug.cgi?id=85129

        SVGPathParserFactory implements the singleton pattern, but stores no members.
        Remove the singleton and move all functions to free-functions into SVGPathUtilities.h.

        Makes the code easier to read - doesn't affect any tests.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * rendering/svg/SVGPathData.cpp:
        (WebCore::updatePathFromPathElement):
        * rendering/svg/SVGRenderTreeAsText.cpp:
        (WebCore::operator<<):
        * svg/SVGAllInOne.cpp:
        * svg/SVGAnimateMotionElement.cpp:
        (WebCore::SVGAnimateMotionElement::parseAttribute):
        * svg/SVGAnimatedPath.cpp:
        (WebCore::SVGAnimatedPathAnimator::constructFromString):
        (WebCore::SVGAnimatedPathAnimator::startAnimValAnimation):
        (WebCore::SVGAnimatedPathAnimator::resetAnimValToBaseVal):
        (WebCore::SVGAnimatedPathAnimator::addAnimatedTypes):
        (WebCore::SVGAnimatedPathAnimator::calculateAnimatedValue):
        * svg/SVGAnimatedType.cpp:
        * svg/SVGGlyphElement.cpp:
        (WebCore::SVGGlyphElement::buildGenericGlyphIdentifier):
        * svg/SVGPathBlender.cpp: Fix typo s/;;/;/
        * svg/SVGPathElement.cpp:
        (WebCore::SVGPathElement::getTotalLength):
        (WebCore::SVGPathElement::getPointAtLength):
        (WebCore::SVGPathElement::getPathSegAtLength):
        (WebCore::SVGPathElement::parseAttribute):
        (WebCore::SVGPathElement::svgAttributeChanged):
        (WebCore::SVGPathElement::lookupOrCreateDWrapper):
        (WebCore::SVGPathElement::pathSegListChanged):
        * svg/SVGPathParserFactory.h: Removed.
        * svg/SVGPathSegList.cpp:
        (WebCore::SVGPathSegList::valueAsString):
        * svg/SVGPathUtilities.cpp: Renamed from Source/WebCore/svg/SVGPathParserFactory.cpp.
        (WebCore):
        (WebCore::globalSVGPathBuilder):
        (WebCore::globalSVGPathSegListBuilder):
        (WebCore::globalSVGPathByteStreamBuilder):
        (WebCore::globalSVGPathStringBuilder):
        (WebCore::globalSVGPathTraversalStateBuilder):
        (WebCore::globalSVGPathParser):
        (WebCore::globalSVGPathBlender):
        (WebCore::buildPathFromString):
        (WebCore::buildSVGPathByteStreamFromSVGPathSegList):
        (WebCore::buildPathFromByteStream):
        (WebCore::buildSVGPathSegListFromByteStream):
        (WebCore::buildStringFromByteStream):
        (WebCore::buildStringFromSVGPathSegList):
        (WebCore::buildSVGPathByteStreamFromString):
        (WebCore::buildAnimatedSVGPathByteStream):
        (WebCore::addToSVGPathByteStream):
        (WebCore::getSVGPathSegAtLengthFromSVGPathByteStream):
        (WebCore::getTotalLengthOfSVGPathByteStream):
        (WebCore::getPointAtLengthOfSVGPathByteStream):
        * svg/SVGPathUtilities.h: Added.
        (WebCore):
        * svg/properties/SVGAnimatedPathSegListPropertyTearOff.h:
        (WebCore::SVGAnimatedPathSegListPropertyTearOff::animValDidChange):

2012-04-28  Nikolas Zimmermann  <nzimmermann@rim.com>

        Fix repetitions & by animation support for path animations
        https://bugs.webkit.org/show_bug.cgi?id=85071

        Rubber-stamped by Antti Koivisto.

        Cleanup SVGPathBlender, to make it more readable.

        * svg/SVGPathBlender.cpp:
        (WebCore::SVGPathBlender::blendLineToHorizontalSegment):
        (WebCore::SVGPathBlender::blendLineToVerticalSegment):
        (WebCore::SVGPathBlender::blendArcToSegment):
        (WebCore::SVGPathBlender::blendAnimatedPath):

2012-04-28  Yury Semikhatsky  <yurys@chromium.org>

        Unreviewed. Qt build fix: added new exported symbols.

        * WebCore.exp.in:

2012-04-28  Yury Semikhatsky  <yurys@chromium.org>

        Unreviewed. Fix Qt minimal build after r115553.

        * inspector/InspectorConsoleAgent.h:

2012-04-27  Nikolas Zimmermann  <nzimmermann@rim.com>

        Fix repetitions & by animation support for path animations
        https://bugs.webkit.org/show_bug.cgi?id=85071

        Reviewed by Antti Koivisto.

        Implement additive="sum" / by-animation support for path animations, eg.
        <path d="M 10 10 L 10 100 Z">
            <animate attributeName="d" begin="0s" dur="4s" by="M 0 0 L 90 0 Z"/>
        <path>

        animates the d attribute to "M 10 10 L 100 100 0 Z".

        Now only <animateColor> and <animateMotion> are left to be fixed, all other types are working as expected now in all additive/accumulate/from-by/by/from-to animations.

        Tests: svg/animations/path-animation-expected.svg
               svg/animations/repeating-path-animation-expected.svg
               svg/animations/repeating-path-animation.svg

        * svg/SVGAnimatedPath.cpp:
        (WebCore::SVGAnimatedPathAnimator::addAnimatedTypes): Implemented, to support by-animations, instead of falling back to to-animations.
        (WebCore::SVGAnimatedPathAnimator::calculateAnimatedValue): Handle repetitions, accumulation & addition.
        * svg/SVGPathBlender.cpp: Allow empty from source everywhere, use default values if no from value is specified, needed for by-animations.
        (WebCore::SVGPathBlender::SVGPathBlender):
        (WebCore::SVGPathBlender::blendAnimatedDimensonalFloat):
        (WebCore::SVGPathBlender::blendAnimatedFloatPoint):
        (WebCore::SVGPathBlender::blendMoveToSegment):
        (WebCore::SVGPathBlender::blendLineToSegment):
        (WebCore::SVGPathBlender::blendLineToHorizontalSegment):
        (WebCore::SVGPathBlender::blendLineToVerticalSegment):
        (WebCore::SVGPathBlender::blendCurveToCubicSegment):
        (WebCore::SVGPathBlender::blendCurveToCubicSmoothSegment):
        (WebCore::SVGPathBlender::blendCurveToQuadraticSegment):
        (WebCore::SVGPathBlender::blendCurveToQuadraticSmoothSegment):
        (WebCore::SVGPathBlender::blendArcToSegment):
        (WebCore::SVGPathBlender::addAnimatedPath):
        (WebCore::SVGPathBlender::blendAnimatedPath):
        * svg/SVGPathBlender.h: Add new addAnimatedPath function.
        (SVGPathBlender):
        * svg/SVGPathByteStream.h:
        (SVGPathByteStream): Make SVGPathByteStreams copyable, needed for SVGAnimatedPathAnimator.
        (WebCore::SVGPathByteStream::size): Returns size of the SVGPathByteStream.
        * svg/SVGPathParserFactory.cpp:
        (WebCore::SVGPathParserFactory::buildAnimatedSVGPathByteStream): Allow empty from streams, needed for by animations. 
        (WebCore::SVGPathParserFactory::addToSVGPathByteStream): Add 'byStream' 'repeatCount' times to 'toStream'. Both streams must match in size.
        * svg/SVGPathParserFactory.h: Add new addToSVGPathByteStream function.
        * svg/SVGPointList.cpp: Remove dead code.
        * svg/SVGPointList.h: Ditto.
        (SVGPointList):

2012-04-28  Nikolas Zimmermann  <nzimmermann@rim.com>

        SVGAnimateMotion does not handle accumulation
        https://bugs.webkit.org/show_bug.cgi?id=18564

        Reviewed by Antti Koivisto.

        Implement accumulation for <animateMotion>. Add lots of new
        reftests, verifying additive/accumulate behavior is correct.

        Tests: svg/animations/animateMotion-additive-1-expected.svg
               svg/animations/animateMotion-additive-1.svg
               svg/animations/animateMotion-additive-2a-expected.svg
               svg/animations/animateMotion-additive-2a.svg
               svg/animations/animateMotion-additive-2b-expected.svg
               svg/animations/animateMotion-additive-2b.svg
               svg/animations/animateMotion-additive-2c-expected.svg
               svg/animations/animateMotion-additive-2c.svg
               svg/animations/animateMotion-additive-2d-expected.svg
               svg/animations/animateMotion-additive-2d.svg
               svg/animations/mozilla/animateMotion-by-1-expected.svg
               svg/animations/mozilla/animateMotion-by-1.svg
               svg/animations/mozilla/animateMotion-from-to-1-expected.svg
               svg/animations/mozilla/animateMotion-from-to-1.svg
               svg/animations/mozilla/animateMotion-indefinite-to-1-expected.svg
               svg/animations/mozilla/animateMotion-indefinite-to-1.svg
               svg/animations/mozilla/animateMotion-indefinite-to-2-expected.svg
               svg/animations/mozilla/animateMotion-indefinite-to-2.svg
               svg/animations/mozilla/animateMotion-mpath-pathLength-1-expected.svg
               svg/animations/mozilla/animateMotion-mpath-pathLength-1.svg
               svg/animations/mozilla/animateMotion-mpath-targetChange-1-expected.svg
               svg/animations/mozilla/animateMotion-mpath-targetChange-1.svg
               svg/animations/mozilla/animateMotion-to-overridden-1-expected.svg
               svg/animations/mozilla/animateMotion-to-overridden-1.svg

        * svg/SVGAnimateMotionElement.cpp:
        (WebCore::SVGAnimateMotionElement::SVGAnimateMotionElement):
        (WebCore::SVGAnimateMotionElement::buildTransformForProgress):
        (WebCore::SVGAnimateMotionElement::calculateAnimatedValue):
        * svg/SVGAnimateMotionElement.h:

2012-04-27  Yury Semikhatsky  <yurys@chromium.org>

        ScriptStateProtectedPtr should not keep a strong reference to the context
        https://bugs.webkit.org/show_bug.cgi?id=85009

        Delete console message arguments when DOMWindow where the messages were created
        is reset on its frame.

        Reviewed by Pavel Feldman.

        Test: http/tests/inspector-enabled/console-clear-arguments-on-frame-navigation.html

        * inspector/ConsoleMessage.cpp:
        (WebCore::ConsoleMessage::addToFrontend):
        (WebCore::ConsoleMessage::windowCleared):
        (WebCore::ConsoleMessage::argumentCount):
        (WebCore):
        * inspector/ConsoleMessage.h:
        (ConsoleMessage):
        * inspector/InspectorConsoleAgent.cpp:
        (WebCore::InspectorConsoleAgent::consoleMessageArgumentCounts):
        (WebCore):
        * inspector/InspectorConsoleAgent.h:
        (InspectorConsoleAgent):
        * page/Frame.cpp:
        (WebCore::Frame::clearDOMWindow):
        (WebCore::Frame::setDOMWindow):
        * testing/Internals.cpp:
        (WebCore):
        (WebCore::Internals::consoleMessageArgumentCounts):
        * testing/Internals.h:
        (Internals):
        * testing/Internals.idl:

2012-04-27  Jochen Eisinger  <jochen@chromium.org>

        Ensure that there's always a provisional document loader if the frame loader is in provisional state
        https://bugs.webkit.org/show_bug.cgi?id=83894

        Reviewed by Nate Chapin.

        We're still seeing crashes in the FrameLoader where the FrameLoader's
        state is "provisional" but there is no provisional document loader. I
        added code to update the FrameLoader's state everytime the provisional
        document loader is cleared, and added checks that the FrameLoader's
        state can't be set to provisional without a provisional loader.

        If the crashes go away, or the newly added checks reveal the culprit,
        we should relex the checks to use ASSERT() instead of CRASH().

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::init):
        (WebCore::FrameLoader::setupForReplace):
        (WebCore::FrameLoader::stopAllLoaders):
        (WebCore::FrameLoader::clearProvisionalLoad):
        (WebCore::FrameLoader::continueFragmentScrollAfterNavigationPolicy):
        (WebCore::FrameLoader::continueLoadAfterNavigationPolicy):

2012-04-27  Geoffrey Garen  <ggaren@apple.com>

        Try to fix the Qt build.

        * bridge/qt/qt_runtime.cpp:
        (JSC::Bindings::QtRuntimeMethod::finishCreation):

2012-04-27  Geoffrey Garen  <ggaren@apple.com>

        Made WeakSet::allocate() static and removed its JSGlobalData argument
        https://bugs.webkit.org/show_bug.cgi?id=85128

        Reviewed by Anders Carlsson.

        Mechanically removed JSGlobalData arguments from PassWeak<T> and Weak<T> allocation.

        * bindings/js/JSDOMBinding.cpp:
        (WebCore::jsStringSlowCase):
        * bindings/js/JSEventListener.h:
        (WebCore::JSEventListener::setWrapper):
        * bindings/js/JSNodeFilterCondition.cpp:
        (WebCore::JSNodeFilterCondition::JSNodeFilterCondition):
        * bindings/js/ScriptWrappable.h:
        (WebCore::ScriptWrappable::setWrapper):
        * bridge/jsc/BridgeJSC.cpp:
        (JSC::Bindings::Instance::createRuntimeObject):
        * bridge/qt/qt_runtime.cpp:
        (JSC::Bindings::QtRuntimeMethod::finishCreation):
        * bridge/runtime_root.cpp:
        (JSC::Bindings::RootObject::addRuntimeObject):

2012-04-27  Mark Rowe  <mrowe@apple.com>

        <rdar://problem/11313710> Leaks under WebCore::CSSImageSetValue::cachedImageSet when running tests

        There was a reference cycle between CSSImageSetValue and StyleCachedImageSet via
        CSSImageSetValue::m_imageSet / StyleCachedImageSet::m_imageSetValue. Break the cycle
        by having StyleCachedImageSet hold a weak reference to the CSSImageSetValue rather
        than a strong reference.

        Reviewed by Geoff Garen.

        * rendering/style/StyleCachedImageSet.cpp:
        (WebCore::StyleCachedImageSet::StyleCachedImageSet):
        * rendering/style/StyleCachedImageSet.h:
        (StyleCachedImageSet):

2012-04-27  Mark Rowe  <mrowe@apple.com>

        <rdar://problem/10346980> REGRESSION: Cannot enter text in Dashboard widget fields that have placeholder attribute

        Remove a dashboard backwards compatibility quirk that was in place to support an old version
        of the Stocks widget. It prevented the pointer-events property from being applied in Dashboard
        widgets, which caused -webkit-input-placeholder elements to eat mouse clicks rather than giving
        focus to the containing input elements. The offending widget has long since been fixed.

        Reviewed by Dan Bernstein.

        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::collectMatchingRulesForList):

2012-04-27  Dean Jackson  <dino@apple.com>

        Support reverse and alternate-reverse in CA animations
        https://bugs.webkit.org/show_bug.cgi?id=78041

        Reviewed by Beth Dakin.

        CoreAnimation does not natively support reverse and alternate-reverse
        animation directions so we need to flip the animation values (keyframe
        keys and timing functions) that we send to GraphicsLayerCA. Unfortunately
        this code adds a lot of conditionals because it isn't as simple as
        reversing the order of keys. You also now have a different alignment of
        timing functions to the reversed list.

        New tests to cover the two new directions, making sure the timing
        functions are correctly inverted, and exercising fill modes.

        Tests: animations/animation-direction-reverse-fill-mode-hardware.html
               animations/animation-direction-reverse-fill-mode.html
               animations/animation-direction-reverse-hardware-opacity.html
               animations/animation-direction-reverse-hardware.html
               animations/animation-direction-reverse-non-hardware.html
               animations/animation-direction-reverse-timing-functions-hardware.html
               animations/animation-direction-reverse-timing-functions.html

        * platform/graphics/ca/GraphicsLayerCA.cpp:
          Handle the previously unsupported animation directions, reversing
          the list of values and keytimes that would be used to create
          the CA Animation.
        (WebCore::GraphicsLayerCA::addAnimation):
          Do not create an animation if on Windows and using a reverse
          direction.
        (WebCore::GraphicsLayerCA::createFilterAnimationsFromKeyframes):
        (WebCore::GraphicsLayerCA::setupAnimation):
        (WebCore::GraphicsLayerCA::setAnimationEndpoints):
        (WebCore::GraphicsLayerCA::setAnimationKeyframes):
        (WebCore::GraphicsLayerCA::setTransformAnimationEndpoints):
        (WebCore::GraphicsLayerCA::setTransformAnimationKeyframes):
        (WebCore::GraphicsLayerCA::setFilterAnimationEndpoints):
        (WebCore::GraphicsLayerCA::setFilterAnimationKeyframes):
        * platform/graphics/ca/PlatformCAAnimation.h:
        (PlatformCAAnimation): Pass through a flag that tells the CA Animation
        that it should invert the timing functions.
        * platform/graphics/ca/mac/PlatformCAAnimationMac.mm:
        (toCAMediaTimingFunction): Add a parameter that will invert the timing
        function coefficients if necessary.
        (PlatformCAAnimation::setTimingFunction):
        (PlatformCAAnimation::setTimingFunctions):
        * platform/graphics/ca/win/PlatformCAAnimationWin.cpp:
        (toCACFTimingFunction):
          New unused parameter.

2012-04-27  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r115407.
        http://trac.webkit.org/changeset/115407
        https://bugs.webkit.org/show_bug.cgi?id=85126

        Caused heap use after free (Requested by keishi_ on #webkit).

        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLFormControlElement::HTMLFormControlElement):
        (WebCore::HTMLFormControlElement::updateFieldSetAndLegendAncestor):
        (WebCore::HTMLFormControlElement::insertedInto):
        (WebCore::HTMLFormControlElement::removedFrom):
        (WebCore::HTMLFormControlElement::disabled):
        (WebCore::HTMLFormControlElement::recalcWillValidate):
        (WebCore::HTMLFormControlElement::setNeedsWillValidateCheck):
        * html/HTMLFormControlElement.h:
        (HTMLFormControlElement):

2012-04-27  Kentaro Hara  <haraken@chromium.org>

        [JSC] Implement a helper method createNotEnoughArgumentsError()
        https://bugs.webkit.org/show_bug.cgi?id=85102

        Reviewed by Geoffrey Garen.

        In bug 84787, kbr@ requested to avoid hard-coding
        createTypeError(exec, "Not enough arguments") here and there.
        This patch implements createNotEnoughArgumentsError(exec)
        and uses it in JSC bindings.

        c.f. a corresponding bug for V8 bindings is bug 85097.

        Test: bindings/scripts/test/TestObj.idl

        * bindings/scripts/CodeGeneratorJS.pm: Modified as described above.
        (GenerateArgumentsCountCheck):

        * bindings/js/JSDataViewCustom.cpp: Ditto.
        (WebCore::getDataViewMember):
        (WebCore::setDataViewMember):
        * bindings/js/JSDeprecatedPeerConnectionCustom.cpp:
        (WebCore::JSDeprecatedPeerConnectionConstructor::constructJSDeprecatedPeerConnection):
        * bindings/js/JSDirectoryEntryCustom.cpp:
        (WebCore::JSDirectoryEntry::getFile):
        (WebCore::JSDirectoryEntry::getDirectory):
        * bindings/js/JSSharedWorkerCustom.cpp:
        (WebCore::JSSharedWorkerConstructor::constructJSSharedWorker):
        * bindings/js/JSWebKitMutationObserverCustom.cpp:
        (WebCore::JSWebKitMutationObserverConstructor::constructJSWebKitMutationObserver):
        (WebCore::JSWebKitMutationObserver::observe):
        * bindings/js/JSWorkerCustom.cpp:
        (WebCore::JSWorkerConstructor::constructJSWorker):

        * bindings/scripts/test/JS/JSFloat64Array.cpp: Updated run-bindings-tests.
        (WebCore::jsFloat64ArrayPrototypeFunctionFoo):
        * bindings/scripts/test/JS/JSTestActiveDOMObject.cpp:
        (WebCore::jsTestActiveDOMObjectPrototypeFunctionExcitingFunction):
        (WebCore::jsTestActiveDOMObjectPrototypeFunctionPostMessage):
        * bindings/scripts/test/JS/JSTestCustomNamedGetter.cpp:
        (WebCore::jsTestCustomNamedGetterPrototypeFunctionAnotherFunction):
        * bindings/scripts/test/JS/JSTestEventTarget.cpp:
        (WebCore::jsTestEventTargetPrototypeFunctionItem):
        (WebCore::jsTestEventTargetPrototypeFunctionAddEventListener):
        (WebCore::jsTestEventTargetPrototypeFunctionRemoveEventListener):
        (WebCore::jsTestEventTargetPrototypeFunctionDispatchEvent):
        * bindings/scripts/test/JS/JSTestInterface.cpp:
        (WebCore::JSTestInterfaceConstructor::constructJSTestInterface):
        (WebCore::jsTestInterfacePrototypeFunctionSupplementalMethod2):
        * bindings/scripts/test/JS/JSTestMediaQueryListListener.cpp:
        (WebCore::jsTestMediaQueryListListenerPrototypeFunctionMethod):
        * bindings/scripts/test/JS/JSTestNamedConstructor.cpp:
        (WebCore::JSTestNamedConstructorNamedConstructor::constructJSTestNamedConstructor):
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::JSTestObjConstructor::constructJSTestObj):
        (WebCore::jsTestObjPrototypeFunctionVoidMethodWithArgs):
        (WebCore::jsTestObjPrototypeFunctionIntMethodWithArgs):
        (WebCore::jsTestObjPrototypeFunctionObjMethodWithArgs):
        (WebCore::jsTestObjPrototypeFunctionMethodWithSequenceArg):
        (WebCore::jsTestObjPrototypeFunctionMethodReturningSequence):
        (WebCore::jsTestObjPrototypeFunctionMethodThatRequiresAllArgsAndThrows):
        (WebCore::jsTestObjPrototypeFunctionSerializedValue):
        (WebCore::jsTestObjPrototypeFunctionIdbKey):
        (WebCore::jsTestObjPrototypeFunctionOptionsObject):
        (WebCore::jsTestObjPrototypeFunctionAddEventListener):
        (WebCore::jsTestObjPrototypeFunctionRemoveEventListener):
        (WebCore::jsTestObjPrototypeFunctionMethodWithNonOptionalArgAndOptionalArg):
        (WebCore::jsTestObjPrototypeFunctionMethodWithNonOptionalArgAndTwoOptionalArgs):
        (WebCore::jsTestObjPrototypeFunctionMethodWithCallbackArg):
        (WebCore::jsTestObjPrototypeFunctionMethodWithNonCallbackArgAndCallbackArg):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethod1):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethod2):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethod3):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethod4):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethod5):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethod6):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethod7):
        (WebCore::jsTestObjConstructorFunctionClassMethod2):
        (WebCore::jsTestObjConstructorFunctionOverloadedMethod11):
        (WebCore::jsTestObjConstructorFunctionOverloadedMethod12):
        (WebCore::jsTestObjPrototypeFunctionMethodWithUnsignedLongArray):
        (WebCore::jsTestObjPrototypeFunctionConvert1):
        (WebCore::jsTestObjPrototypeFunctionConvert2):
        (WebCore::jsTestObjPrototypeFunctionConvert3):
        (WebCore::jsTestObjPrototypeFunctionConvert4):
        (WebCore::jsTestObjPrototypeFunctionConvert5):
        (WebCore::jsTestObjPrototypeFunctionStrictFunction):
        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp:
        (WebCore::JSTestSerializedScriptValueInterfaceConstructor::constructJSTestSerializedScriptValueInterface):
        (WebCore::jsTestSerializedScriptValueInterfacePrototypeFunctionAcceptTransferList):

2012-04-27  Mark Pilgrim  <pilgrim@chromium.org>

        [Chromium] Call highMemoryUsageMB directly
        https://bugs.webkit.org/show_bug.cgi?id=84841

        Reviewed by Kentaro Hara.

        Part of a refactoring series. See tracking bug 82948.

        * bindings/v8/V8GCController.cpp:
        (WebCore::V8GCController::checkMemoryUsage):
        * platform/MemoryUsageSupport.cpp:
        (WebCore::MemoryUsageSupport::highMemoryUsageMB):
        (WebCore):
        * platform/MemoryUsageSupport.h:
        (MemoryUsageSupport):
        * platform/chromium/MemoryUsageSupportChromium.cpp:
        (WebCore::MemoryUsageSupport::highMemoryUsageMB):
        (WebCore):
        * platform/chromium/PlatformSupport.h:
        (PlatformSupport):

2012-04-27  Geoffrey Garen  <ggaren@apple.com>

        Only allow non-null pointers in the WeakSet
        https://bugs.webkit.org/show_bug.cgi?id=85119

        Reviewed by Darin Adler.

        * bridge/jsc/BridgeJSC.cpp:
        (JSC::Bindings::Instance::Instance): Don't allocate a WeakImpl just to
        store null. This was needless, and is now a compile error. Instead,
        rely on the default constructor, which will produce a cheap null.

2012-04-27  Kentaro Hara  <haraken@chromium.org>

        "Not enough arguments" error should be TypeError
        https://bugs.webkit.org/show_bug.cgi?id=84628

        Reviewed by Darin Adler.

        Currently, some custom bindings implement "Not enough arguments"
        error as SyntaxError. The Web IDL spec requires that it should be
        TypeError: http://www.w3.org/TR/WebIDL/#dfn-overload-resolution-algorithm
        Thus, this patch changes SyntaxError to TypeError.

        Tests: http/tests/websocket/tests/hixie76/url-parsing.html:
               http/tests/websocket/tests/hybi/url-parsing.html:
               http/tests/xmlhttprequest/exceptions.html:
               svg/dom/SVGLength.html:
               webaudio/audionode.html:

        * bindings/js/JSAudioContextCustom.cpp:
        (WebCore::JSAudioContextConstructor::constructJSAudioContext):
        * bindings/js/JSSVGLengthCustom.cpp:
        (WebCore::JSSVGLength::convertToSpecifiedUnits):
        * bindings/js/JSWebSocketCustom.cpp:
        (WebCore::JSWebSocketConstructor::constructJSWebSocket):
        (WebCore::JSWebSocket::send):
        * bindings/js/JSXMLHttpRequestCustom.cpp:
        (WebCore::JSXMLHttpRequest::open):
        * bindings/v8/custom/V8AudioContextCustom.cpp:
        (WebCore::V8AudioContext::constructorCallback):
        * bindings/v8/custom/V8SVGLengthCustom.cpp:
        (WebCore::V8SVGLength::convertToSpecifiedUnitsCallback):
        * bindings/v8/custom/V8WebSocketCustom.cpp:
        (WebCore::V8WebSocket::constructorCallback):
        (WebCore::V8WebSocket::sendCallback):
        * bindings/v8/custom/V8XMLHttpRequestCustom.cpp:
        (WebCore::V8XMLHttpRequest::openCallback):

2012-04-27  Kenneth Russell  <kbr@google.com>

        Remove SHADER_COMPILER constant
        https://bugs.webkit.org/show_bug.cgi?id=85115

        Reviewed by Darin Adler.

        Removed constant which was previously removed from spec. Updated
        layout test and expected results.

        * html/canvas/WebGLRenderingContext.idl:

2012-04-27  Arvid Nilsson  <anilsson@rim.com>

        [BlackBerry] Fixed background is scrolling in http://www.nieuwecode.nl
        https://bugs.webkit.org/show_bug.cgi?id=85109

        Reviewed by Antonio Gomes.

        Since the BlackBerry port uses very similar fixed position acceleration
        as the Qt WebKit2 port, the same fix that worked for them in bug 83980
        works for us.

        Fixed by opting in to the FIXED_POSITION_CREATES_STACKING_CONTEXT
        mechanism.

        Covered by existing manual test fixed-position-no-z-index.html.

        * css/StyleResolver.cpp:

2012-04-27  Nat Duca  <nduca@chromium.org>

        Expose high-resolution on requestAnimationFrame callback
        https://bugs.webkit.org/show_bug.cgi?id=66683

        This changes requestAnimationFrame's animationStartTime argument
        to be a high resolution DOM timestamp, per disucssion here:
        http://lists.w3.org/Archives/Public/public-web-perf/2012Apr/0004.html

        Reviewed by James Robinson.

        Covered by existing requestAnimationFrame tests.

        * dom/Document.cpp:
        (WebCore::Document::serviceScriptedAnimations):
        * dom/Document.h:
        (Document):
        * dom/ScriptedAnimationController.cpp:
        (WebCore::ScriptedAnimationController::ScriptedAnimationController):
        (WebCore::ScriptedAnimationController::serviceScriptedAnimations):
        (WebCore):
        (WebCore::ScriptedAnimationController::windowScreenDidChange):
        (WebCore::ScriptedAnimationController::scheduleAnimation):
        (WebCore::ScriptedAnimationController::animationTimerFired):
        (WebCore::ScriptedAnimationController::displayRefreshFired):
        * dom/ScriptedAnimationController.h:
        (ScriptedAnimationController):
        * page/FrameView.cpp:
        (WebCore::FrameView::serviceScriptedAnimations):
        * page/FrameView.h:
        (FrameView):
        * platform/graphics/DisplayRefreshMonitor.cpp:
        (WebCore::DisplayRefreshMonitor::DisplayRefreshMonitor):
        (WebCore::DisplayRefreshMonitor::notifyClients):
        * platform/graphics/DisplayRefreshMonitor.h:
        (DisplayRefreshMonitor):
        * platform/graphics/blackberry/DisplayRefreshMonitorBlackBerry.cpp:
        (WebCore::DisplayRefreshMonitor::displayLinkFired):
        * platform/graphics/mac/DisplayRefreshMonitorMac.cpp:
        (WebCore):
        (WebCore::DisplayRefreshMonitor::requestRefreshCallback):
        (WebCore::DisplayRefreshMonitor::displayLinkFired):

2012-04-27  Kentaro Hara  <haraken@chromium.org>

        [V8] Implement a helper method V8Proxy::throwNotEnoughArgumentsError()
        https://bugs.webkit.org/show_bug.cgi?id=85097

        Reviewed by Kenneth Russell.

        In bug 84787, kbr requested to avoid hard-coding
        throwError("Not enough arguments", V8Proxy::TypeError) here and there.
        This patch implements V8Proxy::throwNotEnoughArgumentsError()
        and uses it in V8 bindings.

        No tests. No change in behavior.

        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateArgumentsCountCheck):
        (GenerateEventConstructorCallback):
        * bindings/v8/V8Proxy.cpp:
        (WebCore::V8Proxy::throwNotEnoughArgmentsError):
        (WebCore):
        * bindings/v8/V8Proxy.h:
        (V8Proxy):
        * bindings/v8/custom/V8DataViewCustom.cpp:
        (WebCore::V8DataView::getInt8Callback):
        (WebCore::V8DataView::getUint8Callback):
        (WebCore::V8DataView::setInt8Callback):
        (WebCore::V8DataView::setUint8Callback):
        * bindings/v8/custom/V8DirectoryEntryCustom.cpp:
        (WebCore::V8DirectoryEntry::getDirectoryCallback):
        (WebCore::V8DirectoryEntry::getFileCallback):
        * bindings/v8/custom/V8IntentConstructor.cpp:
        (WebCore::V8Intent::constructorCallback):
        * bindings/v8/custom/V8WebKitMutationObserverCustom.cpp:
        (WebCore::V8WebKitMutationObserver::constructorCallback):
        (WebCore::V8WebKitMutationObserver::observeCallback):

        Test: bindings/scripts/test/TestObj.idl

        * bindings/scripts/CodeGeneratorV8.pm: Modified as described above.
        (GenerateArgumentsCountCheck):
        (GenerateEventConstructorCallback):

        * bindings/v8/V8Proxy.cpp: Ditto.
        (WebCore::V8Proxy::throwNotEnoughArgumentsError):
        (WebCore):
        * bindings/v8/V8Proxy.h:
        (V8Proxy):
        * bindings/v8/custom/V8DataViewCustom.cpp:
        (WebCore::V8DataView::getInt8Callback):
        (WebCore::V8DataView::getUint8Callback):
        (WebCore::V8DataView::setInt8Callback):
        (WebCore::V8DataView::setUint8Callback):
        * bindings/v8/custom/V8DirectoryEntryCustom.cpp:
        (WebCore::V8DirectoryEntry::getDirectoryCallback):
        (WebCore::V8DirectoryEntry::getFileCallback):
        * bindings/v8/custom/V8IntentConstructor.cpp:
        (WebCore::V8Intent::constructorCallback):
        * bindings/v8/custom/V8WebKitMutationObserverCustom.cpp:
        (WebCore::V8WebKitMutationObserver::constructorCallback):
        (WebCore::V8WebKitMutationObserver::observeCallback):

        * bindings/scripts/test/V8/V8Float64Array.cpp: Updated run-bindings-tests.
        (WebCore::Float64ArrayV8Internal::fooCallback):
        * bindings/scripts/test/V8/V8TestActiveDOMObject.cpp:
        (WebCore::TestActiveDOMObjectV8Internal::excitingFunctionCallback):
        (WebCore::TestActiveDOMObjectV8Internal::postMessageCallback):
        * bindings/scripts/test/V8/V8TestCustomNamedGetter.cpp:
        (WebCore::TestCustomNamedGetterV8Internal::anotherFunctionCallback):
        * bindings/scripts/test/V8/V8TestEventConstructor.cpp:
        (WebCore::V8TestEventConstructor::constructorCallback):
        * bindings/scripts/test/V8/V8TestEventTarget.cpp:
        (WebCore::TestEventTargetV8Internal::itemCallback):
        (WebCore::TestEventTargetV8Internal::dispatchEventCallback):
        * bindings/scripts/test/V8/V8TestInterface.cpp:
        (WebCore::TestInterfaceV8Internal::supplementalMethod2Callback):
        (WebCore::V8TestInterface::constructorCallback):
        * bindings/scripts/test/V8/V8TestMediaQueryListListener.cpp:
        (WebCore::TestMediaQueryListListenerV8Internal::methodCallback):
        * bindings/scripts/test/V8/V8TestNamedConstructor.cpp:
        (WebCore::V8TestNamedConstructorConstructorCallback):
        * bindings/scripts/test/V8/V8TestObj.cpp:
        (WebCore::TestObjV8Internal::voidMethodWithArgsCallback):
        (WebCore::TestObjV8Internal::intMethodWithArgsCallback):
        (WebCore::TestObjV8Internal::objMethodWithArgsCallback):
        (WebCore::TestObjV8Internal::methodWithSequenceArgCallback):
        (WebCore::TestObjV8Internal::methodReturningSequenceCallback):
        (WebCore::TestObjV8Internal::methodThatRequiresAllArgsAndThrowsCallback):
        (WebCore::TestObjV8Internal::serializedValueCallback):
        (WebCore::TestObjV8Internal::idbKeyCallback):
        (WebCore::TestObjV8Internal::optionsObjectCallback):
        (WebCore::TestObjV8Internal::methodWithNonOptionalArgAndOptionalArgCallback):
        (WebCore::TestObjV8Internal::methodWithNonOptionalArgAndTwoOptionalArgsCallback):
        (WebCore::TestObjV8Internal::methodWithCallbackArgCallback):
        (WebCore::TestObjV8Internal::methodWithNonCallbackArgAndCallbackArgCallback):
        (WebCore::TestObjV8Internal::overloadedMethod1Callback):
        (WebCore::TestObjV8Internal::overloadedMethod2Callback):
        (WebCore::TestObjV8Internal::overloadedMethod3Callback):
        (WebCore::TestObjV8Internal::overloadedMethod4Callback):
        (WebCore::TestObjV8Internal::overloadedMethod5Callback):
        (WebCore::TestObjV8Internal::overloadedMethod6Callback):
        (WebCore::TestObjV8Internal::overloadedMethod7Callback):
        (WebCore::TestObjV8Internal::overloadedMethod11Callback):
        (WebCore::TestObjV8Internal::overloadedMethod12Callback):
        (WebCore::TestObjV8Internal::enabledAtRuntimeMethod1Callback):
        (WebCore::TestObjV8Internal::enabledAtRuntimeMethod2Callback):
        (WebCore::TestObjV8Internal::convert1Callback):
        (WebCore::TestObjV8Internal::convert2Callback):
        (WebCore::TestObjV8Internal::convert3Callback):
        (WebCore::TestObjV8Internal::convert4Callback):
        (WebCore::TestObjV8Internal::convert5Callback):
        (WebCore::TestObjV8Internal::strictFunctionCallback):
        (WebCore::V8TestObj::constructorCallback):
        * bindings/scripts/test/V8/V8TestSerializedScriptValueInterface.cpp:
        (WebCore::TestSerializedScriptValueInterfaceV8Internal::acceptTransferListCallback):
        (WebCore::V8TestSerializedScriptValueInterface::constructorCallback):

2012-04-27  Mark Pilgrim  <pilgrim@chromium.org>

        [Chromium] Call lowMemoryUsageMB directly
        https://bugs.webkit.org/show_bug.cgi?id=84840

        Reviewed by Kentaro Hara.

        Part of a refactoring series. See tracking bug 82948.

        * bindings/v8/V8GCController.cpp:
        (WebCore::V8GCController::checkMemoryUsage):
        * platform/MemoryUsageSupport.cpp:
        (WebCore::MemoryUsageSupport::lowMemoryUsageMB):
        (WebCore):
        * platform/MemoryUsageSupport.h:
        (MemoryUsageSupport):
        * platform/chromium/MemoryUsageSupportChromium.cpp:
        (WebCore::MemoryUsageSupport::lowMemoryUsageMB):
        (WebCore):
        * platform/chromium/PlatformSupport.h:
        (PlatformSupport):

2012-04-27  Yi Shen  <yi.4.shen@nokia.com>

        REGRESSION(113723): Pressing enter in this list example deletes the whole list
        https://bugs.webkit.org/show_bug.cgi?id=85016

        Reviewed by Enrica Casucci.

        The bug was caused by CompositeEditCommand::breakOutOfEmptyListItem, which calls isListItem
        on the empty list's siblings to decide which part of the list should get removed. However,
        the check fails when the empty list's sibling is a text node, or a list element (e.g. ul, ol).
        Fixed it by skipping empty list's non-element sibling and calling isListElement to do further
        check.

        Test: added new test cases in the existing test (break-out-of-empty-list-item.html)

        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::breakOutOfEmptyListItem):

2012-04-27  Ian Vollick  <vollick@chromium.org>

        [chromium] Add pause and resume support for accelerated css animations.
        https://bugs.webkit.org/show_bug.cgi?id=84601

        Reviewed by James Robinson.

        Tested in:
        CCLayerAnimationControllerTest.syncPauseResume
        CCActiveAnimationTest.TrimTimeTimeOffset
        CCActiveAnimationTest.TrimTimeSuspendResume
        CCActiveAnimationTest.IsFinishedNeedsSynchronizedStartTime
        CCActiveAnimationTest.RunStateChangesIgnoredWhileSuspended

        * platform/graphics/chromium/GraphicsLayerChromium.cpp:
        (WebCore::GraphicsLayerChromium::suspendAnimations):
        (WebCore::GraphicsLayerChromium::resumeAnimations):
        * platform/graphics/chromium/GraphicsLayerChromium.h:
        (GraphicsLayerChromium):
        * platform/graphics/chromium/LayerChromium.cpp:
        (WebCore::LayerChromium::suspendAnimations):
        (WebCore::LayerChromium::resumeAnimations):
        * platform/graphics/chromium/LayerChromium.h:
        (LayerChromium):
        * platform/graphics/chromium/cc/CCActiveAnimation.cpp:
        (WebCore::CCActiveAnimation::CCActiveAnimation):
        (WebCore::CCActiveAnimation::setRunState):
        (WebCore::CCActiveAnimation::suspend):
        (WebCore::CCActiveAnimation::resume):
        (WebCore::CCActiveAnimation::isFinishedAt):
        (WebCore::CCActiveAnimation::trimTimeToCurrentIteration):
        (WebCore::CCActiveAnimation::cloneForImplThread):
        (WebCore::CCActiveAnimation::pushPropertiesTo):
        * platform/graphics/chromium/cc/CCActiveAnimation.h:
        (CCActiveAnimation):
        (WebCore::CCActiveAnimation::setStartTime):
        (WebCore::CCActiveAnimation::timeOffset):
        (WebCore::CCActiveAnimation::setTimeOffset):
        (WebCore::CCActiveAnimation::isFinished):
        * platform/graphics/chromium/cc/CCLayerAnimationController.cpp:
        (WebCore::CCLayerAnimationController::addAnimation):
        (WebCore::CCLayerAnimationController::pauseAnimation):
        (WebCore::CCLayerAnimationController::suspendAnimations):
        (WebCore::CCLayerAnimationController::resumeAnimations):
        (WebCore::CCLayerAnimationController::pushAnimationUpdatesTo):
        (WebCore::CCLayerAnimationController::getActiveAnimation):
        (WebCore::CCLayerAnimationController::pushNewAnimationsToImplThread):
        (WebCore::CCLayerAnimationController::removeAnimationsCompletedOnMainThread):
        (WebCore::CCLayerAnimationController::pushPropertiesToImplThread):
        (WebCore):
        (WebCore::CCLayerAnimationController::tickAnimations):
        * platform/graphics/chromium/cc/CCLayerAnimationController.h:
        (CCLayerAnimationController):

2012-04-27  Tim Horton  <timothy_horton@apple.com>

        SMIL animation causes leak of the related Document (and many elements)
        https://bugs.webkit.org/show_bug.cgi?id=83856
        <rdar://problem/11216047>

        Reviewed by Dean Jackson.

        The SVGAnimatedProperty cache was previously holding a reference to the properties it contained;
        said references were cleared in the SVGAnimatedProperty destructor (which was never called because
        there was always one remaining reference from the cache).

        The SVGAnimatedProperty cache now holds raw pointers instead of RefPtrs; the SVGAnimateElement now
        owns its own SVGAnimatedProperties, both for itself and for any <use/> instances of itself. They're
        cleared and destroyed within SVGAnimateElement::targetElementWillChange, at which time they're removed
        from the cache.

        SVGPropertyTearOffs now keep a reference to their SVGElement (m_contextElement) instead of their SVGAnimatedProperty;
        this way, there is no reference cycle, but the animated property (owned by the element) and the element itself are
        kept alive until the TearOff is garbage collected.

        Tests: svg/animations/smil-leak-dynamically-added-element-instances.svg
               svg/animations/smil-leak-elements.svg
               svg/animations/smil-leak-element-instances-noBaseValRef.svg
               svg/animations/smil-leak-element-instances.svg
               svg/animations/svglength-element-removed-crash.svg

        * svg/SVGAnimateElement.cpp:
        (WebCore::SVGAnimateElement::calculateAnimatedValue):
        (WebCore::propertyTypesAreConsistent):
        (WebCore::SVGAnimateElement::resetToBaseValue):
        (WebCore::SVGAnimateElement::applyResultsToTarget):
        (WebCore::SVGAnimateElement::targetElementWillChange):
        * svg/SVGAnimateElement.h:
        (SVGAnimateElement):
        * svg/SVGAnimatedAngle.cpp:
        (WebCore::SVGAnimatedAngleAnimator::startAnimValAnimation):
        (WebCore::SVGAnimatedAngleAnimator::stopAnimValAnimation):
        (WebCore::SVGAnimatedAngleAnimator::resetAnimValToBaseVal):
        (WebCore::SVGAnimatedAngleAnimator::animValWillChange):
        (WebCore::SVGAnimatedAngleAnimator::animValDidChange):
        * svg/SVGAnimatedAngle.h:
        (SVGAnimatedAngleAnimator):
        * svg/SVGAnimatedBoolean.cpp:
        (WebCore::SVGAnimatedBooleanAnimator::startAnimValAnimation):
        (WebCore::SVGAnimatedBooleanAnimator::stopAnimValAnimation):
        (WebCore::SVGAnimatedBooleanAnimator::resetAnimValToBaseVal):
        (WebCore::SVGAnimatedBooleanAnimator::animValWillChange):
        (WebCore::SVGAnimatedBooleanAnimator::animValDidChange):
        * svg/SVGAnimatedBoolean.h:
        (SVGAnimatedBooleanAnimator):
        * svg/SVGAnimatedColor.h:
        (WebCore::SVGAnimatedColorAnimator::startAnimValAnimation):
        (WebCore::SVGAnimatedColorAnimator::stopAnimValAnimation):
        (WebCore::SVGAnimatedColorAnimator::resetAnimValToBaseVal):
        (WebCore::SVGAnimatedColorAnimator::animValWillChange):
        (WebCore::SVGAnimatedColorAnimator::animValDidChange):
        * svg/SVGAnimatedEnumeration.cpp:
        (WebCore::SVGAnimatedEnumerationAnimator::startAnimValAnimation):
        (WebCore::SVGAnimatedEnumerationAnimator::stopAnimValAnimation):
        (WebCore::SVGAnimatedEnumerationAnimator::resetAnimValToBaseVal):
        (WebCore::SVGAnimatedEnumerationAnimator::animValWillChange):
        (WebCore::SVGAnimatedEnumerationAnimator::animValDidChange):
        * svg/SVGAnimatedEnumeration.h:
        (SVGAnimatedEnumerationAnimator):
        * svg/SVGAnimatedInteger.cpp:
        (WebCore::SVGAnimatedIntegerAnimator::startAnimValAnimation):
        (WebCore::SVGAnimatedIntegerAnimator::stopAnimValAnimation):
        (WebCore::SVGAnimatedIntegerAnimator::resetAnimValToBaseVal):
        (WebCore::SVGAnimatedIntegerAnimator::animValWillChange):
        (WebCore::SVGAnimatedIntegerAnimator::animValDidChange):
        * svg/SVGAnimatedInteger.h:
        (SVGAnimatedIntegerAnimator):
        * svg/SVGAnimatedIntegerOptionalInteger.cpp:
        (WebCore::SVGAnimatedIntegerOptionalIntegerAnimator::startAnimValAnimation):
        (WebCore::SVGAnimatedIntegerOptionalIntegerAnimator::stopAnimValAnimation):
        (WebCore::SVGAnimatedIntegerOptionalIntegerAnimator::resetAnimValToBaseVal):
        (WebCore::SVGAnimatedIntegerOptionalIntegerAnimator::animValWillChange):
        (WebCore::SVGAnimatedIntegerOptionalIntegerAnimator::animValDidChange):
        * svg/SVGAnimatedIntegerOptionalInteger.h:
        (SVGAnimatedIntegerOptionalIntegerAnimator):
        * svg/SVGAnimatedLength.cpp:
        (WebCore::SVGAnimatedLengthAnimator::startAnimValAnimation):
        (WebCore::SVGAnimatedLengthAnimator::stopAnimValAnimation):
        (WebCore::SVGAnimatedLengthAnimator::resetAnimValToBaseVal):
        (WebCore::SVGAnimatedLengthAnimator::animValWillChange):
        (WebCore::SVGAnimatedLengthAnimator::animValDidChange):
        * svg/SVGAnimatedLength.h:
        (SVGAnimatedLengthAnimator):
        * svg/SVGAnimatedLengthList.cpp:
        (WebCore::SVGAnimatedLengthListAnimator::startAnimValAnimation):
        (WebCore::SVGAnimatedLengthListAnimator::stopAnimValAnimation):
        (WebCore::SVGAnimatedLengthListAnimator::resetAnimValToBaseVal):
        (WebCore::SVGAnimatedLengthListAnimator::animValWillChange):
        (WebCore::SVGAnimatedLengthListAnimator::animValDidChange):
        * svg/SVGAnimatedLengthList.h:
        (SVGAnimatedLengthListAnimator):
        * svg/SVGAnimatedNumber.cpp:
        (WebCore::SVGAnimatedNumberAnimator::startAnimValAnimation):
        (WebCore::SVGAnimatedNumberAnimator::stopAnimValAnimation):
        (WebCore::SVGAnimatedNumberAnimator::resetAnimValToBaseVal):
        (WebCore::SVGAnimatedNumberAnimator::animValWillChange):
        (WebCore::SVGAnimatedNumberAnimator::animValDidChange):
        * svg/SVGAnimatedNumber.h:
        (SVGAnimatedNumberAnimator):
        * svg/SVGAnimatedNumberList.cpp:
        (WebCore::SVGAnimatedNumberListAnimator::startAnimValAnimation):
        (WebCore::SVGAnimatedNumberListAnimator::stopAnimValAnimation):
        (WebCore::SVGAnimatedNumberListAnimator::resetAnimValToBaseVal):
        (WebCore::SVGAnimatedNumberListAnimator::animValWillChange):
        (WebCore::SVGAnimatedNumberListAnimator::animValDidChange):
        * svg/SVGAnimatedNumberList.h:
        (SVGAnimatedNumberListAnimator):
        * svg/SVGAnimatedNumberOptionalNumber.cpp:
        (WebCore::SVGAnimatedNumberOptionalNumberAnimator::startAnimValAnimation):
        (WebCore::SVGAnimatedNumberOptionalNumberAnimator::stopAnimValAnimation):
        (WebCore::SVGAnimatedNumberOptionalNumberAnimator::resetAnimValToBaseVal):
        (WebCore::SVGAnimatedNumberOptionalNumberAnimator::animValWillChange):
        (WebCore::SVGAnimatedNumberOptionalNumberAnimator::animValDidChange):
        * svg/SVGAnimatedNumberOptionalNumber.h:
        (SVGAnimatedNumberOptionalNumberAnimator):
        * svg/SVGAnimatedPath.cpp:
        (WebCore::SVGAnimatedPathAnimator::startAnimValAnimation):
        (WebCore::SVGAnimatedPathAnimator::stopAnimValAnimation):
        (WebCore::SVGAnimatedPathAnimator::resetAnimValToBaseVal):
        (WebCore::SVGAnimatedPathAnimator::animValWillChange):
        (WebCore::SVGAnimatedPathAnimator::animValDidChange):
        * svg/SVGAnimatedPath.h:
        (SVGAnimatedPathAnimator):
        * svg/SVGAnimatedPointList.cpp:
        (WebCore::SVGAnimatedPointListAnimator::startAnimValAnimation):
        (WebCore::SVGAnimatedPointListAnimator::stopAnimValAnimation):
        (WebCore::SVGAnimatedPointListAnimator::resetAnimValToBaseVal):
        (WebCore::SVGAnimatedPointListAnimator::animValWillChange):
        (WebCore::SVGAnimatedPointListAnimator::animValDidChange):
        * svg/SVGAnimatedPointList.h:
        (SVGAnimatedPointListAnimator):
        * svg/SVGAnimatedPreserveAspectRatio.cpp:
        (WebCore::SVGAnimatedPreserveAspectRatioAnimator::startAnimValAnimation):
        (WebCore::SVGAnimatedPreserveAspectRatioAnimator::stopAnimValAnimation):
        (WebCore::SVGAnimatedPreserveAspectRatioAnimator::resetAnimValToBaseVal):
        (WebCore::SVGAnimatedPreserveAspectRatioAnimator::animValWillChange):
        (WebCore::SVGAnimatedPreserveAspectRatioAnimator::animValDidChange):
        * svg/SVGAnimatedPreserveAspectRatio.h:
        (SVGAnimatedPreserveAspectRatioAnimator):
        * svg/SVGAnimatedRect.cpp:
        (WebCore::SVGAnimatedRectAnimator::startAnimValAnimation):
        (WebCore::SVGAnimatedRectAnimator::stopAnimValAnimation):
        (WebCore::SVGAnimatedRectAnimator::resetAnimValToBaseVal):
        (WebCore::SVGAnimatedRectAnimator::animValWillChange):
        (WebCore::SVGAnimatedRectAnimator::animValDidChange):
        * svg/SVGAnimatedRect.h:
        (SVGAnimatedRectAnimator):
        * svg/SVGAnimatedString.cpp:
        (WebCore::SVGAnimatedStringAnimator::startAnimValAnimation):
        (WebCore::SVGAnimatedStringAnimator::stopAnimValAnimation):
        (WebCore::SVGAnimatedStringAnimator::resetAnimValToBaseVal):
        (WebCore::SVGAnimatedStringAnimator::animValWillChange):
        (WebCore::SVGAnimatedStringAnimator::animValDidChange):
        * svg/SVGAnimatedString.h:
        (SVGAnimatedStringAnimator):
        * svg/SVGAnimatedTransformList.cpp:
        (WebCore::SVGAnimatedTransformListAnimator::startAnimValAnimation):
        (WebCore::SVGAnimatedTransformListAnimator::stopAnimValAnimation):
        (WebCore::SVGAnimatedTransformListAnimator::resetAnimValToBaseVal):
        (WebCore::SVGAnimatedTransformListAnimator::animValWillChange):
        (WebCore::SVGAnimatedTransformListAnimator::animValDidChange):
        * svg/SVGAnimatedTransformList.h:
        (SVGAnimatedTransformListAnimator):
        * svg/SVGAnimatedTypeAnimator.h:
        (SVGAnimatedTypeAnimator):
        (WebCore::SVGAnimatedTypeAnimator::findAnimatedPropertiesForAttributeName):
        (WebCore::SVGAnimatedTypeAnimator::findAnimatedPropertiesFromInstancesForAttributeName):
        (WebCore::SVGAnimatedTypeAnimator::constructFromBaseValue):
        (WebCore::SVGAnimatedTypeAnimator::resetFromBaseValue):
        (WebCore::SVGAnimatedTypeAnimator::stopAnimValAnimationForType):
        (WebCore::SVGAnimatedTypeAnimator::animValDidChangeForType):
        (WebCore::SVGAnimatedTypeAnimator::animValWillChangeForType):
        (WebCore::SVGAnimatedTypeAnimator::constructFromBaseValues):
        (WebCore::SVGAnimatedTypeAnimator::resetFromBaseValues):
        (WebCore::SVGAnimatedTypeAnimator::stopAnimValAnimationForTypes):
        (WebCore::SVGAnimatedTypeAnimator::animValDidChangeForTypes):
        (WebCore::SVGAnimatedTypeAnimator::animValWillChangeForTypes):
        (WebCore::SVGAnimatedTypeAnimator::castAnimatedPropertyToActualType):
        (WebCore::SVGAnimatedTypeAnimator::executeAction):
        * svg/properties/SVGAnimatedProperty.h:
        (SVGAnimatedProperty):
        * svg/properties/SVGPropertyTearOff.h:
        (WebCore::SVGPropertyTearOff::animatedProperty):
        (SVGPropertyTearOff):

2012-04-27  Adam Klein  <adamk@chromium.org>

        Remove misspelled, unused, unimplemented method from V8Proxy
        https://bugs.webkit.org/show_bug.cgi?id=85091

        Reviewed by Dimitri Glazkov.

        * bindings/v8/V8Proxy.h:
        (V8Proxy):

2012-04-24  Jeffrey Pfau  <jpfau@apple.com>

        Disable RTF in JavaScript drag-and-drop
        https://bugs.webkit.org/show_bug.cgi?id=76597

        Reviewed by Maciej Stachowiak.

        Test: fast/events/drag-and-drop-subframe-dataTransfer.html

        * platform/mac/ClipboardMac.mm:
        (WebCore::cocoaTypeFromHTMLClipboardType):

2012-04-26  James Robinson  <jamesr@chromium.org>

        [chromium] Separate IOSurface layer type from texture layers
        https://bugs.webkit.org/show_bug.cgi?id=85030

        Reviewed by Adrienne Walker.

        Adds a new layer type for IOSurface layers and pipes through a separate path through to rendering. IOSurface
        layers are very simple - they have an IOSurface id and size, nothing else. All IOSurface layers are "flipped" in
        our terminology.

        * WebCore.gypi:
        * platform/graphics/chromium/IOSurfaceLayerChromium.cpp:
        (WebCore):
        (WebCore::IOSurfaceLayerChromium::create):
        (WebCore::IOSurfaceLayerChromium::IOSurfaceLayerChromium):
        (WebCore::IOSurfaceLayerChromium::~IOSurfaceLayerChromium):
        (WebCore::IOSurfaceLayerChromium::setIOSurfaceProperties):
        (WebCore::IOSurfaceLayerChromium::createCCLayerImpl):
        (WebCore::IOSurfaceLayerChromium::drawsContent):
        (WebCore::IOSurfaceLayerChromium::pushPropertiesTo):
        * platform/graphics/chromium/IOSurfaceLayerChromium.h:
        (WebCore):
        (IOSurfaceLayerChromium):
        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::drawIOSurfaceQuad):
        (WebCore::LayerRendererChromium::cleanupSharedObjects):
        * platform/graphics/chromium/LayerRendererChromium.h:
        (LayerRendererChromium):
        * platform/graphics/chromium/TextureLayerChromium.cpp:
        (WebCore::TextureLayerChromium::TextureLayerChromium):
        (WebCore::TextureLayerChromium::drawsContent):
        (WebCore::TextureLayerChromium::pushPropertiesTo):
        * platform/graphics/chromium/TextureLayerChromium.h:
        (TextureLayerChromium):
        * platform/graphics/chromium/cc/CCIOSurfaceDrawQuad.cpp:
        (WebCore::CCIOSurfaceDrawQuad::create):
        (WebCore::CCIOSurfaceDrawQuad::CCIOSurfaceDrawQuad):
        * platform/graphics/chromium/cc/CCIOSurfaceDrawQuad.h:
        (CCIOSurfaceDrawQuad):
        * platform/graphics/chromium/cc/CCIOSurfaceLayerImpl.cpp:
        (WebCore):
        (WebCore::CCIOSurfaceLayerImpl::CCIOSurfaceLayerImpl):
        (WebCore::CCIOSurfaceLayerImpl::~CCIOSurfaceLayerImpl):
        (WebCore::CCIOSurfaceLayerImpl::willDraw):
        (WebCore::CCIOSurfaceLayerImpl::appendQuads):
        (WebCore::CCIOSurfaceLayerImpl::dumpLayerProperties):
        (WebCore::CCIOSurfaceLayerImpl::didLoseContext):
        (WebCore::CCIOSurfaceLayerImpl::setIOSurfaceProperties):
        * platform/graphics/chromium/cc/CCIOSurfaceLayerImpl.h:
        (WebCore):
        (CCIOSurfaceLayerImpl):
        (WebCore::CCIOSurfaceLayerImpl::create):
        * platform/graphics/chromium/cc/CCTextureLayerImpl.cpp:
        (WebCore::CCTextureLayerImpl::CCTextureLayerImpl):
        (WebCore::CCTextureLayerImpl::~CCTextureLayerImpl):
        (WebCore::CCTextureLayerImpl::appendQuads):
        (WebCore::CCTextureLayerImpl::didLoseContext):
        * platform/graphics/chromium/cc/CCTextureLayerImpl.h:
        (CCTextureLayerImpl):

2012-04-27  Arvid Nilsson  <anilsson@rim.com>

        [BlackBerry] OpenGL related bug fixes
        https://bugs.webkit.org/show_bug.cgi?id=84836

        Reviewed by Antonio Gomes.

        PR147254, 148933, 149117, 149721, 150228

        No new tests, covered by existing BlackBerry browser stress tests

        * platform/graphics/blackberry/CanvasLayerWebKitThread.cpp:
        (WebCore::CanvasLayerWebKitThread::updateTextureContentsIfNeeded):
        * platform/graphics/blackberry/LayerCompositingThread.cpp:
        (WebCore::LayerCompositingThread::drawTextures):
        * platform/graphics/blackberry/LayerRenderer.cpp:
        (WebCore::LayerRenderer::~LayerRenderer):
        (WebCore::LayerRenderer::drawLayers):
        (WebCore::LayerRenderer::initializeSharedGLObjects):

2012-04-27  Nat Duca  <nduca@chromium.org>

        Implement high-resolution time via window.performance.webkitNow()
        https://bugs.webkit.org/show_bug.cgi?id=66684

        This implements the high resolution time spec from
        http://www.w3.org/TR/hr-time/, giving javascript access to
        sub-millisecond timestamps that increase over time instead of being
        subject to skewing, for example when the host machine's clock changes.

        Reviewed by Tony Gentilcore.

        Test: fast/performance/performance-now-timestamps.html

        * page/Performance.cpp:
        (WebCore::Performance::now):
        (WebCore):
        * page/Performance.h:
        (Performance):
        * page/Performance.idl:

2012-04-27  Filip Pizlo  <fpizlo@apple.com>

        If you get a list of DOMWrapperWorld*'s and then plan to allocate in the heap, you should ref
        the DOMWrapperWorld*'s
        https://bugs.webkit.org/show_bug.cgi?id=85098
        <rdar://problem/11318170>

        Reviewed by Sam Weinig.

        No new tests because this addresses hard-to-repro flaky behavior arising from GCs at inconvenient
        times.

        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::getAllWorlds):
        * bindings/js/ScriptController.h:
        (ScriptController):
        * bindings/js/WebCoreJSClientData.h:
        (WebCore::WebCoreJSClientData::getAllWorlds):
        * bindings/v8/ScriptController.cpp:
        (WebCore::ScriptController::getAllWorlds):
        * bindings/v8/ScriptController.h:
        (ScriptController):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::dispatchDidClearWindowObjectsInAllWorlds):
        (WebCore::FrameLoader::dispatchGlobalObjectAvailableInAllWorlds):

2012-04-27  Geoffrey Garen  <ggaren@apple.com>

        Removed the sole use of Weak<Unknown>
        https://bugs.webkit.org/show_bug.cgi?id=85099

        Reviewed by Sam Weinig.

        The semantics and implementation of Weak<Unknown> are unclear because:
            - Should you call a finalizer for a non-GC thingy? If so, when?

                * Possible answer: No.

            - If WeakImpls for GC thingies live with the GC thingies in the
              heap, where do WeakImpls for non-GC thingies live?

                * Possible answer: Directly in the Weak<T>.

        Since no clients actually want these behaviors, it's hard to tell if
        they're the right behaviors, and it's not worth the implementation
        complexity. If we come up with a client that wants these behaviors, we
        can always revisit this.

        * bindings/js/JSNodeFilterCondition.cpp:
        (WebCore::JSNodeFilterCondition::JSNodeFilterCondition): Just leave our
        filter NULL if it's not an object -- that's a better way to indicate
        "not a valid filter object".

        (WebCore::JSNodeFilterCondition::acceptNode): Fixed up some naming to
        clarify that the object we're working with is not necessarily a function.

        * bindings/js/JSNodeFilterCondition.h:
        (JSNodeFilterCondition): Use Weak<JSObject>, since that more closely
        matches what we're trying to do.

2012-04-26  Kentaro Hara  <haraken@chromium.org>

        [V8] Pass Isolate to getDOMXXXMap()
        https://bugs.webkit.org/show_bug.cgi?id=85022

        Reviewed by Nate Chapin.

        The objective is to pass Isolate around in V8 bindings.
        This patch passes Isolate to getDOMXXXMap().

        Also this patch removes DOMMap::getDOMDataStore() and
        DOMData::getDefalutStore(), since the indirection by the
        methods is redundant. This is not for performance
        optimization but just for refactoring.

        No tests. No change in behavior.

        * bindings/v8/DOMData.cpp:
        (WebCore::DOMData::getCurrentStore):
        * bindings/v8/DOMData.h:
        (DOMData):
        * bindings/v8/V8DOMMap.cpp:
        (WebCore::getDOMNodeMap):
        (WebCore::getActiveDOMNodeMap):
        (WebCore::getDOMObjectMap):
        (WebCore::getActiveDOMObjectMap):
        (WebCore::removeAllDOMObjects):
        * bindings/v8/V8DOMMap.h:
        (WebCore):

2012-04-26  Kentaro Hara  <haraken@chromium.org>

        [V8] Pass Isolate to V8BindingPerIsolateData::current()
        https://bugs.webkit.org/show_bug.cgi?id=85023

        Reviewed by Nate Chapin.

        The objective is to pass Isolate around in V8 bindings.
        This patch passes Isolate to V8BindingPerIsolateData::current().

        No tests. No change in behavior.

        * bindings/v8/V8Binding.h:
        (WebCore::V8BindingPerIsolateData::current):
        (WebCore::v8ExternalString):

2012-04-27  Dimitri Glazkov  <dglazkov@chromium.org>

        Unreviewed, rolling out r115484.
        http://trac.webkit.org/changeset/115484
        https://bugs.webkit.org/show_bug.cgi?id=84555

        Broke Chromium compile.

        * bindings/js/JSBlobCustom.cpp:
        * bindings/v8/custom/V8BlobCustom.cpp:
        * fileapi/Blob.cpp:
        * fileapi/Blob.h:
        (Blob):
        * fileapi/Blob.idl:
        * workers/WorkerContext.idl:

2012-04-27  Alexandru Chiculita  <achicu@adobe.com>

        [CSS Shaders] Implement CSS Animations and Transitions for CSS Shaders
        https://bugs.webkit.org/show_bug.cgi?id=71406

        Reviewed by Dean Jackson.

        I've implemented the blend function for the CustomFilterOperation. This should enable animations for CSS Shaders.
        Currently, just floats are implemented. If any of the filter attributes like shader, mesh size or box mode are different, 
        the fallback is to use the "to" part of the animation instead. If other shader parameters do not match, it will merge the parameter values
        between the "from" and "to" states.

        Test: css3/filters/custom/custom-filter-animation.html

        * platform/graphics/filters/CustomFilterNumberParameter.h:
        (WebCore::CustomFilterNumberParameter::blend):
        (CustomFilterNumberParameter):
        (WebCore::CustomFilterNumberParameter::operator==):
        * platform/graphics/filters/CustomFilterOperation.cpp:
        (WebCore::equalCustomFilterParameters):
        (WebCore):
        (WebCore::checkCustomFilterParametersOrder):
        (WebCore::blendCustomFilterParameters):
        (WebCore::CustomFilterOperation::CustomFilterOperation):
        (WebCore::CustomFilterOperation::blend):
        * platform/graphics/filters/CustomFilterOperation.h:
        (WebCore):
        (CustomFilterOperation):
        (WebCore::CustomFilterOperation::operator==):
        (WebCore::CustomFilterOperation::operator!=):
        * platform/graphics/filters/CustomFilterParameter.h:
        (CustomFilterParameter):
        (WebCore::CustomFilterParameter::isSameType):
        (WebCore::CustomFilterParameter::operator==):
        (WebCore::CustomFilterParameter::operator!=):
        * platform/graphics/filters/CustomFilterProgram.h:
        * rendering/style/StyleCustomFilterProgram.h:
        (StyleCustomFilterProgram):
        (WebCore::StyleCustomFilterProgram::cachedVertexShader):
        (WebCore::StyleCustomFilterProgram::cachedFragmentShader):
        (WebCore::StyleCustomFilterProgram::operator==):

2012-04-27  Chris Rogers  <crogers@google.com>

        Re-factor scheduling logic from AudioBufferSourceNode into AudioScheduledSourceNode
        https://bugs.webkit.org/show_bug.cgi?id=84639

        Reviewed by Eric Carlson.

        Playback logic involving noteOn(), noteOff(), and playbackState were intertwined with
        the AudioBufferSourceNode's buffer playback code.  These are more general concepts and
        may be implemented separately in another class called AudioScheduledSourceNode.

        No new tests. Covered by existing layout tests.

        * GNUmakefile.list.am:
        Add AudioScheduledSourceNode files to makefile.

        * Modules/webaudio/AudioBufferSourceNode.cpp:
        (WebCore):
        (WebCore::AudioBufferSourceNode::AudioBufferSourceNode):
        Re-factor some member variables into new base class AudioScheduledSourceNode.

        (WebCore::AudioBufferSourceNode::process):
        Re-factor scheduling logic into AudioScheduledSourceNode.

        * Modules/webaudio/AudioBufferSourceNode.h:
        (AudioBufferSourceNode):
        Simplify by re-factoring scheduling logic into AudioScheduledSourceNode.

        * Modules/webaudio/AudioScheduledSourceNode.cpp: Added.
        (WebCore):
        (WebCore::AudioScheduledSourceNode::AudioScheduledSourceNode):
        (WebCore::AudioScheduledSourceNode::updateSchedulingInfo):
        Get frame information for the current time quantum.

        * Modules/webaudio/AudioScheduledSourceNode.h: Added.
        (WebCore::AudioScheduledSourceNode::noteOn):
        (WebCore::AudioScheduledSourceNode::noteOff):
        (WebCore::AudioScheduledSourceNode::finish):
        (WebCore::AudioScheduledSourceNode::playbackState):
        (WebCore::AudioScheduledSourceNode::isPlayingOrScheduled):
        (WebCore::AudioScheduledSourceNode::hasFinished):
        Re-factored from AudioBufferSourceNode.

        * WebCore.gypi:
        * WebCore.xcodeproj/project.pbxproj:
        Add AudioScheduledSourceNode files to makefiles.
    
2012-04-26  Sam Weinig  <sam@webkit.org>

        Add support for the Blob constructor
        https://bugs.webkit.org/show_bug.cgi?id=84555

        Reviewed by Maciej Stachowiak.

        Test: fast/files/blob-constructor.html

        This adds an implementation of the Blob constructor that willfully
        violates the W3C Editor’s Draft 29 February 2012 in the following ways:
        - Elements in the parts array are coerced to DOMStrings https://www.w3.org/Bugs/Public/show_bug.cgi?id=16721 
        - Don't throw for invalid key in the dictionary https://www.w3.org/Bugs/Public/show_bug.cgi?id=16727
        - Values for the endings property are treated as enums https://www.w3.org/Bugs/Public/show_bug.cgi?id=16729 

        * bindings/js/JSBlobCustom.cpp:
        (WebCore::JSBlobConstructor::constructJSBlob):
        Implement blob constructor.

        * bindings/v8/custom/V8BlobCustom.cpp:
        (WebCore::V8Blob::constructorCallback):
        Implement blob constructor.

        * fileapi/Blob.idl:
        Add constructor to IDL.

        * workers/WorkerContext.idl:
        Add Blob constructor to the worker global object.

2012-04-27  Allan Sandfeld Jensen  <allan.jensen@nokia.com>

        [Qt] Fix minimal build.
        https://bugs.webkit.org/show_bug.cgi?id=85045

        Reviewed by Tor Arne Vestbø.

        Compile LIBXML XML parser even if ENABLE_XSLT is not set.

        * Target.pri:

2012-04-27  Shawn Singh  <shawnsingh@chromium.org>

        Infinite backgroundClipRect should not be scrolled.
        https://bugs.webkit.org/show_bug.cgi?id=84979

        Reviewed by Adrienne Walker.

        Test: compositing/iframes/scroll-fixed-transformed-element.html

        By accidentally scrolling clipRects that should be considered
        "infinite", they were no longer being considered infinite. This
        caused a chain of un-intended code paths that caused fixed
        position elements to stutter when scrolling in Chromium.

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::backgroundClipRect):

2012-04-27  Ryosuke Niwa  <rniwa@webkit.org>

        FormatBlock crashes when body element is removed prior to the command execution
        https://bugs.webkit.org/show_bug.cgi?id=84937

        Reviewed by Tony Chang.

        The crash was because because DOM had been modified since the last time selection had been "validated",
        and therefore frame selection's endpoints are no longer visible when we instantiated visibleStart
        and visibleEnd from m_endingSelection of the edit command.

        Fixed the bug by checking the nullity and orphanedness of visible start and visible end directly.
        I suspect we have similar bugs in other commands. The fundamental problem is that the copy constructor
        of VisibleSelection never validates so when a VisibleSelection is passed from one class to another
        (e.g. FrameSelection to EditCommand), we may not adjust end points as needed.

        Test: editing/execCommand/format-block-without-body-crash.html

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

2012-04-27  Enrica Casucci  <enrica@apple.com>

        REGRESSION(r96257): Deleting a large amount of text is very slow.
        https://bugs.webkit.org/show_bug.cgi?id=83983
        <rdar://problem/10826076>
        
        Reviewed by Ryosuke Niwa.

        The change in r96257 did not cause the performance regression per se,
        but exposed a problem in the way we calculate the offset in container
        node when the anchorType is PositionIsOffsetInAnchor.
        The offset was computed as the minimum between the given offset and
        lastOffsetInNode. If the container has a very large number of children,
        we walk the entire list of child nodes in the container simply to find
        out how many they are.
        Looking through the entire editing code, I found other 2 cases (one
        is only an ASSERT) where we could do a similar optimization.

        No new tests. No behavior change, only performance optimization.

        * dom/Position.cpp:
        (WebCore::Position::computeOffsetInContainerNode):
        * dom/Position.h:
        (WebCore::minOffsetForNode):
        (WebCore::offsetIsBeforeLastNodeOffset):
        * editing/ApplyStyleCommand.cpp:
        (WebCore::ApplyStyleCommand::removeInlineStyle):
        (WebCore::ApplyStyleCommand::mergeEndWithNextIfIdentical):

2012-04-27  Julien Chaffraix  <jchaffraix@webkit.org>

        NULL-deref in RenderBox::clippedOverflowRectForRepaint
        https://bugs.webkit.org/show_bug.cgi?id=84774

        Reviewed by Tony Chang.

        Test: fast/inline/crash-new-continuation-with-outline.html

        The bug comes from trying to repaint the :after content as part of updateBeforeAfterContent.
        The repainting logic would query the yet-to-be-inserted continuation(). Then we would crash in
        RenderBox::clippedOverflowRectForRepaint as we didn't have an enclosingLayer() (which any
        RenderObject in the tree will have).

        The fix is to check in RenderInline::clippedOverflowRectForRepaint that our continuation()
        is properly inserted in the tree. We could check that it isRooted() but it's an overkill here.

        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::clippedOverflowRectForRepaint):

2012-04-27  Antti Koivisto  <antti@apple.com>

        Memory cache pruning should be protected against reentering.
        https://bugs.webkit.org/show_bug.cgi?id=85077

        Reviewed by Alexey Proskuryakov.

        MemoryCache::pruneDeadResourcesToSize() has some ad-hock protection against reentering.
        This patch adds more complete protection.

        * loader/cache/MemoryCache.cpp:
        (WebCore::MemoryCache::MemoryCache):
        (WebCore::MemoryCache::pruneLiveResourcesToSize):
        
            Protect live resource pruning too.

        (WebCore::MemoryCache::pruneDeadResourcesToSize):
        
            Remove the existing weak reentrancy handling in favor of full proctection.

        * loader/cache/MemoryCache.h:
        (MemoryCache):

2012-04-27  Alexander Pavlov  <apavlov@chromium.org>

        Web Inspector: Implement the "Disable JavaScript" option in the settings dialog
        (re-landing r115417 with a test that should work on Windows.)
        https://bugs.webkit.org/show_bug.cgi?id=84946

        Reviewed by Yury Semikhatsky.

        Test: inspector/debugger/disable-script.html

        * inspector/Inspector.json:
        * inspector/InspectorPageAgent.cpp:
        (PageAgentState):
        (WebCore::InspectorPageAgent::enable):
        (WebCore::InspectorPageAgent::disable):
        (WebCore::InspectorPageAgent::getScriptExecutionStatus):
        (WebCore):
        (WebCore::InspectorPageAgent::setScriptExecutionDisabled):
        * inspector/InspectorPageAgent.h:
        * inspector/front-end/Settings.js:
        * inspector/front-end/SettingsScreen.js:
        (WebInspector.SettingsScreen):
        (WebInspector.SettingsScreen.prototype.get _updateScriptDisabledCheckbox):
        (WebInspector.SettingsScreen.prototype._javaScriptDisabledChanged):
        * inspector/front-end/inspector.js:

2012-04-27  Keishi Hattori  <keishi@webkit.org>

        IETC HTML5: verify HTMLDataListElement - instanceof HTMLDataListElement fails.
        https://bugs.webkit.org/show_bug.cgi?id=81196

        Reviewed by Kent Tamura.

        Test: fast/dom/Window/window-properties.html, fast/dom/Window/window-lookup-precedence.html

        HTMLDataListElement should be available on DOMWindow.

        * page/DOMWindow.idl: Added HTMLDataListElement.

2012-04-27  Dimitri Glazkov  <dglazkov@chromium.org>

        Unreviewed, rolling out r115417.
        http://trac.webkit.org/changeset/115417
        https://bugs.webkit.org/show_bug.cgi?id=84946

        Added test is broken on windows.

        * inspector/Inspector.json:
        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::enable):
        (WebCore::InspectorPageAgent::disable):
        * inspector/InspectorPageAgent.h:
        * inspector/front-end/Settings.js:
        * inspector/front-end/SettingsScreen.js:
        (WebInspector.SettingsScreen):
        * inspector/front-end/inspector.js:

2012-04-27  Gavin Peters  <gavinp@chromium.org>

        Add new ENABLE_LINK_PRERENDER define to control the Prerendering API
        https://bugs.webkit.org/show_bug.cgi?id=84871

        Reviewed by Adam Barth.

        Prerendering is currently covered by the ENABLE_LINK_PREFETCH macro, but the new Prerendering
        API separates it from prefetching.  Having separate include guards lets ports enable prefetching,
        a relatively easy change, without needing to build the infrastructure for prerendering, which
        is considerably more complicated.

        * Configurations/FeatureDefines.xcconfig:

2012-04-27  Zan Dobersek  <zandobersek@gmail.com>

        [Gtk][DOM Bindings] Feature-protected properties are put under condition guards
        https://bugs.webkit.org/show_bug.cgi?id=85068

        Reviewed by Martin Robinson.

        Generated feature-dependent properties are now present regardless of that
        feature being enabled. On getting or setting that property's value a warning
        is thrown if the feature is not enabled. Additionally, if the generated
        interface is feature-dependant, when getting or setting any property's value
        a warning is thrown if the feature is not enabled.

        No new tests - covered by existing bindings tests.

        * bindings/scripts/CodeGeneratorGObject.pm:
        (GenerateProperty):
        (GenerateProperties):
        * bindings/scripts/test/GObject/WebKitDOMTestInterface.cpp: Rebaseline.
        (webkit_dom_test_interface_set_property):
        (webkit_dom_test_interface_get_property):
        (webkit_dom_test_interface_class_init):
        * bindings/scripts/test/GObject/WebKitDOMTestObj.cpp: Ditto.
        (webkit_dom_test_obj_set_property):
        (webkit_dom_test_obj_get_property):
        (webkit_dom_test_obj_class_init):
        * bindings/scripts/test/GObject/WebKitDOMTestSerializedScriptValueInterface.cpp: Ditto.
        (webkit_dom_test_serialized_script_value_interface_get_property):

2012-04-27  Zan Dobersek  <zandobersek@gmail.com>

        [Gtk][DOM Bindings] Conditional string in implementation file generated in wrong place after 113450
        https://bugs.webkit.org/show_bug.cgi?id=85065

        Reviewed by Martin Robinson.

        Put the condition string in implementation file after the header inclusions. This ensures
        that build errors do not occur when disabling the future that applies to the condition string
        because of WebCore objects and methods that are still in use despite the feature being disabled.

        No new tests - covered by bindings tests.

        * bindings/scripts/CodeGeneratorGObject.pm:
        (WriteData):
        * bindings/scripts/test/GObject/WebKitDOMTestCallback.cpp: Rebaseline generated results.
        * bindings/scripts/test/GObject/WebKitDOMTestInterface.cpp: Ditto.
        * bindings/scripts/test/GObject/WebKitDOMTestSerializedScriptValueInterface.cpp: Ditto.

2012-04-27  Andreas Kling  <kling@webkit.org>

        Avoid mutating Element attribute storage in StepRange constructor.
        <http://webkit.org/b/84797>

        Reviewed by Antti Koivisto.

        Test: fast/selectors/querySelector-in-range-crash.html

        * dom/Attribute.h:

            Add comment about the volatility of references returned by getters.

        * html/StepRange.cpp:
        (WebCore::StepRange::StepRange):

            Replace hasAttribute/getAttribute pair by a single fastGetAttribute.

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::updateType):
        (WebCore::HTMLInputElement::value):

            Store the value attribute in an local variable before passing it to sanitizeValue().

2012-04-27  Rob Buis  <rbuis@rim.com>

        SVG inline style of 'marker-*' does not override
        https://bugs.webkit.org/show_bug.cgi?id=84824

        Reviewed by Nikolas Zimmermann.

        Properly handle CSSValueNone for clip-path, filter, mask and marker-* properties. Instead
        of bailing out, set the none value explicitly, since an earlier match may have set it to
        something other than none.

        Tests: svg/custom/inline-style-overrides-clipPath-expected.svg
               svg/custom/inline-style-overrides-clipPath.svg
               svg/custom/inline-style-overrides-filter-expected.svg
               svg/custom/inline-style-overrides-filter.svg
               svg/custom/inline-style-overrides-markers-expected.svg
               svg/custom/inline-style-overrides-markers.svg
               svg/custom/inline-style-overrides-mask-expected.svg
               svg/custom/inline-style-overrides-mask.svg

        * css/SVGCSSStyleSelector.cpp:
        (WebCore::StyleResolver::applySVGProperty):

2012-04-27  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL] media/video-controls-rendering-toggle-display-none.html is failing
        https://bugs.webkit.org/show_bug.cgi?id=84949

        Reviewed by Antonio Gomes.

        Fix volume slider rendering so that the
        media/video-controls-rendering-toggle-display-none.html passes.

        * css/mediaControlsEfl.css:
        (audio::-webkit-media-controls-mute-button, video::-webkit-media-controls-mute-button):
        (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):

2012-04-27  Nikolas Zimmermann  <nzimmermann@rim.com>

        Support values animation mode with just a single value
        https://bugs.webkit.org/show_bug.cgi?id=85064

        Reviewed by Antti Koivisto.

        values="a" is equal to <set to="a"> per SMIL specification.
        We currently only support values animation if at least two values are given, fix that.

        The reference animations in Dr. Olaf Hoffmanns SVG Animation test suite are mostly using
        values animations, sometimes with only a single value given. Lots of the reference animations
        are broken in trunk w/o this patch and now work as expected.

        See http://hoffmann.bplaced.net/svgtest/index.php?s=en&in=start.

        Test: svg/animations/single-values-animation.html

        * svg/SVGAnimationElement.cpp:
        (WebCore::SVGAnimationElement::calculateKeyTimesForCalcModePaced):
        (WebCore::SVGAnimationElement::currentValuesForValuesAnimation):
        (WebCore::SVGAnimationElement::startedActiveInterval):

2012-04-27  Konrad Piascik  <kpiascik@rim.com>

        Web Inspector: Allow inspection of Web Socket Frames
        https://bugs.webkit.org/show_bug.cgi?id=83282

        Reviewed by Pavel Feldman.

        Tests: http/tests/inspector/web-socket-frame-error.html
               http/tests/inspector/web-socket-frame.html

        * English.lproj/localizedStrings.js: Added new Web Inspector front-end UI strings.
        * Modules/websockets/WebSocketChannel.cpp:  Added InspectorInstrumentation calls to
                                                    the following methods.
        (WebCore::WebSocketChannel::fail):
        (WebCore::WebSocketChannel::processFrame):
        (WebCore::WebSocketChannel::sendFrame):
        * WebCore.gypi: Added new Web Inspector resource file.
        * WebCore.vcproj/WebCore.vcproj: Added new Web Inspector resource file.
        * inspector/Inspector.json: Added new Web Inspector resource file.
        * inspector/InspectorInstrumentation.cpp: Added new methods for instrumenting a Web Socket frame or error.
        (WebCore::InspectorInstrumentation::didReceiveWebSocketFrameImpl):
        (WebCore::InspectorInstrumentation::didReceiveWebSocketFrameErrorImpl):
        (WebCore::InspectorInstrumentation::didSendWebSocketFrameImpl):
        * inspector/InspectorInstrumentation.h:
        (WebCore):
        (InspectorInstrumentation):
        (WebCore::InspectorInstrumentation::didReceiveWebSocketFrame):
        (WebCore::InspectorInstrumentation::didReceiveWebSocketFrameError):
        (WebCore::InspectorInstrumentation::didSendWebSocketFrame):
        * inspector/InspectorResourceAgent.cpp:
        (WebCore::InspectorResourceAgent::didReceiveWebSocketFrame):
        (WebCore):
        (WebCore::InspectorResourceAgent::didSendWebSocketFrame):
        (WebCore::InspectorResourceAgent::didReceiveWebSocketFrameError):
        * inspector/InspectorResourceAgent.h:
        (WebCore):
        (InspectorResourceAgent):
        * inspector/compile-front-end.py: Added new Web Inspector resource file.
        * inspector/front-end/NetworkItemView.js: Added a new View for inspecting Web Socket frames and errors.
        (WebInspector.NetworkItemView):
        * inspector/front-end/NetworkManager.js: Implemented callback called by InspectorResourceAgent for
                                                 the new Web Socket frame and error calls.
        (WebInspector.NetworkDispatcher.prototype.webSocketFrameReceived):
        (WebInspector.NetworkDispatcher.prototype.webSocketFrameSent):
        (WebInspector.NetworkDispatcher.prototype.webSocketFrameError):
        * inspector/front-end/NetworkRequest.js: Added a frames array to a Resource request along
                                                 with accessor and helper methods
        (WebInspector.NetworkRequest):
        (WebInspector.NetworkRequest.prototype.resource):
        (WebInspector.NetworkRequest.prototype.hasFrames):
        (WebInspector.NetworkRequest.prototype.frameLength):
        (WebInspector.NetworkRequest.prototype.getFrame):
        (WebInspector.NetworkRequest.prototype.addFrameError):
        (WebInspector.NetworkRequest.prototype.addFrame):
        (WebInspector.NetworkRequest.prototype._pushFrame):
        * inspector/front-end/ResourceWebSocketFrameView.js: Added to help display Web Socket frame and error data.
        (WebInspector.ResourceWebSocketFrameView):
        * inspector/front-end/WebKit.qrc: Added new Web Inspector resource file.
        * inspector/front-end/inspector.html: Added new Web Inspector resource file.

2012-04-27  Nikolas Zimmermann  <nzimmermann@rim.com>

        Fix repetitions & by animation support for SVGAnimateTransformElement
        https://bugs.webkit.org/show_bug.cgi?id=85051

        Reviewed by Antti Koivisto.

        Repetitions are currently handled by adjusting percentage (percentage += repeatCount).
        This doesn't work for <animateTransform> as each repetition has to be post-multiplied to the animated transform list. Fix that.

        By-animations are equal to values="0;by" animations in SMIL. '0' is the neutral element of addition, which is the _zero_ matrix,
        not the identity matrix for SVGTransform. Add a new construction mode to SVGTransform to be able to construct zero transforms.

        Tests: svg/animations/animateTransform-accumulation-expected.svg
               svg/animations/animateTransform-accumulation.svg
               svg/animations/animateTransform-by-scale-expected.svg
               svg/animations/animateTransform-by-scale.svg
               svg/animations/animateTransform-from-by-from-to-comparision-expected.svg
               svg/animations/animateTransform-from-by-from-to-comparision.svg
               svg/animations/animateTransform-from-by-scale-additive-sum-expected.svg
               svg/animations/animateTransform-from-by-scale-additive-sum.svg
               svg/animations/animateTransform-from-by-scale-expected.svg
               svg/animations/animateTransform-from-by-scale.svg
               svg/animations/animateTransform-rotate-around-point-expected.svg
               svg/animations/animateTransform-rotate-around-point.svg
               svg/animations/animateTransform-skewX-expected.svg
               svg/animations/animateTransform-skewX.svg
               svg/animations/animateTransform-skewY-expected.svg
               svg/animations/animateTransform-skewY.svg
               svg/animations/animateTransform-translate-expected.svg
               svg/animations/animateTransform-translate.svg
               svg/animations/multiple-animateTransform-additive-sum-expected.svg
               svg/animations/multiple-animateTransform-additive-sum.svg

        * svg/SVGAnimateTransformElement.cpp:
        (WebCore::SVGAnimateTransformElement::parseAttribute):
        * svg/SVGAnimatedTransformList.cpp:
        (WebCore::SVGAnimatedTransformListAnimator::addAnimatedTypes):
        (WebCore::SVGAnimatedTransformListAnimator::calculateAnimatedValue):
        * svg/SVGAnimationElement.h:
        (WebCore::SVGAnimationElement::adjustFromToListValues):
        * svg/SVGTransform.cpp:
        (WebCore::SVGTransform::SVGTransform):
        * svg/SVGTransform.h:
        * svg/SVGTransformDistance.cpp:
        (WebCore::SVGTransformDistance::SVGTransformDistance):
        (WebCore::SVGTransformDistance::scaledDistance):
        (WebCore::SVGTransformDistance::addSVGTransforms):
        (WebCore::SVGTransformDistance::addToSVGTransform):
        (WebCore::SVGTransformDistance::distance):
        * svg/SVGTransformDistance.h:
        (SVGTransformDistance):

2012-04-27  Nikolas Zimmermann  <nzimmermann@rim.com>

        SVG Animations update baseVal instead of animVal
        https://bugs.webkit.org/show_bug.cgi?id=12437

        Reviewed by Dirk Schulze.

        Cleanup animation code, remove last remaining crufts of the old setAttribute() animation model.
        Now only two animation modes remain: animate SVG DOM animVal properties or CSS properties.

        Stop caching base values per string in SMILTimeContainer, as it breaks additive="sum" for CSS
        properties if the underlying base value is changed from the outside (eg. when calling
        style.fontSize="20px", if font-size was 10px, and we're running an additive by-animation with 50px).

        This requires us to cache the computed style of a SVGElement, without SMIL style property changes,
        in SVGElementRareData, similar to how the computed style itself is cached in ElementRareData.
        To be able to compute the base value for a CSS property at any time, we have to exclude any
        previous animation effects residing in the SMIL animated style properties, per SMIL2/3 specs.

        NOTE: This doesn't change or affect the way CSS Animations/Transitions are applied, we still
              have some bugs in that area, but this patch doesn't address them. The idea is to only
              remove the cache, to pave the way for future additive="sum" patches.

        Tests: svg/animations/change-css-property-while-animating-fill-freeze.html
               svg/animations/change-css-property-while-animating-fill-remove.html

        * dom/Element.cpp:
        (WebCore::Element::recalcStyle):
        * dom/Node.h:
        * svg/SVGAnimateElement.cpp:
        (WebCore::propertyTypesAreConsistent):
        (WebCore::SVGAnimateElement::resetToBaseValue):
        (WebCore::SVGAnimateElement::applyResultsToTarget):
        * svg/SVGAnimateElement.h:
        (SVGAnimateElement):
        * svg/SVGAnimateMotionElement.cpp:
        (WebCore::SVGAnimateMotionElement::resetToBaseValue):
        * svg/SVGAnimateMotionElement.h:
        (SVGAnimateMotionElement):
        * svg/SVGAnimationElement.cpp:
        (WebCore::applyCSSPropertyToTarget):
        (WebCore::SVGAnimationElement::setTargetAttributeAnimatedCSSValue):
        * svg/SVGAnimationElement.h:
        * svg/SVGElement.cpp:
        (WebCore::SVGElement::SVGElement):
        (WebCore::SVGElement::willRecalcStyle):
        (WebCore):
        (WebCore::SVGElement::rareSVGData):
        (WebCore::SVGElement::ensureRareSVGData):
        (WebCore::SVGElement::computedStyle):
        (WebCore::SVGElement::isAnimatableAttribute):
        * svg/SVGElement.h:
        (SVGElement):
        * svg/SVGElementRareData.h:
        (WebCore::SVGElementRareData::SVGElementRareData):
        (WebCore::SVGElementRareData::ensureAnimatedSMILStyleProperties):
        (WebCore::SVGElementRareData::destroyAnimatedSMILStyleProperties):
        (WebCore::SVGElementRareData::overrideComputedStyle):
        (WebCore::SVGElementRareData::setUseOverrideComputedStyle):
        * svg/animation/SMILTimeContainer.cpp:
        (WebCore::SMILTimeContainer::updateAnimations):
        * svg/animation/SMILTimeContainer.h:
        (SMILTimeContainer):
        * svg/animation/SVGSMILElement.h:
        (SVGSMILElement):

2012-04-26  Alexander Pavlov  <apavlov@chromium.org>

        Web Inspector: Implement the "Disable JavaScript" option in the settings dialog
        (re-landing r115323 with a fixed test.)
        https://bugs.webkit.org/show_bug.cgi?id=84946

        Based on user actions in the Inspector frontend, InspectorPageAgent invokes Settings::setScriptEnabled()
        for the associated page to switch the script execution therein.

        Reviewed by Yury Semikhatsky.

        Test: inspector/debugger/disable-script.html

        * inspector/Inspector.json:
        * inspector/InspectorPageAgent.cpp:
        (PageAgentState):
        (WebCore::InspectorPageAgent::enable):
        (WebCore::InspectorPageAgent::disable):
        (WebCore::InspectorPageAgent::getScriptExecutionStatus):
        (WebCore):
        (WebCore::InspectorPageAgent::setScriptExecutionDisabled):
        * inspector/InspectorPageAgent.h:
        * inspector/front-end/Settings.js:
        * inspector/front-end/SettingsScreen.js:
        (WebInspector.SettingsScreen):
        (WebInspector.SettingsScreen.prototype.get _updateScriptDisabledCheckbox):
        (WebInspector.SettingsScreen.prototype._javaScriptDisabledChanged):
        * inspector/front-end/inspector.js:

2012-04-26  Ryosuke Niwa  <rniwa@webkit.org>

        REGRESSION (r94497): Pressing Command+A when inline (Marked Text) is not empty will clean whole content
        https://bugs.webkit.org/show_bug.cgi?id=84501

        Reviewed by Alexey Proskuryakov.

        The bug was caused by setComposition, which is called by cancelComposition, deleting the contents when
        the passed text is empty. Fixed it by not deleting text when canceling compositions. This is okay because
        as the comment above the line suggests, this particular call to TypingCommand::deleteSelection is only useful
        when the confirmed text is empty and the composition text had previously been non-empty.

        Test: editing/input/select-all-clear-input-method.html

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

2012-04-26  Keishi Hattori  <keishi@webkit.org>

        datalist: Form control in a <datalist> should be barred from constraint validation
        https://bugs.webkit.org/show_bug.cgi?id=84359

        http://www.whatwg.org/specs/web-apps/current-work/multipage/the-button-element.html#the-datalist-element
        According to this, if an element has a datalist element ancestor, it is barred from constraint validation.

        Reviewed by Kent Tamura.

        Test: fast/forms/datalist/datalist-child-validation.html

        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLFormControlElement::HTMLFormControlElement):
        (WebCore::HTMLFormControlElement::updateAncestors): Updates the ancestor information.
        (WebCore::HTMLFormControlElement::insertedInto): Invalidates the ancestor information and calls setNeedsWillValidateCheck
        (WebCore::HTMLFormControlElement::removedFrom): Invalidates the ancestor information and calls setNeedsWillValidateCheck
        (WebCore::HTMLFormControlElement::disabled):
        (WebCore::HTMLFormControlElement::recalcWillValidate): Returns false if element has a datalist ancestor.
        (WebCore::HTMLFormControlElement::setNeedsWillValidateCheck): Check if ancestor information is valid too.
        * html/HTMLFormControlElement.h:
        (HTMLFormControlElement):

2012-04-26  Adrienne Walker  <enne@google.com>

        [chromium] Remove unused CCLayerImpl::debugID()
        https://bugs.webkit.org/show_bug.cgi?id=85019

        Reviewed by James Robinson.

        CCLayerSorter used debugID() but it was never set anywhere. Change
        the CCLayerSorter LOG messages to use id(), which does get set.

        * platform/graphics/chromium/cc/CCLayerImpl.h:
        (CCLayerImpl):
        * platform/graphics/chromium/cc/CCLayerSorter.cpp:
        (WebCore::CCLayerSorter::createGraphNodes):
        (WebCore::CCLayerSorter::createGraphEdges):
        (WebCore::CCLayerSorter::sort):

2012-04-26  Nico Weber  <thakis@chromium.org>

        [chromium] Fix C++ language use.
        https://bugs.webkit.org/show_bug.cgi?id=85015

        Reviewed by James Robinson.

        Even though MSVC allows it, a sizeof followed by a non-parenthesized
        typename is not valid C++.

        No functionality change.

        * rendering/RenderThemeChromiumWin.cpp:
        (WebCore):
        (WebCore::getNonClientMetrics):

2012-04-24  James Robinson  <jamesr@chromium.org>

        [chromium] Move ProgramBinding definitions to LayerRendererChromium and normalize naming
        https://bugs.webkit.org/show_bug.cgi?id=84808

        Reviewed by Adrienne Walker.

        The GL programs used are logically part of LayerRendererChromium and not something specific to a layer type,
        since a different renderer would want to use a different thing to render the same layer types. This moves all of
        the ProgramBinding definitions into LayerRendererChromium and gives them consistent names. With the exception of
        CCRenderSurface (noted by an inline comment), these programs are private to LRC.

        This patch also deduplicates programs a bit:
        1.) Video's NativeTexture and RGBA programs were the same thing, folded.
        2.) The TexStretch and TexTransform shaders are basically the same thing, folded together.

        * platform/graphics/chromium/LayerChromium.h:
        (LayerChromium):
        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::drawCheckerboardQuad):
        (WebCore::LayerRendererChromium::drawDebugBorderQuad):
        (WebCore::LayerRendererChromium::drawSolidColorQuad):
        (WebCore::LayerRendererChromium::drawTileQuad):
        (WebCore::LayerRendererChromium::drawYUV):
        (WebCore::LayerRendererChromium::drawRGBA):
        (WebCore::LayerRendererChromium::drawNativeTexture2D):
        (WebCore::LayerRendererChromium::drawStreamTexture):
        (WebCore::LayerRendererChromium::drawTextureQuad):
        (WebCore::LayerRendererChromium::drawHeadsUpDisplay):
        (WebCore::LayerRendererChromium::initializeSharedObjects):
        (WebCore::LayerRendererChromium::tileCheckerboardProgram):
        (WebCore::LayerRendererChromium::solidColorProgram):
        (WebCore::LayerRendererChromium::headsUpDisplayProgram):
        (WebCore::LayerRendererChromium::renderSurfaceProgram):
        (WebCore::LayerRendererChromium::renderSurfaceProgramAA):
        (WebCore::LayerRendererChromium::renderSurfaceMaskProgram):
        (WebCore::LayerRendererChromium::renderSurfaceMaskProgramAA):
        (WebCore::LayerRendererChromium::tileProgram):
        (WebCore::LayerRendererChromium::tileProgramOpaque):
        (WebCore::LayerRendererChromium::tileProgramAA):
        (WebCore::LayerRendererChromium::tileProgramSwizzle):
        (WebCore::LayerRendererChromium::tileProgramSwizzleOpaque):
        (WebCore::LayerRendererChromium::tileProgramSwizzleAA):
        (WebCore::LayerRendererChromium::textureProgramFlip):
        (WebCore::LayerRendererChromium::textureTexRectProgram):
        (WebCore::LayerRendererChromium::textureTexRectProgramFlip):
        (WebCore::LayerRendererChromium::videoRGBAProgram):
        (WebCore::LayerRendererChromium::videoYUVProgram):
        (WebCore::LayerRendererChromium::videoStreamTextureProgram):
        (WebCore::LayerRendererChromium::cleanupSharedObjects):
        * platform/graphics/chromium/LayerRendererChromium.h:
        (WebCore):
        (LayerRendererChromium):
        * platform/graphics/chromium/ShaderChromium.cpp:
        * platform/graphics/chromium/ShaderChromium.h:
        * platform/graphics/chromium/cc/CCHeadsUpDisplay.h:
        (CCHeadsUpDisplay):
        * platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:
        * platform/graphics/chromium/cc/CCLayerTreeHostImpl.h:
        (WebCore):
        * platform/graphics/chromium/cc/CCRenderSurface.cpp:
        (WebCore::CCRenderSurface::copyTextureToFramebuffer):
        (WebCore::CCRenderSurface::drawLayer):
        * platform/graphics/chromium/cc/CCRenderSurface.h:
        (CCRenderSurface):
        * platform/graphics/chromium/cc/CCSingleThreadProxy.cpp:
        * platform/graphics/chromium/cc/CCTextureLayerImpl.h:
        (CCTextureLayerImpl):
        * platform/graphics/chromium/cc/CCThreadProxy.cpp:
        * platform/graphics/chromium/cc/CCTiledLayerImpl.h:
        (CCTiledLayerImpl):
        * platform/graphics/chromium/cc/CCVideoLayerImpl.h:
        (WebCore):
        (CCVideoLayerImpl):

2012-04-26  Jeffrey Pfau  <jpfau@apple.com>

        Invalid cast in WebCore::HTMLCollection::isAcceptableElement
        https://bugs.webkit.org/show_bug.cgi?id=84626

        Reviewed by Darin Adler.

        Check if the object is an HTMLElement before casting.

        Test: fast/dom/htmlcollection-non-html.html

        * html/HTMLCollection.cpp:
        (WebCore::HTMLCollection::isAcceptableElement):

2012-04-26  Dana Jansens  <danakj@chromium.org>

        [chromium] Some background filters require inflating damage on the surface behind them
        https://bugs.webkit.org/show_bug.cgi?id=84479

        Reviewed by Adrienne Walker.

        A layer with a background blur will expand the damage from pixels in the
        surface below it. We extend the damage tracker to expand damage in a
        surface below such layers.

        Unit test: CCDamageTrackerTest.verifyDamageForBackgroundBlurredChild

        * platform/graphics/chromium/cc/CCDamageTracker.cpp:
        (WebCore::expandPixelOutsetsWithFilters):
        (WebCore):
        (WebCore::expandDamageRectInsideRectWithFilters):
        (WebCore::expandDamageRectWithFilters):
        (WebCore::CCDamageTracker::updateDamageTrackingState):
        (WebCore::CCDamageTracker::trackDamageFromActiveLayers):
        * platform/graphics/chromium/cc/CCDamageTracker.h:
        (CCDamageTracker):

2012-04-26  Simon Fraser  <simon.fraser@apple.com>

        Improve compositing logging output
        https://bugs.webkit.org/show_bug.cgi?id=85010

        Reviewed by Dean Jackson.

        In the compositing log channel output, indent the layers
        based on z-order tree depth. Tabulate the summary, and
        show obligate and secondary backing store area separately.

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateClipRects):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::RenderLayerCompositor):
        (WebCore::RenderLayerCompositor::updateCompositingLayers):
        (WebCore::RenderLayerCompositor::logLayerInfo):
        (WebCore::RenderLayerCompositor::rebuildCompositingLayerTree):
        (WebCore::RenderLayerCompositor::updateLayerTreeGeometry):
        (WebCore::RenderLayerCompositor::reasonForCompositing):
        * rendering/RenderLayerCompositor.h:
        (RenderLayerCompositor):

2012-04-26  Anders Carlsson  <andersca@apple.com>

        REGRESSION (r115163): Unable to scroll article body with trackpad on altdevblogaday.com blog post
        https://bugs.webkit.org/show_bug.cgi?id=85024
        <rdar://problem/11330758>

        Reviewed by Sam Weinig.

        Fix broken logic in canHaveScrollbars.

        * page/scrolling/ScrollingTreeNode.h:
        (WebCore::ScrollingTreeNode::canHaveScrollbars):

2012-04-24  James Robinson  <jamesr@chromium.org>

        [chromium] Use different CCDrawQuad types for textures vs IOSurfaces
        https://bugs.webkit.org/show_bug.cgi?id=84811

        Reviewed by Adrienne Walker.

        IOSurface and texture backed layers share few properties (only the flipped bool), so it doesn't make a lot of
        sense for them to use the same CCDrawQuad type for both. This splits IOSurfaces out to a dedicated quad type to
        make it easier to understand which bits of state apply to each.

        The logical next step after this is to split the layer type as well, but that will be awkward until bug 84808 is
        resolved.

        * WebCore.gypi:
        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::drawQuad):
        (WebCore::LayerRendererChromium::drawTextureQuad):
        (WebCore):
        (WebCore::LayerRendererChromium::drawIOSurfaceQuad):
        * platform/graphics/chromium/LayerRendererChromium.h:
        (LayerRendererChromium):
        * platform/graphics/chromium/cc/CCDrawQuad.cpp:
        (WebCore::CCDrawQuad::toIOSurfaceDrawQuad):
        (WebCore):
        * platform/graphics/chromium/cc/CCDrawQuad.h:
        (WebCore):
        (CCDrawQuad):
        * platform/graphics/chromium/cc/CCIOSurfaceDrawQuad.cpp: Copied from Source/WebCore/platform/graphics/chromium/cc/CCTextureDrawQuad.cpp.
        (WebCore):
        (WebCore::CCIOSurfaceDrawQuad::create):
        (WebCore::CCIOSurfaceDrawQuad::CCIOSurfaceDrawQuad):
        * platform/graphics/chromium/cc/CCIOSurfaceDrawQuad.h: Copied from Source/WebCore/platform/graphics/chromium/cc/CCTextureDrawQuad.h.
        (WebCore):
        (CCIOSurfaceDrawQuad):
        (WebCore::CCIOSurfaceDrawQuad::flipped):
        (WebCore::CCIOSurfaceDrawQuad::ioSurfaceSize):
        (WebCore::CCIOSurfaceDrawQuad::ioSurfaceTextureId):
        * platform/graphics/chromium/cc/CCTextureDrawQuad.cpp:
        (WebCore::CCTextureDrawQuad::create):
        (WebCore::CCTextureDrawQuad::CCTextureDrawQuad):
        * platform/graphics/chromium/cc/CCTextureDrawQuad.h:
        (CCTextureDrawQuad):
        * platform/graphics/chromium/cc/CCTextureLayerImpl.cpp:
        (WebCore::CCTextureLayerImpl::appendQuads):

2012-04-26  Benjamin Poulain  <bpoulain@apple.com>

        Use WebKit types for the cache of ObjcClass::methodsNamed()
        https://bugs.webkit.org/show_bug.cgi?id=85012

        Reviewed by Geoffrey Garen.

        This patch redefines the method cache ObjcClass to avoid memory allocations in the case of positive match.

        Instead of using the converted name as the key, the original identifier string is used. This shortcuts
        all the other operations when there is a match.

        A side effect is a method can appear multiple times in the cache if it is invoked with different names using
        the escape character "$". An attaquer could bloat the cache with a few hundreds strings.
        In the common case, having each name mapped is an improvment.

        * bridge/objc/objc_class.h:
        (ObjcClass):
        * bridge/objc/objc_class.mm:
        (JSC::Bindings::ObjcClass::ObjcClass):
        (JSC::Bindings::ObjcClass::methodsNamed):

2012-04-26  Ojan Vafai  <ojan@chromium.org>

        Delete dead code in Arena.h/cpp
        https://bugs.webkit.org/show_bug.cgi?id=84997

        Reviewed by Eric Seidel.

        Also cleaned up some style issues. Renamed some single-letter variable names.
        Avoided anything other than totally trivial style changes to be 100% sure
        that there is no change in behavior.

        No new tests. There's no non-style code changes except inlining CLEAR_UNUSED
        and CLEAR_ARENA.

        * platform/Arena.cpp:
        (WebCore):
        (WebCore::CeilingLog2):
        (WebCore::InitArenaPool):
        (WebCore::ArenaAllocate):
        (WebCore::FreeArenaList):
        (WebCore::FinishArenaPool):
        * platform/Arena.h:
        (WebCore):

2012-04-26  Shawn Singh  <shawnsingh@chromium.org>

        Re-implement backFaceVisibility to avoid dealing with perspective w < 0 problem
        https://bugs.webkit.org/show_bug.cgi?id=84059

        Reviewed by Adrienne Walker.

        Unit tests added to CCMathUtilTest.cpp.

        This patch changes the implementation of backFaceIsVisible so that
        it doesn't need to deal with the w < 0 problem from of perspective
        projections. Instead, it is equally correct to simply use the
        inverse-transpose of the matrix, and quickly check the third row,
        third column element. Additionally, it was appropriate to move
        this function into TransformationMatrix itself.

        Making this change fixes some issues related to disappearing
        layers in Chromium (where the compositor incorrectly thought that
        the back face was visible, and skipped the layer).

        * platform/graphics/chromium/cc/CCLayerTreeHostCommon.cpp:
        (WebCore::calculateVisibleLayerRect):
        (WebCore::layerShouldBeSkipped):
        * platform/graphics/transforms/TransformationMatrix.cpp:
        (WebCore::TransformationMatrix::isBackFaceVisible):
        (WebCore):
        * platform/graphics/transforms/TransformationMatrix.h:
        (TransformationMatrix):

2012-04-26  Martin Robinson  <mrobinson@igalia.com>

        [Cairo] Wrap cairo surfaces in a class when storing native images
        https://bugs.webkit.org/show_bug.cgi?id=83611

        Reviewed by Alejandro G. Castro.

        No new tests. This is just a refactoring. This shouldn't change
        functionality.

        Added class that wraps Cairo images surfaces to serve as the "native image"
        type for the Cairo platform. This will allow the addition of caching resampled
        images as well as versions of the image for non-image Cairo backends. Also
        split out BitmapImageCairo.cpp from ImageCairo.cpp since these classes are
        defined in two headers.

        * GNUmakefile.list.am: Added new files.
        * platform/graphics/BitmapImage.h: Added a factory method that takes an image surface to
        reduce code churn.
        * platform/graphics/ImageSource.h: NativeImagePtr is now NativeImageCairo*.
        (WebCore):
        * platform/graphics/cairo/BitmapImageCairo.cpp: Copied from Source/WebCore/platform/graphics/cairo/ImageCairo.cpp.
        * platform/graphics/cairo/GraphicsContext3DCairo.cpp: Updated to reflect use of NativeImageCairo.
        * platform/graphics/cairo/ImageCairo.cpp: Ditto.
        * platform/graphics/cairo/NativeImageCairo.cpp: Added.
        * platform/graphics/cairo/NativeImageCairo.h: Added.
        * platform/graphics/cairo/PatternCairo.cpp: Updated to reflect use of NativeImageCairo.
        * platform/graphics/gtk/ImageGtk.cpp: Ditto.
        * platform/image-decoders/cairo/ImageDecoderCairo.cpp: Ditto.

2012-04-26  Mark Hahnenberg  <mhahnenberg@apple.com>

        [GTK] Massive media tests failures since r115288
        https://bugs.webkit.org/show_bug.cgi?id=84950

        Reviewed by Filip Pizlo.

        No new tests.

        Since the "cross-platform" WebCore timer is at too high of a level in terms of the layers 
        of WebKit for JSC to use, we are not currently able to use it in JSC, thus only those 
        platforms that support CoreFoundation can currently take advantage of the new and improved 
        GC activity timer. We've restored the old code paths for those platforms that don't have 
        CF so that they will at least have the same behavior as before when calling garbageCollectSoon.

        * bindings/js/GCController.cpp: Added back the old WebCore timer along with some 
        if-defs that do away with the WebCore timer on platforms that support CoreFoundation.
        (WebCore::GCController::GCController):
        (WebCore::GCController::garbageCollectSoon):
        (WebCore):
        (WebCore::GCController::gcTimerFired):
        * bindings/js/GCController.h: Ditto.
        (GCController):

2012-04-26  Adam Klein  <adamk@chromium.org>

        Don't include V8Proxy.h in ScriptValue.h when V8GCController is all that's required
        https://bugs.webkit.org/show_bug.cgi?id=84986

        Reviewed by Kentaro Hara.

        This makes it easier to include ScriptValue.h since it greatly reduces
        that header's dependencies.

        * bindings/v8/ScriptValue.h: Changed to include just V8GCController.h and
        removed comment which is redundant with explicit V8GCController references nearby.

2012-04-26  Aaron Colwell  <acolwell@chromium.org>

        Fix missing sourceState change on MEDIA_ERR_SOURCE_NOT_SUPPORTED error.
        https://bugs.webkit.org/show_bug.cgi?id=84996

        Reviewed by Eric Carlson.

        No new tests. http/tests/media/media-source/webm/video-media-source-errors.html was updated to verify that webkitSourceState is always SOURCE_CLOSED when the onerror event fires.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::noneSupported):

2012-04-26  Antti Koivisto  <antti@apple.com>

        Cache parsed stylesheets
        https://bugs.webkit.org/show_bug.cgi?id=85004

        Reviewed by Andreas Kling.

        CSS parsing is 1-2% of WebKit CPU usage on average pages, more on sites with large stylesheets.
        We currently reparse all stylesheets from source text when they are encountered again. In many
        browsing scenarios we can eliminate lot of this by caching the parsed stylesheets. For example 
        it is very common for subpages of a site to share the stylesheets.
        
        This patch enables memory caching for stylesheet loaded using the <link> element. Only stylesheets
        that have no import rules are cacheable for now.
        
        Cached stylesheets are copied on restore so there is no sharing (and no memory wins) yet.
        In the future we will also be able to share the actual data structures between pages for 
        significant memory savings.
        
        After browsing around for a while <5% of the memory cache data was in parsed stylesheets so this
        does not bloat the cache significantly.

        * css/CSSStyleSheet.cpp:
        (WebCore):
        (WebCore::StyleSheetInternal::estimatedSizeInBytes):
        
            Estimate stylesheet size so we can handle decoded data pruning correctly.

        * css/CSSStyleSheet.h:
        (StyleSheetInternal):
        * css/StylePropertySet.cpp:
        (WebCore::StylePropertySet::averageSizeInBytes):
        (WebCore):
        * css/StylePropertySet.h:
        (StylePropertySet):
        * css/StyleRule.cpp:
        (WebCore::StyleRule::averageSizeInBytes):
        (WebCore):
        * css/StyleRule.h:
        (StyleRule):
        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::setCSSStyleSheet):
        
            Save and restore parsed stylesheet. The current CSS parse context must be identical to the cached 
            stylesheets. This ensures that the parsing results would be identical.

        * loader/cache/CachedCSSStyleSheet.cpp:
        (WebCore):
        (WebCore::CachedCSSStyleSheet::destroyDecodedData):
        (WebCore::CachedCSSStyleSheet::restoreParsedStyleSheet):
        (WebCore::CachedCSSStyleSheet::saveParsedStyleSheet):
        * loader/cache/CachedCSSStyleSheet.h:
        
            The parsed stylesheet cache is considered decoded data, similar to the image bitmaps. It uses the
            same mechanism for pruning.

        (WebCore):
        (CachedCSSStyleSheet):

2012-04-26  Anders Carlsson  <andersca@apple.com>

        A TileCache should never outlive its WebTileCacheLayer
        https://bugs.webkit.org/show_bug.cgi?id=85008
        <rdar://problem/11141172>

        Reviewed by Andreas Kling.

        Since WebTileCacheLayer objects can be destroyed on the scrolling thread, make sure to delete the TileCache layer
        when the PlatformCALayer is destroyed. This fixes a crash when the tile revalidation timer fires after the WebTileCacheLayer has
        been destroyed, but before the TileCache itself has been destroyed.

        * platform/graphics/ca/mac/PlatformCALayerMac.mm:
        (PlatformCALayer::~PlatformCALayer):
        * platform/graphics/ca/mac/WebTileCacheLayer.h:
        * platform/graphics/ca/mac/WebTileCacheLayer.mm:
        (-[WebTileCacheLayer dealloc]):
        (-[WebTileCacheLayer invalidate]):

2012-04-26  Benjamin Poulain  <bpoulain@apple.com>

        Use String instead of RefPtr<StringImpl> for the cache of ObjcClass
        https://bugs.webkit.org/show_bug.cgi?id=84932

        Reviewed by Andreas Kling.

        The cache with RefPtr<StringImpl*> was added with r115007.

        This patch aims at making the code a little easier to read. By using String,
        one would not need to know the Traits for StringImpl.

        * bridge/objc/objc_class.h:
        (ObjcClass):

2012-04-26  Kentaro Hara  <haraken@chromium.org>

        [V8] Pass Isolate to wrap() in SerializedScriptValue.cpp
        https://bugs.webkit.org/show_bug.cgi?id=84923

        Reviewed by Nate Chapin.

        The objective is to pass Isolate around in V8 bindings.
        In this bug we pass Isolate to wrap() in SerializedScriptValue.cpp.

        No tests. No change in behavior.

        * bindings/v8/SerializedScriptValue.cpp:

2012-04-26  Hao Zheng  <zhenghao@chromium.org>

        [chromium] Complex text support for Android.
        https://bugs.webkit.org/show_bug.cgi?id=84431

        Complex text support is different on Android from other platforms.
        There are 2 kinds of font on Android: system fonts and fallback fonts.
        System fonts have a name, and are accessible in FontPlatformData.
        Fallback fonts do not have specific names, so they are not accessible
        from WebKit directly. There is one font for each script support.
        To feed Harfbuzz, use a trick to get correct SkTypeface based on script.

        Reviewed by Tony Chang.

        No new tests. Current tests are runnable on Android.

        * platform/graphics/FontCache.h:
        (FontCache): Make ComplexTextController friend of FontCache on Android.
        * platform/graphics/chromium/FontCacheAndroid.cpp:
        (WebCore::FontCache::createFontPlatformData):
        * platform/graphics/harfbuzz/ComplexTextControllerHarfBuzz.cpp:
        (WebCore::ComplexTextController::getComplexFontPlatformData):
        (WebCore):
        (WebCore::ComplexTextController::setupFontForScriptRun):
        * platform/graphics/harfbuzz/ComplexTextControllerHarfBuzz.h:
        (ComplexTextController):

2012-04-26  Kentaro Hara  <haraken@chromium.org>

        [V8] Pass Isolate to wrap() (Part2)
        https://bugs.webkit.org/show_bug.cgi?id=84922

        Reviewed by Nate Chapin.

        The objective is to pass Isolate around in V8 bindings.
        This patch passes Isolate to wrap() in custom bindings.

        No tests. No change in behavior.

        * bindings/v8/custom/V8LocationCustom.cpp:
        (WebCore::toV8):
        * bindings/v8/custom/V8NamedNodeMapCustom.cpp:
        (WebCore::toV8):
        * bindings/v8/custom/V8SVGPathSegCustom.cpp:
        (WebCore::toV8):
        * bindings/v8/custom/V8StyleSheetCustom.cpp:
        (WebCore::toV8):
        * bindings/v8/custom/V8Uint16ArrayCustom.cpp:
        (WebCore::toV8):
        * bindings/v8/custom/V8Uint32ArrayCustom.cpp:
        (WebCore::toV8):
        * bindings/v8/custom/V8Uint8ArrayCustom.cpp:
        (WebCore::toV8):
        * bindings/v8/custom/V8Uint8ClampedArrayCustom.cpp:
        (WebCore::toV8):

2012-04-26  Jon Lee  <jonlee@apple.com>

        [WK2] AlternativeTextClient leaks when the page is destroyed
        https://bugs.webkit.org/show_bug.cgi?id=84307
        <rdar://problem/11328431>

        Reviewed by Enrica Casucci.

        * page/AlternativeTextClient.h: Add pageDestroyed() call, as in EditorClient.
        (AlternativeTextClient):
        * page/Page.cpp:
        (WebCore::Page::~Page): When the page is destroyed, notify the client if it exists.

2012-04-26  Kentaro Hara  <haraken@chromium.org>

        [V8] Pass Isolate to wrap() (Part1)
        https://bugs.webkit.org/show_bug.cgi?id=84921

        Reviewed by Nate Chapin.

        The objective is to pass Isolate around in V8 bindings.
        This patch passes Isolate to wrap() in custom bindings.

        No tests. No change in behavior.

        * bindings/v8/custom/V8BlobCustom.cpp:
        (WebCore::toV8):
        * bindings/v8/custom/V8CSSRuleCustom.cpp:
        (WebCore::toV8):
        * bindings/v8/custom/V8CSSStyleSheetCustom.cpp:
        (WebCore::toV8):
        * bindings/v8/custom/V8CSSValueCustom.cpp:
        (WebCore::toV8):
        * bindings/v8/custom/V8DOMStringMapCustom.cpp:
        (WebCore::toV8):
        * bindings/v8/custom/V8DOMTokenListCustom.cpp:
        (WebCore::toV8):
        * bindings/v8/custom/V8DataViewCustom.cpp:
        (WebCore::toV8):
        * bindings/v8/custom/V8EventCustom.cpp:
        (WebCore::toV8):
        * bindings/v8/custom/V8Float32ArrayCustom.cpp:
        (WebCore::toV8):
        * bindings/v8/custom/V8Float64ArrayCustom.cpp:
        (WebCore::toV8):
        * bindings/v8/custom/V8HTMLCollectionCustom.cpp:
        (WebCore::toV8):
        * bindings/v8/custom/V8ImageDataCustom.cpp:
        (WebCore::toV8):
        * bindings/v8/custom/V8Int16ArrayCustom.cpp:
        (WebCore::toV8):
        * bindings/v8/custom/V8Int32ArrayCustom.cpp:
        (WebCore::toV8):
        * bindings/v8/custom/V8Int8ArrayCustom.cpp:
        (WebCore::toV8):

2012-04-26  Benjamin Poulain  <bpoulain@apple.com>

        ObjcClass::methodsNamed() can leak if buffer is dynamically allocated
        https://bugs.webkit.org/show_bug.cgi?id=84668

        Reviewed by Alexey Proskuryakov.

        Change ObjcClass::methodsNamed() to be based on a vector instead of managing
        the memory manually.

        Tests: platform/mac/plugins/bindings-objc-long-method-name.html
               platform/mac/plugins/bindings-objc-method-name-conversion.html

        * bridge/objc/objc_class.mm:
        (Bindings):
        (JSC::Bindings::convertJSMethodNameToObjc):
        (JSC::Bindings::ObjcClass::methodsNamed):

2012-04-26  Justin Novosad  <junov@chromium.org>

        [Chromium] Single buffered canvas layers with the threaded compositor
        https://bugs.webkit.org/show_bug.cgi?id=80540

        Reviewed by James Robinson.

        Tests:
        CCLayerTreeHostTestWriteLayersRedraw
        CCLayerTreeHostTestWriteLayersAfterVisible
        Canvas2DLayerChromiumTest.testFullLifecycleSingleThreadDeferred
        Canvas2DLayerChromiumTest.testFullLifecycleThreadDeferred
        CCSchedulerTest.VisibilitySwitchWithTextureAcquisition
        CCSchedulerTest.TextureAcquisitionCollision

        Disable double buffering and rate limiting on accelerated canvas
        when the threaded compositor and deferred canvas are enabled.
        Concurrent access to the layer texture by the main renderer thread and
        the compositor thread is avoided by enforcing a lock. The state of the
        lock is maintained by CCSchedulerStateMachine. Write access by the main
        thread is acquired through a signal round trip to the compositor thread,
        which may block the main thread in the event that one or more committed
        layers need to be protected until the compositor completes the requested
        draw. Draws on the impl thread are cancelled if the main thread has
        obtained write access to the texture.  The write access is relinquished
        by the main thread upon commit completion.  The scheduler state machine
        is responsible for preventing the texture lock from causing deadlocks by
        detecting and resolving problematic states.

        * platform/graphics/chromium/Canvas2DLayerChromium.cpp:
        (WebCore::Canvas2DLayerChromium::create):
        (WebCore::Canvas2DLayerChromium::Canvas2DLayerChromium):
        (WebCore::Canvas2DLayerChromium::~Canvas2DLayerChromium):
        (WebCore::Canvas2DLayerChromium::drawingIntoImplThreadTexture):
        (WebCore):
        (WebCore::Canvas2DLayerChromium::setTextureId):
        (WebCore::Canvas2DLayerChromium::setNeedsDisplayRect):
        (WebCore::Canvas2DLayerChromium::update):
        (WebCore::Canvas2DLayerChromium::layerWillDraw):
        (WebCore::Canvas2DLayerChromium::pushPropertiesTo):
        * platform/graphics/chromium/Canvas2DLayerChromium.h:
        * platform/graphics/chromium/cc/CCLayerTreeHost.cpp:
        (WebCore::CCLayerTreeHost::acquireLayerTextures):
        (WebCore):
        * platform/graphics/chromium/cc/CCLayerTreeHost.h:
        (CCLayerTreeHost):
        * platform/graphics/chromium/cc/CCProxy.h:
        (CCProxy):
        * platform/graphics/chromium/cc/CCScheduler.cpp:
        (WebCore::CCScheduler::setMainThreadNeedsLayerTextures):
        (WebCore):
        (WebCore::CCScheduler::processScheduledActions):
        * platform/graphics/chromium/cc/CCScheduler.h:
        (CCSchedulerClient):
        (CCScheduler):
        * platform/graphics/chromium/cc/CCSchedulerStateMachine.cpp:
        (WebCore::CCSchedulerStateMachine::CCSchedulerStateMachine):
        (WebCore::CCSchedulerStateMachine::drawSuspendedUntilCommit):
        (WebCore):
        (WebCore::CCSchedulerStateMachine::scheduledToDraw):
        (WebCore::CCSchedulerStateMachine::shouldDraw):
        (WebCore::CCSchedulerStateMachine::shouldAcquireLayerTexturesForMainThread):
        (WebCore::CCSchedulerStateMachine::nextAction):
        (WebCore::CCSchedulerStateMachine::updateState):
        (WebCore::CCSchedulerStateMachine::setMainThreadNeedsLayerTextures):
        * platform/graphics/chromium/cc/CCSchedulerStateMachine.h:
        (CCSchedulerStateMachine):
        * platform/graphics/chromium/cc/CCSingleThreadProxy.h:
        * platform/graphics/chromium/cc/CCThreadProxy.cpp:
        (WebCore::CCThreadProxy::CCThreadProxy):
        (WebCore::CCThreadProxy::beginFrame):
        (WebCore::CCThreadProxy::scheduledActionDrawAndSwapInternal):
        (WebCore):
        (WebCore::CCThreadProxy::acquireLayerTextures):
        (WebCore::CCThreadProxy::acquireLayerTexturesForMainThreadOnImplThread):
        (WebCore::CCThreadProxy::scheduledActionAcquireLayerTexturesForMainThread):
        * platform/graphics/chromium/cc/CCThreadProxy.h:
        (CCThreadProxy):
        * platform/graphics/skia/ImageBufferSkia.cpp:
        (WebCore):
        (WebCore::AcceleratedDeviceContext::AcceleratedDeviceContext):
        (WebCore::AcceleratedDeviceContext::prepareForDraw):
        (AcceleratedDeviceContext):
        (WebCore::createAcceleratedCanvas):
        (WebCore::ImageBuffer::context):

2012-04-26  Kentaro Hara  <haraken@chromium.org>

        [V8] Pass Isolate to toV8() in SerializedScriptValue.cpp
        https://bugs.webkit.org/show_bug.cgi?id=84918

        Reviewed by Nate Chapin.

        This is the last step to pass Isolate around in
        SerializedScriptValue.cpp. This patch passes Isolate
        to toV8().

        No tests. No change in behavior.

        * bindings/v8/SerializedScriptValue.cpp:

2012-04-26  Kentaro Hara  <haraken@chromium.org>

        [V8] Pass Isolate to wrapSlow()
        https://bugs.webkit.org/show_bug.cgi?id=84919

        Reviewed by Nate Chapin.

        The objective is to pass Isolate around in V8 bindings.
        In this bug, we pass Isolate to wrapSlow().

        Test: bindings/scripts/test/TestObj.idl etc

        * bindings/scripts/CodeGeneratorV8.pm: Modified as described above.
        (GenerateHeader):
        (GenerateToV8Converters):

        * bindings/scripts/test/V8/V8Float64Array.cpp: Updated run-bindings-tests.
        (WebCore::V8Float64Array::wrapSlow):
        * bindings/scripts/test/V8/V8Float64Array.h:
        (V8Float64Array):
        (WebCore::V8Float64Array::wrap):
        * bindings/scripts/test/V8/V8TestActiveDOMObject.cpp:
        (WebCore::V8TestActiveDOMObject::wrapSlow):
        * bindings/scripts/test/V8/V8TestActiveDOMObject.h:
        (V8TestActiveDOMObject):
        (WebCore::V8TestActiveDOMObject::wrap):
        * bindings/scripts/test/V8/V8TestCustomNamedGetter.cpp:
        (WebCore::V8TestCustomNamedGetter::wrapSlow):
        * bindings/scripts/test/V8/V8TestCustomNamedGetter.h:
        (V8TestCustomNamedGetter):
        (WebCore::V8TestCustomNamedGetter::wrap):
        * bindings/scripts/test/V8/V8TestEventConstructor.cpp:
        (WebCore::V8TestEventConstructor::wrapSlow):
        * bindings/scripts/test/V8/V8TestEventConstructor.h:
        (V8TestEventConstructor):
        (WebCore::V8TestEventConstructor::wrap):
        * bindings/scripts/test/V8/V8TestEventTarget.cpp:
        (WebCore::V8TestEventTarget::wrapSlow):
        * bindings/scripts/test/V8/V8TestEventTarget.h:
        (V8TestEventTarget):
        (WebCore::V8TestEventTarget::wrap):
        * bindings/scripts/test/V8/V8TestInterface.cpp:
        (WebCore::V8TestInterface::wrapSlow):
        * bindings/scripts/test/V8/V8TestInterface.h:
        (V8TestInterface):
        (WebCore::V8TestInterface::wrap):
        * bindings/scripts/test/V8/V8TestMediaQueryListListener.cpp:
        (WebCore::V8TestMediaQueryListListener::wrapSlow):
        * bindings/scripts/test/V8/V8TestMediaQueryListListener.h:
        (V8TestMediaQueryListListener):
        (WebCore::V8TestMediaQueryListListener::wrap):
        * bindings/scripts/test/V8/V8TestNamedConstructor.cpp:
        (WebCore::V8TestNamedConstructor::wrapSlow):
        * bindings/scripts/test/V8/V8TestNamedConstructor.h:
        (V8TestNamedConstructor):
        (WebCore::V8TestNamedConstructor::wrap):
        * bindings/scripts/test/V8/V8TestNode.cpp:
        (WebCore::V8TestNode::wrapSlow):
        * bindings/scripts/test/V8/V8TestNode.h:
        (V8TestNode):
        (WebCore::V8TestNode::wrap):
        * bindings/scripts/test/V8/V8TestObj.cpp:
        (WebCore::V8TestObj::wrapSlow):
        * bindings/scripts/test/V8/V8TestObj.h:
        (V8TestObj):
        (WebCore::V8TestObj::wrap):
        * bindings/scripts/test/V8/V8TestSerializedScriptValueInterface.cpp:
        (WebCore::V8TestSerializedScriptValueInterface::wrapSlow):
        * bindings/scripts/test/V8/V8TestSerializedScriptValueInterface.h:
        (V8TestSerializedScriptValueInterface):
        (WebCore::V8TestSerializedScriptValueInterface::wrap):

2012-04-25  Antonio Gomes  <agomes@rim.com>

        Add ScrollAnimatorBlackBerry as an extension to ScrollAnimatorNone
        https://bugs.webkit.org/show_bug.cgi?id=84625

        Reviewed by Anders Carlsson.

        Patch adds ScrollAnimatorBlackBerry class as an extension to of
        ScrollAnimatorNone. The main goal here is extending the later to allow
        overscrolling while the animation runs.

        Once the animation finishes, the flag gets reseted and
        ScrollableArea::constrainsScrollingtoContentEdge is set back to the value
        it had before, so this method has to be explicitly called anytime it is wanted.

        * CMakeLists.txt:
        * platform/ScrollAnimator.h:
        (WebCore::ScrollAnimator::animationWillStart):
        (WebCore::ScrollAnimator::animationDidFinish):
        (ScrollAnimator):
        * platform/ScrollAnimatorNone.cpp:
        (WebCore):
        (WebCore::ScrollAnimatorNone::scroll):
        (WebCore::ScrollAnimatorNone::animationTimerFired):
        * platform/blackberry/ScrollAnimatorBlackBerry.cpp: Added.
        (WebCore):
        (WebCore::ScrollAnimator::create):
        (WebCore::ScrollAnimatorBlackBerry::ScrollAnimatorBlackBerry):
        (WebCore::ScrollAnimatorBlackBerry::animationWillStart):
        (WebCore::ScrollAnimatorBlackBerry::animationDidFinish):
        (WebCore::ScrollAnimatorBlackBerry::setDisableConstrainsScrollingToContentEdgeWhileAnimating):
        * platform/blackberry/ScrollAnimatorBlackBerry.h: Added.
        (WebCore):
        (ScrollAnimatorBlackBerry):

2012-04-26  Antonio Gomes  <agomes@rim.com>

        [BlackBerry] Add smooth_scrolling options to CMAKE and enable it for Blackberry
        https://bugs.webkit.org/show_bug.cgi?id=84954

        Reviewed by Daniel Bates.

        Add the default scroll animator to the build system (ScrollAnimatorNone.cpp)

        * CMakeLists.txt:

2012-04-25  Antonio Gomes  <agomes@rim.com>

        Make ScrollView::scrollSize scrollbar-independent
        https://bugs.webkit.org/show_bug.cgi?id=84873

        Reviewed by Anders Carlsson.

        For ports that disable scrollbars creation at FrameView creation time
        ScrollView::scrollSize should still return the scrollable ammount of
        content (if any) if scrolling is not prohibted.

        No new test, but it makes ScrollAnimator work for the BlackBerry port.

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

2012-04-25  Anders Carlsson  <andersca@apple.com>

        The tile cache should know if a frame view can ever have scrollbars
        https://bugs.webkit.org/show_bug.cgi?id=84888

        Reviewed by Andreas Kling.

        If a frame view has overflow: hidden on its body element we know that the document will most
        likely never be scrolled. The tile cache should know about this so we can optimize.

        * page/FrameView.cpp:
        (WebCore::FrameView::performPostLayoutTasks):
        * platform/graphics/TiledBacking.h:
        (TiledBacking):
        * platform/graphics/ca/mac/TileCache.h:
        (TileCache):
        * platform/graphics/ca/mac/TileCache.mm:
        (WebCore::TileCache::TileCache):
        (WebCore::TileCache::setCanHaveScrollbars):
        (WebCore):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::RenderLayerBacking):

2012-04-26  Ken Buchanan  <kenrb@chromium.org>

        Crash from removal of line break object after layout
        https://bugs.webkit.org/show_bug.cgi?id=75461

        Reviewed by David Hyatt.

        There is a condition where objects can get removed from underneath
        inlines while they represent a line break object in a RootInlineBox
        of an ancestor block. If an intermediary inline has already been
        marked as needing layout, then the line box will not get dirtied
        because dirtyLineFromChangedChild thinks it already has been.

        This patch introduces a new set in RenderObject to indicate whether
        an ancestral line box corresponding to the current line has been
        marked dirty or not. dirtyLinesFromChangedChild() can use this set 
        rather than m_selfNeedsLayout, so it will not be confused if a
        container was dirtied for some other reason that did not affect the
        line box.

        * rendering/RenderLineBoxList.cpp:
        (WebCore::RenderLineBoxList::dirtyLinesFromChangedChild): Use the new
        set rather than m_selfNeedsLayout in the container to determine
        whether to continue propagating upward.
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::s_ancestorLineboxDirtySet): Instantiate the
        static member.
        (WebCore::RenderObject::willBeDestroyed): Clears the object from the
        linebox set when it is being destroyed.
        * rendering/RenderObject.h:
        (WebCore::RenderObject::s_ancestorLineboxDirtySet): Added static
        member set.
        (WebCore::RenderObject::setNeedsLayout): Clears the
        object from the linebox set when layout bits are getting cleared.
        (WebCore::RenderObject::ancestorLineBoxDirty): Added.
        (WebCore::RenderObject::setAncestorLineBoxDirty): Added.

2012-04-26  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL] Enable VIDEO_TRACK feature
        https://bugs.webkit.org/show_bug.cgi?id=84830

        Reviewed by Gustavo Noronha Silva.

        Enable support for VIDEO_TRACK feature by default for EFL port.

        * UseJSC.cmake:
        * bindings/generic/RuntimeEnabledFeatures.cpp:
        (WebCore):

2012-04-26  Antti Koivisto  <antti@apple.com>

        Implement StyleSheetInternal copying
        https://bugs.webkit.org/show_bug.cgi?id=84969

        Reviewed by Andreas Kling.

        We need to be able to copy stylesheets to cache them. Copying is already implement for
        most of the stylesheet data types but StyleSheetInternal::copy() is still missing.
        
        Preparation for stylesheet caching. The copying code is not used yet.

        * css/CSSNamespace.h:
        
            Instead of making it copyable, remove CSSNamespace class.
    
        * css/CSSParser.cpp:
        (WebCore::operator==):
        (WebCore):
        (WebCore::CSSParser::addNamespace):
        
            Avoid ping-ponging to StyleSheetInternal and back to set the default namespace.

        * css/CSSParserMode.h:
        (WebCore):
        (WebCore::operator!=):

            Add equality comparison operator to CSSParseMode. This will be needed to determine
            if a cached copy can be used.
            
        * css/CSSStyleSheet.cpp:
        (WebCore::StyleSheetInternal::StyleSheetInternal):
        (WebCore):
        (WebCore::StyleSheetInternal::isCacheable):
        (WebCore::StyleSheetInternal::parserAddNamespace):
        (WebCore::StyleSheetInternal::determineNamespace):
        
            Use HashMap instead of iterating a linked list of CSSNamespaces.

        (WebCore::StyleSheetInternal::styleSheetChanged):
        
            Add mutation bit.

        * css/CSSStyleSheet.h:
        (WebCore):
        (StyleSheetInternal):
        (WebCore::StyleSheetInternal::copy):
        
            Copy constructor. It only usable for cacheable stylesheets.

2012-04-26  Philip Rogers  <pdr@google.com>

        Fix Skia's SkPathContainsPoint to work with sub-pixel accuracy
        https://bugs.webkit.org/show_bug.cgi?id=84117

        Reviewed by Eric Seidel.

        Because we do hit testing in object-space (i.e., we may see a 0.1px*0.1px path) we
        need to support sub-pixel hit testing in Skia. Skia does not provide analytical
        path hit testing, so hit tests are done by rasterizing a path and checking if a
        specific pixel is drawn. SkPathContainsPoint did not work with sub-pixel values
        because this rasterization was sometimes very small which did not give enough
        resolution to check if the hit test pixel was drawn.

        This patch scales the path to a very large size during hit testing so that Skia's
        raster-based hit testing will work properly. Because Skia avoids unnecessary
        path rasterization, this is actually inexpensive.

        Below is a summary of a performance test on simple and complex paths:
                                                 (before patch, after patch)
        Skia/Chrome 10,000 hit tests on a simple path:  (229ms, 238ms)
        Skia/Chrome 10,000 hit tests on a complex path: (701ms, 704ms)
        For comparison, CG/Safari takes 236ms on the simple path and 466ms on the complex path.
 
        Therefore, this patch introduces small but measurable regression in hit testing
        performance due to scaling the path.

        Test: svg/hittest/svg-small-path.xhtml

        * platform/graphics/skia/SkiaUtils.cpp:
        (WebCore::SkPathContainsPoint):

2012-04-26  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r115323.
        http://trac.webkit.org/changeset/115323
        https://bugs.webkit.org/show_bug.cgi?id=84975

        Bad test, breaks all builds (Requested by apavlov1 on
        #webkit).

        * inspector/Inspector.json:
        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::enable):
        (WebCore::InspectorPageAgent::disable):
        * inspector/InspectorPageAgent.h:
        * inspector/front-end/Settings.js:
        * inspector/front-end/SettingsScreen.js:
        (WebInspector.SettingsScreen):
        * inspector/front-end/inspector.js:

2012-04-26  Douglas Stockwell  <dstockwell@chromium.org>

        IndexedDB: cursor does not correctly iterate over keys added and removed during iteration
        https://bugs.webkit.org/show_bug.cgi?id=84467

        Reviewed by Ojan Vafai.

        Ensure that the iterator over the tree of cached adds/removes always points at
        the current key, or if the db iterator is current, the next key:
        
        - When refreshing the tree iterator after a mutation, always seek unless the
        tree iterator is current.
        
        - When handing conflicts and delete markers, only advance the tree iterator as
        far as the db iterator.
        
        Remove the expensive (and now redundant) logic that issued a get() to check
        whether an item had been deleted.

        Test: storage/indexeddb/cursor-added-bug.html

        * Modules/indexeddb/IDBLevelDBBackingStore.cpp:
        (WebCore):
        * platform/leveldb/LevelDBTransaction.cpp:
        (WebCore::LevelDBTransaction::TransactionIterator::refreshTreeIterator):
        (WebCore::LevelDBTransaction::TransactionIterator::handleConflictsAndDeletes):

2012-04-26  Alexander Pavlov  <apavlov@chromium.org>

        Web Inspector: Implement the "Disable JavaScript" option in the settings dialog
        https://bugs.webkit.org/show_bug.cgi?id=84946

        Based on user actions in the Inspector frontend, InspectorPageAgent invokes Settings::setScriptEnabled()
        for the associated page to switch the script execution therein.

        Reviewed by Yury Semikhatsky.

        Test: inspector/debugger/disable-script.html

        * inspector/Inspector.json:
        * inspector/InspectorPageAgent.cpp:
        (PageAgentState):
        (WebCore::InspectorPageAgent::enable):
        (WebCore::InspectorPageAgent::disable):
        (WebCore::InspectorPageAgent::getScriptExecutionStatus):
        (WebCore):
        (WebCore::InspectorPageAgent::setScriptExecutionDisabled):
        * inspector/InspectorPageAgent.h:
        * inspector/front-end/Settings.js:
        * inspector/front-end/SettingsScreen.js:
        (WebInspector.SettingsScreen):
        (WebInspector.SettingsScreen.prototype.get _updateScriptDisabledCheckbox):
        (WebInspector.SettingsScreen.prototype._javaScriptDisabledChanged):
        * inspector/front-end/inspector.js:

2012-04-26  Dominik Röttsches  <dominik.rottsches@linux.intel.com>

        [cairo] CairoGraphicsContext fillRect (with Color) overrides composite operator
        https://bugs.webkit.org/show_bug.cgi?id=84848

        Reviewed by Martin Robinson.

        FillRectWithColor used to be called fillRectSourceOver before r89314
        where this operator still made sense. The way this function is used
        these days doesn't expect the composite operator to be overridden anymore.

        No new tests, covered by existing tests, e.g.
        svg/filters/feDropShadow.svg

        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::fillRectWithColor):

2012-04-26  Nikolas Zimmermann  <nzimmermann@rim.com>

        Fix additive by animations for most SMIL list types
        https://bugs.webkit.org/show_bug.cgi?id=84968

        Reviewed by Antti Koivisto.

        Unify SMIL list animation code, to correctly respect the underlying from value for by-animations.
        Add lots of new tests covering by-animations for all primitives (except AnimatedPath/TransformList).
        AnimatedTransformList is not working correctly yet, and will be covered in a follow-up patch.
        AnimatdPath by-animations are complex, and thus also handled in another follow-up patch.

        Tests: svg/animations/additive-type-by-animation.html
               svg/animations/length-list-animation-expected.svg
               svg/animations/length-list-animation.svg
               svg/animations/svglength-additive-by-1.html
               svg/animations/svglength-additive-by-2.html
               svg/animations/svglength-additive-by-3.html
               svg/animations/svglength-additive-by-4.html
               svg/animations/svglength-additive-by-5.html
               svg/animations/svglength-additive-by-6.html
               svg/animations/svglength-additive-from-by-1.html
               svg/animations/svglength-additive-from-by-2.html
               svg/animations/svglength-additive-from-by-3.html
               svg/animations/svglength-additive-from-by-4.html

        * svg/SVGAnimatedLengthList.cpp:
        (WebCore::SVGAnimatedLengthListAnimator::addAnimatedTypes):
        (WebCore::SVGAnimatedLengthListAnimator::calculateAnimatedValue):
        * svg/SVGAnimatedNumberList.cpp:
        (WebCore::SVGAnimatedNumberListAnimator::addAnimatedTypes):
        (WebCore::SVGAnimatedNumberListAnimator::calculateAnimatedValue):
        * svg/SVGAnimatedPointList.cpp:
        (WebCore::SVGAnimatedPointListAnimator::addAnimatedTypes):
        (WebCore::SVGAnimatedPointListAnimator::calculateAnimatedValue):
        * svg/SVGAnimationElement.h:
        (WebCore::SVGAnimationElement::adjustFromToListValues):

2012-04-26  Antti Koivisto  <antti@apple.com>

        Add copy constructor to CSSSelector
        https://bugs.webkit.org/show_bug.cgi?id=84956

        Reviewed by Anders Carlsson.

        To copy CSSSelectorLists correctly CSSSelector needs a copy constructor.
        
        This will be needed to implement stylesheet caching. The code is not used yet.

        * css/CSSSelector.cpp:
        (WebCore::CSSSelector::createRareData):
        * css/CSSSelector.h:
        (CSSSelector):
        (WebCore::CSSSelector::RareData::create):
        (RareData):
        
            Refcount RareData to make copying easier. This has no significant memory impact, rare data is rare.

        (WebCore::CSSSelector::CSSSelector):
        (WebCore):
        (WebCore::CSSSelector::~CSSSelector):
        * css/CSSSelectorList.cpp:
        (WebCore::CSSSelectorList::CSSSelectorList):
        
            Use copy constructor instead of memcpy (which doesn't work).

2012-04-26  Raphael Kubo da Costa  <rakuco@webkit.org>

        [EFL] Fix the build with DRAG_SUPPORT disabled.
        https://bugs.webkit.org/show_bug.cgi?id=84963

        Reviewed by Antonio Gomes.

        No new tests, build system-related change.

        EventHandlerEfl.cpp always assumed DRAG_SUPPORT was enabled and lacked
        the proper #if ENABLED() checks for some member variables and methods
        conditionally defined in EventHandler.h.

        * page/efl/EventHandlerEfl.cpp:
        (WebCore):

2012-04-26  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: remove stackTrace property from requestWillBeSent - it is already a part of the initiator.
        https://bugs.webkit.org/show_bug.cgi?id=84964

        Reviewed by Yury Semikhatsky.

        * inspector/InspectorResourceAgent.cpp:
        (WebCore::InspectorResourceAgent::willSendRequest):
        * inspector/front-end/ConsoleMessage.js:
        (WebInspector.ConsoleMessageImpl.prototype._formatMessage):
        * inspector/front-end/NetworkManager.js:
        (WebInspector.NetworkDispatcher.prototype.requestWillBeSent):
        (WebInspector.NetworkDispatcher.prototype.requestServedFromMemoryCache):
        (WebInspector.NetworkDispatcher.prototype._appendRedirect):
        (WebInspector.NetworkDispatcher.prototype._createNetworkRequest):
        (get WebInspector):

2012-04-26  Stephen Chenney  <schenney@chromium.org>

        SVG FEConvolveMatrix does not check for invalid property values
        https://bugs.webkit.org/show_bug.cgi?id=84363

        Reviewed by Dirk Schulze.

        Adding code to check for valid input values on SVG feConvolveMatrix properties.
        And adding some of the first effective error reporting for SVG elements.

        Tests: svg/filters/feConvolveMatrix-invalid-targetX-expected.svg
               svg/filters/feConvolveMatrix-invalid-targetX.svg
               svg/filters/feConvolveMatrix-invalid-targetY-expected.svg
               svg/filters/feConvolveMatrix-invalid-targetY.svg
               svg/filters/feConvolveMatrix-negative-kernelUnitLengthX-expected.svg
               svg/filters/feConvolveMatrix-negative-kernelUnitLengthX.svg
               svg/filters/feConvolveMatrix-negative-kernelUnitLengthY-expected.svg
               svg/filters/feConvolveMatrix-negative-kernelUnitLengthY.svg
               svg/filters/feConvolveMatrix-negative-orderX-expected.svg
               svg/filters/feConvolveMatrix-negative-orderX.svg
               svg/filters/feConvolveMatrix-negative-orderY-expected.svg
               svg/filters/feConvolveMatrix-negative-orderY.svg
               svg/filters/feConvolveMatrix-non-integral-order-expected.svg
               svg/filters/feConvolveMatrix-non-integral-order.svg
               svg/filters/feConvolveMatrix-zero-divisor-expected.svg
               svg/filters/feConvolveMatrix-zero-divisor.svg

        * platform/graphics/filters/FEConvolveMatrix.cpp:
        (WebCore::FEConvolveMatrix::FEConvolveMatrix):
        (WebCore::FEConvolveMatrix::setKernelSize):
        (WebCore::FEConvolveMatrix::setDivisor):
        (WebCore::FEConvolveMatrix::setKernelUnitLength):
        * svg/SVGFEConvolveMatrixElement.cpp:
        (WebCore::SVGFEConvolveMatrixElement::parseAttribute):
        (WebCore::SVGFEConvolveMatrixElement::build):

2012-04-26  Allan Sandfeld Jensen  <allan.jensen@nokia.com>

        Move WebKit1 specific conversion of touch-events to WebKit1.
        https://bugs.webkit.org/show_bug.cgi?id=84951

        Reviewed by Kenneth Rohde Christiansen.

        No change in functionality. No new tests. 

        * Target.pri:
        * platform/PlatformTouchEvent.h:
        (PlatformTouchEvent):
        * platform/PlatformTouchPoint.h:
        (PlatformTouchPoint):
        * platform/qt/PlatformTouchEventQt.cpp: Removed.
        * platform/qt/PlatformTouchPointQt.cpp: Removed.

2012-04-26  Nikolas Zimmermann  <nzimmermann@rim.com>

        Share code used to animate numbers types between all animators
        https://bugs.webkit.org/show_bug.cgi?id=84945

        Reviewed by Antti Koivisto.

        Refactor animateAdditiveNumber() from SVGAnimatedNumberAnimator into SVGAnimationElement,
        to reuse it for all primitives. Converted most primitives to use the new code. Lists, paths,
        colors are still todo.

        Doesn't affect any tests.

        * svg/SVGAnimatedAngle.cpp:
        (WebCore::SVGAnimatedAngleAnimator::calculateAnimatedValue):
        * svg/SVGAnimatedInteger.cpp:
        (WebCore::SVGAnimatedIntegerAnimator::calculateAnimatedInteger):
        (WebCore::SVGAnimatedIntegerAnimator::calculateAnimatedValue):
        * svg/SVGAnimatedInteger.h:
        (SVGAnimatedIntegerAnimator):
        * svg/SVGAnimatedIntegerOptionalInteger.cpp:
        (WebCore::SVGAnimatedIntegerOptionalIntegerAnimator::addAnimatedTypes):
        (WebCore::SVGAnimatedIntegerOptionalIntegerAnimator::calculateAnimatedValue):
        * svg/SVGAnimatedLength.cpp:
        (WebCore::SVGAnimatedLengthAnimator::calculateAnimatedValue):
        * svg/SVGAnimatedLengthList.cpp:
        (WebCore::SVGAnimatedLengthListAnimator::calculateAnimatedValue):
        * svg/SVGAnimatedNumber.cpp:
        (WebCore::SVGAnimatedNumberAnimator::calculateAnimatedValue):
        * svg/SVGAnimatedNumber.h:
        * svg/SVGAnimatedNumberList.cpp:
        (WebCore::SVGAnimatedNumberListAnimator::calculateAnimatedValue):
        * svg/SVGAnimatedNumberOptionalNumber.cpp:
        (WebCore::SVGAnimatedNumberOptionalNumberAnimator::addAnimatedTypes):
        (WebCore::SVGAnimatedNumberOptionalNumberAnimator::calculateAnimatedValue):
        * svg/SVGAnimatedNumberOptionalNumber.h:
        * svg/SVGAnimatedRect.cpp:
        (WebCore::SVGAnimatedRectAnimator::calculateAnimatedValue):
        * svg/SVGAnimationElement.h:
        (WebCore::SVGAnimationElement::animateAdditiveNumber):
        (SVGAnimationElement):

2012-04-26  Ryosuke Niwa  <rniwa@webkit.org>

        Forgotten build fix after r115227.

        * css/StylePropertySet.cpp:
        (WebCore::StylePropertySet::get4Values):

2012-04-26  Mihnea Ovidenie  <mihnea@adobe.com>

        Crash when collecting svg symbol element in named flow.
        https://bugs.webkit.org/show_bug.cgi?id=84493

        Reviewed by David Hyatt.

        Test: fast/regions/symbol-in-named-flow-crash.svg

        * dom/Element.cpp:
        (WebCore::Element::~Element):
        Add an assert that an element that was collected into a named flow was already removed at this point
        (when the document is not in the process of destruction)
        (WebCore::Element::unregisterNamedFlowContentNode):
        Created a new function for unregistering a content node. In the future, this function may be used for
        content nodes from shadow dom.
        (WebCore::Element::detach):
        * dom/Element.h:
        (Element):
        * dom/NodeRenderingContext.cpp:
        (WebCore::NodeRenderingContext::moveToFlowThreadIfNeeded):
        Prevent elements that are part of shadow dom to be collected into a named flow.

2012-04-26  Nikolas Zimmermann  <nzimmermann@rim.com>

        Share code used to animate discrete types between all animators
        https://bugs.webkit.org/show_bug.cgi?id=84853

        Reviewed by Andreas Kling.

        Share by-animation handling for non-additive types in a central method in SVGAnimatedTypeAnimator,
        to be reusable by SVGAnimatedBoolean/Enumeration/PreserveAspectRatio/String. Add a new test covering
        these animations have no effect.

        Test: svg/animations/non-additive-type-by-animation.html

        * svg/SVGAnimateElement.cpp:
        (WebCore::SVGAnimateElement::calculateFromAndByValues):
        (WebCore::SVGAnimateElement::isAdditive):
        * svg/SVGAnimateElement.h:
        (SVGAnimateElement):
        * svg/SVGAnimateMotionElement.cpp:
        (WebCore::SVGAnimateMotionElement::calculateFromAndByValues):
        * svg/SVGAnimatedBoolean.cpp:
        (WebCore::isTrueString):
        (WebCore::SVGAnimatedBooleanAnimator::constructFromString):
        (WebCore::SVGAnimatedBooleanAnimator::addAnimatedTypes):
        (WebCore::SVGAnimatedBooleanAnimator::calculateAnimatedValue):
        * svg/SVGAnimatedEnumeration.cpp:
        (WebCore::SVGAnimatedEnumerationAnimator::addAnimatedTypes):
        (WebCore::SVGAnimatedEnumerationAnimator::calculateAnimatedValue):
        * svg/SVGAnimatedPreserveAspectRatio.cpp:
        (WebCore::SVGAnimatedPreserveAspectRatioAnimator::addAnimatedTypes):
        (WebCore::SVGAnimatedPreserveAspectRatioAnimator::calculateAnimatedValue):
        * svg/SVGAnimatedString.cpp:
        (WebCore::SVGAnimatedStringAnimator::addAnimatedTypes):
        (WebCore::SVGAnimatedStringAnimator::calculateAnimatedValue):
        * svg/SVGAnimationElement.cpp:
        (WebCore::SVGAnimationElement::startedActiveInterval):
        * svg/SVGAnimationElement.h:
        (SVGAnimationElement):
        (WebCore::SVGAnimationElement::animateDiscreteType):

2012-04-26  Chris Fleizach2  <cfleizach@apple.com>

        CrashTracer: [USER] 157 crashes in WebProcess at com.apple.WebCore: WebCore::AccessibilityRenderObject::isAttachment const + 29
        https://bugs.webkit.org/show_bug.cgi?id=84463

        Reviewed by Darin Adler.

        Accessibility was not being enabled when WK2 was asking only for the focused UI element.

        No layout test could be written because the WKTestRunner mechanism works differently when asking for this.

        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::focusedUIElementForPage):
        (WebCore::AXObjectCache::rootObject):
        (WebCore::AXObjectCache::rootObjectForFrame):

2012-04-25  Dana Jansens  <danakj@chromium.org>

        [chromium] Remove guarded virtual methods from WebFilterOperation API
        https://bugs.webkit.org/show_bug.cgi?id=84926

        Reviewed by James Robinson.

        * WebCore.gypi:
        * platform/chromium/support/WebFilterOperation.cpp: Removed.
        * platform/chromium/support/WebFilterOperations.cpp:
        (WebKit::WebFilterOperations::append):

2012-04-25  Benjamin Poulain  <benjamin@webkit.org>

        Add a version of StringImpl::find() without offset
        https://bugs.webkit.org/show_bug.cgi?id=83968

        Reviewed by Sam Weinig.

        Remove the zero offset of the find() functions on strings.

        * html/parser/XSSAuditor.cpp:
        (WebCore::XSSAuditor::init):
        * platform/network/ResourceResponseBase.cpp:
        (WebCore::trimToNextSeparator):
        (WebCore::parseCacheHeader):

2012-04-25  Mark Hahnenberg  <mhahnenberg@apple.com>

        WebCore shouldn't call collectAllGarbage directly
        https://bugs.webkit.org/show_bug.cgi?id=84897

        Reviewed by Geoffrey Garen.

        No new tests. 

        Currently, GCController calls Heap::collectAllGarbage directly, which leads 
        to an overload of collections as the timer in GCController and the timer in 
        GCActivityCallback compete for collection time and fire independently. As a 
        result, we end up doing almost 600 full collections during an in-browser run 
        of SunSpider, or 20 full collections on a single load of TechCrunch. 

        We can do better by preventing WebCore from calling collectAllGarbage directly 
        and instead going through Heap::reportAbandonedObjectGraph, since that is what 
        WebCore is trying to do--notify the Heap that a lot of garbage may have just 
        been generated when we left a page.

        * WebCore.exp.in:
        * bindings/js/GCController.cpp: Removed all timer stuff.
        (WebCore::GCController::GCController):
        (WebCore::GCController::garbageCollectSoon): Changed to call Heap::reportAbandonedObjectGraph.
        (WebCore::GCController::garbageCollectNow): Changed to still directly call collectAllGarbage.
        We will deprecate this function soon hopefully.
        * bindings/js/GCController.h: Removed timer stuff.
        (GCController):
        * bindings/js/ScriptProfiler.cpp:
        (WebCore::ScriptProfiler::collectGarbage): Changed to call garbageCollectSoon.

2012-04-25  James Robinson  <jamesr@chromium.org>

        [chromium] REGRESSION(112286) Compositor initialization blocks for program compilation / linking
        https://bugs.webkit.org/show_bug.cgi?id=84822

        Reviewed by Adrienne Walker.

        r112286 introduced a subtle regression in the chromium compositor startup sequence - by querying the texture
        copy program's uniform location at the end of LayerRendererChromium::initialize(), the compositor's thread was
        blocked until the service side compiled _all_ eagerly initialized shaders. The intent of the way the compositor
        programs are created is that a set of commonly-used programs are sent to the service side, but no blocking calls
        are made until after we go through the first paint (with the hope that the service side will complete the
        compilation by then).

        Fixed by moving program initialization (which also grabs uniform locations) until the first actual use of the
        copier. It may be worth deferring the program initialization completely if it's not used very often.

        Added unit test in LayerRendererChromiumTests to make sure LRC initialization does not make any
        synchronous calls (like getUniformLocation()).

        * platform/graphics/chromium/TextureCopier.cpp:
        (WebCore::AcceleratedTextureCopier::AcceleratedTextureCopier):
        (WebCore::AcceleratedTextureCopier::copyTexture):

2012-04-25  Jason Liu  <jason.liu@torchmobile.com.cn>

        [BlackBerry] Authenticated proxy isn't working.
        https://bugs.webkit.org/show_bug.cgi?id=84579

        Reviewed by Antonio Gomes.

        We should try to get username and password from WiFi advanced configuration first
        when 407 is received.

        No new tests. This is covered by existing http tests when proxy's username and password
        are configured for WiFi.

        * platform/network/blackberry/NetworkJob.cpp:
        (WebCore::NetworkJob::sendRequestWithCredentials):

2012-04-25  Alec Flett  <alecflett@chromium.org>

        IndexedDB: implement cursor.advance()
        https://bugs.webkit.org/show_bug.cgi?id=84174

        Reviewed by Ojan Vafai.

        Implement IDBCursor.advance() to spec.

        Test: storage/indexeddb/cursor-advance.html

        * Modules/indexeddb/IDBBackingStore.h:
        * Modules/indexeddb/IDBCursor.cpp:
        (WebCore::IDBCursor::advance):
        (WebCore):
        * Modules/indexeddb/IDBCursor.h:
        (IDBCursor):
        * Modules/indexeddb/IDBCursor.idl:
        * Modules/indexeddb/IDBCursorBackendImpl.cpp:
        (WebCore::IDBCursorBackendImpl::advance):
        (WebCore):
        (WebCore::IDBCursorBackendImpl::advanceInternal):
        * Modules/indexeddb/IDBCursorBackendImpl.h:
        (IDBCursorBackendImpl):
        * Modules/indexeddb/IDBCursorBackendInterface.h:
        * Modules/indexeddb/IDBLevelDBBackingStore.cpp:
        (WebCore):

2012-04-24  Adrienne Walker  <enne@google.com>

        [chromium] Hold video provider lock from willDraw to didDraw
        https://bugs.webkit.org/show_bug.cgi?id=84805

        Reviewed by James Robinson.

        * platform/graphics/chromium/cc/CCVideoLayerImpl.cpp:
        (WebCore::CCVideoLayerImpl::willDraw):
        (WebCore):
        (WebCore::CCVideoLayerImpl::willDrawInternal):
        (WebCore::CCVideoLayerImpl::appendQuads):
        (WebCore::CCVideoLayerImpl::didDraw):
        * platform/graphics/chromium/cc/CCVideoLayerImpl.h:

2012-04-25  Adrienne Walker  <enne@google.com>

        [chromium] Prevent CCLayerImpl::willDraw/didDraw mismatches
        https://bugs.webkit.org/show_bug.cgi?id=84812

        Reviewed by James Robinson.

        Because some layers lock/unlock resources, it needs to be guaranteed
        that if willDraw is called on a layer then didDraw will also be called
        on that layer before another willDraw or before layer destruction. Add
        asserts to make sure that this is the case.

        willDraw is called via CCLayerTreeHostImpl::prepareToDraw ->
        calculateRenderPasses. didDraw was previously called in
        CCLayerTreeHostImpl::drawLayers. Sometimes drawLayers was being
        skipped by the caller of these functions based on what prepareToDraw
        returned (causing didDraw to not be called). Fix this by having an
        explicit step to call didDraw on all layers. This new didDrawAllLayers
        function must be called if and only if prepareToDraw is called.

        Tested by existing tests via new asserts in CCLayerImpl.

        * platform/graphics/chromium/cc/CCLayerImpl.cpp:
        (WebCore::CCLayerImpl::CCLayerImpl):
        (WebCore::CCLayerImpl::~CCLayerImpl):
        (WebCore::CCLayerImpl::willDraw):
        (WebCore):
        (WebCore::CCLayerImpl::didDraw):
        * platform/graphics/chromium/cc/CCLayerImpl.h:
        (CCLayerImpl):
        * platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:
        (WebCore::CCLayerTreeHostImpl::drawLayers):
        (WebCore::CCLayerTreeHostImpl::didDrawAllLayers):
        (WebCore):
        * platform/graphics/chromium/cc/CCLayerTreeHostImpl.h:
        (CCLayerTreeHostImpl):
        * platform/graphics/chromium/cc/CCScrollbarLayerImpl.cpp:
        (WebCore::CCScrollbarLayerImpl::willDraw):
        (WebCore::CCScrollbarLayerImpl::didDraw):
        * platform/graphics/chromium/cc/CCSingleThreadProxy.cpp:
        (WebCore::CCSingleThreadProxy::doComposite):
        * platform/graphics/chromium/cc/CCTextureLayerImpl.cpp:
        (WebCore::CCTextureLayerImpl::willDraw):
        * platform/graphics/chromium/cc/CCThreadProxy.cpp:
        (WebCore::CCThreadProxy::scheduledActionDrawAndSwapInternal):
        * platform/graphics/chromium/cc/CCVideoLayerImpl.cpp:
        (WebCore::CCVideoLayerImpl::willDraw):
        (WebCore::CCVideoLayerImpl::didDraw):

2012-04-24  Kent Tamura  <tkent@chromium.org>

        Calendar Picker: Resize to minimal size to fit the content
        https://bugs.webkit.org/show_bug.cgi?id=84826

        Reviewed by Hajime Morita.

        Using fixed-size popup isn't nice. The calender picker popup size should
        be minimal.

        The minimal size depends on font settings, localized labels, and
        localized formats. So we put visible objects on a transparent element,
        calculate minimal size, resize the popup, then show the objects.

        * Resources/calendarPicker.css:
        (body): Don't use purple. It was for debugging purpose.
        The body is visible for a short period becuse we use transparent element.
        (#main):
         - Add nowrap to avoid text wrapping.
         - Add wider width to avoid wrapping.
         - Add opacity to hide incomplete layout.
        (.year-month-upper): Don't set flexible box yet.
        (.month-selector-box): Fix incorrect display value.
        (.days-area):
        Don't set table-layout:fixed and width:100% in order that it has the
        minimal width.

        * Resources/calendarPicker.js:
        (initialize): Make a new functio to resize.
        (fixWindowSize):
        Compute the required width from the right edge of the next year button,
        the maximum cell width, and so on.  Then, set CSS properties to have
        correct layout.
        (YearMonthController.prototype.attachTo):
        Set min-width property for a long year-month string.
        (YearMonthController.prototype._showPopup):
        Center the _monthPopup vertically.

        * html/shadow/CalendarPickerElement.cpp:
        (WebCore::CalendarPickerElement::contentSize):
        Specify small size for the initial size. It's better than showing a
        large window then shrink the size.
        * page/PagePopupClient.h:
        (PagePopupClient): Remove a false comment. We should support resize*().

2012-04-25  Kent Tamura  <tkent@chromium.org>

        Unreviewed. Sort Xcode project file.

        * WebCore.xcodeproj/project.pbxproj:

2012-04-25  Alpha Lam  <hclam@chromium.org>

        Unreviewed, rolling out r115260.
        http://trac.webkit.org/changeset/115260
        https://bugs.webkit.org/show_bug.cgi?id=84467

        r115260 is crashing a list of IndexDB tests, revert.

        * Modules/indexeddb/IDBLevelDBBackingStore.cpp:
        (WebCore):
        * platform/leveldb/LevelDBTransaction.cpp:
        (WebCore::LevelDBTransaction::TransactionIterator::refreshTreeIterator):
        (WebCore::LevelDBTransaction::TransactionIterator::handleConflictsAndDeletes):
        * platform/leveldb/LevelDBTransaction.h:
        (TransactionIterator):

2012-04-25  James Simonsen  <simonjam@chromium.org>

        [Web Timing] Add a vendor-prefixed Performance Timeline API
        https://bugs.webkit.org/show_bug.cgi?id=80350

        As described here: http://dvcs.w3.org/hg/webperf/raw-file/tip/specs/PerformanceTimeline/Overview.html

        The API is there and should be correct, but it isn't particularly useful,
        because nothing is populated. Upcoming changes will add Navigation Timing
        and Resource Timing.

        Reviewed by Tony Gentilcore.

        No new tests. Functionality is disabled on all platforms.

        * CMakeLists.txt: Added PerformanceEntry* files.
        * DerivedSources.pri: Ditto.
        * GNUmakefile.list.am: Ditto.
        * WebCore.gypi: Ditto.
        * WebCore.vcproj/WebCore.vcproj: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Ditto.
        * page/Performance.cpp:
        (WebCore::Performance::webkitGetEntries): Added.
        (WebCore::Performance::webkitGetEntriesByType): Added.
        (WebCore::Performance::webkitGetEntriesByName): Added.
        * page/Performance.h:
        (Performance):
        * page/Performance.idl:
        * page/PerformanceEntry.cpp: Added.
        (WebCore):
        (WebCore::PerformanceEntry::PerformanceEntry):
        (WebCore::PerformanceEntry::name):
        (WebCore::PerformanceEntry::entryType):
        (WebCore::PerformanceEntry::startTime):
        (WebCore::PerformanceEntry::duration):
        * page/PerformanceEntry.h: Added.
        (WebCore):
        (PerformanceEntry):
        * page/PerformanceEntry.idl: Added.
        * page/PerformanceEntryList.cpp: Added.
        (WebCore):
        (WebCore::PerformanceEntryList::PerformanceEntryList):
        (WebCore::PerformanceEntryList::~PerformanceEntryList):
        (WebCore::PerformanceEntryList::length):
        (WebCore::PerformanceEntryList::item):
        (WebCore::PerformanceEntryList::append):
        * page/PerformanceEntryList.h: Added.
        (WebCore):
        (PerformanceEntryList):
        (WebCore::PerformanceEntryList::create):
        * page/PerformanceEntryList.idl: Added.

2012-04-25  Benjamin Poulain  <bpoulain@apple.com>

        Move convertJSMethodNameToObjc() to be a utility function of ObjcClass
        https://bugs.webkit.org/show_bug.cgi?id=84915

        Reviewed by Darin Adler.

        The function convertJSMethodNameToObjc() is only useful for ObjcClass::methodsNamed().

        This patch moves the function from objc_utility.mm to be a static function in objc_class.mm.
        It aims at simplifying the code for future changes of ObjcClass.

        * bridge/objc/objc_class.mm:
        (Bindings):
        (JSC::Bindings::convertJSMethodNameToObjc):
        * bridge/objc/objc_utility.h:
        * bridge/objc/objc_utility.mm:
        (Bindings):

2012-04-25  Kent Tamura  <tkent@chromium.org>

        Unreviewed. Sort Xcode project file.

        * WebCore.xcodeproj/project.pbxproj:

2012-04-25  Greg Billock  <gbillock@google.com>

        Implement object-literal constructor for the Intent object.
        https://bugs.webkit.org/show_bug.cgi?id=84220

        Reviewed by Kentaro Hara.

        The use of the custom constructor will hopefully be temporary, as we plan
        to convert to just using the object literal constructor, which can then use codegen.
        See spec: http://dvcs.w3.org/hg/web-intents/raw-file/tip/spec/Overview.html

        Added support for the service and extras parameters in the Intent
        object to support the speced members in the object literal constructor.

        Added supporting accessor to Dictionary to retrieve a sub-Dictionary,
        and a utility to ScriptValue to serialize with ports.

        Test: webintents/web-intent-obj-constructor.html

        (WebCore):
        * Modules/intents/Intent.cpp:
        (WebCore::Intent::create):
        (WebCore::Intent::Intent):
        (WebCore::Intent::service):
        (WebCore):
        (WebCore::Intent::extras):
        * Modules/intents/Intent.h:
        (WebCore):
        (Intent):
        * Modules/intents/Intent.idl:
        * WebCore.gypi:
        * bindings/v8/Dictionary.cpp:
        (WebCore::Dictionary::get):
        (WebCore):
        * bindings/v8/Dictionary.h:
        (Dictionary):
        * bindings/v8/ScriptValue.cpp:
        (WebCore::ScriptValue::serialize):
        (WebCore):
        * bindings/v8/ScriptValue.h:
        (WTF):
        (WebCore):
        (ScriptValue):
        * bindings/v8/custom/V8IntentConstructor.cpp: Added.
        (WebCore):
        (WebCore::V8Intent::constructorCallback):

2012-04-25  Alexandru Chiculita  <achicu@adobe.com>

        CSS Shaders: Use u_texture instead of s_texture. It was updated in the spec
        https://bugs.webkit.org/show_bug.cgi?id=82618

        Reviewed by Dean Jackson.
        
        Changed the uniform name passed to the CSS Shaders from s_texture to u_texture.
        https://dvcs.w3.org/hg/FXTF/raw-file/tip/filters/index.html

        No new tests, just updating existing ones.

        * platform/graphics/filters/CustomFilterShader.cpp:
        (WebCore::CustomFilterShader::defaultFragmentShaderString):
        (WebCore::CustomFilterShader::initializeParameterLocations):

2012-04-25  Douglas Stockwell  <dstockwell@chromium.org>

        IndexedDB: cursor does not correctly iterate over keys added and removed during iteration
        https://bugs.webkit.org/show_bug.cgi?id=84467

        Reviewed by Ojan Vafai.

        Ensure that the iterator over the tree of cached adds/removes always points at
        the current key, or if the db iterator is current, the next key:
        
        - When refreshing the tree iterator after a mutation, always seek unless the
        tree iterator is current.
        
        - When handing conflicts and delete markers, only advance the tree iterator as
        far as the db iterator.
        
        Remove the expensive (and now redundant) logic that issued a get() to check
        whether an item had been deleted.

        Test: storage/indexeddb/cursor-added-bug.html

        * Modules/indexeddb/IDBLevelDBBackingStore.cpp:
        (WebCore):
        * platform/leveldb/LevelDBTransaction.cpp:
        (WebCore::LevelDBTransaction::TransactionIterator::refreshTreeIterator):
        (WebCore::LevelDBTransaction::TransactionIterator::handleConflictsAndDeletes):

2012-04-25  Antti Koivisto  <antti@apple.com>

        Try to fix build with STYLE_SCOPED enabled.

        Not reviewed.

        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::determineScope):

2012-04-25  Alec Flett  <alecflett@chromium.org>

        IndexedDB: support openCursor(IDBKey)
        https://bugs.webkit.org/show_bug.cgi?id=84652

        Reviewed by Ojan Vafai.

        Add signatures for openCursor/openKeyCursor(IDBKey).

        Test: storage/indexeddb/opencursor-key.html

        * Modules/indexeddb/IDBIndex.cpp:
        (WebCore::IDBIndex::openCursor):
        (WebCore):
        (WebCore::IDBIndex::openKeyCursor):
        * Modules/indexeddb/IDBIndex.h:
        (WebCore::IDBIndex::openCursor):
        (IDBIndex):
        (WebCore::IDBIndex::openKeyCursor):
        * Modules/indexeddb/IDBIndex.idl:
        * Modules/indexeddb/IDBObjectStore.cpp:
        (WebCore::IDBObjectStore::openCursor):
        (WebCore):
        * Modules/indexeddb/IDBObjectStore.h:
        (WebCore::IDBObjectStore::openCursor):
        (IDBObjectStore):
        * Modules/indexeddb/IDBObjectStore.idl:

2012-04-25  Antti Koivisto  <antti@apple.com>

        Remove owner node pointer from StyleSheetInternal 
        https://bugs.webkit.org/show_bug.cgi?id=84882

        Reviewed by Andreas Kling.

        To make sharing between multiple nodes possible StyleSheetInternal should not have a Node pointer.
        
        - Make StyleSheetInternal constructor take CSSParserContext instead of Node*
        - Move owner node pointer to CSSStyleSheet. CSSStyleSheet now acts as a client for StyleSheetInternal.
        
        This gets us closer to being able to cache stylesheet data structures.
        
        * css/CSSImportRule.cpp:
        (WebCore::StyleRuleImport::setCSSStyleSheet):
        (WebCore::StyleRuleImport::requestStyleSheet):
        
            Setup CSSParserContext.
            Remove FIXME about updateBaseURL(). It is no longer possible to change URL of StyleSheetInternal.

        * css/CSSPageRule.cpp:
        (WebCore::CSSPageRule::setSelectorText):
        * css/CSSParser.cpp:
        (WebCore::CSSParserContext::CSSParserContext):
        * css/CSSParserMode.h:
        (CSSParserContext):
    
            Expand CSSParserContext constructors.

        * css/CSSStyleRule.cpp:
        (WebCore::CSSStyleRule::setSelectorText):
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::StyleResolver):
        (WebCore::StyleResolver::addAuthorRulesAndCollectUserRulesFromSheets):
        (WebCore::StyleResolver::collectMatchingRulesForList):
        * css/StyleResolver.h:
        (StyleResolver):
        * css/CSSStyleSheet.cpp:

            User stylesheets went back to being CSSStyleSheets. Adapt to that.

        (WebCore::StyleSheetInternal::StyleSheetInternal):
        (WebCore):
        (WebCore::StyleSheetInternal::checkLoaded):
        (WebCore::StyleSheetInternal::startLoadingDynamicSheet):
        (WebCore::StyleSheetInternal::rootStyleSheet):
        (WebCore::StyleSheetInternal::singleOwnerNode):
        (WebCore::StyleSheetInternal::singleOwnerDocument):
        (WebCore::StyleSheetInternal::styleSheetChanged):
        
            The owner node is now located through CSSStyleSheet. Only one client is supported atm.

        (WebCore::StyleSheetInternal::registerClient):
        (WebCore::StyleSheetInternal::unregisterClient):
        
            Register CSSStyleSheets.

        (WebCore::CSSStyleSheet::CSSStyleSheet):
        (WebCore::CSSStyleSheet::~CSSStyleSheet):
        (WebCore::CSSStyleSheet::rules):
        (WebCore::CSSStyleSheet::cssRules):
        (WebCore::CSSStyleSheet::ownerDocument):
        * css/CSSStyleSheet.h:
        (WebCore::StyleSheetInternal::create):
        (WebCore::StyleSheetInternal::createInline):
        (StyleSheetInternal):
        (WebCore::CSSStyleSheet::create):
        (CSSStyleSheet):
        
            Moved m_ownerNode.
            Changed constructors
            Removed setFinalURL(). 

        * css/PropertySetCSSStyleDeclaration.cpp:
        (WebCore::StyleRuleCSSStyleDeclaration::setNeedsStyleRecalc):
        * dom/Document.cpp:
        (WebCore::Document::updateBaseURL):
        
            Instead of setFinalURL, construct a new StyleSheetInternal if the base url ever changes.

        (WebCore::Document::pageUserSheet):
        (WebCore::Document::pageGroupUserSheets):
        (WebCore::Document::addUserSheet):
        (WebCore::Document::elementSheet):
        * dom/Document.h:
        (Document):
        (WebCore::Document::documentUserSheets):
        
            Adapt to the new interface.
            Turned user stylesheets CSSStyleSheets so they can find the owner node.

        * dom/ProcessingInstruction.cpp:
        (WebCore::ProcessingInstruction::setCSSStyleSheet):
        * dom/StyleElement.cpp:
        (WebCore::StyleElement::createSheet):
        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::setCSSStyleSheet):
        * inspector/InspectorCSSAgent.cpp:
        (WebCore::SelectorProfile::startSelector):
        (WebCore::InspectorCSSAgent::bindStyleSheet):
        * inspector/InspectorStyleSheet.cpp:
        (WebCore::fillMediaListChain):
        (WebCore::InspectorStyleSheet::ownerDocument):
        * page/PageSerializer.cpp:
        (WebCore::PageSerializer::serializeCSSStyleSheet):

2012-04-25  Adam Klein  <adamk@chromium.org>

        Fix uninitialized variable warnings in PasteboardMac.mm after 115145
        https://bugs.webkit.org/show_bug.cgi?id=84879

        Reviewed by Enrica Casucci.

        * platform/mac/PasteboardMac.mm:
        (WebCore::Pasteboard::getDataSelection): Initialize attributedString to nil.
        (WebCore::Pasteboard::writeSelectionForTypes): ditto.

2012-04-25  Kenneth Russell  <kbr@google.com>

        Delete CanvasPixelArray, ByteArray, JSByteArray and JSC code once unreferenced
        https://bugs.webkit.org/show_bug.cgi?id=83655

        Reviewed by Oliver Hunt.

        Removed last few references to ByteArray, replacing with
        Uint8ClampedArray as necessary, and deleted now-obsolete
        CanvasPixelArray, ByteArray and JSByteArray. Removed code from
        JavaScriptCore special-casing ByteArray.

        No new tests. Did full layout test run on Mac OS; no regressions
        seen from this change.

        * CMakeLists.txt:
        * DerivedSources.pri:
        * ForwardingHeaders/runtime/JSByteArray.h: Removed.
        * GNUmakefile.list.am:
        * PlatformBlackBerry.cmake:
        * Target.pri:
        * UseV8.cmake:
        * WebCore.gypi:
        * WebCore.order:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/v8/SerializedScriptValue.cpp:
        * bindings/v8/V8Binding.h:
        (WebCore::isHostObject):
        * bindings/v8/custom/V8CanvasPixelArrayCustom.cpp: Removed.
        * bindings/v8/custom/V8InjectedScriptHostCustom.cpp:
        (WebCore::V8InjectedScriptHost::typeCallback):
        * bridge/qt/qt_runtime.cpp:
        (JSC::Bindings::isJSUint8ClampedArray):
        (Bindings):
        (JSC::Bindings::valueRealType):
        (JSC::Bindings::convertValueToQVariant):
        (JSC::Bindings::convertQVariantToValue):
        * html/canvas/CanvasPixelArray.cpp: Removed.
        * html/canvas/CanvasPixelArray.h: Removed.
        * html/canvas/CanvasPixelArray.idl: Removed.
        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore):
        * platform/graphics/filters/FEConvolveMatrix.h:
        * rendering/svg/RenderSVGResourceMasker.cpp:

2012-04-25  Alpha Lam  <hclam@chromium.org>

        Unreviewed build fix.

        Build fix for compilation failure due to r115243.

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

2012-04-25  Ryosuke Niwa  <rniwa@webkit.org>

        Build fix after r115227. Return null string when the string builder is empty
        to match the old behavior.

        * css/StylePropertySet.cpp:
        (WebCore::StylePropertySet::borderPropertyValue):

2012-04-25  Ian Vollick  <vollick@chromium.org>

        [chromium] Add support for animation finished events.
        https://bugs.webkit.org/show_bug.cgi?id=84454

        Reviewed by James Robinson.

        Tested in CCLayerTreeHostTestAnimationFinishedEvents

        * platform/graphics/chromium/GraphicsLayerChromium.cpp:
        (WebCore::GraphicsLayerChromium::willBeDestroyed):
        (WebCore::GraphicsLayerChromium::notifyAnimationFinished):
        (WebCore):
        * platform/graphics/chromium/GraphicsLayerChromium.h:
        * platform/graphics/chromium/LayerChromium.cpp:
        (WebCore::LayerChromium::notifyAnimationStarted):
        (WebCore::LayerChromium::notifyAnimationFinished):
        (WebCore):
        * platform/graphics/chromium/LayerChromium.h:
        (WebCore):
        (LayerChromium):
        * platform/graphics/chromium/cc/CCAnimationEvents.h:
        (WebCore::CCAnimationEvent::CCAnimationEvent):
        (CCAnimationEvent):
        (WebCore):
        * platform/graphics/chromium/cc/CCLayerAnimationController.cpp:
        (WebCore::CCLayerAnimationController::animate):
        (WebCore::CCLayerAnimationController::notifyAnimationStarted):
        (WebCore::CCLayerAnimationController::startAnimationsWaitingForNextTick):
        (WebCore::CCLayerAnimationController::startAnimationsWaitingForStartTime):
        (WebCore::CCLayerAnimationController::startAnimationsWaitingForTargetAvailability):
        (WebCore::CCLayerAnimationController::purgeFinishedAnimations):
        * platform/graphics/chromium/cc/CCLayerAnimationController.h:
        (CCLayerAnimationController):
        * platform/graphics/chromium/cc/CCLayerAnimationDelegate.h:
        (CCLayerAnimationDelegate):
        * platform/graphics/chromium/cc/CCLayerTreeHost.cpp:
        (WebCore::CCLayerTreeHost::setAnimationEventsRecursive):

2012-04-25  Enrica Casucci  <enrica@apple.com>

        REGRESSION (r110494): Dragging images from Safari to Finder results in .webloc rather than image file
        https://bugs.webkit.org/show_bug.cgi?id=84878
        <rdar://problem/11155407>
        
        In WebKit2, it could happen to try to start the drag twice, given the asynchronous nature
        of the communication between the UI process and the WebProcess.
        We need to guarantee that we don't do that, otherwise on OS X the pasteboard ownership
        gets changed which affects the promised file types.

        Reviewed by Alexey Proskuryakov.

        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleDrag): Reset m_mouseDownMayStartDrag to false to
        avoid attempting to start another drag.

2012-04-25  Andreas Kling  <kling@webkit.org>

        Remove unused Attribute constructor.

        Semi-knowingly rubber-stamped by Antti Koivisto.

        * dom/Attribute.h:

2012-04-25  Nate Chapin  <japhet@chromium.org>

        Crash in CachedRawResource::didAddClient() due to missing protector.
        https://bugs.webkit.org/show_bug.cgi?id=83632

        Reviewed by Eric Seidel.

        Test: http/tests/xmlhttprequest/access-control-repeated-failed-preflight-crash.html

        * loader/cache/CachedRawResource.cpp:
        (WebCore::CachedRawResource::didAddClient):

2012-04-25  Kentaro Hara  <haraken@chromium.org>

        [V8] Pass Isolate to SerializedScriptValue::deserialize()
        https://bugs.webkit.org/show_bug.cgi?id=84758

        Reviewed by Nate Chapin.

        The objective is to pass Isolate around. This patch passes
        Isolate to SerializedScriptValue::deserialize().

        No tests. No change in behavior.

        * bindings/v8/custom/V8HistoryCustom.cpp:
        (WebCore::V8History::stateAccessorGetter):
        * bindings/v8/custom/V8IDBAnyCustom.cpp:
        (WebCore::toV8):
        * bindings/v8/custom/V8MessageEventCustom.cpp:
        (WebCore::V8MessageEvent::dataAccessorGetter):
        * bindings/v8/custom/V8PopStateEventCustom.cpp:
        (WebCore::V8PopStateEvent::stateAccessorGetter):

2012-04-25  Kentaro Hara  <haraken@chromium.org>

        [V8] Pass Isolate to SerializedScriptValue::create() in custom bindings
        https://bugs.webkit.org/show_bug.cgi?id=84757

        Reviewed by Nate Chapin.

        The objective is to pass Isolate around in V8 bindings.
        This patch passes Isolate to SerializedScriptValue::create()
        in custom bindings.

        No tests. No change in behavior.

        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        (WebCore::handlePostMessageCallback):
        * bindings/v8/custom/V8DedicatedWorkerContextCustom.cpp:
        (WebCore::handlePostMessageCallback):
        * bindings/v8/custom/V8HistoryCustom.cpp:
        (WebCore::V8History::pushStateCallback):
        (WebCore::V8History::replaceStateCallback):
        * bindings/v8/custom/V8MessagePortCustom.cpp:
        (WebCore::handlePostMessageCallback):
        * bindings/v8/custom/V8WorkerCustom.cpp:
        (WebCore::handlePostMessageCallback):

2012-04-25  Kentaro Hara  <haraken@chromium.org>

        [V8] Pass Isolate to SerializedScriptValue::create() in CodeGeneratorV8.pm
        https://bugs.webkit.org/show_bug.cgi?id=84753

        Reviewed by Nate Chapin.

        The objective is to pass Isolate around in V8 bindings.
        This patch passes Isolate to SerializedScriptValue::create()
        in CodeGeneratorV8.pm.

        Tests: bindings/scripts/test/TestObj.idl
               bindings/scripts/test/TestSerializedScriptValueInterface.idl

        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateNormalAttrSetter):
        (GenerateParametersCheck):
        (JSValueToNative):

        * bindings/scripts/test/V8/V8TestObj.cpp: Updated run-bindings-tests results.
        (WebCore::TestObjV8Internal::intSequenceAttrAttrGetter):
        (WebCore::TestObjV8Internal::shortSequenceAttrAttrGetter):
        (WebCore::TestObjV8Internal::longSequenceAttrAttrGetter):
        (WebCore::TestObjV8Internal::longLongSequenceAttrAttrGetter):
        (WebCore::TestObjV8Internal::unsignedIntSequenceAttrAttrGetter):
        (WebCore::TestObjV8Internal::unsignedShortSequenceAttrAttrGetter):
        (WebCore::TestObjV8Internal::unsignedLongSequenceAttrAttrGetter):
        (WebCore::TestObjV8Internal::unsignedLongLongSequenceAttrAttrGetter):
        (WebCore::TestObjV8Internal::floatSequenceAttrAttrGetter):
        (WebCore::TestObjV8Internal::doubleSequenceAttrAttrGetter):
        (WebCore::TestObjV8Internal::booleanSequenceAttrAttrGetter):
        (WebCore::TestObjV8Internal::voidSequenceAttrAttrGetter):
        (WebCore::TestObjV8Internal::dateSequenceAttrAttrGetter):
        (WebCore::TestObjV8Internal::serializedValueCallback):
        * bindings/scripts/test/V8/V8TestSerializedScriptValueInterface.cpp:
        (WebCore::TestSerializedScriptValueInterfaceV8Internal::valueAttrSetter):
        (WebCore::TestSerializedScriptValueInterfaceV8Internal::cachedValueAttrSetter):
        (WebCore::TestSerializedScriptValueInterfaceV8Internal::acceptTransferListCallback):
        (WebCore::TestSerializedScriptValueInterfaceV8Internal::multiTransferListCallback):
        (WebCore::V8TestSerializedScriptValueInterface::constructorCallback):

2012-04-25  Kentaro Hara  <haraken@chromium.org>

        [V8] Add m_isolate to SerializedScriptValue::Writer
        and SerializedScriptValue::Reader
        https://bugs.webkit.org/show_bug.cgi?id=84739

        Reviewed by Nate Chapin.

        This is the second step to pass Isolate around
        in SerializedScriptValue. This patch adds m_isolate to
        SerializedScriptValue::Writer and SerializedScriptValue::Reader,
        so that they can use the isolate around. The fix is safe since
        Writer and Reader are guaranteed to be used by one Isolate.

        No tests. No change in behavior.

        * bindings/v8/SerializedScriptValue.cpp:
        (WebCore::SerializedScriptValue::create):
        (WebCore::SerializedScriptValue::nullValue):
        (WebCore::SerializedScriptValue::undefinedValue):
        (WebCore::SerializedScriptValue::booleanValue):
        (WebCore::SerializedScriptValue::numberValue):
        (WebCore::SerializedScriptValue::SerializedScriptValue):
        (WebCore::SerializedScriptValue::deserialize):
        * bindings/v8/SerializedScriptValue.h:
        (SerializedScriptValue):

2012-04-25  Kentaro Hara  <haraken@chromium.org>

        [V8] Make the Isolate* parameter non-optional in setDOMException()
        https://bugs.webkit.org/show_bug.cgi?id=84736

        Reviewed by Nate Chapin.

        Now all setDOMException() callers pass Isolate* to setDOMException().
        This patch makes the Isolate* parameter non-optional.

        No tests. No change in behavior.

        * bindings/v8/V8Proxy.h:
        (V8Proxy):

2012-04-24  Ryosuke Niwa  <rniwa@webkit.org>

        REGRESSION(r112177): listStyleType CSS property gets converted into listStyle
        https://bugs.webkit.org/show_bug.cgi?id=83026

        Reviewed by Darin Adler.

        Fixed the bug by not using shorthand notations when some values are missing.

        However, we still want to return a value when shorthand border property is explicitly
        requested so extract borderPropertyValue with a flag to support both behaviors.

        * css/StylePropertySet.cpp:
        (WebCore::borderPropertyValue): Extracted from getPropertyValue.
        (WebCore::StylePropertySet::getPropertyValue):
        (WebCore::StylePropertySet::get4Values): Don't return values when priority don't match.
        (WebCore::StylePropertySet::getShorthandValue):
        (WebCore::StylePropertySet::getCommonValue): Don't return null string for initial values
        to disambiguate missing values and "initial" in getPropertyValue. Also check propriety.
        (WebCore::StylePropertySet::asText): Support emitting border-width, border-style, and
        border-color when border doesn't work but the former properties do.

2012-04-25  Ian Vollick  <vollick@chromium.org>

        [chromium] Do not clobber synchronized start times.
        https://bugs.webkit.org/show_bug.cgi?id=84605

        Reviewed by James Robinson.

        Tested in CCLayerAnimationControllerTest.doNotClobberStartTimes

        (WebCore):
        * platform/graphics/chromium/cc/CCActiveAnimation.h:
        (CCActiveAnimation):
        (WebCore::CCActiveAnimation::hasSetStartTime):
        * platform/graphics/chromium/cc/CCLayerAnimationController.cpp:
        (WebCore::CCLayerAnimationController::startAnimationsWaitingForNextTick):
        (WebCore::CCLayerAnimationController::startAnimationsWaitingForTargetAvailability):

2012-04-25  Nate Chapin  <japhet@chromium.org>

        REGRESSION (r100311): YummySoup app crashes when trying to print
        https://bugs.webkit.org/show_bug.cgi?id=83918

        Reviewed by Alexey Proskuryakov.

        Test: http/tests/xmlhttprequest/cancel-during-failure-crash.html

        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::didFail): Set m_calledDidFinishLoad when calling
           didFailToLoad() to prevent it from getting called twice if we cancel
           re-entrantly.

2012-04-25  Alexis Menard  <alexis.menard@openbossa.org>

        Not reviewed, fix Windows build after r115215.

        * css/CSSAllInOne.cpp:

2012-04-25  Eric Carlson  <eric.carlson@apple.com>

        Not reviewed, attempt to fix Windows build after r115215.

        * css/CSSAllInOne.cpp: Don't try to include CSSStyleSelector.cpp.

2012-04-25  Mark Pilgrim  <pilgrim@chromium.org>

        [Chromium] Call actualMemoryUsageMB directly
        https://bugs.webkit.org/show_bug.cgi?id=84837

        Reviewed by Kentaro Hara.

        Part of a refactoring series. See tracking bug 82948.

        * bindings/v8/V8DOMWindowShell.cpp:
        (WebCore::reportFatalErrorInV8):
        * bindings/v8/V8GCController.cpp:
        (WebCore):
        * platform/MemoryUsageSupport.cpp:
        (WebCore::MemoryUsageSupport::actualMemoryUsageMB):
        (WebCore):
        * platform/MemoryUsageSupport.h:
        (MemoryUsageSupport):
        * platform/chromium/MemoryUsageSupportChromium.cpp:
        (WebCore::MemoryUsageSupport::actualMemoryUsageMB):
        (WebCore):
        * platform/chromium/PlatformSupport.h:
        (PlatformSupport):

2012-04-25  Alexis Menard  <alexis.menard@openbossa.org>

        Rename CSSStyleSelector files to StyleResolver.
        https://bugs.webkit.org/show_bug.cgi?id=84814

        Reviewed by Antti Koivisto.

        Rename CSSStyleSelector files to match the new class name StyleResolver.
        Update the includes all over the code base to the new name.

        No new tests : renaming files, no behavior changes expected.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSAllInOne.cpp:
        * css/CSSCalculationValue.cpp:
        * css/CSSFontSelector.cpp:
        * css/CSSGradientValue.cpp:
        * css/MediaQueryEvaluator.cpp:
        * css/MediaQueryMatcher.cpp:
        * css/SVGCSSStyleSelector.cpp:
        * css/StyleBuilder.cpp:
        * css/StyleMedia.cpp:
        * css/StyleResolver.cpp: Renamed from Source/WebCore/css/CSSStyleSelector.cpp.
        (WebCore):
        (RuleData):
        (WebCore::RuleData::position):
        (WebCore::RuleData::rule):
        (WebCore::RuleData::selector):
        (WebCore::RuleData::hasFastCheckableSelector):
        (WebCore::RuleData::hasMultipartSelector):
        (WebCore::RuleData::hasRightmostSelectorMatchingHTMLBasedOnRuleHash):
        (WebCore::RuleData::containsUncommonAttributeSelector):
        (WebCore::RuleData::specificity):
        (WebCore::RuleData::linkMatchType):
        (WebCore::RuleData::hasDocumentSecurityOrigin):
        (WebCore::RuleData::isInRegionRule):
        (WebCore::RuleData::descendantSelectorIdentifierHashes):
        (SameSizeAsRuleData):
        (RuleSet):
        (WebCore::RuleSet::create):
        (WebCore::RuleSet::disableAutoShrinkToFit):
        (WebCore::RuleSet::features):
        (WebCore::RuleSet::idRules):
        (WebCore::RuleSet::classRules):
        (WebCore::RuleSet::tagRules):
        (WebCore::RuleSet::shadowPseudoElementRules):
        (WebCore::RuleSet::linkPseudoClassRules):
        (WebCore::RuleSet::focusPseudoClassRules):
        (WebCore::RuleSet::universalRules):
        (WebCore::RuleSet::pageRules):
        (WebCore::RuleSet::RuleSetSelectorPair::RuleSetSelectorPair):
        (RuleSetSelectorPair):
        (WebCore::elementCanUseSimpleDefaultStyle):
        (WebCore::screenEval):
        (WebCore::printEval):
        (WebCore::leftToRightDeclaration):
        (WebCore::rightToLeftDeclaration):
        (WebCore::StyleResolver::StyleResolver):
        (WebCore::StyleResolver::addAuthorRulesAndCollectUserRulesFromSheets):
        (WebCore::makeRuleSet):
        (WebCore::StyleResolver::collectFeatures):
        (WebCore::StyleResolver::determineScope):
        (WebCore::StyleResolver::ruleSetForScope):
        (WebCore::StyleResolver::appendAuthorStylesheets):
        (WebCore::StyleResolver::setupScopeStack):
        (WebCore::StyleResolver::pushScope):
        (WebCore::StyleResolver::popScope):
        (WebCore::StyleResolver::pushParentElement):
        (WebCore::StyleResolver::popParentElement):
        (WebCore::StyleResolver::pushParentShadowRoot):
        (WebCore::StyleResolver::popParentShadowRoot):
        (WebCore::StyleResolver::addKeyframeStyle):
        (WebCore::StyleResolver::~StyleResolver):
        (WebCore::StyleResolver::sweepMatchedPropertiesCache):
        (WebCore::StyleResolver::Features::Features):
        (WebCore::StyleResolver::Features::~Features):
        (WebCore::StyleResolver::Features::add):
        (WebCore::StyleResolver::Features::clear):
        (WebCore::parseUASheet):
        (WebCore::loadFullDefaultStyle):
        (WebCore::loadSimpleDefaultStyle):
        (WebCore::loadViewSourceStyle):
        (WebCore::ensureDefaultStyleSheetsForElement):
        (WebCore::StyleResolver::addMatchedProperties):
        (WebCore::StyleResolver::addElementStyleProperties):
        (WebCore::StyleResolver::collectMatchingRules):
        (WebCore::StyleResolver::collectMatchingRulesForRegion):
        (WebCore::StyleResolver::sortAndTransferMatchedRules):
        (WebCore::StyleResolver::matchScopedAuthorRules):
        (WebCore::StyleResolver::matchAuthorRules):
        (WebCore::StyleResolver::matchUserRules):
        (WebCore::StyleResolver::matchUARules):
        (MatchingUARulesScope):
        (WebCore::MatchingUARulesScope::MatchingUARulesScope):
        (WebCore::MatchingUARulesScope::~MatchingUARulesScope):
        (WebCore::MatchingUARulesScope::isMatchingUARules):
        (WebCore::StyleResolver::collectMatchingRulesForList):
        * css/StyleResolver.h: Renamed from Source/WebCore/css/CSSStyleSelector.h.
        (WebCore):
        (MediaQueryResult):
        (WebCore::MediaQueryResult::MediaQueryResult):
        (StyleResolver):
        (WebCore::StyleResolver::style):
        (WebCore::StyleResolver::parentStyle):
        (WebCore::StyleResolver::rootElementStyle):
        (WebCore::StyleResolver::element):
        (WebCore::StyleResolver::document):
        (WebCore::StyleResolver::fontDescription):
        (WebCore::StyleResolver::parentFontDescription):
        (WebCore::StyleResolver::setFontDescription):
        (WebCore::StyleResolver::setZoom):
        (WebCore::StyleResolver::setEffectiveZoom):
        (WebCore::StyleResolver::setTextSizeAdjust):
        (WebCore::StyleResolver::hasParentNode):
        (WebCore::StyleResolver::pushScope):
        (WebCore::StyleResolver::popScope):
        (WebCore::StyleResolver::setStyle):
        (WebCore::StyleResolver::fontSelector):
        (WebCore::StyleResolver::allVisitedStateChanged):
        (WebCore::StyleResolver::visitedStateChanged):
        (WebCore::StyleResolver::usesSiblingRules):
        (WebCore::StyleResolver::usesFirstLineRules):
        (WebCore::StyleResolver::usesBeforeAfterRules):
        (WebCore::StyleResolver::usesLinkRules):
        (WebCore::StyleResolver::RuleFeature::RuleFeature):
        (RuleFeature):
        (Features):
        (WebCore::StyleResolver::addMatchedRule):
        (WebCore::StyleResolver::MatchRanges::MatchRanges):
        (MatchRanges):
        (WebCore::StyleResolver::MatchedProperties::MatchedProperties):
        (MatchedProperties):
        (WebCore::StyleResolver::MatchResult::MatchResult):
        (MatchResult):
        (WebCore::StyleResolver::MatchOptions::MatchOptions):
        (MatchOptions):
        (WebCore::StyleResolver::isRightPage):
        (WebCore::StyleResolver::styleNotYetAvailable):
        (WebCore::StyleResolver::applyPropertyToRegularStyle):
        (WebCore::StyleResolver::applyPropertyToVisitedLinkStyle):
        (MatchedPropertiesCacheItem):
        (WebCore::StyleResolver::scopeStackIsConsistent):
        (WebCore::StyleResolver::ScopeStackFrame::ScopeStackFrame):
        (ScopeStackFrame):
        * css/WebKitCSSMatrix.cpp:
        * dom/Document.cpp:
        * dom/Element.cpp:
        * dom/Node.cpp:
        * dom/ShadowRoot.cpp:
        * dom/ShadowTree.cpp:
        * dom/StyledElement.cpp:
        * editing/ApplyStyleCommand.cpp:
        * editing/EditingStyle.cpp:
        * editing/Editor.cpp:
        * editing/markup.cpp:
        * history/CachedPage.cpp:
        * html/HTMLDocument.cpp:
        * html/HTMLLinkElement.cpp:
        * html/HTMLOptGroupElement.cpp:
        * html/HTMLOptionElement.cpp:
        * html/ValidationMessage.cpp:
        * html/canvas/CanvasRenderingContext2D.cpp:
        * html/shadow/MediaControlElements.cpp:
        * inspector/InspectorCSSAgent.cpp:
        * inspector/InspectorDOMAgent.cpp:
        * inspector/InspectorStyleSheet.cpp:
        * loader/LinkLoader.cpp:
        * page/DOMWindow.cpp:
        * page/FrameView.cpp:
        * page/Page.cpp:
        * page/animation/KeyframeAnimation.cpp:
        * platform/qt/RenderThemeQt.cpp:
        * platform/qt/RenderThemeQtMobile.cpp:
        * rendering/RenderLayer.cpp:
        * rendering/RenderLayerBacking.cpp:
        * rendering/RenderListBox.cpp:
        * rendering/RenderMenuList.cpp:
        * rendering/RenderObject.cpp:
        * rendering/RenderRegion.cpp:
        * rendering/RenderSlider.cpp:
        * rendering/RenderTextControlSingleLine.cpp:
        * rendering/RenderThemeMac.mm:
        * rendering/RenderThemeSafari.cpp:
        * rendering/style/RenderStyle.cpp:
        * rendering/style/StyleGeneratedImage.cpp:
        * rendering/style/StyleRareNonInheritedData.cpp:
        * rendering/svg/RenderSVGInlineText.cpp:
        * svg/SVGClipPathElement.cpp:
        * svg/SVGElement.cpp:
        * svg/SVGFontFaceElement.cpp:
        * svg/SVGGradientElement.cpp:
        * svg/SVGMaskElement.cpp:
        * svg/SVGUseElement.cpp:

2012-04-25  Crystal Zhang  <haizhang@rim.com>
            https://bugs.webkit.org/show_bug.cgi?id=84875
    
            make-css-file-arrays.pl now only take css files, make it also take js files,
            as for html popups we also need load js files.
    
            Reviewed by Antonio Gomes.
    
            * css/make-css-file-arrays.pl:

2012-04-25  Li Yin  <li.yin@intel.com>

        [chromium][workers] setTargetType(ResourceRequest::TargetIsWorker) is repeatedly called in chromium
        https://bugs.webkit.org/show_bug.cgi?id=84542

        Reviewed by David Levin.

        In chromium platform, the default value of m_targetType is ResourceRequest::TargetIsWorker
        it isn't necessary to call
        worker->m_scriptLoader->setTargetType(ResourceRequest::TargetIsWorker) again in Worker.cpp
        In chromium platform, the m_targettype value determines the priority of resource loaded.

        No new tests because this patch just deletes a repeated code, it can reduce code workload and can't impact any feature.
        If the target type isn't set correctly, the following test maybe fail because of timeout in the chromium.
        fast/workers/storage/multiple-transactions-on-different-handles.html
        fast/workers/storage/multiple-transactions-on-different-handles-sync.html
        fast/workers/storage/interrupt-database.html

        * workers/Worker.cpp:
        (WebCore::Worker::create):

2012-04-25  Yury Semikhatsky  <yurys@chromium.org>

        Web Inspector: move HeapSnapshotLoader into a separate file
        https://bugs.webkit.org/show_bug.cgi?id=84860

        Extracted HeapSnapshotLoader into its own file.

        Reviewed by Pavel Feldman.

        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * inspector/compile-front-end.py:
        * inspector/front-end/HeapSnapshot.js:
        * inspector/front-end/HeapSnapshotLoader.js: Added.
        (WebInspector.HeapSnapshotLoader):
        (WebInspector.HeapSnapshotLoader.prototype._findBalancedCurlyBrackets):
        (WebInspector.HeapSnapshotLoader.prototype.finishLoading):
        (WebInspector.HeapSnapshotLoader.prototype._parseUintArray):
        (WebInspector.HeapSnapshotLoader.prototype._parseStringsArray):
        (WebInspector.HeapSnapshotLoader.prototype.pushJSONChunk):
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/inspector.html:

2012-04-25  'Pavel Feldman'  <pfeldman@chromium.org>

        Not reviewed: inspector frontend tests fix.

        * inspector/front-end/ScriptsSearchScope.js:

2012-04-25  Ian Vollick  <vollick@chromium.org>

        [chromium] Animations waiting for a synchronized start time should never be marked finished.
        https://bugs.webkit.org/show_bug.cgi?id=84519

        Reviewed by James Robinson.

        Tested in CCLayerAnimationControllerTest.AnimationsWaitingForStartTimeDoNotFinishIfTheyWaitLongerToStartThanTheirDuration

        * platform/graphics/chromium/cc/CCLayerAnimationController.cpp:
        (WebCore::CCLayerAnimationController::tickAnimations):

2012-04-25  Pierre Rossi  <pierre.rossi@gmail.com>

        [SVG] Nothing should be stroked when the stroke-width is 0
        https://bugs.webkit.org/show_bug.cgi?id=83568

        Reviewed by Nikolas Zimmermann.

        The spec states that "A zero value causes no stroke to be painted".
        We should avoid calling functions that could incorrectly paint something
        in that case.

        Test: svg/custom/path-zero-strokewidth.svg

        * rendering/style/SVGRenderStyle.h:
        (WebCore::SVGRenderStyle::hasVisibleStroke):
        * rendering/svg/RenderSVGEllipse.cpp:
        (WebCore::RenderSVGEllipse::strokeShape): Check if the stroke should be visible before painting.
        * rendering/svg/RenderSVGRect.cpp:
        (WebCore::RenderSVGRect::strokeShape): Ditto.
        * rendering/svg/RenderSVGShape.cpp:
        (WebCore::RenderSVGShape::strokeShape): Ditto.
        (WebCore::RenderSVGShape::strokePath): Ditto.
        * rendering/svg/SVGInlineTextBox.cpp:
        (WebCore::SVGInlineTextBox::paint): Dont call paintText for zero-width stroke.
        (WebCore::SVGInlineTextBox::paintDecoration): Ditto.

2012-04-25  Alexis Menard  <alexis.menard@openbossa.org>

        Unfortunately http://trac.webkit.org/changeset/115055 was landed using webkit-patch
        land-from bug but didn't do the right thing, we lost the history.

        This commit is merging back CSSStyleApplyProperty.* and their history, rename the files
        to StyleBuilder and re-apply the two patches on trunk that were apply after the rename.

        Rename CSSStyleSelector class to StyleResolver.
        https://bugs.webkit.org/show_bug.cgi?id=84734

        The name CSSStyleSelector is confusing as it conflicts a bit with
        the CSS concept of selectors. One could think it's an encapsulation
        of the CSS selectors but it's not, in fact this class is responsible
        of finding the RenderStyle for a given element. This is the first patch
        as I will later rename the files, and then rename the local variables.

        Replace occurences of style selector from variables and methods names by style resolver.
        https://bugs.webkit.org/show_bug.cgi?id=84765
        
        Rename methods and variables to follow the new name StyleResolver. It requires to update the
        local variables, methods parameters, and function names to match the new name and to remove
        the concept of "selector" to avoid clashing with the CSS concept. The next and last patch
        will be to rename CSSStyleSelector file and update the includes.

        * css/StyleBuilder.cpp: Replaced with Source/WebCore/css/CSSStyleApplyProperty.cpp.
        (WebCore::ApplyPropertyExpanding::applyInheritValue):
        (WebCore::ApplyPropertyExpanding::applyInitialValue):
        (WebCore::ApplyPropertyExpanding::applyValue):
        (WebCore::ApplyPropertyDefaultBase::applyInheritValue):
        (WebCore::ApplyPropertyDefaultBase::applyInitialValue):
        (WebCore::ApplyPropertyDefaultBase::applyValue):
        (WebCore::ApplyPropertyDefault::applyValue):
        (WebCore::ApplyPropertyNumber::applyValue):
        (WebCore::ApplyPropertyStyleImage::applyValue):
        (WebCore::ApplyPropertyAuto::applyInheritValue):
        (WebCore::ApplyPropertyAuto::applyInitialValue):
        (WebCore::ApplyPropertyAuto::applyValue):
        (WebCore::ApplyPropertyClip::convertToLength):
        (WebCore::ApplyPropertyClip::applyInheritValue):
        (WebCore::ApplyPropertyClip::applyInitialValue):
        (WebCore::ApplyPropertyClip::applyValue):
        (WebCore::ApplyPropertyColor::applyInheritValue):
        (WebCore::ApplyPropertyColor::applyInitialValue):
        (WebCore::ApplyPropertyColor::applyValue):
        (WebCore::ApplyPropertyColor::applyColorValue):
        (WebCore::ApplyPropertyDirection::applyValue):
        (WebCore::ApplyPropertyLength::applyValue):
        (WebCore::ApplyPropertyString::applyValue):
        (WebCore::ApplyPropertyBorderRadius::applyValue):
        (WebCore::ApplyPropertyFillLayer::applyInheritValue):
        (WebCore::ApplyPropertyFillLayer::applyInitialValue):
        (WebCore::ApplyPropertyFillLayer::applyValue):
        (WebCore::ApplyPropertyComputeLength::applyValue):
        (WebCore::ApplyPropertyFont::applyInheritValue):
        (WebCore::ApplyPropertyFont::applyInitialValue):
        (WebCore::ApplyPropertyFont::applyValue):
        (WebCore::ApplyPropertyFontSize::applyInheritValue):
        (WebCore::ApplyPropertyFontSize::applyInitialValue):
        (WebCore::ApplyPropertyFontSize::applyValue):
        (WebCore::ApplyPropertyFontWeight::applyValue):
        (WebCore::ApplyPropertyFontVariantLigatures::applyInheritValue):
        (WebCore::ApplyPropertyFontVariantLigatures::applyInitialValue):
        (WebCore::ApplyPropertyFontVariantLigatures::applyValue):
        (WebCore::ApplyPropertyBorderImage::applyValue):
        (WebCore::ApplyPropertyBorderImageModifier::applyInheritValue):
        (WebCore::ApplyPropertyBorderImageModifier::applyInitialValue):
        (WebCore::ApplyPropertyBorderImageModifier::applyValue):
        (WebCore::ApplyPropertyBorderImageSource::applyValue):
        (WebCore::ApplyPropertyCounter::emptyFunction):
        (WebCore::ApplyPropertyCounter::applyInheritValue):
        (WebCore::ApplyPropertyCounter::applyValue):
        (WebCore::ApplyPropertyCursor::applyInheritValue):
        (WebCore::ApplyPropertyCursor::applyInitialValue):
        (WebCore::ApplyPropertyCursor::applyValue):
        (WebCore::ApplyPropertyTextAlign::applyValue):
        (WebCore::ApplyPropertyTextDecoration::applyValue):
        (WebCore::ApplyPropertyUnicodeBidi::applyValue):
        (WebCore::ApplyPropertyLineHeight::applyValue):
        (WebCore::ApplyPropertyPageSize::applyInheritValue):
        (WebCore::ApplyPropertyPageSize::applyInitialValue):
        (WebCore::ApplyPropertyPageSize::applyValue):
        (WebCore::ApplyPropertyTextEmphasisStyle::applyInheritValue):
        (WebCore::ApplyPropertyTextEmphasisStyle::applyInitialValue):
        (WebCore::ApplyPropertyTextEmphasisStyle::applyValue):
        (WebCore):
        (WebCore::ApplyPropertyAnimation::map):
        (WebCore::ApplyPropertyAnimation::applyInheritValue):
        (WebCore::ApplyPropertyAnimation::applyInitialValue):
        (WebCore::ApplyPropertyAnimation::applyValue):
        (WebCore::ApplyPropertyOutlineStyle::applyInheritValue):
        (WebCore::ApplyPropertyOutlineStyle::applyInitialValue):
        (WebCore::ApplyPropertyOutlineStyle::applyValue):
        (WebCore::ApplyPropertyResize::applyValue):
        (WebCore::ApplyPropertyVerticalAlign::applyValue):
        (WebCore::ApplyPropertyAspectRatio::applyInheritValue):
        (WebCore::ApplyPropertyAspectRatio::applyInitialValue):
        (WebCore::ApplyPropertyAspectRatio::applyValue):
        (WebCore::ApplyPropertyZoom::resetEffectiveZoom):
        (WebCore::ApplyPropertyZoom::applyInheritValue):
        (WebCore::ApplyPropertyZoom::applyInitialValue):
        (WebCore::ApplyPropertyZoom::applyValue):
        (WebCore::ApplyPropertyDisplay::isValidDisplayValue):
        (WebCore::ApplyPropertyDisplay::applyInheritValue):
        (WebCore::ApplyPropertyDisplay::applyInitialValue):
        (WebCore::ApplyPropertyDisplay::applyValue):
        (WebCore::ApplyPropertyFlex::applyInheritValue):
        (WebCore::ApplyPropertyFlex::applyInitialValue):
        (WebCore::ApplyPropertyFlex::applyValue):
        (WebCore::StyleBuilder::StyleBuilder):
        * css/StyleBuilder.h: Replaced with Source/WebCore/css/CSSStyleApplyProperty.h.
        (WebCore):
        (PropertyHandler):
        (WebCore::PropertyHandler::applyInheritValue):
        (WebCore::PropertyHandler::applyInitialValue):
        (WebCore::PropertyHandler::applyValue):

2012-04-25  Eric Carlson  <eric.carlson@apple.com>

        Not reviewed, fix Windows build after r115165.

        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::updateCompositingLayers): Initialize logging variable.

2012-04-25  Florin Malita  <fmalita@chromium.org>

        [Coverity] Uninitialized fields in RenderSVGShape constructors
        https://bugs.webkit.org/show_bug.cgi?id=84749

        Reviewed by Darin Adler.

        Removing unused RenderSVGShape constructor and field.

        No new tests - no behavior change.

        * rendering/svg/RenderSVGShape.cpp:
        * rendering/svg/RenderSVGShape.h:
        (RenderSVGShape):

2012-04-25  'Pavel Feldman'  <pfeldman@chromium.org>

        Not reviewed: follow up to r115194, removed debug output.

        * inspector/front-end/DebuggerPresentationModel.js:
        (WebInspector.DebuggerPresentationModel.prototype._parsedScriptSource):

2012-04-25  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: extract Linkifier from DebuggerPresentationModel.
        https://bugs.webkit.org/show_bug.cgi?id=84855

        Reviewed by Yury Semikhatsky.

        There is nothing Linkifier needs from the model, extracting as a top-level class.

        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * inspector/compile-front-end.py:
        * inspector/front-end/ConsoleMessage.js:
        * inspector/front-end/ConsoleView.js:
        (WebInspector.ConsoleView):
        * inspector/front-end/DebuggerPresentationModel.js:
        * inspector/front-end/EventListenersSidebarPane.js:
        * inspector/front-end/Linkifier.js: Added.
        (WebInspector.LinkifierFormatter):
        (WebInspector.LinkifierFormatter.prototype.formatLiveAnchor):
        (WebInspector.Linkifier):
        (WebInspector.Linkifier.prototype.linkifyLocation):
        (WebInspector.Linkifier.prototype.linkifyRawLocation):
        (WebInspector.Linkifier.prototype.reset):
        (WebInspector.Linkifier.prototype._updateAnchor):
        (WebInspector.Linkifier.DefaultFormatter):
        (WebInspector.Linkifier.DefaultFormatter.prototype.formatLiveAnchor):
        * inspector/front-end/NetworkPanel.js:
        * inspector/front-end/ObjectPopoverHelper.js:
        (WebInspector.ObjectPopoverHelper.prototype._showObjectPopover.showObjectPopover.):
        (WebInspector.ObjectPopoverHelper.prototype._showObjectPopover):
        * inspector/front-end/ProfileView.js:
        * inspector/front-end/ScriptsSearchScope.js:
        (WebInspector.ScriptsSearchResultsPane):
        * inspector/front-end/TimelinePresentationModel.js:
        (WebInspector.TimelinePresentationModel):
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/inspector.html:

2012-04-25  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: move sourcemap-agnostic part of the debugger presentation model into the raw debugger.
        https://bugs.webkit.org/show_bug.cgi?id=84852

        Reviewed by Yury Semikhatsky.

        There is no need to keep that much debugging functionality in the debugger presentation model.
        It all perfectly applies to the raw script debugger. Methods for selecting call frames, activating breakpoints
        and paused details were moved to the WebInspector.DebuggerModel.

        * inspector/front-end/BreakpointManager.js:
        (WebInspector.BreakpointManager.prototype._removeBreakpointFromUI):
        * inspector/front-end/CallStackSidebarPane.js:
        (WebInspector.CallStackSidebarPane):
        (WebInspector.CallStackSidebarPane.prototype.update):
        (WebInspector.CallStackSidebarPane.prototype.setSelectedCallFrame):
        (WebInspector.CallStackSidebarPane.prototype._selectedCallFrameIndex):
        (WebInspector.CallStackSidebarPane.prototype._placardSelected):
        (WebInspector.CallStackSidebarPane.Placard):
        (WebInspector.CallStackSidebarPane.Placard.prototype._update):
        * inspector/front-end/ConsoleView.js:
        * inspector/front-end/DebuggerModel.js:
        (WebInspector.DebuggerModel.prototype._globalObjectCleared):
        (WebInspector.DebuggerModel.prototype._didEditScriptSource):
        (WebInspector.DebuggerModel.prototype._setDebuggerPausedDetails):
        (WebInspector.DebuggerModel.prototype._pausedScript):
        (WebInspector.DebuggerModel.prototype._resumedScript):
        (WebInspector.DebuggerModel.prototype.isPaused):
        (WebInspector.DebuggerModel.prototype.setSelectedCallFrame.updateExecutionLine):
        (WebInspector.DebuggerModel.prototype.setSelectedCallFrame):
        (WebInspector.DebuggerModel.prototype.selectedCallFrame):
        (WebInspector.DebuggerModel.prototype.evaluateOnSelectedCallFrame):
        (WebInspector.DebuggerModel.prototype.getSelectedCallFrameVariables.propertiesCollected):
        (WebInspector.DebuggerModel.prototype.getSelectedCallFrameVariables):
        (WebInspector.DebuggerModel.prototype.setBreakpointsActive):
        (WebInspector.DebuggerModel.prototype.breakpointsActive):
        (WebInspector.DebuggerModel.CallFrame):
        (WebInspector.DebuggerModel.CallFrame.prototype.get script):
        (WebInspector.DebuggerModel.CallFrame.prototype.get type):
        (WebInspector.DebuggerModel.CallFrame.prototype.get scopeChain):
        (WebInspector.DebuggerModel.CallFrame.prototype.get this):
        (WebInspector.DebuggerModel.CallFrame.prototype.get functionName):
        (WebInspector.DebuggerModel.CallFrame.prototype.get location):
        (WebInspector.DebuggerModel.CallFrame.prototype.evaluate):
        (WebInspector.DebuggerModel.CallFrame.prototype.createLiveLocation):
        (WebInspector.DebuggerModel.CallFrame.prototype.dispose):
        (WebInspector.DebuggerPausedDetails):
        (WebInspector.DebuggerPausedDetails.prototype.dispose):
        * inspector/front-end/DebuggerPresentationModel.js:
        (WebInspector.DebuggerPresentationModel):
        (WebInspector.DebuggerPresentationModel.prototype.createLiveLocation):
        (WebInspector.DebuggerPresentationModel.prototype._parsedScriptSource):
        (WebInspector.DebuggerPresentationModel.prototype._callFrameSelected):
        (WebInspector.DebuggerPresentationModel.prototype.setScriptSource.didEditScriptSource):
        (WebInspector.DebuggerPresentationModel.prototype.setScriptSource):
        (WebInspector.DebuggerPresentationModel.prototype._debuggerReset):
        * inspector/front-end/JavaScriptSource.js:
        (WebInspector.JavaScriptSource.prototype.setBreakpoint):
        * inspector/front-end/JavaScriptSourceFrame.js:
        (WebInspector.JavaScriptSourceFrame.prototype._resolveObjectForPopover):
        * inspector/front-end/Script.js:
        (WebInspector.Script.prototype.setSourceMapping):
        (WebInspector.Script.prototype.createLiveLocation):
        (WebInspector.Script.Location.prototype.update):
        * inspector/front-end/ScriptMapping.js:
        (WebInspector.LiveLocation):
        (WebInspector.LiveLocation.prototype.update):
        (WebInspector.LiveLocation.prototype.dispose):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype._consoleCommandEvaluatedInSelectedCallFrame):
        (WebInspector.ScriptsPanel.prototype._debuggerPaused):
        (WebInspector.ScriptsPanel.prototype._callFrameSelected):
        (WebInspector.ScriptsPanel.prototype._toggleBreakpointsClicked):
        * inspector/front-end/UISourceCode.js:

2012-04-25  Yury Semikhatsky  <yurys@chromium.org>

        Web Inspector: use composite node provider for diff nodes in heap profiler
        https://bugs.webkit.org/show_bug.cgi?id=84849

        Inroduced HeapSnapshotDiffNodesProvider which is basically a composite provider
        combining providers for added and deleted nodes. This allowed to remove custom
        implementation of HeapSnapshotGridNode.prototype.populateChildren.

        Reviewed by Pavel Feldman.

        * inspector/front-end/HeapSnapshot.js:
        (WebInspector.HeapSnapshotNodesProvider.prototype.sort.sortByNodeField): moved index assignment to sortByComparator
        so that it is done only once.
        (WebInspector.HeapSnapshotNodesProvider.prototype.sort.sortByComparator):
        (WebInspector.HeapSnapshotNodesProvider.prototype.sort):
        * inspector/front-end/HeapSnapshotGridNodes.js:
        (WebInspector.HeapSnapshotGridNode):
        (WebInspector.HeapSnapshotGridNode.prototype.populateChildren.callSerialize):
        (WebInspector.HeapSnapshotGridNode.prototype.populateChildren.childrenRetrieved.notify):
        (WebInspector.HeapSnapshotGridNode.prototype.populateChildren.childrenRetrieved):
        (WebInspector.HeapSnapshotGridNode.prototype.populateChildren):
        (WebInspector.HeapSnapshotGridNode.prototype.sort.afterSort):
        (WebInspector.HeapSnapshotGridNode.prototype.sort):
        (WebInspector.HeapSnapshotDiffNodesProvider):
        (WebInspector.HeapSnapshotDiffNodesProvider.prototype.dispose):
        (WebInspector.HeapSnapshotDiffNodesProvider.prototype.isEmpty):
        (WebInspector.HeapSnapshotDiffNodesProvider.prototype.serializeNextItems):
        (WebInspector.HeapSnapshotDiffNodesProvider.prototype.serializeNextItems.didReceiveDeletedItems):
        (WebInspector.HeapSnapshotDiffNodesProvider.prototype.serializeNextItems.didReceiveAddedItems):
        (WebInspector.HeapSnapshotDiffNodesProvider.prototype.sortAndRewind.afterSort):
        (WebInspector.HeapSnapshotDiffNodesProvider.prototype.sortAndRewind):
        (WebInspector.HeapSnapshotDiffNode):
        (WebInspector.HeapSnapshotDiffNode._createProvider):
        (WebInspector.HeapSnapshotDiffNode.prototype._createChildNode):

2012-04-25  Nikolas Zimmermann  <nzimmermann@rim.com>

        Refactor to/from/animatedType creation, to share more code between animators
        https://bugs.webkit.org/show_bug.cgi?id=84846

        Reviewed by Antti Koivisto.

        Share more code bewteen animators, doesn't change functionality yet, except for one bug in SVGAnimatedString.
        SVGAnimatedString used to mutate the from/to values during animation, leading to problems in animate-element-31-t.svg.
        It now needs a rebaseline, now that this bug is fixed as side-effect.

        * svg/SVGAnimateColorElement.cpp:
        (WebCore::attributeValueIsCurrentColor):
        (WebCore::SVGAnimateColorElement::determinePropertyValueTypes):
        (WebCore):
        * svg/SVGAnimateColorElement.h:
        (SVGAnimateColorElement):
        * svg/SVGAnimateElement.cpp:
        (WebCore::SVGAnimateElement::SVGAnimateElement):
        * svg/SVGAnimateElement.h:
        (SVGAnimateElement):
        * svg/SVGAnimatedAngle.cpp:
        (WebCore::SVGAnimatedAngleAnimator::calculateAnimatedValue):
        * svg/SVGAnimatedBoolean.cpp:
        (WebCore::SVGAnimatedBooleanAnimator::calculateAnimatedValue):
        * svg/SVGAnimatedColor.cpp:
        (WebCore::adjustForCurrentColor):
        (WebCore):
        (WebCore::parseColorFromString):
        (WebCore::SVGAnimatedColorAnimator::calculateAnimatedValue):
        * svg/SVGAnimatedEnumeration.cpp:
        (WebCore::SVGAnimatedEnumerationAnimator::calculateAnimatedValue):
        * svg/SVGAnimatedInteger.cpp:
        (WebCore::SVGAnimatedIntegerAnimator::calculateAnimatedInteger):
        (WebCore::SVGAnimatedIntegerAnimator::calculateAnimatedValue):
        * svg/SVGAnimatedIntegerOptionalInteger.cpp:
        (WebCore::SVGAnimatedIntegerOptionalIntegerAnimator::calculateAnimatedValue):
        * svg/SVGAnimatedLength.cpp:
        (WebCore::parseLengthFromString):
        (WebCore):
        (WebCore::SVGAnimatedLengthAnimator::calculateAnimatedValue):
        * svg/SVGAnimatedLengthList.cpp:
        (WebCore::parseLengthListFromString):
        (WebCore):
        (WebCore::SVGAnimatedLengthListAnimator::calculateAnimatedValue):
        * svg/SVGAnimatedNumber.cpp:
        (WebCore::parseNumberFromString):
        (WebCore):
        (WebCore::SVGAnimatedNumberAnimator::calculateAnimatedValue):
        * svg/SVGAnimatedNumberList.cpp:
        (WebCore::SVGAnimatedNumberListAnimator::calculateAnimatedValue):
        * svg/SVGAnimatedNumberOptionalNumber.cpp:
        (WebCore::SVGAnimatedNumberOptionalNumberAnimator::calculateAnimatedValue):
        * svg/SVGAnimatedPointList.cpp:
        (WebCore::SVGAnimatedPointListAnimator::calculateAnimatedValue):
        * svg/SVGAnimatedPreserveAspectRatio.cpp:
        (WebCore::SVGAnimatedPreserveAspectRatioAnimator::calculateAnimatedValue):
        * svg/SVGAnimatedRect.cpp:
        (WebCore::SVGAnimatedRectAnimator::calculateAnimatedValue):
        * svg/SVGAnimatedString.cpp:
        (WebCore::parseStringFromString):
        (WebCore):
        (WebCore::SVGAnimatedStringAnimator::calculateAnimatedValue):
        * svg/SVGAnimatedTransformList.cpp:
        (WebCore::SVGAnimatedTransformListAnimator::calculateAnimatedValue):
        * svg/SVGAnimationElement.cpp:
        (WebCore::SVGAnimationElement::SVGAnimationElement):
        (WebCore::SVGAnimationElement::adjustForInheritance):
        (WebCore):
        (WebCore::inheritsFromProperty):
        (WebCore::SVGAnimationElement::determinePropertyValueTypes):
        * svg/SVGAnimationElement.h:
        (WebCore::SVGAnimationElement::fromPropertyValueType):
        (WebCore::SVGAnimationElement::toPropertyValueType):
        (SVGAnimationElement):
        (WebCore::SVGAnimationElement::adjustForInheritance):
        (WebCore::SVGAnimationElement::adjustFromToValues):
        (WebCore::SVGAnimationElement::adjustFromToListValues):

2012-04-25  Nikolas Zimmermann  <nzimmermann@rim.com>

        Share single calculateFromToValues/calculateFromByValues between all SVGAnimatedTypeAnimators
        https://bugs.webkit.org/show_bug.cgi?id=84832

        Reviewed by Antti Koivisto.

        calculateFromAndToValues / calculateFromAndByValues don't need to be spread across all SVGAnimatedTypeAnimators.
        Centralize these new implementations in SVGAnimatedTypeAnimator.h. Refactored addAnimatedTypes() from constructFromAndByValues.

        calculateFromAndToValues:
            from = constructFromString(fromString)
            to = constructFromString(toString)
        
        calculateFromAndByValues:
            from = constructFromString(fromString)
            to = constructFromString(byString)
            addAnimatedTypes(from, to)

        Doesn't affect any tests, just refactors code.

        * svg/SVGAnimateElement.cpp:
        (WebCore::SVGAnimateElement::calculateFromAndToValues):
        (WebCore::SVGAnimateElement::calculateFromAndByValues):
        * svg/SVGAnimatedAngle.cpp:
        (WebCore::SVGAnimatedAngleAnimator::addAnimatedTypes):
        * svg/SVGAnimatedAngle.h:
        (SVGAnimatedAngleAnimator):
        * svg/SVGAnimatedBoolean.cpp:
        (WebCore::SVGAnimatedBooleanAnimator::addAnimatedTypes):
        * svg/SVGAnimatedBoolean.h:
        (SVGAnimatedBooleanAnimator):
        * svg/SVGAnimatedColor.cpp:
        (WebCore::SVGAnimatedColorAnimator::addAnimatedTypes):
        * svg/SVGAnimatedColor.h:
        (SVGAnimatedColorAnimator):
        * svg/SVGAnimatedEnumeration.cpp:
        (WebCore::SVGAnimatedEnumerationAnimator::addAnimatedTypes):
        * svg/SVGAnimatedEnumeration.h:
        (SVGAnimatedEnumerationAnimator):
        * svg/SVGAnimatedInteger.cpp:
        (WebCore::SVGAnimatedIntegerAnimator::addAnimatedTypes):
        * svg/SVGAnimatedInteger.h:
        (SVGAnimatedIntegerAnimator):
        * svg/SVGAnimatedIntegerOptionalInteger.cpp:
        (WebCore::SVGAnimatedIntegerOptionalIntegerAnimator::addAnimatedTypes):
        * svg/SVGAnimatedIntegerOptionalInteger.h:
        (SVGAnimatedIntegerOptionalIntegerAnimator):
        * svg/SVGAnimatedLength.cpp:
        (WebCore::SVGAnimatedLengthAnimator::addAnimatedTypes):
        * svg/SVGAnimatedLength.h:
        (SVGAnimatedLengthAnimator):
        * svg/SVGAnimatedLengthList.cpp:
        (WebCore::SVGAnimatedLengthListAnimator::addAnimatedTypes):
        * svg/SVGAnimatedLengthList.h:
        (SVGAnimatedLengthListAnimator):
        * svg/SVGAnimatedNumber.cpp:
        (WebCore::SVGAnimatedNumberAnimator::addAnimatedTypes):
        * svg/SVGAnimatedNumber.h:
        (SVGAnimatedNumberAnimator):
        * svg/SVGAnimatedNumberList.cpp:
        (WebCore::SVGAnimatedNumberListAnimator::addAnimatedTypes):
        * svg/SVGAnimatedNumberList.h:
        (SVGAnimatedNumberListAnimator):
        * svg/SVGAnimatedNumberOptionalNumber.cpp:
        (WebCore::SVGAnimatedNumberOptionalNumberAnimator::addAnimatedTypes):
        * svg/SVGAnimatedNumberOptionalNumber.h:
        (SVGAnimatedNumberOptionalNumberAnimator):
        * svg/SVGAnimatedPath.cpp:
        (WebCore::SVGAnimatedPathAnimator::constructFromString):
        (WebCore::SVGAnimatedPathAnimator::addAnimatedTypes):
        * svg/SVGAnimatedPath.h:
        (SVGAnimatedPathAnimator):
        * svg/SVGAnimatedPointList.cpp:
        (WebCore::SVGAnimatedPointListAnimator::addAnimatedTypes):
        * svg/SVGAnimatedPointList.h:
        (SVGAnimatedPointListAnimator):
        * svg/SVGAnimatedPreserveAspectRatio.cpp:
        (WebCore::SVGAnimatedPreserveAspectRatioAnimator::addAnimatedTypes):
        * svg/SVGAnimatedPreserveAspectRatio.h:
        (SVGAnimatedPreserveAspectRatioAnimator):
        * svg/SVGAnimatedRect.cpp:
        (WebCore::SVGAnimatedRectAnimator::addAnimatedTypes):
        * svg/SVGAnimatedRect.h:
        (SVGAnimatedRectAnimator):
        * svg/SVGAnimatedString.cpp:
        (WebCore::SVGAnimatedStringAnimator::addAnimatedTypes):
        * svg/SVGAnimatedString.h:
        (SVGAnimatedStringAnimator):
        * svg/SVGAnimatedTransformList.cpp:
        (WebCore::SVGAnimatedTransformListAnimator::SVGAnimatedTransformListAnimator):
        (WebCore::SVGAnimatedTransformListAnimator::constructFromString):
        (WebCore::SVGAnimatedTransformListAnimator::addAnimatedTypes):
        (WebCore::SVGAnimatedTransformListAnimator::calculateDistance):
        * svg/SVGAnimatedTransformList.h:
        (SVGAnimatedTransformListAnimator):
        * svg/SVGAnimatedTypeAnimator.h:
        (SVGAnimatedTypeAnimator):
        (WebCore::SVGAnimatedTypeAnimator::calculateFromAndToValues):
        (WebCore::SVGAnimatedTypeAnimator::calculateFromAndByValues):
        (WebCore::SVGAnimatedTypeAnimator::setContextElement):

2012-04-25  Andreas Kling  <kling@webkit.org>

        Shrink RenderText by 8 bytes on 64-bit.
        <http://webkit.org/b/84828>

        Reviewed by Maciej Stachowiak.

        Reorder the members so that the bits in RenderText falls into the padding at
        the end of RenderObject on 64-bit. Updated the compile-time size assertion to
        account for the new object structure.

        This shrinks RenderText from 104 to 96 bytes on 64-bit release builds.

        * rendering/RenderText.cpp:
        (SameSizeAsRenderText):
        (WebCore::RenderText::RenderText):
        * rendering/RenderText.h:
        (RenderText):

2012-04-25  Raymond Toy  <rtoy@google.com>

        No audio from MediaElementAudioSourceNode
        https://bugs.webkit.org/show_bug.cgi?id=84669

        MediaElementAudioSourceNode needs custom propagatesSilence() to
        return false to indicate the node never propagates silence.
        
        Reviewed by Chris Rogers.

        * Modules/webaudio/MediaElementAudioSourceNode.h:
        (MediaElementAudioSourceNode): Add propagatesSilence().

2012-04-25  Xianzhu Wang  <wangxianzhu@chromium.org>

        Web Inspector: Incorrect highlight position of inspected element in a scrolled page
        https://bugs.webkit.org/show_bug.cgi?id=84755

        Reviewed by Pavel Feldman.

        Test: inspector/elements/highlight-node-scroll.html

        * inspector/DOMNodeHighlighter.cpp: Ensures the highlight position is in page coordinates.

2012-04-24  Yury Semikhatsky  <yurys@chromium.org>

        Unreviewed. Revert part of the change r115063 which commented out
        real worker creation. It was commited by mistake.

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

2012-04-24  Jon Lee  <jonlee@apple.com>

        New Notification constructor do not take into account security origin permissions
        https://bugs.webkit.org/show_bug.cgi?id=84825
        <rdar://problem/11315405>

        Reviewed by Darin Adler.

        Tests requires support for notifications on Mac (see 79492).

        When the task timer fires, we should check to see that the notification has permission
        to show. If not, we fire the onError event.

        * notifications/Notification.cpp:
        (WebCore::Notification::Notification): Since the timer may show, or call the onerror event,
        we rename it from m_showTaskTimer. to m_taskTimer.
        (WebCore::Notification::dispatchErrorEvent): The default constructor of ErrorEvent doesn't
        create the proper event object. Create it using Event::create().
        (WebCore::Notification::taskTimerFired): Check to see that we have permission first.
        * notifications/Notification.h:
        (Notification):

2012-04-24  Simon Fraser  <simon.fraser@apple.com>

        Add a logging channel and some ouput for compositing
        https://bugs.webkit.org/show_bug.cgi?id=84817

        Reviewed by Darin Adler.

        Add a logging channel called "Compositing".
        
        Output useful information to this channel, including
        a line for each composited layer, its composited bounds,
        the reason it was composited, the backing store megapixels,
        and a count of total composited layers and total backing
        store megapixels.

        * platform/Logging.cpp:
        (WebCore):
        (WebCore::getChannelFromName):
        * platform/Logging.h:
        (WebCore):
        * platform/graphics/GraphicsLayer.cpp:
        (WebCore::GraphicsLayer::backingStoreArea):
        * platform/graphics/GraphicsLayer.h:
        (GraphicsLayer):
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::backingStoreArea):
        (WebCore):
        * platform/graphics/ca/GraphicsLayerCA.h:
        (GraphicsLayerCA):
        * platform/mac/LoggingMac.mm:
        (WebCore::initializeLoggingChannelsIfNecessary):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::nameForLayer):
        (WebCore::RenderLayerBacking::backingStoreArea):
        (WebCore):
        * rendering/RenderLayerBacking.h:
        (RenderLayerBacking):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore):
        (WebCore::compositingLogEnabled):
        (WebCore::RenderLayerCompositor::RenderLayerCompositor):
        (WebCore::RenderLayerCompositor::updateCompositingLayers):
        (WebCore::RenderLayerCompositor::logCompositingInfo):
        (WebCore::RenderLayerCompositor::rebuildCompositingLayerTree):
        (WebCore::RenderLayerCompositor::updateLayerTreeGeometry):
        (WebCore::RenderLayerCompositor::reasonForCompositing):
        * rendering/RenderLayerCompositor.h:
        (RenderLayerCompositor):

2012-04-24  Kulanthaivel Palanichamy  <kulanthaivel@codeaurora.org>

        getMatchedCSSRules() should return null when the second argument is an unrecognized pseudo-element name
        https://bugs.webkit.org/show_bug.cgi?id=83298

        Reviewed by Ojan Vafai.

        I couldn't find any specification or any meaningful discussion on this API, but I
        assume that it shouldn't be any different from window.getComputedStyle()
        as far as the parameters are concerned.

        Test: fast/dom/Window/getMatchedCSSRules-with-invalid-pseudo-elements.html

        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::getMatchedCSSRules):
        * page/DOMWindow.idl:

2012-04-24  Anders Carlsson  <andersca@apple.com>

        overflow: hidden on the main frame is broken with threaded scrolling
        https://bugs.webkit.org/show_bug.cgi?id=84819
        <rdar://problem/10920677>

        Reviewed by Darin Adler.

        Pass along the horizontal and vertical scrollbar modes to the scrolling tree and use it
        to determine if wheel events should be handled or not. This matches what we do for non-threaded scrolling.

        * page/scrolling/ScrollingCoordinator.cpp:
        (WebCore::ScrollingCoordinator::frameViewLayoutUpdated):
        (WebCore::ScrollingCoordinator::setScrollParameters):
        * page/scrolling/ScrollingCoordinator.h:
        (ScrollParameters):
        * page/scrolling/ScrollingTreeNode.cpp:
        (WebCore::ScrollingTreeNode::ScrollingTreeNode):
        (WebCore::ScrollingTreeNode::update):
        * page/scrolling/ScrollingTreeNode.h:
        (WebCore::ScrollingTreeNode::canHaveScrollbars):
        (ScrollingTreeNode):
        * page/scrolling/ScrollingTreeState.cpp:
        (WebCore::ScrollingTreeState::ScrollingTreeState):
        (WebCore::ScrollingTreeState::setHorizontalScrollbarMode):
        (WebCore):
        (WebCore::ScrollingTreeState::setVerticalScrollbarMode):
        * page/scrolling/ScrollingTreeState.h:
        (WebCore::ScrollingTreeState::horizontalScrollbarMode):
        (ScrollingTreeState):
        (WebCore::ScrollingTreeState::verticalScrollbarMode):
        * page/scrolling/mac/ScrollingTreeNodeMac.mm:
        (WebCore::ScrollingTreeNodeMac::handleWheelEvent):

2012-04-24  Adrienne Walker  <enne@google.com>

        [chromium] Don't call calculateRenderPasses in CCLayerTreeHostImpl::scrollBegin()
        https://bugs.webkit.org/show_bug.cgi?id=84807

        Reviewed by James Robinson.

        Instead of calculate render passes and quads and tracking damage,
        simply calculate the updated render layer list, which is what is
        needed for scrolling.  This prevents a willDraw/didDraw mismatch on
        layers.

        * platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:
        (WebCore::CCLayerTreeHostImpl::calculateRenderSurfaceLayerList):
        (WebCore):
        (WebCore::CCLayerTreeHostImpl::calculateRenderPasses):
        (WebCore::CCLayerTreeHostImpl::ensureMostRecentRenderSurfaceLayerList):
        * platform/graphics/chromium/cc/CCLayerTreeHostImpl.h:
        (CCLayerTreeHostImpl):

2012-04-24  Dana Jansens  <danakj@chromium.org>

        [chromium] Unbounded draws should use clip to limit their damage to opaque tracking
        https://bugs.webkit.org/show_bug.cgi?id=84494

        Reviewed by Adrienne Walker.

        Unit test: PlatformContextSkiaTest.UnboundedDrawsAreClipped

        * platform/graphics/skia/OpaqueRegionSkia.cpp:
        (WebCore::OpaqueRegionSkia::didDrawRect):
        (WebCore::OpaqueRegionSkia::didDrawPath):
        (WebCore::OpaqueRegionSkia::didDrawPoints):
        (WebCore::OpaqueRegionSkia::didDrawBounded):
        (WebCore::OpaqueRegionSkia::didDrawUnbounded):
        * platform/graphics/skia/OpaqueRegionSkia.h:
        (OpaqueRegionSkia):

2012-04-24  Alexis Menard  <alexis.menard@openbossa.org>

        Implement createTBody for table element.
        https://bugs.webkit.org/show_bug.cgi?id=84465

        Reviewed by Ojan Vafai.

        Implement createTBody of table element to allow creating tbodies from JS.
        It's following the specification http://dev.w3.org/html5/spec/the-table-element.html#dom-table-createtbody.

        Tests: fast/table/table-create-tbody-existing-tbody.html
               fast/table/table-create-tbody-multiple-tbody.html
               fast/table/table-create-tbody.html

        * html/HTMLTableElement.cpp:
        (WebCore::HTMLTableElement::createTBody):
        (WebCore):
        * html/HTMLTableElement.h:
        (HTMLTableElement):
        * html/HTMLTableElement.idl:

2012-04-24  Anders Carlsson  <andersca@apple.com>

        ScrollingCoordinator::setScrollParameters should take a single struct
        https://bugs.webkit.org/show_bug.cgi?id=84816

        Reviewed by Andreas Kling.

        * page/scrolling/ScrollingCoordinator.cpp:
        (WebCore::ScrollingCoordinator::frameViewLayoutUpdated):
        (WebCore::ScrollingCoordinator::setScrollParameters):
        * page/scrolling/ScrollingCoordinator.h:
        (ScrollingCoordinator):
        (ScrollParameters):
        * page/scrolling/ScrollingCoordinatorNone.cpp:
        (WebCore::ScrollingCoordinator::setScrollParameters):
        * page/scrolling/chromium/ScrollingCoordinatorChromium.cpp:
        (WebCore::ScrollingCoordinator::setScrollParameters):

2012-04-24  Adam Klein  <adamk@chromium.org>

        Remove unused undefined() method from ScriptValue
        https://bugs.webkit.org/show_bug.cgi?id=84751

        Reviewed by Kentaro Hara.

        * bindings/js/ScriptValue.h:
        (ScriptValue):
        * bindings/v8/ScriptValue.h:
        (ScriptValue):

2012-04-24  Yong Li  <yoli@rim.com>

        ASSERT failure in RenderLayer::computeRepaintRects
        https://bugs.webkit.org/show_bug.cgi?id=84480

        Reviewed by Simon Fraser.

        Update visibility status if necessary before updating
        compositing state in RenderLayer::styleChanged().

        No new tests because this is obviously right thing to do
        and creating new test seems too much for this small change.

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::styleChanged):

2012-04-24  Kent Tamura  <tkent@chromium.org>

        Calendar Picker: Open a calendar picker by keyboard operation
        https://bugs.webkit.org/show_bug.cgi?id=84680

        Reviewed by Kentaro Hara.

        - Open a calendar picker by the down arrow key.
        - Remove stepping down/up by keyboard and wheel operations.
          This behavior was for text fields with spin buttons. Because the date
        type doesn't have spin buttons, we should remove this behavior.

        No new tests for opening a calendar picker. This behavior is not
        testable by DRT yet. For removal of stepping up/down,
        fast/forms/date/date-stepup-stepdown-from-renderer.html is updated.

        * html/BaseDateAndTimeInputType.cpp:
        (WebCore::BaseDateAndTimeInputType::handleKeydownEvent):
        Check shouldHaveSpinButton() before spin button key operations.
        (WebCore::BaseDateAndTimeInputType::handleWheelEvent):
        Check shouldHaveSpinButton() before spin button wheel operations.
        * html/BaseDateAndTimeInputType.h:
        (BaseDateAndTimeInputType):
        Make handleKeydownEvent() protected because a subclass overrides it.
        * html/DateInputType.cpp:
        (WebCore::DateInputType::handleKeydownEvent):
        Open a calendar picker by the down arrow key.
        * html/DateInputType.h:
        (DateInputType): Add handleKeydownEvent() declaration.
        * html/shadow/CalendarPickerElement.h:
        (CalendarPickerElement): Make openPopup() public because DateInputType calls it.

2012-04-24  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r115099, r115102, and r115127.
        http://trac.webkit.org/changeset/115099
        http://trac.webkit.org/changeset/115102
        http://trac.webkit.org/changeset/115127
        https://bugs.webkit.org/show_bug.cgi?id=84809

        Made html5lib/runner.html crash, spot fix didn't help so
        rolling out so original author can do over. (Requested by
        kling on #webkit).

        * dom/Element.cpp:
        (WebCore::Element::parserSetAttributes):
        (WebCore::Element::normalizeAttributes):
        * dom/Element.h:
        (Element):
        * dom/ElementAttributeData.cpp:
        (WebCore::AttributeVector::removeAttribute):
        (WebCore):
        * dom/ElementAttributeData.h:
        (AttributeVector):
        (WebCore::AttributeVector::AttributeVector):
        (WebCore):
        (WebCore::AttributeVector::getAttributeItem):
        (WebCore::AttributeVector::getAttributeItemIndex):
        (WebCore::AttributeVector::insertAttribute):
        (WebCore::ElementAttributeData::getAttributeItem):
        (WebCore::ElementAttributeData::getAttributeItemIndex):
        (WebCore::ElementAttributeData::attributeVector):
        (WebCore::ElementAttributeData::clonedAttributeVector):
        (ElementAttributeData):
        * html/parser/HTMLConstructionSite.cpp:
        (WebCore::HTMLConstructionSite::createHTMLElementFromSavedElement):
        * html/parser/HTMLToken.h:
        (WebCore::AtomicHTMLToken::AtomicHTMLToken):
        * html/parser/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::processFakeStartTag):
        (WebCore::HTMLTreeBuilder::attributesForIsindexInput):
        * html/parser/HTMLTreeBuilder.h:
        * html/parser/TextDocumentParser.cpp:
        (WebCore::TextDocumentParser::insertFakePreElement):
        * xml/XMLErrors.cpp:
        (WebCore::createXHTMLParserErrorHeader):
        (WebCore::XMLErrors::insertErrorMessageBlock):
        * xml/parser/MarkupTokenBase.h:
        (WebCore::AtomicMarkupTokenBase::AtomicMarkupTokenBase):
        (WebCore::AtomicMarkupTokenBase::getAttributeItem):
        (WebCore::AtomicMarkupTokenBase::attributes):
        (AtomicMarkupTokenBase):
        (WebCore::::initializeAttributes):
        * xml/parser/XMLToken.h:
        (WebCore::AtomicXMLToken::AtomicXMLToken):

2012-04-24  Jeffrey Pfau  <jpfau@apple.com>

        Prevent drag and drop from setting file URLs
        https://bugs.webkit.org/show_bug.cgi?id=76596

        Reviewed by Enrica Casucci.

        Blacklisted file URLs from being set via dataTransfer.setData for specific types.

        * platform/mac/ClipboardMac.mm:
        (WebCore::ClipboardMac::setData):

2012-04-24  Enrica Casucci  <enrica@apple.com>

        REGRESSION (r109022) Safari not placing service data on pasteboard.
        https://bugs.webkit.org/show_bug.cgi?id=84766
        <rdar://problem/11085756>
        
        The support for OS X services requires that the write operations to
        the pasteboard occur synchronously. This behavior was changed with r109022.
        This change removes the original synchronous call to the WebProcess to perform
        the pasteboard write that had become asynchronous after r109022.
        It implements instead a synchronous call to retrive the content to be placed
        in the pasteboard.

        Reviewed by Alexey Proskuryakov.

        * WebCore.exp.in:
        * editing/Editor.h:
        * editing/mac/EditorMac.mm:
        (WebCore::Editor::writeSelectionToPasteboard):
        (WebCore::Editor::stringSelectionForPasteboard): Added.
        (WebCore::Editor::dataSelectionForPasteboard): Added.
        * platform/Pasteboard.h:
        * platform/mac/PasteboardMac.mm:
        (WebCore::Pasteboard::getStringSelection): Added.
        (WebCore::Pasteboard::getDataSelection): Added.
        (WebCore::Pasteboard::writeSelectionForTypes):
        (WebCore::Pasteboard::writeSelection):

2012-04-24  Dana Jansens  <danakj@chromium.org>

        [chromium] Image masks are considered opaque incorrectly
        https://bugs.webkit.org/show_bug.cgi?id=84275

        Reviewed by Adrienne Walker.

        Match the behaviour of SkCanvas layers more closely while tracking
        opaque paints. SkCanvas layers actually act as a separate device
        (ie. pixels) and when the layer is popped off, the pixels are copied
        down to the layer below.

        While we can use the total clip to decide what pixels the the
        drawing operation will affect in the final device, the blending
        down through layers needs to consider each layer carefully.

        In this case the image mask is drawn into a layer which is copied
        down using the DestinationIn operation. Since the layer contains
        non-opaque pixels, the DestinationIn copy can destroy opaque
        areas in the next layer. We add OpaqueRegionSkia::FillByCopy to
        distinguish the case where we are copying a block of pixels, and the
        alpha values are essentially unknown.

        Unit test: PlatformContextSkiaTest.trackImageMask
                   PlatformContextSkiaTest.trackImageMaskWithOpaqueRect

        * platform/graphics/skia/OpaqueRegionSkia.cpp:
        (WebCore::paintIsOpaque):
        (WebCore::OpaqueRegionSkia::applyOpaqueRegionFromLayer):
        (WebCore::OpaqueRegionSkia::pushCanvasLayer):
        (WebCore::OpaqueRegionSkia::popCanvasLayer):
        (WebCore::OpaqueRegionSkia::didDrawRect):
        (WebCore::OpaqueRegionSkia::didDrawPath):
        (WebCore::OpaqueRegionSkia::didDrawPoints):
        (WebCore::OpaqueRegionSkia::didDrawBounded):
        (WebCore::OpaqueRegionSkia::didDraw):
        (WebCore::OpaqueRegionSkia::didDrawUnbounded):
        (WebCore::OpaqueRegionSkia::markRectAsOpaque):
        (WebCore::OpaqueRegionSkia::markRectAsNonOpaque):
        (WebCore::OpaqueRegionSkia::markAllAsNonOpaque):
        * platform/graphics/skia/OpaqueRegionSkia.h:
        (OpaqueRegionSkia):
        (CanvasLayerState):
        * platform/graphics/skia/PlatformContextSkia.cpp:
        (WebCore::PlatformContextSkia::restoreLayer):

2012-04-24  Alexandru Chiculita  <achicu@adobe.com>

        CSS Shaders: Repainting the FECustomFilter requires full source image
        https://bugs.webkit.org/show_bug.cgi?id=76689

        Reviewed by Dean Jackson..

        When a pixel of a filtered layer changes we need to update the whole bounding box of the layer and
        not just the dirty rectangle. That's because the shader might change the color of any of the pixels inside the box.

        Added tests where a shader is moving and rotating the contents and the actual
        dirty box of the source image is not the same as the output dirty rectangle.

        Tests: css3/filters/custom/filter-repaint-custom-clipped.html
               css3/filters/custom/filter-repaint-custom-rotated.html
               css3/filters/custom/filter-repaint-custom.html

        * rendering/FilterEffectRenderer.cpp:
        (WebCore::FilterEffectRenderer::FilterEffectRenderer):
        (WebCore::FilterEffectRenderer::build):
        (WebCore::FilterEffectRenderer::computeSourceImageRectForDirtyRect):
        * rendering/FilterEffectRenderer.h:
        (FilterEffectRenderer):
        (WebCore::FilterEffectRenderer::hasCustomShaderFilter):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::setFilterBackendNeedsRepaintingInRect):

2012-04-24  Alexis Menard  <alexis.menard@openbossa.org>

        Replace occurences of style selector from variables and methods names by style resolver.
        https://bugs.webkit.org/show_bug.cgi?id=84765

        Reviewed by Andreas Kling.

        Rename methods and variables to follow the new name StyleResolver. It requires to update the
        local variables, methods parameters, and function names to match the new name and to remove
        the concept of "selector" to avoid clashing with the CSS concept. The next and last patch
        will be to rename CSSStyleSelector file and update the includes.

        No new tests : just renaming the variables and method names. No behavior changes expected.

        * css/CSSFontSelector.cpp:
        (WebCore::CSSFontSelector::dispatchInvalidationCallbacks):
        * css/CSSGradientValue.cpp:
        (WebCore::CSSGradientValue::addStops):
        * css/CSSPageRule.cpp:
        (WebCore::CSSPageRule::setSelectorText):
        * css/CSSStyleRule.cpp:
        (WebCore::CSSStyleRule::setSelectorText):
        * css/CSSStyleSheet.cpp:
        (WebCore::StyleSheetInternal::styleSheetChanged):
        * css/MediaQueryEvaluator.cpp:
        (WebCore::MediaQueryEvaluator::eval):
        * css/MediaQueryMatcher.cpp:
        (WebCore::MediaQueryMatcher::prepareEvaluator):
        (WebCore::MediaQueryMatcher::styleResolverChanged):
        * css/MediaQueryMatcher.h:
        (MediaQueryMatcher):
        * css/PropertySetCSSStyleDeclaration.cpp:
        (WebCore::StyleRuleCSSStyleDeclaration::setNeedsStyleRecalc):
        * css/StyleBuilder.cpp:
        (WebCore::ApplyPropertyExpanding::applyInheritValue):
        (WebCore::ApplyPropertyExpanding::applyInitialValue):
        (WebCore::ApplyPropertyExpanding::applyValue):
        (WebCore::ApplyPropertyDefaultBase::applyInheritValue):
        (WebCore::ApplyPropertyDefaultBase::applyInitialValue):
        (WebCore::ApplyPropertyDefault::applyValue):
        (WebCore::ApplyPropertyNumber::applyValue):
        (WebCore::ApplyPropertyStyleImage::applyValue):
        (WebCore::ApplyPropertyAuto::applyInheritValue):
        (WebCore::ApplyPropertyAuto::applyInitialValue):
        (WebCore::ApplyPropertyAuto::applyValue):
        (WebCore::ApplyPropertyClip::convertToLength):
        (WebCore::ApplyPropertyClip::applyInheritValue):
        (WebCore::ApplyPropertyClip::applyInitialValue):
        (WebCore::ApplyPropertyClip::applyValue):
        (WebCore::ApplyPropertyColor::applyInheritValue):
        (WebCore::ApplyPropertyColor::applyInitialValue):
        (WebCore::ApplyPropertyColor::applyValue):
        (WebCore::ApplyPropertyColor::applyColorValue):
        (WebCore::ApplyPropertyDirection::applyValue):
        (WebCore::ApplyPropertyLength::applyValue):
        (WebCore::ApplyPropertyString::applyValue):
        (WebCore::ApplyPropertyBorderRadius::applyValue):
        (WebCore::ApplyPropertyFillLayer::applyInheritValue):
        (WebCore::ApplyPropertyFillLayer::applyInitialValue):
        (WebCore::ApplyPropertyFillLayer::applyValue):
        (WebCore::ApplyPropertyComputeLength::applyValue):
        (WebCore::ApplyPropertyFont::applyInheritValue):
        (WebCore::ApplyPropertyFont::applyInitialValue):
        (WebCore::ApplyPropertyFont::applyValue):
        (WebCore::ApplyPropertyFontSize::applyInheritValue):
        (WebCore::ApplyPropertyFontSize::applyInitialValue):
        (WebCore::ApplyPropertyFontSize::applyValue):
        (WebCore::ApplyPropertyFontWeight::applyValue):
        (WebCore::ApplyPropertyFontVariantLigatures::applyInheritValue):
        (WebCore::ApplyPropertyFontVariantLigatures::applyInitialValue):
        (WebCore::ApplyPropertyFontVariantLigatures::applyValue):
        (WebCore::ApplyPropertyBorderImage::applyValue):
        (WebCore::ApplyPropertyBorderImageModifier::applyInheritValue):
        (WebCore::ApplyPropertyBorderImageModifier::applyInitialValue):
        (WebCore::ApplyPropertyBorderImageModifier::applyValue):
        (WebCore::ApplyPropertyBorderImageSource::applyValue):
        (WebCore::ApplyPropertyCounter::applyInheritValue):
        (WebCore::ApplyPropertyCounter::applyValue):
        (WebCore::ApplyPropertyCursor::applyInheritValue):
        (WebCore::ApplyPropertyCursor::applyInitialValue):
        (WebCore::ApplyPropertyCursor::applyValue):
        (WebCore::ApplyPropertyTextAlign::applyValue):
        (WebCore::ApplyPropertyTextDecoration::applyValue):
        (WebCore::ApplyPropertyUnicodeBidi::applyValue):
        (WebCore::ApplyPropertyLineHeight::applyValue):
        (WebCore::ApplyPropertyPageSize::applyValue):
        (WebCore::ApplyPropertyTextEmphasisStyle::applyInheritValue):
        (WebCore::ApplyPropertyTextEmphasisStyle::applyInitialValue):
        (WebCore::ApplyPropertyTextEmphasisStyle::applyValue):
        (WebCore::ApplyPropertyAnimation::map):
        (WebCore::ApplyPropertyAnimation::applyInheritValue):
        (WebCore::ApplyPropertyAnimation::applyInitialValue):
        (WebCore::ApplyPropertyAnimation::applyValue):
        (WebCore::ApplyPropertyOutlineStyle::applyInheritValue):
        (WebCore::ApplyPropertyOutlineStyle::applyInitialValue):
        (WebCore::ApplyPropertyOutlineStyle::applyValue):
        (WebCore::ApplyPropertyResize::applyValue):
        (WebCore::ApplyPropertyVerticalAlign::applyValue):
        (WebCore::ApplyPropertyAspectRatio::applyInheritValue):
        (WebCore::ApplyPropertyAspectRatio::applyInitialValue):
        (WebCore::ApplyPropertyAspectRatio::applyValue):
        (WebCore::ApplyPropertyZoom::resetEffectiveZoom):
        (WebCore::ApplyPropertyZoom::applyInheritValue):
        (WebCore::ApplyPropertyZoom::applyInitialValue):
        (WebCore::ApplyPropertyZoom::applyValue):
        (WebCore::ApplyPropertyDisplay::isValidDisplayValue):
        (WebCore::ApplyPropertyDisplay::applyInheritValue):
        (WebCore::ApplyPropertyDisplay::applyInitialValue):
        (WebCore::ApplyPropertyDisplay::applyValue):
        (WebCore::ApplyPropertyFlex::applyInheritValue):
        (WebCore::ApplyPropertyFlex::applyInitialValue):
        (WebCore::ApplyPropertyFlex::applyValue):
        * css/StyleBuilder.h:
        (WebCore::PropertyHandler::applyInheritValue):
        (WebCore::PropertyHandler::applyInitialValue):
        (WebCore::PropertyHandler::applyValue):
        * css/StyleMedia.cpp:
        (WebCore::StyleMedia::matchMedium):
        * dom/Document.cpp:
        (WebCore::Document::Document):
        (WebCore::Document::~Document):
        (WebCore::Document::setDocType):
        (WebCore::Document::childrenChanged):
        (WebCore::Document::setContentLanguage):
        (WebCore::Document::recalcStyle):
        (WebCore::Document::updateLayoutIgnorePendingStylesheets):
        (WebCore::Document::styleForElementIgnoringPendingStylesheets):
        (WebCore::Document::styleForPage):
        (WebCore::Document::combineCSSFeatureFlags):
        (WebCore::Document::resetCSSFeatureFlags):
        (WebCore::Document::createStyleResolver):
        (WebCore::Document::clearStyleResolver):
        (WebCore::Document::clearPageUserSheet):
        (WebCore::Document::updatePageUserSheet):
        (WebCore::Document::clearPageGroupUserSheets):
        (WebCore::Document::updatePageGroupUserSheets):
        (WebCore::Document::addUserSheet):
        (WebCore::Document::processHttpEquiv):
        (WebCore::Document::setSelectedStylesheetSet):
        (WebCore::Document::removePendingSheet):
        (WebCore::Document::evaluateMediaQueryList):
        (WebCore::Document::styleResolverChanged):
        (WebCore::Document::analyzeStylesheetChange):
        (WebCore::Document::updateActiveStylesheets):
        * dom/Document.h:
        (WebCore::Document::styleResolverIfExists):
        (WebCore::Document::styleResolver):
        (Document):
        * dom/Element.cpp:
        (WebCore::StyleResolverParentPusher::StyleResolverParentPusher):
        (WebCore::StyleResolverParentPusher::push):
        (WebCore::StyleResolverParentPusher::~StyleResolverParentPusher):
        (StyleResolverParentPusher):
        (WebCore::Element::attributeChanged):
        (WebCore::Element::attach):
        (WebCore::Element::styleForRenderer):
        (WebCore::Element::recalcStyle):
        (WebCore::Element::beginParsingChildren):
        (WebCore::Element::finishParsingChildren):
        * dom/ProcessingInstruction.cpp:
        (WebCore::ProcessingInstruction::removedFrom):
        * dom/ShadowRoot.cpp:
        (WebCore::ShadowRoot::attach):
        * dom/ShadowTree.cpp:
        (WebCore::ShadowTree::recalcShadowTreeStyle):
        * dom/StyleElement.cpp:
        (WebCore::StyleElement::removedFromDocument):
        * editing/EditingStyle.cpp:
        (WebCore::styleFromMatchedRulesForElement):
        * history/CachedPage.cpp:
        (WebCore::CachedPage::restore):
        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::styleResolver):
        * html/HTMLCanvasElement.h:
        (HTMLCanvasElement):
        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::setDisabledState):
        (WebCore::HTMLLinkElement::process):
        (WebCore::HTMLLinkElement::removedFrom):
        (WebCore::HTMLLinkElement::removePendingSheet):
        * html/HTMLStyleElement.cpp:
        (WebCore::HTMLStyleElement::registerWithScopingNode):
        (WebCore::HTMLStyleElement::unregisterWithScopingNode):
        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::setFont):
        * inspector/InspectorCSSAgent.cpp:
        (WebCore::InspectorCSSAgent::recalcStyleForPseudoStateIfNeeded):
        (WebCore::InspectorCSSAgent::getMatchedStylesForNode):
        (WebCore::InspectorCSSAgent::buildArrayForRuleList):
        (WebCore::InspectorCSSAgent::clearPseudoState):
        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::updateViewMetrics):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::getMatchedCSSRules):
        * page/Frame.cpp:
        (WebCore::Frame::setPrinting):
        * page/FrameView.cpp:
        (WebCore::FrameView::layout):
        * page/Page.cpp:
        (WebCore::Page::setViewMode):
        (WebCore::Page::setNeedsRecalcStyleInAllFrames):
        (WebCore::Page::allVisitedStateChanged):
        (WebCore::Page::visitedStateChanged):
        * page/animation/KeyframeAnimation.cpp:
        (WebCore::KeyframeAnimation::KeyframeAnimation):
        * platform/efl/RenderThemeEfl.cpp:
        (WebCore::RenderThemeEfl::adjustSliderTrackStyle):
        (WebCore::RenderThemeEfl::adjustSliderThumbStyle):
        (WebCore::RenderThemeEfl::adjustCheckboxStyle):
        (WebCore::RenderThemeEfl::adjustRadioStyle):
        (WebCore::RenderThemeEfl::adjustButtonStyle):
        (WebCore::RenderThemeEfl::adjustMenuListStyle):
        (WebCore::RenderThemeEfl::adjustMenuListButtonStyle):
        (WebCore::RenderThemeEfl::adjustTextFieldStyle):
        (WebCore::RenderThemeEfl::adjustTextAreaStyle):
        (WebCore::RenderThemeEfl::adjustSearchFieldDecorationStyle):
        (WebCore::RenderThemeEfl::adjustSearchFieldResultsButtonStyle):
        (WebCore::RenderThemeEfl::adjustSearchFieldResultsDecorationStyle):
        (WebCore::RenderThemeEfl::adjustSearchFieldCancelButtonStyle):
        (WebCore::RenderThemeEfl::adjustSearchFieldStyle):
        (WebCore::RenderThemeEfl::adjustProgressBarStyle):
        * platform/gtk/RenderThemeGtk.cpp:
        (WebCore::RenderThemeGtk::adjustButtonStyle):
        (WebCore::RenderThemeGtk::adjustMenuListStyle):
        (WebCore::RenderThemeGtk::adjustMenuListButtonStyle):
        (WebCore::RenderThemeGtk::adjustSearchFieldResultsButtonStyle):
        (WebCore::RenderThemeGtk::adjustSearchFieldResultsDecorationStyle):
        (WebCore::RenderThemeGtk::adjustSearchFieldCancelButtonStyle):
        (WebCore::RenderThemeGtk::adjustSearchFieldStyle):
        (WebCore::RenderThemeGtk::adjustSliderThumbStyle):
        * platform/qt/RenderThemeQt.cpp:
        (WebCore::RenderThemeQt::adjustSliderThumbStyle):
        (WebCore::RenderThemeQt::adjustSearchFieldStyle):
        (WebCore::RenderThemeQt::adjustSearchFieldCancelButtonStyle):
        (WebCore::RenderThemeQt::adjustSearchFieldDecorationStyle):
        (WebCore::RenderThemeQt::adjustSearchFieldResultsDecorationStyle):
        (WebCore::RenderThemeQt::adjustInnerSpinButtonStyle):
        * platform/qt/RenderThemeQtMobile.cpp:
        (WebCore::RenderThemeQtMobile::adjustButtonStyle):
        (WebCore::RenderThemeQtMobile::adjustMenuListStyle):
        * platform/wx/RenderThemeWx.cpp:
        (WebCore::RenderThemeWx::adjustButtonStyle):
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::updateFromElement):
        (WebCore::RenderListBox::paintItemForeground):
        * rendering/RenderMenuList.cpp:
        (WebCore::RenderMenuList::fontSelector):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::getUncachedPseudoStyle):
        * rendering/RenderRegion.cpp:
        (WebCore::RenderRegion::styleDidChange):
        (WebCore::RenderRegion::computeStyleInRegion):
        * rendering/RenderTextControlSingleLine.cpp:
        (WebCore::RenderTextControlSingleLine::fontSelector):
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::adjustStyle):
        (WebCore::RenderTheme::adjustInputFieldSpeechButtonStyle):
        * rendering/RenderThemeChromiumSkia.cpp:
        (WebCore::RenderThemeChromiumSkia::adjustMenuListStyle):
        (WebCore::RenderThemeChromiumSkia::adjustMenuListButtonStyle):
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::adjustMenuListStyle):
        (WebCore::RenderThemeMac::adjustSliderThumbStyle):
        (WebCore::RenderThemeMac::adjustSearchFieldStyle):
        * rendering/RenderThemeSafari.cpp:
        (WebCore::RenderThemeSafari::setFontFromControlSize):
        (WebCore::RenderThemeSafari::adjustButtonStyle):
        (WebCore::RenderThemeSafari::adjustMenuListStyle):
        (WebCore::RenderThemeSafari::adjustMenuListButtonStyle):
        (WebCore::RenderThemeSafari::adjustSliderThumbStyle):
        (WebCore::RenderThemeSafari::adjustSearchFieldStyle):
        (WebCore::RenderThemeSafari::adjustSearchFieldCancelButtonStyle):
        (WebCore::RenderThemeSafari::adjustSearchFieldDecorationStyle):
        (WebCore::RenderThemeSafari::adjustSearchFieldResultsDecorationStyle):
        (WebCore::RenderThemeSafari::adjustSearchFieldResultsButtonStyle):
        * rendering/RenderThemeWin.cpp:
        (WebCore::RenderThemeWin::adjustInnerSpinButtonStyle):
        (WebCore::RenderThemeWin::adjustMenuListStyle):
        (WebCore::RenderThemeWin::adjustMenuListButtonStyle):
        (WebCore::RenderThemeWin::adjustSearchFieldStyle):
        (WebCore::RenderThemeWin::adjustSearchFieldCancelButtonStyle):
        (WebCore::RenderThemeWin::adjustSearchFieldDecorationStyle):
        (WebCore::RenderThemeWin::adjustSearchFieldResultsDecorationStyle):
        (WebCore::RenderThemeWin::adjustSearchFieldResultsButtonStyle):
        * rendering/RenderThemeWinCE.cpp:
        (WebCore::RenderThemeWinCE::adjustMenuListStyle):
        (WebCore::RenderThemeWinCE::adjustSearchFieldStyle):
        (WebCore::RenderThemeWinCE::adjustSearchFieldCancelButtonStyle):
        (WebCore::RenderThemeWinCE::adjustSearchFieldDecorationStyle):
        (WebCore::RenderThemeWinCE::adjustSearchFieldResultsDecorationStyle):
        (WebCore::RenderThemeWinCE::adjustSearchFieldResultsButtonStyle):
        (WebCore::RenderThemeWinCE::adjustMenuListButtonStyle):
        * rendering/style/StyleGeneratedImage.cpp:
        (WebCore::StyleGeneratedImage::image):
        * rendering/svg/RenderSVGInlineText.cpp:
        (WebCore::RenderSVGInlineText::computeNewScaledFontForStyle):
        * svg/SVGElement.cpp:
        (WebCore::SVGElement::customStyleForRenderer):
        * svg/SVGFontFaceElement.cpp:
        (WebCore::SVGFontFaceElement::rebuildFontFace):
        (WebCore::SVGFontFaceElement::removedFrom):
        * xml/XMLTreeViewer.cpp:
        (WebCore::XMLTreeViewer::transformDocumentToTreeView):
        * xml/parser/XMLDocumentParser.cpp:
        (WebCore::XMLDocumentParser::end):
        * xml/parser/XMLDocumentParserLibxml2.cpp:
        (WebCore::XMLDocumentParser::doEnd):
        * xml/parser/XMLDocumentParserQt.cpp:
        (WebCore::XMLDocumentParser::doEnd):
        * WebCore.exp.in:

2012-04-24  Yael Aharon  <yael.aharon@nokia.com>

        Fixed background is scrolling in http://www.nieuwecode.nl/ in Qt webkit2
        https://bugs.webkit.org/show_bug.cgi?id=83980

        Reviewed by Simon Fraser.

        When a fixed position element does not have z-index explicitly specified, it does not create a
        stacking context. This results in fixed elements scrolling with the content layer.
        This patch creates a stacking context for fixed positioned elements for the Qt port, by enabling
        the flag ENABLE_FIXED_POSITION_CREATES_STACKING_CONTEXT.
        Added a manual test because this patch takes effect only during scrolling.

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

2012-04-24  Andreas Kling  <kling@webkit.org>

        REGRESSION(r115099): html5lib/runner.html crashes.
        <http://webkit.org/b/84791>

        Reviewed by Anders Carlsson.

        Unbreak and simplify the code that filters attributes on isindex elements.
        It's perfectly safe to remove elements from a Vector while iterating over it.

        * html/parser/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::attributesForIsindexInput):

2012-04-24  Victor Carbune  <vcarbune@adobe.com>

        Extra display logic for the media control panel element
        https://bugs.webkit.org/show_bug.cgi?id=82476

        Reviewed by Eric Carlson.

        This patch fixes a bug which caused the controls to be displayed
        when they should remain hidden. Added an extra variable to the
        panel elements which properly keeps the state of the panel (visible or not).

        Test: media/video-controls-toggling.html

        * html/shadow/MediaControlElements.cpp:
        (WebCore::MediaControlPanelElement::MediaControlPanelElement): Added the
        variable m_isDisplayed to hold the state whether the panel is visible or not.
        (WebCore::MediaControlPanelElement::makeOpaque): Showing the panel only if it
        is visible.
        (WebCore::MediaControlPanelElement::makeTransparent): Enabled the transition
        timer which sets the display:none property on the controls.
        (WebCore::MediaControlPanelElement::setIsDisplayed): Setter for the state variable.
        (WebCore):
        * html/shadow/MediaControlElements.h:
        (MediaControlPanelElement):
        * html/shadow/MediaControlRootElement.cpp:
        (WebCore::MediaControlRootElement::show): Updated the panel visibility state.
        (WebCore::MediaControlRootElement::hide): Updated the panel visibility state.
        * html/shadow/MediaControlRootElementChromium.cpp:
        (WebCore::MediaControlRootElementChromium::show): Updated the panel visibility state.
        (WebCore::MediaControlRootElementChromium::hide): Updated the panel visibility state.

2012-04-24  Alexandru Chiculita  <achicu@adobe.com>

        CSS Shaders: Custom filters painting is broken
        https://bugs.webkit.org/show_bug.cgi?id=82803

        Reviewed by Kenneth Russell.

        In this patch I moved CSS Shaders file loading notifications from FilterEffectRenderer to the new RenderLayerFilterInfo.
        That's because FilterEffectRenderer is only used when running the filters in the software pipeline
        and has a very short lifetime. Due to a recent change FilterEffectRenderer actually
        gets deleted if the shader is not loaded, so it doesn't live that much to be notified when the shader
        was actually loaded.

        Also removed the FilterEffectObserver, that was only used to notify the RenderLayer about the loaded shader.

        No new tests. This is making existing CSS Shaders tests pass again.
        Cannot un-skip on Mac for now because the feature is compile time disabled.
        
        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/filters/CustomFilterOperation.h:
        (WebCore::CustomFilterOperation::affectsOpacity):
        (WebCore::CustomFilterOperation::movesPixels):
        * platform/graphics/filters/FilterOperations.cpp:
        (WebCore):
        (WebCore::FilterOperations::hasCustomFilter):
        * platform/graphics/filters/FilterOperations.h:
        (FilterOperations):
        * platform/graphics/texmap/TextureMapperImageBuffer.cpp:
        (WebCore::BitmapTextureImageBuffer::applyFilters):
        * rendering/FilterEffectObserver.h: Removed.
        * rendering/FilterEffectRenderer.cpp:
        (WebCore::FilterEffectRenderer::FilterEffectRenderer):
        (WebCore::FilterEffectRenderer::~FilterEffectRenderer):
        (WebCore::FilterEffectRenderer::build):
        * rendering/FilterEffectRenderer.h:
        (WebCore):
        (WebCore::FilterEffectRenderer::create):
        (FilterEffectRenderer):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateOrRemoveFilterEffect):
        * rendering/RenderLayer.h:
        * rendering/RenderLayerFilterInfo.cpp:
        (WebCore::RenderLayerFilterInfo::~RenderLayerFilterInfo):
        (WebCore::RenderLayerFilterInfo::notifyCustomFilterProgramLoaded):
        (WebCore):
        (WebCore::RenderLayerFilterInfo::updateCustomFilterClients):
        (WebCore::RenderLayerFilterInfo::removeCustomFilterClients):
        * rendering/RenderLayerFilterInfo.h:
        (WebCore):
        (RenderLayerFilterInfo):

2012-04-24  Antti Koivisto  <antti@apple.com>

        Another build fix.

        Not reviewed.

        * css/MediaList.cpp:
        (WebCore::MediaQuerySet::MediaQuerySet):
        * css/StylePropertySet.cpp:
        (WebCore::StylePropertySet::StylePropertySet):

2012-04-24  Antti Koivisto  <antti@apple.com>

        Try to fix Qt build.

        Not reviewed.

        * css/StyleRule.h:
        (WebCore::StyleRuleBase::StyleRuleBase):

2012-04-24  Antti Koivisto  <antti@apple.com>

        Implement StyleRule copying
        https://bugs.webkit.org/show_bug.cgi?id=84752

        Reviewed by Andreas Kling.
        
        We'll need this for copy-on-write when style sheet data is shared between documents.

        Implement copy() and copy constructor for style rules their children as needed.
        
        The code is not yet used.

        * css/CSSSelectorList.cpp:
        (WebCore::CSSSelectorList::CSSSelectorList):
        (WebCore):
        * css/CSSSelectorList.h:
        (CSSSelectorList):
        * css/MediaList.h:
        (WebCore::MediaQuerySet::copy):
        (MediaQuerySet):
        * css/MediaQuery.cpp:
        (WebCore::MediaQuery::MediaQuery):
        (WebCore):
        * css/MediaQuery.h:
        (MediaQuery):
        (WebCore::MediaQuery::copy):
        * css/MediaQueryExp.h:
        (WebCore::MediaQueryExp::copy):
        (MediaQueryExp):
        * css/StylePropertySet.cpp:
        (WebCore::StylePropertySet::StylePropertySet):
        (WebCore):
        (WebCore::StylePropertySet::copy):
        * css/StylePropertySet.h:
        
            Make this copy parse mode too. As a result ElementAttributeData no longer needs to set it explicitly after copying.

        (StylePropertySet):
        * css/StyleRule.cpp:
        (WebCore::StyleRuleBase::copy):
        (WebCore):
        (WebCore::StyleRule::StyleRule):
        (WebCore::StyleRulePage::StyleRulePage):
        (WebCore::StyleRuleFontFace::StyleRuleFontFace):
        (WebCore::StyleRuleBlock::StyleRuleBlock):
        (WebCore::StyleRuleMedia::StyleRuleMedia):
        (WebCore::StyleRuleRegion::StyleRuleRegion):
        * css/StyleRule.h:
        (StyleRuleBase):
        (WebCore::StyleRuleBase::StyleRuleBase):
        (WebCore::StyleRule::copy):
        (StyleRule):
        (WebCore::StyleRuleFontFace::copy):
        (StyleRuleFontFace):
        (WebCore::StyleRulePage::copy):
        (StyleRulePage):
        (StyleRuleBlock):
        (WebCore::StyleRuleMedia::copy):
        (StyleRuleMedia):
        (WebCore::StyleRuleRegion::copy):
        (StyleRuleRegion):
        * css/WebKitCSSKeyframesRule.cpp:
        (WebCore):
        (WebCore::StyleRuleKeyframes::StyleRuleKeyframes):
        * css/WebKitCSSKeyframesRule.h:
        (WebCore):
        (WebCore::StyleRuleKeyframes::copy):
        (StyleRuleKeyframes):

2012-04-24  Ryosuke Niwa  <rniwa@webkit.org>

        Revert r115009; It doesn't make necessary changes to NodeRareData and Node.

        * CMakeLists.txt:
        * DerivedSources.cpp:
        * DerivedSources.make:
        * DerivedSources.pri:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSHTMLCollectionCustom.cpp:
        (WebCore::getNamedItems):
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateImplementation):
        * bindings/v8/custom/V8HTMLCollectionCustom.cpp:
        (WebCore::getNamedItems):
        * html/CollectionType.h:
        * html/HTMLCollection.cpp:
        (WebCore::HTMLCollection::shouldIncludeChildren):
        (WebCore::HTMLCollection::isAcceptableElement):
        * html/HTMLFormCollection.cpp:
        (WebCore::HTMLFormCollection::HTMLFormCollection):
        * html/RadioNodeList.cpp: Removed.
        * html/RadioNodeList.h: Removed.
        * html/RadioNodeList.idl: Removed.

2012-04-24  Chris Rogers  <crogers@google.com>

        WaveTable should normalize to 0dbFS instead of -6dbFS
        https://bugs.webkit.org/show_bug.cgi?id=84644

        Reviewed by Kenneth Russell.

        No new tests. Oscillator tests will be rebaselined after landing, since several platforms are affected.

        * Modules/webaudio/WaveTable.cpp:
        (WebCore::WaveTable::createBandLimitedTables):

2012-04-24  Tommy Widenflycht  <tommyw@google.com>

        MediaStream API: Create a new flag for PeerConnection
        https://bugs.webkit.org/show_bug.cgi?id=84723

        Reviewed by Dimitri Glazkov.

        To allow Chrome to make the GetUserMedia functionality available by default we
        need another flag for the PeerConnection related parts. This new flag is in
        addition to the general media stream flag, and both need to be enabled for
        PeerConnection object creation.

        No code behavior changes.

        * bindings/generic/RuntimeEnabledFeatures.cpp:
        (WebCore):
        * bindings/generic/RuntimeEnabledFeatures.h:
        (RuntimeEnabledFeatures):
        (WebCore::RuntimeEnabledFeatures::peerConnectionEnabled):
        (WebCore::RuntimeEnabledFeatures::setPeerConnectionEnabled):
        (WebCore::RuntimeEnabledFeatures::webkitDeprecatedPeerConnectionEnabled):
        (WebCore::RuntimeEnabledFeatures::webkitPeerConnection00Enabled):

2012-04-24  Joe Mason  <jmason@rim.com>

        [BlackBerry] Revert broken changes to authentication dialog
        https://bugs.webkit.org/show_bug.cgi?id=80135

        Reviewed by Antonio Gomes.

        The previous patches from this bug caused an infinite loop when using digest auth;
        apparently they were only tested with basic.

        * platform/blackberry/PageClientBlackBerry.h:
        * platform/network/blackberry/NetworkJob.cpp:
        (WebCore::NetworkJob::handleAuthHeader):
        (WebCore::NetworkJob::sendRequestWithCredentials):

2012-04-24  Caio Marcelo de Oliveira Filho  <caio.oliveira@openbossa.org>

        Fix wrong ASSERT() in findAttributeInVector()
        https://bugs.webkit.org/show_bug.cgi?id=84756

        Unreviewed build fix.

        * dom/ElementAttributeData.h:
        (WebCore::findAttributeInVector):

2012-04-24  Anders Carlsson  <andersca@apple.com>

        Update the scroll layer position on the main thread when viewing full-frame images
        https://bugs.webkit.org/show_bug.cgi?id=84754
        <rdar://problem/11193304>

        Reviewed by Andreas Kling.

        Showing really big images can be slow sometimes and in that case it's better to update the scroll layer position on
        the main thread, which will avoid flashing white.

        * page/scrolling/ScrollingCoordinator.cpp:
        (WebCore::ScrollingCoordinator::updateShouldUpdateScrollLayerPositionOnMainThread):

2012-04-24  Caio Marcelo de Oliveira Filho  <caio.oliveira@openbossa.org>

        Use Vector<Attribute> directly instead of encapsulating it in AttributeVector
        https://bugs.webkit.org/show_bug.cgi?id=84413

        Reviewed by Andreas Kling.

        As commented in https://bugs.webkit.org/show_bug.cgi?id=79963#c16 we do not
        usually subclass basic types like Vector. This patch changes code to use
        Vector<Attribute> directly and move around the functionality of the former
        methods to more specific helper functions or inline code at the callers.

        * dom/Element.cpp:
        (WebCore::Element::parserSetAttributes):
        (WebCore::Element::normalizeAttributes):
        * dom/Element.h:
        (Element):
        * dom/ElementAttributeData.cpp:
        * dom/ElementAttributeData.h:
        (WebCore::getAttributeFromVector):
        (WebCore::ElementAttributeData::getAttributeItem):
        (ElementAttributeData):
        (WebCore::ElementAttributeData::attributeVector):
        (WebCore::ElementAttributeData::clonedAttributeVector):
        (WebCore::ElementAttributeData::getAttributeItemIndex):
        (WebCore):
        * html/parser/HTMLConstructionSite.cpp:
        (WebCore::HTMLConstructionSite::createHTMLElementFromSavedElement):
        * html/parser/HTMLToken.h:
        (WebCore::AtomicHTMLToken::AtomicHTMLToken):
        * html/parser/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::processFakeStartTag):
        (WebCore::HTMLTreeBuilder::attributesForIsindexInput):
        * html/parser/HTMLTreeBuilder.h:
        * html/parser/TextDocumentParser.cpp:
        (WebCore::TextDocumentParser::insertFakePreElement):
        * xml/XMLErrors.cpp:
        (WebCore::createXHTMLParserErrorHeader):
        (WebCore::XMLErrors::insertErrorMessageBlock):
        * xml/parser/MarkupTokenBase.h:
        (WebCore::AtomicMarkupTokenBase::AtomicMarkupTokenBase):
        (WebCore::AtomicMarkupTokenBase::getAttributeItem):
        (WebCore::AtomicMarkupTokenBase::attributes):
        (AtomicMarkupTokenBase):
        (WebCore::::initializeAttributes):
        * xml/parser/XMLToken.h:
        (WebCore::AtomicXMLToken::AtomicXMLToken):

2012-04-24  Alexis Menard  <alexis.menard@openbossa.org>

        Rename CSSStyleSelector class to StyleResolver.
        https://bugs.webkit.org/show_bug.cgi?id=84734

        Reviewed by Andreas Kling.

        The name CSSStyleSelector is confusing as it conflicts a bit with
        the CSS concept of selectors. One could think it's an encapsulation
        of the CSS selectors but it's not, in fact this class is responsible
        of finding the RenderStyle for a given element. This is the first patch
        as I will later rename the files, and then rename the local variables.

        No new tests : renaming, no behavior changes should appear.

        * css/CSSCalculationValue.cpp:
        (WebCore::CSSCalcPrimitiveValue::toCalcValue):
        * css/CSSFontSelector.cpp:
        (WebCore::CSSFontSelector::dispatchInvalidationCallbacks):
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseSizeParameter):
        * css/CSSStyleSelector.cpp:
        (RuleSet):
        (WebCore::RuleSet::features):
        (WebCore):
        (WebCore::StyleResolver::StyleResolver):
        (WebCore::StyleResolver::addAuthorRulesAndCollectUserRulesFromSheets):
        (WebCore::makeRuleSet):
        (WebCore::StyleResolver::collectFeatures):
        (WebCore::StyleResolver::determineScope):
        (WebCore::StyleResolver::ruleSetForScope):
        (WebCore::StyleResolver::appendAuthorStylesheets):
        (WebCore::StyleResolver::setupScopeStack):
        (WebCore::StyleResolver::pushScope):
        (WebCore::StyleResolver::popScope):
        (WebCore::StyleResolver::pushParentElement):
        (WebCore::StyleResolver::popParentElement):
        (WebCore::StyleResolver::pushParentShadowRoot):
        (WebCore::StyleResolver::popParentShadowRoot):
        (WebCore::StyleResolver::addKeyframeStyle):
        (WebCore::StyleResolver::~StyleResolver):
        (WebCore::StyleResolver::sweepMatchedPropertiesCache):
        (WebCore::StyleResolver::Features::Features):
        (WebCore::StyleResolver::Features::~Features):
        (WebCore::StyleResolver::Features::add):
        (WebCore::StyleResolver::Features::clear):
        (WebCore::StyleResolver::addMatchedProperties):
        (WebCore::StyleResolver::addElementStyleProperties):
        (WebCore::StyleResolver::collectMatchingRules):
        (WebCore::StyleResolver::collectMatchingRulesForRegion):
        (WebCore::StyleResolver::sortAndTransferMatchedRules):
        (WebCore::StyleResolver::matchScopedAuthorRules):
        (WebCore::StyleResolver::matchAuthorRules):
        (WebCore::StyleResolver::matchUserRules):
        (WebCore::StyleResolver::matchUARules):
        (WebCore::StyleResolver::collectMatchingRulesForList):
        * css/CSSStyleSelector.h:
        (StyleResolver):
        (Features):
        * css/MediaQueryEvaluator.cpp:
        (WebCore::MediaQueryEvaluator::eval):
        * css/MediaQueryEvaluator.h:
        (WebCore):
        (MediaQueryEvaluator):
        * css/MediaQueryMatcher.cpp:
        (WebCore::MediaQueryMatcher::prepareEvaluator):
        * css/SVGCSSStyleSelector.cpp:
        (WebCore::StyleResolver::applySVGProperty):
        * css/StyleBuilder.cpp:
        (WebCore::ApplyPropertyExpanding::applyInheritValue):
        (WebCore::ApplyPropertyExpanding::applyInitialValue):
        (WebCore::ApplyPropertyExpanding::applyValue):
        (WebCore::ApplyPropertyDefaultBase::applyInheritValue):
        (WebCore::ApplyPropertyDefaultBase::applyInitialValue):
        (WebCore::ApplyPropertyDefaultBase::applyValue):
        (WebCore::ApplyPropertyDefault::applyValue):
        (WebCore::ApplyPropertyNumber::applyValue):
        (WebCore::ApplyPropertyStyleImage::applyValue):
        (WebCore::ApplyPropertyAuto::applyInheritValue):
        (WebCore::ApplyPropertyAuto::applyInitialValue):
        (WebCore::ApplyPropertyAuto::applyValue):
        (WebCore::ApplyPropertyClip::convertToLength):
        (WebCore::ApplyPropertyClip::applyInheritValue):
        (WebCore::ApplyPropertyClip::applyInitialValue):
        (WebCore::ApplyPropertyClip::applyValue):
        (WebCore::ApplyPropertyColor::applyInheritValue):
        (WebCore::ApplyPropertyColor::applyInitialValue):
        (WebCore::ApplyPropertyColor::applyValue):
        (WebCore::ApplyPropertyColor::applyColorValue):
        (WebCore::ApplyPropertyDirection::applyValue):
        (WebCore::ApplyPropertyLength::applyValue):
        (WebCore::ApplyPropertyString::applyValue):
        (WebCore::ApplyPropertyBorderRadius::applyValue):
        (WebCore::ApplyPropertyFillLayer::applyInheritValue):
        (WebCore::ApplyPropertyFillLayer::applyInitialValue):
        (WebCore::ApplyPropertyFillLayer::applyValue):
        (WebCore::ApplyPropertyComputeLength::applyValue):
        (WebCore::ApplyPropertyFont::applyInheritValue):
        (WebCore::ApplyPropertyFont::applyInitialValue):
        (WebCore::ApplyPropertyFont::applyValue):
        (WebCore::ApplyPropertyFontSize::applyInheritValue):
        (WebCore::ApplyPropertyFontSize::applyInitialValue):
        (WebCore::ApplyPropertyFontSize::applyValue):
        (WebCore::ApplyPropertyFontWeight::applyValue):
        (WebCore::ApplyPropertyFontVariantLigatures::applyInheritValue):
        (WebCore::ApplyPropertyFontVariantLigatures::applyInitialValue):
        (WebCore::ApplyPropertyFontVariantLigatures::applyValue):
        (WebCore::ApplyPropertyBorderImage::applyValue):
        (WebCore::ApplyPropertyBorderImageModifier::applyInheritValue):
        (WebCore::ApplyPropertyBorderImageModifier::applyInitialValue):
        (WebCore::ApplyPropertyBorderImageModifier::applyValue):
        (WebCore::ApplyPropertyBorderImageSource::applyValue):
        (WebCore::ApplyPropertyCounter::emptyFunction):
        (WebCore::ApplyPropertyCounter::applyInheritValue):
        (WebCore::ApplyPropertyCounter::applyValue):
        (WebCore::ApplyPropertyCursor::applyInheritValue):
        (WebCore::ApplyPropertyCursor::applyInitialValue):
        (WebCore::ApplyPropertyCursor::applyValue):
        (WebCore::ApplyPropertyTextAlign::applyValue):
        (WebCore::ApplyPropertyTextDecoration::applyValue):
        (WebCore::ApplyPropertyUnicodeBidi::applyValue):
        (WebCore::ApplyPropertyLineHeight::applyValue):
        (WebCore::ApplyPropertyPageSize::applyInheritValue):
        (WebCore::ApplyPropertyPageSize::applyInitialValue):
        (WebCore::ApplyPropertyPageSize::applyValue):
        (WebCore::ApplyPropertyTextEmphasisStyle::applyInheritValue):
        (WebCore::ApplyPropertyTextEmphasisStyle::applyInitialValue):
        (WebCore::ApplyPropertyTextEmphasisStyle::applyValue):
        (WebCore):
        (WebCore::ApplyPropertyAnimation::map):
        (WebCore::ApplyPropertyAnimation::applyInheritValue):
        (WebCore::ApplyPropertyAnimation::applyInitialValue):
        (WebCore::ApplyPropertyAnimation::applyValue):
        (WebCore::ApplyPropertyOutlineStyle::applyInheritValue):
        (WebCore::ApplyPropertyOutlineStyle::applyInitialValue):
        (WebCore::ApplyPropertyOutlineStyle::applyValue):
        (WebCore::ApplyPropertyResize::applyValue):
        (WebCore::ApplyPropertyVerticalAlign::applyValue):
        (WebCore::ApplyPropertyAspectRatio::applyInheritValue):
        (WebCore::ApplyPropertyAspectRatio::applyInitialValue):
        (WebCore::ApplyPropertyAspectRatio::applyValue):
        (WebCore::ApplyPropertyZoom::resetEffectiveZoom):
        (WebCore::ApplyPropertyZoom::applyInheritValue):
        (WebCore::ApplyPropertyZoom::applyInitialValue):
        (WebCore::ApplyPropertyZoom::applyValue):
        (WebCore::ApplyPropertyDisplay::isValidDisplayValue):
        (WebCore::ApplyPropertyDisplay::applyInheritValue):
        (WebCore::ApplyPropertyDisplay::applyInitialValue):
        (WebCore::ApplyPropertyDisplay::applyValue):
        (WebCore::ApplyPropertyFlex::applyInheritValue):
        (WebCore::ApplyPropertyFlex::applyInitialValue):
        (WebCore::ApplyPropertyFlex::applyValue):
        (WebCore::StyleBuilder::StyleBuilder):
        * css/StyleBuilder.h:
        (WebCore):
        (PropertyHandler):
        (WebCore::PropertyHandler::applyInheritValue):
        (WebCore::PropertyHandler::applyInitialValue):
        (WebCore::PropertyHandler::applyValue):
        * css/StyleMedia.cpp:
        (WebCore::StyleMedia::matchMedium):
        * css/WebKitCSSKeyframesRule.cpp:
        (WebCore::WebKitCSSKeyframesRule::setName):
        * css/WebKitCSSMatrix.cpp:
        (WebCore::WebKitCSSMatrix::setMatrixValue):
        * dom/Document.cpp:
        (WebCore::Document::recalcStyle):
        (WebCore::Document::createStyleSelector):
        (WebCore::Document::testAddedStylesheetRequiresStyleRecalc):
        * dom/Document.h:
        (WebCore):
        (WebCore::Document::styleSelectorIfExists):
        (WebCore::Document::styleSelector):
        (Document):
        * dom/Element.cpp:
        (StyleSelectorParentPusher):
        (WebCore::Element::attributeChanged):
        (WebCore::Element::beginParsingChildren):
        (WebCore::Element::finishParsingChildren):
        * dom/ShadowRoot.cpp:
        (WebCore::ShadowRoot::attach):
        * dom/ShadowTree.cpp:
        (WebCore::ShadowTree::recalcShadowTreeStyle):
        * editing/EditingStyle.cpp:
        (WebCore::EditingStyle::mergeStyleFromRules):
        (WebCore::EditingStyle::removeStyleFromRulesAndContext):
        (WebCore::EditingStyle::removePropertiesInElementDefaultStyle):
        (WebCore::legacyFontSizeFromCSSValue):
        * editing/FrameSelection.cpp:
        (WebCore::FrameSelection::focusedOrActiveStateChanged):
        * history/CachedPage.cpp:
        (WebCore::CachedPage::restore):
        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::styleSelector):
        * html/HTMLCanvasElement.h:
        (HTMLCanvasElement):
        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::process):
        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::setFont):
        * inspector/InspectorCSSAgent.cpp:
        (WebCore::InspectorCSSAgent::getMatchedStylesForNode):
        (WebCore::InspectorCSSAgent::buildArrayForRuleList):
        * inspector/InspectorCSSAgent.h:
        (InspectorCSSAgent):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::getMatchedCSSRules):
        * page/Page.cpp:
        (WebCore::Page::allVisitedStateChanged):
        (WebCore::Page::visitedStateChanged):
        * page/animation/AnimationController.cpp:
        (WebCore::AnimationController::updateAnimations):
        * platform/blackberry/RenderThemeBlackBerry.cpp:
        (WebCore::RenderThemeBlackBerry::adjustButtonStyle):
        (WebCore::RenderThemeBlackBerry::adjustTextAreaStyle):
        (WebCore::RenderThemeBlackBerry::adjustTextFieldStyle):
        (WebCore::RenderThemeBlackBerry::adjustSearchFieldStyle):
        (WebCore::RenderThemeBlackBerry::adjustSearchFieldCancelButtonStyle):
        (WebCore::RenderThemeBlackBerry::adjustMenuListButtonStyle):
        (WebCore::RenderThemeBlackBerry::adjustMenuListStyle):
        (WebCore::RenderThemeBlackBerry::adjustCheckboxStyle):
        (WebCore::RenderThemeBlackBerry::adjustRadioStyle):
        * platform/blackberry/RenderThemeBlackBerry.h:
        (RenderThemeBlackBerry):
        * platform/efl/RenderThemeEfl.cpp:
        (WebCore::RenderThemeEfl::adjustSliderTrackStyle):
        (WebCore::RenderThemeEfl::adjustSliderThumbStyle):
        (WebCore::RenderThemeEfl::adjustCheckboxStyle):
        (WebCore::RenderThemeEfl::adjustRadioStyle):
        (WebCore::RenderThemeEfl::adjustButtonStyle):
        (WebCore::RenderThemeEfl::adjustMenuListStyle):
        (WebCore::RenderThemeEfl::adjustMenuListButtonStyle):
        (WebCore::RenderThemeEfl::adjustTextFieldStyle):
        (WebCore::RenderThemeEfl::adjustTextAreaStyle):
        (WebCore::RenderThemeEfl::adjustSearchFieldDecorationStyle):
        (WebCore::RenderThemeEfl::adjustSearchFieldResultsButtonStyle):
        (WebCore::RenderThemeEfl::adjustSearchFieldResultsDecorationStyle):
        (WebCore::RenderThemeEfl::adjustSearchFieldCancelButtonStyle):
        (WebCore::RenderThemeEfl::adjustSearchFieldStyle):
        (WebCore::RenderThemeEfl::adjustProgressBarStyle):
        * platform/efl/RenderThemeEfl.h:
        (RenderThemeEfl):
        * platform/gtk/RenderThemeGtk.cpp:
        (WebCore::RenderThemeGtk::adjustButtonStyle):
        (WebCore::RenderThemeGtk::adjustMenuListStyle):
        (WebCore::RenderThemeGtk::adjustMenuListButtonStyle):
        (WebCore::RenderThemeGtk::adjustSearchFieldResultsButtonStyle):
        (WebCore::RenderThemeGtk::adjustSearchFieldResultsDecorationStyle):
        (WebCore::RenderThemeGtk::adjustSearchFieldCancelButtonStyle):
        (WebCore::RenderThemeGtk::adjustSearchFieldStyle):
        (WebCore::RenderThemeGtk::adjustSliderTrackStyle):
        (WebCore::RenderThemeGtk::adjustSliderThumbStyle):
        (WebCore::RenderThemeGtk::adjustProgressBarStyle):
        * platform/gtk/RenderThemeGtk.h:
        (RenderThemeGtk):
        * platform/gtk/RenderThemeGtk2.cpp:
        (WebCore::RenderThemeGtk::adjustInnerSpinButtonStyle):
        * platform/gtk/RenderThemeGtk3.cpp:
        (WebCore::RenderThemeGtk::adjustInnerSpinButtonStyle):
        * platform/qt/RenderThemeQt.cpp:
        (WebCore::RenderThemeQt::adjustTextFieldStyle):
        (WebCore::RenderThemeQt::adjustTextAreaStyle):
        (WebCore::RenderThemeQt::adjustMenuListStyle):
        (WebCore::RenderThemeQt::adjustMenuListButtonStyle):
        (WebCore::RenderThemeQt::adjustProgressBarStyle):
        (WebCore::RenderThemeQt::adjustSliderTrackStyle):
        (WebCore::RenderThemeQt::adjustSliderThumbStyle):
        (WebCore::RenderThemeQt::adjustSearchFieldStyle):
        (WebCore::RenderThemeQt::adjustSearchFieldCancelButtonStyle):
        (WebCore::RenderThemeQt::adjustSearchFieldDecorationStyle):
        (WebCore::RenderThemeQt::adjustSearchFieldResultsDecorationStyle):
        (WebCore::RenderThemeQt::adjustInnerSpinButtonStyle):
        * platform/qt/RenderThemeQt.h:
        (RenderThemeQt):
        * platform/qt/RenderThemeQtMobile.cpp:
        (WebCore::RenderThemeQtMobile::adjustButtonStyle):
        (WebCore::RenderThemeQtMobile::adjustTextFieldStyle):
        (WebCore::RenderThemeQtMobile::adjustMenuListStyle):
        * platform/qt/RenderThemeQtMobile.h:
        (RenderThemeQtMobile):
        * platform/wx/RenderThemeWx.cpp:
        (RenderThemeWx):
        (WebCore::RenderThemeWx::adjustButtonStyle):
        (WebCore::RenderThemeWx::adjustTextFieldStyle):
        (WebCore::RenderThemeWx::adjustMenuListStyle):
        (WebCore::RenderThemeWx::adjustMenuListButtonStyle):
        * rendering/RenderInputSpeech.cpp:
        (WebCore::RenderInputSpeech::adjustInputFieldSpeechButtonStyle):
        * rendering/RenderInputSpeech.h:
        (RenderInputSpeech):
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::adjustStyle):
        (WebCore::RenderTheme::adjustCheckboxStyle):
        (WebCore::RenderTheme::adjustRadioStyle):
        (WebCore::RenderTheme::adjustButtonStyle):
        (WebCore::RenderTheme::adjustInnerSpinButtonStyle):
        (WebCore::RenderTheme::adjustTextFieldStyle):
        (WebCore::RenderTheme::adjustTextAreaStyle):
        (WebCore::RenderTheme::adjustMenuListStyle):
        (WebCore::RenderTheme::adjustInputFieldSpeechButtonStyle):
        (WebCore::RenderTheme::adjustMeterStyle):
        (WebCore::RenderTheme::adjustProgressBarStyle):
        (WebCore::RenderTheme::adjustMenuListButtonStyle):
        (WebCore::RenderTheme::adjustSliderTrackStyle):
        (WebCore::RenderTheme::adjustSliderThumbStyle):
        (WebCore::RenderTheme::adjustSearchFieldStyle):
        (WebCore::RenderTheme::adjustSearchFieldCancelButtonStyle):
        (WebCore::RenderTheme::adjustSearchFieldDecorationStyle):
        (WebCore::RenderTheme::adjustSearchFieldResultsDecorationStyle):
        (WebCore::RenderTheme::adjustSearchFieldResultsButtonStyle):
        * rendering/RenderTheme.h:
        (RenderTheme):
        * rendering/RenderThemeChromiumAndroid.cpp:
        (WebCore::RenderThemeChromiumAndroid::adjustInnerSpinButtonStyle):
        * rendering/RenderThemeChromiumAndroid.h:
        (RenderThemeChromiumAndroid):
        * rendering/RenderThemeChromiumLinux.cpp:
        (WebCore::RenderThemeChromiumLinux::adjustInnerSpinButtonStyle):
        * rendering/RenderThemeChromiumLinux.h:
        (RenderThemeChromiumLinux):
        * rendering/RenderThemeChromiumSkia.cpp:
        (WebCore::RenderThemeChromiumSkia::adjustButtonStyle):
        (WebCore::RenderThemeChromiumSkia::adjustSearchFieldStyle):
        (WebCore::RenderThemeChromiumSkia::adjustSearchFieldCancelButtonStyle):
        (WebCore::RenderThemeChromiumSkia::adjustSearchFieldDecorationStyle):
        (WebCore::RenderThemeChromiumSkia::adjustSearchFieldResultsDecorationStyle):
        (WebCore::RenderThemeChromiumSkia::adjustSearchFieldResultsButtonStyle):
        (WebCore::RenderThemeChromiumSkia::adjustMenuListStyle):
        (WebCore::RenderThemeChromiumSkia::adjustMenuListButtonStyle):
        * rendering/RenderThemeChromiumSkia.h:
        (RenderThemeChromiumSkia):
        * rendering/RenderThemeChromiumWin.cpp:
        (WebCore):
        (WebCore::RenderThemeChromiumWin::adjustInnerSpinButtonStyle):
        (WebCore::RenderThemeChromiumWin::adjustProgressBarStyle):
        * rendering/RenderThemeChromiumWin.h:
        (RenderThemeChromiumWin):
        * rendering/RenderThemeMac.h:
        (RenderThemeMac):
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::setFontFromControlSize):
        (WebCore::RenderThemeMac::adjustTextFieldStyle):
        (WebCore::RenderThemeMac::adjustTextAreaStyle):
        (WebCore::RenderThemeMac::adjustProgressBarStyle):
        (WebCore::RenderThemeMac::adjustMenuListStyle):
        (WebCore::RenderThemeMac::adjustMenuListButtonStyle):
        (WebCore::RenderThemeMac::adjustSliderTrackStyle):
        (WebCore::RenderThemeMac::adjustSliderThumbStyle):
        (WebCore::RenderThemeMac::adjustSearchFieldStyle):
        (WebCore::RenderThemeMac::adjustSearchFieldCancelButtonStyle):
        (WebCore::RenderThemeMac::adjustSearchFieldDecorationStyle):
        (WebCore::RenderThemeMac::adjustSearchFieldResultsDecorationStyle):
        (WebCore::RenderThemeMac::adjustSearchFieldResultsButtonStyle):
        * rendering/RenderThemeSafari.cpp:
        (WebCore::RenderThemeSafari::setFontFromControlSize):
        (WebCore::RenderThemeSafari::adjustButtonStyle):
        (WebCore::RenderThemeSafari::adjustTextFieldStyle):
        (WebCore::RenderThemeSafari::adjustTextAreaStyle):
        (WebCore::RenderThemeSafari::adjustMenuListStyle):
        (WebCore::RenderThemeSafari::adjustMenuListButtonStyle):
        (WebCore::RenderThemeSafari::adjustSliderThumbStyle):
        (WebCore::RenderThemeSafari::adjustSearchFieldStyle):
        (WebCore::RenderThemeSafari::adjustSearchFieldCancelButtonStyle):
        (WebCore::RenderThemeSafari::adjustSearchFieldDecorationStyle):
        (WebCore::RenderThemeSafari::adjustSearchFieldResultsDecorationStyle):
        (WebCore::RenderThemeSafari::adjustSearchFieldResultsButtonStyle):
        * rendering/RenderThemeSafari.h:
        (RenderThemeSafari):
        * rendering/RenderThemeWin.cpp:
        (WebCore::RenderThemeWin::adjustInnerSpinButtonStyle):
        (WebCore::RenderThemeWin::adjustMenuListStyle):
        (WebCore::RenderThemeWin::adjustMenuListButtonStyle):
        (WebCore::RenderThemeWin::adjustSearchFieldStyle):
        (WebCore::RenderThemeWin::adjustSearchFieldCancelButtonStyle):
        (WebCore::RenderThemeWin::adjustSearchFieldDecorationStyle):
        (WebCore::RenderThemeWin::adjustSearchFieldResultsDecorationStyle):
        (WebCore::RenderThemeWin::adjustSearchFieldResultsButtonStyle):
        * rendering/RenderThemeWin.h:
        (RenderThemeWin):
        (WebCore::RenderThemeWin::adjustButtonStyle):
        (WebCore::RenderThemeWin::adjustTextFieldStyle):
        (WebCore::RenderThemeWin::adjustTextAreaStyle):
        * rendering/RenderThemeWinCE.cpp:
        (WebCore::RenderThemeWinCE::adjustMenuListStyle):
        (WebCore::RenderThemeWinCE::adjustSearchFieldStyle):
        (WebCore::RenderThemeWinCE::adjustSearchFieldCancelButtonStyle):
        (WebCore::RenderThemeWinCE::adjustSearchFieldDecorationStyle):
        (WebCore::RenderThemeWinCE::adjustSearchFieldResultsDecorationStyle):
        (WebCore::RenderThemeWinCE::adjustSearchFieldResultsButtonStyle):
        (WebCore::RenderThemeWinCE::adjustMenuListButtonStyle):
        * rendering/RenderThemeWinCE.h:
        (RenderThemeWinCE):
        (WebCore::RenderThemeWinCE::adjustButtonStyle):
        (WebCore::RenderThemeWinCE::adjustTextFieldStyle):
        (WebCore::RenderThemeWinCE::adjustTextAreaStyle):
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::isStyleAvailable):
        * rendering/style/RenderStyle.h:
        (WebCore):
        * rendering/style/StyleRareNonInheritedData.h:
        (WebCore):
        * rendering/svg/RenderSVGInlineText.cpp:
        (WebCore::RenderSVGInlineText::computeNewScaledFontForStyle):
        * rendering/svg/SVGRenderSupport.cpp:
        (WebCore::SVGRenderSupport::isOverflowHidden):

2012-04-15  Robert Hogan  <robert@webkit.org>

        CSS 2.1 failure: table-columns-example-001 fails
        https://bugs.webkit.org/show_bug.cgi?id=83978

        Reviewed by David Hyatt.

        Tests: css2.1/20110323/table-columns-example-001.html
               fast/css/table-rules-attribute-groups-with-frame.html
               fast/css/table-rules-attribute-groups.html
               fast/css/table-rules-attribute-none-with-frame.html
               fast/css/table-rules-attribute-with-frame1.html
               fast/css/table-rules-attribute-with-frame2.html
               fast/css/table-rules-attribute.html

        WebKit does not implement the 'cols', 'rows', and 'all' rules attributes correctly
        for cells that are adjacent to the table's edges. The solution is to follow the hint in the
        spec at http://www.w3.org/TR/CSS21/tables.html#columns and set the table's border to 
        hidden when the rules attribute is set to one of 'cols', 'rows' or 'all', and the table itself
        has no explicit border. Border collapsing will take care of the rest as 'hidden' always wins in 
        border-conflict resolution. It's not completely clear from the spec that an explicit table border
        should trump a cols rule but doing so is consistent with FF and Opera at least. A 'rules' attribute
        is trumped by anything specified for the 'frame' attribute so need to ensure that is respected too.

        In short, any 'rules' attribute means a hidden table border unless there's a frame or border attribute.

        * html/HTMLTableElement.cpp:
        (WebCore::HTMLTableElement::additionalAttributeStyle):

2012-04-22  Timothy Hatcher  <timothy@apple.com>

        Stop installing localizedStrings.js in Production builds.

        <rdar://problem/11296649>

        Reviewed by Joseph Pecoraro.

        * Configurations/WebCore.xcconfig: Added EXCLUDED_SOURCE_FILE_NAMES_Production_macosx
        and modified EXCLUDED_SOURCE_FILE_NAMES to look for CONFIGURATION variant.

2012-04-24  Yuzhu Shen  <yzshen@chromium.org>

        [chromium] Add a description field in WebURLError and show failure description in the inspector network tab.
        https://bugs.webkit.org/show_bug.cgi?id=84566

        Reviewed by Pavel Feldman.

        * inspector/front-end/NetworkPanel.js:
        (WebInspector.NetworkDataGridNode.prototype._refreshStatusCell):
        * platform/chromium/support/WebURLError.cpp:
        (WebKit::WebURLError::operator=):
        (WebKit::WebURLError::operator ResourceError):

2012-04-24  Rob Buis  <rbuis@rim.com>

        [SVG] getBBox on a <g> within symbol returns 0 but with defs it works correctly
        https://bugs.webkit.org/show_bug.cgi?id=72796

        SVG <use> of <symbol> containing <linearGradient> renders black
        https://bugs.webkit.org/show_bug.cgi?id=82775

        Reviewed by Dirk Schulze.

        Create RenderSVGHiddenContainer for each <symbol>, which allows creation of child renderers too. This fixes
        both bugs since the bbox can be calculated at all times now and gradients in <symbol> are always created.
        This does allocate more memory but in general <symbol> is not used a lot and they tend to be small subtrees.

        Patch by Leo Yang.

        Tests: svg/custom/bbox-of-g-in-symbol.svg
               svg/custom/gradient-in-symbol-expected.svg
               svg/custom/gradient-in-symbol.svg

        * svg/SVGSymbolElement.cpp:
        (WebCore::SVGSymbolElement::createRenderer):
        (WebCore):
        * svg/SVGSymbolElement.h:
        (SVGSymbolElement):

2012-04-24  Brady Eidson  <beidson@apple.com>

        <rdar://problem/10120155> and https://bugs.webkit.org/show_bug.cgi?id=82664
         Need DOMWindow mechanism to supplement UserScripts for page cache notifications

        This patch creates a new object type "DOMWindowExtension" which extends DOMWindowProperty.
        A DOMWindowExtension is tied to a particular DOMWindow and represents extensibility in that
        DOMWindow within a particular DOMWrapperWorld.

        It is a token object meant designed to notify clients of the various events in the lifetime
        of a DOMWindow property such as creation, disconnecting for the page cache, reconnecting
        when restoring from the page cache, and DOMWindow destruction.

        Reviewed by Sam Weinig.

        New WebKit API test DOMWindowExtensionBasic added.

        Add hooks for 4 new client calls regarding DOMWindowExtensions and global object lifetime:
        * loader/FrameLoaderClient.h:
        (WebCore::FrameLoaderClient::dispatchCanCreateGlobalObject):
        (WebCore::FrameLoaderClient::dispatchWillDisconnectDOMWindowExtensionFromGlobalObject):
        (WebCore::FrameLoaderClient::dispatchDidReconnectDOMWindowExtensionToGlobalObject):
        (WebCore::FrameLoaderClient::dispatchWillDestroyGlobalObjectForDOMWindowExtension):
        
        At the same time "DidClearWindowObject" is called, also notify clients that the global object is available:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::receivedFirstData):
        (WebCore::FrameLoader::dispatchGlobalObjectAvailableInAllWorlds):
        * loader/FrameLoader.h:

         DOMWindowProperties might want to unregister themselves during these notifications, so copy
         the set to a Vector. While this technique is arguably fragile, its certainly less fragile than
         mutating a set while iterating it:
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::willDetachPage):
        (WebCore::DOMWindow::disconnectDOMWindowProperties):
        (WebCore::DOMWindow::reconnectDOMWindowProperties):

         Implement the DOMWindowExtension object. It acts like a DOMWindowProperty with the added capability
         of remembering what Frame it used to be connected to so it can *always* notify clients on willDetachPage:
        * page/DOMWindowExtension.cpp: Added.
        (WebCore::DOMWindowExtension::DOMWindowExtension):
        (WebCore::DOMWindowExtension::~DOMWindowExtension):
        (WebCore::DOMWindowExtension::disconnectFrame):
        (WebCore::DOMWindowExtension::reconnectFrame):
        (WebCore::DOMWindowExtension::willDetachPage):
        * page/DOMWindowExtension.h: Added.
        (WebCore::DOMWindowExtension::create):
        (WebCore::DOMWindowExtension::world):

         Project files:
        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.exp.in:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:

2012-04-24  Sami Kyostila  <skyostil@chromium.org>

        [chromium] Don't keep pointers to released layer tree
        https://bugs.webkit.org/show_bug.cgi?id=84715

        Reviewed by Adrienne Walker.

        As part of tree synchronization, CCLayerTreeHostImpl loses ownership of
        the previous tree (as per releaseRootLayer()). After this point we
        should not retain any pointers to the old tree, because they are
        effectively invalid as soon as the root layer is released.

        For processing scroll updates we need to keep track of which layer is
        being scrolled, and this state needs to survive tree synchronizations.
        Instead of keeping a direct pointer to the scrolled layer, we now save
        the id of that layer and use it to look up the same layer from the new
        tree.

        Unit test: CCLayerTreeHostImplTest.replaceTreeWhileScrolling

        * platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:
        (WebCore::CCLayerTreeHostImpl::CCLayerTreeHostImpl):
        (WebCore::CCLayerTreeHostImpl::setRootLayer):
        (WebCore::CCLayerTreeHostImpl::releaseRootLayer):
        (WebCore::CCLayerTreeHostImpl::scrollBegin):
        (WebCore::CCLayerTreeHostImpl::scrollEnd):
        * platform/graphics/chromium/cc/CCLayerTreeHostImpl.h:
        (CCLayerTreeHostImpl):

2012-04-24  Alexandru Chiculita  <achicu@adobe.com>

        [CSS Filters] Move m_filter and related fields from RenderLayer to a different structure and only allocate it when needed
        https://bugs.webkit.org/show_bug.cgi?id=84460

        Reviewed by Dean Jackson.

        The new RenderLayerFilterInfo is meant to be allocated only when needed by filters. The link to the RenderLayerFilterInfo
        is maintained using a HashMap and a single boolean in the RenderLayer class.

        No new tests, just extracted a couple of fields inside the RenderLayer to a separate class.

        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * rendering/FilterEffectRenderer.cpp:
        (WebCore::FilterEffectRendererHelper::prepareFilterEffect):
        (WebCore::FilterEffectRendererHelper::beginFilterEffect):
        (WebCore::FilterEffectRendererHelper::applyFilterEffect):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::RenderLayer):
        (WebCore::RenderLayer::~RenderLayer):
        (WebCore::RenderLayer::paintsWithFilters):
        (WebCore::RenderLayer::requiresFullLayerImageForFilters):
        (WebCore::RenderLayer::setFilterBackendNeedsRepaintingInRect):
        (WebCore::RenderLayer::paintLayerContents):
        (WebCore::RenderLayer::updateOrRemoveFilterEffect):
        * rendering/RenderLayer.h:
        (WebCore::RenderLayer::filterRenderer):
        (RenderLayer):
        (WebCore::RenderLayer::filterInfo):
        (WebCore::RenderLayer::ensureFilterInfo):
        (WebCore::RenderLayer::removeFilterInfoIfNeeded):
        (WebCore::RenderLayer::hasFilterInfo):
        (WebCore::RenderLayer::setHasFilterInfo):
        * rendering/RenderLayerFilterInfo.cpp: Added.
        (WebCore):
        (WebCore::RenderLayerFilterInfo::filterInfoForRenderLayer):
        (WebCore::RenderLayerFilterInfo::createFilterInfoForRenderLayerIfNeeded):
        (WebCore::RenderLayerFilterInfo::removeFilterInfoForRenderLayer):
        (WebCore::RenderLayerFilterInfo::RenderLayerFilterInfo):
        (WebCore::RenderLayerFilterInfo::~RenderLayerFilterInfo):
        (WebCore::RenderLayerFilterInfo::setRenderer):
        * rendering/RenderLayerFilterInfo.h: Added.
        (WebCore):
        (RenderLayerFilterInfo):
        (WebCore::RenderLayerFilterInfo::dirtySourceRect):
        (WebCore::RenderLayerFilterInfo::addDirtySourceRect):
        (WebCore::RenderLayerFilterInfo::resetDirtySourceRect):
        (WebCore::RenderLayerFilterInfo::renderer):

2012-04-24  Kentaro Hara  <haraken@chromium.org>

        [V8] Pass Isolate around in SerializedScriptValue.cpp (Part1)
        https://bugs.webkit.org/show_bug.cgi?id=84663

        Reviewed by Nate Chapin.

        The objective is to pass Isolate to toV8() in SerializedScriptValue.cpp.

        Part1: Add an Isolate argument to SerializedScriptValue::create(),
        SerializedScriptValue::deserialize(), etc.
        Part2: Add an m_isolate member to SerializedScriptValue::Writer()
        and SerializedScriptValue::Reader().
        Part3: Pass Isolate to toV8().

        This patch fixes Part1.

        No tests. No change in behavior.

        * bindings/v8/SerializedScriptValue.cpp:
        (WebCore::SerializedScriptValue::create):
        (WebCore::SerializedScriptValue::undefinedValue):
        (WebCore::SerializedScriptValue::booleanValue):
        (WebCore::SerializedScriptValue::numberValue):
        (WebCore::SerializedScriptValue::SerializedScriptValue):
        (WebCore::SerializedScriptValue::deserialize):
        (WebCore::SerializedScriptValue::deserializeForInspector):
        * bindings/v8/SerializedScriptValue.h:
        (SerializedScriptValue):

2012-04-24  Kentaro Hara  <haraken@chromium.org>

        [V8][Refactoring] Remove deserializeAndSetProperty()
        from SerializedScriptValue.cpp
        https://bugs.webkit.org/show_bug.cgi?id=84662

        Reviewed by Nate Chapin.

        SerializedScriptValue::deserializeAndSetProperty() is no
        longer used. This patch removes it.

        No tests. No change in behavior.

        * bindings/v8/SerializedScriptValue.cpp:
        * bindings/v8/SerializedScriptValue.h:

2012-04-24  Kentaro Hara  <haraken@chromium.org>

        [V8] Pass Isolate to setDOMException() in CodeGeneratorV8.pm
        https://bugs.webkit.org/show_bug.cgi?id=84660

        Reviewed by Nate Chapin.

        The objective is to pass Isolate around in V8 bindings.
        This patch passes Isolate to setDOMException() in CodeGeneratorV8.pm.

        Test: bindings/scripts/test/TestEventTarget.idl
              bindings/scripts/test/TestObj.idl
              bindings/scripts/test/TestInterface.idl

        * bindings/scripts/CodeGeneratorV8.pm: Modified as described above.
        (GenerateSetDOMException):
        (GenerateNormalAttrGetter):
        (GenerateNormalAttrSetter):
        (GenerateFunctionCallback):
        (GenerateParametersCheck):
        (GenerateFunctionCallString):

        * bindings/scripts/test/V8/V8TestEventTarget.cpp:
        Updated run-bindings-tests results.
        (WebCore::TestEventTargetV8Internal::itemCallback):
        (WebCore::TestEventTargetV8Internal::dispatchEventCallback):
        * bindings/scripts/test/V8/V8TestInterface.cpp: Ditto.
        (WebCore::TestInterfaceV8Internal::supplementalMethod2Callback):
        * bindings/scripts/test/V8/V8TestObj.cpp: Ditto.
        (WebCore::TestObjV8Internal::attrWithGetterExceptionAttrGetter):
        (WebCore::TestObjV8Internal::attrWithGetterExceptionAttrSetter):
        (WebCore::TestObjV8Internal::attrWithSetterExceptionAttrSetter):
        (WebCore::TestObjV8Internal::stringAttrWithGetterExceptionAttrGetter):
        (WebCore::TestObjV8Internal::stringAttrWithGetterExceptionAttrSetter):
        (WebCore::TestObjV8Internal::stringAttrWithSetterExceptionAttrSetter):
        (WebCore::TestObjV8Internal::withScriptStateAttributeRaisesAttrGetter):
        (WebCore::TestObjV8Internal::withScriptStateAttributeRaisesAttrSetter):
        (WebCore::TestObjV8Internal::withScriptExecutionContextAttributeRaisesAttrGetter):
        (WebCore::TestObjV8Internal::withScriptExecutionContextAttributeRaisesAttrSetter):
        (WebCore::TestObjV8Internal::withScriptExecutionContextAndScriptStateAttributeRaisesAttrGetter):
        (WebCore::TestObjV8Internal::withScriptExecutionContextAndScriptStateAttributeRaisesAttrSetter):
        (WebCore::TestObjV8Internal::methodThatRequiresAllArgsAndThrowsCallback):
        (WebCore::TestObjV8Internal::methodWithExceptionCallback):
        (WebCore::TestObjV8Internal::withScriptStateVoidExceptionCallback):
        (WebCore::TestObjV8Internal::withScriptStateObjExceptionCallback):
        (WebCore::TestObjV8Internal::withScriptExecutionContextAndScriptStateObjExceptionCallback):
        (WebCore::TestObjV8Internal::getSVGDocumentCallback):
        (WebCore::TestObjV8Internal::strictFunctionCallback):

2012-04-24  Kentaro Hara  <haraken@chromium.org>

        [V8] Pass Isolate to setDOMException() (Part2)
        https://bugs.webkit.org/show_bug.cgi?id=84658

        Reviewed by Nate Chapin.

        The objective is to pass Isolate around in V8 bindings.
        This patch passes Isolate to setDOMException() in custom
        binding code.

        No tests. No change in behavior.

        * bindings/v8/V8Collection.cpp:
        (WebCore::toOptionsCollectionSetter):
        * bindings/v8/V8Collection.h:
        (WebCore):
        * bindings/v8/custom/V8ArrayBufferViewCustom.h:
        (WebCore::constructWebGLArrayWithArrayBufferArgument):
        (WebCore::setWebGLArrayHelper):
        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        (WebCore::WindowSetTimeoutImpl):
        * bindings/v8/custom/V8DataViewCustom.cpp:
        (WebCore::V8DataView::getInt8Callback):
        (WebCore::V8DataView::getUint8Callback):
        (WebCore::V8DataView::setInt8Callback):
        (WebCore::V8DataView::setUint8Callback):
        * bindings/v8/custom/V8DirectoryEntrySyncCustom.cpp:
        (WebCore::V8DirectoryEntrySync::getDirectoryCallback):
        (WebCore::V8DirectoryEntrySync::getFileCallback):
        * bindings/v8/custom/V8HTMLCanvasElementCustom.cpp:
        (WebCore::V8HTMLCanvasElement::toDataURLCallback):
        * bindings/v8/custom/V8HTMLElementCustom.cpp:
        (WebCore::V8HTMLElement::itemValueAccessorSetter):
        * bindings/v8/custom/V8HTMLOptionsCollectionCustom.cpp:
        (WebCore::V8HTMLOptionsCollection::addCallback):
        (WebCore::V8HTMLOptionsCollection::lengthAccessorSetter):
        (WebCore::V8HTMLOptionsCollection::indexedPropertySetter):
        * bindings/v8/custom/V8HTMLSelectElementCustom.cpp:
        (WebCore::V8HTMLSelectElement::indexedPropertySetter):
        * bindings/v8/custom/V8NodeCustom.cpp:
        (WebCore::V8Node::insertBeforeCallback):
        (WebCore::V8Node::replaceChildCallback):
        (WebCore::V8Node::removeChildCallback):
        (WebCore::V8Node::appendChildCallback):
        * bindings/v8/custom/V8SQLTransactionCustom.cpp:
        (WebCore::V8SQLTransaction::executeSqlCallback):
        * bindings/v8/custom/V8WebKitMutationObserverCustom.cpp:
        (WebCore::V8WebKitMutationObserver::observeCallback):
        * bindings/v8/custom/V8XMLHttpRequestCustom.cpp:
        (WebCore::V8XMLHttpRequest::responseAccessorGetter):

2012-04-24  Kentaro Hara  <haraken@chromium.org>

        [V8] Pass Isolate to setDOMException() (Part1)
        https://bugs.webkit.org/show_bug.cgi?id=84656

        Reviewed by Nate Chapin.

        The objective is to pass Isolate around in V8 bindings.
        This patch passes Isolate to setDOMException() in custom binding code.

        No tests. No change in behavior.

        * bindings/v8/custom/V8LocationCustom.cpp:
        (WebCore::V8Location::protocolAccessorSetter):
        * bindings/v8/custom/V8SQLTransactionSyncCustom.cpp:
        (WebCore::V8SQLTransactionSync::executeSqlCallback):
        * bindings/v8/custom/V8SVGLengthCustom.cpp:
        (WebCore::V8SVGLength::valueAccessorGetter):
        (WebCore::V8SVGLength::valueAccessorSetter):
        (WebCore::V8SVGLength::convertToSpecifiedUnitsCallback):
        * bindings/v8/custom/V8WebGLRenderingContextCustom.cpp:
        (WebCore::getObjectParameter):
        (WebCore::V8WebGLRenderingContext::getAttachedShadersCallback):
        (WebCore::V8WebGLRenderingContext::getExtensionCallback):
        (WebCore::V8WebGLRenderingContext::getFramebufferAttachmentParameterCallback):
        (WebCore::V8WebGLRenderingContext::getParameterCallback):
        (WebCore::V8WebGLRenderingContext::getProgramParameterCallback):
        (WebCore::V8WebGLRenderingContext::getShaderParameterCallback):
        (WebCore::V8WebGLRenderingContext::getUniformCallback):
        (WebCore::vertexAttribAndUniformHelperf):
        (WebCore::uniformHelperi):
        (WebCore::uniformMatrixHelper):

2012-04-24  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: encapsulate live location into the Script.
        https://bugs.webkit.org/show_bug.cgi?id=84722

        Reviewed by Yury Semikhatsky.

        Live location is just a location on the script. The way it is implemented today involves too many indirections.

        * inspector/front-end/CompilerScriptMapping.js:
        * inspector/front-end/DebuggerModel.js:
        (WebInspector.DebuggerModel.prototype.setBreakpointByScriptLocation):
        (WebInspector.DebuggerModel.prototype.scriptForId):
        * inspector/front-end/DebuggerPresentationModel.js:
        (WebInspector.DebuggerPresentationModel.prototype.createLiveLocation):
        (WebInspector.DebuggerPresentationModel.prototype._addConsoleMessageToScript):
        (WebInspector.DebuggerPresentationModel.prototype._debuggerPaused):
        (WebInspector.DebuggerPresentationModel.prototype.set selectedCallFrame):
        (WebInspector.PresentationCallFrame.prototype.uiLocation):
        (WebInspector.DebuggerPresentationModel.CallFramePlacard):
        (WebInspector.DebuggerPresentationModel.Linkifier.prototype.linkifyRawLocation):
        * inspector/front-end/RawSourceCode.js:
        * inspector/front-end/ResourceScriptMapping.js:
        (WebInspector.ResourceScriptMapping.prototype.addScript):
        (WebInspector.ResourceScriptMapping.prototype._uiSourceCodeChanged):
        (WebInspector.ResourceScriptMapping.prototype._bindScriptToRawSourceCode):
        * inspector/front-end/Script.js:
        (WebInspector.Script):
        (WebInspector.Script.prototype.isInlineScript):
        (WebInspector.Script.prototype.setSourceMapping):
        (WebInspector.Script.prototype.createLocation):
        (WebInspector.Script.Location):
        (WebInspector.Script.Location.prototype.dispose):
        (WebInspector.Script.Location.prototype._update):
        * inspector/front-end/ScriptMapping.js:
        (WebInspector.UILocation):
        (WebInspector.SourceMapping):
        (WebInspector.SourceMapping.prototype.rawLocationToUILocation):
        (WebInspector.SourceMapping.prototype.uiLocationToRawLocation):
        (WebInspector.MainScriptMapping):
        (WebInspector.MainScriptMapping.prototype.addScript):
        (WebInspector.MainScriptMapping.prototype.reset):
        * inspector/front-end/SnippetsModel.js:
        (WebInspector.SnippetsScriptMapping.prototype._createUISourceCodeForScript):

2012-04-24  Yury Semikhatsky  <yurys@chromium.org>

        Web Inspector: a bunch of heap profiler cleanups
        https://bugs.webkit.org/show_bug.cgi?id=84730

        - HeapSnapshotProviderProxy passed explicitely as a parameter to HeapSnapshotGridNode
        constructor
        - Removed dead code
        - Removed unused parameters
        - Added more closure compiler annotations
        - Extracted code finding cycled among node ancestors into a separate method

        Reviewed by Pavel Feldman.

        * inspector/front-end/HeapSnapshot.js:
        (WebInspector.HeapSnapshot.prototype.createEdgesProvider):
        (WebInspector.HeapSnapshot.prototype.createRetainingEdgesProvider):
        (WebInspector.HeapSnapshot.prototype.createNodesProviderForDominator):
        (WebInspector.HeapSnapshotEdgesProvider):
        * inspector/front-end/HeapSnapshotDataGrids.js:
        * inspector/front-end/HeapSnapshotGridNodes.js:
        (WebInspector.HeapSnapshotGridNode):
        (WebInspector.HeapSnapshotGenericObjectNode):
        (WebInspector.HeapSnapshotObjectNode):
        (WebInspector.HeapSnapshotObjectNode.prototype._findAncestorWithSameSnapshotNodeId):
        (WebInspector.HeapSnapshotInstanceNode):
        (WebInspector.HeapSnapshotConstructorNode):
        (WebInspector.HeapSnapshotDiffNode):
        (WebInspector.HeapSnapshotDiffNode._createProvider):
        (WebInspector.HeapSnapshotDominatorObjectNode):
        * inspector/front-end/HeapSnapshotProxy.js:
        (WebInspector.HeapSnapshotWorker):
        (WebInspector.HeapSnapshotProxy.prototype.createNodesProviderForDominator):
        * inspector/front-end/utilities.js:

2012-04-24  Adam Klein  <adamk@chromium.org>

        Fix includes in StrongInlines.h and ScriptValue.h
        https://bugs.webkit.org/show_bug.cgi?id=84659

        Reviewed by Geoffrey Garen.

        This change was prompted by an attempt to use ScriptValue.h from a
        WebCore header file and running into trouble with the (as it turns out
        unnecessary) include of JSDOMBinding.h.

        * bindings/js/ScriptValue.cpp: Add include of JSDOMBinding.h, now that
        it's not included by the header.
        * bindings/js/ScriptValue.h: Remove unnecessary include of JSDOMBinding.h.

2012-04-24  Antti Koivisto  <antti@apple.com>

        Move MediaList CSSOM wrapper ownership to parent rule or stylesheet
        https://bugs.webkit.org/show_bug.cgi?id=84716

        Reviewed by Anders Carlsson.

        MediaList CSSOM wrapper should be owned by a rule or a stylesheet, not by the underlying 
        MediaQuerySet.
        
        Remove the ref forwarding from MediaList in favor of regular refcounting. Use the usual
        pattern where the parent wrapper refs the child wrapper and zeroes the backpointer
        on destruction. 

        * bindings/js/JSDOMBinding.h:
        (WebCore::root):
        * css/CSSImportRule.cpp:
        (WebCore::CSSImportRule::~CSSImportRule):
        (WebCore::CSSImportRule::media):
        * css/CSSImportRule.h:
        (StyleRuleImport):
        (CSSImportRule):
        * css/CSSMediaRule.cpp:
        (WebCore::CSSMediaRule::~CSSMediaRule):
        (WebCore::CSSMediaRule::media):
        * css/CSSMediaRule.h:
        (CSSMediaRule):
        * css/CSSStyleSheet.cpp:
        (WebCore::CSSStyleSheet::~CSSStyleSheet):
        (WebCore::CSSStyleSheet::media):
        * css/CSSStyleSheet.h:
        (CSSStyleSheet):
        * css/MediaList.cpp:
        (WebCore::MediaQuerySet::mediaText):
        (WebCore::MediaList::MediaList):
        (WebCore):
        (WebCore::MediaList::notifyChanged):
        * css/MediaList.h:
        (MediaQuerySet):
        (WebCore::MediaList::create):
        (WebCore::MediaList::parentRule):
        (WebCore::MediaList::clearParentStyleSheet):
        (WebCore::MediaList::clearParentRule):
        (WebCore::MediaList::queries):
        (MediaList):
        * css/StyleRule.h:
        (WebCore::StyleRuleMedia::mediaQueries):

2012-04-24  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Should pass canvas/philip/tests/toDataURL.jpeg.alpha.html
        https://bugs.webkit.org/show_bug.cgi?id=83973

        Reviewed by Philippe Normand.

        Test: canvas/philip/tests/toDataURL.jpeg.alpha.html

        * platform/graphics/gtk/ImageBufferGtk.cpp:
        (WebCore::encodeImage): Convert ARGB32 cairo surface into RGB24
        when encoding JPEG images since JPEG encoder doesn't support alpha
        channel.

2012-04-24  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Add WebKitCookieManager::changed signal to WebKit2 GTK+ API
        https://bugs.webkit.org/show_bug.cgi?id=82598

        Reviewed by Philippe Normand.

        * GNUmakefile.list.am: Add new files to compilation.
        * platform/gtk/TemporaryLinkStubs.cpp: Remove stubs for
        setCookieStoragePrivateBrowsingEnabled,
        startObservingCookieChanges and stopObservingCookieChanges.
        * platform/network/soup/CookieStorageSoup.cpp: Added.
        (WebCore::setCookieStoragePrivateBrowsingEnabled):
        (WebCore::soupCookiesChanged): Notify cookies changes using
        platform strategies.
        (WebCore::startObservingCookieChanges): Connect to changed signal
        of the soup cookie jar.
        (WebCore::stopObservingCookieChanges): Disconnect signals handlers
        for changed signals of the soup cookie jar.

2012-04-24  Alexis Menard  <alexis.menard@openbossa.org>

        Rename CSSStyleApplyProperty files to StyleBuilder.
        https://bugs.webkit.org/show_bug.cgi?id=84721

        Reviewed by Antti Koivisto.

        r115043 renamed CSSStyleApplyProperty class to StyleBuilder. This
        patch rename the files to match the new class name.

        No new tests : renaming of files, no behavior changes expected.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSAllInOne.cpp:
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::collectMatchingRulesForList):
        * css/StyleBuilder.cpp: Renamed from Source/WebCore/css/CSSStyleApplyProperty.cpp.
        (WebCore):
        (ApplyPropertyExpanding):
        (WebCore::ApplyPropertyExpanding::applyInheritValue):
        (WebCore::ApplyPropertyExpanding::applyInitialValue):
        (WebCore::ApplyPropertyExpanding::applyValue):
        (WebCore::ApplyPropertyExpanding::createHandler):
        (ApplyPropertyDefaultBase):
        (WebCore::ApplyPropertyDefaultBase::setValue):
        (WebCore::ApplyPropertyDefaultBase::value):
        (WebCore::ApplyPropertyDefaultBase::initial):
        (WebCore::ApplyPropertyDefaultBase::applyInheritValue):
        (WebCore::ApplyPropertyDefaultBase::applyInitialValue):
        (WebCore::ApplyPropertyDefaultBase::applyValue):
        (WebCore::ApplyPropertyDefaultBase::createHandler):
        (ApplyPropertyDefault):
        (WebCore::ApplyPropertyDefault::setValue):
        (WebCore::ApplyPropertyDefault::applyValue):
        (WebCore::ApplyPropertyDefault::createHandler):
        (ApplyPropertyNumber):
        (WebCore::ApplyPropertyNumber::setValue):
        (WebCore::ApplyPropertyNumber::applyValue):
        (WebCore::ApplyPropertyNumber::createHandler):
        (ApplyPropertyStyleImage):
        (WebCore::ApplyPropertyStyleImage::applyValue):
        (WebCore::ApplyPropertyStyleImage::createHandler):
        (ApplyPropertyAuto):
        (WebCore::ApplyPropertyAuto::setValue):
        (WebCore::ApplyPropertyAuto::value):
        (WebCore::ApplyPropertyAuto::hasAuto):
        (WebCore::ApplyPropertyAuto::setAuto):
        (WebCore::ApplyPropertyAuto::applyInheritValue):
        (WebCore::ApplyPropertyAuto::applyInitialValue):
        (WebCore::ApplyPropertyAuto::applyValue):
        (WebCore::ApplyPropertyAuto::createHandler):
        (ApplyPropertyClip):
        (WebCore::ApplyPropertyClip::convertToLength):
        (WebCore::ApplyPropertyClip::applyInheritValue):
        (WebCore::ApplyPropertyClip::applyInitialValue):
        (WebCore::ApplyPropertyClip::applyValue):
        (WebCore::ApplyPropertyClip::createHandler):
        (WebCore::defaultInitialColor):
        (ApplyPropertyColor):
        (WebCore::ApplyPropertyColor::applyInheritValue):
        (WebCore::ApplyPropertyColor::applyInitialValue):
        (WebCore::ApplyPropertyColor::applyValue):
        (WebCore::ApplyPropertyColor::applyColorValue):
        (WebCore::ApplyPropertyColor::createHandler):
        (ApplyPropertyDirection):
        (WebCore::ApplyPropertyDirection::applyValue):
        (WebCore::ApplyPropertyDirection::createHandler):
        (ApplyPropertyLength):
        (WebCore::ApplyPropertyLength::setValue):
        (WebCore::ApplyPropertyLength::applyValue):
        (WebCore::ApplyPropertyLength::createHandler):
        (ApplyPropertyString):
        (WebCore::ApplyPropertyString::setValue):
        (WebCore::ApplyPropertyString::applyValue):
        (WebCore::ApplyPropertyString::createHandler):
        (ApplyPropertyBorderRadius):
        (WebCore::ApplyPropertyBorderRadius::setValue):
        (WebCore::ApplyPropertyBorderRadius::applyValue):
        (WebCore::ApplyPropertyBorderRadius::createHandler):
        (FillLayerAccessorTypes):
        (ApplyPropertyFillLayer):
        (WebCore::ApplyPropertyFillLayer::applyInheritValue):
        (WebCore::ApplyPropertyFillLayer::applyInitialValue):
        (WebCore::ApplyPropertyFillLayer::applyValue):
        (WebCore::ApplyPropertyFillLayer::createHandler):
        (ApplyPropertyComputeLength):
        (WebCore::ApplyPropertyComputeLength::setValue):
        (WebCore::ApplyPropertyComputeLength::applyValue):
        (WebCore::ApplyPropertyComputeLength::createHandler):
        (ApplyPropertyFont):
        (WebCore::ApplyPropertyFont::applyInheritValue):
        (WebCore::ApplyPropertyFont::applyInitialValue):
        (WebCore::ApplyPropertyFont::applyValue):
        (WebCore::ApplyPropertyFont::createHandler):
        (ApplyPropertyFontSize):
        (WebCore::ApplyPropertyFontSize::largerFontSize):
        (WebCore::ApplyPropertyFontSize::smallerFontSize):
        (WebCore::ApplyPropertyFontSize::applyInheritValue):
        (WebCore::ApplyPropertyFontSize::applyInitialValue):
        (WebCore::ApplyPropertyFontSize::applyValue):
        (WebCore::ApplyPropertyFontSize::createHandler):
        (ApplyPropertyFontWeight):
        (WebCore::ApplyPropertyFontWeight::applyValue):
        (WebCore::ApplyPropertyFontWeight::createHandler):
        (ApplyPropertyFontVariantLigatures):
        (WebCore::ApplyPropertyFontVariantLigatures::applyInheritValue):
        (WebCore::ApplyPropertyFontVariantLigatures::applyInitialValue):
        (WebCore::ApplyPropertyFontVariantLigatures::applyValue):
        (WebCore::ApplyPropertyFontVariantLigatures::createHandler):
        (ApplyPropertyBorderImage):
        (WebCore::ApplyPropertyBorderImage::applyValue):
        (WebCore::ApplyPropertyBorderImage::createHandler):
        (ApplyPropertyBorderImageModifier):
        (WebCore::ApplyPropertyBorderImageModifier::getValue):
        (WebCore::ApplyPropertyBorderImageModifier::setValue):
        (WebCore::ApplyPropertyBorderImageModifier::applyInheritValue):
        (WebCore::ApplyPropertyBorderImageModifier::applyInitialValue):
        (WebCore::ApplyPropertyBorderImageModifier::applyValue):
        (WebCore::ApplyPropertyBorderImageModifier::createHandler):
        (ApplyPropertyBorderImageSource):
        (WebCore::ApplyPropertyBorderImageSource::applyValue):
        (WebCore::ApplyPropertyBorderImageSource::createHandler):
        (ApplyPropertyCounter):
        (WebCore::ApplyPropertyCounter::emptyFunction):
        (WebCore::ApplyPropertyCounter::applyInheritValue):
        (WebCore::ApplyPropertyCounter::applyValue):
        (WebCore::ApplyPropertyCounter::createHandler):
        (ApplyPropertyCursor):
        (WebCore::ApplyPropertyCursor::applyInheritValue):
        (WebCore::ApplyPropertyCursor::applyInitialValue):
        (WebCore::ApplyPropertyCursor::applyValue):
        (WebCore::ApplyPropertyCursor::createHandler):
        (ApplyPropertyTextAlign):
        (WebCore::ApplyPropertyTextAlign::applyValue):
        (WebCore::ApplyPropertyTextAlign::createHandler):
        (ApplyPropertyTextDecoration):
        (WebCore::ApplyPropertyTextDecoration::applyValue):
        (WebCore::ApplyPropertyTextDecoration::createHandler):
        (ApplyPropertyUnicodeBidi):
        (WebCore::ApplyPropertyUnicodeBidi::applyValue):
        (WebCore::ApplyPropertyUnicodeBidi::createHandler):
        (ApplyPropertyLineHeight):
        (WebCore::ApplyPropertyLineHeight::applyValue):
        (WebCore::ApplyPropertyLineHeight::createHandler):
        (ApplyPropertyPageSize):
        (WebCore::ApplyPropertyPageSize::mmLength):
        (WebCore::ApplyPropertyPageSize::inchLength):
        (WebCore::ApplyPropertyPageSize::getPageSizeFromName):
        (WebCore::ApplyPropertyPageSize::applyInheritValue):
        (WebCore::ApplyPropertyPageSize::applyInitialValue):
        (WebCore::ApplyPropertyPageSize::applyValue):
        (WebCore::ApplyPropertyPageSize::createHandler):
        (ApplyPropertyTextEmphasisStyle):
        (WebCore::ApplyPropertyTextEmphasisStyle::applyInheritValue):
        (WebCore::ApplyPropertyTextEmphasisStyle::applyInitialValue):
        (WebCore::ApplyPropertyTextEmphasisStyle::applyValue):
        (WebCore::ApplyPropertyTextEmphasisStyle::createHandler):
        (ApplyPropertyAnimation):
        (WebCore::ApplyPropertyAnimation::setValue):
        (WebCore::ApplyPropertyAnimation::value):
        (WebCore::ApplyPropertyAnimation::test):
        (WebCore::ApplyPropertyAnimation::clear):
        (WebCore::ApplyPropertyAnimation::initial):
        (WebCore::ApplyPropertyAnimation::map):
        (WebCore::ApplyPropertyAnimation::accessAnimations):
        (WebCore::ApplyPropertyAnimation::animations):
        (WebCore::ApplyPropertyAnimation::applyInheritValue):
        (WebCore::ApplyPropertyAnimation::applyInitialValue):
        (WebCore::ApplyPropertyAnimation::applyValue):
        (WebCore::ApplyPropertyAnimation::createHandler):
        (ApplyPropertyOutlineStyle):
        (WebCore::ApplyPropertyOutlineStyle::applyInheritValue):
        (WebCore::ApplyPropertyOutlineStyle::applyInitialValue):
        (WebCore::ApplyPropertyOutlineStyle::applyValue):
        (WebCore::ApplyPropertyOutlineStyle::createHandler):
        (ApplyPropertyResize):
        (WebCore::ApplyPropertyResize::applyValue):
        (WebCore::ApplyPropertyResize::createHandler):
        (ApplyPropertyVerticalAlign):
        (WebCore::ApplyPropertyVerticalAlign::applyValue):
        (WebCore::ApplyPropertyVerticalAlign::createHandler):
        (ApplyPropertyAspectRatio):
        (WebCore::ApplyPropertyAspectRatio::applyInheritValue):
        (WebCore::ApplyPropertyAspectRatio::applyInitialValue):
        (WebCore::ApplyPropertyAspectRatio::applyValue):
        (WebCore::ApplyPropertyAspectRatio::createHandler):
        (ApplyPropertyZoom):
        (WebCore::ApplyPropertyZoom::resetEffectiveZoom):
        (WebCore::ApplyPropertyZoom::applyInheritValue):
        (WebCore::ApplyPropertyZoom::applyInitialValue):
        (WebCore::ApplyPropertyZoom::applyValue):
        (WebCore::ApplyPropertyZoom::createHandler):
        (ApplyPropertyDisplay):
        (WebCore::ApplyPropertyDisplay::isValidDisplayValue):
        (WebCore::ApplyPropertyDisplay::applyInheritValue):
        (WebCore::ApplyPropertyDisplay::applyInitialValue):
        (WebCore::ApplyPropertyDisplay::applyValue):
        (WebCore::ApplyPropertyDisplay::createHandler):
        (ApplyPropertyFlex):
        (WebCore::ApplyPropertyFlex::applyInheritValue):
        (WebCore::ApplyPropertyFlex::applyInitialValue):
        (WebCore::ApplyPropertyFlex::applyValue):
        (WebCore::ApplyPropertyFlex::createHandler):
        (WebCore::ApplyPropertyFlex::getFlexValue):
        (WebCore::StyleBuilder::sharedStyleBuilder):
        (WebCore::StyleBuilder::StyleBuilder):
        * css/StyleBuilder.h: Renamed from Source/WebCore/css/CSSStyleApplyProperty.h.
        (WebCore):
        (PropertyHandler):
        (WebCore::PropertyHandler::PropertyHandler):
        (WebCore::PropertyHandler::applyInheritValue):
        (WebCore::PropertyHandler::applyInitialValue):
        (WebCore::PropertyHandler::applyValue):
        (WebCore::PropertyHandler::isValid):
        (WebCore::PropertyHandler::inheritFunction):
        (WebCore::PropertyHandler::initialFunction):
        (WebCore::PropertyHandler::applyFunction):
        (StyleBuilder):
        (WebCore::StyleBuilder::propertyHandler):
        (WebCore::StyleBuilder::index):
        (WebCore::StyleBuilder::valid):
        (WebCore::StyleBuilder::setPropertyHandler):

2012-04-24  Florin Malita  <fmalita@chromium.org>

        WebCore::EventTarget::addEventListener crash
        https://bugs.webkit.org/show_bug.cgi?id=84171

        Reviewed by Nikolas Zimmermann.

        Test: svg/custom/use-tref-crash.svg

        Adding tref target event listeners while building the shadow tree is
        problematic, because SVGUseElement::buildShadowAndInstanceTree() only
        sets the element instance<->shadow element association at a later time.

        Fortunately, buildShadowAndInstanceTree() also propagates the event
        handlers (transferEventListenersToShadowTree) - so we can simply skip
        them in SVGTRefElement::buildPendingResource() for shadow elements.

        * svg/SVGTRefElement.cpp:
        (WebCore::SVGTRefElement::buildPendingResource):

2012-04-24  Kent Tamura  <tkent@chromium.org>

        Clickable area of a calendar picker indicator is too small.
        https://bugs.webkit.org/show_bug.cgi?id=84677

        Reviewed by Kentaro Hara.

        Test: fast/forms/date/date-appearance.html is affected.

        * css/html.css:
        (input::-webkit-calendar-picker-indicator):
        - Remove unnecessary disaplay:inline-block.
        - Add paddings instead of the margin.
        (input::-webkit-calendar-picker-indicator:hover):
        Add hover style.

2012-04-24  Alexis Menard  <alexis.menard@openbossa.org>

        Another unreviewed build fix for Mac.

        * css/CSSStyleSelector.h:
        (CSSStyleSelector):

2012-04-24  Alexis Menard  <alexis.menard@openbossa.org>

        Unreviewed build fix attempt for Mac.

        * rendering/style/RenderStyle.h:

2012-04-24  Alexis Menard  <alexis.menard@openbossa.org>

        Rename CSSStyleApplyProperty class to StyleBuilder.
        https://bugs.webkit.org/show_bug.cgi?id=84711

        Reviewed by Antti Koivisto.

        As per discussion on bug https://bugs.webkit.org/show_bug.cgi?id=42764
        the name is a bit confusing. This first patch rename the class and a
        following one will rename the files. We also drop the CSS prefix of the
        class to keep CSS prefixed classes for CSSOM types.

        No new tests : renaming, no behavior changes should appear.

        * css/CSSStyleApplyProperty.cpp:
        (WebCore::ApplyPropertyExpanding::applyInheritValue):
        (WebCore::ApplyPropertyExpanding::applyInitialValue):
        (WebCore::ApplyPropertyExpanding::applyValue):
        (WebCore::StyleBuilder::sharedStyleBuilder):
        (WebCore::StyleBuilder::StyleBuilder):
        * css/CSSStyleApplyProperty.h:
        (WebCore):
        (StyleBuilder):
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::CSSStyleSelector):
        (WebCore::CSSStyleSelector::collectMatchingRulesForList):
        * css/CSSStyleSelector.h:
        (CSSStyleSelector):

2012-04-24  Kent Tamura  <tkent@chromium.org>

        Merge LocalizedCalendar into LocalizedDate
        https://bugs.webkit.org/show_bug.cgi?id=84685

        Reviewed by Kentaro Hara.

        The functionality of LocalizedCalendar is very related to
        LocalizedDate. We should merge them.

        No new tests. Just refactoring.

        * WebCore.gypi: Remove LocalizedCalendar.h and LocalizedCalenderICU.cpp.
        * html/shadow/CalendarPickerElement.cpp:
        Include LocalizedDate.h instead of LocalizedCalendar.h.
        * platform/text/LocalizedCalendar.h:
        Removed. Merged into LocalizedDate.h.
        * platform/text/LocalizedCalendarICU.cpp:
        Removed. Merged into LocalizedDateICU.h.
        * platform/text/LocalizedDate.h:
        (WebCore): Move some functions from LocalizedCalendar.h.
        * platform/text/LocalizedDateICU.cpp:
        Move some functions from LocalizedCalendarICU.cpp.

2012-04-24  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: remove pure delegation code from DebuggerPresentationModel
        https://bugs.webkit.org/show_bug.cgi?id=84704

        Reviewed by Yury Semikhatsky.

        This change removes the code that delegates calls to breakpoint manager and exposes the breakpoint
        manager in debugger presentation model itself. It allows narrowing dpm dependencies.

        * inspector/front-end/BreakpointsSidebarPane.js:
        (WebInspector.JavaScriptBreakpointsSidebarPane):
        (WebInspector.JavaScriptBreakpointsSidebarPane.prototype._breakpointCheckboxClicked):
        (WebInspector.JavaScriptBreakpointsSidebarPane.prototype._breakpointContextMenu):
        (WebInspector.JavaScriptBreakpointsSidebarPane.prototype._contextMenu):
        * inspector/front-end/DebuggerModel.js:
        (WebInspector.DebuggerModel.prototype.debuggerPausedDetails):
        (WebInspector.DebuggerModel.prototype.createRawLocationByURL):
        (WebInspector.DebuggerModel.prototype.isPaused):
        * inspector/front-end/DebuggerPresentationModel.js:
        (WebInspector.DebuggerPresentationModel.prototype.get breakpointManager):
        (WebInspector.DebuggerPresentationModel.prototype._debuggerPaused):
        (WebInspector.DebuggerPresentationModelResourceBinding.prototype._setContentWithInitialContent):
        * inspector/front-end/JavaScriptSource.js:
        (WebInspector.JavaScriptSource):
        (WebInspector.JavaScriptSource.prototype.consoleMessagesCleared):
        (WebInspector.JavaScriptSource.prototype.findBreakpoint):
        (WebInspector.JavaScriptSource.prototype.setBreakpoint):
        (WebInspector.JavaScriptSource.prototype.setBreakpointEnabled):
        (WebInspector.JavaScriptSource.prototype.removeBreakpoint):
        (WebInspector.JavaScriptSource.prototype.updateBreakpoint):
        (WebInspector.JavaScriptSource.prototype.continueToLine):
        (WebInspector.JavaScriptSource.prototype.canSetContent):
        (WebInspector.JavaScriptSource.prototype.setContent):
        (WebInspector.JavaScriptSource.prototype.updateBreakpointsAfterLiveEdit):
        * inspector/front-end/JavaScriptSourceFrame.js:
        (WebInspector.JavaScriptSourceFrame.prototype.canEditSource):
        (WebInspector.JavaScriptSourceFrame.prototype.editContent):
        (WebInspector.JavaScriptSourceFrame.prototype._onContentChanged):
        (WebInspector.JavaScriptSourceFrame.prototype.populateLineGutterContextMenu.else.editBreakpointCondition.didEditBreakpointCondition):
        (WebInspector.JavaScriptSourceFrame.prototype.populateLineGutterContextMenu.else):
        (WebInspector.JavaScriptSourceFrame.prototype.populateLineGutterContextMenu):
        (WebInspector.JavaScriptSourceFrame.prototype.beforeTextChanged):
        (WebInspector.JavaScriptSourceFrame.prototype._getPopoverAnchor):
        (WebInspector.JavaScriptSourceFrame.prototype._resolveObjectForPopover.showObjectPopover):
        (WebInspector.JavaScriptSourceFrame.prototype._resolveObjectForPopover):
        (WebInspector.JavaScriptSourceFrame.prototype._setBreakpoint):
        (WebInspector.JavaScriptSourceFrame.prototype._onMouseDown):
        * inspector/front-end/ScopeChainSidebarPane.js:
        (WebInspector.ScopeChainSidebarPane.prototype.update):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype._debuggerPaused.else.didGetUILocation):
        (WebInspector.ScriptsPanel.prototype._debuggerPaused):

2012-04-24  Yury Semikhatsky  <yurys@chromium.org>

        Web Inspector: native nodes may have snapshot id less than base snapshot max JS object id
        https://bugs.webkit.org/show_bug.cgi?id=84681

        Make sure new nodes whose IDs less than base snapshot max JS object id will
        get into snapshot delta.

        Reviewed by Pavel Feldman.

        Test: inspector/profiler/heap-snapshot-comparison-dom-groups-change.html

        * inspector/front-end/HeapSnapshot.js:
        (WebInspector.HeapSnapshot.prototype._calculateDiffForClass):
        * inspector/front-end/HeapSnapshotDataGrids.js:
        (WebInspector.HeapSnapshotSortableDataGrid): Drive-by fix, made recursion counter
        a normal field on HeapSnapshotSortableDataGrid.
        (WebInspector.HeapSnapshotSortableDataGrid.prototype.recursiveSortingEnter):
        (WebInspector.HeapSnapshotSortableDataGrid.prototype.recursiveSortingLeave):

2012-04-24  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r115000.
        http://trac.webkit.org/changeset/115000
        https://bugs.webkit.org/show_bug.cgi?id=84703

        Breaks webkit_unit_tests on Mac in Chromium:
        http://build.chromium.org/p/chromium.webkit/builders/Webkit%20Mac10.6/builds/15157
        (Requested by mnaganov on #webkit).

        * platform/graphics/skia/OpaqueRegionSkia.cpp:
        (WebCore::paintIsOpaque):
        (WebCore::OpaqueRegionSkia::popCanvasLayer):
        (WebCore::OpaqueRegionSkia::didDraw):
        (WebCore::OpaqueRegionSkia::didDrawUnbounded):
        (WebCore::OpaqueRegionSkia::markRectAsOpaque):
        (WebCore::OpaqueRegionSkia::markRectAsNonOpaque):
        * platform/graphics/skia/OpaqueRegionSkia.h:
        (OpaqueRegionSkia):
        (WebCore::OpaqueRegionSkia::CanvasLayerState::CanvasLayerState):
        (CanvasLayerState):
        * platform/graphics/skia/PlatformContextSkia.cpp:
        (WebCore::PlatformContextSkia::restoreLayer):

2012-04-23  Antti Koivisto  <antti@apple.com>

        Consolidate external stylesheet quirks handling to StyleSheetInternal
        https://bugs.webkit.org/show_bug.cgi?id=84632

        Reviewed by Andreas Kling.

        Move the repeated code from StyleImportRule and HTMLLinkElement to StyleSheetInternal::parseUserStyleSheet.
        
        Remove a BUILDING_ON_LEOPARD-only quirk.

        * css/CSSImportRule.cpp:
        (WebCore::StyleRuleImport::setCSSStyleSheet):
        * css/CSSParser.cpp:
        (WebCore):
        (WebCore::CSSParserContext::CSSParserContext):
        
            Add new settings bits to the CSSParserContext. These are used for external stylesheet parsing quirks.

        * css/CSSParserMode.h:
        (CSSParserContext):
        * css/CSSStyleSheet.cpp:
        (WebCore::StyleSheetInternal::parseUserStyleSheet):
        (WebCore::StyleSheetInternal::parseString):
        (WebCore):
        (WebCore::StyleSheetInternal::parseStringAtLine):
        * css/CSSStyleSheet.h:
        (WebCore):
        (StyleSheetInternal):
        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::setCSSStyleSheet):

2012-04-24  Yael Aharon  <yael.aharon@nokia.com>

        [Qt] Move notification icon download out of WebCore
        https://bugs.webkit.org/show_bug.cgi?id=80700

        Reviewed by Simon Hausmann.

        Remove the code that downloads the notification's icon out of WebCore.
        Other ports let the client decide if to download the icon or not.
        No new tests. This patch is only removing code.

        * notifications/Notification.cpp:
        (WebCore::Notification::~Notification):
        (WebCore::Notification::show):
        (WebCore::Notification::close):
        (WebCore::Notification::contextDestroyed):
        * notifications/Notification.h:
        (Notification):

2012-04-24  Rakesh KN  <rakesh.kn@motorola.com>

        RadioNodeList support in HTMLFormElement::elements
        https://bugs.webkit.org/show_bug.cgi?id=81854

        Implement RadioNodeList support spec'ed at
        http://www.whatwg.org/specs/web-apps/current-work/multipage/common-dom-interfaces.html#radionodelist

        Reviewed by Ryosuke Niwa.

        Test: fast/forms/form-collection-radio-node-list.html

        * CMakeLists.txt:
        Added entries for new files.
        * DerivedSources.cpp: Ditto.
        * DerivedSources.make: Ditto.
        * DerivedSources.pri: Ditto.
        * GNUmakefile.list.am: Ditto.
        * Target.pri: Ditto.
        * WebCore.gypi: Ditto.
        * WebCore.vcproj/WebCore.vcproj: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Ditto.
        * bindings/js/JSHTMLCollectionCustom.cpp:
        (WebCore::getNamedItems):
        Modified to create RadioNodeList object when FormControlCollection has more than
        one element of same name/id.
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateImplementation):
        Added code to include Node.h and JSNode.h in JSRadioNodeElement.cpp.
        * bindings/v8/custom/V8HTMLCollectionCustom.cpp:
        (WebCore::getNamedItems):
        Modified to create RadioNodeList object when FormControlCollection has more than
        one element of same name/id.
        * html/CollectionType.h:
        Added new FormControls type.
        * html/HTMLCollection.cpp:
        (WebCore::HTMLCollection::shouldIncludeChildren):
        (WebCore::HTMLCollection::isAcceptableElement):
        Handle FormControls collection type.
        * html/HTMLFormCollection.cpp:
        (WebCore::HTMLFormCollection::HTMLFormCollection):
        Contruct collection of FormControls type.
        * html/RadioNodeList.cpp: Added.
        (WebCore):
        (WebCore::RadioNodeList::RadioNodeList):
        (WebCore::RadioNodeList::~RadioNodeList):
        (WebCore::toRadioButtonInputElement):
        (WebCore::RadioNodeList::value):
        (WebCore::RadioNodeList::setValue):
        (WebCore::RadioNodeList::nodeMatches):
        * html/RadioNodeList.h: Added.
        (WebCore):
        (RadioNodeList):
        (WebCore::RadioNodeList::create):
        RadioNodeList implementation.
        * html/RadioNodeList.idl: Added.
        Idl for generating RadioNodeList JS/V8 bindings.

2012-04-24  Benjamin Poulain  <bpoulain@apple.com>

        Implement the field cache of ObjcClass in WebKit types
        https://bugs.webkit.org/show_bug.cgi?id=84667

        Reviewed by Geoffrey Garen.

        Every time we get a field through the Objective-C bridge, we waste some time converting
        the incoming string to an CFString.

        This patch implement the field cache based on WTF types so that we can return directly
        in case of a positive match.

        When we do not have a match on the Identifier, we allocate the memory and find the valid field
        as before.

        * bridge/objc/objc_class.h:
        (ObjcClass):
        * bridge/objc/objc_class.mm:
        (JSC::Bindings::deleteMethod):
        (Bindings):
        (JSC::Bindings::ObjcClass::ObjcClass):
        (JSC::Bindings::ObjcClass::fieldNamed):

2012-04-23  Andy Estes  <aestes@apple.com>

        Incremental rendering should be unsuppressed after the load event or a configurable timeout, whichever occurs first.
        https://bugs.webkit.org/show_bug.cgi?id=84583

        Reviewed by Anders Carlsson.

        In high-latency situations, having incremental rendering suppression
        enabled makes for a worse experience due to the excessively long time
        it takes for the load event to fire. So that clients that opt in to
        incremental rendering suppression can mitigate this, add a configurable
        timeout in which rendering is re-enabled if the load event has yet to
        fire.

        * dom/Document.cpp:
        (WebCore::Document::Document):
        (WebCore::Document::setReadyState): When the document transitions to
        the loading state, start a timer; when it transitions to the completed
        state, allow visual updates.
        (WebCore::Document::setVisualUpdatesAllowed): If visual updates are
        allowed, force a repaint. Otherwise, set a flag that suppresses
        rendering.
        (WebCore::Document::visualUpdatesSuppressionTimerFired): When the timer
        fires, allow visual updates.
        (WebCore::Document::implicitClose): Remove code that is now called in
        setVisualUpdatesAllowed().
        * dom/Document.h:
        (WebCore::Document::visualUpdatesAllowed):
        * page/Settings.cpp:
        (WebCore::Settings::Settings):
        * page/Settings.h:
        (WebCore::Settings::setIncrementalRenderingSuppressionTimeoutInSeconds):
        (WebCore::Settings::incrementalRenderingSuppressionTimeoutInSeconds):

2012-04-23  Dana Jansens  <danakj@chromium.org>

        [chromium] Image masks are considered opaque incorrectly
        https://bugs.webkit.org/show_bug.cgi?id=84275

        Reviewed by Adrienne Walker.

        Match the behaviour of SkCanvas layers more closely while tracking
        opaque paints. SkCanvas layers actually act as a separate device
        (ie. pixels) and when the layer is popped off, the pixels are copied
        down to the layer below.

        While we can use the total clip to decide what pixels the the
        drawing operation will affect in the final device, the blending
        down through layers needs to consider each layer carefully.

        In this case the image mask is drawn into a layer which is copied
        down using the DestinationIn operation. Since the layer contains
        non-opaque pixels, the DestinationIn copy can destroy opaque
        areas in the next layer. We add OpaqueRegionSkia::FillByCopy to
        distinguish the case where we are copying a block of pixels, and the
        alpha values are essentially unknown.

        Unit test: PlatformContextSkiaTest.trackImageMask
                   PlatformContextSkiaTest.trackImageMaskWithOpaqueRect

        * platform/graphics/skia/OpaqueRegionSkia.cpp:
        (WebCore::paintIsOpaque):
        (WebCore::OpaqueRegionSkia::applyOpaqueRegionFromLayer):
        (WebCore::OpaqueRegionSkia::pushCanvasLayer):
        (WebCore::OpaqueRegionSkia::popCanvasLayer):
        (WebCore::OpaqueRegionSkia::didDrawRect):
        (WebCore::OpaqueRegionSkia::didDrawPath):
        (WebCore::OpaqueRegionSkia::didDrawPoints):
        (WebCore::OpaqueRegionSkia::didDrawBounded):
        (WebCore::OpaqueRegionSkia::didDraw):
        (WebCore::OpaqueRegionSkia::didDrawUnbounded):
        (WebCore::OpaqueRegionSkia::markRectAsOpaque):
        (WebCore::OpaqueRegionSkia::markRectAsNonOpaque):
        (WebCore::OpaqueRegionSkia::markAllAsNonOpaque):
        * platform/graphics/skia/OpaqueRegionSkia.h:
        (OpaqueRegionSkia):
        (CanvasLayerState):
        * platform/graphics/skia/PlatformContextSkia.cpp:
        (WebCore::PlatformContextSkia::restoreLayer):

2012-04-23  Kent Tamura  <tkent@chromium.org>

        Show the format indicator in a date field
        https://bugs.webkit.org/show_bug.cgi?id=83872

        Reviewed by Hajime Morita.

        Enable the fixed placeholder feature for the date type, and show
        the editable date format as the fixed placeholder.
        The format string is created by the following steps.
        1. Obtain a pattern string from ICU
          http://icu-project.org/apiref/icu4c/classSimpleDateFormat.html#details
        2. Replace a sequence of 'y', 'Y', 'M', or 'd' in the pattern with
          a natural language string such as "year", "month", or "day".

        Test: fast/forms/date/date-fixed-placeholder.html

        * html/DateInputType.cpp:
        (WebCore::DateInputType::supportsPlaceholder): Added. Returns true.
        (WebCore::DateInputType::usesFixedPlaceholder): Added. Returns true.
        (WebCore::DateInputType::fixedPlaceholder):
        Added. Calls localizedDateFormatText() provided by LocalizedDate.h.
        * html/DateInputType.h:
        (DateInputType): Add declarations of new override functions.
        * platform/LocalizedStrings.h:
        (WebCore): Add dateFormat{Year,Month,DayInMonth}Text()
        * platform/text/ICULocale.cpp:
        (WebCore::isICUYearSymbol): A function to improve redability.
        (WebCore::isICUMonthSymbol): ditto.
        (WebCore::isICUDayInMonthSymbol): ditto.
        (WebCore::localizeFormat): Step 2 of the above description.
        (WebCore::ICULocale::initializeLocalizedDateFormatText):
        Step 1 of the above description.
        (WebCore::ICULocale::localizedDateFormatText):
        * platform/text/ICULocale.h:
        (ICULocale): Add new functions and a data member.
        * platform/text/LocalizedDate.h:
        (WebCore): Add localizedDateFormatText().
        * platform/text/LocalizedDateICU.cpp:
        (WebCore::localizedDateFormatText):
        Just call ICULocale::localizedDateFormatText().

2012-04-23  Kentaro Hara  <haraken@chromium.org>

        [V8] Pass Isolate to v8Array()
        https://bugs.webkit.org/show_bug.cgi?id=84295

        Reviewed by Nate Chapin.

        The final objective is to pass Isolate around in V8 bindings.
        This patch passes the Isolate to v8Array().

        (GenerateNormalAttrGetter):
        (NativeToJSValue):
        * bindings/scripts/test/V8/V8TestObj.cpp:
        (WebCore::TestObjV8Internal::sequenceAttrAttrGetter):
        (WebCore::TestObjV8Internal::methodReturningSequenceCallback):
        * bindings/v8/V8Binding.h:
        (WebCore::v8Array):

2012-04-23  Kentaro Hara  <haraken@chromium.org>

        [V8] Pass Isolate to GetNamedProperty()
        https://bugs.webkit.org/show_bug.cgi?id=84277

        Reviewed by Nate Chapin.

        The objective is to pass Isolate around in V8 bindings.
        This patch passes Isolate to GetNamedProperty().

        (GenerateHeader):
        * bindings/v8/V8DOMWindowShell.cpp:
        (WebCore::getter):
        * bindings/v8/custom/V8HTMLDocumentCustom.cpp:
        (WebCore::V8HTMLDocument::GetNamedProperty):
        (WebCore::V8HTMLDocument::allAccessorGetter):

2012-04-23  Michael Nordman  <michaeln@google.com>

        [chromium] DomStorage event handling mods.
        https://bugs.webkit.org/show_bug.cgi?id=84387

        Add a few simple inline getters to allow the source Document of a storage
        event to be identified given a pointer to the source StorageArea so those
        Documents can be excluded by the event dispatching logic.

        Reviewed by Dimitri Glazkov.

        No new tests. No new functionality or change in behavior.

        * page/DOMWindow.h:
        (WebCore::DOMWindow::optionalSessionStorage): simple inline getter to avoid construction where possible
        (WebCore::DOMWindow::optionalLocalStorage): ditto
        * storage/Storage.h:
        (WebCore::Storage::area): simple inline getter

2012-04-23  Kenneth Russell  <kbr@google.com>

        Change ImageData to reference Uint8ClampedArray rather than CanvasPixelArray
        https://bugs.webkit.org/show_bug.cgi?id=73011

        Reviewed by Oliver Hunt.

        Changed ImageData to contain Uint8ClampedArray instead of ByteArray
        per current HTML5 spec.

        In order to avoid introducing large data copies, it was necessary to
        switch a few other places in WebKit to use Uint8ClampedArray at the
        same time, most notably the FilterEffect implementation, portions of
        ImageBuffer, and a couple of places in the image encoders.

        Note that the change in method name from "get" to "item" occurred
        because JSC's autogenerated indexed getters reference a method
        called "item". If desired, a convenience method could be
        introduced to avoid the renamings in the FilterEffect classes.

        With these changes, ByteArray and some custom code in JavaScriptCore
        actually become unreferenced, and can be deleted. This deletion will
        be done separately in Bug 83655, to keep the size of this patch
        manageable.

        Test: fast/canvas/imagedata-contains-uint8clampedarray.html

        * bindings/js/JSImageDataCustom.cpp:
        (WebCore::toJS):
        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::CloneSerializer::dumpIfTerminal):
        (WebCore::CloneDeserializer::readTerminal):
        * bindings/v8/SerializedScriptValue.cpp:
        * bindings/v8/custom/V8ImageDataCustom.cpp:
        (WebCore::toV8):
        * bridge/qt/qt_pixmapruntime.cpp:
        (JSC::Bindings::QtPixmapToImageDataMethod::invoke):
        * html/ImageData.cpp:
        (WebCore::ImageData::create):
        (WebCore::ImageData::ImageData):
        * html/ImageData.h:
        (ImageData):
        (WebCore::ImageData::data):
        * html/ImageData.idl:
        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::createEmptyImageData):
        (WebCore::CanvasRenderingContext2D::getImageData):
        (WebCore::CanvasRenderingContext2D::putImageData):
        * platform/graphics/GraphicsContext3D.cpp:
        (WebCore::GraphicsContext3D::extractImageData):
        * platform/graphics/ImageBuffer.cpp:
        (WebCore::ImageBuffer::genericConvertToLuminanceMask):
        * platform/graphics/ImageBuffer.h:
        * platform/graphics/ShadowBlur.cpp:
        (WebCore::ShadowBlur::blurShadowBuffer):
        * platform/graphics/cairo/ImageBufferCairo.cpp:
        (WebCore::getImageData):
        (WebCore::ImageBuffer::getUnmultipliedImageData):
        (WebCore::ImageBuffer::getPremultipliedImageData):
        (WebCore::ImageBuffer::putByteArray):
        * platform/graphics/cg/ImageBufferCG.cpp:
        (WebCore::ImageBuffer::getUnmultipliedImageData):
        (WebCore::ImageBuffer::getPremultipliedImageData):
        (WebCore::ImageBuffer::putByteArray):
        (WebCore::ImageBuffer::toDataURL):
        (WebCore::ImageDataToDataURL):
        * platform/graphics/cg/ImageBufferDataCG.cpp:
        (WebCore::ImageBufferData::getData):
        (WebCore::ImageBufferData::putData):
        * platform/graphics/cg/ImageBufferDataCG.h:
        (ImageBufferData):
        * platform/graphics/filters/FEBlend.cpp:
        (WebCore::FEBlend::platformApplySoftware):
        * platform/graphics/filters/FEColorMatrix.cpp:
        (WebCore::effectType):
        (WebCore::FEColorMatrix::platformApplySoftware):
        * platform/graphics/filters/FEComponentTransfer.cpp:
        (WebCore::FEComponentTransfer::platformApplySoftware):
        * platform/graphics/filters/FEComposite.cpp:
        (WebCore::FEComposite::platformArithmeticSoftware):
        (WebCore::FEComposite::platformApplySoftware):
        * platform/graphics/filters/FEComposite.h:
        * platform/graphics/filters/FEConvolveMatrix.cpp:
        (WebCore::setDestinationPixels):
        (WebCore::FEConvolveMatrix::fastSetInteriorPixels):
        (WebCore::FEConvolveMatrix::fastSetOuterPixels):
        (WebCore::FEConvolveMatrix::platformApplySoftware):
        * platform/graphics/filters/FEConvolveMatrix.h:
        (PaintingData):
        * platform/graphics/filters/FECustomFilter.cpp:
        (WebCore::FECustomFilter::platformApplySoftware):
        (WebCore::FECustomFilter::bindProgramAndBuffers):
        * platform/graphics/filters/FECustomFilter.h:
        (JSC):
        (FECustomFilter):
        * platform/graphics/filters/FEDisplacementMap.cpp:
        (WebCore::FEDisplacementMap::platformApplySoftware):
        * platform/graphics/filters/FEDropShadow.cpp:
        (WebCore::FEDropShadow::platformApplySoftware):
        * platform/graphics/filters/FEGaussianBlur.cpp:
        (WebCore::boxBlur):
        (WebCore::FEGaussianBlur::platformApplyGeneric):
        (WebCore::FEGaussianBlur::platformApply):
        (WebCore::FEGaussianBlur::platformApplySoftware):
        * platform/graphics/filters/FEGaussianBlur.h:
        (PlatformApplyParameters):
        (FEGaussianBlur):
        * platform/graphics/filters/FELighting.cpp:
        (WebCore::FELighting::LightingData::topLeft):
        (WebCore::FELighting::LightingData::topRow):
        (WebCore::FELighting::LightingData::topRight):
        (WebCore::FELighting::LightingData::leftColumn):
        (WebCore::FELighting::LightingData::interior):
        (WebCore::FELighting::LightingData::rightColumn):
        (WebCore::FELighting::LightingData::bottomLeft):
        (WebCore::FELighting::LightingData::bottomRow):
        (WebCore::FELighting::LightingData::bottomRight):
        (WebCore::FELighting::inlineSetPixel):
        (WebCore::FELighting::drawLighting):
        (WebCore::FELighting::platformApplySoftware):
        * platform/graphics/filters/FELighting.h:
        (LightingData):
        (FELighting):
        * platform/graphics/filters/FEMorphology.cpp:
        (WebCore::FEMorphology::platformApplyGeneric):
        (WebCore::FEMorphology::platformApplySoftware):
        * platform/graphics/filters/FEMorphology.h:
        (PaintingData):
        * platform/graphics/filters/FETurbulence.cpp:
        (WebCore::FETurbulence::fillRegion):
        (WebCore::FETurbulence::platformApplySoftware):
        * platform/graphics/filters/FETurbulence.h:
        (FillRegionParameters):
        (FETurbulence):
        * platform/graphics/filters/FilterEffect.cpp:
        (WebCore::FilterEffect::forceValidPreMultipliedPixels):
        (WebCore::FilterEffect::asUnmultipliedImage):
        (WebCore::FilterEffect::asPremultipliedImage):
        (WebCore::FilterEffect::copyImageBytes):
        (WebCore::FilterEffect::copyUnmultipliedImage):
        (WebCore::FilterEffect::copyPremultipliedImage):
        (WebCore::FilterEffect::createUnmultipliedImageResult):
        (WebCore::FilterEffect::createPremultipliedImageResult):
        * platform/graphics/filters/FilterEffect.h:
        (FilterEffect):
        * platform/graphics/filters/arm/FEGaussianBlurNEON.h:
        (WebCore::FEGaussianBlur::platformApplyNeon):
        * platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:
        (WebCore::GraphicsContext3D::paintRenderingResultsToImageData):
        * platform/graphics/qt/ImageBufferQt.cpp:
        (WebCore::getImageData):
        (WebCore::ImageBuffer::getUnmultipliedImageData):
        (WebCore::ImageBuffer::getPremultipliedImageData):
        (WebCore::ImageBuffer::putByteArray):
        * platform/graphics/skia/ImageBufferSkia.cpp:
        (WebCore::getImageData):
        (WebCore::ImageBuffer::getUnmultipliedImageData):
        (WebCore::ImageBuffer::getPremultipliedImageData):
        (WebCore::ImageBuffer::putByteArray):
        * platform/graphics/texmap/TextureMapperGL.cpp:
        * platform/graphics/wince/ImageBufferWinCE.cpp:
        (WebCore::getImageData):
        (WebCore::ImageBuffer::getUnmultipliedImageData):
        (WebCore::ImageBuffer::getPremultipliedImageData):
        (WebCore::ImageBuffer::putByteArray):
        * platform/graphics/wx/ImageBufferWx.cpp:
        (WebCore::ImageBuffer::getUnmultipliedImageData):
        (WebCore::ImageBuffer::getPremultipliedImageData):
        (WebCore::ImageBuffer::putByteArray):
        * platform/image-encoders/skia/JPEGImageEncoder.cpp:
        (WebCore::JPEGImageEncoder::encode):
        * platform/image-encoders/skia/PNGImageEncoder.cpp:
        (WebCore::PNGImageEncoder::encode):
        * platform/image-encoders/skia/WEBPImageEncoder.cpp:
        (WebCore::WEBPImageEncoder::encode):

2012-04-23  Ryan Sleevi  <rsleevi@chromium.org>

        [chromium] Remove deleted files from WebCore.gypi and fix typo
        https://bugs.webkit.org/show_bug.cgi?id=84651

        Reviewed by Ryosuke Niwa.

        No new tests. No behavior change.

        * WebCore.gypi:
        Remove references to PlatformMouseEventQt.cpp and WheelEventQt.cpp. Add a missing comma.

2012-04-23  Erik Arvidsson  <arv@chromium.org>

        [V8] Fix issue with trying to access a constructor in a frame that has been removed
        https://bugs.webkit.org/show_bug.cgi?id=84640

        Reviewed by Kentaro Hara.

        This regressed in r113250. Now we do what we did before and return undefined if the frame
        does not have a context.

        Test: fast/dom/constructor-in-removed-frame.html

        * bindings/v8/V8DOMWrapper.cpp:
        (WebCore::V8DOMWrapper::constructorForType):

2012-04-23  Chris Rogers  <crogers@google.com>

        Oscillator::setWaveTable() should not reset oscillator phase
        https://bugs.webkit.org/show_bug.cgi?id=84647
        
        Reviewed by Kenneth Russell.

        * Modules/webaudio/Oscillator.cpp:
        (WebCore::Oscillator::setWaveTable):

2012-04-23  Kentaro Hara  <haraken@chromium.org>

        [V8][Refactoring] Remove V8Proxy::throwSyntaxError()
        https://bugs.webkit.org/show_bug.cgi?id=84627

        Reviewed by Nate Chapin.

        This patch removes V8Proxy::throwSyntaxError()
        since it is no longer used.

        No tests. No change in behavior.

        * bindings/v8/V8Proxy.cpp:
        * bindings/v8/V8Proxy.h:
        (V8Proxy):

2012-04-18  James Robinson  <jamesr@chromium.org>

        [chromium] Use TextureLayerChromium for WebGL content instead of a dedicated layer type
        https://bugs.webkit.org/show_bug.cgi?id=84311

        Reviewed by Adrienne Walker.

        WebGL content's interface with the compositor can be expressed in terms of two basic operations:
        1.) Do some stuff
        2.) Provide a texture ID for the compositor to use

        This implements (1) in DrawingBufferChromium and uses the already-existing TextureLayerChromium to handle (2).
        This cuts down the compositor interface significantly and allows for more code reuse in exchange for more code
        in TextureLayerChromium to handle the features WebGL needs.

        * WebCore.gypi:
        * platform/graphics/chromium/DrawingBufferChromium.cpp:
        (WebCore::DrawingBuffer::~DrawingBuffer):
        (DrawingBufferPrivate):
        (WebCore::DrawingBufferPrivate::DrawingBufferPrivate):
        (WebCore::DrawingBufferPrivate::~DrawingBufferPrivate):
        (WebCore::DrawingBufferPrivate::layer):
        (WebCore):
        (WebCore::DrawingBuffer::platformLayer):
        * platform/graphics/chromium/LayerRendererChromium.cpp:
        * platform/graphics/chromium/TextureLayerChromium.h:
        (TextureLayerChromiumClient):
        (WebCore::TextureLayerChromiumClient::~TextureLayerChromiumClient):
        (WebCore):
        (TextureLayerChromium):
        (WebCore::TextureLayerChromium::clearClient):
        * platform/graphics/chromium/WebGLLayerChromium.cpp: Removed.
        * platform/graphics/chromium/WebGLLayerChromium.h: Removed.
        * platform/graphics/gpu/DrawingBuffer.h:
        (WebCore):
        (WebCore::DrawingBuffer::graphicsContext3D):
        (DrawingBuffer):

2012-04-23  Alec Flett  <alecflett@chromium.org>

        IndexedDB: remove IDB(Index|ObjectStore)BackendImpl::get/getKey for IDBKey
        https://bugs.webkit.org/show_bug.cgi?id=84285

        Reviewed by Dimitri Glazkov.

        No new tests required, this code is no longer called.

        This is old code supporting IDBKey-based lookup, supplanted by
        IDBKeyRange. Now that chromium IPC/proxy code has landed,
        these functions can be removed.

        * Modules/indexeddb/IDBIndexBackendInterface.h:
        (IDBIndexBackendInterface):
        * Modules/indexeddb/IDBObjectStoreBackendInterface.h:
        (IDBObjectStoreBackendInterface):

2012-04-22  Martin Robinson  <mrobinson@igalia.com>

        REGRESSION(113604): [Soup] Some pages that use synchronous XMLHttpRequests freeze the browser
        https://bugs.webkit.org/show_bug.cgi?id=84560

        Reviewed by Xan Lopez.

        When kicking off a synchronous XMLHttpRequest, add one to the connection
        limit. This ensures that when a page starts a synchronous request, while
        already at the connection limit the request will not deadlock.

        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::WebCoreSynchronousLoader::WebCoreSynchronousLoader): Accept a new SoupSession
        argument so that we can get the correct SoupSession for the networking context. Bump
        the connection limit.
        (WebCore::WebCoreSynchronousLoader::~WebCoreSynchronousLoader): Decrement the connection limit.
        (WebCore::WebCoreSynchronousLoader::adjustMaxConnections): Added this helper.
        (WebCoreSynchronousLoader): Added a new SoupSession member.
        (WebCore::sessionFromContext): Added this helper.
        (WebCore::ResourceHandleInternal::soupSession): Use the new sessionFromContext helper.
        (WebCore::ResourceHandle::loadResourceSynchronously): Pass the SoupSession from the NetworkingContext
        to the synchronous loader.

2012-04-23  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r114965.
        http://trac.webkit.org/changeset/114965
        https://bugs.webkit.org/show_bug.cgi?id=84665

        Four new resource load delegate test failures (Requested by
        jernoble on #webkit).

        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::didFinishLoading):
        (WebCore::SubresourceLoader::didFail):
        (WebCore::SubresourceLoader::willCancel):
        (WebCore::SubresourceLoader::releaseResources):

2012-04-23  Beth Dakin  <bdakin@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=84649
        RenderMathMLOperator currently ignores font families, fails 
        to use Stix

        Reviewed by Dan Bernstein.

        This patch makes RenderMathMLOperator honor the font-family 
        list. This means that by default, Stix glyphs will now be 
        used for operators just like for other MathML content. 
        Unfortunately, just doing that resulted in a bug because of 
        the fragile hardcoded glyph sizes. The Stix vertical bar 
        glyph is much smaller than the code assumed any glyphs would 
        be. That code should be re-written, but in the meantime, I 
        put a fix in place to try to make it work for small glyphs.

        These new functions should be used instead of accessing
        gGlyphHeight or gGlyphLineHeight directly. If the glyph is
        smaller than the expected hardcoded value, then the actual
        glyph height is used, and a new line height based on the
        glyph height is used.
        (WebCore::RenderMathMLOperator::glyphHeightForCharacter):
        (WebCore::RenderMathMLOperator::lineHeightForCharacter):

        Use the style's FontDescription to honor the font family
        list and the style's FontSelector to honor @font-face.
        Also use glyphHeightForCharacter() instead of gGlyphHeight. 
        And now that createGlyph() takes a lineHeight, use 
        lineHeightForCharacter() to determine the right value. 
        (WebCore::RenderMathMLOperator::updateFromElement):

        size was an ambiguous variable name, so I renamed it to the 
        more accurate maxHeightForRenderer. This function also now
        takes a lineHeight instead of using gGlyphLineHeight. And
        again, use the style's FontDescription and FontSelector.
        (WebCore::RenderMathMLOperator::createStackableStyle):

        Re-name size to maxHeightForRenderer, and take lineHeight as 
        a parameter.
        (WebCore::RenderMathMLOperator::createGlyph):
        * rendering/mathml/RenderMathMLOperator.h:
        (RenderMathMLOperator):

2012-04-23  Eriq Augustine  <eaugusti@chromium.org>

        Return value from executed script in Chromium.
        https://bugs.webkit.org/show_bug.cgi?id=79851

        Reviewed by Adam Barth.

        Providing a varaiant of evaluateScriptInIsolatedWorld that
        returns the value of the evaluated script.

        Test: platform/chromium/http/tests/misc/execute-and-return-value.html

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

2012-04-23  Kent Tamura  <tkent@chromium.org>

        RenderDetailsMarker should draw the triangle inside the content box
        https://bugs.webkit.org/show_bug.cgi?id=84557

        Reviewed by Hajime Morita.

        RenderDetailsMarker didn't support cases in which a marker has
        borders and/or padings, or non-square size.

        Test: fast/html/details-marker-style.html

        * rendering/RenderDetailsMarker.cpp:
        (WebCore::RenderDetailsMarker::getPath):
        Scale by contentWidth() and contentHeight().
        (WebCore::RenderDetailsMarker::paint):
        Move the trianle origin by the ammount of left/top borders and paddings.

2012-04-23  Kentaro Hara  <haraken@chromium.org>

        [V8] Pass Isolate to toV8() (Part6)
        https://bugs.webkit.org/show_bug.cgi?id=84273

        Reviewed by Nate Chapin.

        The objective is to pass Isolate to all toV8()s.
        Since there are a lot of toV8()s, I'll make the change
        step by step. This patch passes Isolate to toV8() in
        several custom bindings.

        No tests. No change in behavior.

        * bindings/v8/custom/V8HTMLAllCollectionCustom.cpp:
        (WebCore::getNamedItems):
        (WebCore::getItem):
        (WebCore::V8HTMLAllCollection::namedPropertyGetter):
        (WebCore::V8HTMLAllCollection::itemCallback):
        (WebCore::V8HTMLAllCollection::namedItemCallback):
        (WebCore::V8HTMLAllCollection::callAsFunctionCallback):
        * bindings/v8/custom/V8HTMLCollectionCustom.cpp:
        (WebCore::getNamedItems):
        (WebCore::V8HTMLCollection::namedPropertyGetter):
        (WebCore::V8HTMLCollection::namedItemCallback):
        (WebCore::toV8):
        * bindings/v8/custom/V8SVGPathSegCustom.cpp:
        (WebCore::toV8):
        * bindings/v8/custom/V8StyleSheetCustom.cpp:
        (WebCore::toV8):
        * bindings/v8/custom/V8StyleSheetListCustom.cpp:
        (WebCore::V8StyleSheetList::namedPropertyGetter):
        * bindings/v8/custom/V8TrackEventCustom.cpp:
        (WebCore::V8TrackEvent::trackAccessorGetter):
        * bindings/v8/custom/V8WebGLRenderingContextCustom.cpp:
        (WebCore::toV8Object):
        (WebCore::getObjectParameter):
        (WebCore::V8WebGLRenderingContext::getAttachedShadersCallback):
        (WebCore::V8WebGLRenderingContext::getExtensionCallback):
        (WebCore::V8WebGLRenderingContext::getFramebufferAttachmentParameterCallback):
        (WebCore::V8WebGLRenderingContext::getParameterCallback):
        (WebCore::V8WebGLRenderingContext::getProgramParameterCallback):
        (WebCore::V8WebGLRenderingContext::getShaderParameterCallback):
        (WebCore::V8WebGLRenderingContext::getUniformCallback):
        * bindings/v8/custom/V8XMLHttpRequestCustom.cpp:
        (WebCore::V8XMLHttpRequest::responseAccessorGetter):
        * bindings/v8/custom/V8XSLTProcessorCustom.cpp:
        (WebCore::V8XSLTProcessor::transformToFragmentCallback):
        (WebCore::V8XSLTProcessor::transformToDocumentCallback):

2012-04-23  Kent Tamura  <tkent@chromium.org>

        Move the content of LocalizedCalendarICU.cpp and LocalizedDateICU.cpp to ICULocale.cpp.
        https://bugs.webkit.org/show_bug.cgi?id=84568

        Reviewed by Hajime Morita.

        Move it to ICULocal.cpp because we want to share UDateFormat
        object in LocalizedDate functions and LocalizedCalendar functions,
        and it becomes easier to cache the UDateFormat object, and making
        unit tests for these functions easier.

        No new tests because of no bahevior changes.

        * platform/text/ICULocale.cpp:
        (WebCore::ICULocale::ICULocale): Initialize new members.
        (WebCore::ICULocale::~ICULocale): Delete m_shortDateFormat.
        (WebCore::ICULocale::initializeShortDateFormat):
        Moved from creteShortDateFormatter of LocalizedDateICU.cpp.
        (WebCore::ICULocale::parseLocalizedDate):
        Moved from LocalizedDate.cpp, use m_shortDateFormat.
        (WebCore::ICULocale::formatLocalizedDate): ditto.
        (WebCore::ICULocale::createLabelVector):
        Moved from LocalizedCalendarICU.cpp, use m_shortDateFormat.
        (WebCore::createFallbackMonthLabels): Moved from LocalizedCalendarICU.cpp.
        (WebCore::createFallbackWeekDayShortLabels): ditto.
        (WebCore::ICULocale::initializeCalendar):
        lazy initialization of m_monthLabels, m_weekDayShortLabels, and m_firstDayOfWeek.
        (WebCore::ICULocale::monthLabels):
        (WebCore::ICULocale::weekDayShortLabels):
        (WebCore::ICULocale::firstDayOfWeek):
        * platform/text/ICULocale.h:
        (ICULocale): Add declarations.
        * platform/text/LocalizedCalendarICU.cpp:
        (WebCore::monthLabels): Use ICULocale::currentLocale().
        (WebCore::weekDayShortLabels): ditto.
        (WebCore::firstDayOfWeek): ditto.
        * platform/text/LocalizedDateICU.cpp:
        (WebCore::parseLocalizedDate): ditto.
        (WebCore::formatLocalizedDate): ditto.

2012-04-23  Raymond Toy  <rtoy@google.com>

        Move AudioDestinationChromium FIFO class to its own class.
        https://bugs.webkit.org/show_bug.cgi?id=84058

        Reviewed by Chris Rogers.

        Current tests cover the changes.

        * WebCore.gypi: Update with new files.
        * platform/audio/AudioPullFIFO.cpp: Copied from Source/WebKit/chromium/src/AudioDestinationChromium.cpp.
        (WebCore): Renamed old class the AudioPullFIFO.
        (WebCore::AudioPullFIFO::AudioPullFIFO):
        (WebCore::AudioPullFIFO::consume):
        (WebCore::AudioPullFIFO::findWrapLengths):
        (WebCore::AudioPullFIFO::fillBuffer):
        * platform/audio/AudioPullFIFO.h: Added.
        (WebCore):
        (AudioPullFIFO):
        (WebCore::AudioPullFIFO::updateIndex):

2012-04-23  Nate Chapin  <japhet@chromium.org>

        REGRESSION (r100311): YummySoup app crashes when trying to print
        https://bugs.webkit.org/show_bug.cgi?id=83918

        Reviewed by Alexey Proskuryakov.

        Test: http/tests/xmlhttprequest/cancel-during-failure-crash.html

        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::didFinishLoading):
        (WebCore::SubresourceLoader::didFail):
        (WebCore::SubresourceLoader::willCancel): Now that we might enter the function if we're already Finishing,
            some cleanup needs to be done in the Initialized state only.
        (WebCore::SubresourceLoader::releaseResources): Move requesting counting decrement and laodDone() to
            the finishing functions.

2012-04-23  Shawn Singh  <shawnsingh@chromium.org>

        [chromium] Visualize accelerated compositor rects.
        https://bugs.webkit.org/show_bug.cgi?id=79400

        Reviewed by Adrienne Walker.

        No tests, all the code added is only debugging code.

        This patch adds support for visualizing three different types of
        rects on the chromium heads-up display:
        1. updateRects that indicate what was painted/uploaded to a resource
        2. propertyChangedRects that indicate layers that has property changes
        3. surfaceDamageRects that are the accumulation of updateRects and
           propertyChangedRects, indicating what pixels on the screen have
           actually changed.  (Surface damage also accounts for newly exposed
           areas but that is not explicitly visualized.)

        In addition to adding support for visualizing this, the
        CCHeadsUpDisplay was significantly refactored, separating the FPS
        Counter functionality into a different class, so that the heads-up
        display is all about visualizing annotations, and those
        annotations (frame rate, debug rects) are logged separately.

        * WebCore.gypi:
        * platform/graphics/chromium/cc/CCDebugRectHistory.cpp: Added.
        (WebCore):
        (WebCore::CCDebugRectHistory::CCDebugRectHistory):
        (WebCore::CCDebugRectHistory::enabled):
        (WebCore::CCDebugRectHistory::saveDebugRectsForCurrentFrame):
        (WebCore::CCDebugRectHistory::savePaintRects):
        (WebCore::CCDebugRectHistory::savePropertyChangedRects):
        (WebCore::CCDebugRectHistory::saveSurfaceDamageRects):
        * platform/graphics/chromium/cc/CCDebugRectHistory.h: Added.
        (WebCore):
        (WebCore::CCDebugRect::CCDebugRect):
        (CCDebugRect):
        (CCDebugRectHistory):
        (WebCore::CCDebugRectHistory::create):
        (WebCore::CCDebugRectHistory::debugRects):
        * platform/graphics/chromium/cc/CCFrameRateCounter.cpp: Added.
        (WebCore):
        (WebCore::safeMod):
        (WebCore::CCFrameRateCounter::frameIndex):
        (WebCore::CCFrameRateCounter::CCFrameRateCounter):
        (WebCore::CCFrameRateCounter::markBeginningOfFrame):
        (WebCore::CCFrameRateCounter::markEndOfFrame):
        (WebCore::CCFrameRateCounter::isBadFrameInterval):
        (WebCore::CCFrameRateCounter::isBadFrame):
        (WebCore::CCFrameRateCounter::getAverageFPSAndStandardDeviation):
        (WebCore::CCFrameRateCounter::timeStampOfRecentFrame):
        * platform/graphics/chromium/cc/CCFrameRateCounter.h: Added.
        (WebCore):
        (CCFrameRateCounter):
        (WebCore::CCFrameRateCounter::create):
        (WebCore::CCFrameRateCounter::currentFrameNumber):
        (WebCore::CCFrameRateCounter::timeStampHistorySize):
        * platform/graphics/chromium/cc/CCHeadsUpDisplay.cpp:
        (WebCore):
        (WebCore::CCHeadsUpDisplay::enabled):
        (WebCore::CCHeadsUpDisplay::showDebugRects):
        (WebCore::CCHeadsUpDisplay::draw):
        (WebCore::CCHeadsUpDisplay::drawHudContents):
        (WebCore::CCHeadsUpDisplay::drawFPSCounter):
        (WebCore::CCHeadsUpDisplay::drawFPSCounterText):
        (WebCore::CCHeadsUpDisplay::drawDebugRects):
        * platform/graphics/chromium/cc/CCHeadsUpDisplay.h:
        (WebCore):
        (CCHeadsUpDisplay):
        (WebCore::CCHeadsUpDisplay::CCHeadsUpDisplay):
        * platform/graphics/chromium/cc/CCLayerTreeHost.h:
        (WebCore::CCSettings::CCSettings):
        (CCSettings):
        * platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:
        (WebCore::CCLayerTreeHostImpl::CCLayerTreeHostImpl):
        (WebCore::CCLayerTreeHostImpl::calculateRenderPasses):
        (WebCore::CCLayerTreeHostImpl::drawLayers):
        (WebCore::CCLayerTreeHostImpl::swapBuffers):
        * platform/graphics/chromium/cc/CCLayerTreeHostImpl.h:
        (WebCore):
        (WebCore::CCLayerTreeHostImpl::fpsCounter):
        (WebCore::CCLayerTreeHostImpl::debugRectHistory):
        (CCLayerTreeHostImpl):

2012-04-23  Julien Chaffraix  <jchaffraix@webkit.org>

        Cut dependency on RenderLayer::scrollRectToVisible outside rendering
        https://bugs.webkit.org/show_bug.cgi?id=84607

        Reviewed by Simon Fraser.

        Layering fix only, there should be no change behavior.

        Because we don't have an accessor on RenderObject, a lot of the code needs
        to know about RenderLayer. This is not necessary and exposes RenderLayer to
        objects that shouldn't know about it.

        This patch adds a RenderObject::scrollRectToVisible with the ad-hoc explanation
        as to why it isn't on RenderBox (scrolling is a RenderBox concept).

        * WebCore.exp.in:
        * WebCore.order:
        Updated to expose the new method.

        * dom/Element.cpp:
        (WebCore::Element::scrollIntoView):
        (WebCore::Element::scrollIntoViewIfNeeded):
        (WebCore::Element::updateFocusAppearance):
        * editing/Editor.cpp:
        (WebCore::Editor::findStringAndScrollToVisible):
        * editing/FrameSelection.cpp:
        (WebCore::FrameSelection::revealSelection):
        * page/FrameView.cpp:
        (WebCore::FrameView::scrollToAnchor):
        Updated those call sites to use the new function.

        * rendering/RenderLayer.h:
        Removed ScrollBehavior.h #include and default argument values
        as we are always called through RenderObject now.

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::scrollRectToVisible):
        * rendering/RenderObject.h:
        Added a new function that just forwards to the enclosing layer
        if any. We return whether we actually tried to scroll to match
        some call sites expectations.

2012-04-23  Zhenyao Mo  <zmo@google.com>

        framebuffer binding should not be changed after canvas resize or compositing
        https://bugs.webkit.org/show_bug.cgi?id=84609

        Reviewed by Kenneth Russell.

        Test: fast/canvas/webgl/framebuffer-bindings-unaffected-on-resize.html

        * html/canvas/WebGLRenderingContext.cpp: set framebuffer binding to DrawingBuffer.
        (WebCore):
        (WebCore::WebGLRenderingContext::bindFramebuffer):
        (WebCore::WebGLRenderingContext::deleteFramebuffer):
        (WebCore::WebGLRenderingContext::loseContextImpl):
        * platform/graphics/cairo/DrawingBufferCairo.cpp: initialize m_framebufferBinding.
        (WebCore::DrawingBuffer::DrawingBuffer):
        * platform/graphics/chromium/DrawingBufferChromium.cpp: Ditto.
        (WebCore::DrawingBuffer::DrawingBuffer):
        * platform/graphics/chromium/WebGLLayerChromium.cpp: Recover framebuffer binding after update().
        (WebCore::WebGLLayerChromium::update):
        * platform/graphics/gpu/DrawingBuffer.cpp: Add a function to restore framebuffer binding.
        (WebCore::DrawingBuffer::restoreFramebufferBinding):
        (WebCore):
        * platform/graphics/gpu/DrawingBuffer.h: Ditto.
        (WebCore::DrawingBuffer::setTexture2DBinding):
        (DrawingBuffer):
        (WebCore::DrawingBuffer::setFramebufferBinding):
        * platform/graphics/gpu/mac/DrawingBufferMac.mm: initialize m_framebufferBinding.
        (WebCore::DrawingBuffer::DrawingBuffer):
        * platform/graphics/gpu/qt/DrawingBufferQt.cpp: initialize m_framebufferBinding.
        (WebCore::DrawingBuffer::DrawingBuffer):

2012-04-23  Victor Carbune  <vcarbune@adobe.com>

        Simplify volume slider rendering
        https://bugs.webkit.org/show_bug.cgi?id=82150

        Reviewed by Eric Carlson.

        Test: media/video-controls-rendering-toggle-display-none.html

        * css/mediaControlsChromium.css: Update controls css for Chromium.
        (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-volume-slider-container, video::-webkit-media-controls-volume-slider-container):
        * css/mediaControlsGtk.css: Update controls css for GTK.
        (audio::-webkit-media-controls-mute-button, video::-webkit-media-controls-mute-button):
        (audio::-webkit-media-controls-volume-slider-container, video::-webkit-media-controls-volume-slider-container):
        * css/mediaControlsQuickTime.css: Update controls css for Safari.
        (audio::-webkit-media-controls-mute-button, video::-webkit-media-controls-mute-button):
        (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):
        * html/shadow/MediaControlElements.cpp: Removed particular renderer.
        (WebCore):
        * html/shadow/MediaControlElements.h:
        (MediaControlVolumeSliderContainerElement): Remoed particular renderer.
        * html/shadow/MediaControlRootElement.cpp:
        (WebCore::MediaControlRootElement::create): Added a div element as a container. Removed extra unused mute button.
        * html/shadow/MediaControlRootElementChromium.cpp: Added an extra div
        element as a container for the mute button and the volume slider to
        easily position them relative to each other.
        (WebCore::MediaControlRootElementChromium::create):

2012-04-23  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r109981.
        http://trac.webkit.org/changeset/109981
        https://bugs.webkit.org/show_bug.cgi?id=84630

        Broke Twitter map buddy icon (see
        https://bugs.webkit.org/show_bug.cgi?id=84558) (Requested by
        thorton on #webkit).

        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::addToOverlapMap):
        (WebCore::RenderLayerCompositor::computeCompositingRequirements):

2012-04-23  Emil A Eklund  <eae@chromium.org>

        Crash in RenderInline::clippedOverflowRectForRepaint for PrintPreview
        https://bugs.webkit.org/show_bug.cgi?id=84300

        Reviewed by Simon Fraser.

        No new tests, have not been able to come up with a reliable reduction.

        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::clippedOverflowRectForRepaint):
        Add NULL check for containingBlock() as it can return NULL when detached
        from the tree.

2012-04-23  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r114929.
        http://trac.webkit.org/changeset/114929
        https://bugs.webkit.org/show_bug.cgi?id=84623

        Broke 35 canvas/webgl tests (Requested by jernoble on
        #webkit).

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore):
        (WebCore::WebGLRenderingContext::bindFramebuffer):
        (WebCore::WebGLRenderingContext::deleteFramebuffer):
        (WebCore::WebGLRenderingContext::loseContextImpl):
        * platform/graphics/cairo/DrawingBufferCairo.cpp:
        (WebCore::DrawingBuffer::DrawingBuffer):
        * platform/graphics/chromium/DrawingBufferChromium.cpp:
        (WebCore::DrawingBuffer::DrawingBuffer):
        * platform/graphics/chromium/WebGLLayerChromium.cpp:
        (WebCore::WebGLLayerChromium::update):
        * platform/graphics/gpu/DrawingBuffer.cpp:
        * platform/graphics/gpu/DrawingBuffer.h:
        (WebCore::DrawingBuffer::setTexture2DBinding):
        (DrawingBuffer):
        * platform/graphics/gpu/mac/DrawingBufferMac.mm:
        (WebCore::DrawingBuffer::DrawingBuffer):
        * platform/graphics/gpu/qt/DrawingBufferQt.cpp:
        (WebCore::DrawingBuffer::DrawingBuffer):

2012-04-23  Kentaro Hara  <haraken@chromium.org>

        [V8] Pass Isolate around in V8Collection.h
        https://bugs.webkit.org/show_bug.cgi?id=84299

        Reviewed by Nate Chapin.

        The objective is to pass Isolate around in V8 bindings.
        This patch passes Isolate around in V8Collection.h.

        No tests. No change in behavior.

        * bindings/v8/V8Collection.h:
        (WebCore::getV8Object):
        (WebCore::getNamedPropertyOfCollection):
        (WebCore::collectionNamedPropertyGetter):
        (WebCore::getIndexedPropertyOfCollection):
        (WebCore::collectionIndexedPropertyGetter):

2012-04-23  Kentaro Hara  <haraken@chromium.org>

        [V8] Pass Isolate to toV8() (Part5)
        https://bugs.webkit.org/show_bug.cgi?id=84271

        Reviewed by Nate Chapin.

        The objective is to pass Isolate to all toV8()s.
        Since there are a lot of toV8(), I'll make the change
        step by step. This patch passes Isolate to toV8()
        in several custom bindings.

        No tests. No change in behavior.

        * bindings/v8/custom/V8MessageChannelConstructor.cpp:
        (WebCore::V8MessageChannel::constructorCallback):
        * bindings/v8/custom/V8MessageEventCustom.cpp:
        (WebCore::V8MessageEvent::dataAccessorGetter):
        (WebCore::V8MessageEvent::portsAccessorGetter):
        * bindings/v8/custom/V8MutationCallbackCustom.cpp:
        (WebCore::V8MutationCallback::handleEvent):
        * bindings/v8/custom/V8NamedNodeMapCustom.cpp:
        (WebCore::V8NamedNodeMap::indexedPropertyGetter):
        (WebCore::V8NamedNodeMap::namedPropertyGetter):
        (WebCore::toV8):
        * bindings/v8/custom/V8NodeListCustom.cpp:
        (WebCore::V8NodeList::namedPropertyGetter):
        * bindings/v8/custom/V8NotificationCenterCustom.cpp:
        (WebCore::V8NotificationCenter::createHTMLNotificationCallback):
        (WebCore::V8NotificationCenter::createNotificationCallback):
        * bindings/v8/custom/V8PerformanceCustom.cpp:
        (WebCore::V8Performance::memoryAccessorGetter):
        * bindings/v8/custom/V8PopStateEventCustom.cpp:
        (WebCore::V8PopStateEvent::stateAccessorGetter):
        * bindings/v8/custom/V8SQLTransactionSyncCustom.cpp:
        (WebCore::V8SQLTransactionSync::executeSqlCallback):
        * bindings/v8/custom/V8SVGPathSegCustom.cpp:
        (WebCore::toV8):

2012-04-23  Zhenyao Mo  <zmo@google.com>

        framebuffer binding should not be changed after canvas resize or compositing
        https://bugs.webkit.org/show_bug.cgi?id=84609

        Reviewed by Kenneth Russell.

        Test: fast/canvas/webgl/framebuffer-bindings-unaffected-on-resize.html

        * html/canvas/WebGLRenderingContext.cpp: set framebuffer binding to DrawingBuffer.
        (WebCore):
        (WebCore::WebGLRenderingContext::bindFramebuffer):
        (WebCore::WebGLRenderingContext::deleteFramebuffer):
        (WebCore::WebGLRenderingContext::loseContextImpl):
        * platform/graphics/cairo/DrawingBufferCairo.cpp: initialize m_framebufferBinding.
        (WebCore::DrawingBuffer::DrawingBuffer):
        * platform/graphics/chromium/DrawingBufferChromium.cpp: Ditto.
        (WebCore::DrawingBuffer::DrawingBuffer):
        * platform/graphics/chromium/WebGLLayerChromium.cpp: Recover framebuffer binding after update().
        (WebCore::WebGLLayerChromium::update):
        * platform/graphics/gpu/DrawingBuffer.cpp: Add a function to restore framebuffer binding.
        (WebCore::DrawingBuffer::restoreFramebufferBinding):
        (WebCore):
        * platform/graphics/gpu/DrawingBuffer.h: Ditto.
        (WebCore::DrawingBuffer::setTexture2DBinding):
        (DrawingBuffer):
        (WebCore::DrawingBuffer::setFramebufferBinding):
        * platform/graphics/gpu/mac/DrawingBufferMac.mm: initialize m_framebufferBinding.
        (WebCore::DrawingBuffer::DrawingBuffer):
        * platform/graphics/gpu/qt/DrawingBufferQt.cpp: initialize m_framebufferBinding.
        (WebCore::DrawingBuffer::DrawingBuffer):

2012-04-23  Kentaro Hara  <haraken@chromium.org>

        [V8] Pass Isolate to toV8() (Part4)
        https://bugs.webkit.org/show_bug.cgi?id=84269

        Reviewed by Nate Chapin.

        The objective is to pass Isolate to all toV8()s.
        Since there are a lot of toV8()s, I'll make the change
        step by step. This patch passes Isolate to toV8() in
        several custom bindings.

        No tests. No change in behavior.

        * bindings/v8/custom/V8HTMLCanvasElementCustom.cpp:
        (WebCore::V8HTMLCanvasElement::getContextCallback):
        * bindings/v8/custom/V8HTMLCollectionCustom.cpp:
        (WebCore::toV8):
        * bindings/v8/custom/V8HTMLDocumentCustom.cpp:
        (WebCore::V8HTMLDocument::allAccessorGetter):
        * bindings/v8/custom/V8HTMLElementCustom.cpp:
        (WebCore::toV8Object):
        (WebCore::V8HTMLElement::itemValueAccessorGetter):
        * bindings/v8/custom/V8HTMLFormElementCustom.cpp:
        (WebCore::V8HTMLFormElement::indexedPropertyGetter):
        (WebCore::V8HTMLFormElement::namedPropertyGetter):
        * bindings/v8/custom/V8HTMLFrameSetElementCustom.cpp:
        (WebCore::V8HTMLFrameSetElement::namedPropertyGetter):
        * bindings/v8/custom/V8HTMLImageElementConstructor.cpp:
        (WebCore::v8HTMLImageElementConstructorCallback):
        * bindings/v8/custom/V8HTMLLinkElementCustom.cpp:
        (WebCore::V8HTMLLinkElement::sizesAccessorGetter):
        * bindings/v8/custom/V8HTMLOptionsCollectionCustom.cpp:
        (WebCore::V8HTMLOptionsCollection::indexedPropertyGetter):
        * bindings/v8/custom/V8HTMLOutputElementCustom.cpp:
        (WebCore::V8HTMLOutputElement::htmlForAccessorGetter):
        * bindings/v8/custom/V8HTMLSelectElementCustom.cpp:
        (WebCore::V8HTMLSelectElement::indexedPropertyGetter):
        * bindings/v8/custom/V8ImageDataCustom.cpp:
        (WebCore::toV8):

2012-04-23  Emil A Eklund  <eae@chromium.org>

        Clean up subpixel unit handling in hit testing code
        https://bugs.webkit.org/show_bug.cgi?id=84496

        Reviewed by Eric Seidel.

        Fix use of IntRect and LayoutRect in hit testing code in preparation for
        subpixel layout.

        No new tests, no change in functionality.

        * rendering/HitTestResult.cpp:
        (WebCore::HitTestResult::rectForPoint):
        Revert rectForPoint to IntRect as all call sites converted it to an
        IntRect anyway to compare it with an IntPoint or another IntRect.

        * rendering/HitTestingTransformState.cpp:
        (WebCore::HitTestingTransformState::boundsOfMappedQuad):
        * rendering/HitTestingTransformState.h:
        Convert boundsOfMappedQuad to LayoutRect as the TransformationMatrix now
        has subpixel precision.

2012-04-23  Kentaro Hara  <haraken@chromium.org>

        [V8] Pass Isolate to toV8() (Part3)
        https://bugs.webkit.org/show_bug.cgi?id=84261

        Reviewed by Nate Chapin.

        The objective is to pass Isolate to all toV8()s.
        Since there are a lot of toV8(), I'll make the change
        step by step. This patch passes Isolate to toV8()
        in several custom bindings.

        No tests. No change in behavior.

        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        (WebCore::V8DOMWindow::openCallback):
        (WebCore::V8DOMWindow::indexedPropertyGetter):
        (WebCore::V8DOMWindow::namedPropertyGetter):
        * bindings/v8/custom/V8DirectoryEntrySyncCustom.cpp:
        (WebCore::V8DirectoryEntrySync::getDirectoryCallback):
        (WebCore::V8DirectoryEntrySync::getFileCallback):
        * bindings/v8/custom/V8DocumentCustom.cpp:
        (WebCore::V8Document::evaluateCallback):
        (WebCore::V8Document::getCSSCanvasContextCallback):
        (WebCore::V8Document::createTouchListCallback):
        * bindings/v8/custom/V8DocumentLocationCustom.cpp:
        (WebCore::V8Document::locationAccessorGetter):
        * bindings/v8/custom/V8EntryCustom.cpp:
        (WebCore::toV8):
        * bindings/v8/custom/V8EntrySyncCustom.cpp:
        (WebCore::toV8):
        * bindings/v8/custom/V8EventCustom.cpp:
        (WebCore::V8Event::dataTransferAccessorGetter):
        (WebCore::V8Event::clipboardDataAccessorGetter):
        (WebCore):
        * bindings/v8/custom/V8FileReaderCustom.cpp:
        (WebCore::V8FileReader::resultAccessorGetter):
        * bindings/v8/custom/V8HTMLAllCollectionCustom.cpp:
        (WebCore::getItem):
        (WebCore::V8HTMLAllCollection::callAsFunctionCallback):

2012-04-23  Kentaro Hara  <haraken@chromium.org>

        [V8] Pass Isolate to toV8() (Part2)
        https://bugs.webkit.org/show_bug.cgi?id=84259

        Reviewed by Nate Chapin.

        The objective is to pass Isolate to all toV8()s.
        Since there are a lot of toV8(), I'll make the change
        step by step. This patch passes Isolate to toV8() in
        several custom bindings.

        No tests. No change in behavior.

        * bindings/v8/custom/V8BlobCustom.cpp:
        (WebCore::toV8):
        * bindings/v8/custom/V8CSSRuleCustom.cpp:
        (WebCore::toV8):
        * bindings/v8/custom/V8CSSStyleSheetCustom.cpp:
        (WebCore::toV8):
        * bindings/v8/custom/V8CSSValueCustom.cpp:
        (WebCore::toV8):
        * bindings/v8/custom/V8CanvasRenderingContext2DCustom.cpp:
        (WebCore::toV8Object):
        (WebCore::V8CanvasRenderingContext2D::strokeStyleAccessorGetter):
        (WebCore::V8CanvasRenderingContext2D::fillStyleAccessorGetter):
        * bindings/v8/custom/V8ConsoleCustom.cpp:
        (WebCore::V8Console::memoryAccessorGetter):
        * bindings/v8/custom/V8CustomSQLStatementErrorCallback.cpp:
        (WebCore::V8SQLStatementErrorCallback::handleEvent):
        * bindings/v8/custom/V8DOMStringMapCustom.cpp:
        (WebCore::toV8):
        * bindings/v8/custom/V8DOMTokenListCustom.cpp:
        (WebCore::toV8):

2012-04-23  Kentaro Hara  <haraken@chromium.org>

        [V8][Refactoring] Remove V8Proxy::toV8()
        https://bugs.webkit.org/show_bug.cgi?id=84257

        Reviewed by Nate Chapin.

        Some constructorCallback()s are using V8Proxy::toV8(),
        other constructorCallback()s are directly using setJSWrapperForXXX()
        (XXX can be DOMObject, ActiveDOMObject, Node or ActiveNode).
        We should unify them.

        Considering the fact that V8Proxy::toV8() just supports
        XXX=DOMObject and thus is not flexible, replacing V8Proxy::toV8()
        with setJSWrapperForDOMObject() would make sense.

        No tests. No change in behavior.

        * bindings/v8/V8Proxy.h: Removed toV8().

        * bindings/scripts/CodeGeneratorV8.pm: Replaced toV8() with setJSWrapperForDOMObject().
        (GenerateEventConstructorCallback):
        * bindings/v8/custom/V8ArrayBufferCustom.cpp: Ditto.
        (WebCore::V8ArrayBuffer::constructorCallback):
        * bindings/v8/custom/V8ArrayBufferViewCustom.h: Ditto.
        (WebCore::constructWebGLArrayWithArrayBufferArgument):
        (WebCore::constructWebGLArray):
        * bindings/v8/custom/V8DOMFormDataCustom.cpp: Ditto.
        (WebCore::V8DOMFormData::constructorCallback):
        * bindings/v8/custom/V8DataViewCustom.cpp: Ditto.
        (WebCore::V8DataView::constructorCallback):
        * bindings/v8/custom/V8MessageChannelConstructor.cpp: Ditto.
        (WebCore::V8MessageChannel::constructorCallback):
        * bindings/v8/custom/V8WebKitPointConstructor.cpp: Ditto.
        (WebCore::V8WebKitPoint::constructorCallback):

        * bindings/scripts/test/V8/V8TestEventConstructor.cpp: Updated run-bindings-tests results.
        (WebCore::V8TestEventConstructor::constructorCallback):

2012-04-23  Kentaro Hara  <haraken@chromium.org>

        [V8] Pass Isolate to toV8() (Part1)
        https://bugs.webkit.org/show_bug.cgi?id=84250

        Reviewed by Nate Chapin.

        The final objective is to pass Isolate around in V8 bindings.
        This patch makes a change in CodeGeneratorV8.pm so that the
        generated code passes Isolate to toV8().

        No tests. No change in behavior.

        * bindings/scripts/CodeGeneratorV8.pm: Modified as described above.
        (GenerateNormalAttrGetter):
        (GenerateNamedConstructorCallback):
        (GenerateCallbackImplementation):
        (GenerateFunctionCallString):
        (NativeToJSValue):

        * bindings/scripts/test/V8/V8Float64Array.cpp: Updated run-bindings-tests results.
        (WebCore::Float64ArrayV8Internal::fooCallback):
        * bindings/scripts/test/V8/V8TestCallback.cpp:
        (WebCore::V8TestCallback::callbackWithClass1Param):
        (WebCore::V8TestCallback::callbackWithClass2Param):
        (WebCore::V8TestCallback::callbackWithStringList):
        (WebCore::V8TestCallback::callbackRequiresThisToPass):
        * bindings/scripts/test/V8/V8TestInterface.cpp:
        (WebCore::TestInterfaceV8Internal::supplementalMethod2Callback):
        * bindings/scripts/test/V8/V8TestNamedConstructor.cpp:
        (WebCore::V8TestNamedConstructorConstructorCallback):
        * bindings/scripts/test/V8/V8TestObj.cpp:
        (WebCore::TestObjV8Internal::readOnlyTestObjAttrAttrGetter):
        (WebCore::TestObjV8Internal::testObjAttrAttrGetter):
        (WebCore::TestObjV8Internal::XMLObjAttrAttrGetter):
        (WebCore::TestObjV8Internal::withScriptExecutionContextAttributeAttrGetter):
        (WebCore::TestObjV8Internal::withScriptStateAttributeRaisesAttrGetter):
        (WebCore::TestObjV8Internal::withScriptExecutionContextAttributeRaisesAttrGetter):
        (WebCore::TestObjV8Internal::withScriptExecutionContextAndScriptStateAttributeAttrGetter):
        (WebCore::TestObjV8Internal::withScriptExecutionContextAndScriptStateAttributeRaisesAttrGetter):
        (WebCore::TestObjV8Internal::withScriptExecutionContextAndScriptStateWithSpacesAttributeAttrGetter):
        (WebCore::TestObjV8Internal::withScriptArgumentsAndCallStackAttributeAttrGetter):
        (WebCore::TestObjV8Internal::cachedAttribute1AttrGetter):
        (WebCore::TestObjV8Internal::cachedAttribute2AttrGetter):
        (WebCore::TestObjV8Internal::mutablePointAttrGetter):
        (WebCore::TestObjV8Internal::immutablePointAttrGetter):
        (WebCore::TestObjV8Internal::objMethodCallback):
        (WebCore::TestObjV8Internal::objMethodWithArgsCallback):
        (WebCore::TestObjV8Internal::methodThatRequiresAllArgsAndThrowsCallback):
        (WebCore::TestObjV8Internal::withScriptStateObjCallback):
        (WebCore::TestObjV8Internal::withScriptStateObjExceptionCallback):
        (WebCore::TestObjV8Internal::withScriptExecutionContextAndScriptStateObjExceptionCallback):
        (WebCore::TestObjV8Internal::withScriptExecutionContextAndScriptStateWithSpacesCallback):
        (WebCore::TestObjV8Internal::mutablePointFunctionCallback):
        (WebCore::TestObjV8Internal::immutablePointFunctionCallback):
        (WebCore::TestObjV8Internal::strictFunctionCallback):
        * bindings/scripts/test/V8/V8TestSerializedScriptValueInterface.cpp:
        (WebCore::TestSerializedScriptValueInterfaceV8Internal::portsAttrGetter):

2012-04-23  Kentaro Hara  <haraken@chromium.org>

        [V8] Add an optional Isolate argument to setDOMException() and throwError()
        https://bugs.webkit.org/show_bug.cgi?id=84310

        Reviewed by Nate Chapin.

        The objective is to pass Isolate to setDOMException()
        and throwError(). This patch adds an optional Isolate argument
        to setDOMException() and throwError(). I'll pass the Isolate
        to these methods in the following patches.

        No tests. No change in behavior.

        * bindings/v8/V8Proxy.cpp:
        (WebCore):
        (WebCore::V8Proxy::setDOMException):
        (WebCore::V8Proxy::throwError):
        * bindings/v8/V8Proxy.h:
        (V8Proxy):
        (WebCore):
        (WebCore::throwError):

2012-04-23  Ian Vollick  <vollick@chromium.org>

        [chromium] Properly ignore unsupported animation directions.
        https://bugs.webkit.org/show_bug.cgi?id=84599

        Reviewed by Adrienne Walker.

        Tested in CCLayerAnimationControllerTest.ignoreUnsupportedAnimationDirections.

        * platform/graphics/chromium/cc/CCLayerAnimationController.cpp:

2012-04-17  Kentaro Hara  <haraken@chromium.org>

        [Performance][V8] Skip Isolate look-up to find StringCache
        https://bugs.webkit.org/show_bug.cgi?id=84103

        Reviewed by Nate Chapin.

        This patch improves the performance of a lot of DOM attribute
        getters that return a string.

        - Improves the performance of Dromaeo/dom-attr.html(element.property)
          by 27.7%.
        - Improves the performance of Dromaeo/dom-attr.html(getAttribute)
          by 10.6%.
        - Improves the performance of div.id, div.className,
          div.nodeName, text.nodeValue, text.textContent by 12% -- 21%.

        The followings are the test results in my Linux desktop.

        Performance test: Dromaeo/dom-attr.html
        Total:                     674.64runs/s ->  707.03runs/s (+ 4.8%)
        getAttribute:             1537.60runs/s -> 1700.20runs/s (+10.6%)
        element.property:         1389.00runs/s -> 1774.20runs/s (+27.7%)
        setAttribute:              538.88runs/s ->  548.87runs/s (+ 1.9%)
        element.property = value:  644.07runs/s ->  656.67runs/s (+ 2.0%)
        element.expando = value:   219.76runs/s ->  207.14runs/s (- 6.8%)
        element.expando:           578.77runs/s ->  554.67runs/s (- 4.2%)

        Performance test: https://bugs.webkit.org/attachment.cgi?id=137440
        div.id:           30.70ns -> 26.70ns (+15%)
        div.className:    31.10ns -> 26.40ns (+18%)
        div.nodeName:     37.70ns -> 33.00ns (+14%)
        text.nodeValue:   31.40ns -> 25.90ns (+21%)
        text.textContent: 51.50ns -> 45.90ns (+12%)

        Previously V8 bindings need to look up an Isolate to find
        an Isolate-local StringCache. This patch skips the look-up
        by getting the Isolate from AccessorInfo.GetIsolate()
        or Arguments.GetIsolate().

        No tests. No change in behavior.

        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateNormalAttrGetter):
        (GenerateFunctionCallString):
        (NativeToJSValue):
        * bindings/v8/V8Binding.cpp:
        (WebCore::getElementStringAttr):
        * bindings/v8/V8Binding.h:
        (WebCore::v8ExternalString): Make 'isolate' an optional argument.
        Ideally we want to make 'isolate' a non-optional argument,
        but it is difficult to rewrite all v8ExternalString() callers
        at a breath. We can rewrite them incrementally.
        (WebCore::v8String): Ditto.
        (WebCore::v8StringOrNull): Ditto.
        (WebCore::v8StringOrUndefined): Ditto.
        (WebCore::v8StringOrFalse): Ditto.

        * bindings/scripts/test/V8/V8TestEventConstructor.cpp: Updated run-bindings-tests results.
        (WebCore::TestEventConstructorV8Internal::attr1AttrGetter):
        (WebCore::TestEventConstructorV8Internal::attr2AttrGetter):
        * bindings/scripts/test/V8/V8TestInterface.cpp:
        (WebCore::TestInterfaceV8Internal::supplementalStr1AttrGetter):
        (WebCore::TestInterfaceV8Internal::supplementalStr2AttrGetter):
        * bindings/scripts/test/V8/V8TestObj.cpp:
        (WebCore::TestObjV8Internal::readOnlyStringAttrAttrGetter):
        (WebCore::TestObjV8Internal::stringAttrAttrGetter):
        (WebCore::TestObjV8Internal::reflectedStringAttrAttrGetter):
        (WebCore::TestObjV8Internal::reflectedURLAttrAttrGetter):
        (WebCore::TestObjV8Internal::reflectedCustomURLAttrAttrGetter):
        (WebCore::TestObjV8Internal::stringAttrWithGetterExceptionAttrGetter):
        (WebCore::TestObjV8Internal::stringAttrWithSetterExceptionAttrGetter):
        (WebCore::TestObjV8Internal::hashAttrGetter):
        (WebCore::TestObjV8Internal::conditionalMethod1Callback):

2012-04-17  Kentaro Hara  <haraken@chromium.org>

        [V8] Add an optional Isolate argument to wrap()
        https://bugs.webkit.org/show_bug.cgi?id=84202

        Reviewed by Nate Chapin.

        The final objective is to pass Isolate around in V8 bindings.
        This patch adds an optional Isolate argument to wrap().
        After rewriting all wrap() callers so that they pass Isolate
        to wrap(), I'll make the Isolate argument non-optional.

        No tests. No change in behavior.

        * bindings/scripts/CodeGeneratorV8.pm: Modified as described above.
        (GenerateHeader):
        * bindings/v8/custom/V8DocumentCustom.cpp: Ditto.
        (WebCore::toV8):
        * bindings/v8/custom/V8HTMLDocumentCustom.cpp: Ditto.
        (WebCore::toV8):
        * bindings/v8/custom/V8NodeCustom.cpp: Ditto.
        (WebCore::toV8Slow):
        * bindings/v8/custom/V8SVGDocumentCustom.cpp: Ditto.
        (WebCore::toV8):
        * dom/make_names.pl: Ditto.
        (printWrapperFactoryCppFile):

        * bindings/scripts/test/V8/V8Float64Array.h:
        Updated run-bindings-tests results.
        (V8Float64Array):
        (WebCore::V8Float64Array::wrap):
        * bindings/scripts/test/V8/V8TestActiveDOMObject.h:
        (V8TestActiveDOMObject):
        (WebCore::V8TestActiveDOMObject::wrap):
        (WebCore::toV8):
        * bindings/scripts/test/V8/V8TestCustomNamedGetter.h:
        (V8TestCustomNamedGetter):
        (WebCore::V8TestCustomNamedGetter::wrap):
        (WebCore::toV8):
        * bindings/scripts/test/V8/V8TestEventConstructor.h:
        (V8TestEventConstructor):
        (WebCore::V8TestEventConstructor::wrap):
        (WebCore::toV8):
        * bindings/scripts/test/V8/V8TestEventTarget.h:
        (V8TestEventTarget):
        (WebCore::V8TestEventTarget::wrap):
        (WebCore::toV8):
        * bindings/scripts/test/V8/V8TestInterface.h:
        (V8TestInterface):
        (WebCore::V8TestInterface::wrap):
        (WebCore::toV8):
        * bindings/scripts/test/V8/V8TestMediaQueryListListener.h:
        (V8TestMediaQueryListListener):
        (WebCore::V8TestMediaQueryListListener::wrap):
        (WebCore::toV8):
        * bindings/scripts/test/V8/V8TestNamedConstructor.h:
        (V8TestNamedConstructor):
        (WebCore::V8TestNamedConstructor::wrap):
        (WebCore::toV8):
        * bindings/scripts/test/V8/V8TestNode.h:
        (V8TestNode):
        (WebCore::V8TestNode::wrap):
        (WebCore::toV8):
        * bindings/scripts/test/V8/V8TestObj.h:
        (V8TestObj):
        (WebCore::V8TestObj::wrap):
        (WebCore::toV8):
        * bindings/scripts/test/V8/V8TestSerializedScriptValueInterface.h:
        (V8TestSerializedScriptValueInterface):
        (WebCore::V8TestSerializedScriptValueInterface::wrap):
        (WebCore::toV8):

2012-04-17  Kentaro Hara  <haraken@chromium.org>

        [V8] Pass Isolate to toV8Slow()
        https://bugs.webkit.org/show_bug.cgi?id=84173

        Reviewed by Nate Chapin.

        The final objective is to pass Isolate around in V8 bindings.
        This patch passes the Isolate to toV8Slow().

        No tests. No change in behavior.

        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateHeader):
        * bindings/v8/custom/V8NodeCustom.cpp:
        (WebCore::toV8Slow):

2012-04-17  Kentaro Hara  <haraken@chromium.org>

        [V8] Add an optional Isolate argument to toV8().
        https://bugs.webkit.org/show_bug.cgi?id=84161

        Reviewed by Nate Chapin.

        The final objective is to pass Isolate around in V8 bindings.
        This patch adds an optional Isolate argument to toV8().
        After rewriting all toV8() callers so that they pass Isolate,
        I will make the Isolate argument non-optional.

        No tests. No change in behavior.

        * bindings/scripts/CodeGeneratorV8.pm:
        Modified as described above.
        (GenerateHeader):
        (NativeToJSValue):
        * bindings/v8/custom/V8BlobCustom.cpp:
        (WebCore::toV8):
        * bindings/v8/custom/V8CSSRuleCustom.cpp:
        (WebCore::toV8):
        * bindings/v8/custom/V8CSSStyleSheetCustom.cpp:
        (WebCore::toV8):
        * bindings/v8/custom/V8CSSValueCustom.cpp:
        (WebCore::toV8):
        * bindings/v8/custom/V8CanvasPixelArrayCustom.cpp:
        (WebCore::toV8):
        * bindings/v8/custom/V8DOMStringMapCustom.cpp:
        (WebCore::toV8):
        * bindings/v8/custom/V8DOMTokenListCustom.cpp:
        (WebCore::toV8):
        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        (WebCore::toV8):
        * bindings/v8/custom/V8DataViewCustom.cpp:
        (WebCore::toV8):
        * bindings/v8/custom/V8DocumentCustom.cpp:
        (WebCore::toV8):
        * bindings/v8/custom/V8EntryCustom.cpp:
        (WebCore::toV8):
        * bindings/v8/custom/V8EntrySyncCustom.cpp:
        (WebCore::toV8):
        * bindings/v8/custom/V8EventCustom.cpp:
        (WebCore::toV8):
        * bindings/v8/custom/V8Float32ArrayCustom.cpp:
        (WebCore::toV8):
        * bindings/v8/custom/V8Float64ArrayCustom.cpp:
        (WebCore::toV8):
        * bindings/v8/custom/V8HTMLCollectionCustom.cpp:
        (WebCore::toV8):
        * bindings/v8/custom/V8HTMLDocumentCustom.cpp:
        (WebCore::toV8):
        * bindings/v8/custom/V8HTMLElementCustom.cpp:
        (WebCore::toV8):
        * bindings/v8/custom/V8IDBAnyCustom.cpp:
        (WebCore::toV8):
        * bindings/v8/custom/V8IDBKeyCustom.cpp:
        (WebCore::toV8):
        * bindings/v8/custom/V8ImageDataCustom.cpp:
        (WebCore::toV8):
        * bindings/v8/custom/V8Int16ArrayCustom.cpp:
        (WebCore::toV8):
        * bindings/v8/custom/V8Int32ArrayCustom.cpp:
        (WebCore::toV8):
        * bindings/v8/custom/V8Int8ArrayCustom.cpp:
        (WebCore::toV8):
        * bindings/v8/custom/V8LocationCustom.cpp:
        (WebCore::toV8):
        * bindings/v8/custom/V8NamedNodeMapCustom.cpp:
        (WebCore::toV8):
        * bindings/v8/custom/V8NodeCustom.cpp:
        (WebCore::toV8Slow):
        * bindings/v8/custom/V8SVGDocumentCustom.cpp:
        (WebCore::toV8):
        * bindings/v8/custom/V8SVGElementCustom.cpp:
        (WebCore::toV8):
        * bindings/v8/custom/V8SVGPathSegCustom.cpp:
        (WebCore::toV8):
        * bindings/v8/custom/V8ScriptProfileCustom.cpp:
        (WebCore::toV8):
        * bindings/v8/custom/V8ScriptProfileNodeCustom.cpp:
        (WebCore::toV8):
        * bindings/v8/custom/V8StyleSheetCustom.cpp:
        (WebCore::toV8):
        * bindings/v8/custom/V8Uint16ArrayCustom.cpp:
        (WebCore::toV8):
        * bindings/v8/custom/V8Uint32ArrayCustom.cpp:
        (WebCore::toV8):
        * bindings/v8/custom/V8Uint8ArrayCustom.cpp:
        (WebCore::toV8):
        * bindings/v8/custom/V8Uint8ClampedArrayCustom.cpp:
        (WebCore::toV8):
        * bindings/v8/custom/V8WorkerContextCustom.cpp:
        (WebCore::toV8):

        * bindings/scripts/test/V8/V8Float64Array.h:
        Updated run-bindings-tests results.
        (WebCore):
        (WebCore::toV8):
        * bindings/scripts/test/V8/V8TestActiveDOMObject.h:
        (WebCore::toV8):
        * bindings/scripts/test/V8/V8TestCustomNamedGetter.h:
        (WebCore::toV8):
        * bindings/scripts/test/V8/V8TestEventConstructor.h:
        (WebCore::toV8):
        * bindings/scripts/test/V8/V8TestEventTarget.h:
        (WebCore::toV8):
        * bindings/scripts/test/V8/V8TestInterface.h:
        (WebCore::toV8):
        * bindings/scripts/test/V8/V8TestMediaQueryListListener.h:
        (WebCore::toV8):
        * bindings/scripts/test/V8/V8TestNamedConstructor.h:
        (WebCore::toV8):
        * bindings/scripts/test/V8/V8TestNode.h:
        (WebCore::toV8):
        * bindings/scripts/test/V8/V8TestObj.h:
        (WebCore::toV8):
        * bindings/scripts/test/V8/V8TestSerializedScriptValueInterface.h:
        (WebCore::toV8):

2012-04-23  Michał Pakuła vel Rutka  <m.pakula@samsung.com>
        [EFL][WK2] Fix build break when non-cross platform CONTEXT_MENUS are enabled.
        https://bugs.webkit.org/show_bug.cgi?id=84136

        Reviewed by Andreas Kling.

        There was a mismatch between contextMenuItemVector declaration and definition.
        Fixed by changing PlatformMenuDescription for EFL port by adding a const modifier.

        No new tests required.

        * platform/PlatformMenuDescription.h:
        (WebCore): Added const modifier to PlatformMenuDescription definition.

2012-04-23  Pierre Rossi  <pierre.rossi@gmail.com>

        [Qt] Ensure zero-width space effectively accounts for a width of zero.
        https://bugs.webkit.org/show_bug.cgi?id=84595

        Reviewed by Simon Hausmann.

        The logic so far relies on FontCache::getFontDataForCharacters to
        return a valid fontData in the case where the fonts specified don't
        have a glyph for the zero-width space character.
        QTextLayout::glyphRuns simply ignores characters that don't render in
        the glyph runs it returns, so we need to ensure that the subsequent
        call to platformWidthForGlyph doesn't lead to a non-zero width.

        Covered by tests containing control characters such as
        a soft-hyphen like it's the case in:
        svg/as-image/img-preserveAspectRatio-support-1.html

        * platform/graphics/qt/SimpleFontDataQt.cpp:
        (WebCore::SimpleFontData::platformWidthForGlyph):

2012-04-23  Ian Vollick  <vollick@chromium.org>

        [chromium] When prepareToDraw fails due to animation checkerboard, we need to call setNeedsCommit
        https://bugs.webkit.org/show_bug.cgi?id=84520

        Reviewed by Adrienne Walker.

        Tested in CCLayerTreeHostImplTest.prepareToDrawFailsWhenAnimationUsesCheckerboard

        * platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:
        (WebCore::CCLayerTreeHostImpl::prepareToDraw):

2012-04-23  Alexis Menard  <alexis.menard@openbossa.org>

        Simplify CSSParser::parseFont.
        https://bugs.webkit.org/show_bug.cgi?id=78698

        Reviewed by Antti Koivisto.

        Simplify parseFont by sharing the code we have for
        the longhands of the font property.

        No new tests : Extend the existing font shorthand test and modify expected files
        as now the order of the longhands added in the property list of the style
        has changed. It's very unlikely that some code is relying on this order though. It will
        also match the way the spec order them http://www.w3.org/TR/css3-fonts/#font-prop
        even though the order is arbitrary for some values.

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):
        (WebCore::CSSParser::parseFont):
        (WebCore::CSSParser::parseLineHeight):
        (WebCore):
        (WebCore::CSSParser::parseFontSize):
        (WebCore::CSSParser::parseFontWeight):  Fix a bug discovered while using parseFontWeight from
        the parseFont (case font: 0/0, Arial, sans-serif; in a layout test), we should return true only
        when we add something in the property list.
        * css/CSSParser.h:

2012-04-23  Yury Semikhatsky  <yurys@chromium.org>

        Web Inspector: improve the way heap snapshot diff is calculated
        https://bugs.webkit.org/show_bug.cgi?id=84590

        Diff calculation now consists of the following steps:
        1. Collect data about nodes in the base heap snapshot
        2. Pass it to the second snapshot.
        3. Calculate delta for each class.

        Reviewed by Pavel Feldman.

        * inspector/front-end/HeapSnapshot.js:
        (WebInspector.HeapSnapshot):
        (WebInspector.HeapSnapshot.prototype.dispose):
        (WebInspector.HeapSnapshot.prototype.aggregatesForDiff):
        (WebInspector.HeapSnapshot.prototype.calculateSnapshotDiff):
        (WebInspector.HeapSnapshot.prototype._calculateDiffForClass):
        (WebInspector.HeapSnapshot.prototype.createAddedNodesProvider):
        (WebInspector.HeapSnapshot.prototype.createDeletedNodesProvider):
        * inspector/front-end/HeapSnapshotDataGrids.js:
        (WebInspector.HeapSnapshotDiffDataGrid.prototype._populateChildren.aggregatesForDiffReceived.didCalculateSnapshotDiff):
        (WebInspector.HeapSnapshotDiffDataGrid.prototype._populateChildren):
        * inspector/front-end/HeapSnapshotGridNodes.js:
        (WebInspector.HeapSnapshotIteratorsTuple):
        (WebInspector.HeapSnapshotDiffNode):
        (WebInspector.HeapSnapshotDiffNode.prototype._createChildNode):
        (WebInspector.HeapSnapshotDiffNode.prototype._createNodesProvider):
        * inspector/front-end/HeapSnapshotProxy.js:
        (WebInspector.HeapSnapshotProxy.prototype.aggregatesForDiff):
        (WebInspector.HeapSnapshotProxy.prototype.calculateSnapshotDiff):
        (WebInspector.HeapSnapshotProxy.prototype.createAddedNodesProvider):
        (WebInspector.HeapSnapshotProxy.prototype.createDeletedNodesProvider):
        * inspector/front-end/HeapSnapshotView.js:
        (WebInspector.HeapSnapshotView.prototype._changeBase):

2012-04-23  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: Rename and extract UISourceCodeImpl into JavaScriptSource
        https://bugs.webkit.org/show_bug.cgi?id=84587

        Reviewed by Yury Semikhatsky.

        No changes other than extraction here. This is the first step in the Resource
        hierarchy refactoring described in bug 84586.

        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * inspector/compile-front-end.py:
        * inspector/front-end/CompilerScriptMapping.js:
        (WebInspector.CompilerScriptMapping.prototype.addScript):
        * inspector/front-end/DebuggerPresentationModel.js:
        * inspector/front-end/JavaScriptSource.js: Added.
        (WebInspector.JavaScriptSource):
        (WebInspector.JavaScriptSource.prototype.breakpoints):
        (WebInspector.JavaScriptSource.prototype.breakpointAdded):
        (WebInspector.JavaScriptSource.prototype.breakpointRemoved):
        (WebInspector.JavaScriptSource.prototype.consoleMessages):
        (WebInspector.JavaScriptSource.prototype.consoleMessageAdded):
        (WebInspector.JavaScriptSource.prototype.consoleMessagesCleared):
        * inspector/front-end/RawSourceCode.js:
        (WebInspector.RawSourceCode.prototype._createUISourceCode):
        * inspector/front-end/SnippetsModel.js:
        (WebInspector.SnippetsScriptMapping.prototype._snippetAdded):
        (WebInspector.SnippetsScriptMapping.prototype._createUISourceCodeForScript):
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/inspector.html:

2012-04-23  Gavin Peters  <gavinp@chromium.org>

        Move ReferrerPolicy out of SecurityPolicy class into its own header in platform.
        https://bugs.webkit.org/show_bug.cgi?id=84516

        Reviewed by Adam Barth.

        No change in behaviour; same enum, different class.

        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.exp.in:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/Document.cpp:
        (WebCore::Document::Document):
        (WebCore::Document::processReferrerPolicy):
        * dom/Document.h:
        (WebCore::Document::referrerPolicy):
        (Document):
        * page/SecurityPolicy.h:
        * platform/ReferrerPolicy.h: Added.
        (WebCore):

2012-04-23  Vineet Chaudhary  <rgf748@motorola.com>

        JS binding code generator doesn't handle "attribute unsigned long[]" well
        https://bugs.webkit.org/show_bug.cgi?id=84540

        Reviewed by Kentaro Hara.

        Codegenerator should handle spaces with the sequence<> to support
        numeric types like "unsigned long", "int" .. etc. and primitive types
        like "boolean", "Date" etc.

        Tests: bindings/scripts/test/TestObj.idl

        * bindings/scripts/CodeGenerator.pm:
        (SkipIncludeHeader): Rename AvoidInclusionOfType to SkipIncludeHeader.
        (GetArrayType):
        * bindings/scripts/CodeGeneratorJS.pm:
        (AddIncludesForType):
        (NativeToJSValue):
        * bindings/scripts/CodeGeneratorObjC.pm:
        (AddIncludesForType):
        (GenerateImplementation):
        * bindings/scripts/CodeGeneratorV8.pm:
        (AddIncludesForType):
        (GetHeaderClassInclude):
        (GenerateNormalAttrGetter):
        (NativeToJSValue):
        * bindings/scripts/IDLStructure.pm:
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore):
        (WebCore::jsTestObjIntSequenceAttr):
        (WebCore::jsTestObjShortSequenceAttr):
        (WebCore::jsTestObjLongSequenceAttr):
        (WebCore::jsTestObjLongLongSequenceAttr):
        (WebCore::jsTestObjUnsignedIntSequenceAttr):
        (WebCore::jsTestObjUnsignedShortSequenceAttr):
        (WebCore::jsTestObjUnsignedLongSequenceAttr):
        (WebCore::jsTestObjUnsignedLongLongSequenceAttr):
        (WebCore::jsTestObjFloatSequenceAttr):
        (WebCore::jsTestObjDoubleSequenceAttr):
        (WebCore::jsTestObjBooleanSequenceAttr):
        (WebCore::jsTestObjVoidSequenceAttr):
        (WebCore::jsTestObjDateSequenceAttr):
        (WebCore::setJSTestObjSequenceAttr):
        (WebCore::setJSTestObjIntSequenceAttr):
        (WebCore::setJSTestObjShortSequenceAttr):
        (WebCore::setJSTestObjLongSequenceAttr):
        (WebCore::setJSTestObjLongLongSequenceAttr):
        (WebCore::setJSTestObjUnsignedIntSequenceAttr):
        (WebCore::setJSTestObjUnsignedShortSequenceAttr):
        (WebCore::setJSTestObjUnsignedLongSequenceAttr):
        (WebCore::setJSTestObjUnsignedLongLongSequenceAttr):
        (WebCore::setJSTestObjFloatSequenceAttr):
        (WebCore::setJSTestObjDoubleSequenceAttr):
        (WebCore::setJSTestObjBooleanSequenceAttr):
        (WebCore::setJSTestObjVoidSequenceAttr):
        (WebCore::setJSTestObjDateSequenceAttr):
        * bindings/scripts/test/JS/JSTestObj.h:
        (WebCore):
        * bindings/scripts/test/ObjC/DOMTestObj.h:
        * bindings/scripts/test/TestObj.idl:
        * bindings/scripts/test/V8/V8TestObj.cpp:
        (WebCore::TestObjV8Internal::intSequenceAttrAttrGetter):
        (TestObjV8Internal):
        (WebCore::TestObjV8Internal::intSequenceAttrAttrSetter):
        (WebCore::TestObjV8Internal::shortSequenceAttrAttrGetter):
        (WebCore::TestObjV8Internal::shortSequenceAttrAttrSetter):
        (WebCore::TestObjV8Internal::longSequenceAttrAttrGetter):
        (WebCore::TestObjV8Internal::longSequenceAttrAttrSetter):
        (WebCore::TestObjV8Internal::longLongSequenceAttrAttrGetter):
        (WebCore::TestObjV8Internal::longLongSequenceAttrAttrSetter):
        (WebCore::TestObjV8Internal::unsignedIntSequenceAttrAttrGetter):
        (WebCore::TestObjV8Internal::unsignedIntSequenceAttrAttrSetter):
        (WebCore::TestObjV8Internal::unsignedShortSequenceAttrAttrGetter):
        (WebCore::TestObjV8Internal::unsignedShortSequenceAttrAttrSetter):
        (WebCore::TestObjV8Internal::unsignedLongSequenceAttrAttrGetter):
        (WebCore::TestObjV8Internal::unsignedLongSequenceAttrAttrSetter):
        (WebCore::TestObjV8Internal::unsignedLongLongSequenceAttrAttrGetter):
        (WebCore::TestObjV8Internal::unsignedLongLongSequenceAttrAttrSetter):
        (WebCore::TestObjV8Internal::floatSequenceAttrAttrGetter):
        (WebCore::TestObjV8Internal::floatSequenceAttrAttrSetter):
        (WebCore::TestObjV8Internal::doubleSequenceAttrAttrGetter):
        (WebCore::TestObjV8Internal::doubleSequenceAttrAttrSetter):
        (WebCore::TestObjV8Internal::booleanSequenceAttrAttrGetter):
        (WebCore::TestObjV8Internal::booleanSequenceAttrAttrSetter):
        (WebCore::TestObjV8Internal::voidSequenceAttrAttrGetter):
        (WebCore::TestObjV8Internal::voidSequenceAttrAttrSetter):
        (WebCore::TestObjV8Internal::dateSequenceAttrAttrGetter):
        (WebCore::TestObjV8Internal::dateSequenceAttrAttrSetter):
        (WebCore):

2012-04-23  Andreas Kling  <kling@webkit.org>

        Unreviewed assertion fix for Chromium bots.

        Skip unnecessary Attr::attachToElement() after constructing an Attr using the
        constructor that attaches to an Element.

        * dom/ElementAttributeData.cpp:
        (WebCore::ElementAttributeData::ensureAttr):

2012-04-23  Andreas Kling  <kling@webkit.org>

        REGRESSION(r114870): Assertion failure in ElementAttributeData::setAttr().
        <http://webkit.org/b/84581>

        Reviewed by Antti Koivisto.

        Attach the Attr and bump m_attrCount manually in ensureAttr() instead of calling
        setAttr(). The latter asserts that the Attr isn't present in the map, which
        obviously isn't true after we've just added it.

        This has the added effect of removing one unnecessary hash lookup.

        * dom/ElementAttributeData.cpp:
        (WebCore::ElementAttributeData::ensureAttr):

2012-04-23  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: make ParsedURL.prototype.displayName data url friendly.
        https://bugs.webkit.org/show_bug.cgi?id=84578

        Reviewed by Yury Semikhatsky.

        We'd like to define valid URL as the one that has scheme, host and path.
        We can append to this URL and manipulate its content. We still want 
        possibly invalid specs (such as data or about) to exist and have nice
        display names.

        * inspector/front-end/ResourceUtils.js:
        (WebInspector.ParsedURL):
        (WebInspector.ParsedURL.prototype.get displayName):

2012-04-23  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: introduce String.prototype.starts/endsWith and use it all over the place.
        https://bugs.webkit.org/show_bug.cgi?id=84574

        Reviewed by Yury Semikhatsky.

        * inspector/front-end/AuditRules.js:
        (WebInspector.AuditRules.VendorPrefixedCSSProperties.prototype.visitProperty):
        * inspector/front-end/BreakpointsSidebarPane.js:
        (WebInspector.EventListenerBreakpointsSidebarPane.prototype._setBreakpoint):
        (WebInspector.EventListenerBreakpointsSidebarPane.prototype._removeBreakpoint):
        * inspector/front-end/CSSCompletions.js:
        (WebInspector.CSSCompletions.prototype.startsWith):
        (WebInspector.CSSCompletions.prototype._firstIndexOfPrefix):
        * inspector/front-end/ConsoleView.js:
        (WebInspector.ConsoleView.prototype._reportCompletions):
        * inspector/front-end/CookieItemsView.js:
        (WebInspector.Cookies.cookieMatchesResourceURL):
        * inspector/front-end/DatabaseQueryView.js:
        (WebInspector.DatabaseQueryView.prototype.completions):
        * inspector/front-end/ElementsTreeOutline.js:
        (WebInspector.ElementsTreeElement.prototype._buildAttributeDOM):
        * inspector/front-end/ProfileView.js:
        * inspector/front-end/ProfilesPanel.js:
        (WebInspector.ProfilesPanel.prototype.addProfileHeader):
        (WebInspector.ProfilesPanel.prototype.displayTitleForProfileLink):
        (WebInspector.ProfileSidebarTreeElement):
        (WebInspector.ProfileSidebarTreeElement.prototype.get mainTitle):
        * inspector/front-end/ResourceUtils.js:
        (WebInspector.ParsedURL):
        (WebInspector.displayNameForURL):
        (WebInspector.linkifyStringAsFragmentWithCustomLinkifier):
        (WebInspector.completeURL):
        * inspector/front-end/SnippetsModel.js:
        (WebInspector.SnippetsModel.prototype.snippetIdForSourceURL):
        * inspector/front-end/SourceCSSTokenizer.js:
        (WebInspector.SourceCSSTokenizer.prototype.nextToken):
        * inspector/front-end/SourceCSSTokenizer.re2js:
        * inspector/front-end/TextPrompt.js:
        (WebInspector.TextPrompt.prototype._completeCommonPrefix):
        * inspector/front-end/UIUtils.js:
        (WebInspector.startEditing):
        * inspector/front-end/utilities.js:

2012-04-23  Andreas Kling  <kling@webkit.org>

        REGRESSION(r114870): Performance hit on DOM/CloneNodes and DOM/CreateNodes.
        <http://webkit.org/b/84575>

        Reviewed by Antti Koivisto.

        Simplify the cloning of Attributes from one Element to another by simply
        assigning to m_attributes. This avoids default-constructing a bunch of
        Attribute objects that we overwrite immediately anyway (this used to be
        fine because they were RefPtr<Attribute> but now that a default-constructed
        Attribute contains a QualifiedName, we were doing a bunch of extra hash
        lookups, etc.)

        * dom/ElementAttributeData.cpp:
        (WebCore::ElementAttributeData::setAttributes):

2012-04-20  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: implement "open stylesheet" dialog.
        https://bugs.webkit.org/show_bug.cgi?id=84466

        Reviewed by Yury Semikhatsky.

        This change introduces abstract OpenResourceDialog and re-uses it in OpenScriptDialog and OpenStylesheetDialog.
        Drive-by fix for data: url representation in the navigator and open resource dialogs.

        * inspector/front-end/FilteredItemSelectionDialog.js:
        (WebInspector.FilteredItemSelectionDialog.prototype.position):
        (WebInspector.OpenResourceDialog.filterOutEmptyURLs):
        (WebInspector.OpenResourceDialog.compareFunction):
        (WebInspector.OpenResourceDialog):
        (WebInspector.OpenResourceDialog.prototype.itemTitleAt):
        (WebInspector.OpenResourceDialog.prototype.itemKeyAt):
        (WebInspector.OpenResourceDialog.prototype.itemsCount):
        (WebInspector.OpenResourceDialog.prototype.requestItems):
        (WebInspector.OpenResourceDialog.prototype.selectItem):
        (WebInspector.OpenScriptDialog):
        (WebInspector.OpenScriptDialog.install):
        (WebInspector.OpenScriptDialog._show):
        (WebInspector.OpenScriptDialog.prototype.selectItem):
        * inspector/front-end/ResourceUtils.js:
        (WebInspector.ParsedURL):
        * inspector/front-end/ScriptsPanel.js:
        * inspector/front-end/StylesPanel.js:
        (WebInspector.StylesPanel):
        (WebInspector.StylesPanel.prototype._showOpenStylesheetDialog):
        (WebInspector.OpenStylesheetDialog):
        (WebInspector.OpenStylesheetDialog.prototype.selectItem):
        * inspector/front-end/inspector.html:

2012-04-23  Kent Tamura  <tkent@chromium.org>

        Add test function to get placeholder string
        https://bugs.webkit.org/show_bug.cgi?id=84536

        Reviewed by Ryosuke Niwa.

        Add window.internals.visiblePlaceholder(element), which returns a
        placeholder string only when it's visible.

        * WebCore.exp.in: Expose HTMLTextFormControlElement::placeholderShouldBeVisible().
        * testing/Internals.cpp:
        (WebCore::Internals::visiblePlaceholder): Added.
        (WebCore::Internals::selectColorInColorChooser): Omit HTMLNames::.
        * testing/Internals.h:
        (Internals): Add visiblePlaceholder().
        * testing/Internals.idl: ditto.

2012-04-23  Szilard Ledan  <szledan@inf.u-szeged.hu>

        Incorrect handling of CSS escape sequences that encode surrogates
        https://bugs.webkit.org/show_bug.cgi?id=76152

        Reviewed by Kent Tamura.

        Test: fast/css/parsing-css-surrogate-pairs.html

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

2012-04-22  Yury Semikhatsky  <yurys@chromium.org>

        Web Inspector: make populateChildren methods private in heap profiler front-end
        https://bugs.webkit.org/show_bug.cgi?id=84562

        - populateChildren method on HeapSnapshotConstructorsDataGrid and
        HeapSnapshotDiffDataGrid now is private.
        - Made _defaultPopulateCount a public method on HeapSnapshotSortableDataGrid which
        is overriden in some descendants
        - Removed unused HeapSnapshotPathFinderProxy
        - added closure compiler annotations

        Reviewed by Pavel Feldman.

        * inspector/front-end/HeapSnapshotDataGrids.js:
        (WebInspector.HeapSnapshotSortableDataGrid.prototype.defaultPopulateCount):
        (WebInspector.HeapSnapshotConstructorsDataGrid.prototype.setDataSource):
        (WebInspector.HeapSnapshotConstructorsDataGrid.prototype._filterSelectIndexChanged):
        (WebInspector.HeapSnapshotDiffDataGrid.prototype.defaultPopulateCount):
        (WebInspector.HeapSnapshotDiffDataGrid.prototype.setBaseDataSource):
        (WebInspector.HeapSnapshotDominatorsDataGrid.prototype.defaultPopulateCount):
        * inspector/front-end/HeapSnapshotGridNodes.js:
        (WebInspector.HeapSnapshotGridNode):
        (WebInspector.HeapSnapshotGridNode.prototype.populateChildren.callSerialize):
        (WebInspector.HeapSnapshotDiffNode):
        (WebInspector.HeapSnapshotDiffNode.prototype.populateChildren.firstProviderPopulated):
        * inspector/front-end/HeapSnapshotProxy.js:

2012-04-22  Andreas Kling  <kling@webkit.org>

        Unreviewed build fix, remove Attribute.cpp from DOMAllInOne.cpp.

        * dom/DOMAllInOne.cpp: My nemesis.

2012-04-22  Andreas Kling  <kling@webkit.org>

        Optimize Element attribute storage for the common case (no Attr objects.)
        <http://webkit.org/b/83440>

        Reviewed by Antti Koivisto.

        Reduce Attribute to its smallest possible size; a qname/value pair.
        They are no-longer ref-counted, which allows us to store them in Vectors.

        Refactored the DOM Attr object to go with the new Attribute:
        Attr now wraps either {element, qname} or {qname, value}. The latter is for
        the case where a standalone Attr object is instantiated via DOM APIs.

        ElementAttributeData.cpp manages a map of pair<element, qname> => Attr.
        Each Element (well, ElementAttributeData) keeps track of how many Attr
        objects are pointing to it. This is so we can avoid hash lookups during
        common operations in the typical case where you have zero Attrs.

        Also removed the inline capacity (was 4) from AttributeVector as that
        would significantly increase bloat now that we store Attribute (2 pointers)
        rather than RefPtr<Attribute>. We trade this one piece of indirection
        for the removal of per-Attribute indirection.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/Attr.cpp:
        (WebCore::Attr::Attr):
        (WebCore):
        (WebCore::Attr::create):
        (WebCore::Attr::~Attr):
        (WebCore::Attr::createTextChild):
        (WebCore::Attr::setPrefix):
        (WebCore::Attr::setValue):
        (WebCore::Attr::cloneNode):
        (WebCore::Attr::childrenChanged):
        (WebCore::Attr::style):
        (WebCore::Attr::value):
        (WebCore::Attr::elementAttribute):
        (WebCore::Attr::detachFromElementWithValue):
        (WebCore::Attr::attachToElement):
        * dom/Attr.h:
        (WebCore):
        (Attr):
        (WebCore::Attr::qualifiedName):
        (WebCore::Attr::localName):
        (WebCore::Attr::namespaceURI):
        (WebCore::Attr::prefix):
        * dom/Attribute.cpp: Removed.
        * dom/Attribute.h:
        (WebCore::Attribute::Attribute):
        (Attribute):
        * dom/Document.cpp:
        (WebCore::Document::importNode):
        (WebCore::Document::createAttributeNS):
        * dom/Element.cpp:
        (WebCore::Element::~Element):
        (WebCore::Element::detachAttribute):
        (WebCore):
        (WebCore::Element::removeAttribute):
        (WebCore::Element::setAttributeInternal):
        (WebCore::Element::parserSetAttributes):
        (WebCore::Element::setAttributeNode):
        (WebCore::Element::removeAttributeNode):
        (WebCore::Element::normalizeAttributes):
        (WebCore::Element::didRemoveAttribute):
        (WebCore::Element::attrIfExists):
        (WebCore::Element::ensureAttr):
        * dom/Element.h:
        (Element):
        (WebCore::Element::getAttributeItemIndex):
        * dom/ElementAttributeData.cpp:
        (WebCore):
        (WebCore::attrMap):
        (WebCore::ElementAttributeData::attrIfExists):
        (WebCore::ElementAttributeData::ensureAttr):
        (WebCore::ElementAttributeData::setAttr):
        (WebCore::ElementAttributeData::removeAttr):
        (WebCore::AttributeVector::removeAttribute):
        (WebCore::ElementAttributeData::~ElementAttributeData):
        (WebCore::ElementAttributeData::addAttribute):
        (WebCore::ElementAttributeData::removeAttribute):
        (WebCore::ElementAttributeData::isEquivalent):
        (WebCore::ElementAttributeData::detachAttributesFromElement):
        (WebCore::ElementAttributeData::getAttributeItemIndexSlowCase):
        (WebCore::ElementAttributeData::setAttributes):
        (WebCore::ElementAttributeData::clearAttributes):
        (WebCore::ElementAttributeData::replaceAttribute):
        (WebCore::ElementAttributeData::getAttributeNode):
        * dom/ElementAttributeData.h:
        (WebCore):
        (WebCore::AttributeVector::AttributeVector):
        (AttributeVector):
        (WebCore::AttributeVector::getAttributeItem):
        (WebCore::AttributeVector::getAttributeItemIndex):
        (WebCore::AttributeVector::insertAttribute):
        (WebCore::ElementAttributeData::attributeItem):
        (ElementAttributeData):
        (WebCore::ElementAttributeData::ElementAttributeData):
        (WebCore::ElementAttributeData::attributeVector):
        (WebCore::ElementAttributeData::clonedAttributeVector):
        (WebCore::ElementAttributeData::removeAttribute):
        (WebCore::ElementAttributeData::getAttributeItem):
        (WebCore::ElementAttributeData::getAttributeItemIndex):
        * dom/NamedNodeMap.cpp:
        (WebCore::NamedNodeMap::getNamedItem):
        (WebCore::NamedNodeMap::getNamedItemNS):
        (WebCore::NamedNodeMap::removeNamedItem):
        (WebCore::NamedNodeMap::removeNamedItemNS):
        (WebCore::NamedNodeMap::item):
        * dom/Node.cpp:
        (WebCore::Node::compareDocumentPosition):
        * html/HTMLAnchorElement.cpp:
        (WebCore::HTMLAnchorElement::parseAttribute):
        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::parseAttribute):
        * html/parser/HTMLConstructionSite.cpp:
        (WebCore::HTMLConstructionSite::insertHTMLHtmlStartTagBeforeHTML):
        (WebCore::HTMLConstructionSite::mergeAttributesFromTokenIntoElement):
        (WebCore::HTMLConstructionSite::insertScriptElement):
        (WebCore::HTMLConstructionSite::createElement):
        (WebCore::HTMLConstructionSite::createHTMLElement):
        (WebCore::HTMLConstructionSite::createHTMLElementFromSavedElement):
        * html/parser/HTMLToken.h:
        (WebCore::AtomicHTMLToken::AtomicHTMLToken):
        * html/parser/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::processFakeStartTag):
        (WebCore::HTMLTreeBuilder::attributesForIsindexInput):
        (WebCore::HTMLTreeBuilder::processIsindexStartTagForInBody):
        (WebCore):
        (WebCore::HTMLTreeBuilder::processStartTagForInBody):
        * html/parser/HTMLTreeBuilder.h:
        * html/parser/TextDocumentParser.cpp:
        (WebCore::TextDocumentParser::insertFakePreElement):
        * page/PageSerializer.cpp:
        (WebCore::SerializerMarkupAccumulator::appendCustomAttributes):
        * svg/SVGFitToViewBox.cpp:
        * svg/properties/SVGAnimatedPropertySynchronizer.h:
        * xml/XMLErrors.cpp:
        (WebCore::createXHTMLParserErrorHeader):
        (WebCore::XMLErrors::insertErrorMessageBlock):
        * xml/XPathNodeSet.cpp:
        (WebCore::XPath::NodeSet::traversalSort):
        * xml/XPathStep.cpp:
        (WebCore::XPath::Step::nodesInAxis):
        * xml/parser/MarkupTokenBase.h:
        (WebCore::AtomicMarkupTokenBase::AtomicMarkupTokenBase):
        (WebCore::AtomicMarkupTokenBase::getAttributeItem):
        (WebCore::AtomicMarkupTokenBase::attributes):
        (AtomicMarkupTokenBase):
        (WebCore::::initializeAttributes):
        * xml/parser/XMLToken.h:
        (WebCore::AtomicXMLToken::AtomicXMLToken):
        * xml/parser/XMLTreeBuilder.cpp:
        (WebCore::XMLTreeBuilder::processNamespaces):
        (WebCore::XMLTreeBuilder::processAttributes):

2012-04-22  Sriram Neelakandan  <sriram.neelakandan@gmail.com>

        Sync the MOZ_X11 changes from r14 of http://code.google.com/p/npapi-sdk/
        also, modified required build flags for Qt,Gtk and CMake
        [Qt]  Added MOZ_X11 build flag for !embedded
        https://bugs.webkit.org/show_bug.cgi?id=40785

        Reviewed by Anders Carlsson.

        No new tests. This does not change functionality. Affects all X11 Ports. Build should break if MOZ_X11 is not passed where required

        * WebCore.pri:
        * plugins/npapi.h:

2012-04-22  Pablo Flouret  <pablof@motorola.com>

        Reset event propagation and canceled flags in Event.initEvent
        https://bugs.webkit.org/show_bug.cgi?id=83964

        Reviewed by Ryosuke Niwa.

        Step 3 in http://dvcs.w3.org/hg/domcore/raw-file/tip/Overview.html#dom-event-initevent
        Useful for re-configuring an event before dispatching.

        Test: fast/events/flags-unset-on-init-event.html

        * dom/Event.cpp:
        (WebCore::Event::initEvent):

2012-04-22  Martin Robinson  <mrobinson@igalia.com>

        [Cairo] Implement CompositeDifference
        https://bugs.webkit.org/show_bug.cgi?id=77354

        Reviewed by Alejandro G. Castro.

        No new tests. The difference compositing operator are not exposed
        to web content, so this change is simply in preparation for a time
        in which it is used.

        Properly map the difference compositing blend modes to a Cairo operator.

        * platform/graphics/cairo/CairoUtilities.cpp:
        (WebCore::toCairoOperator): Add a mapping for difference. Remove
        code supporting versions of Cairo before 1.10, since the Cairo backend
        requires 1.10 or greater already.

2012-04-22  Jon Lee  <jonlee@apple.com>

        Remove notifications support on Mac Lion.
        https://bugs.webkit.org/show_bug.cgi?id=84554
        <rdar://problem/11297128>

        Reviewed by Sam Weinig.

        * Configurations/FeatureDefines.xcconfig:

2012-04-22  Shawn Singh  <shawnsingh@chromium.org>

        [chromium] Damage Tracker needs to use CCMathUtil transforms
        https://bugs.webkit.org/show_bug.cgi?id=84070

        Reviewed by Adrienne Walker.

        Unit test added to CCDamageTracker.cpp.

        This patch makes CCDamageTracker use CCMathUtil transforms, so
        that perspective w < 0 problem is correctly handled.

        * platform/graphics/chromium/cc/CCDamageTracker.cpp:
        (WebCore::CCDamageTracker::extendDamageForLayer):
        (WebCore::CCDamageTracker::extendDamageForRenderSurface):

2012-04-20  Jon Lee  <jonlee@apple.com>

        Add Notification constructor
        https://bugs.webkit.org/show_bug.cgi?id=80477
        <rdar://problem/10912431>

        Reviewed by Jian Li.

        Tests will be added once there is support for web notifications on the Mac ports.

        * WebCore.exp.in: Export finalize() function.

        Modify Dictionary to support creation of event listeners.
        * bindings/js/Dictionary.h:
        (WebCore::Dictionary::isObject): Return true if the JSDictionary is valid.
        (WebCore::Dictionary::isUndefinedOrNull): Return true if the JSDictionary is not valid.
        (WebCore::Dictionary::get): Add convenience function to take const char* for
        property name, to prevent having to do implicit conversion to WTF::String.
        (WebCore::Dictionary::getEventListener): Add function to create event listener
        from the dictionary.
        (WebCore::Dictionary::asJSObject): Helper to convert WebCore objects to JS wrapper.
        * bindings/js/Dictionary.cpp:
        (WebCore::Notification): Implement asJSObject() for Notification.
        * bindings/js/JSDictionary.h:
        (WebCore::JSDictionary::execState): Expose the exec state so that the Dictionary
        can obtain its world for creating the event listener.

        * bindings/v8/Dictionary.h:
        (WebCore::Dictionary::getEventListener): Stub implementation.

        Add new constructor to idl definitions.
        * notifications/DOMWindowNotifications.idl: Add Notification constructor, if
        ENABLE(NOTIFICATIONS) is on.
        * notifications/Notification.idl: If ENABLE(NOTIFICATIONS) is turned on, define
        the constructor. Otherwise, use OmitConstructor.
        * notifications/NotificationCenter.idl: Wrap creation functions in
        ENABLE(LEGACY_NOTIFICATIONS).
        * notifications/NotificationCenter.h: Ditto.
        (NotificationCenter):

        * notifications/Notification.h:
        (Notification): Wrap legacy constructors in ENABLE(LEGACY_NOTIFICATIONS).
        (WebCore::Notification::create): New creation function based on discussions in WG.
        * notifications/Notification.cpp:
        (WebCore::getAndAddEventListener): Helper function to get the listener from the
        dictionary, and attach to the notification.
        (WebCore::Notification::create): Create the notification, then apply whatever
        properties can be found in the dictionary to the notification. In order to
        attach the event listeners, the notification has to have been created, which is
        why this all happens in the factory method and not in the constructor.
        (WebCore::Notification::setBody): Added so that it can be set if we find it in the
        dictionary.

        The new constructor queues a task to show when it is created. To support this, we
        use a one-shot timer that calls show() in the next iteration of the run loop.
        (WebCore::Notification::Notification): Start the timer.
        (WebCore::Notification::showTaskTimerFired): Call show().

        Notifications, not being attached to the DOM, could be GC'ed by the JS engine
        before its life cycle has completed. We add calls to setPendingActivity() when the
        notification has been shown, and when it is closed, we unsetPendingActivity().
        To guarantee that we only call this once, we add a new state to the Notification
        state machine, called NotificationState::Closed.
        (WebCore::Notification::show): Call setPendingActivity() for all ports. Remove conditional on Mac.
        (WebCore::Notification::close): Include Closed state to machine; do nothing.
        (WebCore::Notification::dispatchCloseEvent): Call finalize().
        (WebCore::Notification::finalize): If the state is not Closed, we unsetPendingActivity()
        to make it available for GC.
        (WebCore::Notification::finishLoading): Remove the unsetPendingActivity(). That call
        was to balance the setPendingActivity() called for loading the icon. Instead of wrapping
        around the icon load, we wrap around the show() -> finalize() loop.

        In Notification, rename some of the stages and functions to more clearly communicate
        that they mostly deal with the icon of the notification, instead of general loading.
        (WebCore::Notification::show): Refactored to use LoadingIcon and CancelledIcon.
        (WebCore::Notification::close): Refactored to use LoadingIcon and CancelledIcon.
        (WebCore::Notification::~Notification): Refactor to use LoadingIcon.
        (WebCore::Notification::startLoadingIcon): Renamed from startLoading().
        (WebCore::Notification::stopLoadingIcon): Renamed from stopLoading().
        (WebCore::Notification::finishLoadingIcon): Renamed from finishLoading().
        (WebCore::Notification::didFinishLoading):
        (WebCore::Notification::didFail):
        (WebCore::Notification::didFailRedirectCheck):
        (WebCore::Notification::didReceiveResponse):
        (WebCore::Notification::finishLoading):

        Add Dictionary.cpp.
        * GNUmakefile.list.am:
        * Target.pri:
        * UseJSC.cmake:
        * WebCore.gypi:

        Fix bug in V8 bindings generation code. If the constructor doesn't raise an exception,
        don't use an exception code.
        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateParametersCheck):
        * bindings/scripts/test/V8/V8TestObj.cpp: Reset results.
        (WebCore::TestObjV8Internal::optionsObjectCallback):

2012-04-21  Benjamin C Meyer  <bmeyer@rim.com>

        Support loading the same plugin in multiple locations in the Blackberry port.
        https://bugs.webkit.org/show_bug.cgi?id=84537

        The hash for the plugin is only based upon the plugin meta information
        which will be the same for the same plugin in the system and user's
        plugin folders.

        It looks like this code was copied/based on the windows port
        which doesn't allow the same plugin to be loaded more than once.

        Because we want to support multiple copies of the same plugin
        in the blackberry port we want to incorperate the path of the plugin
        into the hash.

        PR 150404

        Reviewed by Adam Treat.

        * plugins/blackberry/PluginPackageBlackBerry.cpp:
        (WebCore::PluginPackage::hash):

2012-04-21  Benjamin C Meyer  <bmeyer@rim.com>

        System plugins are preferred over application plugins
        https://bugs.webkit.org/show_bug.cgi?id=84538

        Set the preferred paths for plugins so that plugins that reside
        inside of the bar will be preferred over plugins that are in the
        system folder.

        PR 150404

        Reviewed by Adam Treat.

        * plugins/PluginDatabase.cpp:
        (WebCore::PluginDatabase::isPreferredPluginDirectory):

2012-04-21  Darin Adler  <darin@apple.com>

        Improve performance of removing user and password from URLs
        https://bugs.webkit.org/show_bug.cgi?id=84525

        Reviewed by Dan Bernstein.

        Performance improvement only. Correctness covered by existing regression tests.

        The most common use of KURL::setUser and KURL::setPass, by far, is to remove
        the user and password from a URL that already has neither. Optimize this by
        not re-parsing the URL in that case.

        * platform/KURL.cpp:
        (WebCore::KURL::setUser): Restructure code so that the code path that removes
        the user does no work when there is nothing to remove. Otherwise, leave the
        logic of the function untouched.
        (WebCore::KURL::setPass): Same thing, only for password rather than user.

2012-04-20  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r114768.
        http://trac.webkit.org/changeset/114768
        https://bugs.webkit.org/show_bug.cgi?id=84521

        Original patch was not the problem, re-applying (Requested by
        pfeldman_ on #webkit).

        * bindings/v8/V8IsolatedContext.cpp:
        (WebCore::setInjectedScriptContextDebugId):
        (WebCore):
        (WebCore::V8IsolatedContext::V8IsolatedContext):
        * bindings/v8/V8Proxy.cpp:
        (WebCore::V8Proxy::evaluateInIsolatedWorld):
        * bindings/v8/V8Proxy.h:
        (V8Proxy):

2012-04-20  Adrienne Walker  <enne@google.com>

        [chromium] Refactor opaque content transform out of Skia context
        https://bugs.webkit.org/show_bug.cgi?id=83608

        Reviewed by James Robinson.

        Having PlatformContextSkia know about the transform into content space
        for a layer is a layering violation. This change lets the
        PlatformContextSkia deal with opaque rects in its own space and lets
        the caller handle transforming it into its own space. This also
        prevents a matrix multiply per draw into the Skia canvas and does it
        just once at the end to transform the final rect.

        This is an incremental refactoring so that additional tracking for
        text rects can be added and use the same space as opaque rects.

        Tests: LayerTextureUpdaterTest.testPartialOpaqueRectNoTransform
               LayerTextureUpdaterTest.testPartialOpaqueRectTranslation
               LayerTextureUpdaterTest.testPartialOpaqueRectScale

        * platform/graphics/chromium/BitmapCanvasLayerTextureUpdater.cpp:
        (WebCore::BitmapCanvasLayerTextureUpdater::prepareToUpdate):
        * platform/graphics/chromium/BitmapCanvasLayerTextureUpdater.h:
        (BitmapCanvasLayerTextureUpdater):
        * platform/graphics/chromium/BitmapSkPictureCanvasLayerTextureUpdater.cpp:
        (WebCore::BitmapSkPictureCanvasLayerTextureUpdater::prepareToUpdate):
        * platform/graphics/chromium/BitmapSkPictureCanvasLayerTextureUpdater.h:
        (BitmapSkPictureCanvasLayerTextureUpdater):
        * platform/graphics/chromium/CanvasLayerTextureUpdater.cpp:
        (WebCore::CanvasLayerTextureUpdater::paintContents):
        * platform/graphics/chromium/CanvasLayerTextureUpdater.h:
        (CanvasLayerTextureUpdater):
        * platform/graphics/chromium/LayerTextureUpdater.h:
        (WebCore::LayerTextureUpdater::prepareToUpdate):
        * platform/graphics/chromium/SkPictureCanvasLayerTextureUpdater.cpp:
        (WebCore::SkPictureCanvasLayerTextureUpdater::prepareToUpdate):
        * platform/graphics/chromium/SkPictureCanvasLayerTextureUpdater.h:
        (SkPictureCanvasLayerTextureUpdater):
        * platform/graphics/chromium/TiledLayerChromium.cpp:
        (WebCore::TiledLayerChromium::updateTiles):
        * platform/graphics/skia/OpaqueRegionSkia.cpp:
        (WebCore::OpaqueRegionSkia::didDrawRect):
        (WebCore::OpaqueRegionSkia::didDrawPath):
        (WebCore::OpaqueRegionSkia::didDrawPoints):
        (WebCore::OpaqueRegionSkia::didDrawBounded):
        (WebCore::OpaqueRegionSkia::didDraw):
        * platform/graphics/skia/OpaqueRegionSkia.h:
        (OpaqueRegionSkia):
        * platform/graphics/skia/PlatformContextSkia.cpp:
        (WebCore::PlatformContextSkia::didDrawRect):
        (WebCore::PlatformContextSkia::didDrawPath):
        (WebCore::PlatformContextSkia::didDrawPoints):
        (WebCore::PlatformContextSkia::didDrawBounded):
        * platform/graphics/skia/PlatformContextSkia.h:
        (PlatformContextSkia):

2012-04-20  Enrica Casucci  <enrica@apple.com>

        CRASH at WebCore::ReplaceSelectionCommand::removeRedundantMarkup
        https://bugs.webkit.org/show_bug.cgi?id=84518
        <rdar://problem/10714790>

        Reviewed by Simon Fraser.

        There are cases where the m_lastNodeInserted is NULL to begin with or
        gets deleted by removeRedundantStylesAndKeepStyleSpanInline.
        This change handles those cases properly.
        
        Tests: editing/pasteboard/paste-sanitize-crash-1.html
               editing/pasteboard/paste-sanitize-crash-2.html

        * editing/ReplaceSelectionCommand.h:
        (WebCore::ReplaceSelectionCommand::InsertedNodes::pastLastLeaf):
        * editing/SimplifyMarkupCommand.cpp:
        (WebCore::SimplifyMarkupCommand::doApply):

2012-04-20  Michael Nordman  <michaeln@google.com>

        [chromium] Tiny change to DomStorage v8 bindings to avoid a relatively expensive test in a couple
        of places by reordering the expressions in compound conditions, if (fastTest && moreExpensiveTest)
        https://bugs.webkit.org/show_bug.cgi?id=84500

        Reviewed by Kentaro Hara.

        No new tests, no new functionality.

        * bindings/v8/custom/V8StorageCustom.cpp:
        (WebCore::storageGetter):
        (WebCore::V8Storage::namedPropertyQuery):

2012-04-20  Dan Bernstein  <mitz@apple.com>

        REGRESSION (r114784): svg/text/foreignObject-text-clipping-bug.xml failing on Mountain Lion Debug Tests
        https://bugs.webkit.org/show_bug.cgi?id=84505

        Reviewed by Anders Carlsson.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::blockBeforeWithinSelectionRoot): Changed to not assume that boxes only
        have boxes as siblings.

2012-04-20  Dana Jansens  <danakj@chromium.org>

        [chromium] Remove special case for recreating layers during sync
        https://bugs.webkit.org/show_bug.cgi?id=84458

        Reviewed by James Robinson.

        We no longer delete layers on the impl side, unless it is due to
        deleting the layer on webkit side. So we will no longer have a
        situation where we need to push properties from an old
        LayerChromium to a new CCLayerImpl.

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

2012-04-20  Dana Jansens  <danakj@chromium.org>

        [chromium] WebFilterOperations API does not compile or dynamically link
        https://bugs.webkit.org/show_bug.cgi?id=84506

        Reviewed by James Robinson.

        Non-inline functions need WEBKIT_EXPORT in their declarations,
        and the type used in the WebPrivateOwnPtr needs to be forward-
        declared even when WEBKIT_IMPLEMENTATION is not defined.

        * platform/chromium/support/WebFilterOperations.cpp:
        (WebKit::WebFilterOperations::initialize):

2012-04-20  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r114333.
        http://trac.webkit.org/changeset/114333
        https://bugs.webkit.org/show_bug.cgi?id=84511

        perf regression (Requested by morrita on #webkit).

        * dom/Node.cpp:
        * dom/Node.h:
        (WebCore):
        (Node):
        (WebCore::Node::isElementNode):
        (WebCore::Node::isContainerNode):
        (WebCore::Node::isTextNode):
        (WebCore::Node::isHTMLElement):
        (WebCore::Node::isSVGElement):
        (WebCore::Node::isStyledElement):
        (WebCore::Node::isShadowRoot):
        (WebCore::Node::parentNode):
        (WebCore::Node::parentNodeGuaranteedHostFree):

2012-04-20  Alec Flett  <alecflett@chromium.org>

        IndexedDB: Support get/getKey(keyRange)
        https://bugs.webkit.org/show_bug.cgi?id=83638

        Reviewed by Ojan Vafai.

        Support IDBKeyRange as a parameter to all the various get/getKey 
        combinations. Switches the existing get/getKey versions that use 
        IDBKey directly to start using IDBKeyRange.only(). 

        Test: storage/indexeddb/get-keyrange.html

        * Modules/indexeddb/IDBIndex.cpp:
        (WebCore::IDBIndex::get):
        (WebCore):
        (WebCore::IDBIndex::getKey):
        * Modules/indexeddb/IDBIndex.h:
        (IDBIndex):
        * Modules/indexeddb/IDBIndex.idl:
        * Modules/indexeddb/IDBIndexBackendImpl.cpp:
        (WebCore::IDBIndexBackendImpl::getInternal):
        (WebCore):
        (WebCore::IDBIndexBackendImpl::getByRangeInternal):
        (WebCore::IDBIndexBackendImpl::getKeyInternal):
        (WebCore::IDBIndexBackendImpl::getKeyByRangeInternal):
        (WebCore::IDBIndexBackendImpl::get):
        (WebCore::IDBIndexBackendImpl::getKey):
        * Modules/indexeddb/IDBIndexBackendImpl.h:
        (IDBIndexBackendImpl):
        * Modules/indexeddb/IDBIndexBackendInterface.h:
        (IDBIndexBackendInterface):
        * Modules/indexeddb/IDBObjectStore.cpp:
        (WebCore::IDBObjectStore::get):
        (WebCore):
        * Modules/indexeddb/IDBObjectStore.h:
        (IDBObjectStore):
        * Modules/indexeddb/IDBObjectStore.idl:
        * Modules/indexeddb/IDBObjectStoreBackendImpl.cpp:
        (WebCore):
        (WebCore::IDBObjectStoreBackendImpl::get):
        (WebCore::IDBObjectStoreBackendImpl::getByRangeInternal):
        (WebCore::IDBObjectStoreBackendImpl::getInternal):
        * Modules/indexeddb/IDBObjectStoreBackendImpl.h:
        (IDBObjectStoreBackendImpl):
        * Modules/indexeddb/IDBObjectStoreBackendInterface.h:
        (IDBObjectStoreBackendInterface):

2012-04-20  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r114789.
        http://trac.webkit.org/changeset/114789
        https://bugs.webkit.org/show_bug.cgi?id=84515

        Caused 5 tests to fail on mac/ (Requested by jernoble on
        #webkit).

        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        * css/CSSValueKeywords.in:
        * platform/ThemeTypes.h:
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::paint):

2012-04-20  Brady Eidson  <beidson@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=84512
        Repurpose ActiveDOMObject::WillShowDialog to WillDeferLoading

        Reviewed by Eric Carlson.

        No new tests. (Refactor, no behavior change)

        Rename WillShowDialog to WillDeferLoading:
        * dom/ActiveDOMObject.h:
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::suspend):

        Don't take a ReasonForSuspension argument anymore, just use WillDeferLoading:
        * page/PageGroupLoadDeferrer.cpp:
        (WebCore::PageGroupLoadDeferrer::PageGroupLoadDeferrer):
        * page/PageGroupLoadDeferrer.h:

        Don't pass a Reason anymore as WillDeferLoading is used by default:
        * page/Chrome.cpp:
        (WebCore::Chrome::runModal):
        (WebCore::Chrome::runBeforeUnloadConfirmPanel):
        (WebCore::Chrome::runJavaScriptAlert):
        (WebCore::Chrome::runJavaScriptConfirm):
        (WebCore::Chrome::runJavaScriptPrompt):
        (WebCore::Chrome::shouldInterruptJavaScript):

2012-04-20  James Robinson  <jamesr@chromium.org>

        [chromium] Plumb a compositor surface ready notification through to the threaded compositor
        https://bugs.webkit.org/show_bug.cgi?id=84305

        Reviewed by Adrienne Walker.

        Plumb setSurfaceReady through to the scheduler.

        * platform/graphics/chromium/cc/CCLayerTreeHost.cpp:
        (WebCore::CCLayerTreeHost::setSurfaceReady):
        (WebCore):
        * platform/graphics/chromium/cc/CCLayerTreeHost.h:
        (CCLayerTreeHost):
        * platform/graphics/chromium/cc/CCProxy.h:
        (CCProxy):
        * platform/graphics/chromium/cc/CCSingleThreadProxy.cpp:
        (WebCore::CCSingleThreadProxy::setSurfaceReady):
        (WebCore):
        * platform/graphics/chromium/cc/CCSingleThreadProxy.h:
        (CCSingleThreadProxy):
        * platform/graphics/chromium/cc/CCThreadProxy.cpp:
        (WebCore::CCThreadProxy::setSurfaceReady):
        (WebCore):
        (WebCore::CCThreadProxy::setSurfaceReadyOnImplThread):
        (WebCore::CCThreadProxy::initializeImplOnImplThread):
        * platform/graphics/chromium/cc/CCThreadProxy.h:
        (CCThreadProxy):

2012-04-20  Mark Pilgrim  <pilgrim@chromium.org>

        [Chromium] Call memoryUsageMB directly
        https://bugs.webkit.org/show_bug.cgi?id=84376

        Reviewed by Kentaro Hara.

        Now that memoryUsageMB has been moved from PlatformSupport.h to
        Platform.h, we need to be able to call it directly
        from WebCore/bindings/v8/V8GCController.cpp.
        That means we need a new MemoryUsageSupport class in
        WebCore/platform/ and an implementation in
        WebCore/platform/chromium/MemoryUsageSupportChromium.cpp.
        Other ports are welcome to implement their memory usage
        functions if they wish. This pattern was based on the
        HistogramSupport/HistogramSupportChromium classes.

        Part of a refactoring series. See tracking bug 82948.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/v8/V8GCController.cpp:
        (WebCore):
        * platform/MemoryUsageSupport.cpp: Added.
        (WebCore):
        (WebCore::MemoryUsageSupport::memoryUsageMB):
        * platform/MemoryUsageSupport.h: Added.
        (WebCore):
        (MemoryUsageSupport):
        * platform/chromium/MemoryUsageSupportChromium.cpp: Added.
        (WebCore):
        (WebCore::MemoryUsageSupport::memoryUsageMB):
        * platform/chromium/PlatformSupport.h:
        (PlatformSupport):

2012-04-20  Anders Carlsson  <andersca@apple.com>

        Re-land. The non-fast scrollable region is now always updated after layout, and frameViewScrollableAreasDidChange has been removed.

        computeNonFastScrollableRegion needs to traverse the entire frame tree
        https://bugs.webkit.org/show_bug.cgi?id=84409
        <rdar://problem/11285741>

        Reviewed by Dan Bernstein.

        Now that scrollable areas won't be in the set of scrollable areas unless they are actually scrollable, we need to look for scrollable
        areas in the entire frame tree since there can be a scrollable frame that's a subframe of a non-scrollable frame for example.

        * page/scrolling/ScrollingCoordinator.cpp:
        (WebCore::computeNonFastScrollableRegion):
        (WebCore::ScrollingCoordinator::frameViewLayoutUpdated):

2012-04-20  Adrienne Walker  <enne@google.com>

        [chromium] Clip TransparencyWin to prevent OOM from large Skia canvas
        https://bugs.webkit.org/show_bug.cgi?id=84289

        Reviewed by James Robinson.

        TransparencyWin will create a Skia canvas of whatever size is passed
        in, even if the result will ultimately be clipped. Handle the clip
        implicitly and try (in some cases) to create a smaller canvas. This
        can happen due to RenderBox::paintBoxDecorations passing a paint rect
        down of the entire element's size.

        Modes with more complicated transforms (ScaleTransform, UnTransform)
        are not handled yet.

        Tests: TransparencyWin.ClippedKeepTransformNoLayer
               TransparencyWin.ClippedKeepTransformOpaqueCompositeLayer
               TransparencyWin.ClippedKeepTransformOpaqueWhiteLayer

        * platform/graphics/chromium/TransparencyWin.cpp:
        (WebCore::TransparencyWin::computeLayerSize):

2012-04-04  Jer Noble  <jer.noble@apple.com>

        apple.com top navigation bar appears inside video during full screen exit animation
        https://bugs.webkit.org/show_bug.cgi?id=83095

        Reviewed by Eric Carlson.

        Test: fullscreen/full-screen-exit-animation-stacking-context.html

        Only tell ancestors of the full screen element that they are no longer ancestors once
        the full screen animation is complete:
        * dom/Document.cpp:
        (WebCore::Document::webkitWillExitFullScreenForElement):
        (WebCore::Document::webkitDidExitFullScreenForElement):

        To facilitate writing reproducible LayoutTests, expose webkitWill/Did/Enter/ExitFullScreen
        from the Internals object, so scripts can call them explicitly:
        * testing/Internals.cpp:
        (WebCore::Internals::webkitWillEnterFullScreenForElement): Call the Document equivalent.
        (WebCore::Internals::webkitDidEnterFullScreenForElement): Ditto.
        (WebCore::Internals::webkitWillExitFullScreenForElement): Ditto.
        (WebCore::Internals::webkitDidExitFullScreenForElement): Ditto.
        * testing/Internals.h:
        * testing/Internals.idl:

2012-04-17  Jer Noble  <jer.noble@apple.com>

        media-exit-fullscreen-button (and related enums) is unnecessary and should be removed.
        https://bugs.webkit.org/show_bug.cgi?id=84162

        Reviewed by Eric Carlson.

        No new tests; no change in functionality so covered by existing tests.

        Remove the media-exit-fullscreen-button keyword, and rename media-enter-fullscreen-button to
        media-fullscreen-button.

        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        * css/CSSValueKeywords.in:
        * css/mediaControls.css:
        (audio::-webkit-media-controls-fullscreen-button, video::-webkit-media-controls-fullscreen-button):
        * platform/ThemeTypes.h:
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::paint):

2012-04-20  Alexandre Elias  <aelias@google.com>

        [chromium] Fix compile errors when DEBUG_GL_CALLS is enabled
        https://bugs.webkit.org/show_bug.cgi?id=84491

        Reviewed by Ojan Vafai.

        DEBUG_GL_CALLS had not been used in a while and the mode no longer
        compiled when I tried it.  I improved the GLC macro to support either
        raw pointers or RefPtrs, and to be a single expression in order to
        interact properly with if/else blocks.  I fixed the cases where we
        were passing in the "context" method pointer by mistake, and removed the
        now-unnecessary "get()" calls for the RefPtrs.

        No new tests. (No-op change in release builds.)

        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::initialize):
        (WebCore::LayerRendererChromium::clearRenderSurface):
        (WebCore::LayerRendererChromium::beginDrawingFrame):
        (WebCore::LayerRendererChromium::doNoOp):
        (WebCore::LayerRendererChromium::drawQuad):
        (WebCore::LayerRendererChromium::drawTextureQuad):
        (WebCore::LayerRendererChromium::drawHeadsUpDisplay):
        (WebCore::LayerRendererChromium::finishDrawingFrame):
        (WebCore::LayerRendererChromium::useRenderSurface):
        (WebCore::LayerRendererChromium::bindFramebufferToTexture):
        (WebCore::LayerRendererChromium::setScissorToRect):
        (WebCore::LayerRendererChromium::setDrawViewportRect):
        (WebCore::LayerRendererChromium::initializeSharedObjects):
        (WebCore::LayerRendererChromium::cleanupSharedObjects):
        * platform/graphics/chromium/LayerRendererChromium.h:
        (WebCore):

2012-04-20  Anders Carlsson  <andersca@apple.com>

        Fix build.

        * page/scrolling/ScrollingCoordinator.cpp:
        (WebCore::ScrollingCoordinator::updateMainFrameScrollPositionAndScrollLayerPosition):

2012-04-19  Simon Fraser  <simon.fraser@apple.com>

        Set m_compositingDependsOnGeometry to false if possible
        https://bugs.webkit.org/show_bug.cgi?id=84391

        Reviewed by James Robinson.
        
        For some kinds of elements, RenderLayerCompositor has to delay decisions about
        compositing until the element's size and/or position are known. This was previsouly
        based on the confusingly named m_compositingDependsOnGeometry flag, but another
        variant of the same technique, with an additional flag m_compositingNeedsUpdate,
        was added in r98627.
        
        Also, once the m_compositingDependsOnGeometry flag was set to true, nothing
        set it to false, so every compositing layer update resulted in a computeCompositingRequirements()
        pass over the layers.
        
        Rename the m_compositingDependsOnGeometry flag to m_reevaluateCompositingAfterLayout,
        and clear the flag when we do a layout-related compositing layer update.
        Use the same flag for position:fixed compositing.
        
        This requires RenderLayerCompositor to distinguish between style- and layout-
        related updates, requiring some minor refactoring in FrameView.

        Should not change behavior.
        
        * dom/Document.cpp:
        (WebCore::Document::recalcStyle):
        (WebCore::Document::implicitClose):
        * page/FrameView.cpp:
        (WebCore::FrameView::updateCompositingLayersAfterStyleChange):
        (WebCore::FrameView::updateCompositingLayersAfterLayout):
        (WebCore::FrameView::restoreBackingStores):
        (WebCore::FrameView::layout):
        * page/FrameView.h:
        (FrameView):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::RenderLayerCompositor):
        (WebCore::RenderLayerCompositor::updateCompositingLayersTimerFired):
        (WebCore::RenderLayerCompositor::updateCompositingLayers):
        (WebCore::RenderLayerCompositor::layerTreeAsText):
        (WebCore::RenderLayerCompositor::requiresCompositingForPlugin):
        (WebCore::RenderLayerCompositor::requiresCompositingForFrame):
        (WebCore::RenderLayerCompositor::requiresCompositingForPosition):
        * rendering/RenderLayerCompositor.h:
        (RenderLayerCompositor):

2012-04-20  Dan Bernstein  <mitz@apple.com>

        <rdar://problem/10786000> Selection highlights of lines in adjoining blocks can overlap
        https://bugs.webkit.org/show_bug.cgi?id=84489

        Reviewed by Anders Carlsson.

        Test: fast/block/line-layout/selection-highlight-overlap.html

        * rendering/EllipsisBox.cpp:
        (WebCore::EllipsisBox::selectionRect): Changed to use
        selection{Top,Height}AdjustedForPrecedingBlock().
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::paintSelection): Ditto.
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::inlineSelectionGaps): Ditto.
        (WebCore::RenderBlock::blockBeforeWithinSelectionRoot): Added. Returns the block which is
        likely to contain the selected line just before the first line in this block, if it is
        within the same selection root.
        * rendering/RenderBlock.h:
        * rendering/RootInlineBox.cpp:
        (WebCore::RootInlineBox::selectionTopAdjustedForPrecedingBlock): Added. If the selection
        starts before our block, finds the last line in the preceding block and adjusts the selection
        top to avoid overlap with that line’s selection bottom.
        * rendering/RootInlineBox.h:
        (WebCore::RootInlineBox::selectionHeightAdjustedForPrecedingBlock): Added. Like
        selectionHeight(), but uses selectionTopAdjustedForPrecedingBlock().

2012-04-20  Xianzhu Wang  <wangxianzhu@chromium.org>

        Crash in getOrDrawNodeHighlight after r114659
        https://bugs.webkit.org/show_bug.cgi?id=84486

        Reviewed by Daniel Bates.

        No new tests. Fixes a crash in test: inspector/elements/elements-panel-selection-on-refresh.html.

        * inspector/DOMNodeHighlighter.cpp:

2012-04-20  Brady Eidson  <beidson@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=84490
        PageGroupLoadDeferrer needs to take a ReasonForSuspension argument

        Reviewed by Anders Carlsson.

        No new tests. (Refactor, no change in behavior)

        - Make PageGroupLoadDeferrer take a ReasonForSuspension argument so it can pass it along.
        * page/PageGroupLoadDeferrer.cpp:
        (WebCore::PageGroupLoadDeferrer::PageGroupLoadDeferrer):
        * page/PageGroupLoadDeferrer.h:

        - Change suspendScheduledTasks to take a ReasonForSuspension.
        - As long as we're changing Document.h, add a m_suspendedScheduledTasks flag and some
          ASSERTs to catch what would be epically wrong behavior in the future.
        * dom/Document.cpp:
        (WebCore::Document::Document):
        (WebCore::Document::suspendScheduledTasks):
        (WebCore::Document::resumeScheduledTasks):
        * dom/Document.h:

        - Pass ActiveDOMObject::WillShowDialog along to all PageGroupLoadDeferrers, as it used
          to be the default behavior
        * page/Chrome.cpp:
        (WebCore::Chrome::runModal):
        (WebCore::Chrome::runBeforeUnloadConfirmPanel):
        (WebCore::Chrome::runJavaScriptAlert):
        (WebCore::Chrome::runJavaScriptConfirm):
        (WebCore::Chrome::runJavaScriptPrompt):
        (WebCore::Chrome::shouldInterruptJavaScript):

2012-04-20  Anders Carlsson  <andersca@apple.com>

        Scrolling after going to a find-in-page result jumps to the top of the page
        https://bugs.webkit.org/show_bug.cgi?id=84485
        <rdar://problem/11273734>

        Reviewed by Beth Dakin.

        If we're both updating the requested scroll position and entering slow mode in the same commit, the
        probable main thread scroll position should be the requested scroll position.

        * page/scrolling/mac/ScrollingTreeNodeMac.mm:
        (WebCore::ScrollingTreeNodeMac::update):

2012-04-20  James Robinson  <jamesr@chromium.org>

        Avoid synchronously recalculating the nonFastScrollableRegion when the ScrollableArea set changes
        https://bugs.webkit.org/show_bug.cgi?id=84470

        Reviewed by Anders Carlsson.

        When a scrollable area is added or removed, we shouldn't recalculate the nonFastScrollableRegion synchronously
        since this is slow, the RenderObject tree might not be in an up-to-date state, and we'll typically do layout
        soon anyway.

        * page/FrameView.cpp:
        (WebCore::FrameView::addScrollableArea):
        (WebCore::FrameView::removeScrollableArea):
        * page/scrolling/ScrollingCoordinator.cpp:
        * page/scrolling/ScrollingCoordinator.h:
        (ScrollingCoordinator):

2012-04-20  Emil A Eklund  <eae@chromium.org>

        Fix use of LayoutUnits in DOMNodeHighlighter
        https://bugs.webkit.org/show_bug.cgi?id=84472

        Reviewed by Eric Seidel.

        Fix use of subpixel units and rounding in new code introduced in r114659.

        No new tests, no change in functionality.

        * inspector/DOMNodeHighlighter.cpp:

2012-04-17  Antonio Gomes  <agomes@rim.com>

        Relax ScrollView::adjustScrollPositionWithinRange in case constrainsScrollingToContentEdge is false
        https://bugs.webkit.org/show_bug.cgi?id=84178

        Reviewed by Adam Treat.

        No new tests since it is not easily testable.

        When a port has both delegatesScrolling and constrainsScrollingToContentEdge set to FALSE
        (i.e. it accepts overscrolled position), calling ScrollView::setScrollPosition with an overscrolled
        position still gets the position clamped to the content size edges.

        Patch relaxes ::adjustScrollPositionWithinRange in that sense in order to track the actual scroll
        position.

        Note: ScrollView::setScrollOffset already does something similar.

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

2012-04-20  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r114535.
        http://trac.webkit.org/changeset/114535
        https://bugs.webkit.org/show_bug.cgi?id=84475

        It might have caused V8 crashes. (Requested by pfeldman_ on
        #webkit).

        * bindings/v8/V8IsolatedContext.cpp:
        (WebCore::V8IsolatedContext::V8IsolatedContext):
        * bindings/v8/V8Proxy.cpp:
        (WebCore::V8Proxy::evaluateInIsolatedWorld):
        (WebCore::V8Proxy::setInjectedScriptContextDebugId):
        (WebCore):
        * bindings/v8/V8Proxy.h:
        (V8Proxy):

2012-04-20  Dean Jackson  <dino@apple.com>

        -webkit-filter missing from computed style enumeration
        https://bugs.webkit.org/show_bug.cgi?id=84468

        Reviewed by Timothy Hatcher.
        
        CSSComputedStyleDeclaration has a list of properties that it exposes.
        While the computed style for filter was available, the property wasn't
        listed and hence missing in clients like the Web Inspector.

        Covered by existing tests.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore): add CSSPropertyWebkitFilter

2012-04-20  Emil A Eklund  <eae@chromium.org>

        [win] Update windows platform code to use pixel snapped values
        https://bugs.webkit.org/show_bug.cgi?id=84283

        Reviewed by Eric Seidel.

        No new tests, no change in functionality.

        * accessibility/AccessibilityObject.h:
        (WebCore::AccessibilityObject::pixelSnappedElementRect):
        Use pixel snapped values when computing screenRect.
        
        * platform/win/PopupMenuWin.cpp:
        (WebCore::PopupMenuWin::calculatePositionAndSize):
        (WebCore::PopupMenuWin::paint):
        Cast client padding to ints as they are guaranteed to align with device pixels.

2012-04-20  Dana Jansens  <danakj@chromium.org>

        [chromium] Some filters require inflating damage rect in CCDamageTracker
        https://bugs.webkit.org/show_bug.cgi?id=84373

        Reviewed by James Robinson.

        When a layer is blurred, damaged pixels are blurred out into a radius
        and their damage should be expanded to include total blurred region.

        Unit test: CCDamageTrackerTest.verifyDamageForBlurredSurface

        * platform/graphics/chromium/cc/CCDamageTracker.cpp:
        (WebCore::CCDamageTracker::updateDamageTrackingState):
        (WebCore::CCDamageTracker::expandDamageRectWithForegroundFilters):
        (WebCore):
        * platform/graphics/chromium/cc/CCDamageTracker.h:
        (WebCore):
        (CCDamageTracker):
        * platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:
        (WebCore::CCLayerTreeHostImpl::trackDamageForAllSurfaces):

2012-04-20  Sami Kyostila  <skyostil@chromium.org>

        [chromium] Don't crash when scrolling empty layer tree
        https://bugs.webkit.org/show_bug.cgi?id=84455

        Reviewed by James Robinson.

        Do not try to calculate render passes when there are no layers in the
        layer tree.

        Added new unit test.

        * platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:
        (WebCore::CCLayerTreeHostImpl::calculateRenderPasses):

2012-04-20  Victor Carbune  <vcarbune@adobe.com>

        Ensure text is centered for default captions
        https://bugs.webkit.org/show_bug.cgi?id=84450

        Reviewed by Eric Carlson.

        Updated existing test.

        * html/track/TextTrackCue.cpp:
        (WebCore::TextTrackCue::getDisplayTree): Added default width.

2012-04-20  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: open file dialog is not centered.
        https://bugs.webkit.org/show_bug.cgi?id=84464

        Reviewed by Yury Semikhatsky.

        There was an error in the positioning logic.

        * inspector/front-end/FilteredItemSelectionDialog.js:
        (WebInspector.FilteredItemSelectionDialog.prototype.position):

2012-04-20  Allan Sandfeld Jensen  <allan.jensen@nokia.com>

        [Qt] PlatformMouseEventQt.cpp should be deleted.
        https://bugs.webkit.org/show_bug.cgi?id=84437

        Reviewed by Kenneth Rohde Christiansen.

        * platform/qt/PlatformMouseEventQt.cpp: Removed.

2012-04-20  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: follow up to r114729: more @return annotations added.
        https://bugs.webkit.org/show_bug.cgi?id=84447

        Reviewed by Yury Semikhatsky.

        * inspector/front-end/Resource.js:
        (WebInspector.Resource):
        (WebInspector.ResourceRevision.prototype.get content):
        * inspector/front-end/ResourceTreeModel.js:
        (WebInspector.ResourceTreeFrame.prototype._addRequest):
        * inspector/front-end/ResourceUtils.js:
        (String.prototype.asParsedURL):

2012-04-20  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: migrate from ScriptsNavigator to NavigatorView in the Styles panel
        https://bugs.webkit.org/show_bug.cgi?id=84459

        Reviewed by Yury Semikhatsky.

        Now that NavigatorView has all the functionality we need, we can use it.

        * inspector/front-end/NavigatorView.js:
        (WebInspector.NavigatorScriptTreeElement.prototype.ondblclick):
        * inspector/front-end/ScriptsNavigator.js:
        (WebInspector.ScriptsNavigator):
        * inspector/front-end/StylesPanel.js:
        (WebInspector.StylesPanel):
        (WebInspector.StylesPanel.prototype._resourceAdded):
        (WebInspector.StylesPanel.prototype._reset):
        (WebInspector.StylesPanel.prototype._itemSelected):
        (WebInspector.StylesPanel.prototype._showFile):
        * inspector/front-end/navigatorView.css:
        (.navigator-tabbed-pane .tabbed-pane-content):
        (.navigator-tabbed-pane .navigator-container):
        (.navigator-tabbed-pane .navigator):
        (.navigator-tabbed-pane .tabbed-pane-header):
        (.navigator-tabbed-pane .tabbed-pane-header-contents):
        * inspector/front-end/scriptsPanel.css:

2012-04-20  Sam D  <dsam2912@gmail.com>

        Web Inspector: Does not have search navigation button for going through matches in either direction (prev, next)
        https://bugs.webkit.org/show_bug.cgi?id=84235

        Added buttons for navigating on seiarch matches in inspector panel
        through button clicks as well. 

        Reviewed by Pavel Feldman.

        No new tests / ux enhanced for search functionality

        * English.lproj/localizedStrings.js:
        * WebCore.gypi:
        * inspector/front-end/Images/searchNext.png: Added.
        * inspector/front-end/Images/searchPrev.png: Added.
        * inspector/front-end/SearchController.js:
        (WebInspector.SearchController):
        (WebInspector.SearchController.prototype._updateSearchNavigationButtonState):
        (WebInspector.SearchController.prototype._updateSearchMatchesCountAndCurrentMatchIndex):
        (WebInspector.SearchController.prototype._onNextButtonSearch):
        (WebInspector.SearchController.prototype._onPrevButtonSearch):
        (WebInspector.SearchController.prototype._performSearch):
        (WebInspector.SearchController.prototype._createSearchNavigationButton):
        (WebInspector.SearchController.prototype._populateSearchNavigationButtons):
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/inspector.css:
        (.toolbar-search-item):
        (#search):
        (#toolbar-search-navigation-control):
        (.toolbar-search-navigation-label):
        (.toolbar-search-navigation-label:hover):
        (.toolbar-search-navigation-icon-prev , .toolbar-search-navigation-icon-next):
        (.toolbar-search-navigation-icon-prev):
        (.toolbar-search-navigation-icon-next):
        * inspector/front-end/inspector.html:

2012-04-20  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: extract NavigatorView and NavigatorOverlayController from ScriptsNavigator.
        https://bugs.webkit.org/show_bug.cgi?id=84441

        Reviewed by Yury Semikhatsky.

        - Moves NavigatorOverlayController out of ScriptsNavigator
        - Extracts NavigatorView from ScriptsNavigator and makes ScriptsNavigator contain 3 NavigatorView instances (one per tab)
        - Subclasses SnippetsNavigatorView and leaves it within ScriptsNavigator.

        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * inspector/compile-front-end.py:
        * inspector/front-end/NavigatorOverlayController.js: Added.
        (WebInspector.NavigatorOverlayController.prototype.wasShown):
        (WebInspector.NavigatorOverlayController.prototype._createNavigatorControlButton):
        (WebInspector.NavigatorOverlayController.prototype._escDownWhileNavigatorOverlayOpen):
        (WebInspector.NavigatorOverlayController.prototype._toggleNavigator):
        (WebInspector.NavigatorOverlayController.prototype._hidePinnedNavigator):
        (WebInspector.NavigatorOverlayController.prototype.set _pinNavigator):
        (WebInspector.NavigatorOverlayController.prototype.set showNavigatorOverlay):
        (WebInspector.NavigatorOverlayController.prototype.hideNavigatorOverlay):
        (WebInspector.NavigatorOverlayController.prototype._navigatorOverlayWasShown):
        * inspector/front-end/NavigatorView.js: Added.
        (WebInspector.NavigatorView):
        (WebInspector.NavigatorView.prototype._updateScriptTitle.get if):
        (WebInspector.NavigatorView.prototype._updateScriptTitle):
        (WebInspector.NavigatorView.prototype._scriptSelected):
        (WebInspector.NavigatorView.prototype._removeUISourceCode.get while):
        (WebInspector.NavigatorView.prototype._removeUISourceCode):
        (WebInspector.NavigatorView.prototype._showScriptFoldersSettingChanged):
        (WebInspector.NavigatorView.prototype._fileRenamed):
        (WebInspector.NavigatorView.prototype.rename.commitHandler):
        (WebInspector.NavigatorView.prototype.rename.cancelHandler):
        (WebInspector.NavigatorView.prototype.rename.afterEditing):
        (WebInspector.NavigatorView.prototype.reset):
        (WebInspector.NavigatorView.prototype.createFolderTreeElement):
        (WebInspector.NavigatorView.prototype.getOrCreateFolderTreeElement):
        (WebInspector.NavigatorView.prototype.handleContextMenu):
        (WebInspector.NavigatorTreeOutline):
        (WebInspector.NavigatorTreeOutline._treeElementsCompare.compare.typeWeight):
        (WebInspector.NavigatorTreeOutline._treeElementsCompare):
        (WebInspector.NavigatorTreeOutline.prototype.scriptTreeElements):
        (WebInspector.NavigatorTreeOutline.prototype.searchStarted):
        (WebInspector.NavigatorTreeOutline.prototype.searchFinished):
        (WebInspector.BaseNavigatorTreeElement):
        (WebInspector.BaseNavigatorTreeElement.prototype.onattach):
        (WebInspector.BaseNavigatorTreeElement.prototype.onreveal):
        (WebInspector.BaseNavigatorTreeElement.prototype.get titleText):
        (WebInspector.BaseNavigatorTreeElement.prototype.set titleText):
        (WebInspector.BaseNavigatorTreeElement.prototype.matchesSearchText):
        (WebInspector.NavigatorFolderTreeElement):
        (WebInspector.NavigatorFolderTreeElement.prototype.get folderIdentifier):
        (WebInspector.NavigatorFolderTreeElement.prototype.get isDomain):
        (WebInspector.NavigatorFolderTreeElement.prototype.onattach):
        (WebInspector.NavigatorScriptTreeElement):
        (WebInspector.NavigatorScriptTreeElement.prototype.get uiSourceCode):
        (WebInspector.NavigatorScriptTreeElement.prototype.onattach):
        (WebInspector.NavigatorScriptTreeElement.prototype.onspace):
        (WebInspector.NavigatorScriptTreeElement.prototype._onclick):
        (WebInspector.NavigatorScriptTreeElement.prototype.onenter):
        (WebInspector.NavigatorScriptTreeElement.prototype._handleContextMenuEvent):
        * inspector/front-end/ScriptsNavigator.js:
        (WebInspector.ScriptsNavigator):
        (WebInspector.ScriptsNavigator.prototype.addUISourceCode):
        (WebInspector.ScriptsNavigator.prototype.isScriptSourceAdded):
        (WebInspector.ScriptsNavigator.prototype.revealUISourceCode):
        (WebInspector.ScriptsNavigator.prototype.replaceUISourceCodes):
        (WebInspector.ScriptsNavigator.prototype._scriptSelected):
        (WebInspector.ScriptsNavigator.prototype.reset):
        (WebInspector.SnippetsNavigatorView):
        (WebInspector.SnippetsNavigatorView.prototype.getOrCreateFolderTreeElement):
        (WebInspector.SnippetsNavigatorView.prototype._getOrCreateSnippetEvaluationsFolderTreeElement):
        (WebInspector.SnippetsNavigatorView.prototype.handleContextMenu):
        (WebInspector.SnippetsNavigatorView.prototype._fileRenamed):
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/inspector.html:
        * inspector/front-end/navigatorView.css: Added.
        (.navigator-domain-tree-item .icon):
        (.navigator-folder-tree-item .icon):
        (.navigator-script-tree-item .icon):
        (.navigator li):
        (.navigator :focus li.selected):
        (.navigator li.selected .selection):
        (.navigator :focus li.selected .selection):
        (.navigator .search-match-found li.selected .selection):
        (.navigator .search-match-not-found li.selected .selection):
        (.navigator .searching li.selected .selection):
        (.navigator .icon):
        (.navigator .base-navigator-tree-element-title):
        (.navigator .base-navigator-tree-element-title.editing):
        (.navigator-tree-search-box):
        (.navigator-tree-search-box.visible):
        (.navigator-tree-search-box > input):
        * inspector/front-end/scriptsPanel.css:

2012-04-19  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: make ScriptNavigatorController use views only, rename to NavigatorOverlayController.
        https://bugs.webkit.org/show_bug.cgi?id=84352

        Reviewed by Vsevolod Vlasov.

        This change makes navigator controller use view interfaces only. Focus machinery has been refactored in order
        to make it possible: now all view ancestors can either override "focus" or "defaultFocusedElement" method
        with latter method being preferred.

        * inspector/front-end/ElementsPanel.js:
        (WebInspector.ElementsPanel.prototype.defaultFocusedElement):
        * inspector/front-end/ExtensionPanel.js:
        (WebInspector.ExtensionPanel.prototype.defaultFocusedElement):
        * inspector/front-end/Panel.js:
        (WebInspector.Panel.prototype.wasShown):
        (WebInspector.Panel.prototype.defaultFocusedElement):
        * inspector/front-end/ScriptsNavigator.js:
        (WebInspector.ScriptsNavigator):
        (WebInspector.NavigatorOverlayController.prototype._hidePinnedNavigator):
        (WebInspector.NavigatorOverlayController.prototype.set _pinNavigator):
        (WebInspector.NavigatorOverlayController.prototype.set showNavigatorOverlay):
        (WebInspector.NavigatorOverlayController.prototype.hideNavigatorOverlay):
        (WebInspector.NavigatorOverlayController.prototype._navigatorOverlayWasShown):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype.defaultFocusedElement):
        * inspector/front-end/SidebarOverlay.js:
        (WebInspector.SidebarOverlay.prototype.show):
        (WebInspector.SidebarOverlay.prototype.hide):
        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame.prototype.defaultFocusedElement):
        * inspector/front-end/StylesPanel.js:
        (WebInspector.StylesPanel):
        * inspector/front-end/TabbedEditorContainer.js:
        (WebInspector.TabbedEditorContainer.prototype.get view):
        (WebInspector.TabbedEditorContainer.prototype.get visibleView):
        * inspector/front-end/TabbedPane.js:
        (WebInspector.TabbedPane):
        (WebInspector.TabbedPane.prototype.defaultFocusedElement):
        * inspector/front-end/TextViewer.js:
        (WebInspector.TextViewer.prototype.defaultFocusedElement):
        (WebInspector.TextEditorMainPanel.prototype.defaultFocusedElement):
        * inspector/front-end/TimelinePanel.js:
        (WebInspector.TimelinePanel.prototype.defaultFocusedElement):
        * inspector/front-end/View.js:
        (WebInspector.View.prototype._collectViewHierarchy):
        (WebInspector.View.prototype.defaultFocusedElement):
        (WebInspector.View.prototype.setDefaultFocusedElement):
        (WebInspector.View.prototype.focus):

2012-04-20  Sergio Villar Senin  <svillar@igalia.com>

        [GTK] Enable Web Timing
        https://bugs.webkit.org/show_bug.cgi?id=42432

        Reviewed by Gustavo Noronha Silva.

        Added WebTiming support to the GTK+ port. WebTiming allows
        developers to collect detailed network timing information per
        resource. It requires the new SoupMessage's "network-event"
        signal.

        * GNUmakefile.am:
        * bindings/gobject/GNUmakefile.am:
        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore):
        (WebCore::restartedCallback):
        (WebCore::sendRequestCallback):
        (WebCore::milisecondsSinceRequest):
        (WebCore::wroteBodyCallback):
        (WebCore::requestStartedCallback):
        (WebCore::networkEventCallback):
        (WebCore::startHTTPRequest):
        (WebCore::ResourceHandle::platformSetDefersLoading):
        (WebCore::ResourceHandle::defaultSession):

2012-04-20  'Pavel Feldman'  <pfeldman@chromium.org>

        Not reviewed: fixed chromium sanity tests for inspector via assigning last path component
        to entire url for parsed urls with invalid specs.

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

2012-04-20  Kentaro Hara  <haraken@chromium.org>

        Unreviewed, rolling out r114401.
        http://trac.webkit.org/changeset/114401
        https://bugs.webkit.org/show_bug.cgi?id=84161

        Chromium crash

        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateHeader):
        (NativeToJSValue):
        * bindings/scripts/test/V8/V8Float64Array.h:
        (WebCore):
        (WebCore::toV8):
        * bindings/scripts/test/V8/V8TestActiveDOMObject.h:
        (WebCore::toV8):
        * bindings/scripts/test/V8/V8TestCustomNamedGetter.h:
        (WebCore::toV8):
        * bindings/scripts/test/V8/V8TestEventConstructor.h:
        (WebCore::toV8):
        * bindings/scripts/test/V8/V8TestEventTarget.h:
        (WebCore::toV8):
        * bindings/scripts/test/V8/V8TestInterface.h:
        (WebCore::toV8):
        * bindings/scripts/test/V8/V8TestMediaQueryListListener.h:
        (WebCore::toV8):
        * bindings/scripts/test/V8/V8TestNamedConstructor.h:
        (WebCore::toV8):
        * bindings/scripts/test/V8/V8TestNode.h:
        (WebCore::toV8):
        * bindings/scripts/test/V8/V8TestObj.h:
        (WebCore::toV8):
        * bindings/scripts/test/V8/V8TestSerializedScriptValueInterface.h:
        (WebCore::toV8):
        * bindings/v8/custom/V8BlobCustom.cpp:
        (WebCore::toV8):
        * bindings/v8/custom/V8CSSRuleCustom.cpp:
        (WebCore::toV8):
        * bindings/v8/custom/V8CSSStyleSheetCustom.cpp:
        (WebCore::toV8):
        * bindings/v8/custom/V8CSSValueCustom.cpp:
        (WebCore::toV8):
        * bindings/v8/custom/V8CanvasPixelArrayCustom.cpp:
        (WebCore::toV8):
        * bindings/v8/custom/V8DOMStringMapCustom.cpp:
        (WebCore::toV8):
        * bindings/v8/custom/V8DOMTokenListCustom.cpp:
        (WebCore::toV8):
        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        (WebCore::toV8):
        * bindings/v8/custom/V8DataViewCustom.cpp:
        (WebCore::toV8):
        * bindings/v8/custom/V8DocumentCustom.cpp:
        (WebCore::toV8):
        * bindings/v8/custom/V8EntryCustom.cpp:
        (WebCore::toV8):
        * bindings/v8/custom/V8EntrySyncCustom.cpp:
        (WebCore::toV8):
        * bindings/v8/custom/V8EventCustom.cpp:
        (WebCore::toV8):
        * bindings/v8/custom/V8Float32ArrayCustom.cpp:
        (WebCore::toV8):
        * bindings/v8/custom/V8Float64ArrayCustom.cpp:
        (WebCore::toV8):
        * bindings/v8/custom/V8HTMLCollectionCustom.cpp:
        (WebCore::toV8):
        * bindings/v8/custom/V8HTMLDocumentCustom.cpp:
        (WebCore::toV8):
        * bindings/v8/custom/V8HTMLElementCustom.cpp:
        (WebCore::toV8):
        * bindings/v8/custom/V8IDBAnyCustom.cpp:
        (WebCore::toV8):
        * bindings/v8/custom/V8IDBKeyCustom.cpp:
        (WebCore::toV8):
        * bindings/v8/custom/V8ImageDataCustom.cpp:
        (WebCore::toV8):
        * bindings/v8/custom/V8Int16ArrayCustom.cpp:
        (WebCore::toV8):
        * bindings/v8/custom/V8Int32ArrayCustom.cpp:
        (WebCore::toV8):
        * bindings/v8/custom/V8Int8ArrayCustom.cpp:
        (WebCore::toV8):
        * bindings/v8/custom/V8LocationCustom.cpp:
        (WebCore::toV8):
        * bindings/v8/custom/V8NamedNodeMapCustom.cpp:
        (WebCore::toV8):
        * bindings/v8/custom/V8NodeCustom.cpp:
        (WebCore::toV8Slow):
        * bindings/v8/custom/V8SVGDocumentCustom.cpp:
        (WebCore::toV8):
        * bindings/v8/custom/V8SVGElementCustom.cpp:
        (WebCore::toV8):
        * bindings/v8/custom/V8SVGPathSegCustom.cpp:
        (WebCore::toV8):
        * bindings/v8/custom/V8ScriptProfileCustom.cpp:
        (WebCore::toV8):
        * bindings/v8/custom/V8ScriptProfileNodeCustom.cpp:
        (WebCore::toV8):
        * bindings/v8/custom/V8StyleSheetCustom.cpp:
        (WebCore::toV8):
        * bindings/v8/custom/V8Uint16ArrayCustom.cpp:
        (WebCore::toV8):
        * bindings/v8/custom/V8Uint32ArrayCustom.cpp:
        (WebCore::toV8):
        * bindings/v8/custom/V8Uint8ArrayCustom.cpp:
        (WebCore::toV8):
        * bindings/v8/custom/V8Uint8ClampedArrayCustom.cpp:
        (WebCore::toV8):
        * bindings/v8/custom/V8WorkerContextCustom.cpp:
        (WebCore::toV8):

2012-04-20  Kentaro Hara  <haraken@chromium.org>

        Unreviewed, rolling out r114440.
        http://trac.webkit.org/changeset/114440
        https://bugs.webkit.org/show_bug.cgi?id=84173

        Chromium crash

        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateHeader):
        * bindings/v8/custom/V8NodeCustom.cpp:
        (WebCore::toV8Slow):

2012-04-20  Kentaro Hara  <haraken@chromium.org>

        Unreviewed, rolling out r114519.
        http://trac.webkit.org/changeset/114519
        https://bugs.webkit.org/show_bug.cgi?id=84202

        Chromium crash

        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateHeader):
        * bindings/scripts/test/V8/V8Float64Array.h:
        (V8Float64Array):
        (WebCore::V8Float64Array::wrap):
        (WebCore):
        * bindings/scripts/test/V8/V8TestActiveDOMObject.h:
        (V8TestActiveDOMObject):
        (WebCore::V8TestActiveDOMObject::wrap):
        (WebCore::toV8):
        * bindings/scripts/test/V8/V8TestCustomNamedGetter.h:
        (V8TestCustomNamedGetter):
        (WebCore::V8TestCustomNamedGetter::wrap):
        (WebCore::toV8):
        * bindings/scripts/test/V8/V8TestEventConstructor.h:
        (V8TestEventConstructor):
        (WebCore::V8TestEventConstructor::wrap):
        (WebCore::toV8):
        * bindings/scripts/test/V8/V8TestEventTarget.h:
        (V8TestEventTarget):
        (WebCore::V8TestEventTarget::wrap):
        (WebCore::toV8):
        * bindings/scripts/test/V8/V8TestInterface.h:
        (V8TestInterface):
        (WebCore::V8TestInterface::wrap):
        (WebCore::toV8):
        * bindings/scripts/test/V8/V8TestMediaQueryListListener.h:
        (V8TestMediaQueryListListener):
        (WebCore::V8TestMediaQueryListListener::wrap):
        (WebCore::toV8):
        * bindings/scripts/test/V8/V8TestNamedConstructor.h:
        (V8TestNamedConstructor):
        (WebCore::V8TestNamedConstructor::wrap):
        (WebCore::toV8):
        * bindings/scripts/test/V8/V8TestNode.h:
        (V8TestNode):
        (WebCore::V8TestNode::wrap):
        (WebCore::toV8):
        * bindings/scripts/test/V8/V8TestObj.h:
        (V8TestObj):
        (WebCore::V8TestObj::wrap):
        (WebCore::toV8):
        * bindings/scripts/test/V8/V8TestSerializedScriptValueInterface.h:
        (V8TestSerializedScriptValueInterface):
        (WebCore::V8TestSerializedScriptValueInterface::wrap):
        (WebCore::toV8):
        * bindings/v8/custom/V8DocumentCustom.cpp:
        (WebCore::toV8):
        * bindings/v8/custom/V8HTMLDocumentCustom.cpp:
        (WebCore::toV8):
        * bindings/v8/custom/V8NodeCustom.cpp:
        (WebCore::toV8Slow):
        * bindings/v8/custom/V8SVGDocumentCustom.cpp:
        (WebCore::toV8):
        * dom/make_names.pl:
        (printWrapperFactoryCppFile):

2012-04-19  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: replace @type annotation with @return annotation for getters
        https://bugs.webkit.org/show_bug.cgi?id=84362

        Reviewed by Yury Semikhatsky.

        Otherwise, compiler does not check for errors.

        * inspector/front-end/AdvancedSearchController.js:
        (WebInspector.SearchView.prototype.get searchConfig):
        * inspector/front-end/BreakpointManager.js:
        * inspector/front-end/NetworkRequest.js:
        (WebInspector.NetworkRequest.prototype.requestContent):
        * inspector/front-end/ResourceTreeModel.js:
        (WebInspector.ResourceTreeFrame):
        (WebInspector.ResourceTreeFrame.prototype._navigate):
        * inspector/front-end/ScriptsNavigator.js:
        * inspector/front-end/Settings.js:
        * inspector/front-end/SnippetsModel.js:
        * inspector/front-end/SplitView.js:
        * inspector/front-end/TabbedEditorContainer.js:
        * inspector/front-end/TabbedPane.js:
        (WebInspector.TabbedPaneTab):
        * inspector/front-end/TextEditorModel.js:
        * inspector/front-end/TimelinePresentationModel.js:

2012-04-20  Mark Pilgrim  <pilgrim@chromium.org>

        [Chromium] Call cacheMetadata directly
        https://bugs.webkit.org/show_bug.cgi?id=84415

        Reviewed by Kentaro Hara.

        Part of a refactoring series. See tracking bug 82948.

        * platform/chromium/PlatformSupport.h:
        (PlatformSupport):
        * platform/network/chromium/ResourceHandle.cpp:
        (WebCore::ResourceHandle::cacheMetadata):

2012-04-20  Mark Pilgrim  <pilgrim@chromium.org>

        [Chromium] Call stopSharedTimer directly
        https://bugs.webkit.org/show_bug.cgi?id=84418

        Reviewed by Kentaro Hara.

        Part of a refactoring series. See tracking bug 82948.

        * platform/chromium/PlatformSupport.h:
        (PlatformSupport):
        * platform/chromium/SharedTimerChromium.cpp:
        (WebCore::stopSharedTimer):

2012-04-20  Taiju Tsuiki  <tzik@chromium.org>

        DOMFileSystem::scheduleCallback() crashes on file() call after reload.
        https://bugs.webkit.org/show_bug.cgi?id=76461

        DOMFileSystem::scheduleCallback() is unavailable when the page in unloading, so we should
        avoid using it in callback.

        Reviewed by David Levin.

        Test: fast/filesystem/file-after-reload-crash.html

        * Modules/filesystem/DOMFileSystem.cpp:
        (WebCore):

2012-04-19  Sudarsana Nagineni  <sudarsana.nagineni@linux.intel.com>

        [EFL] Missing keycode translation for space key
        https://bugs.webkit.org/show_bug.cgi?id=84153

        Reviewed by Antonio Gomes.

        Map space key to Unicode value in createKeyMap(), and also set
        correct keyname 'space' for space key in createWindowsKeyMap().

        Tests: fast/html/details-keyboard-show-hide.html
               fast/forms/button-spacebar-click.html

        * platform/efl/EflKeyboardUtilities.cpp:
        (WebCore::createKeyMap):

2012-04-19  Antaryami Pandia  <antaryami.pandia@motorola.com>

        Inserting empty html moves caret.
        https://bugs.webkit.org/show_bug.cgi?id=71771

        Reviewed by Ryosuke Niwa.

        When we place the cursor in the middle of a text node and try to insert some text
        between, then we split text node. But in this case we have nothing to insert since
        the string to be inserted is empty. So the check for fragments should precedes the
        call to code block containing splitTextNode.

        Test: editing/inserting/insert-empty-html.html

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

2012-04-19  Tay Grigg  <tgrigg@rim.com>

        [BlackBerry] Update HTTP connection per host limit in ResourceRequestBlackBerry
        https://bugs.webkit.org/show_bug.cgi?id=84380

        Reviewed by George Staikos.

        Reviewed Internally by: George Rizkalla, Lyon Chen

        Set the limit on the http connection count per host to the default
        of 10000, queue the requests in the networking layer instead,
        this should increase parallelism at the WebKit layer to remove
        any potential bottlenecks.

        * platform/network/blackberry/ResourceRequestBlackBerry.cpp:
        (WebCore::initializeMaximumHTTPConnectionCountPerHost):

2012-04-19  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r114711.
        http://trac.webkit.org/changeset/114711
        https://bugs.webkit.org/show_bug.cgi?id=84412

        Many tests crash in RenderObject::container() (Requested by
        dimich on #webkit).

        * page/scrolling/ScrollingCoordinator.cpp:
        (WebCore::computeNonFastScrollableRegion):
        (WebCore::ScrollingCoordinator::frameViewLayoutUpdated):
        (WebCore::ScrollingCoordinator::frameViewScrollableAreasDidChange):

2012-04-19  Anders Carlsson  <andersca@apple.com>

        computeNonFastScrollableRegion needs to traverse the entire frame tree
        https://bugs.webkit.org/show_bug.cgi?id=84409
        <rdar://problem/11285741>

        Reviewed by Dan Bernstein.

        Now that scrollable areas won't be in the set of scrollable areas unless they are actually scrollable, we need to look for scrollable
        areas in the entire frame tree since there can be a scrollable frame that's a subframe of a non-scrollable frame for example.

        * page/scrolling/ScrollingCoordinator.cpp:
        (WebCore::computeNonFastScrollableRegion):
        Traverse the entire frame tree looking for scrollable areas. Also, remove the scrollability checks because scrollable areas will only be
        in the set if they have scrollbars that are enabled.

        (WebCore::ScrollingCoordinator::frameViewLayoutUpdated):
        (WebCore::ScrollingCoordinator::frameViewScrollableAreasDidChange):
        computeNonFastScrollableRegion now takes the main frame.

2012-04-19  Anders Carlsson  <andersca@apple.com>

        Focus ring on wikipedia gets blobs when you type
        https://bugs.webkit.org/show_bug.cgi?id=84407
        <rdar://problem/11011847>

        Reviewed by Dan Bernstein.

        Make it possible to override the focus ring visible rect from layer drawing code.

        * platform/graphics/mac/WebLayer.mm:
        (drawLayerContents):
        Call ThemeMac::setFocusRingClipRect to set the focus ring clip rect while drawing.

        * platform/mac/ThemeMac.h:
        * platform/mac/ThemeMac.mm:
        (-[WebCoreFlippedView _focusRingVisibleRect]):
        If there's an active focus ring visible rect, use it. Otherwise, fall back to the previous behavior
        and just return the view's visible rect.

        (WebCore::ThemeMac::setFocusRingClipRect):
        Update the focus clip rect.

2012-04-19  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r114690.
        http://trac.webkit.org/changeset/114690
        https://bugs.webkit.org/show_bug.cgi?id=84408

        Broke GlueSerializeTest.BackwardsCompatibleTest in Chromium
        test_shell_tests (Requested by dimich on #webkit).

        * history/HistoryItem.cpp:
        (WebCore::HistoryItem::HistoryItem):
        * loader/HistoryController.cpp:
        (WebCore::HistoryController::restoreScrollPositionAndViewState):

2012-04-19  Andreas Kling  <kling@webkit.org>

        ElementAttributeData should be fast-malloc'd.
        <http://webkit.org/b/84405>

        Reviewed by Antti Koivisto.

        Sprinkle missing WTF_MAKE_FAST_ALLOCATED.

        * dom/ElementAttributeData.h:
        (ElementAttributeData):

2012-04-19  David Barr  <davidbarr@chromium.org>

        REGRESSION(r112177): Numbered list item rendered bulleted
        https://bugs.webkit.org/show_bug.cgi?id=84216

        Reviewed by Ryosuke Niwa.

        Shorthands that imply omitted values cannot be derived from
        an incomplete set of longhand rules.

        No new tests; updated existing tests that should have caught this.

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseTransformOriginShorthand):
        Set implicit initial for Z when omitted.
        * css/StylePropertySet.cpp:
        (WebCore::StylePropertySet::getShorthandValue):

2012-04-19  Peter Beverloo  <peter@chromium.org>

        [Chromium] Don't compile FontCacheSkia for Android
        https://bugs.webkit.org/show_bug.cgi?id=84392

        Reviewed by Kent Tamura.

        Chromium for the Android platform uses its own FontCacheAndroid
        implementation. Compile errors show up when trying to build the
        content shell.

        * WebCore.gyp/WebCore.gyp:

2012-04-19  Martin Robinson  <mrobinson@igalia.com>

        [Cairo] Remove rgb24-hacks.txt and scale-removal.txt
        https://bugs.webkit.org/show_bug.cgi?id=83475

        Reviewed by Daniel Bates.

        No new tests. This does not change functionality.

        Remove some obsolete patch files for Cairo that were used in some
        very old versions of Safari for Windows.

        * platform/graphics/cairo/rgb24-hacks.txt: Removed.
        * platform/graphics/cairo/scale-removal.txt: Removed.

2012-04-19  Peter Beverloo  <peter@chromium.org>

        Use sqrtf instead of sqrt in CanvasRenderingContext2D.cpp
        https://bugs.webkit.org/show_bug.cgi?id=84403

        Reviewed by Andreas Kling.

        r114679 broke Chromium Win and Android bots due to call
        ambiguity between a double and float argument.

        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::inflateStrokeRect):

2012-04-19  Alexandre Elias  <aelias@google.com>

        Default to null value for HistoryItem::m_pageScaleFactor
        https://bugs.webkit.org/show_bug.cgi?id=84385

        Reviewed by Nate Chapin.

        Previously, HistoryItem::m_pageScaleFactor defaulted to a value
        of 1, making it impossible to determine whether this value was never
        set, or intentionally set to 1.  This patch introduces a default value
        of 0 and makes restoreScrollPositionAndViewState not touch the page
        scale factor if this value is still present at time of reload.

        This is a no-op change for common navigation scenarios.  The
        motivation for this change is the corner case of syncing history items
        from a desktop browser to a mobile device.  In that case, we need a
        way to specify that the history item does not contain a
        pageScaleFactor so that the mobile device does not display the page
        overly zoomed in.

        No new tests.

        * history/HistoryItem.cpp:
        (WebCore::HistoryItem::HistoryItem):
        * loader/HistoryController.cpp:
        (WebCore::HistoryController::restoreScrollPositionAndViewState):

2012-04-19  Alexis Menard  <alexis.menard@openbossa.org>

        Unreviewed Qt build warning fix.

        The file editing/StringHelper.h does not exist.

        * Target.pri:

2012-04-19  Daniel Bates  <dbates@webkit.org>

        Remove empty directory Source/WebCore/webaudio

        Changeset 111474 <http://trac.webkit.org/changeset/111474> moved all the files in
        Source/WebCore/webaudio to Source/WebCore/Modules/webaudio. We should remove the
        empty directory Source/WebCore/webaudio.

        * webaudio: Removed.

2012-04-19  Pratik Solanki  <psolanki@apple.com>

        Incorrect inter-caps in “ShouldSkipMetaData” etc.
        https://bugs.webkit.org/show_bug.cgi?id=72159

        Reviewed by Dan Bernstein.

        No new tests since no change in functionality.

        * platform/graphics/ImageSource.h:
        * platform/graphics/cg/ImageSourceCG.cpp:
        (WebCore::imageSourceOptions):
        (WebCore::ImageSource::isSizeAvailable):
        (WebCore::ImageSource::frameSizeAtIndex):
        (WebCore::ImageSource::orientationAtIndex):
        (WebCore::ImageSource::getHotSpot):
        (WebCore::ImageSource::repetitionCount):
        (WebCore::ImageSource::createFrameAtIndex):
        (WebCore::ImageSource::frameDurationAtIndex):

2012-04-19  Huang Dongsung  <luxtella@company100.net>

        Canvas more precisely makes the bounding rect for stroke rendering.
        https://bugs.webkit.org/show_bug.cgi?id=75792

        Reviewed by Simon Fraser.

        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::stroke):
        (WebCore::CanvasRenderingContext2D::drawTextInternal):
        (WebCore::CanvasRenderingContext2D::inflateStrokeRect):
        (WebCore):
        * html/canvas/CanvasRenderingContext2D.h:
        (CanvasRenderingContext2D):

2012-04-19  Luke Macpherson  <macpherson@chromium.org>

        Eliminate potential null pointer dereference in CSSStyleSelector::containsUncommonAttributeSelector().
        https://bugs.webkit.org/show_bug.cgi?id=84366

        Reviewed by Kentaro Hara.

        No new tests / code cleanup only.

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

2012-04-19  Luke Macpherson  <macpherson@chromium.org>

        Fix null-pointer dereference in ApplyPropertyZoom::applyValue().
        https://bugs.webkit.org/show_bug.cgi?id=84279

        Reviewed by Simon Fraser.

        Test: fast/css/zoom-on-unattached.html

        * css/CSSStyleApplyProperty.cpp:
        (WebCore::ApplyPropertyZoom::applyValue):

2012-04-19  Luke Macpherson  <macpherson@chromium.org>

        Clean up list iteration in MediaQueryExp constructor (avoid unnecessary calls to current()).
        https://bugs.webkit.org/show_bug.cgi?id=84369

        Reviewed by Simon Fraser.

        No new tests / code cleanup only.

        * css/MediaQueryExp.cpp:
        (WebCore::MediaQueryExp::MediaQueryExp):

2012-04-19  Mark Pilgrim  <pilgrim@chromium.org>

        [Chromium] Call signedPublicKeyAndChallengeString directly
        https://bugs.webkit.org/show_bug.cgi?id=84372

        Reviewed by Kentaro Hara.

        Part of a refactoring series. See tracking bug 82948.

        * platform/chromium/PlatformSupport.h:
        (PlatformSupport):
        * platform/chromium/SSLKeyGeneratorChromium.cpp:
        (WebCore::signedPublicKeyAndChallengeString):

2012-04-19  Luke Macpherson  <macpherson@chromium.org>

        Remove unnecessary assignment in CSSParser::parseCubicBezierTimingFunctionValue().
        https://bugs.webkit.org/show_bug.cgi?id=84368

        Reviewed by Simon Fraser.

        No new tests / code cleanup only.

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

2012-04-19  Luke Macpherson  <macpherson@chromium.org>

        Initialize all member variables in CSSImageSetValue's copy constructor.
        https://bugs.webkit.org/show_bug.cgi?id=84379

        Reviewed by Simon Fraser.

        No new tests / code cleanup only.

        * css/CSSImageSetValue.cpp:
        (WebCore::CSSImageSetValue::CSSImageSetValue):

2012-04-19  Ken Buchanan  <kenrb@chromium.org>

        Positioned children of ruby runs not handled correctly during layout
        https://bugs.webkit.org/show_bug.cgi?id=84157

        Reviewed by Julien Chaffraix.

        A positioned ruby text causes a problem because it is excluded from
        normal layout by its parent and instead gets layout from
        RenderRubyRun::layoutSpecialExcludedChild; however this means it gets
        skipped over during the loop in RenderBlock::layoutBlockChildren,
        which is where positioned RenderBlocks get added to the appropriate
        positioned object lists. As a result, a dirty positioned ruby text
        will not get layout again unless the RenderRubyRun also needs layout
        which is not guaranteed.

        This patch disqualifies ruby text elements from being positioned.
        If it is necessary to support this in future, ruby text layout will
        have to be modified to ensure the renderers are added to the
        appropriate block lists.

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::adjustRenderStyle):
        * rendering/RenderRubyRun.cpp:
        (WebCore::RenderRubyRun::rubyText):

2012-04-19  vsevik@chromium.org  <vsevik@chromium.org>

        Web Inspector: No response body available for cached resource requests with error status codes.
        https://bugs.webkit.org/show_bug.cgi?id=84265

        Reviewed by Pavel Feldman.

        InspectorResourceAgent now saves failed subresource request response body in its cache.
        Saved data is shown on front-end.

        Test: http/tests/inspector/network/network-image-404.html

        * inspector/InspectorResourceAgent.cpp:
        (WebCore::isErrorStatusCode):
        (WebCore):
        (WebCore::InspectorResourceAgent::didReceiveData):
        * inspector/NetworkResourcesData.cpp:
        (WebCore::NetworkResourcesData::ResourceData::removeContent):
        (WebCore::NetworkResourcesData::ResourceData::purgeContent):
        (WebCore):
        (WebCore::NetworkResourcesData::responseReceived):
        (WebCore::NetworkResourcesData::setResourceContent):
        * inspector/NetworkResourcesData.h:
        (ResourceData):
        (WebCore::NetworkResourcesData::ResourceData::httpStatusCode):
        (WebCore::NetworkResourcesData::ResourceData::setHTTPStatusCode):
        * inspector/front-end/RequestView.js:
        (WebInspector.RequestView.hasTextContent):

2012-04-19  Yury Semikhatsky  <yurys@chromium.org>

        Web Inspector / Heap snapshots: "Object's retaining tree" view doesn't get cleared when navigating between objects
        https://bugs.webkit.org/show_bug.cgi?id=84337

        When DataGrid root node is reset, make sure all existing rows are removed.

        Reviewed by Vsevolod Vlasov.

        * inspector/front-end/DataGrid.js:
        (WebInspector.DataGrid.prototype.setRootNode):

2012-04-19  Beth Dakin  <bdakin@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=80536
        REGRESSION: When Safari is not frontmost, pages should not get mouse moves or 
        hover

        Reviewed by Adele Peterson.

        This patch just adds some code back that was removed by 
        http://trac.webkit.org/changeset/102632 This particular code was unrelated to that 
        bug and should not have been removed.
        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleMouseMoveEvent):

2012-04-19  Xianzhu Wang  <wangxianzhu@chromium.org>

        DevTools highlights elements in frames at un-scaled positions
        https://bugs.webkit.org/show_bug.cgi?id=84181

        On mobile platforms (e.g. chromium-android), normally pages are scaled,
        thus the coordinations of highlight rect inside of a frame needs to
        consider not only the offset, but also the scale. The change uses
        FrameView::contentsToRootView() to map the coordinates of a node in
        a frame to the coordinates in the main frame, instead of calculating
        by only the offset.

        Reviewed by Pavel Feldman.

        Test: inspector/elements/highlight-node-scaled.html

        * inspector/DOMNodeHighlighter.cpp:

2012-04-19  Yury Semikhatsky  <yurys@chromium.org>

        Web Inspector / Heap snapshots: "Objects allocated ..." views are empty
        https://bugs.webkit.org/show_bug.cgi?id=84347

        Pass parsed maxJSObjectId value to the profile header constructor.

        Reviewed by Pavel Feldman.

        * inspector/front-end/ProfilesPanel.js:
        (WebInspector.ProfileHeader):
        (WebInspector.ProfilesPanel.prototype.setRecordingProfile):
        (WebInspector.ProfilesPanel.prototype.takeHeapSnapshot):
        (WebInspector.ProfilerDispatcher.prototype.addProfileHeader):

2012-04-19  Brady Eidson  <beidson@apple.com>

        <rdar://problem/10664148> and https://bugs.webkit.org/show_bug.cgi?id=84360 
        StorageThread should have an autorelease pool in place for Cocoa clients
        
        Reviewed by Eric Carlson.

        No new tests. (Not practical to test this with current tools)

        * storage/StorageThread.cpp:
        (WebCore::StorageThread::threadEntryPoint): Include an AutodrainedPool and cycle it after each message.

2012-04-19  Luke Macpherson  <macpherson@chromium.org>

        Fix potential null pointer dereference in RuleSet::addRulesFromSheet().
        https://bugs.webkit.org/show_bug.cgi?id=84258

        Reviewed by Andreas Kling.

        Fix variable that is dereferenced without null check here, but checked in code above and below.

        No new test / code cleanup from coverity analysis.

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

2012-04-19  Yury Semikhatsky  <yurys@chromium.org>

        Web Inspector: exception when hovering object while paused
        https://bugs.webkit.org/show_bug.cgi?id=84358

        Added missing boolean parameter to the call site of evaluate method
        on call frame.

        Reviewed by Vsevolod Vlasov.

        * inspector/front-end/AdvancedSearchController.js:
        * inspector/front-end/DebuggerPresentationModel.js: annotated slectedCallFrame
        method so that closure compiler catches errors like in the bug report.
        (WebInspector.DebuggerPresentationModel.prototype.evaluateInSelectedCallFrame):
        * inspector/front-end/JavaScriptSourceFrame.js:
        (WebInspector.JavaScriptSourceFrame.prototype._resolveObjectForPopover):

2012-04-19  Yury Semikhatsky  <yurys@chromium.org>

        Web Inspector: nodes are not removed from the summary view when switching between allocation ranges
        https://bugs.webkit.org/show_bug.cgi?id=84354

        Clear all top level nodes not only those visible in the viewport when populating
        the constructors view with new content.

        Reviewed by Pavel Feldman.

        * inspector/front-end/HeapSnapshotDataGrids.js:
        (WebInspector.HeapSnapshotSortableDataGrid.prototype.dispose):
        (WebInspector.HeapSnapshotSortableDataGrid.prototype.topLevelNodes):
        (WebInspector.HeapSnapshotSortableDataGrid.prototype.changeNameFilter):
        (WebInspector.HeapSnapshotViewportDataGrid.prototype.topLevelNodes):
        (WebInspector.HeapSnapshotViewportDataGrid.prototype.removeTopLevelNodes):
        (WebInspector.HeapSnapshotConstructorsDataGrid.prototype.populateChildren):
        (WebInspector.HeapSnapshotDiffDataGrid.prototype.setBaseDataSource):

2012-04-19  Sami Kyostila  <skyostil@chromium.org>

        [chromium] Allow scrolling non-root layers in the compositor thread
        https://bugs.webkit.org/show_bug.cgi?id=73350

        Reviewed by James Robinson.

        This patch enables scrolling child layers in the compositor thread.
        Scroll deltas are accumulated for each scrolled CCLayerImpl and
        synchronized to the main thread.

        If a layer has no room to scroll in a given direction, one of its
        ancestor layers is scrolled instead if possible.

        Added new webkit_unit_tests to verify scrolling behavior.

        * platform/graphics/chromium/ContentLayerChromium.cpp:
        (WebCore::ContentLayerChromium::scrollBy):
        (WebCore):
        * platform/graphics/chromium/ContentLayerChromium.h:
        (ContentLayerDelegate):
        (ContentLayerChromium):
        * platform/graphics/chromium/GraphicsLayerChromium.h:
        (WebCore::GraphicsLayerChromium::didScroll):
        * platform/graphics/chromium/LayerChromium.cpp:
        (WebCore::LayerChromium::setMaxScrollPosition):
        (WebCore):
        (WebCore::LayerChromium::pushPropertiesTo):
        * platform/graphics/chromium/LayerChromium.h:
        (LayerChromium):
        (WebCore::LayerChromium::maxScrollPosition):
        (WebCore::LayerChromium::scrollable):
        (WebCore::LayerChromium::scrollBy):
        * platform/graphics/chromium/cc/CCLayerImpl.cpp:
        (WebCore::CCLayerImpl::findLayerInSubtree):
        (WebCore):
        (WebCore::CCLayerImpl::tryScroll):
        * platform/graphics/chromium/cc/CCLayerImpl.h:
        (CCLayerImpl):
        * platform/graphics/chromium/cc/CCLayerTreeHost.cpp:
        (WebCore::findLayerById):
        (WebCore):
        (WebCore::findFirstScrollableLayer):
        (WebCore::CCLayerTreeHost::applyScrollAndScale):
        * platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:
        (WebCore::CCLayerTreeHostImpl::CCLayerTreeHostImpl):
        (WebCore::CCLayerTreeHostImpl::startPageScaleAnimation):
        (WebCore::CCLayerTreeHostImpl::contentSize):
        (WebCore):
        (WebCore::CCLayerTreeHostImpl::calculateVisibleLayers):
        (WebCore::CCLayerTreeHostImpl::prepareToDraw):
        (WebCore::findRootScrollLayer):
        (WebCore::findScrollLayerForContentLayer):
        (WebCore::CCLayerTreeHostImpl::setRootLayer):
        (WebCore::adjustScrollsForPageScaleChange):
        (WebCore::applyPageScaleDeltaToScrollLayers):
        (WebCore::CCLayerTreeHostImpl::setPageScaleFactorAndLimits):
        (WebCore::CCLayerTreeHostImpl::setPageScaleDelta):
        (WebCore::CCLayerTreeHostImpl::updateMaxScrollPosition):
        (WebCore::CCLayerTreeHostImpl::scrollBegin):
        (WebCore::CCLayerTreeHostImpl::scrollBy):
        (WebCore::CCLayerTreeHostImpl::scrollEnd):
        (WebCore::CCLayerTreeHostImpl::pinchGestureUpdate):
        (WebCore::CCLayerTreeHostImpl::computePinchZoomDeltas):
        (WebCore::CCLayerTreeHostImpl::makeScrollAndScaleSet):
        (WebCore::collectScrollDeltas):
        (WebCore::CCLayerTreeHostImpl::processScrollDeltas):
        (WebCore::CCLayerTreeHostImpl::animatePageScale):
        * platform/graphics/chromium/cc/CCLayerTreeHostImpl.h:
        (WebCore::CCLayerTreeHostImpl::rootScrollLayer):
        (CCLayerTreeHostImpl):
        (LayerGeometry):

2012-04-19  Yury Semikhatsky  <yurys@chromium.org>

        Web Inspector: make constructors and diff heap snapshot data grids use viewport
        https://bugs.webkit.org/show_bug.cgi?id=84348

        HeapSnapshotViewportDataGrid is introduced which allows to add to the tbody only
        visible rows. HeapSnapshotConstructorsDataGrid and HeapSnapshotDiffDataGrid are
        inherited from this class which makes them operate well on large amounts of nodes.

        Reviewed by Pavel Feldman.

        * inspector/front-end/DataGrid.js:
        (WebInspector.DataGridNode.prototype.nodeHeight):
        (WebInspector.DataGridNode.prototype._attach):
        * inspector/front-end/HeapSnapshotDataGrids.js:
        (WebInspector.HeapSnapshotSortableDataGrid):
        (WebInspector.HeapSnapshotSortableDataGrid.prototype.nodesForNameFilter):
        (WebInspector.HeapSnapshotSortableDataGrid.prototype.changeNameFilter):
        (WebInspector.HeapSnapshotSortableDataGrid.prototype._performSorting):
        (WebInspector.HeapSnapshotSortableDataGrid.prototype.appendChildAfterSorting):
        (WebInspector.HeapSnapshotSortableDataGrid.prototype.updateVisibleNodes):
        (WebInspector.HeapSnapshotSortableDataGrid.prototype.recursiveSortingEnter):
        (WebInspector.HeapSnapshotSortableDataGrid.prototype.recursiveSortingLeave):
        (WebInspector.HeapSnapshotViewportDataGrid):
        (WebInspector.HeapSnapshotViewportDataGrid.prototype.nodesForNameFilter):
        (WebInspector.HeapSnapshotViewportDataGrid.prototype.appendChildAfterSorting):
        (WebInspector.HeapSnapshotViewportDataGrid.prototype.updateVisibleNodes):
        (WebInspector.HeapSnapshotViewportDataGrid.prototype.appendTopLevelNode):
        (WebInspector.HeapSnapshotViewportDataGrid.prototype._addPaddingRows):
        (WebInspector.HeapSnapshotViewportDataGrid.prototype._removePaddingRows):
        (WebInspector.HeapSnapshotViewportDataGrid.prototype.onResize):
        (WebInspector.HeapSnapshotViewportDataGrid.prototype._onScroll):
        (WebInspector.HeapSnapshotPaddingNode):
        (WebInspector.HeapSnapshotPaddingNode.prototype.setHeight):
        (WebInspector.HeapSnapshotPaddingNode.prototype.removeFromTable):
        (WebInspector.HeapSnapshotConstructorsDataGrid):
        (WebInspector.HeapSnapshotConstructorsDataGrid.prototype.populateChildren):
        (WebInspector.HeapSnapshotDiffDataGrid):
        (WebInspector.HeapSnapshotDiffDataGrid.prototype.populateChildren.baseAggregatesReceived.aggregatesReceived.addNodeIfNonZeroDiff):
        (WebInspector.HeapSnapshotDiffDataGrid.prototype.populateChildren.baseAggregatesReceived.aggregatesReceived):
        (WebInspector.HeapSnapshotDiffDataGrid.prototype.populateChildren):
        * inspector/front-end/HeapSnapshotGridNodes.js:
        (WebInspector.HeapSnapshotGridNode):
        (WebInspector.HeapSnapshotGridNode.prototype.collapse):
        (WebInspector.HeapSnapshotGridNode.prototype.sort.afterSort.afterPopulate):
        (WebInspector.HeapSnapshotGridNode.prototype.sort.afterSort):
        (WebInspector.HeapSnapshotGridNode.prototype.sort):
        (WebInspector.HeapSnapshotObjectNode.prototype._createChildNode):
        (WebInspector.HeapSnapshotObjectNode.prototype.comparator):
        (WebInspector.HeapSnapshotInstanceNode.prototype._createChildNode):
        (WebInspector.HeapSnapshotInstanceNode.prototype.comparator):
        (WebInspector.HeapSnapshotConstructorNode):
        (WebInspector.HeapSnapshotConstructorNode.prototype._createChildNode):
        (WebInspector.HeapSnapshotConstructorNode.prototype.comparator):
        (WebInspector.HeapSnapshotDiffNode):
        (WebInspector.HeapSnapshotDiffNode.prototype._createChildNode):
        (WebInspector.HeapSnapshotDiffNode.prototype.comparator):
        (WebInspector.HeapSnapshotDominatorObjectNode.prototype._createChildNode):
        (WebInspector.HeapSnapshotDominatorObjectNode.prototype.comparator):
        * inspector/front-end/ShowMoreDataGridNode.js:
        (WebInspector.ShowMoreDataGridNode.prototype.createCells):
        (WebInspector.ShowMoreDataGridNode.prototype.nodeHeight):

2012-04-19  Kentaro Hara  <haraken@chromium.org>

        Unreviewed, rolling out r114421.
        http://trac.webkit.org/changeset/114421
        https://bugs.webkit.org/show_bug.cgi?id=84103

        Chromium crash

        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateNormalAttrGetter):
        (GenerateFunctionCallString):
        (NativeToJSValue):
        * bindings/scripts/test/V8/V8TestEventConstructor.cpp:
        (WebCore::TestEventConstructorV8Internal::attr1AttrGetter):
        (WebCore::TestEventConstructorV8Internal::attr2AttrGetter):
        * bindings/scripts/test/V8/V8TestInterface.cpp:
        (WebCore::TestInterfaceV8Internal::supplementalStr1AttrGetter):
        (WebCore::TestInterfaceV8Internal::supplementalStr2AttrGetter):
        * bindings/scripts/test/V8/V8TestObj.cpp:
        (WebCore::TestObjV8Internal::readOnlyStringAttrAttrGetter):
        (WebCore::TestObjV8Internal::stringAttrAttrGetter):
        (WebCore::TestObjV8Internal::reflectedStringAttrAttrGetter):
        (WebCore::TestObjV8Internal::reflectedURLAttrAttrGetter):
        (WebCore::TestObjV8Internal::reflectedCustomURLAttrAttrGetter):
        (WebCore::TestObjV8Internal::stringAttrWithGetterExceptionAttrGetter):
        (WebCore::TestObjV8Internal::stringAttrWithSetterExceptionAttrGetter):
        (WebCore::TestObjV8Internal::hashAttrGetter):
        (WebCore::TestObjV8Internal::conditionalMethod1Callback):
        * bindings/v8/V8Binding.cpp:
        (WebCore::getElementStringAttr):
        * bindings/v8/V8Binding.h:
        (WebCore::v8ExternalString):
        (WebCore::v8String):
        (WebCore::v8StringOrNull):
        (WebCore::v8StringOrUndefined):
        (WebCore::v8StringOrFalse):

2012-04-19  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r114626.
        http://trac.webkit.org/changeset/114626
        https://bugs.webkit.org/show_bug.cgi?id=84349

        caused new assertions in debug builds (Requested by smfr_ on
        #webkit).

        * inspector/InspectorResourceAgent.cpp:
        (WebCore::InspectorResourceAgent::didReceiveData):
        * inspector/NetworkResourcesData.cpp:
        (WebCore::NetworkResourcesData::responseReceived):
        * inspector/NetworkResourcesData.h:
        (ResourceData):
        (NetworkResourcesData):
        * inspector/front-end/RequestView.js:
        (WebInspector.RequestView.hasTextContent):

2012-04-19  Mark Pilgrim  <pilgrim@chromium.org>

        [Chromium] Call mimeRegistry directly
        https://bugs.webkit.org/show_bug.cgi?id=84334

        Reviewed by Kentaro Hara.

        Part of a refactoring series. See tracking bug 82948.

        * platform/chromium/MIMETypeRegistryChromium.cpp:
        (WebCore::MIMETypeRegistry::getMIMETypeForExtension):
        (WebCore::MIMETypeRegistry::getWellKnownMIMETypeForExtension):
        (WebCore::MIMETypeRegistry::getPreferredExtensionForMIMEType):
        (WebCore::MIMETypeRegistry::isSupportedImageMIMEType):
        (WebCore::MIMETypeRegistry::isSupportedJavaScriptMIMEType):
        (WebCore::MIMETypeRegistry::isSupportedNonImageMIMEType):
        * platform/chromium/PlatformSupport.h:
        (PlatformSupport):

2012-04-19  Victor Carbune  <vcarbune@adobe.com>

        Display a TextTrackCue when snap-to-lines flag is not set
        https://bugs.webkit.org/show_bug.cgi?id=79750

        Reviewed by Eric Carlson.

        Support for positioning of a cue on top of the video element when snap-to-lines is not set.

        Test: media/track/track-cue-rendering-snap-to-lines-not-set.html

        * css/mediaControls.css:
        (video::-webkit-media-text-track-container): Marked the container as
        flexible box in order to use all the available space on top of the controls.
        (video::-webkit-media-text-track-background): Added background default settings.
        (video::-webkit-media-text-track-display): Added default position.
        * html/shadow/MediaControlElements.cpp:
        (WebCore::MediaControlTextTrackContainerElement::updateDisplay): Updated comments.
        * html/track/TextTrackCue.cpp:
        (WebCore):
        (WebCore::TextTrackCue::TextTrackCue): Updated constructor to calculate
        the computed line position.
        (WebCore::TextTrackCue::setLine): Updated call to calculate the computed line
        position.
        (WebCore::TextTrackCue::setPosition):
        (WebCore::TextTrackCue::calculateComputedLinePosition): Partial calculation of the
        computated line position.
        (WebCore::TextTrackCue::calculateDisplayParameters): Updated display parameter computations
        required by the spec.
        (WebCore::TextTrackCue::getDisplayTree): Updated positioning attributes when snap-to-lines
        is not set. Added extra anonymous box for background, because setting position:absolute
        on the display tree determines the background to cover the whole block, not just inline.
        (WebCore::TextTrackCue::getPositionCoordinates): Determine coordinates as required by the spec.
        * html/track/TextTrackCue.h:
        (TextTrackCue):

2012-04-19  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: introduce styles panel as an experiment
        https://bugs.webkit.org/show_bug.cgi?id=84331

        Reviewed by Vsevolod Vlasov.

        This change introduces new "Styles" panel that looks like the "Scripts" one,
        but operates stylesheets. This is happening under the experimental flag.

        * English.lproj/localizedStrings.js:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * inspector/compile-front-end.py:
        * inspector/front-end/Panel.js:
        (WebInspector.Panel.prototype.showAnchorLocation):
        * inspector/front-end/ResourceView.js:
        (WebInspector.EditableResourceSourceFrame.prototype.didEditContent):
        * inspector/front-end/ScriptsNavigator.js:
        (WebInspector.ScriptsNavigatorController.prototype._navigatorOverlayWasShown):
        * inspector/front-end/ScriptsPanel.js:
        * inspector/front-end/Settings.js:
        (WebInspector.ExperimentsSettings):
        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame.prototype._clearLineHighlight):
        * inspector/front-end/StylesPanel.js: Added.
        (WebInspector.StylesPanel):
        (WebInspector.StylesPanel.prototype.wasShown):
        (WebInspector.StylesPanel.prototype._initialize):
        (WebInspector.StylesPanel.prototype._populateResourceTree.populateFrame):
        (WebInspector.StylesPanel.prototype._populateResourceTree):
        (WebInspector.StylesPanel.prototype._resourceAdded):
        (WebInspector.StylesPanel.prototype._reset):
        (WebInspector.StylesPanel.prototype._cachedResourcesLoaded):
        (WebInspector.StylesPanel.prototype.get toolbarItemLabel):
        (WebInspector.StylesPanel.prototype.viewForFile.get if):
        (WebInspector.StylesPanel.prototype.viewForFile):
        (WebInspector.StylesPanel.prototype._textEdited):
        (WebInspector.StylesPanel.prototype._scriptSelected):
        (WebInspector.StylesPanel.prototype._showFile):
        (WebInspector.StylesPanel.prototype.canShowAnchorLocation):
        * inspector/front-end/StylesSidebarPane.js:
        (WebInspector.StylePropertiesSection):
        (WebInspector.StylePropertiesSection.prototype._createRuleOriginNode):
        * inspector/front-end/TabbedEditorContainer.js:
        (WebInspector.TabbedEditorContainer):
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/inspector.html:
        * inspector/front-end/inspector.js:
        (WebInspector._createPanels):
        (WebInspector._showAnchorLocationInPanel):
        * inspector/front-end/scriptsPanel.css:
        * inspector/front-end/splitView.css:
        (.sidebar-overlay):

2012-04-19  Vsevolod Vlasov  <vsevik@chromium.org>

        Follow up to r114632: build fix.

        * inspector/InspectorDebuggerAgent.cpp:
        (WebCore):
        (WebCore::InspectorDebuggerAgent::evaluateOnCallFrame):

2012-04-19  Mark Pilgrim  <pilgrim@chromium.org>

        [Chromium] Call sampleGamepads directly
        https://bugs.webkit.org/show_bug.cgi?id=84339

        Reviewed by Kentaro Hara.

        Part of a refactoring series. See tracking bug 82948.

        * platform/chromium/GamepadsChromium.cpp:
        (WebCore::sampleGamepads):
        * platform/chromium/PlatformSupport.h:
        (WebCore):
        (PlatformSupport):

2012-04-19  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: x-frame security errors logged when typing in the console are annoying.
        https://bugs.webkit.org/show_bug.cgi?id=81970

        Reviewed by Pavel Feldman.

        Parameter DoNotPauseOnExceptions in Runtime.evaluate() renamed to DoNotPauseOnExceptionsAndMuteConsole.
        Added this parameter to Runtime.callFunctionOn() and passed true in all call sites.
        Added this parameter to Debugger.evaluateOnCallFrame().
        Added a flag to console that mutes all messages unless they have ConsoleAPI message source.
        This flag is now temporarily set from InspectorRuntimeAgent and InspectorDebuggerAgent for certain injected source calls.

        * inspector/Inspector.json:
        * inspector/InspectorDebuggerAgent.cpp:
        (WebCore::asBool):
        (WebCore):
        (WebCore::InspectorDebuggerAgent::evaluateOnCallFrame):
        * inspector/InspectorDebuggerAgent.h:
        (InspectorDebuggerAgent):
        * inspector/InspectorRuntimeAgent.cpp:
        (WebCore):
        (WebCore::setPauseOnExceptionsState):
        (WebCore::InspectorRuntimeAgent::evaluate):
        (WebCore::InspectorRuntimeAgent::callFunctionOn):
        (WebCore::InspectorRuntimeAgent::getProperties):
        * inspector/InspectorRuntimeAgent.h:
        (InspectorRuntimeAgent):
        * inspector/PageDebuggerAgent.cpp:
        (WebCore::PageDebuggerAgent::muteConsole):
        (WebCore):
        (WebCore::PageDebuggerAgent::unmuteConsole):
        * inspector/PageDebuggerAgent.h:
        (PageDebuggerAgent):
        * inspector/PageRuntimeAgent.cpp:
        (WebCore::PageRuntimeAgent::muteConsole):
        (WebCore):
        (WebCore::PageRuntimeAgent::unmuteConsole):
        * inspector/PageRuntimeAgent.h:
        (PageRuntimeAgent):
        * inspector/WorkerDebuggerAgent.cpp:
        (WebCore::WorkerDebuggerAgent::muteConsole):
        (WebCore):
        (WebCore::WorkerDebuggerAgent::unmuteConsole):
        * inspector/WorkerDebuggerAgent.h:
        (WorkerDebuggerAgent):
        * inspector/WorkerRuntimeAgent.cpp:
        (WebCore::WorkerRuntimeAgent::muteConsole):
        (WebCore):
        (WebCore::WorkerRuntimeAgent::unmuteConsole):
        * inspector/WorkerRuntimeAgent.h:
        (WorkerRuntimeAgent):
        * inspector/front-end/ConsoleView.js:
        (WebInspector.ConsoleView.prototype.evalInInspectedWindow):
        * inspector/front-end/DebuggerPresentationModel.js:
        (WebInspector.DebuggerPresentationModel.prototype.evaluateInSelectedCallFrame):
        (WebInspector.PresentationCallFrame.prototype.evaluate):
        * inspector/front-end/RemoteObject.js:
        (WebInspector.RemoteObject.prototype.setPropertyValue):
        (WebInspector.RemoteObject.prototype.callFunction):
        (WebInspector.RemoteObject.prototype.callFunctionJSON):
        * inspector/front-end/WorkerManager.js:
        * page/Console.cpp:
        (WebCore::Console::addMessage):
        (WebCore::Console::warn):
        (WebCore):
        (WebCore::Console::mute):
        (WebCore::Console::unmute):
        * page/Console.h:
        (Console):

2012-04-19  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r114628.
        http://trac.webkit.org/changeset/114628
        https://bugs.webkit.org/show_bug.cgi?id=84341

        Breaks EFL and GTK builds (Requested by pfeldman on #webkit).

        * inspector/Inspector.json:
        * inspector/InspectorDebuggerAgent.cpp:
        (WebCore):
        (WebCore::InspectorDebuggerAgent::evaluateOnCallFrame):
        * inspector/InspectorDebuggerAgent.h:
        (InspectorDebuggerAgent):
        * inspector/InspectorRuntimeAgent.cpp:
        (WebCore::InspectorRuntimeAgent::evaluate):
        (WebCore::InspectorRuntimeAgent::callFunctionOn):
        (WebCore::InspectorRuntimeAgent::getProperties):
        * inspector/InspectorRuntimeAgent.h:
        (InspectorRuntimeAgent):
        * inspector/PageDebuggerAgent.cpp:
        * inspector/PageDebuggerAgent.h:
        (PageDebuggerAgent):
        * inspector/PageRuntimeAgent.cpp:
        * inspector/PageRuntimeAgent.h:
        (PageRuntimeAgent):
        * inspector/WorkerDebuggerAgent.cpp:
        * inspector/WorkerDebuggerAgent.h:
        (WorkerDebuggerAgent):
        * inspector/WorkerRuntimeAgent.cpp:
        * inspector/WorkerRuntimeAgent.h:
        (WorkerRuntimeAgent):
        * inspector/front-end/ConsoleView.js:
        (WebInspector.ConsoleView.prototype.evalInInspectedWindow):
        * inspector/front-end/DebuggerPresentationModel.js:
        (WebInspector.DebuggerPresentationModel.prototype.evaluateInSelectedCallFrame):
        (WebInspector.PresentationCallFrame.prototype.evaluate):
        * inspector/front-end/RemoteObject.js:
        (WebInspector.RemoteObject.prototype.setPropertyValue):
        (WebInspector.RemoteObject.prototype.callFunction):
        (WebInspector.RemoteObject.prototype.callFunctionJSON):
        * inspector/front-end/WorkerManager.js:
        * page/Console.cpp:
        (WebCore):
        (WebCore::Console::addMessage):
        (WebCore::Console::warn):
        * page/Console.h:
        (Console):

2012-04-19  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: x-frame security errors logged when typing in the console are annoying.
        https://bugs.webkit.org/show_bug.cgi?id=81970

        Reviewed by Pavel Feldman.

        Parameter DoNotPauseOnExceptions in Runtime.evaluate() renamed to DoNotPauseOnExceptionsAndMuteConsole.
        Added this parameter to Runtime.callFunctionOn() and passed true in all call sites.
        Added this parameter to Debugger.evaluateOnCallFrame().
        Added a flag to console that mutes all messages unless they have ConsoleAPI message source.
        This flag is now temporarily set from InspectorRuntimeAgent and InspectorDebuggerAgent for certain injected source calls.

        * inspector/Inspector.json:
        * inspector/InspectorDebuggerAgent.cpp:
        (WebCore::asBool):
        (WebCore):
        (WebCore::InspectorDebuggerAgent::evaluateOnCallFrame):
        * inspector/InspectorDebuggerAgent.h:
        (InspectorDebuggerAgent):
        * inspector/InspectorRuntimeAgent.cpp:
        (WebCore):
        (WebCore::setPauseOnExceptionsState):
        (WebCore::InspectorRuntimeAgent::evaluate):
        (WebCore::InspectorRuntimeAgent::callFunctionOn):
        (WebCore::InspectorRuntimeAgent::getProperties):
        * inspector/InspectorRuntimeAgent.h:
        (InspectorRuntimeAgent):
        * inspector/PageDebuggerAgent.cpp:
        (WebCore::PageDebuggerAgent::muteConsole):
        (WebCore):
        (WebCore::PageDebuggerAgent::unmuteConsole):
        * inspector/PageDebuggerAgent.h:
        (PageDebuggerAgent):
        * inspector/PageRuntimeAgent.cpp:
        (WebCore::PageRuntimeAgent::muteConsole):
        (WebCore):
        (WebCore::PageRuntimeAgent::unmuteConsole):
        * inspector/PageRuntimeAgent.h:
        (PageRuntimeAgent):
        * inspector/WorkerDebuggerAgent.cpp:
        (WebCore::WorkerDebuggerAgent::muteConsole):
        (WebCore):
        (WebCore::WorkerDebuggerAgent::unmuteConsole):
        * inspector/WorkerDebuggerAgent.h:
        (WorkerDebuggerAgent):
        * inspector/WorkerRuntimeAgent.cpp:
        (WebCore::WorkerRuntimeAgent::muteConsole):
        (WebCore):
        (WebCore::WorkerRuntimeAgent::unmuteConsole):
        * inspector/WorkerRuntimeAgent.h:
        (WorkerRuntimeAgent):
        * inspector/front-end/ConsoleView.js:
        (WebInspector.ConsoleView.prototype.evalInInspectedWindow):
        * inspector/front-end/DebuggerPresentationModel.js:
        (WebInspector.DebuggerPresentationModel.prototype.evaluateInSelectedCallFrame):
        (WebInspector.PresentationCallFrame.prototype.evaluate):
        * inspector/front-end/RemoteObject.js:
        (WebInspector.RemoteObject.prototype.setPropertyValue):
        (WebInspector.RemoteObject.prototype.callFunction):
        (WebInspector.RemoteObject.prototype.callFunctionJSON):
        * inspector/front-end/WorkerManager.js:
        * page/Console.cpp:
        (WebCore::Console::addMessage):
        (WebCore::Console::warn):
        (WebCore):
        (WebCore::Console::mute):
        (WebCore::Console::unmute):
        * page/Console.h:
        (Console):

2012-04-19  No'am Rosenthal  <noam.rosenthal@nokia.com>

        [Qt] Fix Qt-Mac build after libxml patch
        https://bugs.webkit.org/show_bug.cgi?id=84313

        Use direct include/library paths instead of PKGCONFIG when on Mac.

        Reviewed by Simon Hausmann.

        No new tests, build fix.

        * WebCore.pri:

2012-04-18  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: No response body available for cached resource requests with error status codes.
        https://bugs.webkit.org/show_bug.cgi?id=84265

        Reviewed by Pavel Feldman.

        InspectorResourceAgent now saves failed subresource request response body in its cache.
        Saved data is shown on front-end.

        Test: http/tests/inspector/network/network-image-404.html

        * inspector/InspectorResourceAgent.cpp:
        (WebCore::InspectorResourceAgent::didReceiveData):
        * inspector/NetworkResourcesData.cpp:
        (WebCore::NetworkResourcesData::responseReceived):
        (WebCore::NetworkResourcesData::httpStatusCode):
        (WebCore):
        * inspector/NetworkResourcesData.h:
        (WebCore::NetworkResourcesData::ResourceData::httpStatusCode):
        (WebCore::NetworkResourcesData::ResourceData::setHTTPStatusCode):
        (ResourceData):
        (NetworkResourcesData):
        * inspector/front-end/RequestView.js:
        (WebInspector.RequestView.hasTextContent):

2012-04-19  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: reuse ParsedUrl in the UISourceCode
        https://bugs.webkit.org/show_bug.cgi?id=84326

        Reviewed by Yury Semikhatsky.

        Migrated UISourceCode to ParsedURL, moved the displayName logic into its only client:
        TabbedEditorContainer.

        * inspector/front-end/CompilerScriptMapping.js:
        (WebInspector.SourceMapParser.prototype._canonicalizeURL):
        * inspector/front-end/FilteredItemSelectionDialog.js:
        (WebInspector.OpenResourceDialog.filterOutEmptyURLs):
        (WebInspector.OpenResourceDialog.compareFunction):
        (WebInspector.OpenResourceDialog):
        (WebInspector.OpenResourceDialog.prototype.itemTitleAt):
        (WebInspector.OpenResourceDialog.prototype.itemKeyAt):
        * inspector/front-end/ResourceUtils.js:
        (WebInspector.ParsedURL):
        * inspector/front-end/ScriptsNavigator.js:
        (WebInspector.ScriptsNavigator.prototype._getOrCreateFolderTreeElement):
        (WebInspector.NavigatorFolderTreeElement):
        * inspector/front-end/TabbedEditorContainer.js:
        (WebInspector.TabbedEditorContainer.prototype._titleForFile):
        * inspector/front-end/UISourceCode.js:
        (WebInspector.UISourceCode):
        (WebInspector.UISourceCode.prototype.get parsedURL):

2012-04-19  Xingnan Wang  <xingnan.wang@intel.com>

        Optimize for DARWIN in DirectConvolver::process()
        https://bugs.webkit.org/show_bug.cgi?id=80256

        Reviewed by Chris Rogers.

        * platform/audio/DirectConvolver.cpp:
        (WebCore::DirectConvolver::process):

2012-04-18  Noel Gordon  <noel.gordon@gmail.com>

        [CG] ImageBuffer::toDataURL: Remove alpha stuffing loop when encoding to JPEG
        https://bugs.webkit.org/show_bug.cgi?id=84319

        Reviewed by Eric Seidel.

        No change in behavior. Covered by existing canvas 2d and 3d tests:

          canvas/philip/tests/toDataURL.jpeg.alpha.html
          fast/canvas/webgl/premultiplyalpha-test.html

        * platform/graphics/cg/ImageBufferCG.cpp:
        (WebCore::ImageBuffer::toDataURL): Remove the alpha stuffing loop and instead,
        make JPEG encoder ignore the alpha channel (kCGImageAlphaNoneSkipLast).

2012-04-18  Emil A Eklund  <eae@chromium.org>

        Remove unnecessary rounding/conversions in RenderBoxModelObject
        https://bugs.webkit.org/show_bug.cgi?id=84288

        Reviewed by Eric Seidel.

        No new tests, no change in functionality.

        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paintBoxShadow):
        Remove unnecessary pixelSnapping logic and casts in paintBoxShadow as
        shadow rects are now int based.

2012-04-18  Jason Liu  <jason.liu@torchmobile.com.cn>

        [BlackBerry] Parsed Cookie's m_hasDefaultDomain is not needed.
        https://bugs.webkit.org/show_bug.cgi?id=82830

        Reviewed by George Staikos.

        RFC 2965
        3.2.2
        Domain = value
        If an explicitly specified value does not start with a dot, the user agent supplies
        a leading dot.
        3.3.1
        Domain  Defaults to the effective request-host.  (Note that because there is no dot
        at the beginning of effective request-host, the default Domain can only domain-match
        itself.)

        The first char can show the difference even though it is from the cookie database.
        But m_hasDefaultDomain is set to false if the cookie is from database although the
        domain is host as a default value. So m_hasDefaultDomain sometimes is wrong.

        In sum,  we shouldn't use m_hasDefaultDomain.

        Test: http/tests/security/cookies/cookies-wrong-domain-rejected.php

        * platform/blackberry/CookieManager.cpp:
        (WebCore::CookieManager::shouldRejectForSecurityReason):
        * platform/blackberry/CookieParser.cpp:
        (WebCore::CookieParser::parseOneCookie):
        * platform/blackberry/ParsedCookie.cpp:
        (WebCore::ParsedCookie::ParsedCookie):
        * platform/blackberry/ParsedCookie.h:
        (ParsedCookie):

2012-04-18  Adrienne Walker  <enne@google.com>

        [chromium] Consolidate adjustTextRenderMode copypasta into Skia context
        https://bugs.webkit.org/show_bug.cgi?id=83840

        Reviewed by James Robinson.

        The same logic to decide when to make text use LCD rendering is copy
        and pasted in all the different font classes. It seems like this
        should live in a single place.

        * platform/graphics/harfbuzz/FontHarfBuzz.cpp:
        (WebCore::Font::drawGlyphs):
        (WebCore::Font::drawComplexText):
        * platform/graphics/skia/FontSkia.cpp:
        (WebCore::Font::drawGlyphs):
        * platform/graphics/skia/PlatformContextSkia.cpp:
        (WebCore::PlatformContextSkia::adjustTextRenderMode):
        (WebCore):
        (WebCore::PlatformContextSkia::couldUseLCDRenderedText):
        * platform/graphics/skia/PlatformContextSkia.h:
        (PlatformContextSkia):
        * platform/graphics/skia/SkiaFontWin.cpp:
        (WebCore::setupPaintForFont):

2012-04-18  Hironori Bono  <hbono@chromium.org>

        Split SpellChecker::didCheck() to SpellChecker::didCheckSucceeded() and SpellChecker::didCheckCanceled()
        https://bugs.webkit.org/show_bug.cgi?id=83748

        Reviewed by Ryosuke Niwa.

        The current SpellChecker::didCheck() does not delete existing markers. It causes
        a problem that it leaves misspelled markers when a spellchecker client finishes
        checking text successfully. This change splits this function to didCheckSucceeded()
        and  didCheckCanceled() so the SpellChecker class can delete existing markers
        when its client finishes checking text successfully. (We do not have to erase
        existing markers when the client needs to cancel a text-check request.)

        Test: platform/chromium/editing/spelling/delete-misspelled-word.html

        * WebCore.exp.in: Replaced SpellChecker::didCheck with SpellChecker::didCheckSucceeded.
        * editing/SpellChecker.cpp:
        (WebCore::SpellChecker::didCheckSucceeded): Added.
        (WebCore):
        (WebCore::SpellChecker::didCheckCanceled): Added.
        * editing/SpellChecker.h:
        (SpellChecker): Added didCheckSucceeded and didCheckCanceled. Also changed didCheck to a private function.

2012-04-16  James Robinson  <jamesr@chromium.org>

        [chromium] Convert WebPluginContainerImpl over to use WebExternalTextureLayer
        https://bugs.webkit.org/show_bug.cgi?id=84120

        Reviewed by Adrienne Walker.

        This renames PluginLayerChromium -> TextureLayerChromium since it is now used only as the implementation of
        WebExternalTextureLayer and cleans it up slightly.

        * WebCore.gypi:
        * platform/graphics/chromium/TextureLayerChromium.cpp: Renamed from Source/WebCore/platform/graphics/chromium/PluginLayerChromium.cpp.
        (WebCore):
        (WebCore::TextureLayerChromium::create):
        (WebCore::TextureLayerChromium::TextureLayerChromium):
        (WebCore::TextureLayerChromium::createCCLayerImpl):
        (WebCore::TextureLayerChromium::drawsContent):
        (WebCore::TextureLayerChromium::setTextureId):
        (WebCore::TextureLayerChromium::setFlipped):
        (WebCore::TextureLayerChromium::setUVRect):
        (WebCore::TextureLayerChromium::setIOSurfaceProperties):
        (WebCore::TextureLayerChromium::pushPropertiesTo):
        * platform/graphics/chromium/TextureLayerChromium.h: Renamed from Source/WebCore/platform/graphics/chromium/PluginLayerChromium.h.
        (WebCore):
        (TextureLayerChromium):
        (WebCore::TextureLayerChromium::flipped):
        (WebCore::TextureLayerChromium::uvRect):

2012-04-18  Raymond Toy  <rtoy@google.com>

        Expose attack, release as DynamicsCompressorNode's attributes.
        https://bugs.webkit.org/show_bug.cgi?id=81221

        Reviewed by Chris Rogers.

        * Modules/webaudio/DynamicsCompressorNode.cpp:
        (WebCore::DynamicsCompressorNode::DynamicsCompressorNode):
        (WebCore::DynamicsCompressorNode::process):
        * Modules/webaudio/DynamicsCompressorNode.h:
        (WebCore::DynamicsCompressorNode::attack):
        (WebCore::DynamicsCompressorNode::releaseTime):
        (DynamicsCompressorNode):
        * Modules/webaudio/DynamicsCompressorNode.idl: Add attack and
        release attributes.
        * bindings/scripts/CodeGeneratorObjC.pm:
        (SkipAttribute): Skip release()
        (GenerateHeader): Call SkipAttribute for getters/setters.
        * platform/audio/DynamicsCompressor.h:
        (DynamicsCompressor):

2012-04-18  Dana Jansens  <danakj@chromium.org>

        [chromium] Simplify occlusion tracker API by passing layer iterator data
        https://bugs.webkit.org/show_bug.cgi?id=84088

        Reviewed by Adrienne Walker.

        Previously three methods lived in the API and you needed to call the
        appropriate method (with different amounts of data) depending on what
        the current layer iterator was representing.

        This makes usage of the occlusion tracker simpler to read and harder
        to mess up, by just passing in the layer iterator at each step of the
        iteration process.

        Covered by existing tests.

        * platform/graphics/chromium/cc/CCLayerIterator.h:
        (WebCore):
        (CCLayerIteratorPosition):
        (CCLayerIterator):
        (WebCore::CCLayerIterator::operator const CCLayerIteratorPosition<LayerType>):
        * platform/graphics/chromium/cc/CCLayerTilingData.cpp:
        (WebCore::CCLayerTilingData::opaqueRegionInLayerRect):
        * platform/graphics/chromium/cc/CCLayerTreeHost.cpp:
        (WebCore::CCLayerTreeHost::paintLayerContents):
        * platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:
        (WebCore::CCLayerTreeHostImpl::calculateRenderPasses):
        * platform/graphics/chromium/cc/CCOcclusionTracker.cpp:
        (WebCore::::enterLayer):
        (WebCore):
        (WebCore::::leaveLayer):
        * platform/graphics/chromium/cc/CCOcclusionTracker.h:
        (CCOcclusionTrackerBase):

2012-04-18  James Robinson  <jamesr@chromium.org>

        [chromium] Add canBeginFrame state to CCSchedulerStateMachine to suppress initialization before our surface is available
        https://bugs.webkit.org/show_bug.cgi?id=84301

        Reviewed by Adrienne Walker.

        If our composited surface isn't ready yet, then the compositor may initialize in a state where the first
        makeContextCurrent() fails. This adds a new state to the scheduler that we can use to suppress initialization
        until we get notified that the surface is ready. I'll add the plumbing for actually notifying in a follow-up.

        Updated CCSchedulerTest / CCSchedulerStateMachineTest unit tests.

        * platform/graphics/chromium/cc/CCScheduler.cpp:
        (WebCore::CCScheduler::setCanBeginFrame):
        (WebCore):
        * platform/graphics/chromium/cc/CCScheduler.h:
        (CCScheduler):
        * platform/graphics/chromium/cc/CCSchedulerStateMachine.cpp:
        (WebCore::CCSchedulerStateMachine::CCSchedulerStateMachine):
        (WebCore::CCSchedulerStateMachine::nextAction):
        * platform/graphics/chromium/cc/CCSchedulerStateMachine.h:
        (WebCore::CCSchedulerStateMachine::setCanBeginFrame):
        (CCSchedulerStateMachine):
        * platform/graphics/chromium/cc/CCThreadProxy.cpp:
        (WebCore::CCThreadProxy::initializeImplOnImplThread):

2012-04-18  David Reveman  <reveman@chromium.org>

        [Chromium] Solid color layers should respect opacity value.
        https://bugs.webkit.org/show_bug.cgi?id=84197

        Reviewed by Adrienne Walker.

        Fold opacity into shader color for solid color layers.

        Test: CCSolidColorLayerImplTest.verifyCorrectOpacityInQuad

        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::drawSolidColorQuad):

2012-04-18  Mark Pilgrim  <pilgrim@chromium.org>

        [Chromium] Call prefetchDNS directly
        https://bugs.webkit.org/show_bug.cgi?id=84262

        Reviewed by Kentaro Hara.

        Part of a series, see tracking bug 82948.

        * platform/chromium/PlatformSupport.h:
        (PlatformSupport):
        * platform/network/chromium/DNSChromium.cpp:
        (WebCore::prefetchDNS):

2012-04-18  Julien Chaffraix  <jchaffraix@webkit.org>

        REGRESSION(102040): Auto-table layout with percent width doesn't shrink-to-fit content a cell with colspan
        https://bugs.webkit.org/show_bug.cgi?id=84260

        Reviewed by Ojan Vafai.

        Tests: fast/table/td-width-fifty-percent-regression-expected.html
               fast/table/td-width-fifty-percent-regression.html

        * rendering/AutoTableLayout.cpp:
        (WebCore::AutoTableLayout::calcEffectiveLogicalWidth):
        As we are spreading the cell's min / max logical width, we should be updating them.
        This prevents the following logic getting confused and allocating more than needed.

2012-04-18  Justin Schuh  <jschuh@chromium.org>

        Win8 builds usually fail due to cygwin rebasing
        https://bugs.webkit.org/show_bug.cgi?id=84274

        Reviewed by Dirk Pranke.

        Cygwin can fail to spawn children if the DLL is rebased. This happens
        frequently enough on Windows 8 that we should retry on failure.

        No new tests. No behavior changed.

        * bindings/scripts/preprocessor.pm:
        (applyPreprocessor):

2012-04-18  Levi Weintraub  <leviw@chromium.org>

        Add explicit template instantiation to chromium/PopupListBox.cpp to prepare for sub-pixel layout
        https://bugs.webkit.org/show_bug.cgi?id=84264

        Reviewed by Eric Seidel.

        Explicitly instantiating integer max and min templates to fix compilation in Chromium. We
        intentionally truncated these values in platform code, which matches earlier behavior.
        See https://trac.webkit.org/wiki/LayoutUnit for details.

        No new tests. No change in behavior.

        * platform/chromium/PopupListBox.cpp:
        (WebCore::PopupListBox::paintRow):
        (WebCore::PopupListBox::layout):

2012-04-18  Luke Macpherson  <macpherson@chromium.org>

        Prevent potential null pointer dereference in CSSStyleSelector::applyProperty().
        https://bugs.webkit.org/show_bug.cgi?id=84267

        Reviewed by Kentaro Hara.

        No new tests / code cleanup found via static analysis.

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

2012-04-18  Luke Macpherson  <macpherson@chromium.org>

        Prevent switch case fallthrough in StylePropertySet::getPropertyValue().
        https://bugs.webkit.org/show_bug.cgi?id=84266

        Reviewed by Kentaro Hara.

        No new tests / code cleanup found by static analysis.

        * css/StylePropertySet.cpp:
        (WebCore::StylePropertySet::getPropertyValue):

2012-04-18  Andreas Kling  <kling@webkit.org>

        CSSValuePool: Make numeric value caches fixed-size arrays.
        <http://webkit.org/b/84268>

        Reviewed by Antti Koivisto.

        Change the numeric CSSPrimitiveValue caches in CSSValuePool from HashMaps to
        fixed-size arrays of RefPtr<CSSPrimitiveValue>s.

        This is more space efficient and doesn't incur the cost of a hash lookup every
        time a numeric CSSPrimitiveValue is needed. We retain the limit of caching
        only values between 0-255 for now.

        * css/CSSValuePool.cpp:
        (WebCore::CSSValuePool::CSSValuePool):
        (WebCore::CSSValuePool::createValue):
        * css/CSSValuePool.h:
        (CSSValuePool):

2012-04-18  Dana Jansens  <danakj@chromium.org>

        [chromium] Rename overdraw histograms so we can use field trials in histograms.xml
        https://bugs.webkit.org/show_bug.cgi?id=83500

        Reviewed by James Robinson.

        * platform/graphics/chromium/cc/CCOverdrawMetrics.cpp:
        (WebCore::CCOverdrawMetrics::recordMetricsInternal):

2012-04-18  David Reveman  <reveman@chromium.org>

        [Chromium] Solid color shader should use premultiplied alpha.
        https://bugs.webkit.org/show_bug.cgi?id=84215

        Reviewed by Adrienne Walker.

        For efficiency and consistency, expect premultiplied alpha in
        solid color shader.

        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::drawDebugBorderQuad):
        (WebCore::LayerRendererChromium::drawSolidColorQuad):
        * platform/graphics/chromium/ShaderChromium.cpp:
        (WebCore::FragmentShaderColor::getShaderString):

2012-04-18  Alexey Proskuryakov  <ap@apple.com>

        [WK2] Sandbox violations prevent attaching files to gmail messages
        https://bugs.webkit.org/show_bug.cgi?id=84263
        <rdar://problem/11248260>

        Reviewed by Oliver Hunt.

        * page/DragActions.h: Removed the newly added upload action. We cannot know if or when an
        upload is going to happen - a drop even listener can always get a reference to a File object,
        and upload it with XMLHttpRequest.

        * page/DragController.cpp: (WebCore::DragController::concludeEditDrag): Removed a separate
        willPerformDragDestinationAction call for upload action - ther is nothing we'd want to only
        do when dropping on a file upload button.

2012-04-18  Levi Weintraub  <leviw@chromium.org>

        GraphicsContextCG's roundToDevicePixels should round even when there's no transform
        https://bugs.webkit.org/show_bug.cgi?id=84191

        Reviewed by Eric Seidel.

        When painting with the identify transform, the roundToDevicePixels function in GraphicsContextCG
        does an early return that simply returns the FloatRect that was passed in. This proved to be a
        problem in sub-pixel layout, as we wouldn't adjust the paint rect for text underline, and it could
        end up being more than one pixel wide. Adding a roundedIntRect method on FloatRect for the simple
        short-circuit case.

        No new tests. No change in behavior before switching to sub-pixel layout.

        * platform/graphics/FloatRect.cpp:
        (WebCore::roundedIntRect):
        * platform/graphics/FloatRect.h:
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::roundToDevicePixels):

2012-04-18  Keishi Hattori  <keishi@webkit.org>

        [chromium] Turn on ENABLE_DATALIST for chromium
        https://bugs.webkit.org/show_bug.cgi?id=84118

        Reviewed by Kent Tamura.

        * html/HTMLDataListElement.cpp: Touched to avoid build issues. No code change.
        * html/HTMLDataListElement.h: Ditto.
        * html/HTMLInputElement.cpp: Ditto.
        * html/HTMLInputElement.h: Ditto.

2012-04-18  Allan Sandfeld Jensen  <allan.jensen@nokia.com>

        [Qt] WheelEventQt.cpp should be deleted.
        https://bugs.webkit.org/show_bug.cgi?id=84237

        Reviewed by Simon Hausmann.

        * platform/qt/WheelEventQt.cpp: Removed.

2012-04-18  Emil A Eklund  <eae@chromium.org>

        Unreviewed. Adding FIXME comment to FractionalLayoutUnit explaining the lack of size_t operators.

        * platform/FractionalLayoutUnit.h:
        (FractionalLayoutUnit):

2012-04-18  Benjamin Poulain  <bpoulain@apple.com>

        Remove m_subclassData from JSArray, move the attribute to subclass as needed
        https://bugs.webkit.org/show_bug.cgi?id=84249

        Reviewed by Geoffrey Garen.

        * bridge/runtime_array.cpp:
        (JSC::RuntimeArray::RuntimeArray):
        (JSC::RuntimeArray::finishCreation):
        * bridge/runtime_array.h:
        (JSC::RuntimeArray::getLength):
        (JSC::RuntimeArray::getConcreteArray):
        (RuntimeArray):

2012-04-18  Luiz Agostini  <luiz.agostini@palm.com>

        matchMedia() MediaQueryList not updating
        https://bugs.webkit.org/show_bug.cgi?id=75903

        Reviewed by Antti Koivisto.

        Test: fast/media/media-query-list-08.html

        Viewport related MediaQueryList listeners were not triggered and the value
        of matches were not updated if the document's style selector were not
        affected by viewport changes.

        The new method evaluateMediaQueries() is now called by FrameView instead of
        styleSelectorChanged() if the style selector is not affected by viewport changes.

        * dom/Document.cpp:
        (WebCore::Document::evaluateMediaQueries):
        (WebCore):
        (WebCore::Document::styleSelectorChanged):
        * dom/Document.h:
        (Document):
        * page/FrameView.cpp:
        (WebCore::FrameView::layout):

2012-04-18  Emil A Eklund  <eae@chromium.org>

        Use explicit casts for size_t to unsigned conversion
        https://bugs.webkit.org/show_bug.cgi?id=83602

        Reviewed by Eric Seidel.

        No new tests, no change in functinality.

        Not all platforms have implicit casts from size_t to unsigned and we
        can't add size_t versions of the operators to FractionalLayoutUnit for
        all platforms as it would conflict with the unsigned versions of same.

        Change support methods to take unsigned instead of size_t and use
        explicit casts when multiplying or dividing a FractionalLayoutUnit with
        a size_t and the other way around.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::adjustForColumns):
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::initialPackingOffset):
        (WebCore::packingSpaceBetweenChildren):
        (WebCore::initialLinePackingOffset):
        (WebCore::linePackingSpaceBetweenChildren):
        (WebCore::RenderFlexibleBox::packFlexLines):
        * rendering/RenderFrameSet.cpp:
        (WebCore::RenderFrameSet::layout):

2012-04-18  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: [Chromium] Module's require injects scripts before the debug id is set to the context.
        https://bugs.webkit.org/show_bug.cgi?id=84166

        Re-applying r114497.

        * bindings/v8/V8IsolatedContext.cpp:
        (WebCore::setInjectedScriptContextDebugId):
        (WebCore):
        (WebCore::V8IsolatedContext::V8IsolatedContext):
        * bindings/v8/V8Proxy.cpp:
        (WebCore::V8Proxy::evaluateInIsolatedWorld):
        * bindings/v8/V8Proxy.h:
        (V8Proxy):

2012-04-18  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: extract script navigator overlay logic into the scripts navigator controller.
        https://bugs.webkit.org/show_bug.cgi?id=84244

        Reviewed by Vsevolod Vlasov.

        Overlay logic is well separable from the scripts panel and does not belong there.
        Extracting it into a separate class.

        * inspector/front-end/ScriptsNavigator.js:
        (WebInspector.ScriptsNavigatorController.prototype.wasShown):
        (WebInspector.ScriptsNavigatorController.prototype._createNavigatorControlButton):
        (WebInspector.ScriptsNavigatorController.prototype._escDownWhileNavigatorOverlayOpen):
        (WebInspector.ScriptsNavigatorController.prototype._toggleNavigator):
        (WebInspector.ScriptsNavigatorController.prototype._hidePinnedNavigator):
        (WebInspector.ScriptsNavigatorController.prototype.set _pinNavigator):
        (WebInspector.ScriptsNavigatorController.prototype.set showNavigatorOverlay):
        (WebInspector.ScriptsNavigatorController.prototype.hideNavigatorOverlay):
        (WebInspector.ScriptsNavigatorController.prototype._navigatorOverlayWasShown):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype.wasShown):
        (WebInspector.ScriptsPanel.prototype._editorClosed):
        (WebInspector.ScriptsPanel.prototype._editorSelected):
        (WebInspector.ScriptsPanel.prototype._scriptSelected):

2012-04-18  Alexandru Chiculita  <achicu@adobe.com>

        Unreviewed, trying to fix QT build.
        
        It was using a FilterEffectRenderer::prepare that changed to allocateBackingStoreIfNeeded in 114529.

        * platform/graphics/texmap/TextureMapperImageBuffer.cpp:
        (WebCore::BitmapTextureImageBuffer::applyFilters):

2012-04-18  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: extract script navigator overlay logic into the scripts navigator controller.
        https://bugs.webkit.org/show_bug.cgi?id=84244

        Reviewed by Vsevolod Vlasov.

        Overlay logic is well separable from the scripts panel and does not belong there.
        Extracting it into a separate class.

        * inspector/front-end/ScriptsNavigator.js:
        (WebInspector.ScriptsNavigatorController.prototype.wasShown):
        (WebInspector.ScriptsNavigatorController.prototype._createNavigatorControlButton):
        (WebInspector.ScriptsNavigatorController.prototype._escDownWhileNavigatorOverlayOpen):
        (WebInspector.ScriptsNavigatorController.prototype._toggleNavigator):
        (WebInspector.ScriptsNavigatorController.prototype._hidePinnedNavigator):
        (WebInspector.ScriptsNavigatorController.prototype.set _pinNavigator):
        (WebInspector.ScriptsNavigatorController.prototype.set showNavigatorOverlay):
        (WebInspector.ScriptsNavigatorController.prototype.hideNavigatorOverlay):
        (WebInspector.ScriptsNavigatorController.prototype._navigatorOverlayWasShown):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype.wasShown):
        (WebInspector.ScriptsPanel.prototype._editorClosed):
        (WebInspector.ScriptsPanel.prototype._editorSelected):
        (WebInspector.ScriptsPanel.prototype._scriptSelected):

2012-04-18  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r114497.
        http://trac.webkit.org/changeset/114497
        https://bugs.webkit.org/show_bug.cgi?id=84253

        Broke compile on Win, including stdio did not help (Requested
        by dimich on #webkit).

        * bindings/v8/V8IsolatedContext.cpp:
        (WebCore::V8IsolatedContext::V8IsolatedContext):
        * bindings/v8/V8Proxy.cpp:
        (WebCore::V8Proxy::evaluateInIsolatedWorld):
        (WebCore::V8Proxy::setInjectedScriptContextDebugId):
        (WebCore):
        * bindings/v8/V8Proxy.h:
        (V8Proxy):

2012-04-18  Alexandru Chiculita  <achicu@adobe.com>

        [CSS Filters] Drop-shadow and blur can avoid using full source image
        https://bugs.webkit.org/show_bug.cgi?id=81263

        Reviewed by Dean Jackson.

        Instead of using the full bounding box of the RenderLayer we now compute the exact rectangle that is needed to 
        compute filter inside the dirty rectangle on screen. That's easy to calculate by reversing the filter outsets.
        Even if the element is completely offscreen, but its shadow is in the viewport, we can still compute the source 
        rectangle that needs to be drawn in order to update the shadow correctly.

        No new tests, this change doesn't have visible results and the functionality should
        already be covered by previous filter tests.

        * rendering/FilterEffectRenderer.cpp:
        (WebCore::FilterEffectRenderer::FilterEffectRenderer):
        (WebCore::FilterEffectRenderer::build): Save the outsets of the filters, so that we can use them in computeSourceImageRectForDirtyRect.
        (WebCore::FilterEffectRenderer::updateBackingStoreRect): Only allocate a new source image if the size of the source rectangle changed.
        (WebCore::FilterEffectRenderer::allocateBackingStoreIfNeeded): There's no need to call clearIntermediateResults() in this function. We do that after
        the filter is computed.
        (WebCore::FilterEffectRenderer::computeSourceImageRectForDirtyRect):
        (WebCore):
        (WebCore::FilterEffectRendererHelper::prepareFilterEffect):
        (WebCore::FilterEffectRendererHelper::beginFilterEffect):
        * rendering/FilterEffectRenderer.h:
        (FilterEffectRendererHelper):
        (WebCore::FilterEffectRendererHelper::repaintRect):
        (FilterEffectRenderer):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::paintLayerContents):

2012-04-18  Dominik Röttsches  <dominik.rottsches@linux.intel.com>

        [EFL][DRT] @font-face support fails on EFL
        https://bugs.webkit.org/show_bug.cgi?id=83264

        Reviewed by Dimitri Glazkov.

        STORE_FONT_CUSTOM_PLATFORM_DATA was not defined for EFL.
        Fixing that by removing a long standing FIXME with the intention
        to turn the whitelist for this switch into a blacklist.

        * loader/cache/CachedFont.cpp:

2012-04-18  Levi Weintraub  <leviw@chromium.org>

        Convert ShadowData and DropShadowFilterOperation to use IntPoint
        https://bugs.webkit.org/show_bug.cgi?id=84098

        Reviewed by Eric Seidel.

        Shadows do not flow with the page, so sub-pixel layout doesn't actually offer any benefit that
        couldn't have been attained before that conversion. With that in mind, this patch reverts
        drop shadow offsets to integers, but also cleans up the code by switching the x/y location pair
        to be an IntPoint.

        No new tests. No change in behavior.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::valueForFilter):
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::collectMatchingRulesForList):
        * css/SVGCSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applySVGProperty):
        * page/animation/AnimationBase.cpp:
        (WebCore::blendFunc):
        (WebCore::shadowForBlending):
        * platform/animation/AnimationUtilities.h:
        (WebCore::blend): New blend function that operates on IntPoints.
        (WebCore):
        * platform/chromium/support/WebFilterOperations.cpp:
        (WebKit::WebDropShadowFilterOperation):
        * platform/graphics/filters/FilterOperation.cpp:
        (WebCore::DropShadowFilterOperation::blend):
        * platform/graphics/filters/FilterOperation.h:
        (WebCore::DropShadowFilterOperation::clone):
        (WebCore::DropShadowFilterOperation::x):
        (WebCore::DropShadowFilterOperation::y):
        (WebCore::DropShadowFilterOperation::location): Preserved the comment about lengths.
        (WebCore::DropShadowFilterOperation::operator==):
        (WebCore::DropShadowFilterOperation::DropShadowFilterOperation):
        (DropShadowFilterOperation):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::areaCastingShadowInHole): Reverted to integers since this operates on the IntRect from
        a RoundedRect.
        (WebCore::RenderBoxModelObject::paintBoxShadow): Reduced the complexity and unnecessary conversion
        between LayoutUnits and integers by using all integers after we calculate the pixel-snapped
        RoundedRect that we use for painting.
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::getShadowExtent):
        (WebCore::RenderStyle::getShadowHorizontalExtent):
        (WebCore::RenderStyle::getShadowVerticalExtent):
        * rendering/style/ShadowData.cpp:
        (WebCore::ShadowData::ShadowData):
        (WebCore::ShadowData::operator==):
        (WebCore::calculateShadowExtent):
        (WebCore::ShadowData::adjustRectForShadow):
        * rendering/style/ShadowData.h:
        (WebCore::ShadowData::ShadowData):
        (WebCore::ShadowData::x):
        (WebCore::ShadowData::y):
        (WebCore::ShadowData::location):
        (ShadowData):

2012-04-17  Kentaro Hara  <haraken@chromium.org>

        [V8] Add an optional Isolate argument to wrap()
        https://bugs.webkit.org/show_bug.cgi?id=84202

        Reviewed by Nate Chapin.

        The final objective is to pass Isolate around in V8 bindings.
        This patch adds an optional Isolate argument to wrap().
        After rewriting all wrap() callers so that they pass Isolate
        to wrap(), I'll make the Isolate argument non-optional.

        No tests. No change in behavior.

        * bindings/scripts/CodeGeneratorV8.pm: Modified as described above.
        (GenerateHeader):
        * bindings/v8/custom/V8DocumentCustom.cpp: Ditto.
        (WebCore::toV8):
        * bindings/v8/custom/V8HTMLDocumentCustom.cpp: Ditto.
        (WebCore::toV8):
        * bindings/v8/custom/V8NodeCustom.cpp: Ditto.
        (WebCore::toV8Slow):
        * bindings/v8/custom/V8SVGDocumentCustom.cpp: Ditto.
        (WebCore::toV8):
        * dom/make_names.pl: Ditto.
        (printWrapperFactoryCppFile):

        * bindings/scripts/test/V8/V8Float64Array.h:
        Updated run-bindings-tests results.
        (V8Float64Array):
        (WebCore::V8Float64Array::wrap):
        * bindings/scripts/test/V8/V8TestActiveDOMObject.h:
        (V8TestActiveDOMObject):
        (WebCore::V8TestActiveDOMObject::wrap):
        (WebCore::toV8):
        * bindings/scripts/test/V8/V8TestCustomNamedGetter.h:
        (V8TestCustomNamedGetter):
        (WebCore::V8TestCustomNamedGetter::wrap):
        (WebCore::toV8):
        * bindings/scripts/test/V8/V8TestEventConstructor.h:
        (V8TestEventConstructor):
        (WebCore::V8TestEventConstructor::wrap):
        (WebCore::toV8):
        * bindings/scripts/test/V8/V8TestEventTarget.h:
        (V8TestEventTarget):
        (WebCore::V8TestEventTarget::wrap):
        (WebCore::toV8):
        * bindings/scripts/test/V8/V8TestInterface.h:
        (V8TestInterface):
        (WebCore::V8TestInterface::wrap):
        (WebCore::toV8):
        * bindings/scripts/test/V8/V8TestMediaQueryListListener.h:
        (V8TestMediaQueryListListener):
        (WebCore::V8TestMediaQueryListListener::wrap):
        (WebCore::toV8):
        * bindings/scripts/test/V8/V8TestNamedConstructor.h:
        (V8TestNamedConstructor):
        (WebCore::V8TestNamedConstructor::wrap):
        (WebCore::toV8):
        * bindings/scripts/test/V8/V8TestNode.h:
        (V8TestNode):
        (WebCore::V8TestNode::wrap):
        (WebCore::toV8):
        * bindings/scripts/test/V8/V8TestObj.h:
        (V8TestObj):
        (WebCore::V8TestObj::wrap):
        (WebCore::toV8):
        * bindings/scripts/test/V8/V8TestSerializedScriptValueInterface.h:
        (V8TestSerializedScriptValueInterface):
        (WebCore::V8TestSerializedScriptValueInterface::wrap):
        (WebCore::toV8):

2012-04-18  Alexandru Chiculita  <achicu@adobe.com>

        [CSS Filters] Do not use clipping rect when calculating the bounds of a layer
        https://bugs.webkit.org/show_bug.cgi?id=83960

        Reviewed by Simon Fraser.
        
        The local clip rect should not be used when calculating the bounds of a filter area. Otherwise
        drop-shadow might not know about the pixels outside the clipping rectangle, even though the actual shadow might
        be inside it.

        No new tests added in this patch, but this patch fixes two existing tests that fail.
        LayoutTests/css3/filters/filter-repaint-shadow-clipped.html
        LayoutTests/css3/filters/filter-repaint-shadow-rotated.html

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::paintLayerContents):
        (WebCore::RenderLayer::calculateLayerBounds):
        * rendering/RenderLayer.h:

2012-04-18  Mark Pilgrim  <pilgrim@chromium.org>

        Followup to "Call incrementStatsCounter directly"
        https://bugs.webkit.org/show_bug.cgi?id=83109

        Reviewed by Kentaro Hara.

        Now that incrementStatsCounter has been moved from
        PlatformSupport.h to Platform.h, we need to be able to call it directly
        from WebCore/bindings/v8/v8Proxy.h (for the INC_STATS macro). That
        means we need a new StatsCounter class in WebCore/platform/ and an
        implementation in
        WebCore/platform/chromium/StatsCounterChromium.cpp. Other ports
        are welcome to implement their own stats counters if they
        wish. This pattern was based on the
        HistogramSupport/HistogramSupportChromium classes.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/v8/V8Proxy.h:
        * bindings/v8/custom/V8DedicatedWorkerContextCustom.cpp:
        (WebCore::V8DedicatedWorkerContext::postMessageCallback):
        (WebCore::V8DedicatedWorkerContext::webkitPostMessageCallback):
        * bindings/v8/custom/V8NotificationCenterCustom.cpp:
        (WebCore::V8NotificationCenter::createHTMLNotificationCallback):
        (WebCore::V8NotificationCenter::createNotificationCallback):
        (WebCore::V8NotificationCenter::requestPermissionCallback):
        * bindings/v8/custom/V8WorkerContextCustom.cpp:
        (WebCore::V8WorkerContext::importScriptsCallback):
        (WebCore::V8WorkerContext::setTimeoutCallback):
        (WebCore::V8WorkerContext::setIntervalCallback):
        * platform/StatsCounter.cpp: Added.
        (WebCore):
        (WebCore::StatsCounter::incrementStatsCounter):
        * platform/StatsCounter.h: Added.
        (WebCore):
        (StatsCounter):
        * platform/chromium/StatsCounterChromium.cpp: Added.
        (WebCore):
        (WebCore::StatsCounter::incrementStatsCounter):

2012-04-18  Alexander Pavlov  <apavlov@chromium.org>

        [Chromium] REGRESSION: Popup shrinks because of autocomplete
        https://bugs.webkit.org/show_bug.cgi?id=84139
        http://code.google.com/p/chromium/issues/detail?id=123432

        Do not update the window rect on the wrong client but instead return the popup widget's
        new screen coordinates from the refresh() method.

        Reviewed by Kent Tamura.

        * platform/chromium/PopupContainer.cpp:
        (WebCore::PopupContainer::refresh):
        * platform/chromium/PopupContainer.h:
        (PopupContainer):

2012-04-18  Simon Fraser  <simon.fraser@apple.com>

        ASSERT when a layer with a foreground layer is in 'paint into ancestor' mode
        https://bugs.webkit.org/show_bug.cgi?id=84221

        Reviewed by Dean Jackson.
        
        When a RenderLayerBacking doesn't require its own backing store, and is
        in "paintIntoCompositingAncestor" mode, we would assert when trying to
        paint its m_foregroundLayer if it had one (because of a negative z-index child).
        
        The fix is to set the 'drawsContent' state on the m_foregroundLayer
        as well as m_graphicsLayer.

        Test: compositing/backing/no-backing-foreground-layer.html

        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateDrawsContent):

2012-04-18  Yury Semikhatsky  <yurys@chromium.org>

        Web Inspector: DataGrid should use explicit root node
        https://bugs.webkit.org/show_bug.cgi?id=84240

        DataGrid now has an explicit root node. All children are added/removed
        to that node.

        Reviewed by Pavel Feldman.

        * inspector/front-end/ApplicationCacheItemsView.js:
        (WebInspector.ApplicationCacheItemsView.prototype._createDataGrid):
        (WebInspector.ApplicationCacheItemsView.prototype._populateDataGrid):
        * inspector/front-end/CSSSelectorProfileView.js:
        (WebInspector.CSSSelectorProfileView):
        (WebInspector.CSSSelectorProfileView.prototype.rebuildGridItems):
        (WebInspector.CSSSelectorProfileView.prototype.refreshData):
        * inspector/front-end/CookieItemsView.js:
        (WebInspector.SimpleCookiesTable):
        (WebInspector.SimpleCookiesTable.prototype.setCookies):
        * inspector/front-end/CookiesTable.js:
        (WebInspector.CookiesTable):
        (WebInspector.CookiesTable.prototype._rebuildTable):
        * inspector/front-end/DOMStorageItemsView.js:
        (WebInspector.DOMStorageItemsView.prototype._dataGridForDOMStorageEntries):
        * inspector/front-end/DataGrid.js:
        (WebInspector.DataGrid):
        (WebInspector.DataGrid.createSortableDataGrid.sortDataGrid):
        (WebInspector.DataGrid.createSortableDataGrid):
        (WebInspector.DataGrid.prototype.setRootNode):
        (WebInspector.DataGrid.prototype.rootNode):
        (WebInspector.DataGrid.prototype.autoSizeColumns):
        (WebInspector.DataGrid.prototype._enumerateChildren):
        (WebInspector.DataGrid.prototype._keyDown):
        (WebInspector.DataGrid.prototype._contextMenuInDataTable):
        (WebInspector.DataGridNode.prototype.get revealed):
        (WebInspector.DataGridNode.prototype.get depth):
        (WebInspector.DataGridNode.prototype.appendChild):
        (WebInspector.DataGridNode.prototype.insertChild):
        (WebInspector.DataGridNode.prototype.removeChild):
        (WebInspector.DataGridNode.prototype.removeChildren):
        (WebInspector.DataGridNode.prototype.collapse):
        (WebInspector.DataGridNode.prototype.expand):
        (WebInspector.DataGridNode.prototype.reveal):
        (WebInspector.DataGridNode.prototype.revealAndSelect):
        (WebInspector.DataGridNode.prototype.traverseNextNode):
        (WebInspector.DataGridNode.prototype.traversePreviousNode):
        * inspector/front-end/HeapSnapshotDataGrids.js:
        (WebInspector.HeapSnapshotSortableDataGrid):
        (WebInspector.HeapSnapshotSortableDataGrid.prototype.dispose):
        (WebInspector.HeapSnapshotSortableDataGrid.prototype.changeNameFilter):
        (WebInspector.HeapSnapshotSortableDataGrid.prototype.updateVisibleNodes):
        (WebInspector.HeapSnapshotSortableDataGrid.prototype._performSorting):
        (WebInspector.HeapSnapshotContainmentDataGrid.prototype._defaultPopulateCount.100.expandRoute):
        (WebInspector.HeapSnapshotContainmentDataGrid.prototype.setDataSource):
        (WebInspector.HeapSnapshotContainmentDataGrid.prototype.sortingChanged):
        (WebInspector.HeapSnapshotRetainmentDataGrid.prototype.reset):
        (WebInspector.HeapSnapshotConstructorsDataGrid.prototype.populateChildren):
        (WebInspector.HeapSnapshotDiffDataGrid.prototype.setBaseDataSource):
        (WebInspector.HeapSnapshotDiffDataGrid.prototype.populateChildren.baseAggregatesReceived.aggregatesReceived.addNodeIfNonZeroDiff):
        (WebInspector.HeapSnapshotDiffDataGrid.prototype.populateChildren.baseAggregatesReceived.aggregatesReceived):
        (WebInspector.HeapSnapshotDiffDataGrid.prototype.populateChildren):
        (WebInspector.HeapSnapshotDominatorsDataGrid.prototype._defaultPopulateCount.25.setDataSource):
        (WebInspector.HeapSnapshotDominatorsDataGrid.prototype.sortingChanged):
        * inspector/front-end/HeapSnapshotGridNodes.js:
        (WebInspector.HeapSnapshotGenericObjectNode):
        * inspector/front-end/HeapSnapshotView.js:
        (WebInspector.HeapSnapshotView.prototype.performSearch):
        (WebInspector.HeapSnapshotView.prototype.refreshVisibleData):
        * inspector/front-end/IndexedDBViews.js:
        (WebInspector.IDBDataView.prototype._createDataGrid):
        (WebInspector.IDBDataView.prototype._updateData.callback):
        (WebInspector.IDBDataView.prototype._updateData):
        (WebInspector.IDBDataView.prototype.clear):
        * inspector/front-end/NetworkPanel.js:
        (WebInspector.NetworkLogView.prototype._createTable):
        (WebInspector.NetworkLogView.prototype.refresh):
        (WebInspector.NetworkLogView.prototype._reset):
        * inspector/front-end/ProfileDataGridTree.js:
        (WebInspector.ProfileDataGridNode.prototype.insertChild):
        (WebInspector.ProfileDataGridNode.prototype.removeChild):
        (WebInspector.ProfileDataGridNode.prototype.removeChildren):
        * inspector/front-end/ProfileView.js:
        (WebInspector.CPUProfileView.prototype.refresh):
        * inspector/front-end/treeoutline.js:

2012-04-18  Vineet Chaudhary  <rgf748@motorola.com>

        Add PassThis=* to support the callbacks which requires to pass "this" value.
        https://bugs.webkit.org/show_bug.cgi?id=84232

        Reviewed by Kentaro Hara.

        Adding PassThisToCallback=XXX to attributes will be useful for the callbacks which requires to pass "this".
        This will help to identify the type(XXX) of "this" value in codegenerator.

        Tests: bindings/scripts/test/TestCallback.idl

        * bindings/scripts/CodeGeneratorJS.pm: 
        (GenerateCallbackImplementation): Modified codegenerator to support [PassThisToCallback]
        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateCallbackImplementation): Ditto.
        * bindings/scripts/IDLAttributes.txt: Added PassThisToCallback=*
        * bindings/scripts/test/CPP/WebDOMTestCallback.cpp: Modofied results from run-bindings-tests.
        (WebDOMTestCallback::callbackWithBoolean):
        (WebDOMTestCallback::callbackRequiresThisToPass):
        * bindings/scripts/test/CPP/WebDOMTestCallback.h: Ditto.
        (WebDOMTestCallback):
        * bindings/scripts/test/GObject/WebKitDOMTestCallback.cpp: Ditto.
        (webkit_dom_test_callback_callback_with_boolean):
        (webkit_dom_test_callback_callback_requires_this_to_pass):
        * bindings/scripts/test/GObject/WebKitDOMTestCallback.h: Ditto.
        * bindings/scripts/test/JS/JSTestCallback.cpp: Ditto.
        (WebCore::JSTestCallback::callbackWithBoolean):
        (WebCore):
        (WebCore::JSTestCallback::callbackRequiresThisToPass):
        * bindings/scripts/test/JS/JSTestCallback.h: Ditto.
        (JSTestCallback):
        * bindings/scripts/test/ObjC/DOMTestCallback.h: Ditto.
        * bindings/scripts/test/ObjC/DOMTestCallback.mm: Ditto.
        (-[DOMTestCallback callbackWithBoolean:]):
        (-[DOMTestCallback callbackRequiresThisToPass:thisClassParam:]):
        * bindings/scripts/test/TestCallback.idl: Added test to verify generated code.
        * bindings/scripts/test/V8/V8TestCallback.cpp: Ditto.
        (WebCore::V8TestCallback::callbackWithBoolean):
        (WebCore):
        (WebCore::V8TestCallback::callbackRequiresThisToPass):
        * bindings/scripts/test/V8/V8TestCallback.h: Ditto.
        (V8TestCallback):

2012-04-18  'Pavel Feldman'  <pfeldman@chromium.org>

        Not reviewed: fixing Chromium win compilation.

        * bindings/v8/V8IsolatedContext.cpp:

2012-04-18  Luke Macpherson  <macpherson@chromium.org>

        Remove unnecessary variable reassignment in CSSParser::parseImageSet().
        https://bugs.webkit.org/show_bug.cgi?id=84204

        Reviewed by Kentaro Hara.

        Code calls next and then current instead of reusing the result of next.

        No new tests / no functionality changed.

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

2012-04-18  Jason Liu  <jason.liu@torchmobile.com.cn>

        [BlackBerry] HTTP GET header has a "Cookie" when refreshing a page after cookies have been cleared.
        https://bugs.webkit.org/show_bug.cgi?id=84223

        Reviewed by George Staikos.

        Webkit uses the old ResourceRequest when refreshing. Its cookies' header isn't removed after clicking
        "clear cookies" button. We need to set cookies for this request again.

        We must click "clear button" to test, so have to write a manual test case.

        Test: ManualTests/blackberry/clear-cookie-refresh.php

        * platform/network/blackberry/ResourceRequestBlackBerry.cpp:
        (WebCore::ResourceRequest::initializePlatformRequest):

2012-04-17  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: [Chromium] Module's require injects scripts before the debug id is set to the context.
        https://bugs.webkit.org/show_bug.cgi?id=84166

        Reviewed by Yury Semikhatsky.

        V8IsolatedContext was getting debug id assigned post-construction. At the same time, it was compiling all
        its module scripts within the constructor. As a result, scripts ended up in the main world's list.

        * bindings/v8/V8IsolatedContext.cpp:
        (WebCore::setInjectedScriptContextDebugId):
        (WebCore):
        (WebCore::V8IsolatedContext::V8IsolatedContext):
        * bindings/v8/V8Proxy.cpp:
        (WebCore::V8Proxy::evaluateInIsolatedWorld):
        * bindings/v8/V8Proxy.h:
        (V8Proxy):

2012-04-17  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: document.open removes the documentElement, but does not clear the elements panel.
        https://bugs.webkit.org/show_bug.cgi?id=84179

        Reviewed by Yury Semikhatsky.

        Perform total update upon modifications of the document node.

        Test: inspector/elements/delete-from-document.html

        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::didRemoveDOMNode):
        * inspector/front-end/ElementsTreeOutline.js:

2012-04-18  Max Feil  <mfeil@rim.com>

        [BlackBerry] Tab awareness for HTML5 concurrent audio
        https://bugs.webkit.org/show_bug.cgi?id=82930
        Support for concurrent HTML5 audio improvements being made in
        the platform library, which need to be aware of tabs and tab
        visibility. PR96004.

        Reviewed by George Staikos.

        Test: media/audio-concurrent-supported.html

        * platform/blackberry/PageClientBlackBerry.h:
        * platform/graphics/blackberry/MediaPlayerPrivateBlackBerry.cpp:
        (WebCore::MediaPlayerPrivate::MediaPlayerPrivate):
        (WebCore::MediaPlayerPrivate::showErrorDialog):
        (WebCore::MediaPlayerPrivate::isTabVisible):
        (WebCore):
        * platform/graphics/blackberry/MediaPlayerPrivateBlackBerry.h:
        (MediaPlayerPrivate):

2012-04-18  Noel Gordon  <noel.gordon@gmail.com>

        [CG] ImageBuffer: check getPremultipliedImageData() error return
        https://bugs.webkit.org/show_bug.cgi?id=84022

        Reviewed by Eric Seidel.

        ImageBuffer::getPremultipliedImageData() can fail. toDataURL() should check for a
        failure return, and return "data:," if so.

        No new tests. Covered by existing toDataURL tests, in particular:
          canvas/philip/tests/toDataURL.jpeg.alpha.html

        * platform/graphics/cg/ImageBufferCG.cpp:
        (WebCore::ImageBuffer::toDataURL): Rename |arr| variable to premultipliedData and
        return "data:," if premultipliedData is empty. Clean up whitespace and a comment.

2012-04-17  Rachel Blum  <groby@chromium.org>

        Skia OOM error when upscaling small subsets of images by large quantities
        https://bugs.webkit.org/show_bug.cgi?id=84225

        Reviewed by David Levin.

        Tested with manual tests. 

        * platform/graphics/skia/NativeImageSkia.cpp:
        (WebCore::NativeImageSkia::shouldCacheResampling):

2012-04-17  MORITA Hajime  <morrita@google.com>

        ShadowRoot shouldn't be adopted by any Document.
        https://bugs.webkit.org/show_bug.cgi?id=84127

        Reviewed by Dimitri Glazkov.

        ShadowRoot cannot cannot be removed from its host, which means
        ShadowRoot cannot be adopted by any Document directly because the
        adoptNode() tries to remove it from its parent but it doesn't make
        sense for ShadowRoot.

        This change adds a guard to check such a case.

        Test: fast/dom/shadow/adopt-node-with-shadow-root.html

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

2012-04-17  John Bauman  <jbauman@chromium.org>

        [chromium] Ensure RateLimiter waits for Swapbuffers completion
        https://bugs.webkit.org/show_bug.cgi?id=83649

        Reviewed by James Robinson.

        We were waiting only on the canvas context, which with the new GPU
        scheduling was causing the RateLimiter not to ratelimit enough. We
        need to insert no-op commands in the compositor context, so that we'll
        wait for the canvas context and SwapBuffers as well.

        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::doNoOp):
        (WebCore):
        * platform/graphics/chromium/LayerRendererChromium.h:
        (LayerRendererChromium):
        * platform/graphics/chromium/RateLimiter.cpp:
        (WebCore::RateLimiter::create):
        (WebCore::RateLimiter::RateLimiter):
        (WebCore::RateLimiter::rateLimitContext):
        * platform/graphics/chromium/RateLimiter.h:
        (RateLimiterClient):
        (WebCore):
        (RateLimiter):
        * platform/graphics/chromium/cc/CCLayerTreeHost.cpp:
        (WebCore::CCLayerTreeHost::startRateLimiter):
        (WebCore::CCLayerTreeHost::rateLimit):
        (WebCore):
        * platform/graphics/chromium/cc/CCLayerTreeHost.h:
        (CCLayerTreeHost):
        * platform/graphics/chromium/cc/CCProxy.h:
        (CCProxy):
        * platform/graphics/chromium/cc/CCSingleThreadProxy.cpp:
        (WebCore::CCSingleThreadProxy::forceNoOpCommand):
        (WebCore):
        * platform/graphics/chromium/cc/CCSingleThreadProxy.h:
        (CCSingleThreadProxy):
        * platform/graphics/chromium/cc/CCThreadProxy.cpp:
        (WebCore::CCThreadProxy::forceNoOpCommand):
        (WebCore):
        (WebCore::CCThreadProxy::forceNoOpCommandOnImplThread):
        * platform/graphics/chromium/cc/CCThreadProxy.h:
        (CCThreadProxy):

2012-04-17  Andreas Kling  <kling@webkit.org>

        CSSValuePool: Made identifier value cache a fixed-size array.
        <http://webkit.org/b/84219>

        Reviewed by Antti Koivisto.

        Change the identifier CSSPrimitiveValue cache in CSSValuePool from a HashMap to a
        fixed-size array of RefPtr<CSSPrimitiveValue>s.

        We have ~700 values total, so this is quite space efficient now that the CSSValuePool
        is globally shared. More importantly it avoids a hash lookup every time we need an
        identifier value.

        * css/CSSValuePool.h:
        * css/CSSValuePool.cpp:
        (WebCore::CSSValuePool::createIdentifierValue):

2012-04-17  Antoine Labour  <piman@chromium.org>

        [Chromium] Clean up texture ids on the impl side when losing the context
        https://bugs.webkit.org/show_bug.cgi?id=84122

        Reviewed by James Robinson.

        Tested by CCLayerTreeHostImplTest.dontUseOldResourcesAfterLostContext.

        * platform/graphics/chromium/cc/CCTextureLayerImpl.cpp:
        (WebCore::CCTextureLayerImpl::didLoseContext):
        * platform/graphics/chromium/cc/CCTiledLayerImpl.cpp:
        (WebCore::CCTiledLayerImpl::didLoseContext):
        (WebCore):
        * platform/graphics/chromium/cc/CCTiledLayerImpl.h:
        (CCTiledLayerImpl):
        * platform/graphics/chromium/cc/CCVideoLayerImpl.cpp:
        (WebCore::CCVideoLayerImpl::didLoseContext):
        (WebCore):
        * platform/graphics/chromium/cc/CCVideoLayerImpl.h:
        (CCVideoLayerImpl):

2012-04-17  Emil A Eklund  <eae@chromium.org>

        Change RenderThemeChromiumSkia paint methods to use pixel snapping
        https://bugs.webkit.org/show_bug.cgi?id=84175

        Reviewed by Eric Seidel.

        No new tests, no change in functionality.

        Change RenderThemeChromiumSkia to use subpixel types and pixel snap
        values just before painting.

        * rendering/RenderThemeChromiumSkia.cpp:
        (WebCore::RenderThemeChromiumSkia::convertToPaintingRect):
        (WebCore::RenderThemeChromiumSkia::paintSearchFieldCancelButton):
        (WebCore::RenderThemeChromiumSkia::paintSearchFieldResultsDecoration):
        (WebCore::RenderThemeChromiumSkia::paintSearchFieldResultsButton):
        * rendering/RenderThemeChromiumSkia.h:

 2012-04-17  Levi Weintraub  <leviw@chromium.org>

        Clean up outstanding LayoutUnit misuse in WebCore
        https://bugs.webkit.org/show_bug.cgi?id=84209

        Reviewed by Eric Seidel.

        Small changes to a handful of files to prepare trunk for FractionalLayoutUnits.
        For more details, see https://trac.webkit.org/wiki/LayoutUnit

        No new tests. No change in behavior.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue): minimumValueForLength preserves
        sub-pixel precision, so we should avoid unnecessarily using integers.
        * platform/graphics/FractionalLayoutPoint.h:
        (WebCore::FractionalLayoutPoint::FractionalLayoutPoint): Adding an explicit constructor from
        FractionalLayoutSizes. This mirrors a method in IntPoint.
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paintBorder): The rects that change come from roundedRects,
        which are already pixel-snapped.
        * rendering/RenderBoxModelObject.h: Removing a comment that is no longer applicable.
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::computeLogicalWidth): Since we layout tables using integers, we
        need to explicitly calculate the width to be integral as well to avoid pushing the next element
        over by a pixel that we won't later paint with our own box decorations.
        * rendering/RenderText.h:
        (RenderText): Correcting an unfortunate mismatch between in the return value of linesBoundingBox
        between the header and implementation.
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::getRoundedBorderFor): We were incorrectly not using the snapped border
        rect to pass to calcRadiiFor (which takes an IntRect). Correcting this.

2012-04-17  Luke Macpherson  <macpherson@chromium.org>

        Ensure CSSParser member variables are initialized.
        https://bugs.webkit.org/show_bug.cgi?id=84205

        Reviewed by Andreas Kling.

        No new tests / code cleanup only.

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

2012-04-16  Alexandru Chiculita  <achicu@adobe.com>

        Regression(114172): Use after free in CustomFilterProgram::notifyClients
        https://bugs.webkit.org/show_bug.cgi?id=84000

        Reviewed by Dean Jackson.

        The function returned early and the shaders didn't have a chance to be saved. Moving
        those two lines before the return false just to make sure that FilterEffectRenderer never adds
        itself as a client for a shader without keeping track of that.

        No new tests. The problem reproduces with existing tests.
        css3/filters/custom/custom-filter-property-computed-style.html
        css3/filters/custom/effect-custom-combined-missing.html

        * rendering/FilterEffectRenderer.cpp:
        (WebCore::FilterEffectRenderer::build):

2012-04-17  Alec Flett  <alecflett@chromium.org>

        IndexedDB chooses wrong record on PREV_NO_DUPLICATE index cursor
        https://bugs.webkit.org/show_bug.cgi?id=60746

        Reviewed by Ojan Vafai.

        When iterating backwards with PREV_NO_DUPLICATE, keep walking past
        the 'prev' key until it changes, then walk forward one time. This
        covers the object store and index cases.

        Test: storage/indexeddb/mozilla/index-prev-no-duplicate.html

        * Modules/indexeddb/IDBLevelDBBackingStore.cpp:
        (WebCore):

2012-04-17  Yi Shen  <yi.4.shen@nokia.com>

        Caret is not rendered properly inside an input element with text-indent
        https://bugs.webkit.org/show_bug.cgi?id=82688

        Reviewed by Ryosuke Niwa.

        For an empty input element, there is no RenderText. Instead, RenderBlock::localCaretRect provides
        the caret position for rendering the caret in the empty input element. To get correct caret rect,
        textIndentOffset() should be used to adjust the caret's position.

        Test: editing/style/text-indent.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::localCaretRect):

2012-04-17  Filip Pizlo  <fpizlo@apple.com>

        It should be possible to create an inheritorID for the global this object without crashing
        https://bugs.webkit.org/show_bug.cgi?id=84200
        <rdar://problem/11251082>

        Reviewed by Oliver Hunt.

        No new tests, because the circumstances necessary to make this happen are rather hairy.

        * bindings/js/JSDOMWindowShell.h:
        (WebCore::JSDOMWindowShell::window):
        (WebCore::JSDOMWindowShell::setWindow):

2012-04-17  Luke Macpherson  <macpherson@chromium.org>

        Make CSSParser::parseValue()'s handling of CSSPropertyCursor more obviously correct.
        https://bugs.webkit.org/show_bug.cgi?id=83544

        Reviewed by Kentaro Hara.

        No new tests / code cleanup only.

        The code as it stands appears to be correct, but static analysis was concerned that value could become null.
        This patch adds a null check and ASSERT_NOT_REACHED() to make the code more obviously correct.

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

2012-04-17  David Reveman  <reveman@chromium.org>

        [Chromium] Add TextureUploader which allows us to use persistent GC3D state for texture uploads.
        https://bugs.webkit.org/show_bug.cgi?id=83972

        Reviewed by James Robinson.

        Add TextureUploader class that allows us to add persistent GC3D state to the upload machinery.

        * WebCore.gypi:
        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::initializeSharedObjects):
        (WebCore::LayerRendererChromium::cleanupSharedObjects):
        * platform/graphics/chromium/LayerRendererChromium.h:
        (WebCore::LayerRendererChromium::textureUploader):
        (LayerRendererChromium):
        * platform/graphics/chromium/TextureUploader.cpp: Added.
        (WebCore):
        (WebCore::AcceleratedTextureUploader::AcceleratedTextureUploader):
        (WebCore::AcceleratedTextureUploader::~AcceleratedTextureUploader):
        (WebCore::AcceleratedTextureUploader::uploadTexture):
        * platform/graphics/chromium/TextureUploader.h: Added.
        (WebCore):
        (TextureUploader):
        (WebCore::TextureUploader::~TextureUploader):
        (AcceleratedTextureUploader):
        (WebCore::AcceleratedTextureUploader::create):
        * platform/graphics/chromium/cc/CCSingleThreadProxy.cpp:
        (WebCore::CCSingleThreadProxy::doCommit):
        * platform/graphics/chromium/cc/CCTextureUpdater.cpp:
        (WebCore::CCTextureUpdater::update):
        * platform/graphics/chromium/cc/CCTextureUpdater.h:
        (WebCore):
        (CCTextureUpdater):
        * platform/graphics/chromium/cc/CCThreadProxy.cpp:
        (WebCore::CCThreadProxy::scheduledActionUpdateMoreResources):

2012-04-17  Luke Macpherson  <macpherson@chromium.org>

        Clean up CSSParser::parseFillRepeat().
        https://bugs.webkit.org/show_bug.cgi?id=83547

        Reviewed by Kentaro Hara.

        Removed multiple unnecessary calls to m_valueList->current().
        Restructured logic for parsing second value to make it clearer.

        No new tests / code cleanup only.

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

2012-04-17  Kentaro Hara  <haraken@chromium.org>

        [V8] Pass Isolate to toV8Slow()
        https://bugs.webkit.org/show_bug.cgi?id=84173

        Reviewed by Nate Chapin.

        The final objective is to pass Isolate around in V8 bindings.
        This patch passes the Isolate to toV8Slow().

        No tests. No change in behavior.

        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateHeader):
        * bindings/v8/custom/V8NodeCustom.cpp:
        (WebCore::toV8Slow):

2012-04-17  Julien Chaffraix  <jchaffraix@webkit.org>

        Fix the ACCELERATED_COMPOSITING code to not expose RenderLayer outside rendering
        https://bugs.webkit.org/show_bug.cgi?id=83816

        Reviewed by James Robinson.

        No change in behavior expected.

        This code adds several functions on RenderBoxModelObject to forward
        to the associated layer. This removes the RenderLayer dependencies
        at the call sites.

        Currently only RenderBoxModelObject can be hardware accelerated as
        we need a RenderLayer, this looks like the best place to put those
        new functions.

        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::contentChanged):
        (WebCore::RenderBoxModelObject::hasAcceleratedCompositing):
        (WebCore::RenderBoxModelObject::startTransition):
        (WebCore::RenderBoxModelObject::transitionPaused):
        (WebCore::RenderBoxModelObject::transitionFinished):
        (WebCore::RenderBoxModelObject::startAnimation):
        (WebCore::RenderBoxModelObject::animationPaused):
        (WebCore::RenderBoxModelObject::animationFinished):
        (WebCore::RenderBoxModelObject::suspendAnimations):
        * rendering/RenderBoxModelObject.h:
        Added the previous functions to hide the layer need.

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::hasAcceleratedCompositing):
        * rendering/RenderLayer.h:
        Removed the previous method as it was superseeded by the
        one on RenderBoxModelObject. Also moved the ContentChangeType
        enumaration.

        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::contentChanged):
        * rendering/RenderLayerBacking.h:
        (RenderLayerBacking):
        Updated after the ContentChangeType enumaration move.

        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::reset):
        (WebCore::HTMLCanvasElement::paintsIntoCanvasBuffer):
        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::didDraw):
        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::markContextChanged):
        (WebCore::WebGLRenderingContext::reshape):
        * page/animation/AnimationBase.cpp:
        (WebCore::AnimationBase::freezeAtTime):
        * page/animation/ImplicitAnimation.cpp:
        (WebCore::ImplicitAnimation::startAnimation):
        (WebCore::ImplicitAnimation::pauseAnimation):
        (WebCore::ImplicitAnimation::endAnimation):
        * page/animation/KeyframeAnimation.cpp:
        (WebCore::KeyframeAnimation::startAnimation):
        (WebCore::KeyframeAnimation::pauseAnimation):
        (WebCore::KeyframeAnimation::endAnimation):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::imageChanged):
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::imageDimensionsChanged):
        (WebCore::RenderImage::notifyFinished):
        * rendering/RenderVideo.cpp:
        (WebCore::RenderVideo::updatePlayer):
        Updated all those call sites to use the new functions. Also
        removed unneeded RenderLayer.h include as we went.

2012-04-16  Andy Estes  <aestes@apple.com>

        -webkit-mask-box-image does not draw when layer tree flattening is enabled
        https://bugs.webkit.org/show_bug.cgi?id=84111

        Reviewed by Simon Fraser.

        No new tests since taking pixel test results with
        PaintBehaviorFlattenCompositingLayers set is not currently supported.
        <https://bugs.webkit.org/show_bug.cgi?id=84110> tracks fixing this.

        When painting mask images, we should take the non-composited path if
        layers are being flattened.

        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::paintMask):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::paintMaskImages):

2012-04-17  Emil A Eklund  <eae@chromium.org>

        Rollout r114404 as it broke a couple of chromium builds.

        * platform/FractionalLayoutUnit.h:
        (WebCore::FractionalLayoutUnit::FractionalLayoutUnit):
        (WebCore::FractionalLayoutUnit::isInBounds):
        (WebCore):

2012-04-17  Ben Murdoch  <benm@google.com>

        `localStorage.setItem` can overwrite `localStorage` methods
        https://bugs.webkit.org/show_bug.cgi?id=30996

        Update the JSC and V8 bindings such that if the name of the DOM
        Storage property being retrieved is a match for a property in the
        prototype, always return the prototype version. If there is a DOM
        Storage key of the same name, it can still be retrieved via the
        getItem method. This prevents storage methods from being
        accidentally hidden. This brings WebKit behavior in line with the
        de facto standard implemented by FireFox and IE.

        Reviewed by Kentaro Hara.

        Test: storage/domstorage/storage-functions-not-overwritten.html

        * bindings/js/JSStorageCustom.cpp:
        (WebCore::JSStorage::nameGetter):
        * bindings/v8/custom/V8StorageCustom.cpp:
        (WebCore::V8Storage::namedPropertyGetter):

2012-04-17  Emil A Eklund  <eae@chromium.org>

        Fix Chromium/Windows build broken by r114404.

        * platform/FractionalLayoutUnit.h:

2012-04-17  Kentaro Hara  <haraken@chromium.org>

        [Performance][V8] Skip Isolate look-up to find StringCache
        https://bugs.webkit.org/show_bug.cgi?id=84103

        Reviewed by Nate Chapin.

        This patch improves the performance of a lot of DOM attribute
        getters that return a string.

        - Improves the performance of Dromaeo/dom-attr.html(element.property)
          by 27.7%.
        - Improves the performance of Dromaeo/dom-attr.html(getAttribute)
          by 10.6%.
        - Improves the performance of div.id, div.className,
          div.nodeName, text.nodeValue, text.textContent by 12% -- 21%.

        The followings are the test results in my Linux desktop.

        Performance test: Dromaeo/dom-attr.html
        Total:                     674.64runs/s ->  707.03runs/s (+ 4.8%)
        getAttribute:             1537.60runs/s -> 1700.20runs/s (+10.6%)
        element.property:         1389.00runs/s -> 1774.20runs/s (+27.7%)
        setAttribute:              538.88runs/s ->  548.87runs/s (+ 1.9%)
        element.property = value:  644.07runs/s ->  656.67runs/s (+ 2.0%)
        element.expando = value:   219.76runs/s ->  207.14runs/s (- 6.8%)
        element.expando:           578.77runs/s ->  554.67runs/s (- 4.2%)

        Performance test: https://bugs.webkit.org/attachment.cgi?id=137440
        div.id:           30.70ns -> 26.70ns (+15%)
        div.className:    31.10ns -> 26.40ns (+18%)
        div.nodeName:     37.70ns -> 33.00ns (+14%)
        text.nodeValue:   31.40ns -> 25.90ns (+21%)
        text.textContent: 51.50ns -> 45.90ns (+12%)

        Previously V8 bindings need to look up an Isolate to find
        an Isolate-local StringCache. This patch skips the look-up
        by getting the Isolate from AccessorInfo.GetIsolate()
        or Arguments.GetIsolate().

        No tests. No change in behavior.

        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateNormalAttrGetter):
        (GenerateFunctionCallString):
        (NativeToJSValue):
        * bindings/v8/V8Binding.cpp:
        (WebCore::getElementStringAttr):
        * bindings/v8/V8Binding.h:
        (WebCore::v8ExternalString): Make 'isolate' an optional argument.
        Ideally we want to make 'isolate' a non-optional argument,
        but it is difficult to rewrite all v8ExternalString() callers
        at a breath. We can rewrite them incrementally.
        (WebCore::v8String): Ditto.
        (WebCore::v8StringOrNull): Ditto.
        (WebCore::v8StringOrUndefined): Ditto.
        (WebCore::v8StringOrFalse): Ditto.

        * bindings/scripts/test/V8/V8TestEventConstructor.cpp: Updated run-bindings-tests results.
        (WebCore::TestEventConstructorV8Internal::attr1AttrGetter):
        (WebCore::TestEventConstructorV8Internal::attr2AttrGetter):
        * bindings/scripts/test/V8/V8TestInterface.cpp:
        (WebCore::TestInterfaceV8Internal::supplementalStr1AttrGetter):
        (WebCore::TestInterfaceV8Internal::supplementalStr2AttrGetter):
        * bindings/scripts/test/V8/V8TestObj.cpp:
        (WebCore::TestObjV8Internal::readOnlyStringAttrAttrGetter):
        (WebCore::TestObjV8Internal::stringAttrAttrGetter):
        (WebCore::TestObjV8Internal::reflectedStringAttrAttrGetter):
        (WebCore::TestObjV8Internal::reflectedURLAttrAttrGetter):
        (WebCore::TestObjV8Internal::reflectedCustomURLAttrAttrGetter):
        (WebCore::TestObjV8Internal::stringAttrWithGetterExceptionAttrGetter):
        (WebCore::TestObjV8Internal::stringAttrWithSetterExceptionAttrGetter):
        (WebCore::TestObjV8Internal::hashAttrGetter):
        (WebCore::TestObjV8Internal::conditionalMethod1Callback):

2012-04-17  Chris Fleizach  <cfleizach@apple.com>

        Crash in invalid index for _textMarkerForIndex
        https://bugs.webkit.org/show_bug.cgi?id=84104

        Reviewed by Beth Dakin.

        Test: platform/mac/accessibility/textmarker-for-index-out-of-bounds-crash.html

        * accessibility/mac/WebAccessibilityObjectWrapper.mm:
        (-[WebAccessibilityObjectWrapper _textMarkerForIndex:]):

2012-04-17  Jer Noble  <jer.noble@apple.com>

        HTML5 Video Full Screen button broken (looks like white square)
        https://bugs.webkit.org/show_bug.cgi?id=84101

        Reviewed by Dan Bernstein.

        No new tests; updated platform results which were previously rebaselined.

        Use the correct CSS keyword for the -webkit-appearance of the full screen button.

        * css/mediaControls.css:
        (audio::-webkit-media-controls-fullscreen-button, video::-webkit-media-controls-fullscreen-button):

2012-04-17  Tom Sepez  <tsepez@chromium.org>

        Framesniffing defense is too aggressive.
        https://bugs.webkit.org/show_bug.cgi?id=83721

        Reviewed by James Robinson.

        The RenderLayer code currently propagates scroll position to parent frames
        without any cross-origin checks.  This gives it a quick origin boundary check
        that is set by FrameLoader only when performing a fragment navigation.  This 
        allows us to safely relax the restriction on not scrolling at load time in 
        FrameLoader since the safe thing will happen later on at scroll time.
        
        Test: http/tests/navigation/anchor-frames-same-origin.html

        * dom/Document.cpp:
        (WebCore::Document::findUnsafeParentScrollPropagationBoundary):
        * dom/Document.h:
        (Document):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::finishedParsing):
        (WebCore::FrameLoader::loadInSameDocument):
        (WebCore::FrameLoader::scrollToFragmentWithParentBoundary):
        * loader/FrameLoader.h:
        (FrameLoader):
        * page/FrameView.cpp:
        (WebCore::FrameView::FrameView):
        (WebCore::FrameView::reset):
        * page/FrameView.h:
        (WebCore::FrameView::safeToPropagateScrollToParent):
        (WebCore::FrameView::setSafeToPropagateScrollToParent):
        (FrameView):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::scrollRectToVisible):

2012-04-17  Emil A Eklund  <eae@chromium.org>

        Add size_t versions of multiplication and division operators to FractionalLayoutUnit
        https://bugs.webkit.org/show_bug.cgi?id=83848

        Reviewed by Julien Chaffraix.

        Add size_t versions of operator* and operator/ for platforms where there
        is no ambiguity between unsigned int and size_t.

        No new tests, no new functionality.

        * platform/FractionalLayoutUnit.h:
        (FractionalLayoutUnit):
        (WebCore::FractionalLayoutUnit::FractionalLayoutUnit):
        (WebCore::FractionalLayoutUnit::isInBounds):
        (WebCore):
        (WebCore::operator*):
        (WebCore::operator/):

2012-04-17  Kentaro Hara  <haraken@chromium.org>

        [V8] Add an optional Isolate argument to toV8().
        https://bugs.webkit.org/show_bug.cgi?id=84161

        Reviewed by Nate Chapin.

        The final objective is to pass Isolate around in V8 bindings.
        This patch adds an optional Isolate argument to toV8().
        After rewriting all toV8() callers so that they pass Isolate,
        I will make the Isolate argument non-optional.

        No tests. No change in behavior.

        * bindings/scripts/CodeGeneratorV8.pm:
        Modified as described above.
        (GenerateHeader):
        (NativeToJSValue):
        * bindings/v8/custom/V8BlobCustom.cpp:
        (WebCore::toV8):
        * bindings/v8/custom/V8CSSRuleCustom.cpp:
        (WebCore::toV8):
        * bindings/v8/custom/V8CSSStyleSheetCustom.cpp:
        (WebCore::toV8):
        * bindings/v8/custom/V8CSSValueCustom.cpp:
        (WebCore::toV8):
        * bindings/v8/custom/V8CanvasPixelArrayCustom.cpp:
        (WebCore::toV8):
        * bindings/v8/custom/V8DOMStringMapCustom.cpp:
        (WebCore::toV8):
        * bindings/v8/custom/V8DOMTokenListCustom.cpp:
        (WebCore::toV8):
        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        (WebCore::toV8):
        * bindings/v8/custom/V8DataViewCustom.cpp:
        (WebCore::toV8):
        * bindings/v8/custom/V8DocumentCustom.cpp:
        (WebCore::toV8):
        * bindings/v8/custom/V8EntryCustom.cpp:
        (WebCore::toV8):
        * bindings/v8/custom/V8EntrySyncCustom.cpp:
        (WebCore::toV8):
        * bindings/v8/custom/V8EventCustom.cpp:
        (WebCore::toV8):
        * bindings/v8/custom/V8Float32ArrayCustom.cpp:
        (WebCore::toV8):
        * bindings/v8/custom/V8Float64ArrayCustom.cpp:
        (WebCore::toV8):
        * bindings/v8/custom/V8HTMLCollectionCustom.cpp:
        (WebCore::toV8):
        * bindings/v8/custom/V8HTMLDocumentCustom.cpp:
        (WebCore::toV8):
        * bindings/v8/custom/V8HTMLElementCustom.cpp:
        (WebCore::toV8):
        * bindings/v8/custom/V8IDBAnyCustom.cpp:
        (WebCore::toV8):
        * bindings/v8/custom/V8IDBKeyCustom.cpp:
        (WebCore::toV8):
        * bindings/v8/custom/V8ImageDataCustom.cpp:
        (WebCore::toV8):
        * bindings/v8/custom/V8Int16ArrayCustom.cpp:
        (WebCore::toV8):
        * bindings/v8/custom/V8Int32ArrayCustom.cpp:
        (WebCore::toV8):
        * bindings/v8/custom/V8Int8ArrayCustom.cpp:
        (WebCore::toV8):
        * bindings/v8/custom/V8LocationCustom.cpp:
        (WebCore::toV8):
        * bindings/v8/custom/V8NamedNodeMapCustom.cpp:
        (WebCore::toV8):
        * bindings/v8/custom/V8NodeCustom.cpp:
        (WebCore::toV8Slow):
        * bindings/v8/custom/V8SVGDocumentCustom.cpp:
        (WebCore::toV8):
        * bindings/v8/custom/V8SVGElementCustom.cpp:
        (WebCore::toV8):
        * bindings/v8/custom/V8SVGPathSegCustom.cpp:
        (WebCore::toV8):
        * bindings/v8/custom/V8ScriptProfileCustom.cpp:
        (WebCore::toV8):
        * bindings/v8/custom/V8ScriptProfileNodeCustom.cpp:
        (WebCore::toV8):
        * bindings/v8/custom/V8StyleSheetCustom.cpp:
        (WebCore::toV8):
        * bindings/v8/custom/V8Uint16ArrayCustom.cpp:
        (WebCore::toV8):
        * bindings/v8/custom/V8Uint32ArrayCustom.cpp:
        (WebCore::toV8):
        * bindings/v8/custom/V8Uint8ArrayCustom.cpp:
        (WebCore::toV8):
        * bindings/v8/custom/V8Uint8ClampedArrayCustom.cpp:
        (WebCore::toV8):
        * bindings/v8/custom/V8WorkerContextCustom.cpp:
        (WebCore::toV8):

        * bindings/scripts/test/V8/V8Float64Array.h:
        Updated run-bindings-tests results.
        (WebCore):
        (WebCore::toV8):
        * bindings/scripts/test/V8/V8TestActiveDOMObject.h:
        (WebCore::toV8):
        * bindings/scripts/test/V8/V8TestCustomNamedGetter.h:
        (WebCore::toV8):
        * bindings/scripts/test/V8/V8TestEventConstructor.h:
        (WebCore::toV8):
        * bindings/scripts/test/V8/V8TestEventTarget.h:
        (WebCore::toV8):
        * bindings/scripts/test/V8/V8TestInterface.h:
        (WebCore::toV8):
        * bindings/scripts/test/V8/V8TestMediaQueryListListener.h:
        (WebCore::toV8):
        * bindings/scripts/test/V8/V8TestNamedConstructor.h:
        (WebCore::toV8):
        * bindings/scripts/test/V8/V8TestNode.h:
        (WebCore::toV8):
        * bindings/scripts/test/V8/V8TestObj.h:
        (WebCore::toV8):
        * bindings/scripts/test/V8/V8TestSerializedScriptValueInterface.h:
        (WebCore::toV8):

2012-04-17  Yury Semikhatsky  <yurys@chromium.org>

        Web Inspector: move heap snapshot data grids into their own file
        https://bugs.webkit.org/show_bug.cgi?id=84160

        Moved heap snapshot data grids into a separate file.

        Reviewed by Pavel Feldman.

        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * inspector/compile-front-end.py:
        * inspector/front-end/DataGrid.js:
        * inspector/front-end/HeapSnapshotDataGrids.js: Added.
        (WebInspector.HeapSnapshotSortableDataGrid):
        (WebInspector.HeapSnapshotSortableDataGrid.prototype.dispose):
        (WebInspector.HeapSnapshotSortableDataGrid.prototype.resetSortingCache):
        (WebInspector.HeapSnapshotSortableDataGrid.prototype.sortingChanged.SortByTwoFields):
        (WebInspector.HeapSnapshotSortableDataGrid.prototype.sortingChanged):
        (WebInspector.HeapSnapshotSortableDataGrid.prototype.updateVisibleNodes):
        (WebInspector.HeapSnapshotSortableDataGrid.prototype.onResize):
        (WebInspector.HeapSnapshotSortableDataGrid.prototype._onScroll):
        (WebInspector.HeapSnapshotSortableDataGrid.prototype._performSorting):
        (WebInspector.HeapSnapshotSortableDataGrid.prototype.recursiveSortingEnter):
        (WebInspector.HeapSnapshotSortableDataGrid.prototype.recursiveSortingLeave):
        (WebInspector.HeapSnapshotContainmentDataGrid):
        (WebInspector.HeapSnapshotContainmentDataGrid.prototype._defaultPopulateCount.100.expandRoute.nextStep.else.afterExpand):
        (WebInspector.HeapSnapshotContainmentDataGrid.prototype._defaultPopulateCount.100.expandRoute):
        (WebInspector.HeapSnapshotContainmentDataGrid.prototype.setDataSource):
        (WebInspector.HeapSnapshotContainmentDataGrid.prototype.sortingChanged):
        (WebInspector.HeapSnapshotRetainmentDataGrid):
        (WebInspector.HeapSnapshotRetainmentDataGrid.prototype._sortFields):
        (WebInspector.HeapSnapshotRetainmentDataGrid.prototype.reset):
        (WebInspector.HeapSnapshotConstructorsDataGrid):
        (WebInspector.HeapSnapshotConstructorsDataGrid.prototype._defaultPopulateCount.100._sortFields):
        (WebInspector.HeapSnapshotConstructorsDataGrid.prototype.setDataSource):
        (WebInspector.HeapSnapshotConstructorsDataGrid.prototype.populateChildren):
        (WebInspector.HeapSnapshotConstructorsDataGrid.prototype._filterSelectIndexChanged):
        (WebInspector.HeapSnapshotDiffDataGrid):
        (WebInspector.HeapSnapshotDiffDataGrid.prototype._defaultPopulateCount.50._sortFields):
        (WebInspector.HeapSnapshotDiffDataGrid.prototype.setDataSource):
        (WebInspector.HeapSnapshotDiffDataGrid.prototype._baseProfileIndexChanged):
        (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):
        * inspector/front-end/HeapSnapshotView.js:
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/inspector.html:

2012-04-17  Vivek Galatage  <vivekgalatage@gmail.com>

        Script make_names.pl should generate consistent .h & .cpp files
        https://bugs.webkit.org/show_bug.cgi?id=84140

        Reviewed by Kentaro Hara.

        Added a newline character and removed ';' after the DEFINE_GLOBAL

        No test cases required for this change.

        * dom/make_names.pl:
        (printNamesCppFile):

2012-04-17  Aaron Colwell  <acolwell@chromium.org>

        Add webkitSourceAddId() & webkitSourceRemoveId() to HTMLMediaElement
        and propagate calls to the MediaPlayerPrivate interface.
        These are needed to bring the Media Source implementation 
        up to date with the new 0.4 version of the Media Source spec.
        http://html5-mediasource-api.googlecode.com/svn/tags/0.4/draft-spec/mediasource-draft-spec.html
        https://bugs.webkit.org/show_bug.cgi?id=83616

        Reviewed by Eric Carlson, Darin Fisher.

        Test: http/tests/media/media-source/webm/video-media-source-add-and-remove-ids.html

        * html/HTMLMediaElement.cpp:
        (WebCore):
        (WebCore::HTMLMediaElement::isValidSourceId):
        (WebCore::HTMLMediaElement::webkitSourceAddId):
        (WebCore::HTMLMediaElement::webkitSourceRemoveId):
        (WebCore::HTMLMediaElement::setSourceState):
        * html/HTMLMediaElement.h:
        (HTMLMediaElement):
        * html/HTMLMediaElement.idl:
        * platform/graphics/MediaPlayer.cpp:
        (WebCore::NullMediaPlayerPrivate::sourceAddId):
        (WebCore::NullMediaPlayerPrivate::sourceRemoveId):
        (WebCore):
        (WebCore::MediaPlayer::sourceAddId):
        (WebCore::MediaPlayer::sourceRemoveId):
        * platform/graphics/MediaPlayer.h:
        * platform/graphics/MediaPlayerPrivate.h:
        (WebCore::MediaPlayerPrivateInterface::sourceAddId):
        (WebCore::MediaPlayerPrivateInterface::sourceRemoveId):

2012-04-17  Alexander Pavlov  <apavlov@chromium.org>

        Web Inspector: [CRASH] InspectorDOMAgent::didInsertDOMNode() on page reload with open Inspector
        https://bugs.webkit.org/show_bug.cgi?id=84154

        Check that a node inserted actually has a parent.

        Reviewed by Yury Semikhatsky.

        Test: inspector/elements/elements-panel-reload-assert.html

        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::didInsertDOMNode):

2012-04-17  Dana Jansens  <danakj@chromium.org>

        [chromium] Consistent checking for clipped rects when we need the computed result enclosed within the real result
        https://bugs.webkit.org/show_bug.cgi?id=83543

        Reviewed by Adrienne Walker.

        It should not be possible to make a rect in layer space that is clipped
        by the camera but for which the screen space transform gives a
        rectilinear output. But use consistent methods for checking that the
        result remains enclosed within the actual pixels.

        One day when clipped is true, we can find an interior axis-aligned rect
        within the clipped result, and checking clipped explicitly makes this
        more clear.

        Covered by existing tests.

        * platform/graphics/chromium/cc/CCOcclusionTracker.cpp:
        (WebCore::computeOcclusionBehindLayer):
        (WebCore::::markOccludedBehindLayer):

2012-04-17  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Suggest box appears after the command was executed in console sometimes.
        https://bugs.webkit.org/show_bug.cgi?id=84148

        Reviewed by Pavel Feldman.

        TextPrompt.complete() requests completions asynchronously, this change adds a flag
        that informs TextPrompt._completionsReady() whether completions should still be shown.

        * inspector/front-end/TextPrompt.js:
        (WebInspector.TextPrompt.prototype.clearAutoComplete):
        (WebInspector.TextPrompt.prototype.complete):
        (WebInspector.TextPrompt.prototype._completionsReady):

2012-04-17  Yong Li  <yoli@rim.com>

        REGRESSION (r105453): Crash when handling touch events
        https://bugs.webkit.org/show_bug.cgi?id=81958

        Reviewed by Antonio Gomes.

        Always perform sanity checks when handling every touch point
        because the node and document may have been destroyed or detached.

        ManualTests/touch-stale-iframe-crash.html added.
        (DumpRenderTree doesn't support transiting touch states in one shot yet)

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

2012-04-17  Allan Sandfeld Jensen  <allan.jensen@nokia.com>

        Asserts in XMLHttpRequestProgressEventThrottle
        https://bugs.webkit.org/show_bug.cgi?id=81506

        Reviewed by Julien Chaffraix.

        The asserts were incorrectly triggered because suspending active DOM objects
        (which suspends the XMLHttpRequestProgressEventThrottle) doesn't stop JavaScript
        from running or suspend any running loader we may have. The previous code would
        assume those 2 cases were impossible.

        When XmlHttpRequest::open is called or data is received while the XmlHttpRequest object
        is suspended the object may attempt to dispatch events. This patch defers these events
        until the object is resumed.

        Progress events are coalesced similar to normal throttling, and readystate-change events
        are coalesced to avoid identical events emitted right after eachother.

        On resume the events are dispatched after a timer to avoid interfering with 
        ScriptExecutionContext which is iterating over suspended objects.

        Test: fast/events/pagehide-xhr-open.html

        * xml/XMLHttpRequestProgressEventThrottle.cpp:
        (WebCore::XMLHttpRequestProgressEventThrottle::XMLHttpRequestProgressEventThrottle):
        (WebCore::XMLHttpRequestProgressEventThrottle::dispatchProgressEvent):
        (WebCore::XMLHttpRequestProgressEventThrottle::dispatchEvent):
        (WebCore::XMLHttpRequestProgressEventThrottle::flushProgressEvent):
        (WebCore::XMLHttpRequestProgressEventThrottle::dispatchDeferredEvents):
        (WebCore::XMLHttpRequestProgressEventThrottle::fired):
        (WebCore::XMLHttpRequestProgressEventThrottle::suspend):
        (WebCore::XMLHttpRequestProgressEventThrottle::resume):
        * xml/XMLHttpRequestProgressEventThrottle.h:
        (XMLHttpRequestProgressEventThrottle):

2012-04-16  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: [Chromium] Crash when inspecting empty IndexedDB object store.
        https://bugs.webkit.org/show_bug.cgi?id=84035

        Reviewed by Pavel Feldman.

        Added a check that m_idbCursor is not null before calling postSuccessHandlerCallback() on it.

        * inspector/InspectorIndexedDBAgent.cpp:
        (WebCore):

2012-04-17  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: [regression r112413]content scripts tree outline is not added to the tab.
        https://bugs.webkit.org/show_bug.cgi?id=84146

        Reviewed by Vsevolod Vlasov.

        Adding the tree to the container.

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

2012-04-17  Mariusz Grzegorczyk  <mariusz.g@samsung.com>

        [EFL][WK2] Fix build break when CONTEXT_MENUS is disabled.
        https://bugs.webkit.org/show_bug.cgi?id=83285

        Reviewed by Ryosuke Niwa.

        * platform/ContextMenuItem.h: Remove macro around enums - needed by InjectedBundle.
        (WebCore):
        * platform/Widget.h: Remove namespace WebCore for PlatformPageClient typedef.

2012-04-17  Kent Tamura  <tkent@chromium.org>

        Introduce an internal feature for a fixed placeholder
        https://bugs.webkit.org/show_bug.cgi?id=84009

        Reviewed by Hajime Morita.

        This change adds a framework to support fixed placeholder string for
        textfield-like <input> without the palceholder attribute support. This
        doesn't change any behavior of input types which support the
        'placeholder' attribute.

        According to the standard, <input type=date> doesn't support the
        'placeholder' attribute. However it is a kind of text field in WebKit
        platforms with ENABLE_CALENDAR_PICKER, and we may show something useful
        information as the default placeholder.

        No new tests because of no behavior changes.

        * html/HTMLTextFormControlElement.h:
        (HTMLTextFormControlElement): Make isPlaceholderEmpty() virtual.
        * html/HTMLInputElement.h:
        (HTMLInputElement): Overrides isPlaceholderEmpty().
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::isPlaceholderEmpty):
        Check InputType::defaultPlaceholder() if InputType::usesFixedPlaceholder().
        * html/InputType.cpp:
        (WebCore::InputType::usesFixedPlaceholder): Added. Returns false.
        (WebCore::InputType::fixedPlaceholder): Added. Returns a null string.
        * html/InputType.h:
        (InputType): Add usesFixedPlaceholder() and fixedPlaceholder().
        * html/TextFieldInputType.cpp:
        (WebCore::TextFieldInputType::updatePlaceholderText):
        Uses fixedPlaceholder() instead of strippedPlaceholder() if usesFixedPlaceholder().

2012-04-17  Kent Tamura  <tkent@chromium.org>

        Move some code of LocalizedNumberICU.cpp to ICULocale.cpp
        https://bugs.webkit.org/show_bug.cgi?id=84128

        Reviewed by Hajime Morita.

        No new tests. No behavior change.

        * WebCore.gypi: Add ICULocale.cpp
        * platform/text/ICULocale.cpp:
        Added. Move some code from LocalizedNumberICU.cpp
        * platform/text/ICULocale.h:
        (ICULocale): Add currentLocale().
        * platform/text/LocalizedNumberICU.cpp:
        (WebCore::convertToLocalizedNumber): Use ICULocale::currentLocale().
        (WebCore::convertFromLocalizedNumber): ditto.

2012-04-17  Bang Kwang min  <justine.bang@samsung.com>

        [Plugins] delete ws_info regardless of window mode.
        https://bugs.webkit.org/show_bug.cgi?id=83004

        Reviewed by Simon Hausmann.

        m_npWindow.ws_info should be deleted even if plugin run as windowless mode to remove memory leak.
        Every plugin works well after this patch without any crash.
        Additionally, change casting syntax to C++ style.

        * plugins/PluginView.cpp:
        (WebCore::PluginView::stop):

2012-04-17  Kent Tamura  <tkent@chromium.org>

        Calendar Picker: Support RTL layout
        https://bugs.webkit.org/show_bug.cgi?id=83668

        Reviewed by Hajime Morita.

        Manual test: ManualTests/forms/calendar-picker.html

        * Resources/calendarPicker.js:
        (layout): If params.isRTL, add dir=rtl to the body.
        (DaysTable.prototype._handleKey): Reverse Left and Right cursor keys if RTL.
        * html/shadow/CalendarPickerElement.cpp:
        (WebCore::addProperty): Add addProperty() with a bool value.
        (WebCore::CalendarPickerElement::writeDocument):
        Check the direction of the first character of localized January label,
        and pass it as isRTL property.

2012-04-16  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix make distcheck issues.

        * GNUmakefile.list.am: Add missing files.

2012-04-16  Hajime Morrita  <morrita@chromium.org>

        insertedIntoDocument and insertedIntoTree should be unitifed.
        https://bugs.webkit.org/show_bug.cgi?id=82701

        Reviewed by Ryosuke Niwa.

        Both Node::insertedIntoTree() and Node::insertedIntoDocument() are
        served as lifecycle callbacks which are invoked when a node is
        inserted into its new parent. There are also removedFromTree()
        and removedFromDocument() respectively. Considering that this pair
        of virtual functions are laid onto the hot path, it's worth
        merging them into one, to gain some speedup. Such
        unification could clarify the semantics as well.

        This change makes following change to merge these functions.

        - pulling the tree traversal out from ContainerNode to ChildNodeInsertionNotifier.
        - letting new Node::insertInto() do the job for its own, but not
          for its children and
        - Pass the parent of each insertion root as a parameter of insertedInto().
          This root node can tell inserted node where it is inserted,
          specifically whetehr the insertion is to the document or not.

        Same pattern is also applied to Node::removedFromDocument() and
        Node::removedFromTree(), which are factored to Node::removedFrom()
        and ChildNodeRemovalNotifier respectively.

        Speed up on Dromaeo/dom-modify.html is about 2%.
        Further speed-up by de-virtulization would be possible.

        Caveat:

        There is possible situation where a node need to invoke
        insertedInto() after its children is nofitied, instead of before
        that.  It was represented naturally with previous
        traversal-by-ContainerNode pattern, but is no longer simple with
        this new external traversal. To support this scenario, we
        introduced the InsertionNotificationRequest as a return value of insertedInto()
        and a supplemental hook Node::didNotifyDescendantInseretions(). See for
        example HTMLFormElement.cpp to learn how it works.

        No new tests. Covered by existing tests.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::parserInsertBefore):
        (WebCore::ContainerNode::removeChild):
        (WebCore::ContainerNode::parserRemoveChild):
        (WebCore::ContainerNode::removeChildren):
        (WebCore::ContainerNode::parserAddChild):
        (WebCore::updateTreeAfterInsertion):
        * dom/ContainerNode.h:
        (ContainerNode):
        (WebCore::Node::highestAncestor):
        (WebCore):
        * dom/ContainerNodeAlgorithms.cpp: Added.
        (WebCore):
        (WebCore::ChildNodeInsertionNotifier::notifyDescendantInsertedIntoDocument):
        (WebCore::ChildNodeInsertionNotifier::notifyDescendantInsertedIntoTree):
        (WebCore::ChildNodeRemovalNotifier::notifyDescendantRemovedFromDocument):
        (WebCore::ChildNodeRemovalNotifier::notifyDescendantRemovedFromTree):
        * dom/ContainerNodeAlgorithms.h:
        (ChildNodeInsertionNotifier):
        (WebCore::ChildNodeInsertionNotifier::ChildNodeInsertionNotifier):
        (WebCore):
        (ChildNodeRemovalNotifier):
        (WebCore::ChildNodeRemovalNotifier::ChildNodeRemovalNotifier):
        (WebCore::removeAllChildrenInContainer):
        (WebCore::appendChildToContainer):
        (Private):
        (WebCore::ChildNodeInsertionNotifier::notifyNodeInsertedIntoDocument):
        (WebCore::ChildNodeInsertionNotifier::notifyNodeInsertedIntoTree):
        (WebCore::ChildNodeInsertionNotifier::notifyInsertedIntoDocument):
        (WebCore::ChildNodeInsertionNotifier::notify):
        (WebCore::ChildNodeRemovalNotifier::notifyNodeRemovedFromDocument):
        (WebCore::ChildNodeRemovalNotifier::notifyNodeRemovedFromTree):
        (WebCore::ChildNodeRemovalNotifier::notify):
        * dom/DOMAllInOne.cpp:
        * dom/DocumentType.cpp:
        (WebCore::DocumentType::insertedInto):
        (WebCore::DocumentType::removedFrom):
        * dom/DocumentType.h:
        (DocumentType):
        * dom/Element.cpp:
        (WebCore::Element::insertedInto):
        (WebCore::Element::removedFrom):
        * dom/Element.h:
        (Element):
        * dom/Node.cpp:
        (WebCore::Node::insertedInto):
        (WebCore::Node::removedFrom):
        * dom/Node.h:
        (Node):
        (WebCore::Node::didNotifyDescendantInseretions):
        * dom/ProcessingInstruction.cpp:
        (WebCore::ProcessingInstruction::insertedInto):
        (WebCore::ProcessingInstruction::removedFrom):
        * dom/ProcessingInstruction.h:
        (ProcessingInstruction):
        * dom/ScriptElement.cpp:
        (WebCore::ScriptElement::insertedInto):
        * dom/ScriptElement.h:
        (WebCore):
        (ScriptElement):
        * dom/ShadowTree.cpp:
        (WebCore::ShadowTree::addShadowRoot):
        (WebCore::ShadowTree::removeAllShadowRoots):
        * dom/ShadowTree.h:
        (ShadowTree):
        (ShadowRootVector):
        (WebCore::ShadowRootVector::ShadowRootVector):
        (WebCore):
        * html/FormAssociatedElement.cpp:
        (WebCore::FormAssociatedElement::insertedInto):
        (WebCore::FormAssociatedElement::removedFrom):
        (WebCore::FormAssociatedElement::formRemovedFromTree):
        * html/FormAssociatedElement.h:
        (FormAssociatedElement):
        * html/HTMLBaseElement.cpp:
        (WebCore::HTMLBaseElement::insertedInto):
        (WebCore::HTMLBaseElement::removedFrom):
        * html/HTMLBaseElement.h:
        (HTMLBaseElement):
        * html/HTMLBodyElement.cpp:
        (WebCore::HTMLBodyElement::insertedInto):
        (WebCore::HTMLBodyElement::didNotifyDescendantInseretions):
        * html/HTMLBodyElement.h:
        (HTMLBodyElement):
        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLFormControlElement::insertedInto):
        (WebCore::HTMLFormControlElement::removedFrom):
        * html/HTMLFormControlElement.h:
        (HTMLFormControlElement):
        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::insertedInto):
        (WebCore::HTMLFormElement::didNotifyDescendantInseretions):
        (WebCore::HTMLFormElement::removedFrom):
        * html/HTMLFormElement.h:
        (HTMLFormElement):
        * html/HTMLFrameElementBase.cpp:
        (WebCore::HTMLFrameElementBase::insertedInto):
        (WebCore):
        (WebCore::HTMLFrameElementBase::didNotifyDescendantInseretions):
        * html/HTMLFrameElementBase.h:
        (HTMLFrameElementBase):
        * html/HTMLFrameSetElement.cpp:
        (WebCore::HTMLFrameSetElement::insertedInto):
        (WebCore::HTMLFrameSetElement::removedFrom):
        * html/HTMLFrameSetElement.h:
        (HTMLFrameSetElement):
        * html/HTMLIFrameElement.cpp:
        (WebCore::HTMLIFrameElement::insertedInto):
        (WebCore::HTMLIFrameElement::removedFrom):
        * html/HTMLIFrameElement.h:
        (HTMLIFrameElement):
        * html/HTMLImageElement.cpp:
        (WebCore::HTMLImageElement::insertedInto):
        (WebCore::HTMLImageElement::removedFrom):
        * html/HTMLImageElement.h:
        (HTMLImageElement):
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::insertedInto):
        (WebCore::HTMLInputElement::removedFrom):
        * html/HTMLInputElement.h:
        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::insertedInto):
        (WebCore::HTMLLinkElement::removedFrom):
        * html/HTMLLinkElement.h:
        (HTMLLinkElement):
        * html/HTMLMapElement.cpp:
        (WebCore::HTMLMapElement::insertedInto):
        (WebCore::HTMLMapElement::removedFrom):
        * html/HTMLMapElement.h:
        (HTMLMapElement):
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::insertedInto):
        (WebCore::HTMLMediaElement::removedFrom):
        * html/HTMLMediaElement.h:
        (HTMLMediaElement):
        * html/HTMLMetaElement.cpp:
        (WebCore::HTMLMetaElement::insertedInto):
        * html/HTMLMetaElement.h:
        (HTMLMetaElement):
        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::insertedInto):
        (WebCore::HTMLObjectElement::removedFrom):
        * html/HTMLObjectElement.h:
        (HTMLObjectElement):
        * html/HTMLOptionElement.cpp:
        (WebCore::HTMLOptionElement::insertedInto):
        * html/HTMLOptionElement.h:
        (HTMLOptionElement):
        * html/HTMLQuoteElement.cpp:
        (WebCore::HTMLQuoteElement::insertedInto):
        * html/HTMLQuoteElement.h:
        (HTMLQuoteElement):
        * html/HTMLScriptElement.cpp:
        (WebCore::HTMLScriptElement::insertedInto):
        * html/HTMLScriptElement.h:
        (HTMLScriptElement):
        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::insertedInto):
        * html/HTMLSelectElement.h:
        * html/HTMLSourceElement.cpp:
        (WebCore::HTMLSourceElement::insertedInto):
        * html/HTMLSourceElement.h:
        (HTMLSourceElement):
        * html/HTMLStyleElement.cpp:
        (WebCore::HTMLStyleElement::insertedInto):
        (WebCore::HTMLStyleElement::removedFrom):
        * html/HTMLStyleElement.h:
        (HTMLStyleElement):
        * html/HTMLTextFormControlElement.cpp:
        (WebCore::HTMLTextFormControlElement::insertedInto):
        * html/HTMLTextFormControlElement.h:
        * html/HTMLTitleElement.cpp:
        (WebCore::HTMLTitleElement::insertedInto):
        (WebCore::HTMLTitleElement::removedFrom):
        * html/HTMLTitleElement.h:
        (HTMLTitleElement):
        * html/HTMLTrackElement.cpp:
        (WebCore::HTMLTrackElement::insertedInto):
        * html/HTMLTrackElement.h:
        (HTMLTrackElement):
        * mathml/MathMLMathElement.cpp:
        (WebCore::MathMLMathElement::insertedInto):
        * mathml/MathMLMathElement.h:
        (MathMLMathElement):
        * svg/SVGElement.cpp:
        (WebCore::SVGElement::removedFrom):
        * svg/SVGElement.h:
        (SVGElement):
        * svg/SVGFEImageElement.cpp:
        (WebCore::SVGFEImageElement::insertedInto):
        (WebCore::SVGFEImageElement::removedFrom):
        * svg/SVGFEImageElement.h:
        (SVGFEImageElement):
        * svg/SVGFontFaceElement.cpp:
        (WebCore::SVGFontFaceElement::insertedInto):
        (WebCore::SVGFontFaceElement::removedFrom):
        * svg/SVGFontFaceElement.h:
        (SVGFontFaceElement):
        * svg/SVGFontFaceUriElement.cpp:
        (WebCore::SVGFontFaceUriElement::insertedInto):
        * svg/SVGFontFaceUriElement.h:
        (SVGFontFaceUriElement):
        * svg/SVGGlyphElement.cpp:
        (WebCore::SVGGlyphElement::insertedInto):
        (WebCore::SVGGlyphElement::removedFrom):
        * svg/SVGGlyphElement.h:
        (SVGGlyphElement):
        * svg/SVGHKernElement.cpp:
        (WebCore::SVGHKernElement::insertedInto):
        (WebCore::SVGHKernElement::removedFrom):
        * svg/SVGHKernElement.h:
        (SVGHKernElement):
        * svg/SVGImageElement.cpp:
        (WebCore::SVGImageElement::insertedInto):
        * svg/SVGImageElement.h:
        (SVGImageElement):
        * svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::insertedInto):
        (WebCore::SVGSVGElement::removedFrom):
        * svg/SVGSVGElement.h:
        (SVGSVGElement):
        * svg/SVGScriptElement.cpp:
        (WebCore::SVGScriptElement::insertedInto):
        * svg/SVGScriptElement.h:
        (SVGScriptElement):
        * svg/SVGStyleElement.cpp:
        (WebCore::SVGStyleElement::insertedInto):
        (WebCore::SVGStyleElement::removedFrom):
        * svg/SVGStyleElement.h:
        (SVGStyleElement):
        * svg/SVGStyledElement.cpp:
        (WebCore::SVGStyledElement::insertedInto):
        (WebCore::SVGStyledElement::removedFrom):
        (WebCore::SVGStyledElement::updateRelativeLengthsInformation):
        * svg/SVGStyledElement.h:
        (SVGStyledElement):
        * svg/SVGTRefElement.cpp:
        (WebCore::SVGTRefElement::buildPendingResource):
        (WebCore::SVGTRefElement::insertedInto):
        (WebCore::SVGTRefElement::removedFrom):
        * svg/SVGTRefElement.h:
        (SVGTRefElement):
        * svg/SVGTextPathElement.cpp:
        (WebCore::SVGTextPathElement::insertedInto):
        * svg/SVGTextPathElement.h:
        * svg/SVGTitleElement.cpp:
        (WebCore::SVGTitleElement::insertedInto):
        (WebCore::SVGTitleElement::removedFrom):
        * svg/SVGTitleElement.h:
        (SVGTitleElement):
        * svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::insertedInto):
        (WebCore::SVGUseElement::removedFrom):
        * svg/SVGUseElement.h:
        (SVGUseElement):
        * svg/SVGVKernElement.cpp:
        (WebCore::SVGVKernElement::insertedInto):
        (WebCore::SVGVKernElement::removedFrom):
        * svg/SVGVKernElement.h:
        (SVGVKernElement):
        * svg/animation/SVGSMILElement.cpp:
        (WebCore::SVGSMILElement::insertedInto):
        (WebCore::SVGSMILElement::removedFrom):
        * svg/animation/SVGSMILElement.h:
        (SVGSMILElement):

2012-04-16  David Barr  <davidbarr@chromium.org>

        Stack overflow in CSS parser caused by recursive stylesheet import
        https://bugs.webkit.org/show_bug.cgi?id=83545

        Reviewed by Ryosuke Niwa.

        Test: http/tests/css/css-imports-redirect-cycle.html

        * css/CSSImportRule.cpp:
        (WebCore::StyleRuleImport::requestStyleSheet):

2012-04-16  Kent Tamura  <tkent@chromium.org>

        Rename LocalizedNumberICU.h to ICULocale.h
        https://bugs.webkit.org/show_bug.cgi?id=84119

        Reviewed by Kentaro Hara.

        LocalizedNumberICU.h contains only ICULocale class. It should be
        named as ICULocale.h. We're going to move some functions in
        LocalizedDateICU.cpp and LocalizedCalendarICU.cpp to ICULocale,
        and add unit tests for them.

        * WebCore.gypi: Rename LocalizedNumberICU.h to ICULocale.h
        * platform/text/ICULocale.h:
        Renamed from Source/WebCore/platform/text/LocalizedNumberICU.h.
        * platform/text/LocalizedNumberICU.cpp:
        Rename LocalizedNumberICU.h to ICULocale.h

2012-04-16  James Robinson  <jamesr@chromium.org>

        [chromium] Move paintRenderedResultsToCanvas code into DrawingBuffer
        https://bugs.webkit.org/show_bug.cgi?id=84066

        Reviewed by Adrienne Walker.

        WebGLLayerChromium used to be responsible for the readback path for software painting WebGL canvases (for
        printing, etc), but this path no longer has any compositor interaction. This moves the code into
        DrawingBufferChromium which is responsible for managing the front / back buffers for WebGL.

        * platform/graphics/chromium/DrawingBufferChromium.cpp:
        (WebCore::DrawingBuffer::paintCompositedResultsToCanvas):
        * platform/graphics/chromium/WebGLLayerChromium.cpp:
        * platform/graphics/chromium/WebGLLayerChromium.h:
        (WebGLLayerChromium):

2012-04-16  Dana Jansens  <danakj@chromium.org>

        [chromium] Expose compositor filters to Aura through WebLayer
        https://bugs.webkit.org/show_bug.cgi?id=80054

        Reviewed by James Robinson.

        Adds WebFilterOperation that wraps WebCore::FilterOperation and
        WebFilterOperations that wraps WebCore::FilterOperations.

        We add support for most of the FilterOperation subclasses, and
        allow the user to set the WebFilterOperations for both layer
        content filters and background filters.

        * WebCore.gypi:
        * platform/chromium/support/WebFilterOperation.cpp: Added.
        (WebKit):
        (WebKit::WebBasicColorMatrixFilterOperation::toFilterOperation):
        (WebKit::WebBasicComponentTransferFilterOperation::toFilterOperation):
        (WebKit::WebBlurFilterOperation::toFilterOperation):
        (WebKit::WebDropShadowFilterOperation::toFilterOperation):
        * platform/chromium/support/WebFilterOperations.cpp: Added.
        (WebKit):
        (WebKit::WebFilterOperations::WebFilterOperations):
        (WebKit::WebFilterOperations::append):
        (WebKit::WebFilterOperations::clear):
        (WebKit::WebFilterOperations::toFilterOperations):

2012-04-16  Andrei Burago  <aburago@chromium.org>

        Auto-sized frames may be taller than expected
        https://bugs.webkit.org/show_bug.cgi?id=84106

        Reviewed by David Levin.

        No new tests. The repro steps require using Chrome notifications on Win.

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

2012-04-13  James Robinson  <jamesr@chromium.org>

        [chromium] Expose WebVideoLayer to Platform API and port WebMediaPlayerClientImpl to using it
        https://bugs.webkit.org/show_bug.cgi?id=83963

        Reviewed by Adrienne Walker.

        Converts VideoLayerChromium / CCVideoLayerImpl to use a Platform WebVideoFrameProvider interface instead of a
        WebCore VideoFrameProvider.

        * WebCore.gypi:
        * platform/graphics/chromium/VideoLayerChromium.cpp:
        (WebCore::VideoLayerChromium::create):
        (WebCore::VideoLayerChromium::VideoLayerChromium):
        * platform/graphics/chromium/VideoLayerChromium.h:
        (WebKit):
        (WebCore):
        (VideoLayerChromium):
        * platform/graphics/chromium/cc/CCVideoLayerImpl.cpp:
        (WebCore::CCVideoLayerImpl::CCVideoLayerImpl):
        * platform/graphics/chromium/cc/CCVideoLayerImpl.h:
        (WebCore::CCVideoLayerImpl::create):
        (CCVideoLayerImpl):

2012-04-16  Takashi Sakamoto  <tasak@google.com>

        [Shadow DOM] InsertionPoint should have isActive() member function.
        https://bugs.webkit.org/show_bug.cgi?id=82010

        Reviewed by Hajime Morita.

        This patch adds isActive public member function to InsertionPoint and
        makes InsertionPoint elements consider whether active or not.
        If an InsertionPoint is inactive, the element is not shadow boundary
        and is needed to be rendered.
        c.f. https://dvcs.w3.org/hg/webcomponents/raw-file/tip/spec/shadow/index.html#dfn-active-insertion-point

        Test: update existing tests, i.e.
        LayoutTests/fast/dom/shadow/shadow-contents-fallback-dynamic.html and
        LayoutTests/fast/dom/shadow/shadow-contents-fallback.html

        * html/shadow/InsertionPoint.cpp:
        (WebCore::InsertionPoint::isActive):
        A new public method for checking whether an insertion point is active or inactive.
        If active, returns true. Otherwise, false.
        (WebCore::InsertionPoint::isShadowBoundary):
        Make the method consider whether an insertin point is active or inactive.
        (WebCore::InsertionPoint::rendererIsNeeded):
        Changed to return true If an insertion point is inactive.
        (WebCore::InsertionPoint::attach):
        Changed to call only HTMLElement::attach If an insertion point is inactive.
        (WebCore::InsertionPoint::detach):
        Changed to call only HTMLElement::detach If an insertion point is inactive.
        * html/shadow/InsertionPoint.h:
        (InsertionPoint):
        Added isActive public method.
        * dom/NodeRenderingContext.cpp:
        (WebCore::NodeRenderingContext::NodeRenderingContext):
        Changed to take into account an insertion point's activeness when parent is an insertion point.
        (WebCore::NodeRenderingContext::firstRendererOf):
        (WebCore::NodeRenderingContext::lastRendererOf):
        Changed to take into account an insertion point's activeness.

2012-04-16  MORITA Hajime  <morrita@google.com>

        Type tags in NodeFlags could be compressed
        https://bugs.webkit.org/show_bug.cgi?id=79299

        Because existing node flags which indicate the class of each node
        are mutually exclusive, these flags can be represented as a enum.
        This patch introduces Node::NodeTypeTag to turn these flags into a
        enum, and embeds it into Node::m_nodeFlags.

        Reviewed by Antti Koivisto.

        No new tests. No bahavior change.

        * dom/Node.cpp:
        (WebCore):
        * dom/Node.h:
        (WebCore):
        (Node):
        (WebCore::Node::typeTag):
        (WebCore::Node::parentNode):
        (WebCore::Node::parentNodeGuaranteedHostFree):
        (WebCore::Node::isContainerNode):
        (WebCore::Node::isElementNode):
        (WebCore::Node::isStyledElement):
        (WebCore::Node::isTextNode):
        (WebCore::Node::isHTMLElement):
        (WebCore::Node::isSVGElement):
        (WebCore::Node::isShadowRoot):

2012-04-16  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r114285.
        http://trac.webkit.org/changeset/114285
        https://bugs.webkit.org/show_bug.cgi?id=84107

        broke fast/media/media-query-list-08.html in Mac (Requested by
        andersca on #webkit).

        * dom/Document.cpp:
        (WebCore::Document::styleSelectorChanged):
        * dom/Document.h:
        (Document):
        * page/FrameView.cpp:
        (WebCore::FrameView::layout):

2012-04-16  Nate Chapin  <japhet@chromium.org>

        Remove unused variable CachedResourceLoader::m_loadFinishing
        https://bugs.webkit.org/show_bug.cgi?id=84100

        Reviewed by Alexey Proskuryakov.

        No new tests, removing dead code.

        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::CachedResourceLoader):
        (WebCore::CachedResourceLoader::loadDone):
        (WebCore::CachedResourceLoader::decrementRequestCount):
        * loader/cache/CachedResourceLoader.h:
        (CachedResourceLoader):
        (WebCore::CachedResourceLoader::requestCount):

2012-04-16  Andreas Kling  <kling@webkit.org>

        Remove contextStyleSheet argument from CSSValuePool::createFontFaceValue().
        <http://webkit.org/b/83988>

        Reviewed by Antti Koivisto.

        Remove the 'context style sheet' argument to <font face> value parsing.
        It was only ever used to grab at the CSSValuePool back when they were per-Document.

        * css/CSSParser.h:
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseFontFaceValue):
        * css/CSSValuePool.h:
        * css/CSSValuePool.cpp:
        (WebCore::CSSValuePool::createFontFaceValue):
        * html/HTMLFontElement.cpp:
        (WebCore::HTMLFontElement::collectStyleForAttribute):

2012-04-16  Dana Jansens  <danakj@chromium.org>

        [chromium] Consistent checking for clipped rects when we need the computed result enclosed within the real result
        https://bugs.webkit.org/show_bug.cgi?id=83543

        Reviewed by Adrienne Walker.

        It should not be possible to make a rect in layer space that is clipped
        by the camera but for which the screen space transform gives a
        rectilinear output. But use consistent methods for checking that the
        result remains enclosed within the actual pixels.

        One day when clipped is true, we can find an interior axis-aligned rect
        within the clipped result, and checking clipped explicitly makes this
        more clear.

        Covered by existing tests.

        * platform/graphics/chromium/cc/CCOcclusionTracker.cpp:
        (WebCore::computeOcclusionBehindLayer):
        (WebCore::::markOccludedBehindLayer):

2012-04-16  Erik Arvidsson  <arv@chromium.org>

        [V8] Don't delete the per context data until the V8IsolatedContext is deleted
        https://bugs.webkit.org/show_bug.cgi?id=83831

        Reviewed by Nate Chapin.

        Test: http/tests/security/isolatedWorld/context-destroy.html

        * bindings/v8/V8IsolatedContext.cpp:
        (WebCore::V8IsolatedContext::destroy):

2012-04-16  Greg Billock  <gbillock@google.com>

        Add V8 code generation support for MessagePortArray attributes.
        https://bugs.webkit.org/show_bug.cgi?id=83943

        Reviewed by Kentaro Hara.

        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateNormalAttrGetter):
        * bindings/scripts/IDLAttributes.txt:
        * bindings/scripts/test/CPP/WebDOMTestSerializedScriptValueInterface.cpp:
        (WebDOMTestSerializedScriptValueInterface::ports):
        * bindings/scripts/test/CPP/WebDOMTestSerializedScriptValueInterface.h:
        (WebDOMTestSerializedScriptValueInterface):
        * bindings/scripts/test/GObject/WebKitDOMTestSerializedScriptValueInterface.cpp:
        (webkit_dom_test_serialized_script_value_interface_get_property):
        (webkit_dom_test_serialized_script_value_interface_class_init):
        (webkit_dom_test_serialized_script_value_interface_get_ports):
        * bindings/scripts/test/GObject/WebKitDOMTestSerializedScriptValueInterface.h:
        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp:
        (WebCore):
        (WebCore::jsTestSerializedScriptValueInterfacePorts):
        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.h:
        (WebCore):
        * bindings/scripts/test/ObjC/DOMTestSerializedScriptValueInterface.h:
        * bindings/scripts/test/ObjC/DOMTestSerializedScriptValueInterface.mm:
        (-[DOMTestSerializedScriptValueInterface ports]):
        * bindings/scripts/test/TestSerializedScriptValueInterface.idl:
        * bindings/scripts/test/V8/V8TestSerializedScriptValueInterface.cpp:
        (WebCore::TestSerializedScriptValueInterfaceInternal::portsAttrGetter):
        (TestSerializedScriptValueInterfaceInternal):
        (WebCore):

2012-04-16  Xiaomei Ji  <xji@chromium.org>

        platform/graphics/skia/GlyphPageTreeNodeSkia.cpp mis-use 'continue' for 'break'
        https://bugs.webkit.org/show_bug.cgi?id=83521

        Reviewed by David Levin.

        No functionality change, so no new tests.

        * platform/graphics/skia/GlyphPageTreeNodeSkia.cpp:
        (WebCore::GlyphPage::fill):

2012-04-16  Levi Weintraub  <leviw@chromium.org>

        Make borderBoxRect sub-pixel precise and add a pixel snapped version
        https://bugs.webkit.org/show_bug.cgi?id=84063

        Reviewed by Eric Seidel.

        In an effort to prevent misuse, we previously decided to have borderBoxRect return a
        pixel-snapped IntRect. This is because borderBoxRect returns a rect that's positioned
        at (0,0), and therefore won't snap to the same size as the element it's covering.

        There are a couple uses of borderBoxRect that don't pixel snap the values and require
        sub-pixel precision. This patch adds a pixelSnappedBorderBoxRect that makes the snapping
        explicit, and moves uses that would otherwise pixel snap the rect to this version to
        avoid producing a rect of the incorrect size. For details about pixel snapping with
        LayoutUnits, please see https://trac.webkit.org/wiki/LayoutUnit

        No new tests. No change in behavior.

        * html/shadow/TextControlInnerElements.cpp:
        (WebCore::SpinButtonElement::defaultEventHandler):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::addVisualOverflowFromTheme):
        * rendering/RenderBox.h:
        (WebCore::RenderBox::borderBoxRect):
        (WebCore::RenderBox::pixelSnappedBorderBoxRect):
        (WebCore::RenderBox::borderBoundingBox):
        (WebCore::RenderBox::hasVisualOverflow):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::scrollCornerRect):
        (WebCore::RenderLayer::scrollCornerAndResizerRect):
        (WebCore::RenderLayer::horizontalScrollbarStart):
        (WebCore::RenderLayer::positionOverflowControls):
        (WebCore::RenderLayer::paintResizer):
        (WebCore::RenderLayer::hitTestOverflowControls):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateGraphicsLayerGeometry):
        (WebCore::RenderLayerBacking::startAnimation):
        (WebCore::RenderLayerBacking::startTransition):
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::addOverflowFromChildren):
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::paintSearchFieldCancelButton):
        (WebCore::RenderThemeMac::paintSearchFieldResultsDecoration):
        (WebCore::RenderThemeMac::paintSearchFieldResultsButton):
        * rendering/svg/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::paintReplaced):
        (WebCore::RenderSVGRoot::computeFloatRectForRepaint):

2012-04-16  Anders Carlsson  <andersca@apple.com>

        Crash when running some editing related tests
        https://bugs.webkit.org/show_bug.cgi?id=84091

        Reviewed by Andreas Kling.

        Null check triggeringEvent.

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

2012-04-16  Simon Fraser  <simon.fraser@apple.com>

        Rename to updateZOrderListsSlowCase to rebuildZOrderLists
        https://bugs.webkit.org/show_bug.cgi?id=84071

        Reviewed by Antti Koivisto.

        Use a better name for updateZOrderListsSlowCase().

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::rebuildZOrderLists):
        * rendering/RenderLayer.h:
        (RenderLayer):
        (WebCore::RenderLayer::updateZOrderLists):

2012-04-16  Terry Anderson  <tdanderson@chromium.org>

        [chromium] Allow WebGestureEvent to store four floating point values
        https://bugs.webkit.org/show_bug.cgi?id=84053

        Reviewed by Darin Fisher.

        See bug description for an explanation of the changes made.

        * platform/PlatformGestureEvent.h:
        (WebCore::PlatformGestureEvent::PlatformGestureEvent):
        (PlatformGestureEvent):
        (WebCore::PlatformGestureEvent::gammaX):
        (WebCore::PlatformGestureEvent::gammaY):

2012-04-16  Kentaro Hara  <haraken@chromium.org>

        [Refactoring][V8] Remove $indent from NativeToJSValue()
        https://bugs.webkit.org/show_bug.cgi?id=84077

        Reviewed by Nate Chapin.

        $indent in NativeToJSValue() in CodeGeneratorV8.pm is not used.
        This patch removes it.

        No new tests. No change in behavior.

        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateNormalAttrGetter):
        (GenerateFunctionCallString):
        (NativeToJSValue):

2012-04-16  Luiz Agostini  <luiz.agostini@palm.com>

        matchMedia() MediaQueryList not updating
        https://bugs.webkit.org/show_bug.cgi?id=75903

        Reviewed by Antti Koivisto.

        Test: fast/media/media-query-list-08.html

        Viewport related MediaQueryList listeners were not triggered and the value
        of matches were not updated if the document's style selector were not
        affected by viewport changes.

        The new method evaluateMediaQueries() is now called by FrameView instead of
        styleSelectorChanged() if the style selector is not affected by viewport changes.

        * dom/Document.cpp:
        (WebCore::Document::evaluateMediaQueries):
        (WebCore):
        (WebCore::Document::styleSelectorChanged):
        * dom/Document.h:
        (Document):
        * page/FrameView.cpp:
        (WebCore::FrameView::layout):

2012-04-16  James Robinson  <jamesr@chromium.org>

        [chromium] Delete uncalled unreserveContentsTextures function
        https://bugs.webkit.org/show_bug.cgi?id=84005

        Reviewed by Adrienne Walker.

        This is vestigal dead code.

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

2012-04-13  Simon Fraser  <simon.fraser@apple.com>

        Avoid using backing store for compositing layers that just need to clip
        https://bugs.webkit.org/show_bug.cgi?id=40547

        Reviewed by Dean Jackson.
        
        If a layer becomes composited because it needs to clip composited
        descendants, or if it has perspective, then it doesn't actually
        needs its own backing store; its contents can be painted by an
        ancestor, and we can just have an empty layer that does the clipping
        or applies the perspective transform.
        
        This saves backing store memory on some pages.

        Tests: compositing/backing/no-backing-for-clip-overlap.html
               compositing/backing/no-backing-for-clip.html
               compositing/backing/no-backing-for-perspective.html

        * rendering/RenderLayer.cpp:
        (WebCore):
        (WebCore::RenderLayer::enclosingCompositingLayerForRepaint):
        (WebCore::RenderLayer::paintLayer):
        * rendering/RenderLayer.h:
        (RenderLayer):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::RenderLayerBacking):
        (WebCore::RenderLayerBacking::updateGraphicsLayerGeometry):
        (WebCore::RenderLayerBacking::containsPaintedContent):
        (WebCore::RenderLayerBacking::setContentsNeedDisplay):
        (WebCore::RenderLayerBacking::setContentsNeedDisplayInRect):
        (WebCore::RenderLayerBacking::paintIntoLayer):
        * rendering/RenderLayerBacking.h:
        (RenderLayerBacking):
        (WebCore::RenderLayerBacking::paintsIntoCompositedAncestor):
        (WebCore::RenderLayerBacking::setRequiresOwnBackingStore):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::layerWillBeRemoved):
        (WebCore::RenderLayerCompositor::recursiveRepaintLayerRect):
        (WebCore::RenderLayerCompositor::requiresCompositingLayer):
        (WebCore::RenderLayerCompositor::requiresOwnBackingStore):
        (WebCore):
        * rendering/RenderLayerCompositor.h:
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::containerForRepaint):
        * rendering/RenderTreeAsText.cpp:
        (WebCore::write):
        * rendering/RenderView.cpp:
        (WebCore::RenderView::paintBoxDecorations):

2012-04-16  Brady Eidson  <beidson@apple.com>

        <rdar://problem/11249336> and https://bugs.webkit.org/show_bug.cgi?id=84050
        WebKit2 back/forward items in the page cache are never removed when the page is closed

        Reviewed by Jessie Berlin and unofficially reviewed by Jon Lee.

        * WebCore.exp.in: Export PageCache::remove()

2012-04-16  Philippe Normand  <pnormand@igalia.com>

        Unreviewed, GTK build fix after r114269.

        * GNUmakefile.list.am:

2012-04-16  Andrey Kosyakov  <caseq@chromium.org>

        Web Inspector: timeline. Range selection works incorrect with right click
        https://bugs.webkit.org/show_bug.cgi?id=83870

        Reviewed by Pavel Feldman.

        - only start window dragging upon mousedown with left button (right will cause a context menu and we won't see mouseup)

        * inspector/front-end/TimelineOverviewPane.js:
        (WebInspector.TimelineOverviewWindow.prototype._dragWindow):

2012-04-16  Andrey Kosyakov  <caseq@chromium.org>

        Web Inspector: touch pad is pain to use in lower pane of Timeline panel due two two-axis scrolling
        https://bugs.webkit.org/show_bug.cgi?id=83946

        Reviewed by Pavel Feldman.

        Remove delegation of mousewheel events from lower timeline pane to the timeline overview. This disables
        support for moving overview window with horizontal swype over lower timeline pane, thus removing
        an irritating situation when we try to both change overview window and scroll lower timeline pane
        upon a single touchpad gesture. Those willing to move timeline window now would need to position
        mouse over overview.

        * inspector/front-end/TimelineOverviewPane.js:
        (WebInspector.TimelineOverviewWindow.prototype._onMouseWheel):
        (WebInspector.TimelineOverviewWindow.prototype._zoom):
        * inspector/front-end/TimelinePanel.js:
        (WebInspector.TimelinePanel):

2012-04-16  Yury Semikhatsky  <yurys@chromium.org>

        Web Inspector: rename heap profiler files and classes DetailedHeapshot* ->HeapSnapshot*
        https://bugs.webkit.org/show_bug.cgi?id=84038

        A bunch of renames "detailed heapshot" -> "heap snapshot".

        Reviewed by Pavel Feldman.

        Tests: inspector/profiler/heap-snapshot-comparison-expansion-preserved-when-sorting.html
               inspector/profiler/heap-snapshot-comparison-show-all.html
               inspector/profiler/heap-snapshot-comparison-show-next.html
               inspector/profiler/heap-snapshot-comparison-shown-node-count-preserved-when-sorting.html
               inspector/profiler/heap-snapshot-comparison-sorting.html
               inspector/profiler/heap-snapshot-containment-expansion-preserved-when-sorting.html
               inspector/profiler/heap-snapshot-containment-show-all.html
               inspector/profiler/heap-snapshot-containment-show-next.html
               inspector/profiler/heap-snapshot-containment-shown-node-count-preserved-when-sorting.html
               inspector/profiler/heap-snapshot-containment-sorting.html
               inspector/profiler/heap-snapshot-dominators-expansion-preserved-when-sorting.html
               inspector/profiler/heap-snapshot-dominators-show-all.html
               inspector/profiler/heap-snapshot-dominators-show-next.html
               inspector/profiler/heap-snapshot-dominators-shown-node-count-preserved-when-sorting.html
               inspector/profiler/heap-snapshot-dominators-sorting.html
               inspector/profiler/heap-snapshot-summary-expansion-preserved-when-sorting.html
               inspector/profiler/heap-snapshot-summary-show-all.html
               inspector/profiler/heap-snapshot-summary-show-next.html
               inspector/profiler/heap-snapshot-summary-shown-node-count-preserved-when-sorting.html
               inspector/profiler/heap-snapshot-summary-sorting.html

        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * inspector/compile-front-end.py:
        * inspector/front-end/HeapSnapshotGridNodes.js: Renamed from Source/WebCore/inspector/front-end/DetailedHeapshotGridNodes.js.
        (WebInspector.HeapSnapshotGridNode):
        (WebInspector.HeapSnapshotGridNode.prototype.ensureContentCreated):
        (WebInspector.HeapSnapshotGridNode.prototype.createCell):
        (WebInspector.HeapSnapshotGridNode.prototype.dispose):
        (WebInspector.HeapSnapshotGridNode.prototype.hasHoverMessage.false.queryObjectContent):
        (WebInspector.HeapSnapshotGridNode.prototype._toPercentString):
        (WebInspector.HeapSnapshotGridNode.prototype._createValueCell):
        (WebInspector.HeapSnapshotGridNode.prototype._populate.sorted):
        (WebInspector.HeapSnapshotGridNode.prototype._populate):
        (WebInspector.HeapSnapshotGridNode.prototype.populateChildren.callSerialize):
        (WebInspector.HeapSnapshotGridNode.prototype.populateChildren.childrenRetrieved.notify):
        (WebInspector.HeapSnapshotGridNode.prototype.populateChildren.childrenRetrieved):
        (WebInspector.HeapSnapshotGridNode.prototype.populateChildren):
        (WebInspector.HeapSnapshotGridNode.prototype._saveChildren):
        (WebInspector.HeapSnapshotGridNode.prototype.sort.afterSort.afterPopulate):
        (WebInspector.HeapSnapshotGridNode.prototype.sort.afterSort):
        (WebInspector.HeapSnapshotGridNode.prototype.sort):
        (WebInspector.HeapSnapshotLazyGridNode):
        (WebInspector.HeapSnapshotLazyGridNode.prototype.ensureContentCreated):
        (WebInspector.HeapSnapshotLazyGridNode.prototype.createCells):
        (WebInspector.HeapSnapshotGenericObjectNode):
        (WebInspector.HeapSnapshotGenericObjectNode.prototype.createCell):
        (WebInspector.HeapSnapshotGenericObjectNode.prototype._createObjectCell):
        (WebInspector.HeapSnapshotGenericObjectNode.prototype.get data):
        (WebInspector.HeapSnapshotGenericObjectNode.prototype.queryObjectContent.else.formatResult):
        (WebInspector.HeapSnapshotGenericObjectNode.prototype.queryObjectContent):
        (WebInspector.HeapSnapshotGenericObjectNode.prototype.get _retainedSizePercent):
        (WebInspector.HeapSnapshotGenericObjectNode.prototype.get _shallowSizePercent):
        (WebInspector.HeapSnapshotGenericObjectNode.prototype.updateHasChildren):
        (WebInspector.HeapSnapshotGenericObjectNode.prototype.isWindow):
        (WebInspector.HeapSnapshotGenericObjectNode.prototype.shortenWindowURL):
        (WebInspector.HeapSnapshotObjectNode):
        (WebInspector.HeapSnapshotObjectNode.prototype.updateHasChildren):
        (WebInspector.HeapSnapshotObjectNode.prototype._createChildNode):
        (WebInspector.HeapSnapshotObjectNode.prototype._childHashForEntity):
        (WebInspector.HeapSnapshotObjectNode.prototype._childHashForNode):
        (WebInspector.HeapSnapshotObjectNode.prototype.comparator):
        (WebInspector.HeapSnapshotObjectNode.prototype._emptyData):
        (WebInspector.HeapSnapshotObjectNode.prototype._enhanceData):
        (WebInspector.HeapSnapshotObjectNode.prototype._prefixObjectCell):
        (WebInspector.HeapSnapshotInstanceNode):
        (WebInspector.HeapSnapshotInstanceNode.prototype._createChildNode):
        (WebInspector.HeapSnapshotInstanceNode.prototype._childHashForEntity):
        (WebInspector.HeapSnapshotInstanceNode.prototype._childHashForNode):
        (WebInspector.HeapSnapshotInstanceNode.prototype.comparator):
        (WebInspector.HeapSnapshotInstanceNode.prototype._emptyData):
        (WebInspector.HeapSnapshotInstanceNode.prototype._enhanceData):
        (WebInspector.HeapSnapshotInstanceNode.prototype.get isDeletedNode):
        (WebInspector.HeapSnapshotConstructorNode):
        (WebInspector.HeapSnapshotConstructorNode.prototype.createCell):
        (WebInspector.HeapSnapshotConstructorNode.prototype._createChildNode):
        (WebInspector.HeapSnapshotConstructorNode.prototype._createNodesProvider):
        (WebInspector.HeapSnapshotConstructorNode.prototype.comparator):
        (WebInspector.HeapSnapshotConstructorNode.prototype._childHashForEntity):
        (WebInspector.HeapSnapshotConstructorNode.prototype._childHashForNode):
        (WebInspector.HeapSnapshotConstructorNode.prototype.get data):
        (WebInspector.HeapSnapshotConstructorNode.prototype.get _countPercent):
        (WebInspector.HeapSnapshotConstructorNode.prototype.get _retainedSizePercent):
        (WebInspector.HeapSnapshotConstructorNode.prototype.get _shallowSizePercent):
        (WebInspector.HeapSnapshotIteratorsTuple):
        (WebInspector.HeapSnapshotIteratorsTuple.prototype.dispose):
        (WebInspector.HeapSnapshotIteratorsTuple.prototype.sortAndRewind):
        (WebInspector.HeapSnapshotDiffNode):
        (WebInspector.HeapSnapshotDiffNode.prototype.calculateDiff.diffCalculated):
        (WebInspector.HeapSnapshotDiffNode.prototype.calculateDiff):
        (WebInspector.HeapSnapshotDiffNode.prototype.calculateDiff.baseIdsReceived):
        (WebInspector.HeapSnapshotDiffNode.prototype.calculateDiff.idsReceived):
        (WebInspector.HeapSnapshotDiffNode.prototype._createChildNode):
        (WebInspector.HeapSnapshotDiffNode.prototype._createNodesProvider.createProvider):
        (WebInspector.HeapSnapshotDiffNode.prototype._createNodesProvider):
        (WebInspector.HeapSnapshotDiffNode.prototype._childHashForEntity):
        (WebInspector.HeapSnapshotDiffNode.prototype._childHashForNode):
        (WebInspector.HeapSnapshotDiffNode.prototype.comparator):
        (WebInspector.HeapSnapshotDiffNode.prototype.populateChildren.firstProviderPopulated):
        (WebInspector.HeapSnapshotDiffNode.prototype.populateChildren.else.firstProviderPopulated):
        (WebInspector.HeapSnapshotDiffNode.prototype.populateChildren):
        (WebInspector.HeapSnapshotDiffNode.prototype._signForDelta):
        (WebInspector.HeapSnapshotDiffNode.prototype.get data):
        (WebInspector.HeapSnapshotDominatorObjectNode):
        (WebInspector.HeapSnapshotDominatorObjectNode.prototype._createChildNode):
        (WebInspector.HeapSnapshotDominatorObjectNode.prototype._createProvider):
        (WebInspector.HeapSnapshotDominatorObjectNode.prototype._childHashForEntity):
        (WebInspector.HeapSnapshotDominatorObjectNode.prototype._childHashForNode):
        (WebInspector.HeapSnapshotDominatorObjectNode.prototype.comparator):
        (WebInspector.HeapSnapshotDominatorObjectNode.prototype._emptyData):
        (MixInSnapshotNodeFunctions):
        * inspector/front-end/HeapSnapshotView.js: Renamed from Source/WebCore/inspector/front-end/DetailedHeapshotView.js.
        (WebInspector.HeapSnapshotSortableDataGrid):
        (WebInspector.HeapSnapshotSortableDataGrid.prototype.dispose):
        (WebInspector.HeapSnapshotSortableDataGrid.prototype.resetSortingCache):
        (WebInspector.HeapSnapshotSortableDataGrid.prototype.sortingChanged.SortByTwoFields):
        (WebInspector.HeapSnapshotSortableDataGrid.prototype.sortingChanged):
        (WebInspector.HeapSnapshotSortableDataGrid.prototype.updateVisibleNodes):
        (WebInspector.HeapSnapshotSortableDataGrid.prototype.onResize):
        (WebInspector.HeapSnapshotSortableDataGrid.prototype._onScroll):
        (WebInspector.HeapSnapshotSortableDataGrid.prototype._performSorting):
        (WebInspector.HeapSnapshotSortableDataGrid.prototype.recursiveSortingEnter):
        (WebInspector.HeapSnapshotSortableDataGrid.prototype.recursiveSortingLeave):
        (WebInspector.HeapSnapshotContainmentDataGrid):
        (WebInspector.HeapSnapshotContainmentDataGrid.prototype._defaultPopulateCount.100.expandRoute.nextStep.else.afterExpand):
        (WebInspector.HeapSnapshotContainmentDataGrid.prototype._defaultPopulateCount.100.expandRoute):
        (WebInspector.HeapSnapshotContainmentDataGrid.prototype.setDataSource):
        (WebInspector.HeapSnapshotContainmentDataGrid.prototype.sortingChanged):
        (WebInspector.HeapSnapshotRetainmentDataGrid):
        (WebInspector.HeapSnapshotRetainmentDataGrid.prototype._sortFields):
        (WebInspector.HeapSnapshotRetainmentDataGrid.prototype.reset):
        (WebInspector.HeapSnapshotConstructorsDataGrid):
        (WebInspector.HeapSnapshotConstructorsDataGrid.prototype._defaultPopulateCount.100._sortFields):
        (WebInspector.HeapSnapshotConstructorsDataGrid.prototype.setDataSource):
        (WebInspector.HeapSnapshotConstructorsDataGrid.prototype.populateChildren):
        (WebInspector.HeapSnapshotConstructorsDataGrid.prototype._filterSelectIndexChanged):
        (WebInspector.HeapSnapshotDiffDataGrid):
        (WebInspector.HeapSnapshotDiffDataGrid.prototype._defaultPopulateCount.50._sortFields):
        (WebInspector.HeapSnapshotDiffDataGrid.prototype.setDataSource):
        (WebInspector.HeapSnapshotDiffDataGrid.prototype._baseProfileIndexChanged):
        (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.HeapSnapshotView.profileCallback):
        (WebInspector.HeapSnapshotView):
        (WebInspector.HeapSnapshotView.prototype.dispose):
        (WebInspector.HeapSnapshotView.prototype.get statusBarItems):
        (WebInspector.HeapSnapshotView.prototype.get profile):
        (WebInspector.HeapSnapshotView.prototype.get profileWrapper):
        (WebInspector.HeapSnapshotView.prototype.get baseProfile):
        (WebInspector.HeapSnapshotView.prototype.get baseProfileWrapper):
        (WebInspector.HeapSnapshotView.prototype.wasShown.profileCallback1):
        (WebInspector.HeapSnapshotView.prototype.wasShown.profileCallback2):
        (WebInspector.HeapSnapshotView.prototype.wasShown):
        (WebInspector.HeapSnapshotView.prototype.willHide):
        (WebInspector.HeapSnapshotView.prototype.onResize):
        (WebInspector.HeapSnapshotView.prototype.searchCanceled):
        (WebInspector.HeapSnapshotView.prototype.performSearch.matchesByName):
        (WebInspector.HeapSnapshotView.prototype.performSearch.matchesById):
        (WebInspector.HeapSnapshotView.prototype.performSearch.matchesQuery):
        (WebInspector.HeapSnapshotView.prototype.performSearch):
        (WebInspector.HeapSnapshotView.prototype.jumpToFirstSearchResult):
        (WebInspector.HeapSnapshotView.prototype.jumpToLastSearchResult):
        (WebInspector.HeapSnapshotView.prototype.jumpToNextSearchResult):
        (WebInspector.HeapSnapshotView.prototype.jumpToPreviousSearchResult):
        (WebInspector.HeapSnapshotView.prototype.showingFirstSearchResult):
        (WebInspector.HeapSnapshotView.prototype.showingLastSearchResult):
        (WebInspector.HeapSnapshotView.prototype._jumpToSearchResult):
        (WebInspector.HeapSnapshotView.prototype.refreshVisibleData):
        (WebInspector.HeapSnapshotView.prototype._changeBase):
        (WebInspector.HeapSnapshotView.prototype._changeFilter):
        (WebInspector.HeapSnapshotView.prototype._createToolbarWithClassNameFilter):
        (WebInspector.HeapSnapshotView.prototype._changeNameFilter):
        (WebInspector.HeapSnapshotView.prototype._profiles):
        (WebInspector.HeapSnapshotView.prototype._loadProfile):
        (WebInspector.HeapSnapshotView.prototype._loadProfileByIndex):
        (WebInspector.HeapSnapshotView.prototype.isDetailedSnapshot):
        (WebInspector.HeapSnapshotView.prototype.processLoadedSnapshot):
        (WebInspector.HeapSnapshotView.prototype._selectionChanged):
        (WebInspector.HeapSnapshotView.prototype._inspectedObjectChanged):
        (WebInspector.HeapSnapshotView.prototype._setRetainmentDataGridSource):
        (WebInspector.HeapSnapshotView.prototype._mouseDownInContentsGrid):
        (WebInspector.HeapSnapshotView.prototype.changeView.sortingComplete):
        (WebInspector.HeapSnapshotView.prototype.changeView):
        (WebInspector.HeapSnapshotView.prototype._changeView):
        (WebInspector.HeapSnapshotView.prototype._getHoverAnchor):
        (WebInspector.HeapSnapshotView.prototype._resolveObjectForPopover):
        (WebInspector.HeapSnapshotView.prototype._helpClicked.appendHelp):
        (WebInspector.HeapSnapshotView.prototype._helpClicked):
        (WebInspector.HeapSnapshotView.prototype._startRetainersHeaderDragging):
        (WebInspector.HeapSnapshotView.prototype._retainersHeaderDragging):
        (WebInspector.HeapSnapshotView.prototype._endRetainersHeaderDragging):
        (WebInspector.HeapSnapshotView.prototype._updateRetainmentViewHeight):
        (WebInspector.HeapSnapshotView.prototype._updateBaseOptions):
        (WebInspector.HeapSnapshotView.prototype._updateFilterOptions):
        (WebInspector.HeapSnapshotProfileType):
        (WebInspector.HeapSnapshotProfileType.prototype.get buttonTooltip):
        (WebInspector.HeapSnapshotProfileType.prototype.buttonClicked):
        (WebInspector.HeapSnapshotProfileType.prototype.get treeItemTitle):
        (WebInspector.HeapSnapshotProfileType.prototype.get description):
        (WebInspector.HeapSnapshotProfileType.prototype.createSidebarTreeElementForProfile):
        (WebInspector.HeapSnapshotProfileType.prototype.createView):
        * inspector/front-end/ProfilesPanel.js:
        (WebInspector.ProfilesPanel.prototype._addHeapSnapshotChunk):
        (WebInspector.ProfilesPanel.prototype.takeHeapSnapshot):
        (WebInspector.ProfilesPanel.prototype._reportHeapSnapshotProgress):
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/heapProfiler.css:
        (.heap-snapshot-view):
        (.heap-snapshot-view.visible):
        (.heap-snapshot-view .view):
        (.heap-snapshot-view .view.visible):
        (.heap-snapshot-view .data-grid tr:empty):
        (.heap-snapshot-view .data-grid):
        (.heap-snapshot-view .data-grid td.count-column):
        (.heap-snapshot-view .data-grid td.addedCount-column):
        (.heap-snapshot-view .data-grid td.removedCount-column):
        (.heap-snapshot-view .data-grid td.countDelta-column):
        (.heap-snapshot-view .data-grid td.addedSize-column):
        (.heap-snapshot-view .data-grid td.removedSize-column):
        (.heap-snapshot-view .data-grid td.sizeDelta-column):
        (.heap-snapshot-view .data-grid td.shallowSize-column):
        (.heap-snapshot-view .data-grid td.retainedSize-column):
        (.heap-snapshot-view .data-grid td.distanceToWindow-column):
        (.heap-snapshot-view .data-grid span.percent-column):
        (.heap-snapshot-view .console-formatted-object, .console-formatted-node):
        (.heap-snapshot-view .console-formatted-string):
        (.heap-snapshot-view .console-formatted-id):
        (.heap-snapshot-view .data-grid tr.selected *):
        (.heap-snapshot-view .data-grid:focus tr.selected *):
        (.heap-snapshot-view .delimiter):
        (.heap-snapshot-view .views-container):
        (.heap-snapshot-view .views-container .view):
        (.heap-snapshot-view .retaining-paths-view):
        (.heap-snapshot-view .class-view-grid):
        (.heap-snapshot-view .class-view-toolbar):
        (.heap-snapshot-view .class-view-toolbar input.class-name-filter):
        (.heap-snapshot-view .retainers-view-header):
        (.heap-snapshot-view .retainers-view-header .title > span):
        (.heap-snapshot-view tr:not(.selected) td.object-column span.highlight):
        (.heap-snapshot-view td.object-column span.grayed):
        (.heap-snapshot-help-status-bar-item .glyph):
        (table.heap-snapshot-help):
        * inspector/front-end/inspector.html:

2012-04-16  Andrey Kosyakov  <caseq@chromium.org>

        Web Inspector: touch pad is pain to use in lower pane of Timeline panel due two two-axis scrolling
        https://bugs.webkit.org/show_bug.cgi?id=83946

        Reviewed by Pavel Feldman.

        Remove delegation of mousewheel events from lower timeline pane to the timeline overview. This disables
        support for moving overview window with horizontal swype over lower timeline pane, thus removing
        an irritating situation when we try to both change overview window and scroll lower timeline pane
        upon a single touchpad gesture. Those willing to move timeline window now would need to position
        mouse over overview.

        * inspector/front-end/TimelineOverviewPane.js:
        (WebInspector.TimelineOverviewWindow.prototype._onMouseWheel):
        (WebInspector.TimelineOverviewWindow.prototype._zoom):
        * inspector/front-end/TimelinePanel.js:
        (WebInspector.TimelinePanel):

2012-04-11  Philippe Normand  <pnormand@igalia.com>

        [GStreamer] HRTFDatabaseLoader conflicts with AudioFileReader
        https://bugs.webkit.org/show_bug.cgi?id=78095

        Reviewed by Martin Robinson.

        Moved the GStreamer initialization logic to a new
        GStreamerUtilities module, used by the MediaPlayer and the
        AudioContext. I also removed the static variables as
        gst_init_check already handles cases where it's called multiple
        times.

        * GNUmakefile.list.am:
        * Modules/webaudio/AudioContext.cpp:
        (WebCore::AudioContext::constructCommon):
        * platform/audio/gstreamer/AudioDestinationGStreamer.cpp:
        (WebCore::AudioDestinationGStreamer::AudioDestinationGStreamer):
        * platform/audio/gstreamer/AudioFileReaderGStreamer.cpp:
        (WebCore::AudioFileReader::createBus):
        * platform/graphics/gstreamer/GRefPtrGStreamer.cpp:
        (WTF::adoptGRef):
        (WTF):
        (WTF::GstElementFactory):
        * platform/graphics/gstreamer/GRefPtrGStreamer.h:
        (WTF):
        * platform/graphics/gstreamer/GStreamerUtilities.cpp: Added.
        (WebCore):
        (WebCore::initializeGStreamer):
        * platform/graphics/gstreamer/GStreamerUtilities.h: Added.
        (WebCore):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::doGstInit):

2012-04-16  ChangSeok Oh  <shivamidow@gmail.com>

        Update GraphicsContext3DOpenGLES.cpp and fix some issues to build with GLES.
        https://bugs.webkit.org/show_bug.cgi?id=83982

        Reviewed by Martin Robinson.

        GL_BGRA is not defined in GLESv2, so it causes build-break at readRenderingResults.
        To resolve this, a helper function readPixelsAndConvertToBGRAIfNecessary is added
        in GC3DOpenGL.cpp & GC3DOpenGLES.cpp and it's used in GC3DOpenGLCommon.cpp.
        And some other issues to build with GLES are gone with this patch.

        No new tests, since no new feature.

        * platform/graphics/GraphicsContext3D.h:
        * platform/graphics/opengl/GraphicsContext3DOpenGL.cpp:
        (WebCore::GraphicsContext3D::readPixelsAndConvertToBGRAIfNecessary):
        (WebCore):
        * platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:
        (WebCore::GraphicsContext3D::readRenderingResults):
        * platform/graphics/opengl/GraphicsContext3DOpenGLES.cpp:
        (WebCore::GraphicsContext3D::readPixelsAndConvertToBGRAIfNecessary):
        (WebCore):
        (WebCore::GraphicsContext3D::reshapeFBOs):
        (WebCore::GraphicsContext3D::resolveMultisamplingIfNecessary):

2012-04-16  Xiaomei Ji  <xji@chromium.org>

        [chromium] wrong justification for arabic/persian page in cr-win.
        https://bugs.webkit.org/show_bug.cgi?id=83227

        Reviewed by Kent Tamura.

        Disable kashida justification if using Skia to draw.

        Test: fast/text/international/arabic-justify.html

        * platform/graphics/chromium/UniscribeHelper.cpp:
        (WebCore::UniscribeHelper::justify):

2012-04-16  Jia Pu  <jpu@apple.com>

        Build fix.

        Change set 114220 broke OS X internal build. Change set 114231 attempted to fix it, but isn't entirely
        correct. This patch amends change set 114231.

        * WebCore.exp.in:
        * editing/DictationAlternative.cpp:
        (WebCore::DictationAlternative::DictationAlternative):
        * editing/DictationAlternative.h:
        (DictationAlternative):

2012-04-16  Antti Koivisto  <antti@apple.com>

        REGRESSION (r104445): Style is not recomputed on serenaandlily.com
        https://bugs.webkit.org/show_bug.cgi?id=83663

        Reviewed by Andreas Kling.
        
        CSS class and id selectors are case insensitive in non-strict modes. The code
        that invalidated the scope elements used getElementByID() which is case
        sensitive in all modes. As a result we would fail to invalidate elements
        that would match a style rule but used different case in id.
        
        The new code invalidates by crawling the DOM tree. This often (when there are classes) 
        actually faster than the existing code as we can now handle everything in a single pass.
        Each class scope required a crawl with the old code.
        
        The code uses the same functions as the selector matching code to get the same behavior.
        
        The maximum class limit is lifted as number of classes does not affect complexity anymore.

        Test: fast/css/id-or-class-before-stylesheet-strict.html

        * css/SelectorChecker.h:
        (WebCore::SelectorChecker::elementMatchesSelectorScopes):
        (WebCore):
        * dom/Document.cpp:
        (WebCore::Document::testAddedStylesheetRequiresStyleRecalc):
        (WebCore):

2012-04-16  Uday Kiran  <udaykiran@motorola.com>

        CSS3 Selectors failures on css3test.com
        https://bugs.webkit.org/show_bug.cgi?id=83885

        Reviewed by Zoltan Herczeg.

        Parsing fix for CSS3 selectors :nth-child(), :nth-last-child() :nth-of-type() :nth-last-of-type()
        with values -n-b and n-b as they are of valid form an+b where a and b are integers.
        http://www.w3.org/TR/selectors/#structural-pseudos

        Descriptors of form n-b or -n-b, where b is number, are valid CSS identifiers.
        However, in NthChildMode we need to check whether this identifier is a valid nth child descriptor.
        The original code only checked this if the string was n- or -n- but this is not enough.
        We need to check everything which starts with an n- or -n- prefix.

        Test: css3/parsing-css3-nthchild.html

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

2012-04-16  Eric Carlson  <eric.carlson@apple.com>

        ASSERT in notifyChildInserted when HTMLMediaElement is removed from tree
        https://bugs.webkit.org/show_bug.cgi?id=83949

        Reviewed by Antti Koivisto.

        No new tests. I was not able to create a reproducible test case, but I have been unable
        to reproduce the ASSERT that occassionally fired in existing tests since I have been
        living on these changes.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::insertedIntoDocument): Call configureMediaControls.
        (WebCore::HTMLMediaElement::removedFromDocument): Ditto.
        (WebCore::HTMLMediaElement::configureMediaControls): Don't show controls when the
            media element is not in a Document.

2012-04-16  Eric Carlson  <eric.carlson@apple.com>

        Layout Test media/track/track-delete-during-setup.html is hitting an ASSERT_NOT_REACHED
        https://bugs.webkit.org/show_bug.cgi?id=82269

        Reviewed by Antti Koivisto.

        No new tests, already tested by media/track/track-delete-during-setup.html.

        * html/HTMLTrackElement.cpp:
        (WebCore::HTMLTrackElement::insertedIntoDocument): Don't notify the media element until/unless
        the track element is inserted into the document.
        * html/HTMLTrackElement.h:

2012-04-16  Yael Aharon  <yael.aharon@nokia.com>

        [Qt][WK2] Fixed elements position is wrong after zooming.
        https://bugs.webkit.org/show_bug.cgi?id=83981

        Reviewed by Kenneth Rohde Christiansen.

        When setFixedVisibleContentRect is called we mark all fixed elements in the frame for layout.
        In order to find these elements, RenderView maintains a list of fixed elements.
        They are added and removed at the same time that they are added and removed from their parent RenderBlock.
        The idea is taken from the iOS5.1 branch, at opensource.apple.com.
        Added a manual test that allows removing and adding fixed elements at will.

        * page/FrameView.cpp:
        (WebCore::FrameView::setFixedVisibleContentRect):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::insertPositionedObject):
        (WebCore::RenderBlock::removePositionedObject):
        * rendering/RenderView.cpp:
        (WebCore::RenderView::setFixedPositionedObjectsNeedLayout):
        (WebCore):
        (WebCore::RenderView::insertFixedPositionedObject):
        (WebCore::RenderView::removeFixedPositionedObject):
        * rendering/RenderView.h:
        (RenderView):

2012-04-13  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: extract ContentProvider into its own file, make NetworkRequest, Resoruce and others implement it.
        https://bugs.webkit.org/show_bug.cgi?id=83922

        Reviewed by Yury Semikhatsky.

        We have two different types of requestContent methods: one on the source mapping level and one on the resource level.
        There are also adapters between the two. I'm aligning it all to a single requestContent method declared in ContentProvider.

        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * inspector/compile-front-end.py:
        * inspector/front-end/BreakpointsSidebarPane.js:
        (WebInspector.JavaScriptBreakpointsSidebarPane.prototype.addBreakpoint.didRequestContent):
        (WebInspector.JavaScriptBreakpointsSidebarPane.prototype.addBreakpoint):
        * inspector/front-end/ContentProvider.js: Added.
        (WebInspector.ContentProvider):
        (WebInspector.ContentProvider.prototype.contentURL):
        (WebInspector.ContentProvider.prototype.requestContent):
        (WebInspector.ContentProvider.prototype.searchInContent):
        (WebInspector.ContentProvider.SearchMatch):
        * inspector/front-end/ContentProviders.js:
        (WebInspector.ScriptContentProvider.prototype.contentURL):
        (WebInspector.ScriptContentProvider.prototype.requestContent):
        (WebInspector.ConcatenatedScriptsContentProvider.prototype.contentURL):
        (WebInspector.ConcatenatedScriptsContentProvider.prototype.requestContent):
        (WebInspector.CompilerSourceMappingContentProvider.prototype.contentURL):
        (WebInspector.CompilerSourceMappingContentProvider.prototype.requestContent):
        (WebInspector.StaticContentProvider.prototype.contentURL):
        (WebInspector.StaticContentProvider.prototype.requestContent):
        * inspector/front-end/DebuggerPresentationModel.js:
        * inspector/front-end/ExtensionServer.js:
        (WebInspector.ExtensionServer.prototype._getResourceContent):
        * inspector/front-end/JavaScriptSourceFrame.js:
        (WebInspector.JavaScriptSourceFrame.prototype.requestContent):
        * inspector/front-end/NetworkItemView.js:
        (WebInspector.RequestContentView.prototype._ensureInnerViewShown.callback):
        (WebInspector.RequestContentView.prototype._ensureInnerViewShown):
        * inspector/front-end/NetworkRequest.js:
        (WebInspector.NetworkRequest.prototype.contentURL):
        (WebInspector.NetworkRequest.prototype.requestContent):
        (WebInspector.NetworkRequest.prototype.searchInContent):
        (WebInspector.NetworkRequest.prototype.populateImageSource):
        (WebInspector.NetworkRequest.prototype._innerRequestContent.onResourceContent):
        (WebInspector.NetworkRequest.prototype._innerRequestContent):
        * inspector/front-end/RawSourceCode.js:
        (WebInspector.RawSourceCode.prototype._createContentProvider):
        (WebInspector.RawSourceCode.prototype._createSourceMapping.didRequestContent):
        (WebInspector.RawSourceCode.prototype._createSourceMapping):
        * inspector/front-end/Resource.js:
        (WebInspector.Resource.prototype.contentURL):
        (WebInspector.Resource.prototype.requestContent):
        (WebInspector.Resource.prototype._innerRequestContent.callback):
        (WebInspector.Resource.prototype._innerRequestContent):
        (WebInspector.ResourceRevision.prototype.contentURL):
        (WebInspector.ResourceRevision.prototype.requestContent.callbackWrapper):
        (WebInspector.ResourceRevision.prototype.requestContent):
        (WebInspector.ResourceRevision.prototype.searchInContent):
        * inspector/front-end/ResourceView.js:
        (WebInspector.ResourceSourceFrame.prototype.requestContent):
        (WebInspector.ResourceSourceFrame.prototype._contentChanged):
        (WebInspector.ResourceRevisionSourceFrame.prototype.requestContent):
        * inspector/front-end/ScriptFormatter.js:
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype.requestVisibleScriptOutline):
        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame.prototype.setContent):
        * inspector/front-end/UISourceCode.js:
        (WebInspector.UISourceCode):
        (WebInspector.UISourceCode.prototype.requestContent):
        (WebInspector.UISourceCode.prototype._didRequestContent):
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/inspector.html:

2012-04-16  Jason Liu  <jason.liu@torchmobile.com.cn>

        [BlackBerry] Missing readyState 2 when a XMLHttpRequest calls xmlhttp.open("HEAD","notExist.html",true).
        https://bugs.webkit.org/show_bug.cgi?id=83866

        Reviewed by George Staikos.
        
        We receive 404 for a XMLHttpRequest which calls open("HEAD", "notExist.html", true).
        There are no data received because its method is HEAD.
        This case shouldn't be treated as a failure.

        Test: http/tests/xmlhttprequest/xmlhttprequest-check-head-readystate-for-404.html

        * platform/network/blackberry/NetworkJob.cpp:
        (WebCore::NetworkJob::handleNotifyClose):

2012-04-16  Jon Lee  <jonlee@apple.com>

        Build fix.

        * WebCore.exp.in:
        * editing/DictationAlternative.cpp:
        (WebCore::DictationAlternative::DictationAlternative):
        * editing/DictationAlternative.h:
        (DictationAlternative):

2012-04-16  George Staikos  <staikos@webkit.org>

        Fix signed/unsigned mismatch warning for BlackBerry debug builds.
        https://bugs.webkit.org/show_bug.cgi?id=80790

        Reviewed by Rob Buis.

        * platform/blackberry/CookieMap.cpp:
        (WebCore::CookieMap::removeCookieAtIndex):

2012-04-15  Kent Tamura  <tkent@chromium.org>

        WebCore::weekDayShortLabels() for ICU always returns the fallback labels
        https://bugs.webkit.org/show_bug.cgi?id=83991

        Reviewed by Hajime Morita.

        We need to specfiy 1-based index to udat_getSymbols() with
        UDAT_SHORT_WEEKDAYS. Also, udat_countSymbols() with UDAT_SHORT_WEEKDAYS
        returns 8.

        No new tests because this behavior depends on locale setting.

        * platform/text/LocalizedCalendarICU.cpp:
        (WebCore::createLabelVector): Add startIndex argument.
        (WebCore::createMonthLabels):
        Pass UDAT_JANUARRY(0) as startIndex to createLabelVector().
        (WebCore::createWeekDayShortLabels):
        Pass UDAT_SUNDAY(1) as startIndex to createLabelVector().

2012-04-15  MORITA Hajime  <morrita@google.com>

        Unreviewed attempt to chromium-win build fix.

        * editing/DictationAlternative.h:

2012-04-15  Noel Gordon  <noel.gordon@gmail.com>

        Align JSC/V8 bindings canvas.toDataURL() code flows
        https://bugs.webkit.org/show_bug.cgi?id=84003

        Reviewed by Eric Seidel.

        Align JSC/V8 bindings canvas.toDataURL() code flow so that the binding
        code implementations read alike.

        No new tests. Covered by existing cnavas toDataURL tests.

        * bindings/js/JSHTMLCanvasElementCustom.cpp:
        (WebCore::JSHTMLCanvasElement::toDataURL):

2012-04-15  Jia Pu  <jpu@apple.com>

        Introducing DictationCommand.
        https://bugs.webkit.org/show_bug.cgi?id=83549

        Reviewed by Hajime Morita.

        No new tests. This patch doesn't introduce any change of new functionality. It prepares for
        additional changes which will inlude tests.

        On OS X, alternative dictation results need to be stored as document markers. This patch introduces
        following changes to achieve this:
        1. Added DictationMarkDetails to store non-string type maker detail.
        2. Introduce DictationCommand, which is similor to TypingCommand, but allows inserting text with
          attached markers.
        3. Added Editor::insertDictatedText as interaface to WebKit and WebKit2.
        4. Added struct DictationAlternative to pass dictation related info from WebKit to WebCore.

        Several fragments of code in TypingCommand can be also used by DictationCommand. So this patch
        introduced a new class, TextInsertionBaseCommand. It's a subclass of CompositeEditCommmand, and
        base class of both TypingCommand and DictationCommand.

        This patch also extends InsertTextCommand class. Its constructor will take an TextInsertionMarkerSupplier
        object. After text is inserted to a node, InsertTextCommand would give marker supplier a chance to
        add document markers to the inserted text.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.exp.in:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/Document.cpp:
        (WebCore::eventTargetNodeForDocument): Moved this function from EventHandler so that it can be used
          by AlternativeTextController.
        (WebCore):
        * dom/Document.h:
        (WebCore):
        * dom/DocumentMarker.cpp:
        (WebCore::DocumentMarker::DocumentMarker): New constructor that takes a pointer to DocumentMarkerDetails object.
        (WebCore):
        * dom/DocumentMarker.h:
        (WebCore::DocumentMarker::AllMarkers::AllMarkers):
        (DocumentMarker):
        * dom/DocumentMarkerController.cpp:
        (WebCore::DocumentMarkerController::addMarker):
        (WebCore):
        * dom/DocumentMarkerController.h:
        (DocumentMarkerController):
        * dom/TextEvent.cpp:
        (WebCore::TextEvent::createForDictation):
        (WebCore):
        (WebCore::TextEvent::TextEvent):
        * dom/TextEvent.h: Added member variable for dictation alternatives.
        (TextEvent):
        (WebCore::TextEvent::isDictation):
        (WebCore::TextEvent::dictationAlternatives):
        * dom/TextEventInputType.h:
        * editing/AlternativeTextController.cpp:
        (WebCore::AlternativeTextController::AlternativeTextController):
        (WebCore::AlternativeTextController::insertDictatedText): Used by Editor::insertDictatedText().
        (WebCore):
        * editing/AlternativeTextController.h:
        (WebCore):
        (DictationMarkerDetails):
        (WebCore::DictationMarkerDetails::create):
        (WebCore::DictationMarkerDetails::originalText):
        (WebCore::DictationMarkerDetails::dictationContext):
        (WebCore::DictationMarkerDetails::DictationMarkerDetails):
        (AlternativeTextController):
        * editing/CompositeEditCommand.h:
        (WebCore::CompositeEditCommand::isDictationCommand):
        * editing/DictationAlternative.cpp: Added.
        (WebCore):
        (WebCore::DictationAlternative::DictationAlternative):
        * editing/DictationAlternative.h: Added. Data structure for passing dictation related data from WebKit to WebCore.
        (DictationAlternative):
        (WebCore):
        * editing/DictationCommand.cpp: Added.
        (WebCore):
        (DictationCommandLineOperation):
        (WebCore::DictationCommandLineOperation::DictationCommandLineOperation):
        (WebCore::DictationCommandLineOperation::operator()):
        (DictationMarkerSupplier):
        (WebCore::DictationMarkerSupplier::create):
        (WebCore::DictationMarkerSupplier::addMarkersToTextNode):
        (WebCore::DictationMarkerSupplier::DictationMarkerSupplier):
        (WebCore::DictationCommand::DictationCommand):
        (WebCore::DictationCommand::insertText):
        (WebCore::DictationCommand::doApply):
        (WebCore::DictationCommand::insertTextRunWithoutNewlines):
        (WebCore::DictationCommand::insertParagraphSeparator):
        (WebCore::DictationCommand::collectDictationAlternativesInRange):
        * editing/DictationCommand.h: Added.
        (WebCore):
        (DictationCommand):
        (WebCore::DictationCommand::isDictationCommand):
        (WebCore::DictationCommand::create):
        * editing/EditingAllInOne.cpp:
        * editing/Editor.cpp:
        (WebCore::Editor::insertDictatedText): Main interface that allows WebKit passes in text with attached dictation information.
        (WebCore):
        (WebCore::Editor::insertTextWithoutSendingTextEvent):
        (WebCore::Editor::updateMarkersForWordsAffectedByEditing):
        * editing/Editor.h:
        (Editor):
        * editing/InsertTextCommand.cpp:
        (WebCore::InsertTextCommand::InsertTextCommand):
        (WebCore):
        (WebCore::InsertTextCommand::doApply):
        * editing/InsertTextCommand.h:
        (WebCore):
        (TextInsertionMarkerSupplier): Interface to allow caller of InsertTextCommand to add document markers to inserted text.
        (WebCore::TextInsertionMarkerSupplier::~TextInsertionMarkerSupplier):
        (WebCore::TextInsertionMarkerSupplier::TextInsertionMarkerSupplier):
        (WebCore::InsertTextCommand::createWithMarkerSupplier):
        (InsertTextCommand):
        * editing/TextInsertionBaseCommand.cpp: Added. This class contains functions shared by TypingCommand and DictationCommand.
        (WebCore):
        (WebCore::TextInsertionBaseCommand::TextInsertionBaseCommand):
        (WebCore::TextInsertionBaseCommand::applyTextInsertionCommand):
        (WebCore::dispatchBeforeTextInsertedEvent):
        (WebCore::canAppendNewLineFeedToSelection):
        * editing/TextInsertionBaseCommand.h: Added.
        (WebCore):
        (TextInsertionBaseCommand):
        (WebCore::TextInsertionBaseCommand::~TextInsertionBaseCommand):
        (WebCore::forEachLineInString):
        * editing/TypingCommand.cpp:
        (TypingCommandLineOperation):
        (WebCore::TypingCommandLineOperation::TypingCommandLineOperation):
        (WebCore::TypingCommandLineOperation::operator()):
        (WebCore::TypingCommand::TypingCommand):
        (WebCore::TypingCommand::insertText):
        (WebCore::TypingCommand::insertLineBreak):
        (WebCore::TypingCommand::insertParagraphSeparator):
        * editing/TypingCommand.h:
        * page/EventHandler.cpp:
        * rendering/InlineTextBox.cpp:
        (WebCore::lineStyleForMarkerType):
        (WebCore::InlineTextBox::paintDocumentMarker): Renamed existing function to reflect new funcationality.
        (WebCore::InlineTextBox::paintDocumentMarkers):
        * rendering/InlineTextBox.h:
        (InlineTextBox):
        * testing/Internals.cpp:
        (WebCore::markerTypesFrom):

2012-04-15  James Robinson  <jamesr@chromium.org>

        [chromium] LayerRendererChromium shouldn't know anything about CCLayerImpl
        https://bugs.webkit.org/show_bug.cgi?id=83415

        Reviewed by Adrienne Walker.

        This removes all knowledge of CCLayerImpl from LayerRendererChromium. The most significant move code-wise is
        moving the HUD up to live on CCLayerTreeHostImpl, since it's aware of the layer tree. This involves two changes.
        First, CCHeadsUpDisplay is in charge of populating a ManagedTexture but the actual drawing code now lives in
        LayerRendererChromium. Second, since we don't recreate CCLayerTreeHostImpl on a lost context, the font atlas
        ownership is much simpler. Now a CCFontAtlas is created on the main thread if needed and passed asynchronously
        to the CCHeadsUpDisplay which takes ownership of the atlas.

        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::create):
        (WebCore::LayerRendererChromium::initialize):
        (WebCore::LayerRendererChromium::~LayerRendererChromium):
        (WebCore::LayerRendererChromium::beginDrawingFrame):
        (WebCore::LayerRendererChromium::drawHeadsUpDisplay):
        (WebCore):
        (WebCore::LayerRendererChromium::finishDrawingFrame):
        (WebCore::LayerRendererChromium::swapBuffers):
        * platform/graphics/chromium/LayerRendererChromium.h:
        (LayerRendererChromiumClient):
        (LayerRendererChromium):
        * platform/graphics/chromium/cc/CCHeadsUpDisplay.cpp:
        (WebCore::CCHeadsUpDisplay::CCHeadsUpDisplay):
        (WebCore::CCHeadsUpDisplay::setFontAtlas):
        (WebCore):
        (WebCore::CCHeadsUpDisplay::enabled):
        (WebCore::CCHeadsUpDisplay::showPlatformLayerTree):
        (WebCore::CCHeadsUpDisplay::draw):
        (WebCore::CCHeadsUpDisplay::drawHudContents):
        * platform/graphics/chromium/cc/CCHeadsUpDisplay.h:
        (WebCore):
        (WebCore::CCHeadsUpDisplay::create):
        (CCHeadsUpDisplay):
        * platform/graphics/chromium/cc/CCLayerTreeHost.cpp:
        (WebCore::CCLayerTreeHost::initialize):
        * platform/graphics/chromium/cc/CCLayerTreeHost.h:
        (CCLayerTreeHost):
        * platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:
        (WebCore::CCLayerTreeHostImpl::CCLayerTreeHostImpl):
        (WebCore::CCLayerTreeHostImpl::~CCLayerTreeHostImpl):
        (WebCore::CCLayerTreeHostImpl::canDraw):
        (WebCore::CCLayerTreeHostImpl::calculateRenderPasses):
        (WebCore::CCLayerTreeHostImpl::prepareToDraw):
        (WebCore::CCLayerTreeHostImpl::drawLayers):
        (WebCore::CCLayerTreeHostImpl::swapBuffers):
        (WebCore::CCLayerTreeHostImpl::initializeLayerRenderer):
        (WebCore::CCLayerTreeHostImpl::setFullRootLayerDamage):
        (WebCore::CCLayerTreeHostImpl::layerTreeAsText):
        (WebCore):
        (WebCore::CCLayerTreeHostImpl::setFontAtlas):
        (WebCore::CCLayerTreeHostImpl::dumpRenderSurfaces):
        * platform/graphics/chromium/cc/CCLayerTreeHostImpl.h:
        (CCLayerTreeHostImpl):
        (WebCore::CCLayerTreeHostImpl::rootLayer):
        * platform/graphics/chromium/cc/CCProxy.h:
        (WebCore):
        (CCProxy):
        * platform/graphics/chromium/cc/CCSingleThreadProxy.cpp:
        (WebCore::CCSingleThreadProxy::initializeLayerRenderer):
        (WebCore::CCSingleThreadProxy::recreateContext):
        (WebCore::CCSingleThreadProxy::setFontAtlas):
        (WebCore):
        * platform/graphics/chromium/cc/CCSingleThreadProxy.h:
        * platform/graphics/chromium/cc/CCThreadProxy.cpp:
        (WebCore::CCThreadProxy::initializeLayerRendererOnImplThread):
        (WebCore::CCThreadProxy::setFontAtlas):
        (WebCore):
        (WebCore::CCThreadProxy::setFontAtlasOnImplThread):
        (WebCore::CCThreadProxy::recreateContextOnImplThread):
        * platform/graphics/chromium/cc/CCThreadProxy.h:
        (CCThreadProxy):

2012-04-15  Antti Koivisto  <antti@apple.com>

        Capture CSS parser context
        https://bugs.webkit.org/show_bug.cgi?id=83998

        Reviewed by Andreas Kling.

        Currently the CSS parser calls to the Document and StyleSheetInternal objects to get settings, base URL etc.
        The required information should be passed in on parser construction instead. The parser should not need to
        know about the document at all.
        
        The patch adds CSSParserContext struct that captures the parsing context. StyleSheetInternal saves the
        parsing context and reuses it for any further parsing.
        
        If the same stylesheet source is parsed with an identical context then the resulting stylesheet structure will
        be identical. This will allow sharing parsed stylesheets in the future.

        * css/CSSGrammar.y:
        * css/CSSImportRule.cpp:
        (WebCore::StyleRuleImport::setCSSStyleSheet):
        * css/CSSMediaRule.cpp:
        (WebCore::CSSMediaRule::insertRule):
        * css/CSSPageRule.cpp:
        (WebCore::CSSPageRule::setSelectorText):
        * css/CSSParser.cpp:
        (WebCore):
        (WebCore::strictCSSParserContext):
        (WebCore::CSSParserContext::CSSParserContext):
        (WebCore::CSSParser::CSSParser):
        (WebCore::CSSParser::parseKeyframeRule):
        (WebCore::CSSParser::parseValue):
        (WebCore::CSSParser::parseSelector):
        (WebCore::CSSParser::completeURL):
        (WebCore::CSSParser::parseContent):
        (WebCore::CSSParser::parseAttr):
        (WebCore::CSSParser::parseFillImage):
        (WebCore::CSSParser::parseFontFaceSrcURI):
        (WebCore::CSSParser::parseFontFaceSrc):
        (WebCore::CSSParser::parseBorderImage):
        (WebCore::CSSParser::parseImageSet):
        (WebCore::CSSParser::parseCustomFilter):
        (WebCore::CSSParser::parseFilter):
        (WebCore::CSSParser::cssRegionsEnabled):
        (WebCore::CSSParser::parseFlowThread):
        (WebCore::CSSParser::createMediaRule):
        (WebCore::CSSParser::createStyleRule):
        (WebCore::CSSParser::createFontFaceRule):
        (WebCore::CSSParser::createPageRule):
        (WebCore::CSSParser::createKeyframe):
        * css/CSSParser.h:
        (CSSParser):
        (WebCore::CSSParser::inStrictMode):
        (WebCore::CSSParser::inQuirksMode):
        (WebCore::CSSParser::validUnit):
        * css/CSSParserMode.h:
        (WebCore):
        (CSSParserContext):
        * css/CSSRule.h:
        (WebCore::CSSRule::parserContext):
        (CSSRule):
        * css/CSSStyleRule.cpp:
        (WebCore::CSSStyleRule::setSelectorText):
        * css/CSSStyleSheet.cpp:
        (WebCore::StyleSheetInternal::StyleSheetInternal):
        (WebCore::StyleSheetInternal::parseString):
        (WebCore::StyleSheetInternal::parseStringAtLine):
        (WebCore):
        (WebCore::StyleSheetInternal::updateBaseURL):
        (WebCore::StyleSheetInternal::completeURL):
        (WebCore::CSSStyleSheet::insertRule):
        * css/CSSStyleSheet.h:
        (StyleSheetInternal):
        (WebCore::StyleSheetInternal::parserContext):
        (WebCore::StyleSheetInternal::charset):
        (WebCore::StyleSheetInternal::setFinalURL):
        (WebCore::StyleSheetInternal::baseURL):
        * css/CSSValuePool.cpp:
        * css/StylePropertySet.cpp:
        (WebCore::StylePropertySet::parseDeclaration):
        * css/WebKitCSSKeyframesRule.cpp:
        (WebCore::WebKitCSSKeyframesRule::insertRule):
        * dom/Document.cpp:
        (WebCore::Document::webkitGetFlowByName):
        (WebCore::Document::pageUserSheet):
        (WebCore::Document::pageGroupUserSheets):
        * dom/Element.cpp:
        (WebCore::Element::webkitMatchesSelector):
        * dom/Node.cpp:
        (WebCore::Node::querySelector):
        (WebCore::Node::querySelectorAll):
        * dom/ProcessingInstruction.cpp:
        (WebCore::ProcessingInstruction::parseStyleSheet):
        * dom/StyleElement.cpp:
        (WebCore::StyleElement::createSheet):
        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::setCSSStyleSheet):
        * html/shadow/ContentSelectorQuery.cpp:
        (WebCore::ContentSelectorQuery::ContentSelectorQuery):
        * inspector/InspectorStyleSheet.cpp:
        (WebCore::InspectorStyle::setPropertyText):
        (WebCore::InspectorStyleSheet::reparseStyleSheet):
        (WebCore::InspectorStyleSheet::ensureSourceData):
        (WebCore::InspectorStyleSheetForInlineStyle::getStyleAttributeRanges):

2012-04-15  Noel Gordon  <noel.gordon@gmail.com>

        [Cairo] Separate image encoding from dataURL construction
        https://bugs.webkit.org/show_bug.cgi?id=83975

        Reviewed by Martin Robinson.

        Remove the implicit assumption that a dataURL is the only desired output format
        of the image encoding phase.

        No new tests. Covered by existing canvas toDataURL tests.

        * platform/graphics/cairo/ImageBufferCairo.cpp:
        (WebCore::writeFunction): Rename closure to output.
        (WebCore::encodeImage): Output the encoded image to the provided Vector<char>.
        PNG format is only supported per the Cairo encoding MIMETypeRegistry.
        (WebCore):
        (WebCore::ImageBuffer::toDataURL): Refactor to use encodeImage().

2012-04-15  Yuta Kitamura  <yutak@chromium.org>

        Leak in WebSocketChannel with workers/worker-reload.html (part 2)
        https://bugs.webkit.org/show_bug.cgi?id=83749

        Reviewed by David Levin.

        Second attempt to remove leaks around WorkerThreadableWebSocketChannel.

        No new tests, as this patch does not impose any functional change.

        * Modules/websockets/ThreadableWebSocketChannelClientWrapper.cpp:
        (WebCore::ThreadableWebSocketChannelClientWrapper::ThreadableWebSocketChannelClientWrapper):
        (WebCore::ThreadableWebSocketChannelClientWrapper::failedWebSocketChannelCreation):
        (WebCore::ThreadableWebSocketChannelClientWrapper::setFailedWebSocketChannelCreation):
        * Modules/websockets/ThreadableWebSocketChannelClientWrapper.h:
        Add a boolean flag indicating whether Bridge::initialize() has exited without receiving
        a pointer to the peer object.
        * Modules/websockets/WorkerThreadableWebSocketChannel.cpp:
        (WebCore::WorkerThreadableWebSocketChannel::WorkerContextDidInitializeTask::create):
        (WebCore::WorkerThreadableWebSocketChannel::WorkerContextDidInitializeTask::WorkerContextDidInitializeTask):
        (WebCore::WorkerThreadableWebSocketChannel::WorkerContextDidInitializeTask::performTask):
        Kick mainThreadDestroy() to delete the peer if the bridge has failed to receive
        a pointer to the peer (waitForMethodCompletion() exited due to message queue's
        termination).
        (WebCore::WorkerThreadableWebSocketChannel::Bridge::mainThreadInitialize):
        (WebCore::WorkerThreadableWebSocketChannel::Bridge::initialize):
        * Modules/websockets/WorkerThreadableWebSocketChannel.h:
        (WorkerThreadableWebSocketChannel):
        Make WorkerContextDidInitializeTask an inner class of WorkerThreadableWebSocketChannel
        so it can refer WorkerThreadableWebSocketChannel's static member function (mainThreadDestroy()).

2012-04-14  Emil A Eklund  <eae@chromium.org>

        Fix pixelSnapping for CalendarPicker, MediaControl and ScrollbarPart
        https://bugs.webkit.org/show_bug.cgi?id=83929

        Reviewed by Eric Seidel.

        Update CalendarPickerElement and MediaControlElements to use
        pixelSnappedSize in preparation for turning on subpixel support.
        Update RenderScrollbarPart to pixel snap rect before painting to ensure
        that it is painted on device pixel boundaries.

        No new tests, no change in functionality.

        * html/shadow/CalendarPickerElement.cpp:
        (WebCore::CalendarPickerElement::openPopup):
        * html/shadow/MediaControlElements.cpp:
        (WebCore::RenderMediaVolumeSliderContainer::layout):
        * rendering/RenderScrollbarPart.cpp:
        (WebCore::RenderScrollbarPart::paintIntoRect):

2012-04-14  Kent Tamura  <tkent@chromium.org>

        Day of week labels are wrong if WebCore::firstDayOfWeek() is not 0
        https://bugs.webkit.org/show_bug.cgi?id=83990

        Reviewed by Kentaro Hara.

        We passed the "weekStartDay" property value as a
        string. CalendarPickerElement::writeDocument() created:
            weekStartDay: "1",
        and the JavaScript code used it in the following code:
            dayLabels[(weekStartDay + i) % 7]
        If weekStartDay was "1", the expression (weekStartDay + i)
        produced "10", "11", "12", ... We expected "1", "2", "3", ...

        We need to pass the "weekStartDay" property as a number.

        No new tests because we have no ways to test this for now. We'll
        introduce tests for the calendar picker later.

        * html/shadow/CalendarPickerElement.cpp:
        (WebCore::addProperty): Add addProperty() function for a number.
        (WebCore::CalendarPickerElement::writeDocument):
        Pass a number, not a serialized number.

2012-04-14  Joe Thomas  <joethomas@motorola.com>

        Viewport-percentage Length units does not work for Replaced elements size
        https://bugs.webkit.org/show_bug.cgi?id=83425

        Reviewed by Antti Koivisto.

        Added the support for viewport-percentage length units while calculating the width/height of replaced elements.

        Tests: css3/viewport-percentage-lengths/viewport-percentage-image-size.html

        * platform/Length.h:
        (WebCore::Length::isSpecified):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::computeReplacedLogicalWidthUsing):

2012-04-14  Joe Thomas  <joethomas@motorola.com>

        CSSStyleDeclaration.getPropertyValue() for 'border-radius' returns null when value is set
        https://bugs.webkit.org/show_bug.cgi?id=80736

        Reviewed by Antti Koivisto.

        Added support for fetching the value of 'border-radius' CSS property which was missing.

        Test: fast/css/border-radius-property-value.html

        * css/StylePropertySet.cpp:
        (WebCore::StylePropertySet::getPropertyValue):

2012-04-14  David Hyatt  <hyatt@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=83826
        
        Wrong Font code path was chosen after r114032. The TextRun constructor has an additional argument that
        needs to be included if rounding hacks are mentioned.

        Reviewed by Dan Bernstein.

        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::drawTextInternal):
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::paintItemForeground):
        * rendering/break_lines.cpp:
        (WebCore::nextBreakablePosition):

2012-04-14  Noel Gordon  <noel.gordon@gmail.com>

        [Cairo] ImageBuffer::toDataURL(): improve error handling, add mimeType ASSERTs
        https://bugs.webkit.org/show_bug.cgi?id=83569

        Reviewed by Eric Seidel.

        No new tests. Covered by exiting fast/canvas/*toDataURL* tests.

        * platform/graphics/cairo/ImageBufferCairo.cpp:
        (WebCore::writeFunction): Return write success or failure with the appropriate
        cairo status code per http://cairographics.org/manual/cairo-PNG-Support.html
        (WebCore::ImageBuffer::toDataURL): Add mimeType ASSERT()s. <canvas> ensures that
        a valid mimeType (supported by the port) is sent to toDataURL() calls. Check for
        encoding failure and return "data:," if so.

2012-04-13  David Reveman  <reveman@chromium.org>

        [Chromium] Avoid unnecessary full tile updates for checkerboard tiles.
        https://bugs.webkit.org/show_bug.cgi?id=83804

        Reviewed by James Robinson.

        Cleanup code that determines if we need to use a buffered update and
        avoid buffering of tiles that are not in use by the impl thread.

        Tests: CCLayerTreeHostTestAtomicCommitWithPartialUpdate.runMultiThread
               TiledLayerChromiumTest.partialUpdates

        * platform/graphics/chromium/TiledLayerChromium.cpp:
        (UpdatableTile):
        (WebCore::UpdatableTile::UpdatableTile):
        (WebCore::TiledLayerChromium::pushPropertiesTo):
        (WebCore::TiledLayerChromium::tileOnlyNeedsPartialUpdate):
        (WebCore::TiledLayerChromium::tileNeedsBufferedUpdate):
        (WebCore::TiledLayerChromium::updateTiles):
        * platform/graphics/chromium/cc/CCLayerTreeHost.cpp:
        (WebCore::CCLayerTreeHost::bufferedUpdates):
        (WebCore):
        * platform/graphics/chromium/cc/CCLayerTreeHost.h:
        (CCLayerTreeHost):

2012-04-13  Dana Jansens  <danakj@chromium.org>

        [chromium] Cleanup texture memory eviction when LayerTreeHost becomes invisible
        https://bugs.webkit.org/show_bug.cgi?id=83899

        Reviewed by Adrienne Walker.

        When a LTH becomes invisible, the texture eviction is spread out across
        two different functions and is not entirely clear. We move all the logic
        together into a single place in didBecomeInvisibleOnImplThread() and
        make the consequences of the current code more clear.

        Covered by existing tests.

        * platform/graphics/chromium/cc/CCLayerTreeHost.cpp:
        (WebCore::CCLayerTreeHost::deleteContentsTexturesOnImplThread):
        (WebCore::CCLayerTreeHost::setVisible):
        (WebCore::CCLayerTreeHost::didBecomeInvisibleOnImplThread):

2012-04-13  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r114036.
        http://trac.webkit.org/changeset/114036
        https://bugs.webkit.org/show_bug.cgi?id=83969

        Breaks gmail.com causing it to never finish loading (Requested
        by danakj on #webkit).

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateHeader):
        (GenerateImplementation):
        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateNamedConstructorCallback):
        (GenerateImplementation):
        * bindings/scripts/IDLAttributes.txt:
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::JSTestObj::createPrototype):
        * bindings/scripts/test/JS/JSTestObj.h:
        * bindings/scripts/test/TestObj.idl:
        * bindings/scripts/test/V8/V8Float64Array.cpp:
        (WebCore):
        * bindings/scripts/test/V8/V8TestActiveDOMObject.cpp:
        (WebCore):
        * bindings/scripts/test/V8/V8TestCustomNamedGetter.cpp:
        (WebCore):
        * bindings/scripts/test/V8/V8TestEventConstructor.cpp:
        (WebCore):
        * bindings/scripts/test/V8/V8TestEventTarget.cpp:
        (WebCore):
        * bindings/scripts/test/V8/V8TestInterface.cpp:
        (WebCore):
        * bindings/scripts/test/V8/V8TestMediaQueryListListener.cpp:
        (WebCore):
        * bindings/scripts/test/V8/V8TestNamedConstructor.cpp:
        (WebCore):
        * bindings/scripts/test/V8/V8TestNode.cpp:
        (WebCore):
        * bindings/scripts/test/V8/V8TestObj.cpp:
        (WebCore):
        * bindings/scripts/test/V8/V8TestSerializedScriptValueInterface.cpp:
        (WebCore):
        * bindings/v8/NPV8Object.cpp:
        (WebCore::npObjectTypeInfo):
        * bindings/v8/V8BindingPerContextData.cpp:
        (WebCore::V8BindingPerContextData::init):
        (WebCore::V8BindingPerContextData::createWrapperFromCacheSlowCase):
        (WebCore::V8BindingPerContextData::constructorForTypeSlowCase):
        * bindings/v8/V8BindingPerContextData.h:
        (V8BindingPerContextData):
        * bindings/v8/V8HiddenPropertyName.h:
        (WebCore):
        * bindings/v8/WrapperTypeInfo.h:
        (WrapperTypeInfo):
        * bindings/v8/custom/V8HTMLImageElementConstructor.cpp:
        (WebCore):
        * dom/NodeList.idl:

2012-04-13  Alexandre Elias  <aelias@google.com>

        [chromium] Add null pointer check to animatePageScale
        https://bugs.webkit.org/show_bug.cgi?id=83940

        Reviewed by James Robinson.

        Add null pointer check to startPageScaleAnimation.

        If the root scroll layer goes away in the middle of a page scale
        animation, there can be a null pointer access here.

        No new tests.

        * platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:
        (WebCore::CCLayerTreeHostImpl::animatePageScale):

2012-04-13  Dana Jansens  <danakj@chromium.org>

        [chromium] Replicas should be included in the computed occlusion
        https://bugs.webkit.org/show_bug.cgi?id=82262

        Reviewed by Adrienne Walker.

        When merging a surface's occlusion up to its target, make a copy of it
        where the replica will be as well, and make sure that occlusion from a
        RenderSurface does not leave its clipRect.

        Unit test: CCOcclusionTrackerTestReplicaDoesOcclude
                   CCOcclusionTrackerTestReplicaWithClipping
                   CCOcclusionTrackerTestSurfaceChildOfSurface

        * platform/graphics/chromium/RenderSurfaceChromium.cpp:
        (WebCore::RenderSurfaceChromium::hasReplica):
        (WebCore):
        * platform/graphics/chromium/RenderSurfaceChromium.h:
        (RenderSurfaceChromium):
        * platform/graphics/chromium/cc/CCOcclusionTracker.cpp:
        (WebCore::transformSurfaceOpaqueRegion):
        (WebCore::::leaveToTargetRenderSurface):

2012-04-13  Raymond Liu  <raymond.liu@intel.com>

        AudioContext createChannelMerger() method should have optional argument for number of inputs.
        https://bugs.webkit.org/show_bug.cgi?id=83759

        Reviewed by Chris Rogers.

        Check https://dvcs.w3.org/hg/audio/raw-file/tip/webaudio/specification.html for the optional argument.

        Test: webaudio/audiochannelmerger-basic.html

        * Modules/webaudio/AudioChannelMerger.cpp:
        (WebCore):
        (WebCore::AudioChannelMerger::create):
        (WebCore::AudioChannelMerger::AudioChannelMerger):
        * Modules/webaudio/AudioChannelMerger.h:
        (AudioChannelMerger):
        * Modules/webaudio/AudioContext.cpp:
        (WebCore::AudioContext::createChannelMerger):
        (WebCore):
        * Modules/webaudio/AudioContext.h:
        (AudioContext):
        * Modules/webaudio/AudioContext.idl:

2012-04-13  Dana Jansens  <danakj@chromium.org>

        [chromium] Remove viewport memory restrictions
        https://bugs.webkit.org/show_bug.cgi?id=83316

        Reviewed by Adrienne Walker.

        We remove the memory restriction on web pages based on viewport size
        on desktop. This is causing pages that have complex use of layers to
        end up hitting our memory limits, and moreso when the window is small.
        Page complexity is not really a function of the viewport size.

        We drop the mininum memory limit entirely, and just evict all
        unprotected textures instead.

        Covered by existing tests.

        * platform/graphics/chromium/TextureManager.cpp:
        (WebCore::TextureManager::highLimitBytes):
        (WebCore::TextureManager::reclaimLimitBytes):
        * platform/graphics/chromium/TextureManager.h:
        (TextureManager):
        * platform/graphics/chromium/cc/CCLayerTreeHost.cpp:
        (WebCore::CCLayerTreeHost::beginCommitOnImplThread):
        (WebCore::CCLayerTreeHost::setVisible):
        (WebCore::CCLayerTreeHost::didBecomeInvisibleOnImplThread):
        (WebCore::CCLayerTreeHost::updateLayers):

2012-04-13  Ken Buchanan  <kenrb@chromium.org>

        Optimize tracking of intruding floats being removed from RenderBlock during layout
        https://bugs.webkit.org/show_bug.cgi?id=82928

        Reviewed by David Hyatt.

        Performance tweaks in RenderBlock layout as a follow up to r112935.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::clearFloats):

2012-04-13  Mihnea Ovidenie  <mihnea@adobe.com>

        [CSSRegions]Implement NamedFlow::contentNodes attribute
        https://bugs.webkit.org/show_bug.cgi?id=80134

        Reviewed by David Hyatt.

        The named flow content nodes collection contains those nodes with webkitFlowInto property set to 'flow'.
        In the list, the nodes are placed in document order. Nodes with display:none are also part of the list.
        The list of nodes is returned as a static node list.

        The content nodes are stored in RenderNamedFlowThread. The content nodes are added to the list in NodeRenderingContext::moveToFlowThreadIfNeeded
        and removed from the list in Element::detach. When an element -webkit-flow-into property is changed, the element is detached and attached.
        I have also added a bit in NodeFlags to mark that an element is part of a named flow (and the corresponding inNamedFlow/setInNamedFlow/clearInNamedFlow functions).

        Test: fast/regions/webkit-named-flow-content-nodes.html

        * dom/Document.cpp:
        (WebCore::Document::webkitGetFlowByName):
        * dom/Document.h:
        * dom/Element.cpp:
        (WebCore::Element::detach):
        * dom/Node.h:
        (WebCore::Node::inNamedFlow):
        (WebCore::Node::setInNamedFlow):
        (WebCore::Node::clearInNamedFlow):
        (Node):
        * dom/NodeRenderingContext.cpp:
        (WebCore::NodeRenderingContext::moveToFlowThreadIfNeeded):
        * dom/WebKitNamedFlow.cpp:
        (WebCore::WebKitNamedFlow::contentNodes):
        (WebCore):
        * dom/WebKitNamedFlow.h:
        (WebKitNamedFlow):
        * dom/WebKitNamedFlow.idl:
        * rendering/FlowThreadController.cpp:
        (WebCore::FlowThreadController::registerNamedFlowContentNode):
        (WebCore):
        (WebCore::FlowThreadController::unregisterNamedFlowContentNode):
        * rendering/FlowThreadController.h:
        (FlowThreadController):
        * rendering/RenderNamedFlowThread.cpp:
        (WebCore):
        (WebCore::RenderNamedFlowThread::registerNamedFlowContentNode):
        (WebCore::RenderNamedFlowThread::unregisterNamedFlowContentNode):
        * rendering/RenderNamedFlowThread.h:
        (WebCore):
        (RenderNamedFlowThread):
        (WebCore::RenderNamedFlowThread::contentNodes):
        (WebCore::RenderNamedFlowThread::hasContentNode):

2012-04-13  Jessie Berlin  <jberlin@apple.com>

        Remove the calls to CRASH() from ResourceLoader.cpp.
        https://bugs.webkit.org/show_bug.cgi?id=83962

        Reviewed by Alexey Proskuryakov.

        They were added in r91316 to aid debugging for the issue fixed in r105556 and r106130.

        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::willSendRequest):
        (WebCore::ResourceLoader::didSendData):
        (WebCore::ResourceLoader::didReceiveResponse):
        (WebCore::ResourceLoader::didReceiveData):
        (WebCore::ResourceLoader::didFinishLoading):
        (WebCore::ResourceLoader::didFail):
        (WebCore::ResourceLoader::wasBlocked):
        (WebCore::ResourceLoader::cannotShowURL):
        (WebCore::ResourceLoader::shouldUseCredentialStorage):
        (WebCore::ResourceLoader::willCacheResponse):

2012-04-13  Xiaomei Ji  <xji@chromium.org>

        REGRESSION(r102190) [chromium] text rendering (font and font size) in some Arabic/Persian page is wrong
        when using certain fonts
        https://bugs.webkit.org/show_bug.cgi?id=83523

        Reviewed by Kent Tamura.

        Revert r102190.
        Convert characters being treatAsSpace to white space. 

        * platform/graphics/chromium/UniscribeHelper.cpp:
        (WebCore::UniscribeHelper::fillRuns):
        (WebCore::UniscribeHelper::adjustSpaceAdvances):

2012-04-13  Timothy Hatcher  <timothy@apple.com>

        Change how the Web Insector is installed on Mac builds.

        <rdar://problem/10857918>

        Reviewed by Mark Rowe.

        * WebCore.xcodeproj/project.pbxproj: Updated Copy Inspector Resources
        and Streamline Inspector Source build phases.

2012-04-13  Jer Noble  <jer.noble@apple.com>

        Video at apple.com gets standard controls in addition to custom controls after returning from full screen
        https://bugs.webkit.org/show_bug.cgi?id=83939

        Reviewed by Eric Carlson.

        No new tests; DRT and WKTR don't have the infrastructure to test full-screen animation related bugs.

        Instead of asking the media element whether it is in full screen or not, rely on when the media root element
        was told that it enteredFullscreen() or exitedFullscreen(), which may occur at a different time than the
        media element due to animations.

        * html/shadow/MediaControlRootElement.cpp:
        (WebCore::MediaControlRootElement::reset):
        (WebCore::MediaControlRootElement::playbackStarted):
        (WebCore::MediaControlRootElement::enteredFullscreen):
        (WebCore::MediaControlRootElement::exitedFullscreen):
        (WebCore::MediaControlRootElement::defaultEventHandler):
        (WebCore::MediaControlRootElement::startHideFullscreenControlsTimer):
        (WebCore::MediaControlRootElement::hideFullscreenControlsTimerFired):
        * html/shadow/MediaControlRootElement.h:
        (MediaControlRootElement): Added m_isFullscreen;

2012-04-13  Jer Noble  <jer.noble@apple.com>

        fullscreen/video-controls-drag.html failing on Mac
        https://bugs.webkit.org/show_bug.cgi?id=81176

        Reviewed by Eric Carlson.

        No new tests.  Fixes fullscreen/video-controls-drag.html.

        Regressed in r110409.  When the -webkit-media-controls-panel were changed
        from position:absolute to position:relative, this broke dragging of the 
        controls in fullscreen, which relies on the panel being absolutely positioned
        to do its drag positioning. Change the way drag positioning is calculated to
        accommodate position:relative.

        * css/fullscreenQuickTime.css:
        (video:-webkit-full-screen::-webkit-media-controls-panel): Instead of bottom:50px,
            use margin-bottom:50px to push panel up from the bottom of the screen.
        * html/shadow/MediaControlElements.cpp:
        (WebCore::MediaControlPanelElement::startDrag): Do not ask for the current renderer location.
        (WebCore::MediaControlPanelElement::continueDrag): Use the delta between the event locations
            only to calculate the new panel position.
        * html/shadow/MediaControlElements.h:

2012-04-13  Simon Fraser  <simon.fraser@apple.com>

        Compositing layers not updated after scroll in WebKit1
        https://bugs.webkit.org/show_bug.cgi?id=83945

        Reviewed by James Robinson.
        
        Fix the WebKit1 code path to correctly update compositing layers
        after a scroll, by calling updateFixedElementsAfterScrolling() from
        scrollPositionChangedViaPlatformWidget().

        Covered by existing tests.

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

2012-04-13  Dean Jackson  <dino@apple.com>

        Don't process filters if the input region is exceptionally large.
        https://bugs.webkit.org/show_bug.cgi?id=83317

        Reviewed by Simon Fraser.

        An extremely large element causes problems with filters, either by
        taking too long to compute the output or using too much memory. The
        filter engine already has some constants for maximum expected size.
        Make sure the render tree checks them before deciding to apply
        effects.

        Tests: css3/filters/huge-region-composited.html
               css3/filters/huge-region.html

        * platform/graphics/filters/FilterEffect.cpp:
        (WebCore::FilterEffect::apply):
        * rendering/FilterEffectRenderer.cpp:
        (WebCore):
        (WebCore::isFilterSizeValid):
        (WebCore::FilterEffectRenderer::build):
        (WebCore::FilterEffectRenderer::updateBackingStore):
        (WebCore::FilterEffectRendererHelper::beginFilterEffect):
        * rendering/FilterEffectRenderer.h:
        (FilterEffectRenderer):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateOrRemoveFilterEffect):

2012-04-13  Anna Cavender  <annacc@chromium.org>

        Queue the cuechange event on HTMLTrackElement for proper sorting.
        https://bugs.webkit.org/show_bug.cgi?id=83858

        Reviewed by Eric Carlson.

        No new tests. Updates to media/track/track-cues-cuechange.html and
        media/track/track-mode.html

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::updateActiveTextTrackCues):
            Add HTMLTrackElement's cuechange event to the event queue rather than 
            firing it synchronously.
        * html/track/LoadableTextTrack.cpp:
            Remove fireCueChangeEvent() as it is no longer used.
        * html/track/LoadableTextTrack.h:
            Ditto.
        * html/track/TextTrack.h:
        (TextTrack):
            Ditto.

2012-04-11  Antonio Gomes  <agomes@rim.com>

        Be more restrictive when adding ScrollableArea's to FrameView's ScrollableArea's map
        https://bugs.webkit.org/show_bug.cgi?id=79611

        Reviewed by James Robinson.

        Source/WebCore:

        As of today, any FrameView attached to the Widget-tree or any
        RenderLayer whose corresponding RenderBox's style has a 'overflow'
        property set to 'auto' is cached in its containing scrollable areas set.
        We could be more restrictive about what we in fact want to
        cache as scrollable areas, by checking if the element as an overflow
        (i.e. more content than its viewport).

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

        Whenever the viewport changes, check if we have an scrollable/overflowed
        content, and update the cache accordingly.

        (WebCore::FrameView::setContentsSize):

        Whenever the contents size changes, check if we have a scrollable/overflowed
        content, and update the cache accordingly.

        (WebCore::FrameView::calculateScrollbarModesForLayout):

        Introduces a way to query for the scrollbars by only
        taking into account the "rules" set by the web author.
        For that, a new enum was added called SrollbarModesCalculationStrategy,
        which allows callers to discard for example client-side scrollbar policies
        in order to verify if a given frameview is scrollable or not.

        (WebCore::FrameView::updateScrollableAreaSet):

        Take into account various factors before considering a FrameView as
        scrollable. If in the end it is, it gets added to its parent FrameView
        scrollable areas map, otherwise removed.

        (WebCore):
        (WebCore::FrameView::addScrollableArea):

        Became unneeded, thus removed.

        (WebCore::FrameView::removeScrollableArea):

        Whenever a FrameView is removed from the Widget-tree,
        remove it from the cache.

        * page/FrameView.h:
        (FrameView):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateScrollbarsAfterLayout):

        Update scrollable area set after layout.

        (WebCore::RenderLayer::updateScrollbarsAfterStyleChange):

        Update scrollable area set after style changes.

        (WebCore::RenderLayer::styleChanged):

        Removed the scrollable areas logic detection from it.

        (WebCore::RenderLayer::updateScrollableAreaSet):

        Updates the containing FrameView scrollable areas cache
        only when needed (i.e. an overflow exists).

        (WebCore):
        * rendering/RenderLayer.h:
        (RenderLayer):
        * testing/Internals.cpp:
        (WebCore::Internals::numberOfScrollableAreas):
        (WebCore):
        * testing/Internals.h:
        (Internals):
        * testing/Internals.idl:

        Tests: fast/scrolling/scrollable-area-frame-inherited-visibility-hidden.html
               fast/scrolling/scrollable-area-frame-overflow-hidden.html
               fast/scrolling/scrollable-area-frame-overried-inherited-visibility-hidden.html
               fast/scrolling/scrollable-area-frame-scrolling-no-overried-inherited-visibility-hidden.html
               fast/scrolling/scrollable-area-frame-scrolling-no-visibility-hidden-child.html
               fast/scrolling/scrollable-area-frame-scrolling-no.html
               fast/scrolling/scrollable-area-frame-scrolling-yes-display-none.html
               fast/scrolling/scrollable-area-frame-scrolling-yes.html
               fast/scrolling/scrollable-area-frame-visibility-hidden-child.html
               fast/scrolling/scrollable-area-frame-zero-size-and-border.html
               fast/scrolling/scrollable-area-frame.html
               fast/scrolling/scrollable-area-overflow-auto-display-none-in-parent.html
               fast/scrolling/scrollable-area-overflow-auto-display-none.html
               fast/scrolling/scrollable-area-overflow-auto-visibility-hidden-in-parent.html
               fast/scrolling/scrollable-area-overflow-auto-visibility-hidden.html
               fast/scrolling/scrollable-area-overflow-auto-visibility-override.html
               fast/scrolling/scrollable-area-overflow-auto-visibility-visible.html
               fast/scrolling/scrollable-area-overflow-auto.html
               fast/scrolling/scrollable-area-overflow-not-set.html
               fast/scrolling/scrollable-area-overflow-visible.html

2012-04-13  Antti Koivisto  <antti@apple.com>

        Track rem unit usage in StyleSheetInternal
        https://bugs.webkit.org/show_bug.cgi?id=83923

        Reviewed by Andreas Kling.

        Currently CSSParser sets usesRemUnits flag directly to Document. It should be set to 
        the stylesheet instead so parser does not need to know about the document. This also 
        avoids setting the flag unnecessarily when the stylesheet is not used.

        * css/CSSGrammar.y:
        * css/CSSStyleSheet.cpp:
        (WebCore::StyleSheetInternal::StyleSheetInternal):
        * css/CSSStyleSheet.h:
        (WebCore::StyleSheetInternal::parserSetUsesRemUnits):
        (WebCore::StyleSheetInternal::usesRemUnits):
        (StyleSheetInternal):
        * dom/Document.cpp:
        (WebCore):
        (WebCore::checkUsesRemUnits):
        (WebCore::Document::updateActiveStylesheets):
        * dom/Document.h:
        (WebCore::Document::usesRemUnits):

2012-04-11  James Robinson  <jamesr@chromium.org>

        [chromium] Remove unused compositeToTexture / compositeOffscreen setting
        https://bugs.webkit.org/show_bug.cgi?id=83733

        Reviewed by Adrienne Walker.

        Remove compositeOffscreen setting and implementation. This was an experiment that is no longer needed.

        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::finishDrawingFrame):
        (WebCore::LayerRendererChromium::useRenderSurface):
        (WebCore::LayerRendererChromium::setScissorToRect):
        * platform/graphics/chromium/LayerRendererChromium.h:
        (LayerRendererChromium):
        * platform/graphics/chromium/cc/CCLayerTreeHost.h:
        (WebCore::CCSettings::CCSettings):
        (CCSettings):

2012-04-13  Alexey Proskuryakov  <ap@apple.com>

        REGRESSION (XHR Caching): Uncacheable responses sent by Rails through Apache are cached
        https://bugs.webkit.org/show_bug.cgi?id=83925
        <rdar://problem/11231790>

        Reviewed by Antti Koivisto.

        Added subtests to http/tests/cache/subresource-expiration-2.html.

        * platform/network/ResourceResponseBase.cpp:
        (WebCore::ResourceResponseBase::parseCacheControlDirectives): Honor first max-age
        instead of the last. New behavior matches both Firefox and IE.

2012-04-13  James Robinson  <jamesr@chromium.org>

        [chromium] Move WebVideoFrame into Platform and remove WebCore::VideoFrameChromium wrapper API
        https://bugs.webkit.org/show_bug.cgi?id=83851

        Reviewed by Adam Barth.

        Remove VideoFrameChromium wrapper and converts WebCore code to using the Platform WebVideoFrame API directly.
        Some utility code that previously existed on VideoFrameChromium and only had one caller, such as doing
        width/height adjustements for YV12 frames, is moved into the calling code (CCVideoLayerImpl).

        Covered by existing media/ and compositing/ layout tests.

        * WebCore.gypi:
        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::drawYUV):
        (WebCore::LayerRendererChromium::drawRGBA):
        (WebCore::LayerRendererChromium::copyFrameToTextures):
        * platform/graphics/chromium/LayerRendererChromium.h:
        * platform/graphics/chromium/VideoFrameProvider.h:
        (VideoFrameProvider):
        * platform/graphics/chromium/cc/CCVideoDrawQuad.cpp:
        (WebCore::CCVideoDrawQuad::create):
        (WebCore::CCVideoDrawQuad::CCVideoDrawQuad):
        * platform/graphics/chromium/cc/CCVideoDrawQuad.h:
        (WebKit):
        (CCVideoDrawQuad):
        (WebCore::CCVideoDrawQuad::frame):
        * platform/graphics/chromium/cc/CCVideoLayerImpl.cpp:
        (WebCore):
        (WebCore::convertVFCFormatToGC3DFormat):
        (WebCore::CCVideoLayerImpl::willDraw):
        (WebCore::videoFrameDimension):
        (WebCore::hasPaddingBytes):
        (WebCore::CCVideoLayerImpl::computeVisibleSize):
        (WebCore::CCVideoLayerImpl::reserveTextures):
        * platform/graphics/chromium/cc/CCVideoLayerImpl.h:
        (WebKit):

2012-04-13  Rob Flack  <flackr@chromium.org>

        Chromium: Should enable -webkit-image-set
        https://bugs.webkit.org/show_bug.cgi?id=81859

        Reviewed by Adam Barth.

        Test: fast/css/image-set-parsing.html

        * WebCore.gypi:

2012-04-12  Michael Nordman  <michaeln@google.com>

        [chromium] Now that the chromium port is using a different dom_storage backend
        library in its main browser process, there are a handful of files that should no
        longer be included in the build, and a few files than should be deleted
        outright, and the webkit api should be modified to reflect the new (and smaller)
        contract between the embedder and webkit/webcore.
        https://bugs.webkit.org/show_bug.cgi?id=83807

        Reviewed by Adam Barth.

        No new tests, existing tests apply.

        * WebCore.gyp/WebCore.gyp: Exclude several files from the WebCore/storage directory.
        * storage/StorageEventDispatcher.h: Delete a stale comment.

2012-04-13  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r114140.
        http://trac.webkit.org/changeset/114140
        https://bugs.webkit.org/show_bug.cgi?id=83921

        Fails fast/css/image-set-parsing.html test it attempts to
        introduce. (Requested by scheib on #webkit).

        * WebCore.gypi:

2012-04-13  Dan Bernstein  <mitz@apple.com>

        <rdar://problem/10912680> Pixel access canvas APIs do not operate at backing store resolution
        https://bugs.webkit.org/show_bug.cgi?id=83836

        Reviewed by Darin Adler.

        Test: fast/canvas/2d.imageDataHD.html

        Added getImageDataHD and putImageDataHD functions to CanvasRenderingContext2D, as proposed in
        <http://lists.whatwg.org/htdig.cgi/whatwg-whatwg.org/2012-March/035112.html>. The functions
        are prefixed with “webkit” for now.

        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::getImageData): Added this cover function that calls
        through to getImageData with LogicalCoordinateSystem.
        (WebCore::CanvasRenderingContext2D::webkitGetImageDataHD): Added. Calls through to
        getImageData with BackingStoreCoordinateSystem.
        (WebCore::CanvasRenderingContext2D::getImageData): Added a CoordinateSystem parameter to this
        now-private function. It is passed through to ImageBuffer::getUnmultipliedImageData().
        (WebCore::CanvasRenderingContext2D::putImageData): Added this cover function that calls
        through to putImageData with LogicalCoordinateSystem.
        (WebCore::CanvasRenderingContext2D::webkitPutImageDataHD): Added. Calls through to
        putImageData with BackingStoreCoordinateSystem.
        (WebCore::CanvasRenderingContext2D::putImageData): Added a CoordinateSystem parameter to this
        function. It is passed through to ImageBuffer::putByteArray, and used to compute the rect to
        invalidate after the drawing operation.
        * html/canvas/CanvasRenderingContext2D.h:
        * html/canvas/CanvasRenderingContext2D.idl: Added webkitPutImageDataHD() and
        webkitGetImageDataHD().
        * platform/graphics/ImageBuffer.h: Added a CoordinateSystem enum with the values
        LogicalCoordinateSystem and BackingStoreCoordinateSystem. Added a CoordinateSystem parameter,
        which defaults to LogicalCoordinateSystem, to getUnmultipliedImageData,
        getPremultipliedImageData, and putByteArray.
        * platform/graphics/cairo/ImageBufferCairo.cpp:
        (WebCore::ImageBuffer::getUnmultipliedImageData):
        (WebCore::ImageBuffer::getPremultipliedImageData):
        (WebCore::ImageBuffer::putByteArray):
        (WebCore::ImageBuffer::toDataURL):
        * platform/graphics/cg/ImageBufferCG.cpp:
        (WebCore::ImageBuffer::getUnmultipliedImageData): Now uses the CoordinateSystem parameter to
        decide whether to ask ImageBufferDaya::getData() to apply the resolution scale or not.
        (WebCore::ImageBuffer::getPremultipliedImageData): Ditto.
        (WebCore::ImageBuffer::putByteArray): Now uses the CoordinateSystem parameter to decide
        whether to maintain the resolution scale while drawing or not.
        (WebCore::ImageBuffer::toDataURL):
        * platform/graphics/gtk/ImageBufferGtk.cpp:
        (WebCore::ImageBuffer::toDataURL):
        * platform/graphics/qt/ImageBufferQt.cpp:
        (WebCore::ImageBuffer::getUnmultipliedImageData):
        (WebCore::ImageBuffer::getPremultipliedImageData):
        (WebCore::ImageBuffer::putByteArray):
        (WebCore::ImageBuffer::toDataURL):
        * platform/graphics/skia/ImageBufferSkia.cpp:
        (WebCore::ImageBuffer::getUnmultipliedImageData):
        (WebCore::ImageBuffer::getPremultipliedImageData):
        (WebCore::ImageBuffer::putByteArray):
        (WebCore::ImageBuffer::toDataURL):
        * platform/graphics/wince/ImageBufferWinCE.cpp:
        (WebCore::ImageBuffer::getUnmultipliedImageData):
        (WebCore::ImageBuffer::getPremultipliedImageData):
        (WebCore::ImageBuffer::putByteArray):
        (WebCore::ImageBuffer::toDataURL):
        * platform/graphics/wx/ImageBufferWx.cpp:
        (WebCore::ImageBuffer::getUnmultipliedImageData):
        (WebCore::ImageBuffer::getPremultipliedImageData):
        (WebCore::ImageBuffer::putByteArray):
        (WebCore::ImageBuffer::toDataURL):

2012-04-12  Shawn Singh  <shawnsingh@chromium.org>

        [chromium] Support CCHeadsUpDisplay in threaded compositing mode
        https://bugs.webkit.org/show_bug.cgi?id=67499

        Reviewed by James Robinson.

        No new tests because this code is debugging code itself.

        The last item that was needed to make the CCHeadsUpDisplay work in
        threaded compositing mode was to remove the font rendering code
        used on the impl-side thread. To solve this, this patch adds a
        CCFontAtlas that is initialized on the main thread (where the font
        rendering takes place). Then, when the HUD draws text on the impl
        thread, it uses the font atlas directly.

        * WebCore.gypi:
        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::create):
        (WebCore::LayerRendererChromium::initialize):
        * platform/graphics/chromium/LayerRendererChromium.h:
        (WebCore):
        (LayerRendererChromium):
        * platform/graphics/chromium/cc/CCFontAtlas.cpp: Added.
        (WebCore):
        (WebCore::CCFontAtlas::CCFontAtlas):
        (WebCore::wrapPositionIfNeeded):
        (WebCore::CCFontAtlas::generateAtlasForFont):
        (WebCore::CCFontAtlas::initialize):
        (WebCore::CCFontAtlas::drawText):
        (WebCore::CCFontAtlas::drawOneLineOfTextInternal):
        (WebCore::CCFontAtlas::drawDebugAtlas):
        * platform/graphics/chromium/cc/CCFontAtlas.h: Added.
        (WebCore):
        (CCFontAtlas):
        (WebCore::CCFontAtlas::create):
        * platform/graphics/chromium/cc/CCHeadsUpDisplay.cpp:
        (WebCore::CCHeadsUpDisplay::CCHeadsUpDisplay):
        (WebCore):
        (WebCore::CCHeadsUpDisplay::showPlatformLayerTree):
        (WebCore::CCHeadsUpDisplay::drawHudContents):
        (WebCore::CCHeadsUpDisplay::drawFPSCounter):
        (WebCore::CCHeadsUpDisplay::drawFPSCounterText):
        (WebCore::CCHeadsUpDisplay::drawPlatformLayerTree):
        * platform/graphics/chromium/cc/CCHeadsUpDisplay.h:
        (WebCore::CCHeadsUpDisplay::create):
        (CCHeadsUpDisplay):
        * platform/graphics/chromium/cc/CCLayerTreeHost.cpp:
        (WebCore::CCLayerTreeHost::initialize):
        * platform/graphics/chromium/cc/CCLayerTreeHost.h:
        (WebCore):
        (WebCore::CCLayerTreeHost::headsUpDisplayFontAtlas):
        (CCLayerTreeHost):
        * platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:
        (WebCore::CCLayerTreeHostImpl::initializeLayerRenderer):
        * platform/graphics/chromium/cc/CCLayerTreeHostImpl.h:
        (WebCore):
        (CCLayerTreeHostImpl):
        * platform/graphics/chromium/cc/CCSingleThreadProxy.cpp:
        (WebCore::CCSingleThreadProxy::initializeLayerRenderer):
        (WebCore::CCSingleThreadProxy::recreateContext):
        * platform/graphics/chromium/cc/CCThreadProxy.cpp:
        (WebCore::CCThreadProxy::initializeLayerRendererOnImplThread):
        (WebCore::CCThreadProxy::recreateContextOnImplThread):

2012-04-13  Rob Flack  <flackr@chromium.org>

        Chromium: Should enable -webkit-image-set
        https://bugs.webkit.org/show_bug.cgi?id=81859

        Reviewed by Adam Barth.

        Test: fast/css/image-set-parsing.html

        * WebCore.gypi:

2012-04-13  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: do not attempt to load content from resource until request finished loading.
        https://bugs.webkit.org/show_bug.cgi?id=83896

        Reviewed by Yury Semikhatsky.

        When we stop in the inline script on reload, we should only show concatenated script content.
        When we resume, we should replace UI source code with the actual HTML content. We should not attempt to
        fetch resource content until request finished loading. I regressed it in the Request extraction
        and now am bringing it back.

        * inspector/front-end/RawSourceCode.js:
        (WebInspector.RawSourceCode):
        (WebInspector.RawSourceCode.prototype._finishedLoading):
        * inspector/front-end/ResourceScriptMapping.js:
        (WebInspector.ResourceScriptMapping.prototype.addScript):

2012-04-13  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: follow up to r114116 - fixing QT test
        https://bugs.webkit.org/show_bug.cgi?id=83892

        Reviewed by Yury Semikhatsky.

        Requesting content for the scripts exclusively via the page agent now.

        * inspector/front-end/Resource.js:
        (WebInspector.Resource.prototype.get content):
        (WebInspector.Resource.prototype.get contentEncoded):
        (WebInspector.Resource.prototype.requestContent):
        (WebInspector.ResourceRevision.prototype.requestContent):

2012-04-13  Yi Shen  <yi.4.shen@nokia.com>

        InsertHTML fails to insert h6 if the insertion point is before some text.
        https://bugs.webkit.org/show_bug.cgi?id=82689

        Reviewed by Ryosuke Niwa.

        Added the missing h6 tag for the isHeaderElement.

        No new tests: updated existing test (editing/execCommand/4128080-1.html)

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

2012-04-13  Yury Semikhatsky  <yurys@chromium.org>

        Web Inspector: exception in heap profiler when expanding a class in summary view
        https://bugs.webkit.org/show_bug.cgi?id=83883

        Moved all DOM-specific inspector utilities into DOMExtension.js

        Merged BinarySearch.js and PartialQuickSort.js into utilities.js, HeapSnapshotWorker.js now
        imports utilities.js which contains all required routines.

        Reviewed by Pavel Feldman.

        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * inspector/compile-front-end.py:
        * inspector/front-end/BinarySearch.js: Removed.
        * inspector/front-end/DOMExtension.js: Copied from Source/WebCore/inspector/front-end/utilities.js.
        (Node.prototype.rangeOfWord):
        (Node.prototype.traverseNextTextNode):
        (Node.prototype.rangeBoundaryForOffset):
        (Element.prototype.removeStyleClass):
        (Element.prototype.removeMatchingStyleClasses):
        (Element.prototype.addStyleClass):
        (Element.prototype.hasStyleClass):
        (Element.prototype.positionAt):
        (Element.prototype.pruneEmptyTextNodes):
        (Element.prototype.isScrolledToBottom):
        (Node.prototype.enclosingNodeOrSelfWithNodeNameInArray):
        (Node.prototype.enclosingNodeOrSelfWithNodeName):
        (Node.prototype.enclosingNodeOrSelfWithClass):
        (Node.prototype.enclosingNodeWithClass):
        (Element.prototype.query):
        (Element.prototype.removeChildren):
        (Element.prototype.isInsertionCaretInside):
        (Element.prototype.createChild):
        (Element.prototype.totalOffsetLeft):
        (Element.prototype.totalOffsetTop):
        (Element.prototype.totalOffset):
        (Element.prototype.scrollOffset):
        (AnchorBox):
        (Element.prototype.offsetRelativeToWindow):
        (Element.prototype.boxInWindow):
        (Element.prototype.setTextAndTitle):
        (Event.prototype.consume):
        (Text.prototype.select):
        (Element.prototype.selectionLeftOffset):
        (Node.prototype.isAncestor):
        (Node.prototype.isDescendant):
        (Node.prototype.isSelfOrAncestor):
        (Node.prototype.isSelfOrDescendant):
        (Node.prototype.traverseNextNode):
        (Node.prototype.traversePreviousNode):
        (HTMLTextAreaElement.prototype.moveCursorToEnd):
        (isEnterKey):
        (consumeEvent):
        (highlightSearchResult):
        (highlightSearchResults):
        (highlightRangesWithStyleClass):
        (applyDomChanges):
        (revertDomChanges):
        * inspector/front-end/HeapSnapshot.js: Fixed a couple of js compiler warnings
        by describing structure of heap snapshot header in the protocol.
        (WebInspector.HeapSnapshotLoader.prototype.pushJSONChunk):
        * inspector/front-end/HeapSnapshotWorker.js:
        * inspector/front-end/PartialQuickSort.js: Removed.
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/inspector.html:
        * inspector/front-end/utilities.js:
        (.):

2012-04-13  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r114103.
        http://trac.webkit.org/changeset/114103
        https://bugs.webkit.org/show_bug.cgi?id=83884

        New breakpoint UI looks bad / needs polish. (Requested by
        pfeldman_ on #webkit).

        * inspector/front-end/Images/breakpointConditionalCounterBorder.png:
        * inspector/front-end/Images/breakpointCounterBorder.png:
        * inspector/front-end/Images/programCounterBorder.png:
        * inspector/front-end/textViewer.css:
        (.webkit-execution-line .webkit-line-number-outer):
        (.webkit-breakpoint.webkit-execution-line .webkit-line-number-outer):
        (.webkit-breakpoint-conditional.webkit-execution-line .webkit-line-number-outer):

2012-04-13  Jason Liu  <jason.liu@torchmobile.com.cn>

        [BlackBerry] Sign in cookie for ESPN.com does not retain login account (for fantasy sports).
        https://bugs.webkit.org/show_bug.cgi?id=83760

        Reviewed by George Staikos.

        When we update cookies' database, protocol shouldn't be checked since it is not a cookie's key.
        ESPN.com's https cookies should replace old http cookies if they have the same keys(name, path, domain).

        We must restart the browser to test, so have to write a manual test case.

        Test: ManualTests/blackberry/http-cookie-database-set.php

        * platform/blackberry/CookieDatabaseBackingStore/CookieDatabaseBackingStore.cpp:
        (WebCore::CookieDatabaseBackingStore::invokeOpen):

2012-04-12  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        [Qt] Use QQuickFlickable::setPixelAligned instead of doing pixel-alignment when rendering.
        https://bugs.webkit.org/show_bug.cgi?id=83770

        Reviewed by Kenneth Rohde Christiansen.

        Revert the previous way of dealing with things. The problem is that different layers
        would end up rounding in different directions, and would cause jittering between
        layers or with the QQuickWebPage's background.

        * platform/graphics/texmap/TextureMapperGL.cpp:
        (WebCore::TextureMapperGL::drawTexture):

2012-04-13  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: introduce ParsedURL type, clean up url and displayName mess in Resource and NetworkRequest.
        https://bugs.webkit.org/show_bug.cgi?id=83871

        Reviewed by Yury Semikhatsky.

        There is a number of random properties created on Resource and NetworkRequest that represent various url
        fragments. Display name is being based on them and sometimes requires fake Resource instance to be created.
        This change (officially) introduces WebInspector.ParsedURL as a type that encapsulates this complexity.

        This change also moves documentURL property into the Resource and NetworkRequest constructors and brushes up
        factory methods used to create the objects.

        * inspector/front-end/AuditRules.js:
        (WebInspector.AuditRules.GzipRule.prototype._shouldCompress):
        (WebInspector.AuditRules.CookieSizeRule.prototype.processCookies):
        * inspector/front-end/Database.js:
        (WebInspector.Database.prototype.get displayDomain):
        * inspector/front-end/JavaScriptContextManager.js:
        (WebInspector.FrameEvaluationContext.prototype.get displayName):
        * inspector/front-end/NetworkManager.js:
        (WebInspector.NetworkDispatcher.prototype.webSocketCreated):
        (WebInspector.NetworkDispatcher.prototype._createNetworkRequest):
        (get WebInspector):
        * inspector/front-end/NetworkPanel.js:
        (WebInspector.NetworkLogView.prototype._highlightNthMatchedRequest):
        (WebInspector.NetworkDataGridNode.prototype._refreshNameCell):
        * inspector/front-end/NetworkRequest.js:
        (WebInspector.NetworkRequest):
        (WebInspector.NetworkRequest.prototype.set url):
        (WebInspector.NetworkRequest.prototype.get documentURL):
        (WebInspector.NetworkRequest.prototype.get parsedURL):
        (WebInspector.NetworkRequest.prototype.get displayName):
        (WebInspector.NetworkRequest.prototype.get folder):
        * inspector/front-end/RequestHeadersView.js:
        (WebInspector.RequestHeadersView.prototype._refreshUrlFragment):
        * inspector/front-end/Resource.js:
        (WebInspector.Resource):
        (WebInspector.Resource.prototype.set url):
        (WebInspector.Resource.prototype.get parsedURL):
        (WebInspector.Resource.prototype.get frameId):
        (WebInspector.Resource.prototype.get loaderId):
        (WebInspector.Resource.prototype.get displayName):
        * inspector/front-end/ResourceTreeModel.js:
        (WebInspector.ResourceTreeModel.prototype._onRequestUpdateDropped):
        (WebInspector.ResourceTreeModel.prototype._addFramesRecursively):
        (WebInspector.ResourceTreeModel.prototype._createResourceFromFramePayload):
        (WebInspector.ResourceTreeFrame.prototype._addRequest):
        * inspector/front-end/ResourceUtils.js:
        (WebInspector.ParsedURL):
        (WebInspector.ParsedURL.prototype.get displayName):
        (String.prototype.asParsedURL):
        (WebInspector.displayDomain):
        (WebInspector.resourceURLForRelatedNode.callback):
        (WebInspector.resourceURLForRelatedNode):
        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.FrameTreeElement.prototype.frameNavigated):
        (WebInspector.ApplicationCacheManifestTreeElement):
        (WebInspector.ApplicationCacheFrameTreeElement.prototype._refreshTitles):
        * inspector/front-end/utilities.js:

2012-04-13  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: extracting NetworkRequest from Resource (step 3)
        https://bugs.webkit.org/show_bug.cgi?id=83802

        Reviewed by Yury Semikhatsky.

        This change extracts NetworkRequest from the Resource. It is now clear that these two
        should have super class that would be responsible for parsing URL and would define the
        requestContent signature. Corresponding patch will follow.

        * inspector/front-end/NetworkManager.js:
        * inspector/front-end/NetworkRequest.js:
        (WebInspector.NetworkRequest):
        (WebInspector.NetworkRequest.prototype.get requestId):
        (WebInspector.NetworkRequest.prototype.set requestId):
        (WebInspector.NetworkRequest.prototype.get url):
        (WebInspector.NetworkRequest.prototype.get frameId):
        (WebInspector.NetworkRequest.prototype.get loaderId):
        (WebInspector.NetworkRequest.prototype.get startTime):
        (WebInspector.NetworkRequest.prototype.set startTime):
        (WebInspector.NetworkRequest.prototype.get responseReceivedTime):
        (WebInspector.NetworkRequest.prototype.set responseReceivedTime):
        (WebInspector.NetworkRequest.prototype.get endTime):
        (WebInspector.NetworkRequest.prototype.set endTime):
        (WebInspector.NetworkRequest.prototype.get duration):
        (WebInspector.NetworkRequest.prototype.get latency):
        (WebInspector.NetworkRequest.prototype.get receiveDuration):
        (WebInspector.NetworkRequest.prototype.get resourceSize):
        (WebInspector.NetworkRequest.prototype.set resourceSize):
        (WebInspector.NetworkRequest.prototype.get transferSize):
        (WebInspector.NetworkRequest.prototype.increaseTransferSize):
        (WebInspector.NetworkRequest.prototype.get finished):
        (WebInspector.NetworkRequest.prototype.set finished):
        (WebInspector.NetworkRequest.prototype.get failed):
        (WebInspector.NetworkRequest.prototype.set failed):
        (WebInspector.NetworkRequest.prototype.get canceled):
        (WebInspector.NetworkRequest.prototype.set canceled):
        (WebInspector.NetworkRequest.prototype.get cached):
        (WebInspector.NetworkRequest.prototype.set cached):
        (WebInspector.NetworkRequest.prototype.get timing):
        (WebInspector.NetworkRequest.prototype.set timing):
        (WebInspector.NetworkRequest.prototype.get mimeType):
        (WebInspector.NetworkRequest.prototype.set mimeType):
        (WebInspector.NetworkRequest.prototype.get displayName):
        (WebInspector.NetworkRequest.prototype.get folder):
        (WebInspector.NetworkRequest.prototype.get displayDomain):
        (WebInspector.NetworkRequest.prototype.get type):
        (WebInspector.NetworkRequest.prototype.set type):
        (WebInspector.NetworkRequest.prototype.get redirectSource):
        (WebInspector.NetworkRequest.prototype.set redirectSource):
        (WebInspector.NetworkRequest.prototype.get requestHeaders):
        (WebInspector.NetworkRequest.prototype.set requestHeaders):
        (WebInspector.NetworkRequest.prototype.get requestHeadersText):
        (WebInspector.NetworkRequest.prototype.set requestHeadersText):
        (WebInspector.NetworkRequest.prototype.get requestHeadersSize):
        (WebInspector.NetworkRequest.prototype.requestHeaderValue):
        (WebInspector.NetworkRequest.prototype.get requestCookies):
        (WebInspector.NetworkRequest.prototype.get requestFormData):
        (WebInspector.NetworkRequest.prototype.set requestFormData):
        (WebInspector.NetworkRequest.prototype.get requestHttpVersion):
        (WebInspector.NetworkRequest.prototype.get responseHeaders):
        (WebInspector.NetworkRequest.prototype.set responseHeaders):
        (WebInspector.NetworkRequest.prototype.get responseHeadersText):
        (WebInspector.NetworkRequest.prototype.set responseHeadersText):
        (WebInspector.NetworkRequest.prototype.get responseHeadersSize):
        (WebInspector.NetworkRequest.prototype.responseHeaderValue):
        (WebInspector.NetworkRequest.prototype.get responseCookies):
        (WebInspector.NetworkRequest.prototype.get queryParameters):
        (WebInspector.NetworkRequest.prototype.get formParameters):
        (WebInspector.NetworkRequest.prototype.get responseHttpVersion):
        (WebInspector.NetworkRequest.prototype._parseParameters):
        (WebInspector.NetworkRequest.prototype._headerValue):
        (WebInspector.NetworkRequest.prototype.get content):
        (WebInspector.NetworkRequest.prototype.get contentEncoded):
        (WebInspector.NetworkRequest.prototype.requestContent):
        (WebInspector.NetworkRequest.prototype.isHttpFamily):
        (WebInspector.NetworkRequest.prototype.requestContentType):
        (WebInspector.NetworkRequest.prototype.isPingRequest):
        (WebInspector.NetworkRequest.prototype.hasErrorStatusCode):
        (WebInspector.NetworkRequest.prototype.populateImageSource):
        (WebInspector.NetworkRequest.prototype._contentURL):
        (WebInspector.NetworkRequest.prototype._innerRequestContent.onResourceContent):
        (WebInspector.NetworkRequest.prototype._innerRequestContent):
        (WebInspector.NetworkRequest.prototype.setResource):
        (WebInspector.NetworkRequest.prototype.resource):
        * inspector/front-end/RawSourceCode.js:
        (WebInspector.RawSourceCode):
        (WebInspector.RawSourceCode.prototype._resourceAdded):
        (WebInspector.RawSourceCode.prototype.forceUpdateSourceMapping):
        (WebInspector.RawSourceCode.prototype._createContentProvider):
        * inspector/front-end/Resource.js:
        (WebInspector.Resource):
        (WebInspector.Resource.displayName):
        (WebInspector.Resource.prototype.get request):
        (WebInspector.Resource.prototype.set url):
        (WebInspector.Resource.prototype.get type):
        (WebInspector.Resource.prototype.get mimeType):
        (WebInspector.Resource.prototype.set mimeType):
        (WebInspector.Resource.prototype.get content):
        (WebInspector.Resource.prototype.get contentEncoded):
        (WebInspector.Resource.prototype.requestContent):
        (WebInspector.Resource.prototype._innerRequestContent.callback):
        (WebInspector.Resource.prototype._innerRequestContent):
        (WebInspector.ResourceRevision.prototype.requestContent.callbackWrapper):
        (WebInspector.ResourceRevision.prototype.requestContent):
        * inspector/front-end/ResourceScriptMapping.js:
        (WebInspector.ResourceScriptMapping.prototype.addScript):

2012-04-13  Mike Reed  <reed@google.com>

        use getClipDeviceBounds, rather than (deprecated) getTotalClip
        https://bugs.webkit.org/show_bug.cgi?id=83808

        Reviewed by Stephen White.

        Equivalent functionality, existing tests apply.

        * platform/graphics/skia/OpaqueRegionSkia.cpp:
        (WebCore::OpaqueRegionSkia::didDraw):

2012-04-13  Thiago Marcos P. Santos  <thiago.santos@intel.com>

        [EFL] Add API for color chooser
        https://bugs.webkit.org/show_bug.cgi?id=83692

        Added new API to enable browsers to display a custom color picker
        when an input field of type "color" is activated.

        Reviewed by Kenneth Rohde Christiansen.

        * PlatformEfl.cmake:
        * platform/efl/ColorChooserEfl.cpp: Added.
        (WebCore):
        (WebCore::ColorChooserEfl::ColorChooserEfl):
        (WebCore::ColorChooserEfl::~ColorChooserEfl):
        (WebCore::ColorChooserEfl::setSelectedColor):
        (WebCore::ColorChooserEfl::endChooser):
        * platform/efl/ColorChooserEfl.h: Added.
        (WebCore):
        (ColorChooserEfl):

2012-04-13  Zalan Bujtas  <zbujtas@gmail.com>

        Enabling/disabling delegates scrolling when page has no composited content asserts on WK1.
        https://bugs.webkit.org/show_bug.cgi?id=83860

        Reviewed by Kenneth Rohde Christiansen.

        WK2 has compositing mode on all the time, while Wk1 turns it on only when
        the page has composited content. This patch ensures that, when delegates scrolling behavior
        is changed, backing stores are cleared only when there's an actual composition,
        similarly to what CachedFrame does.

        Test: fast/viewport/scroll-delegates-switch-on-page-with-no-composition-mode-asserts.html

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

2012-04-13  Vivek Galatage  <vivekgalatage@gmail.com>

        Web Inspector: Line number is not displayed while debugging javascript
        https://bugs.webkit.org/show_bug.cgi?id=83786

        Reviewed by Pavel Feldman.

        Changed the textViewer.css to start displaying the line number with
        appropriate color property. Added outline property for enhanced view

        No additional test cases required for the above fix.

        * inspector/front-end/Images/breakpointConditionalCounterBorder.png:
        * inspector/front-end/Images/breakpointCounterBorder.png:
        * inspector/front-end/Images/programCounterBorder.png:
        * inspector/front-end/textViewer.css:
        (.webkit-execution-line .webkit-line-number-outer):
        (.webkit-breakpoint.webkit-execution-line .webkit-line-number-outer):
        (.webkit-breakpoint-conditional.webkit-execution-line .webkit-line-number-outer):

2012-04-13  Kent Tamura  <tkent@chromium.org>

        Add a runtime flag for <input type=date>
        https://bugs.webkit.org/show_bug.cgi?id=83853

        Reviewed by Adam Barth.

        * bindings/generic/RuntimeEnabledFeatures.cpp:
        * bindings/generic/RuntimeEnabledFeatures.h:
        (WebCore::RuntimeEnabledFeatures::inputTypeDateEnabled): Added.
        (WebCore::RuntimeEnabledFeatures::setInputTypeDateEnabled): Added.
        * html/InputType.cpp:
        (WebCore::createInputTypeFactoryMap):
        Don't register type=date if !RuntimeEnabledFeatures::inputTypeDateEnabled()

2012-04-13  Adam Barth  <abarth@webkit.org>

        JSDocument::setLocation does too much bare-handed lifting
        https://bugs.webkit.org/show_bug.cgi?id=83850

        Reviewed by Sam Weinig.

        As part of auditing all the ways of kicking off a navigation, I
        happened to read JSDocument::setLocation, which uses very old patterns.
        This patch updates it to do things the "modern" way.  There shouldn't
        be any behavior change.

        * bindings/js/JSDocumentCustom.cpp:
        (WebCore::JSDocument::setLocation):

2012-04-13  Shinya Kawanaka  <shinyak@chromium.org>

        Background width (or height) is wrong if width (or height) * zoom < 1.
        https://bugs.webkit.org/show_bug.cgi?id=83350

        Reviewed by Nikolas Zimmermann.

        calculateImageIntrinsicDimension will return wrong size if the calculated size is 0.
        0 is used for expressing unspecfied, so the method returns the box width(height) instead.

        Since CachedImage has already similar code, we moved it to IntSize and shared it.

        Tests: fast/css/zoom-background-repeat-x-expected.html
               fast/css/zoom-background-repeat-x.html
               fast/css/zoom-background-repeat-y-expected.html
               fast/css/zoom-background-repeat-y.html

        * loader/cache/CachedImage.cpp:
        (WebCore::CachedImage::imageSizeForRenderer):
        * platform/graphics/IntSize.h:
        (IntSize):
        (WebCore::IntSize::scale):
        (WebCore::IntSize::clampToMinimumSize):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::calculateImageIntrinsicDimensions):

2012-04-13  Adam Barth  <abarth@webkit.org>

        Prepare submitForm for seamless navigation
        https://bugs.webkit.org/show_bug.cgi?id=83838

        Reviewed by Ryosuke Niwa.

        Previously, FrameLoader::submitForm called FrameTree::find and
        Document::canNavigate separately.  This patch refactors this function
        to call findFrameForNavigation, which does both checks.

        This doesn't change any behavior today, but it prepares us to implement
        seamless navigation.  Once the seamless branch lands, this change will
        be tested by seamless-form-* in https://github.com/eseidel/webkit/tree/seamless/LayoutTests/fast/frames/seamless

        For context, see:
        https://github.com/eseidel/webkit/commit/3f27340577ac91b2cc0a834dd2c6fdfcac296c32

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

2012-04-13  Kent Tamura  <tkent@chromium.org>

        Should clear an invalid string in a date field on blur
        https://bugs.webkit.org/show_bug.cgi?id=83863

        Reviewed by Kentaro Hara.

        Test: fast/forms/date/input-date-commit-valid-only.html

        * html/DateInputType.cpp:
        (WebCore::DateInputType::handleBlurEvent):
        Reset the visible value. The code is same as NumberInputType::handleBlurEvent().

2012-04-12  Kent Tamura  <tkent@chromium.org>

        Calendar Picker: remove unnecessary code from calendarPicker.{css,js}
        https://bugs.webkit.org/show_bug.cgi?id=83685

        Reviewed by Kentaro Hara.

        Remove the followings from input files:
         - multi line comments /*...*/ (.js and .css)
         - single line comment //... (.js)
         - repeating whitespace (.js and .css)
         - leading and trailing whitespace (.js and .css)
         - empty lines (.js and .css)

        This doesn't work for arbitrary JavaScript or CSS inputs, but
        works well for expected input files like
        css/make-css-file-arrays.pl

        * make-file-arrays.py:
        (strip_whitespace_and_comments):
        (main):

2012-04-12  Sailesh Agrawal  <sail@chromium.org>

        Chromium: Fix scrollbar tickmark drawing on Mountain Lion
        https://bugs.webkit.org/show_bug.cgi?id=83844

        Reviewed by James Robinson.

        On Mountain Lion overlay scrollbars have a new expanded mode. In expanded mode the scrolllbar is slightly wider which causes the tickmarks to look incorrect. Fix was to explicitly enter expanded mode to get the correct look.
        Screenshots:
        broken: http://i.imgur.com/PDKYH.png
        fixed: http://i.imgur.com/utp0Y.png

        * platform/chromium/ScrollbarThemeChromiumMac.mm:
        (WebCore::ScrollbarThemeChromiumMac::paint): Called setExpanded if API is available.
        * platform/mac/NSScrollerImpDetails.h: Exposed the isExpanded: API.

2012-04-12  Kent Tamura  <tkent@chromium.org>

        LocalizedDateICU should ignore timezones
        https://bugs.webkit.org/show_bug.cgi?id=83859

        Reviewed by Hajime Morita.

        udat_parse() and udat_format() shift the input date by the offset of the
        default timezone. We don't need this behavior for type=date. So we
        specify "GMT" to udat_open().

        No new tests. This behavior depends on the timezone setting of the local machine.

        * platform/text/LocalizedDateICU.cpp:
        (WebCore::createShortDateFormatter):
        Added. Common factory functio for UDateFormat. Use "GMT" instead of the
        default timezone.
        (WebCore::parseLocalizedDate): Use createShortDateFormatter().
        (WebCore::formatLocalizedDate): ditto.

2012-04-12  Adam Barth  <abarth@webkit.org>

        Prepare window.location for seamless navigation
        https://bugs.webkit.org/show_bug.cgi?id=83843

        Reviewed by Eric Seidel.

        This patch refactors window.location to flow through
        FrameLoader::findFrameForNavigation, which is where we're going to
        implement the seamless navigation redirect.  This patch shouldn't cause
        any observable changes in behavior today, but it will make all the
        seamless-window-location* tests in
        https://github.com/eseidel/webkit/tree/seamless/LayoutTests/fast/frames/seamless
        pass once we merge the seamlesss branch.  See
        https://github.com/eseidel/webkit/commit/a6e708fa6c643b156397e9a287b40a0868c7959c
        for context.

        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::setLocation):
        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        (WebCore::V8DOMWindow::locationAccessorSetter):
        * page/Location.cpp:
        (WebCore::Location::setHref):
        (WebCore::Location::setProtocol):
        (WebCore::Location::setHost):
        (WebCore::Location::setHostname):
        (WebCore::Location::setPort):
        (WebCore::Location::setPathname):
        (WebCore::Location::setSearch):
        (WebCore::Location::setHash):
        (WebCore::Location::assign):
        (WebCore::Location::replace):
        (WebCore::Location::setLocation):
        (WebCore):
        * page/Location.h:
        (Location):

2012-04-12  Dana Jansens  <danakj@chromium.org>

        [chromium] Background filters for composited layers
        https://bugs.webkit.org/show_bug.cgi?id=80046

        Reviewed by Adrienne Walker.

        Adds background filters to LayerChromium/CCLayerImpl. These filters are
        applied to any pixels in the contents behind the layer and seen through
        it.

        This is done by adding a backgroundTexture() to the render surface, which
        holds the read-back contents of the target framebuffer, background filter
        applied, in the surface's own coordinate space. Then this is drawn back
        into the frame buffer before the contents of the surface itself is drawn.

        Tests: platform/chromium/compositing/filters/background-filter-blur-off-axis.html
               platform/chromium/compositing/filters/background-filter-blur-outsets.html
               platform/chromium/compositing/filters/background-filter-blur.html

        * platform/graphics/chromium/LayerChromium.cpp:
        (WebCore::LayerChromium::setBackgroundFilters):
        (WebCore):
        (WebCore::LayerChromium::pushPropertiesTo):
        * platform/graphics/chromium/LayerChromium.h:
        (LayerChromium):
        (WebCore::LayerChromium::backgroundFilters):
        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::drawBackgroundFilters):
        (WebCore):
        (WebCore::LayerRendererChromium::drawRenderSurfaceQuad):
        (WebCore::LayerRendererChromium::getFramebufferTexture):
        (WebCore::LayerRendererChromium::isCurrentRenderSurface):
        (WebCore::LayerRendererChromium::useRenderSurface):
        (WebCore::LayerRendererChromium::useManagedTexture):
        (WebCore::LayerRendererChromium::bindFramebufferToTexture):
        (WebCore::LayerRendererChromium::setScissorToRect):
        * platform/graphics/chromium/LayerRendererChromium.h:
        (LayerRendererChromium):
        * platform/graphics/chromium/RenderSurfaceChromium.h:
        (WebCore::RenderSurfaceChromium::setBackgroundFilters):
        (WebCore::RenderSurfaceChromium::backgroundFilters):
        (RenderSurfaceChromium):
        * platform/graphics/chromium/cc/CCLayerImpl.cpp:
        (WebCore::CCLayerImpl::setBackgroundFilters):
        (WebCore):
        * platform/graphics/chromium/cc/CCLayerImpl.h:
        (CCLayerImpl):
        (WebCore::CCLayerImpl::backgroundFilters):
        * platform/graphics/chromium/cc/CCLayerTreeHostCommon.cpp:
        (WebCore::subtreeShouldRenderToSeparateSurface):
        (WebCore::calculateDrawTransformsAndVisibilityInternal):
        * platform/graphics/chromium/cc/CCRenderSurface.cpp:
        (WebCore::CCRenderSurface::drawableContentRect):
        (WebCore::CCRenderSurface::prepareBackgroundTexture):
        (WebCore):
        (WebCore::CCRenderSurface::releaseBackgroundTexture):
        (WebCore::CCRenderSurface::computeDeviceTransform):
        (WebCore::CCRenderSurface::computeDeviceBoundingBox):
        (WebCore::CCRenderSurface::computeReadbackDeviceBoundingBox):
        (WebCore::CCRenderSurface::readbackDeviceContentRect):
        (WebCore::copyTextureToFramebuffer):
        (WebCore::CCRenderSurface::copyDeviceToBackgroundTexture):
        (WebCore::getSkBitmapTextureId):
        (WebCore::CCRenderSurface::drawContents):
        (WebCore::CCRenderSurface::drawReplica):
        (WebCore::CCRenderSurface::drawLayer):
        (WebCore::CCRenderSurface::drawSurface):
        (WebCore::CCRenderSurface::applyFilters):
        * platform/graphics/chromium/cc/CCRenderSurface.h:
        (CCRenderSurface):
        (WebCore::CCRenderSurface::setBackgroundFilters):
        (WebCore::CCRenderSurface::backgroundFilters):
        (WebCore::CCRenderSurface::backgroundTexture):
        * testing/Internals.cpp:
        (WebCore):
        (WebCore::Internals::setBackgroundBlurOnNode):
        * testing/Internals.h:
        (Internals):
        * testing/Internals.idl:

2012-04-12  Adam Barth  <abarth@webkit.org>

        Remove V8DOMWindowShell::setLocation
        https://bugs.webkit.org/show_bug.cgi?id=83833

        Reviewed by Eric Seidel.

        V8DOMWindowShell::setLocation is only used by document.location.  It's
        more direct for document.location to call Location::setHref directly.
        This integrates correctly with the navigation rules for
        <iframe seamless>.

        (See https://github.com/eseidel/webkit/compare/master...seamless for
        more context about the connection with seamless.)

        Reviewed on GitHub:
        https://github.com/abarth/webkit/commit/48601729d53a6ac39df5a43b22218c91330c3f61

        * bindings/v8/V8DOMWindowShell.cpp:
        (WebCore):
        * bindings/v8/V8DOMWindowShell.h:
        (V8DOMWindowShell):
        * bindings/v8/custom/V8DocumentLocationCustom.cpp:
        (WebCore::V8Document::locationAccessorSetter):

2012-04-12  Levi Weintraub  <leviw@chromium.org>

        Prepare functions in LengthFunctions.h for LayoutUnits
        https://bugs.webkit.org/show_bug.cgi?id=83726

        Reviewed by Eric Seidel.

        Preparing the functions that live in LengthFunctions for sub-pixel layout, which entails
        using and returning LayoutUnits instead of integers. There are a number of rendering
        classes that are laid out using integers -- see https://trac.webkit.org/wiki/LayoutUnit
        for details -- so this also adds integer-specific versions of the length functions for
        explicit use in those classes.

        No new tests. No change in behavior.

        * css/LengthFunctions.h:
        (WebCore): Using LayoutUnits for sub-pixel precision and adding integer-specific versions
        of minimumValueForLength and valueForLength that truncate.
        * css/LengthFunctions.cpp:
        (WebCore):
        * dom/Document.cpp:
        (WebCore::Document::pageSizeAndMarginsInPixels): Document sizes are integral.
        * rendering/RenderFrameSet.cpp:
        (WebCore::RenderFrameSet::layOutAxis): The frame tree continues to be integral.
        * rendering/RenderMarquee.cpp:
        (WebCore::RenderMarquee::timerFired): RenderMarquee scrolling uses integral values.
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::calcRowLogicalHeight): Table layout is integral.

2012-04-12  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r114075.
        http://trac.webkit.org/changeset/114075
        https://bugs.webkit.org/show_bug.cgi?id=83857

        Breaks compile (Requested by jamesr on #webkit).

        * WebCore.gypi:
        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::drawYUV):
        (WebCore::LayerRendererChromium::drawRGBA):
        (WebCore::LayerRendererChromium::copyFrameToTextures):
        * platform/graphics/chromium/LayerRendererChromium.h:
        * platform/graphics/chromium/VideoFrameChromium.cpp: Renamed from Source/Platform/chromium/src/WebVideoFrame.cpp.
        (WebCore):
        (WebCore::VideoFrameChromium::~VideoFrameChromium):
        * platform/graphics/chromium/VideoFrameChromium.h: Copied from Source/Platform/chromium/public/WebVideoFrame.h.
        (WebCore):
        (VideoFrameChromium):
        * platform/graphics/chromium/VideoFrameProvider.h:
        (VideoFrameProvider):
        * platform/graphics/chromium/cc/CCVideoDrawQuad.cpp:
        (WebCore::CCVideoDrawQuad::create):
        (WebCore::CCVideoDrawQuad::CCVideoDrawQuad):
        * platform/graphics/chromium/cc/CCVideoDrawQuad.h:
        (CCVideoDrawQuad):
        (WebCore::CCVideoDrawQuad::frame):
        * platform/graphics/chromium/cc/CCVideoLayerImpl.cpp:
        (WebCore):
        (WebCore::convertVFCFormatToGC3DFormat):
        (WebCore::CCVideoLayerImpl::willDraw):
        (WebCore::CCVideoLayerImpl::computeVisibleSize):
        (WebCore::CCVideoLayerImpl::reserveTextures):
        * platform/graphics/chromium/cc/CCVideoLayerImpl.h:

2012-04-12  Adam Barth  <abarth@webkit.org>

        Use _self to represnet self-navigation, like in the HTML5 spec
        https://bugs.webkit.org/show_bug.cgi?id=83834

        Reviewed by Eric Seidel.

        This patch aligns the internal state representation of the FrameLoader
        more closely with the HTML5 spec.  Both the null string and "_self"
        represent self-navigation, but the HTML5 spec distinguishes them when
        navigating seamless iframes.  In that case, "_self" is explicit
        self-navigation, whereas a null string will get redirected to the
        "master" frame (the closest enclosing non-seamless frame).

        This patch shouldn't have any observable behavior changes, but it will
        be useful when we merge in the seamless branch from GitHub.
        (See https://github.com/eseidel/webkit/commit/df0e71fcacdb0e7e45fe669afe1314cec5b76523
        which contains this change.)

        Once the seamless branch lands, this change will be tested by a number
        of tests in
        https://github.com/eseidel/webkit/tree/seamless/LayoutTests/fast/frames/seamless
        including seamless-hyperlink.html.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadURLIntoChildFrame):
        (WebCore::FrameLoader::loadURL):

2012-04-12  James Robinson  <jamesr@chromium.org>

        [chromium] Move WebVideoFrame into Platform and remove WebCore::VideoFrameChromium wrapper API
        https://bugs.webkit.org/show_bug.cgi?id=83851

        Reviewed by Adam Barth.

        Remove VideoFrameChromium wrapper and converts WebCore code to using the Platform WebVideoFrame API directly.
        Some utility code that previously existed on VideoFrameChromium and only had one caller, such as doing
        width/height adjustements for YV12 frames, is moved into the calling code (CCVideoLayerImpl).

        Covered by existing media/ and compositing/ layout tests.

        * WebCore.gypi:
        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::drawYUV):
        (WebCore::LayerRendererChromium::drawRGBA):
        (WebCore::LayerRendererChromium::copyFrameToTextures):
        * platform/graphics/chromium/LayerRendererChromium.h:
        * platform/graphics/chromium/VideoFrameProvider.h:
        (VideoFrameProvider):
        * platform/graphics/chromium/cc/CCVideoDrawQuad.cpp:
        (WebCore::CCVideoDrawQuad::create):
        (WebCore::CCVideoDrawQuad::CCVideoDrawQuad):
        * platform/graphics/chromium/cc/CCVideoDrawQuad.h:
        (WebKit):
        (CCVideoDrawQuad):
        (WebCore::CCVideoDrawQuad::frame):
        * platform/graphics/chromium/cc/CCVideoLayerImpl.cpp:
        (WebCore):
        (WebCore::convertVFCFormatToGC3DFormat):
        (WebCore::CCVideoLayerImpl::willDraw):
        (WebCore::videoFrameDimension):
        (WebCore::hasPaddingBytes):
        (WebCore::CCVideoLayerImpl::computeVisibleSize):
        (WebCore::CCVideoLayerImpl::reserveTextures):
        * platform/graphics/chromium/cc/CCVideoLayerImpl.h:
        (WebKit):

2012-04-12  Alexey Proskuryakov  <ap@apple.com>

        REGRESSION (r113900): Text tests started failing
        https://bugs.webkit.org/show_bug.cgi?id=83724

        Reviewed by Dan Bernstein.

        * Resources/DefaultFonts.plist.in: Use serif fonts for standard family again,
        and updated the list with better fonts for Japanese.

2012-04-12  Alexey Proskuryakov  <ap@apple.com>

        Preprocessing text files with modern clang treats double slashes in comments
        https://bugs.webkit.org/show_bug.cgi?id=83827

        Reviewed by Mark Rowe.

        * DerivedSources.make: Pass appropriate flags to both llvm and gcc.

2012-04-12  David Dorwin  <ddorwin@chromium.org>

        Add Encrypted Media Extensions events and errors to HTMLMediaElement
        https://bugs.webkit.org/show_bug.cgi?id=82974

        Reviewed by Adam Barth.

        The new events and errors are behind the ENABLE(ENCRYPTED_MEDIA) feature define.
        Implementation is based on v0.1 of the draft proposal at
        http://dvcs.w3.org/hg/html-media/raw-file/tip/encrypted-media/encrypted-media.html#events.

        Tests: fast/events/constructors/media-key-event-constructor.html
               media/encrypted-media/encrypted-media-constants.html
               media/encrypted-media/encrypted-media-events.html

        * WebCore.gypi:
        * bindings/v8/Dictionary.cpp:
        (WebCore::Dictionary::get):
        (WebCore):
        * bindings/v8/Dictionary.h:
        (WebCore):
        (Dictionary):
        * dom/EventNames.h:
        (WebCore):
        * dom/EventNames.in:
        * html/HTMLAttributeNames.in:
        * html/HTMLMediaElement.cpp:
        (WebCore):
        (WebCore::HTMLMediaElement::mediaPlayerKeyAdded):
        (WebCore::HTMLMediaElement::mediaPlayerKeyError):
        (WebCore::HTMLMediaElement::mediaPlayerKeyMessage):
        (WebCore::HTMLMediaElement::mediaPlayerKeyNeeded):
        * html/HTMLMediaElement.h:
        (HTMLMediaElement):
        * html/HTMLMediaElement.idl:
        * html/MediaError.h:
        * html/MediaError.idl:
        * html/MediaKeyError.h: Added.
        (WebCore):
        (MediaKeyError):
        (WebCore::MediaKeyError::create):
        (WebCore::MediaKeyError::code):
        (WebCore::MediaKeyError::MediaKeyError):
        * html/MediaKeyError.idl: Added.
        * html/MediaKeyEvent.cpp: Added.
        (WebCore):
        (WebCore::MediaKeyEventInit::MediaKeyEventInit):
        (WebCore::MediaKeyEvent::MediaKeyEvent):
        (WebCore::MediaKeyEvent::~MediaKeyEvent):
        (WebCore::MediaKeyEvent::interfaceName):
        * html/MediaKeyEvent.h: Added.
        (WebCore):
        (MediaKeyEventInit):
        (MediaKeyEvent):
        (WebCore::MediaKeyEvent::create):
        (WebCore::MediaKeyEvent::keySystem):
        (WebCore::MediaKeyEvent::sessionId):
        (WebCore::MediaKeyEvent::initData):
        (WebCore::MediaKeyEvent::message):
        (WebCore::MediaKeyEvent::defaultURL):
        (WebCore::MediaKeyEvent::errorCode):
        (WebCore::MediaKeyEvent::systemCode):
        * html/MediaKeyEvent.idl: Added.
        * page/DOMWindow.idl:
        * platform/graphics/MediaPlayer.cpp:
        (WebCore):
        (WebCore::MediaPlayer::keyAdded):
        (WebCore::MediaPlayer::keyError):
        (WebCore::MediaPlayer::keyMessage):
        (WebCore::MediaPlayer::keyNeeded):
        * platform/graphics/MediaPlayer.h:
        (MediaPlayerClient):
        (WebCore::MediaPlayerClient::mediaPlayerKeyAdded):
        (WebCore::MediaPlayerClient::mediaPlayerKeyError):
        (WebCore::MediaPlayerClient::mediaPlayerKeyMessage):
        (WebCore::MediaPlayerClient::mediaPlayerKeyNeeded):
        (MediaPlayer):

2012-04-12  Anders Carlsson  <andersca@apple.com>

        Reset the user preferred language overrides in Internals::reset
        https://bugs.webkit.org/show_bug.cgi?id=83845

        Reviewed by Ryosuke Niwa.

        We don't want setting the language override in one test to affect subsequent tests,
        so make sure to reset it in Internals::reset.

        * testing/Internals.cpp:
        (WebCore::Internals::reset):

2012-04-12  Andrey Kosyakov  <caseq@chromium.org>

        [chromium][refactoring] merge CCSingleThreadProxy::{commitIfNeeded,doComposite} into commitAndComposite()
        https://bugs.webkit.org/show_bug.cgi?id=83837

        Reviewed by James Robinson.

        - merge CCSingleThreadProxy::commitIfNeeded() and CCSingleThreadProxy::doComposite() into commitAndComposite()

        * platform/graphics/chromium/cc/CCSingleThreadProxy.cpp:
        (WebCore::CCSingleThreadProxy::compositeAndReadback): call site updated.
        (WebCore::CCSingleThreadProxy::compositeImmediately): ditto.
        (WebCore::CCSingleThreadProxy::commitAndComposite):
        * platform/graphics/chromium/cc/CCSingleThreadProxy.h:

2012-04-12  Nate Chapin  <japhet@chromium.org>

        Remove FrameLoader:m_isLoadingMainResource, since it is always
        false at the only point it is checked.
        https://bugs.webkit.org/show_bug.cgi?id=83819

        Reviewed by Adam Barth.

        No new tests, no functionality change intended.

        * loader/DocumentWriter.cpp:
        (WebCore::DocumentWriter::end): Merge with endIfNotLoadingMainResource(), always end, assert that we're still attached.
        * loader/DocumentWriter.h:
        * loader/FrameLoader.cpp:
        * loader/FrameLoader.h: Remove isLoadingMainResource(), didEndDocument(), and m_isLoadingMainResource.

2012-04-12  Rob Buis  <rbuis@rim.com>

        XMLSerializer().serializeToString() doesn't generate the XML declaration markup like Opera and Firefox
        https://bugs.webkit.org/show_bug.cgi?id=83432

        Reviewed by Ryosuke Niwa.

        Serialize the xml declaration exactly as parsed, if present in the document.

        Test: fast/dom/dom-parse-serialize-xmldecl.html

        * dom/Document.cpp:
        (WebCore::Document::Document):
        (WebCore::Document::setXMLStandalone): update xmlStandalone to either yes or no.
        * dom/Document.h:
        (WebCore::Document::xmlStandalone):
        (WebCore::Document::xmlStandaloneStatus): xmlStandalone can be unspecified, yes or no.
        (WebCore::Document::hasXMLDeclaration):  test if xml declaration is present.
        (WebCore::Document::setHasXMLDeclaration):
        (Document):
        * editing/MarkupAccumulator.cpp:
        (WebCore::MarkupAccumulator::appendXMLDeclaration): write xml declaration if present.
        (WebCore):
        (WebCore::MarkupAccumulator::appendStartMarkup):
        * editing/MarkupAccumulator.h:
        (MarkupAccumulator):
        * xml/parser/XMLDocumentParserLibxml2.cpp:
        (WebCore::XMLDocumentParser::startDocument): call setHasXmlDeclaration and any declaration strings parsed.
        * xml/parser/XMLDocumentParserQt.cpp:
        (WebCore::XMLDocumentParser::startDocument): call setHasXmlDeclaration and any declaration strings parsed.

2012-04-12  Adam Barth  <abarth@webkit.org>

        window.open should prepare for seamless navigation by using findFrameForNavigation
        https://bugs.webkit.org/show_bug.cgi?id=83835

        Reviewed by Ryosuke Niwa.

        Before this patch, window.open called FrameTree::find and
        Document::canNavigate separately.  This patch refactors the code to
        call FrameLoader::findFrameForNavigation, which does both.  This
        refactoring prepares window.open to understand seamless navigation,
        which will happen in findFrameForNavigation.

        This patch should have no behavior change today, but once we merge the
        seamless branch, this change will be tested by
        https://github.com/eseidel/webkit/blob/seamless/LayoutTests/fast/frames/seamless/seamless-window-open.html

        See https://github.com/eseidel/webkit/commit/a0d8b7defbb63047912aefbc8e22bca4f0638c37 for context.

        * WebCore.exp.in:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::findFrameForNavigation):
        (WebCore::createWindow):
        * loader/FrameLoader.h:
        (FrameLoader):

2012-04-12  Andy Estes  <aestes@apple.com>

        REGRESSION (r102262): iAd Producer relies on CSSStyleDeclaration property setters respecting '!important'
        https://bugs.webkit.org/show_bug.cgi?id=83832

        Reviewed by Alexey Proskuryakov.

        Shipping versions of iAd Producer rely on the pre-r102262 behavior of
        respecting '!important' when specified in a CSSStyleDeclaration
        property setter. Restore this quirky behavior for versions of the app
        that expect it.

        * WebCore.exp.in: Export
        Settings::setShouldRespectPriorityInCSSAttributeSetters().
        * bindings/js/JSCSSStyleDeclarationCustom.cpp:
        (WebCore::JSCSSStyleDeclaration::putDelegate): If
        setShouldRespectPriorityInCSSAttributeSetters() is true, restore the
        pre-r102262 behavior wherein we attempt to parse '!important' out of
        the property value.
        * page/Settings.cpp:
        (WebCore::Settings::setShouldRespectPriorityInCSSAttributeSetters):
        (WebCore::Settings::shouldRespectPriorityInCSSAttributeSetters):
        * page/Settings.h:

2012-04-12  Alexandru Chiculita  <achicu@adobe.com>

        REGRESSION(112745) [CSS Filters] Memory use explosion for offscreen filtered elements
        https://bugs.webkit.org/show_bug.cgi?id=83815

        Reviewed by Simon Fraser.

        The filtered area used to be the dirty rect intersected by the bounding box of the
        layer. During a previous change that behavior was lost, so adding it back now.

        Also, removing the memory buffers used to compute filters after the filter is computed.
        They are deleted next time the filter is applied anyway, so there's no need to keep the
        memory for them.

        Test: css3/filters/offscreen-filters-memory-usage.html

        * rendering/FilterEffectRenderer.cpp:
        (WebCore::FilterEffectRenderer::prepare):
        (WebCore):
        (WebCore::FilterEffectRenderer::clearIntermediateResults):
        (WebCore::FilterEffectRendererHelper::prepareFilterEffect):
        (WebCore::FilterEffectRendererHelper::applyFilterEffect):
        * rendering/FilterEffectRenderer.h:
        (FilterEffectRenderer):

2012-04-12  Brent Fulgham  <bfulgham@webkit.org>

        [WinCairo] Build fix after addition of openTypeTable.

        * platform/graphics/FontPlatformData.h:
        (FontPlatformData): The openTypeTable declaration is needed
        for WinCairo as well.
        * platform/graphics/win/FontPlatformDataWin.cpp:
        (WebCore):
        (WebCore::FontPlatformData::openTypeTable): The implementation
        of openTypeTable is needed for non-CG builds.

2012-04-12  Balazs Kelemen  <kbalazs@webkit.org>

        [Qt] Fix WebKit1 build with V8
        https://bugs.webkit.org/show_bug.cgi?id=83322

        Reviewed by Adam Barth.

        Make it possible to build WebKit1 with v8.
        WebKit2 is not covered yet so it need to be disabled.
        To build webkit with --v8 one need a qtjsbackend with
        an up-to-date copy of v8. Thanks to Peter Varga such
        a public repository is available on gitorious:
        https://qt.gitorious.org/~stampho/qt/stamphos-qtjsbackend.

        This patch contains some build fix with !ENABLE(INSPECTOR)
        from it's previous version. These are not necessary now
        but I kept them because they makes sense.

        No change in behaviour so no new tests.

        * DerivedSources.pri:
        * Target.pri:
        * WebCore.pri:
        * bindings/v8/ScriptController.cpp:
        * bindings/v8/ScriptControllerQt.cpp:
        * bindings/v8/ScriptProfiler.cpp:
        (WebCore::retainedDOMInfo):
        (WebCore::ScriptProfiler::initialize):
        * bindings/v8/ScriptState.cpp:
        (WebCore::evalEnabled):
        (WebCore::setEvalEnabled):
        * bindings/v8/V8Binding.cpp:
        (WebCore):
        * bindings/v8/V8Binding.h:
        (V8BindingPerIsolateData):
        * bindings/v8/V8DOMWindowShell.cpp:
        (WebCore::V8DOMWindowShell::initContextIfNeeded):
        * bindings/v8/V8GCForContextDispose.cpp:
        (WebCore::V8GCForContextDispose::pseudoIdleTimerFired):
        * bindings/v8/custom/V8InjectedScriptManager.cpp:
        * config.h:
        * editing/TextIterator.cpp:
        * html/MediaFragmentURIParser.cpp:
        * platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:
        * platform/qt/PlatformSupportQt.cpp:
        (WebCore::PlatformSupport::popupsAllowed):

2012-04-12  Alec Flett  <alecflett@chromium.org>

        IndexedDB: Refactor cursor iteration to remove duplicate code
        https://bugs.webkit.org/show_bug.cgi?id=83302

        Reviewed by Ojan Vafai.

        No new tests, no behavior changes.

        * Modules/indexeddb/IDBBackingStore.h:
        (Cursor):
        * Modules/indexeddb/IDBLevelDBBackingStore.cpp:
        (WebCore):

2012-04-12  Erik Arvidsson  <arv@chromium.org>

        Add support for [ArrayClass] and use that on NodeList
        https://bugs.webkit.org/show_bug.cgi?id=

        Reviewed by Adam Barth.

        Attempt to reland r113931. Now with more updated test expectations.

        With this patch NodeLists now have Array.prototype on their prototype chain which allows
        methods such as forEach and map to work on NodeLists.

        http://dvcs.w3.org/hg/domcore/raw-file/tip/Overview.html#interface-nodelist

        For V8 we need to set a flag on the WrapperTypeInfo since V8 uses FunctionTemplates which
        does not allow setting the prototype to a non FunctionTemplate so the prototype is therefore
        set when the constructor is created.

        For JSC we just pass the right prototype object when creating the NodeList prototype. JSC has
        a bug (81588) that prevents toString to work as specced on Array.prototype.toString. This
        causes test failures in the tests until that has been fixed.

        Test: fast/dom/NodeList/node-list-array-class.html

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateHeader): Include ArrayPrototype.h if an ArrayClass.
        (GenerateImplementation): If ArrayClass use arrayPrototype as prototype.
        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateNamedConstructorCallback):
        (GenerateImplementation): Adds a flag to the WrapperTypeInfo.
        * bindings/scripts/IDLAttributes.txt:: Adds new attribute: ArrayClass.
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::JSTestObj::createPrototype):
        * bindings/scripts/test/JS/JSTestObj.h:
        * bindings/scripts/test/TestObj.idl:
        * bindings/scripts/test/V8/V8Float64Array.cpp:
        (WebCore):
        * bindings/scripts/test/V8/V8TestActiveDOMObject.cpp:
        (WebCore):
        * bindings/scripts/test/V8/V8TestCustomNamedGetter.cpp:
        (WebCore):
        * bindings/scripts/test/V8/V8TestEventConstructor.cpp:
        (WebCore):
        * bindings/scripts/test/V8/V8TestEventTarget.cpp:
        (WebCore):
        * bindings/scripts/test/V8/V8TestInterface.cpp:
        (WebCore):
        * bindings/scripts/test/V8/V8TestMediaQueryListListener.cpp:
        (WebCore):
        * bindings/scripts/test/V8/V8TestNamedConstructor.cpp:
        (WebCore):
        * bindings/scripts/test/V8/V8TestNode.cpp:
        (WebCore):
        * bindings/scripts/test/V8/V8TestObj.cpp:
        (WebCore):
        * bindings/scripts/test/V8/V8TestSerializedScriptValueInterface.cpp:
        (WebCore):
        * bindings/v8/NPV8Object.cpp:
        (WebCore::npObjectTypeInfo):
        * bindings/v8/V8BindingPerContextData.cpp:
        (WebCore::V8BindingPerContextData::init): Get the array prototype too.
        (WebCore::V8BindingPerContextData::createWrapperFromCacheSlowCase):
        (WebCore::V8BindingPerContextData::constructorForTypeSlowCase): If this is an ArrayClass we need to
        set the `[[Prototype]]`.
        * bindings/v8/V8BindingPerContextData.h:
        (V8BindingPerContextData):
        * bindings/v8/V8HiddenPropertyName.h:
        (WebCore):
        * bindings/v8/WrapperTypeInfo.h:
        (WrapperTypeInfo):
        * bindings/v8/custom/V8HTMLImageElementConstructor.cpp:
        (WebCore):
        * dom/NodeList.idl:

2012-04-12  Konrad Piascik  <kpiascik@rim.com>

        [BlackBerry] Web Inspector cookie expiry is showing the wrong date.
        https://bugs.webkit.org/show_bug.cgi?id=83814

        Reviewed by Rob Buis.

        The internal representation for expiry is seconds, we need to convert it
        to milliseconds by multiplying by 1000.

        The value from this method doesn't get used anywhere except Web Inspector.
        Manually tested with Web Inspector by examining the CookieItemView in the Resources Panel.

        * platform/blackberry/ParsedCookie.cpp:
        (WebCore::ParsedCookie::appendWebCoreCookie):

2012-04-12  Adam Klein  <adamk@chromium.org>

        Always set V8 wrappers via V8DOMWrapper::setJSWrapperFor* instead of WeakReferenceMap::set()
        https://bugs.webkit.org/show_bug.cgi?id=82256

        Reviewed by Kentaro Hara.

        This is an attempt to reland r112318, which was rolled out due to suspicion of OOM issues.

        I've landed the refactoring bits of r112318 as separate changes,
        so that this patch contains only the change in which map setter is called.

        Binding tests have been updated with new output.

        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateToV8Converters): Call appropriate V8DOMWrapper::setJSWrapperFor*
        to set up wrapper mapping and remove call to leakRef() which is handled
        in V8DOMWrapper.
        * bindings/scripts/test/V8/V8Float64Array.cpp:
        (WebCore::V8Float64Array::wrapSlow):
        * bindings/scripts/test/V8/V8TestActiveDOMObject.cpp:
        (WebCore::V8TestActiveDOMObject::wrapSlow):
        * bindings/scripts/test/V8/V8TestCustomNamedGetter.cpp:
        (WebCore::V8TestCustomNamedGetter::wrapSlow):
        * bindings/scripts/test/V8/V8TestEventConstructor.cpp:
        (WebCore::V8TestEventConstructor::wrapSlow):
        * bindings/scripts/test/V8/V8TestEventTarget.cpp:
        (WebCore::V8TestEventTarget::wrapSlow):
        * bindings/scripts/test/V8/V8TestInterface.cpp:
        (WebCore::V8TestInterface::wrapSlow):
        * bindings/scripts/test/V8/V8TestMediaQueryListListener.cpp:
        (WebCore::V8TestMediaQueryListListener::wrapSlow):
        * bindings/scripts/test/V8/V8TestNamedConstructor.cpp:
        (WebCore::V8TestNamedConstructor::wrapSlow):
        * bindings/scripts/test/V8/V8TestNode.cpp:
        (WebCore::V8TestNode::wrapSlow):
        * bindings/scripts/test/V8/V8TestObj.cpp:
        (WebCore::V8TestObj::wrapSlow):
        * bindings/scripts/test/V8/V8TestSerializedScriptValueInterface.cpp:
        (WebCore::V8TestSerializedScriptValueInterface::wrapSlow):

2012-04-12  David Hyatt  <hyatt@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=83817
        
        This patch modifies RenderText so that it scans all of its characters up front to
        determine whether or not the simple code path can be used for measurement/rendering
        of the text for the whole run.
        
        TextRun now has an additional field that indicates that the character scan is not
        required, since the entire RenderText is known to be simple. This boolean is set
        when constructing the TextRun from the places that make TextRuns from RenderTexts.
        
        The character scan has been refactored into a static Font method so that it can be
        called by RenderText. The scan of individual TextRuns is also done using the same method
        so that the code is shared.

        Reviewed by Dan Bernstein.

        * platform/graphics/Font.cpp:
        (WebCore::Font::codePath):
        (WebCore::Font::characterRangeCodePath):
        * platform/graphics/Font.h:
        * platform/graphics/TextRun.h:
        (WebCore::TextRun::TextRun):
        (WebCore::TextRun::characterScanForCodePath):
        (WebCore::TextRun::setCharacterScanForCodePath):
        (TextRun):
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::constructTextRun):
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::textWidth):
        * rendering/RenderText.cpp:
        (WebCore::RenderText::RenderText):
        (WebCore::RenderText::widthFromCache):
        (WebCore::RenderText::setTextInternal):
        (WebCore::RenderText::width):
        (WebCore::RenderText::computeCanUseSimpleFontCodePath):
        (WebCore):
        * rendering/RenderText.h:
        (RenderText):
        (WebCore::RenderText::canUseSimpleFontCodePath):

2012-04-12  Levi Weintraub  <leviw@chromium.org>

        Make AccessibilityObject::size non-virtual and fix platform accessibility code's LayoutUnit usage
        https://bugs.webkit.org/show_bug.cgi?id=83803

        Reviewed by Eric Seidel.

        AccessibilityObject::size was virtual with a number of overloads, but all the implementations were
        redundant. Avoiding the virtual thunk and code duplication by declaring it non-virtual and only
        implementing it in AccessibilityObject.

        Also adding a pixelSnappedSize method that returns an IntSize, and using it in platform
        accessibility code.

        No new tests. No change in behavior.

        * accessibility/AccessibilityMenuListOption.h:
        (WebCore::AccessibilityMenuListOption::canHaveChildren):
        * accessibility/AccessibilityMenuListPopup.h:
        (WebCore::AccessibilityMenuListPopup::elementRect):
        * accessibility/AccessibilityObject.h:
        (WebCore::AccessibilityObject::size):
        (WebCore::AccessibilityObject::pixelSnappedSize):
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore):
        * accessibility/AccessibilityRenderObject.h:
        (AccessibilityRenderObject):
        * accessibility/AccessibilitySlider.cpp:
        (WebCore):
        * accessibility/AccessibilitySlider.h:
        (AccessibilitySliderThumb):
        * accessibility/AccessibilityTableColumn.cpp:
        (WebCore):
        * accessibility/AccessibilityTableColumn.h:
        (AccessibilityTableColumn):
        * accessibility/AccessibilityTableHeaderContainer.cpp:
        (WebCore):
        * accessibility/AccessibilityTableHeaderContainer.h:
        (AccessibilityTableHeaderContainer):
        * accessibility/gtk/WebKitAccessibleInterfaceComponent.cpp:
        (webkitAccessibleComponentGetExtents):
        * accessibility/gtk/WebKitAccessibleInterfaceImage.cpp:
        (webkitAccessibleImageGetImagePosition):
        (webkitAccessibleImageGetImageSize):
        * accessibility/mac/WebAccessibilityObjectWrapper.mm:
        (-[WebAccessibilityObjectWrapper position]):
        (-[WebAccessibilityObjectWrapper accessibilityAttributeValue:]):

2012-04-12  Anna Cavender  <annacc@chromium.org>

        Update HTMLMediaElement's index of cues when TextTrack.mode changes to
        and from TextTrack::DISABLED.
        https://bugs.webkit.org/show_bug.cgi?id=83377

        Reviewed by Eric Carlson.

        No new tests. Instead updated media/track/track-mode.html

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::textTrackModeChanged):
            Add the track's cues to the index when the mode changes to HIDDEN or SHOWING.

        * html/HTMLTrackElement.cpp:
        (WebCore::HTMLTrackElement::textTrackRemoveCues):
            Fix a copy pasta error.

        * html/track/TextTrack.cpp:
        (WebCore::TextTrack::setMode):
            Remove the track's cues from the index when the mode changes to DISABLED.

2012-04-12  Cem Kocagil  <cem.kocagil@gmail.com>

        Allow certain Char events in fullscreen
        https://bugs.webkit.org/show_bug.cgi?id=83330

        Reviewed by Alexey Proskuryakov.

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

2012-04-12  Alec Flett  <alecflett@chromium.org>

        IndexedDB: Attributes for a cursor "run past the end" should be undefined.
        https://bugs.webkit.org/show_bug.cgi?id=83492

        Reviewed by Ojan Vafai.

        This brings us up to spec with respect to when it's ok to call
        cursor.continue() and the various behaviors around it:

        If you call it more than once, continue() throws an exception.

        The values of key/primaryKey/value are consistent, whether or not
        continue has been called, meaning that if continue() results in
        data being loaded from the backing store, that data does not
        affect the cursor until the success callback has completed.

        Calls to update() and delete() can happen before continue(), but
        not afterwards.

        Test: storage/indexeddb/cursor-continue-validity.html

        * Modules/indexeddb/IDBCursor.cpp:
        (WebCore::IDBCursor::IDBCursor):
        (WebCore::IDBCursor::key):
        (WebCore::IDBCursor::primaryKey):
        (WebCore::IDBCursor::value):
        (WebCore::IDBCursor::update):
        (WebCore::IDBCursor::continueFunction):
        (WebCore::IDBCursor::deleteFunction):
        (WebCore::IDBCursor::setGotValue):
        (WebCore):
        * Modules/indexeddb/IDBCursor.h:
        (IDBCursor):
        * Modules/indexeddb/IDBRequest.cpp:
        (WebCore::IDBRequest::onSuccess):
        (WebCore::IDBRequest::dispatchEvent):

2012-04-12  Eric Carlson  <eric.carlson@apple.com>

        Media engine should not be told to prepare for playback if media loading is not allowed
        https://bugs.webkit.org/show_bug.cgi?id=83620

        Reviewed by Dan Bernstein.

        Test: media/video-load-require-user-gesture.html

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::load): Early return if user gesture requirement is not met.

        * testing/InternalSettings.cpp:
        (WebCore::InternalSettings::setMediaPlaybackRequiresUserGesture): Moved the method here from
            Internals to be with the rest of the Internals methods that expose preferences.
        * testing/InternalSettings.h:
        * testing/InternalSettings.idl:

        * testing/Internals.cpp: Moved setMediaPlaybackRequiresUserGesture to InternalSettings.
        * testing/Internals.h:
        * testing/Internals.idl:

2012-04-12  Bear Travis  <betravis@adobe.com>

        [CSS Exclusions] Add flag to enable / disable exclusions at runtime
        https://bugs.webkit.org/show_bug.cgi?id=83313

        Reviewed by Ryosuke Niwa.

        Adding setCSSExclusionsEnabled/cssExclusionsEnabled that is true by default.
        The CSS parser will not accept values for the exclusions properties when
        cssExclusionsEnabled is false. However, you will still get the default value
        in the computed style.

        Test: fast/exclusions/css-exclusions-disabled.html

        * WebCore.exp.in:
        * bindings/generic/RuntimeEnabledFeatures.cpp:
        (WebCore):
        * bindings/generic/RuntimeEnabledFeatures.h:
        (WebCore::RuntimeEnabledFeatures::setCSSExclusionsEnabled):
        (WebCore::RuntimeEnabledFeatures::cssExclusionsEnabled):
        (RuntimeEnabledFeatures):
        * css/CSSParser.cpp:
        (WebCore::isSimpleLengthValue):
        (WebCore::isValidKeywordPropertyAndValue):
        (WebCore::CSSParser::parseValue):
        * testing/InternalSettings.cpp:
        (WebCore::InternalSettings::InternalSettings):
        (WebCore::InternalSettings::restoreTo):
        (WebCore::InternalSettings::setCSSExclusionsEnabled):
        (WebCore):
        * testing/InternalSettings.h:
        (InternalSettings):
        * testing/InternalSettings.idl:

2012-04-12  Nate Chapin  <japhet@chromium.org>

        Move Archive processing to DocumentLoader, instead of FrameLoader.
        https://bugs.webkit.org/show_bug.cgi?id=83055

        Reviewed by Adam Barth.

        No new tests, no functionality change intended.

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::finishedLoading):
        (WebCore::DocumentLoader::setupForReplaceByMIMEType):
        (WebCore::DocumentLoader::maybeCreateArchive): Renamed from
            FrameLoader::finishedLoadingDocument(). Returns true if an archive
            was created.
        (WebCore::DocumentLoader::setArchive):
        (WebCore::DocumentLoader::scheduleArchiveLoad):
        (WebCore::DocumentLoader::documentURL): Add a check for whether an archive url
            should be returned, so that we don't need special handling in Document and
            FrameLoader for overriding the document url later.
        * loader/DocumentLoader.h:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::receivedFirstData): Remove archive special cases, since
            DocumentLoader::documentURL() will return the right thing for legacy archives
            and maybeCreateArchive() will override the base url for mhtml.
        (WebCore::FrameLoader::loadArchive):
        * loader/FrameLoader.h:

2012-04-12  Dmitry Lomov  <dslomov@google.com>

        REGRESSION (r113233): fast/canvas/webgl/array-message-passing.html crashing on Lion and Snow Leopard bots.
        https://bugs.webkit.org/show_bug.cgi?id=83427.
        Due to incorrect merge by me when landing r113233, call to find got replaces with call to add in 
        checking for duplicates in ObjectPool when serializing.

        Reviewed by Dean Jackson.

        Covered by existing tests.

        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::CloneSerializer::checkForDuplicate):

2012-04-12  David Barton  <dbarton@mathscribe.com>

        Don't modify shared style objects in RenderMathMLRoot.cpp
        https://bugs.webkit.org/show_bug.cgi?id=83736

        Reviewed by Julien Chaffraix.

        To leave room for the radical sign and absolutely positioned "index", we switch to using
        intrinsic padding. RenderMathMLRoot.cpp is also cleaned up and prepared for merging with
        RenderMathMLSquareRoot.cpp. The base and index are no longer wrapped in extra renderers,
        and the child renderers are now in the same order as in the DOM. Some padding/placement
        terms are unified and debugged.

        Tested by existing tests in roots.xhtml.

        * css/mathml.css:
        (mroot):
        (mroot > * + *):
        (mroot > * + mrow, mroot > * + mfenced):
        * rendering/mathml/RenderMathMLRoot.cpp:
        (WebCore):
        (WebCore::RenderMathMLRoot::index):
        (WebCore::RenderMathMLRoot::paint):
        (WebCore::RenderMathMLRoot::layout):
        * rendering/mathml/RenderMathMLRoot.h:
        (RenderMathMLRoot):
        * rendering/mathml/RenderMathMLSquareRoot.cpp:
        (WebCore):
        (WebCore::RenderMathMLSquareRoot::paint):

2012-04-12  Anders Carlsson  <andersca@apple.com>

        Build fix.

        * page/mac/SettingsMac.mm:
        (WebCore::defaultFontFamilyDictionary):

2012-04-12  Antti Koivisto  <antti@apple.com>

        Remove style sheet argument from StyleRuleImport constructor 
        https://bugs.webkit.org/show_bug.cgi?id=83740

        Reviewed by Andreas Kling.

        The style sheet is set when the rule is added to one. The parser does not need to know about it.

        * css/CSSImportRule.cpp:
        (WebCore::StyleRuleImport::StyleRuleImport):
        * css/CSSImportRule.h:
        (StyleRuleImport):
        (WebCore::StyleRuleImport::setParentStyleSheet):
        * css/CSSParser.cpp:
        (WebCore::CSSParser::createImportRule):
        * css/CSSStyleSheet.cpp:
        (WebCore::StyleSheetInternal::parserAppendRule):
        (WebCore::StyleSheetInternal::wrapperInsertRule):

2012-04-12  Alexey Proskuryakov  <ap@apple.com>

        REGRESSION (r113900): In nightly builds, Safari Webpage Preview Fetcher crashes in Settings::initializeDefaultFontFamilies() due to uncaught exception (sandbox preventing access to fonts plist)
        https://bugs.webkit.org/show_bug.cgi?id=83792
        <rdar://problem/11234002>

        Reviewed by Dan Bernstein.

        * page/mac/SettingsMac.mm: (WebCore::defaultFontFamilyDictionary): Bail out without setting
        font preferences if the process doesn't have read access to WebCore.framework.

2012-04-12  Eli Fidler  <efidler@rim.com>

        [BlackBerry] Set up default fonts for BlackBerry
        https://bugs.webkit.org/show_bug.cgi?id=83775

        Reviewed by Antonio Gomes.

        * PlatformBlackBerry.cmake:
        * page/Settings.cpp:
        (WebCore):
        * page/blackberry/SettingsBlackBerry.cpp: Added.
        (WebCore):
        (WebCore::Settings::initializeDefaultFontFamilies):

2012-04-12  Jon Lee  <jonlee@apple.com>

        Implement Dictionary.h on mac (83472)
        https://bugs.webkit.org/show_bug.cgi?id=83472
        <rdar://problem/11209766>

        Reviewed by Kentaro Hara.

        A difference between Dictionary and JSDictionary makes it difficult to merge the two together and avoid
        creating a confusing API. The boolean returned by Dictionary::get() represents whether the
        property was found. The boolean returned by JSDictionary::tryGetProperty() represents whether an
        exception was thrown.

        * WebCore.xcodeproj/project.pbxproj: Add Dictionary.h and Dictionary.cpp.

        * bindings/js/Dictionary.cpp: Added.
        (WebCore::Dictionary::Dictionary):
        (WebCore::Dictionary::get):
        * bindings/js/Dictionary.h: Leverage JSDictionary's functionality to obtain the data.
        (WebCore::Dictionary::isObject): Mark an unimplemented.
        (WebCore::Dictionary::isUndefinedOrNull): Mark an unimplemented.
        (WebCore::Dictionary::getWithUndefinedOrNullCheck): Mark an unimplemented.

        * bindings/js/JSDictionary.cpp:
        (WebCore::JSDictionary::tryGetProperty): Convert to a const function.
        * bindings/js/JSDictionary.h:
        (WebCore::JSDictionary::isValid):
        (WebCore::JSDictionary::tryGetProperty): Convert to a const function.
        (WebCore::JSDictionary::get): Similar to tryGetProperty(), but returns true if the
        property was found, converting the value succeeded and the out parameter "result" was set.
        (WebCore::JSDictionary::tryGetPropertyAndResult): Refactor tryGetProperty() to return the enum directly.

        Change bindings scripts to use Dictionary constructor.
        * bindings/js/IDBBindingUtilities.cpp: Remove createDictionaryFromValue().
        * bindings/js/IDBBindingUtilities.h: Remove createDictionaryFromValue().
        * bindings/scripts/CodeGeneratorJS.pm:
        (JSValueToNative): Update to remove IDBBindingUtilities.h dependency, and use Dictionary constructor.
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::jsTestObjPrototypeFunctionOptionsObject): Update expected generated output.

2012-04-12  Sami Kyostila  <skyostil@chromium.org>

        [chromium] Fix threaded compositor HUD crash
        https://bugs.webkit.org/show_bug.cgi?id=83778

        Reviewed by James Robinson.

        Don't try to read font metrics in threaded compositing mode, since we
        currently can't render HUD text with the threaded compositor.

        HUD is not testable in WebKit.

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

2012-04-11  Andrey Kosyakov  <caseq@chromium.org>

        Web Inspector: zoom timeline frame on dblclick on the frame bar
        https://bugs.webkit.org/show_bug.cgi?id=83741

        Reviewed by Pavel Feldman.

       - put timeline frame bars into a container, so we can have one listener;
       - upon dblclick, find the frame, get its window coordinates and set overview selection window accordingly.

        * inspector/front-end/TimelineOverviewPane.js:
        (WebInspector.TimelineOverviewPane.prototype.zoomToFrame): Get frame coordinates, set overview window.
        (WebInspector.TimelineVerticalOverview.prototype.update): Maintain framesPerBar as a member for reuse in getFramePosition()
        (WebInspector.TimelineVerticalOverview.prototype.framePosition): Map frame to screen positions.
        (WebInspector.TimelineVerticalOverview.prototype._renderBars): Factored out barNumberToScreenPosition()
        (WebInspector.TimelineVerticalOverview.prototype._barNumberToScreenPosition):
        (WebInspector.TimelineVerticalOverview.prototype.getWindowTimes): Drive-by style fix.
        * inspector/front-end/TimelinePanel.js:
        (WebInspector.TimelinePanel.prototype._updateFrames): Put frames into a containing div.
        (WebInspector.TimelinePanel.prototype._onFrameDoubleClicked): Zoom to frame upon double click.
        * inspector/front-end/timelinePanel.css:
        (.timeline-frame-container):

2012-04-11  Andrey Kosyakov  <caseq@chromium.org>

        Web Inspector: show wall time frame duration on the vertical overview
        https://bugs.webkit.org/show_bug.cgi?id=83718

        Reviewed by Pavel Feldman.

        - show frame duration as a contour of the frame bar in vertical overview;
        - when scaling, normalize bar to a max of 3 * median frame duration, so too long frames do not dwarf the majority;
        - add Array.prototype.qselect() for the above;
        - factor our partition algorithm onto Array.prototype for better reuse;

        * inspector/front-end/PartialQuickSort.js: factor out partition()
        (Object.defineProperty.):
        (Object.defineProperty):
        * inspector/front-end/TimelineFrameController.js:
        (WebInspector.TimelineFrameController.prototype._flushFrame): add frame.duration.
        (WebInspector.TimelineFrameController.prototype._createSyntheticFrame): ditto.
        * inspector/front-end/TimelineOverviewPane.js:
        (WebInspector.TimelineVerticalOverview):
        (WebInspector.TimelineVerticalOverview.prototype.reset): this._longestFrameTime is gone.
        (WebInspector.TimelineVerticalOverview.prototype.update): ditto.
        (WebInspector.TimelineVerticalOverview.prototype._aggregateFrames): return frames to display, not just their timeByCatogory.
        (WebInspector.TimelineVerticalOverview.prototype._renderBars): use entire frames, not timeByCategory.
        (WebInspector.TimelineVerticalOverview.prototype._renderBar): ditto.
        * inspector/front-end/externs.js: Added annotations for partition() and qselect()
        (Array.prototype.partition):
        (Array.prototype.qselect):
        * inspector/front-end/utilities.js:
        (.):

2012-04-12  David Barr  <davidbarr@chromium.org>

        Optimize non-rounded double border rendering to avoid transparency layers
        https://bugs.webkit.org/show_bug.cgi?id=83745

        Reviewed by Simon Fraser.

        No functional change, painting optimization only.

        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paintBorder):

2012-04-12  Julien Chaffraix  <jchaffraix@webkit.org>

        Reduce the use of RenderLayer outside of the rendering code
        https://bugs.webkit.org/show_bug.cgi?id=83728

        Reviewed by Simon Fraser.

        Test: fast/layers/scrollByLines-overflow-no-layer.html

        This is mostly a layering violation change. This changes reduces the number of
        RenderLayer use outside rendering/ by a third but there are still numerous uses.

        While auditing the different uses of RenderLayer, I found a potential crasher
        and fixed it which is why we have a test case.

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::visiblePositionForPoint):
        * dom/Document.cpp:
        (WebCore::Document::nodesFromRect):
        (WebCore::Document::handleZeroPadding):
        (WebCore::nodeFromPoint):
        (WebCore::Document::prepareMouseEvent):
        * editing/FrameSelection.cpp:
        (WebCore::FrameSelection::contains):
        * page/DragController.cpp:
        (WebCore::elementUnderMouse):
        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleMouseDraggedEvent):
        (WebCore::EventHandler::eventMayStartDrag):
        (WebCore::EventHandler::updateSelectionForMouseDrag):
        (WebCore::EventHandler::hitTestResultAtPoint):
        (WebCore::EventHandler::handleWheelEvent):
        (WebCore::EventHandler::hoverTimerFired):
        (WebCore::EventHandler::handleDrag):
        Updated these call sites to use RenderView::hitTest.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        * page/FrameView.cpp:
        (WebCore::FrameView::contentsInCompositedLayer):
        (WebCore::FrameView::scrollContentsFastPath):
        Updated these call sites to use RenderObject::isComposited().

        * dom/Element.cpp:
        (WebCore::Element::scrollByUnits):
        Call directly RenderBox::scroll instead of calling the layer.
        This actually fixes a crasher that slipped through the cracks.

        * editing/visible_units.cpp:
        * html/shadow/TextControlInnerElements.cpp:
        * page/ContextMenuController.cpp:
        * page/FocusController.cpp:
        * page/Frame.cpp:
        * page/GestureTapHighlighter.cpp:
        * page/PrintContext.cpp:
        * plugins/mac/PluginViewMac.mm:
        Removed unneeded #include.

        * plugins/gtk/PluginViewGtk.cpp:
        * plugins/qt/PluginViewQt.cpp:
        Replaced RenderLayer.h #include with RenderObject.h as
        we use RenderObject::absoluteToLocal.

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::isComposited):
        * rendering/RenderObject.h:
        * rendering/RenderView.cpp:
        (WebCore::RenderView::hitTest):
        * rendering/RenderView.h:
        Added 2 new functions that pipe through the RenderLayer.

2012-04-12  Pravinin D  <pravind.2k4@gmail.com>

        font-size:0 text runs has non zero width in case of Windows Safari.
        https://bugs.webkit.org/show_bug.cgi?id=83559

        Reviewed by Dan Bernstein.

        Test case already exits.
        LayoutTest/fast/text/font-size-zero.html

        * platform/graphics/win/SimpleFontDataCGWin.cpp:
        (WebCore):
        (WebCore::SimpleFontData::platformBoundsForGlyph):
        (WebCore::SimpleFontData::platformWidthForGlyph):

2012-04-12  Alexei Filippov  <alexeif@chromium.org>

        Web Inspector: Move meta node out of nodes in snapshot serialization.
        https://bugs.webkit.org/show_bug.cgi?id=83701

        Reviewed by Yury Semikhatsky.

        * inspector/front-end/HeapSnapshot.js:
        (WebInspector.HeapSnapshotLoader.prototype.pushJSONChunk):
        (WebInspector.HeapSnapshot):

2012-04-12  Yael Aharon  <yael.aharon@nokia.com>

        [Qt][WK2] Nested fixed elements scroll too fast
        https://bugs.webkit.org/show_bug.cgi?id=83720

        Reviewed by Noam Rosenthal.

        Before setting the scrollPositionDelta to a fixed layer, check if it has an ancestor which also has fixed position.
        If it does, do not set scrollPositionDelta.
        Added a flag to TextureMapperLayer and GraphicsLayerTextureMapper indicating if it is a fixed position layer.

        * platform/graphics/texmap/GraphicsLayerTextureMapper.cpp:
        (WebCore::GraphicsLayerTextureMapper::GraphicsLayerTextureMapper):
        * platform/graphics/texmap/GraphicsLayerTextureMapper.h:
        (WebCore::GraphicsLayerTextureMapper::setFixedToViewport):
        (WebCore::GraphicsLayerTextureMapper::fixedToViewport):
        (GraphicsLayerTextureMapper):
        * platform/graphics/texmap/TextureMapperLayer.cpp:
        (WebCore::TextureMapperLayer::syncCompositingStateSelf):
        (WebCore::TextureMapperLayer::isAncestorFixedToViewport):
        (WebCore):
        (WebCore::TextureMapperLayer::setScrollPositionDeltaIfNeeded):
        * platform/graphics/texmap/TextureMapperLayer.h:
        (TextureMapperLayer):
        (WebCore::TextureMapperLayer::setFixedToViewport):

2012-04-12  Charles Wei  <charles.wei@torchmobile.com.cn>

        [BlackBerry] Revert the patch for 82764
        https://bugs.webkit.org/show_bug.cgi?id=83767

        Reviewed by Rob Buis.

        Revert the patch for 82764, which is causing misfunction.
        The internal commit is: 800213f5

        * plugins/blackberry/PluginViewBlackBerry.cpp:
        (WebCore::PluginView::setNPWindowIfNeeded):
        (WebCore::PluginView::platformGetValue):
        (WebCore::PluginView::platformDestroy):
        * plugins/blackberry/PluginViewPrivateBlackBerry.h:
        (PluginViewPrivate):

2012-04-12  Kent Tamura  <tkent@chromium.org>

        [Chromium] Enable INPUT_TYPE_DATE
        https://bugs.webkit.org/show_bug.cgi?id=83761

        Reviewed by Kentaro Hara.

        * html/DateInputType.cpp:
        Touch it to avoid build issues. No code changes.
        * html/DateInputType.h: ditto.
        * html/InputType.cpp: ditto.

2012-04-12  Yury Semikhatsky  <yurys@chromium.org>

        Web Inspector: annotate the rest of profiler front-end for closure compiler
        https://bugs.webkit.org/show_bug.cgi?id=83781

        All remaining Profiler front-end files are annotated for closure compiler.

        Reviewed by Pavel Feldman.

        * inspector/compile-front-end.py:
        * inspector/front-end/CSSSelectorProfileView.js:
        * inspector/front-end/HeapSnapshotProxy.js:
        (WebInspector.HeapSnapshotWorkerWrapper):
        (WebInspector.HeapSnapshotWorkerWrapper.prototype.postMessag):
        (WebInspector.HeapSnapshotWorkerWrapper.prototype.terminate):
        (WebInspector.HeapSnapshotWorker):
        (WebInspector.HeapSnapshotProxyObject.prototype.callFactoryMethod):
        (WebInspector.HeapSnapshotProxyObject.prototype.callMethod):
        * inspector/front-end/HeapSnapshotWorkerDispatcher.js:
        * inspector/front-end/TopDownProfileDataGridTree.js:
        (WebInspector.TopDownProfileDataGridTree.prototype.exclude):
        * inspector/front-end/externs.js:
        (addEventListener):

2012-04-12  Sam D  <dsam2912@gmail.com>

        Web Inspector: Node Value should not get corrupt while jump over different matches in search.
        https://bugs.webkit.org/show_bug.cgi?id=83758
        
        The order in which updateEntryHide is called for cached
        highlightResults is changed in "last changed first corrected" order to preserve the semantic of node.

        Reviewed by Pavel Feldman.

        No new tests required.

        * inspector/front-end/ElementsTreeOutline.js:
        (WebInspector.ElementsTreeElement.prototype._updateSearchHighlight):

2012-03-05  Pierre Rossi  <pierre.rossi@gmail.com>

        [Qt] Use QRawFont when building with Qt 5
        https://bugs.webkit.org/show_bug.cgi?id=78001

        Up until now, fonts in the Qt port have been handled via
        the QFont API. QRawFont offers a lower-level API enabling
        us to be more in line with what other WebKit ports do.
        This patch proceeds to switching over to QRawFont, and
        effectively use an earlier change by Andreas Kling
        that remained guarded up until now.

        Reviewed by Simon Hausmann.

        No new tests since this is refactoring of existing
        functionality.

        * Target.pri:
        * platform/graphics/Font.cpp:
        (WebCore::Font::drawText):
        * platform/graphics/Font.h:
        (Font):
        (WebCore):
        (WebCore::Font::syntheticFont): Added.
        * platform/graphics/SimpleFontData.h:
        (SimpleFontData):
        (WebCore::SimpleFontData::getQtRawFont):
        (WebCore):
        * platform/graphics/qt/FontCacheQt.cpp:
        (WebCore::rawFontForCharacters):
        (WebCore):
        (WebCore::FontCache::getFontDataForCharacters):
        (WebCore::FontCache::createFontPlatformData):
        * platform/graphics/qt/FontCustomPlatformData.h:
        (FontCustomPlatformData):
        * platform/graphics/qt/FontCustomPlatformDataQt.cpp:
        (WebCore::FontCustomPlatformData::~FontCustomPlatformData):
        (WebCore::FontCustomPlatformData::fontPlatformData):
        (WebCore::createFontCustomPlatformData):
        * platform/graphics/qt/FontPlatformData.h:
        (WebCore::FontPlatformDataPrivate::FontPlatformDataPrivate):
        (FontPlatformDataPrivate):
        (FontPlatformData):
        * platform/graphics/qt/FontPlatformDataQt.cpp:
        (WebCore::FontPlatformData::FontPlatformData):
        (WebCore):
        (WebCore::FontPlatformData::operator==):
        * platform/graphics/qt/FontQt.cpp:
        (WebCore::fillPenForContext):
        (WebCore::pathForGlyphs):
        (WebCore::drawQtGlyphRun):
        (WebCore::Font::drawComplexText):
        (WebCore::Font::floatWidthForComplexText):
        (WebCore::Font::offsetForPositionForComplexText):
        (WebCore::Font::selectionRectForComplexText):
        (WebCore::Font::initFormatForTextLayout):
        (WebCore):
        (WebCore::Font::drawGlyphs):
        (WebCore::Font::syntheticFont):
        (WebCore::Font::rawFont):
        * platform/graphics/qt/FontQt4.cpp: Copied from Source/WebCore/platform/graphics/qt/FontQt.cpp.
        (WebCore):
        (WebCore::fromRawDataWithoutRef):
        (WebCore::setupLayout):
        (WebCore::fillPenForContext):
        (WebCore::strokePenForContext):
        (WebCore::drawTextCommon):
        (WebCore::Font::drawComplexText):
        (WebCore::Font::floatWidthForComplexText):
        (WebCore::Font::offsetForPositionForComplexText):
        (WebCore::Font::selectionRectForComplexText):
        (WebCore::Font::canReturnFallbackFontsForComplexText):
        (WebCore::Font::drawEmphasisMarksForComplexText):
        (WebCore::Font::drawSimpleText):
        (WebCore::Font::offsetForPositionForSimpleText):
        (WebCore::Font::floatWidthForSimpleText):
        (WebCore::Font::selectionRectForSimpleText):
        (WebCore::Font::canExpandAroundIdeographsInComplexText):
        (WebCore::Font::primaryFontHasGlyphForCharacter):
        (WebCore::Font::emphasisMarkAscent):
        (WebCore::Font::emphasisMarkDescent):
        (WebCore::Font::emphasisMarkHeight):
        (WebCore::Font::drawEmphasisMarksForSimpleText):
        (WebCore::Font::font):
        * platform/graphics/qt/SimpleFontDataQt.cpp:
        (WebCore::SimpleFontData::platformInit):
        * platform/qt/RenderThemeQt.cpp:
        (WebCore::RenderThemeQt::fileListNameForWidth):
        * platform/qt/RenderThemeQtMobile.cpp:
        (WebCore::RenderThemeQtMobile::computeSizeBasedOnStyle):

2012-04-12  JungJik Lee  <jungjik.lee@samsung.com>

        Calculate the cover rect of tiled backing store with the trajectory vector.
        https://bugs.webkit.org/show_bug.cgi?id=83462

        Reviewed by Kenneth Rohde Christiansen.

        When trajectory vector is not zero, it is able to calculate the proper cover area.
        No new tests - no new functionality.

        * platform/graphics/TiledBackingStore.cpp:
        (WebCore::TiledBackingStore::computeCoverAndKeepRect):

2012-04-12  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: extracting NetworkRequest from Resource (step 2)
        https://bugs.webkit.org/show_bug.cgi?id=83773

        Reviewed by Yury Semikhatsky.

        This step moves request-related views from being resource-based to request-based.
        See https://bugs.webkit.org/show_bug.cgi?id=61363 for the meta bug.

        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * inspector/compile-front-end.py:
        * inspector/front-end/ContentProviders.js:
        (WebInspector.ResourceContentProvider):
        (WebInspector.ResourceContentProvider.prototype.requestContent):
        (WebInspector.ResourceContentProvider.prototype.searchInContent):
        * inspector/front-end/NetworkItemView.js:
        (WebInspector.NetworkItemView):
        (WebInspector.RequestContentView):
        (WebInspector.RequestContentView.prototype._ensureInnerViewShown):
        * inspector/front-end/NetworkPanel.js:
        (WebInspector.NetworkLogView.prototype._showPopover):
        * inspector/front-end/NetworkRequest.js:
        (WebInspector.NetworkRequest.prototype.resource):
        * inspector/front-end/RawSourceCode.js:
        (WebInspector.RawSourceCode.prototype._createContentProvider):
        * inspector/front-end/RequestCookiesView.js: Renamed from Source/WebCore/inspector/front-end/ResourceCookiesView.js.
        (WebInspector.RequestCookiesView):
        * inspector/front-end/RequestHTMLView.js: Renamed from Source/WebCore/inspector/front-end/ResourceHTMLView.js.
        (WebInspector.RequestHTMLView):
        (WebInspector.RequestHTMLView.prototype._createIFrame):
        * inspector/front-end/RequestHeadersView.js: Renamed from Source/WebCore/inspector/front-end/ResourceHeadersView.js.
        (WebInspector.RequestHeadersView):
        * inspector/front-end/RequestJSONView.js: Renamed from Source/WebCore/inspector/front-end/ResourceJSONView.js.
        (WebInspector.RequestJSONView):
        (WebInspector.RequestJSONView.parseJSON.WebInspector.RequestJSONView.parseJSONP):
        * inspector/front-end/RequestPreviewView.js: Renamed from Source/WebCore/inspector/front-end/ResourcePreviewView.js.
        (WebInspector.RequestPreviewView):
        (WebInspector.RequestPreviewView.prototype.contentLoaded):
        (WebInspector.RequestPreviewView.prototype._createPreviewView):
        * inspector/front-end/RequestResponseView.js: Renamed from Source/WebCore/inspector/front-end/ResourceResponseView.js.
        (WebInspector.RequestResponseView):
        (WebInspector.RequestResponseView.prototype.get sourceView):
        (WebInspector.RequestResponseView.prototype.contentLoaded):
        * inspector/front-end/RequestTimingView.js: Renamed from Source/WebCore/inspector/front-end/ResourceTimingView.js.
        (WebInspector.RequestTimingView):
        (WebInspector.RequestTimingView.prototype._refresh):
        * inspector/front-end/RequestView.js: Copied from Source/WebCore/inspector/front-end/NetworkRequest.js.
        (WebInspector.RequestView):
        (WebInspector.RequestView.prototype.hasContent):
        (WebInspector.RequestView.hasTextContent):
        (WebInspector.RequestView.nonSourceViewForRequest):
        * inspector/front-end/ResourceView.js:
        (WebInspector.ResourceSourceFrame._canonicalMIMEType):
        (WebInspector.ResourceSourceFrame._mimeTypeForResource):
        (WebInspector.ResourceSourceFrame.prototype.requestContent):
        (WebInspector.ResourceSourceFrame.prototype._contentChanged):
        (WebInspector.ResourceRevisionSourceFrame.prototype.requestContent):
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/inspector.html:

2012-04-12  Yury Semikhatsky  <yurys@chromium.org>

        Unreviewed. Fix a couple of compiler annotations after r113963.

        * inspector/front-end/TopDownProfileDataGridTree.js:
        (WebInspector.TopDownProfileDataGridTree):
        (WebInspector.TopDownProfileDataGridTree.prototype.exclude):

2012-04-11  Yury Semikhatsky  <yurys@chromium.org>

        Web Inspector: add closure compiler annotations for profiler code
        https://bugs.webkit.org/show_bug.cgi?id=83700

        Basic type annotations are added to most of the profiler front-end. Some
        dead code removed.

        Reviewed by Pavel Feldman.

        * inspector/compile-front-end.py:
        * inspector/front-end/BinarySearch.js:
        (Object.defineProperty):
        * inspector/front-end/BottomUpProfileDataGridTree.js:
        (WebInspector.BottomUpProfileDataGridNode.prototype._restore):
        (WebInspector.BottomUpProfileDataGridNode.prototype._sharedPopulate):
        (WebInspector.BottomUpProfileDataGridNode.prototype._willHaveChildren):
        (WebInspector.BottomUpProfileDataGridTree):
        * inspector/front-end/DataGrid.js:
        * inspector/front-end/DetailedHeapshotGridNodes.js:
        (WebInspector.HeapSnapshotInstanceNode.prototype._createChildNode):
        (WebInspector.HeapSnapshotDiffNode.prototype.populateChildren.firstProviderPopulated):
        (WebInspector.HeapSnapshotDiffNode.prototype.populateChildren.else.firstProviderPopulated):
        (WebInspector.HeapSnapshotDiffNode.prototype.populateChildren):
        * inspector/front-end/DetailedHeapshotView.js:
        (WebInspector.DetailedHeapshotView.prototype._changeBase):
        (WebInspector.DetailedHeapshotView.prototype._setRetainmentDataGridSource):
        (WebInspector.DetailedHeapshotView.prototype._helpClicked.appendHelp):
        (WebInspector.DetailedHeapshotView.prototype._helpClicked):
        * inspector/front-end/HeapSnapshot.js:
        (WebInspector.HeapSnapshot):
        (HeapSnapshotMetainfo):
        (WebInspector.HeapSnapshot.prototype._buildRetainers):
        (WebInspector.HeapSnapshot.prototype._buildDominatedNodes):
        (WebInspector.HeapSnapshot.prototype._markQueriableHeapObjects):
        * inspector/front-end/ProfileDataGridTree.js:
        (WebInspector.ProfileDataGridNode.prototype.insertChild):
        (WebInspector.ProfileDataGridNode.prototype.removeChild):
        (WebInspector.ProfileDataGridNode.prototype.removeChildren):
        (WebInspector.ProfileDataGridNode.prototype._populate):
        (WebInspector.ProfileDataGridTree.propertyComparator):
        * inspector/front-end/ProfileView.js:
        * inspector/front-end/ProfilesPanel.js:
        (WebInspector.ProfileHeader):
        (WebInspector.ProfilesPanel.prototype._finishHeapSnapshot.parsed):
        (WebInspector.ProfilesPanel.prototype._finishHeapSnapshot):
        (WebInspector.ProfilesPanel.prototype.performSearch.finishedCallback):
        (WebInspector.ProfilesPanel.prototype.setRecordingProfile):
        (WebInspector.ProfilesPanel.prototype.takeHeapSnapshot):
        (WebInspector.ProfilerDispatcher.prototype.addProfileHeader):
        * inspector/front-end/TopDownProfileDataGridTree.js:
        (WebInspector.TopDownProfileDataGridTree):
        (WebInspector.TopDownProfileDataGridTree.prototype.exclude):
        * inspector/front-end/externs.js:
        (Array.prototype.binaryIndexOf):
        (Array.prototype.sortRange):
        (WebInspector.CSSSelectorProfileType):
        (WebInspector.HeapSnapshotWorker):
        (WebInspector.HeapSnapshotWorker.prototype.createObject):
        (WebInspector.HeapSnapshotWorker.prototype.startCheckingForLongRunningCalls):
        * inspector/front-end/heapProfiler.css:

2012-04-12  Zalan Bujtas  <zbujtas@gmail.com>

        [Qt][WK2] Zoom gesture with double tap crashes on iframe when main frame has scroll offset.
        https://bugs.webkit.org/show_bug.cgi?id=83428

        Reviewed by Kenneth Rohde Christiansen.

        When delegate scrolling is on, the frame view needs to ignore scrolling offset when converting
        coordinates. It is already done at ScrollView base class and this patch copies the logic to the
        FrameView subclass.
        Also make sure that TouchAdjustment's findBest*() functions' return value are not ignored by the caller.

        Test: touchadjustment/iframe-with-mainframe-scroll-offset.html

        * page/EventHandler.cpp:
        (WebCore::EventHandler::bestClickableNodeForTouchPoint):
        (WebCore::EventHandler::bestZoomableAreaForTouchPoint):
        * page/EventHandler.h:
        (EventHandler):
        * page/FrameView.cpp:
        (WebCore::FrameView::convertFromRenderer):
        (WebCore::FrameView::convertToRenderer):
        * page/GestureTapHighlighter.cpp:
        * testing/Internals.cpp:
        (WebCore::Internals::setDelegatesScrolling):
        (WebCore::Internals::touchPositionAdjustedToBestClickableNode):
        (WebCore::Internals::bestZoomableAreaForTouchPoint):
        * testing/Internals.h:
        (Internals):
        * testing/Internals.idl:

2012-04-12  Zoltan Horvath  <zoltan@webkit.org>

        [Qt] Two canvas tests fail with QT_IMAGE_DECODER=0 setup
        https://bugs.webkit.org/show_bug.cgi?id=83764

        The following tests were failed after r108792:
        - canvas-toDataURL-case-insensitive-mimetype.html
        - toDataURL-supportedTypes.html 
        because supportedImageMIMETypesForEncoding wasn't filled
        with MIME types in case of QT_IMAGE_DECODER=0 build setup.

        Reviewed by Csaba Osztrogonác.

        Fixes existing tests.

        * platform/MIMETypeRegistry.cpp:
        (WebCore::initializeSupportedImageMIMETypesForEncoding):

2012-04-12  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r113931.
        http://trac.webkit.org/changeset/113931
        https://bugs.webkit.org/show_bug.cgi?id=83766

        broke 4 tests on JSC platforms (Requested by philn-tp on
        #webkit).

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateHeader):
        (GenerateImplementation):
        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateNamedConstructorCallback):
        (GenerateImplementation):
        * bindings/scripts/IDLAttributes.txt:
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::JSTestObj::createPrototype):
        * bindings/scripts/test/JS/JSTestObj.h:
        * bindings/scripts/test/TestObj.idl:
        * bindings/scripts/test/V8/V8Float64Array.cpp:
        (WebCore):
        * bindings/scripts/test/V8/V8TestActiveDOMObject.cpp:
        (WebCore):
        * bindings/scripts/test/V8/V8TestCustomNamedGetter.cpp:
        (WebCore):
        * bindings/scripts/test/V8/V8TestEventConstructor.cpp:
        (WebCore):
        * bindings/scripts/test/V8/V8TestEventTarget.cpp:
        (WebCore):
        * bindings/scripts/test/V8/V8TestInterface.cpp:
        (WebCore):
        * bindings/scripts/test/V8/V8TestMediaQueryListListener.cpp:
        (WebCore):
        * bindings/scripts/test/V8/V8TestNamedConstructor.cpp:
        (WebCore):
        * bindings/scripts/test/V8/V8TestObj.cpp:
        (WebCore):
        * bindings/scripts/test/V8/V8TestSerializedScriptValueInterface.cpp:
        (WebCore):
        * bindings/v8/NPV8Object.cpp:
        (WebCore::npObjectTypeInfo):
        * bindings/v8/V8BindingPerContextData.cpp:
        (WebCore::V8BindingPerContextData::init):
        (WebCore::V8BindingPerContextData::createWrapperFromCacheSlowCase):
        (WebCore::V8BindingPerContextData::constructorForTypeSlowCase):
        * bindings/v8/V8BindingPerContextData.h:
        (V8BindingPerContextData):
        * bindings/v8/V8HiddenPropertyName.h:
        (WebCore):
        * bindings/v8/WrapperTypeInfo.h:
        (WrapperTypeInfo):
        * bindings/v8/custom/V8HTMLImageElementConstructor.cpp:
        (WebCore):
        * dom/NodeList.idl:

2012-04-12  Charles Wei  <charles.wei@torchmobile.com.cn>

        [BlackBerry] Upstreaming BlackBerry-specific changes to PluginView -- remove unused functions
        https://bugs.webkit.org/show_bug.cgi?id=83756

        Reviewed by George Staikos.

        PluginView::halt(), PluginView::restart() have been removed from
        upstreaming code, should remove them from BlackBerry porting also.

        * plugins/blackberry/PluginViewBlackBerry.cpp:

2012-04-12  Kenichi Ishibashi  <bashi@chromium.org>

        [Chromium] The size of glyphStorage should be passed to substituteWithVerticalGlyphs()
        https://bugs.webkit.org/show_bug.cgi?id=83751

        Reviewed by Kent Tamura.

        The last argument of substituteWithVerticalGlyphs() should be
        the size of |glyphStorage|.

        No new tests because we can't test the fix by layout tests.
        I confirmed the fix with ASAN.

        * platform/graphics/skia/GlyphPageTreeNodeSkia.cpp:
        (WebCore::GlyphPage::fill):

2012-04-12  Jason Liu  <jason.liu@torchmobile.com.cn>

        [BlackBerry] We shouldn't set empty Content-Length & Content-Type to a request's headers.
        https://bugs.webkit.org/show_bug.cgi?id=83349

        When there is a redirection for a POST request, we change POST to GET and set
        Content-Length/Content-Type to empty strings.
        We should remove these headers instead of adding empty strings.

        Reviewed by George Staikos.

        No new tests. Refactor.

        * platform/network/blackberry/NetworkJob.cpp:
        (WebCore::NetworkJob::handleRedirect):
        * platform/network/blackberry/ResourceRequest.h:
        (ResourceRequest):
        * platform/network/blackberry/ResourceRequestBlackBerry.cpp:
        (WebCore::ResourceRequest::clearHTTPContentLength):
        (WebCore):
        (WebCore::ResourceRequest::clearHTTPContentType):

2012-04-12  Noel Gordon  <noel.gordon@gmail.com>

        [Qt] ImageBuffer: Canonical mimeType for encoding implies startsWith('image/')
        https://bugs.webkit.org/show_bug.cgi?id=83746

        Reviewed by Simon Hausmann.

        Canonical image mimeTypes begin with "image/", and this is tested by an ASSERT
        guard in toDataURL(): that checks the WebCore mimeType registry for image-for-
        encoding mimeType. There is no need to also test mimeType.startsWith("image/")
        since that is a given.

        No new tests. Covered by existing fast/canvas/*toDataURL* tests.

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

2012-04-11  Adam Barth  <abarth@webkit.org>

        Implement Location.ancestorOrigins
        https://bugs.webkit.org/show_bug.cgi?id=83493

        Reviewed by David Levin.

        Test: fast/dom/Window/Location/ancestor-origins.html

        This patch implements Location.ancestorOrigins(), which returns a list
        of the origins of the enclosing frames.  This API has been discussed
        both on webkit-dev (see discussion following
        https://lists.webkit.org/pipermail/webkit-dev/2012-March/020090.html)
        and on the whatwg list (see discussion following
        http://lists.whatwg.org/htdig.cgi/whatwg-whatwg.org/2012-March/035188.html).

        * page/Location.cpp:
        (WebCore::Location::ancestorOrigins):
        (WebCore):
        * page/Location.h:
        (Location):
        * page/Location.idl:

2012-04-11  Raymond Liu  <raymond.liu@intel.com>

        AudioContext createChannelSplitter() method should have optional argument for number of outputs
        https://bugs.webkit.org/show_bug.cgi?id=83648

        Reviewed by Chris Rogers.

        Check https://dvcs.w3.org/hg/audio/raw-file/tip/webaudio/specification.html for the optional argument.

        Test: webaudio/audiochannelsplitter.html

        * Modules/webaudio/AudioChannelSplitter.cpp:
        (WebCore::AudioChannelSplitter::create):
        (WebCore::AudioChannelSplitter::AudioChannelSplitter):
        (WebCore::AudioChannelSplitter::process):
        * Modules/webaudio/AudioChannelSplitter.h:
        (AudioChannelSplitter):
        * Modules/webaudio/AudioContext.cpp:
        (WebCore::AudioContext::createChannelSplitter):
        (WebCore):
        * Modules/webaudio/AudioContext.h:
        (AudioContext):
        * Modules/webaudio/AudioContext.idl:

2012-04-11  Charles Wei  <charles.wei@torchmobile.com.cn>

        [BlackBerry] Revert the changes that depend on Event changes, which is reverted already internally.
        https://bugs.webkit.org/show_bug.cgi?id=83456

        Reviewed by George Staikos.

        No new tests, just to make BlackBerry-porting to build.

        * plugins/blackberry/PluginViewBlackBerry.cpp:
        (WebCore::PluginView::handleWheelEvent):
        (WebCore::PluginView::handleTouchEvent):
        (WebCore::PluginView::handleMouseEvent):

2012-04-11  Jason Liu  <jason.liu@torchmobile.com.cn>

        [BlackBerry] There shouldn't be two or more Accept-Language in platformRequest's headerList.
        https://bugs.webkit.org/show_bug.cgi?id=83670

        FrameLoaderClientBlackBerry::dispatchWillSendRequest and NetworkManager::startJob will call
        ResourceRequest::initializePlatformRequest. Accept-Language is added two times.
        We should avoid the second adding to improve performance.

        Reviewed by Rob Buis.

        No new tests. Refactor.

        * platform/network/blackberry/ResourceRequestBlackBerry.cpp:
        (WebCore::ResourceRequest::initializePlatformRequest):

2012-04-11  Jonathan Dong  <jonathan.dong@torchmobile.com.cn>

        [BlackBerry] MMRPlayer will hang webkit thread when retrieving media metadata
        https://bugs.webkit.org/show_bug.cgi?id=80978

        Reviewed by Rob Buis.

        RIM PR: 143471
        Implemented the interface function onWaitMetadataNotified()
        which starts a timer to wait for the metadata retrieving to
        finish, and pops up a dialog to notify the user what to do
        if there still is no metadata when the timer fires.

        This patch also contributed by Max Feil <mfeil@rim.com>.
        Internally reviewed by Max Feil.

        Test: http/tests/media/video-throttled-load-metadata.html

        * platform/graphics/blackberry/MediaPlayerPrivateBlackBerry.cpp:
        (WebCore::MediaPlayerPrivate::MediaPlayerPrivate):
        (WebCore):
        (WebCore::MediaPlayerPrivate::onWaitMetadataNotified):
        (WebCore::MediaPlayerPrivate::waitMetadataTimerFired):
        * platform/graphics/blackberry/MediaPlayerPrivateBlackBerry.h:
        (MediaPlayerPrivate):

2012-04-11  Jer Noble  <jer.noble@apple.com>

        Layout Test webaudio/* is flaky
        https://bugs.webkit.org/show_bug.cgi?id=83624

        Reviewed by Chris Rogers.

        No new tests; fixes webaudio/ layout tests.

        A merge error led to an Mutex overunlock situation, which caused all future mutex trylock
        attempts to fail, but only on Windows. Remove the extraneous mutex unlock().

        * Modules/webaudio/AudioBufferSourceNode.cpp:
        (WebCore::AudioBufferSourceNode::process):

2012-04-11  Levi Weintraub  <leviw@chromium.org>

        Correct pixel snapping error in RenderBox::pixelSnappedClientWidth/Height
        https://bugs.webkit.org/show_bug.cgi?id=83621

        Reviewed by Eric Seidel.

        Though the problem wouldn't yet manifest itself since we haven't flipped the switch on sub-pixel
        layout, clientWidth and clientHeight, when pixel snapped, need to take the RenderBox's location
        into account. Previously, ClientLeft/Top were used, but these are simply the width of the borders,
        and don't include the box's sub-pixel location, which is needed to properly snap the width/height.

        No new tests. Untestable until we switch to FractionalLayoutUnits. A test case that covers this
        is in the subpixellayout branch and will land with the switch.

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::pixelSnappedClientWidth):
        (WebCore::RenderBox::pixelSnappedClientHeight):
        (WebCore::RenderBox::scrollWidth): Replacing a raw zero with ZERO_LAYOUT_UNIT.

2012-04-11  Erik Arvidsson  <arv@chromium.org>

        Add support for [ArrayClass] and use that on NodeList
        https://bugs.webkit.org/show_bug.cgi?id=81573

        Reviewed by Adam Barth.

        With this patch NodeLists now have Array.prototype on their prototype chain which allows
        methods such as forEach and map to work on NodeLists.

        http://dvcs.w3.org/hg/domcore/raw-file/tip/Overview.html#interface-nodelist

        For V8 we need to set a flag on the WrapperTypeInfo since V8 uses FunctionTemplates which
        does not allow setting the prototype to a non FunctionTemplate so the prototype is therefore
        set when the constructor is created.

        For JSC we just pass the right prototype object when creating the NodeList prototype. JSC has
        a bug (81588) that prevents toString to work as specced on Array.prototype.toString. This
        causes test failures in the tests until that has been fixed.

        Test: fast/dom/NodeList/node-list-array-class.html

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateHeader): Include ArrayPrototype.h if an ArrayClass.
        (GenerateImplementation): If ArrayClass use arrayPrototype as prototype.
        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateNamedConstructorCallback):
        (GenerateImplementation): Adds a flag to the WrapperTypeInfo.
        * bindings/scripts/IDLAttributes.txt: Adds new attribute: ArrayClass.
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::JSTestObj::createPrototype):
        * bindings/scripts/test/JS/JSTestObj.h:
        * bindings/scripts/test/TestObj.idl:
        * bindings/scripts/test/V8/V8Float64Array.cpp:
        (WebCore):
        * bindings/scripts/test/V8/V8TestActiveDOMObject.cpp:
        (WebCore):
        * bindings/scripts/test/V8/V8TestCustomNamedGetter.cpp:
        (WebCore):
        * bindings/scripts/test/V8/V8TestEventConstructor.cpp:
        (WebCore):
        * bindings/scripts/test/V8/V8TestEventTarget.cpp:
        (WebCore):
        * bindings/scripts/test/V8/V8TestInterface.cpp:
        (WebCore):
        * bindings/scripts/test/V8/V8TestMediaQueryListListener.cpp:
        (WebCore):
        * bindings/scripts/test/V8/V8TestNamedConstructor.cpp:
        (WebCore):
        * bindings/scripts/test/V8/V8TestObj.cpp:
        (WebCore):
        * bindings/scripts/test/V8/V8TestSerializedScriptValueInterface.cpp:
        (WebCore):
        * bindings/v8/V8BindingPerContextData.cpp:
        (WebCore::V8BindingPerContextData::init): Get the array prototype too.
        (WebCore::V8BindingPerContextData::createWrapperFromCacheSlowCase):
        (WebCore::V8BindingPerContextData::constructorForTypeSlowCase): If this is an ArrayClass we need to
        set the [[Prototype]].
        * bindings/v8/V8BindingPerContextData.h:
        (V8BindingPerContextData):
        * bindings/v8/V8HiddenPropertyName.h:
        (WebCore):
        * bindings/v8/WrapperTypeInfo.h:
        (WrapperTypeInfo):
        * bindings/v8/custom/V8HTMLImageElementConstructor.cpp:
        (WebCore):
        * dom/NodeList.idl:

2012-04-11  Antti Koivisto  <antti@apple.com>

        Try to fix build with XSLT disabled.

        Not reviewed.

        * dom/ProcessingInstruction.cpp:
        (WebCore::ProcessingInstruction::parseStyleSheet):

2012-04-11  Erik Arvidsson  <arv@chromium.org>

        File API does not support DOM events (like addEventListener)
        https://bugs.webkit.org/show_bug.cgi?id=83688

        Reviewed by Adam Barth.

        The IDL files where missing addEventListener, removeEventListener and dispatchEvent.

        Tests: fast/filesystem/file-writer-events.html
               fast/speech/scripted/basics.html

        * Modules/filesystem/FileWriter.idl: Add missing methods.
        * Modules/mediastream/LocalMediaStream.idl: This one gets its EventTarget from MediaStream.
        * Modules/speech/SpeechRecognition.idl: Add missing methods.

2012-04-11  Andy Estes  <aestes@apple.com>

        LayerFlushScheduler's run loop observer should have an autorelease pool.
        https://bugs.webkit.org/show_bug.cgi?id=83729

        Reviewed by Dan Bernstein.

        LayerFlushScheduler's run loop observer needs an autorelease pool.
        NSApplication creates one, but it is only drained after processing user
        input. In the case where a WebView is displaying composited content but
        not receiving user input, NSApplication's pool will accumulate a large
        number of objects autoreleased by the run loop observer. Have
        LayerFlushScheduler create an autorelease pool that is drained after
        each run loop observer callback.

        * platform/graphics/ca/mac/LayerFlushSchedulerMac.cpp:
        (WebCore::LayerFlushScheduler::runLoopObserverCallback):

2012-04-11  Antti Koivisto  <antti@apple.com>

        Split CSSStyleSheet into internal and CSSOM type
        https://bugs.webkit.org/show_bug.cgi?id=83612
        
        Reviewed by Andreas Kling.

        This will complete the separation of our style sheet data structures from CSSOM.
        
        The internal parts of CSSStyleSheet move to StyleSheetInternal. CSS parser
        and style selector will now operate on internal types. Unlike other CSSOM types
        CSSStyleSheets are still always instantiated to hold the top level author stylesheets
        (by Nodes).

        * css/CSSFontFaceSrcValue.cpp:
        (WebCore::CSSFontFaceSrcValue::addSubresourceStyleURLs):
        * css/CSSFontFaceSrcValue.h:
        (CSSFontFaceSrcValue):
        * css/CSSImportRule.cpp:
        (WebCore::StyleRuleImport::create):
        (WebCore::StyleRuleImport::StyleRuleImport):
        (WebCore::StyleRuleImport::setCSSStyleSheet):
        (WebCore::StyleRuleImport::requestStyleSheet):
        (WebCore::CSSImportRule::~CSSImportRule):
        (WebCore):
        (WebCore::CSSImportRule::styleSheet):
        * css/CSSImportRule.h:
        (WebCore):
        (StyleRuleImport):
        (WebCore::StyleRuleImport::parentStyleSheet):
        (WebCore::StyleRuleImport::styleSheet):
        (CSSImportRule):
        * css/CSSMediaRule.cpp:
        (WebCore::CSSMediaRule::insertRule):
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseSheet):
        (WebCore::CSSParser::parseRule):
        (WebCore::CSSParser::parseKeyframeRule):
        (WebCore::CSSParser::parseFontFaceValue):
        (WebCore::CSSParser::parseValue):
        (WebCore::CSSParser::parseSelector):
        (WebCore::CSSParser::parseDeclaration):
        (WebCore::CSSParser::setStyleSheet):
        (WebCore::CSSParser::parseFlowThread):
        * css/CSSParser.h:
        (WebCore):
        (CSSParser):
        * css/CSSPrimitiveValue.cpp:
        (WebCore::CSSPrimitiveValue::addSubresourceStyleURLs):
        * css/CSSPrimitiveValue.h:
        (CSSPrimitiveValue):
        * css/CSSReflectValue.cpp:
        (WebCore::CSSReflectValue::addSubresourceStyleURLs):
        * css/CSSReflectValue.h:
        (CSSReflectValue):
        * css/CSSRule.h:
        (CSSRule):
        * css/CSSStyleSelector.cpp:
        (RuleSet):
        (WebCore):
        (WebCore::CSSStyleSelector::CSSStyleSelector):
        (WebCore::CSSStyleSelector::addAuthorRulesAndCollectUserRulesFromSheets):
        (WebCore::CSSStyleSelector::determineScope):
        (WebCore::CSSStyleSelector::appendAuthorStylesheets):
        (WebCore::parseUASheet):
        (WebCore::CSSStyleSelector::collectMatchingRulesForList):
        * css/CSSStyleSelector.h:
        (CSSStyleSelector):
        
            Add a set for root CSSStyleSheet objects so that the wrappers created in ensureFullCSSOMWrapperForInspector
            stay valid.
        
        * css/CSSStyleSheet.cpp:
        (WebCore::StyleSheetInternal::StyleSheetInternal):
        (WebCore::StyleSheetInternal::~StyleSheetInternal):
        (WebCore::StyleSheetInternal::parserAppendRule):
        (WebCore::StyleSheetInternal::createChildRuleCSSOMWrapper):
        (WebCore::StyleSheetInternal::ruleCount):
        (WebCore::StyleSheetInternal::clearCharsetRule):
        (WebCore::StyleSheetInternal::clearRules):
        (WebCore::StyleSheetInternal::parserSetEncodingFromCharsetRule):
        (WebCore::StyleSheetInternal::wrapperInsertRule):
        (WebCore::StyleSheetInternal::wrapperDeleteRule):
        (WebCore::StyleSheetInternal::addNamespace):
        (WebCore::StyleSheetInternal::determineNamespace):
        (WebCore::StyleSheetInternal::parseString):
        (WebCore::StyleSheetInternal::parseStringAtLine):
        (WebCore::StyleSheetInternal::isLoading):
        (WebCore::StyleSheetInternal::checkLoaded):
        (WebCore::StyleSheetInternal::notifyLoadedSheet):
        (WebCore::StyleSheetInternal::startLoadingDynamicSheet):
        (WebCore::StyleSheetInternal::findStyleSheetOwnerNode):
        (WebCore::StyleSheetInternal::findDocument):
        (WebCore::StyleSheetInternal::setMediaQueries):
        (WebCore::StyleSheetInternal::styleSheetChanged):
        (WebCore):
        (WebCore::StyleSheetInternal::baseURL):
        (WebCore::StyleSheetInternal::completeURL):
        (WebCore::StyleSheetInternal::addSubresourceStyleURLs):
        (WebCore::StyleSheetInternal::parentStyleSheet):
        (WebCore::CSSStyleSheet::CSSStyleSheet):
        (WebCore::CSSStyleSheet::~CSSStyleSheet):
        (WebCore::CSSStyleSheet::setDisabled):
        (WebCore::CSSStyleSheet::length):
        (WebCore::CSSStyleSheet::item):
        (WebCore::CSSStyleSheet::rules):
        (WebCore::CSSStyleSheet::insertRule):
        (WebCore::CSSStyleSheet::addRule):
        (WebCore::CSSStyleSheet::cssRules):
        (WebCore::CSSStyleSheet::deleteRule):
        (WebCore::CSSStyleSheet::media):
        (WebCore::CSSStyleSheet::parentStyleSheet):
        * css/CSSStyleSheet.h:
        (WebCore):
        (WebCore::StyleSheetInternal::create):
        (WebCore::StyleSheetInternal::createInline):
        (StyleSheetInternal):
        (WebCore::StyleSheetInternal::ownerNode):
        (WebCore::StyleSheetInternal::clearOwnerNode):
        (WebCore::StyleSheetInternal::ownerRule):
        (WebCore::StyleSheetInternal::originalURL):
        (WebCore::StyleSheetInternal::title):
        (WebCore::StyleSheetInternal::setTitle):
        (WebCore::StyleSheetInternal::setFinalURL):
        (WebCore::StyleSheetInternal::finalURL):
        (CSSStyleSheet):
        (WebCore::CSSStyleSheet::create):
        (WebCore::CSSStyleSheet::removeRule):
        (WebCore::CSSStyleSheet::clearOwnerRule):
        (WebCore::CSSStyleSheet::styleSheetChanged):
        (WebCore::CSSStyleSheet::findDocument):
        (WebCore::CSSStyleSheet::internal):
        (WebCore::CSSStyleSheet::isCSSStyleSheet):
        (WebCore::CSSStyleSheet::type):
        * css/CSSValue.cpp:
        (WebCore::CSSValue::addSubresourceStyleURLs):
        * css/CSSValue.h:
        (WebCore):
        (CSSValue):
        * css/CSSValueList.cpp:
        (WebCore::CSSValueList::addSubresourceStyleURLs):
        * css/CSSValueList.h:
        (CSSValueList):
        * css/CSSValuePool.cpp:
        (WebCore::CSSValuePool::createFontFaceValue):
        * css/CSSValuePool.h:
        (WebCore):
        (CSSValuePool):
        * css/PropertySetCSSStyleDeclaration.cpp:
        (WebCore::PropertySetCSSStyleDeclaration::setCssText):
        (WebCore::PropertySetCSSStyleDeclaration::setProperty):
        (WebCore::PropertySetCSSStyleDeclaration::setPropertyInternal):
        * css/PropertySetCSSStyleDeclaration.h:
        (WebCore):
        * css/StylePropertySet.cpp:
        (WebCore::StylePropertySet::setProperty):
        (WebCore::StylePropertySet::parseDeclaration):
        (WebCore::StylePropertySet::addSubresourceStyleURLs):
        * css/StylePropertySet.h:
        (WebCore):
        (StylePropertySet):
        * css/StyleSheet.cpp:
        (WebCore):
        * css/StyleSheet.h:
        (StyleSheet):
        (WebCore::StyleSheet::media):
        (WebCore::StyleSheet::ownerRule):
        (WebCore::StyleSheet::isXSLStyleSheet):
        * css/WebKitCSSKeyframesRule.cpp:
        (WebCore::WebKitCSSKeyframesRule::insertRule):
        * dom/DOMImplementation.cpp:
        (WebCore::DOMImplementation::createCSSStyleSheet):
        * dom/Document.cpp:
        (WebCore::Document::updateBaseURL):
        (WebCore::Document::pageUserSheet):
        (WebCore::Document::pageGroupUserSheets):
        (WebCore::Document::addUserSheet):
        (WebCore::Document::elementSheet):
        (WebCore::Document::testAddedStylesheetRequiresStyleRecalc):
        (WebCore::Document::analyzeStylesheetChange):
        * dom/Document.h:
        (WebCore):
        (Document):
        (WebCore::Document::documentUserSheets):
        * dom/ElementAttributeData.cpp:
        (WebCore::ElementAttributeData::updateInlineStyleAvoidingMutation):
        * dom/ProcessingInstruction.cpp:
        (WebCore::ProcessingInstruction::setCSSStyleSheet):
        (WebCore::ProcessingInstruction::parseStyleSheet):
        * dom/StyleElement.cpp:
        (WebCore::StyleElement::createSheet):
        * dom/StyledElement.cpp:
        (WebCore::StyledElement::setInlineStyleProperty):
        (WebCore::StyledElement::addSubresourceAttributeURLs):
        (WebCore):
        (WebCore::StyledElement::addPropertyToAttributeStyle):
        * dom/StyledElement.h:
        (WebCore):
        * html/HTMLFontElement.cpp:
        (WebCore::HTMLFontElement::collectStyleForAttribute):
        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::parseAttribute):
        (WebCore::HTMLLinkElement::setCSSStyleSheet):
        (WebCore::HTMLLinkElement::styleSheetIsLoading):
        (WebCore::HTMLLinkElement::addSubresourceAttributeURLs):
        * html/HTMLStyleElement.cpp:
        (WebCore::HTMLStyleElement::parseAttribute):
        (WebCore::HTMLStyleElement::addSubresourceAttributeURLs):
        * inspector/InspectorStyleSheet.cpp:
        (WebCore::fillMediaListChain):
        (WebCore::InspectorStyle::setPropertyText):
        (WebCore::InspectorStyleSheet::styleSheetURL):
        (WebCore::InspectorStyleSheet::reparseStyleSheet):
        (WebCore::InspectorStyleSheet::ensureSourceData):
        (WebCore::InspectorStyleSheetForInlineStyle::getStyleAttributeRanges):
        * page/PageSerializer.cpp:
        (WebCore::PageSerializer::serializeCSSStyleSheet):
        * svg/SVGStyleElement.cpp:
        (WebCore::SVGStyleElement::parseAttribute):
        * xml/XSLStyleSheet.h:
        (XSLStyleSheet):
        (WebCore::XSLStyleSheet::finalURL):
        * xml/XSLStyleSheetLibxslt.cpp:
        (WebCore::XSLStyleSheet::XSLStyleSheet):
        (WebCore::XSLStyleSheet::isLoading):

2012-04-11  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r113912.
        http://trac.webkit.org/changeset/113912
        https://bugs.webkit.org/show_bug.cgi?id=83727

        broke atsui-spacing-features.html on windows (Requested by
        simonjam on #webkit).

        * platform/graphics/chromium/UniscribeHelper.cpp:
        (WebCore::UniscribeHelper::justify):

2012-04-11  Alex Nicolaou  <anicolao@chromium.org>

        [chromium] When rendering goes idle, do not count that time against frame rate
        https://bugs.webkit.org/show_bug.cgi?id=73454

        The FPS counter had a few issues with its reporting. The first
        3 swapbuffers are non-blocking and create FPS rates that are
        unrealistically high, throwing off the moving averages and
        introducing false spikes into the FPS graph. There was also no
        way to monitor the smoothness of the animation, or to focus in
        on a particular animation or transition.

        This patch updates the FPS counter code so that bad data points
        are trimmed and not graphed; so that the graph itself is taller
        and more legible; so that there is a clear boundary between 40FPS
        and better; and to keep statistics on frame rate between
        pauses in the activity in the UI so that you can trigger a
        transition and read off the average and standard deviation for
        that transition to judge it smooth enough or not.


        Reviewed by James Robinson.

        HUD is not testable in webkit.

        * platform/graphics/chromium/cc/CCHeadsUpDisplay.cpp:
        (WebCore::CCHeadsUpDisplay::CCHeadsUpDisplay):
        (WebCore::CCHeadsUpDisplay::onFrameBegin):
        (WebCore::CCHeadsUpDisplay::drawHudContents):
        (WebCore::CCHeadsUpDisplay::drawFPSCounter):
        * platform/graphics/chromium/cc/CCHeadsUpDisplay.h:

2012-04-10  Zhenyao Mo  <zmo@google.com>

        WebGLRenderingContext should defer caching program info
        https://bugs.webkit.org/show_bug.cgi?id=83513

        Reviewed by Kenneth Russell.

        * html/canvas/WebGLProgram.cpp:
        (WebCore::WebGLProgram::WebGLProgram):
        (WebCore::WebGLProgram::numActiveAttribLocations): call cacheInfoIfNeeded();
        (WebCore::WebGLProgram::getActiveAttribLocation): Ditto.
        (WebCore::WebGLProgram::isUsingVertexAttrib0): Ditto.
        (WebCore::WebGLProgram::getLinkStatus): Ditto.
        (WebCore):
        (WebCore::WebGLProgram::cacheActiveAttribLocations):
        (WebCore::WebGLProgram::cacheInfoIfNeeded): Cache link status, active attire locations, etc if needed.
        (WebCore::WebGLProgram::increaseLinkCount): also invalidate cached info.
        * html/canvas/WebGLProgram.h:
        (WebGLProgram):
        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore):
        (WebCore::WebGLRenderingContext::linkProgram): Do not cache program info immediately.

2012-04-11  David Dorwin  <ddorwin@chromium.org>

        Add keySystem attribute to canPlayType() for Encrypted Media Extensions
        https://bugs.webkit.org/show_bug.cgi?id=82973

        Reviewed by Adam Barth.

        The new attribute is behind the ENABLE(ENCRYPTED_MEDIA) feature define.
        Implementation is based on v0.1 of the draft proposal at
        http://dvcs.w3.org/hg/html-media/raw-file/tip/encrypted-media/encrypted-media.html#extensions.

        Tests: media/encrypted-media/encrypted-media-can-play-type-webm.html
               media/encrypted-media/encrypted-media-can-play-type.html

        * dom/DOMImplementation.cpp:
        (WebCore::DOMImplementation::createDocument):
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::canPlayType):
        (WebCore::HTMLMediaElement::selectMediaResource):
        (WebCore::HTMLMediaElement::loadNextSourceChild):
        (WebCore::HTMLMediaElement::loadResource):
        (WebCore::HTMLMediaElement::havePotentialSourceChild):
        (WebCore::HTMLMediaElement::selectNextSourceChild):
        (WebCore::HTMLMediaElement::getPluginProxyParams):
        * html/HTMLMediaElement.h:
        (HTMLMediaElement):
        * html/HTMLMediaElement.idl:
        * platform/graphics/MediaPlayer.cpp:
        (WebCore):
        (WebCore::bestMediaEngineForTypeAndCodecs):
        (WebCore::MediaPlayer::load):
        (WebCore::MediaPlayer::loadWithNextMediaEngine):
        (WebCore::MediaPlayer::supportsType):
        (WebCore::MediaPlayer::networkStateChanged):
        * platform/graphics/MediaPlayer.h:
        (MediaPlayer):
        (WebCore):

2012-04-11  Xiaomei Ji  <xji@chromium.org>

        [chromium] wrong justification for arabic/persian page in cr-win.
        https://bugs.webkit.org/show_bug.cgi?id=83227

        Reviewed by Kent Tamura.

        GDI used to do Kashida justification.
        After switch to Skia, we need to use space padding to justify the text
        (assume Skia can not do Kashida justification -- stretching words).

        Test: fast/text/international/arabic-justify.html

        * platform/graphics/chromium/UniscribeHelper.cpp:
        (WebCore::UniscribeHelper::justify):

2012-03-15  Martin Robinson  <mrobinson@igalia.com>

        [CAIRO] Make GLContextGLX a subclass of GLContext
        https://bugs.webkit.org/show_bug.cgi?id=81285

        Reviewed by Gustavo Noronha Silva.

        No new tests. This should not change behavior.

        * GNUmakefile.list.am: Add new GLContextGLX files.
        * platform/graphics/cairo/GLContext.cpp: Added. Composed of the
        EGL/GLX independent portions of GLContext. Made the current context
        a static variable so we can keep getting the current context platform-
        -independent.
        * platform/graphics/cairo/GLContext.h: Make this class an abstract
        class. GLContextGLX is a concrete implementation.
        * platform/graphics/cairo/GraphicsContext3DPrivate.cpp: Updated to reflect
        slightly different calling conventions to create a sharing context.
        * platform/graphics/glx/GLContextGLX.cpp: Updated to reflect
        that this code is in a subclass now.
        * platform/graphics/glx/GLContextGLX.h: Copied from Source/WebCore/platform/graphics/cairo/GLContext.h.
        * platform/graphics/gtk/GLContextGtk.cpp:
        (WebCore::GLContext::getContextForWidget): Updated to respect the new
        USE(GLX) flag.

2012-04-11  Rob Buis  <rbuis@rim.com>

        [BlackBerry] Upstream BlackBerry change to PatternSkia.cpp
        https://bugs.webkit.org/show_bug.cgi?id=83361

        Reviewed by Antonio Gomes.

        Upstream a cleaned up version.

        * platform/graphics/skia/PatternSkia.cpp:
        (WebCore::Pattern::platformDestroy):
        (WebCore::Pattern::platformPattern):

2012-04-10  James Robinson  <jamesr@chromium.org>

        [chromium] Add OVERRIDE annotations for cc layer types
        https://bugs.webkit.org/show_bug.cgi?id=83658

        Reviewed by Daniel Bates.

        This adds OVERRIDE annotations to overrides of functions on these classes:
        - CCLayerImpl
        - LayerChromium
        - TiledLayerChromium

        * platform/graphics/chromium/Canvas2DLayerChromium.h:
        (Canvas2DLayerChromium):
        * platform/graphics/chromium/CanvasLayerChromium.h:
        (CanvasLayerChromium):
        * platform/graphics/chromium/ContentLayerChromium.h:
        (ContentLayerChromium):
        * platform/graphics/chromium/ImageLayerChromium.h:
        (ImageLayerChromium):
        * platform/graphics/chromium/PluginLayerChromium.h:
        (PluginLayerChromium):
        * platform/graphics/chromium/TiledLayerChromium.h:
        (TiledLayerChromium):
        * platform/graphics/chromium/VideoLayerChromium.h:
        (VideoLayerChromium):
        * platform/graphics/chromium/WebGLLayerChromium.h:
        (WebGLLayerChromium):
        * platform/graphics/chromium/cc/CCScrollbarLayerImpl.h:
        (CCScrollbarLayerImpl):
        * platform/graphics/chromium/cc/CCSolidColorLayerImpl.h:
        (CCSolidColorLayerImpl):
        * platform/graphics/chromium/cc/CCTextureLayerImpl.h:
        (CCTextureLayerImpl):
        * platform/graphics/chromium/cc/CCTiledLayerImpl.h:
        (CCTiledLayerImpl):
        * platform/graphics/chromium/cc/CCVideoLayerImpl.h:
        (CCVideoLayerImpl):

2012-04-11  Alexey Proskuryakov  <ap@apple.com>

        [Mac] lang, xml:lang, content-language ignored when choosing fonts
        https://bugs.webkit.org/show_bug.cgi?id=10874
        <rdar://problem/3220202>

        Reviewed by Dan Bernstein.

        Adding a default font table for Mac port. Clients can still override these if they want to,
        but knowing which fonts to use is more about the platform than about the client.

        Tests: platform/mac/fonts/han-disunification.html

        * DerivedSources.make:
        * WebCore.xcodeproj/project.pbxproj:
        * Resources/DefaultFonts.plist.in: Added.
        Added SettingsMac.mm. Added preprocessed property list with default fonts.

        * page/Settings.cpp:
        (WebCore::setGenericFontFamilyMap): Don't notify the page if we don't have one yet.
        (WebCore::Settings::Settings): Assign to m_page after calling initializeDefaultFontFamilies,
        so that we won't try to call page->setNeedsRecalcStyleInAllFrames() in a half-initialized
        Page that's creating settings.
        (WebCore::Settings::initializeDefaultFontFamilies): Dummy imlplementation for ports that
        rely on client to set defaults.

        * page/Settings.h: Added initializeDefaultFontFamilies().

        * page/mac/SettingsMac.mm: Added.
        (WebCore::defaultFontFamilyDictionary):
        (WebCore::Settings::initializeDefaultFontFamilies):
        Load defaults from a plist file inside WebCore framework.

2012-04-11  Antti Koivisto  <antti@apple.com>

        Crash in CSSStyleSheet::deleteRule
        https://bugs.webkit.org/show_bug.cgi?id=83708

        Reviewed by Andreas Kling.
        
        Andreas spotted that the wrapper needs to be null checked before calling setParentStyleSheet(0).

        Test: fast/css/delete-rule-crash.html

        * css/CSSStyleSheet.cpp:
        (WebCore::CSSStyleSheet::deleteRule):

2012-04-11  Adam Klein  <adamk@chromium.org>

        [MutationObservers] Setting an attributeFilter should filter out all namespaced attribute mutations
        https://bugs.webkit.org/show_bug.cgi?id=83706

        Reviewed by Ryosuke Niwa.

        The patch amounts to plumbing QualifiedName all the way down to shouldReceiveMutationFrom
        as it now needs to know about namespaceURI as well as localName.

        This change is coming soon to the DOM4 spec, see
        https://www.w3.org/Bugs/Public/show_bug.cgi?id=16563 for more discussion.

        * dom/MutationObserverInterestGroup.cpp:
        (WebCore::MutationObserverInterestGroup::createIfNeeded):
        * dom/MutationObserverInterestGroup.h:
        (WebCore::MutationObserverInterestGroup::createForChildListMutation):
        (WebCore::MutationObserverInterestGroup::createForCharacterDataMutation):
        (WebCore::MutationObserverInterestGroup::createForAttributesMutation):
        (MutationObserverInterestGroup):
        * dom/MutationObserverRegistration.cpp:
        (WebCore::MutationObserverRegistration::shouldReceiveMutationFrom):
        * dom/MutationObserverRegistration.h:
        (WebCore):
        (MutationObserverRegistration):
        * dom/Node.cpp:
        (WebCore::Node::collectMatchingObserversForMutation):
        (WebCore::Node::getRegisteredMutationObserversOfType):
        * dom/Node.h:
        (Node):

2012-04-11  Wei James  <james.wei@intel.com>

        add stereo source support in EqualPowerPanner
        https://bugs.webkit.org/show_bug.cgi?id=81092

        Reviewed by Chris Rogers.

        Test: webaudio/panner-equalpower-stereo.html

        * platform/audio/EqualPowerPanner.cpp:
        (WebCore::EqualPowerPanner::pan):

2012-04-11  Erik Arvidsson  <arv@chromium.org>

        StyleElement ownerNode is not cleared correctly
        https://bugs.webkit.org/show_bug.cgi?id=83696

        Reviewed by Antti Koivisto.

        When the css text changes in such a way that we remove the sheet of a style element or a link[rel=stylesheet]
        element we need to ensure that the ownerNode of the sheet is cleared. If we don't do this and there is a
        wrapper for the sheet the sheet is kept alive but the ownerNode of the sheet may point to a deleted node.

        Tests: fast/dom/StyleSheet/detached-sheet-owner-node-link.html
               fast/dom/StyleSheet/detached-sheet-owner-node.html

        * dom/StyleElement.cpp:
        (WebCore::StyleElement::removedFromDocument):
        (WebCore::StyleElement::clearSheet):
        (WebCore):
        (WebCore::StyleElement::createSheet):
        * dom/StyleElement.h:
        (StyleElement):
        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::process):
        (WebCore::HTMLLinkElement::clearSheet):
        (WebCore):
        * html/HTMLLinkElement.h:
        (HTMLLinkElement):

2012-04-11  David Hyatt  <hyatt@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=83614
        <rdar://problem/11177351>
        
        REGRESSION: Table on wikipedia overlaps float on right hand side.
        
        Revise how auto margins are resolved so that for objects that avoid floats, the available line
        width is always used instead of the overall containing block width. computeLogicalWidth now
        always properly computes inline margins (based off the object's current logicalTop() position)
        and so the code in computeStartPositionDeltaForChildAvoidingFloats that recomputes inline
        direction margins can now be removed.
        
        Reviewed by Dan Bernstein.

        Added new test in fast/block/float.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::computeStartPositionDeltaForChildAvoidingFloats):
        (WebCore::RenderBlock::determineLogicalLeftPositionForChild):
        * rendering/RenderBlock.h:
        (RenderBlock):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::containingBlockAvailableLineWidthInRegion):
        (WebCore):
        (WebCore::RenderBox::computeLogicalWidthInRegion):
        (WebCore::RenderBox::renderBoxRegionInfo):
        (WebCore::RenderBox::shrinkToAvoidFloats):
        * rendering/RenderBox.h:
        (RenderBox):
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::computeLogicalWidth):

2012-04-11  Adrienne Walker  <enne@google.com>

        Fix regression where a clip style change did not update layer sizes
        https://bugs.webkit.org/show_bug.cgi?id=82990

        Reviewed by Simon Fraser.

        After r111456, the size of composited layers also used clip, whereas
        it previously had only used overflow. Because of this, when clip
        changes on a render layer, it needs to recalculate its layer tree.

        Test: compositing/clip-change.html

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::styleChanged):

2012-04-11  Antti Koivisto  <antti@apple.com>

        V8 bindings are polluting WebCore namespace with overly generic FooInternal namespaces
        https://bugs.webkit.org/show_bug.cgi?id=83699

        Reviewed by Adam Barth.

        Call them FooV8Internal instead.

        * bindings/scripts/CodeGeneratorV8.pm:
        (GetFunctionTemplateCallbackName):
        (GenerateSingleBatchedAttribute):
        (GenerateImplementation):

2012-04-11  James Robinson  <jamesr@chromium.org>

        [chromium] Add OVERRIDE annotations for cc animation-related interfaces
        https://bugs.webkit.org/show_bug.cgi?id=83650

        Reviewed by Daniel Bates.

        This adds OVERRIDE annotations to the implementations of the following interfaces:
        - CCAnimationCurve
        - CCFloatAnimationCurve
        - CCLayerAnimationControllerClient
        - CCTransformAnimationCurve

        * platform/graphics/chromium/LayerChromium.h:
        * platform/graphics/chromium/cc/CCTimingFunction.h:
        * platform/graphics/chromium/cc/CCKeyframedAnimationCurve.h:
        (CCKeyframedFloatAnimationCurve):
        (CCKeyframedTransformAnimationCurve):
        * platform/graphics/chromium/cc/CCLayerImpl.h:

2012-04-11  Philip Rogers  <pdr@google.com>

        Fix bug where stroke's bounding box was clipped
        https://bugs.webkit.org/show_bug.cgi?id=83651

        Reviewed by Dirk Schulze.

        This change contains two fixes for one bug:
        1) FloatRect::contains contained a nasty mistake where
           maxy() < y() was compared instead of maxy() < point.y().
        2) RenderSVGShape::strokeContains was depending on its internal
           m_strokeAndMarkerBoundingBox instead of calling the virtual
           method strokeBoundingBox(). This change switches to using
           strokeBoundingBox().

        Test: svg/hittest/svg-ellipse-rect-stroke.xhtml

        * platform/graphics/FloatRect.cpp:
        (WebCore::FloatRect::contains):
        * rendering/svg/RenderSVGShape.cpp:
        (WebCore::RenderSVGShape::strokeContains):

2012-04-11  Kentaro Hara  <haraken@chromium.org>

        Enable the [Supplemental] IDL on BlackBerry
        https://bugs.webkit.org/show_bug.cgi?id=75413

        Reviewed by Rob Buis.

        This patch enables the [Supplemental] IDL on BlackBerry by changing the build
        flow of BlackBerry as follows.

        - Previous build flow:
            foreach $idl (all IDL files) {
                generate-bindings.pl depends on $idl;
                generate-bindings.pl reads $idl;
                generate-bindings.pl generates .h and .cpp files for $idl;
            }

        - New build flow (See the discussions in bug 72138 for more details):
            preprocess-idls.pl depends on all IDL files;
            preprocess-idls.pl reads all IDL files;
            preprocess-idls.pl resolves the dependency of [Supplemental=XXXX];
            preprocess-idls.pl outputs supplemental_dependency.tmp;
            foreach $idl (all IDL files) {
                generate-bindings.pl depends on $idl and supplemental_dependency.tmp;
                generate-bindings.pl reads $idl;
                generate-bindings.pl reads supplemental_dependency.tmp;
                generate-bindings.pl generates .h and .cpp files for $idl,
                    including all attributes in the IDL files that are implementing $idl;
            }

        Tests: Confirm that build succeeds.
               http/tests/websocket/tests/*

        * PlatformBlackBerry.cmake: This change is similar to the change we have done for
        UseJSC.cmake and UseV8.cmake (bug 75345).

2012-04-11  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r113872.
        http://trac.webkit.org/changeset/113872
        https://bugs.webkit.org/show_bug.cgi?id=83703

        broke chromium win/mac builds (Requested by simonjam on
        #webkit).

        * platform/graphics/chromium/cc/CCHeadsUpDisplay.cpp:
        (WebCore::CCHeadsUpDisplay::CCHeadsUpDisplay):
        (WebCore::CCHeadsUpDisplay::initializeFonts):
        (WebCore::CCHeadsUpDisplay::onFrameBegin):
        (WebCore::CCHeadsUpDisplay::drawHudContents):
        (WebCore::CCHeadsUpDisplay::drawFPSCounter):
        (WebCore::CCHeadsUpDisplay::drawFPSCounterText):
        * platform/graphics/chromium/cc/CCHeadsUpDisplay.h:
        (CCHeadsUpDisplay):

2012-04-11  Aaron Colwell  <acolwell@chromium.org>

        Remove webkit prefix from Media Source runtime feature name.
        https://bugs.webkit.org/show_bug.cgi?id=83633

        Reviewed by Adam Barth.

        * bindings/generic/RuntimeEnabledFeatures.h:
        (WebCore::RuntimeEnabledFeatures::mediaSourceEnabled):
        (WebCore::RuntimeEnabledFeatures::setMediaSourceEnabled):
        * html/HTMLMediaElement.idl:

2012-04-11  No'am Rosenthal  <noam.rosenthal@nokia.com>

        Single ShareableBitmap revision blacks out WebView on Harmattan
        https://bugs.webkit.org/show_bug.cgi?id=83631

        When swizzling is not supported in the driver, we need to initialize the texture as RGBA,
        and make sure that the manual swizzling only modifies the sub-image.

        Rubber stamped by Kenneth Rohde Christiansen.

        Covered by existing tests.

        * platform/graphics/texmap/TextureMapperGL.cpp:
        (WebCore::swizzleBGRAToRGBA):
        (WebCore::BitmapTextureGL::didReset):
        (WebCore):
        (WebCore::BitmapTextureGL::updateContents):

2012-04-11  Alex Nicolaou  <anicolao@chromium.org>

        [chromium] When rendering goes idle, do not count that time against frame rate
        https://bugs.webkit.org/show_bug.cgi?id=73454

        The FPS counter had a few issues with its reporting. The first
        3 swapbuffers are non-blocking and create FPS rates that are
        unrealistically high, throwing off the moving averages and
        introducing false spikes into the FPS graph. There was also no
        way to monitor the smoothness of the animation, or to focus in
        on a particular animation or transition.

        This patch updates the FPS counter code so that bad data points
        are trimmed and not graphed; so that the graph itself is taller
        and more legible; so that there is a clear boundary between 40FPS
        and better; and to keep statistics on frame rate between
        pauses in the activity in the UI so that you can trigger a
        transition and read off the average and standard deviation for
        that transition to judge it smooth enough or not.


        Reviewed by James Robinson.

        HUD is not testable in webkit.

        * platform/graphics/chromium/cc/CCHeadsUpDisplay.cpp:
        (WebCore::CCHeadsUpDisplay::CCHeadsUpDisplay):
        (WebCore::CCHeadsUpDisplay::onFrameBegin):
        (WebCore::CCHeadsUpDisplay::drawHudContents):
        (WebCore::CCHeadsUpDisplay::drawFPSCounter):
        * platform/graphics/chromium/cc/CCHeadsUpDisplay.h:

2012-04-11  Adrienne Walker  <enne@google.com>

        [chromium] Draw missing layer tile checkerboards as checkerboards
        https://bugs.webkit.org/show_bug.cgi?id=83241

        Reviewed by James Robinson.

        For non-Android platforms, draw missing tile checkerboards as actual
        checkerboards. Use a shader to do this so that no texture uploads are
        needed. This only happens on the non-composited content host to avoid
        having unexpected (or transformed and aliased) checkerboards on other
        content layers.

        * WebCore.gypi:
        * platform/graphics/chromium/LayerChromium.cpp:
        (WebCore::LayerChromium::LayerChromium):
        (WebCore::LayerChromium::pushPropertiesTo):
        * platform/graphics/chromium/LayerChromium.h:
        (WebCore::LayerChromium::setDrawCheckerboardForMissingTiles):
        (WebCore::LayerChromium::drawCheckerboardForMissingTiles):
        (LayerChromium):
        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::drawQuad):
        (WebCore::LayerRendererChromium::drawCheckerboardQuad):
        (WebCore):
        (WebCore::LayerRendererChromium::checkerboardProgram):
        (WebCore::LayerRendererChromium::cleanupSharedObjects):
        * platform/graphics/chromium/LayerRendererChromium.h:
        (LayerRendererChromium):
        * platform/graphics/chromium/ShaderChromium.cpp:
        (WebCore::FragmentShaderCheckerboard::FragmentShaderCheckerboard):
        (WebCore):
        (WebCore::FragmentShaderCheckerboard::init):
        (WebCore::FragmentShaderCheckerboard::getShaderString):
        * platform/graphics/chromium/ShaderChromium.h:
        (FragmentShaderCheckerboard):
        (WebCore::FragmentShaderCheckerboard::alphaLocation):
        (WebCore::FragmentShaderCheckerboard::texTransformLocation):
        (WebCore::FragmentShaderCheckerboard::frequencyLocation):
        (WebCore):
        * platform/graphics/chromium/cc/CCCheckerboardDrawQuad.cpp: Copied from Source/WebCore/platform/graphics/chromium/cc/CCSolidColorLayerImpl.h.
        (WebCore):
        (WebCore::CCCheckerboardDrawQuad::create):
        (WebCore::CCCheckerboardDrawQuad::CCCheckerboardDrawQuad):
        * platform/graphics/chromium/cc/CCCheckerboardDrawQuad.h: Copied from Source/WebCore/platform/graphics/chromium/cc/CCSolidColorLayerImpl.h.
        (WebCore):
        (CCCheckerboardDrawQuad):
        * platform/graphics/chromium/cc/CCDrawQuad.cpp:
        (WebCore::CCDrawQuad::toCheckerboardDrawQuad):
        (WebCore):
        * platform/graphics/chromium/cc/CCDrawQuad.h:
        (WebCore):
        (CCDrawQuad):
        * platform/graphics/chromium/cc/CCLayerImpl.cpp:
        (WebCore::CCLayerImpl::CCLayerImpl):
        * platform/graphics/chromium/cc/CCLayerImpl.h:
        (CCLayerImpl):
        (WebCore::CCLayerImpl::setDrawCheckerboardForMissingTiles):
        (WebCore::CCLayerImpl::drawCheckerboardForMissingTiles):
        * platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:
        (WebCore::CCLayerTreeHostImpl::calculateRenderPasses):
        * platform/graphics/chromium/cc/CCRenderPass.cpp:
        (WebCore::CCRenderPass::appendQuadsForLayer):
        * platform/graphics/chromium/cc/CCRenderPass.h:
        (CCRenderPass):
        * platform/graphics/chromium/cc/CCScrollbarLayerImpl.h:
        (CCScrollbarLayerImpl):
        * platform/graphics/chromium/cc/CCSolidColorLayerImpl.h:
        (CCSolidColorLayerImpl):
        * platform/graphics/chromium/cc/CCTextureLayerImpl.h:
        (CCTextureLayerImpl):
        * platform/graphics/chromium/cc/CCTiledLayerImpl.cpp:
        (WebCore::CCTiledLayerImpl::appendQuads):
        * platform/graphics/chromium/cc/CCTiledLayerImpl.h:
        (CCTiledLayerImpl):
        * platform/graphics/chromium/cc/CCVideoLayerImpl.h:
        (CCVideoLayerImpl):

2012-04-11  Joe Mason  <jmason@rim.com>

        [BlackBerry] Update to the thread-safe GuardedPointer API
        https://bugs.webkit.org/show_bug.cgi?id=83603

        Reviewed by Rob Buis.

        RIM PR: 134894
        Make the destructors of all objects inheriting GuardedPointerBase protected or
        private, and delete them using BlackBerry::Platform::deleteGuardedObject.
        Access all GuardedPointers through GuardedPointerLocker. Use GuardedPointerDeleter
        to delete LayerCompositingThread to avoid a deadlock.

        No new tests, refactor.

        Reviewed internally by Yong Li and George Staikos.

        * platform/blackberry/CookieDatabaseBackingStore/CookieDatabaseBackingStore.cpp:
        (WebCore::CookieDatabaseBackingStore::~CookieDatabaseBackingStore):
        * platform/blackberry/CookieManager.h:
        * platform/graphics/blackberry/LayerCompositingThread.cpp:
        * platform/graphics/blackberry/LayerCompositingThread.h:
        (LayerCompositingThread):
        (WTF::::deref):
        * platform/graphics/blackberry/MediaPlayerPrivateBlackBerry.cpp:
        (WebCore::MediaPlayerPrivate::~MediaPlayerPrivate):

2012-04-11  Andras Becsi  <andras.becsi@nokia.com>

        [Qt] Fix the build on OpenGL ES2 platforms

        Unreviewed build fix.

        No new tests needed.

        * platform/graphics/texmap/TextureMapperGL.cpp:
        (WebCore::BitmapTextureGL::updateContents):
        Fix typo in TEXMAP_OPENGL_ES_2 define.

2012-04-11  Ami Fischman  <fischman@chromium.org>

        Remove unused WebVideoFrame::Format values
        https://bugs.webkit.org/show_bug.cgi?id=83625

        Reviewed by Kenneth Russell.

        Covered by existing tests.

        * platform/graphics/chromium/VideoFrameChromium.h:
        * platform/graphics/chromium/cc/CCVideoLayerImpl.cpp:
        (WebCore::convertVFCFormatToGC3DFormat):

2012-04-11  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: extracting NetworkRequest from Resource (step 1)
        https://bugs.webkit.org/show_bug.cgi?id=83684

        Reviewed by Yury Semikhatsky.

        Meta bug: https://bugs.webkit.org/show_bug.cgi?id=61363.
        In this step, NetworkRequest is introduced. It temporarily inherits from
        the Resource, but all the call sites are now referring to it as to request.

        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * inspector/compile-front-end.py:
        * inspector/front-end/ApplicationCacheItemsView.js:
        (WebInspector.ApplicationCacheItemsView.prototype._updateCallback):
        * inspector/front-end/AuditLauncherView.js:
        (WebInspector.AuditLauncherView):
        (WebInspector.AuditLauncherView.prototype._onRequestStarted):
        (WebInspector.AuditLauncherView.prototype._onRequestFinished):
        * inspector/front-end/AuditRules.js:
        (WebInspector.AuditRules.getDomainToResourcesMap):
        (WebInspector.AuditRules.GzipRule.prototype.doRun):
        (WebInspector.AuditRules.GzipRule.prototype._isCompressed):
        (WebInspector.AuditRules.GzipRule.prototype._shouldCompress):
        (WebInspector.AuditRules.CombineExternalResourcesRule.prototype.doRun):
        (WebInspector.AuditRules.MinimizeDnsLookupsRule.prototype.doRun):
        (WebInspector.AuditRules.ParallelizeDownloadRule.prototype.doRun):
        (WebInspector.AuditRules.UnusedCssRule.prototype.doRun.evalCallback.selectorsCallback):
        (WebInspector.AuditRules.CacheControlRule.prototype.doRun):
        (WebInspector.AuditRules.CacheControlRule.prototype.handleNonCacheableResources):
        (WebInspector.AuditRules.CacheControlRule.prototype._cacheableAndNonCacheableResources):
        (WebInspector.AuditRules.CacheControlRule.prototype.execCheck):
        (WebInspector.AuditRules.CacheControlRule.prototype.freshnessLifetimeGreaterThan):
        (WebInspector.AuditRules.CacheControlRule.prototype.responseHeader):
        (WebInspector.AuditRules.CacheControlRule.prototype.hasResponseHeader):
        (WebInspector.AuditRules.CacheControlRule.prototype.isCompressible):
        (WebInspector.AuditRules.CacheControlRule.prototype.isPubliclyCacheable):
        (WebInspector.AuditRules.CacheControlRule.prototype.responseHeaderMatch):
        (WebInspector.AuditRules.CacheControlRule.prototype.hasExplicitExpiration):
        (WebInspector.AuditRules.CacheControlRule.prototype._isExplicitlyNonCacheable):
        (WebInspector.AuditRules.CacheControlRule.prototype.isCacheableResource):
        (WebInspector.AuditRules.BrowserCacheControlRule.prototype.handleNonCacheableResources):
        (WebInspector.AuditRules.BrowserCacheControlRule.prototype.runChecks):
        (WebInspector.AuditRules.BrowserCacheControlRule.prototype._missingExpirationCheck):
        (WebInspector.AuditRules.BrowserCacheControlRule.prototype._varyCheck):
        (WebInspector.AuditRules.BrowserCacheControlRule.prototype._oneMonthExpirationCheck):
        (WebInspector.AuditRules.BrowserCacheControlRule.prototype._oneYearExpirationCheck):
        (WebInspector.AuditRules.ProxyCacheControlRule.prototype.runChecks):
        (WebInspector.AuditRules.ProxyCacheControlRule.prototype._questionMarkCheck):
        (WebInspector.AuditRules.ProxyCacheControlRule.prototype._publicCachingCheck):
        (WebInspector.AuditRules.ProxyCacheControlRule.prototype._setCookieCacheableCheck):
        (WebInspector.AuditRules.CookieRuleBase.prototype.doRun.resultCallback):
        (WebInspector.AuditRules.CookieRuleBase.prototype.doRun):
        (WebInspector.AuditRules.CookieRuleBase.prototype.mapResourceCookies):
        (WebInspector.AuditRules.CookieRuleBase.prototype._callbackForResourceCookiePairs):
        (WebInspector.AuditRules.CookieSizeRule.prototype.processCookies):
        (WebInspector.AuditRules.StaticCookielessRule.prototype.processCookies):
        (WebInspector.AuditRules.StaticCookielessRule.prototype._collectorCallback):
        * inspector/front-end/AuditsPanel.js:
        (WebInspector.AuditsPanel.prototype._executeAudit):
        (WebInspector.AuditCategory.prototype.run):
        (WebInspector.AuditRule.prototype.run):
        (WebInspector.AuditRule.prototype.doRun):
        * inspector/front-end/ConsoleMessage.js:
        * inspector/front-end/ConsoleModel.js:
        (WebInspector.ConsoleDispatcher.prototype.messageAdded):
        * inspector/front-end/ContentProviders.js:
        (WebInspector.ResourceContentProvider):
        (WebInspector.ResourceContentProvider.prototype.requestContent):
        (WebInspector.ResourceContentProvider.prototype.searchInContent):
        * inspector/front-end/DebuggerPresentationModel.js:
        * inspector/front-end/ExtensionServer.js:
        (WebInspector.ExtensionServer.prototype._onGetHAR):
        (WebInspector.ExtensionServer.prototype._notifyRequestFinished):
        * inspector/front-end/HAREntry.js:
        (WebInspector.HAREntry):
        (WebInspector.HAREntry.prototype.build):
        (WebInspector.HAREntry.prototype._buildRequest):
        (WebInspector.HAREntry.prototype._buildResponse):
        (WebInspector.HAREntry.prototype._buildContent):
        (WebInspector.HAREntry.prototype._buildTimings):
        (WebInspector.HAREntry.prototype._buildPostData):
        (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):
        (WebInspector.HARLog.prototype.build):
        (WebInspector.HARLog.prototype._buildPages):
        (WebInspector.HARLog.prototype._convertResource):
        * inspector/front-end/NetworkItemView.js:
        (WebInspector.NetworkItemView):
        * inspector/front-end/NetworkLog.js:
        (WebInspector.NetworkLog):
        (WebInspector.NetworkLog.prototype.get requests):
        (WebInspector.NetworkLog.prototype.pageLoadForRequest):
        (WebInspector.NetworkLog.prototype._onMainFrameNavigated):
        (WebInspector.NetworkLog.prototype._onRequestStarted):
        (WebInspector.NetworkLog.prototype._onLoad):
        (WebInspector.PageLoad):
        * inspector/front-end/NetworkManager.js:
        (WebInspector.NetworkManager.get this):
        (WebInspector.NetworkManager.get NetworkAgent):
        (WebInspector.NetworkManager):
        (WebInspector.NetworkManager.prototype.inflightRequestForURL):
        (WebInspector.NetworkDispatcher):
        (WebInspector.NetworkDispatcher.prototype._updateNetworkRequestWithRequest):
        (WebInspector.NetworkDispatcher.prototype._updateNetworkRequestWithResponse):
        (WebInspector.NetworkDispatcher.prototype._mimeTypeIsConsistentWithType):
        (WebInspector.NetworkDispatcher.prototype._updateNetworkRequestWithCachedResource):
        (WebInspector.NetworkDispatcher.prototype.requestWillBeSent):
        (WebInspector.NetworkDispatcher.prototype.requestServedFromCache):
        (WebInspector.NetworkDispatcher.prototype.responseReceived):
        (WebInspector.NetworkDispatcher.prototype.dataReceived):
        (WebInspector.NetworkDispatcher.prototype.loadingFinished):
        (WebInspector.NetworkDispatcher.prototype.loadingFailed):
        (WebInspector.NetworkDispatcher.prototype.requestServedFromMemoryCache):
        (WebInspector.NetworkDispatcher.prototype.webSocketCreated):
        (WebInspector.NetworkDispatcher.prototype.webSocketWillSendHandshakeRequest):
        (WebInspector.NetworkDispatcher.prototype.webSocketHandshakeResponseReceived):
        (WebInspector.NetworkDispatcher.prototype.webSocketClosed):
        (WebInspector.NetworkDispatcher.prototype._appendRedirect):
        (WebInspector.NetworkDispatcher.prototype._startNetworkRequest):
        (WebInspector.NetworkDispatcher.prototype._updateNetworkRequest):
        (WebInspector.NetworkDispatcher.prototype._finishNetworkRequest):
        (WebInspector.NetworkDispatcher.prototype._dispatchEventToListeners):
        (WebInspector.NetworkDispatcher.prototype._createNetworkRequest):
        (get WebInspector):
        * inspector/front-end/NetworkPanel.js:
        (WebInspector.NetworkLogView.prototype._initializeView):
        (WebInspector.NetworkLogView.prototype.get statusBarItems):
        (WebInspector.NetworkLogView.prototype._createSortingFunctions):
        (WebInspector.NetworkLogView.prototype._updateSummaryBar):
        (WebInspector.NetworkLogView.prototype._updateDividersIfNeeded):
        (WebInspector.NetworkLogView.prototype._invalidateAllItems):
        (WebInspector.NetworkLogView.prototype._requestGridNode):
        (WebInspector.NetworkLogView.prototype._createRequestGridNode):
        (WebInspector.NetworkLogView.prototype._onLoadEventFired):
        (WebInspector.NetworkLogView.prototype._domContentLoadedEventFired):
        (WebInspector.NetworkLogView.prototype.refresh):
        (WebInspector.NetworkLogView.prototype._reset):
        (WebInspector.NetworkLogView.prototype.get requests):
        (WebInspector.NetworkLogView.prototype.requestById):
        (WebInspector.NetworkLogView.prototype._onRequestStarted):
        (WebInspector.NetworkLogView.prototype._appendRequest):
        (WebInspector.NetworkLogView.prototype._onRequestUpdated):
        (WebInspector.NetworkLogView.prototype._refreshRequest):
        (WebInspector.NetworkLogView.prototype._mainFrameNavigated):
        (WebInspector.NetworkLogView.prototype.get _setLargerRequests):
        (WebInspector.NetworkLogView.prototype._getPopoverAnchor):
        (WebInspector.NetworkLogView.prototype._showPopover):
        (WebInspector.NetworkLogView.prototype._contextMenu):
        (WebInspector.NetworkLogView.prototype._copyAll):
        (WebInspector.NetworkLogView.prototype._copyRequest):
        (WebInspector.NetworkLogView.prototype._copyLocation):
        (WebInspector.NetworkLogView.prototype._copyRequestHeaders):
        (WebInspector.NetworkLogView.prototype._copyResponseHeaders):
        (WebInspector.NetworkLogView.prototype._exportAll):
        (WebInspector.NetworkLogView.prototype._exportRequest):
        (WebInspector.NetworkLogView.prototype._matchRequest):
        (WebInspector.NetworkLogView.prototype._clearSearchMatchedList):
        (WebInspector.NetworkLogView.prototype._updateSearchMatchedListAfterRequestIdChanged):
        (WebInspector.NetworkLogView.prototype._updateHighlightIfMatched):
        (WebInspector.NetworkLogView.prototype._highlightNthMatchedRequest):
        (WebInspector.NetworkLogView.prototype.performSearch):
        (WebInspector.NetworkLogView.prototype.jumpToPreviousSearchResult):
        (WebInspector.NetworkLogView.prototype.jumpToNextSearchResult):
        (WebInspector.NetworkLogView.prototype.revealAndHighlightRequest):
        (WebInspector.NetworkPanel.prototype.handleShortcut):
        (WebInspector.NetworkPanel.prototype.get requests):
        (WebInspector.NetworkPanel.prototype.requestById):
        (WebInspector.NetworkPanel.prototype._requestByAnchor):
        (WebInspector.NetworkPanel.prototype.canShowAnchorLocation):
        (WebInspector.NetworkPanel.prototype.showAnchorLocation):
        (WebInspector.NetworkPanel.prototype.revealAndHighlightRequest):
        (WebInspector.NetworkPanel.prototype._onViewCleared):
        (WebInspector.NetworkPanel.prototype._onRequestSelected):
        (WebInspector.NetworkPanel.prototype._showRequest):
        (WebInspector.NetworkPanel.prototype._closeVisibleRequest):
        (WebInspector.NetworkPanel.prototype._toggleGridMode):
        (WebInspector.NetworkPanel.prototype._toggleViewingRequestMode):
        (WebInspector.NetworkTimeCalculator.prototype.computeBarGraphPercentages):
        (WebInspector.NetworkTimeCalculator.prototype.computeBarGraphLabels):
        (WebInspector.NetworkTimeCalculator.prototype.updateBoundaries):
        (WebInspector.NetworkTimeCalculator.prototype._lowerBound):
        (WebInspector.NetworkTimeCalculator.prototype._upperBound):
        (WebInspector.NetworkTransferTimeCalculator.prototype._lowerBound):
        (WebInspector.NetworkTransferTimeCalculator.prototype._upperBound):
        (WebInspector.NetworkTransferDurationCalculator.prototype._upperBound):
        (WebInspector.NetworkDataGridNode):
        (WebInspector.NetworkDataGridNode.prototype.isFilteredOut):
        (WebInspector.NetworkDataGridNode.prototype.select):
        (WebInspector.NetworkDataGridNode.prototype._openInNewTab):
        (WebInspector.NetworkDataGridNode.prototype.get selectable):
        (WebInspector.NetworkDataGridNode.prototype._createTimelineCell):
        (WebInspector.NetworkDataGridNode.prototype.refreshRequest):
        (WebInspector.NetworkDataGridNode.prototype._refreshNameCell):
        (WebInspector.NetworkDataGridNode.prototype._fileName):
        (WebInspector.NetworkDataGridNode.prototype._refreshStatusCell):
        (WebInspector.NetworkDataGridNode.prototype._refreshTypeCell):
        (WebInspector.NetworkDataGridNode.prototype._refreshInitiatorCell):
        (WebInspector.NetworkDataGridNode.prototype._refreshSizeCell):
        (WebInspector.NetworkDataGridNode.prototype._refreshTimeCell):
        (WebInspector.NetworkDataGridNode.prototype.refreshGraph):
        (WebInspector.NetworkDataGridNode.NameComparator):
        (WebInspector.NetworkDataGridNode.SizeComparator):
        (WebInspector.NetworkDataGridNode.InitiatorComparator):
        (WebInspector.NetworkDataGridNode.RequestPropertyComparator):
        * inspector/front-end/NetworkRequest.js: Added.
        (WebInspector.NetworkRequest):
        * inspector/front-end/RawSourceCode.js:
        (WebInspector.RawSourceCode):
        (WebInspector.RawSourceCode.prototype._requestFinished):
        (WebInspector.RawSourceCode.prototype._createContentProvider):
        * inspector/front-end/Resource.js:
        (WebInspector.Resource):
        (WebInspector.Resource.displayName):
        (WebInspector.Resource.prototype.get request):
        (WebInspector.Resource.prototype.set finished):
        (WebInspector.Resource.prototype.set timing):
        (WebInspector.Resource.prototype.set requestHeaders):
        (WebInspector.Resource.prototype.set requestHeadersText):
        (WebInspector.Resource.prototype.set responseHeaders):
        (WebInspector.Resource.prototype.set responseHeadersText):
        (WebInspector.Resource.prototype.requestContent):
        * inspector/front-end/ResourceCookiesView.js:
        (WebInspector.ResourceCookiesView):
        (WebInspector.ResourceCookiesView.prototype.get _gotCookies):
        (WebInspector.ResourceCookiesView.prototype._buildCookiesTable):
        * inspector/front-end/ResourceHeadersView.js:
        (WebInspector.ResourceHeadersView):
        (WebInspector.ResourceHeadersView.prototype._refreshURL):
        (WebInspector.ResourceHeadersView.prototype._refreshQueryString):
        (WebInspector.ResourceHeadersView.prototype._refreshUrlFragment):
        (WebInspector.ResourceHeadersView.prototype._refreshFormData):
        (WebInspector.ResourceHeadersView.prototype._refreshRequestHeaders):
        (WebInspector.ResourceHeadersView.prototype._refreshResponseHeaders):
        (WebInspector.ResourceHeadersView.prototype._refreshHTTPInformation):
        * inspector/front-end/ResourceScriptMapping.js:
        (WebInspector.ResourceScriptMapping.prototype.addScript):
        * inspector/front-end/ResourceTimingView.js:
        (WebInspector.ResourceTimingView):
        (WebInspector.ResourceTimingView.prototype.wasShown):
        (WebInspector.ResourceTimingView.prototype._refresh):
        (WebInspector.ResourceTimingView.createTimingTable):
        * inspector/front-end/ResourceTreeModel.js:
        (WebInspector.ResourceTreeModel):
        (WebInspector.ResourceTreeModel.prototype._frontendReused):
        (WebInspector.ResourceTreeModel.prototype._onRequestUpdated):
        (WebInspector.ResourceTreeModel.prototype._onRequestUpdateDropped):
        (WebInspector.ResourceTreeModel.prototype._createResource):
        (WebInspector.ResourceTreeFrame):
        (WebInspector.ResourceTreeFrame.prototype._addRequest):
        * inspector/front-end/ResourceUtils.js:
        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.FrameResourceTreeElement.prototype._appendOpenInNetworkPanelAction):
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/externs.js:
        (WebInspector.networkRequestById):
        * inspector/front-end/inspector.html:
        * inspector/front-end/inspector.js:
        (WebInspector.networkRequestById):
        (WebInspector.openRequestInNetworkPanel):

2012-04-11  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: fix category -> type refactoring implications.
        https://bugs.webkit.org/show_bug.cgi?id=83680

        Reviewed by Yury Semikhatsky.

        We are now using type identifiers (singulars) as opposed to category identifier (plurals) in the style.

        * inspector/front-end/NetworkPanel.js:
        (WebInspector.NetworkLogView.prototype._createFilterStatusBarItems.createFilterElement):
        (WebInspector.NetworkLogView.prototype._createFilterStatusBarItems):
        (WebInspector.NetworkLogView.prototype._showCategory):
        (WebInspector.NetworkLogView.prototype._hideCategory):
        (WebInspector.NetworkLogView.prototype._filter):
        (WebInspector.NetworkDataGridNode.prototype.refreshResource):
        (WebInspector.NetworkDataGridNode.prototype.refreshGraph):
        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.FrameResourceTreeElement):
        (WebInspector.ResourceRevisionTreeElement):
        * inspector/front-end/networkLogView.css:
        (.network-log-grid.data-grid .network-type-script .icon):
        (.network-log-grid.data-grid.small .network-type-script .icon):
        (.network-log-grid.data-grid .network-type-document .icon):
        (.network-log-grid.data-grid.small .network-type-document .icon):
        (.network-log-grid.data-grid .network-type-stylesheet .icon):
        (.network-log-grid.data-grid.small .network-type-stylesheet .icon):
        (.network-log-grid.data-grid .network-type-image .icon):
        (.network-log-grid.data-grid.small .network-type-image .icon):
        (.network-type-document .network-graph-bar):
        (.network-type-document.resource-cached .network-graph-bar):
        (.network-type-stylesheet .network-graph-bar):
        (.network-type-stylesheet.resource-cached .network-graph-bar):
        (.network-type-image .network-graph-bar):
        (.network-type-image.resource-cached .network-graph-bar):
        (.network-type-font .network-graph-bar):
        (.network-type-font.resource-cached .network-graph-bar):
        (.network-type-script .network-graph-bar):
        (.network-type-script.resource-cached .network-graph-bar):
        (.network-type-xhr .network-graph-bar):
        (.network-type-xhr.resource-cached .network-graph-bar):
        (.network-type-websocket .network-graph-bar):
        (.network-type-websocket.resource-cached .network-graph-bar):
        (.network-log-grid.data-grid.filter-other table.data tr.revealed.network-type-other):
        * inspector/front-end/resourcesPanel.css:
        (.resource-sidebar-tree-item.resources-type-image .icon):
        (.resources-type-image .image-resource-icon-preview):
        (.children.small .resource-sidebar-tree-item.resources-type-image .icon):
        (.children.small .resources-type-image .image-resource-icon-preview):
        (.resource-sidebar-tree-item.resources-type-document .icon):
        (.children.small .resource-sidebar-tree-item.resources-type-document .icon):
        (.resource-sidebar-tree-item.resources-type-stylesheet .icon):
        (.children.small .resource-sidebar-tree-item.resources-type-stylesheet .icon):
        (.resource-sidebar-tree-item.resources-type-font .icon):
        (.children.small .resource-sidebar-tree-item.resources-type-font .icon):
        (.resource-sidebar-tree-item.resources-type-script .icon):
        (.children.small .resource-sidebar-tree-item.resources-type-script .icon):
        (.resource-sidebar-tree-item.resources-type-xhr .icon):
        (.children.small .resource-sidebar-tree-item.resources-type-xhr .icon):

2012-04-11   Arko Saha  <arko@motorola.com>

        Microdata: Implement cache mechanism for HTMLPropertiesCollection.
        https://bugs.webkit.org/show_bug.cgi?id=80490

        Reviewed by Ryosuke Niwa.

        Implemented caching mechanism for HTMLPropertiesCollection.
        propertyCache - contains microdata item properties.
        itemRefElements - contains sorted microdata item and itemref elements.
        propertyNames - contains microdata property names of the elements in the collection.
        itemRefElementPosition - store the current position of itemRefElements.
        hasItemRefElements - set to ture once we have sorted microdata item and itemref elements list i.e, itemRefElements.
        Cache is invalidated only when dom tree modified. Whenever any query is made on HTMLPropertiesCollection,
        result is returned from the cache. Earliar we used to calculate properties node list every time a query is made.

        * html/HTMLPropertiesCollection.cpp:
        (WebCore):
        (WebCore::HTMLPropertiesCollection::HTMLPropertiesCollection):
        (WebCore::HTMLPropertiesCollection::invalidateCacheIfNeeded):
        (WebCore::HTMLPropertiesCollection::updateRefElements): Appends microdata item element and elements which
        are added through itemref attribute in itemRefElements (in tree order).
        (WebCore::nextNodeWithProperty):
        (WebCore::HTMLPropertiesCollection::itemAfter): Takes parent base and previous item property as argument.
        Finds the next item property in base.
        (WebCore::HTMLPropertiesCollection::calcLength): Calculates the length of properties collection if length
        is not available in the cache.
        (WebCore::HTMLPropertiesCollection::length):
        (WebCore::HTMLPropertiesCollection::firstProperty): Returns the first property in the collection.
        (WebCore::HTMLPropertiesCollection::item):
        (WebCore::HTMLPropertiesCollection::findProperties): Finds microdata item properties in the base element.
        Appends the properties in propertyCache and property names in propertyNames.
        (WebCore::HTMLPropertiesCollection::updateNameCache):  It updates the propertyCache and propertyNames if hasNameCache is false.
        (WebCore::HTMLPropertiesCollection::names):
        (WebCore::HTMLPropertiesCollection::namedItem):
        (WebCore::HTMLPropertiesCollection::hasNamedItem):
        * html/HTMLPropertiesCollection.h:
        (HTMLPropertiesCollection):

2012-04-10  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        [Qt] Fix issues when using the WebView as ShaderEffectSource
        https://bugs.webkit.org/show_bug.cgi?id=83587

        Reviewed by Noam Rosenthal.

        - Make sure that the bound frame buffer is preserved instead of binding
          to the default one
        - Accept a "mirrored" flag in beginPainting that we're applying on the
          projection matrix just as with internal FBOs

        The "flip" logic in createProjectionMatrix has been reversed and renamed to
        mirrored so that FBO rendering is considered the special case and not the
        other way around just like within Qt.

        * platform/graphics/texmap/TextureMapper.h:
        (WebCore::TextureMapper::beginPainting):
        * platform/graphics/texmap/TextureMapperGL.cpp:
        (WebCore::TextureMapperGLData::TextureMapperGLData):
        (TextureMapperGLData):
        (WebCore::TextureMapperGL::beginPainting):
        (WebCore::createProjectionMatrix):
        (WebCore::BitmapTextureGL::bind):
        (WebCore::TextureMapperGL::bindSurface):
        * platform/graphics/texmap/TextureMapperGL.h:

2012-04-11  Stephen Chenney  <schenney@chromium.org>

        Shadow tree TreeScope data is not removed by ContainerNode::removeAllChildren
        https://bugs.webkit.org/show_bug.cgi?id=83484

        Unreviewed attempted build fix.

        * dom/ContainerNodeAlgorithms.h: Adding Document.h include.

2012-04-11  Luke Macpherson  <macpherson@chromium.org>

        Remove unnecessary assignments from CSSParser::parseLinearGradient().
        https://bugs.webkit.org/show_bug.cgi?id=83661

        Reviewed by Kentaro Hara.

        No new tests / code cleanup only.

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

2012-04-11  Stephen Chenney  <schenney@chromium.org>

        Shadow tree TreeScope data is not removed by ContainerNode::removeAllChildren
        https://bugs.webkit.org/show_bug.cgi?id=83484

        Reviewed by Hajime Morita.

        The ContainerNode::removeAllChildren method does fast and dirty node removal.
        As compared to ContainerNode::removeChildren, it does not include the
        method to adopt the removed child node into the root document's TreeScope.
        Rather, it leaves the existing TreeScope in place. However, the existing
        TreeScope may be removed, causing a crash when something prevents the child
        node from being deleted immediately. The fix is to modify the code in
        ContainerNodeAlgorithms to do the TreeScope adoption.

        Could not reproduce crash in layout test.

        * dom/ContainerNodeAlgorithms.h:
        (Private):
        (WebCore::Private::NodeRemovalDispatcher::dispatch):
        (WebCore::Private::addChildNodesToDeletionQueue):

2012-04-11  Yury Semikhatsky  <yurys@chromium.org>

        Web Inspector: showing summary view is very slow on a snapshot with thousands of constructors
        https://bugs.webkit.org/show_bug.cgi?id=83682

        Node content is created only when the node becomes visible in the corresponding view.
        This saves a lot of time when openning summary/comparison view of a snapshot
        with lots of different classes.

        Reviewed by Pavel Feldman.

        * inspector/front-end/DetailedHeapshotGridNodes.js:
        (WebInspector.HeapSnapshotGridNode.prototype.ensureContentCreated):
        (WebInspector.HeapSnapshotLazyGridNode):
        (WebInspector.HeapSnapshotLazyGridNode.prototype.ensureContentCreated):
        (WebInspector.HeapSnapshotLazyGridNode.prototype.createCells):
        (WebInspector.HeapSnapshotConstructorNode):
        (WebInspector.HeapSnapshotDiffNode):
        * inspector/front-end/DetailedHeapshotView.js:
        (WebInspector.HeapSnapshotSortableDataGrid):
        (WebInspector.HeapSnapshotSortableDataGrid.prototype.updateVisibleNodes):
        (WebInspector.HeapSnapshotSortableDataGrid.prototype.onResize):
        (WebInspector.HeapSnapshotSortableDataGrid.prototype._onScroll):
        (WebInspector.HeapSnapshotSortableDataGrid.prototype._performSorting):
        (WebInspector.HeapSnapshotConstructorsDataGrid):
        (WebInspector.HeapSnapshotDiffDataGrid):
        (WebInspector.DetailedHeapshotView.prototype._changeNameFilter):
        * inspector/front-end/heapProfiler.css:
        (.detailed-heapshot-view .data-grid tr:empty):

2012-04-11  Simon Pena  <spena@igalia.com>

        [GTK] media/event-attributes.html fails
        https://bugs.webkit.org/show_bug.cgi?id=71662

        Reviewed by Philippe Normand.

        In MediaPlayerPrivateGStreamer::didEnd, when EOS is reached, don't
        synchronize position and duration on regular playback. That is:
        synchronize it (and fire the durationChange signal) only on reverse
        playback.

        This change makes media/event-attributes.html pass. It was
        previously failing because an additional durationChange signal was
        emitted.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp: Avoid
        sending durationChange signal on regular playback.

2012-04-11  Andras Becsi  <andras.becsi@nokia.com>

        Fix the build with gcc 4.7.0
        https://bugs.webkit.org/show_bug.cgi?id=83584

        Reviewed by Alexey Proskuryakov.

        No new tests needed.

        * Target.pri: Disable Werror on the ANGLE code since it has several recurring issues
        because older versions of flex (<2.5.35) and bison (<2.5) generate code which
        triggers warnings. This generated code is committed on each version update of ANGLE,
        and it is very likely that the code is generated with older versions of the mentioned
        tools.
        * html/HTMLImageElement.cpp:
        (WebCore::HTMLImageElement::createForJSConstructor): Fails because of -Werror=extra
        * platform/graphics/TiledBackingStoreClient.h: Fails because -Werror=delete-non-virtual-dtor,
        gcc requires classes which have virtual methods to have a virtual destructor, if their instances
        or the instances of their subclasses are deleted.
        (WebCore::TiledBackingStoreClient::~TiledBackingStoreClient):
        * platform/graphics/texmap/TextureMapperPlatformLayer.h: Ditto.
        (WebCore::TextureMapperPlatformLayer::~TextureMapperPlatformLayer):

2012-04-11  Kent Tamura  <tkent@chromium.org>

        [V8] Calendar Picker: Add a helper function to expose PagePopupClient::setValueAndClosePopup() to JavaScript
        https://bugs.webkit.org/show_bug.cgi?id=83561

        Reviewed by Adam Barth.

        Add ScriptController::installFunctionsForPagePopup(), which add
        window.setValueAndClosePopup() for JavaScript code in PagePopup
        environment, and the function calls
        WebCore::PagePopupClient::setValueAndClosePopup().

        This patch introduces Supplement<DOMWindow> object to hold a
        PagePopupClient object. It makes keeping a PagePopupClient easier.

        * WebCore.gypi: Add DOMWindowPagePopup.{cpp,h}
        * bindings/v8/ScriptController.cpp:
        (WebCore::setValueAndClosePopupCallback):
        (WebCore::ScriptController::installFunctionsForPagePopup):
        * bindings/v8/ScriptController.h:
        (ScriptController): Add installFunctionsForPagePopup().
        * page/DOMWindowPagePopup.cpp: Added.
        (WebCore::DOMWindowPagePopup::DOMWindowPagePopup):
        (WebCore::DOMWindowPagePopup::supplementName):
        Returns "DOMWindowPagePopup" as a key of this Supplement<DOMWindow>.
        (WebCore::DOMWindowPagePopup::setValueAndClosePopup):
        Gets a DOMWindowPagePopup from the window, then calls PagePopupClient::setValueAndClosePopup().
        (WebCore::DOMWindowPagePopup::install):
        On-demand creation of DOMWindowPagePopup doesn't work because it
        must have a PagePopupClient object. We need to install
        DOMWindowPagePopup explicitly.
        * page/DOMWindowPagePopup.h: Added.

2012-04-11  Sadrul Habib Chowdhury  <sadrul@chromium.org>

        [chromium] Add Battery Status API support.

        Add Battery Status API support to chromium.
        https://bugs.webkit.org/show_bug.cgi?id=83284

        Reviewed by Adam Barth.

        This change is covered by tests in batterystatus/.

        * Modules/battery/BatteryController.cpp:
        (WebCore::BatteryController::updateBatteryStatus):
        (WebCore):
        * Modules/battery/BatteryController.h:
        (BatteryController):
        * Modules/battery/BatteryManager.cpp:
        (WebCore::BatteryManager::charging):
        (WebCore::BatteryManager::chargingTime):
        (WebCore::BatteryManager::dischargingTime):
        (WebCore::BatteryManager::level):
        * WebCore.gyp/WebCore.gyp:
        * WebCore.gypi:

2012-04-11  Mihnea Ovidenie  <mihnea@adobe.com>

        [CSS Regions]Add helper class for flow threads info in RenderView
        https://bugs.webkit.org/show_bug.cgi?id=83464

        Reviewed by David Hyatt.

        This patch creates a new helper class FlowThreadController that will accommodate all the flow thread
        related info from RenderView and moves all the data structures/methods from RenderView into this new class.
        There is only one FlowThreadController object per RenderView and it can be retrieved using flowThreadController() method from RenderView.
        The flow thread controller object is owned by the RenderView and it is created on demand only if there are flowing
        threads in the page.

        Since there is no change in functionality, there are no new tests added.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/Document.cpp:
        (WebCore::Document::webkitGetFlowByName):
        * dom/NodeRenderingContext.cpp:
        (WebCore::NodeRenderingContext::moveToFlowThreadIfNeeded):
        * rendering/FlowThreadController.cpp: Added.
        (WebCore):
        (WebCore::FlowThreadController::create):
        (WebCore::FlowThreadController::FlowThreadController):
        (WebCore::FlowThreadController::~FlowThreadController):
        (WebCore::FlowThreadController::ensureRenderFlowThreadWithName):
        (WebCore::FlowThreadController::layoutRenderNamedFlowThreads):
        * rendering/FlowThreadController.h: Added.
        (WebCore):
        (FlowThreadController):
        (WebCore::FlowThreadController::currentRenderFlowThread):
        (WebCore::FlowThreadController::setCurrentRenderFlowThread):
        (WebCore::FlowThreadController::isRenderNamedFlowThreadOrderDirty):
        (WebCore::FlowThreadController::setIsRenderNamedFlowThreadOrderDirty):
        (WebCore::FlowThreadController::renderNamedFlowThreadList):
        (WebCore::FlowThreadController::hasRenderNamedFlowThreads):
        * rendering/RenderFlowThread.cpp:
        (WebCore::CurrentRenderFlowThreadMaintainer::CurrentRenderFlowThreadMaintainer):
        (WebCore::CurrentRenderFlowThreadMaintainer::~CurrentRenderFlowThreadMaintainer):
        (WebCore::CurrentRenderFlowThreadDisabler::CurrentRenderFlowThreadDisabler):
        (WebCore::CurrentRenderFlowThreadDisabler::~CurrentRenderFlowThreadDisabler):
        * rendering/RenderNamedFlowThread.cpp:
        (WebCore::RenderNamedFlowThread::nextRendererForNode):
        (WebCore::RenderNamedFlowThread::previousRendererForNode):
        (WebCore::RenderNamedFlowThread::removeRegionFromThread):
        (WebCore::RenderNamedFlowThread::addDependencyOnFlowThread):
        (WebCore::RenderNamedFlowThread::removeDependencyOnFlowThread):
        * rendering/RenderNamedFlowThread.h:
        (RenderNamedFlowThread):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::createObject):
        (WebCore::RenderObject::enclosingRenderFlowThread):
        (WebCore::RenderObject::willBeDestroyed):
        * rendering/RenderTreeAsText.cpp:
        (WebCore::writeRenderNamedFlowThreads):
        * rendering/RenderView.cpp:
        (WebCore::RenderView::RenderView):
        (WebCore::RenderView::layout):
        (WebCore::RenderView::hasRenderNamedFlowThreads):
        (WebCore::RenderView::flowThreadController):
        * rendering/RenderView.h:
        (WebCore):
        (RenderView):

2012-04-11  Alexander Pavlov  <apavlov@chromium.org>

        Web Inspector: [Device Metrics] Implement dimension swapping
        https://bugs.webkit.org/show_bug.cgi?id=83676

        The change adds a "Swap dimensions" button that swaps the emulated device dimensions to
        mimic the device rotation (give that the ORIENTATION_EVENTS feature is disabled in Chromium).

        Reviewed by Yury Semikhatsky.

        * English.lproj/localizedStrings.js:
        * inspector/front-end/SettingsScreen.js:
        (WebInspector.SettingsScreen.prototype._createDeviceMetricsElement.swapDimensionsClicked):
        (WebInspector.SettingsScreen.prototype._createDeviceMetricsElement):

2012-04-11  Kent Tamura  <tkent@chromium.org>

        Fix compiler warnings for generated CalendarPicker.cpp with VC++
        https://bugs.webkit.org/show_bug.cgi?id=83672

        Reviewed by Kentaro Hara.

        * make-file-arrays.py:
        (main): Do not generate literal integers larger than 127 for
        members of char arrays. Use '\xHH' instead.

2012-04-11  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: fix category -> type refactoring implications.
        https://bugs.webkit.org/show_bug.cgi?id=83680

        Reviewed by Yury Semikhatsky.

        We are now using type identifiers (singulars) as opposed to category identifier (plurals) in the style.

        * inspector/front-end/NetworkPanel.js:
        (WebInspector.NetworkLogView.prototype._createFilterStatusBarItems.createFilterElement):
        (WebInspector.NetworkLogView.prototype._createFilterStatusBarItems):
        (WebInspector.NetworkLogView.prototype._showCategory):
        (WebInspector.NetworkLogView.prototype._hideCategory):
        (WebInspector.NetworkLogView.prototype._filter):
        (WebInspector.NetworkDataGridNode.prototype.refreshResource):
        (WebInspector.NetworkDataGridNode.prototype.refreshGraph):
        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.FrameResourceTreeElement):
        (WebInspector.ResourceRevisionTreeElement):
        * inspector/front-end/networkLogView.css:
        (.network-log-grid.data-grid .network-type-script .icon):
        (.network-log-grid.data-grid.small .network-type-script .icon):
        (.network-log-grid.data-grid .network-type-document .icon):
        (.network-log-grid.data-grid.small .network-type-document .icon):
        (.network-log-grid.data-grid .network-type-stylesheet .icon):
        (.network-log-grid.data-grid.small .network-type-stylesheet .icon):
        (.network-log-grid.data-grid .network-type-image .icon):
        (.network-log-grid.data-grid.small .network-type-image .icon):
        (.network-type-document .network-graph-bar):
        (.network-type-document.resource-cached .network-graph-bar):
        (.network-type-stylesheet .network-graph-bar):
        (.network-type-stylesheet.resource-cached .network-graph-bar):
        (.network-type-image .network-graph-bar):
        (.network-type-image.resource-cached .network-graph-bar):
        (.network-type-font .network-graph-bar):
        (.network-type-font.resource-cached .network-graph-bar):
        (.network-type-script .network-graph-bar):
        (.network-type-script.resource-cached .network-graph-bar):
        (.network-type-xhr .network-graph-bar):
        (.network-type-xhr.resource-cached .network-graph-bar):
        (.network-type-websocket .network-graph-bar):
        (.network-type-websocket.resource-cached .network-graph-bar):
        (.network-log-grid.data-grid.filter-other table.data tr.revealed.network-type-other):
        * inspector/front-end/resourcesPanel.css:
        (.resource-sidebar-tree-item.resources-type-image .icon):
        (.resources-type-image .image-resource-icon-preview):
        (.children.small .resource-sidebar-tree-item.resources-type-image .icon):
        (.children.small .resources-type-image .image-resource-icon-preview):
        (.resource-sidebar-tree-item.resources-type-document .icon):
        (.children.small .resource-sidebar-tree-item.resources-type-document .icon):
        (.resource-sidebar-tree-item.resources-type-stylesheet .icon):
        (.children.small .resource-sidebar-tree-item.resources-type-stylesheet .icon):
        (.resource-sidebar-tree-item.resources-type-font .icon):
        (.children.small .resource-sidebar-tree-item.resources-type-font .icon):
        (.resource-sidebar-tree-item.resources-type-script .icon):
        (.children.small .resource-sidebar-tree-item.resources-type-script .icon):
        (.resource-sidebar-tree-item.resources-type-xhr .icon):
        (.children.small .resource-sidebar-tree-item.resources-type-xhr .icon):

2012-04-11  Noel Gordon  <noel.gordon@gmail.com>

        [GTK] ImageBuffer: Canonical mimeType for encoding implies startsWith('image/')
        https://bugs.webkit.org/show_bug.cgi?id=83657

        Reviewed by Martin Robinson.

        Canonical image mimeTypes begin with "image/", and this is tested by an ASSERT
        guard in toDataURL(): that checks the WebCore mimeType registry for image-for-
        encoding mimeType. There is no need to also test mimeType.startsWith("image/")
        because that is a given.

        No new tests. Covered by existing fast/canvas/*toDataURL* tests.

        * platform/graphics/gtk/ImageBufferGtk.cpp:
        (WebCore::ImageBuffer::toDataURL):

2012-04-10  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix make distcheck issues.

        * GNUmakefile.list.am: Add missing header file.

2012-04-10  Adrienne Walker  <enne@google.com>

        [chromium] Signedness issue with code informing v8 of PatternSkia memory use
        https://bugs.webkit.org/show_bug.cgi?id=83642

        Reviewed by James Robinson.

        The unary negation of size_t is still a size_t, so clamp and cast to
        an int instead when adjusting v8 memory limits.

        * platform/graphics/Pattern.h:
        (Pattern):
        * platform/graphics/skia/PatternSkia.cpp:
        (WebCore::Pattern::platformPattern):

2012-04-10  Noel Gordon  <noel.gordon@gmail.com>

        [chromium] ImageBuffer minor style fix: remove compound declaration
        https://bugs.webkit.org/show_bug.cgi?id=83660

        Reviewed by Kent Tamura.

        No new tests. Covered by existing fast/canvas/*toDataURL* tests.

        * platform/graphics/skia/ImageBufferSkia.cpp:
        (WebCore::ImageBuffer::toDataURL):
        (WebCore::ImageDataToDataURL):

2012-04-10  Alexandre Elias  <aelias@google.com>

        Add gesture event enums for long-press and pinch
        https://bugs.webkit.org/show_bug.cgi?id=83640

        Reviewed by James Robinson.

        Add new enum values GestureLongPress and GesturePinchBegin/End/Update,
        along with no-op default handling.

        No new tests. (No-op change.)

        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleGestureEvent):
        * platform/PlatformEvent.h:

2012-04-10  Abhishek Arya  <inferno@chromium.org>

        Crash due to intruding float not removed from next siblings.
        https://bugs.webkit.org/show_bug.cgi?id=83301

        Reviewed by Eric Seidel.

        Test: fast/block/float/intruding-float-not-removed-from-next-sibling-crash.html

        markSiblingsWithFloatsForLayout currently only handled overhanging floats and made
        checks for those by checking if logicalBottomForFloat > our logicalHeight. We need
        to take care of intruding floats as well, since these can intrude into the neighbouring
        blocks too. So, generalized the function to check all our next siblings if they contains
        that float (one getting removed) and if yes, mark it and all its descendants for layout.
        This fixes the crash.

        For performance, we change the looping condition to iterate over the next sibling
        blocks first and finding which ones can contain floats and then check it against
        our floating object list. Currently, it is the other way around and is less
        performant due to repeated calls to isRenderBlock(), isFloatingOrPositioned()
        and avoidFloats().

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::markSiblingsWithFloatsForLayout):

2012-04-10  Mike Lawther  <mikelawther@chromium.org>

        Prevent fallthrough to keep static analysis tools happy
        https://bugs.webkit.org/show_bug.cgi?id=83639

        Reviewed by Darin Adler.

        No new tests - no new behaviour.

        * css/LengthFunctions.cpp:
        (WebCore::valueForLength):

2012-04-10  Julien Chaffraix  <jchaffraix@webkit.org>

        Don't expose the intrinsic padding concept to the code outside rendering
        https://bugs.webkit.org/show_bug.cgi?id=83380

        Reviewed by Eric Seidel.

        No new tests, refactoring only.

        The current code would expose the concept of intrinsic padding to every
        object holding a renderer through an enum on the padding* functions.

        This was very fragile as only the class using intrinsic padding should know about
        its very existence, the rest of the code shouldn't have to special case for it.
        There is one exception: the getComputedStyle logic needs the opposite value
        rendering needs. To handle that, we make it more explicit what returns the
        computed values vs the rendering values.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::sizingBox):
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        Updated those functions to use the new computedCSS* functions below.

        * rendering/RenderBox.h:
        (RenderBox):
        (WebCore::RenderBox::computedCSSContentBoxRect):
        This is the computed content box. It includes the intrinsic padding.

        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::computedCSSPaddingTop):
        (WebCore::RenderBoxModelObject::computedCSSPaddingBottom):
        (WebCore::RenderBoxModelObject::computedCSSPaddingLeft):
        (WebCore::RenderBoxModelObject::computedCSSPaddingRight):
        (WebCore::RenderBoxModelObject::computedCSSPaddingBefore):
        (WebCore::RenderBoxModelObject::computedCSSPaddingAfter):
        (WebCore::RenderBoxModelObject::computedCSSPaddingStart):
        (WebCore::RenderBoxModelObject::computedCSSPaddingEnd):
        Renamed from padding* as they returned the CSS computed values.

        * rendering/RenderBoxModelObject.h:
        (RenderBoxModelObject):
        Killed the enum paddingOptions!

        (WebCore::RenderBoxModelObject::paddingTop):
        (WebCore::RenderBoxModelObject::paddingBottom):
        (WebCore::RenderBoxModelObject::paddingLeft):
        (WebCore::RenderBoxModelObject::paddingRight):
        (WebCore::RenderBoxModelObject::paddingBefore):
        (WebCore::RenderBoxModelObject::paddingAfter):
        (WebCore::RenderBoxModelObject::paddingStart):
        (WebCore::RenderBoxModelObject::paddingEnd):
        All padding* functions call the computedCSSPadding* ones above.

        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::paddingTop):
        (WebCore::RenderTableCell::paddingBottom):
        (WebCore::RenderTableCell::paddingLeft):
        (WebCore::RenderTableCell::paddingRight):
        (WebCore::RenderTableCell::paddingBefore):
        (WebCore::RenderTableCell::paddingAfter):
        Updated these functions after the renaming.

        * rendering/RenderTableCell.h:
        (RenderTableCell):
        Updated the functions signature and decorated them with OVERRIDE.

        * rendering/mathml/RenderMathMLBlock.cpp:
        (WebCore::RenderMathMLBlock::paddingTop):
        (WebCore::RenderMathMLBlock::paddingBottom):
        (WebCore::RenderMathMLBlock::paddingLeft):
        (WebCore::RenderMathMLBlock::paddingRight):
        (WebCore::RenderMathMLBlock::paddingBefore):
        (WebCore::RenderMathMLBlock::paddingAfter):
        (WebCore::RenderMathMLBlock::paddingStart):
        (WebCore::RenderMathMLBlock::paddingEnd):
        * rendering/mathml/RenderMathMLBlock.h:
        (RenderMathMLBlock):
        Updated these functions after the renaming.

        * rendering/mathml/RenderMathMLSquareRoot.cpp:
        (WebCore::RenderMathMLSquareRoot::paint):
        Updated this function to use computeCSSContentBoxRect.location().

2012-04-10  Lauro Neto  <lauro.neto@openbossa.org>

        TextureMapperGL.cpp breaks build with OpenGL ES
        https://bugs.webkit.org/show_bug.cgi?id=83622

        Reviewed by Noam Rosenthal.

        Add !defined(TEXMAP_OPENGL_ES_2) guards as suggested by
        No'am Rosenthal.

        * platform/graphics/texmap/TextureMapperGL.cpp:
        (WebCore::BitmapTextureGL::updateContents):

2012-04-10  Kent Tamura  <tkent@chromium.org>

        Calendar Picker: Initialize CalendarPickerElement::m_popup
        https://bugs.webkit.org/show_bug.cgi?id=83656

        Reviewed by Hajime Morita.

        * html/shadow/CalendarPickerElement.cpp:
        (WebCore::CalendarPickerElement::CalendarPickerElement): Set 0 to m_popup.

2012-04-10  Adam Klein  <adamk@chromium.org>

        CodeGeneratorV8 cleanup: eliminate redundant calls to IsRefPtrType
        https://bugs.webkit.org/show_bug.cgi?id=83623

        Reviewed by Adam Barth.

        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateHeader): Always emit toV8(PassRefPtr), as all wrapped types are RefCounted.
        (GenerateImplementation): Always emit code for derefObject, as all wrapped types are RefCounted.

2012-04-10  James Robinson  <jamesr@chromium.org>

        [chromium] Add OVERRIDE annotations for cc tree host and proxy interfaces
        https://bugs.webkit.org/show_bug.cgi?id=83653

        Reviewed by Adrienne Walker.

        This adds OVERRIDE annotations to the implementations of the following interfaces:
        - CCLayerTreeHostClient
        - CCLayerTreeHostImplClient
        - CCProxy
        - LayerRendererChromiumClient

        * platform/graphics/chromium/cc/CCLayerTreeHost.h:
        (WebCore):
        * platform/graphics/chromium/cc/CCLayerTreeHostImpl.h:
        * platform/graphics/chromium/cc/CCProxy.h:
        (WebCore):
        * platform/graphics/chromium/cc/CCSingleThreadProxy.h:
        (CCSingleThreadProxy):
        * platform/graphics/chromium/cc/CCThreadProxy.h:
        (CCThreadProxy):

2012-04-10  David Grogan  <dgrogan@chromium.org>

        Notify observers of WorkerRunLoop stopping before the V8 isolate dies.
        https://bugs.webkit.org/show_bug.cgi?id=83104

        PlatformSupport::didStopWorkerRunLoop ultimately causes
        ~V8AbstractEventListener to call
        v8::Local<v8::Object>::New(m_listener) after the V8 isolate has been
        disposed, which manifests as a crash in V8.

        The current code in trunk runs this at shutdown:
        1) removeAllDOMObjects()
        2) dispose of V8
        3) didStopWorkerRunLoop()  <-- problem

        This patch changes the order to be:
        1) removeAllDOMObjects()
        2) didStopWorkerRunLoop()
        3) dispose of V8

        We put didStopWorkerRunLoop after removeAllDOMObjects because we don't
        want chromium code that runs on a webcore worker to run after it
        receives the didStopWorkerRunLoop signal. The destructors of some IDB
        objects are run by removeAllDOMObjects, so putting
        didStopWorkerRunLoop before removeAllDOMObjects would violate that
        constraint.

        It's possible that there's a lower layer fix available in V8 or the
        bindings.

        Reviewed by David Levin.

        Test: storage/indexeddb/pending-version-change-on-exit.html

        * bindings/v8/WorkerScriptController.cpp:
        (WebCore::WorkerScriptController::~WorkerScriptController):
        New location of didStopWorkerRunLoop. removeAllDOMObjects and V8
        disposal are called here, to run something between them it also has
        to go here.

        * workers/WorkerThread.cpp:
        (WebCore::WorkerThread::workerThread): Old location of
        didStopWorkerRunLoop.

2012-04-10  Adam Klein  <adamk@chromium.org>

        Break the association between form controls and their owner when the owner leaves the tree
        https://bugs.webkit.org/show_bug.cgi?id=81420

        Reviewed by Kent Tamura.

        When parsing malformed markup, it's possible for a form and a
        form-associated element to not be in an ancestor/descendant relationship.
        When that form is later removed from the tree, the relationship needs to be updated.

        Test: fast/forms/parser-associated-form-removal.html

        * html/FormAssociatedElement.cpp:
        (WebCore::FormAssociatedElement::FormAssociatedElement):
        (WebCore::FormAssociatedElement::formRemovedFromTree): New method called when
        by the form when it's being removed: handles either resetting the
        owner or storing a bit to optimize away a second walk up the tree.
        * html/FormAssociatedElement.h:
        (FormAssociatedElement):
        * html/HTMLFormElement.cpp:
        (WebCore::findRoot): Simple helper method copied from FormAssociatedElement (this should probably live elsewhere).
        (WebCore::HTMLFormElement::removedFromTree): Override removedFromTree to notify associated elements of the removal.
        * html/HTMLFormElement.h:
        (HTMLFormElement):

2012-04-10  James Robinson  <jamesr@chromium.org>

        [chromium] Add OVERRIDE annotations for cc scheduler-related client interfaces
        https://bugs.webkit.org/show_bug.cgi?id=83646

        Reviewed by Adrienne Walker.

        This adds OVERRIDE annotations to the implementations of the following interfaces:
        - CCFrameRateControllerClient
        - CCSchedulerClient
        - CCTimeSource
        - CCTimeSourceClient
        - CCTimerClient

        * platform/graphics/chromium/cc/CCDelayBasedTimeSource.h:
        * platform/graphics/chromium/cc/CCFrameRateController.cpp:
        * platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:
        * platform/graphics/chromium/cc/CCScheduler.h:
        (CCScheduler):
        * platform/graphics/chromium/cc/CCThreadProxy.cpp:
        * platform/graphics/chromium/cc/CCThreadProxy.h:
        (CCThreadProxy):

2012-04-10  Kent Tamura  <tkent@chromium.org>

        Add a function to set empty clients to a PageClients
        https://bugs.webkit.org/show_bug.cgi?id=83555

        Reviewed by Adam Barth.

        No new tests because of no behavior change.

        * CMakeLists.txt: Add EmptyClients.cpp.
        * GNUmakefile.list.am: ditto.
        * Target.pri: ditto.
        * WebCore.gypi: ditto.
        * WebCore.vcproj/WebCore.vcproj: ditto.
        * WebCore.xcodeproj/project.pbxproj: ditto.

        * loader/EmptyClients.cpp: Added.
        (WebCore::fillWithEmptyClients): Some code was moved from SVGImage::dataChanged().
        * loader/EmptyClients.h: Add the declaration of fillWithEmptyClients().
        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::dataChanged): Moved some code to fillWithEmptyClients().

2012-04-10  James Robinson  <jamesr@chromium.org>

        [chromium] Fold LayerChromium::updateCompositorResources into main update
        https://bugs.webkit.org/show_bug.cgi?id=83530

        Reviewed by Adrienne Walker.

        We used to update layer contents in two phases. The first, called paintContentsIfDirty() /
        idlePaintContentsIfDirty(), ran on the main WebKit thread and took care of any main-thread work - primarily
        WebCore painting as the name implies. The second, called updateCompositorResources(), ran on the compositor
        thread with the main thread blocked and took care of any actions that required direct access to the compositor's
        context - such as texture uploads into compositor-managed textures. Now that all compositor texture operations
        are queued on a CCTextureUpdater, the compositor can take care of these operations on the correct thread at the
        right time without needing layer-specific logic.

        This folds both functions into one function called LayerChromium::update() (and idleUpdate() for idle
        prepainting) and adds a CCTextureUpdater reference for queuing up texture operations.

        The CCProxy is responsible for the lifetime of the CCTextureUpdater. In the threaded proxy, the updater is
        tied to the lifetime of the beginFrame operation. Specifically it's constructed on the impl thread when the
        beginFrame message is generated, is accessed by reference on the main thread during the commit, and then
        destroyed by the proxy when the commit is complete. CCTextureUpdater::update should only be called on the impl
        thread by the proxy. In the future, it might be worth exposing a more limited interface to layers.

        * platform/graphics/chromium/Canvas2DLayerChromium.cpp:
        (WebCore::Canvas2DLayerChromium::update):
        * platform/graphics/chromium/Canvas2DLayerChromium.h:
        (Canvas2DLayerChromium):
        * platform/graphics/chromium/ContentLayerChromium.cpp:
        (WebCore::ContentLayerChromium::update):
        (WebCore::ContentLayerChromium::idleUpdate):
        * platform/graphics/chromium/ContentLayerChromium.h:
        (ContentLayerChromium):
        * platform/graphics/chromium/ImageLayerChromium.cpp:
        (WebCore::ImageLayerTextureUpdater::updateLayerRect):
        (WebCore::ImageLayerChromium::update):
        * platform/graphics/chromium/ImageLayerChromium.h:
        (ImageLayerChromium):
        * platform/graphics/chromium/LayerChromium.h:
        (WebCore::LayerChromium::update):
        (WebCore::LayerChromium::idleUpdate):
        * platform/graphics/chromium/TiledLayerChromium.cpp:
        (WebCore::UpdatableTile::isDirty):
        (WebCore::UpdatableTile::copyAndClearDirty):
        (WebCore::UpdatableTile::isDirtyForCurrentFrame):
        (UpdatableTile):
        (WebCore::UpdatableTile::UpdatableTile):
        (WebCore::TiledLayerChromium::TiledLayerChromium):
        (WebCore::TiledLayerChromium::createTile):
        (WebCore::TiledLayerChromium::invalidateRect):
        (WebCore::TiledLayerChromium::tileOnlyNeedsPartialUpdate):
        (WebCore::TiledLayerChromium::updateTiles):
        (WebCore::TiledLayerChromium::reserveTextures):
        (WebCore::TiledLayerChromium::resetUpdateState):
        (WebCore::TiledLayerChromium::updateLayerRect):
        (WebCore::TiledLayerChromium::idleUpdateLayerRect):
        (WebCore::TiledLayerChromium::needsIdlePaint):
        * platform/graphics/chromium/TiledLayerChromium.h:
        (TiledLayerChromium):
        * platform/graphics/chromium/WebGLLayerChromium.cpp:
        (WebCore::WebGLLayerChromium::update):
        * platform/graphics/chromium/WebGLLayerChromium.h:
        (WebGLLayerChromium):
        * platform/graphics/chromium/cc/CCLayerTreeHost.cpp:
        (WebCore::CCLayerTreeHost::~CCLayerTreeHost):
        (WebCore::CCLayerTreeHost::commitComplete):
        (WebCore::CCLayerTreeHost::updateLayers):
        (WebCore::CCLayerTreeHost::reserveTextures):
        (WebCore::CCLayerTreeHost::update):
        (WebCore::CCLayerTreeHost::paintMaskAndReplicaForRenderSurface):
        (WebCore::CCLayerTreeHost::paintLayerContents):
        * platform/graphics/chromium/cc/CCLayerTreeHost.h:
        (CCLayerTreeHost):
        * platform/graphics/chromium/cc/CCSingleThreadProxy.cpp:
        (WebCore::CCSingleThreadProxy::doCommit):
        (WebCore::CCSingleThreadProxy::commitIfNeeded):
        * platform/graphics/chromium/cc/CCSingleThreadProxy.h:
        (CCSingleThreadProxy):
        * platform/graphics/chromium/cc/CCThreadProxy.cpp:
        (WebCore::CCThreadProxy::scheduledActionBeginFrame):
        (WebCore::CCThreadProxy::beginFrame):
        (WebCore::CCThreadProxy::beginFrameCompleteOnImplThread):
        (WebCore::CCThreadProxy::scheduledActionCommit):
        * platform/graphics/chromium/cc/CCThreadProxy.h:
        (WebCore::CCThreadProxy::BeginFrameAndCommitState::BeginFrameAndCommitState):
        (BeginFrameAndCommitState):

2012-04-10  Adam Klein  <adamk@chromium.org>

        Store V8 SVGElementInstance wrappers in the regular DOMObjectMap
        https://bugs.webkit.org/show_bug.cgi?id=83615

        Reviewed by Adam Barth.

        Historically, these wrappers had their own map, but there doesn't seem
        to be any particular reason for this. The V8GCController doesn't
        treat them specially (which is the reason you normally need a separate
        wrapper map).

        No new tests, no expected change in behavior.

        * bindings/scripts/CodeGeneratorV8.pm:
        (GetDomMapName):
        * bindings/v8/DOMDataStore.cpp:
        (WebCore::DOMDataStore::DOMDataStore):
        (WebCore::DOMDataStore::getDOMWrapperMap):
        * bindings/v8/DOMDataStore.h:
        (DOMDataStore):
        * bindings/v8/ScopedDOMDataStore.cpp:
        (WebCore::ScopedDOMDataStore::ScopedDOMDataStore):
        (WebCore::ScopedDOMDataStore::~ScopedDOMDataStore):
        * bindings/v8/StaticDOMDataStore.cpp:
        (WebCore::StaticDOMDataStore::StaticDOMDataStore):
        * bindings/v8/StaticDOMDataStore.h:
        (StaticDOMDataStore):
        * bindings/v8/V8DOMMap.cpp:
        (WebCore::removeAllDOMObjects):
        * bindings/v8/V8DOMMap.h:
        (WebCore):
        * bindings/v8/V8DOMWrapper.cpp:

2012-04-10  Noel Gordon  <noel.gordon@gmail.com>

        [Qt] Separate image encoding from dataURL construction
        https://bugs.webkit.org/show_bug.cgi?id=83132

        Reviewed by Noam Rosenthal.
        
        Remove the implicit assumption that a dataURL is the only desired output format
        of the image encoding phase.

        No new tests, refactoring only, covered by existing canvas tests.

        * platform/graphics/qt/ImageBufferQt.cpp:
        (WebCore::encodeImage): Output the encoded image to the provided QByteArray.
        (WebCore):
        (WebCore::ImageBuffer::toDataURL) Format the dataURL encoding of the mimeType
        encoded image data here. Clarify the comment.

2012-04-10  Patrick Gansterer  <paroga@webkit.org>

        Build fix for WinCE after r113730.

        * platform/FractionalLayoutUnit.h:
        (WebCore::FractionalLayoutUnit::isInBounds):

2012-04-10  Greg Billock  <gbillock@google.com>

        Add transfer map argument to Intent constructor
        http://dvcs.w3.org/hg/web-intents/raw-file/tip/spec/Overview.html
        This adds the ability to pass transferables (i.e. MessagePorts)
        through web intents, and puts the calling convention in line
        with the Web Messaging spec:
        http://dev.w3.org/html5/postmsg/

        Implementation in chromium API follows the port-passing method
        of PlatformMessagePortChannel.

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

        Reviewed by Adam Barth.

        * Modules/intents/Intent.cpp:
        (WebCore::Intent::create):
        * Modules/intents/Intent.idl:
        * WebCore.gypi:
        * bindings/v8/custom/V8IntentCustom.cpp: Added.
        (WebCore):
        (WebCore::V8Intent::constructorCallback):

2012-04-10  Patrick Gansterer  <paroga@webkit.org>

        Cleanup wtf/Platform.h and config.h files
        https://bugs.webkit.org/show_bug.cgi?id=83431

        Reviewed by Eric Seidel.

        The ENABLE() and USE() macros take care about the case when the flag
        isn't defined. So there is no need to define anything with 0.

        Also move duplicated code from the config.h files to Platform.h and
        merge a few preprocessor commands to make the file more readable.

        * config.h:

2012-04-10  Adam Barth  <abarth@webkit.org>

        Limit -apple- and -khtml- to ENABLE(DASHBOARD_SUPPORT)
        https://bugs.webkit.org/show_bug.cgi?id=83256

        Reviewed by Eric Seidel.

        As recommended by David Hyatt in
        <https://lists.webkit.org/pipermail/webkit-dev/2010-July/013536.html>,
        we should phase out support for -khtml- and -apple- vendor prefixes in
        CSS (in favor of -webkit-).

        As noted in <https://bugs.webkit.org/show_bug.cgi?id=42093#c29>, Dave's
        proposal is a bit too agressive.  These prefixes appear to be needed
        for a number of dashboard widgets.  For that reason, this patch limits
        the prefixes to ENABLE(LEGACY_CSS_VENDOR_PREFIXES).

        This patch enables ENABLE(LEGACY_CSS_VENDOR_PREFIXES) on apple-mac and
        apple-win, which will let us learn whether removing these prefixes
        causes a compatibility problem on the broader web.

        * Configurations/FeatureDefines.xcconfig:
        * bindings/js/JSCSSStyleDeclarationCustom.cpp:
        (WebCore::getCSSPropertyNamePrefix):
        (WebCore::cssPropertyIDForJSCSSPropertyName):
        * bindings/v8/custom/V8CSSStyleDeclarationCustom.cpp:
        (WebCore::cssPropertyInfo):
        * css/CSSParser.cpp:
        (WebCore::cssPropertyID):

2012-04-10  Levi Weintraub  <leviw@chromium.org>

        Clean up multiple RenderedPosition::absoluteRect definitions and correct LayoutUnit usage
        https://bugs.webkit.org/show_bug.cgi?id=83604

        Reviewed by Julien Chaffraix.

        Removing unnecessary definitions of absoluteRect and replacing them with a single public
        version that's more explicit about its contract.

        Also correcting a LayoutUnit misuse, as rects in absolute coordinates should be returned
        using integers, not LayoutUnits. See https://trac.webkit.org/wiki/LayoutUnit for details.

        No new tests. No change in behavior.

        * editing/Editor.cpp:
        (WebCore::Editor::firstRectForRange):
        * editing/RenderedPosition.cpp:
        (WebCore::RenderedPosition::absoluteRect): Pixel snapping the local rect before converting
        to absolute coordinates.
        * editing/RenderedPosition.h:
        (RenderedPosition):

2012-04-10  Yael Aharon  <yael.aharon@nokia.com>

        Initial support for fixed position elements in Qt WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=81786

        Reviewed by Noam Rosenthal.

        When the setting acceleratedCompositingForFixedPositionEnabled is true, we update
        the position of fixed layers, and send updates to the UI process as we scroll.
        Before painting, TextureMapperLayer receives a delta of the scroll positions between the UI 
        and the web processes, and adjusts its transform position accordingly.

        * page/FrameView.cpp:
        (WebCore::FrameView::setFixedVisibleContentRect):
        * platform/graphics/texmap/TextureMapperLayer.cpp:
        (WebCore::TextureMapperLayer::setScrollPositionDelta):
        (WebCore):
        * platform/graphics/texmap/TextureMapperLayer.h:
        (TextureMapperLayer):

2012-04-10  Peter Rybin  <peter.rybin@gmail.com>

        Web Inspector: CodeGeneratorInspector.py: do not expose raw methods from generated types
        https://bugs.webkit.org/show_bug.cgi?id=83390

        Reviewed by Yury Semikhatsky.

        Intermediate classes InspectorObjectBase and InspectorArrayBase are created. They have all raw methos
        protected. InspectorObject and InspectorArray now inherit the corresponding base classes with exposing
        all their protected methods.

        "Open types" are left inheriting from InspectorObject, plus field name constants are generated for
        an easy random access to all properties.

        All the client code is fixed to use type-safe API rather than raw access methods in function parameter
        and return types and bodies.

        * inspector/CodeGeneratorInspector.py:
        (RawTypes.Object):
        (RawTypes.Object.get_setter_name):
        (RawTypes.Array):
        (RawTypes.Array.get_setter_name):
        (TypeBindings.create_type_declaration_.ClassBinding.get_code_generator.CodeGenerator.generate_type_builder):
        (Array):
        (Generator):
        (Generator.resolve_type_and_generate_ad_hoc.InterfaceGenerateContext):
        (Generator.process_types.GenerateContext):
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::querySelectorAll):
        (WebCore::InspectorDOMAgent::getEventListenersForNode):
        (WebCore::InspectorDOMAgent::buildObjectForEventListener):
        * inspector/InspectorDOMAgent.h:
        (InspectorDOMAgent):
        * inspector/InspectorDOMDebuggerAgent.cpp:
        (WebCore::InspectorDOMDebuggerAgent::descriptionForDOMEvent):
        * inspector/InspectorDebuggerAgent.cpp:
        (WebCore::InspectorDebuggerAgent::setBreakpointByUrl):
        (WebCore::InspectorDebuggerAgent::didPause):
        * inspector/InspectorPageAgent.cpp:
        (WebCore::buildObjectForSearchResult):
        (WebCore::InspectorPageAgent::searchInResources):
        (WebCore::InspectorPageAgent::buildObjectForFrameTree):
        * inspector/InspectorResourceAgent.cpp:
        (WebCore::InspectorResourceAgent::didReceiveResponse):
        * inspector/InspectorStyleSheet.cpp:
        (WebCore::fillMediaListChain):
        (WebCore::InspectorStyle::styleWithProperties):
        * inspector/InspectorValues.cpp:
        (WebCore::InspectorObjectBase::~InspectorObjectBase):
        (WebCore::InspectorObjectBase::asObject):
        (WebCore::InspectorObjectBase::openAccessors):
        (WebCore):
        (WebCore::InspectorObjectBase::getBoolean):
        (WebCore::InspectorObjectBase::getString):
        (WebCore::InspectorObjectBase::getObject):
        (WebCore::InspectorObjectBase::getArray):
        (WebCore::InspectorObjectBase::get):
        (WebCore::InspectorObjectBase::remove):
        (WebCore::InspectorObjectBase::writeJSON):
        (WebCore::InspectorObjectBase::InspectorObjectBase):
        (WebCore::InspectorArrayBase::~InspectorArrayBase):
        (WebCore::InspectorArrayBase::asArray):
        (WebCore::InspectorArrayBase::writeJSON):
        (WebCore::InspectorArrayBase::InspectorArrayBase):
        (WebCore::InspectorArrayBase::get):
        * inspector/InspectorValues.h:
        (InspectorObjectBase):
        (InspectorObject):
        (WebCore::InspectorObject::create):
        (WebCore):
        (InspectorArrayBase):
        (WebCore::InspectorArrayBase::length):
        (InspectorArray):
        (WebCore::InspectorArray::create):
        (WebCore::InspectorObjectBase::find):
        (WebCore::InspectorObjectBase::setBoolean):
        (WebCore::InspectorObjectBase::setNumber):
        (WebCore::InspectorObjectBase::setString):
        (WebCore::InspectorObjectBase::setValue):
        (WebCore::InspectorObjectBase::setObject):
        (WebCore::InspectorObjectBase::setArray):
        (WebCore::InspectorArrayBase::pushBoolean):
        (WebCore::InspectorArrayBase::pushInt):
        (WebCore::InspectorArrayBase::pushNumber):
        (WebCore::InspectorArrayBase::pushString):
        (WebCore::InspectorArrayBase::pushValue):
        (WebCore::InspectorArrayBase::pushObject):
        (WebCore::InspectorArrayBase::pushArray):
        * inspector/TimelineRecordFactory.cpp:
        (WebCore::TimelineRecordFactory::createGenericRecord):

2012-04-10  Philip Rogers  <pdr@google.com>

        Remove unnecessary calls to RenderSVGShape::createShape()
        https://bugs.webkit.org/show_bug.cgi?id=83598

        Reviewed by Rob Buis.

        RenderSVGShape::strokeContains contains calls to fall back to path stroke hit detection
        in several cases (dashed strokes, for example). One of these cases, a check for isStyled,
        is not needed and is always true for Ellipses, Circles, and Rects (all styled elements).
        This change removes the check for isStyled.

        No new tests as this only affects performance, not test results.

        * rendering/svg/RenderSVGShape.cpp:
        (WebCore::RenderSVGShape::strokeContains):

2012-04-10  Dan Bernstein  <mitz@apple.com>

        <rdar://problem/10912486> CanvasRenderingContext2D does not expose its backing store resolution
        https://bugs.webkit.org/show_bug.cgi?id=83619

        Reviewed by Simon Fraser.

        Test: fast/canvas/2d.backingStorePixelRatio.html

        Added a backingStorePixelRatio attribute to CanvasRenderingContext2D, as proposed in
        <http://lists.whatwg.org/htdig.cgi/whatwg-whatwg.org/2012-March/035112.html>. The attribute
        is prefixed with “webkit” for now.

        * html/HTMLCanvasElement.h:
        (WebCore::HTMLCanvasElement::deviceScaleFactor): Added this getter.
        * html/canvas/CanvasRenderingContext2D.h:
        (WebCore::CanvasRenderingContext2D::webkitBackingStorePixelRatio): Added. Returns the canvas
        element’s device scale factor.
        (CanvasRenderingContext2D):
        * html/canvas/CanvasRenderingContext2D.idl: Added webkitBackingStorePixelRatio as a
        read-only attribute.

2012-04-10  Mario Sanchez Prada  <msanchez@igalia.com>

        Segmentation fault in JS drop-down menus in facebook.com
        https://bugs.webkit.org/show_bug.cgi?id=82896

        Reviewed by Chris Fleizach.

        Make sure changes introduced with r110819 affect to the Mac
        platform only, since they depend on platform specific behaviour,
        as not all the platforms treat attachments in the same way.

        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::updateChildrenIfNecessary):
        * accessibility/AccessibilityObject.h:
        (AccessibilityObject):
        (WebCore::AccessibilityObject::detachFromParent):
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore):
        (WebCore::AccessibilityRenderObject::addChildren):
        * accessibility/AccessibilityRenderObject.h:
        (AccessibilityRenderObject):
        * accessibility/mac/AccessibilityObjectMac.mm:
        (WebCore::AccessibilityObject::detachFromParent):
        (WebCore):

2012-04-10  Andreas Kling  <kling@webkit.org>

        REGRESSION(r113588): 15-30% perf. regression on CSS/CSSPropertySetterGetter.
        <http://webkit.org/b/83540>

        Reviewed by Antti Koivisto.

        Changed the behavior of getPropertyCSSValueInternal() to actually return the internal
        value rather than a cloned one. There is an assertion in the CSSValue bindings that
        will catch anyone trying to expose these values to the web.

        This avoids constructing "safe" CSSValue objects in the bindings layer, for the cases
        where we only want to extract the cssText or numeric value. These cloned objects are
        only needed when exposing fully-fledged CSSValues to the web, which must be tied to
        a single document.

        * css/CSSStyleDeclaration.h:
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValueInternal):
        * css/PropertySetCSSStyleDeclaration.cpp:
        (WebCore::PropertySetCSSStyleDeclaration::getPropertyCSSValueInternal):

2012-04-10  No'am Rosenthal  <noam.rosenthal@nokia.com>

        [Qt][WK2] Manage graphics buffers in the web process
        https://bugs.webkit.org/show_bug.cgi?id=78675

        Added WebCore::GraphicsSurface, a wrapper class to a platform-dependant
        surface that can be accessed efficiently by both the CPU and the GPU.
        This will allow fast texture uploads for WebKit2, and in the future
        fast copies for 2D canvas and WebGL.
        The first implementation is for Mac using IOSurfaces.

        TextureMapperGL had to be modified to use GL_UNSIGNED_INT_8_8_8_8_REV
        for textures on Mac, since that's the native pixel format of BGRA
        IOSurfaces.

        Though this feature is not written in a Qt-specific way, it's currently
        only enabled for Qt and is protected by USE(GRAPHICS_SURFACE).

        Reviewed by Kenneth Rohde Christiansen.

        Covered by existing API tests.

        * Target.pri:
        * WebCore.pri:
        * platform/graphics/surfaces/GraphicsSurface.cpp: Added.
        * platform/graphics/surfaces/GraphicsSurface.h: Added.
        * platform/graphics/surfaces/mac/GraphicsSurfaceMac.cpp: Added.
        * platform/graphics/surfaces/qt/GraphicsSurfaceQt.cpp: Added.
        (WebCore::GraphicsSurface::didReleaseImage):
        (WebCore):
        (WebCore::GraphicsSurface::platformBeginPaint):
        (WebCore::GraphicsSurface::createReadOnlyImage):
        * platform/graphics/texmap/TextureMapper.h:
        (WebCore::BitmapTexture::isOpenGLBacked):
        * platform/graphics/texmap/TextureMapperGL.cpp:
        (WebCore::toBitmapTextureGL):
        (WebCore):
        (WebCore::BitmapTextureGL::didReset):
        (WebCore::BitmapTextureGL::updateContents):
        * platform/graphics/texmap/TextureMapperGL.h:
        (WebCore::BitmapTextureGL::isOpenGLBacked):
        (WebCore):

2012-04-10  Alexei Filippov  <alexeif@chromium.org>

        Web Inspector: split nodes and edges array in heap profiler serialization.
        https://bugs.webkit.org/show_bug.cgi?id=83465

        Frontend is now able to read format when nodes and edges arrive
        in two separate arrays.

        Reviewed by Yury Semikhatsky.

        * inspector/front-end/HeapSnapshot.js:
        (WebInspector.HeapSnapshotLoader.prototype._parseIntArray):
        (WebInspector.HeapSnapshotLoader.prototype.pushJSONChunk):
        (WebInspector.HeapSnapshot):
        (WebInspector.HeapSnapshot.prototype._init):
        (WebInspector.HeapSnapshot.prototype._markQueriableHeapObjects):

2012-04-10  Dave Tharp  <dtharp@codeaurora.org>

        CSS box-shadow default color should be something other than transparent
        https://bugs.webkit.org/show_bug.cgi?id=58511

        Reviewed by Simon Fraser.

        If box-shadow or text-shadow color is not specified, color defaults to 
        the value specified in the 'color' property of the element (as specified in W3C 
        spec).

        Test: fast/text/text-shadow-no-default-color.html. Also existing
        tests ietestcenter/css3/box-shadow-002 and ietestcenter/css3/box-shadow-003

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

2012-04-10  Chris Rogers  <crogers@google.com>

        AudioParam must support connections from audio-rate signals
        https://bugs.webkit.org/show_bug.cgi?id=83524

        Reviewed by Eric Carlson.
        
        In the Web Audio API, it's possible to connect one AudioNode to another AudioNode.
        Similary we should allow an AudioNode to connect to an AudioParam, thus controlling
        a parameter with an audio-rate signal.  This is important in many audio processing
        applications.

        Test: webaudio/audioparam-connect-audioratesignal.html

        Simple method name change of AudioParam::hasTimelineValues() to AudioParam::hasSampleAccurateValues().
        * Modules/webaudio/AudioGainNode.cpp:
        (WebCore::AudioGainNode::process):

        * Modules/webaudio/AudioNode.cpp:
        (WebCore::AudioNode::connect): Add connect() method from AudioNode -> AudioParam.
        (WebCore):
        (WebCore::AudioNode::disconnect):
        (WebCore::AudioNode::finishDeref):
        Use AudioNodeOutput::disconnectAll() instead of AudioNodeOutput::disconnectAllInputs().
        * Modules/webaudio/AudioNode.h: Add connect() method from AudioNode -> AudioParam.
        (WebCore):
        (AudioNode):
        * Modules/webaudio/AudioNode.idl: Add connect() method from AudioNode -> AudioParam.

        Implement support for an AudioNodeOutput to fanout to multiple AudioParams.
        * Modules/webaudio/AudioNodeOutput.cpp:
        (WebCore::AudioNodeOutput::AudioNodeOutput):
        (WebCore::AudioNodeOutput::updateRenderingState): Update rendering state related to AudioParams.
        (WebCore::AudioNodeOutput::pull): pull() must now take into account fanout to AudioParams for in-place processing.
        (WebCore::AudioNodeOutput::fanOutCount):
        (WebCore):
        (WebCore::AudioNodeOutput::paramFanOutCount): New method keeping track of number of connections to AudioParams.
        (WebCore::AudioNodeOutput::renderingParamFanOutCount): New method keeping track of number of connections to AudioParams for rendering.
        (WebCore::AudioNodeOutput::addParam): Add a connection to an AudioParam.
        (WebCore::AudioNodeOutput::removeParam): Remove a connection to an AudioParam.
        (WebCore::AudioNodeOutput::disconnectAllParams): Remove all connections to AudioParams.
        (WebCore::AudioNodeOutput::disconnectAll): New method to disconnect all AudioNodeInputs and AudioParams.
        * Modules/webaudio/AudioNodeOutput.h:
        (AudioNodeOutput):

        Allow an AudioParam to accept a connection from an AudioNodeOutput, thus being controlled
        by an audio-rate signal.
        * Modules/webaudio/AudioParam.cpp:
        (WebCore::AudioParam::calculateSampleAccurateValues): Calculates sample-accurate values from timeline or an AudioNode.
        (WebCore):
        (WebCore::AudioParam::calculateAudioRateSignalValues): Calculates sample-accurate values from an AudioNode.
        (WebCore::AudioParam::calculateTimelineValues): Calculates sample-accurate values scheduled on the timeline.
        (WebCore::AudioParam::connect): Connect from an AudioNodeOutput for control from an audio-rate signal.
        (WebCore::AudioParam::disconnect): Disconnect from an AudioNodeOutput.
        * Modules/webaudio/AudioParam.h:
        (WebCore):
        (WebCore::AudioParam::AudioParam):
        (WebCore::AudioParam::hasSampleAccurateValues): Change name from hasTimelineValues() and return true
        either if we have timeline values or if we've been connected from an AudioNode.
        (AudioParam):

        Simple method name change of AudioParam::hasTimelineValues() to AudioParam::hasSampleAccurateValues().
        * Modules/webaudio/Oscillator.cpp:
        (WebCore::Oscillator::calculateSampleAccuratePhaseIncrements):
        (WebCore::Oscillator::process):

2012-04-10  Patrick Gansterer  <paroga@webkit.org>

        [CMake] Enable USE_FOLDERS property
        https://bugs.webkit.org/show_bug.cgi?id=83571

        Reviewed by Daniel Bates.

        Setting the FOLDER property on targets gives more structure 
        to the generated Visual Studio solutions.
        This does not affect other CMake generators.

        * CMakeLists.txt:

2012-04-10  Dominik Röttsches  <dominik.rottsches@linux.intel.com>

        [CMake] CMake SVG Code Generation fails to generate code for extra defines
        https://bugs.webkit.org/show_bug.cgi?id=83562

        Reviewed by Rob Buis.

        Fixing CMakeLists.txt to generate correct extra defines for SVG code generator.

        * CMakeLists.txt:

2012-04-10  Abhishek Arya  <inferno@chromium.org>

        Crash due to captions list not updated after section recalc.
        https://bugs.webkit.org/show_bug.cgi?id=83552

        Reviewed by Julien Chaffraix.

        Test: fast/table/table-caption-not-removed-crash.html

        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::addChild): no need to set the need for
        section recalc. It was needed in old code when we had more than
        one caption and we need to call section recalc to destroy the other
        captions.
        (WebCore::RenderTable::recalcSections): need to rebuild captions list.
        This is how the old code worked before r100177. Basically, children can
        moved without calling RenderTable::removeChild, so we should depend on
        recalcSections to update our captions list. Also, fix a style nit of aligning
        case labels with the switch statement.

2012-04-10  Anders Carlsson  <andersca@apple.com>

        Unreviewed, rolling out r113611.
        http://trac.webkit.org/changeset/113611
        https://bugs.webkit.org/show_bug.cgi?id=71541

        Broke fast/forms/basic-textareas.html

        * rendering/RenderBox.h:
        (RenderBox):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::hasHorizontalOverflow):
        (WebCore::RenderLayer::hasVerticalOverflow):

2012-04-10  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r113734.
        http://trac.webkit.org/changeset/113734
        https://bugs.webkit.org/show_bug.cgi?id=83606

        causing a bunch of unrelated test failures (Requested by
        simonjam on #webkit).

        * Modules/battery/BatteryController.cpp:
        * Modules/battery/BatteryController.h:
        (BatteryController):
        * Modules/battery/BatteryManager.cpp:
        (WebCore::BatteryManager::charging):
        (WebCore::BatteryManager::chargingTime):
        (WebCore::BatteryManager::dischargingTime):
        (WebCore::BatteryManager::level):
        * WebCore.gyp/WebCore.gyp:
        * WebCore.gypi:

2012-04-10  Adam Klein  <adamk@chromium.org>

        Add setJSWrapperForActiveDOMNode and use it for Nodes that are also ActiveDOMObjects
        https://bugs.webkit.org/show_bug.cgi?id=83528

        Reviewed by Kentaro Hara.

        Instead of using a run-time call to isActiveNode to determine which
        map to put a Node wrapper in, generate the proper call in the CodeGenerator.

        This was originally part of r112318, which got rolled out due to OOM concerns.
        I'm splitting it into smaller pieces so that each can be landed and
        watched for issues seperately.

        No new tests, no change in behavior.

        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateConstructorCallback): Use new GetDomMapName function to
        figure out which setJSWrapper to call.
        (GenerateNamedConstructorCallback): ditto.
        (GetDomMapFunction): Delegate to GetDomMapName for logic.
        (GetDomMapName): New helper factored out of GetDomMapFunction.
        * bindings/v8/V8DOMWrapper.cpp:
        (WebCore::V8DOMWrapper::setJSWrapperForDOMNode): Assert !isActiveNode instead of branching on it.
        (WebCore::V8DOMWrapper::setJSWrapperForActiveDOMNode): New method split ouf of the above.
        Assert isActiveNode instead of branching on it.
        * bindings/v8/V8DOMWrapper.h:
        (V8DOMWrapper):

2012-04-10  Luke Macpherson  <macpherson@chromium.org>

        Pass PropertyHandler by reference in CSSStyleApplyProperty.h.
        https://bugs.webkit.org/show_bug.cgi?id=83551

        Reviewed by Kentaro Hara.

        No new tests / cleanup only.

        * css/CSSStyleApplyProperty.h:
        (WebCore::CSSStyleApplyProperty::setPropertyHandler):

2012-04-10  Luke Macpherson  <macpherson@chromium.org>

        Pass FontDescription as const reference instead of by value in CSSStyleSelector.h.
        https://bugs.webkit.org/show_bug.cgi?id=83548

        Reviewed by Kentaro Hara.

        FontDescription is relatively large, so pass-by-reference is preferred.

        No new tests / code cleanup only.

        * css/CSSStyleSelector.h:
        (WebCore::CSSStyleSelector::fontDescription):
        (WebCore::CSSStyleSelector::parentFontDescription):
        (WebCore::CSSStyleSelector::setFontDescription):

2012-04-10  Adam Klein  <adamk@chromium.org>

        Add TestNode.idl to run-binding-tests
        https://bugs.webkit.org/show_bug.cgi?id=83599

        Reviewed by Adam Barth.

        TestNode.idl is a minimized version of Node.idl with enough attributes
        to exercise CodeGenerator.pm's handling of Node subtypes.

        * bindings/scripts/test/CPP/WebDOMTestNode.cpp: Added.
        * bindings/scripts/test/CPP/WebDOMTestNode.h: Added.
        * bindings/scripts/test/GObject/WebKitDOMTestNode.cpp: Added.
        * bindings/scripts/test/GObject/WebKitDOMTestNode.h: Added.
        * bindings/scripts/test/GObject/WebKitDOMTestNodePrivate.h: Added.
        * bindings/scripts/test/JS/JSTestNode.cpp: Added.
        * bindings/scripts/test/JS/JSTestNode.h: Added.
        * bindings/scripts/test/ObjC/DOMTestNode.h: Added.
        * bindings/scripts/test/ObjC/DOMTestNode.mm: Added.
        * bindings/scripts/test/ObjC/DOMTestNodeInternal.h: Added.
        * bindings/scripts/test/TestNode.idl: Added.
        * bindings/scripts/test/V8/V8TestNode.cpp: Added.
        * bindings/scripts/test/V8/V8TestNode.h: Added.

2012-04-10  David Barton  <dbarton@mathscribe.com>

        msqrt's implied mrow should do operator stretching
        https://bugs.webkit.org/show_bug.cgi?id=82353

        Reviewed by Julien Chaffraix.

        An <msqrt> with more than one child is supposed to surround them with an implied <mrow>.
        This patch does this, and thus includes vertical operator stretching. We also fix some
        problems with the old RenderMathMLSquareRoot.cpp: possibly shared RenderStyles were
        being modified, and layout() was using heights of children without checking whether they
        needed layout themselves first.
        
        To leave room for the radical sign, we use intrinsic padding. This is simpler and more
        efficient than using anonymous RenderStyles.

        Added tests to mo-stretch.html and style.xhtml. Regression tests are in roots.xhtml.

        * css/mathml.css:
        (msqrt):
        * rendering/RenderBoxModelObject.h:
        (RenderBoxModelObject):
        * rendering/mathml/RenderMathMLBlock.cpp:
        (WebCore::RenderMathMLBlock::RenderMathMLBlock):
        (WebCore::RenderMathMLBlock::paddingTop):
        (WebCore::RenderMathMLBlock::paddingBottom):
        (WebCore::RenderMathMLBlock::paddingLeft):
        (WebCore::RenderMathMLBlock::paddingRight):
        (WebCore::RenderMathMLBlock::paddingBefore):
        (WebCore::RenderMathMLBlock::paddingAfter):
        (WebCore::RenderMathMLBlock::paddingStart):
        (WebCore::RenderMathMLBlock::paddingEnd):
        * rendering/mathml/RenderMathMLBlock.h:
        (RenderMathMLBlock):
        * rendering/mathml/RenderMathMLRow.cpp:
        (WebCore::RenderMathMLRow::RenderMathMLRow):
        (WebCore::RenderMathMLRow::createAnonymousWithParentRenderer):
        * rendering/mathml/RenderMathMLRow.h:
        (RenderMathMLRow):
        * rendering/mathml/RenderMathMLSquareRoot.cpp:
        (WebCore):
        (WebCore::RenderMathMLSquareRoot::addChild):
        (WebCore::RenderMathMLSquareRoot::computePreferredLogicalWidths):
        (WebCore::RenderMathMLSquareRoot::computeLogicalHeight):
        (WebCore::RenderMathMLSquareRoot::layout):
        (WebCore::RenderMathMLSquareRoot::paint):
        * rendering/mathml/RenderMathMLSquareRoot.h:
        (RenderMathMLSquareRoot):

2012-04-10  Luke Macpherson  <macpherson@chromium.org>

        Don't allow fallthrough for CSSPropertyBaselineShift in CSSComputedStyleDeclaration::getSVGPropertyCSSValue().
        https://bugs.webkit.org/show_bug.cgi?id=83536

        Reviewed by Daniel Bates.

        Add a return statement to the case CSSPropertyBaselineShift so that we don't fall through to the next case statement.

        No new tests / code cleanup from coverity static analysis.

        * css/SVGCSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getSVGPropertyCSSValue):

2012-04-10  Alejandro G. Castro  <alex@igalia.com>

        [GTK] Build fix TextureMapper compilation and solve warning.

        Reviewed by Martin Robinson.

        * platform/graphics/texmap/TextureMapperGL.cpp:
        (WebCore::BitmapTextureGL::updateContents):
        * platform/graphics/texmap/TextureMapperShaderManager.h:
        (WebCore::TextureMapperShaderManager::getShaderProgram):

2012-04-10  Noel Gordon  <noel.gordon@gmail.com>

        [GTK] Separate image encoding from dataURL construction
        https://bugs.webkit.org/show_bug.cgi?id=83152

        Reviewed by Martin Robinson.

        Remove the implicit assumption that a dataURL is the only desired output format
        of the image encoding phase.

        No new tests, refactoring only, covered by existing canvas tests.

        * platform/graphics/gtk/ImageBufferGtk.cpp:
        (WebCore::encodeImage): Output the encoded image to the provided GOwnPtr<gchar>&
        buffer. Update GTK document reference to a valid URL. Round the quality argument
        to an int like the toDataURL() implementations of other ports. Ditch the success
        variable; instead test the GError* error return to indicate success.
        (WebCore):
        (WebCore::ImageBuffer::toDataURL): Format the dataURL encoding of the mimeType
        encoded image data buffer herein.

2012-04-09  James Robinson  <jamesr@chromium.org>

        [chromium] Defer texture id allocation for copies until the actual copy executes
        https://bugs.webkit.org/show_bug.cgi?id=83514

        Reviewed by Adrienne Walker.

        This allows for queuing a texture copy operation into a ManagedTexture whose texture ID has not yet been
        allocated. The ManagedTexture* serves as a promise that an ID will be available when the copy is executed.

        * platform/graphics/chromium/Canvas2DLayerChromium.cpp:
        (WebCore::Canvas2DLayerChromium::updateCompositorResources):
        * platform/graphics/chromium/cc/CCSingleThreadProxy.cpp:
        (WebCore::CCSingleThreadProxy::doCommit):
        * platform/graphics/chromium/cc/CCTextureUpdater.cpp:
        (WebCore::CCTextureUpdater::CCTextureUpdater):
        (WebCore::CCTextureUpdater::appendManagedCopy):
        (WebCore):
        (WebCore::CCTextureUpdater::hasMoreUpdates):
        (WebCore::CCTextureUpdater::update):
        (WebCore::CCTextureUpdater::clear):
        * platform/graphics/chromium/cc/CCTextureUpdater.h:
        (CCTextureUpdater):
        (ManagedCopyEntry):
        * platform/graphics/chromium/cc/CCThreadProxy.cpp:
        (WebCore::CCThreadProxy::beginFrameCompleteOnImplThread):
        (WebCore::CCThreadProxy::scheduledActionUpdateMoreResources):

2012-04-10  David Hyatt  <hyatt@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=83595
        <rdar://problem/10443278> Overlapping text in table cell across column break

        If a cell's height changes such that it is taller than the overall row height because
        of pagination, then grow the entire row height to enclose the cell instead of shrinking
        the cell.

        Reviewed by Dan Bernstein.

        Added fast/multicol/cell-shrinkback.html

        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::layoutRows):

2012-04-10  Luke Macpherson  <macpherson@chromium.org>

        Remove unnecessary null check in void SimplifyMarkupCommand::doApply().
        https://bugs.webkit.org/show_bug.cgi?id=83535

        Reviewed by Kentaro Hara.

        No new tests / code cleanup only.

        currentNode cannot be null within the loop body.
        It is dereferenced before and after the removed line without checking.
        Additionally I have added an assertion to express this loop invariant.

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

2012-04-10  David Dorwin  <ddorwin@chromium.org>

        Add Encrypted Media Extensions methods to HTMLMediaElement
        https://bugs.webkit.org/show_bug.cgi?id=82971

        Reviewed by Adam Barth.

        The extensions are behind the ENABLE(ENCRYPTED_MEDIA) feature define.
        Implementation is based on v0.1 of the draft proposal at
        http://dvcs.w3.org/hg/html-media/raw-file/tip/encrypted-media/encrypted-media.html.

        Tests: media/encrypted-media/encrypted-media-not-loaded.html
               media/encrypted-media/encrypted-media-syntax.html

        * bindings/generic/RuntimeEnabledFeatures.cpp:
        (WebCore):
        * bindings/generic/RuntimeEnabledFeatures.h:
        (RuntimeEnabledFeatures):
        (WebCore::RuntimeEnabledFeatures::webkitEncryptedMediaEnabled):
        (WebCore::RuntimeEnabledFeatures::setWebkitEncryptedMediaEnabled):
        * html/HTMLMediaElement.cpp:
        (WebCore):
        (WebCore::exceptionCodeForMediaKeyException):
        (WebCore::HTMLMediaElement::webkitGenerateKeyRequest):
        (WebCore::HTMLMediaElement::webkitAddKey):
        (WebCore::HTMLMediaElement::webkitCancelKeyRequest):
        (WebCore::HTMLMediaElement::setVolume):
        (WebCore::HTMLMediaElement::togglePlayState):
        (WebCore::HTMLMediaElement::beginScrubbing):
        (WebCore::HTMLMediaElement::addTextTrack):
        (WebCore::HTMLMediaElement::textTracks):
        (WebCore::HTMLMediaElement::showingTrackWithSameKind):
        (WebCore::HTMLMediaElement::didAddTrack):
        * html/HTMLMediaElement.h:
        * html/HTMLMediaElement.idl:
        * platform/graphics/MediaPlayer.cpp:
        (NullMediaPlayerPrivate):
        (WebCore):
        (WebCore::MediaPlayer::generateKeyRequest):
        (WebCore::MediaPlayer::addKey):
        (WebCore::MediaPlayer::cancelKeyRequest):
        * platform/graphics/MediaPlayer.h:
        * platform/graphics/MediaPlayerPrivate.h:
        (MediaPlayerPrivateInterface):
        (WebCore::MediaPlayerPrivateInterface::addKey):
        (WebCore::MediaPlayerPrivateInterface::generateKeyRequest):
        (WebCore::MediaPlayerPrivateInterface::cancelKeyRequest):

2012-04-10  Sadrul Habib Chowdhury  <sadrul@chromium.org>

        [chromium] Add Battery Status API support.

        Add Battery Status API support to chromium.
        https://bugs.webkit.org/show_bug.cgi?id=83284

        Reviewed by Adam Barth.

        This change is covered by tests in batterystatus/.

        * Modules/battery/BatteryController.cpp:
        (WebCore::BatteryController::updateBatteryStatus):
        (WebCore):
        * Modules/battery/BatteryController.h:
        (BatteryController):
        * Modules/battery/BatteryManager.cpp:
        (WebCore::BatteryManager::charging):
        (WebCore::BatteryManager::chargingTime):
        (WebCore::BatteryManager::dischargingTime):
        (WebCore::BatteryManager::level):
        * WebCore.gyp/WebCore.gyp:
        * WebCore.gypi:

2012-04-09  Zhenyao Mo  <zmo@google.com>

        getShaderFormatPrecision should return sensible values
        https://bugs.webkit.org/show_bug.cgi?id=83520

        Reviewed by Kenneth Russell.

        * platform/graphics/opengl/GraphicsContext3DOpenGL.cpp: Fix getShaderPrecisionFormat values.
        (WebCore::GraphicsContext3D::getShaderPrecisionFormat):
        * platform/graphics/qt/GraphicsContext3DQt.cpp: Ditto.
        (WebCore::GraphicsContext3D::getShaderPrecisionFormat):

2012-04-10  Alexander Pavlov  <apavlov@chromium.org>

        Web Inspector: Add Galaxy Nexus to the list of emulated user agents
        https://bugs.webkit.org/show_bug.cgi?id=83589

        The new record contains the device display metrics and the User Agent string.

        Reviewed by Pavel Feldman.

        * inspector/front-end/SettingsScreen.js:
        (WebInspector.SettingsScreen.prototype._createUserAgentSelectRowElement.get const):

2012-04-10  Emil A Eklund  <eae@chromium.org>

        Add missing methods and operators to FractionalLayoutUnit
        https://bugs.webkit.org/show_bug.cgi?id=82403

        Reviewed by Eric Seidel.

        Add missing methods and operators and from branch version of
        FractionalLayoutUnit. Also fix overflow assertion and add const keyword
        to a couple of methods.

        No new tests.

        * platform/FractionalLayoutUnit.h:
        (WebCore::FractionalLayoutUnit::abs):
        (FractionalLayoutUnit):
        (WebCore::FractionalLayoutUnit::ceil):
        (WebCore::FractionalLayoutUnit::round):
        (WebCore::FractionalLayoutUnit::floor):
        (WebCore::FractionalLayoutUnit::isInBounds):
        (WebCore::operator<):
        (WebCore):
        (WebCore::operator-):

2011-12-14  Jer Noble  <jer.noble@apple.com>

        WebAudio: propagate a silence hint through the AudioNode graph.
        https://bugs.webkit.org/show_bug.cgi?id=74553

        Reviewed by Chris Rogers.

        No new tests; optimization of existing code path, so covered by existing tests.

        Introduce the concept of a "silent" channel:
        * platform/audio/AudioChannel.h:
        (WebCore::AudioChannel::AudioChannel):
        (WebCore::AudioChannel::set): Clear silent bit.
        (WebCore::AudioChannel::zero): Set silent bit.
        (WebCore::AudioChannel::clearSilentFlag): Clear silent bit.
        (WebCore::AudioChannel::isSilent): Accessor.

        Optimize a few channel operations when the source or destination channels are silent.
        * platform/audio/AudioChannel.cpp:
        (WebCore::AudioChannel::scale): No-op on a silent channel.
        (WebCore::AudioChannel::copyFrom): zero() when source is silent.
        (WebCore::AudioChannel::copyFromRange): possibly zero() when source is silent.
        (WebCore::AudioChannel::sumFrom): No-op when source is silent.
        (WebCore::AudioChannel::maxAbsValue): 0 on a silent channel.

        Optimize a few bus operations when the source or destination channels are silent.
        * platform/audio/AudioBus.cpp:
        (WebCore::AudioBus::processWithGainFromMonoStereo): No-op if source is silent and either
            the destination bus is silent, or the output is not summed to the destination.
        (WebCore::AudioBus::copyWithSampleAccurateGainValuesFrom): zero() if the source is silent
            and the lengths of the gain values, source, and destination match.
        (WebCore::AudioBus::createBySampleRateConverting): Return an empty bus if the source is silent.
        (WebCore::AudioBus::createByMixingToMono): Ditto; clear the destination's silent bit otherwise.
        (WebCore::AudioBus::isSilent): Return whether all channels are silent.
        (WebCore::AudioBus::clearSilentFlag): Clear silent bit of constituent channels.
        * platform/audio/AudioBus.h:

        Make sure that classes which generate audio clear their busses' silent bit.
        * webaudio/AudioBufferSourceNode.cpp:
        (WebCore::AudioBufferSourceNode::process): Ditto.
        (WebCore::AudioBufferSourceNode::renderFromBuffer): Ditto.
        (WebCore::AudioBufferSourceNode::propagatesSilence): Propagate silence only when the source node
            has nothing left to render.
        * webaudio/AudioBufferSourceNode.h:
        (WebCore::AudioBufferSourceNode::playbackState): Made const correct.
        (WebCore::AudioBufferSourceNode::isPlaying): Added simple accessor.
        (WebCore::AudioBufferSourceNode::hasFinished): Ditto.
        * webaudio/AudioDestinationNode.h:
        (WebCore::AudioDestinationNode::currentSampleFrame): Made const correct.
        (WebCore::AudioDestinationNode::currentTime): Ditto.

        Audio nodes should not process audio data when the input is silent and the nodes will propagate silences.
        * webaudio/AudioNode.cpp:
        (WebCore::AudioNode::processIfNecessary): 
        (WebCore::AudioNode::inputsAreSilent): Convenience function which walk over the node's inputs.
        (WebCore::AudioNode::silenceOutputs): Ditto.
        (WebCore::AudioNode::unsilenceOutputs): Ditto.
        * webaudio/AudioNode.h:
        (WebCore::AudioNode::propagatesSilence):

        These Nodes can generate audio when given silent input, so return false from propagatesSilence.
        * Modules/webaudio/Oscillator.h:
        (WebCore::Oscillator::propagatesSilence): Added.

2012-04-10  Yi Shen  <yi.4.shen@nokia.com>

        Pressing enter on blank line after bullet deletes entire bulleted line.
        https://bugs.webkit.org/show_bug.cgi?id=82690

        Reviewed by Enrica Casucci.

        In CompositeEditCommand::breakOutOfEmptyListItem(), it checks the empty list item's renderer's siblings
        to decide which empty part of the list should be removed. However, if the empty list item's renderer is
        wrapped by an anonymous block, e.g. <ul><li>hello</li><br>^</ul>, the check may fail. So, we use isListItem
        on the empty list node's siblings instead.

        No new tests : added new test case in the existing test (break-out-of-empty-list-item.html)

        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::breakOutOfEmptyListItem):

2012-04-10  Alexander Pavlov  <apavlov@chromium.org>

        Web Inspector: Inspect Element - Edit as HTML - scrolling bug
        https://bugs.webkit.org/show_bug.cgi?id=83563

        mousedown in the scrollbar focuses the Elements tree outline container DIV element,
        so the corresponding mousedown event should be consumed in the AT_TARGET phase.

        Reviewed by Yury Semikhatsky.

        * inspector/front-end/ElementsTreeOutline.js:
        (WebInspector.ElementsTreeElement.prototype._startEditingAsHTML.consume):
        (WebInspector.ElementsTreeElement.prototype._startEditingAsHTML.dispose):
        (WebInspector.ElementsTreeElement.prototype._startEditingAsHTML):

2012-04-10  Dinu Jacob  <dinu.jacob@nokia.com>

        Remove the unused function WebCore::toIconIndex
        https://bugs.webkit.org/show_bug.cgi?id=83037

        Reviewed by Kentaro Hara.

        * WebCore.order:
        * dom/IconURL.cpp:
        * dom/IconURL.h:
        (WebCore):

2012-04-10  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: make error a string on the front-end side, not an object.
        https://bugs.webkit.org/show_bug.cgi?id=83570

        Reviewed by Yury Semikhatsky.

        We already expect it to be a string in all the code, we never use the error code in it.

        * inspector/front-end/InspectorBackend.js:
        (InspectorBackendClass.prototype.dispatch):

2012-04-10  Rob Buis  <rbuis@rim.com>

        getElementsByTagName unable to find SVG camelCase elements imported into HTML
        https://bugs.webkit.org/show_bug.cgi?id=46800

        Reviewed by Nikolas Zimmermann.

        Implement getElementsByTagName according to the algorithm in
        http://dvcs.w3.org/hg/domcore/raw-file/tip/Overview.html#concept-getelementsbytagname.
        If the owner document of the element is html, the new class HTMLTagNodeList deals with
        finding the match(es) based on this algorithm. If the owner document is non HTML, the existing
        TagNodeList is used.

        Implement getElementsByTagNameNS according to the algorithm in
        http://dvcs.w3.org/hg/domcore/raw-file/tip/Overview.html#concept-getelementsbytagnamens.
        The existing TagNodeList implements this algorithm.

        Cached results may have less hits after this change. Tag names that are equal when case
        insensitive but different when case sensitive can't share the result due to above algorithms, i.e.
        they would match differently in the non html part of the document.

        Tests: fast/dom/getElementsByTagName-localName-matching.html
               fast/dom/getElementsByTagName-localName-matching2.xhtml
               svg/dom/getElementsByTagName-localName-matching.html

        * dom/Node.cpp:
        (WebCore::Node::getElementsByTagName): create TagNodeList depending on owner document type.
        (WebCore::Node::getElementsByTagNameNS): do not lowercase localName for html.
        * dom/TagNodeList.cpp:
        (WebCore::HTMLTagNodeList::HTMLTagNodeList): add specialized TagNodeList for html matching rules.
        (WebCore):
        (WebCore::HTMLTagNodeList::nodeMatches):
        * dom/TagNodeList.h:
        (TagNodeList):
        (HTMLTagNodeList):
        (WebCore::HTMLTagNodeList::create):

2012-04-09  Alexander Pavlov  <apavlov@chromium.org>

        Web Inspector: [Device Metrics] Introduce the "Fit window" option
        https://bugs.webkit.org/show_bug.cgi?id=83280

        This change adds the "Fit window" option to the Settings pane of Web Inspector, which lets users
        resize the FrameView to fit the WebViewImpl size. When the user resizes the browser window
        in the device metrics override mode with the option enabled, the FrameView follows
        to match WebViewImpl by at least one dimension.

        Reviewed by Pavel Feldman.

        * English.lproj/localizedStrings.js:
        * inspector/Inspector.json:
        * inspector/InspectorClient.h:
        (WebCore::InspectorClient::overrideDeviceMetrics):
        (WebCore::InspectorClient::autoZoomPageToFitWidth):
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::shouldApplyScreenWidthOverrideImpl):
        (WebCore):
        (WebCore::InspectorInstrumentation::shouldApplyScreenHeightOverrideImpl):
        * inspector/InspectorInstrumentation.h:
        (InspectorInstrumentation):
        (WebCore::InspectorInstrumentation::shouldApplyScreenWidthOverride):
        (WebCore):
        (WebCore::InspectorInstrumentation::shouldApplyScreenHeightOverride):
        * inspector/InspectorPageAgent.cpp:
        (PageAgentState):
        (WebCore::InspectorPageAgent::restore):
        (WebCore::InspectorPageAgent::disable):
        (WebCore::InspectorPageAgent::setDeviceMetricsOverride):
        (WebCore::InspectorPageAgent::updateViewMetrics):
        * inspector/InspectorPageAgent.h:
        * inspector/front-end/Settings.js:
        * inspector/front-end/SettingsScreen.js:
        (WebInspector.SettingsScreen.prototype._createDeviceMetricsElement):
        * inspector/front-end/UserAgentSupport.js:
        * inspector/front-end/helpScreen.css:
        (.help-content input[type=checkbox]):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::innerHeight):
        (WebCore::DOMWindow::innerWidth):

2012-04-10  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: use maxJSObjectId that is provided by back-end.
        https://bugs.webkit.org/show_bug.cgi?id=82451

        Summary view can filter objects in snapshot. It uses maxJSObjectId for this.
        There was no such field in the profile header at the
        moment but I've landed a patch in downstream.

        Reviewed by Yury Semikhatsky.

        * bindings/js/ScriptHeapSnapshot.h:
        (WebCore):
        (WebCore::ScriptHeapSnapshot::maxSnapshotJSObjectId):
        * bindings/v8/ScriptHeapSnapshot.cpp:
        (WebCore::ScriptHeapSnapshot::maxSnapshotJSObjectId):
        (WebCore):
        * bindings/v8/ScriptHeapSnapshot.h:
        (WebCore):
        (ScriptHeapSnapshot):
        * inspector/InspectorProfilerAgent.cpp:
        (WebCore::InspectorProfilerAgent::createSnapshotHeader):
        * inspector/front-end/DetailedHeapshotView.js:
        (WebInspector.HeapSnapshotConstructorsDataGrid):
        (WebInspector.HeapSnapshotConstructorsDataGrid.prototype.setDataSource):
        (WebInspector.HeapSnapshotConstructorsDataGrid.prototype.populateChildren):
        (WebInspector.HeapSnapshotConstructorsDataGrid.prototype._filterSelectIndexChanged):
        (WebInspector.DetailedHeapshotView.prototype._changeFilter):
        * inspector/front-end/HeapSnapshot.js:
        (WebInspector.HeapSnapshot.prototype.updateStaticData):
        * inspector/front-end/HeapSnapshotProxy.js:

2012-04-09  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: annotate front-end for newer closure compiler.
        https://bugs.webkit.org/show_bug.cgi?id=83478

        Reviewed by Yury Semikhatsky.

        This change mostly adds annotations to bound functions and !!bool expressions. 
        As a result, it makes closure compiler v20120305 happy.

        * inspector/Inspector.json:
        * inspector/front-end/BreakpointManager.js:
        * inspector/front-end/CSSStyleModel.js:
        * inspector/front-end/ConsoleView.js:
        (WebInspector.ConsoleView.prototype.evalInInspectedWindow.evalCallback):
        (WebInspector.ConsoleView.prototype.evalInInspectedWindow):
        * inspector/front-end/DOMAgent.js:
        (WebInspector.DOMNode.prototype.removeAttribute):
        (WebInspector.DOMAgent.prototype.pushNodeToFrontend):
        * inspector/front-end/DebuggerModel.js:
        * inspector/front-end/DebuggerPresentationModel.js:
        (WebInspector.DebuggerPresentationModelResourceBinding.prototype.canSetContent):
        * inspector/front-end/ElementsPanel.js:
        * inspector/front-end/ExtensionServer.js:
        (WebInspector.ExtensionServer.prototype._onEvaluateOnInspectedPage):
        * inspector/front-end/ObjectPropertiesSection.js:
        * inspector/front-end/RemoteObject.js:
        * inspector/front-end/Resource.js:
        (WebInspector.ResourceDomainModelBinding.prototype.canSetContent):
        * inspector/front-end/ResourceUtils.js:
        * inspector/front-end/ScopeChainSidebarPane.js:
        * inspector/front-end/Script.js:
        (WebInspector.Script.prototype.editSource):
        * inspector/front-end/ScriptFormatter.js:
        (WebInspector.ScriptFormatter.prototype.get _worker):
        * inspector/front-end/WorkerManager.js:

2012-04-09  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: searching document with no documentElement results in 0x0 access.
        https://bugs.webkit.org/show_bug.cgi?id=83483

        Reviewed by Yury Semikhatsky.

        Added the null check.

        Test: inspector/elements/dom-search-crash.html

        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::performSearch):

2012-04-10  Patrick Gansterer  <paroga@webkit.org>

        [CMake] Add missing source files to build system

        * CMakeLists.txt:

2012-04-10  Kentaro Hara  <haraken@chromium.org>

        Unreviewed. Fixed AppleWin and Chromium-win build failure.

        Renamed 'exceptionNameDescription' to per-file variable name to avoid
        name conflict.

        * Modules/indexeddb/IDBDatabaseException.cpp:
        (WebCore::IDBDatabaseException::initializeDescription):
        * Modules/webdatabase/SQLException.cpp:
        (WebCore::SQLException::initializeDescription):
        * dom/EventException.cpp:
        (WebCore::EventException::initializeDescription):
        * dom/RangeException.cpp:
        (WebCore::RangeException::initializeDescription):
        * fileapi/FileException.cpp:
        (WebCore::FileException::initializeDescription):
        * fileapi/OperationNotAllowedException.cpp:
        (WebCore::OperationNotAllowedException::initializeDescription):
        * svg/SVGException.cpp:
        (WebCore::SVGException::initializeDescription):
        * xml/XPathException.cpp:
        (WebCore::XPathException::initializeDescription):

2012-04-10  Kentaro Hara  <haraken@chromium.org>

        Unreviewed. Fixed AppleWin and Chromium-win build failure.

        Renamed 'exceptions' to 'exceptionNameDescription' to avoid
        variable name conflict.

        * Modules/indexeddb/IDBDatabaseException.cpp:
        (WebCore::IDBDatabaseException::initializeDescription):
        * Modules/webdatabase/SQLException.cpp:
        (WebCore::SQLException::initializeDescription):
        * dom/EventException.cpp:
        (WebCore::EventException::initializeDescription):
        * dom/RangeException.cpp:
        (WebCore::RangeException::initializeDescription):
        * fileapi/FileException.cpp:
        (WebCore::FileException::initializeDescription):
        * fileapi/OperationNotAllowedException.cpp:
        (WebCore::OperationNotAllowedException::initializeDescription):
        * svg/SVGException.cpp:
        (WebCore::SVGException::initializeDescription):
        * xml/XPathException.cpp:
        (WebCore::XPathException::initializeDescription):

2012-04-09  Lu Guanqun  <guanqun.lu@intel.com>

        combine two arrays in XPathException into one
        https://bugs.webkit.org/show_bug.cgi?id=83442

        Reviewed by Kentaro Hara.

        No new tests required.

        * xml/XPathException.cpp:
        (XPathExceptionNameDescription):
        (WebCore):
        (WebCore::XPathException::initializeDescription):

2012-04-09  Lu Guanqun  <guanqun.lu@intel.com>

        combine exceptionNames and exceptionDescriptions in IDBDatabaseException.cpp into one array
        https://bugs.webkit.org/show_bug.cgi?id=83433

        Reviewed by Kentaro Hara.

        No new tests required.

        * Modules/indexeddb/IDBDatabaseException.cpp:
        (IDBDatabaseExceptionNameDescription):
        (WebCore):
        (WebCore::IDBDatabaseException::initializeDescription):

2012-04-09  Lu Guanqun  <guanqun.lu@intel.com>

        combine two arrays in SQLException.cpp into one
        https://bugs.webkit.org/show_bug.cgi?id=83452

        Reviewed by Kentaro Hara.

        No new tests required.

        * Modules/webdatabase/SQLException.cpp:
        (SQLExceptionNameDescription):
        (WebCore):
        (WebCore::SQLException::initializeDescription):

2012-04-09  Lu Guanqun  <guanqun.lu@intel.com>

        combine two arrays in EventException.cpp into one
        https://bugs.webkit.org/show_bug.cgi?id=83451

        Reviewed by Kentaro Hara.

        No new tests required.

        * dom/EventException.cpp:
        (EventExceptionNameDescription):
        (WebCore):
        (WebCore::EventException::initializeDescription):

2012-04-09  Lu Guanqun  <guanqun.lu@intel.com>

        combine two arrays in RangeException.cpp into one
        https://bugs.webkit.org/show_bug.cgi?id=83450

        Reviewed by Kentaro Hara.

        No new tests required.

        * dom/RangeException.cpp:
        (RangeExceptionNameDescription):
        (WebCore):
        (WebCore::RangeException::initializeDescription):

2012-04-09  No'am Rosenthal  <noam.rosenthal@nokia.com>

        [Texmap] Improve TextureMapperGL readability
        https://bugs.webkit.org/show_bug.cgi?id=83477

        Change the debugging macros for TextureMapperGL, so that the GL_CMD call can include a semicolon.
        Modify some if blocks to have an early return.

        Reviewed by Martin Robinson.

        No new functionality.

        * platform/graphics/texmap/TextureMapperGL.cpp:
        (WebCore::TextureMapperGLData::SharedGLData::scissorClip):
        (WebCore::TextureMapperGLData::SharedGLData::applyCurrentClip):
        (WebCore::TextureMapperGLData::SharedGLData::~SharedGLData):
        (WebCore::TextureMapperGLData::initializeStencil):
        (WebCore::TextureMapperGL::beginPainting):
        (WebCore::TextureMapperGL::endPainting):
        (WebCore::TextureMapperGL::drawTexture):
        (WebCore::BitmapTextureGL::didReset):
        (WebCore::BitmapTextureGL::updateContents):
        (WebCore::BitmapTextureGL::initializeStencil):
        (WebCore::BitmapTextureGL::bind):
        (WebCore::BitmapTextureGL::~BitmapTextureGL):
        (WebCore::TextureMapperGL::bindSurface):
        (WebCore::TextureMapperGL::beginClip):

2012-04-09  Lu Guanqun  <guanqun.lu@intel.com>

        combine two arrays in FileException.cpp into one
        https://bugs.webkit.org/show_bug.cgi?id=83449

        Reviewed by Kentaro Hara.

        No new tests required.

        * fileapi/FileException.cpp:
        (FileExceptionNameDescription):
        (WebCore):
        (WebCore::FileException::initializeDescription):

2012-04-09  Lu Guanqun  <guanqun.lu@intel.com>

        combine two arrays in OperationNotAllowedException.cpp into one
        https://bugs.webkit.org/show_bug.cgi?id=83445

        Reviewed by Kentaro Hara.

        No new tests required.

        * fileapi/OperationNotAllowedException.cpp:
        (OperationNotAllowedExceptionNameDescription):
        (WebCore):
        (WebCore::OperationNotAllowedException::initializeDescription):

2012-04-09  Shinya Kawanaka  <shinyak@chromium.org>

        Assert triggers VisibleSelection::adjustSelectionToAvoidCrossingShadowBoundaries.
        https://bugs.webkit.org/show_bug.cgi?id=83118

        Reviewed by Hajime Morita.

        VisibleSelection::adjustSelectionToAvoidCrossingShadowBoundaries did not work correctly.
        There was a case that selection crosses shadow boundaries.

        This patch introduces a class TreeScopeAdjuster, which enables us to adjust Node or Position
        into a specified tree scope.

        Test: fast/dom/shadow/selections-in-shadow.html

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.ext.in:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/DOMAllInOne.cpp:
        * dom/TreeScope.h:
        (TreeScope):
        * dom/TreeScopeAdjuster.cpp: Added.
        (WebCore):
        (WebCore::TreeScopeAdjuster::TreeScopeAdjuster):
        (WebCore::TreeScopeAdjuster::ancestorInThisScope):
          Returns the node itself if it's in the same tree scope.
          Otherwise, this method checks the shadow ancestor of the node recursively.
          If no corresponding node is found, 0 will be returned.
        (WebCore::TreeScopeAdjuster::adjustPositionBefore):
        (WebCore::TreeScopeAdjuster::adjustPositionAfter):
        * dom/TreeScopeAdjuster.h: Added.
        (WebCore):
        (TreeScopeAdjuster):
        (WebCore::TreeScopeAdjuster::treeScope):
        * editing/VisibleSelection.cpp:
        (WebCore::VisibleSelection::adjustSelectionToAvoidCrossingShadowBoundaries):

2012-04-09  Lu Guanqun  <guanqun.lu@intel.com>

        combine two arrays in SVGException.cpp into one
        https://bugs.webkit.org/show_bug.cgi?id=83444

        Reviewed by Kentaro Hara.

        No new tests required.

        * svg/SVGException.cpp:
        (SVGExceptionNameDescription):
        (WebCore):
        (WebCore::SVGException::initializeDescription):

2012-04-09  Lu Guanqun  <guanqun.lu@intel.com>

        combine two arrays in XMLHttpRequestException.cpp into one
        https://bugs.webkit.org/show_bug.cgi?id=83443

        Reviewed by Kentaro Hara.

        No new tests requied.

        * xml/XMLHttpRequestException.cpp:
        (XMLHttpRequestExceptionNameDescription):
        (WebCore):
        (WebCore::XMLHttpRequestException::initializeDescription):

2012-04-09  No'am Rosenthal  <noam.rosenthal@nokia.com>

        [WK2] Enable using a single ShareableBitmap for multiple updates
        https://bugs.webkit.org/show_bug.cgi?id=83424

        Modify BitmapTexture::updateContents to include a source offset.
        This allows us to update a texture from a sub-image.

        Reviewed by Kenneth Rohde Christiansen.

        Tested by existing API tests.

        * platform/graphics/texmap/TextureMapper.h:
        (BitmapTexture):
        * platform/graphics/texmap/TextureMapperGL.cpp:
        (WebCore::BitmapTextureGL::didReset):
        (WebCore::driverSupportsBGRASwizzling):
        (WebCore::BitmapTextureGL::updateContents):
        * platform/graphics/texmap/TextureMapperGL.h:
        (WebCore::BitmapTextureGL::textureTarget):
        (BitmapTextureGL):
        * platform/graphics/texmap/TextureMapperImageBuffer.cpp:
        (WebCore::BitmapTextureImageBuffer::updateContents):
        * platform/graphics/texmap/TextureMapperImageBuffer.h:
        (BitmapTextureImageBuffer):

2012-04-09  Dana Jansens  <danakj@chromium.org>

        [chromium] Viewport is not filled when out of texture memory on mac
        https://bugs.webkit.org/show_bug.cgi?id=83351

        Reviewed by Adrienne Walker.

        Currently we add gutter quads on the NonCompositedContentHost layer,
        which lies above another visible layer - the rubberband layer on mac.
        For this reason, on mac, gutter quads were disabled, as well as forcing
        the NCCH layer to draw, in order to make the rubberband layer appear.

        We move the logic for adding gutter quads into CCRenderPass, and add
        gutter quads for all pixels that are visible through the viewport.
        This allows us to stop special-casing the NCCH layer, and allows us
        to skip drawing the layer equally with other layers. We remove the
        backgroundCoversViewport() flag entirely.

        In order to do this, we fix a bug in the occlusion tracker, that
        allowed opaque() layers with skipsDraw to occlude, by making
        the visibleContentOpaqueRegion() method on the layer classes
        also return the opaque region for non-tiled layers, always use
        its value in the occlusion tracker.

        Unit test: CCLayerTreeHostImplTest.viewportCovered

        * platform/graphics/chromium/LayerChromium.cpp:
        (WebCore::LayerChromium::LayerChromium):
        (WebCore::LayerChromium::pushPropertiesTo):
        (WebCore::LayerChromium::visibleContentOpaqueRegion):
        (WebCore):
        * platform/graphics/chromium/LayerChromium.h:
        (LayerChromium):
        * platform/graphics/chromium/TiledLayerChromium.cpp:
        (WebCore::TiledLayerChromium::prepareToUpdateTiles):
        (WebCore::TiledLayerChromium::visibleContentOpaqueRegion):
        * platform/graphics/chromium/cc/CCLayerImpl.cpp:
        (WebCore::CCLayerImpl::CCLayerImpl):
        (WebCore::CCLayerImpl::visibleContentOpaqueRegion):
        (WebCore):
        * platform/graphics/chromium/cc/CCLayerImpl.h:
        (WebCore::CCLayerImpl::appendQuads):
        (CCLayerImpl):
        * platform/graphics/chromium/cc/CCLayerTreeHost.cpp:
        (WebCore::CCLayerTreeHost::CCLayerTreeHost):
        (WebCore::CCLayerTreeHost::finishCommitOnImplThread):
        * platform/graphics/chromium/cc/CCLayerTreeHost.h:
        (WebCore::CCLayerTreeHost::setBackgroundColor):
        (CCLayerTreeHost):
        * platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:
        (WebCore::CCLayerTreeHostImpl::calculateRenderPasses):
        * platform/graphics/chromium/cc/CCLayerTreeHostImpl.h:
        (WebCore::CCLayerTreeHostImpl::backgroundColor):
        (WebCore::CCLayerTreeHostImpl::setBackgroundColor):
        (CCLayerTreeHostImpl):
        * platform/graphics/chromium/cc/CCOcclusionTracker.cpp:
        (WebCore::computeOcclusionBehindLayer):
        (WebCore::::markOccludedBehindLayer):
        * platform/graphics/chromium/cc/CCOcclusionTracker.h:
        (CCOcclusionTrackerBase):
        (WebCore::CCOcclusionTrackerBase::computeVisibleRegionInScreen):
        * platform/graphics/chromium/cc/CCRenderPass.cpp:
        (WebCore::CCRenderPass::appendQuadsToFillScreen):
        (WebCore):
        * platform/graphics/chromium/cc/CCRenderPass.h:
        (WebCore):
        (CCRenderPass):
        * platform/graphics/chromium/cc/CCTiledLayerImpl.cpp:
        (WebCore::CCTiledLayerImpl::appendQuads):
        (WebCore::CCTiledLayerImpl::visibleContentOpaqueRegion):
        * platform/graphics/chromium/cc/CCTiledLayerImpl.h:
        (WebCore::CCTiledLayerImpl::skipsDraw):
        (CCTiledLayerImpl):

2012-04-09  Luke Macpherson  <macpherson@chromium.org>

        Don't let CSSPropertyWebkitPerspective dereference primitiveValue without null check.
        https://bugs.webkit.org/show_bug.cgi?id=83538

        Reviewed by Daniel Bates.

        No new tests / code cleanup only.

        Coverity pointed out that we potentially dereference primitiveValue here without checking for null.
        I've added an early out for that case to make sure it can't ever happen. I don't know if it's actually
        possible to exercise that code path or not - probably the parser prevents it from being hit in practice.

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

2012-04-09  Joseph Pecoraro  <pecoraro@apple.com>

        <http://webkit.org/b/83539> Web Inspector: ASSERT attempting to unbind null contentDocument

        Avoid calling unbind with a null object. The HTMLFrameOwnerElement's
        contentDocument can be null.

        Reviewed by Timothy Hatcher.

        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::unbind):

2012-04-09  Jason Liu  <jason.liu@torchmobile.com.cn>

        [BlackBerry] Parsed Cookie's m_isMaxAgeSet is not needed.
        https://bugs.webkit.org/show_bug.cgi?id=83457

        Reviewed by Rob Buis.

        When m_expiry is not -1, it must be set by setExpiry or setMaxAge. setExpiry will return when m_expiry 
        has been set. This ensures Max-Age's precedence. 
        And m_isMaxAgeSet is always false when the cookie is from database. This is not right.

        So we use m_expiry instead of m_isMaxAgeSet.

        No new tests. Refactor.

        * platform/blackberry/ParsedCookie.cpp:
        (WebCore::ParsedCookie::ParsedCookie):
        (WebCore::ParsedCookie::setExpiry):
        (WebCore::ParsedCookie::setMaxAge):
        * platform/blackberry/ParsedCookie.h:
        (ParsedCookie):

2012-04-09  Min Qin  <qinmin@google.com>

        Fixed ordering of deleting CCInputHandler and CCLayerTreeHostImpl in layerTreeHostClosedOnImplThread
        https://bugs.webkit.org/show_bug.cgi?id=83488

        Reviewed by James Robinson.

        CCInputHandler(WebCompositorInputHandlerImpl) has a pointer to CCLayerTreeHostImpl.
        So we should delete CCInputHandler earlier as otherwise that pointer could get misused after LayerTreeHostImpl is deleted.
        Just fixing a potential NPE error, no behavior change.

        * platform/graphics/chromium/cc/CCThreadProxy.cpp:
        (WebCore::CCThreadProxy::layerTreeHostClosedOnImplThread):

2012-04-09  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r113656.
        http://trac.webkit.org/changeset/113656
        https://bugs.webkit.org/show_bug.cgi?id=83542

        test is broken on chromium-win (Requested by simonjam on
        #webkit).

        * Modules/intents/Intent.cpp:
        (WebCore::Intent::Intent):
        * Modules/intents/Intent.h:
        (Intent):
        * Modules/intents/Intent.idl:
        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateParametersCheck):
        * bindings/scripts/test/V8/V8TestSerializedScriptValueInterface.cpp:

2012-04-09  Abhishek Arya  <inferno@chromium.org>

        ASSERTION FAILED: !attached() in Node::attach.
        https://bugs.webkit.org/show_bug.cgi?id=80726

        Reviewed by Adam Barth.

        While parsing XML document, prevent attaching the leaf text node
        back to document, if its parent is not attached.

        Test: fast/dom/text-node-attach-crash.xhtml

        * xml/parser/XMLDocumentParser.cpp:
        (WebCore::XMLDocumentParser::exitText):

2012-04-09  Dana Jansens  <danakj@chromium.org>

        [chromium] Replica layers are not drawn, so should not be painted
        https://bugs.webkit.org/show_bug.cgi?id=83504

        Reviewed by James Robinson.

        We attempt to paint replica layers when we are painting the mask layers
        in CCLayerTreeHost.cpp.

        This is useless code, replica layers have drawsContent() == false, and
        have an empty visibleLayerRect, so the paint functions end up early-
        outting. But it is a waste of time to try, and confusing to have
        this attempted in the code at all, since the replica layers are never
        drawn. They exist only for their transforms.

        Also the dimensions used for the replica mask are different from the
        surface mask, which is confusing and unnecessary as well. The mask is
        applied to the same surface contents as the surface mask would be, so
        only the surface's contentBounds need to be painted in the replica
        mask.

        Covered by existing tests.

        * platform/graphics/chromium/cc/CCLayerTreeHost.cpp:
        (WebCore::CCLayerTreeHost::paintMasksForRenderSurface):
        (WebCore::CCLayerTreeHost::paintLayerContents):
        * platform/graphics/chromium/cc/CCLayerTreeHost.h:

2012-04-09  Shinya Kawanaka  <shinyak@chromium.org>

        ShadowRoot should have selection attribute.
        https://bugs.webkit.org/show_bug.cgi?id=82429

        Reviewed by Hajime Morita.

        This patch makes ShadowRoot have selection attribute. Currently the selection returns
        the same object as what window.getSelection() returns.

        We will extend DOMSelection to have TreeScope. It will adjust Node into TreeScope.
        This will be tracked in Bug 82698.

        Test: fast/dom/shadow/selection-in-shadow.html

        * dom/ShadowRoot.cpp:
        (WebCore::ShadowRoot::selection):
        (WebCore):
        * dom/ShadowRoot.h:
        (WebCore):
        (ShadowRoot):
        * dom/ShadowRoot.idl:

2012-04-09  Emil A Eklund  <eae@chromium.org>

        Replace numeric_limits<LayoutUnit>::min/max with constants
        https://bugs.webkit.org/show_bug.cgi?id=83497

        Reviewed by Eric Seidel.

        Replace all uses of numeric_limits<LayoutUnit>::min/max with
        MIN_LAYOUT_UNIT and MAX_LAYOUT_UNIT respectively in preparation for the
        switch to subpixel layout.

        Also rename zeroLayoutUnit to ZERO_LAYOUT_UNIT to be consistent and
        change it to be a define as to avoid global initializer warnings once we
        change the definition of LayoutUnit from int to FractionalLayoutUnit.

        No new tests, no change in functionality.

        * dom/ElementRareData.h:
        (WebCore::defaultMinimumSizeForResizing):
        * editing/FrameSelection.cpp:
        (WebCore::NoXPosForVerticalArrowNavigation):
        * platform/graphics/transforms/TransformationMatrix.cpp:
        (WebCore::clampEdgeValue):
        (WebCore::TransformationMatrix::clampedBoundsOfProjectedQuad):
        * rendering/AutoTableLayout.cpp:
        (WebCore::AutoTableLayout::computePreferredLogicalWidths):
        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::placeBoxesInBlockDirection):
        (WebCore::InlineFlowBox::addBorderOutsetVisualOverflow):
        (WebCore::InlineFlowBox::paintFillLayer):
        (WebCore::InlineFlowBox::paintBoxDecorations):
        (WebCore::InlineFlowBox::paintMask):
        (WebCore::InlineFlowBox::computeOverAnnotationAdjustment):
        * rendering/LayoutTypes.h:
        (WebCore):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::MarginInfo::MarginInfo):
        (WebCore::RenderBlock::computeInitialRegionRangeForBlock):
        (WebCore::RenderBlock::adjustFloatingBlock):
        (WebCore::RenderBlock::paintColumnRules):
        (WebCore::RenderBlock::removeFloatingObject):
        (WebCore::RenderBlock::nextFloatLogicalBottomBelow):
        (WebCore::RenderBlock::markLinesDirtyInBlockRange):
        (WebCore::RenderBlock::clearFloats):
        (WebCore::RenderBlock::addOverhangingFloats):
        (WebCore::RenderBlock::getClearDelta):
        (WebCore::RenderBlock::computeInlinePreferredLogicalWidths):
        (WebCore::getHeightForLineCount):
        (WebCore::RenderBlock::borderFitAdjust):
        (WebCore::RenderBlock::adjustForUnsplittableChild):
        * rendering/RenderBlock.h:
        (WebCore::RenderBlock::paginationStrut):
        (WebCore::RenderBlock::pageLogicalOffset):
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::LineLayoutState::updateRepaintRangeFromBox):
        (WebCore::RenderBlock::checkFloatsInCleanLine):
        (WebCore::RenderBlock::addOverflowFromInlineChildren):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::shrinkLogicalWidthToAvoidFloats):
        (WebCore::RenderBox::positionForPoint):
        * rendering/RenderBox.h:
        (WebCore::RenderBox::minYVisualOverflow):
        (WebCore::RenderBox::minXVisualOverflow):
        (RenderBox):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::offsetLeft):
        (WebCore::RenderBoxModelObject::offsetTop):
        (WebCore::RenderBoxModelObject::paintFillLayerExtended):
        * rendering/RenderDeprecatedFlexibleBox.cpp:
        (WebCore::RenderDeprecatedFlexibleBox::layoutHorizontalBox):
        (WebCore::RenderDeprecatedFlexibleBox::layoutVerticalBox):
        (WebCore::RenderDeprecatedFlexibleBox::allowedChildFlex):
        * rendering/RenderFieldset.cpp:
        (WebCore::RenderFieldset::paintBoxDecorations):
        (WebCore::RenderFieldset::paintMask):
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::repositionLogicalHeightDependentFlexItems):
        (WebCore::RenderFlexibleBox::lineBreakLength):
        (WebCore::RenderFlexibleBox::alignChildren):
        (WebCore::RenderFlexibleBox::applyStretchAlignmentToChild):
        * rendering/RenderFlowThread.cpp:
        (WebCore::RenderFlowThread::layout):
        (WebCore::RenderFlowThread::computeLogicalWidth):
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::linesVisualOverflowBoundingBox):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::resize):
        * rendering/RenderListMarker.cpp:
        (WebCore::RenderListMarker::updateMargins):
        * rendering/RenderMarquee.cpp:
        (WebCore::RenderMarquee::computePosition):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::repaintAfterLayoutIfNeeded):
        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::computeReplacedLogicalWidth):
        (WebCore::RenderReplaced::computePreferredLogicalWidths):
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::convertStyleLogicalWidthToComputedWidth):
        (WebCore::RenderTable::layout):
        * rendering/RenderTable.h:
        (WebCore::RenderTable::bordersPaddingAndSpacingInRowDirection):
        * rendering/RenderText.cpp:
        (WebCore::RenderText::linesVisualOverflowBoundingBox):

2012-04-09  Levi Weintraub  <leviw@chromium.org>

        Clean up LayoutUnit usage in DOMNodeHighlighter
        https://bugs.webkit.org/show_bug.cgi?id=83507

        Reviewed by Eric Seidel.

        Ensuring DOMNodeHighlighter uses pixel snapping that matches that done in the RenderTree. Changes include:
        - Reverting drawSubstring to use an IntPoint with pixel snapped values instead of a LayoutPoint.
        - Reverting borderBox to an IntRect since it's in absolute coordinates. See https://trac.webkit.org/wiki/LayoutUnit.
        - Frames are still laid out with integers. Cleaning up mainFrameOffset to reflect that.

        No new tests. No change in behavior.

        * inspector/DOMNodeHighlighter.cpp:

2012-04-09  Jeff Rogers  <jrogers@rim.com>

        Add missing IndexedDB files to CMake build
        https://bugs.webkit.org/show_bug.cgi?id=83495

        Reviewed by Rob Buis.

        * CMakeLists.txt:
        * UseJSC.cmake:

2012-04-09  Alexey Proskuryakov  <ap@apple.com>

        [Mac] WebProcess dies due to m_process->checkURLReceivedFromWebProcess(url) dropping a file URL
        https://bugs.webkit.org/show_bug.cgi?id=83506
        <rdar://problem/11171264>

        Reviewed by Darin Adler.

        Cannot test, because dragging within a single window never initiates a navigation, and dragging
        across windows is too much for DRT and WTR.

        * platform/mac/DragDataMac.mm: (WebCore::DragData::asURL): Add the same checks that we had
        for NSURLPboardType to NSStringPboardType case, preventing dropping of non-HTTP URLs.
        String types cannot be sanitized when they are modified by JavaScript, and are thus less trusted.
        String checks should be at least as restrictive as URL ones.

2012-04-09  Greg Billock  <gbillock@google.com>

        Add transfer map argument to Intent constructor
        http://dvcs.w3.org/hg/web-intents/raw-file/tip/spec/Overview.html
        This adds the ability to pass transferables (i.e. MessagePorts)
        through web intents, and puts the calling convention in line
        with the Web Messaging spec:
        http://dev.w3.org/html5/postmsg/

        Implementation in chromium API follows the port-passing method
        of PlatformMessagePortChannel.

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

        Reviewed by Adam Barth.

        * Modules/intents/Intent.cpp:
        (WebCore::Intent::create):
        * Modules/intents/Intent.idl:
        * WebCore.gypi:
        * bindings/v8/custom/V8IntentCustom.cpp: Added.
        (WebCore):
        (WebCore::V8Intent::constructorCallback):

2012-04-09  Dana Jansens  <danakj@chromium.org>

        [chromium] Cull occluded surface quads
        https://bugs.webkit.org/show_bug.cgi?id=81227

        Reviewed by Adrienne Walker.

        Cull render surface and replica quads during draw based on occlusion.

        In order to compute occlusion for the surface or replica, it must not
        consider occlusion found in the surface's own subtree. To do this, we
        reorder the calls to the occlusion tracker, and add the surface and
        replica quads before we "leaveToTargetRenderSurface" which merges
        occlusion from the surface's subtree up into its parent.

        Unit test: CCOcclusionTrackerTestReplicaOccluded
                   CCOcclusionTrackerTestSurfaceWithReplicaUnoccluded
                   CCOcclusionTrackerTestSurfaceAndReplicaOccludedDifferently
                   CCOcclusionTrackerTestSurfaceChildOfSurface
                   CCOcclusionTrackerTestSurfaceChildOfClippingSurface

        And added some sanity checks to other CCOcclusionTracker tests that have
        render surfaces.

        * platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:
        (WebCore::CCLayerTreeHostImpl::calculateRenderPasses):
        * platform/graphics/chromium/cc/CCOcclusionTracker.cpp:
        (WebCore::::leaveToTargetRenderSurface):
        (WebCore::::unoccludedContributingSurfaceContentRect):
        (WebCore):
        * platform/graphics/chromium/cc/CCOcclusionTracker.h:
        (CCOcclusionTrackerBase):
        * platform/graphics/chromium/cc/CCQuadCuller.cpp:
        (WebCore::CCQuadCuller::CCQuadCuller):
        (WebCore::appendQuadInternal):
        (WebCore::CCQuadCuller::append):
        (WebCore):
        (WebCore::CCQuadCuller::appendSurface):
        (WebCore::CCQuadCuller::appendReplica):
        * platform/graphics/chromium/cc/CCQuadCuller.h:
        (CCQuadCuller):
        * platform/graphics/chromium/cc/CCRenderPass.cpp:
        (WebCore::CCRenderPass::appendQuadsForRenderSurfaceLayer):
        * platform/graphics/chromium/cc/CCRenderPass.h:
        (CCRenderPass):

2012-04-09  Andreas Kling  <kling@webkit.org>

        Make CSSValuePool share values globally.
        <http://webkit.org/b/77700>

        Reviewed by Antti Koivisto.

        Remove the per-Document CSSValuePool and have everyone use a global pool
        accessed via "CSSValuePool& cssValuePool()".

        This reduces memory usage by sharing cached CSSValues between all documents,
        and relaxes heap churn since the common, persistenly cached values are held
        by CSSValuePool forever.

        No behavior change thanks to r113588 which introduced a mechanism that makes
        sure we never expose internal CSSValue objects to bindings, but read-only
        clones of those values.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::valueForNinePieceImageSlice):
        (WebCore::valueForNinePieceImageQuad):
        (WebCore::valueForNinePieceImageRepeat):
        (WebCore::valueForNinePieceImage):
        (WebCore::zoomAdjustedPixelValue):
        (WebCore::zoomAdjustedNumberValue):
        (WebCore::zoomAdjustedPixelValueForLength):
        (WebCore::valueForReflection):
        (WebCore::getPositionOffsetValue):
        (WebCore::CSSComputedStyleDeclaration::currentColorOrValidColor):
        (WebCore::getBorderRadiusCornerValues):
        (WebCore::getBorderRadiusCornerValue):
        (WebCore::getBorderRadiusShorthandValue):
        (WebCore::computedTransform):
        (WebCore::CSSComputedStyleDeclaration::valueForCustomFilterNumberParameter):
        (WebCore::CSSComputedStyleDeclaration::valueForFilter):
        (WebCore::valueForGridTrackBreadth):
        (WebCore::valueForGridTrackList):
        (WebCore::valueForGridPosition):
        (WebCore::getDelayValue):
        (WebCore::getDurationValue):
        (WebCore::createLineBoxContainValue):
        (WebCore::CSSComputedStyleDeclaration::getFontSizeCSSValuePreferringKeyword):
        (WebCore::CSSComputedStyleDeclaration::valueForShadow):
        (WebCore::valueForFamily):
        (WebCore::renderUnicodeBidiFlagsToCSSValue):
        (WebCore::renderTextDecorationFlagsToCSSValue):
        (WebCore::fillRepeatToCSSValue):
        (WebCore::fillSizeToCSSValue):
        (WebCore::contentToCSSValue):
        (WebCore::counterToCSSValue):
        (WebCore::fontFamilyFromStyle):
        (WebCore::lineHeightFromStyle):
        (WebCore::fontSizeFromStyle):
        (WebCore::fontStyleFromStyle):
        (WebCore::fontVariantFromStyle):
        (WebCore::fontWeightFromStyle):
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        * css/CSSComputedStyleDeclaration.h:
        (WebCore):
        * css/CSSParser.cpp:
        (WebCore::parseColorValue):
        (WebCore::parseSimpleLengthValue):
        (WebCore::parseKeywordValue):
        (WebCore::CSSParser::parseValue):
        (WebCore::CSSParser::parseColor):
        (WebCore::CSSParser::setStyleSheet):
        (WebCore::CSSParser::createPrimitiveNumericValue):
        (WebCore::CSSParser::createPrimitiveStringValue):
        (WebCore::CSSParser::parseValidPrimitive):
        (WebCore::parseBackgroundClip):
        (WebCore::CSSParser::parseFillShorthand):
        (WebCore::CSSParser::parseAnimationShorthand):
        (WebCore::CSSParser::parseTransitionShorthand):
        (WebCore::CSSParser::parseShorthand):
        (WebCore::CSSParser::parsePage):
        (WebCore::CSSParser::parseSizeParameter):
        (WebCore::CSSParser::parseContent):
        (WebCore::CSSParser::parseAttr):
        (WebCore::CSSParser::parseBackgroundColor):
        (WebCore::CSSParser::parseFillImage):
        (WebCore::CSSParser::parseFillPositionX):
        (WebCore::CSSParser::parseFillPositionY):
        (WebCore::CSSParser::parseFillPositionComponent):
        (WebCore::CSSParser::parseFillPosition):
        (WebCore::CSSParser::parseFillRepeat):
        (WebCore::CSSParser::parseFillSize):
        (WebCore::CSSParser::parseFillProperty):
        (WebCore::CSSParser::parseAnimationDirection):
        (WebCore::CSSParser::parseAnimationFillMode):
        (WebCore::CSSParser::parseAnimationIterationCount):
        (WebCore::CSSParser::parseAnimationName):
        (WebCore::CSSParser::parseAnimationPlayState):
        (WebCore::CSSParser::parseAnimationProperty):
        (WebCore::CSSParser::parseAnimationTimingFunction):
        (WebCore::CSSParser::parseGridTrackList):
        (WebCore::CSSParser::parseDashboardRegions):
        (WebCore::CSSParser::parseCounterContent):
        (WebCore::CSSParser::parseClipShape):
        (WebCore::CSSParser::parseExclusionShape):
        (WebCore::CSSParser::parseFont):
        (WebCore::FontFamilyValueBuilder::FontFamilyValueBuilder):
        (WebCore::FontFamilyValueBuilder::commit):
        (FontFamilyValueBuilder):
        (WebCore::CSSParser::parseFontFamily):
        (WebCore::CSSParser::parseFontVariant):
        (WebCore::CSSParser::parseFontWeight):
        (WebCore::ShadowParseContext::commitStyle):
        (WebCore::CSSParser::parseShadow):
        (WebCore::CSSParser::parseReflect):
        (WebCore::CSSParser::parseFlex):
        (WebCore::BorderImageParseContext::commitBorderImageProperty):
        (WebCore::CSSParser::parseBorderImage):
        (WebCore::CSSParser::parseBorderImageRepeat):
        (WebCore::BorderImageSliceParseContext::commitBorderImageSlice):
        (WebCore::BorderImageQuadParseContext::commitNumber):
        (WebCore::BorderImageQuadParseContext::commitBorderImageQuad):
        (WebCore::CSSParser::parseBorderRadius):
        (WebCore::CSSParser::parseAspectRatio):
        (WebCore::CSSParser::parseCounter):
        (WebCore::parseDeprecatedGradientPoint):
        (WebCore::parseDeprecatedGradientColorStop):
        (WebCore::CSSParser::parseDeprecatedGradient):
        (WebCore::valueFromSideKeyword):
        (WebCore::parseGradientColorOrKeyword):
        (WebCore::CSSParser::parseLinearGradient):
        (WebCore::CSSParser::parseRadialGradient):
        (WebCore::CSSParser::parseCrossfade):
        (WebCore::CSSParser::parseImageSet):
        (WebCore::CSSParser::parseCustomFilter):
        (WebCore::CSSParser::parseBuiltinFilterArguments):
        (WebCore::CSSParser::parseFilter):
        (WebCore::CSSParser::parseFlowThread):
        (WebCore::CSSParser::parseRegionThread):
        (WebCore::CSSParser::parseTextEmphasisStyle):
        (WebCore::CSSParser::parseFontFeatureSettings):
        (WebCore::CSSParser::parseFontVariantLigatures):
        * css/CSSParser.h:
        (WebCore):
        (CSSParser):
        * css/CSSValuePool.cpp:
        (WebCore::cssValuePool):
        (WebCore):
        * css/CSSValuePool.h:
        (CSSValuePool):
        (WebCore):
        * css/StylePropertySet.cpp:
        (WebCore::StylePropertySet::setProperty):
        * css/StylePropertySet.h:
        (StylePropertySet):
        * dom/Document.cpp:
        * dom/Document.h:
        (WebCore):
        (Document):
        * dom/StyledElement.cpp:
        (WebCore::StyledElement::setInlineStyleProperty):
        (WebCore::StyledElement::addPropertyToAttributeStyle):
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::addHTMLColorToStyle):
        * html/HTMLFontElement.cpp:
        (WebCore::HTMLFontElement::collectStyleForAttribute):
        * html/HTMLHRElement.cpp:
        (WebCore::HTMLHRElement::collectStyleForAttribute):
        * html/HTMLTableElement.cpp:
        (WebCore::HTMLTableElement::createSharedCellStyle):

2012-04-09  Levi Weintraub  <leviw@chromium.org>

        Prepare html classes for sub-pixel LayoutUnits
        https://bugs.webkit.org/show_bug.cgi?id=83491

        Reviewed by Eric Seidel.

        This patch brings the entire HTML folder up to the current state of the subpixellayout branch. Adding
        an intValue flavor of Length that maps to the current value function was also necessary to get us
        there. See https://trac.webkit.org/wiki/LayoutUnit and the descriptions below for details.

        No new tests. No change in behavior.

        * html/HTMLMarqueeElement.cpp:
        (WebCore::HTMLMarqueeElement::scrollAmount): Fixes a compiler error when length returns a float, as
        we intend it to do when switching to sub-pixel layout.
        * html/ImageDocument.cpp:
        (WebCore::ImageDocumentParser::finish): imageSize is always integral.
        * platform/Length.h:
        (WebCore::Length::Length): Added a constructor that takes a FractionalLayoutUnit.
        (Length):
        (WebCore::Length::intValue): Currently maps directly to Length::value, but the current logic of value
        will be migrated here when value is changed to return a float.
        (WebCore::Length::setValue): Added a variant that takes a FractionalLayoutUnit.

2012-04-09  Andrew Lo  <anlo@rim.com>

        [BlackBerry] requestAnimationFrame performance choppy & inconsistent
        https://bugs.webkit.org/show_bug.cgi?id=83499

        Reviewed by Rob Buis.

        Respect m_scheduled & m_previousFrameDone flags like the Mac port of
        DisplayRefreshMonitor does.
        Internal PR: 147826

        requestAnimationFrame already covered by tests in LayoutTests/fast/animation.

        * platform/graphics/blackberry/DisplayRefreshMonitorBlackBerry.cpp:
        (WebCore::DisplayRefreshMonitor::displayLinkFired):

2012-04-09  Luke Macpherson  <macpherson@chromium.org>

        Make CSSValueID's into an enum instead of a collection of integers.
        https://bugs.webkit.org/show_bug.cgi?id=83246

        Reviewed by Simon Fraser.

        This patch simply converts the list of integers into an enum.
        Follow-up patches will then convert existing code that uses integers to use the new enum.

        No new tests / no functionality changed.

        * css/makevalues.pl:

2012-04-09  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r113609.
        http://trac.webkit.org/changeset/113609
        https://bugs.webkit.org/show_bug.cgi?id=83522

        it broke tests (Requested by dethbakin on #webkit).

        * css/mediaControlsChromium.css:
        (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-volume-slider-container, video::-webkit-media-controls-volume-slider-container):
        * css/mediaControlsQuickTime.css:
        (audio::-webkit-media-controls-mute-button, video::-webkit-media-controls-mute-button):
        (audio::-webkit-media-controls-volume-slider-container, video::-webkit-media-controls-volume-slider-container):
        (audio::-webkit-media-controls-volume-slider-mute-button, video::-webkit-media-controls-volume-slider-mute-button):
        * html/shadow/MediaControlElements.cpp:
        (RenderMediaVolumeSliderContainer):
        (WebCore):
        (WebCore::RenderMediaVolumeSliderContainer::RenderMediaVolumeSliderContainer):
        (WebCore::RenderMediaVolumeSliderContainer::layout):
        (WebCore::MediaControlVolumeSliderContainerElement::createRenderer):
        * html/shadow/MediaControlElements.h:
        (MediaControlVolumeSliderContainerElement):
        * html/shadow/MediaControlRootElement.cpp:
        (WebCore::MediaControlRootElement::create):
        * html/shadow/MediaControlRootElementChromium.cpp:
        (WebCore::MediaControlRootElementChromium::create):

2012-04-09  Dana Jansens  <danakj@chromium.org>

        [chromium] Make culling work with clipped rects
        https://bugs.webkit.org/show_bug.cgi?id=83494

        Reviewed by Adrienne Walker.

        Use new CCMathUtil transformation methods to deal with rects that clip
        the camera plane. This fixes three things:

        1. A layer completely behind the camera is not visible and should not
        occlude.
        2. A layer that is clipped by the camera is treated like a
        non-axis-aligned transform, as the result of a mapClippedRect() is a
        bounding box and may contain pixels not in the original rect. This guards
        our use of mapRect() when transforming occluded regions.
        3. A layer's occlusion must be clipped by its scissor rect. This scissor
        rect exists in its target space, so occlusion in screen space is only
        possible if its target also is axis aligned in the screen, such that
        the layer's scissor rect remains a rect in screen space.

        Unit tests: CCOcclusionTrackerTestLayerBehindCameraDoesNotOcclude
                    CCOcclusionTrackerTestLargePixelsOccludeInsideClipRect

        * platform/graphics/chromium/cc/CCMathUtil.cpp:
        (WebCore::CCMathUtil::mapQuad):
        * platform/graphics/chromium/cc/CCOcclusionTracker.cpp:
        (WebCore::transformSurfaceOpaqueRegion):
        (WebCore::computeOcclusionBehindLayer):
        (WebCore::::markOccludedBehindLayer):
        (WebCore::testContentRectOccluded):
        (WebCore::computeUnoccludedContentRect):

2012-04-09  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r113613.
        http://trac.webkit.org/changeset/113613
        https://bugs.webkit.org/show_bug.cgi?id=83509

        crashing most chromium bots (Requested by simonjam on
        #webkit).

        * Modules/battery/BatteryController.cpp:
        * Modules/battery/BatteryController.h:
        (BatteryController):
        * Modules/battery/BatteryManager.cpp:
        * WebCore.gyp/WebCore.gyp:
        * WebCore.gypi:

2012-04-06  Zhenyao Mo  <zmo@google.com>

        bindAttribLocation should check webgl reserved prefix
        https://bugs.webkit.org/show_bug.cgi?id=83409

        Reviewed by Kenneth Russell.

        * html/canvas/WebGLRenderingContext.cpp: Check for invalid parameters for a few functions.
        (WebCore):
        (WebCore::WebGLRenderingContext::bindAttribLocation):
        (WebCore::WebGLRenderingContext::getAttribLocation):
        (WebCore::WebGLRenderingContext::getUniformLocation):

2012-04-09  Timothy Hatcher  <timothy@apple.com>

        Fix the assertion in PageScriptDebugServer::didPause.

        https://webkit.org/b/82943

        Reviewed by Simon Fraser.

        * bindings/js/PageScriptDebugServer.cpp:
        (WebCore::PageScriptDebugServer::PageScriptDebugServer): Initialize m_pausedPage
        to zero so the assert in didPause will not randomly fire the first time.

2012-04-09  Tim Horton  <timothy_horton@apple.com>

        FrameData constructor zeroes all fields, causing ImageOrientation to be 0
        https://bugs.webkit.org/show_bug.cgi?id=83416

        Reviewed by Geoff Garen.

        Reinstate SimpleClassVectorTraits on FrameData (which were removed by http://trac.webkit.org/changeset/113543)
        with canInitializeWithMemset disabled, since two of the FrameData fields cannot be initialized to zero.

        No new tests.

        * platform/graphics/BitmapImage.h:

2012-04-09  James Robinson  <jamesr@chromium.org>

        [chromium] CCLayerTreeHost / WebLayerTreeView should be single ownership, not RefCounted
        https://bugs.webkit.org/show_bug.cgi?id=83413

        Reviewed by Adrienne Walker.

        CCLayerTreeHost always has a single logical owner, typically a WebLayerTreeView via either WebViewImpl or the
        public API. It is currently refcounted for historical reasons but this isn't necessary and adds confusion.
        CCLayerTreeHost instances and pointers are carefully managed currently to avoid leaks. In particular, while
        LayerChromium instances hold RefPtr<CCLayerTreeHost>s, whenever we want to destroy a CCLayerTreeHost we
        proactively clear out these references inside setRootLayer() to break the cycle.

        Refactor covered by existing unit and layout tests.

        * platform/graphics/chromium/LayerChromium.cpp:
        (WebCore::LayerChromium::LayerChromium):
        (WebCore::LayerChromium::setMaskLayer):
        (WebCore::LayerChromium::setReplicaLayer):
        * platform/graphics/chromium/LayerChromium.h:
        (WebCore::LayerChromium::layerTreeHost):
        (LayerChromium):
        * platform/graphics/chromium/cc/CCLayerTreeHost.cpp:
        (WebCore::CCLayerTreeHost::create):
        * platform/graphics/chromium/cc/CCLayerTreeHost.h:
        (CCLayerTreeHost):

2012-04-09  Joshua Bell  <jsbell@chromium.org>

        Unreviewed, rolling out r113473.
        http://trac.webkit.org/changeset/113473
        https://bugs.webkit.org/show_bug.cgi?id=83074

        Change does not handle cursor retention of LevelDB iterators

        * Modules/indexeddb/IDBDatabaseBackendImpl.cpp:
        (WebCore::IDBDatabaseBackendImpl::~IDBDatabaseBackendImpl):
        (WebCore::IDBDatabaseBackendImpl::createObjectStore):
        (WebCore::IDBDatabaseBackendImpl::loadObjectStores):
        * Modules/indexeddb/IDBIndexBackendImpl.cpp:
        (WebCore::IDBIndexBackendImpl::IDBIndexBackendImpl):
        (WebCore::IDBIndexBackendImpl::openCursorInternal):
        (WebCore::IDBIndexBackendImpl::countInternal):
        (WebCore::IDBIndexBackendImpl::getInternal):
        (WebCore::IDBIndexBackendImpl::addingKeyAllowed):
        * Modules/indexeddb/IDBIndexBackendImpl.h:
        (WebCore::IDBIndexBackendImpl::create):
        (IDBIndexBackendImpl):
        * Modules/indexeddb/IDBObjectStoreBackendImpl.cpp:
        (WebCore::IDBObjectStoreBackendImpl::IDBObjectStoreBackendImpl):
        (WebCore::IDBObjectStoreBackendImpl::getInternal):
        (WebCore::IDBObjectStoreBackendImpl::putInternal):
        (WebCore::IDBObjectStoreBackendImpl::deleteInternal):
        (WebCore::IDBObjectStoreBackendImpl::clearInternal):
        (WebCore):
        (WebCore::IDBObjectStoreBackendImpl::createIndex):
        (WebCore::IDBObjectStoreBackendImpl::createIndexInternal):
        (WebCore::IDBObjectStoreBackendImpl::deleteIndexInternal):
        (WebCore::IDBObjectStoreBackendImpl::openCursorInternal):
        (WebCore::IDBObjectStoreBackendImpl::countInternal):
        (WebCore::IDBObjectStoreBackendImpl::loadIndexes):
        (WebCore::IDBObjectStoreBackendImpl::genAutoIncrementKey):
        * Modules/indexeddb/IDBObjectStoreBackendImpl.h:
        (WebCore):
        (WebCore::IDBObjectStoreBackendImpl::create):
        (WebCore::IDBObjectStoreBackendImpl::databaseId):
        (IDBObjectStoreBackendImpl):

2012-04-06  James Robinson  <jamesr@chromium.org>

        [chromium] Texture copies should happen after incremental updates to preserve commit atomicity
        https://bugs.webkit.org/show_bug.cgi?id=83392

        Reviewed by Adrienne Walker.

        This enqueues texture copy operations in the CCTextureUpdater's list instead of evaluating them immediately so
        if the update is spread over multiple frames we can properly defer the texture copy until the end. Otherwise,
        the texture copy for WebGL / Canvas 2D content happens before the commit completes and the compositor might pick
        up a frame for the canvas that's "ahead" of the content around it.

        * platform/graphics/chromium/Canvas2DLayerChromium.cpp:
        (WebCore::Canvas2DLayerChromium::updateCompositorResources):
        * platform/graphics/chromium/TiledLayerChromium.cpp:
        (WebCore::TiledLayerChromium::updateCompositorResources):
        * platform/graphics/chromium/WebGLLayerChromium.cpp:
        (WebCore::WebGLLayerChromium::updateCompositorResources):
        * platform/graphics/chromium/cc/CCTextureUpdater.cpp:
        (WebCore::CCTextureUpdater::appendUpdate):
        (WebCore::CCTextureUpdater::appendPartialUpdate):
        (WebCore):
        (WebCore::CCTextureUpdater::appendCopy):
        (WebCore::CCTextureUpdater::hasMoreUpdates):
        (WebCore::CCTextureUpdater::update):
        (WebCore::CCTextureUpdater::clear):
        * platform/graphics/chromium/cc/CCTextureUpdater.h:
        (CCTextureUpdater):
        (UpdateEntry):
        (CopyEntry):

2012-04-09  Sadrul Habib Chowdhury  <sadrul@chromium.org>

        [chromium] Add Battery Status API support.

        Add Battery Status API support to chromium.
        https://bugs.webkit.org/show_bug.cgi?id=83284

        Reviewed by Adam Barth.

        This change is covered by tests in batterystatus/.

        * Modules/battery/BatteryController.cpp:
        (WebCore::BatteryController::updateBatteryStatus):
        (WebCore):
        * Modules/battery/BatteryController.h:
        (BatteryController):
        * Modules/battery/BatteryManager.cpp:
        * WebCore.gyp/WebCore.gyp:
        * WebCore.gypi:

2012-04-09  SravanKumar Sandela  <ssandela@innominds.com>

        Unnecessary scroll bar after changing the dimensions of a DIV
        https://bugs.webkit.org/show_bug.cgi?id=71541

        Reviewed by Julien Chaffraix.

        overflow: auto was being determined based on clientWidth and clientHeight, which during style change
        scenarii will blindly exclude previous scrollbars while computing overflow. This is valid only for
        overflow: scroll, but for other cases it wrongly reduces available area. Now it is taken care by
        determining the overflow based on pixelSnappedPaddingBoxWidth/Height() which are newly added in RenderBox.

        Tests: fast/overflow/overflow-auto-destroy-scroll-after-resizing-expected.html
               fast/overflow/overflow-auto-destroy-scroll-after-resizing.html

        * rendering/RenderBox.h:
        (WebCore::RenderBox::paddingBoxWidth):
        (WebCore::RenderBox::paddingBoxHeight):
        (WebCore::RenderBox::pixelSnappedPaddingBoxWidth):
        (WebCore::RenderBox::pixelSnappedPaddingBoxHeight):
        (RenderBox):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::hasHorizontalOverflow):
        (WebCore::RenderLayer::hasVerticalOverflow):

2012-04-09  Victor Carbune  <vcarbune@adobe.com>

        Simplified volume slider rendering.
        https://bugs.webkit.org/show_bug.cgi?id=82150

        Reviewed by Eric Carlson.

        Test: media/video-controls-rendering-toggle-display-none.html

        * css/mediaControlsChromium.css: Update controls css for Chromium.
        (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-volume-slider-container, video::-webkit-media-controls-volume-slider-container):
        * css/mediaControlsQuickTime.css: Update controls css for Safari.
        (audio::-webkit-media-controls-volume-slider-container, video::-webkit-media-controls-volume-slider-container):
        * html/shadow/MediaControlElements.cpp: Removed particular renderer.
        (WebCore):
        * html/shadow/MediaControlElements.h:
        (MediaControlVolumeSliderContainerElement): Removed particular renderer.
        * html/shadow/MediaControlRootElement.cpp:
        (WebCore::MediaControlRootElement::create): Added a div element as a container. Removed extra
        unused mute button.
        * html/shadow/MediaControlRootElementChromium.cpp: Added an extra div element as a container for
        the mute button and the volume slider to easily position them relative to each other.
        (WebCore::MediaControlRootElementChromium::create):

2012-04-09  Levi Weintraub  <leviw@chromium.org>

        Correct some LayoutUnit misuse in FilterEffectRenderer, and RenderBlock
        https://bugs.webkit.org/show_bug.cgi?id=83366

        Reviewed by Eric Seidel.

        Some more preparation of Render classes for FractionalLayoutUnits. See below for details
        of each change.

        No new tests. No change in behavior.

        * rendering/FilterEffectRenderer.cpp:
        (WebCore::FilterEffectRendererHelper::applyFilterEffect): Pixel snapping image rect before
        drawing it.
        * rendering/RenderBlock.cpp:
        (WebCore::::string): Pixel snapping outputted values for debug.

2012-04-09  Shawn Singh  <shawnsingh@chromium.org>

        [chromium] Fix layer sorting perspective w if w becomes negative
        https://bugs.webkit.org/show_bug.cgi?id=82997

        Reviewed by Adrienne Walker.

        Unit test added to CCLayerSorterTest.cpp.

        This is a follow-up patch after r113364. That other patch
        implemented proper clipping so that perspective transforms do not
        accidentally make geometry disappear. This patch fixes a similar
        problem in the layer sorter code so that layers do not
        accidentally get sorted incorrectly.

        * platform/graphics/chromium/cc/CCLayerSorter.cpp:
        (WebCore::CCLayerSorter::LayerShape::LayerShape):
        * platform/graphics/chromium/cc/CCMathUtil.cpp:
        (WebCore::computeEnclosingRect):
        (WebCore::addVertexToClippedQuad):
        (WebCore::CCMathUtil::mapClippedQuad):
        (WebCore):
        (WebCore::CCMathUtil::computeEnclosingRectOfVertices):
        * platform/graphics/chromium/cc/CCMathUtil.h:
        (WebCore):
        (CCMathUtil):

2012-04-09  Martin Robinson  <mrobinson@igalia.com>

        [soup] Crash while loading http://www.jusco.cn
        https://bugs.webkit.org/show_bug.cgi?id=68238

        Reviewed by Philippe Normand.

        Test: http/tests/xmlhttprequest/xmlhttprequest-sync-no-timers.html

        When running synchronous XMLHttpRequests, push a new inner thread default
        context, so that other sources from timers and network activity do not run.
        This will make synchronous requests truly synchronous with the rest of
        WebCore.

        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCoreSynchronousLoader): Clean up the method definitions a bit by writing them inline.
        (WebCore::WebCoreSynchronousLoader::WebCoreSynchronousLoader): Push a new thread default
        context to prevent other sources from running.
        (WebCore::WebCoreSynchronousLoader::~WebCoreSynchronousLoader): Pop the inner thread default context.
        (WebCore::closeCallback): If the client is synchronous call didFinishLoading now.
        (WebCore::readCallback): Only call didFinishLoading if the client isn't synchronous.
        (WebCore::ResourceHandle::defaultSession): Activate use-thread-context so that the soup session
        respects the inner thread context.

2012-04-09  Dana Jansens  <danakj@chromium.org>

        [chromium] Flip transition painting delayed with threaded animations
        https://bugs.webkit.org/show_bug.cgi?id=82571

        Reviewed by Adrienne Walker.

        This allows for prepainting to see and paint layers that are not facing
        the camera but have animating transforms. This is needed to prepaint
        animations that "flip" layers around to make the front visible.

        The changes are to add a backFaceIsVisible() helper function in
        CCLTHCommon. This is used like before to cull non-double sided
        layers, but culling is prevented on main thread when the screen
        space transform is unknown due to animation. We add new
        helper methods transformToScreenIsKnown() to identify this.

        However the layer is not actually visible, so we set the
        visibleLayerRect to be empty in this case.

        The calculateVisibleLayerRect needs to use the backFaceIsVisible()
        helper, so we move it into the .cpp file where it belongs, and make
        it static to the file since it is not used outide of CCLTHCommon.cpp
        at all.

        Unit test: CCLayerTreeHostCommonTest.verifyBackFaceCulling

        * platform/graphics/chromium/cc/CCLayerTreeHostCommon.cpp:
        (WebCore):
        (WebCore::backFaceIsVisible):
        (WebCore::calculateVisibleLayerRect):
        (WebCore::layerOpacityIsOpaque):
        (WebCore::transformToParentIsKnown):
        (WebCore::transformToScreenIsKnown):
        (WebCore::layerShouldBeSkipped):
        (WebCore::calculateDrawTransformsAndVisibilityInternal):
        (WebCore::walkLayersAndCalculateVisibleLayerRects):
        * platform/graphics/chromium/cc/CCLayerTreeHostCommon.h:
        (WebCore):

2012-04-09  Martin Robinson  <mrobinson@igalia.com>

        [GTK] Toggle buttons do not size appropriately in some themes
        https://bugs.webkit.org/show_bug.cgi?id=82833

        Reviewed by Gustavo Noronha Silva.

        Test: platform/gtk/fast/forms/large-toggle-elements.html

        Instead of drawing a toggle button across the entire rectangle of
        the WebCore control, draw a default-sized one cenetered in the rectangle.

        * platform/gtk/RenderThemeGtk3.cpp:
        (WebCore::paintToggle): Draw default-sized toggles.

2012-04-09  Raymond Liu  <raymond.liu@intel.com>

        When create JavaScriptNode, do not ignore NumberOfOutputChannels parameter.
        https://bugs.webkit.org/show_bug.cgi?id=83250

        Reviewed by Chris Rogers.

        * Modules/webaudio/AudioContext.cpp:
        (WebCore::AudioContext::createJavaScriptNode):
        (WebCore):
        * Modules/webaudio/AudioContext.h:
        (AudioContext):
        * Modules/webaudio/AudioContext.idl:
        * Modules/webaudio/JavaScriptAudioNode.cpp:
        (WebCore::JavaScriptAudioNode::create):
        (WebCore):
        (WebCore::JavaScriptAudioNode::JavaScriptAudioNode):
        (WebCore::JavaScriptAudioNode::initialize):
        (WebCore::JavaScriptAudioNode::process):
        * Modules/webaudio/JavaScriptAudioNode.h:
        (JavaScriptAudioNode):

2012-04-09  Abhishek Arya  <inferno@chromium.org>

        Crash due to floats not cleared before starting SVG <text> layout.
        https://bugs.webkit.org/show_bug.cgi?id=83021

        Reviewed by Dirk Schulze.

        Manual Test - ManualTests/svg-text-float-not-removed-crash.html.
        Can't reproduce the failure in DRT.

        forceLayoutInlineChildren is used in SVG <text> layout and overrides
        RenderBlock::layoutBlock. However, it missed the 'clearFloats' step,
        which will cause a crash when trying to access removed renderers.

        * rendering/RenderBlock.h:
        (WebCore::RenderBlock::forceLayoutInlineChildren):

2012-04-09  Jeffrey Pfau  <jpfau@apple.com>

        Filter files from dataTransfer.getData on Mac
        https://bugs.webkit.org/show_bug.cgi?id=38876

        Reviewed by Enrica Casucci.

        The ClipboardMac class now keeps track of whether it was created for copy and paste, dragging and dropping
        files or dragging and dropping generic data. This enables the class to block calls to set-/getData when the
        clipboard is not operating on generic data, and vice-versa.

        Test: fast/events/drop-with-file-paths.html

        * editing/mac/EditorMac.mm:
        (WebCore::Editor::newGeneralClipboard):
        * page/mac/EventHandlerMac.mm:
        (WebCore::EventHandler::createDraggingClipboard):
        * platform/mac/ClipboardMac.h:
        (WebCore::ClipboardMac::create):
        (ClipboardMac):
        * platform/mac/ClipboardMac.mm:
        (WebCore::Clipboard::create):
        (WebCore::ClipboardMac::ClipboardMac):
        (WebCore::ClipboardMac::getData):
        (WebCore::ClipboardMac::setData):
        (WebCore::ClipboardMac::files):

2012-04-09  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r113561.
        http://trac.webkit.org/changeset/113561
        https://bugs.webkit.org/show_bug.cgi?id=83487

        broke webkit_unit_tests (Requested by simonjam on #webkit).

        * platform/graphics/chromium/cc/CCOcclusionTracker.cpp:
        (WebCore::transformSurfaceOpaqueRegion):
        (WebCore::computeOcclusionBehindLayer):
        (WebCore::::markOccludedBehindLayer):
        (WebCore::testContentRectOccluded):
        (WebCore::computeUnoccludedContentRect):

2012-04-09  Levi Weintraub  <leviw@chromium.org>

        Correct LayoutUnit usage in style functions getRoundedBorderFor
        https://bugs.webkit.org/show_bug.cgi?id=83154

        Reviewed by Julien Chaffraix.

        Correcting LayoutUnit usage in getRoundedBorderFor and the calcRadiiFor helper function.

        No new tests. No change in behavior.

        * rendering/style/RenderStyle.cpp:
        (WebCore::calcRadiiFor): This is a static internal function that returns the radii based on a size.
        It's only called from getRoundedBorderFor, so we're now pixel snapping the size before handing it
        to this function.
        (WebCore::RenderStyle::getRoundedBorderFor): Takes a LayoutRect and returns the pixel-snapped
        resulting RoundedRect. Using a local IntRect to avoid snapping twice.

2012-04-06  Andrey Kosyakov  <caseq@chromium.org>

        Web Inspector: zoom on vertical mousewheel in Timeline overview
        https://bugs.webkit.org/show_bug.cgi?id=83379

        Reviewed by Pavel Feldman.

        - added support for zooming around mouse cursor upon mousewheel event;
        - handle mousewheel event by _onMouseWheel, not scrollWindow, so we only zoom on events internal to overview.

        * inspector/front-end/TimelineOverviewPane.js:
        (WebInspector.TimelineOverviewWindow):
        (WebInspector.TimelineOverviewWindow.prototype._endWindowSelectorDragging):
        (WebInspector.TimelineOverviewWindow.prototype._onMouseWheel):
        (WebInspector.TimelineOverviewWindow.prototype._zoom):

2012-04-09  Bill Budge  <bbudge@chromium.org>

        Cross-origin preflight request should not include credentials.
        https://bugs.webkit.org/show_bug.cgi?id=37676

        Modifies createAccessControlPreflightRequest so it never allows credentials.

        Reviewed by Adam Barth.

        http/tests/xmlhttprequest/access-control-preflight-credential-sync.html
        http/tests/xmlhttprequest/access-control-preflight-credential-async.html 

        * loader/CrossOriginAccessControl.cpp:
        (WebCore::createAccessControlPreflightRequest):
        * loader/CrossOriginAccessControl.h:
        (WebCore):
        * loader/DocumentThreadableLoader.cpp:
        (WebCore::DocumentThreadableLoader::makeCrossOriginAccessRequestWithPreflight):

2012-04-09  Antti Koivisto  <antti@apple.com>

        Don't expose internal CSSValues in API
        https://bugs.webkit.org/show_bug.cgi?id=83426
        
        Reviewed by Andreas Kling.

        The CSSValues returned from functions like CSSStyleDeclaration.getPropertyCSSValue() are currently
        the same instances we use internally. This creates various problems. The values can't be shared between 
        documents as the wrappers would be shared too. Having to maintain per-document CSSValuePools complicate 
        the architecture and increase memory usage. This also blocks sharing style sheet data structures 
        between documents.
        
        This patch adds a concept of CSSOM-safe CSSValue. Only the safe values can be wrapped for JS access. 
        Values are unsafe by default. The CSSOM functions that return CSSValues create safe instances by
        cloning the internal values.
        
        The use of APIs that return CSSValues is very rare (the currect CSSOM draft deprecates them) and
        cloning is cheap in any case. Future patches will eliminate the per-document value pool in favor
        of a global one for a memory win.
        
        In the future we want to replace internally used CSSValues with true internal types (StyleValues) and
        use CSSValues exclusively as wrappers (similar to how CSSStyleRule wraps internal StyleRule).

        * bindings/js/JSCSSValueCustom.cpp:
        (WebCore::toJS):
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValueInternal):
        * css/CSSImageSetValue.cpp:
        (WebCore::CSSImageSetValue::CSSImageSetValue):
        (WebCore):
        (WebCore::CSSImageSetValue::cloneForCSSOM):
        * css/CSSImageSetValue.h:
        (CSSImageSetValue):
        * css/CSSPrimitiveValue.cpp:
        (WebCore::CSSPrimitiveValue::cleanup):
        
            Opportunistically fix a string leak for CSS_COUNTER_NAME values.
            Add all cases, remove default.
        
        (WebCore::CSSPrimitiveValue::cloneForCSSOM):
        (WebCore):
        * css/CSSPrimitiveValue.h:
        (CSSPrimitiveValue):
        (WebCore::CSSPrimitiveValue::setCSSOMSafe):
        * css/CSSValue.cpp:
        (WebCore):
        (TextCloneCSSValue):
        (WebCore::TextCloneCSSValue::create):
        (WebCore::TextCloneCSSValue::cssText):
        (WebCore::TextCloneCSSValue::TextCloneCSSValue):
        
            Most non-primitive value types are not exposed in CSSOM. For those we create a dummy value
            that contains only the data that is accessible though the base CSSValue interface.
        
        (WebCore::CSSValue::addSubresourceStyleURLs):
        (WebCore::CSSValue::cssText):
        (WebCore::CSSValue::destroy):
        (WebCore::CSSValue::cloneForCSSOM):
        * css/CSSValue.h:
        (WebCore):
        (CSSValue):
        (WebCore::CSSValue::isCSSOMSafe):
        (WebCore::CSSValue::isSubtypeExposedToCSSOM):
        (WebCore::CSSValue::CSSValue):
        * css/CSSValueList.cpp:
        (WebCore::CSSValueList::CSSValueList):
        (WebCore):
        (WebCore::CSSValueList::cloneForCSSOM):
        * css/CSSValueList.h:
        (CSSValueList):
        * css/Counter.h:
        (Counter):
        (WebCore::Counter::cloneForCSSOM):
        * css/PropertySetCSSStyleDeclaration.cpp:
        (WebCore::PropertySetCSSStyleDeclaration::setCssText):
        (WebCore::PropertySetCSSStyleDeclaration::getPropertyCSSValue):
        (WebCore::PropertySetCSSStyleDeclaration::setProperty):
        (WebCore::PropertySetCSSStyleDeclaration::removeProperty):
        (WebCore::PropertySetCSSStyleDeclaration::getPropertyCSSValueInternal):
        (WebCore::PropertySetCSSStyleDeclaration::setPropertyInternal):
        (WebCore::PropertySetCSSStyleDeclaration::didMutate):
        (WebCore):
        (WebCore::PropertySetCSSStyleDeclaration::cloneAndCacheForCSSOM):
        
            Maintain a map of safe CSSValues so we can maintain object identity.
        
        * css/PropertySetCSSStyleDeclaration.h:
        (WebCore::PropertySetCSSStyleDeclaration::setNeedsStyleRecalc):
        (PropertySetCSSStyleDeclaration):
        * css/RGBColor.cpp:
        (WebCore::RGBColor::red):
        (WebCore::RGBColor::green):
        (WebCore::RGBColor::blue):
        (WebCore::RGBColor::alpha):
        * css/Rect.h:
        (WebCore::RectBase::RectBase):
        (RectBase):
        (Rect):
        (WebCore::Rect::cloneForCSSOM):
        (WebCore::Rect::Rect):
        (Quad):
        (WebCore::Quad::cloneForCSSOM):
        (WebCore::Quad::Quad):
        * css/WebKitCSSFilterValue.cpp:
        (WebCore::WebKitCSSFilterValue::WebKitCSSFilterValue):
        (WebCore):
        (WebCore::WebKitCSSFilterValue::cloneForCSSOM):
        * css/WebKitCSSFilterValue.h:
        (WebKitCSSFilterValue):
        * css/WebKitCSSTransformValue.cpp:
        (WebCore::WebKitCSSTransformValue::WebKitCSSTransformValue):
        (WebCore):
        (WebCore::WebKitCSSTransformValue::cloneForCSSOM):
        * css/WebKitCSSTransformValue.h:
        (WebKitCSSTransformValue):
        * svg/SVGColor.cpp:
        (WebCore::SVGColor::SVGColor):
        (WebCore):
        (WebCore::SVGColor::cloneForCSSOM):
        * svg/SVGColor.h:
        (SVGColor):
        * svg/SVGPaint.cpp:
        (WebCore::SVGPaint::SVGPaint):
        (WebCore):
        (WebCore::SVGPaint::cloneForCSSOM):
        * svg/SVGPaint.h:
        (SVGPaint):
        * svg/SVGStyledElement.cpp:
        (WebCore::SVGStyledElement::getPresentationAttribute):

2012-04-09  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: get rid of WebInspector.Resource.category, use  WebInspector.Resource.type instead.
        https://bugs.webkit.org/show_bug.cgi?id=83467

        Reviewed by Yury Semikhatsky.

        WebInspector.Resource.category is derived from the  WebInspector.Resource.type and there is no real need it maintaining both.

        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * inspector/compile-front-end.py:
        * inspector/front-end/AuditLauncherView.js:
        (WebInspector.AuditLauncherView.prototype._onResourceStarted):
        (WebInspector.AuditLauncherView.prototype._onResourceFinished):
        * inspector/front-end/AuditRules.js:
        (WebInspector.AuditRules.GzipRule.prototype._shouldCompress):
        (WebInspector.AuditRules.CombineJsResourcesRule):
        (WebInspector.AuditRules.CombineCssResourcesRule):
        (WebInspector.AuditRules.ParallelizeDownloadRule.prototype.doRun):
        (WebInspector.AuditRules.UnusedCssRule.prototype.doRun.evalCallback.selectorsCallback):
        (WebInspector.AuditRules.CacheControlRule.prototype.isCompressible):
        (WebInspector.AuditRules.StaticCookielessRule.prototype.processCookies):
        * inspector/front-end/CSSStyleModel.js:
        (WebInspector.CSSStyleModelResourceBinding):
        (WebInspector.CSSStyleModelResourceBinding.prototype.setContent):
        (WebInspector.CSSStyleModelResourceBinding.prototype._innerStyleSheetChanged):
        * inspector/front-end/ContentProviders.js:
        (WebInspector.ResourceContentProvider):
        * inspector/front-end/DebuggerPresentationModel.js:
        (WebInspector.DebuggerPresentationModelResourceBinding):
        * inspector/front-end/ElementsPanel.js:
        (WebInspector.ElementsPanel.prototype._getPopoverAnchor):
        * inspector/front-end/ExtensionServer.js:
        (WebInspector.ExtensionServer.prototype._makeResource):
        * inspector/front-end/NetworkManager.js:
        (WebInspector.NetworkManager.get this):
        (WebInspector.NetworkManager.get NetworkAgent):
        (WebInspector.NetworkManager):
        (WebInspector.NetworkDispatcher.prototype._updateResourceWithResponse):
        (WebInspector.NetworkDispatcher.prototype._mimeTypeIsConsistentWithType):
        (WebInspector.NetworkDispatcher.prototype._updateResourceWithCachedResource):
        (WebInspector.NetworkDispatcher.prototype.responseReceived):
        (WebInspector.NetworkDispatcher.prototype.webSocketCreated):
        * inspector/front-end/NetworkPanel.js:
        (WebInspector.NetworkLogView.prototype._createFilterStatusBarItems):
        (WebInspector.NetworkLogView.prototype._updateSummaryBar):
        (WebInspector.NetworkDataGridNode.prototype.isFilteredOut):
        (WebInspector.NetworkDataGridNode.prototype.refreshResource):
        (WebInspector.NetworkDataGridNode.prototype._refreshNameCell):
        (WebInspector.NetworkDataGridNode.prototype.refreshGraph):
        * inspector/front-end/Resource.js:
        (WebInspector.Resource):
        (WebInspector.Resource.registerDomainModelBinding):
        (WebInspector.Resource.prototype.set type):
        (WebInspector.Resource.prototype.isEditable):
        (WebInspector.Resource.prototype.setContent):
        (WebInspector.Resource.prototype.requestContent):
        * inspector/front-end/ResourceCategory.js: Removed.
        * inspector/front-end/ResourcePreviewView.js:
        (WebInspector.ResourcePreviewView.prototype._createPreviewView):
        * inspector/front-end/ResourceScriptMapping.js:
        (WebInspector.ResourceScriptMapping.prototype.addScript):
        * inspector/front-end/ResourceTreeModel.js:
        (WebInspector.ResourceTreeModel.prototype._onResourceUpdated):
        (WebInspector.ResourceTreeModel.prototype._onResourceUpdateDropped):
        (WebInspector.ResourceTreeModel.prototype._addFramesRecursively):
        * inspector/front-end/ResourceType.js: Added.
        (WebInspector.ResourceType):
        (WebInspector.ResourceType.prototype.name):
        (WebInspector.ResourceType.prototype.title):
        (WebInspector.ResourceType.prototype.categoryTitle):
        (WebInspector.ResourceType.prototype.color):
        (WebInspector.ResourceType.prototype.isTextType):
        (WebInspector.ResourceType.prototype.toString):
        * inspector/front-end/ResourceView.js:
        (WebInspector.ResourceView.hasTextContent):
        (WebInspector.ResourceView.nonSourceViewForResource):
        (WebInspector.EditableResourceSourceFrame.prototype.canEditSource):
        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.FrameTreeElement.prototype.appendResource):
        (WebInspector.FrameResourceTreeElement):
        (WebInspector.FrameResourceTreeElement.prototype.onattach):
        (WebInspector.ResourceRevisionTreeElement):
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/inspector.html:

2012-04-09  Alexis Menard  <alexis.menard@openbossa.org>

        Unreviewed, adding a missing header for the Qt port.

        * Target.pri:

2012-04-09  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: [network panel] type column shows "undefined" instead of "(Pending)" upon load.
        https://bugs.webkit.org/show_bug.cgi?id=83470

        Reviewed by Yury Semikhatsky.

        isPingRequest is tested for as a field, not a function return value.
        
        * inspector/front-end/NetworkPanel.js:
        (WebInspector.NetworkDataGridNode.prototype._refreshTypeCell):

2012-03-30  Robert Hogan  <robert@webkit.org>

        REGRESSION (r94492): Incorrect initial layout of absolutely positioned <input> inside centering div
        https://bugs.webkit.org/show_bug.cgi?id=77754

        Reviewed by David Hyatt.

        The correct static position of an center-aligned, inline, absolutely positioned object with a block child can't be known
        until the width of the child has been computed. This means that setStaticPositions() in RenderBlockLineLayout is setting
        the position too early, before the width of the child has been finalised. To fix, adjust the static position of the inline
        positioned object once its child's width has been calculated.

        Test: fast/css/align-positioned-object-on-resize.html

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

2012-04-09  Eric Carlson  <eric.carlson@apple.com>

        WebVTT parser unnecessarily limits the value of a timestamp
        https://bugs.webkit.org/show_bug.cgi?id=83422

        Reviewed by Dan Bernstein.

        Test: media/track/track-large-timestamp.html

        * html/track/WebVTTParser.cpp:
        (WebCore::WebVTTParser::collectTimeStamp): Make all constants double instead of int so 
            the maximum number of hours is increased and so we don't need any casts.

2012-04-09  Abhishek Arya  <inferno@chromium.org>

        Incorrect placement of new child to table when before child parent is not |this|.
        https://bugs.webkit.org/show_bug.cgi?id=82630

        Reviewed by Julien Chaffraix.

        Tests: fast/table/table-row-split2.html
               fast/table/table-section-split2.html
               fast/table/table-split.html
               fast/table/table-split2.html
        and tested by layouttests in commits r97180, r108127, and a few others.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::addChildToAnonymousColumnBlocks): function rename, block->box.
        (WebCore::RenderBlock::makeChildrenAnonymousColumnBlocks): ditto.
        (WebCore::RenderBlock::addChildIgnoringAnonymousColumnBlocks): ditto.
        * rendering/RenderBlock.h:
        (RenderBlock):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::moveChildTo): move these functions from RenderBlock, needs to be
        used in RenderBox::splitAnonymousBoxesAroundChild.
        (WebCore):
        (WebCore::RenderBox::moveChildrenTo): ditto.
        (WebCore::markBoxForRelayoutAfterSplit): helper to mark a block or table part for complete relayout
        after anonymous boxes are split around child.
        (WebCore::RenderBox::splitAnonymousBoxesAroundChild): moved from RenderBlock to be able
        to work with table parts.
        * rendering/RenderBox.h:
        (RenderBox):
        (WebCore::RenderBox::moveChildTo):
        (WebCore::RenderBox::moveAllChildrenTo):
        (WebCore::RenderBox::moveChildrenTo):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::addChild): no longer need the hack added in r95461.
        * rendering/RenderRubyBase.cpp:
        (WebCore::RenderRubyBase::moveChildren): function rename, block->box.
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::addChild): Use splitAnonymousBoxesAroundChild function when |beforeChild| != |this|.
        * rendering/RenderTableRow.cpp:
        (WebCore::RenderTableRow::addChild): ditto. 
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::addChild): ditto.

2012-04-03  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        WebSocketServer: Honour WebSocketFrame::masked in makeFrameData
        https://bugs.webkit.org/show_bug.cgi?id=83042

        Reviewed by Kent Tamura.

        Frames from the server should not be masked.
        Currently, the flag is set to false, but the frames were masked anyway.
        This causes clients with recent builds of WebKit to abort the connection to the
        inspector server, refusing masked frames from the server as per the spec.
        This doesn't change the behavior of WebSocket clients, which set the masked flag to true.

        * Modules/websockets/WebSocketFrame.cpp:
        (WebCore::appendFramePayload):
        (WebCore::WebSocketFrame::makeFrameData):

2012-04-09  Alexis Menard  <alexis.menard@openbossa.org>

        [Part 5] We should use CSSPropertyID rather than integers when manipulating CSS property ids.
        https://bugs.webkit.org/show_bug.cgi?id=83466

        Reviewed by Kentaro Hara.

        CSSPropertyID enum holds all the CSS property ids but many parts of WebKit treat the ids
        as integers, this patch should adress the last remaining occurences of ints rather than CSSPropertyIDs.
    
        No new tests : There should be no behavior change in this patch.

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::collectMatchingRulesForList):
        * css/CSSStyleSelector.h:
        (CSSStyleSelector):
        * css/StylePropertySet.cpp:
        (WebCore::StylePropertySet::removePropertiesInSet):
        * page/animation/AnimationBase.cpp:
        (WebCore::gatherEnclosingShorthandProperties):
        (WebCore::AnimationBase::animatableShorthandsAffectingProperty):
        * page/animation/AnimationBase.h:
        (AnimationBase):
        * page/animation/CompositeAnimation.cpp:
        (WebCore::CompositeAnimation::pauseTransitionAtTime):
        * page/animation/KeyframeAnimation.cpp:
        (WebCore::KeyframeAnimation::animate):
        (WebCore::KeyframeAnimation::getAnimatedStyle):
        (WebCore::KeyframeAnimation::overrideAnimations):
        (WebCore::KeyframeAnimation::resumeOverriddenAnimations):
        (WebCore::KeyframeAnimation::timeToNextService):
        * rendering/style/KeyframeList.cpp:
        (WebCore::KeyframeList::insert):
        * rendering/style/KeyframeList.h:
        (WebCore::KeyframeValue::addProperty):
        (WebCore::KeyframeValue::containsProperty):
        (WebCore::KeyframeValue::properties):
        (KeyframeValue):
        (WebCore::KeyframeList::addProperty):
        (WebCore::KeyframeList::containsProperty):
        (WebCore::KeyframeList::beginProperties):
        (WebCore::KeyframeList::endProperties):
        (KeyframeList):

2012-04-09  Kentaro Hara  <haraken@chromium.org>

        Unreviewed, rebaselined run-bindings-tests results.

        * bindings/scripts/test/JS/JSFloat64Array.cpp:
        (WebCore::JSFloat64ArrayConstructor::getOwnPropertySlot):
        (WebCore::JSFloat64ArrayConstructor::getOwnPropertyDescriptor):
        (WebCore::jsFloat64ArrayConstructor):
        (WebCore::JSFloat64Array::getConstructor):
        (WebCore::jsFloat64ArrayPrototypeFunctionFoo):
        (WebCore::toFloat64Array):
        * bindings/scripts/test/JS/JSTestActiveDOMObject.cpp:
        (WebCore::JSTestActiveDOMObjectConstructor::getOwnPropertySlot):
        (WebCore::JSTestActiveDOMObjectConstructor::getOwnPropertyDescriptor):
        (WebCore::jsTestActiveDOMObjectExcitingAttr):
        (WebCore::jsTestActiveDOMObjectConstructor):
        (WebCore::JSTestActiveDOMObject::getConstructor):
        (WebCore::jsTestActiveDOMObjectPrototypeFunctionExcitingFunction):
        (WebCore::jsTestActiveDOMObjectPrototypeFunctionPostMessage):
        (WebCore::JSTestActiveDOMObjectOwner::isReachableFromOpaqueRoots):
        (WebCore::JSTestActiveDOMObjectOwner::finalize):
        (WebCore::toTestActiveDOMObject):
        * bindings/scripts/test/JS/JSTestCustomNamedGetter.cpp:
        (WebCore::JSTestCustomNamedGetterConstructor::getOwnPropertySlot):
        (WebCore::JSTestCustomNamedGetterConstructor::getOwnPropertyDescriptor):
        (WebCore::jsTestCustomNamedGetterConstructor):
        (WebCore::JSTestCustomNamedGetter::getConstructor):
        (WebCore::jsTestCustomNamedGetterPrototypeFunctionAnotherFunction):
        (WebCore::JSTestCustomNamedGetterOwner::isReachableFromOpaqueRoots):
        (WebCore::JSTestCustomNamedGetterOwner::finalize):
        (WebCore::toTestCustomNamedGetter):
        * bindings/scripts/test/JS/JSTestEventConstructor.cpp:
        (WebCore::JSTestEventConstructorConstructor::getOwnPropertySlot):
        (WebCore::JSTestEventConstructorConstructor::getOwnPropertyDescriptor):
        (WebCore::JSTestEventConstructorConstructor::constructJSTestEventConstructor):
        (WebCore::jsTestEventConstructorAttr1):
        (WebCore::jsTestEventConstructorAttr2):
        (WebCore::jsTestEventConstructorConstructor):
        (WebCore::JSTestEventConstructor::getConstructor):
        (WebCore::JSTestEventConstructorOwner::isReachableFromOpaqueRoots):
        (WebCore::JSTestEventConstructorOwner::finalize):
        (WebCore::toTestEventConstructor):
        * bindings/scripts/test/JS/JSTestEventTarget.cpp:
        (WebCore::JSTestEventTargetConstructor::getOwnPropertySlot):
        (WebCore::JSTestEventTargetConstructor::getOwnPropertyDescriptor):
        (WebCore::jsTestEventTargetConstructor):
        (WebCore::JSTestEventTarget::getConstructor):
        (WebCore::jsTestEventTargetPrototypeFunctionItem):
        (WebCore::jsTestEventTargetPrototypeFunctionAddEventListener):
        (WebCore::jsTestEventTargetPrototypeFunctionRemoveEventListener):
        (WebCore::jsTestEventTargetPrototypeFunctionDispatchEvent):
        (WebCore::JSTestEventTarget::indexGetter):
        (WebCore::JSTestEventTargetOwner::isReachableFromOpaqueRoots):
        (WebCore::JSTestEventTargetOwner::finalize):
        (WebCore::toTestEventTarget):
        * bindings/scripts/test/JS/JSTestInterface.cpp:
        (WebCore::JSTestInterfaceConstructor::getOwnPropertySlot):
        (WebCore::JSTestInterfaceConstructor::getOwnPropertyDescriptor):
        (WebCore::JSTestInterfaceConstructor::constructJSTestInterface):
        (WebCore::jsTestInterfaceSupplementalStr1):
        (WebCore::jsTestInterfaceSupplementalStr2):
        (WebCore::jsTestInterfaceSupplementalStr3):
        (WebCore::jsTestInterfaceSupplementalNode):
        (WebCore::jsTestInterfaceConstructor):
        (WebCore::setJSTestInterfaceSupplementalStr2):
        (WebCore::setJSTestInterfaceSupplementalStr3):
        (WebCore::setJSTestInterfaceSupplementalNode):
        (WebCore::JSTestInterface::getConstructor):
        (WebCore::jsTestInterfacePrototypeFunctionSupplementalMethod1):
        (WebCore::jsTestInterfacePrototypeFunctionSupplementalMethod2):
        (WebCore::jsTestInterfacePrototypeFunctionSupplementalMethod3):
        (WebCore::JSTestInterfaceOwner::isReachableFromOpaqueRoots):
        (WebCore::JSTestInterfaceOwner::finalize):
        (WebCore::toTestInterface):
        * bindings/scripts/test/JS/JSTestMediaQueryListListener.cpp:
        (WebCore::JSTestMediaQueryListListenerConstructor::getOwnPropertySlot):
        (WebCore::JSTestMediaQueryListListenerConstructor::getOwnPropertyDescriptor):
        (WebCore::jsTestMediaQueryListListenerConstructor):
        (WebCore::JSTestMediaQueryListListener::getConstructor):
        (WebCore::jsTestMediaQueryListListenerPrototypeFunctionMethod):
        (WebCore::JSTestMediaQueryListListenerOwner::isReachableFromOpaqueRoots):
        (WebCore::JSTestMediaQueryListListenerOwner::finalize):
        (WebCore::toTestMediaQueryListListener):
        * bindings/scripts/test/JS/JSTestNamedConstructor.cpp:
        (WebCore::JSTestNamedConstructorConstructor::getOwnPropertySlot):
        (WebCore::JSTestNamedConstructorConstructor::getOwnPropertyDescriptor):
        (WebCore::JSTestNamedConstructorNamedConstructor::constructJSTestNamedConstructor):
        (WebCore::jsTestNamedConstructorConstructor):
        (WebCore::JSTestNamedConstructor::getConstructor):
        (WebCore::JSTestNamedConstructorOwner::isReachableFromOpaqueRoots):
        (WebCore::JSTestNamedConstructorOwner::finalize):
        (WebCore::toTestNamedConstructor):
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::JSTestObjConstructor::getOwnPropertySlot):
        (WebCore::JSTestObjConstructor::getOwnPropertyDescriptor):
        (WebCore::JSTestObjConstructor::constructJSTestObj):
        (WebCore::jsTestObjReadOnlyIntAttr):
        (WebCore::jsTestObjReadOnlyStringAttr):
        (WebCore::jsTestObjReadOnlyTestObjAttr):
        (WebCore::jsTestObjShortAttr):
        (WebCore::jsTestObjUnsignedShortAttr):
        (WebCore::jsTestObjIntAttr):
        (WebCore::jsTestObjLongLongAttr):
        (WebCore::jsTestObjUnsignedLongLongAttr):
        (WebCore::jsTestObjStringAttr):
        (WebCore::jsTestObjTestObjAttr):
        (WebCore::jsTestObjSequenceAttr):
        (WebCore::jsTestObjXMLObjAttr):
        (WebCore::jsTestObjCreate):
        (WebCore::jsTestObjReflectedStringAttr):
        (WebCore::jsTestObjReflectedIntegralAttr):
        (WebCore::jsTestObjReflectedUnsignedIntegralAttr):
        (WebCore::jsTestObjReflectedBooleanAttr):
        (WebCore::jsTestObjReflectedURLAttr):
        (WebCore::jsTestObjReflectedCustomIntegralAttr):
        (WebCore::jsTestObjReflectedCustomBooleanAttr):
        (WebCore::jsTestObjReflectedCustomURLAttr):
        (WebCore::jsTestObjAttrWithGetterException):
        (WebCore::jsTestObjAttrWithSetterException):
        (WebCore::jsTestObjStringAttrWithGetterException):
        (WebCore::jsTestObjStringAttrWithSetterException):
        (WebCore::jsTestObjCustomAttr):
        (WebCore::jsTestObjWithScriptStateAttribute):
        (WebCore::jsTestObjWithScriptExecutionContextAttribute):
        (WebCore::jsTestObjWithScriptStateAttributeRaises):
        (WebCore::jsTestObjWithScriptExecutionContextAttributeRaises):
        (WebCore::jsTestObjWithScriptExecutionContextAndScriptStateAttribute):
        (WebCore::jsTestObjWithScriptExecutionContextAndScriptStateAttributeRaises):
        (WebCore::jsTestObjWithScriptExecutionContextAndScriptStateWithSpacesAttribute):
        (WebCore::jsTestObjWithScriptArgumentsAndCallStackAttribute):
        (WebCore::jsTestObjConditionalAttr1):
        (WebCore::jsTestObjConditionalAttr2):
        (WebCore::jsTestObjConditionalAttr3):
        (WebCore::jsTestObjConditionalAttr4Constructor):
        (WebCore::jsTestObjConditionalAttr5Constructor):
        (WebCore::jsTestObjConditionalAttr6Constructor):
        (WebCore::jsTestObjCachedAttribute1):
        (WebCore::jsTestObjCachedAttribute2):
        (WebCore::jsTestObjContentDocument):
        (WebCore::jsTestObjMutablePoint):
        (WebCore::jsTestObjImmutablePoint):
        (WebCore::jsTestObjStrawberry):
        (WebCore::jsTestObjStrictFloat):
        (WebCore::jsTestObjDescription):
        (WebCore::jsTestObjId):
        (WebCore::jsTestObjHash):
        (WebCore::jsTestObjConstructor):
        (WebCore::setJSTestObjShortAttr):
        (WebCore::setJSTestObjUnsignedShortAttr):
        (WebCore::setJSTestObjIntAttr):
        (WebCore::setJSTestObjLongLongAttr):
        (WebCore::setJSTestObjUnsignedLongLongAttr):
        (WebCore::setJSTestObjStringAttr):
        (WebCore::setJSTestObjTestObjAttr):
        (WebCore::setJSTestObjSequenceAttr):
        (WebCore::setJSTestObjXMLObjAttr):
        (WebCore::setJSTestObjCreate):
        (WebCore::setJSTestObjReflectedStringAttr):
        (WebCore::setJSTestObjReflectedIntegralAttr):
        (WebCore::setJSTestObjReflectedUnsignedIntegralAttr):
        (WebCore::setJSTestObjReflectedBooleanAttr):
        (WebCore::setJSTestObjReflectedURLAttr):
        (WebCore::setJSTestObjReflectedCustomIntegralAttr):
        (WebCore::setJSTestObjReflectedCustomBooleanAttr):
        (WebCore::setJSTestObjReflectedCustomURLAttr):
        (WebCore::setJSTestObjAttrWithGetterException):
        (WebCore::setJSTestObjAttrWithSetterException):
        (WebCore::setJSTestObjStringAttrWithGetterException):
        (WebCore::setJSTestObjStringAttrWithSetterException):
        (WebCore::setJSTestObjCustomAttr):
        (WebCore::setJSTestObjWithScriptStateAttribute):
        (WebCore::setJSTestObjWithScriptExecutionContextAttribute):
        (WebCore::setJSTestObjWithScriptStateAttributeRaises):
        (WebCore::setJSTestObjWithScriptExecutionContextAttributeRaises):
        (WebCore::setJSTestObjWithScriptExecutionContextAndScriptStateAttribute):
        (WebCore::setJSTestObjWithScriptExecutionContextAndScriptStateAttributeRaises):
        (WebCore::setJSTestObjWithScriptExecutionContextAndScriptStateWithSpacesAttribute):
        (WebCore::setJSTestObjWithScriptArgumentsAndCallStackAttribute):
        (WebCore::setJSTestObjConditionalAttr1):
        (WebCore::setJSTestObjConditionalAttr2):
        (WebCore::setJSTestObjConditionalAttr3):
        (WebCore::setJSTestObjConditionalAttr4Constructor):
        (WebCore::setJSTestObjConditionalAttr5Constructor):
        (WebCore::setJSTestObjConditionalAttr6Constructor):
        (WebCore::setJSTestObjMutablePoint):
        (WebCore::setJSTestObjImmutablePoint):
        (WebCore::setJSTestObjStrawberry):
        (WebCore::setJSTestObjStrictFloat):
        (WebCore::setJSTestObjId):
        (WebCore::JSTestObj::getConstructor):
        (WebCore::jsTestObjPrototypeFunctionVoidMethod):
        (WebCore::jsTestObjPrototypeFunctionVoidMethodWithArgs):
        (WebCore::jsTestObjPrototypeFunctionIntMethod):
        (WebCore::jsTestObjPrototypeFunctionIntMethodWithArgs):
        (WebCore::jsTestObjPrototypeFunctionObjMethod):
        (WebCore::jsTestObjPrototypeFunctionObjMethodWithArgs):
        (WebCore::jsTestObjPrototypeFunctionMethodWithSequenceArg):
        (WebCore::jsTestObjPrototypeFunctionMethodReturningSequence):
        (WebCore::jsTestObjPrototypeFunctionMethodThatRequiresAllArgsAndThrows):
        (WebCore::jsTestObjPrototypeFunctionSerializedValue):
        (WebCore::jsTestObjPrototypeFunctionIdbKey):
        (WebCore::jsTestObjPrototypeFunctionOptionsObject):
        (WebCore::jsTestObjPrototypeFunctionMethodWithException):
        (WebCore::jsTestObjPrototypeFunctionCustomMethod):
        (WebCore::jsTestObjPrototypeFunctionCustomMethodWithArgs):
        (WebCore::jsTestObjPrototypeFunctionAddEventListener):
        (WebCore::jsTestObjPrototypeFunctionRemoveEventListener):
        (WebCore::jsTestObjPrototypeFunctionWithScriptStateVoid):
        (WebCore::jsTestObjPrototypeFunctionWithScriptStateObj):
        (WebCore::jsTestObjPrototypeFunctionWithScriptStateVoidException):
        (WebCore::jsTestObjPrototypeFunctionWithScriptStateObjException):
        (WebCore::jsTestObjPrototypeFunctionWithScriptExecutionContext):
        (WebCore::jsTestObjPrototypeFunctionWithScriptExecutionContextAndScriptState):
        (WebCore::jsTestObjPrototypeFunctionWithScriptExecutionContextAndScriptStateObjException):
        (WebCore::jsTestObjPrototypeFunctionWithScriptExecutionContextAndScriptStateWithSpaces):
        (WebCore::jsTestObjPrototypeFunctionWithScriptArgumentsAndCallStack):
        (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalArg):
        (WebCore::jsTestObjPrototypeFunctionMethodWithNonOptionalArgAndOptionalArg):
        (WebCore::jsTestObjPrototypeFunctionMethodWithNonOptionalArgAndTwoOptionalArgs):
        (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalString):
        (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalStringIsUndefined):
        (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalStringIsNullString):
        (WebCore::jsTestObjPrototypeFunctionMethodWithCallbackArg):
        (WebCore::jsTestObjPrototypeFunctionMethodWithNonCallbackArgAndCallbackArg):
        (WebCore::jsTestObjPrototypeFunctionMethodWithCallbackAndOptionalArg):
        (WebCore::jsTestObjPrototypeFunctionConditionalMethod1):
        (WebCore::jsTestObjPrototypeFunctionConditionalMethod2):
        (WebCore::jsTestObjPrototypeFunctionConditionalMethod3):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethod1):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethod2):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethod3):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethod4):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethod5):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethod6):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethod7):
        (WebCore::jsTestObjPrototypeFunctionMethodWithUnsignedLongArray):
        (WebCore::jsTestObjPrototypeFunctionGetSVGDocument):
        (WebCore::jsTestObjPrototypeFunctionConvert1):
        (WebCore::jsTestObjPrototypeFunctionConvert2):
        (WebCore::jsTestObjPrototypeFunctionConvert3):
        (WebCore::jsTestObjPrototypeFunctionConvert4):
        (WebCore::jsTestObjPrototypeFunctionConvert5):
        (WebCore::jsTestObjPrototypeFunctionMutablePointFunction):
        (WebCore::jsTestObjPrototypeFunctionImmutablePointFunction):
        (WebCore::jsTestObjPrototypeFunctionOrange):
        (WebCore::jsTestObjPrototypeFunctionStrictFunction):
        (WebCore::JSTestObjOwner::isReachableFromOpaqueRoots):
        (WebCore::JSTestObjOwner::finalize):
        (WebCore::toTestObj):
        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp:
        (WebCore::JSTestSerializedScriptValueInterfaceConstructor::getOwnPropertySlot):
        (WebCore::JSTestSerializedScriptValueInterfaceConstructor::getOwnPropertyDescriptor):
        (WebCore::JSTestSerializedScriptValueInterfaceConstructor::constructJSTestSerializedScriptValueInterface):
        (WebCore::jsTestSerializedScriptValueInterfaceValue):
        (WebCore::jsTestSerializedScriptValueInterfaceReadonlyValue):
        (WebCore::jsTestSerializedScriptValueInterfaceCachedValue):
        (WebCore::jsTestSerializedScriptValueInterfaceCachedReadonlyValue):
        (WebCore::jsTestSerializedScriptValueInterfaceConstructor):
        (WebCore::setJSTestSerializedScriptValueInterfaceValue):
        (WebCore::setJSTestSerializedScriptValueInterfaceCachedValue):
        (WebCore::JSTestSerializedScriptValueInterface::getConstructor):
        (WebCore::jsTestSerializedScriptValueInterfacePrototypeFunctionAcceptTransferList):
        (WebCore::jsTestSerializedScriptValueInterfacePrototypeFunctionMultiTransferList):
        (WebCore::JSTestSerializedScriptValueInterfaceOwner::isReachableFromOpaqueRoots):
        (WebCore::JSTestSerializedScriptValueInterfaceOwner::finalize):
        (WebCore::toTestSerializedScriptValueInterface):

2012-04-09  Charles Wei  <charles.wei@torchmobile.com.cn>

        [BlackBerry] Upstream BlackBerry change to WebCore::TouchEvent
        https://bugs.webkit.org/show_bug.cgi?id=83454

        Reviewed by Rob Buis.

        BlackBerry-port enhances the TouchEvent by adding member variables
        to indicate if the event is double-tap or touch-hold.

        * dom/TouchEvent.cpp:
        (WebCore::TouchEvent::TouchEvent):
        (WebCore::TouchEvent::initTouchEvent):
        * dom/TouchEvent.h:
        (TouchEvent):
        (WebCore::TouchEvent::setDoubleTap):
        (WebCore::TouchEvent::isDoubleTap):
        (WebCore::TouchEvent::setTouchHold):
        (WebCore::TouchEvent::isTouchHold):

2012-04-09  James Robinson  <jamesr@chromium.org>

        Remove partially implemented per-Element visibility checks from requestAnimationFrame logic
        https://bugs.webkit.org/show_bug.cgi?id=74232

        Reviewed by Dean Jackson.

        The initial requestAnimationFrame implementation had an Element parameter as the second argument to the
        function. This element was intended to convey the element associated with the animation so that when the element
        was not visible the animation callback would not be run. The checked in implementation does a very limited check
        - testing for display:none and being detached from the tree - but does it in a way that does not work correctly
        if an element's visibility is manipulated by a callback running from a different document. It also adds
        significant complexity to the code, making it less hackable and easy to introduce subtle security bugs or
        infinite loops.

        This patch removes the parameter. Since it has always been marked optional, there is no web compat risk.

        If this functionality is added back in the future it needs to be implemented in a way that considers all
        callbacks within a Page and not only those within a single Document.

        * dom/Document.cpp:
        (WebCore::Document::webkitRequestAnimationFrame):
        * dom/Document.h:
        * dom/RequestAnimationFrameCallback.h:
        * dom/ScriptedAnimationController.cpp:
        (WebCore::ScriptedAnimationController::registerCallback):
        (WebCore::ScriptedAnimationController::serviceScriptedAnimations):
        * dom/ScriptedAnimationController.h:
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::webkitRequestAnimationFrame):
        * page/DOMWindow.h:
        * page/DOMWindow.idl:

2012-04-09  Chris Guan  <chris.guan@torchmobile.com.cn>

        [Blackberry] m_isRequestedByPlugin should be copied in ResourceRequest
        https://bugs.webkit.org/show_bug.cgi?id=83447

        Reviewed by George Staikos.

        It is an obvious error, We should copy m_isRequestedByPlugin in ResourceReuest.

        No new tests, because those existing plugin test cases are enough.

        * platform/network/blackberry/ResourceRequestBlackBerry.cpp:
        (WebCore::ResourceRequest::doPlatformCopyData):
        (WebCore::ResourceRequest::doPlatformAdopt):

2012-04-09  'Pavel Feldman'  <pfeldman@chromium.org>

        Not reviewed: fixing inspector front-end compilation that has been broken by the
        recent SaveAs and DOMStorage changes.

        * inspector/front-end/DOMStorage.js:
        * inspector/front-end/externs.js:
        (WebInspector.isURLSaved):

2012-04-09  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: remove ComboBoxFileSelector and SingleFileEditorContainer.
        https://bugs.webkit.org/show_bug.cgi?id=83460

        Reviewed by Yury Semikhatsky.

        We are now using scripts navigator and tabbed editor container, removing the old components.
        This change removes the corresponding classes and the abstractions used during the
        transition period.

        * English.lproj/localizedStrings.js:
        * inspector/front-end/ScriptsNavigator.js:
        (WebInspector.ScriptsNavigator.prototype._scriptSelected):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.get this):
        (WebInspector.ScriptsPanel.prototype.get defaultFocusedElement):
        (WebInspector.ScriptsPanel.prototype._addUISourceCode):
        (WebInspector.ScriptsPanel.prototype.setScriptSourceIsDirty):
        (WebInspector.ScriptsPanel.prototype._reset):
        (WebInspector.ScriptsPanel.prototype._showFile):
        (WebInspector.ScriptsPanel.prototype._uiSourceCodeReplaced):
        (WebInspector.ScriptsPanel.prototype._editorClosed):
        (WebInspector.ScriptsPanel.prototype._scriptSelected):
        (WebInspector.ScriptsPanel.prototype._hidePinnedNavigator):
        (WebInspector.ScriptsPanel.prototype.set _pinNavigator):
        * inspector/front-end/SettingsScreen.js:
        (WebInspector.SettingsScreen):
        * inspector/front-end/TabbedEditorContainer.js:
        (WebInspector.TabbedEditorContainerDelegate):
        (WebInspector.TabbedEditorContainerDelegate.prototype.viewForFile):
        (get WebInspector):
        (WebInspector.TabbedEditorContainer.prototype._tabClosed):
        * inspector/front-end/scriptsPanel.css:

2012-04-09  Dana Jansens  <danakj@chromium.org>

        [chromium] Make culling work with clipped rects
        https://bugs.webkit.org/show_bug.cgi?id=83217

        Reviewed by Adrienne Walker.

        Use new CCMathUtil transformation methods to deal with rects that clip
        the camera plane. This fixes three things:

        1. A layer completely behind the camera is not visible and should not
        occlude.
        2. A layer that is clipped by the camera is treated like a
        non-axis-aligned transform, as the result of a mapClippedRect() is a
        bounding box and may contain pixels not in the original rect. This guards
        our use of mapRect() when transforming occluded regions.
        3. A layer's occlusion must be clipped by its scissor rect. This scissor
        rect exists in its target space, so occlusion in screen space is only
        possible if its target also is axis aligned in the screen, such that
        the layer's scissor rect remains a rect in screen space.

        Unit tests: CCOcclusionTrackerTestLayerBehindCameraDoesNotOcclude
                    CCOcclusionTrackerTestLargePixelsOccludeInsideClipRect

        * platform/graphics/chromium/cc/CCOcclusionTracker.cpp:
        (WebCore::transformSurfaceOpaqueRegion):
        (WebCore::computeOcclusionBehindLayer):
        (WebCore::::markOccludedBehindLayer):
        (WebCore::testContentRectOccluded):
        (WebCore::computeUnoccludedContentRect):

2012-04-09  Zan Dobersek  <zandobersek@gmail.com>

        [Gtk] Web Inspector noinst_DATA images are copied into innacurately named directory
        https://bugs.webkit.org/show_bug.cgi?id=83423

        Reviewed by Martin Robinson.

        Copy Web Inspector images that are a part of the data not meant
        for installation into a directory named 'Images' rather than
        a lower-case version of that. This is required as until now,
        when using these inspector resources (for example during layout
        tests or manually pointing WEBKIT_INSPECTOR_PATH env to that
        location), the images were not displayed as they were not loadable.

        No new tests - no new functionality.

        * GNUmakefile.am:

2012-04-06  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: move breakpoints active state from scripts panel to debugger presentation model.
        https://bugs.webkit.org/show_bug.cgi?id=83374

        Reviewed by Yury Semikhatsky.

        Just moves the state and adds event to propagate it. This is needed to abstract
        JavaScriptSourceFrame from the ScriptsPanel.

        * inspector/front-end/DebuggerPresentationModel.js:
        (WebInspector.DebuggerPresentationModel):
        (WebInspector.DebuggerPresentationModel.prototype.setBreakpoint):
        (WebInspector.DebuggerPresentationModel.prototype._debuggerReset):
        (WebInspector.DebuggerPresentationModel.prototype.setBreakpointsActive):
        (WebInspector.DebuggerPresentationModel.prototype.breakpointsActive):
        * inspector/front-end/JavaScriptSourceFrame.js:
        (WebInspector.JavaScriptSourceFrame.prototype._setBreakpoint):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype._toggleBreakpointsClicked):
        (WebInspector.ScriptsPanel.prototype._breakpointsActiveStateChanged):
        (WebInspector.ScriptsPanel.prototype._createDebugToolbar):

2012-04-08  Takashi Sakamoto  <tasak@google.com>

        <content> in <meter> is not rendered correctly.
        https://bugs.webkit.org/show_bug.cgi?id=81311

        This code changes a code location where MeterValueElement's value
        attribute is initialized. In the old code, HTMLMeterElement's attach
        did. It is better to initialize the attribute just after creating
        meter's shadow subtree.

        Reviewed by Hajime Morita.

        No new tests, because an existing test,
        content-element-in-meter-element.html covers.
        However test_expectations.txt is changed. Now the test passes.

        * html/HTMLMeterElement.cpp:
        * html/HTMLMeterElement.h:
        (HTMLMeterElement):
        (HTMLMeterElement::attach):
        Removed attach method, because attach method is just calling
        LabelableElement::attach after removing didElementStateChange.
        (HTMLMeterElement::createShadowSubTree):
        Added setWidthPercentage to initialize MeterValueElement's value
        attribute.
        * LayoutTests/platform/chromium/test_expectations.txt:
        Removed BUGWK81311 fast/dom/shadow/content-element-in-meter.html,
        because now contentElementInMeterElement passes.

2012-04-08  Patrick Gansterer  <paroga@webkit.org>

        Build fix for !ENABLE(CSS_FILTERS) && ASSERT_DISABLED after r109953.

        * platform/graphics/ca/GraphicsLayerCA.cpp:

2012-04-07  Patrick Gansterer  <paroga@webkit.org>

        [CMake] Cleanup WTF include directories
        https://bugs.webkit.org/show_bug.cgi?id=82716

        Reviewed by Eric Seidel.

        * CMakeLists.txt:

2012-04-07  Rob Buis  <rbuis@rim.com>

        Remove dead code in SVGCSSParser
        https://bugs.webkit.org/show_bug.cgi?id=83404

        Reviewed by Nikolas Zimmermann.

        Remove code that was there to create a SVGColor representation for color, but was never reached. Since
        SVGColor is deprecated now (also see bug 15012), this code has lost any potential. Should SVGColor come
        back in SVG2 we can revisit this.

        Add a test to confirm for SVG we follow the CSS3 handling of color="currentColor". This is something the
        removed code never dealt with, but the existing code in CSSParser.cpp handles, make sure we stick to this
        behaviour in the future using this test.

        Test: svg/custom/currentColor-on-color.html

        * css/SVGCSSParser.cpp:
        (WebCore::CSSParser::parseSVGValue):

2012-04-07  Nikolas Zimmermann  <nzimmermann@rim.com>

        FrameData constructor zeroes all fields, causing ImageOrientation to be 0
        https://bugs.webkit.org/show_bug.cgi?id=83416

        Inofficially rubber-stamped by Tim Horton.

        Lots of svg/as-image/ crash on debug builds. FrameData is used in a Vector and currently
        special VectorTraits force it to be initialized with memset(), nulling all members, instead
        of properly initializing them causing the ImageOrientation bug. To be able to remove the
        SimpleClassVectorTraits specialization, we have to allow FrameData to be copied.

        * platform/graphics/BitmapImage.h:

2012-04-07  Nikolas Zimmermann  <nzimmermann@rim.com>

        Work around an entity parsing bug in libxml2 2.7.3 (supplied with Lion) and unskip tests
        https://bugs.webkit.org/show_bug.cgi?id=82577

        Reviewed by Filip Pizlo.

        Work-around entity expansion bug that affects several SVG tests on Lion.

        Sample test document which is currently broken:
        <?xml version="1.0" encoding="UTF-8"?>
        <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1 Basic//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-basic.dtd" [
        <!ENTITY Smile "<rect x='.5' y='.5' width='29' height='39' fill='black' stroke='red'/>">
        ]>

        <svg xmlns="http://www.w3.org/2000/svg">&Smile;</svg>

        The expanded rect carries no namespace, thus an Element will be created for it, instead of a SVGRectElement.
        libxml2 2.7.4 fixed this bug (https://bugzilla.gnome.org/show_bug.cgi?id=502960) in 2009 already, but Lion
        still ships with 2.7.3, so we need to find a work-around for the problem. It works like this:
        - When an entity is requested (getEntityHandler) determine whether the entity is being declared (while the <!ENTITY.. parses)
          or wheter its references (when the &Smile; is parsed). If its referenced, record the current depth of the libxml2 parser.
        - When startElementNs is called while we're expanding entities, be sure to transfer the namespace of the parent node
          to the new node, but only do this if the current depth() is greater than the depth() at the time where entity expansion started.
          This way we only apply our workaround for elements inside entities, that get expanded at the insertion point.
        - When endElementNs is called, and our current depth() is less than our equal to the depth() where entity expansion started,
          clear the recorded detph(), and stop executing the workaround.

        It requires storing an extra integer & boolean in XMLDocumentParser, which is only used for this work-around.

        * xml/parser/XMLDocumentParser.h:
        (XMLDocumentParser):
        (WebCore::XMLDocumentParser::isParsingEntityDeclaration):
        (WebCore::XMLDocumentParser::setIsParsingEntityDeclaration):
        (WebCore::XMLDocumentParser::depthTriggeringEntityExpansion):
        (WebCore::XMLDocumentParser::setDepthTriggeringEntityExpansion):
        * xml/parser/XMLDocumentParserLibxml2.cpp:
        (WebCore::XMLDocumentParser::XMLDocumentParser):
        (WebCore::hackAroundLibXMLEntityParsingBug):
        (WebCore::XMLDocumentParser::startElementNs):
        (WebCore::XMLDocumentParser::endElementNs):
        (WebCore::entityDeclarationHandler):
        (WebCore::getEntityHandler):
        (WebCore::XMLDocumentParser::initializeParserContext):

2012-04-06  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r113526.
        http://trac.webkit.org/changeset/113526
        https://bugs.webkit.org/show_bug.cgi?id=83417

        speculative rollout for broken chrome browser_test (Requested
        by simonjam on #webkit).

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::stopLoading):
        (WebCore::DocumentLoader::finishedLoading):
        (WebCore::DocumentLoader::setupForReplaceByMIMEType):
        (WebCore):
        (WebCore::DocumentLoader::setParsedArchiveData):
        (WebCore::DocumentLoader::scheduleArchiveLoad):
        (WebCore::DocumentLoader::documentURL):
        * loader/DocumentLoader.h:
        (DocumentLoader):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::receivedFirstData):
        (WebCore::FrameLoader::loadArchive):
        (WebCore::FrameLoader::stopAllLoaders):
        (WebCore::FrameLoader::finishedLoadingDocument):
        (WebCore):
        * loader/FrameLoader.h:
        (FrameLoader):
        (WebCore::FrameLoader::archive):

2012-04-06  James Robinson  <jamesr@chromium.org>

        [chromium] Avoid deleting impl tree when becoming invisible
        https://bugs.webkit.org/show_bug.cgi?id=83396

        Reviewed by Adrienne Walker.

        This bit of code in CCLayerTreeHost::didBecomeInvisible..() was an attempt to drop resources when becoming
        invisible. However, it's fairly confused - we drop textures via TextureManagers when going invisible and
        CCLayerImpl destructors can't delete non-managed resources since they do not have access to a context - so this
        code was never actually freeing up GPU resources. Having a sometimes-null CCLayerImpl tree when we still have a
        valid LayerChromium tree has lead to various tricky bugs.

        No new tests since this code wasn't doing anything useful in the first place.

        * platform/graphics/chromium/cc/CCLayerTreeHost.cpp:
        (WebCore::CCLayerTreeHost::didBecomeInvisibleOnImplThread):

2012-04-06  Leo Yang  <leo.yang@torchmobile.com.cn>

        LocalFileSystem::initializeLocalFileSystem should be static
        https://bugs.webkit.org/show_bug.cgi?id=83356

        Reviewed by Rob Buis.

        LocalFileSystem::initializeLocalFileSystem should be static because
        static LocalFileSystem::localFileSystem() requires initializeLocalFileSystem()
        is called before it gets called.

        No functionalities changed, no new tests.

        * Modules/filesystem/LocalFileSystem.h:
        (LocalFileSystem):

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

        [GTK] Accelerated compositing is broken after recent TextureMapper reorganizations
        https://bugs.webkit.org/show_bug.cgi?id=83393

        Reviewed by Noam Rosenthal.

        No new tests. This will be covered by existing accelerated compositing tests
        once the implementation is complete.

        The GTK+ implementation doesn't clip currently, so hold off enabling the
        scissor test until necessary.

        * platform/graphics/texmap/TextureMapperGL.cpp:
        (WebCore::TextureMapperGL::beginPainting): Do not enable the scissor test.
        (WebCore::TextureMapperGL::beginScissorClip): Enable the scissor test once
        we know for sure we will be using scissored clipping.

2012-04-06  Keishi Hattori  <keishi@webkit.org>

        Remove obsolete parts of <datalist> support code
        https://bugs.webkit.org/show_bug.cgi?id=83117

        Removing HTMLInputElement::selectedOption because it was removed from the specification.
        Removing -webkit-appearance:list-button and -webkit-input-list-button pseudo selector
        related code because we decided not to use it.

        Reviewed by Kent Tamura.

        * WebCore.order:
        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        * css/CSSSelector.cpp:
        (WebCore::CSSSelector::pseudoId):
        (WebCore::nameToPseudoTypeMap):
        (WebCore::CSSSelector::extractPseudoType):
        * css/CSSSelector.h:
        * css/CSSValueKeywords.in:
        * css/html.css:
        (datalist):
        * html/HTMLInputElement.cpp:
        * html/HTMLInputElement.h:
        (HTMLInputElement):
        * html/HTMLInputElement.idl:
        * inspector/front-end/SourceCSSTokenizer.js:
        (WebInspector.SourceCSSTokenizer):
        * inspector/front-end/SourceCSSTokenizer.re2js:
        * inspector/front-end/StylesSidebarPane.js:
        * platform/ThemeTypes.h:
        * platform/chromium/ThemeChromiumMac.mm:
        (WebCore::setupButtonCell):
        (WebCore::paintButton):
        (WebCore::ThemeChromiumMac::controlSize):
        (WebCore::ThemeChromiumMac::minimumControlSize):
        (WebCore::ThemeChromiumMac::controlBorder):
        (WebCore::ThemeChromiumMac::paint):
        * platform/mac/ThemeMac.mm:
        (WebCore::setUpButtonCell):
        (WebCore::paintButton):
        (WebCore::ThemeMac::controlSize):
        (WebCore::ThemeMac::minimumControlSize):
        (WebCore::ThemeMac::controlBorder):
        (WebCore::ThemeMac::paint):
        * platform/qt/RenderThemeQtMobile.cpp:
        (WebCore::RenderThemeQtMobile::computeSizeBasedOnStyle):
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::adjustStyle):
        (WebCore::RenderTheme::paint):
        (WebCore::RenderTheme::paintBorderOnly):
        (WebCore::RenderTheme::paintDecorations):
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::adjustRepaintRect):

2012-04-06  Oliver Hunt  <oliver@apple.com>

        Accessing the returnValue of a modal dialog should be performed directly on the global object.
        https://bugs.webkit.org/show_bug.cgi?id=83414

        Reviewed by Gavin Barraclough.

        Presumably during the mass-devirtualising of JSObject, this deliberate use of
        the GlobalObject's property lookup logic directly was replaced with a dynamic
        call.  That results in the DOMWindow filtering out the lookup.  This regression
        was masked by r93567.

        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::DialogHandler::returnValue):

2012-04-06  Nate Chapin  <japhet@chromium.org>

        Move Archive processing to DocumentLoader, instead of FrameLoader.
        https://bugs.webkit.org/show_bug.cgi?id=83055

        Reviewed by Adam Barth.

        No new tests, no functionality change intended.

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::finishedLoading):
        (WebCore::DocumentLoader::setupForReplaceByMIMEType):
        (WebCore::DocumentLoader::maybeCreateArchive): Renamed from
            FrameLoader::finishedLoadingDocument(). Returns true if an archive
            was created.
        (WebCore::DocumentLoader::setArchive):
        (WebCore::DocumentLoader::scheduleArchiveLoad):
        (WebCore::DocumentLoader::documentURL): Add a check for whether an archive url
            should be returned, so that we don't need special handling in Document and
            FrameLoader for overriding the document url later.
        * loader/DocumentLoader.h:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::receivedFirstData): Remove archive special cases, since
            DocumentLoader::documentURL() will return the right thing for legacy archives
            and maybeCreateArchive() will override the base url for mhtml.
        (WebCore::FrameLoader::loadArchive):
        * loader/FrameLoader.h:

2012-04-06  Charles Wei  <charles.wei@torchmobile.com.cn>

        [BlackBerry] Build fix to match the latest WebCore change
        https://bugs.webkit.org/show_bug.cgi?id=83358

        Reviewed by Rob Buis.

        Update the BlackBerry cmake file to reflect the fact that:
        1.VDMXParser.cpp moved from graphics/skia to graphics/chromium.
        2.geolocation moved to Modules/geolocation
        3.websockets moved to Modules/websockets

        * PlatformBlackBerry.cmake:

2012-04-06  Charles Wei  <charles.wei@torchmobile.com.cn>

        [BlackBerry] Restore some code which was deleted by accident.
        https://bugs.webkit.org/show_bug.cgi?id=83357

        Reviewed by Rob Buis.

        No new tests, just BlackBerry build fix.

        * platform/network/blackberry/ResourceRequest.h:
        (ResourceRequest):
        * platform/network/blackberry/ResourceRequestBlackBerry.cpp:
        (WebCore):
        (WebCore::mimeTypeRequestTypeMap):
        (WebCore::ResourceRequest::targetTypeFromMimeType):

2012-04-06  Alexandre Elias  <aelias@google.com>

        Fix bug in ContainerNode::getRect with scale transforms
        https://bugs.webkit.org/show_bug.cgi?id=83385

        Reviewed by Simon Fraser.

        The bottom-right corner calculation for non-inline and replaced
        elements in ContainerNode::getRect was incorrect in the presence of
        scaling, because the untransformed element size was added after the
        transformation is applied.  The rest of the calculations are careful
        to always apply the transformation as the last step, but this had been
        forgotten in this codepath.  The fix is just to make sure the size is
        included in the localToAbsolute call.

        One bug caused by this was that a scaled element would be cut off
        when scrollIntoView(false) is called to scroll its parent container
        to make it bottom-visible.

        New layout test case in fast/transforms/scrollIntoView-transformed.html

        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::getLowerRightCorner):

2012-04-06  Tim Horton  <timothy_horton@apple.com>

        m_shouldRespectImageOrientation is used uninitialized
        https://bugs.webkit.org/show_bug.cgi?id=83410

        Reviewed by Simon Fraser.

        Initialize Settings's m_shouldRespectImageOrientation to false.

        * page/Settings.cpp:
        (WebCore::Settings::Settings):

2012-04-06  James Robinson  <jamesr@chromium.org>

        [chromium] Clear values in combinedClear path not respected in WebGLRenderingContext::clearIfComposited()
        https://bugs.webkit.org/show_bug.cgi?id=83407

        Reviewed by Kenneth Russell.

        When doing a combined clear in the drawing buffer path, we have to use the user specified values for the clear
        color / mask / depth and not all 0s.

        Covered by slight modification to fast/canvas/webgl/canvas-test.html

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore):
        (WebCore::WebGLRenderingContext::clearIfComposited):
        * platform/graphics/gpu/DrawingBuffer.cpp:
        (WebCore::DrawingBuffer::clearFramebuffers):
        (WebCore::DrawingBuffer::reset):
        * platform/graphics/gpu/DrawingBuffer.h:

2012-04-06  Tony Chang  <tony@chromium.org>

        [chromium] merge redundant conditions in WebCore.gyp
        https://bugs.webkit.org/show_bug.cgi?id=83319

        Reviewed by Adam Barth.

        There were duplicate conditions in some of the targets (e.g., 2
        OS=="win" sections) so I merged them and if possible, used an else
        block of an existing condition.

        No new tests, just refactoring the build file.

        * WebCore.gyp/WebCore.gyp:

2012-04-06  Simon Fraser  <simon.fraser@apple.com>

        Rename paintingGoesToWindow() to paintsIntoWindow()
        https://bugs.webkit.org/show_bug.cgi?id=83406

        Reviewed by Dirk Schulze.
        
        Rename paintingGoesToWindow() to paintsIntoWindow() to be consistent
        with some future refactoring.

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::setFilterBackendNeedsRepaintingInRect):
        (WebCore::RenderLayer::paintLayer):
        (WebCore::RenderLayer::paintsWithTransform):
        (WebCore::RenderLayer::setBackingNeedsRepaint):
        (WebCore::RenderLayer::setBackingNeedsRepaintInRect):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::containsPaintedContent):
        (WebCore::RenderLayerBacking::paintsIntoWindow):
        (WebCore::RenderLayerBacking::paintIntoLayer):
        * rendering/RenderLayerBacking.h:
        (RenderLayerBacking):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::rootLayerAttachmentChanged):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::repaintUsingContainer):
        * rendering/RenderView.cpp:
        (WebCore::RenderView::paintBoxDecorations):

2012-04-06  James Simonsen  <simonjam@chromium.org>

        Roll out change to HTMLParserIdioms.cpp from 82857
        https://bugs.webkit.org/show_bug.cgi?id=83402

        Change 82857 causes a DCHECK on fast/forms/number/ValidityState-typeMismatch-number.html

        Darin suggested we roll out this file here: https://bugs.webkit.org/show_bug.cgi?id=82857#c20

        Unreviewed, rolling out change that broke tests.

        * html/parser/HTMLParserIdioms.cpp:
        (WebCore::parseToDoubleForNumberType):

2012-04-06  Ilya Sherman  <isherman@chromium.org>

        Allow site authors to override autofilled fields' colors.
        https://bugs.webkit.org/show_bug.cgi?id=66032
        http://code.google.com/p/chromium/issues/detail?id=46543

        Reviewed by Simon Fraser.

        * css/html.css:
        (input:-webkit-autofill): Remove !important declarations.

2012-04-05  Enrica Casucci  <enrica@apple.com>

        Provide Obj-C private API to simplify markup.
        https://bugs.webkit.org/show_bug.cgi?id=83334
        <rdar://problem/11033861>

        Reviewed by Sam Weinig.

        Added test in TestWebKitAPI

        * WebCore.exp.in:
        * editing/Editor.cpp:
        (WebCore::Editor::simplifyMarkup): Exposing the new command through the editor.
        * editing/Editor.h:

2012-04-06  Benjamin Poulain  <bpoulain@apple.com>

        Get rid of the useless flag PREEMPT_GEOLOCATION_PERMISSION
        https://bugs.webkit.org/show_bug.cgi?id=83325

        Reviewed by Ryosuke Niwa.

        The flag WTF_USE_PREEMPT_GEOLOCATION_PERMISSION was added in r63742 but
        was never disabled by anyone. Supporting this feature added complexity by
        introducing two authorization scheme.

        This patch removes WTF_USE_PREEMPT_GEOLOCATION_PERMISSION and the code supporting
        granting the authorization after startUpdating().

        * Modules/geolocation/Geolocation.cpp:
        (WebCore::Geolocation::GeoNotifier::runSuccessCallback): With the simplified
        authorization code, we ensure stronger constraint on GeoNotifier::runSuccessCallback().
        (WebCore::Geolocation::stop):
        (WebCore::Geolocation::startRequest):
        (WebCore::Geolocation::clearWatch):
        (WebCore::Geolocation::setIsAllowed):
        (WebCore::Geolocation::positionChanged): The case (!isAllowed()) was there
        to support granting the authorization for WTF_USE_PREEMPT_GEOLOCATION_PERMISSION.
        (WebCore::Geolocation::handlePendingPermissionNotifiers):
        * Modules/geolocation/Geolocation.h:
        (Geolocation):

2012-04-06  Tom Sepez  <tsepez@chromium.org>

        Block cross-origin iframe scroll to fragment.
        https://bugs.webkit.org/show_bug.cgi?id=73083

        Reviewed by Adam Barth.

        Add a restriction similar to what FF has done for all iframes for over a
        year now. Our change is less disruptive in that it only does this in the
        cross-orgin case, which is where the fragment scrolling is problematic.

        Test: http/tests/navigation/anchor-frames-cross-origin.html

        * dom/Document.cpp:
        (WebCore::Document::canBeAccessedByEveryAncestorFrame):
        (WebCore):
        * dom/Document.h:
        (Document):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::finishedParsing):
        (WebCore::FrameLoader::loadInSameDocument):
        (WebCore::FrameLoader::loadURL):
        (WebCore::FrameLoader::loadWithDocumentLoader):
        (WebCore::FrameLoader::shouldPerformFragmentNavigation):
        (WebCore::FrameLoader::scrollToFragmentIfAllowed):
        (WebCore):
        * loader/FrameLoader.h:
        (FrameLoader):

2012-04-03  Jer Noble  <jer.noble@apple.com>

        Foreground of apple.com/iphone video page visible during full screen animation.
        https://bugs.webkit.org/show_bug.cgi?id=83080

        Reviewed by Simon Fraser.

        No new tests; updated fullscreen/full-screen-stacking-context.html

        The apple.com/iphone video page uses a -webkit-mask: CSS style, which creates a stacking
        context and causes the page to pop in front of the full screen renderer.  Add all the
        styles suggested by the W3C full screen spec to the -webkit-full-screen-ancestor rule
        to keep these stacking contexts from being created.

        * css/fullscreen.css:
        (:-webkit-full-screen-ancestor:not(iframe)):

2012-04-06  Abhishek Arya  <inferno@chromium.org>

        Virtualize createAnonymousBoxWithSameTypeAs.
        https://bugs.webkit.org/show_bug.cgi?id=83229

        Reviewed by Julien Chaffraix.

        This helps to use the same function to create anonymous
        table parts and in the future extend to more classes
        derived from RenderBox.

        The current switch case situation was going to be messy as
        we will need to mix cases that were very dependent on the
        class, so it made sense to add a virtual function.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::splitAnonymousBlocksAroundChild):
        (WebCore::RenderBlock::createAnonymousBoxWithSameTypeAs):
        * rendering/RenderBlock.h:
        (RenderBlock):
        * rendering/RenderBox.h:
        (WebCore::RenderBox::createAnonymousBoxWithSameTypeAs):
        (RenderBox):
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::splitFlow):
        * rendering/RenderTable.h:
        (WebCore::RenderTable::createAnonymousBoxWithSameTypeAs):
        * rendering/RenderTableCell.h:
        (WebCore::RenderTableCell::createAnonymousBoxWithSameTypeAs):
        * rendering/RenderTableRow.h:
        (WebCore::RenderTableRow::createAnonymousBoxWithSameTypeAs):
        * rendering/RenderTableSection.h:
        (WebCore::RenderTableSection::createAnonymousBoxWithSameTypeAs):

2012-04-06  Tim Horton  <timothy_horton@apple.com>

        [cg] REGRESSION (r101517): Animating the transform of a <rect> with shape-rendering: crispEdges leaves behind garbage
        https://bugs.webkit.org/show_bug.cgi?id=82963
        <rdar://problem/11170476>

        Reviewed by Simon Fraser.

        CoreGraphics can inflate the stroke by 1px when drawing a rectangle
        with antialiasing disabled at non-integer coordinates, we need to
        compensate by inflating the RenderSVGRect repaint bounds by 1px.

        No new tests, as this is not reproducible in DRT or WKTR.

        * rendering/svg/RenderSVGRect.cpp:
        (WebCore::RenderSVGRect::createShape):
        (WebCore::RenderSVGRect::strokeBoundingBox):
        * rendering/svg/RenderSVGRect.h:
        (RenderSVGRect):

2012-04-05  Simon Fraser  <simon.fraser@apple.com>

        Avoid trying to set filters on transform layers
        https://bugs.webkit.org/show_bug.cgi?id=83344

        Reviewed by Dean Jackson.

        Return early from GraphicsLayerCA::setFilters() when the filters
        haven't changed. This avoids trying to clear filters on CALayers
        which never had them, which should both help performance, and avoids
        console spew related to setting shadow properties on transform layers.
        
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::setFilters):

2012-04-06  James Robinson  <jamesr@chromium.org>

        WebGL content swapped at wrong time in threaded compositing mode
        https://bugs.webkit.org/show_bug.cgi?id=82275

        Reviewed by Kenneth Russell.

        When using threaded compositing, we need to defer touching the texture ID being used by the compositor until the
        appropriate point in the synchronization routine and not before. Specifically, there is no time at which it is
        safe to manipulate the texture the compositor may be using from the main thread. This breaks up the presentation
        path into a few pieces (depending on the context attributes) in order to maintain these invariants.

        Depending on the context attributes and if we're in threaded mode, there are a few different possible back/front
        buffer combinations:

        - When the context is antialiased, we have a multisampled renderbuffer and associated framebuffer.
        - In all cases, we have a color texture back buffer.
        - When preserveDrawingBuffer is set or threaded compositing is enabled, we have a separate color texture as a
        front buffer.

        The resource update is in two phases. First, on the main thread, we prepare the back buffer. This resolves from
        the multisampled FBO into the back color buffer if multisampled and swaps the front / back color buffer textures
        if preserveDrawingBuffer is false and we're using separate front / back color buffers. Second, on the compositor
        thread, we do a texture copy from the back to the front color buffer if preserveDrawingBuffer is true. After
        these steps are complete the main thread is free to manipulate the back buffer color texture without affecting
        any resources the compositor is using.

        One incidental cleanup this patch also does is remove all state queries from DrawingBuffer::clearFramebuffer().

        Tests: fast/canvas/webgl/webgl-composite-modes-repaint.html
               fast/canvas/webgl/webgl-composite-modes.html

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore):
        (WebCore::WebGLRenderingContext::WebGLRenderingContext):
        (WebCore::WebGLRenderingContext::clearIfComposited):
        (WebCore::WebGLRenderingContext::restoreStateAfterClear):
        (WebCore::WebGLRenderingContext::reshape):
        (WebCore::WebGLRenderingContext::maybeRestoreContext):
        * html/canvas/WebGLRenderingContext.h:
        (WebGLRenderingContext):
        * platform/graphics/blackberry/DrawingBufferBlackBerry.cpp:
        (WebCore::DrawingBuffer::DrawingBuffer):
        (WebCore):
        (WebCore::DrawingBuffer::prepareBackBuffer):
        (WebCore::DrawingBuffer::requiresCopyFromBackToFrontBuffer):
        (WebCore::DrawingBuffer::frontColorBuffer):
        * platform/graphics/cairo/DrawingBufferCairo.cpp:
        (WebCore::DrawingBuffer::DrawingBuffer):
        (WebCore):
        (WebCore::DrawingBuffer::prepareBackBuffer):
        (WebCore::DrawingBuffer::requiresCopyFromBackToFrontBuffer):
        (WebCore::DrawingBuffer::frontColorBuffer):
        * platform/graphics/chromium/DrawingBufferChromium.cpp:
        (WebCore::generateColorTexture):
        (WebCore::DrawingBuffer::DrawingBuffer):
        (WebCore::DrawingBuffer::initialize):
        (WebCore::DrawingBuffer::prepareBackBuffer):
        (WebCore):
        (WebCore::DrawingBuffer::requiresCopyFromBackToFrontBuffer):
        (WebCore::DrawingBuffer::frontColorBuffer):
        (WebCore::DrawingBuffer::platformLayer):
        * platform/graphics/chromium/WebGLLayerChromium.cpp:
        (WebCore::WebGLLayerChromium::WebGLLayerChromium):
        (WebCore::WebGLLayerChromium::paintContentsIfDirty):
        (WebCore::WebGLLayerChromium::updateCompositorResources):
        (WebCore::WebGLLayerChromium::paintRenderedResultsToCanvas):
        (WebCore::WebGLLayerChromium::setNeedsDisplayRect):
        (WebCore::WebGLLayerChromium::setDrawingBuffer):
        * platform/graphics/chromium/WebGLLayerChromium.h:
        (WebGLLayerChromium):
        * platform/graphics/clutter/DrawingBufferClutter.cpp:
        (WebCore::DrawingBuffer::DrawingBuffer):
        (WebCore):
        (WebCore::DrawingBuffer::prepareBackBuffer):
        (WebCore::DrawingBuffer::requiresCopyFromBackToFrontBuffer):
        (WebCore::DrawingBuffer::frontColorBuffer):
        * platform/graphics/filters/FECustomFilter.cpp:
        (WebCore::FECustomFilter::initializeContext):
        * platform/graphics/gpu/DrawingBuffer.cpp:
        (WebCore::DrawingBuffer::create):
        (WebCore::DrawingBuffer::clear):
        (WebCore::DrawingBuffer::clearFramebuffer):
        (WebCore::DrawingBuffer::reset):
        (WebCore::DrawingBuffer::discardResources):
        * platform/graphics/gpu/DrawingBuffer.h:
        (DrawingBuffer):
        * platform/graphics/gpu/mac/DrawingBufferMac.mm:
        (WebCore::DrawingBuffer::DrawingBuffer):
        (WebCore):
        (WebCore::DrawingBuffer::prepareBackBuffer):
        (WebCore::DrawingBuffer::requiresCopyFromBackToFrontBuffer):
        (WebCore::DrawingBuffer::frontColorBuffer):
        * platform/graphics/gpu/qt/DrawingBufferQt.cpp:
        (WebCore::DrawingBuffer::DrawingBuffer):
        (WebCore::DrawingBuffer::platformLayer):
        (WebCore::DrawingBuffer::prepareBackBuffer):
        (WebCore::DrawingBuffer::requiresCopyFromBackToFrontBuffer):
        (WebCore):
        (WebCore::DrawingBuffer::frontColorBuffer):

2012-04-06  Julien Chaffraix  <jchaffraix@webkit.org>

        Unreviewed build fix after r113486 and r113487.

        * rendering/RenderObject.cpp:
        Added missing #include.

        * rendering/RenderView.h:
        Removed bad OVERRIDE.

2012-04-06  Beth Dakin  <bdakin@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=81939
        -webkit-image-set should update dynamically when the device scale factor 
        changes
        -and corresponding-
        <rdar://problem/11101108> 

        Reviewed by Darin Adler.

        New member variable to keep track of the scale factor.
        * css/CSSImageSetValue.cpp:
        (WebCore::CSSImageSetValue::CSSImageSetValue):
        (WebCore::CSSImageSetValue::bestImageForScaleFactor):

         Merge the two cachedImageSet functions. There was no need for two functions here.
        (WebCore::CSSImageSetValue::cachedImageSet):

        cachedOrPendingImageSet() now takes a Document as a parameter so that it can 
        access the deviceScaleFactor. If there is a cached image already and the 
        Document's deviceScaleFactor doesn't match m_scaleFactor, then m_imageSet is set 
        to a pending image so that the best fit image will be reassessed and then 
        loaded.
        (WebCore::CSSImageSetValue::cachedOrPendingImageSet):
        * css/CSSImageSetValue.h:
        (WebCore):
        (CSSImageSetValue):

        cachedOrPendingImageSet() now takes a Document.
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::collectMatchingRulesForList):

        StyleCachedImageSet should inherit from CachedImageClient just like 
        StyleCachedImage. It should add and remove itself as a client upon creation 
        and destruction, respectively.
        * rendering/style/StyleCachedImageSet.cpp:
        (WebCore::StyleCachedImageSet::StyleCachedImageSet):
        (WebCore):
        (WebCore::StyleCachedImageSet::~StyleCachedImageSet):
        * rendering/style/StyleCachedImageSet.h:
        (StyleCachedImageSet):

2012-04-06  Levi Weintraub  <leviw@chromium.org>

        Update LayoutUnit usage in RenderView
        https://bugs.webkit.org/show_bug.cgi?id=83147

        Reviewed by Julien Chaffraix.

        Updating the usage of LayoutUnits in RenderView in preparation for sub-pixel layout. This mostly
        affects paint and repaint functions, which take LayoutRects up to the RenderView level. This is
        necessary as we continue to accumulate sub-pixel offsets up to this level.

        No new tests. No change in behavior.

        * rendering/RenderView.cpp:
        (WebCore::RenderView::paint): Adding an assert that we're being called to paint on pixel
        boundaries. We don't currently ever position RenderViews at sub-pixel offsets.
        (WebCore::RenderView::shouldRepaint):
        (WebCore::RenderView::repaintViewRectangle): Switching to a LayoutRect and cleaning up a fixme
        that used decomposed offsets. Pixel snapping is applied before handing the rect up to the
        FrameView.
        (WebCore::RenderView::repaintRectangleInViewAndCompositedLayers): Pixel snapping before handing
        the rect up to the Compositor.
        (WebCore::RenderView::computeRectForRepaint):
        (WebCore::RenderView::selectionBounds):
        (WebCore::RenderView::viewRect):
        (WebCore::RenderView::unscaledDocumentRect):
        * rendering/RenderView.h:
        (RenderView):

2012-04-06  Tim Horton  <timothy_horton@apple.com>

        Add autodetection of image orientation from EXIF information
        https://bugs.webkit.org/show_bug.cgi?id=19688
        <rdar://problem/4126979> and <rdar://problem/11091578>

        Original patch by David Carson and Eric Seidel.

        Reviewed by Simon Fraser.

        Add support for respecting EXIF image orientation, enabled by default for ImageDocuments.
        The setting shouldRespectImageOrientation causes orientation to take effect for any image included via <img>.

        Test: fast/images/exif-orientation.html, fast/images/exif-orientation-css.html

        * WebCore.xcodeproj/project.pbxproj: Add ImageOrientation.{cpp, h}
        * loader/cache/CachedImage.cpp:
        (WebCore::CachedImage::imageForRenderer): Plumb setting down from RenderObject into Image.
        (WebCore::CachedImage::imageSizeForRenderer):
        * page/Settings.h:
        (WebCore::Settings::setShouldRespectImageOrientation):
        (WebCore::Settings::shouldRespectImageOrientation):
        (Settings):
        * platform/graphics/BitmapImage.cpp:
        (WebCore::BitmapImage::cacheFrame):
        (WebCore::BitmapImage::size):
        (WebCore::BitmapImage::sizeRespectingOrientation):
        (WebCore):
        (WebCore::BitmapImage::ensureFrameIsCached):
        (WebCore::BitmapImage::frameAtIndex):
        (WebCore::BitmapImage::frameIsCompleteAtIndex):
        (WebCore::BitmapImage::frameDurationAtIndex):
        (WebCore::BitmapImage::frameHasAlphaAtIndex):
        (WebCore::BitmapImage::frameOrientationAtIndex):
        * platform/graphics/BitmapImage.h:
        (WebCore::FrameData::FrameData):
        (FrameData):
        (BitmapImage):
        * platform/graphics/GraphicsContext.h:
        (GraphicsContext):
        * platform/graphics/ImageOrientation.cpp: Added.
        (WebCore):
        (WebCore::ImageOrientation::transformFromDefault):
        * platform/graphics/ImageOrientation.h: Added.
        (WebCore):
        (ImageOrientation):
        (WebCore::ImageOrientation::ImageOrientation):
        (WebCore::ImageOrientation::usesWidthAsHeight):
        (WebCore::ImageOrientation::fromEXIFValue):
        (WebCore::ImageOrientation::operator==):
        (WebCore::ImageOrientation::operator!=):
        * platform/graphics/ImageSource.cpp:
        (WebCore::ImageSource::orientationAtIndex):
        (WebCore):
        * platform/graphics/ImageSource.h:
        (WebCore):
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::drawNativeImage): Transform the image while drawing if its orientation requires it.
        * platform/graphics/cg/ImageBufferCG.cpp:
        (WebCore::ImageBuffer::draw):
        * platform/graphics/cg/ImageCG.cpp:
        (WebCore::FrameData::clear):
        (WebCore::BitmapImage::BitmapImage):
        (WebCore::BitmapImage::draw):
        * platform/graphics/cg/ImageSourceCG.cpp:
        (WebCore::imageSourceOptions): Don't use SkipMetaData on Lion/Snow Leopard, as it prevents us from retrieving orientation data.
        (WebCore::ImageSource::frameSizeAtIndex): Adjust the image's size based on its orientation.
        (WebCore):
        (WebCore::ImageSource::orientationAtIndex):
        (WebCore::ImageSource::size):
        * platform/graphics/mac/DragImageMac.mm:
        (createDragImageFromImage): Create scaled copy of image for drag image if we're respecting orientation and it is non-default.
        * rendering/RenderObject.h:
        (RenderObject):
        (WebCore::RenderObject::shouldRespectImageOrientation):

2012-04-06  Levi Weintraub  <leviw@chromium.org>

        Correct LayoutUnit usgae in RenderThemeQt and RenderThemeQStyle
        https://bugs.webkit.org/show_bug.cgi?id=83376

        Reviewed by Eric Seidel.

        Correcting LayoutUnit usage in QT RenderTheme code.

        No new tests. No change in behavior.

        * platform/qt/RenderThemeQt.cpp:
        (WebCore::RenderThemeQt::convertToPaintingRect): Rounding the ancestor offset before
        applying it to the pixel snapped partRect.
        (WebCore::RenderThemeQt::paintSearchFieldCancelButton): Also rounding the ancestor
        offset, and also pixel snapping the content rect before painting.

2012-04-06  Kenneth Russell  <kbr@google.com>

        context-lost.html is failing
        https://bugs.webkit.org/show_bug.cgi?id=81325

        Reviewed by James Robinson.

        Ensure that the DrawingBuffer does not attempt to restore the
        TEXTURE_2D binding to an already-deleted texture.

        Tested with layout test fast/canvas/webgl/context-lost.html as
        well as WebGL conformance tests.

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore):
        (WebCore::WebGLRenderingContext::loseContextImpl):

2012-04-06  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r113267.
        http://trac.webkit.org/changeset/113267
        https://bugs.webkit.org/show_bug.cgi?id=83384

        causes dhtml perf regression (Requested by simonjam on
        #webkit).

        * dom/ChildListMutationScope.cpp:
        (ChildListMutationScope::MutationAccumulator):
        (WebCore::ChildListMutationScope::MutationAccumulator::isAddedNodeInOrder):
        (WebCore::ChildListMutationScope::MutationAccumulator::childAdded):
        (WebCore::ChildListMutationScope::MutationAccumulationRouter::childAdded):
        * dom/ChildListMutationScope.h:
        (WebCore::ChildListMutationScope::childAdded):
        (MutationAccumulationRouter):
        * dom/ContainerNode.cpp:
        (WebCore):
        (WebCore::ContainerNode::insertBefore):
        (WebCore::ContainerNode::replaceChild):
        (WebCore::ContainerNode::appendChild):
        (WebCore::dispatchChildInsertionEvents):
        (WebCore::updateTreeAfterInsertion):

2012-04-06  Joshua Bell  <jsbell@chromium.org>

        IndexedDB: ObjectStore/Index shouldn't hold reference to backing store
        https://bugs.webkit.org/show_bug.cgi?id=83074

        We should be able to collect and close the leveldb backing store as soon as the database
        connection is closed, but the IDBObjectStoreBackendImpl and IDBIndexBackendImpl were
        holding RefPtrs, and those objects are kept alive by script references.

        Replaced RefPtrs to the IDBBackingStore with pointers to the IDBDatabase. On the back end,
        IDBDatabaseBackendImpl maintains a RefPtr to the IDBObjectStoreBackendImpl object, so 
        a raw pointer back is safe. On the front end, the IDBObjectStore maintains a RefPtr to
        the IDBDatabase so script can navigate upwards. Ditto on both ends for the ObjectStore/Index
        relationship. The frontend objects maintain RefPtrs to the backend objects, so the backend
        objects and their owners are maintained as long as there's a script reference.

        Also made IDBDatabaseBackendImpl handle a null IDBFactoryBackendImpl pointer, for testing.

        Reviewed by Tony Chang.

        Tests: webkit_unit_tests --gtest_filter="IDBDatabaseBackendTest.*"

        * Modules/indexeddb/IDBDatabaseBackendImpl.cpp:
        (WebCore::IDBDatabaseBackendImpl::~IDBDatabaseBackendImpl):
        (WebCore::IDBDatabaseBackendImpl::createObjectStore):
        (WebCore::IDBDatabaseBackendImpl::loadObjectStores):
        * Modules/indexeddb/IDBIndexBackendImpl.cpp:
        (WebCore::IDBIndexBackendImpl::IDBIndexBackendImpl):
        (WebCore::IDBIndexBackendImpl::openCursorInternal):
        (WebCore::IDBIndexBackendImpl::countInternal):
        (WebCore::IDBIndexBackendImpl::getInternal):
        (WebCore::IDBIndexBackendImpl::addingKeyAllowed):
        * Modules/indexeddb/IDBIndexBackendImpl.h:
        (WebCore::IDBIndexBackendImpl::create):
        (IDBIndexBackendImpl):
        (WebCore::IDBIndexBackendImpl::backingStore):
        (WebCore::IDBIndexBackendImpl::databaseId):
        * Modules/indexeddb/IDBObjectStoreBackendImpl.cpp:
        (WebCore::IDBObjectStoreBackendImpl::IDBObjectStoreBackendImpl):
        (WebCore::IDBObjectStoreBackendImpl::getInternal):
        (WebCore::IDBObjectStoreBackendImpl::putInternal):
        (WebCore::IDBObjectStoreBackendImpl::deleteInternal):
        (WebCore::IDBObjectStoreBackendImpl::clearInternal):
        (WebCore):
        (WebCore::IDBObjectStoreBackendImpl::createIndex):
        (WebCore::IDBObjectStoreBackendImpl::createIndexInternal):
        (WebCore::IDBObjectStoreBackendImpl::deleteIndexInternal):
        (WebCore::IDBObjectStoreBackendImpl::openCursorInternal):
        (WebCore::IDBObjectStoreBackendImpl::countInternal):
        (WebCore::IDBObjectStoreBackendImpl::loadIndexes):
        (WebCore::IDBObjectStoreBackendImpl::genAutoIncrementKey):
        * Modules/indexeddb/IDBObjectStoreBackendImpl.h:
        (WebCore::IDBObjectStoreBackendImpl::create):
        (IDBObjectStoreBackendImpl):
        (WebCore::IDBObjectStoreBackendImpl::backingStore):
        (WebCore::IDBObjectStoreBackendImpl::databaseId):

2012-04-06  Jon Lee  <jonlee@apple.com>

        Fix build warning on const long long to int implicit conversion.

        * inspector/InspectorApplicationCacheAgent.cpp:
        (WebCore::InspectorApplicationCacheAgent::buildObjectForApplicationCacheResource):

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

        Fix LayoutUnit usage and rounding in RenderBlock and RenderEmbeddedObject
        https://bugs.webkit.org/show_bug.cgi?id=83343

        Reviewed by Eric Seidel.

        Fix usage of LayoutUnits and rounding/pixel snapping in RenderBlock and
        RenderEmbeddedObject in preparation for turing on subpixel support.

        No new tests, no change in functionality.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::baselinePosition):
        * rendering/RenderEmbeddedObject.cpp:
        (WebCore::RenderEmbeddedObject::nodeAtPoint):

2012-04-06  Dan Bernstein  <mitz@apple.com>

        <rdar://problem/10912476> HiDPI: Have canvas use a hidpi backing store, but downsample upon access

        Reviewed by Sam Weinig.

        * Configurations/FeatureDefines.xcconfig: Added ENABLE_HIGH_DPI_CANVAS.

2012-04-06  Levi Weintraub  <leviw@chromium.org>

        Update LayoutUnit usage in Editor and Frame
        https://bugs.webkit.org/show_bug.cgi?id=83278

        Reviewed by Eric Seidel.

        Frame and Editor both take input from the embedder, which passes along coordinates in screen
        coordinates, which aren't fractional. Updating a few remaining functions to show this, and correcting
        some inconsistencies in LayoutUnit usage.

        No new tests. No change in behavior.

        * editing/Editor.cpp:
        (WebCore::Editor::rangeForPoint): windowToContents returns an IntPoint.
        (WebCore::Editor::countMatchesForText): Using enclosingIntRect since we're (fake) repainting the entire
        view rect.
        * editing/Editor.h:
        (Editor): Correcting mismatched function signature.
        * page/Frame.cpp:
        (WebCore::Frame::visiblePositionForPoint): Frame takes points in screen coordinates, usually from the
        embedder. Changing these functions to be in IntPoints.
        (WebCore::Frame::documentAtPoint): Ditto.
        (WebCore::Frame::rangeForPoint): Ditto.
        * page/Frame.h:
        (Frame):
        * platform/graphics/IntRect.h:
        (enclosingIntRect): Adding an inline no-op copy of the FractionalLayoutRect method enclosingIntRect.

2012-04-06  Tommy Widenflycht  <tommyw@google.com>

        MediaStream API: Deleting the chromium bridge class MediaStreamCenterInternal
        https://bugs.webkit.org/show_bug.cgi?id=83167

        Reviewed by Adam Barth.

        The situation before this patch is that we had a MediaStreamCenter.h with #ifdefs for the chromium specific
        private class MediaStreamCenterInternal. This bridge class only shuffled calls between MediaStreamCenter and
        WebMediaStreamCenter and was needed before the introduction of Platform.
        To get rid of this now unnecessary class I had two alternatives:
        1) Sprinkle platform/MediaStreamCenter.h with more #ifdefs, including around the class declaration.
        2) Create an abstract base class that the chromium and gstreamer implementations overrides.
        My personal preference is 2) since I strongly dislike #ifdefs. The drawback is that MediaStreamCenter now
        has a vtable. However since all methods in this class are extremely low-usage it doesn't affect anything
        in practice.

        No code behaviour changes.

        * GNUmakefile.am:
        * GNUmakefile.list.am:
        * Modules/mediastream/MediaStreamTrack.cpp:
        (WebCore::MediaStreamTrack::setEnabled):
        * Modules/mediastream/UserMediaRequest.cpp:
        * Modules/mediastream/UserMediaRequest.h:
        * WebCore.gyp/WebCore.gyp:
        * WebCore.gypi:
        * platform/chromium/support/WebMediaStreamSourcesRequest.cpp:
        * platform/mediastream/MediaStreamCenter.cpp:
        (WebCore::MediaStreamCenter::MediaStreamCenter):
        (WebCore):
        (WebCore::MediaStreamCenter::~MediaStreamCenter):
        * platform/mediastream/MediaStreamCenter.h:
        (WebCore):
        (MediaStreamCenter):
        * platform/mediastream/MediaStreamSourcesQueryClient.h: Copied from Source/WebCore/platform/mediastream/MediaStreamCenter.h.
        (WebCore):
        (MediaStreamSourcesQueryClient):
        (WebCore::MediaStreamSourcesQueryClient::~MediaStreamSourcesQueryClient):
        * platform/mediastream/chromium/MediaStreamCenterChromium.cpp:
        (WebCore::MediaStreamCenter::instance):
        (WebCore::MediaStreamCenterChromium::MediaStreamCenterChromium):
        (WebCore::MediaStreamCenterChromium::~MediaStreamCenterChromium):
        (WebCore::MediaStreamCenterChromium::queryMediaStreamSources):
        (WebCore::MediaStreamCenterChromium::didSetMediaStreamTrackEnabled):
        (WebCore::MediaStreamCenterChromium::didStopLocalMediaStream):
        (WebCore::MediaStreamCenterChromium::didConstructMediaStream):
        (WebCore::MediaStreamCenterChromium::constructSDP):
        (WebCore):
        (WebCore::MediaStreamCenterChromium::stopLocalMediaStream):
        * platform/mediastream/chromium/MediaStreamCenterChromium.h: Renamed from Source/WebCore/platform/mediastream/chromium/MediaStreamCenterInternal.h.
        (WebKit):
        (WebCore):
        (MediaStreamCenterChromium):
        * platform/mediastream/chromium/MediaStreamCenterInternal.cpp: Removed.
        * platform/mediastream/gstreamer/MediaStreamCenterGStreamer.cpp: Copied from Source/WebCore/platform/mediastream/MediaStreamCenter.cpp.
        (WebCore):
        (WebCore::MediaStreamCenter::instance):
        (WebCore::MediaStreamCenterGStreamer::MediaStreamCenterGStreamer):
        (WebCore::MediaStreamCenterGStreamer::~MediaStreamCenterGStreamer):
        (WebCore::MediaStreamCenterGStreamer::queryMediaStreamSources):
        (WebCore::MediaStreamCenterGStreamer::didSetMediaStreamTrackEnabled):
        (WebCore::MediaStreamCenterGStreamer::didStopLocalMediaStream):
        (WebCore::MediaStreamCenterGStreamer::didConstructMediaStream):
        (WebCore::MediaStreamCenterGStreamer::constructSDP):
        * platform/mediastream/gstreamer/MediaStreamCenterGStreamer.h: Copied from Source/WebCore/platform/mediastream/MediaStreamCenter.h.
        (WebCore):
        (MediaStreamCenterGStreamer):

2012-04-05  Simon Fraser  <simon.fraser@apple.com>

        Should disable preserves3D() for things that enforce flattening, like overflow and filters
        https://bugs.webkit.org/show_bug.cgi?id=83337

        Reviewed by Dean Jackson.
        
        The CSS3 Transforms spec says that some properties should cause flattening
        of things with transform-style: preserve-3d. We currently do this as a side
        effect of the GraphicsLayer structure, but we should really do it at the
        RenderStyle level, as we do for other things like stacking context creation.

        Test: compositing/overflow-trumps-transform-style.html

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

2012-04-06  Tommy Widenflycht  <tommyw@google.com>

        MediaStream API: MediaStreams stops proper cleanup to take place during a page reload.
        https://bugs.webkit.org/show_bug.cgi?id=83143

        Reviewed by Adam Barth.

        To fix this I have converted MediaStream and LocalMediaStream to be ActiveDOMObjects.

        Have no idea how to write a test that succesfully verifies this. I have done manual testing
        to verify that proper tear-down now takes place.

        * Modules/mediastream/LocalMediaStream.cpp:
        (WebCore::LocalMediaStream::create):
        (WebCore::LocalMediaStream::stopFunction):
        (WebCore):
        * Modules/mediastream/LocalMediaStream.h:
        (LocalMediaStream):
        * Modules/mediastream/LocalMediaStream.idl:
        * Modules/mediastream/MediaStream.cpp:
        (WebCore::MediaStream::create):
        (WebCore::MediaStream::MediaStream):
        (WebCore::MediaStream::scriptExecutionContext):
        * Modules/mediastream/MediaStream.h:
        (MediaStream):

2012-04-06  Dan Bernstein  <mitz@apple.com>

        <rdar://problem/10912476> Pixel access canvas APIs do not work transparently with high-DPI backing store
        https://bugs.webkit.org/show_bug.cgi?id=83072

        Reviewed by Simon Fraser.

        Made getImageData, putImageData, and toDataURL downsample/upsample when pixels in the canvas
        backing store are not in a 1:1 ratio to CSS pixels. This makes clients of these APIs
        indifferent to the backing store resolution, up to sampling artifacts.

        In order for this to work, ImageBuffer has to know and respect the resolutionScale
        parameter. This change makes the Core Graphics-based implementation of ImageBuffer do this,
        but on other platforms, resolutionScale values other than 1 will not work. Such platforms
        should not enable the HIGH_DPI_CANVAS feature.

        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::HTMLCanvasElement): Updated a comment.
        (WebCore::HTMLCanvasElement::createImageBuffer): Changed to create an ImageBuffer with
        the desired resolution instead of 1.
        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::drawImage): Removed code that scaled the source rect,
        since this is now handled at the ImageBuffer level.
        (WebCore::CanvasRenderingContext2D::createImageData): Now returns ImageData of the requested
        size regardless of the backing store resolution.
        (WebCore::CanvasRenderingContext2D::getImageData): Ditto.
        * platform/graphics/ImageBuffer.h:
        (WebCore::ImageBuffer::create): Removed some code that tried to apply the resolution scale
        to the buffer after creating it, and changed to pass the resolution scale down to the
        (platform-specific) constructor, which can apply it correctly.
        * platform/graphics/cairo/ImageBufferCairo.cpp:
        (WebCore::ImageBuffer::ImageBuffer):
        * platform/graphics/cg/ImageBufferCG.cpp:
        (WebCore::ImageBuffer::ImageBuffer): Added a resolutionScale parameter, which is used to
        compute the backing buffer size, and to apply a device scale factor to the context.
        (WebCore::ImageBuffer::copyImage): Changed to return an image scaled down to the logical
        size of the buffer.
        (WebCore::ImageBuffer::getUnmultipliedImageData): Changed to pass the resolution scale to
        ImageData::getData().
        (WebCore::ImageBuffer::getPremultipliedImageData): Ditto.
        (WebCore::ImageBuffer::putByteArray): Changed to pass the resolution scale to
        ImageData::putData(). When drawing the byte array as an image, changed to preserve the base
        CTM in the destination context (thus mapping from image data pixels to backing store pixels).
        (WebCore::ImageBuffer::toDataURL): Fixed a CGColorSpace leak. Made the returned image have
        the buffer’s logical size instead of the backing buffer’s size.
        (WebCore::ImageDataToDataURL): Fixed a CGColorSpace leak.
        * platform/graphics/cg/ImageBufferDataCG.cpp:
        (WebCore::ImageBufferData::getData): Added a resolutionScale parameter. The source
        coordinates are scaled by the value of that parameter, and a reverse scaling transform
        is applied when copying from the backing store into the destination (either explicitly
        using Accelerate or implicitly by drawing as an image). Since after scaling,
        unpremultiplication and component permutation are done in-place, made the
        non-Accelerate code that does these things safe in this case.
        (WebCore::ImageBufferData::putData): Added a resolutionScale parameter. The destination
        coordinates are scaled by the value of that parameter, and a scaling transform is applied
        when copying from the source into the backing store (either explicitly using Accelerate or
        implicitly by drawing as an image). Since after scaling, premultiplication and component
        permutation are done in-place, made the non-Accelerate code that does these things safe in
        this case.
        * platform/graphics/cg/ImageBufferDataCG.h:
        * platform/graphics/qt/ImageBufferQt.cpp:
        (WebCore::ImageBuffer::ImageBuffer):
        * platform/graphics/skia/ImageBufferSkia.cpp:
        (WebCore::ImageBuffer::ImageBuffer):
        * platform/graphics/wince/ImageBufferWinCE.cpp:
        (WebCore::ImageBuffer::ImageBuffer):
        * platform/graphics/wx/ImageBufferWx.cpp:
        (WebCore::ImageBuffer::ImageBuffer):

2012-04-06  Dana Jansens  <danakj@chromium.org>

        [chromium] Draw debug borders for tiles on layers with skipsDraw
        https://bugs.webkit.org/show_bug.cgi?id=83352

        Reviewed by Adrienne Walker.

        The tiles are given the same color as other missing tiles.

        * platform/graphics/chromium/cc/CCTiledLayerImpl.cpp:
        (WebCore::CCTiledLayerImpl::appendQuads):

2012-04-06  Rob Buis  <rbuis@rim.com>

        Fix cast-align warnings in JSC
        https://bugs.webkit.org/show_bug.cgi?id=80790

        Reviewed by George Staikos.

        * platform/graphics/WOFFFileFormat.cpp:
        (WebCore::readUInt32):
        (WebCore::readUInt16):
        * platform/image-encoders/skia/JPEGImageEncoder.cpp:
        (WebCore::preMultipliedBGRAtoRGB):
        * platform/network/MIMESniffing.cpp:

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

        Streamline strtod and fix some related problems
        https://bugs.webkit.org/show_bug.cgi?id=82857

        Reviewed by Geoffrey Garen.

        Refactoring of code covered by existing tests.

        * dom/ViewportArguments.cpp:
        (WebCore::numericPrefix): Removed a confusing comment that just said
        "we tolerate extra characters" in a roundabout way. Made the "ok"
        argument optional. Changed to call the new version of charactersToFloat
        that returns the number of characters parsed rather than using the
        charactersToFloatIgnoringJunk/didReadNumber solution from before.
        (WebCore::findSizeValue): Since numericPrefix is guaranteed to return 0
        when it can't parse, removed the "ok" code. Also changed the unusual
        syntax "float(1.0)" to just "1", which works just as well.
        (WebCore::findScaleValue): Ditto.
        (WebCore::findUserScalableValue): Ditto.

        * html/parser/HTMLParserIdioms.cpp:
        (WebCore::parseToDoubleForNumberType): Removed an unneeded code path
        and replaced it with an assertion; toDouble no longer will return infinity
        or not-a-number values.

2012-04-06  Dana Jansens  <danakj@chromium.org>

        [chromium] Surface replica should have a separate quad in the render pass
        https://bugs.webkit.org/show_bug.cgi?id=83287

        Reviewed by Adrienne Walker.

        Generate separate quads for a RenderSurface and its replica. The replica
        quad is drawn independently of the surface itself. This allows us to
        cull each one independently.

        Covered by existing tests.

        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::drawRenderSurfaceQuad):
        (WebCore::LayerRendererChromium::copyOffscreenTextureToDisplay):
        * platform/graphics/chromium/cc/CCRenderPass.cpp:
        (WebCore::CCRenderPass::appendQuadsForRenderSurfaceLayer):
        * platform/graphics/chromium/cc/CCRenderSurface.cpp:
        (WebCore::CCRenderSurface::setScissorRect):
        (WebCore):
        (WebCore::CCRenderSurface::drawContents):
        (WebCore::CCRenderSurface::drawReplica):
        (WebCore::CCRenderSurface::hasReplica):
        * platform/graphics/chromium/cc/CCRenderSurface.h:
        (CCRenderSurface):
        * platform/graphics/chromium/cc/CCRenderSurfaceDrawQuad.cpp:
        (WebCore::CCRenderSurfaceDrawQuad::create):
        (WebCore::CCRenderSurfaceDrawQuad::CCRenderSurfaceDrawQuad):
        * platform/graphics/chromium/cc/CCRenderSurfaceDrawQuad.h:
        (CCRenderSurfaceDrawQuad):
        (WebCore::CCRenderSurfaceDrawQuad::isReplica):

2012-04-05  Martin Robinson  <mrobinson@igalia.com>

        [GObject bindings] Fix the coding style issues in the generated bindings
        https://bugs.webkit.org/show_bug.cgi?id=82080

        Reviewed by Kentaro Hara.

        No new tests. This is covered by the binding tests.

        * bindings/scripts/CodeGeneratorGObject.pm: Fix most style errors in the generated
          GObject code.
        * bindings/scripts/test/GObject: Updated the expected results.


2012-04-06  Adam Klein  <adamk@chromium.org>

        Remove bogus assert from ChildListMutationScope
        https://bugs.webkit.org/show_bug.cgi?id=83336

        Reviewed by Ryosuke Niwa.

        This assert can trivially be triggered from script, but luckily the
        code already behaves correctly without it.

        * dom/ChildListMutationScope.cpp:
        (WebCore::ChildListMutationScope::MutationAccumulator::enqueueMutationRecord):

2012-04-06  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r113442.
        http://trac.webkit.org/changeset/113442
        https://bugs.webkit.org/show_bug.cgi?id=83373

        for breaking JSC bindings compilation (Requested by pfeldman
        on #webkit).

        * GNUmakefile.list.am:
        * Target.pri:
        * UseJSC.cmake:
        * UseV8.cmake:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSMutationCallbackCustom.cpp: Added.
        (WebCore):
        (WebCore::JSMutationCallback::handleEvent):
        * bindings/scripts/CodeGenerator.pm:
        * bindings/scripts/CodeGeneratorJS.pm:
        (AddIncludesForTypeInImpl):
        (GenerateCallbackHeader):
        (GenerateCallbackImplementation):
        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateCallbackHeader):
        (GenerateCallbackImplementation):
        * bindings/scripts/test/JS/JSTestCallback.cpp:
        (WebCore::JSTestCallback::callbackWithBoolean):
        * bindings/scripts/test/JS/JSTestCallback.h:
        (JSTestCallback):
        * bindings/scripts/test/TestCallback.idl:
        * bindings/scripts/test/V8/V8TestCallback.cpp:
        (WebCore::V8TestCallback::callbackWithBoolean):
        * bindings/scripts/test/V8/V8TestCallback.h:
        (V8TestCallback):
        * bindings/v8/custom/V8MutationCallbackCustom.cpp: Added.
        (WebCore):
        (WebCore::V8MutationCallback::handleEvent):
        * dom/MutationCallback.idl:

2012-04-06  Zan Dobersek  <zandobersek@gmail.com>

        [Gtk] Unskip the video track tests
        https://bugs.webkit.org/show_bug.cgi?id=82590

        Reviewed by Martin Robinson.

        Enable the video track runtime feature for the Gtk port as well.

        No new tests - existing ones will be unskipped.

        * bindings/generic/RuntimeEnabledFeatures.cpp:
        (WebCore):

2012-04-06  Michael Saboff  <msaboff@apple.com>

        Call Heap::discardAllCompiledCode() in low memory situations
        https://bugs.webkit.org/show_bug.cgi?id=83335

        Reviewed by Geoffrey Garen.

        Added call to discardAllCompiledCode() when under memory pressure.
        We can re-JIT as needed.  This is similar to what we used to do when we did
        a full GC which also cleaned up JIT code.  Doing a full GC typically didn't
        help our memory situation, in fact it made things worse in the really low
        memory situation as it caused more paging.

        Added pass through discardAllCompiledCode() method to GCController.

        * bindings/js/GCController.cpp:
        (WebCore::GCController::discardAllCompiledCode):
        (WebCore):
        * bindings/js/GCController.h:
        (GCController):
        * platform/mac/MemoryPressureHandlerMac.mm:
        (WebCore::MemoryPressureHandler::releaseMemory):

2012-04-06  Andrey Kosyakov  <caseq@chromium.org>

        Web Inspector: on a single click in Timeline overview, make a minimal selection centered around cursor
        https://bugs.webkit.org/show_bug.cgi?id=82616

        Reviewed by Pavel Feldman.

        - center minimal selection on mouse cursor if the mouse hasn't moved (i.e. we had a click, not drag)

        * inspector/front-end/TimelineOverviewPane.js:
        (WebInspector.TimelineOverviewWindow.prototype._endWindowSelectorDragging):

2012-04-06  Vineet Chaudhary  <rgf748@motorola.com>

        Add CodeGenerator support for sequence<> in callbacks.
        https://bugs.webkit.org/show_bug.cgi?id=83233

        Reviewed by Kentaro Hara.

        Tests: TestCallback.idl and fast/mutation/callback-arguments.html should pass even after
        the changes.

        * GNUmakefile.list.am: Removed unsued custom files V8MutationCallbackCustom.cpp 
          and JSMutationCallbackCustom.cpp from builds.
        * Target.pri: Ditto.
        * UseJSC.cmake: Ditto.
        * UseV8.cmake: Ditto.
        * WebCore.gypi: Ditto.
        * WebCore.vcproj/WebCore.vcproj: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Ditto.
        * bindings/js/JSMutationCallbackCustom.cpp: Removed.
        * bindings/scripts/CodeGeneratorJS.pm:
        (AddIncludesForTypeInImpl): Add proper header type.
        (GenerateCallbackHeader): Generate declaration for the callback with sequence<T> argument.
        (GenerateCallbackImplementation): Generate implementation for the callback with sequence<T> argument.
        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateCallbackHeader): Generate declaration for the callback with sequence<T> argument.
        (GenerateCallbackImplementation): Generate implementation for the callback with sequence<T> argument.
        * bindings/scripts/test/JS/JSTestCallback.cpp: Modified test results of run-bindings-tests.
        (WebCore):
        (WebCore::JSTestCallback::handleEvent):
        * bindings/scripts/test/JS/JSTestCallback.h: Modified test results of run-bindings-tests.
        (JSTestCallback):
        * bindings/scripts/test/TestCallback.idl: Added test callback with sequence<> argument.
        * bindings/scripts/test/V8/V8TestCallback.cpp: Modified test results of run-bindings-tests.
        (WebCore):
        (WebCore::V8TestCallback::handleEvent):
        * bindings/scripts/test/V8/V8TestCallback.h: Modified test results of run-bindings-tests.
        (V8TestCallback):
        * bindings/v8/custom/V8MutationCallbackCustom.cpp: Removed.
        * dom/MutationCallback.idl: Removed custom bindings using sequence<T>.

2012-04-06  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r113431.
        http://trac.webkit.org/changeset/113431
        https://bugs.webkit.org/show_bug.cgi?id=83372

        for breaking at least Chromium compilation (Requested by
        pfeldman on #webkit).

        * rendering/RenderView.cpp:
        (WebCore::RenderView::paint):
        (WebCore::RenderView::shouldRepaint):
        (WebCore::RenderView::repaintViewRectangle):
        (WebCore::RenderView::repaintRectangleInViewAndCompositedLayers):
        (WebCore::RenderView::computeRectForRepaint):
        (WebCore::RenderView::selectionBounds):
        (WebCore::RenderView::viewRect):
        (WebCore::RenderView::unscaledDocumentRect):
        * rendering/RenderView.h:
        (RenderView):

2012-04-06  Peter Rybin  <peter.rybin@gmail.com>

        Web Inspector: CodeGeneratorInspector.py: completely switch all domains to 'strict' mode
        https://bugs.webkit.org/show_bug.cgi?id=83332

        Reviewed by Pavel Feldman.

        Hardcoded list of domains is removed from generator. Partial domain sorting is dropped as unneeded.
        Types with open propery list are introduced: validator allows undocumented properties for them.

        Timeline domain code is patched to do runtimeCast in the last moment because true switching to
        type-safe interfaces should take significant time and should be done separately.

        * inspector/CodeGeneratorInspector.py:
        (Generator.go):
        (Generator.process_event):
        (Generator.process_command):
        * inspector/InspectorTimelineAgent.cpp:
        (WebCore::InspectorTimelineAgent::willSendResourceRequest):
        (WebCore::InspectorTimelineAgent::innerAddRecordToTimeline):

2012-04-06  Peter Rybin  <peter.rybin@gmail.com>

        Web Inspector: CodeGeneratorInspector.py: stop accepting raw InspectorObject in generated setters
        https://bugs.webkit.org/show_bug.cgi?id=83327

        Reviewed by Pavel Feldman.

        Generator fixed to have strict types in generated setter methods.

        Client code is switched from InspectorObject's and String's to generated types where
        needed.

        * inspector/CodeGeneratorInspector.py:
        (AdHocTypeContext):
        (format_setter_value_expression):
        * inspector/ConsoleMessage.cpp:
        (WebCore::messageSourceValue):
        (WebCore::messageTypeValue):
        (WebCore::messageLevelValue):
        (WebCore::ConsoleMessage::addToFrontend):
        * inspector/InspectorApplicationCacheAgent.cpp:
        (WebCore::InspectorApplicationCacheAgent::buildArrayForApplicationCacheResources):
        (WebCore::InspectorApplicationCacheAgent::buildObjectForApplicationCacheResource):
        * inspector/InspectorApplicationCacheAgent.h:
        (InspectorApplicationCacheAgent):
        * inspector/InspectorCSSAgent.cpp:
        (WebCore::InspectorCSSAgent::asInspectorStyleSheet):
        (WebCore::InspectorCSSAgent::viaInspectorStyleSheet):
        (WebCore::InspectorCSSAgent::detectOrigin):
        * inspector/InspectorCSSAgent.h:
        (InspectorCSSAgent):
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::buildObjectForNode):
        * inspector/InspectorIndexedDBAgent.cpp:
        (WebCore):
        * inspector/InspectorMemoryAgent.cpp:
        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::buildObjectForFrameTree):
        * inspector/InspectorResourceAgent.cpp:
        (WebCore::buildObjectForTiming):
        (WebCore::buildObjectForCachedResource):
        * inspector/InspectorStyleSheet.cpp:
        (WebCore::InspectorStyle::buildObjectForStyle):
        (WebCore::InspectorStyleSheet::create):
        (WebCore::InspectorStyleSheet::InspectorStyleSheet):
        (WebCore::InspectorStyleSheet::buildObjectForRule):
        (WebCore::InspectorStyleSheet::resourceStyleSheetText):
        (WebCore::InspectorStyleSheet::buildArrayForRuleList):
        (WebCore::InspectorStyleSheetForInlineStyle::create):
        (WebCore::InspectorStyleSheetForInlineStyle::InspectorStyleSheetForInlineStyle):
        * inspector/InspectorStyleSheet.h:
        (InspectorCSSId):
        (WebCore::InspectorCSSId::asProtocolValue): method is made template as now it returns 2 formally different types.
        (InspectorStyleSheet):
        (WebCore::InspectorStyleSheet::canBind):
        (InspectorStyleSheetForInlineStyle):

2012-04-06  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: highlight diff in the gutter, not in the line content.
        https://bugs.webkit.org/show_bug.cgi?id=83371

        Reviewed by Yury Semikhatsky.

        Now that the editing mode is enabled by default, diff highlighting gets annoying.
        I am moving it to the gutter (same decoration as before, but now coloring gutter only).

        * inspector/front-end/TextViewer.js:
        (WebInspector.TextEditorGutterPanel.prototype.textChanged):
        * inspector/front-end/textViewer.css:
        (.diff-container .webkit-added-line.webkit-line-number):
        (.diff-container .webkit-removed-line.webkit-line-number):
        (.diff-container .webkit-changed-line.webkit-line-number):

2012-04-06  Peter Rybin  <peter.rybin@gmail.com>

        Web Inspector: CodeGeneratorInspector.py: stop accepting raw InspectorObject in generated setters
        https://bugs.webkit.org/show_bug.cgi?id=83327

        Reviewed by Pavel Feldman.

        Generator fixed to have strict types in generated setter methods.

        Client code is switched from InspectorObject's and String's to generated types where
        needed.

        * inspector/CodeGeneratorInspector.py:
        (AdHocTypeContext):
        (format_setter_value_expression):
        * inspector/ConsoleMessage.cpp:
        (WebCore::messageSourceValue):
        (WebCore::messageTypeValue):
        (WebCore::messageLevelValue):
        (WebCore::ConsoleMessage::addToFrontend):
        * inspector/InspectorApplicationCacheAgent.cpp:
        (WebCore::InspectorApplicationCacheAgent::buildArrayForApplicationCacheResources):
        (WebCore::InspectorApplicationCacheAgent::buildObjectForApplicationCacheResource):
        * inspector/InspectorApplicationCacheAgent.h:
        (InspectorApplicationCacheAgent):
        * inspector/InspectorCSSAgent.cpp:
        (WebCore::InspectorCSSAgent::asInspectorStyleSheet):
        (WebCore::InspectorCSSAgent::viaInspectorStyleSheet):
        (WebCore::InspectorCSSAgent::detectOrigin):
        * inspector/InspectorCSSAgent.h:
        (InspectorCSSAgent):
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::buildObjectForNode):
        * inspector/InspectorIndexedDBAgent.cpp:
        (WebCore):
        * inspector/InspectorMemoryAgent.cpp:
        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::buildObjectForFrameTree):
        * inspector/InspectorResourceAgent.cpp:
        (WebCore::buildObjectForTiming):
        (WebCore::buildObjectForCachedResource):
        * inspector/InspectorStyleSheet.cpp:
        (WebCore::InspectorStyle::buildObjectForStyle):
        (WebCore::InspectorStyleSheet::create):
        (WebCore::InspectorStyleSheet::InspectorStyleSheet):
        (WebCore::InspectorStyleSheet::buildObjectForRule):
        (WebCore::InspectorStyleSheet::resourceStyleSheetText):
        (WebCore::InspectorStyleSheet::buildArrayForRuleList):
        (WebCore::InspectorStyleSheetForInlineStyle::create):
        (WebCore::InspectorStyleSheetForInlineStyle::InspectorStyleSheetForInlineStyle):
        * inspector/InspectorStyleSheet.h:
        (InspectorCSSId):
        (WebCore::InspectorCSSId::asProtocolValue): method is made template as now it returns 2 formally different types.
        (InspectorStyleSheet):
        (WebCore::InspectorStyleSheet::canBind):
        (InspectorStyleSheetForInlineStyle):

2012-04-06  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: highlight diff in the gutter, not in the line content.
        https://bugs.webkit.org/show_bug.cgi?id=83371

        Reviewed by Yury Semikhatsky.

        Now that the editing mode is enabled by default, diff highlighting gets annoying.
        I am moving it to the gutter (same decoration as before, but now coloring gutter only).

        * inspector/front-end/TextViewer.js:
        (WebInspector.TextEditorGutterPanel.prototype.textChanged):
        * inspector/front-end/textViewer.css:
        (.diff-container .webkit-added-line.webkit-line-number):
        (.diff-container .webkit-removed-line.webkit-line-number):
        (.diff-container .webkit-changed-line.webkit-line-number):

2012-04-06  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: highlight diff in the gutter, not in the line content.
        https://bugs.webkit.org/show_bug.cgi?id=83371

        Reviewed by Yury Semikhatsky.

        Now that the editing mode is enabled by default, diff highlighting gets annoying.
        I am moving it to the gutter (same decoration as before, but now coloring gutter only).

        * inspector/front-end/TextViewer.js:
        (WebInspector.TextEditorGutterPanel.prototype.textChanged):
        * inspector/front-end/textViewer.css:
        (.diff-container .webkit-added-line.webkit-line-number):
        (.diff-container .webkit-removed-line.webkit-line-number):
        (.diff-container .webkit-changed-line.webkit-line-number):

2012-04-06  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: remove url from the saved urls map before the save action.
        https://bugs.webkit.org/show_bug.cgi?id=83364

        Reviewed by Yury Semikhatsky.

        URL gets added back upon successful save anyways, but if user chooses cancel saving,
        we stop bugging him with the save-as dialog.

        * inspector/front-end/NetworkPanel.js:
        (WebInspector.NetworkLogView.prototype._exportAll):
        (WebInspector.NetworkLogView.prototype._exportResource):
        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.FrameResourceTreeElement.prototype._appendSaveAsAction.doSave):
        (WebInspector.ResourceRevisionTreeElement.prototype._handleContextMenuEvent.doSave):
        * inspector/front-end/TextViewer.js:
        (WebInspector.TextViewer.prototype._contextMenu):
        (WebInspector.TextViewer.prototype._commitEditing):
        * inspector/front-end/TimelineModel.js:
        (WebInspector.TimelineModel.prototype.saveToFile):
        * inspector/front-end/inspector.js:

2012-04-06  Andrey Kosyakov  <caseq@chromium.org>

        Web Inspector: display frame details in popover on frame strip in Timeline panel
        https://bugs.webkit.org/show_bug.cgi?id=83365

        Reviewed by Pavel Feldman.

        - added popovers for frame strips;
        - factored out generateAggregatedInfo for reuse in the above;
        - made frame event dividers thinner, darker and greyer.

        * English.lproj/localizedStrings.js: Added "FPS" and "Frame"
        * inspector/front-end/TimelineFrameController.js:
        (WebInspector.TimelineFrameController.prototype._flushFrame): added startTimeOffset.
        (WebInspector.TimelineFrameController.prototype._createSyntheticFrame): ditto.
        * inspector/front-end/TimelineModel.js:
        (WebInspector.TimelineModel.prototype._updateBoundaries):
        (WebInspector.TimelineModel.prototype.recordOffsetInSeconds):
        * inspector/front-end/TimelinePanel.js:
        (WebInspector.TimelinePanel.prototype._updateFrames): added link to frame to strip div.
        (WebInspector.TimelinePanel.prototype._refresh):
        (WebInspector.TimelinePanel.prototype._getPopoverAnchor): handle frame anchors separately.
        (WebInspector.TimelinePanel.prototype._mouseMove): ditto.
        (WebInspector.TimelinePanel.prototype._showPopover):
        * inspector/front-end/TimelinePresentationModel.js:
        (WebInspector.TimelinePresentationModel.Record.prototype.generatePopupContent):
        (WebInspector.TimelinePresentationModel._generateAggregatedInfo): factored out for reuse.
        (WebInspector.TimelinePresentationModel.generatePopupContentForFrame):
        * inspector/front-end/inspectorCommon.css:
        (.resources-dividers-label-bar):
        * inspector/front-end/timelinePanel.css:
        (.timeline .resources-event-divider.timeline-frame-divider): made divider thin and grey.
        (.timeline-frame-strip): bumped z-index, added pointer-events: auto.

2012-04-06  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: show "dirty" flag for CSS files edited in the resources panel.
        https://bugs.webkit.org/show_bug.cgi?id=83363

        Reviewed by Yury Semikhatsky.

        Added TextEdited notification into the editable source frame, listening to it
        in the resources panel.

        * inspector/front-end/ResourceView.js:
        (WebInspector.EditableResourceSourceFrame.prototype._contentChanged):
        (WebInspector.EditableResourceSourceFrame.prototype.isDirty):
        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.FrameResourceTreeElement.prototype._appendRevision):
        (WebInspector.FrameResourceTreeElement.prototype.sourceView):
        (WebInspector.FrameResourceTreeElement.prototype._sourceViewTextEdited):

2012-04-06  Levi Weintraub  <leviw@chromium.org>

        Update LayoutUnit usage in RenderView
        https://bugs.webkit.org/show_bug.cgi?id=83147

        Reviewed by Julien Chaffraix.

        Updating the usage of LayoutUnits in RenderView in preparation for sub-pixel layout. This mostly
        affects paint and repaint functions, which take LayoutRects up to the RenderView level. This is
        necessary as we continue to accumulate sub-pixel offsets up to this level.

        No new tests. No change in behavior.

        * rendering/RenderView.cpp:
        (WebCore::RenderView::paint): Adding an assert that we're being called to paint on pixel
        boundaries. We don't currently ever position RenderViews at sub-pixel offsets.
        (WebCore::RenderView::shouldRepaint):
        (WebCore::RenderView::repaintViewRectangle): Switching to a LayoutRect and cleaning up a fixme
        that used decomposed offsets. Pixel snapping is applied before handing the rect up to the
        FrameView.
        (WebCore::RenderView::repaintRectangleInViewAndCompositedLayers): Pixel snapping before handing
        the rect up to the Compositor.
        (WebCore::RenderView::computeRectForRepaint):
        (WebCore::RenderView::selectionBounds):
        (WebCore::RenderView::viewRect):
        (WebCore::RenderView::unscaledDocumentRect):
        * rendering/RenderView.h:
        (RenderView):

2012-04-06  Andrey Kosyakov  <caseq@chromium.org>

        Web Inspector: hide popover on mouseout from anchor
        https://bugs.webkit.org/show_bug.cgi?id=83362

        Reviewed by Pavel Feldman.

        - start hide popover timer when mouse moves out of popover anchor, as we won't receive mousemove events any more;
        - factored out starting of popover kill timer to a method.

        * inspector/front-end/Popover.js:
        (WebInspector.PopoverHelper):
        (WebInspector.PopoverHelper.prototype._mouseMove): Factored out StartHidePopoverTimer()
        (WebInspector.PopoverHelper.prototype._mouseOut): Just call StartHidePopoverTimer() when mouse moves out of anchor.
        (WebInspector.PopoverHelper.prototype._startHidePopoverTimer.doHide): 
        (WebInspector.PopoverHelper.prototype._startHidePopoverTimer):
        (WebInspector.PopoverHelper.prototype._hidePopover): Reset hoverElement (aka anchor) when hiding popover.

2012-04-06  Andrey Kosyakov  <caseq@chromium.org>

        [Chromium] Web Inspector: getEventListeners(window) crashes on NTP
        https://bugs.webkit.org/show_bug.cgi?id=83353

        Reviewed by Pavel Feldman.

        * bindings/v8/custom/V8InjectedScriptHostCustom.cpp:
        (WebCore::V8InjectedScriptHost::getEventListenersCallback):

2012-04-06  Kent Tamura  <tkent@chromium.org>

        Touch ChromeClient.h to fix Chromium build.
        https://bugs.webkit.org/show_bug.cgi?id=83258

        * page/ChromeClient.h:

2012-04-06  Kent Tamura  <tkent@chromium.org>

        Initial LocalizedDateICU.cpp implementation
        https://bugs.webkit.org/show_bug.cgi?id=60868

        Reviewed by Hajime Morita.

        Add LocalizedDateICU.cpp, which supports only Date type.  It uses a
        short format because a date field is keyboard-editable.
        e.g. 5/15/11 in US locale.

        * WebCore.gyp/WebCore.gyp: Exclude LocalizedDateNone.cpp.
        * WebCore.gypi: Add LocalizedDateICU.cpp.
        * platform/text/LocalizedDateICU.cpp: Added.
        (WebCore::parseLocalizedDate):
        (WebCore::formatLocalizedDate):

2012-04-05  Alexander Pavlov  <apavlov@chromium.org>

        [REGRESSION] Refreshed autofill popup renders garbage
        https://bugs.webkit.org/show_bug.cgi?id=83255
        http://code.google.com/p/chromium/issues/detail?id=118374

        The code used to update only the PopupContainer coordinates as if they were the coordinates relative
        to the root view. Instead, a WebWidget positioned relative to the screen origin holds the PopupContainer,
        so it is the WebWidget that should be positioned in PopupContainer::refresh(), and the PopupContainer's
        location should be (0, 0) (and their sizes should always be equal).

        Reviewed by Kent Tamura.

        No new tests, as the popup appearance is not testable in WebKit.

        * platform/chromium/PopupContainer.cpp:
        (WebCore::PopupContainer::layoutAndCalculateWidgetRect): Variable renamed.
        (WebCore::PopupContainer::showPopup): Use m_originalFrameRect rather than frameRect()
        for passing into chromeClient.
        (WebCore::PopupContainer::showInRect): Set up the correct frameRect() for the container.
        (WebCore::PopupContainer::refresh): Resize the container and position the WebWidget correctly.
        * platform/chromium/PopupContainer.h:
        (PopupContainer):

2012-04-06  Kent Tamura  <tkent@chromium.org>

        Calendar Picker: Add code to open/close the calendar picker
        https://bugs.webkit.org/show_bug.cgi?id=83258

        Reviewed by Hajime Morita.

        No new tests. This code is not used because of no ENABLE_INPUT_TYPE_DATE.

        * WebCore.gypi: Add existing header files.

        * html/DateInputType.cpp:
        (WebCore::DateInputType::DateInputType):
        Moved from DateInputType.h because the constructor depends on
        CalendarPickerElement.
        (WebCore::DateInputType::createShadowSubtree):
        Store a CalendarPickerElement object.
        (WebCore::DateInputType::destroyShadowSubtree):
        Release the CalendarPickerElement object.
        (WebCore::DateInputType::handleBlurEvent):
        Close the calendar picker when the input loses focus.
        * html/DateInputType.h:
        (DateInputType):
        - Move the constructor definition to DateInputType.cpp
        - Add function declarations
        - Add m_pickerElement data member.

        * html/shadow/CalendarPickerElement.cpp:
        (WebCore::CalendarPickerElement::hostInput): A helper to get the host <input>.
        (WebCore::CalendarPickerElement::defaultEventHandler):
        If the element is clicked, open a calendar picker.
        (WebCore::CalendarPickerElement::openPopup):
        Opens a calendar picker by ChromeClient::openPagePopup().
        (WebCore::CalendarPickerElement::closePopup):
        Closes a calendar picker by ChromeClient::closePagePopup().
        (WebCore::CalendarPickerElement::detach):
        Closes a calendar picker when the element loses a renderer.

        (WebCore::CalendarPickerElement::contentSize):
        Provides the initial size of a popup.
        (WebCore::addString): A helper for writeDocument().
        (WebCore::addJavaScriptString): ditto.
        (WebCore::addProperty): ditto.
        (WebCore::CalendarPickerElement::writeDocument):
        Provides the source of a popup. The function creates a complete HTML with:
        - WebCore/Resources/calendarPicker.css
        - WebCore/Resources/calendarPicker.js
        - An object to pass localization strings and <input> state
        (WebCore::CalendarPickerElement::setValueAndClosePopup):
        Sets the value from a calendar picker to the <input>.
        (WebCore::CalendarPickerElement::didClosePopup):
        Clear the popup object.
        * html/shadow/CalendarPickerElement.h:
        (CalendarPickerElement): Add declarations.

        * platform/text/LocalizedCalendarICU.cpp:
        (WebCore::getFirstDayOfWeek): Make sure this is 0-base. UCAL_SUNDAY is 1.

2012-04-05  Adele Peterson  <adele@apple.com>

        <rdar://problem/11133179> and https://bugs.webkit.org/show_bug.cgi?id=74129
        REGRESSION (SnowLeopard, 5.1.4): All WK2 horizontal scrollbars look broken

        Patch by Dan Bernstein, Reviewed by Beth Dakin.

        This code assumed that the current CTM wouldn't have extraneous operations built into it, 
        but this bug is evidence that that assumption was wrong. We should just get the base CTM instead 
        and apply the device scale factor to it.

        No tests added since the SnowLeopard-style scrollbars aren't testable in our regression tests right now.

        * platform/graphics/GraphicsContext.cpp:
        (WebCore::GraphicsContext::platformApplyDeviceScaleFactor):
        (WebCore::GraphicsContext::applyDeviceScaleFactor):
        * platform/graphics/GraphicsContext.h: (GraphicsContext):
        * platform/graphics/cg/GraphicsContextCG.cpp: (WebCore::GraphicsContext::platformApplyDeviceScaleFactor):

2012-04-05  Yuta Kitamura  <yutak@chromium.org>

        Leak in WebSocketChannel with workers/worker-reload.html
        https://bugs.webkit.org/show_bug.cgi?id=83345

        Reviewed by David Levin.

        A speculative fix of memory leaks caused by worker-reload.html.

        No new tests, as this change imposes no functional change.

        * Modules/websockets/WorkerThreadableWebSocketChannel.cpp:
        (WebCore::WorkerThreadableWebSocketChannel::mainThreadDestroy):
        Receive the peer as PassOwnPtr<> so the destructor of the task object can
        delete the peer even if the task didn't run before main thread's cleanup period.
        (WebCore::WorkerThreadableWebSocketChannel::Bridge::disconnect):
        * Modules/websockets/WorkerThreadableWebSocketChannel.h:
        (WorkerThreadableWebSocketChannel):

2012-04-05  Lu Guanqun  <guanqun.lu@intel.com>

        combine two arrays (coreExceptionNames and coreExceptionDescriptions) into one array
        https://bugs.webkit.org/show_bug.cgi?id=83141

        Reviewed by Adam Barth.

        No new tests required.

        * dom/DOMCoreException.cpp:
        (CoreException):
        (WebCore):
        (WebCore::DOMCoreException::initializeDescription):

2012-04-05  David Barton  <dbarton@mathscribe.com>

        Remove intrinsic padding from contentBoxRect(), etc.
        https://bugs.webkit.org/show_bug.cgi?id=83092

        Reviewed by Julien Chaffraix.

        "Intrinsic padding" does not count as CSS padding, but is treated as padding by basic
        layout and rendering code, e.g. RenderBlock::layout(). A lot of code relies on the
        equation border-box = content-box + padding + border (+ scrollbars). To keep this valid,
        change 5 functions in RenderBox.h to not include intrinsic padding in the content box,
        thus reverting to their behavior before the patch for bug 33593. Instead, have
        sizingBox(renderer) in CSSComputedStyleDeclaration.cpp explicitly put the intrinsic
        padding in computed CSS content-box values [for javascript getComputedStyle()], so the
        above equation still also holds for CSS computed values. This seems more consistent with
        how the padding...() functions behave since the patch for bug 23487, and will work
        better for MathML. For instance, a block's contentLogicalWidth() will be the
        availableLogicalWidth() for use by child elements.

        No new tests. The only real observable changes are illustrated in the bug 83092 attached
        test case and discussion. These are minor and hard to automate.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::sizingBox):
        * editing/DeleteSelectionCommand.cpp:
        (WebCore::DeleteSelectionCommand::removeNode):
        * rendering/RenderBox.h:
        (WebCore::RenderBox::contentBoxRect):
        (WebCore::RenderBox::contentWidth):
        (WebCore::RenderBox::contentHeight):
        (WebCore::RenderBox::contentLogicalWidth):
        (WebCore::RenderBox::contentLogicalHeight):
            - Change these 5 functions to omit intrinsic padding from the content box.
        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::cellBaselinePosition):
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::firstLineBoxBaseline):

2012-04-05  Hironori Bono  <hbono@chromium.org>

        [Chromium] moving a cursor on a misspelled word should not remove a misspelled underline
        https://bugs.webkit.org/show_bug.cgi?id=83214

        Reviewed by Ryosuke Niwa.

        When Chrome enables asynchronous spellchecking, it adds Spelling markers in the
        background. For this case, moving a cursor should not remove these markers
        because it requires Chrome to spellcheck text again. This change prevents
        removing Spelling markers added by spellcheckers asynchronously.

        Test: platform/chromium/editing/spelling/move-cursor-to-misspelled-word.html

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

2012-04-05  Hans Muller  <hmuller@adobe.com>

        CSS Exclusions polygon shape arguments should be comma separated
        https://bugs.webkit.org/show_bug.cgi?id=82368

        Reviewed by Ryosuke Niwa.

        Changed the CSS Parser to accept a conventional comma separated argument list for the
        polygon exclusion shape. The syntax had used spaces to separate x,y coordinates, like:
        polygon(10px,20px 30px,40px).  Now commas separate points: polygon(10px 20px, 30px 40px).
        This change is per the draft exclusions spec, http://dev.w3.org/csswg/css3-exclusions.
        Additional relevant information about CSS argument list syntax can be found
        here: http://dev.w3.org/csswg/css3-values/#component-whitespace.

        Factored comma recognition idiom in CSSParser.cpp into isComma() utility function.

        The existing tests have been updated.

        * css/CSSParser.cpp:
        (WebCore::isComma)
        (WebCore::CSSParser::parseFillPosition)
        (WebCore::CSSParser::parseFillRepeat)
        (WebCore::CSSParser::parseFillProperty)
        (WebCore::CSSParser::parseCubicBezierTimingFunctionValue)
        (WebCore::CSSParser::parseAnimationTimingFunction)
        (WebCore::CSSParser::parseAnimationProperty)
        (WebCore::CSSParser::parseExclusionShapePolygon)
        (WebCore::CSSParser::parseDeprecatedGradient)
        (WebCore::CSSParser::parseRadialGradient)
        (WebCore::CSSParser::parseGradientColorStops)
        (WebCore::CSSParser::parseImageSet)
        (WebCore::filterInfoForName)
        (WebCore::CSSParser::parseCustomFilter)
        (WebCore::CSSParser::parseFontFeatureSettings)

        * css/CSSWrapShapes.cpp:
        (WebCore::CSSWrapShapePolygon::cssText):

2012-04-05  Joshua Bell  <jsbell@chromium.org>

        IndexedDB: Support string.length in keyPaths
        https://bugs.webkit.org/show_bug.cgi?id=83221

        Special case in the IDB spec - keyPaths can reference the |length| property
        of string values. Other instrinsic properties (|length| of Array, etc) are
        handled automagically. Relevant section of the updated spec is:
        http://dvcs.w3.org/hg/IndexedDB/raw-file/tip/Overview.html#key-path-construct

        Reviewed by Kentaro Hara.

        Test: storage/indexeddb/keypath-intrinsic-properties.html

        * bindings/v8/IDBBindingUtilities.cpp:
        (WebCore):

2012-04-05  Arvid Nilsson  <anilsson@rim.com>

        [BlackBerry] Update the InstrumentedPlatformCanvas after rebasing Skia
        https://bugs.webkit.org/show_bug.cgi?id=83314

        Reviewed by George Staikos.

        RIM PR: 143771
        One new virtual method was added to the SkCanvas, to draw a nine piece
        image. Override it and mark output as not being a solid color anymore.

        * platform/graphics/blackberry/InstrumentedPlatformCanvas.h:
        (WebCore::InstrumentedPlatformCanvas::drawBitmapNine):
        (InstrumentedPlatformCanvas):

2012-04-05  Oliver Hunt  <oliver@apple.com>

        Make WebCore use jsCast rather than static_cast for casting JSC objects
        https://bugs.webkit.org/show_bug.cgi?id=83320

        Reviewed by Stephanie Lewis.

        Mechanically replace static_cast with jsCast where ever we can.

        * WebCore.exp.in:
        * bindings/js/DOMWrapperWorld.cpp:
        (WebCore::JSStringOwner::finalize):
        * bindings/js/DOMWrapperWorld.h:
        (WebCore::currentWorld):
        * bindings/js/JSArrayBufferCustom.cpp:
        (WebCore::JSArrayBufferConstructor::constructJSArrayBuffer):
        * bindings/js/JSAudioContextCustom.cpp:
        (WebCore::JSAudioContextConstructor::constructJSAudioContext):
        * bindings/js/JSCSSRuleListCustom.cpp:
        (WebCore::JSCSSRuleListOwner::isReachableFromOpaqueRoots):
        * bindings/js/JSCSSStyleDeclarationCustom.cpp:
        (WebCore::cssPropertyGetterPixelOrPosPrefixCallback):
        (WebCore::cssPropertyGetterCallback):
        * bindings/js/JSCSSValueCustom.cpp:
        (WebCore::JSCSSValueOwner::isReachableFromOpaqueRoots):
        (WebCore::JSCSSValueOwner::finalize):
        * bindings/js/JSDOMBinding.cpp:
        (WebCore::reportException):
        * bindings/js/JSDOMBinding.h:
        (WebCore::deprecatedGlobalObjectForPrototype):
        (WebCore::getDOMPrototype):
        * bindings/js/JSDOMFormDataCustom.cpp:
        (WebCore::toHTMLFormElement):
        (WebCore::JSDOMFormDataConstructor::constructJSDOMFormData):
        * bindings/js/JSDOMMimeTypeArrayCustom.cpp:
        (WebCore::JSDOMMimeTypeArray::nameGetter):
        * bindings/js/JSDOMPluginArrayCustom.cpp:
        (WebCore::JSDOMPluginArray::nameGetter):
        * bindings/js/JSDOMPluginCustom.cpp:
        (WebCore::JSDOMPlugin::nameGetter):
        * bindings/js/JSDOMStringMapCustom.cpp:
        (WebCore::JSDOMStringMap::nameGetter):
        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::toJSDOMWindow):
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::childFrameGetter):
        (WebCore::indexGetter):
        (WebCore::namedItemGetter):
        (WebCore::toDOMWindow):
        * bindings/js/JSDOMWindowCustom.h:
        (WebCore::asJSDOMWindow):
        * bindings/js/JSDOMWindowShell.h:
        (WebCore::JSDOMWindowShell::window):
        * bindings/js/JSDOMWrapper.h:
        (WebCore::JSDOMWrapper::globalObject):
        * bindings/js/JSDataViewCustom.cpp:
        (WebCore::JSDataViewConstructor::constructJSDataView):
        * bindings/js/JSEventListener.cpp:
        (WebCore::JSEventListener::handleEvent):
        * bindings/js/JSEventTarget.cpp:
        (WebCore):
        (WebCore::toEventTarget):
        * bindings/js/JSFloat32ArrayCustom.cpp:
        (WebCore::JSFloat32ArrayConstructor::constructJSFloat32Array):
        * bindings/js/JSFloat64ArrayCustom.cpp:
        (WebCore::JSFloat64ArrayConstructor::constructJSFloat64Array):
        * bindings/js/JSGeolocationCustom.cpp:
        (WebCore::JSGeolocation::getCurrentPosition):
        (WebCore::JSGeolocation::watchPosition):
        * bindings/js/JSHTMLAllCollectionCustom.cpp:
        (WebCore::callHTMLAllCollection):
        (WebCore::JSHTMLAllCollection::nameGetter):
        * bindings/js/JSHTMLCollectionCustom.cpp:
        (WebCore::JSHTMLCollection::nameGetter):
        * bindings/js/JSHTMLDocumentCustom.cpp:
        (WebCore::JSHTMLDocument::nameGetter):
        * bindings/js/JSHTMLFormElementCustom.cpp:
        (WebCore::JSHTMLFormElement::nameGetter):
        * bindings/js/JSHTMLFrameSetElementCustom.cpp:
        (WebCore::JSHTMLFrameSetElement::nameGetter):
        * bindings/js/JSHTMLOptionsCollectionCustom.cpp:
        (WebCore::JSHTMLOptionsCollection::remove):
        * bindings/js/JSImageConstructor.cpp:
        (WebCore::constructImage):
        * bindings/js/JSInjectedScriptManager.cpp:
        (WebCore::InjectedScriptManager::createInjectedScript):
        (WebCore::InjectedScriptManager::discardInjectedScript):
        (WebCore::InjectedScriptManager::injectedScriptFor):
        * bindings/js/JSInt16ArrayCustom.cpp:
        (WebCore::JSInt16ArrayConstructor::constructJSInt16Array):
        * bindings/js/JSInt32ArrayCustom.cpp:
        (WebCore::JSInt32ArrayConstructor::constructJSInt32Array):
        * bindings/js/JSInt8ArrayCustom.cpp:
        (WebCore::JSInt8ArrayConstructor::constructJSInt8Array):
        * bindings/js/JSLazyEventListener.cpp:
        (WebCore::JSLazyEventListener::initializeJSFunction):
        * bindings/js/JSNamedNodeMapCustom.cpp:
        (WebCore::JSNamedNodeMap::nameGetter):
        * bindings/js/JSNodeCustom.cpp:
        (WebCore::JSNodeOwner::isReachableFromOpaqueRoots):
        (WebCore::JSNodeOwner::finalize):
        * bindings/js/JSNodeCustom.h:
        (WebCore::toJS):
        * bindings/js/JSNodeFilterCustom.cpp:
        (WebCore::toNodeFilter):
        * bindings/js/JSNodeListCustom.cpp:
        (WebCore::JSNodeListOwner::isReachableFromOpaqueRoots):
        (WebCore::JSNodeList::nameGetter):
        * bindings/js/JSPluginElementFunctions.cpp:
        (WebCore::runtimeObjectPropertyGetter):
        (WebCore::callPlugin):
        * bindings/js/JSPopStateEventCustom.cpp:
        (WebCore::JSPopStateEvent::state):
        * bindings/js/JSSQLTransactionCustom.cpp:
        (WebCore::JSSQLTransaction::executeSql):
        * bindings/js/JSSharedWorkerCustom.cpp:
        (WebCore::JSSharedWorkerConstructor::constructJSSharedWorker):
        * bindings/js/JSStorageCustom.cpp:
        (WebCore::JSStorage::nameGetter):
        * bindings/js/JSStyleSheetListCustom.cpp:
        (WebCore::JSStyleSheetList::nameGetter):
        * bindings/js/JSTextTrackCueCustom.cpp:
        (WebCore::JSTextTrackCueOwner::isReachableFromOpaqueRoots):
        * bindings/js/JSTextTrackCustom.cpp:
        (WebCore::JSTextTrackOwner::isReachableFromOpaqueRoots):
        * bindings/js/JSTextTrackListCustom.cpp:
        (WebCore::JSTextTrackListOwner::isReachableFromOpaqueRoots):
        * bindings/js/JSTrackCustom.cpp:
        (WebCore::toTrack):
        * bindings/js/JSUint16ArrayCustom.cpp:
        (WebCore::JSUint16ArrayConstructor::constructJSUint16Array):
        * bindings/js/JSUint32ArrayCustom.cpp:
        (WebCore::JSUint32ArrayConstructor::constructJSUint32Array):
        * bindings/js/JSUint8ArrayCustom.cpp:
        (WebCore::JSUint8ArrayConstructor::constructJSUint8Array):
        * bindings/js/JSUint8ClampedArrayCustom.cpp:
        (WebCore::JSUint8ClampedArrayConstructor::constructJSUint8ClampedArray):
        * bindings/js/JSWebKitMutationObserverCustom.cpp:
        (WebCore::JSWebKitMutationObserverConstructor::constructJSWebKitMutationObserver):
        * bindings/js/JSWebKitPointCustom.cpp:
        (WebCore::JSWebKitPointConstructor::constructJSWebKitPoint):
        * bindings/js/JSWebSocketCustom.cpp:
        (WebCore::JSWebSocketConstructor::constructJSWebSocket):
        * bindings/js/JSWorkerContextBase.cpp:
        (WebCore::toJSDedicatedWorkerContext):
        (WebCore::toJSSharedWorkerContext):
        * bindings/js/JSWorkerCustom.cpp:
        (WebCore::JSWorkerConstructor::constructJSWorker):
        * bindings/js/JSXSLTProcessorCustom.cpp:
        (WebCore::JSXSLTProcessor::importStylesheet):
        (WebCore::JSXSLTProcessor::transformToFragment):
        (WebCore::JSXSLTProcessor::transformToDocument):
        * bindings/js/ScriptCallStackFactory.cpp:
        (WebCore::createScriptCallStackForInspector):
        * bindings/js/ScriptControllerMac.mm:
        (WebCore::updateStyleIfNeededForBindings):
        * bindings/js/ScriptDebugServer.cpp:
        (WebCore::ScriptDebugServer::dispatchDidPause):
        * bindings/js/ScriptObject.cpp:
        (WebCore::ScriptGlobalObject::set):
        * bindings/js/ScriptState.cpp:
        (WebCore::domWindowFromScriptState):
        (WebCore::scriptExecutionContextFromScriptState):
        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::CloneSerializer::fillTransferMap):
        (WebCore::CloneSerializer::dumpArrayBufferView):
        (WebCore::CloneDeserializer::getJSValue):
        (WebCore::CloneDeserializer::readTerminal):
        * bindings/objc/WebScriptObject.mm:
        (-[WebScriptObject _isSafeScript]):
        (+[WebScriptObject _convertValueToObjcValue:originRootObject:rootObject:]):
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateGetOwnPropertySlotBody):
        (GenerateGetOwnPropertyDescriptorBody):
        (GenerateImplementation):
        (GenerateCallWith):
        (NativeToJSValue):
        (GenerateConstructorDefinition):
        * bridge/jni/jni_jsobject.h:
        * bridge/jni/jni_jsobject.mm:
        (JavaJSObject::convertJObjectToValue):
        * bridge/jni/jsc/JavaInstanceJSC.cpp:
        (JavaInstance::invokeMethod):
        * bridge/objc/objc_utility.mm:
        (JSC::Bindings::convertValueToObjcValue):
        * bridge/runtime_method.cpp:
        (JSC::callRuntimeMethod):
        * bridge/runtime_object.cpp:
        (JSC::Bindings::callRuntimeConstructor):
        * testing/js/WebCoreTestSupport.cpp:
        (WebCoreTestSupport::injectInternalsObject):
        (WebCoreTestSupport::resetInternalsObject):

2012-04-05  Martin Robinson  <mrobinson@igalia.com>

        [GTK] Scrolling some iframes that are partially out of the viewport leads to repaint errors
        https://bugs.webkit.org/show_bug.cgi?id=83309

        Reviewed by Gustavo Noronha Silva.

        Test: platform/gtk/fast/frames/scrolling-iframe-out-of-viewport.html

        The X11 backing store was not properly trimming the scroll region when it
        was only a portion of the screen. This was hidden by subsequent repaints.

        * platform/gtk/GtkWidgetBackingStoreX11.cpp:
        (WebCore::WidgetBackingStore::scroll): Fix the calculation of the scrolling region.

2012-04-05  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r113299.
        http://trac.webkit.org/changeset/113299
        https://bugs.webkit.org/show_bug.cgi?id=83297

        The patch broke 11 tests on Lion. (Requested by jonlee on
        #webkit).

        * xml/parser/XMLDocumentParser.h:
        (XMLDocumentParser):
        * xml/parser/XMLDocumentParserLibxml2.cpp:
        (WebCore::XMLDocumentParser::XMLDocumentParser):
        (WebCore::XMLDocumentParser::startElementNs):
        (WebCore::XMLDocumentParser::endElementNs):
        (WebCore::getEntityHandler):
        (WebCore::XMLDocumentParser::initializeParserContext):

2012-04-05  Justin Novosad  <junov@chromium.org>

        [Chromium] Correct misleading trace event names in Canvas2DLayerChromium
        https://bugs.webkit.org/show_bug.cgi?id=83310

        Reviewed by Adrienne Walker.

        * platform/graphics/chromium/Canvas2DLayerChromium.cpp:
        (WebCore::Canvas2DLayerChromium::paintContentsIfDirty):

2012-04-05  Dean Jackson  <dino@apple.com>

        [mac] requestAnimationFrame sometimes stuck when page loads in a background tab
        https://bugs.webkit.org/show_bug.cgi?id=76105

        Reviewed by Simon Fraser.

        Fix three issues with requestAnimationFrame:
        - It's possible for the call to rAF to come to the document before there
          is a page associated. Added a guard for this.
        - A page may try to suspend the scripted animations before the
          ScriptedAnimationController exists, in which case we need to
          suspend it immediately after it is created. Do this by keeping
          track of the state in Page. Otherwise rAF would be busy looping
          on hidden pages until they are brought to the front and hidden again.
        - A page created in the background (from WebKit1) does not get
          informed it is not visible. This can mean that resume() is called
          more times than suspend() and we get into a state where the number
          of suspensions becomes -1, and thus fails truthiness tests. Clamp it
          to values >= 0.

        No new tests, since this is not automatically testable. The most reliable test
        is to open a page with rAF in a background tab within Safari.

        * dom/Document.cpp:
        (WebCore::Document::webkitRequestAnimationFrame):
        * dom/ScriptedAnimationController.cpp:
        (WebCore::ScriptedAnimationController::resume):
        * page/Page.cpp:
        (WebCore::Page::Page):
        (WebCore::Page::suspendScriptedAnimations):
        (WebCore::Page::resumeScriptedAnimations):
        * page/Page.h:
        (WebCore::Page::scriptedAnimationsSuspended):
        (Page):

2012-04-05  Brady Eidson  <beidson@apple.com>

        <rdar://problem/9359029> and https://bugs.webkit.org/show_bug.cgi?id=83311
        Crashes in WebProcess at WebCore::HistoryController::recursiveSetProvisionalItem when restoring previous session

        Reviewed by Sam Weinig.

        It's possible to hit a race condition between the UIProcess and the WebProcess where the UIProcess records for a 
        page have been cleared out but the WebProcess is still trying to perform a history navigation within that page.
        
        In this situation HistoryController code that expects there to always be a current history item in the back/forward
        controller is wrong.

        No new tests. (The race conditions involved have proven making a test impractical)

        * loader/HistoryController.cpp:
        (WebCore::HistoryController::recursiveSetProvisionalItem): Don't ASSERT the fromItem. We now know there might not be one.
        (WebCore::HistoryController::recursiveGoToItem): Ditto
        (WebCore::HistoryController::itemsAreClones): Always return false if either item is null, as a null item and a non-null
          item cannot possible be clones of each other.

2012-04-05  Adam Klein  <adamk@chromium.org>

        Crash in MutationObservers due to an invalid HashSet iterator
        https://bugs.webkit.org/show_bug.cgi?id=83304

        Reviewed by Ojan Vafai.

        If the observed node has been GCed when we clear transient observers
        from it, the HashSet iterator in WebKitMutationObserver::deliver would
        be invalidated. This patch fixes that behavior by copying the relevant
        registrations into a seperate vector first and operating on the copy.

        This patch also fixes a bug: transient observers should be cleared
        after every microtask, not just when delivering.

        Tests: fast/mutation/clear-transient-without-delivery.html
               fast/mutation/transient-gc-crash.html

        * dom/MutationObserverRegistration.cpp:
        (WebCore::MutationObserverRegistration::observedSubtreeNodeWillDetach):
        Notify the observer that it has a transient registration so it can be properly cleared.
        * dom/MutationObserverRegistration.h:
        (WebCore::MutationObserverRegistration::hasTransientRegistrations):
        Add an accessor for use when deliver() creates its vector of registrations.
        * dom/WebKitMutationObserver.cpp:
        (WebCore::WebKitMutationObserver::setHasTransientRegistration): Add this to the active observer set
        to allow transient registrations to be cleared appropriately.
        (WebCore::WebKitMutationObserver::deliver): Avoid modifying m_registrations while iterating over it.
        Clear registrations before checking for a lack of records to deliver.
        * dom/WebKitMutationObserver.h:

2012-04-05  Adam Klein  <adamk@chromium.org>

        Rebaseline binding tests after r113272.

        * bindings/scripts/test/V8/V8TestInterface.cpp:
        (WebCore::V8TestInterface::constructorCallback):
        * bindings/scripts/test/V8/V8TestNamedConstructor.cpp:
        (WebCore::V8TestNamedConstructorConstructorCallback):
        * bindings/scripts/test/V8/V8TestObj.cpp:
        (WebCore::V8TestObj::constructorCallback):
        * bindings/scripts/test/V8/V8TestSerializedScriptValueInterface.cpp:
        (WebCore::V8TestSerializedScriptValueInterface::constructorCallback):

2012-04-05  Stephen White  <senorblanco@chromium.org>

        [chromium] Drawing an accelerated canvas onto itself is slow.
        https://bugs.webkit.org/show_bug.cgi?id=83295

        Fixed by using a GPU-side deepCopy() in skia, so we don't trigger a
        readback and re-upload.

        Reviewed by James Robinson.

        Correctness is covered by existing tests. Performance is covered
        by the test case attached to the bug.

        * platform/graphics/skia/ImageSkia.cpp:
        (WebCore::BitmapImageSingleFrameSkia::create):

2012-04-05  Dana Jansens  <danakj@chromium.org>

        [chromium] Record the number of tiles paint-culled instead of the incorrect number of pixels
        https://bugs.webkit.org/show_bug.cgi?id=82423

        Reviewed by Adrienne Walker.

        We currently attempt to record the number of pixels we save from uploading,
        however the number is wrong in two ways.
        1) An early-out if everything is culled results in nothing being reported.
        2) With threaded-compositor, the number of pixels uploaded in one tile can be
        changed by culling in another tile, making the number far too difficult to
        compute to be worthwhile. If a tile was going to be partial-updated, but is
        culled, now a new tile gets to be partial-updated instead, which affects the
        numbers.

        This patch breaks up CCOverdrawMetrics to make the methods/variables less
        overloaded and more clear. This way they don't have to mirror each other
        so closely on paint/draw sides.

        Then we record the number of tiles for which we prevented upload via paint
        culling. This will still over-report (a dirty culled tile stays dirty and
        will be culled again each commit), but it seems more reasonable as it
        clearly does not try to mimic a performance metric in the way that a pixel
        count does, but still gives a rough estimation of the amount of paint
        culling going on in a page.

        Covered by existing tests, modified where needed.

        * platform/graphics/chromium/TiledLayerChromium.cpp:
        (WebCore::TiledLayerChromium::prepareToUpdateTiles):
        * platform/graphics/chromium/cc/CCOverdrawMetrics.cpp:
        (WebCore::CCOverdrawMetrics::CCOverdrawMetrics):
        (WebCore::CCOverdrawMetrics::didCullTileForUpload):
        (WebCore):
        (WebCore::CCOverdrawMetrics::didUpload):
        (WebCore::CCOverdrawMetrics::didCullForDrawing):
        (WebCore::CCOverdrawMetrics::recordMetrics):
        (WebCore::CCOverdrawMetrics::recordMetricsInternal):
        * platform/graphics/chromium/cc/CCOverdrawMetrics.h:
        (CCOverdrawMetrics):
        (WebCore::CCOverdrawMetrics::pixelsCulledForDrawing):
        (WebCore::CCOverdrawMetrics::pixelsUploadedOpaque):
        (WebCore::CCOverdrawMetrics::pixelsUploadedTranslucent):
        (WebCore::CCOverdrawMetrics::tilesCulledForUpload):
        * platform/graphics/chromium/cc/CCQuadCuller.cpp:
        (WebCore::CCQuadCuller::append):

2012-04-05  Enrica Casucci  <enrica@apple.com>

        Provide a separate editing command to cleanup of redundant markup.
        https://bugs.webkit.org/show_bug.cgi?id=83240

        Reviewed by Ryosuke Niwa.

        This patch moves the logic originally performed by the private
        method removeRedundantMarkup inside ReplaceSelectionCommand into
        a separate command. This way the markup cleanup can be exposed as
        a separate command, independent from ReplaceSelectionCommand.
        
        No new tests. No change in functionality.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        Added new file to project files.
        * editing/EditorAllInOne.cpp: Added SimplifyMarkupCommand.
        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::doApply): Now uses SimplifyMarkupCommand.
        * editing/ReplaceSelectionCommand.h:
        (ReplaceSelectionCommand): Removed removeRedundantMarkup.
        * editing/SimplifyMarkupCommand.cpp: Added.
        (WebCore::SimplifyMarkupCommand::SimplifyMarkupCommand):
        (WebCore::SimplifyMarkupCommand::doApply):
        * editing/SimplifyMarkupCommand.h: Added.
        (WebCore::SimplifyMarkupCommand::create):

2012-04-05  Shawn Singh  <shawnsingh@chromium.org>

        [chromium] Need to clip to homogeneous w=0 plane when applying transforms.
        https://bugs.webkit.org/show_bug.cgi?id=80806

        Reviewed by Adrienne Walker.

        Unit tests added to CCLayerTreeHostCommon. This change is also
        covered by other existing unit tests and layout tests.

        WebCore TransformationMatrix mapRect / mapQuad / projectQuad do
        not properly handle the case where a surface is oriented partially
        behind the camera, with a perspective projection. In this case,
        projected points may appear to be valid in cartesian coordinates,
        but they are indeed not valid, and this problem can only be
        detected in homogeneous coordinates after applying the transform,
        before the divide-by-w step.

        The correct solution is to clip geometry where w < 0. This patch
        makes this change local to chromium only, to fix rendering bugs
        that arise from this problem. The primary fix is to correct
        calculateVisibleLayerRect(), but other ancillary locations are
        also fixed, in particular, the antialiasing code path is simply
        skipped when this case arises.

        Eventually this math needs to be merged into TransformationMatrix,
        to fix hit-testing bugs that occur in both Chromium and Safari.

        * WebCore.gypi:
        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::findTileProgramUniforms):
        (WebCore::LayerRendererChromium::drawTileQuad):
        * platform/graphics/chromium/cc/CCLayerTreeHostCommon.cpp:
        (WebCore::CCLayerTreeHostCommon::calculateVisibleRect):
        (WebCore::isScaleOrTranslation):
        (WebCore::calculateDrawTransformsAndVisibilityInternal):
        * platform/graphics/chromium/cc/CCMathUtil.cpp: Added.
        (WebCore):
        (WebCore::HomogeneousCoordinate::HomogeneousCoordinate):
        (HomogeneousCoordinate):
        (WebCore::HomogeneousCoordinate::shouldBeClipped):
        (WebCore::HomogeneousCoordinate::cartesianPoint2d):
        (WebCore::projectPoint):
        (WebCore::mapPoint):
        (WebCore::computeClippedPointForEdge):
        (WebCore::expandBoundsToIncludePoint):
        (WebCore::computeEnclosingRectOfClippedQuad):
        (WebCore::computeEnclosingRect):
        (WebCore::CCMathUtil::mapClippedRect):
        (WebCore::CCMathUtil::projectClippedRect):
        (WebCore::CCMathUtil::mapQuad):
        (WebCore::CCMathUtil::projectQuad):
        * platform/graphics/chromium/cc/CCMathUtil.h: Added.
        (WebCore):
        (CCMathUtil):
        * platform/graphics/chromium/cc/CCOcclusionTracker.cpp:
        (WebCore::computeUnoccludedContentRect):

2012-04-05  Patrick Gansterer  <paroga@webkit.org>

        [Qt] Correct <wtf/*.h> include paths.
        https://bugs.webkit.org/show_bug.cgi?id=83270

        Reviewed by Eric Seidel.

        Modify the #include declerations so that the
        wtf types are included using the full path.

        * platform/graphics/TiledBackingStoreBackend.h:

2012-04-05  Antonio Gomes  <agomes@rim.com>

        Unreviewed bit left over from rebasing the origin patch before landing it.

        Complementary to r113329.

        * rendering/HitTestResult.cpp:
        (WebCore::HitTestResult::operator=):

2012-04-05  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r113241.
        http://trac.webkit.org/changeset/113241
        https://bugs.webkit.org/show_bug.cgi?id=83293

        Requested by sievers@chromium.org (Requested by zhenyao on
        #webkit).

        * platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:
        (WebCore::CCLayerTreeHostImpl::canDraw):
        (WebCore::CCLayerTreeHostImpl::prepareToDraw):
        * platform/graphics/chromium/cc/CCLayerTreeHostImpl.h:
        (CCLayerTreeHostImpl):
        * platform/graphics/chromium/cc/CCThreadProxy.cpp:
        (WebCore::CCThreadProxy::scheduledActionDrawAndSwapInternal):

2012-04-05  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r113341.
        http://trac.webkit.org/changeset/113341
        https://bugs.webkit.org/show_bug.cgi?id=83299

        bots caught some build errors (Requested by shawnsingh on
        #webkit).

        * WebCore.gypi:
        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::findTileProgramUniforms):
        (WebCore::LayerRendererChromium::drawTileQuad):
        * platform/graphics/chromium/cc/CCLayerTreeHostCommon.cpp:
        (WebCore::CCLayerTreeHostCommon::calculateVisibleRect):
        (WebCore::isScaleOrTranslation):
        (WebCore::calculateDrawTransformsAndVisibilityInternal):
        * platform/graphics/chromium/cc/CCMathUtil.cpp: Removed.
        * platform/graphics/chromium/cc/CCMathUtil.h: Removed.
        * platform/graphics/chromium/cc/CCOcclusionTracker.cpp:
        (WebCore::projectQuad):
        (WebCore):
        (WebCore::computeUnoccludedContentRect):

2012-04-05  Justin Novosad  <junov@chromium.org>

        [Chromium] With the skia port, setting LCD text filtering is causing
        texture cache invalidations of gpu canvas backing store
        https://bugs.webkit.org/show_bug.cgi?id=74183

        Reviewed by Stephen White.

        Replacing unnecessary usage of SkCanvas::LayerIter with calls to
        SkCanvas::isDrawingToLayer(). Same results, lower overhead, and no
        GPU texture invalidation.

        * platform/graphics/chromium/FontChromiumWin.cpp:
        (WebCore):
        (WebCore::TransparencyAwareFontPainter::initializeForGDI):
        * platform/graphics/harfbuzz/FontHarfBuzz.cpp:
        (WebCore):
        (WebCore::adjustTextRenderMode):
        * platform/graphics/skia/FontSkia.cpp:
        (WebCore):
        (WebCore::adjustTextRenderMode):
        * platform/graphics/skia/SkiaFontWin.cpp:
        (WebCore):
        (WebCore::disableTextLCD):
        * rendering/RenderThemeChromiumWin.cpp:
        (WebCore):

2012-04-05  Zan Dobersek  <zandobersek@gmail.com>

        media/track/track-webvtt-tc004-magic-header.html flakily times out
        https://bugs.webkit.org/show_bug.cgi?id=72279

        Reviewed by Eric Carlson.

        Move all the checking for the WebVTT file identifier from TextTrackLoader
        to WebVTTParser, notifying the parser clients of parsing failures through
        a new method. Remove the WebVTTParser::fileIdentifierMaximumLength method
        and make WebVTTParser::hasRequiredFileIdentifier private. The latter now
        operates on a vector holding the identifier data to which data is added
        until there's enough of it to possibly hold the optional BOM character
        and the required WEBVTT character sequence.

        No new tests. Fixes an existing test.

        * html/track/WebVTTParser.cpp: Fix a typo throughout the file:
        fileIdentiferLength -> fileIdentifierLength
        (WebCore):
        (WebCore::WebVTTParser::parseBytes): Only continue with searcing for
        the WEBVTT identifier if there's enough data to possibly contain the
        identifier. Report that the file failed to parse if the identifier
        was then not found.
        (WebCore::WebVTTParser::hasRequiredFileIdentifier): Refactor to operate
        on the vector containing identifier data and merge with the
        hasLongWebVTTIdentifier function.
        * html/track/WebVTTParser.h:
        (WebVTTParserClient): Add a new method.
        (WebVTTParser):
        * loader/TextTrackLoader.cpp:
        (WebCore::TextTrackLoader::processNewCueData): Parser is now created
        immediately regardless of the mime type the response holds.
        (WebCore::TextTrackLoader::fileFailedToParse): Log the error, set the
        state to failed, start the cue load timer and cancel the load if the file
        was not parsed successfully.
        (WebCore):
        * loader/TextTrackLoader.h:
        (TextTrackLoader):

2012-04-05  Shawn Singh  <shawnsingh@chromium.org>

        [chromium] Need to clip to homogeneous w=0 plane when applying transforms.
        https://bugs.webkit.org/show_bug.cgi?id=80806

        Reviewed by Adrienne Walker.

        Unit tests added to CCLayerTreeHostCommon. This change is also
        covered by other existing unit tests and layout tests.

        WebCore TransformationMatrix mapRect / mapQuad / projectQuad do
        not properly handle the case where a surface is oriented partially
        behind the camera, with a perspective projection. In this case,
        projected points may appear to be valid in cartesian coordinates,
        but they are indeed not valid, and this problem can only be
        detected in homogeneous coordinates after applying the transform,
        before the divide-by-w step.

        The correct solution is to clip geometry where w < 0. This patch
        makes this change local to chromium only, to fix rendering bugs
        that arise from this problem. The primary fix is to correct
        calculateVisibleLayerRect(), but other ancillary locations are
        also fixed, in particular, the antialiasing code path is simply
        skipped when this case arises.

        Eventually this math needs to be merged into TransformationMatrix,
        to fix hit-testing bugs that occur in both Chromium and Safari.

        * WebCore.gypi:
        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::findTileProgramUniforms):
        (WebCore::LayerRendererChromium::drawTileQuad):
        * platform/graphics/chromium/cc/CCLayerTreeHostCommon.cpp:
        (WebCore::CCLayerTreeHostCommon::calculateVisibleRect):
        (WebCore::isScaleOrTranslation):
        (WebCore::calculateDrawTransformsAndVisibilityInternal):
        * platform/graphics/chromium/cc/CCMathUtil.cpp: Added.
        (WebCore):
        (WebCore::HomogeneousCoordinate::HomogeneousCoordinate):
        (HomogeneousCoordinate):
        (WebCore::HomogeneousCoordinate::shouldBeClipped):
        (WebCore::HomogeneousCoordinate::cartesianPoint2d):
        (WebCore::projectPoint):
        (WebCore::mapPoint):
        (WebCore::computeClippedPointForEdge):
        (WebCore::expandBoundsToIncludePoint):
        (WebCore::computeEnclosingRectOfClippedQuad):
        (WebCore::computeEnclosingRect):
        (WebCore::CCMathUtil::mapClippedRect):
        (WebCore::CCMathUtil::projectClippedRect):
        (WebCore::CCMathUtil::mapQuad):
        (WebCore::CCMathUtil::projectQuad):
        * platform/graphics/chromium/cc/CCMathUtil.h: Added.
        (WebCore):
        (CCMathUtil):
        * platform/graphics/chromium/cc/CCOcclusionTracker.cpp:
        (WebCore::computeUnoccludedContentRect):

2012-04-05  Jia Pu  <jpu@apple.com>

        Move correction panel related functions from EditorClient into separated AlternativeTextClient class.
        https://bugs.webkit.org/show_bug.cgi?id=82970

        Reviewed by Enrica Casucci.

        No new tests, since there's no change of functionality.

        The existing correction panel related functions in EditorClient are currently used only by OS X.
        We'd like to move them into separate AlternativeTextClient class to avoid using #ifdef's. This
        new client class will also hold dictation alternative related interface that we will add soon for
        bug 82503.

        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * editing/AlternativeTextController.cpp: Changes in this file are all for calling functions in
          AlternativeTextClient instead of those in EditoClient.
        (WebCore::AlternativeTextController::show):
        (WebCore::AlternativeTextController::dismiss):
        (WebCore::AlternativeTextController::dismissSoon):
        (WebCore::AlternativeTextController::respondToUnappliedSpellCorrection):
        (WebCore::AlternativeTextController::timerFired):
        (WebCore::AlternativeTextController::isAutomaticSpellingCorrectionEnabled):
        (WebCore::AlternativeTextController::alternativeTextClient):
        (WebCore):
        (WebCore::AlternativeTextController::editorClient):
        (WebCore::AlternativeTextController::textChecker):
        (WebCore::AlternativeTextController::recordAutocorrectionResponseReversed):
        (WebCore::AlternativeTextController::recordSpellcheckerResponseForModifiedCorrection):
        * editing/AlternativeTextController.h:
        (WebCore):
        (AlternativeTextController):
        * editing/TextCheckingHelper.h:
        (WebCore):
        * loader/EmptyClients.h:
        (EmptyEditorClient):
        * page/AlternativeTextClient.h: Added.
        (WebCore):
        (AlternativeTextClient):
        (WebCore::AlternativeTextClient::~AlternativeTextClient):
        * page/EditorClient.h:
        (EditorClient):
        * page/Page.cpp:
        (WebCore::Page::Page):
        (WebCore::Page::PageClients::PageClients):
        * page/Page.h:
        (WebCore):
        (PageClients):
        (Page):
        (WebCore::Page::alternativeTextClient):

2012-04-05  Min Qin  <qinmin@google.com>

        Fix fullscreen video button for android
        https://bugs.webkit.org/show_bug.cgi?id=83087

        Reviewed by Dimitri Glazkov.

        https://bugs.webkit.org/show_bug.cgi?id=70437 changed css keyword for fullscreen video button.
        It is changed from media-fullscreen-button to media-enter-fullscreen-button.
        However, it does not change the value in mediaControlChromiumAndroid.css.
        No behavior change.

        * css/mediaControlsChromiumAndroid.css:
        (video::-webkit-media-controls-fullscreen-button):

2012-04-05  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: CSS file revisions are not restored upon front-end reopen.
        https://bugs.webkit.org/show_bug.cgi?id=83292

        Reviewed by Yury Semikhatsky.

        Populating suggestions before the panel creation now.

        * inspector/front-end/inspector.js:
        (WebInspector._doLoadedDoneWithCapabilities.get if):

2012-04-04  Simon Fraser  <simon.fraser@apple.com>

        Add assertions to check for mutation of RenderLayer z-order lists during enumeration
        https://bugs.webkit.org/show_bug.cgi?id=83242

        Reviewed by James Robinson.

        Add debug-only code that detects whether RenderLayer's z-order and
        normal flow lists are being cleared or otherwise mutated while we're
        enumerating over them.

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::RenderLayer):
        (WebCore::RenderLayer::paintList):
        (WebCore::RenderLayer::calculateLayerBounds):
        (WebCore::RenderLayer::dirtyZOrderLists):
        (WebCore::RenderLayer::dirtyNormalFlowList):
        (WebCore::RenderLayer::updateZOrderListsSlowCase):
        (WebCore::RenderLayer::updateNormalFlowList):
        * rendering/RenderLayer.h:
        (RenderLayer):
        (WebCore::RenderLayer::layerListMutationAllowed):
        (WebCore::RenderLayer::setLayerListMutationAllowed):
        (WebCore):
        (LayerListMutationDetector):
        (WebCore::LayerListMutationDetector::LayerListMutationDetector):
        (WebCore::LayerListMutationDetector::~LayerListMutationDetector):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::hasVisibleNonCompositingDescendantLayers):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::addToOverlapMapRecursive):
        (WebCore::RenderLayerCompositor::computeCompositingRequirements):
        (WebCore::RenderLayerCompositor::rebuildCompositingLayerTree):
        (WebCore::RenderLayerCompositor::updateLayerTreeGeometry):
        (WebCore::RenderLayerCompositor::updateCompositingDescendantGeometry):
        (WebCore::RenderLayerCompositor::recursiveRepaintLayerRect):
        (WebCore::RenderLayerCompositor::layerHas3DContent):

2012-04-05  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r113254.
        http://trac.webkit.org/changeset/113254
        https://bugs.webkit.org/show_bug.cgi?id=83291

        Requested by sievers@chromium.org (Requested by zhenyao on
        #webkit).

        * platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:
        (WebCore::CCLayerTreeHostImpl::canDraw):

2012-04-05  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r113307.
        http://trac.webkit.org/changeset/113307
        https://bugs.webkit.org/show_bug.cgi?id=83288

        Requested by sievers@chromium.org (Requested by zhenyao on
        #webkit).

        * platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:
        (WebCore::CCLayerTreeHostImpl::canDraw):

2012-03-14  Antonio Gomes  <agomes@rim.com>

        Extend HitTestResult to support not "discarding" shadow content in favor of its DOM ancestor
        https://bugs.webkit.org/show_bug.cgi?id=80847

        Reviewed by David Hyatt.

        In order to improve touch precision on shadow tree content, patch
        extends the rect-hittest'ing system to allow shadow content
        to be stored as the rect-hittest result node list.

        Primary use cases are for this extension is making it easier to
        improve the clickability of default controls of <video> and <audio>
        elements.

        For the callee site, the use is simple: if shadow content in the rect-hittest
        result is desired, just add an extra 'AllowShadowContent' parameter at the creation
        of the HitTestResult object.

        Test: fast/dom/nodesFromRect-shadowContent.html

        * dom/Document.cpp:
        (WebCore::Document::nodesFromRect):
        * dom/Document.h:
        (Document):
        * page/EventHandler.cpp:
        (WebCore::EventHandler::hitTestResultAtPoint):
        * rendering/HitTestResult.cpp:
        (WebCore::HitTestResult::HitTestResult):
        (WebCore::HitTestResult::addNodeToRectBasedTestResult):
        * rendering/HitTestResult.h:
        (HitTestResult):
        (WebCore::HitTestResult::shadowContentFilterPolicy):
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::nodeAtPoint):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::hitTestLayer):
        (WebCore::RenderLayer::hitTestList):
        * testing/Internals.cpp:
        (WebCore::Internals::nodesFromRect):
        * testing/Internals.h:
        (Internals):
        * testing/Internals.idl:

2012-04-05  Hans Muller  <hmuller@adobe.com>

        Rename CSS Exclusions "rect" value to "rectangle"
        https://bugs.webkit.org/show_bug.cgi?id=82367

        Reviewed by Ryosuke Niwa.

        Changed the CSS exclusion shape called "rect" to "rectangle" to match
        the current draft spec - http://dev.w3.org/csswg/css3-exclusions.

        The meeting minutes where the decision to rename the exclusion "rect" function
        to "rectangle" are: http://lists.w3.org/Archives/Public/www-style/2012Feb/0325.html

        No new tests were created; just updated the existing ones.

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseWrapShapeRectangle):
        (WebCore::CSSParser::parseWrapShape):
        * css/CSSParser.h:
        * css/CSSWrapShapes.cpp:
        (WebCore::CSSWrapShapeRectangle::cssText):
        * css/CSSWrapShapes.h:
        (WebCore::CSSWrapShapeRectangle::create):
        (WebCore::CSSWrapShapeRectangle::type):
        (WebCore::CSSWrapShapeRectangle::CSSWrapShapeRectangle):

2012-04-05  Arvid Nilsson  <anilsson@rim.com>

        [BlackBerry] Disable paintingGoesToWindow() for the root layer when forced compositing mode is active
        https://bugs.webkit.org/show_bug.cgi?id=83127

        Reviewed by Rob Buis.

        RIM PR: 136381
        The BlackBerry port will use accelerated compositing code path to
        render the root layer in some situations.

        The plan is to do this by activating the "force compositing mode"
        setting, but that in itself doesn't get us all the way, since painting
        will still go to window for the root layer.

        Fixed by adding a special clause in
        RenderLayerBacking::paintingGoesToWindow() for PLATFORM(BLACKBERRY).

        No new tests, this is currently not testable with the BlackBerry WebKit
        testing infrastructure.

        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::paintingGoesToWindow):
        * rendering/RenderLayerCompositor.h:
        (RenderLayerCompositor):
        (WebCore::RenderLayerCompositor::inForcedCompositingMode): Added.

2012-04-05  Stephen Chenney  <schenney@chromium.org>

        REGRESSION(99539): Infinite repaint loop with SVGImage and deferred repaint timers
        https://bugs.webkit.org/show_bug.cgi?id=78315

        Reviewed by Dimitri Glazkov.

        The existing fix for this issue was failing to check if the frameView object
        was currently _in_ layout, in addition to whether it needs layout. Calling the
        redraw method while in layout leads to a debug assertion and potential infinite
        layout loops. Now we check whether we need layout or are in layout. We also add
        a check when the repaint timer fires to ensure we do not call redraw during layout
        at that point.

        This patch was tested with tens of thousands of runs on layout test cases that
        previously crashed at a rate of about 1 in 25. Now we see no crashes and no test
        failures.

        No new tests, as this exists to fix flaky existing tests.

        * svg/graphics/SVGImageCache.cpp:
        (WebCore::SVGImageCache::imageContentChanged):
        (WebCore::SVGImageCache::redrawTimerFired):

2012-04-05  Keishi Hattori  <keishi@webkit.org>

        Hide datalist element
        https://bugs.webkit.org/show_bug.cgi?id=82874

        The datalist element should be hidden when ENABLE_DATALIST is on.

        Reviewed by Kent Tamura.

        Tests: fast/forms/datalist/datalist-fallback-content-expected.html
               fast/forms/datalist/datalist-fallback-content.html

        * css/html.css:
        (datalist): Added display:none.

2012-04-05  W. James MacLean  <wjmaclean@chromium.org>

        Adjust max bisection search iterations for TouchpadFlingGestureCurve.
        https://bugs.webkit.org/show_bug.cgi?id=83166

        Reviewed by James Robinson.

        Covered by existing tests.

        * platform/TouchpadFlingPlatformGestureCurve.cpp:
        (WebCore):

2012-04-05  Peter Rybin  <peter.rybin@gmail.com>

        Web Inspector: CodeGeneratorInspector.py: switch FileSystem, Profiler and Worker domains to typed API
        https://bugs.webkit.org/show_bug.cgi?id=83069

        Reviewed by Yury Semikhatsky.

        Domains are switched to 'strict' mode. However, hardly any changes were needed in C++ code because
        only basic types are currently used in Inspector.json.

        * inspector/CodeGeneratorInspector.py:
        * inspector/InspectorProfilerAgent.cpp:
        (WebCore::InspectorProfilerAgent::getProfileHeaders):
        (WebCore):
        (WebCore::InspectorProfilerAgent::getObjectByHeapObjectId):
        * inspector/InspectorProfilerAgent.h:
        (InspectorProfilerAgent):

2012-04-05  Levi Weintraub  <leviw@chromium.org>

        DOM measurement APIs should operate on pixel snapped values.
        https://bugs.webkit.org/show_bug.cgi?id=83138

        Reviewed by Julien Chaffraix.

        DOM measurement APIs return unscaled integers. In an effort to return the best possible values (and
        most consistent with current behavior) when we use sub-pixel values for Layout, we want to adjust
        the actual on-screen position and size values for scaling, not the sub-pixel values.

        No new tests. No change in behavior.

        * dom/Element.cpp:
        (WebCore::adjustForLocalZoom): Needs to return an integer, since this is what the DOM API calls for.
        (WebCore::Element::offsetWidth): Using pixel snapped values for all the following functions.
        (WebCore::Element::offsetHeight):
        (WebCore::Element::clientLeft):
        (WebCore::Element::clientTop):
        (WebCore::Element::clientWidth):
        (WebCore::Element::clientHeight):
        * html/HTMLImageElement.cpp:
        (WebCore::HTMLImageElement::width):
        (WebCore::HTMLImageElement::height):

2012-04-05  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: add ability to copy resource URL from web inspector's resources page.
        https://bugs.webkit.org/show_bug.cgi?id=83175

        Reviewed by Yury Semikhatsky.

        Added requested context menu item.

        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.FrameResourceTreeElement.prototype._handleContextMenuEvent):

2012-04-04  Andrey Kosyakov  <caseq@chromium.org>

        Web Inspector: display frame duration instead of time ruler in Timeline panel's frame mode
        https://bugs.webkit.org/show_bug.cgi?id=83184

        Reviewed by Pavel Feldman.

        * inspector/front-end/TimelineFrameController.js:
        (WebInspector.TimelineFrameController): Maintain reference to TimelinePresentationModel
        (WebInspector.TimelineFrameController.prototype._flushFrame): Report frames to TimelinePresentationModel (only real ones)
        * inspector/front-end/TimelineGrid.js:
        (WebInspector.TimelineGrid.prototype.removeDividers): remove time marks/labels from upper time ruler
        * inspector/front-end/TimelineOverviewPane.js:
        (WebInspector.TimelineOverviewPane.prototype._updateEventDividers): Updated call site of createEventDivider
        * inspector/front-end/TimelinePanel.js:
        (WebInspector.TimelinePanel.prototype._updateEventDividers):
        (WebInspector.TimelinePanel.prototype._shouldShowFrames):
        (WebInspector.TimelinePanel.prototype._updateFrames): Frame bars rendering logic.
        (WebInspector.TimelinePanel.prototype._innerAddRecordToTimeline.addTimestampRecords): Do not keep frames in the panel any more.
        (WebInspector.TimelinePanel.prototype._innerAddRecordToTimeline):
        (WebInspector.TimelinePanel.prototype._refresh): Moved updateDividers() call here...
        (WebInspector.TimelinePanel.prototype._refreshRecords):  ... from here.
        * inspector/front-end/TimelinePresentationModel.js:
        (WebInspector.TimelinePresentationModel.createEventDivider): Use type & title, not entire record.
        (WebInspector.TimelinePresentationModel.prototype.frames): Maintain frames in the TimelinePresentationModel.
        (WebInspector.TimelinePresentationModel.prototype.reset): ditto.
        (WebInspector.TimelinePresentationModel.prototype.addFrame): ditto.
        (WebInspector.TimelinePresentationModel.Record): Fix title for timestamp events (drive by).
        * inspector/front-end/timelinePanel.css:
        (.timeline-frame-strip):

2012-04-05  MORITA Hajime  <morrita@google.com>

        IsCommentNode flags is a waste.
        https://bugs.webkit.org/show_bug.cgi?id=83251

        Reviewed by Ryosuke Niwa.

        Effectively nobody uses it. To save a precious NodeFlags bit, this
        change removes NodeFlags::IsCommentFlag and its companion mehtod
        Node::isCommentNode().

        No new tests. No behaviour change.

        * dom/CharacterData.h:
        (WebCore::CharacterData::CharacterData):
        * dom/Comment.cpp:
        (WebCore::Comment::Comment):
        * dom/Node.h:
        * rendering/RenderTreeAsText.cpp:
        (WebCore::getTagName):
        This was the only client of Node::isCommentNode(). Replaced it with nodeType() call.

2012-04-05  Hans Wennborg  <hans@chromium.org>

        webkit_unit_tests build fix.
        https://bugs.webkit.org/show_bug.cgi?id=83261

        Unreviewed, webkit_unit_tests buildfix.

        The CCLayerTreeHostTestEmptyContentsShouldNotDraw.runMultiThread test
        stopped working after r113254.

        Disable it for now.

        * platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:
        (WebCore::CCLayerTreeHostImpl::canDraw):

2012-04-05  Sudarsana Nagineni  <sudarsana.nagineni@linux.intel.com>

        [EFL] keycode translation is wrong for function keys
        https://bugs.webkit.org/show_bug.cgi?id=82738

        This patch fixes keycode translation for function keys.

        Reviewed by Philippe Normand.

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

        * platform/efl/EflKeyboardUtilities.cpp:
        (WebCore::createWindowsKeyMap):

2012-04-01  Nikolas Zimmermann  <nzimmermann@rim.com>

        Work around an entity parsing bug in libxml2 2.7.3 (supplied with Lion) and unskip tests
        https://bugs.webkit.org/show_bug.cgi?id=82577

        Reviewed by Filip Pizlo.

        Work-around entity expansion bug that affects several SVG tests on Lion.

        Sample test document which is currently broken:
        <?xml version="1.0" encoding="UTF-8"?>
        <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1 Basic//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-basic.dtd" [
        <!ENTITY Smile "<rect x='.5' y='.5' width='29' height='39' fill='black' stroke='red'/>">
        ]>

        <svg xmlns="http://www.w3.org/2000/svg">&Smile;</svg>

        The expanded rect carries no namespace, thus an Element will be created for it, instead of a SVGRectElement.
        libxml2 2.7.4 fixed this bug (https://bugzilla.gnome.org/show_bug.cgi?id=502960) in 2009 already, but Lion
        still ships with 2.7.3, so we need to find a work-around for the problem. It works like this:
        - When an entity is requested (getEntityHandler) determine whether the entity is being declared (while the <!ENTITY.. parses)
          or wheter its references (when the &Smile; is parsed). If its referenced, record the current depth of the libxml2 parser.
        - When startElementNs is called while we're expanding entities, be sure to transfer the namespace of the parent node
          to the new node, but only do this if the current depth() is greater than the depth() at the time where entity expansion started.
          This way we only apply our workaround for elements inside entities, that get expanded at the insertion point.
        - When endElementNs is called, and our current depth() is less than our equal to the depth() where entity expansion started,
          clear the recorded detph(), and stop executing the workaround.

        It requires storing an extra integer & boolean in XMLDocumentParser, which is only used for this work-around.

        * xml/parser/XMLDocumentParser.h:
        (XMLDocumentParser):
        (WebCore::XMLDocumentParser::isParsingEntityDeclaration):
        (WebCore::XMLDocumentParser::setIsParsingEntityDeclaration):
        (WebCore::XMLDocumentParser::depthTriggeringEntityExpansion):
        (WebCore::XMLDocumentParser::setDepthTriggeringEntityExpansion):
        * xml/parser/XMLDocumentParserLibxml2.cpp:
        (WebCore::XMLDocumentParser::XMLDocumentParser):
        (WebCore::hackAroundLibXMLEntityParsingBug):
        (WebCore::XMLDocumentParser::startElementNs):
        (WebCore::XMLDocumentParser::endElementNs):
        (WebCore::entityDeclarationHandler):
        (WebCore::getEntityHandler):
        (WebCore::XMLDocumentParser::initializeParserContext):

2012-04-04  Kent Tamura  <tkent@chromium.org>

        Add JavaScript and CSS code for the calendar picker implementation
        https://bugs.webkit.org/show_bug.cgi?id=83011

        Reviewed by Hajime Morita.

        Add calendarPicker.js and calendarPicker.css, and add a build rule to
        generate a C++ file. This change doesn't make any behavior change
        because the code is wrapped by ENABLE(CALENDAR_PICKER).

        Tests: ManualTests/forms/calendar-picker.html

        * Resources/calendarPicker.css: Added.
        * Resources/calendarPicker.js: Added.
        * WebCore.gyp/WebCore.gyp: Generate CalendarPicker.{cpp,h} from calendarPicker.{css,js}.

2012-04-05  Kinuko Yasuda  <kinuko@chromium.org>

        Expose DataTransferItem.getAsEntry() to allow users access dropped files as FileEntry
        https://bugs.webkit.org/show_bug.cgi?id=82592

        Reviewed by David Levin.

        For now the method is prefixed thus it is to be exposed as 'webkitGetAsEntry'.

        The API is proposed and discussed in the following whatwg thread:
        http://lists.whatwg.org/pipermail/whatwg-whatwg.org/2011-November/033814.html

        Add DataTransferItemFilesystem under Modules/filesystem and implemented the bridging part for chromium.

        Test: editing/pasteboard/data-transfer-items-drag-drop-entry.html

        * Modules/filesystem/DataTransferItemFileSystem.h: Added.
        (DataTransferItemFileSystem):
        * Modules/filesystem/DataTransferItemFileSystem.idl: Added for DataTransferItem.getAsEntry which is only exposed if filesystem is enabled.
        * Modules/filesystem/chromium/DataTransferItemFileSystemChromium.cpp: Added for chromium implementation.
        * Modules/filesystem/chromium/DataTransferItemFileSystemChromium.h: Added.
        * Modules/filesystem/chromium/DraggedIsolatedFileSystem.cpp: Added.
        * Modules/filesystem/chromium/DraggedIsolatedFileSystem.h: Added.
        * WebCore.gypi:
        * platform/chromium/ChromiumDataObject.cpp:
        * platform/chromium/ChromiumDataObject.h:
        (WebCore::ChromiumDataObject::filesystemId): Added.
        (WebCore::ChromiumDataObject::setFilesystemId): Added.
        * platform/chromium/ClipboardChromium.cpp:

2012-04-04  Patrick Gansterer  <paroga@webkit.org>

        Add WTF::getCurrentLocalTime()
        https://bugs.webkit.org/show_bug.cgi?id=83164

        Reviewed by Alexey Proskuryakov.

        Replace the calls to WTF::getLocalTime() with time(0) with the new function.
        This allows us to use Win32 API on windows to get the same result in a next step.

        * html/FTPDirectoryDocument.cpp:
        (WebCore::processFileDateString):
        * loader/archive/mhtml/MHTMLArchive.cpp:
        (WebCore::MHTMLArchive::generateMHTMLData):

2012-04-04  Hayato Ito  <hayato@chromium.org>

        Remove ReifiedTreeTraversal.
        https://bugs.webkit.org/show_bug.cgi?id=83110

        Reviewed by Dimitri Glazkov.

        We can now remove ReifiedTreeTraversal. All clients have switched to use ComposedShadowTreeWalker.

        No new tests. No change in functionality.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.exp.in:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/ReifiedTreeTraversal.cpp: Removed.
        * dom/ReifiedTreeTraversal.h: Removed.
        * testing/Internals.cpp:
        * testing/Internals.h:
        (Internals):
        * testing/Internals.idl:

2012-04-04  Dmitry Lomov  <dslomov@google.com>

        WorkerEventQueue::close might access deleted WorkerEventQueue::EventDispatcherTask.
        https://bugs.webkit.org/show_bug.cgi?id=83202

        On closing the event queue, WorkerEventQueue cancels all the tasks associated with events.
        The tasks in their turn delete themselves from the map whenever task gets executed.
        However if shutdown occurs when task is in queue but before task gets executed, the task will be deleted without execution.
        This patch makes sure that no deleted tasks stay in WorkerEventQueue, by task removing itself in destructor.

        Reviewed by David Levin.

        Covered by existing tests.

        * workers/WorkerEventQueue.cpp:
        (WebCore::WorkerEventQueue::EventDispatcherTask::~EventDispatcherTask):
        (WorkerEventQueue::EventDispatcherTask):
        (WebCore::WorkerEventQueue::EventDispatcherTask::performTask):

2012-04-04  Julien Chaffraix  <jchaffraix@webkit.org>

        RenderLayer scrollbars' updates should be split between layout induced and style change induced
        https://bugs.webkit.org/show_bug.cgi?id=83213

        Reviewed by Simon Fraser.

        Refactoring only, no change in behavior.

        This patches splits up the 2 reasons for modifying the scrollbars:
        - style updates, handled in updateScrollbarsAfterStyleChange.
        - layout time, handled in updateScrollbarsAfterLayout.

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::contentsSize):
        Removed now unneeded const-casts.

        (WebCore::RenderLayer::setHasHorizontalScrollbar):
        (WebCore::RenderLayer::setHasVerticalScrollbar):
        Updated to use hasHorizontalScrollbar / hasVerticalScrollbar.

        (WebCore::RenderLayer::scrollWidth):
        (WebCore::RenderLayer::scrollHeight):
        Made those functions |const|.

        (WebCore::RenderLayer::computeScrollDimensions):
        Removed the unneeded booleans and move the do-we-have-overflow-logic
        into hasHorizontalOverflow and hasVerticalOverflow.

        (WebCore::RenderLayer::hasHorizontalOverflow):
        (WebCore::RenderLayer::hasVerticalOverflow):
        Added those new helper functions.

        (WebCore::RenderLayer::updateScrollbarsAfterLayout):
        (WebCore::RenderLayer::updateScrollInfoAfterLayout):
        Updated the latter to call the former.

        (WebCore::RenderLayer::updateScrollbarsAfterStyleChange):
        (WebCore::RenderLayer::styleChanged):
        Ditto.

        (WebCore::overflowCanHaveAScrollbar):
        Add this helper function for updateScrollbarsAfterStyleChange.

        * rendering/RenderLayer.h:
        (WebCore::RenderLayer::hasHorizontalScrollbar):
        (WebCore::RenderLayer::hasVerticalScrollbar):
        Added those 2 new helper functions.

2012-04-04  Andrei Burago  <aburago@chromium.org>

        Auto-size may not work on first load
        https://bugs.webkit.org/show_bug.cgi?id=82989

        Reviewed by David Levin.

        No new tests. The only known repro scenario involves using chrome with a third-party extension,
        which makes making a test out of it problematic.

        * dom/Document.cpp:
        (WebCore::Document::implicitClose):
        * page/FrameView.cpp:
        (WebCore::FrameView::autoSizeIfEnabled):

2012-04-04  Adam Barth  <abarth@webkit.org>

        XSSAuditor doesn't catch injected srcdoc attributes
        https://bugs.webkit.org/show_bug.cgi?id=83238

        Reviewed by Daniel Bates.

        <iframe srcdoc> is an XSS injection vector because the srcdoc inherits
        the security origin of the parent page.  This patch updates the XSS
        auditor to check whether the attribute is injected using the same
        hueristics we use for inline event handlers.

        Test: http/tests/security/xssAuditor/iframe-srcdoc.html

        * html/parser/XSSAuditor.cpp:
        (WebCore::XSSAuditor::filterIframeToken):
        (WebCore::XSSAuditor::eraseDangerousAttributesIfInjected):
        (WebCore::XSSAuditor::eraseAttributeIfInjected):
        (WebCore::XSSAuditor::decodedSnippetForAttribute):
        * html/parser/XSSAuditor.h:

2012-04-04  Leo Yang  <leo.yang@torchmobile.com.cn>

        [BlackBerry] Add local: protocol support in KURL for blackberry
        https://bugs.webkit.org/show_bug.cgi?id=82695

        Reviewed by Rob Buis.

        BlackBerry porting is using local: protocol just as file: protocol
        with the exception that it sandboxes the path to the application private space.

        * platform/KURL.cpp:
        (WebCore::KURL::parse):
        (WebCore::portAllowed):

2012-04-04  Simon Fraser  <simon.fraser@apple.com>

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

        Reviewed by James Robinson.
        
        Fix an issue when removing elements with reflections from the document.

        Test: compositing/reflections/remove-reflection.html

        * platform/graphics/GraphicsLayer.cpp:
        (WebCore::GraphicsLayer::willBeDestroyed):

2012-04-04  Charles Wei  <charles.wei@torchmobile.com.cn>

        Need using namespace std for system calls in MIMESniffing.cpp
        https://bugs.webkit.org/show_bug.cgi?id=82706

        Reviewed by Antonio Gomes.

        No new tests, just fix the compile error for BlackBerry porting.

        * platform/network/MIMESniffing.cpp:

2012-04-04  Greg Billock  <gbillock@google.com>

        Switch web intents API to be vendor-prefixed
        https://bugs.webkit.org/show_bug.cgi?id=83172

        Reviewed by Adam Barth.

        * Modules/intents/DOMWindowIntents.idl:
        * Modules/intents/NavigatorIntents.cpp:
        (WebCore::NavigatorIntents::webkitStartActivity):
        * Modules/intents/NavigatorIntents.h:
        (NavigatorIntents):
        * Modules/intents/NavigatorIntents.idl:

2012-04-04  Alexis Menard  <alexis.menard@openbossa.org>

        [Part 4] We should use CSSPropertyID rather than integers when manipulating CSS property ids.
        https://bugs.webkit.org/show_bug.cgi?id=83224

        Reviewed by Tony Chang.

        CSSPropertyID enum holds all the CSS property ids but many parts of WebKit treat the ids
        as integers. While it's not incorrect it is nicer to use the enum as a parameter of
        functions manipulating property ids, as we ensure that the value passed will be an
        existing value. This patch clean up some remaining part of code.

        No new tests : There should be no behavior change in this patch.

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::collectMatchingRulesForList):
        * page/animation/AnimationBase.h:
        (WebCore::AnimationBase::affectsProperty):
        (WebCore::AnimationBase::isAnimatingProperty):
        * page/animation/CompositeAnimation.cpp:
        (WebCore::CompositeAnimation::getAnimationForProperty):
        (WebCore::CompositeAnimation::overrideImplicitAnimations):
        (WebCore::CompositeAnimation::resumeOverriddenImplicitAnimations):
        (WebCore::CompositeAnimation::isAnimatingProperty):
        * page/animation/CompositeAnimation.h:
        (CompositeAnimation):
        * page/animation/ImplicitAnimation.cpp:
        (WebCore::ImplicitAnimation::affectsProperty):
        * page/animation/ImplicitAnimation.h:
        (WebCore::ImplicitAnimation::transitionProperty):
        (WebCore::ImplicitAnimation::animatingProperty):
        (ImplicitAnimation):
        * page/animation/KeyframeAnimation.cpp:
        (WebCore::KeyframeAnimation::fetchIntervalEndpointsForProperty):
        (WebCore::KeyframeAnimation::hasAnimationForProperty):
        (WebCore::KeyframeAnimation::overrideAnimations):
        (WebCore::KeyframeAnimation::resumeOverriddenAnimations):
        (WebCore::KeyframeAnimation::affectsProperty):
        * page/animation/KeyframeAnimation.h:
        (KeyframeAnimation):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::transitionPaused):
        (WebCore::RenderLayerBacking::transitionFinished):
        (WebCore::RenderLayerBacking::graphicsLayerToCSSProperty):
        (WebCore::RenderLayerBacking::cssToGraphicsLayerProperty):
        * rendering/RenderLayerBacking.h:
        (RenderLayerBacking):

2012-04-04  Rafael Weinstein  <rafaelw@chromium.org>

        [MutationObservers] implement takeRecords()
        https://bugs.webkit.org/show_bug.cgi?id=83218

        Reviewed by Ojan Vafai.

        This patch implements MutationObserver.takeRecords per the DOM4 spec.
        takeRecords retrieves and clears any pending mutation records for
        the observer.

        Test: fast/mutation/takeRecords.html

        * dom/WebKitMutationObserver.cpp:
        (WebCore::WebKitMutationObserver::takeRecords):
        (WebCore):
        (WebCore::WebKitMutationObserver::deliver):
        * dom/WebKitMutationObserver.h:
        * dom/WebKitMutationObserver.idl:

2012-04-04  Shinya Kawanaka  <shinyak@chromium.org>

        Shadow DOM is exposed in JS.
        https://bugs.webkit.org/show_bug.cgi?id=82607

        Reviewed by Hajime Morita.

        DOMSelection didn't consider nested shadow trees. This patch makes DOMSelection
        take nested shadow trees into account.

        To test that the element is not in a shadow tree, Internals has a treeScopeRootNode method
        which returns the root node of the belonging tree scope.

        Test: fast/dom/shadow/selection-shouldnt-expose-shadow-dom.html

        * WebCore.exp.in:
        * page/DOMSelection.cpp:
        (WebCore::selectionShadowAncestor):
        (WebCore):
        * testing/Internals.cpp:
        (WebCore::Internals::treeScopeRootNode):
        (WebCore):
        * testing/Internals.h:
        (Internals):
        * testing/Internals.idl:

2012-04-04  Luke Macpherson  <macpherson@chromium.org>

        Replace further usage of int with CSSPropertyID.
        https://bugs.webkit.org/show_bug.cgi?id=83119

        Reviewed by Simon Fraser.

        No new tests / no functionality changed.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::logUnimplementedPropertyID):
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        * css/CSSGrammar.y:
        * css/CSSParser.cpp:
        (WebCore::CSSParser::CSSParser):
        * css/CSSParser.h:
        (CSSParser):
        (WebCore::ShorthandScope::~ShorthandScope):
        * css/CSSProperty.h:
        (WebCore::CSSProperty::CSSProperty):
        * css/SVGCSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getSVGPropertyCSSValue):
        * css/StylePropertySet.h:
        (StylePropertySet):
        * css/makeprop.pl:
        * dom/StyledElement.h:
        (StyledElement):
        * editing/EditingStyle.h:
        (EditingStyle):
        * html/HTMLElement.h:
        (HTMLElement):

2012-04-04  Adam Klein  <adamk@chromium.org>

        Use PassRefPtr in V8DOMWrapper interface to avoid explicit ref() calls
        https://bugs.webkit.org/show_bug.cgi?id=82238

        Reviewed by Adam Barth.

        Relanding r112163 without modification, as it still seems valid.
        Will watch Chrome Canaries closely for any memory issues.

        The setJSWrapper* methods previously featured a comment that asked
        callers to ref the objects before passing them in. This change makes
        that contract explicit (and allows the removal of the comment).

        In addition, for ConstructorCallbacks, this change slightly reduces
        refcount churn by passing on the initial ref via RefPtr::release().

        No new tests, no change in behavior.

        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateConstructorCallback): Use RefPtr::release() to avoid refcount churn and remove explicit ref() call.
        (GenerateNamedConstructorCallback): ditto.
        * bindings/v8/V8DOMWindowShell.cpp:
        (WebCore::V8DOMWindowShell::installDOMWindow): Cast to a PassRefPtr and remove explicit ref call.
        * bindings/v8/V8DOMWrapper.cpp:
        (WebCore::V8DOMWrapper::setJSWrapperForDOMNode): Pass leaked refs into the DOMNodeMaps.
        * bindings/v8/V8DOMWrapper.h:
        (V8DOMWrapper): Make the setJSWrapperFor* methods take PassRefPtr<T>.
        (WebCore::V8DOMWrapper::setJSWrapperForDOMObject): Pass leaked ref into the DOMObjectMap.
        (WebCore::V8DOMWrapper::setJSWrapperForActiveDOMObject): Pass leaked ref into the ActiveDOMObjectMap.
        * bindings/v8/V8Proxy.h:
        (WebCore::toV8): Remove explicit ref.
        * bindings/v8/WorkerContextExecutionProxy.cpp:
        (WebCore::WorkerContextExecutionProxy::initContextIfNeeded): Cast to a PassRefPTr and remove explicit ref call.
        * bindings/v8/custom/V8HTMLImageElementConstructor.cpp:
        (WebCore::v8HTMLImageElementConstructorCallback): Use RefPtr::release() to avoid refcount churn and remove explicit ref.
        * bindings/v8/custom/V8WebKitMutationObserverCustom.cpp:
        (WebCore::V8WebKitMutationObserver::constructorCallback): ditto.
        * bindings/v8/custom/V8WebSocketCustom.cpp:
        (WebCore::V8WebSocket::constructorCallback): ditto.
        * bindings/v8/custom/V8XMLHttpRequestConstructor.cpp:
        (WebCore::V8XMLHttpRequest::constructorCallback): ditto.

2012-04-04  Chris Rogers  <crogers@google.com>

        WaveTable::waveDataForFundamentalFrequency() should properly interpret negative frequency
        https://bugs.webkit.org/show_bug.cgi?id=83228

        Reviewed by Kenneth Russell.

        * Modules/webaudio/WaveTable.cpp:
        (WebCore::WaveTable::waveDataForFundamentalFrequency):

2012-04-04  Adam Klein  <adamk@chromium.org>

        Delay post-insertion notifications until new DOM tree is complete
        https://bugs.webkit.org/show_bug.cgi?id=82631

        Reviewed by Ojan Vafai.

        When inserting a DocumentFragment, WebKit previously would update both
        internal WebCore state and mutation event listeners after each node
        was inserted. This is inconsistent not only with DOM4, but also
        with (at least) Firefox and IE. Given the many bugs over the years in
        WebKit due to this behavior, it seems better to delay notification
        until the fragment is completely inserted.

        The changes to the three core mutation methods below are similar:
        the only logic remaining in the loop is checking that insertion is
        possible and taking care of that insertion. The entire loop is then
        wrapped in forbidEventDispatch/allowEventDispatch, effectively
        asserting that none of the code inside will have side effects.

        The one bit of logic added to the loop is resizing the targets
        vector down to the set of nodes actually inserted as part of the
        loop. This makes it possible to simply pass the vector on to
        notifyChildrenInserted without having to also pass along a count of
        actually-inserted nodes.

        As for the code that used to live inside the loop that could have
        side-effects, or depended on those side-effects, it has been moved
        out, either above (the check that the refChild is still valid in
        insertBefore) or after (the calls to notifyChildrenInserted).

        Finally, it was necessary to retrofit ChildListMutationScope to take a
        vector of added nodes instead of a single node at a time, due to the
        assertions in isAddedNodeInOrder (now renamed to be plural). Note that
        there is now a single call to ChildListMutationScope::childrenAdded,
        inside notifyChildrenInserted.

        Test: fast/events/domnodeinserted-entire-fragment.html

        * dom/ChildListMutationScope.cpp:
        (ChildListMutationScope::MutationAccumulator): Renamed method to be plural.
        (WebCore::ChildListMutationScope::MutationAccumulator::areAddedNodesInOrder): Handle a NodeVector instead of a Node.
        (WebCore::ChildListMutationScope::MutationAccumulator::childrenAdded): Handle adding a NodeVector instead of a Node.
        (WebCore::ChildListMutationScope::MutationAccumulationRouter::childrenAdded): Renamed to be plural, pass NodeVector through.
        * dom/ChildListMutationScope.h:
        (WebCore::ChildListMutationScope::childrenAdded): ditto.
        (MutationAccumulationRouter):
        * dom/ContainerNode.cpp:
        (WebCore): Renamed updateTreeAfterInsertion to notifyChildrenInserted.
        (WebCore::ContainerNode::insertBefore): See main ChangeLog explanation.
        (WebCore::ContainerNode::replaceChild): ditto.
        (WebCore::ContainerNode::appendChild): ditto.
        (WebCore::dispatchChildInsertionEvents): Remove MutationObserver handling.
        (WebCore::notifyChildrenInserted): Handle a NodeVector of all inserted children,
        and take on responsiblity for MutationObserver handling as well as dispatchSubtreeModifiedEvent.

2012-04-04  Chris Rogers  <crogers@google.com>

        RealtimeAnalyserNode should support smaller analysis sizes
        https://bugs.webkit.org/show_bug.cgi?id=83215

        Reviewed by Kenneth Russell.
        
        RealtimeAnalyserNode analysis size currently goes no lower than 128.
        It is useful to support lower power-of-two sizes.
        Decrease this limit to 32.

        Updated webaudio/realtimeanalyser-fft-sizing-expected.txt

        * Modules/webaudio/RealtimeAnalyser.cpp:
        (WebCore):

2012-04-04  Tony Chang  <tony@chromium.org>

        CSS transitions should work on the flex property
        https://bugs.webkit.org/show_bug.cgi?id=75915

        Reviewed by Dean Jackson.

        Test: transitions/flex-transitions.html

        * page/animation/AnimationBase.cpp:
        (WebCore::PropertyWrapperGetter::equals): Fix indention.
        (PropertyWrapperFlex): Add a wrapper for -webkit-flex which has 3 values (two floats and
        a length), but is not a shorthand.
        (WebCore::PropertyWrapperFlex::PropertyWrapperFlex):
        (WebCore::PropertyWrapperFlex::equals):
        (WebCore::PropertyWrapperFlex::blend):
        (WebCore):
        (WebCore::AnimationBase::ensurePropertyMap):

2012-04-04  Tom Sepez  <tsepez@chromium.org>

        XSSAuditor bypass through HTTP Parameter Pollution.
        https://bugs.webkit.org/show_bug.cgi?id=81283

        Reviewed by Adam Barth.

        Deal with concatenation of multiple parameters via comma-splicing that 
        is common to some webservers. We can no longer trust that all of the 
        attributes of a reflected script tag, nor the reflected script itself,
        came from the same single URL parameter. The fix is to take commas into
        account when trucating the snippet used for matching.
        
        Test: http/tests/security/xssAuditor/script-tag-with-comma.html

        * html/parser/XSSAuditor.cpp:
        (WebCore::XSSAuditor::filterScriptToken):
        (WebCore):
        (WebCore::XSSAuditor::decodedSnippetForName):
        (WebCore::XSSAuditor::decodedSnippetForJavaScript):

2012-04-04  Dan Bernstein  <mitz@apple.com>

        Paginated webviews render nothing in their gutters
        https://bugs.webkit.org/show_bug.cgi?id=83231

        Reviewed by Adele Peterson.

        When the RenderView has columns, nothing draws in the gutters.

        * page/FrameView.cpp:
        (WebCore::FrameView::paintContents): Paint the background color behind everything when
        paginated.

2012-04-04  Mark Pilgrim  <pilgrim@chromium.org>

        Call histogramEnumeration directly
        https://bugs.webkit.org/show_bug.cgi?id=83106

        Reviewed by Adam Barth.

        Part of a refactoring project to remove the PlatformSupport
        abstraction from some functions. See bug 82948.

        * bindings/v8/custom/V8InspectorFrontendHostCustom.cpp:
        (WebCore::histogramEnumeration):
        * platform/chromium/HistogramSupportChromium.cpp:
        (WebCore::HistogramSupport::histogramEnumeration):
        * platform/chromium/PlatformSupport.h:
        (PlatformSupport):

2012-04-04  Zhenyao Mo  <zmo@google.com>

        Unreviewed, GPU bots build fix.

        Commited on behalf of sievers@chromium.org.

        * platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:
        (WebCore::CCLayerTreeHostImpl::canDraw):

2012-04-04  Abhishek Arya  <inferno@chromium.org>

        Add helpers to create anonymous table parts.
        https://bugs.webkit.org/show_bug.cgi?id=83116

        Reviewed by Julien Chaffraix.

        The patch introduces helpers to create anonymous table parts by
        introducing a new static function createAnonymousWithParentRenderer.
        The function builds a new anonymous wrapper of the same type as the class,
        inheriting style properties from parent and sets a display based on
        argument/default values. Also we streamline the RenderBlock functions
        to match this naming convention.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::createAnonymousBlockWithSameTypeAs):
        (WebCore::RenderBlock::createAnonymousWithParentRendererAndDisplay):
        (WebCore):
        (WebCore::RenderBlock::createAnonymousColumnsWithParentRendererAndDisplay):
        (WebCore::RenderBlock::createAnonymousColumnSpanWithParentRendererAndDisplay):
        * rendering/RenderBlock.h:
        (RenderBlock):
        (WebCore::RenderBlock::createAnonymousBlock):
        (WebCore::RenderBlock::createAnonymousColumnsBlock):
        (WebCore::RenderBlock::createAnonymousColumnSpanBlock):
        * rendering/RenderButton.cpp:
        (WebCore::RenderButton::addChild):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::addChild):
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::addChild):
        (WebCore::RenderTable::createAnonymousWithParentRendererAndDisplay):
        (WebCore):
        * rendering/RenderTable.h:
        (RenderTable):
        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::createAnonymousWithParentRendererAndDisplay):
        (WebCore):
        * rendering/RenderTableCell.h:
        (RenderTableCell):
        * rendering/RenderTableRow.cpp:
        (WebCore::RenderTableRow::addChild):
        (WebCore::RenderTableRow::createAnonymousWithParentRendererAndDisplay):
        (WebCore):
        * rendering/RenderTableRow.h:
        (RenderTableRow):
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::addChild):
        (WebCore::RenderTableSection::createAnonymousWithParentRendererAndDisplay):
        (WebCore):
        * rendering/RenderTableSection.h:
        (RenderTableSection):

2012-04-04  Erik Arvidsson  <arv@chromium.org>

        [V8] Add a per context data store and use that for caching boiler plates as well as constructor functions
        https://bugs.webkit.org/show_bug.cgi?id=83093

        Reviewed by Adam Barth.

        This introduces a V8BindingPerContextData class. After creating a new v8::Context we also create a new
        per context data instance. This instance maintains the boiler plate and constructor caches. V8DOMWrapper
        now delegates the caching to this new class. Previously the caching was only done in V8DOMWindowShell which
        made workers and isolated worlds behave slightly different.

        Tests: fast/dom/constructor-proto.html
               fast/workers/constructor-proto.html

        * WebCore.gypi:
        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateConstructorGetter): Renamed getConstructor to constructorForType.
        * bindings/v8/V8BindingPerContextData.cpp: Added.
        (WebCore):
        (WebCore::V8BindingPerContextData::dispose): This clears the persistent handles stored in the maps.
        (WebCore::V8BindingPerContextData::init): This installs the hidden prototype which is used as the
        [[Prototype]] for the constructor functions (for HotMail compat).
        (WebCore::V8BindingPerContextData::createWrapperFromCacheSlowCase): Instantiates a new object and
        stores it in the boilerplate map, and returns a clone.
        (WebCore::V8BindingPerContextData::constructorForTypeSlowCase): Creates the function for the constructor
        and stores it in the constructor map.
        * bindings/v8/V8BindingPerContextData.h: Added.
        (WebCore):
        (V8BindingPerContextData):
        (WebCore::V8BindingPerContextData::create):
        (WebCore::V8BindingPerContextData::~V8BindingPerContextData):
        (WebCore::V8BindingPerContextData::createWrapperFromCache): Checks the cache and clones the wrapper in
        the cache. If no boiler plate exists one is created and cached.
        (WebCore::V8BindingPerContextData::constructorForType): If the constructor already exists the cached
        constructor function is returned, otherwise a new constructor function is created and cached.
        (WebCore::V8BindingPerContextData::V8BindingPerContextData):
        * bindings/v8/V8DOMWindowShell.cpp:
        (WebCore::V8DOMWindowShell::disposeContextHandles): Clear the per context data when disposing the handles.
        (WebCore::V8DOMWindowShell::initContextIfNeeded): Create and initialize the per context data.
        (WebCore::V8DOMWindowShell::installDOMWindow):
        * bindings/v8/V8DOMWindowShell.h:
        (V8DOMWindowShell):
        (WebCore::V8DOMWindowShell::perContextData):
        * bindings/v8/V8DOMWrapper.cpp:
        (WebCore::V8DOMWrapper::constructorForType): Static method to get the constructor. The per context data
        is determined based on the type of the parameters.
        (WebCore):
        (WebCore::V8DOMWrapper::perContextData):
        (WebCore::V8DOMWrapper::instantiateV8Object): Use the per context data to unify the code paths.
        * bindings/v8/V8DOMWrapper.h:
        (WebCore):
        (V8DOMWrapper):
        * bindings/v8/V8IsolatedContext.cpp:
        (WebCore::V8IsolatedContext::V8IsolatedContext): Create and initialize the per context data.
        (WebCore::V8IsolatedContext::destroy): Clear the per context data.
        * bindings/v8/V8IsolatedContext.h:
        (WebCore):
        (WebCore::V8IsolatedContext::perContextData):
        (V8IsolatedContext):
        * bindings/v8/V8Proxy.cpp:
        (WebCore::V8Proxy::retrievePerContextData):
        (WebCore):
        * bindings/v8/V8Proxy.h:
        (WebCore):
        (V8Proxy):
        * bindings/v8/WorkerContextExecutionProxy.cpp:
        (WebCore::WorkerContextExecutionProxy::dispose): Clear the per context data
        (WebCore::WorkerContextExecutionProxy::initContextIfNeeded): Create and initialize the per context data.
        * bindings/v8/WorkerContextExecutionProxy.h:
        (WebCore):
        (WebCore::WorkerContextExecutionProxy::perContextData):
        (WorkerContextExecutionProxy):

2012-04-04  Shawn Singh  <shawnsingh@chromium.org>

        [chromium] Move recursive renderSurface clearing to CCLayerTreeHostImpl
        https://bugs.webkit.org/show_bug.cgi?id=82091

        Reviewed by James Robinson.

        No new tests needed, minor refactoring covered by existing tests.

        This patch is just a minor cleanup, moving clearRenderSurfacesOnCCLayerImplRecursive()
        from LayerRendererChromium to CCLayerTreeHostImpl. It makes more sense to place the code
        there, so that LayerRendererChromium is more like a blind utility for drawing things
        while CCLayerTreeHostImpl actually manages the state of the resources.

        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::beginDrawingFrame):
        * platform/graphics/chromium/LayerRendererChromium.h:
        (LayerRendererChromium):
        * platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:
        (WebCore::CCLayerTreeHostImpl::~CCLayerTreeHostImpl):
        (WebCore::CCLayerTreeHostImpl::initializeLayerRenderer):
        (WebCore::CCLayerTreeHostImpl::sendDidLoseContextRecursive):
        (WebCore::CCLayerTreeHostImpl::clearRenderSurfacesOnCCLayerImplRecursive):
        (WebCore):
        * platform/graphics/chromium/cc/CCLayerTreeHostImpl.h:
        (WebCore::CCLayerTreeHostImpl::rootLayer):
        (CCLayerTreeHostImpl):

2012-04-04  Chris Rogers  <crogers@google.com>

        Web Audio should use MutexTryLocker class
        https://bugs.webkit.org/show_bug.cgi?id=83194

        Reviewed by Kenneth Russell.

        Switch existing Web Audio code from directly calling tryLock() on a Mutex to use a MutexTryLocker.
        No new tests since it is a low-level threading primitive and is difficult to test.
        Existing Web Audio tests continue to test the process() methods affected.

        * Modules/webaudio/AudioBufferSourceNode.cpp:
        (WebCore::AudioBufferSourceNode::process):
        * Modules/webaudio/AudioParamTimeline.cpp:
        (WebCore::AudioParamTimeline::valuesForTimeRange):
        * Modules/webaudio/ConvolverNode.cpp:
        (WebCore::ConvolverNode::process):
        * Modules/webaudio/MediaElementAudioSourceNode.cpp:
        (WebCore::MediaElementAudioSourceNode::process):
        * Modules/webaudio/Oscillator.cpp:
        (WebCore::Oscillator::process):
        * Modules/webaudio/WaveShaperProcessor.cpp:
        (WebCore::WaveShaperProcessor::process):

2012-04-04  Raphael Kubo da Costa  <rakuco@webkit.org>

        [CSS] Make makevalues.pl and makeprop.pl ignore '#'s.
        https://bugs.webkit.org/show_bug.cgi?id=83212

        Reviewed by Tony Chang.

        This patch is a side-effect of my intentions to make the
        CMake-based ports work with GCC 4.7 without changing the
        parameters currently passed to the preprocessor. "-P" is always
        being passed to the preprocessor, but this breaks
        dom/make_names.pl due to GCC not outputting empty lines with "-P"
        anymore; if I switch to never passing "-P" (my aim), the CSS
        scripts currently break because of the additional lines output by
        the preprocessor. InFilesParser.pm and make-css-file-array.pl
        already skip lines which start with '#', for example.

        No new tests, tools plumbing.

        * css/makeprop.pl:
        * css/makevalues.pl:

2012-04-04  Min Qin  <qinmin@google.com>

        Disable fancy upsampling and dithering for decoding jpeg on android
        https://bugs.webkit.org/show_bug.cgi?id=83196

        Reviewed by Kenneth Russell.

        Dithering and fancy upsampling are currently disabled for chrome on android.
        This gives us about 20% performance improvement.
        Since the screen of mobile devices is small, impact on image quality is limited.
        This change does not introduce any changes on other platforms.

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

2012-04-04  Daniel Sievers  <sievers@chromium.org>

        [Chromium] Always skip draw and readback if there is nothing
        to draw.
        https://bugs.webkit.org/show_bug.cgi?id=82680

        This avoids corruption from pushing frames that have no valid
        content drawn into them.
        Also in addition to checking for non-existing root layers, check
        for root layers with no content bounds. It's possible to see those
        with kForceCompositing mode for empty documents.

        Reviewed by James Robinson.

        Added CCLayerTreeHostTestEmptyContentsShouldNotDraw.

        * platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:
        (WebCore::CCLayerTreeHostImpl::canDraw):
        (WebCore::CCLayerTreeHostImpl::prepareToDraw):
        * platform/graphics/chromium/cc/CCThreadProxy.cpp:
        (WebCore::CCThreadProxy::scheduledActionDrawAndSwapInternal):

2012-03-15  Jer Noble  <jer.noble@apple.com>

        Full Screen mode should cancel before navigation.
        https://bugs.webkit.org/show_bug.cgi?id=81295

        Reviewed by Anders Carlsson.

        No new tests; protect against speculative crasher when a bad client calls the below
        functions at inopportune times.

        Check that the document is not either detached or in the page cache, and if so, bail out
        early:
        * dom/Document.cpp:
        (WebCore::Document::webkitWillEnterFullScreenForElement):
        (WebCore::Document::webkitDidEnterFullScreenForElement):
        (WebCore::Document::webkitWillExitFullScreenForElement):
        (WebCore::Document::webkitDidExitFullScreenForElement):

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

        Fix getFilterOutsets parameter types in RenderLayer
        https://bugs.webkit.org/show_bug.cgi?id=83041

        Reviewed by Julien Chaffraix.

        The getFilterOutsets method was changed to take integers in r112475, update
        RenderLayer to use the right data type for the outset arguments.

        No new tests, no change in functionality.

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::setFilterBackendNeedsRepaintingInRect):
        (WebCore::RenderLayer::calculateLayerBounds):

2012-04-04  Erik Arvidsson  <arv@chromium.org>

        Rebaseline binding tests.

        Unreviewed.

        * bindings/scripts/test/V8/V8TestInterface.cpp:
        (WebCore::V8TestInterface::constructorCallback):
        * bindings/scripts/test/V8/V8TestNamedConstructor.cpp:
        (WebCore::V8TestNamedConstructorConstructorCallback):
        * bindings/scripts/test/V8/V8TestObj.cpp:
        (WebCore::V8TestObj::constructorCallback):
        * bindings/scripts/test/V8/V8TestSerializedScriptValueInterface.cpp:
        (WebCore::V8TestSerializedScriptValueInterface::constructorCallback):

2012-04-04  Dmitry Lomov  <dslomov@google.com>

        [JSC] ArrayBufferView and its ArrayBuffer are appended to object pool in wrong order
        https://bugs.webkit.org/show_bug.cgi?id=82090
        The implementation of structured cloning algorithm (http://www.w3.org/TR/html5/common-dom-interfaces.html#internal-structured-cloning-algorithm)
        in SerializedScriptValue.cpp assigns numerical identifiers to encontered objects as it traverses
        the cloned object during serialization.
        When the cloning encounters an already seen object, it transfers the assigned numerical id
        instead of cloning the object again. Deserialization process then repeats the process in 
        the mirror fashion, i.e. on deserializing the object it assigns deserialized object a numeric id and if it
        deserializes the id it substitutes the perviously deserialized objects. It is critical that serialization and deserialization
        assigns numeric ids in the same order.

        The bug (discovered by Yong Li) is that when serializing ArrayBufferView, the ids were assigned first to 
        the ArrayBufferView and then to underlying ArrayBuffer; however on deserialization the ids were assigned another way round.

        This patch fixes that by assigning the id first to ArrayBuffer and then to ArrayBufferView, and adds corresponding test cases.

        Reviewed by Kenneth Russell.

        New test cases added to fast/canvas/web-gl/array-message-passing.html.

        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::CloneSerializer::checkForDuplicate):
        (CloneSerializer):
        (WebCore::CloneSerializer::recordObject):
        (WebCore::CloneSerializer::startObjectInternal):
        (WebCore::CloneSerializer::dumpIfTerminal):

2012-04-04  Ian Vollick  <vollick@chromium.org>

        [chromium] When setting animation started events, should check the root layer
        https://bugs.webkit.org/show_bug.cgi?id=83060

        Reviewed by Adrienne Walker.

        No new tests.

        * platform/graphics/chromium/cc/CCLayerTreeHost.cpp:
        (WebCore::CCLayerTreeHost::animateLayers):
        (WebCore::CCLayerTreeHost::animateLayersRecursive):
        (WebCore::CCLayerTreeHost::setAnimationEventsRecursive):

2012-04-04  Adam Klein  <adamk@chromium.org>

        Web Inspector: break on DOM node insertion only once per operation, not once per inserted node
        https://bugs.webkit.org/show_bug.cgi?id=82967

        Reviewed by Ojan Vafai.

        This change affects the case where a DocumentFragment is inserted,
        rather than a single node. This is most common when using innerHTML:
        the effect of the change is that inserting, e.g., '<input><input>',
        the SubtreeModified breakpoint will be hit once, rather than twice
        (once for each input element). Given that the particular node being
        inserted wasn't exposed as part of the breakpoint, this seems strictly
        better.

        Now that the call to willInsertDOMNode is outside the loop, there's
        not an obvious node to pass in as the new child. Luckily, InspectorDOMDebuggerAgent
        already ignored that argument, so it's simply been removed from the signature.

        This changes paves the way to do only tree-modification work, and no
        external notifications, inside the loops in appendChild/insertBefore/replaceChild.

        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::insertBefore): Hoisted call to willInsertDOMNode out of loop.
        (WebCore::ContainerNode::replaceChild): ditto.
        (WebCore::ContainerNode::appendChild): ditto.
        * inspector/InspectorDOMDebuggerAgent.cpp:
        (WebCore::InspectorDOMDebuggerAgent::willInsertDOMNode): Removed first argument (now takes only the parent).
        * inspector/InspectorDOMDebuggerAgent.h:
        (InspectorDOMDebuggerAgent):
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::willInsertDOMNodeImpl): Removed second argument.
        * inspector/InspectorInstrumentation.h:
        (InspectorInstrumentation):
        (WebCore::InspectorInstrumentation::willInsertDOMNode): Removed second argument.

2012-04-04  Jeffrey Pfau  <jpfau@apple.com>

        Move pending sheet removal from ~HTMLLinkElement to removal from document.
        https://bugs.webkit.org/show_bug.cgi?id=69184

        Reviewed by Adam Barth.

        Test: fast/html/pending-stylesheet-crash.html

        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::~HTMLLinkElement):
        (WebCore::HTMLLinkElement::removedFromDocument):

2012-04-04  Mark Pilgrim  <pilgrim@chromium.org>

        Call histogramCustomCounts directly
        https://bugs.webkit.org/show_bug.cgi?id=83112

        Reviewed by Adam Barth.

        * platform/chromium/PlatformSupport.h:
        (PlatformSupport):
        * platform/graphics/chromium/ContentLayerChromium.cpp:
        (WebCore::ContentLayerPainter::paint):
        * platform/graphics/chromium/cc/CCOverdrawMetrics.cpp:
        (WebCore::CCOverdrawMetrics::recordMetricsInternal):

2012-04-04  Alexis Menard  <alexis.menard@openbossa.org>

        Animation related classes should use CSSPropertyID rather than integers when manipulating CSS property ids.
        https://bugs.webkit.org/show_bug.cgi?id=83050

        Reviewed by Simon Fraser.

        Split the concept of animate none and animate all into a separate function rather than using the property member
        with some magic value set on it. Make also sure that we use CSSPropertyID all over the place rather than integers.
        We still have some place where convert from int to CSSPropertyID (mostly due to the fact that we need to make Hash*
        related classes to handle CSSPropertyID). While refactoring I also removed some dead code.

        No new tests : not behaviour changes intented.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        * css/CSSStyleApplyProperty.cpp:
        (WebCore::ApplyPropertyAnimation::applyInheritValue):
        (WebCore::CSSStyleApplyProperty::CSSStyleApplyProperty):
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::collectMatchingRulesForList):
        * page/animation/AnimationBase.cpp:
        (WebCore):
        (WebCore::PropertyWrapperBase::PropertyWrapperBase):
        (WebCore::PropertyWrapperBase::property):
        (PropertyWrapperBase):
        (WebCore::PropertyWrapperGetter::PropertyWrapperGetter):
        (WebCore::PropertyWrapper::PropertyWrapper):
        (WebCore::RefCountedPropertyWrapper::RefCountedPropertyWrapper):
        (WebCore::StyleImagePropertyWrapper::StyleImagePropertyWrapper):
        (WebCore::PropertyWrapperColor::PropertyWrapperColor):
        (WebCore::PropertyWrapperShadow::PropertyWrapperShadow):
        (WebCore::PropertyWrapperMaybeInvalidColor::PropertyWrapperMaybeInvalidColor):
        (WebCore::PropertyWrapperVisitedAffectedColor::PropertyWrapperVisitedAffectedColor):
        (WebCore::FillLayersPropertyWrapper::FillLayersPropertyWrapper):
        (WebCore::ShorthandPropertyWrapper::ShorthandPropertyWrapper):
        (WebCore::PropertyWrapperSVGPaint::PropertyWrapperSVGPaint):
        (WebCore::wrapperForProperty):
        (WebCore::AnimationBase::propertiesEqual):
        The code removed here could never be reached. propertiesEqual is used only in CompositeAnimation::updateTransitions and through
        ImplicitAnimation::isTargetPropertyEqual which is also called in CompositeAnimation. Both calls are protected by an ASSERT in
        CompositeAnimation:116 where we make sure the property id we're dealing with is a valid property id, therefore prop can't be equal to
        the old value cAnimateAll or even the new mode concept introduced in that patch can't be AnimateAll.
        (WebCore::AnimationBase::getPropertyAtIndex):
        (WebCore::AnimationBase::blendProperties):
        (WebCore::AnimationBase::animationOfPropertyIsAccelerated):
        (WebCore::gatherEnclosingShorthandProperties):
        (WebCore::AnimationBase::animatableShorthandsAffectingProperty):
        * page/animation/AnimationBase.h:
        (AnimationBase):
        * page/animation/CompositeAnimation.cpp:
        (WebCore::CompositeAnimation::updateTransitions):
        (WebCore::CompositeAnimation::pauseTransitionAtTime):
        * page/animation/CompositeAnimation.h:
        (CompositeAnimation):
        * page/animation/ImplicitAnimation.cpp:
        (WebCore::ImplicitAnimation::ImplicitAnimation):
        (WebCore::ImplicitAnimation::sendTransitionEvent):
        The check removed is useless as ImplicitAnimation constructor ensure via an ASSERT that the animatingProperty value is a correct and valid
        property id. Even the old code was ensuring the value of animatingProperty was different from cAnimateAll at construction time. As stated also
        in CompositeAnimation::updateTransitions and cover by the same ASSERT explained earlier, ImplicitAnimation are constructed for valid property ids.
        (WebCore::ImplicitAnimation::isTargetPropertyEqual):
        (WebCore::ImplicitAnimation::blendPropertyValueInStyle):
        * page/animation/ImplicitAnimation.h:
        (WebCore::ImplicitAnimation::create):
        (ImplicitAnimation):
        * page/animation/KeyframeAnimation.cpp:
        (WebCore::KeyframeAnimation::animate):
        (WebCore::KeyframeAnimation::getAnimatedStyle):
        (WebCore::KeyframeAnimation::timeToNextService):
        * platform/animation/Animation.cpp:
        (WebCore::Animation::Animation):
        (WebCore::Animation::operator=):
        (WebCore::Animation::animationsMatch):
        * platform/animation/Animation.h:
        (WebCore::Animation::property):
        (WebCore::Animation::animationMode):
        (WebCore::Animation::setProperty):
        (WebCore::Animation::setAnimationMode):
        (Animation):
        (WebCore::Animation::initialAnimationProperty):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::startTransition):
        * rendering/RenderLayerBacking.h:
        (RenderLayerBacking):
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::transitionForProperty):
        * rendering/style/RenderStyle.h:

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

        Fix usage of LayoutUnits and snapping for scrolling in RenderBox
        https://bugs.webkit.org/show_bug.cgi?id=83073

        Reviewed by Eric Seidel.

        Fix usage of LayoutUnits and snapping/rounding logic in RenderBox.

        No new tests, no change in functionality.

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::scrollWidth):
        Change scrollWidth to properly pixel snap values.
        
        (WebCore::RenderBox::scrollHeight):
        Change scrollHeight to properly pixel snap values.
        
        (WebCore::RenderBox::scrolledContentOffset):
        Change to return IntSize to match function definition.
        
        (WebCore::RenderBox::cachedSizeForOverflowClip):
        Changed cachedSizeForOverflowClip to LayoutSize as the overflow and clip
        rects all have subpixel precision.

        * rendering/RenderBox.h:
        (WebCore::RenderBox::pixelSnappedWidth):
        (WebCore::RenderBox::pixelSnappedHeight):
        Removed FIXME comment as the implementation 
        
        (WebCore::RenderBox::minYLayoutOverflow):
        (WebCore::RenderBox::maxYLayoutOverflow):
        (WebCore::RenderBox::minXLayoutOverflow):
        (WebCore::RenderBox::maxXLayoutOverflow):
        Added static_cast for border values.
        
        (WebCore::RenderBox::hasVisualOverflow):
        Changed to compare two pixel snapped values as we don't want to indicate
        overflow in cases where the the size is rounded down resulting in no
        visual overflow.

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

        Fix types for location, size and rect calculations for render objects
        https://bugs.webkit.org/show_bug.cgi?id=83089

        Reviewed by Eric Seidel.

        Fix usage of LayoutUnits and rounding for a couple of different render
        object classes.

        No new tests, no change in functionality.

        * rendering/RenderDetailsMarker.cpp:
        (WebCore::RenderDetailsMarker::getPath):
        Change getPath to take a LayoutPoint as the transform has subpixel
        precision already.
        
        * rendering/RenderFlowThread.cpp:
        (WebCore::RenderFlowThread::computeLogicalHeight):
        Change logicalHeight to LayoutUnit as it is computed from subpixel
        values.
        
        * rendering/RenderInputSpeech.cpp:
        (WebCore::RenderInputSpeech::paintInputFieldSpeechButton):
        Change button rect computation to LayoutRect and pixel snap just before
        painting to preserve precision.
        
        * rendering/RenderLineBoxList.cpp:
        (WebCore::RenderLineBoxList::rangeIntersectsRect):
        (WebCore::RenderLineBoxList::lineIntersectsDirtyRect):
        (WebCore::RenderLineBoxList::paint):
        Change range calculations to LayoutUnits to preserve precision.
        
        * rendering/RenderMarquee.cpp:
        (WebCore::RenderMarquee::computePosition):
        Change width calculations to LayoutUnits to preserve precision.
        
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::layoutCaption):
        Change table captions to LayoutUnits as the values are computed from
        subpixel componenets.
        
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::getRoundedBorderFor):
        Snap border rect as RoundedRects use ints for crisp rendering.
        
        * rendering/style/ShadowData.cpp:
        (WebCore::ShadowData::adjustRectForShadow):
        Change adjustRectForShadow to take a LayoutRect as it already uses
        LayoutUnits.
        
2012-04-04  Emil A Eklund  <eae@chromium.org>

        Convert RootInlineBox to LayoutUnits in preparation for turning on subpixel layout
        https://bugs.webkit.org/show_bug.cgi?id=83054

        Reviewed by Eric Seidel.

        Convert RootInlineBox over to LayoutUnits, this mostly involves updating
        the alignment and adjustment code to be subpixel aware. 

        No new tests, no change in functionality.

        * rendering/RootInlineBox.cpp:
        (WebCore::RootInlineBox::alignBoxesInBlockDirection):
        Change beforeAnnotationsAdjustment to LayoutUnit.
        
        (WebCore::RootInlineBox::beforeAnnotationsAdjustment):
        Change method to return LayoutUnit as it is computed from values with
        subpixel precision.
        
        (WebCore::RootInlineBox::lineSnapAdjustment):
        Round values before computing remainder.

        (WebCore::RootInlineBox::ascentAndDescentForBox):
        Change ascent and decent calculation to use LayoutUnits as they are
        computed from values with subpixel precision.
        
        (WebCore::RootInlineBox::verticalPositionForBox):
        Change verticalPosition to LayoutUnit.
        
        * rendering/RootInlineBox.h:
        (RootInlineBox):

2012-04-05  Joseph Pecoraro  <pecoraro@apple.com>

        <http://webkit.org/b/83108> Web Inspector: JSC Crash inspecting node with object event listener

        Reviewed by Geoff Garen.

        * bindings/js/ScriptEventListener.cpp:
        (WebCore::eventListenerHandlerLocation):
        Use jsDynamicCast to bail when the JSObject is not a JSFunction.

2012-04-04  Mark Pilgrim  <pilgrim@chromium.org>

        Call suddenTerminationChanged directly
        https://bugs.webkit.org/show_bug.cgi?id=83114

        Reviewed by Adam Barth.

        * platform/chromium/PlatformSupport.h:
        (PlatformSupport):
        * platform/chromium/SuddenTerminationChromium.cpp:
        (WebCore::disableSuddenTermination):
        (WebCore::enableSuddenTermination):

2012-04-04  Adam Barth  <abarth@webkit.org>

        figure out how to export webcore symbols from webkit.dll properly
        https://bugs.webkit.org/show_bug.cgi?id=83105

        Reviewed by Dimitri Glazkov.

        * WebCore.gypi:
            - Separate the platform support files into a new GYP variable so
              that they can be build as part of webkit.dll rather than in
              webcore_platform.lib. Building them as part of webkit.dll ensure
              that the symbols marked for export will actually be in webkit.dll
              (and hence exported), even if nothing else in webkit.dll
              references the obj file that contains the symbol.
        * platform/chromium/support/WebMediaStreamSourcesRequest.cpp:
            - Unwind our ugly, ugly hack to make the Windows component build
              work.

2012-04-04  Mark Pilgrim  <pilgrim@chromium.org>

        Call sandboxEnabled directly
        https://bugs.webkit.org/show_bug.cgi?id=83113

        Reviewed by Adam Barth.

        * platform/chromium/PlatformSupport.h:
        (PlatformSupport):

2012-04-04  Peter Rybin  <peter.rybin@gmail.com>

        Web Inspector: CodeGeneratorInspector.py: switch IndexedDB, DOMStorage, ApplicationCache domains to typed API
        https://bugs.webkit.org/show_bug.cgi?id=83039

        Reviewed by Pavel Feldman.

        Client code is switched to typed API (all InspectorObject and InspectorArray types are
        replaced with generated types from TypeBuilder according to Inspector.json).

        Missing array of array specialization is added. Inspector.json is fixed to comform
        with actual behavior of InspectorDOMStorageAgent.

        Output parameter initialization is assured.

        * inspector/CodeGeneratorInspector.py:
        * inspector/Inspector.json:
        * inspector/InspectorApplicationCacheAgent.cpp:
        (WebCore::InspectorApplicationCacheAgent::getFramesWithManifests):
        (WebCore::InspectorApplicationCacheAgent::getApplicationCacheForFrame):
        (WebCore::InspectorApplicationCacheAgent::buildObjectForApplicationCache):
        * inspector/InspectorApplicationCacheAgent.h:
        (InspectorApplicationCacheAgent):
        * inspector/InspectorDOMStorageAgent.cpp:
        (WebCore::InspectorDOMStorageAgent::getDOMStorageEntries):
        (WebCore::InspectorDOMStorageAgent::setDOMStorageItem):
        (WebCore::InspectorDOMStorageAgent::removeDOMStorageItem):
        * inspector/InspectorDOMStorageAgent.h:
        (InspectorDOMStorageAgent):
        * inspector/InspectorDOMStorageResource.cpp:
        (WebCore::InspectorDOMStorageResource::bind):

2012-04-04  Tony Chang  <tony@chromium.org>

        Remove flex function css parsing
        https://bugs.webkit.org/show_bug.cgi?id=83083

        Reviewed by Ojan Vafai.

        The flexbox spec switched from using a flex() function on the width
        and height to a css property. Now that the -webkit-flex: has been
        implemented, we can remove the flex() function code.

        No new tests. Removing an old test that used to test the flex() function.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSAllInOne.cpp:
        * css/CSSFlexValue.cpp: Removed.
        * css/CSSFlexValue.h: Removed.
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):
        (WebCore::CSSParser::parseFlex):
        * css/CSSParser.h:
        (WebCore):
        * css/CSSStyleApplyProperty.cpp:
        (WebCore::ApplyPropertyLength::applyValue):
        (WebCore::CSSStyleApplyProperty::CSSStyleApplyProperty):
        * css/CSSValue.cpp:
        (WebCore::CSSValue::cssText):
        (WebCore::CSSValue::destroy):
        * css/CSSValue.h:
        * rendering/style/RenderStyle.h:
        * rendering/style/StyleFlexibleBoxData.cpp:
        (WebCore::StyleFlexibleBoxData::StyleFlexibleBoxData):
        (WebCore::StyleFlexibleBoxData::operator==):
        * rendering/style/StyleFlexibleBoxData.h:

2012-04-04  Kausalya Madhusudhanan  <kmadhusu@chromium.org>

        [Coverity] Address some uninit constructor values.
        https://bugs.webkit.org/show_bug.cgi?id=82424

        Reviewed by Stephen White.

        New tests are not required since I did not modify any code behavior. I just initialized the class member variables in the constructor.

        * Modules/gamepad/Gamepad.cpp:
        (WebCore::Gamepad::Gamepad):
        * accessibility/AccessibilitySpinButton.cpp:
        (WebCore::AccessibilitySpinButtonPart::AccessibilitySpinButtonPart):
        * dom/WheelEvent.cpp:
        (WebCore::WheelEvent::WheelEvent):
        * html/canvas/WebGLContextObject.h:
        (WebGLContextObject):
        * platform/PlatformTouchPoint.h:
        (WebCore::PlatformTouchPoint::PlatformTouchPoint):
        * platform/graphics/chromium/cc/CCPageScaleAnimation.cpp:
        (WebCore::CCPageScaleAnimation::CCPageScaleAnimation):
        * platform/graphics/chromium/cc/CCRenderSurface.cpp:
        (WebCore::CCRenderSurface::CCRenderSurface):
        * xml/parser/MarkupTokenBase.h:
        (WebCore::AtomicMarkupTokenBase::AtomicMarkupTokenBase):

2012-04-04  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: expose savedURL, setToolbarColors and toggleSearchingForNode in InspectorFrontendAPI
        https://bugs.webkit.org/show_bug.cgi?id=83170

        Reviewed by Yury Semikhatsky.

        Chromium port is calling these from the embedder layer and they all are perfect candidates
        for the InspectorFrontendAPI. Adding them there.

        * inspector/front-end/InspectorFrontendAPI.js:
        (InspectorFrontendAPI.enterInspectElementMode):
        (InspectorFrontendAPI.savedURL):
        (InspectorFrontendAPI.setToolbarColors):

2012-04-04  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: linearise aggregate's retaining size calculation.
        https://bugs.webkit.org/show_bug.cgi?id=83125

        This version is twice as fast as the original and it is non-recursive.

        Reviewed by Yury Semikhatsky.

        * inspector/front-end/HeapSnapshot.js:
        (WebInspector.HeapSnapshot.prototype._getDominatedIndex): was moved closer to it's usage
        (WebInspector.HeapSnapshot.prototype._calculateClassesRetainedSize): it was _buildAggregates' inner function forDominatedNodes.
        it was:
        a) extracted from _buildAggregates;
        b) made non-recursive;
        c) many getters were inlined;
        d) subarray of dominating nodes were inlined too.
        (WebInspector.HeapSnapshot.prototype._buildAggregates): many getters were inlined.
        (WebInspector.HeapSnapshot.prototype.aggregates):

2012-04-04  Allan Sandfeld Jensen  <allan.jensen@nokia.com>

        Best clickable node might return non "clickable" node. 
        https://bugs.webkit.org/show_bug.cgi?id=83153

        Reviewed by Kenneth Rohde Christiansen.

        Do not return non-clickable nodes as a best clickable node.

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

2012-04-04  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: migrate from InspectorFrontendHost.saveAs to InspectorFrontendHost.save.
        https://bugs.webkit.org/show_bug.cgi?id=83162

        Reviewed by Yury Semikhatsky.

        This change adds Save item into the context menus for inspector. It also makes
        saveAs parameter optional in the InspectorFrontendHost.save so that we could
        skip the dialog for the paths that were already saved. Embedder tells the front-end
        what urls were successfully saved so that front-end could issue subsequent save commands
        for those files.

        * English.lproj/localizedStrings.js:
        * inspector/InspectorFrontendClient.h:
        (InspectorFrontendClient):
        * inspector/InspectorFrontendClientLocal.h:
        (WebCore::InspectorFrontendClientLocal::canSave):
        (WebCore::InspectorFrontendClientLocal::save):
        * inspector/InspectorFrontendHost.cpp:
        (WebCore::InspectorFrontendHost::canSave):
        (WebCore::InspectorFrontendHost::save):
        * inspector/InspectorFrontendHost.h:
        (InspectorFrontendHost):
        * inspector/InspectorFrontendHost.idl:
        * inspector/front-end/InspectorFrontendHostStub.js:
        (.WebInspector.InspectorFrontendHostStub.prototype.canSave):
        * inspector/front-end/JavaScriptSourceFrame.js:
        * inspector/front-end/NetworkPanel.js:
        (WebInspector.NetworkLogView.prototype._contextMenu):
        (WebInspector.NetworkLogView.prototype._exportAll):
        (WebInspector.NetworkLogView.prototype._exportResource):
        * inspector/front-end/ResourceView.js:
        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.FrameResourceTreeElement.prototype._appendSaveAsAction.doSave):
        (WebInspector.FrameResourceTreeElement.prototype._appendSaveAsAction.save):
        (WebInspector.FrameResourceTreeElement.prototype._appendSaveAsAction):
        (WebInspector.ResourceRevisionTreeElement.prototype._handleContextMenuEvent.doSave):
        (WebInspector.ResourceRevisionTreeElement.prototype._handleContextMenuEvent.save):
        (WebInspector.ResourceRevisionTreeElement.prototype._handleContextMenuEvent):
        * inspector/front-end/Settings.js:
        * inspector/front-end/SourceFrame.js:
        (WebInspector.TextViewerDelegateForSourceFrame.prototype.populateTextAreaContextMenu):
        * inspector/front-end/TextViewer.js:
        (WebInspector.TextViewer.prototype._contextMenu):
        (WebInspector.TextViewer.prototype._commitEditing):
        (WebInspector.TextViewerDelegate.prototype.populateTextAreaContextMenu):
        * inspector/front-end/TimelineModel.js:
        (WebInspector.TimelineModel.prototype.saveToFile):
        * inspector/front-end/TimelinePanel.js:
        (WebInspector.TimelinePanel.prototype._registerShortcuts):
        (WebInspector.TimelinePanel.prototype._contextMenu):
        * inspector/front-end/inspector.js:

2012-04-04  Andrey Kosyakov  <caseq@chromium.org>

        Web Inspector: time dividers are incorrectly rendered on empty timeline grid
        https://bugs.webkit.org/show_bug.cgi?id=83165

        Reviewed by Pavel Feldman.

        * inspector/front-end/NetworkPanel.js:
        (WebInspector.NetworkBaseCalculator.prototype.setDisplayWindow):
        * inspector/front-end/TimelineGrid.js:
        (WebInspector.TimelineGrid.prototype.updateDividers):

2012-04-04  Sergio Villar Senin  <svillar@igalia.com>

        [GTK] ASSERT in SocketStreamHandleSoup.cpp
        https://bugs.webkit.org/show_bug.cgi?id=83123

        Reviewed by Martin Robinson.

        Do not try to reuse a GOwnPtr as calling outPtr() causes an
        assertion if the pointer is already valid. Also do not try to
        close the IOStream if it was not created.

        This patch fixes
        http/tests/websocket/tests/hybi/workers/worker-reload.html but I
        am leaving it skipped until webkit.org/b/83124 is fixed.

        * platform/network/soup/SocketStreamHandleSoup.cpp:
        (WebCore::connectedCallback):

2012-04-04  Alexis Menard  <alexis.menard@openbossa.org>

        Re-add variable names in CSS related headers to help understanding the meaning of them.
        https://bugs.webkit.org/show_bug.cgi?id=83151

        Reviewed by Andreas Kling.

        r112952, r113031, r113042 removed variable names in some places but at the end it
        was better before as it helps understanding what the variables represent. This patch
        address this issue and add back the names where it makes sense.

        No new tests : cosmetic changes, no behavior change here.

        * css/CSSParser.h:
        (CSSParser):
        * css/StylePropertySet.h:
        (StylePropertySet):
        * dom/StyledElement.h:
        (StyledElement):
        * editing/EditingStyle.h:
        (EditingStyle):
        * editing/Editor.h:
        (Editor):
        * html/HTMLElement.h:
        (HTMLElement):

2012-04-04  Nikolas Zimmermann  <nzimmermann@rim.com>

        Implement animatedPathSegList support for SVGPathElement
        https://bugs.webkit.org/show_bug.cgi?id=83140

        Reviewed by Zoltan Herczeg.

        Add the last missing piece of animVal support: animations of the SVGPathElement's 'd' attribute
        should be reflected in the 'animatedPathSegList' not the 'pathSegList'.

        The SVGAnimatedPathAnimator is special as it doesn't operate on the SVGPathSegList types
        directly, but on the SVGPathByteStreams for performance reasons. The SVGPathSegLists
        are refcounted and exposed to JS, thus require lots of memory, compared to a simple
        byte stream, which SVGPathByteStream is. Only build an 'animatedPathSegList' while
        animating if its actually observed by the bindings, as this operation is heavy.

        This marks the finish of the animVal patch series: no more string round trips during
        animation. Previously paths were animated as byte streams, then converted to a String
        passed to pathElement->setAttribute("d", "newString"), parsed again to a byte stream, etc.

        A follow-up patch will remove the last crufts of direct setAttribute() animation.

        Extend all existing animated SVGPathElement tests to cover animatedPathSegList.

        * svg/SVGAnimatedColor.h:
        (WebCore::SVGAnimatedColorAnimator::startAnimValAnimation):
        (WebCore::SVGAnimatedColorAnimator::stopAnimValAnimation):
        (WebCore::SVGAnimatedColorAnimator::resetAnimValToBaseVal):
        (WebCore::SVGAnimatedColorAnimator::animValWillChange):
        (WebCore::SVGAnimatedColorAnimator::animValDidChange):
        (SVGAnimatedColorAnimator):
        * svg/SVGAnimatedPath.cpp:
        (WebCore::SVGAnimatedPathAnimator::constructFromString):
        (WebCore::SVGAnimatedPathAnimator::startAnimValAnimation):
        (WebCore):
        (WebCore::SVGAnimatedPathAnimator::stopAnimValAnimation):
        (WebCore::SVGAnimatedPathAnimator::resetAnimValToBaseVal):
        (WebCore::SVGAnimatedPathAnimator::animValWillChange):
        (WebCore::SVGAnimatedPathAnimator::animValDidChange):
        (WebCore::SVGAnimatedPathAnimator::calculateAnimatedValue):
        * svg/SVGAnimatedPath.h:
        (SVGAnimatedPathAnimator):
        * svg/SVGAnimatedType.cpp:
        (WebCore::SVGAnimatedType::valueAsString):
        (WebCore::SVGAnimatedType::setValueAsString):
        (WebCore::SVGAnimatedType::supportsAnimVal):
        * svg/SVGAnimatedTypeAnimator.h:
        (SVGAnimatedTypeAnimator):
        (WebCore::SVGAnimatedTypeAnimator::findAnimatedPropertiesForAttributeName):
        * svg/SVGPathElement.cpp:
        (WebCore::SVGPathElement::SVGPathElement):
        (WebCore::SVGPathElement::getTotalLength):
        (WebCore::SVGPathElement::getPointAtLength):
        (WebCore::SVGPathElement::getPathSegAtLength):
        (WebCore::SVGPathElement::parseAttribute):
        (WebCore::SVGPathElement::svgAttributeChanged):
        (WebCore::SVGPathElement::pathByteStream):
        (WebCore):
        (WebCore::SVGPathElement::lookupOrCreateDWrapper):
        (WebCore::SVGPathElement::pathSegList):
        (WebCore::SVGPathElement::animatedPathSegList):
        (WebCore::SVGPathElement::pathSegListChanged):
        * svg/SVGPathElement.h:
        (WebCore):
        (SVGPathElement):
        (WebCore::SVGPathElement::isAnimValObserved):
        * svg/SVGPathParserFactory.cpp:
        (WebCore::SVGPathParserFactory::buildSVGPathByteStreamFromSVGPathSegList):
        (WebCore::SVGPathParserFactory::buildSVGPathByteStreamFromString):
        (WebCore::SVGPathParserFactory::buildAnimatedSVGPathByteStream):
        * svg/SVGPathParserFactory.h:
        (SVGPathParserFactory):
        * svg/SVGPathSegWithContext.h:
        * svg/properties/SVGAnimatedListPropertyTearOff.h:
        (SVGAnimatedListPropertyTearOff):
        (WebCore::SVGAnimatedListPropertyTearOff::baseVal):
        (WebCore::SVGAnimatedListPropertyTearOff::animVal):
        (WebCore::SVGAnimatedListPropertyTearOff::removeItemFromList):
        (WebCore::SVGAnimatedListPropertyTearOff::detachListWrappers):
        (WebCore::SVGAnimatedListPropertyTearOff::currentAnimatedValue):
        (WebCore::SVGAnimatedListPropertyTearOff::animationStarted):
        (WebCore::SVGAnimatedListPropertyTearOff::animationEnded):
        (WebCore::SVGAnimatedListPropertyTearOff::synchronizeWrappersIfNeeded):
        * svg/properties/SVGAnimatedPathSegListPropertyTearOff.h:
        (WebCore::SVGAnimatedPathSegListPropertyTearOff::baseVal):
        (WebCore::SVGAnimatedPathSegListPropertyTearOff::animVal):
        (WebCore::SVGAnimatedPathSegListPropertyTearOff::removeItemFromList):
        (SVGAnimatedPathSegListPropertyTearOff):
        (WebCore::SVGAnimatedPathSegListPropertyTearOff::animationStarted):
        (WebCore::SVGAnimatedPathSegListPropertyTearOff::animationEnded):
        (WebCore::SVGAnimatedPathSegListPropertyTearOff::animValDidChange):
        (WebCore::SVGAnimatedPathSegListPropertyTearOff::animatedPathByteStream):
        (WebCore::SVGAnimatedPathSegListPropertyTearOff::SVGAnimatedPathSegListPropertyTearOff):
        * svg/properties/SVGAnimatedTransformListPropertyTearOff.h:
        (WebCore::SVGAnimatedTransformListPropertyTearOff::baseVal):
        (WebCore::SVGAnimatedTransformListPropertyTearOff::animVal):
        * svg/properties/SVGListProperty.h:
        (WebCore::SVGListProperty::setValuesAndWrappers):
        (WebCore::SVGListProperty::SVGListProperty):
        (WebCore::SVGListProperty::~SVGListProperty):
        (SVGListProperty):

2012-04-04  Allan Sandfeld Jensen  <allan.jensen@nokia.com>

        Best zoomable area does not balance intersection with target area.
        https://bugs.webkit.org/show_bug.cgi?id=83148

        Reviewed by Kenneth Rohde Christiansen.

        Change the two step sort to simply picking the best quotient of touch intersection with target area.

        Test: touchadjustment/zoom-fatfinger.html

        * page/TouchAdjustment.cpp:
        (WebCore::TouchAdjustment::distanceSquaredToTargetCenterLine):
        (TouchAdjustment):
        (WebCore::TouchAdjustment::zoomableIntersectionQuotient):
        (WebCore::TouchAdjustment::findNodeWithLowestDistanceMetric):
        (WebCore::findBestClickableCandidate):
        (WebCore::findBestZoomableArea):

2012-04-04  Andrey Kosyakov  <caseq@chromium.org>

        Web Inspector: make padding and client window width part of timeline calculator's state
        https://bugs.webkit.org/show_bug.cgi?id=83122

        Reviewed by Pavel Feldman.

        - preserve window width and padding within TimelineCalculator
        - rely on calculator to add expansion arrow padding
        - add TimelineCalculator::computePosition() for computing single position (not entire bar dimensions)

        * inspector/front-end/MemoryStatistics.js:
        (WebInspector.MemoryStatistics.prototype._refreshDividers):
        * inspector/front-end/NetworkPanel.js:
        (WebInspector.NetworkLogView.prototype._updateDividersIfNeeded):
        (WebInspector.NetworkLogView.prototype._reset):
        (WebInspector.NetworkBaseCalculator.prototype.computePosition):
        (WebInspector.NetworkBaseCalculator.prototype.formatTime):
        (WebInspector.NetworkBaseCalculator.prototype.setDisplayWindow):
        * inspector/front-end/TimelineGrid.js:
        (WebInspector.TimelineGrid.prototype.updateDividers):
        (WebInspector.TimelineGrid.prototype.addEventDividers):
        * inspector/front-end/TimelineOverviewPane.js:
        (WebInspector.TimelineOverviewPane.prototype._update):
        (WebInspector.TimelineOverviewPane.prototype._reset):
        (WebInspector.TimelineOverviewCalculator.prototype.computePosition):
        (WebInspector.TimelineOverviewCalculator.prototype.setDisplayWindow):
        * inspector/front-end/TimelinePanel.js:
        (WebInspector.TimelinePanel.prototype._updateEventDividers):
        (WebInspector.TimelinePanel.prototype._refresh):
        (WebInspector.TimelinePanel.prototype._refreshRecords):
        (WebInspector.TimelineCalculator.prototype.computePosition):
        (WebInspector.TimelineCalculator.prototype.computeBarGraphWindowPosition):
        (WebInspector.TimelineCalculator.prototype.setDisplayWindow):
        (WebInspector.TimelineRecordGraphRow.prototype.update):
        (WebInspector.TimelineExpandableElement.prototype._update):

2012-04-04  Noel Gordon  <noel.gordon@gmail.com>

        [FileSystem] Forward declare File in FileCallback.h
        https://bugs.webkit.org/show_bug.cgi?id=83128

        Reviewed by Kentaro Hara.

        No new tests. Covered by existing tests.

        * Modules/filesystem/FileCallback.h: forward declare File class to make
        #include of "File.h" redundant.
        (WebCore):

2012-04-04  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r113156.
        http://trac.webkit.org/changeset/113156
        https://bugs.webkit.org/show_bug.cgi?id=83146

        Breaks inspector layout tests (Requested by pfeldman on
        #webkit).

        * inspector/front-end/MemoryStatistics.js:
        (WebInspector.MemoryStatistics.prototype._refreshDividers):
        * inspector/front-end/TimelineGrid.js:
        (WebInspector.TimelineGrid.prototype.updateDividers):
        (WebInspector.TimelineGrid.prototype.addEventDividers):
        * inspector/front-end/TimelineOverviewPane.js:
        (WebInspector.TimelineOverviewPane.prototype._update):
        (WebInspector.TimelineOverviewPane.prototype._reset):
        * inspector/front-end/TimelinePanel.js:
        (WebInspector.TimelinePanel.prototype._updateEventDividers):
        (WebInspector.TimelinePanel.prototype._refresh):
        (WebInspector.TimelinePanel.prototype._refreshRecords):
        (WebInspector.TimelinePanel.prototype.get timelinePaddingLeft):
        (WebInspector.TimelineCalculator.prototype.computeBarGraphWindowPosition):
        (WebInspector.TimelineRecordGraphRow.prototype.update):
        (WebInspector.TimelineExpandableElement.prototype._update):

2012-04-04  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: front-end should accept raw web socket address for the remote connection.
        https://bugs.webkit.org/show_bug.cgi?id=83134

        Reviewed by Yury Semikhatsky.

        Migrated from the /devtools/page web socket schema to the generic one where remote target address
        can be specified as index.html?ws=localhost:9222/page1. Left the old host/page way for backwards
        compatibility.

        * inspector/front-end/inspector.js:

2012-04-04  Kent Tamura  <tkent@chromium.org>

        Add localization functions for the calendar picker
        https://bugs.webkit.org/show_bug.cgi?id=83129

        Reviewed by Hajime Morita.

        No behavior changes yet.

        * WebCore.gypi: Add LocalizedCalendar.h and LocalizedCalendarICU.cpp.
        * platform/LocalizedStrings.h: Add calendarTodayText() and calendarClearText().
        * platform/text/LocalizedCalendar.h:
        Added. This provides monthLabels(), weekDayShortLabels(), and firstDayOfWeek().
        * platform/text/LocalizedCalendarICU.cpp: Added. ICU implementations of the above functions.
        (WebCore::ScopedDateFormat): A wrapper for UDateFormat*.
        (WebCore::ScopedDateFormat::ScopedDateFormat):
        (WebCore::ScopedDateFormat::~ScopedDateFormat):
        (WebCore::ScopedDateFormat::get):
        (createFallbackMonthLabels): Creates fallback month labels in English.
        (createLabelVector):
        A helper for createMonthLabels() and createWeekDayShortLabels().
        (createMonthLabels):
        Creates month labels using createLabelVector() or createFallbackMonthLabels().
        (WebCore::monthLabels):
        (createFallbackWeekDayShortLabels): Creates fallback week labels in English.
        (createWeekDayShortLabels):
        Creates month labels using createLabelVector() or createFallbackWeekDayShortLabels().
        (WebCore::weekDayShortLabels):
        (getFirstDayOfWeek):
        (WebCore::firstDayOfWeek):

2012-04-03  Hans Wennborg  <hans@chromium.org>

        Speech JavaScript API: Plumbing for Chromium
        https://bugs.webkit.org/show_bug.cgi?id=81667

        Reviewed by Darin Fisher.

        SpeechGrammar::src() is called with a ScriptExecutionContext, because
        the attribute setter needs it. Provide a src() method that doesn't
        take a ScriptExecutionContext that can be used internally.

        Rename SpeechRecognition::audioStartCallback(), etc. to use event style
        names, i.e. didStartAudio(), etc.

        Remove SpeechRecognitionClient::notifyVisibilityHidden(). The embedder
        can keep track of the visibility.

        Remove SpeechRecognitionClient::unregisterSpeechRecognition,
        it is not needed.

        No new tests, just minor tweaks.

        * Modules/speech/SpeechGrammar.h:
        (WebCore::SpeechGrammar::src):
        * Modules/speech/SpeechRecognition.cpp:
        (WebCore::SpeechRecognition::didStartAudio):
        (WebCore::SpeechRecognition::didStartSound):
        (WebCore::SpeechRecognition::didStartSpeech):
        (WebCore::SpeechRecognition::didEndSpeech):
        (WebCore::SpeechRecognition::didEndSound):
        (WebCore):
        (WebCore::SpeechRecognition::didEndAudio):
        (WebCore::SpeechRecognition::didReceiveResult):
        (WebCore::SpeechRecognition::didReceiveNoMatch):
        (WebCore::SpeechRecognition::didDeleteResult):
        (WebCore::SpeechRecognition::didReceiveError):
        (WebCore::SpeechRecognition::didStart):
        (WebCore::SpeechRecognition::didEnd):
        * Modules/speech/SpeechRecognition.h:
        (SpeechRecognition):
        * Modules/speech/SpeechRecognitionClient.h:
        (SpeechRecognitionClient):
        * Modules/speech/SpeechRecognitionController.h:

2012-04-03  Levi Weintraub  <leviw@chromium.org>

        Switch baseline values to LayoutUnits in RenderTableSection.
        https://bugs.webkit.org/show_bug.cgi?id=83017

        Reviewed by Julien Chaffraix.

        We initially intend to keep table layout on integers post switching the render tree to primarily
        use sub-pixel precision. Baseline positions switch to sub-pixel units, and in table layout code are
        combined with padding (also sub-pixel), which means we ideally won't truncate their values until
        after they're added together. Converting baseline values in RenderTableSection to LayoutUnits.

        No new tests. No change in behavior.

        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::calcRowLogicalHeight):
        (WebCore::RenderTableSection::layoutRows):
        * rendering/RenderTableSection.h:
        (RowStruct):

2012-04-04  Zan Dobersek  <zandobersek@gmail.com>

        [GTK] Scrolling doesn't work in WebKit2 since r110185
        https://bugs.webkit.org/show_bug.cgi?id=81779

        Reviewed by James Robinson.

        Bring back functionality of the ScrollAnimatorNone for ports that
        use a fallback timer for animation frames.

        No new tests - only restoring previous functionality.

        * platform/ScrollAnimatorNone.cpp:
        (WebCore::ScrollAnimatorNone::ScrollAnimatorNone):
        (WebCore::ScrollAnimatorNone::fireUpAnAnimation):
        (WebCore):
        (WebCore::ScrollAnimatorNone::animationTimerFired):
        (WebCore::ScrollAnimatorNone::startNextTimer):
        (WebCore::ScrollAnimatorNone::animationTimerActive):
        (WebCore::ScrollAnimatorNone::stopAnimationTimerIfNeeded):
        * platform/ScrollAnimatorNone.h:
        (ScrollAnimatorNone):

2012-04-02  Peter Rybin  <peter.rybin@gmail.com>

        Web Inspector: CodeGeneratorInspector.py: switch Inspector, Memory and Database domains to typed API
        https://bugs.webkit.org/show_bug.cgi?id=82958

        Reviewed by Yury Semikhatsky.

        Client code is switched to typed API (all InspectorObject and InspectorArray types are replaced with
        generated types from TypeBuilder according to Inspector.json).

        Missing array of InspectorValues specialization is added.

        * inspector/CodeGeneratorInspector.py:
        * inspector/InjectedScriptHost.cpp:
        (WebCore::InjectedScriptHost::inspectImpl):
        * inspector/InspectorAgent.cpp:
        (WebCore::InspectorAgent::inspect):
        * inspector/InspectorAgent.h:
        (InspectorAgent):
        * inspector/InspectorDatabaseAgent.cpp:
        (WebCore):
        (WebCore::InspectorDatabaseAgent::getDatabaseTableNames):
        * inspector/InspectorDatabaseAgent.h:
        (InspectorDatabaseAgent):
        * inspector/InspectorDatabaseResource.cpp:
        (WebCore::InspectorDatabaseResource::bind):
        * inspector/InspectorMemoryAgent.cpp:
        (WebCore::InspectorMemoryAgent::getDOMNodeCount):
        * inspector/InspectorMemoryAgent.h:
        (InspectorMemoryAgent):

2012-04-04  Andrey Kosyakov  <caseq@chromium.org>

        Web Inspector: make padding and client window width part of timeline calculator's state
        https://bugs.webkit.org/show_bug.cgi?id=83122

        Reviewed by Pavel Feldman.

        - preserve window width and padding within TimelineCalculator
        - rely on calculator to add expansion arrow padding
        - add TimelineCalculator::computePosition() for computing single position (not entire bar dimensions)

        * inspector/front-end/MemoryStatistics.js:
        (WebInspector.MemoryStatistics.prototype._refreshDividers):
        * inspector/front-end/TimelineGrid.js:
        (WebInspector.TimelineGrid.prototype.updateDividers):
        * inspector/front-end/TimelineOverviewPane.js:
        (WebInspector.TimelineOverviewPane.prototype._update):
        (WebInspector.TimelineOverviewPane.prototype._reset):
        (WebInspector.TimelineOverviewCalculator.prototype.computePosition):
        (WebInspector.TimelineOverviewCalculator.prototype.setDisplayWindow):
        * inspector/front-end/TimelinePanel.js:
        (WebInspector.TimelinePanel.prototype._updateEventDividers):
        (WebInspector.TimelinePanel.prototype._refresh):
        (WebInspector.TimelinePanel.prototype._refreshRecords):
        (WebInspector.TimelineCalculator):
        (WebInspector.TimelineCalculator.prototype.computePosition):
        (WebInspector.TimelineCalculator.prototype.computeBarGraphWindowPosition):
        (WebInspector.TimelineCalculator.prototype.setDisplayWindow):
        (WebInspector.TimelineRecordGraphRow.prototype.update):
        (WebInspector.TimelineExpandableElement.prototype._update):

2012-04-04  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r113149.
        http://trac.webkit.org/changeset/113149
        https://bugs.webkit.org/show_bug.cgi?id=83126

        for breaking Chromium builders (Requested by pfeldman on
        #webkit).

        * Modules/speech/SpeechGrammar.h:
        * Modules/speech/SpeechRecognition.cpp:
        (WebCore::SpeechRecognition::audioStartCallback):
        (WebCore::SpeechRecognition::soundStartCallback):
        (WebCore::SpeechRecognition::speechStartCallback):
        (WebCore::SpeechRecognition::speechEndCallback):
        (WebCore::SpeechRecognition::audioEndCallback):
        (WebCore::SpeechRecognition::resultCallback):
        (WebCore::SpeechRecognition::noMatchCallback):
        (WebCore::SpeechRecognition::resultDeletedCallback):
        (WebCore::SpeechRecognition::errorCallback):
        (WebCore::SpeechRecognition::startCallback):
        (WebCore::SpeechRecognition::endCallback):
        * Modules/speech/SpeechRecognition.h:
        (SpeechRecognition):
        * Modules/speech/SpeechRecognitionClient.h:
        (SpeechRecognitionClient):
        * Modules/speech/SpeechRecognitionController.h:
        (WebCore::SpeechRecognitionController::visibilityHidden):
        (WebCore::SpeechRecognitionController::unregisterSpeechRecognition):

2012-04-03  Andrey Kosyakov  <caseq@chromium.org>

        Web Inspector: event marks are missing in the timeline overview
        https://bugs.webkit.org/show_bug.cgi?id=83043

        Reviewed by Pavel Feldman.

        - invoke overview event dividers update as part of overview update, not lower pane update;
        - store raw records for event dividers within overview;
        - moved createEventDividers to a class method of TimelinePresentationModel for reuse.
        - ditto for forAllRecords

        * inspector/front-end/TimelineOverviewPane.js:
        (WebInspector.TimelineOverviewPane):
        (WebInspector.TimelineOverviewPane.prototype._update):
        (WebInspector.TimelineOverviewPane.prototype._updateCategoryStrips):
        (WebInspector.TimelineOverviewPane.prototype._updateEventDividers):
        (WebInspector.TimelineOverviewPane.prototype._onRecordAdded):
        (WebInspector.TimelineOverviewPane.prototype._reset):
        (WebInspector.HeapGraph.prototype.update):
        * inspector/front-end/TimelinePanel.js:
        (WebInspector.TimelinePanel.prototype._updateEventDividers):
        (WebInspector.TimelinePanel.prototype._innerAddRecordToTimeline.addTimestampRecords):
        (WebInspector.TimelinePanel.prototype._innerAddRecordToTimeline):
        * inspector/front-end/TimelinePresentationModel.js:
        (WebInspector.TimelinePresentationModel.isEventDivider):
        (WebInspector.TimelinePresentationModel.forAllRecords):
        (WebInspector.TimelinePresentationModel.createEventDivider):

2012-04-03  Hans Wennborg  <hans@chromium.org>

        Speech JavaScript API: Plumbing for Chromium
        https://bugs.webkit.org/show_bug.cgi?id=81667

        Reviewed by Darin Fisher.

        SpeechGrammar::src() is called with a ScriptExecutionContext, because
        the attribute setter needs it. Provide a src() method that doesn't
        take a ScriptExecutionContext that can be used internally.

        Rename SpeechRecognition::audioStartCallback(), etc. to use event style
        names, i.e. didStartAudio(), etc.

        Remove SpeechRecognitionClient::notifyVisibilityHidden(). The embedder
        can keep track of the visibility.

        Remove SpeechRecognitionClient::unregisterSpeechRecognition,
        it is not needed.

        No new tests, just minor tweaks.

        * Modules/speech/SpeechGrammar.h:
        (WebCore::SpeechGrammar::src):
        * Modules/speech/SpeechRecognition.cpp:
        (WebCore::SpeechRecognition::didStartAudio):
        (WebCore::SpeechRecognition::didStartSound):
        (WebCore::SpeechRecognition::didStartSpeech):
        (WebCore::SpeechRecognition::didEndSpeech):
        (WebCore::SpeechRecognition::didEndSound):
        (WebCore):
        (WebCore::SpeechRecognition::didEndAudio):
        (WebCore::SpeechRecognition::didReceiveResult):
        (WebCore::SpeechRecognition::didReceiveNoMatch):
        (WebCore::SpeechRecognition::didDeleteResult):
        (WebCore::SpeechRecognition::didReceiveError):
        (WebCore::SpeechRecognition::didStart):
        (WebCore::SpeechRecognition::didEnd):
        * Modules/speech/SpeechRecognition.h:
        (SpeechRecognition):
        * Modules/speech/SpeechRecognitionClient.h:
        (SpeechRecognitionClient):
        * Modules/speech/SpeechRecognitionController.h:

2012-04-04  Mariusz Grzegorczyk  <mariusz.g@samsung.com>

        Fix build break when CONTEXT_MENUS is disabled.
        https://bugs.webkit.org/show_bug.cgi?id=82342

        Reviewed by Andreas Kling.

        Fixes build break in WebKit-Gtk, and WebKit-EFL ports when CONTEXT_MENUS macro is disabled.

        * page/ContextMenuClient.h:
        * page/ContextMenuController.h:
        * page/Page.cpp:
        (WebCore::Page::PageClients::PageClients):
        * page/Page.h:
        (WebCore):
        (PageClients):
        * platform/ContextMenu.cpp:
        * platform/ContextMenu.h:
        * platform/ContextMenuItem.cpp:
        * platform/ContextMenuItem.h:
        * platform/efl/ContextMenuEfl.cpp:
        * platform/efl/ContextMenuItemEfl.cpp:
        * platform/gtk/ContextMenuGtk.cpp:
        * platform/gtk/ContextMenuItemGtk.cpp:

2012-04-03  Adam Barth  <abarth@webkit.org>

        Implement <iframe srcdoc>
        https://bugs.webkit.org/show_bug.cgi?id=82991

        Reviewed by Sam Weinig.

        This patch implements the <iframe srcdoc> feature. This feature allows
        authors to easily supply the contents of an iframe without needing to
        round-trip to the server. Using srcdoc is more convenient than using
        data URLs because we set a bunch of properties of the child document
        sensibly. For example, the child inherits the base URL of the parent
        and the child uses standards mode by default.

        This feature is specified in
        <http://www.whatwg.org/specs/web-apps/current-work/#attr-iframe-srcdoc>.
        Although the feature has been in the spec for a while, I'm not aware of
        any other implementations in major browsers. The srcdoc feature works
        especially well with the sandbox and seamless attributes. We already
        implement sandbox and will likely implement seamless soon.

        The srcdoc feature was announced on the webkit-dev mailing list on March 30:
        https://lists.webkit.org/pipermail/webkit-dev/2012-March/020161.html

        This patch approaches the implementation using SubstituteData, which is
        a mechanism previously used for error messages and the like. Using
        SubstituteData has the advantage of not needing to modify the loading
        or history pipelines at all, making the integration of srcdoc with the
        rest of WebCore quite smooth.

        This patch encodes the contents of the srcdoc attribute to and from
        UTF-8 when round-tripping the contents through the loader. In a future
        patch, I plan to experiment with whether using UTF-16 (or perhaps
        another encoding) can improve performance. There might also be a way to
        avoid the memcpy entirely, but these optimizations are best left to
        followup patches as this patch focuses on the observable behavior of
        the feature.

        Tests: fast/frames/srcdoc/reloading-a-srcdoc-document-loads-it-again.html
               fast/frames/srcdoc/setting-src-does-nothing.html
               fast/frames/srcdoc/setting-srcdoc-reloads-document.html
               fast/frames/srcdoc/srcdoc-beats-src-dom.html
               fast/frames/srcdoc/srcdoc-beats-src.html
               fast/frames/srcdoc/srcdoc-can-be-in-qurks-mode.html
               fast/frames/srcdoc/srcdoc-can-navigate.html
               fast/frames/srcdoc/srcdoc-defaults-to-standards-mode.html
               fast/frames/srcdoc/srcdoc-loads-content.html
               fast/frames/srcdoc/srcdoc-urls.html
               http/tests/security/srcdoc-can-access-parent.html
               http/tests/security/srcdoc-in-sandbox-cannot-access-parent.html
               http/tests/security/srcdoc-inherits-referrer-for-forms.html
               http/tests/security/srcdoc-inherits-referrer.html

        * dom/Document.cpp:
        (WebCore::Document::Document):
        (WebCore::Document::initSecurityContext):
            - srcdoc documents need to inherit their security contexts from
              their parents. We pick this initialization point to inherit the
              base URL and to set the "srcdoc Document" bit so that everything
              gets initialized atomically and from precisely the same owner
              frame.
        * dom/Document.h:
        (Document):
        (WebCore::Document::isSrcdocDocument):
            - This bit of state is present in the HTML5 spec and is referred to
              by a number of different requirements in the spec.
        * html/HTMLAttributeNames.in:
        * html/HTMLFrameElementBase.cpp:
        (WebCore::HTMLFrameElementBase::parseAttribute):
        (WebCore::HTMLFrameElementBase::location):
            - These functions implement the requirement that the srcdoc
              attribute takes precedence over the src attribute and triggers a
              load of a document with the URL about:srcdoc.
        * html/HTMLIFrameElement.idl:
            - Expose the srcdoc property as a reflection of the DOM attribute.
        * html/parser/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::defaultForInitial):
            - This tweak allows srcdoc documents to use standards mode by
              default, saving authors from having to include a doctype in each
              srcdoc document.
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::defaultSubstituteDataForURL):
            - This function transfers the contents of the srcdoc attribute into
              the loading pipeline. If the client supplies other
              SubstituteData, that takes precendence over our "default"
              SubstituteData.
        (WebCore::FrameLoader::outgoingReferrer):
            - This function implements the requirement from the HTML5 spec that
              srcdoc documents inherit their referrer from their parent
              document. A recursive implementation might have been more
              aesthetic but the iterative implementation seemed like a better
              choice.
        (WebCore::FrameLoader::shouldTreatURLAsSrcdocDocument):
            - An about:srcdoc URL only has special meaning when loaded in an
              iframe with a srcdoc attribute. Otherwise, it's just a normal
              "about" URL, meaning a blank page.
        (WebCore::FrameLoader::urlSelected):
        (WebCore::FrameLoader::submitForm):
        (WebCore::FrameLoader::loadFrameRequest):
        (WebCore::FrameLoader::load):
        (WebCore::FrameLoader::loadWithNavigationAction):
        (WebCore::FrameLoader::reloadWithOverrideEncoding):
        (WebCore::FrameLoader::reload):
        (WebCore::FrameLoader::loadResourceSynchronously):
            - Update these call sites to call defaultSubstituteDataForURL and
              outgoingReferrer consistently.
        * loader/FrameLoader.h:
        (FrameLoader):

2012-03-29  Geoffrey Garen  <ggaren@apple.com>

        First step toward incremental Weak<T> finalization
        https://bugs.webkit.org/show_bug.cgi?id=82670

        Reviewed by Filip Pizlo.

        Updated WebCore for Weak<T> API changes.

        * bindings/js/DOMWrapperWorld.cpp:
        (WebCore::JSStringOwner::finalize): We're not allowed to get() a dead Weak<T>
        anymore, so use the debug-only was() helper function instead.

        * bindings/js/JSDOMBinding.h:
        (WebCore::uncacheWrapper): Ditto.

        * bindings/js/JSNodeCustom.h:
        (WebCore::setInlineCachedWrapper):
        (WebCore::clearInlineCachedWrapper): We're not allowed to get() a dead
        Weak<T>, so I had to push down these ASSERTs into ScriptWrappable.

        * bindings/js/JSNodeFilterCondition.cpp:
        (WebCore::JSNodeFilterCondition::acceptNode): Updated for non-Handle-ness
        of Weak<T>.

        * bindings/js/ScriptWrappable.h:
        (WebCore::ScriptWrappable::setWrapper):
        (WebCore::ScriptWrappable::clearWrapper): Use was(), as above.

2012-04-03  Luke Macpherson  <macpherson@chromium.org>

        Don't parse "show" and "hide" as valid values for display property.
        https://bugs.webkit.org/show_bug.cgi?id=83115

        Reviewed by Adam Barth.

        No new tests.

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

2012-04-03  Yuta Kitamura  <yutak@chromium.org>

        Crash in WebCore::WorkerThreadableWebSocketChannel::Bridge::mainThreadCreateWebSocketChannel
        https://bugs.webkit.org/show_bug.cgi?id=82873

        Reviewed by David Levin.

        WorkerThreadableWebSocketChannel::Bridge should properly handle the cases where inter-thread
        callback is not called due to the termination of the worker run loop. Specifically, the bridge
        should not send its "this" pointer to the main thread, because the bridge object may be freed
        in the worker thread before the main thread starts to process.

        Test: http/tests/websocket/tests/hybi/workers/worker-reload.html

        * Modules/websockets/ThreadableWebSocketChannelClientWrapper.cpp:
        (WebCore::ThreadableWebSocketChannelClientWrapper::ThreadableWebSocketChannelClientWrapper):
        (WebCore::ThreadableWebSocketChannelClientWrapper::peer):
        (WebCore::ThreadableWebSocketChannelClientWrapper::didCreateWebSocketChannel):
        Renamed from setUseHixie76Protocol, as this funtion now also sets m_peer.
        Sets m_syncMethodDone to true, because this function is called in the end of
        synchronous wait of Bridge::initialize().
        (WebCore::ThreadableWebSocketChannelClientWrapper::clearPeer):
        (WebCore::ThreadableWebSocketChannelClientWrapper::useHixie76Protocol):
        * Modules/websockets/ThreadableWebSocketChannelClientWrapper.h:
        Add WorkerThreadableWebSocketChannel::Peer which is initialized after the creation of
        WebSocketChannel in the main thread.
        (ThreadableWebSocketChannelClientWrapper):
        * Modules/websockets/WorkerThreadableWebSocketChannel.cpp:
        (WebCore::WorkerThreadableWebSocketChannel::WorkerThreadableWebSocketChannel):
        Don't do synchronous wait in the constructor, as a member function may be called
        during the wait before the constructor finishes. The meat of the constructor has
        moved to initialize() function.
        (WebCore::WorkerThreadableWebSocketChannel::Bridge::Bridge):
        (WebCore::WorkerThreadableWebSocketChannel::Bridge::~Bridge):
        (WorkerContextDidInitializeTask):
        (WebCore::WorkerContextDidInitializeTask::create):
        (WebCore::WorkerContextDidInitializeTask::~WorkerContextDidInitializeTask):
        (WebCore::WorkerContextDidInitializeTask::WorkerContextDidInitializeTask):
        (WebCore::WorkerThreadableWebSocketChannel::Bridge::mainThreadInitialize):
        (WebCore::WorkerThreadableWebSocketChannel::Bridge::initialize):
        Don't pass "this" object to the main thread. Receive the pointer to the peer object
        via ThreadableWebSocketChannelClientWrapper which is ThreadSafeRefCounted<>.
        (WebCore::WorkerThreadableWebSocketChannel::Bridge::connect):
        m_peer may be NULL, and we should not do anything in that case.
        (WebCore::WorkerThreadableWebSocketChannel::Bridge::send):
        (WebCore::WorkerThreadableWebSocketChannel::Bridge::bufferedAmount):
        (WebCore::WorkerThreadableWebSocketChannel::mainThreadClose):
        (WebCore::WorkerThreadableWebSocketChannel::Bridge::close):
        (WebCore::WorkerThreadableWebSocketChannel::Bridge::fail):
        (WebCore::WorkerThreadableWebSocketChannel::Bridge::suspend):
        (WebCore::WorkerThreadableWebSocketChannel::Bridge::resume):
        * Modules/websockets/WorkerThreadableWebSocketChannel.h:
        (WorkerThreadableWebSocketChannel):
        (WebCore::WorkerThreadableWebSocketChannel::refThreadableWebSocketChannel):
        (WebCore::WorkerThreadableWebSocketChannel::derefThreadableWebSocketChannel):
        (Bridge):
        * workers/DefaultSharedWorkerRepository.cpp:
        (SharedWorkerProxy):
        (WebCore::SharedWorkerProxy::postTaskForModeToWorkerContext):
        * workers/WorkerLoaderProxy.h:
        (WorkerLoaderProxy::postTaskForModeToWorkerContext):
        Return bool to indicate whether postTask was successful or not. This is necessary
        to avoid memory leaks of Peer object in Bridge::initialize() function.
        * workers/WorkerMessagingProxy.cpp:
        (WebCore::WorkerMessagingProxy::postTaskForModeToWorkerContext):
        * workers/WorkerMessagingProxy.h:
        (WorkerMessagingProxy):

2012-04-03  Keishi Hattori  <keishi@webkit.org>

        Disable ENABLE_DATALIST for now
        https://bugs.webkit.org/show_bug.cgi?id=82871

        Reviewed by Kent Tamura.

        * Configurations/FeatureDefines.xcconfig: Disabled ENABLE_DATALIST.

2012-04-03  Yael Aharon  <yael.aharon@nokia.com>

        [Qt][WK2] Assert on startup after r113090
        https://bugs.webkit.org/show_bug.cgi?id=83111

        Reviewed by Noam Rosenthal.

        Add willBeDestroyed to to GraphicsLayerTextureMapper.

        * platform/graphics/texmap/GraphicsLayerTextureMapper.cpp:
        (WebCore::GraphicsLayerTextureMapper::~GraphicsLayerTextureMapper):
        (WebCore):
        (WebCore::WebGraphicsLayer::willBeDestroyed):
        * platform/graphics/texmap/GraphicsLayerTextureMapper.h:
        (GraphicsLayerTextureMapper):

2012-04-03  Kenichi Ishibashi  <bashi@chromium.org>

        [Chromium] Out-of-process font loading garbles text
        https://bugs.webkit.org/show_bug.cgi?id=83002

        Reviewed by Kent Tamura.

        Initialize m_CTFont by using m_cgFont in FontPlatformData when we use
        out-of-process font loading.

        No new tests. This problem only occurs when the user uses a third party
        font management software like Font Explorer so it is difficult to add
        tests.

        * platform/graphics/chromium/CrossProcessFontLoading.mm:
        (WebCore):
        (WebCore::FontPlatformData::loadFont): If font loading fails, set null to outNSFont so that the FontPlatformData won't be used.
        * platform/graphics/cocoa/FontPlatformDataCocoa.mm:
        (WebCore::FontPlatformData::ctFont): Modified to return the appropriate NSFont object when the font from the browser process.
        * platform/graphics/mac/FontCacheMac.mm:
        (WebCore::FontCache::createFontPlatformData): Returns null when the generated FontPlatformData object doesn't have NSFont object.

2012-04-03  Hironori Bono  <hbono@chromium.org>

        Prevent spellchecking text pasted to an element having spellchecking disabled
        https://bugs.webkit.org/show_bug.cgi?id=81323

        Reviewed by Hajime Morita.

        This change prevent calling SpellChecker::requestCheckingFor when pasting text
        to an element whose spellcheck attribute is false or a password input.

        Test: editing/spelling/spellcheck-paste-disabled.html

        * editing/Editor.cpp:
        (WebCore::Editor::replaceSelectionWithFragment): Disabled spellchecking on password inputs.
        * editing/SpellChecker.cpp:
        (WebCore::SpellChecker::isCheckable): Return false when spellchecking is disabled.

2012-04-03  Hayato Ito  <hayato@chromium.org>

        Make FocusController use a ComposedShadowTreeWalker, instead of ReifiedTreeTraversal APIs.
        https://bugs.webkit.org/show_bug.cgi?id=82694

        Reviewed by Dimitri Glazkov.

        Rewrite a focus controller so that it uses ComposedShadowTreeWalker
        since that is a preferred way to traverse composed shadow tree.
        I'll get rid of ReifiedTreeTraversal in follow-up patches, which is now deprecated.

        No new tests. No change in functionality.

        * page/FocusController.cpp:
        (WebCore::walkerFrom):
        (WebCore):
        (WebCore::walkerFromNext):
        (WebCore::walkerFromPrevious):
        (WebCore::nextNode):
        (WebCore::previousNode):
        (WebCore::FocusController::findNodeWithExactTabIndex):
        (WebCore::nextNodeWithGreaterTabIndex):
        (WebCore::previousNodeWithLowerTabIndex):
        (WebCore::FocusController::nextFocusableNode):
        (WebCore::FocusController::previousFocusableNode):

2012-04-03  Srikumar Bonda  <srikumar.b@gmail.com>

        [Qt] Crash in ~GraphicsContext3D() when init failed
        https://bugs.webkit.org/show_bug.cgi?id=82992

        Reviewed by Luiz Agostini.

        WebKit crashes in ~GraphicsContext3D() while freeing the variables which are
        not even allocated because of the init failure in GraphicsContext3D() for Qt.
        In addition, Added a safety check in makeContextCurrent() before accessing
        GraphicsContext3DPrivate object.

        No new tests because the change is about adding null check
        before accessing the variables.

        * platform/graphics/qt/GraphicsContext3DQt.cpp:
        (WebCore::GraphicsContext3D::~GraphicsContext3D):
        (WebCore::GraphicsContext3D::makeContextCurrent):

2012-04-03  Rafael Weinstein  <rafaelw@chromium.org>

        Use V8 completion callback API to assert that V8RecursionScope is on the stack whenever invoking script
        https://bugs.webkit.org/show_bug.cgi?id=79131

        Reviewed by Adam Barth.

        End-of-microtask work (cancelling outstanding IDB transactions,
        delivering DOM mutations) depend on V8RecursionScope being on the
        stack whenever a call is made into script. V8 provides a completion
        callback API that could be used to hook these "end-of-microtask"
        events, but it turns out that WebKit calls into script for various
        reasons besides running script from the page. For example, constructing
        wrapper objects from function templates counts as "running script",
        yet it's not appropriate to run this callback every time a JS wrapper
        is constructed.

        Instead, this patch makes use of the V8 completion callback mechanism
        only in debug mode, to assert that either a V8RecursionScope (when
        calling author script) or a V8RecursionScope::MicrotaskSuppression
        (when calling non-author script) is on the stack when V8 thinks it's
        finished executing script. This requires dropping MicrotaskSuppression
        objects in a bunch of places, most notably the Inspector.
        Note that in release mode, this class does nothing and thus should be
        optimized away.

        No new tests. Existing tests have appropriate coverage.

        * Target.pri:
        * WebCore.gypi:
        * bindings/v8/DateExtension.cpp:
        (WebCore::DateExtension::setAllowSleep):
        * bindings/v8/PageScriptDebugServer.cpp:
        (WebCore::PageScriptDebugServer::addListener):
        * bindings/v8/ScriptController.cpp:
        (WebCore::ScriptController::callFunctionEvenIfScriptDisabled):
        (WebCore):
        (WebCore::ScriptController::collectGarbage):
        * bindings/v8/ScriptController.h:
        (ScriptController):
        * bindings/v8/ScriptDebugServer.cpp:
        (WebCore::ScriptDebugServer::callDebuggerMethod):
        (WebCore):
        (WebCore::ScriptDebugServer::pauseOnExceptionsState):
        (WebCore::ScriptDebugServer::setPauseOnExceptionsState):
        (WebCore::ScriptDebugServer::stepIntoStatement):
        (WebCore::ScriptDebugServer::stepOverStatement):
        (WebCore::ScriptDebugServer::stepOutOfFunction):
        (WebCore::ScriptDebugServer::setScriptSource):
        (WebCore::ScriptDebugServer::currentCallFrame):
        (WebCore::ScriptDebugServer::handleV8DebugEvent):
        (WebCore::ScriptDebugServer::ensureDebuggerScriptCompiled):
        * bindings/v8/ScriptDebugServer.h:
        (ScriptDebugServer):
        * bindings/v8/ScriptFunctionCall.cpp:
        (WebCore::ScriptFunctionCall::call):
        * bindings/v8/V8Binding.cpp:
        (WebCore::V8BindingPerIsolateData::V8BindingPerIsolateData):
        * bindings/v8/V8Binding.h:
        (V8BindingPerIsolateData):
        (WebCore::V8BindingPerIsolateData::internalScriptRecursionLevel):
        (WebCore::V8BindingPerIsolateData::incrementInternalScriptRecursionLevel):
        (WebCore::V8BindingPerIsolateData::decrementInternalScriptRecursionLevel):
        * bindings/v8/V8DOMWindowShell.cpp:
        * bindings/v8/V8DOMWrapper.cpp:
        * bindings/v8/V8LazyEventListener.cpp:
        (WebCore::V8LazyEventListener::prepareListenerObject):
        * bindings/v8/V8NPObject.cpp:
        * bindings/v8/V8RecursionScope.h:
        (WebCore):
        (WebCore::V8RecursionScope::recursionLevel):
        (V8RecursionScope):
        (WebCore::V8RecursionScope::properlyUsed):
        (MicrotaskSuppression):
        (WebCore::V8RecursionScope::MicrotaskSuppression::MicrotaskSuppression):
        (WebCore::V8RecursionScope::MicrotaskSuppression::~MicrotaskSuppression):
        * bindings/v8/WorkerContextExecutionProxy.cpp:
        * bindings/v8/custom/V8HTMLDocumentCustom.cpp:
        (WebCore::V8HTMLDocument::WrapInShadowObject):
        * bindings/v8/custom/V8InjectedScriptManager.cpp:
        (WebCore::InjectedScriptManager::createInjectedScript):
        * bindings/v8/custom/V8ScriptProfileCustom.cpp:
        * bindings/v8/custom/V8ScriptProfileNodeCustom.cpp:

2012-04-03  Anna Cavender  <annacc@chromium.org>

        Makes sure m_showingByDefault is set to false when TextTrack.mode is set from JS.
        https://bugs.webkit.org/show_bug.cgi?id=79791

        Reviewed by Eric Carlson.

        Test: media/track/track-mode.html

        * html/track/TextTrack.cpp:
        (WebCore::TextTrack::setMode): setMode should always setShowingByDefault to false.

2012-04-03  Jia Pu  <jpu@apple.com>

        Rename SpellingCorrectionController to AlternativeTextController.
        https://bugs.webkit.org/show_bug.cgi?id=82942

        Reviewed by Enrica Casucci.

        No new tests, since there's no change of funcationalities.

        This patch renames SpellingCorrectionController to AlternativeTextController, CorrectionPanelInfo to
        AlternativeTextInfo, CorrectionPanelInfo::CorretionPanelType to AlternativeTextType, and ReasonForDismissingCorrectionPanel
        to ReasonForDismissingAlternativeText. All these renaming reflects the fact that this class controls change
        of text caused by both spell checking and alternative dictation results. It also renames a couple of functions
        in the original SpellingCorrectionController class for the same reason.

        SpellingCorrectionPanel::replacementString has been replaced by AlternativeTextInfo::details which is an object
        that can be instantiated with different subclasses.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.exp.in:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * editing/AlternativeTextController.cpp: Copied from Source/WebCore/editing/SpellingCorrectionController.cpp.
        (AutocorrectionAlternativeDetails):
        (WebCore::AutocorrectionAlternativeDetails::create):
        (WebCore::AutocorrectionAlternativeDetails::replacementString):
        (WebCore::AutocorrectionAlternativeDetails::AutocorrectionAlternativeDetails):
        (WebCore):
        (WebCore::AlternativeTextController::AlternativeTextController):
        (WebCore::AlternativeTextController::~AlternativeTextController):
        (WebCore::AlternativeTextController::startAlternativeTextUITimer):
        (WebCore::AlternativeTextController::stopAlternativeTextUITimer):
        (WebCore::AlternativeTextController::stopPendingCorrection):
        (WebCore::AlternativeTextController::applyPendingCorrection):
        (WebCore::AlternativeTextController::hasPendingCorrection):
        (WebCore::AlternativeTextController::isSpellingMarkerAllowed):
        (WebCore::AlternativeTextController::show):
        (WebCore::AlternativeTextController::handleCancelOperation):
        (WebCore::AlternativeTextController::dismiss):
        (WebCore::AlternativeTextController::dismissSoon):
        (WebCore::AlternativeTextController::applyAlternativeText):
        (WebCore::AlternativeTextController::applyAutocorrectionBeforeTypingIfAppropriate):
        (WebCore::AlternativeTextController::respondToUnappliedSpellCorrection):
        (WebCore::AlternativeTextController::timerFired):
        (WebCore::AlternativeTextController::handleAlternativeTextUIResult):
        (WebCore::AlternativeTextController::isAutomaticSpellingCorrectionEnabled):
        (WebCore::AlternativeTextController::rootViewRectForRange):
        (WebCore::AlternativeTextController::respondToChangedSelection):
        (WebCore::AlternativeTextController::respondToAppliedEditing):
        (WebCore::AlternativeTextController::respondToUnappliedEditing):
        (WebCore::AlternativeTextController::client):
        (WebCore::AlternativeTextController::textChecker):
        (WebCore::AlternativeTextController::recordAutocorrectionResponseReversed):
        (WebCore::AlternativeTextController::markReversed):
        (WebCore::AlternativeTextController::markCorrection):
        (WebCore::AlternativeTextController::recordSpellcheckerResponseForModifiedCorrection):
        (WebCore::AlternativeTextController::deletedAutocorrectionAtPosition):
        (WebCore::AlternativeTextController::markPrecedingWhitespaceForDeletedAutocorrectionAfterCommand):
        (WebCore::AlternativeTextController::processMarkersOnTextToBeReplacedByResult):
        * editing/AlternativeTextController.h: Copied from Source/WebCore/editing/SpellingCorrectionController.h.
        (AlternativeTextDetails):
        (WebCore::AlternativeTextDetails::AlternativeTextDetails):
        (WebCore::AlternativeTextDetails::~AlternativeTextDetails):
        (WebCore):
        (AlternativeTextInfo):
        (AlternativeTextController):
        (WebCore::AlternativeTextController::shouldRemoveMarkersUponEditing):
        * editing/EditingAllInOne.cpp:
        * editing/Editor.cpp:
        (WebCore::Editor::respondToChangedSelection):
        (WebCore::Editor::appliedEditing):
        (WebCore::Editor::unappliedEditing):
        (WebCore::Editor::Editor):
        (WebCore::Editor::insertTextWithoutSendingTextEvent):
        (WebCore::Editor::insertLineBreak):
        (WebCore::Editor::insertParagraphSeparator):
        (WebCore::Editor::isAutomaticSpellingCorrectionEnabled):
        (WebCore::Editor::markMisspellingsAfterTypingToWord):
        (WebCore::Editor::markAllMisspellingsAndBadGrammarInRanges):
        (WebCore::Editor::markAndReplaceFor):
        (WebCore::Editor::changeBackToReplacedString):
        (WebCore::Editor::unappliedSpellCorrection):
        (WebCore::Editor::updateMarkersForWordsAffectedByEditing):
        (WebCore::Editor::deletedAutocorrectionAtPosition):
        (WebCore::Editor::startAlternativeTextUITimer):
        (WebCore::Editor::handleAlternativeTextUIResult):
        (WebCore::Editor::dismissCorrectionPanelAsIgnored):
        * editing/Editor.h:
        (WebCore):
        (Editor):
        * editing/SpellingCorrectionCommand.cpp:
        * editing/SpellingCorrectionController.cpp: Removed.
        * editing/SpellingCorrectionController.h: Removed.
        * editing/TypingCommand.cpp:
        (WebCore::TypingCommand::markMisspellingsAfterTyping):
        * loader/EmptyClients.h:
        (WebCore::EmptyEditorClient::showCorrectionPanel):
        (WebCore::EmptyEditorClient::dismissCorrectionPanel):
        (WebCore::EmptyEditorClient::dismissCorrectionPanelSoon):
        * page/EditorClient.h:

2012-04-03  Adam Barth  <abarth@webkit.org>

        Unreviewed. This patch adds an ugly, ugly hack to bandaid over the
        Windows component build. See comments in the code for details.

        * platform/chromium/support/WebMediaStreamSourcesRequest.cpp:
        (WebKit::WebMediaStreamSourcesRequest::dummy):
        (WebKit):

2012-04-03  Abhishek Arya  <inferno@chromium.org>

        Crash in SelectorChecker::checkOneSelector.
        https://bugs.webkit.org/show_bug.cgi?id=83040

        Reviewed by Antti Koivisto.

        Test: fast/css/css-set-selector-text-crash.html

        Removing the early bail when we detect that our selector text
        hasn't changed, and we don't notify the styleSelectorChanged.
        In fact, when we adopt the new selector list, the old one will
        get destroyed and the styleSelectorChanged call needs to be made.

        * css/CSSStyleRule.cpp:
        (WebCore::CSSStyleRule::setSelectorText):

2012-04-03  Julien Chaffraix  <jchaffraix@webkit.org>

        presentationAttributeCacheMaximumSize is set too low
        https://bugs.webkit.org/show_bug.cgi?id=82816

        Reviewed by Antti Koivisto.

        Performance change, no side effects anticipated.

        Prior to r106740, the presentation attribute style cache used to grow unbounded. As part of r110316,
        a different version of the cache was introduced with a maximum size of 128. This size gave a 75% hit rate.

        However this is bad as the previous cache had a 85% hit rate** and each miss propagate down to the matched
        properties cache as we use pointer comparisons.

        This change bumps the size to 4096. This size was chosen to bring us back to the previous hit rate while
        being a power of 2 (it is the HashMap maximum size). The steep increase is due to the combinational compexity
        of the new cache model: we need to match all our attributes' name, value and tag name to get a hit vs
        one attribute name, value and a category in the previous cache. To avoid blowing up the memory, we introduced
        a timer to clear the cache if the hit rate is too low.

        The measured hit rate is actually better now - in the 90% range on most page cyclers. This ups the matched
        properties hit rate by 1 percent point on presentation attributes.

        ** This is not a true apple-to-apple comparison as the cache model was changed.

        * dom/StyledElement.cpp:
        (PresentationAttributeCacheCleaner):
        (WebCore::PresentationAttributeCacheCleaner::PresentationAttributeCacheCleaner):
        (WebCore::PresentationAttributeCacheCleaner::didHitPresentationAttributeCache):
        (WebCore::PresentationAttributeCacheCleaner::cleanCache):
        (WebCore):
        (WebCore::presentationAttributeCacheCleaner):
        (WebCore::StyledElement::updateAttributeStyle):
        Added the logic to clean the presentation attribute cache if we drop below 100 hits per minutes.

2012-04-03  Tony Chang  <tony@chromium.org>

        Implement new flex property and deprecate flex function
        https://bugs.webkit.org/show_bug.cgi?id=82128

        Reviewed by Ojan Vafai.

        No new tests. Tests were updated to use the new syntax and they should
        all pass.

        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::preferredFlexLengthForChild): Grab the
        preferred size and if it's auto, fall back to width or height.
        (WebCore::RenderFlexibleBox::preferredMainAxisContentExtentForChild):
        (WebCore::RenderFlexibleBox::positiveFlexForChild): Use the value from the flex property.
        (WebCore::RenderFlexibleBox::negativeFlexForChild): Use the value from the flex property.
        (WebCore::RenderFlexibleBox::computeMainAxisPreferredSizes):
        * rendering/RenderFlexibleBox.h:

2012-03-15  Anders Carlsson  <andersca@apple.com>

        Search result page scrolls up before the correct page opens from google search
        https://bugs.webkit.org/show_bug.cgi?id=81280
        <rdar://problem/10973263>

        Reviewed by Sam Weinig.

        Make the requested scroll position part of the ScrollingTreeState so any changes being made
        are in sync with other important changes such as the scroll layer or contents size.

        * page/scrolling/ScrollingCoordinator.cpp:
        (WebCore::ScrollingCoordinator::frameViewRootLayerDidChange):
        Use coordinatesScrollingForFrameView instead of checking if the frame is the main frame.

        (WebCore::ScrollingCoordinator::requestScrollPositionUpdate):
        Call ScrollingTreeState::setRequestedScrollPosition.

        (WebCore::ScrollingCoordinator::setScrollLayer):
        Reset the requested scroll position.

        * page/scrolling/ScrollingTreeState.cpp:
        (WebCore::ScrollingTreeState::setRequestedScrollPosition):
        Keep track of the scroll position.

        * page/scrolling/mac/ScrollingTreeNodeMac.mm:
        (WebCore::ScrollingTreeNodeMac::update):
        Update the scroll position if it's changed.

2012-04-03  W. James MacLean  <wjmaclean@chromium.org>

        [chromium] Switch touchpad fling curve physics to absolute (not scaled) curve.
        https://bugs.webkit.org/show_bug.cgi?id=83061

        Reviewed by James Robinson.

        Revised existing unit tests.

        Use an absolute curve for touchpad fling. Here we identify the location on the curve corresponding
        to the initial fling velocity, and "jump in" at that point. Avoids issues around time/magnitude
        scaling present in previous implementation, and gives better feel to fling animation.

        * platform/TouchpadFlingPlatformGestureCurve.cpp:
        (WebCore):
        (WebCore::TouchpadFlingPlatformGestureCurve::create):
        (WebCore::position):
        (WebCore::velocity):
        (WebCore::TouchpadFlingPlatformGestureCurve::TouchpadFlingPlatformGestureCurve):
        (WebCore::TouchpadFlingPlatformGestureCurve::apply):
        * platform/TouchpadFlingPlatformGestureCurve.h:
        (TouchpadFlingPlatformGestureCurve):

2012-04-02  Zhenyao Mo  <zmo@google.com>

        Implement WebGLShaderPrecisionFormat
        https://bugs.webkit.org/show_bug.cgi?id=75925

        Reviewed by Kenneth Russell.

        Test: fast/canvas/webgl/shader-precision-format.html

        * CMakeLists.txt: Add new source files webglshaderprecisionformat.h/idl
        * DerivedSources.make: Ditto.
        * DerivedSources.pri: Ditto.
        * GNUmakefile.list.am: Ditto.
        * Target.pri: Ditto.
        * WebCore.gypi: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Ditto.
        * html/canvas/WebGLRenderingContext.cpp: Add getShaderPrecisionFormat.
        (WebCore):
        (WebCore::WebGLRenderingContext::getShaderPrecisionFormat):
        * html/canvas/WebGLRenderingContext.h: Ditto.
        (WebCore):
        (WebGLRenderingContext):
        * html/canvas/WebGLRenderingContext.idl: Ditto.
        * html/canvas/WebGLShaderPrecisionFormat.h: Added.
        (WebCore):
        (WebGLShaderPrecisionFormat):
        (WebCore::WebGLShaderPrecisionFormat::create):
        (WebCore::WebGLShaderPrecisionFormat::rangeMin):
        (WebCore::WebGLShaderPrecisionFormat::rangeMax):
        (WebCore::WebGLShaderPrecisionFormat::precision):
        (WebCore::WebGLShaderPrecisionFormat::WebGLShaderPrecisionFormat):
        * html/canvas/WebGLShaderPrecisionFormat.idl: Added.
        * page/DOMWindow.idl: Expose new type WebGLShaderPrecisionFormat for instanceof.
        * platform/graphics/GraphicsContext3D.h: Add getShaderPrecisionFormat().
        * platform/graphics/opengl/GraphicsContext3DOpenGL.cpp: Ditto.
        (WebCore::GraphicsContext3D::getShaderPrecisionFormat):
        (WebCore):
        * platform/graphics/opengl/GraphicsContext3DOpenGLES.cpp: Ditto.
        (WebCore::GraphicsContext3D::getShaderPrecisionFormat):
        (WebCore):
        * platform/graphics/qt/GraphicsContext3DQt.cpp: Ditto.
        (WebCore::GraphicsContext3D::getShaderPrecisionFormat):
        (WebCore):

2012-04-03  Zalan Bujtas  <zbujtas@gmail.com>

        Frame flattening: Do not restart layout from parent frame, when the parent is clean.
        https://bugs.webkit.org/show_bug.cgi?id=81114

        Reviewed by Antti Koivisto.

        When frame flattening is on, child frames try to mark the ancestors dirty
        to be able to restart layout from the main frame. Child frames mark the
        anchestors in FrameView::scheduleRelayout(). Marking fails when scheduling is disabled,
        for example when the iframe's <head> has blocking resource and the <body> has not
        been injected into the document.
        When marking ancestor fails, child frame layout needs to continue normally.
        It is expected to have layouts, when scheduling is enabled.

        Test: http/tests/misc/iframe-flattening-3level-nesting-with-blocking-resource.html

        * page/FrameView.cpp:
        (WebCore::FrameView::layout):
        (WebCore::FrameView::isInChildFrameWithFrameFlattening):
        (WebCore):
        (WebCore::FrameView::doLayoutWithFrameFlattening):
        * page/FrameView.h:
        (FrameView):

2012-04-03  Simon Fraser  <simon.fraser@apple.com>

        Avoid virtual method calls in the GraphicsLayer destructor
        https://bugs.webkit.org/show_bug.cgi?id=83067

        Reviewed by James Robinson.

        Code cleanup to avoid calling virtual methods in the GraphicsLayer
        destructor. Factor teardown code into a willBeDestroyed() method
        that is called from the most dervied class. willBeDestroyed()
        calls have to be chained. Fix the various ports' GraphicsLayer
        implementations.

        * platform/graphics/GraphicsLayer.cpp:
        (WebCore::GraphicsLayer::~GraphicsLayer):
        (WebCore):
        (WebCore::GraphicsLayer::willBeDestroyed):
        * platform/graphics/GraphicsLayer.h:
        (GraphicsLayer):
        * platform/graphics/blackberry/GraphicsLayerBlackBerry.cpp:
        (WebCore::GraphicsLayerBlackBerry::~GraphicsLayerBlackBerry):
        (WebCore):
        (WebCore::GraphicsLayerBlackBerry::willBeDestroyed):
        * platform/graphics/blackberry/GraphicsLayerBlackBerry.h:
        (GraphicsLayerBlackBerry):
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::~GraphicsLayerCA):
        (WebCore):
        (WebCore::GraphicsLayerCA::willBeDestroyed):
        * platform/graphics/ca/GraphicsLayerCA.h:
        (GraphicsLayerCA):
        * platform/graphics/chromium/GraphicsLayerChromium.cpp:
        (WebCore::GraphicsLayerChromium::~GraphicsLayerChromium):
        (WebCore):
        (WebCore::GraphicsLayerChromium::willBeDestroyed):
        * platform/graphics/chromium/GraphicsLayerChromium.h:
        (GraphicsLayerChromium):
        * platform/graphics/clutter/GraphicsLayerClutter.cpp:
        (WebCore::GraphicsLayerClutter::~GraphicsLayerClutter):
        * platform/graphics/efl/GraphicsLayerEfl.cpp:
        (WebCore::GraphicsLayerEfl::~GraphicsLayerEfl):
        * platform/graphics/qt/GraphicsLayerQt.cpp:
        (WebCore::GraphicsLayerQt::~GraphicsLayerQt):
        (WebCore):
        (WebCore::GraphicsLayerQt::willBeDestroyed):
        * platform/graphics/qt/GraphicsLayerQt.h:
        (GraphicsLayerQt):

2012-04-03  Daniel Cheng  <dcheng@chromium.org>

        Having a drop handler prevents navigation on drop even if event is not cancelled
        https://bugs.webkit.org/show_bug.cgi?id=79172

        Reviewed by Ryosuke Niwa.

        Only early return if the drop handler prevents the default action.
        http://trac.webkit.org/changeset/105396 introduced this issue when fixing some other aspects
        of DnD handling.

        Test: fast/events/drop-handler-should-not-stop-navigate.html

        * page/DragController.cpp:
        (WebCore::DragController::performDrag):
        (WebCore::DragController::concludeEditDrag): Remove the assert. By definition, we want to
            allow default actions to run now if they weren't explicitly canceled.

2012-04-03  Erik Arvidsson  <arv@chromium.org>

        [v8] Fix memory leak in V8LazyEventListener
        https://bugs.webkit.org/show_bug.cgi?id=83057

        Reviewed by Ojan Vafai.

        This also brings the V8 and JSC implementation closer. The timing when we first lookup
        the form element is now same in JSC and V8 (but different from Mozilla).

        This also clears the strings once the code has been parsed and the function created.

        Tests: fast/dom/inline-event-attributes-moved.html
               fast/dom/inline-event-attributes-release.html

        * bindings/v8/V8LazyEventListener.cpp:
        (WebCore::V8LazyEventListener::V8LazyEventListener):
        (WebCore::V8LazyEventListener::prepareListenerObject):
        * bindings/v8/V8LazyEventListener.h:
        (WebCore::V8LazyEventListener::create):
        (V8LazyEventListener):

2012-04-03  Michael Saboff  <msaboff@apple.com>

        Frequent crashes in JSC::parse in a worker thread when running regression tests
        https://bugs.webkit.org/show_bug.cgi?id=82660

        Reviewed by Geoffrey Garen.

        Initialize m_script to empty string.  Therefore if there isn't any script payload,
        the worker thread will see an empty string, not a null string.

        Re-enabling fast/workers/empty-worker-nocrash.html and 
        fast/workers/shared-worker-constructor.html tests as part of this patch.

        * workers/WorkerScriptLoader.cpp:
        (WebCore::WorkerScriptLoader::WorkerScriptLoader):

2012-04-03  James Robinson  <jamesr@chromium.org>

        [chromium] Enable sparkline FPS counter in threaded compositing mode
        https://bugs.webkit.org/show_bug.cgi?id=82959

        Reviewed by Adrienne Walker.

        This enables rendering the FPS counter sparkline when in threaded compositing mode. We don't currently have a
        way to draw text from the thread (since we can't interact with WebCore::Font objects from a non-main thread),
        but having a sparkline is still useful for judging framerate stability.

        There are no tests for the HUD since it's a developer-facing feature and not user-facing.

        * platform/graphics/chromium/cc/CCHeadsUpDisplay.cpp:
        (WebCore::CCHeadsUpDisplay::CCHeadsUpDisplay):
        (WebCore):
        (WebCore::CCHeadsUpDisplay::~CCHeadsUpDisplay):
        (WebCore::CCHeadsUpDisplay::initializeFonts):
        (WebCore::CCHeadsUpDisplay::enabled):
        (WebCore::CCHeadsUpDisplay::showPlatformLayerTree):
        (WebCore::CCHeadsUpDisplay::draw):
        (WebCore::CCHeadsUpDisplay::drawHudContents):
        (WebCore::CCHeadsUpDisplay::drawFPSCounter):
        (WebCore::CCHeadsUpDisplay::drawFPSCounterText):
        (WebCore::CCHeadsUpDisplay::drawPlatformLayerTree):
        * platform/graphics/chromium/cc/CCHeadsUpDisplay.h:
        (CCHeadsUpDisplay):
        * platform/graphics/chromium/cc/CCLayerTreeHost.cpp:
        (WebCore::CCLayerTreeHost::initialize):

2012-04-02  Robert Hogan  <robert@webkit.org>

        CSS 2.1 failure: at-import-009.htm fails
        https://bugs.webkit.org/show_bug.cgi?id=82921

        Reviewed by Antti Koivisto.

        This fixes at-import-009.htm only, the other tests already passed.

        Tests: css2.1/20110323/at-import-001.htm
               css2.1/20110323/at-import-002.htm
               css2.1/20110323/at-import-003.htm
               css2.1/20110323/at-import-004.htm
               css2.1/20110323/at-import-005.htm
               css2.1/20110323/at-import-006.htm
               css2.1/20110323/at-import-007.htm
               css2.1/20110323/at-import-009.htm
               css2.1/20110323/at-import-010.htm
               css2.1/20110323/at-import-011.htm

        * css/CSSGrammar.y: ignore empty '@media;' and '@charset;' declarations

2012-04-03  Shawn Singh  <shawnsingh@chromium.org>

        [chromium] remove dead function declarations in RenderSurfacechromium
        https://bugs.webkit.org/show_bug.cgi?id=82086

        Reviewed by James Robinson.

        No tests needed, no change in behavior.

        * platform/graphics/chromium/RenderSurfaceChromium.h:
        (RenderSurfaceChromium):

2012-04-03  Jia Pu  <jpu@apple.com>

        Rename GraphicsContext::drawLineForTextChecking() to GraphicsContext::drawLineForDocumentMarker()
        https://bugs.webkit.org/show_bug.cgi?id=82946

        Reviewed by Enrica Casucci.

        On OS X, we draw similar underline on dictated text that has alternative text. We rename
        this function, so that we can reuse it for dictation underline.

        No new tests, since there's no change of functionality. 

        * platform/graphics/GraphicsContext.h:
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::drawLineForDocumentMarker):
        * platform/graphics/mac/GraphicsContextMac.mm:
        (WebCore::GraphicsContext::drawLineForDocumentMarker):
        * platform/graphics/openvg/GraphicsContextOpenVG.cpp:
        (WebCore::GraphicsContext::drawLineForDocumentMarker):
        * platform/graphics/qt/GraphicsContextQt.cpp:
        (WebCore::GraphicsContext::drawLineForDocumentMarker):
        * platform/graphics/skia/GraphicsContextSkia.cpp:
        (WebCore::GraphicsContext::drawLineForDocumentMarker):
        * platform/graphics/win/GraphicsContextCGWin.cpp:
        (WebCore::GraphicsContext::drawLineForDocumentMarker):
        * platform/graphics/wince/GraphicsContextWinCE.cpp:
        (WebCore::GraphicsContext::drawLineForDocumentMarker):
        * platform/graphics/wx/GraphicsContextWx.cpp:
        (WebCore::GraphicsContext::drawLineForDocumentMarker):
        * rendering/InlineTextBox.cpp:
        (WebCore::lineStyleForMarkerType):
        (WebCore::InlineTextBox::paintSpellingOrGrammarMarker):

2012-04-03  Jer Noble  <jer.noble@apple.com>

        ESC key in full screen does not result in webkitFullScreenChange event.
        https://bugs.webkit.org/show_bug.cgi?id=82755
        <rdar://problem/11093513>

        Reviewed by Eric Carlson.

        * WebCore.exp.in: Export the WebCore::Document::webkitCancelFullScreen() symbol.

2012-04-03  Ryosuke Niwa  <rniwa@webkit.org>

        REGRESSION(r80439): Crash in StylePropertySet::borderSpacingValue
        https://bugs.webkit.org/show_bug.cgi?id=83000

        Reviewed by Andreas Kling.

        Fixed the crash by exiting early in StylePropertySet::borderSpacingValue when
        the vertical value is set.

        Test: fast/css/border-spacing-without-vertical-value.html

        * css/StylePropertySet.cpp:
        (WebCore::StylePropertySet::borderSpacingValue):

2012-04-03  Alexis Menard  <alexis.menard@openbossa.org>

        Unreviewed ASSERT fix on Chromium bots (in debug).

        It appears that http://trac.webkit.org/changeset/113031 caused ASSERT in CSSParser::parseFillProperty.
        I added the ASSERT to fix the compilation about values not handled in the switch. I supposed the callers
        were only property ids handled in the switch case. It wasn't the case, so I'm restoring the old behavior
        while keeping the code to compile (it still need a deeper investigation but let fix the bots quickly).

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

2012-04-03  Alexis Menard  <alexis.menard@openbossa.org>

        [Part 3] We should use CSSPropertyID rather than integers when manipulating CSS property ids.
        https://bugs.webkit.org/show_bug.cgi?id=83032

        Reviewed by Kentaro Hara.

        CSSPropertyID enum holds all the CSS property ids but many parts of WebKit treat the ids
        as integers. While it's not incorrect it is nicer to use the enum as a parameter of
        functions manipulating property ids, as we ensure that the value passed will be an
        existing value. This patch clean up some remaining part of code.

        No new tests : There should be no behavior change in this patch.

        * bindings/js/JSCSSStyleDeclarationCustom.cpp:
        (CSSPropertyInfo):
        (WebCore::cssPropertyIDForJSCSSPropertyName):
        * bindings/v8/custom/V8CSSStyleDeclarationCustom.cpp:
        (CSSPropertyInfo):
        (WebCore::cssPropertyInfo):
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::getPositionOffsetValue):
        (WebCore::counterToCSSValue):
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValidPrimitive):
        Remove the parameter's name from the h file as it doesn't follow the style and also because the
        name was simply wrong we don't expect a propId here but an indentifier. Make it clear in the
        cpp file too.
        * css/CSSParser.h:
        (CSSParser):
        * page/animation/AnimationBase.cpp:
        (WebCore::addPropertyWrapper):

2012-04-03  Andrey Kosyakov  <caseq@chromium.org>

        Web Inspector: remove unused references to TimelineCalculator
        https://bugs.webkit.org/show_bug.cgi?id=83025

        Reviewed by Yury Semikhatsky.

        * inspector/front-end/TimelinePanel.js:
        (WebInspector.TimelinePanel.prototype._refreshRecords):
        (WebInspector.TimelinePanel.prototype._showPopover):
        (WebInspector.TimelineRecordListRow.prototype.update):
        * inspector/front-end/TimelinePresentationModel.js:
        (WebInspector.TimelinePresentationModel.Record.prototype.generatePopupContent):

2012-04-03  Mark Pilgrim  <pilgrim@chromium.org>

        Call incrementStatsCounter directly
        https://bugs.webkit.org/show_bug.cgi?id=83023

        Reviewed by Kentaro Hara.

        * bindings/v8/V8Proxy.h:
        * platform/chromium/PlatformSupport.h:
        (PlatformSupport):

2012-04-03  Sami Kyostila  <skyostil@chromium.org>

        [chromium] Canvas2DLayerChromium::updateCompositorResources should flush after copying
        https://bugs.webkit.org/show_bug.cgi?id=83013

        Reviewed by Stephen White.

        We need to flush the GPU command queue after copying the canvas back
        buffer into the front buffer. Otherwise the copy might be delayed to a
        point where new contents have already been drawn into the back buffer,
        leading to flickering.

        Added test to Canvas2DLayerChromiumTest.

        * platform/graphics/chromium/Canvas2DLayerChromium.cpp:
        (WebCore::Canvas2DLayerChromium::updateCompositorResources):

2012-04-03  Alexis Menard  <alexis.menard@openbossa.org>

        [Part 2] We should use CSSPropertyID rather than integers when manipulating CSS property ids.
        https://bugs.webkit.org/show_bug.cgi?id=82977

        Reviewed by Andreas Kling.

        CSSPropertyID enum holds all the CSS property ids but many parts of WebKit treat the ids
        as integers. While it's not incorrect it is nicer to use the enum as a parameter of
        functions manipulating property ids, as we ensure that the value passed will be an
        existing value. Almost everything has been changed with the exception of the Animation related
        classes which can be done in a following patch.

        No new tests : There should be no behavior change in this patch.

        * WebCore.exp.in:
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::cssText):
        (WebCore::CSSComputedStyleDeclaration::valueForShadow):
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        (WebCore::logUnimplementedPropertyID):
        (WebCore::CSSComputedStyleDeclaration::getPropertyValue):
        (WebCore::CSSComputedStyleDeclaration::item):
        * css/CSSComputedStyleDeclaration.h:
        (CSSComputedStyleDeclaration):
        * css/CSSGrammar.y:
        * css/CSSParser.cpp:
        (WebCore::CSSParser::CSSParser):
        (WebCore::isColorPropertyID):
        (WebCore::parseColorValue):
        (WebCore::isSimpleLengthPropertyID):
        (WebCore::parseSimpleLengthValue):
        (WebCore::isValidKeywordPropertyAndValue):
        (WebCore::isKeywordPropertyID):
        (WebCore::parseKeywordValue):
        (WebCore::CSSParser::parseValue):
        (WebCore::CSSParser::addProperty):
        (WebCore::CSSParser::parseFillShorthand):
        (WebCore::CSSParser::parseShorthand):
        (WebCore::CSSParser::parse4Values):
        (WebCore::CSSParser::parsePage):
        (WebCore::CSSParser::parseSize):
        (WebCore::CSSParser::parseQuotes):
        (WebCore::CSSParser::parseContent):
        (WebCore::CSSParser::parseFillSize):
        (WebCore::CSSParser::parseFillProperty):
        (WebCore::CSSParser::parseAnimationProperty):
        (WebCore::CSSParser::parseGridTrackList):
        (WebCore::CSSParser::parseDashboardRegions):
        (WebCore::CSSParser::parseClipShape):
        (WebCore::CSSParser::parseShadow):
        (WebCore::CSSParser::parseReflect):
        (WebCore::BorderImageParseContext::commitBorderImageProperty):
        (WebCore::CSSParser::parseBorderImage):
        (WebCore::CSSParser::parseBorderImageSlice):
        (WebCore::CSSParser::parseBorderRadius):
        (WebCore::CSSParser::parseCounter):
        (WebCore::CSSParser::parseFlowThread):
        (WebCore::CSSParser::parseRegionThread):
        (WebCore::CSSParser::parseTransformOrigin):
        (WebCore::CSSParser::parsePerspectiveOrigin):
        * css/CSSParser.h:
        (CSSParser):
        (WebCore::ShorthandScope::ShorthandScope):
        * css/CSSProperty.cpp:
        (WebCore::resolveToPhysicalProperty):
        (WebCore::CSSProperty::resolveDirectionAwareProperty):
        (WebCore::CSSProperty::isInheritedProperty):
        * css/CSSProperty.h:
        (WebCore::CSSProperty::CSSProperty):
        (CSSProperty):
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::collectMatchingRulesForList):
        * css/CSSStyleSelector.h:
        (CSSStyleSelector):
        * css/PropertySetCSSStyleDeclaration.cpp:
        (WebCore::PropertySetCSSStyleDeclaration::setProperty):
        (WebCore::PropertySetCSSStyleDeclaration::removeProperty):
        * css/SVGCSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getSVGPropertyCSSValue):
        * css/SVGCSSParser.cpp:
        (WebCore::CSSParser::parseSVGValue):
        * css/SVGCSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applySVGProperty):
        * css/StylePropertySet.cpp:
        (WebCore::StylePropertySet::getPropertyCSSValue):
        (WebCore::StylePropertySet::removeShorthandProperty):
        (WebCore::StylePropertySet::removeProperty):
        (WebCore::StylePropertySet::setProperty):
        (WebCore::StylePropertySet::asText):
        (WebCore::StylePropertySet::findPropertyWithId):
        (WebCore::StylePropertySet::removeEquivalentProperties):
        * css/StylePropertySet.h:
        (StylePropertySet):
        * css/StylePropertyShorthand.cpp:
        (WebCore::shorthandForProperty):
        * css/StylePropertyShorthand.h:
        (WebCore):
        * dom/StyledElement.cpp:
        (WebCore::StyledElement::setInlineStyleProperty):
        (WebCore::StyledElement::removeInlineStyleProperty):
        (WebCore::StyledElement::addPropertyToAttributeStyle):
        * dom/StyledElement.h:
        (StyledElement):
        (WebCore::StyledElement::addPropertyToAttributeStyle):
        * editing/EditingStyle.cpp:
        (HTMLElementEquivalent):
        (WebCore::EditingStyle::EditingStyle):
        (WebCore::EditingStyle::setProperty):
        * editing/EditingStyle.h:
        (WebCore::EditingStyle::create):
        (EditingStyle):
        * editing/Editor.cpp:
        (WebCore::Editor::selectionStartHasStyle):
        (WebCore::Editor::selectionHasStyle):
        * editing/Editor.h:
        (Editor):
        * editing/EditorCommand.cpp:
        (WebCore::executeApplyStyle):
        (WebCore::executeToggleStyleInList):
        (WebCore::executeToggleStyle):
        (WebCore::executeApplyParagraphStyle):
        (WebCore::stateStyle):
        * editing/markup.cpp:
        (WebCore):
        (WebCore::propertyMissingOrEqualToNone):
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::addHTMLLengthToStyle):
        (WebCore::HTMLElement::addHTMLColorToStyle):
        * html/HTMLElement.h:
        (HTMLElement):
        * inspector/InspectorStyleSheet.cpp:
        (WebCore::InspectorStyle::styleWithProperties):
        * page/animation/AnimationBase.cpp:
        (WebCore::addShorthandProperties):
        * svg/SVGFontFaceElement.cpp:
        (WebCore::cssPropertyIdForSVGAttributeName):
        (WebCore::SVGFontFaceElement::parseAttribute):
        * svg/SVGStyledElement.cpp:
        (WebCore::mapAttributeToCSSProperty):
        (WebCore::SVGStyledElement::cssPropertyIdForSVGAttributeName):
        (WebCore::SVGStyledElement::collectStyleForAttribute):
        (WebCore::SVGStyledElement::svgAttributeChanged):
        (WebCore::SVGStyledElement::getPresentationAttribute):
        * svg/SVGStyledElement.h:
        (WebCore):
        (SVGStyledElement):

2012-04-03  Levi Weintraub  <leviw@chromium.org>

        Revert RenderTheme paint and layout functions to ints
        https://bugs.webkit.org/show_bug.cgi?id=82196

        Reviewed by Julien Chaffraix.

        When dealing with object that are rendered outside of WebCore, we do all necessary pixel snapping
        before passing coordinates to the external code. RenderTheme encompasses a set of objects whose
        rendering is influenced by the platform. This change reverts the interface between this platform
        code and WebCore to be integers.

        Some platforms, such as Mac, use sub-pixel units for layout and rendering, but it's still not
        desirable to pass sub-pixel values to these API's, because ultimately we'll render these objects
        at whole-pixel values to avoid anti-aliasing.

        Marking touched overridden virtual functions as OVERRIDE. There are many more to update.

        No new tests. No change in behavior.

        * platform/graphics/FractionalLayoutRect.h:
        (WebCore::FractionalLayoutRect::pixelSnappedLocation): Convenience function.
        (WebCore::FractionalLayoutRect::pixelSnappedSize): Ditto.
        (FractionalLayoutRect):
        * platform/graphics/IntRect.h:
        (WebCore::IntRect::pixelSnappedLocation): Temporary mirrors to the functions of the same name on
        FractionalLayoutRect.
        (WebCore::IntRect::pixelSnappedSize): Ditto.
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::paintBoxDecorations): Adding a local pixel snapped paint rect to avoid
        repeated pixel snapping.
        * rendering/RenderBox.h:
        (WebCore::RenderBox::absoluteContentBox): Reverting to integers since this represents on-screen
        coordinates
        (WebCore::RenderBox::pixelSnappedSize): Convenience method.
        * rendering/RenderMediaControls.cpp:
        (WebCore::RenderMediaControls::volumeSliderOffsetFromMuteButton): This static function is only called
        from RenderTheme platform code. Changing it to operate on pixel snapped values since we don't want
        to pipe LayoutUnits through that code.
        * rendering/RenderMeter.cpp:
        (WebCore::RenderMeter::computeLogicalWidth): Changing to feed pixel snapped values into the platform
        code to properly determine the resulting meter size.
        (WebCore::RenderMeter::computeLogicalHeight): Ditto.
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::paint):
        (WebCore::RenderTheme::volumeSliderOffsetFromMuteButton):
        (WebCore::RenderTheme::adjustRepaintRect):
        (WebCore::RenderTheme::meterSizeForBounds):
        * rendering/RenderTheme.h:
        (RenderTheme):
        (WebCore::RenderTheme::paintCapsLockIndicator):
        * rendering/RenderThemeChromiumMac.h:
        (RenderThemeChromiumMac):
        * rendering/RenderThemeChromiumSkia.cpp:
        (WebCore::RenderThemeChromiumSkia::convertToPaintingRect):
        (WebCore::RenderThemeChromiumSkia::paintSearchFieldCancelButton):
        (WebCore::RenderThemeChromiumSkia::paintSearchFieldResultsDecoration):
        (WebCore::RenderThemeChromiumSkia::paintSearchFieldResultsButton):
        * rendering/RenderThemeChromiumSkia.h:
        * rendering/RenderThemeMac.h:
        (RenderThemeMac):
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::adjustRepaintRect):
        (WebCore::RenderThemeMac::inflateRect):
        (WebCore::RenderThemeMac::convertToPaintingRect):
        (WebCore::RenderThemeMac::setControlSize):
        (WebCore::RenderThemeMac::paintCapsLockIndicator):
        (WebCore::RenderThemeMac::paintMenuList):
        (WebCore::RenderThemeMac::meterSizeForBounds):
        (WebCore::RenderThemeMac::setPopupButtonCellState):
        (WebCore::RenderThemeMac::paintSearchFieldCancelButton):
        (WebCore::RenderThemeMac::volumeSliderOffsetFromMuteButton):
        * rendering/RenderThemeWin.cpp:
        (WebCore::RenderThemeWin::volumeSliderOffsetFromMuteButton):
        * rendering/RenderThemeWin.h:
        (RenderThemeWin):

2012-03-29  Joseph Pecoraro  <joepeck@webkit.org> and Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        Add a Generic WebSocket Server.
        https://bugs.webkit.org/show_bug.cgi?id=73093

        Reviewed by Simon Hausmann.

        Allow SocketStreamHandle for the Qt port to take an existing QTcpSocket in its constructor.

        * platform/network/qt/SocketStreamHandle.h:
        (WebCore::SocketStreamHandle::create):
        (SocketStreamHandle):
        * platform/network/qt/SocketStreamHandlePrivate.h:
        (SocketStreamHandlePrivate):
        * platform/network/qt/SocketStreamHandleQt.cpp:
        (WebCore::SocketStreamHandlePrivate::SocketStreamHandlePrivate):
        (WebCore):
        (WebCore::SocketStreamHandlePrivate::initConnections):
        (WebCore::SocketStreamHandlePrivate::close):
        (WebCore::SocketStreamHandle::SocketStreamHandle):

2012-04-01  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        Expose reusable WebSocket code for WebSocketServer.
        https://bugs.webkit.org/show_bug.cgi?id=73852

        Reviewed by Kent Tamura.

        Keep the majority the web socket handshake HTTP request and response logic
        inside WebSocketHandshake and expose it through WebSocketFrame to make it
        available for the web socket server implementation.

        This also re-add the masking code that was removed in r111829 since it is
        needed for the server implementation.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Modules/websockets/WebSocketChannel.cpp:
        (WebCore):
        (WebCore::WebSocketChannel::processFrame): now using WebSocketChannel::parseFrame. Extracted the !frame.masked check.
        (WebCore::WebSocketChannel::sendFrame):
        * Modules/websockets/WebSocketChannel.h:
        (WebSocketChannel):
        * Modules/websockets/WebSocketFrame.cpp: Added.
        (WebCore):
        (WebCore::WebSocketFrame::needsExtendedLengthField):
        (WebCore::WebSocketFrame::parseFrame): moved from WebSocketChannel::parseFrame.
        (WebCore::appendMaskedFramePayload):
        (WebCore::WebSocketFrame::makeFrameData): moved from makeFrameData in WebSocketChannel.cpp.
        (WebCore::WebSocketFrame::WebSocketFrame): moved from the header.
        * Modules/websockets/WebSocketFrame.h:
        (WebSocketFrame):
        * Modules/websockets/WebSocketHandshake.cpp:
        (WebCore::WebSocketHandshake::getExpectedWebSocketAccept): expose this object-static function.
        * Modules/websockets/WebSocketHandshake.h:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:

2012-03-29  Joseph Pecoraro  <joepeck@webkit.org> and Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        Add Generic HTTP Request Class. Generalized HTTP Parsing.
        https://bugs.webkit.org/show_bug.cgi?id=73092

        Reviewed by Simon Hausmann.

        A WebSocket server will need to read HTTP Requests before upgrading
        to WebSocket framing. This patch creates a cross-platform HTTPRequest
        class. Since some of this was already done in WebSocket code:

          - the header parsing code was extracted and put into HTTPParsers.cpp
          - WebSocketHandshakeRequest subclasses HTTPRequest
          - WebSocket code was refactored for these changes

        Refactoring is covered by existing http/tests/websocket tests.

        * CMakeLists.txt:
        * GNUmakefile.list.am:

        * Modules/websockets/WebSocketChannel.cpp:
        (WebCore::WebSocketChannel::didOpenSocketStream):

          Extract the HTTP Header parsing out of WebSocketHandshake and
          put it into HTTP Parsers. Now make use of the generic parsing.

        * Modules/websockets/WebSocketHandshake.cpp:
        (WebCore):
        (WebCore::trimInputSample):
        (WebCore::WebSocketHandshake::clientHandshakeRequest): switch to RefCounted HandshakeRequest.
        (WebCore::WebSocketHandshake::readStatusLine):
        (WebCore::WebSocketHandshake::readHTTPHeaders): use generic HTTPParsers parsing.
        * Modules/websockets/WebSocketHandshake.h: switch to RefCounted HandshakeRequest.

          WebSocketHandshakeRequest is a specialization of an HTTPRequest.
          Much of its original code was abstracted into HTTPRequest, and
          this is now a subclass with WebSocket key information.

        * Modules/websockets/WebSocketHandshakeRequest.cpp:
        (WebCore::WebSocketHandshakeRequest::WebSocketHandshakeRequest): initialize now calls super.
        * Modules/websockets/WebSocketHandshakeRequest.h:
        (WebCore::WebSocketHandshakeRequest::create): switch to being ref counted like HTTPRequest.
        (WebSocketHandshakeRequest):

        * Target.pri:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:

          Add generic HTTP Request parsing functions to HTTPParsers.cpp.
          Use out parameters to get values after parsing.

        * platform/network/HTTPParsers.cpp:
        (WebCore):
        (WebCore::trimInputSample): taken from WebSocket parsing.
        (WebCore::parseHTTPRequestLine): new code, parse a request line.
        (WebCore::parseHTTPHeaders): taken from previous WebSocket parsing. Algorithm unchanged.
        (WebCore::parseHTTPRequestBody): new code, just copy the date into the provided buffer.
        * platform/network/HTTPParsers.h:
        (WebCore):

          This adds a general HTTPRequest class. Accessors for the
          request method, url, httpVersion, headers, and data. You can
          create an HTTPRequest using the constructor, or parse one
          from a data buffer, such as one read from a socket.

        * platform/network/HTTPRequest.cpp: Added.
        (WebCore):
        (WebCore::HTTPRequest::parseHTTPRequestFromBuffer): create an HTTPRequest by parsing data in a buffer.
        (WebCore::HTTPRequest::parseRequestLine): helper to initialize members while parsing.
        (WebCore::HTTPRequest::parseHeaders): helper to initialize members while parsing.
        (WebCore::HTTPRequest::parseRequestBody): helper to initialize members while parsing.
        (WebCore::HTTPRequest::HTTPRequest):
        (WebCore::HTTPRequest::~HTTPRequest):
        * platform/network/HTTPRequest.h: Added.
        (WebCore):
        (HTTPRequest):
        (WebCore::HTTPRequest::create): create an empty request, or specify details.
        (WebCore::HTTPRequest::requestMethod):
        (WebCore::HTTPRequest::setRequestMethod):
        (WebCore::HTTPRequest::url):
        (WebCore::HTTPRequest::setURL):
        (WebCore::HTTPRequest::body):
        (WebCore::HTTPRequest::headerFields):
        (WebCore::HTTPRequest::addHeaderField):

2012-04-03  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        [Qt] Add a missing inspector front-end image to resources.

        Reviewed by Simon Hausmann.

        * inspector/front-end/WebKit.qrc:

2012-04-03  Dominik Röttsches  <dominik.rottsches@linux.intel.com>

        Soup HTTP backend does not send Content-Length in certain cases
        https://bugs.webkit.org/show_bug.cgi?id=82036

        Reviewed by Gustavo Noronha Silva.

        Telling soup explicitly when to send content-length header
        in POST & PUT cases in order to align with e.g. Chromium and FF.

        No new tests, already covered by *methods*.html in
        http/tests/xmlhttprequest/.

        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::startHTTPRequest): Special handling for POST & PUT.

2012-04-03  Eric Seidel  <eric@webkit.org>

        Simplify CSSStyleSelector constructor through the use of a helper function
        https://bugs.webkit.org/show_bug.cgi?id=82940

        Reviewed by Andreas Kling.

        No behavior change, thus no tests.

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::CSSStyleSelector):
        (WebCore):
        (WebCore::CSSStyleSelector::addAuthorRulesAndCollectUserRulesFromSheets):
        * css/CSSStyleSelector.h:
        (CSSStyleSelector):

2012-04-03  Yury Semikhatsky  <yurys@chromium.org>

        Web Inspector: Database::Database::id field in the protocol should have type integer not string
        https://bugs.webkit.org/show_bug.cgi?id=83003

        Reviewed by Pavel Feldman.

        Changed DOM storage and database identifier type from int to String. This
        is aligned with other domains and gives us more flexibility.

        * bindings/js/JSInjectedScriptHostCustom.cpp:
        (WebCore::JSInjectedScriptHost::databaseId):
        (WebCore::JSInjectedScriptHost::storageId):
        * bindings/v8/custom/V8InjectedScriptHostCustom.cpp:
        (WebCore::V8InjectedScriptHost::databaseIdCallback):
        (WebCore::V8InjectedScriptHost::storageIdCallback):
        * inspector/InjectedScriptHost.cpp:
        (WebCore::InjectedScriptHost::databaseIdImpl):
        (WebCore::InjectedScriptHost::storageIdImpl):
        * inspector/InjectedScriptHost.h:
        (InjectedScriptHost):
        * inspector/InjectedScriptHost.idl:
        * inspector/Inspector.json:
        * inspector/InspectorDOMStorageAgent.cpp:
        (WebCore::InspectorDOMStorageAgent::getDOMStorageEntries):
        (WebCore::InspectorDOMStorageAgent::setDOMStorageItem):
        (WebCore::InspectorDOMStorageAgent::removeDOMStorageItem):
        (WebCore::InspectorDOMStorageAgent::storageId):
        (WebCore::InspectorDOMStorageAgent::getDOMStorageResourceForId):
        * inspector/InspectorDOMStorageAgent.h:
        (InspectorDOMStorageAgent):
        * inspector/InspectorDOMStorageResource.cpp:
        (WebCore::InspectorDOMStorageResource::InspectorDOMStorageResource):
        (WebCore::InspectorDOMStorageResource::bind):
        * inspector/InspectorDOMStorageResource.h:
        (WebCore::InspectorDOMStorageResource::id):
        (InspectorDOMStorageResource):
        * inspector/InspectorDatabaseAgent.cpp:
        (WebCore::InspectorDatabaseAgent::getDatabaseTableNames):
        (WebCore::InspectorDatabaseAgent::executeSQL):
        (WebCore::InspectorDatabaseAgent::databaseId):
        (WebCore::InspectorDatabaseAgent::databaseForId):
        * inspector/InspectorDatabaseAgent.h:
        (InspectorDatabaseAgent):
        * inspector/InspectorDatabaseResource.cpp:
        (WebCore::InspectorDatabaseResource::InspectorDatabaseResource):
        (WebCore::InspectorDatabaseResource::bind):
        * inspector/InspectorDatabaseResource.h:
        (WebCore::InspectorDatabaseResource::id):
        (InspectorDatabaseResource):

2012-04-03  Nikolas Zimmermann  <nzimmermann@rim.com>

        Enable animVal support for SVGAnimatedEnumeration
        https://bugs.webkit.org/show_bug.cgi?id=82459

        Rubber-stamped by Zoltan Herczeg.

        Make highestEnumValue() return an unsigned to avoid casting in SVGAnimatedEnumerationPropertyTearOff.
        Fixes the last chromium build failure on the debug carnary bots.

        * svg/SVGComponentTransferFunctionElement.h:
        * svg/SVGFEBlendElement.h:
        * svg/SVGFEColorMatrixElement.h:
        * svg/SVGFECompositeElement.h:
        * svg/SVGFEConvolveMatrixElement.h:
        * svg/SVGFEDisplacementMapElement.h:
        * svg/SVGFEMorphologyElement.h:
        * svg/SVGFETurbulenceElement.h:
        * svg/SVGGradientElement.h:
        * svg/SVGMarkerElement.h:
        * svg/SVGTextContentElement.h:
        * svg/SVGTextPathElement.h:
        * svg/SVGUnitTypes.h:
        * svg/properties/SVGAnimatedEnumerationPropertyTearOff.h:
        (WebCore::SVGAnimatedEnumerationPropertyTearOff::setBaseVal):

2012-04-01  Nikolas Zimmermann  <nzimmermann@rim.com>

        Animate animatedPoints instead of points for SVGPoly*Elements
        https://bugs.webkit.org/show_bug.cgi?id=82844

        Reviewed by Dirk Schulze.

        When the points attribute of a SVGPoly*Element is animated, we should animate
        the 'animatedPoints' SVG DOM property, not the 'points' property, which corresponds
        to the "baseVal". Fix that, now only the 'd' attribute for SVGPathElement is incorrect,
        everything else is moved to the new animVal concept!

        * svg/SVGAnimatedPointList.cpp:
        (WebCore::SVGAnimatedPointListAnimator::startAnimValAnimation):
        (WebCore::SVGAnimatedPointListAnimator::stopAnimValAnimation):
        (WebCore::SVGAnimatedPointListAnimator::resetAnimValToBaseVal):
        (WebCore::SVGAnimatedPointListAnimator::animValWillChange):
        (WebCore::SVGAnimatedPointListAnimator::animValDidChange):
        * svg/SVGAnimatedPointList.h:
        (SVGAnimatedPointListAnimator):
        * svg/SVGAnimatedType.cpp:
        (WebCore::SVGAnimatedType::valueAsString):
        (WebCore::SVGAnimatedType::setValueAsString):
        (WebCore::SVGAnimatedType::supportsAnimVal):
        * svg/SVGPolyElement.cpp:
        (WebCore::SVGPolyElement::parseAttribute):
        (WebCore::SVGPolyElement::lookupOrCreatePointsWrapper):
        (WebCore::SVGPolyElement::points):
        (WebCore::SVGPolyElement::animatedPoints):

2012-04-03  Nikolas Zimmermann  <nzimmermann@rim.com>

        Not reviewed. Next chromium build fix, this time for real :-)

        * svg/properties/SVGAnimatedEnumerationPropertyTearOff.h:
        (WebCore::SVGAnimatedEnumerationPropertyTearOff::setBaseVal): Cast highestEnumValue to unsigned.

2012-04-03  Nikolas Zimmermann  <nzimmermann@rim.com>

        Not reviewed. Attempt to fix chromium build.

        * svg/properties/SVGAnimatedEnumerationPropertyTearOff.h: Unsigned is always >= 0 - only check if its 0 here.
        (WebCore::SVGAnimatedEnumerationPropertyTearOff::setBaseVal):

2012-04-03  Alexander Pavlov  <apavlov@chromium.org>

        Unreviewed, rolling out r112954 and r112969.
        http://trac.webkit.org/changeset/112954
        http://trac.webkit.org/changeset/112969
        https://bugs.webkit.org/show_bug.cgi?id=79172

        Hits "ASSERTION FAILED: !m_isHandlingDrag" in DnD-related
        tests on Debug bots

        * page/DragController.cpp:
        (WebCore::DragController::performDrag):

2012-04-03  Nikolas Zimmermann  <nzimmermann@rim.com>

        Enable animVal support for SVGAnimatedEnumeration
        https://bugs.webkit.org/show_bug.cgi?id=82459

        Reviewed by Dirk Schulze.

        Enable animVal support for the last missing SVG DOM primitive: SVGAnimatedEnumeration.
        It's a bit more involved than the others as we have to differentiate between the various
        enumerations to use the correct SVGPropertyTraits<MyEnum>::fromString() code-path.

        One SVGAnimatedEnumeration property in the SVG DOM is special: SVGAnimatedEnumeration orientType
        from SVGMarkerElement. SVGMarkerElement exposes both the orientType and SVGAnimatedAngle orientAngle
        SVG DOM properties and both get mapped to the same SVGNames::orientAttr ("orient" XML attribute).
        That means that any animation of the orientAttr has to update both orientType & orientAngle.

        This is a not a new requirement, we already support attributes like 'stdDeviation' from
        SVGFEGaussianBlurElement, which get mapped to multiple SVG DOM objects: SVGAnimatedInteger stdDeviationX/Y.
        The difference is that <integer-optional-integer> or <number-optional-number> animations use the
        same type in the pair<xxx, xxx> (eg. both int, or both float). The 'orient' attribute needs to be
        mapped to pair<xxx, yyy> types. Generalize the templates in SVGAnimatedTypeAnimator to support that.

        Example:
        <marker id="someMarkerElement" orient="45deg"/>
        <animate fill="remove" begin="1s" dur="2s" from="90deg" to="auto" attributeName="orient" xlink:href="#someMarkerElement"/>

        at 0s: someMarkerElement.orientType.animVal = SVGMarkerElement.SVG_MARKER_ORIENT_ANGLE
               someMarkerElement.orientAngle.animVal.value = 45

               someMarkerElement.orientType.baseVal = SVGMarkerElement.SVG_MARKER_ORIENT_ANGLE
               someMarkerElement.orientAngle.baseVal.value = 45

        at 1s: someMarkerElement.orientType.animVal = SVGMarkerElement.SVG_MARKER_ORIENT_ANGLE
               someMarkerElement.orientAngle.animVal.value = 90

               someMarkerElement.orientType.baseVal = SVGMarkerElement.SVG_MARKER_ORIENT_ANGLE
               someMarkerElement.orientAngle.baseVal.value = 45

        at 2s: someMarkerElement.orientType.animVal = SVGMarkerElement.SVG_MARKER_ORIENT_AUTO
               someMarkerElement.orientAngle.animVal.value = 0

               someMarkerElement.orientType.baseVal = SVGMarkerElement.SVG_MARKER_ORIENT_ANGLE
               someMarkerElement.orientAngle.baseVal.value = 45

         > 3s: someMarkerElement.orientType.animVal = SVGMarkerElement.SVG_MARKER_ORIENT_ANGLE
               someMarkerElement.orientAngle.animVal.value = 45

               someMarkerElement.orientType.baseVal = SVGMarkerElement.SVG_MARKER_ORIENT_ANGLE
               someMarkerElement.orientAngle.baseVal.value = 45

        We need to map the 'orient' attribute to a pair<SVGAngle, unsigned short> type, in order
        to track both orientAngle & orientType at the same type. Fortunately SVGAnimatedAngle
        is only used in the SVG DOM for SVGMarkerElements orientAngle property. We can directly
        switch SVGAnimatedAngleAnimator to the new pair<SVGAngle, unsigned short> type instead
        of having to introduce a special SVGAnimatedAngleAndEnumerationAnimator.

        Added tests for all SVGAnimatedEnumeration properties in the SVG DOM, including an extensive set of tests
        for the synchronization of the orientType / orientAngle properties, when they get animated.

        Tests: svg/animations/animate-marker-orient-from-angle-to-angle.html
               svg/animations/animate-marker-orient-from-angle-to-auto.html
               svg/animations/animate-marker-orient-to-angle.html
               svg/animations/svgenum-animation-1.html
               svg/animations/svgenum-animation-10.html
               svg/animations/svgenum-animation-11.html
               svg/animations/svgenum-animation-12.html
               svg/animations/svgenum-animation-13.html
               svg/animations/svgenum-animation-2.html
               svg/animations/svgenum-animation-3.html
               svg/animations/svgenum-animation-4.html
               svg/animations/svgenum-animation-5.html
               svg/animations/svgenum-animation-6.html
               svg/animations/svgenum-animation-7.html
               svg/animations/svgenum-animation-8.html
               svg/animations/svgenum-animation-9.html

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.xcodeproj/project.pbxproj:
        * svg/SVGAllInOne.cpp:
        * svg/SVGAnimateElement.cpp:
        (WebCore::SVGAnimateElement::determineAnimatedPropertyType):
        (WebCore::SVGAnimateElement::calculateAnimatedValue):
        (WebCore::propertyTypesAreConsistent):
        (WebCore::SVGAnimateElement::applyResultsToTarget):
        * svg/SVGAnimatedAngle.cpp:
        (WebCore::SVGAnimatedAngleAnimator::constructFromString):
        (WebCore::SVGAnimatedAngleAnimator::startAnimValAnimation):
        (WebCore::SVGAnimatedAngleAnimator::stopAnimValAnimation):
        (WebCore::SVGAnimatedAngleAnimator::resetAnimValToBaseVal):
        (WebCore::SVGAnimatedAngleAnimator::animValWillChange):
        (WebCore::SVGAnimatedAngleAnimator::animValDidChange):
        (WebCore::SVGAnimatedAngleAnimator::calculateFromAndByValues):
        (WebCore::SVGAnimatedAngleAnimator::calculateAnimatedValue):
        * svg/SVGAnimatedAngle.h:
        (WebCore):
        * svg/SVGAnimatedBoolean.cpp:
        (WebCore::SVGAnimatedBooleanAnimator::startAnimValAnimation):
        (WebCore::SVGAnimatedBooleanAnimator::stopAnimValAnimation):
        (WebCore::SVGAnimatedBooleanAnimator::resetAnimValToBaseVal):
        * svg/SVGAnimatedEnumeration.cpp: Added.
        (WebCore):
        (WebCore::enumerationValueForTargetAttribute):
        (WebCore::SVGAnimatedEnumerationAnimator::SVGAnimatedEnumerationAnimator):
        (WebCore::SVGAnimatedEnumerationAnimator::constructFromString):
        (WebCore::SVGAnimatedEnumerationAnimator::startAnimValAnimation):
        (WebCore::SVGAnimatedEnumerationAnimator::stopAnimValAnimation):
        (WebCore::SVGAnimatedEnumerationAnimator::resetAnimValToBaseVal):
        (WebCore::SVGAnimatedEnumerationAnimator::animValWillChange):
        (WebCore::SVGAnimatedEnumerationAnimator::animValDidChange):
        (WebCore::SVGAnimatedEnumerationAnimator::calculateFromAndToValues):
        (WebCore::SVGAnimatedEnumerationAnimator::calculateFromAndByValues):
        (WebCore::SVGAnimatedEnumerationAnimator::calculateAnimatedValue):
        (WebCore::SVGAnimatedEnumerationAnimator::calculateDistance):
        * svg/SVGAnimatedEnumeration.h:
        (SVGAnimatedEnumerationAnimator):
        (WebCore::SVGAnimatedEnumerationAnimator::~SVGAnimatedEnumerationAnimator):
        (WebCore):
        * svg/SVGAnimatedInteger.cpp:
        (WebCore::SVGAnimatedIntegerAnimator::startAnimValAnimation):
        (WebCore::SVGAnimatedIntegerAnimator::stopAnimValAnimation):
        (WebCore::SVGAnimatedIntegerAnimator::resetAnimValToBaseVal):
        * svg/SVGAnimatedIntegerOptionalInteger.cpp:
        (WebCore::SVGAnimatedIntegerOptionalIntegerAnimator::startAnimValAnimation):
        (WebCore::SVGAnimatedIntegerOptionalIntegerAnimator::stopAnimValAnimation):
        (WebCore::SVGAnimatedIntegerOptionalIntegerAnimator::resetAnimValToBaseVal):
        (WebCore::SVGAnimatedIntegerOptionalIntegerAnimator::animValWillChange):
        (WebCore::SVGAnimatedIntegerOptionalIntegerAnimator::animValDidChange):
        * svg/SVGAnimatedLength.cpp:
        (WebCore::SVGAnimatedLengthAnimator::startAnimValAnimation):
        (WebCore::SVGAnimatedLengthAnimator::stopAnimValAnimation):
        (WebCore::SVGAnimatedLengthAnimator::resetAnimValToBaseVal):
        * svg/SVGAnimatedLengthList.cpp:
        (WebCore::SVGAnimatedLengthListAnimator::startAnimValAnimation):
        (WebCore::SVGAnimatedLengthListAnimator::stopAnimValAnimation):
        (WebCore::SVGAnimatedLengthListAnimator::resetAnimValToBaseVal):
        * svg/SVGAnimatedNumber.cpp:
        (WebCore::SVGAnimatedNumberAnimator::startAnimValAnimation):
        (WebCore::SVGAnimatedNumberAnimator::stopAnimValAnimation):
        (WebCore::SVGAnimatedNumberAnimator::resetAnimValToBaseVal):
        * svg/SVGAnimatedNumberList.cpp:
        (WebCore::SVGAnimatedNumberListAnimator::startAnimValAnimation):
        (WebCore::SVGAnimatedNumberListAnimator::stopAnimValAnimation):
        (WebCore::SVGAnimatedNumberListAnimator::resetAnimValToBaseVal):
        * svg/SVGAnimatedNumberOptionalNumber.cpp:
        (WebCore::SVGAnimatedNumberOptionalNumberAnimator::startAnimValAnimation):
        (WebCore::SVGAnimatedNumberOptionalNumberAnimator::stopAnimValAnimation):
        (WebCore::SVGAnimatedNumberOptionalNumberAnimator::resetAnimValToBaseVal):
        (WebCore::SVGAnimatedNumberOptionalNumberAnimator::animValWillChange):
        (WebCore::SVGAnimatedNumberOptionalNumberAnimator::animValDidChange):
        * svg/SVGAnimatedPreserveAspectRatio.cpp:
        (WebCore::SVGAnimatedPreserveAspectRatioAnimator::startAnimValAnimation):
        (WebCore::SVGAnimatedPreserveAspectRatioAnimator::stopAnimValAnimation):
        (WebCore::SVGAnimatedPreserveAspectRatioAnimator::resetAnimValToBaseVal):
        * svg/SVGAnimatedRect.cpp:
        (WebCore::SVGAnimatedRectAnimator::startAnimValAnimation):
        (WebCore::SVGAnimatedRectAnimator::stopAnimValAnimation):
        (WebCore::SVGAnimatedRectAnimator::resetAnimValToBaseVal):
        * svg/SVGAnimatedString.cpp:
        (WebCore::SVGAnimatedStringAnimator::startAnimValAnimation):
        (WebCore::SVGAnimatedStringAnimator::stopAnimValAnimation):
        (WebCore::SVGAnimatedStringAnimator::resetAnimValToBaseVal):
        * svg/SVGAnimatedTransformList.cpp:
        (WebCore::SVGAnimatedTransformListAnimator::startAnimValAnimation):
        (WebCore::SVGAnimatedTransformListAnimator::stopAnimValAnimation):
        (WebCore::SVGAnimatedTransformListAnimator::resetAnimValToBaseVal):
        * svg/SVGAnimatedType.cpp:
        (WebCore::SVGAnimatedType::~SVGAnimatedType):
        (WebCore::SVGAnimatedType::createAngleAndEnumeration):
        (WebCore::SVGAnimatedType::createEnumeration):
        (WebCore):
        (WebCore::SVGAnimatedType::angleAndEnumeration):
        (WebCore::SVGAnimatedType::enumeration):
        (WebCore::SVGAnimatedType::valueAsString):
        (WebCore::SVGAnimatedType::setValueAsString):
        (WebCore::SVGAnimatedType::supportsAnimVal):
        * svg/SVGAnimatedType.h:
        (SVGAnimatedType):
        * svg/SVGAnimatedTypeAnimator.h:
        (WebCore::SVGAnimatedTypeAnimator::findAnimatedPropertiesForAttributeName):
        (SVGAnimatedTypeAnimator):
        (WebCore::SVGAnimatedTypeAnimator::constructFromBaseValue):
        (WebCore::SVGAnimatedTypeAnimator::resetFromBaseValue):
        (WebCore::SVGAnimatedTypeAnimator::stopAnimValAnimationForType):
        (WebCore::SVGAnimatedTypeAnimator::animValDidChangeForType):
        (WebCore::SVGAnimatedTypeAnimator::animValWillChangeForType):
        (WebCore::SVGAnimatedTypeAnimator::constructFromBaseValues):
        (WebCore::SVGAnimatedTypeAnimator::resetFromBaseValues):
        (WebCore::SVGAnimatedTypeAnimator::stopAnimValAnimationForTypes):
        (WebCore::SVGAnimatedTypeAnimator::animValDidChangeForTypes):
        (WebCore::SVGAnimatedTypeAnimator::animValWillChangeForTypes):
        (WebCore::SVGAnimatedTypeAnimator::castAnimatedPropertyToActualType):
        (WebCore::SVGAnimatedTypeAnimator::executeAction):
        * svg/SVGAnimatorFactory.h:
        (WebCore::SVGAnimatorFactory::create):
        * svg/SVGMarkerElement.cpp:
        (WebCore):
        * svg/properties/SVGAnimatedListPropertyTearOff.h:
        (SVGAnimatedListPropertyTearOff):
        * svg/properties/SVGAnimatedPropertyTearOff.h:
        (SVGAnimatedPropertyTearOff):
        * svg/properties/SVGAnimatedStaticPropertyTearOff.h:
        (SVGAnimatedStaticPropertyTearOff):

2012-04-03  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r112987 and r112993.
        http://trac.webkit.org/changeset/112987
        http://trac.webkit.org/changeset/112993
        https://bugs.webkit.org/show_bug.cgi?id=83010

        hits ASSERTs in Debug builds (Requested by philn-tp on
        #webkit).

        * dom/Document.cpp:
        (WebCore::Document::Document):
        (WebCore::Document::initSecurityContext):
        * dom/Document.h:
        (Document):
        * html/HTMLAttributeNames.in:
        * html/HTMLFrameElementBase.cpp:
        (WebCore::HTMLFrameElementBase::parseAttribute):
        (WebCore::HTMLFrameElementBase::location):
        * html/HTMLIFrameElement.idl:
        * html/parser/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::defaultForInitial):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::urlSelected):
        (WebCore::FrameLoader::submitForm):
        (WebCore::FrameLoader::outgoingReferrer):
        (WebCore::FrameLoader::loadFrameRequest):
        (WebCore::FrameLoader::load):
        (WebCore::FrameLoader::loadWithNavigationAction):
        (WebCore::FrameLoader::reloadWithOverrideEncoding):
        (WebCore::FrameLoader::reload):
        (WebCore::FrameLoader::loadResourceSynchronously):
        * loader/FrameLoader.h:
        (FrameLoader):

2012-04-03  Bill Budge  <bbudge@chromium.org>

        REGRESSION (r112217): H&R Block tax site won't load
        https://bugs.webkit.org/show_bug.cgi?id=82964

        Modifies the redirect checking code to first check if the security origin can
        request the redirect URL before invoking the CORS check.

        Reviewed by Adam Barth.

        http/tests/xmlhttprequest/access-control-and-redirects-async.html

        * loader/DocumentThreadableLoader.cpp:
        * loader/DocumentThreadableLoader.h:

2012-04-03  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r112994.
        http://trac.webkit.org/changeset/112994
        https://bugs.webkit.org/show_bug.cgi?id=83008

        This patch has to wait until v8 roll. (Requested by loislo on
        #webkit).

        * bindings/js/ScriptHeapSnapshot.h:
        * bindings/v8/ScriptHeapSnapshot.cpp:
        (WebCore):
        * bindings/v8/ScriptHeapSnapshot.h:
        (WebCore):
        (ScriptHeapSnapshot):
        * inspector/InspectorProfilerAgent.cpp:
        (WebCore::InspectorProfilerAgent::createSnapshotHeader):
        * inspector/front-end/DetailedHeapshotView.js:
        (WebInspector.HeapSnapshotConstructorsDataGrid):
        (WebInspector.HeapSnapshotConstructorsDataGrid.prototype.setDataSource):
        (WebInspector.HeapSnapshotConstructorsDataGrid.prototype.populateChildren):
        (WebInspector.HeapSnapshotConstructorsDataGrid.prototype._filterSelectIndexChanged.firstSnapshotLoaded):
        (WebInspector.HeapSnapshotConstructorsDataGrid.prototype._filterSelectIndexChanged.secondSnapshotLoaded):
        (WebInspector.HeapSnapshotConstructorsDataGrid.prototype._filterSelectIndexChanged):
        (WebInspector.DetailedHeapshotView.prototype._changeFilter):
        * inspector/front-end/HeapSnapshot.js:
        (WebInspector.HeapSnapshot.prototype.get maxNodeId):
        (WebInspector.HeapSnapshot.prototype.updateStaticData):
        * inspector/front-end/HeapSnapshotProxy.js:
        (WebInspector.HeapSnapshotProxy.prototype.get maxNodeId):

2012-03-28  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: use maxJSObjectId that is provided by back-end.
        https://bugs.webkit.org/show_bug.cgi?id=82451

        Summary view can filter objects in snapshot. It uses maxJSObjectId for this.
        There was no such field in the profile header at the
        moment but I've landed a patch in downstream.

        Reviewed by Yury Semikhatsky.

        * bindings/v8/ScriptHeapSnapshot.cpp:
        (WebCore::ScriptHeapSnapshot::maxSnapshotJSObjectId):
        (WebCore):
        * bindings/v8/ScriptHeapSnapshot.h:
        (WebCore):
        (ScriptHeapSnapshot):
        * inspector/InspectorProfilerAgent.cpp:
        (WebCore::InspectorProfilerAgent::createSnapshotHeader):
        * inspector/front-end/DetailedHeapshotView.js:
        (WebInspector.HeapSnapshotConstructorsDataGrid.prototype._filterSelectIndexChanged):
        (WebInspector.DetailedHeapshotView.prototype._changeFilter):
        * inspector/front-end/HeapSnapshot.js:
        (WebInspector.HeapSnapshot.prototype.updateStaticData):
        * inspector/front-end/HeapSnapshotProxy.js:

2012-04-02  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: "Pause on start" doesn't change checked state in workers panel
        https://bugs.webkit.org/show_bug.cgi?id=82908

        Reviewed by Yury Semikhatsky.

        This change partially reverts logic that was introduced with r111551:
        preventDefault was called beside each stopPropagation. As a result, default checkbox handler was not working.
        Event.prototype.consume now receives preventDefault parameter that controls whether default action
        should be prevented.

        * inspector/front-end/AdvancedSearchController.js:
        (WebInspector.SearchView.prototype._onKeyDown):
        * inspector/front-end/CSSSelectorProfileView.js:
        * inspector/front-end/ConsoleView.js:
        (WebInspector.ConsoleView.prototype._enterKeyPressed):
        (WebInspector.ConsoleGroup.prototype._titleClicked):
        * inspector/front-end/DataGrid.js:
        (WebInspector.DataGrid.prototype._keyDown):
        * inspector/front-end/DatabaseQueryView.js:
        (WebInspector.DatabaseQueryView.prototype._enterKeyPressed):
        * inspector/front-end/DetailedHeapshotView.js:
        (WebInspector.DetailedHeapshotView.prototype._mouseDownInContentsGrid):
        (WebInspector.DetailedHeapshotView.prototype._retainersHeaderDragging):
        * inspector/front-end/Dialog.js:
        (WebInspector.Dialog.prototype._onKeyDown):
        * inspector/front-end/Drawer.js:
        (WebInspector.Drawer.prototype._statusBarDragging):
        * inspector/front-end/Object.js:
        (WebInspector.Event.prototype.consume):
        * inspector/front-end/ObjectPropertiesSection.js:
        (WebInspector.ObjectPropertyTreeElement.prototype._promptKeyDown):
        * inspector/front-end/ProfileView.js:
        * inspector/front-end/SearchController.js:
        (WebInspector.SearchController.prototype._onKeyDown):
        * inspector/front-end/SoftContextMenu.js:
        (.WebInspector.SoftContextMenu.prototype.show):
        (.WebInspector.SoftContextMenu.prototype._menuItemMouseDown):
        (.WebInspector.SoftContextMenu.prototype._menuKeyDown):
        (.WebInspector.SoftContextMenu.prototype._discardMenu):
        * inspector/front-end/Spectrum.js:
        (WebInspector.Spectrum.draggable.consume):
        (WebInspector.Spectrum.prototype._onKeyDown):
        * inspector/front-end/StylesSidebarPane.js:
        (WebInspector.StylesSidebarPane.muteEventListener):
        (WebInspector.StylesSidebarPane):
        (WebInspector.StylePropertiesSection.prototype._handleSelectorClick):
        (WebInspector.StylePropertyTreeElement.prototype.updateTitle.):
        (WebInspector.StylePropertyTreeElement.prototype):
        * inspector/front-end/TextPrompt.js:
        (WebInspector.TextPrompt.prototype.onKeyDown):
        (WebInspector.TextPromptWithHistory.prototype.defaultKeyHandler):
        (WebInspector.TextPrompt.SuggestBox.prototype._onItemMouseDown):
        * inspector/front-end/TextViewer.js:
        (WebInspector.TextViewer.prototype._handleKeyDown):
        * inspector/front-end/UIUtils.js:
        (WebInspector.startEditing):
        * inspector/front-end/inspector.js:
        (WebInspector.documentKeyDown):
        * inspector/front-end/treeoutline.js:
        (TreeOutline.prototype._treeKeyPress):
        (TreeOutline.prototype._treeKeyDown):
        (TreeOutline.prototype._searchInputKeyDown):
        (TreeElement.prototype.selectOnMouseDown):
        * inspector/front-end/utilities.js:
        (Event.prototype.consume):

2012-04-02  Chris Fleizach  <cfleizach@apple.com>

        AX: search field on Google.com does not have the AXSearchField subrole
        https://bugs.webkit.org/show_bug.cgi?id=82819

        Reviewed by Darin Adler.

        Detect search fields when possible for accessibility.

        Test: platform/mac/accessibility/search-subrole.html

        * accessibility/AccessibilityObject.h:
        (WebCore::AccessibilityObject::isSearchField):
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::isSearchField):
        (WebCore):
        * accessibility/AccessibilityRenderObject.h:
        (AccessibilityRenderObject):
        * accessibility/mac/WebAccessibilityObjectWrapper.mm:
        (-[WebAccessibilityObjectWrapper subrole]):

2012-04-02  Kent Tamura  <tkent@chromium.org>

        Introduce another file-to-array script
        https://bugs.webkit.org/show_bug.cgi?id=83001

        Reviewed by Kentaro Hara.

        make-file-arrays.py is a script to convert a binary file to a C++
        char array. The differences from css/make-css-file-arrays.pl and
        inspector/xxd.pl are:

        - No whitespace stripping for CSS files
        - We can make conditional arrays.
        e.g. An array enclosed with #if ENABLE(...) - #endif.

        This script will be used to implement a calendar picker for <input
        type=date>.

        * make-file-arrays.py: Added.

2012-04-02  Adam Barth  <abarth@webkit.org>

        Implement <iframe srcdoc>
        https://bugs.webkit.org/show_bug.cgi?id=82991

        Reviewed by Sam Weinig.

        This patch implements the <iframe srcdoc> feature. This feature allows
        authors to easily supply the contents of an iframe without needing to
        round-trip to the server. Using srcdoc is more convenient than using
        data URLs because we set a bunch of properties of the child document
        sensibly. For example, the child inherits the base URL of the parent
        and the child uses standards mode by default.

        This feature is specified in
        <http://www.whatwg.org/specs/web-apps/current-work/#attr-iframe-srcdoc>.
        Although the feature has been in the spec for a while, I'm not aware of
        any other implementations in major browsers. The srcdoc feature works
        especially well with the sandbox and seamless attributes. We already
        implement sandbox and will likely implement seamless soon.

        The srcdoc feature was announced on the webkit-dev mailing list on March 30:
        https://lists.webkit.org/pipermail/webkit-dev/2012-March/020161.html

        This patch approaches the implementation using SubstituteData, which is
        a mechanism previously used for error messages and the like. Using
        SubstituteData has the advantage of not needing to modify the loading
        or history pipelines at all, making the integration of srcdoc with the
        rest of WebCore quite smooth.

        This patch encodes the contents of the srcdoc attribute to and from
        UTF-8 when round-tripping the contents through the loader. In a future
        patch, I plan to experiment with whether using UTF-16 (or perhaps
        another encoding) can improve performance. There might also be a way to
        avoid the memcpy entirely, but these optimizations are best left to
        followup patches as this patch focuses on the observable behavior of
        the feature.

        Tests: fast/frames/srcdoc/reloading-a-srcdoc-document-loads-it-again.html
               fast/frames/srcdoc/setting-src-does-nothing.html
               fast/frames/srcdoc/setting-srcdoc-reloads-document.html
               fast/frames/srcdoc/srcdoc-beats-src-dom.html
               fast/frames/srcdoc/srcdoc-beats-src.html
               fast/frames/srcdoc/srcdoc-can-be-in-qurks-mode.html
               fast/frames/srcdoc/srcdoc-can-navigate.html
               fast/frames/srcdoc/srcdoc-defaults-to-standards-mode.html
               fast/frames/srcdoc/srcdoc-loads-content.html
               fast/frames/srcdoc/srcdoc-urls.html
               http/tests/security/srcdoc-can-access-parent.html
               http/tests/security/srcdoc-in-sandbox-cannot-access-parent.html
               http/tests/security/srcdoc-inherits-referrer-for-forms.html
               http/tests/security/srcdoc-inherits-referrer.html

        * dom/Document.cpp:
        (WebCore::Document::Document):
        (WebCore::Document::initSecurityContext):
            - srcdoc documents need to inherit their security contexts from
              their parents. We pick this initialization point to inherit the
              base URL and to set the "srcdoc Document" bit so that everything
              gets initialized atomically and from precisely the same owner
              frame.
        * dom/Document.h:
        (Document):
        (WebCore::Document::isSrcdocDocument):
            - This bit of state is present in the HTML5 spec and is referred to
              by a number of different requirements in the spec.
        * html/HTMLAttributeNames.in:
        * html/HTMLFrameElementBase.cpp:
        (WebCore::HTMLFrameElementBase::parseAttribute):
        (WebCore::HTMLFrameElementBase::location):
            - These functions implement the requirement that the srcdoc
              attribute takes precedence over the src attribute and triggers a
              load of a document with the URL about:srcdoc.
        * html/HTMLIFrameElement.idl:
            - Expose the srcdoc property as a reflection of the DOM attribute.
        * html/parser/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::defaultForInitial):
            - This tweak allows srcdoc documents to use standards mode by
              default, saving authors from having to include a doctype in each
              srcdoc document.
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::defaultSubstituteDataForURL):
            - This function transfers the contents of the srcdoc attribute into
              the loading pipeline. If the client supplies other
              SubstituteData, that takes precendence over our "default"
              SubstituteData.
        (WebCore::FrameLoader::outgoingReferrer):
            - This function implements the requirement from the HTML5 spec that
              srcdoc documents inherit their referrer from their parent
              document. A recursive implementation might have been more
              aesthetic but the iterative implementation seemed like a better
              choice.
        (WebCore::FrameLoader::shouldTreatURLAsSrcdocDocument):
            - An about:srcdoc URL only has special meaning when loaded in an
              iframe with a srcdoc attribute. Otherwise, it's just a normal
              "about" URL, meaning a blank page.
        (WebCore::FrameLoader::urlSelected):
        (WebCore::FrameLoader::submitForm):
        (WebCore::FrameLoader::loadFrameRequest):
        (WebCore::FrameLoader::load):
        (WebCore::FrameLoader::loadWithNavigationAction):
        (WebCore::FrameLoader::reloadWithOverrideEncoding):
        (WebCore::FrameLoader::reload):
        (WebCore::FrameLoader::loadResourceSynchronously):
            - Update these call sites to call defaultSubstituteDataForURL and
              outgoingReferrer consistently.
        * loader/FrameLoader.h:
        (FrameLoader):

2012-04-02  Dana Jansens  <danakj@chromium.org>

        [chromium] Remove SkCanvas::LayerIter use from OpaqueRegionSkia
        https://bugs.webkit.org/show_bug.cgi?id=82564

        Reviewed by Stephen White.

        Per-tile-painting uses an SkPictureRecord in place of an SkCanvas
        as the painting target for the GraphicsContext. This class only does
        a simple recording and does not create layers in the canvas during
        record, only playback. This is preventing us from correctly tracking
        opaque regions under per-tile-painting.

        We currently use the SkCanvas LayerIter to look at the layers in the
        canvas backing the GraphicsContext, and check the SkPaints, clips,
        and transforms to see how they impact the current draw once it reaches
        the final device.

        The clips and transforms can be retreived without using the LayerIter
        through the "getTotal*" methods. A cumulative SkPaint is not available
        so we store this ourselves.

        PlatformContextSkia becomes aware of when saveLayer() is being called
        on the underlying canvas, and passes this information to the
        OpaqueRegionSkia class. Since we no longer watch layers in the canvas,
        we must explicitly handle image clipping for the opaque tracker, as
        it is implemented in the PlatformContextSkia, not via constructs in
        the SkCanvas/SkPaint. We save the opaque area of the image mask for
        the canvas layer in the stack along with the SkPaint for the layer.

        Unit test: PlatformContextSkiaTest.PreserveOpaqueOnlyMattersForFirstLayer

        * platform/graphics/filters/skia/FEGaussianBlurSkia.cpp:
        (WebCore::FEGaussianBlur::platformApplySkia):
        * platform/graphics/filters/skia/FEMorphologySkia.cpp:
        (WebCore::FEMorphology::platformApplySkia):
        * platform/graphics/skia/GraphicsContextSkia.cpp:
        (WebCore::GraphicsContext::beginPlatformTransparencyLayer):
        (WebCore::GraphicsContext::endPlatformTransparencyLayer):
        * platform/graphics/skia/OpaqueRegionSkia.cpp:
        (WebCore::OpaqueRegionSkia::pushCanvasLayer):
        (WebCore):
        (WebCore::OpaqueRegionSkia::popCanvasLayer):
        (WebCore::OpaqueRegionSkia::setImageMask):
        (WebCore::OpaqueRegionSkia::didDrawRect):
        (WebCore::OpaqueRegionSkia::didDrawPath):
        (WebCore::OpaqueRegionSkia::didDrawPoints):
        (WebCore::OpaqueRegionSkia::didDrawBounded):
        (WebCore::OpaqueRegionSkia::didDraw):
        (WebCore::OpaqueRegionSkia::didDrawUnbounded):
        * platform/graphics/skia/OpaqueRegionSkia.h:
        (OpaqueRegionSkia):
        (WebCore::OpaqueRegionSkia::CanvasLayerState::CanvasLayerState):
        (CanvasLayerState):
        * platform/graphics/skia/PlatformContextSkia.cpp:
        (WebCore::PlatformContextSkia::saveLayer):
        (WebCore):
        (WebCore::PlatformContextSkia::restoreLayer):
        (WebCore::PlatformContextSkia::beginLayerClippedToImage):
        * platform/graphics/skia/PlatformContextSkia.h:
        (PlatformContextSkia):

2012-04-02  Shinya Kawanaka  <shinyak@chromium.org>

        Remove TreeScope::isShadowRoot.
        https://bugs.webkit.org/show_bug.cgi?id=82879

        Reviewed by Dimitri Glazkov.

        This patch removes TreeScope::isShadowRoot(). To make code fast, TreeScope::isShadowRoot
        is implemented in ShadowRoot.h. So when using TreeScope::isShadowRoot(), ShadowRoot.h is
        always required. In some case,  this might bring unnecessary dependency.

        Since TreeScope::rootNode() is inlined, the overall performance won't change.

        No new tests, simple refactoring.

        * dom/ShadowRoot.h:
        * dom/TreeScope.h:
        * html/shadow/HTMLShadowElement.cpp:
        (WebCore::HTMLShadowElement::doesSelectFromHostChildren):
        * html/shadow/InsertionPoint.cpp:
        (WebCore::InsertionPoint::attach):
        (WebCore::InsertionPoint::assignedFrom):
        (WebCore::InsertionPoint::isShadowBoundary):

2012-04-02  Emil A Eklund  <eae@chromium.org>

        Fix usage of LayoutUnits and pixel snapping in RenderLayer
        https://bugs.webkit.org/show_bug.cgi?id=82498

        Reviewed by Julien Chaffraix.

        Fix usage of subpixel types and snapping/rounding in RenderLayer in
        preparation for turning on subpixel layout.

        No new tests, no change in functionality.

        * rendering/LayoutTypes.h:
        (WebCore::pixelSnappedIntSize):
        Add no-op implementation of pixelSnappedIntSize, will be replaced with a
        real implementation once we make the switch.
        
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateLayerPosition):
        Snap RenderBox size when updating the size of the layer.
        
        (WebCore::RenderLayer::resize):
        Round position when setting the inline style during resize operation.

        (WebCore::RenderLayer::scrollCornerRect):
        Remove unnecessary pixelSnappedIntRect call.
        
        (WebCore::RenderLayer::positionOverflowControls):
        Remove unnecessary pixelSnappedIntRect call.
        
        (WebCore::RenderLayer::scrollWidth):
        (WebCore::RenderLayer::scrollHeight):
        Fix implementation of scrollWidth and Height to pixel snap the values.
         
        (WebCore::RenderLayer::computeScrollDimensions):
        (WebCore::RenderLayer::paintResizer):
        (WebCore::RenderLayer::hitTestOverflowControls):
        Remove unnecessary pixelSnappedIntRect calls.
        
        (WebCore::RenderLayer::paintLayerContents):
        Pixel snap values just before painting (instead of earlier on).

        (WebCore::RenderLayer::hitTest):
        (WebCore::RenderLayer::hitTestContents):
        Change to use subpixel types.

2012-04-02  Abhishek Arya  <inferno@chromium.org>

        <select> shouldn't intrude as a run-in.
        https://bugs.webkit.org/show_bug.cgi?id=82829

        Reviewed by Tony Chang.

        Matches Opera's behavior which also does not allow <select>
        to intrude as a run-in into the neighbouring block.
        IE and Firefox doesn't support run-ins, so can't compare behavior
        with them.

        Test: fast/runin/select-runin.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::handleRunInChild):

2012-04-02  Mark Pilgrim  <pilgrim@chromium.org>

        Call decrementStatsCounter directly
        https://bugs.webkit.org/show_bug.cgi?id=82950

        Reviewed by Adam Barth.

        * platform/chromium/PlatformSupport.h:
        (PlatformSupport):

2012-04-02  Tony Chang  <tony@chromium.org>

        add css parsing of -webkit-flex
        https://bugs.webkit.org/show_bug.cgi?id=82927

        Reviewed by Ojan Vafai.

        This is the new syntax for CSS3 flexbox:
        http://dev.w3.org/csswg/css3-flexbox/#flexibility

        Not hooked up to anything in the render tree yet so the old syntax is
        still valid.

        Test: css3/flexbox/flex-property-parsing.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore):
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):
        (WebCore::CSSParser::parseFlex):
        * css/CSSParser.h:
        (WebCore):
        * css/CSSProperty.cpp:
        (WebCore::CSSProperty::isInheritedProperty):
        * css/CSSPropertyNames.in:
        * css/CSSStyleApplyProperty.cpp:
        (ApplyPropertyFlex):
        (WebCore::ApplyPropertyFlex::applyInheritValue):
        (WebCore::ApplyPropertyFlex::applyInitialValue):
        (WebCore::ApplyPropertyFlex::applyValue):
        (WebCore::ApplyPropertyFlex::createHandler):
        (WebCore::ApplyPropertyFlex::getFlexValue):
        (WebCore):
        (WebCore::CSSStyleApplyProperty::CSSStyleApplyProperty):
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::collectMatchingRulesForList):
        * rendering/style/RenderStyle.h:
        * rendering/style/StyleFlexibleBoxData.cpp:
        (WebCore::StyleFlexibleBoxData::StyleFlexibleBoxData):
        (WebCore::StyleFlexibleBoxData::operator==):
        * rendering/style/StyleFlexibleBoxData.h:
        (StyleFlexibleBoxData):

2012-04-02  Daniel Cheng  <dcheng@chromium.org>

        Having a drop handler prevents navigation on drop even if event is not cancelled
        https://bugs.webkit.org/show_bug.cgi?id=79172

        Reviewed by Ryosuke Niwa.

        Only early return if the drop handler prevents the default action.

        Test: fast/events/drop-handler-should-not-stop-navigate.html

        * page/DragController.cpp:
        (WebCore::DragController::performDrag):

2012-04-02  Alexis Menard  <alexis.menard@openbossa.org>

        We should use CSSPropertyID rather than integers when manipulating CSS property ids.
        https://bugs.webkit.org/show_bug.cgi?id=82941

        Reviewed by Andreas Kling.

        CSSPropertyID enum holds all the CSS property ids but many parts of WebKit treat the ids
        as integers. While it's not incorrect it is nicer to use the enum as a parameter of
        functions manipulating property ids, as we ensure that the value passed will be an
        existing value. It will also feel more correct after this patch that CSSProperty::id()
        return a value of the enum rather than an integer. As this modification is quite big this
        is the first part only so it will be easier to review.

        No new tests : There should be no behavior change in this patch.

        * css/CSSParser.cpp:
        (WebCore::cssPropertyID):
        * css/CSSParser.h:
        (WebCore):
        * css/CSSProperty.cpp:
        (WebCore::CSSProperty::cssText):
        * css/CSSProperty.h:
        (WebCore::CSSProperty::id):
        (WebCore::CSSProperty::shorthandID):
        * css/PropertySetCSSStyleDeclaration.cpp:
        (WebCore::PropertySetCSSStyleDeclaration::item):
        (WebCore::PropertySetCSSStyleDeclaration::getPropertyCSSValue):
        (WebCore::PropertySetCSSStyleDeclaration::getPropertyValue):
        (WebCore::PropertySetCSSStyleDeclaration::getPropertyPriority):
        (WebCore::PropertySetCSSStyleDeclaration::getPropertyShorthand):
        (WebCore::PropertySetCSSStyleDeclaration::isPropertyImplicit):
        * css/StylePropertySet.cpp:
        (WebCore::StylePropertySet::getPropertyValue):
        (WebCore::StylePropertySet::appendFontLonghandValueIfExplicit):
        (WebCore::StylePropertySet::propertyIsImportant):
        (WebCore::StylePropertySet::getPropertyShorthand):
        (WebCore::StylePropertySet::isPropertyImplicit):
        (WebCore::StylePropertySet::asText):
        * css/StylePropertySet.h:
        (StylePropertySet):
        * editing/EditingStyle.cpp:
        (WebCore::EditingStyle::conflictsWithInlineStyleOfElement):
        (WebCore::removePropertiesInStyle):
        (WebCore::setTextDecorationProperty):
        (WebCore::diffTextDecorations):
        * editing/Editor.cpp:
        (WebCore::Editor::selectionStartCSSPropertyValue):
        * editing/Editor.h:
        (Editor):
        * editing/EditorCommand.cpp:
        (WebCore::valueStyle):

2012-04-02  Nate Chapin  <japhet@chromium.org>

        Simplify main resource load start/end in FrameLoader
        and DocumentLoader.
        https://bugs.webkit.org/show_bug.cgi?id=82935

        1. Have FrameLoader call prepareForLoadStart() on itself directly, rather
            than through DocumentLoader.
        2. Remove DocumentLoader::m_primaryLoadComplete, since this is basically equivalent
            to m_mainResourceLoader.
        3. Rename setPrimaryLoadComplete() to clearMainResourceLoader(), and only call it at
            the end of the main resource load.
        4. Move clearing DocumentLoader::m_mainResourceError into startLoadingMainResource(),
            which leaves DocumentLoader::prepareForLoadStart() empty.

        Reviewed by Adam Barth.

        No new tests, refactor only.

        * WebCore.exp.in:
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::DocumentLoader):
        (WebCore):
        (WebCore::DocumentLoader::mainReceivedError):
        (WebCore::DocumentLoader::finishedLoading):
        (WebCore::DocumentLoader::clearMainResourceLoader):
        (WebCore::DocumentLoader::isLoadingInAPISense):
        (WebCore::DocumentLoader::startLoadingMainResource):
        * loader/DocumentLoader.h:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::commitProvisionalLoad):
        (WebCore::FrameLoader::continueLoadAfterWillSubmitForm):
        (WebCore::FrameLoader::loadProvisionalItemFromCachedPage):
        * loader/FrameLoader.h: prepareForLoadStart() is now called directly,
            so make it private.

2012-04-02  Tim Horton  <timothy_horton@apple.com>

        ASSERTION FAILED: m_purgePreventCount in FontCache::getCachedFontData running svg/custom/animate-disallowed-use-element.svg
        https://bugs.webkit.org/show_bug.cgi?id=81002
        <rdar://problem/11168969>

        Reviewed by Simon Fraser.

        Don't spend time rebuilding SVG text layout attributes if the document is being torn down, as
        they won't be used, and can cause assertion failures in the font cache.

        No new tests, as it fixes an intermittent assertion failure during document destruction.

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

2012-04-02  Lianghui Chen  <liachen@rim.com>

        [BlackBerry] Set ResourceRequest TargetType in WebPagePrivate::load()
        https://bugs.webkit.org/show_bug.cgi?id=80519

        Stop asserting in platformCachePolicyForRequest() as now it is expected
        that the ResourceRequest might not have the right TargetType setup at
        this time for main loads.

        Reviewed by Rob Buis.

        No new tests as no change in behaviour.

        * platform/network/blackberry/ResourceRequestBlackBerry.cpp:
        (WebCore::platformCachePolicyForRequest):

2012-04-02  Simon Fraser  <simon.fraser@apple.com>

        Fix issue with reflections and composited layers
        https://bugs.webkit.org/show_bug.cgi?id=82636

        Reviewed by Alexey Proskuryakov
        
        When tearing down GraphicsLayers which referene eachother via m_replicatedLayer/m_replicaLayer,
        we need to clean up the replica layer pointers.

        No new tests; tested by existing compositing and repaint tests.

        * platform/graphics/GraphicsLayer.cpp:
        (WebCore::GraphicsLayer::~GraphicsLayer):
        (WebCore::GraphicsLayer::setReplicatedByLayer):

2012-04-02  Chris Rogers  <crogers@google.com>

        Add Oscillator/WaveTable implementation and tests
        https://bugs.webkit.org/show_bug.cgi?id=82414
        
        Oscillator represents an audio source generating a periodic waveform.  It can be set to
        a few commonly used waveforms.  Additionally, it can be set to an arbitrary periodic
        waveform through the use of a WaveTable object.

        Reviewed by Kenneth Russell.

        Tests: webaudio/oscillator-custom.html
               webaudio/oscillator-sawtooth.html
               webaudio/oscillator-sine.html
               webaudio/oscillator-square.html
               webaudio/oscillator-triangle.html

        * DerivedSources.make:
        * GNUmakefile.list.am:
        Add Oscillator and WaveTable to build files.
        * Modules/webaudio/AudioContext.cpp:
        (WebCore::AudioContext::createOscillator):
        (WebCore):
        (WebCore::AudioContext::createWaveTable):
        * Modules/webaudio/AudioContext.h:
        Add create methods for Oscillator and WaveTable.
        (WebCore):
        (AudioContext):
        * Modules/webaudio/AudioContext.idl:
        * Modules/webaudio/AudioNode.h:
        * Modules/webaudio/Oscillator.cpp: Added.
        (WebCore):
        (WebCore::Oscillator::create):
        (WebCore::Oscillator::Oscillator):
        (WebCore::Oscillator::~Oscillator):
        (WebCore::Oscillator::setType):
        (WebCore::Oscillator::calculateSampleAccuratePhaseIncrements):
        (WebCore::Oscillator::process):
        (WebCore::Oscillator::reset):
        (WebCore::Oscillator::setWaveTable):
        * Modules/webaudio/Oscillator.h: Added.
        (WebCore):
        (Oscillator):
        (WebCore::Oscillator::type):
        (WebCore::Oscillator::frequency):
        (WebCore::Oscillator::detune):
        Implement Oscillator as AudioSourceNode.
        * Modules/webaudio/Oscillator.idl: Added.
        * Modules/webaudio/WaveTable.cpp: Added.
        (WebCore):
        (WebCore::WaveTable::create):
        (WebCore::WaveTable::createSine):
        (WebCore::WaveTable::createSquare):
        (WebCore::WaveTable::createSawtooth):
        (WebCore::WaveTable::createTriangle):
        (WebCore::WaveTable::WaveTable):
        (WebCore::WaveTable::waveDataForFundamentalFrequency):
        (WebCore::WaveTable::maxNumberOfPartials):
        (WebCore::WaveTable::numberOfPartialsForRange):
        (WebCore::WaveTable::createBandLimitedTables):
        (WebCore::WaveTable::generateBasicWaveform):
        * Modules/webaudio/WaveTable.h: Added.
        (WebCore):
        (WaveTable):
        (WebCore::WaveTable::rateScale):
        (WebCore::WaveTable::waveTableSize):
        (WebCore::WaveTable::sampleRate):
        (WebCore::WaveTable::numberOfRanges):
        Implement WaveTable which is constructed given a set of Fourier coefficients.
        * Modules/webaudio/WaveTable.idl: Added.
        * WebCore.gypi:
        * WebCore.xcodeproj/project.pbxproj:
        Add Oscillator and WaveTable files to build files.

2012-04-02  Levi Weintraub  <leviw@chromium.org>

        Correct remaining LayoutUnit misuse in RenderReplaced and RenderFlexibleBox
        https://bugs.webkit.org/show_bug.cgi?id=82899

        Reviewed by Darin Adler.

        Removing remaining LayoutUnit misuse and compiler errors that exist in RenderReplaced
        and RenderFlexibleBox once LayoutUnit becomes sub-pixel.

        No new tests. No change in behavior.

        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::repositionLogicalHeightDependentFlexItems): Switching
        a raw zero in a ternary operation to zeroLayoutUnit.
        (WebCore::RenderFlexibleBox::applyStretchAlignmentToChild): Ditto for std::max.
        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::paint): Adding missing pixel snapping before painting.
        (WebCore::RenderReplaced::computeReplacedLogicalWidth): Like above, switching
        a raw zero to zeroLayoutUnit.
        (WebCore::RenderReplaced::computePreferredLogicalWidths): Ditto.

2012-04-02  Ken Buchanan  <kenrb@chromium.org>

        Crash due to floating object lists not properly being cleared
        https://bugs.webkit.org/show_bug.cgi?id=74056

        Reviewed by David Hyatt.

        Add a check to clearFloats() that determines when intruding floats
        are being cleared and not re-added. In this condition, ensure
        children with floats are also getting layout because they might
        need to have the same intruding floats cleared from their floating
        object lists also.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::clearFloats):

2012-04-02  Seo Sanghyeon  <sh4.seo@samsung.com>

        Align IDL to Typed Array Specification
        https://bugs.webkit.org/show_bug.cgi?id=82919

        Reviewed by Darin Adler.

        No tests. No change in behavior.

        * html/canvas/Float32Array.idl:
        * html/canvas/Float64Array.idl:
        * html/canvas/Int16Array.idl:
        * html/canvas/Int32Array.idl:
        * html/canvas/Int8Array.idl:
        * html/canvas/Uint16Array.idl:
        * html/canvas/Uint32Array.idl:
        * html/canvas/Uint8Array.idl:
        * html/canvas/Uint8ClampedArray.idl:

2012-04-02  Michael Saboff  <msaboff@apple.com>

        WebKit should throttle memory pressure notifications in proportion to handler time
        https://bugs.webkit.org/show_bug.cgi?id=82674

        Rubber-stamped by Darin Adler.

        Updated r112910: <http://trac.webkit.org/changeset/112910> to address
        post checkin concerns raised in original bug.

        No additional tests. This passes existing test and was verified using
        manual tests on a small memory system with many websites open.

        * platform/mac/MemoryPressureHandlerMac.mm:
        (WebCore):
        (WebCore::MemoryPressureHandler::respondToMemoryPressure):

2012-04-02  Darin Fisher  <darin@chromium.org>

        HistoryItem not updated properly when a form submission begins before a
        previous form submission has finished.
        https://bugs.webkit.org/show_bug.cgi?id=76686

        Reviewed by Nate Chapin.

        Test: LayoutTests/fast/loader/form-submission-before-load-{get,post}.html

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

2012-04-02  Antti Koivisto  <antti@apple.com>

        Split remaining CSSRules into internal and CSSOM types
        https://bugs.webkit.org/show_bug.cgi?id=82728

        Reviewed by Andreas Kling.

        This will complete the move to internal types for CSS rules. The only remaining unsplit type is
        the CSSStyleSheet itself.
        
        By separating internal types from the CSSOM we save memory immediately and enable future performance
        optimizations as we are no longer tied to the structure of the API.
        
        CSSOM type              Internal type
        
        CSSStyleRule            StyleRule -> StyleRuleBase
        CSSPageRule             StyleRulePage -> StyleRuleBase
        CSSFontFaceRule         StyleRuleFontFace -> StyleRuleBase
        CSSMediaRule            StyleRuleMedia -> StyleRuleBlock -> StyleRuleBase
        CSSImportRule           StyleRuleImport -> StyleRuleBase
        CSSCharsetRule          String (owned by CSSStyleSheet)
        CSSUnknownRule          Never instantiated
        WebKitCSSRegionRule     StyleRuleRegion -> StyleRuleBlock -> StyleRuleBase
        WebKitKeyframesRule     StyleRuleKeyframes -> StyleRuleBase
        WebKitKeyframeRule      StyleKeyframe (owned by StyleRuleKeyframes)
        
        StyleRuleBase is refcounted. 
        
        The CSSOM objects contain the public API functions and their implementations (almost) nothing else. Unlike the 
        CSSOM types they don't have parent pointers, saving memory.  
        
        The CSSOM tree is constructed on demand only. The CSSOM wrapper instances are constructed and owned by 
        the parent wrapper in the tree. Wrappers ref the corresponding internal type. The trees are kept in sync
        when mutating.
        
        All rules shrink by a pointer (from the parent pointer removal). The immediate memory savings from this patch are
        larger as some earlier patches temporarily increased the memory use to allow incremental refactoring. 

        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSDOMBinding.h:
        (WebCore):
        * css/CSSFontFaceRule.cpp:
        (WebCore::CSSFontFaceRule::CSSFontFaceRule):
        (WebCore::CSSFontFaceRule::style):
        (WebCore::CSSFontFaceRule::cssText):
        (WebCore):
        * css/CSSFontFaceRule.h:
        (WebCore):
        (WebCore::CSSFontFaceRule::create):
        (CSSFontFaceRule):
        * css/CSSFontSelector.cpp:
        (WebCore::CSSFontSelector::addFontFaceRule):
        * css/CSSFontSelector.h:
        (WebCore):
        * css/CSSGrammar.y:
        * css/CSSImportRule.cpp:
        (WebCore::StyleRuleImport::create):
        (WebCore::StyleRuleImport::StyleRuleImport):
        (WebCore::StyleRuleImport::~StyleRuleImport):
        (WebCore::StyleRuleImport::setCSSStyleSheet):
        (WebCore::StyleRuleImport::isLoading):
        (WebCore::StyleRuleImport::requestStyleSheet):
        (WebCore::CSSImportRule::CSSImportRule):
        (WebCore):
        (WebCore::CSSImportRule::media):
        (WebCore::CSSImportRule::cssText):
        * css/CSSImportRule.h:
        (StyleRuleImport):
        (WebCore::StyleRuleImport::parentStyleSheet):
        (WebCore::StyleRuleImport::clearParentStyleSheet):
        (WebCore::StyleRuleImport::href):
        (WebCore::StyleRuleImport::ImportedStyleSheetClient::ImportedStyleSheetClient):
        (ImportedStyleSheetClient):
        (CSSImportRule):
        (WebCore::CSSImportRule::create):
        (WebCore::CSSImportRule::href):
        (WebCore::CSSImportRule::styleSheet):
        (WebCore):
        * css/CSSMediaRule.cpp:
        (WebCore::CSSMediaRule::CSSMediaRule):
        (WebCore::CSSMediaRule::~CSSMediaRule):
        (WebCore::CSSMediaRule::insertRule):
        (WebCore::CSSMediaRule::deleteRule):
        (WebCore::CSSMediaRule::cssText):
        (WebCore::CSSMediaRule::media):
        (WebCore):
        (WebCore::CSSMediaRule::length):
        (WebCore::CSSMediaRule::item):
        (WebCore::CSSMediaRule::cssRules):
        * css/CSSMediaRule.h:
        (WebCore):
        (WebCore::CSSMediaRule::create):
        (CSSMediaRule):
        * css/CSSPageRule.cpp:
        (WebCore::CSSPageRule::CSSPageRule):
        (WebCore::CSSPageRule::style):
        (WebCore::CSSPageRule::selectorText):
        (WebCore::CSSPageRule::setSelectorText):
        (WebCore::CSSPageRule::cssText):
        * css/CSSPageRule.h:
        (WebCore):
        (WebCore::CSSPageRule::create):
        (CSSPageRule):
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseRule):
        (WebCore::CSSParser::createImportRule):
        (WebCore::CSSParser::createMediaRule):
        (WebCore::CSSParser::createKeyframesRule):
        (WebCore::CSSParser::createStyleRule):
        (WebCore::CSSParser::createFontFaceRule):
        (WebCore::CSSParser::createPageRule):
        (WebCore::CSSParser::createRegionRule):
        (WebCore::CSSParser::createMarginAtRule):
        * css/CSSParser.h:
        (WebCore):
        (CSSParser):
        * css/CSSPropertySourceData.h:
        (WebCore):
        * css/CSSStyleRule.cpp:
        (WebCore):
        (WebCore::selectorTextCache):
        (WebCore::CSSStyleRule::CSSStyleRule):
        (WebCore::CSSStyleRule::~CSSStyleRule):
        (WebCore::CSSStyleRule::setSelectorText):
        * css/CSSStyleRule.h:
        (WebCore):
        (WebCore::CSSStyleRule::create):
        (CSSStyleRule):
        * css/CSSStyleSelector.cpp:
        (RuleSet):
        (WebCore::RuleSet::pageRules):
        (WebCore::CSSStyleSelector::addKeyframeStyle):
        (WebCore::CSSStyleSelector::sortAndTransferMatchedRules):
        (WebCore::CSSStyleSelector::collectMatchingRulesForList):
        * css/CSSStyleSelector.h:
        (CSSStyleSelector):
        * css/CSSStyleSheet.cpp:
        (WebCore::CSSStyleSheet::CSSStyleSheet):
        (WebCore::CSSStyleSheet::parserAppendRule):
        (WebCore::CSSStyleSheet::createChildRuleCSSOMWrapper):
        (WebCore::CSSStyleSheet::item):
        (WebCore::CSSStyleSheet::clearCharsetRule):
        (WebCore::CSSStyleSheet::clearRules):
        (WebCore::CSSStyleSheet::rules):
        (WebCore::CSSStyleSheet::insertRule):
        (WebCore::CSSStyleSheet::deleteRule):
        (WebCore::CSSStyleSheet::addSubresourceStyleURLs):
        (WebCore::CSSStyleSheet::ensureCSSOMWrapper):
        (WebCore):
        (WebCore::CSSStyleSheet::ownerRule):
        (WebCore::CSSStyleSheet::parentStyleSheet):
        * css/CSSStyleSheet.h:
        (WebCore):
        (WebCore::CSSStyleSheet::create):
        (CSSStyleSheet):
        (WebCore::CSSStyleSheet::childRules):
        (WebCore::CSSStyleSheet::importRules):
        (WebCore::CSSStyleSheet::clearOwnerRule):
        (WebCore::CSSStyleSheet::hasCharsetRule):
        * css/StyleRule.cpp:
        (WebCore::StyleRuleBase::createCSSOMWrapper):
        (WebCore):
        (WebCore::StyleRuleBase::destroy):
        (WebCore::StyleRule::StyleRule):
        (WebCore::StyleRule::setProperties):
        (WebCore::StyleRulePage::StyleRulePage):
        (WebCore::StyleRulePage::~StyleRulePage):
        (WebCore::StyleRulePage::setProperties):
        (WebCore::StyleRuleFontFace::StyleRuleFontFace):
        (WebCore::StyleRuleFontFace::~StyleRuleFontFace):
        (WebCore::StyleRuleFontFace::setProperties):
        (WebCore::StyleRuleBlock::StyleRuleBlock):
        (WebCore::StyleRuleBlock::wrapperInsertRule):
        (WebCore::StyleRuleBlock::wrapperRemoveRule):
        (WebCore::StyleRuleMedia::StyleRuleMedia):
        (WebCore::StyleRuleRegion::StyleRuleRegion):
        * css/StyleRule.h:
        (WebCore):
        (WebCore::StyleRuleBase::type):
        (StyleRuleBase):
        (WebCore::StyleRuleBase::isCharsetRule):
        (WebCore::StyleRuleBase::isFontFaceRule):
        (WebCore::StyleRuleBase::isKeyframesRule):
        (WebCore::StyleRuleBase::isMediaRule):
        (WebCore::StyleRuleBase::isPageRule):
        (WebCore::StyleRuleBase::isStyleRule):
        (WebCore::StyleRuleBase::isRegionRule):
        (WebCore::StyleRuleBase::isImportRule):
        (WebCore::StyleRuleBase::sourceLine):
        (WebCore::StyleRuleBase::deref):
        (WebCore::StyleRuleBase::StyleRuleBase):
        (WebCore::StyleRuleBase::~StyleRuleBase):
        (StyleRule):
        (WebCore::StyleRule::create):
        (WebCore::StyleRule::parserAdoptSelectorVector):
        (WebCore::StyleRule::wrapperAdoptSelectorList):
        (StyleRuleFontFace):
        (WebCore::StyleRuleFontFace::create):
        (WebCore::StyleRuleFontFace::properties):
        (StyleRulePage):
        (WebCore::StyleRulePage::create):
        (WebCore::StyleRulePage::selector):
        (WebCore::StyleRulePage::properties):
        (WebCore::StyleRulePage::parserAdoptSelectorVector):
        (WebCore::StyleRulePage::wrapperAdoptSelectorList):
        (StyleRuleBlock):
        (WebCore::StyleRuleBlock::childRules):
        (StyleRuleMedia):
        (WebCore::StyleRuleMedia::create):
        (WebCore::StyleRuleMedia::mediaQueries):
        (StyleRuleRegion):
        (WebCore::StyleRuleRegion::create):
        (WebCore::StyleRuleRegion::selectorList):
        * css/StyleSheet.cpp:
        (WebCore::StyleSheet::StyleSheet):
        (WebCore):
        * css/StyleSheet.h:
        (WebCore):
        (WebCore::StyleSheet::ownerRule):
        (WebCore::StyleSheet::parentStyleSheet):
        (StyleSheet):
        * css/WebKitCSSKeyframesRule.cpp:
        (WebCore::StyleRuleKeyframes::StyleRuleKeyframes):
        (WebCore):
        (WebCore::StyleRuleKeyframes::~StyleRuleKeyframes):
        (WebCore::StyleRuleKeyframes::parserAppendKeyframe):
        (WebCore::StyleRuleKeyframes::wrapperAppendKeyframe):
        (WebCore::StyleRuleKeyframes::wrapperRemoveKeyframe):
        (WebCore::StyleRuleKeyframes::findKeyframeIndex):
        (WebCore::WebKitCSSKeyframesRule::WebKitCSSKeyframesRule):
        (WebCore::WebKitCSSKeyframesRule::~WebKitCSSKeyframesRule):
        (WebCore::WebKitCSSKeyframesRule::setName):
        (WebCore::WebKitCSSKeyframesRule::insertRule):
        (WebCore::WebKitCSSKeyframesRule::deleteRule):
        (WebCore::WebKitCSSKeyframesRule::findRule):
        (WebCore::WebKitCSSKeyframesRule::cssText):
        (WebCore::WebKitCSSKeyframesRule::length):
        (WebCore::WebKitCSSKeyframesRule::item):
        * css/WebKitCSSKeyframesRule.h:
        (WebCore):
        (StyleRuleKeyframes):
        (WebCore::StyleRuleKeyframes::create):
        (WebCore::StyleRuleKeyframes::keyframes):
        (WebCore::StyleRuleKeyframes::name):
        (WebCore::StyleRuleKeyframes::setName):
        (WebCore::WebKitCSSKeyframesRule::create):
        (WebCore::WebKitCSSKeyframesRule::name):
        (WebKitCSSKeyframesRule):
        * css/WebKitCSSRegionRule.cpp:
        (WebCore::WebKitCSSRegionRule::WebKitCSSRegionRule):
        (WebCore::WebKitCSSRegionRule::~WebKitCSSRegionRule):
        (WebCore::WebKitCSSRegionRule::cssText):
        (WebCore::WebKitCSSRegionRule::length):
        (WebCore):
        (WebCore::WebKitCSSRegionRule::item):
        (WebCore::WebKitCSSRegionRule::cssRules):
        * css/WebKitCSSRegionRule.h:
        (WebCore):
        (WebCore::WebKitCSSRegionRule::create):
        (WebKitCSSRegionRule):
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::willMatchRuleImpl):
        (WebCore::InspectorInstrumentation::willProcessRuleImpl):
        * inspector/InspectorStyleSheet.cpp:
        (WebCore::InspectorStyleSheet::ensureSourceData):
        * inspector/InspectorStyleSheet.h:
        (WebCore):
        * svg/SVGFontFaceElement.cpp:
        (WebCore::SVGFontFaceElement::SVGFontFaceElement):
        (WebCore::SVGFontFaceElement::parseAttribute):
        (WebCore::SVGFontFaceElement::fontFamily):
        (WebCore::SVGFontFaceElement::rebuildFontFace):
        (WebCore::SVGFontFaceElement::insertedIntoDocument):
        (WebCore::SVGFontFaceElement::removedFromDocument):
        * svg/SVGFontFaceElement.h:
        (WebCore):
        (WebCore::SVGFontFaceElement::fontFaceRule):
        (SVGFontFaceElement):

2012-04-02  Rakesh KN  <rakesh.kn@motorola.com>

        Scroll position is lost after hide/show element
        https://bugs.webkit.org/show_bug.cgi?id=72852

        Maintain the scroll position of an overflowing element in the ElementRareData when the scrollable 
        RenderLayer is destroyed, which can be used to restore the scroll position if the same element gets
        back a RenderLayer.

        WebKit behaviour will be the same as Firefox and IE. It differs from Opera as it does not reset the
        scroll position when an element is moved to another location in the same document. However Opera resets
        the scroll position for elements moved to another document, which matches other browsers.

        Reviewed by Julien Chaffraix.

        Test: fast/overflow/scroll-div-hide-show.html

        * dom/Element.cpp:
        (WebCore::Element::removedFromDocument):
        Reset the saved scroll offset if the node is moved to another location in the same document or another one.

        (WebCore::Element::savedLayerScrollOffset):
        (WebCore::Element::setSavedLayerScrollOffset):
        * dom/Element.h:
        Add helper functions to access the layer scroll offset from the element's rare data.

        * dom/ElementRareData.h:
        (ElementRareData):
        Add the scroll offset book-keeping.

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::RenderLayer):
        Restore the scroll offset.
        (WebCore::RenderLayer::~RenderLayer):
        Store the scroll offset if document is not being destroyed.

2012-04-02  Alexis Menard  <alexis.menard@openbossa.org>

        Rename CSSPropertyLonghand files to StylePropertyShorthand.
        https://bugs.webkit.org/show_bug.cgi?id=82905

        Reviewed by Antti Koivisto.

        r112880 renamed CSSPropertyLonghand class to StylePropertyShorthand, so the
        files need to reflect this new name now.

        No new tests : Just a renaming, No behaviour change intended.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSAllInOne.cpp:
        * css/CSSComputedStyleDeclaration.cpp:
        * css/CSSParser.cpp:
        * css/CSSProperty.cpp:
        * css/StylePropertySet.cpp:
        * css/StylePropertyShorthand.cpp: Renamed from Source/WebCore/css/CSSPropertyLonghand.cpp.
        (WebCore):
        (WebCore::backgroundShorthand):
        (WebCore::backgroundPositionShorthand):
        (WebCore::backgroundRepeatShorthand):
        (WebCore::borderShorthand):
        (WebCore::borderAbridgedShorthand):
        (WebCore::borderBottomShorthand):
        (WebCore::borderColorShorthand):
        (WebCore::borderImageShorthand):
        (WebCore::borderLeftShorthand):
        (WebCore::borderRadiusShorthand):
        (WebCore::borderRightShorthand):
        (WebCore::borderSpacingShorthand):
        (WebCore::borderStyleShorthand):
        (WebCore::borderTopShorthand):
        (WebCore::borderWidthShorthand):
        (WebCore::listStyleShorthand):
        (WebCore::fontShorthand):
        (WebCore::marginShorthand):
        (WebCore::outlineShorthand):
        (WebCore::overflowShorthand):
        (WebCore::paddingShorthand):
        (WebCore::webkitAnimationShorthand):
        (WebCore::webkitBorderAfterShorthand):
        (WebCore::webkitBorderBeforeShorthand):
        (WebCore::webkitBorderEndShorthand):
        (WebCore::webkitBorderStartShorthand):
        (WebCore::webkitColumnsShorthand):
        (WebCore::webkitColumnRuleShorthand):
        (WebCore::webkitFlexFlowShorthand):
        (WebCore::webkitMarginCollapseShorthand):
        (WebCore::webkitMarqueeShorthand):
        (WebCore::webkitMaskShorthand):
        (WebCore::webkitMaskPositionShorthand):
        (WebCore::webkitMaskRepeatShorthand):
        (WebCore::webkitTextEmphasisShorthand):
        (WebCore::webkitTextStrokeShorthand):
        (WebCore::webkitTransitionShorthand):
        (WebCore::webkitTransformOriginShorthand):
        (WebCore::webkitWrapShorthand):
        (WebCore::shorthandForProperty):
        * css/StylePropertyShorthand.h: Renamed from Source/WebCore/css/CSSPropertyLonghand.h.
        (WebCore):
        (StylePropertyShorthand):
        (WebCore::StylePropertyShorthand::StylePropertyShorthand):
        (WebCore::StylePropertyShorthand::properties):
        (WebCore::StylePropertyShorthand::propertiesForInitialization):
        (WebCore::StylePropertyShorthand::length):
        * page/animation/AnimationBase.cpp:

2012-04-02  Brady Eidson  <beidson@apple.com>

        <rdar://problem/11020155> and https://bugs.webkit.org/show_bug.cgi?id=82910
        REGRESSION (98963 and 109091):  Crash when creating a WebArchive of a page with @page style rules

        Reviewed by Antti Koivisto.

        Test: webarchive/css-page-rule-crash.html

        * css/CSSStyleSheet.cpp:
        (WebCore::CSSStyleSheet::addSubresourceStyleURLs): Page rules do not (currently) have subresource urls to get,
          and are not CSSStyleRules.

2012-04-02  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r112851.
        http://trac.webkit.org/changeset/112851
        https://bugs.webkit.org/show_bug.cgi?id=82915

        Broke 3 Mac accessibility tests (Requested by enrica on
        #webkit).

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

2012-04-02  Michael Saboff  <msaboff@apple.com>

        WebKit should throttle memory pressure notifications in proportion to handler time
        https://bugs.webkit.org/show_bug.cgi?id=82674

        Reviewed by Geoffrey Garen.

        Changed the MemoryPressureHandler hold off timer to start timing after 
        respondToMemoryPressure runs.  The delay time is now 20 times longer than the
        time it took for respondToMemoryPressure to run with a minimum of 5 seconds.
        This throttles the response to low memory events in the extreme case where
        we are spending most of our time paging / swapping.
        This is a Mac only change.

        No additional tests. This passes existing test and was verified using
        manual tests on a small memory system with many websites open.

        * platform/mac/MemoryPressureHandlerMac.mm:
        (WebCore):
        (WebCore::MemoryPressureHandler::holdOff):
        (WebCore::MemoryPressureHandler::respondToMemoryPressure):

2012-04-02  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r112163.
        http://trac.webkit.org/changeset/112163
        https://bugs.webkit.org/show_bug.cgi?id=82914

        Possible OOM issues (Requested by aklein on #webkit).

        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateConstructorCallback):
        (GenerateNamedConstructorCallback):
        * bindings/v8/V8DOMWindowShell.cpp:
        (WebCore::V8DOMWindowShell::installDOMWindow):
        * bindings/v8/V8DOMWrapper.cpp:
        (WebCore):
        (WebCore::V8DOMWrapper::setJSWrapperForDOMObject):
        (WebCore::V8DOMWrapper::setJSWrapperForActiveDOMObject):
        (WebCore::V8DOMWrapper::setJSWrapperForDOMNode):
        * bindings/v8/V8DOMWrapper.h:
        (V8DOMWrapper):
        * bindings/v8/V8Proxy.h:
        (WebCore::toV8):
        * bindings/v8/WorkerContextExecutionProxy.cpp:
        (WebCore::WorkerContextExecutionProxy::initContextIfNeeded):
        * bindings/v8/custom/V8HTMLImageElementConstructor.cpp:
        (WebCore::v8HTMLImageElementConstructorCallback):
        * bindings/v8/custom/V8WebKitMutationObserverCustom.cpp:
        (WebCore::V8WebKitMutationObserver::constructorCallback):
        * bindings/v8/custom/V8WebSocketCustom.cpp:
        (WebCore::V8WebSocket::constructorCallback):
        * bindings/v8/custom/V8XMLHttpRequestConstructor.cpp:
        (WebCore::V8XMLHttpRequest::constructorCallback):

2012-04-02  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r112318.
        http://trac.webkit.org/changeset/112318
        https://bugs.webkit.org/show_bug.cgi?id=82912

        Possible OOM issues (Requested by aklein on #webkit).

        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateConstructorCallback):
        (GenerateNamedConstructorCallback):
        (GenerateToV8Converters):
        (GetDomMapFunction):
        * bindings/scripts/test/V8/V8Float64Array.cpp:
        (WebCore::V8Float64Array::wrapSlow):
        * bindings/scripts/test/V8/V8TestActiveDOMObject.cpp:
        (WebCore::V8TestActiveDOMObject::wrapSlow):
        * bindings/scripts/test/V8/V8TestCustomNamedGetter.cpp:
        (WebCore::V8TestCustomNamedGetter::wrapSlow):
        * bindings/scripts/test/V8/V8TestEventConstructor.cpp:
        (WebCore::V8TestEventConstructor::wrapSlow):
        * bindings/scripts/test/V8/V8TestEventTarget.cpp:
        (WebCore::V8TestEventTarget::wrapSlow):
        * bindings/scripts/test/V8/V8TestInterface.cpp:
        (WebCore::V8TestInterface::wrapSlow):
        * bindings/scripts/test/V8/V8TestMediaQueryListListener.cpp:
        (WebCore::V8TestMediaQueryListListener::wrapSlow):
        * bindings/scripts/test/V8/V8TestNamedConstructor.cpp:
        (WebCore::V8TestNamedConstructor::wrapSlow):
        * bindings/scripts/test/V8/V8TestObj.cpp:
        (WebCore::V8TestObj::wrapSlow):
        * bindings/scripts/test/V8/V8TestSerializedScriptValueInterface.cpp:
        (WebCore::V8TestSerializedScriptValueInterface::wrapSlow):
        * bindings/v8/V8DOMWrapper.cpp:
        (WebCore::V8DOMWrapper::setJSWrapperForDOMNode):
        * bindings/v8/V8DOMWrapper.h:
        (V8DOMWrapper):
        (WebCore::V8DOMWrapper::setJSWrapperForDOMObject):
        (WebCore::V8DOMWrapper::setJSWrapperForActiveDOMObject):

2012-04-02  Srikumar Bonda  <srikumar.b@gmail.com>

        Missing NULL check for vendor string from glGetString()
        https://bugs.webkit.org/show_bug.cgi?id=82859

        Reviewed by Kentaro Hara.

        glGetString() possible to return NULL value.
        Refer to http://www.opengl.org/sdk/docs/man/xhtml/glGetString.xml
        for more information. The missing null check crashes webkit when
        vendor name is not set (null) by glGetString().

        No new tests because this is missing NULL check for
        for openGL API response.

        * platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:
        (WebCore::GraphicsContext3D::validateAttributes):

2012-04-02  Ami Fischman  <fischman@chromium.org>

        Suppress HTMLMediaElement's text track code when !webkitVideoTrackEnabled()
        https://bugs.webkit.org/show_bug.cgi?id=82906

        Reviewed by Eric Carlson.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::scheduleLoad):
        (WebCore::HTMLMediaElement::loadTimerFired):
        (WebCore::HTMLMediaElement::prepareForLoad):
        (WebCore::HTMLMediaElement::loadInternal):
        (WebCore::HTMLMediaElement::setReadyState):
        (WebCore::HTMLMediaElement::playbackProgressTimerFired):
        (WebCore::HTMLMediaElement::mediaPlayerTimeChanged):
        (WebCore::HTMLMediaElement::userCancelledLoad):

2012-04-02  Andrey Kosyakov  <caseq@chromium.org>

        Web Inspector: CPU time bar missing on top-level events in timeline panel
        https://bugs.webkit.org/show_bug.cgi?id=82909

        Reviewed by Pavel Feldman.

        * inspector/front-end/TimelinePresentationModel.js:
        (WebInspector.TimelinePresentationModel.prototype.addRecord):

2012-04-02  Eric Carlson  <eric.carlson@apple.com>

        Renaming parameters for positioning a track cue
        https://bugs.webkit.org/show_bug.cgi?id=78706

        Change WebVTT settings identifiers for spec change: D: -> vertical:, L: -> line:, 
        T: -> position:, S: -> size:, A: -> align:

        Reviewed by Sam Weinig.

        No new tests, existing tests updated for spec changes.

        * html/track/TextTrackCue.cpp:
        (WebCore::verticalGrowingLeftKeyword): Drive-by change to improve readability.
        (WebCore::TextTrackCue::settingName): New, parse the settings keyword.
        (WebCore::TextTrackCue::parseSettings): Update to match the current spec.
        * html/track/TextTrackCue.h:

        * html/track/WebVTTParser.h:
        (WebCore::WebVTTParser::isValidSettingDelimiter): New.

2012-03-29  Sam Weinig  <sam@webkit.org>

        Add setting to disable Java for local files even if it is otherwise enabled
        https://bugs.webkit.org/show_bug.cgi?id=82685

        Reviewed by Anders Carlsson.

        * WebCore.exp.in:
        Export setting setter.

        * html/HTMLAppletElement.cpp:
        (WebCore::HTMLAppletElement::canEmbedJava):
        * loader/SubframeLoader.cpp:
        (WebCore::SubframeLoader::requestPlugin):
        * page/Navigator.cpp:
        (WebCore::Navigator::javaEnabled):
        Check for both isJavaEnabled and isJavaEnabledForLocalFiles.

        * page/Settings.cpp:
        (WebCore::Settings::setJavaEnabledForLocalFiles):
        * page/Settings.h:
        (WebCore::Settings::isJavaEnabledForLocalFiles):
        Add new setting.

2012-04-02  Alexander Pavlov  <apavlov@chromium.org>

        Web Inspector: Implement frontend for device metrics emulation
        https://bugs.webkit.org/show_bug.cgi?id=82891

        This change implements the backend-based device metrics emulation capability discovery,
        UI (enablement checkbox + input controls), and a persistence setting
        for the user-specified device metrics (screen width/height and an auxiliary font scale factor).

        Reviewed by Pavel Feldman.

        * English.lproj/localizedStrings.js:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * inspector/compile-front-end.py:
        * inspector/front-end/Settings.js:
        * inspector/front-end/SettingsScreen.js:
        (WebInspector.SettingsScreen):
        (WebInspector.SettingsScreen.prototype._createUserAgentSelectRowElement.get const):
        (WebInspector.SettingsScreen.prototype._showPaintRectsChanged):
        (WebInspector.SettingsScreen.prototype.set _applyDeviceMetricsUserInput):
        (WebInspector.SettingsScreen.prototype._setDeviceMetricsOverride):
        (WebInspector.SettingsScreen.prototype._setDeviceMetricsOverride.set if):
        (WebInspector.SettingsScreen.prototype._createDeviceMetricsElement.createInput):
        (WebInspector.SettingsScreen.prototype._createDeviceMetricsElement):
        * inspector/front-end/UserAgentSupport.js: Added.
        (WebInspector.UserAgentSupport.DeviceMetrics):
        (WebInspector.UserAgentSupport.DeviceMetrics.parseSetting):
        (WebInspector.UserAgentSupport.DeviceMetrics.parseUserInput):
        (WebInspector.UserAgentSupport.DeviceMetrics.prototype.isValid):
        (WebInspector.UserAgentSupport.DeviceMetrics.prototype.isWidthValid):
        (WebInspector.UserAgentSupport.DeviceMetrics.prototype.isHeightValid):
        (WebInspector.UserAgentSupport.DeviceMetrics.prototype.isFontScaleFactorValid):
        (WebInspector.UserAgentSupport.DeviceMetrics.prototype.toSetting):
        (WebInspector.UserAgentSupport.DeviceMetrics.prototype.widthToInput):
        (WebInspector.UserAgentSupport.DeviceMetrics.prototype.heightToInput):
        (WebInspector.UserAgentSupport.DeviceMetrics.prototype.fontScaleFactorToInput):
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/helpScreen.css:
        (.help-table > tr > th):
        (.help-table > tr > td):
        (#resolution-override-section):
        * inspector/front-end/inspector.css:
        (.hidden):
        (.error-input):
        * inspector/front-end/inspector.html:
        * inspector/front-end/inspector.js:
        (WebInspector.doLoadedDone):

2012-04-02  Alexis Menard  <alexis.menard@openbossa.org>

        Rename CSSPropertyLonghand class to StylePropertyShorthand.
        https://bugs.webkit.org/show_bug.cgi?id=82624

        Reviewed by Antti Koivisto.

        Rename CSSPropertyLonghand to StylePropertyShorthand as what CSSPropertyLonghand
        is representing is not a longhand but the list of longhands for a given shorthand.
        Also in the same time switch all shorthand declarations to use CSSPropertyID enum
        rather than a int so it is clear on what kind of data we are dealing with.

        In a following patch I will rename CSSPropertyLonghand file.

        No new tests : This is a refactoring, no behaviour change intended

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore):
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        (WebCore::CSSComputedStyleDeclaration::getCSSPropertyValuesForShorthandProperties):
        (WebCore::CSSComputedStyleDeclaration::getCSSPropertyValuesForSidesShorthand):
        (WebCore::CSSComputedStyleDeclaration::copyPropertiesInSet):
        * css/CSSComputedStyleDeclaration.h:
        (WebCore):
        (CSSComputedStyleDeclaration):
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):
        (WebCore::CSSParser::parseFillShorthand):
        (WebCore::CSSParser::parseAnimationShorthand):
        (WebCore::CSSParser::parseTransitionShorthand):
        (WebCore::CSSParser::parseShorthand):
        (WebCore::CSSParser::parse4Values):
        * css/CSSParser.h:
        (WebCore):
        (CSSParser):
        * css/CSSProperty.cpp:
        (WebCore::resolveToPhysicalProperty):
        (WebCore::borderDirections):
        (WebCore::CSSProperty::resolveDirectionAwareProperty):
        * css/CSSPropertyLonghand.cpp:
        (WebCore::backgroundShorthand):
        (WebCore::backgroundPositionShorthand):
        (WebCore::backgroundRepeatShorthand):
        (WebCore::borderShorthand):
        (WebCore::borderAbridgedShorthand):
        (WebCore::borderBottomShorthand):
        (WebCore::borderColorShorthand):
        (WebCore::borderImageShorthand):
        (WebCore::borderLeftShorthand):
        (WebCore::borderRadiusShorthand):
        (WebCore::borderRightShorthand):
        (WebCore::borderSpacingShorthand):
        (WebCore::borderStyleShorthand):
        (WebCore::borderTopShorthand):
        (WebCore::borderWidthShorthand):
        (WebCore::listStyleShorthand):
        (WebCore::fontShorthand):
        (WebCore::marginShorthand):
        (WebCore::outlineShorthand):
        (WebCore::overflowShorthand):
        (WebCore::paddingShorthand):
        (WebCore::webkitAnimationShorthand):
        (WebCore::webkitBorderAfterShorthand):
        (WebCore::webkitBorderBeforeShorthand):
        (WebCore::webkitBorderEndShorthand):
        (WebCore::webkitBorderStartShorthand):
        (WebCore::webkitColumnsShorthand):
        (WebCore::webkitColumnRuleShorthand):
        (WebCore::webkitFlexFlowShorthand):
        (WebCore::webkitMarginCollapseShorthand):
        (WebCore::webkitMarqueeShorthand):
        (WebCore::webkitMaskShorthand):
        (WebCore::webkitMaskPositionShorthand):
        (WebCore::webkitMaskRepeatShorthand):
        (WebCore::webkitTextEmphasisShorthand):
        (WebCore::webkitTextStrokeShorthand):
        (WebCore::webkitTransitionShorthand):
        (WebCore::webkitTransformOriginShorthand):
        (WebCore::webkitWrapShorthand):
        (WebCore::shorthandForProperty):
        * css/CSSPropertyLonghand.h:
        (WebCore::StylePropertyShorthand::StylePropertyShorthand):
        (WebCore::StylePropertyShorthand::properties):
        (WebCore::StylePropertyShorthand::propertiesForInitialization):
        (StylePropertyShorthand):
        (WebCore):
        * css/StylePropertySet.cpp:
        (WebCore::StylePropertySet::getPropertyValue):
        (WebCore::StylePropertySet::borderSpacingValue):
        (WebCore::StylePropertySet::get4Values):
        (WebCore::StylePropertySet::getLayeredShorthandValue):
        (WebCore::StylePropertySet::getShorthandValue):
        (WebCore::StylePropertySet::getCommonValue):
        (WebCore::StylePropertySet::removeShorthandProperty):
        (WebCore::StylePropertySet::propertyIsImportant):
        (WebCore::StylePropertySet::setProperty):
        (WebCore::StylePropertySet::asText):
        (WebCore):
        (WebCore::StylePropertySet::removePropertiesInSet):
        (WebCore::StylePropertySet::copyPropertiesInSet):
        * css/StylePropertySet.h:
        (WebCore):
        (StylePropertySet):
        * editing/EditingStyle.cpp:
        (WebCore):
        (WebCore::removePropertiesInStyle):
        * page/animation/AnimationBase.cpp:
        (WebCore::ShorthandPropertyWrapper::ShorthandPropertyWrapper):
        (WebCore::addShorthandProperties):
        * page/animation/CompositeAnimation.cpp:

2012-03-28  Pavel Podivilov  <podivilov@chromium.org>

        Web Inspector: refactor UI breakpoint listeners.
        https://bugs.webkit.org/show_bug.cgi?id=82481

        Reviewed by Vsevolod Vlasov.

        Breakpoint-added and breakpoint-removed events are currently dispatched on UISourceCode.
        That allows us to move handlers that manage SourceFrame's breakpoint decorations from ScriptsPanel to SourceFrame.
        SourceFrame's "Loaded" event is removed as it was only used by ScriptsPanel to restore SourceFrame's breakpoints.

        * inspector/front-end/DebuggerPresentationModel.js:
        * inspector/front-end/JavaScriptSourceFrame.js:
        (WebInspector.JavaScriptSourceFrame):
        (WebInspector.JavaScriptSourceFrame.prototype.populateLineGutterContextMenu.addConditionalBreakpoint.didEditBreakpointCondition):
        (WebInspector.JavaScriptSourceFrame.prototype.populateLineGutterContextMenu.):
        (WebInspector.JavaScriptSourceFrame.prototype.beforeTextChanged):
        (WebInspector.JavaScriptSourceFrame.prototype.didEditContent):
        (WebInspector.JavaScriptSourceFrame.prototype._addBreakpointDecoration):
        (WebInspector.JavaScriptSourceFrame.prototype._removeBreakpointDecoration):
        (WebInspector.JavaScriptSourceFrame.prototype._breakpointAdded):
        (WebInspector.JavaScriptSourceFrame.prototype._breakpointRemoved):
        (WebInspector.JavaScriptSourceFrame.prototype.onTextViewerContentLoaded):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype._uiSourceCodeAdded):
        (WebInspector.ScriptsPanel.prototype._uiBreakpointAdded):
        (WebInspector.ScriptsPanel.prototype._uiBreakpointRemoved):
        (WebInspector.ScriptsPanel.prototype._createSourceFrame):
        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame.prototype.setContent):
        (WebInspector.SourceFrame.prototype.onTextViewerContentLoaded):

2012-04-02  Rob Buis  <rbuis@rim.com>

        [BlackBerry] Take into account policy checks in ClipboardBlackBerry
        https://bugs.webkit.org/show_bug.cgi?id=82651

        Reviewed by George Staikos.

        Add policy checks in the methods we implemented.

        Covered by existing tests.

        * platform/blackberry/ClipboardBlackBerry.cpp:
        (WebCore::ClipboardBlackBerry::clearData):
        (WebCore::ClipboardBlackBerry::clearAllData):
        (WebCore::ClipboardBlackBerry::getData):
        (WebCore::ClipboardBlackBerry::setData):
        (WebCore::ClipboardBlackBerry::types):
        * platform/blackberry/ClipboardBlackBerry.h:
        (WebCore::ClipboardBlackBerry::create):

2012-04-02  Andrey Kosyakov  <caseq@chromium.org>

        Web Inspector: [refactoring] factor our frame aggregation logic to TimelineFrameController
        https://bugs.webkit.org/show_bug.cgi?id=82735

        Reviewed by Pavel Feldman.

        - factor out frame aggregation logic from TimelineVerticalOverview into TimelineFrameController;
        - if we don't have frames, pretend each top-level event is a frame (this preserves behavior of vertical overview);
        - factor out time-by-category stats aggregation into class methods of TimelineModel for reuse accross timeline modules;
        - do not filter top-level events by type in vertical overview mode;

        * WebCore.gypi: Added TimelineFrameController.js
        * WebCore.vcproj/WebCore.vcproj: ditto.
        * inspector/compile-front-end.py: ditto.
        * inspector/front-end/TimelineFrameController.js: Added.
        (WebInspector.TimelineFrameController):
        (WebInspector.TimelineFrameController.prototype._onRecordAdded):
        (WebInspector.TimelineFrameController.prototype._onRecordsCleared):
        (WebInspector.TimelineFrameController.prototype._addRecord):
        (WebInspector.TimelineFrameController.prototype._flushFrame):
        (WebInspector.TimelineFrameController.prototype._createSyntheticFrame): create a "frame" based on a single top-level record.
        (WebInspector.TimelineFrameController.prototype.dispose): Remove listeners that we added in constructor.
        (WebInspector.TimelineFrame):
        * inspector/front-end/TimelineModel.js: Added utilities for aggregating times by categories.
        (WebInspector.TimelineModel.aggregateTimeByCategories):
        (WebInspector.TimelineModel.aggregateTimeForRecord):
        * inspector/front-end/TimelineOverviewPane.js: Use frame information supplied by TimelineFrameController.
        (WebInspector.TimelineOverviewPane.prototype._showTimelines):
        (WebInspector.TimelineOverviewPane.prototype._setVerticalOverview):
        (WebInspector.TimelineOverviewPane.prototype.addFrame):
        (WebInspector.TimelineVerticalOverview.prototype.reset): Clear stored frames upon reset()
        (WebInspector.TimelineVerticalOverview.prototype.update):
        (WebInspector.TimelineVerticalOverview.prototype.addFrame):
        (WebInspector.TimelineVerticalOverview.prototype._aggregateFrames):
        (WebInspector.TimelineVerticalOverview.prototype.getWindowTimes):
        * inspector/front-end/TimelinePanel.js: Create/dispose TimelineFrameController when switching to/from vertical overview mode.
        * inspector/front-end/TimelinePresentationModel.js:
        (WebInspector.TimelinePresentationModel.Record.prototype.calculateAggregatedStats): Factored out statistics aggregation to utilities method in the model.
        * inspector/front-end/WebKit.qrc: Added TimelineFrameController.js
        * inspector/front-end/inspector.html: ditto.

2012-03-31  Alexander Pavlov  <apavlov@chromium.org>

        Web Inspector: Implement backend for device metrics emulation
        https://bugs.webkit.org/show_bug.cgi?id=82827

        This change implements the inspector backend for the device metrics override feature,
        as well as the respective InspectorClient capability detection.
        When a navigation occurs in the override mode, the page auto-zooming ("fit width")
        is initiated upon the first layout after the DOMContentLoaded event.

        Reviewed by Pavel Feldman.

        * inspector/Inspector.json:
        * inspector/InspectorClient.h:
        (WebCore::InspectorClient::canOverrideDeviceMetrics):
        (WebCore::InspectorClient::overrideDeviceMetrics):
        (WebCore::InspectorClient::autoZoomPageToFitWidth):
        (InspectorClient):
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::didLayoutImpl):
        * inspector/InspectorPageAgent.cpp:
        (PageAgentState):
        (WebCore::InspectorPageAgent::InspectorPageAgent):
        (WebCore::InspectorPageAgent::restore):
        (WebCore::InspectorPageAgent::disable):
        (WebCore::InspectorPageAgent::canOverrideDeviceMetrics):
        (WebCore):
        (WebCore::InspectorPageAgent::setDeviceMetricsOverride):
        (WebCore::InspectorPageAgent::domContentEventFired):
        (WebCore::InspectorPageAgent::loadEventFired):
        (WebCore::InspectorPageAgent::didLayout):
        (WebCore::InspectorPageAgent::updateViewMetrics):
        * inspector/InspectorPageAgent.h:
        * inspector/InspectorState.cpp:
        (WebCore::InspectorState::getDouble):
        (WebCore):
        * inspector/InspectorState.h:
        (InspectorState):
        (WebCore::InspectorState::setDouble):

2012-04-02  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r112813 and r112837.
        http://trac.webkit.org/changeset/112813
        http://trac.webkit.org/changeset/112837
        https://bugs.webkit.org/show_bug.cgi?id=82885

        It made two tests crash on WK2 (Requested by Ossy on #webkit).

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.xcodeproj/project.pbxproj:
        * svg/SVGAllInOne.cpp:
        * svg/SVGAnimateElement.cpp:
        (WebCore::SVGAnimateElement::determineAnimatedPropertyType):
        (WebCore::SVGAnimateElement::calculateAnimatedValue):
        (WebCore::propertyTypesAreConsistent):
        (WebCore::SVGAnimateElement::applyResultsToTarget):
        * svg/SVGAnimatedAngle.cpp:
        (WebCore::SVGAnimatedAngleAnimator::constructFromString):
        (WebCore::SVGAnimatedAngleAnimator::startAnimValAnimation):
        (WebCore::SVGAnimatedAngleAnimator::stopAnimValAnimation):
        (WebCore::SVGAnimatedAngleAnimator::resetAnimValToBaseVal):
        (WebCore::SVGAnimatedAngleAnimator::animValWillChange):
        (WebCore::SVGAnimatedAngleAnimator::animValDidChange):
        (WebCore::SVGAnimatedAngleAnimator::calculateFromAndByValues):
        (WebCore::SVGAnimatedAngleAnimator::calculateAnimatedValue):
        * svg/SVGAnimatedAngle.h:
        (WebCore):
        * svg/SVGAnimatedBoolean.cpp:
        (WebCore::SVGAnimatedBooleanAnimator::startAnimValAnimation):
        (WebCore::SVGAnimatedBooleanAnimator::stopAnimValAnimation):
        (WebCore::SVGAnimatedBooleanAnimator::resetAnimValToBaseVal):
        * svg/SVGAnimatedEnumeration.cpp: Removed.
        * svg/SVGAnimatedEnumeration.h:
        (WebCore):
        * svg/SVGAnimatedInteger.cpp:
        (WebCore::SVGAnimatedIntegerAnimator::startAnimValAnimation):
        (WebCore::SVGAnimatedIntegerAnimator::stopAnimValAnimation):
        (WebCore::SVGAnimatedIntegerAnimator::resetAnimValToBaseVal):
        * svg/SVGAnimatedIntegerOptionalInteger.cpp:
        (WebCore::SVGAnimatedIntegerOptionalIntegerAnimator::startAnimValAnimation):
        (WebCore::SVGAnimatedIntegerOptionalIntegerAnimator::stopAnimValAnimation):
        (WebCore::SVGAnimatedIntegerOptionalIntegerAnimator::resetAnimValToBaseVal):
        (WebCore::SVGAnimatedIntegerOptionalIntegerAnimator::animValWillChange):
        (WebCore::SVGAnimatedIntegerOptionalIntegerAnimator::animValDidChange):
        * svg/SVGAnimatedLength.cpp:
        (WebCore::SVGAnimatedLengthAnimator::startAnimValAnimation):
        (WebCore::SVGAnimatedLengthAnimator::stopAnimValAnimation):
        (WebCore::SVGAnimatedLengthAnimator::resetAnimValToBaseVal):
        * svg/SVGAnimatedLengthList.cpp:
        (WebCore::SVGAnimatedLengthListAnimator::startAnimValAnimation):
        (WebCore::SVGAnimatedLengthListAnimator::stopAnimValAnimation):
        (WebCore::SVGAnimatedLengthListAnimator::resetAnimValToBaseVal):
        * svg/SVGAnimatedNumber.cpp:
        (WebCore::SVGAnimatedNumberAnimator::startAnimValAnimation):
        (WebCore::SVGAnimatedNumberAnimator::stopAnimValAnimation):
        (WebCore::SVGAnimatedNumberAnimator::resetAnimValToBaseVal):
        * svg/SVGAnimatedNumberList.cpp:
        (WebCore::SVGAnimatedNumberListAnimator::startAnimValAnimation):
        (WebCore::SVGAnimatedNumberListAnimator::stopAnimValAnimation):
        (WebCore::SVGAnimatedNumberListAnimator::resetAnimValToBaseVal):
        * svg/SVGAnimatedNumberOptionalNumber.cpp:
        (WebCore::SVGAnimatedNumberOptionalNumberAnimator::startAnimValAnimation):
        (WebCore::SVGAnimatedNumberOptionalNumberAnimator::stopAnimValAnimation):
        (WebCore::SVGAnimatedNumberOptionalNumberAnimator::resetAnimValToBaseVal):
        (WebCore::SVGAnimatedNumberOptionalNumberAnimator::animValWillChange):
        (WebCore::SVGAnimatedNumberOptionalNumberAnimator::animValDidChange):
        * svg/SVGAnimatedPreserveAspectRatio.cpp:
        (WebCore::SVGAnimatedPreserveAspectRatioAnimator::startAnimValAnimation):
        (WebCore::SVGAnimatedPreserveAspectRatioAnimator::stopAnimValAnimation):
        (WebCore::SVGAnimatedPreserveAspectRatioAnimator::resetAnimValToBaseVal):
        * svg/SVGAnimatedRect.cpp:
        (WebCore::SVGAnimatedRectAnimator::startAnimValAnimation):
        (WebCore::SVGAnimatedRectAnimator::stopAnimValAnimation):
        (WebCore::SVGAnimatedRectAnimator::resetAnimValToBaseVal):
        * svg/SVGAnimatedString.cpp:
        (WebCore::SVGAnimatedStringAnimator::startAnimValAnimation):
        (WebCore::SVGAnimatedStringAnimator::stopAnimValAnimation):
        (WebCore::SVGAnimatedStringAnimator::resetAnimValToBaseVal):
        * svg/SVGAnimatedTransformList.cpp:
        (WebCore::SVGAnimatedTransformListAnimator::startAnimValAnimation):
        (WebCore::SVGAnimatedTransformListAnimator::stopAnimValAnimation):
        (WebCore::SVGAnimatedTransformListAnimator::resetAnimValToBaseVal):
        * svg/SVGAnimatedType.cpp:
        (WebCore::SVGAnimatedType::~SVGAnimatedType):
        (WebCore::SVGAnimatedType::createAngle):
        (WebCore::SVGAnimatedType::angle):
        (WebCore::SVGAnimatedType::valueAsString):
        (WebCore::SVGAnimatedType::setValueAsString):
        (WebCore::SVGAnimatedType::setPreserveAspectRatioBaseValue):
        (WebCore):
        (WebCore::SVGAnimatedType::supportsAnimVal):
        * svg/SVGAnimatedType.h:
        (SVGAnimatedType):
        * svg/SVGAnimatedTypeAnimator.h:
        (WebCore::SVGAnimatedTypeAnimator::findAnimatedPropertiesForAttributeName):
        (SVGAnimatedTypeAnimator):
        (WebCore::SVGAnimatedTypeAnimator::startAnimation):
        (WebCore::SVGAnimatedTypeAnimator::stopAnimValAnimationForType):
        (WebCore::SVGAnimatedTypeAnimator::animValDidChangeForType):
        (WebCore::SVGAnimatedTypeAnimator::animValWillChangeForType):
        (WebCore::SVGAnimatedTypeAnimator::constructFromOneBaseValue):
        (WebCore::SVGAnimatedTypeAnimator::resetFromOneBaseValue):
        (WebCore::SVGAnimatedTypeAnimator::constructFromTwoBaseValues):
        (WebCore::SVGAnimatedTypeAnimator::resetFromTwoBaseValues):
        (WebCore::SVGAnimatedTypeAnimator::castAnimatedPropertyToActualType):
        (WebCore::SVGAnimatedTypeAnimator::collectAnimatedPropertiesFromInstances):
        * svg/SVGAnimatorFactory.h:
        (WebCore::SVGAnimatorFactory::create):
        * svg/SVGMarkerElement.cpp:
        (WebCore):
        * svg/properties/SVGAnimatedListPropertyTearOff.h:
        (SVGAnimatedListPropertyTearOff):
        * svg/properties/SVGAnimatedPropertyTearOff.h:
        (SVGAnimatedPropertyTearOff):
        * svg/properties/SVGAnimatedStaticPropertyTearOff.h:

2012-04-02  Yury Semikhatsky  <yurys@chromium.org>

        [V8] Web Inspector: don't crash when resolving DOM wrapper heap snapshot node to JS object
        https://bugs.webkit.org/show_bug.cgi?id=82872

        Reviewed by Pavel Feldman.

        Don't resolve heap object to a JS object if it is a wrapper boilerplate.

        Test: inspector/profiler/heap-snapshot-inspect-dom-wrapper.html

        * bindings/v8/ScriptProfiler.cpp:
        (WebCore::ScriptProfiler::objectByHeapObjectId):
        (WebCore):
        * inspector/InspectorProfilerAgent.cpp:
        (WebCore::InspectorProfilerAgent::getObjectByHeapObjectId):

2012-04-02  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r112659.
        http://trac.webkit.org/changeset/112659
        https://bugs.webkit.org/show_bug.cgi?id=82884

        Undo the rollout of 112489 since this was not the cause of
        failures (Requested by apavlov on #webkit).

        * css/CSSSegmentedFontFace.cpp:
        (WebCore::appendFontDataWithInvalidUnicodeRangeIfLoading):
        (WebCore):
        (WebCore::CSSSegmentedFontFace::getFontData):

2012-04-01  Antti Koivisto  <antti@apple.com>

        Add mechanism for mapping from StyleRules back to fully constructed CSSStyleRules 
        https://bugs.webkit.org/show_bug.cgi?id=82847

        Reviewed by Andreas Kling.

        Inspector is using CSSStyleSelector to calculate the CSS rules matched by a given element and
        expects to be able to walk the parent chain. After 82728 the stylesheet object tree won't have
        parent pointers and we are going to need another mechanism to support this.
        
        The new code does not actually run without 82728.
        
        * css/CSSStyleSelector.cpp:
        (WebCore):
        (WebCore::CSSStyleSelector::appendAuthorStylesheets):
        (WebCore::loadFullDefaultStyle):
        (WebCore::ensureDefaultStyleSheetsForElement):
        (WebCore::CSSStyleSelector::collectMatchingRulesForList):
        * css/CSSStyleSelector.h:
        (CSSStyleSelector):
    
        Add ensureFullCSSOMWrapperForStyleRule() method which traverses through all style
        sheets that apply to the document and constucts wrappers for the rules. These wrappers
        are cached to a map. The map can then be used for StyleRule -> CSSStyleRule lookups.
        
        This uses quite a bit of memory so should not be used for any normal engine functions.
    
        * inspector/InspectorCSSAgent.cpp:
        (WebCore::InspectorCSSAgent::getMatchedStylesForNode):
        (WebCore::InspectorCSSAgent::buildArrayForRuleList):
    
        Use the new mechanism to get fully functional wrappers for rule objects without parent pointer.
    
        * inspector/InspectorCSSAgent.h:
        (InspectorCSSAgent):

2012-04-02  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix make distcheck issues.

        * GNUmakefile.list.am: Remove duplicated files and add missing
        header.

2012-04-02  Levi Weintraub  <leviw@chromium.org>

        Add rounding to Plugin creation in SubframeLoader
        https://bugs.webkit.org/show_bug.cgi?id=82221

        Reviewed by Eric Seidel.

        Adding rounding to the LayoutSize used to construct Plugins in SubframeLoader. Plugins, which
        are widgets, are always placed on integer boundaries, which means their sizes can be rounded
        without considering their location. See https://trac.webkit.org/wiki/LayoutUnit for details.

        No new tests. No change in behavior.

        * loader/SubframeLoader.cpp:
        (WebCore::SubframeLoader::loadMediaPlayerProxyPlugin):
        (WebCore::SubframeLoader::createJavaAppletWidget):
        (WebCore::SubframeLoader::loadPlugin):

2012-04-02  Mario Sanchez Prada  <msanchez@igalia.com>

        in page anchor and keyboard navigation
        https://bugs.webkit.org/show_bug.cgi?id=17450

        Reviewed by Chris Fleizach.

        Ensure that the position of the caret and the focused element
        get updated when following an anchor link.

        The implementation is moved from platform specific files out to
        AXObjectCache.cpp since it should be a cross-platform valid
        solution. However, the new code is currently activated for the Mac
        and GTK ports only, since the windows and chromium ports provide
        their own specific code, and removing it now might break things.

        Test: accessibility/anchor-link-selection-and-focus.html

        * accessibility/AXObjectCache.cpp:
        (WebCore):
        (WebCore::AXObjectCache::handleScrolledToAnchor): Cross-platform
        implementation of the fix, only activated for Mac and GTK for now.
        * accessibility/gtk/AXObjectCacheAtk.cpp: Removed the GTK-specific
        implementation of WebCore::AXObjectCache::handleScrolledToAnchor.
        * accessibility/mac/AXObjectCacheMac.mm: Removed the Mac-specific
        implementation of WebCore::AXObjectCache::handleScrolledToAnchor.

2012-04-02  Hayato Ito  <hayato@chromium.org>

        [Shadow DOM] Introduce ComposedShadowTreeWalker as a successor of ReifiedTreeTraversal APIs
        https://bugs.webkit.org/show_bug.cgi?id=82009

        Reviewed by Dimitri Glazkov.

        ComposedShadowTreeWalker is intended to be a successor of current ReifiedTreeTraversal APIs.
        ComposedShadowTreeWalker uses a cursor pattern and takes a starting node in its constructor.

        A typical usage is:

          for (ComposedShadowTreeWalker walker(node); walker.get(); walker.next()) {
                ...
          }

        Follow-up patches will update clients which use current ReifiedTreeTraversal APIs so that they use the Walker.
        More tests will come along with these actual use cases in follow-up patches.
        After that, I'll get rid of ReifiedTreeTraversal APIs in favor of the Walker.

        Note that 'ComposedShadowTree' and 'ReifiedTree' has the same meaning.
        Because ReifiedTree is not intuitive name, we are starting to use 'ComposedShadowTree' from now.

        Test: fast/dom/shadow/composed-shadow-tree-walker.html

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.exp.in:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/ComposedShadowTreeWalker.cpp: Added.
        (WebCore):
        (WebCore::isShadowHost):
        (WebCore::shadowTreeFor):
        (WebCore::shadowTreeOfParent):
        (WebCore::ComposedShadowTreeWalker::ComposedShadowTreeWalker):
        (WebCore::ComposedShadowTreeWalker::fromFirstChild):
        (WebCore::ComposedShadowTreeWalker::firstChild):
        (WebCore::ComposedShadowTreeWalker::traverseFirstChild):
        (WebCore::ComposedShadowTreeWalker::lastChild):
        (WebCore::ComposedShadowTreeWalker::traverseLastChild):
        (WebCore::ComposedShadowTreeWalker::traverseChild):
        (WebCore::ComposedShadowTreeWalker::traverseLightChildren):
        (WebCore::ComposedShadowTreeWalker::traverseNode):
        (WebCore::ComposedShadowTreeWalker::nextSibling):
        (WebCore::ComposedShadowTreeWalker::previousSibling):
        (WebCore::ComposedShadowTreeWalker::traverseSiblingOrBackToInsertionPoint):
        (WebCore::ComposedShadowTreeWalker::traverseSiblingInCurrentTree):
        (WebCore::ComposedShadowTreeWalker::traverseSiblingOrBackToYoungerShadowRoot):
        (WebCore::ComposedShadowTreeWalker::escapeFallbackContentElement):
        (WebCore::ComposedShadowTreeWalker::traverseNodeEscapingFallbackContents):
        (WebCore::ComposedShadowTreeWalker::parent):
        (WebCore::ComposedShadowTreeWalker::traverseParent):
        (WebCore::ComposedShadowTreeWalker::traverseParentInCurrentTree):
        (WebCore::ComposedShadowTreeWalker::traverseParentBackToYoungerShadowRootOrHost):
        (WebCore::ComposedShadowTreeWalker::traverseNextSibling):
        (WebCore::ComposedShadowTreeWalker::traversePreviousSibling):
        (WebCore::ComposedShadowTreeWalker::next):
        (WebCore::ComposedShadowTreeWalker::previous):
        * dom/ComposedShadowTreeWalker.h: Added.
        (WebCore):
        (ComposedShadowTreeWalker):
        (WebCore::ComposedShadowTreeWalker::get):
        (WebCore::ComposedShadowTreeWalker::canCrossUpperBoundary):
        (WebCore::ComposedShadowTreeWalker::assertPrecondition):
        (WebCore::ComposedShadowTreeWalker::assertPostcondition):
        * testing/Internals.cpp:
        (WebCore::Internals::nextSiblingByWalker):
        (WebCore):
        (WebCore::Internals::firstChildByWalker):
        (WebCore::Internals::lastChildByWalker):
        (WebCore::Internals::nextNodeByWalker):
        (WebCore::Internals::previousNodeByWalker):
        * testing/Internals.h:
        (Internals):
        * testing/Internals.idl:

2012-04-02  Pavel Podivilov  <podivilov@chromium.org>

        Web Inspector: breakpoints are not shown in sidebar pane after switching pretty-print mode.
        https://bugs.webkit.org/show_bug.cgi?id=82768

        Reviewed by Yury Semikhatsky.

        When UISourceCode is replaced with another in ScriptsPanel, newly added
        UISourceCode could already have breakpoints. We should iterate over existing
        breakpoints and add them to sidebar pane.

        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype._uiSourceCodeReplaced):

2012-04-02  Eric Seidel  <eric@webkit.org>

        Teach RuleSet about modern memory management
        https://bugs.webkit.org/show_bug.cgi?id=82856

        Reviewed by Adam Barth.

        No change in behavior, thus no tests.

        * css/CSSStyleSelector.cpp:
        (WebCore::RuleSet::create):
        (RuleSet):
        (WebCore::RuleSet::RuleSetSelectorPair::RuleSetSelectorPair):
        (WebCore::CSSStyleSelector::CSSStyleSelector):
        (WebCore::makeRuleSet):
        (WebCore::CSSStyleSelector::appendAuthorStylesheets):
        (WebCore::loadFullDefaultStyle):
        (WebCore::loadSimpleDefaultStyle):
        (WebCore::loadViewSourceStyle):
        (WebCore::CSSStyleSelector::collectMatchingRulesForList):

2012-04-02  Kent Tamura  <tkent@chromium.org>

        Add a calendar picker indicator to date-type input fields
        https://bugs.webkit.org/show_bug.cgi?id=80478

        Reviewed by Hajime Morita.

        Add an indicator to date-type controls. The bahevior change is enclosed
        with ENABLE_CALENDAR_PICKER.

        - Remove spin buttons from date-type controls.
        It's not so helpful if we have a calendar picker. We introduce
        TextFieldInputType::shouldHaveSpinButton().

        - Add CalendarPickerElement.
        This is added into a shadow tree of a date-type control. It uses
        RenderDetailsMarker.

        We're going to add click handler and so on to CalendarPickerElement.

        Test: fast/forms/date/date-appearance.html

        * WebCore.gypi: Add CalendarPickerElement.{cpp,h}
        * css/html.css:
        (input::-webkit-calendar-picker-indicator):
        * html/DateInputType.cpp:
        (WebCore::DateInputType::createShadowSubtree): Insert CalendarPickerElement.
        (WebCore::DateInputType::needsContainer):
        Alwyas return true because we have an extra decoration element.
        (WebCore::DateInputType::shouldHaveSpinButton):
        Always return false to disable spin button.
        * html/DateInputType.h:
        (DateInputType): Add declarations.
        * html/TextFieldInputType.cpp:
        (WebCore::TextFieldInputType::shouldHaveSpinButton):
        (WebCore::TextFieldInputType::createShadowSubtree): Move some code to shouldHaveSpinButton().
        * html/TextFieldInputType.h:
        (TextFieldInputType): Add a declartion.
        * html/shadow/CalendarPickerElement.cpp:
        (WebCore::CalendarPickerElement::CalendarPickerElement):
        (WebCore::CalendarPickerElement::create):
        (WebCore::CalendarPickerElement::createRenderer): Creates RenderDetailsMarker.
        * html/shadow/CalendarPickerElement.h: Added.
        * rendering/RenderDetailsMarker.cpp:
        (WebCore::RenderDetailsMarker::isOpen): Always show a down arrow if this is in <input>.
        * rendering/RenderDetailsMarker.h:

2012-04-02  Andrey Kosyakov  <caseq@chromium.org>

        Web Inspector: make timeline overview a view
        https://bugs.webkit.org/show_bug.cgi?id=82861

        Reviewed by Yury Semikhatsky.

        - make TimelineOverviewPane a view;
        - only update it if it's visible or upon wasShown().

        * inspector/front-end/TimelineOverviewPane.js:
        (WebInspector.TimelineOverviewPane):
        (WebInspector.TimelineOverviewPane.prototype.wasShown): forced update.
        (WebInspector.TimelineOverviewPane.prototype._updateCategoryStrips):
        (WebInspector.TimelineOverviewPane.prototype._scheduleRefresh): skip refresh if not showing;
        * inspector/front-end/TimelinePanel.js: timelineOverviewPane.show() instead of appendChild();
        (WebInspector.TimelinePanel):

2012-04-02  Patrick Gansterer  <paroga@webkit.org>

        Build fix for ENABLE(SVG) && !ENABLE(FILTERS) after r112813.

        * svg/SVGAnimatedEnumeration.cpp:
        (WebCore::enumerationValueForTargetAttribute):

2012-04-02  Adam Barth  <abarth@webkit.org>

        [Chromium] Move another block of headers from WebKit/chromium/public/platform to Platform/chromium/public
        https://bugs.webkit.org/show_bug.cgi?id=82862

        Rubber-stamped by Eric Seidel.

        This is part of the change discussed in
        https://lists.webkit.org/pipermail/webkit-dev/2012-March/020166.html

        * WebCore.gypi:
        * platform/chromium/support/WebAudioBus.cpp: Copied from Source/WebKit/chromium/src/WebAudioBus.cpp.

2012-04-01  Adam Barth  <abarth@webkit.org>

        [Chromium] Move thread-related APIs from WebKit into Platform
        https://bugs.webkit.org/show_bug.cgi?id=82858

        Reviewed by Eric Seidel.

        This is part of the change discussed in
        https://lists.webkit.org/pipermail/webkit-dev/2012-March/020166.html

        * WebCore.gypi:
        * platform/chromium/support/WebThreadSafeData.cpp: Copied from Source/WebKit/chromium/src/WebThreadSafeData.cpp.

2012-03-29  Kent Tamura  <tkent@chromium.org>

        Fix some problems of text field decoration
        https://bugs.webkit.org/show_bug.cgi?id=82693

        Reviewed by Dimitri Glazkov.

        - Fix a problem that decorations are not removed when the input type is
        changed.
        - Add a comment to the 'willDetach' callback.

        No new tests because the behavior changes are not visible yet.

        * GNUMakefile.list.am: Add HTMLShadowElement.*.
        * html/InputType.cpp:
        (WebCore::InputType::destroyShadowSubtree):
        Remove all of ShadowRoot contents, and add a <shadow> element to each of
        them. We don't remove ShadowRoots from the tree because it's not
        supported well.
        * html/shadow/TextFieldDecorationElement.cpp:
        (getDecorationRootAndDecoratedRoot): A helper function for decorate().
        If the input element has a ShadowRoot with single <shadow> child, we
        don't create new ShadowRoot and reuse it.
        (WebCore::TextFieldDecorationElement::decorate):
        Use getDecorationRootAndDecoratedRoot().
        * html/shadow/TextFieldDecorationElement.h:
        (TextFieldDecorator): Add a comment to willDetach().

2012-04-01  Li Yin  <li.yin@intel.com>

        [WebSocket]Reserved bits test case should cover both extension and no-extension scenarios
        https://bugs.webkit.org/show_bug.cgi?id=82100

        Reviewed by Kent Tamura.

        When it had no negotiated deflate-frame extension, if browser received the frame with
        setting compressed bit, it should fail the connection, and it should cover both
        enabling ZLIB port and disabling ZLIB port.

        Test:  http/tests/websocket/tests/hybi/reserved-bits.html 

        * Modules/websockets/WebSocketDeflateFramer.cpp:
        (WebCore::WebSocketDeflateFramer::inflate):

2012-04-01  Adam Barth  <abarth@webkit.org>

        Clean up Document::canNavigate
        https://bugs.webkit.org/show_bug.cgi?id=82282

        Reviewed by Eric Seidel.

        This patch is just a minor clean up to Document::canNavigate. Eric
        asked me to clean up the function when I moved it from FrameLoader. I'm
        not sure this patch is much of a win, but at least the comments say
        things that are more sensible now.

        * dom/Document.cpp:
        (WebCore::printNavigationErrorMessage):
        (WebCore):
        (WebCore::Document::canNavigate):

2012-04-01  Jon Lee  <jonlee@apple.com>

        Rename notification properties and functions
        https://bugs.webkit.org/show_bug.cgi?id=80482
        <rdar://problem/10912432>

        Reviewed by Kentaro Hara.

        Change method name to close(), and set tag property on Notifications, based on discussions in WG:
        http://lists.w3.org/Archives/Public/public-web-notification/2012Mar/0024.html
        http://lists.w3.org/Archives/Public/public-web-notification/2012Mar/0013.html

        * notifications/Notification.cpp:
        (WebCore::Notification::~Notification): Use close().
        (WebCore::Notification::close):
        * notifications/Notification.h:
        (Notification):
        (WebCore::Notification::cancel): Wrap in ENABLE(LEGACY_NOTIFICATIONS), and use close().
        (WebCore::Notification::replaceId): Wrap in ENABLE(LEGACY_NOTIFICATIONS), and use tag().
        (WebCore::Notification::setReplaceId): Wrap in ENABLE(LEGACY_NOTIFICATIONS), and use setTag().
        (WebCore::Notification::tag):
        (WebCore::Notification::setTag):
        * notifications/Notification.idl: Preserve cancel() and replaceID in ENABLE(LEGACY_NOTIFICATIONS), and
        close() and tag in ENABLE(NOTIFICATIONS).

2012-04-01  Eric Seidel  <eric@webkit.org>

        Unreviewed, rolling out r112760.
        http://trac.webkit.org/changeset/112760
        https://bugs.webkit.org/show_bug.cgi?id=82795

        Revert addition of webkitseamless.  I'll do this work on
        GitHub instead to avoid any half-implemented feature concerns.

        * html/HTMLAttributeNames.in:
        * html/HTMLIFrameElement.idl:

2012-04-01  Timothy Hatcher  <timothy@apple.com>

        Fix a crash when closing a tab/window while the Web Inspector is stopped in the debugger.

        https://webkit.org/b/82846
        rdar://problem/8133494

        Reviewed by Yury Semikhatsky.

        * bindings/js/PageScriptDebugServer.cpp:
        (WebCore::PageScriptDebugServer::didPause): Added assert for page and early return. Also assert that
        m_pausedPage is null.
        (WebCore::PageScriptDebugServer::didContinue): Page can be null if we are continuing because the Page closed.
        So add a null check before using it. Added an assert that the page is null or m_pausedPage. 
        (WebCore::PageScriptDebugServer::didRemoveLastListener): Added assert for page.

2012-04-01  Tony Tseung  <tseung@apple.com>

        Composite Font References is a new established standard (ISO/IEC 14496-28:2012) for specifying
        composite fonts from existing physical fonts.
        <rdar://problem/10717370>
        https://bugs.webkit.org/show_bug.cgi?id=82810
        
        CoreText have already the features enabled, here we added this to WebKit text layout and rendering.
        A member function getCompositeFontReferenceFontData is added to the SimpleFontData class for the component font
        correspond to the platformData, in this case, a NSFont. This is used when CoreText layout had resulted
        a component of the Composite Font Reference and its corresponding SimpleFontData object is then cached
        in the SimpleFontData object of the posting font (Composite Font Reference).
        
        When glyphs are encoded to form the GlyphPage for rendering, the Composite Font Reference is handled throught
        the CoreText layout path (using CTLine), here the resulting glyph is associated with a font which could
        be not the original font request. In this case, these are the component fonts of the Composite Font
        Reference. This is then identified and then added to the GlyphPage appropriately.
        
        To support this feature, a member function isCompositeFontReference is added to FontPlatformData to
        indicate a font is a Composite Font Reference. Also in order to pass the component font correctly a boolean
        isPrinterFont is added to one the FontPlatformData constructors to describe the NSFont.

        Reviewed by Dan Bernstein.

        Added test LayoutTests/fast/text/international/text-spliced-font.html

        * WebCore.exp.in:
        Replaced obsolete FontPlatformData constructor entry.

        * platform/graphics/FontPlatformData.cpp:
        (WebCore::FontPlatformData::FontPlatformData):
        Copy of the additional m_isCompositeFontReference and m_isPrinterFont data members.
        
        (WebCore::FontPlatformData::operator=):
        Assignment of the additional m_isCompositeFontReference and m_isPrinterFont data members.
        
        * platform/graphics/FontPlatformData.h:
        (WebCore::FontPlatformData::FontPlatformData):
        (FontPlatformData):
        Default value of m_isCompositeFontReference and m_isPrinterFont data members are set to false in various constructors.
        
        (WebCore::FontPlatformData::isCompositeFontReference):
        Newly added for Composite Font Reference type font.

        (WebCore::FontPlatformData::isPrinterFont):
        Newly added for describing the NSFont parameter if is applicable.

        (WebCore::FontPlatformData::operator==):
        Comparison of the additional m_isCompositeFontReference and m_isPrinterFont data members.

        * platform/graphics/SimpleFontData.cpp:
        (WebCore::SimpleFontData::DerivedFontData::~DerivedFontData):
        Clean up the cache for component fonts of the Composite Font References.

        * platform/graphics/SimpleFontData.h:
        (SimpleFontData):
        Added member function const SimpleFontData* getCompositeFontReferenceFontData(NSFont *key) const.
        
        (DerivedFontData):
        Added CFDictionary for caching the component font of Composite Font Reference.

        * platform/graphics/cocoa/FontPlatformDataCocoa.mm:
        (WebCore::FontPlatformData::FontPlatformData):
        Data members m_isCompositeFontReference and m_isPrinterFont are initialised and their values are determined in the body of the contructor.

        (WebCore::FontPlatformData::setFont):
        Data members m_isCompositeFontReference and m_isPrinterFont are determined and set.
        
        * platform/graphics/mac/FontCacheMac.mm:
        (WebCore::FontCache::createFontPlatformData):
        Boolean value isUsingPrinterFont is passed in the new FontPlatformData constructor.
        
        * platform/graphics/mac/GlyphPageTreeNodeMac.cpp:
        (WebCore::shouldUseCoreText):
        Added the condition for Composite Font Reference type font.
        
        (WebCore::GlyphPage::fill):
        In the case of Composite Font Reference, when iterate the runs, component font of Composite Font
        Reference is used to fill the glyph index in the GlyphPage.
        
        * platform/graphics/mac/SimpleFontDataMac.mm:
        (WebCore::SimpleFontData::getCompositeFontReferenceFontData):
        Newly added method for the component fonts correspond to the platformData, in this case, a NSFont. 
        This SimpleFontData is created and cached in this object and will only be deleted when the destructor
        if this is called.
        
2012-04-01  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Support the Network Information API
        https://bugs.webkit.org/show_bug.cgi?id=73528

        Reviewed by Adam Barth.

        Network Information APIs is to provide an interface for Web Applications to access
        the underlying network information of device. In Web Application case, they need to know
        what current network interface it uses. Because, it is important to know current network
        information(bandwidth, metered) in mobile domain. Thus, Web Application can let user know
        whether current network information via this new functionality. In addition, in streaming
        service case, Web Application can control content resolution according to kind of network.

        http://dvcs.w3.org/hg/dap/raw-file/tip/network-api/index.html

        Tests: networkinformation/add-listener-from-callback.html
               networkinformation/basic-all-types-of-events.html
               networkinformation/basic-operation.html
               networkinformation/event-after-navigation.html
               networkinformation/multiple-frames.html
               networkinformation/updates.html
               networkinformation/window-property.html

        * CMakeLists.txt:
        * Modules/networkinfo/NavigatorNetworkInfoConnection.cpp: Added.
        (WebCore):
        (WebCore::NavigatorNetworkInfoConnection::NavigatorNetworkInfoConnection):
        (WebCore::NavigatorNetworkInfoConnection::~NavigatorNetworkInfoConnection):
        (WebCore::NavigatorNetworkInfoConnection::from):
        (WebCore::NavigatorNetworkInfoConnection::webkitConnection):
        * Modules/networkinfo/NavigatorNetworkInfoConnection.h: Added.
        (WebCore):
        (NavigatorNetworkInfoConnection):
        * Modules/networkinfo/NavigatorNetworkInfoConnection.idl: Added.
        * Modules/networkinfo/NetworkInfo.cpp: Added.
        (WebCore):
        (WebCore::NetworkInfo::NetworkInfo):
        * Modules/networkinfo/NetworkInfo.h: Added.
        (WebCore):
        (NetworkInfo):
        (WebCore::NetworkInfo::create):
        (WebCore::NetworkInfo::bandwidth):
        (WebCore::NetworkInfo::metered):
        * Modules/networkinfo/NetworkInfoClient.h: Added.
        (WebCore):
        (NetworkInfoClient):
        (WebCore::NetworkInfoClient::~NetworkInfoClient):
        * Modules/networkinfo/NetworkInfoConnection.cpp: Added.
        (WebCore):
        (WebCore::NetworkInfoConnection::create):
        (WebCore::NetworkInfoConnection::NetworkInfoConnection):
        (WebCore::NetworkInfoConnection::~NetworkInfoConnection):
        (WebCore::NetworkInfoConnection::bandwidth):
        (WebCore::NetworkInfoConnection::metered):
        (WebCore::NetworkInfoConnection::didChangeNetworkInformation):
        (WebCore::NetworkInfoConnection::addEventListener):
        (WebCore::NetworkInfoConnection::removeEventListener):
        (WebCore::NetworkInfoConnection::eventTargetData):
        (WebCore::NetworkInfoConnection::ensureEventTargetData):
        (WebCore::NetworkInfoConnection::interfaceName):
        (WebCore::NetworkInfoConnection::suspend):
        (WebCore::NetworkInfoConnection::resume):
        (WebCore::NetworkInfoConnection::stop):
        * Modules/networkinfo/NetworkInfoConnection.h: Added.
        (WebCore):
        (NetworkInfoConnection):
        (WebCore::NetworkInfoConnection::scriptExecutionContext):
        (WebCore::NetworkInfoConnection::canSuspend):
        (WebCore::NetworkInfoConnection::refEventTarget):
        (WebCore::NetworkInfoConnection::derefEventTarget):
        * Modules/networkinfo/NetworkInfoConnection.idl: Added.
        * Modules/networkinfo/NetworkInfoController.cpp: Added.
        (WebCore):
        (WebCore::NetworkInfoController::NetworkInfoController):
        (WebCore::NetworkInfoController::~NetworkInfoController):
        (WebCore::NetworkInfoController::create):
        (WebCore::NetworkInfoController::addListener):
        (WebCore::NetworkInfoController::removeListener):
        (WebCore::NetworkInfoController::didChangeNetworkInformation):
        (WebCore::NetworkInfoController::isActive):
        (WebCore::NetworkInfoController::supplementName):
        (WebCore::provideNetworkInfoTo):
        * Modules/networkinfo/NetworkInfoController.h: Added.
        (WebCore):
        (NetworkInfoController):
        (WebCore::NetworkInfoController::client):
        (WebCore::NetworkInfoController::from):
        * dom/EventNames.h:
        (WebCore):
        * dom/EventTargetFactory.in:
        * testing/Internals.cpp:
        (WebCore::Internals::setNetworkInformation):
        (WebCore):
        * testing/Internals.h:
        (Internals):
        * testing/Internals.idl:

2012-04-01  Leo Yang  <leo.yang@torchmobile.com.cn>

        [BlackBerry] Use GraphicsContext::fillPath() and strokePath instead of drawPath() in RenderThemeBlackBerry
        https://bugs.webkit.org/show_bug.cgi?id=81486

        Reviewed by Rob Buis.

        RenderThemeBlackBerry was using GraphicsContext::drawPath() that's added for BlackBerry internally.
        But we already have fillPath() and strokePath() in GraphicsContext. So just substitute drawPath()
        by them. Also fix a build issue by adding a #include line.

        No functionalities changed, no new tests.

        * platform/blackberry/RenderThemeBlackBerry.cpp:
        (WebCore::RenderThemeBlackBerry::paintTextFieldOrTextAreaOrSearchField):
        (WebCore::RenderThemeBlackBerry::paintButton):

2012-04-01  Nikolas Zimmermann  <nzimmermann@rim.com>

        Enable animVal support for SVGAnimatedEnumeration
        https://bugs.webkit.org/show_bug.cgi?id=82459

        Reviewed by Dirk Schulze.

        Enable animVal support for the last missing SVG DOM primitive: SVGAnimatedEnumeration.
        It's a bit more involved than the others as we have to differentiate between the various
        enumerations to use the correct SVGPropertyTraits<MyEnum>::fromString() code-path.

        One SVGAnimatedEnumeration property in the SVG DOM is special: SVGAnimatedEnumeration orientType
        from SVGMarkerElement. SVGMarkerElement exposes both the orientType and SVGAnimatedAngle orientAngle
        SVG DOM properties and both get mapped to the same SVGNames::orientAttr ("orient" XML attribute).
        That means that any animation of the orientAttr has to update both orientType & orientAngle.

        This is a not a new requirement, we already support attributes like 'stdDeviation' from
        SVGFEGaussianBlurElement, which get mapped to multiple SVG DOM objects: SVGAnimatedInteger stdDeviationX/Y.
        The difference is that <integer-optional-integer> or <number-optional-number> animations use the
        same type in the pair<xxx, xxx> (eg. both int, or both float). The 'orient' attribute needs to be
        mapped to pair<xxx, yyy> types. Generalize the templates in SVGAnimatedTypeAnimator to support that.

        Example:
        <marker id="someMarkerElement" orient="45deg"/>
        <animate fill="remove" begin="1s" dur="2s" from="90deg" to="auto" attributeName="orient" xlink:href="#someMarkerElement"/>

        at 0s: someMarkerElement.orientType.animVal = SVGMarkerElement.SVG_MARKER_ORIENT_ANGLE
               someMarkerElement.orientAngle.animVal.value = 45

               someMarkerElement.orientType.baseVal = SVGMarkerElement.SVG_MARKER_ORIENT_ANGLE
               someMarkerElement.orientAngle.baseVal.value = 45

        at 1s: someMarkerElement.orientType.animVal = SVGMarkerElement.SVG_MARKER_ORIENT_ANGLE
               someMarkerElement.orientAngle.animVal.value = 90

               someMarkerElement.orientType.baseVal = SVGMarkerElement.SVG_MARKER_ORIENT_ANGLE
               someMarkerElement.orientAngle.baseVal.value = 45

        at 2s: someMarkerElement.orientType.animVal = SVGMarkerElement.SVG_MARKER_ORIENT_AUTO
               someMarkerElement.orientAngle.animVal.value = 0

               someMarkerElement.orientType.baseVal = SVGMarkerElement.SVG_MARKER_ORIENT_ANGLE
               someMarkerElement.orientAngle.baseVal.value = 45

         > 3s: someMarkerElement.orientType.animVal = SVGMarkerElement.SVG_MARKER_ORIENT_ANGLE
               someMarkerElement.orientAngle.animVal.value = 45

               someMarkerElement.orientType.baseVal = SVGMarkerElement.SVG_MARKER_ORIENT_ANGLE
               someMarkerElement.orientAngle.baseVal.value = 45

        We need to map the 'orient' attribute to a pair<SVGAngle, unsigned short> type, in order
        to track both orientAngle & orientType at the same type. Fortunately SVGAnimatedAngle
        is only used in the SVG DOM for SVGMarkerElements orientAngle property. We can directly
        switch SVGAnimatedAngleAnimator to the new pair<SVGAngle, unsigned short> type instead
        of having to introduce a special SVGAnimatedAngleAndEnumerationAnimator.

        Added tests for all SVGAnimatedEnumeration properties in the SVG DOM, including an extensive set of tests
        for the synchronization of the orientType / orientAngle properties, when they get animated.

        Tests: svg/animations/animate-marker-orient-from-angle-to-angle.html
               svg/animations/animate-marker-orient-from-angle-to-auto.html
               svg/animations/animate-marker-orient-to-angle.html
               svg/animations/svgenum-animation-1.html
               svg/animations/svgenum-animation-10.html
               svg/animations/svgenum-animation-11.html
               svg/animations/svgenum-animation-12.html
               svg/animations/svgenum-animation-13.html
               svg/animations/svgenum-animation-2.html
               svg/animations/svgenum-animation-3.html
               svg/animations/svgenum-animation-4.html
               svg/animations/svgenum-animation-5.html
               svg/animations/svgenum-animation-6.html
               svg/animations/svgenum-animation-7.html
               svg/animations/svgenum-animation-8.html
               svg/animations/svgenum-animation-9.html

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.xcodeproj/project.pbxproj:
        * svg/SVGAllInOne.cpp:
        * svg/SVGAnimateElement.cpp:
        (WebCore::SVGAnimateElement::determineAnimatedPropertyType):
        (WebCore::SVGAnimateElement::calculateAnimatedValue):
        (WebCore::propertyTypesAreConsistent):
        (WebCore::SVGAnimateElement::applyResultsToTarget):
        * svg/SVGAnimatedAngle.cpp:
        (WebCore::SVGAnimatedAngleAnimator::constructFromString):
        (WebCore::SVGAnimatedAngleAnimator::startAnimValAnimation):
        (WebCore::SVGAnimatedAngleAnimator::stopAnimValAnimation):
        (WebCore::SVGAnimatedAngleAnimator::resetAnimValToBaseVal):
        (WebCore::SVGAnimatedAngleAnimator::animValWillChange):
        (WebCore::SVGAnimatedAngleAnimator::animValDidChange):
        (WebCore::SVGAnimatedAngleAnimator::calculateFromAndByValues):
        (WebCore::SVGAnimatedAngleAnimator::calculateAnimatedValue):
        * svg/SVGAnimatedAngle.h:
        (WebCore):
        * svg/SVGAnimatedBoolean.cpp:
        (WebCore::SVGAnimatedBooleanAnimator::startAnimValAnimation):
        (WebCore::SVGAnimatedBooleanAnimator::stopAnimValAnimation):
        (WebCore::SVGAnimatedBooleanAnimator::resetAnimValToBaseVal):
        * svg/SVGAnimatedEnumeration.cpp: Added.
        (WebCore):
        (WebCore::enumerationValueForTargetAttribute):
        (WebCore::SVGAnimatedEnumerationAnimator::SVGAnimatedEnumerationAnimator):
        (WebCore::SVGAnimatedEnumerationAnimator::constructFromString):
        (WebCore::SVGAnimatedEnumerationAnimator::startAnimValAnimation):
        (WebCore::SVGAnimatedEnumerationAnimator::stopAnimValAnimation):
        (WebCore::SVGAnimatedEnumerationAnimator::resetAnimValToBaseVal):
        (WebCore::SVGAnimatedEnumerationAnimator::animValWillChange):
        (WebCore::SVGAnimatedEnumerationAnimator::animValDidChange):
        (WebCore::SVGAnimatedEnumerationAnimator::calculateFromAndToValues):
        (WebCore::SVGAnimatedEnumerationAnimator::calculateFromAndByValues):
        (WebCore::SVGAnimatedEnumerationAnimator::calculateAnimatedValue):
        (WebCore::SVGAnimatedEnumerationAnimator::calculateDistance):
        * svg/SVGAnimatedEnumeration.h:
        (SVGAnimatedEnumerationAnimator):
        (WebCore::SVGAnimatedEnumerationAnimator::~SVGAnimatedEnumerationAnimator):
        (WebCore):
        * svg/SVGAnimatedInteger.cpp:
        (WebCore::SVGAnimatedIntegerAnimator::startAnimValAnimation):
        (WebCore::SVGAnimatedIntegerAnimator::stopAnimValAnimation):
        (WebCore::SVGAnimatedIntegerAnimator::resetAnimValToBaseVal):
        * svg/SVGAnimatedIntegerOptionalInteger.cpp:
        (WebCore::SVGAnimatedIntegerOptionalIntegerAnimator::startAnimValAnimation):
        (WebCore::SVGAnimatedIntegerOptionalIntegerAnimator::stopAnimValAnimation):
        (WebCore::SVGAnimatedIntegerOptionalIntegerAnimator::resetAnimValToBaseVal):
        (WebCore::SVGAnimatedIntegerOptionalIntegerAnimator::animValWillChange):
        (WebCore::SVGAnimatedIntegerOptionalIntegerAnimator::animValDidChange):
        * svg/SVGAnimatedLength.cpp:
        (WebCore::SVGAnimatedLengthAnimator::startAnimValAnimation):
        (WebCore::SVGAnimatedLengthAnimator::stopAnimValAnimation):
        (WebCore::SVGAnimatedLengthAnimator::resetAnimValToBaseVal):
        * svg/SVGAnimatedLengthList.cpp:
        (WebCore::SVGAnimatedLengthListAnimator::startAnimValAnimation):
        (WebCore::SVGAnimatedLengthListAnimator::stopAnimValAnimation):
        (WebCore::SVGAnimatedLengthListAnimator::resetAnimValToBaseVal):
        * svg/SVGAnimatedNumber.cpp:
        (WebCore::SVGAnimatedNumberAnimator::startAnimValAnimation):
        (WebCore::SVGAnimatedNumberAnimator::stopAnimValAnimation):
        (WebCore::SVGAnimatedNumberAnimator::resetAnimValToBaseVal):
        * svg/SVGAnimatedNumberList.cpp:
        (WebCore::SVGAnimatedNumberListAnimator::startAnimValAnimation):
        (WebCore::SVGAnimatedNumberListAnimator::stopAnimValAnimation):
        (WebCore::SVGAnimatedNumberListAnimator::resetAnimValToBaseVal):
        * svg/SVGAnimatedNumberOptionalNumber.cpp:
        (WebCore::SVGAnimatedNumberOptionalNumberAnimator::startAnimValAnimation):
        (WebCore::SVGAnimatedNumberOptionalNumberAnimator::stopAnimValAnimation):
        (WebCore::SVGAnimatedNumberOptionalNumberAnimator::resetAnimValToBaseVal):
        (WebCore::SVGAnimatedNumberOptionalNumberAnimator::animValWillChange):
        (WebCore::SVGAnimatedNumberOptionalNumberAnimator::animValDidChange):
        * svg/SVGAnimatedPreserveAspectRatio.cpp:
        (WebCore::SVGAnimatedPreserveAspectRatioAnimator::startAnimValAnimation):
        (WebCore::SVGAnimatedPreserveAspectRatioAnimator::stopAnimValAnimation):
        (WebCore::SVGAnimatedPreserveAspectRatioAnimator::resetAnimValToBaseVal):
        * svg/SVGAnimatedRect.cpp:
        (WebCore::SVGAnimatedRectAnimator::startAnimValAnimation):
        (WebCore::SVGAnimatedRectAnimator::stopAnimValAnimation):
        (WebCore::SVGAnimatedRectAnimator::resetAnimValToBaseVal):
        * svg/SVGAnimatedString.cpp:
        (WebCore::SVGAnimatedStringAnimator::startAnimValAnimation):
        (WebCore::SVGAnimatedStringAnimator::stopAnimValAnimation):
        (WebCore::SVGAnimatedStringAnimator::resetAnimValToBaseVal):
        * svg/SVGAnimatedTransformList.cpp:
        (WebCore::SVGAnimatedTransformListAnimator::startAnimValAnimation):
        (WebCore::SVGAnimatedTransformListAnimator::stopAnimValAnimation):
        (WebCore::SVGAnimatedTransformListAnimator::resetAnimValToBaseVal):
        * svg/SVGAnimatedType.cpp:
        (WebCore::SVGAnimatedType::~SVGAnimatedType):
        (WebCore::SVGAnimatedType::createAngleAndEnumeration):
        (WebCore::SVGAnimatedType::createEnumeration):
        (WebCore):
        (WebCore::SVGAnimatedType::angleAndEnumeration):
        (WebCore::SVGAnimatedType::enumeration):
        (WebCore::SVGAnimatedType::valueAsString):
        (WebCore::SVGAnimatedType::setValueAsString):
        (WebCore::SVGAnimatedType::supportsAnimVal):
        * svg/SVGAnimatedType.h:
        (SVGAnimatedType):
        * svg/SVGAnimatedTypeAnimator.h:
        (WebCore::SVGAnimatedTypeAnimator::findAnimatedPropertiesForAttributeName):
        (SVGAnimatedTypeAnimator):
        (WebCore::SVGAnimatedTypeAnimator::constructFromBaseValue):
        (WebCore::SVGAnimatedTypeAnimator::resetFromBaseValue):
        (WebCore::SVGAnimatedTypeAnimator::stopAnimValAnimationForType):
        (WebCore::SVGAnimatedTypeAnimator::animValDidChangeForType):
        (WebCore::SVGAnimatedTypeAnimator::animValWillChangeForType):
        (WebCore::SVGAnimatedTypeAnimator::constructFromBaseValues):
        (WebCore::SVGAnimatedTypeAnimator::resetFromBaseValues):
        (WebCore::SVGAnimatedTypeAnimator::stopAnimValAnimationForTypes):
        (WebCore::SVGAnimatedTypeAnimator::animValDidChangeForTypes):
        (WebCore::SVGAnimatedTypeAnimator::animValWillChangeForTypes):
        (WebCore::SVGAnimatedTypeAnimator::castAnimatedPropertyToActualType):
        (WebCore::SVGAnimatedTypeAnimator::executeAction):
        * svg/SVGAnimatorFactory.h:
        (WebCore::SVGAnimatorFactory::create):
        * svg/SVGMarkerElement.cpp:
        (WebCore):
        * svg/properties/SVGAnimatedListPropertyTearOff.h:
        (SVGAnimatedListPropertyTearOff):
        * svg/properties/SVGAnimatedPropertyTearOff.h:
        (SVGAnimatedPropertyTearOff):
        * svg/properties/SVGAnimatedStaticPropertyTearOff.h:
        (SVGAnimatedStaticPropertyTearOff):

2012-04-01  Hao Zheng  <zhenghao@chromium.org>

        [chromium] Do not generate custom signature for static methods.
        https://bugs.webkit.org/show_bug.cgi?id=79222

        Reviewed by Kentaro Hara.

        No new tests. Covered by existing tests when MEDIA_STREAM is disabled.

        * bindings/scripts/CodeGeneratorV8.pm:
        (RequiresCustomSignature):

2012-03-31  Steve Falkenburg  <sfalken@apple.com>

        Windows build fix.

        * WebCore.vcproj/WebCore.make:

2012-03-31  Philip Rogers  <pdr@google.com>

        Fix complex strokes on CG platform
        https://bugs.webkit.org/show_bug.cgi?id=80423

        Reviewed by Eric Seidel.

        This change fixes a mistake in r112667 where the CG platform did not properly handle
        complex strokes. The mistake was to check for complex fills instead of complex strokes,
        which resulted in all complex strokes rendering as black.

        No new tests, this change is covered by the following existing tests that were regressed:
        1) svg/custom/gradient-stroke-width.svg
        2) svg/custom/transform-with-shadow-and-gradient.svg

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

2012-03-31  Jochen Eisinger  <jochen@chromium.org>

        Don't insert linebreaks into text input fields.
        https://bugs.webkit.org/show_bug.cgi?id=81660

        Reviewed by Ryosuke Niwa.

        Test: fast/forms/textfield-no-linebreak.html

        * editing/TypingCommand.cpp:
        (canAppendNewLineFeed): Only assume that a linefeed can be appended, if
        after the BeforeTextInserted event the event text is still a newline.

2012-03-31  Nikolas Zimmermann  <nzimmermann@rim.com>

        LayoutTests: [r112391] Pixel test failure of svg/custom/preserve-aspect-ratio-syntax.svg
        https://bugs.webkit.org/show_bug.cgi?id=82469

        Fix regression from r112391. The test excerising this code path is skipped on Lion, due to a libxml2 bug.
        I didn't notice I broke preserveAspectRatio parsing for many corner cases, revert to old logic.

        * svg/SVGPreserveAspectRatio.cpp:
        (WebCore::SVGPreserveAspectRatio::parse):

2012-03-31  Antti Koivisto  <antti@apple.com>

        CSSStyleRules should own their CSSStyleDeclarations 
        https://bugs.webkit.org/show_bug.cgi?id=82832

        Reviewed by Andreas Kling.

        Move the rule properties CSSOM wrapper ownership from the StylePropertySet to the rule itself.
        This is preparation for bug 82728 (Split remaining CSSRules into internal and CSSOM types). This
        temporarily grows the size of CSSStyleRule by a pointer (82728 will give the memory back and more)

        * css/CSSFontFaceRule.cpp:
        (WebCore::CSSFontFaceRule::~CSSFontFaceRule):
        (WebCore):
        (WebCore::CSSFontFaceRule::style):
        * css/CSSFontFaceRule.h:
        (WebCore):
        (CSSFontFaceRule):
        * css/CSSPageRule.cpp:
        (WebCore::CSSPageRule::~CSSPageRule):
        (WebCore):
        (WebCore::CSSPageRule::style):
        * css/CSSPageRule.h:
        (WebCore):
        (CSSPageRule):
        * css/CSSStyleRule.cpp:
        (WebCore::CSSStyleRule::~CSSStyleRule):
        (WebCore::CSSStyleRule::style):
        * css/CSSStyleRule.h:
        (WebCore):
        (CSSStyleRule):
        
            Make the rules own the property CSSOM wrapper.
        
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::collectMatchingRulesForList):
        * css/PropertySetCSSStyleDeclaration.cpp:
        (WebCore::StyleRuleCSSStyleDeclaration::ref):
        (WebCore):
        (WebCore::StyleRuleCSSStyleDeclaration::deref):
        (WebCore::StyleRuleCSSStyleDeclaration::setNeedsStyleRecalc):
        (WebCore::StyleRuleCSSStyleDeclaration::contextStyleSheet):
        (WebCore::InlineCSSStyleDeclaration::ref):
        (WebCore::InlineCSSStyleDeclaration::deref):
        * css/PropertySetCSSStyleDeclaration.h:
        (WebCore::PropertySetCSSStyleDeclaration::parentElement):
        (PropertySetCSSStyleDeclaration):
        (WebCore::StyleRuleCSSStyleDeclaration::create):
        (StyleRuleCSSStyleDeclaration):
        (WebCore::StyleRuleCSSStyleDeclaration::clearParentRule):
        (WebCore::StyleRuleCSSStyleDeclaration::StyleRuleCSSStyleDeclaration):
        (WebCore::StyleRuleCSSStyleDeclaration::parentRule):
        
            - Rename RuleCSSStyleDeclaration -> StyleRuleCSSStyleDeclaration
            - Make StyleRuleCSSStyleDeclaration use regular refcounting since
              it is no longer owned by the wrapped object.
            - Rename hasCSSOMWrapper() -> isMutable(), m_hasCSSOMWrapper -> m_ownsCSSOMWrapper
              to match the purpose.
        
        (InlineCSSStyleDeclaration):
        * css/StylePropertySet.cpp:
        (WebCore::StylePropertySet::StylePropertySet):
        (WebCore::StylePropertySet::~StylePropertySet):
        (WebCore::StylePropertySet::ensureCSSStyleDeclaration):
        (WebCore):
        (WebCore::StylePropertySet::ensureInlineCSSStyleDeclaration):
        (WebCore::StylePropertySet::clearParentElement):
        * css/StylePropertySet.h:
        (StylePropertySet):
        (WebCore::StylePropertySet::isMutable):
        * dom/ElementAttributeData.cpp:
        (WebCore::ElementAttributeData::ensureMutableInlineStyle):
        (WebCore::ElementAttributeData::updateInlineStyleAvoidingMutation):

2012-03-31  Jonathan Dong  <jonathan.dong@torchmobile.com.cn>

        [BlackBerry] http authenticate dialog popup only once no matter authentication pass or fail
        https://bugs.webkit.org/show_bug.cgi?id=80135

        Reviewed by Rob Buis.

        RIM PR: 145660
        Fixed a regression introduced by r111810, we should cancel the new
        request when user press cancel button in http authentication challenge
        dialog, and we should also allow sending empty username and password
        with the request.
        Also removed redundant codes which checked the existence of the
        FrameLoaderClient pointer, as we've already moved authenticationChallenge()
        out of class FrameLoaderClient, it is not needed.

        Manual test added. Testing http authentication dialog relies on user interaction.

        * platform/network/blackberry/NetworkJob.cpp:
        (WebCore::NetworkJob::sendRequestWithCredentials):

2012-03-31  Charles Wei  <charles.wei@torchmobile.com.cn>

        [BlackBerry] Upstream BlackBerry change to PlatformTouchEvent and PlatformTouchPoint
        https://bugs.webkit.org/show_bug.cgi?id=82828

        Reviewed by Rob Buis.

        No new tests, just upstream BlackBerry-specific change to
        PlatformTouchEvent and PlatformTouchPoint, to make it build
        for BlackBerry.

        * platform/PlatformTouchEvent.h:
        (Platform):
        (WebCore::PlatformTouchEvent::PlatformTouchEvent):
        (PlatformTouchEvent):
        (WebCore::PlatformTouchEvent::rotation):
        (WebCore::PlatformTouchEvent::scale):
        (WebCore::PlatformTouchEvent::doubleTap):
        (WebCore::PlatformTouchEvent::touchHold):
        * platform/PlatformTouchPoint.h:
        (Platform):
        (PlatformTouchPoint):
        * platform/blackberry/PlatformTouchEventBlackBerry.cpp:
        (WebCore::PlatformTouchEvent::PlatformTouchEvent):

2012-03-31  Jason Liu  <jason.liu@torchmobile.com.cn>

        [BlackBerry] Refactor : NetworkJob::handleNotifyHeaderReceived.
        https://bugs.webkit.org/show_bug.cgi?id=82825

        We should use "else if" to decrease string's compare.

        Reviewed by Rob Buis.

        No new tests. Refactor.

        * platform/network/blackberry/NetworkJob.cpp:
        (WebCore::NetworkJob::handleNotifyHeaderReceived):

2012-03-31  Charles Wei  <charles.wei@torchmobile.com.cn>

        [BlackBerry] Upstream local change of PlatformKeyboardEventBlackBerry.cpp
        https://bugs.webkit.org/show_bug.cgi?id=82721

        Reviewed by Rob Buis.

        No new tests, just upstreaming the local change to make the upstreaming
        build for BlackBerry.

        * platform/blackberry/PlatformKeyboardEventBlackBerry.cpp:
        (WebCore::PlatformKeyboardEvent::PlatformKeyboardEvent):

2012-03-31  Abhishek Arya  <inferno@chromium.org>

        Crash in HTMLFieldSetElement::disabledAttributeChanged.
        https://bugs.webkit.org/show_bug.cgi?id=82814

        Reviewed by Kent Tamura.

        Test: fast/forms/fieldset/fieldset-crash.html

        * html/HTMLFieldSetElement.cpp:
        (WebCore::HTMLFieldSetElement::disabledAttributeChanged):

2012-03-29  Adam Barth  <abarth@webkit.org>

        [Chromium] Delete WebKit/chromium/bridge
        https://bugs.webkit.org/show_bug.cgi?id=82677

        Reviewed by James Robinson.

        These files are just moved from the WebKit layer with their include
        directives adjusted.

        * WebCore.gypi:
        * platform/chromium/support/WebICECandidateDescriptor.cpp: Copied from Source/WebKit/chromium/src/WebICECandidateDescriptor.cpp.
        * platform/chromium/support/WebICEOptions.cpp: Copied from Source/WebKit/chromium/src/WebICEOptions.cpp.
        * platform/chromium/support/WebMediaHints.cpp: Copied from Source/WebKit/chromium/src/WebMediaHints.cpp.
        * platform/chromium/support/WebMediaStreamComponent.cpp: Copied from Source/WebKit/chromium/src/WebMediaStreamComponent.cpp.
        * platform/chromium/support/WebMediaStreamDescriptor.cpp: Copied from Source/WebKit/chromium/src/WebMediaStreamDescriptor.cpp.
        * platform/chromium/support/WebMediaStreamSource.cpp: Copied from Source/WebKit/chromium/src/WebMediaStreamSource.cpp.
        * platform/chromium/support/WebMediaStreamSourcesRequest.cpp: Copied from Source/WebKit/chromium/src/WebMediaStreamSourcesRequest.cpp.
        * platform/mediastream/chromium/DeprecatedPeerConnectionHandler.cpp: Copied from Source/WebKit/chromium/bridge/DeprecatedPeerConnectionHandler.cpp.
        * platform/mediastream/chromium/DeprecatedPeerConnectionHandlerInternal.cpp: Copied from Source/WebKit/chromium/bridge/DeprecatedPeerConnectionHandlerInternal.cpp.
        (WebCore::DeprecatedPeerConnectionHandlerInternal::DeprecatedPeerConnectionHandlerInternal):
        * platform/mediastream/chromium/DeprecatedPeerConnectionHandlerInternal.h: Copied from Source/WebKit/chromium/bridge/DeprecatedPeerConnectionHandlerInternal.h.
        * platform/mediastream/chromium/MediaStreamCenterChromium.cpp: Copied from Source/WebKit/chromium/bridge/MediaStreamCenter.cpp.
        * platform/mediastream/chromium/MediaStreamCenterInternal.cpp: Copied from Source/WebKit/chromium/bridge/MediaStreamCenterInternal.cpp.
        (WebCore::MediaStreamCenterInternal::MediaStreamCenterInternal):
        * platform/mediastream/chromium/MediaStreamCenterInternal.h: Copied from Source/WebKit/chromium/bridge/MediaStreamCenterInternal.h.
        * platform/mediastream/chromium/PeerConnection00Handler.cpp: Copied from Source/WebKit/chromium/bridge/PeerConnection00Handler.cpp.
        * platform/mediastream/chromium/PeerConnection00HandlerInternal.cpp: Copied from Source/WebKit/chromium/bridge/PeerConnection00HandlerInternal.cpp.
        (WebCore::PeerConnection00HandlerInternal::PeerConnection00HandlerInternal):
        * platform/mediastream/chromium/PeerConnection00HandlerInternal.h: Copied from Source/WebKit/chromium/bridge/PeerConnection00HandlerInternal.h.

2012-03-30  Adam Barth  <abarth@webkit.org>

        [Chromium] Move ResourceHandle to WebCore/platform/network/chromium
        https://bugs.webkit.org/show_bug.cgi?id=82657

        Reviewed by James Robinson.

        We finally arive at our destination. This patch actually moves
        WebCore::ResourceHandle from Source/WebKit/chromium/src to
        Source/WebCore/network/chromium, matching its location in other ports.
        To make this happen, we also need to move WrappedResourceRequest and
        WrappedResourceResponse.

        This patch is the last patch from
        https://github.com/abarth/webkit/compare/master...webcore-platform

        * WebCore.gypi:
        * platform/chromium/support/WrappedResourceRequest.h: Copied from Source/WebCore/platform/chromium/support/WrappedResourceRequest.h.
        * platform/chromium/support/WrappedResourceResponse.h: Copied from Source/WebCore/platform/chromium/support/WrappedResourceResponse.h.
        * platform/network/chromium/ResourceHandle.cpp: Copied from Source/WebCore/platform/network/chromium/ResourceHandle.cpp.
        * platform/network/chromium/ResourceHandleInternal.h: Copied from Source/WebCore/platform/network/chromium/ResourceHandleInternal.h.

2012-03-30  Ryosuke Niwa  <rniwa@webkit.org>

        Add a compile assert for the size of RenderText
        https://bugs.webkit.org/show_bug.cgi?id=82780

        Reviewed by Dirk Pranke.

        Added an assertion. Also moved m_maxWidth, m_beginMinWidth, and m_endMinWidth
        to right beneath m_minWidth so that gcc on GTK+ can pack floats properly.

        * rendering/RenderText.cpp:
        (SameSizeAsRenderText):
        (WebCore):
        * rendering/RenderText.h:
        (RenderText):

2012-03-30  Ryosuke Niwa  <rniwa@webkit.org>

        Add a compile assert for the size of ScrollableArea
        https://bugs.webkit.org/show_bug.cgi?id=82822

        Reviewed by Dirk Pranke.

        Added the assertion. Also made m_scrollOriginChanged a bitfield so that it can be packed nicely.

        * platform/ScrollableArea.cpp:
        (SameSizeAsScrollableArea):
        (WebCore):
        * platform/ScrollableArea.h:
        (ScrollableArea):

2012-03-30  Dan Bernstein  <mitz@apple.com>

        Reverted r112767, because it caused many vertical text tests to fail.

        * WebCore.exp.in:
        * platform/graphics/FontPlatformData.cpp:
        (WebCore::FontPlatformData::FontPlatformData):
        (WebCore::FontPlatformData::operator=):
        * platform/graphics/FontPlatformData.h:
        (WebCore::FontPlatformData::FontPlatformData):
        (FontPlatformData):
        (WebCore::FontPlatformData::isColorBitmapFont):
        (WebCore::FontPlatformData::hash):
        (WebCore::FontPlatformData::operator==):
        * platform/graphics/SimpleFontData.cpp:
        (WebCore::SimpleFontData::DerivedFontData::~DerivedFontData):
        * platform/graphics/SimpleFontData.h:
        (SimpleFontData):
        (DerivedFontData):
        * platform/graphics/cocoa/FontPlatformDataCocoa.mm:
        (WebCore::FontPlatformData::FontPlatformData):
        (WebCore::FontPlatformData::setFont):
        * platform/graphics/mac/FontCacheMac.mm:
        (WebCore::FontCache::createFontPlatformData):
        * platform/graphics/mac/GlyphPageTreeNodeMac.cpp:
        (WebCore::shouldUseCoreText):
        (WebCore::GlyphPage::fill):
        * platform/graphics/mac/SimpleFontDataMac.mm:
        (WebCore):

2012-03-30  Dan Bernstein  <mitz@apple.com>

        Tried to fix the Chromium Mac build after r112767.

        * platform/graphics/SimpleFontData.h:
        (SimpleFontData):
        (DerivedFontData):

2012-03-30  Dirk Schulze  <krit@webkit.org>

        Colors seem to be parsed using HTML quirks in SVG attributes
        https://bugs.webkit.org/show_bug.cgi?id=46112

        Reviewed by Eric Seidel.
        
        Finally move to SVGAttributeMode on parsing SVG presentation attributes. SVG attributes are
        mainly parsed in the strict mode, which affects strict parsing of colors and no spaces between
        values and units. Unit less values are still allowed.

        Tests: svg/css/svg-attribute-length-parsing.html
               svg/css/svg-attribute-parser-mode.html

        * css/CSSGrammar.y: No quirks mode for SVG.
        * css/CSSParser.h:
        (WebCore::CSSParser::inStrictMode): SVGAttributeMode also implies strict parsing.
        (WebCore::CSSParser::inQuirksMode): Remove SVGAttributeMode from quirks mode.
        * css/CSSParserMode.h:
        (isStrictParserMode): Ditto.
        * dom/StyledElement.cpp:
        (WebCore::StyledElement::updateAttributeStyle):
        * svg/SVGElementRareData.h:
        (WebCore::SVGElementRareData::ensureAnimatedSMILStyleProperties):
        * svg/SVGFontFaceElement.cpp:
        (WebCore::SVGFontFaceElement::SVGFontFaceElement):
        * svg/SVGStyledElement.cpp: Switch to SVGAttributeMode if we parse a SVG presentation attribute.
        (WebCore::SVGStyledElement::getPresentationAttribute):

2012-03-30  Tony Tseung  <tseung@apple.com>

        Composite Font References is a new established standard (ISO/IEC 14496-28:2012) for specifying
        composite fonts from existing physical fonts.
        <rdar://problem/10717370>
        https://bugs.webkit.org/show_bug.cgi?id=82810
        
        CoreText have already the features enabled, here we added this to WebKit text layout and rendering.
        A member function getCompositeFontReferenceFontData is added to the SimpleFontData class for the component font
        correspond to the platformData, in this case, a NSFont. This is used when CoreText layout had resulted
        a component of the Composite Font Reference and its corresponding SimpleFontData object is then cached
        in the SimpleFontData object of the posting font (Composite Font Reference).
        
        When glyphs are encoded to form the GlyphPage for rendering, the Composite Font Reference is handled throught
        the CoreText layout path (using CTLine), here the resulting glyph is associated with a font which could
        be not the original font request. In this case, these are the component fonts of the Composite Font
        Reference. This is then identified and then added to the GlyphPage appropriately.
        
        To support this feature, a member function isCompositeFontReference is added to FontPlatformData to
        indicate a font is a Composite Font Reference. Also in order to pass the component font correctly a boolean
        isPrinterFont is added to one the FontPlatformData constructors to describe the NSFont.

        Reviewed by Dan Bernstein.

        Added test LayoutTests/fast/text/international/text-spliced-font.html

        * WebCore.exp.in:
        Replaced obsolete FontPlatformData constructor entry.

        * platform/graphics/FontPlatformData.cpp:
        (WebCore::FontPlatformData::FontPlatformData):
        Copy of the additional m_isCompositeFontReference and m_isPrinterFont data members.
        
        (WebCore::FontPlatformData::operator=):
        Assignment of the additional m_isCompositeFontReference and m_isPrinterFont data members.
        
        * platform/graphics/FontPlatformData.h:
        (WebCore::FontPlatformData::FontPlatformData):
        (FontPlatformData):
        Default value of m_isCompositeFontReference and m_isPrinterFont data members are set to false in various constructors.
        
        (WebCore::FontPlatformData::isCompositeFontReference):
        Newly added for Composite Font Reference type font.

        (WebCore::FontPlatformData::isPrinterFont):
        Newly added for describing the NSFont parameter if is applicable.

        (WebCore::FontPlatformData::operator==):
        Comparison of the additional m_isCompositeFontReference and m_isPrinterFont data members.

        * platform/graphics/SimpleFontData.cpp:
        (WebCore::SimpleFontData::DerivedFontData::~DerivedFontData):
        Clean up the cache for component fonts of the Composite Font References.

        * platform/graphics/SimpleFontData.h:
        (SimpleFontData):
        Added member function const SimpleFontData* getCompositeFontReferenceFontData(NSFont *key) const.
        
        (DerivedFontData):
        Added CFDictionary for caching the component font of Composite Font Reference.

        * platform/graphics/cocoa/FontPlatformDataCocoa.mm:
        (WebCore::FontPlatformData::FontPlatformData):
        Data members m_isCompositeFontReference and m_isPrinterFont are initialised and their values are determined in the body of the contructor.

        (WebCore::FontPlatformData::setFont):
        Data members m_isCompositeFontReference and m_isPrinterFont are determined and set.
        
        * platform/graphics/mac/FontCacheMac.mm:
        (WebCore::FontCache::createFontPlatformData):
        Boolean value isUsingPrinterFont is passed in the new FontPlatformData constructor.
        
        * platform/graphics/mac/GlyphPageTreeNodeMac.cpp:
        (WebCore::shouldUseCoreText):
        Added the condition for Composite Font Reference type font.
        
        (WebCore::GlyphPage::fill):
        In the case of Composite Font Reference, when iterate the runs, component font of Composite Font
        Reference is used to fill the glyph index in the GlyphPage.
        
        * platform/graphics/mac/SimpleFontDataMac.mm:
        (WebCore::SimpleFontData::getCompositeFontReferenceFontData):
        Newly added method for the component fonts correspond to the platformData, in this case, a NSFont. 
        This SimpleFontData is created and cached in this object and will only be deleted when the destructor
        if this is called.
        
2012-03-30  Charles Wei  <charles.wei@torchmobile.com.cn>

        [BlackBerry] Use KURL::protocolIsInHTTPFamily() instead KURL::protocolInHTTPFamily()
        https://bugs.webkit.org/show_bug.cgi?id=82707

        Reviewed by Rob Buis.

        No new tests, just BlackBerry build fix.

        * platform/network/blackberry/NetworkManager.cpp:
        (WebCore::NetworkManager::startJob):

2012-03-30  Eric Seidel  <eric@webkit.org>
        styleForElement() should use enums instead of bools so we can all understand what it's doing
        https://bugs.webkit.org/show_bug.cgi?id=82807

        Reviewed by Adam Barth.

        No change in behavior, thus no tests.

        Mostly this is just replacing true/false with the correct new enum value
        or removing true/false from the callsites when they would have been default anyway.
        I think this makes the code *way* more clear.

        The old code was extra confusing because the defaults were "true, false". :)
        The new defaults are AllowStyleSharing, MatchAllRules.
        It's very uncommon for callers to want to override either of these behaviors.
        I think most callers which specify DisallowStyleSharing likely don't actually need to
        (our style-sharing code should be smart enough to only share when safe anyway).

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::CSSStyleSelector):
         - Use enums and remove bogus comment (m_rootDefaultStyle is a RefPtr!)
        (WebCore::CSSStyleSelector::collectMatchingRulesForList):
        * css/CSSStyleSelector.h:
        (CSSStyleSelector):
        * css/MediaQueryMatcher.cpp:
        (WebCore::MediaQueryMatcher::prepareEvaluator):
        * css/StyleMedia.cpp:
        (WebCore::StyleMedia::matchMedium):
        * dom/Element.cpp:
        (WebCore::Element::styleForRenderer):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::getUncachedPseudoStyle):
         - Updated to use enums
         - Also fixed this to use toElement and modern early-return styles.
        * rendering/RenderRegion.cpp:
        (WebCore::RenderRegion::computeStyleInRegion):
        * svg/SVGElement.cpp:
        (WebCore::SVGElement::customStyleForRenderer):

2012-03-30  Jason Liu  <jason.liu@torchmobile.com.cn>

        [BlackBerry] Headers with no content shouldn't be dropped by platform's request.
        https://bugs.webkit.org/show_bug.cgi?id=82691

        Reviewed by Rob Buis.

        Test : http/tests/xmlhttprequest/xmlhttprequest-setrequestheader-no-value.html

        * platform/network/blackberry/ResourceRequestBlackBerry.cpp:
        (WebCore::ResourceRequest::initializePlatformRequest):

2012-03-30  Eric Seidel  <eric@webkit.org>

        Add tests for iframe seamless and support for parsing webkitseamless attribute
        https://bugs.webkit.org/show_bug.cgi?id=82795

        Reviewed by Adam Barth.

        This just adds support for parsing/reflecting the "webkitseamess" attribute.
        I'll add the actual CSS, navigation, security, and layout changes in
        separate follow-up patches.

        Tests: fast/frames/seamless/seamless-basic.html
               fast/frames/seamless/seamless-css-cascade.html
               fast/frames/seamless/seamless-nested.html
               fast/frames/seamless/seamless-sandbox-flag.html

        * html/HTMLAttributeNames.in:
        * html/HTMLIFrameElement.idl:

2012-03-30  Emil A Eklund  <eae@chromium.org>

        Change WebKit/WebKit2 platform code to use pixel snapped values
        https://bugs.webkit.org/show_bug.cgi?id=82549

        Reviewed by Eric Seidel.

        Change WebKit and WebKit2 platform code to use rounded locations and
        pixel snapped rects and sizes. This largely avoids having to expose the
        fractional layout types to the platform code.

        No new tests. No change in functionality.

        * dom/Node.h:
        (WebCore::Node::pixelSnappedRenderRect):
        Add pixel snapped version of renderRect
        
        * rendering/RenderBox.h:
        (WebCore::RenderBox::pixelSnappedFrameRect):
        Add pixel snapped version of frameRect

2012-03-30  Simon Fraser  <simon.fraser@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=82761
        
        Try to narrow down the cause of this assertion by adding
        an assertion about m_frame.
        
        * editing/Editor.cpp:
        (WebCore::Editor::markAllMisspellingsAndBadGrammarInRanges):

2012-03-30  Emil A Eklund  <eae@chromium.org>

        Fix return type for virtual borderBoundingBox method
        https://bugs.webkit.org/show_bug.cgi?id=82561

        Reviewed by Eric Seidel.

        No new tests, no change in functionality.

        * editing/DeleteButtonController.cpp:
        (WebCore::isDeletableElement):
        * rendering/RenderBox.h:
        (WebCore::RenderBox::borderBoxRect):
        Rename pixelSnappedBorderBoxRect to borderBoxRect and remove LayoutRect
        version of same as we always want to use the pixel snapped version to
        ensure proper rounding and alignment to device pixels.
        (The way this rect is pixel snapped, using the m_frameRect location,
        makes it hard for calling code to take the subpixel rect and correctly
        snap it).

        (WebCore::RenderBox::borderBoundingBox):
        * rendering/RenderBoxModelObject.h:
        Change pure virtual definition of borderBoundingBox to return an IntRect
        to match implementation in RenderBox.
        
        (RenderBoxModelObject):
        * rendering/RenderInline.h:
        (WebCore::RenderInline::borderBoundingBox):
        Change overloaded method to IntRect to match RenderBox implementation.

2012-03-30  Bear Travis  <betravis@adobe.com>

        shape-inside and shape-outside are not in the list of computed style properties
        https://bugs.webkit.org/show_bug.cgi?id=82667

        Reviewed by Ryosuke Niwa.

        Adding prefixed shape-inside and shape-outside to the list of computed style properties.
        Added properties to existing tests for computed style results

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore): added -webkit-shape-inside and -webkit-shape-outside to computedProperties

2012-03-30  Adam Barth  <abarth@webkit.org>

        https://bugs.webkit.org/show_bug.cgi?id=82582
        Move CPP files related to ResourceHandle to WebCore/platform

        Reviewed by James Robinson.

        This patch moves a number of files that implement parts of the platform
        portion of the Chromium WebKit API from the WebKit layer to
        WebCore/platform. These files are in the dependency cone of
        ResourceHandle and have no dependencies on anything outside
        WebCore/platform.

        * WebCore.gypi:
        * platform/chromium/support/WebHTTPBody.cpp: Copied from Source/WebKit/chromium/src/WebHTTPBody.cpp.
        * platform/chromium/support/WebHTTPLoadInfo.cpp: Copied from Source/WebKit/chromium/src/WebHTTPLoadInfo.cpp.
        * platform/chromium/support/WebURL.cpp: Copied from Source/WebKit/chromium/src/WebURL.cpp.
        * platform/chromium/support/WebURLError.cpp: Copied from Source/WebKit/chromium/src/WebURLError.cpp.
        * platform/chromium/support/WebURLRequest.cpp: Copied from Source/WebKit/chromium/src/WebURLRequest.cpp.
        * platform/chromium/support/WebURLRequestPrivate.h: Copied from Source/WebKit/chromium/src/WebURLRequestPrivate.h.
        * platform/chromium/support/WebURLResponse.cpp: Copied from Source/WebKit/chromium/src/WebURLResponse.cpp.
        * platform/chromium/support/WebURLResponsePrivate.h: Copied from Source/WebKit/chromium/src/WebURLResponsePrivate.h.

2012-03-30  Emil A Eklund  <eae@chromium.org>

        Fix usage of LayoutUnits in table code.
        https://bugs.webkit.org/show_bug.cgi?id=82765

        Reviewed by Eric Seidel.

        Clean up usage of ints and LayoutUnits in table code in preparation for
        turning on subpixel layout.

        No new tests, no change in functionality.

        * rendering/AutoTableLayout.cpp:
        (WebCore::AutoTableLayout::computePreferredLogicalWidths):
        Cast maxWidth to int as all table layout is done on int bounds.
        
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::convertStyleLogicalWidthToComputedWidth):
        Change borders to LayoutUnit as paddings can have subpixel precision.
        
        * rendering/RenderTable.h:
        (WebCore::RenderTable::getColumnPos):
        (WebCore::RenderTable::columnPositions):
        Change getColumnPos and columnPositions to ints as the values are always
        on pixel bounds.
        
        (WebCore::RenderTable::bordersPaddingAndSpacingInRowDirection):
        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::styleOrColLogicalWidth):
        Remove unnecessary cast.
        
        (WebCore::RenderTableCell::clippedOverflowRectForRepaint):
        Use LayoutPoint instead of left/top.
        
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::calcRowLogicalHeight):
        (WebCore::RenderTableSection::layoutRows):
        * rendering/RenderTableSection.h:
        Change baseline and baselineDescent to int to avoid unnecessary type
        conversion.

2012-03-30  Joe Thomas  <joethomas@motorola.com>

        Spec renamed Viewport-relative lengths to Viewport-percentage lengths
        https://bugs.webkit.org/show_bug.cgi?id=82773

        Reviewed by Antti Koivisto.

        As per the latest version of CSS Values and Units Module Level 3 specification released on 29 March 2012
        (http://dev.w3.org/csswg/css3-values/#viewport-relative-lengths) Viewport-relative lengths is renamed to Viewport-percentage lengths.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::getPositionOffsetValue):
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        * css/CSSPrimitiveValue.cpp:
        (WebCore::unitCategory):
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        (WebCore::CSSPrimitiveValue::canonicalUnitTypeForCategory):
        (WebCore::CSSPrimitiveValue::viewportPercentageLength):
        * css/CSSPrimitiveValue.h:
        (WebCore::CSSPrimitiveValue::isViewportPercentageLength):
        (CSSPrimitiveValue):
        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::convertToLength):
        * css/CSSStyleApplyProperty.cpp:
        (WebCore::ApplyPropertyLength::applyValue):
        (WebCore::ApplyPropertyBorderRadius::applyValue):
        (WebCore::ApplyPropertyFontSize::applyValue):
        (WebCore::ApplyPropertyLineHeight::applyValue):
        (WebCore::ApplyPropertyVerticalAlign::applyValue):
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::collectMatchingRulesForList):
        * css/LengthFunctions.cpp:
        (WebCore::minimumValueForLength):
        (WebCore::valueForLength):
        (WebCore::floatValueForLength):
        * platform/Length.h:
        (WebCore::Length::isViewportPercentage):
        (WebCore::Length::viewportPercentageLength):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::textIndentOffset):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::computeContentLogicalHeightUsing):
        (WebCore::RenderBox::computeReplacedLogicalHeightUsing):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paddingTop):
        (WebCore::RenderBoxModelObject::paddingBottom):
        (WebCore::RenderBoxModelObject::paddingLeft):
        (WebCore::RenderBoxModelObject::paddingRight):
        (WebCore::RenderBoxModelObject::paddingBefore):
        (WebCore::RenderBoxModelObject::paddingAfter):
        (WebCore::RenderBoxModelObject::paddingStart):
        (WebCore::RenderBoxModelObject::paddingEnd):
        (WebCore::RenderBoxModelObject::calculateFillTileSize):
        * rendering/RenderInline.cpp:
        (WebCore::computeMargin):
        * rendering/style/RenderStyle.h:

2012-03-30  Alexandru Chiculita  <achicu@adobe.com>

        [CSS Filters] Drop Shadow is not repainting correctly when repaint area is smaller than the filtered element
        https://bugs.webkit.org/show_bug.cgi?id=80323

        Reviewed by Dean Jackson.
        
        The problem is that shadow and blur (and custom filters - although not treated in this patch) need the full source image of
        the surface that needs to be filtered. Until now the filter was computed only using the area defined by the dirty repaint rectangle.
        Those filters need full image source because they displace pixel positions, meaning that pixels in the current dirty rectangle
        have a dependency on pixels from the RenderLayer outside the dirty rect. See the bug pictures for an example of how that could go wrong.
        
        The fix is to always keep a copy of the RenderLayer representation in memory. When repaint is needed we still invalidate
        only the parts that changed, but the filter is computed using the full source image and not only the dirty rectangle.
        
        In order to make that work, we needed the full repaint rectangle of the current RenderLayer and not just the clipped version that
        we get through the ::paint methods. Also, because filters sometime need to repaint more than just the dirty area (because of the 
        outsets of the filters - ie blur, drop-shadow), it makes it easier to just capture all the repaints in the RenderLayer itself in a
        similar way WebKit does now for composited layers. As a result the repaint container can also be a filtered layer (not just composited ones), so 
        that we can catch all the filter repaints in one place in the RenderLayer. Also with this change I removed the need to add visual overflow to 
        the RenderBox and also there's no need to patch the repaintUsingContainer. By the way, repaintUsingContainer did not always work because of the 
        LayoutState optimizations, so repaints during layout would fail (I know that that could be fixed by disabling the LayoutState for filtered areas).
        
        Also part of this patch I extracted a function from RenderLayerCompositor::calculateCompositedBounds, so that we can also use it from RenderLayer.
        I called it RenderLayer::calculateLayerBounds and there should be no change in functionality. It now also includes the outsets of the filter. I've
        added a different bug to avoid adding the outsets when the filter is computed in hardware. That's because some platforms do not support that yet:
        https://bugs.webkit.org/show_bug.cgi?id=81239 
        
        Also the visual overflow doesn't include the child RenderLayers, meaning that the outsets would have been applied to the border and not to the bounding box
        of the RenderLayer. The end result was that some child RenderLayers could be clipped out of the filtered area.
        
        Tests: css3/filters/filter-repaint-blur.html
               css3/filters/filter-repaint-child-layers.html
               css3/filters/filter-repaint-composited-fallback-crash.html
               css3/filters/filter-repaint-composited-fallback.html
               css3/filters/filter-repaint-sepia.html
               css3/filters/filter-repaint-shadow-clipped.html
               css3/filters/filter-repaint-shadow-rotated.html
               css3/filters/filter-repaint-shadow.html

        * platform/graphics/filters/FilterOperations.cpp:
        (WebCore::FilterOperations::getOutsets): Drop shadow should only enlarge the outsets and never make them smaller.
        
        * rendering/FilterEffectRenderer.cpp:
        (WebCore::FilterEffectRenderer::FilterEffectRenderer):
        (WebCore::FilterEffectRenderer::build): Caching the operations.hasFilterThatMovesPixels() in the FilterEffectRenderer.
        (WebCore::FilterEffectRenderer::updateBackingStore): It now returns true when the backing store was recreated, so that we can repaint it all.
        (WebCore):
        (WebCore::FilterEffectRendererHelper::prepareFilterEffect): Separated beginFilterEffect into two methods. One that computed the rects 
        and one that prepares the draw context.
        (WebCore::FilterEffectRendererHelper::beginFilterEffect):
        (WebCore::FilterEffectRendererHelper::applyFilterEffect):
        
        * rendering/FilterEffectRenderer.h:
        (FilterEffectRendererHelper):
        (FilterEffectRenderer):
        (WebCore::FilterEffectRenderer::hasFilterThatMovesPixels):
        
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::computeRectForRepaint): No need to include the outsets in the repaint rect here, we will do it later in RenderLayer.
        (WebCore::RenderBox::addVisualEffectOverflow): Removed outsets from the overflow.
        
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::computeRectForRepaint): Removed the outsets from this method. We now compute that in
        RenderLayer::setFilterBackendNeedsRepaintingInRect.
        
        * rendering/RenderLayer.cpp:
        (WebCore):
        In this change I introduce a new dirty rectangle used by filters. It accumulates all the repaint requests inside the filtered layer,
        so that we can invalidate the areas that are outside the clipping rectangle. Such cases include "overflow:scroll" and "overflow:hidden", when
        we still want to blur or drop shadow based on content that is not actually displayed on screen (but the shadow for that content is visible). That rectangle
        is called m_filterRepaintRect and resets back to zero when the next repaint is finished. All the filtered layers that apply blur and drop-shadow
        will have an extra backing surface and only the invalidated areas are repainted in that surface. This is very similar to how composited layers work.
        
        (WebCore::RenderLayer::requiresFullLayerImageForFilters): Returns true in CPU mode and only if the layer needs the full source image of 
        the layer to compute the filter. Otherwise GPU layers already have access to the full bakcing image.
        (WebCore::RenderLayer::enclosingFilterLayer): Returns the enclosing layer that returns true on requiresFullLayerImageForFilters.
        (WebCore::RenderLayer::enclosingFilterRepaintLayer): Returns the enclosing layer that can be used to repaint the current layer. Usually that 
        is the RenderView layer or the parent RenderLayer that is composited.
        (WebCore::RenderLayer::setFilterBackendNeedsRepaintingInRect): Intercepts all the repaint queries for the filtered layers and uses
        enclosingFilterRepaintLayer to enforce the repaint using the parent container.
        
        (WebCore::RenderLayer::paintLayerContents): Consolidated the filters code in one single place. Also, it is now sending the bounding box and the 
        dirty rect to the FilterEffectRendererHelper::prepareFilterEffect to make sure the backing store is repainted accordingly. In some cases it might 
        rewrite the dirty rectangle used to paint the current layer, so that all the dirty areas in the backing store are covered.
        (WebCore::RenderLayer::calculateLayerBounds): Extracted from RenderLayerCompositor::calculateCompositedBounds.
        (WebCore::RenderLayer::updateOrRemoveFilterEffect): We should not create the filter builder when there's no filter specified.
        
        * rendering/RenderLayer.h:
        (RenderLayer):
        
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::calculateCompositedBounds): Now using the code from RenderLayer::calculateLayerBounds
        
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::containerForRepaint): Using RenderLayer::enclosingFilterLayer to also find the parent filtered area.
        (WebCore::RenderObject::repaintUsingContainer): Removed the need to add filter outsets in this method. We now compute that in
        RenderLayer::setFilterBackendNeedsRepaintingInRect.

2012-03-30  Ryosuke Niwa  <rniwa@webkit.org>

        Add a compile assert for the size of BidiContext
        https://bugs.webkit.org/show_bug.cgi?id=82793

        Reviewed by Eric Seidel.

        Added the assertion. Also reduced the number of bits used for bidi levels from
        8 to 6 as done in InlineBox since bidi levels require exactly 6 bits.

        * rendering/InlineBox.h: Added a comment about why bidi level needs exactly 6 bits.
        * platform/text/BidiContext.cpp:
        (SameSizeAsBidiContext):
        (WebCore):
        * platform/text/BidiContext.h:
        (BidiContext):

2012-03-30  Joshua Bell  <jsbell@chromium.org>

        IndexedDB: Race condition causes version change transaction to commit after onblocked
        https://bugs.webkit.org/show_bug.cgi?id=82678

        For a version change event, the blocked and success events could both be queued
        before either is dispatched. The transaction would erroneously be allowed to commit
        after the blocked event was dispatched; it should not be, as the request was not
        finished.

        Reviewed by Tony Chang.

        Test: storage/indexeddb/dont-commit-on-blocked.html

        * Modules/indexeddb/IDBRequest.cpp:
        (WebCore::IDBRequest::dispatchEvent):

2012-03-30  Ryosuke Niwa  <rniwa@webkit.org>

        Add a compile assert for the size of FontDescription
        https://bugs.webkit.org/show_bug.cgi?id=82786

        Reviewed by Eric Seidel.

        Added the assertion. Also converted a couple of boolean bitfields to unsinged.
        I've verified that the conversions are safe (they're only used in FontDescription.h/cpp).

        * platform/graphics/FontDescription.cpp:
        (SameSizeAsFontDescription):
        (WebCore):
        * platform/graphics/FontDescription.h:
        (FontDescription):

2012-03-30  Adam Barth  <abarth@webkit.org>

        Move CPP files related to ResourceHandle to WebCore/platform
        https://bugs.webkit.org/show_bug.cgi?id=82582

        Reviewed by James Robinson.

        Re-land a tiny piece of http://trac.webkit.org/changeset/112572 in the
        hopes of not breaking the component build this time.

        * WebCore.gyp/WebCore.gyp:
        * WebCore.gypi:
        * platform/chromium/support/WebData.cpp: Copied from Source/WebKit/chromium/src/WebData.cpp.

2012-03-30  Andreas Kling  <kling@webkit.org>

        Kill CSSTimingFunctionValue.
        <http://webkit.org/b/82787>

        Reviewed by Antti Koivisto.

        Remove CSSTimingFunctionValue and let the 3 subclasses inherit directly from CSSValue.
        CSSTimingFunctionValue is a pointless middle-man class that adds nothing.

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::collectMatchingRulesForList):
        * css/CSSTimingFunctionValue.h:
        (WebCore::CSSLinearTimingFunctionValue::CSSLinearTimingFunctionValue):
        (WebCore::CSSCubicBezierTimingFunctionValue::CSSCubicBezierTimingFunctionValue):
        (WebCore::CSSStepsTimingFunctionValue::CSSStepsTimingFunctionValue):
        * css/CSSValue.h:
        (WebCore::CSSValue::isCubicBezierTimingFunctionValue):
        (WebCore::CSSValue::isLinearTimingFunctionValue):
        (WebCore::CSSValue::isStepsTimingFunctionValue):

2012-03-30  Nat Duca  <nduca@chromium.org>

        [chromium] Bump max texture updates per frame to 48
        https://bugs.webkit.org/show_bug.cgi?id=82779

        Reviewed by James Robinson.

        * platform/graphics/chromium/cc/CCThreadProxy.cpp:
        (WTF):

2012-03-30  Nate Chapin  <japhet@chromium.org>

        Merge FrameLoader::finishedLoading() into DocumentLoader::finishedLoading().
        https://bugs.webkit.org/show_bug.cgi?id=82653

        Reviewed by Adam Barth.

        No new tests, no functionality change intended.

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::finishedLoading):
        * loader/FrameLoader.cpp:
        * loader/FrameLoader.h:
        * loader/MainResourceLoader.cpp:
        (WebCore::MainResourceLoader::didFinishLoading):

2012-03-30  Antti Koivisto  <antti@apple.com>

        Cache origin check result to RuleData
        https://bugs.webkit.org/show_bug.cgi?id=82774

        Reviewed by Andreas Kling.

        You wan't be able to get back to the stylesheet from a css style rule soon. 
        We need to do the origin check when we know the sheet it came from.

        * css/CSSStyleSelector.cpp:
        (RuleData):
        (WebCore::RuleData::hasDocumentSecurityOrigin):
        (RuleSet):
        (WebCore::makeRuleSet):
        (WebCore::CSSStyleSelector::collectMatchingRulesForList):
        * css/CSSStyleSelector.h:
        (WebCore::CSSStyleSelector::RuleFeature::RuleFeature):
        (RuleFeature):
        (Features):

2012-03-30  Mike Reed  <reed@google.com>

        Remove deadcode behind "SafeSkia" flag
        https://bugs.webkit.org/show_bug.cgi?id=82771

        Reviewed by Stephen White.

        Just removing dead code (behind obsolete build flag), existing webkit tests apply

        * platform/graphics/skia/GraphicsContextSkia.cpp:
        (WebCore::GraphicsContext::addInnerRoundedRectClip):
        (WebCore::GraphicsContext::clearRect):
        (WebCore::GraphicsContext::clip):
        (WebCore::GraphicsContext::canvasClip):
        (WebCore::GraphicsContext::clipOut):
        (WebCore::GraphicsContext::clipPath):
        (WebCore::GraphicsContext::drawConvexPolygon):
        (WebCore::GraphicsContext::clipConvexPolygon):
        (WebCore::GraphicsContext::drawEllipse):
        (WebCore::GraphicsContext::drawLine):
        (WebCore::GraphicsContext::drawRect):
        (WebCore::GraphicsContext::fillPath):
        (WebCore::GraphicsContext::fillRect):
        (WebCore::GraphicsContext::fillRoundedRect):
        (WebCore::GraphicsContext::strokeArc):
        (WebCore::GraphicsContext::strokePath):
        (WebCore::GraphicsContext::strokeRect):
        (WebCore::GraphicsContext::platformFillEllipse):
        (WebCore::GraphicsContext::platformStrokeEllipse):

2012-03-30  Ryosuke Niwa  <rniwa@webkit.org>

        Add a compile assert for the size of InlineFlowBox
        https://bugs.webkit.org/show_bug.cgi?id=82767

        Reviewed by Tony Chang.

        Add a compile assert to ensure InlineFlowBox stays small.
        Also make some of the member variables not used in RootInlineBox private.

        Changing these booleans to unsigned is safe as I've audited all code that
        uses these member variables (they're all in InlineFlowBox or RootInlineBox).

        * rendering/InlineFlowBox.cpp:
        (SameSizeAsInlineFlowBox):
        (WebCore):
        * rendering/InlineFlowBox.h:
        (InlineFlowBox):

2012-03-30  Zalan Bujtas  <zbujtas@gmail.com>

        Fix defective size_t overflow in GestureTapHighlighter.
        https://bugs.webkit.org/show_bug.cgi?id=82605

        Reviewed by Kenneth Rohde Christiansen.

        In pathForRenderer, the for loop has 'i < rects().size() - 1' as test expression,
        where rects().size() returns with size_t.
        In case of empty rect, it leads to unsigned int overflow. Overflow value makes
        the associated for loop run with invalid values.
        Fix it by making loop variable int and stop using size_t type in the test expression.
        Also, return early, if no focus ring found.

        Manual test added. Tap gesture highlighter is getting triggered by UI process.

        * page/GestureTapHighlighter.cpp:

2012-03-30  Mark Pilgrim  <pilgrim@chromium.org>

        GEOLOCATION should be implemented as Page Supplement
        https://bugs.webkit.org/show_bug.cgi?id=82228

        Reviewed by Adam Barth.

        Geolocation now uses the Supplement interface instead of
        keeping an instance variable on Page. This allows us to
        remove all geolocation-related functions, variables, and
        ifdefs out of Page and into Modules/geolocation/.

        * Modules/geolocation/Geolocation.cpp:
        (WebCore::Geolocation::stop):
        (WebCore::Geolocation::lastPosition):
        (WebCore::Geolocation::requestPermission):
        (WebCore::Geolocation::startUpdating):
        (WebCore::Geolocation::stopUpdating):
        * Modules/geolocation/Geolocation.h:
        (WebCore):
        * Modules/geolocation/GeolocationController.cpp:
        (WebCore::GeolocationController::supplementName):
        (WebCore):
        (WebCore::provideGeolocationTo):
        * Modules/geolocation/GeolocationController.h:
        (GeolocationController):
        (WebCore::GeolocationController::from):
        * WebCore.exp.in:
        * page/GeolocationClient.h:
        (WebCore):
        (GeolocationClient):
        * page/Page.cpp:
        (WebCore::Page::Page):
        (WebCore::Page::PageClients::PageClients):
        * page/Page.h:
        (WebCore):
        (PageClients):
        (Page):

2012-03-30  Anders Carlsson  <andersca@apple.com>

        This is fun.

        * WebCore.xcodeproj/project.pbxproj:

2012-03-30  Anders Carlsson  <andersca@apple.com>

        Yet another build fix attempt.

        * WebCore.xcodeproj/project.pbxproj:

2012-03-30  Joe Mason  <jmason@rim.com>

        [BlackBerry] Make sure strings do not leak in PluginViewBlackberry.
        https://bugs.webkit.org/show_bug.cgi?id=82764

        Update PluginViewBlackBerry to follow the changes in
        BlackBerry::Platform::Window which now returns std::string instead of char* for
        strings. Also copy the windowGroup and rootGroup strings in PluginViewPrivate
        instead of just saving a pointer to the returned memory, which could become
        invalid at any time.

        Reviewed by Rob Buis.

        * plugins/blackberry/PluginViewBlackBerry.cpp:
        (WebCore::PluginView::setNPWindowIfNeeded):
        (WebCore::PluginView::platformGetValue):
        (WebCore::PluginView::platformDestroy):
        * plugins/blackberry/PluginViewPrivateBlackBerry.h:
        (PluginViewPrivate):

2012-03-30  Anders Carlsson  <andersca@apple.com>

        Another build fix.

        * WebCore.xcodeproj/project.pbxproj:

2012-03-30  Anders Carlsson  <andersca@apple.com>

        Fix build.

        * page/scrolling/mac/ScrollingTreeMac.mm:

2012-03-30  Anders Carlsson  <andersca@apple.com>

        Show a scrolling indicator light when compositing borders are turned on
        https://bugs.webkit.org/show_bug.cgi?id=82758
        <rdar://problem/11143892>

        Reviewed by Andreas Kling.

        With this change, turning on compositing borders also turn on a tiny indicator in the top left corner.
        This indicator uses color coding to show where wheel events are handled and where the scroll layer position is updated:

          - Green means that both wheel events and scroll layer position updates are handled on the scrolling thread.
          - Yellow means that wheel events need to be dispatched to the main thread (due to wheel event handlers), but that scroll layer position
            updates still happen on the scrolling thread.
          - Red means that scroll layer position updates happen on the main thread (due to background-attachment: fixed or fixed position objects).

        * WebCore.exp.in:
        * WebCore.xcodeproj/project.pbxproj:
        * page/scrolling/ScrollingTree.cpp:
        (WebCore::ScrollingTree::commitNewTreeState):
        Call updateDebugRootLayer().

        * page/scrolling/ScrollingTreeNode.h:
        (WebCore::ScrollingTreeNode::shouldUpdateScrollLayerPositionOnMainThread):
        Make this public.

        (ScrollingTreeNode):
        * page/scrolling/mac/ScrollingTreeMac.mm: Added.
        (WebCore::ScrollingTree::setDebugRootLayer):
        Set up a new debug info sublayer.

        (WebCore::ScrollingTree::updateDebugRootLayer):
        Update the debug root layer background color based on the scrolling tree state.

2012-03-30  Peter Rybin  <peter.rybin@gmail.com>

        Web Inspector: CodeGeneratorInspector.py: add missing runtime assert method for InspectorObject
        https://bugs.webkit.org/show_bug.cgi?id=82753

        Reviewed by Vsevolod Vlasov.

        Type validator generator is extended to support missing InspectorObject type and
        made more accurate for "int" type.

        Strict types are enabled for 2 more domains.

        * inspector/CodeGeneratorInspector.py:
        (RawTypes.BaseType.generate_validate_method):
        (RawTypes.String.get_validate_method_params.ValidateMethodParams):
        (RawTypes.Int):
        (RawTypes.Int.generate_validate_method):
        (RawTypes.Int.get_raw_validator_call_text):
        (RawTypes.Number.get_validate_method_params.ValidateMethodParams):
        (RawTypes.Bool.get_validate_method_params.ValidateMethodParams):
        (RawTypes.Object.get_validate_method_params.ValidateMethodParams):
        (RawTypes.Object.get_validate_method_params):
        (TypeBindings.create_type_declaration_.ClassBinding.request_internal_runtime_cast):
        (PlainObjectBinding.request_internal_runtime_cast):
        (PlainObjectBinding.get_validator_call_text):
        (ArrayBinding.request_internal_runtime_cast):

2012-03-30  Ian Vollick  <vollick@chromium.org>

        [chromium] assertion being hit in CCLayerAnimationController
        https://bugs.webkit.org/show_bug.cgi?id=82237

        Reviewed by James Robinson.

        Animations are no longer pushed to the impl thread if they have already completed.

        Tested in CCLayerAnimationControllerTest.doNotSyncFinishedAnimation

        * platform/graphics/chromium/cc/CCLayerAnimationController.cpp:
        (WebCore::CCLayerAnimationController::pushNewAnimationsToImplThread):

2012-03-30  Ryosuke Niwa  <rniwa@webkit.org>

        Build fix after r112699.

        * css/StylePropertySet.cpp:
        (WebCore::StylePropertySet::findPropertyWithId):

2012-03-30  Ryosuke Niwa  <rniwa@webkit.org>

        Add a compile assert for the size of CSSProperty
        https://bugs.webkit.org/show_bug.cgi?id=82756

        Reviewed by Andreas Kling.

        Add a compile assert to ensure CSSProperty instances stay small.

        Also make member variables of CSSProperty private as they should have been,
        and extract wrapValueInCommaSeparatedList from createFontFaceRule.

        * css/CSSParser.cpp:
        (WebCore::CSSParser::createFontFaceRule):
        * css/CSSProperty.cpp:
        (SameSizeAsCSSProperty):
        (WebCore):
        (WebCore::CSSProperty::wrapValueInCommaSeparatedList):
        * css/CSSProperty.h:
        (CSSProperty):

2012-03-30  Ryosuke Niwa  <rniwa@webkit.org>

        Let there be a clean xcodeproj.

        * WebCore.xcodeproj/project.pbxproj:

2012-03-30  Chris Fleizach  <cfleizach@apple.com>

        AX: Crash at WebCore::renderObjectContainsPosition(WebCore::RenderObject*, WebCore::Position const&)
        https://bugs.webkit.org/show_bug.cgi?id=82745

        Reviewed by Simon Fraser.

        Test: platform/mac/accessibility/range-for-position.html

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::index):

2012-03-30  John Sullivan  <sullivan@apple.com>

        Certain emoji characters should not be displayed in user-visible URL strings.
        <https://bugs.webkit.org/show_bug.cgi?id=82739>
        <rdar://problem/9205643>

        Reviewed by Alexey Proskuryakov

        * platform/mac/WebCoreNSURLExtras.mm:
        (WebCore::isLookalikeCharacter):
        Added five emoji characters to the list.

2012-03-30  David Barr  <davidbarr@chromium.org>

        Split up top-level .gitignore and .gitattributes
        https://bugs.webkit.org/show_bug.cgi?id=82687

        Reviewed by Tor Arne Vestbø.

        No new tests, source control administrivia.

        * .gitattributes: Added.
        * WebCore.gyp/.gitignore: Added.

2012-03-30  Patrick Gansterer  <paroga@webkit.org>

        [WinCE] Correct <wtf/*.h> include paths.
        https://bugs.webkit.org/show_bug.cgi?id=82713

        Reviewed by Eric Seidel.

        Modify the #include declarations for several WinCE-related files
        so that the wtf types are included using the full path.

        * platform/graphics/wince/ImageBufferWinCE.cpp:

2012-03-30  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: ScriptsNavigator scripts selection/focus polish.
        https://bugs.webkit.org/show_bug.cgi?id=82732

        Reviewed by Pavel Feldman.

        Script could be selected by space in ScriptsNavigator now.
        This patch also polishes focus behavior when using ScriptsNavigator.

        * inspector/front-end/ScriptsNavigator.js:
        (WebInspector.ScriptsNavigator.prototype._scriptSelected): Added focusSource param to give clients possibility to release focus.
        (WebInspector.NavigatorScriptTreeElement.prototype.onspace): Added script selection on space pressed.
        (WebInspector.NavigatorScriptTreeElement.prototype._onclick):
        (WebInspector.NavigatorScriptTreeElement.prototype.onenter):
        * inspector/front-end/ScriptsPanel.js: _hideNavigatorOverlay moved to the end of events processing to set focus correctly.
        (WebInspector.ScriptsPanel.prototype._editorSelected):
        (WebInspector.ScriptsPanel.prototype._fileSelected):
        (WebInspector.ScriptsPanel.prototype._hideNavigatorOverlay):
        * inspector/front-end/treeoutline.js:
        (TreeOutline.prototype._treeKeyDown): onspace event added.

2012-03-30  Mike Reed  <reed@google.com>

        remove unneeded copies of SkPaths, remove unneeded save/restore
        https://bugs.webkit.org/show_bug.cgi?id=82641

        Reviewed by Stephen White.

        Performance change, existing webkit tests apply.

        * platform/graphics/skia/GraphicsContextSkia.cpp:
        (WebCore::GraphicsContext::clipOut):
        (WebCore::GraphicsContext::clipPath):
        (WebCore::GraphicsContext::fillPath):
        (WebCore::GraphicsContext::fillRect):
        (WebCore::GraphicsContext::strokePath):

2012-03-30  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: undo-ing edit that consists of a Tab does not work.
        https://bugs.webkit.org/show_bug.cgi?id=82733

        Reviewed by Vsevolod Vlasov.

        We should never modify the range returned by the edit operation manually.
        And we should clone ranges that get into the model so that subsequent edits
        don't mutate them.

        Drive-by: restore selection after undo via selecting all the text that undo
        operation produced.

        Test: inspector/editor/text-editor-undo-redo.html

        * inspector/front-end/TextEditorModel.js:
        (WebInspector.TextEditorModel.endsWithBracketRegex.):
        * inspector/front-end/TextViewer.js:

2012-03-30  Malcolm MacLeod  <malcolm.macleod@tshwanedje.com>

        [wx] Implement Gradient and ImageBuffer support.
        https://bugs.webkit.org/show_bug.cgi?id=82710

        Reviewed by Kevin Ollivier.

        * platform/graphics/BitmapImage.h:
        (BitmapImage):
        (WebCore::BitmapImage::create):
        * platform/graphics/Gradient.h:
        * platform/graphics/wx/GradientWx.cpp:
        (WebCore::Gradient::platformDestroy):
        (WebCore::Gradient::platformGradient):
        (WebCore::Gradient::fill):
        * platform/graphics/wx/ImageBufferDataWx.h:
        (ImageBufferData):
        * platform/graphics/wx/ImageBufferWx.cpp:
        (WebCore):
        (WebCore::ImageBufferData::ImageBufferData):
        (WebCore::ImageBufferData::~ImageBufferData):
        (WebCore::ImageBuffer::ImageBuffer):
        (WebCore::ImageBuffer::~ImageBuffer):
        (WebCore::ImageBuffer::context):
        (WebCore::ImageBuffer::toDataURL):
        (WebCore::ImageBuffer::copyImage):
        (WebCore::ImageBuffer::clip):
        (WebCore::ImageBuffer::draw):
        (WebCore::ImageBuffer::drawPattern):
        * platform/graphics/wx/ImageWx.cpp:
        (WebCore::BitmapImage::BitmapImage):
        (WebCore):
        (WebCore::BitmapImage::draw):
        * platform/wx/LocalDC.h:
        (WebCore):

2012-03-30  Allan Sandfeld Jensen  <allan.jensen@nokia.com>

        [Qt] Find zoomable area using area-based hit-testing
        https://bugs.webkit.org/show_bug.cgi?id=82609

        Reviewed by Kenneth Rohde Christiansen.

        Implement API for calculating the best zoomable area for a
        tap-to-zoom gesture.
        It picks the area with the largest intersection with the touch. In most
        cases this will be all areas fully containing the area, and returns the
        smallest inner-most of these.

        * page/EventHandler.cpp:
        (WebCore::EventHandler::bestZoomableAreaForTouchPoint):
        * page/EventHandler.h:
        * page/TouchAdjustment.cpp:
        (WebCore::TouchAdjustment::nodeIsZoomTarget):
        (WebCore::TouchAdjustment::appendZoomableSubtargets):
        (WebCore::TouchAdjustment::compileZoomableSubtargets):
        (WebCore::TouchAdjustment::areaOfIntersection):
        (WebCore::TouchAdjustment::findAreaWithLargestIntersection):
        (WebCore::findBestZoomableArea):
        * page/TouchAdjustment.h:
        * platform/graphics/IntSize.h:
        (WebCore::IntSize::area):

2012-03-30  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: do not issue attributes modified event if actual values were not changed.
        https://bugs.webkit.org/show_bug.cgi?id=82726

        Reviewed by Yury Semikhatsky.

        When style attribute is invalidated, we re-fetch the attributes values. There is no
        point in further dispatching attrs modified event if model stays the same.

        Test: inspector/elements/edit-style-attribute.html

        * inspector/front-end/DOMAgent.js:
        (WebInspector.DOMNode.prototype._setAttributesPayload):
        (WebInspector.DOMAgent.prototype._loadNodeAttributes):

2012-03-30  Philip Rogers  <pdr@google.com>

        Add new renderer for circles and ellipses
        https://bugs.webkit.org/show_bug.cgi?id=80423

        Reviewed by Eric Seidel.

        This patch introduces a special renderer for SVGCircleElements
        and SVGEllipseElements to avoid having to use the slower path
        rendering code. This patch includes optimized circle code for
        the CG platform, and hooks (GC::fillEllipse, GC::strokeEllipse)
        are available for other platforms as well.

        Tests: svg/hittest/svg-ellipse-non-scale-stroke.xhtml
               svg/hittest/svg-ellipse.xhtml

        Added a test to exercise hit testing on an ellipse, and on
        an ellipse's stroke, to make sure the formulae in this patch
        are correct.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/GraphicsContext.cpp:
        (WebCore::GraphicsContext::fillEllipse):
        (WebCore):
        (WebCore::GraphicsContext::strokeEllipse):
        (WebCore::GraphicsContext::fillEllipseAsPath):
        (WebCore::GraphicsContext::strokeEllipseAsPath):
        (WebCore::GraphicsContext::platformFillEllipse):
        (WebCore::GraphicsContext::platformStrokeEllipse):
        * platform/graphics/GraphicsContext.h:
        (GraphicsContext):
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::platformFillEllipse):
        (WebCore):
        (WebCore::GraphicsContext::platformStrokeEllipse):
        * platform/graphics/skia/GraphicsContextSkia.cpp:
        (WebCore::GraphicsContext::platformFillEllipse):
        (WebCore):
        (WebCore::GraphicsContext::platformStrokeEllipse):
        * rendering/svg/RenderSVGAllInOne.cpp:
        * rendering/svg/RenderSVGEllipse.cpp: Added.
        (WebCore):
        (WebCore::RenderSVGEllipse::RenderSVGEllipse):
        (WebCore::RenderSVGEllipse::~RenderSVGEllipse):
        (WebCore::RenderSVGEllipse::createShape):
        (WebCore::RenderSVGEllipse::calculateRadiiAndCenter):
        (WebCore::RenderSVGEllipse::objectBoundingBox):
        (WebCore::RenderSVGEllipse::strokeBoundingBox):
        (WebCore::RenderSVGEllipse::fillShape):
        (WebCore::RenderSVGEllipse::strokeShape):
        (WebCore::RenderSVGEllipse::shapeDependentStrokeContains):
        (WebCore::RenderSVGEllipse::shapeDependentFillContains):
        * rendering/svg/RenderSVGEllipse.h: Added.
        (WebCore):
        (RenderSVGEllipse):
        (WebCore::RenderSVGEllipse::isSVGEllipse):
        (WebCore::RenderSVGEllipse::renderName):
        (WebCore::RenderSVGEllipse::isEmpty):
        * svg/SVGCircleElement.cpp:
        (WebCore::SVGCircleElement::svgAttributeChanged):
        (WebCore):
        (WebCore::SVGCircleElement::createRenderer):
        * svg/SVGCircleElement.h:
        (SVGCircleElement):
        * svg/SVGEllipseElement.cpp:
        (WebCore::SVGEllipseElement::svgAttributeChanged):
        (WebCore::SVGEllipseElement::createRenderer):
        (WebCore):
        * svg/SVGEllipseElement.h:
        (SVGEllipseElement):

2012-03-30  Jesus Sanchez-Palencia  <jesus.palencia@openbossa.org>

        Add a "preview" state to Page Visibility API implementation
        https://bugs.webkit.org/show_bug.cgi?id=81355

        Reviewed by Adam Barth.

        Updating the Page Visibility API implementation to the current spec version.

        This change is covered by fast/events/page-visibility-transition-test.html,
        so no new tests needed.

        * page/PageVisibilityState.cpp:
        (WebCore::pageVisibilityStateString):
        * page/PageVisibilityState.h:

2012-03-30  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: [Regression] Execution line is not revealed after pretty print.
        https://bugs.webkit.org/show_bug.cgi?id=82727

        Reviewed by Pavel Feldman.

        This patch makes JavaScriptSourceFrame reveal execution line after pretty print.

        * inspector/front-end/JavaScriptSourceFrame.js:
        (WebInspector.JavaScriptSourceFrame.prototype.setExecutionLine):

2012-03-30  Yury Semikhatsky  <yurys@chromium.org>

        Web Inspector: preload field values into local variables for better heap profiler performance
        https://bugs.webkit.org/show_bug.cgi?id=82703

        Reading from object fields takes a noticable time when the only other thing you do
        is just manipulating on big(several million elements) Uint32Array array cells.

        Reviewed by Pavel Feldman.

        * inspector/front-end/HeapSnapshot.js:
        (WebInspector.HeapSnapshot.prototype._createContainmentEdgesArray):
        (WebInspector.HeapSnapshot.prototype._buildRetainers):
        (WebInspector.HeapSnapshot.prototype._bfs):

2012-03-30  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r112489.
        http://trac.webkit.org/changeset/112489
        https://bugs.webkit.org/show_bug.cgi?id=82725

        Tentatively introduces a lot of webfont-related test flakiness
        on Snow Leopard (Requested by apavlov on #webkit).

        * css/CSSSegmentedFontFace.cpp:
        (WebCore::CSSSegmentedFontFace::getFontData):

2012-03-30  Keishi Hattori  <keishi@webkit.org>

        Change ENABLE_INPUT_COLOR to ENABLE_INPUT_TYPE_COLOR and enable it for chromium
        https://bugs.webkit.org/show_bug.cgi?id=80972

        Reviewed by Kent Tamura.

        * CMakeLists.txt:
        * Configurations/FeatureDefines.xcconfig:
        * GNUmakefile.am:
        * WebCore.exp.in:
        * css/html.css:
        * html/ColorInputType.cpp:
        * html/ColorInputType.h:
        * html/HTMLInputElement.cpp:
        (WebCore):
        * html/HTMLInputElement.h:
        (HTMLInputElement):
        * html/InputType.cpp:
        (WebCore::createInputTypeFactoryMap):
        (WebCore):
        (InputTypeNames):
        * html/InputType.h:
        (InputType):
        (InputTypeNames):
        * loader/EmptyClients.h:
        (EmptyChromeClient):
        * page/Chrome.cpp:
        (WebCore):
        * page/Chrome.h:
        (WebCore):
        (Chrome):
        * page/ChromeClient.h:
        (WebCore):
        (ChromeClient):
        * platform/ColorChooser.h:
        * platform/ColorChooserClient.h:
        * testing/InternalSettings.cpp:
        * testing/Internals.cpp:
        (WebCore):
        * testing/Internals.h:
        (Internals):
        * testing/Internals.idl:

2012-03-30  Charles Wei  <charles.wei@torchmobile.com.cn>

        [BlackBerry] EventLoop::platformInit() obsolete.
        https://bugs.webkit.org/show_bug.cgi?id=82709

        Reviewed by Rob Buis.

        No new tests, build fix for BlackBerry porting.

        * platform/blackberry/EventLoopBlackBerry.cpp:

2012-03-30  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: ScriptsNavigator should open scripts with single click (not double click).
        https://bugs.webkit.org/show_bug.cgi?id=82723

        Reviewed by Pavel Feldman.

        This patch makes ScriptsNavigator open scripts with single click.

        * inspector/front-end/ScriptsNavigator.js:
        (WebInspector.NavigatorScriptTreeElement.prototype.onattach):
        (WebInspector.NavigatorScriptTreeElement.prototype._onclick):

2012-03-30  Vineet Chaudhary  <rgf748@motorola.com>

        IDLParser.pm should be able to parse sequence<T> as method argument.
        https://bugs.webkit.org/show_bug.cgi?id=82599

        Reviewed by Kentaro Hara.

        With this patch IDL parser should support sequence<T> as method argument.
        Current behaviour is argument name is not parsed hence shows empty spaces instead.

        Tests: bindings/scripts/test/TestObj.idl

        * bindings/scripts/CodeGeneratorCPP.pm:
        (SkipFunction): Skip functions for specific type.
        (SkipAttribute): Skip functions for specific type.
        (AddIncludesForType): Skip header for sequence<T> type.
        (GenerateHeader): Skip header and declaration for sequence<T> type.
        (GenerateImplementation): Skip header and implementation for sequence<T> type.
        * bindings/scripts/CodeGeneratorGObject.pm:
        (SkipFunction): Skip functions for sequence<T> type.
        * bindings/scripts/CodeGeneratorObjC.pm:
        (SkipFunction): Skip functions for specific type.
        (SkipAttribute): Skip functions for specific type.
        (AddForwardDeclarationsForType): Skip header for sequence<T> type.
        (AddIncludesForType): Skip header for sequence<T> type.
        (GenerateHeader):Skip header and declaration for sequence<T> type.
        (GenerateImplementation): Skip header and implementation for sequence<T> type.
        * bindings/scripts/CodeGeneratorV8.pm:
        (CreateCustomSignature): Add appropriate headers.
        * bindings/scripts/IDLStructure.pm: Add support to parse sequence<T>.
        * bindings/scripts/test/CPP/WebDOMTestObj.cpp: Modified results from run-binding-tests.
        (WebDOMTestObj::objMethodWithArgs):
        * bindings/scripts/test/CPP/WebDOMTestObj.h: Ditto.
        * bindings/scripts/test/GObject/WebKitDOMTestObj.cpp: Ditto.
        (webkit_dom_test_obj_obj_method_with_args):
        * bindings/scripts/test/GObject/WebKitDOMTestObj.h: Ditto.
        * bindings/scripts/test/JS/JSTestObj.cpp: Ditto.
        (WebCore::jsTestObjPrototypeFunctionMethodWithSequenceArg):
        * bindings/scripts/test/ObjC/DOMTestObj.h: Ditto.
        * bindings/scripts/test/ObjC/DOMTestObj.mm: Ditto.
        (-[DOMTestObj objMethodWithArgs:strArg:objArg:]):
        * bindings/scripts/test/V8/V8TestObj.cpp: Ditto.
        (WebCore::TestObjInternal::methodWithSequenceArgCallback):
        (WebCore::ConfigureV8TestObjTemplate):

2012-03-30  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: editing resets line-ending of the whole file
        https://bugs.webkit.org/show_bug.cgi?id=82708

        Reviewed by Yury Semikhatsky.

        This change splits TextEditorModel's setText into setText (for initialization) and
        editRange (for editing). Distinguishing between the two allowed properly detecting
        the preferred line endings.

        Test: inspector/editor/text-editor-line-breaks.html

        * inspector/front-end/JavaScriptSourceFrame.js:
        (WebInspector.JavaScriptSourceFrame.prototype.afterTextChanged):
        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame.prototype.setContent):
        * inspector/front-end/TextEditorModel.js:
        (WebInspector.TextEditorCommand):
        (WebInspector.TextEditorModel):
        (WebInspector.TextEditorModel.endsWithBracketRegex.):
        * inspector/front-end/TextViewer.js:
        (WebInspector.TextViewer.prototype._textChanged):
        (WebInspector.TextEditorMainPanel.prototype._unindentLines.get var):
        (WebInspector.TextEditorMainPanel.prototype._unindentLines):
        (WebInspector.TextEditorMainPanel.prototype.handleEnterKey.get var):
        (WebInspector.TextEditorMainPanel.prototype.handleEnterKey):
        (WebInspector.TextEditorMainPanel.prototype._applyDomUpdates):
        (WebInspector.TextEditorMainPanel.prototype._editRange):

2012-03-29  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Take IndexedDB support out of experiments.
        https://bugs.webkit.org/show_bug.cgi?id=82635

        Reviewed by Pavel Feldman.

        This patch takes inspector IndexedDB support out of experiments and enables tests.

        Test: http/tests/inspector/indexeddb/resources-panel.html

        * inspector/front-end/ResourcesPanel.js:
        * inspector/front-end/Settings.js:
        (WebInspector.ExperimentsSettings):

2012-03-30  Patrick Gansterer  <paroga@webkit.org>

        Build fix after r112482.

        * platform/network/cf/FormDataStreamCFNet.h: Added missing forward decleration.

2012-03-30  Philippe Normand  <pnormand@igalia.com>

        [GTK] WebAudio channelSize issue
        https://bugs.webkit.org/show_bug.cgi?id=81905

        Reviewed by Martin Robinson.

        * platform/audio/gstreamer/AudioFileReaderGStreamer.cpp:
        (WebCore::AudioFileReader::handleBuffer): Calculate the audio
        buffer duration and frames number from the buffer and caps instead
        of relying on the buffer offets that are not always correctly set
        depending on the audio file format.

2012-03-29  Alexandru Chiculita  <achicu@adobe.com>

        [CSS Filters] Trigger a repaint on elements with changed filter
        https://bugs.webkit.org/show_bug.cgi?id=82521

        Reviewed by Dean Jackson.

        I've added ContextSensitivePropertyFilter and changed RenderStyle::diff to use it when
        the filter property is changed. In RenderObject::adjustStyleDifference the appropriate StyleDifferenceRepaintLayer
        or StyleDifferenceRecompositeLayer is used depending on whether the layer is painting filters in software or in hardware
        (composited).

        Tests: css3/filters/filter-change-repaint-composited.html
               css3/filters/filter-change-repaint.html

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::createFilterOperations): None was treated as an invalid value.
        * platform/graphics/ca/mac/PlatformCALayerMac.mm: Shadows were remaining behind. Fixed that.
        (PlatformCALayer::setFilters):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::styleWillChange): Repaint the layer when there is a layout change and a filter change.
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::styleChanged): Making sure that the backing store is repainted when filters fallback to hardware.
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::adjustStyleDifference):
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::diff):
        * rendering/style/RenderStyleConstants.h:

2012-03-29  Koji Ishii  <kojiishi@gmail.com>


        Vertical flow support for OpenType fonts with the least platform dependencies
        https://bugs.webkit.org/show_bug.cgi?id=81326

        Reviewed by Dan Bernstein.

        This patch introduces a new class OpenTypeVerticalData to read
        vertical font metrics from OpenType fonts.

        Currently, WebKit relies on platform APIs to do the work. However,
        some platforms such as Windows lack support for all the capabilities
        WebKit requires for vertical flow and the text-orientation property
        to work correctly. Reading OpenType tables directly also gives
        benefits in consistent behavior among the WebKit platforms.

        This patch is for any platforms that want to parse OpenType tables
        directly, but it's currently included only in CGWin and isn't on any
        code path even on CGWin yet. Caller's side change for CGWin and
        support for other platforms will be in separate bugs.

        No new tests are required. No behavior changes.

        * WebCore.vcproj/WebCore.vcproj: Added OpenTypeTypes.h and OpenTypeVerticalData.h/cpp.
        * platform/SharedBuffer.cpp: Add create(size_t)
        (WebCore::SharedBuffer::SharedBuffer):
        (WebCore):
        * platform/SharedBuffer.h: Add create(size_t)
        (WebCore::SharedBuffer::create):
        (SharedBuffer):
        * platform/graphics/FontPlatformData.h: Added openTypeTable().
        (WebCore):
        (FontPlatformData):
        * platform/graphics/SimpleFontData.h: Added sizePerUnit().
        (WebCore::SimpleFontData::sizePerUnit): size() / unitsPerEm() for less multiplication.
        * platform/graphics/opentype/OpenTypeTypes.h: Added OpenType basic type definitions.
        (OpenType):
        (WebCore::OpenType::BigEndianShort::operator short):
        (WebCore::OpenType::BigEndianShort::BigEndianShort):
        (BigEndianShort):
        (WebCore::OpenType::BigEndianUShort::operator unsigned short):
        (WebCore::OpenType::BigEndianUShort::BigEndianUShort):
        (BigEndianUShort):
        (WebCore::OpenType::BigEndianLong::operator int):
        (WebCore::OpenType::BigEndianLong::BigEndianLong):
        (BigEndianLong):
        (WebCore::OpenType::BigEndianULong::operator unsigned):
        (WebCore::OpenType::BigEndianULong::BigEndianULong):
        (BigEndianULong):
        * platform/graphics/opentype/OpenTypeVerticalData.cpp: Added.
        (OpenType):
        (HheaTable):
        (VheaTable):
        (Entry):
        (VORGTable):
        (VertOriginYMetrics):
        (WebCore::OpenType::VORGTable::requiredSize):
        (WebCore):
        (WebCore::validatedPtr):
        (WebCore::OpenTypeVerticalData::OpenTypeVerticalData):
        (WebCore::OpenTypeVerticalData::advanceHeight): Advance height for a glyph.
        (WebCore::OpenTypeVerticalData::getVerticalTranslationsForGlyphs): Vertical origin.
        * platform/graphics/opentype/OpenTypeVerticalData.h: Added.
        (WebCore):
        (OpenTypeVerticalData): A new class to handle vertical flow data in OpenType.
        (WebCore::OpenTypeVerticalData::isOpenType):
        (WebCore::OpenTypeVerticalData::hasVerticalMetrics):
        (WebCore::OpenTypeVerticalData::hasVORG):
        * platform/graphics/win/FontPlatformDataWin.cpp:
        (WebCore):
        (WebCore::FontPlatformData::openTypeTable): Implemented openTypeTable() for Win32.

2012-03-29  Leo Yang  <leo.yang@torchmobile.com.cn>

        [BlackBerry] Sync up PlatformMouseEvent
        https://bugs.webkit.org/show_bug.cgi?id=82567

        Reviewed by Rob Buis.

        This patch is adding blackberry specific members to PlatformMouseEvent.
        Also re-base PlatformMouseEventBlackBerry to adapt to the re-factor
        of PlatformMouseEvent.

        * platform/PlatformMouseEvent.h:
        (PlatformMouseEvent): BlackBerry specific constructor.
        (WebCore::PlatformMouseEvent::inputMethod): Input source of mouse event
        for blackberry platform.
        * platform/blackberry/PlatformMouseEventBlackBerry.cpp:
        (WebCore::PlatformMouseEvent::PlatformMouseEvent): Re-base the constructor
        to adapt the re-factor of PlatformMouseEvent.

2012-03-29  Leo Yang  <leo.yang@torchmobile.com.cn>

        [BlackBerry] Turn on STORE_FONT_CUSTOM_PLATFORM_DATA in CachedFont.cpp
        https://bugs.webkit.org/show_bug.cgi?id=82573

        Reviewed by Rob Buis.

        Tests: covered by existing tests.

        * loader/cache/CachedFont.cpp:

2012-03-29  Adam Barth  <abarth@webkit.org>

        [Chromium] Attempt to fix the component build
        https://bugs.webkit.org/show_bug.cgi?id=82676

        Reviewed by Dirk Pranke.

        Now that we're implementing some of the WEBKIT_EXPORT symbols in
        WebCore/platform/chromium/support, we need to tell the build system
        that we want to actually export these symbols.

        * WebCore.gyp/WebCore.gyp:

2012-03-29  Adam Barth  <abarth@webkit.org>

        Unreviewed, rolling out r112572.
        http://trac.webkit.org/changeset/112572
        https://bugs.webkit.org/show_bug.cgi?id=82582

        Does not compile in Windows component build

        * WebCore.gyp/WebCore.gyp:
        * WebCore.gypi:

2012-03-29  Adam Barth  <abarth@webkit.org>

        Unreviewed, rolling out r112579.
        http://trac.webkit.org/changeset/112579
        https://bugs.webkit.org/show_bug.cgi?id=82657

        Does not compile in Windows component build

        * WebCore.gypi:

2012-03-29  Adam Barth  <abarth@webkit.org>

        Unreviewed, rolling out r112611.
        http://trac.webkit.org/changeset/112611
        https://bugs.webkit.org/show_bug.cgi?id=82676

        Does not compile in Windows component build

        * WebCore.gyp/WebCore.gyp:

2012-03-29  Bear Travis  <betravis@adobe.com>

        Update shape-inside/shape-outside CSS Exclusion properties
        https://bugs.webkit.org/show_bug.cgi?id=82365

        Reviewed by Ryosuke Niwa.

        Updating CSS property names for wrap-shape-inside and wrap-shape-outside
        to shape-inside and shape-outside, per the current exclusions spec.
        Renaming some parsing functions in CSSParser for clarity.
        No new functionality.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore):
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):
        (WebCore::CSSParser::parseClipShape):
        (WebCore::CSSParser::parseExclusionShapeRect):
        (WebCore::CSSParser::parseExclusionShapeCircle):
        (WebCore::CSSParser::parseExclusionShapeEllipse):
        (WebCore::CSSParser::parseExclusionShapePolygon):
        (WebCore::CSSParser::parseExclusionShape):
        * css/CSSParser.h:
        * css/CSSProperty.cpp:
        (WebCore::CSSProperty::isInheritedProperty):
        * css/CSSPropertyNames.in:
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::collectMatchingRulesForList):

2012-03-29  Ryan Sleevi  <rsleevi@chromium.org>

        [chromium] Update paths in GYP files
        https://bugs.webkit.org/show_bug.cgi?id=82663

        Reviewed by Adam Barth.

        * WebCore.gypi:
        Remove PluginDataGtk.cpp following r112401

2012-03-29  Abhishek Arya  <inferno@chromium.org>

        Crash in GenericEventQueue::~GenericEventQueue.
        https://bugs.webkit.org/show_bug.cgi?id=81976

        Reviewed by Eric Carlson.

        * dom/GenericEventQueue.cpp:
        (WebCore::GenericEventQueue::create):
        (WebCore):
        (WebCore::GenericEventQueue::GenericEventQueue):
        (WebCore::GenericEventQueue::enqueueEvent):
        (WebCore::GenericEventQueue::timerFired):
        * dom/GenericEventQueue.h:
        (GenericEventQueue):
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::HTMLMediaElement):
        (WebCore::HTMLMediaElement::scheduleEvent):
        (WebCore::HTMLMediaElement::updateActiveTextTrackCues):
        (WebCore::HTMLMediaElement::cancelPendingEventsAndCallbacks):
        (WebCore::HTMLMediaElement::hasPendingActivity):
        * html/HTMLMediaElement.h:
        (HTMLMediaElement):

2012-03-29  Adam Barth  <abarth@webkit.org>

        [Chromium] Attempt to fix the component build
        https://bugs.webkit.org/show_bug.cgi?id=82676

        Unreviewed.

        Now that we're implementing some of the WEBKIT_EXPORT symbols in
        WebCore/platform/chromium/support, we need to tell the build system
        that we want to actually export these symbols.

        * WebCore.gyp/WebCore.gyp:

2012-03-29  Nate Chapin  <japhet@chromium.org>

        Simplify reporting a main resource error to DocumentLoader and
        FrameLoader.
        https://bugs.webkit.org/show_bug.cgi?id=82649

        Reviewed by Adam Barth.

        No new tests, no functionality change intended.

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::mainReceivedError): Remove isComplete parameter,
            since it was always true. Call FrameLoader::receivedMainResourceError,
            instead of the other way around.
        * loader/DocumentLoader.h:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::receivedMainResourceError): Remove isComplete parameter,
            since it was always true. Merge in most of mainReceivedCompleteError().
        * loader/FrameLoader.h:
        * loader/MainResourceLoader.cpp:
        (WebCore::MainResourceLoader::receivedError):
        (WebCore::MainResourceLoader::didCancel):

2012-03-28  Jer Noble  <jer.noble@apple.com>

        Heap-use-after-free in WebCore::InlineFlowBox::deleteLine due to fullscreen issues.
        https://bugs.webkit.org/show_bug.cgi?id=82055

        Reviewed by David Hyatt.

        No new tests; fixes fuzz test crasher which is not reproducible in DRT or WKTR.

        When a RenderFullScreen object is inserted between a child and parent renderer, make sure the
        parent renderer deletes its line boxes by calling setNeedsLayoutAndPrefWidthsRecalc().  This
        forces its InlineBox renderers to be removed from the line boxes and their parents in the correct
        order, fixing a double-delete crash.

        The same is true when unwrapping the RenderFullScreen object, and when creating and inserting
        the full screen placeholder.

        * rendering/RenderFullScreen.cpp:
        (RenderFullScreen::wrapRenderer):
        (RenderFullScreen::unwrapRenderer):
        (RenderFullScreen::createPlaceholder):

2012-03-29  Benjamin Poulain  <bpoulain@apple.com>

        Get rid of Geolocation::positionChangedInternal(), use positionChanged() directly
        https://bugs.webkit.org/show_bug.cgi?id=82543

        Reviewed by Andreas Kling.

        After the change to client based geolocation, the method positionChangedInternal()
        is called only by positionChanged(). This patch remove this extra indirection.

        * Modules/geolocation/Geolocation.cpp:
        (WebCore::Geolocation::positionChanged):
        * Modules/geolocation/Geolocation.h:
        (Geolocation):
        * WebCore.order:

2012-03-29  Joseph Pecoraro  <pecoraro@apple.com>

        InputType attribute changed functions should happen after the attribute change
        https://bugs.webkit.org/show_bug.cgi?id=82644

        Reviewed by Benjamin Poulain.

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::parseAttribute):

2012-03-29  Bear Travis  <betravis@adobe.com>

        Update CSS Exclusion wrap-flow values left & right to start & end
        https://bugs.webkit.org/show_bug.cgi?id=82366

        http://dev.w3.org/csswg/css3-exclusions/
        -webkit-wrap-flow now takes the values start and end rather than
        left and right. Updating the code to reflect this. Functionality
        is covered by existing tests.
        
        Reviewed by Andreas Kling.

        * css/CSSParser.cpp:
        (WebCore::isValidKeywordPropertyAndValue):
        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        (WebCore::CSSPrimitiveValue::operator WrapFlow):
        * rendering/style/RenderStyleConstants.h:

2012-03-29  Dirk Pranke  <dpranke@chromium.org>

        rollout r112484, r112545, r112574
        https://bugs.webkit.org/show_bug.cgi?id=82662

        Unreviewed, build fix.

        this appears to be producing some questionable differences on
        the apple mac bots, and possibly one test on chromium linux.

        * css/mediaControls.css:
        (audio::-webkit-media-controls-panel, video::-webkit-media-controls-panel):
        * css/mediaControlsChromium.css:
        (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-volume-slider-container, video::-webkit-media-controls-volume-slider-container):
        * html/shadow/MediaControlElements.cpp:
        (RenderMediaVolumeSliderContainer):
        (WebCore):
        (WebCore::RenderMediaVolumeSliderContainer::RenderMediaVolumeSliderContainer):
        (WebCore::RenderMediaVolumeSliderContainer::layout):
        (WebCore::MediaControlVolumeSliderContainerElement::createRenderer):
        * html/shadow/MediaControlElements.h:
        (MediaControlVolumeSliderContainerElement):
        * html/shadow/MediaControlRootElementChromium.cpp:
        (WebCore::MediaControlRootElementChromium::create):

2012-03-29  Julien Chaffraix  <jchaffraix@webkit.org>

        REGRESSION (r110065-r110080): Content drawing outside overflow: hidden at ynet.co.il
        https://bugs.webkit.org/show_bug.cgi?id=82129

        Reviewed by Ojan Vafai.

        Tests: fast/overflow/before-after-overflow-hidden-horizontal-writing-mode-tb-expected.html
               fast/overflow/before-after-overflow-hidden-horizontal-writing-mode-tb.html
               fast/overflow/before-after-overflow-hidden-vertical-writing-mode-rl-expected.html
               fast/overflow/before-after-overflow-hidden-vertical-writing-mode-rl.html
               fast/overflow/start-end-overflow-hidden-horizontal-writing-mode-tb-expected.html
               fast/overflow/start-end-overflow-hidden-horizontal-writing-mode-tb.html
               fast/overflow/start-end-overflow-hidden-vertical-writing-mode-rl-expected.html
               fast/overflow/start-end-overflow-hidden-vertical-writing-mode-rl.html

        This is a regression from r110072. I wrongly thought we should call ensureLayer if we create our RenderOverflow.
        However the current overflow code removes the before and start overflows (like in horizontal writing mode with ltr direction,
        we never have a top or a left overflow). Because of that we would not get a RenderLayer as expected and the overflow clip rects
        would be wrong on our RenderLayer children.

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::addLayoutOverflow):
        Moved the ensureLayer() call after the check that we do have some overflow but before we remove the overflow in some directions.

2012-03-29  Adam Barth  <abarth@webkit.org>

        [Chromium] Move ResourceHandle to WebCore/platform/network/chromium
        https://bugs.webkit.org/show_bug.cgi?id=82657

        Reviewed by James Robinson.

        We finally arive at our destination. This patch actually moves
        WebCore::ResourceHandle from Source/WebKit/chromium/src to
        Source/WebCore/network/chromium, matching its location in other ports.
        To make this happen, we also need to move WrappedResourceRequest and
        WrappedResourceResponse.

        This patch is the last patch from
        https://github.com/abarth/webkit/compare/master...webcore-platform

        * WebCore.gypi:
        * platform/chromium/support/WrappedResourceRequest.h: Copied from Source/WebKit/chromium/src/WrappedResourceRequest.h.
        * platform/chromium/support/WrappedResourceResponse.h: Copied from Source/WebKit/chromium/src/WrappedResourceResponse.h.
        * platform/network/chromium/ResourceHandle.cpp: Copied from Source/WebKit/chromium/src/ResourceHandle.cpp.
        (WebCore::ResourceHandleInternal::ResourceHandleInternal):
        (WebCore::ResourceHandleInternal::start):
        (WebCore::ResourceHandle::loadResourceSynchronously):
        (WebCore::ResourceHandle::cacheMetadata):
        * platform/network/chromium/ResourceHandleInternal.h: Copied from Source/WebKit/chromium/src/ResourceHandleInternal.h.

2012-03-29  Patrick Gansterer  <paroga@webkit.org>

        Build fix for WinCE after r112555.

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

2012-03-29  Anders Carlsson  <andersca@apple.com>

        Images that reload via media queries don't paint when device scale factor changes
        https://bugs.webkit.org/show_bug.cgi?id=82648
        <rdar://problem/11143637>

        Reviewed by Beth Dakin.

        Commit scale factor changes before dirty rect changes, since setting the scale factor
        can lead to more rects being dirtied when using the tile cache.

        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::commitLayerChangesBeforeSublayers):

2012-03-29  Adam Barth  <abarth@webkit.org>

        Move CPP files related to ResourceHandle to WebCore/platform
        https://bugs.webkit.org/show_bug.cgi?id=82582

        Reviewed by James Robinson.

        This patch moves a number of files that implement parts of the platform
        portion of the Chromium WebKit API from the WebKit layer to
        WebCore/platform. These files are in the dependency cone of
        ResourceHandle and have no dependencies on anything outside
        WebCore/platform.

        * WebCore.gyp/WebCore.gyp:
        * WebCore.gypi:
        * platform/chromium/support: Added.
        * platform/chromium/support/WebData.cpp: Copied from Source/WebKit/chromium/src/WebData.cpp.
        * platform/chromium/support/WebHTTPBody.cpp: Copied from Source/WebKit/chromium/src/WebHTTPBody.cpp.
        * platform/chromium/support/WebHTTPLoadInfo.cpp: Copied from Source/WebKit/chromium/src/WebHTTPLoadInfo.cpp.
        * platform/chromium/support/WebURL.cpp: Copied from Source/WebKit/chromium/src/WebURL.cpp.
        * platform/chromium/support/WebURLError.cpp: Copied from Source/WebKit/chromium/src/WebURLError.cpp.
        * platform/chromium/support/WebURLRequest.cpp: Copied from Source/WebKit/chromium/src/WebURLRequest.cpp.
        * platform/chromium/support/WebURLRequestPrivate.h: Copied from Source/WebKit/chromium/src/WebURLRequestPrivate.h.
        * platform/chromium/support/WebURLResponse.cpp: Copied from Source/WebKit/chromium/src/WebURLResponse.cpp.
        * platform/chromium/support/WebURLResponsePrivate.h: Copied from Source/WebKit/chromium/src/WebURLResponsePrivate.h.

2012-03-29  Michal Mocny  <mmocny@google.com>

        [chromium] Ensure framebuffer exists at the start of beginDrawingFrame.
        https://bugs.webkit.org/show_bug.cgi?id=82569

        Reviewed by James Robinson.

        Updated LayerRendererChromiumTest unittests.

        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::setVisible):
        (WebCore::LayerRendererChromium::beginDrawingFrame):
        * platform/graphics/chromium/LayerRendererChromium.h:
        * platform/graphics/chromium/cc/CCSingleThreadProxy.cpp:
        (WebCore::CCSingleThreadProxy::compositeAndReadback):
        * platform/graphics/chromium/cc/CCThreadProxy.cpp:
        (WebCore::CCThreadProxy::compositeAndReadback):
        (WebCore::CCThreadProxy::requestReadbackOnImplThread):

2012-03-29  Ryosuke Niwa  <rniwa@webkit.org>

        Add a compile assert for the size of RenderBlock
        https://bugs.webkit.org/show_bug.cgi?id=82586

        Reviewed by Tony Chang.
        
        Add compile asserts for the size of RenderBlock and RenderBlock::MarginValues.
        We can't add asserts for FloatingObject and MarginInfo because they're private to RenderBlock.

        * rendering/RenderBlock.cpp:
        (SameSizeAsRenderBlock):
        (WebCore):
        (WebCore::RenderBlock::addOverflowFromFloats):
        (WebCore::RenderBlock::repaintOverhangingFloats):
        (WebCore::RenderBlock::paintFloats):
        (WebCore::RenderBlock::insertFloatingObject):
        (WebCore::RenderBlock::clearFloats):
        (WebCore::RenderBlock::addOverhangingFloats):
        (WebCore::RenderBlock::addIntrudingFloats):
        (WebCore::RenderBlock::hitTestFloats):
        (WebCore::RenderBlock::adjustForBorderFit):
        * rendering/RenderBlock.h:
        (WebCore::RenderBlock::FloatingObject::shouldPaint):
        (WebCore::RenderBlock::FloatingObject::setShouldPaint):
        (WebCore::RenderBlock::FloatingObject::isDescendant):
        (WebCore::RenderBlock::FloatingObject::setIsDescendant):
        (FloatingObject):
        (RenderBlock):

2012-03-29  Gavin Barraclough  <barraclough@apple.com>

        Template the Yarr::Interpreter on the character type
        https://bugs.webkit.org/show_bug.cgi?id=82637

        Reviewed by Sam Weinig.

        We should be able to call to the interpreter after having already checked the character type,
        without having to re-package the character pointer back up into a string!

        * inspector/ContentSearchUtils.cpp:
        (WebCore::ContentSearchUtils::findMagicComment):
        * platform/text/RegularExpression.cpp:
        (WebCore::RegularExpression::match):
            - Don't pass length.

2012-03-29  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r112553.
        http://trac.webkit.org/changeset/112553
        https://bugs.webkit.org/show_bug.cgi?id=82638

        It made all tests crash on Qt WK2 (Requested by Ossy_away on
        #webkit).

        * Modules/geolocation/Geolocation.cpp:
        (WebCore::Geolocation::stop):
        (WebCore::Geolocation::lastPosition):
        (WebCore::Geolocation::requestPermission):
        (WebCore::Geolocation::startUpdating):
        (WebCore::Geolocation::stopUpdating):
        * Modules/geolocation/Geolocation.h:
        (WebCore):
        * Modules/geolocation/GeolocationController.cpp:
        * Modules/geolocation/GeolocationController.h:
        * WebCore.exp.in:
        * page/GeolocationClient.h:
        (WebCore):
        (GeolocationClient):
        * page/Page.cpp:
        (WebCore::Page::Page):
        (WebCore::Page::PageClients::PageClients):
        * page/Page.h:
        (WebCore):
        (PageClients):
        (Page):
        (WebCore::Page::geolocationController):

2012-03-29  Caio Marcelo de Oliveira Filho  <caio.oliveira@openbossa.org>

        HashMap<>::add should return a more descriptive object
        https://bugs.webkit.org/show_bug.cgi?id=71063

        Reviewed by Ryosuke Niwa.

        Update code to use AddResult instead of a pair. No new tests, just a refactoring.

        * Modules/webdatabase/SQLTransactionCoordinator.cpp:
        (WebCore::SQLTransactionCoordinator::acquireLock):
        * Modules/webdatabase/chromium/QuotaTracker.cpp:
        (WebCore::QuotaTracker::updateDatabaseSize):
        * bindings/js/DOMObjectHashTableMap.h:
        (WebCore::DOMObjectHashTableMap::get):
        * bindings/js/JSDOMBinding.cpp:
        (WebCore::cacheDOMStructure):
        * bindings/js/JSDOMBinding.h:
        (WebCore::cacheWrapper):
        * bindings/js/JSDOMGlobalObject.h:
        (WebCore::getDOMConstructor):
        * bindings/js/PageScriptDebugServer.cpp:
        (WebCore::PageScriptDebugServer::addListener):
        * bindings/js/ScriptDebugServer.cpp:
        (WebCore::ScriptDebugServer::setBreakpoint):
        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::CloneSerializer::startObjectInternal):
        (WebCore::CloneSerializer::write):
        * bindings/v8/NPV8Object.cpp:
        (WebCore::npCreateV8ScriptObject):
        * bridge/IdentifierRep.cpp:
        (WebCore::IdentifierRep::get):
        * bridge/NP_jsobject.cpp:
        (ObjectMap::add):
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::logUnimplementedPropertyID):
        * css/CSSFontFaceSource.cpp:
        (WebCore::CSSFontFaceSource::getFontData):
        * css/CSSFontSelector.cpp:
        (WebCore::CSSFontSelector::addFontFaceRule):
        (WebCore::CSSFontSelector::getFontData):
        * css/CSSSegmentedFontFace.cpp:
        (WebCore::CSSSegmentedFontFace::getFontData):
        * css/CSSStyleApplyProperty.cpp:
        (WebCore::ApplyPropertyCounter::applyInheritValue):
        (WebCore::ApplyPropertyCounter::applyValue):
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::appendAuthorStylesheets):
        (WebCore::CSSStyleSelector::collectMatchingRulesForList):
        * css/CSSValuePool.cpp:
        (WebCore::CSSValuePool::createIdentifierValue):
        (WebCore::CSSValuePool::createColorValue):
        (WebCore::CSSValuePool::createValue):
        (WebCore::CSSValuePool::createFontFamilyValue):
        (WebCore::CSSValuePool::createFontFaceValue):
        * dom/CheckedRadioButtons.cpp:
        (WebCore::RadioButtonGroup::add):
        (WebCore::CheckedRadioButtons::addButton):
        * dom/ChildListMutationScope.cpp:
        (WebCore::ChildListMutationScope::MutationAccumulationRouter::incrementScopingLevel):
        * dom/Document.cpp:
        (WebCore::Document::windowNamedItems):
        (WebCore::Document::documentNamedItems):
        (WebCore::Document::getCSSCanvasElement):
        (WebCore::Document::getItems):
        * dom/DocumentEventQueue.cpp:
        (WebCore::DocumentEventQueue::enqueueEvent):
        (WebCore::DocumentEventQueue::enqueueOrDispatchScrollEvent):
        (WebCore::DocumentEventQueue::pendingEventTimerFired):
        * dom/DocumentOrderedMap.cpp:
        (WebCore::DocumentOrderedMap::add):
        * dom/EventListenerMap.cpp:
        (WebCore::EventListenerMap::add):
        * dom/Node.cpp:
        (WebCore::Node::dumpStatistics):
        (WebCore::Node::getElementsByTagName):
        (WebCore::Node::getElementsByTagNameNS):
        (WebCore::Node::getElementsByName):
        (WebCore::Node::getElementsByClassName):
        (WebCore::Node::collectMatchingObserversForMutation):
        * dom/QualifiedName.cpp:
        (WebCore::QualifiedName::init):
        * dom/SpaceSplitString.cpp:
        (WebCore::SpaceSplitStringData::create):
        * dom/StyledElement.cpp:
        (WebCore::StyledElement::updateAttributeStyle):
        * html/HTMLCollection.cpp:
        (WebCore::HTMLCollection::append):
        * inspector/DOMPatchSupport.cpp:
        (WebCore::DOMPatchSupport::diff):
        * inspector/InspectorCSSAgent.cpp:
        (WebCore::SelectorProfile::commitSelector):
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::performSearch):
        * inspector/InspectorDebuggerAgent.cpp:
        (WebCore::InspectorDebuggerAgent::resolveBreakpoint):
        * inspector/InspectorValues.h:
        (WebCore::InspectorObject::setValue):
        (WebCore::InspectorObject::setObject):
        (WebCore::InspectorObject::setArray):
        * loader/appcache/ApplicationCacheGroup.cpp:
        (WebCore::ApplicationCacheGroup::addEntry):
        * loader/appcache/ApplicationCacheStorage.cpp:
        (WebCore::ApplicationCacheStorage::findOrCreateCacheGroup):
        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleTouchEvent):
        * page/PageGroup.cpp:
        (WebCore::PageGroup::pageGroup):
        (WebCore::PageGroup::addVisitedLink):
        (WebCore::PageGroup::addUserScriptToWorld):
        (WebCore::PageGroup::addUserStyleSheetToWorld):
        * page/SecurityPolicy.cpp:
        (WebCore::SecurityPolicy::addOriginAccessWhitelistEntry):
        * page/TouchAdjustment.cpp:
        (WebCore::TouchAdjustment::compileSubtargetList):
        * platform/cf/BinaryPropertyList.cpp:
        (WebCore::BinaryPropertyListPlan::writeInteger):
        (WebCore::BinaryPropertyListPlan::writeString):
        (WebCore::BinaryPropertyListPlan::writeIntegerArray):
        * platform/graphics/blackberry/LayerTiler.cpp:
        (WebCore::LayerTiler::addTileJob):
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::findOrMakeClone):
        * platform/graphics/ca/mac/TileCache.mm:
        (WebCore::TileCache::revalidateTiles):
        * platform/graphics/ca/win/LayerChangesFlusher.cpp:
        (WebCore::LayerChangesFlusher::flushPendingLayerChangesSoon):
        * platform/graphics/chromium/FontUtilsChromiumWin.cpp:
        (WebCore::getDerivedFontData):
        * platform/graphics/chromium/cc/CCLayerAnimationController.cpp:
        (WebCore::CCLayerAnimationController::startAnimationsWaitingForTargetAvailability):
        * platform/graphics/mac/ComplexTextControllerATSUI.cpp:
        (WebCore::initializeATSUStyle):
        * platform/graphics/mac/SimpleFontDataCoreText.cpp:
        (WebCore::SimpleFontData::getCFStringAttributes):
        * platform/graphics/mac/SimpleFontDataMac.mm:
        (WebCore::SimpleFontData::canRenderCombiningCharacterSequence):
        * platform/graphics/wince/FontPlatformData.cpp:
        (WebCore::FixedSizeFontData::create):
        * platform/gtk/RenderThemeGtk3.cpp:
        (WebCore::getStyleContext):
        * platform/mac/ThreadCheck.mm:
        (WebCoreReportThreadViolation):
        * platform/network/HTTPHeaderMap.cpp:
        (WebCore::HTTPHeaderMap::add):
        * platform/network/HTTPHeaderMap.h:
        (HTTPHeaderMap):
        * platform/network/ResourceRequestBase.cpp:
        (WebCore::ResourceRequestBase::addHTTPHeaderField):
        * plugins/PluginDatabase.cpp:
        (WebCore::PluginDatabase::add):
        (WebCore::PluginDatabase::loadPersistentMetadataCache):
        * plugins/win/PluginDatabaseWin.cpp:
        (WebCore::PluginDatabase::getPluginPathsInDirectories):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::addPercentHeightDescendant):
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::setLogicalWidthForTextRun):
        * rendering/RenderNamedFlowThread.cpp:
        (WebCore::RenderNamedFlowThread::addDependencyOnFlowThread):
        * rendering/RenderRegion.cpp:
        (WebCore::RenderRegion::setRenderBoxRegionInfo):
        * rendering/svg/RenderSVGResourceGradient.cpp:
        (WebCore::RenderSVGResourceGradient::applyResource):
        * rendering/svg/RenderSVGResourcePattern.cpp:
        (WebCore::RenderSVGResourcePattern::applyResource):
        * storage/StorageMap.cpp:
        (WebCore::StorageMap::setItem):
        (WebCore::StorageMap::importItem):
        * svg/SVGDocumentExtensions.cpp:
        (WebCore::SVGDocumentExtensions::addPendingResource):
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::setRequestHeaderInternal):
        * xml/XPathFunctions.cpp:
        (WebCore::XPath::FunId::evaluate):
        * xml/XPathPath.cpp:
        (WebCore::XPath::LocationPath::evaluate):
        * xml/XPathPredicate.cpp:
        (WebCore::XPath::Union::evaluate):

2012-03-29  Andrey Kosyakov  <caseq@chromium.org>

        Web Inspector: improve window selection accuracy in vertical overview of timeline panel
        https://bugs.webkit.org/show_bug.cgi?id=82625

        Reviewed by Vsevolod Vlasov.

        * inspector/front-end/TimelineOverviewPane.js:
        (WebInspector.TimelineVerticalOverview):
        (WebInspector.TimelineVerticalOverview.prototype._renderBars): preserve actual padding used while rendering bars.
        (WebInspector.TimelineVerticalOverview.prototype.getWindowTimes): account for outer and inter-bars padding when calculating bar offsets.

2012-03-29  Mark Pilgrim  <pilgrim@chromium.org>

        GEOLOCATION should be implemented as Page Supplement
        https://bugs.webkit.org/show_bug.cgi?id=82228

        Reviewed by Adam Barth.

        Geolocation now uses the Supplement interface instead of
        keeping an instance variable on Page. This allows us to
        remove all geolocation-related functions, variables, and
        ifdefs out of Page and into Modules/geolocation/.

        * Modules/geolocation/Geolocation.cpp:
        (WebCore::Geolocation::stop):
        (WebCore::Geolocation::lastPosition):
        (WebCore::Geolocation::requestPermission):
        (WebCore::Geolocation::startUpdating):
        (WebCore::Geolocation::stopUpdating):
        * Modules/geolocation/Geolocation.h:
        (WebCore):
        * Modules/geolocation/GeolocationController.cpp:
        (WebCore::GeolocationController::supplementName):
        (WebCore):
        (WebCore::provideGeolocationTo):
        * Modules/geolocation/GeolocationController.h:
        (GeolocationController):
        (WebCore::GeolocationController::from):
        * WebCore.exp.in:
        * page/GeolocationClient.h:
        (WebCore):
        (GeolocationClient):
        * page/Page.cpp:
        (WebCore::Page::Page):
        (WebCore::Page::PageClients::PageClients):
        * page/Page.h:
        (WebCore):
        (PageClients):
        (Page):

2012-03-29  John Bates  <jbates@google.com>

        Sync up WebKit TraceEvent.h with chromium trace_event.h
        https://bugs.webkit.org/show_bug.cgi?id=82527

        Reviewed by James Robinson.

        * platform/chromium/TraceEvent.h:

2012-03-29  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: subtree disapears from <iframe> after loading
        https://bugs.webkit.org/show_bug.cgi?id=76552

        Reviewed by Yury Semikhatsky.

        The problem was that content document subtree was not unbound upon iframe re-push.
        Upon owner element refresh content document was not sent to the frontend
        since backend assumed that front-end has already had the up-to-date version.

        Test: inspector/elements/iframe-load-event.html

        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::loadEventFired):

2012-03-29  Dana Jansens  <danakj@chromium.org>

        [chromium] Remove unneeded code+fixmes from CCOcclusionTracker
        https://bugs.webkit.org/show_bug.cgi?id=82380

        Reviewed by Adrienne Walker.

        The current occlusion was exposed on the occlusion tracker for the
        transition over to culling 2.0 which has landed, so we can remove
        it now. It still had one use in unit tests which is moved to a
        test subclass.

        Above test subclass already existed in the occlusion tracker tests,
        so pulled it out to a common file CCOcclusionTrackerTestCommon.h
        so that other unit tests can use it to get at occlusion internals.

        * platform/graphics/chromium/cc/CCOcclusionTracker.cpp:
        (WebCore):
        * platform/graphics/chromium/cc/CCOcclusionTracker.h:

2012-03-29  Joseph Pecoraro  <pecoraro@apple.com>

        <http://webkit.org/b/82558> Toggling <input type="range"> readonly or disabled state while active breaks all click events

        Test: fast/forms/range/range-drag-when-toggled-disabled.html

        Reviewed by Kent Tamura.

        * html/shadow/SliderThumbElement.cpp:
        (WebCore::SliderThumbElement::defaultEventHandler):
        A slider can toggle its readonly or disabled state while in the middle
        of dragging, in those cases we should cancel the drag and perform cleanup.

2012-03-29  Adam Klein  <adamk@chromium.org>

        Factor out common post-insertion logic in ContainerNode
        https://bugs.webkit.org/show_bug.cgi?id=82544

        Reviewed by Ryosuke Niwa.

        appendChild, insertBefore, and replaceChild all share a great deal of logic.
        This patch factors out the "post-insertion" logic that deals with
        notifying parents that their children changed and notifying children
        that they've been added to the tree.

        Besides reducing code duplication, this is in preparation for moving
        this post-insertion notification later in the insertion process.

        No new tests, no change in behavior.

        * dom/ContainerNode.cpp:
        (WebCore):
        (WebCore::ContainerNode::insertBefore): Factor out shared logic, remove unnecessary "prev" variable.
        (WebCore::ContainerNode::replaceChild): ditto.
        (WebCore::ContainerNode::appendChild): ditto.
        (WebCore::updateTreeAfterInsertion): New helper method encapsulating shared logic.

2012-03-29  Tony Chang  <tony@chromium.org>

        Need to implement flex-line-pack
        https://bugs.webkit.org/show_bug.cgi?id=70794

        Reviewed by Ojan Vafai.

        Tests: css3/flexbox/multiline-line-pack-horizontal-column.html
               css3/flexbox/multiline-line-pack.html

        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::repositionLogicalHeightDependentFlexItems):
        (WebCore::initialLinePackingOffset): Similar to initialPackingOffset.
        (WebCore):
        (WebCore::linePackingSpaceBetweenChildren): Similar to packingSpaceBetweenChildren.
        (WebCore::RenderFlexibleBox::packFlexLines): Move lines based on flex-line-pack.
            Note that we don't need to relayout on stretch because
            alignChildren will do that for us (only auto size needs stretching).
        (WebCore::RenderFlexibleBox::flipForWrapReverse): Pull out the initial
            cross axis offset before calling packFlexLines because we can
            move the the line contexts.
        * rendering/RenderFlexibleBox.h:

2012-03-29  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: SnippetsScriptMapping should process existing snippets on load.
        https://bugs.webkit.org/show_bug.cgi?id=82619

        Reviewed by Pavel Feldman.

        SnippetsScriptMapping now loads existing snippets on creation.
        Otherwise scripts panel shows snippets created during current session only.
        Drive-by ScriptsNavigator closure compilation fix.

        * inspector/front-end/SnippetsModel.js:
        (WebInspector.SnippetsModel.prototype.set get snippets):
        (WebInspector.SnippetsScriptMapping):
        (WebInspector.SnippetsScriptMapping.prototype._handleSnippetAdded):
        (WebInspector.SnippetsScriptMapping.prototype._snippetAdded):

2012-03-29  Yury Semikhatsky  <yurys@chromium.org>

        Web Inspector: check more likely condition first in HeapSnapshot._buildAggregates
        https://bugs.webkit.org/show_bug.cgi?id=82621

        Reviewed by Pavel Feldman.

        * inspector/front-end/HeapSnapshot.js: selfSize === 0 is quite rare, moving this condition
        to the first place saves 1 of 6 secs on the heap profiler perf test.
        (WebInspector.HeapSnapshot.prototype._buildAggregates):
        (WebInspector.HeapSnapshot.prototype._buildDominatedNodes): root node is always the first
        one and is the only one that doesn't have dominator, so we may start iterating nodes from
        the second node and avoid additional check in the loop.

2012-03-29  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: "go to the previous panel" shortcut is painful to maintain
        https://bugs.webkit.org/show_bug.cgi?id=82602

        Reviewed by Vsevolod Vlasov.

        Present go to previous panel shortcut "Cmd - Left" is painful to support since we have
        more and more free flow editing capabilities (where Cmd - Left is handled by the editor).
        Remaping it to Cmd - Option - [ (]) /  (Ctrl - Alt - [ (]) ).

        Drive-by: de-capitalize captions from the settings panel.

        * English.lproj/localizedStrings.js:
        * inspector/front-end/ConsoleView.js:
        (WebInspector.ConsoleView.prototype._registerShortcuts):
        * inspector/front-end/InspectorView.js:
        (WebInspector.InspectorView.prototype._keyDown):
        * inspector/front-end/ScriptsPanel.js:
        * inspector/front-end/TimelinePanel.js:
        (WebInspector.TimelinePanel.prototype._registerShortcuts):
        (WebInspector.TimelinePanel.prototype._contextMenu):
        * inspector/front-end/inspector.js:
        (WebInspector._registerShortcuts):

2012-03-29  Andrey Kosyakov  <caseq@chromium.org>

        Unreviewed, rolling out r112531.
        http://trac.webkit.org/changeset/112531
        https://bugs.webkit.org/show_bug.cgi?id=82616

        Broke timeline overview selection

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

2012-03-28  Dirk Schulze  <krit@webkit.org>

        Introduce CSSParserMode in all classes
        https://bugs.webkit.org/show_bug.cgi?id=82335

        Reviewed by Ryosuke Niwa.

        Introduce the new CSSParserMode enum to more classes. SVG classes make use of SVGAttributeMode for CSS parsing already.
        But SVGAttributeMode does not differ from CSSQuirksMode at the moment. This will change with a followup patch on bug 46112.

        No new tests. No change of functionality. Everything gets covered by existing tests.

        * css/CSSImportRule.cpp:
        (WebCore::CSSImportRule::setCSSStyleSheet):
        * css/CSSMediaRule.cpp:
        (WebCore::CSSMediaRule::insertRule):
        * css/CSSParser.cpp: Move private functions away from strict boolean and make use of CSSParserMode instead.
        (WebCore):
        (WebCore::parseColorValue):
        (WebCore::parseSimpleLengthValue):
        (WebCore::CSSParser::parseFontFaceValue):
        (WebCore::CSSParser::parseValue):
        (WebCore::CSSParser::parseColor):
        (WebCore::CSSParser::createStyleRule):
        (WebCore::CSSParser::createFontFaceRule):
        (WebCore::CSSParser::createPageRule):
        (WebCore::CSSParser::createKeyframeRule):
        * css/CSSParser.h: Removed constructor with boolean argument. We just use the CSSParserMode enum now.
        (CSSParser):
        * css/CSSParserMode.h:
        (strictToCSSParserMode): New helper function to convert boolean to CSSParserMode.
        (isStrictParserMode): Helper function that returns true if argument is CSSStrictMode.
        * css/CSSRule.h:
        (WebCore::CSSRule::cssParserMode): Renamed useStrictParsing to cssParserMode since it returns CSSParserMode instead of a boolean now.
        * css/CSSStyleSheet.cpp:
        (WebCore::CSSStyleSheet::CSSStyleSheet):
        (WebCore::CSSStyleSheet::insertRule):
        (WebCore::CSSStyleSheet::parseString):
        (WebCore::CSSStyleSheet::parseStringAtLine):
        * css/CSSStyleSheet.h:
        (CSSStyleSheet):
        (WebCore::CSSStyleSheet::setCSSParserMode): Renamed setStrictParsing to setCSSParserMode since we set an enum now.
        (WebCore::CSSStyleSheet::cssParserMode): Renamed useStrictParsing to cssParserMode since it returns CSSParserMode instead of a boolean now.
        * css/MediaList.cpp:
        (WebCore::MediaQuerySet::parse):
        (WebCore::MediaQuerySet::add):
        (WebCore::MediaQuerySet::remove):
        * css/StylePropertySet.cpp:
        (WebCore::StylePropertySet::StylePropertySet):
        (WebCore::StylePropertySet::setProperty):
        (WebCore::StylePropertySet::parseDeclaration):
        * css/StylePropertySet.h: Use unsigned member variables to store the parser mode.  
        (WebCore::StylePropertySet::create):
        (WebCore::StylePropertySet::setCSSParserMode): Renamed setStrictParsing to setCSSParserMode since we get an enum now. This gets converted to unsigned internally.
        (WebCore::StylePropertySet::cssParserMode): Renamed useStrictParsing to cssParserMode since it returns CSSParserMode instead of a boolean now.
        (StylePropertySet):
        * css/StyleSheet.h:
        (StyleSheet):
        * css/WebKitCSSKeyframesRule.cpp:
        (WebCore::WebKitCSSKeyframesRule::insertRule):
        * css/WebKitCSSMatrix.cpp:
        (WebCore::WebKitCSSMatrix::setMatrixValue):
        * dom/Document.cpp:
        (WebCore::Document::webkitGetFlowByName):
        (WebCore::Document::pageUserSheet):
        (WebCore::Document::pageGroupUserSheets):
        * dom/Element.cpp:
        (WebCore::Element::webkitMatchesSelector):
        * dom/ElementAttributeData.cpp:
        (WebCore::ElementAttributeData::ensureInlineStyle):
        (WebCore::ElementAttributeData::ensureMutableInlineStyle):
        (WebCore::ElementAttributeData::updateInlineStyleAvoidingMutation):
        * dom/Node.cpp:
        (WebCore::Node::querySelector):
        (WebCore::Node::querySelectorAll):
        * dom/ProcessingInstruction.cpp:
        (WebCore::ProcessingInstruction::parseStyleSheet):
        * dom/StyleElement.cpp:
        (WebCore::StyleElement::createSheet):
        * html/HTMLElement.cpp:
        (WebCore::StyledElement::copyNonAttributeProperties):
        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::setCSSStyleSheet):
        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::setFont):
        * html/shadow/ContentSelectorQuery.cpp:
        (WebCore::ContentSelectorQuery::ContentSelectorQuery):
        * inspector/InspectorStyleSheet.cpp:
        (WebCore::InspectorStyleSheet::reparseStyleSheet):
        * svg/SVGElementRareData.h:
        (WebCore::SVGElementRareData::ensureAnimatedSMILStyleProperties):
        * svg/SVGFontFaceElement.cpp:
        (WebCore::SVGFontFaceElement::SVGFontFaceElement):
        * svg/SVGStyledElement.cpp:
        (WebCore::SVGStyledElement::getPresentationAttribute):
        * xml/XSLStyleSheet.h:
        (XSLStyleSheet):
        * xml/XSLStyleSheetLibxslt.cpp:
        (WebCore::XSLStyleSheet::parseString):
        * xml/XSLStyleSheetQt.cpp:
        (WebCore::XSLStyleSheet::parseString):

2012-03-29  Sanghyun Park  <sh919.park@samsung.com>

        Fix the error type in JSAudioBufferSourceNodeCustom to pass layout test.
        https://bugs.webkit.org/show_bug.cgi?id=81639

        Reviewed by Eric Carlson.

        Test : LayoutTest/webaudio/audiobuffersource-channels.html

        * bindings/js/JSAudioBufferSourceNodeCustom.cpp:

2012-03-29  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Existing UISourceCode should be loaded on scripts panel creation/reset.
        https://bugs.webkit.org/show_bug.cgi?id=82614

        Reviewed by Pavel Feldman.

        UISourceCode are now loaded from DebuggerPresentationModel on scripts panel creation/reset.
        This is needed to show snippets that are loaded before scripts panel creation and are not removed on navigation.

        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype._handleUISourceCodeAdded):
        (WebInspector.ScriptsPanel.prototype._loadUISourceCodes):
        (WebInspector.ScriptsPanel.prototype._uiSourceCodeAdded):
        (WebInspector.ScriptsPanel.prototype._reset):
        * inspector/front-end/SnippetsModel.js:
        (WebInspector.SnippetsScriptMapping.prototype.uiSourceCodeList):

2012-03-29  Andrey Kosyakov  <caseq@chromium.org>

        Web Inspector: on a single click in Timeline overview, make a minimal selection centered around cursor
        https://bugs.webkit.org/show_bug.cgi?id=82616

        Reviewed by Pavel Feldman.

        * inspector/front-end/TimelineOverviewPane.js:
        (WebInspector.TimelineOverviewWindow): Explicitly handle single click on overview by creating a minimal window around cursor.
        (WebInspector.TimelineOverviewWindow.prototype._resizeWindowMinimum):

2012-03-29  Víctor Manuel Jáquez Leal  <vjaquez@igalia.com>

        Unavailable pre-processor macro in non-Qt environments
        https://bugs.webkit.org/show_bug.cgi?id=82042

        Reviewed by Simon Hausmann.

        This patch removes the use of the macro QT_VERSION_CHECK() because, in
        non-Qt environments, the pre-processors raises an error. Instead of
        calling the macro to generate the version number, the version is
        expressed directly.

        * platform/graphics/texmap/TextureMapperGL.cpp:
        (SharedGLData): remove pre-processor macro for Qt version check.

2012-03-29  Andrey Kosyakov  <caseq@chromium.org>

        Web Inspector: event details popover in Timeline panel displays invalid time offset
        https://bugs.webkit.org/show_bug.cgi?id=82611

        Reviewed by Pavel Feldman.

        * inspector/front-end/TimelinePresentationModel.js:
        (WebInspector.TimelinePresentationModel.prototype.addRecord): use time in seconds, not raw model time for minimumRecordTime.

2012-03-29  Andrey Kosyakov  <caseq@chromium.org>

        Web Inspector: use canvas to render bars in "vertical overview" mode
        https://bugs.webkit.org/show_bug.cgi?id=82606

        Reviewed by Pavel Feldman.

        * inspector/front-end/TimelineOverviewPane.js: Use canvas instead of DOM for rendering vertical overview bars.
        (WebInspector.TimelineVerticalOverview):
        (WebInspector.TimelineVerticalOverview.prototype.update):
        (WebInspector.TimelineVerticalOverview.prototype._renderBars):
        (WebInspector.TimelineVerticalOverview.prototype._renderBar):
        (WebInspector.TimelineVerticalOverview.prototype.getWindowTimes):
        * inspector/front-end/timelinePanel.css: Drop styles previously used for DOM-based vertical overview rendering.
        (.timeline-vertical-overview-bars):

2012-03-29  Andrey Kosyakov  <caseq@chromium.org>

        Web Inspector: timeline overview window selection is not reset upon clear/record
        https://bugs.webkit.org/show_bug.cgi?id=82603

        Reviewed by Pavel Feldman.

        - TimelineOverviewPane.reset() -> _reset();
        - perform update() from reset();
        - perform reset() upon RecordsCleared event from the model.

        * inspector/front-end/TimelineOverviewPane.js:
        (WebInspector.TimelineOverviewPane):
        (WebInspector.TimelineOverviewPane.prototype._reset):
        (WebInspector.TimelineVerticalOverview):
        (WebInspector.TimelineVerticalOverview.prototype.update):
        (WebInspector.TimelineVerticalOverview.prototype._renderBars):
        (WebInspector.TimelineVerticalOverview.prototype._renderBar):
        (WebInspector.TimelineVerticalOverview.prototype.getWindowTimes):
        * inspector/front-end/timelinePanel.css:
        (.timeline-vertical-overview-bars):

2012-03-29  Zalan Bujtas  <zbujtas@gmail.com>

        Remove redundant updateViewportArguments() call when page is restored from page cache.
        https://bugs.webkit.org/show_bug.cgi?id=82500

        Reviewed by Kenneth Rohde Christiansen.

        Document::updateViewportArguments() is called twice, while restoring a page from page cache.
        First, it is called when the document is set on the mainframe and later, it is called
        when page cache finished the restoration. Since viewport arguments don't change between
        the 2 calls, it's safe to remove the second.

        Manual test added. Viewport value updates heavily depend on UI process code.

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

2012-03-29  Charles Wei  <charles.wei@torchmobile.com.cn>

        [BlackBerry] Add Internal test support for blackberry porting.
        https://bugs.webkit.org/show_bug.cgi?id=82597

        Reviewed by Rob Buis.

        No new tests, just the build system enhancement for BlackBerry porting.

        * UseJSC.cmake:

2012-03-28  Yury Semikhatsky  <yurys@chromium.org>

        Web Inspector: switch heap profiler front-end to separate storage of nodes and edges
        https://bugs.webkit.org/show_bug.cgi?id=82453

        When heap snapshot is completely loaded move nodes and containment edges
        into two separate arrays. This way we don't need _nodeIndex and _nodePosition
        maps to go from node offset inside the raw snapshot to its index and back, instead
        we may just divide node offset by the number of node fields to get node index. After
        the nodes and containment edges are separated original array (_nodes) is dropped.
        All front-end code was switched to the new representation.

        Reviewed by Pavel Feldman.

        * inspector/front-end/HeapSnapshot.js:
        (WebInspector.HeapSnapshotRetainerEdge):
        (WebInspector.HeapSnapshotRetainerEdge.prototype.clone):
        (WebInspector.HeapSnapshotRetainerEdge.prototype.set edgeIndex):
        (WebInspector.HeapSnapshotRetainerEdge.prototype.get _edge):
        (WebInspector.HeapSnapshotRetainerEdgeIterator.prototype.hasNext):
        (WebInspector.HeapSnapshotNode.prototype.get edgesCount):
        (WebInspector.HeapSnapshotNode.prototype.get rawEdges):
        (WebInspector.HeapSnapshotNode.prototype.get retainers):
        (WebInspector.HeapSnapshotNode.prototype.get _nodes):
        (WebInspector.HeapSnapshotNode.prototype._firstEdgeIndex):
        (WebInspector.HeapSnapshotNode.prototype._afterLastEdgeIndex):
        (WebInspector.HeapSnapshotNode.prototype.get _nextNodeIndex):
        (WebInspector.HeapSnapshot.prototype._init):
        (WebInspector.HeapSnapshot.prototype._splitNodesAndContainmentEdges):
        (WebInspector.HeapSnapshot.prototype._createOnlyNodesArray):
        (WebInspector.HeapSnapshot.prototype._createContainmentEdgesArray):
        (WebInspector.HeapSnapshot.prototype._buildRetainers):
        (WebInspector.HeapSnapshot.prototype.dispose):
        (WebInspector.HeapSnapshot.prototype.get maxNodeId):
        (WebInspector.HeapSnapshot.prototype._calculateObjectToWindowDistance):
        (WebInspector.HeapSnapshot.prototype._bfs):
        (WebInspector.HeapSnapshot.prototype._buildDominatedNodes):
        (WebInspector.HeapSnapshot.prototype._getDominatedIndex):
        (WebInspector.HeapSnapshot.prototype._markInvisibleEdges):
        (WebInspector.HeapSnapshot.prototype._markQueriableHeapObjects):

2012-03-29  Leo Yang  <leo.yang@torchmobile.com.cn>

        [BlackBerry] Add m_targetType to WorkerScriptLoader
        https://bugs.webkit.org/show_bug.cgi?id=82574

        Reviewed by Rob Buis.

        Just as Chromium porting blackberry porting is using m_targetType also.

        * workers/WorkerScriptLoader.h:
        (WorkerScriptLoader):

2012-03-29  Robin Cao  <robin.cao@torchmobile.com.cn>

        [BlackBerry] Add an empty implementation of GraphicsContext3D::setErrorMessageCallback
        https://bugs.webkit.org/show_bug.cgi?id=82570

        Reviewed by Rob Buis.

        No new tests, no change in functionality.

        * platform/graphics/blackberry/GraphicsContext3DBlackBerry.cpp:
        (WebCore::GraphicsContext3D::setErrorMessageCallback): Add an empty implementation.
        (WebCore):

2012-03-29  Robin Cao  <robin.cao@torchmobile.com.cn>

        [BlackBerry] Clean up ImageBufferData
        https://bugs.webkit.org/show_bug.cgi?id=82444

        Reviewed by Rob Buis.

        No behavior changes, no new tests.

        * platform/graphics/blackberry/skia/ImageBufferDataSkia.h:
        (ImageBufferData): Remove unused member variable m_buffer and change the type
        of m_platformLayer from LayerWebKitThread to CanvasLayerWebKitThread.

2012-03-28  Antti Koivisto  <antti@apple.com>

        Split WebKitCSSKeyframeRule into internal and CSSOM types 
        https://bugs.webkit.org/show_bug.cgi?id=82490 

        Reviewed by Andreas Kling.

        WebKitCSSKeyframeRule is a CSSOM type and should not be used internally.
        
        - Add StyleKeyframe as the internal data structure for keyframes.
        - WebKitCSSKeyframeRule becomes a wrapper for StyleKeyframe.
        - Use StyleKeyframe internally so WebKitCSSKeyframeRules are created on CSSOM access only.

        * css/CSSGrammar.y:
        
            Use StyleKeyframes instead of WebKitCSSKeyframeRules.
        
        * css/CSSMediaRule.h:
        (CSSMediaRule):
        (WebCore::CSSMediaRule::length):
        (WebCore::CSSMediaRule::item):
        
            Adapt to LiveCSSRuleList changes.
        
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseKeyframeRule):
        (WebCore::CSSParser::createKeyframe):
        * css/CSSParser.h:        
        (WebCore):
        (CSSParser):
        
            Construct StyleKeyframes.
        
        * css/CSSRuleList.h:
        (WebCore::LiveCSSRuleList::length):
        (WebCore::LiveCSSRuleList::item):

            Make LiveCSSRuleList call rule item()/length() to avoid accessor duplication.
    
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::collectMatchingRulesForList):
        * css/CSSStyleSelector.h:
        (CSSStyleSelector):
        * css/WebKitCSSKeyframeRule.cpp:
        
            Use StyleKeyframe.
            Make 0% and 100% keyframes static.
        
        (WebCore):
        (WebCore::StyleKeyframe::setProperties):
        (WebCore::StyleKeyframe::parseKeyString):
        (WebCore::StyleKeyframe::cssText):
        (WebCore::WebKitCSSKeyframeRule::WebKitCSSKeyframeRule):
        (WebCore::WebKitCSSKeyframeRule::~WebKitCSSKeyframeRule):
        (WebCore::WebKitCSSKeyframeRule::style):
        * css/WebKitCSSKeyframeRule.h:
        (WebCore):
        (WebCore::StyleKeyframe::create):
        (WebCore::StyleKeyframe::keyText):
        (WebCore::StyleKeyframe::setKeyText):
        (StyleKeyframe):
        (WebCore::StyleKeyframe::properties):
        (WebCore::StyleKeyframe::StyleKeyframe):
        (WebKitCSSKeyframeRule):
        (WebCore::WebKitCSSKeyframeRule::keyText):
        (WebCore::WebKitCSSKeyframeRule::setKeyText):
        (WebCore::WebKitCSSKeyframeRule::cssText):
        
            Split to internal and CSSOM wrapper type. The wrapper refs StyleKeyframe. 
        
        * css/WebKitCSSKeyframesRule.cpp:
        (WebCore::WebKitCSSKeyframesRule::~WebKitCSSKeyframesRule):
        (WebCore::WebKitCSSKeyframesRule::parserAppendKeyframe):
        (WebCore::WebKitCSSKeyframesRule::insertRule):
        (WebCore::WebKitCSSKeyframesRule::deleteRule):
        (WebCore::WebKitCSSKeyframesRule::findRule):
        (WebCore::WebKitCSSKeyframesRule::findKeyframeIndex):
        (WebCore::WebKitCSSKeyframesRule::cssText):
        (WebCore):
        (WebCore::WebKitCSSKeyframesRule::item):
        * css/WebKitCSSKeyframesRule.h:
        (WebCore):
        (WebCore::WebKitCSSKeyframesRule::keyframes):
        (WebKitCSSKeyframesRule):
        (WebCore::WebKitCSSKeyframesRule::length):
        
            Keep StyleKeyframes and the wrappers (WebKitCSSKeyframeRules) in separate vectors.
            Construct the wrapper vector and wrappers themselves on demand.
            Keep the vectors in sync during mutations.
        
        * css/WebKitCSSRegionRule.h:
        
            Adapt to LiveCSSRuleList changes.

2012-03-29  Zeno Albisser  <zeno@webkit.org>

        Fieldset disabled attribute does not work.
        https://bugs.webkit.org/show_bug.cgi?id=58837

        Make HTMLFormControlElements inherit the disabled state
        from HTMLFieldSetElement ancestors. Subordinates of the
        first HTMLLegendElement in a fieldset will never be disabled.

        Patch by Zeno Albisser <zeno@webkit.org>

        Test: fast/forms/fieldset-disabled.html

        Reviewed by Kent Tamura.

        * html/HTMLFieldSetElement.cpp:
        (WebCore::HTMLFieldSetElement::disabledAttributeChanged):
        (WebCore):
        (WebCore::HTMLFieldSetElement::legend):
        * html/HTMLFieldSetElement.h:
        (HTMLFieldSetElement):
        * html/HTMLFieldSetElement.idl:
        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLFormControlElement::HTMLFormControlElement):
        (WebCore::HTMLFormControlElement::updateFieldSetAndLegendAncestor):
        (WebCore):
        (WebCore::HTMLFormControlElement::parseAttribute):
        (WebCore::HTMLFormControlElement::disabledAttributeChanged):
        (WebCore::HTMLFormControlElement::removedFromTree):
        (WebCore::HTMLFormControlElement::disabled):
        * html/HTMLFormControlElement.h:
        (WebCore):
        (HTMLFormControlElement):

2012-03-29  Tommy Widenflycht  <tommyw@google.com>

        MediaStream API: Adding two missing release() calls to PeerConnection00.cpp
        https://bugs.webkit.org/show_bug.cgi?id=82584

        Reviewed by Adam Barth.

        No changes that affects functionality.

        * Modules/mediastream/PeerConnection00.cpp:
        (WebCore::PeerConnection00::createOffer):
        (WebCore::PeerConnection00::createAnswer):

2012-03-29  Ryosuke Niwa  <rniwa@webkit.org>

        Pack bitfields in InlineBox for Windows
        https://bugs.webkit.org/show_bug.cgi?id=82578

        Reviewed by Kent Tamura.

        Unlike gcc and clang, MSVC pads each consecutive member variables of the same type in bitfields. e.g. if you have:
        sturct AB {
        unsigned m_1 : 31;
        bool m_2 : 1;
        }
        then MSVC pads m_1 and allocates sizeof(unsigned) * 2 for AB whereas gcc and clang only allocate
        sizeof(unsigned) * 1 for AB.

        Fixed the bug by packing all bitfields in InlineBox into InlineBoxBitfields and always using either unsigned or int.

        * rendering/EllipsisBox.cpp:
        (WebCore::EllipsisBox::paint):
        (WebCore::EllipsisBox::selectionRect):
        (WebCore::EllipsisBox::nodeAtPoint):
        * rendering/InlineBox.cpp:
        (WebCore):
        (SameSizeAsInlineBox):
        (WebCore::InlineBox::logicalHeight):
        (WebCore::InlineBox::baselinePosition): Moved from the header file since it's a virtual function.
        (WebCore::InlineBox::lineHeight): Ditto.
        (WebCore::InlineBox::deleteLine):
        (WebCore::InlineBox::extractLine):
        (WebCore::InlineBox::attachLine):
        (WebCore::InlineBox::nextOnLineExists):
        (WebCore::InlineBox::clearKnownToHaveNoOverflow):
        * rendering/InlineBox.h:
        (WebCore::InlineBox::InlineBox):
        (WebCore::InlineBox::isText):
        (WebCore::InlineBox::setIsText):
        (WebCore::InlineBox::hasVirtualLogicalHeight):
        (WebCore::InlineBox::setHasVirtualLogicalHeight):
        (WebCore::InlineBox::isHorizontal):
        (WebCore::InlineBox::setIsHorizontal):
        (WebCore::InlineBox::isConstructed):
        (WebCore::InlineBox::setConstructed):
        (WebCore::InlineBox::setExtracted):
        (WebCore::InlineBox::setFirstLineStyleBit):
        (WebCore::InlineBox::isFirstLineStyle):
        (InlineBox):
        (WebCore::InlineBox::bidiLevel):
        (WebCore::InlineBox::setBidiLevel):
        (WebCore::InlineBox::direction):
        (WebCore::InlineBox::isDirty):
        (WebCore::InlineBox::markDirty):
        (WebCore::InlineBox::expansion):
        (WebCore::InlineBox::verticalAlign):
        (WebCore::InlineBox::knownToHaveNoOverflow):
        (WebCore::InlineBox::dirOverride):
        (WebCore::InlineBox::setDirOverride):
        (InlineBoxBitfields):
        (WebCore::InlineBox::InlineBoxBitfields::InlineBoxBitfields):
        (WebCore::InlineBox::InlineBoxBitfields::bidiEmbeddingLevel):
        (WebCore::InlineBox::InlineBoxBitfields::setBidiEmbeddingLevel):
        (WebCore::InlineBox::InlineBoxBitfields::determinedIfNextOnLineExists):
        (WebCore::InlineBox::InlineBoxBitfields::setDeterminedIfNextOnLineExists):
        (WebCore::InlineBox::InlineBoxBitfields::nextOnLineExists):
        (WebCore::InlineBox::InlineBoxBitfields::setNextOnLineExists):
        (WebCore::InlineBox::InlineBoxBitfields::expansion):
        (WebCore::InlineBox::InlineBoxBitfields::setExpansion):
        (WebCore::InlineBox::endsWithBreak):
        (WebCore::InlineBox::setEndsWithBreak):
        (WebCore::InlineBox::hasEllipsisBox):
        (WebCore::InlineBox::hasSelectedChildren):
        (WebCore::InlineBox::setHasSelectedChildren):
        (WebCore::InlineBox::setHasEllipsisBox):
        (WebCore::InlineBox::hasHyphen):
        (WebCore::InlineBox::setHasHyphen):
        (WebCore::InlineBox::canHaveLeadingExpansion):
        (WebCore::InlineBox::setCanHaveLeadingExpansion):
        (WebCore::InlineBox::setExpansion):
        (WebCore::InlineBox::extracted):
        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::addToLine):
        (WebCore::InlineFlowBox::removeChild):
        (WebCore::InlineFlowBox::extractLine):
        (WebCore::InlineFlowBox::attachLine):
        (WebCore::InlineFlowBox::placeBoxesInInlineDirection):
        (WebCore::InlineFlowBox::requiresIdeographicBaseline):
        (WebCore::InlineFlowBox::placeBoxesInBlockDirection):
        (WebCore::InlineFlowBox::addBoxShadowVisualOverflow):
        (WebCore::InlineFlowBox::addBorderOutsetVisualOverflow):
        (WebCore::InlineFlowBox::addTextBoxVisualOverflow):
        (WebCore::InlineFlowBox::paintBoxDecorations):
        (WebCore::InlineFlowBox::computeOverAnnotationAdjustment):
        (WebCore::InlineFlowBox::computeUnderAnnotationAdjustment):
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::destroy):
        (WebCore::InlineTextBox::logicalOverflowRect):
        (WebCore::InlineTextBox::setLogicalOverflowRect):
        (WebCore::InlineTextBox::baselinePosition):
        (WebCore::InlineTextBox::lineHeight):
        (WebCore::InlineTextBox::localSelectionRect):
        (WebCore::InlineTextBox::extractLine):
        (WebCore::InlineTextBox::attachLine):
        (WebCore::InlineTextBox::placeEllipsisBox):
        (WebCore::InlineTextBox::paint):
        (WebCore::InlineTextBox::paintDecoration):
        (WebCore::InlineTextBox::paintSpellingOrGrammarMarker):
        (WebCore::InlineTextBox::paintCompositionUnderline):
        (WebCore::InlineTextBox::offsetForPosition):
        (WebCore::InlineTextBox::positionForOffset):
        (WebCore::InlineTextBox::constructTextRun):
        * rendering/InlineTextBox.h:
        (InlineTextBox):
        (WebCore::InlineTextBox::setExpansion):
        (WebCore::InlineTextBox::expansionBehavior):
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::constructLine):
        * rendering/RenderTreeAsText.cpp:
        (WebCore::writeTextRun):
        * rendering/RootInlineBox.cpp:
        (WebCore::RootInlineBox::baselinePosition): Moved from the header file since it's a virtual function.
        (WebCore::RootInlineBox::lineHeight): Ditto.
        (WebCore::RootInlineBox::paint):
        (WebCore::RootInlineBox::ascentAndDescentForBox):
        (WebCore::RootInlineBox::verticalPositionForBox):
        * rendering/RootInlineBox.h:
        (RootInlineBox):
        * rendering/svg/SVGInlineTextBox.cpp:
        (WebCore::SVGInlineTextBox::constructTextRun):
        * rendering/svg/SVGRenderTreeAsText.cpp:
        (WebCore::writeSVGInlineTextBox):

2012-03-29  hayato@chromium.org  <hayato@chromium.org>

        Let focus navigation be compliant with Shadow DOM spec.
        https://bugs.webkit.org/show_bug.cgi?id=78588

        Reviewed by Dimitri Glazkov.

        Re-landing r112500. Fixed an assertion failure on ReifiedTreeTraversal.

        Sequential focus navigation now behaves exactly as specified in the Shadow DOM spec.

        According to the Shadow DOM spec:
        The shadow DOM navigation order sequence is inserted into the document navigation order:
        1. immediately after the shadow host, if the shadow host is focusable; or
        2. in place of the shadow host as if the shadow host were assigned the value of auto for determining its position.

        Prior to this patch, sequential focus navigation goes into Shadow DOM, but it is incomplete
        since insertion points, such as <content> elements or <shadow> elements, are not resolved at all.
        Now focus navigation can traverse shadow DOM subtrees in 'reified tree order', resolving lower boundaries transparently.

        Implementation notes:
        Prior to this patch, sequential focus navigation does not go into Shadow DOM if a shadow host is non-focusable.
        Now focus navigation must go into Shadow DOM subtrees even if a show host is not focusable as described in 2).
        To support this behavior, this patch introduced adjustedTabIndex() locally in FocusController so that
        it does not skip a non-focusable shadow host in current focus scope.
        After finding a *pseudo* focusable element in current focus scope, it tries to resolve a focused element recursively,
        considering a nested focus scope inside of a shadow host or iframe.
        To traverse Shadow DOM subtrees, a FocusController makes use of ReifiedTreeTraversal APIs, which was introduced in r112055.

        This change does not affect an existing behavior if a shadow dom is not involved.

        Test: fast/dom/shadow/focus-navigation.html

        * dom/Element.cpp:
        (WebCore::Element::focus):
        * dom/ReifiedTreeTraversal.cpp:
        (WebCore::ReifiedTreeTraversal::parentNodeWithoutCrossingUpperBoundary):
        * page/FocusController.cpp:
        (WebCore::isShadowHost):
        (WebCore):
        (WebCore::FocusScope::FocusScope):
        (WebCore::FocusScope::rootNode):
        (WebCore::FocusScope::owner):
        (WebCore::FocusScope::focusScopeOf):
        (WebCore::FocusScope::focusScopeOwnedByShadowHost):
        (WebCore::FocusScope::focusScopeOwnedByIFrame):
        (WebCore::hasCustomFocusLogic):
        (WebCore::isNonFocusableShadowHost):
        (WebCore::isFocusableShadowHost):
        (WebCore::adjustedTabIndex):
        (WebCore::shouldVisit):
        (WebCore::FocusController::findFocusableNodeDecendingDownIntoFrameDocument):
        (WebCore::FocusController::advanceFocusInDocumentOrder):
        (WebCore::FocusController::findFocusableNodeAcrossFocusScope):
        (WebCore::FocusController::findFocusableNodeRecursively):
        (WebCore::FocusController::findFocusableNode):
        (WebCore::FocusController::findNodeWithExactTabIndex):
        (WebCore::nextNodeWithGreaterTabIndex):
        (WebCore::previousNodeWithLowerTabIndex):
        (WebCore::FocusController::nextFocusableNode):
        (WebCore::FocusController::previousFocusableNode):
        * page/FocusController.h:
        (WebCore):
        (FocusScope):
        (FocusController):

2012-03-28  Kinuko Yasuda  <kinuko@chromium.org>

        [chromium] Add isolated filesystem type and WebDragData::filesystem_id for drag-and-drop using File/DirectoryEntry.
        https://bugs.webkit.org/show_bug.cgi?id=76826

        Add two helper methods for creating isolated filesystem to the
        PlatformSupport interface.

        Reviewed by David Levin.

        No new tests: tests will be added when app-facing code is added.

        * platform/chromium/PlatformSupport.h:
        (PlatformSupport):

2012-03-29  Vineet Chaudhary  <rgf748@motorola.com>

        Remove custom bindings form Internals.idl of attribute type Array.
        https://bugs.webkit.org/show_bug.cgi?id=82319

        Reviewed by Kentaro Hara.

        Remove custom bindings for Array type and replace Array type with sequence<String>.

        No new tests. LayoutTests/fast/harness/user-preferred-language.html should pass
        even after these changes.

        * Target.pri: Remove JSInternalsCustom.cpp and V8InternalsCustom.cpp.
        * UseJSC.cmake: Remove JSInternalsCustom.cpp.
        * UseV8.cmake: Remove V8InternalsCustom.cpp.
        * WebCore.gypi: Remove JSInternalsCustom.cpp and V8InternalsCustom.cpp.
        * WebCore.vcproj/WebCoreTestSupport.vcproj: Remove JSInternalsCustom.cpp and V8InternalsCustom.cpp.
        * WebCore.xcodeproj/project.pbxproj: Remove JSInternalsCustom.cpp and V8InternalsCustom.cpp.
        * bindings/js/JSDOMBinding.h:
        (WebCore):
        (WebCore::jsArray): Added new specialize function template for Strings.
        * bindings/scripts/CodeGeneratorJS.pm:
        (JSValueToNative): Add jsArray<String>() to deduce return type.
        (NativeToJSValue): Added check for type String.
        * bindings/scripts/CodeGeneratorV8.pm:
        (JSValueToNative): Add v8Array<String>() to deduce return type.
        (NativeToJSValue): Added check for type String.
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::setJSTestObjSequenceAttr): Modified results from run-binding-tests.
        * bindings/scripts/test/V8/V8TestObj.cpp: Modified results from run-binding-tests.
        (WebCore::TestObjInternal::sequenceAttrAttrSetter):
        * bindings/v8/V8Binding.h: Added new specialize function template for Strings.
        (WebCore):
        (WebCore::v8Array):
        (WebCore::toNativeArray):
        * testing/Internals.idl: Replace Array type with sequence<String>
        * testing/js/JSInternalsCustom.cpp: Removed.
        * testing/v8/V8InternalsCustom.cpp: Removed.

2012-03-29  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r112500.
        http://trac.webkit.org/changeset/112500
        https://bugs.webkit.org/show_bug.cgi?id=82576

        assertion failed on fast/events/tab-test-not-visible-
        imagemap.html on gtk/qt (Requested by hayato on #webkit).

        * dom/Element.cpp:
        (WebCore::Element::focus):
        * page/FocusController.cpp:
        (WebCore):
        (WebCore::shadowRoot):
        (WebCore::isTreeScopeOwner):
        (WebCore::FocusController::transferFocusToElementInShadowRoot):
        (WebCore::hasCustomFocusLogic):
        (WebCore::FocusController::findFocusableNodeDecendingDownIntoFrameDocumentOrShadowRoot):
        (WebCore::FocusController::advanceFocusInDocumentOrder):
        (WebCore::ownerOfTreeScope):
        (WebCore::FocusController::findFocusableNodeAcrossTreeScope):
        (WebCore::FocusController::findFocusableNode):
        (WebCore::nextNodeWithExactTabIndex):
        (WebCore::previousNodeWithExactTabIndex):
        (WebCore::nextNodeWithGreaterTabIndex):
        (WebCore::previousNodeWithLowerTabIndex):
        (WebCore::FocusController::nextFocusableNode):
        (WebCore::FocusController::previousFocusableNode):
        * page/FocusController.h:
        (WebCore):
        (FocusController):

2012-03-28  Kent Tamura  <tkent@chromium.org>

        Add TextFieldDecorationElement::decorate()
        https://bugs.webkit.org/show_bug.cgi?id=82572

        Reviewed by Hajime Morita.

        This change will be needed for Bug 82143.
        No new tests because of no behavior changes yet. This code change
        doesn't affect non-Chromium ports for now.

        * dom/ShadowRoot.cpp:
        (WebCore::ShadowRoot::create):
        Remove unnecessary assertion. We should allow multiple UA shadow roots.
        * html/shadow/TextFieldDecorationElement.cpp:
        (WebCore::TextFieldDecorationElement::decorate):
        Added.
        This function adds another ShadowRoot, and it contains one flexible box container.
        The container contains existin ShadowRoot content and the decoration element.
        * html/shadow/TextFieldDecorationElement.h:
        (TextFieldDecorationElement): Add the declaration of decorate().

2012-03-28  Vineet Chaudhary  <rgf748@motorola.com>

        Consider removal of removes jsNull()/v8::Null() from JSInternalsCustom.cpp/V8InternalsCustom.cpp
        https://bugs.webkit.org/show_bug.cgi?id=82442

        Reviewed by Kentaro Hara.

        No new tests. LayoutTests/fast/harness/user-preferred-language.html should pass
        even after these changes.

        * testing/js/JSInternalsCustom.cpp: Remove jsNull() if Vector is empty.
        (WebCore::JSInternals::userPreferredLanguages):
        * testing/v8/V8InternalsCustom.cpp: Remove v8::Null() if Vector is empty.
        (WebCore::V8Internals::userPreferredLanguagesAccessorGetter):

2012-03-28  Hayato Ito  <hayato@chromium.org>

        Let focus navigation be compliant with Shadow DOM spec.
        https://bugs.webkit.org/show_bug.cgi?id=78588

        Reviewed by Dimitri Glazkov.

        Sequential focus navigation now behaves exactly as specified in the Shadow DOM spec.

        According to the Shadow DOM spec:
        The shadow DOM navigation order sequence is inserted into the document navigation order:
        1. immediately after the shadow host, if the shadow host is focusable; or
        2. in place of the shadow host as if the shadow host were assigned the value of auto for determining its position.

        Prior to this patch, sequential focus navigation goes into Shadow DOM, but it is incomplete
        since insertion points, such as <content> elements or <shadow> elements, are not resolved at all.
        Now focus navigation can traverse shadow DOM subtrees in 'reified tree order', resolving lower boundaries transparently.

        Implementation notes:
        Prior to this patch, sequential focus navigation does not go into Shadow DOM if a shadow host is non-focusable.
        Now focus navigation must go into Shadow DOM subtrees even if a show host is not focusable as described in 2).
        To support this behavior, this patch introduced adjustedTabIndex() locally in FocusController so that
        it does not skip a non-focusable shadow host in current focus scope.
        After finding a *pseudo* focusable element in current focus scope, it tries to resolve a focused element recursively,
        considering a nested focus scope inside of a shadow host or iframe.
        To traverse Shadow DOM subtrees, a FocusController makes use of ReifiedTreeTraversal APIs, which was introduced in r112055.

        This change does not affect an existing behavior if a shadow dom is not involved.

        Test: fast/dom/shadow/focus-navigation.html

        * dom/Element.cpp:
        (WebCore::Element::focus):
        * page/FocusController.cpp:
        (WebCore::isShadowHost):
        (WebCore):
        (WebCore::FocusScope::FocusScope):
        (WebCore::FocusScope::rootNode):
        (WebCore::FocusScope::owner):
        (WebCore::FocusScope::focusScopeOf):
        (WebCore::FocusScope::focusScopeOwnedByShadowHost):
        (WebCore::FocusScope::focusScopeOwnedByIFrame):
        (WebCore::hasCustomFocusLogic):
        (WebCore::isNonFocusableShadowHost):
        (WebCore::isFocusableShadowHost):
        (WebCore::adjustedTabIndex):
        (WebCore::shouldVisit):
        (WebCore::FocusController::findFocusableNodeDecendingDownIntoFrameDocument):
        (WebCore::FocusController::advanceFocusInDocumentOrder):
        (WebCore::FocusController::findFocusableNodeAcrossFocusScope):
        (WebCore::FocusController::findFocusableNodeRecursively):
        (WebCore::FocusController::findFocusableNode):
        (WebCore::FocusController::findNodeWithExactTabIndex):
        (WebCore::nextNodeWithGreaterTabIndex):
        (WebCore::previousNodeWithLowerTabIndex):
        (WebCore::FocusController::nextFocusableNode):
        (WebCore::FocusController::previousFocusableNode):
        * page/FocusController.h:
        (WebCore):
        (FocusScope):
        (FocusController):

2012-03-28  Li Yin  <li.yin@intel.com>

        [WebSocket]Browser must fail connection if Sec-WebSocket-Protocol mismatched.
        https://bugs.webkit.org/show_bug.cgi?id=82307

        Reviewed by Kent Tamura.

        From RFC6455: http://tools.ietf.org/html/rfc6455#section-4.1
        If the WebSocket openhanding respond included the mismatched
        Sec-WebSocket-Protocol header field, the client must fail the WebSocket Connection.

        Test: http/tests/websocket/tests/hybi/handshake-fail-by-mismatch-protocol-header.html

        * Modules/websockets/WebSocketHandshake.cpp:
        (WebCore::WebSocketHandshake::checkResponseHeaders):

2012-03-28  Jessie Berlin  <jberlin@apple.com>

        Fix Windows build after r112482.

        * platform/network/cf/FormDataStreamCFNet.cpp:
        (WebCore::formOpen):
        Do not attempt to use an OS X error code on Windows. Use the POSIX errno instead.

2012-03-28  Alexandru Chiculita  <achicu@adobe.com>

        [CSS Filters] Avoid rebuilding FEFilters when RenderLayer is destroyed
        https://bugs.webkit.org/show_bug.cgi?id=82524

        Reviewed by Dean Jackson.

        RenderLayer::~RenderLayer is calling clearBacking which updated the m_filter with new filters,
        even though they were to be deleted a couple of lines below. This change avoids updating the filters,
        if we are in the "destroyed" state.

        No new tests. This change has no visible results to HTML or JavaScript, so it cannot be tested without a debugger.

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::~RenderLayer):
        (WebCore::RenderLayer::clearBacking):
        * rendering/RenderLayer.h:
        (RenderLayer):

2012-03-28  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Remove ScriptExecutionContext from NavigatorBattery.idl
        https://bugs.webkit.org/show_bug.cgi?id=82556

        Reviewed by Adam Barth.

        As Bug 73528 comment #71, NavigatorBattery.idl doesn't need to have ScriptExecutionContext.
        Document can be used instead of ScriptExecutionContext.

        Tests: batterystatus/add-listener-from-callback.html
               batterystatus/basic-all-types-of-events.html
               batterystatus/basic-operation.html
               batterystatus/event-after-navigation.html
               batterystatus/multiple-frames.html
               batterystatus/updates.html
               batterystatus/window-property.html

        * Modules/battery/BatteryManager.cpp:
        (WebCore::BatteryManager::create):
        (WebCore::BatteryManager::BatteryManager):
        * Modules/battery/BatteryManager.h:
        (BatteryManager):
        * Modules/battery/NavigatorBattery.cpp:
        (WebCore::NavigatorBattery::webkitBattery):
        * Modules/battery/NavigatorBattery.h:
        (NavigatorBattery):
        * Modules/battery/NavigatorBattery.idl:

2012-03-28  Jason Liu  <jason.liu@torchmobile.com.cn>

        [BlackBerry]Missing cookies from HTTP response header in Network tab of Web Inspector.
        https://bugs.webkit.org/show_bug.cgi?id=82041

        We shouldn't overwrite cookies of response if there are more than one
        header of Set-Cookie.

        Reviewed by Rob Buis.

        Test: http/tests/cookies/resources/setArraycookies.php

        * platform/network/blackberry/NetworkJob.cpp:
        (WebCore::NetworkJob::handleNotifyHeaderReceived):

2012-03-28  Noel Gordon  <noel.gordon@gmail.com>

        JPEGImageDecoder: Set frame alpha state before marking a frame complete
        https://bugs.webkit.org/show_bug.cgi?id=82428

        Reviewed by Kenneth Russell.

        r109779 changed JPEG alpha channel handling by marking a JPEG image frame
        as having no alpha _after_ setting the image status frame-complete, which
        prevents the application of image color profiles in some WebGL cases.

        No new tests. The application of the color profile is not guaranteed for
        images used as textures in WebGL. Refer to http://wkb.ug/76498.

        * platform/image-decoders/jpeg/JPEGImageDecoder.cpp:
        (WebCore::JPEGImageDecoder::jpegComplete): Set the image frame alpha state
        before marking the image frame status as frame-complete.

2012-03-28  Emil A Eklund  <eae@chromium.org>

        Fix rounding in RenderInline::paintOutlineForLine
        https://bugs.webkit.org/show_bug.cgi?id=82540

        Reviewed by Eric Seidel.

        No new tests, no change in functionality.

        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::paintOutlineForLine):
        Change paintOutlineForLine to pixel snap the left and right edges of the
        lines instead of adding the offset to an already rounded number.

2012-03-28  David Grogan  <dgrogan@chromium.org>

        IndexedDB: don't expose IDBDatabaseError to script
        https://bugs.webkit.org/show_bug.cgi?id=82280

        It's not used anywhere and firefox doesn't expose it.

        Reviewed by Tony Chang.

        Test: storage/indexeddb/removed.html

        * CMakeLists.txt:
        * DerivedSources.cpp:
        * DerivedSources.make:
        * DerivedSources.pri:
        * GNUmakefile.list.am:
        * Modules/indexeddb/DOMWindowIndexedDatabase.idl:
        * Modules/indexeddb/IDBDatabaseError.idl: Removed.
        * Modules/indexeddb/WorkerContextIndexedDatabase.idl:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:

2012-03-28  Kenichi Ishibashi  <bashi@chromium.org>

        Respects font fallback list during webfonts are loading
        https://bugs.webkit.org/show_bug.cgi?id=76684

        Reviewed by Dimitri Glazkov.

        For layout, use the rest of the fallback list while webfonts are loading.
        If the webfont is loading, it will be given an invalid Unicode Range so that
        font selection mechansim doesn't use the webfont for layout.

        Test: http/tests/webfont/fallback-font-while-loading.html

        * css/CSSSegmentedFontFace.cpp:
        (WebCore::appendFontDataWithInvalidUnicodeRangeIfLoading): Added.
        (WebCore):
        (WebCore::CSSSegmentedFontFace::getFontData):

2012-03-28  Mark Rowe  <mrowe@apple.com>

        Update Localizable.strings.

        * English.lproj/Localizable.strings:

2012-03-28  Victor Carbune  <vcarbune@adobe.com>

        Removed particular rendering for the volume slider and used
        css positioning instead (simpler and less prone to errors when
        changes occur).
        https://bugs.webkit.org/show_bug.cgi?id=82150

        Reviewed by Eric Carlson.

        Test: media/video-controls-rendering-toggle-display-none.html

        * css/mediaControls.css: Updated css to correctly render controls.
        (audio::-webkit-media-controls-panel, video::-webkit-media-controls-panel):
        * css/mediaControlsChromium.css: Updated css to correctly render controls.
        (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-volume-slider-container, video::-webkit-media-controls-volume-slider-container):
        * html/shadow/MediaControlElements.cpp: Removed particular renderer.
        (WebCore):
        * html/shadow/MediaControlElements.h: Removed particular renderer.
        (MediaControlVolumeSliderContainerElement):
        * html/shadow/MediaControlRootElementChromium.cpp:
        (WebCore::MediaControlRootElementChromium::create): Added an anonymous div container
        for the mute button and volume slider (to be displayed on top of each other)

2012-03-28  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r110064.
        http://trac.webkit.org/changeset/110064
        https://bugs.webkit.org/show_bug.cgi?id=82537

        The patch leaks the DOM when audio elements are used
        (Requested by sundiamonde on #webkit).

        * bindings/js/JSNodeCustom.cpp:
        (WebCore::isReachableFromDOM):

2012-03-28  Alexey Proskuryakov  <ap@apple.com>

        [Win] Some Blob tests crash in CFNetwork in advanceCurrentStream(FormStreamFields*)
        https://bugs.webkit.org/show_bug.cgi?id=82386
        <rdar://problem/11121501>

        Reviewed by Brady Eidson.

        Covered by existing tests.

        * platform/network/cf/FormDataStreamCFNet.cpp:
        * platform/network/cf/FormDataStreamCFNet.h:
        Moved low level implementation from FormDataStreamMac, and exposed an additional function
        to implement Foundation-based API on top of this.

        * platform/network/mac/FormDataStreamMac.h:
        * platform/network/mac/FormDataStreamMac.mm:
        Rely on toll-free bridging and implementation details to make this work without duplicating
        code.
        Note that httpBodyFromStream is confusing - I don't see how it can work when sending serialized
        requests across process boundary. We probably only get away with this because we don't attempt
        to send requests to UI process once they already have streams associated with them.

        * WebCore.vcproj/WebCore.vcproj: Added missing platform/cf files.

        * platform/cf/FileSystemCF.cpp: Fixed include style.

        * platform/win/FileSystemWin.cpp: (WebCore::fileSystemRepresentation): Ifdef out a broken
        implementation.

2012-03-28  Adrienne Walker  <enne@google.com>

        [chromium] Fix tiled layer assert for huge layers
        https://bugs.webkit.org/show_bug.cgi?id=82486

        Reviewed by James Robinson.

        Test: TiledLayerChromiumTest.hugeLayerUpdateCrash

        TilingData::numTiles() is calculated as the product of two ints and so
        can potentially overflow, causing numTiles() to be incorrect. To avoid
        calling code accidentally falling into this trap, remove this function
        and all code that uses tile index from TilingData.  This requires
        fixing up a bunch of callers of TilingData and CCLayerTilingData.

        Additionally, TilingData::numTiles() has long been a confusing
        function name in some contexts, so rename to bool hasEmptyBounds().

        Also, remove TilingData::intersectDrawQuad because there are no
        clients of that function.

        * platform/graphics/chromium/TiledLayerChromium.cpp:
        (WebCore::TiledLayerChromium::drawsContent):
        (WebCore::TiledLayerChromium::reserveTextures):
        (WebCore::TiledLayerChromium::prepareToUpdate):
        (WebCore::TiledLayerChromium::prepareToUpdateIdle):
        (WebCore::TiledLayerChromium::needsIdlePaint):
        (WebCore::TiledLayerChromium::idlePaintRect):
        * platform/graphics/chromium/cc/CCLayerTilingData.cpp:
        (WebCore::CCLayerTilingData::tileRect):
        * platform/graphics/chromium/cc/CCLayerTilingData.h:
        (WebCore::CCLayerTilingData::hasEmptyBounds):
        (WebCore::CCLayerTilingData::tileBounds):
        (WebCore::CCLayerTilingData::isEmpty):
        * platform/graphics/chromium/cc/CCTiledLayerImpl.cpp:
        (WebCore::CCTiledLayerImpl::bindContentsTexture):
        (WebCore::CCTiledLayerImpl::appendQuads):
        * platform/graphics/gpu/Texture.cpp:
        (WebCore::Texture::create):
        (WebCore::Texture::updateSubRect):
        * platform/graphics/gpu/TilingData.cpp:
        (WebCore::TilingData::tileBounds):
        (WebCore::TilingData::tileBoundsWithBorder):
        (WebCore::TilingData::tileBoundsNormalized):
        * platform/graphics/gpu/TilingData.h:
        (WebCore::TilingData::hasEmptyBounds):
        (TilingData):
        (WebCore::TilingData::assertTile):

2012-03-28  Emil A Eklund  <eae@chromium.org>

        Change FilterOperations::getOutsets to use integers
        https://bugs.webkit.org/show_bug.cgi?id=82535

        Reviewed by Eric Seidel.

        FilterOperations::getOutsets calculates the outsets using integers and
        the values are guranteed to be set to full-pixel values. By changing the
        function signature we communicate this fact better and avoid unnecessary
        type conversions in some cases.

        No new tests.

        * platform/graphics/filters/FilterOperations.cpp:
        (WebCore::FilterOperations::getOutsets):
        * platform/graphics/filters/FilterOperations.h:
        (FilterOperations):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::computeRectForRepaint):
        (WebCore::RenderBox::addVisualEffectOverflow):
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::computeRectForRepaint):
        * rendering/style/RenderStyle.h:

2012-03-28  Nate Chapin  <japhet@chromium.org>

        Remove dispatchDidLoadMainResource callback, since no
        port implements it.
        https://bugs.webkit.org/show_bug.cgi?id=82539

        Reviewed by Alexey Proskuryakov.

        No new tests, just deleting dead code.

        * loader/EmptyClients.h:
        (EmptyFrameLoaderClient):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::finishedLoading):
        (WebCore::FrameLoader::mainReceivedCompleteError):
        * loader/FrameLoaderClient.h:
        (FrameLoaderClient):
        * loader/MainResourceLoader.cpp:
        (WebCore::MainResourceLoader::receivedError):
        (WebCore::MainResourceLoader::didCancel):

2012-03-28  Enrica Casucci  <enrica@apple.com>

        REGRESSION: editing/pasteboard/dataTransfer-setData-getData.html fails on Mac platforms.
        https://bugs.webkit.org/show_bug.cgi?id=82497
        <rdar://problem/11140334>

        Reviewed by Brady Eidson.
        
        The revision causing this regression fixed the way data is written to the pasteboard for NSURLPboardType.
        This change fixes the way data is read from the pasteboard for the same pasteboard type.

        No new tests. Fixes the existing one that fails.

        * platform/mac/ClipboardMac.mm:
        (WebCore::absoluteURLsFromPasteboard):
        * platform/mac/PlatformPasteboardMac.mm:
        (WebCore::PlatformPasteboard::stringForType):

2012-03-28  Joe Thomas  <joethomas@motorola.com>

        SL bot is hitting SHOULD NEVER BE REACHED in WebCore::valueForLength() on many tests
        https://bugs.webkit.org/show_bug.cgi?id=82390

        Reviewed by Simon Fraser.

        This is an attempt to fix the MAC SL/Lion Bot issue as this issue is not reproducible locally.
        The assertion happened when length type is Undefined in valueForLength() function but the assertion for Undefined length type
        in RenderBox::computeLogicalWidthInRegionUsing which calls the above said function did not get hit.

        This patch passes Length structure as const reference to Length calculation functions which avoids the call to the copy-constructor.
        And it ensures that the Length structure is not getting modified during copy-construction. 

        * css/LengthFunctions.cpp:
        (WebCore::minimumValueForLength):
        (WebCore::valueForLength):
        (WebCore::floatValueForLength):
        * css/LengthFunctions.h:
        (WebCore):

2012-03-28  Gavin Barraclough  <barraclough@apple.com>

        Yarr: if we're not using the output array, don't populate it!
        https://bugs.webkit.org/show_bug.cgi?id=82519

        Reviewed by Sam Weinig.

        * ForwardingHeaders/runtime/MatchResult.h: Added.
        * ForwardingHeaders/yarr/YarrJIT.h: Added.
            - Added forwarding headers.

2012-03-23  David Hyatt  <hyatt@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=81685
        
        [New Multicolumn] Add RenderMultiColumnFlowThread to hold the flow thread contents of a multi-column block.
        It derives from RenderFlowThread.
        
        Refactor RenderFlowThread to split out the stuff related to explicit naming into a subclass, RenderNamedFlowThread.
        This allows RenderFlowThread to be a simple base class that involves maintaining the regions themselves.
    
        Reviewed by Julien Chaffraix.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/Document.cpp:
        * dom/NodeRenderingContext.cpp:
        * dom/NodeRenderingContext.h:
        (WebCore):
        (WebCore::NodeRenderingContext::parentFlowRenderer):
        * dom/WebKitNamedFlow.cpp:
        (WebCore::WebKitNamedFlow::WebKitNamedFlow):
        * dom/WebKitNamedFlow.h:
        (WebCore):
        (WebCore::WebKitNamedFlow::create):
        (WebKitNamedFlow):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::collapseAnonymousBoxChild):
        * rendering/RenderFlowThread.cpp:
        (WebCore::RenderFlowThread::RenderFlowThread):
        (WebCore):
        (WebCore::RenderFlowThread::addRegionToThread):
        (WebCore::RenderFlowThread::removeRegionFromThread):
        (WebCore::RenderFlowThread::removeRenderBoxRegionInfo):
        * rendering/RenderFlowThread.h:
        (WebCore):
        * rendering/RenderMultiColumnFlowThread.cpp: Added.
        (WebCore):
        (WebCore::RenderMultiColumnFlowThread::RenderMultiColumnFlowThread):
        (WebCore::RenderMultiColumnFlowThread::renderName):
        * rendering/RenderMultiColumnFlowThread.h: Added.
        (WebCore):
        (RenderMultiColumnFlowThread):
        * rendering/RenderNamedFlowThread.cpp: Added.
        (WebCore):
        (WebCore::RenderNamedFlowThread::RenderNamedFlowThread):
        (WebCore::RenderNamedFlowThread::renderName):
        (WebCore::RenderNamedFlowThread::nextRendererForNode):
        (WebCore::RenderNamedFlowThread::previousRendererForNode):
        (WebCore::RenderNamedFlowThread::addFlowChild):
        (WebCore::RenderNamedFlowThread::removeFlowChild):
        (WebCore::RenderNamedFlowThread::dependsOn):
        (WebCore::compareRenderRegions):
        (WebCore::RenderNamedFlowThread::addRegionToThread):
        (WebCore::RenderNamedFlowThread::removeRegionFromThread):
        (WebCore::RenderNamedFlowThread::checkInvalidRegions):
        (WebCore::RenderNamedFlowThread::addDependencyOnFlowThread):
        (WebCore::RenderNamedFlowThread::removeDependencyOnFlowThread):
        (WebCore::RenderNamedFlowThread::pushDependencies):
        (WebCore::RenderNamedFlowThread::ensureNamedFlow):
        * rendering/RenderNamedFlowThread.h: Added.
        (WebCore):
        (RenderNamedFlowThread):
        (WebCore::RenderNamedFlowThread::name):
        (WebCore::RenderNamedFlowThread::hasChildren):
        (WebCore::RenderNamedFlowThread::hasChild):
        (WebCore::RenderNamedFlowThread::isRenderNamedFlowThread):
        (WebCore::toRenderNamedFlowThread):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::willBeDestroyed):
        * rendering/RenderObject.h:
        (WebCore::RenderObject::isRenderNamedFlowThread):
        * rendering/RenderObjectChildList.cpp:
        (WebCore::renderNamedFlowThreadContainer):
        (WebCore::RenderObjectChildList::removeChildNode):
        (WebCore::RenderObjectChildList::appendChildNode):
        (WebCore::RenderObjectChildList::insertChildNode):
        * rendering/RenderRegion.cpp:
        (WebCore::RenderRegion::RenderRegion):
        (WebCore::RenderRegion::attachRegion):
        * rendering/RenderRegion.h:
        (WebCore):
        (WebCore::RenderRegion::parentNamedFlowThread):
        (RenderRegion):
        * rendering/RenderTreeAsText.cpp:
        (WebCore::writeRenderNamedFlowThreads):
        (WebCore::writeLayers):
        * rendering/RenderView.cpp:
        (WebCore::RenderView::RenderView):
        (WebCore::RenderView::layout):
        (WebCore::RenderView::styleDidChange):
        (WebCore::RenderView::ensureRenderFlowThreadWithName):
        (WebCore::RenderView::layoutRenderNamedFlowThreads):
        * rendering/RenderView.h:
        (WebCore):
        (RenderView):
        (WebCore::RenderView::hasRenderNamedFlowThreads):
        (WebCore::RenderView::isRenderNamedFlowThreadOrderDirty):
        (WebCore::RenderView::setIsRenderNamedFlowThreadOrderDirty):
        (WebCore::RenderView::renderNamedFlowThreadList):

2012-03-28  Emil A Eklund  <eae@chromium.org>

        Remove unnecessary rounding in RenderLayerBacking
        https://bugs.webkit.org/show_bug.cgi?id=82529

        Reviewed by Eric Seidel.

        Remove rounding that is no longer required now that borderBoxRect returns
        an IntRect.
        
        No new tests.

        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateGraphicsLayerGeometry):
        (WebCore::RenderLayerBacking::startAnimation):
        (WebCore::RenderLayerBacking::startTransition):

2012-03-28  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r112432.
        http://trac.webkit.org/changeset/112432
        https://bugs.webkit.org/show_bug.cgi?id=82536

        Causes ccs3 layout test asserts (Requested by enne on
        #webkit).

        * platform/graphics/chromium/TiledLayerChromium.cpp:
        (WebCore::TiledLayerChromium::drawsContent):
        (WebCore::TiledLayerChromium::reserveTextures):
        (WebCore::TiledLayerChromium::prepareToUpdate):
        (WebCore::TiledLayerChromium::prepareToUpdateIdle):
        (WebCore::TiledLayerChromium::needsIdlePaint):
        (WebCore::TiledLayerChromium::idlePaintRect):
        * platform/graphics/chromium/cc/CCLayerTilingData.cpp:
        (WebCore::CCLayerTilingData::tileRect):
        * platform/graphics/chromium/cc/CCLayerTilingData.h:
        (WebCore::CCLayerTilingData::numTiles):
        (WebCore::CCLayerTilingData::tileBounds):
        (WebCore::CCLayerTilingData::isEmpty):
        * platform/graphics/chromium/cc/CCTiledLayerImpl.cpp:
        (WebCore::CCTiledLayerImpl::bindContentsTexture):
        (WebCore::CCTiledLayerImpl::appendQuads):
        * platform/graphics/filters/FECustomFilter.cpp:
        (WebCore::FECustomFilter::platformApplySoftware):
        * platform/graphics/gpu/Texture.cpp:
        (WebCore::Texture::create):
        (WebCore::Texture::updateSubRect):
        * platform/graphics/gpu/TilingData.cpp:
        (WebCore::TilingData::tileBounds):
        (WebCore::TilingData::tileBoundsWithBorder):
        (WebCore::TilingData::tileBoundsNormalized):
        (WebCore::TilingData::intersectDrawQuad):
        (WebCore):
        * platform/graphics/gpu/TilingData.h:
        (WebCore::TilingData::numTiles):
        (WebCore::TilingData::tileIndex):
        (WebCore::TilingData::tileXIndex):
        (WebCore::TilingData::tileYIndex):
        (TilingData):
        (WebCore::TilingData::assertTile):

2012-03-27  Daniel Cheng  <dcheng@chromium.org>

        [chromium] Merge ChromiumDataObject and DataTransferItemListChromium.
        https://bugs.webkit.org/show_bug.cgi?id=82407

        Reviewed by Tony Chang.

        Since ChromiumDataObject is just a very thin wrapper for DataTransferItemListChromium now,
        combine the two and remove a layer of indirection.

        No functionality change, should be covered by existing tests.

        * WebCore.gypi:
        * platform/chromium/ChromiumDataObject.cpp: Replacing DataTransferItemListChromium.
        (WebCore::ChromiumDataObject::createFromPasteboard):
        (WebCore::ChromiumDataObject::create):
        (WebCore::ChromiumDataObject::length):
        (WebCore):
        (WebCore::ChromiumDataObject::item):
        (WebCore::ChromiumDataObject::deleteItem):
        (WebCore::ChromiumDataObject::clearAll):
        (WebCore::ChromiumDataObject::add):
        (WebCore::ChromiumDataObject::clearData):
        (WebCore::ChromiumDataObject::clearAllExceptFiles):
        (WebCore::ChromiumDataObject::types):
        (WebCore::ChromiumDataObject::getData):
        (WebCore::ChromiumDataObject::setData):
        (WebCore::ChromiumDataObject::urlAndTitle):
        (WebCore::ChromiumDataObject::setURLAndTitle):
        (WebCore::ChromiumDataObject::htmlAndBaseURL):
        (WebCore::ChromiumDataObject::setHTMLAndBaseURL):
        (WebCore::ChromiumDataObject::containsFilenames):
        (WebCore::ChromiumDataObject::filenames):
        (WebCore::ChromiumDataObject::addFilename):
        (WebCore::ChromiumDataObject::addSharedBuffer):
        (WebCore::ChromiumDataObject::ChromiumDataObject):
        (WebCore::ChromiumDataObject::findStringItem):
        (WebCore::ChromiumDataObject::internalAddStringItem):
        (WebCore::ChromiumDataObject::internalAddFileItem):
        * platform/chromium/ChromiumDataObject.h:
        (WebCore):
        (ChromiumDataObject):
        * platform/chromium/ChromiumDataObjectItem.cpp: Renamed from Source/WebCore/platform/chromium/DataTransferItemChromium.cpp.
        (WebCore):
        (WebCore::ChromiumDataObjectItem::createFromString):
        (WebCore::ChromiumDataObjectItem::createFromFile):
        (WebCore::ChromiumDataObjectItem::createFromURL):
        (WebCore::ChromiumDataObjectItem::createFromHTML):
        (WebCore::ChromiumDataObjectItem::createFromSharedBuffer):
        (WebCore::ChromiumDataObjectItem::createFromPasteboard):
        (WebCore::ChromiumDataObjectItem::ChromiumDataObjectItem):
        (WebCore::ChromiumDataObjectItem::getAsString):
        (WebCore::ChromiumDataObjectItem::getAsFile):
        (WebCore::ChromiumDataObjectItem::internalGetAsString):
        (WebCore::ChromiumDataObjectItem::isFilename):
        * platform/chromium/ChromiumDataObjectItem.h: Renamed from Source/WebCore/platform/chromium/DataTransferItemChromium.h.
        (WebCore):
        (ChromiumDataObjectItem):
        (WebCore::ChromiumDataObjectItem::kind):
        (WebCore::ChromiumDataObjectItem::type):
        (WebCore::ChromiumDataObjectItem::sharedBuffer):
        (WebCore::ChromiumDataObjectItem::title):
        (WebCore::ChromiumDataObjectItem::baseURL):
        * platform/chromium/ClipboardChromium.cpp:
        (WebCore::ClipboardChromium::files):
        (WebCore::ClipboardChromium::hasData):
        (WebCore::ClipboardChromium::items):
        * platform/chromium/DataTransferItemListChromium.cpp: Removed.
        * platform/chromium/DataTransferItemListChromium.h: Removed.

2012-03-28  Nat Duca  <nduca@chromium.org>

        [chromium] Scheduler should not tell FrameRateController to begin a frame when we dont swap
        https://bugs.webkit.org/show_bug.cgi?id=82516

        Reviewed by James Robinson.

        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::swapBuffers):
        * platform/graphics/chromium/LayerRendererChromium.h:
        (LayerRendererChromium):
        * platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:
        (WebCore::CCLayerTreeHostImpl::swapBuffers):
        * platform/graphics/chromium/cc/CCLayerTreeHostImpl.h:
        (CCLayerTreeHostImpl):
        * platform/graphics/chromium/cc/CCScheduler.cpp:
        (WebCore::CCScheduler::processScheduledActions):
        * platform/graphics/chromium/cc/CCScheduler.h:
        (WebCore::CCScheduledActionDrawAndSwapResult::CCScheduledActionDrawAndSwapResult):
        (CCScheduledActionDrawAndSwapResult):
        (WebCore):
        (CCSchedulerClient):
        * platform/graphics/chromium/cc/CCThreadProxy.cpp:
        (WebCore::CCThreadProxy::scheduledActionDrawAndSwapInternal):
        (WebCore::CCThreadProxy::scheduledActionDrawAndSwapIfPossible):
        (WebCore::CCThreadProxy::scheduledActionDrawAndSwapForced):
        * platform/graphics/chromium/cc/CCThreadProxy.h:
        (CCThreadProxy):

2012-03-26  Eric Uhrhane  <ericu@chromium.org>

        FileWriter has two race conditions
        https://bugs.webkit.org/show_bug.cgi?id=81861

        Reviewed by David Levin.

        Should make current tests less flaky.

        * Modules/filesystem/FileWriter.h:
        * Modules/filesystem/FileWriter.cpp:
        Track the in-flight operation, whether it be an abort/write/truncate.
        Whether an abort comes back as didWrite, didTruncate, or didFail, handle
        it appropriately.  Before this fix, the Chromium implementation would
        assert in two cases:

        If the user calls abort, then write, then abort before the backend
        catches up, we'd send both aborts to the backend, even though it hadn't
        received the write yet.  Chromium's backend asserts if there's an abort
        with no write in progress.  We now record that we've sent an abort and
        are waiting for the response.

        If the user calls abort while a write/truncate is just finishing, on the
        Chromium worker implementation, the completion message could be
        thread-hopping back to WebCore at the
        WorkerAsyncFileWriterCallbacksBridge while the abort is thread-hopping
        in the other direction.  Again, this leads to an abort call to the
        backend with no write in progress, and an assert.  We're now robust to
        completions coming back when we're expecting an abort, and
        https://chromiumcodereview.appspot.com/9764018/ will make the backend
        robust to extra abort calls.

2012-03-27  Ryosuke Niwa  <rniwa@webkit.org>

        Deleting a paragraph of text should not add elements for typing style
        https://bugs.webkit.org/show_bug.cgi?id=82401

        Reviewed by Enrica Casucci.

        This behavior was explicitly supported by DeleteSelectionCommand but it doesn't match TextEdit or Firefox.
        We're changing our behavior to match TextEdit and Firefox in this patch.

        The behavior is tested by an existing test, which was renamed to deleting-text-rests-typing-style.html in this patch.

        Test: editing/execCommand/deleting-text-rests-typing-style.html

        * editing/DeleteSelectionCommand.cpp:
        (WebCore::DeleteSelectionCommand::calculateTypingStyleAfterDelete):

2012-03-28  Michal Mocny  <mmocny@google.com>

        [chromium] Add tracing events around CCLayerTreeHostImpl visibility.
        https://bugs.webkit.org/show_bug.cgi?id=82501

        Reviewed by James Robinson.

        * platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:
        (WebCore::CCLayerTreeHostImpl::CCLayerTreeHostImpl):
        (WebCore::CCLayerTreeHostImpl::setVisible):

2012-03-28  Florin Malita  <fmalita@google.com>

        Incorrect foreignObject hit test results when overlapping other SVG elements
        https://bugs.webkit.org/show_bug.cgi?id=82059

        Reviewed by Nikolas Zimmermann.

        Test: svg/hittest/foreign-object-background.svg

        Foreign content needs to be hit-tested atomically due to the (pseudo)
        stacking context established by FOs.

        * rendering/svg/RenderSVGForeignObject.cpp:
        (WebCore::RenderSVGForeignObject::nodeAtFloatPoint):
        Hit test all phases on FO HitTestForeground.

2012-03-26  Shawn Singh  <shawnsingh@chromium.org>

        [chromium] layer->clipRect() is not initialized for layers that create a renderSurface.
        https://bugs.webkit.org/show_bug.cgi?id=74147

        Reviewed by Adrienne Walker.

        Added 3 additional unit tests; Modified existing unit tests and layout tests.

        The layer's clipRect and usesLayerClipping information was not
        being initialized for layers that created a renderSurface. (It
        was, however, being initialized for the renderSurface itself.)
        This patch adds a unit test that reproduces that this is an error,
        other unit tests to tightly test the value of clipRect being
        initialized, and adds the logic to properly initialize the
        clipRect.

        Before this patch, this bug was causing flashing on tab-switch on
        the apple iphone page. Even worse, with partial swap enabled, the
        layers would simply disappear, because the first frame the
        clipRect is uninitialized and the layer is not drawn, and the
        second frame onwards, the damage tracker correctly things nothing
        is damaged, so it doesn't draw that layer again until other damage
        causes it to be redrawn.

        * platform/graphics/chromium/cc/CCLayerTreeHostCommon.cpp:
        (WebCore::calculateDrawTransformsAndVisibilityInternal):

2012-03-28  Anders Carlsson  <andersca@apple.com>

        "Sticky" or slow scrolling on some sites
        https://bugs.webkit.org/show_bug.cgi?id=82512
        <rdar://problem/11000372>

        Reviewed by Andreas Kling.

        When we're in the slow mode and have to update the scroll layer position on the main thread,
        get it from the scrolling thread so we'll be in sync with the scrolling tree when the main thread is busy.

        * page/scrolling/ScrollingCoordinator.cpp:
        (WebCore::ScrollingCoordinator::updateMainFrameScrollPositionAndScrollLayerPosition):
        * page/scrolling/ScrollingCoordinator.h:
        (ScrollingCoordinator):
        * page/scrolling/ScrollingTree.cpp:
        (WebCore::ScrollingTree::mainFrameScrollPosition):
        (WebCore):
        (WebCore::ScrollingTree::updateMainFrameScrollPositionAndScrollLayerPosition):
        * page/scrolling/ScrollingTree.h:

2012-03-28  Adrienne Walker  <enne@google.com>

        [chromium] Fix tiled layer assert for huge layers
        https://bugs.webkit.org/show_bug.cgi?id=82486

        Reviewed by James Robinson.

        Test: TiledLayerChromiumTest.hugeLayerUpdateCrash

        TilingData::numTiles() is calculated as the product of two ints and so
        can potentially overflow, causing numTiles() to be incorrect. To avoid
        calling code accidentally falling into this trap, remove this function
        and all code that uses tile index from TilingData.  This requires
        fixing up a bunch of callers of TilingData and CCLayerTilingData.

        Additionally, TilingData::numTiles() has long been a confusing
        function name in some contexts, so rename to bool hasEmptyBounds().

        Also, remove TilingData::intersectDrawQuad because there are no
        clients of that function.

        * platform/graphics/chromium/TiledLayerChromium.cpp:
        (WebCore::TiledLayerChromium::drawsContent):
        (WebCore::TiledLayerChromium::reserveTextures):
        (WebCore::TiledLayerChromium::prepareToUpdate):
        (WebCore::TiledLayerChromium::prepareToUpdateIdle):
        (WebCore::TiledLayerChromium::needsIdlePaint):
        (WebCore::TiledLayerChromium::idlePaintRect):
        * platform/graphics/chromium/cc/CCLayerTilingData.cpp:
        (WebCore::CCLayerTilingData::tileRect):
        * platform/graphics/chromium/cc/CCLayerTilingData.h:
        (WebCore::CCLayerTilingData::hasEmptyBounds):
        (WebCore::CCLayerTilingData::tileBounds):
        (WebCore::CCLayerTilingData::isEmpty):
        * platform/graphics/chromium/cc/CCTiledLayerImpl.cpp:
        (WebCore::CCTiledLayerImpl::bindContentsTexture):
        (WebCore::CCTiledLayerImpl::appendQuads):
        * platform/graphics/gpu/Texture.cpp:
        (WebCore::Texture::create):
        (WebCore::Texture::updateSubRect):
        * platform/graphics/gpu/TilingData.cpp:
        (WebCore::TilingData::tileBounds):
        (WebCore::TilingData::tileBoundsWithBorder):
        (WebCore::TilingData::tileBoundsNormalized):
        * platform/graphics/gpu/TilingData.h:
        (WebCore::TilingData::hasEmptyBounds):
        (TilingData):
        (WebCore::TilingData::assertTile):

2012-03-28  Peter Rybin  <peter.rybin@gmail.com>

        Web Inspector: CodeGeneratorInspector.py: switch Runtime, Network and DOM domains to typed API
        https://bugs.webkit.org/show_bug.cgi?id=81558

        Reviewed by Pavel Feldman.

        Client code is switched to typed API (all InspectorObject and InspectorArray types are
        replaced with generated types from TypeBuilder according to Inspector.json).

        Missing array of int specialization is added. Code generator now has a check against
        misspelled (non-existing) domain names.

        * inspector/CodeGeneratorInspector.py:
        (Generator.go): check against misspelled domain names added.
        * inspector/InjectedScript.cpp:
        (WebCore::InjectedScript::evaluate):
        (WebCore::InjectedScript::callFunctionOn):
        (WebCore::InjectedScript::evaluateOnCallFrame):
        (WebCore::InjectedScript::getProperties):
        (WebCore::InjectedScript::wrapObject):
        (WebCore::InjectedScript::wrapNode):
        (WebCore::InjectedScript::wrapSerializedObject):
        (WebCore::InjectedScript::makeEvalCall):
        * inspector/InjectedScript.h:
        (InjectedScript):
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::getDocument):
        (WebCore::InspectorDOMAgent::pushChildNodesToFrontend):
        (WebCore::InspectorDOMAgent::querySelectorAll):
        (WebCore::InspectorDOMAgent::pushNodePathToFrontend):
        (WebCore::InspectorDOMAgent::getEventListenersForNode):
        (WebCore::InspectorDOMAgent::getSearchResults):
        (WebCore::InspectorDOMAgent::resolveNode):
        (WebCore::InspectorDOMAgent::getAttributes):
        (WebCore::InspectorDOMAgent::buildObjectForNode):
        (WebCore::InspectorDOMAgent::buildArrayForElementAttributes):
        (WebCore::InspectorDOMAgent::buildArrayForContainerChildren):
        (WebCore::InspectorDOMAgent::loadEventFired):
        (WebCore::InspectorDOMAgent::didInsertDOMNode):
        (WebCore::InspectorDOMAgent::styleAttributeInvalidated):
        (WebCore::InspectorDOMAgent::pushNodeByPathToFrontend):
        * inspector/InspectorDOMAgent.h:
        (InspectorDOMAgent):
        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::resourceTypeJson):
        (WebCore::InspectorPageAgent::cachedResourceTypeJson):
        (WebCore::InspectorPageAgent::buildObjectForFrameTree):
        * inspector/InspectorPageAgent.h:
        * inspector/InspectorResourceAgent.cpp:
        (WebCore::buildObjectForResourceRequest):
        (WebCore::buildObjectForResourceResponse):
        (WebCore::buildObjectForCachedResource):
        (WebCore::InspectorResourceAgent::willSendRequest):
        (WebCore::InspectorResourceAgent::didReceiveResponse):
        (WebCore::InspectorResourceAgent::didLoadResourceFromMemoryCache):
        (WebCore::InspectorResourceAgent::buildInitiatorObject):
        (WebCore::InspectorResourceAgent::willSendWebSocketHandshakeRequest):
        (WebCore::InspectorResourceAgent::didReceiveWebSocketHandshakeResponse):
        * inspector/InspectorResourceAgent.h:
        (InspectorResourceAgent):
        * inspector/InspectorRuntimeAgent.cpp:
        (WebCore::InspectorRuntimeAgent::evaluate):
        (WebCore::InspectorRuntimeAgent::callFunctionOn):
        (WebCore::InspectorRuntimeAgent::getProperties):
        * inspector/InspectorRuntimeAgent.h:
        (InspectorRuntimeAgent):
        * inspector/InspectorValues.h:
        (InspectorArray):
        (WebCore::InspectorArray::pushInt):
        (WebCore):
        * inspector/ScriptCallFrame.cpp:
        (WebCore::ScriptCallFrame::buildInspectorObject):
        * inspector/ScriptCallFrame.h:
        (ScriptCallFrame):
        * inspector/ScriptCallStack.cpp:
        (WebCore::ScriptCallStack::buildInspectorArray):
        * inspector/ScriptCallStack.h:
        (ScriptCallStack):

2012-03-28  Eric Seidel  <eric@webkit.org>

        setNeedsLayout(true, false) is super confusing to read and should use an enum instead
        https://bugs.webkit.org/show_bug.cgi?id=82369

        Reviewed by Julien Chaffraix.

        I replaced all uses of the markParents bool with a MarkingBehavior
        enum (which has two values: MarkContainingBlockChain and MarkOnlyThis).
        I'm not sure the naming is perfect (as it's not clear to me if markParents is
        used to mean the same thing in these 3 functions), but hopefully this code is more
        clear.  I welcome further suggested adjustment from layout experts.

        * page/FrameView.cpp:
        (WebCore::FrameView::scheduleRelayout):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::layoutBlock):
        (WebCore::RenderBlock::adjustPositionedBlock):
        (WebCore::RenderBlock::layoutBlockChildren):
        (WebCore::RenderBlock::layoutBlockChild):
        (WebCore::RenderBlock::layoutPositionedObjects):
        (WebCore::RenderBlock::markForPaginationRelayoutIfNeeded):
        (WebCore::RenderBlock::removePositionedObjects):
        (WebCore::RenderBlock::insertFloatingObject):
        (WebCore::RenderBlock::positionNewFloats):
        (WebCore::RenderBlock::markAllDescendantsWithFloatsForLayout):
        (WebCore::RenderBlock::adjustBlockChildForPagination):
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::layoutRunsAndFloats):
        (WebCore::RenderBlock::layoutInlineChildren):
        (WebCore::RenderBlock::positionNewFloatOnLine):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::positionLineBox):
        * rendering/RenderDeprecatedFlexibleBox.cpp:
        (WebCore::RenderDeprecatedFlexibleBox::layoutBlock):
        (WebCore::gatherFlexChildrenInfo):
        (WebCore::RenderDeprecatedFlexibleBox::layoutHorizontalBox):
        (WebCore::RenderDeprecatedFlexibleBox::layoutVerticalBox):
        (WebCore::RenderDeprecatedFlexibleBox::applyLineClamp):
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::prepareChildForPositionedLayout):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateScrollInfoAfterLayout):
        * rendering/RenderMedia.cpp:
        (WebCore::RenderMedia::layout):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::setPreferredLogicalWidthsDirty):
        * rendering/RenderObject.h:
        (RenderObject):
        (WebCore::RenderObject::setNeedsLayout):
        (WebCore::RenderObject::setChildNeedsLayout):
        * rendering/RenderRubyRun.cpp:
        (WebCore::RenderRubyRun::layoutSpecialExcludedChild):
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::layout):
        * rendering/RenderTableRow.cpp:
        (WebCore::RenderTableRow::layout):
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::calcRowLogicalHeight):
        (WebCore::RenderTableSection::layoutRows):
        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::layoutSpecialExcludedChild):
        * rendering/RenderTextControlSingleLine.cpp:
        (WebCore::RenderTextControlSingleLine::layout):
        * rendering/RenderView.cpp:
        (WebCore::RenderView::RenderView):
        (WebCore::RenderView::layout):
        * rendering/mathml/RenderMathMLRoot.cpp:
        (WebCore::RenderMathMLRoot::layout):
        * rendering/mathml/RenderMathMLRow.cpp:
        (WebCore::RenderMathMLRow::layout):
        * rendering/mathml/RenderMathMLSubSup.cpp:
        (WebCore::RenderMathMLSubSup::layout):
        * rendering/svg/SVGRenderSupport.cpp:
        (WebCore::SVGRenderSupport::layoutChildren):

2012-03-28  Joseph Pecoraro  <pecoraro@apple.com>

        <http://webkit.org/b/82419> Web Inspector: Create -[DOMNode inspect] from IDL

        Instead of manually creating the method in DOM.mm we can specify it in
        Node.idl and autogenerate part of the interface.

        Reviewed by Timothy Hatcher.

        * bindings/objc/DOM.mm:
        * bindings/objc/DOMPrivate.h:
        Move the call to InspectorController::inspect from here ...

        * dom/Node.h:
        * dom/Node.idl: IDL only in an ObjC block.
        * dom/Node.cpp:
        (WebCore::Node::inspect):
        ... to here.

        * WebCore.xcodeproj/project.pbxproj:
        Add the new generated file so we can Copy it in the build phase.

2012-03-28  Tommy Widenflycht  <tommyw@google.com>

        [chromium] MediaStream API (JSEP): Introducing WebPeerConnection00Handler
        https://bugs.webkit.org/show_bug.cgi?id=82450

        Reviewed by Adam Barth.

        This change removes the default PeerConnection00Handler.cpp from the Chromium build.

        A major overhaul of the existing layout tests is forthcoming.

        * WebCore.gypi:
        * platform/mediastream/PeerConnection00Handler.h:
        (WebCore):
        (PeerConnection00Handler):

2012-03-28  Robert Hogan  <robert@webkit.org>

        [REGRESSION] Web Inspector: column caption delimiters are misaligned in DataGrid
        https://bugs.webkit.org/show_bug.cgi?id=82193

        Reviewed by Yury Semikhatsky.

        Since r111742 column width in fixed layout tables is set to the width of the cell plus its left padding plus its right padding 
        plus half its left border plus half its right border in the collapsing border model. The layout of the panel
        headers in the inspector depended on pre-r111742 behaviour, so ended up misaligned with the content below. To cater for the 
        new method of calculating column width enforce a fixed width for the corner column by removing padding and borders (except collapsed
        borders from adjacent cells) and specify the expected width (15px) minus the expected width of the collapsed borders (1px).

        * inspector/front-end/dataGrid.css:
        (.data-grid th.corner):

2012-03-28  Alexis Menard  <alexis.menard@openbossa.org>

        Increase code sharing between CSSProperty and CSSPropertyLonghand.
        https://bugs.webkit.org/show_bug.cgi?id=82479

        Reviewed by Antti Koivisto.

        Use longhands declarations from CSSPropertyLonghand in CSSProperty to avoid
        code duplication.

        No new tests : refactoring only, we shouldn't have any behavior difference.

        * css/CSSProperty.cpp:
        (WebCore::resolveToPhysicalProperty):
        (WebCore::borderDirections):
        (WebCore):
        (WebCore::CSSProperty::resolveDirectionAwareProperty):

2012-03-28  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Implement snippets renaming in scripts navigator.
        https://bugs.webkit.org/show_bug.cgi?id=82477

        Reviewed by Pavel Feldman.

        Snippets renaming is implemented as editing of snippet name in scripts navigator.

        * inspector/front-end/ScriptsNavigator.js:
        (WebInspector.ScriptsNavigator.prototype._handleRenameSnippet):
        (WebInspector.ScriptsNavigator.prototype._fileRenamed):
        (WebInspector.ScriptsNavigator.prototype.rename.commitHandler):
        (WebInspector.ScriptsNavigator.prototype.rename.cancelHandler):
        (WebInspector.ScriptsNavigator.prototype.rename.afterEditing):
        (WebInspector.BaseNavigatorTreeElement.prototype.set titleText):
        * inspector/front-end/scriptsPanel.css:
        (#scripts-navigator-tabbed-pane .navigator .base-navigator-tree-element-title.editing):

2012-03-28  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Add context menu for snippets control.
        https://bugs.webkit.org/show_bug.cgi?id=82475

        Reviewed by Pavel Feldman.

        This is a preliminary implementation of snippets control using context menu.
        We might want to add a more discoverable one before taking snippets out of experiments.

        * English.lproj/localizedStrings.js:
        * inspector/front-end/ScriptsNavigator.js:
        (WebInspector.ScriptsNavigator.prototype._showScriptFoldersSettingChanged):
        (WebInspector.ScriptsNavigator.prototype._createSnippetsTree):
        (WebInspector.ScriptsNavigator.prototype._handleSnippetContextMenuEvent):
        (WebInspector.ScriptsNavigator.prototype._showSnippetContextMenu):
        (WebInspector.ScriptsNavigator.prototype._handleEvaluateSnippet):
        (WebInspector.ScriptsNavigator.prototype._handleRenameSnippet):
        (WebInspector.ScriptsNavigator.prototype._handleRemoveSnippet):
        (WebInspector.ScriptsNavigator.prototype._handleCreateSnippet):
        (WebInspector.NavigatorScriptTreeElement.prototype.get navigator):
        (WebInspector.NavigatorScriptTreeElement.prototype.onattach):
        (WebInspector.NavigatorScriptTreeElement.prototype.onenter):
        (WebInspector.NavigatorScriptTreeElement.prototype._handleContextMenuEvent):

2012-03-28  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: ScriptsNavigator should save scroll position when switching tabs.
        https://bugs.webkit.org/show_bug.cgi?id=82472

        Reviewed by Pavel Feldman.

        WebInspector.View provides save/restore scroll position capabilities.
        This patch makes them used in ScriptsNavigator.

        * inspector/front-end/ScriptsNavigator.js:
        (WebInspector.ScriptsNavigator):
        (WebInspector.ScriptsNavigator.prototype._createSnippetsTree):
        * inspector/front-end/scriptsPanel.css:
        (#scripts-navigator-tabbed-pane .tabbed-pane-content):
        (#scripts-navigator-tabbed-pane .navigator-container):

2012-03-28  Andrey Kosyakov  <caseq@chromium.org>

        Web Inspector: only update Timeline overview when really needed
        https://bugs.webkit.org/show_bug.cgi?id=81909

        Reviewed by Pavel Feldman.

        Switch timeline overview to using raw records, thus removing dependency on instance members of
        TimelinePresentationModel. This requires moving record styles/categories to static getters.

        * inspector/front-end/TimelineModel.js:
        (WebInspector.TimelineModel):
        (WebInspector.TimelineModel.startTime):
        (WebInspector.TimelineModel.endTime):
        (WebInspector.TimelineModel.duration):
        (WebInspector.TimelineModel.prototype._addRecord):
        (WebInspector.TimelineModel.prototype.reset):
        (WebInspector.TimelineModel.prototype.minimumRecordTime):
        (WebInspector.TimelineModel.prototype.maximumRecordTime):
        (WebInspector.TimelineModel.prototype._updateBoundaries):
        * inspector/front-end/TimelineOverviewPane.js:
        (WebInspector.TimelineOverviewPane):
        (WebInspector.TimelineOverviewPane.prototype._showTimelines):
        (WebInspector.TimelineOverviewPane.prototype._showMemoryGraph):
        (WebInspector.TimelineOverviewPane.prototype._setVerticalOverview):
        (WebInspector.TimelineOverviewPane.prototype._onCategoryVisibilityChanged):
        (WebInspector.TimelineOverviewPane.prototype._update):
        (WebInspector.TimelineOverviewPane.prototype._updateCategoryStrips.markPercentagesForRecord):
        (WebInspector.TimelineOverviewPane.prototype._updateCategoryStrips):
        (WebInspector.TimelineOverviewPane.prototype.windowStartTime):
        (WebInspector.TimelineOverviewPane.prototype.windowEndTime):
        (WebInspector.TimelineOverviewPane.prototype._onWindowChanged):
        (WebInspector.TimelineOverviewPane.prototype.setShowShortEvents):
        (WebInspector.TimelineOverviewPane.prototype._scheduleRefresh):
        (WebInspector.TimelineOverviewCalculator.prototype.computeBarGraphPercentages):
        (WebInspector.TimelineOverviewCalculator.prototype.setWindow):
        (WebInspector.TimelineOverviewCalculator.prototype.reset):
        (WebInspector.HeapGraph):
        (WebInspector.HeapGraph.prototype.update):
        (WebInspector.TimelineVerticalOverview):
        (WebInspector.TimelineVerticalOverview.prototype.reset):
        (WebInspector.TimelineVerticalOverview.prototype.update):
        (WebInspector.TimelineVerticalOverview.prototype.wasShown):
        (WebInspector.TimelineVerticalOverview.prototype.willHide):
        (WebInspector.TimelineVerticalOverview.prototype._aggregateFrameStatistics):
        (WebInspector.TimelineVerticalOverview.prototype._aggregateRecords):
        (WebInspector.TimelineVerticalOverview.prototype.getWindowTimes):
        (WebInspector.TimelineVerticalOverview.prototype._onRecordAdded):
        (WebInspector.TimelineAggregatedRecord):
        (WebInspector.TimelineAggregatedRecord.prototype._aggregateStatistics):
        * inspector/front-end/TimelinePanel.js:
        (WebInspector.TimelinePanel):
        (WebInspector.TimelinePanel.prototype._createStatusbarButtons):
        (WebInspector.TimelinePanel.prototype._toggleFilterButtonClicked):
        (WebInspector.TimelinePanel.prototype._resetPanel):
        (WebInspector.TimelinePanel.prototype._refresh):
        (WebInspector.TimelineCalculator):
        (WebInspector.TimelineCalculator.prototype.formatTime):
        * inspector/front-end/TimelinePresentationModel.js:
        (WebInspector.TimelinePresentationModel):
        (WebInspector.TimelinePresentationModel.categories):
        (WebInspector.TimelinePresentationModel.recordStyle):
        (WebInspector.TimelinePresentationModel.categoryForRecord):
        (WebInspector.TimelinePresentationModel.prototype.reset):
        (WebInspector.TimelinePresentationModel.prototype.addRecord):
        (WebInspector.TimelinePresentationModel.Record):
        (WebInspector.TimelinePresentationModel.Record.prototype.generatePopupContent):

2012-03-28  Arvid Nilsson  <anilsson@rim.com>

        [BlackBerry] Plumb through GraphicsLayer::contentsOpaque() to LayerTiler
        https://bugs.webkit.org/show_bug.cgi?id=82457

        Reviewed by Rob Buis.

        The LayerTiler already knows not to turn on GL_BLEND for opaque layers.
        However, it only ever sets the opaque flag for image layers and color
        layers, never for content layers.

        This was no big deal, because contentsOpaque() is currently false for
        all layers except the root layer, which we always drew using the
        BlackBerry::WebKit::BackingStore anyway.

        When we start using RenderLayerBacking::m_usingTiledCacheLayer=true on
        the root layer in situations where the BackingStore is unavailable, we
        can speed up rendering of the root layer by honouring the opaque flag.

        Fixed by plumbing through the GraphicsLayer::contentsOpaque() flag all
        the way to LayerTiler and on to Texture.

        * platform/graphics/blackberry/LayerData.h:
        (WebCore::LayerData::LayerData):
        (WebCore::LayerData::isOpaque):
        (LayerData):
        * platform/graphics/blackberry/LayerTile.cpp:
        (WebCore::LayerTile::updateContents):
        * platform/graphics/blackberry/LayerTile.h:
        (LayerTile):
        * platform/graphics/blackberry/LayerTiler.cpp:
        (WebCore::LayerTiler::updateTextureContentsIfNeeded):
        (WebCore::LayerTiler::performTileJob):
        * platform/graphics/blackberry/LayerTiler.h:
        (WebCore::LayerTiler::TextureJob::TextureJob):
        (WebCore::LayerTiler::TextureJob::updateContents):
        * platform/graphics/blackberry/LayerWebKitThread.h:
        (WebCore::LayerWebKitThread::setOpaque):
        * platform/graphics/blackberry/Texture.h:
        (Texture):
        * platform/graphics/blackberry/TextureCacheCompositingThread.cpp:
        (WebCore::TextureCacheCompositingThread::updateContents):
        * platform/graphics/blackberry/TextureCacheCompositingThread.h:
        (TextureCacheCompositingThread):

2012-03-28  Andrey Kosyakov  <caseq@chromium.org>

        Web Inspector: nuke HeapGraph.setSize(), do it automagically on update
        https://bugs.webkit.org/show_bug.cgi?id=82471

        Reviewed by Yury Semikhatsky.

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

2012-03-28  Pavel Podivilov  <podivilov@chromium.org>

        Web Inspector: dispatch console-message-added and console-messages-cleared events on UISourceCode.
        https://bugs.webkit.org/show_bug.cgi?id=82463

        Reviewed by Vsevolod Vlasov.

        Those events are related to specific UISourceCode. See bug 82224 for more details.

        * inspector/front-end/DebuggerPresentationModel.js:
        (WebInspector.DebuggerPresentationModel):
        (WebInspector.DebuggerPresentationModel.prototype._addConsoleMessageToScript):
        (WebInspector.DebuggerPresentationModel.prototype._consoleCleared):
        (WebInspector.DebuggerPresentationModel.prototype._debuggerReset):
        (WebInspector.UISourceCodeImpl):
        (WebInspector.UISourceCodeImpl.prototype.consoleMessages):
        (WebInspector.UISourceCodeImpl.prototype.consoleMessageAdded):
        (WebInspector.UISourceCodeImpl.prototype.consoleMessagesCleared):
        * inspector/front-end/JavaScriptSourceFrame.js:
        (WebInspector.JavaScriptSourceFrame):
        (WebInspector.JavaScriptSourceFrame.prototype.beforeTextChanged):
        (WebInspector.JavaScriptSourceFrame.prototype._consoleMessageAdded):
        (WebInspector.JavaScriptSourceFrame.prototype._consoleMessagesCleared):
        (WebInspector.JavaScriptSourceFrame.prototype._onTextViewerContentLoaded):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype._sourceFrameLoaded):
        * inspector/front-end/UISourceCode.js:
        (WebInspector.UISourceCode.prototype.breakpoints):
        (WebInspector.UISourceCode.prototype.consoleMessages):

2012-03-28  Carlos Garcia Campos  <cgarcia@igalia.com>

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

        Reviewed by Xan Lopez.

        * GNUmakefile.list.am: Remove PluginDataGtk.cpp. The same
        functionality is now implemented using platform strategies.
        * plugins/gtk/PluginDataGtk.cpp: Removed.

2012-03-28  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: [Regression] TabIndex is not correctly restored after editing.
        https://bugs.webkit.org/show_bug.cgi?id=82464

        Reviewed by Pavel Feldman.

        This fixes incorrect usage of isNaN that returns false for null value.
        Drive-by javascript compilation fix.

        * inspector/front-end/CompilerScriptMapping.js:
        (WebInspector.CompilerScriptMapping.prototype.addScript): compilation fix.
        * inspector/front-end/ResourceScriptMapping.js:
        (WebInspector.ResourceScriptMapping.prototype._uiSourceCodeChanged): compilation fix.
        * inspector/front-end/SnippetsModel.js:
        (WebInspector.SnippetsScriptMapping.prototype._createUISourceCodeForScript): compilation fix.
        * inspector/front-end/UIUtils.js:
        (WebInspector.startEditing.cleanUpAfterEditing): incorrect usage of isNaN fix.

2012-03-28  Yi Shen  <yi.4.shen@nokia.com>

        An extra line break is inserted when pasting into a font element.
        https://bugs.webkit.org/show_bug.cgi?id=71207

        Reviewed by Ryosuke Niwa.

        Fix an editing bug where inserting text into a font element would
        create an extra div element in the dom tree. The
        WebCore::positionAvoidingPrecedingNodes() tries to set the correct
        destination position by checking the next visible position, however,
        it causes the position moves into the child element in somecase.
        Instead, we should only check the position in parent after node.

        Test: editing/inserting/insert-text-into-font.html

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

2012-03-28  Sergio Villar Senin  <svillar@igalia.com>

        [Soup] DNS prefetching spams resolver, shoots self in the foot
        https://bugs.webkit.org/show_bug.cgi?id=41630

        Reviewed by Martin Robinson.

        Added generic DNSResolveQueue class to throttle DNS
        prefetches. It's an abstract refactoring of CFNET's
        DNSResolveQueue. Platform specific methods implemented for soup
        and CFNET backends.

        No new tests required as we're just refactoring existing code to
        be used by two different ports.

        * CMakeLists.txt: added new file.
        * GNUmakefile.list.am: ditto.
        * WebCore.vcproj/WebCore.vcproj: ditto.
        * WebCore.xcodeproj/project.pbxproj: ditto.
        * platform/network/DNSResolveQueue.cpp: Added.
        (WebCore):
        (WebCore::DNSResolveQueue::add): adds a new host to be prefetched.
        (WebCore::DNSResolveQueue::fired): by using a delay we coalesce
        several prefetch requests and try to resolve them all here.
        * platform/network/DNSResolveQueue.h: Added.
        (WebCore):
        (DNSResolveQueue): class that implements DNS prefetch
        throttling using a template pattern.
        (WebCore::DNSResolveQueue::shared):
        (WebCore::DNSResolveQueue::decrementRequestCount):
        * platform/network/cf/DNSCFNet.cpp:
        (WebCore::DNSResolveQueue::platformProxyIsEnabledInSystemPreferences):
        (WebCore::DNSResolveQueue::platformResolve):
        * platform/network/soup/DNSSoup.cpp:
        (WebCore):
        (WebCore::DNSResolveQueue::platformProxyIsEnabledInSystemPreferences):
        (WebCore::resolvedCallback):
        (WebCore::DNSResolveQueue::platformResolve):
        (WebCore::prefetchDNS):

2012-03-28  Eugene Girard  <girard@chromium.org>

        window.scrollBy() scrolls incorrectly when zoomed in/out
        https://bugs.webkit.org/show_bug.cgi?id=45228

        Reviewed by Simon Fraser.

        scrollBy now uses layout (not CSS) units. (As scrollTo does.)

        Test: fast/dom/zoom-scroll-page-test.html

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

2012-03-28  Stephen Chenney  <schenney@chromium.org>

        Null dereference in SVGTextElement::animatedLocalTransform()
        https://bugs.webkit.org/show_bug.cgi?id=82375

        Reviewed by Nikolas Zimmermann.

        A poorly structured SVG file with a text element inside an
        animatedTransform element leaves the text element placed outside of
        the SVG root and it has no renderer(). Later attempts to use the
        renderer in animatedLocalTransform fail.

        Test: svg/custom/get-text-element-transform-crash.html

        * svg/SVGTextElement.cpp:
        (WebCore::SVGTextElement::animatedLocalTransform): Added a check for null renderer, and do not check
        for style transform if there is no renderer.

2012-03-27  Nikolas Zimmermann  <nzimmermann@rim.com>

        Enable animVal support for SVGAnimatedPreserveAspectRatio
        https://bugs.webkit.org/show_bug.cgi?id=82326

        Reviewed by Zoltan Herczeg.

        Enable animVal support for SVGAnimatedPreserveAspectRatio. Very simple now that everything is prepared.
        All we have to do is add startAnimValAnimation/etc. methods to SVGAnimatedPreserveAspectRatioAnimator.

        Modernize SVGPreserveAspectRatio, align parsing this object from String, with the other SVG DOM primitives,
        who supply a "void parse(const String&)" method, for this task.

        Extended existing tests to cover this.

        * svg/SVGAnimatedPreserveAspectRatio.cpp:
        (WebCore::SVGAnimatedPreserveAspectRatioAnimator::constructFromString):
        (WebCore::SVGAnimatedPreserveAspectRatioAnimator::startAnimValAnimation):
        (WebCore::SVGAnimatedPreserveAspectRatioAnimator::stopAnimValAnimation):
        (WebCore::SVGAnimatedPreserveAspectRatioAnimator::resetAnimValToBaseVal):
        (WebCore::SVGAnimatedPreserveAspectRatioAnimator::animValWillChange):
        (WebCore::SVGAnimatedPreserveAspectRatioAnimator::animValDidChange):
        * svg/SVGAnimatedPreserveAspectRatio.h:
        (SVGAnimatedPreserveAspectRatioAnimator):
        * svg/SVGAnimatedType.cpp:
        (WebCore::SVGAnimatedType::valueAsString):
        (WebCore::SVGAnimatedType::setValueAsString):
        (WebCore::SVGAnimatedType::supportsAnimVal):
        * svg/SVGFEImageElement.cpp:
        (WebCore::SVGFEImageElement::parseAttribute):
        * svg/SVGFitToViewBox.cpp:
        (WebCore::SVGFitToViewBox::parseAttribute):
        * svg/SVGImageElement.cpp:
        (WebCore::SVGImageElement::parseAttribute):
        * svg/SVGPreserveAspectRatio.cpp:
        (WebCore::SVGPreserveAspectRatio::parse):
        (WebCore):
        * svg/SVGPreserveAspectRatio.h:
        (SVGPreserveAspectRatio):
        * svg/SVGViewSpec.cpp:
        (WebCore::SVGViewSpec::setPreserveAspectRatioString):
        (WebCore::SVGViewSpec::parseViewSpec):

2012-03-28  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: [v8] inspection of CanvasPixelArray is slow.
        https://bugs.webkit.org/show_bug.cgi?id=82455

        Reviewed by Vsevolod Vlasov.

        Added CanvasPixelArray to the list of classes that we consider
        arrays.

        * bindings/v8/custom/V8InjectedScriptHostCustom.cpp:
        (WebCore::V8InjectedScriptHost::typeCallback):

2012-03-28  Leandro Gracia Gil  <leandrogracia@chromium.org>

        Selectively retrieve text content around a given position.
        https://bugs.webkit.org/show_bug.cgi?id=78361

        Reviewed by Ryosuke Niwa.

        Tests: a new layout test will be introduced once the required WebKit API code is ready.

        Introduce the DOMTextContentWalker class to selectively retrieve content
        around a given VisiblePosition into a string in such a way that a text
        Range can be extracted later from a pair of the string's positions.

        A new boolean called m_shouldStop is also introduced in the TextIterator to force
        it advancing under certain conditions. Although this is usually done by setting
        m_positionNode to zero, it can't be applied in this case since by doing so the
        iterator's range is lost.

        * WebCore.gypi:
        * editing/SurroundingText.cpp: Added.
        (WebCore):
        (WebCore::SurroundingText::SurroundingText):
        (WebCore::SurroundingText::rangeFromContentOffsets):
        (WebCore::SurroundingText::content):
        (WebCore::SurroundingText::positionOffsetInContent):
        * editing/SurroundingText.h: Added.
        (WebCore):
        (SurroundingText):
        * editing/TextIterator.cpp:
        (WebCore::TextIterator::TextIterator):
        (WebCore::TextIterator::advance):
        (WebCore::SimplifiedBackwardsTextIterator::SimplifiedBackwardsTextIterator):
        (WebCore::SimplifiedBackwardsTextIterator::advance):
        * editing/TextIterator.h:
        (WebCore::TextIterator::atEnd):
        (TextIterator):
        (WebCore::SimplifiedBackwardsTextIterator::atEnd):
        (SimplifiedBackwardsTextIterator):
        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLFormControlElement::enclosingFormControlElement):
        (WebCore):
        * html/HTMLFormControlElement.h:
        (HTMLFormControlElement):

2012-03-28  Alexis Menard  <alexis.menard@openbossa.org>

        Speed up updates of existing CSS properties from JS.
        https://bugs.webkit.org/show_bug.cgi?id=82235

        Reviewed by Andreas Kling.

        Improve the way we handle updating an existing CSS property by replacing its value
        by the new one rather than removing the old value and then adding the new one. This
        speed up by 35% PerformanceTests/CSS/CSSPropertyUpdateValue.html.

        No new tests : Updating existing tests that were relying on the order of the properties
        after modification. Each updated property is not appended to the list of properties of the
        style therefore the cssText value is slightly different. It matches Firefox behavior but not
        Opera.

        * css/StylePropertySet.cpp:
        (WebCore::StylePropertySet::addParsedProperty):

2012-03-28  Leo Yang  <leo.yang@torchmobile.com.cn>

        [BlackBerry] Remove PlatformMouseEvent::setClickCount for BlackBerry
        https://bugs.webkit.org/show_bug.cgi?id=82422

        Reviewed by Rob Buis.

        PlatformMouseEvent::setClickCount() is never used by BlackBerry.
        The declaration was added in PlatformMouseEvent.h internally for
        BlackBerry porting, but it has not been upstreamed yet.

        * platform/blackberry/PlatformMouseEventBlackBerry.cpp:

2012-03-27  Antti Koivisto  <antti@apple.com>

        Separate @import rules from other rules in CSSStyleSheet
        https://bugs.webkit.org/show_bug.cgi?id=82384 

        Reviewed by Andreas Kling.

        Import rules always come before all other rules (except @charset). They currently live 
        in the generic child rule vector. They can be moved to a vector of their own for stronger
        typing and more focused traversal. This will also make future refactoring easier.
        
        - @import rules go to m_importRules
        - the rest go to m_childRules
        
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::collectMatchingRulesForList):
        * css/CSSStyleSheet.cpp:
        (WebCore::CSSStyleSheet::parserAppendRule):
        (WebCore::CSSStyleSheet::length):
        (WebCore::CSSStyleSheet::item):
        (WebCore::CSSStyleSheet::clearRules):
        (WebCore::CSSStyleSheet::rules):
        (WebCore::CSSStyleSheet::insertRule):
        (WebCore::CSSStyleSheet::deleteRule):
        (WebCore::CSSStyleSheet::isLoading):
        (WebCore::CSSStyleSheet::addSubresourceStyleURLs):
        * css/CSSStyleSheet.h:
        (WebCore):
        (CSSStyleSheet):
        (WebCore::CSSStyleSheet::childRules):
        (WebCore::CSSStyleSheet::importRules):

2012-03-28  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: REGRESSION: Stack overflow on the page with > 100kloc
        https://bugs.webkit.org/show_bug.cgi?id=82436

        Reviewed by Yury Semikhatsky.

        This change migrates to manual splice implementation that uses additional
        information about the range being inserted to make it work faster / allocate
        less memory.

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

2012-03-28  Pavel Podivilov  <podivilov@chromium.org>

        Web Inspector: breakpoints are not shown in sidebar pane after reload.
        https://bugs.webkit.org/show_bug.cgi?id=82351

        Reviewed by Pavel Feldman.

        When UISourceCode is added to ScriptsPanel, it could already have breakpoints.
        We should iterate over existing breakpoints and add them to sidebar pane.

        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype._uiSourceCodeAdded):

2012-03-28  Li Yin  <li.yin@intel.com>

        [WebSocket]The Sec-WebSocket-Protocol must not appear more than once in an HTTP response
        https://bugs.webkit.org/show_bug.cgi?id=82432

        Reviewed by Kent Tamura.

        From RFC6455: http://tools.ietf.org/html/rfc6455#section-11.3.4
        The |Sec-WebSocket-Protocol| header field must not appear 
        more than once in an HTTP response.

        Test: http/tests/websocket/tests/hybi/handshake-fail-by-more-protocol-header.html

        * Modules/websockets/WebSocketHandshake.cpp:
        (WebCore::WebSocketHandshake::readHTTPHeaders):

2012-03-27  James Robinson  <jamesr@chromium.org>

        [chromium] Transfer wheel fling via WebCompositorInputHandlerClient
        https://bugs.webkit.org/show_bug.cgi?id=81740

        Reviewed by Adrienne Walker.

        Adds the ability to construct an in-progress PlatformGestureAnimation.

        * platform/ActivePlatformGestureAnimation.cpp:
        (WebCore::ActivePlatformGestureAnimation::create):
        (WebCore):
        (WebCore::ActivePlatformGestureAnimation::ActivePlatformGestureAnimation):
        * platform/ActivePlatformGestureAnimation.h:
        (ActivePlatformGestureAnimation):
        * platform/TouchpadFlingPlatformGestureCurve.cpp:
        (WebCore::TouchpadFlingPlatformGestureCurve::create):
        (WebCore::TouchpadFlingPlatformGestureCurve::TouchpadFlingPlatformGestureCurve):
        * platform/TouchpadFlingPlatformGestureCurve.h:
        (TouchpadFlingPlatformGestureCurve):

2012-03-27  Nat Duca  <nduca@chromium.org>

        [chromium] Route monotonic clock up from compositor
        https://bugs.webkit.org/show_bug.cgi?id=82154

        Reviewed by James Robinson.

        * platform/graphics/chromium/cc/CCLayerTreeHost.cpp:
        (WebCore::CCLayerTreeHost::updateAnimations):
        * platform/graphics/chromium/cc/CCLayerTreeHost.h:
        (CCLayerTreeHost):
        * platform/graphics/chromium/cc/CCThreadProxy.cpp:
        (WebCore::CCThreadProxy::scheduledActionBeginFrame):
        (WebCore::CCThreadProxy::beginFrame):
        * platform/graphics/chromium/cc/CCThreadProxy.h:
        (WebCore::CCThreadProxy::BeginFrameAndCommitState::BeginFrameAndCommitState):
        (BeginFrameAndCommitState):

2012-03-27  Robin Cao  <robin.cao@torchmobile.com.cn>

        [BlackBerry] Upstream LayerAnimation.{cpp, h}
        https://bugs.webkit.org/show_bug.cgi?id=80123

        Reviewed by Rob Buis.

        Initial upstream, no new tests.

        * platform/graphics/blackberry/LayerAnimation.cpp: Added.
        (WebCore):
        (WebCore::solveEpsilon):
        (WebCore::solveCubicBezierFunction):
        (WebCore::solveStepsFunction):
        (WebCore::timingFunctionForAnimationValue):
        (WebCore::progress):
        (WebCore::fetchIntervalEndpoints):
        (WebCore::LayerAnimation::apply):
        (WebCore::LayerAnimation::blendTransform):
        (WebCore::LayerAnimation::blendOpacity):
        (WebCore::LayerAnimation::validateTransformLists):
        * platform/graphics/blackberry/LayerAnimation.h: Added.
        (WebCore):
        (LayerAnimation):
        (WebCore::LayerAnimation::create):
        (WebCore::LayerAnimation::clone):
        (WebCore::LayerAnimation::~LayerAnimation):
        (WebCore::LayerAnimation::name):
        (WebCore::LayerAnimation::setStartTime):
        (WebCore::LayerAnimation::idFromAnimation):
        (WebCore::LayerAnimation::isEqualToAnimation):
        (WebCore::LayerAnimation::id):
        (WebCore::LayerAnimation::property):
        (WebCore::LayerAnimation::boxSize):
        (WebCore::LayerAnimation::timeOffset):
        (WebCore::LayerAnimation::startTime):
        (WebCore::LayerAnimation::valueCount):
        (WebCore::LayerAnimation::timingFunction):
        (WebCore::LayerAnimation::duration):
        (WebCore::LayerAnimation::iterationCount):
        (WebCore::LayerAnimation::direction):
        (WebCore::LayerAnimation::valueAt):
        (WebCore::LayerAnimation::LayerAnimation):

2012-03-27  Kenichi Ishibashi  <bashi@chromium.org>

        [Chromium] Uninitialized access in SimpleFontDataSkia::platformInit
        https://bugs.webkit.org/show_bug.cgi?id=82411

        Reviewed by Kent Tamura.

        SimpleFontDataSkia::platformInit() could call widthForGlyph(), which
        accesses m_zeroWidthSpaceGlyph. This causes a valgrind memcheck error
        because m_zeroWidthSpaceGlyph isn't initialized at this point.
        Initialize m_zeroWidthSpaceGlyph with zero so that widthForGlyph() can
        return appropriate value(The value zero here means "unknown glyph").

        No new tests. I manually confirmed this change fixes the valgrind
        memcheck error.

        * platform/graphics/skia/SimpleFontDataSkia.cpp:
        (WebCore::SimpleFontData::platformInit):

2012-03-27  YoungTaeck Song  <youngtaeck.song@samsung.com>

        [EFL][WK2] Add RunLoopEfl and WorkQueueEfl
        https://bugs.webkit.org/show_bug.cgi?id=62777

        Reviewed by Hajime Morita.

        Add initial version RunLoopEfl for WebKit2 Efl.

        * platform/RunLoop.h:
        (TimerBase):
        (RunLoop):
        * platform/efl/RunLoopEfl.cpp:
        (WebCore::RunLoop::RunLoop):
        (WebCore::RunLoop::~RunLoop):
        (WebCore):
        (WebCore::RunLoop::run):
        (WebCore::RunLoop::stop):
        (WebCore::RunLoop::wakeUpEvent):
        (WebCore::RunLoop::wakeUp):
        (WebCore::RunLoop::TimerBase::TimerBase):
        (WebCore::RunLoop::TimerBase::~TimerBase):
        (WebCore::RunLoop::TimerBase::timerFired):
        (WebCore::RunLoop::TimerBase::start):
        (WebCore::RunLoop::TimerBase::stop):
        (WebCore::RunLoop::TimerBase::isActive):

2012-03-27  Benjamin Poulain  <bpoulain@apple.com>

        Reinforce Geolocation to prevent accidental leak of the user position
        https://bugs.webkit.org/show_bug.cgi?id=82396

        Reviewed by Adam Barth.

        It is very important not to provide the position of the user to a page
        unless the user authorize it.

        The code used to make it easy to cause such problems, because any part
        of the Geolocation object could invoke the success callback directly.

        This patch add encapsulation for all the attributes of GeoNotifier,
        and add extra guards for the two callbacks.

        In the case of the success callback, we do one extra check before sending
        the value to the bindings.

        * Modules/geolocation/Geolocation.cpp:
        (WebCore::Geolocation::GeoNotifier::runSuccessCallback):
        (WebCore::Geolocation::GeoNotifier::runErrorCallback):
        (WebCore):
        (WebCore::Geolocation::GeoNotifier::stopTimer):
        (WebCore::Geolocation::GeoNotifier::timerFired):
        (WebCore::Geolocation::startRequest):
        (WebCore::Geolocation::sendError):
        (WebCore::Geolocation::sendPosition):
        (WebCore::Geolocation::stopTimer):
        (WebCore::Geolocation::extractNotifiersWithCachedPosition):
        (WebCore::Geolocation::startUpdating):
        * Modules/geolocation/Geolocation.h:
        (WebCore::Geolocation::isAllowed):
        (Geolocation):
        (GeoNotifier):
        (WebCore::Geolocation::GeoNotifier::options):
        (WebCore::Geolocation::GeoNotifier::useCachedPosition):

2012-03-27  Kausalya Madhusudhanan  <kmadhusu@chromium.org>

        [Coverity] Address some uninitialized constructor values.
        https://bugs.webkit.org/show_bug.cgi?id=82376

        Reviewed by James Robinson.

        New tests are not required since I did not modify any code behavior.

        * html/shadow/MediaControlRootElementChromium.cpp:
        (WebCore::MediaControlRootElementChromium::MediaControlRootElementChromium):
        * inspector/InspectorIndexedDBAgent.h:
        (InspectorIndexedDBAgent):
        * inspector/InspectorTimelineAgent.cpp:
        (WebCore::InspectorTimelineAgent::InspectorTimelineAgent):
        * page/scrolling/ScrollingCoordinator.cpp:
        (WebCore::ScrollingCoordinator::ScrollingCoordinator):
        * platform/ScrollAnimatorNone.cpp:
        (WebCore::ScrollAnimatorNone::ScrollAnimatorNone):
        * platform/chromium/DataTransferItemChromium.cpp:
        (WebCore::DataTransferItemChromium::DataTransferItemChromium):
        * platform/graphics/skia/ImageBufferSkia.cpp:
        (WebCore::ImageBuffer::ImageBuffer):
        * storage/StorageTask.cpp:
        (WebCore::StorageTask::StorageTask):

2012-03-27  Alexis Menard  <alexis.menard@openbossa.org>

        Simplify CSSPropertyBorderSpacing parsing.
        https://bugs.webkit.org/show_bug.cgi?id=82397

        Reviewed by Benjamin Poulain.

        Remove the local array of longhand properties as it doesn't really
        bring much in this simple parsing algorithm.

        No new tests, no functionality change intended.

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

2012-03-27  Anders Carlsson  <andersca@apple.com>

        Fix race condition when initializing the scrolling thread
        https://bugs.webkit.org/show_bug.cgi?id=82398
        <rdar://problem/11002166>

        Reviewed by Sam Weinig.

        Lock m_initializeRunLoopConditionMutex when assigning m_threadIdentifier since we're
        asserting that it's not null in the scrolling thread.

        * page/scrolling/ScrollingThread.cpp:
        (WebCore::ScrollingThread::createThreadIfNeeded):

2012-03-27  Luke Macpherson  <macpherson@chromium.org>

        Add assertions to valueForLength() and RenderBox::computeLogicalWidthInRegionUsing() to help with debugging.
        https://bugs.webkit.org/show_bug.cgi?id=82393

        Reviewed by Eric Seidel.

        No new tests / adding assetions only.

        * css/LengthFunctions.cpp:
        (WebCore::valueForLength):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::computeLogicalWidthInRegionUsing):

2012-03-27  Tony Chang  <tony@chromium.org>

        use the correct size when computing flex-pack space
        https://bugs.webkit.org/show_bug.cgi?id=82378

        Reviewed by Ojan Vafai.

        Fix 2 bugs:
        - We weren't properly updating available space before computing
          packing space. If a min/max is not hit, we still need to adjust
          the available free space.
        - For flex-pack:end, we need to put the overflow in the start edge.

        New test cases in css3/flexbox/flex-pack.html

        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::resolveFlexibleLengths):
        (WebCore::initialPackingOffset):

2012-03-27  Dana Jansens  <danakj@chromium.org>

        [chromium] Unknown transforms should be treated as non-axis aligned on main thread
        https://bugs.webkit.org/show_bug.cgi?id=82370

        Reviewed by Adrienne Walker.

        On main thread, animating transforms have "unknown" values as they are changing
        out of sync on the impl thread. So treat them as non-axis-aligned since they
        may be, when deciding to create a render surface.

        In addition, since surfaces are cheap on main thread, create one for all layers
        with animating transforms and a drawing descendant, as this allows paint culling
        within the layer's subtree (the animated transform won't affect drawTransforms
        inside the subtree).

        Also renamed the layerIsInAnimatingSubtreeFor* to animatingTransformTo*.
        The old name made me pause and think what it meant and I'm the one who
        created it. Hopefully this is more clear.

        Unit test: CCLayerTreeHostCommonTest.verifyAnimationsForRenderSurfaceHierarchy

        * platform/graphics/chromium/cc/CCLayerTreeHostCommon.cpp:
        (WebCore::transformToParentIsKnown):
        (WebCore):
        (WebCore::subtreeShouldRenderToSeparateSurface):
        (WebCore::calculateDrawTransformsAndVisibilityInternal):

2012-03-27  Dirk Pranke  <dpranke@chromium.org>

        Re-land r112277; reverting it doesn't seem to have fixed anything.

        Unreviewed, build fix.

        * svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::insertedIntoDocument):
        (WebCore::SVGUseElement::svgAttributeChanged):
        (WebCore::SVGUseElement::willRecalcStyle):
        (WebCore::SVGUseElement::finishParsingChildren):
        * xml/XMLErrors.cpp:
        (WebCore::XMLErrors::insertErrorMessageBlock):

2012-03-27  Dana Jansens  <danakj@chromium.org>

        [chromium] Rename opaqueContentsRegion() to visibleContentOpaqueRegion()
        https://bugs.webkit.org/show_bug.cgi?id=81689

        Reviewed by Adrienne Walker.

        The return value from this function is a region of opaque pixels in the
        layer's content space that intersect with its visible rect. Rather than
        adding a comment to this effect, renaming the method to make it clear.

        * platform/graphics/chromium/LayerChromium.h:
        (WebCore::LayerChromium::visibleContentOpaqueRegion):
        * platform/graphics/chromium/TiledLayerChromium.cpp:
        (WebCore::TiledLayerChromium::visibleContentOpaqueRegion):
        * platform/graphics/chromium/TiledLayerChromium.h:
        * platform/graphics/chromium/cc/CCLayerImpl.h:
        (WebCore::CCLayerImpl::visibleContentOpaqueRegion):
        * platform/graphics/chromium/cc/CCOcclusionTracker.cpp:
        (WebCore::computeOcclusionBehindLayer):
        * platform/graphics/chromium/cc/CCTiledLayerImpl.cpp:
        (WebCore::CCTiledLayerImpl::visibleContentOpaqueRegion):
        * platform/graphics/chromium/cc/CCTiledLayerImpl.h:
        (CCTiledLayerImpl):

2012-03-27  James Robinson  <jamesr@chromium.org>

        Scrollable plugins not registered properly in ScrollingCoordinator
        https://bugs.webkit.org/show_bug.cgi?id=82163

        Reviewed by Anders Carlsson.

        Whenever a ScrollableArea is added or removed from a FrameView's ScrollableAreaSet, we have to recalculate the
        nonFastScrollableRegion. This can happen for certain types of plugins that are scrollable.

        This also reverts 112142 which was a not quite right way to handle these plugins.

        * page/FrameView.cpp:
        (WebCore::FrameView::addScrollableArea):
        (WebCore::FrameView::removeScrollableArea):
        * page/scrolling/ScrollingCoordinator.cpp:
        (WebCore::computeNonFastScrollableRegion):
        (WebCore::ScrollingCoordinator::frameViewScrollableAreasDidChange):
        (WebCore):
        * page/scrolling/ScrollingCoordinator.h:
        (ScrollingCoordinator):
        * plugins/PluginViewBase.h:

2012-03-27  Adam Klein  <adamk@chromium.org>

        Hold a reference to refChild in insertBefore before calling collectChildrenAndRemoveFromOldParent
        https://bugs.webkit.org/show_bug.cgi?id=82377

        Reviewed by Ryosuke Niwa.

        This fixes a regression from r111925.

        Test: fast/dom/insertBefore-refChild-crash.html

        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::insertBefore): Move the 'next' RefPtr above the call to
        collectChildrenAndRemoveFromOldParent and rename refChildPreviousSibling
        to 'prev' (matching appendChild and replaceChild).

2012-03-27  Ryosuke Niwa  <rniwa@webkit.org>

        cssText should not generate literal 'initial' in shorthand properties
        https://bugs.webkit.org/show_bug.cgi?id=82364

        Reviewed by Antti Koivisto.

        Fixed the bug by treating initial value as if the value is not set.
        While this is incorrect for properties that inherits by default,
        it's strictly better than generating unparsable value as we do today.

        The proper fix is for CSSInitialValue::cssText to fetch the respective
        default value from what's currently in CSSStyleSelector code but that requires
        a considerable amount of refactoring and work.

        * css/StylePropertySet.cpp:
        (WebCore::StylePropertySet::getShorthandValue):
        (WebCore::StylePropertySet::getCommonValue):

2012-03-26  Adam Klein  <adamk@chromium.org>

        Always set V8 wrappers via V8DOMWrapper::setJSWrapperFor* instead of WeakReferenceMap::set()
        https://bugs.webkit.org/show_bug.cgi?id=82256

        Reviewed by Adam Barth.

        This moves leakRef() calls out of generated code, centralizing them in
        V8DOMWrapper implementation. Ideally, WeakReferenceMap::set would take
        PassRefPtrs, but that's tricky given that some WeakReferenceMap's KeyType is 'void'
        (which clearly can't be wrapped in a PassRefPtr).

        Updated binding tests to reflect changes in CodeGeneratorV8.pm, no change in behavior.

        Relanding r112207 with setJSWrapperForDOMSVGElementInstance defined
        out-of-line to avoid SVG header dependencies.

        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateConstructorCallback): Use GetDomMapFunction instead of custom logic.
        (GenerateNamedConstructorCallback): ditto.
        (GenerateToV8Converters): Call V8DOMWrapper::setJSWrapper* method
        instead of directly accessing the wrapper maps and calling set.
        (GetDomMapFunction): Refactored to call new GetDomWrapperMapName function.
        (GetDomWrapperMapName): Helper pulled out of GetDomMapFunction.
        * bindings/scripts/test/V8/V8Float64Array.cpp:
        (WebCore::V8Float64Array::wrapSlow):
        * bindings/scripts/test/V8/V8TestActiveDOMObject.cpp:
        (WebCore::V8TestActiveDOMObject::wrapSlow):
        * bindings/scripts/test/V8/V8TestCustomNamedGetter.cpp:
        (WebCore::V8TestCustomNamedGetter::wrapSlow):
        * bindings/scripts/test/V8/V8TestEventConstructor.cpp:
        (WebCore::V8TestEventConstructor::wrapSlow):
        * bindings/scripts/test/V8/V8TestEventTarget.cpp:
        (WebCore::V8TestEventTarget::wrapSlow):
        * bindings/scripts/test/V8/V8TestInterface.cpp:
        (WebCore::V8TestInterface::wrapSlow):
        * bindings/scripts/test/V8/V8TestMediaQueryListListener.cpp:
        (WebCore::V8TestMediaQueryListListener::wrapSlow):
        * bindings/scripts/test/V8/V8TestNamedConstructor.cpp:
        (WebCore::V8TestNamedConstructor::wrapSlow):
        * bindings/scripts/test/V8/V8TestObj.cpp:
        (WebCore::V8TestObj::wrapSlow):
        * bindings/scripts/test/V8/V8TestSerializedScriptValueInterface.cpp:
        (WebCore::V8TestSerializedScriptValueInterface::wrapSlow):
        * bindings/v8/V8DOMWrapper.cpp: Moved setJSWrapperForDOMNode method to header to inline it.
        (WebCore::V8DOMWrapper::setJSWrapperForDOMSVGElementInstance): New helper method for SVGElementInstances.
        Not inline to avoid header dependency on SVGElementInstance.h.
        * bindings/v8/V8DOMWrapper.h:
        (V8DOMWrapper):
        (WebCore::V8DOMWrapper::setJSWrapperForDOMObject): Made inline.
        (WebCore::V8DOMWrapper::setJSWrapperForActiveDOMObject): ditto.
        (WebCore::V8DOMWrapper::setJSWrapperForDOMNode): Refactored into two methods;
        this one handles non-active Nodes.
        (WebCore::V8DOMWrapper::setJSWrapperForActiveDOMNode): Pulled out of previouse
        DOMNode method, now handles only active Nodes.

2012-03-27  Levi Weintraub  <leviw@chromium.org>

        Correct LayoutUnit usage in virtual function layoutBlock in RenderFlexibleBox
        https://bugs.webkit.org/show_bug.cgi?id=82344

        Reviewed by Eric Seidel.

        Correcting the signature of RenderFlexibleBox::layoutBlock to use a LayoutUnit
        for the page height, and avoiding assigning the renderer's size to an IntSize.

        No new tests. No change in behavior.

        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::layoutBlock):
        * rendering/RenderFlexibleBox.h:
        (RenderFlexibleBox):

2012-03-27  Timothy Hatcher  <timothy@apple.com>

        Make WebKit properly load a staged framework when soft linking.

        https://webkit.org/b/82371
        rdar://problem/11125989

        Reviewed by Dan Bernstein.

        * platform/mac/SoftLinking.h: Replaced SOFT_LINK_PRIVATE_FRAMEWORK_OPTIONAL with
        SOFT_LINK_STAGED_FRAMEWORK_OPTIONAL and made it use the StagedFrameworks path
        if the first dlopen failed.

2012-03-26  Dirk Schulze  <krit@webkit.org>

        Use enumeration for CSS parser mode
        https://bugs.webkit.org/show_bug.cgi?id=82056

        Reviewed by Antti Koivisto.

        Introduce a new CSSParserMode enum to differ between strict / quirks and SVG presentation
        attribute parsing modes.
        The followup patch will make use of the enum in all other classes.
        After that it will be easier possible to reuse the CSS parser in SVG as much as possible and
        introduce SVG specific functionality.

        No new tests. No change on functionality yet. This is just a refactoring to use the enumeration.

        * GNUmakefile.list.am: Added new file CSSParserMode.h with the new enum, which can be used by any caller of CSSParser, CSSStyleSheet and others.
        * Target.pri: Ditto.
        * WebCore.gypi: Ditto.
        * WebCore.vcproj/WebCore.vcproj: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Ditto.
        * css/CSSGrammar.y: Make use of the new enumeration.
        * css/CSSParser.cpp: Replaced boolean by enumeration. No change of functionality at this point of time.
        (WebCore::CSSParser::inStrictMode): Helper function.
        (WebCore):
        (WebCore::CSSParser::inQuirksMode): Helper function.
        (WebCore::CSSParser::CSSParser):
        (WebCore::CSSParser::validUnit):
        (WebCore::CSSParser::checkForOrphanedUnits):
        (WebCore::CSSParser::parseValue):
        (WebCore::CSSParser::parseSizeParameter):
        (WebCore::CSSParser::parseBackgroundColor):
        (WebCore::CSSParser::parseFillPositionX):
        (WebCore::CSSParser::parseFillPositionY):
        (WebCore::CSSParser::parseFillPositionComponent):
        (WebCore::CSSParser::parseFillSize):
        (WebCore::CSSParser::parseAnimationDelay):
        (WebCore::CSSParser::parseAnimationDuration):
        (WebCore::CSSParser::parseAnimationIterationCount):
        (WebCore::CSSParser::parseTransformOriginShorthand):
        (WebCore::CSSParser::parseCubicBezierTimingFunctionValue):
        (WebCore::CSSParser::parseAnimationTimingFunction):
        (WebCore::CSSParser::parseGridTrackList):
        (WebCore::CSSParser::parseDashboardRegions):
        (WebCore::CSSParser::parseShape):
        (WebCore::CSSParser::parseWrapShapeRect):
        (WebCore::CSSParser::parseWrapShapeCircle):
        (WebCore::CSSParser::parseWrapShapeEllipse):
        (WebCore::CSSParser::parseWrapShapePolygon):
        (WebCore::CSSParser::parseFont):
        (WebCore::CSSParser::parseFontWeight):
        (WebCore::CSSParser::parseColorParameters):
        (WebCore::CSSParser::parseHSLParameters):
        (WebCore::CSSParser::parseColorFromValue):
        (WebCore::CSSParser::parseShadow):
        (WebCore::CSSParser::parseReflect):
        (WebCore::CSSParser::parseFlex):
        (WebCore::CSSParser::parseBorderImageSlice):
        (WebCore::CSSParser::parseBorderImageQuad):
        (WebCore::CSSParser::parseBorderRadius):
        (WebCore::CSSParser::parseAspectRatio):
        (WebCore::CSSParser::parseLinearGradient):
        (WebCore::CSSParser::parseRadialGradient):
        (WebCore::CSSParser::parseGradientColorStops):
        (WebCore::CSSParser::parseTransform):
        (WebCore::CSSParser::parseCustomFilter):
        (WebCore::CSSParser::parseBuiltinFilterArguments):
        (WebCore::CSSParser::parseTransformOrigin):
        (WebCore::CSSParser::createStyleRule):
        (WebCore::CSSParser::createFontFaceRule):
        (WebCore::CSSParser::createPageRule):
        (WebCore::CSSParser::createKeyframeRule):
        * css/CSSParser.h:
        (CSSParser):
        * css/CSSParserMode.h: Added. New enumeration CSSParserMode.
        * css/SVGCSSParser.cpp: Use new SVGAttributeMode CSS parsing mode.
        (WebCore::CSSParser::parseSVGValue):
        (WebCore::CSSParser::parseSVGStrokeDasharray):

2012-03-27  Nate Chapin  <japhet@chromium.org>

        Don't manually set an identifier for main resource
        loads in FrameLoader. ResourceLoader::willSendRequest()
        will set an identifier for the request if one isn't found,
        so this code appears to be unnecessary duplication.
        https://bugs.webkit.org/show_bug.cgi?id=82248

        Reviewed by Adam Barth.

        No new tests, no functionality change intended.

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::startLoadingMainResource): Mark navigation start
            here, since it's conceptually part of starting the main resource load.
        * loader/DocumentLoader.h:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::continueLoadAfterWillSubmitForm): Remove duplicate identifier
            logic, and move navigation timing call to startLoadingMainResource, since
            it fits better logically there.
        * loader/ResourceLoader.h: No callers of setIdentifier() remain, so delete it.

2012-03-27  Dirk Pranke  <dpranke@chromium.org>

        Unreviewed, rolling out r112277.
        http://trac.webkit.org/changeset/112277
        https://bugs.webkit.org/show_bug.cgi?id=81985

        possibly causing crashes?

        * svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::insertedIntoDocument):
        (WebCore::SVGUseElement::svgAttributeChanged):
        (WebCore::SVGUseElement::willRecalcStyle):
        (WebCore::SVGUseElement::finishParsingChildren):
        * xml/XMLErrors.cpp:
        (WebCore::XMLErrors::insertErrorMessageBlock):

2012-03-27  Joseph Pecoraro  <pecoraro@apple.com>

        <http://webkit.org/b/82362> Web Inspector: Provide private -[DOMNode inspect]

        Reviewed by Timothy Hatcher.

        No new tests, this is only an ObjC SPI.

        * bindings/objc/DOM.mm:
        * bindings/objc/DOMPrivate.h:
        (-[DOMNode inspect]):
        Call through to InspectorController inspect for the node.

        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::handleMousePress):
        (WebCore::InspectorDOMAgent::inspect):
        Whenever we inspect an element, clear the node search.
        The frontend already takes this approach.

2012-03-27  Joe Mason  <jmason@rim.com>

        [BlackBerry] fix confusing destruction sequence in LayerCompositingThread
        https://bugs.webkit.org/show_bug.cgi?id=81706

        Reviewed by Rob Buis.

        LayerCompositingThread has a destructor that does a synchronous
        dispatch to the compositing thread and then does the actual cleanup
        from a helper function. This is confusing.It should be the
        opposite: the helper function dispatches to the compositing thread,
        which calls delete.

        No new tests since the existing animation tests will exercise this
        code.

        * platform/graphics/blackberry/LayerCompositingThread.cpp:
        (WebCore::LayerCompositingThread::destroyOnCompositingThread):
        (WebCore):
        (WebCore::LayerCompositingThread::~LayerCompositingThread):
        * platform/graphics/blackberry/LayerCompositingThread.h:
        (LayerCompositingThread):
        (WTF):
        (WTF::::deref):

2012-03-27  Alexey Proskuryakov  <ap@apple.com>

        [Mac] Stop using NSMapTable in FormDataStreamMac.mm
        https://bugs.webkit.org/show_bug.cgi?id=82358

        Reviewed by Darin Adler.

        * platform/network/mac/FormDataStreamMac.mm: Use WTF::HashMap, as we always do. All accesses
        are protected with a mutex anyway.

2012-03-27  Joe Thomas  <joethomas@motorola.com>

        Implement vw/vh/vmin (viewport sizes) from CSS3 Values and Units
        https://bugs.webkit.org/show_bug.cgi?id=27160

        Reviewed by Antti Koivisto.

        vw/vh/vmin are implemented as primitive length units. Added the parsing logic for these new units.
        New Length types such as ViewportRelativeWidth, ViewportRelativeHeight and ViewportRelativeMin are added for these length units
        and included the support for fetching the value of these relative units based on the current viewport size.

        The specification related to this implementation is http://dev.w3.org/csswg/css3-values/#viewport-relative-lengths.

        Tests: css3/viewport-relative-lengths/css3-viewport-relative-lengths-getStyle.html
               css3/viewport-relative-lengths/css3-viewport-relative-lengths-vh-absolute.html
               css3/viewport-relative-lengths/css3-viewport-relative-lengths-vh.html
               css3/viewport-relative-lengths/css3-viewport-relative-lengths-vmin-absolute.html
               css3/viewport-relative-lengths/css3-viewport-relative-lengths-vmin.html
               css3/viewport-relative-lengths/css3-viewport-relative-lengths-vw-absolute.html
               css3/viewport-relative-lengths/css3-viewport-relative-lengths-vw.html

        * accessibility/gtk/WebKitAccessibleInterfaceText.cpp: Modified to support viewport relative Length types.
        (getAttributeSetForAccessibilityObject):
        * css/CSSComputedStyleDeclaration.cpp: Ditto.
        (WebCore::getPositionOffsetValue):
        (WebCore::getBorderRadiusCornerValues):
        (WebCore::getBorderRadiusCornerValue):
        (WebCore::getBorderRadiusShorthandValue):
        (WebCore::lineHeightFromStyle):
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        * css/CSSGrammar.y: Added vw/vh/vmin support.
        * css/CSSParser.cpp: Parsing of relative units and creation of CSSPrimitiveValue.
        (WebCore::CSSParser::validUnit): Added vw/vh/vmin to the valid units.
        (WebCore::CSSParser::createPrimitiveNumericValue): Added vw/vh/vmin as valid primitive units.
        (WebCore::unitFromString):
        (WebCore::CSSParser::parseValidPrimitive): Creation of CSSPrimitiveValue for vw/vh/vmin.
        (WebCore::CSSParser::detectNumberToken): Parsing the vw/vh/vmin tokens.
        * css/CSSPrimitiveValue.cpp:
        (WebCore::isValidCSSUnitTypeForDoubleConversion): Added support for vw/vh/vmin.
        (WebCore::unitCategory): Ditto.
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        (WebCore::CSSPrimitiveValue::canonicalUnitTypeForCategory): Added support for vw/vh/vmin.
        (WebCore::CSSPrimitiveValue::customCssText): Ditto.
        (WebCore::CSSPrimitiveValue::viewportRelativeLength): Function to create the Length structure for the viewport-relative unit types.
        (WebCore):
        * css/CSSPrimitiveValue.h:
        (WebCore::CSSPrimitiveValue::isViewportRelativeLength): Checks whether the primitive value is ViewportRelative Lengths.
        (CSSPrimitiveValue):
        * css/CSSPrimitiveValue.idl: Added support for vw/vh/vmin.
        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::convertToLength): Ditto.
        * css/CSSStyleApplyProperty.cpp: Applying relative viewport length units to the specific CSS property.
        (WebCore::ApplyPropertyLength::applyValue):
        (WebCore::ApplyPropertyBorderRadius::applyValue):
        (WebCore::ApplyPropertyFontSize::applyValue):
        (WebCore::ApplyPropertyLineHeight::applyValue):
        (WebCore::ApplyPropertyVerticalAlign::applyValue):
        * css/CSSStyleSelector.cpp: Added support for viewport relative units.
        * css/LengthFunctions.cpp: Calcuation of length value based on the current viewport size.
        (WebCore::miminumValueForLength):
        (WebCore::valueForLength):
        (WebCore::floatValueForLength):
        * css/LengthFunctions.h: Added new RenderView argument.
        (WebCore):
        * dom/Document.cpp:
        (WebCore::Document::pageSizeAndMarginsInPixels): Modified to support viewport relative Length types.
        (WebCore::Document::viewportSize): New function to fetch the current viewport size.
        (WebCore):
        * dom/Document.h: Ditto.
        (Document):
        * html/HTMLAreaElement.cpp: Modified to support viewport relative Length types.
        (WebCore::HTMLAreaElement::getRegion):
        * platform/Length.h:
        (WebCore::Length::isViewportRelative): To check the Length is of type ViewportRelative.
        (WebCore::Length::viewportRelativeLength): To get the relative value.
        * rendering/RenderBR.cpp: Modified to support viewport relative Length types.
        (WebCore::RenderBR::lineHeight):
        * rendering/RenderBlock.cpp: Ditto.
        (WebCore::RenderBlock::textIndentOffset):
        (WebCore::RenderBlock::computeInlinePreferredLogicalWidths):
        (WebCore::RenderBlock::lineHeight):
        * rendering/RenderBox.cpp: Ditto.
        (WebCore::RenderBox::reflectionOffset):
        (WebCore::RenderBox::paintBoxDecorations):
        (WebCore::RenderBox::clipRect):
        (WebCore::RenderBox::computeLogicalWidthInRegion):
        (WebCore::RenderBox::computeLogicalWidthInRegionUsing):
        (WebCore::RenderBox::computeInlineDirectionMargins):
        (WebCore::RenderBox::computeContentLogicalHeightUsing):
        (WebCore::RenderBox::computeReplacedLogicalHeightUsing):
        (WebCore::RenderBox::computeBlockDirectionMargins):
        (WebCore::RenderBox::computePositionedLogicalWidthUsing):
        (WebCore::RenderBox::computePositionedLogicalHeightUsing):
        (WebCore::RenderBox::computePositionedLogicalWidthReplaced):
        (WebCore::RenderBox::computePositionedLogicalHeightReplaced):
        * rendering/RenderBoxModelObject.cpp: Ditto.
        (WebCore::RenderBoxModelObject::relativePositionOffsetX):
        (WebCore::RenderBoxModelObject::relativePositionOffsetY):
        (WebCore::RenderBoxModelObject::paddingTop):
        (WebCore::RenderBoxModelObject::paddingBottom):
        (WebCore::RenderBoxModelObject::paddingLeft):
        (WebCore::RenderBoxModelObject::paddingRight):
        (WebCore::RenderBoxModelObject::paddingBefore):
        (WebCore::RenderBoxModelObject::paddingAfter):
        (WebCore::RenderBoxModelObject::paddingStart):
        (WebCore::RenderBoxModelObject::paddingEnd):
        (WebCore::RenderBoxModelObject::getBackgroundRoundedRect):
        (WebCore::RenderBoxModelObject::calculateFillTileSize):
        (WebCore::RenderBoxModelObject::calculateBackgroundImageGeometry):
        (WebCore::computeBorderImageSide):
        (WebCore::RenderBoxModelObject::paintNinePieceImage):
        (WebCore::RenderBoxModelObject::paintBorder):
        (WebCore::RenderBoxModelObject::paintBoxShadow):
        * rendering/RenderFlexibleBox.cpp: Ditto.
        (WebCore::RenderFlexibleBox::preferredMainAxisContentExtentForChild):
        (WebCore::RenderFlexibleBox::computeMainAxisPreferredSizes):
        (WebCore::RenderFlexibleBox::resolveFlexibleLengths):
        * rendering/RenderInline.cpp: Ditto.
        (WebCore::computeMargin):
        (WebCore::RenderInline::lineHeight):
        * rendering/RenderMenuList.cpp: Ditto.
        (WebCore::RenderMenuList::updateOptionsWidth):
        * rendering/RenderObject.cpp: Ditto.
        (WebCore::RenderObject::repaintAfterLayoutIfNeeded):
        * rendering/RenderReplaced.cpp: Ditto.
        (WebCore::RenderReplaced::paint):
        * rendering/RenderScrollbarPart.cpp: Ditto.
        (WebCore::calcScrollbarThicknessUsing):
        (WebCore::RenderScrollbarPart::computeScrollbarWidth):
        (WebCore::RenderScrollbarPart::computeScrollbarHeight):
        * rendering/RenderTable.cpp: Ditto.
        (WebCore::RenderTable::computeLogicalWidth):
        (WebCore::RenderTable::convertStyleLogicalWidthToComputedWidth):
        * rendering/RenderTableCell.cpp: Ditto.
        (WebCore::RenderTableCell::logicalHeightForRowSizing):
        * rendering/RenderTableSection.cpp: Ditto.
        (WebCore::RenderTableSection::calcRowLogicalHeight):
        * rendering/RenderText.h: Ditto.
        (WebCore::RenderText::marginLeft):
        (WebCore::RenderText::marginRight):
        * rendering/RenderThemeMac.mm: Ditto.
        (WebCore::RenderThemeMac::paintMenuListButtonGradients):
        * rendering/RenderView.h:
        (WebCore::RenderView::viewportSize):
        * rendering/RenderWidget.cpp: Ditto.
        (WebCore::RenderWidget::paint):
        * rendering/RootInlineBox.cpp: Ditto.
        (WebCore::RootInlineBox::verticalPositionForBox):
        * rendering/style/RenderStyle.cpp: Ditto.
        (WebCore::calcRadiiFor):
        (WebCore::RenderStyle::getRoundedBorderFor):
        * rendering/style/RenderStyle.h: Ditto.
        * rendering/svg/RenderSVGRoot.cpp: Ditto.
        (WebCore::resolveLengthAttributeForSVG):
        (WebCore::RenderSVGRoot::computeReplacedLogicalWidth):
        (WebCore::RenderSVGRoot::computeReplacedLogicalHeight):

2012-03-27  Gao Chun  <chun.gao@intel.com>

        Remove deprecated LowPass2FilterNode and HighPass2FilterNode
        https://bugs.webkit.org/show_bug.cgi?id=82296

        Reviewed by Chris Rogers.

        * CMakeLists.txt:
        * DerivedSources.make:
        * DerivedSources.pri:
        * GNUmakefile.list.am:
        * Modules/webaudio/AudioContext.cpp:
        * Modules/webaudio/AudioContext.h:
        (WebCore):
        (AudioContext):
        * Modules/webaudio/AudioContext.idl:
        * Modules/webaudio/AudioNode.h:
        * Modules/webaudio/BiquadFilterNode.cpp:
        (WebCore::BiquadFilterNode::BiquadFilterNode):
        * Modules/webaudio/BiquadProcessor.cpp:
        * Modules/webaudio/BiquadProcessor.h:
        * Modules/webaudio/HighPass2FilterNode.cpp: Removed.
        * Modules/webaudio/HighPass2FilterNode.h: Removed.
        * Modules/webaudio/HighPass2FilterNode.idl: Removed.
        * Modules/webaudio/LowPass2FilterNode.cpp: Removed.
        * Modules/webaudio/LowPass2FilterNode.h: Removed.
        * Modules/webaudio/LowPass2FilterNode.idl: Removed.
        * WebCore.gypi:
        * WebCore.xcodeproj/project.pbxproj:

2012-03-27  Sami Kyostila  <skyostil@chromium.org>

        [chromium] Add TextureCopier for copying texture contents
        https://bugs.webkit.org/show_bug.cgi?id=80870

        Reviewed by Stephen White.

        This patch introduces a TextureCopier class whose job is to copy the
        contents from one GL texture to another using the most efficient means
        for the current GPU. This version uses render-to-texture to do the copy,
        but a path based on EXT_framebuffer_blit can be added later.

        The class is intended to replace the use of image path operations such
        as glCopyTex{Sub}Image2D for duplicating texture contents. The reason is
        that such functions may not be very well optimized in some -- mainly
        mobile -- GPU drivers.

        With this patch the new copier is used just for Canvas2D layer
        presentation, but another potential use is for WebGL layer presentation.

        Test: webkit_unit_tests: TextureCopierTest

        * WebCore.gypi:
        * platform/graphics/chromium/Canvas2DLayerChromium.cpp:
        (WebCore::Canvas2DLayerChromium::Canvas2DLayerChromium):
        (WebCore::Canvas2DLayerChromium::~Canvas2DLayerChromium):
        (WebCore::Canvas2DLayerChromium::updateCompositorResources):
        * platform/graphics/chromium/Canvas2DLayerChromium.h:
        (Canvas2DLayerChromium):
        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::initializeSharedObjects):
        * platform/graphics/chromium/LayerRendererChromium.h:
        (WebCore):
        (WebCore::LayerRendererChromium::textureCopier):
        (LayerRendererChromium):
        * platform/graphics/chromium/ShaderChromium.cpp:
        (WebCore::VertexShaderPosTexIdentity::getShaderString):
        (WebCore):
        (WebCore::FragmentShaderRGBATexCopy::getShaderString):
        * platform/graphics/chromium/ShaderChromium.h:
        (VertexShaderPosTexIdentity):
        (WebCore::VertexShaderPosTexIdentity::init):
        (WebCore):
        (FragmentShaderRGBATexCopy):
        * platform/graphics/chromium/TextureCopier.cpp: Added.
        (WebCore):
        (WebCore::AcceleratedTextureCopier::AcceleratedTextureCopier):
        (WebCore::AcceleratedTextureCopier::~AcceleratedTextureCopier):
        (WebCore::AcceleratedTextureCopier::copyTexture):
        * platform/graphics/chromium/TextureCopier.h: Added.
        (WebCore):
        (TextureCopier):
        (WebCore::TextureCopier::~TextureCopier):
        (AcceleratedTextureCopier):
        (WebCore::AcceleratedTextureCopier::create):
        * platform/graphics/chromium/cc/CCSingleThreadProxy.cpp:
        (WebCore::CCSingleThreadProxy::doCommit):
        * platform/graphics/chromium/cc/CCTextureUpdater.cpp:
        (WebCore::CCTextureUpdater::CCTextureUpdater):
        * platform/graphics/chromium/cc/CCTextureUpdater.h:
        (WebCore):
        (CCTextureUpdater):
        (WebCore::CCTextureUpdater::copier):
        * platform/graphics/chromium/cc/CCThreadProxy.cpp:
        (WebCore::CCThreadProxy::beginFrameCompleteOnImplThread):

2012-03-27  Levi Weintraub  <leviw@chromium.org>

        Correct SVG paint functions that are still using IntPoints
        https://bugs.webkit.org/show_bug.cgi?id=82343

        Reviewed by Eric Seidel.

        Two small corrections to SVG paint functions that should use LayoutPoint instead
        of IntPoint.

        No new tests. No change in behavior.

        * rendering/svg/RenderSVGShape.cpp:
        (WebCore::RenderSVGShape::paint):
        * rendering/svg/RenderSVGText.cpp:
        (WebCore::RenderSVGText::paint):

2012-03-27  Zalan Bujtas  <zbujtas@gmail.com>

        Frame flattening: childframe in FrameView::layout() needs protector.
        https://bugs.webkit.org/show_bug.cgi?id=82345

        Reviewed by Kenneth Rohde Christiansen.

        RefPtr<FrameView> protector(this) is supposed to protect the current frameview in
        FrameView::layout() from being destroyed by recalcStyle().
        However, when frame flattening is on and a child frame is re-starting layout from
        the topmost parent, the protection is missing and parent's recalcStyle()
        can destroy the child frame.
        Moving the protector before the layout re-starting is initiated makes the child frame
        safe.

        No new tests. Unable to create a test case, where this scenario is reproducible.

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

2012-03-27  Antti Koivisto  <antti@apple.com>

        Construct CSSCharsetRule on CSSOM API access only 
        https://bugs.webkit.org/show_bug.cgi?id=82332

        Reviewed by Andreas Kling.

        Charset is just a string. There is usually no need to construct CSSCharsetRule at all.
        
        - Make CSS parser to return encoding string instead of CSSCharsetRule object. This
          string is used for constructing CSSCharsetRule if it is needed (and nothing else,
          @charset has no effect after string decoding).
        - Remove internal interface for adding and removing rules. It has no clients.
        
        * css/CSSGrammar.y:
        * css/CSSParser.cpp:
        (WebCore):
        * css/CSSParser.h:
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::collectMatchingRulesForList):
        * css/CSSStyleSheet.cpp:
        (WebCore::CSSStyleSheet::~CSSStyleSheet):
        (WebCore::CSSStyleSheet::parserAppendRule):
        (WebCore::CSSStyleSheet::ensureCharsetRule):
        (WebCore):
        (WebCore::CSSStyleSheet::length):
        (WebCore::CSSStyleSheet::item):
        (WebCore::CSSStyleSheet::clearCharsetRule):
        (WebCore::CSSStyleSheet::clearRules):
        (WebCore::CSSStyleSheet::parserSetEncodingFromCharsetRule):
        (WebCore::CSSStyleSheet::rules):
        (WebCore::CSSStyleSheet::insertRule):
        (WebCore::CSSStyleSheet::addRule):
        (WebCore::CSSStyleSheet::deleteRule):
        * css/CSSStyleSheet.h:
        (WebCore):
        (CSSStyleSheet):
        (WebCore::CSSStyleSheet::ruleVector):
        (WebCore::CSSStyleSheet::hasCharsetRule):
        * inspector/InspectorStyleSheet.cpp:
        (WebCore::InspectorStyleSheet::reparseStyleSheet):

2012-03-27  Stephen White  <senorblanco@chromium.org>

        [chromium] Fix filter context creation to be more conservative.
        https://bugs.webkit.org/show_bug.cgi?id=82349

        Reviewed by James Robinson.

        Covered by webkit_unit_tests, and css3/filters layout tests.

        * platform/graphics/chromium/LayerChromium.cpp:
        (WebCore::LayerChromium::setFilters):
        Only request a filter context if the filter lists is non-empty.
        * platform/graphics/chromium/cc/CCLayerTreeHost.h:
        (WebCore::CCLayerTreeHost::setNeedsFilterContext):
        Add a bool param, so tests can cancel a request for filter contexts.

2012-03-27  Stephen Chenney  <schenney@chromium.org>

        <svg:use> elements in the parser can create elements not marked as created by the parser
        https://bugs.webkit.org/show_bug.cgi?id=81985

        Reviewed by Adam Barth.

        The SVGUseElement was creating its shadow tree immediately upon
        demand. This resulted in nodes being created that were not marked as
        "createdByParser", even during parsing. As it happens, there is
        already code in there to track "createdByParser" in the SVGUseElement,
        it was just being ignored all the time. This may even have been
        inefficient. Now we delay creating the shadow dom tree until children
        are finished, which is the standard time to handle the createdByParser
        flag.

        I also verified that other SVG classes that derived from core DOM
        classes that use the createdByParser flag do correctly pass this flag
        on.

        No new tests as this is covered by existing tests and does not have new behavior.

        * svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::insertedIntoDocument):
        (WebCore::SVGUseElement::svgAttributeChanged):
        (WebCore::SVGUseElement::willRecalcStyle):
        (WebCore::SVGUseElement::finishParsingChildren):
        * xml/XMLErrors.cpp:
        (WebCore::XMLErrors::insertErrorMessageBlock):

2012-03-27  Ming Xie  <mxie@rim.com>

        [BlackBerry] Disable DisallowCType.h usage
        https://bugs.webkit.org/show_bug.cgi?id=82211

        Reviewed by Rob Buis.

        Build fix: QNX port does use ctype.h, so we should not
        include <wtf/DisallowCType.h> in WebCore/config.h

        No new tests - Build Fix

        * config.h:

2012-03-27  Hao Zheng  <zhenghao@chromium.org>

        Change default position attribute of media control panel to relative for Android.
        https://bugs.webkit.org/show_bug.cgi?id=82303

        Reviewed by Eric Carlson.

        Follow up https://bugs.webkit.org/show_bug.cgi?id=79746 .

        * css/mediaControlsChromiumAndroid.css:
        (audio::-webkit-media-controls-panel, video::-webkit-media-controls-panel):

2012-03-27  Alexei Filippov  <alexeif@chromium.org>

        Web Inspector: Speed up snapshot parsing.
        https://bugs.webkit.org/show_bug.cgi?id=82325

        Replacing the iterators with raw nodes/edges access speeds up
        some phases phasses up to 10 times, taking down the whole init
        time to less than 6 sec.

        Reviewed by Yury Semikhatsky.

        * inspector/front-end/HeapSnapshot.js:
        (WebInspector.HeapSnapshot.prototype._buildNodeIndex):
        (WebInspector.HeapSnapshot.prototype._buildDominatedNodes):
        (WebInspector.HeapSnapshot.prototype._markQueriableHeapObjects):

2012-03-27  Antti Koivisto  <antti@apple.com>

        Assertion failure in acid2.

        Rubber-stamped by Andreas Kling.

        Remove assert added in http://trac.webkit.org/changeset/112258. It seems insertedInto/removedFromDocument
        don't always pair.

        * svg/SVGDocumentExtensions.cpp:
        (WebCore::SVGDocumentExtensions::~SVGDocumentExtensions):

2012-03-27  Yury Semikhatsky  <yurys@chromium.org>

        Web Inspector: simplify heap profiler front-end
        https://bugs.webkit.org/show_bug.cgi?id=82338

        Simplify constructors of WebInspector.HeapSnapshotArraySlice and
        WebInspector.HeapSnapshotEdgesProvider.

        Reviewed by Pavel Feldman.

        * inspector/front-end/HeapSnapshot.js:
        (WebInspector.HeapSnapshotArraySlice):
        (WebInspector.HeapSnapshotArraySlice.prototype.item):
        (WebInspector.HeapSnapshotArraySlice.prototype.slice):
        (WebInspector.HeapSnapshotNode.prototype.get rawEdges):
        (WebInspector.HeapSnapshot.prototype._retainersForNode):
        (WebInspector.HeapSnapshot.prototype._dominatedNodesOfNode):
        (WebInspector.HeapSnapshot.prototype.createEdgesProvider):
        (WebInspector.HeapSnapshotEdgesProvider):

2012-03-27  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Tabbed pane should set focus on its contents on tab click.
        https://bugs.webkit.org/show_bug.cgi?id=82323

        Reviewed by Pavel Feldman.

        Otherwise selected tab does not have focus.
        Also added tabIndex on tabElements to prevent pasting on closing middle click.

        * inspector/front-end/TabbedPane.js:
        (WebInspector.TabbedPane):
        (WebInspector.TabbedPane.prototype.focus):
        (WebInspector.TabbedPane.prototype.selectTab):
        (WebInspector.TabbedPaneTab.prototype._createTabElement):
        (WebInspector.TabbedPaneTab.prototype._tabClicked):

2012-03-27  Pavel Podivilov  <podivilov@chromium.org>

        Web Inspector: dispatch breakpoint-added and breakpoint-removed events on UISourceCode.
        https://bugs.webkit.org/show_bug.cgi?id=82318

        Reviewed by Vsevolod Vlasov.

        Breakpoint-added and breakpoint-removed events are always related to specific UISourceCode.
        See bug 82224 for more details.

        * inspector/front-end/BreakpointManager.js:
        (WebInspector.BreakpointManager.prototype._addBreakpointToUI):
        (WebInspector.BreakpointManager.prototype._removeBreakpointFromUI):
        * inspector/front-end/DebuggerPresentationModel.js:
        (WebInspector.DebuggerPresentationModel):
        (WebInspector.UISourceCodeImpl.prototype.breakpointAdded):
        (WebInspector.UISourceCodeImpl.prototype.breakpointRemoved):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype._uiSourceCodeAdded):
        (WebInspector.ScriptsPanel.prototype._uiSourceCodeRemoved):
        (WebInspector.ScriptsPanel.prototype._addBreakpointListeners):
        (WebInspector.ScriptsPanel.prototype._removeBreakpointListeners):
        (WebInspector.ScriptsPanel.prototype._uiSourceCodeReplaced):
        * inspector/front-end/UISourceCode.js:

2012-03-27  Jason Liu  <jason.liu@torchmobile.com.cn>

        [BlackBerry]Cleanup WTF string in platform/network/blackberry
        https://bugs.webkit.org/show_bug.cgi?id=82005

        Reviewed by Rob Buis.

        No new tests. Just replace WTF::String with String.

        * platform/network/blackberry/NetworkJob.cpp:
        (WebCore::NetworkJob::handleNotifyDataReceived):

2012-03-27  Alexander Pavlov  <apavlov@chromium.org>

        Web Inspector: Enable "number" parameters in the web inspector protocol methods
        https://bugs.webkit.org/show_bug.cgi?id=82334

        The generated protocol dispatcher does not understand protocol method parameters of type "number"
        (mapped to "double" in the native code.)

        Reviewed by Vsevolod Vlasov.

        * inspector/CodeGeneratorInspector.py:
        (RawTypes.Number.get_getter_name):
        (RawTypes.Number.get_c_initializer):
        (RawTypes.Number.get_js_bind_type):
        (RawTypes.Number.get_validate_method_params.ValidateMethodParams):
        (RawTypes.Number.get_validate_method_params):

2012-03-27  Alexei Filippov  <alexeif@chromium.org>

        Web Inspector: Fix missing objects in the dominators view.
        https://bugs.webkit.org/show_bug.cgi?id=82194

        Due to the nature of dominators tree it is not possible to hide internal
        objects there because they may happen to contain user objects that can't
        be hidden.
        Besides that it fixes a small bug in HeapSnapshotArraySlice.slice
        function.

        Reviewed by Yury Semikhatsky.

        * inspector/front-end/DetailedHeapshotGridNodes.js:
        (WebInspector.HeapSnapshotDominatorObjectNode.prototype._createProvider):
        * inspector/front-end/HeapSnapshot.js:
        (WebInspector.HeapSnapshotArraySlice.prototype.slice):

2012-03-27  Antti Koivisto  <antti@apple.com>

        Remove Document::mappedElementSheet() 
        https://bugs.webkit.org/show_bug.cgi?id=82242

        Reviewed by Andreas Kling and Nikolas Zimmermann.

        The only thing this is used for anymore is SVGFontFaceElement. That can be handled without
        the confusing extra stylesheet.

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::CSSStyleSelector):
        * css/CSSStyleSelector.h:
        (CSSStyleSelector):
        
            - Add font face rules from registered SVGFontFaceElements.
            - Simplify the constructor signature. Stylesheets are part of the document.
            
        * dom/Document.cpp:
        (WebCore::Document::~Document):
        (WebCore::Document::createStyleSelector):
        (WebCore):
        (WebCore::Document::updateBaseURL):
        * dom/Document.h:
        (WebCore):
        (WebCore::Document::documentUserSheets):
        (Document):

            - Remove mappedElementSheet        
            - Adapt to the CSSStyleSelector constructor signature changes.

        * svg/SVGDocumentExtensions.cpp:
        (WebCore::SVGDocumentExtensions::svgFontFaceElements):
        (WebCore):
        (WebCore::SVGDocumentExtensions::registerSVGFontFaceElement):
        (WebCore::SVGDocumentExtensions::unregisterSVGFontFaceElement):
        * svg/SVGDocumentExtensions.h:
        (WebCore):
        (SVGDocumentExtensions):
        
            - Add map for SVGFontFaceElements

        * svg/SVGFontFaceElement.cpp:
        (WebCore::SVGFontFaceElement::insertedIntoDocument):
        (WebCore::SVGFontFaceElement::removedFromDocument):
        (WebCore):
        * svg/SVGFontFaceElement.h:
        (SVGFontFaceElement):
        (WebCore::SVGFontFaceElement::fontFaceRule):
        
            - Switch to updating svgFontFaceElements map.
            - Use elementSheet as the parent sheet (nothing is ever added to the elementSheet, it is used for
              resolving relative URLs only).

2012-03-27  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: startEditing should remove tabIndex attribute from the element if it was not set before.
        https://bugs.webkit.org/show_bug.cgi?id=82322

        Reviewed by Pavel Feldman.

        This patch removes tabIndex attribute from the element after editing if it was not present before.
        Otherwise tabIndex becomes set unexpectedly after exiting edit mode.

        * inspector/front-end/UIUtils.js:
        (WebInspector.startEditing.cleanUpAfterEditing):

2012-03-27  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Tree outline should not start search on key press if it is being edited.
        https://bugs.webkit.org/show_bug.cgi?id=82327

        Reviewed by Pavel Feldman.

        This is needed for snippet renaming support.

        * inspector/front-end/treeoutline.js:
        (TreeOutline):
        (TreeOutline.prototype._treeKeyPress):

2012-03-27  Levi Weintraub  <leviw@chromium.org>

        Revert RenderApplet::intrinsicSize to integers
        https://bugs.webkit.org/show_bug.cgi?id=82206

        Reviewed by Eric Seidel.

        Intrinsic sizes originate either outside of WebCore, or from their initial values,
        which are always integers. Reverting RenderApplet::intrinsicSize to integers, the
        last spot improperly using LayoutUnits

        No new tests. No change in behavior.

        * rendering/RenderApplet.cpp:
        (WebCore::RenderApplet::intrinsicSize):
        * rendering/RenderApplet.h:
        (RenderApplet):


2012-03-27  Alexis Menard  <alexis.menard@openbossa.org>

        Increase code sharing between CSSComputedStyleDeclaration and CSSPropertyLonghand.
        https://bugs.webkit.org/show_bug.cgi?id=82261

        Reviewed by Ryosuke Niwa.

        Use longhands declaration from CSSPropertyLonghand in CSSComputedStyleDeclaration to avoid
        code duplication.

        No new tests : refactoring only, we shouldn't have any behavior difference.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        (WebCore::CSSComputedStyleDeclaration::getCSSPropertyValuesForShorthandProperties):
        (WebCore::CSSComputedStyleDeclaration::getCSSPropertyValuesForSidesShorthand):
        * css/CSSComputedStyleDeclaration.h:
        (WebCore):
        (CSSComputedStyleDeclaration):
        * css/CSSPropertyLonghand.cpp:
        (WebCore::outlineLonghand):
        Re-order to match the spec default order and also remove outline-offset as it is not part
        of the shorthand (http://www.w3.org/TR/css3-ui/#outline). Luckily this was cover by a layout test.

2012-03-27  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Editable TextViewer should show cursor when it is focused.
        https://bugs.webkit.org/show_bug.cgi?id=82320

        Reviewed by Pavel Feldman.

        TextViewer now focuses editable inner container unless read-only flag is set.

        * inspector/front-end/TextViewer.js:
        (WebInspector.TextViewer.prototype.focus):
        (WebInspector.TextEditorMainPanel):
        (WebInspector.TextEditorMainPanel.prototype._handleElementFocus):
        (WebInspector.TextEditorMainPanel.prototype.focus):

2012-03-26  Levi Weintraub  <leviw@chromium.org>

        Unreviewed. Removing change markers from ChangeLog.

2012-03-26  Levi Weintraub  <leviw@chromium.org>

        Convert RenderSelectionInfo::rect to LayoutUnits
        https://bugs.webkit.org/show_bug.cgi?id=82213

        Reviewed by Eric Seidel.

        RenderSelectionInfoBase stores a cached repaint rect in local coordinates. Coordinates local to
        renderers should be stored in LayoutUnits.

        No new tests. No change in behavior.

        * rendering/RenderSelectionInfo.h:
        (WebCore::RenderSelectionInfo::rect):
        (RenderSelectionInfo):

2012-03-26  Levi Weintraub  <leviw@chromium.org>

        Convert RenderSelectionInfo::rect to LayoutUnits
        https://bugs.webkit.org/show_bug.cgi?id=82213

        Reviewed by Eric Seidel.

        RenderSelectionInfoBase stores a cached repaint rect in local coordinates. Coordinates
        local to renderers should be stored in LayoutUnits as described in
        http://trac.webkit.org/wiki/LayoutUnit

        No new tests. No change in behavior.

        * rendering/RenderSelectionInfo.h:
        (WebCore::RenderSelectionInfo::rect):
        (RenderSelectionInfo):

2012-03-27  Nikolas Zimmermann  <nzimmermann@rim.com>

        Enable animVal support for SVGAnimatedRect
        https://bugs.webkit.org/show_bug.cgi?id=82317

        Reviewed by Zoltan Herczeg.

        Enable animVal support for SVGAnimatedRect. Very simple now that everything is prepared.
        All we have to do is add startAnimValAnimation/etc. methods to SVGAnimatedRectAnimator.

        Extended existing tests to cover this.

        * svg/SVGAnimatedRect.cpp:
        (WebCore::SVGAnimatedRectAnimator::startAnimValAnimation):
        (WebCore::SVGAnimatedRectAnimator::stopAnimValAnimation):
        (WebCore::SVGAnimatedRectAnimator::resetAnimValToBaseVal):
        (WebCore::SVGAnimatedRectAnimator::animValWillChange):
        (WebCore::SVGAnimatedRectAnimator::animValDidChange):
        * svg/SVGAnimatedRect.h:
        (SVGAnimatedRectAnimator):
        * svg/SVGAnimatedType.cpp:
        (WebCore::SVGAnimatedType::supportsAnimVal):

2012-03-27  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r112201.
        http://trac.webkit.org/changeset/112201
        https://bugs.webkit.org/show_bug.cgi?id=82302

        Breaks chromium's WebPageSerializerTest.HTMLNodes test
        (Requested by pfeldman on #webkit).

        * loader/cache/CachedCSSStyleSheet.cpp:
        (WebCore::CachedCSSStyleSheet::error):
        (WebCore):
        * loader/cache/CachedCSSStyleSheet.h:
        (CachedCSSStyleSheet):
        * loader/cache/CachedFont.cpp:
        (WebCore):
        (WebCore::CachedFont::error):
        * loader/cache/CachedFont.h:
        (CachedFont):
        * loader/cache/CachedImage.cpp:
        (WebCore::CachedImage::error):
        * loader/cache/CachedResource.h:
        (CachedResource):
        * loader/cache/CachedScript.cpp:
        (WebCore::CachedScript::error):
        (WebCore):
        * loader/cache/CachedScript.h:
        (CachedScript):
        * loader/cache/CachedXSLStyleSheet.cpp:
        (WebCore::CachedXSLStyleSheet::error):
        (WebCore):
        * loader/cache/CachedXSLStyleSheet.h:
        (CachedXSLStyleSheet):

2012-03-27  Levi Weintraub  <leviw@chromium.org>

        LayoutRepainter: Remove unused constructor parameter and update to LayoutUnits
        https://bugs.webkit.org/show_bug.cgi?id=82185

        Reviewed by Eric Seidel.

        Removing an optional parameter for old bounds in LayoutRepainter's constructor that
        is no longer used. The old bounds are instead always gleaned from the renderer's
        clippedOverflowRectForRepaint.

        The renderer's bounds and outline rect also are stored in LayoutUnits to properly
        detect sub-pixel changes during layout. Eventually, we'll pixel snap these values
        when telling the embedder to invalidate. Adding a comment to that effect.

        No new tests. No change in behavior.

        * rendering/LayoutRepainter.cpp:
        (WebCore::LayoutRepainter::LayoutRepainter):
        * rendering/LayoutRepainter.h:
        (LayoutRepainter):

2012-03-27  Nikolas Zimmermann  <nzimmermann@rim.com>

        Enable animVal support for SVGAnimatedString
        https://bugs.webkit.org/show_bug.cgi?id=82316

        Reviewed by Zoltan Herczeg.

        Enable animVal support for SVGAnimatedString. Very simple now that everything is prepared.
        All we have to do is add startAnimValAnimation/etc. methods to SVGAnimatedStringAnimator.

        Test: svg/animations/svgstring-animation-1.html

        * svg/SVGAnimatedString.cpp:
        (WebCore::SVGAnimatedStringAnimator::startAnimValAnimation):
        (WebCore::SVGAnimatedStringAnimator::stopAnimValAnimation):
        (WebCore::SVGAnimatedStringAnimator::resetAnimValToBaseVal):
        (WebCore::SVGAnimatedStringAnimator::animValWillChange):
        (WebCore::SVGAnimatedStringAnimator::animValDidChange):
        * svg/SVGAnimatedString.h:
        (SVGAnimatedStringAnimator):
        * svg/SVGAnimatedType.cpp:
        (WebCore::SVGAnimatedType::supportsAnimVal):

2012-03-27  Levi Weintraub  <leviw@chromium.org>

        Update usage of LayoutUnits in RenderListMarker
        https://bugs.webkit.org/show_bug.cgi?id=81921

        Reviewed by Eric Seidel.

        Implementing proper pixel snapping in list marker painting, and correcting usage of integers
        for local coordinates/margins that should be sub-pixel.

        No new tests. No change in behavior.

        * rendering/RenderListMarker.cpp:
        (WebCore::RenderListMarker::localSelectionRect): Changed to LayoutUnits since this represents
        a rect in local coordinates.
        (WebCore::RenderListMarker::paint): Doing proper pixel snapping, and using integers for
        results from text measurement.
        (WebCore::RenderListMarker::computePreferredLogicalWidths): Using integers for results
        from text measurement.
        (WebCore::RenderListMarker::updateMargins): Fixing to be LayoutUnits.
        * rendering/RenderListMarker.h:
        (RenderListMarker):

2012-03-27  Levi Weintraub  <leviw@chromium.org>

        Revert linesBoundingBox to integers
        https://bugs.webkit.org/show_bug.cgi?id=82182

        Reviewed by Eric Seidel.

        LayoutRects are intended to be pixel snapped to determine the ultimate screen
        coordinates, but the Inline Box tree is laid out using floats, and pixel snapping
        the resulting box from linesBoundingBox would produce a potentially incorrect
        rectangle. Keeping this using enclosingIntRect retains the previous accuracy and
        prevents misuse.

        No new tests. No change in behavior.

        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::linesBoundingBox):
        * rendering/RenderInline.h:
        (RenderInline):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateLayerPosition):
        * rendering/RenderText.cpp:
        (WebCore::RenderText::linesBoundingBox):
        * rendering/svg/RenderSVGInlineText.cpp:
        (WebCore::RenderSVGInlineText::linesBoundingBox):
        * rendering/svg/RenderSVGInlineText.h:
        (RenderSVGInlineText):

2012-03-26  Pavel Podivilov  <podivilov@chromium.org>

        Web Inspector: store UIBreakpoints on UISourceCode.
        https://bugs.webkit.org/show_bug.cgi?id=82214

        This change will allow us to make breakpoint-added and breakpoint-removed events a part of UISourceCode interface.
        See bug 82224 for more details.

        Reviewed by Vsevolod Vlasov.

        * inspector/front-end/BreakpointManager.js:
        (WebInspector.BreakpointManager.prototype.uiSourceCodeRemoved):
        (WebInspector.BreakpointManager.prototype.setBreakpoint):
        (WebInspector.BreakpointManager.prototype.removeBreakpoint):
        (WebInspector.BreakpointManager.prototype._addBreakpointToUI):
        (WebInspector.BreakpointManager.prototype._removeBreakpointFromUI):
        (WebInspector.BreakpointManager.prototype.debuggerReset):
        * inspector/front-end/CompilerScriptMapping.js:
        (WebInspector.CompilerScriptMapping.prototype.addScript):
        * inspector/front-end/DebuggerPresentationModel.js:
        (WebInspector.DebuggerPresentationModel.prototype._updateBreakpointsAfterLiveEdit):
        (WebInspector.DebuggerPresentationModel.prototype.breakpointsForUISourceCode):
        (WebInspector.DebuggerPresentationModel.prototype.findBreakpoint):
        (WebInspector.UISourceCodeImpl):
        (WebInspector.UISourceCodeImpl.prototype.breakpoints):
        (WebInspector.UISourceCodeImpl.prototype.breakpointAdded):
        (WebInspector.UISourceCodeImpl.prototype.breakpointRemoved):
        * inspector/front-end/RawSourceCode.js:
        (WebInspector.RawSourceCode.prototype._createUISourceCode):
        * inspector/front-end/SnippetsModel.js:
        (WebInspector.SnippetsScriptMapping.prototype._snippetAdded):
        (WebInspector.SnippetsScriptMapping.prototype._createUISourceCodeForScript):
        * inspector/front-end/UISourceCode.js:
        (WebInspector.UISourceCode.prototype.get domain):
        (WebInspector.UISourceCode.prototype.get folderName):
        (WebInspector.UISourceCode.prototype.get fileName):
        (WebInspector.UISourceCode.prototype.get displayName):
        (WebInspector.UISourceCode.prototype._parseURL):
        (WebInspector.UISourceCode.prototype._didRequestContent):
        (WebInspector.UISourceCode.prototype.breakpoints):
        * inspector/front-end/inspector.html:

2012-03-27  Nat Duca  <nduca@chromium.org>

        [chromium] Fix crash with fling with tracing enabled
        https://bugs.webkit.org/show_bug.cgi?id=82306

        The TRACE_EVENT_START instrumentation was deferencing a PassOwnPtr
        after it had been passed into another OwnPtr. This caused frequent
        crashes when tracing was enabled.

        Reviewed by Adam Barth.

        * platform/ActivePlatformGestureAnimation.cpp:
        (WebCore::ActivePlatformGestureAnimation::ActivePlatformGestureAnimation):
        * platform/graphics/chromium/cc/CCActiveGestureAnimation.cpp:
        (WebCore::CCActiveGestureAnimation::CCActiveGestureAnimation):

2012-03-27  Carlos Garcia Campos  <cgarcia@igalia.com>

        [SOUP] Implement missing methods in CookieJarSoup
        https://bugs.webkit.org/show_bug.cgi?id=82082

        Reviewed by Martin Robinson.

        * platform/network/soup/CookieJarSoup.cpp:
        (WebCore::defaultCookieJar): Return a global GRefPtr to store the
        default cookie jar.
        (WebCore::soupCookieJar): Return the current cookie jar or create
        a new one.
        (WebCore::setSoupCookieJar): Set the current cookie jar.
        (WebCore::setCookies): Fix coding style.
        (WebCore::cookiesForDocument): Helper function to get the list of
        cookies as a string.
        (WebCore::cookies): Use cookiesForDocument().
        (WebCore::cookieRequestHeaderFieldValue): Ditto.
        (WebCore::getRawCookies): Get the list of cookies for the given
        document and url.
        (WebCore::deleteCookie): Delete the given cookie.
        (WebCore::getHostnamesWithCookies): Use GOwnPtr.
        (WebCore::deleteCookiesForHostname): Use GOwnPtr and
        soup_cookie_domain_matches() instead of comparing the domain
        directly with the given hostname.
        (WebCore::deleteAllCookies): Use GOwnPtr.
        * platform/network/soup/CookieJarSoup.h:
        * platform/network/soup/GOwnPtrSoup.cpp:
        (WTF::SoupCookie): Add GOwnPtr template for SoupCookie.
        * platform/network/soup/GOwnPtrSoup.h:
        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::ensureSessionIsInitialized): Use soupCookieJar() instead
        of defaultCookieJar().

2012-03-27  Nikolas Zimmermann  <nzimmermann@rim.com>

        Enable animVal support for SVGAnimatedBoolean
        https://bugs.webkit.org/show_bug.cgi?id=82311

        Reviewed by Antti Koivisto.

        Enable animVal support for SVGAnimatedBoolean. Very simple now that everything is prepared.
        All we have to do is add startAnimValAnimation/etc. methods to SVGAnimatedBooleanAnimator.

        Extended existing tests to cover this.

        * svg/SVGAnimatedBoolean.cpp:
        (WebCore::SVGAnimatedBooleanAnimator::startAnimValAnimation):
        (WebCore::SVGAnimatedBooleanAnimator::stopAnimValAnimation):
        (WebCore::SVGAnimatedBooleanAnimator::resetAnimValToBaseVal):
        (WebCore::SVGAnimatedBooleanAnimator::animValWillChange):
        (WebCore::SVGAnimatedBooleanAnimator::animValDidChange):
        * svg/SVGAnimatedBoolean.h:
        (SVGAnimatedBooleanAnimator):
        * svg/SVGAnimatedType.cpp:
        (WebCore::SVGAnimatedType::setValueAsString):
        (WebCore::SVGAnimatedType::supportsAnimVal):

2012-03-27  Nikolas Zimmermann  <nzimmermann@rim.com>

        <img style='width: 100%' src='foo.svg'> gets pixellated when stretched
        https://bugs.webkit.org/show_bug.cgi?id=81631

        Reviewed by Antti Koivisto.

        Final cleanup of RenderReplaced after the intrinsic size negotiation patch series from some weeks/months ago.
        Stop tracking whether a RenderReplaced has an intrinsic size or not with an extra-bool, instead assume each
        RenderReplaced derived class has an intrinsic size. If not, the class should override
        computeIntrinsicRatioInformation() for any custom logic - currently only done by RenderImage.

        Remove all logic depending on m_hasIntrinsicSize from computeReplacedLogicalWidth/Height, which was used
        to support different sizing models depending on if the replaced element is a RenderImage or a RenderPart.
        Unify all of this in computeIntrinsicRatioInformation right in RenderReplaced. This allows to remove
        a hack from RenderImage::computeReplacedLogicalWidth(), which forced the synchroniziation of the intrinsicSize()
        before calling the base classes RenderReplaced::computeReplacedLogicalWidth().
        Now RenderImage just overrides the layout() method, calls RenderReplaced::layout() and then sets the container
        size of the image resources to [contentWidth(), contentHeight()] - reflecting the actual result of the layout.
        Furthermore this now allows us to unify CachedImage::imageSizeForRenderer() again for both SVG and non-SVG images.

        Propagating the right container size to the image resource fixes the actual bug, that the SVGImage got pixellated.
        Adding new tests covering percentage width or height set on an <img> embedding an external SVG, no more pixelation.

        Tests: svg/as-image/img-relative-height-expected.html
               svg/as-image/img-relative-height.html
               svg/as-image/img-relative-width-expected.html
               svg/as-image/img-relative-width.html

        * loader/cache/CachedImage.cpp:
        (WebCore::CachedImage::imageSizeForRenderer):
        * rendering/RenderEmbeddedObject.cpp:
        (WebCore::RenderEmbeddedObject::RenderEmbeddedObject):
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::layout):
        (WebCore::RenderImage::computeIntrinsicRatioInformation):
        * rendering/RenderImage.h:
        (RenderImage):
        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::RenderReplaced):
        (WebCore::rendererHasAspectRatio):
        (WebCore):
        (WebCore::RenderReplaced::computeIntrinsicRatioInformationForRenderBox):
        (WebCore::RenderReplaced::computeIntrinsicRatioInformation):
        (WebCore::RenderReplaced::computeReplacedLogicalWidth):
        (WebCore::RenderReplaced::computeReplacedLogicalHeight):
        * rendering/RenderReplaced.h:
        (WebCore::RenderReplaced::intrinsicSize):
        (RenderReplaced):
        (WebCore::RenderReplaced::setIntrinsicSize):
        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::setContainerSize):
        * svg/graphics/SVGImage.h:
        (WebCore::SVGImage::usesContainerSize):

2012-03-27  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: HeapSnapshot: speed-up distanceToWindow calculation.
        https://bugs.webkit.org/show_bug.cgi?id=82305

        Reviewed by Yury Semikhatsky.

        * inspector/front-end/HeapSnapshot.js:
        (WebInspector.HeapSnapshot.prototype._bfs):

2012-03-27  Nikolas Zimmermann  <nzimmermann@rim.com>

        SVGAnimatedType should support SVGAnimatedIntegerOptionalInteger animation
        https://bugs.webkit.org/show_bug.cgi?id=67563

        Reviewed by Dirk Schulze.

        Add SVGAnimatedIntegerOptionalInteger type handling animation of pair<int, int> objects
        as used for the SVG properties 'filterRes' and 'order'. They're currently animated as
        SVGAnimatedNumberOptionalNumber - but that won't work for animVal support. Fix that
        and enable animVal support for SVGAnimatedInteger(OptionalInteger).

        Use 'int' as datatype for SVGAnimatedInteger instead of 'long' for consistency, and
        move SVGAnimatedEnumeration from 'int' to 'unsigned short', to make them distinguishable.

        Test: svg/animations/svginteger-animation-2.html

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * svg/SVGAllInOne.cpp:
        * svg/SVGAnimatedEnumeration.h:
        (WebCore):
        * svg/SVGAnimatedInteger.cpp:
        (WebCore::SVGAnimatedIntegerAnimator::startAnimValAnimation):
        (WebCore):
        (WebCore::SVGAnimatedIntegerAnimator::stopAnimValAnimation):
        (WebCore::SVGAnimatedIntegerAnimator::resetAnimValToBaseVal):
        (WebCore::SVGAnimatedIntegerAnimator::animValWillChange):
        (WebCore::SVGAnimatedIntegerAnimator::animValDidChange):
        (WebCore::SVGAnimatedIntegerAnimator::calculateAnimatedInteger):
        (WebCore::SVGAnimatedIntegerAnimator::calculateAnimatedValue):
        * svg/SVGAnimatedInteger.h:
        (WebCore):
        (SVGAnimatedIntegerAnimator):
        * svg/SVGAnimatedIntegerOptionalInteger.cpp: Added.
        (WebCore):
        (WebCore::SVGAnimatedIntegerOptionalIntegerAnimator::SVGAnimatedIntegerOptionalIntegerAnimator):
        (WebCore::SVGAnimatedIntegerOptionalIntegerAnimator::constructFromString):
        (WebCore::SVGAnimatedIntegerOptionalIntegerAnimator::startAnimValAnimation):
        (WebCore::SVGAnimatedIntegerOptionalIntegerAnimator::stopAnimValAnimation):
        (WebCore::SVGAnimatedIntegerOptionalIntegerAnimator::resetAnimValToBaseVal):
        (WebCore::SVGAnimatedIntegerOptionalIntegerAnimator::animValWillChange):
        (WebCore::SVGAnimatedIntegerOptionalIntegerAnimator::animValDidChange):
        (WebCore::SVGAnimatedIntegerOptionalIntegerAnimator::calculateFromAndToValues):
        (WebCore::SVGAnimatedIntegerOptionalIntegerAnimator::calculateFromAndByValues):
        (WebCore::SVGAnimatedIntegerOptionalIntegerAnimator::calculateAnimatedValue):
        (WebCore::SVGAnimatedIntegerOptionalIntegerAnimator::calculateDistance):
        * svg/SVGAnimatedIntegerOptionalInteger.h: Copied from Source/WebCore/svg/SVGAnimatedInteger.h.
        (WebCore):
        (SVGAnimatedIntegerOptionalIntegerAnimator):
        (WebCore::SVGAnimatedIntegerOptionalIntegerAnimator::~SVGAnimatedIntegerOptionalIntegerAnimator):
        * svg/SVGAnimatedNumberOptionalNumber.cpp:
        (WebCore::SVGAnimatedNumberOptionalNumberAnimator::calculateAnimatedValue):
        * svg/SVGAnimatedType.cpp:
        (WebCore::SVGAnimatedType::~SVGAnimatedType):
        (WebCore::SVGAnimatedType::createIntegerOptionalInteger):
        (WebCore):
        (WebCore::SVGAnimatedType::integerOptionalInteger):
        (WebCore::SVGAnimatedType::valueAsString):
        (WebCore::SVGAnimatedType::setValueAsString):
        (WebCore::SVGAnimatedType::supportsAnimVal):
        * svg/SVGAnimatedType.h:
        (SVGAnimatedType):
        * svg/SVGAnimatorFactory.h:
        (WebCore::SVGAnimatorFactory::create):
        * svg/SVGFilterElement.cpp:
        (WebCore::SVGFilterElement::setFilterRes):
        * svg/SVGFilterElement.h:
        (SVGFilterElement):
        * svg/SVGPathElement.cpp:
        (WebCore::SVGPathElement::getPathSegAtLength):
        * svg/SVGPathElement.h:
        (SVGPathElement):
        * svg/SVGPathParserFactory.cpp:
        (WebCore::SVGPathParserFactory::getSVGPathSegAtLengthFromSVGPathByteStream):
        * svg/SVGPathParserFactory.h:
        (SVGPathParserFactory):
        * svg/SVGPathTraversalStateBuilder.cpp:
        (WebCore::SVGPathTraversalStateBuilder::pathSegmentIndex):
        * svg/SVGPathTraversalStateBuilder.h:
        (SVGPathTraversalStateBuilder):
        * svg/properties/SVGAnimatedEnumerationPropertyTearOff.h:
        (WebCore::SVGAnimatedEnumerationPropertyTearOff::setBaseVal):
        (WebCore::SVGAnimatedEnumerationPropertyTearOff::create):
        (WebCore::SVGAnimatedEnumerationPropertyTearOff::currentAnimatedValue):
        (WebCore::SVGAnimatedEnumerationPropertyTearOff::SVGAnimatedEnumerationPropertyTearOff):
        * svg/properties/SVGPropertyInfo.h:
        * svg/properties/SVGPropertyTraits.h:

2012-03-25  Nikolas Zimmermann  <nzimmermann@rim.com>

        Enable animVal support for SVGAngle
        https://bugs.webkit.org/show_bug.cgi?id=82144

        Reviewed by Rob Buis.

        Enable animVal support for SVGAnimatedAngle. Very simple now that everything is prepared.
        All we have to do is add startAnimValAnimation/etc. methods to SVGAnimatedAngleAnimator.

        Extended existing tests to cover this.

        * svg/SVGAnimatedAngle.cpp:
        (WebCore::sharedSVGAngle):
        (WebCore::SVGAnimatedAngleAnimator::constructFromString):
        (WebCore::SVGAnimatedAngleAnimator::startAnimValAnimation):
        (WebCore::SVGAnimatedAngleAnimator::stopAnimValAnimation):
        (WebCore::SVGAnimatedAngleAnimator::resetAnimValToBaseVal):
        (WebCore::SVGAnimatedAngleAnimator::animValWillChange):
        (WebCore::SVGAnimatedAngleAnimator::animValDidChange):
        (WebCore::SVGAnimatedAngleAnimator::calculateDistance):
        * svg/SVGAnimatedAngle.h:
        (SVGAnimatedAngleAnimator):
        * svg/SVGAnimatedType.cpp:
        (WebCore::SVGAnimatedType::supportsAnimVal):

2012-03-27  Yury Semikhatsky  <yurys@chromium.org>

        Web Inspector: remove remains of path finder in heap profiler front-end
        https://bugs.webkit.org/show_bug.cgi?id=82304

        Removed remainders of heap path finder as this code is not used anymore.

        Reviewed by Pavel Feldman.

        * inspector/front-end/HeapSnapshot.js:
        * inspector/front-end/HeapSnapshotProxy.js:

2012-03-27  Dan Bernstein  <mitz@apple.com>

        Reverted r112214, since it was not the right fix for the build.

        * css/StylePropertySet.cpp:
        (WebCore::StylePropertySet::asText):

2012-03-27  Kentaro Hara  <haraken@chromium.org>

        [V8][Performance] Optimize createTextNode(), createElement(), cloneNode(), etc
        https://bugs.webkit.org/show_bug.cgi?id=82201

        Reviewed by Adam Barth.

        This patch improves performance of createTextNode() by 13%, createElement() by 14%,
        and cloneNode() by 16%. Similar performance improvement will be observed in
        DOM methods that create a new object every time.

        Performance test: https://bugs.webkit.org/attachment.cgi?id=133799

        The performance test results are as follows. Since the performance of V8's GC is
        really unstable, the average of measured times makes no sense in Chromium.
        Instead, let us focus on the median. I believe that this performance
        improvement has impact on Dromaeo, but we cannot observe the improvement
        due to the unsteadiness of V8's GC, as shown below.

        Chromium/V8/Linux (without the patch):
        createTextNode : median=277ms (mean=460.88ms, min=270ms, max=3381ms)
        createElement : median=379ms (mean=637.52ms, min=372ms, max=3022ms)
        cloneNode : median=369ms (mean=581.72ms, min=363ms, max=3050ms)
        Dromaeo/dom-modify/createElement: 439.17runs/s +-31.60% (<--- pretty noisy)
        Dromaeo/dom-modify/createTextNode: 287.71runs/s +-28.39% (<--- pretty noisy)
        Dromaeo/dom-modify/cloneNode: 174.62runs/s +-25.68% (<--- pretty noisy)

        Chromium/V8/Linux (with the patch):
        createTextNode : median=240ms (mean=411.12ms, min=237ms, max=2965ms)
        createElement : median=325ms (mean=585.30ms, min=317ms, max=2984ms)
        cloneNode : median=310ms (mean=522.48ms, min=302ms, max=2988ms)
        Dromaeo/dom-modify/createElement: 507.15runs/s +-36.00% (<--- pretty noisy)
        Dromaeo/dom-modify/createTextNode: 251.01runs/s +-6.57%
        Dromaeo/dom-modify/cloneNode: 177.85runs/s +-28.74% (<--- pretty noisy)

        Chromium/V8/Mac (without the patch):
        createTextNode : median=317ms (mean=439.08ms, min=303ms, max=3126ms)
        createElement : median=403ms (mean=695.70ms, min=398ms, max=5615ms)
        cloneNode : median=384ms (mean=577.96ms, min=372ms, max=5313ms)
        Dromaeo/dom-modify/createElement: 493.89runs/s +-28.32% (<--- pretty noisy)
        Dromaeo/dom-modify/createTextNode: 279.66runs/s +-1.91%
        Dromaeo/dom-modify/cloneNode: 173.06runs/s +-24.41% (<--- pretty noisy)

        Chromium/V8/Mac (with the patch):
        createTextNode : median=277ms (mean=460.88ms, min=270ms, max=3381ms)
        createElement : median=379ms (mean=637.52ms, min=372ms, max=3022ms)
        cloneNode : median=369ms (mean=581.72ms, min=363ms, max=3050ms)
        Dromaeo/dom-modify/createElement: 510.47runs/s +-28.13% (<--- pretty noisy)
        Dromaeo/dom-modify/createTextNode: 215.80runs/s +-20.99% (<--- pretty noisy)
        Dromaeo/dom-modify/cloneNode: 174.41runs/s +-24.85% (<--- pretty noisy)

        Safari/JavaScriptCore/Mac:
        createTextNode : median=142ms (mean=141.04ms, min=110ms, max=168ms)
        createElement : median=234ms (mean=245.74ms, min=219ms, max=305ms)
        cloneNode : median=210ms (mean=213.36ms, min=204ms, max=284ms)
        Dromaeo/dom-modify/createElement: 822.49runs/s +-1.69%
        Dromaeo/dom-modify/createTextNode: 735.57runs/s +-0.91%
        Dromaeo/dom-modify/cloneNode: 135.20runs/s +-4.13%

        This patch makes the following two optimizations:

        [1] If the currently running context is equal to the context that we are about to enter,
        we do not call context->Enter().
        [2] We do not create a Local handle of the context until we really need to enter the context.

        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateToV8Converters):
        * bindings/v8/V8Proxy.cpp:
        (WebCore::V8Proxy::persistentContext):
        (WebCore):
        * bindings/v8/V8Proxy.h:
        (V8Proxy):

        * WebCore/bindings/scripts/test/V8/V8TestActiveDOMObject.cpp: Updated run-bindings-tests results.

2012-03-27  Bill Budge  <bbudge@chromium.org>

        cross-origin XMLHttpRequest doesn't work with redirect
        https://bugs.webkit.org/show_bug.cgi?id=57600

        Reviewed by Adam Barth.

        Changes DocumentThreadableLoader to follow the CORS redirect steps when
        asynchronously loading a cross origin request with access control. Synchronous
        loads should not be affected. Also adds methods to ResourceRequestBase to
        clear special request headers that aren't allowed when using access control.
        Follows the CORS spec as described in the Latest Editor Draft at:
        http://www.w3.org/TR/cors/

        Test: http/tests/xmlhttprequest/access-control-and-redirects-async.html

        * loader/DocumentThreadableLoader.cpp:
        * loader/DocumentThreadableLoader.h:
        * platform/network/ResourceRequestBase.cpp:
        * platform/network/ResourceRequestBase.h:

2012-03-27  Adam Barth  <abarth@webkit.org>

        ImageLoader::m_firedLoadEvent is a confusing name
        https://bugs.webkit.org/show_bug.cgi?id=82283

        Reviewed by Kentaro Hara.

        This patch renames m_firedLoadEvent (and friends) to
        m_hasPendingLoadEvent (and negates the value).  That name more
        accurately reflects the semantics of this piece of state.  For example,
        we now initialize m_hasPendingLoadEvent to false, which makes sense as
        there is no pending load event, whereas before we initialized
        m_firedLoadEvent to true, which made less sense since we hadn't yet
        actually fired the load event.

        * bindings/v8/V8GCController.cpp:
        (WebCore::calculateGroupId):
        * html/HTMLImageElement.cpp:
        (WebCore::HTMLImageElement::attach):
        * html/HTMLImageElement.h:
        (HTMLImageElement):
        (WebCore::HTMLImageElement::hasPendingLoadEvent):
        (WebCore::HTMLImageElement::hasPendingActivity):
        * html/ImageInputType.cpp:
        (WebCore::ImageInputType::attach):
        * loader/ImageLoader.cpp:
        (WebCore::ImageLoader::ImageLoader):
        (WebCore::ImageLoader::~ImageLoader):
        (WebCore::ImageLoader::setImage):
        (WebCore::ImageLoader::updateFromElement):
        (WebCore::ImageLoader::notifyFinished):
        (WebCore::ImageLoader::dispatchPendingBeforeLoadEvent):
        (WebCore::ImageLoader::dispatchPendingLoadEvent):
        (WebCore::ImageLoader::dispatchPendingErrorEvent):
        * loader/ImageLoader.h:
        (WebCore::ImageLoader::hasPendingBeforeLoadEvent):
        (WebCore::ImageLoader::hasPendingLoadEvent):
        (ImageLoader):
        * svg/SVGImageElement.cpp:
        (WebCore::SVGImageElement::haveLoadedRequiredResources):

2012-03-27  Dan Bernstein  <mitz@apple.com>

        Tried to fix 32-bit builds.

        * css/StylePropertySet.cpp:
        (WebCore::StylePropertySet::asText):

2012-03-26  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r112199.
        http://trac.webkit.org/changeset/112199
        https://bugs.webkit.org/show_bug.cgi?id=82295

        Breaks Chromium Win compilation (Requested by pfeldman on
        #webkit).

        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateConstructorCallback):
        (GenerateNamedConstructorCallback):
        (GenerateToV8Converters):
        (GetDomMapFunction):
        * bindings/scripts/test/V8/V8Float64Array.cpp:
        (WebCore::V8Float64Array::wrapSlow):
        * bindings/scripts/test/V8/V8TestActiveDOMObject.cpp:
        (WebCore::V8TestActiveDOMObject::wrapSlow):
        * bindings/scripts/test/V8/V8TestCustomNamedGetter.cpp:
        (WebCore::V8TestCustomNamedGetter::wrapSlow):
        * bindings/scripts/test/V8/V8TestEventConstructor.cpp:
        (WebCore::V8TestEventConstructor::wrapSlow):
        * bindings/scripts/test/V8/V8TestEventTarget.cpp:
        (WebCore::V8TestEventTarget::wrapSlow):
        * bindings/scripts/test/V8/V8TestInterface.cpp:
        (WebCore::V8TestInterface::wrapSlow):
        * bindings/scripts/test/V8/V8TestMediaQueryListListener.cpp:
        (WebCore::V8TestMediaQueryListListener::wrapSlow):
        * bindings/scripts/test/V8/V8TestNamedConstructor.cpp:
        (WebCore::V8TestNamedConstructor::wrapSlow):
        * bindings/scripts/test/V8/V8TestObj.cpp:
        (WebCore::V8TestObj::wrapSlow):
        * bindings/scripts/test/V8/V8TestSerializedScriptValueInterface.cpp:
        (WebCore::V8TestSerializedScriptValueInterface::wrapSlow):
        * bindings/v8/V8DOMWrapper.cpp:
        (WebCore::V8DOMWrapper::setJSWrapperForDOMNode):
        (WebCore):
        * bindings/v8/V8DOMWrapper.h:
        (WebCore):
        (V8DOMWrapper):
        (WebCore::V8DOMWrapper::setJSWrapperForDOMObject):
        (WebCore::V8DOMWrapper::setJSWrapperForActiveDOMObject):

2012-03-26  David Kilzer  <ddkilzer@apple.com>

        Build system prep work for upstreaming iOS changes
        <http://webkit.org/b/82267>

        Reviewed by Mark Rowe.

        * DerivedSources.make: Move 'bison' into a variable and use
        xcrun to find it on Mac OS X.
        * bindings/scripts/preprocessor.pm:
        (applyPreprocessor): Add local @args variable.  On iOS, the
        compiler needs additional "-isysroot $(SDKROOT)" arguments when
        invoked, so it's easier to add them to an array, especially if
        $SDKROOT contains a space in the path.  Remove now-redundant
        $gccLocation variable.

2012-03-26  Nate Chapin  <japhet@chromium.org>

        Remove duplicate error() impls in CachedResource subclasses
        https://bugs.webkit.org/show_bug.cgi?id=81161

        Reviewed by Alexey Proskuryakov.

        No new tests, refactor only.

        * loader/cache/CachedCSSStyleSheet.cpp:
        * loader/cache/CachedCSSStyleSheet.h:
        * loader/cache/CachedFont.cpp:
        * loader/cache/CachedFont.h:
        * loader/cache/CachedImage.cpp:
        * loader/cache/CachedResource.h: Make checkNotify()
             virtual, so the right checkNotify() gets called in error().
        * loader/cache/CachedScript.cpp:
        * loader/cache/CachedScript.h:
        * loader/cache/CachedXSLStyleSheet.cpp:
        * loader/cache/CachedXSLStyleSheet.h:

2012-03-26  Ken Buchanan  <kenrb@chromium.org>

        Assert failure from capitalized RenderTextFragment
        https://bugs.webkit.org/show_bug.cgi?id=82096

        Reviewed by Ryosuke Niwa.

        The cause of this bug was the call to RenderTextFragment::setTextInternal
        resulting from a style change from RenderObject::addChild. The idea here
        is to better separate the code path for transforming existing text from
        the code path for replacing the underlying text of a node. For
        RenderTextFragment this has to be clear because only in the latter case
        does the first-letter get reset.

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::addChild): Added call to transformText
        * rendering/RenderText.cpp:
        (WebCore::RenderText::styleDidChange): Added call to transformText
        (WebCore::RenderText::transformText): Added
        * rendering/RenderText.h:
        (WebCore::RenderText::setText): Changed to virtual so RenderTextFragment can override
        (WebCore::RenderText::transformText): Added
        * rendering/RenderTextFragment.cpp:
        (WebCore::RenderTextFragment::styleDidChange): Removed references to
        m_allowFragmentReset which was the previous approach to separating the
        code paths
        (WebCore::RenderTextFragment::setTextInternal): Deleted
        (WebCore::RenderTextFragment::setText): Added with most of logic that was
        previously in setTextInternal
        (WebCore::RenderTextFragment::transformText): Added
        * rendering/RenderTextFragment.h:
        (WebCore::RenderTextFragment::setText): Added
        (WebCore::RenderTextFragment::transformText): Added
        (WebCore::RenderTextFragment::setTextInternal): Deleted

2012-03-26  Adam Klein  <adamk@chromium.org>

        Always set V8 wrappers via V8DOMWrapper::setJSWrapperFor* instead of WeakReferenceMap::set()
        https://bugs.webkit.org/show_bug.cgi?id=82256

        Reviewed by Adam Barth.

        This moves leakRef() calls out of generated code, centralizing them in
        V8DOMWrapper implementation. Ideally, WeakReferenceMap::set would take
        PassRefPtrs, but that's tricky given that some WeakReferenceMap's KeyType is 'void'
        (which clearly can't be wrapped in a PassRefPtr).

        Updated binding tests to reflect changes in CodeGeneratorV8.pm, no change in behavior.

        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateConstructorCallback): Use GetDomMapFunction instead of custom logic.
        (GenerateNamedConstructorCallback): ditto.
        (GenerateToV8Converters): Call V8DOMWrapper::setJSWrapper* method
        instead of directly accessing the wrapper maps and calling set.
        (GetDomMapFunction): Refactored to call new GetDomWrapperMapName function.
        (GetDomWrapperMapName): Helper pulled out of GetDomMapFunction.
        * bindings/scripts/test/V8/V8Float64Array.cpp:
        (WebCore::V8Float64Array::wrapSlow):
        * bindings/scripts/test/V8/V8TestActiveDOMObject.cpp:
        (WebCore::V8TestActiveDOMObject::wrapSlow):
        * bindings/scripts/test/V8/V8TestCustomNamedGetter.cpp:
        (WebCore::V8TestCustomNamedGetter::wrapSlow):
        * bindings/scripts/test/V8/V8TestEventConstructor.cpp:
        (WebCore::V8TestEventConstructor::wrapSlow):
        * bindings/scripts/test/V8/V8TestEventTarget.cpp:
        (WebCore::V8TestEventTarget::wrapSlow):
        * bindings/scripts/test/V8/V8TestInterface.cpp:
        (WebCore::V8TestInterface::wrapSlow):
        * bindings/scripts/test/V8/V8TestMediaQueryListListener.cpp:
        (WebCore::V8TestMediaQueryListListener::wrapSlow):
        * bindings/scripts/test/V8/V8TestNamedConstructor.cpp:
        (WebCore::V8TestNamedConstructor::wrapSlow):
        * bindings/scripts/test/V8/V8TestObj.cpp:
        (WebCore::V8TestObj::wrapSlow):
        * bindings/scripts/test/V8/V8TestSerializedScriptValueInterface.cpp:
        (WebCore::V8TestSerializedScriptValueInterface::wrapSlow):
        * bindings/v8/V8DOMWrapper.cpp: Moved setJSWrapperForDOMNode method to header to inline it.
        * bindings/v8/V8DOMWrapper.h:
        (WebCore): Forward decls.
        (V8DOMWrapper):
        (WebCore::V8DOMWrapper::setJSWrapperForDOMObject): Made inline.
        (WebCore::V8DOMWrapper::setJSWrapperForActiveDOMObject): ditto.
        (WebCore::V8DOMWrapper::setJSWrapperForDOMNode): Refactored into two methods;
        this one handles non-active Nodes.
        (WebCore::V8DOMWrapper::setJSWrapperForActiveDOMNode): Pulled out of previouse
        DOMNode method, now handles only active Nodes.
        (WebCore::V8DOMWrapper::setJSWrapperForDOMSVGElementInstance): New helper method for SVGElementInstances.

2012-03-26  Pratik Solanki  <psolanki@apple.com>

        Fix typo in method name - WebCore::miminumValueForLength should be WebCore::minimumValueForLength
        https://bugs.webkit.org/show_bug.cgi?id=82254

        Reviewed by Benjamin Poulain.

        No new tests because no functional changes.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        * css/LengthFunctions.cpp:
        (WebCore::minimumValueForLength):
        (WebCore::valueForLength):
        * css/LengthFunctions.h:
        (WebCore):
        * html/HTMLAreaElement.cpp:
        (WebCore::HTMLAreaElement::getRegion):
        * platform/win/PopupMenuWin.cpp:
        (WebCore::PopupMenuWin::paint):
        * rendering/AutoTableLayout.cpp:
        (WebCore::AutoTableLayout::layout):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::textIndentOffset):
        (WebCore::RenderBlock::computeInlinePreferredLogicalWidths):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::computeLogicalWidthInRegion):
        (WebCore::RenderBox::computeLogicalWidthInRegionUsing):
        (WebCore::RenderBox::computeInlineDirectionMargins):
        (WebCore::RenderBox::computeReplacedLogicalWidthUsing):
        (WebCore::RenderBox::computeBlockDirectionMargins):
        (WebCore::RenderBox::computePositionedLogicalWidthUsing):
        (WebCore::RenderBox::computePositionedLogicalHeightUsing):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paddingTop):
        (WebCore::RenderBoxModelObject::paddingBottom):
        (WebCore::RenderBoxModelObject::paddingLeft):
        (WebCore::RenderBoxModelObject::paddingRight):
        (WebCore::RenderBoxModelObject::paddingBefore):
        (WebCore::RenderBoxModelObject::paddingAfter):
        (WebCore::RenderBoxModelObject::paddingStart):
        (WebCore::RenderBoxModelObject::paddingEnd):
        (WebCore::RenderBoxModelObject::calculateBackgroundImageGeometry):
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::preferredMainAxisContentExtentForChild):
        (WebCore::RenderFlexibleBox::computeMainAxisPreferredSizes):
        * rendering/RenderInline.cpp:
        (WebCore::computeMargin):
        * rendering/RenderMenuList.cpp:
        (WebCore::RenderMenuList::updateOptionsWidth):
        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::computeReplacedLogicalWidth):
        * rendering/RenderScrollbarPart.cpp:
        (WebCore::calcScrollbarThicknessUsing):
        (WebCore::RenderScrollbarPart::computeScrollbarWidth):
        (WebCore::RenderScrollbarPart::computeScrollbarHeight):
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::computeLogicalWidth):
        (WebCore::RenderTable::convertStyleLogicalWidthToComputedWidth):
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::calcRowLogicalHeight):
        * rendering/RenderText.h:
        (WebCore::RenderText::marginLeft):
        (WebCore::RenderText::marginRight):
        * rendering/style/RenderStyle.h:

2012-03-26  Shinya Kawanaka  <shinyak@chromium.org>

        Triggers assertion if dragging from outside of <meter> in a shadow tree to inside of it.
        https://bugs.webkit.org/show_bug.cgi?id=82177

        Reviewed by Dimitri Glazkov.

        VisibleSelection::adjustSelectionToAvoidCrossingShadowBoundaries has moved the start position or
        the end position to the invalid position, i.e. position after (before) the non-existing node.

        This patch fixes the problem, and adds assertion that the selection does not cross shadow boundaries.

        Test: fast/dom/shadow/drag-to-meter-in-shadow-crash.html

        * editing/VisibleSelection.cpp:
        (WebCore::VisibleSelection::adjustSelectionToAvoidCrossingShadowBoundaries):

2012-03-26  Scott Byer  <scottbyer@chromium.org>

        Enable layout testing of the scroll animator.
        https://bugs.webkit.org/show_bug.cgi?id=81858
        Add a call to the InternalSettings that layout tests can use to
        turn on scroll animation. Enable animation updates for the
        Chromium platform DRT when scroll animation has been turned on in
        a test. This should be a no-op for all current layout tests.

        Reviewed by James Robinson.

        No new tests. Layout test results should be unchanged.

        * testing/InternalSettings.cpp:
        (WebCore::InternalSettings::setEnableScrollAnimator):
        (WebCore):
        (WebCore::InternalSettings::scrollAnimatorEnabled):
        * testing/InternalSettings.h:
        (InternalSettings):
        * testing/InternalSettings.idl:

2012-03-26  Charles Wei  <charles.wei@torchmobile.com.cn>

        Fix minor spell error in DocumentLoader.h
        https://bugs.webkit.org/show_bug.cgi?id=82141

        Reviewed by Nate Chapin.

        Just fix spell error, no new tests.

        * loader/DocumentLoader.h:
        (WebCore::DocumentLoader::setClientRedirectSourceForHistory):

2012-03-26  Brian Salomon  <bsalomon@google.com>

        [Skia] Remove use of deprecated Skia constant and struct field names
        https://bugs.webkit.org/show_bug.cgi?id=81034

        Reviewed by James Robinson.

        No behavior change, so no tests. The modified code is executed by many existing tests.

        * platform/graphics/chromium/FrameBufferSkPictureCanvasLayerTextureUpdater.cpp:
        (WebCore::createAcceleratedCanvas):
        * platform/graphics/chromium/cc/CCRenderSurfaceFilters.cpp:
        (WebCore::CCRenderSurfaceFilters::apply):
        * platform/graphics/skia/ImageBufferSkia.cpp:
        (WebCore::createAcceleratedCanvas):

2012-03-26  Nat Duca  <nduca@chromium.org>

        [chromium] Add isInputThrottled/didBecomeReadyForAdditionalInput to WebWidget
        https://bugs.webkit.org/show_bug.cgi?id=82265

        In threaded compositing mode, the WebWidget is self-scheduled,
        receiving damage and processing it without forwarding that damage
        up to the embedding WebWidgetClient. In Chromium's case, the
        client uses the presence of damage to perform input flow
        control. This patch exposes the need for input flow control to the
        embedder, while keeping the actual logic about what exactly
        warrants input flow control inside the implementation.

        Reviewed by James Robinson.

        * platform/graphics/chromium/cc/CCLayerTreeHost.cpp:
        (WebCore::CCLayerTreeHost::commitComplete):
        (WebCore::CCLayerTreeHost::commitRequested):
        (WebCore):
        * platform/graphics/chromium/cc/CCLayerTreeHost.h:
        (CCLayerTreeHostClient):
        (CCLayerTreeHost):
        * platform/graphics/chromium/cc/CCProxy.h:
        (CCProxy):
        * platform/graphics/chromium/cc/CCSingleThreadProxy.cpp:
        (WebCore::CCSingleThreadProxy::commitRequested):
        (WebCore):
        * platform/graphics/chromium/cc/CCSingleThreadProxy.h:
        (CCSingleThreadProxy):
        * platform/graphics/chromium/cc/CCThreadProxy.cpp:
        (WebCore::CCThreadProxy::commitRequested):
        (WebCore):
        * platform/graphics/chromium/cc/CCThreadProxy.h:
        (CCThreadProxy):

2012-03-26  Adam Barth  <abarth@webkit.org>

        When <img crossorigin> fails the CORS check, we should fire the error event
        https://bugs.webkit.org/show_bug.cgi?id=81998

        Reviewed by Nate Chapin.

        The spec says we're supposed to fire the error event when the CORS
        check fails, but we haven't been.  This patch is larger than it might
        otherwise be because we're firing the event asynchronously, but that
        seems like the right thing to do.

        Tests: http/tests/security/img-with-failed-cors-check-fails-to-load.html

        * dom/Document.cpp:
        (WebCore::Document::implicitClose):
        * loader/ImageLoader.cpp:
        (WebCore::errorEventSender):
        (WebCore):
        (WebCore::ImageLoader::ImageLoader):
        (WebCore::ImageLoader::~ImageLoader):
        (WebCore::ImageLoader::setImage):
        (WebCore::ImageLoader::updateFromElement):
        (WebCore::ImageLoader::notifyFinished):
        (WebCore::ImageLoader::dispatchPendingEvent):
        (WebCore::ImageLoader::dispatchPendingErrorEvent):
        (WebCore::ImageLoader::dispatchPendingErrorEvents):
        * loader/ImageLoader.h:
        (ImageLoader):

2012-03-26  Stephen White  <senorblanco@chromium.org>

        Make filters and the threaded compositor play well together.
        https://bugs.webkit.org/show_bug.cgi?id=78139
        
        Use a dedicated GraphicsContext3D instance for all filters calls in
        the threaded case.  Clone all FilterOperations for thread safety
        in the threaded case.

        Reviewed by James Robinson.
        
        Covered by tests in LayoutTests/css3/filters.

        * platform/graphics/chromium/LayerChromium.cpp:
        (WebCore::LayerChromium::setFilters):
        Set a global flag if we've seen content with filters, so we know
        we need to create the filter context.
        (WebCore::LayerChromium::pushPropertiesTo):
        Clone all filter operations if we're in the threaded case.
        * platform/graphics/chromium/cc/CCLayerTreeHost.cpp:
        (WebCore):
        * platform/graphics/chromium/cc/CCLayerTreeHost.h:
        (WebCore::CCLayerTreeHost::needsFilterContext):
        (WebCore::CCLayerTreeHost::setNeedsFilterContext):
        (CCLayerTreeHost):
        Add flag and accessors for needsFilterContext.
        * platform/graphics/chromium/cc/CCRenderSurface.cpp:
        (WebCore::CCRenderSurface::applyFilters):
        Pick up the appropriate context from SharedGraphicsContext3D,
        depending if we're in the threaded case or not.
        * platform/graphics/chromium/cc/CCThreadProxy.cpp:
        (WebCore::CCThreadProxy::recreateContext):
        For the threaded compositor re-create the filter context
        alongside the main compositor context on lost context, if requested.
        (WebCore::CCThreadProxy::beginFrame):
        Create the filter context in beginFrame, if it was resquested and is
        NULL.  This handles the first-use case.
        * platform/graphics/filters/CustomFilterOperation.h:
        (WebCore::CustomFilterOperation::clone):
        Assert if trying to clone the custom filter operation (it has
        non-threadsafe members).
        * platform/graphics/filters/FilterOperation.h:
        (WebCore::DefaultFilterOperation::clone):
        (WebCore::PassthroughFilterOperation::clone):
        (WebCore::ReferenceFilterOperation::clone):
        (WebCore::BasicColorMatrixFilterOperation::clone):
        (WebCore::BasicComponentTransferFilterOperation::clone):
        (WebCore::GammaFilterOperation::clone):
        (WebCore::BlurFilterOperation::clone):
        (WebCore::DropShadowFilterOperation::clone):
        Add clone methods for all FilterOperations.
        * platform/graphics/gpu/SharedGraphicsContext3D.cpp:
        (WebCore::SharedGraphicsContext3DImpl::getOrCreateContext):
        (WebCore::SharedGraphicsContext3DImpl::getContext):
        (WebCore::SharedGraphicsContext3DImpl::createContext):
        (WebCore::SharedGraphicsContext3D::get):
        (WebCore::getOrCreateContextForImplThread):
        (WebCore::SharedGraphicsContext3D::getForImplThread):
        (WebCore::SharedGraphicsContext3D::haveForImplThread):
        (WebCore::SharedGraphicsContext3D::createForImplThread):
        Split out context creation, lost context recovery, and retrieval
        into separate functions, so the impl thread can use only the parts
        it wants on the threads it wants (create and have on main, get on impl).
        Add asserts to ensure that's how they're called.
        * platform/graphics/gpu/SharedGraphicsContext3D.h:
        (SharedGraphicsContext3D):
        Reuse the SharedGraphicsContext infrastructure to create a new
        context singleton for filter use in the threaded compositor.

2012-03-26  Adam Barth  <abarth@webkit.org>

        FrameLoader::shouldAllowNavigation uses Frame for context rather than Document
        https://bugs.webkit.org/show_bug.cgi?id=81020

        Reviewed by Eric Seidel.

        The vast majority of security checks in the browser should use a
        ScriptExecutionContext (aka a Document) to designate "who" is
        attempting to perform a given action.  Unfortunately,
        shouldAllowNavigation was using a Frame to designate "who" is
        attempting the navigation.

        In cases when the executing script is "inactive" (i.e., belongs to a
        document that is not currently displayed in a Frame), using the Frame
        can cause us to grant the script the privileges of the document that's
        currently displayed in the Frame rather than the one that contains the
        script.

        This patch moves shouldAllowNavigation from FrameLoader to Document
        (and renames it to canNavigate), effectively change the context object
        from a Frame to a Document.

        Test: http/tests/security/frameNavigation/inactive-function-in-popup-navigate-child.html

        * bindings/generic/BindingSecurity.h:
        (BindingSecurity):
        (WebCore):
        * bindings/v8/V8Utilities.cpp:
        (WebCore):
        * bindings/v8/V8Utilities.h:
        (WebCore):
            - Deletes unused code.
        * dom/Document.cpp:
        (WebCore::canAccessAncestor):
        (WebCore):
        (WebCore::Document::canNavigate):
            - canNavigate is copied from FrameLoader::shouldAllowNavigation.
              I've added a null-check bailout if the document is inactive.
        * dom/Document.h:
        (Document):
        * loader/FormState.cpp:
        (WebCore::FormState::FormState):
        (WebCore::FormState::create):
        * loader/FormState.h:
        (WebCore):
        (FormState):
        (WebCore::FormState::sourceDocument):
        * loader/FormSubmission.cpp:
        (WebCore::FormSubmission::create):
            - Changes the context object from Frame to Document.
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::submitForm):
        (WebCore::FrameLoader::loadFrameRequest):
        (WebCore):
        (WebCore::FrameLoader::findFrameForNavigation):
            - FrameLoader::findFrameForNavigation still incorrectly uses Frame
              as the context object, but that's a bug for another patch.
        (WebCore::createWindow):
        * loader/FrameLoader.h:
        (FrameLoader):
        * loader/NavigationScheduler.cpp:
        (WebCore::ScheduledFormSubmission::fire):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::close):
        (WebCore::DOMWindow::setLocation):
        (WebCore::DOMWindow::open):
        * page/History.cpp:
        (WebCore::History::go):

2012-03-26  Vangelis Kokkevis  <vangelis@chromium.org>

        [chromium] Simplify and fix CCLayerSorter
        https://bugs.webkit.org/show_bug.cgi?id=82114

        A significant cleanup, simplification and improvement of the CCLayerSorter code.
        Simplified the LayerShape structure to use WebCore's FloatQuad for all overlap tests.
        By treating every layer as two triangles, the old overlap code did a lot of redundant work
        including testing two of the vertices of the layer and its diagonal twice. The new overlap
        tests check:
        1. The four corners of each of the two layers against the other layer.
        2. The four edges of each layer against the edges of the other layer.
        Unlike the old code, the new code has no early-outs in the overlap tests as those where causing
        us to miss legitimate overlaps.
        A new technique for breaking dependency cycles introduced by intersecting layers is implemented.
        Instead of arbitrarily breaking cycles by choosing the node in the graph with the smallest number of
        incoming edges (i.e. layers that need to be drawn before it) we chose the one with the smallest sum
        of graph edge weights (defined as the max depth difference between two layers). Layers that intersect
        have their respective graph edge weight set to zero, making them more likely to be picked for breaking
        the cycles (it's not a perfect solution but it seems to perform much better than the previous one).

        In addition to being overly complex and doing reduntant work, the old code was missing a
        perspective divide when computing the coordinates of the layer's corners in the projected plane
        which was the source of a lot of mis-sorted results.

        In all, these improvements, fix a lot of outstanding issues with layer sorting, on pages such as:
        http://www.keithclark.co.uk/labs/3dcss/demo/
        http://2012.beercamp.com
        https://developer.mozilla.org/fr/demos/detail/the-box/launch

        Tests: CCLayerSorter unit tests.

        Reviewed by Kenneth Russell.

        * platform/graphics/chromium/cc/CCLayerSorter.cpp:
        (WebCore):
        (WebCore::perpProduct):
        (WebCore::edgeEdgeTest):
        (WebCore::CCLayerSorter::checkOverlap):
        (WebCore::CCLayerSorter::LayerShape::LayerShape):
        (WebCore::CCLayerSorter::LayerShape::layerZFromProjectedPoint):
        (WebCore::CCLayerSorter::createGraphNodes):
        (WebCore::CCLayerSorter::createGraphEdges):
        (WebCore::CCLayerSorter::sort):
        * platform/graphics/chromium/cc/CCLayerSorter.h:
        (WebCore::CCLayerSorter::CCLayerSorter):
        (CCLayerSorter):
        (LayerShape):
        (WebCore::CCLayerSorter::GraphNode::GraphNode):
        (GraphNode):
        (WebCore::CCLayerSorter::GraphEdge::GraphEdge):
        (GraphEdge):

2012-03-26  Fady Samuel  <fsamuel@chromium.org>

        [Chromium] Using WebViewPlugins with --force-compositing-mode causes an ASSERT to fail
        https://bugs.webkit.org/show_bug.cgi?id=81954

        Reviewed by James Robinson.

        A static variable s_inPaintContents is set when painting, and it ensures
        that we don't delete GraphicsLayers or create GraphicsLayers while painting.

        However, because this variable is static, it does not permit the existence
        of multiple WebViews in different stages (one laying out and one painting).

        This manifests itself if one attempts to use the --force-compositing-mode
        in Chromium and attempts to navigate to a page with a missing or old plugin
        or a browser plugin (which uses a WebViewPlugin as a placeholder until it's
        done loading).

        The solution to simplify debugging is to make this flag per-Page.
        We can access Page from RenderLayerBacking which is a GraphicsLayerClient.
        We add a new method GraphicsLayerClient::verifyNotPainting with a default
        (do nothing) implementation and override it in RenderLayerBacking to
        test the flag set in Page.

        * page/Page.cpp:
        (WebCore::Page::Page):
        * page/Page.h:
        (Page):
        (WebCore::Page::setIsPainting):
        (WebCore::Page::isPainting):
        * platform/graphics/GraphicsLayer.cpp:
        (WebCore::GraphicsLayer::GraphicsLayer):
        (WebCore::GraphicsLayer::~GraphicsLayer):
        (WebCore::GraphicsLayer::paintGraphicsLayerContents):
        * platform/graphics/GraphicsLayerClient.h:
        (GraphicsLayerClient):
        (WebCore::GraphicsLayerClient::verifyNotPainting):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::paintContents):
        (WebCore):
        (WebCore::RenderLayerBacking::verifyNotPainting):
        * rendering/RenderLayerBacking.h:
        (RenderLayerBacking):

2012-03-23  Ryosuke Niwa  <rniwa@webkit.org>

        cssText should use shorthand notations
        https://bugs.webkit.org/show_bug.cgi?id=81737

        Reviewed by Enrica Casucci.

        Use shorthand properties to serialize style properties for cssText.

        The overall algorithm is to look for any property that has a shorthand, and then check if
        the shorthand value could be obtained (the condition is quite complicated for border properties).
        If it could, then append that value to the string builder, and set the corresponding entries in
        shorthandPropertyAppeared and shorthandPropertyUsed. If not, only turn on the bit in
        shorthandPropertyAppeared on to avoid calling getPropertyValue again for longhand properties
        that use the same shorthand property when we cannot use the shorthand.

        Test: fast/css/cssText-shorthand.html

        * css/StylePropertySet.cpp:
        (WebCore::StylePropertySet::asText):

2012-03-26  Bolin Hsu  <bhsu@google.com>

        [Chromium] Add Android keycodes
        https://bugs.webkit.org/show_bug.cgi?id=81950

        Add the missing Android keycodes listed in the bug.

        Reviewed by Adam Barth.

        * platform/chromium/KeyCodeConversionAndroid.cpp:
        (WebCore::windowsKeyCodeForKeyEvent):
        * platform/chromium/KeyboardCodes.h:

2012-03-26  Levi Weintraub  <leviw@chromium.org>

        Switch ColumnInfo::addForcedBreak to LayoutUnits
        https://bugs.webkit.org/show_bug.cgi?id=82210

        Reviewed by Eric Seidel.

        Forced breaks are added by local offsets, which should be in LayoutUnits.

        No new tests. No change in behavior.

        * rendering/ColumnInfo.h:
        (WebCore::ColumnInfo::addForcedBreak):

2012-03-26  Levi Weintraub  <leviw@chromium.org>

        Update LayoutUnit usage in ContainerNode, Element, and ElementRareData
        https://bugs.webkit.org/show_bug.cgi?id=82219

        Reviewed by Eric Seidel.

        No new tests. No change in behavior.

        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::getLowerRightCorner): linesBoundingBox returns the enclosing IntRect
        of the contained lines. Inline's aren't bounded in LayoutUnits nor pixel snapped.
        * dom/Element.cpp:
        (WebCore::Element::boundsInRootViewSpace): Coordinates in root view space are akin to absolute
        coordinates, which are always expressed in integers.
        * dom/Element.h:
        (Element):
        * dom/ElementRareData.h:
        (WebCore::defaultMinimumSizeForResizing): Using numeric_limits<LayoutUnit>::max instead of
        INT_MAX to avoid overflowing when LayoutUnits are sub-pixel.

2012-03-26  Adam Klein  <adamk@chromium.org>

        Update binding test output for V8 after r112163.

        * bindings/scripts/test/V8/V8TestInterface.cpp:
        (WebCore::V8TestInterface::constructorCallback):
        * bindings/scripts/test/V8/V8TestNamedConstructor.cpp:
        (WebCore::V8TestNamedConstructorConstructorCallback):
        * bindings/scripts/test/V8/V8TestObj.cpp:
        (WebCore::V8TestObj::constructorCallback):
        * bindings/scripts/test/V8/V8TestSerializedScriptValueInterface.cpp:
        (WebCore::V8TestSerializedScriptValueInterface::constructorCallback):

2012-03-26  Levi Weintraub  <leviw@chromium.org>

        Update localSelectionRect to return a LayoutRect
        https://bugs.webkit.org/show_bug.cgi?id=82183

        Reviewed by Eric Seidel.

        localSelectionRect returns a rectangle in the coordinate space of its renderer,
        and therefor should remain LayoutUnits until being promoted to absolute
        coordinates or painted. Also fixing an incorrect conversion of startPos and
        endPos in selectionRectForRepaint.

        No new tests. No change in behavior.

        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::localSelectionRect): Continuing to use enclosingIntRect
        for the value being returned from the font engine since these floating point
        values should not be pixel snapped.
        * rendering/InlineTextBox.h:
        (InlineTextBox):
        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::localSelectionRect):
        * rendering/RenderReplaced.h:
        (RenderReplaced):
        * rendering/RenderText.cpp:
        (WebCore::localQuadForTextBox):
        (WebCore::RenderText::absoluteRectsForRange):
        (WebCore::RenderText::absoluteQuadsForRange):
        (WebCore::RenderText::selectionRectForRepaint): Fixing an incorrect conversion of
        start/endPos to LayoutUnits. These values represent a range of selected characters,
        not layout values!
        * rendering/svg/RenderSVGInlineText.cpp:
        (WebCore::RenderSVGInlineText::localCaretRect):
        * rendering/svg/SVGInlineTextBox.cpp:
        (WebCore::SVGInlineTextBox::localSelectionRect):
        * rendering/svg/SVGInlineTextBox.h:
        (SVGInlineTextBox):

2012-03-26  Justin Novosad  <junov@chromium.org>

        [Chromium] Crash in Canvas2DLayerChromium::pushPropertiesTo
        https://bugs.webkit.org/show_bug.cgi?id=82243

        Reviewed by James Robinson.

        Adding null pointer check to prevent crash and texture object
        validity check to prevent potential graphics glitch

        * platform/graphics/chromium/Canvas2DLayerChromium.cpp:
        (WebCore::Canvas2DLayerChromium::pushPropertiesTo):

2012-03-26  Adam Klein  <adamk@chromium.org>

        Use PassRefPtr in V8DOMWrapper interface to avoid explicit ref() calls
        https://bugs.webkit.org/show_bug.cgi?id=82238

        Reviewed by Adam Barth.

        The setJSWrapper* methods previously featured a comment that asked
        callers to ref the objects before passing them in. This change makes
        that contract explicit (and allows the removal of the comment).

        In addition, for ConstructorCallbacks, this change slightly reduces
        refcount churn by passing on the initial ref via RefPtr::release().

        No new tests, no change in behavior.

        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateConstructorCallback): Use RefPtr::release() to avoid refcount churn and remove explicit ref() call.
        (GenerateNamedConstructorCallback): ditto.
        * bindings/v8/V8DOMWindowShell.cpp:
        (WebCore::V8DOMWindowShell::installDOMWindow): Cast to a PassRefPtr and remove explicit ref call.
        * bindings/v8/V8DOMWrapper.cpp:
        (WebCore::V8DOMWrapper::setJSWrapperForDOMNode): Pass leaked refs into the DOMNodeMaps.
        * bindings/v8/V8DOMWrapper.h:
        (V8DOMWrapper): Make the setJSWrapperFor* methods take PassRefPtr<T>.
        (WebCore::V8DOMWrapper::setJSWrapperForDOMObject): Pass leaked ref into the DOMObjectMap.
        (WebCore::V8DOMWrapper::setJSWrapperForActiveDOMObject): Pass leaked ref into the ActiveDOMObjectMap.
        * bindings/v8/V8Proxy.h:
        (WebCore::toV8): Remove explicit ref.
        * bindings/v8/WorkerContextExecutionProxy.cpp:
        (WebCore::WorkerContextExecutionProxy::initContextIfNeeded): Cast to a PassRefPTr and remove explicit ref call.
        * bindings/v8/custom/V8HTMLImageElementConstructor.cpp:
        (WebCore::v8HTMLImageElementConstructorCallback): Use RefPtr::release() to avoid refcount churn and remove explicit ref.
        * bindings/v8/custom/V8WebKitMutationObserverCustom.cpp:
        (WebCore::V8WebKitMutationObserver::constructorCallback): ditto.
        * bindings/v8/custom/V8WebSocketCustom.cpp:
        (WebCore::V8WebSocket::constructorCallback): ditto.
        * bindings/v8/custom/V8XMLHttpRequestConstructor.cpp:
        (WebCore::V8XMLHttpRequest::constructorCallback): ditto.

2012-03-26  Alexey Proskuryakov  <ap@apple.com>

        Remove obsolete FormDataStreamMac code
        https://bugs.webkit.org/show_bug.cgi?id=82244

        Reviewed by Brady Eidson.

        * platform/network/ResourceHandle.h:
        Removed ResourceHandle::didSendBodyDataDelegateExists().

        * platform/network/mac/FormDataStreamMac.h:
        * platform/network/mac/FormDataStreamMac.mm:
        Removed code that was needed to call ResourceLoaderClient::didSendData() before Foundation
        added support for it.

        * platform/network/mac/ResourceHandleMac.mm:
        (WebCore::ResourceHandle::start):
        (WebCore::ResourceHandle::cancel):
        (-[WebCoreResourceHandleAsDelegate connection:willSendRequest:redirectResponse:]):
        (-[WebCoreResourceHandleAsDelegate connectionDidFinishLoading:]):
        (-[WebCoreResourceHandleAsDelegate connection:didFailWithError:]):
        We no longer need to associate streams with ResourceHandles!

2012-03-26  Adam Klein  <adamk@chromium.org>

        V8RecursionScope should not hold a raw pointer to ScriptExecutionContext
        https://bugs.webkit.org/show_bug.cgi?id=82222

        Reviewed by Eric Seidel.

        Instead of holding onto ScriptExecutionContext, cache the boolean value we
        care about (context->isDocument()). This avoids problems if the
        context goes away as a result of the script we just ran.

        Test: fast/frames/subframe-load-js-url-crash.html

        * bindings/v8/V8RecursionScope.cpp:
        (WebCore::V8RecursionScope::didLeaveScriptContext): Check the cached
        bool instead of calling into the context.
        * bindings/v8/V8RecursionScope.h:
        (WebCore::V8RecursionScope::V8RecursionScope): Call isDocument from
        the constructor and cache the result.
        (WebCore::V8RecursionScope::~V8RecursionScope): No longer need to pass
        anything to didLeaveScriptContext since it's now a member.
        (V8RecursionScope): Make didLeaveScriptContext a member function and
        remove its argument. Add member bool to hold the value of isDocument.

2012-03-26  Dana Jansens  <danakj@chromium.org>

        [chromium] assertion being hit in CCLayerTreeHost::updateCompositorResources
        https://bugs.webkit.org/show_bug.cgi?id=82239

        Reviewed by Adrienne Walker.

        The assert is incorrect and should check the animation state on
        the surface, not the owning layer.

        * platform/graphics/chromium/cc/CCLayerTreeHost.cpp:
        (WebCore::CCLayerTreeHost::updateCompositorResources):

2012-03-26  Levi Weintraub  <leviw@chromium.org>

        Correct LayoutUnit usage in RenderFieldSet and RenderMenuItem
        https://bugs.webkit.org/show_bug.cgi?id=82179

        Reviewed by Julien Chaffraix.

        Correcting small misuses of ints vs LayoutUnits in RenderFieldSet and RenderMenuItem. Also
        adding zeroLayoutUnit where necessary to fix the sub-pixel build. See below for details.

        No new tests. No change in behavior.

        * rendering/RenderFieldset.cpp:
        (WebCore::RenderFieldset::paintBoxDecorations): Clip rects need to be pixel snapped to mirror
        the actual coordinates we paint.
        (WebCore::RenderFieldset::paintMask): Using zeroLayoutUnit for ternary operation to fix the
        sub-pixel build.
        * rendering/RenderMenuList.cpp:
        (WebCore::RenderMenuList::showPopup): Correctly using an IntRect for absoluteBoundingBoxRect.
        (WebCore::RenderMenuList::clientPaddingLeft): Correcting mismatched return type with header.
        (WebCore::RenderMenuList::clientPaddingRight): Ditto.

2012-03-26  Dan Bernstein  <mitz@apple.com>

        Tried to fix an unused parameter warning after r112154.

        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::layoutBlock): Changed to not pass relayoutChildren to
        layoutFlexItems.
        (WebCore::RenderFlexibleBox::layoutFlexItems): Removed the unused relayoutChildren parameter.
        * rendering/RenderFlexibleBox.h:

2012-03-26  Rob Arnold  <robarnold@fb.com>

        SyntheticStyleCalc on an element should not force recalculation on its children
        https://bugs.webkit.org/show_bug.cgi?id=79389

        Reviewed by Simon Fraser.

        No new tests. Existing tests cover correctness, not sure how to test for performance.

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

2012-03-26  Tony Chang  <tony@chromium.org>

        apply cross axis constraints before aligning children in flexbox
        https://bugs.webkit.org/show_bug.cgi?id=82240

        Reviewed by Ojan Vafai.

        We weren't applying max-height constraints before aligning children.
        This would cause center, end, stretch alignment to be wrong if we hit
        a max-height on a flexbox.

        This patch also moves the repositioning logic to happen after
        computeLogicalHeight, which will be useful for flex-line-pack.

        New test case in css3/flexbox/flex-align.html

        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::layoutBlock):
        (WebCore::RenderFlexibleBox::layoutFlexItems):
        (WebCore::RenderFlexibleBox::layoutAndPlaceChildren):
        * rendering/RenderFlexibleBox.h:

2012-03-26  Anders Carlsson  <andersca@apple.com>

        Find in page overlay and bouncy are not always positioned correctly
        https://bugs.webkit.org/show_bug.cgi?id=82247
        <rdar://problem/10866139>

        Reviewed by Sam Weinig.

        In WebCore, a lot of code depends on scroll position updates to happen synchronously, so
        update the frame view scroll position before asking the scrolling thread to scroll.

        * page/scrolling/ScrollingCoordinator.cpp:
        (WebCore::ScrollingCoordinator::requestScrollPositionUpdate):

2012-03-26  Nate Chapin  <japhet@chromium.org>

        Simplify setting loading state in DocumentLoader
        https://bugs.webkit.org/show_bug.cgi?id=82099

        Reviewed by Adam Barth.

        The logic for deciding what to return for DocumentLoader::isLoading()
        is crazy. It's indirectly based on the ResourceLoaders that have
        registered themselves with the DocumentLoader, but we can make that
        relationship more direct.

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::checkLoadComplete): Renamed from updateLoading, since it's not actually
            updating anything anymore. It now calls DOMWindow::finishedLoading() if loading is in fact done.
        (WebCore::DocumentLoader::startLoadingMainResource): The only reason this had a return value was to call
            updateLoading() if loading failed. Just call checkLoadComplete() directly (this allows it to
            be private, whereas updateLoading() was public).
        (WebCore::DocumentLoader::subresourceLoaderFinishedLoadingOnePart):
        * loader/DocumentLoader.h:
        (WebCore::DocumentLoader::isLoading): Rather than holding a separate bool, return based on the presence
            of non-multipart ResourceLoaders directly.
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::isLoading): Depend on DocumentLoader::isLoading() for the activeDocumentLoader(),
            rather than indirectly the other way around.
        (WebCore::FrameLoader::checkLoadCompleteForThisFrame): Remove several assertions that should now be
            absolutely identical to the remaining !pdl->isLoading().
        (WebCore::FrameLoader::continueLoadAfterWillSubmitForm):

2012-03-26  James Robinson  <jamesr@chromium.org>

        Scrollable plugins not registered properly in ScrollingCoordinator
        https://bugs.webkit.org/show_bug.cgi?id=82163

        Reviewed by Anders Carlsson.

        Plugins may be scrollable, so we have to add them in the non-fast scrollable region. Tested manually.

        * page/scrolling/ScrollingCoordinator.cpp:
        (WebCore::computeNonFastScrollableRegion):
        (WebCore::ScrollingCoordinator::nonFastScrollableRegion):
        (WebCore):
        * page/scrolling/ScrollingCoordinator.h:
        (ScrollingCoordinator):
        * plugins/PluginViewBase.h:
        (WebCore::PluginViewBase::scrollable):
        (PluginViewBase):

2012-03-26  Joone Hur  <joone.hur@collabora.co.uk>

        [GTK] Build fix for Accelerated Compositing with Clutter
        https://bugs.webkit.org/show_bug.cgi?id=81785

        Reviewed by Martin Robinson.

        AcceleratedCompositingContext was introduced to isolate different accelerated 
        compositing implementations(r104194), but the Clutter implementation doesn't 
        build with it. This includes an initial implementation of GraphicsContext3D 
        and fixes the build error.

        * GNUmakefile.list.am:
        * platform/graphics/clutter/DrawingBufferClutter.cpp: Added.
        (WebCore):
        (WebCore::DrawingBuffer::DrawingBuffer):
        (WebCore::DrawingBuffer::~DrawingBuffer):
        (WebCore::DrawingBuffer::platformColorBuffer):
        (WebCore::DrawingBuffer::paintCompositedResultsToCanvas):
        * platform/graphics/clutter/GraphicsContext3DClutter.cpp: Added.
        (WebCore):
        (WebCore::GraphicsContext3D::create):
        (WebCore::GraphicsContext3D::GraphicsContext3D):
        (WebCore::GraphicsContext3D::~GraphicsContext3D):
        (WebCore::GraphicsContext3D::getImageData):
        (WebCore::GraphicsContext3D::paintToCanvas):
        (WebCore::GraphicsContext3D::setContextLostCallback):
        (WebCore::GraphicsContext3D::setErrorMessageCallback):
        (WebCore::GraphicsContext3D::makeContextCurrent):
        (WebCore::GraphicsContext3D::platformGraphicsContext3D):
        (WebCore::GraphicsContext3D::isGLES2Compliant):
        (WebCore::GraphicsContext3D::platformLayer):
        * platform/graphics/clutter/GraphicsContext3DPrivate.cpp: Added.
        (WebCore):
        (WebCore::GraphicsContext3DPrivate::create):
        (WebCore::GraphicsContext3DPrivate::GraphicsContext3DPrivate):
        (WebCore::GraphicsContext3DPrivate::~GraphicsContext3DPrivate):
        (WebCore::GraphicsContext3DPrivate::makeContextCurrent):
        (WebCore::GraphicsContext3DPrivate::platformContext):
        (WebCore::GraphicsContext3DPrivate::paintToGraphicsLayerActor):
        * platform/graphics/clutter/GraphicsContext3DPrivate.h: Added.
        (WebCore):
        (GraphicsContext3DPrivate):
        (WebCore::GraphicsContext3DPrivate::platformLayer):

2012-03-26  Peter Rybin  <prybin@chromium.org>

        Web Inspector: Expose InspectorTypeBuilder.h to other components
        https://bugs.webkit.org/show_bug.cgi?id=82226

        Reviewed by Vsevolod Vlasov.

        This is a provisional commit that simplifies passing ealy warning system
        for the main patch https://bugs.webkit.org/show_bug.cgi?id=81558

        * WebCore.xcodeproj/project.pbxproj: config file is changed in Xcode UI.

2012-03-26  Antaryami Pandia  <antaryami.pandia@motorola.com>

        An <area> element remains focusable even though its associated <img> is not rendered.
        https://bugs.webkit.org/show_bug.cgi?id=71788

        Reviewed by Andy Estes.

        HTMLAreaElement::isFocusable() needs to consider the display and
        visibility state.

        Test: fast/events/tab-test-not-visible-imagemap.html

        * html/HTMLAreaElement.cpp:
        (WebCore::HTMLAreaElement::imageElement):
        (WebCore::HTMLAreaElement::isFocusable):
        * html/HTMLAreaElement.h: Make imageElement() const.
        (HTMLAreaElement):

2012-03-26  Anton Muhin  <antonm@chromium.org>

        Fix a typo in IDL
        https://bugs.webkit.org/show_bug.cgi?id=82215

        Reviewed by Adam Barth.

        No new tests, just a typo fix.

        * notifications/WorkerContextNotifications.idl:

2012-03-26  W. James MacLean  <wjmaclean@chromium.org>

        [chromium] Change handleGestureFling() to use CCInputHandlerClient::Wheel.
        https://bugs.webkit.org/show_bug.cgi?id=82133

        Reviewed by James Robinson.

        Covered by existing unit tests.

        * platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:
        (WebCore::CCLayerTreeHostImpl::scrollBegin):

2012-03-26  Mike Lawther  <mikelawther@chromium.org>

        CSS3 calc: mixed percent/absolute for box-reflect
        https://bugs.webkit.org/show_bug.cgi?id=82161

        Reviewed by Ojan Vafai.

        Tests: css3/calc/box-reflect-expected.html
               css3/calc/box-reflect.html

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

2012-03-26  Mike Lawther  <mikelawther@chromium.org>

        CSS3 calc: mixed percent/absolute support for vertical-align
        https://bugs.webkit.org/show_bug.cgi?id=82152

        Reviewed by Ojan Vafai.

        Tests: css3/calc/vertical-align-expected.html
               css3/calc/vertical-align.html

        * css/CSSStyleApplyProperty.cpp:
        (WebCore::ApplyPropertyVerticalAlign::applyValue):

2012-03-26  Filip Spacek  <fspacek@rim.com>

        [BlackBerry] Accelerated compositing updates
        https://bugs.webkit.org/show_bug.cgi?id=82058

        Reviewed by Rob Buis.

        * platform/graphics/blackberry/CanvasLayerWebKitThread.cpp:
        (WebCore::CanvasLayerWebKitThread::CanvasLayerWebKitThread):
        (WebCore::CanvasLayerWebKitThread::~CanvasLayerWebKitThread):
        (WebCore::CanvasLayerWebKitThread::setDevice):
        (WebCore::CanvasLayerWebKitThread::updateTextureContentsIfNeeded):
        * platform/graphics/blackberry/CanvasLayerWebKitThread.h:
        (WebCore::CanvasLayerWebKitThread::create):
        (CanvasLayerWebKitThread):
        * platform/graphics/blackberry/InstrumentedPlatformCanvas.h:
        (WebCore::InstrumentedPlatformCanvas::InstrumentedPlatformCanvas):
        (WebCore::InstrumentedPlatformCanvas::save):
        (WebCore::InstrumentedPlatformCanvas::saveLayer):
        (WebCore::InstrumentedPlatformCanvas::restore):
        (WebCore::InstrumentedPlatformCanvas::translate):
        (WebCore::InstrumentedPlatformCanvas::scale):
        (WebCore::InstrumentedPlatformCanvas::rotate):
        (WebCore::InstrumentedPlatformCanvas::skew):
        (WebCore::InstrumentedPlatformCanvas::concat):
        (WebCore::InstrumentedPlatformCanvas::setMatrix):
        (WebCore::InstrumentedPlatformCanvas::clipRect):
        (WebCore::InstrumentedPlatformCanvas::clipPath):
        (WebCore::InstrumentedPlatformCanvas::clipRegion):
        (WebCore::InstrumentedPlatformCanvas::clear):
        (WebCore::InstrumentedPlatformCanvas::drawPaint):
        (WebCore::InstrumentedPlatformCanvas::drawPoints):
        (WebCore::InstrumentedPlatformCanvas::drawRect):
        (WebCore::InstrumentedPlatformCanvas::drawPath):
        (WebCore::InstrumentedPlatformCanvas::drawBitmap):
        (WebCore::InstrumentedPlatformCanvas::drawBitmapRect):
        (WebCore::InstrumentedPlatformCanvas::drawBitmapMatrix):
        (WebCore::InstrumentedPlatformCanvas::drawSprite):
        (WebCore::InstrumentedPlatformCanvas::drawText):
        (WebCore::InstrumentedPlatformCanvas::drawPosText):
        (WebCore::InstrumentedPlatformCanvas::drawPosTextH):
        (WebCore::InstrumentedPlatformCanvas::drawTextOnPath):
        (WebCore::InstrumentedPlatformCanvas::drawPicture):
        (WebCore::InstrumentedPlatformCanvas::drawVertices):
        (WebCore::InstrumentedPlatformCanvas::drawData):
        * platform/graphics/blackberry/LayerData.h:
        (WebCore::LayerData::LayerData):
        (WebCore::LayerData::needsTexture):
        (LayerData):
        * platform/graphics/blackberry/LayerTiler.cpp:
        (WebCore::LayerTiler::updateTextureContentsIfNeeded):
        * platform/graphics/blackberry/LayerWebKitThread.cpp:
        (WebCore::LayerWebKitThread::paintContents):
        (WebCore::LayerWebKitThread::setDrawable):
        * platform/graphics/blackberry/MediaPlayerPrivateBlackBerry.cpp:
        (WebCore::loadBufferingImageData):
        * platform/graphics/blackberry/skia/ImageBufferDataSkia.h: Renamed from Source/WebCore/platform/graphics/blackberry/skia/ImageBufferData.h.
        (WebCore):
        (ImageBufferData):

2012-03-26  Stephen Chenney  <schenney@chromium.org>

        Failure to invalidate text position attributes when DOM changes
        https://bugs.webkit.org/show_bug.cgi?id=81464

        Reviewed by Nikolas Zimmermann.

        The text positioning elements data structure in RenderSVGText must be
        updated when either the children of the corresponding element are
        modified, or the length of the text inside the elements changes.
        Previously, the call to clear the text positioning elements (to force
        recomputation) was guarded by a flag. If code tried to invalidate when
        the flag was not set, then something set the flag, the elements would
        be invalid at use time.

        This patch modifies the method that invalidates the positining
        attributes so that the action always happens. It also renames the
        method to more accurately reflect its function.

        Test: svg/custom/delete-modified-text-in-defs-crash.svg

        * rendering/svg/RenderSVGInlineText.cpp:
        (WebCore::RenderSVGInlineText::setTextInternal): Rename textDOMChanged to invalidateTextPositioningElements
        * rendering/svg/RenderSVGText.cpp:
        (WebCore::RenderSVGText::invalidateTextPositioningElements): Rename
        textDOMChanged to invalidateTextPositioningElements and remove the check against the needsPosition... flag.
        * rendering/svg/RenderSVGText.h:
        (RenderSVGText): Rename textDOMChanged to invalidateTextPositioningElements
        * svg/SVGAElement.cpp:
        (WebCore::SVGAElement::childrenChanged): Rename textDOMChanged to invalidateTextPositioningElements
        * svg/SVGTextContentElement.cpp:
        (WebCore::SVGTextContentElement::childrenChanged): Rename textDOMChanged to invalidateTextPositioningElements

2012-03-26  Julien Chaffraix  <jchaffraix@webkit.org>

        REGRESSION (r110065-r110080): fast/forms/placeholder-set-attribute.html is failing intermittently because WebKit fails to repaint after setting the placeholder attribute
        https://bugs.webkit.org/show_bug.cgi?id=81802

        Reviewed by Dan Bernstein.

        Covered by fast/forms/placeholder-set-attribute.html which should be less flaky.

        Unfortunately no new test case as this bug requires a very specific set of conditions that I couldn't reproduce deterministically.

        This is a regression from r110072: RenderTextControlSingleLine would rely on the placeholder's RenderLayer to properly repaint during
        the first layout as the placeholder has overflow: hidden set. r110072 removed the layer in this case and thus we miss a repaint.

        * rendering/RenderTextControlSingleLine.cpp:
        (WebCore::RenderTextControlSingleLine::layout):
        For our first layout, we need to make sure our placeholder is painted. layoutBlockChild has a very similar logic to force repaint
        on a first layout. We don't hit this logic as the placeholder is explicitly skipped in RenderTextControl::layoutSpecialExcludedChild.

2012-03-26  Julien Chaffraix  <jchaffraix@webkit.org>

        REGRESSION(r110072): fast/forms/textfield-overflow.html is failing
        https://bugs.webkit.org/show_bug.cgi?id=80531

        Reviewed by Ojan Vafai.

        Tested by fast/forms/textfield-overflow.html (re-enabled after this change).

        The existing code would happily query layout information before calling layout (FTW!).
        The solution is to properly layout our object, then modify some dimensions as needed while
        marking ourself as needing layout and then layouting again.

        * rendering/RenderTextControlSingleLine.cpp:
        (WebCore::RenderTextControlSingleLine::layout):
        Implemented a proper 2 pass layout algorithm. Removed the |relayoutChildren| logic as:
        - layoutBlock handles automatically logical height changes.
        - we were not modifying the logical width between layouts so we don't need to force a
        child relayout in this case.

2012-03-26  Robin Cao  <robin.cao@torchmobile.com.cn>

        [BlackBerry] Upstream LayerCompositingThread.{h, cpp}
        https://bugs.webkit.org/show_bug.cgi?id=79873

        Reviewed by Rob Buis.

        Initial upstream, no new tests.

        * platform/graphics/blackberry/LayerCompositingThread.cpp: Added.
        (WebCore):
        (WebCore::LayerCompositingThread::create):
        (WebCore::LayerCompositingThread::LayerCompositingThread):
        (WebCore::LayerCompositingThread::~LayerCompositingThread):
        (WebCore::LayerCompositingThread::destroyOnCompositingThread):
        (WebCore::LayerCompositingThread::setLayerRenderer):
        (WebCore::LayerCompositingThread::deleteTextures):
        (WebCore::LayerCompositingThread::setDrawTransform):
        (WebCore::getTransformedRect):
        (WebCore::LayerCompositingThread::getTransformedHolePunchRect):
        (WebCore::LayerCompositingThread::drawTextures):
        (WebCore::LayerCompositingThread::drawSurface):
        (WebCore::LayerCompositingThread::drawMissingTextures):
        (WebCore::LayerCompositingThread::releaseTextureResources):
        (WebCore::LayerCompositingThread::setPluginView):
        (WebCore::LayerCompositingThread::setMediaPlayer):
        (WebCore::LayerCompositingThread::clearAnimations):
        (WebCore::LayerCompositingThread::removeSublayer):
        (WebCore::LayerCompositingThread::indexOfSublayer):
        (WebCore::LayerCompositingThread::rootLayer):
        (WebCore::LayerCompositingThread::removeFromSuperlayer):
        (WebCore::LayerCompositingThread::setSublayers):
        (WebCore::LayerCompositingThread::updateTextureContentsIfNeeded):
        (WebCore::LayerCompositingThread::setVisible):
        (WebCore::LayerCompositingThread::setNeedsCommit):
        (WebCore::LayerCompositingThread::scheduleCommit):
        (WebCore::LayerCompositingThread::updateAnimations):
        (WebCore::LayerCompositingThread::hasVisibleHolePunchRect):
        (WebCore::LayerCompositingThread::createLayerRendererSurface):
        * platform/graphics/blackberry/LayerCompositingThread.h: Added.
        (Graphics):
        (WebCore):
        (LayerCompositingThread):
        (WebCore::LayerCompositingThread::bindContentsTexture):
        (WebCore::LayerCompositingThread::getSublayers):
        (WebCore::LayerCompositingThread::setSuperlayer):
        (WebCore::LayerCompositingThread::superlayer):
        (WebCore::LayerCompositingThread::drawTransform):
        (WebCore::LayerCompositingThread::setDrawOpacity):
        (WebCore::LayerCompositingThread::drawOpacity):
        (WebCore::LayerCompositingThread::layerRendererSurface):
        (WebCore::LayerCompositingThread::clearLayerRendererSurface):
        (WebCore::LayerCompositingThread::setMaskLayer):
        (WebCore::LayerCompositingThread::maskLayer):
        (WebCore::LayerCompositingThread::setReplicaLayer):
        (WebCore::LayerCompositingThread::replicaLayer):
        (WebCore::LayerCompositingThread::getDrawRect):
        (WebCore::LayerCompositingThread::getTransformedBounds):
        (WebCore::LayerCompositingThread::hasMissingTextures):
        (WebCore::LayerCompositingThread::isDirty):
        (WebCore::LayerCompositingThread::isVisible):
        (WebCore::LayerCompositingThread::setOpacity):
        (WebCore::LayerCompositingThread::setTransform):
        (WebCore::LayerCompositingThread::hasRunningAnimations):
        (WebCore::LayerCompositingThread::numSublayers):

2012-03-26  Kent Tamura  <tkent@chromium.org>

        Add a notification function for detaching to TextFieldDecorator
        https://bugs.webkit.org/show_bug.cgi?id=82142

        Reviewed by Dimitri Glazkov.

        Add willDetach() functio to TextFieldDecorator. This will be
        needed if a decorator opens a popup UI on handleClick(), and the
        popup UI should be closed when the attaching text field is
        detached.

        No new tests because of no behavior changes in any platforms.

        * html/shadow/TextFieldDecorationElement.cpp:
        (WebCore::TextFieldDecorationElement::hostInput):
        Added. A utilify function to get an HTMLInputElement*.
        (WebCore::TextFieldDecorationElement::updateImage): Use hostInput().
        (WebCore::TextFieldDecorationElement::customStyleForRenderer): ditto.
        (WebCore::TextFieldDecorationElement::detach): Added. Calls TextFieldDecorator::willDetach().
        (WebCore::TextFieldDecorationElement::defaultEventHandler): Use hostInput().
        * html/shadow/TextFieldDecorationElement.h:
        (TextFieldDecorator):
        (TextFieldDecorationElement):

2012-03-26  Dan Bernstein  <mitz@apple.com>

        Tried to fix the 32-bit build after r112021.

        * accessibility/mac/WebAccessibilityObjectWrapper.mm:
        (-[WebAccessibilityObjectWrapper _convertToNSRange:]):

2012-03-26  Leo Yang  <leo.yang@torchmobile.com.cn>

        [BlackBerry] Skeleton code of AsyncFileSystemBlackBerry.cpp
        https://bugs.webkit.org/show_bug.cgi?id=82157

        Reviewed by Rob Buis.

        AsyncFileSystemBlackBerry is responsible for asynchronous operating
        on file system for the blackberry porting. It's just skeleton code
        containing no implementation yet.

        No new tests because of skeleton code.

        * PlatformBlackBerry.cmake: Add AsyncFileSystemBlackBerry.cpp if ENABLE_FILE_SYSTEM is on.
        * platform/AsyncFileSystem.cpp:
        (WebCore):
        * platform/blackberry/AsyncFileSystemBlackBerry.cpp: Added.
        (WebCore):
        (WebCore::AsyncFileSystem::isAvailable):
        (WebCore::AsyncFileSystem::isValidType):
        (WebCore::AsyncFileSystem::create):
        (WebCore::AsyncFileSystem::openFileSystem):
        (WebCore::AsyncFileSystem::crackFileSystemURL):
        (WebCore::AsyncFileSystemBlackBerry::AsyncFileSystemBlackBerry):
        (WebCore::AsyncFileSystemBlackBerry::~AsyncFileSystemBlackBerry):
        (WebCore::AsyncFileSystemBlackBerry::toURL):
        (WebCore::AsyncFileSystemBlackBerry::move):
        (WebCore::AsyncFileSystemBlackBerry::copy):
        (WebCore::AsyncFileSystemBlackBerry::remove):
        (WebCore::AsyncFileSystemBlackBerry::removeRecursively):
        (WebCore::AsyncFileSystemBlackBerry::readMetadata):
        (WebCore::AsyncFileSystemBlackBerry::createFile):
        (WebCore::AsyncFileSystemBlackBerry::createDirectory):
        (WebCore::AsyncFileSystemBlackBerry::fileExists):
        (WebCore::AsyncFileSystemBlackBerry::directoryExists):
        (WebCore::AsyncFileSystemBlackBerry::readDirectory):
        (WebCore::AsyncFileSystemBlackBerry::createWriter):
        (WebCore::AsyncFileSystemBlackBerry::createSnapshotFileAndReadMetadata):
        * platform/blackberry/AsyncFileSystemBlackBerry.h: Added.
        (WebCore):
        (AsyncFileSystemBlackBerry):

2012-03-26  Jonathan Dong  <jonathan.dong@torchmobile.com.cn>

        [BlackBerry] CredentialBackingStore implement encryptString() and decryptString()
        https://bugs.webkit.org/show_bug.cgi?id=82204

        Reviewed by Rob Buis.

        Implemented encryptedString() and decryptedString() in class CredentialBackingStore
        by calling BlackBerry::Platform::Encryptor::encryptString() and
        BlackBerry::Platform::Encryptor::encryptString() respectively.

        No new tests.

        * platform/network/blackberry/CredentialBackingStore.cpp:
        (WebCore::CredentialBackingStore::encryptedString):
        (WebCore::CredentialBackingStore::decryptedString):

2012-03-26  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: 'use strict' exceptions stop in inspector code
        https://bugs.webkit.org/show_bug.cgi?id=82199

        Reviewed by Yury Semikhatsky.

        Accessing callee from within InjectedScript made inspector stop on handled exceptions.
        I replaced it with Object.prototype.toString.call(obj) === "[object Arguments]".

        * inspector/InjectedScriptSource.js:

2012-03-26  Mihai Balan  <mibalan@adobe.com>

        [CSS Regions] In region styling (@-webkit-region) the position for CSS rules is incorrectly computed
        https://bugs.webkit.org/show_bug.cgi?id=81901

        Reviewed by Antti Koivisto.

        Right now CSS rules position does not take into account rules that are inside a @-webkit-region
        declaration, leading to buggy behavior where rules that appear later in the document are superseded
        by rules that appear earlier in the document (opposite as how things should be). The fix updates
        the "global" rules counter once the rules in a @-webkit-region declaration have been added.

        Tests: fast/regions/region-style-rule-position-expected.html
               fast/regions/region-style-rule-position.html

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

2012-03-26  Pierre Rossi  <pierre.rossi@nokia.com>

        [Qt] Disable focus ring in the mobile theme.
        https://bugs.webkit.org/show_bug.cgi?id=81934

        For mobile devices intended to be used only through
        touch, the focus rings makes little sense and feels
        awkward.

        Reviewed by Kenneth Rohde Christiansen.

        No new tests. This is merely a cosmetic touch.

        * platform/qt/RenderThemeQtMobile.h:
        (RenderThemeQtMobile):
        (WebCore::RenderThemeQtMobile::platformFocusRingColor):

2012-03-26  Charles Wei  <charles.wei@torchmobile.com.cn>

        [BlackBerry] Clean up networking code and remove WML support.
        https://bugs.webkit.org/show_bug.cgi?id=82170

        Reviewed by Rob Buis.

        This just removes the WML support of BlackBerry porting, which is already 
        removed from WebCore. No new tests needed.

        * platform/blackberry/MIMETypeRegistryBlackBerry.cpp:
        (WebCore):
        * platform/network/blackberry/DeferredData.cpp:
        (WebCore::DeferredData::DeferredData):
        (WebCore::DeferredData::processDeferredData):
        * platform/network/blackberry/DeferredData.h:
        (DeferredData):
        (WebCore::DeferredData::hasDeferredData):
        * platform/network/blackberry/NetworkJob.cpp:
        * platform/network/blackberry/NetworkJob.h:
        (NetworkJob):
        * platform/network/blackberry/ResourceResponse.h:
        (WebCore::ResourceResponse::ResourceResponse):
        (ResourceResponse):
        * platform/network/blackberry/ResourceResponseBlackBerry.cpp:
        (WebCore::ResourceResponse::doPlatformCopyData):
        (WebCore::ResourceResponse::doPlatformAdopt):

2012-03-26  Philip Rogers  <pdr@google.com>

        Add invalid bounding box concept to SVG containers
        https://bugs.webkit.org/show_bug.cgi?id=81104

        Reviewed by Nikolas Zimmermann.

        An empty <g> element needs to use an invalid bounding box because
        an empty bounding box isn't the default state. This change
        introduces the concept of an invalid object bounding box for
        both RenderSVGContainer and RenderSVGRoot. Code that
        does not explicitly check that the bounding box is valid
        should be unaffected by this change. We use this new invalid
        flag in computeContainerBoundingBoxes so that we do not
        include invalid bounding boxes.

        This change also contains a small fix in
        RenderSVGContainer::toRenderSVGContainer which depended on
        RenderSVGViewportContainer not inheriting from RenderSVGContainer,
        which it now does.

        Test: svg/custom/getBBox-empty-container.html

        * rendering/svg/RenderSVGContainer.cpp:
        (WebCore::RenderSVGContainer::RenderSVGContainer):
        (WebCore::RenderSVGContainer::updateCachedBoundaries):
        * rendering/svg/RenderSVGContainer.h:
        (WebCore::RenderSVGContainer::isObjectBoundingBoxValid):
        (RenderSVGContainer):
        (WebCore::toRenderSVGContainer):
        * rendering/svg/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::RenderSVGRoot):
        (WebCore::RenderSVGRoot::updateCachedBoundaries):
        * rendering/svg/RenderSVGRoot.h:
        (RenderSVGRoot):
        * rendering/svg/SVGRenderSupport.cpp:
        (WebCore):
        (WebCore::updateObjectBoundingBox):
        (WebCore::SVGRenderSupport::computeContainerBoundingBoxes):
        * rendering/svg/SVGRenderSupport.h:
        (SVGRenderSupport):

2012-03-26  Alexei Filippov  <alexeif@chromium.org>

        Web Inspector: Speed up the retainers build phase.
        https://bugs.webkit.org/show_bug.cgi?id=81763

        Replacing the edge iterator in retainers building phase
        makes it run 10 times faster (400 ms vs. 4 sec).

        Reviewed by Yury Semikhatsky.

        * inspector/front-end/HeapSnapshot.js:
        (WebInspector.HeapSnapshot.prototype._buildRetainers):

2012-03-22  Alexander Pavlov  <apavlov@chromium.org>

        Web Inspector: Migrate InspectorCSSAgent to strict protocol types
        https://bugs.webkit.org/show_bug.cgi?id=81923

        Reviewed by Pavel Feldman.

        No new tests, as this is a refactoring.

        * inspector/CodeGeneratorInspector.py:
        * inspector/InspectorCSSAgent.cpp:
        (SelectorProfile):
        (WebCore::SelectorProfile::toInspectorObject):
        (WebCore::InspectorCSSAgent::clearFrontend):
        (WebCore::InspectorCSSAgent::getMatchedStylesForNode):
        (WebCore::InspectorCSSAgent::getInlineStylesForNode):
        (WebCore::InspectorCSSAgent::getComputedStyleForNode):
        (WebCore::InspectorCSSAgent::getAllStyleSheets):
        (WebCore::InspectorCSSAgent::getStyleSheet):
        (WebCore::InspectorCSSAgent::setPropertyText):
        (WebCore::InspectorCSSAgent::toggleProperty):
        (WebCore::InspectorCSSAgent::setRuleSelector):
        (WebCore::InspectorCSSAgent::addRule):
        (WebCore::InspectorCSSAgent::getSupportedCSSProperties):
        (WebCore::InspectorCSSAgent::stopSelectorProfiler):
        (WebCore::InspectorCSSAgent::stopSelectorProfilerImpl):
        (WebCore::InspectorCSSAgent::collectStyleSheets):
        (WebCore::InspectorCSSAgent::buildArrayForRuleList):
        (WebCore::InspectorCSSAgent::buildObjectForAttributesStyle):
        * inspector/InspectorCSSAgent.h:
        (InspectorCSSAgent):
        * inspector/InspectorStyleSheet.cpp:
        (WebCore::buildSourceRangeObject):
        (WebCore::buildMediaObject):
        (WebCore::fillMediaListChain):
        (WebCore::InspectorStyle::buildObjectForStyle):
        (WebCore::InspectorStyle::buildArrayForComputedStyle):
        (WebCore::InspectorStyle::styleWithProperties):
        (WebCore::InspectorStyleSheet::buildObjectForStyleSheet):
        (WebCore::InspectorStyleSheet::buildObjectForStyleSheetInfo):
        (WebCore::InspectorStyleSheet::buildObjectForRule):
        (WebCore::InspectorStyleSheet::buildObjectForStyle):
        * inspector/InspectorStyleSheet.h:
        (WebCore::InspectorCSSId::asProtocolValue):
        (InspectorStyle):
        (InspectorStyleSheet):

2012-03-26  Alexander Pavlov  <apavlov@chromium.org>

        Web Inspector: [REGRESSION] Workarounds for security checks when retrieving stylesheet rule lists are broken
        https://bugs.webkit.org/show_bug.cgi?id=82191

        Reviewed by Vsevolod Vlasov.

        Test: http/tests/inspector/modify-cross-domain-rule.html

        * inspector/InspectorStyleSheet.cpp:
        (WebCore::asCSSRuleList):
        (WebCore::InspectorStyleSheet::buildObjectForStyleSheet):

2012-03-26  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix make distcheck.

        * GNUmakefile.list.am: Add missing files.

2012-03-26  Jason Liu  <jason.liu@torchmobile.com.cn>

        [BlackBerry] Cookies mismatch when login to gmail.
        https://bugs.webkit.org/show_bug.cgi?id=82165

        Redirection's response can add or update cookies. The cookies of ResourceRequest is dirty
        in this case. We shouldn't copy the dirty cookie header from ResourceRequest to PlatformRequest
        for redirection loading.

        This issue didn't happen before because we used m_cookieData not the cookie header.
        Now we use the cookie header to avoid storing double cookie's data, and m_cookieData is removed.

        Reviewed by George Staikos.

        No new tests. It is a refactoring issue.

        * platform/network/blackberry/ResourceRequestBlackBerry.cpp:
        (WebCore::ResourceRequest::initializePlatformRequest):

2012-03-26  Alexis Menard  <alexis.menard@openbossa.org>

        Increase code sharing between StylePropertySet and CSSPropertyLonghand.
        https://bugs.webkit.org/show_bug.cgi?id=81960

        Reviewed by Antti Koivisto.

        Use longhands declaration from CSSPropertyLonghand in StylePropertySet in order
        to avoid code duplication.

        No new tests : refactoring only, we shouldn't have any behavior difference.

        * css/CSSPropertyLonghand.cpp:
        (WebCore::backgroundLonghand):
        Re-order the array to match the spec default order.
        (WebCore::webkitMaskLonghand):
        Re-order to match the original order.
        (WebCore::webkitTransformOriginLonghand):
        A LayoutTest shows that a property was missing.
        * css/StylePropertySet.cpp:
        (WebCore::StylePropertySet::getPropertyValue):
        (WebCore::StylePropertySet::borderSpacingValue):
        (WebCore::StylePropertySet::get4Values):
        (WebCore::StylePropertySet::getLayeredShorthandValue):
        (WebCore::StylePropertySet::getShorthandValue):
        (WebCore::StylePropertySet::getCommonValue):
        (WebCore::StylePropertySet::asText):
        * css/StylePropertySet.h:
        (WebCore):
        (StylePropertySet):

2012-03-26  Allan Sandfeld Jensen  <allan.jensen@nokia.com>

        [Qt] Assert in GestureTapHighlighter.
        https://bugs.webkit.org/show_bug.cgi?id=82187

        Reviewed by Kenneth Rohde Christiansen.

        Adjust the boundaries of the center-rect before performing the intersection test,
        since adjusting the boundary may cause a new intersection.

        * page/GestureTapHighlighter.cpp:

2012-03-26  Antti Koivisto  <antti@apple.com>

        Split MediaList into internal and CSSOM types
        https://bugs.webkit.org/show_bug.cgi?id=82149

        Reviewed by Andread Kling.

        MediaList is a CSSOM type and should not be used internally.
        
        - Use new type MediaQuerySet internally to represent a collection of media queries.
        - Create MediaList wrapper on-demand for CSSOM purposes only.
        
        This moves us forward in separating CSSOM from the internal stylesheet implementation.
        
        MediaQuerySet really belongs to a file of its own but that is not part of this patch.
        
        * css/CSSGrammar.y:
        * css/CSSImportRule.cpp:
        (WebCore::CSSImportRule::create):
        (WebCore):
        (WebCore::CSSImportRule::CSSImportRule):
        (WebCore::CSSImportRule::~CSSImportRule):
        (WebCore::CSSImportRule::media):
        (WebCore::CSSImportRule::cssText):
        * css/CSSImportRule.h:
        (WebCore):
        (CSSImportRule):
        (WebCore::CSSImportRule::mediaQueries):
        * css/CSSMediaRule.cpp:
        (WebCore::CSSMediaRule::CSSMediaRule):
        (WebCore::CSSMediaRule::~CSSMediaRule):
        (WebCore::CSSMediaRule::cssText):
        * css/CSSMediaRule.h:
        (WebCore::CSSMediaRule::create):
        (WebCore::CSSMediaRule::media):
        (WebCore::CSSMediaRule::mediaQueries):
        (CSSMediaRule):
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseMediaQuery):
        (WebCore::CSSParser::createMediaQuerySet):
        (WebCore::CSSParser::createImportRule):
        (WebCore::CSSParser::createMediaRule):
        (WebCore::CSSParser::updateLastMediaLine):
        * css/CSSParser.h:
        (WebCore):
        (CSSParser):
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::collectMatchingRulesForList):
        * css/CSSStyleSheet.cpp:
        (WebCore):
        (WebCore::CSSStyleSheet::media):
        (WebCore::CSSStyleSheet::setMediaQueries):
        * css/CSSStyleSheet.h:
        (WebCore):
        (CSSStyleSheet):
        (WebCore::CSSStyleSheet::mediaQueries):
        * css/MediaList.cpp:
        (WebCore):
        (WebCore::MediaQuerySet::MediaQuerySet):
        (WebCore::MediaQuerySet::~MediaQuerySet):
        (WebCore::parseMediaDescriptor):
        (WebCore::MediaQuerySet::parse):
        (WebCore::MediaQuerySet::add):
        (WebCore::MediaQuerySet::remove):
        (WebCore::MediaQuerySet::addMediaQuery):
        (WebCore::MediaQuerySet::mediaText):
        (WebCore::MediaQuerySet::ensureMediaList):
        
            - Use OwnPtr<> for MediaQuery ownership.
            - Move the appropriate functions to MediaQuerySet.
            - Clean up a bit to make this more readable and better aligned to WebKit style.
        
        (WebCore::MediaList::MediaList):
        (WebCore::MediaList::~MediaList):
        (WebCore::MediaList::setMediaText):
        (WebCore::MediaList::item):
        (WebCore::MediaList::deleteMedium):
        (WebCore::MediaList::appendMedium):
        * css/MediaList.h:
        (WebCore):
        (WebCore::MediaQuerySet::create):
        (WebCore::MediaQuerySet::createAllowingDescriptionSyntax):
        (MediaQuerySet):
        (WebCore::MediaQuerySet::queryVector):
        (WebCore::MediaQuerySet::lastLine):
        (WebCore::MediaQuerySet::setLastLine):
        (MediaList):
        (WebCore::MediaList::ref):
        (WebCore::MediaList::deref):
        (WebCore::MediaList::length):
        (WebCore::MediaList::mediaText):
        (WebCore::MediaList::queries):
        * css/MediaQueryEvaluator.cpp:
        (WebCore::MediaQueryEvaluator::eval):
        * css/MediaQueryEvaluator.h:
        (WebCore):
        (MediaQueryEvaluator):
        * css/MediaQueryList.cpp:
        (WebCore::MediaQueryList::create):
        (WebCore::MediaQueryList::MediaQueryList):
        * css/MediaQueryList.h:
        (WebCore):
        (MediaQueryList):
        * css/MediaQueryMatcher.cpp:
        (WebCore::MediaQueryMatcher::evaluate):
        (WebCore::MediaQueryMatcher::matchMedia):
        * css/MediaQueryMatcher.h:
        (WebCore):
        (MediaQueryMatcher):
        * css/StyleMedia.cpp:
        (WebCore::StyleMedia::matchMedium):
        * css/StyleSheet.cpp:
        (WebCore::StyleSheet::~StyleSheet):
        
            Move the media query ownership to CSSStyleSheet where it belongs.
        
        (WebCore):
        * css/StyleSheet.h:
        (WebCore::StyleSheet::media):
        (StyleSheet):
        * dom/DOMImplementation.cpp:
        (WebCore::DOMImplementation::createCSSStyleSheet):
        * dom/ProcessingInstruction.cpp:
        (WebCore::ProcessingInstruction::setCSSStyleSheet):
        * dom/StyleElement.cpp:
        (WebCore::StyleElement::createSheet):
        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::process):
        (WebCore::HTMLLinkElement::setCSSStyleSheet):
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::selectNextSourceChild):
        * html/parser/HTMLPreloadScanner.cpp:
        (WebCore::HTMLNames::PreloadTask::linkMediaAttributeIsScreen):
        * inspector/InspectorStyleSheet.cpp:
        (WebCore::buildMediaObject):

2012-03-26  Zeno Albisser  <zeno@webkit.org>

        [Qt]WK2] TextureMapperShaderManager should query the program map before creating new shader program instances.
        https://bugs.webkit.org/show_bug.cgi?id=82178

        If TextureMapperShaderManager already has a reference to an instance of the
        requested shader program type, this instance should be reused instead of
        creating a new one.

        Reviewed by Noam Rosenthal.

        * platform/graphics/texmap/TextureMapperShaderManager.h:
        (WebCore::TextureMapperShaderManager::getShaderProgram):

2012-03-26  Yury Semikhatsky  <yurys@chromium.org>

        [Chromium] Web Inspector: dedicated worker inspector is empty
        https://bugs.webkit.org/show_bug.cgi?id=82181

        "beforeunload" event for worker inspector front-end is ingnored if the
        window url is "about:blank" as it is just unload of the default content
        before the front-end page load.

        Reviewed by Pavel Feldman.

        * inspector/front-end/WorkerManager.js:
        (WebInspector.WorkerManager.prototype._workerInspectorClosing):

2012-03-22  Yury Semikhatsky  <yurys@chromium.org>

        Web Inspector: split nodes and containment edges into two different arrays
        https://bugs.webkit.org/show_bug.cgi?id=81930

        Extract heap profile nodes and edges into two separate arrays. This
        way we will have a continuous array of the heap graph nodes and can
        aviod additional mapping between node index and its position in the
        heap snapshot.

        Reviewed by Pavel Feldman.

        * inspector/front-end/HeapSnapshot.js:
        (WebInspector.HeapSnapshot.prototype._init):
        (WebInspector.HeapSnapshot.prototype._buildContinuousNodeArray):
        (WebInspector.HeapSnapshot.prototype._createOnlyNodesArray):
        (WebInspector.HeapSnapshot.prototype._restoreNodeTypes):
        (WebInspector.HeapSnapshot.prototype._createRetainmentEdgesArray):
        (WebInspector.HeapSnapshot.prototype._createContainmentEdgesArray):
        * inspector/front-end/HeapSnapshotProxy.js:
        (WebInspector.HeapSnapshotWorker):

2012-03-22  Pavel Podivilov  <podivilov@chromium.org>

        Web Inspector: move resource loading logic from SourceMapParser to CompilerScriptMapping.
        https://bugs.webkit.org/show_bug.cgi?id=81897

        Reviewed by Vsevolod Vlasov.

        SourceMapParser should only deal with payload parsing.

        * inspector/front-end/CompilerScriptMapping.js:
        (WebInspector.CompilerScriptMapping.prototype.rawLocationToUILocation):
        (WebInspector.CompilerScriptMapping.prototype.addScript):
        (WebInspector.CompilerScriptMapping.prototype.loadSourceMapForScript):
        (WebInspector.SourceMapPayload):
        (WebInspector.SourceMapParser):
        (WebInspector.SourceMapParser.prototype.sourceContent):
        (WebInspector.SourceMapParser.prototype.findEntry):
        (WebInspector.SourceMapParser.prototype.findEntryReversed):
        * inspector/front-end/ContentProviders.js:
        (WebInspector.CompilerSourceMappingContentProvider):
        (WebInspector.CompilerSourceMappingContentProvider.prototype.requestContent):

2012-03-26  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: replace indexOf('a text') === 0 with RegExp because it is much faster.
        https://bugs.webkit.org/show_bug.cgi?id=82175

        We were using aString.indexOf("Window") but it is not effective from performance point of view.
        I'm replaced it with RegExp.

        Reviewed by Yury Semikhatsky.

        * inspector/front-end/HeapSnapshot.js:
        (WebInspector.HeapSnapshotNode.prototype.get isWindow):
        (WebInspector.HeapSnapshotNode.prototype.get isDetachedDOMTree):

2012-03-26  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: breakpoints should be disabled while live editing JavaScript.
        https://bugs.webkit.org/show_bug.cgi?id=81947

        Reviewed by Yury Semikhatsky.

        This change disables (removes from the backend) the breakpoints while editing script.
        Undoing or committing the change restores the breakpoints. Main logic is implemented within
        JavaScriptSourceFrame, but it required minor tweaking of the text editor: more correct
        undo/redo wrapper and better detection of the noop opterations.

        * inspector/front-end/JavaScriptSourceFrame.js:
        (WebInspector.JavaScriptSourceFrame):
        (WebInspector.JavaScriptSourceFrame.prototype.afterTextChanged):
        (WebInspector.JavaScriptSourceFrame.prototype.beforeTextChanged):
        (WebInspector.JavaScriptSourceFrame.prototype.didEditContent):
        (WebInspector.JavaScriptSourceFrame.prototype.addBreakpoint):
        (WebInspector.JavaScriptSourceFrame.prototype.removeBreakpoint):
        (WebInspector.JavaScriptSourceFrame.prototype._onMouseDown):
        * inspector/front-end/TextEditorModel.js:
        (WebInspector.TextEditorModel.endsWithBracketRegex.):
        * inspector/front-end/TextViewer.js:
        (WebInspector.TextEditorMainPanel.prototype.handleUndoRedo.before):
        (WebInspector.TextEditorMainPanel.prototype.handleUndoRedo.after):
        (WebInspector.TextEditorMainPanel.prototype.handleUndoRedo):
        (WebInspector.TextEditorMainPanel.prototype._applyDomUpdates):

2012-03-25  Nat Duca  <nduca@chromium.org>

        [chromium] Route willBeginFrame from compositor to WebWidget
        https://bugs.webkit.org/show_bug.cgi?id=82171

        Reviewed by Darin Fisher.

        * platform/graphics/chromium/cc/CCLayerTreeHost.h:
        (CCLayerTreeHostClient):
        (WebCore::CCLayerTreeHost::willBeginFrame):
        * platform/graphics/chromium/cc/CCThreadProxy.cpp:
        (WebCore::CCThreadProxy::beginFrame):

2012-03-25  Hayato Ito  <hayato@chromium.org>

        [Shadow DOM] Add Reified DOM Tree traversal internal APIs.
        https://bugs.webkit.org/show_bug.cgi?id=79197

        Reviewed by Dimitri Glazkov.

        Add internal APIs which can be used to traverse Reified DOM tree, which is
        a result of node distribution algorithm explained in Shadow DOM spec.
        https://dvcs.w3.org/hg/webcomponents/raw-file/tip/spec/shadow/index.html

        Every public functions defined in ReifiedTreeTraversal are static
        functions and are named in a similar way to ones defined in WebCore::Node class.
        The only difference is that ReifiedTreeTraversal APIs consider shadow
        hosts and also traverse nodes is Shadow DOM subtrees, crossing shadow's upper and lower boundary
        transparently.

        There is no actual client which uses these APIs. Follow-up patches for FocusNavigation
        and EventDispatcher will use the APIs so that they can traverse node in reified tree order.

        Test: fast/dom/shadow/reified-tree-traversal.html

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.exp.in:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/ReifiedTreeTraversal.cpp: Added.
        (WebCore):
        (WebCore::isShadowHost):
        (WebCore::shadowTreeFor):
        (WebCore::shadowTreeOfParent):
        (WebCore::ReifiedTreeTraversal::firstChild):
        (WebCore::ReifiedTreeTraversal::lastChild):
        (WebCore::ReifiedTreeTraversal::lastChildWithoutCrossingUpperBoundary):
        (WebCore::ReifiedTreeTraversal::traverseChild):
        (WebCore::ReifiedTreeTraversal::traverseLightChildren):
        (WebCore::ReifiedTreeTraversal::traverseNode):
        (WebCore::ReifiedTreeTraversal::nextSibling):
        (WebCore::ReifiedTreeTraversal::previousSibling):
        (WebCore::ReifiedTreeTraversal::traverseSiblingOrBackToInsertionPoint):
        (WebCore::ReifiedTreeTraversal::traverseSiblingInCurrentTree):
        (WebCore::ReifiedTreeTraversal::traverseSiblingOrBackToYoungerShadowRoot):
        (WebCore::ReifiedTreeTraversal::escapeFallbackContentElement):
        (WebCore::ReifiedTreeTraversal::traverseNodeEscapingFallbackContents):
        (WebCore::ReifiedTreeTraversal::parentNode):
        (WebCore::ReifiedTreeTraversal::parentNodeWithoutCrossingUpperBoundary):
        (WebCore::ReifiedTreeTraversal::parentNodeOrBackToInsertionPoint):
        (WebCore::ReifiedTreeTraversal::parentNodeInCurrentTree):
        (WebCore::ReifiedTreeTraversal::parentNodeBackToYoungerShadowRootOrHost):
        (WebCore::ReifiedTreeTraversal::adjustedParentNode):
        (WebCore::ReifiedTreeTraversal::traverseNextNode):
        (WebCore::ReifiedTreeTraversal::traverseNextNodeWithoutCrossingUpperBoundary):
        (WebCore::ReifiedTreeTraversal::traversePreviousNode):
        (WebCore::ReifiedTreeTraversal::traversePreviousNodeWithoutCrossingUpperBoundary):
        * dom/ReifiedTreeTraversal.h: Added.
        (WebCore):
        (ReifiedTreeTraversal):
        * dom/ShadowTree.cpp:
        (WebCore::ShadowTree::insertionPointFor):
        (WebCore::ShadowTree::selectionFor):
        (WebCore):
        * dom/ShadowTree.h:
        (WebCore):
        (ShadowTree):
        * html/shadow/HTMLContentSelector.cpp:
        (WebCore::HTMLContentSelector::findFor):
        * html/shadow/HTMLContentSelector.h:
        (HTMLContentSelectionSet):
        (WebCore::HTMLContentSelectionSet::find):
        (HTMLContentSelector):
        * html/shadow/InsertionPoint.h:
        (WebCore::isInsertionPoint):
        (WebCore::toInsertionPoint):
        (WebCore):
        * testing/Internals.cpp:
        (WebCore::Internals::nextSiblingInReifiedTree):
        (WebCore):
        (WebCore::Internals::firstChildInReifiedTree):
        (WebCore::Internals::lastChildInReifiedTree):
        (WebCore::Internals::traverseNextNodeInReifiedTree):
        (WebCore::Internals::traversePreviousNodeInReifiedTree):
        * testing/Internals.h:
        (Internals):
        * testing/Internals.idl:

2012-03-25  Nikita Vasilyev  <me@elv1s.ru>

        Web Inspector: Indenting fully selected line should not indent the line next to it
        https://bugs.webkit.org/show_bug.cgi?id=81758

        In the editor, you can select a whole line by moving caret at 0 column
        position and pressing Shift + Arrow Down/Up. After that, pressing Tab
        indents 2 lines: fully selected one and the line next to it. The patch
        changes this behaviour to indent only fully selected line since that is
        what pretty-match all the other code editors do.

        Reviewed by Pavel Feldman.

        Test: inspector/editor/indentation.html

        * inspector/front-end/TextViewer.js:
        (WebInspector.TextEditorMainPanel.prototype._indentLines):
            Do not insert indent at the begging of the last line if a selection
            ends on its 0 column.
        (WebInspector.TextEditorMainPanel.prototype._unindentLines):
            Do not remove indent at the begging of the last line if a selection
            ends on its 0 column.

2012-03-25  Abhishek Arya  <inferno@chromium.org>

        Crash in ContainerNode::resumePostAttachCallbacks.
        https://bugs.webkit.org/show_bug.cgi?id=82159

        Reviewed by Hajime Morita.

        Test: plugins/object-onfocus-mutation-crash.html

        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::resumePostAttachCallbacks): dispatching post attach
        callbacks when our attach depth is 1 can fire mutation events such as onfocus
        which can blow away |this|. Need to protect it with a RefPtr.
        * html/HTMLPlugInImageElement.cpp:
        (WebCore::HTMLPlugInImageElement::attach): add calls to suspend attach callbacks
        until the function completes.

2012-03-25  Dana Jansens  <danakj@chromium.org>

        [chromium] Layers with animating transforms should prepaint even if they are not visible yet
        https://bugs.webkit.org/show_bug.cgi?id=82117

        Reviewed by Adrienne Walker.

        For animating transforms, instead of early-outing when the layer's
        visible rect is empty, let it prepaint regardless.

        For now, we just only paint the outermost tiles, and only for small
        layers, with at most 9 tiles.

        This changes the behaviour of ContentLayerChromium's
        idlePaintContentsIfDirty() so I've guarded the behaviour of the two
        prepainting functions that it calls to ensure the old behaviour holds
        without animations, and the new behaviour works with them.

        Unit test: TiledLayerChromiumTest.idlePaintZeroSizedLayer
                   TiledLayerChromiumTest.idlePaintZeroSizedAnimatingLayer
                   TiledLayerChromiumTest.idlePaintNonVisibleLayers
                   TiledLayerChromiumTest.idlePaintNonVisibleAnimatingLayers

        * platform/graphics/chromium/ContentLayerChromium.cpp:
        (WebCore::ContentLayerChromium::idlePaintContentsIfDirty):
        * platform/graphics/chromium/TiledLayerChromium.cpp:
        (WebCore::TiledLayerChromium::prepareToUpdateIdle):
        (WebCore::TiledLayerChromium::needsIdlePaint):
        (WebCore::TiledLayerChromium::idlePaintRect):
        * platform/graphics/chromium/TiledLayerChromium.h:
        (WebCore::TiledLayerChromium::numPaintedTiles):
        (TiledLayerChromium):

2012-03-25  Antti Koivisto  <antti@apple.com>

        Don't use CSSRuleList for child rule ownership
        https://bugs.webkit.org/show_bug.cgi?id=82127

        Reviewed by Andreas Kling.

        CSSMediaRule, WebKitCSSKeyframesRule and WebKitRegionRule use CSSRuleList for storing children. 
        They should use a simple rule vector instead. CSSRuleList is a CSSOM type that should be 
        instantiated on-demand for API purposes only.
        
        - Use Vector<RefPtr<CSSRule>> for storing the rule children of CSSMediaRule, WebKitCSSKeyframesRule 
          and WebKitRegionRule.
        - Add direct accessors, use internally instead of CSSRuleList.
        - Make CSSRuleList an abstract base. Add concrete subclasses for dealing with the underlying storage.
        - Instantiate CSSRuleLists on-demand.
        - Make CSSStyleSheet.cssRules always return the same object instance. This matches Firefox and the rest
          of our CSSOM implementation. Tested by fast/dom/gc-9.html.
          
        The patch decouples internals from the external API. It simplifies the child rule ownership and reduces 
        indirection. Memory use of css rules with children is reduced (by a ptr, refcount and heap allocation overhead).

        * css/CSSGrammar.y:
        * css/CSSMediaRule.cpp:
        (WebCore::CSSMediaRule::CSSMediaRule):
        (WebCore::CSSMediaRule::~CSSMediaRule):
        (WebCore::CSSMediaRule::append):
        (WebCore::CSSMediaRule::insertRule):
        (WebCore::CSSMediaRule::deleteRule):
        (WebCore::CSSMediaRule::cssText):
        (WebCore::CSSMediaRule::cssRules):
        * css/CSSMediaRule.h:
        (WebCore::CSSMediaRule::create):
        (CSSMediaRule):
        (WebCore::CSSMediaRule::ruleCount):
        (WebCore::CSSMediaRule::ruleAt):
        * css/CSSParser.cpp:
        (WebCore::CSSParser::createMediaRule):
        (WebCore::CSSParser::createRuleList):
        (WebCore::CSSParser::createRegionRule):
        * css/CSSParser.h:
        (WebCore):
        * css/CSSRuleList.cpp:
        (WebCore):
        (WebCore::StaticCSSRuleList::StaticCSSRuleList):
        (WebCore::StaticCSSRuleList::~StaticCSSRuleList):
        (WebCore::StaticCSSRuleList::deref):
        (WebCore::StaticCSSRuleList::item):        
        * css/CSSRuleList.h:
        (CSSRuleList):

            Turn CSSRuleList into abstract interface.
                    
        (StaticCSSRuleList):
        (WebCore::StaticCSSRuleList::create):
        (WebCore::StaticCSSRuleList::ref):
        (WebCore::StaticCSSRuleList::rules):
        (WebCore::StaticCSSRuleList::styleSheet):
        (WebCore::StaticCSSRuleList::length):
        
            Concrete implementation for fixed list of rules.
    
        (WebCore):
        (LiveCSSRuleList):
        (WebCore::LiveCSSRuleList::LiveCSSRuleList):
        (WebCore::LiveCSSRuleList::ref):
        (WebCore::LiveCSSRuleList::deref):
        (WebCore::LiveCSSRuleList::length):
        (WebCore::LiveCSSRuleList::item):
        (WebCore::LiveCSSRuleList::styleSheet):
        
            Concrete implemenation for live list backed by the underlying container rule.
            LiveCSSRuleList is owned by the underlying rule. Refcount is forwarded. 
        
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::sortAndTransferMatchedRules):
        (WebCore::CSSStyleSelector::collectMatchingRulesForList):
        * css/CSSStyleSelector.h:
        (CSSStyleSelector):
        * css/CSSStyleSheet.cpp:
        
            The same scheme for CSSStyleSheet.cssRule as with container rules.
        
        (StyleSheetCSSRuleList):
        (WebCore::StyleSheetCSSRuleList::StyleSheetCSSRuleList):
        (WebCore::StyleSheetCSSRuleList::ref):
        (WebCore::StyleSheetCSSRuleList::deref):
        (WebCore::StyleSheetCSSRuleList::length):
        (WebCore::StyleSheetCSSRuleList::item):
        (WebCore::StyleSheetCSSRuleList::styleSheet):
        (WebCore):
        (WebCore::CSSStyleSheet::rules):
        (WebCore::CSSStyleSheet::cssRules):
        * css/CSSStyleSheet.h:
        (CSSStyleSheet):
        * css/WebKitCSSKeyframesRule.cpp:
        (WebCore::WebKitCSSKeyframesRule::WebKitCSSKeyframesRule):
        (WebCore::WebKitCSSKeyframesRule::~WebKitCSSKeyframesRule):
        (WebCore):
        (WebCore::WebKitCSSKeyframesRule::append):
        (WebCore::WebKitCSSKeyframesRule::deleteRule):
        (WebCore::WebKitCSSKeyframesRule::findRule):
        (WebCore::WebKitCSSKeyframesRule::findRuleIndex):
        (WebCore::WebKitCSSKeyframesRule::cssText):
        (WebCore::WebKitCSSKeyframesRule::cssRules):
        * css/WebKitCSSKeyframesRule.h:
        (WebKitCSSKeyframesRule):
        (WebCore::WebKitCSSKeyframesRule::ruleCount):
        (WebCore::WebKitCSSKeyframesRule::ruleAt):
        (WebCore::WebKitCSSKeyframesRule::length):
        (WebCore::WebKitCSSKeyframesRule::item):
        * css/WebKitCSSRegionRule.cpp:
        (WebCore::WebKitCSSRegionRule::WebKitCSSRegionRule):
        (WebCore::WebKitCSSRegionRule::~WebKitCSSRegionRule):
        (WebCore::WebKitCSSRegionRule::cssText):
        (WebCore::WebKitCSSRegionRule::cssRules):
        * css/WebKitCSSRegionRule.h:
        * inspector/InspectorStyleSheet.cpp:
        (WebCore::asCSSRuleList):
        (WebCore::InspectorStyleSheet::addRule):
        (WebCore::InspectorStyleSheet::buildObjectForStyleSheet):

2012-03-25  Kentaro Hara  <haraken@chromium.org>

        Remove duplicated GenerateConditionalString() from code generators
        https://bugs.webkit.org/show_bug.cgi?id=82148

        Reviewed by Adam Barth.

        Previously GenerateConditionalString()s were defined in each code generator,
        and they were doing the same thing. This patch puts GenerateConditionalString()
        in CodeGenerator.pm and removes duplicated GenerateConditionalString()s.

        No tests. No change in the generated code.

        * bindings/scripts/CodeGenerator.pm:
        (GenerateConditionalString):
        * bindings/scripts/CodeGeneratorCPP.pm:
        (GenerateHeader):
        (GenerateImplementation):
        * bindings/scripts/CodeGeneratorGObject.pm:
        (GenerateProperty):
        (GenerateProperties):
        (GenerateFunction):
        (WriteData):
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateHeaderContentHeader):
        (GenerateImplementationContentHeader):
        (GenerateHeader):
        (GenerateImplementation):
        (GenerateCallbackHeader):
        (GenerateCallbackImplementation):
        * bindings/scripts/CodeGeneratorObjC.pm:
        (GenerateHeader):
        (GenerateImplementation):
        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateHeader):
        (GenerateNormalAttrGetter):
        (GenerateNormalAttrSetter):
        (GenerateOverloadedFunctionCallback):
        (GenerateFunctionCallback):
        (GenerateBatchedAttributeData):
        (GenerateImplementation):
        (GenerateHeaderContentHeader):
        (GenerateImplementationContentHeader):
        (GenerateCallbackHeader):
        (GenerateCallbackImplementation):

2012-03-25  Kentaro Hara  <haraken@chromium.org>

        Move DOMWindowSQLDatabase.* to DOMWindowWebDatabase.*, and move WorkerContextSQLDatabase.* to WorkerContextWebDatabase.*
        https://bugs.webkit.org/show_bug.cgi?id=82146

        Reviewed by Adam Barth.

        Now SQLDatabase is renamed to WebDatabase (See Modules/webdatabase/).
        We should move DOMWindowSQLDatabase.* to DOMWindowWebDatabase.*,
        and move WorkerContextSQLDatabase.* to WorkerContextWebDatabase.*.
        We'll rename the SQL_DATABASE flag to the WEB_DATABASE flag in a follow-up patch.

        No tests. No change in behavior.

        * Modules/webdatabase/DOMWindowWebDatabase.cpp: Renamed from Source/WebCore/Modules/webdatabase/DOMWindowSQLDatabase.cpp.
        (WebCore):
        (WebCore::DOMWindowWebDatabase::openDatabase):
        * Modules/webdatabase/DOMWindowWebDatabase.h: Renamed from Source/WebCore/Modules/webdatabase/DOMWindowSQLDatabase.h.
        (WebCore):
        (DOMWindowWebDatabase):
        (WebCore::DOMWindowWebDatabase::DOMWindowWebDatabase):
        (WebCore::DOMWindowWebDatabase::~DOMWindowWebDatabase):
        * Modules/webdatabase/DOMWindowWebDatabase.idl: Renamed from Source/WebCore/Modules/webdatabase/DOMWindowSQLDatabase.idl.
        * Modules/webdatabase/WorkerContextWebDatabase.cpp: Renamed from Source/WebCore/Modules/webdatabase/WorkerContextSQLDatabase.cpp.
        (WebCore):
        (WebCore::WorkerContextWebDatabase::openDatabase):
        (WebCore::WorkerContextWebDatabase::openDatabaseSync):
        * Modules/webdatabase/WorkerContextWebDatabase.h: Renamed from Source/WebCore/Modules/webdatabase/WorkerContextSQLDatabase.h.
        (WebCore):
        (WorkerContextWebDatabase):
        (WebCore::WorkerContextWebDatabase::WorkerContextWebDatabase):
        (WebCore::WorkerContextWebDatabase::~WorkerContextWebDatabase):
        * Modules/webdatabase/WorkerContextWebDatabase.idl: Renamed from Source/WebCore/Modules/webdatabase/WorkerContextSQLDatabase.idl.

        * DerivedSources.make:
        * DerivedSources.pri:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:

2012-03-25  Philip Rogers  <pdr@google.com>

        Avoid race condition when iterating over pending resources
        https://bugs.webkit.org/show_bug.cgi?id=82115

        Reviewed by Nikolas Zimmermann.

        We can hit a race condition in SVGStyledElement::buildPendingResourcesIfNeeded
        where pending elements can become non-pending while we iterate over them.

        This patch cleans up buildPendingResourcesIfNeeded and re-works how pending
        resources are removed. Because pending resources can be modified while
        iterating over them, we introduce m_pendingResourcesForRemoval that
        holds pending resources that are marked for removal. Instead of iterating
        over this list we simply remove each pending resource from
        m_pendingResourcesForRemoval; if a pending resource is modified or removed
        during the processing of another pending resource this list is updated before
        the next element can be accessed.

        This change also removes removePendingResourceForElement which is no longer
        referenced.

        Test: http/tests/svg/change-id-with-pending-resources.html

        * svg/SVGDocumentExtensions.cpp:
        (WebCore::SVGDocumentExtensions::~SVGDocumentExtensions):
        (WebCore::SVGDocumentExtensions::removeElementFromPendingResources):
        (WebCore::SVGDocumentExtensions::removePendingResourceForRemoval):
        (WebCore):
        (WebCore::SVGDocumentExtensions::markPendingResourcesForRemoval):
        (WebCore::SVGDocumentExtensions::removeElementFromPendingResourcesForRemoval):
        * svg/SVGDocumentExtensions.h:
        (SVGDocumentExtensions):
        * svg/SVGStyledElement.cpp:
        (WebCore::SVGStyledElement::buildPendingResourcesIfNeeded):

2012-03-25  Arvid Nilsson  <anilsson@rim.com>

        [BlackBerry] Accelerated compositing layers fail to render when using WebPageCompositor
        https://bugs.webkit.org/show_bug.cgi?id=82104
        RIM PR: 145963

        Reviewed by Rob Buis.

        The embedder may use vertex buffers, which affected the interpretation
        our vertex array pointers from memory pointers to offsets into a vertex
        buffer. The resulting geometry often resulted in no visible layers on
        screen.

        Fixed by getting rid of any bound buffer when we enter
        LayerRenderer::drawLayers().

        * platform/graphics/blackberry/LayerRenderer.cpp:
        (WebCore::LayerRenderer::drawLayers):

2012-03-24  Nat Duca  <nduca@chromium.org>

        [chromium] Instrument gesture animations with async traces
        https://bugs.webkit.org/show_bug.cgi?id=82076

        Reviewed by Adrienne Walker.

        * platform/ActivePlatformGestureAnimation.cpp:
        (WebCore::ActivePlatformGestureAnimation::~ActivePlatformGestureAnimation):
        (WebCore::ActivePlatformGestureAnimation::ActivePlatformGestureAnimation):
        * platform/PlatformGestureCurve.h:
        (PlatformGestureCurve):
        * platform/TouchpadFlingPlatformGestureCurve.h:
        (WebCore::TouchpadFlingPlatformGestureCurve::debugName):
        * platform/WheelFlingPlatformGestureCurve.h:
        (WebCore::WheelFlingPlatformGestureCurve::debugName):
        * platform/graphics/chromium/cc/CCActiveGestureAnimation.cpp:
        (WebCore::CCActiveGestureAnimation::CCActiveGestureAnimation):
        (WebCore::CCActiveGestureAnimation::~CCActiveGestureAnimation):
        * platform/graphics/chromium/cc/CCGestureCurve.h:
        (CCGestureCurve):

2012-03-24  Jeffrey Pfau  <jpfau@apple.com>

        XML error document creation should not fire mutation events
        https://bugs.webkit.org/show_bug.cgi?id=80765

        Reviewed by Adam Barth.

        Broke two tests that expected the old behavior, which have now been updated.

        * xml/XMLErrors.cpp:
        (WebCore::createXHTMLParserErrorHeader):
        (WebCore::XMLErrors::insertErrorMessageBlock):

2012-03-24  Florin Malita  <fmalita@google.com>

        ForeignObject content is zoomed two times
        https://bugs.webkit.org/show_bug.cgi?id=76282

        Reviewed by Nikolas Zimmermann.

        Test: svg/zoom/page/zoom-foreign-content.svg

        Reset the effective zoom property for FO-nested content to avoid
        having the zoom factor applied multiple times (zooming is handled by
        the top level SVG root element).

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

2012-03-24  Chris Fleizach  <cfleizach@apple.com>

        AX: Support solution to handle invalid ax text marker
        https://bugs.webkit.org/show_bug.cgi?id=82023

        Reviewed by Oliver Hunt.

        This provides methods to better use text markers so that assistive technologies
        can know when they are valid, and can convert them to and from absolute positions.

        Test: platform/mac/accessibility/textmarker-routines.html

        * accessibility/mac/WebAccessibilityObjectWrapper.mm:
        (-[WebAccessibilityObjectWrapper accessibilityParameterizedAttributeNames]):
        (-[WebAccessibilityObjectWrapper _convertToNSRange:]):
        (-[WebAccessibilityObjectWrapper _indexForTextMarker:]):
        (-[WebAccessibilityObjectWrapper _textMarkerForIndex:]):
        (-[WebAccessibilityObjectWrapper accessibilityAttributeValue:forParameter:]):

2012-03-24  Victor Carbune  <vcarbune@adobe.com>

        Quick fix for rendering controls regression.
        https://bugs.webkit.org/show_bug.cgi?id=82125

        Reviewed by Eric Carlson.

        Only temporary fix. Tests to cover the problem should be added

        * html/shadow/MediaControlElements.cpp:
        (WebCore::MediaControlPanelElement::makeOpaque): The display:none
        property should be toggled only by the media element now.
        (WebCore::MediaControlPanelElement::makeTransparent): The timer
        that toggles the dispalay:none shouldn't be used now.

2012-03-24  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Unreviewed. Add header needed for compilation.

        * html/shadow/TextFieldDecorationElement.cpp:

2012-03-24  Abhishek Arya  <inferno@chromium.org>

        Crash in ApplyStyleCommand::applyInlineStyleToNodeRange.
        https://bugs.webkit.org/show_bug.cgi?id=81959

        Reviewed by Ryosuke Niwa.

        Test: editing/execCommand/apply-style-command-crash.html

        * editing/ApplyStyleCommand.cpp:
        (WebCore::ApplyStyleCommand::applyInlineStyleToNodeRange): RefPtr the weak
        node iterator |node|.
        * editing/ApplyStyleCommand.h:
        (ApplyStyleCommand): convert |startNode| and |pastEndNode| into PassRefPtr.

2012-03-24  Jesus Sanchez-Palencia  <jesus.palencia@openbossa.org>

        Unreviewed, build fix since we use "-Werror=unused-but-set-variable".

        The variable 'it' was set at TextureMapperShaderManager.h:110 but never used.

        * platform/graphics/texmap/TextureMapperShaderManager.h:
        (WebCore::TextureMapperShaderManager::getShaderProgram):

2012-03-24  Zeno Albisser  <zeno@webkit.org>

        [Qt][WK2] Make TextureMapperShaderManager::getShaderProgram() not be a template.
        https://bugs.webkit.org/show_bug.cgi?id=82049

        Change the getShaderProgram() function to not be a template.
        This is a workaround for a compiler bug that leads to an assert
        when compiling in debug mode on mac.

        Reviewed by Noam Rosenthal.

        * platform/graphics/texmap/TextureMapperGL.cpp:
        (WebCore::TextureMapperGL::drawTexture):
        (WebCore::TextureMapperGL::beginClip):
        * platform/graphics/texmap/TextureMapperShaderManager.h:
        (TextureMapperShaderProgram):
        (WebCore::TextureMapperShaderManager::getShaderProgram):
        (TextureMapperShaderManager):

2012-03-23  Shawn Singh  <shawnsingh@chromium.org>

        [chromium] Incorrect replica originTransform used in CCDamageTracker
        https://bugs.webkit.org/show_bug.cgi?id=82118

        Reviewed by Adrienne Walker.

        Unit test added to CCDamageTrackerTest.cpp

        * platform/graphics/chromium/cc/CCDamageTracker.cpp:
        (WebCore::CCDamageTracker::extendDamageForRenderSurface):

2012-03-23  Dana Jansens  <danakj@chromium.org>

        [chromium] When prepainting fails, tiles dirty rects may be cleared
        https://bugs.webkit.org/show_bug.cgi?id=82107

        Reviewed by Adrienne Walker.

        When prepainting, if a tile is unable to be reserved due to memory
        limits, we bail out of prepareToUpdateTiles. But we would have
        cleared the dirty rect of any previous tiles. This leaves them
        in a bad state where their textures are reserved, but their textureIds
        are set to 0, and they are not marked dirty. This means that they will
        not be updated and displayed if they become visible, since it is
        assumed that valid textures with zero textureId must have a dirty
        region.

        We fix this by not clearing the dirty rects until we know we are
        going to update the layer.

        Unit test: TiledLayerChromiumTest.pushTilesAfterIdlePaintFailed

        * platform/graphics/chromium/TiledLayerChromium.cpp:
        (WebCore::TiledLayerChromium::prepareToUpdateTiles):
        * platform/graphics/chromium/cc/CCTiledLayerImpl.cpp:
        (WebCore::CCTiledLayerImpl::hasTextureIdForTileAt):
        (WebCore):
        * platform/graphics/chromium/cc/CCTiledLayerImpl.h:
        (CCTiledLayerImpl):

2012-03-23  Stephanie Lewis  <slewis@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=81963 WebProcess can get stuck in GC during many low memory signals.
        <rdar://problem/11094830> WebProcess appears to get stuck in its GC handler (81963).
        Remove the call to garbage collect  in low memory signal handler.  Did some testing with hitting the low memory handler
        during Membuster and we would get back at most 100k - 200k.  That isn't enough to help the system, and in 
        that state the GC collection can take a substantial amount of time.

        Reviewed by Geoff Garen.

        Performance Change, no change in behavior.

        * platform/mac/MemoryPressureHandlerMac.mm:
        (WebCore::MemoryPressureHandler::releaseMemory):

2012-03-23  W. James MacLean  <wjmaclean@chromium.org>

        [chromium] CCLayerTreeHostImpl::scrollBegin() should return ScrollFailed for CCInputHandlerClient::Gesture type when wheel handlers found.
        https://bugs.webkit.org/show_bug.cgi?id=82106

        Reviewed by Adrienne Walker.

        Existing unit tests updated.

        With gesture scroll events now being handled as mouse wheel events, we should not start a gesture scroll when
        wheel handlers are present.

        * platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:
        (WebCore::CCLayerTreeHostImpl::scrollBegin):

2012-03-23  Adam Barth  <abarth@webkit.org>

        Move Notifications APIs from WorkerContext.idl to WorkerContextNotifications.idl
        https://bugs.webkit.org/show_bug.cgi?id=79635

        Reviewed by Kentaro Hara.

        This patch moves the NotificationCenter from WorkerContext to
        WorkerContextNotificiations, reducing clutter in WorkerContext.  After
        this patch, Notifications are almost entirely contained in the
        notifications directory.

        * CMakeLists.txt:
        * DerivedSources.make:
        * DerivedSources.pri:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * workers/WorkerContext.cpp:
        (WebCore::WorkerContext::~WorkerContext):
        * workers/WorkerContext.h:
        (WebCore):
        (WorkerContext):
        * workers/WorkerContext.idl:

2012-03-23  Michal Mocny  <mmocny@google.com>

        [chromium] RootLayer was not being checked for null causing segfaults very rarely.
        https://bugs.webkit.org/show_bug.cgi?id=82111

        Reviewed by Adrienne Walker.

        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::beginDrawingFrame):
        * platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:
        (WebCore::CCLayerTreeHostImpl::drawLayers):

2012-03-23  Shawn Singh  <shawnsingh@chromium.org>

        [chromium] Fix race bug that clobbers CCLayerImpl updateRect
        https://bugs.webkit.org/show_bug.cgi?id=82109

        Reviewed by Dirk Pranke.

        If the main thread commits twice before the impl thread actually
        draws, then the updateRect of the first frame gets lost forever,
        and not propagated to the damage tracker.

        The solution is to accumulate the updateRect. The CCLayerImpl
        updateRect is already being correctly cleared at the appropriate
        time after drawing.

        Unit test added to LayerChromiumTest.cpp.

        * platform/graphics/chromium/LayerChromium.cpp:
        (WebCore::LayerChromium::pushPropertiesTo):

2012-03-23  Rafael Weinstein  <rafaelw@chromium.org>

        [MutationObservers] attributeFilter should be case sensitive at all times
        https://bugs.webkit.org/show_bug.cgi?id=81822

        Reviewed by Ryosuke Niwa.

        This removes the behavior in MutationObserverRegistration which treats
        attributeFilter as case insensitive for HTML elements in HTML documents.

        Relevant tests have been updated.

        * dom/MutationObserverRegistration.cpp:
        (WebCore::MutationObserverRegistration::resetObservation):
        (WebCore::MutationObserverRegistration::shouldReceiveMutationFrom):
        * dom/MutationObserverRegistration.h:
        (MutationObserverRegistration):

2012-03-23  Kentaro Hara  <haraken@chromium.org>

        Move WebSocket APIs from WorkerContext.idl to WorkerContextWebSocket.idl
        https://bugs.webkit.org/show_bug.cgi?id=79663

        Reviewed by Adam Barth.

        For WebKit modularization, this patch moves WebSocket APIs from WorkerContext.idl
        to WorkerContextWebSocket.idl.

        Tests: http/tests/websocket/tests/hybi/workers/* (No change in test results)

        * CMakeLists.txt:
        * DerivedSources.make:
        * DerivedSources.pri:
        * GNUmakefile.list.am:
        * Modules/websockets/WorkerContextWebSocket.idl: Added.
        * WebCore.gypi:
        * WebCore.xcodeproj/project.xcodeproj:
        * workers/WorkerContext.idl:

2012-03-23  Parag Radke  <parag@motorola.com>

        REGRESSION: can select text of an input button
        https://bugs.webkit.org/show_bug.cgi?id=13624

        Reviewed by Ryosuke Niwa.

        Text in a button should never have a selection background of its own painted
        but if the button is inside an editable area, then the whole button should
        have it's selection background painted.

        Test: editing/selection/selection-button-text.html

        * rendering/RenderButton.h:
        Added implementation for the virtual function canBeSelectionLeaf()
        which returns true if the button renderer is editable, false other wise.
        * rendering/RenderTextFragment.h:
        Added implementation for the virtual function canBeSelectionLeaf()
        which returns true if the text fragment renderer is editable, false other wise.

2012-03-23  Eric Carlson  <eric.carlson@apple.com>

        Remove unnecessary ASSERT from LoadableTextTrack::trackElementIndex
        https://bugs.webkit.org/show_bug.cgi?id=82095

        Reviewed by Dan Bernstein.

        No new tests, removed a bogus ASSERT that was sometimes triggered by tests.

        * html/track/LoadableTextTrack.cpp:
        (WebCore::LoadableTextTrack::trackElementIndex): Remove ASSERT.

2012-03-23  Eric Carlson  <eric.carlson@apple.com>

        Layout Test media/video-source-load.html is failing
        https://bugs.webkit.org/show_bug.cgi?id=82094

        Reviewed by Alexey Proskuryakov.

        No new tests, tested by media/video-source-load.html.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::sourceWasAdded): Set m_nextChildNodeToConsider when called 
            with networkState == NETWORK_EMPTY because the resource selection algorithm has
            not started yet.

2012-03-23  Alexey Proskuryakov  <ap@apple.com>

        [Mac] No need for platform-specific ENABLE_BLOB values
        https://bugs.webkit.org/show_bug.cgi?id=82102

        Reviewed by David Kilzer.

        * Configurations/FeatureDefines.xcconfig:

2012-03-23  Kent Tamura  <tkent@chromium.org>

        Add TextFieldDecorator and TextFieldDecorationElement
        https://bugs.webkit.org/show_bug.cgi?id=80580

        Reviewed by Dimitri Glazkov.

        These classes will be used to add a decoration icon to a text field
        <input> from outside of WebCore. We have a plan to use them in Chromium
        port. So this patch doesn't add TextFieldDecorationElement.{cpp,h} to
        non-Chromium build files.

        How it works:
        When a shadow subtree for a text field is created, we ask ChromeClient
        to decorate it. ChromeClient appends a TextFieldDecorationElement to the
        existing shadow subtree or another shadow tree. A TextFieldDecorator is
        associated to a TextFieldDecorationElement, and it provides decoration
        icon images and a click handler.

        No new tests. This patch won't make any behavior change for now.

        * WebCore.gypi: Add TextFieldDecorationElement.cpp and TextFieldDecorationElement.h
        * dom/Element.h:
        (WebCore::Element::isTextFieldDecoration):
        * html/TextFieldInputType.cpp:
        (WebCore::TextFieldInputType::createShadowSubtree):
        Calls ChromeClient::willAddTextFieldDecorationsTo() and addTextFieldDecorationsTo().
        * html/shadow/TextFieldDecorationElement.cpp: Added.
        (WebCore::TextFieldDecorator::~TextFieldDecorator):
        (WebCore::TextFieldDecorationElement::TextFieldDecorationElement):
        (WebCore::TextFieldDecorationElement::create):
        (WebCore::TextFieldDecorationElement::isTextFieldDecoration):
        (WebCore::TextFieldDecorationElement::updateImage):
        (WebCore::TextFieldDecorationElement::customStyleForRenderer):
        Sets the size to a square of the font-size.
        (WebCore::TextFieldDecorationElement::createRenderer):
        Always creates a RenderImage.
        (WebCore::TextFieldDecorationElement::attach):
        Sets an image for appropriate state.
        (WebCore::TextFieldDecorationElement::isMouseFocusable):
        (WebCore::TextFieldDecorationElement::defaultEventHandler):
        Delegate a click event to the corresponding function of TextFieldDecorator.
        * html/shadow/TextFieldDecorationElement.h: Added.
        (TextFieldDecorator): Added.
        (TextFieldDecorationElement): Added.
        (WebCore::toTextFieldDecorationElement): Added.
        * page/ChromeClient.h:
        (WebCore::ChromeClient::willAddTextFieldDecorationsTo): Add an empty implementation.
        (WebCore::ChromeClient::addTextFieldDecorationsTo): ditto.

2012-03-23  Adam Klein  <adamk@chromium.org>

        Match DOM4 spec with respect to DocumentFragment insertion
        https://bugs.webkit.org/show_bug.cgi?id=82089

        Reviewed by Ryosuke Niwa.

        DOM4 specifies the behavior of appendChild, insertBefore, and replaceChild
        in terms of "mutation algorithms":

        http://dvcs.w3.org/hg/domcore/raw-file/tip/Overview.html#mutation-algorithms

        This change updates WebKit to match, in particular with regard to DocumentFragments.
        Previously, ContainerNode would remove nodes one at a time, then add them to the new parent.
        When combined with MutationObservers, this results in overly-verbose mutation records.
        Now we create as few records as possible, matching the spec as well as Gecko's implementation
        of MutationObservers.

        Note that we still need to check validity each time through the loop,
        since inserting a node may dispatch events. In a future change, I hope
        to move these events so that they fire only after all nodes are inserted,
        but that's too much to tackle all in one.

        Tests: fast/mutation/document-fragment-insertion.html

        * dom/ContainerNode.cpp:
        (WebCore::collectChildrenAndRemoveFromOldParent): New helper method
        combining collectTargetNodes() with the removal of the collected nodes from
        their old parent, if any.
        (WebCore::ContainerNode::insertBefore): Use new helper method instead
        of removing nodes one at a time from the fragment.
        (WebCore::ContainerNode::replaceChild): ditto. Also removed some redundant asserts
        and moved the "do nothing" check out of the loop.
        (WebCore::ContainerNode::appendChild): Use new helper method.

2012-03-23  Stephen White  <senorblanco@chromium.org>

        [skia] Switch to Skia's implementation of the feMorphology filter.
        https://bugs.webkit.org/show_bug.cgi?id=82085

        Reviewed by Dirk Schulze.

        Covered by existing tests in svg/filters/.

        * WebCore.gypi:
        * platform/graphics/filters/FEMorphology.h:
        (FEMorphology):
        * platform/graphics/filters/skia/FEMorphologySkia.cpp: Added.
        (WebCore):
        (WebCore::FEMorphology::platformApplySkia):

2012-03-23  Adam Barth  <abarth@webkit.org>

        Move Notifications APIs from DOMWindow.idl to DOMWindowNotifications.idl (Part 3)
        https://bugs.webkit.org/show_bug.cgi?id=82027

        Reviewed by Kentaro Hara.

        Rather than watching for willDetachPage, NotificationCenter can just
        override ActiveDOMObject::stop directly to be notified when it needs to
        stop.

        Switching NotificationCenter over to using ActiveDOMObject callbacks
        frees DOMWindowNotification to implement reconnectFrame.  However, this
        is only really a victory in princple because NotificationCenter always
        returns false for canSuspend(), which means we'll never actually use
        the reconnectFrame functionality.  However, this patch does move us
        closer to the time when NotificationCenter can implement
        ActiveDOMObject::suspend/resume to play nice with the PageCache.

        * notifications/DOMWindowNotifications.cpp:
        (WebCore::DOMWindowNotifications::disconnectFrame):
        (WebCore::DOMWindowNotifications::reconnectFrame):
        * notifications/DOMWindowNotifications.h:
        (DOMWindowNotifications):
        * notifications/NotificationCenter.cpp:
        (WebCore::NotificationCenter::NotificationCenter):
        (WebCore::NotificationCenter::stop):
        * notifications/NotificationCenter.h:
        (NotificationCenter):

2012-03-23  Daniel Cheng  <dcheng@chromium.org>

        [chromium] Support file drag out using DataTransferItemList::add(File)
        https://bugs.webkit.org/show_bug.cgi?id=81261

        Reviewed by Tony Chang.

        Original patch by Varun Jain <varunjain@chromium.org>.
        I've updated the original patch to remove 'downloadurl' handling since it's not tested, nor
        is it necessary for File objects, since File objects correspond to a native filesystem path.

        Test: fast/events/drag-dataTransferItemList-file-handling.html

        * platform/chromium/DataTransferItemListChromium.cpp:
        (WebCore::DataTransferItemListChromium::add):

2012-03-23  Zan Dobersek  <zandobersek@gmail.com>

        [GObject bindings] Supplemental interfaces are not disabled with the "Conditional" attribute
        https://bugs.webkit.org/show_bug.cgi?id=80030

        Reviewed by Martin Robinson.

        Changes in CodeGeneratorGObject.pm:
        - group implementation of private helpers and guard them inside
        an ifdef if a root conditional attribute is present.
        - always define the type of a GObject binding, even if the root
        conditional feature is not enabled
        - the methods are generated as well, but are simply stubs if the
        feature is not enabled, throwing a warning upon interaction.
        - if the method itself is guarded by a conditional attribute,
        the stub implementation gains one more level of depth, throwing
        a warning if the method's conditional feature is not enabled
        but the root conditional feature is.
        - small style fixes in random places.

        Also changed are GObject baselines for binding tests.

        No new tests - no new testable functionality.

        * bindings/gobject/GNUmakefile.am:
        * bindings/scripts/CodeGeneratorGObject.pm:
        (HumanReadableConditional):
        (GenerateConditionalWarn):
        (GenerateProperty):
        (GenerateProperties):
        (GenerateFunction):
        (GenerateFunctions):
        (GenerateCFile):
        (GenerateEventTargetIface):
        (Generate):
        (WriteData):
        * bindings/scripts/test/GObject/WebKitDOMFloat64Array.cpp:
        (WebKit):
        (WebKit::kit):
        (WebKit::wrapFloat64Array):
        (webkit_dom_float64array_finalize):
        (webkit_dom_float64array_foo):
        * bindings/scripts/test/GObject/WebKitDOMFloat64ArrayPrivate.h:
        * bindings/scripts/test/GObject/WebKitDOMTestActiveDOMObject.cpp:
        (WebKit):
        (WebKit::kit):
        (WebKit::wrapTestActiveDOMObject):
        (webkit_dom_test_active_dom_object_finalize):
        (webkit_dom_test_active_dom_object_exciting_function):
        (webkit_dom_test_active_dom_object_post_message):
        (webkit_dom_test_active_dom_object_get_exciting_attr):
        * bindings/scripts/test/GObject/WebKitDOMTestActiveDOMObjectPrivate.h:
        * bindings/scripts/test/GObject/WebKitDOMTestCallback.cpp:
        (WebKit):
        (WebKit::kit):
        (WebKit::core):
        (WebKit::wrapTestCallback):
        (webkit_dom_test_callback_finalize):
        (webkit_dom_test_callback_callback_with_no_param):
        (webkit_dom_test_callback_callback_with_class1param):
        (webkit_dom_test_callback_callback_with_class2param):
        (webkit_dom_test_callback_callback_with_non_bool_return_type):
        (webkit_dom_test_callback_callback_with_string_list):
        * bindings/scripts/test/GObject/WebKitDOMTestCallbackPrivate.h:
        * bindings/scripts/test/GObject/WebKitDOMTestCustomNamedGetter.cpp:
        (WebKit):
        (WebKit::kit):
        (WebKit::wrapTestCustomNamedGetter):
        (webkit_dom_test_custom_named_getter_finalize):
        (webkit_dom_test_custom_named_getter_another_function):
        * bindings/scripts/test/GObject/WebKitDOMTestCustomNamedGetterPrivate.h:
        * bindings/scripts/test/GObject/WebKitDOMTestEventConstructor.cpp:
        (WebKit):
        (WebKit::kit):
        (WebKit::wrapTestEventConstructor):
        (webkit_dom_test_event_constructor_finalize):
        (webkit_dom_test_event_constructor_get_attr1):
        (webkit_dom_test_event_constructor_get_attr2):
        * bindings/scripts/test/GObject/WebKitDOMTestEventConstructorPrivate.h:
        * bindings/scripts/test/GObject/WebKitDOMTestEventTarget.cpp:
        (WebKit):
        (WebKit::core):
        (WebKit::wrapTestEventTarget):
        (webkit_dom_test_event_target_finalize):
        (webkit_dom_test_event_target_item):
        (webkit_dom_test_event_target_dispatch_event):
        * bindings/scripts/test/GObject/WebKitDOMTestEventTargetPrivate.h:
        * bindings/scripts/test/GObject/WebKitDOMTestInterface.cpp:
        (WebKit):
        (WebKit::kit):
        (WebKit::core):
        (WebKit::wrapTestInterface):
        (webkit_dom_test_interface_finalize):
        (webkit_dom_test_interface_supplemental_method1):
        (webkit_dom_test_interface_supplemental_method2):
        (webkit_dom_test_interface_supplemental_method4):
        (webkit_dom_test_interface_get_supplemental_str1):
        (webkit_dom_test_interface_get_supplemental_str2):
        (webkit_dom_test_interface_set_supplemental_str2):
        (webkit_dom_test_interface_get_supplemental_node):
        (webkit_dom_test_interface_set_supplemental_node):
        * bindings/scripts/test/GObject/WebKitDOMTestInterfacePrivate.h:
        * bindings/scripts/test/GObject/WebKitDOMTestMediaQueryListListener.cpp:
        (WebKit):
        (WebKit::kit):
        (WebKit::wrapTestMediaQueryListListener):
        (webkit_dom_test_media_query_list_listener_finalize):
        * bindings/scripts/test/GObject/WebKitDOMTestMediaQueryListListenerPrivate.h:
        * bindings/scripts/test/GObject/WebKitDOMTestNamedConstructor.cpp:
        (WebKit):
        (WebKit::kit):
        (WebKit::wrapTestNamedConstructor):
        (webkit_dom_test_named_constructor_finalize):
        * bindings/scripts/test/GObject/WebKitDOMTestNamedConstructorPrivate.h:
        * bindings/scripts/test/GObject/WebKitDOMTestObj.cpp:
        (WebKit):
        (WebKit::kit):
        (WebKit::core):
        (WebKit::wrapTestObj):
        (webkit_dom_test_obj_finalize):
        (webkit_dom_test_obj_set_property):
        (webkit_dom_test_obj_get_property):
        (webkit_dom_test_obj_constructed):
        (webkit_dom_test_obj_class_init):
        (webkit_dom_test_obj_init):
        (webkit_dom_test_obj_void_method):
        (webkit_dom_test_obj_void_method_with_args):
        (webkit_dom_test_obj_int_method):
        (webkit_dom_test_obj_int_method_with_args):
        (webkit_dom_test_obj_obj_method):
        (webkit_dom_test_obj_obj_method_with_args):
        (webkit_dom_test_obj_method_with_sequence_arg):
        (webkit_dom_test_obj_method_that_requires_all_args_and_throws):
        (webkit_dom_test_obj_serialized_value):
        (webkit_dom_test_obj_idb_key):
        (webkit_dom_test_obj_options_object):
        (webkit_dom_test_obj_method_with_exception):
        (webkit_dom_test_obj_with_script_state_void):
        (webkit_dom_test_obj_with_script_state_obj):
        (webkit_dom_test_obj_with_script_state_void_exception):
        (webkit_dom_test_obj_with_script_state_obj_exception):
        (webkit_dom_test_obj_with_script_execution_context):
        (webkit_dom_test_obj_with_script_execution_context_and_script_state):
        (webkit_dom_test_obj_with_script_execution_context_and_script_state_obj_exception):
        (webkit_dom_test_obj_with_script_execution_context_and_script_state_with_spaces):
        (webkit_dom_test_obj_method_with_optional_arg):
        (webkit_dom_test_obj_method_with_non_optional_arg_and_optional_arg):
        (webkit_dom_test_obj_method_with_non_optional_arg_and_two_optional_args):
        (webkit_dom_test_obj_method_with_optional_string):
        (webkit_dom_test_obj_method_with_optional_string_is_undefined):
        (webkit_dom_test_obj_method_with_optional_string_is_null_string):
        (webkit_dom_test_obj_conditional_method1):
        (webkit_dom_test_obj_conditional_method2):
        (webkit_dom_test_obj_conditional_method3):
        (webkit_dom_test_obj_class_method):
        (webkit_dom_test_obj_class_method_with_optional):
        (webkit_dom_test_obj_overloaded_method1):
        (webkit_dom_test_obj_convert1):
        (webkit_dom_test_obj_convert2):
        (webkit_dom_test_obj_convert3):
        (webkit_dom_test_obj_convert4):
        (webkit_dom_test_obj_convert5):
        (webkit_dom_test_obj_mutable_point_function):
        (webkit_dom_test_obj_immutable_point_function):
        (webkit_dom_test_obj_orange):
        (webkit_dom_test_obj_strict_function):
        (webkit_dom_test_obj_get_read_only_int_attr):
        (webkit_dom_test_obj_get_read_only_string_attr):
        (webkit_dom_test_obj_get_read_only_test_obj_attr):
        (webkit_dom_test_obj_get_short_attr):
        (webkit_dom_test_obj_set_short_attr):
        (webkit_dom_test_obj_get_unsigned_short_attr):
        (webkit_dom_test_obj_set_unsigned_short_attr):
        (webkit_dom_test_obj_get_int_attr):
        (webkit_dom_test_obj_set_int_attr):
        (webkit_dom_test_obj_get_long_long_attr):
        (webkit_dom_test_obj_set_long_long_attr):
        (webkit_dom_test_obj_get_unsigned_long_long_attr):
        (webkit_dom_test_obj_set_unsigned_long_long_attr):
        (webkit_dom_test_obj_get_string_attr):
        (webkit_dom_test_obj_set_string_attr):
        (webkit_dom_test_obj_get_test_obj_attr):
        (webkit_dom_test_obj_set_test_obj_attr):
        (webkit_dom_test_obj_get_xml_obj_attr):
        (webkit_dom_test_obj_set_xml_obj_attr):
        (webkit_dom_test_obj_get_create):
        (webkit_dom_test_obj_set_create):
        (webkit_dom_test_obj_get_reflected_string_attr):
        (webkit_dom_test_obj_set_reflected_string_attr):
        (webkit_dom_test_obj_get_reflected_integral_attr):
        (webkit_dom_test_obj_set_reflected_integral_attr):
        (webkit_dom_test_obj_get_reflected_unsigned_integral_attr):
        (webkit_dom_test_obj_set_reflected_unsigned_integral_attr):
        (webkit_dom_test_obj_get_reflected_boolean_attr):
        (webkit_dom_test_obj_set_reflected_boolean_attr):
        (webkit_dom_test_obj_get_reflected_url_attr):
        (webkit_dom_test_obj_set_reflected_url_attr):
        (webkit_dom_test_obj_get_reflected_custom_integral_attr):
        (webkit_dom_test_obj_set_reflected_custom_integral_attr):
        (webkit_dom_test_obj_get_reflected_custom_boolean_attr):
        (webkit_dom_test_obj_set_reflected_custom_boolean_attr):
        (webkit_dom_test_obj_get_reflected_custom_url_attr):
        (webkit_dom_test_obj_set_reflected_custom_url_attr):
        (webkit_dom_test_obj_get_attr_with_getter_exception):
        (webkit_dom_test_obj_set_attr_with_getter_exception):
        (webkit_dom_test_obj_get_attr_with_setter_exception):
        (webkit_dom_test_obj_set_attr_with_setter_exception):
        (webkit_dom_test_obj_get_string_attr_with_getter_exception):
        (webkit_dom_test_obj_set_string_attr_with_getter_exception):
        (webkit_dom_test_obj_get_string_attr_with_setter_exception):
        (webkit_dom_test_obj_set_string_attr_with_setter_exception):
        (webkit_dom_test_obj_get_with_script_state_attribute):
        (webkit_dom_test_obj_set_with_script_state_attribute):
        (webkit_dom_test_obj_get_with_script_execution_context_attribute):
        (webkit_dom_test_obj_set_with_script_execution_context_attribute):
        (webkit_dom_test_obj_get_with_script_state_attribute_raises):
        (webkit_dom_test_obj_set_with_script_state_attribute_raises):
        (webkit_dom_test_obj_get_with_script_execution_context_attribute_raises):
        (webkit_dom_test_obj_set_with_script_execution_context_attribute_raises):
        (webkit_dom_test_obj_get_with_script_execution_context_and_script_state_attribute):
        (webkit_dom_test_obj_set_with_script_execution_context_and_script_state_attribute):
        (webkit_dom_test_obj_get_with_script_execution_context_and_script_state_attribute_raises):
        (webkit_dom_test_obj_set_with_script_execution_context_and_script_state_attribute_raises):
        (webkit_dom_test_obj_get_with_script_execution_context_and_script_state_with_spaces_attribute):
        (webkit_dom_test_obj_set_with_script_execution_context_and_script_state_with_spaces_attribute):
        (webkit_dom_test_obj_get_conditional_attr1):
        (webkit_dom_test_obj_set_conditional_attr1):
        (webkit_dom_test_obj_get_conditional_attr2):
        (webkit_dom_test_obj_set_conditional_attr2):
        (webkit_dom_test_obj_get_conditional_attr3):
        (webkit_dom_test_obj_set_conditional_attr3):
        (webkit_dom_test_obj_get_content_document):
        (webkit_dom_test_obj_get_mutable_point):
        (webkit_dom_test_obj_set_mutable_point):
        (webkit_dom_test_obj_get_immutable_point):
        (webkit_dom_test_obj_set_immutable_point):
        (webkit_dom_test_obj_get_strict_float):
        (webkit_dom_test_obj_set_strict_float):
        (webkit_dom_test_obj_get_description):
        (webkit_dom_test_obj_get_id):
        (webkit_dom_test_obj_set_id):
        (webkit_dom_test_obj_get_hash):
        * bindings/scripts/test/GObject/WebKitDOMTestObjPrivate.h:
        * bindings/scripts/test/GObject/WebKitDOMTestSerializedScriptValueInterface.cpp:
        (WebKit):
        (WebKit::kit):
        (WebKit::core):
        (WebKit::wrapTestSerializedScriptValueInterface):
        (webkit_dom_test_serialized_script_value_interface_finalize):
        (webkit_dom_test_serialized_script_value_interface_accept_transfer_list):
        (webkit_dom_test_serialized_script_value_interface_multi_transfer_list):
        (webkit_dom_test_serialized_script_value_interface_get_value):
        (webkit_dom_test_serialized_script_value_interface_set_value):
        (webkit_dom_test_serialized_script_value_interface_get_readonly_value):
        (webkit_dom_test_serialized_script_value_interface_get_cached_value):
        (webkit_dom_test_serialized_script_value_interface_set_cached_value):
        (webkit_dom_test_serialized_script_value_interface_get_cached_readonly_value):
        * bindings/scripts/test/GObject/WebKitDOMTestSerializedScriptValueInterfacePrivate.h:

2012-03-23  Dana Jansens  <danakj@chromium.org>

        [chromium] Record painted pixel counts for measuring effectiveness of per-tile painting
        https://bugs.webkit.org/show_bug.cgi?id=82057

        Reviewed by Adrienne Walker.

        Adds painted pixel metrics to CCOverdrawMetrics class, and calls in
        to report painted areas when updating tiles in the TiledLayerChromium
        class.

        Unit test: TiledLayerChromiumTest.opaqueContentsRegion
                   TiledLayerChromiumTest.pixelsPaintedMetrics

        * platform/graphics/chromium/TiledLayerChromium.cpp:
        (WebCore::TiledLayerChromium::prepareToUpdateTiles):
        * platform/graphics/chromium/cc/CCOverdrawMetrics.cpp:
        (WebCore::CCOverdrawMetrics::CCOverdrawMetrics):
        (WebCore::CCOverdrawMetrics::didPaint):
        (WebCore):
        (WebCore::CCOverdrawMetrics::recordMetricsInternal):
        * platform/graphics/chromium/cc/CCOverdrawMetrics.h:
        (CCOverdrawMetrics):
        (WebCore::CCOverdrawMetrics::pixelsPainted):

2012-03-23  Abhishek Arya  <inferno@chromium.org>

        Crash in RenderBlock::splitBlocks.
        https://bugs.webkit.org/show_bug.cgi?id=81926

        Reviewed by Julien Chaffraix.

        We are updating the :after content before calling splitFlow. The :after content
        gets blown away since it will go to the continuation. beforeChild was earlier
        set to the first child. Being the last anonymous block, its children gets pulled
        up in collapseAnonymousBoxChild and it gets destroyed. So, we need to update
        beforeChild value. 

        Test: fast/multicol/span/update-after-content-before-child-crash.html

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

2012-03-23  Dana Jansens  <danakj@chromium.org>

        [chromium] Improved composited debug borders
        https://bugs.webkit.org/show_bug.cgi?id=82071

        Reviewed by Adrienne Walker.

        Fix the problem with missing debug borders. Since we append quads
        to the list front to back now, we draw the quads in the list from
        back to front of the list. Which means if the debug quad is added
        after the layer it is drawing around, the layer can draw over top
        of its debug quad. Reverse the ordering when appending to fix it.

        Make the border red around tiles that are checkerboarded. Missing
        tiles in non-root layers are drawn clear, so this makes them more
        visible.

        Put a blue border around each render surface, and a purple border
        on their replicas.

        No new tests.

        * platform/graphics/chromium/cc/CCRenderPass.cpp:
        (WebCore):
        (WebCore::CCRenderPass::appendQuadsForLayer):
        (WebCore::CCRenderPass::appendQuadsForRenderSurfaceLayer):
        * platform/graphics/chromium/cc/CCRenderSurface.cpp:
        (WebCore::CCRenderSurface::hasReplica):
        (WebCore):
        (WebCore::CCRenderSurface::createReplicaSharedQuadState):
        * platform/graphics/chromium/cc/CCRenderSurface.h:
        (CCRenderSurface):
        * platform/graphics/chromium/cc/CCTiledLayerImpl.cpp:
        (WebCore):
        (WebCore::CCTiledLayerImpl::appendQuads):

2012-03-23  Simon Fraser  <simon.fraser@apple.com>

        Move code that calls setAcceleratesDrawing() on GraphicsLayers into RenderLayerBacking
        https://bugs.webkit.org/show_bug.cgi?id=82092

        Reviewed by Dean Jackson.

        A RenderLayerBacking manages several GraphicsLayers, but RenderLayerCompositor
        was only calling setAcceleratesDrawing() on the one it knows about. Fix by moving
        this setting code down into RenderLayerBacking.
        
        RenderLayerCompositor now caches the setAcceleratesDrawing setting, as it does
        for other compositing-related settings, so that RenderLayerBacking doesn't have
        to grovel for Settings every time.

        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::createGraphicsLayer):
        (WebCore::RenderLayerBacking::createPrimaryGraphicsLayer):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::RenderLayerCompositor):
        (WebCore::RenderLayerCompositor::cacheAcceleratedCompositingFlags):
        (WebCore::RenderLayerCompositor::updateBacking):
        * rendering/RenderLayerCompositor.h:
        (WebCore::RenderLayerCompositor::acceleratedDrawingEnabled):
        (RenderLayerCompositor):

2012-03-23  Beth Dakin  <bdakin@apple.com>

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

        Rubber-stamped by Simon Fraser.

        This patch is just a name change. getExistingScrollAnimator() (which was 
        added earlier today) is now existingScrollAnimator().
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::transitionToCommitted):
        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleGestureTapDown):
        * page/FrameView.cpp:
        (WebCore::FrameView::setAnimatorsAreActive):
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::updateScrollbars):
        * platform/ScrollableArea.cpp:
        (WebCore::ScrollableArea::willStartLiveResize):
        (WebCore::ScrollableArea::willEndLiveResize):
        (WebCore::ScrollableArea::contentAreaWillPaint):
        (WebCore::ScrollableArea::mouseEnteredContentArea):
        (WebCore::ScrollableArea::mouseExitedContentArea):
        (WebCore::ScrollableArea::mouseMovedInContentArea):
        (WebCore::ScrollableArea::contentAreaDidShow):
        (WebCore::ScrollableArea::contentAreaDidHide):
        (WebCore::ScrollableArea::contentsResized):
        (WebCore::ScrollableArea::serviceScrollAnimations):
        * platform/ScrollableArea.h:
        (WebCore::ScrollableArea::existingScrollAnimator):

2012-03-23  Abhishek Arya  <inferno@chromium.org>

        Crash due to accessing removed parent lineboxes when clearing selection.
        https://bugs.webkit.org/show_bug.cgi?id=81359

        Reviewed by Eric Seidel.

        Similar to r110323, adds the canUpdateSelectionOnRootLineBoxes
        check to more places.

        Test: editing/selection/clear-selection-crash.html

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::canUpdateSelectionOnRootLineBoxes):
        * rendering/RenderSelectionInfo.h:
        (WebCore::RenderSelectionInfo::RenderSelectionInfo):
        (WebCore::RenderBlockSelectionInfo::RenderBlockSelectionInfo):

2012-03-23  Beth Dakin  <bdakin@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=82083
        Too many ScrollAnimators are allocated on pages with frames

        Reviewed by Geoffrey Garen.

        This patch adds a new getter to ScrollableArea called 
        getExistingScrollAnimator() unlike scrollAnimator() this new function will 
        just return null if there is not already a ScrollAnimator. Callers should use 
        this new function when they have business with ScrollAnimator that does not 
        need to do anything when there are no scrollbars.
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::transitionToCommitted):
        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleGestureTapDown):
        * page/FrameView.cpp:
        (WebCore::FrameView::setAnimatorsAreActive):
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::updateScrollbars):
        * platform/ScrollableArea.cpp:
        (WebCore::ScrollableArea::willStartLiveResize):
        (WebCore::ScrollableArea::willEndLiveResize):
        (WebCore::ScrollableArea::contentAreaWillPaint):
        (WebCore::ScrollableArea::mouseEnteredContentArea):
        (WebCore::ScrollableArea::mouseExitedContentArea):
        (WebCore::ScrollableArea::mouseMovedInContentArea):
        (WebCore::ScrollableArea::contentAreaDidShow):
        (WebCore::ScrollableArea::contentAreaDidHide):
        (WebCore::ScrollableArea::willRemoveHorizontalScrollbar):
        (WebCore::ScrollableArea::contentsResized):
        (WebCore::ScrollableArea::serviceScrollAnimations):
        * platform/ScrollableArea.h:
        (ScrollableArea):
        (WebCore::ScrollableArea::getExistingScrollAnimator):

2012-03-23  Eric Carlson  <eric.carlson@apple.com>

        Deal with DOM modifications when evaluating source elements.
        https://bugs.webkit.org/show_bug.cgi?id=81163

        Reviewed by Alexey Proskuryakov.

        Test: media/video-beforeload-remove-source.html

        * dom/ContainerNode.cpp: Make NodeVector and collectNodes public, renamed as getChildNodes.
        (WebCore::ContainerNode::takeAllChildrenFrom): collectNodes -> getChildNodes.
        (WebCore::ContainerNode::willRemove): collectNodes -> getChildNodes.
        (WebCore::ContainerNode::willRemoveChildren): collectNodes -> getChildNodes.
        (WebCore::ContainerNode::insertedIntoDocument): collectNodes -> getChildNodes.
        (WebCore::ContainerNode::removedFromDocument): collectNodes -> getChildNodes.
        * dom/ContainerNode.h:
        (WebCore::getChildNodes):

        * editing/ReplaceSelectionCommand.cpp: Remove unused NodeVector declaration.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::HTMLMediaElement): m_nextChildNodeToConsider and m_currentSourceNode
            are now RefPtrs.
        (WebCore::HTMLMediaElement::loadTimerFired): Protect HTMLMediaElement from being deleted during
            a DOM modification during an event callback.
        (WebCore::HTMLMediaElement::load): Ditto.
        (WebCore::HTMLMediaElement::selectMediaResource): Set m_nextChildNodeToConsider to the first
            child node, it will be the first node considered.
        (WebCore::HTMLMediaElement::havePotentialSourceChild): m_nextChildNodeToConsider and m_currentSourceNode
            are now RefPtrs.
        (WebCore::HTMLMediaElement::selectNextSourceChild): Collect all child nodes in a vector before
            looking for <source> nodes because 'beforeload' event handlers can mutate the DOM. Don't
            use a <source> that is no longer a child node after 'beforeload'. Use 0 to represent the end
            of the child node list because m_nextChildNodeToConsider is now a RefPtr so using the previous 
            sentinel, "this", would cause a retain cycle.
        (WebCore::HTMLMediaElement::sourceWasAdded):  m_nextChildNodeToConsider and m_currentSourceNode
            are now RefPtrs.
        (WebCore::HTMLMediaElement::sourceWillBeRemoved): Ditto.
        (WebCore::HTMLMediaElement::getPluginProxyParams): Protect HTMLMediaElement from being deleted during
            a DOM modification during an event callback.
        * html/HTMLMediaElement.h:

2012-03-23  Dean Jackson  <dino@apple.com>

        Disable CSS_SHADERS in Apple builds
        https://bugs.webkit.org/show_bug.cgi?id=81996

        Reviewed by Simon Fraser.

        Remove ENABLE_CSS_SHADERS from FeatureDefines. It's now in Platform.h.

        * Configurations/FeatureDefines.xcconfig:

2012-03-23  Dave Michael  <dmichael@chromium.org>

        Relanding(r111754): HTMLPluginElement is not destroyed on reload or navigation if getNPObject is called
        https://bugs.webkit.org/show_bug.cgi?id=80428

        Reviewed by Eric Seidel and Ryosuke Niwa.

        Make HTMLPluginElement release its m_NPObject in detach() to break a
        reference-counting cycle that happens on reload or navigation. With this
        change, HTMLPlugInElement::removedFromDocument is unnecessary, so it
        was removed. Note that Releasing m_NPObject does not result in a call to
        the plugin; it simply releases a reference count on the wrapper object
        for this HTMLPlugInElement. (The plugin's NPP_Deallocate is invoked
        when the render tree is destroyed, when PluginView calls
        PluginPackage::unload.) Thus, it is safe to release m_NPObject in
        detach, because it can not result in layout or style changes.

        Also added numberOfLiveNodes() and numberOfLiveDocuments() to
        window.internals to enable testing.

        Test: plugins/netscape-dom-access-and-reload.html

        * WebCore.exp.in:
        * html/HTMLPlugInElement.cpp:
        (WebCore::HTMLPlugInElement::detach):
        * html/HTMLPlugInElement.h:
        (HTMLPlugInElement):
        * testing/Internals.cpp:
        (WebCore):
        (WebCore::Internals::numberOfLiveNodes):
        (WebCore::Internals::numberOfLiveDocuments):
        * testing/Internals.h:
        (Internals):
        * testing/Internals.idl:

2012-03-23  Ryosuke Niwa  <rniwa@webkit.org>

        CSSParser doesn't set border-*-width/style/color to initial by border shorthand property
        https://bugs.webkit.org/show_bug.cgi?id=82040

        Reviewed by Antti Koivisto.

        The border shorthand property sets values for border-width, border-style, and border-color shorthand properties.
        While CSSParser::parseValue can process these shorthand properties properly and set the longhand properties
        such as border-top-width, border-right-width, ... border-left-color, CSSParser::addProperty can't and the
        initialization in parseShorthand fails for the border property.

        Fixed the bug by explicitly initializing longhand properties.

        Changing the behavior here is unlikely to break the Web since our behavior already differs from that of Firefox
        and Internet Explorer. Both of those browsers return the actual initial values such as "medium" and "currentColor".
        This discrepancy is tracked by https://bugs.webkit.org/show_bug.cgi?id=82078.

        Test: fast/css/border-shorthand-initialize-longhands.html

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue): Uses borderAbridgedLonghand.
        (WebCore::CSSParser::parseShorthand): Uses longhand properties for initialization if one is available.
        This allows us to initialize multiple properties (e.g. border-*-color) for a single property missing in the set.
        * css/CSSPropertyLonghand.cpp:
        (WebCore::borderAbridgedLonghand): Added. The longhand here (border-width, border-style, border-color) is
        "abridged" in the sense that they're still shorthands.
        * css/CSSPropertyLonghand.h:
        (WebCore::CSSPropertyLonghand::CSSPropertyLonghand):
        (CSSPropertyLonghand): Added the version that takes longhand instances for initialization purposes.
        (WebCore::CSSPropertyLonghand::longhandsForInitialization):

2012-03-23  Tony Chang  <tony@chromium.org>

        [chromium] rename newwtf target back to wtf
        https://bugs.webkit.org/show_bug.cgi?id=82064

        Reviewed by Adam Barth.

        No new tests, only renaming a build target.

        * WebCore.gyp/WebCore.gyp:

2012-03-23  Adrienne Walker  <enne@google.com>

        [chromium] Turn off painting of scrollbars on compositor thread for unsupported platforms
        https://bugs.webkit.org/show_bug.cgi?id=82066

        Reviewed by James Robinson.

        With threaded compositing, OSX will crash and Windows will have black
        scrollbars. Fix that by reverting to the previosu behavior of updating
        scrollbars on the main thread instead.

        * page/scrolling/chromium/ScrollingCoordinatorChromium.cpp:
        (WebCore::scrollbarLayerDidChange):

2012-03-23  Dan Bernstein  <mitz@apple.com>

        <rdar://problem/7883987> ASSERTION FAILED: ASSERT(input == AnimationStateInputEndTimerFired || input == AnimationStateInputPlayStatePaused) in AnimationBase::updateStateMachine causing multiple "crashes" on Lion Intel Debug WebKit testers
        https://bugs.webkit.org/show_bug.cgi?id=81351

        Rubber-stamped by Jessie Berlin.

        * page/animation/AnimationBase.cpp:
        (WebCore::AnimationBase::updateStateMachine): Replaced the assertion with a LOG_ERROR so that
        the issue is still noticeable, but it does not automatically make the debug bots red.

2012-03-23  Mike Lawther  <mikelawther@chromium.org>

        CSS3 calc: image sizing works with mixed percentage/absolute
        https://bugs.webkit.org/show_bug.cgi?id=82017

        Reviewed by Ojan Vafai.

        Test: css3/calc/img-size-expected.html

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::computeReplacedLogicalWidthUsing):
        (WebCore::RenderBox::computeReplacedLogicalHeightUsing):

2012-03-23  Julien Chaffraix  <jchaffraix@webkit.org>

        REGRESSION(107971): Google Voice contact list is broken in WebKit due to badly allocating the extra height
        https://bugs.webkit.org/show_bug.cgi?id=81826

        Reviewed by Tony Chang.

        Covered by tables/mozilla/bugs/bug27038-{1|2}.html.

        This partly reverts r107971: the extra logical height distribution change was not needed
        to fix the bug (it is needed by the test though). We revert to giving all the extra height
        to the first tbody and not the first section.

        This is broken but unfortunately some websites are relying on that. Getting a real
        distribution algorithm is covered by bug 81824. However this is super tricky to get
        right and I did not want to add more compatibility risks until I have something solid.

        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::distributeExtraLogicalHeight):

2012-03-23  Xingnan Wang  <xingnan.wang@intel.com>

        Optimize for IPP in DirectConvolver::process()
        https://bugs.webkit.org/show_bug.cgi?id=80255

        Reviewed by Chris Rogers.

        Increase ~2X performance by conv() in IPP.

        * platform/audio/DirectConvolver.cpp:
        (WebCore::DirectConvolver::DirectConvolver):
        (WebCore::DirectConvolver::process):
        * platform/audio/DirectConvolver.h:
        (DirectConvolver):

2012-03-23  Tommy Widenflycht  <tommyw@google.com>

        MediaStream API (JSEP): Introducing PeerConnection00 and IceCallback
        https://bugs.webkit.org/show_bug.cgi?id=81657

        Reviewed by Adam Barth.

        Last major WebCore patch for the JSEP PeerConnection, together with the associated
        IceCallback (they both depend on each other and IceCallback has very few lines of real code).

        My next patch after this one will do a major overhaul of the existing layout tests
        and add a few new ones.

        * GNUmakefile.list.am:
        * Modules/mediastream/DOMWindowMediaStream.idl:
        * Modules/mediastream/IceCallback.h: Added.
        (WebCore):
        (IceCallback):
        (WebCore::IceCallback::~IceCallback):
        * Modules/mediastream/IceCallback.idl: Added.
        * Modules/mediastream/PeerConnection00.cpp: Added.
        (WebCore):
        (WebCore::PeerConnection00::create):
        (WebCore::PeerConnection00::PeerConnection00):
        (WebCore::PeerConnection00::~PeerConnection00):
        (WebCore::PeerConnection00::hasLocalAudioTrack):
        (WebCore::PeerConnection00::hasLocalVideoTrack):
        (WebCore::PeerConnection00::parseMediaHints):
        (WebCore::PeerConnection00::createOffer):
        (WebCore::PeerConnection00::createAnswer):
        (WebCore::PeerConnection00::setLocalDescription):
        (WebCore::PeerConnection00::setRemoteDescription):
        (WebCore::PeerConnection00::localDescription):
        (WebCore::PeerConnection00::remoteDescription):
        (WebCore::PeerConnection00::startIce):
        (WebCore::PeerConnection00::processIceMessage):
        (WebCore::PeerConnection00::readyState):
        (WebCore::PeerConnection00::iceState):
        (WebCore::PeerConnection00::addStream):
        (WebCore::PeerConnection00::removeStream):
        (WebCore::PeerConnection00::localStreams):
        (WebCore::PeerConnection00::remoteStreams):
        (WebCore::PeerConnection00::close):
        (WebCore::PeerConnection00::didGenerateIceCandidate):
        (WebCore::PeerConnection00::didChangeReadyState):
        (WebCore::PeerConnection00::didChangeIceState):
        (WebCore::PeerConnection00::didAddRemoteStream):
        (WebCore::PeerConnection00::didRemoveRemoteStream):
        (WebCore::PeerConnection00::interfaceName):
        (WebCore::PeerConnection00::scriptExecutionContext):
        (WebCore::PeerConnection00::stop):
        (WebCore::PeerConnection00::eventTargetData):
        (WebCore::PeerConnection00::ensureEventTargetData):
        (WebCore::PeerConnection00::changeReadyState):
        (WebCore::PeerConnection00::changeIceState):
        * Modules/mediastream/PeerConnection00.h: Added.
        (WebCore):
        (PeerConnection00):
        (WebCore::PeerConnection00::refEventTarget):
        (WebCore::PeerConnection00::derefEventTarget):
        * Modules/mediastream/PeerConnection00.idl: Added.
        * WebCore.gypi:
        * bindings/generic/RuntimeEnabledFeatures.h:
        (WebCore::RuntimeEnabledFeatures::webkitPeerConnection00Enabled):
        * bindings/js/JSPeerConnection00Custom.cpp: Added.
        (WebCore):
        (WebCore::JSPeerConnection00Constructor::constructJSPeerConnection00):
        * dom/EventTargetFactory.in:

2012-03-23  Adrienne Walker  <enne@google.com>

        [chromium] Fix scrollbarLayerLostContext flaky test crash on 10.6
        https://bugs.webkit.org/show_bug.cgi?id=82062

        Reviewed by James Robinson.

        * platform/graphics/chromium/cc/CCScrollbarLayerImpl.h:
        (CCScrollbarLayerImpl):

2012-03-23  Tommy Widenflycht  <tommyw@google.com>

        [chromium] MediaStream API (JSEP): Extending WebMediaStreamCenter
        https://bugs.webkit.org/show_bug.cgi?id=81924

        Reviewed by Adam Barth.

        Nothing to test, just moving methods.

        * platform/mediastream/MediaStreamCenter.cpp:
        (WebCore::MediaStreamCenter::constructSDP):
        (WebCore):

2012-03-23  Sami Kyostila  <skyostil@chromium.org>

        Reuse buffer allocation if canvas size does not change
        https://bugs.webkit.org/show_bug.cgi?id=80871

        Reviewed by Stephen White.

        If the user changes the width or height attributes of a canvas element,
        the contents of the canvas should be cleared and the context state
        should be reset. This has become a common idiom to clear the canvas
        "efficiently" at the start of a frame.

        Previously, this code path triggered a full reallocation of the image
        buffer backing the canvas, leading to reduced performance. This patch
        implements an optimization where we reuse the previous image buffer
        allocation if the size of the canvas did not change. Also, instead of
        clearing the canvas every time its dimensions are touched, we only clear
        if anything has been drawn into the canvas since it was previously
        cleared.

        Note that for now this optimization only applies for 2D canvases,
        since it is not entirely clear how touching the dimensions of a WebGL
        canvas should work.

        Test: fast/canvas/canvas-resize-after-paint-without-layout.html +
              existing layout tests for canvas resetting.

        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::HTMLCanvasElement):
        (WebCore::HTMLCanvasElement::reset):
        (WebCore::HTMLCanvasElement::createImageBuffer): Save the initial
        graphics context state so we can restore it without creating a new
        context.
        (WebCore::HTMLCanvasElement::clearImageBuffer):
        (WebCore):
        (WebCore::HTMLCanvasElement::clearCopiedImage):
        * html/HTMLCanvasElement.h:
        (HTMLCanvasElement):
        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::reset): No need to notify the
        compositor when the context is reset, because clearing the image buffer
        does the same thing. We can also skip the notification if we did not
        have an image buffer at the time of the reset, because the reset will
        not have any visual impact in this case. Finally, if the canvas size
        did change, the notification is also unnecessary because of the call
        to RenderObject::repaint() from HTMLCanvasElement::reset().

2012-03-22  Martin Robinson  <mrobinson@igalia.com>

        Fix some code generation warnings on GTK+.

        Reviewed by Gustavo Noronha Silva.

        No new tests. This just fixes warnings.

        * GNUmakefile.am: Remove nonexistent directories from the list IDL directories.

2012-03-23  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r111751.
        http://trac.webkit.org/changeset/111751
        https://bugs.webkit.org/show_bug.cgi?id=82060

        caused 15% page cycler regression for chromium-linux
        (Requested by eae on #webkit).

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

2012-03-23  Kentaro Hara  <haraken@chromium.org>

        Support [ImplementedAs] for attributes
        https://bugs.webkit.org/show_bug.cgi?id=81605

        Reviewed by Adam Barth.

        [ImplementedAs] just supports methods. [ImplementedAs] should support
        attributes too.

        Explained here: https://trac.webkit.org/wiki/WebKitIDL#ImplementedAs

        Test: bindings/scripts/test/TestObj.idl

        * bindings/scripts/CodeGenerator.pm: Modified to support [ImplementedAs] for attributes.
        (AttributeNameForGetterAndSetter):

        * bindings/scripts/test/TestObj.idl: Added a test case.

        * bindings/scripts/test/CPP/WebDOMTestObj.cpp: Updated run-bindings-tests results.
        (WebDOMTestObj::strawberry):
        (WebDOMTestObj::setStrawberry):
        * bindings/scripts/test/CPP/WebDOMTestObj.h:
        * bindings/scripts/test/GObject/WebKitDOMTestObj.cpp:
        (webkit_dom_test_obj_get_strawberry):
        (webkit_dom_test_obj_set_strawberry):
        (webkit_dom_test_obj_get_property):
        (webkit_dom_test_obj_class_init):
        * bindings/scripts/test/GObject/WebKitDOMTestObj.h:
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore):
        (WebCore::jsTestObjStrawberry):
        (WebCore::setJSTestObjStrawberry):
        * bindings/scripts/test/JS/JSTestObj.h:
        (WebCore):
        * bindings/scripts/test/ObjC/DOMTestObj.h:
        * bindings/scripts/test/ObjC/DOMTestObj.mm:
        (-[DOMTestObj strawberry]):
        (-[DOMTestObj setStrawberry:]):
        * bindings/scripts/test/V8/V8TestObj.cpp:
        (WebCore::TestObjInternal::strawberryAttrGetter):
        (TestObjInternal):
        (WebCore::TestObjInternal::strawberryAttrSetter):
        (WebCore):

2012-03-23  Tommy Widenflycht  <tommyw@google.com>

        The JSC code generator doesn't generate correct code for Constructors
        https://bugs.webkit.org/show_bug.cgi?id=82046

        Reviewed by Kentaro Hara.

        The main bulk of generated code for constructors uses the name jsConstructor
        for the created object, and then calls GenerateParametersCheck which generates
        code that uses the name castedThis.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateConstructorDefinition):
        * bindings/scripts/test/JS/JSTestInterface.cpp:
        (WebCore::JSTestInterfaceConstructor::constructJSTestInterface):
        * bindings/scripts/test/JS/JSTestNamedConstructor.cpp:
        (WebCore::JSTestNamedConstructorNamedConstructor::constructJSTestNamedConstructor):
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::JSTestObjConstructor::finishCreation):
        (WebCore::JSTestObjConstructor::constructJSTestObj):
        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp:
        (WebCore::JSTestSerializedScriptValueInterfaceConstructor::constructJSTestSerializedScriptValueInterface):
        * bindings/scripts/test/TestObj.idl:
        * bindings/scripts/test/V8/V8TestObj.cpp:
        (WebCore::V8TestObj::constructorCallback):

2012-03-23  Tommy Widenflycht  <tommyw@google.com>

        The JSC code generator can't handle boolean arguments for Callbacks
        https://bugs.webkit.org/show_bug.cgi?id=82045

        Reviewed by Kentaro Hara.

        CodeGeneratorJS.pm only handles DOMStrings and objects as arguments
        for a Callback, so I added support for boolean values as well.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateCallbackImplementation):
        * bindings/scripts/test/CPP/WebDOMTestCallback.cpp:
        (WebDOMTestCallback::callbackWithBoolean):
        * bindings/scripts/test/CPP/WebDOMTestCallback.h:
        (WebDOMTestCallback):
        * bindings/scripts/test/GObject/WebKitDOMTestCallback.cpp:
        (webkit_dom_test_callback_callback_with_boolean):
        * bindings/scripts/test/GObject/WebKitDOMTestCallback.h:
        * bindings/scripts/test/JS/JSTestCallback.cpp:
        (WebCore::JSTestCallback::callbackWithBoolean):
        (WebCore):
        * bindings/scripts/test/JS/JSTestCallback.h:
        (JSTestCallback):
        * bindings/scripts/test/ObjC/DOMTestCallback.h:
        * bindings/scripts/test/ObjC/DOMTestCallback.mm:
        (-[DOMTestCallback callbackWithBoolean:]):
        * bindings/scripts/test/TestCallback.idl:
        * bindings/scripts/test/V8/V8TestCallback.cpp:
        (WebCore::V8TestCallback::callbackWithBoolean):
        (WebCore):
        * bindings/scripts/test/V8/V8TestCallback.h:
        (V8TestCallback):

2012-03-23  Allan Sandfeld Jensen  <allan.jensen@nokia.com>

        Touch adjustment forgets some subtarget quads.
        https://bugs.webkit.org/show_bug.cgi?id=82044

        Reviewed by Kenneth Rohde Christiansen.

        Do not uncritically skip all nodes that are ancestors to other test results.
        Instead return the inner-most element if multiple nodes have the same distance.

        Test: touchadjustment/block-testing.html

        * page/TouchAdjustment.cpp:
        (WebCore::TouchAdjustment::compileSubtargetList):
        (WebCore::TouchAdjustment::findNodeWithLowestDistanceMetric):

2012-03-23  Allan Sandfeld Jensen  <allan.jensen@nokia.com>

        TouchAdjustment does not correct for frame position
        https://bugs.webkit.org/show_bug.cgi?id=82043

        Reviewed by Kenneth Rohde Christiansen.

        Convert geometry to window coordinates before calculating distance.

        Test: touchadjustment/iframe.html

        * page/TouchAdjustment.cpp:
        (WebCore::TouchAdjustment::distanceSquaredToTargetCenterLine):

2012-03-23  Vlad Voicu  <vladv@rosedu.org>

        Fixed minor WebInspector display issue
        Clicking on disabled sections in Styles Sidebar Pane creates new elements.
        https://bugs.webkit.org/show_bug.cgi?id=81925

        Reviewed by Timothy Hatcher

        No new tests should be required.

        * inspector/front-end/StylesSidebarPane.js:
        (WebInspector.StylePropertiesSection.prototype._handleEmptySpaceClick):
        (WebInspector.StylePropertyTreeElement.prototype):

2012-03-23  Kentaro Hara  <haraken@chromium.org>

        Unreviewed, rebaselined run-bindings-tests results.

        * bindings/scripts/test/CPP/WebDOMTestObj.cpp:
        * bindings/scripts/test/CPP/WebDOMTestObj.h:
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::jsTestObjPrototypeFunctionMethodWithCallbackArg):
        (WebCore::jsTestObjPrototypeFunctionMethodWithNonCallbackArgAndCallbackArg):
        (WebCore::jsTestObjPrototypeFunctionMethodWithCallbackAndOptionalArg):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethod5):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethod):
        * bindings/scripts/test/V8/V8TestObj.cpp:
        (WebCore::TestObjInternal::methodWithCallbackArgCallback):
        (WebCore::TestObjInternal::methodWithNonCallbackArgAndCallbackArgCallback):
        (WebCore::TestObjInternal::methodWithCallbackAndOptionalArgCallback):
        (WebCore::TestObjInternal::overloadedMethod5Callback):
        (WebCore::TestObjInternal::overloadedMethodCallback):

2012-03-23  Ryosuke Niwa  <rniwa@webkit.org>

        cssText should use StringBuilder
        https://bugs.webkit.org/show_bug.cgi?id=82028

        Reviewed by Hajime Morita.

        Make StylePropertySet::asText more efficient by deploying StringBuilder;
        avoids heap churn by String::operator+ and String::operator+=.

        * css/StylePropertySet.cpp:
        (WebCore::StylePropertySet::asText):

2012-03-23  Ryosuke Niwa  <rniwa@webkit.org>

        REGRESSION(r111754): plugins/reloadplugins-and-pages.html fails on all platforms
        https://bugs.webkit.org/show_bug.cgi?id=82035

        Rollout r111754 since it caused a test to fail and the test added by the patch
        is failing on Mac WebKit 2.

        * WebCore.exp.in:
        * html/HTMLPlugInElement.cpp:
        (WebCore::HTMLPlugInElement::detach):
        (WebCore):
        (WebCore::HTMLPlugInElement::removedFromDocument):
        * html/HTMLPlugInElement.h:
        (HTMLPlugInElement):
        * testing/Internals.cpp:
        * testing/Internals.h:
        (Internals):
        * testing/Internals.idl:

2012-03-23  Adam Barth  <abarth@webkit.org>

        Move Notifications APIs from DOMWindow.idl to DOMWindowNotifications.idl (Part 2)
        https://bugs.webkit.org/show_bug.cgi?id=82026

        Reviewed by Kentaro Hara.

        This patch removes DOMWindow::resetNotifications, which was unneeded
        special-case logic for clearing the notifications center.  The previous
        patch that tried to accomplish the same thing did not override
        willDetachPage, which is why it caused crashes.

        There's actually a cleaner way to handle these cases, which will let us
        implement reconnectFrame, but that will need to wait for the next
        patch.

        * notifications/DOMWindowNotifications.cpp:
        (WebCore::DOMWindowNotifications::DOMWindowNotifications):
        (WebCore::DOMWindowNotifications::from):
        (WebCore::DOMWindowNotifications::webkitNotifications):
        (WebCore):
        (WebCore::DOMWindowNotifications::disconnectFrame):
        (WebCore::DOMWindowNotifications::willDetachPage):
        (WebCore::DOMWindowNotifications::reset):
        * notifications/DOMWindowNotifications.h:
        (DOMWindowNotifications):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::willDetachPage):
        (WebCore::DOMWindow::disconnectDOMWindowProperties):
        (WebCore::DOMWindow::clearDOMWindowProperties):
        * page/DOMWindow.h:
        (DOMWindow):
        * page/Frame.cpp:
        (WebCore::Frame::willDetachPage):

2012-03-22  Adam Barth  <abarth@webkit.org>

        Move Notifications APIs from DOMWindow.idl to DOMWindowNotifications.idl (Part 1)
        https://bugs.webkit.org/show_bug.cgi?id=82015

        Reviewed by Kentaro Hara.

        This patch moves DOMWindow.webkitNotifications from DOMWindow.idl to
        DOMWindowNotificiations.idl in preparation for moving notificiations
        into Modules.

        A future patch will remove DOMWindow::resetNotificaitions in favor of
        more general mechanisms.

        * CMakeLists.txt:
        * DerivedSources.make:
        * DerivedSources.pri:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * notifications/DOMWindowNotifications.cpp: Added.
        (WebCore):
        (WebCore::DOMWindowNotifications::DOMWindowNotifications):
        (WebCore::DOMWindowNotifications::~DOMWindowNotifications):
        (WebCore::DOMWindowNotifications::from):
        (WebCore::DOMWindowNotifications::webkitNotifications):
        (WebCore::DOMWindowNotifications::reset):
        (WebCore::DOMWindowNotifications::supplementName):
        * notifications/DOMWindowNotifications.h: Added.
        (WebCore):
        (DOMWindowNotifications):
        * notifications/DOMWindowNotifications.idl: Added.
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::~DOMWindow):
        (WebCore):
        (WebCore::DOMWindow::resetNotifications):
        * page/DOMWindow.h:
        (WebCore):
        (DOMWindow):
        * page/DOMWindow.idl:

2012-03-22  Li Yin  <li.yin@intel.com>

        A client MUST close a connection if it detects a masked frame
        https://bugs.webkit.org/show_bug.cgi?id=81361

        Reviewed by Kent Tamura.

        A server must not mask any frames that it sends to the client.
        Change the test case, not mask the frames from server to client.
        
        Test: http/tests/websocket/tests/hybi/invalid-masked-frames-from-server.html

        * Modules/websockets/WebSocketChannel.cpp:
        (WebCore::WebSocketChannel::processFrame):

2012-03-22  Li Yin  <li.yin@intel.com>

        [WebSocket]The minimal number of bytes MUST be used to encode the length
        https://bugs.webkit.org/show_bug.cgi?id=81443

        Reviewed by Kent Tamura.

        From RFC 6455 http://tools.ietf.org/html/rfc6455#section-5.2
        the minimal number of bytes MUST be used to encode the length
        
        New test case : http/tests/websocket/tests/hybi/invalid-encode-length.html

        * Modules/websockets/WebSocketChannel.cpp:
        (WebCore::WebSocketChannel::parseFrame):

2012-03-22  Adam Barth  <abarth@webkit.org>

        Unreviewed.  Sort xcodeproj file.

        * WebCore.xcodeproj/project.pbxproj:

2012-03-22  Mao Yujie  <yujie.mao@intel.com>

        Implement strict testing criterion for callback function definition
        https://bugs.webkit.org/show_bug.cgi?id=80005

        Reviewed by Adam Barth.

        Callback function should be defined as the function type instead of
        the object type.

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

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateParametersCheckExpression):
        (GenerateParametersCheck):
        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateParametersCheckExpression):
        (GenerateParametersCheck):

2012-03-22  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Convert hasGrammarMarker to use Internals interface
        https://bugs.webkit.org/show_bug.cgi?id=82004

        Reviewed by Ryosuke Niwa.

        Remove hasGrammarMarker functions, because it is able to work in the
        cross-port way through the Internals interface.

        No new tests, since we are improving here the infra-structure
        for testing a specific method.

        * testing/Internals.cpp:
        (WebCore::Internals::hasGrammarMarker):
        (WebCore):
        * testing/Internals.h:
        (Internals):
        * testing/Internals.idl:

2012-03-22  Xingnan Wang  <xingnan.wang@intel.com>

        Add exception for the setter of "fftSize" in RealtimeAnalyserNode
        https://bugs.webkit.org/show_bug.cgi?id=81748

        Reviewed by Chris Rogers.

        * Modules/webaudio/RealtimeAnalyser.cpp:
        (WebCore::RealtimeAnalyser::setFftSize):
        * Modules/webaudio/RealtimeAnalyser.h:
        (RealtimeAnalyser):
        * Modules/webaudio/RealtimeAnalyserNode.cpp:
        (WebCore::RealtimeAnalyserNode::setFftSize):
        (WebCore):
        * Modules/webaudio/RealtimeAnalyserNode.h:
        (RealtimeAnalyserNode):
        * Modules/webaudio/RealtimeAnalyserNode.idl:

2012-03-22  Leo Yang  <leo.yang@torchmobile.com.cn>

        [BlackBerry] Add HistoryItemViewState for BlackBerry port
        https://bugs.webkit.org/show_bug.cgi?id=81867

        Reviewed by Rob Buis.

        HistoryItemViewState is the blackberry specific field of HistoryItem.
        It's used to maintain the porting specific view state.

        No new test because the port can't be built yet.

        * history/HistoryItem.h:
        (HistoryItem):
        (WebCore::HistoryItem::viewState):

2012-03-22  SravanKumar Sandela  <ssandela@innominds.com>

        Fieldset unexpectedly stretches to minimum intrinsic width
        https://bugs.webkit.org/show_bug.cgi?id=79128

        Reviewed by Julien Chaffraix.

        Fieldset element width will now check if css width is specified explicitly
        before stretching to minimum intrinsic width. The reference
        can be taken from IE9, instead of FF(FF acknowledged the broken behavior). 

        Tests: fast/forms/fieldset-width-nostretch-ifspecified-expected.html
               fast/forms/fieldset-width-nostretch-ifspecified.html

        * rendering/RenderFieldset.cpp:
        (WebCore::RenderFieldset::stretchesToMinIntrinsicLogicalWidth):
        (WebCore):
        * rendering/RenderFieldset.h:
        (RenderFieldset):

2012-03-22  Shawn Singh  <shawnsingh@chromium.org>

        [chromium] Target surface should be damaged for a new layers even when layer had no changes
        https://bugs.webkit.org/show_bug.cgi?id=81879

        Reviewed by Adrienne Walker.

        Unit test added to CCDamageTrackerTest.

        * platform/graphics/chromium/cc/CCDamageTracker.cpp:
        (WebCore::CCDamageTracker::removeRectFromCurrentFrame): added a
        boolean arg to detect if the layer is new on this update.

        (WebCore::CCDamageTracker::extendDamageForLayer): added logic that
        damages the target surface if the layer is new.

        (WebCore::CCDamageTracker::extendDamageForRenderSurface): added
        logic that damages the target surface if the descendant surface is
        new; similar logic for the surface's replica if the replica is new.

        * platform/graphics/chromium/cc/CCDamageTracker.h:
        (CCDamageTracker):

2012-03-22  Charles Wei  <charles.wei@torchmobile.com.cn>

        [BlackBerry] Need to store the meta info of a page in the ViewState of the history
        https://bugs.webkit.org/show_bug.cgi?id=82000

        Reviewed by Rob Buis.

        Internally reviewed by George Staikos.

        No new tests, BlackBerry porting doesn't build yet upstreaming.

        * history/blackberry/HistoryItemViewState.h:
        (WebCore::HistoryItemViewState::HistoryItemViewState):
        (HistoryItemViewState):

2012-03-22  Adam Klein  <adamk@chromium.org>

        [v8] wrapSlow methods should ref underlying object before creating wrapper
        https://bugs.webkit.org/show_bug.cgi?id=81919

        Reviewed by Adam Barth.

        Because instatiating the wrapper can trigger GC, it's important that
        wrapSlow() hold a reference to an object when creating a wrapper for
        that object. Once the V8 wrapper exists and is associated with the object,
        the reference can be handed off (via leakRef) to be handled by the normal
        binding code logic (where derefObject is called if the handle is GCed).

        Binding tests have been updated to reflect this change.

        Testing the change directly is hard. Any test landed today would only
        be a valid test until V8's logic about when to GC changes, at which point
        it would become dead weight. So I don't think it's worth landing a
        layout test along with this.

        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateHeader): Make wrapSlow take a PassRefPtr for RefCounted objects.
        (GenerateToV8Converters): Get rid of the explicit call to ref() and
        instead call leakRef() when adding a RefCounted object to the DOM map.
        (GetPassRefPtrType): Helper to generate "PassRefPtr<T>", or "PassRefPtr<T<U> >" as appropriate.
        * bindings/scripts/test/V8/V8Float64Array.cpp:
        (WebCore::V8Float64Array::wrapSlow):
        * bindings/scripts/test/V8/V8Float64Array.h:
        (V8Float64Array):
        * bindings/scripts/test/V8/V8TestActiveDOMObject.cpp:
        (WebCore::V8TestActiveDOMObject::wrapSlow):
        * bindings/scripts/test/V8/V8TestActiveDOMObject.h:
        (V8TestActiveDOMObject):
        * bindings/scripts/test/V8/V8TestCustomNamedGetter.cpp:
        (WebCore::V8TestCustomNamedGetter::wrapSlow):
        * bindings/scripts/test/V8/V8TestCustomNamedGetter.h:
        (V8TestCustomNamedGetter):
        * bindings/scripts/test/V8/V8TestEventConstructor.cpp:
        (WebCore::V8TestEventConstructor::wrapSlow):
        * bindings/scripts/test/V8/V8TestEventConstructor.h:
        (V8TestEventConstructor):
        * bindings/scripts/test/V8/V8TestEventTarget.cpp:
        (WebCore::V8TestEventTarget::wrapSlow):
        * bindings/scripts/test/V8/V8TestEventTarget.h:
        (V8TestEventTarget):
        * bindings/scripts/test/V8/V8TestInterface.cpp:
        (WebCore::V8TestInterface::wrapSlow):
        * bindings/scripts/test/V8/V8TestInterface.h:
        (V8TestInterface):
        * bindings/scripts/test/V8/V8TestMediaQueryListListener.cpp:
        (WebCore::V8TestMediaQueryListListener::wrapSlow):
        * bindings/scripts/test/V8/V8TestMediaQueryListListener.h:
        (V8TestMediaQueryListListener):
        * bindings/scripts/test/V8/V8TestNamedConstructor.cpp:
        (WebCore::V8TestNamedConstructor::wrapSlow):
        * bindings/scripts/test/V8/V8TestNamedConstructor.h:
        (V8TestNamedConstructor):
        * bindings/scripts/test/V8/V8TestObj.cpp:
        (WebCore::V8TestObj::wrapSlow):
        * bindings/scripts/test/V8/V8TestObj.h:
        (V8TestObj):
        * bindings/scripts/test/V8/V8TestSerializedScriptValueInterface.cpp:
        (WebCore::V8TestSerializedScriptValueInterface::wrapSlow):
        * bindings/scripts/test/V8/V8TestSerializedScriptValueInterface.h:
        (V8TestSerializedScriptValueInterface):

2012-03-22  Jonathan Dong  <jonathan.dong@torchmobile.com.cn>

        [BlackBerry] add interface clearCredentials() and clearNeverRememberSites()
        https://bugs.webkit.org/show_bug.cgi?id=81887

        Reviewed by Rob Buis.

        Fixed SQL issue when clearing table logins and table never_remember.

        No new tests.

        * platform/network/blackberry/CredentialBackingStore.cpp:
        (WebCore::CredentialBackingStore::clearLogins):
        (WebCore::CredentialBackingStore::clearNeverRemember):

2012-03-22  Jonathan Dong  <jonathan.dong@torchmobile.com.cn>

        [BlackBerry] http authenticate dialog popup only once no matter authentication pass or fail
        https://bugs.webkit.org/show_bug.cgi?id=80135

        Reviewed by Rob Buis.

        Modified the interface function authenticationChallenge() in class
        PageClientBlackBerry, moved Credential from return value to the
        function's reference parameter, and returned a bool to indicate if
        user pressed Ok button or not.
        Removed the logic which checks m_currentWebChallenge not null,
        because we should challenge user again if the last provided credential
        is not valid; also added the logic that will popup challenge
        dialog again immediately if user press Ok buttton directly without
        inputting anything.

        No new tests.

        * platform/blackberry/PageClientBlackBerry.h:
        * platform/network/blackberry/NetworkJob.cpp:
        (WebCore::NetworkJob::handleAuthHeader):
        (WebCore::NetworkJob::sendRequestWithCredentials):

2012-03-22  Jason Liu  <jason.liu@torchmobile.com.cn>

        [BlackBerry] Synchronize platform/network/blackberry
        https://bugs.webkit.org/show_bug.cgi?id=81874

        We changed a lot in these files locally. But the changes are not upstreamed.
        It is not convenient to do the other upstreaming work based on these differences.
        So upstream these changes.

        Reviewed by Rob Buis.

        No new tests. Just synchronize codes.

        * platform/network/blackberry/NetworkJob.cpp:
        (WebCore::NetworkJob::NetworkJob):
        (WebCore::NetworkJob::initialize):
        (WebCore::NetworkJob::handleNotifyHeaderReceived):
        (WebCore::NetworkJob::handleNotifyDataReceived):
        (WebCore::NetworkJob::sendResponseIfNeeded):
        (WebCore::NetworkJob::sendRequestWithCredentials):
        (WebCore::NetworkJob::handleAbout):
        * platform/network/blackberry/NetworkJob.h:
        (WebCore::NetworkJob::isError):
        (NetworkJob):
        * platform/network/blackberry/NetworkManager.cpp:
        (WebCore::NetworkManager::startJob):
        * platform/network/blackberry/ResourceRequest.h:
        (WebCore::ResourceRequest::ResourceRequest):
        * platform/network/blackberry/ResourceRequestBlackBerry.cpp:
        (WebCore::platformTargetTypeForRequest):

2012-03-22  Tom Sepez  <tsepez@chromium.org>

        XSS Auditor bypass via script tag src=data:, URLS.
        https://bugs.webkit.org/show_bug.cgi?id=81948

        Reviewed by Adam Barth.

        This change fixes an XSSAuditor bypass wherby a script with a data: URL src
        attribute could evade detection by using characters from the page to create
        a snippet for matching not found in the URL's reflected vector.  This change 
        terminates the snippet for matching earlier in these cases.
        
        Test: http/tests/security/xssAuditor/script-tag-with-source-data-url2.html

        * html/parser/XSSAuditor.cpp:
        (WebCore::XSSAuditor::decodedSnippetForAttribute):

2012-03-22  Dana Jansens  <danakj@chromium.org>

        [chromium] Incorrect assert on animating opacity for a surface
        https://bugs.webkit.org/show_bug.cgi?id=81994

        Reviewed by Adrienne Walker.

        Draw opacity and animation state match on the surface itself. A
        surface with animating opacity always has an owning layer without
        animation, as the surface does the animation for it.

        * platform/graphics/chromium/cc/CCLayerTreeHost.cpp:
        (WebCore::CCLayerTreeHost::paintLayerContents):

2012-03-22  Dana Jansens  <danakj@chromium.org>

        [chromium] Skip frames when checkerboarding an animation
        https://bugs.webkit.org/show_bug.cgi?id=81716

        Reviewed by Adrienne Walker.

        This will stop drawing frames when prepareToDraw fails, if the draw is
        not forced. The expected behaviour is outlined below by the unit tests.

        When a draw fails, we:
        1. Set m_needsRedraw to try again next vsync
        2. Set m_needsCommit because we need more data from webkit to succeed
        3. Set m_drawIfPossibleFailed. This allows us to try draw again within
        the same vsync *if* a commit finishes during this time.

        Unit test: CCSchedulerTest.RequestRedrawInsideFailedDraw
                   CCSchedulerTest.RequestCommitInsideFailedDraw
                   CCSchedulerTest.NoBeginFrameWhenDrawFails
                   CCSchedulerStateMachineTest.TestFailedDrawSetsNeedsCommitAndDoesNotDrawAgain
                   CCSchedulerStateMachineTest.TestSetNeedsRedrawDuringFailedDrawDoesNotRemoveNeedsRedraw
                   CCSchedulerStateMachineTest.TestCommitAfterFailedDrawAllowsDrawInSameFrame
                   CCSchedulerStateMachineTest.TestCommitAfterFailedAndSuccessfulDrawDoesNotAllowDrawInSameFrame
                   CCSchedulerStateMachineTest.TestFailedDrawIsRetriedNextVSync

        * platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:
        (WebCore::CCLayerTreeHostImpl::calculateRenderPasses):
        (WebCore::CCLayerTreeHostImpl::prepareToDraw):
        * platform/graphics/chromium/cc/CCLayerTreeHostImpl.h:
        (CCLayerTreeHostImpl):
        * platform/graphics/chromium/cc/CCScheduler.cpp:
        (WebCore::CCScheduler::processScheduledActions):
        * platform/graphics/chromium/cc/CCScheduler.h:
        (CCSchedulerClient):
        * platform/graphics/chromium/cc/CCSchedulerStateMachine.cpp:
        (WebCore::CCSchedulerStateMachine::CCSchedulerStateMachine):
        (WebCore::CCSchedulerStateMachine::nextAction):
        (WebCore::CCSchedulerStateMachine::updateState):
        (WebCore::CCSchedulerStateMachine::didDrawIfPossibleCompleted):
        (WebCore):
        * platform/graphics/chromium/cc/CCSchedulerStateMachine.h:
        (CCSchedulerStateMachine):
        * platform/graphics/chromium/cc/CCThreadProxy.cpp:
        (WebCore::CCThreadProxy::scheduledActionDrawAndSwapInternal):
        (WebCore):
        (WebCore::CCThreadProxy::scheduledActionDrawAndSwapIfPossible):
        (WebCore::CCThreadProxy::scheduledActionDrawAndSwapForced):
        * platform/graphics/chromium/cc/CCThreadProxy.h:
        (CCThreadProxy):

2012-03-22  W. James MacLean  <wjmaclean@chromium.org>

        [chromium] Force update of nonFastScrollableRegion if target CCLayerImpl has been freshly created.
        https://bugs.webkit.org/show_bug.cgi?id=81968

        Reviewed by Adrienne Walker.

        Added unit test to existing tests for TreeSynchronizer.

        When creating a new CCLayerImpl during tree synchronization, make sure we transfer the nonFastScrollableRegion as
        the new CCLayerImpl will default to an empty region.

        * platform/graphics/chromium/LayerChromium.h:
        (WebCore::LayerChromium::nonFastScrollableRegion):
        (WebCore::LayerChromium::setNonFastScrollableRegionChanged):
        * platform/graphics/chromium/TreeSynchronizer.cpp:
        (WebCore::TreeSynchronizer::reuseOrCreateCCLayerImpl):

2012-03-22  Raphael Kubo da Costa  <rakuco@FreeBSD.org>

        [CMake] Unreviewed build fix after r111778.

        * CMakeLists.txt: Replace ${JAVASCRIPTCORE_DIR}/wtf includes with
        ${WTF_DIR}/wtf ones.

2012-03-22  Tony Chang  <tony@chromium.org>

        Unreviewed, fix chromium build after wtf move.

        Only use newwtf, remove references to wtf.

        * WebCore.gyp/WebCore.gyp:

2012-03-22  Benjamin Poulain  <bpoulain@apple.com>

        Remove an obsolete comment regarding magic frames from Geolocation
        https://bugs.webkit.org/show_bug.cgi?id=81871

        Reviewed by Alexey Proskuryakov.

        Moving a frame into another document is no longer possible after r111361. The comment
        is now irrelevant.

        * Modules/geolocation/Geolocation.cpp:
        (WebCore::Geolocation::stop):

2012-03-22  Csaba Osztrogonác  <ossy@webkit.org>

        Actually move WTF files to their new home
        https://bugs.webkit.org/show_bug.cgi?id=81844

        [Qt] Unreviewed buildfix after r111778.

        * Target.pri:

2012-03-22  Kentaro Hara  <haraken@chromium.org>

        run-bindings-tests output a lot of errors in TestSerializedScriptValueInterface.idl
        https://bugs.webkit.org/show_bug.cgi?id=81852

        Reviewed by Adam Barth.

        run-bindings-tests output a lot of errors in TestSerializedScriptValueInterface.idl:

        Use of uninitialized value in string eq at WebCore/bindings/scripts/CodeGeneratorJS.pm line 2743.
        Use of uninitialized value $name in substitution (s///) at WebCore/bindings/scripts/CodeGenerator.pm line 119.
        Use of uninitialized value $type in string eq at WebCore/bindings/scripts/CodeGeneratorJS.pm line 2969.
        Use of uninitialized value $type in string eq at WebCore/bindings/scripts/CodeGeneratorJS.pm line 2972.
        Use of uninitialized value $type in hash element at WebCore/bindings/scripts/CodeGenerator.pm line 367.
        Use of uninitialized value $type in hash element at WebCore/bindings/scripts/CodeGenerator.pm line 368.
        ...

        This is because [Constructor(...)] does not yet support [Optional] arguments.
        It just supports [Optional=DefaultIsUndefined] and [Optional=DefaultIsNullString] arguments:
        https://trac.webkit.org/wiki/WebKitIDL#Constructor

        This patch replaces [Optional] with [Optional=DefaultIsUndefined]
        in TestSerializedScriptValueInterface.idl.

        Test: bindings/scripts/test/TestSerializedScriptValueInterface.idl

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateConstructorDefinition):
        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateConstructorCallback):
        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp:
        (WebCore::JSTestSerializedScriptValueInterfaceConstructor::constructJSTestSerializedScriptValueInterface):
        * bindings/scripts/test/TestSerializedScriptValueInterface.idl:
        * bindings/scripts/test/V8/V8TestSerializedScriptValueInterface.cpp:
        (WebCore::V8TestSerializedScriptValueInterface::constructorCallback):

2012-03-22  Michal Mocny  <mmocny@google.com>

        [chromium] LayerRendererChromium should use GpuMemoryAllocationChanged callback to explicitly manage framebuffer.
        https://bugs.webkit.org/show_bug.cgi?id=81823

        Reviewed by Adrienne Walker.

        New UnitTests: LayerRendererChromiumTest

        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (LayerRendererGpuMemoryAllocationChangedCallbackAdapter):
        (WebCore::LayerRendererGpuMemoryAllocationChangedCallbackAdapter::create):
        (WebCore::LayerRendererGpuMemoryAllocationChangedCallbackAdapter::~LayerRendererGpuMemoryAllocationChangedCallbackAdapter):
        (WebCore::LayerRendererGpuMemoryAllocationChangedCallbackAdapter::onGpuMemoryAllocationChanged):
        (WebCore::LayerRendererGpuMemoryAllocationChangedCallbackAdapter::LayerRendererGpuMemoryAllocationChangedCallbackAdapter):
        (WebCore):
        (WebCore::LayerRendererChromium::LayerRendererChromium):
        (WebCore::LayerRendererChromium::initialize):
        (WebCore::LayerRendererChromium::~LayerRendererChromium):
        (WebCore::LayerRendererChromium::setVisible):
        (WebCore::LayerRendererChromium::swapBuffers):
        (WebCore::LayerRendererChromium::discardFramebuffer):
        (WebCore::LayerRendererChromium::ensureFramebuffer):
        * platform/graphics/chromium/LayerRendererChromium.h:
        (WebCore):
        (LayerRendererChromiumClient):
        (LayerRendererChromium):
        (WebCore::LayerRendererChromium::isFramebufferDiscarded):
        (ScopedEnsureFramebufferAllocation):
        (WebCore::ScopedEnsureFramebufferAllocation::ScopedEnsureFramebufferAllocation):
        (WebCore::ScopedEnsureFramebufferAllocation::~ScopedEnsureFramebufferAllocation):
        * platform/graphics/chromium/cc/CCLayerTreeHost.h:
        (WebCore::LayerRendererCapabilities::LayerRendererCapabilities):
        (LayerRendererCapabilities):
        * platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:
        (WebCore::CCLayerTreeHostImpl::setVisible):
        * platform/graphics/chromium/cc/CCLayerTreeHostImpl.h:
        (CCLayerTreeHostImpl):
        * platform/graphics/chromium/cc/CCSingleThreadProxy.cpp:
        (WebCore::CCSingleThreadProxy::compositeAndReadback):
        * platform/graphics/chromium/cc/CCThreadProxy.cpp:
        (WebCore::CCThreadProxy::compositeAndReadback):

2012-03-22  Adam Barth  <abarth@webkit.org>

        ContainerNode::insertedIntoTree and removedFromTree use weak iteration patterns
        https://bugs.webkit.org/show_bug.cgi?id=80570

        Reviewed by Ryosuke Niwa.

        These functions use weak iteration patterns, but as far as I can tell,
        we never execute script below these functions.  This patch adds ASSERTs
        to help us avoid adding events in the future.

        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::insertedIntoTree):
        (WebCore::ContainerNode::removedFromTree):
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::loadInternal):
            - There's a somewhat complex call chain from insertedIntoTree into
              HTMLMediaElement, and somewhat complex control flow below
              loadInternal that eventually leads to the BeforeLoad event being
              fired.  In studying this code, I don't see a way for the
              BeforeLoad event to be fired during insertedIntoTree, but I've
              added this assert here to make sure we don't call loadInternal
              when we're not supposed to dispatch events.  This ASSERT should
              help us catch these BeforeLoad errors more quickly.

2012-03-22  Raphael Kubo da Costa  <rakuco@FreeBSD.org>

        Crash in fast/dom/navigator-detached-nocrash.html
        https://bugs.webkit.org/show_bug.cgi?id=81773

        Reviewed by Adam Barth.

        BatteryManager::create() blindly assumes the Navigator* it
        receives has a valid Frame, which is not always the case, as made
        evident by the crashing test.

        Follow abarth's suggestion and just stop
        NavigatorBattery::webkitBattery() before it reaches the call to
        BatteryManager::create() if that's the case.

        No new tests, covered by fast/dom/navigator-detached-nocrash.html.

        * Modules/battery/NavigatorBattery.cpp:
        (WebCore::NavigatorBattery::webkitBattery):

2012-03-22  Emil A Eklund  <eae@chromium.org>

        Unreviewed, add missing include statement for CSSValueList.h.

        * css/CSSStyleSelector.h:

2012-03-22  Tony Chang  <tony@chromium.org>

        flexbox flexing implementation should match the spec
        https://bugs.webkit.org/show_bug.cgi?id=70796

        Reviewed by Ojan Vafai.

        Match the algorithm in the spec. Handling min/max constraints are slightly improved.
        http://dev.w3.org/csswg/css3-flexbox/#resolve-the-flexible-lengths

        New test cases in css3/flexbox/flex-algorithm-min-max.html.

        * rendering/RenderFlexibleBox.cpp:
        (WebCore::adjustFlexSizeForMinAndMax): Step 5 of resolving flexible lengths.
        (WebCore):
        (WebCore::RenderFlexibleBox::Violation::Violation):
        (RenderFlexibleBox::Violation):
        (WebCore::RenderFlexibleBox::freezeViolations): Used by step 6.
        (WebCore::RenderFlexibleBox::resolveFlexibleLengths):
        * rendering/RenderFlexibleBox.h:

2012-03-22  Emil A Eklund  <eae@chromium.org>

        Unreviewed, add missing import.

        * rendering/RenderThemeMac.mm:

2012-03-22  Anders Carlsson  <andersca@apple.com>

        ASSERT(!needsLayout) in RenderView.cpp when visiting http://www.panic.com/blog/
        https://bugs.webkit.org/show_bug.cgi?id=81953
        <rdar://problem/11086998>

        Reviewed by Sam Weinig.

        If a page ends up creating CATiledLayers, CA transactions can be committed outside of the normal
        CA run loop observer, so we can't call setNeedsDisplay on tile cache layers directly because then
        we'll end up calling into painting code before all the layers have been flushed.

        Fix this by adding a list of dirty rects to platformCALayerDidCreateTiles and change GraphicsLayerCA to
        mark them as dirty. This ensures that any CA transaction commits won't cause newly added layers to be painted.

        * platform/graphics/avfoundation/cf/MediaPlayerPrivateAVFoundationCF.cpp:
        (WebCore::LayerClient::platformCALayerDidCreateTiles):
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::platformCALayerDidCreateTiles):
        * platform/graphics/ca/GraphicsLayerCA.h:
        (GraphicsLayerCA):
        * platform/graphics/ca/PlatformCALayerClient.h:
        (PlatformCALayerClient):
        * platform/graphics/ca/mac/TileCache.mm:
        (WebCore::TileCache::setScale):
        (WebCore::TileCache::revalidateTiles):
        * platform/graphics/win/MediaPlayerPrivateQuickTimeVisualContext.cpp:
        (WebCore::MediaPlayerPrivateQuickTimeVisualContext::LayerClient::platformCALayerDidCreateTiles):

2012-03-19  Robert Hogan  <robert@webkit.org>

        Text should overflow when list item height set to 0
        https://bugs.webkit.org/show_bug.cgi?id=78726

        Reviewed by Julien Chaffraix.

        Tests: css2.1/20110323/height-applies-to-010a-expected.html
               fast/css/heightless-list-item-expected.html
               fast/css/heightless-list-item.html

        * rendering/RenderListItem.cpp:
        (WebCore::RenderListItem::paint):
           If the list item has height:0, only paint it if the list item allows any block or inline content 
           to overflow unclipped. The zero-height check is a shortcut to avoid unnecessary painting and 
           this seems to be the only case where there's something to do.

2012-03-22  Dave Michael  <dmichael@chromium.org>

        HTMLPluginElement is not destroyed on reload or navigation if getNPObject is called
        https://bugs.webkit.org/show_bug.cgi?id=80428

        Reviewed by Eric Seidel.

        Make HTMLPluginElement release its m_NPObject in detach() to break a
        reference-counting cycle that happens on reload or navigation. With this
        change, HTMLPlugInElement::removedFromDocument is unnecessary, so it
        was removed. Note that Releasing m_NPObject does not result in a call to
        the plugin; it simply releases a reference count on the wrapper object
        for this HTMLPlugInElement. (The plugin's NPP_Deallocate is invoked
        when the render tree is destroyed, when PluginView calls
        PluginPackage::unload.) Thus, it is safe to release m_NPObject in
        detach, because it can not result in layout or style changes.

        Also added numberOfLiveNodes() and numberOfLiveDocuments() to
        window.internals to enable testing.

        Test: plugins/netscape-dom-access-and-reload.html

        * WebCore.exp.in:
        * html/HTMLPlugInElement.cpp:
        (WebCore::HTMLPlugInElement::detach):
        * html/HTMLPlugInElement.h:
        (HTMLPlugInElement):
        * testing/Internals.cpp:
        (WebCore::Internals::numberOfLiveDocuments):
        (WebCore::Internals::numberOfLiveNodes):
        (WebCore):
        * testing/Internals.h:
        (Internals):
        * testing/Internals.idl:

2012-03-22  Shawn Singh  <shawnsingh@chromium.org>

        [chromium] Make CCDamageTracker robust to empty layer lists
        https://bugs.webkit.org/show_bug.cgi?id=81831

        Reviewed by Adrienne Walker.

        Added a unit test in CCDamageTrackerTest that causes a crash in
        the old code. With this patch applied, the crash will not occur.
        In theory, that crash should never occur anyway, unless there is a
        bug outside the damage tracker, but for robustness it's
        appropriate to handle it properly.

        In addition to this fix, performed some trivial maintenance on the
        damage tracker code.

        * platform/graphics/chromium/cc/CCDamageTracker.cpp:
        (WebCore::CCDamageTracker::updateDamageTrackingState): removed
        unclean code that accessed the targetSurface to get necessary
        information. Instead, we now pass those args through the damage
        tracker's API.

        * platform/graphics/chromium/cc/CCDamageTracker.h:
        (CCDamageTracker): modified args passed to damage tracker on update.

        * platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:
        (WebCore::CCLayerTreeHostImpl::trackDamageForAllSurfaces):
        modified args passed to damage tracker on update.

2012-03-22  Julien Chaffraix  <jchaffraix@webkit.org>

        Enable style sharing for elements with a style attribute
        https://bugs.webkit.org/show_bug.cgi?id=81523

        Reviewed by Antti Koivisto.

        Memory improvement change only.

        Overall, this is a performance wash (some benchmarks may regress a bit due to the increase in time taken
        by CSSStyleSelector::locateSharedStyle as we try more nodes, others increase their performance due to style sharing).

        Instrumenting our style sharing, this should give us some nice memory shavings on some benchmarks:
        - HTML5 isn't impacted as it doesn't use much inline style
        - page cyclers' intl1 showed a 6% increase in style sharing.

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::canShareStyleWithElement):
        This method now handles inline style like presentation attributes on the element.

        (WebCore::CSSStyleSelector::collectMatchingRulesForList):
        (WebCore::CSSStyleSelector::locateSharedStyle):
        Don't bail out for an element with an inline style declaration.

        (WebCore::CSSStyleSelector::stylesEqual):
        Generalized attributeStylesEqual to share the logic between attribute and
        inline style property set. This means that attribute checks are actually
        doing a little extra more work but that didn't impact our benchmarks.

2012-03-22  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Unreviewed. WebDOM build fix after array type changes.

        * bindings/scripts/CodeGeneratorCPP.pm:
        (ShouldSkipType):

2012-03-22  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: text gutter decorations should move upon edits.
        https://bugs.webkit.org/show_bug.cgi?id=81932

        Reviewed by Vsevolod Vlasov.

        Decorations set by the line number now shift as editing inserts / removes lines.

        * inspector/front-end/TextViewer.js:
        (WebInspector.TextViewer.prototype._syncLineHeight):
        (WebInspector.TextEditorGutterPanel):
        (WebInspector.TextEditorGutterPanel.prototype.textChanged):
        (WebInspector.TextEditorGutterPanel.prototype.syncClientHeight):
        (WebInspector.TextEditorGutterPanel.prototype.addDecoration):
        (WebInspector.TextEditorGutterPanel.prototype.removeDecoration):

2012-03-21  Robert Hogan  <robert@webkit.org>

        CSS 2.1 failure: fixed-table-layout-006 fails
        https://bugs.webkit.org/show_bug.cgi?id=78412

        Reviewed by Julien Chaffraix.

        Tests: css2.1/20110323/fixed-table-layout-006.htm
               fast/css/fixed-table-layout-cell-padding.htm

        In fixed tables, positive width specified on a column should include borders and padding.
        See the thread at http://lists.w3.org/Archives/Public/www-style/2011Oct/0502.html. The discussion
        there resulted in a whole new set of tests for section 17.5.2.1 in the CSS 2.1 spec. See 
        http://test.csswg.org/harness/test/CSS21_DEV/section/17.5.2.1/. This patch allows WebKit
        to pass all of them, and all tests for the 17.5.2.1 section as a whole. I'll land them all separately.
    
        * rendering/FixedTableLayout.cpp:
        (WebCore::FixedTableLayout::calcWidthArray): Include border width and cell padding in the width of the column.
         Note that borderAndPaddingLogicalWidth() returns the border width for separate and collapsed borders as appropriate.

2012-03-22  Simon Fraser  <simon.fraser@apple.com>

        Factor compositing layer updates after scroll into a new method
        https://bugs.webkit.org/show_bug.cgi?id=81943

        Reviewed by Dean Jackson.

        Move some code that updates compositing layers after scrolling
        into its own method, for cleanliness.

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::scrollTo):
        (WebCore::RenderLayer::updateCompositingLayersAfterScroll):
        (WebCore):
        * rendering/RenderLayer.h:
        (RenderLayer):

2012-03-22  Gavin Barraclough  <barraclough@apple.com>

        Add JSValue::isFunction
        https://bugs.webkit.org/show_bug.cgi?id=81935

        Reviewed by Geoff Garen.

        This would be useful in the WebCore bindings code.
        Also, remove asFunction, replace with jsCast<JSFunction*>.

        * bindings/js/JSInjectedScriptHostCustom.cpp:
        (WebCore::JSInjectedScriptHost::functionDetails):
        * bindings/js/ScriptCallStackFactory.cpp:
        (WebCore::createScriptCallStack):

2012-03-22  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        TiledBackingStore: Fix test regressions that appeared with r111560.
        https://bugs.webkit.org/show_bug.cgi?id=81519

        Reviewed by Kenneth Rohde Christiansen.

        The visible rect wasn't intersected with the contents rect anymore which
        could lead to an astronomical layer size to check for intersecting tiles.

        Add a visibleContentsRect that doesn't do the conversion and use it
        in visibleAreaIsCovered.

        * platform/graphics/TiledBackingStore.cpp:
        (WebCore::TiledBackingStore::visibleContentsRect):
        (WebCore):
        (WebCore::TiledBackingStore::visibleRect):
        (WebCore::TiledBackingStore::visibleAreaIsCovered):
        * platform/graphics/TiledBackingStore.h:
        (TiledBackingStore):

2012-03-22  Joe Thomas  <joethomas@motorola.com>

        Make Length Calculation functions non-inline
        https://bugs.webkit.org/show_bug.cgi?id=81733

        Currently length calculation functions in LengthFunctions.h are inline. These functions are pretty big to be inline.
        And these functions are expected to grow again when new length units will be introduced in bug 27160.

        A decent rule of thumb is to not inline a function if it is more than 10 lines long. Also it's typically not cost effective to inline
        functions with loops or switch statements. (Reference: http://google-styleguide.googlecode.com/svn/trunk/cppguide.xml#Inline_Functions).

        Ran PerformanceTests/Parser/html5-full-render.html on Mac Snow-Leopard with and without the patch and did not see much performance difference.

        Reviewed by Antti Koivisto.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * css/LengthFunctions.cpp: Added.
        (WebCore):
        (WebCore::miminumValueForLength):
        (WebCore::valueForLength):
        (WebCore::floatValueForLength):
        * css/LengthFunctions.h:
        (WebCore):

2012-03-22  Alexis Menard  <alexis.menard@openbossa.org>

        Increase code sharing between CSSParser and CSSPropertyLonghand.
        https://bugs.webkit.org/show_bug.cgi?id=81587

        Reviewed by Antti Koivisto.

        Expose the longhands declaration for a given shorthand in CSSPropertyLonghand and
        make CSSParser use them. It will make the declaration of longhands in one place only.
        Remove the map of CSSPropertyLonghand and replace it by a regular switch/case.
        The map doesn't bring much here and it's cleaner and faster to use the switch.
        It also shows a little performance improvement in CSS/CSSPropertySetterGetter.html.

        No new tests : no behavior change.

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):
        (WebCore::CSSParser::parseAnimationShorthand):
        (WebCore::CSSParser::parseTransitionShorthand):
        (WebCore::CSSParser::parseShorthand):
        Modify the prototype of this function to directly use the CSSPropertyLonghand.
        * css/CSSParser.h:
        (WebCore):
        (CSSParser):
        * css/CSSPropertyLonghand.cpp:
        (WebCore):
        (WebCore::backgroundLonghand):
        (WebCore::backgroundPositionLonghand):
        (WebCore::backgroundRepeatLonghand):
        (WebCore::borderLonghand):
        (WebCore::borderBottomLonghand):
        (WebCore::borderColorLonghand):
        (WebCore::borderImageLonghand):
        (WebCore::borderLeftLonghand):
        (WebCore::borderRadiusLonghand):
        (WebCore::borderRightLonghand):
        (WebCore::borderSpacingLonghand):
        (WebCore::borderStyleLonghand):
        (WebCore::borderTopLonghand):
        (WebCore::borderWidthLonghand):
        (WebCore::listStyleLonghand):
        (WebCore::fontLonghand):
        (WebCore::marginLonghand):
        (WebCore::outlineLonghand):
        (WebCore::overflowLonghand):
        (WebCore::paddingLonghand):
        (WebCore::webkitAnimationLonghand):
        (WebCore::webkitBorderAfterLonghand):
        (WebCore::webkitBorderBeforeLonghand):
        (WebCore::webkitBorderEndLonghand):
        (WebCore::webkitBorderStartLonghand):
        (WebCore::webkitColumnsLonghand):
        (WebCore::webkitColumnRuleLonghand):
        (WebCore::webkitFlexFlowLonghand):
        (WebCore::webkitMarginCollapseLonghand):
        (WebCore::webkitMarqueeLonghand):
        (WebCore::webkitMaskLonghand):
        (WebCore::webkitMaskPositionLonghand):
        (WebCore::webkitMaskRepeatLonghand):
        (WebCore::webkitTextEmphasisLonghand):
        (WebCore::webkitTextStrokeLonghand):
        (WebCore::webkitTransitionLonghand):
        (WebCore::webkitTransformOriginLonghand):
        (WebCore::webkitWrapLonghand):
        (WebCore::longhandForProperty):
        * css/CSSPropertyLonghand.h:
        (WebCore):

2012-03-22  Emil A Eklund  <eae@chromium.org>

        Unreviewed, touching file to force bots to pick up CSS_SHADERS flag change. 

        * css/CSSStyleSelector.h:
        (CSSStyleSelector):

2012-03-22  Xingnan Wang  <xingnan.wang@intel.com>

        ReverbConvolver::latencyFrames() should return 0.
        https://bugs.webkit.org/show_bug.cgi?id=81806

        Reviewed by Chris Rogers.

        * platform/audio/ReverbConvolver.cpp:
        (WebCore::ReverbConvolver::latencyFrames):

2012-03-22  Tony Chang  <tony@chromium.org>

        refactor flexbox in preparation for flex-line-pack
        https://bugs.webkit.org/show_bug.cgi?id=81843

        Reviewed by Ojan Vafai.

        Replace WrapReverseContext with a vector of LineContexts that contain
        the same information, plus values needed for flex-align.

        alignChildren has been moved to after all the lines have been
        positioned. We want to align children after flex-line-pack has changed
        the size of each line to avoid unnecessary layouts.

        Take 2: Remove the assert. If there are no children, then there are no
        flex lines. Instead, assert that child is not null.

        No new tests, just refactoring.

        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::LineContext::LineContext): New struct,
        holds information needed for wrap-reverse and aligning children.
        (RenderFlexibleBox::LineContext):
        (WebCore::RenderFlexibleBox::layoutFlexItems): alignChildren after layout out all the lines rather than after each line.
        (WebCore::RenderFlexibleBox::layoutAndPlaceChildren): don't alignChildren
        (WebCore::RenderFlexibleBox::alignChildren): align all flex items, not just a line at a time.
        (WebCore::RenderFlexibleBox::flipForWrapReverse): Update to use LineContext
        * rendering/RenderFlexibleBox.h:

2012-03-22  Allan Sandfeld Jensen  <allan.jensen@nokia.com>

        Event dispatching in XMLHttpRequestProgressEventThrottle should go through XMLHttpRequestProgressEventThrottle::dispatchEvent
        https://bugs.webkit.org/show_bug.cgi?id=46743

        Reviewed by Julien Chaffraix
        Based on original patch by Anton D'Auria

        In preparation for platform-specific queuing of XMLHttpRequest events,
        this patch changes all calls to m_target->dispatchEvent to
        XMLHttpRequestProgressEventThrottle::dispatchEvent.
        Currently, we queue only one progress event on suspend() if we have
        throttled progress events. We should be able to queue all XHR events
        that can be generated after suspend(), if the platform network layer
        continues to receive data.
        XMLHttpRequest uses XMLHttpRequestProgressEventThrottle to dispatch only
        download events, so this doesn't change behavior of upload events, which
        aren't throttled or queued.

        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::callReadyStateChangeListener):
        * xml/XMLHttpRequestProgressEventThrottle.cpp:
        (WebCore::XMLHttpRequestProgressEventThrottle::dispatchReadyStateChangeEvent):
        (WebCore::XMLHttpRequestProgressEventThrottle::dispatchEvent):
        (WebCore::XMLHttpRequestProgressEventThrottle::flushProgressEvent):
        (WebCore::XMLHttpRequestProgressEventThrottle::dispatchPausedEvent):
        (WebCore::XMLHttpRequestProgressEventThrottle::fired):
        * xml/XMLHttpRequestProgressEventThrottle.h:
        (XMLHttpRequestProgressEventThrottle):

2012-03-22  Sudarsana Nagineni  <sudarsana.nagineni@linux.intel.com>

        [EFL] Map BackSpace key code to Unicode value
        https://bugs.webkit.org/show_bug.cgi?id=81130

        Reviewed by Gustavo Noronha Silva.

        Test: fast/events/backspace-navigates-back.html

        * platform/efl/EflKeyboardUtilities.cpp:
        (WebCore::createKeyMap): Map BackSpace to Unicode value

2012-03-22  Abhishek Arya  <inferno@chromium.org>

        Incorrect beforeChild parent calculation in RenderRubyBase::moveChildren.
        https://bugs.webkit.org/show_bug.cgi?id=80297

        Reviewed by Julien Chaffraix.

        beforeChild might share the same anonymous block parent with other previous
        siblings. Before moving the children across ruby bases, we need to make sure
        to split the tree across the beforeChild correctly.

        Test: fast/ruby/ruby-text-before-child-split.html

        * rendering/RenderRubyBase.cpp:
        (WebCore::RenderRubyBase::moveChildren):

2012-03-22  Kristóf Kosztyó  <kkristof@inf.u-szeged.hu>

        [Qt] Fix Qt minimal build after r111692

        Reviewed by Csaba Osztrogonác.

        * bindings/js/JSScriptProfileNodeCustom.cpp:

2012-03-22  Adrienne Walker  <enne@google.com>

        [chromium] Fix scrollbar layers holding onto invalid textures after lost context
        https://bugs.webkit.org/show_bug.cgi?id=81841

        Reviewed by James Robinson.

        Unit test: CCLayerTreeHostImplTest.scrollbarLayerLostContext

        * platform/graphics/chromium/cc/CCScrollbarLayerImpl.cpp:
        (WebCore::CCScrollbarLayerImpl::willDraw):

2012-03-22  Philippe Normand  <pnormand@igalia.com>

        [GTK] ASSERT bug in WebAudio (AudioFileReader)
        https://bugs.webkit.org/show_bug.cgi?id=81777

        Reviewed by Martin Robinson.

        * platform/audio/gstreamer/AudioFileReaderGStreamer.cpp:
        (WebCore::AudioFileReader::decodeAudioForBusCreation): Don't steal
        the GstBus floating reference.
        (WebCore::AudioFileReader::createBus): Ditto.

2012-03-22  Ilya Tikhonovsky  <loislo@chromium.org>

        Unreviewed: Web Inspector: fix syntax error in text.

        * English.lproj/localizedStrings.js:
        * inspector/front-end/HeapSnapshotProxy.js:
        (WebInspector.HeapSnapshotWorker.prototype._messageReceived):

2012-03-22  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r111688.
        http://trac.webkit.org/changeset/111688
        https://bugs.webkit.org/show_bug.cgi?id=81912

        "Heap profiler test fails" (Requested by yurys on #webkit).

        * inspector/front-end/HeapSnapshot.js:
        (WebInspector.HeapSnapshot.prototype._buildRetainers):

2012-03-22  Dana Jansens  <danakj@chromium.org>

        [chromium] Early out in a new prepareToDraw() step if checkerboarding an accelerated animation in order to skip the frame
        https://bugs.webkit.org/show_bug.cgi?id=81437

        Reviewed by Adrienne Walker.

        Split CCLayerTreeHostImpl::drawLayers() into two phases:
        prepareToDraw() and drawLayers().

        When calculating a RenderPass, and we checkerboard a quad on a
        layer, bubble this info back up to CCLayerTreeHostImpl. If the
        layer is transforming in an animation, then abort the prepareToDraw()
        phase and cause it to return false back to the thread proxy.

        Unit test: CCLayerTreeHostImplTest.prepareToDrawFailsWhenAnimationUsesCheckerboard

        * platform/graphics/chromium/cc/CCLayerImpl.cpp:
        (WebCore::CCLayerImpl::appendQuads):
        * platform/graphics/chromium/cc/CCLayerImpl.h:
        (CCLayerImpl):
        * platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:
        (WebCore::CCLayerTreeHostImpl::calculateRenderPasses):
        (WebCore::CCLayerTreeHostImpl::prepareToDraw):
        (WebCore):
        (WebCore::CCLayerTreeHostImpl::drawLayers):
        * platform/graphics/chromium/cc/CCLayerTreeHostImpl.h:
        (CCLayerTreeHostImpl):
        (FrameData):
        * platform/graphics/chromium/cc/CCQuadCuller.cpp:
        (WebCore::CCQuadCuller::append):
        * platform/graphics/chromium/cc/CCQuadCuller.h:
        (CCQuadCuller):
        * platform/graphics/chromium/cc/CCRenderPass.cpp:
        (WebCore::CCRenderPass::appendQuadsForLayer):
        * platform/graphics/chromium/cc/CCRenderPass.h:
        (CCRenderPass):
        * platform/graphics/chromium/cc/CCScrollbarLayerImpl.cpp:
        (WebCore::CCScrollbarLayerImpl::appendQuads):
        * platform/graphics/chromium/cc/CCScrollbarLayerImpl.h:
        (CCScrollbarLayerImpl):
        * platform/graphics/chromium/cc/CCSingleThreadProxy.cpp:
        (WebCore::CCSingleThreadProxy::doComposite):
        * platform/graphics/chromium/cc/CCSolidColorLayerImpl.cpp:
        (WebCore::CCSolidColorLayerImpl::appendQuads):
        * platform/graphics/chromium/cc/CCSolidColorLayerImpl.h:
        (CCSolidColorLayerImpl):
        * platform/graphics/chromium/cc/CCTextureLayerImpl.cpp:
        (WebCore::CCTextureLayerImpl::appendQuads):
        * platform/graphics/chromium/cc/CCTextureLayerImpl.h:
        (CCTextureLayerImpl):
        * platform/graphics/chromium/cc/CCThreadProxy.cpp:
        (WebCore::CCThreadProxy::scheduledActionDrawAndSwap):
        * platform/graphics/chromium/cc/CCTiledLayerImpl.cpp:
        (WebCore::CCTiledLayerImpl::appendQuads):
        * platform/graphics/chromium/cc/CCTiledLayerImpl.h:
        (CCTiledLayerImpl):
        * platform/graphics/chromium/cc/CCVideoLayerImpl.cpp:
        (WebCore::CCVideoLayerImpl::appendQuads):
        * platform/graphics/chromium/cc/CCVideoLayerImpl.h:
        (CCVideoLayerImpl):

2012-03-22  Levi Weintraub  <leviw@chromium.org>

        Correct LayoutUnit usage in Accessibility code
        https://bugs.webkit.org/show_bug.cgi?id=81789

        Reviewed by Eric Seidel.

        Reverting Accessibility hit testing code back to integers. Accessibility hit tests originate from
        the embedder and don't accumulate offsets, so we get nothing from using LayoutUnits, and needlessly
        expose them to the embedder.

        No new tests. No change in behavior.

        * accessibility/AccessibilityListBox.cpp:
        (WebCore::AccessibilityListBox::elementAccessibilityHitTest): See above.
        * accessibility/AccessibilityListBox.h:
        (AccessibilityListBox):
        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::clickPoint): This value is only ever used to display a context menu,
        which is always done with integer coordinates.
        (WebCore::AccessibilityObject::boundingBoxForQuads): This is a bounding box built from floats. We
        don't pixel snap floats, so we return an integer bounding box.
        (WebCore::AccessibilityObject::elementAccessibilityHitTest): See above.
        (WebCore::AccessibilityObject::scrollToMakeVisible): Pixel snapping the bounding box and simplifying
        up the code to position it at (0,0).
        * accessibility/AccessibilityObject.h:
        (WebCore::AccessibilityObject::accessibilityHitTest): See above.
        (AccessibilityObject):
        (WebCore::AccessibilityObject::pixelSnappedBoundingBoxRect): Convenience method for embedder callers.
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::visiblePositionForPoint): The point passed in here is comes from
        screen coordinates and originates in embedder code. Reverting it to take an integer.
        (WebCore::AccessibilityRenderObject::accessibilityImageMapHitTest): See above.
        (WebCore::AccessibilityRenderObject::accessibilityHitTest): See above.
        * accessibility/AccessibilityRenderObject.h:
        (AccessibilityRenderObject):
        * accessibility/AccessibilityScrollView.cpp:
        (WebCore::AccessibilityScrollView::accessibilityHitTest): See above.
        * accessibility/AccessibilityScrollView.h:
        (AccessibilityScrollView):
        * accessibility/AccessibilitySlider.cpp:
        (WebCore::AccessibilitySlider::elementAccessibilityHitTest): See above.
        * accessibility/AccessibilitySlider.h:
        (AccessibilitySlider):

2012-03-21  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: HeapProfiler: Heap snapshot worker has to report the errors to the front-end
        https://bugs.webkit.org/show_bug.cgi?id=81804

        Sometimes the worker process of HeapSnapshot does some wrong thing and throw an Exception.
        At this momemnt we have no way to see the error in the front-end.

        Reviewed by Yury Semikhatsky.

        * English.lproj/localizedStrings.js:
        * inspector/front-end/HeapSnapshotProxy.js: check the exception field and dump it into front-end's console.
        (WebInspector.HeapSnapshotWorker.prototype._messageReceived):
        * inspector/front-end/HeapSnapshotWorkerDispatcher.js: catch the exception and transfer it's text to requester's side.
        (WebInspector.HeapSnapshotWorkerDispatcher.prototype.dispatchMessage):

2012-03-22  Carlos Garcia Campos  <cgarcia@bb-webkit-rel-64.local.igalia.com>

        [GTK] Use the angle-bracket form to include wtf headers
        https://bugs.webkit.org/show_bug.cgi?id=81884

        Reviewed by Eric Seidel.

        Use #include <wtf/foo> instead of #include "foo".

        * platform/graphics/freetype/FontPlatformData.h:
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        * platform/gtk/DataObjectGtk.h:
        * platform/network/ResourceHandleInternal.h:
        * platform/network/soup/SocketStreamHandleSoup.cpp:

2012-03-22  Alexander Pavlov  <apavlov@chromium.org>

        Web Inspector: Case of the elements of the xml document should be shown as it is in the console
        https://bugs.webkit.org/show_bug.cgi?id=81902

        When registering a detached root, DOMAgent always presumes it is a node,
        while it can also be a document.

        Reviewed by Vsevolod Vlasov.

        Test: inspector/console/console-xml-document.html

        * inspector/front-end/ConsoleMessage.js:
        (WebInspector.ConsoleMessageImpl.prototype._formatParameterAsNode):
        * inspector/front-end/DOMAgent.js:
        (WebInspector.DOMAgent.prototype._setDetachedRoot):

2012-03-22  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Introduce ScriptBound/ScriptUnbound events in ScriptMapping.
        https://bugs.webkit.org/show_bug.cgi?id=81904

        Reviewed by Pavel Feldman.

        This is another step on the way to cleaner BreakpointManager logic.
        Here we extract ScriptBound/ScriptUnbound events from UISourceCodeListChanged event.
        This allows us to handle script-uiSourceCode binding separately from
        uiSourceCode creation/deletion and to handle unbinding that was not
        possible at all before.

        * inspector/front-end/CompilerScriptMapping.js:
        (WebInspector.CompilerScriptMapping.prototype._uiSourceCodesForSourceMap):
        (WebInspector.CompilerScriptMapping.prototype.addScript.get this):
        (WebInspector.CompilerScriptMapping.prototype.addScript):
        (WebInspector.CompilerScriptMapping.prototype.reset):
        * inspector/front-end/ResourceScriptMapping.js:
        (WebInspector.ResourceScriptMapping.prototype._uiSourceCodeChanged):
        * inspector/front-end/ScriptMapping.js:
        (WebInspector.MainScriptMapping):
        (WebInspector.MainScriptMapping.prototype._updateLiveLocation):
        (WebInspector.MainScriptMapping.prototype._handleUISourceCodeListChanged):
        (WebInspector.MainScriptMapping.prototype._handleScriptBound):
        (WebInspector.MainScriptMapping.prototype._handleScriptUnbound):
        * inspector/front-end/SnippetsModel.js:
        (WebInspector.SnippetsScriptMapping.prototype.addScript.get this):
        (WebInspector.SnippetsScriptMapping.prototype._snippetAdded):
        (WebInspector.SnippetsScriptMapping.prototype._createUISourceCodeForScript):
        (WebInspector.SnippetsScriptMapping.prototype._snippetRemoved.get this):
        (WebInspector.SnippetsScriptMapping.prototype._snippetRemoved):
        (WebInspector.SnippetsScriptMapping.prototype.reset):

2012-03-22  Vineet Chaudhary  <rgf748@motorola.com>

        https://bugs.webkit.org/show_bug.cgi?id=81893
        Remove custom bindings form ScriptProfileNode.idl of attribute type Array.

        Reviewed by Kentaro Hara.

        Replace [CustomGetter] Array with sequence<ScriptProfileNode>.
        To remove the custom bindings code.

        Test: No new tests. LayoutTests/fast/profiler/* test are enough for this.

        * bindings/js/JSScriptProfileNodeCustom.cpp: Removed custom function.
        (WebCore::JSScriptProfileNode::callUID):
        * bindings/v8/custom/V8ScriptProfileNodeCustom.cpp: Removed custom function.
        (WebCore):
        * inspector/ScriptProfileNode.idl: Replaced Array with sequence<ScriptProfileNode>.

2012-03-22  Andrey Kosyakov  <caseq@chromium.org>

        Web Inspector: only update timeline overview categories strips when these are visible
        https://bugs.webkit.org/show_bug.cgi?id=81903

        Reviewed by Pavel Feldman.

        - factor out category strips update into a separate method;
        - only invoke it when "Timeline" overview mode is selected.

        * inspector/front-end/TimelineOverviewPane.js:
        (WebInspector.TimelineOverviewPane.prototype._showTimelines):
        (WebInspector.TimelineOverviewPane.prototype.update):
        (WebInspector.TimelineOverviewPane.prototype._updateCategoryStrips):

2012-03-22  Levi Weintraub  <leviw@chromium.org>

        Update LayoutUnit usage in FrameSelection
        https://bugs.webkit.org/show_bug.cgi?id=81754

        Reviewed by Eric Seidel.

        FrameSelection stores its caret and repaint bounds in absolute coordinates. Absolute coordinates
        we treat as pixel values, so this patch changes these values to integers. Sub-pixel precision
        will still be used when these coordinates are passed down and used locally.

        No new tests. No change in behavior.

        * editing/FrameSelection.cpp:
        (WebCore::absoluteCaretY): Uses absolute coordinates, which are ints.
        (WebCore::FrameSelection::modify): Uses absolute coordinates to handle vertical selection
        modification. Sub-pixel precision will be used when these values are converted to local ones.
        (WebCore::CaretBase::absoluteBoundsForLocalRect): Absolute coordinates -> ints.
        (WebCore::FrameSelection::absoluteCaretBounds): Ditto.
        (WebCore::CaretBase::caretRepaintRect): The caret repaint rect is stored in absolute coordinates.
        Reverting the values to ints.
        (WebCore::FrameSelection::recomputeCaretRect): Ditto.
        * editing/FrameSelection.h:
        (FrameSelection):
        * editing/mac/FrameSelectionMac.mm:
        (WebCore::FrameSelection::notifyAccessibilityForSelectionChange): Switching to store absolute
        coordinates as integers.

2012-03-22  Alexei Filippov  <alexeif@chromium.org>

        Web Inspector: Speed up the build retainers phase.
        https://bugs.webkit.org/show_bug.cgi?id=81763

        Replacing the edge iterator with a raw loop makes it
        faster by more than 10 times.

        Reviewed by Yury Semikhatsky.

        * inspector/front-end/HeapSnapshot.js:
        (WebInspector.HeapSnapshot.prototype._buildRetainers):

2012-03-22  No'am Rosenthal  <noam.rosenthal@nokia.com>

        [Qt][WK2] The background appears to have one extra pixel from the contents
        https://bugs.webkit.org/show_bug.cgi?id=81830

        Reviewed by Kenneth Rohde Christiansen.

        TextureMapperGL applied a 1-offset that was covering for another bug,
        which was already fixed.

        No new tests, this would be tested once we test GL rendering results.

        * platform/graphics/texmap/TextureMapperGL.cpp:
        (WebCore::TextureMapperGLData::SharedGLData::scissorClip):

2012-03-22  W. James MacLean  <wjmaclean@chromium.org>

        Rename touchpad fling curve, add curve parameters to constructor.
        https://bugs.webkit.org/show_bug.cgi?id=81820

        Reviewed by Adrienne Walker.

        Covered by existing unit tests.

        * GNUmakefile.list.am:
        * WebCore.gypi:
        * platform/ScrollAnimatorNone.cpp:
        (WebCore::ScrollAnimatorNone::fireUpAnAnimation):
        * platform/TouchpadFlingPlatformGestureCurve.cpp: Renamed from Source/WebCore/platform/TouchFlingPlatformGestureCurve.cpp.
        (WebCore):
        (WebCore::TouchpadFlingPlatformGestureCurve::create):
        (WebCore::TouchpadFlingPlatformGestureCurve::TouchpadFlingPlatformGestureCurve):
        (WebCore::TouchpadFlingPlatformGestureCurve::~TouchpadFlingPlatformGestureCurve):
        (WebCore::TouchpadFlingPlatformGestureCurve::apply):
        * platform/TouchpadFlingPlatformGestureCurve.h: Renamed from Source/WebCore/platform/TouchFlingPlatformGestureCurve.h.
        (WebCore):
        (TouchpadFlingPlatformGestureCurve):

2012-03-22  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: make CSS and JavaScript files editable by default.
        https://bugs.webkit.org/show_bug.cgi?id=81787

        Reviewed by Vsevolod Vlasov.

        This change removes cancelEditing and setReadOnly capabilities from source frame.
        It removes dblclick handler as well since one does not need to enter editing mode.
        It also establishes proper content dispatching so that views are updated with the
        resource content. All these are inter-dependent, need to be landed simultaneously.
        Drive-by follow up to the r111675 where range is modified prior to the exiting
        edit mode.

        * inspector/front-end/JavaScriptSourceFrame.js:
        (WebInspector.JavaScriptSourceFrame):
        (WebInspector.JavaScriptSourceFrame.prototype.requestContent):
        (WebInspector.JavaScriptSourceFrame.prototype.afterTextChanged):
        (WebInspector.JavaScriptSourceFrame.prototype.beforeTextChanged):
        (WebInspector.JavaScriptSourceFrame.prototype.didEditContent):
        (WebInspector.JavaScriptSourceFrame.prototype._lineNumberAfterEditing):
        * inspector/front-end/ResourceView.js:
        (WebInspector.ResourceSourceFrame):
        (WebInspector.ResourceSourceFrame.prototype.suggestedFileName):
        (WebInspector.ResourceSourceFrame.prototype._contentChanged):
        (WebInspector.EditableResourceSourceFrame.prototype.canEditSource):
        (WebInspector.EditableResourceSourceFrame.prototype.editContent.callbackWrapper):
        (WebInspector.EditableResourceSourceFrame.prototype.editContent):
        (WebInspector.EditableResourceSourceFrame.prototype._contentChanged):
        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.ResourcesPanel.prototype._innerShowView):
        (WebInspector.FrameResourceTreeElement.prototype._appendRevision):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype.setScriptSourceIsDirty):
        * inspector/front-end/Settings.js:
        (WebInspector.ExperimentsSettings):
        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame):
        (WebInspector.SourceFrame.prototype.wasShown):
        (WebInspector.SourceFrame.prototype.willHide):
        (WebInspector.SourceFrame.prototype.beforeTextChanged):
        (WebInspector.SourceFrame.prototype.setContent):
        (WebInspector.SourceFrame.prototype.commitEditing):
        (WebInspector.SourceFrame.prototype.didEditContent):
        (WebInspector.SourceFrame.prototype.editContent):
        * inspector/front-end/TextPrompt.js:
        (WebInspector.TextPrompt.prototype._startEditing):
        (WebInspector.TextPrompt.prototype._stopEditing):
        * inspector/front-end/TextViewer.js:
        (WebInspector.TextViewer):
        (WebInspector.TextViewer.prototype._registerShortcuts):
        (WebInspector.TextEditorMainPanel.prototype.handleEnterKey):

2012-03-22  Allan Sandfeld Jensen  <allan.jensen@nokia.com>

        [Qt] Enable FAST_MOBILE_SCROLLING when scrolling is delegated.
        https://bugs.webkit.org/show_bug.cgi?id=81889

        Reviewed by Kenneth Rohde Christiansen.

        On the Qt platform only enable the fast mobile scroll feature when scrolling is delegated.

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::styleWillChange):

2012-03-22  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: dispatch styleSheetChanged event synchronously.
        https://bugs.webkit.org/show_bug.cgi?id=81892

        Reviewed by Vsevolod Vlasov.

        Today, backend generates stylesheet change event synchronously from within set* command.
        But CSSStyleModel defers its dispatching until the stylesheet content is available. This
        prevents us from ignoring update events from within commands that initiated those updates.

        This change makes stylesheet change event dispatch synchronously and delegates stylesheet
        content fetching to the event client.

        * inspector/front-end/CSSStyleModel.js:
        (WebInspector.CSSStyleModel.prototype._fireStyleSheetChanged):
        (WebInspector.CSSStyleDeclaration.prototype.insertPropertyAt):
        (WebInspector.CSSStyleModelResourceBinding.prototype.setContent):
        (WebInspector.CSSStyleModelResourceBinding.prototype._innerSetContent.callbackWrapper):
        (WebInspector.CSSStyleModelResourceBinding.prototype._innerSetContent):
        (WebInspector.CSSStyleModelResourceBinding.prototype._styleSheetChanged.callback):
        (WebInspector.CSSStyleModelResourceBinding.prototype._styleSheetChanged):
        (WebInspector.CSSStyleModelResourceBinding.prototype._innerStyleSheetChanged):

2012-03-21  Ian Vollick  <vollick@chromium.org>

        [chromium] timing functions are getting incorrectly applied for accelerated css transitions
        https://bugs.webkit.org/show_bug.cgi?id=81692

        Reviewed by Adrienne Walker.

        Tested in CCLayerTreeHostTestAddAnimationWithTimingFunction

        * platform/graphics/chromium/cc/CCLayerAnimationController.cpp:

2012-03-22  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: allow on-hover popover while in edit mode.
        https://bugs.webkit.org/show_bug.cgi?id=81898

        Reviewed by Vsevolod Vlasov.

        This change allows popover while in-edit mode, hides it upon Esc. It also introduces anchorOverride
        concept in ObjectPopoverHelper that allows dynamically switching the anchor (say if we want to highlight anchor itself).

        * inspector/front-end/DetailedHeapshotView.js:
        * inspector/front-end/ElementsPanel.js:
        * inspector/front-end/JavaScriptSourceFrame.js:
        (WebInspector.JavaScriptSourceFrame.prototype._resolveObjectForPopover.showObjectPopover):
        (WebInspector.JavaScriptSourceFrame.prototype._resolveObjectForPopover):
        (WebInspector.JavaScriptSourceFrame.prototype._onKeyDown):
        * inspector/front-end/NetworkPanel.js:
        * inspector/front-end/ObjectPopoverHelper.js:
        (WebInspector.ObjectPopoverHelper.prototype._showObjectPopover.showObjectPopover.):
        (WebInspector.ObjectPopoverHelper.prototype._showObjectPopover):
        * inspector/front-end/Popover.js:
        (WebInspector.PopoverHelper.prototype.isPopoverVisible):
        * inspector/front-end/TimelinePanel.js:

2012-03-22  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: breakpoints should shift when line break is inserted in the middle of the line.
        https://bugs.webkit.org/show_bug.cgi?id=81896

        Reviewed by Vsevolod Vlasov.

        There is a bug that collapses selection prior to exiting change mode, we should never
        collapse edit area prior committing.

        * inspector/front-end/TextEditorModel.js:
        (WebInspector.TextEditorModel.endsWithBracketRegex.):
        * inspector/front-end/TextViewer.js:
        (WebInspector.TextViewer):
        (WebInspector.TextEditorMainPanel.prototype.highlightLine):
        (WebInspector.TextEditorMainPanel.prototype.handleUndoRedo.callback):
        (WebInspector.TextEditorMainPanel.prototype.handleUndoRedo):

2012-03-22  Zoltan Herczeg  <zherczeg@webkit.org>

        Merge SVGImageBufferTools to SVGRenderingContext
        https://bugs.webkit.org/show_bug.cgi?id=81890

        Reviewed by Nikolas Zimmermann.

        Copy the code to SVGRenderingContext and delete
        SVGImageBufferTools[.cpp.h]. Update build systems,
        no functionality change. This is the first step
        towards making SVGImageBufferTools stageful.

        Existing tests cover this issue.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/filters/FETile.cpp:
        (WebCore::FETile::platformApplySoftware):
        * rendering/svg/RenderSVGAllInOne.cpp:
        * rendering/svg/RenderSVGInlineText.cpp:
        (WebCore::RenderSVGInlineText::computeNewScaledFontForStyle):
        * rendering/svg/RenderSVGResourceClipper.cpp:
        (WebCore::RenderSVGResourceClipper::applyClippingToContext):
        (WebCore::RenderSVGResourceClipper::drawContentIntoMaskImage):
        * rendering/svg/RenderSVGResourceFilter.cpp:
        (WebCore::RenderSVGResourceFilter::applyResource):
        * rendering/svg/RenderSVGResourceGradient.cpp:
        (WebCore::createMaskAndSwapContextForTextGradient):
        (WebCore::clipToTextMask):
        * rendering/svg/RenderSVGResourceMasker.cpp:
        (WebCore::RenderSVGResourceMasker::applyResource):
        (WebCore::RenderSVGResourceMasker::drawContentIntoMaskImage):
        * rendering/svg/RenderSVGResourcePattern.cpp:
        (WebCore::RenderSVGResourcePattern::applyResource):
        (WebCore::RenderSVGResourcePattern::createTileImage):
        * rendering/svg/SVGImageBufferTools.cpp: Removed.
        * rendering/svg/SVGImageBufferTools.h: Removed.
        * rendering/svg/SVGInlineTextBox.cpp:
        * rendering/svg/SVGRenderingContext.cpp:
        (WebCore::currentContentTransformation):
        (WebCore):
        (WebCore::SVGRenderingContext::calculateTransformationToOutermostSVGCoordinateSystem):
        (WebCore::SVGRenderingContext::createImageBuffer):
        (WebCore::SVGRenderingContext::createImageBufferForPattern):
        (WebCore::SVGRenderingContext::renderSubtreeToImageBuffer):
        (WebCore::SVGRenderingContext::clipToImageBuffer):
        (WebCore::SVGRenderingContext::clampedAbsoluteTargetRect):
        (WebCore::SVGRenderingContext::clampedAbsoluteSize):
        (WebCore::SVGRenderingContext::clear2DRotation):
        * rendering/svg/SVGRenderingContext.h:
        (SVGRenderingContext):
        (WebCore::SVGRenderingContext::calculateImageBufferRect):
        * svg/graphics/filters/SVGFEImage.cpp:
        (WebCore::FEImage::platformApplySoftware):

2012-03-22  Hyowon Kim  <hw1008.kim@samsung.com>

        [EFL] Add PageClientEfl to WebCoreSupport.
        https://bugs.webkit.org/show_bug.cgi?id=80748

        Reviewed by Noam Rosenthal.

        * platform/Widget.h: Use PageClientEfl as type for PlatformPageClient.
        (WebCore):
        * platform/graphics/efl/GraphicsContext3DPrivate.cpp:
        (WebCore::GraphicsContext3DPrivate::createSurface): Change the argument type.
        * plugins/efl/PluginViewEfl.cpp:
        (WebCore::PluginView::platformGetValue): Use PageClientEfl.

2012-03-22  Kaustubh Atrawalkar  <kaustubh@motorola.com>

        blur() on shadow host should work when a shadow host contains a focused element in its shadow DOM subtrees
        https://bugs.webkit.org/show_bug.cgi?id=81102

        Reviewed by Hajime Morita.

        This implementation will support blur for a focused element when its shadowHost's blur() is called.
        To achieve this Element::blur() function is modified to blur the focused node in it's treeScope.

        Test: fast/dom/shadow/shadow-root-blur.html

        * dom/Element.cpp:
        (WebCore::Element::blur): Modified to blur current treeScope's focused node.
        * dom/ShadowRoot.h:
        (WebCore::ShadowRoot::activeElement): Rework for code sharing.
        * dom/TreeScope.cpp:
        (WebCore::TreeScope::focusedNode): Added new function to share code for getting focused node.
        * dom/TreeScope.h:
        (TreeScope): New function declartion.
        * html/HTMLDocument.cpp:
        (WebCore::HTMLDocument::activeElement): Rework for code sharing.

2012-03-22  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: RawSourceCode does not need uiSourceCode lists because it never has more than one.
        https://bugs.webkit.org/show_bug.cgi?id=81894

        RawSourceCode never has more than one uiSourceCode, uiSourceCodeList
        are just remains of older implementation. This patch switches RawSourceCode
        and SourceMappings from uiSourceCodeList to uiSourceCode.

        Reviewed by Pavel Feldman.

        * inspector/front-end/RawSourceCode.js:
        (WebInspector.RawSourceCode.prototype.uiSourceCode):
        (WebInspector.RawSourceCode.prototype._saveSourceMapping):
        (WebInspector.RawSourceCode.SourceMapping.prototype.uiLocationToRawLocation):
        (WebInspector.RawSourceCode.SourceMapping.prototype.uiSourceCode):
        (WebInspector.RawSourceCode.PlainSourceMapping):
        (WebInspector.RawSourceCode.PlainSourceMapping.prototype.rawLocationToUILocation):
        (WebInspector.RawSourceCode.PlainSourceMapping.prototype.uiLocationToRawLocation):
        (WebInspector.RawSourceCode.PlainSourceMapping.prototype.uiSourceCode):
        (WebInspector.RawSourceCode.FormattedSourceMapping):
        (WebInspector.RawSourceCode.FormattedSourceMapping.prototype.rawLocationToUILocation):
        (WebInspector.RawSourceCode.FormattedSourceMapping.prototype.uiLocationToRawLocation):
        (WebInspector.RawSourceCode.FormattedSourceMapping.prototype.uiSourceCode):
        * inspector/front-end/ResourceScriptMapping.js:
        (WebInspector.ResourceScriptMapping.prototype.uiSourceCodeList):
        (WebInspector.ResourceScriptMapping.prototype.addScript):
        (WebInspector.ResourceScriptMapping.prototype._handleUISourceCodeChanged):
        (WebInspector.ResourceScriptMapping.prototype._uiSourceCodeChanged):
        (WebInspector.ResourceScriptMapping.prototype.reset):

2012-03-22  Mario Sanchez Prada  <msanchez@igalia.com>

        [GTK] Fix the only remaining coding style issue in GTK accessibility code
        https://bugs.webkit.org/show_bug.cgi?id=81885

        Reviewed by Xan Lopez.

        Add needed extra line and remove an unneeded one.

        * accessibility/gtk/AccessibilityObjectAtk.cpp:

2012-03-22  Kent Tamura  <tkent@chromium.org>

        Expand RenderTextControlSingleLine::controlClipRect() to contain contentRect().
        https://bugs.webkit.org/show_bug.cgi?id=81866

        Reviewed by Hajime Morita.

        We need to expand the controlClipRect because the existing shadow
        tree of a text field can be wrapped by another shadow tree. e.g.

        A current situation:

        <input>
          ┗ ShadowRoot
             ┗ container element
        ┌────────────┐<input>'s border box
        │┌──────────┐│
        ││container box       ││
        │└──────────┘│
        └────────────┘

        Wrapped by another ShadowRoot:

        <input>
          ┗ New ShadowRoot
             ┣ <shadow> represents the existing shadow tree
             ┃  ┗ container element
             ┗ D: an additional decoration element
        ┌────────────┐<input>'s border box
        │┌───────┬──┐│
        ││container box │ D  ││
        │└───────┴──┘│
        └────────────┘
        In this case, if we clip child renderers by container box, D is not
        drawn. We should clip by the content box of the <input>.

        A search field has an exceptional behavior. It can have the container
        box of which height is taller than the content box height. The
        controlClipRect should contain both of the container box and the content
        box in this case. In other cases, the container box is equivalent to the
        content box. So the code always unites them.

        No new tests. This won't make any behavior change for now.

        * rendering/RenderTextControlSingleLine.cpp:
        (WebCore::RenderTextControlSingleLine::controlClipRect):

2012-03-22  Yoshifumi Inoue  <yosin@chromium.org>

        [Forms] The option element should not be form associated element.
        https://bugs.webkit.org/show_bug.cgi?id=79764

        Reviewed by Kent Tamura.

        This patch changes base class of HTMLOptionELement to HTMLElement
        from HTMLFormControlElement for saving memory space and iteration
        time of extra "option" elements in HTMLFormElement::m_formAssociatedElements
        and matching the HTML5 specification for ease of maintenance.

        This patch changes behavior of handling of CSS pseudo classes "invalid"
        and "valid". The "option" elements no longer use these CSS pseudo classes
        as HTML5 specification. This bug was filed in https://bugs.webkit.org/show_bug.cgi?id=80088

        Changes of TextIterator is lead by usage of isFormControlElement. This
        changes will be replaced with more meaningful predicate as part of
        https://bugs.webkit.org/show_bug.cgi?id=80381

        No new tests but updated select-live-pseudo-selectors.html test.

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::canShareStyleWithElement): Added checking of the "option" element and returns false as HTMLFormControlElement.
        * css/SelectorChecker.cpp:
        (WebCore::SelectorChecker::checkOneSelector): Removed isFormControlElement for PseudoDisabled and PseudoChecked.
        * html/HTMLKeygenElement.cpp:
        (WebCore::HTMLKeygenElement::HTMLKeygenElement): Removed form parameter of call site of HTMLOptionElement::create.
        * html/HTMLOptionElement.cpp:
        (WebCore::HTMLOptionElement::HTMLOptionElement): Removed form parameter which no longer needed. Changed base class in initialization list. Added m_disabled initialization.
        (WebCore::HTMLOptionElement::create): Removed form parameter which no longer needed.
        (WebCore::HTMLOptionElement::attach): Changeid base class.
        (WebCore::HTMLOptionElement::detach): Changed base class.
        (WebCore::HTMLOptionElement::parseAttribute): Changed base class. Added "disabled" attribute handling.
        (WebCore::HTMLOptionElement::childrenChanged): Changed base class.
        (WebCore::HTMLOptionElement::insertedIntoTree): Changed base class.
        * html/HTMLOptionElement.h:
        (HTMLOptionElement): Added new member variable m_disabled which was in HTMLFormControlElement.
        (WebCore::HTMLOptionElement::ownElementDisabled): Changed for using m_disabled.
        * html/HTMLTagNames.in: Removed constructorNeedsFormElement for the "option" element, which was used for passing form parameter to create function.

2012-03-21  Pavel Podivilov  <podivilov@chromium.org>

        Web Inspector: rename ClosureCompilerSourceMapping to SourceMapParser and move it to CompilerScriptMapping.js.
        https://bugs.webkit.org/show_bug.cgi?id=81780

        Reviewed by Pavel Feldman.

        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * inspector/compile-front-end.py:
        * inspector/front-end/CompilerScriptMapping.js:
        (WebInspector.CompilerScriptMapping.prototype.loadSourceMapForScript):
        (WebInspector.SourceMapParserPayload):
        (WebInspector.SourceMapParser):
        (WebInspector.SourceMapParser.prototype.load):
        (WebInspector.SourceMapParser.prototype.compiledLocationToSourceLocation):
        (WebInspector.SourceMapParser.prototype.sourceLocationToCompiledLocation):
        (WebInspector.SourceMapParser.prototype.sources):
        (WebInspector.SourceMapParser.prototype.loadSourceCode):
        (WebInspector.SourceMapParser.prototype._findMapping):
        (WebInspector.SourceMapParser.prototype._parseMappingPayload):
        (WebInspector.SourceMapParser.prototype._parseSections):
        (WebInspector.SourceMapParser.prototype._parseMap):
        (WebInspector.SourceMapParser.prototype._isSeparator):
        (WebInspector.SourceMapParser.prototype._decodeVLQ):
        (WebInspector.SourceMapParser.prototype._canonicalizeURL):
        (WebInspector.SourceMapParser.StringCharIterator):
        (WebInspector.SourceMapParser.StringCharIterator.prototype.next):
        (WebInspector.SourceMapParser.StringCharIterator.prototype.peek):
        (WebInspector.SourceMapParser.StringCharIterator.prototype.hasNext):
        * inspector/front-end/CompilerSourceMapping.js: Removed.
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/inspector.html:

2012-03-21  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: IndexedDB transaction is not closed when requesting data.
        https://bugs.webkit.org/show_bug.cgi?id=81837

        Reviewed by Pavel Feldman.

        * inspector/InspectorIndexedDBAgent.cpp: Added missing IDBCursorBackendInterface::postSuccessHandlerCallback() call.
        (WebCore):

2012-03-21  Yury Semikhatsky  <yurys@chromium.org>

        Web Inspector: event listeners section is broken for about:blank page
        https://bugs.webkit.org/show_bug.cgi?id=81795

        Parse about:blank as a valid URL.

        Reviewed by Pavel Feldman.

        Test: inspector/elements/event-listeners-about-blank.html

        * inspector/front-end/utilities.js:
        (String.prototype.asParsedURL):

2012-03-21  Dan Bernstein  <mitz@apple.com>

        REGRESSION (r111635): Assertion failure in RenderFlexibleBox::layoutFlexItems() (!lineContexts.size()) in many flexbox tests
        https://bugs.webkit.org/show_bug.cgi?id=81870

        Reverted r111635, the fix for bug 81843.

        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::WrapReverseContext::WrapReverseContext):
        (WebCore::RenderFlexibleBox::WrapReverseContext::addCrossAxisOffset):
        (RenderFlexibleBox::WrapReverseContext):
        (WebCore::RenderFlexibleBox::WrapReverseContext::addNumberOfChildrenOnLine):
        (WebCore::RenderFlexibleBox::WrapReverseContext::lineCrossAxisDelta):
        (WebCore::RenderFlexibleBox::layoutFlexItems):
        (WebCore::RenderFlexibleBox::layoutAndPlaceChildren):
        (WebCore::RenderFlexibleBox::alignChildren):
        (WebCore::RenderFlexibleBox::flipForWrapReverse):
        * rendering/RenderFlexibleBox.h:

2012-03-21  Emil A Eklund  <eae@chromium.org>

        Unreviewed change touching CustomFilterProgram.h to try
        to force the chromium-win bots to rebuilt it and pick up
        on the fact that CSS_SHADERS is not set (since r111610). 

        * platform/graphics/filters/CustomFilterProgram.h:

2012-03-21  Vangelis Kokkevis  <vangelis@chromium.org>

        [chromium] FPS counter causes garbage to be displayed at top left corner
        https://bugs.webkit.org/show_bug.cgi?id=81851

        The HUD expects the PlatformCanvas it paints on to be cleared on creation which is
        no longer true after http://src.chromium.org/viewvc/chrome?view=rev&revision=127196 .
        This patch does an explicit clearRect before the HUD contents are painted.

        Reviewed by Adrienne Walker.

        TEST=Manually verified that --show-fps-counter and --show-composited-layer-tree work correctly.

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

2012-03-21  Ryosuke Niwa  <rniwa@webkit.org>

        Touch a file to make Chromium Windows bots happy.

        * css/CSSValueKeywords.in:

2012-03-19  Igor Oliveira  <igor.o@sisa.samsung.com>

        Every call to RenderObject::setAnimatableStyle() iterates through all m_compositeAnimations: potentially O(N^2)
        https://bugs.webkit.org/show_bug.cgi?id=38025

        Implement updateAnimationTimerForRender. This reduces unnecessary animation
        steps on the current RenderObject by checking the value of timeToNextService
        before starting a new timer.

        Reviewed by Dean Jackson.

        Test: animations/animation-welcome-safari.html

        * page/animation/AnimationController.cpp:
        (WebCore::AnimationControllerPrivate::updateAnimationTimerForRenderer):
        (WebCore):
        (WebCore::AnimationController::updateAnimations):
        * page/animation/AnimationControllerPrivate.h:
        (AnimationControllerPrivate):

2012-03-21  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r111616.
        http://trac.webkit.org/changeset/111616
        https://bugs.webkit.org/show_bug.cgi?id=81862

        broke chromium mac (Requested by eae on #webkit).

        * platform/graphics/chromium/cc/CCLayerImpl.cpp:
        (WebCore::CCLayerImpl::appendQuads):
        * platform/graphics/chromium/cc/CCLayerImpl.h:
        (CCLayerImpl):
        * platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:
        (WebCore::CCLayerTreeHostImpl::calculateRenderPasses):
        (WebCore::CCLayerTreeHostImpl::drawLayers):
        * platform/graphics/chromium/cc/CCLayerTreeHostImpl.h:
        (CCLayerTreeHostImpl):
        * platform/graphics/chromium/cc/CCQuadCuller.cpp:
        (WebCore::CCQuadCuller::append):
        * platform/graphics/chromium/cc/CCQuadCuller.h:
        (CCQuadCuller):
        * platform/graphics/chromium/cc/CCRenderPass.cpp:
        (WebCore::CCRenderPass::appendQuadsForLayer):
        * platform/graphics/chromium/cc/CCRenderPass.h:
        (CCRenderPass):
        * platform/graphics/chromium/cc/CCScrollbarLayerImpl.cpp:
        (WebCore::CCScrollbarLayerImpl::appendQuads):
        * platform/graphics/chromium/cc/CCScrollbarLayerImpl.h:
        (CCScrollbarLayerImpl):
        * platform/graphics/chromium/cc/CCSingleThreadProxy.cpp:
        (WebCore::CCSingleThreadProxy::doComposite):
        * platform/graphics/chromium/cc/CCSolidColorLayerImpl.cpp:
        (WebCore::CCSolidColorLayerImpl::appendQuads):
        * platform/graphics/chromium/cc/CCSolidColorLayerImpl.h:
        (CCSolidColorLayerImpl):
        * platform/graphics/chromium/cc/CCTextureLayerImpl.cpp:
        (WebCore::CCTextureLayerImpl::appendQuads):
        * platform/graphics/chromium/cc/CCTextureLayerImpl.h:
        (CCTextureLayerImpl):
        * platform/graphics/chromium/cc/CCThreadProxy.cpp:
        (WebCore::CCThreadProxy::scheduledActionDrawAndSwap):
        * platform/graphics/chromium/cc/CCTiledLayerImpl.cpp:
        (WebCore::CCTiledLayerImpl::appendQuads):
        * platform/graphics/chromium/cc/CCTiledLayerImpl.h:
        (CCTiledLayerImpl):
        * platform/graphics/chromium/cc/CCVideoLayerImpl.cpp:
        (WebCore::CCVideoLayerImpl::appendQuads):
        * platform/graphics/chromium/cc/CCVideoLayerImpl.h:
        (CCVideoLayerImpl):

2012-03-21  Beth Dakin  <bdakin@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=80322
        Implement image-set

        Reviewed by Dean Jackson.

        This initial implementation of -webkit-image-set. 
        http://lists.w3.org/Archives/Public/www-style/2012Feb/1103.html
        The idea behind the feature is to allow authors to provide multiple variants 
        of the same image at differing resolutions, and to allow the User Agent to 
        choose the resource that is most appropriate at the time. This patch will 
        choose the most appropriate image based on device scale factor.

        CSSImageSetValue inherits from CSSValueList and behaves a lot like 
        CSSImageValue.
        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSImageSetValue.h: Added.
        (WebCore):
        (CSSImageSetValue):
        (WebCore::CSSImageSetValue::create):
        (WebCore::CSSImageSetValue::isPending):
        (ImageWithScale):
        (WebCore::CSSImageSetValue::compareByScaleFactor):
        * css/CSSImageSetValue.cpp: Added.
        (WebCore):
        (WebCore::CSSImageSetValue::CSSImageSetValue):
        (WebCore::CSSImageSetValue::~CSSImageSetValue):
        (WebCore::CSSImageSetValue::cachedOrPendingImageSet):
        (WebCore::CSSImageSetValue::customCssText):

        fillImageSet() iterates through the value list and turns the information into 
        a sorted Vector of ImageWithScales (which is a struct containing image URLs 
        and scale factors).
        (WebCore::CSSImageSetValue::fillImageSet):

        cachedImageSet() finds which image is most appropriate based on the device 
        scale factor, and it loads only that image. In the future, additional scale 
        factors will be taken into account.
        (WebCore::CSSImageSetValue::bestImageForScaleFactor):
        (WebCore::CSSImageSetValue::cachedImageSet):

        parseImageSet() is called everywhere in the CSSParser that a regular image or 
        generated image can be found.
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):
        (WebCore::CSSParser::parseContent):
        (WebCore::CSSParser::parseFillImage):
        (WebCore::CSSParser::parseBorderImage):
        (WebCore):
        (WebCore::CSSParser::parseImageSet):
        * css/CSSParser.h:

        Since CSSImageSetValue is implemented as a value list, 
        ApplyPropertyFillLayer::applyValue() needs to be more specific when it's 
        looking for a list of multiple URLs.
        * css/CSSStyleApplyProperty.cpp:
        (WebCore::ApplyPropertyFillLayer::applyValue):

        Handle image-set as a valid image value.
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::collectMatchingRulesForList):
        * css/CSSStyleSelector.h:
        (CSSStyleSelector):
        * css/CSSValue.cpp:
        (WebCore::CSSValue::cssText):
        (WebCore::CSSValue::destroy):
        * css/CSSValue.h:
        (CSSValue):
        (WebCore::CSSValue::isImageSetValue):

        computeIntrinsicDimensions() now takes an optional scaleFactor parameter that represents the author-enforced "intrinsic" scale factor of the image.
        * loader/cache/CachedImage.cpp:
        (WebCore::CachedImage::computeIntrinsicDimensions):
        * loader/cache/CachedImage.h:
        (CachedImage):
        * platform/graphics/GeneratedImage.h:
        (GeneratedImage):
        * platform/graphics/GeneratorGeneratedImage.cpp:
        (WebCore::GeneratedImage::computeIntrinsicDimensions):
        * platform/graphics/Image.cpp:
        (WebCore::Image::computeIntrinsicDimensions):
        * platform/graphics/Image.h:
        (Image):
        * platform/graphics/cg/PDFDocumentImage.cpp:
        (WebCore::PDFDocumentImage::computeIntrinsicDimensions):
        * platform/graphics/cg/PDFDocumentImage.h:
        (PDFDocumentImage):
        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::computeIntrinsicDimensions):
        * svg/graphics/SVGImage.h:
        (SVGImage):

        Inherits from StyleImage and returns a scaled size for imageSize() and 
        computeIntrinsicDimensions().
        * rendering/style/StyleCachedImageSet.cpp: Added.
        (WebCore):
        (WebCore::StyleCachedImageSet::StyleCachedImageSet):
        (WebCore::StyleCachedImageSet::cssValue):
        (WebCore::StyleCachedImageSet::canRender):
        (WebCore::StyleCachedImageSet::isLoaded):
        (WebCore::StyleCachedImageSet::errorOccurred):
        (WebCore::StyleCachedImageSet::imageSize):
        (WebCore::StyleCachedImageSet::imageHasRelativeWidth):
        (WebCore::StyleCachedImageSet::imageHasRelativeHeight):
        (WebCore::StyleCachedImageSet::computeIntrinsicDimensions):
        (WebCore::StyleCachedImageSet::usesImageContainerSize):
        (WebCore::StyleCachedImageSet::setContainerSizeForRenderer):
        (WebCore::StyleCachedImageSet::addClient):
        (WebCore::StyleCachedImageSet::removeClient):
        (WebCore::StyleCachedImageSet::image):
        * rendering/style/StyleCachedImageSet.h: Added.
        (WebCore):
        (StyleCachedImageSet):
        (WebCore::StyleCachedImageSet::create):
        (WebCore::StyleCachedImageSet::data):
        (WebCore::StyleCachedImageSet::cachedImage):

        Handle image-set.
        * rendering/style/StyleImage.h:
        (WebCore::StyleImage::isCachedImageSet):
        (WebCore::StyleImage::StyleImage):
        (StyleImage):
        * rendering/style/StylePendingImage.h:
        (StylePendingImage):
        (WebCore::StylePendingImage::cssImageSetValue):

2012-03-21  David Barton  <dbarton@mathscribe.com>

        MathML internals - improve naming in RenderMathMLSquareRoot.cpp and RenderMathMLRoot.cpp
        https://bugs.webkit.org/show_bug.cgi?id=81850

        Reviewed by Eric Seidel.

        This prepares these files for bug fixes, and eventually combining their common code. To
        understand this patch, I suggest you start with RenderMathMLSquareRoot.cpp, as it's
        simpler than RenderMathMLRoot.cpp.

        No new tests. LayoutTests/mathml/presentation/roots.xhtml is thorough enough for this.

        * rendering/mathml/RenderMathMLRoot.cpp:
        (WebCore):
        (WebCore::RenderMathMLRoot::addChild):
        (WebCore::RenderMathMLRoot::paint):
        (WebCore::RenderMathMLRoot::layout):
        * rendering/mathml/RenderMathMLRoot.h:
        (WebCore):
        (RenderMathMLRoot):
        * rendering/mathml/RenderMathMLSquareRoot.cpp:
        (WebCore):
        (WebCore::RenderMathMLSquareRoot::paint):
        (WebCore::RenderMathMLSquareRoot::layout):
        * rendering/mathml/RenderMathMLSquareRoot.h:
        (WebCore):
        (RenderMathMLSquareRoot):
        * rendering/mathml/RenderMathMLSubSup.h:
        (WebCore):

2012-03-21  Tony Chang  <tony@chromium.org>

        refactor flexbox in preparation for flex-line-pack
        https://bugs.webkit.org/show_bug.cgi?id=81843

        Reviewed by Ojan Vafai.

        Replace WrapReverseContext with a vector of LineContexts that contain
        the same information, plus values needed for flex-align.

        alignChildren has been moved to after all the lines have been
        positioned. We want to align children after flex-line-pack has changed
        the size of each line to avoid unnecessary layouts.

        No new tests, just refactoring.

        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::LineContext::LineContext): New struct,
        holds information needed for wrap-reverse and aligning children.
        (RenderFlexibleBox::LineContext):
        (WebCore::RenderFlexibleBox::layoutFlexItems): alignChildren after layout out all the lines rather than after each line.
        (WebCore::RenderFlexibleBox::layoutAndPlaceChildren): don't alignChildren
        (WebCore::RenderFlexibleBox::alignChildren): align all flex items, not just a line at a time.
        (WebCore::RenderFlexibleBox::flipForWrapReverse): Update to use LineContext
        * rendering/RenderFlexibleBox.h:

2012-03-21  Ryosuke Niwa  <rniwa@webkit.org>

        BDI element should have dir=auto by default
        https://bugs.webkit.org/show_bug.cgi?id=68773

        Reviewed by Daniel Bates.

        Treat bdi elements without dir content attribute as if they have dir=auto per spec:
        http://www.whatwg.org/specs/web-apps/current-work/multipage/text-level-semantics.html#the-bdi-element

        The patch tries to encapsulate the logic to look for dir content attribute and dir=auto.

        It also adds HTMLBDIElement interface (binding remains to use HTMLElement) to set
        selfOrAncestorHasDirAutoAttribute flag true by default, which is used by functions like
        directionalityIfhasDirAutoAttribute to look for elements with dir=auto. Since dir=auto-ness of bdi
        elements can be overridden by dir content attribute, we must change and only change the default value.

        Tests: fast/text/international/bdi-dir-default-to-auto-expected.html
               fast/text/international/bdi-dir-default-to-auto.html

        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::collectMatchingRulesForList):
        * html/HTMLBDIElement.h: Added.
        (WebCore):
        (HTMLBDIElement):
        (WebCore::HTMLBDIElement::create):
        (WebCore::HTMLBDIElement::HTMLBDIElement): Sets selfOrAncestorHasDirAutoAttribute to true because
        bdi elements are treated as if it has dir=auto by default.
        * html/HTMLElement.cpp:
        (WebCore::elementAffectsDirectionality): Added. Checks if the specified element is bdi or
        has dir content attribute.
        (WebCore):
        (WebCore::setHasDirAutoFlagRecursively):
        (WebCore::HTMLElement::hasDirectionAuto): Added. Checks if the specified element should be treated
        as if it has dir=auto (bdi or element with dir=auto).
        (WebCore::HTMLElement::directionalityIfhasDirAutoAttribute):
        (WebCore::HTMLElement::adjustDirectionalityIfNeededAfterChildAttributeChanged):
        (WebCore::HTMLElement::adjustDirectionalityIfNeededAfterChildrenChanged):
        * html/HTMLElement.h:
        (HTMLElement):
        * html/HTMLTagNames.in: Use HTMLBDIElement instead of HTMLElement for constructing bdi element
        to set selfOrAncestorHasDirAutoAttribute true but still use HTMLElement for binding.

2012-03-21  Luke Macpherson  <macpherson@chromium.org>

        Use CSSPrimitiveValue::convertToLength() in a few places.
        https://bugs.webkit.org/show_bug.cgi?id=81492

        Reviewed by Eric Seidel.

        No new tests - refactoring only.

        CSSPrimitiveValue::convertToLength() provides the same functionality that is duplicated
        in many places in CSSStyleSelector. This patch removes some of that code duplication.

        * css/CSSStyleApplyProperty.cpp:
        (WebCore::ApplyPropertyVerticalAlign::applyValue):
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::collectMatchingRulesForList):

2012-03-21  Patrick Gansterer  <paroga@webkit.org>

        Build fix for ENABLE(SVG) && !ENABLE(FILTERS) after r111601.

        * rendering/svg/RenderSVGRoot.cpp:

2012-03-21  Patrick Gansterer  <paroga@webkit.org>

        Build fix for !ENABLE(INSPECTOR) after r104831.

        * bindings/js/ScriptDebugServer.cpp:
        (WebCore::ScriptDebugServer::dispatchDidParseSource):

2012-03-21  Xiaomei Ji  <xji@chromium.org>

        visual word movement: using cache to decrease the number of collectLeafBoxesInLogicalOrder on RootInlineBox
        https://bugs.webkit.org/show_bug.cgi?id=81408

        Reviewed by Ryosuke Niwa.

        Cache logically ordered leaf boxes under a particular root box.
        Also, move 'Vector<UChar, 1024> string' declared in visualWordPosition() to outside of loop (it is always
        clear-ed before use).

        * editing/visible_units.cpp:
        (CachedLogicallyOrderedLeafBoxes): Add class to cache logically ordered leaf boxes under a particular root box.
        (WebCore::CachedLogicallyOrderedLeafBoxes::size):
        (WebCore::CachedLogicallyOrderedLeafBoxes::firstBox):
        (WebCore):
        (WebCore::CachedLogicallyOrderedLeafBoxes::CachedLogicallyOrderedLeafBoxes):
        (WebCore::CachedLogicallyOrderedLeafBoxes::previousTextBox):
        (WebCore::CachedLogicallyOrderedLeafBoxes::nextTextBox):
        (WebCore::CachedLogicallyOrderedLeafBoxes::collectBoxes):
        (WebCore::CachedLogicallyOrderedLeafBoxes::boxIndexInLeaves):
        (WebCore::logicallyPreviousBox): Pass CachedLogicallyOrderedLeafBoxes object around.
        (WebCore::logicallyNextBox):
        (WebCore::wordBreakIteratorForMinOffsetBoundary):
        (WebCore::wordBreakIteratorForMaxOffsetBoundary):
        (WebCore::visualWordPosition):

2012-03-21  Dana Jansens  <danakj@chromium.org>

        [chromium] Early out in a new prepareToDraw() step if checkerboarding an accelerated animation in order to skip the frame
        https://bugs.webkit.org/show_bug.cgi?id=81437

        Reviewed by Adrienne Walker.

        Split CCLayerTreeHostImpl::drawLayers() into two phases:
        prepareToDraw() and drawLayers().

        When calculating a RenderPass, and we checkerboard a quad on a
        layer, bubble this info back up to CCLayerTreeHostImpl. If the
        layer is transforming in an animation, then abort the prepareToDraw()
        phase and cause it to return false back to the thread proxy.

        Unit test: CCLayerTreeHostImplTest.prepareToDrawFailsWhenAnimationUsesCheckerboard

        * platform/graphics/chromium/cc/CCLayerImpl.cpp:
        (WebCore::CCLayerImpl::appendQuads):
        * platform/graphics/chromium/cc/CCLayerImpl.h:
        (CCLayerImpl):
        * platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:
        (WebCore::CCLayerTreeHostImpl::calculateRenderPasses):
        (WebCore::CCLayerTreeHostImpl::prepareToDraw):
        (WebCore):
        (WebCore::CCLayerTreeHostImpl::drawLayers):
        * platform/graphics/chromium/cc/CCLayerTreeHostImpl.h:
        (CCLayerTreeHostImpl):
        (FrameData):
        * platform/graphics/chromium/cc/CCQuadCuller.cpp:
        (WebCore::CCQuadCuller::append):
        * platform/graphics/chromium/cc/CCQuadCuller.h:
        (CCQuadCuller):
        * platform/graphics/chromium/cc/CCRenderPass.cpp:
        (WebCore::CCRenderPass::appendQuadsForLayer):
        * platform/graphics/chromium/cc/CCRenderPass.h:
        (CCRenderPass):
        * platform/graphics/chromium/cc/CCScrollbarLayerImpl.cpp:
        (WebCore::CCScrollbarLayerImpl::appendQuads):
        * platform/graphics/chromium/cc/CCScrollbarLayerImpl.h:
        (CCScrollbarLayerImpl):
        * platform/graphics/chromium/cc/CCSingleThreadProxy.cpp:
        (WebCore::CCSingleThreadProxy::doComposite):
        * platform/graphics/chromium/cc/CCSolidColorLayerImpl.cpp:
        (WebCore::CCSolidColorLayerImpl::appendQuads):
        * platform/graphics/chromium/cc/CCSolidColorLayerImpl.h:
        (CCSolidColorLayerImpl):
        * platform/graphics/chromium/cc/CCTextureLayerImpl.cpp:
        (WebCore::CCTextureLayerImpl::appendQuads):
        * platform/graphics/chromium/cc/CCTextureLayerImpl.h:
        (CCTextureLayerImpl):
        * platform/graphics/chromium/cc/CCThreadProxy.cpp:
        (WebCore::CCThreadProxy::scheduledActionDrawAndSwap):
        * platform/graphics/chromium/cc/CCTiledLayerImpl.cpp:
        (WebCore::CCTiledLayerImpl::appendQuads):
        * platform/graphics/chromium/cc/CCTiledLayerImpl.h:
        (CCTiledLayerImpl):
        * platform/graphics/chromium/cc/CCVideoLayerImpl.cpp:
        (WebCore::CCVideoLayerImpl::appendQuads):
        * platform/graphics/chromium/cc/CCVideoLayerImpl.h:
        (CCVideoLayerImpl):

2012-03-21  Enrica Casucci  <enrica@apple.com>

        WebKitURLWithTitles pasteboard format should support URLs containing Emoji characters.
        https://bugs.webkit.org/show_bug.cgi?id=81835
        <rdar://problem/11082749>

        Reviewed by Brady Eidson.

        When writing the URL in the pasteboard for the WebURLWithTitles format,
        we use the user visible string instead of the original URL.
        In case of URL with Unicode characters, we lose the encoding.
        
        Added TestWebKitAPI test.

        * platform/mac/PasteboardMac.mm:
        (WebCore::writeURLForTypes): Writes to the pasteboard the original URL.

2012-03-21  Levi Weintraub  <leviw@chromium.org>

        Correct LayoutUnit usage in VisiblePosition.cpp
        https://bugs.webkit.org/show_bug.cgi?id=81775

        Reviewed by Eric Seidel.

        Correcting a mismatch between the .h and .cpp for the definition of localCaretRect,
        and properly using LayoutUnits for local coordinates.

        No new tests. No change in behavior.

        * editing/VisiblePosition.cpp:
        (WebCore::VisiblePosition::localCaretRect): Switching to return a LayoutRect, as in the
        header. Local coordinates are in LayoutUnits.
        (WebCore::VisiblePosition::absoluteCaretBounds): Using LayoutRect for the localCaretRect.
        (WebCore::VisiblePosition::lineDirectionPointForBlockDirectionNavigation): Ditto.

2012-03-21  Adam Klein  <adamk@chromium.org>

        "this" argument for MutationCallbacks should be the MutationObserver
        https://bugs.webkit.org/show_bug.cgi?id=81712

        Reviewed by Adam Barth.

        Test: fast/mutation/callback-arguments.html

        * bindings/js/JSCallbackData.cpp:
        (WebCore::JSCallbackData::invokeCallback): Add an overload that takes
        an explicit this argument and have the old method call the new one.
        * bindings/js/JSCallbackData.h:
        (JSCallbackData):
        * bindings/js/JSMutationCallbackCustom.cpp:
        (WebCore::JSMutationCallback::handleEvent): Call the new overload.
        * bindings/v8/custom/V8CustomVoidCallback.cpp:
        (WebCore::invokeCallback): Add an overload that takes an explicit this
        argument and have the old method call the new one.
        * bindings/v8/custom/V8CustomVoidCallback.h:
        (WebCore):
        * bindings/v8/custom/V8MutationCallbackCustom.cpp:
        (WebCore::V8MutationCallback::handleEvent): Call the new overload.

2012-03-21  Alexandru Chiculita  <achicu@adobe.com>

        [CSS Shaders] Make CSS Shaders compile on Chromium
        https://bugs.webkit.org/show_bug.cgi?id=81435

        Reviewed by Stephen White.

        This patch enables the CSS Shaders compile time flag, but keeps the runtime flag disabled.
        The only way to test the functionality now is to use the overridePreference from dump render tree.

        Also part of this patch I fix a layering violation: I removed the "Document" reference from the FECustomFilter.cpp and passed the
        HostWindow directly. There should be no problem when the HostWindow changes, because the RenderLayer and the FECustomFilter
        get recreated anyway.

        No new tests. I've updated the existing custom filter tests to run under Chromium and added the expected results.
        I've just added window.layoutTestController.overridePreference("WebKitCSSCustomFilterEnabled", "1") to force 
        enable the feature at runtime. 

        * loader/cache/CachedResource.cpp: Made CachedResource::ShaderResource report as ResourceRequest::TargetIsSubresource for Chromium.
        (WebCore::cachedResourceTypeToTargetType):

        * platform/graphics/filters/FECustomFilter.cpp:
        (WebCore::FECustomFilter::FECustomFilter): Removed Document and just used the HostWindow directly.
        (WebCore::FECustomFilter::create):
        (WebCore::FECustomFilter::initializeContext):
        (WebCore::FECustomFilter::bindVertexAttribute): There was a typo and instead of using the "size" parameter it always used 4 component attribute.
        Other drivers didn't complain about it, but it was clearly a bug.
        (WebCore::FECustomFilter::bindProgramAndBuffers): Reading the image back from GPU will flip vertically the framebuffer in Chromium. I've flipped the
        projection matrix only on Chromium, so that we get the correct result.

        * rendering/FilterEffectRenderer.cpp:
        (WebCore::FilterEffectRenderer::build): Passing the HostWindow instead of the Document.

2012-03-21  Mark Pilgrim  <pilgrim@chromium.org>

        Realphabetize about webaudio move
        https://bugs.webkit.org/show_bug.cgi?id=81825

        Reviewed by Adam Barth.

        No new tests, all existing tests pass.

        * CMakeLists.txt:

2012-03-21  Anders Carlsson  <andersca@apple.com>

        Evict tiles from pages in background tabs
        https://bugs.webkit.org/show_bug.cgi?id=81829
        <rdar://problem/10866152>

        Reviewed by Andreas Kling.

        When the tile cache for a page is no longer in a window (which happens when it's moved to 
        a background tab), schedule a tile revalidation after 4 seconds. This tile revalidation 
        will ensure that tiles outside of the visible rect will be dropped.

        * platform/graphics/ca/mac/TileCache.h:
        (TileCache):
        * platform/graphics/ca/mac/TileCache.mm:
        (WebCore::TileCache::tileCacheLayerBoundsChanged):
        (WebCore::TileCache::setIsInWindow):
        (WebCore::TileCache::tileCoverageRect):
        (WebCore):
        (WebCore::TileCache::scheduleTileRevalidation):
        (WebCore::TileCache::revalidateTiles):

2012-03-21  Stephen Chenney  <schenney@chromium.org>

        SVG layout leaves objects still needing layout
        https://bugs.webkit.org/show_bug.cgi?id=81006

        Reviewed by Nikolas Zimmermann.

        Change the layout of SVG objects such that resources that trigger
        layout of other objects are handled in a distinct pass, and then
        objects still requiring layout are laid out again.

        Test: svg/custom/delete-text-innerText-crash.html

        * rendering/svg/RenderSVGResourceContainer.cpp:
        (WebCore::RenderSVGResourceContainer::layout):
        * rendering/svg/RenderSVGResourceMarker.cpp:
        (WebCore::RenderSVGResourceMarker::layout):
        * rendering/svg/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::layout):
        (WebCore::RenderSVGRoot::addResourceForClientInvalidation):
        (WebCore):
        * rendering/svg/RenderSVGRoot.h:
        (RenderSVGRoot):

2012-03-21  Tim Horton  <timothy_horton@apple.com>

        Make use of CG rounded-rect primitives
        https://bugs.webkit.org/show_bug.cgi?id=79932
        <rdar://problem/9274953>

        Reviewed by Simon Fraser.

        Portions of patch by Nikolas Zimmermann and Mustafizur Rahaman.

        Dispatch to potentially platform-specific rounded rectangle path
        construction from addPathForRoundedRect. Make use of this to call
        wkCGPathAddRoundedRect on Lion and above, as long as the rounded
        corners are all equivalent.

        The origin of the stroke dash differs between the bezier approach
        and the path added by wkCGPathAddRoundedRect, so Path::addRoundedRect()
        takes a new parameter allowing code which is sensitive to stroke dash
        origin (i.e. SVG) to fall back to the old behavior if need be.

        Make use of the new Path::addRoundedRect() parameter to fall back to
        the old (bezier) rounded-rect behavior when constructing a dashed SVG path,
        in order to continue complying with the spec.

        No new tests, as this is covered by many that use rounded corners,
        and is only a performance improvement.

        * WebCore.exp.in:
        * platform/graphics/Path.cpp:
        (WebCore::Path::addRoundedRect):
        (WebCore):
        (WebCore::Path::addPathForRoundedRect):
        * platform/graphics/Path.h:
        (Path):
        * platform/graphics/cg/PathCG.cpp:
        (WebCore::Path::platformAddPathForRoundedRect):
        (WebCore):
        * platform/mac/WebCoreSystemInterface.h:
        * platform/mac/WebCoreSystemInterface.mm:
        * rendering/svg/SVGPathData.cpp:
        (WebCore::updatePathFromRectElement):

2012-03-21  David Reveman  <reveman@chromium.org>

        [Chromium] GL_EXT_occlusion_query_boolean and GL_CHROMIUM_command_buffer_query support.
        https://bugs.webkit.org/show_bug.cgi?id=80988

        Reviewed by Adrienne Walker.

        Expose EXT_occlusion_query API to WebKit compositor. Add
        GL_EXT_occlusion_query_boolean and GL_CHROMIUM_command_buffer_query
        enums.

        * platform/graphics/chromium/Extensions3DChromium.h:
        (Extensions3DChromium):

2012-03-21  Tony Chang  <tony@chromium.org>

        compute the sign of flexibility for new flexbox
        https://bugs.webkit.org/show_bug.cgi?id=81722

        Reviewed by Ojan Vafai.

        This implements the computation of the sign of flexibility used by the
        new flexing algorithm.
        http://dev.w3.org/csswg/css3-flexbox/#resolve-the-flexible-lengths

        No new tests, we don't use the sign of flexibility yet.

        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::layoutFlexItems):
        (WebCore::RenderFlexibleBox::computeNextFlexLine): Compute the size
        adjusted for min/max as well as not adjusted.
        (WebCore::RenderFlexibleBox::resolveFlexibleLengths): Renamed to match
        spec text better.
        * rendering/RenderFlexibleBox.h: Added enum for flex sign.

2012-03-21  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Extract WebInspector.UIBreakpoint from WebInspector.Breakpoint.
        https://bugs.webkit.org/show_bug.cgi?id=81669

        Reviewed by Pavel Feldman.

        * inspector/front-end/BreakpointManager.js:
        (WebInspector.BreakpointManager.get for):
        (WebInspector.BreakpointManager):
        (WebInspector.BreakpointManager.prototype.uiSourceCodeAdded):
        (WebInspector.BreakpointManager.prototype.uiSourceCodeRemoved):
        (WebInspector.BreakpointManager.prototype.breakpointsForUISourceCode):
        (WebInspector.BreakpointManager.prototype.setBreakpoint):
        (WebInspector.BreakpointManager.prototype.removeBreakpoint):
        (WebInspector.BreakpointManager.prototype._innerRemoveBreakpoint):
        (WebInspector.BreakpointManager.prototype.removeAllBreakpoints):
        (WebInspector.BreakpointManager.prototype._moveBreakpointInUI):
        (WebInspector.BreakpointManager.prototype._uiBreakpoints.get this):
        (WebInspector.BreakpointManager.prototype._uiBreakpoints):
        (WebInspector.BreakpointManager.prototype.get _uiBreakpoint):
        (WebInspector.BreakpointManager.prototype._addBreakpointToUI):
        (WebInspector.BreakpointManager.prototype._removeBreakpointFromUI):
        (WebInspector.BreakpointManager.prototype._breakpoints):
        (WebInspector.BreakpointManager.prototype._breakpoint):
        (WebInspector.BreakpointManager.prototype._addBreakpointToModel):
        (WebInspector.BreakpointManager.prototype._removeBreakpointFromModel):
        (WebInspector.BreakpointManager.prototype._forEachBreakpoint):
        (WebInspector.BreakpointManager.prototype._setBreakpointInDebugger):
        (WebInspector.BreakpointManager.prototype._removeBreakpointFromDebugger):
        (WebInspector.BreakpointManager.prototype.debuggerReset):
        (WebInspector.Breakpoint.prototype.serialize):
        (WebInspector.Breakpoint.prototype.get uiBreakpoint):
        (WebInspector.Breakpoint.prototype.createUIBreakpoint):
        (WebInspector.Breakpoint.prototype.removeUIBreakpoint):
        (WebInspector.UIBreakpoint):
        * inspector/front-end/DebuggerPresentationModel.js:
        (WebInspector.DebuggerPresentationModel.prototype._handleUISourceCodeListChanged):
        (WebInspector.DebuggerPresentationModel.prototype.findBreakpoint):
        (WebInspector.DebuggerPresentationModel.prototype._breakpointAdded):
        (WebInspector.DebuggerPresentationModel.prototype._breakpointRemoved):
        * inspector/front-end/ScriptsPanel.js:

2012-03-21  Anders Carlsson  <andersca@apple.com>

        TileCache needs to know if its containing page is in a window
        https://bugs.webkit.org/show_bug.cgi?id=81821

        Reviewed by Andreas Kling.

        This is in preparation for throwing away invisible tiles in background tabs to reduce memory usage.

        * page/FrameView.cpp:
        (WebCore::FrameView::didMoveOnscreen):
        (WebCore::FrameView::willMoveOffscreen):
        * page/Page.cpp:
        (WebCore::Page::Page):
        (WebCore::Page::didMoveOnscreen):
        (WebCore::Page::willMoveOffscreen):
        * page/Page.h:
        (WebCore::Page::isOnscreen):
        (Page):
        * platform/graphics/TiledBacking.h:
        (TiledBacking):
        * platform/graphics/ca/mac/TileCache.h:
        (TileCache):
        * platform/graphics/ca/mac/TileCache.mm:
        (WebCore::TileCache::TileCache):
        (WebCore::TileCache::setIsInWindow):
        (WebCore):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::RenderLayerBacking):

2012-03-21  Xingnan Wang  <xingnan.wang@intel.com>

        Web audio layout test failed in debug with an ASSERT error in ReverbConvolverStage.cpp
        https://bugs.webkit.org/show_bug.cgi?id=81744

        Reviewed by Chris Rogers.

        * platform/audio/ReverbConvolverStage.cpp:
        (WebCore::ReverbConvolverStage::ReverbConvolverStage):

2012-03-21  Xiaomei Ji  <xji@chromium.org>

        [chromium] Font fallback in cr-win is wrong for string contains zero-width-space.
        https://bugs.webkit.org/show_bug.cgi?id=79961

        Reviewed by Adam Barth.

        Treat zero-width-space (\u200B) as true for treatAsZeroWidthSpaceInComplexScipt().

        * platform/graphics/Font.h:
        (WebCore::Font::treatAsZeroWidthSpaceInComplexScript):
        * platform/graphics/mac/ComplexTextController.cpp:
        (WebCore::ComplexTextController::adjustGlyphsAndAdvances):
        * platform/graphics/win/UniscribeController.cpp:
        (WebCore::UniscribeController::shapeAndPlaceItem):

2012-03-21  Patrick Gansterer  <paroga@webkit.org>

        Build fix for !ENABLE(INSPECTOR) after r111005.

        * inspector/ContentSearchUtils.h:

2012-03-21  Ulan Degenbaev  <ulan@chromium.org>

        [V8] V8GCForContextDispose should indicate whether a context is disposed for the main frame or not
        https://bugs.webkit.org/show_bug.cgi?id=81200

        Reviewed by Adam Barth.

        Pass a hint to V8::IdleNotification that requests more aggressive GC
        when a main frame context is disposed and requests incremental GC otherwise.

        * bindings/v8/V8DOMWindowShell.cpp:
        (WebCore::V8DOMWindowShell::disposeContextHandles):
        * bindings/v8/V8GCForContextDispose.cpp:
        (WebCore::V8GCForContextDispose::V8GCForContextDispose):
        (WebCore::V8GCForContextDispose::notifyContextDisposed):
        (WebCore::V8GCForContextDispose::pseudoIdleTimerFired):
        * bindings/v8/V8GCForContextDispose.h:
        (V8GCForContextDispose):

2012-03-21  Nat Duca  <nduca@chromium.org>

        [chromium] CCThreadProxy must initialize frameBeginTime to monotonicallyIncreasingTime rather than zero
        https://bugs.webkit.org/show_bug.cgi?id=81790

        Reviewed by James Robinson.

        * platform/graphics/chromium/cc/CCThreadProxy.cpp:
        (WebCore::CCThreadProxy::scheduledActionBeginFrame):

2012-03-21  Xingnan Wang  <xingnan.wang@intel.com>

        Add multichannel support in RealtimeAnalyser
        https://bugs.webkit.org/show_bug.cgi?id=81745

        Reviewed by Chris Rogers.

        * Modules/webaudio/RealtimeAnalyser.cpp:
        (WebCore::RealtimeAnalyser::writeInput):
        (WebCore):

2012-03-21  Eric Carlson  <eric.carlson@apple.com>

        Removing HTMLTrackElement does not delete TextTrack
        https://bugs.webkit.org/show_bug.cgi?id=80873

        Reviewed by Antti Koivisto.

        No new tests, but media/track/track-language-preference.html has been updated
        to test this fix.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::didAddTrack): Renamed from trackWasAdded.
        (WebCore::HTMLMediaElement::willRemoveTrack): Renamed from trackWasRemoved because it is
        called before the track is removed, to allow the TextTrack to be removed.
        * html/HTMLMediaElement.h:

        * html/HTMLTrackElement.cpp:
        (WebCore::HTMLTrackElement::insertedIntoTree): Renamed from insertedIntoDocument
        (WebCore::HTMLTrackElement::willRemove): Renamed from removedFromDocument.
        * html/HTMLTrackElement.h:

        * html/track/LoadableTextTrack.cpp:
        (WebCore::LoadableTextTrack::trackElementIndex): Don't include tracks that are not in the
        document in the calcualtion.

2012-03-21  Zeno Albisser  <zeno@webkit.org>

        [Qt][Mac] ranlib segfaults when creating symbol tables for libWebCore.a.
        https://bugs.webkit.org/show_bug.cgi?id=81750

        Building WebCore on mac currently creates an archive that is bigger than
        4GB. But ranlib fails to create a symbol table for such a big archive,
        even on 64bit machines.
        Therefore we start using SVGAllInOne.cpp when building debug
        on mac. This reduces the size of the archive by about 300MB.

        Reviewed by Tor Arne Vestbø.

        * Target.pri:

2012-03-21  Tommy Widenflycht  <tommyw@google.com>

        [chromium] MediaStream API (JSEP): Introducing WebSessionDescription and WebIceCandidate
        https://bugs.webkit.org/show_bug.cgi?id=81339

        Reviewed by Adam Barth.

        Not possible to test until the entire JSEP feature is commited.

        * Modules/mediastream/IceCandidate.cpp:
        (WebCore::IceCandidate::toSdp):
        * Modules/mediastream/SessionDescription.cpp:
        (WebCore::SessionDescription::toSdp):
        * platform/mediastream/IceCandidateDescriptor.cpp:
        (WebCore::IceCandidateDescriptor::toSDP):
        * platform/mediastream/IceCandidateDescriptor.h:
        (IceCandidateDescriptor):
        * platform/mediastream/MediaStreamCenter.cpp:
        (WebCore::MediaStreamCenter::constructSDP):
        * platform/mediastream/MediaStreamCenter.h:
        (MediaStreamCenter):
        * platform/mediastream/SessionDescriptionDescriptor.cpp:
        (WebCore::SessionDescriptionDescriptor::SessionDescriptionDescriptor):
        (WebCore::SessionDescriptionDescriptor::toSDP):
        (WebCore::SessionDescriptionDescriptor::initialSDP):
        * platform/mediastream/SessionDescriptionDescriptor.h:
        (SessionDescriptionDescriptor):

2012-03-21  Yuta Kitamura  <yutak@chromium.org>

        Use RFC version of WebSocket protocol by default
        https://bugs.webkit.org/show_bug.cgi?id=81718

        Reviewed by Kent Tamura.

        Flip the default value of Settings::m_useHixie76WebSocketProtocol so WebKit ports will use
        RFC version of WebSocket protocol by default.

        All the existing ports already use the RFC protocol as of now, so this change will not make
        any impact (hopefully).

        No new tests. No change in functionality.

        * page/Settings.cpp:
        (WebCore::Settings::Settings):

2012-03-21  Andrey Kosyakov  <caseq@chromium.org>

        Web Inspector: only show JS event listeners in Event Listeners tab of Elements panel
        https://bugs.webkit.org/show_bug.cgi?id=81798

        Reviewed by Pavel Feldman.

        * bindings/js/JSInjectedScriptHostCustom.cpp:
        (WebCore::getJSListenerFunctions):
        * bindings/js/ScriptEventListener.cpp:
        (WebCore::eventListenerHandlerBody):
        (WebCore::eventListenerHandlerLocation):
        * bindings/v8/custom/V8InjectedScriptHostCustom.cpp:
        (WebCore::getJSListenerFunctions):
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::getEventListeners):

2012-03-21  Andrey Kosyakov  <caseq@chromium.org>

        EventListener::Type enum has unused member InspectorDOMAgentType
        https://bugs.webkit.org/show_bug.cgi?id=81794

        Reviewed by Pavel Feldman.

        * dom/EventListener.h:

2012-03-21  Tom Hudson  <tomhudson@google.com>

        Incremental cleanup of BitmapImage: inlined virtual functions
        https://bugs.webkit.org/show_bug.cgi?id=81688

        Reviewed by James Robinson.

        No change in functionality, so no new tests.

        Move virtual functions defined in headers into .cpp files.

        * WebCore.gypi:
        * platform/graphics/BitmapImage.cpp:
        (WebCore::BitmapImage::isBitmapImage):
        (WebCore):
        (WebCore::BitmapImage::hasSingleSecurityOrigin):
        (WebCore::BitmapImage::nativeImageForCurrentFrame):
        (WebCore::BitmapImage::currentFrameHasAlpha):
        (WebCore::BitmapImage::notSolidColor):
        (WebCore::BitmapImage::decodedSize):
        (WebCore::BitmapImage::mayFillWithSolidColor):
        (WebCore::BitmapImage::solidColor):
        * platform/graphics/BitmapImage.h:
        (BitmapImage):
        * platform/graphics/skia/BitmapImageSingleFrameSkia.cpp: Added.
        (WebCore):
        (WebCore::BitmapImageSingleFrameSkia::isBitmapImage):
        (WebCore::BitmapImageSingleFrameSkia::currentFrameHasAlpha):
        (WebCore::BitmapImageSingleFrameSkia::size):
        (WebCore::BitmapImageSingleFrameSkia::destroyDecodedData):
        (WebCore::BitmapImageSingleFrameSkia::decodedSize):
        (WebCore::BitmapImageSingleFrameSkia::nativeImageForCurrentFrame):
        (WebCore::BitmapImageSingleFrameSkia::notSolidColor):
        * platform/graphics/skia/BitmapImageSingleFrameSkia.h:
        (BitmapImageSingleFrameSkia):

2012-03-21  Alexey Proskuryakov  <ap@apple.com>

        Remove obsolete File attributes
        https://bugs.webkit.org/show_bug.cgi?id=79383

        Reviewed by Hajime Morita.

        * bindings/objc/PublicDOMInterfaces.h:
        * fileapi/File.h:
        * fileapi/File.idl:
        Removed fileName and fileSize, they have different names now.

        * html/FileInputType.cpp:
        (WebCore::FileInputType::appendFormData):
        (WebCore::FileInputType::getTypeSpecificValue):
        (WebCore::FileInputType::defaultToolTip):
        Updated to use new function names.

2012-03-21  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        TiledBackingStore: Create the first round of tiles synchronously after setting the visible rect.
        https://bugs.webkit.org/show_bug.cgi?id=81762

        Reviewed by Kenneth Rohde Christiansen.

        The first round of tiles should cover completely the visible rect.
        Creating the tiles synchronously allows us to get the new tiles immediately
        and prevents an extra AC layers sync to be able to remove the old tiles.

        At some point it might also make sense to remove the tile creation timer
        completely.

        * platform/graphics/TiledBackingStore.cpp:
        (WebCore::TiledBackingStore::coverWithTilesIfNeeded):

2012-03-19  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        TiledBackingStore: When checking if the visible area is covered, only convert to scaled coordinates once.
        https://bugs.webkit.org/show_bug.cgi?id=81519

        Reviewed by Kenneth Rohde Christiansen.

        Both visibleRect and coverageRatio call mapFromContents on the input rect,
        this woulc cause the coverageRatio to never reach 1.0 when the contents is
        scaled up.

        * platform/graphics/TiledBackingStore.cpp:
        (WebCore::TiledBackingStore::visibleAreaIsCovered):

2012-03-21  Mao Yujie  <yujie.mao@intel.com>

        MediaStream API: Need to support MediaStream constructor for JSC
        https://bugs.webkit.org/show_bug.cgi?id=78781

        Reviewed by Adam Barth.

        No new tests.

        * Modules/mediastream/DOMWindowMediaStream.idl:
        * bindings/generic/RuntimeEnabledFeatures.h:
        (WebCore::RuntimeEnabledFeatures::webkitMediaStreamEnabled):

2012-03-21  Philip Rogers  <pdr@google.com>

        Skip building resources if SVGTRef is not in a document
        https://bugs.webkit.org/show_bug.cgi?id=81473

        Reviewed by Nikolas Zimmermann.

        We can skip the building of pending resources in SVGTRef if we're not
        yet in a document. This mirrors the nearly identical logic in
        SVGUseElement::buildPendingResource() and
        SVGFEImageElement::buildPendingResource().

        Test: http/tests/svg/tref-adoptNode-crash.html

        * svg/SVGTRefElement.cpp:
        (WebCore::SVGTRefElement::buildPendingResource):

2012-03-21  Sami Kyostila  <skyostil@chromium.org>

        [chromium] Use floating point scroll deltas for layers
        https://bugs.webkit.org/show_bug.cgi?id=81546

        Reviewed by James Robinson.

        Use floating point scroll deltas for layers instead of integral scroll
        deltas. This is because due to page scaling it may be necessary to
        scroll layers in sub-CSS-pixel steps to avoid visible jumps. When the
        floating point scroll offset is committed to the main thread, it is
        truncated to integer, but the fractional part is kept on the CC side to
        make sure fractional scroll offsets are accumulated correctly over
        multiple commits.

        Test: CCLayerTreeHostTestFractionalScroll

        * platform/graphics/FloatPoint.h:
        (WebCore::toSize):
        (WebCore):
        * platform/graphics/chromium/cc/CCLayerImpl.cpp:
        (WebCore::CCLayerImpl::scrollBy):
        (WebCore::CCLayerImpl::setScrollDelta):
        * platform/graphics/chromium/cc/CCLayerImpl.h:
        (WebCore::CCLayerImpl::scrollDelta):
        (CCLayerImpl):
        * platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:
        (WebCore::CCLayerTreeHostImpl::startPageScaleAnimation):
        (WebCore::CCLayerTreeHostImpl::adjustScrollsForPageScaleChange):
        (WebCore::CCLayerTreeHostImpl::processScrollDeltas):
        (WebCore::CCLayerTreeHostImpl::animatePageScale):

2012-03-21  Li Yin  <li.yin@intel.com>

        [WebSocket]The Sec-WebSocket-Accept MUST NOT appear more than once in an HTTP response
        https://bugs.webkit.org/show_bug.cgi?id=81655

        Reviewed by Adam Barth.

        Test: http/tests/websocket/tests/hybi/handshake-fail-by-more-accept-header.html

        * Modules/websockets/WebSocketHandshake.cpp:
        (WebCore::WebSocketHandshake::readHTTPHeaders):

2012-03-21  Alexei Filippov  <alexeif@chromium.org>

        Web Inspector: Speedup heap snapshot loading.
        https://bugs.webkit.org/show_bug.cgi?id=81788

        Reviewed by Yury Semikhatsky.

        * inspector/front-end/HeapSnapshot.js:
        (WebInspector.HeapSnapshotLoader.prototype._parseNodes):

2012-03-21  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: get rid of isInEditMode, use isBeingEdited on particular element.
        https://bugs.webkit.org/show_bug.cgi?id=81766

        Reviewed by Yury Semikhatsky.

        We should check event target and its ancestors for being edited, not use some
        global property. This change also introduces Event.prototype.consume so that we
        were consistently consuming events.

        * inspector/front-end/AdvancedSearchController.js:
        (WebInspector.SearchView.prototype._onKeyDown):
        * inspector/front-end/BreakpointsSidebarPane.js:
        (WebInspector.JavaScriptBreakpointsSidebarPane.prototype._breakpointCheckboxClicked):
        * inspector/front-end/CSSSelectorProfileView.js:
        * inspector/front-end/Checkbox.js:
        (WebInspector.Checkbox.prototype.addEventListener):
        * inspector/front-end/ConsoleView.js:
        (WebInspector.ConsoleView.prototype._enterKeyPressed):
        (WebInspector.ConsoleGroup.prototype._titleClicked):
        * inspector/front-end/ContextMenu.js:
        (WebInspector.ContextMenu.prototype.show):
        * inspector/front-end/DataGrid.js:
        (WebInspector.DataGrid.prototype._keyDown):
        * inspector/front-end/DatabaseQueryView.js:
        (WebInspector.DatabaseQueryView.prototype._enterKeyPressed):
        * inspector/front-end/DetailedHeapshotView.js:
        (WebInspector.DetailedHeapshotView.prototype._mouseDownInContentsGrid):
        (WebInspector.DetailedHeapshotView.prototype._startRetainersHeaderDragging):
        (WebInspector.DetailedHeapshotView.prototype._retainersHeaderDragging):
        (WebInspector.DetailedHeapshotView.prototype._endRetainersHeaderDragging):
        * inspector/front-end/Dialog.js:
        (WebInspector.Dialog.prototype._onKeyDown):
        * inspector/front-end/Drawer.js:
        (WebInspector.Drawer.prototype._startStatusBarDragging):
        (WebInspector.Drawer.prototype._statusBarDragging):
        (WebInspector.Drawer.prototype._endStatusBarDragging):
        * inspector/front-end/EventListenersSidebarPane.js:
        (WebInspector.EventListenersSidebarPane.get if):
        * inspector/front-end/HelpScreen.js:
        (WebInspector.HelpScreen.prototype._onKeyDown):
        * inspector/front-end/InspectorView.js:
        (WebInspector.InspectorView.prototype._keyDown):
        * inspector/front-end/MetricsSidebarPane.js:
        (WebInspector.MetricsSidebarPane.prototype._highlightDOMNode):
        * inspector/front-end/NetworkPanel.js:
        * inspector/front-end/Object.js:
        (WebInspector.Event.prototype.preventDefault):
        (WebInspector.Event.prototype.consume):
        * inspector/front-end/ObjectPropertiesSection.js:
        (WebInspector.ObjectPropertyTreeElement.prototype._promptKeyDown):
        * inspector/front-end/ProfileView.js:
        * inspector/front-end/SearchController.js:
        (WebInspector.SearchController.prototype._onKeyDown):
        * inspector/front-end/Section.js:
        (WebInspector.Section.prototype.handleClick):
        * inspector/front-end/Settings.js:
        (WebInspector.ExperimentsSettings):
        * inspector/front-end/SoftContextMenu.js:
        (.WebInspector.SoftContextMenu.prototype.show):
        (.WebInspector.SoftContextMenu.prototype._menuItemMouseDown):
        (.WebInspector.SoftContextMenu.prototype._menuKeyDown):
        (.WebInspector.SoftContextMenu.prototype._discardMenu):
        * inspector/front-end/Spectrum.js:
        (WebInspector.Spectrum.draggable.consume):
        (WebInspector.Spectrum.draggable.start):
        (WebInspector.Spectrum.draggable.stop):
        (WebInspector.Spectrum.draggable):
        (WebInspector.Spectrum.prototype._onKeyDown):
        * inspector/front-end/StylesSidebarPane.js:
        (WebInspector.StylesSidebarPane.muteEventListener):
        (WebInspector.StylesSidebarPane):
        (WebInspector.StylesSidebarPane.prototype.set _createNewRule):
        (WebInspector.StylesSidebarPane.prototype._toggleElementStatePane):
        (WebInspector.StylePropertiesSection.prototype._handleEmptySpaceClick):
        (WebInspector.StylePropertiesSection.prototype._handleSelectorClick):
        (WebInspector.StylePropertyTreeElement.prototype.updateTitle.):
        (WebInspector.StylePropertyTreeElement.prototype):
        * inspector/front-end/TextPrompt.js:
        (WebInspector.TextPrompt.prototype.onKeyDown):
        (WebInspector.TextPromptWithHistory.prototype.defaultKeyHandler):
        (WebInspector.TextPrompt.SuggestBox.prototype._onItemMouseDown):
        * inspector/front-end/TextViewer.js:
        (WebInspector.TextViewer.prototype._handleKeyDown):
        * inspector/front-end/Toolbar.js:
        (WebInspector.ToolbarDropdown.prototype._onKeyDown):
        * inspector/front-end/UIUtils.js:
        (WebInspector.isBeingEdited):
        (WebInspector.startEditing):
        * inspector/front-end/View.js:
        (WebInspector.View.prototype._doLoadCSS):
        * inspector/front-end/WatchExpressionsSidebarPane.js:
        (WebInspector.WatchExpressionsSidebarPane.prototype._addButtonClicked):
        (WebInspector.WatchExpressionsSidebarPane.prototype._refreshButtonClicked):
        * inspector/front-end/inspector.js:
        (WebInspector.documentClick.followLink):
        (WebInspector.documentClick):
        (WebInspector.documentKeyDown):
        (WebInspector.postDocumentKeyDown):
        (WebInspector.addMainEventListeners):
        * inspector/front-end/treeoutline.js:
        (TreeOutline.prototype._treeKeyPress):
        (TreeOutline.prototype._treeKeyDown):
        (TreeOutline.prototype._searchInputKeyDown):
        (TreeElement.treeElementToggled):
        (TreeElement.prototype.selectOnMouseDown):
        * inspector/front-end/utilities.js:
        (Event.prototype.consume):

2012-03-21  Yury Semikhatsky  <yurys@chromium.org>

        Web Inspector: event listener section doesn't show all event listeners of the element ancestors
        https://bugs.webkit.org/show_bug.cgi?id=81782

        Event listeners section now contains all event listeners for the selected
        element ancestors chain (in case option "All Nodes" is selected).

        Reviewed by Pavel Feldman.

        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::getEventListenersForNode):
        * inspector/front-end/EventListenersSidebarPane.js:
        (WebInspector.EventListenersSidebarPane.prototype.update.callback):
        (WebInspector.EventListenersSidebarPane.prototype.update):
        (WebInspector.EventListenersSidebarPane.prototype):

2012-03-21  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: HeapSnapshot: move all builders and calculation calls to HeapSnapshot._init function.
        https://bugs.webkit.org/show_bug.cgi?id=81784

        Reviewed by Yury Semikhatsky.

        * inspector/front-end/HeapSnapshot.js:
        (WebInspector.HeapSnapshot.prototype._init):
        (WebInspector.HeapSnapshot.prototype.dispose):
        (WebInspector.HeapSnapshot.prototype._retainersForNode):
        (WebInspector.HeapSnapshot.prototype._dominatedNodesOfNode):
        (WebInspector.HeapSnapshot.prototype._flagsOfNode):
        (WebInspector.HeapSnapshot.prototype.aggregates):
        (WebInspector.HeapSnapshot.prototype._buildRetainers):
        (WebInspector.HeapSnapshot.prototype.get nodeIndexes):

2012-03-21  Jessie Berlin  <jberlin@apple.com>

        WTF headers should be in $(ConfigurationBuildDir)\include\private\wtf, not
        $(ConfigurationBuildDir)\include\private\JavaScriptCore\wtf.
        https://bugs.webkit.org/show_bug.cgi?id=81739

        Reviewed by Dan Bernstein.

        * WebCore.vcproj/WebCore.vcproj:
        Look for AtomicString.cpp, StringBuilder.cpp, StringImpl.cpp, and WTFString.cpp in the wtf
        subdirectory of the build output, not the JavaScriptCore/wtf subdirectory.

2012-03-21  Jonathan Dong  <jonathan.dong@torchmobile.com.cn>

        [BlackBerry] Credential save and autofill implemetation
        https://bugs.webkit.org/show_bug.cgi?id=80401

        Reviewed by Rob Buis.

        Added interface function authenticationChallenge() and
        notifyShouldSaveCredential() into PageClientBlackBerry.
        As this class is our platform specific interface,
        by doing this we don't need to add an interface function
        in class FrameLoaderClient which is a platform
        independent interface.

        No new tests.

        * platform/blackberry/PageClientBlackBerry.h:
        (WebCore):
        * platform/network/blackberry/NetworkJob.cpp:
        (WebCore::NetworkJob::sendRequestWithCredentials):

2012-03-21  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: HeapProfiler: DOM node id can overflow Int32.
        https://bugs.webkit.org/show_bug.cgi?id=81776

        Reviewed by Pavel Feldman.

        * inspector/front-end/HeapSnapshot.js:
        (WebInspector.Uint32Array):
        (WebInspector.HeapSnapshotLoader.prototype.pushJSONChunk):
        (WebInspector.HeapSnapshot.prototype._buildReverseIndex.var):
        (WebInspector.HeapSnapshot.prototype._buildReverseIndex):
        (WebInspector.HeapSnapshot.prototype._buildNodeIndex):

2012-03-21  Tim Dresser  <tdresser@chromium.org>

        [chromium] Increase size of Combo Box Options for touch and high DPI devices
        https://bugs.webkit.org/show_bug.cgi?id=80027

        Reviewed by Darin Fisher.

        Scale Combo box popups by defaultDeviceScaleFactor, and add padding to
        <option> elements when touch is enabled.

        Manually tested with --default-device-scale-factor=1,2 and unset.
        Each of these were tested with RuntimeEnabledFeatures::touchEnabled
        set to true and false.

        * platform/chromium/PopupListBox.cpp:
        (WebCore::PopupListBox::paint):
        (WebCore::PopupListBox::paintRow):
        (WebCore::PopupListBox::getRowHeight):
        * platform/chromium/PopupListBox.h:
        (PopupContainerSettings):
        * platform/chromium/PopupMenuChromium.cpp:
        (WebCore):
        (WebCore::PopupMenuChromium::show):
        * platform/chromium/PopupMenuChromium.h:
        (WebCore::PopupMenuChromium::optionPaddingForTouch):
        (WebCore::PopupMenuChromium::setOptionPaddingForTouch):
        (PopupMenuChromium):
        * rendering/RenderMenuList.cpp:
        (WebCore::RenderMenuList::showPopup):

2012-03-21  Takashi Toyoshima  <toyoshim@chromium.org>

        [Chromium] [WebSocket] provide WebFrameClient with a chance of
        accessing to opening WebSocketStreamHandle.
        https://bugs.webkit.org/show_bug.cgi?id=78459

        Reviewed by Kent Tamura and Darin Fisher.

        Add willOpenSocketStream client function to WebFrameClient with an
        argument representing an opening SocketStreamHandle.
        These mechanisms provide embedders with a chance to bind arbitrary
        data to a WebSocketStreamHandle from WebFrameClient to which the
        WebSocket object having the WebSocketStreamHandle belongs.

        No new tests because this change just provide mechanisms to embedders.

        * Modules/websockets/WebSocketChannel.cpp: Implement willOpenSocketStream to call a client function in WebFrameClient.
        (WebCore::WebSocketChannel::willOpenSocketStream):
        (WebCore):
        * Modules/websockets/WebSocketChannel.h: Add willOpenSocketStream declaration.
        (WebSocketChannel):
        * loader/FrameLoaderClient.h: Add dispatchWillOpenSocketStream declaration.
        (WebCore):
        (FrameLoaderClient):
        (WebCore::FrameLoaderClient::dispatchWillOpenSocketStream):
        * platform/network/SocketStreamHandleClient.h: Add willOpenSocketStream declaration.
        (WebCore::SocketStreamHandleClient::willOpenSocketStream):

2012-03-21  Vineet Chaudhary  <rgf748@motorola.com>

        https://bugs.webkit.org/show_bug.cgi?id=81761
        Fix Gobject binding for sequence<T> for function return type.

        Reviewed by Kentaro Hara.

        No new tests.

        * bindings/scripts/CodeGeneratorGObject.pm:
        (SkipFunction): Skip function with sequence<T> return type.
        * bindings/scripts/test/GObject/WebKitDOMTestObj.cpp:
        (webkit_dom_test_obj_method_with_sequence_arg):
        * bindings/scripts/test/GObject/WebKitDOMTestObj.h:

2012-03-21  Andrey Kosyakov  <caseq@chromium.org>

        Unreviewed build fix for r111529.

        * inspector/InjectedScriptHost.h:
        (WebCore):

2012-03-21  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r111497, r111506, r111508, and
        r111513.
        http://trac.webkit.org/changeset/111497
        http://trac.webkit.org/changeset/111506
        http://trac.webkit.org/changeset/111508
        http://trac.webkit.org/changeset/111513
        https://bugs.webkit.org/show_bug.cgi?id=81774

        It broke 2 tests on all platform (Requested by Ossy on
        #webkit).

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::collectMatchingRulesForList):
        * css/SelectorChecker.cpp:
        (WebCore::SelectorChecker::checkOneSelector):
        * html/HTMLKeygenElement.cpp:
        (WebCore::HTMLKeygenElement::HTMLKeygenElement):
        * html/HTMLOptionElement.cpp:
        (WebCore::HTMLOptionElement::HTMLOptionElement):
        (WebCore::HTMLOptionElement::create):
        (WebCore::HTMLOptionElement::attach):
        (WebCore::HTMLOptionElement::detach):
        (WebCore::HTMLOptionElement::formControlType):
        (WebCore):
        (WebCore::HTMLOptionElement::parseAttribute):
        (WebCore::HTMLOptionElement::childrenChanged):
        (WebCore::HTMLOptionElement::insertedIntoTree):
        * html/HTMLOptionElement.h:
        (HTMLOptionElement):
        (WebCore::HTMLOptionElement::ownElementDisabled):
        * html/HTMLTagNames.in:

2012-03-21  Andrey Kosyakov  <caseq@chromium.org>

        Web Inspector: expose getEventListeners() to console command line API
        https://bugs.webkit.org/show_bug.cgi?id=81658

        Reviewed by Yury Semikhatsky.

        Test: inspector/console/command-line-api-getEventListeners.html

        * bindings/js/JSInjectedScriptHostCustom.cpp:
        (WebCore::JSInjectedScriptHost::functionDetails):
        (WebCore):
        (WebCore::getJSListenerFunctions):
        (WebCore::JSInjectedScriptHost::getEventListeners):
        * bindings/v8/custom/V8InjectedScriptHostCustom.cpp:
        (WebCore::getJSListenerFunctions):
        (WebCore):
        (WebCore::V8InjectedScriptHost::getEventListenersCallback):
        * inspector/InjectedScriptHost.cpp:
        (WebCore::InjectedScriptHost::InjectedScriptHost):
        (WebCore::InjectedScriptHost::disconnect):
        (WebCore::InjectedScriptHost::getEventListenersImpl):
        (WebCore):
        * inspector/InjectedScriptHost.h:
        (WebCore):
        (WebCore::InjectedScriptHost::init):
        (InjectedScriptHost):
        * inspector/InjectedScriptHost.idl:
        * inspector/InjectedScriptSource.js:
        (.):
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::getEventListenersForNode):
        (WebCore::InspectorDOMAgent::getEventListeners):
        (WebCore):
        * inspector/InspectorDOMAgent.h:
        (InspectorDOMAgent):
        * inspector/WorkerInspectorController.cpp:
        (WebCore::WorkerInspectorController::WorkerInspectorController):

2012-03-21  Kentaro Hara  <haraken@chromium.org>

        Unreviewed, rebaselined run-bindings-tests results.

        * bindings/scripts/test/CPP/WebDOMFloat64Array.cpp:
        * bindings/scripts/test/GObject/WebKitDOMFloat64Array.cpp:
        * bindings/scripts/test/GObject/WebKitDOMFloat64ArrayPrivate.h:
        * bindings/scripts/test/ObjC/DOMFloat64Array.mm:

2012-03-21  Ian Vollick  <vollick@chromium.org>

        [chromium] timing functions are getting incorrectly applied for accelerated css transitions
        https://bugs.webkit.org/show_bug.cgi?id=81692

        Reviewed by Adrienne Walker.

        Tested in CCLayerTreeHostTestAddAnimationWithTimingFunction

        * platform/graphics/chromium/cc/CCLayerAnimationController.cpp:

2012-03-21  Allan Sandfeld Jensen  <allan.jensen@nokia.com>

        [Qt] Cookie Jar blocks on fsync in SQLITE
        https://bugs.webkit.org/show_bug.cgi?id=81755

        Reviewed by Simon Hausmann.

        Set PRAGMA synchronous to OFF, which tells SQLITE to never fsync.

        * platform/qt/CookieJarQt.cpp:
        (WebCore::SharedCookieJarQt::ensureDatabaseTable):

2012-03-21  Ian Vollick  <vollick@chromium.org>

        [chromium] Animation events should only be used for synchronizing animation start times
        https://bugs.webkit.org/show_bug.cgi?id=81484

        Reviewed by Adrienne Walker.

        Tested in CCLayerTreeHostTestSynchronizeAnimationStartTimes

        Eliminated animation finished events. Animations will finish naturally on the
        main thread and the final values will be set.

        Animation started events are now also used to synchronize the main thread
        animations' start times with their impl thread equivalents, preventing skew.
        Until main thread animations receive their synchronized start times, they will
        apply their initial values (i.e., they will be paused at time zero). This
        guarantees that we will not jump to the animation's final value on the main
        thread while we wait for the synchronized start time.

        * WebCore.gypi:
        * platform/graphics/chromium/LayerChromium.cpp:
        (WebCore::LayerChromium::notifyAnimationStarted):
        * platform/graphics/chromium/LayerChromium.h:
        (WebCore):
        (LayerChromium):
        * platform/graphics/chromium/cc/CCActiveAnimation.cpp:
        (WebCore::CCActiveAnimation::CCActiveAnimation):
        * platform/graphics/chromium/cc/CCActiveAnimation.h:
        (CCActiveAnimation):
        (WebCore::CCActiveAnimation::needsSynchronizedStartTime):
        (WebCore::CCActiveAnimation::setNeedsSynchronizedStartTime):
        * platform/graphics/chromium/cc/CCAnimationEvents.cpp: Removed.
        * platform/graphics/chromium/cc/CCAnimationEvents.h:
        (WebCore::CCAnimationStartedEvent::CCAnimationStartedEvent):
        (CCAnimationStartedEvent):
        (WebCore):
        * platform/graphics/chromium/cc/CCLayerAnimationController.cpp:
        (WebCore::CCLayerAnimationController::animate):
        (WebCore::CCLayerAnimationController::notifyAnimationStarted):
        (WebCore):
        (WebCore::CCLayerAnimationController::pushNewAnimationsToImplThread):
        (WebCore::CCLayerAnimationController::startAnimationsWaitingForNextTick):
        (WebCore::CCLayerAnimationController::startAnimationsWaitingForStartTime):
        (WebCore::CCLayerAnimationController::startAnimationsWaitingForTargetAvailability):
        (WebCore::CCLayerAnimationController::purgeFinishedAnimations):
        (WebCore::CCLayerAnimationController::tickAnimations):
        * platform/graphics/chromium/cc/CCLayerAnimationController.h:
        (CCLayerAnimationController):
        * platform/graphics/chromium/cc/CCLayerTreeHost.cpp:
        (WebCore::CCLayerTreeHost::updateAnimations):
        (WebCore::CCLayerTreeHost::setAnimationEventsRecursive):
        * platform/graphics/chromium/cc/CCLayerTreeHost.h:
        (CCLayerTreeHost):

2012-03-21  Zeno Albisser  <zeno@webkit.org>

        [Qt][WK2][Mac] MiniBrowser asserts at HashTable.h:480
        https://bugs.webkit.org/show_bug.cgi?id=81113

        The GLContext is created by QWindow/QSurface using
        QOpenGLContext which is implemented using NSOpenGL functions
        on mac. Therefore we should use QOpenGLContext as well when
        querying for the current context. AGL is not supposed
        to be paired with NSOpenGL.
        Altering the typedef for GLContext is fine, since
        the GLContext type is only used as a key in a map.

        Reviewed by Kenneth Rohde Christiansen.

        * platform/graphics/texmap/TextureMapperGL.cpp:
        (SharedGLData):
        (WebCore::TextureMapperGLData::SharedGLData::getCurrentGLContext):

2012-03-21  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: HeapSnapshot: make _bfs twice as fast as the old version.
        https://bugs.webkit.org/show_bug.cgi?id=81756

        Reviewed by Yury Semikhatsky.

        * inspector/front-end/HeapSnapshot.js:
        (WebInspector.HeapSnapshot.prototype._calculateObjectToWindowDistance):
        (WebInspector.HeapSnapshot.prototype._bfs):

2012-03-21  Vineet Chaudhary  <rgf748@motorola.com>

        https://bugs.webkit.org/show_bug.cgi?id=81705
        REGRESSION (r111416): fast/dom/prototype-inheritance-2.html is failing.

        Reviewed by Csaba Osztrogonác.

        No new tests.

        * bindings/js/JSDOMBinding.h: Needs passing globalObject to constructArray().
        (WebCore::jsArray):

2012-03-21  Jonathan Dong  <jonathan.dong@torchmobile.com.cn>

        [BlackBerry] Upstreaming blackberry specific css file
        https://bugs.webkit.org/show_bug.cgi?id=81650

        Ustream BlackBerry specific css files, including:
        css/themeBlackBerry.css
        css/mediaControlsBlackBerry.css

        Reviewed by Nikolas Zimmermann.

        No new tests, this is the initial upstream patch
        for BlackBerry specific css files.

        * css/mediaControlsBlackBerry.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-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-fullscreen-button, video::-webkit-media-controls-fullscreen-button):
        (audio::-webkit-media-controls-mute-button, video::-webkit-media-controls-mute-button):
        (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):
        * css/themeBlackBerry.css: Added.
        (textarea):
        (input, textarea):
        (input[type="color"]):
        (select:focus):
        (select[size][multiple]):
        (select[size][multiple]:focus):

2012-03-21  Levi Weintraub  <leviw@chromium.org>

        Update LayoutUnit usage in descendants of RenderReplaced
        https://bugs.webkit.org/show_bug.cgi?id=80918

        Reviewed by Eric Seidel.

        Replaced elements have to flow in the new sub-pixel Render Tree, but since the rendering of these
        often takes place outside of WebCore (or in cases such as foreign objects, in WebCore after
        passing through platform code), care must be taken to determine the final rendered size and
        location before render time. This patch brings these classes up to the latest and greatest in the
        subpixellayout branch.

        See https://trac.webkit.org/wiki/LayoutUnit for more information.

        No new tests. No change in behavior.

        * rendering/RenderFrameBase.cpp:
        (WebCore::RenderFrameBase::layoutWithFlattening): Build Fix.
        * rendering/RenderFullScreen.cpp:
        (RenderFullScreen::createPlaceholder): Ditto.
        * rendering/RenderFullScreen.h:
        (RenderFullScreen): Ditto.
        * rendering/RenderHTMLCanvas.cpp:
        (WebCore::RenderHTMLCanvas::canvasSizeChanged): Ditto.
        * rendering/RenderIFrame.cpp:
        (WebCore::RenderIFrame::computeLogicalHeight): Ditto.
        (WebCore::RenderIFrame::computeLogicalWidth): Ditto.
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::updateIntrinsicSizeIfNeeded): Intrinsic sizes are always integers, since they
        originate outside of WebCore.
        (WebCore::RenderImage::paintIntoRect): Use pixel snapping to paint into an arbitrary rect.
        (WebCore::RenderImage::computeReplacedLogicalWidth): Intrinsic size is always integral -- rounding
        values to integers.
        * rendering/RenderImage.h:
        (RenderImage):
        * rendering/RenderVideo.cpp:
        (WebCore::RenderVideo::videoBox):
        (WebCore::RenderVideo::paintReplaced): Painting at integer boundaries.
        * rendering/RenderWidget.cpp:
        (WebCore):
        (WebCore::roundedIntRect): Widgets are rendered outside of WebCore, so we always align them to
        integer boundaries. This means we can actually round the size of our ultimate content box. This
        function is implemented here specifically to prevent its misuse if we put it elsewhere.
        (WebCore::RenderWidget::setWidgetGeometry): We simplify layout by taking a LayoutRect and rounding
        it to its final location within this function.
        (WebCore::RenderWidget::updateWidgetGeometry): We keep things in LayoutUnits until handing off to
        setWidgetGeometry.
        (WebCore::RenderWidget::paint): Rounding the paint location before handing painting off to the
        widget itself.
        * rendering/RenderWidget.h:
        (RenderWidget):

2012-03-21  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: HeapProfiler: support distance column in Summary View.
        https://bugs.webkit.org/show_bug.cgi?id=81675

        In many cases when a page leaked an object we see not only this object
        but the all objects it retains. It is quite difficult to find out which
        the object is the root of leak. It'd be simpler to sort the leaked
        objects by Distance column and track down the first one.

        Reviewed by Yury Semikhatsky.

        * inspector/front-end/DetailedHeapshotGridNodes.js:
        (WebInspector.HeapSnapshotGenericObjectNode):
        (WebInspector.HeapSnapshotGenericObjectNode.prototype.get data):
        (WebInspector.HeapSnapshotInstanceNode.prototype.comparator):
        (WebInspector.HeapSnapshotConstructorNode):
        (WebInspector.HeapSnapshotConstructorNode.prototype.comparator):
        (WebInspector.HeapSnapshotConstructorNode.prototype.get data):
        * inspector/front-end/DetailedHeapshotView.js:
        (WebInspector.HeapSnapshotConstructorsDataGrid):
        (WebInspector.HeapSnapshotConstructorsDataGrid.prototype._defaultPopulateCount.100._sortFields):
        * inspector/front-end/HeapSnapshot.js:
        (WebInspector.HeapSnapshotNodesProvider.prototype._serialize):

2012-03-21  Charles Wei  <charles.wei@torchmobile.com.cn>

        [BlackBerry] Remove redundant code in SocketStreamHandler
        https://bugs.webkit.org/show_bug.cgi?id=81726

        Reviewed by George Staikos.

        No new tests needed. Just remove redundant code.

        * platform/network/blackberry/SocketStreamHandle.h:
        (SocketStreamHandle):
        * platform/network/blackberry/SocketStreamHandleBlackBerry.cpp:

2012-03-20  Eric Seidel  <eric@webkit.org>

        Move wtf/Platform.h from JavaScriptCore to Source/WTF/wtf
        https://bugs.webkit.org/show_bug.cgi?id=80911

        Reviewed by Adam Barth.

        * CMakeLists.txt:
         - Look for headers in Source/WTF as well.

2012-03-20  Dana Jansens  <danakj@chromium.org>

        [chromium] Use origin transform to transform occlusion from surface content space to its target content space
        https://bugs.webkit.org/show_bug.cgi?id=81730

        Reviewed by Adrienne Walker.

        Unit test: CCOcclusionTrackerTestSurfaceOcclusionTranslatesToParent

        * platform/graphics/chromium/cc/CCOcclusionTracker.cpp:
        (WebCore::transformSurfaceOpaqueRegion):
        (WebCore::::leaveToTargetRenderSurface):

2012-03-19  Shinya Kawanaka  <shinyak@chromium.org>

        [Crash] RenderMenuList::addChild() in Shadow DOM.
        https://bugs.webkit.org/show_bug.cgi?id=81201

        Reviewed by Dimitri Glazkov.

        <audio>, <video>, <meter>, <progress>, and <select> are implemented using
        Shadow DOM having HTMLContentElement. Their renderer children basically should not
        create a renderer unless they are on the upper shadow encapsulation boundary,
        which means they are the direct children of the shadow root.

        However, current implementation allows their renderer children to create a renderer
        even if they are on a lower shadow encapsulation boundary, which means
        they are distributed elements of HTMLContentElement.

        This patch makes there renderer children not to create a renderer if they are on a lower shadow
        encapsulation boudary.

        Tests: fast/dom/shadow/content-element-in-media-element.html
               fast/dom/shadow/content-element-in-meter-element.html
               fast/dom/shadow/content-element-in-progress-element.html
               fast/dom/shadow/content-element-in-select-element.html

        * dom/NodeRenderingContext.h:
        (NodeRenderingContext):
        (WebCore::NodeRenderingContext::isOnUpperEncapsulationBoundary):
        (WebCore):
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::childShouldCreateRenderer):
        * html/HTMLMeterElement.cpp:
        (WebCore::HTMLMeterElement::childShouldCreateRenderer):
        * html/HTMLProgressElement.cpp:
        (WebCore::HTMLProgressElement::childShouldCreateRenderer):
        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::childShouldCreateRenderer):

2012-03-20  Dana Jansens  <danakj@chromium.org>

        [chromium] Store origin/screen space transforms for surface and replica in the surface
        https://bugs.webkit.org/show_bug.cgi?id=81296

        Reviewed by Adrienne Walker.

        Compute and save a number of transforms for render surfaces. The origin
        tranform for the replica into its target surface. The origin transform
        for the replica into the screen. And the origin transform for the surface
        into the screen.

        These transforms will allow us to detect occlusion of render surfaces,
        allowing us to cull (or partially-cull) the render surface quad during
        drawing.

        This also fixes a subtle bug in the transforms used by the damage
        tracking code.

        Unit test: CCLayerTreeHostCommonTest.verifyTransformsForSingleRenderSurface
                   CCLayerTreeHostCommonTest.verifyTransformsForReplica
                   CCLayerTreeHostCommonTest.verifyTransformsForRenderSurfaceHierarchy

        * platform/graphics/chromium/RenderSurfaceChromium.h:
        (WebCore::RenderSurfaceChromium::screenSpaceTransform):
        (WebCore::RenderSurfaceChromium::setScreenSpaceTransform):
        (RenderSurfaceChromium):
        (WebCore::RenderSurfaceChromium::replicaOriginTransform):
        (WebCore::RenderSurfaceChromium::setReplicaOriginTransform):
        (WebCore::RenderSurfaceChromium::replicaScreenSpaceTransform):
        (WebCore::RenderSurfaceChromium::setReplicaScreenSpaceTransform):
        * platform/graphics/chromium/cc/CCDamageTracker.cpp:
        (WebCore::CCDamageTracker::extendDamageForRenderSurface):
        * platform/graphics/chromium/cc/CCLayerTreeHostCommon.cpp:
        (WebCore::calculateDrawTransformsAndVisibilityInternal):
        * platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:
        (WebCore::damageInSurfaceSpace):
        * platform/graphics/chromium/cc/CCRenderSurface.h:
        (WebCore::CCRenderSurface::setDrawTransform):
        (WebCore::CCRenderSurface::drawTransform):
        (WebCore::CCRenderSurface::setScreenSpaceTransform):
        (WebCore::CCRenderSurface::screenSpaceTransform):
        (CCRenderSurface):
        (WebCore::CCRenderSurface::setReplicaDrawTransform):
        (WebCore::CCRenderSurface::replicaDrawTransform):
        (WebCore::CCRenderSurface::setReplicaOriginTransform):
        (WebCore::CCRenderSurface::replicaOriginTransform):
        (WebCore::CCRenderSurface::setReplicaScreenSpaceTransform):
        (WebCore::CCRenderSurface::replicaScreenSpaceTransform):

2012-03-20  Yoshifumi Inoue  <yosin@chromium.org>

        [Forms] The option element should not be form associated element.
        https://bugs.webkit.org/show_bug.cgi?id=79764

        Reviewed by Kent Tamura.

        This patch changes base class of HTMLOptionELement to HTMLElement
        from HTMLFormControlElement for saving memory space and iteration
        time of extra "option" elements in HTMLFormElement::m_formAssociatedElements
        and matching the HTML5 specification for ease of maintenance.

        This patch changes behavior of handling of CSS pseudo classes "invalid"
        and "valid". The "option" elements no longer use these CSS pseudo classes
        as HTML5 specification. This bug was filed in https://bugs.webkit.org/show_bug.cgi?id=80088

        Changes of TextIterator is lead by usage of isFormControlElement. This
        changes will be replaced with more meaningful predicate as part of
        https://bugs.webkit.org/show_bug.cgi?id=80381

        No new tests but updated select-live-pseudo-selectors.html test.

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::canShareStyleWithElement): Added checking of the "option" element and returns false as HTMLFormControlElement.
        * css/SelectorChecker.cpp:
        (WebCore::SelectorChecker::checkOneSelector): Removed isFormControlElement for PseudoDisabled and PseudoChecked.
        * html/HTMLKeygenElement.cpp:
        (WebCore::HTMLKeygenElement::HTMLKeygenElement): Removed form parameter of call site of HTMLOptionElement::create.
        * html/HTMLOptionElement.cpp:
        (WebCore::HTMLOptionElement::HTMLOptionElement): Removed form parameter which no longer needed. Changed base class in initialization list. Added m_disabled initialization.
        (WebCore::HTMLOptionElement::create): Removed form parameter which no longer needed.
        (WebCore::HTMLOptionElement::attach): Changeid base class.
        (WebCore::HTMLOptionElement::detach): Changed base class.
        (WebCore::HTMLOptionElement::parseAttribute): Changed base class. Added "disabled" attribute handling.
        (WebCore::HTMLOptionElement::childrenChanged): Changed base class.
        (WebCore::HTMLOptionElement::insertedIntoTree): Changed base class.
        * html/HTMLOptionElement.h:
        (HTMLOptionElement): Added new member variable m_disabled which was in HTMLFormControlElement.
        (WebCore::HTMLOptionElement::ownElementDisabled): Changed for using m_disabled.
        * html/HTMLTagNames.in: Removed constructorNeedsFormElement for the "option" element, which was used for passing form parameter to create function.

2012-03-20  Xiaomei Ji  <xji@chromium.org>

        Crash introduced in r110965.
        https://bugs.webkit.org/show_bug.cgi?id=81720

        Reviewed by Ryosuke Niwa.

        Since word break iterator just keeps a pointer to the UChar array given to the constructor,
        we need to allocate the UChar array deeper in the stack than the iterator.

        Test: editing/selection/move-by-word-visually-crash-test-5.html

        * editing/visible_units.cpp:
        (WebCore::wordBreakIteratorForMinOffsetBoundary):
        (WebCore::wordBreakIteratorForMaxOffsetBoundary):
        (WebCore::visualWordPosition):

2012-03-20  W. James MacLean  <wjmaclean@chromium.org>

        [chromium] Convert TouchFlingPlatformGestureCurve to a 2-D Bezier for better control of curve shape.
        https://bugs.webkit.org/show_bug.cgi?id=81713

        Reviewed by Dirk Pranke.

        Exisiting unit test revised to cover this change.

        Change the fling gesture animation curve to use a 2-D Bezier to obtain greater control
        over the shape of the curve. Also, change time scaling code to be logarithmic for more
        natural feel.

        * platform/TouchFlingPlatformGestureCurve.cpp:
        (WebCore::TouchFlingPlatformGestureCurve::TouchFlingPlatformGestureCurve):
        (WebCore::TouchFlingPlatformGestureCurve::apply):

2012-03-18  Tim Horton  <timothy_horton@apple.com>

        Infinite repaint loop with SVGImageCache and deferred repaint timers
        https://bugs.webkit.org/show_bug.cgi?id=78315
        <rdar://problem/10651634>

        Reviewed by Nikolas Zimmermann.

        Only defer image redraw on a timer if we're in layout. This breaks
        the repaint loop while still preventing us from drawing inside layout.

        Completely disable repaint during relayout inside SVGImage::drawSVGToImageBuffer,
        preventing deferred repaint timers from being started during that process.

        No new tests, as the problem only occurs in a nonstandard configuration.

        * page/FrameView.cpp:
        (WebCore::FrameView::FrameView):
        (WebCore::FrameView::reset):
        (WebCore::FrameView::repaintContentRectangle):
        (WebCore::FrameView::endDeferredRepaints):
        (WebCore::FrameView::startDeferredRepaintTimer):
        (WebCore):
        (WebCore::FrameView::doDeferredRepaints):
        (WebCore::FrameView::deferredRepaintTimerFired):
        (WebCore::FrameView::beginDisableRepaints):
        (WebCore::FrameView::endDisableRepaints):
        * page/FrameView.h:
        (FrameView):
        (WebCore::FrameView::repaintsDisabled):
        * rendering/RenderView.cpp:
        (WebCore::RenderView::shouldRepaint):
        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::drawSVGToImageBuffer):
        (WebCore::SVGImage::draw):
        (WebCore::SVGImage::frameView):
        (WebCore):
        * svg/graphics/SVGImage.h:
        (WebCore):
        * svg/graphics/SVGImageCache.cpp:
        (WebCore::SVGImageCache::imageContentChanged):
        (WebCore::SVGImageCache::redraw):
        (WebCore::SVGImageCache::redrawTimerFired):
        (WebCore):
        * svg/graphics/SVGImageCache.h:
        (SVGImageCache):

2012-03-20  Adam Klein  <adamk@chromium.org>

        Include fix for dom/xhtml test promised in r111449.

        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::replaceChild): Check against next instead of
        prev when deciding there's no work to do.

2012-03-20  Jon Lee  <jonlee@apple.com>

        Restrict access to notifications for unique origins and file URLs with no local file access
        https://bugs.webkit.org/show_bug.cgi?id=79704
        <rdar://problem/10912430>

        Reviewed by Adam Barth.

        Before checking or requesting permissions, we look at whether we can show notifications based on
        the security context. If not, we short circuit and do not forward the request to the client.

        * notifications/Notification.cpp:
        (WebCore::Notification::Notification): Fix a bug where creating a notification goes through slightly
        different logic for checking permissions than when checking permissions through the
        notification center.
        * notifications/NotificationCenter.cpp:
        (WebCore::NotificationCenter::checkPermission): Check to see if the origin can show notifications.
        (WebCore::NotificationCenter::requestPermission): If we know whether an origin can show notifications,
        we asynchronously call the callback with that decision. Otherwise we ask the client.

        Add new variable in the notification center to keep track of pending callbacks when we short-circuit
        requestPermission().
        * notifications/NotificationCenter.h:
        (NotificationRequestCallback): Add new private class encapsulating the callback.
        * notifications/NotificationCenter.cpp:
        (WebCore::NotificationCenter::requestTimedOut): Remove the request from the set of pending callbacks.
        (WebCore::NotificationCenter::NotificationRequest::createAndStartTimer): Because this is used when we already
        know the decision, and are not asking the client to decide, we can immediately trigger a one-shot timer
        to invoke the callback.
        (WebCore::NotificationCenter::NotificationRequest::NotificationRequest):
        (WebCore::NotificationCenter::NotificationRequest::startTimer):
        (WebCore::NotificationCenter::NotificationRequest::timerFired): Invoke the callback and tell the notification
        center.
        * page/SecurityOrigin.h: Add new toRawString() method to return the string representation of the origin,
        regardless of any restrictions that might otherwise cause toString() to return "null".
        * page/SecurityOrigin.cpp:
        (WebCore::SecurityOrigin::canShowNotifications): Added to return a tri-state regarding whether we know
        the origin can show notifications. If the origin is unique, we never let it show. If the origin has
        universal access, we always let it show. Otherwise the client should be asked.
        (WebCore::SecurityOrigin::toString): Refactor to use toRawString().
        (WebCore::SecurityOrigin::toRawString):

        Added FIXME's regarding the naming of enforceFilePathSeparation().
        * dom/Document.cpp:
        (WebCore::Document::initSecurityContext): Also, tab reformatting.

        * WebCore.exp.in: Export toRawString().

2012-03-20  Mark Pilgrim  <pilgrim@chromium.org>

        Move webaudio to Modules/webaudio/
        https://bugs.webkit.org/show_bug.cgi?id=81541

        Reviewed by Kentaro Hara.

        No new tests, all existing tests pass.

        * CMakeLists.txt:
        * DerivedSources.make:
        * DerivedSources.pri:
        * GNUmakefile.am:
        * GNUmakefile.list.am:
        * Modules/webaudio: Added.
        * Modules/webaudio/AsyncAudioDecoder.cpp: Copied from Source/WebCore/webaudio/AsyncAudioDecoder.cpp.
        * Modules/webaudio/AsyncAudioDecoder.h: Copied from Source/WebCore/webaudio/AsyncAudioDecoder.h.
        * Modules/webaudio/AudioBasicProcessorNode.cpp: Copied from Source/WebCore/webaudio/AudioBasicProcessorNode.cpp.
        * Modules/webaudio/AudioBasicProcessorNode.h: Copied from Source/WebCore/webaudio/AudioBasicProcessorNode.h.
        * Modules/webaudio/AudioBuffer.cpp: Copied from Source/WebCore/webaudio/AudioBuffer.cpp.
        * Modules/webaudio/AudioBuffer.h: Copied from Source/WebCore/webaudio/AudioBuffer.h.
        * Modules/webaudio/AudioBuffer.idl: Copied from Source/WebCore/webaudio/AudioBuffer.idl.
        * Modules/webaudio/AudioBufferCallback.h: Copied from Source/WebCore/webaudio/AudioBufferCallback.h.
        * Modules/webaudio/AudioBufferCallback.idl: Copied from Source/WebCore/webaudio/AudioBufferCallback.idl.
        * Modules/webaudio/AudioBufferSourceNode.cpp: Copied from Source/WebCore/webaudio/AudioBufferSourceNode.cpp.
        * Modules/webaudio/AudioBufferSourceNode.h: Copied from Source/WebCore/webaudio/AudioBufferSourceNode.h.
        * Modules/webaudio/AudioBufferSourceNode.idl: Copied from Source/WebCore/webaudio/AudioBufferSourceNode.idl.
        * Modules/webaudio/AudioChannelMerger.cpp: Copied from Source/WebCore/webaudio/AudioChannelMerger.cpp.
        * Modules/webaudio/AudioChannelMerger.h: Copied from Source/WebCore/webaudio/AudioChannelMerger.h.
        * Modules/webaudio/AudioChannelMerger.idl: Copied from Source/WebCore/webaudio/AudioChannelMerger.idl.
        * Modules/webaudio/AudioChannelSplitter.cpp: Copied from Source/WebCore/webaudio/AudioChannelSplitter.cpp.
        * Modules/webaudio/AudioChannelSplitter.h: Copied from Source/WebCore/webaudio/AudioChannelSplitter.h.
        * Modules/webaudio/AudioChannelSplitter.idl: Copied from Source/WebCore/webaudio/AudioChannelSplitter.idl.
        * Modules/webaudio/AudioContext.cpp: Copied from Source/WebCore/webaudio/AudioContext.cpp.
        * Modules/webaudio/AudioContext.h: Copied from Source/WebCore/webaudio/AudioContext.h.
        * Modules/webaudio/AudioContext.idl: Copied from Source/WebCore/webaudio/AudioContext.idl.
        * Modules/webaudio/AudioDestinationNode.cpp: Copied from Source/WebCore/webaudio/AudioDestinationNode.cpp.
        * Modules/webaudio/AudioDestinationNode.h: Copied from Source/WebCore/webaudio/AudioDestinationNode.h.
        * Modules/webaudio/AudioDestinationNode.idl: Copied from Source/WebCore/webaudio/AudioDestinationNode.idl.
        * Modules/webaudio/AudioGain.h: Copied from Source/WebCore/webaudio/AudioGain.h.
        * Modules/webaudio/AudioGain.idl: Copied from Source/WebCore/webaudio/AudioGain.idl.
        * Modules/webaudio/AudioGainNode.cpp: Copied from Source/WebCore/webaudio/AudioGainNode.cpp.
        * Modules/webaudio/AudioGainNode.h: Copied from Source/WebCore/webaudio/AudioGainNode.h.
        * Modules/webaudio/AudioGainNode.idl: Copied from Source/WebCore/webaudio/AudioGainNode.idl.
        * Modules/webaudio/AudioListener.cpp: Copied from Source/WebCore/webaudio/AudioListener.cpp.
        * Modules/webaudio/AudioListener.h: Copied from Source/WebCore/webaudio/AudioListener.h.
        * Modules/webaudio/AudioListener.idl: Copied from Source/WebCore/webaudio/AudioListener.idl.
        * Modules/webaudio/AudioNode.cpp: Copied from Source/WebCore/webaudio/AudioNode.cpp.
        * Modules/webaudio/AudioNode.h: Copied from Source/WebCore/webaudio/AudioNode.h.
        * Modules/webaudio/AudioNode.idl: Copied from Source/WebCore/webaudio/AudioNode.idl.
        * Modules/webaudio/AudioNodeInput.cpp: Copied from Source/WebCore/webaudio/AudioNodeInput.cpp.
        * Modules/webaudio/AudioNodeInput.h: Copied from Source/WebCore/webaudio/AudioNodeInput.h.
        * Modules/webaudio/AudioNodeOutput.cpp: Copied from Source/WebCore/webaudio/AudioNodeOutput.cpp.
        * Modules/webaudio/AudioNodeOutput.h: Copied from Source/WebCore/webaudio/AudioNodeOutput.h.
        * Modules/webaudio/AudioPannerNode.cpp: Copied from Source/WebCore/webaudio/AudioPannerNode.cpp.
        * Modules/webaudio/AudioPannerNode.h: Copied from Source/WebCore/webaudio/AudioPannerNode.h.
        * Modules/webaudio/AudioPannerNode.idl: Copied from Source/WebCore/webaudio/AudioPannerNode.idl.
        * Modules/webaudio/AudioParam.cpp: Copied from Source/WebCore/webaudio/AudioParam.cpp.
        * Modules/webaudio/AudioParam.h: Copied from Source/WebCore/webaudio/AudioParam.h.
        * Modules/webaudio/AudioParam.idl: Copied from Source/WebCore/webaudio/AudioParam.idl.
        * Modules/webaudio/AudioParamTimeline.cpp: Copied from Source/WebCore/webaudio/AudioParamTimeline.cpp.
        * Modules/webaudio/AudioParamTimeline.h: Copied from Source/WebCore/webaudio/AudioParamTimeline.h.
        * Modules/webaudio/AudioProcessingEvent.cpp: Copied from Source/WebCore/webaudio/AudioProcessingEvent.cpp.
        * Modules/webaudio/AudioProcessingEvent.h: Copied from Source/WebCore/webaudio/AudioProcessingEvent.h.
        * Modules/webaudio/AudioProcessingEvent.idl: Copied from Source/WebCore/webaudio/AudioProcessingEvent.idl.
        * Modules/webaudio/AudioSourceNode.h: Copied from Source/WebCore/webaudio/AudioSourceNode.h.
        * Modules/webaudio/AudioSourceNode.idl: Copied from Source/WebCore/webaudio/AudioSourceNode.idl.
        * Modules/webaudio/BiquadDSPKernel.cpp: Copied from Source/WebCore/webaudio/BiquadDSPKernel.cpp.
        * Modules/webaudio/BiquadDSPKernel.h: Copied from Source/WebCore/webaudio/BiquadDSPKernel.h.
        * Modules/webaudio/BiquadFilterNode.cpp: Copied from Source/WebCore/webaudio/BiquadFilterNode.cpp.
        * Modules/webaudio/BiquadFilterNode.h: Copied from Source/WebCore/webaudio/BiquadFilterNode.h.
        * Modules/webaudio/BiquadFilterNode.idl: Copied from Source/WebCore/webaudio/BiquadFilterNode.idl.
        * Modules/webaudio/BiquadProcessor.cpp: Copied from Source/WebCore/webaudio/BiquadProcessor.cpp.
        * Modules/webaudio/BiquadProcessor.h: Copied from Source/WebCore/webaudio/BiquadProcessor.h.
        * Modules/webaudio/ConvolverNode.cpp: Copied from Source/WebCore/webaudio/ConvolverNode.cpp.
        * Modules/webaudio/ConvolverNode.h: Copied from Source/WebCore/webaudio/ConvolverNode.h.
        * Modules/webaudio/ConvolverNode.idl: Copied from Source/WebCore/webaudio/ConvolverNode.idl.
        * Modules/webaudio/DOMWindowWebAudio.idl: Copied from Source/WebCore/webaudio/DOMWindowWebAudio.idl.
        * Modules/webaudio/DefaultAudioDestinationNode.cpp: Copied from Source/WebCore/webaudio/DefaultAudioDestinationNode.cpp.
        * Modules/webaudio/DefaultAudioDestinationNode.h: Copied from Source/WebCore/webaudio/DefaultAudioDestinationNode.h.
        * Modules/webaudio/DelayDSPKernel.cpp: Copied from Source/WebCore/webaudio/DelayDSPKernel.cpp.
        * Modules/webaudio/DelayDSPKernel.h: Copied from Source/WebCore/webaudio/DelayDSPKernel.h.
        * Modules/webaudio/DelayNode.cpp: Copied from Source/WebCore/webaudio/DelayNode.cpp.
        * Modules/webaudio/DelayNode.h: Copied from Source/WebCore/webaudio/DelayNode.h.
        * Modules/webaudio/DelayNode.idl: Copied from Source/WebCore/webaudio/DelayNode.idl.
        * Modules/webaudio/DelayProcessor.cpp: Copied from Source/WebCore/webaudio/DelayProcessor.cpp.
        * Modules/webaudio/DelayProcessor.h: Copied from Source/WebCore/webaudio/DelayProcessor.h.
        * Modules/webaudio/DynamicsCompressorNode.cpp: Copied from Source/WebCore/webaudio/DynamicsCompressorNode.cpp.
        * Modules/webaudio/DynamicsCompressorNode.h: Copied from Source/WebCore/webaudio/DynamicsCompressorNode.h.
        * Modules/webaudio/DynamicsCompressorNode.idl: Copied from Source/WebCore/webaudio/DynamicsCompressorNode.idl.
        * Modules/webaudio/HighPass2FilterNode.cpp: Copied from Source/WebCore/webaudio/HighPass2FilterNode.cpp.
        * Modules/webaudio/HighPass2FilterNode.h: Copied from Source/WebCore/webaudio/HighPass2FilterNode.h.
        * Modules/webaudio/HighPass2FilterNode.idl: Copied from Source/WebCore/webaudio/HighPass2FilterNode.idl.
        * Modules/webaudio/JavaScriptAudioNode.cpp: Copied from Source/WebCore/webaudio/JavaScriptAudioNode.cpp.
        * Modules/webaudio/JavaScriptAudioNode.h: Copied from Source/WebCore/webaudio/JavaScriptAudioNode.h.
        * Modules/webaudio/JavaScriptAudioNode.idl: Copied from Source/WebCore/webaudio/JavaScriptAudioNode.idl.
        * Modules/webaudio/LowPass2FilterNode.cpp: Copied from Source/WebCore/webaudio/LowPass2FilterNode.cpp.
        * Modules/webaudio/LowPass2FilterNode.h: Copied from Source/WebCore/webaudio/LowPass2FilterNode.h.
        * Modules/webaudio/LowPass2FilterNode.idl: Copied from Source/WebCore/webaudio/LowPass2FilterNode.idl.
        * Modules/webaudio/MediaElementAudioSourceNode.cpp: Copied from Source/WebCore/webaudio/MediaElementAudioSourceNode.cpp.
        * Modules/webaudio/MediaElementAudioSourceNode.h: Copied from Source/WebCore/webaudio/MediaElementAudioSourceNode.h.
        * Modules/webaudio/MediaElementAudioSourceNode.idl: Copied from Source/WebCore/webaudio/MediaElementAudioSourceNode.idl.
        * Modules/webaudio/OfflineAudioCompletionEvent.cpp: Copied from Source/WebCore/webaudio/OfflineAudioCompletionEvent.cpp.
        * Modules/webaudio/OfflineAudioCompletionEvent.h: Copied from Source/WebCore/webaudio/OfflineAudioCompletionEvent.h.
        * Modules/webaudio/OfflineAudioCompletionEvent.idl: Copied from Source/WebCore/webaudio/OfflineAudioCompletionEvent.idl.
        * Modules/webaudio/OfflineAudioDestinationNode.cpp: Copied from Source/WebCore/webaudio/OfflineAudioDestinationNode.cpp.
        * Modules/webaudio/OfflineAudioDestinationNode.h: Copied from Source/WebCore/webaudio/OfflineAudioDestinationNode.h.
        * Modules/webaudio/RealtimeAnalyser.cpp: Copied from Source/WebCore/webaudio/RealtimeAnalyser.cpp.
        * Modules/webaudio/RealtimeAnalyser.h: Copied from Source/WebCore/webaudio/RealtimeAnalyser.h.
        * Modules/webaudio/RealtimeAnalyserNode.cpp: Copied from Source/WebCore/webaudio/RealtimeAnalyserNode.cpp.
        * Modules/webaudio/RealtimeAnalyserNode.h: Copied from Source/WebCore/webaudio/RealtimeAnalyserNode.h.
        * Modules/webaudio/RealtimeAnalyserNode.idl: Copied from Source/WebCore/webaudio/RealtimeAnalyserNode.idl.
        * Modules/webaudio/WaveShaperDSPKernel.cpp: Copied from Source/WebCore/webaudio/WaveShaperDSPKernel.cpp.
        * Modules/webaudio/WaveShaperDSPKernel.h: Copied from Source/WebCore/webaudio/WaveShaperDSPKernel.h.
        * Modules/webaudio/WaveShaperNode.cpp: Copied from Source/WebCore/webaudio/WaveShaperNode.cpp.
        * Modules/webaudio/WaveShaperNode.h: Copied from Source/WebCore/webaudio/WaveShaperNode.h.
        * Modules/webaudio/WaveShaperNode.idl: Copied from Source/WebCore/webaudio/WaveShaperNode.idl.
        * Modules/webaudio/WaveShaperProcessor.cpp: Copied from Source/WebCore/webaudio/WaveShaperProcessor.cpp.
        * Modules/webaudio/WaveShaperProcessor.h: Copied from Source/WebCore/webaudio/WaveShaperProcessor.h.
        * WebCore.gyp/WebCore.gyp:
        * WebCore.gypi:
        * WebCore.pri:
        * WebCore.xcodeproj/project.pbxproj:
        * webaudio/AsyncAudioDecoder.cpp: Removed.
        * webaudio/AsyncAudioDecoder.h: Removed.
        * webaudio/AudioBasicProcessorNode.cpp: Removed.
        * webaudio/AudioBasicProcessorNode.h: Removed.
        * webaudio/AudioBuffer.cpp: Removed.
        * webaudio/AudioBuffer.h: Removed.
        * webaudio/AudioBuffer.idl: Removed.
        * webaudio/AudioBufferCallback.h: Removed.
        * webaudio/AudioBufferCallback.idl: Removed.
        * webaudio/AudioBufferSourceNode.cpp: Removed.
        * webaudio/AudioBufferSourceNode.h: Removed.
        * webaudio/AudioBufferSourceNode.idl: Removed.
        * webaudio/AudioChannelMerger.cpp: Removed.
        * webaudio/AudioChannelMerger.h: Removed.
        * webaudio/AudioChannelMerger.idl: Removed.
        * webaudio/AudioChannelSplitter.cpp: Removed.
        * webaudio/AudioChannelSplitter.h: Removed.
        * webaudio/AudioChannelSplitter.idl: Removed.
        * webaudio/AudioContext.cpp: Removed.
        * webaudio/AudioContext.h: Removed.
        * webaudio/AudioContext.idl: Removed.
        * webaudio/AudioDestinationNode.cpp: Removed.
        * webaudio/AudioDestinationNode.h: Removed.
        * webaudio/AudioDestinationNode.idl: Removed.
        * webaudio/AudioGain.h: Removed.
        * webaudio/AudioGain.idl: Removed.
        * webaudio/AudioGainNode.cpp: Removed.
        * webaudio/AudioGainNode.h: Removed.
        * webaudio/AudioGainNode.idl: Removed.
        * webaudio/AudioListener.cpp: Removed.
        * webaudio/AudioListener.h: Removed.
        * webaudio/AudioListener.idl: Removed.
        * webaudio/AudioNode.cpp: Removed.
        * webaudio/AudioNode.h: Removed.
        * webaudio/AudioNode.idl: Removed.
        * webaudio/AudioNodeInput.cpp: Removed.
        * webaudio/AudioNodeInput.h: Removed.
        * webaudio/AudioNodeOutput.cpp: Removed.
        * webaudio/AudioNodeOutput.h: Removed.
        * webaudio/AudioPannerNode.cpp: Removed.
        * webaudio/AudioPannerNode.h: Removed.
        * webaudio/AudioPannerNode.idl: Removed.
        * webaudio/AudioParam.cpp: Removed.
        * webaudio/AudioParam.h: Removed.
        * webaudio/AudioParam.idl: Removed.
        * webaudio/AudioParamTimeline.cpp: Removed.
        * webaudio/AudioParamTimeline.h: Removed.
        * webaudio/AudioProcessingEvent.cpp: Removed.
        * webaudio/AudioProcessingEvent.h: Removed.
        * webaudio/AudioProcessingEvent.idl: Removed.
        * webaudio/AudioSourceNode.h: Removed.
        * webaudio/AudioSourceNode.idl: Removed.
        * webaudio/BiquadDSPKernel.cpp: Removed.
        * webaudio/BiquadDSPKernel.h: Removed.
        * webaudio/BiquadFilterNode.cpp: Removed.
        * webaudio/BiquadFilterNode.h: Removed.
        * webaudio/BiquadFilterNode.idl: Removed.
        * webaudio/BiquadProcessor.cpp: Removed.
        * webaudio/BiquadProcessor.h: Removed.
        * webaudio/ConvolverNode.cpp: Removed.
        * webaudio/ConvolverNode.h: Removed.
        * webaudio/ConvolverNode.idl: Removed.
        * webaudio/DOMWindowWebAudio.idl: Removed.
        * webaudio/DefaultAudioDestinationNode.cpp: Removed.
        * webaudio/DefaultAudioDestinationNode.h: Removed.
        * webaudio/DelayDSPKernel.cpp: Removed.
        * webaudio/DelayDSPKernel.h: Removed.
        * webaudio/DelayNode.cpp: Removed.
        * webaudio/DelayNode.h: Removed.
        * webaudio/DelayNode.idl: Removed.
        * webaudio/DelayProcessor.cpp: Removed.
        * webaudio/DelayProcessor.h: Removed.
        * webaudio/DynamicsCompressorNode.cpp: Removed.
        * webaudio/DynamicsCompressorNode.h: Removed.
        * webaudio/DynamicsCompressorNode.idl: Removed.
        * webaudio/HighPass2FilterNode.cpp: Removed.
        * webaudio/HighPass2FilterNode.h: Removed.
        * webaudio/HighPass2FilterNode.idl: Removed.
        * webaudio/JavaScriptAudioNode.cpp: Removed.
        * webaudio/JavaScriptAudioNode.h: Removed.
        * webaudio/JavaScriptAudioNode.idl: Removed.
        * webaudio/LowPass2FilterNode.cpp: Removed.
        * webaudio/LowPass2FilterNode.h: Removed.
        * webaudio/LowPass2FilterNode.idl: Removed.
        * webaudio/MediaElementAudioSourceNode.cpp: Removed.
        * webaudio/MediaElementAudioSourceNode.h: Removed.
        * webaudio/MediaElementAudioSourceNode.idl: Removed.
        * webaudio/OfflineAudioCompletionEvent.cpp: Removed.
        * webaudio/OfflineAudioCompletionEvent.h: Removed.
        * webaudio/OfflineAudioCompletionEvent.idl: Removed.
        * webaudio/OfflineAudioDestinationNode.cpp: Removed.
        * webaudio/OfflineAudioDestinationNode.h: Removed.
        * webaudio/RealtimeAnalyser.cpp: Removed.
        * webaudio/RealtimeAnalyser.h: Removed.
        * webaudio/RealtimeAnalyserNode.cpp: Removed.
        * webaudio/RealtimeAnalyserNode.h: Removed.
        * webaudio/RealtimeAnalyserNode.idl: Removed.
        * webaudio/WaveShaperDSPKernel.cpp: Removed.
        * webaudio/WaveShaperDSPKernel.h: Removed.
        * webaudio/WaveShaperNode.cpp: Removed.
        * webaudio/WaveShaperNode.h: Removed.
        * webaudio/WaveShaperNode.idl: Removed.
        * webaudio/WaveShaperProcessor.cpp: Removed.
        * webaudio/WaveShaperProcessor.h: Removed.

2012-03-20  Anders Carlsson  <andersca@apple.com>

        Add a per-ScrollableArea tile cache base class
        https://bugs.webkit.org/show_bug.cgi?id=81694

        Reviewed by Sam Weinig.

        Add an abstract base class, TiledBacking, that can be used to inform tile caches about changed
        state in scrollable areas (such as the currently visible rect, whether the page is active or not, etc).

        Make TileCache inherit from TiledBacking and port updating the visible rect over to this new mechanism.

        * WebCore.xcodeproj/project.pbxproj:
        * page/FrameView.cpp:
        (WebCore::FrameView::tiledBacking):
        (WebCore):
        * page/FrameView.h:
        (FrameView):
        * platform/ScrollableArea.h:
        (WebCore):
        (ScrollableArea):
        (WebCore::ScrollableArea::tiledBacking):
        * platform/graphics/GraphicsLayer.h:
        (WebCore):
        (WebCore::GraphicsLayer::tiledBacking):
        * platform/graphics/TiledBacking.h: Added.
        (WebCore):
        (TiledBacking):
        (WebCore::TiledBacking::~TiledBacking):
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::tiledBacking):
        * platform/graphics/ca/GraphicsLayerCA.h:
        (GraphicsLayerCA):
        * platform/graphics/ca/PlatformCALayer.h:
        (PlatformCALayer):
        * platform/graphics/ca/mac/PlatformCALayerMac.mm:
        (PlatformCALayer::tiledBacking):
        * platform/graphics/ca/mac/TileCache.h:
        (TileCache):
        * platform/graphics/ca/mac/WebTileCacheLayer.h:
        (WebCore):
        * platform/graphics/ca/mac/WebTileCacheLayer.mm:
        (-[WebTileCacheLayer WebCore::]):
        * platform/graphics/ca/win/PlatformCALayerWin.cpp:
        (PlatformCALayer::tiledBacking):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::frameViewDidScroll):

2012-03-20  Xiaomei Ji  <xji@chromium.org>

        visual word movement: crashes on CSS generated content.
        https://bugs.webkit.org/show_bug.cgi?id=81581

        Reviewed by Ryosuke Niwa.

        Check for null pointer when referencing box->renderer()->node() in previousRootInlineBox and nextRootInlineBox.

        Test: editing/selection/move-by-word-visually-crash-test-css-generated-content.html

        * editing/visible_units.cpp:
        (WebCore::previousRootInlineBox):
        (WebCore::nextRootInlineBox):

2012-03-20  Luke Macpherson  <macpherson@chromium.org>

        Use CSSPrimitiveValue::convertToLength() to handle CSSPropertyWebkitBoxReflect and in createGridTrackBreadth.
        https://bugs.webkit.org/show_bug.cgi?id=81633

        Reviewed by Andreas Kling.

        No new tests / refactoring only.

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

2012-03-20  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r111442.
        http://trac.webkit.org/changeset/111442
        https://bugs.webkit.org/show_bug.cgi?id=81711

        Causes crashes and image mismatches in canvas tests (Requested
        by leviw on #webkit).

        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::HTMLCanvasElement):
        (WebCore::HTMLCanvasElement::reset):
        (WebCore::HTMLCanvasElement::createImageBuffer):
        (WebCore::HTMLCanvasElement::clearCopiedImage):
        * html/HTMLCanvasElement.h:
        (HTMLCanvasElement):
        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::CanvasRenderingContext2D):
        (WebCore::CanvasRenderingContext2D::unwindStateStack):
        (WebCore::CanvasRenderingContext2D::reset):

2012-03-20  Adrienne Walker  <enne@google.com>

        RenderLayerCompositor doesn't properly clip graphics layer sizes
        https://bugs.webkit.org/show_bug.cgi?id=80372

        Reviewed by Simon Fraser.

        To find the bounds for a composited layer, calculateCompositedBounds
        iterates through all non-composited child layers using z-order and
        normal flow lists. This does not preserve clipping from ancestor
        layers, because a clipping ancestor layer can end up as a sibling to
        its clipped descendent because it is not a stacking context.

        Fix by explicitly checking cached clip roots.

        Test: compositing/clip-child-by-non-stacking-ancestor.html

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::localClipRect):
        (WebCore):
        * rendering/RenderLayer.h:
        (RenderLayer):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::repaintOnCompositingChange):
        (WebCore::RenderLayerCompositor::calculateCompositedBounds):

2012-03-20  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r111445 and r111446.
        http://trac.webkit.org/changeset/111445
        http://trac.webkit.org/changeset/111446
        https://bugs.webkit.org/show_bug.cgi?id=81708

        It broke Qt and GTK build intentionally (Requested by Ossy on
        #webkit).

        * WebCore.exp.in:
        * dom/Document.cpp:
        (WebCore::Document::initSecurityContext):
        * notifications/Notification.cpp:
        (WebCore::Notification::Notification):
        * notifications/NotificationCenter.cpp:
        (WebCore::NotificationCenter::checkPermission):
        (WebCore::NotificationCenter::requestPermission):
        * notifications/NotificationCenter.h:
        (NotificationCenter):
        * page/SecurityOrigin.cpp:
        (WebCore::SecurityOrigin::toString):
        * page/SecurityOrigin.h:
        (SecurityOrigin):

2012-03-20  Adam Klein  <adamk@chromium.org>

        Refactor ContainerNode::replaceChild to match other mutation methods and share code
        https://bugs.webkit.org/show_bug.cgi?id=81579

        Reviewed by Ojan Vafai.

        Originally landed as r111310, this fixes a bug in replaceChild
        introduced when switching to the insert-before logic.

        A future change will make use of the consistency among insertBefore/appendChild/replaceChild
        to handle insertion of DocumentFragments more cleanly.

        No new tests, no change in behavior.

        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::replaceChild): Use collectTargetNodes rather than walking through DocumentFragment children.
        Insert before rather than inserting after. Dispatch to other methods to update parent/sibling pointers.
        (WebCore::ContainerNode::appendChild): Call appendChildToContainer to update parent/sibling pointers.
        (WebCore::ContainerNode::parserAddChild): Use type inference in call to appendChildToContainer.

2012-03-20  Jon Lee  <jonlee@apple.com>

        Restrict access to notifications for unique origins and file URLs with no local file access
        https://bugs.webkit.org/show_bug.cgi?id=79704
        <rdar://problem/10912430>

        Reviewed by Adam Barth.

        Before checking or requesting permissions, we look at whether we can show notifications based on
        the security context. If not, we short circuit and do not forward the request to the client.

        * notifications/Notification.cpp:
        (WebCore::Notification::Notification): Fix a bug where creating a notification goes through slightly
        different logic for checking permissions than when checking permissions through the
        notification center.
        * notifications/NotificationCenter.cpp:
        (WebCore::NotificationCenter::checkPermission): Check to see if the origin can show notifications.
        (WebCore::NotificationCenter::requestPermission): If we know whether an origin can show notifications,
        we asynchronously call the callback with that decision. Otherwise we ask the client.

        Add new variable in the notification center to keep track of pending callbacks when we short-circuit
        requestPermission().
        * notifications/NotificationCenter.h:
        (NotificationRequestCallback): Add new private class encapsulating the callback.
        * notifications/NotificationCenter.cpp:
        (WebCore::NotificationCenter::requestTimedOut): Remove the request from the set of pending callbacks.
        (WebCore::NotificationCenter::NotificationRequest::createAndStartTimer): Because this is used when we already
        know the decision, and are not asking the client to decide, we can immediately trigger a one-shot timer
        to invoke the callback.
        (WebCore::NotificationCenter::NotificationRequest::NotificationRequest):
        (WebCore::NotificationCenter::NotificationRequest::startTimer):
        (WebCore::NotificationCenter::NotificationRequest::timerFired): Invoke the callback and tell the notification
        center.
        * page/SecurityOrigin.h: Add new toRawString() method to return the string representation of the origin,
        regardless of any restrictions that might otherwise cause toString() to return "null".
        * page/SecurityOrigin.cpp:
        (WebCore::SecurityOrigin::canShowNotifications): Added to return a tri-state regarding whether we know
        the origin can show notifications. If the origin is unique, we never let it show. If the origin has
        universal access, we always let it show. Otherwise the client should be asked.
        (WebCore::SecurityOrigin::toString): Refactor to use toRawString().
        (WebCore::SecurityOrigin::toRawString):

        Added FIXME's regarding the naming of enforceFilePathSeparation().
        * dom/Document.cpp:
        (WebCore::Document::initSecurityContext): Also, tab reformatting.

        * WebCore.exp.in: Export toRawString().

2012-03-20  Andreas Kling  <kling@webkit.org>

        Remove unused CSSPrimitiveValue constructors.
        <http://webkit.org/b/81695>

        Reviewed by Antti Koivisto.

        Kill off CSSPrimitiveValue constructors that aren't used anywhere.

        * css/CSSPrimitiveValue.cpp:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        * css/CSSPrimitiveValue.h:
        (CSSPrimitiveValueBase):
        (WebCore::CSSPrimitiveValueBase::CSSPrimitiveValueBase):
        (CSSPrimitiveValue):
        * css/CSSPrimitiveValueMappings.h:

2012-03-20  Sami Kyostila  <skyostil@chromium.org>

        Reuse buffer allocation if canvas size does not change
        https://bugs.webkit.org/show_bug.cgi?id=80871

        Reviewed by Stephen White.

        If the user changes the width or height attributes of a canvas element,
        the contents of the canvas should be cleared and the context state
        should be reset. This has become a common idiom to clear the canvas
        "efficiently" at the start of a frame.

        Previously, this code path triggered a full reallocation of the image
        buffer backing the canvas, leading to reduced performance. This patch
        implements an optimization where we reuse the previous image buffer
        allocation if the size of the canvas did not change. Also, instead of
        clearing the canvas every time its dimensions are touched, we only clear
        if anything has been drawn into the canvas since it was previously
        cleared.

        Note that for now this optimization only applies for 2D canvases,
        since it is not entirely clear how touching the dimensions of a WebGL
        canvas should work.

        Test: fast/canvas/canvas-resize-after-paint-without-layout.html +
              existing layout tests for canvas resetting.

        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::HTMLCanvasElement):
        (WebCore::HTMLCanvasElement::reset):
        (WebCore::HTMLCanvasElement::createImageBuffer):
        (WebCore::HTMLCanvasElement::clearImageBuffer):
        (WebCore):
        (WebCore::HTMLCanvasElement::clearCopiedImage):
        * html/HTMLCanvasElement.h:
        (HTMLCanvasElement):
        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::CanvasRenderingContext2D): Save the
        initial graphics context state so we can restore it without creating a
        new context.
        (WebCore::CanvasRenderingContext2D::unwindStateStack):
        (WebCore::CanvasRenderingContext2D::reset): No need to notify the
        compositor when the context is reset, because clearing the image buffer
        does the same thing. We can also skip the notification if we did not
        have an image buffer at the time of the reset, because the reset will
        not have any visual impact in this case. Finally, if the canvas size
        did change, the notification is also unnecessary because of the call
        to RenderObject::repaint() from HTMLCanvasElement::reset().

2012-03-20  Dana Jansens  <danakj@chromium.org>

        [chromium] Allow us to disable overdraw metrics when tracing is off
        https://bugs.webkit.org/show_bug.cgi?id=81431

        Reviewed by Adrienne Walker.

        This change allows us to disable overdraw metrics conditionally in the
        future with a one-line change in each LayerTreeHost class.

        Unit test: CCQuadCullerTest.verifyWithoutMetrics

        * platform/graphics/chromium/cc/CCLayerTreeHost.cpp:
        (WebCore::CCLayerTreeHost::paintLayerContents):
        * platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:
        (WebCore::CCLayerTreeHostImpl::calculateRenderPasses):
        * platform/graphics/chromium/cc/CCOcclusionTracker.cpp:
        (WebCore::::CCOcclusionTrackerBase):
        (WebCore):
        * platform/graphics/chromium/cc/CCOcclusionTracker.h:
        (CCOcclusionTrackerBase):
        * platform/graphics/chromium/cc/CCOverdrawMetrics.cpp:
        (WebCore::CCOverdrawMetrics::CCOverdrawMetrics):
        (WebCore::CCOverdrawMetrics::didCull):
        (WebCore::CCOverdrawMetrics::didDraw):
        (WebCore::CCOverdrawMetrics::recordMetrics):
        * platform/graphics/chromium/cc/CCOverdrawMetrics.h:
        (WebCore::CCOverdrawMetrics::create):
        (CCOverdrawMetrics):

2012-03-20  Robert Hogan  <robert@webkit.org>

        Use-after-free of continuation in RenderBlock::paintContinuationOutlines()
        https://bugs.webkit.org/show_bug.cgi?id=81276

        Reviewed by David Hyatt.

        Test: fast/css/relative-positioned-block-crash.html

        https://trac.webkit.org/changeset/108185/ allowed anonymous blocks to get their own layer (when they're
        relatively positioned). This broke the dependency in addContinuationWithOutline() on the owner of the continuation
        table and the renderer getting added to it always being in the same layer. When they're not in the same layer
        there's no guarantee that the owner of the continuation table will get painted again and so avoid any stale pointers
        in its continuation table should any of the renderers in there get destroyed.

        Fix this for now by only adding renderers to the containing block's continuation table if we don't have our own layer.
        This fix causes fast/inline/continuation-outlines-with-layers.html to regress as it uses blocks inside relatively positioned
        inlines, so skip it on all platforms pending a medium-term fix.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::paintObject):

2012-03-20  Adele Peterson  <adele@apple.com>

        "Attempt to insert nil value " exception when calling attributed string APIs on content with a custom font
        https://bugs.webkit.org/show_bug.cgi?id=81630
        <rdar://problem/10650660> 

        Reviewed by Alexey Proskuryakov. 

        Test: TestWebKitAPI/Tests/mac/AttributedString.mm 

        If content is using a custom font, then the platform font will be nil and needs to be nil checked.

        * platform/mac/HTMLConverter.mm: (+[WebHTMLConverter editingAttributedStringFromRange:]):

2012-03-20  Julien Chaffraix  <jchaffraix@webkit.org>

        Make distributeExtraLogicalHeightToRows return the consumed logical height
        https://bugs.webkit.org/show_bug.cgi?id=81678

        Reviewed by Tony Chang.

        Small refactoring, no change in behavior.

        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::distributeExtraLogicalHeight):
        Remove the consumed logical height from the available height.

        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::distributeExtraLogicalHeightToPercentRows):
        (WebCore::RenderTableSection::distributeExtraLogicalHeightToAutoRows):
        (WebCore::RenderTableSection::distributeRemainingExtraLogicalHeight):
        Changed those method to not return anything but remove from the available width.

        (WebCore::RenderTableSection::distributeExtraLogicalHeightToRows):
        Return the consumed logical height.

        * rendering/RenderTableSection.h:
        Updated the previous distribute functions signature and the comment about
        the returned value from distributeExtraLogicalHeightToRows.

2012-03-20  Jacky Jiang  <zhajiang@rim.com>

        [BlackBerry] Dijit crash WebCore::CookieManager::getRawCookies
        https://bugs.webkit.org/show_bug.cgi?id=81686

        Reviewed by Rob Buis.

        HTML plugin element with an empty src caused an ASSERT failure on debug
        build and a crash on release build.
        When getting cookie, url can be null, so we need to check for it to
        avoid the crash.

        No new tests as this is covered by
        LayoutTests/fast/loader/empty-embed-src-attribute.html.

        * platform/network/blackberry/ResourceRequestBlackBerry.cpp:
        (WebCore::ResourceRequest::initializePlatformRequest):

2012-03-20  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Tabbed pane drop down should be sorted.
        https://bugs.webkit.org/show_bug.cgi?id=81680

        Reviewed by Pavel Feldman.

        * inspector/front-end/TabbedPane.js:
        (WebInspector.TabbedPane.prototype._populateDropDownFromIndex.compareFunction):
        (WebInspector.TabbedPane.prototype._populateDropDownFromIndex):

2012-03-20  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Open resource dialog scripts list should be sorted.
        https://bugs.webkit.org/show_bug.cgi?id=81682

        Reviewed by Pavel Feldman.

        * inspector/front-end/FilteredItemSelectionDialog.js:
        (WebInspector.OpenResourceDialog.compareFunction):
        (WebInspector.OpenResourceDialog):

2012-03-20  Dana Jansens  <danakj@chromium.org>

        [chromium] Use opaque contents for paint culling
        https://bugs.webkit.org/show_bug.cgi?id=81676

        Reviewed by Adrienne Walker.

        UnitTest: CCLayerTreeHostTestContentLayerOcclusion

        * platform/graphics/chromium/cc/CCLayerTreeHost.cpp:
        (WebCore::CCLayerTreeHost::paintLayerContents):

2012-03-20  Dan Bernstein  <mitz@apple.com>

        Build fix after r111419.

        * dom/WebKitNamedFlow.cpp:
        * dom/WebKitNamedFlow.h:

2012-03-20  Dan Bernstein  <mitz@apple.com>

        REGRESSION (r111229): css1/basic/inheritance.html is failing
        https://bugs.webkit.org/show_bug.cgi?id=81684

        Reverted r111229.

        Rubber-stamped by Dave Hyatt.

        * dom/Document.cpp:
        (WebCore::Document::webkitGetFlowByName):
        * dom/Document.h:
        (Document):
        * dom/Element.cpp:
        (WebCore::Element::detach):
        * dom/NodeRenderingContext.cpp:
        (WebCore::NodeRenderingContext::moveToFlowThreadIfNeeded):
        * dom/WebKitNamedFlow.cpp:
        (WebCore):
        * dom/WebKitNamedFlow.h:
        (WebCore):
        (WebKitNamedFlow):
        * dom/WebKitNamedFlow.idl:

2012-03-20  Vineet Chaudhary  <rgf748@motorola.com>

        https://bugs.webkit.org/show_bug.cgi?id=80696
        Remove custom bindings for attribute type Array.

        Reviewed by Kentaro Hara.

        No new tests.

        * bindings/js/JSConsoleCustom.cpp: Removed custom function.
        (WebCore):
        * bindings/js/JSDOMBinding.h: Added template jsArray and toNativeArray.
        (WebCore):
        (WebCore::jsArray):
        (WebCore::toNativeArray):
        * bindings/scripts/CodeGenerator.pm: Modified codegenerators to generate appropriate code.
        (GetArrayType): Added GetArrayType to get return type of attribute interface.
        * bindings/scripts/CodeGeneratorGObject.pm: Modified codegenerators to generate appropriate code.
        (SkipAttribute):
        * bindings/scripts/CodeGeneratorJS.pm: Modified codegenerators to generate appropriate code.
        (AddIncludesForType):
        (JSValueToNative):
        (NativeToJSValue):
        * bindings/scripts/CodeGeneratorV8.pm: Modified codegenerators to generate appropriate code.
        (GenerateNormalAttrGetter):
        (GenerateNormalAttrSetter):
        (JSValueToNative):
        (NativeToJSValue):
        * bindings/scripts/test/GObject/WebKitDOMTestObj.cpp: Updated results from running binding tests.
        (webkit_dom_test_obj_get_property):
        (webkit_dom_test_obj_class_init):
        * bindings/scripts/test/GObject/WebKitDOMTestObj.h: Ditto.
        * bindings/scripts/test/JS/JSTestObj.cpp: Ditto.
        (WebCore::jsTestObjSequenceAttr):
        (WebCore::setJSTestObjSequenceAttr):
        (WebCore::jsTestObjPrototypeFunctionMethodReturningSequence):
        * bindings/scripts/test/V8/V8TestObj.cpp: Ditto.
        (WebCore::TestObjInternal::sequenceAttrAttrGetter):
        (WebCore::TestObjInternal::sequenceAttrAttrSetter):
        (WebCore::TestObjInternal::methodReturningSequenceCallback):
        * bindings/v8/V8Binding.h: Added template v8Array and toNativeArray.
        (WebCore):
        (WebCore::v8Array):
        (WebCore::toNativeArray):
        * bindings/v8/custom/V8ConsoleCustom.cpp: Removed custom function.
        (WebCore):
        * page/Console.idl: Replaced attribute type Array to sequence<SriptProfile> to remove
          custom bindings.

2012-03-20  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r111310.
        http://trac.webkit.org/changeset/111310
        https://bugs.webkit.org/show_bug.cgi?id=81683

        Broke layout test
        dom/xhtml/level3/core/nodereplacechild30.xhtml (Requested by
        aklein on #webkit).

        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::replaceChild):
        (WebCore::ContainerNode::appendChild):
        (WebCore::ContainerNode::parserAddChild):

2012-03-20  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Convert hasSpellingMarker to use Internals interface.
        https://bugs.webkit.org/show_bug.cgi?id=81300

        Reviewed by Ryosuke Niwa.

        Remove hasSpellingMarker functions, because it is able to work in the
        cross-port way through the Internals interface.

        No new tests, since we are improving here the infra-structure
        for testing a specific method.

        * testing/Internals.cpp:
        (WebCore::Internals::hasSpellingMarker):
        (WebCore):
        * testing/Internals.h:
        (Internals):
        * testing/Internals.idl:

2012-03-20  Dan Bernstein  <mitz@apple.com>

        Build fix.

        * history/PageCache.cpp: Fixed an unused function warning introduced in r111391.

2012-03-20  Konrad Piascik  <kpiascik@rim.com>

        (r110063) m_mouseDownMayStartDrag is used without being behind the ENABLE(DRAG_SUPPORT) macro
        https://bugs.webkit.org/show_bug.cgi?id=81666

        Reviewed by Rob Buis.

        Compiled with feature disabled and built.

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

2012-03-20  W. James MacLean  <wjmaclean@chromium.org>

        [chromium] Tune fling physics curve. [Not for review yet]
        https://bugs.webkit.org/show_bug.cgi?id=81398

        Reviewed by James Robinson.

        Existing tests updated.

        Tune physics of curve for better feel.

        * platform/TouchFlingPlatformGestureCurve.cpp:
        (WebCore::TouchFlingPlatformGestureCurve::apply):

2012-03-20  Alexis Menard  <alexis.menard@openbossa.org>

        Implement a fast path when setting CSS properties with keywords from JS.
        https://bugs.webkit.org/show_bug.cgi?id=80874

        Reviewed by Antti Koivisto.

        The idea is to avoid the creation of the CSSParser instance and to run the parser on
        a string we know it should be a keyword. When JS calls parseValue we try to check if we can
        use the fast path and if the keyword is accepted then we just add it to the declaration directly.
        For the sake of maintenance the parseValue function used by CSSGrammar.y is sharing some code with
        the fast path (keyword matching mostly).

        This patch improves this use case by 20%. Setting keyword properties from JS is used a lot in
        Google Maps for example (when zooming or panning).

        No new tests : it's a performance improvement, there shouldn't be any behavior change.

        * css/CSSParser.cpp:
        (WebCore):
        (WebCore::isValidKeywordPropertyAndValue):
        (WebCore::isKeywordPropertyID):
        (WebCore::parseKeywordValue):
        (WebCore::CSSParser::parseValue):

2012-03-20  Ian Vollick  <vollick@chromium.org>

        [chromium] Infrastructure to allow animating layers to be only partially updated
        https://bugs.webkit.org/show_bug.cgi?id=81106

        Reviewed by James Robinson

        Merged the controller tests in CCLayerAnimationControllerTest

        * WebCore.gypi:
        * platform/graphics/chromium/GraphicsLayerChromium.cpp:
        * platform/graphics/chromium/GraphicsLayerChromium.h:
        (GraphicsLayerChromium):
        * platform/graphics/chromium/LayerChromium.cpp:
        (WebCore::LayerChromium::LayerChromium):
        (WebCore::LayerChromium::pushPropertiesTo):
        (WebCore::LayerChromium::setOpacityFromAnimation):
        (WebCore):
        (WebCore::LayerChromium::setTransformFromAnimation):
        (WebCore::LayerChromium::addAnimation):
        (WebCore::LayerChromium::pauseAnimation):
        (WebCore::LayerChromium::removeAnimation):
        (WebCore::LayerChromium::suspendAnimations):
        (WebCore::LayerChromium::resumeAnimations):
        (WebCore::LayerChromium::setLayerAnimationController):
        (WebCore::LayerChromium::hasActiveAnimation):
        (WebCore::LayerChromium::setAnimationEvent):
        * platform/graphics/chromium/LayerChromium.h:
        (WebCore):
        (LayerChromium):
        (WebCore::LayerChromium::id):
        (WebCore::LayerChromium::opacity):
        (WebCore::LayerChromium::transform):
        (WebCore::LayerChromium::bounds):
        * platform/graphics/chromium/cc/CCActiveAnimation.h:
        (CCActiveAnimation):
        * platform/graphics/chromium/cc/CCAnimationEvents.cpp:
        (WebCore::CCAnimationEvent::CCAnimationEvent):
        (WebCore::CCAnimationEvent::toFloatAnimationFinishedEvent):
        (WebCore::CCAnimationEvent::toTransformAnimationFinishedEvent):
        (WebCore::CCAnimationStartedEvent::create):
        (WebCore):
        (WebCore::CCAnimationStartedEvent::CCAnimationStartedEvent):
        (WebCore::CCFloatAnimationFinishedEvent::create):
        (WebCore::CCFloatAnimationFinishedEvent::CCFloatAnimationFinishedEvent):
        (WebCore::CCFloatAnimationFinishedEvent::~CCFloatAnimationFinishedEvent):
        (WebCore::CCFloatAnimationFinishedEvent::type):
        (WebCore::CCTransformAnimationFinishedEvent::create):
        (WebCore::CCTransformAnimationFinishedEvent::CCTransformAnimationFinishedEvent):
        (WebCore::CCTransformAnimationFinishedEvent::~CCTransformAnimationFinishedEvent):
        (WebCore::CCTransformAnimationFinishedEvent::type):
        * platform/graphics/chromium/cc/CCAnimationEvents.h:
        (WebCore):
        (WebCore::CCAnimationEvent::targetProperty):
        (CCAnimationEvent):
        (CCAnimationStartedEvent):
        (CCFloatAnimationFinishedEvent):
        (WebCore::CCFloatAnimationFinishedEvent::finalValue):
        (CCTransformAnimationFinishedEvent):
        (WebCore::CCTransformAnimationFinishedEvent::finalValue):
        * platform/graphics/chromium/cc/CCLayerAnimationController.cpp:
        (WebCore::CCLayerAnimationController::CCLayerAnimationController):
        (WebCore::CCLayerAnimationController::create):
        (WebCore::CCLayerAnimationController::pushAnimationUpdatesTo):
        (WebCore::CCLayerAnimationController::animate):
        (WebCore):
        (WebCore::CCLayerAnimationController::add):
        (WebCore::CCLayerAnimationController::getActiveAnimation):
        (WebCore::CCLayerAnimationController::hasActiveAnimation):
        (WebCore::CCLayerAnimationController::isAnimatingProperty):
        (WebCore::CCLayerAnimationController::pushNewAnimationsToImplThread):
        (WebCore::CCLayerAnimationController::removeAnimationsCompletedOnMainThread):
        (WebCore::CCLayerAnimationController::startAnimationsWaitingForNextTick):
        (WebCore::CCLayerAnimationController::startAnimationsWaitingForStartTime):
        (WebCore::CCLayerAnimationController::startAnimationsWaitingForTargetAvailability):
        (WebCore::CCLayerAnimationController::resolveConflicts):
        (WebCore::CCLayerAnimationController::purgeFinishedAnimations):
        (WebCore::CCLayerAnimationController::tickAnimations):
        * platform/graphics/chromium/cc/CCLayerAnimationController.h:
        (WebCore):
        (CCLayerAnimationControllerClient):
        (WebCore::CCLayerAnimationControllerClient::~CCLayerAnimationControllerClient):
        (CCLayerAnimationController):
        * platform/graphics/chromium/cc/CCLayerAnimationControllerImpl.cpp: Removed.
        * platform/graphics/chromium/cc/CCLayerAnimationControllerImpl.h: Removed.
        * platform/graphics/chromium/cc/CCLayerAnimationDelegate.h:
        (CCLayerAnimationDelegate):
        * platform/graphics/chromium/cc/CCLayerImpl.cpp:
        (WebCore::CCLayerImpl::CCLayerImpl):
        (WebCore::CCLayerImpl::setOpacityFromAnimation):
        (WebCore):
        (WebCore::CCLayerImpl::setTransformFromAnimation):
        * platform/graphics/chromium/cc/CCLayerImpl.h:
        (CCLayerImpl):
        (WebCore::CCLayerImpl::id):
        (WebCore::CCLayerImpl::layerAnimationController):
        * platform/graphics/chromium/cc/CCLayerTreeHost.cpp:
        (WebCore::CCLayerTreeHost::CCLayerTreeHost):
        (WebCore::CCLayerTreeHost::updateAnimations):
        (WebCore::CCLayerTreeHost::finishCommitOnImplThread):
        (WebCore::CCLayerTreeHost::didBecomeInvisibleOnImplThread):
        (WebCore::CCLayerTreeHost::animateLayers):
        (WebCore):
        (WebCore::CCLayerTreeHost::animateLayersRecursive):
        * platform/graphics/chromium/cc/CCLayerTreeHost.h:
        * platform/graphics/chromium/cc/CCLayerTreeHostCommon.cpp:
        * platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:
        (WebCore::CCLayerTreeHostImpl::animateLayersRecursive):
        (WebCore::CCLayerTreeHostImpl::animateLayers):
        * platform/graphics/chromium/cc/CCLayerTreeHostImpl.h:
        (CCLayerTreeHostImpl):
        * platform/graphics/chromium/cc/CCThreadProxy.h:
        (WebCore::CCThreadProxy::BeginFrameAndCommitState::BeginFrameAndCommitState):

2012-03-20  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: REGRESSION Detached DOM Nodes are not highlighted
        https://bugs.webkit.org/show_bug.cgi?id=81662

        Reviewed by Yury Semikhatsky.

        * inspector/front-end/HeapSnapshot.js:
        (WebInspector.HeapSnapshotNode.prototype.get isDetachedDOMTree):

2012-03-20  Gavin Peters  <gavinp@chromium.org>

        New PageCache histogram for tracking the highest leverage frame reject reasons.
        https://bugs.webkit.org/show_bug.cgi?id=81358

        Reviewed by Adam Barth.

        The current chromium FrameClientImpl always denies page cache; but
        that's easily fixable.  This histogram tracks which rejection
        causes occur alone with that cause.  I'm particularly interested
        in knowing how many more pages would work in the page cache if we
        could get plugins in.

        * history/PageCache.cpp:
        (WebCore::logCanCachePageDecision):

2012-03-15  Pavel Podivilov  <podivilov@chromium.org>

        Web Inspector: support inline source maps.
        https://bugs.webkit.org/show_bug.cgi?id=81248

        - support optional map.sourcesContent array with sources content
        - support data: url as script sourceMapURL, e.g. "//@ sourceMappingURL=data:application/json;base64,<base64-encoded map>"

        Reviewed by Pavel Feldman.

        * inspector/front-end/CompilerSourceMapping.js:
        (WebInspector.ClosureCompilerSourceMapping):
        (WebInspector.ClosureCompilerSourceMapping.prototype.loadSourceCode):
        (WebInspector.ClosureCompilerSourceMapping.prototype._parseMap):
        (WebInspector.ClosureCompilerSourceMapping.prototype._canonicalizeURL):

2012-03-20  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: treat Uint* external arrays as arrays in console.
        https://bugs.webkit.org/show_bug.cgi?id=81653

        Reviewed by Yury Semikhatsky.

        * bindings/js/JSInjectedScriptHostCustom.cpp:
        (WebCore::JSInjectedScriptHost::type):
        * bindings/v8/custom/V8InjectedScriptHostCustom.cpp:
        (WebCore::V8InjectedScriptHost::typeCallback):

2012-03-20  Andreas Kling  <kling@webkit.org>

        Let CSSImageValue inherit directly from CSSValue.
        <http://webkit.org/b/81635>

        Reviewed by Antti Koivisto.

        This removes the last of the CSSPrimitiveValue subclasses, which will
        open up the class to heavier refactoring.

        Those CSSImageValues that used to represent the 'none' value are now
        simply created as CSSPrimitiveValue identifiers by the parser.

        Test: fast/css/image-value-type.html

        * css/CSSCursorImageValue.cpp:
        (WebCore::CSSCursorImageValue::~CSSCursorImageValue):
        (WebCore::CSSCursorImageValue::updateIfSVGCursorIsUsed):
        (WebCore::CSSCursorImageValue::cachedImage):
        * css/CSSImageValue.cpp:
        (WebCore::CSSImageValue::CSSImageValue):
        (WebCore::CSSImageValue::cachedOrPendingImage):
        (WebCore::CSSImageValue::cachedImage):
        (WebCore::CSSImageValue::customCssText):
        * css/CSSImageValue.h:
        (WebCore::CSSImageValue::url):
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):
        (WebCore::CSSParser::parseFillImage):
        (WebCore::CSSParser::parseBorderImage):
        * css/CSSStyleApplyProperty.cpp:
        (WebCore::ApplyPropertyCursor::applyValue):
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::collectMatchingRulesForList):
        * css/CSSValue.h:
        (WebCore::CSSValue::isPrimitiveValue):

2012-03-20  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: call .length as the last check when detecting arrays.
        https://bugs.webkit.org/show_bug.cgi?id=81335

        Reviewed by Yury Semikhatsky.

        * inspector/InjectedScriptSource.js:

2012-03-20  Alexander Pavlov  <apavlov@chromium.org>

        Web Inspector: newly added CSS rules shouldn't rewrite HTML content in the resources panel
        https://bugs.webkit.org/show_bug.cgi?id=81414

        Reviewed by Vsevolod Vlasov.

        * inspector/front-end/CSSStyleModel.js:
        (WebInspector.CSSStyleModelResourceBinding.prototype._styleSheetChanged.setContent):
        (WebInspector.CSSStyleModelResourceBinding.prototype._styleSheetChanged):

2012-03-20  Yury Semikhatsky  <yurys@chromium.org>

        Web Inspector: provide class name filter for "comparison" view in heap profiler
        https://bugs.webkit.org/show_bug.cgi?id=81641

        Class name filtering now works for both Summary and Comparison views.

        Reviewed by Pavel Feldman.

        * inspector/front-end/DetailedHeapshotView.js:
        (WebInspector.DetailedHeapshotView.prototype._createToolbarWithClassNameFilter):
        (WebInspector.DetailedHeapshotView.prototype._changeNameFilter):
        * inspector/front-end/heapProfiler.css:
        (.detailed-heapshot-view .class-view-grid):
        (.detailed-heapshot-view .class-view-toolbar):
        (.detailed-heapshot-view .class-view-toolbar input.class-name-filter):

2012-03-20  Nikolas Zimmermann  <nzimmermann@rim.com>

        Make animVal support type-safe
        https://bugs.webkit.org/show_bug.cgi?id=81640

        Reviewed by Antti Koivisto.

        Test: svg/animations/force-use-shadow-tree-recreation-while-animating.html

        Redesign animVal support in a type-safe fashion, avoiding the SVGGenericAnimatedType
        and associated reinterpret_casts, which require all call-sites to assure that the
        types are safe to cast, before actually calling the method.

        Remove pure virtual animationStarted/Ended/ValueWillChange/ValueDidChange & currentBaseValueVariant methods from SVGAnimatedProperty,
        and de-virtualize them in classes that inherit from SVGAnimatedProperty, like SVGAnimatedPropertyTearOff, etc.

        Add startAnimValAnimation/stopAnimValAnimation/resetAnimValToBaseVal/animValWillChange/animVallDidChange methods to all
        SVGAnimatedXXXAnimator classes that currently support animVal (SVGAnimatedLength/LengthList/Number(OptionalNumber)/NumberList/TransformList).
        Those SVGAnimatedLengthAnimator can cast the generic SVGAnimatedProperty* associated with a certain SVG DOM property, to the real type
        eg. SVGAnimatedLength (which is a SVGAnimatedPropertyTearOff<SVGLength>). This way we can call those methods, without relying on virtual
        function calls. Also it makes the "SVGGenericAnimatedType* currentBaseValueVariant()" accessor needless, as we can just call the method
        right on eg. the SVGAnimatedLength, which gives us the "const SVGLength&" object, instead of a generic pointer type, that we have to
        reinterpret_cast to some hopefully-matching expected type. The new approach is truly type-safey, but needs a bit more boilerplate code.

        To reduce the amount of copy&paste across the SVGAnimatedXXXAnimator classes, all code is placed in template functions in
        SVGAnimatedTypeAnimator.h, which can be shared across all SVGAnimatedXXXAnimator classes, that inherit from SVGAnimatedTypeAnimator.

        Test: svg/animations/force-use-shadow-tree-recreation-while-animating.html

        * svg/SVGAnimateElement.cpp:
        (WebCore::SVGAnimateElement::calculateAnimatedValue):
        (WebCore::SVGAnimateElement::resetToBaseValue):
        (WebCore::SVGAnimateElement::applyResultsToTarget):
        (WebCore):
        (WebCore::SVGAnimateElement::targetElementWillChange):
        * svg/SVGAnimatedLength.cpp:
        (WebCore::SVGAnimatedLengthAnimator::startAnimValAnimation):
        (WebCore::SVGAnimatedLengthAnimator::stopAnimValAnimation):
        (WebCore):
        (WebCore::SVGAnimatedLengthAnimator::resetAnimValToBaseVal):
        (WebCore::SVGAnimatedLengthAnimator::animValWillChange):
        (WebCore::SVGAnimatedLengthAnimator::animValDidChange):
        * svg/SVGAnimatedLength.h:
        (WebCore):
        (SVGAnimatedLengthAnimator):
        * svg/SVGAnimatedLengthList.cpp:
        (WebCore::SVGAnimatedLengthListAnimator::startAnimValAnimation):
        (WebCore::SVGAnimatedLengthListAnimator::stopAnimValAnimation):
        (WebCore):
        (WebCore::SVGAnimatedLengthListAnimator::resetAnimValToBaseVal):
        (WebCore::SVGAnimatedLengthListAnimator::animValWillChange):
        (WebCore::SVGAnimatedLengthListAnimator::animValDidChange):
        * svg/SVGAnimatedLengthList.h:
        (WebCore):
        (SVGAnimatedLengthListAnimator):
        * svg/SVGAnimatedNumber.cpp:
        (WebCore::SVGAnimatedNumberAnimator::startAnimValAnimation):
        (WebCore::SVGAnimatedNumberAnimator::stopAnimValAnimation):
        (WebCore):
        (WebCore::SVGAnimatedNumberAnimator::resetAnimValToBaseVal):
        (WebCore::SVGAnimatedNumberAnimator::animValWillChange):
        (WebCore::SVGAnimatedNumberAnimator::animValDidChange):
        * svg/SVGAnimatedNumber.h:
        (WebCore):
        (SVGAnimatedNumberAnimator):
        * svg/SVGAnimatedNumberList.cpp:
        (WebCore::SVGAnimatedNumberListAnimator::startAnimValAnimation):
        (WebCore::SVGAnimatedNumberListAnimator::stopAnimValAnimation):
        (WebCore):
        (WebCore::SVGAnimatedNumberListAnimator::resetAnimValToBaseVal):
        (WebCore::SVGAnimatedNumberListAnimator::animValWillChange):
        (WebCore::SVGAnimatedNumberListAnimator::animValDidChange):
        * svg/SVGAnimatedNumberList.h:
        (WebCore):
        (SVGAnimatedNumberListAnimator):
        * svg/SVGAnimatedNumberOptionalNumber.cpp:
        (WebCore::SVGAnimatedNumberOptionalNumberAnimator::startAnimValAnimation):
        (WebCore::SVGAnimatedNumberOptionalNumberAnimator::stopAnimValAnimation):
        (WebCore):
        (WebCore::SVGAnimatedNumberOptionalNumberAnimator::resetAnimValToBaseVal):
        (WebCore::SVGAnimatedNumberOptionalNumberAnimator::animValWillChange):
        (WebCore::SVGAnimatedNumberOptionalNumberAnimator::animValDidChange):
        * svg/SVGAnimatedNumberOptionalNumber.h:
        (WebCore):
        (SVGAnimatedNumberOptionalNumberAnimator):
        * svg/SVGAnimatedTransformList.cpp:
        (WebCore::SVGAnimatedTransformListAnimator::startAnimValAnimation):
        (WebCore):
        (WebCore::SVGAnimatedTransformListAnimator::stopAnimValAnimation):
        (WebCore::SVGAnimatedTransformListAnimator::resetAnimValToBaseVal):
        (WebCore::SVGAnimatedTransformListAnimator::animValWillChange):
        (WebCore::SVGAnimatedTransformListAnimator::animValDidChange):
        * svg/SVGAnimatedTransformList.h:
        (WebCore):
        (SVGAnimatedTransformListAnimator):
        * svg/SVGAnimatedType.h:
        (WebCore):
        * svg/SVGAnimatedTypeAnimator.h:
        (WebCore):
        (SVGAnimatedTypeAnimator):
        (WebCore::SVGAnimatedTypeAnimator::startAnimValAnimation):
        (WebCore::SVGAnimatedTypeAnimator::stopAnimValAnimation):
        (WebCore::SVGAnimatedTypeAnimator::resetAnimValToBaseVal):
        (WebCore::SVGAnimatedTypeAnimator::animValWillChange):
        (WebCore::SVGAnimatedTypeAnimator::animValDidChange):
        (WebCore::SVGAnimatedTypeAnimator::findAnimatedPropertiesForAttributeName):
        (WebCore::SVGAnimatedTypeAnimator::startAnimation):
        (WebCore::SVGAnimatedTypeAnimator::stopAnimValAnimationForType):
        (WebCore::SVGAnimatedTypeAnimator::animValDidChangeForType):
        (WebCore::SVGAnimatedTypeAnimator::animValWillChangeForType):
        (WebCore::SVGAnimatedTypeAnimator::constructFromOneBaseValue):
        (WebCore::SVGAnimatedTypeAnimator::resetFromOneBaseValue):
        (WebCore::SVGAnimatedTypeAnimator::constructFromTwoBaseValues):
        (WebCore::SVGAnimatedTypeAnimator::resetFromTwoBaseValues):
        (WebCore::SVGAnimatedTypeAnimator::castAnimatedPropertyToActualType):
        (WebCore::SVGAnimatedTypeAnimator::collectAnimatedPropertiesFromInstances):
        * svg/SVGAnimationElement.cpp:
        (WebCore::SVGAnimationElement::applyAnimatedValue):
        (WebCore::SVGAnimationElement::setTargetAttributeAnimatedValue):
        * svg/SVGAnimationElement.h:
        (SVGAnimationElement):
        * svg/SVGElementInstance.cpp:
        (WebCore::SVGElementInstance::invalidateAllInstancesOfElement):
        (WebCore::SVGElementInstance::InstanceUpdateBlocker::InstanceUpdateBlocker):
        (WebCore):
        (WebCore::SVGElementInstance::InstanceUpdateBlocker::~InstanceUpdateBlocker):
        * svg/SVGElementInstance.h:
        (WebCore):
        (InstanceUpdateBlocker):
        (SVGElementInstance):
        * svg/properties/SVGAnimatedListPropertyTearOff.h:
        (WebCore::SVGAnimatedListPropertyTearOff::currentBaseValue):
        (WebCore::SVGAnimatedListPropertyTearOff::animationStarted):
        (WebCore::SVGAnimatedListPropertyTearOff::animationEnded):
        (WebCore::SVGAnimatedListPropertyTearOff::animValWillChange):
        (WebCore::SVGAnimatedListPropertyTearOff::animValDidChange):
        * svg/properties/SVGAnimatedProperty.h:
        (WebCore):
        * svg/properties/SVGAnimatedPropertyTearOff.h:
        (WebCore::SVGAnimatedPropertyTearOff::currentBaseValue):
        (WebCore::SVGAnimatedPropertyTearOff::animationStarted):
        (WebCore::SVGAnimatedPropertyTearOff::animationEnded):
        (WebCore::SVGAnimatedPropertyTearOff::animValWillChange):
        (WebCore::SVGAnimatedPropertyTearOff::animValDidChange):
        * svg/properties/SVGAnimatedStaticPropertyTearOff.h:
        (WebCore::SVGAnimatedStaticPropertyTearOff::currentBaseValue):
        (WebCore::SVGAnimatedStaticPropertyTearOff::animationStarted):
        (WebCore::SVGAnimatedStaticPropertyTearOff::animationEnded):
        (WebCore::SVGAnimatedStaticPropertyTearOff::animValWillChange):
        (WebCore::SVGAnimatedStaticPropertyTearOff::animValDidChange):

2012-03-20  Mihnea Ovidenie  <mihnea@adobe.com>

        [CSSRegions]Implement NamedFlow::getRegionsByContentNode
        https://bugs.webkit.org/show_bug.cgi?id=77746

        Reviewed by David Hyatt.

        The list of regions returned is a static node list.

        Tests: fast/regions/get-regions-by-content-node-horiz-bt.html
               fast/regions/get-regions-by-content-node-horiz-tb.html
               fast/regions/get-regions-by-content-node-vert-lr.html
               fast/regions/get-regions-by-content-node-vert-rl.html
               fast/regions/get-regions-by-content-node.html
               fast/regions/get-regions-by-content-node2.html

        * dom/WebKitNamedFlow.cpp:
        (WebCore::WebKitNamedFlow::getRegionsByContentNode):
        (WebCore):
        * dom/WebKitNamedFlow.h:
        (WebKitNamedFlow):
        * dom/WebKitNamedFlow.idl:
        * rendering/RenderFlowThread.cpp:
        (WebCore::RenderFlowThread::regionInRange):
        (WebCore):
        (WebCore::RenderFlowThread::objectInFlowRegion):
        * rendering/RenderFlowThread.h:
        * rendering/RenderRegion.h:
        (WebCore::RenderRegion::flowThread):

2012-03-20  Luke Macpherson  <macpherson@chromium.org>

        Remove min and max parameters from CSSPrimitiveValue's roundForImpreciseConversion function.
        https://bugs.webkit.org/show_bug.cgi?id=81629

        Reviewed by Andreas Kling.

        No new tests / refactoring only.

        * css/CSSPrimitiveValue.cpp:
        (WebCore::CSSPrimitiveValue::computeLength):
        * css/CSSPrimitiveValue.h:
        (WebCore::roundForImpreciseConversion):
        * rendering/style/RenderStyle.h:
        (WebCore::adjustForAbsoluteZoom):

2012-03-20  Jason Liu  <jason.liu@torchmobile.com.cn>

        [BlackBerry]Cookies shouldn't be set into each of webcore's request and platform's request. And this makes a regression.
        https://bugs.webkit.org/show_bug.cgi?id=80800

        FrameLoaderClientBlackBerry::dispatchWillSendRequest sets cookies to resourceRequest's header
        list to show cookies in inspector. And NetworkManager::startJob will set cookies to platformRequest's
        m_cookieData again. So cookies are set two times. This causes performance issue.

        Moreover, platformRequest will copy cookies from the resourceRequest. And then platformRequest has
        the same cookies in its header list and m_cookieData. Network will use header list's cookies which
        are output as latin1 only. This causes the regression of https://bugs.webkit.org/show_bug.cgi?id=80307.

        Now, set cookies in initializePlatformRequest to ensure setting cookies only once.

        Reviewed by George Staikos.

        Test: http/tests/cookies/resources/setUtf8Cookies.php

        * platform/network/blackberry/NetworkManager.cpp:
        (WebCore::NetworkManager::startJob):
        * platform/network/blackberry/ResourceRequest.h:
        (ResourceRequest):
        * platform/network/blackberry/ResourceRequestBlackBerry.cpp:
        (WebCore::ResourceRequest::initializePlatformRequest):

2012-03-19  Benjamin Poulain  <bpoulain@apple.com>

        Build fix for Debug build after r111358

        Unreviewed.

        * bindings/js/CachedScriptSourceProvider.h:
        * bindings/js/StringSourceProvider.h:

2012-03-19  Emil A Eklund  <eae@chromium.org>

        Add FractionalLayoutUnit version of blend to AnimationUtilities
        https://bugs.webkit.org/show_bug.cgi?id=81572

        Reviewed by Eric Seidel.
        
        Add version of blend method that operates on FractionalLayoutUnits. This
        will be used in place of the integer version in many places once we
        enable support for subpixel layout.

        No new tests.

        * platform/FractionalLayoutUnit.h:
        Include math.h to make GTK build happy.

        * platform/animation/AnimationUtilities.h:
        (WebCore::blend):

2012-03-19  Adam Barth  <abarth@webkit.org>

        Remove support for "magic" iframe
        https://bugs.webkit.org/show_bug.cgi?id=81590

        Reviewed by Eric Seidel.

        This patch removes support for "magic" iframe, which previously allowed
        an iframe to be transfered from one document to another without
        reloading the iframe.  The idea behind this feature was to let sites
        create "pop out" windows that could outlive their parents by
        transfering state to these windows via these magic iframes.

        Unforuntately, this feature was never implemented by other browsers and
        has been the source of a series of security vulnerabilities.  Although
        we have fixed each vulnerability as it has been discovered, the feature
        is still a complex corner case that isn't widely exercised on the web.
        For that reason, it's likely to have more vulnerabilities in the
        future.

        I'm not aware of any web sites that use this feature anymore.  There
        were a handful of them, but we appear to have been successful in
        evangalizing them to move away from "magic" iframe.

        * dom/Document.cpp:
        (WebCore::Document::adoptNode):
        * html/HTMLFrameElementBase.cpp:
        (WebCore):
        (WebCore::HTMLFrameElementBase::HTMLFrameElementBase):
        (WebCore::HTMLFrameElementBase::insertedIntoDocument):
        * html/HTMLFrameElementBase.h:
        (HTMLFrameElementBase):
        * loader/DocumentLoader.cpp:
        (WebCore):
        * loader/DocumentLoader.h:
        (DocumentLoader):
        * loader/EmptyClients.h:
        (WebCore::EmptyFrameLoaderClient::createFrame):
        * loader/FrameLoader.cpp:
        (WebCore):
        * loader/FrameLoader.h:
        (FrameLoader):
        * loader/FrameLoaderClient.h:
        (FrameLoaderClient):
        * loader/ResourceLoadNotifier.cpp:
        (WebCore):
        * loader/ResourceLoadNotifier.h:
        (ResourceLoadNotifier):
        * page/Frame.cpp:
        (WebCore):
        * page/Frame.h:
        (Frame):

2012-03-19  Julien Chaffraix  <jchaffraix@webkit.org>

        REGRESSION(r110072): Improper repainting on table with overflow: hidden
        https://bugs.webkit.org/show_bug.cgi?id=81460

        Reviewed by Simon Fraser.

        Test: fast/repaint/table-hover-on-link.html

        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::layout): Add a call to RenderBlock::updateCachedSizeForOverflowClip
        so that we properly keep our cached size up to date. This fixes the problem for now but the
        real solution is to make sure it is called on all classes that needs to. This is tracked by
        bug 81461.

2012-03-19  Pablo Flouret  <pablof@motorola.com>

        Add support for crossorigin attribute in script elements
        https://bugs.webkit.org/show_bug.cgi?id=81438

        Reviewed by Adam Barth.

        Works similarly to img and its crossorigin attribute. In the future it
        could allow for things like showing full error messages in error
        handlers, etc.

        Tests: http/tests/security/script-crossorigin-loads-correctly.html
               http/tests/security/script-crossorigin-loads-same-origin.html
               http/tests/security/script-with-failed-cors-check-fails-to-load.html

        * dom/ScriptElement.cpp:
        (WebCore::ScriptElement::ScriptElement):
        (WebCore::ScriptElement::requestScript):
        (WebCore::ScriptElement::notifyFinished):
        * dom/ScriptElement.h:
        (ScriptElement):
        * html/HTMLScriptElement.idl:

2012-03-19  Benjamin Poulain  <benjamin@webkit.org>

        Do not copy the script source in the SourceProvider, just reference the existing string
        https://bugs.webkit.org/show_bug.cgi?id=81466

        Reviewed by Geoffrey Garen.

        Instead of creating a copy of the string with 16bits characters, we just return
        a shared StringImpl.

        * bindings/js/CachedScriptSourceProvider.h:
        * bindings/js/StringSourceProvider.h:

2012-03-19  Dana Jansens  <danakj@chromium.org>

        A quick early-out for Region::contains() test
        https://bugs.webkit.org/show_bug.cgi?id=81625

        Reviewed by Anders Carlsson.

        If the bounds of region B include a row/column that is outside the bounds of
        region A, then region B contains a pixel within that row/column that is
        outside of region A.

        * platform/graphics/Region.cpp:
        (WebCore::Region::contains):

2012-03-19  Eric Seidel  <eric@webkit.org>

        Unreviewed attempt to fix the EFL build.

        * platform/graphics/efl/IconEfl.cpp:

2012-03-19  Eric Seidel  <eric@webkit.org>

        Fix more WTF header include paths in WebCore
        https://bugs.webkit.org/show_bug.cgi?id=81602

        Reviewed by Martin Robinson.

        Chromium, Mac and Win already build w/o including wtf subdirectories
        in their include paths for WebCore/WebKit.  Gtk, Qt, and other ports
        should eventually do the same.  This patch fixes up a few loose
        wtf includes in these ports using some search/replace across WebCore.
        If the EWS bots pass this patch doesn't really need any other review.

        * accessibility/gtk/AXObjectCacheAtk.cpp:
        * accessibility/gtk/WebKitAccessibleInterfaceText.cpp:
        * platform/KURL.cpp:
        * platform/audio/gstreamer/AudioDestinationGStreamer.cpp:
        * platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.cpp:
        * platform/audio/gtk/AudioBusGtk.cpp:
        * platform/clutter/GRefPtrClutter.h:
        * platform/graphics/gstreamer/GRefPtrGStreamer.h:
        * platform/graphics/gstreamer/ImageGStreamerCairo.cpp:
        * platform/graphics/gstreamer/ImageGStreamerQt.cpp:
        * platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:
        * platform/graphics/gtk/ImageBufferGtk.cpp:
        * platform/graphics/pango/FontPango.cpp:
        * platform/graphics/qt/ImageBufferDataQt.h:
        * platform/graphics/wx/ImageBufferDataWx.h:
        * platform/gtk/ContextMenuGtk.cpp:
        * platform/gtk/ContextMenuItemGtk.cpp:
        * platform/gtk/FileSystemGtk.cpp:
        * platform/gtk/GOwnPtrGtk.h:
        * platform/gtk/GtkAuthenticationDialog.h:
        * platform/gtk/GtkPopupMenu.cpp:
        * platform/gtk/LanguageGtk.cpp:
        * platform/gtk/LocalizedStringsGtk.cpp:
        * platform/gtk/PopupMenuGtk.cpp:
        * platform/gtk/RenderThemeGtk.cpp:
        * platform/gtk/RenderThemeGtk.h:
        * platform/network/soup/GOwnPtrSoup.h:
        * platform/network/soup/ResourceRequestSoup.cpp:
        * platform/network/soup/ResourceResponseSoup.cpp:
        * platform/network/soup/SocketStreamHandle.h:
        * platform/network/soup/SoupURIUtils.cpp:
        * platform/text/TextEncoding.cpp:
        * platform/text/gtk/TextBreakIteratorGtk.cpp:
        * platform/text/gtk/TextCodecGtk.cpp:
        * platform/text/gtk/TextCodecGtk.h:

2012-03-19  Julien Chaffraix  <jchaffraix@webkit.org>

        Move the extra logical height distribution into RenderTable as a new step in our layout algorithm
        https://bugs.webkit.org/show_bug.cgi?id=81548

        Reviewed by Tony Chang.

        Refactoring, no expected change in behavior.

        Moving the distribution step into RenderTable is needed to implement a better distribution algorithm that would
        span several RenderTableSection (which is what IE and FF are doing right now).

        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::distributeExtraLogicalHeight):
        (WebCore::RenderTable::layout):
        Moved the distribution step into distributeExtraLogicalHeight. While at it, changed the code to make use of the helper
        methods to iterate over the sections and explicitly floor the LayoutUnit before calling distributeExtraLogicalHeight.

        * rendering/RenderTable.h:
        Added distributeExtraLogicalHeight.

        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::layoutRows):
        Changed the method signature as it doesn't handle the distribution step anymore.

        * rendering/RenderTableSection.h:
        Updated layoutRows signature and exposed distributeExtraLogicalHeightToRows for RenderTable use.

2012-03-19  Anders Carlsson  <andersca@apple.com>

        Another attempt at fixing the Windows build.

        * platform/graphics/avfoundation/cf/MediaPlayerPrivateAVFoundationCF.cpp:
        (WebCore::LayerClient::platformCALayerDeviceScaleFactor):

2012-03-19  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        [EFL] Fix build break because of PlatformString.h
        https://bugs.webkit.org/show_bug.cgi?id=81619

        Unreviewed. Fix build break because of PlatformString.h.

        * platform/graphics/efl/IconEfl.cpp: Include PlatformString.h from text directory.

2012-03-19  Eric Seidel  <eric@webkit.org>

        Fix CrWin build after r111258.
        https://bugs.webkit.org/show_bug.cgi?id=81281

        Unreviewed build fix.
        I also fixed similarly incorrect wtf/ includes for other ports
        (which aren't yet as strict as Chromium about wtf includes).

        * platform/blackberry/CookieManager.cpp:
        * platform/blackberry/CookieParser.cpp:
        * platform/blackberry/ParsedCookie.cpp:
        * platform/blackberry/SharedTimerBlackBerry.cpp:
        * platform/graphics/qt/GraphicsLayerQt.cpp:
        * platform/graphics/texmap/TextureMapperAnimation.cpp:
        * rendering/RenderThemeChromiumWin.cpp:
        (WebCore):

2012-03-19  Eric Seidel  <eric@webkit.org>

        Fix CrWin build after r111258.
        https://bugs.webkit.org/show_bug.cgi?id=81281

        Unreviewed build fix.

        * platform/graphics/chromium/FontCacheChromiumWin.cpp:
        * platform/graphics/chromium/FontPlatformDataChromiumWin.cpp:
        * platform/graphics/texmap/TextureMapperAnimation.h:

2012-03-19  Tony Chang  <tony@chromium.org>

        add css parsing of flex-line-pack
        https://bugs.webkit.org/show_bug.cgi?id=81427

        Reviewed by Ojan Vafai.

        Spec: http://dev.w3.org/csswg/css3-flexbox/#flex-line-pack

        Updated tests in css3/flexbox/css-properties.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore):
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):
        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        (WebCore):
        (WebCore::CSSPrimitiveValue::operator EFlexLinePack):
        * css/CSSProperty.cpp:
        (WebCore::CSSProperty::isInheritedProperty):
        * css/CSSPropertyNames.in:
        * css/CSSStyleApplyProperty.cpp:
        (WebCore::CSSStyleApplyProperty::CSSStyleApplyProperty):
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::collectMatchingRulesForList):
        * css/CSSValueKeywords.in:
        * rendering/style/RenderStyle.h:
        * rendering/style/RenderStyleConstants.h:
        * rendering/style/StyleFlexibleBoxData.cpp:
        (WebCore::StyleFlexibleBoxData::StyleFlexibleBoxData):
        (WebCore::StyleFlexibleBoxData::operator==):
        * rendering/style/StyleFlexibleBoxData.h:
        (StyleFlexibleBoxData):

2012-03-19  Gustavo Noronha Silva  <gns@gnome.org>

        [GTK] libWebCore.la has become too big for make
        https://bugs.webkit.org/show_bug.cgi?id=81582

        Unreviewed build fix.

        * GNUmakefile.am: build an intermediate library for modules, so that the list
        of source files used to build WebCore can be split and not reach make's limits;
        also try to force relinking libWebCore.la and libWebCoreModules.la when the
        GNUmakefile.am or GNUmakefile.list.am change

2012-03-19  Dana Jansens  <danakj@chromium.org>

        [chromium] Push culled tiles that are prepainted
        https://bugs.webkit.org/show_bug.cgi?id=81552

        Reviewed by Adrienne Walker.

        If a tile was culled during paint, but then prepainted in the following
        idle paint pass, it was still marked as culled (and thus dirty) and not
        pushed to the impl side.

        Renames tile->m_updateCulled to tile->m_updated. This value is true if
        the tile is updated any time during a commit, and remains false if it
        is culled every time the layer is painted.

        Unit test: TiledLayerChromiumTest.pushIdlePaintedOccludedTiles

        * platform/graphics/chromium/TiledLayerChromium.cpp:
        (WebCore::UpdatableTile::isDirtyForCurrentFrame):
        (UpdatableTile):
        (WebCore::UpdatableTile::UpdatableTile):
        (WebCore::TiledLayerChromium::updateCompositorResources):
        (WebCore::TiledLayerChromium::prepareToUpdateTiles):
        (WebCore::TiledLayerChromium::resetUpdateState):

2012-03-19  Anders Carlsson  <andersca@apple.com>

        Fix Snow Leopard build.

        * platform/graphics/ca/mac/TileCache.mm:
        (WebCore::TileCache::createTileLayer):

2012-03-19  Michal Mocny  <mmocny@google.com>

        [chromium] Adding support for GL_EXT_discard_framebuffer.
        https://bugs.webkit.org/show_bug.cgi?id=81383

        Reviewed by James Robinson.

        * platform/graphics/chromium/Extensions3DChromium.h:

2012-03-19  Adam Klein  <adamk@chromium.org>

        Refactor ContainerNode::replaceChild to match other mutation methods and share code
        https://bugs.webkit.org/show_bug.cgi?id=81579

        Reviewed by Ojan Vafai.

        A future change will make use of the consistency among insertBefore/appendChild/replaceChild
        to handle insertion of DocumentFragments more cleanly.

        No new tests, no change in behavior.

        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::replaceChild): Use collectTargetNodes rather than walking through DocumentFragment children.
        Insert before rather than inserting after. Dispatch to other methods to update parent/sibling pointers.
        (WebCore::ContainerNode::appendChild): Call appendChildToContainer to update parent/sibling pointers.
        (WebCore::ContainerNode::parserAddChild): Use type inference in call to appendChildToContainer.

2012-03-19  Ian Vollick  <vollick@chromium.org>

        [chromium] Times in the cc should be expressed in seconds.
        https://bugs.webkit.org/show_bug.cgi?id=80514

        Reviewed by James Robinson.

        Updated timer tests to use seconds.

        * platform/TouchFlingPlatformGestureCurve.h:
        (TouchFlingPlatformGestureCurve):
        * platform/graphics/chromium/cc/CCActiveGestureAnimation.cpp:
        (WebCore::CCActiveGestureAnimation::animate):
        * platform/graphics/chromium/cc/CCActiveGestureAnimation.h:
        (CCActiveGestureAnimation):
        * platform/graphics/chromium/cc/CCDelayBasedTimeSource.cpp:
        (WebCore::CCDelayBasedTimeSource::create):
        (WebCore::CCDelayBasedTimeSource::CCDelayBasedTimeSource):
        (WebCore::CCDelayBasedTimeSource::setActive):
        (WebCore::CCDelayBasedTimeSource::onTimerFired):
        (WebCore::CCDelayBasedTimeSource::monotonicallyIncreasingTime):
        (WebCore):
        (WebCore::CCDelayBasedTimeSource::postNextTickTask):
        * platform/graphics/chromium/cc/CCDelayBasedTimeSource.h:
        (CCDelayBasedTimeSource):
        * platform/graphics/chromium/cc/CCGestureCurve.h:
        (CCGestureCurve):
        * platform/graphics/chromium/cc/CCThreadProxy.cpp:
        (WTF):
        (WebCore::CCThreadProxy::beginContextRecreation):
        (WebCore::CCThreadProxy::tryToRecreateContext):
        (WebCore::CCThreadProxy::initializeImplOnImplThread):
        * platform/graphics/chromium/cc/CCTimer.cpp:
        (WebCore::CCTimer::startOneShot):
        * platform/graphics/chromium/cc/CCTimer.h:
        (CCTimer):

2012-03-19  Florin Malita  <fmalita@google.com>

        Relative-height block SVG root not layed out on container height change
        https://bugs.webkit.org/show_bug.cgi?id=81513

        Reviewed by Dirk Schulze.

        Tests: svg/custom/svg-percent-scale-block-expected.html
               svg/custom/svg-percent-scale-block.html

        A couple of places still have style()->logical{Min,Max,}Height percent checks,
        which do not work for SVG elements. This patch adds a virtual hasRelativeLogicalHeight()
        RenderBox method to replace the explicit style checks.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::layoutBlockChildren):
        Use virtual hasRelativeLogicalHeight() instead of logical height style checks.

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::hasRelativeLogicalHeight):
        (WebCore):
        * rendering/RenderBox.h:
        (RenderBox):
        Add virtual hasRelativeLogicalHeight().

        * rendering/RenderView.cpp:
        (WebCore::RenderView::layout):
        Use virtual hasRelativeLogicalHeight() instead of logical height style checks, if possible.

        * rendering/svg/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::hasRelativeLogicalHeight):
        (WebCore):
        * rendering/svg/RenderSVGRoot.h:
        (RenderSVGRoot):
        Add hasRelativeLogicalHeight() override.

2012-03-19  Jer Noble  <jer.noble@apple.com>

        Assertion failure in RenderBlock::addChildIgnoringAnonymousColumnBlocks when running fullscreen/full-screen-twice-crash.html 
        causing "crashes" on the Lion Intel Debug WebKit2 test bots.
        https://bugs.webkit.org/show_bug.cgi?id=81171

        Reviewed by Dan Bernstein.

        No new tests; fixes fullscreen/* tests when running in WebKitTestRunner (WebKit2).

        Add a special-case check if the parent anonymous container is a full screen renderer or placeholder.

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

2012-03-19  Enrica Casucci  <enrica@apple.com>

        WebKit2: create sandbox extensions for files that are dropped in an input control.
        https://bugs.webkit.org/show_bug.cgi?id=81153
        <rdar://problem/11031207>

        Reviewed by Alexey Proskuryakov.

        Now the pasteboard access is performed only in the UI process, it is
        necessary to create sandbox extensions for each file that is dropped into
        an input type=file element. The extensions are created at the time the files
        are dropped and consumed immediately.

        * page/DragActions.h: Added new drag action to be used by the WebDragClient.
        * page/DragController.cpp:
        (WebCore::DragController::concludeEditDrag): Added call to the drag client with the new action.

2012-03-19  Eric Seidel  <eric@webkit.org>

        Fix Chromium Win
        https://bugs.webkit.org/show_bug.cgi?id=81281

        Unreviewed build fix.

        * platform/graphics/chromium/TransparencyWin.h:

2012-03-19  Eric Seidel  <eric@webkit.org>

        Fix the chromium world.
        https://bugs.webkit.org/show_bug.cgi?id=81281

        Unreviewed build fix.

        * rendering/RenderThemeChromiumSkia.cpp:

2012-03-19  Brady Eidson  <beidson@apple.com>

        <rdar://problem/10917120> and https://bugs.webkit.org/show_bug.cgi?id=81066
        Crash in 3rd party WebKit apps under XHR/Cache code

        Reviewed by Antti Koivisto.

        No new layout tests.
        TestWebKitAPI test MemoryCachePruneWithinResourceLoadDelegate included

        A CachedResource representing an XHR was being deleted by cache pruning during a delegate callback.
        This worked until http://trac.webkit.org/changeset/98380

        * history/PageCache.cpp:
        (WebCore::PageCache::releaseAutoreleasedPagesNow): Only trigger pruning after the page cache
          autorelease if it was enabled before.

        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::loadResource): Disable pruning before loading the resource and
          re-enable it afterwards if necessary.

        * loader/cache/MemoryCache.h:
        (WebCore::MemoryCache::pruneEnabled):

2012-03-19  Anders Carlsson  <andersca@apple.com>

        Fix Windows build.

        * platform/graphics/win/MediaPlayerPrivateQuickTimeVisualContext.cpp:
        (WebCore::MediaPlayerPrivateQuickTimeVisualContext::LayerClient::platformCALayerDeviceScaleFactor):

2012-03-18  James Robinson  <jamesr@chromium.org>

        [chromium] Implement fling-by-wheel on compositor thread
        https://bugs.webkit.org/show_bug.cgi?id=81462

        Reviewed by Adrienne Walker.

        Adds compositor thread support for a fling type implemented as a sequence of wheel scrolls. Covered by new tests
        in WebCompositorInputHandlerImplTests.

        * platform/graphics/chromium/cc/CCInputHandler.h:
        (CCInputHandler):
        * platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:
        (WebCore::CCLayerTreeHostImpl::scheduleAnimation):
        (WebCore):
        * platform/graphics/chromium/cc/CCLayerTreeHostImpl.h:
        (CCLayerTreeHostImpl):
        * platform/graphics/chromium/cc/CCThreadProxy.cpp:
        (WebCore::CCThreadProxy::scheduledActionDrawAndSwap):

2012-03-19  Emil A Eklund  <eae@chromium.org>

        [mac/chromium] Change platform code to use pixelSnappedRect methods
        https://bugs.webkit.org/show_bug.cgi?id=81016

        Reviewed by Eric Seidel.

        Change platform code to use Node::getPixelSnappedRect,
        pixelSnappedBoundingBoxRect and pixelSnappedAbsoluteClippedOverflowRect
        to avoid exposing subpixel types to the platform layer.

        No new tests.

        * WebCore.exp.in:
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::pixelSnappedAbsoluteClippedOverflowRect):
        Add pixelSnapped version of absoluteClippedOverflowRect
        
        (WebCore):
        * rendering/RenderObject.h:
        (RenderObject):

2012-03-19  Brady Eidson  <beidson@apple.com>

        <rdar://problem/10848575> and https://bugs.webkit.org/show_bug.cgi?id=81516
        REGRESSION (r107435) URLs copied from WebKit apps aren't in the right pasteboard format

        Reviewed by Enrica Casucci.

        r107435 started saving/restoring URLs as strings.
        We need to go back to setting the URL on the pasteboard using AppKit URL pasteboard APIs.

        WebKit API test: ContextMenuCanCopyURL
        No WebKit2 API test possible at this time.

        * platform/mac/PlatformPasteboardMac.mm:
        (WebCore::PlatformPasteboard::setURL):

2012-03-19  Anders Carlsson  <andersca@apple.com>

        Make the TileCache work with HiDPI again
        https://bugs.webkit.org/show_bug.cgi?id=81569
        <rdar://problem/11031542>

        Reviewed by Sam Weinig.

        Set the contentsScale of the individual tile layers to be the same as the device scale factor.
        Also, take into account the fact that the value passed to TileCache::setScale is the product of the
        page scale factor and the device scale factor, so divide it by the device scale factor before storing
        it in m_scale.

        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::platformCALayerDeviceScaleFactor):
        (WebCore):
        * platform/graphics/ca/GraphicsLayerCA.h:
        (GraphicsLayerCA):
        * platform/graphics/ca/PlatformCALayerClient.h:
        (PlatformCALayerClient):
        * platform/graphics/ca/mac/TileCache.h:
        (TileCache):
        * platform/graphics/ca/mac/TileCache.mm:
        (WebCore::TileCache::TileCache):
        (WebCore::TileCache::setScale):
        (WebCore::TileCache::createTileLayer):

2012-03-19  Abhishek Arya  <inferno@chromium.org>

        Crash due to layer tree information not updated when moving run-in children.
        https://bugs.webkit.org/show_bug.cgi?id=81265

        Reviewed by Julien Chaffraix.

        We need to do a full removal as the run-in child is getting inserted into
        the neighbouring block and |blockRunIn| is going to be destroyed later
        in the function.

        Test: fast/runin/run-in-layer-not-removed-crash.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::handleRunInChild):

2012-03-19  Dana Jansens  <danakj@chromium.org>

        [chromium] Remove misleading double-if
        https://bugs.webkit.org/show_bug.cgi?id=81557

        Reviewed by Adrienne Walker.

        Simple code cleanup, no functionality change.

        * platform/graphics/chromium/TiledLayerChromium.cpp:
        (WebCore::TiledLayerChromium::prepareToUpdateTiles):

2012-03-19  Eric Seidel  <eric@webkit.org>

        Fix WTF header include discipline in Chromium WebKit
        https://bugs.webkit.org/show_bug.cgi?id=81281

        Reviewed by James Robinson.

        I also fixed some bad include dicipline for other ports
        as well.  Those changes are not yet necessary for those ports
        to keep building, but soon should be as those authors
        remove all the extra WTF includes from WebCore and other non-WTF projects.

        * Modules/indexeddb/IDBLevelDBBackingStore.cpp:
        * bindings/scripts/test/CPP/WebDOMFloat64Array.cpp:
        * bindings/scripts/test/GObject/WebKitDOMFloat64Array.cpp:
        * bindings/scripts/test/GObject/WebKitDOMFloat64ArrayPrivate.h:
        * bindings/scripts/test/ObjC/DOMFloat64Array.mm:
        * bindings/v8/NPV8Object.cpp:
        * bindings/v8/SerializedScriptValue.cpp:
        * bindings/v8/SerializedScriptValue.h:
        * bindings/v8/V8Binding.cpp:
        * bindings/v8/V8Binding.h:
        * bindings/v8/V8DOMWrapper.cpp:
        * bindings/v8/V8Utilities.cpp:
        * bindings/v8/custom/V8ArrayBufferCustom.cpp:
        * bindings/v8/custom/V8ArrayBufferViewCustom.h:
        * bindings/v8/custom/V8AudioContextCustom.cpp:
        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        * bindings/v8/custom/V8DedicatedWorkerContextCustom.cpp:
        * bindings/v8/custom/V8Float32ArrayCustom.cpp:
        * bindings/v8/custom/V8Float64ArrayCustom.cpp:
        * bindings/v8/custom/V8Int16ArrayCustom.cpp:
        * bindings/v8/custom/V8Int32ArrayCustom.cpp:
        * bindings/v8/custom/V8Int8ArrayCustom.cpp:
        * bindings/v8/custom/V8MessagePortCustom.cpp:
        * bindings/v8/custom/V8Uint16ArrayCustom.cpp:
        * bindings/v8/custom/V8Uint32ArrayCustom.cpp:
        * bindings/v8/custom/V8Uint8ArrayCustom.cpp:
        * bindings/v8/custom/V8Uint8ClampedArrayCustom.cpp:
        * bindings/v8/custom/V8WorkerCustom.cpp:
        * bindings/v8/custom/V8XMLHttpRequestCustom.cpp:
        * bridge/qt/qt_runtime.cpp:
        * editing/gtk/FrameSelectionGtk.cpp:
        * loader/archive/mhtml/MHTMLArchive.cpp:
        * platform/ScrollAnimatorNone.cpp:
        * platform/blackberry/CookieMap.h:
        * platform/blackberry/CookieParser.h:
        * platform/blackberry/SSLKeyGeneratorBlackBerry.cpp:
        * platform/chromium/DragImageChromiumSkia.cpp:
        * platform/chromium/PlatformCursor.h:
        * platform/chromium/PlatformSupport.h:
        * platform/chromium/PopupMenuPrivate.h:
        * platform/chromium/TraceEvent.h:
        * platform/chromium/WidgetChromium.cpp:
        * platform/efl/RefPtrEfl.h:
        * platform/graphics/cairo/RefPtrCairo.h:
        * platform/graphics/chromium/RateLimiter.h:
        * platform/graphics/chromium/TiledLayerChromium.cpp:
        * platform/graphics/efl/IconEfl.cpp:
        * platform/graphics/gstreamer/GStreamerGWorld.h:
        * platform/graphics/gtk/IconGtk.cpp:
        * platform/graphics/skia/PlatformContextSkia.h:
        * platform/graphics/texmap/TextureMapperBackingStore.h:
        * platform/graphics/texmap/TextureMapperLayer.cpp:
        * platform/graphics/wx/TransformationMatrixWx.cpp:
        * platform/gtk/PlatformMouseEventGtk.cpp:
        * platform/leveldb/LevelDBSlice.h:
        * platform/mediastream/MediaStreamCenter.cpp:
        * platform/network/soup/SocketStreamHandleSoup.cpp:
        * platform/network/win/ResourceHandleWin.cpp:
        * platform/qt/RenderThemeQtMobile.cpp:
        * platform/wx/MouseEventWx.cpp:
        * platform/wx/wxcode/win/fontprops.cpp:

2012-03-19  Dana Jansens  <danakj@chromium.org>

        [chromium] Invalidate/update evicted tiles during commit
        https://bugs.webkit.org/show_bug.cgi?id=81529

        Reviewed by Adrienne Walker.

        A previous change caused a regression where evicted (invalid) tiles
        were no longer marked as dirty and updated. The regress was caused
        in https://bugs.webkit.org/show_bug.cgi?id=81175 and is fixed here.

        Unit test: TiledLayerChromiumTest.pushDeletedTiles

        * platform/graphics/chromium/TiledLayerChromium.cpp:
        (WebCore::UpdatableTile::copyAndClearDirty):
        (WebCore::TiledLayerChromium::prepareToUpdateTiles):

2012-03-19  Adam Barth  <abarth@webkit.org>

        Remove PLATFORM(TORCHMOBILE) ifdef from MainResourceLoader.cpp
        https://bugs.webkit.org/show_bug.cgi?id=81549

        Reviewed by Eric Seidel.

        This appears to be the only PLATFORM(TORCHMOBILE) ifdef in WebCore.  I
        don't believe this ifdef is needed anymore.

        * loader/MainResourceLoader.cpp:
        (WebCore::shouldLoadAsEmptyDocument):
        (WebCore):

2012-03-19  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r111207.
        http://trac.webkit.org/changeset/111207
        https://bugs.webkit.org/show_bug.cgi?id=81561

        Causing chromium unit test failure (Requested by reveman on
        #webkit).

        * platform/graphics/chromium/Extensions3DChromium.h:
        (Extensions3DChromium):

2012-03-19  Anders Carlsson  <andersca@apple.com>

        Remove unnecessary CALayer overrides from WebTileCacheLayer
        https://bugs.webkit.org/show_bug.cgi?id=81562

        Reviewed by Dan Bernstein.

        * platform/graphics/ca/mac/TileCache.h:
        (TileCache):
        * platform/graphics/ca/mac/WebTileCacheLayer.mm:

2012-03-19  Emil A Eklund  <eae@chromium.org>

        Correct usage of LayoutUnits in page code in preparation for turning on subpixel layout
        https://bugs.webkit.org/show_bug.cgi?id=81538

        Reviewed by Eric Seidel.

        Fix usage of LayoutUnits and conversions between types in page code.

        No new tests.

        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::innerHeight):
        (WebCore::DOMWindow::innerWidth):
        Explicitly cast long to int. InspectorInstrumentation requires a long and
        FractionalLayoutUnit has no constructor that takes long.
        
        * page/EventHandler.cpp:
        (WebCore::EventHandler::sendContextMenuEventForKey):
        Pixel snap overflow rect as selection rects are integer based.
        
        * page/FrameView.cpp:
        (WebCore::FrameView::scrollContentsFastPath):
        Pixel snap repaint rects when computing update rect as all scrolling is
        done on integer bounds.
        
        * page/GestureTapHighlighter.cpp:
        Change rects vector to IntRect as addFocusRingRects operates on IntRects.
        
        * page/Page.cpp:
        (WebCore::Page::addRelevantRepaintedObject):
        (WebCore::Page::addRelevantUnpaintedObject):
        Change paint methods to take a LayoutRect paint rect.
        
        * page/SpatialNavigation.cpp:
        (WebCore::distanceDataForNode):
        Change distance calculation to use floats instead of converting to float
        at the end.

2012-03-19  David Hyatt  <hyatt@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=81553
        
        [New Multicolumn] Stub out classes to represent sets of column region boxes.

        RenderRegionSet is an abstract class representing a set of contiguous anonymous
        same-size regions.
        
        RenderMultiColumnSet derives from RenderRegionSet and represents a set of contiguous
        columns. It will also handle unique column behavior like column rule painting.
        
        Eventually there will be a RenderPageSet derived class for printing/pages, but
        that will come later after I finish rebuilding multi-column layout.

        Reviewed by Dan Bernstein.

        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * rendering/RenderMultiColumnSet.cpp: Added.
        (WebCore):
        (WebCore::RenderMultiColumnSet::RenderMultiColumnSet):
        (WebCore::RenderMultiColumnSet::renderName):
        * rendering/RenderMultiColumnSet.h: Added.
        (WebCore):
        (RenderMultiColumnSet):
        * rendering/RenderRegionSet.cpp: Added.
        (WebCore):
        (WebCore::RenderRegionSet::RenderRegionSet):
        * rendering/RenderRegionSet.h: Added.
        (WebCore):
        (RenderRegionSet):

2012-03-19  Raymond Toy  <rtoy@google.com>

        Add playback state for AudioBufferSourceNode and add number of active nodes
        https://bugs.webkit.org/show_bug.cgi?id=79701

        Add a playback state to AudioBufferSourceNode so that the user can
        tell if the node is scheduled, playing, or finished.

        For an AudioContext, add a count of the number of
        AudioBufferSourceNode's that are active (playing audio).

        Deleted m_isPlaying and m_hasFinished. For the record, m_isPlaying
        is the same as a playbackState of SCHEDULED_STATE or PLAYING_STATE.
        m_hasFinished is equivalent to a playbackState of FINISHED_STATE.
        
        Reviewed by Chris Rogers.

        Test: webaudio/audiobuffersource-playbackState.html

        * webaudio/AudioBufferSourceNode.cpp:
        (WebCore):
        (WebCore::AudioBufferSourceNode::AudioBufferSourceNode):
        initialize playbackState, remove m_isPlaying, m_hasFinished.
        (WebCore::AudioBufferSourceNode::process): Update playbackState
        (WebCore::AudioBufferSourceNode::finish): Update playbackState
        (WebCore::AudioBufferSourceNode::noteOn): Update playbackState
        (WebCore::AudioBufferSourceNode::noteGrainOn): Update playbackState
        (WebCore::AudioBufferSourceNode::noteOff): Use playbackState 
        * webaudio/AudioBufferSourceNode.h:
        (AudioBufferSourceNode): Define states, remove m_isPlaying, m_hasFinished.
        (WebCore::AudioBufferSourceNode::playbackState): Added.
        * webaudio/AudioBufferSourceNode.idl: Define constants for the
        playback state, add attribute playbackState.
        * webaudio/AudioContext.cpp:
        (WebCore::AudioContext::activeSourceCount): Added.
        (WebCore::AudioContext::incrementActiveSourceCount): Added.
        (WebCore::AudioContext::decrementActiveSourceCount): Added.
        * webaudio/AudioContext.h:
        (AudioContext):
        * webaudio/AudioContext.idl: Add attribute activeSourceCount.

2012-03-19  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r109014.
        http://trac.webkit.org/changeset/109014
        https://bugs.webkit.org/show_bug.cgi?id=81551

        Causing crashes (Requested by inferno-sec on #webkit).

        * rendering/style/RenderStyle.h:

2012-03-19  Tony Chang  <tony@chromium.org>

        Unreviewed, remove headers that no longer exist or moved in WebCore.gypi.

        * WebCore.gypi:

2012-03-19  Mihnea Ovidenie  <mihnea@adobe.com>

        [CSSRegions]Implement NamedFlow::contentNodes attribute
        https://bugs.webkit.org/show_bug.cgi?id=80134

        Reviewed by David Hyatt.

        The named flow content nodes collection contains those nodes with webkitFlowInto property set to 'flow'.
        In the list, the nodes are placed in document order. Nodes with display:none are also part of the list.
        The list of nodes is returned as a static node list.

        Test: fast/regions/webkit-named-flow-content-nodes.html

        * dom/Document.cpp:
        (WebCore::Document::webkitGetFlowByName):
        * dom/Document.h:
        * dom/Element.cpp:
        (WebCore::Element::detach):
        * dom/NodeRenderingContext.cpp:
        (WebCore::NodeRenderingContext::moveToFlowThreadIfNeeded):
        * dom/WebKitNamedFlow.cpp:
        (WebCore::WebKitNamedFlow::contentNodes):
        (WebCore):
        (WebCore::WebKitNamedFlow::registerContentNode):
        * dom/WebKitNamedFlow.h:
        (WebCore):
        (WebKitNamedFlow):
        (WebCore::WebKitNamedFlow::unregisterContentNode):
        * dom/WebKitNamedFlow.idl:

2012-03-19  Xingnan Wang  <xingnan.wang@intel.com>

        ConvolverNode should not incur processing latency
        https://bugs.webkit.org/show_bug.cgi?id=75564

        Reviewed by Chris Rogers.

        Add the DirectConvolver instead of FFTConvolver for the processing of the leading portion of impulse response.

        * WebCore.gypi:
        * platform/audio/DirectConvolver.cpp: Added.
        (WebCore):
        (WebCore::DirectConvolver::DirectConvolver):
        (WebCore::DirectConvolver::process):
        (WebCore::DirectConvolver::reset):
        * platform/audio/DirectConvolver.h: Added.
        (WebCore):
        (DirectConvolver):
        (WebCore::DirectConvolver::convolveSize):
        * platform/audio/ReverbConvolver.cpp:
        (WebCore::ReverbConvolver::ReverbConvolver):
        * platform/audio/ReverbConvolver.h:
        * platform/audio/ReverbConvolverStage.cpp:
        (WebCore::ReverbConvolverStage::ReverbConvolverStage):
        (WebCore::ReverbConvolverStage::process):
        (WebCore::ReverbConvolverStage::reset):
        * platform/audio/ReverbConvolverStage.h:
        (WebCore):
        (ReverbConvolverStage):

2012-03-19  Anders Carlsson  <andersca@apple.com>

        Find in page highlights get out of place when scrolling
        https://bugs.webkit.org/show_bug.cgi?id=81543

        Reviewed by Sam Weinig.

        Remove a now unused function from GraphicsLayer.

        * platform/graphics/GraphicsLayer.h:
        (GraphicsLayer):
        * platform/graphics/ca/GraphicsLayerCA.h:
        (GraphicsLayerCA):

2012-03-19  David Hyatt  <hyatt@apple.com>

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

        [New Multicolumn] Make the multi-column block re-layout its children when the column width/count change.
        Cache the count/width on the multi-column block for easy access.

        Reviewed by Antti Koivisto.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::recomputeLogicalWidth):
        (WebCore::RenderBlock::layoutBlock):
        * rendering/RenderBlock.h:
        Virtualize the code that recomputes the logical width for a block and sets relayoutChildren to true,
        so that column code can subclass the method to also check for changes in the column width/count.

        * rendering/RenderMultiColumnBlock.cpp:
        (WebCore::RenderMultiColumnBlock::computeColumnCountAndWidth):
        The column count/width determination algorithm in one method on the RenderMultiColumnBlock. It's a copy
        of the code from RenderBlock (which will be going away eventually).

        (WebCore::RenderMultiColumnBlock::recomputeLogicalWidth):
        * rendering/RenderMultiColumnBlock.h:
        (RenderMultiColumnBlock):
        Subclassed method to also check for changes in the column width to set relayoutChildren to true.

2012-03-19  Michal Mocny  <mmocny@google.com>

        [chromium] Updating WebGraphicsContext3D MemoryAllocation callback to accept a struct with have backbuffer suggestion.
        https://bugs.webkit.org/show_bug.cgi?id=81279

        Reviewed by James Robinson.

        * platform/graphics/chromium/Extensions3DChromium.h:
        (GpuMemoryAllocationCHROMIUM):
        (WebCore::Extensions3DChromium::GpuMemoryAllocationCHROMIUM::GpuMemoryAllocationCHROMIUM):
        (GpuMemoryAllocationChangedCallbackCHROMIUM):

2012-03-19  Tony Chang  <tony@chromium.org>

        flex-item-align: stretch should only grow, never shrink
        https://bugs.webkit.org/show_bug.cgi?id=80882

        Reviewed by Ojan Vafai.

        New test cases in css3/flexbox/flex-align-stretch.html.

        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::alignChildren): Move stretch code into a separate function.
        (WebCore::RenderFlexibleBox::alignChildStretch): Add an early return if our height is shrinking.
        (WebCore):
        * rendering/RenderFlexibleBox.h:
        (RenderFlexibleBox):

2012-03-19  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Implement snippets evaluation.
        https://bugs.webkit.org/show_bug.cgi?id=81334

        Reviewed by Pavel Feldman.

        * inspector/front-end/ConsoleView.js:
        (WebInspector.ConsoleView.prototype.evaluateUsingTextPrompt):
        (WebInspector.ConsoleView.prototype._enterKeyPressed):
        * inspector/front-end/ScriptMapping.js:
        (WebInspector.MainScriptMapping):
        * inspector/front-end/SnippetsModel.js:
        * inspector/front-end/externs.js:
        (WebInspector.evaluateInConsole):
        * inspector/front-end/inspector.js:
        (WebInspector.evaluateInConsole):

2012-03-19  Tommy Widenflycht  <tommyw@google.com>

        MediaStream API (JSEP): Introducing PeerConnection00Handler
        https://bugs.webkit.org/show_bug.cgi?id=81333

        Reviewed by Adam Barth.

        In preparation of the last WebCore patch that will introduce PeerConnection00 here's its platform representation.

        Not possible to test until the entire JSEP feature is commited.

        * GNUmakefile.list.am:
        * WebCore.gypi:
        * platform/mediastream/PeerConnection00Handler.cpp: Added.
        (WebCore):
        (WebCore::PeerConnection00Handler::create):
        (WebCore::PeerConnection00Handler::PeerConnection00Handler):
        (WebCore::PeerConnection00Handler::~PeerConnection00Handler):
        (WebCore::PeerConnection00Handler::createOffer):
        (WebCore::PeerConnection00Handler::createAnswer):
        (WebCore::PeerConnection00Handler::setLocalDescription):
        (WebCore::PeerConnection00Handler::setRemoteDescription):
        (WebCore::PeerConnection00Handler::localDescription):
        (WebCore::PeerConnection00Handler::remoteDescription):
        (WebCore::PeerConnection00Handler::startIce):
        (WebCore::PeerConnection00Handler::processIceMessage):
        (WebCore::PeerConnection00Handler::addStream):
        (WebCore::PeerConnection00Handler::removeStream):
        (WebCore::PeerConnection00Handler::stop):
        * platform/mediastream/PeerConnection00Handler.h: Added.
        (WebCore):
        (PeerConnection00Handler):
        * platform/mediastream/PeerConnection00HandlerClient.h: Added.
        (WebCore):
        (PeerConnection00HandlerClient):
        (WebCore::PeerConnection00HandlerClient::~PeerConnection00HandlerClient):

2012-03-19  David Reveman  <reveman@chromium.org>

        [Chromium] GL_EXT_occlusion_query_boolean and GL_CHROMIUM_command_buffer_query support.
        https://bugs.webkit.org/show_bug.cgi?id=80988

        Reviewed by Adrienne Walker.

        Expose EXT_occlusion_query API to WebKit compositor. Add
        GL_EXT_occlusion_query_boolean and GL_CHROMIUM_command_buffer_query
        enums.

        * platform/graphics/chromium/Extensions3DChromium.h:
        (Extensions3DChromium):

2012-03-19  Mike Lawther  <mikelawther@chromium.org>

        CSS3 calc: make mask images work with mixed percent/absolute
        https://bugs.webkit.org/show_bug.cgi?id=81477

        Reviewed by Ojan Vafai.

        Test: css3/calc/simple-composited-mask-expected.html

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

2012-03-19  Mark Pilgrim  <pilgrim@chromium.org>

        Style cleanup in Modules/filesystem/
        https://bugs.webkit.org/show_bug.cgi?id=81520

        Reviewed by Adam Barth.

        No new tests, all existing tests pass.

        * Modules/filesystem/AsyncFileWriter.h:
        (WebCore::AsyncFileWriter::~AsyncFileWriter):
        * Modules/filesystem/AsyncFileWriterClient.h:
        (WebCore::AsyncFileWriterClient::~AsyncFileWriterClient):
        * Modules/filesystem/DOMFilePath.cpp:
        (WebCore::DOMFilePath::getDirectory):
        * Modules/filesystem/DOMFilePath.h:
        (DOMFilePath):
        * Modules/filesystem/DOMFileSystemBase.h:
        (DOMFileSystemBase):
        * Modules/filesystem/DirectoryEntry.h:
        * Modules/filesystem/DirectoryEntrySync.h:
        * Modules/filesystem/EntryArray.h:
        (EntryArray):
        * Modules/filesystem/FileEntry.h:
        (FileEntry):
        * Modules/filesystem/FileSystemCallbacks.h:
        (FileSystemCallbacksBase):
        * Modules/filesystem/FileWriter.cpp:
        (WebCore::FileWriter::abort):

2012-03-19  Mike Lawther  <mikelawther@chromium.org>

        CSS3 calc: background positioning works with mixed percent/absolute expressions
        https://bugs.webkit.org/show_bug.cgi?id=81478

        Reviewed by Ojan Vafai.

        Test: css3/calc/background-position-parsing-expected.html

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

2012-03-19  Alexander Færøy  <alexander.faeroy@nokia.com>

        Add NodeRenderStyle.h to TouchAdjustment.cpp

        Unreviewed build fix after r111185.

        * page/TouchAdjustment.cpp:

2012-03-19  Leo Yang  <leo.yang@torchmobile.com.cn>

        [BlackBerry] Add PlatformMediaEngineClassName for blackberry in platform/graphics/MediaPlayer.cpp
        https://bugs.webkit.org/show_bug.cgi?id=81489

        Reviewed by Rob Buis.

        * platform/graphics/MediaPlayer.cpp:

2012-03-19  Leo Yang  <leo.yang@torchmobile.com.cn>

        [BlackBerry] Upstream the BlackBerry change to platform/PlatformKeyboardEvent.h
        https://bugs.webkit.org/show_bug.cgi?id=81312

        Reviewed by Rob Buis.

        * platform/PlatformKeyboardEvent.h:
        (Platform):
        (WebCore::PlatformKeyboardEvent::PlatformKeyboardEvent):
        (PlatformKeyboardEvent):
        (WebCore::PlatformKeyboardEvent::unmodifiedCharacter):
        Add BlackBerry specific constructor and member fields.
        * platform/blackberry/PlatformKeyboardEventBlackBerry.cpp:
        (WebCore::PlatformKeyboardEvent::PlatformKeyboardEvent):
        Change the parameter type to const reference type to adapt to the declaration.

2012-03-19  Allan Sandfeld Jensen  <allan.jensen@nokia.com>

        Select best target for tap gesture.
        https://bugs.webkit.org/show_bug.cgi?id=78801

        Reviewed by Kenneth Rohde Christiansen.
        IntRect changes reviewed by Dave Hyatt.

        The new API is available through EventHandler::bestClickableNodeForTouchPoint, but
        implementation details have been placed in page/TouchAdjustment.

        The default hit detection is performed by measuring the distance to the center
        lines of the absolute rects of the hit nodes. Absolute rects are used instead
        of bounding rects to make hit-detecting against links over line breaks. Distance
        to center line is used to make it easier to hit small links next to large links.
        For line-rects the distance to the center-line is a better expression of the distance
        to a rectangles center than the distance to the center-point.

        Tests: touchadjustment/event-triggered-widgets.html
               touchadjustment/html-label.html
               touchadjustment/nested-touch.html
               touchadjustment/touch-inlines.html

        * Target.pri:
        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleGestureTap):
        (WebCore::EventHandler::bestClickableNodeForTouchPoint):
        * page/EventHandler.h:
        * page/TouchAdjustment.cpp: Added.
        (WebCore::TouchAdjustment::QuadForHitTest::QuadForHitTest):
        (WebCore::TouchAdjustment::QuadForHitTest::node):
        (WebCore::TouchAdjustment::QuadForHitTest::quad):
        (WebCore::TouchAdjustment::QuadForHitTest::boundingBox):
        (WebCore::TouchAdjustment::nodeRespondsToTapGesture):
        (WebCore::TouchAdjustment::appendAbsoluteQuadsForNodeToHitTestList):
        (WebCore::TouchAdjustment::compileQuadsForHitTesting):
        (WebCore::TouchAdjustment::distanceSquaredToQuadCenterLine):
        (WebCore::TouchAdjustment::findNodeWithLowestMetric):
        (WebCore::findBestClickableCandidate):
        * page/TouchAdjustment.h: Added.
        * platform/graphics/FloatQuad.h:
        (WebCore::FloatQuad::center):
        * platform/graphics/IntPoint.h:
        (WebCore::IntPoint::distanceSquaredToPoint):
        * platform/graphics/IntRect.cpp:
        (WebCore::distanceToInterval):
        (WebCore::IntRect::differenceToPoint):
        (WebCore::IntRect::differenceFromCenterLineToPoint):
        * platform/graphics/IntRect.h:
        (WebCore::IntRect::distanceSquaredToPoint):
        (WebCore::IntRect::distanceSquaredFromCenterLineToPoint):
        * platform/graphics/IntSize.h:
        (WebCore::IntSize::diagonalLengthSquared):
        * testing/Internals.cpp:
        (WebCore::Internals::touchPositionAdjustedToBestClickableNode):
        (WebCore::Internals::touchNodeAdjustedToBestClickableNode):
        * testing/Internals.h:
        * testing/Internals.idl:

2012-03-19  Mark Pilgrim  <pilgrim@chromium.org>

        Add ENABLED(FILE_SYSTEM) to DOMFilePath.h
        https://bugs.webkit.org/show_bug.cgi?id=81393

        Reviewed by Kentaro Hara.

        No new tests, all existing tests pass.

        * Modules/filesystem/DOMFilePath.h:

2012-03-19  Max Vujovic  <mvujovic@adobe.com>

        inspector highlight of SVG root element with viewbox does not match dimensions of element
        https://bugs.webkit.org/show_bug.cgi?id=78037

        Reviewed by Nikolas Zimmermann.

        Functions such as RenderBox::absoluteQuads and DOMNodeHighlighter::getOrDrawNodeHighlight
        eventually call RenderSVGRoot::mapLocalToContainer, passing along local CSS box coordinates.

        However, before this patch, RenderSVGRoot::mapLocalToContainer expected local SVG viewport
        coordinates. This caused the inspector highlight to be incorrectly sized and positioned.

        Now, RenderSVGRoot::mapLocalToContainer expects local CSS box coordinates, like other HTML
        renderers.

        Test: inspector/elements/highlight-svg-root.html

        * dom/Element.cpp:
        (WebCore::Element::getBoundingClientRect):
            Now, the SVG root element can use the code path for elements with CSS boxes to calculate
            its bounding client rect.

        * rendering/svg/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::mapLocalToContainer):
            RenderSVGRoot::mapLocalToContainer no longer needs to apply the
            localToBorderBoxTransform to convert from local SVG viewport coordinates to local CSS
            box coordinates. Now, it receives local CSS box coordinates.

        * rendering/svg/RenderSVGRoot.h:
        (WebCore::RenderSVGRoot::localToBorderBoxTransform):
            RenderSVGRoot::localToBorderBoxTransform has been exposed for child elements in the SVG
            namespace to use when mapping from local SVG viewport coordinates to local CSS box
            coordinates.

        (RenderSVGRoot):
        * rendering/svg/SVGRenderSupport.cpp:
        (WebCore::SVGRenderSupport::mapLocalToContainer):
            Elements in the SVG namespace should now apply the localToBorderBoxTransform at the
            SVG/HTML boundary (aka RenderSVGRoot) when mapping their coordinates up the render tree.

        * svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::localCoordinateSpaceTransform):
            Same as above. This method is eventually used in the SVGLocatable::getScreenCTM
            calculation.

2012-03-19  Hironori Bono  <hbono@chromium.org>

        Add a copy constructor to CollapsedBorderValue
        https://bugs.webkit.org/show_bug.cgi?id=81502

        Reviewed by Hajime Morita.

        Due to the lack of this copy constructor, GCC (x86) creates a broken copy
        constructor and it causes a build break on Google Chrome.

        * rendering/style/CollapsedBorderValue.h:
        (WebCore::CollapsedBorderValue::CollapsedBorderValue):
        (CollapsedBorderValue):

2012-03-18  Matt Falkenhagen  <falken@chromium.org>

        Fallback to common script when per-script font setting is the empty string
        https://bugs.webkit.org/show_bug.cgi?id=81329

        Reviewed by Kent Tamura.

        Tests: fast/text/international/font-fallback-to-common-script.html

        * page/Settings.cpp:
        (WebCore::setGenericFontFamilyForScript): Remove the setting when the per-script font family is the empty string.

2012-03-18  Luke Macpherson   <macpherson@chromium.org>

        Remove remnants of code that assume Lengths are 28 bit integers.
        https://bugs.webkit.org/show_bug.cgi?id=67976

        Reviewed by Eric Seidel.

        Test: LayoutTests/fast/table/max-width-integer-overflow-expected.html

        * css/CSSPrimitiveValue.cpp:
        (WebCore::CSSPrimitiveValue::computeLength):
        Bound by INT_MAX and INT_MIN instead of 28 bit bounds.
        * css/CSSStyleApplyProperty.cpp:
        (WebCore::ApplyPropertyBorderRadius::applyValue):
        Use PrimitiveValue::computeLength function directly.
        * platform/Length.h:
        Remove 28 bit integer limit constants.
        * rendering/AutoTableLayout.cpp:
        (WebCore::AutoTableLayout::computePreferredLogicalWidths):
        Use std::numeric_limits.

2012-03-16  Shinya Kawanaka  <shinyak@chromium.org>

        Should remove RuntimeEnabledFeatures::multipleShadowSubtreesEnabled
        https://bugs.webkit.org/show_bug.cgi?id=79307

        Reviewed by Dimitri Glazkov.

        Since RuntimeEnabledFeatures::multipleShadowSubtreesEnabled was introduced for
        temporal unstability of multiple shadow roots. We should remove it now, and
        enable it by default.

        Test: fast/dom/shadow/shadow-root-js-api.html should cover this change.
        The other shadow related tests should also covers this change.

        * WebCore.exp.in:
        * bindings/generic/RuntimeEnabledFeatures.cpp:
        (WebCore):
        * bindings/generic/RuntimeEnabledFeatures.h:
        (RuntimeEnabledFeatures):
        * dom/ShadowRoot.cpp:
        (WebCore::ShadowRoot::create):
        * dom/ShadowTree.cpp:
        (WebCore::ShadowTree::addShadowRoot):
        * testing/Internals.cpp:
        * testing/Internals.h:
        (Internals):
        * testing/Internals.idl:

2012-03-18  Dana Jansens  <danakj@chromium.org>

        [chromium] Don't occlude on main-thread behind layers/surfaces with impl-thread animations
        https://bugs.webkit.org/show_bug.cgi?id=81354

        Reviewed by Adrienne Walker.

        Layers and surfaces can have an animating opacity or translation on the
        impl thread. In this case, the main thread does not know their actual
        values, and treats these values as "unknowns". This means we can't use
        them for marking areas of the screen as occluded, and we can't consider
        a part of a layer occluded in a space that we can not reliably transform
        to.

        Unit test: CCOcclusionTrackerTestAnimationOpacity0OnMainThread
                   CCOcclusionTrackerTestAnimationOpacity1OnMainThread
                   CCOcclusionTrackerTestAnimationTranslateOnMainThread

        * platform/graphics/chromium/cc/CCOcclusionTracker.cpp:
        (WebCore::layerOpacityKnown):
        (WebCore::layerTransformsToTargetKnown):
        (WebCore::layerTransformsToScreenKnown):
        (WebCore):
        (WebCore::surfaceOpacityUnknown):
        (WebCore::surfaceTransformsToTargetUnknown):
        (WebCore::surfaceTransformsToScreenUnknown):
        (WebCore::::finishedTargetRenderSurface):
        (WebCore::contentToScreenSpaceTransform):
        (WebCore::contentToTargetSurfaceTransform):
        (WebCore::::markOccludedBehindLayer):
        (WebCore::::occluded):
        (WebCore::::unoccludedContentRect):

2012-03-18  Dana Jansens  <danakj@chromium.org>

        [chromium] Animating opacity is not opaque and should create a render surface on main thread
        https://bugs.webkit.org/show_bug.cgi?id=81401

        Reviewed by James Robinson.

        Unit test: CCLayerTreeHostCommonTest.verifyAnimationsForRenderSurfaceHierarchy

        * platform/graphics/chromium/cc/CCLayerTreeHostCommon.cpp:
        (WebCore::layerOpacityIsOpaque):
        (WebCore):
        (WebCore::subtreeShouldRenderToSeparateSurface):

2012-03-18  Sam Weinig  <sam@webkit.org>

        WebCore::BitmapImage::getCGImageRef should not be used off the main thread.
        https://bugs.webkit.org/show_bug.cgi?id=81441

        Reviewed by Anders Carlsson.

        Covered by existing tests.

        * loader/cache/MemoryCache.cpp:
        (WebCore::memoryCache):
        (WebCore::MemoryCache::add):
        (WebCore::MemoryCache::revalidationFailed):
        (WebCore::MemoryCache::resourceForURL):
        (WebCore::MemoryCache::evict):
        Add back main thread assertions.

        * platform/graphics/cg/PatternCG.cpp:
        (PatternCallbackData):
        (WebCore::patternCallback):
        (WebCore::patternReleaseOnMainThreadCallback):
        (WebCore::Pattern::createPlatformPattern):
        Instead of pulling out the CGImageRef in the pattern callback, do it upfront.

2012-03-18  Alexander Færøy  <alexander.faeroy@nokia.com>

        [Qt] Don't prepare SQL statements when the database is not open
        https://bugs.webkit.org/show_bug.cgi?id=81470

        Reviewed by Kenneth Rohde Christiansen.

        Already covered by existing tests.

        * platform/qt/CookieJarQt.cpp:
        (WebCore::SharedCookieJarQt::deleteCookiesForHostname):
        (WebCore::SharedCookieJarQt::deleteAllCookies):
        (WebCore::SharedCookieJarQt::setCookiesFromUrl):
        (WebCore::SharedCookieJarQt::loadCookies):

2012-03-18  Kentaro Hara  <haraken@chromium.org>

        Unreviewed, rolling out r110994 due to Chromium crash

        * CMakeLists.txt:
        * DerivedSources.make:
        * DerivedSources.pri:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * notifications/DOMWindowNotifications.cpp: Removed.
        * notifications/DOMWindowNotifications.h: Removed.
        * notifications/DOMWindowNotifications.idl: Removed.
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::~DOMWindow):
        (WebCore::DOMWindow::willDetachPage):
        (WebCore::DOMWindow::disconnectDOMWindowProperties):
        (WebCore::DOMWindow::clearDOMWindowProperties):
        (WebCore):
        (WebCore::DOMWindow::webkitNotifications):
        (WebCore::DOMWindow::resetNotifications):
        * page/DOMWindow.h:
        (WebCore):
        (DOMWindow):
        * page/DOMWindow.idl:
        * page/Frame.cpp:
        (WebCore::Frame::willDetachPage):
        (WebCore::Frame::transferChildFrameToNewDocument):

2012-03-18  Kentaro Hara  <haraken@chromium.org>

        Unreviewed, rolling out r111086.
        http://trac.webkit.org/changeset/111086
        https://bugs.webkit.org/show_bug.cgi?id=81374

        Chromium crash

        * notifications/DOMWindowNotifications.cpp:
        (WebCore::DOMWindowNotifications::disconnectFrame):

2012-03-18  David Reveman  <reveman@chromium.org>

        Invalidation issue when creating backing layer for fixed positioned element.
        https://bugs.webkit.org/show_bug.cgi?id=80647

        Reviewed by James Robinson.

        Ensure that root layer is correctly invalidated by handling scroll and
        invalidation from movement of fixed position elements prior to creating
        any backing layers.

        Test: compositing/layer-creation/fixed-position-scroll.html

        * page/FrameView.cpp:
        (WebCore::FrameView::repaintFixedElementsAfterScrolling):
        (WebCore):
        (WebCore::FrameView::updateFixedElementsAfterScrolling):
        * page/FrameView.h:
        (FrameView):
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::scrollTo):
        * platform/ScrollView.h:
        (WebCore::ScrollView::repaintFixedElementsAfterScrolling):
        (WebCore::ScrollView::updateFixedElementsAfterScrolling):

2012-03-18  Dana Jansens  <danakj@chromium.org>

        [chromium] Transform animation state should be inherited from parents
        https://bugs.webkit.org/show_bug.cgi?id=81363

        Reviewed by Adrienne Walker.

        Adds a drawTransformIsAnimating() and screenSpaceTransformIsAnimating()
        to the layer classes, and similar to the surface classes. These inherit
        the values from their parents in the same way that the transforms
        themselves do, and reflect if the layer's transform is being affected
        by some active animation.

        These can be used in main-thread culling when determining if the layer's
        position is static in the given coordinate space or being animated.

        Unit test: CCLayerTreeHostCommonTest.verifyAnimationsForRenderSurfaceHierarchy

        * platform/graphics/chromium/LayerChromium.cpp:
        (WebCore::LayerChromium::LayerChromium):
        * platform/graphics/chromium/LayerChromium.h:
        (LayerChromium):
        (WebCore::LayerChromium::drawTransformIsAnimating):
        (WebCore::LayerChromium::setDrawTransformIsAnimating):
        (WebCore::LayerChromium::screenSpaceTransformIsAnimating):
        (WebCore::LayerChromium::setScreenSpaceTransformIsAnimating):
        * platform/graphics/chromium/RenderSurfaceChromium.cpp:
        (WebCore::RenderSurfaceChromium::RenderSurfaceChromium):
        * platform/graphics/chromium/RenderSurfaceChromium.h:
        (WebCore::RenderSurfaceChromium::targetSurfaceTransformsAreAnimating):
        (WebCore::RenderSurfaceChromium::setTargetSurfaceTransformsAreAnimating):
        (WebCore::RenderSurfaceChromium::screenSpaceTransformsAreAnimating):
        (WebCore::RenderSurfaceChromium::setScreenSpaceTransformsAreAnimating):
        (RenderSurfaceChromium):
        * platform/graphics/chromium/cc/CCLayerImpl.cpp:
        (WebCore::CCLayerImpl::CCLayerImpl):
        * platform/graphics/chromium/cc/CCLayerImpl.h:
        (CCLayerImpl):
        (WebCore::CCLayerImpl::drawTransformIsAnimating):
        (WebCore::CCLayerImpl::setDrawTransformIsAnimating):
        (WebCore::CCLayerImpl::screenSpaceTransformIsAnimating):
        (WebCore::CCLayerImpl::setScreenSpaceTransformIsAnimating):
        * platform/graphics/chromium/cc/CCLayerTreeHostCommon.cpp:
        (WebCore::subtreeShouldBeSkipped):
        (WebCore::calculateDrawTransformsAndVisibilityInternal):
        * platform/graphics/chromium/cc/CCRenderSurface.cpp:
        (WebCore::CCRenderSurface::CCRenderSurface):
        * platform/graphics/chromium/cc/CCRenderSurface.h:
        (WebCore::CCRenderSurface::targetSurfaceTransformsAreAnimating):
        (WebCore::CCRenderSurface::setTargetSurfaceTransformsAreAnimating):
        (WebCore::CCRenderSurface::screenSpaceTransformsAreAnimating):
        (WebCore::CCRenderSurface::setScreenSpaceTransformsAreAnimating):
        (CCRenderSurface):

2012-03-18  Pratik Solanki  <psolanki@apple.com>

        Fix compile when FULLSCREEN_API is not enabled on Mac
        https://bugs.webkit.org/show_bug.cgi?id=81474

        Reviewed by Ada Chan.

        Guard the full screen api code inside ENABLE(FULLSCREEN_API).

        No new tests because no functional changes.

        * platform/mac/WebCoreFullScreenWindow.h:
        * platform/mac/WebCoreFullScreenWindow.mm:

2012-03-18  Kentaro Hara  <haraken@chromium.org>

        Change the initial buffer size of a plain text
        https://bugs.webkit.org/show_bug.cgi?id=81192

        Reviewed by Dimitri Glazkov.

        r111109 changed the initial buffer size of a plain text
        from 1<<16 to 1<<15 in Chromium/Mac only, for the following reasons:

        - As far as I experimented locally, while 1<<15 is better than 1<<16 in Chromium/Mac,
        1<<15 and 1<<16 are the same in AppleWebKit/Mac and Chromium/Linux (their performance
        "gap" exists at between 1<<17 and 1<<18).
        - The reason why I changed 1<<16 to 1<<15 in Chromium/Mac only is that
        the value highly depends on the underlying malloc system and I was a bit afraid
        that changing to 1<<15 _might_ cause unintentional performance regression in some
        platform.

        That being said, it seems that 1<<15 would not be worse than 1<<16 in all platforms,
        and we should just keep the value consistent. In the first place, according to anttik
        (who wrote 1<<16 a long time ago), there was no strong reason for 1<<16.

        Based on these observations (See https://bugs.webkit.org/show_bug.cgi?id=81192
        for more details), this patch unifies the value to 1<<15 in all platforms.

        No tests. No change in behavior.

        * editing/TextIterator.cpp:
        (WebCore::plainTextToMallocAllocatedBuffer):

2012-02-13  Robert Hogan  <robert@webkit.org>

        CSS 2.1 failure: eof-003.htm fails
        https://bugs.webkit.org/show_bug.cgi?id=78538

        Reviewed by Antti Koivisto.

        Tests: css2.1/20110323/eof-001.htm
               css2.1/20110323/eof-003.htm
               css2.1/20110323/eof-004.htm
               css2.1/20110323/eof-005.htm
               css2.1/20110323/eof-006.htm
               css2.1/20110323/eof-007.htm

        This patch fixes eof-003.htm, eof-005.htm and eof-006.htm. The other eof-* tests already pass.

        * css/CSSGrammar.y: Allow EOF as well as ';' to terminate import rules.
                            This should probably be done for other rules in a separate patch.
        * css/CSSParser.cpp:
        (WebCore::CSSParser::checkAndSkipString): Allow strings to end with EOF.
        (WebCore::CSSParser::parseString): ditto

2012-03-17  David Reveman  <reveman@chromium.org>

        [Chromium] PlatformContextSkia::m_drawingToImageBuffer is not correctly set when using per-tile painting.
        https://bugs.webkit.org/show_bug.cgi?id=81463

        Reviewed by James Robinson.

        Call PlatformContextSkia::setDrawingToImageBuffer() from
        SkPictureCanvasLayerTextureUpdater::prepareToUpdate so that sub-pixel
        text rendering is not used incorrectly with per-tile painting.

        No new tests.

        * platform/graphics/chromium/SkPictureCanvasLayerTextureUpdater.cpp:
        (WebCore::SkPictureCanvasLayerTextureUpdater::prepareToUpdate):

2012-03-17  Robert Kroeger  <rjkroege@chromium.org>

        [chromium] Make pixel-accurate wheel scrolling be unanimated
        https://bugs.webkit.org/show_bug.cgi?id=81457

        Reviewed by James Robinson.

        * platform/ScrollAnimatorNone.cpp:
        (WebCore::ScrollAnimatorNone::scroll):

2012-03-17  Rob Buis  <rbuis@rim.com>

        [BlackBerry] Implement openTemporaryFile in FileSystem
        https://bugs.webkit.org/show_bug.cgi?id=81373

        Reviewed by George Staikos.

        Move the Efl implementation to Posix, this way BlackBerry port can reuse it.

        * platform/blackberry/FileSystemBlackBerry.cpp:
        * platform/efl/FileSystemEfl.cpp:
        * platform/posix/FileSystemPOSIX.cpp:
        (WebCore::openTemporaryFile):
        (WebCore):

2012-03-17  Joe Thomas  <joethomas@motorola.com>

        move calc*Value functions out from Length (and platform)
        https://bugs.webkit.org/show_bug.cgi?id=80897

        Moving the Length calc*Value functions out from Length structure and also from /WebCore/platform/ folder.
        This helps to avoid the layering violation while length calculation. Otherwise layer violation can be avoided only by adding a virtual interface(bug 27160).

        Reviewed by Antti Koivisto.

        * GNUmakefile.list.am: Build system changes for adding new files.
        * Target.pri: Ditto.
        * WebCore.gypi: Ditto.
        * WebCore.vcproj/WebCore.vcproj: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Ditto.
        * accessibility/gtk/WebKitAccessibleInterfaceText.cpp:
        (getAttributeSetForAccessibilityObject):
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        * css/LengthFunctions.h: Added. Moved calc*Value functions of Length.
        (WebCore):
        (WebCore::calculateMinimumValue):
        (WebCore::calculateValue):
        (WebCore::calculateFloatValue):
        * dom/Document.cpp:
        (WebCore::Document::pageSizeAndMarginsInPixels):
        * html/HTMLAreaElement.cpp:
        (WebCore::HTMLAreaElement::getRegion):
        * platform/CalculationValue.h:
        (WebCore::CalcExpressionLength::evaluate):
        * platform/Length.h: Removed the calc*Value functions from Length structure.
        (Length):
        (WebCore::Length::getFloatValue):
        (WebCore::Length::getIntValue):
        * platform/graphics/ca/mac/PlatformCAAnimationMac.mm:
        * platform/graphics/ca/mac/PlatformCALayerMac.mm:
        (PlatformCALayer::setFilters):
        * platform/graphics/chromium/cc/CCRenderSurfaceFilters.cpp:
        (WebCore::CCRenderSurfaceFilters::apply):
        * platform/graphics/filters/FilterOperations.cpp:
        (WebCore::FilterOperations::getOutsets):
        * platform/graphics/transforms/PerspectiveTransformOperation.cpp:
        (WebCore::PerspectiveTransformOperation::blend):
        * platform/graphics/transforms/PerspectiveTransformOperation.h:
        (WebCore::PerspectiveTransformOperation::isIdentity):
        (WebCore::PerspectiveTransformOperation::apply):
        * platform/graphics/transforms/TranslateTransformOperation.h:
        (WebCore::TranslateTransformOperation::x):
        (WebCore::TranslateTransformOperation::y):
        (WebCore::TranslateTransformOperation::z):
        (WebCore::TranslateTransformOperation::isIdentity):
        * platform/win/PopupMenuWin.cpp:
        (WebCore::PopupMenuWin::paint):
        * rendering/AutoTableLayout.cpp:
        (WebCore::AutoTableLayout::layout):
        * rendering/FilterEffectRenderer.cpp:
        (WebCore::FilterEffectRenderer::build):
        * rendering/FixedTableLayout.cpp:
        (WebCore::FixedTableLayout::layout):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::textIndentOffset):
        (WebCore::RenderBlock::computeInlinePreferredLogicalWidths):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::reflectionOffset):
        (WebCore::RenderBox::clipRect):
        (WebCore::RenderBox::computeLogicalWidthInRegion):
        (WebCore::RenderBox::computeLogicalWidthInRegionUsing):
        (WebCore::RenderBox::computeInlineDirectionMargins):
        (WebCore::RenderBox::computePercentageLogicalHeight):
        (WebCore::RenderBox::computeReplacedLogicalWidthUsing):
        (WebCore::RenderBox::computeReplacedLogicalHeightUsing):
        (WebCore::RenderBox::availableLogicalHeightUsing):
        (WebCore::RenderBox::computeBlockDirectionMargins):
        (WebCore::RenderBox::computePositionedLogicalWidthUsing):
        (WebCore::RenderBox::computePositionedLogicalHeightUsing):
        (WebCore::RenderBox::computePositionedLogicalWidthReplaced):
        (WebCore::RenderBox::computePositionedLogicalHeightReplaced):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::relativePositionOffsetX):
        (WebCore::RenderBoxModelObject::relativePositionOffsetY):
        (WebCore::RenderBoxModelObject::paddingTop):
        (WebCore::RenderBoxModelObject::paddingBottom):
        (WebCore::RenderBoxModelObject::paddingLeft):
        (WebCore::RenderBoxModelObject::paddingRight):
        (WebCore::RenderBoxModelObject::paddingBefore):
        (WebCore::RenderBoxModelObject::paddingAfter):
        (WebCore::RenderBoxModelObject::paddingStart):
        (WebCore::RenderBoxModelObject::paddingEnd):
        (WebCore::RenderBoxModelObject::calculateFillTileSize):
        (WebCore::RenderBoxModelObject::calculateBackgroundImageGeometry):
        (WebCore::computeBorderImageSide):
        (WebCore::RenderBoxModelObject::paintNinePieceImage):
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::preferredMainAxisContentExtentForChild):
        (WebCore::RenderFlexibleBox::computeMainAxisPreferredSizes):
        (WebCore::RenderFlexibleBox::runFreeSpaceAllocationAlgorithm):
        * rendering/RenderFrameSet.cpp:
        (WebCore::RenderFrameSet::layOutAxis):
        * rendering/RenderInline.cpp:
        (WebCore::computeMargin):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::perspectiveTransform):
        (WebCore::RenderLayer::perspectiveOrigin):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::computeTransformOrigin):
        (WebCore::RenderLayerBacking::computePerspectiveOrigin):
        * rendering/RenderMarquee.cpp:
        (WebCore::RenderMarquee::timerFired):
        * rendering/RenderMenuList.cpp:
        (WebCore::RenderMenuList::updateOptionsWidth):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::repaintAfterLayoutIfNeeded):
        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::computeReplacedLogicalWidth):
        * rendering/RenderScrollbarPart.cpp:
        (WebCore::calcScrollbarThicknessUsing):
        (WebCore::RenderScrollbarPart::computeScrollbarWidth):
        (WebCore::RenderScrollbarPart::computeScrollbarHeight):
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::computeLogicalWidth):
        (WebCore::RenderTable::convertStyleLogicalWidthToComputedWidth):
        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::logicalHeightForRowSizing):
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::calcRowLogicalHeight):
        * rendering/RenderText.h:
        (WebCore::RenderText::marginLeft):
        (WebCore::RenderText::marginRight):
        * rendering/RootInlineBox.cpp:
        (WebCore::RootInlineBox::verticalPositionForBox):
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::applyTransform):
        (WebCore::calcRadiiFor):
        * rendering/style/RenderStyle.h:
        * rendering/svg/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::computeIntrinsicRatioInformation):
        (WebCore::resolveLengthAttributeForSVG):
        * svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::currentViewBoxRect):
        (WebCore::SVGSVGElement::currentViewportSize):
        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::computeIntrinsicDimensions):

2012-03-17  Nikolas Zimmermann  <nzimmermann@rim.com>

        Enable animVal support for SVGNumberOptionalNumber
        https://bugs.webkit.org/show_bug.cgi?id=81448

        Reviewed by Antti Koivisto.

        Enable animVal support for SVGNumberOptionalNumber. Its a special case as two SVG DOM properties
        eg. stdDeviationX/stdDeviationY are mapped to a single XML attribute: SVGNames::stdDeviationAttr.

        When animating properties like this, both animVal wrappers need to reflect changes.
        Generalize the current animVal code to support more than one SVGAnimatedProperty that gets
        animated for a single attributeName. This allows us to remove SVGAnimatedType::variantValue/setVariantValue
        which paves the way for removing SVGGenericAnimatedType from even more places.

        Covered by existing tests.

        * svg/SVGAnimateElement.cpp:
        (WebCore::SVGAnimateElement::SVGAnimateElement):
        (WebCore::SVGAnimateElement::calculateAnimatedValue):
        (WebCore::SVGAnimateElement::resetToBaseValue):
        (WebCore::SVGAnimateElement::targetElementWillChange):
        * svg/SVGAnimateElement.h:
        (SVGAnimateElement):
        * svg/SVGAnimatedLength.cpp:
        (WebCore::SVGAnimatedLengthAnimator::constructFromBaseValue):
        (WebCore):
        (WebCore::SVGAnimatedLengthAnimator::resetAnimatedTypeToBaseValue):
        * svg/SVGAnimatedLength.h:
        (SVGAnimatedLengthAnimator):
        * svg/SVGAnimatedLengthList.cpp:
        (WebCore::SVGAnimatedLengthListAnimator::constructFromBaseValue):
        (WebCore):
        (WebCore::SVGAnimatedLengthListAnimator::resetAnimatedTypeToBaseValue):
        * svg/SVGAnimatedLengthList.h:
        (SVGAnimatedLengthListAnimator):
        * svg/SVGAnimatedNumber.cpp:
        (WebCore::SVGAnimatedNumberAnimator::constructFromBaseValue):
        (WebCore):
        (WebCore::SVGAnimatedNumberAnimator::resetAnimatedTypeToBaseValue):
        * svg/SVGAnimatedNumber.h:
        (SVGAnimatedNumberAnimator):
        * svg/SVGAnimatedNumberList.cpp:
        (WebCore::SVGAnimatedNumberListAnimator::constructFromBaseValue):
        (WebCore):
        (WebCore::SVGAnimatedNumberListAnimator::resetAnimatedTypeToBaseValue):
        * svg/SVGAnimatedNumberList.h:
        (SVGAnimatedNumberListAnimator):
        * svg/SVGAnimatedNumberOptionalNumber.cpp:
        (WebCore::SVGAnimatedNumberOptionalNumberAnimator::constructFromBaseValue):
        (WebCore):
        (WebCore::SVGAnimatedNumberOptionalNumberAnimator::resetAnimatedTypeToBaseValue):
        * svg/SVGAnimatedNumberOptionalNumber.h:
        (WebCore):
        (SVGAnimatedNumberOptionalNumberAnimator):
        * svg/SVGAnimatedTransformList.cpp:
        (WebCore::SVGAnimatedTransformListAnimator::constructFromBaseValue):
        (WebCore::SVGAnimatedTransformListAnimator::resetAnimatedTypeToBaseValue):
        (WebCore):
        * svg/SVGAnimatedTransformList.h:
        (SVGAnimatedTransformListAnimator):
        * svg/SVGAnimatedType.cpp:
        (WebCore::SVGAnimatedType::supportsAnimVal):
        * svg/SVGAnimatedType.h:
        (SVGAnimatedType):
        * svg/SVGAnimatedTypeAnimator.h:
        (SVGAnimatedTypeAnimator):
        (WebCore::SVGAnimatedTypeAnimator::constructFromBaseValue):
        (WebCore::SVGAnimatedTypeAnimator::resetAnimatedTypeToBaseValue):
        (WebCore::SVGAnimatedTypeAnimator::currentBaseValueVariant):
        (WebCore::SVGAnimatedTypeAnimator::constructFromOneBaseValue):
        (WebCore::SVGAnimatedTypeAnimator::resetAnimatedTypeFromOneBaseValue):
        (WebCore::SVGAnimatedTypeAnimator::constructFromTwoBaseValues):
        (WebCore::SVGAnimatedTypeAnimator::resetAnimatedTypeFromTwoBaseValues):
        * svg/SVGAnimationElement.cpp:
        (WebCore::findMatchingAnimatedProperties):
        (WebCore::SVGAnimationElement::applyAnimatedValue):
        (WebCore::notifyAnimatedPropertyAboutAnimationBeginEnd):
        (WebCore::SVGAnimationElement::animationStarted):
        (WebCore::SVGAnimationElement::animationEnded):
        (WebCore::SVGAnimationElement::animatedPropertiesForType):
        * svg/SVGAnimationElement.h:
        * svg/properties/SVGAnimatedListPropertyTearOff.h:
        (WebCore::SVGAnimatedListPropertyTearOff::currentBaseValueVariant):
        (WebCore::SVGAnimatedListPropertyTearOff::animationStarted):
        * svg/properties/SVGAnimatedProperty.h:
        (SVGAnimatedProperty):
        * svg/properties/SVGAnimatedPropertyTearOff.h:
        (WebCore::SVGAnimatedPropertyTearOff::currentBaseValueVariant):
        (WebCore::SVGAnimatedPropertyTearOff::animationStarted):
        * svg/properties/SVGAnimatedStaticPropertyTearOff.h:
        (WebCore::SVGAnimatedStaticPropertyTearOff::currentBaseValueVariant):
        (WebCore::SVGAnimatedStaticPropertyTearOff::animationStarted):

2012-03-12  Philippe Normand  <pnormand@igalia.com>

        [GStreamer] run AudioFileReader in a nested loop
        https://bugs.webkit.org/show_bug.cgi?id=80823

        Reviewed by Martin Robinson.

        Use a separate main loop for the file reader, this approach is
        much cleaner than polling the default GLib main context.

        * platform/audio/gstreamer/AudioFileReaderGStreamer.cpp:
        (AudioFileReader):
        (WebCore::enteredMainLoopCallback):
        (WebCore):
        (WebCore::AudioFileReader::AudioFileReader):
        (WebCore::AudioFileReader::handleMessage):
        (WebCore::AudioFileReader::start):
        (WebCore::AudioFileReader::createBus):

2012-02-07  Robert Hogan  <robert@webkit.org>

        CSS 2.1 failure: fixed-table-layout-013 and fixed-table-layout-015 fail
        https://bugs.webkit.org/show_bug.cgi?id=78027

        Reviewed by Julien Chaffraix.

        Both of these test the (slightly implicit) rule that width set on column-groups cannot
        affect the width of columns in a fixed layout table: http://www.w3.org/TR/CSS21/tables.html#fixed-table-layout
        FF, Opera and IE all pass these two tests.

        Tests: css2.1/20110323/fixed-table-layout-013.htm
               css2.1/20110323/fixed-table-layout-015.htm
               fast/table/fixed-table-layout-toggle-colwidth.html

        * rendering/FixedTableLayout.cpp:
        (WebCore::nextCol): A helper function for finding the next column along.
        (WebCore::FixedTableLayout::calcWidthArray): Ignore width specified by column groups.
        * rendering/RenderTableCol.h:
        (WebCore::RenderTableCol::isTableColGroup): Convenience function for identifying column groups.

2012-03-16  Leo Yang  <leo.yang@torchmobile.com.cn>

        [BlackBerry] Add BlackBerry to NavigatorBase.cpp
        https://bugs.webkit.org/show_bug.cgi?id=81303

        Reviewed by Rob Buis.

        * page/NavigatorBase.cpp:

2012-03-16  Leo Yang  <leo.yang@torchmobile.com.cn>

        [BlackBerry] Add typedef of DragDataRef for blackberry
        https://bugs.webkit.org/show_bug.cgi?id=81301

        Reviewed by Rob Buis.

        * platform/DragData.h:

2012-03-16  James Robinson  <jamesr@chromium.org>

        [chromium] Unify the drawing logic for different layer types that output textures to the compositor
        https://bugs.webkit.org/show_bug.cgi?id=81286

        Reviewed by Adrienne Walker.

        Currently canvas 2d, webgl, and plugin layers all export a texture to the compositor that then needs to be
        drawn.  There are a small set of operations that can be applied to the texture at draw time - do a Y flip,
        stretch a subrect to the layer bounds, set the blend mode etc but they are fundamentally the same thing. This
        collapses the nearly-redundant code into a single impl-side layer type for a texture-backed layer that can
        handle the union of the bits needed for each layer type.

        Canvas 2d, WebGL and plugin composited rendering are all covered by layout tests.

        * WebCore.gypi:
        * platform/graphics/chromium/Canvas2DLayerChromium.cpp:
        (WebCore::Canvas2DLayerChromium::pushPropertiesTo):
        * platform/graphics/chromium/CanvasLayerChromium.cpp:
        (WebCore::CanvasLayerChromium::createCCLayerImpl):
        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::drawQuad):
        (WebCore::TexStretchTextureProgramBinding::set):
        (WebCore::TexTransformTextureProgramBinding::set):
        (WebCore::LayerRendererChromium::drawTextureQuad):
        (WebCore::LayerRendererChromium::textureLayerProgramFlip):
        (WebCore::LayerRendererChromium::textureLayerProgramStretch):
        (WebCore::LayerRendererChromium::textureLayerProgramStretchFlip):
        (WebCore::LayerRendererChromium::textureLayerTexRectProgram):
        (WebCore::LayerRendererChromium::textureLayerTexRectProgramFlip):
        (WebCore::LayerRendererChromium::cleanupSharedObjects):
        * platform/graphics/chromium/LayerRendererChromium.h:
        (WebCore):
        (LayerRendererChromium):
        * platform/graphics/chromium/PluginLayerChromium.cpp:
        (WebCore::PluginLayerChromium::PluginLayerChromium):
        (WebCore::PluginLayerChromium::createCCLayerImpl):
        (WebCore::PluginLayerChromium::setIOSurfaceProperties):
        (WebCore::PluginLayerChromium::pushPropertiesTo):
        * platform/graphics/chromium/PluginLayerChromium.h:
        (PluginLayerChromium):
        * platform/graphics/chromium/WebGLLayerChromium.cpp:
        (WebCore::WebGLLayerChromium::pushPropertiesTo):
        * platform/graphics/chromium/cc/CCCanvasDrawQuad.cpp: Removed.
        * platform/graphics/chromium/cc/CCCanvasDrawQuad.h: Removed.
        * platform/graphics/chromium/cc/CCCanvasLayerImpl.cpp: Removed.
        * platform/graphics/chromium/cc/CCCanvasLayerImpl.h: Removed.
        * platform/graphics/chromium/cc/CCDrawQuad.cpp:
        (WebCore::CCDrawQuad::toTextureDrawQuad):
        * platform/graphics/chromium/cc/CCDrawQuad.h:
        (WebCore):
        (CCDrawQuad):
        * platform/graphics/chromium/cc/CCTextureDrawQuad.cpp: Renamed from Source/WebCore/platform/graphics/chromium/cc/CCPluginDrawQuad.cpp.
        (WebCore):
        (WebCore::CCTextureDrawQuad::create):
        (WebCore::CCTextureDrawQuad::CCTextureDrawQuad):
        * platform/graphics/chromium/cc/CCTextureDrawQuad.h: Renamed from Source/WebCore/platform/graphics/chromium/cc/CCPluginDrawQuad.h.
        (WebCore):
        (CCTextureDrawQuad):
        (WebCore::CCTextureDrawQuad::textureId):
        (WebCore::CCTextureDrawQuad::hasAlpha):
        (WebCore::CCTextureDrawQuad::premultipliedAlpha):
        (WebCore::CCTextureDrawQuad::uvRect):
        (WebCore::CCTextureDrawQuad::flipped):
        (WebCore::CCTextureDrawQuad::ioSurfaceSize):
        (WebCore::CCTextureDrawQuad::ioSurfaceTextureId):
        * platform/graphics/chromium/cc/CCTextureLayerImpl.cpp: Renamed from Source/WebCore/platform/graphics/chromium/cc/CCPluginLayerImpl.cpp.
        (WebCore):
        (WebCore::CCTextureLayerImpl::CCTextureLayerImpl):
        (WebCore::CCTextureLayerImpl::~CCTextureLayerImpl):
        (WebCore::CCTextureLayerImpl::willDraw):
        (WebCore::CCTextureLayerImpl::appendQuads):
        (WebCore::CCTextureLayerImpl::dumpLayerProperties):
        (WebCore::CCTextureLayerImpl::didLoseContext):
        (WebCore::CCTextureLayerImpl::setIOSurfaceProperties):
        * platform/graphics/chromium/cc/CCTextureLayerImpl.h: Renamed from Source/WebCore/platform/graphics/chromium/cc/CCPluginLayerImpl.h.
        (WebCore):
        (CCTextureLayerImpl):
        (WebCore::CCTextureLayerImpl::create):
        (WebCore::CCTextureLayerImpl::textureId):
        (WebCore::CCTextureLayerImpl::setTextureId):
        (WebCore::CCTextureLayerImpl::setHasAlpha):
        (WebCore::CCTextureLayerImpl::setPremultipliedAlpha):
        (WebCore::CCTextureLayerImpl::setFlipped):
        (WebCore::CCTextureLayerImpl::setUVRect):
        (WebCore::CCTextureLayerImpl::layerTypeAsString):

2012-03-16  Martin Robinson  <mrobinson@igalia.com>

        [Cairo] Text extent of shadowed text is calculated incorrectly
        https://bugs.webkit.org/show_bug.cgi?id=65035

        Reviewed by Martin Robinson.

        No new tests. This is already covered by fast/canvas/fillText-shadow.html.

        Correct determine the size of rendered text using x and y bearing from the font
        extents.

        * platform/graphics/cairo/FontCairo.cpp:
        (WebCore::drawGlyphsShadow): Use the x and y bearing to calculate text extents.
        This gives a more accurate sizing and avoids clipping the edges of the shadow.

2012-03-16  Kentaro Hara  <haraken@chromium.org>

        [Chromium][Performance] Optimize innerText and outerText in Chromium/Mac
        https://bugs.webkit.org/show_bug.cgi?id=81192

        Reviewed by Dimitri Glazkov.

        This patch makes innerText and outerText 4 times faster on Chromium/Mac.
        A similar performance improvement will be also observed in APIs that are using
        TextIterator::plainText() (e.g. Editting, SpellChecker, Clipboard, Pasteboard etc).

        Performance test: https://bugs.webkit.org/attachment.cgi?id=131989

        - AppleWebKit/JavaScriptCore/Mac:
        div.innerText : 2978.4ms
        div.outerText : 2944.4ms

        - Chromium/V8/Mac without the patch:
        div.innerText : 10050.8ms
        div.outerText : 10072.2ms

        - Chromium/V8/Mac with the patch:
        div.innerText: 2536.4ms
        div.outerText: 2714ms

        This patch just changes the initial buffer size of a plain text buffer on Chromium/Mac.
        As shown below, in my local Chromium/Mac environment the performance changes
        dramatically between 1<<15 and 1<<16, and in my local Chromium/Linux environment
        the performance changes between 1<<17 and 1<<18. I am not yet sure what determines
        these figures, but it seems there exists a performance gap at some point
        depending on a malloc mechanism.

        - div.innerText results on Chromium/V8/Mac:
        WTF_TEXT_ITERATOR_BUFFER_INITIAL_CAPACITY = 1 << 14 ==> 2465.6 ms
        WTF_TEXT_ITERATOR_BUFFER_INITIAL_CAPACITY = 1 << 15 ==> 2447.2 ms   <--- after this patch
        WTF_TEXT_ITERATOR_BUFFER_INITIAL_CAPACITY = 1 << 16 ==> 10250.8 ms  <--- before this patch
        WTF_TEXT_ITERATOR_BUFFER_INITIAL_CAPACITY = 1 << 17 ==> 10278.2 ms

        - div.innerText results on Chromium/V8/Linux:
        WTF_TEXT_ITERATOR_BUFFER_INITIAL_CAPACITY = 1 << 14 ==> 1569.8 ms
        WTF_TEXT_ITERATOR_BUFFER_INITIAL_CAPACITY = 1 << 15 ==> 1531.8 ms
        WTF_TEXT_ITERATOR_BUFFER_INITIAL_CAPACITY = 1 << 16 ==> 1543.2 ms  <--- before/after this patch
        WTF_TEXT_ITERATOR_BUFFER_INITIAL_CAPACITY = 1 << 17 ==> 1541.6 ms
        WTF_TEXT_ITERATOR_BUFFER_INITIAL_CAPACITY = 1 << 18 ==> 12540.8 ms
        WTF_TEXT_ITERATOR_BUFFER_INITIAL_CAPACITY = 1 << 19 ==> 12340.8 ms

        * editing/TextIterator.cpp:
        (WebCore::plainTextToMallocAllocatedBuffer):

2012-03-16  Dmitry Titov  <dimich@chromium.org>

        HTMLFrameElementBase::m_remainsAliveOnRemovalFromTree can be cleared without unloading the frame.
        https://bugs.webkit.org/show_bug.cgi?id=80766

        Reviewed by Adam Barth.

        * html/HTMLFrameElementBase.cpp:
        (WebCore::HTMLFrameElementBase::insertedIntoDocument):
        (WebCore::HTMLFrameElementBase::setRemainsAliveOnRemovalFromTree):
        if adoptNode() is called on a detached iframe or with a detached document,
        unload the iframe to avoid live iframe to hang around w/o being attached to
        a document.

2012-03-16  Joe Thomas  <joethomas@motorola.com>

        Xcode project file is not sorted.
        https://bugs.webkit.org/show_bug.cgi?id=81439

        Sorted the project file entries using sort-Xcode-project-file script.

        Reviewed by Eric Seidel.

        * WebCore.xcodeproj/project.pbxproj:

2012-03-16  Yael Aharon  <yael.aharon@nokia.com>

        Unreviewed build fix after r111075.
        Correct the path of WebKitBlobBuilder.idl.

        * DerivedSources.pri:

2012-03-16  David Levin  <levin@chromium.org>

        Fix for test runs for non-chromium platforms.

        * loader/cache/MemoryCache.cpp:
        (WebCore::memoryCache):
        (WebCore::MemoryCache::add):
        (WebCore::MemoryCache::revalidationFailed):
        (WebCore::MemoryCache::resourceForURL):
        (WebCore::MemoryCache::evict):

2012-03-16  Tony Chang  <tony@chromium.org>

        Unreviewed, rolling out r111094.
        http://trac.webkit.org/changeset/111094
        https://bugs.webkit.org/show_bug.cgi?id=80882

        broke test on chromium-win

        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::alignChildren):
        * rendering/RenderFlexibleBox.h:
        (RenderFlexibleBox):

2012-03-16  Anders Carlsson  <andersca@apple.com>

        REGRESSION (r110737): Height element changes on scrolled page causes failure
        https://bugs.webkit.org/show_bug.cgi?id=81381
        <rdar://problem/11066006>

        Reviewed by Sam Weinig.

        Limit the fix made in r110737 to check if there's a rubber-band gesture in progress and only ignore the range if that is the case.

        * platform/ScrollAnimator.h:
        (WebCore::ScrollAnimator::isRubberBandInProgress):
        (ScrollAnimator):
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::updateScrollbars):
        * platform/mac/ScrollAnimatorMac.h:
        (ScrollAnimatorMac):
        * platform/mac/ScrollAnimatorMac.mm:
        (WebCore::ScrollAnimatorMac::isRubberBandInProgress):
        (WebCore):
        * platform/mac/ScrollElasticityController.h:
        (ScrollElasticityController):
        * platform/mac/ScrollElasticityController.mm:
        (WebCore::ScrollElasticityController::isRubberBandInProgress):
        (WebCore):

2012-03-16  Robert Kroeger  <rjkroege@chromium.org>

        GestureTapDown needs to pin in-progress flings
        https://bugs.webkit.org/show_bug.cgi?id=80875

        Reviewed by Adam Barth.

        * page/EventHandler.cpp:
        (WebCore):
        (WebCore::EventHandler::handleGestureTapDown):
        * page/EventHandler.h:
        (EventHandler):

2012-03-16  Chris Rogers  <crogers@google.com>

        Account for sample-rate in convolution normalization
        https://bugs.webkit.org/show_bug.cgi?id=81432

        Reviewed by James Robinson.

        * platform/audio/Reverb.cpp:
        (WebCore):
        (WebCore::calculateNormalizationScale):
        * webaudio/ConvolverNode.cpp:
        (WebCore::ConvolverNode::setBuffer):

2012-03-16  Tom Sepez  <tsepez@chromium.org>

        Make V8 window.open.call(), window.open.showModalDialog() results more closely match JSC. 
        https://bugs.webkit.org/show_bug.cgi?id=81260
        https://bugs.webkit.org/show_bug.cgi?id=39897

        Reviewed by Adam Barth.

        Tested via http/tests/security/cross-frame-access-call.htm

        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        (WebCore::V8DOMWindow::showModalDialogCallback):
        (WebCore::V8DOMWindow::openCallback):

2012-03-16  Matt Lilek  <mrl@apple.com>

        Use modern NSNumberFormatter API in LocalizedNumberMac.mm
        https://bugs.webkit.org/show_bug.cgi?id=81429

        Reviewed by Dan Bernstein.

        No new tests as no change in behavior.

        * platform/text/mac/LocalizedNumberMac.mm:
        (WebCore::createFormatterForCurrentLocaleForDisplay):

2012-03-16  Tony Chang  <tony@chromium.org>

        flex-item-align: stretch should only grow, never shrink
        https://bugs.webkit.org/show_bug.cgi?id=80882

        Reviewed by Ojan Vafai.

        New test cases in css3/flexbox/flex-align-stretch.html.

        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::alignChildren): Move stretch code into a separate function.
        (WebCore::RenderFlexibleBox::alignChildStretch): Add an early return if our height is shrinking.
        (WebCore):
        * rendering/RenderFlexibleBox.h:
        (RenderFlexibleBox):

2012-03-16  Raphael Kubo da Costa  <kubo@profusion.mobi>

        [EFL] Unreviewed, fix build after r111041.

        * platform/efl/RenderThemeEfl.cpp:
        (WebCore::RenderThemeEfl::emitMediaButtonSignal): Rename
        MediaFullscreenButton to MediaEnterFullscreenButton.
        (WebCore::RenderThemeEfl::paintMediaFullscreenButton): Ditto.

2012-03-16  Dmitry Lomov  <dslomov@google.com>

        REGRESSION: DOMURL::revokeObjectURL accesses memoryCache on worker thread.
        https://bugs.webkit.org/show_bug.cgi?id=80889
        On worker threads, post a task to main thread to evict from cache.
        ASSERT that MemoryCache is only accessed from main thread.

        Reviewed by David Levin.

        * html/DOMURL.cpp:
        (WebCore::DOMURL::revokeObjectURL):
        * loader/cache/MemoryCache.cpp:
        (WebCore::memoryCache):
        (WebCore::MemoryCache::add):
        (WebCore::MemoryCache::revalidationFailed):
        (WebCore::MemoryCache::resourceForURL):
        (WebCore::MemoryCache::evict):
        (WebCore):
        (WebCore::MemoryCache::removeUrlFromCache):
        (WebCore::MemoryCache::removeUrlFromCacheImpl):
        * loader/cache/MemoryCache.h:
        (WebCore):
        (MemoryCache):

2012-03-16  Jacky Jiang  <zhajiang@rim.com>

        [BlackBerry] Upstream ScriptControllerBlackBerry.cpp
        https://bugs.webkit.org/show_bug.cgi?id=81397

        Reviewed by Rob Buis.

        Initial upstream, no new tests.

        * bindings/js/ScriptControllerBlackBerry.cpp: Added.

2012-03-16  Adam Barth  <abarth@webkit.org>

        remove-body-during-body-replacement2.html is triggering crashes on all platforms
        https://bugs.webkit.org/show_bug.cgi?id=81374

        Reviewed by Eric Seidel.

        When overriding disconnectFrame, we need to call the base class version
        of the method so that it can clear the m_frame pointer.

        Tests: This patch fixes a large number of crashes in tests.

        * notifications/DOMWindowNotifications.cpp:
        (WebCore::DOMWindowNotifications::disconnectFrame):

2012-03-16  Leo Yang  <leo.yang@torchmobile.com.cn>

        [BlackBerry] Upstream the BlackBerry change to platform/Widget.h
        https://bugs.webkit.org/show_bug.cgi?id=81304

        Reviewed by Rob Buis.

        typedefs of PlatformWidget and PlatformPageClient for the BlackBerry.

        * platform/Widget.h:

2012-03-16  David Barton  <dbarton@mathscribe.com>

        MathML internals - factor code for almost anonymous blocks
        https://bugs.webkit.org/show_bug.cgi?id=81387

        Reviewed by Eric Seidel.

        MathML uses "almost anonymous" blocks to layout parts of mathematical expressions. These
        will be converted to true anonymous blocks in a later patch. Here we factor out the code
        to create them into RenderMathMLBlock::createAlmostAnonymousBlock().

        No new tests. Some tree dump output is modified for existing tests. <munder>, <mover>,
        and <munderover> renderers already used true anonymous blocks, so we change them to call
        RenderBlock::createAnonymousBlock(). In the other direction, <mroot>'s almost anonymous
        blocks are now made RenderMathMLBlock not just RenderBlock, in agreement with other
        current MathML renderers.

        * rendering/mathml/RenderMathMLBlock.cpp:
        (WebCore::RenderMathMLBlock::createAlmostAnonymousBlock):
        * rendering/mathml/RenderMathMLBlock.h:
        (RenderMathMLBlock):
        (WebCore::RenderMathMLBlock::getBoxModelObjectWidth):
        * rendering/mathml/RenderMathMLFenced.cpp:
        (WebCore::RenderMathMLFenced::addChild):
        * rendering/mathml/RenderMathMLFraction.cpp:
        (WebCore::RenderMathMLFraction::updateFromElement):
            - improve some variable names
        (WebCore::RenderMathMLFraction::addChild):
        (WebCore::RenderMathMLFraction::layout):
        (WebCore::RenderMathMLFraction::paint):
        (WebCore::RenderMathMLFraction::baselinePosition):
        * rendering/mathml/RenderMathMLRoot.cpp:
        (WebCore::RenderMathMLRoot::addChild):
        * rendering/mathml/RenderMathMLSubSup.cpp:
        (WebCore::RenderMathMLSubSup::addChild):
        * rendering/mathml/RenderMathMLSubSup.h:
        * rendering/mathml/RenderMathMLUnderOver.cpp:
        (WebCore::RenderMathMLUnderOver::addChild):

2012-03-16  Levi Weintraub  <leviw@chromium.org>

        Prepare RenderObject for FractionalLayoutUnits
        https://bugs.webkit.org/show_bug.cgi?id=81178

        Reviewed by Eric Seidel.

        This readies RenderObject to deal with FractionalLayoutUnits as a backend for the
        LayoutUnit abstraction.

        No new tests. No change in behavior.

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::pixelSnappedAbsoluteClippedOverflowRect): Convenience method to be
        used instead of absouluteClippedOverflowRect in platform code. Platform updates will come
        in a separate patch.
        (WebCore):
        (WebCore::RenderObject::repaintAfterLayoutIfNeeded): Borders remain ints when we move to
        sub-pixel layout. This adjusts border variables for this, and adds compiler fixes when
        using std::max and std::min with mixed int/LayoutUnits.
        (WebCore::RenderObject::adjustRectForOutlineAndShadow): Outlines, like borders, remain
        ints in the new sub-pixel world. Using variables that reflect that.
        * rendering/RenderObject.h:
        (RenderObject):
        (WebCore::adjustForAbsoluteZoom): Handles FractionalLayoutUnit values. Flooring is what
        JavaScript requires since this is used with values that must return ints.
        (WebCore): Adding FractionalLayoutUnit.h to support the new adjusteForAbsoluteZoom method.

2012-03-16  Brady Eidson  <beidson@apple.com>

        <rdar://problem/11027997> and https://bugs.webkit.org/show_bug.cgi?id=81412
        REGRESSION (r107435) Copy a link and paste to Mail: Nothing is pasted

        Reviewed by Geoff Garen.

        WebKit API test WebViewCanPasteURL.mm added.

        * WebCore.exp.in:

        Add a strategy method specifically for getting the URL:
        * platform/PasteboardStrategy.h:

        Use that strategy method when creating the fragment for a URL:
        * platform/mac/PasteboardMac.mm:
        (WebCore::Pasteboard::documentFragment):

        Add a platform pasteboard accessor to "do the right thing" for getting a URL:
        * platform/PlatformPasteboard.h:
        * platform/mac/PlatformPasteboardMac.mm:
        (WebCore::PlatformPasteboard::url):

2012-03-16  Joseph Pecoraro  <pecoraro@apple.com>

        <http://webkit.org/b/81380> clang warning unused variable when ENABLE(TEXT_CARET) is disabled

        Reviewed by Dan Bernstein.

        * editing/FrameSelection.cpp:
        (WebCore::FrameSelection::recomputeCaretRect):
        Put the variable inside of a guard because it is only
        used inside of a guard.

2012-03-16  Andreas Kling  <kling@webkit.org>

        Shrink BorderValue.
        <http://webkit.org/b/69521>

        Reviewed by Anders Carlsson.

        Split BorderValue's Color member into RGBA32/bool buddies and stash the bool in
        the BorderValue bitfield.

        This shrinks BorderValue by 4 bytes, in turn shrinking BorderData by 16 bytes.
        Altogether this yields ~800 kB in reduced memory consumption when viewing the full
        HTML5 spec at <http://whatwg.org/c>

        * rendering/style/BorderValue.h:
        (WebCore::BorderValue::BorderValue):
        (WebCore::BorderValue::isTransparent):
        (WebCore::BorderValue::operator==):
        (BorderValue):
        (WebCore::BorderValue::setColor):
        (WebCore::BorderValue::color):
        * rendering/style/OutlineValue.h:
        (WebCore::OutlineValue::operator==):
        * rendering/style/RenderStyle.cpp:
        (SameSizeAsBorderValue):
        * rendering/style/RenderStyle.h:

2012-03-16  Mark Pilgrim  <pilgrim@chromium.org>

        Moves remaining filesystem files to Modules/filesystem/
        https://bugs.webkit.org/show_bug.cgi?id=81353

        Reviewed by Adam Barth.

        No new tests, all existing tests pass.

        * CMakeLists.txt:
        * DerivedSources.make:
        * DerivedSources.pri:
        * GNUmakefile.list.am:
        * Modules/filesystem/AsyncFileWriter.h: Copied from Source/WebCore/fileapi/AsyncFileWriter.h.
        * Modules/filesystem/AsyncFileWriterClient.h: Copied from Source/WebCore/fileapi/AsyncFileWriterClient.h.
        * Modules/filesystem/DOMFilePath.cpp: Copied from Source/WebCore/fileapi/DOMFilePath.cpp.
        * Modules/filesystem/DOMFilePath.h: Copied from Source/WebCore/fileapi/DOMFilePath.h.
        * Modules/filesystem/DOMFileSystem.cpp: Copied from Source/WebCore/fileapi/DOMFileSystem.cpp.
        * Modules/filesystem/DOMFileSystem.h: Copied from Source/WebCore/fileapi/DOMFileSystem.h.
        * Modules/filesystem/DOMFileSystem.idl: Copied from Source/WebCore/fileapi/DOMFileSystem.idl.
        * Modules/filesystem/DOMFileSystemBase.cpp: Copied from Source/WebCore/fileapi/DOMFileSystemBase.cpp.
        * Modules/filesystem/DOMFileSystemBase.h: Copied from Source/WebCore/fileapi/DOMFileSystemBase.h.
        * Modules/filesystem/DOMFileSystemSync.cpp: Copied from Source/WebCore/fileapi/DOMFileSystemSync.cpp.
        * Modules/filesystem/DOMFileSystemSync.h: Copied from Source/WebCore/fileapi/DOMFileSystemSync.h.
        * Modules/filesystem/DOMFileSystemSync.idl: Copied from Source/WebCore/fileapi/DOMFileSystemSync.idl.
        * Modules/filesystem/Entry.cpp: Copied from Source/WebCore/fileapi/Entry.cpp.
        * Modules/filesystem/Entry.h: Copied from Source/WebCore/fileapi/Entry.h.
        * Modules/filesystem/Entry.idl: Copied from Source/WebCore/fileapi/Entry.idl.
        * Modules/filesystem/EntryArray.cpp: Copied from Source/WebCore/fileapi/EntryArray.cpp.
        * Modules/filesystem/EntryArray.h: Copied from Source/WebCore/fileapi/EntryArray.h.
        * Modules/filesystem/EntryArray.idl: Copied from Source/WebCore/fileapi/EntryArray.idl.
        * Modules/filesystem/EntryArraySync.cpp: Copied from Source/WebCore/fileapi/EntryArraySync.cpp.
        * Modules/filesystem/EntryArraySync.h: Copied from Source/WebCore/fileapi/EntryArraySync.h.
        * Modules/filesystem/EntryArraySync.idl: Copied from Source/WebCore/fileapi/EntryArraySync.idl.
        * Modules/filesystem/EntryBase.cpp: Copied from Source/WebCore/fileapi/EntryBase.cpp.
        * Modules/filesystem/EntryBase.h: Copied from Source/WebCore/fileapi/EntryBase.h.
        * Modules/filesystem/EntryCallback.h: Copied from Source/WebCore/fileapi/EntryCallback.h.
        * Modules/filesystem/EntryCallback.idl: Copied from Source/WebCore/fileapi/EntryCallback.idl.
        * Modules/filesystem/EntrySync.cpp: Copied from Source/WebCore/fileapi/EntrySync.cpp.
        * Modules/filesystem/EntrySync.h: Copied from Source/WebCore/fileapi/EntrySync.h.
        * Modules/filesystem/EntrySync.idl: Copied from Source/WebCore/fileapi/EntrySync.idl.
        * Modules/filesystem/ErrorCallback.h: Copied from Source/WebCore/fileapi/ErrorCallback.h.
        * Modules/filesystem/ErrorCallback.idl: Copied from Source/WebCore/fileapi/ErrorCallback.idl.
        * Modules/filesystem/FileCallback.h: Copied from Source/WebCore/fileapi/FileCallback.h.
        * Modules/filesystem/FileCallback.idl: Copied from Source/WebCore/fileapi/FileCallback.idl.
        * Modules/filesystem/FileEntry.cpp: Copied from Source/WebCore/fileapi/FileEntry.cpp.
        * Modules/filesystem/FileEntry.h: Copied from Source/WebCore/fileapi/FileEntry.h.
        * Modules/filesystem/FileEntry.idl: Copied from Source/WebCore/fileapi/FileEntry.idl.
        * Modules/filesystem/FileEntrySync.cpp: Copied from Source/WebCore/fileapi/FileEntrySync.cpp.
        * Modules/filesystem/FileEntrySync.h: Copied from Source/WebCore/fileapi/FileEntrySync.h.
        * Modules/filesystem/FileEntrySync.idl: Copied from Source/WebCore/fileapi/FileEntrySync.idl.
        * Modules/filesystem/FileSystemCallback.h: Copied from Source/WebCore/fileapi/FileSystemCallback.h.
        * Modules/filesystem/FileSystemCallback.idl: Copied from Source/WebCore/fileapi/FileSystemCallback.idl.
        * Modules/filesystem/FileSystemCallbacks.cpp: Copied from Source/WebCore/fileapi/FileSystemCallbacks.cpp.
        * Modules/filesystem/FileSystemCallbacks.h: Copied from Source/WebCore/fileapi/FileSystemCallbacks.h.
        * Modules/filesystem/FileWriter.cpp: Copied from Source/WebCore/fileapi/FileWriter.cpp.
        * Modules/filesystem/FileWriter.h: Copied from Source/WebCore/fileapi/FileWriter.h.
        * Modules/filesystem/FileWriter.idl: Copied from Source/WebCore/fileapi/FileWriter.idl.
        * Modules/filesystem/FileWriterBase.cpp: Copied from Source/WebCore/fileapi/FileWriterBase.cpp.
        * Modules/filesystem/FileWriterBase.h: Copied from Source/WebCore/fileapi/FileWriterBase.h.
        * Modules/filesystem/FileWriterBaseCallback.h: Copied from Source/WebCore/fileapi/FileWriterBaseCallback.h.
        * Modules/filesystem/FileWriterCallback.h: Copied from Source/WebCore/fileapi/FileWriterCallback.h.
        * Modules/filesystem/FileWriterCallback.idl: Copied from Source/WebCore/fileapi/FileWriterCallback.idl.
        * Modules/filesystem/FileWriterSync.cpp: Copied from Source/WebCore/fileapi/FileWriterSync.cpp.
        * Modules/filesystem/FileWriterSync.h: Copied from Source/WebCore/fileapi/FileWriterSync.h.
        * Modules/filesystem/FileWriterSync.idl: Copied from Source/WebCore/fileapi/FileWriterSync.idl.
        * Modules/filesystem/LocalFileSystem.cpp: Copied from Source/WebCore/fileapi/LocalFileSystem.cpp.
        * Modules/filesystem/LocalFileSystem.h: Copied from Source/WebCore/fileapi/LocalFileSystem.h.
        * Modules/filesystem/Metadata.h: Copied from Source/WebCore/fileapi/Metadata.h.
        * Modules/filesystem/Metadata.idl: Copied from Source/WebCore/fileapi/Metadata.idl.
        * Modules/filesystem/MetadataCallback.h: Copied from Source/WebCore/fileapi/MetadataCallback.h.
        * Modules/filesystem/MetadataCallback.idl: Copied from Source/WebCore/fileapi/MetadataCallback.idl.
        * Modules/filesystem/SyncCallbackHelper.h: Copied from Source/WebCore/fileapi/SyncCallbackHelper.h.
        * Modules/filesystem/WebKitFlags.h: Copied from Source/WebCore/fileapi/WebKitFlags.h.
        * Modules/filesystem/WorkerContextFileSystem.cpp: Copied from Source/WebCore/fileapi/WorkerContextFileSystem.cpp.
        * Modules/filesystem/WorkerContextFileSystem.h: Copied from Source/WebCore/fileapi/WorkerContextFileSystem.h.
        * Modules/filesystem/WorkerContextFileSystem.idl: Copied from Source/WebCore/fileapi/WorkerContextFileSystem.idl.
        * Target.pri:
        * WebCore.gyp/WebCore.gyp:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * fileapi/AsyncFileWriter.h: Removed.
        * fileapi/AsyncFileWriterClient.h: Removed.
        * fileapi/DOMFilePath.cpp: Removed.
        * fileapi/DOMFilePath.h: Removed.
        * fileapi/DOMFileSystem.cpp: Removed.
        * fileapi/DOMFileSystem.h: Removed.
        * fileapi/DOMFileSystem.idl: Removed.
        * fileapi/DOMFileSystemBase.cpp: Removed.
        * fileapi/DOMFileSystemBase.h: Removed.
        * fileapi/DOMFileSystemSync.cpp: Removed.
        * fileapi/DOMFileSystemSync.h: Removed.
        * fileapi/DOMFileSystemSync.idl: Removed.
        * fileapi/Entry.cpp: Removed.
        * fileapi/Entry.h: Removed.
        * fileapi/Entry.idl: Removed.
        * fileapi/EntryArray.cpp: Removed.
        * fileapi/EntryArray.h: Removed.
        * fileapi/EntryArray.idl: Removed.
        * fileapi/EntryArraySync.cpp: Removed.
        * fileapi/EntryArraySync.h: Removed.
        * fileapi/EntryArraySync.idl: Removed.
        * fileapi/EntryBase.cpp: Removed.
        * fileapi/EntryBase.h: Removed.
        * fileapi/EntryCallback.h: Removed.
        * fileapi/EntryCallback.idl: Removed.
        * fileapi/EntrySync.cpp: Removed.
        * fileapi/EntrySync.h: Removed.
        * fileapi/EntrySync.idl: Removed.
        * fileapi/ErrorCallback.h: Removed.
        * fileapi/ErrorCallback.idl: Removed.
        * fileapi/FileCallback.h: Removed.
        * fileapi/FileCallback.idl: Removed.
        * fileapi/FileEntry.cpp: Removed.
        * fileapi/FileEntry.h: Removed.
        * fileapi/FileEntry.idl: Removed.
        * fileapi/FileEntrySync.cpp: Removed.
        * fileapi/FileEntrySync.h: Removed.
        * fileapi/FileEntrySync.idl: Removed.
        * fileapi/FileSystemCallback.h: Removed.
        * fileapi/FileSystemCallback.idl: Removed.
        * fileapi/FileSystemCallbacks.cpp: Removed.
        * fileapi/FileSystemCallbacks.h: Removed.
        * fileapi/FileWriter.cpp: Removed.
        * fileapi/FileWriter.h: Removed.
        * fileapi/FileWriter.idl: Removed.
        * fileapi/FileWriterBase.cpp: Removed.
        * fileapi/FileWriterBase.h: Removed.
        * fileapi/FileWriterBaseCallback.h: Removed.
        * fileapi/FileWriterCallback.h: Removed.
        * fileapi/FileWriterCallback.idl: Removed.
        * fileapi/FileWriterSync.cpp: Removed.
        * fileapi/FileWriterSync.h: Removed.
        * fileapi/FileWriterSync.idl: Removed.
        * fileapi/LocalFileSystem.cpp: Removed.
        * fileapi/LocalFileSystem.h: Removed.
        * fileapi/Metadata.h: Removed.
        * fileapi/Metadata.idl: Removed.
        * fileapi/MetadataCallback.h: Removed.
        * fileapi/MetadataCallback.idl: Removed.
        * fileapi/SyncCallbackHelper.h: Removed.
        * fileapi/WebKitFlags.h: Removed.
        * fileapi/WorkerContextFileSystem.cpp: Removed.
        * fileapi/WorkerContextFileSystem.h: Removed.
        * fileapi/WorkerContextFileSystem.idl: Removed.

2012-03-16  Mark Pilgrim  <pilgrim@chromium.org>

        Collapse ENABLE(BLOB)|ENABLE(FILE_SYSTEM) to just ENABLE(BLOB) in OperationNotAllowedException.idl
        https://bugs.webkit.org/show_bug.cgi?id=81391

        Reviewed by Adam Barth.

        No new tests, all existing tests pass.

        * fileapi/OperationNotAllowedException.idl:

2012-03-16  Emil A Eklund  <eae@chromium.org>

        Fix rounding and usage of LayoutUnits in RenderBoxModelObject
        https://bugs.webkit.org/show_bug.cgi?id=81057

        Reviewed by Julien Chaffraix.

        No new tests.

        (WebCore):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::pixelSnappedOffsetWidth):
        (WebCore::RenderBoxModelObject::pixelSnappedOffsetHeight):
        Fix implementation of pixelSnappedOffsetWidth/Height. The location
        parameter will be ignored until we enable subpixel support.

        (WebCore::RenderBoxModelObject::paintFillLayerExtended):
        Use ints for border widths.
        
        (WebCore::resolveWidthForRatio):
        (WebCore::resolveHeightForRatio):
        (WebCore::resolveAgainstIntrinsicWidthOrHeightAndRatio):
        (WebCore::resolveAgainstIntrinsicRatio):
        Change resolve*Ratio methods to operate on IntSizes as none of the
        callers need subpixel precision.

        (WebCore::RenderBoxModelObject::calculateBackgroundImageGeometry):
        (WebCore::RenderBoxModelObject::paintNinePieceImage):
        Pixel snap paintRect when computing image geometry.

2012-03-16  Terry Anderson  <tdanderson@chromium.org>

        100% height elements to not respond to vertical browser rescaling
        https://bugs.webkit.org/show_bug.cgi?id=43022

        Reviewed by Julien Chaffraix.

        Test: fast/replaced/vertical-resize-100percent-element.html

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::computeReplacedLogicalHeightUsing):
            For the case where a replaced element has a percentage height,
            we update the entries in RenderBlock::gPercentHeightDescendantsMap
            corresponding to all ancestors of the replaced element.

2012-03-15  Daniel Cheng  <dcheng@chromium.org>

        [chromium] Refactor ClipboardChromium and DataTransferItemList/DataTransferItem to support HTML spec
        https://bugs.webkit.org/show_bug.cgi?id=76598

        Reviewed by Tony Chang.

        We no longer store drag/clipboard data in named fields. We used to maintain the data store
        list separately, which resulted in a lot of complicated code to try to make sure that
        ChromiumDataObject and this list stayed in sync. We now just store what is essentially a
        list MIME type/data pairs directly in ChromiumDataObject. This has the benefit of letting us
        easily add write support during dragstart/copy operations using DataTransferItemList.

        Tests: fast/events/clipboard-dataTransferItemList.html
               fast/events/drag-dataTransferItemList.html

        * platform/chromium/ChromiumDataObject.cpp:
        (WebCore::findItem):
        (WebCore::ChromiumDataObject::createFromPasteboard):
        (WebCore::ChromiumDataObject::create):
        (WebCore::ChromiumDataObject::copy):
        (WebCore::ChromiumDataObject::items):
        (WebCore::ChromiumDataObject::clearData):
        (WebCore::ChromiumDataObject::clearAll):
        (WebCore::ChromiumDataObject::clearAllExceptFiles):
        (WebCore::ChromiumDataObject::types):
        (WebCore::ChromiumDataObject::getData):
        (WebCore::ChromiumDataObject::setData):
        (WebCore::ChromiumDataObject::urlAndTitle):
        (WebCore::ChromiumDataObject::setURLAndTitle):
        (WebCore::ChromiumDataObject::htmlAndBaseURL):
        (WebCore::ChromiumDataObject::setHTMLAndBaseURL):
        (WebCore::ChromiumDataObject::containsFilenames):
        (WebCore):
        (WebCore::ChromiumDataObject::filenames):
        (WebCore::ChromiumDataObject::addFilename):
        (WebCore::ChromiumDataObject::addSharedBuffer):
        (WebCore::ChromiumDataObject::ChromiumDataObject):
        * platform/chromium/ChromiumDataObject.h:
        (WebCore):
        (ChromiumDataObject):
        * platform/chromium/ClipboardChromium.cpp:
        (WebCore::normalizeType):
        (WebCore::ClipboardChromium::ClipboardChromium):
        (WebCore::ClipboardChromium::clearData):
        (WebCore::ClipboardChromium::clearAllData):
        (WebCore::ClipboardChromium::getData):
        (WebCore::ClipboardChromium::setData):
        (WebCore::ClipboardChromium::types):
        (WebCore::ClipboardChromium::files):
        (WebCore::writeImageToDataObject):
        (WebCore::ClipboardChromium::declareAndWriteDragImage):
        (WebCore::ClipboardChromium::writeURL):
        (WebCore::ClipboardChromium::writeRange):
        (WebCore::ClipboardChromium::writePlainText):
        (WebCore::ClipboardChromium::hasData):
        (WebCore::ClipboardChromium::items):
        * platform/chromium/ClipboardChromium.h:
        (WebCore):
        (ClipboardChromium):
        (WebCore::ClipboardChromium::frame):
        * platform/chromium/ClipboardUtilitiesChromium.cpp:
        (WebCore::convertURIListToURL):
        (WebCore):
        * platform/chromium/ClipboardUtilitiesChromium.h:
        (WebCore):
        * platform/chromium/DataTransferItemChromium.cpp:
        (WebCore::DataTransferItemChromium::createFromString):
        (WebCore::DataTransferItemChromium::createFromFile):
        (WebCore::DataTransferItemChromium::createFromURL):
        (WebCore::DataTransferItemChromium::createFromHTML):
        (WebCore):
        (WebCore::DataTransferItemChromium::createFromSharedBuffer):
        (WebCore::DataTransferItemChromium::createFromPasteboard):
        (WebCore::DataTransferItemChromium::DataTransferItemChromium):
        (WebCore::DataTransferItemChromium::getAsString):
        (WebCore::DataTransferItemChromium::getAsFile):
        (WebCore::DataTransferItemChromium::internalGetAsString):
        (WebCore::DataTransferItemChromium::isFilename):
        * platform/chromium/DataTransferItemChromium.h:
        (WebCore):
        (DataTransferItemChromium):
        (WebCore::DataTransferItemChromium::kind):
        (WebCore::DataTransferItemChromium::type):
        (WebCore::DataTransferItemChromium::sharedBuffer):
        (WebCore::DataTransferItemChromium::title):
        (WebCore::DataTransferItemChromium::baseURL):
        * platform/chromium/DataTransferItemListChromium.cpp:
        (WebCore::DataTransferItemListChromium::create):
        (WebCore::DataTransferItemListChromium::createFromPasteboard):
        (WebCore):
        (WebCore::DataTransferItemListChromium::DataTransferItemListChromium):
        (WebCore::DataTransferItemListChromium::length):
        (WebCore::DataTransferItemListChromium::item):
        (WebCore::DataTransferItemListChromium::deleteItem):
        (WebCore::DataTransferItemListChromium::clear):
        (WebCore::DataTransferItemListChromium::add):
        (WebCore::DataTransferItemListChromium::internalAddStringItem):
        (WebCore::DataTransferItemListChromium::internalAddFileItem):
        * platform/chromium/DataTransferItemListChromium.h:
        (WebCore):
        (DataTransferItemListChromium):
        * platform/chromium/DragDataChromium.cpp:
        (WebCore::DragData::asURL):
        (WebCore::DragData::asPlainText):
        (WebCore::DragData::asFragment):

2012-03-16  Matt Lilek  <mrl@apple.com>

        Don't install libWebCoreTestSupport on OS X production builds
        https://bugs.webkit.org/show_bug.cgi?id=81087

        Reviewed by Mark Rowe.

        * Configurations/WebCoreTestSupport.xcconfig:

2012-03-16  Tony Chang  <tony@chromium.org>

        incorrectly removing scrollbar height for auto height flexbox children
        https://bugs.webkit.org/show_bug.cgi?id=81388

        Reviewed by Ojan Vafai.

        In a column flexbox, when computing the preferred height of an auto
        height child, we were subtracting out the horizontal scrollbar height.

        New test case in css3/flexbox/columns-auto-size.html.

        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::preferredMainAxisContentExtentForChild):

2012-03-16  Adam Klein  <adamk@chromium.org>

        Out-of-document radio buttons should be grouped when associated with a form
        https://bugs.webkit.org/show_bug.cgi?id=81268

        Reviewed by Kent Tamura.

        Per the HTML spec, and the behavior of Firefox and IE 8/9, radio buttons
        with a form owner should be grouped, even if that form is not in the document.

        r104668 added many inDocument() tests to radio button grouping code.
        While those are necessary to avoid unattached <input type=radio>
        elements being grouped together, it also kept them from being grouped
        when associated with a form outside the document.

        This patch changes the HTMLInputElement::checkedRadioButtons() method
        to return either a pointer to the proper CheckedRadioButtons instance
        (either the document's or a form's), but will return null if the
        element should not be associated with any radio button group.

        The main fallout of this was that the callers of checkedRadioButtons()
        now have to check for null, resulting in the creation of a few helper
        methods in HTMLInputElement to wrap the null checks.

        This refactoring has the pleasant side-effect of exposing a cleaner API between
        HTMLInputElement and RadioInputType, and making a clearer contract
        between HTMLInputElement and CheckedRadioButtons (e.g., all
        CheckedRadioButtons methods that take an element can now assume that
        it is a radio button, where previously some checked for that and
        others asserted it).

        Test: fast/forms/radio/radio-group-in-detached-form.html

        * dom/CheckedRadioButtons.cpp:
        (WebCore): Removed shouldMakeRadioGroup() helper function.
        (WebCore::CheckedRadioButtons::addButton): Replace call to shouldMakeRadioGroup
        with appropriate assert and name check.
        (WebCore::CheckedRadioButtons::updateCheckedState): ditto.
        (WebCore::CheckedRadioButtons::requiredAttributeChanged): ditto.
        (WebCore::CheckedRadioButtons::isRequiredGroup): Renamed from isInRequiredGroup,
        changed to take only a group name, not an element.
        (WebCore::CheckedRadioButtons::removeButton): Replace call to shouldMakeRadioGroup.
        with appropriate assert and name check.
        * dom/CheckedRadioButtons.h:
        (CheckedRadioButtons):
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::~HTMLInputElement): Added isRadioButton check
        now that it's asserted in CheckedRadioButtons.
        (WebCore::HTMLInputElement::updateType): Call helper method instead of
        calling directly into CheckedRadioButtons.
        (WebCore::HTMLInputElement::parseAttribute): ditto.
        (WebCore::HTMLInputElement::setChecked): ditto.
        (WebCore::HTMLInputElement::willChangeForm): ditto.
        (WebCore::HTMLInputElement::didChangeForm): ditto.
        (WebCore::HTMLInputElement::insertedIntoDocument): ditto.
        (WebCore::HTMLInputElement::removedFromDocument): ditto.
        (WebCore::HTMLInputElement::didMoveToNewDocument): Added isRadioButton check.
        (WebCore::HTMLInputElement::requiredAttributeChanged): Check for membership in a group
        before calling into CheckedRadioButtons.
        (WebCore::HTMLInputElement::isInRequiredRadioButtonGroup): Added helper method for use by RadioInputType.
        (WebCore):
        (WebCore::HTMLInputElement::checkedRadioButtonForGroup): ditto.
        (WebCore::HTMLInputElement::checkedRadioButtons): Changed to return a
        pointer, only return non-null if actually a member of a group.
        (WebCore::HTMLInputElement::addToRadioButtonGroup): Helper method for
        use in HTMLInputElement.
        (WebCore::HTMLInputElement::removeFromRadioButtonGroup): ditto.
        * html/HTMLInputElement.h:
        (HTMLInputElement): Added/removed methods, removed outdated comment about visibility.
        * html/RadioInputType.cpp:
        (WebCore::RadioInputType::valueMissing): Call new HTMLInputElement methods instead
        of interacting directly with CheckedRadioButtons.
        (WebCore::RadioInputType::isKeyboardFocusable): ditto.
        (WebCore::RadioInputType::willDispatchClick): ditto.

2012-03-16  David Hyatt  <hyatt@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=81366
        
        Add RenderMultiColumnBlock subclass of RenderBlock. This new class will hold all of the multi-column
        logic (as well as painting/hit testing). That way the column code can be kept out of the base class
        and be more cleanly factored.

        Patch Node::diff so that we detach and re-attach the renderer if column counts or widths change
        from auto to non-auto (and vice versa) to ensure the right renderer gets made.
        
        Patch RenderObject::createObject to make a RenderMultiColumnBlock if either the column count or
        column width is non-auto.
        
        Patch RenderBlock::calcColumnWidth to "turn off" the old implementation of columns if the pref to use
        the new column implementation is set. This single chokepoint should be sufficient for disabling the old
        columns in favor of the new.

        Reviewed by Dan Bernstein.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/Document.cpp:
        (WebCore::Document::regionBasedColumnsEnabled):
        (WebCore):
        (WebCore::Document::recalcStyle):
        * dom/Document.h:
        (Document):
        * dom/Element.cpp:
        (WebCore::Element::recalcStyle):
        * dom/Node.cpp:
        (WebCore::Node::diff):
        * dom/Node.h:
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::calcColumnWidth):
        (WebCore::RenderBlock::updateFirstLetterStyle):
        * rendering/RenderMultiColumnBlock.cpp: Added.
        (WebCore):
        (WebCore::RenderMultiColumnBlock::RenderMultiColumnBlock):
        (WebCore::RenderMultiColumnBlock::renderName):
        * rendering/RenderMultiColumnBlock.h: Added.
        (WebCore):
        (RenderMultiColumnBlock):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::createObject):
        * rendering/RenderObjectChildList.cpp:
        (WebCore::RenderObjectChildList::updateBeforeAfterContent):

2012-03-16  Stephen White  <senorblanco@chromium.org>

        [chromium] Improve CSS3 filter blur performance.
        https://bugs.webkit.org/show_bug.cgi?id=81360

        This change improves blur performance by 2-2.5X on blurred CSS
        3D transforms and accelerated canvas demos by skipping an unnecessary
        texture allocation and bitmap draw.

        Reviewed by James Robinson.

        Covered by existing layout tests in css3/filters.

        * platform/graphics/chromium/cc/CCRenderSurfaceFilters.cpp:
        (WebCore::CCRenderSurfaceFilters::apply):
        Call SkCanvas::drawSprite() directly instead of using
        saveLayer()/restore().

2012-03-16  Joshua Bell  <jsbell@chromium.org>

        [Chromium] IndexedDB: Assertion failure when storing File objects
        https://bugs.webkit.org/show_bug.cgi?id=76746

        The blob data in Blob/File/FileList objects is serialized "by reference" (the
        internal URL) rather than "by value" (the actual data); this is sufficient for
        postMessage() but not for IndexedDB since the referenced data is not retained
        Expose a mechanism to enumerate the URLs so that SSVs can be rejected by IDB
        until blob data serialization can is implemented (outside the SSV mechanism, and
        potentially asynchronously).

        Also, correct issue in V8DOMWrapper::instantiateV8Object where context is assumed
        to be a Worker context if it's not a Window, which is incorrect for the
        Chromium utility process; this is hit if Blobs are not blocked.

        Reviewed by Tony Chang.

        Test: storage/indexeddb/noblobs.html

        * Modules/indexeddb/IDBCursor.cpp:
        (WebCore::IDBCursor::update): Reject SSVs that contain blob references.
        * Modules/indexeddb/IDBObjectStore.cpp:
        (WebCore::IDBObjectStore::add): Reject SSVs that contain blob references.
        (WebCore::IDBObjectStore::put): Reject SSVs that contain blob references.
        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::CloneSerializer::serialize):
        (WebCore::CloneSerializer::CloneSerializer):
        (WebCore::CloneSerializer::dumpIfTerminal):
        (WebCore::CloneSerializer::write):
        (CloneSerializer):
        (WebCore::SerializedScriptValue::SerializedScriptValue):
        (WebCore::SerializedScriptValue::create):
        (WebCore::SerializedScriptValue::undefinedValue):
        (WebCore::SerializedScriptValue::booleanValue):
        * bindings/js/SerializedScriptValue.h: New API to enable the clients to be picky.
        * bindings/v8/SerializedScriptValue.cpp:
        (WebCore::SerializedScriptValue::SerializedScriptValue):
        * bindings/v8/SerializedScriptValue.h: New API to enable the clients to be picky.
        (WebCore::SerializedScriptValue::blobURLs):
        (SerializedScriptValue):
        * bindings/v8/V8DOMWrapper.cpp:
        (WebCore::V8DOMWrapper::instantiateV8Object):  Ensure context is a worker context before treating it as such.

2012-03-16  Erik Arvidsson  <arv@chromium.org>

        [V8] Ensure that invalid syntax in inline event handlers does not cause a crash
        https://bugs.webkit.org/show_bug.cgi?id=81385

        Reviewed by Nate Chapin.

        The way that V8 does its inline event handler involves concatting strings and
        if the attribute value is crafted in a special way this could cause a crash.

        Test: fast/dom/inline-event-attributes-crash.html

        * bindings/v8/V8LazyEventListener.cpp:
        (WebCore::V8LazyEventListener::prepareListenerObject):

2012-03-14  Jer Noble  <jer.noble@apple.com>

        Wrong icon to restore to windowed mode in full screen video panel
        https://bugs.webkit.org/show_bug.cgi?id=70437

        Reviewed by Eric Carlson.

        No new tests. Updated platform/mac/accessibility/media-element-expected.txt.

        Renamed MediaFullscreenButton to MediaEnterFullscreenButton and added MediaExitFullscreenButton:
        * accessibility/AccessibilityMediaControls.cpp:
        (WebCore::AccessibilityMediaControl::controlTypeName):
        (WebCore::AccessibilityMediaControl::roleValue):
        * html/shadow/MediaControlElements.cpp:
        (WebCore::MediaControlFullscreenButtonElement::MediaControlFullscreenButtonElement):
        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        * css/CSSValueKeywords.in:
        * platform/ThemeTypes.h:

        Added setIsFullscreen which controls the display of the enter/exit fullscreen button:
        * html/shadow/MediaControlElements.cpp:
        (WebCore::MediaControlFullscreenButtonElement::setIsFullscreen): Added.
        * html/shadow/MediaControlElements.h:
        * html/shadow/MediaControlRootElement.cpp:
        (WebCore::MediaControlRootElement::enteredFullscreen):
        (WebCore::MediaControlRootElement::exitedFullscreen):

        Paint the enter/exit fullscreen button accordingly:
        * rendering/RenderMediaControlsChromium.cpp:
        (WebCore::RenderMediaControlsChromium::paintMediaControlsPart):
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::paint):
        * rendering/RenderThemeChromiumAndroid.cpp:
        (WebCore::RenderThemeChromiumAndroid::paintMediaFullscreenButton):
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::paintMediaFullscreenButton):
        * rendering/RenderMediaControls.cpp:
        (WebCore::RenderMediaControls::paintMediaControlsPart):
        * rendering/RenderThemeSafari.cpp:
        (WebCore::RenderThemeSafari::paintMediaFullscreenButton):

        Update the localized strings for the exit and enter fullscreen buttons:
        * English.lproj/Localizable.strings:
        * platform/LocalizedStrings.cpp:
        (WebCore::localizedMediaControlElementString):
        * platform/gtk/LocalizedStringsGtk.cpp:
        (WebCore::localizedMediaControlElementString):
        (WebCore::localizedMediaControlElementHelpText):
        * platform/qt/LocalizedStringsQt.cpp:
        (WebCore::localizedMediaControlElementString):
        (WebCore::localizedMediaControlElementHelpText):

2012-03-16  Levi Weintraub  <leviw@chromium.org>

        Update LayoutUnit usage in RenderListBox
        https://bugs.webkit.org/show_bug.cgi?id=81038

        Reviewed by Julien Chaffraix.

        Bringing RenderListBox in line with the rules listed in
        https://trac.webkit.org/wiki/LayoutUnit

        No new tests. No change in behavior.

        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::paintScrollbar): Pixel snapping before handing off scrollbar
        painting to the platform.
        (WebCore::RenderListBox::paintItemForeground): Rounding the offset for text painting.
        (WebCore::RenderListBox::paintItemBackground): Pixel snapping the background rect.
        (WebCore::RenderListBox::panScroll): EventHandler::currentMousePosition is an IntPoint,
        so it doesn't require additional rounding in RenderListBox.

2012-03-16  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r111020.
        http://trac.webkit.org/changeset/111020
        https://bugs.webkit.org/show_bug.cgi?id=81377

        Broke Chromium Win compile (Requested by pkasting on #webkit).

        * GNUmakefile.list.am:
        * WebCore.gypi:
        * platform/mediastream/PeerConnection00Handler.cpp: Removed.
        * platform/mediastream/PeerConnection00Handler.h: Removed.
        * platform/mediastream/PeerConnection00HandlerClient.h: Removed.

2012-03-16  Dominic Mazzoni  <dmazzoni@google.com>

        File input control accessibility can cause a crash
        https://bugs.webkit.org/show_bug.cgi?id=80896

        Reviewed by Chris Fleizach.

        Test: accessibility/input-file-causes-crash.html

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::textUnderElement):

2012-03-08  Jer Noble  <jer.noble@apple.com>

        Support W3C Full Screen API proposal
        https://bugs.webkit.org/show_bug.cgi?id=80660

        Reviewed by Alexey Proskuryakov.

        Tests: fullscreen/full-screen-element-stack.html
               fullscreen/full-screen-enabled.html
               fullscreen/full-screen-restrictions.html

        The W3C proposal for taking arbitrary elements into full-screen mode is significantly
        different than the Mozilla proposal. For example, the W3C has proposed a lower-case "s"
        in "Fullscreen", which means the W3C and Mozilla "requestFullscreen" APIs differ only by
        in that lower-case "s". Annoying as this is, it does allow us to retain the semantics for
        the Mozilla case (har!).

        A significant difficulty is obeying the new W3C spec rules is that we would like to apply the
        fullscreen CSS rules while exiting fullscreen mode, though the W3C spec insists that the
        webkitFullscreenElement returns the new value immediately.  As such, we retain the m_fullScreenElement
        variable (distinct from the top of the m_fullScreenElements stack) which is controlled by the
        webkit{Will,Did}{Enter,Exit}FullScreen functions.

        New APIs for the W3C Fullscreen spec:
        * dom/Document.h:
        (WebCore::Document::webkitFullscreenElement):
        (WebCore::Document::webkitFullscreenEnabled):
        * dom/Document.idl:
        * dom/Element.cpp:
        (WebCore::Element::webkitRequestFullscreen):
        * dom/Element.h:
        * dom/Element.idl:

        * dom/Document.cpp:
        (WebCore::Document::removedLastRef): Clear m_fullScreenElementStack.
        (WebCore::Document::requestFullScreenForElement): Implement the W3C requirements.
        (WebCore::Document::webkitExitFullscreen): Ditto.
        (WebCore::Document::webkitCancelFullScreen): Implement in terms of webkitCancelFullscreen.
        (WebCore::Document::webkitDidEnterFullScreenForElement): 
        (WebCore::Document::webkitWillExitFullScreenForElement):
        (WebCore::Document::webkitDidExitFullScreenForElement):
        (WebCore::Document::fullScreenChangeDelayTimerFired): Protect against items being
            added to the event and error queue by swapping out empty queues before starting.
        (WebCore::Document::clearFullscreenElementStack): Simple accessor.
        (WebCore::Document::popFullscreenElementStack): Ditto.
        (WebCore::Document::pushFullscreenElementStack): Ditto.
        * dom/Element.cpp:
        (WebCore::Element::webkitRequestFullScreen):

        Add new RuntimeEnabledFeatures functions for the added Document and Element functions.
        * bindings/generic/RuntimeEnabledFeatures.h:
        (RuntimeEnabledFeatures):
        (WebCore::RuntimeEnabledFeatures::webkitFullscreenEnabledEnabled):
        (WebCore::RuntimeEnabledFeatures::webkitFullscreenElementEnabled):
        (WebCore::RuntimeEnabledFeatures::webkitExitFullscreenEnabled):
        (WebCore::RuntimeEnabledFeatures::webkitRequestFullscreenEnabled):


2012-03-16  Adam Klein  <adamk@chromium.org>

        Make HTMLInputElement::isRadioButton non-virtual and remove unused HTMLFormControlElement::isRadioButton method
        https://bugs.webkit.org/show_bug.cgi?id=81255

        Reviewed by Kent Tamura.

        No new tests, no change in behavior.

        * html/HTMLFormControlElement.h:
        * html/HTMLInputElement.h:
        (HTMLInputElement):

2012-03-16  Tay Grigg  <tgrigg@rim.com>

        [BlackBerry] Update NetworkJob to accept batched headers
        https://bugs.webkit.org/show_bug.cgi?id=81273

        Batch up the headers into a vector before they come into
        webkit to increase performance, and simplify the API.

        Reviewed by George Staikos.

        * platform/network/blackberry/NetworkJob.cpp:
        (WebCore::NetworkJob::notifyHeadersReceived):
        * platform/network/blackberry/NetworkJob.h:
        (NetworkJob):

2012-03-16  Dana Jansens  <danakj@chromium.org>

        [chromium] Add overdraw metrics for texture uploads
        https://bugs.webkit.org/show_bug.cgi?id=81175

        Reviewed by Adrienne Walker.

        Record texture upload metrics during paint. To properly record
        the amount of pixels culled, we must compute the amount of pixels we
        would have uploaded for a tile. This requires knowing the dirty rect of
        the tile, but the dirty rect can be changed by WebKit during a paint, so
        we always store the dirtyRect in the tile's updateRect. We add an
        m_updateCulled bool to the UpdatableTile structure, to identify tiles
        that were not updated, and know a tile was updated if updateRect is not
        empty and updateCulled is false.

        Tested by all TiledLayerChromiumTests that use occlusion tracker.

        * platform/graphics/chromium/TiledLayerChromium.cpp:
        (UpdatableTile):
        (WebCore::TiledLayerChromium::prepareToUpdateTiles):
        * platform/graphics/chromium/cc/CCLayerTreeHost.cpp:
        (WebCore::CCLayerTreeHost::paintLayerContents):

2012-03-16  Jer Noble  <jer.noble@apple.com>

        Allow AudioContext::create() to emit an ExceptionCode.
        https://bugs.webkit.org/show_bug.cgi?id=81049

        Reviewed by Kentaro Hara.

        No new tests; no change in functionality.

        Pass through an ExceptionCode parameter to AudioContext::create().  It is currently
        never modified, but exceptions will be added in the future.

        * bindings/js/JSAudioContextCustom.cpp:
        (WebCore::JSAudioContextConstructor::constructJSAudioContext):
        * bindings/v8/custom/V8AudioContextCustom.cpp:
        (WebCore::V8AudioContext::constructorCallback):
        * webaudio/AudioContext.cpp:
        (WebCore::AudioContext::create):
        * webaudio/AudioContext.h:

2012-03-16  Dana Jansens  <danakj@chromium.org>

        [chromium] Remove surface damage client from occlusion tracker
        https://bugs.webkit.org/show_bug.cgi?id=81242

        Reviewed by Adrienne Walker.

        Code was not used yet, so no new tests. Removing tests instead!

        * platform/graphics/chromium/cc/CCOcclusionTracker.cpp:
        (WebCore::::CCOcclusionTrackerBase):
        (WebCore::::layerScissorRectInTargetSurface):
        (WebCore):
        * platform/graphics/chromium/cc/CCOcclusionTracker.h:
        (WebCore):
        (CCOcclusionTrackerBase):

2012-03-16  Tommy Widenflycht  <tommyw@google.com>

        MediaStream API (JSEP): Introducing PeerConnection00Handler
        https://bugs.webkit.org/show_bug.cgi?id=81333

        Reviewed by Adam Barth.

        In preparation of the last WebCore patch that will introduce PeerConnection00 here's its platform representation.

        Not possible to test until the entire JSEP feature is commited.

        * GNUmakefile.list.am:
        * WebCore.gypi:
        * platform/mediastream/PeerConnection00Handler.cpp: Added.
        (WebCore):
        (WebCore::PeerConnection00Handler::create):
        (WebCore::PeerConnection00Handler::PeerConnection00Handler):
        (WebCore::PeerConnection00Handler::~PeerConnection00Handler):
        (WebCore::PeerConnection00Handler::createOffer):
        (WebCore::PeerConnection00Handler::createAnswer):
        (WebCore::PeerConnection00Handler::setLocalDescription):
        (WebCore::PeerConnection00Handler::setRemoteDescription):
        (WebCore::PeerConnection00Handler::localDescription):
        (WebCore::PeerConnection00Handler::remoteDescription):
        (WebCore::PeerConnection00Handler::startIce):
        (WebCore::PeerConnection00Handler::processIceMessage):
        (WebCore::PeerConnection00Handler::addStream):
        (WebCore::PeerConnection00Handler::removeStream):
        (WebCore::PeerConnection00Handler::stop):
        * platform/mediastream/PeerConnection00Handler.h: Added.
        (WebCore):
        (PeerConnection00Handler):
        * platform/mediastream/PeerConnection00HandlerClient.h: Added.
        (WebCore):
        (PeerConnection00HandlerClient):
        (WebCore::PeerConnection00HandlerClient::~PeerConnection00HandlerClient):

2012-03-16  Pavel Podivilov  <podivilov@chromium.org>

        Web Inspector: fix exception when hovering over bound function in heap profiler.
        https://bugs.webkit.org/show_bug.cgi?id=81362

        Reviewed by Yury Semikhatsky.

        * inspector/front-end/DebuggerPresentationModel.js:
        (WebInspector.DebuggerPresentationModel.Linkifier.prototype.linkifyRawLocation):

2012-03-16  Yoshifumi Inoue  <yosin@chromium.org>

        [Forms] The "progress" element should not be a form-associated element.
        https://bugs.webkit.org/show_bug.cgi?id=80240

        Reviewed by Kent Tamura.

        This patch changes base class of HTMLProgressElement to LabelableElement from
        HTMLFormControlElement for saving memory space and iteration time of
        extra "progress" elements in HTMLFormElement::m_formAssociatedElements
        and matching the HTML5 specification for ease of maintenance.

        Changes of TextIterator is lead by usage of isFormControlElement. This
        changes will be replaced with more meaningful predicate as part of
        https://bugs.webkit.org/show_bug.cgi?id=80381

        No new tests. Update existing tests to cover this change.

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::canShareStyleWithElement): Moved the "progress" element support code from canShareStyleWithControl.
        (WebCore::CSSStyleSelector::canShareStyleWithControl):
        * css/SelectorChecker.cpp:
        (WebCore::SelectorChecker::checkOneSelector): Remove isFormControlElement check for PseudoIndeterminate.
        * editing/TextIterator.cpp:
        (WebCore::TextIterator::advance): Check HTMLProgressElement in addition to isFormControlElement. This change is for text dump in LayoutTests implemented by document.innerText attribute.
        * html/HTMLProgressElement.cpp: Remove unused include file.
        (WebCore::HTMLProgressElement::HTMLProgressElement): Changed base class to LabelableElement.
        (WebCore::HTMLProgressElement::create): Remove form paraprogress.
        (WebCore::HTMLProgressElement::parseAttribute): Replace HTMLFormControlElement to LabelableElement.
        (WebCore::HTMLProgressElement::attach): Replace HTMLFormControlElement to LabelableElement.
        * html/HTMLProgressElement.h:
        (HTMLProgressElement):
        * html/HTMLProgressElement.idl: Remove the "form" attribute which isn't listed in the HTML5 specification.
        * html/HTMLTagNames.in: Remove "constructorNeedsFormElement" for not passing "form" parameter in HTMLElementFactory.

2012-03-16  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: Heap Snapshot: Unreviewed single line fix for isWindow getter.

        * inspector/front-end/HeapSnapshot.js:
        (WebInspector.HeapSnapshotNode.prototype.get isWindow):

2012-03-16  Tommy Widenflycht  <tommyw@google.com>

        MediaStream API (JSEP): Fixing a few nits
        https://bugs.webkit.org/show_bug.cgi?id=81322

        Reviewed by Adam Barth.

        Addressing the nits from bugs 81206 and 81207.

        Nothing to test.

        * Modules/mediastream/SessionDescription.idl:
        * platform/mediastream/IceOptions.h:
        (WebCore::IceOptions::IceOptions):
        * platform/mediastream/SessionDescriptionDescriptor.h:
        (SessionDescriptionDescriptor):

2012-03-16  Peter Rybin  <peter.rybin@gmail.com>

        Web Inspector: TypeBuilder: Introduce OptOutput class for optional output parameters
        https://bugs.webkit.org/show_bug.cgi?id=80789

        Reviewed by Yury Semikhatsky.

        OptOutput class is added for optional return parameters.

        Strict mode added to Generator that makes all parameter types strict
        and drop pre-set default values for return parameters.

        Debugger and Page domain is switched to strict mode.

        * inspector/CodeGeneratorInspector.py:
        (CommandReturnPassModel.OptOutput):
        (CommandReturnPassModel.OptOutput.__init__):
        (CommandReturnPassModel.OptOutput.get_return_var_type):
        (CommandReturnPassModel.OptOutput.get_output_argument_prefix):
        (CommandReturnPassModel.OptOutput.get_output_to_raw_expression):
        (CommandReturnPassModel.OptOutput.get_output_parameter_type):
        (CommandReturnPassModel):
        (CommandReturnPassModel.OptOutput.get_set_return_condition):
        (TypeModel.Enum.get_optional.EnumOptional.get_command_return_pass_model):
        (TypeModel.ValueType.ValueOptional.get_command_return_pass_model):
        (OptOutput):
        (Generator.process_event):
        (Generator.process_command):
        * inspector/ContentSearchUtils.cpp:
        (WebCore::ContentSearchUtils::buildObjectForSearchMatch):
        (WebCore::ContentSearchUtils::searchInTextByLines):
        * inspector/ContentSearchUtils.h:
        (ContentSearchUtils):
        * inspector/InjectedScript.cpp:
        (WebCore::InjectedScript::evaluate):
        (WebCore::InjectedScript::callFunctionOn):
        (WebCore::InjectedScript::evaluateOnCallFrame):
        (WebCore::InjectedScript::makeEvalCall):
        * inspector/InjectedScript.h:
        (InjectedScript):
        * inspector/InspectorDOMDebuggerAgent.cpp:
        (WebCore::InspectorDOMDebuggerAgent::didInvalidateStyleAttr):
        (WebCore::InspectorDOMDebuggerAgent::willInsertDOMNode):
        (WebCore::InspectorDOMDebuggerAgent::willRemoveDOMNode):
        (WebCore::InspectorDOMDebuggerAgent::willModifyDOMAttr):
        (WebCore::InspectorDOMDebuggerAgent::pauseOnNativeEventIfNeeded):
        (WebCore::InspectorDOMDebuggerAgent::willSendXMLHttpRequest):
        * inspector/InspectorDebuggerAgent.cpp:
        (WebCore::InspectorDebuggerAgent::setBreakpointByUrl):
        (WebCore::InspectorDebuggerAgent::setBreakpoint):
        (WebCore::InspectorDebuggerAgent::searchInContent):
        (WebCore::InspectorDebuggerAgent::setScriptSource):
        (WebCore::InspectorDebuggerAgent::getFunctionDetails):
        (WebCore::InspectorDebuggerAgent::schedulePauseOnNextStatement):
        (WebCore::InspectorDebuggerAgent::evaluateOnCallFrame):
        (WebCore::InspectorDebuggerAgent::didPause):
        (WebCore::InspectorDebuggerAgent::breakProgram):
        (WebCore::InspectorDebuggerAgent::clearBreakDetails):
        * inspector/InspectorDebuggerAgent.h:
        (InspectorDebuggerAgent):
        * inspector/InspectorPageAgent.cpp:
        (WebCore::buildObjectForCookie):
        (WebCore::buildArrayForCookies):
        (WebCore::InspectorPageAgent::getCookies):
        (WebCore::InspectorPageAgent::getResourceTree):
        (WebCore::InspectorPageAgent::searchInResource):
        (WebCore::InspectorPageAgent::searchInResources):
        (WebCore::InspectorPageAgent::buildObjectForFrame):
        (WebCore::InspectorPageAgent::buildObjectForFrameTree):
        * inspector/InspectorPageAgent.h:
        * inspector/InspectorRuntimeAgent.cpp:
        (WebCore::InspectorRuntimeAgent::evaluate):
        (WebCore::InspectorRuntimeAgent::callFunctionOn):

2012-03-16  Kentaro Hara  <haraken@chromium.org>

        The IDL parser should support sequence<T> type
        https://bugs.webkit.org/show_bug.cgi?id=81345

        Reviewed by Adam Barth.

        This patch makes the IDL parser support sequence<T> type.
        This patch just makes sequence<T> parseable, and the generated code
        for sequence<T> is wrong. This issue will be soon fixed in bug 80696.
        This is a preparing patch for bug 80696.

        Test: bindings/scripts/test/TestObj.idl

        * bindings/scripts/test/TestObj.idl: Added tests for sequence<T>.

        * bindings/scripts/IDLStructure.pm: Updated the regular expressions to support sequence<T>.

        * bindings/scripts/test/CPP/WebDOMTestObj.cpp: Updated run-bindings-tests results.
        (WebDOMTestObj::sequenceAttr):
        (WebDOMTestObj::setSequenceAttr):
        (WebDOMTestObj::methodWithSequenceArg):
        (WebDOMTestObj::methodReturningSequence):
        * bindings/scripts/test/CPP/WebDOMTestObj.h:
        * bindings/scripts/test/GObject/WebKitDOMTestObj.cpp:
        (webkit_dom_test_obj_method_with_sequence_arg):
        (webkit_dom_test_obj_method_returning_sequence):
        (webkit_dom_test_obj_get_sequence_attr):
        (webkit_dom_test_obj_set_sequence_attr):
        (webkit_dom_test_obj_get_property):
        (webkit_dom_test_obj_class_init):
        * bindings/scripts/test/GObject/WebKitDOMTestObj.h:
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore):
        (WebCore::jsTestObjSequenceAttr):
        (WebCore::setJSTestObjSequenceAttr):
        (WebCore::jsTestObjPrototypeFunctionMethodWithSequenceArg):
        (WebCore::jsTestObjPrototypeFunctionMethodReturningSequence):
        * bindings/scripts/test/JS/JSTestObj.h:
        (WebCore):
        * bindings/scripts/test/ObjC/DOMTestObj.h:
        * bindings/scripts/test/ObjC/DOMTestObj.mm:
        (-[DOMTestObj sequenceAttr]):
        (-[DOMTestObj setSequenceAttr:]):
        (-[DOMTestObj methodWithSequenceArg:]):
        (-[DOMTestObj methodReturningSequence:]):
        * bindings/scripts/test/V8/V8TestObj.cpp:
        (WebCore::TestObjInternal::sequenceAttrAttrGetter):
        (TestObjInternal):
        (WebCore::TestObjInternal::sequenceAttrAttrSetter):
        (WebCore::TestObjInternal::methodWithSequenceArgCallback):
        (WebCore::TestObjInternal::methodReturningSequenceCallback):
        (WebCore):
        (WebCore::ConfigureV8TestObjTemplate):

2012-03-16  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: HeapSnapshot: merge two long operations into one.
        https://bugs.webkit.org/show_bug.cgi?id=81347

        Reviewed by Yury Semikhatsky.

        * inspector/front-end/HeapSnapshot.js:
        (WebInspector.HeapSnapshot.prototype.aggregates):
        (WebInspector.HeapSnapshot.prototype._buildAggregates):
        (WebInspector.HeapSnapshot.prototype._buildAggregates.forDominatedNodes):

2012-03-16  Gavin Peters  <gavinp@chromium.org>

        Add asserts and improve logging in PageCache.
        https://bugs.webkit.org/show_bug.cgi?id=81179

        Reviewed by Brady Eidson.

        The early exits from logCanCacheFrameDecision had the potential to skew histogram data.  Moving
        the DocumentLoader check to the top, but eliminating the early exits is a compromise that keeps
        the logged data mostly accurate.

        * history/PageCache.cpp:
        (WebCore::logCanCacheFrameDecision):

2012-03-16  Yoshifumi Inoue  <yosin@chromium.org>

        [Forms] label.form attribute doesn't work
        https://bugs.webkit.org/show_bug.cgi?id=80499

        Reviewed by Kent Tamura.

        This patch changes implementation of label.form of IDL attribute to
        compute it to the form element specified by the "form" HTML attribute
        or form ancestor when the "form" HTML attribute isn't in HTML.

        This patch introduces new function FormAssociatedElement::findAssociatedForm
        for sharing code among FormAssociateElement::insertedIntoTree, resetFormOwner
        and HTMLLabelElement::form.

        No new tests. Update existing tests.

        * html/FormAssociatedElement.cpp:
        (WebCore::FormAssociatedElement::findAssociatedForm): Added.
        (WebCore):
        (WebCore::FormAssociatedElement::insertedIntoTree):
        (WebCore::FormAssociatedElement::resetFormOwner):
        * html/FormAssociatedElement.h:
        (FormAssociatedElement):
        * html/HTMLLabelElement.cpp: Remove unused include files
        (WebCore::HTMLLabelElement::form): Added.

2012-03-16  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Use the normalize method of FloatPoint instead of normalizing manually
        https://bugs.webkit.org/show_bug.cgi?id=81343

        Reviewed by Simon Hausmann.

        * platform/graphics/TiledBackingStore.cpp:
        (WebCore::TiledBackingStore::coverWithTilesIfNeeded):
        (WebCore::TiledBackingStore::computeCoverAndKeepRect):

2012-03-16  Kentaro Hara  <haraken@chromium.org>

        Move Notifications APIs from DOMWindow.idl to DOMWindowNotifications.idl
        https://bugs.webkit.org/show_bug.cgi?id=79636

        Reviewed by Adam Barth.

        For WebKit modularization, this patch moves Notifications-related APIs
        from DOMWindow.idl to DOMWindowNotifications.idl.

        Tests: fast/notifications/* (No change in test results)

        * CMakeLists.txt: Added DOMWindowNotifications.{h,cpp,idl}.
        * DerivedSources.make: Ditto.
        * DerivedSources.pri: Ditto.
        * GNUmakefile.list.am: Ditto.
        * Target.pri: Ditto.
        * WebCore.gypi: Ditto.
        * WebCore.vcproj/WebCore.vcproj: Ditto.

        * WebCore.exp.in: Added mangled signatures of webkitNotifications().

        * notifications/DOMWindowNotifications.cpp: Added.
        (WebCore):
        (WebCore::DOMWindowNotifications::DOMWindowNotifications):
        (WebCore::DOMWindowNotifications::~DOMWindowNotifications):
        (WebCore::DOMWindowNotifications::from):
        (WebCore::DOMWindowNotifications::webkitNotifications):
        (WebCore::DOMWindowNotifications::ensureWebkitNotifications):
        (WebCore::DOMWindowNotifications::disconnectFrame):
        * notifications/DOMWindowNotifications.h: Added.
        (WebCore):
        (DOMWindowNotifications):
        * notifications/DOMWindowNotifications.idl: Added.

        * page/DOMWindow.cpp: Removed ENABLE(NOTIFICATIONS).
        (WebCore::DOMWindow::~DOMWindow):
        (WebCore::DOMWindow::willDetachPage):
        (WebCore::DOMWindow::clear):
        * page/DOMWindow.h: Ditto.
        (WebCore):
        (DOMWindow):
        * page/DOMWindow.idl: Ditto.
        * page/Frame.cpp: Ditto.
        (WebCore::Frame::willDetachPage):
        (WebCore::Frame::transferChildFrameToNewDocument):

2012-03-16  Kentaro Hara  <haraken@chromium.org>

        [Performance] Optimize innerHTML and outerHTML
        https://bugs.webkit.org/show_bug.cgi?id=81214

        Reviewed by Adam Barth.

        This patch makes innerHTML and outerHTML 2.4 times faster.

        Performance test: https://bugs.webkit.org/attachment.cgi?id=132034
        The performance test measures body.innerHTML for 3000 lines of HTML,
        which is copied from the HTML spec.

        - Chromium/Mac without the patch
        div.innerHTML: 1658.6 ms
        div.outerHTML: 4859.6 ms
        body.innerHTML: 640.2 ms
        body.outerHTML: 641.8 ms

        - Chromium/Mac with the patch
        div.innerHTML:  751.0 ms
        div.outerHTML: 2096.0 ms
        body.innerHTML: 271.2 ms
        body.outerHTML: 271.2 ms

        - Chromium/Linux without the patch
        div.innerHTML:  950.4 ms
        div.outerHTML: 2257.8 ms
        body.innerHTML: 452.8 ms
        body.outerHTML: 457.6 ms

        - Chromium/Linux with the patch
        div.innerHTML:  582.4 ms
        div.outerHTML: 1283.0 ms
        body.innerHTML: 233.0 ms
        body.outerHTML: 233.4 ms

        - AppleWebKit/Mac without the patch
        div.innerHTML:  900.6 ms
        div.outerHTML: 2245.2 ms
        body.innerHTML: 462.6 ms
        body.outerHTML: 468.0 ms

        - AppleWebKit/Mac with the patch
        div.innerHTML:  529.8  ms
        div.outerHTML: 1090.2 ms
        body.innerHTML: 239.2 ms
        body.outerHTML: 239.2 ms

        This patch applies the following two optimizations:

        (a) Remove redundant copies between Vector<String> and StringBuilders
        in MarkupAccumulator::serializeNodes(), MarkupAccumulator::appendStartTag(),
        and MarkupAccumulator::appendEndTag().

            (Previous behavior)
            - Create a StringBuilder for each tag.
            - Append a created string in each StringBuilder to Vector<String>,
              parsing the DOM tree.
            - After the parsing, allocate a StringBuilder whose size is the sum
              of all Strings in Vector<String>.
            - Append all Strings in Vector<String> to the StringBuilder.
            (New behavior)
            - Allocate a StringBuilder with a default buffer size.
            - Append created strings to the StringBuilder, incrementally parsing
              the DOM tree.

        (b) Optimize stringBuilder.append().
            (b-1) Replace stringBuilder.append("A") with stringBuilder.append('A').
                  stringBuilder.append("A") requires to cast the characters to LChar*,
                  and then call strlen("A"). stringBuilder.append('A') is faster.
            (b-2) Replace stringBuilder.append("AB") with stringBuilder.append('A')
                  and stringBuilder.append('B'). In my experiment, appending characters
                  one by one is faster than appending the characters at a breath if the
                  number of characters is less than 3.
            (b-3) Hard-code a string length; i.e. replace stringBuilder.append("ABCDE")
                  with stringBuilder.append("ABCDE", 5). While the former requires to call
                  strlen("ABCDE"), the latter does not.

        (a) improves performance by 170% ~ 200%. (b) improves performance by 30 ~ 40%.

        Tests: fast/dom/Range/range-extract-contents.html
               fast/dom/serialize-nodes.xhtml
               fast/dom/XMLSerializer.html
               and all other tests that use innerHTML or outerHTML.
               No change in the test results.

        * editing/MarkupAccumulator.cpp:
        (WebCore::MarkupAccumulator::serializeNodes):
        (WebCore::MarkupAccumulator::appendString):
        (WebCore::MarkupAccumulator::appendStartTag):
        (WebCore::MarkupAccumulator::appendEndTag):
        (WebCore::MarkupAccumulator::concatenateMarkup):
        (WebCore::MarkupAccumulator::appendQuotedURLAttributeValue):
        (WebCore::MarkupAccumulator::appendComment):
        (WebCore::MarkupAccumulator::appendDocumentType):
        (WebCore::MarkupAccumulator::appendProcessingInstruction):
        (WebCore::MarkupAccumulator::appendOpenTag):
        (WebCore::MarkupAccumulator::appendAttribute):
        (WebCore::MarkupAccumulator::appendCDATASection):
        * editing/MarkupAccumulator.h:
        (MarkupAccumulator):

2012-03-16  Kihong Kwon  <kihong.kwon@samsung.com>

        Support for Battery Status API
        https://bugs.webkit.org/show_bug.cgi?id=62698

        Battery Status API is implemented under the Navigator class.
        Battery Status API has four types of events, and all events are operated based on a callback mechanism.
         : onchargingchange, onchargingtimechange, ondischargingtimechange, onlevelchange.
        The battery status can be accessed using BatteryManager(navigator.webkitBattery), and battery status is controlled by BatteryController which manages instances of BatteryManager.
        When battery status event is raised, BatteryController calls all registered BatteryManager's event dispatcher.
        http://www.w3.org/TR/battery-status/

        Reviewed by Adam Barth.

        Tests: batterystatus/add-listener-from-callback.html
               batterystatus/basic-all-types-of-events.html
               batterystatus/basic-operation.html
               batterystatus/event-after-navigation.html
               batterystatus/multiple-frames.html
               batterystatus/updates.html
               batterystatus/window-property.html

        * CMakeLists.txt:
        * Modules/battery/BatteryClient.h: Added.
        (WebCore):
        (BatteryClient):
        (WebCore::BatteryClient::~BatteryClient):
        * Modules/battery/BatteryController.cpp: Added.
        (WebCore):
        (WebCore::BatteryController::BatteryController):
        (WebCore::BatteryController::~BatteryController):
        (WebCore::BatteryController::create):
        (WebCore::BatteryController::addListener):
        (WebCore::BatteryController::removeListener):
        (WebCore::BatteryController::didChangeBatteryStatus):
        (WebCore::BatteryController::supplementName):
        (WebCore::BatteryController::isActive):
        (WebCore::provideBatteryTo):
        * Modules/battery/BatteryController.h: Added.
        (WebCore):
        (BatteryController):
        (WebCore::BatteryController::client):
        (WebCore::BatteryController::from):
        * Modules/battery/BatteryManager.cpp: Added.
        (WebCore):
        (WebCore::BatteryManager::create):
        (WebCore::BatteryManager::~BatteryManager):
        (WebCore::BatteryManager::BatteryManager):
        (WebCore::BatteryManager::charging):
        (WebCore::BatteryManager::chargingTime):
        (WebCore::BatteryManager::dischargingTime):
        (WebCore::BatteryManager::level):
        (WebCore::BatteryManager::didChangeBatteryStatus):
        (WebCore::BatteryManager::suspend):
        (WebCore::BatteryManager::resume):
        (WebCore::BatteryManager::stop):
        * Modules/battery/BatteryManager.h: Added.
        (WebCore):
        (BatteryManager):
        (WebCore::BatteryManager::interfaceName):
        (WebCore::BatteryManager::scriptExecutionContext):
        (WebCore::BatteryManager::batteryControllerDestroyed):
        (WebCore::BatteryManager::canSuspend):
        (WebCore::BatteryManager::eventTargetData):
        (WebCore::BatteryManager::ensureEventTargetData):
        (WebCore::BatteryManager::refEventTarget):
        (WebCore::BatteryManager::derefEventTarget):
        * Modules/battery/BatteryManager.idl: Added.
        * Modules/battery/BatteryStatus.cpp: Added.
        (WebCore):
        (WebCore::BatteryStatus::create):
        (WebCore::BatteryStatus::BatteryStatus):
        * Modules/battery/BatteryStatus.h: Added.
        (WebCore):
        (BatteryStatus):
        (WebCore::BatteryStatus::charging):
        (WebCore::BatteryStatus::chargingTime):
        (WebCore::BatteryStatus::dischargingTime):
        (WebCore::BatteryStatus::level):
        * Modules/battery/NavigatorBattery.cpp: Added.
        (WebCore):
        (WebCore::NavigatorBattery::NavigatorBattery):
        (WebCore::NavigatorBattery::~NavigatorBattery):
        (WebCore::NavigatorBattery::webkitBattery):
        (WebCore::NavigatorBattery::from):
        (WebCore::NavigatorBattery::batteryManager):
        * Modules/battery/NavigatorBattery.h: Added.
        (WebCore):
        (NavigatorBattery):
        * Modules/battery/NavigatorBattery.idl: Added.
        * dom/EventNames.h:
        (WebCore):
        * dom/EventTargetFactory.in:
        * testing/Internals.cpp:
        (WebCore::Internals::setBatteryStatus):
        (WebCore):
        * testing/Internals.h:
        (Internals):
        * testing/Internals.idl:

2012-03-16  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: HeapSnapshot: speedup buildReverseIndex.
        https://bugs.webkit.org/show_bug.cgi?id=81327

        Reviewed by Yury Semikhatsky.

        * inspector/front-end/HeapSnapshot.js:
        (WebInspector.HeapSnapshot.prototype.get maxNodeId):
        (WebInspector.HeapSnapshot.prototype._buildNodeIndex):
        (WebInspector.HeapSnapshot.prototype._findNearestNodeIndex):
        (WebInspector.HeapSnapshot.prototype._getRetainerIndex):
        (WebInspector.HeapSnapshot.prototype._buildDominatedNodes):
        (WebInspector.HeapSnapshot.prototype):

2012-03-16  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r110976.
        http://trac.webkit.org/changeset/110976
        https://bugs.webkit.org/show_bug.cgi?id=81330

        webkit_unit_tests crashes. (Requested by morrita on #webkit).

        * loader/cache/CachedCSSStyleSheet.cpp:
        (WebCore::CachedCSSStyleSheet::error):
        (WebCore):
        * loader/cache/CachedCSSStyleSheet.h:
        (CachedCSSStyleSheet):
        * loader/cache/CachedFont.cpp:
        (WebCore):
        (WebCore::CachedFont::error):
        * loader/cache/CachedFont.h:
        (CachedFont):
        * loader/cache/CachedImage.cpp:
        (WebCore::CachedImage::error):
        * loader/cache/CachedResource.h:
        (CachedResource):
        * loader/cache/CachedScript.cpp:
        (WebCore::CachedScript::error):
        (WebCore):
        * loader/cache/CachedScript.h:
        (CachedScript):
        * loader/cache/CachedXSLStyleSheet.cpp:
        (WebCore::CachedXSLStyleSheet::error):
        (WebCore):
        * loader/cache/CachedXSLStyleSheet.h:
        (CachedXSLStyleSheet):

2012-03-16  Luke Macpherson   <macpherson@chromium.org>

        Implement cast between CSSPrimitiveValue and LineClampValue.
        https://bugs.webkit.org/show_bug.cgi?id=76806

        Reviewed by Andreas Kling.

        Covered by many existing LayoutTests.

        This simplifies code in CSSStyleSelector and future mapping to CSSStyleApplyProperty.

        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        (WebCore::CSSPrimitiveValue::operator LineClampValue):
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):

2012-03-16  Nat Duca  <nduca@chromium.org>

        [chromium] Bump textureUpdatesPerFrame to 32 to favor updating the screen over jank prevention
        https://bugs.webkit.org/show_bug.cgi?id=81298

        Reviewed by James Robinson.

        * platform/graphics/chromium/cc/CCThreadProxy.cpp:
        (WTF):

2012-03-16  Levi Weintraub  <leviw@chromium.org>

        Update usage of LayoutUnits in RenderBlock*
        https://bugs.webkit.org/show_bug.cgi?id=80437

        Reviewed by Julien Chaffraix.

        Updating LayoutUnit usage in RenderBlock and RenderBlockLineLayout. This better readies trunk for
        the transition to subpixel layout.

        See https://trac.webkit.org/wiki/LayoutUnit for more details.

        No new tests. No changed behavior.

        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::paint): Adding the paint offset rounding previously in RenderBlock::paint.
        * rendering/LayoutTypes.h:
        (WebCore::floorToInt): Will floor a LayoutUnit to an integer once we switch to
        FractionalLayoutUnits.
        (WebCore::boundedMultiply): Method that will return the multiplied result of two LayoutUnits
        or the max/min LayoutUnit if the result overflows. Only does a regular multiply while
        LayoutUnits are integers instead of FractionalLayoutUnits.
        (WebCore):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::paintContents): Rounding the paintOffset here didn't work for all
        inline blocks. This rounding is actually only needed for InlineTextBoxes, so the logic has
        been moved there.
        (WebCore::RenderBlock::newLine): Use a LayoutUnit for the y position.
        (WebCore::RenderBlock::isPointInOverflowControl): Points for hit testing need to be rounded.
        (WebCore::RenderBlock::layoutColumns): Using boundedMultiply for a calculation prone to overflow.
        (WebCore::updatePreferredWidth): Reverting back to using ceilf. ceiledLayoutUnit was to be ultimately
        converted to just a straight LayoutUnit constructor to preserve precision. This precision doesn't work
        for us here as we still paint Boxes/Blocks on pixel boundaries, so we need to expand to a pixel size
        that encloses the contained text.
        (WebCore::RenderBlock::setPageLogicalOffset): LogicalOffset should be a LayoutUnit.
        (WebCore::RenderBlock::marginValuesForChild): Margins should have subpixel resolution.
        (WebCore::RenderBlock::FloatingObjects::intervalForFloatingObject): Intervals for floating objects
        need to use pixel snapped values to give the proper results.
        * rendering/RenderBlock.h:
        (WebCore::RenderBlock::pixelSnappedLogicalLeftOffsetForLine): Only moved.
        (WebCore::RenderBlock::pixelSnappedLogicalRightOffsetForLine): While we can round the left offset,
        columns add an extra offset at paint that can't currently be planned for at line-layout time. To
        avoid laying out lines that run off the end of columns, we floor the right offset. The resulting
        lines will be up to 1 pixel shorter than they potentially could be.
        (RenderBlock):
        (WebCore::RenderBlock::FloatingObject::pixelSnappedX): Using corresponding pixelSnappedX value from
        LayoutRects.
        (WebCore::RenderBlock::FloatingObject::pixelSnappedMaxX): Ditto.
        (WebCore::RenderBlock::FloatingObject::pixelSnappedY): Ditto.
        (WebCore::RenderBlock::FloatingObject::pixelSnappedMaxY): Ditto.
        (WebCore::RenderBlock::FloatingObject::pixelSnappedWidth): Ditto.
        (WebCore::RenderBlock::FloatingObject::pixelSnappedHeight): Ditto.
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::LineWidth::shrinkAvailableWidthForNewFloatIfNeeded): LogicalHeight is a LayoutUnit. Also
        flooring textIndentOffset to an integer to match old behavior.
        (WebCore::LineWidth::fitBelowFloats): Using LayoutUnits for float logical top and bottoms.
        (WebCore::LineLayoutState::endLineLogicalTop): Changing to a LayoutUnit.
        (WebCore::LineLayoutState::setEndLineLogicalTop): Ditto.
        (LineLayoutState): Ditto.
        (WebCore::RenderBlock::linkToEndLineIfNeeded): Calculating overflow with LayoutUnits.
        (WebCore::RenderBlock::layoutInlineChildren): LowestAllowedPosition should be subpixel.
        (WebCore::RenderBlock::checkLinesForTextOverflow): Reverting ellipsis width calculation to integers
        as this value can be seen as representing pixels on screen.

2012-03-15  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Follow up to: window.innerWidth/Height should not include page scale
        https://bugs.webkit.org/show_bug.cgi?id=76555

        Reviewed by Simon Hausmann.

        Introduce mapping methods for converting between CSS and layout units.

        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::innerHeight):
        (WebCore::DOMWindow::innerWidth):
        (WebCore::DOMWindow::scrollX):
        (WebCore::DOMWindow::scrollY):
        (WebCore::DOMWindow::scrollTo):
        * page/FrameView.h:
        (FrameView):
        (WebCore::FrameView::mapFromLayoutToCSSUnits):
        (WebCore):
        (WebCore::FrameView::mapFromCSSToLayoutUnits):

2012-03-16  Ian Vollick  <vollick@chromium.org>

        [chromium] Threaded opacity animation jump to opacity of 0
        https://bugs.webkit.org/show_bug.cgi?id=80744

        Reviewed by James Robinson.

        Tested in CCLayerTreeHostTestDoNotSkipLayersWithAnimatedOpacity

        * platform/graphics/chromium/LayerChromium.cpp:
        (WebCore::LayerChromium::LayerChromium):
        (WebCore::LayerChromium::opacityIsAnimating):
        (WebCore):
        (WebCore::LayerChromium::transformIsAnimating):
        * platform/graphics/chromium/LayerChromium.h:
        (LayerChromium):
        (WebCore::LayerChromium::drawOpacityIsAnimating):
        (WebCore::LayerChromium::setDrawOpacityIsAnimating):
        * platform/graphics/chromium/RenderSurfaceChromium.cpp:
        (WebCore::RenderSurfaceChromium::RenderSurfaceChromium):
        * platform/graphics/chromium/RenderSurfaceChromium.h:
        (WebCore::RenderSurfaceChromium::drawOpacityIsAnimating):
        (WebCore::RenderSurfaceChromium::setDrawOpacityIsAnimating):
        (RenderSurfaceChromium):
        * platform/graphics/chromium/cc/CCLayerAnimationController.cpp:
        (WebCore::CCLayerAnimationController::isAnimatingProperty):
        (WebCore):
        * platform/graphics/chromium/cc/CCLayerAnimationController.h:
        (CCLayerAnimationController):
        * platform/graphics/chromium/cc/CCLayerAnimationControllerImpl.cpp:
        (WebCore::CCLayerAnimationControllerImpl::isAnimatingProperty):
        (WebCore):
        * platform/graphics/chromium/cc/CCLayerAnimationControllerImpl.h:
        (CCLayerAnimationControllerImpl):
        * platform/graphics/chromium/cc/CCLayerImpl.cpp:
        (WebCore::CCLayerImpl::CCLayerImpl):
        (WebCore::CCLayerImpl::opacityIsAnimating):
        (WebCore):
        (WebCore::CCLayerImpl::transformIsAnimating):
        * platform/graphics/chromium/cc/CCLayerImpl.h:
        (CCLayerImpl):
        (WebCore::CCLayerImpl::drawOpacityIsAnimating):
        (WebCore::CCLayerImpl::setDrawOpacityIsAnimating):
        * platform/graphics/chromium/cc/CCLayerTreeHost.cpp:
        (WebCore::CCLayerTreeHost::paintLayerContents):
        (WebCore::CCLayerTreeHost::updateCompositorResources):
        * platform/graphics/chromium/cc/CCLayerTreeHostCommon.cpp:
        (WebCore::layerShouldBeSkipped):
        (WebCore::subtreeShouldBeSkipped):
        (WebCore):
        (WebCore::LayerChromium):
        (WebCore::calculateDrawTransformsAndVisibilityInternal):
        * platform/graphics/chromium/cc/CCRenderSurface.cpp:
        (WebCore::CCRenderSurface::CCRenderSurface):
        * platform/graphics/chromium/cc/CCRenderSurface.h:
        (WebCore::CCRenderSurface::drawOpacityIsAnimating):
        (WebCore::CCRenderSurface::setDrawOpacityIsAnimating):
        (CCRenderSurface):

2012-03-15  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        [TexMap] Reuse textures following the same rules as they do internally.
        https://bugs.webkit.org/show_bug.cgi?id=80843

        Reviewed by Noam Rosenthal.

        BitmapTextures were recently changed to be the same size as their contents.
        This would obsolete the logic in acquireTextureFromPool which would
        assume that a BitmapTexture has good chances of being reused if its
        size is bigger or equal to the new size.

        This asks the texture instead if it can be reused which now simply
        check for an exact size match.

        * platform/graphics/texmap/TextureMapper.cpp:
        (WebCore::TextureMapper::acquireTextureFromPool):
        * platform/graphics/texmap/TextureMapper.h:
        (WebCore::BitmapTexture::canReuseWith):
        (WebCore::BitmapTexture::reset):
        (WebCore::BitmapTexture::didReset):
        * platform/graphics/texmap/TextureMapperGL.cpp:
        (WebCore::BitmapTextureGL::canReuseWith):
        (WebCore):
        * platform/graphics/texmap/TextureMapperGL.h:
        (BitmapTextureGL):

2012-03-16  Robert Kroeger  <rjkroege@chromium.org>

        Connect up fling event delivery to gesture curve animation framework
        https://bugs.webkit.org/show_bug.cgi?id=80858

        Reviewed by Adam Barth.

        * platform/ScrollAnimatorNone.cpp:
        (WebCore::ScrollAnimatorNone::fireUpAnAnimation):

2012-03-16  Nate Chapin  <japhet@chromium.org>

        Remove duplicate error() impls in CachedResource subclasses
        https://bugs.webkit.org/show_bug.cgi?id=81161

        Reviewed by Alexey Proskuryakov.

        No new tests, refactor only.

        * loader/cache/CachedCSSStyleSheet.cpp:
        * loader/cache/CachedCSSStyleSheet.h:
        * loader/cache/CachedFont.cpp:
        * loader/cache/CachedFont.h:
        * loader/cache/CachedImage.cpp:
        * loader/cache/CachedResource.h: Make checkNotify()
             virtual, so the right checkNotify() gets called in error().
        * loader/cache/CachedScript.cpp:
        * loader/cache/CachedScript.h:
        * loader/cache/CachedXSLStyleSheet.cpp:
        * loader/cache/CachedXSLStyleSheet.h:

2012-03-16  Dana Jansens  <danakj@chromium.org>

        [chromium] Changes to overdraw metrics to allow upload tracking
        https://bugs.webkit.org/show_bug.cgi?id=81222

        Reviewed by Adrienne Walker.

        Stick CCOverdrawMetrics into CCOcclusionTracker, so that it is available
        everywhere that culling/drawing/painting is going on. Then we can stop
        plumbing a metrics object through CCQuadCuller.

        Rename the CCOverdrawMetrics "painting" stuff to "uploading" as this will
        measure texture uploads rather than pixels painted in main memory.

        Covered by existing tests.

        * platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:
        (WebCore::CCLayerTreeHostImpl::calculateRenderPasses):
        * platform/graphics/chromium/cc/CCOcclusionTracker.cpp:
        (WebCore::::CCOcclusionTrackerBase):
        * platform/graphics/chromium/cc/CCOcclusionTracker.h:
        (CCOcclusionTrackerBase):
        (WebCore::CCOcclusionTrackerBase::overdrawMetrics):
        * platform/graphics/chromium/cc/CCOverdrawMetrics.cpp:
        (WebCore::CCOverdrawMetrics::didCull):
        (WebCore):
        (WebCore::CCOverdrawMetrics::didDraw):
        (WebCore::CCOverdrawMetrics::recordMetrics):
        (WebCore::CCOverdrawMetrics::recordMetricsInternal):
        * platform/graphics/chromium/cc/CCOverdrawMetrics.h:
        (WebCore):
        (WebCore::CCOverdrawMetrics::create):
        (CCOverdrawMetrics):
        * platform/graphics/chromium/cc/CCQuadCuller.cpp:
        (WebCore::CCQuadCuller::CCQuadCuller):
        (WebCore::CCQuadCuller::append):
        * platform/graphics/chromium/cc/CCQuadCuller.h:
        (CCQuadCuller):
        * platform/graphics/chromium/cc/CCRenderPass.cpp:
        (WebCore::CCRenderPass::appendQuadsForLayer):
        * platform/graphics/chromium/cc/CCRenderPass.h:
        (WebCore):
        (CCRenderPass):

2012-03-16  Greg Billock  <gbillock@google.com>

        Add TransferList IDL modifier, with support in V8 code gen.
        https://bugs.webkit.org/show_bug.cgi?id=81127

        Reviewed by Adam Barth.

        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateFunctionCallback):
        (GetIndexOf):
        (GenerateParametersCheck):
        (GenerateConstructorCallback):
        (GenerateNamedConstructorCallback):
        (GenerateFunctionCallString):
        * bindings/scripts/IDLAttributes.txt:
        * bindings/scripts/test/CPP/WebDOMTestSerializedScriptValueInterface.cpp:
        (WebDOMTestSerializedScriptValueInterface::acceptTransferList):
        * bindings/scripts/test/CPP/WebDOMTestSerializedScriptValueInterface.h:
        (WebDOMTestSerializedScriptValueInterface):
        * bindings/scripts/test/GObject/WebKitDOMTestSerializedScriptValueInterface.cpp:
        (webkit_dom_test_serialized_script_value_interface_accept_transfer_list):
        * bindings/scripts/test/GObject/WebKitDOMTestSerializedScriptValueInterface.h:
        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp:
        (WebCore::JSTestSerializedScriptValueInterfaceConstructor::finishCreation):
        (WebCore::JSTestSerializedScriptValueInterfaceConstructor::constructJSTestSerializedScriptValueInterface):
        (WebCore):
        (WebCore::JSTestSerializedScriptValueInterfacePrototype::getOwnPropertySlot):
        (WebCore::JSTestSerializedScriptValueInterfacePrototype::getOwnPropertyDescriptor):
        (WebCore::jsTestSerializedScriptValueInterfacePrototypeFunctionAcceptTransferList):
        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.h:
        (JSTestSerializedScriptValueInterfacePrototype):
        (WebCore):
        * bindings/scripts/test/ObjC/DOMTestSerializedScriptValueInterface.h:
        * bindings/scripts/test/ObjC/DOMTestSerializedScriptValueInterface.mm:
        (-[DOMTestSerializedScriptValueInterface acceptTransferList:transferList:]):
        * bindings/scripts/test/TestSerializedScriptValueInterface.idl:
        * bindings/scripts/test/V8/V8TestSerializedScriptValueInterface.cpp:
        (WebCore::TestSerializedScriptValueInterfaceInternal::acceptTransferListCallback):
        (TestSerializedScriptValueInterfaceInternal):
        (WebCore):
        (WebCore::V8TestSerializedScriptValueInterface::constructorCallback):
        (WebCore::ConfigureV8TestSerializedScriptValueInterfaceTemplate):

2012-03-16  Dana Jansens  <danakj@chromium.org>

        [chromium] Quads that become fully opaque after culling should not use blending
        https://bugs.webkit.org/show_bug.cgi?id=81235

        Reviewed by Adrienne Walker.

        Unit test: CCLayerTreeHostImplTest.blendingOffWhenDrawingOpaqueLayers

        * platform/graphics/chromium/cc/CCDrawQuad.h:
        (WebCore::CCDrawQuad::needsBlending):

2012-03-16  Xiaomei Ji  <xji@chromium.org>

        Using ICU break iterator to simplify visual word movement implementation.
        https://bugs.webkit.org/show_bug.cgi?id=78856

        Reviewed by Ryosuke Niwa.

        This patch relies on ICU word break iterator and cursor visual movement by character to get the word break
        position in visual order. It reduces the complexity of old implementation.

        Test: editing/selection/move-by-word-visually-wrong-left-right.html

        * editing/FrameSelection.cpp: Exclude WinCE from visual word movement since isWordTextBreak is not implemented.
        (WebCore::FrameSelection::modifyMovingRight):
        (WebCore::FrameSelection::modifyMovingLeft):
        * editing/visible_units.cpp:
        (WebCore):
        (WebCore::previousLeafWithSameEditability): Just moving to the top without functionality change.
        (WebCore::enclosingNodeWithNonInlineRenderer): ditto.
        (WebCore::nextLeafWithSameEditability): ditto.
        (WebCore::previousRootInlineBox): return previous RootInlineBox which is in different renderer.
        (WebCore::nextRootInlineBox): return next RootInlineBox which is in different renderer.
        (WebCore::boxIndexInVector):
        (WebCore::previousBoxInLine): returns logically previous box in one line.
        (WebCore::logicallyPreviousBox): returns logically previous box.
        (WebCore::nextBoxInLine): returns logically next box in one line.
        (WebCore::logicallyNextBox): returns logically next box.
        (WebCore::wordBreakIteratorForMinOffsetBoundary): create word break iterator for position that is a box's min offset.
        (WebCore::wordBreakIteratorForMaxOffsetBoundary): create word break iterator for position that is a box's max offset.
        (WebCore::isLogicalStartOfWord): return whether a position is logically start of word.
        (WebCore::islogicalEndOfWord): return whether a position is logically end of word.
        (WebCore::visualWordPosition): returns the visual left or right word position.
        (WebCore::leftWordPosition):
        (WebCore::rightWordPosition):
        * platform/text/TextBreakIterator.h: Add isWordTextBreak().
        (WebCore):
        * platform/text/TextBreakIteratorICU.cpp:
        (WebCore::isWordTextBreak):
        (WebCore):
        * platform/text/gtk/TextBreakIteratorGtk.cpp:
        (WebCore::isWordTextBreak):
        (WebCore):
        * platform/text/qt/TextBreakIteratorQt.cpp:
        (WebCore::isWordTextBreak):
        (WebCore):
        * platform/text/wince/TextBreakIteratorWinCE.cpp:
        (WebCore::isWordTextBreak):
        (WebCore):

2012-03-16  Dana Jansens  <danakj@chromium.org>

        [chromium] Don't create a quad for video layers without a frame (avoid use of uninitialized m_format)
        https://bugs.webkit.org/show_bug.cgi?id=81250

        Reviewed by James Robinson.

        * platform/graphics/chromium/cc/CCVideoLayerImpl.cpp:
        (WebCore::CCVideoLayerImpl::appendQuads):

2012-03-16  Hajime Morrita  <morrita@chromium.org>

        Unreviewed attempt to fix Chromium windows build.

        * Modules/speech/SpeechRecognition.h:
        (SpeechRecognition):

2012-03-16  Mark Pilgrim  <pilgrim@chromium.org>

        Move DOMWindowFileSystem to Modules/filesystem/
        https://bugs.webkit.org/show_bug.cgi?id=81030

        Reviewed by Adam Barth.

        No new tests, all existing tests pass.

        * CMakeLists.txt:
        * DerivedSources.make:
        * DerivedSources.pri:
        * GNUmakefile.am:
        * GNUmakefile.list.am:
        * Modules/filesystem/DOMWindowFileSystem.cpp: Copied from Source/WebCore/fileapi/DOMWindowFileSystem.cpp.
        * Modules/filesystem/DOMWindowFileSystem.h: Copied from Source/WebCore/fileapi/DOMWindowFileSystem.h.
        * Modules/filesystem/DOMWindowFileSystem.idl: Copied from Source/WebCore/fileapi/DOMWindowFileSystem.idl.
        * Target.pri:
        * WebCore.gyp/WebCore.gyp:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.vcproj/WebCoreCommon.vsprops:
        * WebCore.vcproj/copyForwardingHeaders.cmd:
        * fileapi/DOMWindowFileSystem.cpp: Removed.
        * fileapi/DOMWindowFileSystem.h: Removed.
        * fileapi/DOMWindowFileSystem.idl: Removed.

2012-03-16  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r110951.
        http://trac.webkit.org/changeset/110951
        https://bugs.webkit.org/show_bug.cgi?id=81316

        Does not build on apple-mac (Requested by abarth on #webkit).

        * platform/audio/DynamicsCompressor.h:
        (DynamicsCompressor):
        * webaudio/DynamicsCompressorNode.cpp:
        (WebCore::DynamicsCompressorNode::DynamicsCompressorNode):
        (WebCore::DynamicsCompressorNode::process):
        * webaudio/DynamicsCompressorNode.h:
        (DynamicsCompressorNode):
        * webaudio/DynamicsCompressorNode.idl:

2012-03-16  Seo Sanghyeon  <sh4.seo@samsung.com>

        Cleanup empty attribute list in IDLs
        https://bugs.webkit.org/show_bug.cgi?id=81228

        Reviewed by Adam Barth.

        No tests. No change in behavior.

        * css/WebKitCSSRegionRule.idl:

2012-03-16  Pratik Solanki  <psolanki@apple.com>

        onorientationchange event should have JSWindowEventListener attribute
        https://bugs.webkit.org/show_bug.cgi?id=79513

        Reviewed by Kentaro Hara.

        * html/HTMLFrameSetElement.idl:

2012-03-15  Gao Chun  <chun.gao@intel.com>

        Expose attack, release as DynamicsCompressorNode's attributes.
        https://bugs.webkit.org/show_bug.cgi?id=81221

        Reviewed by Chris Rogers.

        Test: webaudio/dynamicscompressor-basic.html

        * platform/audio/DynamicsCompressor.h:
        (DynamicsCompressor):
        * webaudio/DynamicsCompressorNode.cpp:
        (WebCore::DynamicsCompressorNode::DynamicsCompressorNode):
        (WebCore::DynamicsCompressorNode::process):
        * webaudio/DynamicsCompressorNode.h:
        (WebCore::DynamicsCompressorNode::attack):
        (WebCore::DynamicsCompressorNode::release):
        (DynamicsCompressorNode):
        * webaudio/DynamicsCompressorNode.idl:

2012-03-15  Hans Wennborg  <hans@chromium.org>

        Speech JavaScript API: SpeechRecognition, Controller and Client
        https://bugs.webkit.org/show_bug.cgi?id=81096

        Reviewed by Adam Barth.

        Add implementation stub for SpeechRecognition. Add the
        SpeechRecognitionController class and SpeechRecognitionClient
        interface.

        Test: fast/speech/scripted/basics.html

        * Modules/speech/DOMWindowSpeech.idl:
        * Modules/speech/SpeechRecognition.cpp: Added.
        (WebCore):
        (WebCore::SpeechRecognition::create):
        (WebCore::SpeechRecognition::start):
        (WebCore::SpeechRecognition::stopFunction):
        (WebCore::SpeechRecognition::abort):
        (WebCore::SpeechRecognition::audioStartCallback):
        (WebCore::SpeechRecognition::soundStartCallback):
        (WebCore::SpeechRecognition::speechStartCallback):
        (WebCore::SpeechRecognition::speechEndCallback):
        (WebCore::SpeechRecognition::audioEndCallback):
        (WebCore::SpeechRecognition::resultCallback):
        (WebCore::SpeechRecognition::noMatchCallback):
        (WebCore::SpeechRecognition::resultDeletedCallback):
        (WebCore::SpeechRecognition::errorCallback):
        (WebCore::SpeechRecognition::startCallback):
        (WebCore::SpeechRecognition::endCallback):
        (WebCore::SpeechRecognition::interfaceName):
        (WebCore::SpeechRecognition::scriptExecutionContext):
        (WebCore::SpeechRecognition::SpeechRecognition):
        (WebCore::SpeechRecognition::~SpeechRecognition):
        * Modules/speech/SpeechRecognition.h: Added.
        (WebCore):
        (SpeechRecognition):
        (WebCore::SpeechRecognition::grammars):
        (WebCore::SpeechRecognition::setGrammars):
        (WebCore::SpeechRecognition::lang):
        (WebCore::SpeechRecognition::setLang):
        (WebCore::SpeechRecognition::continuous):
        (WebCore::SpeechRecognition::setContinuous):
        * Modules/speech/SpeechRecognition.idl:
        * Modules/speech/SpeechRecognitionClient.h:
        (WebCore):
        (SpeechRecognitionClient):
        (WebCore::SpeechRecognitionClient::~SpeechRecognitionClient):
        * Modules/speech/SpeechRecognitionController.cpp:
        (WebCore):
        (WebCore::SpeechRecognitionController::supplementName):
        (WebCore::SpeechRecognitionController::SpeechRecognitionController):
        (WebCore::SpeechRecognitionController::~SpeechRecognitionController):
        (WebCore::SpeechRecognitionController::create):
        (WebCore::provideSpeechRecognitionTo):
        * Modules/speech/SpeechRecognitionController.h: Added.
        (WebCore):
        (SpeechRecognitionController):
        (WebCore::SpeechRecognitionController::start):
        (WebCore::SpeechRecognitionController::stop):
        (WebCore::SpeechRecognitionController::abort):
        (WebCore::SpeechRecognitionController::visibilityHidden):
        (WebCore::SpeechRecognitionController::unregisterSpeechRecognition):
        (WebCore::SpeechRecognitionController::from):
        * WebCore.gypi:
        * dom/EventTargetFactory.in:

2012-03-15  Michal Ciepielski  <m.ciepielski@samsung.com>

        [EFL] Sets alpha channel for new buffers.
        https://bugs.webkit.org/show_bug.cgi?id=77101

        Reviewed by Hajime Morita.

        No new tests.

        By default EFL creates buffers without alpha channel.
        This causes improper rendering of HTML controls (i.e. radio buttons, checkboxes).
        This commits sets alpha channel for all newly created buffers by EFL.

        * platform/efl/RenderThemeEfl.cpp:
        (WebCore::RenderThemeEfl::cacheThemePartNew):

2012-03-15  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r110941.
        http://trac.webkit.org/changeset/110941
        https://bugs.webkit.org/show_bug.cgi?id=81307

        the revert looks innocent. (Requested by morrita on #webkit).

        * platform/graphics/chromium/Canvas2DLayerChromium.cpp:
        (WebCore::Canvas2DLayerChromium::paintContentsIfDirty):
        * platform/graphics/chromium/Canvas2DLayerChromium.h:
        (Canvas2DLayerChromium):
        * platform/graphics/chromium/ContentLayerChromium.cpp:
        (WebCore::ContentLayerChromium::paintContentsIfDirty):
        (WebCore::ContentLayerChromium::idlePaintContentsIfDirty):
        * platform/graphics/chromium/ContentLayerChromium.h:
        (WebCore):
        (ContentLayerChromium):
        * platform/graphics/chromium/ImageLayerChromium.cpp:
        (WebCore::ImageLayerChromium::paintContentsIfDirty):
        * platform/graphics/chromium/ImageLayerChromium.h:
        (WebCore):
        (ImageLayerChromium):
        * platform/graphics/chromium/LayerChromium.h:
        (WebCore::LayerChromium::paintContentsIfDirty):
        (WebCore::LayerChromium::idlePaintContentsIfDirty):
        * platform/graphics/chromium/TiledLayerChromium.cpp:
        (WebCore::TiledLayerChromium::prepareToUpdateTiles):
        (WebCore::TiledLayerChromium::prepareToUpdate):
        (WebCore::TiledLayerChromium::prepareToUpdateIdle):
        * platform/graphics/chromium/TiledLayerChromium.h:
        (TiledLayerChromium):
        * platform/graphics/chromium/WebGLLayerChromium.cpp:
        (WebCore::WebGLLayerChromium::paintContentsIfDirty):
        * platform/graphics/chromium/WebGLLayerChromium.h:
        (WebGLLayerChromium):
        * platform/graphics/chromium/cc/CCLayerTreeHost.cpp:
        (WebCore::CCLayerTreeHost::paintContentsIfDirty):
        (WebCore::CCLayerTreeHost::paintMaskAndReplicaForRenderSurface):
        (WebCore::CCLayerTreeHost::paintLayerContents):
        * platform/graphics/chromium/cc/CCLayerTreeHost.h:

2012-03-15  Tommy Widenflycht  <tommyw@google.com>

        MediaStream API (JSEP): Introducing SessionDescription
        https://bugs.webkit.org/show_bug.cgi?id=81206

        Reviewed by Adam Barth.

        Patch #3 in a series of patches to change the PeerConnection from ROAP to JSEP,
        see bug 80589 for more information.
        Adding the SessionDescription JS object and its platform counterpart SessionDescriptionDescriptor.

        Not possible to test until the entire JSEP feature is commited.

        * GNUmakefile.list.am:
        * Modules/mediastream/SessionDescription.cpp: Copied from Source/WebCore/platform/mediastream/MediaStreamCenter.cpp.
        (WebCore):
        (WebCore::SessionDescription::create):
        (WebCore::SessionDescription::SessionDescription):
        (WebCore::SessionDescription::~SessionDescription):
        (WebCore::SessionDescription::addCandidate):
        (WebCore::SessionDescription::toSdp):
        (WebCore::SessionDescription::descriptor):
        * Modules/mediastream/SessionDescription.h: Copied from Source/WebCore/platform/mediastream/MediaStreamCenter.cpp.
        (WebCore):
        (SessionDescription):
        * Modules/mediastream/SessionDescription.idl: Added.
        * WebCore.gypi:
        * platform/mediastream/MediaStreamCenter.cpp:
        (WebCore::MediaStreamCenter::constructSdp):
        (WebCore):
        * platform/mediastream/MediaStreamCenter.h:
        (WebCore):
        (MediaStreamCenter):
        * platform/mediastream/SessionDescriptionDescriptor.cpp: Copied from Source/WebCore/platform/mediastream/MediaStreamCenter.cpp.
        (WebCore):
        (WebCore::SessionDescriptionDescriptor::create):
        (WebCore::SessionDescriptionDescriptor::SessionDescriptionDescriptor):
        (WebCore::SessionDescriptionDescriptor::~SessionDescriptionDescriptor):
        (WebCore::SessionDescriptionDescriptor::addCandidate):
        (WebCore::SessionDescriptionDescriptor::toSdp):
        (WebCore::SessionDescriptionDescriptor::numberOfAddedCandidates):
        (WebCore::SessionDescriptionDescriptor::candidate):
        (WebCore::SessionDescriptionDescriptor::initialSdp):
        * platform/mediastream/SessionDescriptionDescriptor.h: Copied from Source/WebCore/platform/mediastream/MediaStreamCenter.cpp.
        (WebCore):
        (SessionDescriptionDescriptor):

2012-03-15  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r110929.
        http://trac.webkit.org/changeset/110929
        https://bugs.webkit.org/show_bug.cgi?id=81306

        breaking webkit_unit_tests (Requested by morrita on #webkit).

        * platform/graphics/chromium/Canvas2DLayerChromium.cpp:
        (WebCore::Canvas2DLayerChromium::paintContentsIfDirty):
        * platform/graphics/chromium/Canvas2DLayerChromium.h:
        (Canvas2DLayerChromium):
        * platform/graphics/chromium/ContentLayerChromium.cpp:
        (WebCore::ContentLayerChromium::paintContentsIfDirty):
        (WebCore::ContentLayerChromium::idlePaintContentsIfDirty):
        * platform/graphics/chromium/ContentLayerChromium.h:
        (WebCore):
        (ContentLayerChromium):
        * platform/graphics/chromium/ImageLayerChromium.cpp:
        (WebCore::ImageLayerChromium::paintContentsIfDirty):
        * platform/graphics/chromium/ImageLayerChromium.h:
        (WebCore):
        (ImageLayerChromium):
        * platform/graphics/chromium/LayerChromium.h:
        (WebCore::LayerChromium::paintContentsIfDirty):
        (WebCore::LayerChromium::idlePaintContentsIfDirty):
        * platform/graphics/chromium/TiledLayerChromium.cpp:
        (WebCore):
        (WebCore::contentToLayerTransform):
        (WebCore::TiledLayerChromium::prepareToUpdateTiles):
        (WebCore::TiledLayerChromium::prepareToUpdate):
        (WebCore::TiledLayerChromium::prepareToUpdateIdle):
        * platform/graphics/chromium/TiledLayerChromium.h:
        (WebCore):
        (TiledLayerChromium):
        * platform/graphics/chromium/WebGLLayerChromium.cpp:
        (WebCore::WebGLLayerChromium::paintContentsIfDirty):
        * platform/graphics/chromium/WebGLLayerChromium.h:
        (WebGLLayerChromium):
        * platform/graphics/chromium/cc/CCLayerTreeHost.cpp:
        (WebCore::CCLayerTreeHost::paintContentsIfDirty):
        (WebCore::CCLayerTreeHost::paintMaskAndReplicaForRenderSurface):
        (WebCore::CCLayerTreeHost::paintLayerContents):
        * platform/graphics/chromium/cc/CCLayerTreeHost.h:

2012-03-15  Allan Sandfeld Jensen  <allan.jensen@nokia.com>

        REGRESSION(r106232): The resize handler is always called after loading.
        https://bugs.webkit.org/show_bug.cgi?id=80242

        Reviewed by Kenneth Rohde Christiansen.

        Ensure resize-events are not emitted when layout-size changes due to added
        scrollbars. For fixed layout, scrollbars are never subtracted or added, so
        we can compare fixedLayoutSize directly. For normal layout, use the full
        visible rect size which is the same as layout size plus scrollbars.

        Test: fast/events/resize-events.html

        * page/FrameView.cpp:
        (WebCore::FrameView::reset):
        (WebCore::FrameView::layout):
        (WebCore::FrameView::performPostLayoutTasks):
        * page/FrameView.h:
        (FrameView):

2012-03-15  Tommy Widenflycht  <tommyw@google.com>

        MediaStream API (JSEP): Introducing MediaHints and IceOptions
        https://bugs.webkit.org/show_bug.cgi?id=81207

        Reviewed by Adam Barth.

        Patch #4 in a series of patches to change the PeerConnection from ROAP to JSEP,
        see bug 80589 for more information.
        Introducing the platform MediaHints and IceOptions helper classes.

        Not possible to test until the entire JSEP feature is commited.

        * GNUmakefile.list.am:
        * WebCore.gypi:
        * platform/mediastream/IceOptions.cpp: Added.
        (WebCore):
        (WebCore::IceOptions::create):
        * platform/mediastream/IceOptions.h: Added.
        (WebCore):
        (IceOptions):
        (WebCore::IceOptions::~IceOptions):
        (WebCore::IceOptions::useCandidates):
        (WebCore::IceOptions::IceOptions):
        * platform/mediastream/MediaHints.cpp: Added.
        (WebCore):
        (WebCore::MediaHints::create):
        (WebCore::MediaHints::audio):
        (WebCore::MediaHints::video):
        * platform/mediastream/MediaHints.h: Added.
        (WebCore):
        (MediaHints):
        (WebCore::MediaHints::~MediaHints):
        (WebCore::MediaHints::MediaHints):

2012-03-15  Shinya Kawanaka  <shinyak@chromium.org>

        [Crash] Adding <content> into a ShadowRoot causes crash.
        https://bugs.webkit.org/show_bug.cgi?id=80020

        Reviewed by Hajime Morita.

        The problem is <content> tries to select host children though it is not prepared.
        Since populating host children for insertion points is performed just before
        attaching a shadow tree, we should recalculate whole shadow tree if <content> is
        appended as a child.

        However, element->appendChild() does not know the element is in a shadow tree or not.
        We have to ensure reattaching whole shadow tree here.

        So this patch adds some phases to HTMLContentSelector so that we can check node
        distribution algorihm is begin processed or not. If not we cannot select anything,
        but we have to enable a flag to reattach whole shadow tree.

        Tests: fast/dom/shadow/shadow-content-crash-expected.html
               fast/dom/shadow/shadow-content-crash.html

        * dom/ShadowTree.cpp:
        (WebCore::ShadowTree::attach):
        (WebCore::ShadowTree::insertionPointFor):
        * dom/ShadowTree.h:
        (WebCore):
        (ShadowTree):
        (WebCore::ShadowTree::selector):
        * html/shadow/HTMLContentSelector.cpp:
        (WebCore::HTMLContentSelector::HTMLContentSelector):
        (WebCore::HTMLContentSelector::select):
        (WebCore::HTMLContentSelector::willSelect):
        (WebCore):
        (WebCore::HTMLContentSelector::didSelect):
        (WebCore::HTMLContentSelector::populateIfNecessary):
        * html/shadow/HTMLContentSelector.h:
        (HTMLContentSelector):
        (WebCore::HTMLContentSelector::isSelecting):
        (WebCore):
        (WebCore::HTMLContentSelector::hasPopulated):
        * html/shadow/InsertionPoint.cpp:
        (WebCore::InsertionPoint::distributeHostChildren):
        (WebCore::InsertionPoint::clearDistribution):

2012-03-15  Mike Lawther  <mikelawther@chromium.org>

        CSS3 calc: mixed percent/absolute expressions for gradients
        https://bugs.webkit.org/show_bug.cgi?id=81182

        Reviewed by Ojan Vafai.

        * css/CSSGradientValue.cpp:
        (WebCore::CSSGradientValue::addStops):
        (WebCore::positionFromValue):

2012-03-15  Leo Yang  <leo.yang@torchmobile.com.cn>

        [BlackBerry] Sync up MIMETypeRegistry.cpp
        https://bugs.webkit.org/show_bug.cgi?id=81191

        Reviewed by Rob Buis.

        Add png and jpeg to supportedImageMIMETypesForEncoding for BlackBerry.

        * platform/MIMETypeRegistry.cpp:
        (WebCore::initializeSupportedImageMIMETypesForEncoding):

2012-03-15  Dana Jansens  <danakj@chromium.org>

        [chromium] Decide occlusion in paint culling with CCOcclusionTracker
        https://bugs.webkit.org/show_bug.cgi?id=81181

        Reviewed by Adrienne Walker.

        Plumb a CCOcclusionTracker* around instead of a bare Region, so that it
        can make a more informed decision if a tile is occluded or not during
        paint.

        Covered by existing tests.

        * platform/graphics/chromium/Canvas2DLayerChromium.cpp:
        (WebCore::Canvas2DLayerChromium::paintContentsIfDirty):
        * platform/graphics/chromium/Canvas2DLayerChromium.h:
        (Canvas2DLayerChromium):
        * platform/graphics/chromium/ContentLayerChromium.cpp:
        (WebCore::ContentLayerChromium::paintContentsIfDirty):
        (WebCore::ContentLayerChromium::idlePaintContentsIfDirty):
        * platform/graphics/chromium/ContentLayerChromium.h:
        (WebCore):
        (ContentLayerChromium):
        * platform/graphics/chromium/ImageLayerChromium.cpp:
        (WebCore::ImageLayerChromium::paintContentsIfDirty):
        * platform/graphics/chromium/ImageLayerChromium.h:
        (WebCore):
        (ImageLayerChromium):
        * platform/graphics/chromium/LayerChromium.h:
        (WebCore::LayerChromium::paintContentsIfDirty):
        (WebCore::LayerChromium::idlePaintContentsIfDirty):
        * platform/graphics/chromium/TiledLayerChromium.cpp:
        (WebCore::TiledLayerChromium::prepareToUpdateTiles):
        (WebCore::TiledLayerChromium::prepareToUpdate):
        (WebCore::TiledLayerChromium::prepareToUpdateIdle):
        * platform/graphics/chromium/TiledLayerChromium.h:
        (TiledLayerChromium):
        * platform/graphics/chromium/WebGLLayerChromium.cpp:
        (WebCore::WebGLLayerChromium::paintContentsIfDirty):
        * platform/graphics/chromium/WebGLLayerChromium.h:
        (WebGLLayerChromium):
        * platform/graphics/chromium/cc/CCLayerTreeHost.cpp:
        (WebCore::CCLayerTreeHost::paintContentsIfDirty):
        (WebCore::CCLayerTreeHost::paintMaskAndReplicaForRenderSurface):
        (WebCore::CCLayerTreeHost::paintLayerContents):
        * platform/graphics/chromium/cc/CCLayerTreeHost.h:

2012-03-15  Yoshifumi Inoue  <yosin@chromium.org>

        [Forms] The "meter" element should not be a form-associated element.
        https://bugs.webkit.org/show_bug.cgi?id=80380

        Reviewed by Kent Tamura.

        This patch changes base class of HTMLMeterElement to LabelableElement from
        HTMLFormControlElement for saving memory space and iteration time of
        extra "meter" elements in HTMLFormElement::m_formAssociatedElements
        and matching the HTML5 specification for ease of maintenance.

        This patch renames isLabelable method to supportLabels and makes isLabelable
        as predicate of an instance of LabelableElement or not.

        Changes of TextIterator is lead by usage of isFormControlElement. This
        changes will be replaced with more meaningful predicate as part of
        https://bugs.webkit.org/show_bug.cgi?id=80381

        No new tests. Update existing tests to cover this change.

        * editing/TextIterator.cpp:
        (WebCore::TextIterator::advance): Check HTMLMeterElement in addition to isFormControlElement. This change is for text dump in LayoutTests implemented by document.innerText attribute.
        * html/HTMLButton.h:
        (WebCore::HTMLButtonElement::supportLabels): Renamed from isLabelable
        * html/HTMLElement.h:
        (WebCore::HTMLElement::isLabelable): Added. A predicate for an instance of LabelableElement.
        * html/HTMLInputElement.h:
        (WebCore::HTMLInputElement::supportLabels): Renamed from isLabelable
        * html/HTMLKeygenElement.h:
        (WebCore::HTMLKeygenElement::supportLabels): Renamed from isLabelable
         * html/HTMLLabelElement.cpp:
        (WebCore::nodeAsLabelableElement): Changed to return LabelableElement instead of HTMLFormControlElement.
        (WebCore::HTMLLabelElement::control): Changed to return LabelableElement instead of HTMLFormControlElement.
        * html/HTMLLabelElement.h:
        (HTMLLabelElement):
        * html/HTMLMeterElement.cpp:
        (WebCore::HTMLMeterElement::HTMLMeterElement): Changed base class to LabelableElement.
        (WebCore::HTMLMeterElement::create): Remove form parameter.
        (WebCore::HTMLMeterElement::formControlType): Remove implementation of virtual method declared in HTMLFormControlElement.
        (WebCore::HTMLMeterElement::parseAttribute): Replace HTMLFormControlElement to LabelableElement
        (WebCore::HTMLMeterElement::attach): Replace HTMLFormControlElement to LabelableElement
        * html/HTMLMeterElement.idl: Remove the "form" attribute which isn't listed in the HTML5 specification.
        * html/HTMLMeterElement.h:
        (HTMLMeterElement):
        (WebCore::HTMLMeterElement::supportLabels): Renamed from isLabelable
        * html/HTMLOutputElement.h:
        (WebCore::HTMLOutputElement::supportLabels): Renamed from isLabelable
        * html/HTMLProgressElement.h:
        (WebCore::HTMLProgressElement::supportLabels): Renamed from isLabelable
         * html/HTMLSelectElement.h:
        (WebCore::HTMLSelectElement::supportLabels): Renamed from isLabelable
        * html/HTMLTextAreaElement.h:
        (WebCore::HTMLTextAreaElement::supportLabels): Renamed from isLabelable
        * html/HiddenInputType.h:
        (WebCore::HiddenInputType::supportLabels): Renamed from isLabelable
        * html/InputType.h:
        (WebCore::InputType::supportLabels): Renamed from isLabelable
        * html/HTMLTagNames.in: Remove "constructorNeedsFormElement" for not passing "form" parameter in HTMLElementFactory.
        * html/LabelableElement.cpp:
        (WebCore::LabelableElement::labels): Replace isLabelable to supportLabels
        * html/LabelableElement.h:
        (LabelableElement):

2012-03-15  Adam Klein  <adamk@chromium.org>

        REGRESSION(r103452): 100% CPU usage and 5s pause after clicking on a link in Yahoo Mail
        https://bugs.webkit.org/show_bug.cgi?id=81141

        Reviewed by Ojan Vafai.

        Revert the behavior change from r103452: don't fire DOMSubtreeModified
        events when an attribute value merely changes. Still fire that event
        when an attribute is added or removed from an element.

        Though this contradicts the DOM3 spec, it matches legacy WebKit behavior,
        and given that Mutation Events are deprecated, it seems unwise to make
        any additions to WebKit's implementation of them.

        Test: fast/dom/subtree-modified-attributes.html

        * dom/Element.cpp:
        (WebCore::Element::didAddAttribute): Renamed from didModifyAttribute.
        (WebCore::Element::didModifyAttribute): Remove the call to dispatchSubtreeModifiedEvent.
        (WebCore):
        * dom/Element.h:
        (Element):
        * dom/ElementAttributeData.cpp:
        (WebCore::ElementAttributeData::addAttribute): Call didAddAttribute instead of didModifyAttribute.

2012-03-15  Dana Jansens  <danakj@chromium.org>

        [chromium] Move overdraw metrics into a templated class for both paint and draw metrics.
        https://bugs.webkit.org/show_bug.cgi?id=81156

        Reviewed by Adrienne Walker.

        Creates CCOverdrawMetrics which can be called to inform it about
        draws/paints. At the end of the frame, the CCOverdrawMetrics
        recordMetrics() method will put its data into histograms, a
        TRACE_COUNTER for culling information, and a TRACE_EVENT for details
        about the number of opaque/translucent pixels.

        Covered by existing tests.

        * WebCore.gypi:
        * platform/chromium/TraceEvent.h:
        (TraceEvent):
        (WebCore::TraceEvent::addTraceEvent):
        * platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:
        (WebCore::CCLayerTreeHostImpl::calculateRenderPasses):
        * platform/graphics/chromium/cc/CCOverdrawMetrics.cpp: Added.
        (WebCore):
        (WebCore::CCOverdrawMetrics::CCOverdrawMetrics):
        (WebCore::wedgeProduct):
        (WebCore::quadArea):
        (WebCore::CCOverdrawMetrics::didDraw):
        (WebCore::CCOverdrawMetrics::recordMetrics):
        (WebCore::CCOverdrawMetrics::recordMetricsInternal):
        * platform/graphics/chromium/cc/CCOverdrawMetrics.h: Added.
        (WebCore):
        (CCOverdrawMetrics):
        (WebCore::CCOverdrawMetrics::pixelsDrawnOpaque):
        (WebCore::CCOverdrawMetrics::pixelsDrawnTranslucent):
        (WebCore::CCOverdrawMetrics::pixelsCulled):
        * platform/graphics/chromium/cc/CCQuadCuller.cpp:
        (WebCore::CCQuadCuller::CCQuadCuller):
        (WebCore::CCQuadCuller::append):
        * platform/graphics/chromium/cc/CCQuadCuller.h:
        (WebCore):
        (CCQuadCuller):
        * platform/graphics/chromium/cc/CCRenderPass.cpp:
        (WebCore::CCRenderPass::appendQuadsForLayer):
        * platform/graphics/chromium/cc/CCRenderPass.h:
        (WebCore):
        (CCRenderPass):

2012-03-15  James Robinson  <jamesr@chromium.org>

        [chromium] RateLimiter should hold a reference to its context
        https://bugs.webkit.org/show_bug.cgi?id=80761

        Reviewed by Stephen White.

        * platform/graphics/chromium/RateLimiter.h:
        (RateLimiter):

2012-03-15  Adam Klein  <adamk@chromium.org>

        Share code in FormAssociatedElement by resetting the form owner whenever insertedIntoTree is called
        https://bugs.webkit.org/show_bug.cgi?id=81160

        Reviewed by Kent Tamura.

        The only difference between the previous insertedIntoTree method and
        resetFormOwner was a missing element->inDocument() check in the
        former. But that check is actually important, as seen by the included test case.

        Test: fast/forms/form-attribute-not-in-document.html

        * html/FormAssociatedElement.cpp:
        (WebCore::FormAssociatedElement::insertedIntoTree):

2012-03-15  Kentaro Hara  <haraken@chromium.org>

        [Refactoring] Rename StringBuilder variables in MarkupAccumulator.{h,cpp}
        https://bugs.webkit.org/show_bug.cgi?id=81288

        Reviewed by Adam Barth.

        This is a refactoring for fixing bug 81214. Currently MarkupAccumulator mixes
        'out' and 'result' for variable names of StringBuilder. This patch unifies them
        to 'result'.

        No tests. No change in behavior.

        * editing/MarkupAccumulator.cpp: Renamed 'out' to 'result'.
        (WebCore::appendCharactersReplacingEntities):
        (WebCore::MarkupAccumulator::serializeNodes): Renamed 'node' to 'targetNode' for clarification
        (and for avoiding style check error in MarkupAccumulator.h).
        (WebCore::MarkupAccumulator::concatenateMarkup):
        (WebCore::MarkupAccumulator::appendNodeValue):
        (WebCore::MarkupAccumulator::shouldAddNamespaceAttribute):
        (WebCore::MarkupAccumulator::appendNamespace):
        (WebCore::MarkupAccumulator::entityMaskForText):
        (WebCore::MarkupAccumulator::appendText):
        (WebCore::MarkupAccumulator::appendComment):
        (WebCore::MarkupAccumulator::appendProcessingInstruction):
        (WebCore::MarkupAccumulator::appendElement):
        (WebCore::MarkupAccumulator::appendOpenTag):
        (WebCore::MarkupAccumulator::appendCloseTag):
        (WebCore::MarkupAccumulator::appendAttribute):
        (WebCore::MarkupAccumulator::appendCDATASection):
        (WebCore::MarkupAccumulator::elementCannotHaveEndTag):
        * editing/MarkupAccumulator.h: Removed redundant variable names.
        (MarkupAccumulator):
        (WebCore):

2012-03-15  Brent Fulgham  <bfulgham@webkit.org>

        [WinCairo] Correct <wtf/*.h> include paths.
        https://bugs.webkit.org/show_bug.cgi?id=81278

        Reviewed by Eric Seidel.

        Modify the #include declarations for several Cairo-related files
        so that the wtf types are included using the full path.

        * platform/graphics/FontPlatformData.h:
        * platform/graphics/cairo/OwnPtrCairo.h:
        * platform/graphics/cairo/RefPtrCairo.h:

2012-03-15  Anders Carlsson  <andersca@apple.com>

        only some tiles rendered when zoomed in
        https://bugs.webkit.org/show_bug.cgi?id=81282
        <rdar://problem/11058898>

        Reviewed by Andreas Kling.

        * platform/graphics/ca/mac/TileCache.mm:
        (WebCore::TileCache::rectForTileIndex):
        Make sure that the tile cache bounds are scaled accordingly.

2012-03-15  Zeno Albisser  <zeno@webkit.org>

        [Qt] RenderThemeQt::fileListNameForWidth should override function in base class RenderTheme. (r110560)
        https://bugs.webkit.org/show_bug.cgi?id=81107

        Add "bool multipleFilesAllowed" to the parameter list of RenderThemeQt::fileListNameForWidth.
        This way the base class function is properly overridden.
        The need for this change became obvious after r110560 where the OVERRIDE keyword had been
        added to the function signature.

        Reviewed by Simon Hausmann.

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

2012-03-07  Jon Lee  <jonlee@apple.com>

        Move NotificationContents into Notification
        https://bugs.webkit.org/show_bug.cgi?id=80487
        <rdar://problem/10965519>

        Reviewed by Jian Li.

        * notifications/Notification.cpp: Alter signature of constructor to take the fields directly instead of
        a NotificationContents instance.
        (WebCore::Notification::Notification): Derive KURL from string representation of icon.
        (WebCore::Notification::create):
        * notifications/Notification.h:
        (Notification): Remove contents() accessor and replace with get for title and body. iconURL()
        already existed, but use local variable instead of going through NotificationContents.
        (WebCore::Notification::iconURL):
        (WebCore::Notification::title):
        (WebCore::Notification::body):
        * notifications/NotificationCenter.h:
        (WebCore::NotificationCenter::createNotification): Refactor to use new constructor.
        * notifications/NotificationContents.h: Removed.

        Remove NotificationContents.h from project files
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:

2012-03-13  Jon Lee  <jonlee@apple.com>

        Deprecate ondisplay()
        https://bugs.webkit.org/show_bug.cgi?id=80483
        <rdar://problem/10912432>

        Reviewed by Jian Li.

        The appropriate event listener for notifications is onshow().

        * notifications/Notification.h: Wrap ondisplay in ENABLE(LEGACY_NOTIFICATIONS).
        * notifications/Notification.idl: Wrap ondisplay in ENABLE_LEGACY_NOTIFICATIONS.

2012-03-14  W. James MacLean  <wjmaclean@chromium.org>

        [chromium] Wire up PlatformGestureCurves for CC, ScrollAnimatorNone.
        https://bugs.webkit.org/show_bug.cgi?id=80607

        Reviewed by James Robinson.

        Unit tests added. Layout tests to follow.

        Provides implementation of PlatformGestureCurves in Chrome Compositor, and basic
        support in ScrollAnimatorNone, for fling gestures.

        * GNUmakefile.list.am:
        * platform/ActivePlatformGestureAnimation.cpp:
        (WebCore::ActivePlatformGestureAnimation::create):
        (WebCore::ActivePlatformGestureAnimation::ActivePlatformGestureAnimation):
        (WebCore::ActivePlatformGestureAnimation::animate):
        * platform/ActivePlatformGestureAnimation.h:
        (ActivePlatformGestureAnimation):
        * platform/PlatformGestureCurveTarget.h:
        (PlatformGestureCurveTarget):
        * platform/ScrollAnimatorNone.cpp:
        (WebCore::ScrollAnimatorNone::cancelAnimations):
        (WebCore::ScrollAnimatorNone::animationTimerFired):
        (WebCore::ScrollAnimatorNone::scrollBy):
        (WebCore):
        * platform/ScrollAnimatorNone.h:
        (WebCore):
        (ScrollAnimatorNone):
        * platform/TouchFlingPlatformGestureCurve.cpp:
        (WebCore::TouchFlingPlatformGestureCurve::apply):
        * platform/WheelFlingPlatformGestureCurve.cpp:
        (WebCore::WheelFlingPlatformGestureCurve::apply):
        * platform/graphics/chromium/cc/CCActiveGestureAnimation.cpp:
        (WebCore::CCActiveGestureAnimation::create):
        (WebCore::CCActiveGestureAnimation::CCActiveGestureAnimation):
        (WebCore::CCActiveGestureAnimation::animate):
        * platform/graphics/chromium/cc/CCActiveGestureAnimation.h:
        (CCActiveGestureAnimation):
        * platform/graphics/chromium/cc/CCGestureCurve.h:
        (CCGestureCurveTarget):
        * platform/graphics/chromium/cc/CCInputHandler.h:
        (WebCore):
        * platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:
        (WebCore::CCLayerTreeHostImpl::animate):
        (WebCore::CCLayerTreeHostImpl::setActiveGestureAnimation):
        (WebCore):
        (WebCore::CCLayerTreeHostImpl::animateGestures):
        * platform/graphics/chromium/cc/CCLayerTreeHostImpl.h:
        (WebCore):
        (WebCore::CCLayerTreeHostImpl::activeGestureAnimation):
        (CCLayerTreeHostImpl):

2012-03-15  Patrick Gansterer  <paroga@webkit.org>

        [EFL] Make zlib a general build requirement
        https://bugs.webkit.org/show_bug.cgi?id=80153

        Reviewed by Hajime Morita.

        After r109538 WebSocket module needs zlib to support deflate-frame extension.

        * PlatformEfl.cmake:

2012-03-15  Robert Kroeger  <rjkroege@chromium.org>

        REGRESSION (r110371): broke platform/gtk/scrollbars/overflow-scrollbar-horizontal-wheel-scroll.html
        https://bugs.webkit.org/show_bug.cgi?id=80825

        Reviewed by James Robinson.

        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleWheelEvent): Corrected a typo.

2012-03-15  Scott Byer  <scottbyer@chromium.org>

        Fix crbug 117957 - get settings scrolling with the wheel again.
        https://bugs.webkit.org/show_bug.cgi?id=81247

        Reviewed by James Robinson.

        Tests to follow.

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

2012-03-15  David Hyatt  <hyatt@apple.com>

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

        Add a preference for enabling the new multi-column layout code that will be based on regions.

        Reviewed by Beth Dakin.

        * page/Settings.cpp:
        (WebCore::Settings::Settings):
        * page/Settings.h:
        (WebCore::Settings::setRegionBasedColumnsEnabled):
        (WebCore::Settings::regionBasedColumnsEnabled):
        (Settings):

2012-03-15  Andreas Kling  <kling@webkit.org>

        RenderStyle: Return Color objects by value instead of as const references.
        <http://webkit.org/b/81180>

        Reviewed by Antti Koivisto.

        Make RenderStyle getters return "Color" rather than "const Color&". This is preparation
        for storing some color values in a more space-efficient fashion.

        * css/CSSStyleApplyProperty.cpp:
        (WebCore::ApplyPropertyColor::applyInheritValue):
        * page/animation/AnimationBase.cpp:
        (PropertyWrapperColor):
        (WebCore::PropertyWrapperColor::PropertyWrapperColor):
        (WebCore::PropertyWrapperColor::blend):
        (WebCore::PropertyWrapperMaybeInvalidColor::PropertyWrapperMaybeInvalidColor):
        (PropertyWrapperMaybeInvalidColor):
        (WebCore::PropertyWrapperVisitedAffectedColor::PropertyWrapperVisitedAffectedColor):
        (WebCore::PropertyWrapperSVGPaint::PropertyWrapperSVGPaint):
        (PropertyWrapperSVGPaint):
        * platform/graphics/Color.h:
        (WebCore::Color::Color):
        * rendering/style/RenderStyle.h:

2012-03-15  Jessie Berlin  <jberlin@apple.com>

        Assertion failures in WebCore::Page::goBackOrForward causing multiple "crashes" on Lion Intel
        Debug WebKit2 testers
        https://bugs.webkit.org/show_bug.cgi?id=81159

        Rubber-stamped by Brady Eidson.

        It is plausible that history could change in between the time a navigation request is
        scheduled and the timer is fired, so the request index could be out of the b/f list range.
        Hence, the assertion is invalid and should be removed.

        * page/Page.cpp:
        (WebCore::Page::goBackOrForward):

2012-03-15  Alexey Proskuryakov  <ap@apple.com>

        Assertion failures in checkEncodedString when running WebKit2 tests
        https://bugs.webkit.org/show_bug.cgi?id=67425
        <rdar://problem/11043492>

        Reviewed by Anders Carlsson.

        * platform/network/cf/ResourceErrorCF.cpp: (WebCore::ResourceError::cfError):
        * platform/network/mac/ResourceErrorMac.mm: (WebCore::ResourceError::nsError):
        The failing URL is certainly not guaranteed to be valid, so it's not correct to put it back
        into a URL as if it's been normalized by KURL.

2012-03-15  Brady Eidson  <beidson@apple.com>

        <rdar://problem/11036900> and https://bugs.webkit.org/show_bug.cgi?id=81079
        REGRESSION(r107844): Clipboard API only remembers most recent data set on clipboard

        Reviewed by Sam Weinig.

        Test: editing/pasteboard/copy-two-pasteboard-types-both-work.html

        Add the non-destructive "addTypes" to supplement the destructive "setTypes"
        * platform/PasteboardStrategy.h:
        (PasteboardStrategy):
        * platform/PlatformPasteboard.h:
        (PlatformPasteboard):
        * platform/mac/PlatformPasteboardMac.mm:
        (WebCore::PlatformPasteboard::addTypes):
        * WebCore.exp.in:

        * platform/mac/ClipboardMac.mm:
        (WebCore::ClipboardMac::setData): Call the non-destructive "addTypes" instead of
          the destructive "setTypes"

2012-03-15  Dana Jansens  <danakj@chromium.org>

        [Chromium] REGRESSION(r110596) CCQuadCullerTest.verifyCullChildLinesUpTopLeft fails on Windows
        https://bugs.webkit.org/show_bug.cgi?id=81083

        Reviewed by Adrienne Walker.

        The surface pointer on the occlusion tracker stack is uninitialized, and
        can be non-null, but the layer's target surface is null, causing asserts
        to fail. Fixes the TestCCOcclusionTrackerImpl to initialize the stack's
        surface to be null.

        * platform/graphics/chromium/cc/CCOcclusionTracker.cpp:
        (WebCore::::enterTargetRenderSurface):
        (WebCore::::unoccludedContentRect):
        * platform/graphics/chromium/cc/CCOcclusionTracker.h:
        (WebCore::CCOcclusionTrackerBase::StackObject::StackObject):

2012-03-15  David Levin  <levin@chromium.org>

        Various autoresize fixes.
        https://bugs.webkit.org/show_bug.cgi?id=81199

        Reviewed by Darin Fisher.

        Tested by WebViewTest additions.

        * page/FrameView.cpp:
        (WebCore::FrameView::autoSizeIfEnabled): Fixed a bug that caused a horizontal
        scrollbar to appear when the size was width was fixed and height overflowed which
        is one of the tests that was added.

2012-03-15  Andrey Kosyakov  <caseq@chromium.org>

        Web Inspector: normalize vertical overview bars by longest bar, not by longest frame
        https://bugs.webkit.org/show_bug.cgi?id=81231

        Reviewed by Vsevolod Vlasov.

        * inspector/front-end/TimelineOverviewPane.js:
        (WebInspector.TimelineOverviewPane):
        (WebInspector.TimelineOverviewPane.prototype.reset):
        (WebInspector.TimelineOverviewPane.prototype.accept):
        (WebInspector.TimelineOverviewPane.prototype.windowEndTime):
        (WebInspector.TimelineVerticalOverview.prototype.reset):
        (WebInspector.TimelineVerticalOverview.prototype.update):
        (WebInspector.TimelineVerticalOverview.prototype._aggregateFrames):
        (WebInspector.TimelineVerticalOverview.prototype._aggregateRecords):
        (WebInspector.TimelineVerticalOverview.prototype.getWindowTimes):

2012-03-15  Andrey Kosyakov  <caseq@chromium.org>

        Web Inspector: crash in InspectorTimelineAgent when trying to add children to cancelable records
        https://bugs.webkit.org/show_bug.cgi?id=81245

        Reviewed by Vsevolod Vlasov.

        * inspector/InspectorTimelineAgent.cpp:
        (WebCore::InspectorTimelineAgent::addRecordToTimeline):
        (WebCore):
        (WebCore::InspectorTimelineAgent::innerAddRecordToTimeline):
        (WebCore::InspectorTimelineAgent::appendRecord):
        (WebCore::InspectorTimelineAgent::commitCancelableRecords):
        * inspector/InspectorTimelineAgent.h:
        (InspectorTimelineAgent):

2012-03-15  Pavel Podivilov  <podivilov@chromium.org>

        Web Inspector: live locations could be disposed twice.
        https://bugs.webkit.org/show_bug.cgi?id=81249

        Reviewed by Vsevolod Vlasov.

        * inspector/front-end/ScriptMapping.js:
        (WebInspector.MainScriptMapping.prototype._unregisterLiveLocation):

2012-03-15  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Implement unicode submenu items
        https://bugs.webkit.org/show_bug.cgi?id=81117

        Reviewed by Martin Robinson.

        * loader/EmptyClients.h:
        (WebCore::EmptyEditorClient::shouldShowUnicodeMenu): Just return
        false.
        * page/ContextMenuController.cpp:
        (WebCore::insertUnicodeCharacter): Helper function to insert a
        unicode character.
        (WebCore::ContextMenuController::contextMenuItemSelected):
        Implement unicode menu items using insertUnicodeCharacter() to
        insert the apropriate unicode character.
        (WebCore::ContextMenuController::createAndAppendUnicodeSubMenu):
        Create the unicode submenu.
        (WebCore::ContextMenuController::populate): Add unicode submenu
        item for editable content.
        (WebCore::ContextMenuController::checkOrEnableIfNeeded): Add
        unicode submenu items to the switch.
        * page/ContextMenuController.h:
        * page/EditorClient.h:
        (EditorClient): Add shouldShowUnicodeMenu() for GTK platform.
        * platform/ContextMenuItem.h:
        * platform/LocalizedStrings.h:
        * platform/gtk/LocalizedStringsGtk.cpp:
        (WebCore::contextMenuItemTagUnicodeInsertLRMMark): Add localized
        string for the unicode menu item.
        (WebCore::contextMenuItemTagUnicodeInsertRLMMark): Ditto.
        (WebCore::contextMenuItemTagUnicodeInsertLREMark): Ditto.
        (WebCore::contextMenuItemTagUnicodeInsertRLEMark): Ditto.
        (WebCore::contextMenuItemTagUnicodeInsertLROMark): Ditto.
        (WebCore::contextMenuItemTagUnicodeInsertRLOMark): Ditto.
        (WebCore::contextMenuItemTagUnicodeInsertPDFMark): Ditto.
        (WebCore::contextMenuItemTagUnicodeInsertZWSMark): Ditto.
        (WebCore::contextMenuItemTagUnicodeInsertZWJMark): Ditto.
        (WebCore::contextMenuItemTagUnicodeInsertZWNJMark): Ditto.

2012-03-15  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: MainScriptMapping should detect snippet scripts by means of sourceURL set before evaluation.
        https://bugs.webkit.org/show_bug.cgi?id=81031

        Reviewed by Pavel Feldman.

        * inspector/front-end/SnippetsModel.js:
        (WebInspector.SnippetsModel):
        (WebInspector.SnippetsModel.prototype._saveSettings):
        (WebInspector.SnippetsModel.prototype.deleteSnippet):
        (WebInspector.SnippetsModel.prototype._snippetAdded):
        (WebInspector.SnippetsModel.prototype._sourceURLForSnippet):
        (WebInspector.SnippetsModel.prototype.snippetIdForSourceURL):
        (WebInspector.SnippetsModel.prototype.snippetForSourceURL):
        (WebInspector.Snippet.prototype.evaluate):
        (WebInspector.SnippetsScriptMapping):
        (WebInspector.SnippetsScriptMapping.prototype.uiLocationToRawLocation.get if):
        (WebInspector.SnippetsScriptMapping.prototype.uiLocationToRawLocation):
        (WebInspector.SnippetsScriptMapping.prototype._releasedUISourceCodes):
        (WebInspector.SnippetsScriptMapping.prototype._snippetAdded):
        (WebInspector.SnippetsScriptMapping.prototype._snippetWillBeEvaluated):
        (WebInspector.SnippetsScriptMapping.prototype._snippetRemoved.get this):
        (WebInspector.SnippetsScriptMapping.prototype._snippetRemoved):

2012-03-15  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Unreviewed. Build fixes for Mac and DOM bindings.

        * bindings/cpp/WebDOMEventTarget.cpp:
        (toWebKit):
        * platform/graphics/mac/ComplexTextControllerCoreText.mm:
        (WebCore::ComplexTextController::collectComplexTextRunsForCharactersCoreText):

2012-03-14  Pavel Podivilov  <podivilov@chromium.org>

        Web Inspector: extract CompilerScriptMapping from RawSourceCode.
        https://bugs.webkit.org/show_bug.cgi?id=81088

        Reviewed by Vsevolod Vlasov.

        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * inspector/compile-front-end.py:
        * inspector/front-end/CompilerScriptMapping.js: Added.
        (WebInspector.CompilerScriptMapping):
        (WebInspector.CompilerScriptMapping.prototype.rawLocationToUILocation):
        (WebInspector.CompilerScriptMapping.prototype.get uiSourceCodeList):
        (WebInspector.CompilerScriptMapping.prototype.addScript.get this):
        (WebInspector.CompilerScriptMapping.prototype.addScript):
        (WebInspector.CompilerScriptMapping.prototype.loadSourceMapForScript):
        (WebInspector.CompilerScriptMapping.prototype.reset):
        * inspector/front-end/RawSourceCode.js:
        (WebInspector.RawSourceCode):
        (WebInspector.RawSourceCode.prototype.setFormatted):
        (WebInspector.RawSourceCode.prototype._resourceFinished):
        (WebInspector.RawSourceCode.prototype._createUISourceCode):
        (WebInspector.RawSourceCode.FormattedSourceMapping.prototype.rawLocationToUILocation):
        * inspector/front-end/ResourceScriptMapping.js:
        (WebInspector.ResourceScriptMapping.prototype.addScript):
        * inspector/front-end/ScriptMapping.js:
        (WebInspector.MainScriptMapping):
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/inspector.html:

2012-03-15  Peter Rybin  <peter.rybin@gmail.com>

        Web Inspector: Move all includes behind ENABLE(INSPECTOR) guards
        https://bugs.webkit.org/show_bug.cgi?id=81132

        Reviewed by Yury Semikhatsky.

        Include directives are moved several lines down in .cpp files and in
        generator templates.

        * inspector/CodeGeneratorInspector.py:
        * inspector/ContentSearchUtils.cpp:
        * inspector/DOMEditor.cpp:
        * inspector/DOMNodeHighlighter.cpp:
        * inspector/DOMPatchSupport.cpp:
        * inspector/IdentifiersFactory.cpp:
        * inspector/InjectedScript.cpp:
        * inspector/InjectedScriptHost.cpp:
        * inspector/InjectedScriptManager.cpp:
        * inspector/InspectorAgent.cpp:
        * inspector/InspectorApplicationCacheAgent.cpp:
        * inspector/InspectorBaseAgent.cpp:
        * inspector/InspectorCSSAgent.cpp:
        * inspector/InspectorClient.cpp:
        * inspector/InspectorConsoleAgent.cpp:
        * inspector/InspectorController.cpp:
        * inspector/InspectorCounters.cpp:
        * inspector/InspectorDOMAgent.cpp:
        * inspector/InspectorDOMDebuggerAgent.cpp:
        * inspector/InspectorDOMStorageAgent.cpp:
        * inspector/InspectorDatabaseAgent.cpp:
        * inspector/InspectorDatabaseResource.cpp:
        * inspector/InspectorDebuggerAgent.cpp:
        * inspector/InspectorFileSystemAgent.cpp:
        * inspector/InspectorFrontendClientLocal.cpp:
        * inspector/InspectorFrontendHost.cpp:
        * inspector/InspectorHistory.cpp:
        * inspector/InspectorIndexedDBAgent.cpp:
        * inspector/InspectorInstrumentation.cpp:
        * inspector/InspectorMemoryAgent.cpp:
        * inspector/InspectorPageAgent.cpp:
        * inspector/InspectorProfilerAgent.cpp:
        * inspector/InspectorResourceAgent.cpp:
        * inspector/InspectorRuntimeAgent.cpp:
        * inspector/InspectorState.cpp:
        * inspector/InspectorStyleSheet.cpp:
        * inspector/InspectorStyleTextEditor.cpp:
        * inspector/InspectorTimelineAgent.cpp:
        * inspector/InspectorValues.cpp:
        * inspector/InstrumentingAgents.cpp:
        * inspector/NetworkResourcesData.cpp:
        * inspector/PageConsoleAgent.cpp:
        * inspector/PageDebuggerAgent.cpp:
        * inspector/PageRuntimeAgent.cpp:
        * inspector/TimelineRecordFactory.cpp:
        * inspector/WorkerConsoleAgent.cpp:
        * inspector/WorkerDebuggerAgent.cpp:
        * inspector/WorkerRuntimeAgent.cpp:

2012-03-15  Yury Semikhatsky  <yurys@chromium.org>

        Web Inspector: improve HeapSnapshot._buildReversIndex performance
        https://bugs.webkit.org/show_bug.cgi?id=81224

        Caching node indexes and node count in local variables instead of
        calling getters each time reduces the method run time by
        factor of 1.5

        Reviewed by Pavel Feldman.

        * inspector/front-end/HeapSnapshot.js:
        (WebInspector.HeapSnapshot.prototype._buildReverseIndex):

2012-03-15  Nikolas Zimmermann  <nzimmermann@rim.com>

        SVG Animations update baseVal instead of animVal
        https://bugs.webkit.org/show_bug.cgi?id=12437

        Rubber-stamped by Rob Buis.

        Rename constructFromCopy to constructFromVariant, and currentBaseValue to currentBaseValueVariant, to clarify what it actually does.

        * svg/SVGAnimateElement.cpp:
        (WebCore::SVGAnimateElement::resetToBaseValue):
        * svg/SVGAnimatedLength.cpp:
        (WebCore::SVGAnimatedLengthAnimator::constructFromVariant):
        * svg/SVGAnimatedLength.h:
        (SVGAnimatedLengthAnimator):
        * svg/SVGAnimatedLengthList.cpp:
        (WebCore::SVGAnimatedLengthListAnimator::constructFromVariant):
        * svg/SVGAnimatedLengthList.h:
        (SVGAnimatedLengthListAnimator):
        * svg/SVGAnimatedNumber.cpp:
        (WebCore::SVGAnimatedNumberAnimator::constructFromVariant):
        * svg/SVGAnimatedNumber.h:
        (SVGAnimatedNumberAnimator):
        * svg/SVGAnimatedNumberList.cpp:
        (WebCore::SVGAnimatedNumberListAnimator::constructFromVariant):
        * svg/SVGAnimatedNumberList.h:
        (SVGAnimatedNumberListAnimator):
        * svg/SVGAnimatedTransformList.cpp:
        (WebCore::SVGAnimatedTransformListAnimator::constructFromVariant):
        * svg/SVGAnimatedTransformList.h:
        (SVGAnimatedTransformListAnimator):
        * svg/SVGAnimatedTypeAnimator.h:
        (WebCore::SVGAnimatedTypeAnimator::constructFromVariant):
        * svg/properties/SVGAnimatedListPropertyTearOff.h:
        (WebCore::SVGAnimatedListPropertyTearOff::currentBaseValueVariant):
        * svg/properties/SVGAnimatedProperty.h:
        (SVGAnimatedProperty):
        * svg/properties/SVGAnimatedPropertyTearOff.h:
        (WebCore::SVGAnimatedPropertyTearOff::currentBaseValueVariant):
        * svg/properties/SVGAnimatedStaticPropertyTearOff.h:
        (WebCore::SVGAnimatedStaticPropertyTearOff::currentBaseValueVariant):

2012-03-15  Nikolas Zimmermann  <nzimmermann@rim.com>

        Enable animVal support for SVGNumberList
        https://bugs.webkit.org/show_bug.cgi?id=81219

        Reviewed by Rob Buis.

        Enable animVal support for SVGNumberList. Easy patch, we just need to add the missing
        constructFromCopy() method to SVGAnumatedNumberListAnimator and report AnimatedNumberList
        as supporting animVal.

        Covered by existing tests.

        * svg/SVGAnimatedNumberList.cpp:
        (WebCore::SVGAnimatedNumberListAnimator::constructFromCopy):
        (WebCore):
        * svg/SVGAnimatedNumberList.h:
        (WebCore):
        (SVGAnimatedNumberListAnimator):
        * svg/SVGAnimatedType.cpp:
        (WebCore::SVGAnimatedType::supportsAnimVal):
        (WebCore::SVGAnimatedType::setVariantValue):

2012-03-15  Rob Buis  <rbuis@rim.com>

        Fix cast-align GCC warnings
        https://bugs.webkit.org/show_bug.cgi?id=80790

        Reviewed by Nikolas Zimmermann.

        * platform/graphics/WOFFFileFormat.cpp:
        (WebCore::writeUInt32):
        (WebCore::writeUInt16):
        (WebCore::convertWOFFToSfnt):

2012-03-15  Nikolas Zimmermann  <nzimmermann@rim.com>

        Not reviewed. Forgot to preserve copyrights, per reviewer comment.

        * svg/SVGAnimatedTransformList.cpp:

2012-03-15  Nikolas Zimmermann  <nzimmermann@rim.com>

        Enable animVal support for SVGNumber
        https://bugs.webkit.org/show_bug.cgi?id=81212

        Reviewed by Rob Buis.

        Enable animVal support for SVGNumber. This aligns SVGAnimatedStaticPropertyTearOff,
        with the other SVGListPropertyTearOff & SVGPropertyTearOff, as all support animVal now.
        Converting the rest of the types can be done in small patches now.

        Test: svg/animations/svgnumber-animation-4.html

        * svg/SVGAnimatedNumber.cpp:
        (WebCore::SVGAnimatedNumberAnimator::constructFromCopy):
        (WebCore):
        * svg/SVGAnimatedNumber.h:
        (WebCore):
        (SVGAnimatedNumberAnimator):
        * svg/SVGAnimatedType.cpp:
        (WebCore::SVGAnimatedType::supportsAnimVal):
        (WebCore::SVGAnimatedType::setVariantValue):
        * svg/properties/SVGAnimatedProperty.h:
        (SVGAnimatedProperty):
        * svg/properties/SVGAnimatedStaticPropertyTearOff.h:
        (WebCore::SVGAnimatedStaticPropertyTearOff::animVal):
        (WebCore::SVGAnimatedStaticPropertyTearOff::currentAnimatedValue):
        (SVGAnimatedStaticPropertyTearOff):
        (WebCore::SVGAnimatedStaticPropertyTearOff::currentBaseValue):
        (WebCore::SVGAnimatedStaticPropertyTearOff::animationStarted):
        (WebCore::SVGAnimatedStaticPropertyTearOff::animationEnded):
        (WebCore::SVGAnimatedStaticPropertyTearOff::animationValueWillChange):
        (WebCore::SVGAnimatedStaticPropertyTearOff::animationValueDidChange):
        (WebCore::SVGAnimatedStaticPropertyTearOff::SVGAnimatedStaticPropertyTearOff):

2012-03-15  Nikolas Zimmermann  <nzimmermann@rim.com>

        Enable animVal support for SVGTransformList
        https://bugs.webkit.org/show_bug.cgi?id=80758

        Reviewed by Antti Koivisto.

        Enable animVal support for SVGTransformList. SVGTransformLists are only animatable
        via <animateTransform>, not via <animate> directly. Still we can handle it in the
        same framework as all other types used for <animate>, as we also need proper animVal
        support for <animateTransform>.

        This patch removes the special <animateTransform> implementation, and lets
        SVGAnimateTransformElement inherit from SVGAnimateElement, just like its done
        for SVGAnimateColorElement & SVGSetElement.

        All existing code (calculateFromAndToValues/FromAndByValues/etc..) are moved from
        SVGAnimateTransform right into the SVGAnimatedTransformListAnimator.

        This doesn't change <animateTransform> behavior, it just simplies the code
        and enables animVal support for SVGTransformLists - all covered by existing tests.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.xcodeproj/project.pbxproj:
        * svg/SVGAllInOne.cpp:
        * svg/SVGAnimateElement.cpp:
        (WebCore::SVGAnimateElement::SVGAnimateElement):
        (WebCore::SVGAnimateElement::determineAnimatedPropertyType):
        (WebCore::SVGAnimateElement::calculateAnimatedValue):
        (WebCore::SVGAnimateElement::applyResultsToTarget):
        * svg/SVGAnimateTransformElement.cpp:
        (WebCore::SVGAnimateTransformElement::SVGAnimateTransformElement):
        (WebCore::SVGAnimateTransformElement::hasValidAttributeType):
        (WebCore::SVGAnimateTransformElement::parseAttribute):
        * svg/SVGAnimateTransformElement.h:
        (WebCore::SVGAnimateTransformElement::transformType):
        (SVGAnimateTransformElement):
        * svg/SVGAnimatedTransformList.cpp: Added.
        (WebCore):
        (WebCore::SVGAnimatedTransformListAnimator::SVGAnimatedTransformListAnimator):
        (WebCore::SVGAnimatedTransformListAnimator::constructFromString):
        (WebCore::SVGAnimatedTransformListAnimator::constructFromCopy):
        (WebCore::SVGAnimatedTransformListAnimator::calculateFromAndToValues):
        (WebCore::SVGAnimatedTransformListAnimator::calculateFromAndByValues):
        (WebCore::SVGAnimatedTransformListAnimator::calculateAnimatedValue):
        (WebCore::SVGAnimatedTransformListAnimator::calculateDistance):
        * svg/SVGAnimatedTransformList.h:
        (WebCore):
        (SVGAnimatedTransformListAnimator):
        (WebCore::SVGAnimatedTransformListAnimator::~SVGAnimatedTransformListAnimator):
        * svg/SVGAnimatedType.cpp:
        (WebCore::SVGAnimatedType::~SVGAnimatedType):
        (WebCore::SVGAnimatedType::createTransformList):
        (WebCore):
        (WebCore::SVGAnimatedType::transformList):
        (WebCore::SVGAnimatedType::valueAsString):
        (WebCore::SVGAnimatedType::setValueAsString):
        (WebCore::SVGAnimatedType::supportsAnimVal):
        (WebCore::SVGAnimatedType::setVariantValue):
        * svg/SVGAnimatedType.h:
        (WebCore):
        (SVGAnimatedType):
        * svg/SVGAnimatorFactory.h:
        (WebCore::SVGAnimatorFactory::create):
        * svg/SVGGradientElement.cpp:
        (WebCore::SVGGradientElement::parseAttribute):
        * svg/SVGPatternElement.cpp:
        (WebCore::SVGPatternElement::parseAttribute):
        * svg/SVGStyledTransformableElement.cpp:
        (WebCore::SVGStyledTransformableElement::parseAttribute):
        * svg/SVGTextElement.cpp:
        (WebCore::SVGTextElement::parseAttribute):
        * svg/SVGTransform.cpp:
        (WebCore::SVGTransform::transformTypePrefixForParsing):
        (WebCore):
        (WebCore::SVGTransform::valueAsString):
        * svg/SVGTransform.h:
        (SVGTransform):
        * svg/SVGTransformList.cpp:
        (WebCore::SVGTransformList::parse):
        (WebCore):
        * svg/SVGTransformList.h:
        (SVGTransformList):
        * svg/SVGTransformable.cpp:
        (WebCore::SVGTransformable::parseTransformType):
        * svg/SVGTransformable.h:
        (WebCore):
        * svg/SVGViewSpec.cpp:
        (WebCore::SVGViewSpec::setTransform):

2012-03-13  Nikolas Zimmermann  <nzimmermann@rim.com>

        Enable animVal support for SVGLengthList
        https://bugs.webkit.org/show_bug.cgi?id=80750

        Reviewed by Zoltan Herczeg.

        Introduce animVal support for generic SVGList types. This aligns SVGListProperty with SVGProperty
        in terms of animVal/baseVal support. Use this to turn on animVal support for SVGLengthList.

        Extend all existing SVGLengthList tests to correctly differentiate between baseVal/animVal.

        * svg/SVGAnimateElement.cpp:
        (WebCore::SVGAnimateElement::calculateAnimatedValue):
        * svg/SVGAnimateTransformElement.cpp:
        (WebCore::SVGAnimateTransformElement::resetToBaseValue):
        (WebCore::SVGAnimateTransformElement::calculateAnimatedValue):
        (WebCore::SVGAnimateTransformElement::applyResultsToTarget):
        * svg/SVGAnimatedLengthList.cpp:
        (WebCore::SVGAnimatedLengthListAnimator::constructFromCopy):
        (WebCore):
        * svg/SVGAnimatedLengthList.h:
        (WebCore):
        (SVGAnimatedLengthListAnimator):
        * svg/SVGAnimatedType.cpp:
        (WebCore::SVGAnimatedType::supportsAnimVal):
        (WebCore::SVGAnimatedType::setVariantValue):
        * svg/SVGAnimatedType.h:
        * svg/SVGAnimationElement.cpp:
        (WebCore::SVGAnimationElement::applyAnimatedValue):
        * svg/properties/SVGAnimatedListPropertyTearOff.h:
        (SVGAnimatedListPropertyTearOff):
        (WebCore::SVGAnimatedListPropertyTearOff::baseVal):
        (WebCore::SVGAnimatedListPropertyTearOff::animVal):
        (WebCore::SVGAnimatedListPropertyTearOff::removeItemFromList):
        (WebCore::SVGAnimatedListPropertyTearOff::detachListWrappers):
        (WebCore::SVGAnimatedListPropertyTearOff::currentAnimatedValue):
        (WebCore::SVGAnimatedListPropertyTearOff::currentBaseValue):
        (WebCore::SVGAnimatedListPropertyTearOff::animationStarted):
        (WebCore::SVGAnimatedListPropertyTearOff::animationEnded):
        (WebCore::SVGAnimatedListPropertyTearOff::synchronizeWrappersIfNeeded):
        (WebCore::SVGAnimatedListPropertyTearOff::animationValueWillChange):
        (WebCore::SVGAnimatedListPropertyTearOff::animationValueDidChange):
        * svg/properties/SVGAnimatedPathSegListPropertyTearOff.h:
        (WebCore::SVGAnimatedPathSegListPropertyTearOff::baseVal):
        (WebCore::SVGAnimatedPathSegListPropertyTearOff::animVal):
        * svg/properties/SVGAnimatedProperty.h:
        (WebCore::SVGAnimatedProperty::isAnimating):
        (SVGAnimatedProperty):
        (WebCore::SVGAnimatedProperty::animationValueWillChange):
        (WebCore::SVGAnimatedProperty::animationValueDidChange):
        (WebCore::SVGAnimatedProperty::~SVGAnimatedProperty):
        (WebCore::SVGAnimatedProperty::SVGAnimatedProperty):
        * svg/properties/SVGAnimatedPropertyTearOff.h:
        (SVGAnimatedPropertyTearOff):
        (WebCore::SVGAnimatedPropertyTearOff::baseVal):
        (WebCore::SVGAnimatedPropertyTearOff::animVal):
        (WebCore::SVGAnimatedPropertyTearOff::currentAnimatedValue):
        (WebCore::SVGAnimatedPropertyTearOff::animationStarted):
        (WebCore::SVGAnimatedPropertyTearOff::animationEnded):
        (WebCore::SVGAnimatedPropertyTearOff::animationValueWillChange):
        (WebCore::SVGAnimatedPropertyTearOff::animationValueDidChange):
        (WebCore::SVGAnimatedPropertyTearOff::SVGAnimatedPropertyTearOff):
        * svg/properties/SVGAnimatedTransformListPropertyTearOff.h:
        (WebCore::SVGAnimatedTransformListPropertyTearOff::baseVal):
        (WebCore::SVGAnimatedTransformListPropertyTearOff::animVal):
        * svg/properties/SVGListProperty.h:
        (WebCore::SVGListProperty::detachListWrappers):
        (SVGListProperty):
        (WebCore::SVGListProperty::setValuesAndWrappers):
        (WebCore::SVGListProperty::clearValues):
        (WebCore::SVGListProperty::clearValuesAndWrappers):
        (WebCore::SVGListProperty::numberOfItems):
        (WebCore::SVGListProperty::initializeValues):
        (WebCore::SVGListProperty::initializeValuesAndWrappers):
        (WebCore::SVGListProperty::canGetItem):
        (WebCore::SVGListProperty::getItemValues):
        (WebCore::SVGListProperty::getItemValuesAndWrappers):
        (WebCore::SVGListProperty::insertItemBeforeValues):
        (WebCore::SVGListProperty::insertItemBeforeValuesAndWrappers):
        (WebCore::SVGListProperty::canReplaceItem):
        (WebCore::SVGListProperty::replaceItemValues):
        (WebCore::SVGListProperty::replaceItemValuesAndWrappers):
        (WebCore::SVGListProperty::canRemoveItem):
        (WebCore::SVGListProperty::removeItemValues):
        (WebCore::SVGListProperty::removeItemValuesAndWrappers):
        (WebCore::SVGListProperty::appendItemValues):
        (WebCore::SVGListProperty::appendItemValuesAndWrappers):
        (WebCore::SVGListProperty::values):
        (WebCore::SVGListProperty::wrappers):
        (WebCore::SVGListProperty::SVGListProperty):
        * svg/properties/SVGListPropertyTearOff.h:
        (SVGListPropertyTearOff):
        (WebCore::SVGListPropertyTearOff::create):
        (WebCore::SVGListPropertyTearOff::removeItemFromList):
        (WebCore::SVGListPropertyTearOff::clear):
        (WebCore::SVGListPropertyTearOff::initialize):
        (WebCore::SVGListPropertyTearOff::insertItemBefore):
        (WebCore::SVGListPropertyTearOff::replaceItem):
        (WebCore::SVGListPropertyTearOff::appendItem):
        (WebCore::SVGListPropertyTearOff::SVGListPropertyTearOff):
        (WebCore::SVGListPropertyTearOff::commitChange):
        * svg/properties/SVGPathSegListPropertyTearOff.cpp:
        (WebCore::SVGPathSegListPropertyTearOff::clear):
        (WebCore::SVGPathSegListPropertyTearOff::getItem):
        (WebCore::SVGPathSegListPropertyTearOff::removeItem):
        * svg/properties/SVGPathSegListPropertyTearOff.h:
        (WebCore::SVGPathSegListPropertyTearOff::create):
        (WebCore::SVGPathSegListPropertyTearOff::removeItemFromList):
        (SVGPathSegListPropertyTearOff):
        (WebCore::SVGPathSegListPropertyTearOff::initialize):
        (WebCore::SVGPathSegListPropertyTearOff::insertItemBefore):
        (WebCore::SVGPathSegListPropertyTearOff::replaceItem):
        (WebCore::SVGPathSegListPropertyTearOff::appendItem):
        (WebCore::SVGPathSegListPropertyTearOff::SVGPathSegListPropertyTearOff):
        (WebCore::SVGPathSegListPropertyTearOff::commitChange):
        * svg/properties/SVGPropertyInfo.h:
        * svg/properties/SVGStaticListPropertyTearOff.h:
        (SVGStaticListPropertyTearOff):
        (WebCore::SVGStaticListPropertyTearOff::clear):
        (WebCore::SVGStaticListPropertyTearOff::initialize):
        (WebCore::SVGStaticListPropertyTearOff::getItem):
        (WebCore::SVGStaticListPropertyTearOff::insertItemBefore):
        (WebCore::SVGStaticListPropertyTearOff::replaceItem):
        (WebCore::SVGStaticListPropertyTearOff::removeItem):
        (WebCore::SVGStaticListPropertyTearOff::appendItem):
        (WebCore::SVGStaticListPropertyTearOff::SVGStaticListPropertyTearOff):
        (WebCore::SVGStaticListPropertyTearOff::commitChange):
        * svg/properties/SVGTransformListPropertyTearOff.h:
        (WebCore::SVGTransformListPropertyTearOff::create):
        (WebCore::SVGTransformListPropertyTearOff::createSVGTransformFromMatrix):
        (WebCore::SVGTransformListPropertyTearOff::consolidate):
        (WebCore::SVGTransformListPropertyTearOff::SVGTransformListPropertyTearOff):

2012-03-14  Chris Fleizach  <cfleizach@apple.com>

        AXDescription for HTML5 footer
        https://bugs.webkit.org/show_bug.cgi?id=78967

        Return a unique role description for the footer element.

        Reviewed by Beth Dakin.

        Test: platform/mac/accessibility/footer-roledescription.html

        * English.lproj/Localizable.strings:+
        * accessibility/AccessibilityObject.h:
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::determineAccessibilityRole):
        * accessibility/mac/WebAccessibilityObjectWrapper.mm:
        (createAccessibilityRoleMap):
        (-[WebAccessibilityObjectWrapper subrole]):
        (-[WebAccessibilityObjectWrapper roleDescription]):
        * platform/LocalizedStrings.cpp:
        (WebCore::AXFooterRoleDescriptionText):
        (WebCore):
        * platform/LocalizedStrings.h:
        (WebCore):
        * platform/blackberry/LocalizedStringsBlackBerry.cpp:
        (WebCore::AXFooterRoleDescriptionText):
        (WebCore):
        * platform/efl/LocalizedStringsEfl.cpp:
        (WebCore::AXFooterRoleDescriptionText):
        (WebCore):
        * platform/gtk/LocalizedStringsGtk.cpp:
        (WebCore::AXFooterRoleDescriptionText):
        (WebCore):

2012-03-14  Mark Rowe  <mrowe@apple.com>

        <http://webkit.org/b/81193> Ensure libWebCoreTestSupport.dylib's library identifier is set appropriately for all configurations.

        Reviewed by Dan Bernstein.

        * Configurations/WebCoreTestSupport.xcconfig: Switch to setting DYLIB_INSTALL_NAME_BASE
        rather than LD_DYLIB_INSTALL_NAME. The latter is derived from the former. Ensure that
        DYLIB_INSTALL_NAME_BASE is also set for the Production configuration.

2012-03-14  Chris Fleizach  <cfleizach@apple.com>

        AXDescription for ARIA role contentinfo incorrect
        https://bugs.webkit.org/show_bug.cgi?id=78967

        Reviewed by Beth Dakin.

        Test: platform/mac/accessibility/aria-grouping-roles.html

        * English.lproj/Localizable.strings:
        * platform/LocalizedStrings.cpp:
        (WebCore::AXARIAContentGroupText):

2012-03-14  Chris Fleizach  <cfleizach@apple.com>

        AX: ARIA tables need to support selected rows attribute/select rows changed notification
        https://bugs.webkit.org/show_bug.cgi?id=79821

        Reviewed by Beth Dakin.

        Test: platform/mac/accessibility/selected-rows-table.html

        * accessibility/AccessibilityARIAGrid.h:
        (WebCore::AccessibilityARIAGrid::isMultiSelectable):
        (AccessibilityARIAGrid):
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::ariaSelectedRows):
        * accessibility/AccessibilityTableRow.cpp:
        (WebCore::AccessibilityTableRow::observableObject):
        (WebCore):
        * accessibility/AccessibilityTableRow.h:
        (AccessibilityTableRow):
        * accessibility/mac/AXObjectCacheMac.mm:
        (WebCore::AXObjectCache::postPlatformNotification):

2012-03-14  James Robinson  <jamesr@chromium.org>

        Platforms without USE(REQUEST_ANIMATION_FRAME_DISPLAY_MONITOR) don't need to query the page's displayID
        https://bugs.webkit.org/show_bug.cgi?id=81187

        Reviewed by Simon Fraser.

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

2012-03-14  Chris Fleizach  <cfleizach@apple.com>

        AX: embedded attachments do not report their parents correctly
        https://bugs.webkit.org/show_bug.cgi?id=80132

        When a WebHTMLView has embedded attachments in it, the AXParent of those attachments is wrong.
        It usually points to the AXScrollView of the web area. That's because there has been no way for WebCore to
        communicate that this attachment view should actually make believe that it's parent is within the WebCore AX tree.

        We can fix that by overriding the AXParent in overriden attributes for items that are attachments.

        Reviewed by Beth Dakin.

        Not able to construct a layout test because the problem only manifests itself when an AX client connects to WebKit
        through the IPC mechanism.

        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::detachFromParent):
        * accessibility/AccessibilityObject.h:
        (AccessibilityObject):
        (WebCore::AccessibilityObject::overrideAttachmentParent):
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::updateAttachmentViewParents):
        (WebCore::AccessibilityRenderObject::addChildren):
        * accessibility/AccessibilityRenderObject.h:
        (AccessibilityRenderObject):
        * accessibility/mac/AccessibilityObjectMac.mm:
        (WebCore::AccessibilityObject::overrideAttachmentParent):

2012-03-14  Ryosuke Niwa  <rniwa@webkit.org>

        Improve ContainerNode's collectNodes() performance
        https://bugs.webkit.org/show_bug.cgi?id=80706

        Reviewed by Antti Koivisto.

        Bump up the size of stack allocated buffer from 1 to 11. According to the rough study I conducted,
        this would cover 99.5% of all node collection.

        Note: the actual code change was made in r110797 but I somehow mangled my patches.

        * dom/ContainerNode.cpp:
        (WebCore):

2012-03-14  Seo Sanghyeon  <sh4.seo@samsung.com>

        Cleanup semicolons in IDLs
        https://bugs.webkit.org/show_bug.cgi?id=81129

        Reviewed by Kentaro Hara.

        No tests. No change in behavior.

        * svg/SVGAnimateColorElement.idl:
        * svg/SVGAnimateElement.idl:
        * svg/SVGAnimateTransformElement.idl:
        * svg/SVGAnimatedRect.idl:

2012-03-14  Hayato Ito  <hayato@chromium.org>

        Make ShadowRoot.activeElement return null if it does not contain a focused element.
        https://bugs.webkit.org/show_bug.cgi?id=81097

        Reviewed by Dimitri Glazkov.

        * dom/TreeScope.cpp:
        (WebCore::TreeScope::activeElement):

2012-03-14  Matt Falkenhagen  <falken@chromium.org>

        Allow per-script font settings to be specified in layout tests
        https://bugs.webkit.org/show_bug.cgi?id=78184

        Reviewed by Hajime Morita.

        This adds per-script font settings to InternalSettings, so it can be used in layout tests instead of
        the per-script font settings support in DumpRenderTree overridePreference, which has only been implemented
        for Chromium so far.

        Test: changed fast/text/international/locale-sensitive-fonts.html to use InternalSettings
        instead of overridePreference.

        * WebCore.exp.in: Added symbols.
        * platform/text/LocaleToScriptMapping.h: Added scriptNameToCode used by InternalSettings.
        (WebCore):
        * platform/text/LocaleToScriptMappingDefault.cpp:
        (WebCore::scriptNameToCode):
        (WebCore::localeToScriptCodeForFontSelection):
        * platform/text/LocaleToScriptMappingICU.cpp:
        (WebCore::scriptNameToCode):
        (WebCore):
        * testing/InternalSettings.cpp: Added per-script font settings.
        (WebCore):
        (WebCore::setFontFamily):
        (WebCore::InternalSettings::setStandardFontFamily):
        (WebCore::InternalSettings::setSerifFontFamily):
        (WebCore::InternalSettings::setSansSerifFontFamily):
        (WebCore::InternalSettings::setFixedFontFamily):
        (WebCore::InternalSettings::setCursiveFontFamily):
        (WebCore::InternalSettings::setFantasyFontFamily):
        (WebCore::InternalSettings::setPictographFontFamily):
        * testing/InternalSettings.h:
        (InternalSettings):
        * testing/InternalSettings.idl:

2012-03-14  Kwonjin Jeong  <gram@company100.net>

        Remove obsolete constructors of CSSPrimitiveValue class.
        https://bugs.webkit.org/show_bug.cgi?id=80971

        Remove constructors of CSSPrimitiveValue that can't be
        reached.

        Reviewed by Andreas Kling.

        * css/CSSPrimitiveValueMappings.h:

2012-03-14  Igor Oliveira  <igor.o@sisa.samsung.com>

        Split the extra logic out of RenderBlock::updateFirstLetter
        https://bugs.webkit.org/show_bug.cgi?id=80772

        Reviewed by Julien Chaffraix.

        No change in behavior expected.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::updateFirstLetterStyle):
        (WebCore::RenderBlock::createFirstLetterRenderer):
        (WebCore::RenderBlock::updateFirstLetter):
        (WebCore):
        * rendering/RenderBlock.h:
        (RenderBlock):

2012-03-14  Anders Carlsson  <andersca@apple.com>

        Fix build.

        * html/track/TextTrackList.cpp:

2012-03-14  Ryosuke Niwa  <rniwa@webkit.org>

        Build fix.

        * dom/DynamicNodeList.h:
        (DynamicSubtreeNodeList):

2012-03-14  Ryosuke Niwa  <rniwa@webkit.org>

        (register|unregister)DynamicSubtreeNodeList should be called only for labels and regions node lists
        https://bugs.webkit.org/show_bug.cgi?id=80900

        Reviewed by Andreas Kling.

        Cleaned up invalidation code for dynamic node lists. It seems like the existing code was utterly confused
        about the lifetime of node lists and caches within them. First, register/unregsiterDynamicSubtreeNodeList
        are called for all dynamic node lists even though it's only useful for labels and region node lists since
        it's a mechanism to allow node lists to be invalidated at a node to which the node list doesn't belong.

        Second, some node lists had dedicated member functions on Node to explicitly invalidate caches in
        parsedAttribute. However, this is redundant because invalidateNodeListsCacheAfterAttributeChanged should be
        able to invalidate caches when the attribute value changes. This patch gets rid of the last instance of such
        function in HTMLLabelElement.

        And finally, this patch restricts the callers of DynamicSubtreeNodeList::invalidateCache to be member
        functions of NodeListsNodeData (now friends of DynamicSubtreeNodeList) to allow futher refactoring.

        * dom/DynamicNodeList.cpp:
        (WebCore::DynamicSubtreeNodeList::DynamicSubtreeNodeList): Don't register the node list since it's only
        useful for labels and region node lists.
        (WebCore::DynamicSubtreeNodeList::~DynamicSubtreeNodeList): Ditto.
        * dom/DynamicNodeList.h:
        (DynamicSubtreeNodeList):
        * dom/Node.cpp:
        (WebCore):
        (WebCore::Node::registerDynamicSubtreeNodeList): The comment about now we have to invalidate caches
        when there had no caches is incorrect because registerDynamicSubtreeNodeList is called when a node list
        is initially created. Also, if the tree scope didn't have any caches, then this is the first node list
        to be added to the list, so there's no point in calling InvalidateCaches (no-op).
        (WebCore::Node::unregisterDynamicSubtreeNodeList):
        (WebCore::Node::invalidateNodeListsCacheAfterAttributeChanged): Take care of "for" content attribute.
        Also remove the redundant call to removeNodeListCacheIfPossible since we only invalidates node lists
        and never remove entries from NodeListsNodeData in this function.
        (WebCore::Node::invalidateNodeListsCacheAfterChildrenChanged): The call to removeNodeListCacheIfPossible
        is also redundant here. Also removed the invalidation of m_listsWithCaches since it's already done in
        invalidateCaches via invalidateCachesThatDependOnAttributes.
        (WebCore::NodeListsNodeData::invalidateCaches): Removed the invalidation of m_labelsNodeListCache. It's
        done in invalidateCachesThatDependOnAttributes.
        (WebCore::NodeListsNodeData::invalidateCachesThatDependOnAttributes): Invalidate
        m_listsInvalidatedAtDocument, which is renamed from m_listsWithCaches.
        (WebCore::NodeListsNodeData::isEmpty):
        * dom/Node.h:
        (Node):
        * dom/NodeRareData.h:
        (NodeListsNodeData):
        * html/HTMLLabelElement.cpp:
        (WebCore): Removed parseAttribute since the invalidation labels node list is now done by
        invalidateNodeListsCacheAfterAttributeChanged and invalidateNodeListsCacheAfterChildrenChanged.
        * html/HTMLLabelElement.h:
        (HTMLLabelElement):
        * html/LabelsNodeList.cpp:
        (WebCore::LabelsNodeList::LabelsNodeList):
        (WebCore::LabelsNodeList::~LabelsNodeList):

2012-03-14  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r110565.
        http://trac.webkit.org/changeset/110565
        https://bugs.webkit.org/show_bug.cgi?id=81173

        chromium deps are now far enough along that the original cl
        should work (Requested by thakis on #webkit).

        * WebCore.gyp/mac/adjust_visibility.sh:

2012-03-14  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r110641.
        http://trac.webkit.org/changeset/110641
        https://bugs.webkit.org/show_bug.cgi?id=81170

        Causes an ASAN failure (Requested by abarth on #webkit).

        * Target.pri:
        * UseV8.cmake:
        * WebCore.gypi:
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateHeader):
        (GenerateImplementation):
        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateHeader):
        (GenerateNamedConstructorCallback):
        (GenerateImplementation):
        * bindings/scripts/IDLAttributes.txt:
        * bindings/scripts/test/V8/V8Float64Array.cpp:
        (WebCore):
        * bindings/scripts/test/V8/V8Float64Array.h:
        (V8Float64Array):
        * bindings/scripts/test/V8/V8TestActiveDOMObject.cpp:
        (WebCore):
        * bindings/scripts/test/V8/V8TestActiveDOMObject.h:
        (V8TestActiveDOMObject):
        * bindings/scripts/test/V8/V8TestCustomNamedGetter.cpp:
        (WebCore):
        * bindings/scripts/test/V8/V8TestCustomNamedGetter.h:
        (V8TestCustomNamedGetter):
        * bindings/scripts/test/V8/V8TestEventConstructor.cpp:
        (WebCore):
        * bindings/scripts/test/V8/V8TestEventConstructor.h:
        (V8TestEventConstructor):
        * bindings/scripts/test/V8/V8TestEventTarget.cpp:
        (WebCore):
        * bindings/scripts/test/V8/V8TestEventTarget.h:
        (V8TestEventTarget):
        * bindings/scripts/test/V8/V8TestInterface.cpp:
        (WebCore):
        * bindings/scripts/test/V8/V8TestInterface.h:
        (V8TestInterface):
        * bindings/scripts/test/V8/V8TestMediaQueryListListener.cpp:
        (WebCore):
        * bindings/scripts/test/V8/V8TestMediaQueryListListener.h:
        (V8TestMediaQueryListListener):
        * bindings/scripts/test/V8/V8TestNamedConstructor.cpp:
        (WebCore):
        * bindings/scripts/test/V8/V8TestNamedConstructor.h:
        (V8TestNamedConstructor):
        * bindings/scripts/test/V8/V8TestObj.cpp:
        (WebCore):
        * bindings/scripts/test/V8/V8TestObj.h:
        (V8TestObj):
        * bindings/scripts/test/V8/V8TestSerializedScriptValueInterface.cpp:
        (WebCore):
        * bindings/scripts/test/V8/V8TestSerializedScriptValueInterface.h:
        (V8TestSerializedScriptValueInterface):
        * bindings/v8/NPV8Object.cpp:
        (WebCore::npObjectTypeInfo):
        * bindings/v8/V8GCController.cpp:
        (WebCore::GrouperVisitor::visitDOMWrapper):
        * bindings/v8/WrapperTypeInfo.h:
        (WebCore):
        (WrapperTypeInfo):
        * bindings/v8/custom/V8CSSStyleSheetCustom.cpp: Copied from Source/WebCore/bindings/v8/custom/V8StyleSheetCustom.cpp.
        (WebCore):
        (WebCore::toV8):
        * bindings/v8/custom/V8DOMStringMapCustom.cpp:
        (WebCore::toV8):
        (WebCore):
        * bindings/v8/custom/V8DOMTokenListCustom.cpp: Copied from Source/WebCore/bindings/v8/custom/V8StyleSheetCustom.cpp.
        (WebCore):
        (WebCore::toV8):
        * bindings/v8/custom/V8HTMLImageElementConstructor.cpp:
        (WebCore):
        * bindings/v8/custom/V8NamedNodeMapCustom.cpp:
        (WebCore::toV8):
        (WebCore):
        * bindings/v8/custom/V8StyleSheetCustom.cpp:
        (WebCore::toV8):
        * css/CSSStyleSheet.idl:
        * css/StyleSheet.idl:
        * dom/DOMStringMap.idl:
        * dom/NamedNodeMap.idl:
        * html/DOMTokenList.idl:
        * html/track/TextTrackList.cpp:
        * html/track/TextTrackList.idl:

2012-03-13  Jon Lee  <jonlee@apple.com>

        Separate NOTIFICATIONS and LEGACY_NOTIFICATIONS
        https://bugs.webkit.org/show_bug.cgi?id=80922
        <rdar://problem/11035082>

        Reviewed by Jian Li.

        You can include either NOTIFICATIONS or LEGACY_NOTIFICATIONS and have a complete API.
        LEGACY_NOTIFICATIONS should cover all of the previous functionality, and NOTIFICATIONS will cover the
        new API. Therefore, APIs that are common between the two will have:
        #if ENABLE(NOTIFICATIONS) || ENABLE(LEGACY_NOTIFICATIONS)

        This patch initially sets both to be exactly the same. As other bugs with patches begin to migrate to
        the new API, the defines will begin to split. This allows ports to decide which set of APIs to include.

        * bindings/scripts/InFilesCompiler.pm: Update the script to handle the "|" flag in a conditional.
        (preferredConditional):
        (conditionalStringFromAttributeValue):
        (generateInterfacesHeader):
        (generateHeadersHeader):

        Update everything to be #if ENABLE(NOTIFICATIONS) || ENABLE(LEGACY_NOTIFICATIONS)
        * WebCore.exp.in:
        * bindings/cpp/WebDOMEventTarget.cpp:
        (toWebKit):
        * bindings/js/JSDesktopNotificationsCustom.cpp:
        * bindings/v8/custom/V8NotificationCenterCustom.cpp:
        * dom/EventTargetFactory.in:
        * notifications/Notification.cpp:
        * notifications/Notification.h:
        * notifications/Notification.idl:
        * notifications/NotificationCenter.cpp:
        * notifications/NotificationCenter.h:
        * notifications/NotificationCenter.idl:
        * notifications/NotificationContents.h:
        * notifications/NotificationController.cpp:
        * notifications/NotificationController.h:
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::~DOMWindow):
        (WebCore::DOMWindow::willDetachPage):
        (WebCore::DOMWindow::disconnectDOMWindowProperties):
        (WebCore::DOMWindow::clearDOMWindowProperties):
        (WebCore):
        * page/DOMWindow.h:
        (DOMWindow):
        * page/DOMWindow.idl:
        * page/Frame.cpp:
        (WebCore::Frame::willDetachPage):
        (WebCore::Frame::transferChildFrameToNewDocument):
        * workers/WorkerContext.cpp:
        (WebCore::WorkerContext::~WorkerContext):
        (WebCore):
        * workers/WorkerContext.h:
        (WorkerContext):
        * workers/WorkerContext.idl:
        * workers/WorkerThread.cpp:
        (WebCore::WorkerThread::WorkerThread):
        * workers/WorkerThread.h:
        (WorkerThread):

2012-03-14  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r110744.
        http://trac.webkit.org/changeset/110744
        https://bugs.webkit.org/show_bug.cgi?id=81168

        Causes many WebAudio tests to crash in debug (Requested by
        abarth on #webkit).

        * platform/audio/Biquad.cpp:
        (WebCore::Biquad::process):

2012-03-14  Brady Eidson  <beidson@apple.com>

        <rdar://problem/11045584> and https://bugs.webkit.org/show_bug.cgi?id=81166
        Repro crash in compositing/iframes/page-cache-layer-tree.html

        Reviewed by Sam Weinig.

        No new tests. (Discovered from and covered by existing test)

        ScriptCachedFrameData doesn't need to keep a DOMWindow:
        * bindings/js/ScriptCachedFrameData.cpp:
        (WebCore::ScriptCachedFrameData::ScriptCachedFrameData):
        * bindings/js/ScriptCachedFrameData.h:
        (ScriptCachedFrameData):

        CachedFrame should grab it off the Frame directly and store it locally:
        * history/CachedFrame.cpp:
        (WebCore::CachedFrame::CachedFrame):
        * history/CachedFrame.h:
        (WebCore::CachedFrameBase::domWindow):
        (CachedFrameBase):

2012-03-14  Tony Chang  <tony@chromium.org>

        fix negative flexing in auto sized columns
        https://bugs.webkit.org/show_bug.cgi?id=80069

        Reviewed by Ojan Vafai.

        New test cases in css3/flexbox/columns-auto-size.html.

        * rendering/RenderFlexibleBox.cpp:
        (WebCore):
        (WebCore::RenderFlexibleBox::computeAvailableFreeSpace): Properly compute this for auto sizing columns. Previously, we would always return 0.
        (WebCore::RenderFlexibleBox::layoutFlexItems):
        (WebCore::RenderFlexibleBox::runFreeSpaceAllocationAlgorithm): Drop an unnecessary check against undefined. isSpecified covers this for us.
        * rendering/RenderFlexibleBox.h:
        (RenderFlexibleBox):

2012-03-14  Grace Ku  <gracek@codeaurora.org>

        Incorrect handling of sizes in "em" when first-line changes font size
        https://bugs.webkit.org/show_bug.cgi?id=79526

        Reviewed by Eric Seidel.

        When a first-line pseudo class changes the font size, the "em" unit is handled incorrectly.
        It uses the paragraph's original font size (the size of the rest of the paragraph) rather than
        the font-size of the first-line of the paragraph.

        This was corrected by checking if the InlineFlowBox was the first line using the existing
        InlineFlowBox::isFirstLineStyle() function. The corrected behaviour matches Gecko and Presto.
        Trident seems to get it half-wrong in the use case we are testing, painting the correct width for
        the border but leaving the wrong amount of space.

        The CSS specification doc at the time of this patch specifies that ':first-line' should only support
        certain properties, though UAs may choose to apply more properties. Furthermore, the spec does not
        define the exact rendering of all cases of ':first-line'. It notes that a more precise definition
        may appear in future revisions.

        Test: fast/css/pseudo-first-line-border-width.html

        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::paintBoxDecorations):
        * rendering/InlineFlowBox.h:
        (WebCore::InlineFlowBox::borderLogicalLeft):
        (WebCore::InlineFlowBox::borderLogicalRight):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paintBorder):
        (WebCore::RenderBoxModelObject::getBorderEdgeInfo):
        (WebCore::RenderBoxModelObject::borderObscuresBackgroundEdge):
        (WebCore::RenderBoxModelObject::borderObscuresBackground):
        * rendering/RenderBoxModelObject.h:
        (RenderBoxModelObject):

2012-03-14  Martin Robinson  <mrobinson@igalia.com>

        Fix the TextureMapper build for GTK+.

        No new tests. This is just a build fix.

        * platform/graphics/cairo/GraphicsContext3DPrivate.cpp:
        (WebCore::GraphicsContext3DPrivate::paintToTextureMapper):
        * platform/graphics/texmap/TextureMapper.h:

2012-03-12  Martin Robinson  <mrobinson@igalia.com>

        [GTK] Menulist buttons have separators even when the theme turns them off
        https://bugs.webkit.org/show_bug.cgi?id=80668

        Reviewed by Daniel Bates.

        No new tests. GTK+ theme differences are notoriously difficult
        to test, because consistent results depend on having certain themes
        and certain versions of themes installed.

        Instead of using the GTK_TYPE_BUTTON and GTK_TYPE_SEPARATOR tags to get the
        style context, use GTK_TYPE_COMBO_BOX which should provide more accurate theme settings.

        * platform/gtk/RenderThemeGtk3.cpp:
        (WebCore::getComboBoxMetrics): Get metrics from a GTK_TYPE_COMBO_BOX style context.
        (WebCore::RenderThemeGtk::paintMenuList): Get separator settings from the GTK_TYPE_COMBO_BOX style context.

2012-03-14  Levi Weintraub  <leviw@chromium.org>

        Implement proper sub-pixel support in RenderFileUploadControl
        https://bugs.webkit.org/show_bug.cgi?id=80881

        Reviewed by Dimitri Glazkov.

        Correcting improper usage of LayoutUnits when interacting with the graphics context
        and platform code. Specifically:
        - pixel snapping the clip rect and paint offsets before sending values to the
          graphics context in paintObject.
        - using on-screen (pixel snapped) values to pass off to platform code to determine
          the max length of the filename to be drawn.

        No new tests. No change in behavior.

        * rendering/RenderFileUploadControl.cpp:
        (WebCore::nodeWidth):
        (WebCore::RenderFileUploadControl::maxFilenameWidth):
        (WebCore::RenderFileUploadControl::paintObject):

2012-03-14  Joseph Pecoraro  <pecoraro@apple.com>

        [JSC] Web Inspector: CRASH running $0, $1, etc before they are set
        https://bugs.webkit.org/show_bug.cgi?id=81082

        Don't return an invalid JSValue. Check if the ScriptValue
        has no value and return undefined in that case.

        Reviewed by Pavel Feldman.

        Updated test: inspector/console/command-line-api.html

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

2012-03-14  James Robinson  <jamesr@chromium.org>

        [chromium] Remove canRecoverFromContextLoss attribute, it's unused
        https://bugs.webkit.org/show_bug.cgi?id=81158

        Reviewed by Stephen White.

        Canvas accelerated no longer depends on the canRecoverFromContextLoss attribute after r110716.

        * platform/graphics/GraphicsContext3D.h:
        (WebCore::GraphicsContext3D::Attributes::Attributes):
        (Attributes):
        * platform/graphics/gpu/SharedGraphicsContext3D.cpp:
        (WebCore::SharedGraphicsContext3DImpl::get):

2012-03-14  Jer Noble  <jer.noble@apple.com>

        Opening a URL in a MediaDocument does not propagate MIME type info to media element
        https://bugs.webkit.org/show_bug.cgi?id=81148

        Reviewed by Eric Carlson.

        Test: http/tests/media/media-document.html

        Pass through the mime type from the DocumentLoader into the <source type=""> attribute of the
        generated video element. 

        * html/MediaDocument.cpp:
        (WebCore::MediaDocumentParser::createDocumentStructure):

2012-03-14  Stephen White  <senorblanco@chromium.org>

        [chromium] Fix accelerated Canvas2D with threaded compositing.
        https://bugs.webkit.org/show_bug.cgi?id=80998

        Reviewed by James Robinson.

        Covered by unit tests Canvas2DLayerChromiumTest and
        TreeSynchronizerTest.

        * platform/graphics/chromium/Canvas2DLayerChromium.cpp:
        (WebCore::Canvas2DLayerChromium::paintContentsIfDirty):
        (WebCore):
        Delay creation of the front texture for double-buffering until the
        first call to paintContentsIfDirty().
        * platform/graphics/chromium/Canvas2DLayerChromium.h:
        (Canvas2DLayerChromium):
        Remove setTextureManager() and setLayerTreeHost(), since their job
        has been subsumed by paintContentsIfDirty().
        * platform/graphics/chromium/TreeSynchronizer.cpp:
        (WebCore::TreeSynchronizer::updateScrollbarLayerPointersRecursive):
        Perform an early-out if the passed-in layer is NULL.

2012-03-14  Mark Pilgrim  <pilgrim@chromium.org>

        Move EntriesCallback to Modules/filesystem/
        https://bugs.webkit.org/show_bug.cgi?id=81032

        Reviewed by Adam Barth.

        No new tests, all existing tests pass.

        * CMakeLists.txt:
        * DerivedSources.make:
        * DerivedSources.pri:
        * GNUmakefile.list.am:
        * Modules/filesystem/EntriesCallback.h: Copied from Source/WebCore/fileapi/EntriesCallback.h.
        * Modules/filesystem/EntriesCallback.idl: Copied from Source/WebCore/fileapi/EntriesCallback.idl.
        * Target.pri:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * fileapi/EntriesCallback.h: Removed.
        * fileapi/EntriesCallback.idl: Removed.

2012-03-14  Tony Chang  <tony@chromium.org>

        multiline column flexbox with auto height wrap too much
        https://bugs.webkit.org/show_bug.cgi?id=80929

        Reviewed by David Hyatt.

        Test: css3/flexbox/multiline-column-auto.html

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::computeLogicalHeightUsing):
        (WebCore):
        (WebCore::RenderBox::computeContentLogicalHeightUsing): Pull out into a separate method.
        * rendering/RenderBox.h:
        (RenderBox):
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::lineBreakLength): Compute the value based on height & max-height for column layout.
        (WebCore):
        (WebCore::RenderFlexibleBox::computeNextFlexLine):
        * rendering/RenderFlexibleBox.h:
        (RenderFlexibleBox):

2012-03-14  Xingnan Wang  <xingnan.wang@intel.com>

        Optimize the multiply-add in Biquad.cpp::process
        https://bugs.webkit.org/show_bug.cgi?id=75528

        Reviewed by Chris Rogers.

        Pipeline the multiply-add with SSE2 instructions and get about 20% improvement for the function.

        * platform/audio/Biquad.cpp:
        (WebCore::Biquad::process):

2012-03-14  James Robinson  <jamesr@chromium.org>

        [Chromium] Layout Test compositing/repaint/opacity-between-absolute.html is flaky
        https://bugs.webkit.org/show_bug.cgi?id=79823

        Reviewed by Adrienne Walker.

        LayerRendererChromium was storing a weak pointer to the current render surface in m_currentRenderSurface and
        using this in useRenderSurface() to avoid rebinding if we called useRenderSurface() multiple times in a row on
        the same surface. This pointer was never cleared, so if any subsequent surface landed at the same address this
        caching would misbehave and we'd fail to correctly initialize the new render surface. The caching wasn't
        actually buying us anything anyway since we only call useRenderSurface() once per surface per frame and we
        always set the viewport for the default render surface.

        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::beginDrawingFrame):
        (WebCore::LayerRendererChromium::useRenderSurface):

2012-03-14  Zalan Bujtas  <zbujtas@gmail.com>

        Frame flattening ASSERT(!needsLayout()) in FrameView::paintContents()
        https://bugs.webkit.org/show_bug.cgi?id=80155

        Reviewed by Antti Koivisto.

        This patch ensures that an iframe only schedules and calls parent's layout,
        when it is going to be flattened. Non-flattened iframe does not affect
        parent's layout, so normal layout flow applies. isInSubframeLayoutWithFrameFlattening()
        function has been added to test whether a particular child frame is changing
        parent's layout. This function also ensures that scheduleRelayout() and layout()
        are in sync of checking againts frame flattening.

        Test: fast/frames/flattening/iframe-flattening-fixed-width-and-height-no-scrolling-with-js-forced-layout.html

        * page/FrameView.cpp:
        (WebCore::FrameView::avoidScrollbarCreation):
        (WebCore::FrameView::layout):
        (WebCore::FrameView::scheduleRelayout):
        (WebCore::FrameView::isInChildFrameWithFrameFlattening):
        (WebCore):
        (WebCore::FrameView::updateLayoutAndStyleIfNeededRecursive):
        * page/FrameView.h:
        (FrameView):
        * rendering/RenderIFrame.h:
        (RenderIFrame):
        (WebCore::RenderIFrame::renderName):

2012-03-14  Anders Carlsson  <andersca@apple.com>

        Don't cap the scroll position if layout happens when a FrameView's overhangAmount is non-zero
        https://bugs.webkit.org/show_bug.cgi?id=81146
        <rdar://problem/10850075>

        Reviewed by Beth Dakin.

        If layout happens when a page has a non-zero overhang amount, we shouldn't cap the scroll position
        to be inside of the valid maximum/minimum scroll offsets because that will cause the page to jump back, which
        can look really bad if layout happens in response to the page being scrolled.

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

2012-03-14  Tommy Widenflycht  <tommyw@google.com>

        MediaStream API (JSEP): Introducing IceCandidate
        https://bugs.webkit.org/show_bug.cgi?id=80699

        Reviewed by Adam Barth.

        Patch #2 in a series of patches to change the PeerConnection from ROAP to JSEP,
        see bug 80589 for more information.
        Adding the JS object IceCandidate and its WebCore/platform sibling IceCandidateDescriptor.
        This object will be created both from JS and the embedder.

        Not possible to test until the entire JSEP feature is commited.

        * GNUmakefile.list.am:
        * Modules/mediastream/IceCandidate.cpp: Copied from Source/WebCore/platform/mediastream/MediaStreamCenter.cpp.
        (WebCore):
        (WebCore::IceCandidate::create):
        (WebCore::IceCandidate::IceCandidate):
        (WebCore::IceCandidate::~IceCandidate):
        (WebCore::IceCandidate::label):
        (WebCore::IceCandidate::candidateLine):
        (WebCore::IceCandidate::toSdp):
        (WebCore::IceCandidate::descriptor):
        * Modules/mediastream/IceCandidate.h: Copied from Source/WebCore/platform/mediastream/MediaStreamCenter.cpp.
        (WebCore):
        (IceCandidate):
        * Modules/mediastream/IceCandidate.idl: Added.
        * WebCore.gypi:
        * platform/mediastream/IceCandidateDescriptor.cpp: Copied from Source/WebCore/platform/mediastream/MediaStreamCenter.cpp.
        (WebCore):
        (WebCore::IceCandidateDescriptor::create):
        (WebCore::IceCandidateDescriptor::IceCandidateDescriptor):
        (WebCore::IceCandidateDescriptor::~IceCandidateDescriptor):
        (WebCore::IceCandidateDescriptor::toSdp):
        * platform/mediastream/IceCandidateDescriptor.h: Copied from Source/WebCore/platform/mediastream/MediaStreamCenter.cpp.
        (WebCore):
        (IceCandidateDescriptor):
        (WebCore::IceCandidateDescriptor::label):
        (WebCore::IceCandidateDescriptor::candidateLine):
        * platform/mediastream/MediaStreamCenter.cpp:
        (WebCore::MediaStreamCenter::constructSdp):
        (WebCore):
        * platform/mediastream/MediaStreamCenter.h:
        (WebCore):
        (MediaStreamCenter):

2012-03-14  Simon Fraser  <simon.fraser@apple.com>

        background-visibility:hidden should create a RenderLayer
        https://bugs.webkit.org/show_bug.cgi?id=81134

        Reviewed by Dean Jackson.
        
        Background-visibility:hidden has to create RenderLayers, because it's implemented
        via compositing and/or paint short-circuiting in RenderLayer code.

        Test: transforms/3d/general/background-visibility-layers.html

        * rendering/RenderBox.h:
        * rendering/RenderBoxModelObject.h:
        (WebCore::RenderBoxModelObject::requiresLayer):
        * rendering/RenderObject.h:
        (WebCore::RenderObject::hasHiddenBackface):
        * rendering/RenderTableRow.h:

2012-03-14  Raul Hudea  <rhudea@adobe.com>

        [CSSRegions][CSSOM] Implement regionLayoutEvent
        https://bugs.webkit.org/show_bug.cgi?id=78882

        Reviewed by David Hyatt.

        Adding the regionLayoutEvent that is dispatch for all regions after each flow-thread layout.

        Tests: fast/regions/region-event-add-to-flow.html
               fast/regions/region-event-remove-from-dom.html
               fast/regions/region-event-remove-from-flow.html
               fast/regions/region-event.html

        * dom/Document.cpp:
        (WebCore::Document::addListenerTypeIfNeeded): Added check for regionLayoutUpdate listeners
        * dom/Document.h:
        * dom/EventNames.h:
        (WebCore):
        * dom/Node.cpp:
        (WebCore::Node::dispatchRegionLayoutUpdateEvent):
        (WebCore):
        * dom/Node.h:
        (Node):
        * rendering/RenderFlowThread.cpp:
        (WebCore::RenderFlowThread::RenderFlowThread):
        (WebCore::RenderFlowThread::layout): Start the event dispatch timer but only if there are regionLayoutUpdate listeners and there is at least one region that had its layout updated.
        (WebCore::RenderFlowThread::computeOverflowStateForRegions): Mark regions that might had a layout update
        (WebCore::RenderFlowThread::regionLayoutUpdateEventTimerFired):
        (WebCore):
        * rendering/RenderFlowThread.h:
        * rendering/RenderRegion.cpp:
        (WebCore::RenderRegion::RenderRegion):
        * rendering/RenderRegion.h:
        (WebCore::RenderRegion::setDispatchRegionLayoutUpdateEvent):
        (WebCore::RenderRegion::shouldDispatchRegionLayoutUpdateEvent):
        (RenderRegion):

2012-03-14  Pierre Rossi  <pierre.rossi@gmail.com>

        [Qt] Add support for vertical sliders in mobile theme
        https://bugs.webkit.org/show_bug.cgi?id=80179

        This makes sliders using the "slider-vertical" appearance more sensible.

        Reviewed by Simon Hausmann.

        No new tests, since the mobile theme still isn't used in layout tests.

        * platform/qt/RenderThemeQtMobile.cpp:
        (WebCore):
        (WebCore::StylePainterMobile::drawProgress):
        (WebCore::RenderThemeQtMobile::paintSliderTrack):
        * platform/qt/RenderThemeQtMobile.h:
        (StylePainterMobile):

2012-03-14  Jer Noble  <jer.noble@apple.com>

        WebProcess spins beneath [QTMovie movieFileTypes:]
        https://bugs.webkit.org/show_bug.cgi?id=81133

        Reviewed by Eric Carlson.

        No new tests; speculative fix for top WebProcess spin.

        When checking to see if a given mime type is supported by QuickTime,
        immediately exclude all types that do not begin with 'audio/' or 'video/'.
        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        (WebCore::MediaPlayerPrivateQTKit::supportsType):

2012-03-14  Zalan Bujtas  <zbujtas@gmail.com>

        Make RenderIFrame::flattenFrame() return earlier, when frame flattening is disabled.
        https://bugs.webkit.org/show_bug.cgi?id=80301

        Reviewed by Antti Koivisto.

        Reorganize RenderIFrame flattenFrame() code, so that it returns
        earlier for the normal use case, when frame flattening is disabled.
        It also removes leftover null check.

        No new tests, since there's no new functionality.

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

2012-03-14  James Robinson  <jamesr@chromium.org>

        [chromium] Provide explicit polling API to check if the platform is capable of accelerated 2d canvas
        https://bugs.webkit.org/show_bug.cgi?id=80667

        Reviewed by Darin Fisher.

        Query the platform to see if we can instantiate a context suitable for accelerating 2d canvas. If we can't, for
        instance if we're on a system that can't preserve a context when the screensaver comes up, then immediately fall
        back to software.

        Covered by canvas layout tests in the virtual-gpu mode.

        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::shouldAccelerate):
        * platform/chromium/PlatformSupport.h:

2012-03-14  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Handle printing errors in WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=77197

        Reviewed by Gustavo Noronha Silva.

        * platform/gtk/ErrorsGtk.cpp:
        (WebCore::printError): Create a generic print error.
        (WebCore::printerNotFoundError): Create a print error to notify
        that the selected printer could not be found.
        (WebCore::invalidPageRangeToPrint): Create a print error when the
        selected page range is invalid and there are no pages to print.
        * platform/gtk/ErrorsGtk.h:
        (WebCore): Add print error doamin.

2012-03-14  Nikolas Zimmermann  <nzimmermann@rim.com>

        Make SVGUseElement respect & support externalResourcesRequired
        https://bugs.webkit.org/show_bug.cgi?id=81109

        Reviewed by Rob Buis.

        Generalize the existing externalResourcesRequired support from SVGScriptElement
        into SVGExternalResourcesRequired, so it can be shared with SVGUseElement, which
        was lacking proper externalResourcesRequired support.

        <use xlink:href="external.svg" onload="alert('hi')" externalResourcesRequired="true"/>
        The onload handler now fires _after_ the external resources loaded, making it possible
        to write reliable tests that switch from internal to external resources or the other
        way around. Converted the new tests in svg/dynamic-updates/SVGUseElement* to listen
        to SVGLoad events, to make them reliable.

        We may be able to generalize this to cover SVGImageElement as well (the only other class which
        is currently supporting externalResourcesRequired - but that's more involved, so I left it TODO).

        Covered by existing tests and the changes to the new SVGUseElement tests.

        * svg/SVGElement.h:
        (SVGElement): Make haveLoadedRequiredResources() public so SVGExternalResourcesRequired can call it.
        * svg/SVGExternalResourcesRequired.cpp: Refactored code from SVGScriptElement, 1:1 copies w/o changes.
        (WebCore::SVGExternalResourcesRequired::handleAttributeChange):
        (WebCore::SVGExternalResourcesRequired::dispatchLoadEvent):
        (WebCore::SVGExternalResourcesRequired::insertedIntoDocument):
        (WebCore::SVGExternalResourcesRequired::finishParsingChildren):
        (WebCore::SVGExternalResourcesRequired::haveLoadedRequiredResources):
        * svg/SVGExternalResourcesRequired.h: Add new virtual functions, that must be available in classes that inherit from SVGExternalResourcesRequired.
        (WebCore::SVGExternalResourcesRequired::setHaveFiredLoadEvent):
        (WebCore::SVGExternalResourcesRequired::isParserInserted):
        (WebCore::SVGExternalResourcesRequired::haveFiredLoadEvent):
        * svg/SVGScriptElement.cpp: Refactored externalResourcesRequired handling into SVGExternalResourcesRequired.
        (WebCore::SVGScriptElement::svgAttributeChanged):
        (WebCore::SVGScriptElement::insertedIntoDocument):
        (WebCore::SVGScriptElement::finishParsingChildren):
        * svg/SVGScriptElement.h: Ditto.
        (WebCore::SVGScriptElement::haveLoadedRequiredResources):
        (WebCore::SVGScriptElement::dispatchLoadEvent):
        (WebCore::SVGScriptElement::setHaveFiredLoadEvent):
        (WebCore::SVGScriptElement::isParserInserted):
        (WebCore::SVGScriptElement::haveFiredLoadEvent):
        * svg/SVGTests.cpp: Fix obvious typo, that leads to an assertion. Always return true if we know the attributeName.
        (WebCore::SVGTests::handleAttributeChange):
        * svg/SVGTests.h:
        * svg/SVGTextPathElement.cpp:
        (WebCore::SVGTextPathElement::insertedIntoDocument): Remove ambigous call warning.
        * svg/SVGUseElement.cpp: Support externalResourcesRequired="true/false" + dynamic changes of it. Covered by existing tests.
        (WebCore::SVGUseElement::SVGUseElement):
        (WebCore::SVGUseElement::create):
        (WebCore::SVGUseElement::insertedIntoDocument):
        (WebCore::SVGUseElement::svgAttributeChanged):
        (WebCore::SVGUseElement::notifyFinished):
        (WebCore::SVGUseElement::finishParsingChildren):
        (WebCore):
        * svg/SVGUseElement.h: Ditto.
        (WebCore::SVGUseElement::haveLoadedRequiredResources):
        (WebCore::SVGUseElement::setHaveFiredLoadEvent):
        (WebCore::SVGUseElement::isParserInserted):
        (WebCore::SVGUseElement::haveFiredLoadEvent):
        * svg/svgtags.in: Pass "bool wasInsertedByParser" to SVGUseElement constructor.

2012-03-14  Andrew Lo  <anlo@rim.com>

        [BlackBerry] Implement REQUEST_ANIMATION_FRAME_DISPLAY_MONITOR using AnimationFrameRateController
        https://bugs.webkit.org/show_bug.cgi?id=81000

        Add BlackBerry port for DisplayRefreshMonitor using AnimationFrameRateController.
        Moved refreshDisplayOnMainThread to platform independant part of header.

        Reviewed by Antonio Gomes.

        requestAnimationFrame already covered by tests in LayoutTests/fast/animation.

        * PlatformBlackBerry.cmake:
        * platform/graphics/DisplayRefreshMonitor.cpp:
        (WebCore::DisplayRefreshMonitor::DisplayRefreshMonitor):
        * platform/graphics/DisplayRefreshMonitor.h:
        (WebCore):
        (DisplayAnimationClient):
        (WebCore::DisplayAnimationClient::~DisplayAnimationClient):
        (DisplayRefreshMonitor):
        * platform/graphics/blackberry/DisplayRefreshMonitorBlackBerry.cpp: Added.
        (WebCore):
        (WebCore::DisplayAnimationClient::DisplayAnimationClient):
        (WebCore::DisplayAnimationClient::animationFrameChanged):
        (WebCore::DisplayRefreshMonitor::~DisplayRefreshMonitor):
        (WebCore::DisplayRefreshMonitor::startAnimationClient):
        (WebCore::DisplayRefreshMonitor::stopAnimationClient):
        (WebCore::DisplayRefreshMonitor::requestRefreshCallback):
        (WebCore::DisplayRefreshMonitor::displayLinkFired):

2012-03-14  Yury Semikhatsky  <yurys@chromium.org>

        Web Inspector: use class name indexes instead of class names when evaluating aggregates
        https://bugs.webkit.org/show_bug.cgi?id=81100

        Class name and type name indexes are now used when calculating class aggregates
        in heap snapshots instead of string lookup followed by a string comparison.

        Class names like "Window / www.webkit.org" are now left as is in the UI (it used
        to be trimed to just "Window").

        Reviewed by Pavel Feldman.

        * inspector/front-end/HeapSnapshot.js:
        (WebInspector.HeapSnapshotNode.prototype.get classNameIndex):
        (WebInspector.HeapSnapshotNode.prototype.hasType):
        (WebInspector.HeapSnapshot.prototype._init):
        (WebInspector.HeapSnapshot.prototype._buildAggregates):

2012-03-14  Andrey Kosyakov  <caseq@chromium.org>

        Web Inspector: add didCancelFrame timeline event
        https://bugs.webkit.org/show_bug.cgi?id=80994

        Reviewed by Pavel Feldman.

        - add an ability to cancel certain timeline events, unless they've been followed by other events.
        - implement didCancelFrame() event, fired when a platform decides not to render frame after didBeginFrame() was called.

        Test: inspector/timeline/timeline-frames.html

        * WebCore.exp.in:
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::didCancelFrameImpl):
        (WebCore):
        * inspector/InspectorInstrumentation.h:
        (InspectorInstrumentation):
        (WebCore::InspectorInstrumentation::didCancelFrame):
        (WebCore):
        * inspector/InspectorTimelineAgent.cpp:
        (WebCore::InspectorTimelineAgent::didBeginFrame):
        (WebCore):
        (WebCore::InspectorTimelineAgent::didCancelFrame):
        (WebCore::InspectorTimelineAgent::appendRecord):
        (WebCore::InspectorTimelineAgent::pushCurrentRecord):
        (WebCore::InspectorTimelineAgent::pushCancelableRecord):
        (WebCore::InspectorTimelineAgent::commitCancelableRecords):
        (WebCore::InspectorTimelineAgent::cancelRecord):
        * inspector/InspectorTimelineAgent.h:
        (InspectorTimelineAgent):
        (WebCore::InspectorTimelineAgent::TimelineRecordEntry::TimelineRecordEntry):
        (TimelineRecordEntry):
        * testing/Internals.cpp:
        (WebCore::Internals::emitInspectorDidBeginFrame):
        (WebCore):
        (WebCore::Internals::emitInspectorDidCancelFrame):
        * testing/Internals.h:
        (Internals):
        * testing/Internals.idl:

2012-03-14  Dana Jansens  <danakj@chromium.org>

        Region can acquire an empty span by subtracting an empty Region
        https://bugs.webkit.org/show_bug.cgi?id=81074

        Reviewed by Anders Carlsson.

        Subtracting an empty Region B from a Region A can cause A to end
        up with an empty span. This violates the rule that two Regions
        that cover the exact same area should have equal spans and segments.

        Unit test: RegionTest.emptySpan

        * platform/graphics/Region.cpp:
        (WebCore::Region::subtract):

2012-03-14  Simon Hausmann  <simon.hausmann@nokia.com>

        [Textmap] Disable driver based BGRA swizzling for OpenGL/ES

        Reviewed by Noam Rosenthal.

        The current way of detecting swizzling support (check for GL_EXT_texture_format_BGRA8888)
        is unfortunately not reliable. We need a better way of detection that (filed bug 81103).
        In the meantime this patch reverts back to doing the swizzling in the texture mapper to
        get pixels back onto the screen.

        * platform/graphics/texmap/TextureMapperGL.cpp:
        (WebCore::driverSupportsBGRASwizzling):
        (WebCore::BitmapTextureGL::updateContents):

2012-03-14  Leo Yang  <leo.yang@torchmobile.com.cn>

        [BlackBerry] Upstream the BlackBerry change to platform/Cursor.h
        https://bugs.webkit.org/show_bug.cgi?id=81086

        Reviewed by Rob Buis.

        * platform/Cursor.h:
        (WebCore):
        (WebCore::Cursor::Cursor):
        Add the BlackBerry specific PlatformCursor.
        * platform/blackberry/PageClientBlackBerry.h:
        There was an alias named PlatformCursorHandle for PlatformCursor
        in the internal version of Cursor.h. But it's not necessary so it's
        not included in the upstreaming version of Cursor.h. As a result,
        use PlatformCursor directly in this file.
        (PageClientBlackBerry):

2012-03-14  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] RunLoopQt is missing reentrancy guards
        https://bugs.webkit.org/show_bug.cgi?id=80982

        Reviewed by Tor Arne Vestbø.

        Avoid recursive calls to RunLoop::performWork() with a simple
        counting mechanism, to avoid out-of-order message dispatching.

        * platform/qt/RunLoopQt.cpp:
        (WebCore::RunLoop::TimerObject::TimerObject):
        (WebCore::RunLoop::TimerObject::performWork):
        (RunLoop::TimerObject):

2012-03-14  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: small improvement for HeapSnapshot performance ~12%.
        https://bugs.webkit.org/show_bug.cgi?id=81033

        Reviewed by Yury Semikhatsky.

        * inspector/front-end/HeapSnapshot.js:
        (WebInspector.HeapSnapshot.prototype.get nodeCount):
        (WebInspector.HeapSnapshot.prototype.get maxNodeId):
        (WebInspector.HeapSnapshot.prototype._buildReverseIndex):
        (WebInspector.HeapSnapshot.prototype.get nodeIndexes):
        (WebInspector.HeapSnapshot.prototype._buildNodeIndex):

2012-03-14  Kentaro Hara  <haraken@chromium.org>

        Return null when shouldAllowAccessToNode() fails
        https://bugs.webkit.org/show_bug.cgi?id=80205

        Reviewed by Adam Barth.

        shouldAllowAccessToNode() is used for window.frameElement, HTMLFrameElement.contentDocument,
        and getSVGDocument(). The spec of window.frameElement and HTMLFrameElement.contentDocument
        requires that they should return null when the security check fails.
        Thus this patch changes the return value from undefined to null.

        http://www.whatwg.org/specs/web-apps/current-work/multipage/browsers.html#navigating-nested-browsing-contexts-in-the-dom
        http://www.whatwg.org/specs/web-apps/current-work/multipage/the-iframe-element.html#dom-iframe-contentdocument

        Tests: http/tests/security/local-iFrame-from-remote.html
               http/tests/security/cross-frame-access-frameelement.html
               http/tests/security/cross-frame-access-put.html

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateImplementation):
        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateNormalAttrGetter):
        (GenerateFunctionCallback):

        * bindings/scripts/test/JS/JSTestObj.cpp: Updated run-bindings-tests results.
        (WebCore::jsTestObjContentDocument):
        (WebCore::jsTestObjPrototypeFunctionGetSVGDocument):
        * bindings/scripts/test/V8/V8TestObj.cpp:
        (WebCore::TestObjInternal::contentDocumentAttrGetter):
        (WebCore::TestObjInternal::getSVGDocumentCallback):

2012-03-14  Sudarsana Nagineni  <sudarsana.nagineni@linux.intel.com>

        Build error: DNSSoup.cpp:30: fatal error: CString.h: No such file or
        directory
        https://bugs.webkit.org/show_bug.cgi?id=81093

        Reviewed by Philippe Normand.

        Fix build error introduced by r110669.

        * platform/network/soup/DNSSoup.cpp:

2012-03-14  Marja Hölttä  <marja@google.com>

        WebHTTPBody: Keep track of whether the data includes passwords.
        https://bugs.webkit.org/show_bug.cgi?id=81003

        Reviewed by Darin Fisher.

        This change enables Chrome to save HTTP bodies selectively, only
        if they don't contain passwords.

        * loader/FormSubmission.cpp:
        (WebCore::FormSubmission::create): Check if the data contains passwords.
        * platform/network/FormData.cpp:
        (WebCore::FormData::FormData): Added containsPasswordData, setContainsPasswordData.
        * platform/network/FormData.h:
        (WebCore::FormData::containsPasswordData): Added.
        (WebCore::FormData::setHasPasswordData): Added.
        (FormData):

2012-03-14  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Add snippets tab to scripts navigator.
        https://bugs.webkit.org/show_bug.cgi?id=81018

        Reviewed by Pavel Feldman.

        * English.lproj/localizedStrings.js:
        * inspector/front-end/ScriptsNavigator.js:
        (WebInspector.ScriptsNavigator):
        (WebInspector.ScriptsNavigator.prototype.get defaultFocusedElement):
        (WebInspector.ScriptsNavigator.prototype.focus):
        (WebInspector.ScriptsNavigator.prototype._showScriptFoldersSettingChanged):
        (WebInspector.ScriptsNavigator.prototype.reset):
        (WebInspector.ScriptsNavigator.prototype._getOrCreateFolderTreeElement):
        (WebInspector.ScriptsNavigator.prototype._createFolderTreeElement):
        (WebInspector.ScriptsNavigator.prototype._getOrCreateSnippetEvaluationsFolderTreeElement):
        (WebInspector.ScriptsNavigator.prototype._scriptFolderIdentifier):
        (WebInspector.NavigatorTreeOutline):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype._uiSourceCodeAdded):
        (WebInspector.ScriptsPanel.prototype._revealExecutionLine):
        * inspector/front-end/SnippetsModel.js:

2012-03-14  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: Copy on the Console gives a mangled result.
        https://bugs.webkit.org/show_bug.cgi?id=81091

        Reviewed by Vsevolod Vlasov.

        * inspector/front-end/ConsoleMessage.js:
        (WebInspector.ConsoleMessageImpl.prototype._formatMessage):
        (WebInspector.ConsoleMessageImpl.prototype._populateStackTraceTreeElement):

2012-03-14  Nikolas Zimmermann  <nzimmermann@rim.com>

        External <use> xlink:href references do not work
        https://bugs.webkit.org/show_bug.cgi?id=12499

        Reviewed by Zoltan Herczeg.

        Follow-up fix after r110676.
        Assertions are firing due last minute changes in isExternalURIReference.

        Fix detecting local resources properly, when the given iri contains a /complex/path.
        Use document->completeURL() instead, and compare with the document->url() to decide
        if its a local reference or not.

        If an external document load fails with an error (eg. file missing) don't assert
        in debug builds, instead handle it gracefully.

        I decided to clean the code up as well, to make it more safe & obvious.

        Test: svg/custom/use-external-crash.svg

        * svg/SVGURIReference.cpp:
        (WebCore::SVGURIReference::targetElementFromIRIString):
        * svg/SVGURIReference.h:
        (WebCore::SVGURIReference::isExternalURIReference):
        * svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::externalDocument):
        (WebCore::SVGUseElement::buildPendingResource):

2012-03-14  Lars Knudsen  <lars.knudsen@nokia.com>

        3D transformed surfaces with z>0 gets cropped
        https://bugs.webkit.org/show_bug.cgi?id=81009

        Reviewed by Noam Rosenthal.

        The scissor clipping in TextureMapperGL didn't take 3D transforms 
        into account when calculating the clipping region.
        Now, it will bail out early if the transform is not affine.

        No new tests. Tested by current compositing layout tests.

        * platform/graphics/texmap/TextureMapperGL.cpp:
        (WebCore::TextureMapperGL::beginScissorClip):

2012-03-14  Hajime Morrita  <morrita@chromium.org>

        Unreviewed build fix.

        * html/track/TextTrackList.cpp:
        (TextTrackList::append):
        (TextTrackList::remove):
        (TextTrackList::owner): Changed return type from HTMLMediaElement* to Node* and uninlined.
        * html/track/TextTrackList.h:
        (TextTrackList):

2012-03-13  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: [InspectorIndexedDB] Remote object should be released when data view is removed/updated.
        https://bugs.webkit.org/show_bug.cgi?id=81022

        Reviewed by Pavel Feldman.

        * inspector/front-end/IndexedDBViews.js:
        (WebInspector.IDBDataView):
        (WebInspector.IDBDataView.prototype._updateData.callback):
        (WebInspector.IDBDataView.prototype._updateData):
        (WebInspector.IDBDataView.prototype.get statusBarItems):
        (WebInspector.IDBDataView.prototype.clear):
        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.IndexedDBTreeElement.prototype._indexedDBRemoved):
        (WebInspector.IDBDatabaseTreeElement.prototype.update):
        (WebInspector.IDBDatabaseTreeElement.prototype.onselect):
        (WebInspector.IDBDatabaseTreeElement.prototype._objectStoreRemoved):
        (WebInspector.IDBDatabaseTreeElement.prototype.clear):
        (WebInspector.IDBObjectStoreTreeElement.prototype.update):
        (WebInspector.IDBObjectStoreTreeElement.prototype.onselect):
        (WebInspector.IDBObjectStoreTreeElement.prototype._indexRemoved):
        (WebInspector.IDBObjectStoreTreeElement.prototype.clear):
        (WebInspector.IDBIndexTreeElement.prototype.onselect):
        (WebInspector.IDBIndexTreeElement.prototype.clear):

2012-03-12  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Introduce SnippetsScriptMapping.
        https://bugs.webkit.org/show_bug.cgi?id=80890

        Reviewed by Pavel Feldman.

        * inspector/front-end/ScriptMapping.js:
        (WebInspector.MainScriptMapping):
        (WebInspector.MainScriptMapping.prototype.addScript):
        (WebInspector.MainScriptMapping.prototype._mappingForScript):
        * inspector/front-end/SnippetsModel.js:
        (WebInspector.SnippetsModel.prototype.snippetForId):
        (WebInspector.SnippetsModel.prototype.snippetForSourceURL):
        (WebInspector.SnippetsScriptMapping):
        (WebInspector.SnippetsScriptMapping.prototype.uiSourceCodeList):
        (WebInspector.SnippetsScriptMapping.prototype.addScript):
        (WebInspector.SnippetsScriptMapping.prototype._snippetAdded):
        (WebInspector.SnippetsScriptMapping.prototype._releaseSnippetScript.get if):
        (WebInspector.SnippetsScriptMapping.prototype._releaseSnippetScript):
        (WebInspector.SnippetsScriptMapping.prototype._snippetDeleted.get this):
        (WebInspector.SnippetsScriptMapping.prototype._snippetDeleted):
        (WebInspector.SnippetsScriptMapping.prototype.reset):
        (WebInspector.SnippetContentProvider):

2012-03-14  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r110673.
        http://trac.webkit.org/changeset/110673
        https://bugs.webkit.org/show_bug.cgi?id=81090

        "Qt minimal build broken" (Requested by yurys on #webkit).

        * inspector/CodeGeneratorInspector.py:
        (CommandReturnPassModel.ByPointer.get_set_return_condition):
        (TypeModel.Enum.get_optional.EnumOptional.get_command_return_pass_model):
        (TypeModel.ValueType.ValueOptional.get_command_return_pass_model):
        (Generator.process_event):
        (Generator.process_command):
        * inspector/ContentSearchUtils.cpp:
        (WebCore::ContentSearchUtils::buildObjectForSearchMatch):
        (WebCore::ContentSearchUtils::searchInTextByLines):
        * inspector/ContentSearchUtils.h:
        (ContentSearchUtils):
        * inspector/InjectedScript.cpp:
        (WebCore::InjectedScript::evaluate):
        (WebCore::InjectedScript::callFunctionOn):
        (WebCore::InjectedScript::evaluateOnCallFrame):
        (WebCore::InjectedScript::makeEvalCall):
        * inspector/InjectedScript.h:
        (InjectedScript):
        * inspector/InspectorDOMDebuggerAgent.cpp:
        (WebCore::InspectorDOMDebuggerAgent::didInvalidateStyleAttr):
        (WebCore::InspectorDOMDebuggerAgent::willInsertDOMNode):
        (WebCore::InspectorDOMDebuggerAgent::willRemoveDOMNode):
        (WebCore::InspectorDOMDebuggerAgent::willModifyDOMAttr):
        (WebCore::InspectorDOMDebuggerAgent::pauseOnNativeEventIfNeeded):
        (WebCore::InspectorDOMDebuggerAgent::willSendXMLHttpRequest):
        * inspector/InspectorDebuggerAgent.cpp:
        (WebCore::InspectorDebuggerAgent::setBreakpointByUrl):
        (WebCore::InspectorDebuggerAgent::setBreakpoint):
        (WebCore::InspectorDebuggerAgent::searchInContent):
        (WebCore::InspectorDebuggerAgent::setScriptSource):
        (WebCore::InspectorDebuggerAgent::getFunctionDetails):
        (WebCore::InspectorDebuggerAgent::schedulePauseOnNextStatement):
        (WebCore::InspectorDebuggerAgent::evaluateOnCallFrame):
        (WebCore::InspectorDebuggerAgent::didPause):
        (WebCore::InspectorDebuggerAgent::breakProgram):
        (WebCore::InspectorDebuggerAgent::clearBreakDetails):
        * inspector/InspectorDebuggerAgent.h:
        (InspectorDebuggerAgent):
        * inspector/InspectorPageAgent.cpp:
        (WebCore::buildObjectForCookie):
        (WebCore::buildArrayForCookies):
        (WebCore::InspectorPageAgent::getCookies):
        (WebCore::InspectorPageAgent::getResourceTree):
        (WebCore::InspectorPageAgent::searchInResource):
        (WebCore::InspectorPageAgent::searchInResources):
        (WebCore::InspectorPageAgent::buildObjectForFrame):
        (WebCore::InspectorPageAgent::buildObjectForFrameTree):
        * inspector/InspectorPageAgent.h:
        * inspector/InspectorRuntimeAgent.cpp:
        (WebCore::InspectorRuntimeAgent::evaluate):
        (WebCore::InspectorRuntimeAgent::callFunctionOn):

2012-03-14  Renata Hodovan  <reni@webkit.org>

        External <use> xlink:href references do not work
        https://bugs.webkit.org/show_bug.cgi?id=12499

        Reviewed by Nikolas Zimmermann.

        This is a follow-up patch after r108785.
        In this patch we bind the previously introduced CachedSVGDocument class
        into the caching mechanism of SVGUseElement. The mode how external resources
        are handled is similar to the processing of internal ones. We build the instance
        and shadow tree the same way but we have to keep in mind that the requested resources
        maybe not loaded yet. We can check it with cachedDocumentIsStillLoading() function.

        SVGURIReference::targetElementFromIRIString() also need to be extended. The baseURI
        computation needs to take the referenced documents URL into account, instead of the current documents.

        The patch affects a lot of tests which have external resources especially in svg/batik. Because
        of the size of that test refactor they will be commited in a follow-up patch.

        Tests: svg/W3C-SVG-1.2-Tiny/struct-use-recursion-01-t.svg
               svg/W3C-SVG-1.2-Tiny/struct-use-recursion-02-t.svg
               svg/W3C-SVG-1.2-Tiny/struct-use-recursion-03-t.svg
               svg/custom/use-extern-href.svg
               svg/custom/use-referencing-an-image-expected.svg
               svg/custom/use-referencing-an-image.svg
               svg/custom/use-referencing-indirectly-itself-expected.svg
               svg/custom/use-referencing-indirectly-itself.svg
               svg/custom/use-referencing-itself-expected.svg
               svg/custom/use-referencing-itself.svg
               svg/dynamic-updates/SVGUseElement-dom-href1-attr.html
               svg/dynamic-updates/SVGUseElement-dom-href2-attr.html
               svg/dynamic-updates/SVGUseElement-svgdom-href1-prop.html
               svg/dynamic-updates/SVGUseElement-svgdom-href2-prop.html

        * loader/cache/CachedResourceLoader.cpp:
        (WebCore):
        (WebCore::CachedResourceLoader::requestSVGDocument):
        * loader/cache/CachedResourceLoader.h:
        (WebCore):
        (CachedResourceLoader):
        * page/ContentSecurityPolicy.h:
        * platform/KURL.cpp:
        (WebCore::equalIgnoringFragmentIdentifier):
        * platform/network/chromium/ResourceRequest.h:
        * svg/SVGURIReference.cpp:
        (WebCore::urlFromIRIStringWithFragmentIdentifier):
        (WebCore):
        (WebCore::SVGURIReference::targetElementFromIRIString):
        * svg/SVGURIReference.h:
        (SVGURIReference):
        (WebCore::SVGURIReference::isExternalURIReference):
        * svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::SVGUseElement):
        (WebCore::SVGUseElement::~SVGUseElement):
        (WebCore):
        (WebCore::SVGUseElement::referencedDocument):
        (WebCore::SVGUseElement::externalDocument):
        (WebCore::SVGUseElement::svgAttributeChanged):
        (WebCore::dumpInstanceTree):
        (WebCore::SVGUseElement::buildPendingResource):
        (WebCore::SVGUseElement::buildShadowAndInstanceTree):
        (WebCore::SVGUseElement::hasCycleUseReferencing):
        (WebCore::SVGUseElement::expandUseElementsInShadowTree):
        (WebCore::SVGUseElement::expandSymbolElementsInShadowTree):
        (WebCore::SVGUseElement::notifyFinished):
        (WebCore::SVGUseElement::cachedDocumentIsStillLoading):
        (WebCore::SVGUseElement::instanceTreeIsLoading):
        * svg/SVGUseElement.h:
        (WebCore):
        (SVGUseElement):

2012-03-14  Peter Rybin  <peter.rybin@gmail.com>

        Web Inspector: TypeBuilder: Introduce OptOutput class for optional output parameters
        https://bugs.webkit.org/show_bug.cgi?id=80789

        Reviewed by Yury Semikhatsky.

        OptOutput class is added for optional return parameters.

        Strict mode added to Generator that makes all parameter types strict
        and drop pre-set default values for return parameters.

        Debugger and Page domain is switched to strict mode.


        * inspector/CodeGeneratorInspector.py:
        (CommandReturnPassModel.ByPointer):
        (CommandReturnPassModel):
        (CommandReturnPassModel.OptOutput):
        (CommandReturnPassModel.OptOutput.__init__):
        (CommandReturnPassModel.OptOutput.get_return_var_type):
        (CommandReturnPassModel.OptOutput.get_output_argument_prefix):
        (CommandReturnPassModel.OptOutput.get_output_to_raw_expression):
        (CommandReturnPassModel.OptOutput.get_output_parameter_type):
        (CommandReturnPassModel.OptOutput.get_set_return_condition):
        (TypeModel.Enum.get_optional.EnumOptional.get_command_return_pass_model):
        (TypeModel.ValueType.ValueOptional.get_command_return_pass_model):
        (OptOutput):
        (Generator.process_event):
        (Generator.process_command):
        * inspector/ContentSearchUtils.cpp:
        (WebCore::ContentSearchUtils::buildObjectForSearchMatch):
        (WebCore::ContentSearchUtils::searchInTextByLines):
        * inspector/ContentSearchUtils.h:
        (ContentSearchUtils):
        * inspector/InjectedScript.cpp:
        (WebCore::InjectedScript::evaluate):
        (WebCore::InjectedScript::callFunctionOn):
        (WebCore::InjectedScript::evaluateOnCallFrame):
        (WebCore::InjectedScript::makeEvalCall):
        * inspector/InjectedScript.h:
        (InjectedScript):
        * inspector/InspectorDOMDebuggerAgent.cpp:
        (WebCore):
        * inspector/InspectorDebuggerAgent.cpp:
        (WebCore::InspectorDebuggerAgent::setBreakpointByUrl):
        (WebCore::InspectorDebuggerAgent::setBreakpoint):
        (WebCore::InspectorDebuggerAgent::searchInContent):
        (WebCore::InspectorDebuggerAgent::setScriptSource):
        (WebCore::InspectorDebuggerAgent::getFunctionDetails):
        (WebCore::InspectorDebuggerAgent::schedulePauseOnNextStatement):
        (WebCore::InspectorDebuggerAgent::evaluateOnCallFrame):
        (WebCore::InspectorDebuggerAgent::didPause):
        (WebCore::InspectorDebuggerAgent::breakProgram):
        (WebCore::InspectorDebuggerAgent::clearBreakDetails):
        * inspector/InspectorDebuggerAgent.h:
        (InspectorDebuggerAgent):
        * inspector/InspectorPageAgent.cpp:
        (WebCore::buildObjectForCookie):
        (WebCore::buildArrayForCookies):
        (WebCore::InspectorPageAgent::getCookies):
        (WebCore::InspectorPageAgent::getResourceTree):
        (WebCore::InspectorPageAgent::searchInResource):
        (WebCore::InspectorPageAgent::searchInResources):
        (WebCore::InspectorPageAgent::buildObjectForFrame):
        (WebCore::InspectorPageAgent::buildObjectForFrameTree):
        * inspector/InspectorPageAgent.h:
        * inspector/InspectorRuntimeAgent.cpp:
        (WebCore::InspectorRuntimeAgent::evaluate):
        (WebCore::InspectorRuntimeAgent::callFunctionOn):

2012-03-14  Sergio Villar Senin  <svillar@igalia.com>

        Unreviewed. Build fix for EFL after r110669.

        * PlatformEfl.cmake: added DNSSoup.cpp

2012-03-13  Sergio Villar Senin  <svillar@igalia.com>

        [GTK] Use the same DNS prefetching path than the other ports.
        https://bugs.webkit.org/show_bug.cgi?id=80997

        Reviewed by Martin Robinson.

        This patch basically reverts r56128. There is no need to add an
        special code path for GTK+ DNS pre-fetching because the main
        reason to do that (some potential changes in libsoup) is not
        going to happen. It also reduces the amount of DNS queries by
        adding a NULL hostname check.

        No need for new tests as this just moves code around.

        * GNUmakefile.list.am:
        * html/HTMLAnchorElement.cpp:
        (WebCore::HTMLAnchorElement::parseAttribute):
        * html/HTMLLinkElement.cpp:
        * loader/LinkLoader.cpp:
        (WebCore::LinkLoader::loadLink):
        * page/Chrome.cpp:
        (WebCore::Chrome::mouseDidMoveOverElement):
        * platform/network/DNS.h:
        (WebCore):
        * platform/network/ResourceHandle.cpp:
        * platform/network/ResourceHandle.h:
        (ResourceHandle):
        * platform/network/chromium/DNSChromium.cpp:
        * platform/network/soup/DNSSoup.cpp: restored.
        (WebCore):
        (WebCore::prefetchDNS):
        * platform/network/soup/ResourceHandleSoup.cpp:

2012-03-14  Kentaro Hara  <haraken@chromium.org>

        Return null when shouldAllowAccessToNode() fails
        https://bugs.webkit.org/show_bug.cgi?id=80205

        Reviewed by Adam Barth.

        shouldAllowAccessToNode() is used for window.frameElement, HTMLFrameElement.contentDocument,
        and getSVGDocument(). The spec of window.frameElement and HTMLFrameElement.contentDocument
        requires that they should return null when the security check fails.
        Thus this patch changes the return value from undefined to null.

        http://www.whatwg.org/specs/web-apps/current-work/multipage/browsers.html#navigating-nested-browsing-contexts-in-the-dom
        http://www.whatwg.org/specs/web-apps/current-work/multipage/the-iframe-element.html#dom-iframe-contentdocument

        Tests: http/tests/security/local-iFrame-from-remote.html
               http/tests/security/cross-frame-access-frameelement.html
               http/tests/security/cross-frame-access-put.html

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateImplementation):
        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateNormalAttrGetter):
        (GenerateFunctionCallback):

        * bindings/scripts/test/JS/JSTestObj.cpp: Updated run-bindings-tests results.
        (WebCore::jsTestObjContentDocument):
        (WebCore::jsTestObjPrototypeFunctionGetSVGDocument):
        * bindings/scripts/test/V8/V8TestObj.cpp:
        (WebCore::TestObjInternal::contentDocumentAttrGetter):
        (WebCore::TestObjInternal::getSVGDocumentCallback):

2012-03-13  Yosifumi Inoue  <yosin@chromium.org>

        [Forms] Hidden input element should not have labels. 
        https://bugs.webkit.org/show_bug.cgi?id=80403

        Reviewed by Kent Tamura.

        This patch changes "labels" attribute behavior for hidden input type.
        It returns null instead of NodeList of labels or empty node list.

        Note: The HTML5 specification isn't clear for non-labelable element's "labels"
        attribute return value. Firefox and Opera return empty node list. IE returns null.

        No new tests. Existing tests are updated.

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::isLabelable): Added. Dispatch to InputType.
        * html/HiddenInputType.h:  Added isLabelable returning false.
        * html/InputType.cpp:
        (WebCore::InputType::isLabelable): Added. Returning true for all input types except for "hidden" type.
        (WebCore):
        * html/InputType.h:
        (InputType): Added isLabelable declaration.

2012-03-13  Yosifumi Inoue  <yosin@chromium.org>

        [Forms] The "output" element should have labels.
        https://bugs.webkit.org/show_bug.cgi?id=80466

        Reviewed by Kent Tamura.

        This patch enables functionality of "labels" attribute for
        HTMLOutputElement implemented in LabelableElement which use
        isLabelable predicate whether an element can have label or not.

        Update existing tests in fast/forms/label/ directory to cover
        the "output" element with the "labels" attribute.

        * html/HTMLOutputElement.h: Implement virtual method isLabelable.

2012-03-13  Luke Macpherson   <macpherson@chromium.org>

        Move opacity clamping into RenderStyle setter.
        https://bugs.webkit.org/show_bug.cgi?id=76966

        Reviewed by Eric Seidel.

        Covered by existing tests.

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):
        * rendering/style/RenderStyle.h:
        (WebCore::RenderStyleBitfields::setOpacity):

2012-03-12  Igor Oliveira  <igor.o@sisa.samsung.com>

        Split the extra logic out of RenderObjectChildList::updateBeforeAfterContent
        https://bugs.webkit.org/show_bug.cgi?id=80856

        Extra part of the generated content handling logic out of RenderObjectChildList::updateBeforeAfterContent

        Reviewed by Julien Chaffraix.

        No change in behavior expected.

        * rendering/RenderObjectChildList.cpp:
        (WebCore::RenderObjectChildList::updateBeforeAfterStyle):
        (WebCore::createRenderForBeforeAfterContent):
        (WebCore::RenderObjectChildList::updateBeforeAfterContent):
        * rendering/RenderObjectChildList.h:
        (WebCore):
        (RenderObjectChildList):

2012-03-13  Simon Fraser  <simon.fraser@apple.com>

        Fix potential crash when loading test results
        https://bugs.webkit.org/show_bug.cgi?id=81062
        <rdar://problem/11041732>
        
        Reviewed by Dean Jackson.

        If RenderLayerBacking::isSimpleContainerCompositingLayer() is called early,
        before the document has a documentElement(), then it crashes. Fix with
        a null check on documentElement().
        
        No test because it's timing dependent.

        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::isSimpleContainerCompositingLayer):

2012-03-13  Dan Bernstein  <mitz@apple.com>

        <rdar://problem/11025225> Assertion failure in RenderView::computeRectForRepaint() (!repaintContainer || repaintContainer == this) at store.apple.com
        https://bugs.webkit.org/show_bug.cgi?id=81051

        Reviewed by Simon Fraser.

        Test: ManualTests/inline-repaint-container.html.

        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::clippedOverflowRectForRepaint): This function was not handling the
        case of the repaint container being a descendant of the containing block correctly, leading
        to the assertion failure, but also to a correctness bug seen in the new test. If the repaint
        container is a descendant of the containing block, just return the rect in the repaint
        container coordinates.

2012-03-13  Dan Bernstein  <mitz@apple.com>

        <rdar://problem/11025217> [Mac] Assertion failure in collectComplexTextRunsForCharactersCoreText
        https://bugs.webkit.org/show_bug.cgi?id=77044

        Reviewed by Sam Weinig.

        Test: platform/mac/fast/text/core-text-fallback-to-unknown-font.html

        Handle the case of Core Text choosing a fallback font that NSFontManager cannot find by name.

        * platform/graphics/FontCache.h:
        (FontCache): Made ComplexTextController a friend class.
        * platform/graphics/mac/ComplexTextControllerCoreText.mm:
        (WebCore::ComplexTextController::collectComplexTextRunsForCharactersCoreText): Removed the
        failing assertion, which was not true, and added code to handle the case where a font
        cannot be found by name by using the font as returned from Core Text.

2012-03-13  Erik Arvidsson  <arv@chromium.org>

        [V8] Use v8::V8::AddImplicitReferences instead of SetHiddenValue
        https://bugs.webkit.org/show_bug.cgi?id=80880

        Reviewed by Adam Barth.

        We used to add a hidden property in the getter to the returned wrapper.
        With this patch we instead handle the liveness of the wrapper in the GC phase by
        calling v8::V8::AddHiddenReference.

        To reduce the amount of custom code we need, the V8 code generator now supports
        GenerateIsReachable (as well as CustomIsReachable) which, even though different
        from the JSC attribute, is used in the same cases and takes the same values (even though
        at the moment not all JSC values are supported by V8). Interfaces that have *IsReachable
        also have a dependent life time (just like if V8DependentLifetime was present).

        Second try. This time with an added include in TextTrackList.cpp.

        No new tests. Covered by existing tests.

        * Target.pri:
        * UseV8.cmake:
        * WebCore.gypi:
        * bindings/scripts/CodeGeneratorJS.pm:
        (GetGenerateIsReachable):
        (GetCustomIsReachable):
        (GenerateHeader):
        (GenerateImplementation):
        * bindings/scripts/CodeGeneratorV8.pm:
        (NeedsToVisitDOMWrapper):
        (GetGenerateIsReachable):
        (GetCustomIsReachable):
        (GenerateVisitDOMWrapper):
        (GenerateHeader):
        (GenerateNamedConstructorCallback):
        (GenerateImplementation):
        * bindings/scripts/IDLAttributes.txt:
        * bindings/scripts/test/V8/V8Float64Array.cpp:
        (WebCore):
        * bindings/scripts/test/V8/V8Float64Array.h:
        (V8Float64Array):
        * bindings/scripts/test/V8/V8TestActiveDOMObject.cpp:
        (WebCore):
        * bindings/scripts/test/V8/V8TestActiveDOMObject.h:
        (V8TestActiveDOMObject):
        * bindings/scripts/test/V8/V8TestCustomNamedGetter.cpp:
        (WebCore):
        * bindings/scripts/test/V8/V8TestCustomNamedGetter.h:
        (V8TestCustomNamedGetter):
        * bindings/scripts/test/V8/V8TestEventConstructor.cpp:
        (WebCore):
        * bindings/scripts/test/V8/V8TestEventConstructor.h:
        (V8TestEventConstructor):
        * bindings/scripts/test/V8/V8TestEventTarget.cpp:
        (WebCore):
        * bindings/scripts/test/V8/V8TestEventTarget.h:
        (V8TestEventTarget):
        * bindings/scripts/test/V8/V8TestInterface.cpp:
        (WebCore):
        * bindings/scripts/test/V8/V8TestInterface.h:
        (V8TestInterface):
        * bindings/scripts/test/V8/V8TestMediaQueryListListener.cpp:
        (WebCore):
        * bindings/scripts/test/V8/V8TestMediaQueryListListener.h:
        (V8TestMediaQueryListListener):
        * bindings/scripts/test/V8/V8TestNamedConstructor.cpp:
        (WebCore):
        * bindings/scripts/test/V8/V8TestNamedConstructor.h:
        (V8TestNamedConstructor):
        * bindings/scripts/test/V8/V8TestObj.cpp:
        (WebCore):
        * bindings/scripts/test/V8/V8TestObj.h:
        (V8TestObj):
        * bindings/scripts/test/V8/V8TestSerializedScriptValueInterface.cpp:
        (WebCore):
        * bindings/scripts/test/V8/V8TestSerializedScriptValueInterface.h:
        (V8TestSerializedScriptValueInterface):
        * bindings/v8/NPV8Object.cpp:
        (WebCore::npObjectTypeInfo):
        * bindings/v8/V8GCController.cpp:
        (WebCore::GrouperVisitor::visitDOMWrapper):
        * bindings/v8/WrapperTypeInfo.h:
        (WebCore):
        (WrapperTypeInfo):
        * bindings/v8/custom/V8CSSStyleSheetCustom.cpp: Removed.
        * bindings/v8/custom/V8DOMStringMapCustom.cpp:
        * bindings/v8/custom/V8DOMTokenListCustom.cpp: Removed.
        * bindings/v8/custom/V8HTMLImageElementConstructor.cpp:
        (WebCore):
        * bindings/v8/custom/V8NamedNodeMapCustom.cpp:
        * bindings/v8/custom/V8StyleSheetCustom.cpp:
        (WebCore::toV8):
        * css/CSSStyleSheet.idl:
        * css/StyleSheet.idl:
        * dom/DOMStringMap.idl:
        * dom/NamedNodeMap.idl:
        * html/DOMTokenList.idl:
        * html/track/TextTrackList.cpp:
        * html/track/TextTrackList.idl:

2012-03-13  Jacky Jiang  <zhajiang@rim.com>

        MathML crash in WebCore::Node::previousSibling()
        https://bugs.webkit.org/show_bug.cgi?id=80773

        Reviewed by Julien Chaffraix.

        When adding child for msub render, if the child is mtr or mtd render,
        we will creat an anonymous render as the container. As the anonymous
        render's node is 0, accessing it directly can cause crash.
        We should do a valid check of the node before using. In addition to
        that, for msub, attach the anonymous render and it's children to render
        tree. For msubsup, such kind of situation should never happen based on
        the current codebase.

        Test: mathml/msub-anonymous-child-render-crash.html

        * rendering/mathml/RenderMathMLSubSup.cpp:
        (WebCore::RenderMathMLSubSup::addChild):

2012-03-13  Mihnea Ovidenie  <mihnea@adobe.com>

        [CSSRegions]NamedFlow::getRegionsByContentNode should not return a live NodeList
        https://bugs.webkit.org/show_bug.cgi?id=81021

        Reviewed by Ryosuke Niwa.

        Reverting the original patch as we need a better solution.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/Node.cpp:
        (WebCore::NodeListsNodeData::invalidateCaches):
        (WebCore::NodeListsNodeData::isEmpty):
        * dom/Node.h:
        (Node):
        * dom/NodeRareData.h:
        (NodeListsNodeData):
        * dom/RegionNodeList.cpp: Removed.
        * dom/RegionNodeList.h: Removed.
        * dom/WebKitNamedFlow.cpp:
        * dom/WebKitNamedFlow.h:
        (WebKitNamedFlow):
        * dom/WebKitNamedFlow.idl:
        * rendering/RenderFlowThread.cpp:
        * rendering/RenderFlowThread.h:
        * rendering/RenderRegion.h:
        (RenderRegion):

2012-03-13  Shawn Singh  <shawnsingh@chromium.org>

        [chromium] wrong transform causing incorrect culling
        https://bugs.webkit.org/show_bug.cgi?id=80471

        Reviewed by James Robinson.

        Unit test added to CCRenderSurfaceTest.cpp

        In addition to using originTransform() instead of drawTransform(),
        this patch shuffles a bit of code so that a unit test can be
        easily added.

        * platform/graphics/chromium/cc/CCRenderPass.cpp:
        (WebCore::CCRenderPass::appendQuadsForRenderSurfaceLayer):
        * platform/graphics/chromium/cc/CCRenderSurface.cpp:
        (WebCore::CCRenderSurface::createSharedQuadState):
        (WebCore):
        * platform/graphics/chromium/cc/CCRenderSurface.h:
        (CCRenderSurface):

2012-03-13  Dave Tharp  <dtharp@codeaurora.org>

        Alternate xml-stylesheets with no title are loaded, in violation of the CSSOM draft
        https://bugs.webkit.org/show_bug.cgi?id=77549

        Reviewed by David Hyatt.

        Amended code to ignore alternate stylesheets that do not have a title attribute.

        Test: fast/css/xml-stylesheet-alternate-no-title.xhtml

        * dom/ProcessingInstruction.cpp:
        (WebCore::ProcessingInstruction::checkStyleSheet):

2012-03-13  Levi Weintraub  <leviw@chromium.org>

        Revert RenderLayer::absoluteBoundingBox to an IntRect
        https://bugs.webkit.org/show_bug.cgi?id=81017

        Reviewed by Eric Seidel.

        Reverting RenderLayer::absoluteBoundingBox to an (pixel snapped) IntRect. Whenever
        possible, we use integers representing for absolute coordinates. This is especially
        relevant for methods, such as this one, that are exported and used in platform code.

        No new tests. No change in behavior.

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::absoluteBoundingBox):
        * rendering/RenderLayer.h:
        (RenderLayer):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::requiresCompositingForPosition): This intersects
        the absolute bounding box with the FrameView, which uses all integer values. It's
        the only use of absoluteBoundingBox in WebCore.

2012-03-13  Nat Duca  <nduca@chromium.org>

        [chromium] vsync ticks are needed in invisible tabs when we are still updating resources
        https://bugs.webkit.org/show_bug.cgi?id=80910

        Reviewed by James Robinson.

        * platform/graphics/chromium/cc/CCSchedulerStateMachine.cpp:
        (WebCore::CCSchedulerStateMachine::vsyncCallbackNeeded):

2012-03-13  Dave Tharp  <dtharp@codeaurora.org>

        Alternate stylesheets (without title attribute) are loaded on refresh
        https://bugs.webkit.org/show_bug.cgi?id=24354

        Reviewed by David Hyatt.

        Alternate stylesheets are now ignored in <link> tags if 
        they have no title attribute (per spec).

        Tests: fast/css/link-alternate-stylesheet-1.html
               fast/css/link-alternate-stylesheet-2.html
               fast/css/link-alternate-stylesheet-3.html
               fast/css/link-alternate-stylesheet-4.html
               fast/css/link-alternate-stylesheet-5.html

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

2012-03-13  Dana Jansens  <danakj@chromium.org>

        Region::contains(IntPoint) is slow
        https://bugs.webkit.org/show_bug.cgi?id=81008

        Reviewed by Anders Carlsson.

        Speed up Region::contains(IntPoint) by directly testing if the point
        is inside the Region's shape, rather than using a temporary 1x1 Region
        for the test.

        Unit test: RegionTest.containsPoint

        * platform/graphics/Region.cpp:
        (WebCore::Region::contains):

2012-03-13  Adrienne Walker  <enne@google.com>

        [chromium] Mark root layer scrollbars as always opaque to disable blending
        https://bugs.webkit.org/show_bug.cgi?id=79951

        Reviewed by James Robinson.

        Now that scrollbar layers exist, mark non-overlay root scrollbars as
        opaque. This disables blending for correctness and performance.

        * page/scrolling/chromium/ScrollingCoordinatorChromium.cpp:
        (WebCore::scrollbarLayerDidChange):
        (WebCore::ScrollingCoordinator::frameViewHorizontalScrollbarLayerDidChange):
        (WebCore::ScrollingCoordinator::frameViewVerticalScrollbarLayerDidChange):
        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::drawTileQuad):

2012-03-13  Gavin Peters  <gavinp@chromium.org>

        Remove vestigal abortEvent from image attribute.
        https://bugs.webkit.org/show_bug.cgi?id=80795

        Reviewed by Adam Barth.

        It seems we installed a listener for the abort event on images,
        but never ever raised them.  So this patch removes it.  This could
        cause different behaviour if the user sends abort events directly
        at an image element, although addEventListener will still work.

        * html/HTMLImageElement.cpp:
        (WebCore::HTMLImageElement::parseAttribute):

2012-03-13  Nate Chapin  <japhet@chromium.org>

        Rework how a CachedRawResource decides if it can be reused
        for a given ResourceRequest. Ensure method, body, cookie policy,
        and all headers match.
        http://bugs.webkit.org/show_bug.cgi?id=79325

        Reviewed by Oliver Hunt.

        Test: http/tests/cache/xhr-body.html

        * loader/cache/CachedRawResource.cpp:
        (WebCore::CachedRawResource::canReuse):
        * loader/cache/CachedRawResource.h: Take a ResourceRequest in canReuse().
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::determineRevalidationPolicy): Remove Range header
            check, since it is now redundant.

2012-03-13  Rob Buis  <rbuis@rim.com>

        Fix cast-align GCC warning
        https://bugs.webkit.org/show_bug.cgi?id=80790

        Reviewed by Dan Bates.

        This touches unpackOneRowOfBGRA8ToRGBA8.

        * platform/graphics/GraphicsContext3D.cpp:
        (WebCore):

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

        Refactor some code that is used to check whether a layer needs backing store
        https://bugs.webkit.org/show_bug.cgi?id=80917

        Reviewed by Dean Jackson.

        Move some code out of isSimpleContainerCompositingLayer() in two new
        methods to make the code more self-descriptive.
        
        No behavior change, so no tests.

        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::paintsBoxDecorations):
        (WebCore::RenderLayerBacking::paintsChildren):
        (WebCore::RenderLayerBacking::isSimpleContainerCompositingLayer):
        * rendering/RenderLayerBacking.h:
        (RenderLayerBacking):

2012-03-13  Daniel Bates  <dbates@webkit.org>

        REGRESSION(r99369): File input button doesn't highlight when pressed
        https://bugs.webkit.org/show_bug.cgi?id=79385

        Reviewed by Kent Tamura.

        Fixes an issue where the file input button doesn't highlight on mouse press.

        Currently we always override the active state of the button with whether
        a dragged file is being hovered over the file input control (i.e. can the control
        receive a dropped file; HTMLInputElement::canReceiveDroppedFiles()).
        Instead, we should only override the active state of the button when the state
        changes for whether we can receive dropped files (e.g. during a drag) so that
        we honor the active state of the button when it is pressed.

        Test: fast/forms/file/file-input-pressed-state.html

        * rendering/RenderFileUploadControl.cpp:
        (WebCore::RenderFileUploadControl::RenderFileUploadControl):
        (WebCore::RenderFileUploadControl::updateFromElement):
        * rendering/RenderFileUploadControl.h:
        (RenderFileUploadControl):

2012-03-13  Dana Jansens  <danakj@chromium.org>

        [chromium] Use CCOcclusionTracker for draw culling
        https://bugs.webkit.org/show_bug.cgi?id=80743

        Reviewed by Adrienne Walker.

        In this CL we enable the use of CCOcclusionTracker for draw-side
        culling. This means moving from a per-quad culling model to a
        per-layer model.

        When calculating RenderPasses, we construct the set of passes,
        then iterate over layers in front-to-back order. We make
        CCQuadCuller instantiable, and pass it to the layer
        appendQuads() methods instead of the bare list, where it can
        filter quads before the end up in the list.

        Covered by existing tests.

        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::drawRenderPass):
        * platform/graphics/chromium/LayerRendererChromium.h:
        * platform/graphics/chromium/cc/CCCanvasLayerImpl.cpp:
        (WebCore::CCCanvasLayerImpl::appendQuads):
        * platform/graphics/chromium/cc/CCCanvasLayerImpl.h:
        (CCCanvasLayerImpl):
        * platform/graphics/chromium/cc/CCLayerImpl.cpp:
        (WebCore::CCLayerImpl::appendQuads):
        (WebCore::CCLayerImpl::appendGutterQuads):
        (WebCore::CCLayerImpl::appendDebugBorderQuad):
        * platform/graphics/chromium/cc/CCLayerImpl.h:
        (WebCore):
        (CCLayerImpl):
        * platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:
        (WebCore::CCLayerTreeHostImpl::calculateRenderPasses):
        (WebCore::CCLayerTreeHostImpl::drawLayers):
        * platform/graphics/chromium/cc/CCLayerTreeHostImpl.h:
        (CCLayerTreeHostImpl):
        * platform/graphics/chromium/cc/CCPluginLayerImpl.cpp:
        (WebCore::CCPluginLayerImpl::appendQuads):
        * platform/graphics/chromium/cc/CCPluginLayerImpl.h:
        (CCPluginLayerImpl):
        * platform/graphics/chromium/cc/CCQuadCuller.cpp:
        (WebCore::CCQuadCuller::CCQuadCuller):
        (WebCore::CCQuadCuller::append):
        * platform/graphics/chromium/cc/CCQuadCuller.h:
        (WebCore):
        (CCQuadCuller):
        * platform/graphics/chromium/cc/CCRenderPass.cpp:
        (WebCore::CCRenderPass::appendQuadsForLayer):
        * platform/graphics/chromium/cc/CCRenderPass.h:
        (WebCore):
        (CCQuadList):
        (WebCore::CCQuadList::backToFrontBegin):
        (WebCore::CCQuadList::backToFrontEnd):
        (CCRenderPass):
        * platform/graphics/chromium/cc/CCScrollbarLayerImpl.cpp:
        (WebCore::CCScrollbarLayerImpl::appendQuads):
        * platform/graphics/chromium/cc/CCScrollbarLayerImpl.h:
        (CCScrollbarLayerImpl):
        * platform/graphics/chromium/cc/CCSolidColorLayerImpl.cpp:
        (WebCore::CCSolidColorLayerImpl::appendQuads):
        * platform/graphics/chromium/cc/CCSolidColorLayerImpl.h:
        (CCSolidColorLayerImpl):
        * platform/graphics/chromium/cc/CCTiledLayerImpl.cpp:
        (WebCore::CCTiledLayerImpl::appendQuads):
        * platform/graphics/chromium/cc/CCTiledLayerImpl.h:
        (CCTiledLayerImpl):
        * platform/graphics/chromium/cc/CCVideoLayerImpl.cpp:
        (WebCore::CCVideoLayerImpl::appendQuads):
        * platform/graphics/chromium/cc/CCVideoLayerImpl.h:
        (CCVideoLayerImpl):

2012-03-13  Adam Barth  <abarth@webkit.org> && Benjamin Poulain  <bpoulain@apple.com>

        Always enable ENABLE(CLIENT_BASED_GEOLOCATION)
        https://bugs.webkit.org/show_bug.cgi?id=78853

        Reviewed by Adam Barth.

        * CMakeLists.txt:
        * Configurations/FeatureDefines.xcconfig:
        * GNUmakefile.am:
        * GNUmakefile.list.am:
        * Modules/geolocation/Geolocation.cpp:
        (WebCore):
        (WebCore::createPositionError):
        (WebCore::Geolocation::Geolocation):
        (WebCore::Geolocation::stop):
        (WebCore::Geolocation::lastPosition):
        (WebCore::Geolocation::requestPermission):
        (WebCore::Geolocation::startUpdating):
        (WebCore::Geolocation::stopUpdating):
        * Modules/geolocation/Geolocation.h:
        (WebCore):
        (Geolocation):
        * Modules/geolocation/GeolocationController.cpp:
        * Modules/geolocation/GeolocationController.h:
        * Modules/geolocation/GeolocationError.h:
        * Modules/geolocation/GeolocationPosition.h:
        * Target.pri:
        * WebCore.exp.in:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * bindings/js/JSGeolocationCustom.cpp:
        * loader/EmptyClients.h:
        (EmptyChromeClient):
        * page/ChromeClient.h:
        (ChromeClient):
        * page/Page.cpp:
        (WebCore::Page::Page):
        * page/Page.h:
        (Page):
        * platform/GeolocationService.cpp: Removed.
        * platform/GeolocationService.h: Removed.
        * platform/mock/GeolocationClientMock.cpp:
        * platform/mock/GeolocationClientMock.h:
        * platform/mock/GeolocationServiceMock.cpp: Removed.
        * platform/mock/GeolocationServiceMock.h: Removed.

2012-03-12  Antonio Gomes  <agomes@rim.com>

        Convert nodesFromRect tests to use Internals interface
        https://bugs.webkit.org/show_bug.cgi?id=80886

        Reviewed by Ryosuke Niwa.

        Add Internals::nodesFromRect implementation to unify
        the codepath for testing Document::nodesFromRect in a
        cross port way.

        No new tests, since we are improving here the infra-structure
        for testing a specific method.

        * testing/Internals.cpp:
        (WebCore::Internals::nodesFromRect):
        (WebCore):
        * testing/Internals.h:
        (Internals):
        * testing/Internals.idl:

2012-03-13  Philip Rogers  <pdr@google.com>

        Fix the use of stale text fragments
        https://bugs.webkit.org/show_bug.cgi?id=80729

        Reviewed by Nikolas Zimmermann.

        Previously, we were allowing SVGTextFragments to get out of sync with the
        actual text in RenderSVGInlineTextBox. This patch reuses the dirty line
        box code in RenderText::setTextWithOffset to force
        clearTextFragments() when setTextWithOffset is called, preventing the use
        of stale SVGTextFragments.

        Test: svg/custom/delete-text-crash.html

        * rendering/InlineBox.h:
        (InlineBox):
        * rendering/svg/SVGInlineTextBox.cpp:
        (WebCore::SVGInlineTextBox::dirtyLineBoxes):
        (WebCore):
        * rendering/svg/SVGInlineTextBox.h:
        (SVGInlineTextBox):

2012-03-13  Nikolas Zimmermann  <nzimmermann@rim.com>

        SVG Animations update baseVal instead of animVal
        https://bugs.webkit.org/show_bug.cgi?id=12437

        Reviewed by Dirk Schulze.

        Blind fix for some GC related assertions firing on v8.

        Assure that animationStarted/animationEnded calls are happening
        on the same SVGAnimatedProperty. Always call animationEnded(),
        even if we shouldn't do anything for the target element, as its
        destructed, as we still have to reset m_isAnimating.

        * svg/SVGAnimateElement.cpp:
        (WebCore::SVGAnimateElement::SVGAnimateElement):
        (WebCore::SVGAnimateElement::resetToBaseValue):
        (WebCore::SVGAnimateElement::targetElementWillChange):
        * svg/SVGAnimateElement.h:
        (SVGAnimateElement):
        * svg/properties/SVGAnimatedPropertyTearOff.h:
        (WebCore::SVGAnimatedPropertyTearOff::animationEnded):

2012-03-13  Mark Pilgrim  <pilgrim@chromium.org>

        Move DirectoryEntry and DirectoryReader to new Modules/filesystem/ directory
        https://bugs.webkit.org/show_bug.cgi?id=80625

        Reviewed by Adam Barth.

        No new tests, all existing tests pass.

        * CMakeLists.txt:
        * DerivedSources.make:
        * DerivedSources.pri:
        * GNUmakefile.am:
        * GNUmakefile.list.am:
        * Modules/filesystem: Added.
        * Modules/filesystem/DirectoryEntry.cpp: Copied from Source/WebCore/fileapi/DirectoryEntry.cpp.
        * Modules/filesystem/DirectoryEntry.h: Copied from Source/WebCore/fileapi/DirectoryEntry.h.
        * Modules/filesystem/DirectoryEntry.idl: Copied from Source/WebCore/fileapi/DirectoryEntry.idl.
        * Modules/filesystem/DirectoryEntrySync.cpp: Copied from Source/WebCore/fileapi/DirectoryEntrySync.cpp.
        * Modules/filesystem/DirectoryEntrySync.h: Copied from Source/WebCore/fileapi/DirectoryEntrySync.h.
        * Modules/filesystem/DirectoryEntrySync.idl: Copied from Source/WebCore/fileapi/DirectoryEntrySync.idl.
        * Modules/filesystem/DirectoryReader.cpp: Copied from Source/WebCore/fileapi/DirectoryReader.cpp.
        * Modules/filesystem/DirectoryReader.h: Copied from Source/WebCore/fileapi/DirectoryReader.h.
        * Modules/filesystem/DirectoryReader.idl: Copied from Source/WebCore/fileapi/DirectoryReader.idl.
        * Modules/filesystem/DirectoryReaderBase.h: Copied from Source/WebCore/fileapi/DirectoryReaderBase.h.
        * Modules/filesystem/DirectoryReaderSync.cpp: Copied from Source/WebCore/fileapi/DirectoryReaderSync.cpp.
        * Modules/filesystem/DirectoryReaderSync.h: Copied from Source/WebCore/fileapi/DirectoryReaderSync.h.
        * Modules/filesystem/DirectoryReaderSync.idl: Copied from Source/WebCore/fileapi/DirectoryReaderSync.idl.
        * Target.pri:
        * WebCore.gyp/WebCore.gyp:
        * WebCore.gypi:
        * WebCore.pri:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * fileapi/DirectoryEntry.cpp: Removed.
        * fileapi/DirectoryEntry.h: Removed.
        * fileapi/DirectoryEntry.idl: Removed.
        * fileapi/DirectoryEntrySync.cpp: Removed.
        * fileapi/DirectoryEntrySync.h: Removed.
        * fileapi/DirectoryEntrySync.idl: Removed.
        * fileapi/DirectoryReader.cpp: Removed.
        * fileapi/DirectoryReader.h: Removed.
        * fileapi/DirectoryReader.idl: Removed.
        * fileapi/DirectoryReaderBase.h: Removed.
        * fileapi/DirectoryReaderSync.cpp: Removed.
        * fileapi/DirectoryReaderSync.h: Removed.
        * fileapi/DirectoryReaderSync.idl: Removed.

2012-03-13  Igor Oliveira  <igor.o@sisa.samsung.com>

        animation-iteration-count does not handle floating point values correctly.
        https://bugs.webkit.org/show_bug.cgi?id=69531

        Implements support for non-integers animation-iteration-count numbers.
        Non-integer numbers will cause the animation to end part-way through a cycle.

        Reviewed by Dean Jackson.

        Tests: animations/fill-mode-iteration-count-non-integer.html
               animations/keyframes-iteration-count-non-integer.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseAnimationIterationCount):
        * css/CSSStyleApplyProperty.cpp:
        (WebCore::CSSStyleApplyProperty::CSSStyleApplyProperty):
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::collectMatchingRulesForList):
        * page/animation/AnimationBase.cpp:
        (WebCore::AnimationBase::fractionalTime):
        (WebCore::AnimationBase::progress):
        * page/animation/CompositeAnimation.cpp:
        (WebCore::CompositeAnimation::pauseAnimationAtTime):
        * platform/animation/Animation.h:
        (WebCore::Animation::iterationCount):
        (WebCore::Animation::setIterationCount):
        (Animation):
        (WebCore::Animation::initialAnimationIterationCount):

2012-03-13  Tommy Widenflycht  <tommyw@google.com>

        MediaStream API: Rename PeerConnection to DeprecatedPeerConnection
        https://bugs.webkit.org/show_bug.cgi?id=80692

        Reviewed by Adam Barth.

        First patch in a series of patches to change the PeerConnection from ROAP to JSEP,
        see bug 80589 for more information.

        Patch covered by modified existing tests.

        * GNUmakefile.list.am:
        * Modules/mediastream/DOMWindowMediaStream.idl:
        * Modules/mediastream/DeprecatedPeerConnection.cpp: Renamed from Source/WebCore/Modules/mediastream/PeerConnection.cpp.
        (WebCore):
        (WebCore::DeprecatedPeerConnection::create):
        (WebCore::DeprecatedPeerConnection::DeprecatedPeerConnection):
        (WebCore::DeprecatedPeerConnection::~DeprecatedPeerConnection):
        (WebCore::DeprecatedPeerConnection::processSignalingMessage):
        (WebCore::DeprecatedPeerConnection::readyState):
        (WebCore::DeprecatedPeerConnection::send):
        (WebCore::DeprecatedPeerConnection::addStream):
        (WebCore::DeprecatedPeerConnection::removeStream):
        (WebCore::DeprecatedPeerConnection::localStreams):
        (WebCore::DeprecatedPeerConnection::remoteStreams):
        (WebCore::DeprecatedPeerConnection::close):
        (WebCore::DeprecatedPeerConnection::didCompleteICEProcessing):
        (WebCore::DeprecatedPeerConnection::didGenerateSDP):
        (WebCore::DeprecatedPeerConnection::didReceiveDataStreamMessage):
        (WebCore::DeprecatedPeerConnection::didAddRemoteStream):
        (WebCore::DeprecatedPeerConnection::didRemoveRemoteStream):
        (WebCore::DeprecatedPeerConnection::interfaceName):
        (WebCore::DeprecatedPeerConnection::scriptExecutionContext):
        (WebCore::DeprecatedPeerConnection::stop):
        (WebCore::DeprecatedPeerConnection::eventTargetData):
        (WebCore::DeprecatedPeerConnection::ensureEventTargetData):
        (WebCore::DeprecatedPeerConnection::scheduleInitialNegotiation):
        (WebCore::DeprecatedPeerConnection::initialNegotiationTimerFired):
        (WebCore::DeprecatedPeerConnection::ensureStreamChangeScheduled):
        (WebCore::DeprecatedPeerConnection::streamChangeTimerFired):
        (WebCore::DeprecatedPeerConnection::scheduleReadyStateChange):
        (WebCore::DeprecatedPeerConnection::readyStateChangeTimerFired):
        (WebCore::DeprecatedPeerConnection::changeReadyState):
        * Modules/mediastream/DeprecatedPeerConnection.h: Renamed from Source/WebCore/Modules/mediastream/PeerConnection.h.
        (WebCore):
        (DeprecatedPeerConnection):
        (WebCore::DeprecatedPeerConnection::didChangeState):
        (WebCore::DeprecatedPeerConnection::refEventTarget):
        (WebCore::DeprecatedPeerConnection::derefEventTarget):
        * Modules/mediastream/DeprecatedPeerConnection.idl: Renamed from Source/WebCore/Modules/mediastream/PeerConnection.idl.
        * Modules/mediastream/SignalingCallback.h:
        (WebCore):
        (SignalingCallback):
        * Modules/mediastream/SignalingCallback.idl:
        * WebCore.gypi:
        * bindings/generic/RuntimeEnabledFeatures.h:
        (WebCore::RuntimeEnabledFeatures::webkitDeprecatedPeerConnectionEnabled):
        * bindings/js/JSDeprecatedPeerConnectionCustom.cpp: Renamed from Source/WebCore/bindings/js/JSPeerConnectionCustom.cpp.
        (WebCore):
        (WebCore::JSDeprecatedPeerConnectionConstructor::constructJSDeprecatedPeerConnection):
        * dom/EventTarget.h:
        (WebCore):
        * dom/EventTargetFactory.in:
        * platform/mediastream/DeprecatedPeerConnectionHandler.h: Renamed from Source/WebCore/platform/mediastream/PeerConnectionHandler.h.
        (WebCore):
        (DeprecatedPeerConnectionHandler):
        * platform/mediastream/DeprecatedPeerConnectionHandlerClient.h: Renamed from Source/WebCore/platform/mediastream/PeerConnectionHandlerClient.h.
        (WebCore):
        (DeprecatedPeerConnectionHandlerClient):
        (WebCore::DeprecatedPeerConnectionHandlerClient::~DeprecatedPeerConnectionHandlerClient):
        * platform/mediastream/gstreamer/DeprecatedPeerConnectionHandler.cpp: Renamed from Source/WebCore/platform/mediastream/gstreamer/PeerConnectionHandler.cpp.
        (WebCore):
        (WebCore::DeprecatedPeerConnectionHandler::create):
        (WebCore::DeprecatedPeerConnectionHandler::DeprecatedPeerConnectionHandler):
        (WebCore::DeprecatedPeerConnectionHandler::~DeprecatedPeerConnectionHandler):
        (WebCore::DeprecatedPeerConnectionHandler::produceInitialOffer):
        (WebCore::DeprecatedPeerConnectionHandler::handleInitialOffer):
        (WebCore::DeprecatedPeerConnectionHandler::processSDP):
        (WebCore::DeprecatedPeerConnectionHandler::processPendingStreams):
        (WebCore::DeprecatedPeerConnectionHandler::sendDataStreamMessage):
        (WebCore::DeprecatedPeerConnectionHandler::stop):

2012-03-13  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: front-end compilation was broken while supporting large arrays.
        https://bugs.webkit.org/show_bug.cgi?id=81013

        Reviewed by Vsevolod Vlasov.

        * inspector/front-end/ExtensionPanel.js:
        * inspector/front-end/ObjectPropertiesSection.js:
        (WebInspector.ArrayGroupingTreeElement._populateNonIndexProperties.buildObjectFragment):
        * inspector/front-end/RemoteObject.js:

2012-03-13  Tony Chang  <tony@chromium.org>

        flexbox's computePreferredLogicalWidth needs to take multiline into account
        https://bugs.webkit.org/show_bug.cgi?id=80931

        Reviewed by Ojan Vafai.

        Tests: css3/flexbox/multiline-shrink-to-fit-expected.html
               css3/flexbox/multiline-shrink-to-fit.html

        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::computePreferredLogicalWidths): Set min/max preferredLogicalWidth based on always breaking or never breaking.
        (WebCore::RenderFlexibleBox::computeNextFlexLine): Add a FIXME.
        (WebCore::RenderFlexibleBox::layoutAndPlaceChildren): Don't change the width after computePreferredWidth has been called.

2012-03-13  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r110469.
        http://trac.webkit.org/changeset/110469
        https://bugs.webkit.org/show_bug.cgi?id=81010

        This patch still appears to crash (Requested by abarth on
        #webkit).

        * page/FrameView.cpp:
        (WebCore::FrameView::FrameView):
        (WebCore::FrameView::reset):
        (WebCore::FrameView::repaintContentRectangle):
        (WebCore):
        (WebCore::FrameView::endDeferredRepaints):
        (WebCore::FrameView::doDeferredRepaints):
        (WebCore::FrameView::deferredRepaintTimerFired):
        * page/FrameView.h:
        (FrameView):
        * rendering/RenderView.cpp:
        (WebCore::RenderView::shouldRepaint):
        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::drawSVGToImageBuffer):
        (WebCore::SVGImage::draw):
        * svg/graphics/SVGImage.h:
        * svg/graphics/SVGImageCache.cpp:
        (WebCore::SVGImageCache::imageContentChanged):
        (WebCore::SVGImageCache::redrawTimerFired):
        * svg/graphics/SVGImageCache.h:
        (SVGImageCache):

2012-03-13  Max Vujovic  <mvujovic@adobe.com>

        Add a method to window.internals to enable testing of inspector highlight rects
        https://bugs.webkit.org/show_bug.cgi?id=80338

        Reviewed by Pavel Feldman.

        Add window.internals.inspectorHighlightRects, a method which makes it possible to test the
        positions and sizes of inspector highlight rects.

        Test: inspector/elements/highlight-node.html

        * WebCore.exp.in: Export symbols.
        * testing/Internals.cpp:
        (WebCore::Internals::inspectorHighlightRects): Call InspectorController::getHighlight and
        return the highlight's quads as a ClientRectList.
        (WebCore):
        * testing/Internals.h:
        (WebCore):
        (Internals):
        * testing/Internals.idl:

            Add inspectorHighlightRects to the window.internals interface.

2012-03-13  Konrad Piascik  <kpiascik@rim.com>

        [BlackBerry] Remove sublayers before clamping just in case the layer already exists
        https://bugs.webkit.org/show_bug.cgi?id=80989

        Reviewed by Antonio Gomes.

        Discovered when trying to add a highlight sublayer for web inspector.  Since that layer
        may already exist in the tree we need to see if it will be pruned before we clamp on the
        size.

        This was manually tested during the writing of another patch to add web inspector highlights
        to accelrated compositing.

        * platform/graphics/blackberry/LayerWebKitThread.cpp:
        (WebCore::LayerWebKitThread::insertSublayer):

2012-03-13  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Add snippets model.
        https://bugs.webkit.org/show_bug.cgi?id=80863

        Reviewed by Yury Semikhatsky.

        Test: inspector/debugger/snippets-model.html

        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * inspector/compile-front-end.py:
        * inspector/front-end/Settings.js:
        (WebInspector.ExperimentsSettings):
        * inspector/front-end/SnippetsModel.js: Added.
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/inspector.html:
        * inspector/front-end/inspector.js:

2012-03-13  'Pavel Feldman'  <pfeldman@chromium.org>

        Not reviewed: chromium build fix.

        * history/CachedFrame.cpp:

2012-03-13  Peter Rybin  <peter.rybin@gmail.com>

        Web Inspector: CodeGeneratorInspector.py: refactor copy-paste getter methods
        https://bugs.webkit.org/show_bug.cgi?id=80923

        Reviewed by Yury Semikhatsky.

        Several methods are combined in one using C++ templates.

        * inspector/CodeGeneratorInspector.py:

2012-03-13  Rob Buis  <rbuis@rim.com>

        [BlackBerry] Fix cast-align warning in QuotesData.cpp
        https://bugs.webkit.org/show_bug.cgi?id=80601

        Reviewed by Nikolas Zimmermann.

        Fix warning by adding variable of correct return type.

        * rendering/style/QuotesData.cpp:
        (WebCore::QuotesData::create):

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

        <rdar://problem/7908830> and https://bugs.webkit.org/show_bug.cgi?id=34679
        Location and other objects are dysfunctional after a document gets restored from page cache

        Reviewed by Adam Barth.

        Test: fast/loader/window-properties-restored-from-page-cache.html

        Give DOMWindowProperties the ability to reconnect to their Frame:
        * page/DOMWindowProperty.cpp:
        (WebCore::DOMWindowProperty::reconnectFrame):
        * page/DOMWindowProperty.h:
        (DOMWindowProperty):

        Let ApplicationCache do some extra work when reconnecting:
        * loader/appcache/DOMApplicationCache.cpp:
        (WebCore::DOMApplicationCache::reconnectFrame):
        (WebCore):
        * loader/appcache/DOMApplicationCache.h:
        (DOMApplicationCache):

        Let IndexDB do some extra work when reconnecting:
        * Modules/indexeddb/DOMWindowIndexedDatabase.cpp:
        (WebCore::DOMWindowIndexedDatabase::disconnectFrame):
        (WebCore::DOMWindowIndexedDatabase::reconnectFrame):
        (WebCore::DOMWindowIndexedDatabase::webkitIndexedDB):
        * Modules/indexeddb/DOMWindowIndexedDatabase.h:
        (DOMWindowIndexedDatabase):

        Tell the DOMWindow to suspend to the page cache:
        * history/CachedFrame.cpp:
        (WebCore::CachedFrame::CachedFrame):

        Tell the DOMWindow to resume from the page cache:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::open):

        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::DOMWindow):
        (WebCore::DOMWindow::~DOMWindow): Call clearDOMWindowProperties directly instead of clear()
        (WebCore::DOMWindow::frameDestroyed): Ditto.
        (WebCore::DOMWindow::clear): Only clear if the DOMWindow is not suspended for the page cache.
        (WebCore::DOMWindow::suspendForPageCache): Disconnect properties and set the page cache flag.
        (WebCore::DOMWindow::resumeFromPageCache): Reconnect properties and revert the page cache flag.
        (WebCore::DOMWindow::disconnectDOMWindowProperties): Only disconnect the registered properties.
        (WebCore::DOMWindow::reconnectDOMWindowProperties):
        (WebCore::DOMWindow::clearDOMWindowProperties): Disconnect the registered properties then clear them out.

        For all of the following, if the DOMWindow is not displayed in a frame (i.e., it is suspended), do nothing:
        (WebCore::DOMWindow::screen):
        (WebCore::DOMWindow::history):
        (WebCore::DOMWindow::crypto):
        (WebCore::DOMWindow::locationbar):
        (WebCore::DOMWindow::menubar):
        (WebCore::DOMWindow::personalbar):
        (WebCore::DOMWindow::scrollbars):
        (WebCore::DOMWindow::statusbar):
        (WebCore::DOMWindow::toolbar):
        (WebCore::DOMWindow::console):
        (WebCore::DOMWindow::applicationCache):
        (WebCore::DOMWindow::navigator):
        (WebCore::DOMWindow::performance):
        (WebCore::DOMWindow::location):
        (WebCore::DOMWindow::sessionStorage):
        (WebCore::DOMWindow::localStorage):
        (WebCore::DOMWindow::webkitNotifications):
        (WebCore::DOMWindow::postMessageTimerFired):
        (WebCore::DOMWindow::getSelection):
        (WebCore::DOMWindow::styleMedia):
        (WebCore::DOMWindow::webkitStorageInfo):
        * page/DOMWindow.h:

2012-03-13  Dana Jansens  <danakj@chromium.org>

        [chromium] Use projectQuad to apply inverse mapRect
        https://bugs.webkit.org/show_bug.cgi?id=80741

        Reviewed by Adrienne Walker.

        Unit test: CCOcclusionTrackerTest3dTransform
                   CCOcclusionTrackerTestPerspectiveTransform
                   CCOcclusionTrackerTestPerspectiveTransformBehindCamera

        * platform/graphics/chromium/cc/CCOcclusionTracker.cpp:
        (WebCore::projectQuad):
        (WebCore):
        (WebCore::computeUnoccludedContentRect):

2012-03-13  Gavin Peters  <gavinp@chromium.org>

        New PageCache histogram which counts failures ignoring Settings.
        https://bugs.webkit.org/show_bug.cgi?id=80864

        Reviewed by Brady Eidson.

        Chrome has a command line switch to turn on the page cache.
        Currently it doesn't work, but it can cause the PageCache reasons
        for failure count to read lower than it should.  Add a new
        histogram to report the corrected value.

        * history/PageCache.cpp:
        (WebCore::logCanCachePageDecision):

2012-03-13  George Staikos  <staikos@webkit.org>

        Fix signed/unsigned mismatch compiler warnings.
        https://bugs.webkit.org/show_bug.cgi?id=80790

        Reviewed by Alexey Proskuryakov.

        * loader/icon/IconDatabase.cpp:
        (WebCore::IconDatabase::synchronousLoadDecisionForIconURL):
        * platform/network/MIMESniffing.cpp:

2012-03-13  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r110510.
        http://trac.webkit.org/changeset/110510
        https://bugs.webkit.org/show_bug.cgi?id=80987

        depends on chromium r 125700, which isn't rolled into webkit
        yet :-/ (Requested by thakis_ on #webkit).

        * WebCore.gyp/mac/adjust_visibility.sh:

2012-03-13  Gavin Peters  <gavinp@chromium.org>

        Make ApplicationCacheHost::canCacheInPageCache() non-const.
        https://bugs.webkit.org/show_bug.cgi?id=80904

        Reviewed by Alexey Proskuryakov.

        A const pointer to a large object like ApplicationCacheHost is not our standard
        practice; so remove this (implicit) one.  See also https://bugs.webkit.org/show_bug.cgi?id=80898

        * loader/appcache/ApplicationCacheHost.cpp:
        (WebCore::ApplicationCacheHost::canCacheInPageCache):
        * loader/appcache/ApplicationCacheHost.h:
        (ApplicationCacheHost):

2012-03-13  Stephen Chenney  <schenney@chromium.org>

        Crash in WebCore::GraphicsContext::paintingDisabled
        https://bugs.webkit.org/show_bug.cgi?id=80669

        Reviewed by Nikolas Zimmermann.

        The SVGImageBufferTools::clipToImageBuffer method deletes the clip
        image when it thinks it is not needed. However, there are cases when
        it is in fact still needed, particularly when the clip buffer is
        coming from higher up in the stack where it may be needed again.

        So this patch adds a flag to only allow deletion of the image buffer
        if it was created at the most recent call site.

        Tests: svg/custom/circular-clip-path-references-crash-expected.svg
               svg/custom/circular-clip-path-references-crash.svg

        * rendering/svg/RenderSVGResourceClipper.cpp:
        (WebCore::RenderSVGResourceClipper::applyClippingToContext):
        * rendering/svg/RenderSVGResourceGradient.cpp:
        (WebCore::clipToTextMask):
        * rendering/svg/RenderSVGResourceMasker.cpp:
        (WebCore::RenderSVGResourceMasker::applyResource):
        * rendering/svg/SVGImageBufferTools.cpp:
        (WebCore::SVGImageBufferTools::clipToImageBuffer):
        * rendering/svg/SVGImageBufferTools.h:
        (SVGImageBufferTools):

2012-03-13  Gavin Peters  <gavinp@chromium.org>

        Fix an enumeration name in ReasonsFrameCannotBeInPageCache.
        https://bugs.webkit.org/show_bug.cgi?id=80849

        Reviewed by Brady Eidson.

        It seems that somebody goofed, and named one of the
        ReasonsFrameCannotBeInPageCache antonymically.

        * history/PageCache.cpp:
        (WebCore::logCanCacheFrameDecision):

2012-03-12  Kinuko Yasuda  <kinuko@chromium.org>

        File upload control should use File.name() rather than File.path() to show chosen filenames
        https://bugs.webkit.org/show_bug.cgi?id=80970

        In some rare cases (e.g. files from FileSystem API or files created
        using the newly added WebKit API) File.name has different displayName
        from the basename of file.path, and in the file uploader controller we
        should use File.name rather than File.path.

        Reviewed by Kent Tamura.

        No new tests: existing tests should pass as this should not change
        behavior in regular use cases.  (New behavior where File.name differs
        from File.path can be only tested in chromeos environment, therefore
        not adding new tests for that)

        * platform/gtk/RenderThemeGtk.cpp:
        (WebCore::RenderThemeGtk::fileListNameForWidth): Updated to handle FileList.
        * platform/gtk/RenderThemeGtk.h:
        * platform/qt/RenderThemeQt.cpp:
        (WebCore::RenderThemeQt::fileListNameForWidth): Updated to handle FileList.
        * platform/qt/RenderThemeQt.h:
        * rendering/RenderFileUploadControl.cpp:
        (WebCore::RenderFileUploadControl::fileTextValue): Changed to pass FileList rather than FileList->paths().
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::fileListNameForWidth): Updated to handle FileList and use File.name for displaying the file name.
        * rendering/RenderTheme.h:
        * rendering/RenderThemeMac.h:
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::fileListNameForWidth): Updated to handle FileList.

2012-03-13  Kinuko Yasuda  <kinuko@chromium.org>

        Allow WebFileChooser to return extra file info (like displayName) in addition to mere file paths
        https://bugs.webkit.org/show_bug.cgi?id=80719

        Reviewed by Kent Tamura.

        No new tests: this change itself shouldn't change existing behavior.

        * fileapi/File.cpp:
        (WebCore::createBlobDataForFileWithName): Renamed from createBlobDataForFileSystemFile.
        * fileapi/File.h:
        * html/FileInputType.cpp:
        (WebCore::FileInputType::saveFormControlState): Updated to handle File.name.
        (WebCore::FileInputType::restoreFormControlState): Ditto.
        (WebCore::FileInputType::setFileList): Changed the signature to take
        FileChooserFileInfo.
        (WebCore::FileInputType::filesChosen): Ditto.
        (WebCore::FileInputType::receiveDroppedFiles):
        * html/FileInputType.h:
        (FileInputType):
        * platform/FileChooser.cpp:
        (WebCore::FileChooser::chooseFiles): Added an overloaded method that
        takes FileChooserFileInfo.
        (WebCore):
        * platform/FileChooser.h:
        (WebCore::FileChooserFileInfo::FileChooserFileInfo): Added.
        * platform/MIMETypeRegistry.cpp:
        (WebCore::MIMETypeRegistry::getWellKnownMIMETypeForExtension): Removed surrouonding ifdefs as this function is now used even if FILE_SYSTEM is not enabled.
        * platform/MIMETypeRegistry.h:
        (MIMETypeRegistry):

2012-03-13  Vsevolod Vlasov  <vsevik@chromium.org>

        Unreviewed inspector compilation module name fix after r110550.

        * inspector/compile-front-end.py:

2012-03-12  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Changes to the list of scripts for front-end compilation should not require update of number of scripts in module.
        https://bugs.webkit.org/show_bug.cgi?id=80872

        Reviewed by Pavel Feldman.

        * inspector/compile-front-end.py: Added.
        * inspector/compile-front-end.sh:

2012-03-12  Pavel Podivilov  <podivilov@chromium.org>

        Web Inspector: move ResourceScriptMapping to a separate file.
        https://bugs.webkit.org/show_bug.cgi?id=80859

        Reviewed by Vsevolod Vlasov.

        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * inspector/compile-front-end.sh:
        * inspector/front-end/ResourceScriptMapping.js: Copied from Source/WebCore/inspector/front-end/ScriptMapping.js.
        (WebInspector.ResourceScriptMapping):
        (WebInspector.ResourceScriptMapping.prototype.rawLocationToUILocation):
        (WebInspector.ResourceScriptMapping.prototype.uiSourceCodeList):
        (WebInspector.ResourceScriptMapping.prototype._handleUISourceCodeListChanged):
        (WebInspector.ResourceScriptMapping.prototype._uiSourceCodeListChanged):
        (WebInspector.ResourceScriptMapping.prototype._bindScriptToRawSourceCode):
        (WebInspector.ResourceScriptMapping.prototype.setFormatSource):
        (WebInspector.ResourceScriptMapping.prototype.forceUpdateSourceMapping):
        (WebInspector.ResourceScriptMapping.prototype.reset):
        * inspector/front-end/ScriptMapping.js:
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/inspector.html:

2012-03-12  Kentaro Hara  <haraken@chromium.org>

        Rename OptionsObject to Dictionary
        https://bugs.webkit.org/show_bug.cgi?id=80802

        Reviewed by Adam Barth.

        For clarification, rename OptionsObject.{h,cpp} to Dictionary.{h,cpp}.
        This patch just renames and sorts alphabetically.

        No tests. No change in behavior.

        * GNUmakefile.list.am:
        * Modules/indexeddb/IDBDatabase.cpp:
        (WebCore::IDBDatabase::createObjectStore):
        * Modules/indexeddb/IDBDatabase.h:
        (WebCore::IDBDatabase::createObjectStore):
        (IDBDatabase):
        * Modules/indexeddb/IDBDatabase.idl:
        * Modules/indexeddb/IDBKeyRange.h:
        * Modules/indexeddb/IDBObjectStore.cpp:
        (WebCore::IDBObjectStore::createIndex):
        * Modules/indexeddb/IDBObjectStore.h:
        (WebCore::IDBObjectStore::createIndex):
        (IDBObjectStore):
        * Modules/indexeddb/IDBObjectStore.idl:
        * Target.pri:
        * UseV8.cmake:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * bindings/js/Dictionary.h: Renamed from Source/WebCore/bindings/js/OptionsObject.h.
        (WebCore):
        (Dictionary):
        (WebCore::Dictionary::Dictionary):
        (WebCore::Dictionary::isObject):
        (WebCore::Dictionary::isUndefinedOrNull):
        (WebCore::Dictionary::get):
        (WebCore::Dictionary::getWithUndefinedOrNullCheck):
        * bindings/js/IDBBindingUtilities.cpp:
        (WebCore::createDictionaryFromValue):
        * bindings/js/IDBBindingUtilities.h:
        (WebCore):
        * bindings/scripts/CodeGeneratorJS.pm:
        (JSValueToNative):
        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateHeader):
        (GenerateParametersCheck):
        (GenerateEventConstructorCallback):
        (GetNativeType):
        (JSValueToNative):
        * bindings/scripts/test/CPP/WebDOMTestObj.cpp:
        (WebDOMTestObj::optionsObject):
        * bindings/scripts/test/CPP/WebDOMTestObj.h:
        * bindings/scripts/test/GObject/WebKitDOMTestObj.cpp:
        (webkit_dom_test_obj_options_object):
        * bindings/scripts/test/GObject/WebKitDOMTestObj.h:
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::jsTestObjPrototypeFunctionIdbKey):
        (WebCore::jsTestObjPrototypeFunctionOptionsObject):
        * bindings/scripts/test/ObjC/DOMTestObj.h:
        * bindings/scripts/test/ObjC/DOMTestObj.mm:
        (-[DOMTestObj optionsObject:ooo:]):
        * bindings/scripts/test/TestObj.idl:
        * bindings/scripts/test/V8/V8TestEventConstructor.cpp:
        (WebCore::V8TestEventConstructor::constructorCallback):
        (WebCore::fillTestEventConstructorInit):
        * bindings/scripts/test/V8/V8TestEventConstructor.h:
        (WebCore):
        * bindings/scripts/test/V8/V8TestObj.cpp:
        (WebCore::TestObjInternal::optionsObjectCallback):
        * bindings/v8/Dictionary.cpp: Renamed from Source/WebCore/bindings/v8/OptionsObject.cpp.
        (WebCore):
        (WebCore::Dictionary::Dictionary):
        (WebCore::Dictionary::~Dictionary):
        (WebCore::Dictionary::operator=):
        (WebCore::Dictionary::isObject):
        (WebCore::Dictionary::isUndefinedOrNull):
        (WebCore::Dictionary::getKey):
        (WebCore::Dictionary::get):
        (WebCore::Dictionary::getWithUndefinedOrNullCheck):
        * bindings/v8/Dictionary.h: Renamed from Source/WebCore/bindings/v8/OptionsObject.h.
        (WebCore):
        (Dictionary):
        * bindings/v8/custom/V8WebKitMutationObserverCustom.cpp:
        (WebCore::V8WebKitMutationObserver::observeCallback):

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

        SVG Animations update baseVal instead of animVal
        https://bugs.webkit.org/show_bug.cgi?id=12437

        Reviewed by Dirk Schulze.

        Begin implementing the last missing core piece of the SVG DOM: proper animVal support.
        Most SVG DOM interfaces exposing eg. lengths use SVGAnimatedLength. eg. from SVGRectElement:
        "readonly attribute SVGAnimatedLength x;" SVGAnimatedXXX contains following methods:
        "readonly attribute SVGLength baseVal; readonly attribute SVGLength animVal;"
        From SVG DOM perspective, animVal and baseVal are two distinctive objects, animVal != baseVal.
        Its underlying value is the same though, if no animation is running on that attribute.

        As soon as a SMIL animation starts animating an SVGAnimated* target attribute, its
        baseVal and animVal may begin to differ. The animVal always reflect the current animated
        value (including all effects of additive/accumulated animations) which is shown on screen
        when eg animating the width of a <rect>. The baseVal is is equal to the underlying XML
        property value / SVG DOM value, but may be influenced through dynamic changes.
        (Consider changing rect1.width.baseVal.value while 'width' is animated)

        During the last year we prepared our animation code to turn on animVal support.
        This patch adds the last missing pieces to turn on animVal support for the SVGLength.
        SVGLengthList and all other types will follow, one after the other.

        I've decided to write an exhaustive ChangeLog, as this as the base for any future
        work in this area - hopefully making this more reviewable.

        Tests: svg/animations/additive-from-to-width-animation.html
               svg/animations/additive-values-width-animation.html
               svg/animations/change-baseVal-while-animating-fill-freeze-2.html
               svg/animations/change-baseVal-while-animating-fill-freeze.html
               svg/animations/change-baseVal-while-animating-fill-remove-2.html
               svg/animations/change-baseVal-while-animating-fill-remove.html
               svg/animations/change-target-while-animating-SVG-property.html
               svg/animations/multiple-animations-fill-freeze.html
               svg/animations/remove-animation-element-while-animation-is-running.html
               svg/repaint/repainting-after-animation-element-removal.svg

        * svg/SVGAnimateElement.cpp: Remove unnecessary std namespace inclusion.
        (WebCore::SVGAnimateElement::SVGAnimateElement): Remove now-obsolete m_aboutToStopAnimation.
        (WebCore::SVGAnimateElement::calculateAnimatedValue): Swap assertion order, to test hasTagName() _before_ casting.
        (WebCore::SVGAnimateElement::resetToBaseValue):
            Stop relying on the cached baseValue (breaking additive="sum"+values animation) for SVG DOM primitive animations.
            Avoid any string roundtrips previously needed to reset the SVGAnimatedType to the base value. Just grab the
            currentBaseValue() from the associated SVGAnimatedProperty, which includes all dynamic changes to the baseVal
            either by SVG DOM or setAttribute() calls - this way we don't need to utilize the buggy cache in SMILTimeContainer,
            which can be removed once all SVG DOM primitive types switched to the new animVal concept.

            NOTE: When multiple animations of the same attribute are applied to a target element, resetToBaseValue() will be called
            for the highest priority SVGSMILElement, on every animation step! Consider two <animate> elements, applied to a target
            <rect> which both animate the 'x' attribute, one from 0s to 2s, the other from 4s to 6s. The last <animate> element
            will reuse the SVGAnimatedType m_animatedType from the first <animate> element, and never create an own m_animatedType.
            When the animation starts the first time at 0s, we update the rect.x.animVals SVGLength* pointer, to point to the
            SVGAnimatedType of the first <animate> element, owning the m_animatedType. From that point on each call to rect.x.animVal
            will always return the same value as the SVGAnimatedType of the first <animate> element holds. Now after 2s the first
            <animate> element becomes inactive, but its m_animatedType remains alive. The bindings don't notice this change at all.
            Now at 4s, the second animation element gets active. It reuses the SVGAnimatedType of the first <animate> element, and
            applies its animation changes to that SVGAnimatedType, which is immediately reflected in the bindings w/o any additional
            work. It's very important for the understanding when animationStarted/animationEnded need to be called.

        (WebCore::SVGAnimateElement::applyResultsToTarget): Remove now-obsolete m_aboutToStopAnimation logic. No need to know it at this point.
        (WebCore::SVGAnimateElement::targetElementWillChange):
            Renamed from targetElementDidChange(). This method is called from SVGSMILElement for following conditions:
            - animation element is destructed
            - animation element is removed from document
            - target element of animation is destructed
            - target element of animation is removed from document
            - target element of animation changes id

            Whenever any of this happens, we need to reset the animVal. Resetting the animVal involves resetting the PropertyType* pointer,
            eg. SVGLength*, from the animVal property tear off, belonging to a certain SVGAnimatedProperty (eg. rect.x) to the initial
            value again, which is the 'm_x' of the SVGRectElement. This is needed as the SVGAnimatedType the animVal currently points to,
            if an animation is/was running, is destructed in targetElementWillChange(), to reset the SVGAnimateElement to the initial
            state before it received a target. This is the only place which destructed the m_animatedType, and thus the only place that
            needs to take care of resetting the animVal pointers.

        * svg/SVGAnimatedLength.cpp:
        (WebCore::SVGAnimatedLengthAnimator::constructFromCopy):
            Add a new constructFromCopy(SVGGenericAnimatedType) function to SVGAnimatedLengthAnimator.
            It takes a type-unsafe SVGGenericAnimatedType - the caller has to guarantee the type matches.
            This is strictly enforced for the single caller of constructFromCopy, and guaranteed to be safe.

        * svg/SVGAnimatedLength.h: Add new constructFromCopy method, which is used to avoid string-roundtrips when resetting to base values.
        * svg/SVGAnimatedType.cpp:
        (WebCore::SVGAnimatedType::supportsAnimVal): Only returns true for AnimatedLength, for now.
        (WebCore::SVGAnimatedType::setVariantValue): Takes a SVGGenericAnimatedType, assuming the type matches. Callers have to guarantee type-safety!
        * svg/SVGAnimatedType.h:
        (SVGAnimatedType): Add new static supportsAnimVal(AnimatedPropertyType) function.
        (WebCore::SVGAnimatedType::variantValue): Add a generic accessor for all animated types, called variant(). Only one place uses this.
        * svg/SVGAnimatedTypeAnimator.h:
        (WebCore::SVGAnimatedTypeAnimator::constructFromCopy):
            New method to construct an eg. SVGAnimatedLengthAnimator right from a SVGLength, instead of a String.
            In that case the SVGAnimatedType just stores a pointer to the underlying SVGLength, no copying and or other roundtrips involved.

        * svg/SVGAnimationElement.cpp:
        (WebCore::SVGAnimationElement::svgAttributeChanged):
            Implement this instead of attributeChanged. The previous implementation reset the animation state to Inactive, causing a full
            rebuild, whenever any attribute changes, even though it might not be related for the animation element, eg.
            animate.setAttribute("stdDeviationX", "foobar"). Fix that by checking if we support the attribute (keyTimes/keySplines/etc..)
            , if not pass it on to SVGSMILElement (which supports begin/end/etc..) to check if it can handle that.

        (WebCore::SVGAnimationElement::animationAttributeChanged):
            Called from our svgAttributeChanged, and/or from SVGSMILElement::svgAttributeChanged, whenever a _known_ attribute has changed.
            This sledgehammer should be used with care, instead of each time attributeChanged() is called :-)

        (WebCore::setTargetAttributeAnimatedCSSValue):
            Remove support for removing properties from the override style sheet. I've added this optimization too early, we should reevaluate
            this once more types support animVal. It currently complexifies the logic too much, requiring setAttributeAnimatedValue to know
            if the animation ends (and that's not easy to figure out, at least not using started/endedActiveInterval, as I anticipated).

        (WebCore::findMatchingAnimatedProperty):
            Add helper functions which retrieves a SVGAnimatedProperty* for a given SVGElement* targetElement, an attributeName, and an attribute
            type. eg. findMatchingAnimatedProperty(myRectElement, SVGNames::xAttr, AnimatedLength) returns the SVGAnimatedProperty which is
            exposed to JS, that holds: SVGProperty* baseVal, and SVGProperty* animVal. (Lazily created if they got accessed from JS.). This is
            used to update the animVal pointing to a new eg. SVGLength* value, once animation has started, to make rect->x() return that new
            SVGLength* value (internally), and to reflect the current animated value in rect.x.animVal.value from JS.

        (WebCore::SVGAnimationElement::applyAnimatedValue): Refactored from setTargetAttributeAnimatedValue, to simplify the code.
        (WebCore::notifyAnimatedPropertyAboutAnimationBeginEnd):
            Helper function to share code betweeen animationStarted/animationEnded.
            It takes a SVGAnimatedProperty* and a SVGAnimatedType* which may be zero, indicating that the animation ended.
            It calls animationStarted/animationEnded on the given SVGAnimatedProperty, to update the animVal state.
            It also figures out all instances of the target element, and their SVGAnimatedProperties that may need updating.

        (WebCore::SVGAnimationElement::animationStarted): Uses the helper above, passing on the given animatedType.
        (WebCore::SVGAnimationElement::animationEnded): Uses the helper above, passing 0 as animatedType.
        (WebCore::InstanceUpdateBlocker::InstanceUpdateBlocker):
            Added new helper struct, doing element->setInstancesUpdatedBlock(true) on construction and setInstancesUpdatesBlocked(false) on
            destruction, making it impossible to forget one. If we ever rewrite svgAttributeChanged & co to auto-update the cloned instances,
            this can go away.

        (WebCore::SVGAnimationElement::setTargetAttributeAnimatedValue):
            Now takes an SVGAnimatedType* instead of a String parameter. In order to avoid string-roundtrips for animVal support, let us
            decide if we need to construct a String out of it, or not. For animations supporting animVal (only SVGLength) we don't need
            to update any attribute or animVal pointer here, that happens automatically! We only need to notify the targetElement eg,
            that its xAttr changed! Previously we had to call targetElement->setAttribute("x", "...") on every animation step for
            SVGLength animations - that's gone now! The SVGAnimatedType pointers remains the same during the whole animation, so there's
            no need to call animationStarted() at each animated step!

        (WebCore::SVGAnimationElement::animatedPropertyForType):
            Helper function returning a SVGAnimatedProperty* for the current target element & current target attribute, if the
            current animation is running on a type supporting animVal (SVGLength), or returning 0. This is needed for SVGAnimateElement.
            Reuses the existing findMatchingAnimatedProperty code.

        * svg/SVGAnimationElement.h:
        * svg/animation/SMILTimeContainer.cpp:
        (WebCore::SMILTimeContainer::updateAnimations):
            Add comment to clarify why caching baseValues is just wrong. For SVGLength animations the problem is now gone.
            This is exercised using the new additive-from-to-width-animation.html & additive-values-width-animation.html tests.

        * svg/animation/SVGSMILElement.cpp:
        (WebCore::SVGSMILElement::removedFromDocument):
            Since animVal requires that the SVGAnimatedProperties are correctly reset if an animation element is removed from the document,
            we have to call targetElementWillChange(0) from here. That requires to move the "m_attributeName = anyQName()" line down,
            otherwise targetElementWillChange() would early exit, as no valid attributeName was specified.
            
            This is verified using the new svg/animations/remove-animation-element-while-animation-is-running.html
            and svg/repaint/repainting-after-animation-element-removal.svg tests.

        (WebCore::SVGSMILElement::isSupportedAttribute): Add function like all SVG*Elements have identifying their supported attributes.
        (WebCore::SVGSMILElement::svgAttributeChanged):
            Implement svgAttributeChanged instead of attributeChanged. Only take action if the attribute is actually supported.
            If one of the common attributes like begin/end/etc. changed, be sure to call animationAttributeChanged() so that our
            ancestor-classes get notified about this and can take action as well. NOTE: This is not about animating begin/end attributes,
            but about pure DOM changes. begin/end/et.. are not exposed to the SVG DOM, we still reuse the svgAttributeChanged logic
            for consistency. (This does NOT make those attributes animatable, nothing this here as it came up while reviewing).
    
        (WebCore::SVGSMILElement::targetElement): Adapt logic to targetElementDidChange -> targetElementWillChange change.
        (WebCore::SVGSMILElement::targetElementWillChange):
            Renamed from targetElementDidChange. Added "oldTarget" as parameter as well. Our ancestor-classes like SVGAnimateElement
            use this to properly deregister the animVal in the old target, before resetting the SVGAnimatedType, otherwise we'd leave
            dangling pointers around (verified manually by guard malloc runs, that none of this happens).

            Also add a default implementation here in targetElementWillChange, that ancestor classes have to call.
            Now we properly call endedActiveInterval() if the m_activeState is currently Active, so that animations are shut-down
            just like if the animation properly ends (use the same cleanup routines, etc.). Not doing that now leads to assertions.

        (WebCore::SVGSMILElement::resetTargetElement):
            Instead of forcing m_activeState to be inactive, use the standard methods to end the animation.
            targetElementWillChange(m_targetElement, 0) and animationAttributeChanged().

            resetTargetElement() is only called by SVGDocumentExtensions::removeAllAnimationElementsFromTarget() for following conditions:
            - targetElement gets destructed
            - targetElement gets removed from the document
            - targetElement id changes

            If the targetElement gets destructed or removed, no actions need to be taken, as the SVGAnimatedPropertys are teared down
            as well. But if only the id changes, we still have to properly disconnect the animVals - this is all handled through
            targetElementWillChange now - that's why this has to be called from here as well.
            That explains why targetElementWillChange() now needs to check if the targetElement is destructing or not.

        * svg/properties/SVGAnimatedEnumerationPropertyTearOff.h:
            Pass the AnimatedPropertyType from the SVGPropertyInfo to the SVGAnimatedProperties.
            Requires mechanic changes in all SVGAnimated* classes. We need acccess to the AnimatedPropertyType
            to verify the SVGAnimatedType objects, passed to animationStarted, match our type. This is to enforce
            strict type-checking, whenever SVGGenericAnimatedTypes are passed around.

        (WebCore::SVGAnimatedEnumerationPropertyTearOff::create):
        (WebCore::SVGAnimatedEnumerationPropertyTearOff::SVGAnimatedEnumerationPropertyTearOff):
        * svg/properties/SVGAnimatedListPropertyTearOff.h: Ditto.
        (WebCore::SVGAnimatedListPropertyTearOff::create):
        (WebCore::SVGAnimatedListPropertyTearOff::SVGAnimatedListPropertyTearOff):
        * svg/properties/SVGAnimatedPathSegListPropertyTearOff.h: Ditto.
        (WebCore::SVGAnimatedPathSegListPropertyTearOff::create):
        (WebCore::SVGAnimatedPathSegListPropertyTearOff::SVGAnimatedPathSegListPropertyTearOff):
        * svg/properties/SVGAnimatedProperty.h: Store AnimatedPropertyType, add accessors.
        (WebCore::SVGAnimatedProperty::animatedPropertyType): Add accessor.
        (WebCore::SVGAnimatedProperty::animationValueChanged): New animVal related functions to be implemented in the animated tear offs.
        (WebCore::SVGAnimatedProperty::animationStarted): Ditto.
        (WebCore::SVGAnimatedProperty::animationEnded): Ditto.
        (WebCore::SVGAnimatedProperty::currentBaseValue):
            Generic accessor for the baseVal: returns a SVGGenericAnimatedType.
            It takes an AnimatedPropertyType as input, that's only needed to verify that the type we're returning matches
            the expectation of the caller. If not, return 0 to avoid any potential casting mistakes, which would lead to crashes.

        (WebCore::SVGAnimatedProperty::SVGAnimatedProperty): Store m_animatedPropertyType.
        * svg/properties/SVGAnimatedPropertyTearOff.h:
        (WebCore::SVGAnimatedPropertyTearOff::create): Same changes as in the other tear offs: pass around AnimatedPropertyType.
        (WebCore::SVGAnimatedPropertyTearOff::currentBaseValue): Returns &m_property, if the type matches (see above).
        (SVGAnimatedPropertyTearOff): Pass around AnimatedPropertyType.
        (WebCore::SVGAnimatedPropertyTearOff::animationValueChanged): No-op for non list types, don't need to do anything here.
        (WebCore::SVGAnimatedPropertyTearOff::animationStarted):
        (WebCore::SVGAnimatedPropertyTearOff::animationEnded):
            Store the currently animated value in the animVal() property tear off, that's also re-used as-is for the JS bindings.
            As this is important, here's an example of how this affects methods like rect->x() used in the renderers.

            Setting m_isAnimating to true, redirects any rect->x() calls that previously returned rect->m_x, to
            rect->xAnimated()->animVal()->propertyReference() (which returns the same SVGLength& that the SVGAnimatedElement
            m_animatedType contains). Calling rect->setXBaseValue() still modifies rect->m_x, and is used by all parseAttribute()
            methods in svg/ as setAttribute() calls only ever modify the "baseValue", never the current animated value.
            rect.x.baseVal will return a SVGLength object corresponding to rect->m_x.
            rect.x.animVal will return a SVGLength object corresponding to rect->xAnimated()->animVal()->propertyReference().

            These implementation details are all hidden in the SVGAnimatedPropertyMacros. Here's an example from SVGRectElement:
            DECLARE_ANIMATED_LENGTH(X, x) -> Replace PropertyType with 'SVGLength', LowerProperty with 'x', and UpperProperty with 'X'.

            PropertyType& LowerProperty() const
            {
                if (TearOffType* wrapper = SVGAnimatedProperty::lookupWrapper<UseOwnerType, TearOffType, IsDerivedFromSVGElement<UseOwnerType>::value>(this, LowerProperty##PropertyInfo())) {
                    if (wrapper->isAnimating())
                        return wrapper->currentAnimatedValue();
                }
                return m_##LowerProperty.value;
            }

            PropertyType& LowerProperty##BaseValue() const
            {
                return m_##LowerProperty.value;
            }

            void set##UpperProperty##BaseValue(const PropertyType& type)
            {
                m_##LowerProperty.value = type;
            }

            Any code outside of svg/, eg. in rendering/svg, does not need to care about any baseVal/animVal differences.
            During layout eg. RenderSVGRect calls rect->x().value(someLengthContext) to get the current 'x' as float. If an animation
            is running on that rect element it will automatically retrieve the last set animated value here - all under the hood.
            I hope that sheds some light in those myserious functions, they were designed with animVal in mind, but we never had that until now :-)

        (WebCore::SVGAnimatedPropertyTearOff::SVGAnimatedPropertyTearOff): Pass around AnimatedPropertyType.
        (WebCore::SVGAnimatedPropertyTearOff::~SVGAnimatedPropertyTearOff): Add destructor to debug builds veryifing that m_isAnimating is false.
        * svg/properties/SVGAnimatedStaticPropertyTearOff.h: Ditto.
        (WebCore::SVGAnimatedStaticPropertyTearOff::create):
        (WebCore::SVGAnimatedStaticPropertyTearOff::SVGAnimatedStaticPropertyTearOff):
        * svg/properties/SVGAnimatedTransformListPropertyTearOff.h: Ditto.
        (WebCore::SVGAnimatedTransformListPropertyTearOff::create):
        (WebCore::SVGAnimatedTransformListPropertyTearOff::SVGAnimatedTransformListPropertyTearOff):
        * svg/properties/SVGPropertyInfo.h: Add SVGGenericAnimatedType definition.
        * svg/properties/SVGPropertyTearOff.h: Remove obsolete updateAnimVal method - switched to using setValue directly.

2012-03-13  Luke Macpherson   <macpherson@chromium.org>

        Implement CSSPropertyTextOverflow in CSSStyleApplyProperty.
        https://bugs.webkit.org/show_bug.cgi?id=80934

        Reviewed by Andreas Kling.

        No new tests / refactoring only.

        * css/CSSStyleApplyProperty.cpp:
        (WebCore::CSSStyleApplyProperty::CSSStyleApplyProperty):
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::collectMatchingRulesForList):

2012-03-12  Matt Falkenhagen  <falken@chromium.org>

        Switch Chromium from LocaleToScriptMappingICU.cpp to LocaleToScriptMappingDefault.cpp
        https://bugs.webkit.org/show_bug.cgi?id=80935

        Reviewed by Kent Tamura.

        ICU seems to have issues with non-well-formed locale strings.
        Currently, the only port that uses LocaleToScriptMappingICU.cpp is
        Chromium.

        No new tests. LocaleToScriptMappingDefault.cpp is already used by
        other ports and covered by existing tests.

        * WebCore.gyp/WebCore.gyp:

2012-03-12  Benjamin Poulain  <bpoulain@apple.com>

        Fix IndexedDB build with JSC
        https://bugs.webkit.org/show_bug.cgi?id=80207

        Reviewed by Adam Barth.

        This fixes the build of WebKit when IndexedDB is enabled. Most functions were added
        empty implementation, it compiles but IndexedDB is not working.

        * DerivedSources.make: Added missing IDL files.
        * Modules/indexeddb/IDBDatabaseBackendImpl.h: Fix warnings and build errors.
        (IDBDatabaseBackendImpl):
        * Modules/indexeddb/IDBDatabaseCallbacksImpl.cpp: ditto.
        (WebCore::IDBDatabaseCallbacksImpl::unregisterDatabase): ditto.
        * Modules/indexeddb/IDBFactoryBackendImpl.cpp: ditto.
        (WebCore::IDBFactoryBackendImpl::openBackingStore):
        * Modules/indexeddb/IDBIndexBackendImpl.cpp: ditto.
        (WebCore::IDBIndexBackendImpl::countInternal):
        * Modules/indexeddb/IDBKeyPathBackendImpl.cpp: Fix the method signature and add
        an empty implementation.
        (WebCore):
        (WebCore::IDBKeyPathBackendImpl::createIDBKeysFromSerializedValuesAndKeyPath):
        (WebCore::IDBKeyPathBackendImpl::injectIDBKeyIntoSerializedValue):
        * Modules/indexeddb/IDBObjectStoreBackendImpl.cpp: Fix warnings.
        (WebCore::IDBObjectStoreBackendImpl::countInternal):
        * Modules/indexeddb/IDBPendingTransactionMonitor.cpp: ditto.
        (WebCore::transactions):
        * Modules/indexeddb/IDBRequest.cpp: ditto.
        (WebCore::IDBRequest::resetReadyState):
        * Modules/indexeddb/IDBRequest.h: ditto.
        (WebCore::IDBRequest::onSuccessWithPrefetch):
        (WebCore):
        (WebCore::JSIDBVersionChangeRequest::visitChildren):
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/IDBBindingUtilities.cpp:
        (WebCore::createIDBKeyFromValue): Fix the creation of IDBKeys.
        (WebCore::createOptionsObjectFromValue): Add an empty implementation of
        the handling of database options (IDBObjectStoreParameters).
        (WebCore):
        * bindings/js/IDBBindingUtilities.h:
        (WebCore):
        * bindings/js/JSIDBAnyCustom.cpp:
        (WebCore::toJS): Add the missing IDBAny's types.
        * bindings/js/JSIDBKeyCustom.cpp:
        (WebCore::toJS): Add the missing IDBKey's types.
        * bindings/js/JSIDBVersionChangeRequestCustom.cpp: Added.
        IDBVersionChangeRequest has the attribute EventTarget so it requires
        the visitChildren() function. An empty implementation was added.
        * bindings/js/OptionsObject.h: Add an empty implementation.
        (WebCore):
        (OptionsObject):
        (WebCore::OptionsObject::OptionsObject):
        (WebCore::OptionsObject::isObject):
        (WebCore::OptionsObject::isUndefinedOrNull):
        (WebCore::OptionsObject::get):
        (WebCore::OptionsObject::getWithUndefinedOrNullCheck):
        * bindings/js/SerializedScriptValue.cpp: Add the missing functions needed by IndexedDB.
        (WebCore):
        (WebCore::SerializedScriptValue::create):
        (WebCore::SerializedScriptValue::toWireString):
        (WebCore::SerializedScriptValue::createFromWire):
        (WebCore::SerializedScriptValue::numberValue):
        (WebCore::SerializedScriptValue::deserialize):
        * bindings/js/SerializedScriptValue.h:
        (SerializedScriptValue):
        * bindings/scripts/CodeGeneratorJS.pm: Modify the code generator to:
        -Support the IDBKey type correctly.
        -Support the OptionsObject type.
        -Generate valid function call for static functions.
        (GenerateImplementationFunctionCall):
        (JSValueToNative):
        (NativeToJSValue):
        * inspector/InspectorIndexedDBAgent.cpp:
        (WebCore):

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

        Unreviewed, rolling out r110529.
        http://trac.webkit.org/changeset/110529
        https://bugs.webkit.org/show_bug.cgi?id=80969

        breaks mac build (Requested by morrita on #webkit).

        * platform/graphics/chromium/cc/CCOcclusionTracker.cpp:
        (WebCore::computeUnoccludedContentRect):

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

        Unreviewed, rolling out r110524.
        http://trac.webkit.org/changeset/110524
        https://bugs.webkit.org/show_bug.cgi?id=80936

        breaks chromium win build. (Requested by morrita on #webkit).

        * Target.pri:
        * UseV8.cmake:
        * WebCore.gypi:
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateHeader):
        (GenerateImplementation):
        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateHeader):
        (GenerateNamedConstructorCallback):
        (GenerateImplementation):
        * bindings/scripts/IDLAttributes.txt:
        * bindings/scripts/test/V8/V8Float64Array.cpp:
        (WebCore):
        * bindings/scripts/test/V8/V8Float64Array.h:
        (V8Float64Array):
        * bindings/scripts/test/V8/V8TestActiveDOMObject.cpp:
        (WebCore):
        * bindings/scripts/test/V8/V8TestActiveDOMObject.h:
        (V8TestActiveDOMObject):
        * bindings/scripts/test/V8/V8TestCustomNamedGetter.cpp:
        (WebCore):
        * bindings/scripts/test/V8/V8TestCustomNamedGetter.h:
        (V8TestCustomNamedGetter):
        * bindings/scripts/test/V8/V8TestEventConstructor.cpp:
        (WebCore):
        * bindings/scripts/test/V8/V8TestEventConstructor.h:
        (V8TestEventConstructor):
        * bindings/scripts/test/V8/V8TestEventTarget.cpp:
        (WebCore):
        * bindings/scripts/test/V8/V8TestEventTarget.h:
        (V8TestEventTarget):
        * bindings/scripts/test/V8/V8TestInterface.cpp:
        (WebCore):
        * bindings/scripts/test/V8/V8TestInterface.h:
        (V8TestInterface):
        * bindings/scripts/test/V8/V8TestMediaQueryListListener.cpp:
        (WebCore):
        * bindings/scripts/test/V8/V8TestMediaQueryListListener.h:
        (V8TestMediaQueryListListener):
        * bindings/scripts/test/V8/V8TestNamedConstructor.cpp:
        (WebCore):
        * bindings/scripts/test/V8/V8TestNamedConstructor.h:
        (V8TestNamedConstructor):
        * bindings/scripts/test/V8/V8TestObj.cpp:
        (WebCore):
        * bindings/scripts/test/V8/V8TestObj.h:
        (V8TestObj):
        * bindings/scripts/test/V8/V8TestSerializedScriptValueInterface.cpp:
        (WebCore):
        * bindings/scripts/test/V8/V8TestSerializedScriptValueInterface.h:
        (V8TestSerializedScriptValueInterface):
        * bindings/v8/NPV8Object.cpp:
        (WebCore::npObjectTypeInfo):
        * bindings/v8/V8GCController.cpp:
        (WebCore::GrouperVisitor::visitDOMWrapper):
        * bindings/v8/WrapperTypeInfo.h:
        (WebCore):
        (WrapperTypeInfo):
        * bindings/v8/custom/V8CSSStyleSheetCustom.cpp: Copied from Source/WebCore/bindings/v8/custom/V8StyleSheetCustom.cpp.
        (WebCore):
        (WebCore::toV8):
        * bindings/v8/custom/V8DOMStringMapCustom.cpp:
        (WebCore::toV8):
        (WebCore):
        * bindings/v8/custom/V8DOMTokenListCustom.cpp: Copied from Source/WebCore/bindings/v8/custom/V8StyleSheetCustom.cpp.
        (WebCore):
        (WebCore::toV8):
        * bindings/v8/custom/V8HTMLImageElementConstructor.cpp:
        (WebCore):
        * bindings/v8/custom/V8NamedNodeMapCustom.cpp:
        (WebCore::toV8):
        (WebCore):
        * bindings/v8/custom/V8StyleSheetCustom.cpp:
        (WebCore::toV8):
        * css/CSSStyleSheet.idl:
        * css/StyleSheet.idl:
        * dom/DOMStringMap.idl:
        * dom/NamedNodeMap.idl:
        * html/DOMTokenList.idl:
        * html/track/TextTrackList.idl:

2012-03-12  Kentaro Hara  <haraken@chromium.org>

        [V8][Refactoring] Remove getCachedWrapperSlow() from V8Bindings.cpp
        https://bugs.webkit.org/show_bug.cgi?id=80924

        Reviewed by Adam Barth.

        getCachedWrapperSlow() is called by getCachedWrapper() only,
        and getCachedWrapperSlow() just calls getCachedWrapperInline().
        Thus, this patch expands getCachedWrapperInline() into getCachedWrapper(),
        and removes getCachedWrapperSlow().

        No tests. No change in behavior.

        * bindings/v8/V8DOMWrapper.cpp:
        * bindings/v8/V8DOMWrapper.h:
        (WebCore::V8DOMWrapper::getCachedWrapper):

2012-03-12  Kentaro Hara  <haraken@chromium.org>

        [V8][Refactoring] Remove existingWrapper() from generated code
        https://bugs.webkit.org/show_bug.cgi?id=80927

        Reviewed by Adam Barth.

        Currently wrap() calls existingWrapper(), and existingWrapper()
        just calls getCachedWrapper(). We can remove existingWrapper() from the generated code.

        Test: bindings/scripts/test/*

        * bindings/scripts/CodeGeneratorV8.pm: Removed existingWrapper().
        (GenerateHeader):
        (GenerateNormalAttrGetter):

        * bindings/scripts/test/V8/V8Float64Array.h: Updated run-bindings-tests results.
        (V8Float64Array):
        (WebCore::V8Float64Array::wrap):
        * bindings/scripts/test/V8/V8TestActiveDOMObject.h:
        (V8TestActiveDOMObject):
        (WebCore::V8TestActiveDOMObject::wrap):
        * bindings/scripts/test/V8/V8TestCustomNamedGetter.h:
        (V8TestCustomNamedGetter):
        (WebCore::V8TestCustomNamedGetter::wrap):
        * bindings/scripts/test/V8/V8TestEventConstructor.h:
        (V8TestEventConstructor):
        (WebCore::V8TestEventConstructor::wrap):
        * bindings/scripts/test/V8/V8TestEventTarget.h:
        (V8TestEventTarget):
        (WebCore::V8TestEventTarget::wrap):
        * bindings/scripts/test/V8/V8TestInterface.h:
        (V8TestInterface):
        (WebCore::V8TestInterface::wrap):
        * bindings/scripts/test/V8/V8TestMediaQueryListListener.h:
        (V8TestMediaQueryListListener):
        (WebCore::V8TestMediaQueryListListener::wrap):
        * bindings/scripts/test/V8/V8TestNamedConstructor.h:
        (V8TestNamedConstructor):
        (WebCore::V8TestNamedConstructor::wrap):
        * bindings/scripts/test/V8/V8TestObj.cpp:
        (WebCore::TestObjInternal::readOnlyTestObjAttrAttrGetter):
        (WebCore::TestObjInternal::cachedAttribute1AttrGetter):
        (WebCore::TestObjInternal::cachedAttribute2AttrGetter):
        * bindings/scripts/test/V8/V8TestObj.h:
        (V8TestObj):
        (WebCore::V8TestObj::wrap):
        * bindings/scripts/test/V8/V8TestSerializedScriptValueInterface.h:
        (V8TestSerializedScriptValueInterface):
        (WebCore::V8TestSerializedScriptValueInterface::wrap):

2012-03-12  Dana Jansens  <danakj@chromium.org>

        [chromium] Use tileRect instead of pointer derefs
        https://bugs.webkit.org/show_bug.cgi?id=80919

        Reviewed by Adrienne Walker.

        Covered by existing tests.

        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::drawTileQuad):

2012-03-12  Hans Muller  <hmuller@adobe.com>

        SVG should support transform-origin and relative values
        https://bugs.webkit.org/show_bug.cgi?id=79068

        Reviewed by Dirk Schulze.

        Added SVG support for the CSS 'transform-origin' property and for percentage
        values in the transform translate function.  The changes conform to
        http://dev.w3.org/csswg/css3-transforms/.

        Tests: svg/transforms/percent-transform-values.xhtml
               svg/transforms/transform-origin-css-property.xhtml

        * css/svg.css:
        (*):
        (html|* > svg):
        Default transform-origin for SVG elements is 0 0.

        * platform/Length.h:
        (WebCore::Length::calcFloatValue):
        Added a calcFloatValue overload whose max parameter (for percent lengths) is a float.
        The original version will be obsolete when the sub-pixel layout support is completed.

        * rendering/style/RenderStyle.cpp:
        * rendering/style/RenderStyle.h:
        (WebCore):
        (WebCore::requireTransformOrigin):
        Transforms that only include translations don't depend on the transform-origin.

        (WebCore::RenderStyle::applyTransform):
        SVG elements interpret non-percentage/keyword transform-origin values relative to their viewport,
        unlike HTML which interprets all transform-origin values relative to the element's origin.
        The new FloatRect applyTransform() function handles SVG semantics. Similarly, SVG elements interpret
        percentage/keyword transform-origin values relative to the origin of their objectBoundingBox(), HTML
        uses the borderBox.  All this per http://dev.w3.org/csswg/css3-transforms/.

        * svg/SVGStyledTransformableElement.cpp:
        (WebCore::SVGStyledTransformableElement::animatedLocalTransform):

2012-03-12  Dana Jansens  <danakj@chromium.org>

        [chromium] Use projectQuad to apply inverse mapRect
        https://bugs.webkit.org/show_bug.cgi?id=80741

        Reviewed by Adrienne Walker.

        Unit test: CCOcclusionTrackerTest3dTransform
                   CCOcclusionTrackerTestPerspectiveTransform
                   CCOcclusionTrackerTestPerspectiveTransformBehindCamera

        * platform/graphics/chromium/cc/CCOcclusionTracker.cpp:
        (WebCore::projectQuad):
        (WebCore):
        (WebCore::computeUnoccludedContentRect):

2012-03-12  Leo Yang  <leo.yang@torchmobile.com.cn>

        [BlackBerry] Upstream the BlackBerry change to platform/graphics/FontPlatformData.h
        https://bugs.webkit.org/show_bug.cgi?id=80820

        Reviewed by Rob Buis.

        The BlackBerry is using the FontPlatformData from Chromium porting.

        * platform/graphics/FontPlatformData.h:

2012-03-12  Zhenyao Mo  <zmo@google.com>

        After webgl canvas resize, bindings might be lost
        https://bugs.webkit.org/show_bug.cgi?id=80895

        Reviewed by Stephen White.

        Test: fast/canvas/webgl/texture-bindings-uneffected-on-resize.html

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore):
        (WebCore::WebGLRenderingContext::reshape): recover bindings after reshape.

2012-03-12  Kentaro Hara  <haraken@chromium.org>

        [V8][Refactoring] Remove getWrapper() and getWrapperSlow()
        https://bugs.webkit.org/show_bug.cgi?id=80920

        Reviewed by Adam Barth.

        Now getWrapper() is the same as getExistingWrapper().
        getWrapperSlow() is the same as getExistingWrapperSlow().
        This patch removes getWrapper() and getWrapperSlow().
        Also this patch renames getExistingWrapper() to getCachedWrapper().

        No tests. No change in behavior.

        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateHeader):
        * bindings/v8/V8DOMWrapper.cpp:
        (WebCore::V8DOMWrapper::getWrapperSlow):
        * bindings/v8/V8DOMWrapper.h:
        (WebCore::V8DOMWrapper::getWrapper):
        (V8DOMWrapper):
        * bindings/v8/custom/V8NodeCustom.cpp:
        (WebCore::toV8Slow):

2012-03-12  Erik Arvidsson  <arv@chromium.org>

        [V8] Use v8::V8::AddHiddenReferences instead of SetHiddenValue
        https://bugs.webkit.org/show_bug.cgi?id=80880

        Reviewed by Adam Barth.

        We used to add a hidden property in the getter to the returned wrapper.
        With this patch we instead handle the liveness of the wrapper in the GC phase by
        calling v8::V8::AddHiddenReference.

        To reduce the amount of custom code we need, the V8 code generator now supports
        GenerateIsReachable (as well as CustomIsReachable) which, even though different
        from the JSC attribute, is used in the same cases and takes the same values (even though
        at the moment not all JSC values are supported by V8).

        No new tests. Covered by existing tests.

        * Target.pri:
        * UseV8.cmake:
        * WebCore.gypi:
        * bindings/scripts/CodeGeneratorJS.pm:
        (GetGenerateIsReachable):
        (GetCustomIsReachable):
        (GenerateHeader):
        (GenerateImplementation):
        * bindings/scripts/CodeGeneratorV8.pm:
        (NeedsToVisitDOMWrapper):
        (GetGenerateIsReachable):
        (GetCustomIsReachable):
        (GenerateVisitDOMWrapper):
        (GenerateHeader):
        (GenerateNamedConstructorCallback):
        (GenerateImplementation):
        * bindings/scripts/IDLAttributes.txt:
        * bindings/scripts/test/V8/V8Float64Array.cpp:
        (WebCore):
        * bindings/scripts/test/V8/V8Float64Array.h:
        (V8Float64Array):
        * bindings/scripts/test/V8/V8TestActiveDOMObject.cpp:
        (WebCore):
        * bindings/scripts/test/V8/V8TestActiveDOMObject.h:
        (V8TestActiveDOMObject):
        * bindings/scripts/test/V8/V8TestCustomNamedGetter.cpp:
        (WebCore):
        * bindings/scripts/test/V8/V8TestCustomNamedGetter.h:
        (V8TestCustomNamedGetter):
        * bindings/scripts/test/V8/V8TestEventConstructor.cpp:
        (WebCore):
        * bindings/scripts/test/V8/V8TestEventConstructor.h:
        (V8TestEventConstructor):
        * bindings/scripts/test/V8/V8TestEventTarget.cpp:
        (WebCore):
        * bindings/scripts/test/V8/V8TestEventTarget.h:
        (V8TestEventTarget):
        * bindings/scripts/test/V8/V8TestInterface.cpp:
        (WebCore):
        * bindings/scripts/test/V8/V8TestInterface.h:
        (V8TestInterface):
        * bindings/scripts/test/V8/V8TestMediaQueryListListener.cpp:
        (WebCore):
        * bindings/scripts/test/V8/V8TestMediaQueryListListener.h:
        (V8TestMediaQueryListListener):
        * bindings/scripts/test/V8/V8TestNamedConstructor.cpp:
        (WebCore):
        * bindings/scripts/test/V8/V8TestNamedConstructor.h:
        (V8TestNamedConstructor):
        * bindings/scripts/test/V8/V8TestObj.cpp:
        (WebCore):
        * bindings/scripts/test/V8/V8TestObj.h:
        (V8TestObj):
        * bindings/scripts/test/V8/V8TestSerializedScriptValueInterface.cpp:
        (WebCore):
        * bindings/scripts/test/V8/V8TestSerializedScriptValueInterface.h:
        (V8TestSerializedScriptValueInterface):
        * bindings/v8/NPV8Object.cpp:
        (WebCore::npObjectTypeInfo):
        * bindings/v8/V8GCController.cpp:
        (WebCore::GrouperVisitor::visitDOMWrapper):
        * bindings/v8/WrapperTypeInfo.h:
        (WebCore):
        (WrapperTypeInfo):
        * bindings/v8/custom/V8CSSStyleSheetCustom.cpp: Removed.
        * bindings/v8/custom/V8DOMStringMapCustom.cpp:
        * bindings/v8/custom/V8DOMTokenListCustom.cpp: Removed.
        * bindings/v8/custom/V8HTMLImageElementConstructor.cpp:
        (WebCore):
        * bindings/v8/custom/V8NamedNodeMapCustom.cpp:
        * bindings/v8/custom/V8StyleSheetCustom.cpp:
        (WebCore::toV8):
        * css/CSSStyleSheet.idl:
        * css/StyleSheet.idl:
        * dom/DOMStringMap.idl:
        * dom/NamedNodeMap.idl:
        * html/DOMTokenList.idl:
        * html/track/TextTrackList.idl:

2012-03-12  Kentaro Hara  <haraken@chromium.org>

        [V8][Refactoring] Make getWrapperSlow() and getExistingWrapperSlow() same
        https://bugs.webkit.org/show_bug.cgi?id=80916

        Reviewed by Adam Barth.

        This is one of the steps for fixing bug 80841.
        This patch makes getWrapperSlow() and getExistingWrapperSlow() same.
        In the next patch, we will remove getExistingWrapper() and getExistingWrapperSlow().

        No tests. No change in behavior.

        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateHeader):
        * bindings/v8/V8DOMWrapper.cpp:
        (WebCore::V8DOMWrapper::getWrapperSlow):

2012-03-12  Kentaro Hara  <haraken@chromium.org>

        [V8] Refactor some header includes in V8 bindings
        https://bugs.webkit.org/show_bug.cgi?id=80913

        Reviewed by Adam Barth.

        This patch refactors some header includes in V8 bindings
        required for fixing bug 80841.

        No tests. No change in behavior.

        * bindings/v8/DOMDataStore.h:
        (DOMDataStore):
        * bindings/v8/V8DOMMap.h:
        * bindings/v8/V8DOMWrapper.cpp:
        * bindings/v8/V8IsolatedContext.cpp:
        (WebCore::V8IsolatedContext::isolatedContext):
        * bindings/v8/V8IsolatedContext.h:
        (WebCore::V8IsolatedContext::getEntered):
        (V8IsolatedContext):
        * bindings/v8/WorldContextHandle.cpp:

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

        Unreviewed, rolling out r110501.
        http://trac.webkit.org/changeset/110501
        https://bugs.webkit.org/show_bug.cgi?id=80908

        Broke the Apple-Win build (Requested by abarth on #webkit).

        * CMakeLists.txt:
        * DerivedSources.make:
        * DerivedSources.pri:
        * GNUmakefile.am:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gyp/WebCore.gyp:
        * WebCore.gypi:
        * WebCore.pri:
        * WebCore.xcodeproj/project.pbxproj:
        * fileapi/DirectoryEntry.cpp: Renamed from Source/WebCore/Modules/filesystem/DirectoryEntry.cpp.
        (WebCore):
        (WebCore::DirectoryEntry::DirectoryEntry):
        (WebCore::DirectoryEntry::createReader):
        (WebCore::DirectoryEntry::getFile):
        (WebCore::DirectoryEntry::getDirectory):
        (WebCore::DirectoryEntry::removeRecursively):
        * fileapi/DirectoryEntry.h: Renamed from Source/WebCore/Modules/filesystem/DirectoryEntry.h.
        (WebCore):
        (DirectoryEntry):
        (WebCore::DirectoryEntry::create):
        (WebCore::DirectoryEntry::isDirectory):
        * fileapi/DirectoryEntry.idl: Renamed from Source/WebCore/Modules/filesystem/DirectoryEntry.idl.
        * fileapi/DirectoryEntrySync.cpp: Renamed from Source/WebCore/Modules/filesystem/DirectoryEntrySync.cpp.
        (WebCore):
        (WebCore::DirectoryEntrySync::DirectoryEntrySync):
        (WebCore::DirectoryEntrySync::createReader):
        (WebCore::DirectoryEntrySync::getFile):
        (WebCore::DirectoryEntrySync::getDirectory):
        (WebCore::DirectoryEntrySync::removeRecursively):
        * fileapi/DirectoryEntrySync.h: Renamed from Source/WebCore/Modules/filesystem/DirectoryEntrySync.h.
        (WebCore):
        (DirectoryEntrySync):
        (WebCore::DirectoryEntrySync::create):
        (WebCore::DirectoryEntrySync::isDirectory):
        * fileapi/DirectoryEntrySync.idl: Renamed from Source/WebCore/Modules/filesystem/DirectoryEntrySync.idl.
        * fileapi/DirectoryReader.cpp: Renamed from Source/WebCore/Modules/filesystem/DirectoryReader.cpp.
        (WebCore):
        (WebCore::DirectoryReader::DirectoryReader):
        (WebCore::DirectoryReader::readEntries):
        * fileapi/DirectoryReader.h: Renamed from Source/WebCore/Modules/filesystem/DirectoryReader.h.
        (WebCore):
        (DirectoryReader):
        (WebCore::DirectoryReader::create):
        (WebCore::DirectoryReader::filesystem):
        * fileapi/DirectoryReader.idl: Renamed from Source/WebCore/Modules/filesystem/DirectoryReader.idl.
        * fileapi/DirectoryReaderBase.h: Renamed from Source/WebCore/Modules/filesystem/DirectoryReaderBase.h.
        (WebCore):
        (DirectoryReaderBase):
        (WebCore::DirectoryReaderBase::filesystem):
        (WebCore::DirectoryReaderBase::setHasMoreEntries):
        (WebCore::DirectoryReaderBase::DirectoryReaderBase):
        * fileapi/DirectoryReaderSync.cpp: Renamed from Source/WebCore/Modules/filesystem/DirectoryReaderSync.cpp.
        (WebCore):
        (WebCore::DirectoryReaderSync::DirectoryReaderSync):
        (WebCore::DirectoryReaderSync::readEntries):
        * fileapi/DirectoryReaderSync.h: Renamed from Source/WebCore/Modules/filesystem/DirectoryReaderSync.h.
        (WebCore):
        (DirectoryReaderSync):
        (WebCore::DirectoryReaderSync::create):
        * fileapi/DirectoryReaderSync.idl: Renamed from Source/WebCore/Modules/filesystem/DirectoryReaderSync.idl.

2012-03-12  Nico Weber  <thakis@chromium.org>

        [chromium/mac] Make sure libWebKitSystemInterface.a doesn't contain ppc object files.
        https://bugs.webkit.org/show_bug.cgi?id=80902

        Reviewed by Adam Barth.

        Follow-up to http://codereview.chromium.org/9638015/

        No intended behavior change.

        * WebCore.gyp/mac/adjust_visibility.sh:

2012-03-12  Jer Noble  <jer.noble@apple.com>

        WebCore: Add support for AudioNode "tailTime()" and "latencyTime()"
        https://bugs.webkit.org/show_bug.cgi?id=74750

        Reviewed by Chris Rogers.

        No new tests; optimization of existing code path, so covered by existing tests.

        To account for AudioNodes which may generate non-silent audio when fed silent input
        for a certain amount of time after the last non-silent audio data, add two new virtual
        functions tailTime() and latencyTime().

        * webaudio/AudioNode.h:
        (WebCore::AudioNode::tailTime): Added. Pure virtual.
        (WebCore::AudioNode::latencyTime): Added. Pure virtual.
        * platform/audio/AudioProcessor.h:
        (WebCore::AudioProcessor::tailTime): Added. Pure virtual.
        (WebCore::AudioProcessor::latencyTime): Added. Pure virtual.
        * platform/audio/AudioDSPKernel.h:
        (WebCore::AudioDSPKernel::tailTime): Added. Pure virtual.
        (WebCore::AudioDSPKernel::latencyTime): Added. Pure virtual.

        Added tailTime() and latencyTime() overrides to the following classes:
        * platform/audio/AudioDSPKernelProcessor.cpp:
        (WebCore::AudioDSPKernelProcessor::tailTime):
        (WebCore::AudioDSPKernelProcessor::latencyTime):
        * platform/audio/AudioDSPKernelProcessor.h:
        * platform/audio/DynamicsCompressor.h:
        (WebCore::DynamicsCompressor::tailTime):
        (WebCore::DynamicsCompressor::latencyTime):
        * platform/audio/EqualPowerPanner.h:
        * platform/audio/HRTFPanner.cpp:
        (WebCore::HRTFPanner::tailTime):
        (WebCore::HRTFPanner::latencyTime):
        * platform/audio/HRTFPanner.h:
        * platform/audio/Panner.h:
        * webaudio/AudioBasicProcessorNode.cpp:
        (WebCore::AudioBasicProcessorNode::tailTime):
        (WebCore::AudioBasicProcessorNode::latencyTime):
        * webaudio/AudioBasicProcessorNode.h:
        * webaudio/AudioChannelMerger.h:
        * webaudio/AudioChannelSplitter.h:
        * webaudio/AudioDestinationNode.h:
        * webaudio/AudioGainNode.h:
        * webaudio/AudioPannerNode.h:
        * webaudio/AudioSourceNode.h:
        * webaudio/BiquadDSPKernel.cpp:
        (WebCore::BiquadDSPKernel::tailTime):
        (WebCore::BiquadDSPKernel::latencyTime):
        * webaudio/BiquadDSPKernel.h:
        * webaudio/BiquadFilterNode.h:
        * webaudio/ConvolverNode.cpp:
        (WebCore::ConvolverNode::tailTime):
        (WebCore::ConvolverNode::latencyTime):
        * webaudio/ConvolverNode.h:
        * webaudio/DelayDSPKernel.cpp:
        (WebCore::DelayDSPKernel::tailTime):
        (WebCore::DelayDSPKernel::latencyTime):
        * webaudio/DelayDSPKernel.h:
        * webaudio/DelayProcessor.h:
        * webaudio/DynamicsCompressorNode.cpp:
        (WebCore::DynamicsCompressorNode::tailTime):
        (WebCore::DynamicsCompressorNode::latencyTime):
        * webaudio/DynamicsCompressorNode.h:
        * webaudio/JavaScriptAudioNode.cpp:
        (WebCore::JavaScriptAudioNode::tailTime):
        (WebCore::JavaScriptAudioNode::latencyTime):
        * webaudio/JavaScriptAudioNode.h:
        * webaudio/RealtimeAnalyserNode.h:
        * webaudio/WaveShaperDSPKernel.h:

        The following functions were added as support for the new AudioNode and AudioProcessor functions:
        * platform/audio/Biquad.cpp:
        (WebCore::Biquad::latencyFrames):
        * platform/audio/Biquad.h:
        * platform/audio/Reverb.cpp:
        (WebCore::Reverb::latencyFrames):
        * platform/audio/ReverbConvolver.h:
        (WebCore::ReverbConvolver::latencyFrames):

        The following functions were made const-correct:
        * platform/audio/HRTFPanner.h:
        (WebCore::HRTFPanner::fftSize):
        * platform/audio/Reverb.h:
        (WebCore::Reverb::impulseResponseLength):

2012-03-12  Anders Carlsson  <andersca@apple.com>

        WebTileLayers should be opaque
        https://bugs.webkit.org/show_bug.cgi?id=80907
        <rdar://problem/11034390>

        Reviewed by Andreas Kling.

        * platform/graphics/ca/mac/TileCache.mm:
        (WebCore::TileCache::createTileLayer):
        Call -[CALayer setOpaque:] on the newly created WebTileLayer.

2012-03-12  Emil A Eklund  <eae@chromium.org>

        Fix rounding in scrollbar rect calculations
        https://bugs.webkit.org/show_bug.cgi?id=80894

        Reviewed by Eric Seidel.

        Fix usage of subpixel units in RenderScrollbar::buttonRect and
        RenderScrollbar::trackRect.

        No new tests, no new functionality.

        * rendering/LayoutTypes.h:
        (WebCore::isIntegerValue):
        Add dummy isIntegerValue function, will be replaced with actual
        implementation once LayoutUnit is remapped to FractionalLayoutUnit.
        
        * rendering/RenderScrollbar.cpp:
        (WebCore::RenderScrollbar::buttonRect):
        (WebCore::RenderScrollbar::trackRect):
        Change rect calculations to use pixel snapped values.

        * rendering/RenderScrollbarPart.h:
        (RenderScrollbarPart):
        (WebCore::RenderScrollbarPart::marginTop):
        (WebCore::RenderScrollbarPart::marginBottom):
        (WebCore::RenderScrollbarPart::marginLeft):
        (WebCore::RenderScrollbarPart::marginRight):
        Add ASSERT to ensure that scrollbar parts are always aligned to device
        pixels.

2012-03-12  C Anthony Risinger  <anthony@xtfx.me>

        [GObject IDL Parser] STRING argument should be HASHREF
        https://bugs.webkit.org/show_bug.cgi?id=78877

        Reviewed by Kentaro Hara.

        * bindings/scripts/CodeGeneratorGObject.pm:
        (GenerateFunctions): extendedAttributes are hashes, not strings

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

        More Windows build fixing.

        Use fully qualified paths for WTF headers.

        * platform/graphics/cg/ImageSourceCGWin.cpp:
        * platform/graphics/win/UniscribeController.h:
        * platform/win/DragImageCGWin.cpp:
        * platform/win/DragImageCairoWin.cpp:
        * platform/win/DragImageWin.cpp:
        * rendering/RenderThemeSafari.cpp:

2012-03-12  Mark Pilgrim  <pilgrim@chromium.org>

        Move DirectoryEntry and DirectoryReader to new Modules/filesystem/ directory
        https://bugs.webkit.org/show_bug.cgi?id=80625

        Reviewed by Adam Barth.

        No new tests, all existing tests pass.

        * CMakeLists.txt:
        * DerivedSources.make:
        * DerivedSources.pri:
        * GNUmakefile.am:
        * GNUmakefile.list.am:
        * Modules/filesystem: Added.
        * Modules/filesystem/DirectoryEntry.cpp: Copied from Source/WebCore/fileapi/DirectoryEntry.cpp.
        * Modules/filesystem/DirectoryEntry.h: Copied from Source/WebCore/fileapi/DirectoryEntry.h.
        * Modules/filesystem/DirectoryEntry.idl: Copied from Source/WebCore/fileapi/DirectoryEntry.idl.
        * Modules/filesystem/DirectoryEntrySync.cpp: Copied from Source/WebCore/fileapi/DirectoryEntrySync.cpp.
        * Modules/filesystem/DirectoryEntrySync.h: Copied from Source/WebCore/fileapi/DirectoryEntrySync.h.
        * Modules/filesystem/DirectoryEntrySync.idl: Copied from Source/WebCore/fileapi/DirectoryEntrySync.idl.
        * Modules/filesystem/DirectoryReader.cpp: Copied from Source/WebCore/fileapi/DirectoryReader.cpp.
        * Modules/filesystem/DirectoryReader.h: Copied from Source/WebCore/fileapi/DirectoryReader.h.
        * Modules/filesystem/DirectoryReader.idl: Copied from Source/WebCore/fileapi/DirectoryReader.idl.
        * Modules/filesystem/DirectoryReaderBase.h: Copied from Source/WebCore/fileapi/DirectoryReaderBase.h.
        * Modules/filesystem/DirectoryReaderSync.cpp: Copied from Source/WebCore/fileapi/DirectoryReaderSync.cpp.
        * Modules/filesystem/DirectoryReaderSync.h: Copied from Source/WebCore/fileapi/DirectoryReaderSync.h.
        * Modules/filesystem/DirectoryReaderSync.idl: Copied from Source/WebCore/fileapi/DirectoryReaderSync.idl.
        * Target.pri:
        * WebCore.gyp/WebCore.gyp:
        * WebCore.gypi:
        * WebCore.pri:
        * WebCore.xcodeproj/project.pbxproj:
        * fileapi/DirectoryEntry.cpp: Removed.
        * fileapi/DirectoryEntry.h: Removed.
        * fileapi/DirectoryEntry.idl: Removed.
        * fileapi/DirectoryEntrySync.cpp: Removed.
        * fileapi/DirectoryEntrySync.h: Removed.
        * fileapi/DirectoryEntrySync.idl: Removed.
        * fileapi/DirectoryReader.cpp: Removed.
        * fileapi/DirectoryReader.h: Removed.
        * fileapi/DirectoryReader.idl: Removed.
        * fileapi/DirectoryReaderBase.h: Removed.
        * fileapi/DirectoryReaderSync.cpp: Removed.
        * fileapi/DirectoryReaderSync.h: Removed.
        * fileapi/DirectoryReaderSync.idl: Removed.

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

        https://bugs.webkit.org/show_bug.cgi?id=80903
        InspectorDOMStorageAgent creates a Storage object which is a DOMWindowProperty - Should use the StorageArea directly

        Reviewed by Tim Hatcher.

        No new tests. (No behavior change)

        Changed to hold the StorageArea directly and added a Frame* accessor:
        * inspector/InspectorDOMStorageResource.h:
        (WebCore::InspectorDOMStorageResource::create):
        (WebCore::InspectorDOMStorageResource::storageArea):
        (WebCore::InspectorDOMStorageResource::frame):
        (InspectorDOMStorageResource):

        * inspector/InspectorDOMStorageResource.cpp:
        (WebCore::InspectorDOMStorageResource::InspectorDOMStorageResource):

        * inspector/InspectorDOMStorageAgent.cpp:
        (WebCore::InspectorDOMStorageAgent::getDOMStorageEntries):
        (WebCore::InspectorDOMStorageAgent::setDOMStorageItem):
        (WebCore::InspectorDOMStorageAgent::removeDOMStorageItem):
        (WebCore::InspectorDOMStorageAgent::didUseDOMStorage):

2012-03-12  Brian Salomon  <bsalomon@google.com>

        [Skia] Release CGImage used to apply color space conversion to SkBitmap
        https://bugs.webkit.org/show_bug.cgi?id=80892

        Reviewed by Adam Barth.

        Regressions should be covered by any test that does image decode on the mac.

        * platform/image-decoders/skia/ImageDecoderSkia.cpp:
        (WebCore::resolveColorSpace):

2012-03-12  Levi Weintraub  <leviw@chromium.org>

        Update LayoutUnit usage in RenderMathML* classes
        https://bugs.webkit.org/show_bug.cgi?id=77916

        Reviewed by Eric Seidel.

        The purpose of this patch is to ensure MathML rendering does not regress when
        we switch to sub-pixel layout. A subsequent patch can likely improve MathML's
        rendering when zoom is applied.

        To accomplish this without changing the current heuristics for positioning,
        we continue to use integers for sizes and locations, using pixel snapping
        when communicating with other Rendering classes.

        No new tests. No change in behavior.

        * rendering/mathml/RenderMathMLBlock.cpp:
        (WebCore::RenderMathMLBlock::paint): Cleaning up debug painting to be on
        pixel boundaries instead of subpixel.
        * rendering/mathml/RenderMathMLFraction.cpp:
        (WebCore::RenderMathMLFraction::paint): Reverting to integers for determining
        the vertical offset.
        (WebCore::RenderMathMLFraction::baselinePosition):
        * rendering/mathml/RenderMathMLRoot.cpp:
        (WebCore::RenderMathMLRoot::paint): Using integers for height and width
        and only accumulating pixel snapped values.
        (WebCore::RenderMathMLRoot::layout): Setting padding with integers to
        avoid inconsistent rounding based on the root's location.
        * rendering/mathml/RenderMathMLRow.cpp:
        (WebCore::RenderMathMLRow::layout):
        * rendering/mathml/RenderMathMLSquareRoot.cpp:
        (WebCore::RenderMathMLSquareRoot::paint): See RenderMathMLRoot.
        (WebCore::RenderMathMLSquareRoot::layout): Ditto.
        * rendering/mathml/RenderMathMLUnderOver.cpp:
        (WebCore::getOffsetHeight):
        (WebCore::RenderMathMLUnderOver::layout):

2012-03-12  Anders Carlsson  <andersca@apple.com>

        Use smaller tiles for right and bottom edges
        https://bugs.webkit.org/show_bug.cgi?id=80893
        <rdar://problem/11032873>

        Reviewed by Sam Weinig.

        * platform/graphics/ca/mac/TileCache.mm:
        (WebCore::TileCache::rectForTileIndex):
        Intersect the rect with the tile cache bounds.

        (WebCore::TileCache::revalidateTiles):
        Resize already existing tiles if needed.

        (WebCore::TileCache::createTileLayer):
        This now takes a tile rect. Use setFrame instead of setting the bounds and position separately.

2012-03-12  Enrica Casucci  <enrica@apple.com>

        WebKit2: remove NSPasteboard access for promised data from the WebProcess
        https://bugs.webkit.org/show_bug.cgi?id=80073
        
        Reviewed by Alexey Proskuryakov.

        * WebCore.exp.in: Added two exported methods.
        * platform/mac/FileSystemMac.mm:
        (WebCore::setMetaData): Last parameter in the call to wkSetMetadataURL
        needs to be wrapped in String before casting to NSString.

2012-03-12  Alexey Proskuryakov  <ap@apple.com>

        clang build fix

        * css/CSSPrimitiveValueMappings.h: (WebCore::CSSPrimitiveValue::convertToLength): Reorder
        boolean operators, so that a warning about "use of logical || with constant operand" doesn't
        appear.

2012-03-12  Abhishek Arya  <inferno@chromium.org>

        Crash in Text::splitText due to mutation events.
        https://bugs.webkit.org/show_bug.cgi?id=80828

        Reviewed by Ryosuke Niwa.

        Test: fast/text/split-text-crash.xhtml

        * dom/Range.cpp:
        (WebCore::Range::insertNode): replace m_start.container() calls with ref protected node.

2012-03-12  Kenneth Russell  <kbr@google.com>

        Null argument to texSubImage2D crashes
        https://bugs.webkit.org/show_bug.cgi?id=80778

        Reviewed by Dean Jackson.

        Generate INVALID_VALUE OpenGL error upon receiving null argument.
        Final behavior still being decided on public-webgl mailing list.

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore):
        (WebCore::WebGLRenderingContext::texImage2D):
        (WebCore::WebGLRenderingContext::texSubImage2D):
        (WebCore::WebGLRenderingContext::validateTexFuncData):
        * html/canvas/WebGLRenderingContext.h:

2012-03-12  Luke Macpherson   <macpherson@chromium.org>

        Remove CSSStyleSelector's convertToLength method and use CSSPrimitiveValue's version directly.
        https://bugs.webkit.org/show_bug.cgi?id=80484

        Reviewed by Julien Chaffraix.

        No new tests / code cleanup only.

        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::convertToLength):
        * css/CSSStyleApplyProperty.cpp:
        (WebCore::ApplyPropertyClip::convertToLength):
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::collectMatchingRulesForList):

2012-03-12  Stephen White  <senorblanco@chromium.org>

        [chromium] Restore canvas2D acceleration after context loss.
        https://bugs.webkit.org/show_bug.cgi?id=80629

        Reviewed by James Robinson.

        Covered by existing canvas tests, and manual testing (killing the GPU
        process).

        * platform/graphics/chromium/Canvas2DLayerChromium.cpp:
        (WebCore::Canvas2DLayerChromium::create):
        (WebCore::Canvas2DLayerChromium::Canvas2DLayerChromium):
        (WebCore::Canvas2DLayerChromium::setNeedsDisplayRect):
        (WebCore::Canvas2DLayerChromium::drawsContent):
        (WebCore::Canvas2DLayerChromium::paintContentsIfDirty):
        * platform/graphics/chromium/Canvas2DLayerChromium.h:
        (Canvas2DLayerChromium):
        * platform/graphics/chromium/cc/CCRenderSurface.cpp:
        (WebCore::CCRenderSurface::applyFilters):
        * platform/graphics/gpu/SharedGraphicsContext3D.cpp:
        (SharedGraphicsContext3DImpl):
        (WebCore::SharedGraphicsContext3DImpl::SharedGraphicsContext3DImpl):
        (WebCore::SharedGraphicsContext3DImpl::get):
        (WebCore):
        (WebCore::SharedGraphicsContext3D::get):
        * platform/graphics/gpu/SharedGraphicsContext3D.h:
        (SharedGraphicsContext3D):
        * platform/graphics/skia/ImageBufferSkia.cpp:
        (WebCore::createAcceleratedCanvas):
        * platform/graphics/skia/PlatformContextSkia.cpp:
        (WebCore::PlatformContextSkia::PlatformContextSkia):
        (WebCore):
        * platform/graphics/skia/PlatformContextSkia.h:
        (WebCore):
        (WebCore::PlatformContextSkia::isAccelerated):
        (WebCore::PlatformContextSkia::setAccelerated):
        (PlatformContextSkia):

2012-03-12  George Staikos  <staikos@webkit.org>

        It doesn't make sense to return const unsigned, and GCC warns about it.
        Remove const.
        https://bugs.webkit.org/show_bug.cgi?id=80790

        Reviewed by Antonio Gomes.

        * platform/graphics/harfbuzz/ComplexTextControllerHarfBuzz.h:
        (WebCore::ComplexTextController::length):
        (WebCore::ComplexTextController::numCodePoints):
        (WebCore::ComplexTextController::offsetX):

2012-03-12  Beth Dakin  <bdakin@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=80888
        Clear background for NSTextFieldCell is unreliable and not necessary
        -and corresponding-
        <rdar://problem/10663710>

        Reviewed by Dan Bernstein.

        With http://trac.webkit.org/changeset/104240 I thought it was necessary to 
        make NSTextFieldCells draw with a clear background in order to allow styled 
        text fields. That is not actually necessary; we just had a different bug 
        where isControlStyled() was only checking for styled borders on text fields. 
        Text fields can also be styled with backgrounds, so they need the full check.
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::isControlStyled):
        (WebCore::RenderThemeMac::textField):

2012-03-12  Scott Byer  <scottbyer@chromium.org>

        Cleanup obsolete files.
        https://bugs.webkit.org/show_bug.cgi?id=80737

        Reviewed by James Robinson.

        No new code.

        * GNUmakefile.list.am:
        * PlatformWinCE.cmake:
        * Target.pri:
        * WebCore.vcproj/WebCore.vcproj:
        * platform/ScrollAnimatorWin.cpp: Removed.
        * platform/ScrollAnimatorWin.h: Removed.

2012-03-12  Gregg Tavares  <gman@google.com>

        Make texImage2D error for wrong size ArrayBufferView more helpful
        https://bugs.webkit.org/show_bug.cgi?id=80868
        
        It took me about 30 minutes to figure out my texImage2D was failing
        not because my ArrayBufferView was too small but because the default
        alignment is 4. A better error message might help devs find this issue
        faster.

        Reviewed by Kenneth Russell.

        No new tests as no new functionality.

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore):
        (WebCore::WebGLRenderingContext::validateTexFuncData):

2012-03-12  Tim Horton  <timothy_horton@apple.com>

        Infinite repaint loop with SVGImageCache and deferred repaint timers
        https://bugs.webkit.org/show_bug.cgi?id=78315
        <rdar://problem/10651634>

        Reviewed by Nikolas Zimmermann.

        Only defer image redraw on a timer if we're in layout. This breaks
        the repaint loop while still preventing us from drawing inside layout.

        Completely disable repaint during relayout inside SVGImage::drawSVGToImageBuffer,
        preventing deferred repaint timers from being started during that process.

        No new tests, as the problem only occurs in a nonstandard configuration.

        * page/FrameView.cpp:
        (WebCore::FrameView::FrameView):
        (WebCore::FrameView::reset):
        (WebCore::FrameView::repaintContentRectangle):
        (WebCore::FrameView::endDeferredRepaints):
        (WebCore::FrameView::startDeferredRepaintTimer):
        (WebCore):
        (WebCore::FrameView::doDeferredRepaints):
        (WebCore::FrameView::deferredRepaintTimerFired):
        (WebCore::FrameView::beginDisableRepaints):
        (WebCore::FrameView::endDisableRepaints):
        * page/FrameView.h:
        (FrameView):
        (WebCore::FrameView::repaintsDisabled):
        * rendering/RenderView.cpp:
        (WebCore::RenderView::shouldRepaint):
        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::drawSVGToImageBuffer):
        (WebCore::SVGImage::draw):
        (WebCore::SVGImage::frameView):
        (WebCore):
        * svg/graphics/SVGImage.h:
        (WebCore):
        * svg/graphics/SVGImageCache.cpp:
        (WebCore::SVGImageCache::imageContentChanged):
        (WebCore::SVGImageCache::redraw):
        (WebCore::SVGImageCache::redrawTimerFired):
        (WebCore):
        * svg/graphics/SVGImageCache.h:
        (SVGImageCache):

2012-03-12  Adam Klein  <adamk@chromium.org>

        [MutationObservers] Enforce a consistent order of MutationRecord delivery
        https://bugs.webkit.org/show_bug.cgi?id=80549

        Reviewed by Ojan Vafai.

        Mutations should be delivered in order of creation.

        Tests: fast/mutation/create-during-delivery.html
               fast/mutation/delivery-order.html
               fast/mutation/mutate-during-delivery.html

        * dom/WebKitMutationObserver.cpp:
        (WebCore):
        (WebCore::WebKitMutationObserver::ObserverLessThan::operator()): Functor for use with std::sort.
        (WebCore::WebKitMutationObserver::create):
        (WebCore::WebKitMutationObserver::WebKitMutationObserver):
        (WebCore::WebKitMutationObserver::deliverAllMutations): Move observers into a sorted vector before delivery.
        * dom/WebKitMutationObserver.h: Add a "priority" member which monotonically increases with each construction.

2012-03-12  Nat Duca  <nduca@chromium.org>

        [Chromium] Force compositeAndReadback through regular scheduling flow
        https://bugs.webkit.org/show_bug.cgi?id=77049

        Reviewed by James Robinson.

        * platform/graphics/chromium/cc/CCFrameRateController.cpp:
        (WebCore::CCFrameRateController::onTimerTick):
        * platform/graphics/chromium/cc/CCFrameRateController.h:
        (CCFrameRateControllerClient):
        * platform/graphics/chromium/cc/CCScheduler.cpp:
        (WebCore::CCScheduler::setNeedsForcedCommit):
        (WebCore):
        (WebCore::CCScheduler::vsyncTick):
        * platform/graphics/chromium/cc/CCScheduler.h:
        (CCScheduler):
        * platform/graphics/chromium/cc/CCSchedulerStateMachine.cpp:
        (WebCore::CCSchedulerStateMachine::CCSchedulerStateMachine):
        (WebCore::CCSchedulerStateMachine::nextAction):
        (WebCore::CCSchedulerStateMachine::updateState):
        (WebCore::CCSchedulerStateMachine::setNeedsForcedCommit):
        (WebCore):
        * platform/graphics/chromium/cc/CCSchedulerStateMachine.h:
        (CCSchedulerStateMachine):
        * platform/graphics/chromium/cc/CCThreadProxy.cpp:
        (WebCore::CCThreadProxy::CCThreadProxy):
        (WebCore::CCThreadProxy::compositeAndReadback):
        (WebCore::CCThreadProxy::requestReadbackOnImplThread):
        (WebCore::CCThreadProxy::forceBeginFrameOnImplThread):
        (WebCore::CCThreadProxy::scheduledActionBeginFrame):
        (WebCore::CCThreadProxy::beginFrame):
        * platform/graphics/chromium/cc/CCThreadProxy.h:
        (CCThreadProxy):
        (WebCore::CCThreadProxy::BeginFrameAndCommitState::BeginFrameAndCommitState):
        (BeginFrameAndCommitState):

2012-03-12  Joshua Bell  <jsbell@chromium.org>

        IndexedDB: Handle LevelDB database corruption
        https://bugs.webkit.org/show_bug.cgi?id=79413

        Add LevelDBDatabase::destroy() method so that clients can retry if open() fails.

        Reviewed by Tony Chang.

        Test: webkit_unit_tests --gtest_filter='LevelDBDatabaseTest.CorruptionTest'

        * Modules/indexeddb/IDBLevelDBBackingStore.cpp: Implement open/destroy/open strategy.
        (WebCore::IDBLevelDBBackingStore::open):
        * platform/leveldb/LevelDBDatabase.cpp:
        (WebCore::LevelDBDatabase::destroy):
        (WebCore):
        * platform/leveldb/LevelDBDatabase.h:
        (LevelDBDatabase):

2012-03-11  Shawn Singh  <shawnsingh@chromium.org>

        Fix regression on fast/table/table-row-compositing-repaint-crash.html
        https://bugs.webkit.org/show_bug.cgi?id=80804

        Reviewed by Simon Fraser.

        Covered by existing tests.

        http://trac.webkit.org/changeset/110401/ accidentally caused
        fast/table/table-row-compositing-repaint-crash.html to fail.

        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::updateBacking):

2012-03-12  Mike Lawther  <mikelawther@chromium.org>

        CSS3 calc: enable mixed percent/absolute for font
        https://bugs.webkit.org/show_bug.cgi?id=80813

        Reviewed by Ojan Vafai.

        Add support for mixed percent/absolute expressions to the font handling class.

        * css/CSSStyleApplyProperty.cpp:
        (WebCore::ApplyPropertyFontSize::applyValue):

2012-03-12  Andreas Kling  <awesomekling@apple.com>

        Restore Attr::style() functionality.
        <http://webkit.org/b/80678>
        <rdar://problem/10933904>

        Reviewed by Antti Koivisto.

        The neutering of Attr::style() in r106740 broke some internal clients of the Obj-C API,
        so this was definitely premature.

        Since we no longer have a per-Attribute style object, synthesize one in style() and
        hang it off of the Attr. This grows Attr by one pointer, but it's a low-volume object
        so it shouldn't matter much.

        We recreate the StylePropertySet object on every call to style(), to avoid complicating
        things with custom invalidation code.

        * dom/Attr.cpp:
        (WebCore::Attr::style):
        * dom/Attr.h:
        * dom/StyledElement.h:
        (WebCore::StyledElement::collectStyleForAttribute):

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

        REGRESSION(r109285): Crash in WebCore::Document::nodeChildrenWillBeRemoved
        https://bugs.webkit.org/show_bug.cgi?id=80578

        Reviewed by Andreas Kling.

        Test: svg/css/style-change-crash.html

        * dom/Element.cpp:
        (WebCore::Element::setAttribute):
        (WebCore::Element::setAttributeInternal):
        * dom/Element.h:
        (Element):
        * dom/ElementAttributeData.cpp:
        (WebCore::ElementAttributeData::addAttribute):
        (WebCore::ElementAttributeData::removeAttribute):
        * dom/ElementAttributeData.h:
        (ElementAttributeData):
        * dom/StyledElement.cpp:
        (WebCore::StyledElement::updateStyleAttribute):

2012-03-12  Sadrul Habib Chowdhury  <sadrul@chromium.org>

        Touch event handler count is not updated when adding handlers to the window.
        https://bugs.webkit.org/show_bug.cgi?id=80756

        Touch event handlers added to the window needs to be included when counting the number of touch event
        handlers. This makes touch event handler counting identical to wheel event handler counting.

        Reviewed by Anders Carlsson.

        Test: fast/events/touch/touch-handler-count.html

        * dom/EventNames.h:
        (EventNames):
        (WebCore::EventNames::isTouchEventType):
        * dom/Node.cpp:
        (WebCore):
        (WebCore::tryAddEventListener):
        (WebCore::tryRemoveEventListener):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::addEventListener):
        (WebCore::DOMWindow::removeEventListener):
        * testing/Internals.cpp:
        (WebCore::Internals::touchEventHandlerCount):
        (WebCore):
        * testing/Internals.h:
        (Internals):
        * testing/Internals.idl:

2012-03-12  Pavel Podivilov  <podivilov@chromium.org>

        Web Inspector: extract ResourceScriptMapping from MainScriptMapping.
        https://bugs.webkit.org/show_bug.cgi?id=80834

        Reviewed by Vsevolod Vlasov.

        * inspector/front-end/ScriptMapping.js:
        (WebInspector.ResourceScriptMapping):
        (WebInspector.ResourceScriptMapping.prototype._uiSourceCodeListChanged):
        (WebInspector.ResourceScriptMapping.prototype.reset):
        (WebInspector.MainScriptMapping):
        (WebInspector.MainScriptMapping.prototype.rawLocationToUILocation):
        (WebInspector.MainScriptMapping.prototype.createLiveLocation):
        (WebInspector.MainScriptMapping.prototype._registerLiveLocation):
        (WebInspector.MainScriptMapping.prototype._unregisterLiveLocation):
        (WebInspector.MainScriptMapping.prototype._updateLiveLocations):
        (WebInspector.MainScriptMapping.prototype.uiSourceCodeList):
        (WebInspector.MainScriptMapping.prototype.addScript):
        (WebInspector.MainScriptMapping.prototype._handleUISourceCodeListChanged):
        (WebInspector.MainScriptMapping.prototype.setFormatSource):
        (WebInspector.MainScriptMapping.prototype.forceUpdateSourceMapping):
        (WebInspector.MainScriptMapping.prototype.reset):

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

        Web Inspector: recognize Float*Array and Int*Array as arrays.
        https://bugs.webkit.org/show_bug.cgi?id=80850

        Reviewed by Vsevolod Vlasov.

        Test: inspector/console/console-external-array.html

        * bindings/js/JSInjectedScriptHostCustom.cpp:
        (WebCore::JSInjectedScriptHost::type):
        * bindings/v8/custom/V8InjectedScriptHostCustom.cpp:
        (WebCore::V8InjectedScriptHost::typeCallback):

2012-03-12  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        [TexMapGL] Pixel-align the transform of textures that fit pixel-for-pixel on the frame buffer.
        https://bugs.webkit.org/show_bug.cgi?id=80848

        Reviewed by Noam Rosenthal.

        When rendering a transformed texture on the screen with a fractional
        coordinate with linear filtering, the resulting pixel will be blended from
        the texels around this fractional position according to their cover ratio.
        This produces a slight blur of pixels which give no benefit when rendering
        a texture that isn't scaled.

        This patch offsets the transform by rounding the translation part of the
        layer's transform to align the result to integer coordinates.
        Applying the adjustment on the layer transform makes sure that all the tiles
        get the same adjustment.

        * platform/graphics/qt/GraphicsContext3DQt.cpp:
        (WebCore::GraphicsContext3DPrivate::paintToTextureMapper):
        * platform/graphics/texmap/TextureMapperGL.cpp:
        (WebCore::TextureMapperGL::drawTexture):
        * platform/graphics/texmap/TextureMapperGL.h:
        (WebCore::BitmapTextureGL::textureSize):

2012-03-12  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        [TexMapGL] Use textures sized exactly to their contents.
        https://bugs.webkit.org/show_bug.cgi?id=80845

        Reviewed by Noam Rosenthal.

        This fixes a regression introduced in r108273 as well as the bug it fixed.
        The regressing behavior was that textures were rendered shrunk by 1 pixel
        and thus would appear blurry on the screen.
        The original problem was that garbage contents would appear on filtered
        textures since we would reuse textures of different sizes by giving them
        a slightly bigger size.

        This patch will reuse the texture only if the size matches exactly to allow
        edge clamping to work properly when redering with linear filtering.
        Reusing textures would only saves us the allocation of graphic memory
        anyway, which is negligeable compared to texture upload.

        * platform/graphics/qt/GraphicsContext3DQt.cpp:
        (WebCore::GraphicsContext3DPrivate::paintToTextureMapper):
        * platform/graphics/texmap/TextureMapperGL.cpp:
        (WebCore::TextureMapperGL::drawTexture):
        (WebCore::BitmapTextureGL::didReset):
        * platform/graphics/texmap/TextureMapperGL.h:
        (BitmapTextureGL):
        * platform/graphics/texmap/TextureMapperShaderManager.cpp:
        (WebCore::TextureMapperShaderProgramOpacityAndMask::TextureMapperShaderProgramOpacityAndMask):
        (WebCore::TextureMapperShaderProgramOpacityAndMask::prepare):
        * platform/graphics/texmap/TextureMapperShaderManager.h:
        (TextureMapperShaderProgramOpacityAndMask):

2012-03-12  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        [TexMap] Remove BitmapTexture::destroy.
        https://bugs.webkit.org/show_bug.cgi?id=80844

        Reviewed by Noam Rosenthal.

        Use the destructor directly instead.

        * platform/graphics/texmap/TextureMapper.h:
        * platform/graphics/texmap/TextureMapperGL.cpp:
        (WebCore::BitmapTextureGL::~BitmapTextureGL):
        * platform/graphics/texmap/TextureMapperGL.h:
        (BitmapTextureGL):
        * platform/graphics/texmap/TextureMapperImageBuffer.h:
        (WebCore::BitmapTextureImageBuffer::~BitmapTextureImageBuffer):

2012-03-12  Pavel Podivilov  <podivilov@chromium.org>

        Web Inspector: DebuggerModel.Location should have scriptId property.
        https://bugs.webkit.org/show_bug.cgi?id=80830

        Reviewed by Vsevolod Vlasov.

        * inspector/front-end/CompilerSourceMapping.js:
        (WebInspector.ClosureCompilerSourceMapping.prototype.sourceLocationToCompiledLocation):
        * inspector/front-end/ConsoleMessage.js:
        (WebInspector.ConsoleMessageImpl.prototype.location):
        * inspector/front-end/DebuggerModel.js:
        (WebInspector.DebuggerModel.Location):
        (WebInspector.DebuggerModel.prototype._failedToParseScriptSource):
        (WebInspector.DebuggerModel.prototype.createRawLocation):
        (WebInspector.DebuggerModel.prototype.createRawLocationByURL):
        * inspector/front-end/DebuggerPresentationModel.js:
        (WebInspector.DebuggerPresentationModel.prototype._consoleMessageAdded):
        (WebInspector.DebuggerPresentationModel.prototype._addConsoleMessageToScript):
        (WebInspector.DebuggerPresentationModel.prototype._addPendingConsoleMessagesToScript):
        (WebInspector.DebuggerPresentationModelResourceBinding.prototype._uiSourceCodeForResource):
        (WebInspector.DebuggerPresentationModel.Linkifier.prototype.linkifyLocation):
        * inspector/front-end/RawSourceCode.js:
        (WebInspector.RawSourceCode.PlainSourceMapping.prototype.uiLocationToRawLocation):
        (WebInspector.RawSourceCode.FormattedSourceMapping.prototype.rawLocationToUILocation):
        (WebInspector.RawSourceCode.FormattedSourceMapping.prototype.uiLocationToRawLocation):
        (WebInspector.RawSourceCode.CompilerSourceMapping.prototype.uiLocationToRawLocation):
        * inspector/front-end/ScriptFormatter.js:
        (WebInspector.ScriptFormatter.locationToPosition):
        (WebInspector.ScriptFormatter.positionToLocation):
        (WebInspector.FormattedSourceMapping.prototype.originalToFormatted):
        (WebInspector.FormattedSourceMapping.prototype.formattedToOriginal):

2012-03-12  Dana Jansens  <danakj@chromium.org>

        [chromium] A couple early-outs for occlusion tracker
        https://bugs.webkit.org/show_bug.cgi?id=80742

        Reviewed by Adrienne Walker.

        Covered by existing tests.

        * platform/graphics/chromium/cc/CCOcclusionTracker.cpp:
        (WebCore::::occluded):
        (WebCore::::unoccludedContentRect):

2012-03-12  Zeno Albisser  <zeno@webkit.org>

        [Qt][Mac] Build fails after adding WebCoreCFAutorelease(CFTypeRef) (r110360).
        https://bugs.webkit.org/show_bug.cgi?id=80840

        CoreFoundation/CFBase.h needs to be included to define the type CFTypeRef.

        Reviewed by Tor Arne Vestbø.

        * platform/mac/WebCoreObjCExtras.h:

2012-03-12  George Staikos  <staikos@webkit.org>

        Remove unused global static variable for BlackBerry.
        https://bugs.webkit.org/show_bug.cgi?id=80790

        Reviewed by Alexey Proskuryakov.

        * platform/graphics/gpu/DrawingBuffer.cpp:
        (WebCore):

2012-03-12  George Staikos  <staikos@webkit.org>

        Correct usage of NDEBUG to fix warnings on BlackBerry.
        https://bugs.webkit.org/show_bug.cgi?id=80790

        Reviewed by Alexey Proskuryakov.

        * platform/blackberry/CookieDatabaseBackingStore/CookieDatabaseBackingStore.cpp:
        (WebCore::CookieDatabaseBackingStore::sendChangesToDatabase):
        * platform/blackberry/CookieManager.cpp:
        (WebCore::CookieManager::initiateCookieLimitCleanUp):

2012-03-12  Ilya Tikhonovsky  <loislo@chromium.org>

        Re-apply the patch after v8 roll to r11000.

        Web Inspector: move heap snapshot nodes data to external array.
        https://bugs.webkit.org/show_bug.cgi?id=79911

        Reviewed by Vsevolod Vlasov.

        Tests:
        heap-shapshot.html
        heap-shapshot-loader.html

        * inspector/front-end/HeapSnapshot.js:
        (WebInspector.Int32Array):
        (WebInspector.Int32Array.prototype.get array):
        (WebInspector.HeapSnapshotLoader.prototype._parseNodes):
        (WebInspector.HeapSnapshotLoader.prototype.pushJSONChunk):
        (WebInspector.HeapSnapshot):
        (WebInspector.HeapSnapshot.prototype._init):

2012-03-12  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] Fix build with newer Qt 5.

        Reviewed by Tor Arne Vestbø.

        * platform/qt/RenderThemeQt.cpp:
        (WebCore::RenderThemeQt::fileListNameForWidth): Use DefaultCodec instead of the
        deprecated CodecForTR.

2012-03-12  Hans Wennborg  <hans@chromium.org>

        Speech JavaScript API: SpeechRecognitionEvent
        https://bugs.webkit.org/show_bug.cgi?id=80513

        Reviewed by Adam Barth.

        Implement SpeechRecognitionEvent.
        (Spec: http://speech-javascript-api-spec.googlecode.com/git/speechapi.html)

        Test: fast/events/constructors/speech-recognition-event-constructor.html

        * Modules/speech/DOMWindowSpeech.idl:
        * Modules/speech/SpeechRecognitionEvent.cpp: Added.
        (WebCore):
        (WebCore::SpeechRecognitionEventInit::SpeechRecognitionEventInit):
        (WebCore::SpeechRecognitionEvent::create):
        (WebCore::SpeechRecognitionEvent::createResult):
        (WebCore::SpeechRecognitionEvent::createNoMatch):
        (WebCore::SpeechRecognitionEvent::createResultDeleted):
        (WebCore::SpeechRecognitionEvent::createError):
        (WebCore::SpeechRecognitionEvent::interfaceName):
        (WebCore::SpeechRecognitionEvent::SpeechRecognitionEvent):
        * Modules/speech/SpeechRecognitionEvent.h: Added.
        (WebCore):
        (SpeechRecognitionEventInit):
        (SpeechRecognitionEvent):
        (WebCore::SpeechRecognitionEvent::result):
        (WebCore::SpeechRecognitionEvent::error):
        (WebCore::SpeechRecognitionEvent::resultIndex):
        (WebCore::SpeechRecognitionEvent::resultHistory):
        * Modules/speech/SpeechRecognitionEvent.idl:
        * WebCore.gypi:
        * bindings/generic/RuntimeEnabledFeatures.h:
        (WebCore::RuntimeEnabledFeatures::webkitSpeechRecognitionEventEnabled):
        * bindings/v8/OptionsObject.cpp:
        (WebCore::OptionsObject::get):
        (WebCore):
        * bindings/v8/OptionsObject.h:
        (WebCore):
        (OptionsObject):
        * dom/EventNames.h:
        (WebCore):
        * dom/EventNames.in:

2012-03-12  Kent Tamura  <tkent@chromium.org>

        Use ICU C API instead of C++ API in LocalizedNumberICU
        https://bugs.webkit.org/show_bug.cgi?id=80815
        https://bugs.gentoo.org/show_bug.cgi?id=407401

        Reviewed by Hajime Morita.

        ICU 4.8 doesn't have kNumberStyle. We had better to use ICU C API in
        general to avoid such issues.

        This patch should not make any behavior change.

        * platform/text/LocalizedNumberICU.cpp:
        (WebCore::ICULocale::ICULocale):
        Change the argument type: icu::Locale -> const char*
        (WebCore::ICULocale::~ICULocale): Delete m_numberFormat with unum_close().
        (WebCore::ICULocale::create): Do not create icu::Locale.
        (WebCore::ICULocale::createForCurrentLocale): ditto.
        (WebCore::ICULocale::setDecimalSymbol):
        Use unum_getSymbol() instead of DecimalFormatSymbols::getSymbol().
        (WebCore::ICULocale::setDecimalTextAttribute):
        Added. A utility function to store prefixes and suffixes.
        (WebCore::ICULocale::initializeDecimalFormat):
        - unum_open(), instead of NumberFormat::createInstance().
        - Use C API symbols.
        - Cache positive/negative prefixes/suffixes.
        (WebCore::ICULocale::convertToLocalizedNumber): Use cached prefixes and suffixes.
        (WebCore::matches): Stop using template because we don't use UString anymore.
        (WebCore::ICULocale::detectSignAndGetDigitRange):
        - Use cached prefixes and suffixes.
        - Use String::startsWith() and endsWith().
        (WebCore::ICULocale::convertFromLocalizedNumber):
        * platform/text/LocalizedNumberICU.h:
        (ICULocale):

2012-03-11  Pavel Podivilov  <podivilov@chromium.org>

        Web Inspector: decouple LiveLocation from RawSourceCode.
        https://bugs.webkit.org/show_bug.cgi?id=80785

        Reviewed by Vsevolod Vlasov.

        * inspector/front-end/DebuggerPresentationModel.js:
        (WebInspector.DebuggerPresentationModel.prototype.createPlacard):
        (WebInspector.DebuggerPresentationModel.prototype._debuggerPaused):
        (WebInspector.PresentationCallFrame):
        (WebInspector.PresentationCallFrame.prototype.uiLocation):
        (WebInspector.DebuggerPresentationModel.CallFramePlacard):
        * inspector/front-end/RawSourceCode.js:
        * inspector/front-end/ScriptMapping.js:
        (WebInspector.MainScriptMapping):
        (WebInspector.MainScriptMapping.prototype.createLiveLocation):
        (WebInspector.MainScriptMapping.prototype._registerLiveLocation):
        (WebInspector.MainScriptMapping.prototype._unregisterLiveLocation):
        (WebInspector.MainScriptMapping.prototype._updateLiveLocations):
        (WebInspector.MainScriptMapping.prototype._uiSourceCodeListChanged):
        (WebInspector.MainScriptMapping.prototype.reset):
        (WebInspector.LiveLocation):
        (WebInspector.LiveLocation.prototype.init):
        (WebInspector.LiveLocation.prototype.dispose):
        (WebInspector.LiveLocation.prototype._update):

2012-03-11  Victor Carbune  <vcarbune@adobe.com>

        The main code structure for placing future text track cue rendering
        code and main outer rendering steps.
        https://bugs.webkit.org/show_bug.cgi?id=79746

        Reviewed by Eric Carlson.

        No new tests. Only refactoring, but some chromium tests require rebaselining
        and have been marked accordingly.

        * css/mediaControls.css:
        (::-webkit-media-controls): Changed the default display to -webkit-box, as
        captions need to always be rendered on top of the controls, if they are visible.
        (audio::-webkit-media-controls-panel, video::-webkit-media-controls-panel):
        Default position attribute is now relative, handled by the parent -webkit-box
        (video::-webkit-media-text-track-container): The position of the container is
        now relative, handled by -webkit-box.
        (video::-webkit-media-text-track-display): Adjusted text color to match
        the color required in the WebVTT spec (section 3.5.1 'color' property)
        * css/mediaControlsChromium.css:
        (audio::-webkit-media-controls-panel, video::-webkit-media-controls-panel):
        Default position attribute is now relative, handled by the parent -webkit-box

        * html/shadow/MediaControlElements.cpp:
        (WebCore::MediaControlPanelElement::MediaControlPanelElement): Added a timer
        for the webkit fade out transition event. This timer is required for setting
        the display property to 'none', when the fade out transition is over. Otherwise,
        captions would not be displayed at the bottom of the video.
        (WebCore::MediaControlPanelElement::startTimer): Added.
        (WebCore):
        (WebCore::MediaControlPanelElement::stopTimer): Added.
        (WebCore::MediaControlPanelElement::transitionTimerFired): Added. If the current
        state of the controls is transparent, the display property is set to 'none'.
        (WebCore::MediaControlPanelElement::makeOpaque): The inline display:'none' property
        is removed before the fade in transition.
        (WebCore::MediaControlPanelElement::makeTransparent): Added the timer start.
        (WebCore::MediaControlTextTrackContainerElement::MediaControlTextTrackContainerElement):
        Removed m_bottom as it is not needed anymore.
        (WebCore::MediaControlTextTrackContainerElement::updateDisplay): Added. Main
        function for the rendering rules.
        (WebCore::MediaControlTextTrackContainerElement::updateSizes): The bottom position
        needs not to be set anymore.
        * html/shadow/MediaControlElements.h:
        (MediaControlPanelElement): Added timer internals.
        (MediaControlTextTrackContainerElement): Added updateDisplay() and removed unused
        variables.

        (WebCore):
        * html/shadow/MediaControlRootElement.cpp: Removed m_textTrackDisplay
        and duplicated code with MediaControlRootElementChromium (only minimum
        function calls to the main text track container)
        (WebCore::MediaControlRootElement::MediaControlRootElement):
        (WebCore::MediaControlRootElement::setMediaController):
        (WebCore::MediaControlRootElement::createTextTrackDisplay):
        (WebCore::MediaControlRootElement::updateTextTrackDisplay):

        * html/shadow/MediaControlRootElementChromium.cpp: Removed m_textTrackDisplay
        and duplicate code with MediaControlRootElement (only minimum function calls
        to the main text track container remained)
        (WebCore::MediaControlRootElementChromium::MediaControlRootElementChromium):
        (WebCore::MediaControlRootElementChromium::setMediaController):
        (WebCore::MediaControlRootElementChromium::createTextTrackDisplay):
        (WebCore::MediaControlRootElementChromium::updateTextTrackDisplay):

        (WebCore):
        * html/track/TextTrackCue.cpp: Enhanced structure for supporting more complex
        rendering required by the WebVTT spec.
        (WebCore::TextTrackCue::TextTrackCue):
        (WebCore::TextTrackCue::cueDidChange): Mark the display tree as obsolete, so that
        it needs to be re-computed.
        (WebCore::TextTrackCue::setIsActive): The display tree needs to be removed as
        soon as the cue becomes inactive. Adjusted this method to support the functionality.
        (WebCore):
        (WebCore::TextTrackCue::determineDisplayParameters): Added. This method will hold
        main positioning parameter computations for a TextTrackCue
        (WebCore):
        (WebCore::TextTrackCue::getDisplayTree): Added. This method returns the root node
        of the CSS boxes that need to be displayed on top of the video, for the current
        instance.
        * html/track/TextTrackCue.h:
        (WebCore):
        (TextTrackCue):

2012-03-11  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r110359.
        http://trac.webkit.org/changeset/110359
        https://bugs.webkit.org/show_bug.cgi?id=80799

        SelectPopupMenuTest.ClickItem failure (Requested by ukai on
        #webkit).

        * platform/chromium/PopupListBox.cpp:
        (WebCore::PopupListBox::paint):
        (WebCore::PopupListBox::paintRow):
        (WebCore::PopupListBox::getRowHeight):
        * platform/chromium/PopupListBox.h:
        (PopupContainerSettings):
        * platform/chromium/PopupMenuChromium.cpp:
        (WebCore):
        (WebCore::PopupMenuChromium::show):
        * platform/chromium/PopupMenuChromium.h:
        (PopupMenuChromium):
        * rendering/RenderMenuList.cpp:
        (WebCore::RenderMenuList::showPopup):

2012-03-11  Timothy Hatcher  <timothy@apple.com>

        Fix a crash opening the Web Inspector in WebKit1 clients.

        The call to InspectorFrontendClientLocal::setAttachedWindow is preformed really early in the process,
        causing it to crash almost every time. It should use evaluateOnLoad instead of evaluateAsBoolean.

        <rdar://problem/10951109> Crash when bringing up Web Inspector in WebKit1 client
        https://bugs.webkit.org/show_bug.cgi?id=80796

        Reviewed by Brian Weinstein.

        * inspector/InspectorFrontendClientLocal.cpp:
        (WebCore::InspectorFrontendClientLocal::setAttachedWindow): Use evaluateOnLoad instead of evaluateAsBoolean.

2012-03-11  Shawn Singh  <shawnsingh@chromium.org>

        REGRESSION (r93614): scrolling div does not repaint
        https://bugs.webkit.org/show_bug.cgi?id=80641

        Reviewed by Simon Fraser.

        Test: compositing/repaint/newly-composited-repaint-rect.html

        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::updateBacking): When a layer
        becomes newly composited and creates its backing, the repaintRect
        may become invalid. This patch recomputes repaintRects in this
        case.

2012-03-11  George Staikos  <staikos@webkit.org>

        Enable JPEG encoding for BlackBerry.
        https://bugs.webkit.org/show_bug.cgi?id=80792

        Reviewed by Antonio Gomes.

        * PlatformBlackBerry.cmake:

2012-03-11  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: console.log attempts to substitute any "%" character in the message.
        https://bugs.webkit.org/show_bug.cgi?id=80504

        Reviewed by Vsevolod Vlasov.

        Test: inspector/console/console-string-format.html

        * inspector/front-end/AuditRules.js:
        (WebInspector.AuditRules.UnusedCssRule.prototype.doRun.evalCallback.selectorsCallback):
        * inspector/front-end/ProfileDataGridTree.js:
        * inspector/front-end/ProfilesPanel.js:
        (WebInspector.ProfilesPanel.prototype._reportHeapSnapshotProgress):
        * inspector/front-end/utilities.js:

2012-03-11  Andrey Kosyakov  <caseq@chromium.org>

        Web Inspector: use monotonically increasing time in timeline agent
        https://bugs.webkit.org/show_bug.cgi?id=80786

        Reviewed by Pavel Feldman.

        * bindings/v8/ScriptGCEvent.cpp:
        (WebCore::ScriptGCEvent::gcPrologueCallback):
        (WebCore::ScriptGCEvent::gcEpilogueCallback):
        * inspector/InspectorTimelineAgent.cpp:
        (WebCore::InspectorTimelineAgent::pushGCEventRecords):
        (WebCore::InspectorTimelineAgent::willSendResourceRequest):
        (WebCore::InspectorTimelineAgent::didCompleteCurrentRecord):
        (WebCore::InspectorTimelineAgent::appendRecord):
        (WebCore::InspectorTimelineAgent::pushCurrentRecord):
        (WebCore::InspectorTimelineAgent::timestamp):
        (WebCore):
        * inspector/InspectorTimelineAgent.h:
        (InspectorTimelineAgent):
        (WebCore::InspectorTimelineAgent::timestamp):

2012-03-11  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Network panel does not show responses for application/json data
        https://bugs.webkit.org/show_bug.cgi?id=80684

        Reviewed by Pavel Feldman.

        Test: http/tests/inspector/network/async-xhr-json-mime-type.html

        * inspector/InspectorPageAgent.cpp:
        (WebCore::createXHRTextDecoder):
        (WebCore::InspectorPageAgent::cachedResourceContent):
        * inspector/InspectorPageAgent.h:
        * inspector/NetworkResourcesData.cpp:
        (WebCore::createOtherResourceTextDecoder):
        (WebCore):
        (WebCore::NetworkResourcesData::responseReceived):

2012-03-11  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: CSS content is not shown when stylesheet is loaded with invalid mime type in quirks mode.
        https://bugs.webkit.org/show_bug.cgi?id=80528

        Reviewed by Pavel Feldman.

        Test: http/tests/inspector/resource-tree/resource-tree-invalid-mime-type-css-content.html

        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::cachedResourceContent):

2012-03-11  Viatcheslav Ostapenko  <ostapenko.viatcheslav@nokia.com>

        [Qt] [WK2] Support threaded renderer in WK2
        https://bugs.webkit.org/show_bug.cgi?id=76661

        Reviewed by Noam Rosenthal.

        Add TransformationMatrix conversions from/to Qt QMatrix4x4. Used by Qt WebKit2
        rendering and tested by Qt WebKit2 API tests.

        * platform/graphics/qt/TransformationMatrixQt.cpp:
        (WebCore::TransformationMatrix::operator QMatrix4x4):
        (WebCore):
        (WebCore::TransformationMatrix::TransformationMatrix):
        * platform/graphics/transforms/TransformationMatrix.h:
        (TransformationMatrix):

2012-03-09  Jon Lee  <jonlee@apple.com>

        Rename NotificationPresenter to NotificationClient
        https://bugs.webkit.org/show_bug.cgi?id=80488
        <rdar://problem/10965558>

        Reviewed by Kentaro Hara.

        * notifications/NotificationCenter.h: Renamed from notifications/NotificationPresenter.h.

        Refactor to use renamed WebCore::NotificationClient.
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.exp.in:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * notifications/Notification.cpp:
        (WebCore::Notification::Notification):
        (WebCore::Notification::show):
        (WebCore::Notification::cancel):
        (WebCore::Notification::contextDestroyed):
        (WebCore::Notification::finishLoading):
        * notifications/NotificationCenter.cpp:
        (WebCore::NotificationCenter::create):
        (WebCore::NotificationCenter::NotificationCenter):
        (WebCore::NotificationCenter::checkPermission):
        (WebCore::NotificationCenter::requestPermission):
        (WebCore::NotificationCenter::disconnectFrame):
        * notifications/NotificationController.cpp:
        (WebCore::NotificationController::NotificationController):
        (WebCore::NotificationController::create):
        (WebCore::NotificationController::clientFrom):
        (WebCore::provideNotification):
        * notifications/NotificationController.h:
        (WebCore):
        (NotificationController):
        (WebCore::NotificationController::client):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::webkitNotifications):
        * page/DOMWindow.h:
        (DOMWindow):
        * workers/WorkerContext.cpp:
        (WebCore::WorkerContext::webkitNotifications):
        * workers/WorkerThread.cpp:
        (WebCore::WorkerThread::WorkerThread):
        * workers/WorkerThread.h:
        (WebCore):
        (WebCore::WorkerThread::getNotificationClient):
        (WebCore::WorkerThread::setNotificationClient):
        (WorkerThread):

2012-03-10  Julien Chaffraix  <jchaffraix@webkit.org>

        RenderObject with 'resize' different from 'none' should have a RenderLayer
        https://bugs.webkit.org/show_bug.cgi?id=80738

        Reviewed by James Robinson.

        Covered by fast/css/resize-single-axis.html.

        * rendering/RenderBox.h:
        (WebCore::RenderBox::requiresLayerForOverflowClip):
        The resizer logic is tied to RenderLayer so force a RenderLayer to be allocated if resize() != RESIZE_NONE.

2012-03-10  Stephen White  <senorblanco@chromium.org>

        Unreviewed, rolling out r110358.
        http://trac.webkit.org/changeset/110358
        https://bugs.webkit.org/show_bug.cgi?id=80706

        No improvement on specified benchmarks.

        * dom/ContainerNode.cpp:
        (WebCore::collectNodes):
        (WebCore::collectTargetNodes):

2012-03-10  MORITA Hajime  <morrita@google.com>

        ShadowTree uses weak iteration patterns
        https://bugs.webkit.org/show_bug.cgi?id=80572

        Reviewed by Dimitri Glazkov.

        Patch by Adam Barth.

        This patch moves various ShadowTree to using a better iteration pattern
        in which we collect all the ShadowRoots we're planning to iterate into
        a vector and then iterate over them.

        * dom/ShadowTree.cpp:
        (ShadowRootVector):
        (WebCore::ShadowRootVector::ShadowRootVector):
        (WebCore):
        (WebCore::ShadowTree::removeAllShadowRoots):
        (WebCore::ShadowTree::insertedIntoDocument):
        (WebCore::ShadowTree::removedFromDocument):
        (WebCore::ShadowTree::insertedIntoTree):
        (WebCore::ShadowTree::removedFromTree):
        (WebCore::ShadowTree::willRemove):

2012-03-10  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r110363.
        http://trac.webkit.org/changeset/110363
        https://bugs.webkit.org/show_bug.cgi?id=80757

        link error in chromium: unresolved external symbol
        webkit_support::CreateScopedTempDirectory(void) (Requested by
        ukai_home on #webkit).

        * Modules/indexeddb/IDBLevelDBBackingStore.cpp:
        (WebCore::IDBLevelDBBackingStore::open):
        * platform/leveldb/LevelDBDatabase.cpp:
        * platform/leveldb/LevelDBDatabase.h:
        (LevelDBDatabase):

2012-03-09  Robert Kroeger  <rjkroege@chromium.org>

        Handle more Gesture* events by performing scrolls on the correct target ScrollableArea 
        https://bugs.webkit.org/show_bug.cgi?id=80311

        Implement GestureScroll* events via re-use of WheelEvent dispatch.

        Reviewed by James Robinson.

        Layout tests previously submited as https://bugs.webkit.org/show_bug.cgi?id=80201 and unit
        test added as part of this patch.

        * page/EventHandler.cpp:
        (WebCore::wheelGranularityToScrollGranularity): Refactoring.
        (WebCore):
        (WebCore::scrollNode):
        (WebCore::EventHandler::EventHandler):
        (WebCore::EventHandler::clear):
        (WebCore::EventHandler::handleWheelEvent):
        (WebCore::EventHandler::defaultWheelEventHandler):
        (WebCore::EventHandler::handleGestureEvent): Added GestureScrollBegin & End.
        (WebCore::EventHandler::handleGestureTap):
        (WebCore::EventHandler::handleGestureScrollUpdate):
        (WebCore::EventHandler::handleGestureScrollCore): Refactoring.
        * page/EventHandler.h:
        (EventHandler):
        * platform/PlatformWheelEvent.h: Added additional scroll type.
        * platform/ScrollAnimator.cpp:
        (WebCore::ScrollAnimator::handleWheelEvent): Forward additional scroll type.
        * platform/ScrollAnimator.h:
        (WebCore):
        * platform/ScrollAnimatorNone.cpp:
        (WebCore::ScrollAnimatorNone::ScrollAnimatorNone): Handle additional scroll type.
        (WebCore::ScrollAnimatorNone::fireUpAnAnimation): 
        (WebCore):
        (WebCore::ScrollAnimatorNone::scroll):
        * platform/ScrollAnimatorNone.h:
        (ScrollAnimatorNone):
        * platform/ScrollTypes.h: Added an additional scroll type.
        * platform/ScrollableArea.cpp:
        (WebCore::ScrollableArea::scroll):

2012-03-09  Erik Arvidsson  <arv@chromium.org>

        [V8] Fix a fixme in v8 bindings
        https://bugs.webkit.org/show_bug.cgi?id=80734

        Reviewed by Kentaro Hara.

        No new tests. Covered by existing tests.

        * bindings/v8/V8Binding.cpp:
        (WebCore::toInt32):
        (WebCore::toUInt32):

2012-03-09  Lauro Neto  <lauro.neto@openbossa.org>

        [Qt] WebCore/Target.pri contains obsolete FileStreamProxy.h reference.
        https://bugs.webkit.org/show_bug.cgi?id=80730

        Reviewed by Tor Arne Vestbø.

        Build fix. Target.pri was still including old FileStreamProxy.h.

        * Target.pri:

2012-03-05 Cem Kocagil  <cem.kocagil@gmail.com>

        Pan scroll icon is painted at incorrect coordinates in frames
        https://bugs.webkit.org/show_bug.cgi?id=79378

        Convert client coordinates to parent ScrollView coordinates

        Reviewed by Antonio Gomes

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

2012-03-09  Joshua Bell  <jsbell@chromium.org>

        IndexedDB: Handle LevelDB database corruption
        https://bugs.webkit.org/show_bug.cgi?id=79413

        Add LevelDBDatabase::destroy() method so that clients can retry if open() fails.

        Reviewed by Tony Chang.

        Test: webkit_unit_tests --gtest_filter='LevelDBDatabaseTest.CorruptionTest'

        * Modules/indexeddb/IDBLevelDBBackingStore.cpp: Implement open/destroy/open strategy.
        (WebCore::IDBLevelDBBackingStore::open):
        * platform/leveldb/LevelDBDatabase.cpp:
        (WebCore::LevelDBDatabase::destroy):
        (WebCore):
        * platform/leveldb/LevelDBDatabase.h:
        (LevelDBDatabase):

2012-03-09  Jessie Berlin  <jberlin@apple.com>

        Fix one of the Windows build warnings.

        * html/track/TextTrackCueList.idl:
        Add a newline to the end of the file.

2012-03-09  Tyler Abbott  <tabbott@rim.com>

        BlackBerry PlayBook doesn't sniff mime types
        https://bugs.webkit.org/show_bug.cgi?id=73869

        Reviewed by Rob Buis.

        Hook up MIMESniffing for BlackBerry. Override Content-Types will
        not be overriden. File extensions will be trusted when content
        is loaded from disk.

        No tests, BlackBerry tests are not yet present in webkit.org codebase.

        * PlatformBlackBerry.cmake:
        * platform/network/blackberry/NetworkJob.cpp:
        (WebCore::NetworkJob::NetworkJob):
        (WebCore::NetworkJob::initialize):
        (WebCore::NetworkJob::handleNotifyDataReceived):
        (WebCore::NetworkJob::sendResponseIfNeeded):
        * platform/network/blackberry/NetworkJob.h:
        (NetworkJob):

2012-03-09  Enrica Casucci  <enrica@apple.com>

        Move WebNSURLExtras code down to WebCore.
        https://bugs.webkit.org/show_bug.cgi?id=80611

        Reviewed by Alexey Proskuryakov.

        * WebCore.exp.in: Added new exported functions.
        * WebCore.xcodeproj/project.pbxproj: Added WebCoreNSURLExtras.*
        * platform/FileSystem.h: Added setMetadataURL.
        * platform/mac/FileSystemMac.mm:
        (WebCore::setMetaData): Added.
        (WebCore::setMetadataURL): Added.
        * platform/mac/WebCoreNSStringExtras.h:
        * platform/mac/WebCoreNSStringExtras.mm:
        (hasCaseInsensitivePrefix): Added.
        * platform/mac/WebCoreNSURLExtras.h: Added.
        * platform/mac/WebCoreNSURLExtras.mm: Added.
        * platform/mac/WebCoreObjCExtras.h:
        * platform/mac/WebCoreSystemInterface.h:
        * platform/mac/WebCoreSystemInterface.mm:

2012-03-09  Tim Dresser  <tdresser@chromium.org>

        [chromium] Increase size of Combo Box Options for touch and high DPI devices
        https://bugs.webkit.org/show_bug.cgi?id=80027

        Reviewed by Darin Fisher.

        Scale Combo box popups by defaultDeviceScaleFactor, and add padding to
        <option> elements when touch is enabled.

        Manually tested with --default-device-scale-factor=1,2 and unset.
        Each of these were tested with RuntimeEnabledFeatures::touchEnabled
        set to true and false.

        * platform/chromium/PopupListBox.cpp:
        (WebCore::PopupListBox::paint):
        (WebCore::PopupListBox::paintRow):
        (WebCore::PopupListBox::getRowHeight):
        * platform/chromium/PopupListBox.h:
        (PopupContainerSettings):
        * platform/chromium/PopupMenuChromium.cpp:
        (WebCore):
        (WebCore::PopupMenuChromium::show):
        * platform/chromium/PopupMenuChromium.h:
        (WebCore::PopupMenuChromium::optionPaddingForTouch):
        (WebCore::PopupMenuChromium::setOptionPaddingForTouch):
        (PopupMenuChromium):
        * rendering/RenderMenuList.cpp:
        (WebCore::RenderMenuList::showPopup):

2012-03-09  Stephen White  <senorblanco@chromium.org>

        Improve ContainerNode collectNode() performance by reserving vector
        capacity up front.
        https://bugs.webkit.org/show_bug.cgi?id=80706

        Reviewed by Ryosuke Niwa.

        Covered by existing tests.  Performance will be evaluated based on
        Chromium's page_cycler_bloat-http, page_cycler_intl1, and
        dromaeo_domcore suites.

        * dom/ContainerNode.cpp:
        (WebCore::collectNodes):

2012-03-09  Dan Bernstein  <mitz@apple.com>

        <rdar://problem/11018851> Crash in DisplayRefreshMonitor::notifyClients()
        https://bugs.webkit.org/show_bug.cgi?id=80740

        Reviewed by Sam Weinig.

        No test, since this race condition cannot be reproduced reliably.

        * platform/graphics/mac/DisplayRefreshMonitorMac.cpp:
        (WebCore::DisplayRefreshMonitor::~DisplayRefreshMonitor): Changed to stop the display link
        first, then cancel any outstanding calls to refreshDisplayOnMainThread(). When doing things
        the other way around, the display link can fire after outstanding calls have been canceled,
        and enqueue new calls on the main thread, which will be dispatched after monitor destruction.

2012-03-09  Pratik Solanki  <psolanki@apple.com>

        Assertion failure in ResourceHandle::setDefersLoading(): d->m_defersLoading != defers
        https://bugs.webkit.org/show_bug.cgi?id=80543

        Reviewed by Geoffrey Garen.

        Reset m_defersLoading flag to the value from Page::defersCallbacks() in
        ResourceLoader::init(). This is because the resource could have been in the pending requests
        queue in ResourceLoadScheduler and would have missed out on state changes to this flag
        happening from DocumentLoader::setDefersCallbacks().

        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::init):

2012-03-09  Emil A Eklund  <eae@chromium.org>

        Add roundedPoint to HitTestResult and change platform code to use it
        https://bugs.webkit.org/show_bug.cgi?id=80715

        Reviewed by James Robinson.

        Change ports to use roundedPoint to avoid exposing subpixel types to
        platform code.

        No new tests.

        * rendering/HitTestResult.h:
        (WebCore::HitTestResult::roundedPoint):

2012-03-09  Kentaro Hara  <haraken@chromium.org>

        [V8][Performance] Inline hot methods in V8Bindings.h
        https://bugs.webkit.org/show_bug.cgi?id=80685

        Reviewed by Adam Barth.

        This patch slightly improves DOM binding performance by inlining hot
        methods in V8Binding.cpp, e.g. isUndefinedOrNull(), v8StringOrNull(), v8Boolean().
        For example, this patch improves div.nodeName by 5.0%, and div.nodeValue by 4.1%.

        Performance tests: https://bugs.webkit.org/attachment.cgi?id=131006

        The performance test results in my Mac environment are as follows:

        Chromium/V8 without this patch:
        div.nodeName : 3417.4 ms
        div.nodeValue : 2069.6 ms

        Chromium/V8 with this patch:
        div.nodeName : 3245.6 ms
        div.nodeValue : 1983.1 ms

        No tests. No change in behavior.

        * bindings/v8/V8Binding.cpp:
        * bindings/v8/V8Binding.h:
        (WebCore::toWebCoreString):
        (WebCore::isUndefinedOrNull):
        (WebCore::isHostObject):
        (WebCore::v8Boolean):
        (WebCore::toWebCoreStringWithNullCheck):
        (WebCore::toAtomicWebCoreStringWithNullCheck):
        (WebCore::toWebCoreStringWithNullOrUndefinedCheck):
        (WebCore::v8UndetectableString):
        (WebCore::v8StringOrNull):
        (WebCore::v8StringOrUndefined):
        (WebCore::v8StringOrFalse):
        (WebCore::toWebCoreDate):
        (WebCore::v8DateOrNull):

2012-03-09  W. James MacLean  <wjmaclean@chromium.org>

        [chromium] Implement scroll physics architecture for impl/main thread
        https://bugs.webkit.org/show_bug.cgi?id=79827

        Reviewed by James Robinson.

        Unittests added, plus follow-on patch from rjkroege will add layout tests.

        PlatformGestureCurve is a framework to separate the physical simulation from for gesture
        animation from control concerns. This allows the physics to be reused in alternate places.
        At present, the framework will be applied in ScrollAnimatorNone and the Chrome Compositor.

        * WebCore.gypi:
        * platform/ActivePlatformGestureAnimation.cpp: Added.
        (WebCore):
        (WebCore::ActivePlatformGestureAnimation::create):
        (WebCore::ActivePlatformGestureAnimation::~ActivePlatformGestureAnimation):
        (WebCore::ActivePlatformGestureAnimation::ActivePlatformGestureAnimation):
        (WebCore::ActivePlatformGestureAnimation::animate):
        * platform/ActivePlatformGestureAnimation.h: Added.
        (WebCore):
        (ActivePlatformGestureAnimation):
        * platform/PlatformGestureCurve.h: Added.
        (WebCore):
        (PlatformGestureCurve):
        (WebCore::PlatformGestureCurve::~PlatformGestureCurve):
        * platform/PlatformGestureCurveTarget.h: Added.
        (WebCore):
        (PlatformGestureCurveTarget):
        (WebCore::PlatformGestureCurveTarget::~PlatformGestureCurveTarget):
        * platform/TouchFlingPlatformGestureCurve.cpp: Added.
        (WebCore):
        (WebCore::TouchFlingPlatformGestureCurve::create):
        (WebCore::TouchFlingPlatformGestureCurve::TouchFlingPlatformGestureCurve):
        (WebCore::TouchFlingPlatformGestureCurve::~TouchFlingPlatformGestureCurve):
        (WebCore::TouchFlingPlatformGestureCurve::apply):
        * platform/TouchFlingPlatformGestureCurve.h: Added.
        (WebCore):
        (TouchFlingPlatformGestureCurve):
        * platform/WheelFlingPlatformGestureCurve.cpp: Added.
        (WebCore):
        (WebCore::WheelFlingPlatformGestureCurve::create):
        (WebCore::WheelFlingPlatformGestureCurve::WheelFlingPlatformGestureCurve):
        (WebCore::WheelFlingPlatformGestureCurve::~WheelFlingPlatformGestureCurve):
        (WebCore::WheelFlingPlatformGestureCurve::apply):
        * platform/WheelFlingPlatformGestureCurve.h: Added.
        (WebCore):
        (WheelFlingPlatformGestureCurve):
        * platform/graphics/chromium/cc/CCActiveGestureAnimation.cpp: Added.
        (WebCore):
        (WebCore::CCActiveGestureAnimation::create):
        (WebCore::CCActiveGestureAnimation::CCActiveGestureAnimation):
        (WebCore::CCActiveGestureAnimation::~CCActiveGestureAnimation):
        (WebCore::CCActiveGestureAnimation::animate):
        * platform/graphics/chromium/cc/CCActiveGestureAnimation.h: Added.
        (WebCore):
        (CCActiveGestureAnimation):
        * platform/graphics/chromium/cc/CCGestureCurve.h: Added.
        (WebCore):
        (CCGestureCurveTarget):
        (WebCore::CCGestureCurveTarget::~CCGestureCurveTarget):
        (CCGestureCurve):
        (WebCore::CCGestureCurve::~CCGestureCurve):

2012-03-09  Alexis Menard  <alexis.menard@openbossa.org>

        Implement selectedOptions attribute of <select>.
        https://bugs.webkit.org/show_bug.cgi?id=80631

        Reviewed by Benjamin Poulain.

        Add a new collection as a member of HTMLSelectElement which is
        used to store the selected elements. Extend HTMLCollection to
        support the new collection type needed by this feature.

        Reference : http://www.whatwg.org/specs/web-apps/current-work/multipage/the-button-element.html#dom-select-selectedoptions

        Test: fast/dom/select-selectedOptions.html

        * html/CollectionType.h:
        * html/HTMLCollection.cpp:
        (WebCore::HTMLCollection::shouldIncludeChildren):
        (WebCore::HTMLCollection::isAcceptableElement):
        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::selectedOptions):
        (WebCore):
        * html/HTMLSelectElement.h:
        (HTMLSelectElement):
        * html/HTMLSelectElement.idl:

2012-03-09  Tien-Ren Chen  <trchen@chromium.org>

        [chromium] ScrollbarLayerChromium/CCScrollbarLayerImpl for CC-side scrollbar painting
        https://bugs.webkit.org/show_bug.cgi?id=78872

        Reviewed by James Robinson.

        New test ScrollbarLayerChromiumTest.resolveScrollLayerPointer

        * WebCore.gypi:
        * page/scrolling/chromium/ScrollingCoordinatorChromium.cpp:
        (WebCore::scrollLayerForFrameView):
        (WebCore::scrollbarLayerDidChange):
        (WebCore):
        (WebCore::ScrollingCoordinator::frameViewHorizontalScrollbarLayerDidChange):
        (WebCore::ScrollingCoordinator::frameViewVerticalScrollbarLayerDidChange):
        * platform/ScrollableArea.cpp:
        (WebCore::ScrollableArea::invalidateScrollbar):
        * platform/graphics/chromium/GraphicsLayerChromium.h:
        (WebCore::GraphicsLayerChromium::hasContentsLayer):
        * platform/graphics/chromium/LayerChromium.h:
        (WebCore):
        (WebCore::LayerChromium::toScrollbarLayerChromium):
        (LayerChromium):
        * platform/graphics/chromium/ScrollbarLayerChromium.cpp: Added.
        (WebCore):
        (WebCore::ScrollbarLayerChromium::createCCLayerImpl):
        (WebCore::ScrollbarLayerChromium::create):
        (WebCore::ScrollbarLayerChromium::ScrollbarLayerChromium):
        (WebCore::ScrollbarLayerChromium::pushPropertiesTo):
        * platform/graphics/chromium/ScrollbarLayerChromium.h: Added.
        (WebCore):
        (ScrollbarLayerChromium):
        (WebCore::ScrollbarLayerChromium::scrollLayerId):
        (WebCore::ScrollbarLayerChromium::toScrollbarLayerChromium):
        * platform/graphics/chromium/TreeSynchronizer.cpp:
        (WebCore::TreeSynchronizer::synchronizeTrees):
        (WebCore::TreeSynchronizer::collectExistingCCLayerImplRecursive):
        (WebCore::TreeSynchronizer::reuseOrCreateCCLayerImpl):
        (WebCore::TreeSynchronizer::synchronizeTreeRecursive):
        (WebCore::TreeSynchronizer::updateScrollbarLayerPointersRecursive):
        (WebCore):
        * platform/graphics/chromium/TreeSynchronizer.h:
        (TreeSynchronizer):
        * platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:
        (WebCore::CCLayerTreeHostImpl::updateMaxScrollPosition):
        * platform/graphics/chromium/cc/CCScrollbarLayerImpl.cpp: Added.
        (WebCore):
        (WebCore::CCScrollbarLayerImpl::create):
        (WebCore::CCScrollbarLayerImpl::CCScrollbarLayerImpl):
        (WebCore::CCScrollbarLayerImpl::willDraw):
        (WebCore::CCScrollbarLayerImpl::appendQuads):
        (WebCore::CCScrollbarLayerImpl::didDraw):
        (WebCore::CCScrollbarLayerImpl::paint):
        (WebCore::CCScrollbarLayerImpl::CCScrollbar::x):
        (WebCore::CCScrollbarLayerImpl::CCScrollbar::y):
        (WebCore::CCScrollbarLayerImpl::CCScrollbar::width):
        (WebCore::CCScrollbarLayerImpl::CCScrollbar::height):
        (WebCore::CCScrollbarLayerImpl::CCScrollbar::size):
        (WebCore::CCScrollbarLayerImpl::CCScrollbar::location):
        (WebCore::CCScrollbarLayerImpl::CCScrollbar::parent):
        (WebCore::CCScrollbarLayerImpl::CCScrollbar::root):
        (WebCore::CCScrollbarLayerImpl::CCScrollbar::setFrameRect):
        (WebCore::CCScrollbarLayerImpl::CCScrollbar::frameRect):
        (WebCore::CCScrollbarLayerImpl::CCScrollbar::invalidate):
        (WebCore::CCScrollbarLayerImpl::CCScrollbar::invalidateRect):
        (WebCore::CCScrollbarLayerImpl::CCScrollbar::scrollbarOverlayStyle):
        (WebCore::CCScrollbarLayerImpl::CCScrollbar::getTickmarks):
        (WebCore::CCScrollbarLayerImpl::CCScrollbar::isScrollableAreaActive):
        (WebCore::CCScrollbarLayerImpl::CCScrollbar::isScrollViewScrollbar):
        (WebCore::CCScrollbarLayerImpl::CCScrollbar::convertFromContainingWindow):
        (WebCore::CCScrollbarLayerImpl::CCScrollbar::isCustomScrollbar):
        (WebCore::CCScrollbarLayerImpl::CCScrollbar::orientation):
        (WebCore::CCScrollbarLayerImpl::CCScrollbar::value):
        (WebCore::CCScrollbarLayerImpl::CCScrollbar::currentPos):
        (WebCore::CCScrollbarLayerImpl::CCScrollbar::visibleSize):
        (WebCore::CCScrollbarLayerImpl::CCScrollbar::totalSize):
        (WebCore::CCScrollbarLayerImpl::CCScrollbar::maximum):
        (WebCore::CCScrollbarLayerImpl::CCScrollbar::controlSize):
        (WebCore::CCScrollbarLayerImpl::CCScrollbar::lineStep):
        (WebCore::CCScrollbarLayerImpl::CCScrollbar::pageStep):
        (WebCore::CCScrollbarLayerImpl::CCScrollbar::pressedPart):
        (WebCore::CCScrollbarLayerImpl::CCScrollbar::hoveredPart):
        (WebCore::CCScrollbarLayerImpl::CCScrollbar::styleChanged):
        (WebCore::CCScrollbarLayerImpl::CCScrollbar::enabled):
        (WebCore::CCScrollbarLayerImpl::CCScrollbar::setEnabled):
        * platform/graphics/chromium/cc/CCScrollbarLayerImpl.h: Added.
        (WebCore):
        (CCScrollbarLayerImpl):
        (WebCore::CCScrollbarLayerImpl::setScrollbarOverlayStyle):
        (WebCore::CCScrollbarLayerImpl::setTickmarks):
        (WebCore::CCScrollbarLayerImpl::setIsScrollableAreaActive):
        (WebCore::CCScrollbarLayerImpl::setIsScrollViewScrollbar):
        (WebCore::CCScrollbarLayerImpl::setOrientation):
        (WebCore::CCScrollbarLayerImpl::setControlSize):
        (WebCore::CCScrollbarLayerImpl::setPressedPart):
        (WebCore::CCScrollbarLayerImpl::setHoveredPart):
        (WebCore::CCScrollbarLayerImpl::setEnabled):
        (WebCore::CCScrollbarLayerImpl::scrollLayer):
        (WebCore::CCScrollbarLayerImpl::setScrollLayer):
        (CCScrollbar):
        (WebCore::CCScrollbarLayerImpl::CCScrollbar::CCScrollbar):

2012-03-09  Julien Chaffraix  <jchaffraix@webkit.org>

        Split the extra logical height distribution logic out of RenderTableSection::layoutRows
        https://bugs.webkit.org/show_bug.cgi?id=80671

        Reviewed by Adrienne Walker.

        Refactoring only, no change in behavior expected.

        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::layoutRows):
        Split the logic from here...

        (WebCore::RenderTableSection::distributeExtraLogicalHeightToPercentRows):
        (WebCore::RenderTableSection::distributeExtraLogicalHeightToAutoRows):
        (WebCore::RenderTableSection::distributeRemainingExtraLogicalHeight):
        (WebCore::RenderTableSection::distributeExtraLogicalHeightToRows):
        ... to those functions. Cleaned up the variable naming while at it and
        made them follow the same signature as this may be useful to fix another
        bug I have.

        * rendering/RenderTableSection.h:
        (RenderTableSection):
        Added the previous 4 new functions.

2012-03-09  Rob Buis  <rbuis@rim.com>

        Remove unused file FrameBlackBerry.cpp
        https://bugs.webkit.org/show_bug.cgi?id=80731

        Reviewed by Antonio Gomes.

        This is not needed anymore since there is an implementation elsewhere.

        * PlatformBlackBerry.cmake:
        * page/blackberry/FrameBlackBerry.cpp: Removed.

2012-03-09  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r110309.
        http://trac.webkit.org/changeset/110309
        https://bugs.webkit.org/show_bug.cgi?id=80732

        Seems to have caused a number of SVG crashes (thorton will
        investigate further) (Requested by abarth|gardener on
        #webkit).

        * page/FrameView.cpp:
        (WebCore::FrameView::FrameView):
        (WebCore::FrameView::reset):
        (WebCore::FrameView::repaintContentRectangle):
        (WebCore::FrameView::deferredRepaintTimerFired):
        * page/FrameView.h:
        (FrameView):
        * rendering/RenderView.cpp:
        (WebCore::RenderView::shouldRepaint):
        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::drawSVGToImageBuffer):
        (WebCore::SVGImage::draw):
        * svg/graphics/SVGImage.h:
        * svg/graphics/SVGImageCache.cpp:
        (WebCore::SVGImageCache::imageContentChanged):
        (WebCore::SVGImageCache::redrawTimerFired):
        * svg/graphics/SVGImageCache.h:
        (SVGImageCache):

2012-03-09  Ken Buchanan  <kenrb@chromium.org>

        Crash due to inserting letter into div with first-letter
        https://bugs.webkit.org/show_bug.cgi?id=78534

        Reviewed by David Hyatt.

        This fixes an issue in RenderTextFragment with setTextInternal
        getting called with different intents. While most calls to it
        are intended to change the underlying DOM node string, it can
        also be called as a result of styleDidChange just for transforms
        on the substring text fragment. This adds a mechanism for internal
        callers to specify if the internal text is being updated without
        a DOM node text change.

        * rendering/RenderTextFragment.cpp:
        (WebCore::RenderTextFragment::styleDidChange)
        (WebCore::RenderTextFragment::setTextInternal)
        * rendering/RenderTextFragment.h:
        (WebCore::RenderTextFragment)

2012-03-09  Chris Rogers  <crogers@google.com>

        Fix uninitialized variable in DynamicsCompressor
        https://bugs.webkit.org/show_bug.cgi?id=80724

        Reviewed by James Robinson.

        * platform/audio/DynamicsCompressor.cpp:
        (WebCore::DynamicsCompressor::DynamicsCompressor):

2012-03-09  Erik Arvidsson  <arv@chromium.org>

        [V8] Undo text position adjustment for attribute event handlers
        https://bugs.webkit.org/show_bug.cgi?id=80725

        Reviewed by Adam Barth.

        No new tests. Needs rebaseline.

        * bindings/v8/V8LazyEventListener.cpp:
        (WebCore::V8LazyEventListener::prepareListenerObject):

2012-03-09  Tom Sepez  <tsepez@chromium.org>

        Hold cached images with a CachedResourceHandle rather than a raw pointer for CSSCrossfadeValue
        https://bugs.webkit.org/show_bug.cgi?id=80186

        Reviewed by Simon Fraser.

        Test: http/tests/css/cross-fade-reload.html

        * css/CSSCrossfadeValue.h:
        (CSSCrossfadeValue):

2012-03-09  Abhishek Arya  <inferno@chromium.org>

        Crash when splitting an anonymous block in multi-column layout.
        https://bugs.webkit.org/show_bug.cgi?id=80432

        Reviewed by David Hyatt.

        Calculating currChild->nextSibling() is risky after destroying :after content
        because it can blow away currChild if it is a left over empty anonymous block.
        We need to calculate next sibling upfront, using the same trick, we do in
        RenderBlock::addChildIgnoringAnonymousColumnBlock to reset beforeChild (check
        out the line before splitFlow call).

        Test: fast/multicol/anonymous-block-split-crash.html

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

2012-03-09  Abhishek Arya  <inferno@chromium.org>

        Crash due to accessing removed parent lineboxes when clearing selection.
        https://bugs.webkit.org/show_bug.cgi?id=79264

        Reviewed by Dave Hyatt.

        Test: editing/selection/first-letter-selection-crash.html

        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::setSelectionState):
        1. No need of checking if we are being set to same selection state.
        Now tested by setSelectionStateIfNeeded. Rename 's' with 'state' and
        'cb' with 'containingBlock'.
        * rendering/RenderListMarker.cpp:
        (WebCore::RenderListMarker::setSelectionState):
        1. Add check to canUpdateSelectionOnRootLineBoxes to make sure our
        root line boxes are still valid before setting them.
        2. No need of calling setSelectionState on containing block since our base
        class call to RenderBox::setSelectionState covers it. Added a comment to indicate that.
        3. Use m_inlineBoxWrapper variable directly to simplify the ifs.
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::canUpdateSelectionOnRootLineBoxes):
        (WebCore): helper function to tell if we can update selection information
        on our root line boxes. This returns false if our containing block is pending layout.
        * rendering/RenderObject.h:
        (RenderObject):
        (WebCore::RenderObject::setSelectionStateIfNeeded):
        (WebCore): helper to set selection state only if it is different from our
        current selection state.
        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::setSelectionState):
        1. Rename 's' to 'state', 'line' to 'root' and use m_inlineBoxWrapper directly
        to simplify ifs.
        2. Add check to canUpdateSelectionOnRootLineBoxes to make sure our
        root line boxes are still valid before setting them.
        * rendering/RenderText.cpp:
        (WebCore::RenderText::setSelectionState):
        1. Add check to canUpdateSelectionOnRootLineBoxes to make sure our
        root line boxes are still valid before setting them.
        2. Rename 'cb' to 'containingBlock', 'line' to 'root', move InlineTextBox
        declaration to local.
        * rendering/RenderView.cpp:
        (WebCore::RenderView::setSelection): Replace all calls to setSelectionState
        with setSelectionStateIfNeeded.
        * rendering/RenderWidget.cpp:
        (WebCore::RenderWidget::setSelectionState):
        1. No need of checking if we are being set to same selection state.
        Now tested by setSelectionStateIfNeeded.

2012-03-09  Levi Weintraub  <leviw@chromium.org>

        Move TransformationMatrix and TransformState to LayoutUnits.
        https://bugs.webkit.org/show_bug.cgi?id=80632

        Reviewed by Simon Fraser.

        When we move layout to sub-pixel precision, we want to preserve that precision through
        transformations. This change readies TransformState and TransformationMatrix to make
        use of this additional precision in accumulating transforms, and in returning rects that
        preserve it.

        No new tests. No change in behavior.

        * platform/graphics/transforms/TransformState.cpp:
        (WebCore::TransformState::move): Changed to pass along LayoutUnits to the contained
        TransformationMatrix. The values of the LayoutUnits will be implicitly converted to
        floats to be applied.
        * platform/graphics/transforms/TransformState.h:
        (WebCore::TransformState::move): Ditto.
        (TransformState):
        * platform/graphics/transforms/TransformationMatrix.cpp:
        (WebCore::clampEdgeValue): Limiting edges to the maximum LayoutUnit value to prevent
        overflow..
        (WebCore::TransformationMatrix::clampedBoundsOfProjectedQuad): Same as above, but also
        returning a LayoutRect which preserves additional precision than the previous IntRect.
        (WebCore::TransformationMatrix::mapRect): Adding a version of this method that operates
        specifically on FractionalLayoutRects.
        (WebCore):
        * platform/graphics/transforms/TransformationMatrix.h:
        (WebCore):
        (TransformationMatrix):
        * rendering/LayoutTypes.h:
        (WebCore::clampToLayoutUnit):
        (WebCore):

2012-03-09  Ryosuke Niwa  <rniwa@webkit.org>

        Remove a bogus assertion. This condition is no longer true for non-document tree scopes.

        * dom/TreeScope.cpp:
        (WebCore::TreeScope::activeElement):

2012-03-09  Ryosuke Niwa  <rniwa@webkit.org>

        Cleanup incDOMTreeVersion callers
        https://bugs.webkit.org/show_bug.cgi?id=80452

        Reviewed by Andreas Kling.

        Unify various calls to incDOMTreeVersion and namely remove the call inside dispatchSubtreeModifiedEvent.
        There should be no behavioral change and therefore there is no new test.

        * dom/CharacterData.cpp:
        (WebCore::CharacterData::parserAppendData):
        (WebCore::CharacterData::setDataAndUpdate):
        * dom/ContainerNode.cpp:
        (WebCore::willRemoveChild):
        (WebCore::willRemoveChildren):
        (WebCore::ContainerNode::removeChild):
        (WebCore::ContainerNode::removeChildren):
        (WebCore::ContainerNode::childrenChanged):
        (WebCore::notifyChildInserted):
        * dom/Element.cpp:
        (WebCore::Element::attributeChanged):
        (WebCore::Element::parserSetAttributes):
        (WebCore::Element::willModifyAttribute):
        * dom/Node.cpp:
        (WebCore::Node::dispatchSubtreeModifiedEvent):
        * html/HTMLOutputElement.cpp:
        (WebCore::HTMLOutputElement::childrenChanged):
        * html/HTMLScriptElement.cpp:
        (WebCore::HTMLScriptElement::childrenChanged):
        * html/HTMLStyleElement.cpp:
        (WebCore::HTMLStyleElement::childrenChanged):
        * html/HTMLTextAreaElement.cpp:
        (WebCore::HTMLTextAreaElement::childrenChanged):
        * html/HTMLTitleElement.cpp:
        (WebCore::HTMLTitleElement::childrenChanged):
        * svg/SVGScriptElement.cpp:
        (WebCore::SVGScriptElement::childrenChanged):
        * svg/SVGStyleElement.cpp:
        (WebCore::SVGStyleElement::childrenChanged):

2012-03-09  Patrick Gansterer  <paroga@webkit.org>

        Build fix for !ENABLE(FILTERS) after r110285.

        * rendering/svg/SVGRenderingContext.h:
        (WebCore::SVGRenderingContext::SVGRenderingContext):

2012-03-09  Dana Jansens  <danakj@chromium.org>

        [chromium] Use opaque paints in CCOcclusionTracker
        https://bugs.webkit.org/show_bug.cgi?id=80173

        Reviewed by Adrienne Walker.

        Use tracked opaque paints in the tiles when tracking occlusion in
        CCOcclusionTracker. Moves the Tile::m_opaqueRect up to the super-
        class in CCLayerTilingData rather than having it declared in both
        TiledLayerChromium and CCTiledLayerImpl. This lets the CCLayerTilingData
        class compute the opaque region for its tiles, sharing code between the
        two tiled layer implementations.

        Use of this feature is guarded behind a runtime flag and turned off for
        paint culling. We will enable it in the future once we're comfortable
        with the paint culling.

        Unit test: CCOcclusionTrackerTest.opaqueContentsRegionEmpty
                   CCOcclusionTrackerTest.opaqueContentsRegionNonEmpty
                   TiledLayerChromiumTest.opaqueContentsRegion

        All existing CCOcclusionTrackerTest.* duplicated with opaque painted
        rects.

        * platform/graphics/chromium/LayerChromium.h:
        (WebCore::LayerChromium::opaqueContentsRegion):
        (LayerChromium):
        * platform/graphics/chromium/TiledLayerChromium.cpp:
        (UpdatableTile):
        (WebCore::TiledLayerChromium::pushPropertiesTo):
        (WebCore::TiledLayerChromium::prepareToUpdateTiles):
        (WebCore::TiledLayerChromium::addSelfToOccludedScreenSpace):
        (WebCore::TiledLayerChromium::opaqueContentsRegion):
        (WebCore):
        * platform/graphics/chromium/TiledLayerChromium.h:
        * platform/graphics/chromium/cc/CCLayerImpl.h:
        (WebCore::CCLayerImpl::opaqueContentsRegion):
        (CCLayerImpl):
        * platform/graphics/chromium/cc/CCLayerTilingData.cpp:
        (WebCore::CCLayerTilingData::opaqueRegionInLayerRect):
        (WebCore):
        * platform/graphics/chromium/cc/CCLayerTilingData.h:
        (WebCore):
        (Tile):
        (WebCore::CCLayerTilingData::Tile::opaqueRect):
        (WebCore::CCLayerTilingData::Tile::setOpaqueRect):
        (CCLayerTilingData):
        * platform/graphics/chromium/cc/CCOcclusionTracker.cpp:
        (WebCore::::CCOcclusionTrackerBase):
        (WebCore::computeOcclusionBehindLayer):
        (WebCore::::markOccludedBehindLayer):
        * platform/graphics/chromium/cc/CCOcclusionTracker.h:
        (CCOcclusionTrackerBase):
        (WebCore::CCOcclusionTrackerBase::setUsePaintTracking):
        * platform/graphics/chromium/cc/CCTiledLayerImpl.cpp:
        (DrawableTile):
        (WebCore::CCTiledLayerImpl::opaqueContentsRegion):
        (WebCore):
        * platform/graphics/chromium/cc/CCTiledLayerImpl.h:
        (CCTiledLayerImpl):

2012-03-09  Antti Koivisto  <antti@apple.com>

        Presentation attribute cache
        https://bugs.webkit.org/show_bug.cgi?id=80707
        
        Reviewed by Andreas Kling.

        It is common for the same presentation attribute values repeat. We should introduce a cache that uses 
        presentation attribute names and values as key. This will help to avoid repeated parsing of the 
        same attribute values, reduce memory consumption and speed up the style resolve.
        
        This patch introduces a simple and small (128 entries) global cache. In general web browsing it seems
        to give sharing rate of >75% (an average presentation attribute property set is shared between >4 elements).

        * dom/StyledElement.cpp:
        (WebCore::PresentationAttributeCacheKey::PresentationAttributeCacheKey):
        (PresentationAttributeCacheKey):
        (WebCore):
        (WebCore::operator!=):
        (PresentationAttributeCacheEntry):
        (WebCore::presentationAttributeCache):
        (WebCore::attributeNameSort):
        (WebCore::StyledElement::makePresentationAttributeCacheKey):
        (WebCore::computePresentationAttributeCacheHash):
        (WebCore::StyledElement::updateAttributeStyle):
        * dom/StyledElement.h:
        (WebCore):
        (StyledElement):

2012-03-08  Erik Arvidsson  <arv@chromium.org>

        [V8] Fix object scope for inline event attribute handlers
        https://bugs.webkit.org/show_bug.cgi?id=80329

        Reviewed by Ojan Vafai.

        We now create the funciton inside the with-statements with the current scope objects.
        This is important for a few reasons:

        - We need to use the real objects and not just lookup the JS properties because these might have been overridden.
        - We need to use the node, form and document at the time of the preparation and not at the time of calling.
        - We need to ensure that event/evt is bound closer than a property with the same name in the object environment
          created by the with-statements.

        Tests: fast/dom/inline-event-attributes-lookup-removed-form.html
               fast/dom/inline-event-attributes-lookup-removed.html
               fast/dom/inline-event-attributes-lookup.html

        * bindings/v8/ScriptEventListener.cpp:
        (WebCore::eventParameterName):
        (WebCore):
        (WebCore::createAttributeEventListener):
        * bindings/v8/V8LazyEventListener.cpp:
        (WebCore::V8LazyEventListener::V8LazyEventListener):
        (WebCore):
        (WebCore::toObjectWrapper):
        (WebCore::V8LazyEventListener::callListenerFunction):
        (WebCore::V8LazyEventListener::prepareListenerObject):
        * bindings/v8/V8LazyEventListener.h:
        (WebCore):
        (WebCore::V8LazyEventListener::create):
        (V8LazyEventListener):

2012-03-09  Stephen Chenney  <schenney@chromium.org>

        Crash in WebCore::SVGUseElement::instanceForShadowTreeElement
        https://bugs.webkit.org/show_bug.cgi?id=80406

        Reviewed by Nikolas Zimmermann.

        Code assumes that an object that is an SVG Element and in a shadow
        tree must be in an SVG use shadow tree, and casts the shadow host with
        a static_cast. It may be that an SVG element appears in a non-use
        shadow tree, in which case bad things happen. While it appears that
        the current code prevents such a situation from arising (checks are
        made within the shadow tree code to prevent it) there are also
        indications that the situation may change.

        No new tests. I believe that the problem here cannot currently be
        reproduced. That is, other code prevents SVG elements from appearing
        in non-svg shadow trees.

        * dom/EventDispatcher.cpp:
        (WebCore::eventTargetRespectingSVGTargetRules):
        * svg/SVGStyledElement.cpp:
        (WebCore::SVGStyledElement::title):

2012-03-09  Jon Lee  <jonlee@apple.com>

        Add support for ENABLE(LEGACY_NOTIFICATIONS)
        https://bugs.webkit.org/show_bug.cgi?id=80497

        Reviewed by Adam Barth.

        Prep for b80472: Update API for Web Notifications
        * Configurations/FeatureDefines.xcconfig:
        * GNUmakefile.am:

2012-03-09  Kaustubh Atrawalkar  <kaustubh@motorola.com>

        ShadowRoot should implement activeElement.
        https://bugs.webkit.org/show_bug.cgi?id=79886

        Reviewed by Ryosuke Niwa.

        Implement the activeElement attribute for ShadowRoot to return the
        currently focused element in the shadow DOM subtree.

        Test: fast/dom/shadow/shadow-root-activeElement.html

        * dom/ShadowRoot.cpp:
        (WebCore::ShadowRoot::activeElement):
        (WebCore):
        * dom/ShadowRoot.h:
        (ShadowRoot):
        * dom/ShadowRoot.idl:
        * dom/TreeScope.cpp:
        (WebCore::TreeScope::adoptIfNeeded):
        (WebCore):
        (WebCore::focusedFrameOwnerElement):
        (WebCore::TreeScope::activeElement):
        * dom/TreeScope.h:
        (TreeScope):
        * html/HTMLDocument.cpp:
        (WebCore):
        (WebCore::HTMLDocument::activeElement):

2012-03-09  Tim Horton  <timothy_horton@apple.com>

        Infinite repaint loop with SVGImageCache and deferred repaint timers
        https://bugs.webkit.org/show_bug.cgi?id=78315
        <rdar://problem/10651634>

        Reviewed by Nikolas Zimmermann.

        Only defer image redraw on a timer if we're in layout. This breaks
        the repaint loop while still preventing us from drawing inside layout.

        Completely disable repaint during relayout inside SVGImage::drawSVGToImageBuffer,
        preventing deferred repaint timers from being started during that process.

        No new tests, as the problem only occurs in a nonstandard configuration.

        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::draw):
        (WebCore::SVGImage::frameView):
        (WebCore):
        * svg/graphics/SVGImage.h:
        (WebCore):
        * svg/graphics/SVGImageCache.cpp:
        (WebCore::SVGImageCache::imageContentChanged):
        (WebCore::SVGImageCache::redraw):
        (WebCore::SVGImageCache::redrawTimerFired):
        (WebCore):
        * svg/graphics/SVGImageCache.h:
        (SVGImageCache):

2012-03-09  Victor Carbune  <vcarbune@adobe.com>

        The method TextTrackCue::getCueAsHTML() should return different
        fragments on different calls.

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

        Reviewed by Eric Carlson.

        Test: media/track/track-cue-mutable-fragment.html

        * html/track/TextTrackCue.cpp: Removed setCueHTML(), since it is sufficient
        to create apply the DOM rules only when the fragment is first requested.
        (WebCore::TextTrackCue::getCueAsHTML): Changed the method such that a
        a clone of the cached document fragment is returned.
        * html/track/TextTrackCue.h: Removed setCueHTML() as the document fragment
        of the cue should be created only within the class, from the cue text.
        (TextTrackCue):
        * html/track/WebVTTParser.cpp:
        (WebCore::WebVTTParser::createNewCue): removed usage of setCueHTML()

2012-03-09  Tim Horton  <timothy_horton@apple.com>

        Crash in SVGTextLayoutAttributesBuilder::fillCharacterDataMap
        https://bugs.webkit.org/show_bug.cgi?id=78949
        <rdar://problem/10889440>

        Reviewed by Nikolas Zimmermann.

        Invalidate the text positioning cache when the children of an SVGAElement change,
        so that we regenerate the list the next time it's needed instead of using stale values.

        Test: svg/text/text-positioning-remove-child-crash.svg

        * rendering/svg/SVGAElement.cpp:
        (WebCore::SVGAElement::childrenChanged):

2012-03-09  Ashod Nakashian  <ashodnakashian@yahoo.com>

        Bash scripts should support LF endings only
        https://bugs.webkit.org/show_bug.cgi?id=79509

        Reviewed by David Kilzer.

        * WebCore.gyp/mac/adjust_visibility.sh: Added property svn:eol-style.
        * WebCore.vcproj/build-generated-files.sh: Added property svn:executable.
        * WebCore.vcproj/migrate-scripts.sh: Added property svn:executable.
        * gyp/copy-forwarding-and-icu-headers.sh: Added property svn:eol-style.
        * gyp/copy-inspector-resources.sh: Added property svn:eol-style.
        * gyp/generate-derived-sources.sh: Added property svn:eol-style.
        * gyp/generate-webcore-export-file-generator.sh: Added property svn:eol-style.
        * gyp/run-if-exists.sh: Added property svn:eol-style.
        * gyp/streamline-inspector-source.sh: Added property svn:eol-style.
        * gyp/update-info-plist.sh: Added property svn:eol-style.

2012-03-09  Andreas Kling  <awesomekling@apple.com>

        CSSParser: Use Vector for intermediate property storage.
        <http://webkit.org/b/80653>

        Reviewed by Antti Koivisto.

        Remove the custom memory management for intermediate CSSProperties in CSSParser
        and replace it by a Vector<CSSProperty, 256>.
        This avoids heap allocations and removes a bunch of unnecessary complexity.

        Remove WTF_MAKE_FAST_ALLOCATED from CSSProperty since they are only created on
        the stack now.

        * css/CSSGrammar.y:
        * css/CSSParser.cpp:
        (WebCore::CSSParser::CSSParser):
        (WebCore::CSSParser::~CSSParser):
        (WebCore::CSSParser::parseValue):
        (WebCore::CSSParser::parseColor):
        (WebCore::CSSParser::parseDeclaration):
        (WebCore::CSSParser::addProperty):
        (WebCore::CSSParser::rollbackLastProperties):
        (WebCore::CSSParser::clearProperties):
        (WebCore::CSSParser::parse4Values):
        (WebCore::CSSParser::parseFlowThread):
        (WebCore::CSSParser::createStyleRule):
        (WebCore::CSSParser::createFontFaceRule):
        (WebCore::CSSParser::createPageRule):
        (WebCore::CSSParser::createMarginAtRule):
        (WebCore::CSSParser::startDeclarationsForMarginBox):
        (WebCore::CSSParser::endDeclarationsForMarginBox):
        (WebCore::CSSParser::deleteFontFaceOnlyValues):
        (WebCore::CSSParser::createKeyframeRule):
        * css/CSSParser.h:
        (WebCore::CSSParser::hasProperties):
        (CSSParser):
        * css/CSSProperty.h:
        * css/SVGCSSParser.cpp:
        (WebCore::CSSParser::parseSVGValue):
        * css/StylePropertySet.cpp:
        (WebCore::StylePropertySet::StylePropertySet):
        (WebCore::StylePropertySet::addParsedProperties):
        * css/StylePropertySet.h:
        (WebCore::StylePropertySet::create):
        (StylePropertySet):

2012-03-09  Nate Chapin  <japhet@chromium.org>

        CachedRawResource breaks when trying to load
        a resource with an empty response body from cache.

        Reviewed by Alexey Proskuryakov.

        Test: http/tests/cache/zero-length-xhr.html

        * loader/cache/CachedRawResource.cpp:
        (WebCore::CachedRawResource::didAddClient): Don't exit early
            if m_data is empty, we may still need to notifyFinished().

2012-03-09  Robin Cao  <robin.cao@torchmobile.com.cn>

        [BlackBerry] Upstream classes that handle layer tiling
        https://bugs.webkit.org/show_bug.cgi?id=79875

        Reviewed by Rob Buis.

        Initial upstreaming, no new tests.

        * platform/graphics/blackberry/LayerTile.cpp: Added.
        (WebCore):
        (WebCore::LayerTile::LayerTile):
        (WebCore::LayerTile::~LayerTile):
        (WebCore::LayerTile::setContents):
        (WebCore::LayerTile::setContentsToColor):
        (WebCore::LayerTile::updateContents):
        (WebCore::LayerTile::discardContents):
        (WebCore::LayerTile::setVisible):
        (WebCore::LayerTile::setTexture):
        * platform/graphics/blackberry/LayerTile.h: Added.
        (WebCore):
        (LayerTileData):
        (WebCore::LayerTileData::LayerTileData):
        (WebCore::LayerTileData::isVisible):
        (LayerTile):
        (WebCore::LayerTile::texture):
        (WebCore::LayerTile::isVisible):
        (WebCore::LayerTile::isDirty):
        (WebCore::LayerTile::hasTexture):
        (WebCore::LayerTile::setContentsDirty):
        * platform/graphics/blackberry/LayerTileIndex.h: Added.
        (WebCore):
        (TileIndex):
        (WebCore::TileIndex::TileIndex):
        (WebCore::TileIndex::~TileIndex):
        (WebCore::TileIndex::i):
        (WebCore::TileIndex::j):
        (WebCore::TileIndex::setIndex):
        (WebCore::operator==):
        (WebCore::operator!=):
        (WTF):
        * platform/graphics/blackberry/LayerTiler.cpp: Added.
        (WebCore):
        (WebCore::transformPoint):
        (WebCore::defaultTileSize):
        (WebCore::LayerTiler::LayerTiler):
        (WebCore::LayerTiler::~LayerTiler):
        (WebCore::LayerTiler::layerWebKitThreadDestroyed):
        (WebCore::LayerTiler::layerCompositingThreadDestroyed):
        (WebCore::LayerTiler::setNeedsDisplay):
        (WebCore::LayerTiler::updateTextureContentsIfNeeded):
        (WebCore::LayerTiler::shouldPerformRenderJob):
        (WebCore::LayerTiler::addTextureJob):
        (WebCore::LayerTiler::clearTextureJobs):
        (WebCore::LayerTiler::commitPendingTextureUploads):
        (WebCore::LayerTiler::layerVisibilityChanged):
        (WebCore::LayerTiler::uploadTexturesIfNeeded):
        (WebCore::LayerTiler::processTextureJob):
        (WebCore::LayerTiler::addTileJob):
        (WebCore::LayerTiler::performTileJob):
        (WebCore::LayerTiler::drawTextures):
        (WebCore::LayerTiler::drawMissingTextures):
        (WebCore::LayerTiler::drawTexturesInternal):
        (WebCore::LayerTiler::addRenderJob):
        (WebCore::LayerTiler::removeRenderJob):
        (WebCore::LayerTiler::deleteTextures):
        (WebCore::LayerTiler::pruneTextures):
        (WebCore::LayerTiler::updateTileSize):
        (WebCore::LayerTiler::disableTiling):
        (WebCore::LayerTiler::shouldPrefillTile):
        (WebCore::LayerTiler::indexOfTile):
        (WebCore::LayerTiler::originOfTile):
        (WebCore::LayerTiler::rectForTile):
        (WebCore::LayerTiler::hasDirtyTiles):
        (WebCore::LayerTiler::bindContentsTexture):
        * platform/graphics/blackberry/LayerTiler.h: Added.
        (WebCore):
        (LayerTiler):
        (WebCore::LayerTiler::create):
        (WebCore::LayerTiler::layer):
        (WebCore::LayerTiler::hasMissingTextures):
        (WebCore::LayerTiler::TextureJob::TextureJob):
        (TextureJob):
        (WebCore::LayerTiler::TextureJob::setContents):
        (WebCore::LayerTiler::TextureJob::setContentsToColor):
        (WebCore::LayerTiler::TextureJob::updateContents):
        (WebCore::LayerTiler::TextureJob::discardContents):
        (WebCore::LayerTiler::TextureJob::resizeContents):
        (WebCore::LayerTiler::TextureJob::dirtyContents):
        (WebCore::LayerTiler::TextureJob::isNull):
        (WebCore::LayerTiler::tileSize):
        (WebCore::LayerTiler::removeUpdateContentsJobs):

2012-03-09  Ian Vollick  <vollick@chromium.org>

        [chromium] Ensure we use the correct time when notifying animation started
        https://bugs.webkit.org/show_bug.cgi?id=79537

        Reviewed by James Robinson

        Tested in CCLayerTreeHostTestAddAnimation

        * platform/graphics/chromium/LayerChromium.cpp:
        (WebCore::LayerChromium::setAnimationEvent):
        * platform/graphics/chromium/LayerChromium.h:
        (LayerChromium):
        * platform/graphics/chromium/cc/CCAnimationEvents.cpp:
        (WebCore::CCAnimationStartedEvent::create):
        (WebCore::CCAnimationStartedEvent::CCAnimationStartedEvent):
        * platform/graphics/chromium/cc/CCAnimationEvents.h:
        (CCAnimationEvent):
        (CCAnimationStartedEvent):
        * platform/graphics/chromium/cc/CCInputHandler.h:
        (CCInputHandler):
        * platform/graphics/chromium/cc/CCLayerAnimationControllerImpl.cpp:
        (WebCore::CCLayerAnimationControllerImpl::animate):
        (WebCore::CCLayerAnimationControllerImpl::startAnimationsWaitingForNextTick):
        (WebCore::CCLayerAnimationControllerImpl::startAnimationsWaitingForStartTime):
        (WebCore::CCLayerAnimationControllerImpl::startAnimationsWaitingForTargetAvailability):
        (WebCore::CCLayerAnimationControllerImpl::resolveConflicts):
        (WebCore::CCLayerAnimationControllerImpl::tickAnimations):
        * platform/graphics/chromium/cc/CCLayerAnimationControllerImpl.h:
        (CCLayerAnimationControllerImpl):
        * platform/graphics/chromium/cc/CCLayerTreeHost.cpp:
        (WebCore::CCLayerTreeHost::setAnimationEvents):
        (WebCore::CCLayerTreeHost::setAnimationEventsRecursive):
        * platform/graphics/chromium/cc/CCLayerTreeHost.h:
        (CCLayerTreeHost):
        * platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:
        (WebCore::CCLayerTreeHostImpl::animate):
        (WebCore::CCLayerTreeHostImpl::startPageScaleAnimation):
        (WebCore::CCLayerTreeHostImpl::animateLayersRecursive):
        (WebCore::CCLayerTreeHostImpl::animatePageScale):
        (WebCore::CCLayerTreeHostImpl::animateLayers):
        * platform/graphics/chromium/cc/CCLayerTreeHostImpl.h:
        (CCLayerTreeHostImplClient):
        (CCLayerTreeHostImpl):
        * platform/graphics/chromium/cc/CCPageScaleAnimation.cpp:
        (WebCore::CCPageScaleAnimation::create):
        (WebCore::CCPageScaleAnimation::CCPageScaleAnimation):
        (WebCore::CCPageScaleAnimation::zoomTo):
        (WebCore::CCPageScaleAnimation::zoomWithAnchor):
        (WebCore::CCPageScaleAnimation::scrollOffsetAtTime):
        (WebCore::CCPageScaleAnimation::pageScaleAtTime):
        (WebCore::CCPageScaleAnimation::isAnimationCompleteAtTime):
        (WebCore::CCPageScaleAnimation::progressRatioForTime):
        * platform/graphics/chromium/cc/CCPageScaleAnimation.h:
        (CCPageScaleAnimation):
        (WebCore::CCPageScaleAnimation::startTime):
        (WebCore::CCPageScaleAnimation::duration):
        (WebCore::CCPageScaleAnimation::endTime):
        * platform/graphics/chromium/cc/CCSingleThreadProxy.cpp:
        (WebCore::CCSingleThreadProxy::startPageScaleAnimation):
        (WebCore::CCSingleThreadProxy::postAnimationEventsToMainThreadOnImplThread):
        (WebCore::CCSingleThreadProxy::doComposite):
        * platform/graphics/chromium/cc/CCSingleThreadProxy.h:
        (CCSingleThreadProxy):
        * platform/graphics/chromium/cc/CCThreadProxy.cpp:
        (WebCore::CCThreadProxy::startPageScaleAnimation):
        (WebCore::CCThreadProxy::requestStartPageScaleAnimationOnImplThread):
        (WebCore::CCThreadProxy::postAnimationEventsToMainThreadOnImplThread):
        (WebCore::CCThreadProxy::scheduledActionDrawAndSwap):
        (WebCore::CCThreadProxy::setAnimationEvents):
        * platform/graphics/chromium/cc/CCThreadProxy.h:
        (CCThreadProxy):

2012-03-09  Zoltan Herczeg  <zherczeg@webkit.org>

        Add SVGRenderingContext and move there the context related code from SVGRenderSupport
        https://bugs.webkit.org/show_bug.cgi?id=80413

        Reviewed by Nikolas Zimmermann.

        This is the first step of refactoring the rendering context for SVG. The
        previous context was stateless before, which means the cleanup phase
        needed to do a lot of checks to revert the initialization part and
        was unaware of failed inititalization. Future code can also add
        new local variables to the context.

        This patch add a new SVGRenderingContext class, and moves there the context
        initialization / cleanup code from SVGRenderSupport. All build systems were
        updated.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * rendering/svg/RenderSVGAllInOne.cpp:
        * rendering/svg/RenderSVGContainer.cpp:
        (WebCore::RenderSVGContainer::paint):
        * rendering/svg/RenderSVGForeignObject.cpp:
        (WebCore::RenderSVGForeignObject::paint):
        * rendering/svg/RenderSVGImage.cpp:
        (WebCore::RenderSVGImage::paint):
        * rendering/svg/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::paintReplaced):
        * rendering/svg/RenderSVGShape.cpp:
        (WebCore::RenderSVGShape::paint):
        * rendering/svg/SVGInlineFlowBox.cpp:
        (WebCore::SVGInlineFlowBox::paint):
        * rendering/svg/SVGRenderSupport.cpp:
        * rendering/svg/SVGRenderSupport.h:
        * rendering/svg/SVGRenderingContext.cpp: Added.
        (WebCore):
        (WebCore::isRenderingMaskImage):
        (WebCore::SVGRenderingContext::~SVGRenderingContext):
        (WebCore::SVGRenderingContext::prepareToRenderSVGContent):
        * rendering/svg/SVGRenderingContext.h: Added.
        (WebCore):
        (SVGRenderingContext):
        (WebCore::SVGRenderingContext::SVGRenderingContext):
        (WebCore::SVGRenderingContext::isRenderingPrepared):
        * rendering/svg/SVGRootInlineBox.cpp:
        (WebCore::SVGRootInlineBox::paint):

2012-03-09  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r110191, r110202, and r110279.
        http://trac.webkit.org/changeset/110191
        http://trac.webkit.org/changeset/110202
        http://trac.webkit.org/changeset/110279
        https://bugs.webkit.org/show_bug.cgi?id=80694

        They broke !ENABLE(INSPECTOR) builds (Requested by Ossy on
        #webkit).

        * WebCore.exp.in:
        * testing/Internals.cpp:
        * testing/Internals.h:
        (WebCore):
        (Internals):
        * testing/Internals.idl:

2012-03-09  Hans Wennborg  <hans@chromium.org>

        Speech JavaScript API: add SpeechGrammar and SpeechGrammarList
        https://bugs.webkit.org/show_bug.cgi?id=80417

        Reviewed by Adam Barth.

        Implement SpeechGrammar and SpeechGrammarList.
        (Spec: http://speech-javascript-api-spec.googlecode.com/git/speechapi.html)

        Test: fast/speech/scripted/speechgrammar-basics.html

        * Modules/speech/DOMWindowSpeech.idl:
        * Modules/speech/SpeechGrammar.cpp:
        (WebCore):
        (WebCore::SpeechGrammar::create):
        (WebCore::SpeechGrammar::SpeechGrammar):
        * Modules/speech/SpeechGrammar.h:
        (WebCore):
        (SpeechGrammar):
        (WebCore::SpeechGrammar::src):
        (WebCore::SpeechGrammar::setSrc):
        (WebCore::SpeechGrammar::weight):
        (WebCore::SpeechGrammar::setWeight):
        * Modules/speech/SpeechGrammar.idl:
        * Modules/speech/SpeechGrammarList.cpp:
        (WebCore):
        (WebCore::SpeechGrammarList::create):
        (WebCore::SpeechGrammarList::item):
        (WebCore::SpeechGrammarList::addFromUri):
        (WebCore::SpeechGrammarList::addFromString):
        (WebCore::SpeechGrammarList::SpeechGrammarList):
        * Modules/speech/SpeechGrammarList.h:
        (WebCore):
        (SpeechGrammarList):
        (WebCore::SpeechGrammarList::length):
        * Modules/speech/SpeechGrammarList.idl:
        * WebCore.gypi:

2012-03-09  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r110269.
        http://trac.webkit.org/changeset/110269
        https://bugs.webkit.org/show_bug.cgi?id=80688

        It made inspector/elements/highlight-node.html fail everywhere
        (Requested by Ossy on #webkit).

        * testing/Internals.idl:

2012-03-07  Alexander Pavlov  <apavlov@chromium.org>

        Web Inspector: [Styles] Click in the first line of rule while editing property starts a new property
        https://bugs.webkit.org/show_bug.cgi?id=80507

        Reviewed by Vsevolod Vlasov.

        * inspector/front-end/StylesSidebarPane.js:
        (WebInspector.StylePropertiesSection):
        (WebInspector.StylePropertiesSection.prototype._checkWillCancelEditing):
        (WebInspector.StylePropertiesSection.prototype._handleSelectorContainerClick):
        (WebInspector.StylePropertiesSection.prototype._handleEmptySpaceClick):
        (WebInspector.StylePropertyTreeElement.prototype.onattach):
        (WebInspector.StylePropertyTreeElement.prototype):

2012-03-09  Mark Rowe  <mrowe@apple.com>

        <rdar://problem/11012024> Fix the build by working around <rdar://problem/10710970>.

        * platform/mac/RunLoopMac.mm:
        (WebCore::RunLoop::stop):

2012-03-09  Marja Hölttä  <marja@google.com>

        FileInputType doesn't support (save|restore)FormControlState
        https://bugs.webkit.org/show_bug.cgi?id=80145

        Reviewed by Kent Tamura.

        This enables saving and restoring the state of file upload elements in
        unsubmitted forms.

        Test: fast/forms/file/recover-file-input-in-unposted-form.html

        * html/BaseCheckableInputType.cpp:
        (WebCore::BaseCheckableInputType::restoreFormControlState): non-const
        * html/BaseCheckableInputType.h:
        (BaseCheckableInputType): restoreFormControlState non-const
        * html/FileInputType.cpp:
        (WebCore::FileInputType::saveFormControlState): save chosen files
        (WebCore):
        (WebCore::FileInputType::restoreFormControlState): restore chosen files
        * html/FileInputType.h:
        (FileInputType): overwrite (save|restore)FormControlState
        * html/HiddenInputType.cpp:
        (WebCore::HiddenInputType::restoreFormControlState): non-const
        * html/HiddenInputType.h:
        (HiddenInputType): restoreFormControlState non-const
        * html/InputType.cpp:
        (WebCore::InputType::restoreFormControlState): non-const
        * html/InputType.h:
        (InputType): restoreFormControlState non-const
        * html/PasswordInputType.cpp:
        (WebCore::PasswordInputType::restoreFormControlState): non-const
        * html/PasswordInputType.h:
        (PasswordInputType): restoreFormControlState non-const

2012-03-08  Benjamin Poulain  <bpoulain@apple.com>

        Base the access to CSSStyleDeclaration on the CSSPropertyID instead of the PropertyName
        https://bugs.webkit.org/show_bug.cgi?id=80461

        Reviewed by Geoffrey Garen.

        Previously, the acces to CSS Style properties was done through a NamedGetter. This caused
        the (slow) mapping between CSSPropertyName and CSSPropertyID to be done twice for every acess:
        1) canGetItemsForName() prior to the definition of the slot.
        2) nameGetter() called from the slot with CSSPropertyName to get the actual value.

        This patch changes the access to be based on CSSPropertyID. The slot is defined with the
        CSSPropertyID as the customIndex, and the value can be accessed directly when the slot is
        called.

        To handle the differences create by hadPixelOrPosPrefix, two nearly identical callback are defined,
        one for hadPixelOrPosPrefix, the other for !hadPixelOrPosPrefix.

        The performance gain is about 19% when accessing CSS properties.

        * bindings/js/JSCSSStyleDeclarationCustom.cpp:
        (WebCore::getPropertyValueFallback):
        (WebCore::cssPropertyGetterPixelOrPosPrefix):
        (WebCore):
        (WebCore::cssPropertyGetterPixelOrPosPrefixCallback):
        (WebCore::cssPropertyGetter):
        (WebCore::cssPropertyGetterCallback):
        (WebCore::JSCSSStyleDeclaration::getOwnPropertySlotDelegate):
        (WebCore::JSCSSStyleDeclaration::getOwnPropertyDescriptorDelegate):
        * css/CSSStyleDeclaration.idl:

2012-03-08  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Fix Qt minimal build

        * testing/Internals.idl:

2012-03-08  James Robinson  <jamesr@chromium.org>

        [chromium] Remove dead CoreGraphics code from chromium compositor implementation
        https://bugs.webkit.org/show_bug.cgi?id=80470

        Reviewed by Adam Barth.

        We haven't supported CoreGraphics as a raster backend in chromium for a few months and do not plan to do so, so
        it's time to remove the USE(CG) #ifdefs from our compositor and just rely on USE(SKIA) being set.  This also
        slightly simplifies how PlatformCanvas works.

        * platform/graphics/chromium/BitmapSkPictureCanvasLayerTextureUpdater.cpp:
        * platform/graphics/chromium/BitmapSkPictureCanvasLayerTextureUpdater.h:
        * platform/graphics/chromium/ContentLayerChromium.cpp:
        (WebCore::ContentLayerChromium::createTextureUpdaterIfNeeded):
        * platform/graphics/chromium/FrameBufferSkPictureCanvasLayerTextureUpdater.cpp:
        (WebCore::FrameBufferSkPictureCanvasLayerTextureUpdater::updateTextureRect):
        * platform/graphics/chromium/FrameBufferSkPictureCanvasLayerTextureUpdater.h:
        * platform/graphics/chromium/ImageLayerChromium.h:
        * platform/graphics/chromium/LayerChromium.cpp:
        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::initialize):
        * platform/graphics/chromium/LayerRendererChromium.h:
        * platform/graphics/chromium/PlatformCanvas.cpp:
        (WebCore::PlatformCanvas::createBackingCanvas):
        (WebCore::PlatformCanvas::AutoLocker::AutoLocker):
        (WebCore::PlatformCanvas::AutoLocker::~AutoLocker):
        (WebCore):
        (WebCore::PlatformCanvas::AutoLocker::pixels):
        (WebCore::PlatformCanvas::Painter::Painter):
        * platform/graphics/chromium/PlatformCanvas.h:
        (WebCore):
        (AutoLocker):
        (Painter):
        (PlatformCanvas):
        * platform/graphics/chromium/SkPictureCanvasLayerTextureUpdater.cpp:
        * platform/graphics/chromium/SkPictureCanvasLayerTextureUpdater.h:

2012-03-08  Ryosuke Niwa  <rniwa@webkit.org>

        Get rid of itemTypeAttributeChanged
        https://bugs.webkit.org/show_bug.cgi?id=80666

        Reviewed by Adam Barth.

        This function is unnecessay as we can invalidate m_microDataItemListCaches
        in invalidateCachesThatDependOnAttributes as done for other node lists.

        * dom/Node.cpp:
        (WebCore::Node::invalidateNodeListsCacheAfterAttributeChanged):
        (WebCore::NodeListsNodeData::invalidateCachesThatDependOnAttributes):
        * dom/Node.h:
        * dom/NodeRareData.h:
        (NodeListsNodeData):
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::parseAttribute):

2012-03-08  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r108616.
        http://trac.webkit.org/changeset/108616
        https://bugs.webkit.org/show_bug.cgi?id=80676

        breaks animation on Safari welcome page (Requested by smfr on
        #webkit).

        * page/animation/AnimationController.cpp:
        (WebCore::AnimationController::updateAnimations):
        * page/animation/AnimationControllerPrivate.h:
        (AnimationControllerPrivate):

2012-03-08  Benjamin Poulain  <benjamin@webkit.org>

        Fix the build of WebKit with WTFURL following the removal of ForwardingHeaders/wtf
        https://bugs.webkit.org/show_bug.cgi?id=80652

        Reviewed by Eric Seidel.

        The fowarding headers have been removed, we must now use the full path to the header.

        * platform/KURLWTFURLImpl.h:

2012-03-08  Emil A Eklund  <eae@chromium.org>

        Change calcRadiiFor to IntSize
        https://bugs.webkit.org/show_bug.cgi?id=80655

        Reviewed by Simon Fraser.

        Borders and RoundedRect are both represented with pixel precision. As
        such it doesn't make sense for calcRadiiFor to use subpixel units, it
        just adds unnecessary type conversions.

        No new tests, no new functionality.

        * rendering/style/RenderStyle.cpp:
        (WebCore::calcRadiiFor):

2012-03-08  Adrienne Walker  <enne@google.com>

        [chromium] Encapsulate mask layer settings in LayerChromium
        https://bugs.webkit.org/show_bug.cgi?id=80646

        Reviewed by James Robinson.

        If a WebLayer sets a mask layer, the setIsMask flag will not get set
        properly and the mask layer will not turn off tiling. This was only
        being set through GraphicsLayerChromium. Move this flag into
        LayerChromium so that it always gets set.

        Test: LayoutTests/compositing/

        * platform/graphics/chromium/GraphicsLayerChromium.cpp:
        (WebCore::GraphicsLayerChromium::setMaskLayer):
        * platform/graphics/chromium/LayerChromium.cpp:
        (WebCore::LayerChromium::setMaskLayer):

2012-03-08  Tony Chang  <tony@chromium.org>

        margins on flex-align: baseline are double counted
        https://bugs.webkit.org/show_bug.cgi?id=80645

        Reviewed by Ojan Vafai.

        Fix a bug where we're counting the margins on baseline aligned
        children twice. Also add some test cases to make sure we handle
        wrap-reverse baseline alignment properly.

        Tests: css3/flexbox/multiline-reverse-wrap-baseline-expected.html
               css3/flexbox/multiline-reverse-wrap-baseline.html

        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::layoutAndPlaceChildren):

2012-03-08  Nat Duca  <nduca@chromium.org>

        [chromium] Pass setVisibility to CCLayerTreeHostImpl regardless of LRC initialization status
        https://bugs.webkit.org/show_bug.cgi?id=80584

        Reviewed by James Robinson.

        * platform/graphics/chromium/cc/CCLayerTreeHost.cpp:
        (WebCore::CCLayerTreeHost::setVisible):
        (WebCore::CCLayerTreeHost::didBecomeInvisibleOnImplThread):
        * platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:
        (WebCore::CCLayerTreeHostImpl::setVisible):
        (WebCore::CCLayerTreeHostImpl::initializeLayerRenderer):

2012-03-08  Ian Vollick  <vollick@chromium.org>

        [chromium] Ensure that the cc thread animation framework continues to tick when the tab is backgrounded
        https://bugs.webkit.org/show_bug.cgi?id=77668

        Reviewed by James Robinson.

        Tested in CCLayerTreeHostTestTickAnimationWhileBackgrounded

        * platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:
        (CCLayerTreeHostImplTimeSourceAdapter):
        (WebCore::CCLayerTreeHostImplTimeSourceAdapter::create):
        (WebCore::CCLayerTreeHostImplTimeSourceAdapter::~CCLayerTreeHostImplTimeSourceAdapter):
        (WebCore::CCLayerTreeHostImplTimeSourceAdapter::onTimerTick):
        (WebCore::CCLayerTreeHostImplTimeSourceAdapter::setActive):
        (WebCore::CCLayerTreeHostImplTimeSourceAdapter::CCLayerTreeHostImplTimeSourceAdapter):
        (WebCore):
        (WebCore::CCLayerTreeHostImpl::CCLayerTreeHostImpl):
        (WebCore::CCLayerTreeHostImpl::setVisible):
        (WebCore::CCLayerTreeHostImpl::animateLayers):
        * platform/graphics/chromium/cc/CCLayerTreeHostImpl.h:
        (WebCore):
        (CCLayerTreeHostImpl):
        * platform/graphics/chromium/cc/CCProxy.cpp:
        (WebCore::CCProxy::currentThread):
        (WebCore):
        (WebCore::CCProxy::isMainThread):
        (WebCore::CCProxy::isImplThread):
        (WebCore::CCProxy::setCurrentThreadIsImplThread):
        * platform/graphics/chromium/cc/CCProxy.h:
        (CCProxy):

2012-03-08  Nico Weber  <thakis@chromium.org>

        [chromium] Only build NEON files if target_arch=="arm"
        https://bugs.webkit.org/show_bug.cgi?id=80626

        Currently, webcore_arm_neon will compile a bunch of files
        whose contents are completely ifdef'd away on non-arm, and
        then bundle all the generated empty .o files into a useless
        libwebcore_arm_neon.a. Don't do this.

        Reviewed by Tony Chang.

        * WebCore.gyp/WebCore.gyp:
        * WebCore.gypi:

2012-03-08 Nima Ghanavatian <nghanavatian@rim.com>

        [BlackBerry] Fix warning in PlatformTouchEventBlackBerry.cpp
        https://bugs.webkit.org/show_bug.cgi?id=80621

        Fixes a warning seen when control reaches the end of a
        non-void function.  Return TouchCancel in the 'default' case.

        Reviewed by Rob Buis.

        * platform/blackberry/PlatformTouchEventBlackBerry.cpp:
        (WebCore::touchEventType):

2012-03-08  Dana Jansens  <danakj@chromium.org>

        [chromium] Using wrong scissor rect for draw culling
        https://bugs.webkit.org/show_bug.cgi?id=80624

        Reviewed by Adrienne Walker.

        * platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:
        (WebCore::CCLayerTreeHostImpl::optimizeRenderPasses):

2012-03-08  Andy Estes  <aestes@apple.com>

        REGRESSION (r105396): Dragging an iWork document into icloud.com opens it in the Mac app instead of uploading it to icloud.com
        https://bugs.webkit.org/show_bug.cgi?id=79443

        Reviewed by Ryosuke Niwa.

        icloud.com registers a drop event handler that sets display:none on the
        file input element receiving the drop. After dispatching the drop event,
        DragController hit tests the position under the mouse to see if it is a
        file input element in need of receiving files. Since the file input
        element has lost its renderer, it cannot be found by hit testing, so
        the dropped file is never attached to the file input element, no change
        event fires, and no upload commences. We want these things to happen
        even if the element is no longer visible.

        Since we already keep track of the file input element under the mouse
        via m_fileInputElementUnderMouse, this additional hit test is
        unnecessary. Use m_fileInputElementUnderMouse in concludeEditDrag()
        when dropping files.

        Test: fast/events/file-input-hidden-in-ondrop.html

        * page/DragController.cpp:
        (WebCore::DragController::concludeEditDrag): Use
        m_fileInputElementUnderMouse instead of the element returned by hit
        testing. Assert that m_fileInputElementUnderMouse equals the hit tested
        element unless m_fileInputElementUnderMouse doesn't have a renderer.

2012-03-08  Ryosuke Niwa  <rniwa@webkit.org>

        Mac build fix for micro data API.

        * Configurations/FeatureDefines.xcconfig:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/Document.cpp:
        (WebCore::Document::removeCachedMicroDataItemList):
        * html/HTMLElement.idl:

2012-03-07  Jon Lee  <jonlee@apple.com>

        Support [Custom] for static functions
        https://bugs.webkit.org/show_bug.cgi?id=80573

        Reviewed by Kentaro Hara.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateHeader): If the function is static, add static qualifier to cpp function.
        (GenerateImplementation): Reorganize the function to split out based on the static
        attribute, instead of checking for it at every line we output.
            If the function is static and not custom, the listed code should be the code in
        the rest of the function that did not have the static check. If it is custom, then
        we check the number of arguments, and then call the static impl function directly.
            If the function is not static, all of the "unless ($function->isStatic)" checks
        are removed since it is not necessary.

        * bindings/scripts/test/TestObj.idl: Added new test case.

        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore):
        (WebCore::jsTestObjConstructorFunctionClassMethod2):
        * bindings/scripts/test/JS/JSTestObj.h:
        (JSTestObj):
        (WebCore):
        * bindings/scripts/test/ObjC/DOMTestObj.h:
        * bindings/scripts/test/ObjC/DOMTestObj.mm:
        (-[DOMTestObj classMethod2]):
        * bindings/scripts/test/V8/V8TestObj.cpp:
        (WebCore::ConfigureV8TestObjTemplate):
        * bindings/scripts/test/V8/V8TestObj.h:
        (V8TestObj):

2012-03-08  Mark Pilgrim  <pilgrim@chromium.org>

        Collapse ENABLE(BLOB)|ENABLE(FILE_SYSTEM) to just ENABLE(BLOB)
        https://bugs.webkit.org/show_bug.cgi?id=80592

        Reviewed by Adam Barth.

        In anticipation of moving FILE_SYSTEM-related code to Modules/, we
        are collapsing combination BLOB/FILE_SYSTEM ifdefs to just
        BLOB. In other words, it is assumed from now on that you can not
        have FILE_SYSTEM support without BLOB support.
        
        No new tests, all existing tests pass.

        * CMakeLists.txt:
        * dom/ScriptExecutionContext.cpp:
        (WebCore::ScriptExecutionContext::~ScriptExecutionContext):
        (WebCore):
        (WebCore::ScriptExecutionContext::fileThread):
        * dom/ScriptExecutionContext.h:
        (WebCore):
        (ScriptExecutionContext):
        * fileapi/AsyncFileStream.cpp:
        * fileapi/AsyncFileStream.h:
        * fileapi/FileError.h:
        * fileapi/FileException.cpp:
        * fileapi/FileException.h:
        * fileapi/FileThread.cpp:
        * fileapi/FileThread.h:
        * fileapi/OperationNotAllowedException.cpp:
        * fileapi/OperationNotAllowedException.h:
        * platform/FileStream.cpp:
        * platform/FileStream.h:
        * platform/FileStreamClient.h:
        * platform/SchemeRegistry.cpp:
        (WebCore::canDisplayOnlyIfCanRequestSchemes):
        (WebCore::CORSEnabledSchemes):
        (WebCore::SchemeRegistry::registerURLSchemeAsNotAllowingJavascriptURLs):

2012-03-08  James Robinson  <jamesr@chromium.org>

        Use an explicit attribute to signal that a context prefers to use a discrete GPU
        https://bugs.webkit.org/show_bug.cgi?id=80639

        Reviewed by Stephen White.

        On platforms that support both integrated and discrete GPUs and can dynamically switch between the two, we
        sometimes have a specific preference for a given context. Specifically, contexts used for WebGL and canvas 2d
        acceleration should use the discrete GPU if available, but compositor contexts can run fine on an integrated
        GPU. Instead of attempting to infer the intent from examining other context attributes, this adds an explicit
        attribute to control this behavior.

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore):
        (WebCore::WebGLRenderingContext::create):
        * platform/graphics/GraphicsContext3D.h:
        (WebCore::GraphicsContext3D::Attributes::Attributes):
        (Attributes):
        * platform/graphics/gpu/SharedGraphicsContext3D.cpp:
        (WebCore::SharedGraphicsContext3D::get):

2012-03-08  Andy Estes  <aestes@apple.com>

        NULL renderer possible in WebCore::HTMLInputElement::setCanReceiveDroppedFiles()
        https://bugs.webkit.org/show_bug.cgi?id=80648

        Reviewed by Simon Fraser.

        Test: fast/events/input-element-display-none-in-dragleave-crash.html

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::setCanReceiveDroppedFiles): NULL-check renderer().

2012-03-08  Jer Noble  <jer.noble@apple.com>

        Yet another unreviewed build fix.

        Remove an unneeded and Lion-defined window constant from WebCoreFullScreenWindow.

        * platform/mac/WebCoreFullScreenWindow.mm:
        (-[WebCoreFullScreenWindow initWithContentRect:styleMask:backing:defer:]):

2012-03-08  Levi Weintraub  <leviw@chromium.org>

        Switch absoluteRects, culledInlineAbsoluteRects, absoluteBoundingBoxRect, and addFocusRingRects back to integers
        https://bugs.webkit.org/show_bug.cgi?id=80545

        Reviewed by Simon Fraser.

        Converting the above functions, all of which return rects that represent on-screen rects, to IntRects from
        LayoutRects.

        addFocusRingsRects generates a vector of rects that is handed off directly to the GraphicsContext to be
        drawn. Snapping the rects before adding them to the vector saves an extra pass through the vector.

        absoluteRects and culledInlineAbsoluteRects are only used by addFocusRingRects, hasNonEmptyBoundingBox (only
        to check if they're empty), and absoluteBoundingBoxRect, which is exposed from WebCore and thus should be an
        IntRect anyways.

        No new tests. No change in behavior.

        * dom/Node.cpp:
        (WebCore::Node::hasNonEmptyBoundingBox):
        * dom/Range.cpp:
        (WebCore::Range::boundingBox):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::absoluteRects):
        (WebCore::RenderBlock::addFocusRingRects):
        * rendering/RenderBlock.h:
        (RenderBlock):
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::absoluteRects):
        (WebCore::RenderInline::culledInlineAbsoluteRects):
        (WebCore::RenderInline::addFocusRingRects):
        * rendering/RenderInline.h:
        (RenderInline):
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::addFocusRingRects):
        * rendering/RenderListBox.h:
        (RenderListBox):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::paintFocusRing):
        (WebCore::RenderObject::absoluteBoundingBoxRect):
        (WebCore::RenderObject::absoluteFocusRingQuads):
        * rendering/RenderObject.h:
        (WebCore::RenderObject::absoluteRects):
        (RenderObject):
        (WebCore::RenderObject::absoluteBoundingBoxRectIgnoringTransforms):
        (WebCore::RenderObject::addFocusRingRects):
        * rendering/RenderText.cpp:
        (WebCore::RenderText::absoluteRects):
        (WebCore::RenderText::absoluteRectsForRange):
        * rendering/RenderText.h:
        (RenderText):
        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::addFocusRingRects):
        * rendering/RenderTextControl.h:
        (RenderTextControl):
        * rendering/RenderView.cpp:
        (WebCore::RenderView::absoluteRects):
        * rendering/RenderView.h:
        (RenderView):
        * rendering/svg/RenderSVGBlock.cpp:
        (WebCore::RenderSVGBlock::absoluteRects):
        * rendering/svg/RenderSVGBlock.h:
        (RenderSVGBlock):
        * rendering/svg/RenderSVGContainer.cpp:
        (WebCore::RenderSVGContainer::addFocusRingRects):
        * rendering/svg/RenderSVGContainer.h:
        (RenderSVGContainer):
        * rendering/svg/RenderSVGImage.cpp:
        (WebCore::RenderSVGImage::addFocusRingRects):
        * rendering/svg/RenderSVGImage.h:
        (RenderSVGImage):
        * rendering/svg/RenderSVGModelObject.cpp:
        (WebCore::RenderSVGModelObject::absoluteRects):
        * rendering/svg/RenderSVGModelObject.h:
        (RenderSVGModelObject):
        * rendering/svg/RenderSVGShape.cpp:
        (WebCore::RenderSVGShape::addFocusRingRects):
        * rendering/svg/RenderSVGShape.h:
        (RenderSVGShape):

2012-03-08  Erik Arvidsson  <arv@chromium.org>

        [V8] Use EventNames instead of strings
        https://bugs.webkit.org/show_bug.cgi?id=80649

        Reviewed by Ojan Vafai.

        No new tests. Covered by existing tests.

        * bindings/v8/V8AbstractEventListener.cpp:
        (WebCore::V8AbstractEventListener::invokeEventHandler):

2012-03-08  Tim Horton  <timothy_horton@apple.com>

        No-op filter changes color output because of colorspace issues
        https://bugs.webkit.org/show_bug.cgi?id=72411
        <rdar://problem/10588374>

        Reviewed by Dean Jackson.

        Redefine "linear RGB" color space on Mac to mean linearized sRGB, instead of linear
        Generic RGB. This makes existing CG color matching equivalent to what other ports do via
        ImageBuffer::transformColorSpace (which only adjusts gamma, as we will now). Previously,
        we were also causing actual (non-gamma) color adjustments which were not reversible.

        No new tests, covered by all existing SVG and CSS filter tests.

        * Resources/linearSRGB.icc: Added.
        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::linearRGBColorSpaceRef):

2012-03-08  Beth Dakin  <bdakin@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=80463
        RenderImage is using the wrong origin when calling addRelevantRepaintedObject
        -and corresponding-
        <rdar://problem/10970221>

        Reviewed by Dan Bernstein.

        Use the exact same rect that we paint with instead of the 
        visualOverflowRect() which does not always have a correct x and y.
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::paintReplaced):
        * rendering/RenderVideo.cpp:
        (WebCore::RenderVideo::paintReplaced):

2012-03-08  Jer Noble  <jer.noble@apple.com>

        Full Screen Refactor Part 3: Animate into Full Screen mode using new animation classes.
        https://bugs.webkit.org/show_bug.cgi?id=78928

        Reviewed by Anders Carlsson.

        Move WKFullScreenWindow from WebKit2 into WebCore to be shared by WebKit2 and WebKit.
        * WebCore.xcodeproj/project.pbxproj:
        * platform/mac/WebCoreFullScreenWindow.h:
        * platform/mac/WebCoreFullScreenWindow.mm:

        Add symbols for the following classes and functions to the export list:
            WebCoreFullScreenWindow
            WebWindowScaleAnimation
            WebWindowFadeAnimation
            ScrollView::contentsToScreen()
            RenderObject::localToContainerQuad()
            Document::setAnimatingFullScreen()
        * WebCore.exp.in:

2012-03-08  Jer Noble  <jer.noble@apple.com>

        Full Screen Refactor Part 1: Remove special-case rendering code for Full Screen animation.
        https://bugs.webkit.org/show_bug.cgi?id=78925

        Reviewed by John Sullivan.

        No new tests; no net change in functionality so covered by existing tests.

        The following functions had special case code for rendering full-screen elements removed:
        * dom/Document.cpp:
        (WebCore::Document::webkitWillEnterFullScreenForElement):
        (WebCore::Document::webkitDidEnterFullScreenForElement):
        (WebCore::Document::webkitWillExitFullScreenForElement):
        (WebCore::Document::webkitDidExitFullScreenForElement):
        (WebCore::Document::setAnimatingFullScreen):
        * page/FrameView.cpp:
        (WebCore):
        (WebCore::FrameView::updateCompositingLayers):
        (WebCore::FrameView::syncCompositingStateForThisFrame):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::layerOrAncestorIsTransformed):
        (WebCore::RenderLayerBacking::updateCompositedBounds):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::rebuildCompositingLayerTree):
        (WebCore::RenderLayerCompositor::requiresCompositingLayer):
        * rendering/RenderLayerCompositor.h:

2012-03-08  Matt Lilek  <mrl@apple.com>

        Don't enable VIDEO_TRACK on all OS X platforms
        https://bugs.webkit.org/show_bug.cgi?id=80635

        Reviewed by Eric Carlson.

        * Configurations/FeatureDefines.xcconfig:

2012-03-08  Tony Chang  <tony@chromium.org>

        implement flexbox wrap-reverse
        https://bugs.webkit.org/show_bug.cgi?id=80552

        Reviewed by Ojan Vafai.

        No new tests, but additional coverage in:
            css3/flexbox/multiline-align.html
            css3/flexbox/multiline-pack.html
            css3/flexbox/multiline.html

        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::WrapReverseContext::WrapReverseContext): Helper struct to hold information needed for reversing
        the order of lines.
        (RenderFlexibleBox::WrapReverseContext):
        (WebCore::RenderFlexibleBox::WrapReverseContext::addCrossAxisOffset):
        (WebCore::RenderFlexibleBox::WrapReverseContext::addNumberOfChildrenOnLine):
        (WebCore::RenderFlexibleBox::WrapReverseContext::lineCrossAxisDelta): Computes the number of pixels to move a line.
        (WebCore):
        (WebCore::RenderFlexibleBox::layoutFlexItems): Call flipForWrapReverse if needed. This happens
        before flipForRightToLeftColumn because otherwise the crossAxisOffsets will be wrong.
        (WebCore::flexAlignForChild):
        (WebCore::RenderFlexibleBox::alignChildren): Flip alignment in wrap-reverse because the cross directions are flipped.
        (WebCore::RenderFlexibleBox::flipForWrapReverse): Flip each line.
        * rendering/RenderFlexibleBox.h:
        (RenderFlexibleBox):

2012-03-08  Adam Klein  <adamk@chromium.org>

        Remove InDocumentFlag manipulation methods from Node interface
        https://bugs.webkit.org/show_bug.cgi?id=80612

        Reviewed by Ryosuke Niwa.

        This is a first step towards tightening up Node::inDocument() to match
        the actual in-document-tree state (see r108152 for the sort of bug
        resulting from those not matching).

        No new tests, refactoring only.

        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::removedFromDocument): Remove duplicate call to clearInDocument:
        the call to Node::removedFromDocument three lines above will clear the flag.
        * dom/Document.cpp:
        (WebCore::Document::Document): Call ContainerNode constructor with InDocumentFlag always set
        instead of calling setInDocument.
        * dom/Node.cpp:
        (WebCore::Node::insertedIntoDocument): Inline setInDocument (now the only caller).
        (WebCore::Node::removedFromDocument): Inline clearInDocument (now the only caller).
        * dom/Node.h: Remove setInDocument & clearInDocument, add new CreateDocument ConstructionType.

2012-03-08  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Try to fix the Snow Leopard build

        If the build is running under sh, echo -n does not empty the file.

        * DerivedSources.pri:

2012-03-08  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Prospective build fix for Qt minimal after r110191

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

        * testing/Internals.cpp:
        (WebCore):
        * testing/Internals.h:
        (Internals):

2012-03-08  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Prospective Windows build fix

        Don't assume that windows-builds will always run inside a cmd.exe shell.

        * DerivedSources.pri:

2012-03-08  Vivek Galatage  <vivekgalatage@gmail.com>

        Web Inspector: Creating a selector for class names with trailing spaces results with two dots instead of one
        https://bugs.webkit.org/show_bug.cgi?id=80529

        Trim the className before replacing the whitespaces with dot "."

        Reviewed by Pavel Feldman.

        No new tests.

        * inspector/front-end/DOMAgent.js:
        (WebInspector.DOMNode.prototype.appropriateSelectorFor):

2012-03-08  Dan Bernstein  <mitz@apple.com>

        <rdar://problem/10981173> Dashboard regions should not be in device space

        Reviewed by John Sullivan.

        Test: TestWebKitAPI/Tests/mac/DeviceScaleFactorInDashboardRegions.mm

        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::addDashboardRegions): Stop applying the device scale factor to
        Dashboard regions.
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::addDashboardRegions): Ditto.

2012-03-08  Cem Kocagil  <cem.kocagil@gmail.com>

        Web Inspector: Cannot insert right curly bracket on some keyboards
        https://bugs.webkit.org/show_bug.cgi?id=80474

        Make sure other modifiers are not pressed

        Reviewed by Pavel Feldman

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

2012-03-08  Max Vujovic  <mvujovic@adobe.com>

        Add a method to window.internals to enable testing of inspector highlight rects
        https://bugs.webkit.org/show_bug.cgi?id=80338

        Reviewed by Pavel Feldman.

        Add window.internals.inspectorHighlightRects, a method which makes it possible to test the
        positions and sizes of inspector highlight rects.

        Test: inspector/elements/highlight-node.html

        * WebCore.exp.in: Export symbols.
        * testing/Internals.cpp:
        (WebCore::Internals::inspectorHighlightRects): Call InspectorController::getHighlight and
        return the highlight's quads as a ClientRectList.
        (WebCore):
        * testing/Internals.h:
        (WebCore):
        (Internals):
        * testing/Internals.idl:

            Add inspectorHighlightRects to the window.internals interface.

2012-03-08  Antti Koivisto  <antti@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=80370
        Enable matched declaration caching for elements with a style attribute

        Reviewed by Andreas Kling

        Make the property set for style attribute immutable as long as there is no CSSOM
        wrapper for it. If the style attribute changes we create a new property set instead
        of recycling the old one. This way the property sets can be made cacheable as long
        as there is no CSSOM wrapper that would allow uncontrolled modifications. Constructing
        the wrapper disables caching.
        
        Made StyledElement::inlineStyle() and StyledElement::ensureInlineStyle() return a const
        StylePropertySet so making accidental modifications difficult. Also dropped *Decl from
        the names.
        
        Fixed two unrelated bugs that this exposed.

        * css/CSSStyleSelector.cpp:
        
            Don't allow caching of document element style if writingModeSetOnDocumentElement() bit is set.
            Tested by fast/multicol/vertical-rl/break-properties.html.
        
        (WebCore::CSSStyleSelector::collectMatchingRulesForList):
        * css/StylePropertySet.h:
        (StylePropertySet):
        (WebCore::StylePropertySet::hasCSSOMWrapper):
        * dom/Element.cpp:
        (WebCore::Element::recalcStyle):
        
            Invalidate the matched properties cache if the document has rem units and the root font changes.
            Tested by fast/css/rem-dynamic-scaling.html.
        
        * dom/ElementAttributeData.cpp:
        (WebCore):
        (WebCore::ElementAttributeData::ensureInlineStyle):
        (WebCore::ElementAttributeData::ensureMutableInlineStyle):
        (WebCore::ElementAttributeData::updateInlineStyleAvoidingMutation):
        (WebCore::ElementAttributeData::destroyInlineStyle):
        * dom/ElementAttributeData.h:
        (WebCore::ElementAttributeData::inlineStyle):
        (ElementAttributeData):
        * dom/StyledElement.cpp:
        (WebCore::StyledElement::updateStyleAttribute):
        (WebCore::StyledElement::~StyledElement):
        (WebCore):
        (WebCore::StyledElement::style):
        (WebCore::StyledElement::parseAttribute):
        (WebCore::StyledElement::setInlineStyleProperty):
        (WebCore::StyledElement::removeInlineStyleProperty):
        (WebCore::StyledElement::addSubresourceAttributeURLs):
        * dom/StyledElement.h:
        (WebCore::StyledElement::inlineStyle):
        (WebCore::StyledElement::ensureInlineStyle):
        (StyledElement):
        (WebCore::StyledElement::destroyInlineStyle):
        * editing/ApplyStyleCommand.cpp:
        (WebCore::hasNoAttributeOrOnlyStyleAttribute):
        (WebCore::ApplyStyleCommand::applyRelativeFontStyleChange):
        (WebCore::ApplyStyleCommand::removeEmbeddingUpToEnclosingBlock):
        (WebCore::ApplyStyleCommand::applyInlineStyleToNodeRange):
        (WebCore::ApplyStyleCommand::removeCSSStyle):
        (WebCore::ApplyStyleCommand::applyInlineStyleToPushDown):
        (WebCore::ApplyStyleCommand::addBlockStyle):
        (WebCore::ApplyStyleCommand::addInlineStyleIfNeeded):
        * editing/EditingStyle.cpp:
        (WebCore::HTMLElementEquivalent::propertyExistsInStyle):
        (HTMLTextDecorationEquivalent):
        (WebCore::HTMLTextDecorationEquivalent::propertyExistsInStyle):
        (WebCore::EditingStyle::conflictsWithInlineStyleOfElement):
        (WebCore::EditingStyle::elementIsStyledSpanOrHTMLEquivalent):
        (WebCore::EditingStyle::mergeInlineStyleOfElement):
        (WebCore::elementMatchesAndPropertyIsNotInInlineStyleDecl):
        (WebCore::EditingStyle::mergeStyle):
        * editing/EditingStyle.h:
        (EditingStyle):
        * editing/RemoveCSSPropertyCommand.cpp:
        (WebCore::RemoveCSSPropertyCommand::doApply):
        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::removeRedundantStylesAndKeepStyleSpanInline):
        (WebCore::ReplaceSelectionCommand::handleStyleSpans):
        * editing/markup.cpp:
        (WebCore::StyledMarkupAccumulator::appendElement):
        (WebCore::styleFromMatchedRulesAndInlineDecl):
        * html/HTMLElement.cpp:
        (WebCore::StyledElement::copyNonAttributeProperties):
        * html/canvas/CanvasStyle.cpp:
        (WebCore::currentColor):
        * page/PageSerializer.cpp:
        (WebCore::PageSerializer::serializeFrame):
        (WebCore::PageSerializer::retrieveResourcesForProperties):
        * page/PageSerializer.h:
        (PageSerializer):
        * rendering/RenderTreeAsText.cpp:
        (WebCore::isEmptyOrUnstyledAppleStyleSpan):

2012-03-08  Scott Byer  <scottbyer@chromium.org>

        Have ScrollAnimatorNone use requestAnimationFrame
        https://bugs.webkit.org/show_bug.cgi?id=78938

        Reviewed by James Robinson.

        No new tests. Passes Chromium webkit_unit_tests.

        * page/FrameView.cpp:
        (WebCore::FrameView::serviceScriptedAnimations):
        * platform/ScrollAnimator.h:
        (WebCore::ScrollAnimator::serviceScrollAnimations):
        * platform/ScrollAnimatorNone.cpp:
        (WebCore::ScrollAnimatorNone::ScrollAnimatorNone):
        (WebCore::ScrollAnimatorNone::scroll):
        (WebCore::ScrollAnimatorNone::cancelAnimations):
        (WebCore):
        (WebCore::ScrollAnimatorNone::serviceScrollAnimations):
        (WebCore::ScrollAnimatorNone::animationTimerFired):
        (WebCore::ScrollAnimatorNone::startNextTimer):
        (WebCore::ScrollAnimatorNone::animationTimerActive):
        (WebCore::ScrollAnimatorNone::stopAnimationTimerIfNeeded):
        * platform/ScrollAnimatorNone.h:
        (ScrollAnimatorNone):
        * platform/ScrollableArea.cpp:
        (WebCore::ScrollableArea::serviceScrollAnimations):
        (WebCore):
        * platform/ScrollableArea.h:
        (WebCore):
        (ScrollableArea):
        * rendering/RenderLayer.h:
        (WebCore::RenderLayer::hostWindow):
        (RenderLayer):
        * rendering/RenderListBox.h:
        (WebCore::RenderListBox::hostWindow):
        (RenderListBox):

2012-03-08  Dan Bernstein  <mitz@apple.com>

        REGRESSION (r109964): Assertion failure (!isUndefined()) in Length::getIntValue() when a Dashboard region is specified without offsets
        https://bugs.webkit.org/show_bug.cgi?id=80614

        Reviewed by Beth Dakin.

        Test: fast/css/dashboard-regions-undefined-length-assertion.html

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::collectMatchingRulesForList): Reverted to setting zero lengths,
        rather than Undefined ones, in the RenderStyle when offsets are not given.

2012-03-08  Mikkel Kruse Johnsen  <mikkel@linet.dk>

        WebKitGtk+ fails to build on win32 against GTK3
        https://bugs.webkit.org/show_bug.cgi?id=63919

        Reviewed by Gustavo Noronha Silva.

        * plugins/gtk/PluginViewGtk.cpp: Don't use gtk_socket_new with GTK3 on Win32
        (WebCore::PluginView::platformStart):

2012-03-08  Jason Liu  <jason.liu@torchmobile.com.cn>

        [BlackBerry]New feature: support about:cookie for internal build.
        https://bugs.webkit.org/show_bug.cgi?id=80367

        Reviewed by Antonio Gomes.

        No new tests.

        * platform/blackberry/CookieManager.cpp:
        (WebCore::CookieManager::generateHtmlFragmentForCookies):
        (WebCore):
        * platform/blackberry/CookieManager.h:
        * platform/network/blackberry/NetworkJob.cpp:
        (WebCore::NetworkJob::handleAbout):

2012-03-08  Caio Marcelo de Oliveira Filho  <caio.oliveira@openbossa.org>

        Make elements with attributes smaller by eliminating the m_element back pointer in NamedNodeMap
        https://bugs.webkit.org/show_bug.cgi?id=75069

        Reviewed by Ryosuke Niwa.

        NamedNodeMap is an exposed DOM representation of an element's attribute storage. As part of
        its implementation it keeps a pointer to its associated Element plus all the attribute
        storage.

        This commit separate the two things: NamedNodeMap is now a wrapper to Element, containing
        only the pointer, and the attribute storage is now owned by Element directly. Since usage
        of NamedNodeMap is not very common, it can be stored in ElementRareData. As a result, most
        elements with attributes now don't need to allocate memory for that extra pointer in
        NamedNodeMap.

        One consequence of this implementation is that now we explicitly don't support
        DocumentType.notations and DocumentType.entities. They weren't supported before, a
        NamedNodeMap was never created for those attributes -- and some NamedNodeMap functions
        wouldn't work correctly without an associated Element.

        NamedNodeMap itself was cleaned up, as well as unnecessary references to it removed in the
        code and comments.

        No new tests and should not change results for existing tests.

        * dom/Attribute.h:
        (WebCore):
        * dom/DocumentType.h:
        (DocumentType): Point out that we don't support does attributes yet.
        * dom/Element.cpp:
        (WebCore::Element::~Element): Detaching the NamedNodeMap is no longer necessary because it
        will be destroyed. We still detach the potential Attrs inside our Attributes by using
        clearAttributes().
        (WebCore::Element::attributes): Looks in ElementRareData now. Note we ensure the creation
        of the attribute storage.
        (WebCore):
        (WebCore::Element::getAttribute):
        (WebCore::Element::setAttributeInternal):
        (WebCore::Element::parserSetAttributes):
        (WebCore::Element::hasAttributes):
        (WebCore::Element::createAttributeData):
        (WebCore::Element::insertedIntoDocument):
        (WebCore::Element::removedFromDocument):
        (WebCore::Element::getURLAttribute):
        (WebCore::Element::getNonEmptyURLAttribute):
        (WebCore::Element::hasNamedNodeMap): Helper function for Node::dumpStatistics().
        * dom/Element.h:
        (Element):
        (WebCore::Element::attributeData):
        (WebCore::Element::ensureAttributeData):
        (WebCore::Element::fastHasAttribute):
        (WebCore::Element::fastGetAttribute):
        (WebCore::Element::hasAttributesWithoutUpdate):
        (WebCore::Element::idForStyleResolution):
        (WebCore::Element::attributeCount):
        (WebCore::Element::attributeItem):
        (WebCore::Element::getAttributeItem):
        * dom/ElementAttributeData.h:
        (WebCore::ElementAttributeData::create):
        (ElementAttributeData):
        * dom/ElementRareData.h:
        (ElementRareData):
        * dom/NamedNodeMap.cpp: Rewriting now that m_attributeData is not a member, using m_element
        methods when possible.
        (WebCore::NamedNodeMap::ref):
        (WebCore::NamedNodeMap::deref):
        (WebCore::NamedNodeMap::getNamedItem):
        (WebCore::NamedNodeMap::getNamedItemNS):
        (WebCore::NamedNodeMap::removeNamedItem):
        (WebCore::NamedNodeMap::removeNamedItemNS):
        (WebCore::NamedNodeMap::setNamedItem):
        (WebCore::NamedNodeMap::item):
        (WebCore::NamedNodeMap::length):
        * dom/NamedNodeMap.h:
        (WebCore):
        (WebCore::NamedNodeMap::create):
        (NamedNodeMap):
        (WebCore::NamedNodeMap::NamedNodeMap): Instead of asserting m_element in every function, we
        now assert only in the constructor.
        * dom/Node.cpp:
        (WebCore::Node::dumpStatistics): Add a counter for elements with rare data, this allows us
        compare more clearly the impact of moving NamedNodeMap there.
        (WebCore::Node::isEqualNode): Remove use of mapsEquivalent(). It was dead code, because
        both entities and notations were always NULL.
        (WebCore::Node::compareDocumentPosition):
        * inspector/DOMPatchSupport.h:
        (WebCore):
        * svg/SVGElement.cpp:
        (WebCore::SVGElement::attributeChanged):

2012-03-08  Robin Cao  <robin.cao@torchmobile.com.cn>

        [BlackBerry] Upstream WebGL related files from platform/graphics
        https://bugs.webkit.org/show_bug.cgi?id=79876

        Reviewed by Rob Buis.

        Initial upstream, no new tests.

        * platform/graphics/blackberry/DrawingBufferBlackBerry.cpp: Added.
        (WebCore):
        (DrawingBufferInternal):
        (WebCore::generateColorTexture):
        (WebCore::DrawingBuffer::DrawingBuffer):
        (WebCore::DrawingBuffer::~DrawingBuffer):
        (WebCore::DrawingBuffer::publishToPlatformLayer):
        (WebCore::DrawingBuffer::reset):
        (WebCore::DrawingBuffer::platformLayer):
        * platform/graphics/blackberry/GraphicsContext3DBlackBerry.cpp: Added.
        (WebCore):
        (WebCore::GraphicsContext3D::create):
        (WebCore::GraphicsContext3D::GraphicsContext3D):
        (WebCore::GraphicsContext3D::~GraphicsContext3D):
        (WebCore::GraphicsContext3D::paintsIntoCanvasBuffer):
        (WebCore::GraphicsContext3D::makeContextCurrent):
        (WebCore::GraphicsContext3D::isGLES2Compliant):
        (WebCore::GraphicsContext3D::isGLES2NPOTStrict):
        (WebCore::GraphicsContext3D::isErrorGeneratedOnOutOfBoundsAccesses):
        (WebCore::GraphicsContext3D::platformTexture):
        (WebCore::GraphicsContext3D::platformLayer):
        (WebCore::GraphicsContext3D::paintToCanvas):
        (WebCore::GraphicsContext3D::setContextLostCallback):
        * platform/graphics/blackberry/WebGLLayerWebKitThread.cpp: Added.
        (WebCore):
        (WebCore::WebGLLayerWebKitThread::WebGLLayerWebKitThread):
        (WebCore::WebGLLayerWebKitThread::~WebGLLayerWebKitThread):
        (WebCore::WebGLLayerWebKitThread::setNeedsDisplay):
        (WebCore::WebGLLayerWebKitThread::updateTextureContentsIfNeeded):
        * platform/graphics/blackberry/WebGLLayerWebKitThread.h: Added.
        (WebCore):
        (WebGLLayerWebKitThread):
        (WebCore::WebGLLayerWebKitThread::create):
        (WebCore::WebGLLayerWebKitThread::setWebGLContext):

2012-03-08  Yong Li  <yoli@rim.com>

        [BlackBerry] LayerRender should turn off stencil/scissor after drawing layers
        https://bugs.webkit.org/show_bug.cgi?id=80598

        Reviewed by Rob Buis.

        Turn off stencil/scissor after using them to avoid affecting later GL operation
        accidentally.

        * platform/graphics/blackberry/LayerRenderer.cpp:
        (WebCore::LayerRenderer::drawLayers):

2012-03-08  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] Windows build fix.

        Reviewed by Tor Arne Vestbø.

        * DerivedSources.pri: Replace commandline that is too long for Windows with
        separate lines to be executed in the Makefile for the IDL preprocessing.

2012-03-08  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: The function had to return a hash but it returned just address.
        https://bugs.webkit.org/show_bug.cgi?id=80591

        Reviewed by Yury Semikhatsky.

        * bindings/v8/RetainedDOMInfo.cpp:
        (WebCore::RetainedDOMInfo::GetHash):

2012-03-08  Ilya Tikhonovsky  <loislo@chromium.org>

        Unreviewed single line fix. The function had to return a hash but it returned just address.

        * bindings/v8/V8GCController.cpp:
        (WebCore::UnspecifiedGroup::GetHash):

2012-03-08  Shinya Kawanaka  <shinyak@chromium.org>

        <shadow> should be rendered correctly.
        https://bugs.webkit.org/show_bug.cgi?id=78596

        Reviewed by Hajime Morita.

        This patch supports <shadow> element rendering.

        When attaching <shadow> element, if it is in the oldest shadow tree, it runs a part of
        distribution algorithm. If it is in non-oldest shadow tree, it runs tree a part of
        tree composition algorithm to assign a older shadow root. In this patch, InsertionPonit
        try to treat the distributed host children and the assigned shadow children similarly.

        NodeRenderingContext supports rendering <shadow> element. Since the assigned shadow children
        are treated like distributed host children, that change is to consider non-youngest shadow
        tree basically also.

        Tests: fast/dom/shadow/shadow-element-rendering-multiple.html
               fast/dom/shadow/shadow-element-rendering-single.html

        * dom/NodeRenderingContext.cpp:
        (WebCore):
        (WebCore::NodeRenderingContext::NodeRenderingContext):
          Does not ignore non-youngest shadow tree.
        * dom/ShadowRoot.cpp:
        (WebCore::ShadowRoot::ShadowRoot):
        * dom/ShadowRoot.h:
        (ShadowRoot):
        (WebCore::ShadowRoot::assignedTo):
        (WebCore):
        (WebCore::ShadowRoot::setAssignedTo):
        (WebCore::ShadowRoot::isUsedForRendering):
          Returns true if ShadowRoot is youngest or assigned to some InsertionPoint.
        (WebCore::toShadowRoot):
        * dom/ShadowTree.cpp:
        (WebCore::ShadowTree::insertionPointFor):
          Returns InsertionPoint to which node is distributed.
        * dom/ShadowTree.h:
        (ShadowTree):
        * html/shadow/HTMLContentElement.h:
        (WebCore::HTMLContentElement::doesSelectFromHostChildren):
        (HTMLContentElement):
        * html/shadow/HTMLShadowElement.cpp:
        (WebCore::HTMLShadowElement::HTMLShadowElement):
        (WebCore::HTMLShadowElement::select):
        (WebCore::HTMLShadowElement::doesSelectFromHostChildren):
        (WebCore):
        * html/shadow/HTMLShadowElement.h:
        (HTMLShadowElement):
        * html/shadow/InsertionPoint.cpp:
        (WebCore::InsertionPoint::attach):
        (WebCore::InsertionPoint::detach):
        (WebCore::InsertionPoint::assignedFrom):
        (WebCore):
        (WebCore::InsertionPoint::assignShadowRoot):
        (WebCore::InsertionPoint::clearAssignment):
        * html/shadow/InsertionPoint.h:
        (InsertionPoint):

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

        Speech JavaScript API: SpeechRecognitionAlternative, Result and ResultList
        https://bugs.webkit.org/show_bug.cgi?id=80424

        Reviewed by Adam Barth.

        Implement the SpeechRecognitionAlternative,
        SpeechRecognitionResult and SpeechRecognitionResultList.
        (Spec: http://speech-javascript-api-spec.googlecode.com/git/speechapi.html)

        No new tests because these interfaces don't have constructors.
        They will be tested as more of the API gets implemented.

        * Modules/speech/SpeechRecognitionAlternative.cpp: Added.
        (WebCore):
        (WebCore::SpeechRecognitionAlternative::create):
        (WebCore::SpeechRecognitionAlternative::SpeechRecognitionAlternative):
        * Modules/speech/SpeechRecognitionAlternative.h: Added.
        (WebCore):
        (SpeechRecognitionAlternative):
        (WebCore::SpeechRecognitionAlternative::transcript):
        (WebCore::SpeechRecognitionAlternative::confidence):
        * Modules/speech/SpeechRecognitionAlternative.idl: Added.
        * Modules/speech/SpeechRecognitionResult.cpp: Added.
        (WebCore):
        (WebCore::SpeechRecognitionResult::create):
        (WebCore::SpeechRecognitionResult::item):
        (WebCore::SpeechRecognitionResult::SpeechRecognitionResult):
        * Modules/speech/SpeechRecognitionResult.h: Added.
        (WebCore):
        (SpeechRecognitionResult):
        (WebCore::SpeechRecognitionResult::length):
        (WebCore::SpeechRecognitionResult::final):
        * Modules/speech/SpeechRecognitionResult.idl: Added.
        * Modules/speech/SpeechRecognitionResultList.cpp: Added.
        (WebCore):
        (WebCore::SpeechRecognitionResultList::create):
        (WebCore::SpeechRecognitionResultList::item):
        (WebCore::SpeechRecognitionResultList::SpeechRecognitionResultList):
        * Modules/speech/SpeechRecognitionResultList.h: Added.
        (WebCore):
        (SpeechRecognitionResultList):
        (WebCore::SpeechRecognitionResultList::length):
        * Modules/speech/SpeechRecognitionResultList.idl: Added.
        * WebCore.gypi:

2012-03-08  Robin Cao  <robin.cao@torchmobile.com.cn>

        [BlackBerry] Upstream GraphicsLayerBlackBerry.{h, cpp}
        https://bugs.webkit.org/show_bug.cgi?id=79867

        Reviewed by Rob Buis.

        Initial upstream, no new tests.

        * platform/graphics/blackberry/GraphicsLayerBlackBerry.cpp: Added.
        (WebCore):
        (WebCore::setLayerBorderColor):
        (WebCore::clearBorderColor):
        (WebCore::setLayerBackgroundColor):
        (WebCore::clearLayerBackgroundColor):
        (WebCore::GraphicsLayer::create):
        (WebCore::GraphicsLayerBlackBerry::GraphicsLayerBlackBerry):
        (WebCore::GraphicsLayerBlackBerry::~GraphicsLayerBlackBerry):
        (WebCore::GraphicsLayerBlackBerry::setName):
        (WebCore::GraphicsLayerBlackBerry::setChildren):
        (WebCore::GraphicsLayerBlackBerry::addChild):
        (WebCore::GraphicsLayerBlackBerry::addChildAtIndex):
        (WebCore::GraphicsLayerBlackBerry::addChildBelow):
        (WebCore::GraphicsLayerBlackBerry::addChildAbove):
        (WebCore::GraphicsLayerBlackBerry::replaceChild):
        (WebCore::GraphicsLayerBlackBerry::removeFromParent):
        (WebCore::GraphicsLayerBlackBerry::setPosition):
        (WebCore::GraphicsLayerBlackBerry::setAnchorPoint):
        (WebCore::GraphicsLayerBlackBerry::setSize):
        (WebCore::GraphicsLayerBlackBerry::setTransform):
        (WebCore::GraphicsLayerBlackBerry::setChildrenTransform):
        (WebCore::GraphicsLayerBlackBerry::setPreserves3D):
        (WebCore::GraphicsLayerBlackBerry::setMasksToBounds):
        (WebCore::GraphicsLayerBlackBerry::setDrawsContent):
        (WebCore::GraphicsLayerBlackBerry::setContentsVisible):
        (WebCore::GraphicsLayerBlackBerry::setMaskLayer):
        (WebCore::GraphicsLayerBlackBerry::setReplicatedByLayer):
        (WebCore::GraphicsLayerBlackBerry::setFixedPosition):
        (WebCore::GraphicsLayerBlackBerry::setHasFixedContainer):
        (WebCore::GraphicsLayerBlackBerry::setHasFixedAncestorInDOMTree):
        (WebCore::GraphicsLayerBlackBerry::setBackgroundColor):
        (WebCore::GraphicsLayerBlackBerry::clearBackgroundColor):
        (WebCore::GraphicsLayerBlackBerry::setContentsOpaque):
        (WebCore::GraphicsLayerBlackBerry::setBackfaceVisibility):
        (WebCore::GraphicsLayerBlackBerry::setOpacity):
        (WebCore::GraphicsLayerBlackBerry::setContentsNeedsDisplay):
        (WebCore::GraphicsLayerBlackBerry::setNeedsDisplay):
        (WebCore::GraphicsLayerBlackBerry::setNeedsDisplayInRect):
        (WebCore::GraphicsLayerBlackBerry::setContentsRect):
        (WebCore::removeAnimationByIdAndProperty):
        (WebCore::removeAnimationByName):
        (WebCore::GraphicsLayerBlackBerry::addAnimation):
        (WebCore::GraphicsLayerBlackBerry::pauseAnimation):
        (WebCore::GraphicsLayerBlackBerry::removeAnimation):
        (WebCore::GraphicsLayerBlackBerry::suspendAnimations):
        (WebCore::GraphicsLayerBlackBerry::resumeAnimations):
        (WebCore::GraphicsLayerBlackBerry::setContentsToImage):
        (WebCore::GraphicsLayerBlackBerry::updateContentsImage):
        (WebCore::GraphicsLayerBlackBerry::setContentsToCanvas):
        (WebCore::GraphicsLayerBlackBerry::setContentsToMedia):
        (WebCore::GraphicsLayerBlackBerry::hostLayerForSublayers):
        (WebCore::GraphicsLayerBlackBerry::layerForSuperlayer):
        (WebCore::GraphicsLayerBlackBerry::platformLayer):
        (WebCore::GraphicsLayerBlackBerry::setDebugBackgroundColor):
        (WebCore::GraphicsLayerBlackBerry::setDebugBorder):
        (WebCore::GraphicsLayerBlackBerry::updateSublayerList):
        (WebCore::GraphicsLayerBlackBerry::updateLayerPosition):
        (WebCore::GraphicsLayerBlackBerry::updateLayerSize):
        (WebCore::GraphicsLayerBlackBerry::updateAnchorPoint):
        (WebCore::GraphicsLayerBlackBerry::updateTransform):
        (WebCore::GraphicsLayerBlackBerry::updateChildrenTransform):
        (WebCore::GraphicsLayerBlackBerry::updateMasksToBounds):
        (WebCore::GraphicsLayerBlackBerry::updateContentsOpaque):
        (WebCore::GraphicsLayerBlackBerry::updateBackfaceVisibility):
        (WebCore::GraphicsLayerBlackBerry::updateLayerPreserves3D):
        (WebCore::GraphicsLayerBlackBerry::updateLayerIsDrawable):
        (WebCore::GraphicsLayerBlackBerry::updateFixedPosition):
        (WebCore::GraphicsLayerBlackBerry::updateHasFixedContainer):
        (WebCore::GraphicsLayerBlackBerry::updateHasFixedAncestorInDOMTree):
        (WebCore::GraphicsLayerBlackBerry::updateLayerBackgroundColor):
        (WebCore::GraphicsLayerBlackBerry::updateAnimations):
        (WebCore::GraphicsLayerBlackBerry::updateContentsVideo):
        (WebCore::GraphicsLayerBlackBerry::updateContentsRect):
        (WebCore::GraphicsLayerBlackBerry::setupContentsLayer):
        (WebCore::GraphicsLayerBlackBerry::updateOpacityOnLayer):
        (WebCore::GraphicsLayerBlackBerry::contentsVisible):
        * platform/graphics/blackberry/GraphicsLayerBlackBerry.h: Added.
        (WebCore):
        (GraphicsLayerBlackBerry):
        (WebCore::GraphicsLayerBlackBerry::notifySyncRequired):
        (WebCore::GraphicsLayerBlackBerry::notifyAnimationStarted):
        (WebCore::GraphicsLayerBlackBerry::primaryLayer):
        (WebCore::GraphicsLayerBlackBerry::contentsLayer):

2012-03-07  Shinya Kawanaka  <shinyak@chromium.org>

        Refactoring: Remove Node::isContentElement and Node::isShadowElement.
        https://bugs.webkit.org/show_bug.cgi?id=80501

        Reviewed by Hajime Morita.

        Removes Node::isContentElement and Node::isShadowElement. These methods are replaced
        by hasTagName. However the tag name of HTMLContentElement was not consistent,
        this patch make them consistent.

        No new tests. Should be covered by existing tests.

        * dom/Node.h:
        * html/HTMLElement.h:
        (WebCore::HTMLElement::isInsertionPoint):
        (HTMLElement):
        * html/HTMLSummaryElement.cpp:
        (WebCore::SummaryContentElement::SummaryContentElement):
          It uses HTMLNames::divTag as tagname. It should use HTMLNames::webkitShadowTagName.
        * html/shadow/HTMLContentElement.h:
        (HTMLContentElement):
        * html/shadow/InsertionPoint.h:
        (InsertionPoint):
        (WebCore::InsertionPoint::isInsertionPoint):
        (WebCore::isInsertionPoint):
        * testing/Internals.cpp:
        (WebCore::Internals::isValidContentSelect):
        * testing/Internals.h:
        (Internals):

2012-03-07  Adam Barth  <abarth@webkit.org>

        ContainerNode::insertedIntoDocument and removedFromDocument use weak iteration patterns
        https://bugs.webkit.org/show_bug.cgi?id=80569

        Reviewed by Ryosuke Niwa.

        This patch moves ContainerNode::insertedIntoDocument and
        removedFromDocument to using a better iteration pattern in which we
        collect all the nodes we're planning to iterate into a vector and then
        iterate over them.

        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::insertedIntoDocument):
        (WebCore::ContainerNode::removedFromDocument):

2012-03-07  Ami Fischman  <fischman@chromium.org>

        [Chromium] Allow CCLayerTreeHost::context() to be called even with the threaded compositor enabled.
        https://bugs.webkit.org/show_bug.cgi?id=80565

        Reviewed by James Robinson.

        This gets triggered by the video HW decode+render path when threaded compositor is enabled
        (https://chromiumcodereview.appspot.com/9639005/)

        No new tests.

        * platform/graphics/chromium/cc/CCLayerTreeHost.cpp:
        (WebCore::CCLayerTreeHost::context):

2012-03-07  Mike Lawther  <mikelawther@chromium.org>

        CSS3 calc: mixed absolute/percentages work for width, height, margin and padding
        https://bugs.webkit.org/show_bug.cgi?id=79621

        Reviewed by Andreas Kling.

        ApplyPropertyLength in CSSStyleApplyPropery now handles mixed absolute/percentage
        length expressions. All property handlers using this template now work with
        mixed expressions.

        This patch adds a new expression evaluator in CalculationValue.cpp. This is because
        Length.[cpp|h] (in platform) cannot refer to CSSCalculationValue.[cpp|h] (in css) 
        due to layering restrictions.

        Lengths can be copied, and so the expressions are stored in a hashmap, and only their
        ids are copied along with Length. The expressions are RefCounted, and will get 
        cleaned up when the last referring Length is destructed.

        * WebCore.exp.in:
        * css/CSSCalculationValue.cpp:
        (WebCore::CSSCalcPrimitiveValue::toCalcValue):
        (CSSCalcPrimitiveValue):
        (WebCore::CSSCalcBinaryOperation::toCalcValue):
        (CSSCalcBinaryOperation):
        * css/CSSCalculationValue.h:
        (WebCore):
        (CSSCalcExpressionNode):
        (CSSCalcValue):
        (WebCore::CSSCalcValue::toCalcValue):
        * css/CSSPrimitiveValue.cpp:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        * css/CSSStyleApplyProperty.cpp:
        (WebCore::ApplyPropertyLength::applyValue):
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::collectMatchingRulesForList):
        * css/CSSStyleSelector.h:
        (CSSStyleSelector):
        * platform/CalculationValue.cpp:
        (WebCore::CalcExpressionBinaryOperation::evaluate):
        (WebCore):
        (WebCore::CalculationValue::create):
        (WebCore::CalculationValue::evaluate):
        * platform/CalculationValue.h:
        (CalcExpressionNode):
        (WebCore::CalcExpressionNode::~CalcExpressionNode):
        (WebCore):
        (CalculationValue):
        (WebCore::CalculationValue::CalculationValue):
        (CalcExpressionNumber):
        (WebCore::CalcExpressionNumber::CalcExpressionNumber):
        (WebCore::CalcExpressionNumber::evaluate):
        (CalcExpressionLength):
        (WebCore::CalcExpressionLength::CalcExpressionLength):
        (WebCore::CalcExpressionLength::evaluate):
        (CalcExpressionBinaryOperation):
        (WebCore::CalcExpressionBinaryOperation::CalcExpressionBinaryOperation):
        * platform/Length.cpp:
        (WebCore):
        (WebCore::Length::~Length):
        (CalculationValueHandleMap):
        (WebCore::CalculationValueHandleMap::CalculationValueHandleMap):
        (WebCore::CalculationValueHandleMap::insert):
        (WebCore::CalculationValueHandleMap::remove):
        (WebCore::CalculationValueHandleMap::get):
        (WebCore::calcHandles):
        (WebCore::Length::Length):
        (WebCore::Length::calculationValue):
        (WebCore::Length::calculatedValue):
        (WebCore::Length::calculatedMinValue):
        (WebCore::Length::calculatedFloatValue):
        (WebCore::Length::incrementCalculatedRef):
        (WebCore::Length::decrementCalculatedRef):
        (WebCore::Length::nonNanCalculatedValue):
        * platform/Length.h:
        (Length):
        (WebCore::Length::Length):
        (WebCore::Length::operator=):
        (WebCore::Length::operator*=):
        (WebCore::Length::value):
        (WebCore::Length::setValue):
        (WebCore::Length::calcValue):
        (WebCore::Length::calcMinValue):
        (WebCore::Length::calcFloatValue):
        (WebCore::Length::isZero):
        (WebCore::Length::isPositive):
        (WebCore::Length::isNegative):
        (WebCore::Length::isPercent):
        (WebCore::Length::isSpecified):
        (WebCore::Length::isCalculated):
        (WebCore::Length::initFromLength):
        (WebCore::Length::calculationHandle):

2012-03-07  Kent Tamura  <tkent@chromium.org>

        Do not refer to resutlsButtonElement and cancelButtonElement to compute paddings of search popups
        https://bugs.webkit.org/show_bug.cgi?id=80564

        Reviewed by Hajime Morita.

        We'd like to reduce dependency of resultsButtonElement and
        cancelButtonElement from RenderTextControlSingleLine.

        No behavior change.

        * rendering/RenderTextControlSingleLine.cpp:
        (WebCore::RenderTextControlSingleLine::clientPaddingLeft):
        Use the left position of innerBlockElement, instead of the width of resultsButtonElement.
        They are equivalent.
        (WebCore::RenderTextControlSingleLine::clientPaddingRight):
        Use <the container width - right position of innerBlockElement>,
        instead of the width of the cancelButtonElement. They are
        equivalent.

2012-03-07  Mike Lawther  <mikelawther@chromium.org>

        use DEFINE_STATIC_LOCAL on Lengths to avoid exit time destructors
        https://bugs.webkit.org/show_bug.cgi?id=80561

        Reviewed by Eric Seidel.

        This is in preparation for http://wkb.ug/79621 where a destructor is added to Length.

        No new tests as this is not a behaviour change.

        * css/CSSStyleApplyProperty.cpp:
        (WebCore::ApplyPropertyPageSize::getPageSizeFromName):

2012-03-07  Adam Barth  <abarth@webkit.org>

        ContainerNode::willRemove uses a weak iteration pattern
        https://bugs.webkit.org/show_bug.cgi?id=80530

        Reviewed by Ryosuke Niwa.

        This patch moves ContainerNode::willRemove to using a better iteration
        pattern in which we collect all the nodes we're planning to iterate
        into a vector and then iterate over them.

        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::willRemove):

2012-03-07  Kentaro Hara  <haraken@chromium.org>

        [V8][Performance] Optimize V8 bindings for HTMLElement.classList,
        Element.dataset and Node.attributes
        https://bugs.webkit.org/show_bug.cgi?id=80376

        Reviewed by Adam Barth.

        This patch improves the performance of HTMLElement.classList, Element.dataset
        and Node.attributes by 6.4 times, 7.1 times and 10.9 times, respectively.

        Previously, a 'hiddenReferenceName' string was allocated on v8::Handle and
        created every time the DOM attribute is accessed, in spite of the fact that
        the 'hiddenReferenceName' string is static.

        This patch moves the 'hiddenReferenceName' string to v8::Persistent and makes it static.
        Also, this patch removes 'if (!elementValue.IsEmpty() && elementValue->IsObject())',
        since if 'element' exists, it is guaranteed that 'elementValue' is not empty
        and is an Object.

        Performance tests: https://bugs.webkit.org/attachment.cgi?id=130283

        AppleWebKit/JavaScriptCore:
        div.classList : 382ms
        div.classList.foo = 123 : 335ms
        div.dataset : 403ms
        div.dataset.foo = 123 : 5250ms
        div.attributes : 183ms

        Chromium/V8 (without this patch):
        div.classList : 9140ms
        div.classList.foo = 123 : 9086ms
        div.dataset : 9930ms
        div.dataset.foo = 123 : 49698ms
        div.attributes : 13489ms

        Chromium/V8 (with this patch):
        div.classList : 1435ms
        div.classList.foo = 123 : 1470ms
        div.dataset : 1400ms
        div.dataset.foo = 123 : 30396ms
        div.attributes : 1242ms

        No tests. No change in behavior.

        * bindings/v8/custom/V8DOMStringMapCustom.cpp: Modified as described above.
        (WebCore::toV8):
        * bindings/v8/custom/V8DOMTokenListCustom.cpp: Ditto.
        (WebCore::toV8):
        * bindings/v8/custom/V8NamedNodeMapCustom.cpp: Ditto.
        (WebCore::toV8):

        * bindings/v8/V8HiddenPropertyName.cpp: Defined a hidden property name string statically
        to optimize the macro.
        (WebCore):
        (WebCore::V8HiddenPropertyName::hiddenReferenceName):
        * bindings/v8/V8HiddenPropertyName.h: Modified to switch two prefixes "WebCore::HiddenProperty::"
        and "WebCore::HiddenReference::", depending on whether a given name represents a hidden property
        or a hidden reference.
        (WebCore):
        (V8HiddenPropertyName):

2012-03-07  Kent Tamura  <tkent@chromium.org>

        Add RenderBoxModelObject::marginWidth() and marginHeight()
        https://bugs.webkit.org/show_bug.cgi?id=80556

        Reviewed by Kentaro Hara.

        They make some code shorter.

        No behavior change.

        * rendering/RenderBoxModelObject.h:
        (WebCore::RenderBoxModelObject::marginHeight): Added.
        (WebCore::RenderBoxModelObject::marginWidth): Added.
        * inspector/DOMNodeHighlighter.cpp: Use marginHeight() and/or marginWidth().
        * rendering/RenderBlock.h:
        (WebCore::RenderBlock::FloatWithRect::FloatWithRect): ditto.
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::checkFloatsInCleanLine): ditto.
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::repaintLayerRectsForImage): ditto.
        * rendering/RenderDeprecatedFlexibleBox.cpp:
        (WebCore::RenderDeprecatedFlexibleBox::layoutHorizontalBox): ditto.
        (WebCore::RenderDeprecatedFlexibleBox::layoutVerticalBox): ditto.
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::crossAxisMarginExtentForChild): ditto.
        (WebCore::RenderFlexibleBox::computeNextFlexLine): ditto.
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::culledInlineAbsoluteRects): ditto.
        (WebCore::RenderInline::culledInlineAbsoluteQuads): ditto.
        (WebCore::RenderInline::culledInlineBoundingBox): ditto.
        * rendering/RenderScrollbar.cpp:
        (WebCore::RenderScrollbar::trackPieceRectWithMargins): ditto.
        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::computeLogicalHeight): ditto.
        * rendering/RenderTextControlSingleLine.cpp:
        (WebCore::RenderTextControlSingleLine::computeControlHeight): ditto.

2012-03-07  Jessie Berlin  <jberlin@apple.com>

        Clean Windows build fails after r110033
        https://bugs.webkit.org/show_bug.cgi?id=80553

        Rubber-stamped by Jon Honeycutt and Eric Seidel.

        * WebCore.vcproj/WebCore.vcproj:
        Update the expected location of the copied JSC WTF string implementation files.

2012-03-07  Michael Nordman  <michaeln@google.com>

        [Chromium] Don't be so CRASH() happy in the bindings layer.
        https://bugs.webkit.org/show_bug.cgi?id=75111
        - change the v8 bindings generated code to check for the 'worker is terminating'
          condition prior to committing a suicidal CRASH()
        - fixup custom v8 bindings accordingly
        - simplify bindings/generic/ActiveDOMCallback, there is no need for it to support
          destruction on a different thread

        Reviewed by David Levin.

        No new tests, existing tests apply.

        * bindings/generic/ActiveDOMCallback.cpp: Simplified in general.
        (WebCore):
        (WebCore::ActiveDOMCallback::ActiveDOMCallback):
        (WebCore::ActiveDOMCallback::~ActiveDOMCallback):
        (WebCore::ActiveDOMCallback::canInvokeCallback):
        (WebCore::ActiveDOMCallback::isScriptControllerTerminating): New method to avoid CRASH()ing in exceptional conditions in v8 bindings.
        * bindings/generic/ActiveDOMCallback.h: Derive from ContextDestructionObserver.
        * bindings/js/WorkerScriptController.cpp:
        (WebCore::WorkerScriptController::scheduleExecutionTermination): Use a mutex to provide a memory barrier.
        (WebCore::WorkerScriptController::isExecutionTerminating): New supporting method to avoid CRASH()ing in exceptional conditions.
        * bindings/js/WorkerScriptController.h:
        (WorkerScriptController):
        * bindings/scripts/CodeGeneratorV8.pm: Generates v8 bindding code that uses isScriptControllerTerminating to avoid CRASH()ing.
        (GenerateCallbackImplementation):
        * bindings/scripts/test/V8/V8TestCallback.cpp: Fixup expected outputs of the modified CodeGeneratorV8.pm script.
        (WebCore::V8TestCallback::callbackWithClass1Param):
        (WebCore::V8TestCallback::callbackWithClass2Param):
        (WebCore::V8TestCallback::callbackWithStringList):
        * bindings/v8/WorkerScriptController.cpp:
        (WebCore::WorkerScriptController::WorkerScriptController): Initialize a new data member.
        (WebCore::WorkerScriptController::scheduleExecutionTermination): Use a mutex to provide a memory barrier.
        (WebCore::WorkerScriptController::isExecutionTerminating): New supporting method to avoid CRASH()ing in exceptional conditions.
        * bindings/v8/WorkerScriptController.h: Add a pair of new data members, bool + mutex.
        (WorkerScriptController):
        * bindings/v8/custom/V8CustomSQLStatementErrorCallback.cpp:
        (WebCore::V8SQLStatementErrorCallback::handleEvent):
        * bindings/v8/custom/V8MutationCallbackCustom.cpp:
        (WebCore::V8MutationCallback::handleEvent):
        * dom/ScriptExecutionContext.cpp:
        (WebCore::ScriptExecutionContext::ScriptExecutionContext): Initilaize data members.
        (WebCore::ScriptExecutionContext::stopActiveDOMObjects): Set m_activeDOMObjectsAreStopped.
        * dom/ScriptExecutionContext.h: Add m_activeDOMObjectsAreStopped data member.
        (WebCore::ScriptExecutionContext::activeDOMObjectsAreStopped): Simple getter.
        (ScriptExecutionContext):

2012-03-07  Kent Tamura  <tkent@chromium.org>

        Remove meaningless code in RenderTextControlSingleLine::preferredContentWidth()
        https://bugs.webkit.org/show_bug.cgi?id=80493

        Reviewed by Hajime Morita.

        preferredContentWidth() added border+padding widths of the search result
        button, search cancel button, and speech input button. It makes no sense
        to make the intrinsic width wider by only their border+padding width,
        not their content width.

        The default borders and paddings of these buttons are 0 in all
        platforms, and adding border or padding to these elements by page
        authors made unreasonable behavior. So we had better remove this
        code.

        Tests: fast/forms/search/intrinsic-search-width-with-decoration-border-padding.html
               fast/speech/intrinsic-input-width-with-speech-border-padding.html

        * rendering/RenderTextControlSingleLine.cpp:
        (WebCore::RenderTextControlSingleLine::preferredContentWidth):
         Remove the meaningless code.
        * rendering/RenderTextControlSingleLine.h:
        (RenderTextControlSingleLine): Remove speechButtonElement(). It's unnecessary.

2012-03-07  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r110126.
        http://trac.webkit.org/changeset/110126
        https://bugs.webkit.org/show_bug.cgi?id=80558

        compile failed on AppleMac (Requested by ukai on #webkit).

        * WebCore.exp.in:
        * css/CSSCalculationValue.cpp:
        * css/CSSCalculationValue.h:
        (WebCore):
        (CSSCalcExpressionNode):
        (CSSCalcValue):
        * css/CSSPrimitiveValue.cpp:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        * css/CSSStyleApplyProperty.cpp:
        (WebCore::ApplyPropertyLength::applyValue):
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::collectMatchingRulesForList):
        * css/CSSStyleSelector.h:
        * platform/CalculationValue.cpp:
        * platform/CalculationValue.h:
        * platform/Length.cpp:
        (WebCore::newLengthArray):
        * platform/Length.h:
        (WebCore::Length::operator*=):
        (WebCore::Length::value):
        (WebCore::Length::setValue):
        (Length):
        (WebCore::Length::calcValue):
        (WebCore::Length::calcMinValue):
        (WebCore::Length::calcFloatValue):
        (WebCore::Length::isZero):
        (WebCore::Length::isPositive):
        (WebCore::Length::isNegative):
        (WebCore::Length::isPercent):
        (WebCore::Length::isSpecified):

2012-03-05  Caio Marcelo de Oliveira Filho  <caio.oliveira@openbossa.org>

        Make Node::dumpStatistics() work again
        https://bugs.webkit.org/show_bug.cgi?id=80327

        Reviewed by Ryosuke Niwa.

        Update the code in dumpStatistics() to the latest attribute storage changes. Also
        move the DUMP_NODE_STATISTICS define here from the Node.cpp, since its also used
        by Document.h.

        * dom/Node.cpp:
        (WebCore::Node::dumpStatistics): Use more self-describing variable names.
        * dom/Node.h:

2012-03-07  Mike Lawther  <mikelawther@chromium.org>

        CSS3 calc: mixed absolute/percentages work for width, height, margin and padding
        https://bugs.webkit.org/show_bug.cgi?id=79621

        Reviewed by Andreas Kling.

        ApplyPropertyLength in CSSStyleApplyPropery now handles mixed absolute/percentage
        length expressions. All property handlers using this template now work with
        mixed expressions.

        This patch adds a new expression evaluator in CalculationValue.cpp. This is because
        Length.[cpp|h] (in platform) cannot refer to CSSCalculationValue.[cpp|h] (in css) 
        due to layering restrictions.

        Lengths can be copied, and so the expressions are stored in a hashmap, and only their
        ids are copied along with Length. The expressions are RefCounted, and will get 
        cleaned up when the last referring Length is destructed.

        * WebCore.exp.in:
        * css/CSSCalculationValue.cpp:
        (WebCore::CSSCalcPrimitiveValue::toCalcValue):
        (CSSCalcPrimitiveValue):
        (WebCore::CSSCalcBinaryOperation::toCalcValue):
        (CSSCalcBinaryOperation):
        * css/CSSCalculationValue.h:
        (WebCore):
        (CSSCalcExpressionNode):
        (CSSCalcValue):
        (WebCore::CSSCalcValue::toCalcValue):
        * css/CSSPrimitiveValue.cpp:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        * css/CSSStyleApplyProperty.cpp:
        (WebCore::ApplyPropertyLength::applyValue):
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::collectMatchingRulesForList):
        * css/CSSStyleSelector.h:
        (CSSStyleSelector):
        * platform/CalculationValue.cpp:
        (WebCore::CalcExpressionBinaryOperation::evaluate):
        (WebCore):
        (WebCore::CalculationValue::create):
        (WebCore::CalculationValue::evaluate):
        * platform/CalculationValue.h:
        (CalcExpressionNode):
        (WebCore::CalcExpressionNode::~CalcExpressionNode):
        (WebCore):
        (CalculationValue):
        (WebCore::CalculationValue::CalculationValue):
        (CalcExpressionNumber):
        (WebCore::CalcExpressionNumber::CalcExpressionNumber):
        (WebCore::CalcExpressionNumber::evaluate):
        (CalcExpressionLength):
        (WebCore::CalcExpressionLength::CalcExpressionLength):
        (WebCore::CalcExpressionLength::evaluate):
        (CalcExpressionBinaryOperation):
        (WebCore::CalcExpressionBinaryOperation::CalcExpressionBinaryOperation):
        * platform/Length.cpp:
        (WebCore):
        (WebCore::Length::~Length):
        (CalculationValueHandleMap):
        (WebCore::CalculationValueHandleMap::CalculationValueHandleMap):
        (WebCore::CalculationValueHandleMap::insert):
        (WebCore::CalculationValueHandleMap::remove):
        (WebCore::CalculationValueHandleMap::get):
        (WebCore::calcHandles):
        (WebCore::Length::Length):
        (WebCore::Length::calculationValue):
        (WebCore::Length::calculatedValue):
        (WebCore::Length::calculatedMinValue):
        (WebCore::Length::calculatedFloatValue):
        (WebCore::Length::incrementCalculatedRef):
        (WebCore::Length::decrementCalculatedRef):
        (WebCore::Length::nonNanCalculatedValue):
        * platform/Length.h:
        (Length):
        (WebCore::Length::Length):
        (WebCore::Length::operator=):
        (WebCore::Length::operator*=):
        (WebCore::Length::value):
        (WebCore::Length::setValue):
        (WebCore::Length::calcValue):
        (WebCore::Length::calcMinValue):
        (WebCore::Length::calcFloatValue):
        (WebCore::Length::isZero):
        (WebCore::Length::isPositive):
        (WebCore::Length::isNegative):
        (WebCore::Length::isPercent):
        (WebCore::Length::isSpecified):
        (WebCore::Length::isCalculated):
        (WebCore::Length::initFromLength):
        (WebCore::Length::calculationHandle):

2012-03-07  Emil A Eklund  <eae@chromium.org>

        Change remaining scroll methods to integers
        https://bugs.webkit.org/show_bug.cgi?id=80539

        Reviewed by Eric Seidel.

        No new tests, no new functionality.

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::scrollByRecursively):
        (WebCore::RenderLayer::scrollToOffset):
        (WebCore::RenderLayer::scrollRectToVisible):
        (WebCore::RenderLayer::scrollToXOffset):
        (WebCore::RenderLayer::scrollToYOffset):
        Change scrollTo methods to take integer x and y values as the actual
        scrolling is done in increments of full pixels.
        
        (WebCore::cornerStart):
        (WebCore::RenderLayer::scrollWidth):
        (WebCore::RenderLayer::scrollHeight):
        Change scrollWidth/Height to return pixel snapped values and remove
        pixelSnapped versions of same as all callers either used snapped the
        values or used the pixelSnapped versions of these methods.

        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::scrollWidth):
        Change scrollWidth to return snapped client width.
        
        * rendering/RenderListBox.h:
        Change scrollSize, scrollPosition and setScrollOffset methods to use
        integers in accordance with the interface defined by ScrollableArea.
        
        * rendering/RenderTreeAsText.cpp:
        (WebCore::write):

2012-03-07  Caio Marcelo de Oliveira Filho  <caio.oliveira@openbossa.org>

        Implement getAttributeNode() in terms of ElementAttributeData instead of NamedNodeMap
        https://bugs.webkit.org/show_bug.cgi?id=80541

        Reviewed by Ryosuke Niwa.

        DOM methods exposed in Element and NamedNodeMap are now implemented in terms of
        ElementAttributeData. The difference between them is that Element methods can early
        return if there's no attribute storage.

        * dom/Element.cpp:
        (WebCore::Element::getAttributeNode):
        Removed the manual lowercasing letting our existing mechanism in
        ElementAttributeData::getAttributeItemIndex() take care of it. I considered that
        this could be an optimization, but testing a few Dromaeo tests (dom-attr,
        jslib-attr-jquery, jslib-attr-prototype) the difference isn't significant. It
        shouldn't affect correctness either.

        (WebCore::Element::getAttributeNodeNS):
        * dom/ElementAttributeData.cpp:
        * dom/ElementAttributeData.h:
        (ElementAttributeData):
        (WebCore::ElementAttributeData::getAttributeNode):
        (WebCore):
        * dom/NamedNodeMap.cpp:
        (WebCore::NamedNodeMap::getNamedItem):
        (WebCore::NamedNodeMap::getNamedItemNS):
        * dom/NamedNodeMap.h:
        (NamedNodeMap):

2012-03-07  James Robinson  <jamesr@chromium.org>

        [chromium] Support printing WebGL content in threaded compositor
        https://bugs.webkit.org/show_bug.cgi?id=80464

        Reviewed by Kenneth Russell.

        Do the readback on the WebGL context instead of the compositor's context since we cannot use the latter from the
        main thread. Since we're on the WebGL context, we have to be careful to restore any state we change.

        Tested printing manually with threaded compositing enabled.

        * platform/graphics/chromium/WebGLLayerChromium.cpp:
        (WebCore::WebGLLayerChromium::paintRenderedResultsToCanvas):
        * platform/graphics/chromium/WebGLLayerChromium.h:
        (WebGLLayerChromium):

2012-03-07  Adam Barth  <abarth@webkit.org>

        Remove #define private public from WebCache.cpp
        https://bugs.webkit.org/show_bug.cgi?id=80520

        Reviewed by Eric Seidel.

        Add some accessors for state used by WebCache.cpp.

        * loader/cache/MemoryCache.h:
        (WebCore::MemoryCache::minDeadCapacity):
        (WebCore::MemoryCache::maxDeadCapacity):
        (WebCore::MemoryCache::capacity):
        (WebCore::MemoryCache::liveSize):
        (WebCore::MemoryCache::deadSize):
        (MemoryCache):

2012-03-07  Kentaro Hara  <haraken@chromium.org>

        [V8][Performance] Optimize Element.firstElementChild, Element.lastElementChild,
        Element.previousElementSibling, Element.nextElementSibling, Node.parentElement
        https://bugs.webkit.org/show_bug.cgi?id=80506

        Reviewed by Adam Barth.

        This patch improves the performance of Element.firstElementChild by 5.8 times,
        Element.lastElementChild by 6.2 times, Element.previousElementSibling by 7.1 times,
        Element.nextElementSibling by 7.1 times, and Node.parentElement by 6.7 times.

        Previously, while toV8(Node*) caches a wrapper object on a node object
        (i.e. node->wrapper(), node->setWrapper()), toV8(Element*) does not
        cache a wrapper object.

        This patch removes toV8(Element*), so that DOM attribute getters that return
        Element* use toV8(Node*). This change makes these DOM attribute getters
        cache the wrapper object on a node object. This optimization is already
        implemented in JavaScriptCore.

        Performance tests: https://bugs.webkit.org/attachment.cgi?id=130594

        The test results in my local Mac environment are as follows:

        AppleWebKit/JavaScriptCore:
        div.firstElementChild : 1162ms
        div.lastElementChild : 1016ms
        div.previousElementSibling : 918ms
        div.nextElementSibling : 900ms
        div.parentElement : 901ms

        Chromium/V8 (without this patch):
        div.firstElementChild : 9515ms
        div.lastElementChild : 9449ms
        div.previousElementSibling : 9254ms
        div.nextElementSibling : 9315ms
        div.parentElement : 9380ms

        Chromium/V8 (with this patch):
        div.firstElementChild : 1628ms
        div.lastElementChild : 1527ms
        div.previousElementSibling : 1310ms
        div.nextElementSibling : 1310ms
        div.parentElement : 1410ms

        No tests. No change in behavior.

        * dom/Element.idl: Removed toV8(Element*)
        * bindings/v8/custom/V8NodeCustom.cpp: Ditto.
        (WebCore::toV8Slow):
        * bindings/scripts/CodeGeneratorV8.pm: Ditto.
        (GenerateHeader):

        * bindings/v8/custom/V8ElementCustom.cpp: Removed.
        * Target.pri: Removed V8ElementCustom.cpp.
        * UseV8.cmake: Ditto.
        * WebCore.gypi: Ditto.

2012-03-07  Joshua Bell  <jsbell@chromium.org>

        [Chromium] IndexedDB: V8LocalContext creation in IDBKey extraction/injection is slow
        https://bugs.webkit.org/show_bug.cgi?id=80358

        Cache a re-usable context (per isolate) for cases like IDB's key/SSV extraction/injection,
        where no user script is run. This yields a 3x-4x performance improvement in basic IDB
        operations.

        Reviewed by Tony Chang.

        No new tests - no behavior changes.

        * bindings/v8/IDBBindingUtilities.cpp:
        (WebCore::createIDBKeyFromSerializedValueAndKeyPath):
        (WebCore::injectIDBKeyIntoSerializedValue):
        * bindings/v8/V8Binding.h:
        (WebCore::V8BindingPerIsolateData::auxiliaryContext):
        (V8BindingPerIsolateData):
        * bindings/v8/V8Utilities.cpp:
        (WebCore::V8AuxiliaryContext::V8AuxiliaryContext):
        (WebCore::V8AuxiliaryContext::~V8AuxiliaryContext):
        (WebCore::V8AuxiliaryContext::auxiliaryContext):
        * bindings/v8/V8Utilities.h:
        (V8AuxiliaryContext):

2012-03-07  Nat Duca  <nduca@chromium.org>

        [chromium] Remove unused wasRecreate variable
        https://bugs.webkit.org/show_bug.cgi?id=80533

        Reviewed by Adrienne Walker.

        * platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:
        (WebCore::CCLayerTreeHostImpl::initializeLayerRenderer):

2012-03-07  Ryan Sleevi  <rsleevi@chromium.org>

        [chromium] Update GYP files to reflect file deletes/renames
        https://bugs.webkit.org/show_bug.cgi?id=80525

        Reviewed by Ryosuke Niwa.

        No change in functionality, so no tests.

        * WebCore.gypi:
        Updated AppleMac private headers due to r109877
        Updated platform/qt references due to r109542
        Updated platform/mac references due to r109147
        Updated platform/mac references due to r108956

2012-03-07  Eric Carlson  <eric.carlson@apple.com>

        Html5 video element Useragent string is Quicktime
        https://bugs.webkit.org/show_bug.cgi?id=46241

        Reviewed by Daniel Bates.

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

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::mediaPlayerUserAgent): Return the UA string for the current source.
        * html/HTMLMediaElement.h:

        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::userAgent):  New, return the client's mediaPlayerUserAgent.
        * platform/graphics/MediaPlayer.h:
        (WebCore::MediaPlayerClient::mediaPlayerUserAgent):

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createAVAssetForURL): Tell AVFoundation to set
            the UA header.

2012-03-07  Scott Byer  <scottbyer@chromium.org>

        Get ScrollAnimatorNone to handle the stop and reverse cases.
        https://bugs.webkit.org/show_bug.cgi?id=80455

        Reviewed by James Robinson.

        Chromium webkit_unit_tests ScrollAnimatorNoneTest.ScrollStopInMiddle and
        ScrollAnimatorNoneTest.ReverseInMiddle.

        * platform/ScrollAnimatorNone.cpp:
        (WebCore::ScrollAnimatorNone::PerAxisData::updateDataFromParameters):

2012-03-07  Yong Li  <yoli@rim.com>

        RenderImage ignores its percent width/height when setContainerSizeForRenderer
        https://bugs.webkit.org/show_bug.cgi?id=80431

        Reviewed by George Staikos.

        Not only respect fixed width/height explicitly specified in img element, but also
        respect percent width/height when determining container size for images.

        No new tests because there is no functional change but only internal buffer sizes.

        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::computeReplacedLogicalWidth):

2012-03-06  Benjamin Poulain  <bpoulain@apple.com>

        [Mac] Update the configuration files for iOS
        https://bugs.webkit.org/show_bug.cgi?id=80435

        Reviewed by David Kilzer.

        * Configurations/WebCore.xcconfig:

2012-03-07  Dana Jansens  <danakj@chromium.org>

        [chromium] Cull occluded tiles during paint
        https://bugs.webkit.org/show_bug.cgi?id=76838

        Reviewed by Adrienne Walker.

        Using CCOcclusionTracker instead of the old custom paint occlusion
        tracking. Stops painting tiles when the tile is not visible.

        CCOcclusionTracker only uses Layer::opaque() for determining
        occlusion so far. The Layer::addSelfToOccludedRegion is being
        replaced by a superior method in CCOcclusionTracker that will
        work for both threads, so removing that support here.

        Unit test: TiledLayerChromiumTest.cpp

        * platform/graphics/chromium/ContentLayerChromium.cpp:
        (WebCore::ContentLayerChromium::paintContentsIfDirty):
        (WebCore::ContentLayerChromium::idlePaintContentsIfDirty):
        * platform/graphics/chromium/ContentLayerChromium.h:
        (ContentLayerChromium):
        * platform/graphics/chromium/ImageLayerChromium.cpp:
        (WebCore::ImageLayerChromium::paintContentsIfDirty):
        * platform/graphics/chromium/LayerChromium.cpp:
        * platform/graphics/chromium/LayerChromium.h:
        (WebCore::LayerChromium::idlePaintContentsIfDirty):
        (LayerChromium):
        * platform/graphics/chromium/TiledLayerChromium.cpp:
        (WebCore):
        (WebCore::contentToLayerTransform):
        (WebCore::TiledLayerChromium::prepareToUpdateTiles):
        (WebCore::TiledLayerChromium::prepareToUpdate):
        (WebCore::TiledLayerChromium::prepareToUpdateIdle):
        * platform/graphics/chromium/TiledLayerChromium.h:
        (TiledLayerChromium):
        * platform/graphics/chromium/cc/CCLayerTreeHost.cpp:
        (WebCore::CCLayerTreeHost::paintContentsIfDirty):
        (WebCore::CCLayerTreeHost::paintLayerContents):

2012-03-07  Caio Marcelo de Oliveira Filho  <caio.oliveira@openbossa.org>

        Implement removeAttributeNode() in terms of ElementAttributeData instead of NamedNodeMap
        https://bugs.webkit.org/show_bug.cgi?id=80522

        Reviewed by Andreas Kling.

        DOM methods exposed in Element and NamedNodeMap are now implemented in terms of
        ElementAttributeData. A helper function takeAttribute() was added to increase
        code sharing. Also removed some unneeded methods.

        * dom/Element.cpp:
        (WebCore::Element::removeAttribute): Use ElementAttributeData function directly.
        (WebCore::Element::removeAttributeNode): Get the index manually and use new
        takeAttribute() directly.
        * dom/Element.h:
        (Element): Remove unused removeAttribute(unsigned index).
        * dom/ElementAttributeData.cpp:
        (WebCore::ElementAttributeData::takeAttribute): Like removeAttribute() but
        returns a reference to old Attr.
        (WebCore):
        * dom/ElementAttributeData.h:
        (ElementAttributeData):
        * dom/NamedNodeMap.cpp:
        (WebCore::NamedNodeMap::removeNamedItem): Avoid looking up the property twice by
        getting the index directly from the name, instead of going through the qualified name.
        * dom/NamedNodeMap.h: Remove now unused internal methods for removing attributes.

2012-03-07  Alexey Proskuryakov  <ap@apple.com>

        Merge AsyncFileStream with FileStreamProxy
        https://bugs.webkit.org/show_bug.cgi?id=80325

        Build fix.

        * WebCore.xcodeproj/project.pbxproj: Removed files that got mysteriously added to the project
        with a merge.

2012-03-07  Julien Chaffraix  <jchaffraix@webkit.org>

        Unreviewed ASSERT failure fix.
        https://bugs.webkit.org/show_bug.cgi?id=75568

        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::styleDidChange):
        Fix a bad merge of the patch, we should call updateCachedSizeForOverflowClip if we lose
        our layer.

2012-03-07  ChangSeok Oh  <shivamidow@gmail.com>

        [EFL] Revise PlatformKeyboardEventEfl and EflKeyboardUtilities
        https://bugs.webkit.org/show_bug.cgi?id=80511

        Reviewed by Gustavo Noronha Silva.

        Added 'const' keyword in front of argument of keyIdentifiersForEvasKeyName/windowsKeyCodeForEvasKeyName.
        Since they should not be changed while processing each function.
        And initialized missing member variables of PlatformKeyboardEventEfl.

        No new tests, since no new feature.

        * platform/efl/EflKeyboardUtilities.cpp:
        (WebCore::keyIdentifierForEvasKeyName): Added const keyword
        (WebCore::windowsKeyCodeForEvasKeyName): Added const keyword
        * platform/efl/EflKeyboardUtilities.h:
        (WebCore):
        * platform/efl/PlatformKeyboardEventEfl.cpp:
        (WebCore::PlatformKeyboardEvent::PlatformKeyboardEvent):

2012-03-07  Hironori Bono  <hbono@chromium.org>

        [Chromium] Mirror the resizer image of an RTL element when WTF_USE_RTL_SCROLLBAR is 1
        https://bugs.webkit.org/show_bug.cgi?id=9223

        Reviewed by Tony Chang.

        This change mirrors a resizer image of an RTL element horizontall as Firefox
        does. This change also mirrors its dragging behavior, i.e. draging the resizer
        of an RTL element to the left side increases its width. (This feature is enabled
        only when WTF_USE_RTL_SCROLLBAR is 1.)

        Test: platform/chromium/scrollbars/drag-rtl-resizer.html

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::resize): Mirrored the x coordinate of mouse positions
        when mirroring a resizer.
        (WebCore::RenderLayer::offsetFromResizeCorner): Returned the offset from the
        bottom-left corner when rendering a resizer there.
        (WebCore::RenderLayer::drawPlatformResizerImage): Mirrored the resizer bitmap
        horizontally when rendering a resizer to the bottom-left corner.

2012-03-07  Julien Chaffraix  <jchaffraix@webkit.org>

        Lazily allocate overflow: hidden layers if we have overflowing content
        https://bugs.webkit.org/show_bug.cgi?id=75568

        Reviewed by David Hyatt.

        Change covered by the existing tests and the tons of rebaselines.

        This change makes us lazily allocate our RenderLayer for overflow: hidden layers only.

        Apart from saving some memory, it will also speed up the rendering as we don't need to
        go through the layer's machinery when painting and hit testing.

        On http://dglazkov.github.com/performance-tests/biggrid.html benchmark, this puts the
        overflow: hidden case in par with the overflow: visible case when scrolling that is a
        very-smooth scrolling vs a jerky one currently (mostly due to the painting speedup).

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::updateScrollInfoAfterLayout):
        Changed this method to update our size cache if needed.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::layoutBlock):
        (WebCore::RenderBlock::paint):
        (WebCore::RenderBlock::isPointInOverflowControl):
        * rendering/RenderBlock.h:
        (RenderBlock):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::willBeDestroyed):
        (WebCore::RenderBox::styleDidChange):
        (WebCore::RenderBox::layout):
        (WebCore::RenderBox::scrollWidth):
        (WebCore::RenderBox::scrollHeight):
        (WebCore::RenderBox::scrollLeft):
        (WebCore::RenderBox::scrollTop):
        (WebCore::RenderBox::setScrollLeft):
        (WebCore::RenderBox::setScrollTop):
        (WebCore::RenderBox::includeVerticalScrollbarSize):
        (WebCore::RenderBox::includeHorizontalScrollbarSize):
        (WebCore::RenderBox::scrolledContentOffset):
        (WebCore::RenderBox::pushContentsClip):
        (WebCore::RenderBox::popContentsClip):
        (WebCore::RenderBox::addLayoutOverflow):
        Added layer() check to the previous call sites.

        (WebCore::cachedSizeForOverflowClipMap):
        (WebCore::RenderBox::cachedSizeForOverflowClip):
        (WebCore::RenderBox::updateCachedSizeForOverflowClip):
        (WebCore::RenderBox::clearCachedSizeForOverflowClip):
        This logic stores the size information for later repainting.
        It is in practice replicating what RenderLayer is doing.
        I had to disable an ASSERT here as it would trigger in NRWT but
        not under DRT. I haven't found by code inspection what was wrong.

        * rendering/RenderBox.h:
        (WebCore::RenderBox::hasOverflowClipWithLayer):
        Helper function.

        (WebCore::RenderBox::requiresLayerForOverflowClip):
        This determines if we can survive without a RenderLayer. For the moment,
        it is very conservative.

        (WebCore::RenderBox::requiresLayer):
        Updated to call requiresLayerForOverflowClip.

        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::ensureLayer):
        Added this function to create and add a new layer.

        (WebCore::RenderBoxModelObject::willBeDestroyed):
        (WebCore::RenderBoxModelObject::styleDidChange):
        Patched those method to handle updating / removing
        cached size entries.

        * rendering/RenderBoxModelObject.h:
        (WebCore::RenderBoxModelObject::requiresLayer):
        Pushed the overflowClip check down to RenderBox as only RenderBoxes can have
        overflow clips.

        * rendering/RenderTableRow.h:
        (WebCore::RenderTableRow::requiresLayer):
        Added a comment about why we need a layout for table rows.

        * rendering/RenderDeprecatedFlexibleBox.cpp:
        (WebCore::RenderDeprecatedFlexibleBox::layoutBlock):
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::layoutBlock):
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::layout):
        Updated those call sites to use RenderBlock::updateScrollInfoAfterLayout
        or RenderBox::updateCachedSizeForOverflowClip. The current logic is really
        not tight proof and would need to be rethought to not avoid cases.

2012-03-07  Konrad Piascik  <kpiascik@rim.com>

        [BlackBerry] Fix warnings in CookieMap
        https://bugs.webkit.org/show_bug.cgi?id=80512

        Reviewed by Rob Buis.

        No new tests. No behavioural changes.

        * platform/blackberry/CookieMap.cpp:
        (WebCore::CookieMap::addOrReplaceCookie):
        (WebCore::CookieMap::removeCookie):
        (WebCore::CookieMap::getAllCookies):
        (WebCore::CookieMap::updateOldestCookie):

2012-03-07  Levi Weintraub  <leviw@chromium.org>

        Update usage of LayoutUnits in InlineBox and InlineFlowBox
        https://bugs.webkit.org/show_bug.cgi?id=80051

        Reviewed by Eric Seidel.

        Updating LayoutUnit vs Integer usage in InlineBox and InlineFlowBox. While the
        line box tree remains floating point, margins are now subpixel, and rects from
        the render tree use LayoutUnits. For more information, see the LayoutUnit wiki
        page: https://trac.webkit.org/wiki/LayoutUnit

        No new tests. No change in behavior.

        * rendering/InlineBox.cpp:
        (WebCore::InlineBox::flipForWritingMode): Changing over to LayoutUnits.
        * rendering/InlineBox.h:
        (InlineBox):
        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::getFlowSpacingLogicalWidth): Returning a LayoutUnit
        instead of an integer, as it uses margin which is a LayoutUnit.
        (WebCore::InlineFlowBox::placeBoxesInInlineDirection): Using a LayoutUnit for
        margin.
        (WebCore::InlineFlowBox::placeBoxesInBlockDirection): Build fixes for when
        LayoutUnits are subpixel.
        (WebCore::InlineFlowBox::paintFillLayer): Ditto.
        * rendering/InlineFlowBox.h:
        (WebCore::InlineFlowBox::marginBorderPaddingLogicalLeft): Returning a LayoutUnit
        instead of an integer since margin is a LayoutUnit.
        (WebCore::InlineFlowBox::marginBorderPaddingLogicalRight): Ditto.
        (InlineFlowBox):
        (WebCore::InlineFlowBox::logicalLeftLayoutOverflow): Adding a static_cast that's
        redundant now, but required when we switch to subpixel LayoutUnits.
        (WebCore::InlineFlowBox::logicalRightLayoutOverflow): Ditto.
        (WebCore::InlineFlowBox::logicalLeftVisualOverflow): Ditto.
        (WebCore::InlineFlowBox::logicalRightVisualOverflow): Ditto.

2012-03-07  Qi Zhang  <qi.2.zhang@nokia.com>

        [Qt] Unskip http/tests/websocket/tests/hixie76/long-invalid-header.html
        https://bugs.webkit.org/show_bug.cgi?id=80516

        Reviewed by Csaba Osztrogonác.

        Missed some files related to websocket, take them in.

        * Target.pri:

2012-03-05  Alexey Proskuryakov  <ap@apple.com>

        Merge AsyncFileStream with FileStreamProxy
        https://bugs.webkit.org/show_bug.cgi?id=80325

        Reviewed by Filip Pizlo.

        AsyncFileStream sounds like a platform concept, but the implementation is web specific.
        Better to just keep it in one place.

        This is a step toward decoupling blob scheme support from ResourceHandle, which is supposed
        to be an interface to platform networking APIs only, and definitely shouldn't know about
        Web concepts.

        No change in functionality, so no tests.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        Updated for moved and removed files. Namely, platform/AsyncFileStream is dead, and
        fileapi/FileStreamProxy is now fileapi/AsyncFileStream.

        * fileapi/AsyncFileStream.cpp: Copied from Source/WebCore/fileapi/FileStreamProxy.cpp.
        (WebCore::AsyncFileStream::AsyncFileStream):
        (WebCore::AsyncFileStream::create):
        (WebCore::AsyncFileStream::~AsyncFileStream):
        (WebCore::AsyncFileStream::fileThread):
        (WebCore::didStart):
        (WebCore::AsyncFileStream::startOnFileThread):
        (WebCore::AsyncFileStream::stop):
        (WebCore::derefProxyOnContext):
        (WebCore::AsyncFileStream::stopOnFileThread):
        (WebCore::didGetSize):
        (WebCore::AsyncFileStream::getSize):
        (WebCore::AsyncFileStream::getSizeOnFileThread):
        (WebCore::didOpen):
        (WebCore::AsyncFileStream::openForRead):
        (WebCore::AsyncFileStream::openForReadOnFileThread):
        (WebCore::AsyncFileStream::openForWrite):
        (WebCore::AsyncFileStream::openForWriteOnFileThread):
        (WebCore::AsyncFileStream::close):
        (WebCore::AsyncFileStream::closeOnFileThread):
        (WebCore::didRead):
        (WebCore::AsyncFileStream::read):
        (WebCore::AsyncFileStream::readOnFileThread):
        (WebCore::didWrite):
        (WebCore::AsyncFileStream::write):
        (WebCore::AsyncFileStream::writeOnFileThread):
        (WebCore::didTruncate):
        (WebCore::AsyncFileStream::truncate):
        (WebCore::AsyncFileStream::truncateOnFileThread):
        * fileapi/AsyncFileStream.h: Copied from Source/WebCore/fileapi/FileStreamProxy.h.
        (WebCore):
        (AsyncFileStream):
        (WebCore::AsyncFileStream::client):
        (WebCore::AsyncFileStream::setClient):
        * fileapi/FileStreamProxy.cpp: Removed.
        * fileapi/FileStreamProxy.h: Removed.
        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::createAsyncFileStream):
        * platform/AsyncFileStream.h: Removed.
        Fewer files!

        * platform/network/BlobRegistry.h: Removed createResourceHandle(). It's logically a method
        on in-process BlobRegistryImpl only, and we no longer need to call this from platform code.

        * platform/network/BlobRegistryImpl.cpp:
        (WebCore::createResourceHandle):
        (WebCore::registerBlobResourceHandleConstructor):
        (WebCore::BlobRegistryImpl::registerBlobURL):
        * platform/network/BlobRegistryImpl.h:
        Except for chromium, "blob" is a scheme that's handled internally. Added hooks for that.

        * platform/network/ResourceHandle.cpp:
        (WebCore::builtinResourceHandleConstructorMap):
        (WebCore::ResourceHandle::registerBuiltinConstructor):
        (WebCore::ResourceHandle::create):
        * platform/network/ResourceHandle.h:
        Added a way for other code to register handlers for URL schemes. Non-Chromium platforms
        use this for blob: now.

2012-03-07  Dan Bernstein  <mitz@apple.com>

        <rdar://problem/10923294> REGRESSION (r100847): Entries are clipped out in Day One
        https://bugs.webkit.org/show_bug.cgi?id=80494

        Reviewed by Sam Weinig.

        Test: fast/dom/HTMLDocument/width-and-height.html

        * html/HTMLDocument.idl: Reverted r100847 by re-enabling the width and height properties
        in the JavaScript bindings.

2012-03-07  Philippe Normand  <pnormand@igalia.com>

        [GTK] media/audio-garbage-collect.html is flaky
        https://bugs.webkit.org/show_bug.cgi?id=72698

        Reviewed by Xan Lopez.

        Call ::hasPendingActivity() instead of ::paused() when checking if
        the audio element is still active. This is similar to what the
        image element (another ActiveDOMObject implementation) does just
        above. This contributes to fixing the audio-garbage-collect.html
        test.

        * bindings/js/JSNodeCustom.cpp:
        (WebCore::isReachableFromDOM):

2012-03-07  Adele Peterson  <adele@apple.com>

        REGRESSION(r96566): Cursor is I-beam upon dragging an attachment in mail
        https://bugs.webkit.org/show_bug.cgi?id=80458
        <rdar://problem/10873195>

        Reviewed by Dan Bernstein.

        No tests because we currently don't have any test machinery for cursors.

        Make sure the shortcut to always use an iBeam cursor during selection isn't used during dragging.
        Before r96566, we handled plugin cursors as a special case before calling into selectCursor, so we never hit this code path.

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

2012-03-07  ChangSeok Oh  <shivamidow@gmail.com>

        [EFL] Key press event is not processed properly.
        https://bugs.webkit.org/show_bug.cgi?id=80491

        Reviewed by Gustavo Noronha Silva.

        This issue is related with mutation observer feature.
        If enter key is pressed, then a keyboard event should be processed
        and reach to the mutation observer, but it doesn't.
        Some special keys like Enter, Backspace and Tab key should be processed
        and change to a single character code, but EFL port hasn't handled like that.

        At least we can verify this with following two tests as I know. but they require another
        functionality for bug79601. I'm going to submit the patch for it after this one.

        Test: fast/mutation/end-of-task-delivery.html
              fast/mutation/inline-event-listener.html

        * platform/efl/EflKeyboardUtilities.cpp:
        (WebCore::singleCharacterString):
        (WebCore):
        * platform/efl/EflKeyboardUtilities.h:
        (WebCore):
        * platform/efl/PlatformKeyboardEventEfl.cpp:
        (WebCore::PlatformKeyboardEvent::PlatformKeyboardEvent):

2012-03-07  Gavin Peters  <gavinp@chromium.org>

        Add Histograms for reporting on PageCache reject reasons
        https://bugs.webkit.org/show_bug.cgi?id=80187

        Enhance the PageCache debug mode so that it uses Histograms to
        report on causes of failure.  Turn on the debug printing path
        even in non-debug Chromium builds, so these histograms will
        update.

        Reviewed by Brady Eidson.

        No new tests, does not change behaviour.

        * history/PageCache.cpp:
        (WebCore):
        (WebCore::logCanCacheFrameDecision):
        (WebCore::logCanCachePageDecision):
        (WebCore::PageCache::canCache):

2012-03-07  Elliot Poger  <epoger@google.com>

        [Chromium] Remove use_skia option from GYP
        https://bugs.webkit.org/show_bug.cgi?id=75811

        Reviewed by Tony Chang.

        * WebCore.gyp/WebCore.gyp:

2012-03-07  Yoshifumi Inoue  <yosin@chromium.org>

        [Forms] Introduce LabelableElement to share "labels" attribute implementation
        https://bugs.webkit.org/show_bug.cgi?id=80392

        Reviewed by Kent Tamura.

        This patch introduces new class LabelableElement as base class of
        HTMLFormControlElement for sharing implementation of "labels" 
        attribute among form-associate elements, "meter" element, and 
        "progress" element.

        This patch allows us to change base class of HTMLMeterElement and
        HTMLProgressElement dervied from HTMLFormControlElement to 
        HTMLElement for remove them from HTMLFormElement::m_associatedFormElements
        where we don't need to put "meter" and "progress" elements(bug 80381.)

        This patch also changes implementation of isLabelable using virtual
        method rather than sequence of hasTagName for execution speed and
        better readability.

        No new tests are required. No behavior changes.

        * CMakeLists.txt: Add LabelableElement.cpp and .h
        * GNUmakefile.list.am:  Add LabelableElement.cpp and .h
        * Target.pri: Add LabelableElement.cpp and .h
        * WebCore.gypi: Add LabelableElement.cpp and .h
        * WebCore.vcproj/WebCore.vcproj: Add LabelableElement.cpp and .h
        * WebCore.xcodeproj/project.pbxproj: Add LabelableElement.cpp and .h
        * html/HTMLButtonElement.h: Implement isLabelable.
        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLFormControlElement::HTMLFormControlElement): Change direct base class.
        * html/HTMLFormControlElement.h:
        (HTMLFormControlElement): Change direct base class.
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::isLabelable): Removed to use virtual method instead of hasTagName.
        (WebCore):
        * html/HTMLInputElement.h: Declaration of isLabelable.
        * html/HTMLKeygenElement.h: Implement isLabelable.
        * html/HTMLMeterElement.h: Implement isLabelable.
        * html/HTMLProgressElement.h: Implement isLabelable.
        * html/HTMLSelectElement.h: Implement isLabelable.
        * html/HTMLTextAreaElement.h: Implement isLabelable.
        * html/LabelableElement.cpp: Added.
        (WebCore):
        (WebCore::LabelableElement::LabelableElement):
        (WebCore::LabelableElement::~LabelableElement):
        (WebCore::LabelableElement::labels): Moved from HTMLFormControlElement.
        * html/LabelableElement.h: Added.
        (WebCore):
        (LabelableElement):

2012-03-07  Arun Patole  <bmf834@motorola.com>

        HTMLTrackElement.idl doesn't have default attribute.
        https://bugs.webkit.org/show_bug.cgi?id=80116

        Reviewed by Kentaro Hara.

        Renamed isDefault to 'default' so that in JS, it will be track.default instead of track.isDefault.
        * html/HTMLTrackElement.idl:

2012-03-07  Zoltan Horvath  <zoltan@webkit.org>

        [Qt] Add qmake config tests for JPEG and PNG library
        https://bugs.webkit.org/show_bug.cgi?id=80398

        Reviewed by Tor Arne Vestbø.

        Add JPEG and PNG library tests to config.tests and
        add error() abort to WebCore.pri if tests don't work.

        * WebCore.pri:

2012-03-06  Pavel Podivilov  <podivilov@chromium.org>

        Web Inspector: extract source mapping logic from DebuggerPresentationModel to ScriptMappingImpl.
        https://bugs.webkit.org/show_bug.cgi?id=80412

        Reviewed by Vsevolod Vlasov.

        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * inspector/compile-front-end.sh:
        * inspector/front-end/ScriptMapping.js:
        (WebInspector.ScriptMappingImpl):
        (WebInspector.ScriptMappingImpl.prototype.rawLocationToUILocation):
        (WebInspector.ScriptMappingImpl.prototype.createLiveLocation):
        (WebInspector.ScriptMappingImpl.prototype.uiSourceCodeList):
        (WebInspector.ScriptMappingImpl.prototype._handleUISourceCodeListChanged):
        (WebInspector.ScriptMappingImpl.prototype._uiSourceCodeListChanged):
        (WebInspector.ScriptMappingImpl.prototype._bindScriptToRawSourceCode):
        (WebInspector.ScriptMappingImpl.prototype.setFormatSource):
        (WebInspector.ScriptMappingImpl.prototype.forceUpdateSourceMapping):
        (WebInspector.ScriptMappingImpl.prototype.reset):

2012-03-07  Mark Rowe  <mrowe@apple.com>

        Fix DerivedSources.make to not assume that WTF and WebCore build in to the same build directory.

        We can't assume that wtf/Platform.h can be found inside BUILT_PRODUCTS_DIR as
        that won't be the case if WTF and WebCore are building in to different build
        directories. We should instead look for wtf/Platform.h in the header search path.
        
        Unreviewed due to being a build fix.

        * DerivedSources.make: Set up the header search path, and invoke the compiler in
        such a manner that it looks for wtf/Platform.h in that search path.

2012-03-07  Robin Cao  <robin.cao@torchmobile.com.cn>

        [BlackBerry] Upstream Texture and TextureCache
        https://bugs.webkit.org/show_bug.cgi?id=80121

        Reviewed by Rob Buis.

        Initial upstream, no new tests.

        * platform/graphics/blackberry/Texture.cpp: Added.
        (WebCore):
        (WebCore::copyImageData):
        (WebCore::Texture::Texture):
        (WebCore::Texture::~Texture):
        (WebCore::Texture::updateContents):
        (WebCore::Texture::setContentsToColor):
        (WebCore::Texture::protect):
        * platform/graphics/blackberry/Texture.h: Added.
        (WebCore):
        (Texture):
        (WebCore::Texture::create):
        (WebCore::Texture::textureId):
        (WebCore::Texture::isDirty):
        (WebCore::Texture::hasTexture):
        (WebCore::Texture::isColor):
        (WebCore::Texture::isOpaque):
        (WebCore::Texture::isProtected):
        (WebCore::Texture::protect):
        (WebCore::Texture::unprotect):
        (WebCore::Texture::size):
        (WebCore::Texture::width):
        (WebCore::Texture::height):
        (WebCore::Texture::bytesPerPixel):
        (WebCore::Texture::setTextureId):
        * platform/graphics/blackberry/TextureCacheCompositingThread.cpp: Added.
        (WebCore):
        (TextureProtector):
        (WebCore::TextureProtector::TextureProtector):
        (WebCore::TextureProtector::~TextureProtector):
        (WebCore::TextureCacheCompositingThread::TextureCacheCompositingThread):
        (WebCore::TextureCacheCompositingThread::allocateTextureId):
        (WebCore::TextureCacheCompositingThread::freeTextureId):
        (WebCore::TextureCacheCompositingThread::collectGarbage):
        (WebCore::TextureCacheCompositingThread::textureResized):
        (WebCore::TextureCacheCompositingThread::textureDestroyed):
        (WebCore::TextureCacheCompositingThread::install):
        (WebCore::TextureCacheCompositingThread::evict):
        (WebCore::TextureCacheCompositingThread::textureAccessed):
        (WebCore::textureCacheCompositingThread):
        (WebCore::TextureCacheCompositingThread::prune):
        (WebCore::TextureCacheCompositingThread::clear):
        (WebCore::TextureCacheCompositingThread::setMemoryUsage):
        (WebCore::TextureCacheCompositingThread::textureForTiledContents):
        (WebCore::TextureCacheCompositingThread::textureForColor):
        (WebCore::TextureCacheCompositingThread::updateContents):
        (WebCore::TextureCacheCompositingThread::key):
        * platform/graphics/blackberry/TextureCacheCompositingThread.h: Added.
        (WebCore):
        (TextureCacheCompositingThread):
        (WebCore::TextureCacheCompositingThread::createTexture):
        (WebCore::TextureCacheCompositingThread::memoryUsage):
        (WebCore::TextureCacheCompositingThread::memoryLimit):
        (WebCore::TextureCacheCompositingThread::setMemoryLimit):
        (WebCore::TextureCacheCompositingThread::prune):
        (WebCore::TextureCacheCompositingThread::ZombieTexture::ZombieTexture):
        (ZombieTexture):
        (WebCore::TextureCacheCompositingThread::incMemoryUsage):
        (WebCore::TextureCacheCompositingThread::decMemoryUsage):
        (WebCore::TextureCacheCompositingThread::ColorHash::hash):
        (WebCore::TextureCacheCompositingThread::ColorHash::equal):
        (ColorHash):
        (ColorHashTraits):
        (WebCore::TextureCacheCompositingThread::ColorHashTraits::constructDeletedValue):
        (WebCore::TextureCacheCompositingThread::ColorHashTraits::isDeletedValue):

2012-03-07  Kenichi Ishibashi  <bashi@chromium.org>

        [WebSocket] Should raise SYNTAX_ERR when message contains unpaired surrogates
        https://bugs.webkit.org/show_bug.cgi?id=80103

        Reviewed by Kent Tamura.

        Add UTF8 validation checks for WebSocket message and close reason.

        Tests: http/tests/websocket/tests/hybi/unpaired-surrogates-in-close-reason.html
               http/tests/websocket/tests/hybi/unpaired-surrogates-in-message.html

        * Modules/websockets/WebSocket.cpp:
        (WebCore::WebSocket::send): Raise SYNTAX_ERR if the message is invalid.
        (WebCore::WebSocket::close):Raise SYNTAX_ERR if the reason is invalid.
        * Modules/websockets/WebSocketChannel.cpp:
        (WebCore::WebSocketChannel::send): Check whether message is a valid UTF8 string.

2012-03-07  Byungwoo Lee  <bw80.lee@samsung.com>

        [EFL] Build warning: Fix warn_unused_result warnings.
        https://bugs.webkit.org/show_bug.cgi?id=79194

        Reviewed by Filip Pizlo.

        Fixed build warning which is getting generated when not using return
        value of a fuction, especially declared with warn_unused_result
        attribute.

        * platform/efl/SharedBufferEfl.cpp:
        (WebCore::SharedBuffer::createWithContentsOfFile):

2012-03-07  Kent Tamura  <tkent@chromium.org>

        Cleanup of RenderTextControl::adjustControlHeightBasedOnLineHeight()
        https://bugs.webkit.org/show_bug.cgi?id=80480

        Reviewed by Hajime Morita.

        The callsite of adjustControlHeightBasedOnLineHeight() stored
        padding+border+margin height of the inner text in height(), and
        adjustControlHeightBasedOnLineHeight() implementations refered it. It
        was unreasonable and hard to understand.

        The purpose of adjustControlHeightBasedOnLineHeight() is to compute
        - the maximum height of line-heights of the inner text and decorations
        - the maximum height of padding+border+margin heights of the inner text and decorations,
        and to sum them up. This patch rewrites the code to make it understood easily.

        adjustControlHeightBasedOnLineHeight() is renamed to
        computeControlheight(), it takes additional parameter of
        padding+boder+margin height, and returns the sum of them.

        No behavior change.

        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::computeLogicalHeight):
        * rendering/RenderTextControl.h:
        (RenderTextControl):
        * rendering/RenderTextControlMultiLine.cpp:
        (WebCore::RenderTextControlMultiLine::computeControlHeight):
        * rendering/RenderTextControlMultiLine.h:
        (RenderTextControlMultiLine):
        * rendering/RenderTextControlSingleLine.cpp:
        (WebCore::RenderTextControlSingleLine::computeControlHeight):
        * rendering/RenderTextControlSingleLine.h:
        (RenderTextControlSingleLine):

2012-03-06  Eric Seidel  <eric@webkit.org>

        Make WTF public headers use fully-qualified include paths and remove ForwardingHeaders/wtf
        https://bugs.webkit.org/show_bug.cgi?id=80363

        Reviewed by Mark Rowe.

        ForwardingHeaders/wtf is no longer needed (or functional) now that
        JavaScriptCore no longer includes the WTF headers as private headers.

        * DerivedSources.make:
        * ForwardingHeaders/wtf/ASCIICType.h: Removed.
        * ForwardingHeaders/wtf/AVLTree.h: Removed.
        * ForwardingHeaders/wtf/Alignment.h: Removed.
        * ForwardingHeaders/wtf/AlwaysInline.h: Removed.
        * ForwardingHeaders/wtf/ArrayBuffer.h: Removed.
        * ForwardingHeaders/wtf/ArrayBufferView.h: Removed.
        * ForwardingHeaders/wtf/Assertions.h: Removed.
        * ForwardingHeaders/wtf/Atomics.h: Removed.
        * ForwardingHeaders/wtf/Bitmap.h: Removed.
        * ForwardingHeaders/wtf/BloomFilter.h: Removed.
        * ForwardingHeaders/wtf/BumpPointerAllocator.h: Removed.
        * ForwardingHeaders/wtf/ByteArray.h: Removed.
        * ForwardingHeaders/wtf/CheckedArithmetic.h: Removed.
        * ForwardingHeaders/wtf/CheckedBoolean.h: Removed.
        * ForwardingHeaders/wtf/Compiler.h: Removed.
        * ForwardingHeaders/wtf/Complex.h: Removed.
        * ForwardingHeaders/wtf/CryptographicallyRandomNumber.h: Removed.
        * ForwardingHeaders/wtf/CurrentTime.h: Removed.
        * ForwardingHeaders/wtf/DataLog.h: Removed.
        * ForwardingHeaders/wtf/DateInstanceCache.h: Removed.
        * ForwardingHeaders/wtf/DateMath.h: Removed.
        * ForwardingHeaders/wtf/DecimalNumber.h: Removed.
        * ForwardingHeaders/wtf/Decoder.h: Removed.
        * ForwardingHeaders/wtf/Deque.h: Removed.
        * ForwardingHeaders/wtf/DisallowCType.h: Removed.
        * ForwardingHeaders/wtf/DoublyLinkedList.h: Removed.
        * ForwardingHeaders/wtf/DynamicAnnotations.h: Removed.
        * ForwardingHeaders/wtf/Encoder.h: Removed.
        * ForwardingHeaders/wtf/ExportMacros.h: Removed.
        * ForwardingHeaders/wtf/FastAllocBase.h: Removed.
        * ForwardingHeaders/wtf/FastMalloc.h: Removed.
        * ForwardingHeaders/wtf/FixedArray.h: Removed.
        * ForwardingHeaders/wtf/Float32Array.h: Removed.
        * ForwardingHeaders/wtf/Float64Array.h: Removed.
        * ForwardingHeaders/wtf/Forward.h: Removed.
        * ForwardingHeaders/wtf/Functional.h: Removed.
        * ForwardingHeaders/wtf/GetPtr.h: Removed.
        * ForwardingHeaders/wtf/HashCountedSet.h: Removed.
        * ForwardingHeaders/wtf/HashFunctions.h: Removed.
        * ForwardingHeaders/wtf/HashMap.h: Removed.
        * ForwardingHeaders/wtf/HashSet.h: Removed.
        * ForwardingHeaders/wtf/HashTable.h: Removed.
        * ForwardingHeaders/wtf/HashTraits.h: Removed.
        * ForwardingHeaders/wtf/HexNumber.h: Removed.
        * ForwardingHeaders/wtf/Int16Array.h: Removed.
        * ForwardingHeaders/wtf/Int32Array.h: Removed.
        * ForwardingHeaders/wtf/Int8Array.h: Removed.
        * ForwardingHeaders/wtf/ListHashSet.h: Removed.
        * ForwardingHeaders/wtf/ListRefPtr.h: Removed.
        * ForwardingHeaders/wtf/Locker.h: Removed.
        * ForwardingHeaders/wtf/MD5.h: Removed.
        * ForwardingHeaders/wtf/MainThread.h: Removed.
        * ForwardingHeaders/wtf/MathExtras.h: Removed.
        * ForwardingHeaders/wtf/MessageQueue.h: Removed.
        * ForwardingHeaders/wtf/MetaAllocator.h: Removed.
        * ForwardingHeaders/wtf/MetaAllocatorHandle.h: Removed.
        * ForwardingHeaders/wtf/NonCopyingSort.h: Removed.
        * ForwardingHeaders/wtf/Noncopyable.h: Removed.
        * ForwardingHeaders/wtf/NotFound.h: Removed.
        * ForwardingHeaders/wtf/OSAllocator.h: Removed.
        * ForwardingHeaders/wtf/OwnArrayPtr.h: Removed.
        * ForwardingHeaders/wtf/OwnPtr.h: Removed.
        * ForwardingHeaders/wtf/OwnPtrCommon.h: Removed.
        * ForwardingHeaders/wtf/PageAllocation.h: Removed.
        * ForwardingHeaders/wtf/PageAllocationAligned.h: Removed.
        * ForwardingHeaders/wtf/PageBlock.h: Removed.
        * ForwardingHeaders/wtf/PageReservation.h: Removed.
        * ForwardingHeaders/wtf/ParallelJobs.h: Removed.
        * ForwardingHeaders/wtf/PassOwnArrayPtr.h: Removed.
        * ForwardingHeaders/wtf/PassOwnPtr.h: Removed.
        * ForwardingHeaders/wtf/PassRefPtr.h: Removed.
        * ForwardingHeaders/wtf/Platform.h: Removed.
        * ForwardingHeaders/wtf/PossiblyNull.h: Removed.
        * ForwardingHeaders/wtf/RandomNumber.h: Removed.
        * ForwardingHeaders/wtf/RedBlackTree.h: Removed.
        * ForwardingHeaders/wtf/RefCounted.h: Removed.
        * ForwardingHeaders/wtf/RefCountedLeakCounter.h: Removed.
        * ForwardingHeaders/wtf/RefPtr.h: Removed.
        * ForwardingHeaders/wtf/RetainPtr.h: Removed.
        * ForwardingHeaders/wtf/SHA1.h: Removed.
        * ForwardingHeaders/wtf/SegmentedVector.h: Removed.
        * ForwardingHeaders/wtf/SimpleStats.h: Removed.
        * ForwardingHeaders/wtf/Spectrum.h: Removed.
        * ForwardingHeaders/wtf/StackBounds.h: Removed.
        * ForwardingHeaders/wtf/StaticConstructors.h: Removed.
        * ForwardingHeaders/wtf/StdLibExtras.h: Removed.
        * ForwardingHeaders/wtf/StringExtras.h: Removed.
        * ForwardingHeaders/wtf/StringHasher.h: Removed.
        * ForwardingHeaders/wtf/TemporaryChange.h: Removed.
        * ForwardingHeaders/wtf/ThreadRestrictionVerifier.h: Removed.
        * ForwardingHeaders/wtf/ThreadSafeRefCounted.h: Removed.
        * ForwardingHeaders/wtf/ThreadSpecific.h: Removed.
        * ForwardingHeaders/wtf/Threading.h: Removed.
        * ForwardingHeaders/wtf/ThreadingPrimitives.h: Removed.
        * ForwardingHeaders/wtf/TypeTraits.h: Removed.
        * ForwardingHeaders/wtf/Uint16Array.h: Removed.
        * ForwardingHeaders/wtf/Uint32Array.h: Removed.
        * ForwardingHeaders/wtf/Uint8Array.h: Removed.
        * ForwardingHeaders/wtf/Uint8ClampedArray.h: Removed.
        * ForwardingHeaders/wtf/UnusedParam.h: Removed.
        * ForwardingHeaders/wtf/VMTags.h: Removed.
        * ForwardingHeaders/wtf/ValueCheck.h: Removed.
        * ForwardingHeaders/wtf/Vector.h: Removed.
        * ForwardingHeaders/wtf/VectorTraits.h: Removed.
        * ForwardingHeaders/wtf/WTFThreadData.h: Removed.
        * ForwardingHeaders/wtf/dtoa.h: Removed.
        * ForwardingHeaders/wtf/dtoa/double-conversion.h: Removed.
        * ForwardingHeaders/wtf/text/ASCIIFastPath.h: Removed.
        * ForwardingHeaders/wtf/text/AtomicString.h: Removed.
        * ForwardingHeaders/wtf/text/AtomicStringHash.h: Removed.
        * ForwardingHeaders/wtf/text/AtomicStringImpl.h: Removed.
        * ForwardingHeaders/wtf/text/CString.h: Removed.
        * ForwardingHeaders/wtf/text/StringBuffer.h: Removed.
        * ForwardingHeaders/wtf/text/StringBuilder.h: Removed.
        * ForwardingHeaders/wtf/text/StringConcatenate.h: Removed.
        * ForwardingHeaders/wtf/text/StringHash.h: Removed.
        * ForwardingHeaders/wtf/text/StringImpl.h: Removed.
        * ForwardingHeaders/wtf/text/TextPosition.h: Removed.
        * ForwardingHeaders/wtf/text/WTFString.h: Removed.
        * ForwardingHeaders/wtf/unicode/CharacterNames.h: Removed.
        * ForwardingHeaders/wtf/unicode/Collator.h: Removed.
        * ForwardingHeaders/wtf/unicode/UTF8.h: Removed.
        * ForwardingHeaders/wtf/unicode/Unicode.h: Removed.
        * ForwardingHeaders/wtf/unicode/icu/UnicodeIcu.h: Removed.
        * ForwardingHeaders/wtf/unicode/wince/UnicodeWince.h: Removed.
        * ForwardingHeaders/wtf/url/ParsedURL.h: Removed.

2012-03-07  Yoshifumi Inoue  <yosin@chromium.org>

        [Forms] The "legend" element should not be a form-associated element.
        https://bugs.webkit.org/show_bug.cgi?id=80239

        Reviewed by Kent Tamura.

        This patch changes base class of HTMLLegendElement to HTMLElement from
        HTMLFormControlElement for saving memory space and iteration time of
        extra "legend" elements in HTMLFormElement::m_formAssociatedElements
        and matching the HTML5 specification for ease of maintenance.

        Changes of TextIterator is lead by usage of isFormControlElement. This
        changes will be replaced with more meaningful predicate as part of
        https://bugs.webkit.org/show_bug.cgi?id=80381

        No new tests are required. No behavior changes.

        * editing/TextIterator.cpp:
        (WebCore::TextIterator::advance): Check HTMLLegendElement in addition to isFormControlElement. This change is for text dump in LayoutTests implemented by document.innerText attribute.
        * html/HTMLLegendElement.cpp:
        (WebCore::HTMLLegendElement::HTMLLegendElement): Remove form parameter.
        (WebCore::HTMLLegendElement::create): Remove form parameter.
        (WebCore::HTMLLegendElement::associatedControl): Stop checking legend element, because HTMLLegendElement is no longer HTMLFormControlElement.
        (WebCore::HTMLLegendElement::supportFocus): Removed. It called HTMLElement::supportFocus.
        (WebCore::HTMLLegendElement::formControlType): Remove implementation of virtual method declared in HTMLFormControlElement.
        * html/HTMLLegendElement.h:
        (HTMLLegendElement): Change base class to HTMLElement.
        * html/HTMLTagNames.in: Remove "constructorNeedsFormElement" for not passing "form" parameter in HTMLElementFactory.

2012-03-06  Raphael Kubo da Costa  <kubo@profusion.mobi>

        [CMake] Make the removal of transitive library dependencies work with CMake < 2.8.7.
        https://bugs.webkit.org/show_bug.cgi?id=80469

        Reviewed by Antonio Gomes.

        No new tests, this is a buildsystem change.

        * CMakeLists.txt: Manually set the LINK_INTERFACE_LIBRARIES target
        property on the library being created.

2012-03-06  Lianghui Chen  <liachen@rim.com>

        [BlackBerry] Set correct ResourceRequest target type.
        https://bugs.webkit.org/show_bug.cgi?id=80430

        Reviewed by Rob Buis.

        For loads started by AppCache, they are based on the manifest file,
        it is not definitely sure what target it is for, so we just guess
        based on its mimetype or file extension.

        * loader/appcache/ApplicationCacheGroup.cpp:
        (WebCore::ApplicationCacheGroup::createResourceHandle):
        * loader/cache/CachedResource.cpp:
        (WebCore):
        (WebCore::CachedResource::load):
        * platform/network/blackberry/ResourceRequest.h:
        (ResourceRequest):
        * platform/network/blackberry/ResourceRequestBlackBerry.cpp:
        (WebCore):
        (WebCore::mimeTypeRequestTypeMap):
        (WebCore::ResourceRequest::targetTypeFromMimeType):
        * workers/DefaultSharedWorkerRepository.cpp:
        (WebCore::SharedWorkerScriptLoader::load):
        * workers/Worker.cpp:
        (WebCore::Worker::create):
        * workers/WorkerContext.cpp:
        (WebCore::WorkerContext::importScripts):
        * workers/WorkerScriptLoader.cpp:
        (WebCore::WorkerScriptLoader::createResourceRequest):
        * workers/WorkerScriptLoader.h:
        (WorkerScriptLoader):

2012-03-06  Dana Jansens  <danakj@chromium.org>

        [chromium] Add clipping to scissor rect to CCOcclusionTracker
        https://bugs.webkit.org/show_bug.cgi?id=79927

        Reviewed by Adrienne Walker.

        Adds logic to CCOcclusionTracker to occlude anything outside of the
        current screen and target surface scissor rects. When tracking
        damage for partial swaps, the scissor rects are bounded by the
        tracked damage rects.

        Unit tests: CCOcclusionTrackerTest.cpp

        * platform/graphics/chromium/cc/CCOcclusionTracker.cpp:
        (WebCore::::CCOcclusionTrackerBase):
        (WebCore):
        (WebCore::::markOccludedBehindLayer):
        (WebCore::testContentRectOccluded):
        (WebCore::::occluded):
        (WebCore::computeUnoccludedContentRect):
        (WebCore::::unoccludedContentRect):
        (WebCore::::layerScissorRect):
        * platform/graphics/chromium/cc/CCOcclusionTracker.h:
        (WebCore):
        (CCOcclusionTrackerDamageClientBase):
        (CCOcclusionTrackerBase):

2012-03-06  Kentaro Hara  <haraken@chromium.org>

        Unreviewed, rolling out r110011.
        http://trac.webkit.org/changeset/110011
        https://bugs.webkit.org/show_bug.cgi?id=80376

        layout tests crash

        * bindings/v8/V8HiddenPropertyName.cpp:
        (WebCore):
        (WebCore::V8HiddenPropertyName::hiddenReferenceName):
        * bindings/v8/V8HiddenPropertyName.h:
        (WebCore):
        (V8HiddenPropertyName):
        * bindings/v8/custom/V8DOMStringMapCustom.cpp:
        (WebCore::toV8):
        * bindings/v8/custom/V8DOMTokenListCustom.cpp:
        (WebCore::toV8):
        * bindings/v8/custom/V8NamedNodeMapCustom.cpp:
        (WebCore::toV8):

2012-03-06  Kentaro Hara  <haraken@chromium.org>

        Unreviewed, rolling out r110016.
        http://trac.webkit.org/changeset/110016

        layout tests crash

        * bindings/v8/custom/V8NamedNodeMapCustom.cpp:
        (WebCore::toV8):

2012-03-06  Kentaro Hara  <haraken@chromium.org>

        Unreviewed, fixed test crashes.

        * bindings/v8/custom/V8NamedNodeMapCustom.cpp:
        (WebCore::toV8):

2012-03-06  Hajime Morrita  <morrita@chromium.org>

        https://bugs.webkit.org/show_bug.cgi?id=79935
        REGRESSION: <content> element is not HTMLUnknownElement when Shadow DOM API is disabled

        Reviewed by Adam Barth.

        This change introduced "runtimeConditional" keyword to make_name.pl sources,
        which allows HTMLElementFactory and HTMLElementWrapperFactory to check RuntimeEnabledFeatures
        and treat any tag name as HTMLUnknownElement if its definition has runtimeConditional and
        the flag given is turned off.

        Test: fast/dom/shadow/content-shadow-unknown.html

        * WebCore.exp.in:
        * dom/make_names.pl:
        (defaultTagPropertyHash):
        (printConstructorInterior):
        (printFactoryCppFile):
        (printWrapperFunctions):
        (printWrapperFactoryCppFile):
        * html/HTMLTagNames.in:
        * html/shadow/HTMLContentElement.cpp:
        (WebCore::contentTagName):
        * testing/InternalSettings.cpp:
        (WebCore::InternalSettings::InternalSettings):
        (WebCore::InternalSettings::restoreTo):
        (WebCore::InternalSettings::setShadowDOMEnabled):
        (WebCore):
        * testing/InternalSettings.h:
        (InternalSettings):
        * testing/InternalSettings.idl:

2012-03-06  Kenichi Ishibashi  <bashi@chromium.org>

        [WebSocket] Introduce ThreadableWebSocketChannel::SendResult
        https://bugs.webkit.org/show_bug.cgi?id=80356

        Reviewed by Kent Tamura.

        Introduced ThreadableWebSocketChannel::SendResult type so that
        WebSocketChannel can pass the validation result.

        No new test. No changes in behavior.

        * Modules/websockets/ThreadableWebSocketChannel.h: Added SendResult.
        * Modules/websockets/ThreadableWebSocketChannelClientWrapper.cpp:
        (WebCore::ThreadableWebSocketChannelClientWrapper::ThreadableWebSocketChannelClientWrapper):
        (WebCore::ThreadableWebSocketChannelClientWrapper::sendRequestResult): Use ThreadableWebSocketChannel::SendResult instead of bool.
        (WebCore::ThreadableWebSocketChannelClientWrapper::setSendRequestResult): Ditto.
        * Modules/websockets/ThreadableWebSocketChannelClientWrapper.h:
        (ThreadableWebSocketChannelClientWrapper):
        * Modules/websockets/WebSocketChannel.cpp:
        (WebCore::WebSocketChannel::send): Use ThreadableWebSocketChannel::SendResult instead of bool. Pass Cstring to enqueTextFrame instead of String.
        (WebCore::WebSocketChannel::enqueueTextFrame): Ditto.
        (WebCore::WebSocketChannel::processOutgoingFrameQueue): Ditto.
        * Modules/websockets/WebSocketChannel.h:
        (WebSocketChannel):
        (QueuedFrame): Changed the type of stringData from String to CString.
        * Modules/websockets/WorkerThreadableWebSocketChannel.cpp:
        (WebCore::WorkerThreadableWebSocketChannel::send): Use ThreadableWebSocketChannel::SendResult instead of bool.
        (WebCore::workerContextDidSend): Ditto.
        (WebCore::WorkerThreadableWebSocketChannel::Peer::send): Ditto.
        (WebCore::WorkerThreadableWebSocketChannel::Bridge::send): Ditto.
        * Modules/websockets/WorkerThreadableWebSocketChannel.h:
        (WorkerThreadableWebSocketChannel): ditto.
        (Bridge): Ditto.

2012-03-06  Kentaro Hara  <haraken@chromium.org>

        [V8][Performance] Optimize V8 bindings for HTMLElement.classList,
        Element.dataset and Node.attributes
        https://bugs.webkit.org/show_bug.cgi?id=80376

        Reviewed by Adam Barth.

        This patch improves the performance of HTMLElement.classList, Element.dataset
        and Node.attributes by 6.4 times, 7.1 times and 10.9 times, respectively.

        Previously, a 'hiddenReferenceName' string was allocated on v8::Handle and
        created every time the DOM attribute is accessed, in spite of the fact that
        the 'hiddenReferenceName' string is static.

        This patch moves the 'hiddenReferenceName' string to v8::Persistent and makes it static.
        Also, this patch removes 'if (!elementValue.IsEmpty() && elementValue->IsObject())',
        since if 'element' exists, it is guaranteed that 'elementValue' is not empty
        and is an Object.

        Performance tests: https://bugs.webkit.org/attachment.cgi?id=130283

        AppleWebKit/JavaScriptCore:
        div.classList : 382ms
        div.classList.foo = 123 : 335ms
        div.dataset : 403ms
        div.dataset.foo = 123 : 5250ms
        div.attributes : 183ms

        Chromium/V8 (without this patch):
        div.classList : 9140ms
        div.classList.foo = 123 : 9086ms
        div.dataset : 9930ms
        div.dataset.foo = 123 : 49698ms
        div.attributes : 13489ms

        Chromium/V8 (with this patch):
        div.classList : 1435ms
        div.classList.foo = 123 : 1470ms
        div.dataset : 1400ms
        div.dataset.foo = 123 : 30396ms
        div.attributes : 1242ms

        No tests. No change in behavior.

        * bindings/v8/custom/V8DOMStringMapCustom.cpp: Modified as described above.
        (WebCore::toV8):
        * bindings/v8/custom/V8DOMTokenListCustom.cpp: Ditto.
        (WebCore::toV8):
        * bindings/v8/custom/V8NamedNodeMapCustom.cpp: Ditto.
        (WebCore::toV8):

        * bindings/v8/V8HiddenPropertyName.cpp: Defined a hidden property name string statically
        to optimize the macro.
        (WebCore):
        (WebCore::V8HiddenPropertyName::hiddenReferenceName):
        * bindings/v8/V8HiddenPropertyName.h: Modified to switch two prefixes "WebCore::HiddenProperty::"
        and "WebCore::HiddenReference::", depending on whether a given name represents a hidden property
        or a hidden reference.
        (WebCore):
        (V8HiddenPropertyName):

2012-03-06  Nat Duca  <nduca@chromium.org>

        [chromium] CCThreadProxy context lost support
        https://bugs.webkit.org/show_bug.cgi?id=80100

        Reviewed by James Robinson.

        * platform/graphics/chromium/cc/CCScheduler.cpp:
        (WebCore::CCScheduler::didLoseContext):
        (WebCore):
        (WebCore::CCScheduler::didRecreateContext):
        (WebCore::CCScheduler::processScheduledActions):
        * platform/graphics/chromium/cc/CCScheduler.h:
        (CCSchedulerClient):
        (CCScheduler):
        * platform/graphics/chromium/cc/CCSchedulerStateMachine.cpp:
        (WebCore::CCSchedulerStateMachine::CCSchedulerStateMachine):
        (WebCore::CCSchedulerStateMachine::nextAction):
        (WebCore::CCSchedulerStateMachine::updateState):
        (WebCore::CCSchedulerStateMachine::vsyncCallbackNeeded):
        (WebCore::CCSchedulerStateMachine::didLoseContext):
        (WebCore):
        (WebCore::CCSchedulerStateMachine::didRecreateContext):
        * platform/graphics/chromium/cc/CCSchedulerStateMachine.h:
        (CCSchedulerStateMachine):
        * platform/graphics/chromium/cc/CCThreadProxy.cpp:
        (WebCore::CCThreadProxy::recreateContext):
        (WebCore::CCThreadProxy::loseContext):
        (WebCore::CCThreadProxy::scheduledActionBeginContextRecreation):
        (WebCore):
        (WebCore::CCThreadProxy::scheduledActionDrawAndSwap):
        (WebCore::CCThreadProxy::setAnimationEvents):
        (WebCore::CCThreadProxy::beginContextRecreation):
        (WebCore::CCThreadProxy::recreateContextOnImplThread):
        (WebCore::CCThreadProxy::loseContextOnImplThread):
        * platform/graphics/chromium/cc/CCThreadProxy.h:
        (CCThreadProxy):

2012-03-06  Tony Chang  <tony@chromium.org>

        refactor method names in RenderFlexibleBox to make them more consistent
        https://bugs.webkit.org/show_bug.cgi?id=80446

        Reviewed by Ojan Vafai.

        No new tests, just renaming internal methods.

        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::flowAwareBorderAfter): New, used by layoutAndPlaceChildren
        (WebCore::RenderFlexibleBox::flowAwarePaddingAfter): New, used by layoutAndPlaceChildren
        (WebCore::RenderFlexibleBox::marginBoxAscentForChild): Add ForChild for consistency.
        (WebCore::RenderFlexibleBox::layoutAndPlaceChildren): We were adding the before padding+border twice (it's in the offset and
        crossAxisBorderAndPaddingExtent() and subtracting it once.  Instead, just add the after padding+border.
        (WebCore::RenderFlexibleBox::alignChildren):
        * rendering/RenderFlexibleBox.h:
        (RenderFlexibleBox): Reorder methods to match the .cpp file.

2012-03-06  Kentaro Hara  <haraken@chromium.org>

        Unreviewed, rolling out r109969.
        http://trac.webkit.org/changeset/109969
        https://bugs.webkit.org/show_bug.cgi?id=80376

        layout tests crash

        * bindings/v8/V8HiddenPropertyName.cpp:
        (WebCore):
        (WebCore::V8HiddenPropertyName::hiddenReferenceName):
        * bindings/v8/V8HiddenPropertyName.h:
        (WebCore):
        (V8HiddenPropertyName):
        * bindings/v8/custom/V8DOMStringMapCustom.cpp:
        (WebCore::toV8):
        * bindings/v8/custom/V8DOMTokenListCustom.cpp:
        (WebCore::toV8):
        * bindings/v8/custom/V8NamedNodeMapCustom.cpp:
        (WebCore::toV8):

2012-03-06  Kentaro Hara  <haraken@chromium.org>

        Unreviewed, rolling out r109999.
        http://trac.webkit.org/changeset/109999

        layout tests crash

        * bindings/v8/custom/V8DOMStringMapCustom.cpp:
        (WebCore::toV8):
        * bindings/v8/custom/V8DOMTokenListCustom.cpp:
        (WebCore::toV8):

2012-03-06  Kentaro Hara  <haraken@chromium.org>

        Unreviewed, fix crashes.

        * bindings/v8/custom/V8DOMStringMapCustom.cpp:
        (WebCore::toV8):
        * bindings/v8/custom/V8DOMTokenListCustom.cpp:
        (WebCore::toV8):

2012-03-06  James Robinson  <jamesr@chromium.org>

        [chromium] Fix threaded compositing issues in WebGLLayerChromium (except for printing)
        https://bugs.webkit.org/show_bug.cgi?id=80459

        Reviewed by Kenneth Russell.

        This fixes a few wrong-thread issues in WebGLLayerChromium for threaded compositing.  The key requirements that
        threaded compositing imposes on LayerChromium subclasses are that the compositor's context can only be used from
        the compositor thread, meaning inside of updateCompositorResources() and pushPropertiesTo(), and that
        non-compositor contexts can only be used from the main thread. This means specifically that we can't use the
        DrawingBuffer's context in either of these two functions.

        Summary of changes:
        *) Move the publishToPlatformLayer() call and related logic inside of paintContentsIfDirty(), which is called
        on the main thread.
        *) Move lost context tracking outside of drawsContent(), since that function is called from both threads, to a
        separate bool that is updated after each WebGL composite and setDrawingBuffer call.

        Printing still doesn't work in threaded mode with this patch, I'll address that separately. Printing and lost
        context recovery still work as they did in the single-threaded path.

        * platform/graphics/chromium/WebGLLayerChromium.cpp:
        (WebCore::WebGLLayerChromium::WebGLLayerChromium):
        (WebCore::WebGLLayerChromium::drawsContent):
        (WebCore::WebGLLayerChromium::paintContentsIfDirty):
        (WebCore::WebGLLayerChromium::updateCompositorResources):
        (WebCore::WebGLLayerChromium::setDrawingBuffer):
        * platform/graphics/chromium/WebGLLayerChromium.h:
        (WebGLLayerChromium):

2012-03-06  Anders Carlsson  <andersca@apple.com>

        Cracks between tiles when zoomed in
        https://bugs.webkit.org/show_bug.cgi?id=80460
        <rdar://problem/10996688>

        Use enclosingIntRect instead of enclosedIntRect when converting from FloatRect to IntRect.

        * platform/graphics/mac/WebLayer.mm:
        (drawLayerContents):

2012-03-06  Anders Carlsson  <andersca@apple.com>

        Tile cache layers should always be clipped to the view's bounds
        https://bugs.webkit.org/show_bug.cgi?id=80456
        <rdar://problem/10996174>

        Reviewed by Simon Fraser.

        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::shouldClipCompositedBounds):
        Factor this code out into a separate function for better clarity. Always return true if we have a tile cache layer.

        (WebCore::RenderLayerBacking::updateCompositedBounds):
        Call shouldClipCompositedBounds directly.

2012-03-06  James Robinson  <jamesr@chromium.org>

        [chromium] Null-check m_layerRenderer in CCLayerTreeHostImpl::finishAllRendering()
        https://bugs.webkit.org/show_bug.cgi?id=80445

        Reviewed by Adrienne Walker.

        Null-check CCLayerTreeHostImpl::m_layerRenderer since it won't be set if context initialiation failed for any
        reason.

        Covered by new unit test in CCLayerTreeHostImplTest.

        * platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:
        (WebCore::CCLayerTreeHostImpl::finishAllRendering):

2012-03-06  Ryosuke Niwa  <rniwa@webkit.org>

        Can't select a line of RTL text on Facebook
        https://bugs.webkit.org/show_bug.cgi?id=59435

        Reviewed by Eric Seidel.

        Deploy prevLeafChildIgnoringLineBreak and nextLeafChildIgnoringLineBreak
        in RenderedPosition::leftBoundaryOfBidiRun and RenderedPosition::rightBoundaryOfBidiRun.

        Without this patch, WebKit extends selection from right to left when the user selects
        <span dir="rtl">ABC<br></span> from left to right by a mouse drag.

        Test: editing/selection/select-bidi-run.html

        * editing/RenderedPosition.cpp:
        (WebCore::RenderedPosition::leftBoundaryOfBidiRun):
        (WebCore::RenderedPosition::rightBoundaryOfBidiRun):

2012-03-06  Raphael Kubo da Costa  <kubo@profusion.mobi>

        undefined reference to JSC::IdentifierTable::~IdentifierTable() on EFL port
        https://bugs.webkit.org/show_bug.cgi?id=80282

        Reviewed by Antonio Gomes.

        No new tests, this is a buildsystem change.

        Remove transitive library dependencies; they are especially
        dangerous when one ends up linking against WTF, JSC and then WTF
        again, since some symbols will not be defined.

        Passing --no-copy-dt-needed-entries and --as-needed to the linker
        (which some recent Linux distros do by default) makes the issue
        even more evident.

        * CMakeLists.txt: Explicitly link to WTF as WebCore uses symbols
        from it.
        * PlatformEfl.cmake: Explicitly link against libjpeg and libpng.

2012-03-06  James Robinson  <jamesr@chromium.org>

        [chromium] REGRESSION(109469): WebGL printing busted
        https://bugs.webkit.org/show_bug.cgi?id=80450

        Reviewed by Kenneth Russell.

        Avoid marking layers as needing display in setContentsTo...() since this breaks WebGL's damage tracking and is
        unnecessary.

        Tested WebGL printing manually.

        * platform/graphics/chromium/GraphicsLayerChromium.cpp:
        (WebCore::GraphicsLayerChromium::setContentsToCanvas):
        (WebCore::GraphicsLayerChromium::setContentsToMedia):

2012-03-06  Adrienne Walker  <enne@google.com>

        Overlap map for compositing should ignore empty layers
        https://bugs.webkit.org/show_bug.cgi?id=63499

        Reviewed by Simon Fraser.

        Test: compositing/layer-creation/overlap-empty-layer.html

        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::addToOverlapMap):
        (WebCore::RenderLayerCompositor::computeCompositingRequirements):

2012-03-06  Vangelis Kokkevis  <vangelis@chromium.org>

        [chromium] Increase the accelerated canvas min size to 256 * 256
        https://bugs.webkit.org/show_bug.cgi?id=80451

        Reviewed by Stephen White.

        Test: Manually

        * page/Settings.cpp:
        (WebCore::Settings::Settings):

2012-03-06  Kentaro Hara  <haraken@chromium.org>

        [V8][Performance] Optimize V8 bindings for HTMLElement.classList,
        Element.dataset and Node.attributes
        https://bugs.webkit.org/show_bug.cgi?id=80376

        Reviewed by Adam Barth.

        This patch improves the performance of HTMLElement.classList, Element.dataset
        and Node.attributes by 6.4 times, 7.1 times and 10.9 times, respectively.

        Previously, a 'hiddenReferenceName' string was allocated on v8::Handle and
        created every time the DOM attribute is accessed, in spite of the fact that
        the 'hiddenReferenceName' string is static.

        This patch moves the 'hiddenReferenceName' string to v8::Persistent and makes it static.
        Also, this patch removes 'if (!elementValue.IsEmpty() && elementValue->IsObject())',
        since if 'element' exists, it is guaranteed that 'elementValue' is not empty
        and is an Object.

        Performance tests: https://bugs.webkit.org/attachment.cgi?id=130283

        AppleWebKit/JavaScriptCore:
        div.classList : 382ms
        div.classList.foo = 123 : 335ms
        div.dataset : 403ms
        div.dataset.foo = 123 : 5250ms
        div.attributes : 183ms

        Chromium/V8 (without this patch):
        div.classList : 9140ms
        div.classList.foo = 123 : 9086ms
        div.dataset : 9930ms
        div.dataset.foo = 123 : 49698ms
        div.attributes : 13489ms

        Chromium/V8 (with this patch):
        div.classList : 1435ms
        div.classList.foo = 123 : 1470ms
        div.dataset : 1400ms
        div.dataset.foo = 123 : 30396ms
        div.attributes : 1242ms

        No tests. No change in behavior.

        * bindings/v8/custom/V8DOMStringMapCustom.cpp: Modified as described above.
        (WebCore::toV8):
        * bindings/v8/custom/V8DOMTokenListCustom.cpp: Ditto.
        (WebCore::toV8):
        * bindings/v8/custom/V8NamedNodeMapCustom.cpp: Ditto.
        (WebCore::toV8):

        * bindings/v8/V8HiddenPropertyName.cpp: Defined a hidden property name string statically
        to optimize the macro.
        (WebCore):
        (WebCore::V8HiddenPropertyName::hiddenReferenceName):
        * bindings/v8/V8HiddenPropertyName.h: Modified to switch two prefixes "WebCore::HiddenProperty::"
        and "WebCore::HiddenReference::", depending on whether a given name represents a hidden property
        or a hidden reference.
        (WebCore):
        (V8HiddenPropertyName):

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

        getComputedStyle returns incorrect values for the width and height of pseudo-elements
        https://bugs.webkit.org/show_bug.cgi?id=37835

        Reviewed by Tony Chang.

        In case we are querying the computed style of an element with a pseudo-element we can't use
        the renderer of the element as this one is not the one used to render the pseudo-element. We need
        to use the one created to render the pseudo-element.

        No new tests : Extend the existing getComputedStyle-with-pseudo-element.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):

2012-03-06  Shawn Singh  <shawnsingh@chromium.org>

        [chromium] Make compositeAndReadback and damage tracking play nicely together
        https://bugs.webkit.org/show_bug.cgi?id=80199

        Reviewed by James Robinson.

        Requires system-level testing (pixels on front-buffer should be
        observed for correct behavior) that cannot be done by layout tests
        or unit tests, have to rely on manual testing.

        * platform/graphics/chromium/cc/CCSingleThreadProxy.cpp:
        (WebCore::CCSingleThreadProxy::compositeAndReadback):

2012-03-06  Luke Macpherson   <macpherson@chromium.org>

        Make CSSStyleSelector::convertToLength() behave more like CSSPrimitiveValue::convertToLength().
        https://bugs.webkit.org/show_bug.cgi?id=80375

        Reviewed by Eric Seidel.

        No new tests / cleanup only.

        This patch removes the bool* ok parameter from CSSStyleSelector's convertToLength,
        and instead uses the recently added Length(Undefined) value to indicate failure.
        This paves the way for a future patch that will call primitiveValue->convertToLength directly.

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

2012-03-06  Raymes Khoury  <raymes@chromium.org>

        Add state variable and ASSERTs to DocumentWriter to help track down
        https://bugs.webkit.org/show_bug.cgi?id=80427 and prevent illegal usage
        of DocumentWriter. This also makes endIfNotLoadingMainResource() private
        as there is no external usage.

        Reviewed by Adam Barth.

        This only adds ASSERT/CRASH and does not change existing behaviour.

        * loader/DocumentWriter.cpp:
        (WebCore::DocumentWriter::DocumentWriter):
        (WebCore::DocumentWriter::begin):
        (WebCore::DocumentWriter::addData):
        (WebCore::DocumentWriter::endIfNotLoadingMainResource):
        (WebCore::DocumentWriter::setDocumentWasLoadedAsPartOfNavigation):
        * loader/DocumentWriter.h:
        (DocumentWriter):

2012-03-06  Mihnea Ovidenie  <mihnea@adobe.com>

        [CSSRegions][CSSOM]Restrict parsing of named flow name
        https://bugs.webkit.org/show_bug.cgi?id=80359

        Reviewed by Andreas Kling.

        The function that does the parsing for flow thread name should restrict the
        number of parsed properties to 1, otherwise it would allow parsing of
        "-webkit-flow-into: flow; color: red;" constructions.

        Modified fast/regions/webkit-named-flow-invalid-name.html to include the above case.

        * css/CSSParser.cpp:
        (WebCore::validFlowName):
        (WebCore::CSSParser::parseFlowThread):

2012-03-06  Joseph Pecoraro  <pecoraro@apple.com>

        Unreviewed build fix for minimal build after r109939.

        Guard access to page->inspectorController with ENABLE(INSPECTOR).

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

2012-03-05  Dean Jackson  <dino@apple.com>

        Enable compositing when a CSS filter is animating
        https://bugs.webkit.org/show_bug.cgi?id=79048

        Reviewed by Simon Fraser.

        Now that some systems (e.g. OS X) have both hardware accelerated
        CSS filters, and the ability to animate them via the hardware
        compositor, all CSS filters should be composited when animating.

        Tests: css3/filters/composited-during-animation-layertree.html
               css3/filters/composited-during-animation.html
               css3/filters/composited-during-transition-layertree.html

        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore):
        (WebCore::supportsAcceleratedFilterAnimations):
            new method that returns true if the platform supports
            hardware animations of filters.
        (WebCore::GraphicsLayerCA::addAnimation):
        (WebCore::GraphicsLayerCA::createAnimationFromKeyframes):
            only create layer-animations if the platform supports it.
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::requiresCompositingForAnimation):
            create a compositing layer if animating a filter on a
            supported platform.

2012-03-06  Stephen White  <senorblanco@chromium.org>

        Unreviewed, rolling out r109825.
        http://trac.webkit.org/changeset/109825
        https://bugs.webkit.org/show_bug.cgi?id=79413

        Broke webkit_unit_tests on Chromium Win

        * Modules/indexeddb/IDBLevelDBBackingStore.cpp:
        (WebCore::IDBLevelDBBackingStore::open):
        * platform/leveldb/LevelDBDatabase.cpp:
        (WebCore):
        * platform/leveldb/LevelDBDatabase.h:
        (LevelDBDatabase):

2012-03-06  Beth Dakin  <bdakin@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=80351
        InlineTextBox is using the wrong origin when calling 
        addRelevantRepaintedObject
        -and corresponding-
        <rdar://problem/10970221>

        Reviewed by Sam Weinig.

        boxOrigin represents the actual location of the text. The adjustedPaintOffset 
        (which I was using previously) will only correspond to the first line in a 
        block of lines.
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::paint):

2012-03-06  Filip Spacek  <fspacek@rim.com>

        [BlackBerry] Disable border radius clips (r95239) for BlackBerry
        https://bugs.webkit.org/show_bug.cgi?id=80416

        Reviewed by Antonio Gomes

        The BlackBerry port suffers from the same performance
        degradation when border radius clip is enabled as Chromium.

        * rendering/RenderLayer.cpp:

2012-03-06  Stephen White  <senorblanco@chromium.org>

        Unreviewed, rolling out r109832.
        http://trac.webkit.org/changeset/109832
        https://bugs.webkit.org/show_bug.cgi?id=80356

        Broke WebSocket tests on Chrome Mac and Linux

        * Modules/websockets/ThreadableWebSocketChannel.h:
        (ThreadableWebSocketChannel):
        * Modules/websockets/ThreadableWebSocketChannelClientWrapper.cpp:
        (WebCore::ThreadableWebSocketChannelClientWrapper::ThreadableWebSocketChannelClientWrapper):
        (WebCore::ThreadableWebSocketChannelClientWrapper::sendRequestResult):
        (WebCore::ThreadableWebSocketChannelClientWrapper::setSendRequestResult):
        * Modules/websockets/ThreadableWebSocketChannelClientWrapper.h:
        (ThreadableWebSocketChannelClientWrapper):
        * Modules/websockets/WebSocket.cpp:
        (WebCore::WebSocket::send):
        * Modules/websockets/WebSocketChannel.cpp:
        (WebCore::WebSocketChannel::send):
        (WebCore::WebSocketChannel::enqueueTextFrame):
        (WebCore::WebSocketChannel::processOutgoingFrameQueue):
        * Modules/websockets/WebSocketChannel.h:
        (WebSocketChannel):
        (QueuedFrame):
        * Modules/websockets/WorkerThreadableWebSocketChannel.cpp:
        (WebCore::WorkerThreadableWebSocketChannel::send):
        (WebCore::workerContextDidSend):
        (WebCore::WorkerThreadableWebSocketChannel::Peer::send):
        (WebCore::WorkerThreadableWebSocketChannel::Bridge::send):
        * Modules/websockets/WorkerThreadableWebSocketChannel.h:
        (WorkerThreadableWebSocketChannel):
        (Bridge):

2012-03-06  Stephen White  <senorblanco@chromium.org>

        Unreviewed, rolling out r109840.
        http://trac.webkit.org/changeset/109840
        https://bugs.webkit.org/show_bug.cgi?id=80103

        Broke WebSocket tests on Chrome Mac and Linux

        * Modules/websockets/WebSocket.cpp:
        (WebCore::WebSocket::send):
        (WebCore::WebSocket::close):
        * Modules/websockets/WebSocketChannel.cpp:
        (WebCore::WebSocketChannel::send):

2012-03-05  Joseph Pecoraro  <pecoraro@apple.com>

        <http://webkit.org/b/78575> Web Inspector: Disable dock button when not allowed to dock

        There are times when an undocked inspector frontend is not allowed to
        attach to the main window. We can disable the dock button in those cases.

        Reviewed by Pavel Feldman.

        No new tests. This functionality is port specific right now.

        * page/FrameView.cpp:
        (WebCore::FrameView::performPostLayoutTasks):
        When the main frame is resized we let the inspector client know,
        so that it can react to it as needed.

        * WebCore.exp.in:
        * inspector/InspectorClient.h:
        (WebCore::InspectorClient::didResizeMainFrame):
        * inspector/InspectorController.cpp:
        * inspector/InspectorController.h:
        (WebCore::InspectorController::inspectorClient):
        Call up to the port though to the InspectorClient.

        * inspector/InspectorFrontendClientLocal.cpp:
        (WebCore::InspectorFrontendClientLocal::frontendLoaded):
        (WebCore::InspectorFrontendClientLocal::setDockingUnavailable):
        * inspector/InspectorFrontendClientLocal.h:
        On ports where the inspector frontend client is local, provide a 
        setDockingUnavailable InspectorFrontendAPI to update the docking state.
        Automatically update availability when the frontend completes loading.

        * inspector/front-end/InspectorFrontendAPI.js:
        (InspectorFrontendAPI.setDockingUnavailable):
        * inspector/front-end/inspector.js:
        (WebInspector._createGlobalStatusBarItems):
        (WebInspector.setAttachedWindow):
        (WebInspector.setDockingUnavailable):
        (WebInspector.updateDockToggleButton):
        Update the dock button's enabled/disabled state when its created,
        when the attached state changes, when get a frontend API notification
        that we cannot attach.

        * inspector/front-end/InspectorFrontendHostStub.js:
        Remove unused canAttachWindow method.

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

        Speech JavaScript API: add SpeechRecognitionError
        https://bugs.webkit.org/show_bug.cgi?id=80410

        Reviewed by Adam Barth.

        Add SpeechRecognitionError.

        Test: fast/speech/scripted/speechrecognitionerror-basics.html

        * Modules/speech/DOMWindowSpeech.idl: Added.
        * Modules/speech/SpeechRecognitionError.cpp: Added.
        (WebCore):
        (WebCore::SpeechRecognitionError::create):
        (WebCore::SpeechRecognitionError::SpeechRecognitionError):
        * Modules/speech/SpeechRecognitionError.h: Added.
        (WebCore):
        (SpeechRecognitionError):
        (WebCore::SpeechRecognitionError::code):
        (WebCore::SpeechRecognitionError::message):
        * Modules/speech/SpeechRecognitionError.idl: Added.
        * WebCore.gyp/WebCore.gyp:
        * WebCore.gypi:

2012-03-06  David Corvoysier  <david.corvoysier@orange.com>

        Unreleased gst_object_reference to audio sink in MediaPlayerPrivateGStreamer
        https://bugs.webkit.org/show_bug.cgi?id=79795

        Bug fix: Used a GRefPtr to hold the reference to the audio sink instead of a GstElement*.
        Code cleanup: Used the same pattern for webkit web source and removed explicit gst_unref in destructor.

        Reviewed by Philippe Normand.

        No new tests. No change in behavior.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::~MediaPlayerPrivateGStreamer):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:
        (MediaPlayerPrivateGStreamer):

2012-03-06  Patrick Gansterer  <paroga@webkit.org>

        [CMake] Build fix for !ENABLE(WORKERS) after r109556 and r109833.

        * CMakeLists.txt:

2012-03-06  Allan Sandfeld Jensen  <allan.jensen@nokia.com>

        [Qt][WK2] Crash in Frame.cpp when loading index.hu
        https://bugs.webkit.org/show_bug.cgi?id=80165

        Guard against possible null document, which can happen
        when unsetting a document in a frame.

        Reviewed by Kenneth Rohde Christiansen.

        * page/Frame.cpp:
        (WebCore::Frame::setDocument):

2012-03-06  Lucas Forschler  <lforschler@apple.com>

        WebCore build exceeds address space on 32-bit Windows builds.
        https://bugs.webkit.org/show_bug.cgi?id=80346

        Reviewed by Jessie Berlin.

        Patch by Lucas Forschler, landed by Jessie Berlin.

        Add AllInOne.cpp files for a few projects.
        This will only affect Production and Release builds.
        Let VS rebuild the project file.

        * WebCore.vcproj/WebCore.vcproj:
        * css/MediaAllInOne.cpp: Added.
        * loader/appcache/ApplicationCacheAllInOne.cpp: Added.
        * mathml/MathMLAllInOne.cpp: Added.
        * platform/text/TextAllInOne.cpp: Added.

2012-03-06  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: add support for inspection of huge (1M elements) arrays.
        https://bugs.webkit.org/show_bug.cgi?id=80421

        Reviewed by Vsevolod Vlasov.

        * inspector/front-end/ConsoleView.js:
        (WebInspector.ConsoleView.prototype.completionsForExpression.evaluated):
        * inspector/front-end/ElementsPanel.js:
        * inspector/front-end/ObjectPropertiesSection.js:
        (WebInspector.ObjectPropertiesSection.prototype.update.callback):
        (WebInspector.ObjectPropertiesSection.prototype.update):
        (WebInspector.ObjectPropertiesSection.prototype.updateProperties):
        (WebInspector.ObjectPropertyTreeElement.prototype.onpopulate.callback):
        (WebInspector.ObjectPropertyTreeElement.prototype.onpopulate):
        (WebInspector.ArrayGroupingTreeElement):
        (WebInspector.ArrayGroupingTreeElement._populateArray):
        (WebInspector.ArrayGroupingTreeElement._populateRanges):
        (WebInspector.ArrayGroupingTreeElement._populateRanges.callback):
        (WebInspector.ArrayGroupingTreeElement._populateAsFragment):
        (WebInspector.ArrayGroupingTreeElement._populateAsFragment.processArrayFragment):
        (WebInspector.ArrayGroupingTreeElement._populateAsFragment.processProperties):
        (WebInspector.ArrayGroupingTreeElement._populateNonIndexProperties.buildObjectFragment):
        (WebInspector.ArrayGroupingTreeElement._populateNonIndexProperties.processObjectFragment):
        (WebInspector.ArrayGroupingTreeElement._populateNonIndexProperties.processProperties):
        (WebInspector.ArrayGroupingTreeElement._populateNonIndexProperties):
        (WebInspector.ArrayGroupingTreeElement.prototype.onpopulate):
        (WebInspector.ArrayGroupingTreeElement.prototype.onattach):
        * inspector/front-end/PropertiesSidebarPane.js:
        (WebInspector.PropertiesSidebarPane.prototype.update.nodeResolved):
        * inspector/front-end/RemoteObject.js:
        (WebInspector.RemoteObject.prototype.callFunction):
        (WebInspector.RemoteObject.prototype.callFunctionJSON):

2012-03-06  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Open link in resources panel only works the second time
        https://bugs.webkit.org/show_bug.cgi?id=80407

        Reviewed by Pavel Feldman.

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

2012-03-02  Yury Semikhatsky  <yurys@chromium.org>

        Web Inspector: InspectorCounters mechanism should be thread-safe
        https://bugs.webkit.org/show_bug.cgi?id=80166

        Make InspectorCounters instance thread local so that it can be safely accessed
        in workers.

        Reviewed by Pavel Feldman.

        * bindings/js/JSEventListener.cpp:
        (WebCore::JSEventListener::JSEventListener):
        (WebCore::JSEventListener::~JSEventListener):
        * bindings/v8/V8AbstractEventListener.cpp:
        (WebCore::V8AbstractEventListener::V8AbstractEventListener):
        (WebCore::V8AbstractEventListener::~V8AbstractEventListener):
        * dom/Document.cpp:
        (WebCore::Document::Document):
        (WebCore::Document::~Document):
        * dom/Document.h:
        (WebCore::Node::Node):
        * dom/Node.cpp:
        (WebCore::Node::~Node):
        * inspector/InspectorCounters.cpp:
        (WebCore::InspectorCounters::InspectorCounters):
        (WebCore::InspectorCounters::counterValue):
        (WebCore):
        (WebCore::InspectorCounters::current):
        * inspector/InspectorCounters.h:
        (WebCore::InspectorCounters::incrementCounter):
        (WebCore::InspectorCounters::decrementCounter):
        (InspectorCounters):
        * inspector/InspectorTimelineAgent.cpp:
        (WebCore::InspectorTimelineAgent::setHeapSizeStatistic):
        * platform/ThreadGlobalData.cpp:
        (WebCore::ThreadGlobalData::ThreadGlobalData):
        (WebCore::ThreadGlobalData::destroy):
        * platform/ThreadGlobalData.h:
        (WebCore):
        (ThreadGlobalData):
        (WebCore::ThreadGlobalData::inspectorCounters):

2012-03-06  Leo Yang  <leo.yang@torchmobile.com.cn>

        [BlackBerry] Upstream typedef of NativeImageSourcePtr and NativeImagePtr
        https://bugs.webkit.org/show_bug.cgi?id=80388

        Reviewed by Antonio Gomes.

        These are the BlackBerry typdefs of NativeImageSourcePtr and NativeImagePtr.

        * platform/graphics/ImageSource.h:
        (WebCore):

2012-03-06  Hans Muller  <hmuller@adobe.com>

        SVG transform-origin presentation attribute
        https://bugs.webkit.org/show_bug.cgi?id=79678

        Reviewed by Nikolas Zimmermann.

        Added the SVG transform-origin presentation attribute.  Currently WebCore::mapAttributeToCSSProperty()
        just maps it to -webkit-transform-origin.  When the transform-origin CSS property is supported, this
        part of the change can be removed.

        Test: svg/transforms/transform-origin-presentation-attribute.xhtml

        * svg/SVGStyledElement.cpp:
        (WebCore::mapAttributeToCSSProperty):
        (WebCore::SVGStyledElement::cssPropertyIdForSVGAttributeName):
        * svg/svgattrs.in:

2012-01-26  Philippe Normand  <pnormand@igalia.com>

        [GStreamer] disable GStreamerGWorld when building against 0.11
        https://bugs.webkit.org/show_bug.cgi?id=77088

        Reviewed by Martin Robinson.

        Don't build GStreamerGWorld and PlatformVideoWindow under
        GStreamer 0.11. It's supposed to be removed soon anyway.

        * platform/graphics/gstreamer/GStreamerGWorld.cpp:
        * platform/graphics/gstreamer/GStreamerGWorld.h:
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::totalBytes):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:
        (MediaPlayerPrivateGStreamer):
        * platform/graphics/gstreamer/PlatformVideoWindow.h:
        * platform/graphics/gstreamer/PlatformVideoWindowEfl.cpp:
        * platform/graphics/gstreamer/PlatformVideoWindowGtk.cpp:
        * platform/graphics/gstreamer/PlatformVideoWindowMac.mm:
        * platform/graphics/gstreamer/PlatformVideoWindowQt.cpp:

2012-03-06  Alexander Færøy  <alexander.faeroy@nokia.com>

        Rename m_tileCreationTimer in the tiled backing store
        https://bugs.webkit.org/show_bug.cgi?id=80414

        Patch by Kenneth Rohde Christiansen and Alexander Færøy.

        Reviewed by Tor Arne Vestbø.

        The m_tileCreationTimer member is currently being used to represent a
        timer that is fired when the backing store has been updated which is
        confusing with its current name.  This patch fixes this by renaming
        the m_tileCreationTimer to m_backingStoreUpdateTimer.

        * platform/graphics/TiledBackingStore.cpp:
        (WebCore::TiledBackingStore::TiledBackingStore):
        (WebCore::TiledBackingStore::setTileSize):
        (WebCore::TiledBackingStore::coverWithTilesIfNeeded):
        (WebCore::TiledBackingStore::createTiles):
        (WebCore::TiledBackingStore::startBackingStoreUpdateTimer):
        (WebCore::TiledBackingStore::backingStoreUpdateTimerFired):
        (WebCore::TiledBackingStore::setContentsFrozen):
        * platform/graphics/TiledBackingStore.h:
        (TiledBackingStore):

2012-03-06  Alexander Færøy  <alexander.faeroy@nokia.com>

        Remove TileTimer typedef from the tiled backing store
        https://bugs.webkit.org/show_bug.cgi?id=80408

        Patch by Kenneth Rohde Christiansen and Alexander Færøy.

        Reviewed by Tor Arne Vestbø.

        * platform/graphics/TiledBackingStore.cpp:
        (WebCore::TiledBackingStore::tileBufferUpdateTimerFired):
        (WebCore::TiledBackingStore::tileCreationTimerFired):
        * platform/graphics/TiledBackingStore.h:
        (TiledBackingStore):

2012-03-06  Robin Cao  <robin.cao@torchmobile.com.cn>

        [BlackBerry] Upstream LayerRenderer.{h, cpp}
        https://bugs.webkit.org/show_bug.cgi?id=79874

        Reviewed by Antonio Gomes.

        Initial upstream, no new tests.

        * platform/graphics/blackberry/LayerRenderer.cpp: Added.
        (WebCore):
        (WebCore::checkGLError):
        (WebCore::loadShader):
        (WebCore::loadShaderProgram):
        (WebCore::orthoMatrix):
        (WebCore::rawPtrVectorFromRefPtrVector):
        (WebCore::LayerRenderer::create):
        (WebCore::LayerRenderer::LayerRenderer):
        (WebCore::LayerRenderer::~LayerRenderer):
        (WebCore::LayerRenderer::releaseLayerResources):
        (WebCore::compareLayerZ):
        (WebCore::LayerRenderer::drawLayers):
        (WebCore::LayerRenderer::useSurface):
        (WebCore::LayerRenderer::drawLayersOnSurfaces):
        (WebCore::LayerRenderer::setRootLayer):
        (WebCore::LayerRenderer::addLayer):
        (WebCore::LayerRenderer::removeLayer):
        (WebCore::LayerRenderer::addLayerToReleaseTextureResourcesList):
        (WebCore::LayerRenderer::toOpenGLWindowCoordinates):
        (WebCore::LayerRenderer::toWebKitWindowCoordinates):
        (WebCore::LayerRenderer::toWebKitDocumentCoordinates):
        (WebCore::LayerRenderer::drawDebugBorder):
        (WebCore::LayerRenderer::drawHolePunchRect):
        (WebCore::LayerRenderer::updateLayersRecursive):
        (WebCore::hasRotationalComponent):
        (WebCore::LayerRenderer::layerAlreadyOnSurface):
        (WebCore::collect3DPreservingLayers):
        (WebCore::LayerRenderer::compositeLayersRecursive):
        (WebCore::LayerRenderer::updateScissorIfNeeded):
        (WebCore::LayerRenderer::makeContextCurrent):
        (WebCore::LayerRenderer::bindCommonAttribLocation):
        (WebCore::LayerRenderer::initializeSharedGLObjects):
        (WebCore::LayerRenderingResults::holePunchRect):
        (WebCore::LayerRenderingResults::addHolePunchRect):
        (WebCore::LayerRenderingResults::addDirtyRect):
        (WebCore::LayerRenderingResults::isEmpty):
        * platform/graphics/blackberry/LayerRenderer.h: Added.
        (WebCore):
        (LayerRenderingResults):
        (WebCore::LayerRenderingResults::LayerRenderingResults):
        (WebCore::LayerRenderingResults::holePunchRectSize):
        (WebCore::LayerRenderingResults::dirtyRect):
        (LayerRenderer):
        (WebCore::LayerRenderer::rootLayer):
        (WebCore::LayerRenderer::hardwareCompositing):
        (WebCore::LayerRenderer::setClearSurfaceOnDrawLayers):
        (WebCore::LayerRenderer::clearSurfaceOnDrawLayers):
        (WebCore::LayerRenderer::context):
        (WebCore::LayerRenderer::lastRenderingResults):
        (WebCore::LayerRenderer::setNeedsCommit):

2012-03-06  Roland Steiner  <rolandsteiner@chromium.org>

        r109563 caused perf regression
        https://bugs.webkit.org/show_bug.cgi?id=80404

        Add test for Element or ShadowRoot.

        Reviewed by Antti Koivisto.

        No new tests. (fix)

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

2012-03-06  Pavel Podivilov  <podivilov@chromium.org>

        Web Inspector: prepare for extracting ScriptMapping implementation from DebuggerPresentationModel.
        https://bugs.webkit.org/show_bug.cgi?id=80396

        Limit RawSourceCode usages to a subset of methods. This subset will be moved to ScriptMapping implementation in a separate change.

        Reviewed by Vsevolod Vlasov.

        * inspector/front-end/DebuggerPresentationModel.js:
        (WebInspector.DebuggerPresentationModel):
        (WebInspector.DebuggerPresentationModel.prototype.createPlacard):
        (WebInspector.DebuggerPresentationModel.prototype.createLiveLocation):
        (WebInspector.DebuggerPresentationModel.prototype._parsedScriptSource):
        (WebInspector.DebuggerPresentationModel.prototype._failedToParseScriptSource):
        (WebInspector.DebuggerPresentationModel.prototype.setScriptSource.didEditScriptSource):
        (WebInspector.DebuggerPresentationModel.prototype.setScriptSource):
        (WebInspector.DebuggerPresentationModel.prototype._forceUpdateSourceMapping):
        (WebInspector.DebuggerPresentationModel.prototype._addConsoleMessageToScript):
        (WebInspector.DebuggerPresentationModel.prototype._debuggerPaused):
        (WebInspector.DebuggerPresentationModel.prototype.set selectedCallFrame):
        (WebInspector.PresentationCallFrame):
        (WebInspector.PresentationCallFrame.prototype.uiLocation):
        (WebInspector.DebuggerPresentationModel.CallFramePlacard):
        (WebInspector.DebuggerPresentationModelResourceBinding.prototype.canSetContent):
        (WebInspector.DebuggerPresentationModelResourceBinding.prototype.setContent):
        (WebInspector.DebuggerPresentationModelResourceBinding.prototype._uiSourceCodeForResource):
        (WebInspector.DebuggerPresentationModel.Linkifier.prototype.linkifyRawLocation):

2012-03-06  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: [Regression] Execution line is not revealed when debugger is stopped if scripts panel was not yet shown.
        https://bugs.webkit.org/show_bug.cgi?id=80306

        Reviewed by Pavel Feldman.

        Test: inspector/debugger/reveal-execution-line.html

        * inspector/front-end/ConsoleView.js:
        * inspector/front-end/DebuggerPresentationModel.js:
        (WebInspector.DebuggerPresentationModel.prototype._debuggerPaused):
        * inspector/front-end/JavaScriptSourceFrame.js:
        (WebInspector.JavaScriptSourceFrame.prototype.afterTextChanged):
        (WebInspector.JavaScriptSourceFrame.prototype.setExecutionLine):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype._executionLineChanged):
        (WebInspector.ScriptsPanel.prototype._revealExecutionLine):
        (WebInspector.ScriptsPanel.prototype._callFrameSelected):
        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame.prototype.willHide):
        (WebInspector.SourceFrame.prototype.highlightLine):
        (WebInspector.SourceFrame.prototype.revealLine):
        (WebInspector.SourceFrame.prototype._clearLineToReveal):
        (WebInspector.SourceFrame.prototype.setContent):

2012-03-06  Pavel Podivilov  <podivilov@chromium.org>

        Web Inspector: remove reference to RawSourceCode from UISourceCode.
        https://bugs.webkit.org/show_bug.cgi?id=80395

        Reviewed by Vsevolod Vlasov.

        * inspector/compile-front-end.sh:
        * inspector/front-end/DebuggerPresentationModel.js:
        (WebInspector.DebuggerPresentationModel):
        (WebInspector.DebuggerPresentationModel.prototype._handleUISourceCodeListChanged):
        (WebInspector.DebuggerPresentationModel.prototype._uiSourceCodeListChanged):
        (WebInspector.DebuggerPresentationModel.prototype._restoreBreakpoints):
        (WebInspector.DebuggerPresentationModel.prototype.setScriptSource.didEditScriptSource):
        (WebInspector.DebuggerPresentationModel.prototype.setScriptSource):
        (WebInspector.DebuggerPresentationModel.prototype.continueToLine):
        (WebInspector.DebuggerPresentationModel.prototype._debuggerReset):
        * inspector/front-end/RawSourceCode.js:
        (WebInspector.RawSourceCode.prototype._createUISourceCode):
        * inspector/front-end/UISourceCode.js:
        (WebInspector.UISourceCode):

2012-03-06  Andrey Kosyakov  <caseq@chromium.org>

        Web Inspector: move timeline panel overview mode toggle buttons to overview sidebar tree
        https://bugs.webkit.org/show_bug.cgi?id=80304

        Reviewed by Pavel Feldman.

        * inspector/front-end/Images/statusbarButtonGlyphs.png:
        * inspector/front-end/Settings.js:
        (WebInspector.ExperimentsSettings):
        * inspector/front-end/TimelineOverviewPane.js:
        (WebInspector.TimelineOverviewPane):
        (WebInspector.TimelineOverviewPane.prototype._showTimelines):
        (WebInspector.TimelineOverviewPane.prototype._showMemoryGraph):
        (WebInspector.TimelineOverviewPane.prototype._setVerticalOverview):
        (WebInspector.TimelineOverviewPane.prototype._onOverviewModeChanged):
        (WebInspector.TimelineOverviewPane.prototype.update):
        (WebInspector.TimelineOverviewPane.prototype.reset):
        (WebInspector.TimelineOverviewPane.prototype._onWindowChanged):
        (WebInspector.TimelineVerticalOverview):
        (WebInspector.TimelineOverviewModeSelector):
        (WebInspector.TimelineOverviewModeSelector.prototype.addButton):
        (WebInspector.TimelineOverviewModeSelector.prototype.get value):
        (WebInspector.TimelineOverviewModeSelector.prototype._createButton):
        (WebInspector.TimelineOverviewModeSelector.prototype._select):
        (WebInspector.TimelineOverviewModeSelector.prototype._onClick):
        * inspector/front-end/TimelinePanel.js:
        (WebInspector.TimelinePanel):
        (WebInspector.TimelinePanel.prototype.get statusBarItems):
        (WebInspector.TimelinePanel.prototype._createStatusbarButtons):
        (WebInspector.TimelinePanel.prototype._updateEventDividers):
        (WebInspector.TimelinePanel.prototype._glueParentButtonClicked):
        (WebInspector.TimelinePanel.prototype.revealRecordAt):
        * inspector/front-end/inspector.css:
        * inspector/front-end/timelinePanel.css:
        (.timeline-vertical-overview #timeline-overview-grid):
        (.timeline-vertical-overview .timeline-overview-window):
        (.timeline-vertical-overview .timeline-overview-dividers-background):
        (.timeline-vertical-overview #timeline-overview-memory):
        (.timeline-vertical-overview-status-bar-item.toggled-on .glyph):
        (.timeline-vertical-overview-bars):
        (.timeline-vertical-overview-bars .padding):
        (.timeline-vertical-overview-bars .timeline-bar-vertical):
        (.timeline.timeline-vertical-overview .resources-divider):
        (.sidebar-tree-item .timeline-vertical-overview-status-bar-item):
        (.timeline-overview-mode-selector):
        (.timeline-overview-mode-selector .glyph):
        (.timeline-overview-mode-selector button):
        (.timeline-overview-mode-selector button.toggled):
        (.timeline-overview-mode-selector button:active):
        (.sidebar-tree-item:not(.selected) .timeline-overview-mode-selector button):
        (.sidebar-tree-item:not(.selected) .timeline-overview-mode-selector button.toggled):
        (.timeline-overview-mode-selector button:first-of-type):
        (.timeline-overview-mode-selector button:last-of-type):
        (.timeline-mode-vertical-bars .glyph):
        (.timeline-mode-horizontal-bars .glyph):

2012-03-05  Alexander Færøy  <alexander.faeroy@nokia.com>

        Make it explicit when we are allowing updates to the actual backing store or the tile buffers
        https://bugs.webkit.org/show_bug.cgi?id=80288

        Patch by Kenneth Rohde Christiansen and Alexander Færøy.

        Reviewed by Noam Rosenthal.

        * platform/graphics/TiledBackingStore.cpp:
        (WebCore::TiledBackingStore::createTiles):
        (WebCore::TiledBackingStore::isBackingStoreUpdatesSuspended):
        (WebCore):
        (WebCore::TiledBackingStore::isTileBufferUpdatesSuspended):
        (WebCore::TiledBackingStore::startTileBufferUpdateTimer):
        (WebCore::TiledBackingStore::startTileCreationTimer):
        * platform/graphics/TiledBackingStore.h:
        (TiledBackingStore):

2012-03-06  Mark Rowe  <mrowe@apple.com>

        Build fix after r109877.

        * WebCore.xcodeproj/project.pbxproj: Ensure that headers are copied in to WebCore.framework so that
        WebKit can still find them.

2012-03-06  Andreas Kling  <awesomekling@apple.com>

        Remove incorrect WTF::Vector traits for CSSProperty.
        <http://webkit.org/b/53285>
        <rdar://problem/10161286>

        Reviewed by Antti Koivisto.

        We shouldn't allow copying Vector<CSSProperty> contents around with memcpy()
        as CSSProperty has a RefPtr member and this would muck up the refcount.
        This was added to facilitate fast comparison of property vectors, and we no
        longer use that, so there shouldn't be any performance concerns here.

        * css/CSSProperty.h:

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

        Attempt to fix the Qt minimal build.

        * Target.pri:

2012-03-06  Roland Steiner  <rolandsteiner@chromium.org>

        :scope should behave as :root outside scoped style sheet
        https://bugs.webkit.org/show_bug.cgi?id=80389

        Fall through to :root implementation if no scope is used.

        Reviewed by Antti Koivisto.

        Test: fast/css/style-scoped/scope-pseudo.html

        * css/SelectorChecker.cpp:
        (WebCore::SelectorChecker::checkOneSelector):

2012-03-05  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: [Regression] Message bubbles are not removed from scripts panel source frames after console was cleared.
        https://bugs.webkit.org/show_bug.cgi?id=80275

        Reviewed by Pavel Feldman.

        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype._consoleMessagesCleared):
        * inspector/front-end/utilities.js:

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

        Move SQLDatabase code into Modules/webdatabase
        https://bugs.webkit.org/show_bug.cgi?id=80393

        Reviewed by Kentaro Hara.

        There are still a couple (minor) SQLDatabase references from WebCore
        proper, but we've gotten this code to the point where it makes sense to
        move it into the Modules directory.  (This patch just moves code---no
        behavior change.)

        * CMakeLists.txt:
        * DerivedSources.make:
        * DerivedSources.pri:
        * GNUmakefile.am:
        * GNUmakefile.list.am:
        * Modules/webdatabase: Added.
        * Modules/webdatabase/AbstractDatabase.cpp: Copied from Source/WebCore/storage/AbstractDatabase.cpp.
        * Modules/webdatabase/AbstractDatabase.h: Copied from Source/WebCore/storage/AbstractDatabase.h.
        * Modules/webdatabase/ChangeVersionWrapper.cpp: Copied from Source/WebCore/storage/ChangeVersionWrapper.cpp.
        * Modules/webdatabase/ChangeVersionWrapper.h: Copied from Source/WebCore/storage/ChangeVersionWrapper.h.
        * Modules/webdatabase/DOMWindowSQLDatabase.cpp: Copied from Source/WebCore/storage/DOMWindowSQLDatabase.cpp.
        * Modules/webdatabase/DOMWindowSQLDatabase.h: Copied from Source/WebCore/storage/DOMWindowSQLDatabase.h.
        * Modules/webdatabase/DOMWindowSQLDatabase.idl: Copied from Source/WebCore/storage/DOMWindowSQLDatabase.idl.
        * Modules/webdatabase/Database.cpp: Copied from Source/WebCore/storage/Database.cpp.
        * Modules/webdatabase/Database.h: Copied from Source/WebCore/storage/Database.h.
        * Modules/webdatabase/Database.idl: Copied from Source/WebCore/storage/Database.idl.
        * Modules/webdatabase/DatabaseAuthorizer.cpp: Copied from Source/WebCore/storage/DatabaseAuthorizer.cpp.
        * Modules/webdatabase/DatabaseAuthorizer.h: Copied from Source/WebCore/storage/DatabaseAuthorizer.h.
        * Modules/webdatabase/DatabaseCallback.h: Copied from Source/WebCore/storage/DatabaseCallback.h.
        * Modules/webdatabase/DatabaseCallback.idl: Copied from Source/WebCore/storage/DatabaseCallback.idl.
        * Modules/webdatabase/DatabaseContext.cpp: Copied from Source/WebCore/storage/DatabaseContext.cpp.
        * Modules/webdatabase/DatabaseContext.h: Copied from Source/WebCore/storage/DatabaseContext.h.
        * Modules/webdatabase/DatabaseDetails.h: Copied from Source/WebCore/storage/DatabaseDetails.h.
        * Modules/webdatabase/DatabaseSync.cpp: Copied from Source/WebCore/storage/DatabaseSync.cpp.
        * Modules/webdatabase/DatabaseSync.h: Copied from Source/WebCore/storage/DatabaseSync.h.
        * Modules/webdatabase/DatabaseSync.idl: Copied from Source/WebCore/storage/DatabaseSync.idl.
        * Modules/webdatabase/DatabaseTask.cpp: Copied from Source/WebCore/storage/DatabaseTask.cpp.
        * Modules/webdatabase/DatabaseTask.h: Copied from Source/WebCore/storage/DatabaseTask.h.
        * Modules/webdatabase/DatabaseThread.cpp: Copied from Source/WebCore/storage/DatabaseThread.cpp.
        * Modules/webdatabase/DatabaseThread.h: Copied from Source/WebCore/storage/DatabaseThread.h.
        * Modules/webdatabase/DatabaseTracker.cpp: Copied from Source/WebCore/storage/DatabaseTracker.cpp.
        * Modules/webdatabase/DatabaseTracker.h: Copied from Source/WebCore/storage/DatabaseTracker.h.
        * Modules/webdatabase/DatabaseTrackerClient.h: Copied from Source/WebCore/storage/DatabaseTrackerClient.h.
        * Modules/webdatabase/OriginQuotaManager.cpp: Copied from Source/WebCore/storage/OriginQuotaManager.cpp.
        * Modules/webdatabase/OriginQuotaManager.h: Copied from Source/WebCore/storage/OriginQuotaManager.h.
        * Modules/webdatabase/OriginUsageRecord.cpp: Copied from Source/WebCore/storage/OriginUsageRecord.cpp.
        * Modules/webdatabase/OriginUsageRecord.h: Copied from Source/WebCore/storage/OriginUsageRecord.h.
        * Modules/webdatabase/SQLCallbackWrapper.h: Copied from Source/WebCore/storage/SQLCallbackWrapper.h.
        * Modules/webdatabase/SQLError.h: Copied from Source/WebCore/storage/SQLError.h.
        * Modules/webdatabase/SQLError.idl: Copied from Source/WebCore/storage/SQLError.idl.
        * Modules/webdatabase/SQLException.cpp: Copied from Source/WebCore/storage/SQLException.cpp.
        * Modules/webdatabase/SQLException.h: Copied from Source/WebCore/storage/SQLException.h.
        * Modules/webdatabase/SQLException.idl: Copied from Source/WebCore/storage/SQLException.idl.
        * Modules/webdatabase/SQLResultSet.cpp: Copied from Source/WebCore/storage/SQLResultSet.cpp.
        * Modules/webdatabase/SQLResultSet.h: Copied from Source/WebCore/storage/SQLResultSet.h.
        * Modules/webdatabase/SQLResultSet.idl: Copied from Source/WebCore/storage/SQLResultSet.idl.
        * Modules/webdatabase/SQLResultSetRowList.cpp: Copied from Source/WebCore/storage/SQLResultSetRowList.cpp.
        * Modules/webdatabase/SQLResultSetRowList.h: Copied from Source/WebCore/storage/SQLResultSetRowList.h.
        * Modules/webdatabase/SQLResultSetRowList.idl: Copied from Source/WebCore/storage/SQLResultSetRowList.idl.
        * Modules/webdatabase/SQLStatement.cpp: Copied from Source/WebCore/storage/SQLStatement.cpp.
        * Modules/webdatabase/SQLStatement.h: Copied from Source/WebCore/storage/SQLStatement.h.
        * Modules/webdatabase/SQLStatementCallback.h: Copied from Source/WebCore/storage/SQLStatementCallback.h.
        * Modules/webdatabase/SQLStatementCallback.idl: Copied from Source/WebCore/storage/SQLStatementCallback.idl.
        * Modules/webdatabase/SQLStatementErrorCallback.h: Copied from Source/WebCore/storage/SQLStatementErrorCallback.h.
        * Modules/webdatabase/SQLStatementErrorCallback.idl: Copied from Source/WebCore/storage/SQLStatementErrorCallback.idl.
        * Modules/webdatabase/SQLStatementSync.cpp: Copied from Source/WebCore/storage/SQLStatementSync.cpp.
        * Modules/webdatabase/SQLStatementSync.h: Copied from Source/WebCore/storage/SQLStatementSync.h.
        * Modules/webdatabase/SQLTransaction.cpp: Copied from Source/WebCore/storage/SQLTransaction.cpp.
        * Modules/webdatabase/SQLTransaction.h: Copied from Source/WebCore/storage/SQLTransaction.h.
        * Modules/webdatabase/SQLTransaction.idl: Copied from Source/WebCore/storage/SQLTransaction.idl.
        * Modules/webdatabase/SQLTransactionCallback.h: Copied from Source/WebCore/storage/SQLTransactionCallback.h.
        * Modules/webdatabase/SQLTransactionCallback.idl: Copied from Source/WebCore/storage/SQLTransactionCallback.idl.
        * Modules/webdatabase/SQLTransactionClient.cpp: Copied from Source/WebCore/storage/SQLTransactionClient.cpp.
        * Modules/webdatabase/SQLTransactionClient.h: Copied from Source/WebCore/storage/SQLTransactionClient.h.
        * Modules/webdatabase/SQLTransactionCoordinator.cpp: Copied from Source/WebCore/storage/SQLTransactionCoordinator.cpp.
        * Modules/webdatabase/SQLTransactionCoordinator.h: Copied from Source/WebCore/storage/SQLTransactionCoordinator.h.
        * Modules/webdatabase/SQLTransactionErrorCallback.h: Copied from Source/WebCore/storage/SQLTransactionErrorCallback.h.
        * Modules/webdatabase/SQLTransactionErrorCallback.idl: Copied from Source/WebCore/storage/SQLTransactionErrorCallback.idl.
        * Modules/webdatabase/SQLTransactionSync.cpp: Copied from Source/WebCore/storage/SQLTransactionSync.cpp.
        * Modules/webdatabase/SQLTransactionSync.h: Copied from Source/WebCore/storage/SQLTransactionSync.h.
        * Modules/webdatabase/SQLTransactionSync.idl: Copied from Source/WebCore/storage/SQLTransactionSync.idl.
        * Modules/webdatabase/SQLTransactionSyncCallback.h: Copied from Source/WebCore/storage/SQLTransactionSyncCallback.h.
        * Modules/webdatabase/SQLTransactionSyncCallback.idl: Copied from Source/WebCore/storage/SQLTransactionSyncCallback.idl.
        * Modules/webdatabase/WorkerContextSQLDatabase.cpp: Copied from Source/WebCore/storage/WorkerContextSQLDatabase.cpp.
        * Modules/webdatabase/WorkerContextSQLDatabase.h: Copied from Source/WebCore/storage/WorkerContextSQLDatabase.h.
        * Modules/webdatabase/WorkerContextSQLDatabase.idl: Copied from Source/WebCore/storage/WorkerContextSQLDatabase.idl.
        * Modules/webdatabase/chromium: Added.
        * Modules/webdatabase/chromium/DatabaseObserver.h: Copied from Source/WebCore/storage/chromium/DatabaseObserver.h.
        * Modules/webdatabase/chromium/DatabaseTrackerChromium.cpp: Copied from Source/WebCore/storage/chromium/DatabaseTrackerChromium.cpp.
        * Modules/webdatabase/chromium/QuotaTracker.cpp: Copied from Source/WebCore/storage/chromium/QuotaTracker.cpp.
        * Modules/webdatabase/chromium/QuotaTracker.h: Copied from Source/WebCore/storage/chromium/QuotaTracker.h.
        * Modules/webdatabase/chromium/SQLTransactionClientChromium.cpp: Copied from Source/WebCore/storage/chromium/SQLTransactionClientChromium.cpp.
        * Target.pri:
        * WebCore.gyp/WebCore.gyp:
        * WebCore.gypi:
        * WebCore.pri:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.vcproj/WebCoreCommon.vsprops:
        * WebCore.vcproj/copyForwardingHeaders.cmd:
        * WebCore.xcodeproj/project.pbxproj:
        * storage/AbstractDatabase.cpp: Removed.
        * storage/AbstractDatabase.h: Removed.
        * storage/ChangeVersionWrapper.cpp: Removed.
        * storage/ChangeVersionWrapper.h: Removed.
        * storage/DOMWindowSQLDatabase.cpp: Removed.
        * storage/DOMWindowSQLDatabase.h: Removed.
        * storage/DOMWindowSQLDatabase.idl: Removed.
        * storage/Database.cpp: Removed.
        * storage/Database.h: Removed.
        * storage/Database.idl: Removed.
        * storage/DatabaseAuthorizer.cpp: Removed.
        * storage/DatabaseAuthorizer.h: Removed.
        * storage/DatabaseCallback.h: Removed.
        * storage/DatabaseCallback.idl: Removed.
        * storage/DatabaseContext.cpp: Removed.
        * storage/DatabaseContext.h: Removed.
        * storage/DatabaseDetails.h: Removed.
        * storage/DatabaseSync.cpp: Removed.
        * storage/DatabaseSync.h: Removed.
        * storage/DatabaseSync.idl: Removed.
        * storage/DatabaseTask.cpp: Removed.
        * storage/DatabaseTask.h: Removed.
        * storage/DatabaseThread.cpp: Removed.
        * storage/DatabaseThread.h: Removed.
        * storage/DatabaseTracker.cpp: Removed.
        * storage/DatabaseTracker.h: Removed.
        * storage/DatabaseTrackerClient.h: Removed.
        * storage/OriginQuotaManager.cpp: Removed.
        * storage/OriginQuotaManager.h: Removed.
        * storage/OriginUsageRecord.cpp: Removed.
        * storage/OriginUsageRecord.h: Removed.
        * storage/SQLCallbackWrapper.h: Removed.
        * storage/SQLError.h: Removed.
        * storage/SQLError.idl: Removed.
        * storage/SQLException.cpp: Removed.
        * storage/SQLException.h: Removed.
        * storage/SQLException.idl: Removed.
        * storage/SQLResultSet.cpp: Removed.
        * storage/SQLResultSet.h: Removed.
        * storage/SQLResultSet.idl: Removed.
        * storage/SQLResultSetRowList.cpp: Removed.
        * storage/SQLResultSetRowList.h: Removed.
        * storage/SQLResultSetRowList.idl: Removed.
        * storage/SQLStatement.cpp: Removed.
        * storage/SQLStatement.h: Removed.
        * storage/SQLStatementCallback.h: Removed.
        * storage/SQLStatementCallback.idl: Removed.
        * storage/SQLStatementErrorCallback.h: Removed.
        * storage/SQLStatementErrorCallback.idl: Removed.
        * storage/SQLStatementSync.cpp: Removed.
        * storage/SQLStatementSync.h: Removed.
        * storage/SQLTransaction.cpp: Removed.
        * storage/SQLTransaction.h: Removed.
        * storage/SQLTransaction.idl: Removed.
        * storage/SQLTransactionCallback.h: Removed.
        * storage/SQLTransactionCallback.idl: Removed.
        * storage/SQLTransactionClient.cpp: Removed.
        * storage/SQLTransactionClient.h: Removed.
        * storage/SQLTransactionCoordinator.cpp: Removed.
        * storage/SQLTransactionCoordinator.h: Removed.
        * storage/SQLTransactionErrorCallback.h: Removed.
        * storage/SQLTransactionErrorCallback.idl: Removed.
        * storage/SQLTransactionSync.cpp: Removed.
        * storage/SQLTransactionSync.h: Removed.
        * storage/SQLTransactionSync.idl: Removed.
        * storage/SQLTransactionSyncCallback.h: Removed.
        * storage/SQLTransactionSyncCallback.idl: Removed.
        * storage/WorkerContextSQLDatabase.cpp: Removed.
        * storage/WorkerContextSQLDatabase.h: Removed.
        * storage/WorkerContextSQLDatabase.idl: Removed.
        * storage/chromium/DatabaseObserver.h: Removed.
        * storage/chromium/DatabaseTrackerChromium.cpp: Removed.
        * storage/chromium/QuotaTracker.cpp: Removed.
        * storage/chromium/QuotaTracker.h: Removed.
        * storage/chromium/SQLTransactionClientChromium.cpp: Removed.

2012-03-05  Kent Tamura  <tkent@chromium.org>

        Do not reformat strings in <input type=number> on platforms using LocalizedNumberICU.
        https://bugs.webkit.org/show_bug.cgi?id=78326

        Reviewed by Hajime Morita.

        We had bugs such as stripping leading zeros, dropping lower digits
        of large numbers because we parse a user-input string to a double
        value, and generate a string from the double value.

        In order to avoid such reformatting, we converts number strings by
        replacing standard digits to corresponding localized digits.

        * WebCore.gypi: Added LocalizedNumberICU.h
        * platform/text/LocalizedNumberICU.cpp:
        (WebCore::ICULocale::ICULocale): Added.
        (WebCore::ICULocale::create): A testing factory function.
        (WebCore::ICULocale::createForCurrentLocale): A practical factory function.
        (WebCore::ICULocale::setDecimalSymbol): Initialize a symbol table.
        (WebCore::ICULocale::initializeDecimalFormat): Initialize ICU DecimalFormat.
        (WebCore::ICULocale::convertToLocalizedNumber):
         Replace characters to corresponding localized characters.
        (WebCore::matches): A helper function for convertFromLocalizedNumber.
        (WebCore::endsWith): ditto.
        (WebCore::ICULocale::determineStartPosition): ditto.
        (WebCore::ICULocale::matchedDecimalSymbolIndex): ditto.
        (WebCore::ICULocale::convertFromLocalizedNumber):
         Replace characters to corresponding standard characters.
        (WebCore::currentLocale): Added.
        (WebCore::convertToLocalizedNumber): Uses ICULocale::convertToLocalizedNumber.
        (WebCore::convertFromLocalizedNumber): Uses ICULocale::convertFromLocalizedNumber.
        * platform/text/LocalizedNumberICU.h: Added.
        (ICULocale): Added. This is exposed to WebKit/chromium/tests/LocalizedNumberICUTest.cpp.

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

        Attempt to fix the GTK minimal build
        https://bugs.webkit.org/show_bug.cgi?id=80390

        Reviewed by Csaba Osztrogonác.

        Add some missing ifdefs.

        * Modules/geolocation/NavigatorGeolocation.cpp:
        * Modules/geolocation/NavigatorGeolocation.h:

2012-03-05  Pavel Podivilov  <podivilov@chromium.org>

        Web Inspector: stop using RawSourceCode in BreakpointManager.
        https://bugs.webkit.org/show_bug.cgi?id=80286

        Reviewed by Vsevolod Vlasov.

        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * inspector/front-end/BreakpointManager.js:
        (WebInspector.BreakpointManager.prototype.uiSourceCodeAdded):
        (WebInspector.BreakpointManager.prototype.setBreakpoint):
        (WebInspector.BreakpointManager.prototype._materializeBreakpoint):
        (WebInspector.BreakpointManager.prototype._breakpointDebuggerLocationChanged):
        * inspector/front-end/DebuggerPresentationModel.js:
        (WebInspector.DebuggerPresentationModel):
        * inspector/front-end/ScriptMapping.js: Added.
        (WebInspector.ScriptMapping):
        (WebInspector.ScriptMapping.prototype.rawLocationToUILocation):
        (WebInspector.ScriptMapping.prototype.uiLocationToRawLocation):
        (WebInspector.ScriptMapping.prototype.createLiveLocation):
        (WebInspector.ScriptMapping.prototype.uiSourceCodeList):
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/inspector.html:

2012-03-05  Philippe Normand  <pnormand@igalia.com>

        WebAudio JSC-related fixes
        https://bugs.webkit.org/show_bug.cgi?id=80299

        Reviewed by Adam Barth.

        * bindings/js/JSAudioContextCustom.cpp:
        (WebCore::JSAudioContextConstructor::constructJSAudioContext):
        Wrap the audio context in a DOM wrapper.
        * webaudio/AudioContext.idl: No need to protect EventTarget by V8
        guards, I think.
        * webaudio/JavaScriptAudioNode.idl: Ditto.

2012-03-05  Kishore Bolisetty  <kbolisetty@innominds.com>

        Element not fully repainted after application and removal of transform
        https://bugs.webkit.org/show_bug.cgi?id=61338

        Reviewed by Simon Fraser.
        RenderLayer is created and removed when a transform is applied and removed to element.
        To render the element properly after removal of transform on it, preferred widths and dimensions of
        the element and its containing block needs to be recalculated.

        Test: fast/repaint/transform-rotate-and-remove.html

        * rendering/RenderBoxModelObject.cpp:
        (WebCore):
        (WebCore::RenderBoxModelObject::styleWillChange):
        (WebCore::RenderBoxModelObject::styleDidChange):
        * rendering/RenderBoxModelObject.h:
        (RenderBoxModelObject):

2012-03-05  Gavin Barraclough  <barraclough@apple.com>

        putByIndex should throw in strict mode
        https://bugs.webkit.org/show_bug.cgi?id=80335

        Reviewed by Filip Pizlo.

        Make the MethodTable PutByIndex trap take a boolean 'shouldThrow' parameter.

        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::CloneDeserializer::putProperty):
        * bindings/objc/WebScriptObject.mm:
        (-[WebScriptObject setWebScriptValueAtIndex:value:]):
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateHeader):
        (GenerateImplementation):
        * bridge/NP_jsobject.cpp:
        (_NPN_SetProperty):
        * bridge/jni/jni_jsobject.mm:
        (JavaJSObject::setSlot):
        * bridge/runtime_array.cpp:
        (JSC::RuntimeArray::putByIndex):
        * bridge/runtime_array.h:
        (RuntimeArray):

2012-03-05  Shinya Kawanaka  <shinyak@chromium.org>

        InsertionPoint::attach should be consistent with Element.
        https://bugs.webkit.org/show_bug.cgi?id=80373

        Reviewed by Hajime Morita.

        This patch is preparation for coming <shadow> patches.

        InsertionPoint used to attach fallback elements before attaching distributed elements.
        To be consistent with Element::attach behavior, attaching distributed elements first is
        natural, because Element attaches a shadow tree first.

        Also, this patch extracts a few methods form InsretionPoint::attach() and detach()
        to keep code clean. They will become messy without this refactoring when adding
        <shadow> patch.

        No new tests. Should be covered by existing tests.

        * html/shadow/InsertionPoint.cpp:
        (WebCore::InsertionPoint::attach):
        (WebCore::InsertionPoint::detach):
        (WebCore::InsertionPoint::distributeHostChildren):
        (WebCore):
        (WebCore::InsertionPoint::clearDistribution):
        (WebCore::InsertionPoint::attachDistributedNode):
        * html/shadow/InsertionPoint.h:
        (InsertionPoint):

2012-03-05  Adam Barth  <abarth@webkit.org>

        Attempt to fix a number of GTK tests.

        * GNUmakefile.list.am:

2012-03-05  Joseph Pecoraro  <pecoraro@apple.com>

        Unreviewed rollout of r109858 for restructuring.

2012-03-05  Joseph Pecoraro  <pecoraro@apple.com>

        <http://webkit.org/b/78575> Web Inspector: Hide dock button when not allowed to dock

        There are times when an undocked inspector frontend is not allowed to
        attach to the main window. We can remove the dock button in those cases.

        Reviewed by Timothy Hatcher.

        No new tests. This functionality is port specific right now.

        * page/FrameView.cpp:
        (WebCore::FrameView::performPostLayoutTasks):
        When the main frame is resized we let the inspector frontend client
        update its docked availablility.

        * WebCore.exp.in:
        * inspector/InspectorInstrumentation.h:
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::didResizeMainFrameImpl):
        (WebCore::InspectorInstrumentation::didResizeMainFrame):
        * inspector/InspectorClient.h:
        (WebCore::InspectorClient::updateDockingAvailability):
        * inspector/InspectorController.h:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::resume):
        (WebCore::InspectorController::updateDockingAvailability):
        When the main frame is resized call up to the InspectorClient to let
        it update docking availability of the inspector frontend.

        * inspector/InspectorFrontendClient.h:
        * inspector/InspectorFrontendClientLocal.h:
        * inspector/InspectorFrontendClientLocal.cpp:
        (WebCore::InspectorFrontendClientLocal::frontendLoaded):
        (WebCore::InspectorFrontendClientLocal::setDockingUnavailable):
        On ports where the inspector frontend client is local, provide a 
        setDockingUnavailable InspectorFrontendAPI to update the docking state.
        Automatically update availablity when the frontend completes loading.

        * inspector/front-end/InspectorFrontendAPI.js:
        (InspectorFrontendAPI.setDockingUnavailable):
        * inspector/front-end/inspector.js:
        (WebInspector._createGlobalStatusBarItems):
        (WebInspector.setAttachedWindow):
        (WebInspector.setDockingUnavailable):
        (WebInspector.updateDockToggleButtonVisibility):
        Update the dock button's visibility when its created, when the attached
        state changes, when get a frontend API notification that we cannot attach.

2012-03-05  Adrienne Walker  <enne@google.com>

        Compositing overlap testing can throw layers into compositing when they should not be.
        https://bugs.webkit.org/show_bug.cgi?id=50192

        Reviewed by Simon Fraser.

        The previous overlap map behavior was that a non-composited query
        layer would become composited due to overlap if and only if the query
        layer's absolute bounds overlapped the absolute bounds of some other
        layer which:
            - draws before the query layer
            - is or has a compositing ancestor

        This behavior, while correct, was too permissive in throwing layers
        into compositing, causing many layers to get their own backing when
        they could have just gone into their compositing ancestor's backing.

        The correct logic is that non-composited query layer needs to be
        composited due to overlap if and only if the query layer's absolute
        bounds overlap the absolute bounds of some other layer which:
            - draws before the query layer
            - has a different compositing ancestor than the query layer
            - is or has a compositing ancestor that is a descendent of the
              query layer's compositing ancestor

        This patch changes the semantics of the overlap map to enable this
        behavior.

        Rather than having one global overlap map, there is now a stack of
        overlap maps. New (empty) overlap maps are pushed onto the stack
        whenever a layer becomes a compositing ancestor and popped after all
        of the compositing requirements for that layer's children have been
        computed.

        The compositing ancestor and all of its non-composited children of a
        compositing ancestor do not get considered for overlap until their
        composited ancestor has been popped off the stack. If a compositing
        ancestor has a compositing subtree, then any descendents of that
        compositing ancestor that draw after that subtree will consider
        everything in the compositing subtree for overlap.

        Test: compositing/layer-creation/stacking-context-overlap.html

        * platform/graphics/Region.cpp:
        (WebCore::Region::intersects):
        (WebCore):
        * platform/graphics/Region.h:
        (Region):
        * rendering/RenderLayerCompositor.cpp:
        (RenderLayerCompositor::OverlapMap):
        (WebCore::RenderLayerCompositor::OverlapMap::OverlapMap):
        (WebCore::RenderLayerCompositor::OverlapMap::add):
        (WebCore::RenderLayerCompositor::OverlapMap::contains):
        (WebCore::RenderLayerCompositor::OverlapMap::overlapsLayers):
        (WebCore::RenderLayerCompositor::OverlapMap::isEmpty):
        (WebCore::RenderLayerCompositor::OverlapMap::popCompositingContainer):
        (WebCore::RenderLayerCompositor::OverlapMap::pushCompositingContainer):
        (WebCore::RenderLayerCompositor::addToOverlapMapRecursive):
        (WebCore::RenderLayerCompositor::computeCompositingRequirements):
        * rendering/RenderLayerCompositor.h:
        (RenderLayerCompositor):

2012-03-05  Anders Carlsson  <andersca@apple.com>

        Address review comments from https://bugs.webkit.org/show_bug.cgi?id=80368

        * platform/graphics/ca/mac/TileCache.mm:
        (WebCore::TileCache::setNeedsDisplayInRect):

2012-03-05  Yoshifumi Inoue  <yosin@chromium.org>

        [Forms] HTMLFieldSetForms.idl doesn't have type attribute.
        https://bugs.webkit.org/show_bug.cgi?id=80109

        Reviewed by Hajime Morita.

        Test: fast/forms/fieldset/fieldset-type.html

        * html/HTMLFieldSetElement.idl: Add attribute "type"

2012-03-05  Anders Carlsson  <andersca@apple.com>

        Fix build.

        * platform/graphics/ca/mac/TileCache.mm:
        (WebCore::TileCache::setScale):

2012-03-05  Anders Carlsson  <andersca@apple.com>

        pinch-to-zoom and double-tap flicker when using the new scrolling model
        https://bugs.webkit.org/show_bug.cgi?id=80368
        <rdar://problem/10866221>

        Reviewed by Sam Weinig.

        In order to work better with zooming, make the tile cache undo the scale transformation
        and handle the scaling manually. This avoids creating huge tile backing stores when zoomed in.

        * platform/graphics/ca/mac/TileCache.mm:
        (WebCore::TileCache::TileCache):
        Initialize m_scale to 1.

        (WebCore::TileCache::setNeedsDisplayInRect):
        Scale the given rect appropriately.

        (WebCore::TileCache::drawLayer):
        Apply a scale context transform.

        (WebCore::TileCache::setScale):
        No longer set the contents scale. Instead, update the scale and revalidate the tiles.

        (WebCore::TileCache::revalidateTiles):
        Return early if the bounds are empty. This avoids showing a single tile if that happens due to a race condition.

        (WebCore::TileCache::getTileIndexRangeForRect):
        Apply the scale to the bounds.

        (WebCore::TileCache::createTileLayer):
        Don't set the contents scale.

        * platform/graphics/ca/mac/WebTileCacheLayer.mm:
        (-[WebTileCacheLayer setContentsScale:]):
        Call TileCache::setScale.

        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateCompositedBounds):
        Make sure to give the tile cache layer sane composited bounds, even if the page has absolutely positioned
        elements that are outside of the page.

2012-03-05  Leo Yang  <leo.yang@torchmobile.com.cn>

        GraphicsContext3D.h should include RefCounted.h explicitly
        https://bugs.webkit.org/show_bug.cgi?id=80251

        Reviewed by Rob Buis.

        GraphicsContext3D.h was using RefCounted but including RefCounted.h indirectly
        through GraphicsLayer.h through Animation.h. However Animation.h is included
        by GraphicsLayer.h only when ACCELERATED_COMPOSITING is on. For some configurations
        that don't use ACCELERATED_COMPOSITING but use GraphicsContext3D, like the
        BlackBerry x86 configuration, the indirect inclusion will fail.

        This patch is adding explicit inclusion of RefCounted.h to avoid that kind of
        problem.

        * platform/graphics/GraphicsContext3D.h:

2012-03-05  Kenichi Ishibashi  <bashi@chromium.org>

        [WebSocket] Should raise SYNTAX_ERR when message contains unpaired surrogates
        https://bugs.webkit.org/show_bug.cgi?id=80103

        Reviewed by Kent Tamura.

        Add UTF8 validation checks for WebSocket message and close reason.

        Tests: http/tests/websocket/tests/hybi/unpaired-surrogates-in-close-reason.html
               http/tests/websocket/tests/hybi/unpaired-surrogates-in-message.html

        * Modules/websockets/WebSocket.cpp:
        (WebCore::WebSocket::send): Raise SYNTAX_ERR if the message is invalid.
        (WebCore::WebSocket::close):Raise SYNTAX_ERR if the reason is invalid.
        * Modules/websockets/WebSocketChannel.cpp:
        (WebCore::WebSocketChannel::send): Check whether message is a valid UTF8 string.

2012-03-05  Kenneth Russell  <kbr@google.com>

        [chromium] Notify CCLayerImpl tree of context loss and restoration
        https://bugs.webkit.org/show_bug.cgi?id=80339

        Reviewed by James Robinson.

        Tested by manually killing GPU process while playing Flash video.
        Video continues to play after compositor restores its context.

        * platform/graphics/chromium/cc/CCLayerImpl.cpp:
        (WebCore::CCLayerImpl::didLoseAndRecreateGraphicsContext):
        (WebCore):
        * platform/graphics/chromium/cc/CCLayerImpl.h:
        (CCLayerImpl):
        * platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:
        (WebCore::CCLayerTreeHostImpl::sendContextLostAndRestoredNotification):
        (WebCore):
        (WebCore::CCLayerTreeHostImpl::sendContextLostAndRestoredNotificationRecursive):
        * platform/graphics/chromium/cc/CCLayerTreeHostImpl.h:
        (CCLayerTreeHostImpl):
        * platform/graphics/chromium/cc/CCPluginLayerImpl.cpp:
        (WebCore::CCPluginLayerImpl::didLoseAndRecreateGraphicsContext):
        (WebCore):
        * platform/graphics/chromium/cc/CCPluginLayerImpl.h:
        (CCPluginLayerImpl):
        * platform/graphics/chromium/cc/CCSingleThreadProxy.cpp:
        (WebCore::CCSingleThreadProxy::recreateContext):

2012-03-05  Changhun Kang  <temoochin@company100.net>

        Change the argument orders to match OpenGL's in GraphicsContext3D functions
        https://bugs.webkit.org/show_bug.cgi?id=80120

        Reviewed by Kenneth Russell.

        No new tests because this patch just change the order of arguments.

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore):
        (WebCore::WebGLRenderingContext::uniform1fv):
        (WebCore::WebGLRenderingContext::uniform1iv):
        (WebCore::WebGLRenderingContext::uniform2fv):
        (WebCore::WebGLRenderingContext::uniform2iv):
        (WebCore::WebGLRenderingContext::uniform3fv):
        (WebCore::WebGLRenderingContext::uniform3iv):
        (WebCore::WebGLRenderingContext::uniform4fv):
        (WebCore::WebGLRenderingContext::uniform4iv):
        (WebCore::WebGLRenderingContext::uniformMatrix2fv):
        (WebCore::WebGLRenderingContext::uniformMatrix3fv):
        (WebCore::WebGLRenderingContext::uniformMatrix4fv):
        * platform/graphics/GraphicsContext3D.h:
        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::drawDebugBorderQuad):
        (WebCore::LayerRendererChromium::drawTileQuad):
        (WebCore::LayerRendererChromium::drawYUV):
        (WebCore::LayerRendererChromium::drawStreamTexture):
        (WebCore::LayerRendererChromium::drawTexturedQuad):
        * platform/graphics/chromium/cc/CCRenderSurface.cpp:
        (WebCore::CCRenderSurface::drawSurface):
        * platform/graphics/efl/GraphicsContext3DEfl.cpp:
        (WebCore::GraphicsContext3D::uniform1fv):
        (WebCore::GraphicsContext3D::uniform1iv):
        (WebCore::GraphicsContext3D::uniform2fv):
        (WebCore::GraphicsContext3D::uniform2iv):
        (WebCore::GraphicsContext3D::uniform3fv):
        (WebCore::GraphicsContext3D::uniform3iv):
        (WebCore::GraphicsContext3D::uniform4fv):
        (WebCore::GraphicsContext3D::uniform4iv):
        (WebCore::GraphicsContext3D::uniformMatrix2fv):
        (WebCore::GraphicsContext3D::uniformMatrix3fv):
        (WebCore::GraphicsContext3D::uniformMatrix4fv):
        * platform/graphics/filters/FECustomFilter.cpp:
        (WebCore::FECustomFilter::bindProgramAndBuffers):
        * platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:
        (WebCore::GraphicsContext3D::uniform1fv):
        (WebCore::GraphicsContext3D::uniform2fv):
        (WebCore::GraphicsContext3D::uniform3fv):
        (WebCore::GraphicsContext3D::uniform4fv):
        (WebCore::GraphicsContext3D::uniform1iv):
        (WebCore::GraphicsContext3D::uniform2iv):
        (WebCore::GraphicsContext3D::uniform3iv):
        (WebCore::GraphicsContext3D::uniform4iv):
        (WebCore::GraphicsContext3D::uniformMatrix2fv):
        (WebCore::GraphicsContext3D::uniformMatrix3fv):
        (WebCore::GraphicsContext3D::uniformMatrix4fv):
        * platform/graphics/qt/GraphicsContext3DQt.cpp:
        (WebCore::GraphicsContext3D::uniform1fv):
        (WebCore::GraphicsContext3D::uniform2fv):
        (WebCore::GraphicsContext3D::uniform3fv):
        (WebCore::GraphicsContext3D::uniform4fv):
        (WebCore::GraphicsContext3D::uniform1iv):
        (WebCore::GraphicsContext3D::uniform2iv):
        (WebCore::GraphicsContext3D::uniform3iv):
        (WebCore::GraphicsContext3D::uniform4iv):
        (WebCore::GraphicsContext3D::uniformMatrix2fv):
        (WebCore::GraphicsContext3D::uniformMatrix3fv):
        (WebCore::GraphicsContext3D::uniformMatrix4fv):

2012-03-05  Yoshifumi Inoue  <yosin@chromium.org>

        [Forms] HTMLFieldSetForms.idl doesn't have name attribute.
        https://bugs.webkit.org/show_bug.cgi?id=80108

        Reviewed by Hajime Morita.

        Test: fast/forms/fieldset/fieldset-name.html

        * html/HTMLFieldSetElement.idl: Add "name" attribute.

2012-03-05  Levi Weintraub  <leviw@chromium.org>

        Update usage of LayoutUnits in RenderBox
        https://bugs.webkit.org/show_bug.cgi?id=80039

        Reviewed by Julien Chaffraix.

        Updating the usage of integers versus LayoutUnits in RenderBox to mirror the
        subpixellayout branch. This reverts absoluteRects, intrinsicSize, and focusRingRects
        methods to use integers, and flipForWritingMode functions to LayoutUnits.

        No new tests. No change in behavior.

        * platform/graphics/FractionalLayoutRect.h:
        (WebCore::FractionalLayoutRect::pixelSnappedX): Convenience methods that only calculate
        the needed values. This requires less computation than pixelSnappedIntRect(r).x().
        (WebCore::FractionalLayoutRect::pixelSnappedY): Ditto.
        (WebCore::FractionalLayoutRect::pixelSnappedWidth): Ditto.
        (WebCore::FractionalLayoutRect::pixelSnappedHeight): Ditto.
        (WebCore::FractionalLayoutRect::pixelSnappedMaxX): Ditto.
        (WebCore::FractionalLayoutRect::pixelSnappedMaxY): Ditto.
        (FractionalLayoutRect):
        * platform/graphics/IntRect.h:
        (IntRect):
        (WebCore::IntRect::pixelSnappedX): Stub methods to allow us to use IntRects like we do
        FractionalLayoutRects.
        (WebCore::IntRect::pixelSnappedY): Ditto.
        (WebCore::IntRect::pixelSnappedMaxX): Ditto.
        (WebCore::IntRect::pixelSnappedMaxY): Ditto.
        (WebCore::IntRect::pixelSnappedWidth): Ditto.
        (WebCore::IntRect::pixelSnappedHeight): Ditto.
        * rendering/LayoutTypes.h:
        (WebCore::pixelSnappedIntRect): Convenience method for building a pixelSnappedIntRect from
        a LayoutPoint and LayoutSize without constructing an intermediate LayoutRect.
        (WebCore):
        (WebCore::snapSizeToPixel): Stub method for snapping a LayoutUnit representing a size to
        its pixel value using its location.
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::pixelSnappedClientWidth): Changing to actually call snapSizeToPixel.
        (WebCore::RenderBox::pixelSnappedClientHeight): Ditto.
        (WebCore::RenderBox::absoluteRects): Switching to return IntRects that represent the actual
        rendered location on screen.
        (WebCore::RenderBox::addFocusRingRects): Ditto.
        (WebCore::RenderBox::paintFillLayer): One-liner switching an IntSize() to LayoutSize() to
        avoid unnecessary conversion.
        (WebCore::RenderBox::shrinkLogicalWidthToAvoidFloats): Preparing for the conversion by
        replacing 0 with zeroLayoutUnit.
        (WebCore::RenderBox::positionLineBox): Preparing for conversion by replacing lroundf
        with roundedLayoutUnit.
        (WebCore::RenderBox::flipForWritingMode): Switching to use LayoutUnits.
        * rendering/RenderBox.h:
        (RenderBox):
        (WebCore::RenderBox::pixelSnappedBorderBoxRect): Convenience method.
        (WebCore::RenderBox::borderBoundingBox): Converting to a pixelSnappedIntRect.
        (WebCore::RenderBox::intrinsicSize): Intrinsic sizes should always be integers.

2012-03-05  Adam Barth  <abarth@webkit.org>

        WorkerContext shouldn't need to know about SQLDatabase
        https://bugs.webkit.org/show_bug.cgi?id=80352

        Reviewed by Eric Seidel.

        This patch removes the SQLDatabase functions from WorkerContext in
        preparation for moving the SQLDatabase code into a module.  These
        functions don't interact with the rest of WorkerContext.

        * CMakeLists.txt:
        * DerivedSources.make:
        * DerivedSources.pri:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * storage/DOMWindowSQLDatabase.cpp:
        * storage/WorkerContextSQLDatabase.cpp: Added.
        (WebCore):
        (WebCore::WorkerContextSQLDatabase::openDatabase):
        (WebCore::WorkerContextSQLDatabase::openDatabaseSync):
        * storage/WorkerContextSQLDatabase.h: Added.
        (WebCore):
        (WorkerContextSQLDatabase):
        (WebCore::WorkerContextSQLDatabase::WorkerContextSQLDatabase):
        (WebCore::WorkerContextSQLDatabase::~WorkerContextSQLDatabase):
        * storage/WorkerContextSQLDatabase.idl: Added.
        * workers/WorkerContext.cpp:
        (WebCore):
        * workers/WorkerContext.h:
        (WebCore):
        (WorkerContext):
        * workers/WorkerContext.idl:

2012-03-05  Kenichi Ishibashi  <bashi@chromium.org>

        [WebSocket] Introduce ThreadableWebSocketChannel::SendResult
        https://bugs.webkit.org/show_bug.cgi?id=80356

        Reviewed by Kent Tamura.

        Introduced ThreadableWebSocketChannel::SendResult type so that
        WebSocketChannel can pass the validation result.

        No new test. No changes in behavior.

        * Modules/websockets/ThreadableWebSocketChannel.h: Added SendResult.
        * Modules/websockets/ThreadableWebSocketChannelClientWrapper.cpp:
        (WebCore::ThreadableWebSocketChannelClientWrapper::ThreadableWebSocketChannelClientWrapper):
        (WebCore::ThreadableWebSocketChannelClientWrapper::sendRequestResult): Use ThreadableWebSocketChannel::SendResult instead of bool.
        (WebCore::ThreadableWebSocketChannelClientWrapper::setSendRequestResult): Ditto.
        * Modules/websockets/ThreadableWebSocketChannelClientWrapper.h:
        (ThreadableWebSocketChannelClientWrapper):
        * Modules/websockets/WebSocketChannel.cpp:
        (WebCore::WebSocketChannel::send): Use ThreadableWebSocketChannel::SendResult instead of bool. Pass Cstring to enqueTextFrame instead of String.
        (WebCore::WebSocketChannel::enqueueTextFrame): Ditto.
        (WebCore::WebSocketChannel::processOutgoingFrameQueue): Ditto.
        * Modules/websockets/WebSocketChannel.h:
        (WebSocketChannel):
        (QueuedFrame): Changed the type of stringData from String to CString.
        * Modules/websockets/WorkerThreadableWebSocketChannel.cpp:
        (WebCore::WorkerThreadableWebSocketChannel::send): Use ThreadableWebSocketChannel::SendResult instead of bool.
        (WebCore::workerContextDidSend): Ditto.
        (WebCore::WorkerThreadableWebSocketChannel::Peer::send): Ditto.
        (WebCore::WorkerThreadableWebSocketChannel::Bridge::send): Ditto.
        * Modules/websockets/WorkerThreadableWebSocketChannel.h:
        (WorkerThreadableWebSocketChannel): ditto.
        (Bridge): Ditto.

2012-03-05  Kentaro Hara  <haraken@chromium.org>

        [JSC] Cache the CSSPropertyID in JSCSSStyleDeclaration
        https://bugs.webkit.org/show_bug.cgi?id=80250

        Reviewed by Benjamin Poulain.

        V8CSSStyleDeclaration caches the calculated CSSPropertyID.
        Similarly, we can implement the cache in JSCSSStyleDeclaration.

        In my local Mac environment, this optimization improves the performance
        of CSS property getters by 35%, and the performance of CSS property setters
        by 8%.

        CSS property getter: for (var i = 0; i < 1000000; i++) span.style.fontWeight;
        CSS property setter: for (var i = 0; i < 1000000; i++) span.style.fontWeight = "bold";

        Tests: fast/dom/CSSStyleDeclaration/* (No change in test results)

        * bindings/js/JSCSSStyleDeclarationCustom.cpp:
        (CSSPropertyInfo):
        (WebCore):
        (WebCore::cssPropertyIDForJSCSSPropertyName):
        (WebCore::JSCSSStyleDeclaration::nameGetter):
        (WebCore::JSCSSStyleDeclaration::putDelegate):

2012-03-05  Joshua Bell  <jsbell@chromium.org>

        IndexedDB: Handle LevelDB database corruption
        https://bugs.webkit.org/show_bug.cgi?id=79413

        Add LevelDBDatabase::destroy() method so that clients can retry if open() fails.

        Reviewed by Tony Chang.

        Test: webkit_unit_tests --gtest_filter='LevelDBDatabaseTest.CorruptionTest'

        * Modules/indexeddb/IDBLevelDBBackingStore.cpp: Implement open/destroy/open strategy.
        (WebCore::IDBLevelDBBackingStore::open):
        * platform/leveldb/LevelDBDatabase.cpp:
        (WebCore::LevelDBDatabase::destroy):
        (WebCore):
        * platform/leveldb/LevelDBDatabase.h:
        (LevelDBDatabase):

2012-03-05  Stephen Chenney  <schenney@chromium.org>

        [Chromium] SVG Composite of Offset crashes
        https://bugs.webkit.org/show_bug.cgi?id=77245

        Reviewed by Stephen White.

        The feComposite arithmetic mode filter could readily be made to
        generate invalid pre-multiplied pixel values which would then go on to
        pollute other filters and cause invalid final output pixels. This
        patch checks for filters that require valid inputs, and checks that a
        result is valid, and corrects the result if necessary. This matches
        the behavior of FF and Opera while preventing crashes or other
        undesirable behavior.

        Test: svg/filters/feComposite-arithmetic-invalid-rgba.svg

        * platform/graphics/filters/FEComposite.h: Override the default validity checks and image cleanup methods.
        * platform/graphics/filters/FEComposite.cpp:
        (WebCore::FEComposite::correctFilterResultIfNeeded): Force valid pixels if this is an arithmetic filter
        * platform/graphics/filters/FilterEffect.cpp:
        (WebCore::FilterEffect::apply): Check for validity status and correct
        (WebCore::FilterEffect::forceValidPremultipliedPixels): Make an image valid
        (WebCore):
        * platform/graphics/filters/FilterEffect.h: New virtual methods for image validity.
        (FilterEffect):
        (WebCore::FilterEffect::requiresValidPreMulultipliedPixels):
        (WebCore::FilterEffect::forceValidPremultipliedPixels):
        (WebCore::FilterEffect::correctFilterResultIfNeeded):
        * rendering/svg/RenderSVGResourceFilter.cpp:
        (WebCore::RenderSVGResourceFilter::postApplyResource): Check that the final filter result is valid

2012-03-05  Alexis Menard  <alexis.menard@openbossa.org>

        getComputedStyle gives incorrect information for 'height' property
        https://bugs.webkit.org/show_bug.cgi?id=33593

        Reviewed by David Hyatt.

        Make sure that the contentBoxRect doesn't take into account the
        intrinsic padding when querying it. As stated by http://www.w3.org/TR/css3-box/#the-lsquo0
        the height is the content area which doesn't include the intrinsic padding, the border, and
        the padding.

        Test: fast/css/getComputedStyle/getComputedStyle-height.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        * editing/DeleteSelectionCommand.cpp:
        (WebCore::DeleteSelectionCommand::removeNode):
        * rendering/RenderBox.h:
        (WebCore::RenderBox::contentBoxRect):
        (WebCore::RenderBox::contentWidth):
        (WebCore::RenderBox::contentHeight):
        (WebCore::RenderBox::contentLogicalWidth):
        (WebCore::RenderBox::contentLogicalHeight):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paddingTop):
        (WebCore::RenderBoxModelObject::paddingBottom):
        (WebCore::RenderBoxModelObject::paddingLeft):
        (WebCore::RenderBoxModelObject::paddingRight):
        (WebCore::RenderBoxModelObject::paddingBefore):
        (WebCore::RenderBoxModelObject::paddingAfter):
        (WebCore::RenderBoxModelObject::paddingStart):
        (WebCore::RenderBoxModelObject::paddingEnd):
        * rendering/RenderBoxModelObject.h:
        (RenderBoxModelObject):
        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::paddingTop):
        (WebCore::RenderTableCell::paddingBottom):
        (WebCore::RenderTableCell::paddingLeft):
        (WebCore::RenderTableCell::paddingRight):
        (WebCore::RenderTableCell::paddingBefore):
        (WebCore::RenderTableCell::paddingAfter):
        (WebCore::RenderTableCell::cellBaselinePosition):
        * rendering/RenderTableCell.h:
        (RenderTableCell):
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::firstLineBoxBaseline):

2012-03-05  MORITA Hajime  <morrita@google.com>

        https://bugs.webkit.org/show_bug.cgi?id=80257
        Lifecycle of InternalSettings should be simplified.

        Reviewed by Ryosuke Niwa.

        - Moved settings update code to separate restoreTo() method.
        - Eliminated flags which indidate the changed field.
          Now these modifiable parameters are backed up at the initialization.

        No new tests. Refactoring.

        * testing/InternalSettings.cpp:
        (WebCore::InternalSettings::create):
        (WebCore::InternalSettings::InternalSettings):
        (WebCore):
        (WebCore::InternalSettings::restoreTo):
        * testing/InternalSettings.h:
        (InternalSettings):
        * testing/Internals.cpp:
        (WebCore::Internals::reset):

2012-03-05  Anders Carlsson  <andersca@apple.com>

        Be more aggressive about repainting page overlays
        https://bugs.webkit.org/show_bug.cgi?id=80336
        <rdar://problem/10965943>

        Reviewed by Simon Fraser.

        Add a way to find out if a given GraphicsLayer is going to be repainted.

        * WebCore.exp.in:
        * platform/graphics/GraphicsLayer.h:
        (WebCore::GraphicsLayer::needsDisplay):
        (GraphicsLayer):
        * platform/graphics/ca/GraphicsLayerCA.h:

2012-03-05  Robin Cao  <robin.cao@torchmobile.com.cn>

        [BlackBerry] Upstream LayerRendererSurface.{cpp, h}
        https://bugs.webkit.org/show_bug.cgi?id=80122

        Reviewed by Rob Buis.

        Initial upstream, no new tests.

        * PlatformBlackBerry.cmake:
        * platform/graphics/blackberry/LayerRendererSurface.cpp: Added.
        (WebCore):
        (WebCore::LayerRendererSurface::LayerRendererSurface):
        (WebCore::LayerRendererSurface::~LayerRendererSurface):
        (WebCore::LayerRendererSurface::setContentRect):
        (WebCore::LayerRendererSurface::drawRect):
        (WebCore::LayerRendererSurface::ensureTexture):
        (WebCore::LayerRendererSurface::releaseTexture):
        * platform/graphics/blackberry/LayerRendererSurface.h: Added.
        (WebCore):
        (LayerRendererSurface):
        (WebCore::LayerRendererSurface::size):
        (WebCore::LayerRendererSurface::contentRect):
        (WebCore::LayerRendererSurface::clipRect):
        (WebCore::LayerRendererSurface::setClipRect):
        (WebCore::LayerRendererSurface::setDrawTransform):
        (WebCore::LayerRendererSurface::drawTransform):
        (WebCore::LayerRendererSurface::setReplicaDrawTransform):
        (WebCore::LayerRendererSurface::replicaDrawTransform):
        (WebCore::LayerRendererSurface::texture):
        (WebCore::LayerRendererSurface::drawOpacity):
        (WebCore::LayerRendererSurface::setDrawOpacity):

2012-03-05  Mihnea Ovidenie  <mihnea@adobe.com>

        [CSSRegions][CSSOM]Prevent creation of NamedFlow object for invalid flow name
        https://bugs.webkit.org/show_bug.cgi?id=79685

        Reviewed by David Hyatt.

        Asking for a named flow with an invalid flow name should return a null object.

        Test: fast/regions/webkit-named-flow-invalid-name.html

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseFlowThread):
        (WebCore):
        * css/CSSParser.h:
        * dom/Document.cpp:
        (WebCore::validFlowName):
        (WebCore):
        (WebCore::Document::webkitGetFlowByName):

2012-03-05  Ryosuke Niwa  <rniwa@webkit.org>

        unicode-bidi should support isolate override and override isolate
        https://bugs.webkit.org/show_bug.cgi?id=73164

        Reviewed by Eric Seidel.

        Updated CSS parser and CSS style selector to support the union of bidi-override and isolate in
        unicode-bidi property. Added OverrideIsolate to EUnicodeBidi instead of turning Override and Isolate
        into bit flags to avoid increasing the number of bits required to store the unicodeBidi flag.

        Also fixed a bug in RenderBlock::constructTextRun to actually check whether an isolated run's direction
        is overridden or not when constructing one.

        Tests: fast/css/unicode-bidi-computed-value.html
               fast/text/bidi-override-isolate.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::renderUnicodeBidiFlagsToCSSValue): Added; Create a CSSValueList when unicode-bidi has both
        isolate and bidi-override specified.
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):  Calls renderUnicodeBidiFlagsToCSSValue.
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue): Support parsing combinations of -webkit-isolate and bidi-override;
        Create a CSSValueList in such cases.
        * css/CSSPrimitiveValueMappings.h:
        (WebCore):
        * css/CSSStyleApplyProperty.cpp:
        (ApplyPropertyUnicodeBidi):
        (WebCore::ApplyPropertyUnicodeBidi::applyValue): Support combinations of -webkit-isolate and
        bidi-override. Set the unicodeBidi flag to OverrideIsolate in such cases.
        (WebCore::ApplyPropertyUnicodeBidi::createHandler):
        (WebCore):
        (WebCore::CSSStyleApplyProperty::CSSStyleApplyProperty):
        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::drawTextInternal):
        * platform/text/UnicodeBidi.h: Added OverrideIsolate. We don't use bit flags to avoid increasing the
        number of bits required to store flags especially because isolate and bidi-override are only values
        that can be combined.
        (WebCore::isIsolated):
        (WebCore):
        (WebCore::isOverride):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::constructTextRun):
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::statusWithDirection): Takes isOverride; we used to assume it's always false.
        (WebCore::constructBidiRuns): Instantiate isolatedResolver with a proper value of isOverride.
        (WebCore::RenderBlock::layoutRunsAndFloatsInRange):
        (WebCore::RenderBlock::determineStartPosition):
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::paintItemForeground):
        * rendering/RenderMenuList.cpp:
        (WebCore::RenderMenuList::itemStyle):
        (WebCore::RenderMenuList::menuStyle):
        * rendering/RenderTextControlSingleLine.cpp:
        (WebCore::RenderTextControlSingleLine::menuStyle):
        * rendering/svg/SVGTextMetrics.cpp:
        (WebCore::SVGTextMetrics::constructTextRun):

2012-03-05  Emil A Eklund  <eae@chromium.org>

        Replace uses of x(), y() and width(), height() pairs with locationOffset and size()
        https://bugs.webkit.org/show_bug.cgi?id=80196

        Reviewed by Julien Chaffraix.

        Replace IntSize(x(), y()) with locationOffset()
        Replace IntSize(width(), height()) with size()
        Replace IntRect(0, 0, width(), height()) with IntRect(IntPoint(), size())
        Replace IntRect::move(x(), y()) with IntRect::move(locationOffset())

        No new tests.

        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::createImageBuffer):
        (WebCore::HTMLCanvasElement::baseTransform):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::simplifiedLayout):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::mapLocalToContainer):
        (WebCore::RenderBox::computeRectForRepaint):
        * rendering/RenderBox.h:
        (WebCore::RenderBox::borderBoxRect):
        * rendering/RenderDeprecatedFlexibleBox.cpp:
        (WebCore::RenderDeprecatedFlexibleBox::layoutBlock):
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::layoutBlock):
        * rendering/RenderListMarker.cpp:
        (WebCore::RenderListMarker::localSelectionRect):
        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::localSelectionRect):
        * rendering/RenderScrollbar.cpp:
        (WebCore::RenderScrollbar::updateScrollbarParts):
        (WebCore::RenderScrollbar::buttonRect):
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::setCellLogicalWidths):
        (WebCore::RenderTableSection::layoutRows):
        * rendering/RenderView.cpp:
        (WebCore::RenderView::viewRect):
        * rendering/svg/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::layout):

2012-03-05  Anders Carlsson  <andersca@apple.com>

        Always update the scroll layer position on the main thread when we have an overlay
        https://bugs.webkit.org/show_bug.cgi?id=80324

        Reviewed by Sam Weinig.

        Add a way to ensure that scroll layer position updates happen on the main thread.

        * WebCore.exp.in:
        * page/scrolling/ScrollingCoordinator.cpp:
        (WebCore::ScrollingCoordinator::ScrollingCoordinator):
        (WebCore::ScrollingCoordinator::updateShouldUpdateScrollLayerPositionOnMainThread):
        (WebCore):
        (WebCore::ScrollingCoordinator::setForceMainThreadScrollLayerPositionUpdates):
        * page/scrolling/ScrollingCoordinator.h:
        (ScrollingCoordinator):

2012-03-05  Tony Chang  <tony@chromium.org>

        Implement flex-wrap: wrap
        https://bugs.webkit.org/show_bug.cgi?id=79930

        Reviewed by David Hyatt.

        Tests: css3/flexbox/multiline-align.html
               css3/flexbox/multiline.html

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::sizesToIntrinsicLogicalWidth): Don't apply column+stretch optimization to multiline.
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::FlexOrderIterator::FlexOrderIterator):
        (WebCore::RenderFlexibleBox::FlexOrderIterator::currentChild): Expose the current child so we can pause
        in the middle of iteration and resume later.
        (RenderFlexibleBox::FlexOrderIterator):
        (WebCore::RenderFlexibleBox::isMultiline):
        (WebCore):
        (WebCore::RenderFlexibleBox::layoutFlexItems): Loop per line.
        (WebCore::RenderFlexibleBox::availableAlignmentSpaceForChild): Use the line space, not the whole container space.
        (WebCore::RenderFlexibleBox::computeFlexOrder): Return true for each line.
        (WebCore::RenderFlexibleBox::layoutAndPlaceChildren): Use the line offset. Also compute the line height as we go.
        (WebCore::RenderFlexibleBox::layoutColumnReverse): Use the line offset.
        (WebCore::RenderFlexibleBox::alignChildren): Align based on the line height. For multiline + column, we have to relayout
        since the width may change (same as the row case above). We'll have to do something smarter when we implement flex-line-pack.
        * rendering/RenderFlexibleBox.h:
        (RenderFlexibleBox):

2012-03-05  Ben Vanik  <benvanik@google.com>

        Implement WebGL extension EXT_texture_filter_anisotropic
        https://bugs.webkit.org/show_bug.cgi?id=79541

        This exports the EXT_texture_filter_anisotropic extension with the WEBKIT_ prefix as defined at
        https://cvs.khronos.org/svn/repos/registry/trunk/public/webgl/extensions/proposals/EXT_texture_filter_anisotropic/index.html

        Reviewed by Kenneth Russell.

        Tested with the Khronos conformance test for the extension, available at https://cvs.khronos.org/svn/repos/registry/trunk/public/webgl/sdk/tests/conformance/extensions/ext-texture-filter-anisotropic.html

        * CMakeLists.txt:
        * DerivedSources.make:
        * DerivedSources.pri:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSWebGLRenderingContextCustom.cpp:
        (WebCore::toJS):
        * bindings/v8/custom/V8WebGLRenderingContextCustom.cpp:
        (WebCore::toV8Object):
        * html/canvas/EXTTextureFilterAnisotropic.cpp: Copied from Source/WebCore/html/canvas/WebGLExtension.h.
        (WebCore):
        (WebCore::EXTTextureFilterAnisotropic::EXTTextureFilterAnisotropic):
        (WebCore::EXTTextureFilterAnisotropic::~EXTTextureFilterAnisotropic):
        (WebCore::EXTTextureFilterAnisotropic::getName):
        (WebCore::EXTTextureFilterAnisotropic::create):
        * html/canvas/EXTTextureFilterAnisotropic.h: Copied from Source/WebCore/html/canvas/WebGLExtension.h.
        (WebCore):
        (EXTTextureFilterAnisotropic):
        * html/canvas/EXTTextureFilterAnisotropic.idl: Copied from Source/WebCore/html/canvas/WebGLExtension.h.
        * html/canvas/WebGLExtension.h:
        * html/canvas/WebGLObject.cpp:
        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore):
        (WebCore::WebGLRenderingContext::getExtension):
        (WebCore::WebGLRenderingContext::getParameter):
        (WebCore::WebGLRenderingContext::getSupportedExtensions):
        (WebCore::WebGLRenderingContext::getTexParameter):
        (WebCore::WebGLRenderingContext::texParameter):
        * html/canvas/WebGLRenderingContext.h:
        (WebCore):
        (WebGLRenderingContext):
        * platform/graphics/Extensions3D.h:
        (Extensions3D):
        * platform/graphics/opengl/Extensions3DOpenGL.cpp:
        (WebCore::Extensions3DOpenGL::supports):

2012-03-05  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r109760.
        http://trac.webkit.org/changeset/109760
        https://bugs.webkit.org/show_bug.cgi?id=80320

        Caused many GTK+ tests to crash (Requested by mrobinson on
        #webkit).

        * platform/network/ResourceHandleClient.h:
        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCoreSynchronousLoader):
        (WebCore::WebCoreSynchronousLoader::WebCoreSynchronousLoader):
        (WebCore):
        (WebCore::WebCoreSynchronousLoader::~WebCoreSynchronousLoader):
        (WebCore::WebCoreSynchronousLoader::didReceiveResponse):
        (WebCore::WebCoreSynchronousLoader::didReceiveData):
        (WebCore::WebCoreSynchronousLoader::didFinishLoading):
        (WebCore::WebCoreSynchronousLoader::didFail):
        (WebCore::WebCoreSynchronousLoader::run):
        (WebCore::closeCallback):
        (WebCore::readCallback):
        (WebCore::ResourceHandle::defaultSession):

2012-03-05  Adam Klein  <adamk@chromium.org>

        Never dispatch mutation events in shadow DOM
        https://bugs.webkit.org/show_bug.cgi?id=79278

        Reviewed by Ryosuke Niwa.

        Test: fast/dom/shadow/suppress-mutation-events-in-shadow.html

        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::removeChildren): Move allowEventDispatch() call later,
        now that childrenChanged won't trigger mutation events in shadow dom.
        (WebCore::dispatchChildInsertionEvents): Bail out if in shadow tree.
        (WebCore::dispatchChildRemovalEvents): ditto.
        * dom/Node.cpp:
        (WebCore::Node::dispatchSubtreeModifiedEvent): ditto.

2012-03-05  Alexey Proskuryakov  <ap@apple.com>

        BlobResourceHandle should keep a reference to itself when calling client code.
        https://bugs.webkit.org/show_bug.cgi?id=80318

        Reviewed by Brady Eidson.

        * platform/network/BlobResourceHandle.cpp:
        (WebCore::BlobResourceHandle::doStart):
        (WebCore::BlobResourceHandle::getSizeForNext):
        (WebCore::BlobResourceHandle::readSync):
        (WebCore::BlobResourceHandle::readDataAsync):
        (WebCore::BlobResourceHandle::consumeData):
        (WebCore::BlobResourceHandle::failed):
        Added RefPtrs in functions that can result in calling client code, and use "this" object afterwards.

2012-03-05  Anders Carlsson  <andersca@apple.com>

        Let RenderLayerCompositor set the tile cache visible rect
        https://bugs.webkit.org/show_bug.cgi?id=80317

        Reviewed by Simon Fraser.

        We can't compute the visible rect from CALayers, because that breaks when we're updating
        the scroll layer position on the main thread (since by the time visibleRectChanged() is called,
        the CALayers won't yet have been updated).

        * platform/graphics/GraphicsLayer.h:
        (WebCore::GraphicsLayer::visibleRectChanged):
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::visibleRectChanged):
        * platform/graphics/ca/GraphicsLayerCA.h:
        (GraphicsLayerCA):
        * platform/graphics/ca/PlatformCALayer.h:
        (PlatformCALayer):
        * platform/graphics/ca/mac/PlatformCALayerMac.mm:
        (PlatformCALayer::visibleRectChanged):
        * platform/graphics/ca/mac/TileCache.h:
        (TileCache):
        * platform/graphics/ca/mac/TileCache.mm:
        (WebCore::TileCache::visibleRectChanged):
        (WebCore::TileCache::revalidateTiles):
        * platform/graphics/ca/mac/WebTileCacheLayer.h:
        (WebCore):
        * platform/graphics/ca/mac/WebTileCacheLayer.mm:
        (-[WebTileCacheLayer visibleRectChanged:]):
        * platform/graphics/ca/win/PlatformCALayerWin.cpp:
        (PlatformCALayer::visibleRectChanged):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::frameViewDidScroll):

2012-03-05  Kangil Han  <kangil.han@samsung.com>

        [CMake][DRT] Add WebCoreTestSupport.
        https://bugs.webkit.org/show_bug.cgi?id=79896

        Reviewed by Daniel Bates.

        Add WebCoreTestSupport library for DRT in CMake.
        We will use internals object by linking this library on DRT.

        * CMakeLists.txt:
        * UseJSC.cmake:
        * UseV8.cmake:

2012-03-05  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r109656.
        http://trac.webkit.org/changeset/109656
        https://bugs.webkit.org/show_bug.cgi?id=80316

        This seems to have regressed Parser/html5-full-render by about
        10% (Requested by anttik on #webkit).

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::getPositionOffsetValue):
        (WebCore::getBorderRadiusCornerValues):
        (WebCore::getBorderRadiusCornerValue):
        (WebCore::getBorderRadiusShorthandValue):
        (WebCore::lineHeightFromStyle):
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        * css/CSSGrammar.y:
        * css/CSSParser.cpp:
        (WebCore::CSSParser::validUnit):
        (WebCore::CSSParser::createPrimitiveNumericValue):
        (WebCore::unitFromString):
        (WebCore::CSSParser::parseValidPrimitive):
        (WebCore::CSSParser::detectNumberToken):
        * css/CSSPrimitiveValue.cpp:
        (WebCore::isValidCSSUnitTypeForDoubleConversion):
        (WebCore::unitCategory):
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        (WebCore::CSSPrimitiveValue::canonicalUnitTypeForCategory):
        (WebCore::CSSPrimitiveValue::customCssText):
        * css/CSSPrimitiveValue.h:
        (CSSPrimitiveValue):
        * css/CSSPrimitiveValue.idl:
        * css/CSSStyleApplyProperty.cpp:
        (WebCore::ApplyPropertyLength::applyValue):
        (WebCore::ApplyPropertyBorderRadius::applyValue):
        (WebCore::ApplyPropertyFontSize::applyValue):
        (WebCore::ApplyPropertyLineHeight::applyValue):
        (WebCore::ApplyPropertyVerticalAlign::applyValue):
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::collectMatchingRulesForList):
        * dom/Document.cpp:
        (WebCore::Document::pageSizeAndMarginsInPixels):
        (WebCore):
        * dom/Document.h:
        (Document):
        * html/HTMLAreaElement.cpp:
        (WebCore::HTMLAreaElement::getRegion):
        * platform/Length.h:
        (WebCore::Length::calcValue):
        (WebCore::Length::calcMinValue):
        (WebCore::Length::calcFloatValue):
        (WebCore::Length::blend):
        * rendering/RenderBR.cpp:
        (WebCore::RenderBR::lineHeight):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::lineHeight):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::reflectionOffset):
        (WebCore::RenderBox::paintBoxDecorations):
        (WebCore::RenderBox::clipRect):
        (WebCore::RenderBox::computeLogicalWidthInRegion):
        (WebCore::RenderBox::computeLogicalWidthInRegionUsing):
        (WebCore::RenderBox::computeInlineDirectionMargins):
        (WebCore::RenderBox::computeLogicalHeightUsing):
        (WebCore::RenderBox::computePercentageLogicalHeight):
        (WebCore::RenderBox::computeReplacedLogicalHeightUsing):
        (WebCore::RenderBox::computeBlockDirectionMargins):
        (WebCore::RenderBox::computePositionedLogicalWidthUsing):
        (WebCore::RenderBox::computePositionedLogicalHeightUsing):
        (WebCore::RenderBox::computePositionedLogicalWidthReplaced):
        (WebCore::RenderBox::computePositionedLogicalHeightReplaced):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::relativePositionOffsetX):
        (WebCore::RenderBoxModelObject::relativePositionOffsetY):
        (WebCore::RenderBoxModelObject::paddingTop):
        (WebCore::RenderBoxModelObject::paddingBottom):
        (WebCore::RenderBoxModelObject::paddingLeft):
        (WebCore::RenderBoxModelObject::paddingRight):
        (WebCore::RenderBoxModelObject::paddingBefore):
        (WebCore::RenderBoxModelObject::paddingAfter):
        (WebCore::RenderBoxModelObject::paddingStart):
        (WebCore::RenderBoxModelObject::paddingEnd):
        (WebCore::RenderBoxModelObject::getBackgroundRoundedRect):
        (WebCore::RenderBoxModelObject::calculateFillTileSize):
        (WebCore::RenderBoxModelObject::calculateBackgroundImageGeometry):
        (WebCore::computeBorderImageSide):
        (WebCore::RenderBoxModelObject::paintNinePieceImage):
        (WebCore::RenderBoxModelObject::paintBorder):
        (WebCore::RenderBoxModelObject::paintBoxShadow):
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::preferredMainAxisContentExtentForChild):
        (WebCore::RenderFlexibleBox::computeMainAxisPreferredSizes):
        (WebCore::RenderFlexibleBox::runFreeSpaceAllocationAlgorithm):
        * rendering/RenderInline.cpp:
        (WebCore::computeMargin):
        (WebCore::RenderInline::lineHeight):
        * rendering/RenderMenuList.cpp:
        (WebCore::RenderMenuList::updateOptionsWidth):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::repaintAfterLayoutIfNeeded):
        * rendering/RenderObject.h:
        (RenderObject):
        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::paint):
        * rendering/RenderScrollbarPart.cpp:
        (WebCore::calcScrollbarThicknessUsing):
        (WebCore::RenderScrollbarPart::computeScrollbarWidth):
        (WebCore::RenderScrollbarPart::computeScrollbarHeight):
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::computeLogicalWidth):
        (WebCore::RenderTable::convertStyleLogicalWidthToComputedWidth):
        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::logicalHeightForRowSizing):
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::calcRowLogicalHeight):
        * rendering/RenderText.h:
        (WebCore::RenderText::marginLeft):
        (WebCore::RenderText::marginRight):
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::paintMenuListButtonGradients):
        * rendering/RenderWidget.cpp:
        (WebCore::RenderWidget::paint):
        * rendering/RootInlineBox.cpp:
        (WebCore::RootInlineBox::verticalPositionForBox):
        * rendering/style/RenderStyle.cpp:
        (WebCore::calcRadiiFor):
        (WebCore::RenderStyle::getRoundedBorderFor):
        * rendering/style/RenderStyle.h:
        * rendering/svg/RenderSVGRoot.cpp:
        (WebCore::resolveLengthAttributeForSVG):
        (WebCore::RenderSVGRoot::computeReplacedLogicalWidth):
        (WebCore::RenderSVGRoot::computeReplacedLogicalHeight):

2012-03-05  Rob Buis  <rbuis@rim.com>

        [BlackBerry] Add missing method to PasteboardBlackBerry.cpp
        https://bugs.webkit.org/show_bug.cgi?id=80326

        Reviewed by Antonio Gomes.

        Add missing method.

        * platform/blackberry/PasteboardBlackBerry.cpp:
        (WebCore::Pasteboard::writeClipboard):
        (WebCore):

2012-03-05  Rob Buis  <rbuis@rim.com>

        [BlackBerry] UTF chars printed back from cookie through php shows as ???
        https://bugs.webkit.org/show_bug.cgi?id=80307

        Reviewed by Antonio Gomes.

        PR: 130055

        we need to check the cookies encoding first and encode the cookie header data
        to pass to the request.

        * platform/network/blackberry/NetworkManager.cpp:
        (WebCore::NetworkManager::startJob):

2012-03-05  Dana Jansens  <danakj@chromium.org>

        [chromium] Remove old cleanupResources() code
        https://bugs.webkit.org/show_bug.cgi?id=80290

        Reviewed by Adrienne Walker.

        cleanupResources() is only called by destructors, and adds no
        value, any more, beyond the destructors themselves, but complicates
        the code path.

        Covered by existing tests.

        * platform/graphics/chromium/cc/CCLayerImpl.cpp:
        * platform/graphics/chromium/cc/CCLayerImpl.h:
        (CCLayerImpl):
        * platform/graphics/chromium/cc/CCPluginLayerImpl.cpp:
        (WebCore::CCPluginLayerImpl::~CCPluginLayerImpl):
        * platform/graphics/chromium/cc/CCPluginLayerImpl.h:
        * platform/graphics/chromium/cc/CCRenderSurface.cpp:
        (WebCore::CCRenderSurface::~CCRenderSurface):
        * platform/graphics/chromium/cc/CCRenderSurface.h:
        (CCRenderSurface):
        * platform/graphics/chromium/cc/CCVideoLayerImpl.cpp:
        (WebCore::CCVideoLayerImpl::~CCVideoLayerImpl):

2012-03-05  Sami Kyostila  <skyostil@chromium.org>

        Partially loaded JPEGs should have alpha channel
        https://bugs.webkit.org/show_bug.cgi?id=78239

        Reviewed by Kenneth Russell.

        While a JPEG image is loading, the area outside the decoded region
        should be fully transparent. Since currently all JPEG frames are marked
        as opaque, a renderer respecting this flag will draw the partially
        loaded image with garbage outside the valid image region.

        Hence, a partially loaded JPEG image should be marked as having an alpha
        channel while decoding is in progress. For performance reasons we mark
        the image opaque after decoding has finished.

        Graphics corruption caused by this bug was recently observed on
        Chromium (http://code.google.com/p/chromium/issues/detail?id=113171). A
        recent Skia change (r3036) changed SkBitmap::extractSubset() to produce
        a bitmap with the same opaqueness flag as the parent. This meant that
        the renderer was now seeing an opaque image from the JPEG decoder, and
        drawing it appropriately resulted in garbage outside the decoded region.

        Test: http/tests/incremental/partial-jpeg.html

        * platform/image-decoders/jpeg/JPEGImageDecoder.cpp:
        (WebCore::JPEGImageDecoder::outputScanlines):
        (WebCore::JPEGImageDecoder::jpegComplete):

2012-03-05  James Robinson  <jamesr@chromium.org>

        [chromium] Initialize CCOverdrawCounts struct to zero
        https://bugs.webkit.org/show_bug.cgi?id=80204

        Reviewed by Adrienne Walker.

        CCOverdrawCounts is stack allocated but not explicitly initialized, so the values are garbage. This adds a c'tor
        to zero out the fields, which is the desired behavior.  Bug was initially caught by valgrind, see
        http://crbug.com/116475

        * platform/graphics/chromium/cc/CCRenderPass.h:
        (WebCore::CCOverdrawCounts::CCOverdrawCounts):

2012-03-05  Min Qin  <qinmin@google.com>

        Add media control css for chromium on android
        https://bugs.webkit.org/show_bug.cgi?id=79550

        Reviewed by Adam Barth.

        This should not change the any test results as it does not affect the any current bots. New test expectations will be added if we have a android bot on webkit.

        * WebCore.gyp/WebCore.gyp:
        * css/mediaControlsChromiumAndroid.css: Added.
        (body:-webkit-full-page-media):
        (audio):
        (audio:-webkit-full-page-media, video:-webkit-full-page-media):
        (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-timeline, video::-webkit-media-controls-timeline):
        (video::-webkit-media-controls-fullscreen-button):
        (audio::-webkit-media-controls-fullscreen-button):
        (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):
        * rendering/RenderMediaControlsChromium.cpp:
        (WebCore::paintMediaFullscreenButton):
        (WebCore):
        (WebCore::RenderMediaControlsChromium::paintMediaControlsPart):
        * rendering/RenderThemeChromiumAndroid.cpp:
        (WebCore::RenderThemeChromiumAndroid::extraMediaControlsStyleSheet):
        (WebCore):
        (WebCore::RenderThemeChromiumAndroid::paintMediaFullscreenButton):
        * rendering/RenderThemeChromiumAndroid.h:

2012-03-05  Anders Carlsson  <andersca@apple.com>

        Fix crash in ScrollingCoordinator::updateMainFrameScrollPositionAndScrollLayerPosition
        https://bugs.webkit.org/show_bug.cgi?id=80303
        <rdar://problem/10953682>

        Reviewed by Beth Dakin.

        Add the same null checks that already exist in updateMainFrameScrollPosition.

        * page/scrolling/ScrollingCoordinator.cpp:
        (WebCore::ScrollingCoordinator::updateMainFrameScrollPositionAndScrollLayerPosition):

2012-03-05  Alexander Pavlov  <apavlov@chromium.org>

        Web Inspector: CSS inactive property check should account for vendor prefixes
        https://bugs.webkit.org/show_bug.cgi?id=80225

        Reviewed by Pavel Feldman.

        Test: inspector/styles/vendor-prefixes.html

        * inspector/InspectorStyleSheet.cpp:
        (WebCore::InspectorStyle::populateObjectWithStyleProperties):
        * inspector/front-end/StylesSidebarPane.js:
        (WebInspector.StylesSidebarPane.alteredHexNumber):
        (WebInspector.StylesSidebarPane.canonicalPropertyName):
        (WebInspector.StylesSidebarPane.prototype._markUsedProperties):
        (WebInspector.StylePropertiesSection.prototype.isPropertyOverloaded):

2012-03-05  Adam Barth  <abarth@webkit.org>

        Geolocation should use a ScriptExecutionContext as its context object
        https://bugs.webkit.org/show_bug.cgi?id=80248

        Reviewed by Kentaro Hara.

        This patch updates Geolocation to use some more modern WebCore
        mechanisms.  Previously, Geolocation used a Frame as a context object,
        which required a bunch of manual integration with the PageCache as well
        as custom signaling for Geolocation::reset().  After this patch,
        Geolocation subclasses ActiveDOMObject, which does all this work
        automatically.

        * Modules/geolocation/Geolocation.cpp:
        (WebCore::Geolocation::create):
        (WebCore):
        (WebCore::Geolocation::Geolocation):
        (WebCore::Geolocation::~Geolocation):
        (WebCore::Geolocation::document):
        (WebCore::Geolocation::frame):
        (WebCore::Geolocation::page):
        (WebCore::Geolocation::stop):
        (WebCore::Geolocation::getCurrentPosition):
        (WebCore::Geolocation::watchPosition):
        (WebCore::Geolocation::requestPermission):
        (WebCore::Geolocation::clearWatch):
        (WebCore::Geolocation::setIsAllowed):
        * Modules/geolocation/Geolocation.h:
        (WebCore):
        (Geolocation):
        * Modules/geolocation/NavigatorGeolocation.cpp:
        (WebCore):
        (WebCore::NavigatorGeolocation::geolocation):
        * Modules/geolocation/NavigatorGeolocation.h:
        (NavigatorGeolocation):
        * dom/Document.cpp:
        (WebCore::Document::Document):
        * dom/Document.h:
        (Document):
        * history/PageCache.cpp:
        (WebCore::logCanCacheFrameDecision):
        (WebCore::PageCache::canCachePageContainingThisFrame):

2012-03-05  Martin Robinson  <mrobinson@igalia.com>

        [soup] Crash while loading http://www.jusco.cn
        https://bugs.webkit.org/show_bug.cgi?id=68238

        Reviewed by Philippe Normand.

        Test: http/tests/xmlhttprequest/xmlhttprequest-sync-no-timers.html

        When running synchronous XMLHttpRequests, push a new inner thread default
        context, so that other sources from timers and network activity do not run.
        This will make synchronous requests truly synchronous with the rest of
        WebCore.

        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCoreSynchronousLoader): Clean up the method definitions a bit by writing them inline.
        (WebCore::WebCoreSynchronousLoader::WebCoreSynchronousLoader): Push a new thread default
        context to prevent other sources from running.
        (WebCore::WebCoreSynchronousLoader::~WebCoreSynchronousLoader): Pop the inner thread default context.
        (WebCore::closeCallback): If the client is synchronous call didFinishLoading now.
        (WebCore::readCallback): Only call didFinishLoading if the client isn't synchronous.
        (WebCore::ResourceHandle::defaultSession): Activate use-thread-context so that the soup session
        respects the inner thread context.
        (ResourceHandleClient):
        (WebCore::ResourceHandleClient::isSynchronousClient): Added this virtual method.

2012-03-05  Alexander Færøy  <alexander.faeroy@nokia.com>

        Remove pointer to timer and use the timers directly in the tiled backing store
        https://bugs.webkit.org/show_bug.cgi?id=80283

        Patch by Kenneth Rohde Christiansen and Alexander Færøy.

        Reviewed by Simon Hausmann.

        * platform/graphics/TiledBackingStore.cpp:
        (WebCore::TiledBackingStore::TiledBackingStore):
        (WebCore::TiledBackingStore::~TiledBackingStore):
        (WebCore::TiledBackingStore::createTiles):
        (WebCore::TiledBackingStore::startTileBufferUpdateTimer):
        (WebCore::TiledBackingStore::startTileCreationTimer):
        * platform/graphics/TiledBackingStore.h:
        (TiledBackingStore):

2012-03-05  Alexander Pavlov  <apavlov@chromium.org>

        Web Inspector: [Styles] Tabbing an empty new property in the middle of style moves the editor to the next section
        https://bugs.webkit.org/show_bug.cgi?id=80264

        Reviewed by Pavel Feldman.

        * inspector/front-end/StylesSidebarPane.js:
        (WebInspector.StylePropertyTreeElement.prototype.element.userInput.previousContent.context.moveDirection.alreadyNew):
        (WebInspector.StylePropertyTreeElement.prototype):

2012-03-05  Rob Buis  <rbuis@rim.com>

        [BlackBerry] Update LocalizedStringsBlackBerry.cpp
        https://bugs.webkit.org/show_bug.cgi?id=80278

        Reviewed by Antonio Gomes.

        Update LocalizedStringsBlackBerry.cpp to current HEAD.

        * platform/blackberry/LocalizedStringsBlackBerry.cpp:
        (WebCore::inputElementAltText): fall back to "Submit".
        (WebCore::imageTitle): choose the format "filename(widthxheight)" like Chrome does.
        (WebCore::fileButtonNoFilesSelectedLabel): fall back to "No File Chosen" translation like Chrome does.
        (WebCore):

2012-03-05  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: [chromium] introduce HeapSnapshot performance test.
        https://bugs.webkit.org/show_bug.cgi?id=80280

        Reviewed by Pavel Feldman.

        * inspector/front-end/HeapSnapshotProxy.js:
        (WebInspector.HeapSnapshotLoaderProxy.prototype.finishLoading.updateStaticData):
        (WebInspector.HeapSnapshotLoaderProxy.prototype.finishLoading):
        (WebInspector.HeapSnapshotLoaderProxy.prototype._callLoadCallbacks):

2012-03-05  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: cannot be launched when localStorage is disabled
        https://bugs.webkit.org/show_bug.cgi?id=80252

        Reviewed by Vsevolod Vlasov.

        * inspector/front-end/Settings.js:

2012-03-05  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: check for the number of parsed css properties.
        https://bugs.webkit.org/show_bug.cgi?id=80268

        Reviewed by Vsevolod Vlasov.

        Test: inspector/styles/set-property-boundaries.html

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

2012-03-05  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Tabbed pane should redraw tab elements when tab is closed.
        https://bugs.webkit.org/show_bug.cgi?id=80273

        Reviewed by Pavel Feldman.

        * inspector/front-end/TabbedPane.js:
        (WebInspector.TabbedPane.prototype.closeTab):

2012-03-05  Alexander Færøy  <alexander.faeroy@nokia.com>

        Improve comments in the tiled backing store
        https://bugs.webkit.org/show_bug.cgi?id=80279

        Patch by Kenneth Rohde Christiansen and Alexander Færøy.

        Reviewed by Simon Hausmann.

        * platform/graphics/TiledBackingStore.cpp:
        (WebCore::TiledBackingStore::createTiles):

2012-03-05  Alexander Færøy  <alexander.faeroy@nokia.com>

        TiledBackingStore.{h,cpp} contains unclear variable names
        https://bugs.webkit.org/show_bug.cgi?id=80276

        Patch by Kenneth Rohde Christiansen and Alexander Færøy.

        Reviewed by Simon Hausmann.

        This patch renames some of the variables in TiledBackingStore.cpp to
        enhance the clearity and for consistence.

        The visibleContentsRect is renamed to visibleRect as it is not in
        contents coordinates.

        The panningTrajectoryVector and m_visibleRectTrajectoryVector are
        renamed to just *[m_]trajectoryVector, as that is descriptive enough.

        The previous prefix has also been removed, as it is being used as the
        current one in the code. This avoids confusion.

        * platform/graphics/TiledBackingStore.cpp:
        (WebCore::TiledBackingStore::coverWithTilesIfNeeded):
        (WebCore::TiledBackingStore::visibleRect):
        (WebCore::TiledBackingStore::visibleAreaIsCovered):
        (WebCore::TiledBackingStore::createTiles):
        (WebCore::TiledBackingStore::computeCoverAndKeepRect):
        (WebCore::TiledBackingStore::removeAllNonVisibleTiles):
        * platform/graphics/TiledBackingStore.h:
        (TiledBackingStore):

2012-03-05  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] Fix build with Qt 5 and OpenGL ES 2.0

        Reviewed by Noam Rosenthal.

        * platform/graphics/texmap/TextureMapper.h: Since we don't do QT += opengl with Qt 5 anymore
        here in WebCore, we cannot check for QT_OPENGL_LIB. But since this is Qt5, we know that the
        GLES setting comes qconfig.h and we can rely on it.

2012-03-05  Alexander Færøy  <alexander.faeroy@nokia.com>

        Whitespace clean-up of TiledBackingStore.cpp.

        Rubber-stamped by Kenneth Rohde Christiansen.

        Already covered by existing tests.

        * platform/graphics/TiledBackingStore.cpp:
        (WebCore):
        (WebCore::TiledBackingStore::updateTileBuffers):
        (WebCore::TiledBackingStore::paint):

2012-03-05  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix make distcheck.

        * GNUmakefile.list.am: Add missing header file.

2012-03-05  Alexander Pavlov  <apavlov@chromium.org>

        Web Inspector: Incorrect appropriateSelectorFor() suggestion for when a DOMNode has more than 2 CSS classes
        https://bugs.webkit.org/show_bug.cgi?id=80258

        Reviewed by Pavel Feldman.

        * inspector/front-end/DOMAgent.js:
        (WebInspector.DOMNode.prototype.appropriateSelectorFor):

2012-03-02  Alexander Pavlov  <apavlov@chromium.org>

        Web Inspector: [Styles] [CRASH] Handle rule addition and inline style editing failure due to Content-Security-Policy in the page
        https://bugs.webkit.org/show_bug.cgi?id=80024

        Reviewed by Pavel Feldman.

        Test: inspector/styles/add-new-rule-inline-style-csp.html

        * inspector/InspectorCSSAgent.cpp:
        (WebCore::InspectorCSSAgent::viaInspectorStyleSheet):
        * inspector/InspectorCSSAgent.h:
        (InlineStyleOverrideScope):
        (WebCore::InspectorCSSAgent::InlineStyleOverrideScope::InlineStyleOverrideScope):
        (WebCore::InspectorCSSAgent::InlineStyleOverrideScope::~InlineStyleOverrideScope):
        (InspectorCSSAgent):
        * inspector/InspectorStyleSheet.cpp:
        (WebCore::InspectorStyleSheetForInlineStyle::setStyleText):
        * page/ContentSecurityPolicy.cpp:
        (WebCore::ContentSecurityPolicy::ContentSecurityPolicy):
        (WebCore::ContentSecurityPolicy::allowInlineStyle):
        (WebCore::ContentSecurityPolicy::setOverrideAllowInlineStyle):
        (WebCore):
        * page/ContentSecurityPolicy.h:
        (ContentSecurityPolicy):

2012-03-05  Yoshifumi Inoue  <yosin@chromium.org>

        [Forms] The "optgroup" element should not be a form-associated element
        https://bugs.webkit.org/show_bug.cgi?id=80234

        Reviewed by Kent Tamura.

        This patch changes base class of HTMLOptGroup to HTMLElement from
        HTMLFormControlElement to avoid the "optgroup" element in form-associate
        elements collection.

        This patch doesn't affect HTMLOptionElement::disabled's static_cast. However,
        it doesn't good at coding style. This patch also fix it.


        No new tests. No behavior changes.

        * html/HTMLOptGroupElement.cpp:
        (WebCore::HTMLOptGroupElement::HTMLOptGroupElement): Remove "form" parameter.
        (WebCore::HTMLOptGroupElement::create): Remove "form" parameter.
        (WebCore::HTMLOptGroupElement::childrenChanged): Replace base method call.
        (WebCore::HTMLOptGroupElement::parseAttribute): Replace base method call.
        (WebCore::HTMLOptGroupElement::attach): Replace base method call.
        (WebCore::HTMLOptGroupElement::detach): Replace base method call.
        * html/HTMLOptGroupElement.h:
        (HTMLOptGroupElement): Change base class to HTMLElement.
        * html/HTMLOptionElement.cpp:
        (WebCore::HTMLOptionElement::disabled): Replace static_cast<HTMLFormControlElement*> to static_cast<HTMLElement*> with checking isHTMLElement.
        * html/HTMLTagNames.in: Remove "constructorNeedsFormElement" for not passing "form" parameter in HTMLElementFactory.

2012-03-05  Pavel Podivilov  <podivilov@chromium.org>

        Web Inspector: fix extensions-resource.html test.
        https://bugs.webkit.org/show_bug.cgi?id=80183

        Reviewed by Vsevolod Vlasov.

        * inspector/front-end/DebuggerPresentationModel.js:
        (WebInspector.DebuggerPresentationModel.Linkifier.prototype._updateAnchor):

2012-03-02  Andrey Kosyakov  <caseq@chromium.org>

        Add instrumentation for frame start/end on timeline.

        Web Inspector: add timeline instrumentation for frame events
        https://bugs.webkit.org/show_bug.cgi?id=80127

        Reviewed by Pavel Feldman.

        - display frame boundaries when vertical overview mode is on
        - aggregate by frame in vertical overview mode
        - switched event filtering criteria from index to time in vertical overview mode

        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::didBeginFrameImpl):
        (WebCore):
        * inspector/InspectorInstrumentation.h:
        (InspectorInstrumentation):
        (WebCore::InspectorInstrumentation::didBeginFrame):
        (WebCore):
        * inspector/InspectorTimelineAgent.cpp:
        (TimelineRecordType):
        (WebCore::InspectorTimelineAgent::didBeginFrame):
        (WebCore):
        * inspector/InspectorTimelineAgent.h:
        (InspectorTimelineAgent):
        * inspector/front-end/TimelineModel.js:
        * inspector/front-end/TimelineOverviewPane.js:
        (WebInspector.TimelineOverviewPane):
        (WebInspector.TimelineOverviewPane.prototype._showMemoryGraph):
        (WebInspector.TimelineOverviewPane.prototype.setStartAtZero):
        (WebInspector.TimelineOverviewPane.prototype.updateEventDividers):
        (WebInspector.TimelineOverviewPane.prototype.sidebarResized):
        (WebInspector.TimelineOverviewPane.prototype.reset):
        (WebInspector.TimelineOverviewPane.prototype.accept):
        (WebInspector.TimelineOverviewPane.prototype.windowStartTime):
        (WebInspector.TimelineOverviewPane.prototype.windowEndTime):
        (WebInspector.TimelineOverviewPane.prototype._onWindowChanged):
        (WebInspector.TimelineStartAtZeroOverview):
        (WebInspector.TimelineStartAtZeroOverview.prototype.reset):
        (WebInspector.TimelineStartAtZeroOverview.prototype.update):
        (WebInspector.TimelineStartAtZeroOverview.prototype._aggregateFrames):
        (WebInspector.TimelineStartAtZeroOverview.prototype._aggregateFrameStatistics):
        (WebInspector.TimelineStartAtZeroOverview.prototype._aggregateRecords):
        (WebInspector.TimelineStartAtZeroOverview.prototype._buildBar):
        (WebInspector.TimelineStartAtZeroOverview.prototype.getWindowTimes):
        * inspector/front-end/TimelinePanel.js:
        (WebInspector.TimelinePanel.prototype._updateEventDividers):
        (WebInspector.TimelinePanel.prototype._createEventDivider):
        (WebInspector.TimelinePanel.prototype._toggleStartAtZeroButtonClicked):
        (WebInspector.TimelinePanel.prototype._innerAddRecordToTimeline.addTimestampRecords):
        (WebInspector.TimelinePanel.prototype._innerAddRecordToTimeline):
        (WebInspector.TimelinePanel.prototype._refresh):
        (WebInspector.TimelinePanel.prototype._refreshRecords):
        (WebInspector.TimelineCategoryFilter.prototype.accept):
        * inspector/front-end/TimelinePresentationModel.js:
        (WebInspector.TimelinePresentationModel.prototype.get _recordStyles):
        * inspector/front-end/inspectorCommon.css:
        * inspector/front-end/timelinePanel.css:
        (#timeline-container):
        (.timeline .resources-event-divider):
        (.timeline.timeline-start-at-zero .resources-divider):
        (.timeline .resources-event-divider.timeline-frame-divider):

2012-03-05  MORITA Hajime  <morrita@google.com>

        Unreviewed build fix for !ENABLE(SHADOW_DOM).

        * html/shadow/HTMLContentElement.cpp:
        (WebCore::contentTagName):

2012-03-04  MORITA Hajime  <morrita@google.com>

        Internally used HTMLContentElement subclasses should have correct wrapper.
        https://bugs.webkit.org/show_bug.cgi?id=80237

        Reviewed by Kent Tamura.

        DetailsContentElement and DetailsSummaryElement used to use
        <div> as their tag name. But this means they are wrapped by
        wrapper objects for HTMLDivElement, which is wrong. This happened
        to work though because HTMLDivElement has no extra state or API.

        This change introduces "noConstructor" keyword for make_name.pl
        sources.  This keyword allows a tag name to specify its own
        wrapper without making the tag name visible from the parser, or
        HTMLElementFactory in precise.

        Following this addition, this change also adds a new tag name
        "webkitShadowContent" for DetailsContentElement and DetailsSummaryElement,
        which has no constructor, and whose wrapper type is HTMLElement.

        This change isn't visible from the page author and only matters for testing.

        Test: fast/dom/shadow/content-element-user-agent-shadow.html

        * dom/make_names.pl:
        (defaultTagPropertyHash):
        (buildConstructorMap):
        (printConstructors):
        (printFunctionInits):
        * html/HTMLDetailsElement.cpp:
        (WebCore::DetailsContentElement::DetailsContentElement):
        (WebCore::DetailsSummaryElement::DetailsSummaryElement):
        * html/HTMLTagNames.in:
        * html/shadow/HTMLContentElement.cpp:
        (WebCore::contentTagName):

2012-03-05  Shinya Kawanaka  <shinyak@chromium.org>

        Refactoring: Move HTMLContentElement::attach to InsertionPoint::attach.
        https://bugs.webkit.org/show_bug.cgi?id=80243

        Reviewed by Hajime Morita.

        Since the current code in HTMLContentElement::attach() will be used for coming <shadow>
        elements, it is natural that InsertionPoint::attach() has such code.

        No new tests, no change in behavior.

        * html/shadow/HTMLContentElement.cpp:
        * html/shadow/HTMLContentElement.h:
        (HTMLContentElement):
        * html/shadow/InsertionPoint.cpp:
        (WebCore::InsertionPoint::attach):
        (WebCore):
        (WebCore::InsertionPoint::detach):
        * html/shadow/InsertionPoint.h:
        (InsertionPoint):

2012-03-05  Adam Barth  <abarth@webkit.org>

        allowDatabaseAccess and databaseExceededQuota should be part of DatabaseContext not ScriptExecutionContext
        https://bugs.webkit.org/show_bug.cgi?id=80178

        Reviewed by Eric Seidel.

        These functions are only used by SQLDatabase, which means we can move
        them to DatabaseContext, removing one more tendril of the SQLDatabase
        code.

        * dom/Document.cpp:
        (WebCore):
        * dom/Document.h:
        (Document):
        * dom/ScriptExecutionContext.h:
        (ScriptExecutionContext):
        * storage/DatabaseContext.cpp:
        (WebCore::DatabaseContext::DatabaseContext):
        (WebCore::DatabaseContext::from):
        (WebCore::DatabaseContext::allowDatabaseAccess):
        (WebCore):
        (WebCore::DatabaseContext::databaseExceededQuota):
        * storage/DatabaseContext.h:
        (DatabaseContext):
        * storage/DatabaseTracker.cpp:
        (WebCore::DatabaseTracker::canEstablishDatabase):
        * storage/SQLTransaction.cpp:
        (WebCore::SQLTransaction::executeSQL):
        * storage/SQLTransactionClient.cpp:
        (WebCore::SQLTransactionClient::didExceedQuota):
        * storage/SQLTransactionSync.cpp:
        (WebCore::SQLTransactionSync::executeSQL):
        * workers/WorkerContext.cpp:
        (WebCore):
        * workers/WorkerContext.h:
        (WorkerContext):

2012-03-04  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r107551.
        http://trac.webkit.org/changeset/107551
        https://bugs.webkit.org/show_bug.cgi?id=80245

        caused incorrect style sharing (Requested by kling on
        #webkit).

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

2012-03-04  Luke Macpherson   <macpherson@chromium.org>

        Remove unused macro HANDLE_INHERIT_AND_INITIAL_AND_PRIMITIVE_WITH_VALUE.
        https://bugs.webkit.org/show_bug.cgi?id=80236

        Reviewed by Eric Seidel.

        No new tests / unused code deletion only.

        * css/CSSStyleSelector.cpp:
        (WebCore):

2012-03-04  Filip Pizlo  <fpizlo@apple.com>

        JIT heuristics should be hyperbolic
        https://bugs.webkit.org/show_bug.cgi?id=80055
        <rdar://problem/10922260>

        Reviewed by Oliver Hunt.

        No new tests, since there's no new functionality.

        * ForwardingHeaders/wtf/SimpleStats.h: Added.

2012-03-04  Shinya Kawanaka  <shinyak@chromium.org>

        Methods like firstRendererOf of NodeRenderingContext should be extracted.
        https://bugs.webkit.org/show_bug.cgi?id=79902

        Reviewed by Hajime Morita.

        firstRendererOfInsertionPoint should return the first renderer of its child, however
        it returns next renderer of parent. The same thing happens lastRendererOfInsertionPoint.

        Test: content-element-move.html has another test case.

        * dom/NodeRenderingContext.cpp:
        (WebCore):
        (WebCore::nextRendererOfInsertionPoint):
        (WebCore::previousRendererOfInsertionPoint):
        (WebCore::firstRendererOfInsertionPoint):
        (WebCore::lastRendererOfInsertionPoint):
        (WebCore::firstRendererOf):
        (WebCore::lastRendererOf):
        (WebCore::NodeRenderingContext::nextRenderer):
        (WebCore::NodeRenderingContext::previousRenderer):

2012-03-04  MORITA Hajime <morrita@google.com>

        Unreviewed build fix for ENABLE(MATHML).

        * mathml/MathMLElement.h:
        (WebCore):

2012-03-04  MORITA Hajime  <morrita@google.com>

        WebKit needs toHTMLUnknownElement() and isUnknown() for sanity check.
        https://bugs.webkit.org/show_bug.cgi?id=80229

        Reviewed by Kent Tamura.

        The code generator has naked static_cast<> which could be unsafe.
        We can turn it into toHTMLUnknownElement() and the like.

        No new tests. Just added a sanity check.

        * dom/make_names.pl:
        (printWrapperFactoryCppFile):
        * html/HTMLElement.h:
        (HTMLElement):
        (WebCore::HTMLElement::isHTMLUnknownElement):
        * html/HTMLUnknownElement.h:
        (HTMLUnknownElement):
        (WebCore::toHTMLUnknownElement):
        (WebCore):
        * mathml/MathMLElement.h:
        (toMathMLElement):
        * svg/SVGElement.h:
        (WebCore::toSVGElement):
        (WebCore):

2012-03-04  Luke Macpherson   <macpherson@chromium.org>

        Handle CSSPropertyWebkitColumnBreakAfter, CSSPropertyWebkitColumnBreakBefore and CSSPropertyWebkitColumnBreakInside in CSSStyleApplyProperty.
        https://bugs.webkit.org/show_bug.cgi?id=80226

        Reviewed by Eric Seidel.

        No new tests / refactoring only.

        * css/CSSStyleApplyProperty.cpp:
        (WebCore::CSSStyleApplyProperty::CSSStyleApplyProperty):
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::collectMatchingRulesForList):

2012-03-04  Jonathan Dong  <jonathan.dong@torchmobile.com.cn>

        [BlackBerry] Credential backing store implementation
        https://bugs.webkit.org/show_bug.cgi?id=79650

        Reviewed by Antonio Gomes.

        Opened Credential database in CedentialBackingStore::instance().
        Added never_remember table and associated sql statment
        members to store the never remember sites.
        Removed CredentialStorage initialize codes because that
        won't give users a chance to re-enter the new credential
        information for an already stored site.
        Changed login update and has statement to support
        autofill feature of multiple credential forms in the
        same page; Also added url as a parameter of hasLogin() function.
        Added calling reset() after each statement calls step(),
        to make it work correctly next time.
        Also fixed a macro typo in HANDLE_SQL_EXEC_FAILURE.

        No new tests.

        * platform/network/blackberry/CredentialBackingStore.cpp:
        (WebCore::CredentialBackingStore::instance):
        (WebCore::CredentialBackingStore::CredentialBackingStore):
        (WebCore::CredentialBackingStore::open):
        (WebCore::CredentialBackingStore::close):
        (WebCore::CredentialBackingStore::addLogin):
        (WebCore::CredentialBackingStore::updateLogin):
        (WebCore::CredentialBackingStore::hasLogin):
        (WebCore::CredentialBackingStore::getLogin):
        (WebCore):
        (WebCore::CredentialBackingStore::removeLogin):
        (WebCore::CredentialBackingStore::addNeverRemember):
        (WebCore::CredentialBackingStore::hasNeverRemember):
        (WebCore::CredentialBackingStore::getNeverRemember):
        (WebCore::CredentialBackingStore::removeNeverRemember):
        (WebCore::CredentialBackingStore::clearLogins):
        (WebCore::CredentialBackingStore::clearNeverRemember):
        * platform/network/blackberry/CredentialBackingStore.h:
        (CredentialBackingStore):

2012-03-04  Hyowon Kim  <hw1008.kim@samsung.com>

        [EFL] Evas_GL initialization and destruction in GraphicsContext3DPrivate
        https://bugs.webkit.org/show_bug.cgi?id=80211

        Reviewed by Noam Rosenthal.

        This patch adds initialization and destruction codes using Evas_GL APIs to GC3DPrivate.

        No new tests. No behavior change.

        * platform/graphics/efl/GraphicsContext3DPrivate.cpp:
        (WebCore::GraphicsContext3DPrivate::create):
        (WebCore::GraphicsContext3DPrivate::GraphicsContext3DPrivate):
        (WebCore::GraphicsContext3DPrivate::~GraphicsContext3DPrivate):
        (WebCore::GraphicsContext3DPrivate::initialize):
        (WebCore::GraphicsContext3DPrivate::createSurface):
        (WebCore::GraphicsContext3DPrivate::makeContextCurrent):
        * platform/graphics/efl/GraphicsContext3DPrivate.h:
        (GraphicsContext3DPrivate):

2012-03-04  Raphael Kubo da Costa  <kubo@profusion.mobi>

        [CMake] Libraries are installed to /usr/lib and not /usr/lib64 on x86_64
        https://bugs.webkit.org/show_bug.cgi?id=71507

        Reviewed by Antonio Gomes.

        No new tests, buildsystem change.

        * CMakeLists.txt: Use ${LIB_INSTALL_DIR} instead of hardcoding "lib".

2012-03-04  Hyowon Kim  <hw1008.kim@samsung.com>

        [EFL] Implementation of missing functions in GraphicsContext3DPrivate
        https://bugs.webkit.org/show_bug.cgi?id=79759

        Reviewed by Noam Rosenthal.

        The initial patch (Bug 62961) only contains implementations for simple functions
        which call GL functions through Evas_GL_API.
        This patch implements a little complicated functions such as getActiveAttrib(),
        getShaderSource() and so on.

        No new tests. No behavior change.

        * platform/graphics/efl/GraphicsContext3DPrivate.cpp:
        (WebCore::GraphicsContext3DPrivate::getActiveAttrib):
        (WebCore::GraphicsContext3DPrivate::getActiveUniform):
        (WebCore::GraphicsContext3DPrivate::getError):
        (WebCore::GraphicsContext3DPrivate::getIntegerv):
        (WebCore::GraphicsContext3DPrivate::getProgramInfoLog):
        (WebCore::GraphicsContext3DPrivate::getShaderInfoLog):
        (WebCore::GraphicsContext3DPrivate::getShaderSource):

2012-03-04  Kentaro Hara  <haraken@chromium.org>

        Revert SVG-related APIs from DOMWindowSVG.idl back to DOMWindow.idl
        https://bugs.webkit.org/show_bug.cgi?id=80139

        Reviewed by Adam Barth.

        Based on the discussion on webkit-dev@
        (http://markmail.org/message/kagvswmah67zmrry#query:+page:1+mid:h34vzbiu5suub3ld+state:results),
        this patch reverts SVG-related APIs from DOMWindowSVG.idl back to DOMWindow.idl.

        No tests. No change in behavior.

        * CMakeLists.txt:
        * DerivedSources.make:
        * DerivedSources.pri:
        * GNUmakefile.list.am:
        * WebCore.gypi:
        * WebCore.xcodeproj/project.pbxproj:
        * page/DOMWindow.idl:
        * svg/DOMWindowSVG.idl: Removed.

2012-03-04  Kentaro Hara  <haraken@chromium.org>

        Revert WebGL-related APIs from DOMWindowWebGL.idl back to DOMWindow.idl
        https://bugs.webkit.org/show_bug.cgi?id=80144

        Reviewed by Adam Barth.

        Based on the discussion on webkit-dev@
        (http://markmail.org/message/kagvswmah67zmrry#query:+page:1+mid:h34vzbiu5suub3ld+state:results),
        this patch reverts WebGL-related APIs from DOMWindowWebGL.idl back to DOMWindow.idl.

        No tests. No change in behavior.

        * DerivedSources.make:
        * DerivedSources.pri:
        * GNUmakefile.list.am:
        * WebCore.gypi:
        * WebCore.xcodeproj/project.pbxproj:
        * html/canvas/DOMWindowWebGL.idl: Removed.
        * page/DOMWindow.idl:

2012-03-04  MORITA Hajime  <morrita@google.com>

        Unreviewed build fix.

        * rendering/RenderButton.cpp:
        (WebCore::RenderButton::canHaveGeneratedChildren):

2012-03-01  MORITA Hajime  <morrita@google.com>

        REGRESSION(r108758): Assertion failure in WebCore::RenderMenuList::addChild
        https://bugs.webkit.org/show_bug.cgi?id=80096

        Reviewed by Dimitri Glazkov.

        After r108758 RenderBlock allowed <select> to have generated
        contents. But it shouldn't. This change stops allowing it again by
        replacing some canHaveChildren() invocations with
        less permissive canHaveGeneratedChildren().

        This change also pulls back original canHaveChildren() logic to
        RenderButton to allow <button> to have generated contents.

        Then RenderDeprecatedFlexibleBox::buttonText() is morphed to
        more intention revealing canHaveGeneratedChildren().

        Test: fast/forms/select-generated-content.html

        * rendering/RenderBlock.cpp:
        (WebCore):
        (WebCore::canHaveGeneratedChildren):
        (WebCore::RenderBlock::styleDidChange):
        (WebCore::findFirstLetterBlock):
        (WebCore::RenderBlock::updateFirstLetter):
        * rendering/RenderButton.cpp:
        * rendering/RenderButton.h:
        (RenderButton):
        * rendering/RenderDeprecatedFlexibleBox.h:
        (WebCore::RenderDeprecatedFlexibleBox::canHaveGeneratedChildren):
        * rendering/RenderMenuList.h:

2012-03-04  Robin Cao  <robin.cao@torchmobile.com.cn>

        [BlackBerry] Upstream two helper files from platform/graphics/blackberry
        https://bugs.webkit.org/show_bug.cgi?id=80125

        Reviewed by Antonio Gomes.

        Initial upstream, no new tests.

        * platform/graphics/blackberry/InstrumentedPlatformCanvas.h: Added.
        (WebCore):
        (InstrumentedPlatformCanvas):
        (WebCore::InstrumentedPlatformCanvas::InstrumentedPlatformCanvas):
        (WebCore::InstrumentedPlatformCanvas::~InstrumentedPlatformCanvas):
        (WebCore::InstrumentedPlatformCanvas::isSolidColor):
        (WebCore::InstrumentedPlatformCanvas::solidColor):
        (WebCore::InstrumentedPlatformCanvas::save):
        (WebCore::InstrumentedPlatformCanvas::saveLayer):
        (WebCore::InstrumentedPlatformCanvas::restore):
        (WebCore::InstrumentedPlatformCanvas::translate):
        (WebCore::InstrumentedPlatformCanvas::scale):
        (WebCore::InstrumentedPlatformCanvas::rotate):
        (WebCore::InstrumentedPlatformCanvas::skew):
        (WebCore::InstrumentedPlatformCanvas::concat):
        (WebCore::InstrumentedPlatformCanvas::setMatrix):
        (WebCore::InstrumentedPlatformCanvas::clipRect):
        (WebCore::InstrumentedPlatformCanvas::clipPath):
        (WebCore::InstrumentedPlatformCanvas::clipRegion):
        (WebCore::InstrumentedPlatformCanvas::clear):
        (WebCore::InstrumentedPlatformCanvas::drawPaint):
        (WebCore::InstrumentedPlatformCanvas::drawPoints):
        (WebCore::InstrumentedPlatformCanvas::drawRect):
        (WebCore::InstrumentedPlatformCanvas::drawPath):
        (WebCore::InstrumentedPlatformCanvas::drawBitmap):
        (WebCore::InstrumentedPlatformCanvas::drawBitmapRect):
        (WebCore::InstrumentedPlatformCanvas::drawBitmapMatrix):
        (WebCore::InstrumentedPlatformCanvas::drawSprite):
        (WebCore::InstrumentedPlatformCanvas::drawText):
        (WebCore::InstrumentedPlatformCanvas::drawPosText):
        (WebCore::InstrumentedPlatformCanvas::drawPosTextH):
        (WebCore::InstrumentedPlatformCanvas::drawTextOnPath):
        (WebCore::InstrumentedPlatformCanvas::drawPicture):
        (WebCore::InstrumentedPlatformCanvas::drawVertices):
        (WebCore::InstrumentedPlatformCanvas::drawData):
        * platform/graphics/blackberry/LayerMessage.h: Added.
        (WebCore):
        (WebCore::isCompositingThread):
        (WebCore::compositingThread):
        (WebCore::isWebKitThread):
        (WebCore::webKitThread):
        (WebCore::dispatchCompositingMessage):
        (WebCore::dispatchSyncCompositingMessage):
        (WebCore::dispatchWebKitMessage):

2012-03-04  Nikolas Zimmermann  <nzimmermann@rim.com>

        Introduce SMIL overrideStyle, to make SVG stop mutating CSS styles directly
        https://bugs.webkit.org/show_bug.cgi?id=79790

        Reviewed by Dirk Schulze.

        Restore SMIL animation behavior back to pre-r109342.
        1) Always animate presentation attributes as CSS properties, regardless of the
        attributeTypes value. Matches Opera/FF, and makes the attribute optional again
        as specified in both SMIL & SVG.

        Extend existing svg/animations/attributesTypes.html to verify this.

        2) Switch setInstancesUpdatesBlocked calls to the right locations again, to
        avoid chromium assertions (and/or extra work being done). Fixing that reveals another
        problem: in the instance updating code path, we always called setTargetAttributeAnimatedCSSValue
        even for XML animations.

        * svg/SVGAnimationElement.cpp:
        (WebCore::SVGAnimationElement::shouldApplyAnimation): Restore old logic.
        (WebCore::SVGAnimationElement::setTargetAttributeAnimatedValue): Fix typo, move setInstancesUpdatesBlocked calls.

2012-03-04  Jonathan Dong  <jonathan.dong@torchmobile.com.cn>

        [BlackBerry] upstream MediaPlayerPrivateBlackBerry.[cpp|h]
        https://bugs.webkit.org/show_bug.cgi?id=79729

        Reviewed by Rob Buis and Antonio Gomes.

        Implementation of MediaPlayerPrivate for BlackBerry porting.
        Initial upstream, No new tests.

        * PlatformBlackBerry.cmake:
        * platform/graphics/blackberry/MediaPlayerPrivateBlackBerry.cpp: Added.
        (WebCore):
        (WebCore::MediaPlayerPrivate::create):
        (WebCore::MediaPlayerPrivate::registerMediaEngine):
        (WebCore::MediaPlayerPrivate::getSupportedTypes):
        (WebCore::MediaPlayerPrivate::supportsType):
        (WebCore::MediaPlayerPrivate::notifyAppActivatedEvent):
        (WebCore::MediaPlayerPrivate::setCertificatePath):
        (WebCore::MediaPlayerPrivate::MediaPlayerPrivate):
        (WebCore::MediaPlayerPrivate::~MediaPlayerPrivate):
        (WebCore::MediaPlayerPrivate::load):
        (WebCore::MediaPlayerPrivate::cancelLoad):
        (WebCore::MediaPlayerPrivate::prepareToPlay):
        (WebCore::MediaPlayerPrivate::play):
        (WebCore::MediaPlayerPrivate::pause):
        (WebCore::MediaPlayerPrivate::supportsFullscreen):
        (WebCore::MediaPlayerPrivate::naturalSize):
        (WebCore::MediaPlayerPrivate::hasVideo):
        (WebCore::MediaPlayerPrivate::hasAudio):
        (WebCore::MediaPlayerPrivate::setVisible):
        (WebCore::MediaPlayerPrivate::duration):
        (WebCore::MediaPlayerPrivate::currentTime):
        (WebCore::MediaPlayerPrivate::seek):
        (WebCore::MediaPlayerPrivate::userDrivenSeekTimerFired):
        (WebCore::MediaPlayerPrivate::seeking):
        (WebCore::MediaPlayerPrivate::setRate):
        (WebCore::MediaPlayerPrivate::paused):
        (WebCore::MediaPlayerPrivate::setVolume):
        (WebCore::MediaPlayerPrivate::networkState):
        (WebCore::MediaPlayerPrivate::readyState):
        (WebCore::MediaPlayerPrivate::maxTimeSeekable):
        (WebCore::MediaPlayerPrivate::buffered):
        (WebCore::MediaPlayerPrivate::bytesLoaded):
        (WebCore::MediaPlayerPrivate::setSize):
        (WebCore::MediaPlayerPrivate::paint):
        (WebCore::MediaPlayerPrivate::hasAvailableVideoFrame):
        (WebCore::MediaPlayerPrivate::hasSingleSecurityOrigin):
        (WebCore::MediaPlayerPrivate::movieLoadType):
        (WebCore::MediaPlayerPrivate::userAgent):
        (WebCore::MediaPlayerPrivate::resizeSourceDimensions):
        (WebCore::MediaPlayerPrivate::setFullscreenWebPageClient):
        (WebCore::MediaPlayerPrivate::getWindow):
        (WebCore::MediaPlayerPrivate::getPeerWindow):
        (WebCore::MediaPlayerPrivate::getWindowPosition):
        (WebCore::MediaPlayerPrivate::mmrContextName):
        (WebCore::MediaPlayerPrivate::percentLoaded):
        (WebCore::MediaPlayerPrivate::sourceWidth):
        (WebCore::MediaPlayerPrivate::sourceHeight):
        (WebCore::MediaPlayerPrivate::setAllowPPSVolumeUpdates):
        (WebCore::MediaPlayerPrivate::updateStates):
        (WebCore::MediaPlayerPrivate::onStateChanged):
        (WebCore::MediaPlayerPrivate::onMediaStatusChanged):
        (WebCore::MediaPlayerPrivate::onError):
        (WebCore::MediaPlayerPrivate::onDurationChanged):
        (WebCore::MediaPlayerPrivate::onTimeChanged):
        (WebCore::MediaPlayerPrivate::onPauseStateChanged):
        (WebCore::MediaPlayerPrivate::onRateChanged):
        (WebCore::MediaPlayerPrivate::onVolumeChanged):
        (WebCore::MediaPlayerPrivate::onRepaint):
        (WebCore::MediaPlayerPrivate::onSizeChanged):
        (WebCore::MediaPlayerPrivate::onPlayNotified):
        (WebCore::MediaPlayerPrivate::onPauseNotified):
        (WebCore::MediaPlayerPrivate::onBuffering):
        (WebCore::MediaPlayerPrivate::showErrorDialog):
        (WebCore::MediaPlayerPrivate::frameView):
        (WebCore::MediaPlayerPrivate::platformWindow):
        (WebCore::MediaPlayerPrivate::isFullscreen):
        (WebCore::MediaPlayerPrivate::platformMedia):
        (WebCore::MediaPlayerPrivate::platformLayer):
        (WebCore::loadBufferingImageData):
        (WebCore::MediaPlayerPrivate::bufferingTimerFired):
        (WebCore::MediaPlayerPrivate::setBuffering):
        (WebCore::allocateTextureId):
        (WebCore::MediaPlayerPrivate::drawBufferingAnimation):
        * platform/graphics/blackberry/MediaPlayerPrivateBlackBerry.h: Added.
        (WebKit):
        (WebCore):
        (MediaPlayerPrivate):
        (WebCore::MediaPlayerPrivate::supportsAcceleratedRendering):
        (WebCore::MediaPlayerPrivate::acceleratedRenderingStateChanged):

2012-03-03  Benjamin Poulain  <benjamin@webkit.org>

        Remove the unused function WebCore::protocolIsInHTTPFamily()
        https://bugs.webkit.org/show_bug.cgi?id=80218

        Reviewed by Anders Carlsson.

        * WebCore.order:
        * platform/KURL.cpp:
        * platform/KURL.h:
        (WebCore):

2012-03-03  Benjamin Poulain  <benjamin@webkit.org>

        Implement the basis of KURLWTFURL
        https://bugs.webkit.org/show_bug.cgi?id=79600

        Reviewed by Adam Barth.

        Add a simple, non-optimized, implementation for the main methods of KURL based
        on ParsedURL.

        * platform/KURLWTFURL.cpp:
        (WebCore):
        (WebCore::detach):
        (WebCore::KURL::KURL):
        (WebCore::KURL::copy):
        (WebCore::KURL::isEmpty):
        (WebCore::KURL::isValid):
        (WebCore::KURL::string):
        (WebCore::KURL::protocol):
        (WebCore::KURL::host):
        (WebCore::KURL::hasPort):
        (WebCore::KURL::port):
        (WebCore::KURL::user):
        (WebCore::KURL::pass):
        (WebCore::KURL::hasPath):
        (WebCore::KURL::path):
        (WebCore::KURL::lastPathComponent):
        (WebCore::KURL::query):
        (WebCore::KURL::hasFragmentIdentifier):
        (WebCore::KURL::fragmentIdentifier):
        (WebCore::KURL::baseAsString):
        (WebCore::KURL::fileSystemPath):
        (WebCore::KURL::protocolIs):
        (WebCore::KURL::protocolIsInHTTPFamily):
        (WebCore::KURL::setProtocol):
        (WebCore::KURL::setHost):
        (WebCore::KURL::removePort):
        (WebCore::KURL::setPort):
        (WebCore::KURL::setHostAndPort):
        (WebCore::KURL::setUser):
        (WebCore::KURL::setPass):
        (WebCore::KURL::setPath):
        (WebCore::KURL::setQuery):
        (WebCore::KURL::setFragmentIdentifier):
        (WebCore::KURL::removeFragmentIdentifier):
        (WebCore::protocolHostAndPortAreEqual):
        * platform/KURLWTFURLImpl.h:
        (KURLWTFURLImpl):
        (WebCore::KURLWTFURLImpl::copy):
        (WebCore):

2012-03-03  Benjamin Poulain  <benjamin@webkit.org>

        Remove the redundant method KURL::protocolInHTTPFamily()
        https://bugs.webkit.org/show_bug.cgi?id=80216

        Reviewed by Anders Carlsson.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::open):
        (WebCore::FrameLoader::addExtraFieldsToRequest):
        * loader/ResourceLoadScheduler.cpp:
        (WebCore::ResourceLoadScheduler::hostForURL):
        (WebCore::ResourceLoadScheduler::scheduleLoad):
        * loader/appcache/ApplicationCache.cpp:
        (WebCore::ApplicationCache::requestIsHTTPOrHTTPSGet):
        * loader/cache/CachedResource.cpp:
        (WebCore::CachedResource::freshnessLifetime):
        * loader/cache/MemoryCache.cpp:
        (WebCore::MemoryCache::removeFragmentIdentifierIfNeeded):
        * loader/icon/IconController.cpp:
        (WebCore::IconController::defaultURL):
        * platform/KURL.h:
        (KURL):
        * platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:
        * platform/network/CredentialStorage.cpp:
        (WebCore::CredentialStorage::set):
        (WebCore::findDefaultProtectionSpaceForURL):
        * platform/network/ResourceRequestBase.cpp:
        (WebCore::ResourceRequestBase::setCachePolicy):
        (WebCore::ResourceRequestBase::setTimeoutInterval):
        (WebCore::ResourceRequestBase::setHTTPMethod):
        (WebCore::ResourceRequestBase::setHTTPHeaderField):
        (WebCore::ResourceRequestBase::clearHTTPAuthorization):
        (WebCore::ResourceRequestBase::clearHTTPReferrer):
        (WebCore::ResourceRequestBase::clearHTTPOrigin):
        (WebCore::ResourceRequestBase::setResponseContentDispositionEncodingFallbackArray):
        (WebCore::ResourceRequestBase::setHTTPBody):
        (WebCore::ResourceRequestBase::setAllowCookies):
        (WebCore::ResourceRequestBase::setPriority):
        (WebCore::ResourceRequestBase::addHTTPHeaderField):
        * platform/network/blackberry/NetworkManager.cpp:
        (WebCore::NetworkManager::startJob):
        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::ResourceHandle::createCFURLConnection):
        * platform/network/mac/ResourceHandleMac.mm:
        (WebCore::ResourceHandle::createNSURLConnection):
        * platform/network/qt/QNetworkReplyHandler.cpp:
        (WebCore::QNetworkReplyHandler::sendResponseIfNeeded):
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::send):

2012-03-03  Robin Cao  <robin.cao@torchmobile.com.cn>

        [BlackBerry] Upstream LayerWebKitThread and its derived classes
        https://bugs.webkit.org/show_bug.cgi?id=79871

        Reviewed by Antonio Gomes.

        Initial upstream, no new tests.

        * platform/graphics/blackberry/CanvasLayerWebKitThread.cpp: Added.
        (WebCore):
        (WebCore::CanvasLayerWebKitThread::CanvasLayerWebKitThread):
        (WebCore::CanvasLayerWebKitThread::~CanvasLayerWebKitThread):
        (WebCore::CanvasLayerWebKitThread::setCanvas):
        (WebCore::CanvasLayerWebKitThread::setNeedsDisplay):
        (WebCore::CanvasLayerWebKitThread::updateTextureContentsIfNeeded):
        * platform/graphics/blackberry/CanvasLayerWebKitThread.h: Added.
        (WebCore):
        (CanvasLayerWebKitThread):
        (WebCore::CanvasLayerWebKitThread::create):
        * platform/graphics/blackberry/LayerData.h: Added.
        (WebCore):
        (LayerData):
        (WebCore::LayerData::LayerData):
        (WebCore::LayerData::~LayerData):
        (WebCore::LayerData::anchorPoint):
        (WebCore::LayerData::anchorPointZ):
        (WebCore::LayerData::backgroundColor):
        (WebCore::LayerData::borderColor):
        (WebCore::LayerData::borderWidth):
        (WebCore::LayerData::bounds):
        (WebCore::LayerData::doubleSided):
        (WebCore::LayerData::frame):
        (WebCore::LayerData::masksToBounds):
        (WebCore::LayerData::opacity):
        (WebCore::LayerData::opaque):
        (WebCore::LayerData::position):
        (WebCore::LayerData::sublayerTransform):
        (WebCore::LayerData::transform):
        (WebCore::LayerData::preserves3D):
        (WebCore::LayerData::getTextureID):
        (WebCore::LayerData::setTextureID):
        (WebCore::LayerData::needsTexture):
        (WebCore::LayerData::layerProgramShader):
        (WebCore::LayerData::isFixedPosition):
        (WebCore::LayerData::hasFixedContainer):
        (WebCore::LayerData::hasFixedAncestorInDOMTree):
        (WebCore::LayerData::pluginView):
        (WebCore::LayerData::holePunchRect):
        (WebCore::LayerData::hasHolePunchRect):
        (WebCore::LayerData::mediaPlayer):
        (WebCore::LayerData::canvas):
        (WebCore::LayerData::replicate):
        (WebCore::LayerData::layerType):
        (WebCore::LayerData::includeVisibility):
        * platform/graphics/blackberry/LayerWebKitThread.cpp: Added.
        (WebCore):
        (WebCore::LayerWebKitThread::create):
        (WebCore::LayerWebKitThread::LayerWebKitThread):
        (WebCore::LayerWebKitThread::~LayerWebKitThread):
        (WebCore::LayerWebKitThread::paintContents):
        (WebCore::LayerWebKitThread::contentsVisible):
        (WebCore::LayerWebKitThread::createFrontBufferLock):
        (WebCore::LayerWebKitThread::updateTextureContentsIfNeeded):
        (WebCore::LayerWebKitThread::setContents):
        (WebCore::LayerWebKitThread::setDrawable):
        (WebCore::LayerWebKitThread::setNeedsCommit):
        (WebCore::LayerWebKitThread::notifyAnimationStarted):
        (WebCore::LayerWebKitThread::commitOnWebKitThread):
        (WebCore::LayerWebKitThread::startAnimations):
        (WebCore::LayerWebKitThread::updateTextureContents):
        (WebCore::LayerWebKitThread::commitOnCompositingThread):
        (WebCore::LayerWebKitThread::addSublayer):
        (WebCore::LayerWebKitThread::insertSublayer):
        (WebCore::LayerWebKitThread::removeFromSuperlayer):
        (WebCore::LayerWebKitThread::removeSublayer):
        (WebCore::LayerWebKitThread::replaceSublayer):
        (WebCore::LayerWebKitThread::indexOfSublayer):
        (WebCore::LayerWebKitThread::setBounds):
        (WebCore::LayerWebKitThread::setFrame):
        (WebCore::LayerWebKitThread::rootLayer):
        (WebCore::LayerWebKitThread::removeAllSublayers):
        (WebCore::LayerWebKitThread::setSublayers):
        (WebCore::LayerWebKitThread::setNeedsDisplayInRect):
        (WebCore::LayerWebKitThread::setNeedsDisplay):
        (WebCore::LayerWebKitThread::updateLayerHierarchy):
        (WebCore::LayerWebKitThread::setIsMask):
        * platform/graphics/blackberry/LayerWebKitThread.h: Added.
        (WebCore):
        (LayerWebKitThread):
        (WebCore::LayerWebKitThread::setAnchorPoint):
        (WebCore::LayerWebKitThread::setAnchorPointZ):
        (WebCore::LayerWebKitThread::setBackgroundColor):
        (WebCore::LayerWebKitThread::setBorderColor):
        (WebCore::LayerWebKitThread::setBorderWidth):
        (WebCore::LayerWebKitThread::setDoubleSided):
        (WebCore::LayerWebKitThread::setMasksToBounds):
        (WebCore::LayerWebKitThread::setMaskLayer):
        (WebCore::LayerWebKitThread::maskLayer):
        (WebCore::LayerWebKitThread::setReplicaLayer):
        (WebCore::LayerWebKitThread::replicaLayer):
        (WebCore::LayerWebKitThread::setNeedsDisplayOnBoundsChange):
        (WebCore::LayerWebKitThread::setOpacity):
        (WebCore::LayerWebKitThread::setOpaque):
        (WebCore::LayerWebKitThread::setPosition):
        (WebCore::LayerWebKitThread::getSublayers):
        (WebCore::LayerWebKitThread::setSublayerTransform):
        (WebCore::LayerWebKitThread::superlayer):
        (WebCore::LayerWebKitThread::setTransform):
        (WebCore::LayerWebKitThread::setPreserves3D):
        (WebCore::LayerWebKitThread::setFixedPosition):
        (WebCore::LayerWebKitThread::setHasFixedContainer):
        (WebCore::LayerWebKitThread::setHasFixedAncestorInDOMTree):
        (WebCore::LayerWebKitThread::contents):
        (WebCore::LayerWebKitThread::setOwner):
        (WebCore::LayerWebKitThread::drawsContent):
        (WebCore::LayerWebKitThread::layerCompositingThread):
        (WebCore::LayerWebKitThread::setAbsoluteOffset):
        (WebCore::LayerWebKitThread::contentsScale):
        (WebCore::LayerWebKitThread::setRunningAnimations):
        (WebCore::LayerWebKitThread::setSuspendedAnimations):
        (WebCore::LayerWebKitThread::setNeedsTexture):
        (WebCore::LayerWebKitThread::setLayerProgramShader):
        (WebCore::LayerWebKitThread::isDrawable):
        (WebCore::LayerWebKitThread::boundsChanged):
        (WebCore::LayerWebKitThread::setSuperlayer):
        (WebCore::LayerWebKitThread::numSublayers):
        * platform/graphics/blackberry/PluginLayerWebKitThread.cpp: Added.
        (WebCore):
        (WebCore::PluginLayerWebKitThread::PluginLayerWebKitThread):
        (WebCore::PluginLayerWebKitThread::~PluginLayerWebKitThread):
        (WebCore::PluginLayerWebKitThread::setPluginView):
        (WebCore::PluginLayerWebKitThread::setHolePunchRect):
        (WebCore::PluginLayerWebKitThread::setNeedsDisplay):
        (WebCore::PluginLayerWebKitThread::updateTextureContentsIfNeeded):
        * platform/graphics/blackberry/PluginLayerWebKitThread.h: Added.
        (WebCore):
        (PluginLayerWebKitThread):
        (WebCore::PluginLayerWebKitThread::create):
        * platform/graphics/blackberry/VideoLayerWebKitThread.cpp: Added.
        (WebCore):
        (WebCore::VideoLayerWebKitThread::VideoLayerWebKitThread):
        (WebCore::VideoLayerWebKitThread::~VideoLayerWebKitThread):
        (WebCore::VideoLayerWebKitThread::setMediaPlayer):
        (WebCore::VideoLayerWebKitThread::setHolePunchRect):
        (WebCore::VideoLayerWebKitThread::setNeedsDisplay):
        (WebCore::VideoLayerWebKitThread::boundsChanged):
        (WebCore::VideoLayerWebKitThread::updateTextureContentsIfNeeded):
        * platform/graphics/blackberry/VideoLayerWebKitThread.h: Added.
        (WebCore):
        (VideoLayerWebKitThread):
        (WebCore::VideoLayerWebKitThread::create):

2012-03-03  Hans Wennborg  <hans@chromium.org>

        Implement Speech JavaScript API
        https://bugs.webkit.org/show_bug.cgi?id=80019

        Reviewed by Adam Barth.

        Add ENABLE_SCRIPTED_SPEECH and runtime flag.

        No functionality yet, so no new tests.

        * Configurations/FeatureDefines.xcconfig:
        * GNUmakefile.am:
        * Target.pri:
        * bindings/generic/RuntimeEnabledFeatures.cpp:
        (WebCore):
        * bindings/generic/RuntimeEnabledFeatures.h:
        (RuntimeEnabledFeatures):
        (WebCore::RuntimeEnabledFeatures::setScriptedSpeechEnabled):
        (WebCore::RuntimeEnabledFeatures::scriptedSpeechEnabled):
        (WebCore::RuntimeEnabledFeatures::webkitSpeechRecognitionEnabled):
        (WebCore::RuntimeEnabledFeatures::webkitSpeechRecognitionErrorEnabled):
        (WebCore::RuntimeEnabledFeatures::webkitSpeechGrammarEnabled):
        (WebCore::RuntimeEnabledFeatures::webkitSpeechGrammarListEnabled):

2012-03-03  Raymond Toy  <rtoy@google.com>

        DelayNode has a fixed one second max delay time
        https://bugs.webkit.org/show_bug.cgi?id=78758

        Change DelayNode to accept an optional parameter to specify the
        maximum delay allowed. If not specified, the default is 1 sec.
        
        Reviewed by Chris Rogers.

        Test: webaudio/delaynode-maxdelay.html
              webaudio/delaynode-maxdelay-expected.txt

        * webaudio/AudioContext.cpp:
        (WebCore::AudioContext::createDelayNode): Allow maxDelayTime
        parameter to specify max delay.
        * webaudio/AudioContext.h: Allow maxDelayTime
        parameter to specify max delay but default to 1.
        (AudioContext):
        * webaudio/AudioContext.idl: createDelayNode takes optional max
        delay time parameter.
        * webaudio/DelayDSPKernel.cpp:
        (WebCore::DelayDSPKernel::DelayDSPKernel): Remove unused
        DefaultMaxDelayTime. Set m_maxDelayTime from processor
        maxDelayTime. 
        * webaudio/DelayNode.cpp:
        (WebCore::DelayNode::DelayNode): Add maxDelayTime parameter. 
        * webaudio/DelayNode.h:
        (WebCore::DelayNode::create): Add maxDelayTime parameter. 
        (DelayNode): Add maxDelayTime parameter. 
        * webaudio/DelayProcessor.cpp:
        (WebCore::DelayProcessor::DelayProcessor): Add maxDelayTime
        parameter.  
        * webaudio/DelayProcessor.h:
        (DelayProcessor): Add maxDelayTime parameter. 
        (WebCore::DelayProcessor::maxDelayTime): New slot to hold
        maxDelayTime. 

2012-03-03  Raymond Toy  <rtoy@google.com>

        Simplified discreteTimeConstantForSampleRate
        https://bugs.webkit.org/show_bug.cgi?id=78051

        Remove hardcoded constant and simplify computation of discrete
        time constant.
        
        Reviewed by Chris Rogers.

        No new tests needed.  Covered by existing AudioParam tests.

        * platform/audio/AudioUtilities.cpp:
        (WebCore::AudioUtilities::discreteTimeConstantForSampleRate):
        Simplify formula.
        * platform/audio/AudioUtilities.h:
        (AudioUtilities): Update function signature.
        * platform/audio/DynamicsCompressorKernel.cpp:
        (WebCore::DynamicsCompressorKernel::DynamicsCompressorKernel):
        cast to float to avoid warnings.
        * webaudio/AudioParamTimeline.cpp:
        (WebCore::AudioParamTimeline::valuesForTimeRangeImpl): cast to
        float to avoid warnings.

2012-03-03  Anders Carlsson  <andersca@apple.com>

        Fix build with newer versions of clang.

        * bindings/objc/DOM.mm:
        (-[DOMNode description]):
        Remove an unused parameter.

        * bridge/objc/objc_instance.mm:
        (ObjcInstance::getClass):
        Use object_getClass instead of accessing isa directly.

        * platform/LocalizedStrings.cpp:
        (WebCore::formatLocalizedString):
        Disable the -Wformat-nonliteral warning around the call to CFStringCreateWithFormatAndArguments.

        * platform/graphics/mac/WebLayer.mm:
        (-[CALayer _descriptionWithPrefix:]):
        Use %p for the CALayer pointer, and use %lu for the number of sublayers.

        * platform/mac/HTMLConverter.mm:
        (-[WebHTMLConverter _addAttachmentForElement:URL:needsParagraph:usePlaceholder:]):
        Cast the NSAttachmentCharacte enum to unichar.

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

        Unreviewed, rolling out r109343.
        http://trac.webkit.org/changeset/109343
        https://bugs.webkit.org/show_bug.cgi?id=80212

        Int32array can't handle values for native nodes because they
        have int64 ids (Requested by loislo1 on #webkit).

        * inspector/front-end/HeapSnapshot.js:
        (WebInspector.HeapSnapshotLoader.prototype._parseNodes):
        (WebInspector.HeapSnapshotLoader.prototype.pushJSONChunk):
        (WebInspector.HeapSnapshot):
        (WebInspector.HeapSnapshot.prototype._init):

2012-03-03  Andreas Kling  <awesomekling@apple.com>

        Free up a bit in RenderObject.
        http://webkit.org/b/80208

        Reviewed by Anders Carlsson.

        Move m_hasMarkupTruncation to RenderBlock, stealing one bit from m_lineHeight.
        This flag is only used by RenderBlock.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::RenderBlock):
        * rendering/RenderBlock.h:
        (WebCore::RenderBlock::setHasMarkupTruncation):
        (WebCore::RenderBlock::hasMarkupTruncation):
        (RenderBlock):
        * rendering/RenderObject.h:
        (RenderObject):
        (WebCore::RenderObject::RenderObjectBitfields::RenderObjectBitfields):
        (RenderObjectBitfields):

2012-03-03  Joe Thomas  <joethomas@motorola.com>

        Implement vw/vh/vmin (viewport sizes) from CSS 3 Values and Units
        https://bugs.webkit.org/show_bug.cgi?id=27160

        The specification related to this implementation is located at http://dev.w3.org/csswg/css3-values/#viewport-relative-lengths.
        vw/vh/vmin are implemented as primitive length units. Added the parsing logic for these new units and creation of primitive values.

        Added new Length types such as ViewportRelativeWidth, ViewportRelativeHeight and ViewportRelativeMin for viewport-relative lengths
        and included the support for fetching the value of these relative length units based on the current viewport size.

        Reviewed by Antti Koivisto.

        Tests: css3/viewport-relative-lengths/css3-viewport-relative-lengths-getStyle.html
               css3/viewport-relative-lengths/css3-viewport-relative-lengths-vh-absolute.html
               css3/viewport-relative-lengths/css3-viewport-relative-lengths-vh.html
               css3/viewport-relative-lengths/css3-viewport-relative-lengths-vmin-absolute.html
               css3/viewport-relative-lengths/css3-viewport-relative-lengths-vmin.html
               css3/viewport-relative-lengths/css3-viewport-relative-lengths-vw-absolute.html
               css3/viewport-relative-lengths/css3-viewport-relative-lengths-vw.html

        * css/CSSComputedStyleDeclaration.cpp: Modified to support viewport relative Length types.
        (WebCore::getPositionOffsetValue): Ditto.
        (WebCore::getBorderRadiusCornerValues): Ditto.
        (WebCore::getBorderRadiusCornerValue): Ditto.
        (WebCore::getBorderRadiusShorthandValue): Ditto.
        (WebCore::lineHeightFromStyle): Ditto.
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue): Ditto.
        * css/CSSGrammar.y: Added vw/vh/vmin support.
        * css/CSSParser.cpp: Parsing of relative units and creation of CSSPrimitiveValue.
        (WebCore::CSSParser::validUnit): Added vw/vh/vmin to the valid units.
        (WebCore::CSSParser::createPrimitiveNumericValue): Added vw/vh/vmin as valid primitive units.
        (WebCore::unitFromString):
        (WebCore::CSSParser::parseValidPrimitive): Creation of CSSPrimitiveValue for vw/vh/vmin.
        (WebCore::CSSParser::detectNumberToken): Parsing the vw/vh/vmin tokens.
        * css/CSSPrimitiveValue.cpp:
        (WebCore::isValidCSSUnitTypeForDoubleConversion): Added support for vw/vh/vmin.
        (WebCore::unitCategory): Ditto.
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        (WebCore::CSSPrimitiveValue::canonicalUnitTypeForCategory): Added support for vw/vh/vmin.
        (WebCore::CSSPrimitiveValue::customCssText): Ditto.
        (WebCore::CSSPrimitiveValue::viewportRelativeLength): Function to create the Length structure for the viewport-relative unit types.
        (WebCore):
        * css/CSSPrimitiveValue.h:
        (WebCore::CSSPrimitiveValue::isViewportRelativeLength): Checks whether the primitive value is ViewportRelative Lengths.
        (CSSPrimitiveValue):
        * css/CSSPrimitiveValue.idl: Added support for vw/vh/vmin.
        * css/CSSStyleApplyProperty.cpp:
        (WebCore::ApplyPropertyLength::applyValue): Applying relative viewport length units to the specific CSS property.
        (WebCore::ApplyPropertyBorderRadius::applyValue): Ditto.
        (WebCore::ApplyPropertyFontSize::applyValue): Ditto.
        (WebCore::ApplyPropertyLineHeight::applyValue): Ditto.
        (WebCore::ApplyPropertyVerticalAlign::applyValue): Ditto.
        * css/CSSStyleSelector.cpp:
        (WebCore::convertToLength): Added support for viewport relative units.
        (WebCore::createGridTrackBreadth): Ditto.
        (WebCore::CSSStyleSelector::mapFillSize): Ditto.
        (WebCore::CSSStyleSelector::mapFillXPosition): Ditto.
        (WebCore::CSSStyleSelector::mapFillYPosition): Ditto.
        * dom/Document.cpp:
        (WebCore::Document::pageSizeAndMarginsInPixels): Modified to support viewport relative Length types.
        (WebCore::Document::viewportSize): New function to fetch the current viewport size.
        (WebCore):
        * dom/Document.h: Ditto.
        (Document):
        * html/HTMLAreaElement.cpp:
        (WebCore::HTMLAreaElement::getRegion): Modified to support viewport relative Length types.
        * platform/Length.h: New LengthTypes such as ViewportRelativeWidth, ViewportRelativeHeight and ViewportRelativeMin added.
        (WebCore::Length::calcValue): Modified to support viewport relative Length types.
        (WebCore::Length::calcMinValue): Ditto.
        (WebCore::Length::calcFloatValue): Ditto.
        (Length):
        (WebCore::Length::isViewportRelative): To check the Length is of type ViewportRelative.
        (WebCore::Length::viewportRelativeLength): To get the relative value.
        * rendering/RenderBR.cpp:
        (WebCore::RenderBR::lineHeight): Modified to support viewport relative Length types.
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::lineHeight): Ditto.
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::reflectionOffset): Ditto.
        (WebCore::RenderBox::paintBoxDecorations): Ditto.
        (WebCore::RenderBox::clipRect): Ditto.
        (WebCore::RenderBox::computeLogicalWidthInRegion): Ditto.
        (WebCore::RenderBox::computeLogicalWidthInRegionUsing): Ditto.
        (WebCore::RenderBox::computeInlineDirectionMargins): Ditto.
        (WebCore::RenderBox::computeLogicalHeightUsing): Ditto.
        (WebCore::RenderBox::computePercentageLogicalHeight): Ditto.
        (WebCore::RenderBox::computeReplacedLogicalHeightUsing): Ditto.
        (WebCore::RenderBox::computeBlockDirectionMargins): Ditto.
        (WebCore::RenderBox::computePositionedLogicalWidthUsing): Ditto.
        (WebCore::RenderBox::computePositionedLogicalHeightUsing): Ditto.
        (WebCore::RenderBox::computePositionedLogicalWidthReplaced): Ditto.
        (WebCore::RenderBox::computePositionedLogicalHeightReplaced): Ditto.
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::relativePositionOffsetX): Ditto.
        (WebCore::RenderBoxModelObject::relativePositionOffsetY): Ditto.
        (WebCore::RenderBoxModelObject::paddingTop): Ditto.
        (WebCore::RenderBoxModelObject::paddingBottom): Ditto.
        (WebCore::RenderBoxModelObject::paddingLeft): Ditto.
        (WebCore::RenderBoxModelObject::paddingRight): Ditto.
        (WebCore::RenderBoxModelObject::paddingBefore): Ditto.
        (WebCore::RenderBoxModelObject::paddingAfter): Ditto.
        (WebCore::RenderBoxModelObject::paddingStart): Ditto.
        (WebCore::RenderBoxModelObject::paddingEnd): Ditto.
        (WebCore::RenderBoxModelObject::getBackgroundRoundedRect): Ditto.
        (WebCore::RenderBoxModelObject::calculateFillTileSize): Ditto.
        (WebCore::RenderBoxModelObject::calculateBackgroundImageGeometry): Ditto.
        (WebCore::computeBorderImageSide): Ditto.
        (WebCore::RenderBoxModelObject::paintNinePieceImage): Ditto.
        (WebCore::RenderBoxModelObject::paintBorder): Ditto.
        (WebCore::RenderBoxModelObject::paintBoxShadow): Ditto.
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::preferredMainAxisContentExtentForChild): Ditto.
        (WebCore::RenderFlexibleBox::computeMainAxisPreferredSizes): Ditto.
        (WebCore::RenderFlexibleBox::runFreeSpaceAllocationAlgorithm): Ditto.
        * rendering/RenderInline.cpp:
        (WebCore::computeMargin): Ditto.
        (WebCore::RenderInline::lineHeight): Ditto.
        * rendering/RenderMenuList.cpp:
        (WebCore::RenderMenuList::updateOptionsWidth): Ditto.
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::repaintAfterLayoutIfNeeded): Ditto.
        * rendering/RenderObject.h:
        (WebCore::RenderObject::viewportSize): New function to fetch the current viewport size.
        (RenderObject):
        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::paint): Modified to support viewport relative Length types.
        * rendering/RenderScrollbarPart.cpp:
        (WebCore::calcScrollbarThicknessUsing): Ditto.
        (WebCore::RenderScrollbarPart::computeScrollbarWidth): Ditto.
        (WebCore::RenderScrollbarPart::computeScrollbarHeight): Ditto.
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::computeLogicalWidth): Ditto.
        (WebCore::RenderTable::convertStyleLogicalWidthToComputedWidth): Ditto.
        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::logicalHeightForRowSizing): Ditto.
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::calcRowLogicalHeight): Ditto.
        * rendering/RenderText.h:
        (WebCore::RenderText::marginLeft): Ditto.
        (WebCore::RenderText::marginRight): Ditto.
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::paintMenuListButtonGradients): Ditto.
        * rendering/RenderWidget.cpp:
        (WebCore::RenderWidget::paint): Ditto.
        * rendering/RootInlineBox.cpp:
        (WebCore::RootInlineBox::verticalPositionForBox): Ditto.
        * rendering/style/RenderStyle.cpp:
        (WebCore::calcRadiiFor): Ditto.
        (WebCore::RenderStyle::getRoundedBorderFor): Ditto.
        * rendering/style/RenderStyle.h: Ditto.
        * rendering/svg/RenderSVGRoot.cpp:
        (WebCore::resolveLengthAttributeForSVG): Ditto.
        (WebCore::RenderSVGRoot::computeReplacedLogicalWidth): Ditto.
        (WebCore::RenderSVGRoot::computeReplacedLogicalHeight): Ditto.

2012-03-02  Pablo Flouret  <pablof@motorola.com>

        Editor's default paragraph separator is not reset when a frame's document is changed
        https://bugs.webkit.org/show_bug.cgi?id=80065

        Reviewed by Ryosuke Niwa.

        Test: editing/execCommand/reset-values-after-navigation.html

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

2012-03-02  Alexey Proskuryakov  <ap@apple.com>

        Have a copy of plug-in sandboxing API header in WebCore
        https://bugs.webkit.org/show_bug.cgi?id=80185
        <rdar://problem/8242128>

        Reviewed by Anders Carlsson.

        * plugins/npapi-sandbox.h: Added.

        * WebCore.xcodeproj/project.pbxproj: Added as unused file.

2012-03-02  Emil A Eklund  <eae@chromium.org>

        Revert borders to integers for subpixel layout
        https://bugs.webkit.org/show_bug.cgi?id=80175

        Reviewed by Eric Seidel.

        Change border representation and calculation back to integers to ensure
        that borders given the same width are rendered with the same actual width.

        This will also avoid unnecessary type conversions when we switch over
        to subpixel precision.

        No new tests.

        * rendering/LayoutTypes.h:
        (WebCore::pixelSnappedIntRect):
        (WebCore):
        * rendering/RenderBoxModelObject.h:
        (WebCore::RenderBoxModelObject::borderTop):
        (WebCore::RenderBoxModelObject::borderBottom):
        (WebCore::RenderBoxModelObject::borderLeft):
        (WebCore::RenderBoxModelObject::borderRight):
        (WebCore::RenderBoxModelObject::borderBefore):
        (WebCore::RenderBoxModelObject::borderAfter):
        (WebCore::RenderBoxModelObject::borderStart):
        (WebCore::RenderBoxModelObject::borderEnd):
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::convertStyleLogicalWidthToComputedWidth):
        (WebCore::RenderTable::calcBorderStart):
        (WebCore::RenderTable::calcBorderEnd):
        (WebCore::RenderTable::borderBefore):
        (WebCore::RenderTable::borderAfter):
        (WebCore::RenderTable::outerBorderBefore):
        (WebCore::RenderTable::outerBorderAfter):
        (WebCore::RenderTable::outerBorderStart):
        (WebCore::RenderTable::outerBorderEnd):
        * rendering/RenderTable.h:
        (WebCore::RenderTable::borderStart):
        (WebCore::RenderTable::borderEnd):
        (RenderTable):
        (WebCore::RenderTable::borderLeft):
        (WebCore::RenderTable::borderRight):
        (WebCore::RenderTable::borderTop):
        (WebCore::RenderTable::borderBottom):
        (WebCore::RenderTable::outerBorderLeft):
        (WebCore::RenderTable::outerBorderRight):
        (WebCore::RenderTable::outerBorderTop):
        (WebCore::RenderTable::outerBorderBottom):
        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::clippedOverflowRectForRepaint):
        (WebCore::RenderTableCell::borderLeft):
        (WebCore::RenderTableCell::borderRight):
        (WebCore::RenderTableCell::borderTop):
        (WebCore::RenderTableCell::borderBottom):
        (WebCore::RenderTableCell::borderStart):
        (WebCore::RenderTableCell::borderEnd):
        (WebCore::RenderTableCell::borderBefore):
        (WebCore::RenderTableCell::borderAfter):
        (WebCore::RenderTableCell::borderHalfLeft):
        (WebCore::RenderTableCell::borderHalfRight):
        (WebCore::RenderTableCell::borderHalfTop):
        (WebCore::RenderTableCell::borderHalfBottom):
        (WebCore::RenderTableCell::borderHalfStart):
        (WebCore::RenderTableCell::borderHalfEnd):
        (WebCore::RenderTableCell::borderHalfBefore):
        (WebCore::RenderTableCell::borderHalfAfter):
        (WebCore::RenderTableCell::paintCollapsedBorders):
        * rendering/RenderTableCell.h:
        (RenderTableCell):

2012-03-01  Eric Seidel  <eric@webkit.org>

        Chrome 18 fails html5test.com XHR Blob response test
        https://bugs.webkit.org/show_bug.cgi?id=76760

        Reviewed by Adam Barth.

        Most of the code was already there, this just fixes the FIXME
        which was causing this feature not to work.  Chromium already
        had this #ifdef enabled, but other ports (at least Mac) do not.

        Test: fast/files/xhr-response-blob.html

        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::didFinishLoading):

2012-03-02  Kentaro Hara  <haraken@chromium.org>

        Revert Worker-related APIs from DOMWindowWorker.idl back to DOMWindow.idl
        https://bugs.webkit.org/show_bug.cgi?id=80151

        Reviewed by Adam Barth.

        Based on the discussion on webkit-dev@
        (http://markmail.org/message/kagvswmah67zmrry#query:+page:1+mid:h34vzbiu5suub3ld+state:results),
        this patch reverts Worker-related APIs from DOMWindowWorker.idl back to DOMWindow.idl.

        No tests. No change in behavior.

        * CMakeLists.txt:
        * DerivedSources.make:
        * DerivedSources.pri:
        * GNUmakefile.list.am:
        * WebCore.gypi:
        * page/DOMWindow.idl:
        * workers/DOMWindowWorker.idl: Removed.

2012-03-02  Kentaro Hara  <haraken@chromium.org>

        Revert HTML-related APIs from DOMWindowHTML.idl back to DOMWindow.idl
        https://bugs.webkit.org/show_bug.cgi?id=80140

        Reviewed by Adam Barth.

        Based on the discussion on webkit-dev@
        (http://markmail.org/message/kagvswmah67zmrry#query:+page:1+mid:h34vzbiu5suub3ld+state:results),
        we should revert HTML-related APIs from DOMWindowHTML.idl back to DOMWindow.idl.

        No tests. No change in behavior.

        * CMakeLists.txt:
        * DerivedSources.make:
        * DerivedSources.pri:
        * GNUmakefile.list.am:
        * WebCore.gypi:
        * WebCore.xcodeproj/project.pbxproj:
        * html/DOMWindowHTML.idl: Removed.
        * page/DOMWindow.idl:

2012-03-02  Kentaro Hara  <haraken@chromium.org>

        Revert XML-related APIs from DOMWindowXML.idl back to DOMWindow.idl
        https://bugs.webkit.org/show_bug.cgi?id=80148

        Reviewed by Adam Barth.

        Based on the discussion on webkit-dev@
        (http://markmail.org/message/kagvswmah67zmrry#query:+page:1+mid:h34vzbiu5suub3ld+state:results),
        this patch reverts XML-related APIs from DOMWindowXML.idl back to DOMWindow.idl.

        No tests. No change in behavior.

        * CMakeLists.txt:
        * DerivedSources.make:
        * DerivedSources.pri:
        * GNUmakefile.list.am:
        * WebCore.gypi:
        * WebCore.xcodeproj/project.pbxproj:
        * page/DOMWindow.idl:
        * xml/DOMWindowXML.idl: Removed.

2012-03-02  Caio Marcelo de Oliveira Filho  <caio.oliveira@openbossa.org>

        Implement NamedNodeMap::setNamedItem() in terms of Element::setAttributeNode() instead of the other way round
        https://bugs.webkit.org/show_bug.cgi?id=80188

        Reviewed by Ryosuke Niwa.

        Using setNamedItem() in setAttributeNode() implementation made us do unnecessary
        checks like whether the element existed or whether the given node was an
        attribute. So now setAttributeNode() do less work.

        No new tests were added, functionality should be unchanged.

        * dom/Element.cpp:
        (WebCore::Element::setAttributeNode):
        (WebCore::Element::setAttributeNodeNS):
        * dom/Element.h:
        (Element):
        (WebCore::Element::attributes): We got rid of ensureUpdatedAttributes(), next in
        line will be updatedAttributes().
        * dom/NamedNodeMap.cpp:
        (WebCore::NamedNodeMap::setNamedItem):

2012-03-02  SravanKumar Sandela  <ssandela@innominds.com>

        Layout issue with fieldset legend element
        https://bugs.webkit.org/show_bug.cgi?id=78684

        Reviewed by Dirk Pranke.

        The clipping logic for legend element was incorrect and now it has been corrected by taking correct offset in to consideration. 

        Test: fast/forms/fieldset-legend-padding-unclipped-fieldset-border.html

        * rendering/RenderFieldset.cpp:
        (WebCore::RenderFieldset::paintBoxDecorations):

2012-03-02  Erik Arvidsson  <arv@chromium.org>

        [V8] Bindings for node always check if they are a Document.
        https://bugs.webkit.org/show_bug.cgi?id=79947

        Reviewed by Adam Barth.

        This changes the generated bindings code to only generate the Document code for the Document wrappers.

        No new tests. Covered by existing tests.

        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateToV8Converters):
        * bindings/scripts/test/V8/V8Float64Array.cpp:
        (WebCore::V8Float64Array::wrapSlow):
        * bindings/scripts/test/V8/V8TestActiveDOMObject.cpp:
        (WebCore::V8TestActiveDOMObject::wrapSlow):
        * bindings/scripts/test/V8/V8TestCustomNamedGetter.cpp:
        (WebCore::V8TestCustomNamedGetter::wrapSlow):
        * bindings/scripts/test/V8/V8TestEventConstructor.cpp:
        (WebCore::V8TestEventConstructor::wrapSlow):
        * bindings/scripts/test/V8/V8TestEventTarget.cpp:
        (WebCore::V8TestEventTarget::wrapSlow):
        * bindings/scripts/test/V8/V8TestInterface.cpp:
        (WebCore::V8TestInterface::wrapSlow):
        * bindings/scripts/test/V8/V8TestMediaQueryListListener.cpp:
        (WebCore::V8TestMediaQueryListListener::wrapSlow):
        * bindings/scripts/test/V8/V8TestNamedConstructor.cpp:
        (WebCore::V8TestNamedConstructor::wrapSlow):
        * bindings/scripts/test/V8/V8TestObj.cpp:
        (WebCore::V8TestObj::wrapSlow):
        * bindings/scripts/test/V8/V8TestSerializedScriptValueInterface.cpp:
        (WebCore::V8TestSerializedScriptValueInterface::wrapSlow):

2012-03-02  Igor Oliveira  <igor.o@sisa.samsung.com>

        animation-timing-function falls back to ease when overriding animation-name
        https://bugs.webkit.org/show_bug.cgi?id=71623

        In this patch the animation name needs to be the first value declared, if
        a different value is found, we do not check for the animation name again.  

        Reviewed by Dean Jackson.

        Test: animations/animation-shorthand-overriding.html

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

2012-03-02  Martin Robinson  <mrobinson@igalia.com>

        [GTK] [AC] Connect WebGL to the TextureMapperGL code
        https://bugs.webkit.org/show_bug.cgi?id=78968

        Reviewed by Gustavo Noronha Silva.

        No new tests. This is covered by existing accelerated compositing and
        WebGL tests.

        Rely on the shared version of GL acquisition from GLContext. This reduces
        a lot of code and now allows us to connect WebGL into the accelerated compositing
        rendering path.

        * GNUmakefile.list.am: GLContext should be included for all X11 builds now.
        There are no longer GTK+ specific versions of GraphicsContext3D.
        * platform/graphics/GraphicsContext3D.h: Add a default argument for
        resolveMultisamplingIfNecessary. This will resolve the entire texture.
        * platform/graphics/cairo/GraphicsContext3DCairo.cpp: GraphicsContext3D is
        now responsible for creating GraphicsContext3DPrivate in the constructor.
        (WebCore::GraphicsContext3D::platformLayer): Now return m_private.
        * platform/graphics/cairo/GraphicsContext3DPrivate.cpp: Added.
        * platform/graphics/cairo/GraphicsContext3DPrivate.h: Renamed from Source/WebCore/platform/graphics/glx/GraphicsContext3DPrivate.h.
        * platform/graphics/glx/GraphicsContext3DPrivate.cpp: Removed.
        * platform/graphics/opengl/GraphicsContext3DOpenGL.cpp:
        (WebCore::GraphicsContext3D::resolveMultisamplingIfNecessary): Properly
        handle the default argument.
        * platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:
        (WebCore::GraphicsContext3D::prepareTexture): Use the new default argument now.
        (WebCore::GraphicsContext3D::readRenderingResults): Ditto.

2012-02-18  Martin Robinson  <mrobinson@igalia.com>

        [GTK] [AC] Generalize WindowContextGL
        https://bugs.webkit.org/show_bug.cgi?id=78969

        Reviewed by Gustavo Noronha Silva.

        No new tests. This should not change functionality.

        * GNUmakefile.list.am: Added new files to source list.
        * platform/graphics/cairo/GLContext.h: Added. An abstraction for all GL contexts.
        * platform/graphics/glx/GLContextGLX.cpp: Added. This file is composed of very little
        new code, as the logic for instantiating offscreen GL contexts is copied from
        GraphicsContext3DPrivate. The code duplication will be removed in a followup patch.
        (WebCore::GLContext::platformContext):
        * platform/graphics/gtk/GLContextGtk.cpp: Added. This includes some helper factories
        for creating and caching GL contexts for GTK+ widgets.

2012-03-02  W. James MacLean  <wjmaclean@chromium.org>

        [chromium] Remove TRACE_EVENT from CCQuadCuller::cullOccludedQuads.
        https://bugs.webkit.org/show_bug.cgi?id=80174

        Reviewed by James Robinson.

        Covered by existing chromium unit tests.

        Firing TRACE_EVENT once per draw quad is overwhelming.

        * platform/graphics/chromium/cc/CCQuadCuller.cpp:
        (WebCore::CCQuadCuller::cullOccludedQuads):

2012-03-02  Erik Arvidsson  <arv@chromium.org>

        [V8] Make inline event attributes use evt for SVG and event otherwise
        https://bugs.webkit.org/show_bug.cgi?id=80167

        Reviewed by Ojan Vafai.

        Test: fast/dom/inline-event-attributes-event-param-name.html

        * bindings/v8/V8LazyEventListener.cpp:
        (WebCore::V8LazyEventListener::prepareListenerObject):

2012-03-02  Gavin Peters  <gavinp@chromium.org>

        Sync PageCache debugging with PageCache behaviour
        https://bugs.webkit.org/show_bug.cgi?id=79943

        Sync up the debug printing code in PageCache with the actual logic,
        and clean up the debug printing at the same time.

        Reviewed by Brady Eidson.

        No new tests, as this is a refactor of debug only code.

        * history/PageCache.cpp:
        (WebCore):
        (WebCore::logCanCacheFrameDecision):
        (WebCore::logCanCachePageDecision):

2012-03-02  Maciej Stachowiak  <mjs@apple.com>

        REGRESSION(r97353): Crash when accessing location or history properties inside a navigated window
        https://bugs.webkit.org/show_bug.cgi?id=80133
        <rdar://problem/10432233>
        
        Reviewed by Antti Koivisto.

        Test: fast/dom/Window/navigated-window-properties.html

        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore): Remove custom getters for window.location and window.history; they
        were unnecessary and did the wrong thing when DOMWindow returned null values 
        for these.
        * page/DOMWindow.idl: ditto
        * bindings/js/JSDOMBinding.cpp:
        (WebCore::reportException): Remove assert about null values and update comment,
        since this is now an expected state for navigated inner windows.

2012-03-02  Ryosuke Niwa  <rniwa@webkit.org>

        REGRESSION(r74971): Can't select a line of RTL text on Facebook
        https://bugs.webkit.org/show_bug.cgi?id=59435

        Reviewed by Eric Seidel.

        The bug was caused by inline text boxes created by BRs being placed at the end of the line
        according to the block's direction regardless of its unicode bidi-level. e.g. if we have
        <div dir="rtl"><span dir="ltr">hello<br>world</span></div>
        the inline box generated by the br has the bidi-level of 2 like the rest of text in the span.
        This inline text box gives an illusion of having text on the left of "hello" to hit testing
        and editing code and causes all sorts of problems.

        Fixed the bug by replacing calls to nextLeafChild and prevLeafChild by newly introduced
        nextLeafChildIgnoringLineBreak and prevLeafChildIgnoringLineBreak. These two functions will
        return 0 when they hit the end of a line or inline text box that's a line break. In effect,
        hit testing and editing code can ignore inline boxes generated by br's.

        In the long term, we should move these two functions into RenderedPosition along with the rest
        of code that converts a Position and an inline box, offset pair.

        Test: editing/selection/select-line-break-with-opposite-directionality.html

        * dom/Position.cpp:
        (WebCore::Position::getInlineBoxAndOffset):
        * editing/RenderedPosition.cpp:
        (WebCore::RenderedPosition::prevLeafChild):
        (WebCore::RenderedPosition::nextLeafChild):
        * rendering/InlineBox.cpp:
        (WebCore::InlineBox::nextLeafChildIgnoringLineBreak):
        (WebCore::InlineBox::prevLeafChildIgnoringLineBreak):
        * rendering/InlineBox.h:
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::positionForPointWithInlineChildren):
        * rendering/RenderText.cpp:
        (WebCore::lineDirectionPointFitsInBox): If we're on the left of a RTL line, we should stay at
        upstream position since we're at the end of a line.
        (WebCore::createVisiblePositionAfterAdjustingOffsetForBiDi): Merge the two special cases into
        the general loop as the comment suggests. Skip an inline text box for a line break at the left
        edge when there are more line boxes on the line.
        (WebCore::RenderText::positionForPoint):
        * rendering/RootInlineBox.cpp:
        (WebCore::RootInlineBox::closestLeafChildForLogicalLeftPosition): Ignore line boxes created for
        line boxes when there are other boxes on the line.

2012-03-02  Adam Treat  <atreat@rim.com>

        https://bugs.webkit.org/show_bug.cgi?id=80161
        PR: 141157

        BlackBerryPlatformScreen.h API has been updated.  Reflect those
        changes in our usage.

        Reviewed by Antonio Gomes.
        Internally reviewed by Jakob Petsovits

        * platform/blackberry/PlatformScreenBlackBerry.cpp:
        (WebCore::screenAvailableRect):
        (WebCore::screenRect):

2012-03-02  Julien Chaffraix  <jchaffraix@webkit.org>

        Move the 'overflow' event dispatching logic out of RenderLayer
        https://bugs.webkit.org/show_bug.cgi?id=80090

        Unreviewed build fix.

        * rendering/RenderBlock.cpp:
        (OverflowEventDispatcher): Removed the unused function.

2012-03-02  Julien Chaffraix  <jchaffraix@webkit.org>

        Move the 'overflow' event dispatching logic out of RenderLayer
        https://bugs.webkit.org/show_bug.cgi?id=80090

        Reviewed by Simon Fraser.

        Test: fast/events/overflow-events-writing-mode.html

        This moves the 'overflow' event dispatch from RenderLayer to an helper class
        OverflowEventDispatcher. For now, the class lives in RenderBlock as it matches
        the existing code but it may be moved later to its own class as FrameView could
        benefit from it too or if we need to support 'overflow' events on RenderBoxes.

        * rendering/RenderBlock.cpp:
        (WebCore):
        (OverflowEventDispatcher):
        (WebCore::OverflowEventDispatcher::OverflowEventDispatcher):
        (WebCore::OverflowEventDispatcher::~OverflowEventDispatcher):
        (WebCore::OverflowEventDispatcher::computeOverflowStatus):
        RAII dispatcher class that stores the information before layout and compare
        them after to dispatch the right information.

        (WebCore::RenderBlock::layout): Added an instance of OverflowEventDispatcher.

        * rendering/RenderBox.h:
        (WebCore::RenderBox::hasHorizontalLayoutOverflow):
        (WebCore::RenderBox::hasVerticalLayoutOverflow):
        Helper method to know if we have an horizontal / vertical layout overflow.

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::RenderLayer):
        (WebCore::RenderLayer::updateScrollInfoAfterLayout):
        * rendering/RenderLayer.h:
        Removed the scroll tracking logic as we don't need it anymore. This removes
        3 booleans from RenderLayer.

2012-03-02  Caio Marcelo de Oliveira Filho  <caio.oliveira@openbossa.org>

        Create a method in Element to compare attributes with other Element
        https://bugs.webkit.org/show_bug.cgi?id=80169

        Reviewed by Ryosuke Niwa.

        Avoid manually peeking at attribute storage to get this information. This
        simplify the callsites. The actual implementation of comparison was moved to
        ElementAttributeData. The mapsEquivalent() function still exists for the sake
        of DocumentType nodes.

        * dom/Element.cpp:
        (WebCore::Element::hasEquivalentAttributes):
        (WebCore):
        * dom/Element.h:
        (Element):
        * dom/ElementAttributeData.cpp:
        (WebCore::ElementAttributeData::isEquivalent):
        (WebCore):
        * dom/ElementAttributeData.h:
        (ElementAttributeData):
        * dom/NamedNodeMap.cpp:
        (WebCore::NamedNodeMap::mapsEquivalent):
        * dom/Node.cpp:
        (WebCore::Node::isEqualNode):
        * editing/htmlediting.cpp:
        (WebCore::areIdenticalElements): Use Element::hasTagName() instead of matching
        directly to make code a bit clearer.

2012-03-02  Zan Dobersek  <zandobersek@gmail.com>

        [GTK] Smooth scrolling support
        https://bugs.webkit.org/show_bug.cgi?id=16123

        Reviewed by Martin Robinson.

        No new tests - no new functionality.

        Add the ScrollAnimatorNone class to compilation and enable
        the smooth scrolling feature by default at compilation time.

        * GNUmakefile.am:
        * GNUmakefile.list.am:

2012-03-02  Philippe Normand  <pnormand@igalia.com>

        [GStreamer] media/media-can-play-flac-audio.html fails
        https://bugs.webkit.org/show_bug.cgi?id=80124

        Reviewed by Martin Robinson.

        Handle audio/x-flac in the mimeTypeCache() function so that we
        advertize both audio/flac and audio/x-flac.

        No new tests, this is covered already by media/media-can-play-flac-audio.html.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:

2012-03-02  Pavel Podivilov  <podivilov@chromium.org>

        Web Inspector: fix fronted compilation.
        https://bugs.webkit.org/show_bug.cgi?id=80154

        Reviewed by Yury Semikhatsky.

        * inspector/front-end/DebuggerModel.js:
        (WebInspector.DebuggerModel.prototype.scriptForSourceID):
        * inspector/front-end/DebuggerPresentationModel.js:
        (WebInspector.DebuggerPresentationModel.Linkifier.prototype.linkifyLocation):
        * inspector/front-end/ScriptsSearchScope.js:
        (WebInspector.ScriptsSearchResultsPane.prototype.createAnchor):

2012-03-02  Kaustubh Atrawalkar  <kaustubh@motorola.com>

        Rename DOMURL to URL in the bindings
        https://bugs.webkit.org/show_bug.cgi?id=78214

        Reviewed by Kentaro Hara.

        No new tests. Interface name change.

        * html/DOMURL.idl: Added InterfaceName attribute to DOMURL.

2012-03-02  Roland Steiner  <rolandsteiner@chromium.org>

        Add :scope pseudo-class
        https://bugs.webkit.org/show_bug.cgi?id=79077

        Add :scope pseudo class name & pseudoId
        Add selector check for the new pseudo-class

        Reviewed by Antti Koivisto.

        Test: fast/css/style-scoped/scope-pseudo.html

        * css/CSSSelector.cpp:
        (WebCore::CSSSelector::pseudoId):
        (WebCore::nameToPseudoTypeMap):
        (WebCore::CSSSelector::extractPseudoType):
        * css/CSSSelector.h:
        * css/SelectorChecker.cpp:
        (WebCore::SelectorChecker::checkOneSelector):

2012-03-01  Caio Marcelo de Oliveira Filho  <caio.oliveira@openbossa.org>

        Make parser code not depend on NamedNodeMap
        https://bugs.webkit.org/show_bug.cgi?id=79963

        Reviewed by Adam Barth.

        Instead of creating Element-less NamedNodeMaps, the parsing code now creates
        AttributeVectors, that are used to fill Element via the parserSetAttributes()
        method. This allows us to remove even more methods from the NamedNodeMap.

        The AttributeVector class contains convenience methods that take the attribute's
        QualifiedName as parameter. This class is also used inside ElementAttributeData.

        * dom/Attr.h:
        (Attr):
        * dom/Element.cpp:
        (WebCore::Element::getAttribute):
        (WebCore::Element::parserSetAttributes): Now we have to create the attribute
        storage, and fill it (by Vector::swap()) with the passed attributes. Also use an
        early return to reduce indentation.
        (WebCore::Element::insertedIntoDocument):
        (WebCore::Element::removedFromDocument):
        (WebCore::Element::getURLAttribute):
        (WebCore::Element::getNonEmptyURLAttribute):
        * dom/Element.h:
        (Element):
        (WebCore::Element::fastHasAttribute):
        (WebCore::Element::fastGetAttribute):
        (WebCore::Element::hasAttributesWithoutUpdate):
        (WebCore::Element::attributeItem):
        (WebCore::Element::getAttributeItem):
        * dom/ElementAttributeData.cpp:
        (WebCore::AttributeVector::removeAttribute):
        (WebCore):
        * dom/ElementAttributeData.h:
        (AttributeVector):
        (WebCore::AttributeVector::create):
        (WebCore::AttributeVector::attributeItem):
        (WebCore::AttributeVector::AttributeVector):
        (WebCore):
        (WebCore::AttributeVector::getAttributeItem):
        (WebCore::AttributeVector::getAttributeItemIndex):
        (WebCore::AttributeVector::insertAttribute): Boolean parameter isn't necessary
        since all the callers used 'false', indicating that duplicates were not allowed.
        (WebCore::ElementAttributeData::attributeItem):
        (WebCore::ElementAttributeData::getAttributeItem):
        (WebCore::ElementAttributeData::getAttributeItemIndex):
        (ElementAttributeData):
        * dom/NamedNodeMap.cpp:
        (WebCore::NamedNodeMap::getNamedItem):
        (WebCore::NamedNodeMap::setNamedItem):
        (WebCore::NamedNodeMap::removeNamedItem):
        (WebCore::NamedNodeMap::mapsEquivalent):
        * dom/NamedNodeMap.h:
        * html/parser/HTMLConstructionSite.cpp:
        (WebCore::HTMLConstructionSite::insertHTMLHtmlStartTagBeforeHTML):
        (WebCore::HTMLConstructionSite::mergeAttributesFromTokenIntoElement):
        (WebCore::HTMLConstructionSite::insertScriptElement):
        (WebCore::HTMLConstructionSite::createElement):
        (WebCore::HTMLConstructionSite::createHTMLElement):
        (WebCore):
        * html/parser/HTMLToken.h:
        (WebCore::AtomicHTMLToken::AtomicHTMLToken):
        * html/parser/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::processFakeStartTag):
        (WebCore::HTMLTreeBuilder::attributesForIsindexInput):
        (WebCore):
        * html/parser/HTMLTreeBuilder.h:
        * html/parser/TextDocumentParser.cpp:
        (WebCore::TextDocumentParser::insertFakePreElement):
        * xml/parser/MarkupTokenBase.h:
        (WebCore::AtomicMarkupTokenBase::AtomicMarkupTokenBase):
        (WebCore::AtomicMarkupTokenBase::attributes):
        (WebCore::AtomicMarkupTokenBase::takeAttributes):
        (AtomicMarkupTokenBase):
        (WebCore::::initializeAttributes):
        * xml/parser/XMLToken.h:
        (WebCore::AtomicXMLToken::AtomicXMLToken):
        * xml/parser/XMLTreeBuilder.cpp:
        (WebCore::XMLTreeBuilder::processNamespaces):
        (WebCore::XMLTreeBuilder::processAttributes):

2012-03-02  Yury Semikhatsky  <yurys@chromium.org>

        Web Inspector: assertion failure in JSMainThreadExecState::instrumentedCall
        https://bugs.webkit.org/show_bug.cgi?id=80152

        Extracted common code of JS call instrumentation into instrumentFunctionCall method
        and call it directly where the instrumentation is needed instead of calling
        JSMainThreadExecState::instrumentedCall which works on the main thread only.

        Reviewed by Pavel Feldman.

        * bindings/js/JSCallbackData.cpp:
        (WebCore::JSCallbackData::invokeCallback):
        * bindings/js/JSEventListener.cpp:
        (WebCore::JSEventListener::handleEvent):
        * bindings/js/JSMainThreadExecState.h:
        (WebCore::JSMainThreadExecState::instrumentFunctionCall):

2012-03-02  Yoshifumi Inoue  <yosin@chromium.org>

        [Forms] Make order of attribute/method in HTMLTextAreaElement.idl as same as specification
        https://bugs.webkit.org/show_bug.cgi?id=80101

        Reviewed by Kent Tamura.

        No new tests. No behavior changes.

        * html/HTMLTextAreaElement.idl: Reorder attribute/method position.

2012-03-02  Patrick Gansterer  <paroga@webkit.org>

        Build fix after r109538.

        * CMakeLists.txt:
        * Modules/websockets/WebSocketDeflater.cpp:

2012-03-02  Roland Steiner  <rolandsteiner@chromium.org>

        Scoped stylesheets don't appear to work in Shadow DOM
        https://bugs.webkit.org/show_bug.cgi?id=79549

        Make the scope stack in CSSStyleSelector use ContainerNode* instead of Element*.
        Adapt using sites accordingly.
        Push the ShadowRoot to the scope stack in the same way that elements are pushed.
        Fix an issue with removedFromDocument() on destruction.

        Reviewed by Antti Koivisto.

        Test: fast/css/style-scoped/style-scoped-in-shadow.html

        * css/CSSStyleSelector.cpp:
        (RuleSet):
        (WebCore::CSSStyleSelector::CSSStyleSelector):
        (WebCore::CSSStyleSelector::determineScope):
        (WebCore::CSSStyleSelector::ruleSetForScope):
        (WebCore::CSSStyleSelector::appendAuthorStylesheets):
        (WebCore::CSSStyleSelector::setupScopeStack):
        (WebCore::CSSStyleSelector::pushScope):
        (WebCore):
        (WebCore::CSSStyleSelector::popScope):
        (WebCore::CSSStyleSelector::pushParentElement):
        (WebCore::CSSStyleSelector::popParentElement):
        (WebCore::CSSStyleSelector::pushParentShadowRoot):
        (WebCore::CSSStyleSelector::popParentShadowRoot):
        (WebCore::CSSStyleSelector::matchScopedAuthorRules):
        (WebCore::CSSStyleSelector::collectMatchingRulesForList):
        * css/CSSStyleSelector.h:
        (CSSStyleSelector):
        (WebCore::CSSStyleSelector::pushScope):
        (WebCore::CSSStyleSelector::popScope):
        (WebCore::CSSStyleSelector::MatchOptions::MatchOptions):
        (MatchOptions):
        (WebCore::CSSStyleSelector::scopeStackIsConsistent):
        (WebCore::CSSStyleSelector::ScopeStackFrame::ScopeStackFrame):
        (ScopeStackFrame):
        * css/SelectorChecker.h:
        (SelectorCheckingContext):
        * dom/Element.cpp:
        (WebCore::StyleSelectorParentPusher::push):
        (WebCore::StyleSelectorParentPusher::~StyleSelectorParentPusher):
        (WebCore::Element::beginParsingChildren):
        (WebCore::Element::finishParsingChildren):
        * dom/ShadowRoot.cpp:
        (WebCore::ShadowRoot::attach):
        (WebCore):
        * dom/ShadowRoot.h:
        (ShadowRoot):
        * dom/ShadowTree.cpp:
        (WebCore::ShadowTree::recalcShadowTreeStyle):
        * html/HTMLStyleElement.cpp:
        (WebCore::HTMLStyleElement::removedFromDocument):

2012-03-02  Yoshifumi Inoue  <yosin@chromium.org>

        [Forms] Make order of attribute/method in HTMLSelectElement.idl as same as specification
        https://bugs.webkit.org/show_bug.cgi?id=80097

        Reviewed by Kent Tamura.

        No new tests. No behavior changes.

        * html/HTMLSelectElement.idl: Reorder attribute/method position.

2012-03-02  Pavel Podivilov  <podivilov@chromium.org>

        Web Inspector: limit RawSourceCode usages to DebuggerPresentationModel.
        https://bugs.webkit.org/show_bug.cgi?id=80146

        Reviewed by Vsevolod Vlasov.

        * inspector/front-end/DebuggerPresentationModel.js:
        (WebInspector.DebuggerPresentationModel.prototype.uiLocationToRawLocation):
        (WebInspector.DebuggerPresentationModel.Linkifier.prototype.linkifyLocation):
        (WebInspector.DebuggerPresentationModel.Linkifier.prototype.linkifyRawLocation):
        * inspector/front-end/ObjectPopoverHelper.js:
        (WebInspector.ObjectPopoverHelper.prototype._showObjectPopover.showObjectPopover.):
        (WebInspector.ObjectPopoverHelper.prototype._showObjectPopover):
        * inspector/front-end/ScriptsSearchScope.js:
        (WebInspector.ScriptsSearchResultsPane.prototype.createAnchor):

2012-03-02  Pavel Podivilov  <podivilov@chromium.org>

        Web Inspector: update execution line using LiveLocation.
        https://bugs.webkit.org/show_bug.cgi?id=80143

        Reviewed by Vsevolod Vlasov.

        * inspector/front-end/DebuggerPresentationModel.js:
        (WebInspector.DebuggerPresentationModel.prototype._uiSourceCodeListChanged):
        (WebInspector.DebuggerPresentationModel.prototype._debuggerResumed):
        (WebInspector.DebuggerPresentationModel.prototype.set selectedCallFrame.updateExecutionLine):
        (WebInspector.DebuggerPresentationModel.prototype.set selectedCallFrame):

2012-03-02  Leo Yang  <leo.yang@torchmobile.com.cn>

        [BlackBerry] Build fix for LocalizedStringsBlackBerry.cpp
        https://bugs.webkit.org/show_bug.cgi?id=80099

        Unreviewed build fix.

        * platform/blackberry/LocalizedStringsBlackBerry.cpp:

2012-03-02  Allan Sandfeld Jensen  <allan.jensen@nokia.com>

        Fix build on AppleWebKit after 109548.

        * WebCore.exp.in:

2012-03-02  Yoshifumi Inoue  <yosin@chromium.org>

        [Forms] Make order of attribute/method in HTMLOptionElement.idl as same as specification
        https://bugs.webkit.org/show_bug.cgi?id=80095

        Reviewed by Kentaro Hara.

        No new tests. No behavior changes.

        * html/HTMLOptionElement.idl: Reorder attribute/method position.

2012-03-02  Adam Barth  <abarth@webkit.org>

        WorkerContext shouldn't know about IndexedDB
        https://bugs.webkit.org/show_bug.cgi?id=80094

        Reviewed by Kentaro Hara.

        There are still a couple IndexedDB stragglers we should clean up in
        WebCore proper.  This patch moves some IndexedDB logic from
        WorkerContext into the indexeddb module.

        In the process of writing this patch, I noticed that some IndexedDB
        files were missing from various build systems, so I added them.  I
        suspect that means IndexedDB is only enabled by default on Chromium.

        * CMakeLists.txt:
        * DerivedSources.make:
        * DerivedSources.pri:
        * GNUmakefile.list.am:
        * Modules/indexeddb/WorkerContextIndexedDatabase.cpp: Added.
        (WebCore):
        (WebCore::WorkerContextIndexedDatabase::WorkerContextIndexedDatabase):
        (WebCore::WorkerContextIndexedDatabase::~WorkerContextIndexedDatabase):
        (WebCore::WorkerContextIndexedDatabase::from):
        (WebCore::WorkerContextIndexedDatabase::webkitIndexedDB):
        * Modules/indexeddb/WorkerContextIndexedDatabase.h: Added.
        (WebCore):
        (WorkerContextIndexedDatabase):
        * Modules/indexeddb/WorkerContextIndexedDatabase.idl: Added.
        * Target.pri:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * workers/WorkerContext.cpp:
        (WebCore):
        * workers/WorkerContext.h:
        (WebCore):
        (WorkerContext):
        * workers/WorkerContext.idl:

2012-03-02  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] Compile WebCore without QtWidgets
        https://bugs.webkit.org/show_bug.cgi?id=80141

        Reviewed by Tor Arne Vestbø.

        * Target.pri: Don't add widgets to QT.
        * WebCore.pri: Use QT += opengl only with Qt 4, because it has an implicit QtWidgets
        dependency. With Qt 5 all necessary OpenGL API is part of QtGui (with a QOpenGL* prefix).

2012-03-02  Yoshifumi Inoue  <yosin@chromium.org>

        [Forms] Make order of attribute/method in HTMLFormElement.idl as same as specification
        https://bugs.webkit.org/show_bug.cgi?id=80093

        Reviewed by Kentaro Hara.

        No new tests. No behavior changes

        * html/HTMLFormElement.idl: Reorder attribute/method position.

2012-03-02  Yoshifumi Inoue  <yosin@chromium.org>

        [Forms] Make order of attribute/method in HTMLButtonElement.idl as same as specification
        https://bugs.webkit.org/show_bug.cgi?id=80091

        Reviewed by Kentaro Hara.

        No new tests. No behavior changes.

        * html/HTMLButtonElement.idl: Reorder attribute/method position.

2012-03-02  Allan Sandfeld Jensen  <allan.jensen@nokia.com>

        Suspend/Resume API for pausing timers and animations.
        https://bugs.webkit.org/show_bug.cgi?id=76063

        Reviewed by Kenneth Rohde Christiansen.

        * dom/ActiveDOMObject.h:
            New ReasonForSuspension: PageWillBePaused.
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::suspend): Handle new ReasonForSuspension.
        * page/Frame.cpp:
        (WebCore::Frame::Frame):
        (WebCore::Frame::setDocument):
        (WebCore::Frame::suspendActiveDOMObjectsAndAnimations):
        (WebCore::Frame::resumeActiveDOMObjectsAndAnimations):
        * page/Frame.h:
        (WebCore::Frame::activeDOMObjectsAndAnimationsSuspended):
            Frame now maintains a state of suspending animation and ActiveDOMObjects,
            which is inherited to all child-frames.
        * page/Page.cpp:
        (WebCore::Page::suspendActiveDOMObjectsAndAnimations):
        (WebCore::Page::resumeActiveDOMObjectsAndAnimations):
        * page/Page.h:
            Functions for suspending and resuming active DOM objects and animations in all frames.
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::willRenderImage):
            WillRenderImage now checks for suspension. This causes animated images to pause
            together with all other types of animations.

2012-03-02  Yoshifumi Inoue  <yosin@chromium.org>

        [Forms] Make order of attribute/method in HTMLFieldSetElement.idl as same as specification
        https://bugs.webkit.org/show_bug.cgi?id=80092

        Reviewed by Kentaro Hara.

        No new tests. No behavior changes.

        * html/HTMLFieldSetElement.idl: Reorder attribute/method position.

2012-03-02  Antti Koivisto  <antti@apple.com>

        possible regression: r104060 maybe causing crashes
        https://bugs.webkit.org/show_bug.cgi?id=75676

        Rubber-stamped by Simon Hausmann.

        Remove the speculative fix (the problem was elsewhere, http://trac.webkit.org/changeset/104845).

        Also remove the debugging code added for this bug.
    
        * dom/Document.cpp:
        (WebCore::Document::Document):
        (WebCore::Document::clearStyleSelector):
        (WebCore::Document::updateActiveStylesheets):
        * dom/Document.h:
        (Document):

2012-03-01  Alexander Pavlov  <apavlov@chromium.org>

        Web Inspector: Implement suggestions in Watch Expressions
        https://bugs.webkit.org/show_bug.cgi?id=79912

        Drive-by: make subproperties in ObjectPropertySections editable

        Reviewed by Pavel Feldman.

        * inspector/front-end/ConsoleView.js:
        (WebInspector.ConsoleView):
        (WebInspector.ConsoleView.prototype.completionsForTextPrompt):
        * inspector/front-end/DatabaseQueryView.js:
        * inspector/front-end/ObjectPropertiesSection.js:
        (WebInspector.ObjectPropertyTreeElement.prototype.onpopulate.callback):
        (WebInspector.ObjectPropertyTreeElement.prototype.onpopulate):
        (WebInspector.ObjectPropertyTreeElement.prototype.ondblclick):
        (WebInspector.ObjectPropertyTreeElement.prototype.renderPromptAsBlock):
        (WebInspector.ObjectPropertyTreeElement.prototype.elementAndValueToEdit):
        (WebInspector.ObjectPropertyTreeElement.prototype.startEditing.blurListener):
        (WebInspector.ObjectPropertyTreeElement.prototype.startEditing):
        (WebInspector.ObjectPropertyTreeElement.prototype.editingEnded):
        (WebInspector.ObjectPropertyTreeElement.prototype.editingCancelled):
        (WebInspector.ObjectPropertyTreeElement.prototype.editingCommitted):
        (WebInspector.ObjectPropertyTreeElement.prototype._promptKeyDown):
        (WebInspector.ObjectPropertyPrompt):
        * inspector/front-end/StylesSidebarPane.js:
        * inspector/front-end/TextPrompt.js:
        (WebInspector.TextPrompt.prototype.complete):
        * inspector/front-end/WatchExpressionsSidebarPane.js:
        (WebInspector.WatchExpressionTreeElement.prototype.renderPromptAsBlock):
        (WebInspector.WatchExpressionTreeElement.prototype.elementAndValueToEdit):
        (WebInspector.WatchExpressionTreeElement.prototype.editingCancelled):
        * inspector/front-end/inspector.css:
        (.watch-expressions > li.editing-sub-part .text-prompt):

2012-03-02  Antti Koivisto  <antti@apple.com>

        REGRESSION (r104060): Page contents not painted if inserting a new stylesheet and temporary body node
        https://bugs.webkit.org/show_bug.cgi?id=76590

        Reviewed by Maciej Stachowiak.

        Test: fast/css/pending-stylesheet-repaint.html
        
        If there has been a style recalc with a pending stylesheet, the forced repaint will need to be triggered even
        if the stylesheet doesn't affect the rendering. Otherwise we may end up never painting at all.

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

2012-03-02  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] Move QStyle theming code out of WebCore into WebKit1
        https://bugs.webkit.org/show_bug.cgi?id=80128

        Reviewed by Kenneth Rohde Christiansen.

        Moved QStyle dependant code into WebKit1, where it's okay to depend on
        QtWidgets/QStyle. Added factory hooks into RenderThemeQt to allow changing
        the default "mobile" style to QStyle on start-up.

        * Target.pri:
        * platform/qt/RenderThemeQt.cpp:
        (WebCore):
        (WebCore::RenderThemeQt::setCustomTheme):
        (WebCore::RenderThemeQt::customScrollbarTheme):
        (WebCore::createTheme):
        (WebCore::RenderTheme::themeForPage):
        (WebCore::RenderThemeQt::extraDefaultStyleSheet):
        * platform/qt/RenderThemeQt.h:
        (WebCore):
        (RenderThemeQt):
        * platform/qt/RenderThemeQtMobile.cpp:
        * platform/qt/ScrollbarThemeQt.cpp:
        (WebCore::ScrollbarTheme::nativeTheme):

2012-03-02  Luke Macpherson   <macpherson@chromium.org>

        Handle CSSPropertyWebkitColumnRuleStyle in CSSStyleApplyProperty.
        https://bugs.webkit.org/show_bug.cgi?id=80085

        Reviewed by Eric Seidel.

        No new tests / refactoring only.

        * css/CSSStyleApplyProperty.cpp:
        (WebCore::CSSStyleApplyProperty::CSSStyleApplyProperty):
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::collectMatchingRulesForList):

2012-03-02  Yury Semikhatsky  <yurys@chromium.org>

        Web Inspector: enable Timeline panel for workers
        https://bugs.webkit.org/show_bug.cgi?id=80130

        Enabled Timeline panel for worker inspector. Refactored
        JS function calls instrumentation to work for both
        worker contexts and documents.

        Reviewed by Pavel Feldman.

        * bindings/js/JSCallbackData.cpp:
        (WebCore::JSCallbackData::invokeCallback):
        * bindings/js/JSEventListener.cpp:
        (WebCore::JSEventListener::handleEvent):
        * bindings/js/JSMainThreadExecState.h:
        (WebCore):
        (WebCore::JSMainThreadExecState::instrumentedCall):
        * bindings/js/ScriptState.cpp:
        (WebCore::scriptExecutionContextFromScriptState):
        (WebCore):
        * bindings/js/ScriptState.h:
        (WebCore):
        * bindings/v8/ScriptState.cpp:
        (WebCore::ScriptState::scriptExecutionContext):
        (WebCore):
        (WebCore::scriptExecutionContextFromScriptState):
        * bindings/v8/ScriptState.h:
        (WebCore):
        (ScriptState):
        * bindings/v8/V8Proxy.cpp:
        (WebCore::V8Proxy::instrumentedCallFunction):
        * bindings/v8/V8WorkerContextEventListener.cpp:
        (WebCore::V8WorkerContextEventListener::callListenerFunction):
        * inspector/InjectedScript.cpp:
        (WebCore::InjectedScript::callFunctionWithEvalEnabled):
        * inspector/InspectorInstrumentation.cpp:
        (WebCore):
        (WebCore::InspectorInstrumentation::instrumentingAgentsForNonDocumentContext):
        * inspector/InspectorInstrumentation.h:
        (InspectorInstrumentation):
        (WebCore::InspectorInstrumentation::willCallFunction):
        (WebCore):
        (WebCore::InspectorInstrumentation::instrumentingAgentsForContext):
        * inspector/WorkerInspectorController.cpp:
        (WebCore::WorkerInspectorController::WorkerInspectorController):
        (WebCore::WorkerInspectorController::connectFrontend):
        (WebCore::WorkerInspectorController::disconnectFrontend):
        (WebCore::WorkerInspectorController::restoreInspectorStateFromCookie):
        * inspector/WorkerInspectorController.h:
        (WebCore):
        (WorkerInspectorController):
        * inspector/front-end/inspector.js:
        (WebInspector._createPanels):

2012-03-02  Kenichi Ishibashi  <bashi@chromium.org>

        Adding WebSocket per-frame DEFLATE extension
        https://bugs.webkit.org/show_bug.cgi?id=77522

        Add WebSocketDeflateFramer class which handles deflate-frame extension.
        This class encapsulates WebSocketDeflater and WebSocketInflater classes,
        which depend on zlib, so that WebSocketChannel is not necessary to aware
        zlib dependency.

        Reviewed by Kent Tamura.

        Tests: http/tests/websocket/tests/hybi/compressed-control-frame.html
               http/tests/websocket/tests/hybi/deflate-frame-comp-bit-onoff.html
               http/tests/websocket/tests/hybi/deflate-frame-invalid-parameter.html
               http/tests/websocket/tests/hybi/deflate-frame-parameter.html

        * CMakeLists.txt: Added WebSocketDeflateFramer.(cpp|h)
        * GNUmakefile.list.am: Ditto.
        * Target.pri: Ditto.
        * WebCore.gypi: Ditto.
        * WebCore.gyp/WebCore.gyp: Added zlib dependency.
        * WebCore.vcproj/WebCore.vcproj: Added WebSocketDeflateFramer.(cpp|h)
        * WebCore.xcodeproj/project.pbxproj: Ditto.
        * websockets/WebSocket.cpp:
        (WebCore::WebSocket::didConnect): Set m_extensions.
        * websockets/WebSocketChannel.cpp:
        (WebCore::WebSocketChannel::connect): Add deflate-frame extension processor to WebSocketHanshake if deflate can use.
        (WebCore::WebSocketChannel::fail): Call m_deflateFramer.didFail().
        (WebCore::WebSocketChannel::processFrame): Decompress frames if needed.
        (WebCore::WebSocketChannel::sendFrame): Compress frames if possible.
        * websockets/WebSocketChannel.h:
        * websockets/WebSocketDeflateFramer.cpp: Added.
        (WebCore):
        (WebSocketExtensionDeflateFrame):
        (WebCore::WebSocketExtensionDeflateFrame::create):
        (WebCore::WebSocketExtensionDeflateFrame::~WebSocketExtensionDeflateFrame):
        (WebCore::WebSocketExtensionDeflateFrame::WebSocketExtensionDeflateFrame):
        (WebCore::WebSocketExtensionDeflateFrame::handshakeString):
        (WebCore::WebSocketExtensionDeflateFrame::processResponse):
        (WebCore::DeflateResultHolder::DeflateResultHolder):
        (WebCore::DeflateResultHolder::~DeflateResultHolder):
        (WebCore::DeflateResultHolder::fail):
        (WebCore::InflateResultHolder::InflateResultHolder):
        (WebCore::InflateResultHolder::~InflateResultHolder):
        (WebCore::InflateResultHolder::fail):
        (WebCore::WebSocketDeflateFramer::WebSocketDeflateFramer):
        (WebCore::WebSocketDeflateFramer::createExtensionProcessor):
        (WebCore::WebSocketDeflateFramer::canDeflate):
        (WebCore::WebSocketDeflateFramer::enableDeflate):
        (WebCore::WebSocketDeflateFramer::deflate):
        (WebCore::WebSocketDeflateFramer::resetDeflateContext):
        (WebCore::WebSocketDeflateFramer::inflate):
        (WebCore::WebSocketDeflateFramer::resetInflateContext):
        (WebCore::WebSocketDeflateFramer::didFail):
        * websockets/WebSocketDeflateFramer.h: Added.
        (WebCore):
        (DeflateResultHolder):
        (WebCore::DeflateResultHolder::succeeded):
        (WebCore::DeflateResultHolder::failureReason):
        (InflateResultHolder):
        (WebCore::InflateResultHolder::succeeded):
        (WebCore::InflateResultHolder::failureReason):
        (WebSocketDeflateFramer):
        (WebCore::WebSocketDeflateFramer::enabled):

2012-03-01  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: [InspectorIndexedDB] Show meaningful description for object store items values.
        https://bugs.webkit.org/show_bug.cgi?id=79691

        Reviewed by Pavel Feldman.

        * inspector/front-end/IndexedDBModel.js:
        (WebInspector.IndexedDBModel.idbKeyFromKey):
        * inspector/front-end/IndexedDBViews.js:
        (WebInspector.IDBDataView.prototype._updateData.callback):
        (WebInspector.IDBDataView.prototype._updateData):
        (WebInspector.IDBDataGridNode.prototype.createCell):
        (WebInspector.IDBDataGridNode.prototype._formatValue):
        * inspector/front-end/ObjectPropertiesSection.js:
        (WebInspector.ObjectPropertyTreeElement.prototype.onpopulate.callback):
        (WebInspector.ObjectPropertyTreeElement.prototype.onpopulate):
        * inspector/front-end/RemoteObject.js:
        (WebInspector.LocalJSONObject.prototype.get subtype):
        * inspector/front-end/indexedDBViews.css:
        (.indexed-db-data-view .data-grid .data-container td):
        (.indexed-db-data-view .data-grid .data-container td.primaryKey-column):
        (.indexed-db-data-view .data-grid .data-container td.primaryKey-column div.primitive-value):
        (.indexed-db-data-view .data-grid .data-container td .section .header .title):

2012-03-02  Wei James  <james.wei@intel.com>

        [Chromium] Layout Test webaudio/audiobuffersource-channels.html is failing
        https://bugs.webkit.org/show_bug.cgi?id=79765

        Reviewed by Chris Rogers.

        * webaudio/AudioBuffer.cpp:
        (WebCore::AudioBuffer::create):
        * webaudio/AudioBufferSourceNode.cpp:
        (WebCore::AudioBufferSourceNode::setBuffer):
        * webaudio/AudioContext.h:
        (WebCore):
        (AudioContext):
        (WebCore::AudioContext::maxNumberOfChannels):
        * webaudio/AudioNodeOutput.cpp:
        (WebCore::AudioNodeOutput::AudioNodeOutput):
        (WebCore::AudioNodeOutput::setNumberOfChannels):

2012-03-02  Luke Macpherson   <macpherson@chromium.org>

        Handle CSSPropertyWebkitRegionBreakAfter, CSSPropertyWebkitRegionBreakBefore and CSSPropertyWebkitRegionBreakInside in CSSStyleApplyProperty.
        https://bugs.webkit.org/show_bug.cgi?id=80066

        Reviewed by Eric Seidel.

        No new tests / refactoring only.

        * css/CSSStyleApplyProperty.cpp:
        (WebCore::CSSStyleApplyProperty::CSSStyleApplyProperty):
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::collectMatchingRulesForList):

2012-03-02  Pablo Flouret  <pablof@motorola.com>

        Implement DefaultParagraphSeparator execCommand, to let authors choose the default block element
        https://bugs.webkit.org/show_bug.cgi?id=59961

        Reviewed by Ryosuke Niwa.

        http://dvcs.w3.org/hg/editing/raw-file/tip/editing.html#the-defaultparagraphseparator-command

        Test: editing/execCommand/default-paragraph-separator.html

        * editing/Editor.cpp:
        (WebCore::Editor::Editor):
        * editing/Editor.h:
        (WebCore::Editor::defaultParagraphSeparator):
        (WebCore::Editor::setDefaultParagraphSeparator):
        (Editor):
        * editing/EditorCommand.cpp:
        (WebCore::executeDefaultParagraphSeparator):
        (WebCore):
        (WebCore::valueDefaultParagraphSeparator):
        (WebCore::createCommandMap):
        * editing/htmlediting.cpp:
        (WebCore::createDefaultParagraphElement):

        * html/HTMLParagraphElement.cpp:
        (WebCore::HTMLParagraphElement::create):
        (WebCore):
        * html/HTMLParagraphElement.h:
        (HTMLParagraphElement):
            Added create(Document*) method that defaults to pTag as the QualifiedName.

2012-03-02  Kenneth Russell  <kbr@google.com>

        [chromium] Fix errors in LayerRendererChromium cleanup
        https://bugs.webkit.org/show_bug.cgi?id=80064

        Reviewed by James Robinson.

        Tested manually by forcing lost context while rendering Flash on
        Mac OS in a Debug build.

        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::cleanupSharedObjects):

2012-03-02  Andy Estes  <aestes@apple.com>

        Fix errors found when building the Mac port with ICONDATABASE disabled.
        https://bugs.webkit.org/show_bug.cgi?id=80059

        Reviewed by Brady Eidson.

        * WebCore.exp.in: Only export IconDatabase symbols when the feature is
        enabled.
        * loader/icon/IconDatabase.h:
        (WebCore::IconDatabase::create): WebKit calls this static method, so it
        should be defined on the stub class.
        (WebCore::IconDatabase::allowDatabaseCleanup): Ditto.
        (WebCore::IconDatabase::checkIntegrityBeforeOpening): Ditto.

2012-03-02  Luke Macpherson   <macpherson@chromium.org>

        Handle CSSPropertyWebkitColorCorrection in CSSStyleApplyProperty.
        https://bugs.webkit.org/show_bug.cgi?id=80056

        Reviewed by Eric Seidel.

        No new tests / refactoring only.

        * css/CSSStyleApplyProperty.cpp:
        (WebCore::CSSStyleApplyProperty::CSSStyleApplyProperty):
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::collectMatchingRulesForList):

2012-03-02  John Bauman  <jbauman@chromium.org>

        [chromium] Send didCommitAndDrawFrame after swap
        https://bugs.webkit.org/show_bug.cgi?id=80052

        Reviewed by James Robinson.

        Sending didCommitAndDrawFrame before the swap was causing plugins to
        redraw themselves between compositing and the swap, which reduces
        opportunities for optimization.

        * platform/graphics/chromium/cc/CCSingleThreadProxy.cpp:
        (WebCore::CCSingleThreadProxy::compositeAndReadback):
        (WebCore::CCSingleThreadProxy::compositeImmediately):
        (WebCore::CCSingleThreadProxy::doComposite):
        (WebCore):
        (WebCore::CCSingleThreadProxy::didSwapFrame):
        * platform/graphics/chromium/cc/CCSingleThreadProxy.h:
        (CCSingleThreadProxy):

2012-03-02  Raymond Toy  <rtoy@google.com>

        AudioParam needs tests for the parameter automation routines.
        https://bugs.webkit.org/show_bug.cgi?id=77666

        Reviewed by Chris Rogers.

        Tests: webaudio/audioparam-linearRampToValueAtTime.html
               webaudio/audioparam-setTargetValueAtTime.html
               webaudio/audioparam-setValueAtTime.html
               webaudio/audioparam-setValueCurveAtTime.html

        * webaudio/AudioParamTimeline.cpp:
        (WebCore::AudioParamTimeline::valuesForTimeRangeImpl): Round the
        curveIndex to fix timing issue in setValueCurveAtTime.

2012-03-01  Pablo Flouret  <pablof@motorola.com>

        Fix code generators to correctly guard header declarations that have a [Conditional] attribute.
        https://bugs.webkit.org/show_bug.cgi?id=79375

        Reviewed by Kentaro Hara.

        In most cases code generators weren't checking the Conditional attribute
        when generating code in headers for function/attribute/constants, they
        were just guarding against the Conditional for the whole interface.

        * bindings/scripts/CodeGeneratorCPP.pm:
        (GenerateHeader):
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateHeader):
        * bindings/scripts/CodeGeneratorObjC.pm:
        (GenerateHeader):
        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateHeader):
        * bindings/scripts/test/CPP/WebDOMTestInterface.h:
        * bindings/scripts/test/CPP/WebDOMTestObj.h:
        * bindings/scripts/test/JS/JSTestInterface.h:
        (JSTestInterface):
        (WebCore):
        * bindings/scripts/test/JS/JSTestObj.h:
        (WebCore):
        * bindings/scripts/test/ObjC/DOMTestInterface.h:
        * bindings/scripts/test/ObjC/DOMTestObj.h:


2012-03-01  Dana Jansens  <danakj@chromium.org>

        [chromium] Make opaque paint tracker aware of SkCanvas layers
        https://bugs.webkit.org/show_bug.cgi?id=79145

        Reviewed by Stephen White.

        The current opaque paint tracker ignored SkCanvas layers entirely. But
        SkCanvas layers can be used to apply things like alpha. So we make it
        know about layers, and apply any clipping and SkPaint objects for layers
        when tracking a paint.

        Image clipping is done via a layer, so we can now also remove the
        special-case code around image clipping in PlatformContextSkia and
        OpaqueRegionSkia.

        Unit test: PlatformContextSkiaTest.contextTransparencyLayerTest

        Test: compositing/culling/clear-fixed-iframe.html

        * platform/graphics/skia/OpaqueRegionSkia.cpp:
        (WebCore::OpaqueRegionSkia::didDrawRect):
        (WebCore::OpaqueRegionSkia::didDrawPath):
        (WebCore::OpaqueRegionSkia::didDrawPoints):
        (WebCore::OpaqueRegionSkia::didDrawBounded):
        (WebCore::OpaqueRegionSkia::didDraw):
        (WebCore):
        * platform/graphics/skia/OpaqueRegionSkia.h:
        (OpaqueRegionSkia):
        * platform/graphics/skia/PlatformContextSkia.cpp:
        * platform/graphics/skia/PlatformContextSkia.h:
        (PlatformContextSkia):

2012-03-02  Kent Tamura  <tkent@chromium.org>

        Add HTML-capable popup API to ChromeClient
        https://bugs.webkit.org/show_bug.cgi?id=79078

        Reviewed by Dimitri Glazkov.

        This API will be used to implement a calendar picker of <input type=date>.
        The code is enclosed with ENABLE_PAGE_POPUP, and doesn't change any
        behavior for now.

        * page/ChromeClient.h: Added declarations of openPagePopup() and closePagePopup().
        * loader/EmptyClients.h:
        (EmptyChromeClient): Add empty implementations of new ChromeClient functions.
        * page/PagePopup.h: Added.
        (PagePopup): Define an empty interface
        * page/PagePopupClient.h: Added.
        (PagePopupClient): Define an interface to provide various information to HTMLPopup.

2012-03-01  Hironori Bono  <hbono@chromium.org>

        Render overflow controls of an RTL element to its left-side.
        https://bugs.webkit.org/show_bug.cgi?id=54623

        This change adds a new flag WTF_USE_RTL_SCROLLBAR and render the
        vertical scrollbars and resizers of RTL elements to their left side if
        this new flag is enabled.

        Reviewed by Ryosuke Niwa.

        Test: platform/chromium/fast/events/rtl-scrollbar.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::addOverflowFromPositionedObjects): Move child elements right.
        (WebCore::RenderBlock::determineLogicalLeftPositionForChild): ditto.
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::overflowClipRect): Move the content rectangle right.
        * rendering/RenderLayer.cpp:
        (WebCore::cornerStart): Added a function that calculates the X position of a resizer.
        (WebCore):
        (WebCore::cornerRect): Use cornerStart to move a resizer.
        (WebCore::RenderLayer::verticalScrollbarStart): Added a function that calculates
        the X position of a vertical scrollbar.
        (WebCore::RenderLayer::horizontalScrollbarStart): Added a function that calculates
        the X position of a horizontal scrollbar.
        (WebCore::RenderLayer::scrollbarOffset): Render a vertical scrollbar to the left side
        and move a horizontal scrollbar right by the width of the vertical scrollbar.
        (WebCore::RenderLayer::invalidateScrollbarRect): ditto.
        (WebCore::RenderLayer::positionOverflowControls): ditto.
        (WebCore::RenderLayer::hitTestOverflowControls): ditto.
        * rendering/RenderLayer.h:
        (RenderLayer):
        * rendering/style/RenderStyle.h: Added shouldPlaceBlockDirectionScrollbarOnLogicalLeft,
        which returns if we need to move a left scrollbar to its right side.

2012-03-01  Kent Tamura  <tkent@chromium.org>

        REGRESSION(90089): Input type='search' text shakes up and down when the style is changed.
        https://bugs.webkit.org/show_bug.cgi?id=79445

        Reviewed by Dimitri Glazkov.

        If the inner text height of a search field is smaller than the
        content box height of the <input>, the height of the container
        element should be same as the content box height.

        When the element style is changed, the RenderStyle height of the
        container element is cleared, but the renderer height of the
        container element remains. We had a bug that layout() didn't set
        the RenderStyle height in a case that the renderer height was the
        desired height. It shrunk the renderer height as the result of
        layout for children.

        Tests: fast/forms/search/search-shaking-text.html

        * rendering/RenderTextControlSingleLine.cpp:
        (WebCore::RenderTextControlSingleLine::layout):
        Always set the RenderStyle height explicitly.

2012-03-01  Kentaro Hara  <haraken@chromium.org>

        Unreviewed, rebaselined run-bindings-tests results.

        * bindings/scripts/test/CPP/WebDOMTestObj.cpp:
        * bindings/scripts/test/CPP/WebDOMTestObj.h:

2012-03-01  Dan Bernstein  <mitz@apple.com>

        <rdar://problem/10942540> REGRESSION (r108956): Safari Webpage Preview Fetcher crashes in WebCore::localizedString() when using a WebKit nightly build
        https://bugs.webkit.org/show_bug.cgi?id=80034

        Reviewed by Benjamin Poulain.

        Safari Webpage Preview Fetcher can’t access the WebCore framework when launched from a WebKit
        nightly build. After r108956, this causes it to crash.

        * platform/mac/LocalizedStringsMac.cpp:
        (WebCore::localizedString): Added a null-check for the value returned from
        CFBundleGetBundleWithIdentifier(CFSTR("com.apple.WebCore")).

2012-03-01  Jason Liu  <jason.liu@torchmobile.com.cn>

        [BlackBerry]Array of Cookies in HTTP request header are not in order.
        https://bugs.webkit.org/show_bug.cgi?id=79870

        Std::sort and HashMap are not stable. So cookies with the same creating
        time sometimes are sent disorder.
        Change std::sort with std::stable-sort.
        We don't need using HashMap to save so few cookies for one domain.
        It is a wast of time to create HashMap, too.
        So change it with vector.

        Reviewed by George Staikos.

        Test: http/tests/cookies/resources/setArraycookies.php

        * platform/blackberry/CookieManager.cpp:
        (WebCore::cookieSorter):
        (WebCore::CookieManager::getRawCookies):
        (WebCore::CookieManager::checkAndTreatCookie):
        (WebCore::CookieManager::addCookieToMap):
        * platform/blackberry/CookieManager.h:
        * platform/blackberry/CookieMap.cpp:
        (WebCore::CookieMap::addOrReplaceCookie):
        (WebCore::CookieMap::removeCookieAtIndex):
        (WebCore::CookieMap::removeCookie):
        (WebCore):
        (WebCore::CookieMap::getAllCookies):
        (WebCore::CookieMap::updateOldestCookie):
        (WebCore::CookieMap::deleteAllCookiesAndDomains):
        * platform/blackberry/CookieMap.h:
        (WebCore::CookieMap::count):
        (CookieMap):

2012-03-01  Adam Barth  <abarth@webkit.org>

        Move WebCore/storage/IDB* files into WebCore/Modules/indexeddb
        https://bugs.webkit.org/show_bug.cgi?id=80071

        Reviewed by Kentaro Hara.

        Now that we've removed all the ENABLE(INDEXED_DATABASE) ifdefs from
        WebCore proper, we can move IndexedDB into its own module.

        * CMakeLists.txt:
        * DerivedSources.make:
        * DerivedSources.pri:
        * GNUmakefile.list.am:
        * Modules/indexeddb/IDBAny.cpp: Copied from Source/WebCore/storage/IDBAny.cpp.
        * Modules/indexeddb/IDBAny.h: Copied from Source/WebCore/storage/IDBAny.h.
        * Modules/indexeddb/IDBAny.idl: Copied from Source/WebCore/storage/IDBAny.idl.
        * Modules/indexeddb/IDBBackingStore.h: Copied from Source/WebCore/storage/IDBBackingStore.h.
        * Modules/indexeddb/IDBCallbacks.h: Copied from Source/WebCore/storage/IDBCallbacks.h.
        * Modules/indexeddb/IDBCursor.cpp: Copied from Source/WebCore/storage/IDBCursor.cpp.
        * Modules/indexeddb/IDBCursor.h: Copied from Source/WebCore/storage/IDBCursor.h.
        * Modules/indexeddb/IDBCursor.idl: Copied from Source/WebCore/storage/IDBCursor.idl.
        * Modules/indexeddb/IDBCursorBackendImpl.cpp: Copied from Source/WebCore/storage/IDBCursorBackendImpl.cpp.
        * Modules/indexeddb/IDBCursorBackendImpl.h: Copied from Source/WebCore/storage/IDBCursorBackendImpl.h.
        * Modules/indexeddb/IDBCursorBackendInterface.h: Copied from Source/WebCore/storage/IDBCursorBackendInterface.h.
        * Modules/indexeddb/IDBCursorWithValue.cpp: Copied from Source/WebCore/storage/IDBCursorWithValue.cpp.
        * Modules/indexeddb/IDBCursorWithValue.h: Copied from Source/WebCore/storage/IDBCursorWithValue.h.
        * Modules/indexeddb/IDBCursorWithValue.idl: Copied from Source/WebCore/storage/IDBCursorWithValue.idl.
        * Modules/indexeddb/IDBDatabase.cpp: Copied from Source/WebCore/storage/IDBDatabase.cpp.
        * Modules/indexeddb/IDBDatabase.h: Copied from Source/WebCore/storage/IDBDatabase.h.
        * Modules/indexeddb/IDBDatabase.idl: Copied from Source/WebCore/storage/IDBDatabase.idl.
        * Modules/indexeddb/IDBDatabaseBackendImpl.cpp: Copied from Source/WebCore/storage/IDBDatabaseBackendImpl.cpp.
        * Modules/indexeddb/IDBDatabaseBackendImpl.h: Copied from Source/WebCore/storage/IDBDatabaseBackendImpl.h.
        * Modules/indexeddb/IDBDatabaseBackendInterface.h: Copied from Source/WebCore/storage/IDBDatabaseBackendInterface.h.
        * Modules/indexeddb/IDBDatabaseCallbacks.h: Copied from Source/WebCore/storage/IDBDatabaseCallbacks.h.
        * Modules/indexeddb/IDBDatabaseCallbacksImpl.cpp: Copied from Source/WebCore/storage/IDBDatabaseCallbacksImpl.cpp.
        * Modules/indexeddb/IDBDatabaseCallbacksImpl.h: Copied from Source/WebCore/storage/IDBDatabaseCallbacksImpl.h.
        * Modules/indexeddb/IDBDatabaseError.h: Copied from Source/WebCore/storage/IDBDatabaseError.h.
        * Modules/indexeddb/IDBDatabaseError.idl: Copied from Source/WebCore/storage/IDBDatabaseError.idl.
        * Modules/indexeddb/IDBDatabaseException.cpp: Copied from Source/WebCore/storage/IDBDatabaseException.cpp.
        * Modules/indexeddb/IDBDatabaseException.h: Copied from Source/WebCore/storage/IDBDatabaseException.h.
        * Modules/indexeddb/IDBDatabaseException.idl: Copied from Source/WebCore/storage/IDBDatabaseException.idl.
        * Modules/indexeddb/IDBEventDispatcher.cpp: Copied from Source/WebCore/storage/IDBEventDispatcher.cpp.
        * Modules/indexeddb/IDBEventDispatcher.h: Copied from Source/WebCore/storage/IDBEventDispatcher.h.
        * Modules/indexeddb/IDBFactory.cpp: Copied from Source/WebCore/storage/IDBFactory.cpp.
        * Modules/indexeddb/IDBFactory.h: Copied from Source/WebCore/storage/IDBFactory.h.
        * Modules/indexeddb/IDBFactory.idl: Copied from Source/WebCore/storage/IDBFactory.idl.
        * Modules/indexeddb/IDBFactoryBackendImpl.cpp: Copied from Source/WebCore/storage/IDBFactoryBackendImpl.cpp.
        * Modules/indexeddb/IDBFactoryBackendImpl.h: Copied from Source/WebCore/storage/IDBFactoryBackendImpl.h.
        * Modules/indexeddb/IDBFactoryBackendInterface.cpp: Copied from Source/WebCore/storage/IDBFactoryBackendInterface.cpp.
        * Modules/indexeddb/IDBFactoryBackendInterface.h: Copied from Source/WebCore/storage/IDBFactoryBackendInterface.h.
        * Modules/indexeddb/IDBIndex.cpp: Copied from Source/WebCore/storage/IDBIndex.cpp.
        * Modules/indexeddb/IDBIndex.h: Copied from Source/WebCore/storage/IDBIndex.h.
        * Modules/indexeddb/IDBIndex.idl: Copied from Source/WebCore/storage/IDBIndex.idl.
        * Modules/indexeddb/IDBIndexBackendImpl.cpp: Copied from Source/WebCore/storage/IDBIndexBackendImpl.cpp.
        * Modules/indexeddb/IDBIndexBackendImpl.h: Copied from Source/WebCore/storage/IDBIndexBackendImpl.h.
        * Modules/indexeddb/IDBIndexBackendInterface.h: Copied from Source/WebCore/storage/IDBIndexBackendInterface.h.
        * Modules/indexeddb/IDBKey.cpp: Copied from Source/WebCore/storage/IDBKey.cpp.
        * Modules/indexeddb/IDBKey.h: Copied from Source/WebCore/storage/IDBKey.h.
        * Modules/indexeddb/IDBKey.idl: Copied from Source/WebCore/storage/IDBKey.idl.
        * Modules/indexeddb/IDBKeyPath.cpp: Copied from Source/WebCore/storage/IDBKeyPath.cpp.
        * Modules/indexeddb/IDBKeyPath.h: Copied from Source/WebCore/storage/IDBKeyPath.h.
        * Modules/indexeddb/IDBKeyPathBackendImpl.cpp: Copied from Source/WebCore/storage/IDBKeyPathBackendImpl.cpp.
        * Modules/indexeddb/IDBKeyPathBackendImpl.h: Copied from Source/WebCore/storage/IDBKeyPathBackendImpl.h.
        * Modules/indexeddb/IDBKeyRange.cpp: Copied from Source/WebCore/storage/IDBKeyRange.cpp.
        * Modules/indexeddb/IDBKeyRange.h: Copied from Source/WebCore/storage/IDBKeyRange.h.
        * Modules/indexeddb/IDBKeyRange.idl: Copied from Source/WebCore/storage/IDBKeyRange.idl.
        * Modules/indexeddb/IDBLevelDBBackingStore.cpp: Copied from Source/WebCore/storage/IDBLevelDBBackingStore.cpp.
        * Modules/indexeddb/IDBLevelDBBackingStore.h: Copied from Source/WebCore/storage/IDBLevelDBBackingStore.h.
        * Modules/indexeddb/IDBLevelDBCoding.cpp: Copied from Source/WebCore/storage/IDBLevelDBCoding.cpp.
        * Modules/indexeddb/IDBLevelDBCoding.h: Copied from Source/WebCore/storage/IDBLevelDBCoding.h.
        * Modules/indexeddb/IDBObjectStore.cpp: Copied from Source/WebCore/storage/IDBObjectStore.cpp.
        * Modules/indexeddb/IDBObjectStore.h: Copied from Source/WebCore/storage/IDBObjectStore.h.
        * Modules/indexeddb/IDBObjectStore.idl: Copied from Source/WebCore/storage/IDBObjectStore.idl.
        * Modules/indexeddb/IDBObjectStoreBackendImpl.cpp: Copied from Source/WebCore/storage/IDBObjectStoreBackendImpl.cpp.
        * Modules/indexeddb/IDBObjectStoreBackendImpl.h: Copied from Source/WebCore/storage/IDBObjectStoreBackendImpl.h.
        * Modules/indexeddb/IDBObjectStoreBackendInterface.h: Copied from Source/WebCore/storage/IDBObjectStoreBackendInterface.h.
        * Modules/indexeddb/IDBPendingTransactionMonitor.cpp: Copied from Source/WebCore/storage/IDBPendingTransactionMonitor.cpp.
        * Modules/indexeddb/IDBPendingTransactionMonitor.h: Copied from Source/WebCore/storage/IDBPendingTransactionMonitor.h.
        * Modules/indexeddb/IDBRequest.cpp: Copied from Source/WebCore/storage/IDBRequest.cpp.
        * Modules/indexeddb/IDBRequest.h: Copied from Source/WebCore/storage/IDBRequest.h.
        * Modules/indexeddb/IDBRequest.idl: Copied from Source/WebCore/storage/IDBRequest.idl.
        * Modules/indexeddb/IDBTracing.h: Copied from Source/WebCore/storage/IDBTracing.h.
        * Modules/indexeddb/IDBTransaction.cpp: Copied from Source/WebCore/storage/IDBTransaction.cpp.
        * Modules/indexeddb/IDBTransaction.h: Copied from Source/WebCore/storage/IDBTransaction.h.
        * Modules/indexeddb/IDBTransaction.idl: Copied from Source/WebCore/storage/IDBTransaction.idl.
        * Modules/indexeddb/IDBTransactionBackendImpl.cpp: Copied from Source/WebCore/storage/IDBTransactionBackendImpl.cpp.
        * Modules/indexeddb/IDBTransactionBackendImpl.h: Copied from Source/WebCore/storage/IDBTransactionBackendImpl.h.
        * Modules/indexeddb/IDBTransactionBackendInterface.h: Copied from Source/WebCore/storage/IDBTransactionBackendInterface.h.
        * Modules/indexeddb/IDBTransactionCallbacks.h: Copied from Source/WebCore/storage/IDBTransactionCallbacks.h.
        * Modules/indexeddb/IDBTransactionCoordinator.cpp: Copied from Source/WebCore/storage/IDBTransactionCoordinator.cpp.
        * Modules/indexeddb/IDBTransactionCoordinator.h: Copied from Source/WebCore/storage/IDBTransactionCoordinator.h.
        * Modules/indexeddb/IDBVersionChangeEvent.cpp: Copied from Source/WebCore/storage/IDBVersionChangeEvent.cpp.
        * Modules/indexeddb/IDBVersionChangeEvent.h: Copied from Source/WebCore/storage/IDBVersionChangeEvent.h.
        * Modules/indexeddb/IDBVersionChangeEvent.idl: Copied from Source/WebCore/storage/IDBVersionChangeEvent.idl.
        * Modules/indexeddb/IDBVersionChangeRequest.cpp: Copied from Source/WebCore/storage/IDBVersionChangeRequest.cpp.
        * Modules/indexeddb/IDBVersionChangeRequest.h: Copied from Source/WebCore/storage/IDBVersionChangeRequest.h.
        * Modules/indexeddb/IDBVersionChangeRequest.idl: Copied from Source/WebCore/storage/IDBVersionChangeRequest.idl.
        * Target.pri:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * storage/IDBAny.cpp: Removed.
        * storage/IDBAny.h: Removed.
        * storage/IDBAny.idl: Removed.
        * storage/IDBBackingStore.h: Removed.
        * storage/IDBCallbacks.h: Removed.
        * storage/IDBCursor.cpp: Removed.
        * storage/IDBCursor.h: Removed.
        * storage/IDBCursor.idl: Removed.
        * storage/IDBCursorBackendImpl.cpp: Removed.
        * storage/IDBCursorBackendImpl.h: Removed.
        * storage/IDBCursorBackendInterface.h: Removed.
        * storage/IDBCursorWithValue.cpp: Removed.
        * storage/IDBCursorWithValue.h: Removed.
        * storage/IDBCursorWithValue.idl: Removed.
        * storage/IDBDatabase.cpp: Removed.
        * storage/IDBDatabase.h: Removed.
        * storage/IDBDatabase.idl: Removed.
        * storage/IDBDatabaseBackendImpl.cpp: Removed.
        * storage/IDBDatabaseBackendImpl.h: Removed.
        * storage/IDBDatabaseBackendInterface.h: Removed.
        * storage/IDBDatabaseCallbacks.h: Removed.
        * storage/IDBDatabaseCallbacksImpl.cpp: Removed.
        * storage/IDBDatabaseCallbacksImpl.h: Removed.
        * storage/IDBDatabaseError.h: Removed.
        * storage/IDBDatabaseError.idl: Removed.
        * storage/IDBDatabaseException.cpp: Removed.
        * storage/IDBDatabaseException.h: Removed.
        * storage/IDBDatabaseException.idl: Removed.
        * storage/IDBEventDispatcher.cpp: Removed.
        * storage/IDBEventDispatcher.h: Removed.
        * storage/IDBFactory.cpp: Removed.
        * storage/IDBFactory.h: Removed.
        * storage/IDBFactory.idl: Removed.
        * storage/IDBFactoryBackendImpl.cpp: Removed.
        * storage/IDBFactoryBackendImpl.h: Removed.
        * storage/IDBFactoryBackendInterface.cpp: Removed.
        * storage/IDBFactoryBackendInterface.h: Removed.
        * storage/IDBIndex.cpp: Removed.
        * storage/IDBIndex.h: Removed.
        * storage/IDBIndex.idl: Removed.
        * storage/IDBIndexBackendImpl.cpp: Removed.
        * storage/IDBIndexBackendImpl.h: Removed.
        * storage/IDBIndexBackendInterface.h: Removed.
        * storage/IDBKey.cpp: Removed.
        * storage/IDBKey.h: Removed.
        * storage/IDBKey.idl: Removed.
        * storage/IDBKeyPath.cpp: Removed.
        * storage/IDBKeyPath.h: Removed.
        * storage/IDBKeyPathBackendImpl.cpp: Removed.
        * storage/IDBKeyPathBackendImpl.h: Removed.
        * storage/IDBKeyRange.cpp: Removed.
        * storage/IDBKeyRange.h: Removed.
        * storage/IDBKeyRange.idl: Removed.
        * storage/IDBLevelDBBackingStore.cpp: Removed.
        * storage/IDBLevelDBBackingStore.h: Removed.
        * storage/IDBLevelDBCoding.cpp: Removed.
        * storage/IDBLevelDBCoding.h: Removed.
        * storage/IDBObjectStore.cpp: Removed.
        * storage/IDBObjectStore.h: Removed.
        * storage/IDBObjectStore.idl: Removed.
        * storage/IDBObjectStoreBackendImpl.cpp: Removed.
        * storage/IDBObjectStoreBackendImpl.h: Removed.
        * storage/IDBObjectStoreBackendInterface.h: Removed.
        * storage/IDBPendingTransactionMonitor.cpp: Removed.
        * storage/IDBPendingTransactionMonitor.h: Removed.
        * storage/IDBRequest.cpp: Removed.
        * storage/IDBRequest.h: Removed.
        * storage/IDBRequest.idl: Removed.
        * storage/IDBTracing.h: Removed.
        * storage/IDBTransaction.cpp: Removed.
        * storage/IDBTransaction.h: Removed.
        * storage/IDBTransaction.idl: Removed.
        * storage/IDBTransactionBackendImpl.cpp: Removed.
        * storage/IDBTransactionBackendImpl.h: Removed.
        * storage/IDBTransactionBackendInterface.h: Removed.
        * storage/IDBTransactionCallbacks.h: Removed.
        * storage/IDBTransactionCoordinator.cpp: Removed.
        * storage/IDBTransactionCoordinator.h: Removed.
        * storage/IDBVersionChangeEvent.cpp: Removed.
        * storage/IDBVersionChangeEvent.h: Removed.
        * storage/IDBVersionChangeEvent.idl: Removed.
        * storage/IDBVersionChangeRequest.cpp: Removed.
        * storage/IDBVersionChangeRequest.h: Removed.
        * storage/IDBVersionChangeRequest.idl: Removed.

2012-03-01  Luke Macpherson   <macpherson@chromium.org>

        Handle CSSPropertyWebkitBorderFit in CSSStyleApplyProperty.
        https://bugs.webkit.org/show_bug.cgi?id=79998

        Reviewed by Andreas Kling.

        No new tests / refactoring only.

        * css/CSSStyleApplyProperty.cpp:
        (WebCore::CSSStyleApplyProperty::CSSStyleApplyProperty):
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::collectMatchingRulesForList):

2012-03-01  Anders Carlsson  <andersca@apple.com>

        Crash when doing repeated double-tap-to-zoom gesture on apple startpage
        https://bugs.webkit.org/show_bug.cgi?id=80081
        <rdar://problem/10966391>

        Reviewed by Sam Weinig.

        Setting the contents scale on the tile cache layer was creating a WebTileCacheLayer presentation layer copy with a null _tileCache.

        Implement -[WebTileCacheLayer actionForKey:] and have it always return nil so we'll avoid implicit animations, and thus creating presentation layers.

        * platform/graphics/ca/mac/WebTileCacheLayer.mm:
        (-[WebTileCacheLayer initWithLayer:]):
        Implement this and assert that it's never reached. We should never create presentation layers since we don't animate this layer.

        (-[WebTileCacheLayer actionForKey:]):
        Implement this and always return nil.

2012-03-01  Hajime Morrita  <morrita@chromium.org>

        Custom scrollbars do not support transparency
        https://bugs.webkit.org/show_bug.cgi?id=50547

        Reviewed by James Robinson.

        RenderScrollbar, which is used even for outermost frame when
        -webkit-scrollbar is specified, assumes that its background is
        painted by the enclosing container. But there is no such container
        for outermost frame. This causes visual glitches when the
        scrollbar has transparency.

        This change clears background region for custom
        outermostscrollbars to erase such glitches.

        Test: fast/frames/transparent-scrollbar.html

        * page/FrameView.cpp:
        (WebCore::FrameView::paintScrollbar): The background is cleared here.
        (WebCore):
        * page/FrameView.h:
        (FrameView):
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::paintScrollbar): Added to hook in FrameView
        (WebCore):
        (WebCore::ScrollView::paintScrollbars):
        * platform/ScrollView.h:
        (ScrollView):

2012-03-01  Kent Tamura  <tkent@chromium.org>

        REGRESSION(r106388): Form state is restored to a wrong document.
        https://bugs.webkit.org/show_bug.cgi?id=79206

        Reviewed by Brady Eidson.

        In some cases, the URL of the current HistoryItem and the document
        URL are mismatched.
        A form state should be restored only if the document was loaded
        with a HistoryItem and the document is not loaded as a
        redirection.

        Test: fast/loader/form-state-restore-with-locked-back-forward-list.html

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::checkCompleted): Clear m_requestedHistoryItem.
        (WebCore::FrameLoader::loadItem):
        Save the requested HistoryItem for didLoadWithLodItem().
        * loader/FrameLoader.h:
        (WebCore::FrameLoader::requestedHistoryItem):
        Added. Accessor for m_requestedHistoryItem.
        * loader/HistoryController.cpp:
        (WebCore::HistoryController::restoreDocumentState):
        Restore a form state only if the current document was loaded with
        FrameLoader::loadItem() and not redirection.

2012-03-01  Xingnan Wang  <xingnan.wang@intel.com>

        SSE optimization for vsvesq and vmaxmgv
        https://bugs.webkit.org/show_bug.cgi?id=77950

        Reviewed by Chris Rogers.

        Achieved the performance of 3.7x on vsvesq and 4.1x on vmaxmgv.

        * platform/audio/VectorMath.cpp:
        (WebCore::VectorMath::vsvesq):
        (WebCore::VectorMath::vmaxmgv):

2012-03-01  Luke Macpherson   <macpherson@chromium.org>

        Handle CSSPropertyBoxSizing in CSSStyleApplyProperty.
        https://bugs.webkit.org/show_bug.cgi?id=80001

        Reviewed by Andreas Kling.

        No new tests / refactoring only.

        * css/CSSStyleApplyProperty.cpp:
        (WebCore::CSSStyleApplyProperty::CSSStyleApplyProperty):
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::collectMatchingRulesForList):

2012-03-01  James Robinson  <jamesr@chromium.org>

        [chromium] LayerChromium::contentChanged is redundant with setNeedsDisplay
        https://bugs.webkit.org/show_bug.cgi?id=79708

        Reviewed by Adrienne Walker.

        Some layer types need special handling when they receive damage. WebGL layers need to know if their texture is
        updated for clear-on-swap behavior and both WebGL and canvas 2d layers have rate limiting mechanisms tied to
        receiving invalidations. This mechanism was implemented by LayerChromium::contentChanged(), but this is
        redundant with setNeedsDisplay().

        Covered by existing tests.

        * platform/graphics/chromium/Canvas2DLayerChromium.cpp:
        (WebCore::Canvas2DLayerChromium::setNeedsDisplay):
        * platform/graphics/chromium/Canvas2DLayerChromium.h:
        (Canvas2DLayerChromium):
        * platform/graphics/chromium/GraphicsLayerChromium.cpp:
        (WebCore::GraphicsLayerChromium::setContentsNeedsDisplay):
        * platform/graphics/chromium/LayerChromium.cpp:
        (WebCore::LayerChromium::setNeedsDisplay):
        * platform/graphics/chromium/LayerChromium.h:
        (LayerChromium):
        * platform/graphics/chromium/VideoLayerChromium.cpp:
        (WebCore::VideoLayerChromium::setNeedsDisplay):
        * platform/graphics/chromium/VideoLayerChromium.h:
        (VideoLayerChromium):
        * platform/graphics/chromium/WebGLLayerChromium.cpp:
        (WebCore::WebGLLayerChromium::setNeedsDisplay):
        * platform/graphics/chromium/WebGLLayerChromium.h:
        (WebGLLayerChromium):

2012-03-01  James Robinson  <jamesr@chromium.org>

        [chromium] Rename LayerChromium::name to debugName to be more consistent with other debug properties, make threadsafe
        https://bugs.webkit.org/show_bug.cgi?id=79723

        Reviewed by Adrienne Walker.

        * platform/graphics/chromium/GraphicsLayerChromium.cpp:
        (WebCore::GraphicsLayerChromium::updateNames):
        * platform/graphics/chromium/LayerChromium.cpp:
        (WebCore::LayerChromium::pushPropertiesTo):
        (WebCore::LayerChromium::setDebugName):
        (WebCore):
        * platform/graphics/chromium/LayerChromium.h:
        (LayerChromium):
        * platform/graphics/chromium/cc/CCLayerImpl.cpp:
        (WebCore::CCLayerImpl::dumpLayer):
        * platform/graphics/chromium/cc/CCLayerImpl.h:
        (CCLayerImpl):
        (WebCore::CCLayerImpl::setDebugName):
        (WebCore::CCLayerImpl::debugName):
        * platform/graphics/chromium/cc/CCRenderSurface.cpp:
        (WebCore::CCRenderSurface::name):

2012-03-01  Adam Barth  <abarth@webkit.org>

        Remove last ENABLED(INDEXED_DATABASE) ifdef from WebCore proper
        https://bugs.webkit.org/show_bug.cgi?id=80061

        Reviewed by Dimitri Glazkov.

        This patch removes the last ENABLED(INDEXED_DATABASE) ifdef from
        WebCore proper by moving the backend factory out of PageGroup and into
        a supplement for PageGroup.  After this patch, we're ready to move the
        IDB code into Modules.

        * Modules/indexeddb/DOMWindowIndexedDatabase.cpp:
        (WebCore::DOMWindowIndexedDatabase::webkitIndexedDB):
        * WebCore.gypi:
        * inspector/InspectorIndexedDBAgent.cpp:
        (WebCore::assertIDBFactory):
        * page/PageGroup.cpp:
        (WebCore):
        * page/PageGroup.h:
        (PageGroup):

2012-03-01  Dale Curtis  <dalecurtis@chromium.org>

        Remove deprecated FFmpeg build directories.
        https://bugs.webkit.org/show_bug.cgi?id=79282

        We've switched the layout of the FFmpeg repo in Chrome and these paths
        are no longer needed or valid.

        Reviewed by Dirk Pranke.

        No new tests. It either compiles or not.

        * WebCore.gyp/WebCore.gyp:

2012-03-01  Xingnan Wang  <xingnan.wang@intel.com>

        Enable IPP for Biquad filter
        https://bugs.webkit.org/show_bug.cgi?id=77509

        Reviewed by Chris Rogers.

        Use IIR filter in IPP and improve ~27% performance in linux.
        Changes are covered by current tests.

        * platform/audio/Biquad.cpp:
        (WebCore::Biquad::Biquad):
        (WebCore::Biquad::~Biquad):
        (WebCore):
        (WebCore::Biquad::process):
        (WebCore::Biquad::reset):
        (WebCore::Biquad::setLowpassParams):
        (WebCore::Biquad::setHighpassParams):
        (WebCore::Biquad::setNormalizedCoefficients):
        (WebCore::Biquad::setZeroPolePairs):
        * platform/audio/Biquad.h:
        (Biquad):

2012-03-01  Peter Kotwicz  <pkotwicz@google.com>

        Decouple scrollbar painting from Scrollbar object
        https://bugs.webkit.org/show_bug.cgi?id=78028

        Reviewed by James Robinson.

        Added interface ScrollbarThemeClient which Scrollbar inherits from.
        This allows painting via ScrollbarTheme with a proxy to a Scrollbar
        object.

        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/Scrollbar.cpp:
        (WebCore::Scrollbar::scrollbarOverlayStyle):
        (WebCore):
        (WebCore::Scrollbar::getTickmarks):
        (WebCore::Scrollbar::isScrollableAreaActive):
        (WebCore::Scrollbar::isScrollViewScrollbar):
        (WebCore::Scrollbar::setFrameRect):
        * platform/Scrollbar.h:
        (Scrollbar):
        (WebCore::Scrollbar::x):
        (WebCore::Scrollbar::y):
        (WebCore::Scrollbar::width):
        (WebCore::Scrollbar::height):
        (WebCore::Scrollbar::size):
        (WebCore::Scrollbar::location):
        (WebCore::Scrollbar::parent):
        (WebCore::Scrollbar::root):
        (WebCore::Scrollbar::frameRect):
        (WebCore::Scrollbar::invalidate):
        (WebCore::Scrollbar::convertFromContainingWindow):
        (WebCore::Scrollbar::isCustomScrollbar):
        (WebCore::Scrollbar::orientation):
        (WebCore::Scrollbar::value):
        (WebCore::Scrollbar::currentPos):
        (WebCore::Scrollbar::visibleSize):
        (WebCore::Scrollbar::totalSize):
        (WebCore::Scrollbar::maximum):
        (WebCore::Scrollbar::controlSize):
        (WebCore::Scrollbar::lineStep):
        (WebCore::Scrollbar::pageStep):
        (WebCore::Scrollbar::pressedPart):
        (WebCore::Scrollbar::hoveredPart):
        (WebCore::Scrollbar::styleChanged):
        (WebCore::Scrollbar::enabled):
        * platform/ScrollbarTheme.h:
        (WebCore):
        (WebCore::ScrollbarTheme::updateEnabledState):
        (WebCore::ScrollbarTheme::paint):
        (WebCore::ScrollbarTheme::hitTest):
        (WebCore::ScrollbarTheme::updateScrollbarOverlayStyle):
        (WebCore::ScrollbarTheme::invalidateParts):
        (WebCore::ScrollbarTheme::invalidatePart):
        (WebCore::ScrollbarTheme::shouldCenterOnThumb):
        (WebCore::ScrollbarTheme::shouldSnapBackToDragOrigin):
        (WebCore::ScrollbarTheme::shouldDragDocumentInsteadOfThumb):
        (WebCore::ScrollbarTheme::thumbPosition):
        (WebCore::ScrollbarTheme::thumbLength):
        (WebCore::ScrollbarTheme::trackPosition):
        (WebCore::ScrollbarTheme::trackLength):
        (WebCore::ScrollbarTheme::registerScrollbar):
        (WebCore::ScrollbarTheme::unregisterScrollbar):
        * platform/ScrollbarThemeClient.h: Added.
        (WebCore):
        (ScrollbarThemeClient):
        (WebCore::ScrollbarThemeClient::~ScrollbarThemeClient):
        * platform/ScrollbarThemeComposite.cpp:
        (WebCore::ScrollbarThemeComposite::paint):
        (WebCore::ScrollbarThemeComposite::hitTest):
        (WebCore::ScrollbarThemeComposite::invalidatePart):
        (WebCore::ScrollbarThemeComposite::splitTrack):
        (WebCore::usedTotalSize):
        (WebCore::ScrollbarThemeComposite::thumbPosition):
        (WebCore::ScrollbarThemeComposite::thumbLength):
        (WebCore::ScrollbarThemeComposite::minimumThumbLength):
        (WebCore::ScrollbarThemeComposite::trackPosition):
        (WebCore::ScrollbarThemeComposite::trackLength):
        * platform/ScrollbarThemeComposite.h:
        (ScrollbarThemeComposite):
        (WebCore::ScrollbarThemeComposite::paintScrollbarBackground):
        (WebCore::ScrollbarThemeComposite::paintTrackBackground):
        (WebCore::ScrollbarThemeComposite::paintTrackPiece):
        (WebCore::ScrollbarThemeComposite::paintButton):
        (WebCore::ScrollbarThemeComposite::paintThumb):
        (WebCore::ScrollbarThemeComposite::paintTickmarks):
        (WebCore::ScrollbarThemeComposite::constrainTrackRectToTrackPieces):
        * platform/chromium/ScrollbarThemeChromium.cpp:
        (WebCore::ScrollbarThemeChromium::hasThumb):
        (WebCore::ScrollbarThemeChromium::backButtonRect):
        (WebCore::ScrollbarThemeChromium::forwardButtonRect):
        (WebCore::ScrollbarThemeChromium::trackRect):
        (WebCore::ScrollbarThemeChromium::paintTrackBackground):
        (WebCore::ScrollbarThemeChromium::paintTickmarks):
        * platform/chromium/ScrollbarThemeChromium.h:
        (WebCore::ScrollbarThemeChromium::hasButtons):
        (ScrollbarThemeChromium):
        * platform/chromium/ScrollbarThemeChromiumAndroid.cpp:
        (WebCore::ScrollbarThemeChromiumAndroid::paintScrollbarBackground):
        (WebCore::ScrollbarThemeChromiumAndroid::shouldCenterOnThumb):
        (WebCore::ScrollbarThemeChromiumAndroid::buttonSize):
        (WebCore::ScrollbarThemeChromiumAndroid::minimumThumbLength):
        * platform/chromium/ScrollbarThemeChromiumAndroid.h:
        (ScrollbarThemeChromiumAndroid):
        * platform/chromium/ScrollbarThemeChromiumLinux.cpp:
        (WebCore::ScrollbarThemeChromiumLinux::paintTrackPiece):
        (WebCore::ScrollbarThemeChromiumLinux::paintButton):
        (WebCore::ScrollbarThemeChromiumLinux::paintThumb):
        (WebCore::ScrollbarThemeChromiumLinux::shouldCenterOnThumb):
        (WebCore::ScrollbarThemeChromiumLinux::buttonSize):
        (WebCore::ScrollbarThemeChromiumLinux::minimumThumbLength):
        * platform/chromium/ScrollbarThemeChromiumLinux.h:
        (ScrollbarThemeChromiumLinux):
        * platform/chromium/ScrollbarThemeChromiumMac.h:
        (ScrollbarThemeChromiumMac):
        * platform/chromium/ScrollbarThemeChromiumMac.mm:
        (WebCore::scrollbarStateToThemeState):
        (WebCore::ScrollbarThemeChromiumMac::paint):
        (WebCore::ScrollbarThemeChromiumMac::paintGivenTickmarks):
        * platform/chromium/ScrollbarThemeChromiumWin.cpp:
        (WebCore::ScrollbarThemeChromiumWin::shouldSnapBackToDragOrigin):
        (WebCore::ScrollbarThemeChromiumWin::paintTrackPiece):
        (WebCore::ScrollbarThemeChromiumWin::paintButton):
        (WebCore::ScrollbarThemeChromiumWin::paintThumb):
        (WebCore::ScrollbarThemeChromiumWin::getThemeState):
        (WebCore::ScrollbarThemeChromiumWin::getThemeArrowState):
        (WebCore::ScrollbarThemeChromiumWin::getClassicThemeState):
        (WebCore::ScrollbarThemeChromiumWin::shouldCenterOnThumb):
        (WebCore::ScrollbarThemeChromiumWin::buttonSize):
        * platform/chromium/ScrollbarThemeChromiumWin.h:
        (ScrollbarThemeChromiumWin):
        * platform/efl/ScrollbarThemeEfl.cpp:
        (WebCore::ScrollbarThemeEfl::registerScrollbar):
        (WebCore::ScrollbarThemeEfl::unregisterScrollbar):
        * platform/efl/ScrollbarThemeEfl.h:
        (ScrollbarThemeEfl):
        * platform/gtk/ScrollbarThemeGtk.cpp:
        (WebCore):
        (WebCore::ScrollbarThemeGtk::registerScrollbar):
        (WebCore::ScrollbarThemeGtk::unregisterScrollbar):
        (WebCore::ScrollbarThemeGtk::updateScrollbarsFrameThickness):
        (WebCore::ScrollbarThemeGtk::hasThumb):
        (WebCore::ScrollbarThemeGtk::backButtonRect):
        (WebCore::ScrollbarThemeGtk::forwardButtonRect):
        (WebCore::ScrollbarThemeGtk::trackRect):
        (WebCore::ScrollbarThemeGtk::thumbRect):
        (WebCore::ScrollbarThemeGtk::paint):
        (WebCore::ScrollbarThemeGtk::shouldCenterOnThumb):
        (WebCore::ScrollbarThemeGtk::buttonSize):
        (WebCore::ScrollbarThemeGtk::minimumThumbLength):
        * platform/gtk/ScrollbarThemeGtk.h:
        (WebCore::ScrollbarThemeGtk::hasButtons):
        (ScrollbarThemeGtk):
        * platform/gtk/ScrollbarThemeGtk2.cpp:
        (WebCore::getWidgetForScrollbar):
        (WebCore::ScrollbarThemeGtk::paintTrackBackground):
        (WebCore::ScrollbarThemeGtk::paintScrollbarBackground):
        (WebCore::ScrollbarThemeGtk::paintThumb):
        (WebCore::ScrollbarThemeGtk::paintButton):
        * platform/gtk/ScrollbarThemeGtk3.cpp:
        (WebCore::ScrollbarThemeGtk::paintTrackBackground):
        (WebCore::ScrollbarThemeGtk::paintScrollbarBackground):
        (WebCore::ScrollbarThemeGtk::paintThumb):
        (WebCore::ScrollbarThemeGtk::paintButton):
        * platform/mac/ScrollbarThemeMac.h:
        (ScrollbarThemeMac):
        * platform/mac/ScrollbarThemeMac.mm:
        (WebCore):
        (WebCore::ScrollbarThemeMac::registerScrollbar):
        (WebCore::ScrollbarThemeMac::unregisterScrollbar):
        (WebCore::ScrollbarThemeMac::setNewPainterForScrollbar):
        (WebCore::ScrollbarThemeMac::painterForScrollbar):
        (WebCore::ScrollbarThemeMac::updateScrollbarOverlayStyle):
        (WebCore::ScrollbarThemeMac::hasButtons):
        (WebCore::ScrollbarThemeMac::hasThumb):
        (WebCore::ScrollbarThemeMac::backButtonRect):
        (WebCore::ScrollbarThemeMac::forwardButtonRect):
        (WebCore::ScrollbarThemeMac::trackRect):
        (WebCore::ScrollbarThemeMac::minimumThumbLength):
        (WebCore::ScrollbarThemeMac::shouldCenterOnThumb):
        (WebCore::ScrollbarThemeMac::shouldDragDocumentInsteadOfThumb):
        (WebCore::ScrollbarThemeMac::updateEnabledState):
        (WebCore::ScrollbarThemeMac::paint):
        * platform/mock/ScrollbarThemeMock.cpp:
        (WebCore::ScrollbarThemeMock::trackRect):
        (WebCore::ScrollbarThemeMock::paintTrackBackground):
        (WebCore::ScrollbarThemeMock::paintThumb):
        * platform/mock/ScrollbarThemeMock.h:
        (WebCore::ScrollbarThemeMock::hasButtons):
        (WebCore::ScrollbarThemeMock::hasThumb):
        (WebCore::ScrollbarThemeMock::backButtonRect):
        (WebCore::ScrollbarThemeMock::forwardButtonRect):
        (ScrollbarThemeMock):
        * platform/qt/ScrollbarThemeQt.cpp:
        (WebCore::styleOptionSlider):
        (WebCore::ScrollbarThemeQt::paint):
        (WebCore::ScrollbarThemeQt::hitTest):
        (WebCore::ScrollbarThemeQt::shouldCenterOnThumb):
        (WebCore::ScrollbarThemeQt::invalidatePart):
        (WebCore::ScrollbarThemeQt::thumbPosition):
        (WebCore::ScrollbarThemeQt::thumbLength):
        (WebCore::ScrollbarThemeQt::trackPosition):
        (WebCore::ScrollbarThemeQt::trackLength):
        * platform/qt/ScrollbarThemeQt.h:
        (ScrollbarThemeQt):
        * platform/win/ScrollbarThemeSafari.cpp:
        (WebCore::ScrollbarThemeSafari::hasButtons):
        (WebCore::ScrollbarThemeSafari::hasThumb):
        (WebCore::ScrollbarThemeSafari::backButtonRect):
        (WebCore::ScrollbarThemeSafari::forwardButtonRect):
        (WebCore::ScrollbarThemeSafari::trackRect):
        (WebCore::ScrollbarThemeSafari::minimumThumbLength):
        (WebCore::ScrollbarThemeSafari::shouldCenterOnThumb):
        (WebCore::ScrollbarThemeSafari::paintTrackBackground):
        (WebCore::ScrollbarThemeSafari::paintButton):
        (WebCore::ScrollbarThemeSafari::paintThumb):
        * platform/win/ScrollbarThemeSafari.h:
        (ScrollbarThemeSafari):
        * platform/win/ScrollbarThemeWin.cpp:
        (WebCore::ScrollbarThemeWin::hasThumb):
        (WebCore::ScrollbarThemeWin::backButtonRect):
        (WebCore::ScrollbarThemeWin::forwardButtonRect):
        (WebCore::ScrollbarThemeWin::trackRect):
        (WebCore::ScrollbarThemeWin::shouldCenterOnThumb):
        (WebCore::ScrollbarThemeWin::shouldSnapBackToDragOrigin):
        (WebCore::ScrollbarThemeWin::paintTrackBackground):
        (WebCore::ScrollbarThemeWin::paintTrackPiece):
        (WebCore::ScrollbarThemeWin::paintButton):
        (WebCore::paintGripper):
        (WebCore::ScrollbarThemeWin::paintThumb):
        * platform/win/ScrollbarThemeWin.h:
        (WebCore::ScrollbarThemeWin::hasButtons):
        (ScrollbarThemeWin):
        * platform/wx/ScrollbarThemeWx.cpp:
        (WebCore::ScrollbarThemeWx::hasThumb):
        (WebCore::ScrollbarThemeWx::minimumThumbLength):
        (WebCore::ScrollbarThemeWx::buttonSize):
        (WebCore::ScrollbarThemeWx::splitTrack):
        (WebCore::ScrollbarThemeWx::backButtonRect):
        (WebCore::ScrollbarThemeWx::forwardButtonRect):
        (WebCore::ScrollbarThemeWx::trackRect):
        (WebCore::ScrollbarThemeWx::paint):
        * platform/wx/ScrollbarThemeWx.h:
        (ScrollbarThemeWx):
        (WebCore::ScrollbarThemeWx::hasButtons):
        * rendering/RenderScrollbar.h:
        (WebCore::toRenderScrollbar):
        * rendering/RenderScrollbarTheme.cpp:
        (WebCore::RenderScrollbarTheme::buttonSizesAlongTrackAxis):
        (WebCore::RenderScrollbarTheme::hasButtons):
        (WebCore::RenderScrollbarTheme::hasThumb):
        (WebCore::RenderScrollbarTheme::minimumThumbLength):
        (WebCore::RenderScrollbarTheme::backButtonRect):
        (WebCore::RenderScrollbarTheme::forwardButtonRect):
        (WebCore::RenderScrollbarTheme::trackRect):
        (WebCore::RenderScrollbarTheme::constrainTrackRectToTrackPieces):
        (WebCore::RenderScrollbarTheme::paintScrollbarBackground):
        (WebCore::RenderScrollbarTheme::paintTrackBackground):
        (WebCore::RenderScrollbarTheme::paintTrackPiece):
        (WebCore::RenderScrollbarTheme::paintButton):
        (WebCore::RenderScrollbarTheme::paintThumb):
        * rendering/RenderScrollbarTheme.h:
        (WebCore::RenderScrollbarTheme::shouldCenterOnThumb):
        (WebCore::RenderScrollbarTheme::registerScrollbar):
        (WebCore::RenderScrollbarTheme::unregisterScrollbar):
        (RenderScrollbarTheme):

2012-03-01  Luke Macpherson   <macpherson@chromium.org>

        Implement CSSPropertyImageRendering in CSSStyleApplyProperty.
        https://bugs.webkit.org/show_bug.cgi?id=79855

        Reviewed by Eric Seidel.

        No new tests / refactoring only.

        * css/CSSStyleApplyProperty.cpp:
        (WebCore::CSSStyleApplyProperty::CSSStyleApplyProperty):
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::collectMatchingRulesForList):

2012-03-01  Alok Priyadarshi  <alokp@chromium.org>

        [chromium] Partial texture updates not happening with accelerated painting path
        https://bugs.webkit.org/show_bug.cgi?id=80040

        Reviewed by James Robinson.

        The order of y-flip and clip-rect was opposite of what it should be.
        The clip rect was not properly transformed to account for y-flip and hence clipping everything.  

        * platform/graphics/chromium/FrameBufferSkPictureCanvasLayerTextureUpdater.cpp:
        (WebCore::FrameBufferSkPictureCanvasLayerTextureUpdater::updateTextureRect):

2012-03-01  Alexey Proskuryakov  <ap@apple.com>

        FileReader read speed is way too low
        https://bugs.webkit.org/show_bug.cgi?id=77272

        Reviewed by Oliver Hunt.

        This brings performance to reasonable range, but certainly doesn't exhaust improvement opportunities.

        * platform/network/BlobResourceHandle.cpp: Use a more appropriate block size. Performing
        cross-thread messaging for every 1024 bytes is slow.

2012-03-01  Dan Bernstein  <mitz@apple.com>

        ScrollView::setFrameRect() calls contentsResized() even when the frame size is unchanged
        https://bugs.webkit.org/show_bug.cgi?id=80047

        Reviewed by Anders Carlsson.

        * platform/ScrollView.cpp:
        (WebCore::ScrollView::setFrameRect): Added a check that the new frame size differs from the
        old one before calling contentsResized().

2012-03-01  James Robinson  <jamesr@chromium.org>

        [chromium] Move pageScaleDirty logic from LayerChromium to GraphicsLayerChromium
        https://bugs.webkit.org/show_bug.cgi?id=79714

        Reviewed by Adrienne Walker.

        When the page scale changes on a composited layer we need to invalidate all of the contents on the layer in
        order to repaint them at the new scale. The sequence of calls we get make this a bit tricky, since we first
        receive a page scale changed notification and then receive the new layer bounds. The solution is to defer the
        invalidation until we have the new layer bounds, which landed in r99774.

        This moves that logic from LayerChromium into GraphicsLayerChromium since IMO this is pretty particular to the
        way WebCore is passing us invalidations and not something fundamental to the compositor.

        * platform/graphics/chromium/GraphicsLayerChromium.cpp:
        (WebCore::GraphicsLayerChromium::GraphicsLayerChromium):
        (WebCore::GraphicsLayerChromium::setSize):
        (WebCore::GraphicsLayerChromium::deviceOrPageScaleFactorChanged):
        * platform/graphics/chromium/GraphicsLayerChromium.h:
        * platform/graphics/chromium/LayerChromium.cpp:
        (WebCore::LayerChromium::LayerChromium):
        (WebCore::LayerChromium::setBounds):
        * platform/graphics/chromium/LayerChromium.h:
        (LayerChromium):

2012-03-01  Joe Thomas  <joethomas@motorola.com>

        :empty still applies to elements made non-empty via page dynamics.
        https://bugs.webkit.org/show_bug.cgi?id=79734

        Check for :empty style change should be made even if the RenderStyle for the element is NULL
        as changes to the element's children can trigger a change in :empty state of the parent element.

        Reviewed by Antti Koivisto.

        Test: fast/selectors/empty-element-made-non-empty.html

        * dom/Element.cpp:
        (WebCore::checkForSiblingStyleChanges):

2012-02-29  Nat Duca  <nduca@chromium.org>

        [chromium] Move context lost control code from CCSingleThreadProxy to CCLayerTreeHost
        https://bugs.webkit.org/show_bug.cgi?id=79964

        Reviewed by James Robinson.

        * platform/graphics/chromium/cc/CCLayerTreeHost.cpp:
        (WebCore::CCLayerTreeHost::CCLayerTreeHost):
        (WebCore::CCLayerTreeHost::initializeLayerRenderer):
        (WebCore::CCLayerTreeHost::recreateContext):
        (WebCore::CCLayerTreeHost::createContext):
        (WebCore::CCLayerTreeHost::didLoseContext):
        (WebCore::CCLayerTreeHost::compositeAndReadback):
        (WebCore::CCLayerTreeHost::loseContext):
        (WebCore::CCLayerTreeHost::updateLayers):
        * platform/graphics/chromium/cc/CCLayerTreeHost.h:
        (CCLayerTreeHostClient):
        (CCLayerTreeHost):
        * platform/graphics/chromium/cc/CCProxy.h:
        (CCProxy):
        * platform/graphics/chromium/cc/CCSingleThreadProxy.cpp:
        (WebCore::CCSingleThreadProxy::CCSingleThreadProxy):
        (WebCore::CCSingleThreadProxy::compositeAndReadback):
        (WebCore::CCSingleThreadProxy::initializeContext):
        (WebCore::CCSingleThreadProxy::recreateContext):
        (WebCore):
        (WebCore::CCSingleThreadProxy::loseContext):
        (WebCore::CCSingleThreadProxy::compositeImmediately):
        (WebCore::CCSingleThreadProxy::doComposite):
        * platform/graphics/chromium/cc/CCSingleThreadProxy.h:
        (CCSingleThreadProxy):
        * platform/graphics/chromium/cc/CCThreadProxy.cpp:
        (WebCore::CCThreadProxy::initializeContext):
        (WebCore::CCThreadProxy::recreateContext):
        (WebCore):
        (WebCore::CCThreadProxy::loseContext):
        * platform/graphics/chromium/cc/CCThreadProxy.h:
        (CCThreadProxy):

2012-03-01  Abhishek Arya  <inferno@chromium.org>

        Prevent layout root to remain set on renderers getting destroyed.
        https://bugs.webkit.org/show_bug.cgi?id=79953

        Reviewed by Eric Seidel.

        Implement Julien Chaffraix's idea.

        * page/FrameView.h:
        (WebCore::FrameView::clearLayoutRoot): helper to clear layout root.
        * rendering/RenderObject.cpp:
        (WebCore::clearLayoutRootIfNeeded): if we know we are going
        away and we are the view's layout root, then we need to reset the layout
        root to prevent being used.
        (WebCore):
        (WebCore::RenderObject::willBeDestroyed): call clearLayoutRootIfNeeded at end.

2012-03-01  Kangil Han  <kangil.han@samsung.com>

        [DRT] Remove all PlainTextController usages in existing tests by adding internal API
        https://bugs.webkit.org/show_bug.cgi?id=78570

        Reviewed by Hajime Morita.

        This patch will remove all PlainTextController usages
        in existing DRT tests by adding internal API to WebCore/testing/Internals

        Changed editing/text-iterator/script-tests/basic-iteration.js to use internals.rangeAsText

        * testing/Internals.cpp:
        (WebCore::Internals::rangeAsText):
        (WebCore):
        * testing/Internals.h:
        (Internals):
        * testing/Internals.idl:

2012-03-01  Adam Barth  <abarth@webkit.org>

        DOMWindow shouldn't have any INDEXED_DATABASE ifdefs
        https://bugs.webkit.org/show_bug.cgi?id=80013

        Reviewed by Kentaro Hara.

        Before this patch, DOMWindow still knew about IDB because of the
        database factory.  This patch moves the factory to
        DOMWindowIndexedDatabase.

        * Modules/indexeddb/DOMWindowIndexedDatabase.cpp:
        (WebCore::DOMWindowIndexedDatabase::DOMWindowIndexedDatabase):
        (WebCore::DOMWindowIndexedDatabase::from):
        (WebCore):
        (WebCore::DOMWindowIndexedDatabase::disconnectFrame):
        (WebCore::DOMWindowIndexedDatabase::webkitIndexedDB):
        * Modules/indexeddb/DOMWindowIndexedDatabase.h:
        (DOMWindowIndexedDatabase):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::~DOMWindow):
        (WebCore::DOMWindow::clear):
        (WebCore):
        * page/DOMWindow.h:
        (DOMWindow):

2012-03-01  Anders Carlsson  <andersca@apple.com>

        Glitchy scrolling on pages where the scroll layer needs to be updated on the main thread
        https://bugs.webkit.org/show_bug.cgi?id=80038
        <rdar://problem/10933831>

        Reviewed by Simon Fraser.

        When we need to update the scroll layer position on the main thread, we need to cache the
        scroll position we sent to the main thread and assume that that's the correct scroll position.

        * page/scrolling/mac/ScrollingTreeNodeMac.h:
        (ScrollingTreeNodeMac):
        * page/scrolling/mac/ScrollingTreeNodeMac.mm:
        (WebCore::ScrollingTreeNodeMac::update):
        (WebCore::ScrollingTreeNodeMac::setScrollPosition):
        (WebCore::ScrollingTreeNodeMac::scrollPosition):

2012-03-01  Julien Chaffraix  <jchaffraix@webkit.org>

        Unreviewed, rolling out r109367.
        http://trac.webkit.org/changeset/109367
        https://bugs.webkit.org/show_bug.cgi?id=75568

        Some tests started to fail in a non obvious way.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::updateScrollInfoAfterLayout):
        (WebCore::RenderBlock::layoutBlock):
        (WebCore::RenderBlock::paint):
        (WebCore::RenderBlock::isPointInOverflowControl):
        * rendering/RenderBlock.h:
        (RenderBlock):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::willBeDestroyed):
        (WebCore::RenderBox::styleDidChange):
        (WebCore::RenderBox::scrollWidth):
        (WebCore::RenderBox::scrollHeight):
        (WebCore::RenderBox::scrollLeft):
        (WebCore::RenderBox::scrollTop):
        (WebCore::RenderBox::setScrollLeft):
        (WebCore::RenderBox::setScrollTop):
        (WebCore::RenderBox::includeVerticalScrollbarSize):
        (WebCore::RenderBox::includeHorizontalScrollbarSize):
        (WebCore::RenderBox::scrolledContentOffset):
        (WebCore::RenderBox::cachedSizeForOverflowClip):
        (WebCore::RenderBox::pushContentsClip):
        (WebCore::RenderBox::popContentsClip):
        (WebCore::RenderBox::addLayoutOverflow):
        * rendering/RenderBox.h:
        (RenderBox):
        (WebCore):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore):
        (WebCore::RenderBoxModelObject::styleDidChange):
        * rendering/RenderBoxModelObject.h:
        (WebCore::RenderBoxModelObject::requiresLayer):
        (RenderBoxModelObject):
        * rendering/RenderDeprecatedFlexibleBox.cpp:
        (WebCore::RenderDeprecatedFlexibleBox::layoutBlock):
        * rendering/RenderTableRow.h:
        (WebCore::RenderTableRow::requiresLayer):

2012-03-01  Kenichi Ishibashi  <bashi@chromium.org>

        REGRESSION: Outlook 2007 doesn't display fonts correctly on emails composed by WebKit
        https://bugs.webkit.org/show_bug.cgi?id=79448

        Reviewed by Ryosuke Niwa.

        Don't produce single quotes around face attribute of font elements.

        Test: editing/style/font-face-unquote.html

        * editing/EditingStyle.cpp:
        (WebCore::StyleChange::extractTextStyles): Remove single quotes from m_applyFontFace.

2012-03-01  Beth Dakin  <bdakin@apple.com>

        Reviewed by Kevin Decker.

        Part of https://bugs.webkit.org/show_bug.cgi?id=79705

        Here's some of that tweaking promised in the comment. Adjusting 
        gMaximumUnpaintedAreaRatio down a bit.
        * page/Page.cpp:
        (WebCore):

2012-03-01  Levi Weintraub  <leviw@chromium.org>

        Add roundToInt method for LayoutUnits
        https://bugs.webkit.org/show_bug.cgi?id=79283

        Reviewed by Eric Seidel.

        Adding a roundToInt method that rounds a LayoutUnit to the nearest integer. This
        only has an effect once we switch to sub-pixel positioning. Points and offsets
        are rounded for painting and hit testing.

        No new tests. No change in behavior.

        * dom/MouseRelatedEvent.cpp:
        (WebCore::MouseRelatedEvent::offsetX):
        (WebCore::MouseRelatedEvent::offsetY):
        * html/shadow/MediaControlElements.cpp:
        (WebCore::MediaControlTextTrackContainerElement::updateSizes):
        * rendering/LayoutState.cpp:
        (WebCore::LayoutState::computeLineGridPaginationOrigin):
        * rendering/LayoutTypes.h:
        (WebCore::roundToInt): Stub until we switch to sub-pixel LayoutUnits.
        (WebCore):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::pageLogicalTopForOffset):
        * rendering/RenderBlock.h:
        (WebCore::RenderBlock::pixelSnappedLogicalLeftOffsetForLine): Correcting to use the
        pixel snapped methods on FloatingObjects and removing the fixme.
        (WebCore::RenderBlock::pixelSnappedLogicalTopForFloat): Ditto.
        (WebCore::RenderBlock::pixelSnappedLogicalBottomForFloat): Ditto.
        (WebCore::RenderBlock::pixelSnappedLogicalLeftForFloat): Ditto.
        (WebCore::RenderBlock::pixelSnappedLogicalRightForFloat): Ditto.
        (WebCore::RenderBlock::pixelSnappedLogicalWidthForFloat): Ditto.
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::LineWidth::updateAvailableWidth):
        (WebCore::RenderBlock::computeInlineDirectionPositionsForLine): Using
        pixelSnappedLogicalLeft/RightOffsetForLine convenience methods for line layout. When
        we switch to sub-pixel positioning, we still pixel snap blocks before painting them,
        but text is rendered using floats. We need to ensure the text is laid out using the
        actual pixel width of the containing block to avoid bleeding out of the block.
        * rendering/RenderBoxModelObject.h: Moving the fixme to pixelSnappedWidth/Height and
        adding the necessary rounding for Left/Top.
        (WebCore::RenderBoxModelObject::pixelSnappedOffsetLeft):
        (WebCore::RenderBoxModelObject::pixelSnappedOffsetTop):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::scrollRectToVisible):
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::scrollHeight): Rounding the height for scrollHeight. Scrolling
        always uses rounded values.
        * rendering/svg/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::localToParentTransform): Similar to the line box tree, since
        SVG renders using floats, we need to start with pixel snapped values from the render
        tree or we'll end up with the contents not properly aligned to the rest of the page.
        * rendering/svg/SVGRenderSupport.cpp:
        (WebCore::SVGRenderSupport::prepareToRenderSVGContent):

2012-03-01  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: arrays in object properties sections do not scale.
        https://bugs.webkit.org/show_bug.cgi?id=64596

        Reviewed by Vsevolod Vlasov.

        Test: inspector/console/console-big-array.html

        * inspector/front-end/ConsoleMessage.js:
        (WebInspector.ConsoleMessageImpl.prototype._formatParameterAsArray):
        (WebInspector.ConsoleMessageImpl.prototype._printArray):
        * inspector/front-end/ObjectPropertiesSection.js:
        (WebInspector.ObjectPropertiesSection.prototype.updateProperties):
        (WebInspector.ObjectPropertyTreeElement.prototype.onpopulate.callback):
        (WebInspector.ObjectPropertyTreeElement.prototype.onpopulate):
        (WebInspector.ObjectPropertyTreeElement.prototype.startEditing):
        (WebInspector.ArrayGroupingTreeElement):
        (WebInspector.ArrayGroupingTreeElement.populateAsArray):
        (WebInspector.ArrayGroupingTreeElement._populate.appendElement):
        (WebInspector.ArrayGroupingTreeElement._populate):
        (WebInspector.ArrayGroupingTreeElement.prototype.onpopulate):
        * inspector/front-end/RemoteObject.js:
        (WebInspector.RemoteObject.prototype.release):
        (WebInspector.RemoteObject.prototype.arrayLength):
        (WebInspector.LocalJSONObject.prototype.isError):
        (WebInspector.LocalJSONObject.prototype.arrayLength):
        * inspector/front-end/ScopeChainSidebarPane.js:
        (WebInspector.ScopeVariableTreeElement.prototype.get propertyPath):
        * inspector/front-end/StylesSidebarPane.js:
        (WebInspector.StylePropertyTreeElement.prototype._mouseDown):
        * inspector/front-end/inspector.css:
        (.console-formatted-object, .console-formatted-node, .console-formatted-array):
        (.console-formatted-object .section, .console-formatted-node .section, .console-formatted-array .section):

2012-03-01  Adam Barth  <abarth@webkit.org>

        Unreviewed, rolling out r109336.
        http://trac.webkit.org/changeset/109336
        https://bugs.webkit.org/show_bug.cgi?id=80013

        It's causing some crashes

        * Modules/indexeddb/DOMWindowIndexedDatabase.cpp:
        (WebCore::DOMWindowIndexedDatabase::DOMWindowIndexedDatabase):
        (WebCore::DOMWindowIndexedDatabase::webkitIndexedDB):
        * Modules/indexeddb/DOMWindowIndexedDatabase.h:
        (DOMWindowIndexedDatabase):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::~DOMWindow):
        (WebCore::DOMWindow::clear):
        (WebCore):
        (WebCore::DOMWindow::setIDBFactory):
        * page/DOMWindow.h:
        (DOMWindow):
        (WebCore::DOMWindow::idbFactory):

2012-03-01  Tom Sepez  <tsepez@chromium.org>

        Move m_frame protector from FrameLoader::changeLocation to FrameLoader::urlSelected
        https://bugs.webkit.org/show_bug.cgi?id=79882

        Reviewed by Adam Barth.

        Test: fast/frames/url-selected-crash.html

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::changeLocation):
        (WebCore::FrameLoader::urlSelected):

2012-03-01  Julien Chaffraix  <jchaffraix@webkit.org>

        Lazily allocate overflow: hidden layers if we have overflowing content
        https://bugs.webkit.org/show_bug.cgi?id=75568

        Reviewed by David Hyatt.

        Change covered by the existing tests and the tons of rebaselines.

        This change makes us lazily allocate our RenderLayer for overflow: hidden layers only.

        Apart from saving some memory, it will also speed up the rendering as we don't need to
        go through the layer's machinery when painting and hit testing.

        On http://dglazkov.github.com/performance-tests/biggrid.html benchmark, this puts the
        overflow: hidden case in par with the overflow: visible case when scrolling that is a
        very-smooth scrolling vs a jerky one currently (mostly due to the painting speedup).

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::updateScrollInfoAfterLayout):
        Changed this method to update our size cache if needed.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::layoutBlock):
        (WebCore::RenderBlock::paint):
        (WebCore::RenderBlock::isPointInOverflowControl):
        * rendering/RenderBlock.h:
        (RenderBlock):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::styleDidChange):
        (WebCore::RenderBox::scrollWidth):
        (WebCore::RenderBox::scrollHeight):
        (WebCore::RenderBox::scrollLeft):
        (WebCore::RenderBox::scrollTop):
        (WebCore::RenderBox::setScrollLeft):
        (WebCore::RenderBox::setScrollTop):
        (WebCore::RenderBox::includeVerticalScrollbarSize):
        (WebCore::RenderBox::includeHorizontalScrollbarSize):
        (WebCore::RenderBox::pushContentsClip):
        (WebCore::RenderBox::popContentsClip):
        (WebCore::RenderBox::addLayoutOverflow):
        Added layer() check to the previous call sites.

        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::ensureLayer):
        Added this function to create and add a new layer.

        (WebCore::RenderBoxModelObject::willBeDestroyed):
        (WebCore):
        (WebCore::RenderBoxModelObject::styleDidChange):
        Patched those method to handle updating / removing
        cached size entries.

        (WebCore::cachedSizeForOverflowClipMap):
        (WebCore::RenderBoxModelObject::cachedSizeForOverflowClip):
        (WebCore::RenderBoxModelObject::updateCachedSizeForOverflowClip):
        (WebCore::RenderBoxModelObject::clearCachedSizeForOverflowClip):
        This logic stores the size information for later repainting.
        It is in practice replicating what RenderLayer is doing.

        * rendering/RenderBoxModelObject.h:
        (WebCore::RenderBoxModelObject::requiresLayer):
        Updated to call requiresLayerForOverflowClip.

        (WebCore::RenderBoxModelObject::requiresLayerForOverflowClip):
        Added this method to check if we can lazily allocate the layer.

        * rendering/RenderDeprecatedFlexibleBox.cpp:
        (WebCore::RenderDeprecatedFlexibleBox::layoutBlock):
        Removed some checks as they are part of updateScrollInfoAfterLayout.

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::scrolledContentOffset):
        Added a layer() check.

        * rendering/RenderTableRow.h:
        (RenderTableRow):
        Added a comment about why we need a layout for table rows.

2012-03-01  Abhishek Arya  <inferno@chromium.org>

        Protect functions using two container node function, each of which can fire mutation events.
        https://bugs.webkit.org/show_bug.cgi?id=78397

        Reviewed by Ryosuke Niwa.

        Tests: fast/dom/document-set-title-mutation-crash.html
               fast/dom/option-text-mutation-crash.html

        * dom/Node.cpp:
        (WebCore::Node::setTextContent):
        * dom/Text.cpp:
        (WebCore::Text::replaceWholeText):
        * editing/markup.cpp:
        (WebCore::trimFragment):
        (WebCore::replaceChildrenWithFragment):
        (WebCore::replaceChildrenWithText):
        * html/HTMLOptionElement.cpp:
        (WebCore::HTMLOptionElement::setText):
        * html/HTMLScriptElement.cpp:
        (WebCore::HTMLScriptElement::setText):
        * html/HTMLTableElement.cpp:
        (WebCore::HTMLTableElement::insertRow):
        * html/HTMLTextAreaElement.cpp:
        (WebCore::HTMLTextAreaElement::setDefaultValue):
        * html/HTMLTitleElement.cpp:
        (WebCore::HTMLTitleElement::setText):

2012-03-01  Alexey Proskuryakov  <ap@apple.com>

        Some trivial file stream cleanup
        https://bugs.webkit.org/show_bug.cgi?id=79955

        Reviewed by Sam Weinig.

        No change in functionality.

        * fileapi/FileStreamProxy.cpp: Tweaked comment, and added copyright for earlier changes.

        * fileapi/FileStreamProxy.h: Added a FIXME telling that this should be in platform.

        * platform/AsyncFileStream.h: Tweaked includes and added a FIXME about this to stop being
        a subclass.

        * platform/FileStreamClient.h: Removed obvious comments, and added ones explaing in-band
        error signals.

        * platform/network/BlobResourceHandle.cpp: Removed an include outside of platform, and an
        unused constant.

2012-03-01  Shinya Kawanaka  <shinyak@chromium.org>

        Appending ShadowRoot into an element should not cause crash.
        https://bugs.webkit.org/show_bug.cgi?id=79620

        Reviewed by Dimitri Glazkov.

        We should treat ShadowRoot as a document fragment.

        Test: fast/dom/shadow/shadow-root-append.html

        * dom/ContainerNode.cpp:
        (WebCore::collectTargetNodes):

2012-03-01  Pavel Podivilov  <podivilov@chromium.org>

        Web Inspector: use live location to update console message bubbles.
        https://bugs.webkit.org/show_bug.cgi?id=80023

        Reviewed by Vsevolod Vlasov.

        * inspector/front-end/DebuggerPresentationModel.js:
        (WebInspector.DebuggerPresentationModel):
        (WebInspector.DebuggerPresentationModel.prototype._uiSourceCodeListChanged):
        (WebInspector.DebuggerPresentationModel.prototype._consoleMessageAdded):
        (WebInspector.DebuggerPresentationModel.prototype._addConsoleMessageToScript.updateLocation):
        (WebInspector.DebuggerPresentationModel.prototype._addConsoleMessageToScript):
        (WebInspector.DebuggerPresentationModel.prototype._addPendingConsoleMessage):
        (WebInspector.DebuggerPresentationModel.prototype._addPendingConsoleMessagesToScript):
        (WebInspector.DebuggerPresentationModel.prototype._consoleCleared):
        (WebInspector.DebuggerPresentationModel.prototype.messagesForUISourceCode):
        (WebInspector.DebuggerPresentationModel.prototype._scriptForURLAndLocation):
        (WebInspector.DebuggerPresentationModel.prototype._debuggerReset):
        * inspector/front-end/RawSourceCode.js:
        (WebInspector.RawSourceCode):

2012-03-01  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: [InspectorIndexedDB] Show tooltips with IndexedDB objects meta information
        https://bugs.webkit.org/show_bug.cgi?id=80022

        Reviewed by Pavel Feldman.

        Added tooltips with meta information for IndexedDB databases, object stores and indexes.
        Added keyPath: prefix to key columns in IndexedDB data grid.

        * English.lproj/localizedStrings.js:
        * inspector/front-end/IndexedDBViews.js:
        (WebInspector.IDBDataView.prototype._createDataGrid):
        (WebInspector.IDBDataView.prototype._keyPathHeader):
        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.IDBDatabaseTreeElement.prototype.update):
        (WebInspector.IDBDatabaseTreeElement.prototype._updateTooltip):
        (WebInspector.IDBObjectStoreTreeElement.prototype.update):
        (WebInspector.IDBObjectStoreTreeElement.prototype._updateTooltip):
        (WebInspector.IDBIndexTreeElement.prototype.update):
        (WebInspector.IDBIndexTreeElement.prototype._updateTooltip):

2012-03-01  Pavel Feldman  <pfeldman@google.com>

        Web Inspector: hide color picker on Esc and Enter.
        https://bugs.webkit.org/show_bug.cgi?id=79915

        Reviewed by Vsevolod Vlasov.

        * inspector/front-end/Spectrum.js:
        (WebInspector.Spectrum.prototype.reposition):
        (WebInspector.Spectrum.prototype.hide):
        (WebInspector.Spectrum.prototype._onKeyDown):

2012-03-01  Huang Dongsung  <luxtella@company100.net>

        [Qt] Fixed incorrect size pixmap creation for a new transparency layer.
        https://bugs.webkit.org/show_bug.cgi?id=79658

        If QPainter does not have clipping, beginPlatformTransparencyLayer can create
        wrong size pixmap, so it causes incorrect rendering.

        Reviewed by Simon Hausmann.

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

2012-03-01  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] Remove dead style option code.
        https://bugs.webkit.org/show_bug.cgi?id=80017

        Reviewed by Kenneth Rohde Christiansen.

        QtStyleOptionWebComboBox provides functionality (bool multiple()) that
        is not called from anywhere (and the base class does not have it as a
        virtual function).

        * Target.pri:
        * platform/qt/QtStyleOptionWebComboBox.h: Removed.
        * platform/qt/RenderThemeQStyle.cpp:
        (WebCore::RenderThemeQStyle::paintMenuList):
        (WebCore::RenderThemeQStyle::paintMenuListButton):

2012-03-01  Stephen Chenney  <schenney@chromium.org>

        Crash in WebCore::SVGDocumentExtensions::removeAnimationElementFromTarget
        https://bugs.webkit.org/show_bug.cgi?id=79831

        Reviewed by Eric Seidel.

        Out-of-order operations in the SVGSMILElement::removedFromDocument
        method caused its target to be removed and then re-added due to a
        later call. This led to the target being set on the animation while
        the target element itself was unaware. At deletion time, this caused a
        crash (or assert in debug builds). Thanks to Abhishek Arya for help
        with the layout test.

        Test: svg/animations/smil-element-target-crash-main.html

        * svg/animation/SVGSMILElement.cpp:
        (WebCore::SVGSMILElement::removedFromDocument):

2012-03-01  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: move heap snapshot nodes data to external array.
        https://bugs.webkit.org/show_bug.cgi?id=79911

        Reviewed by Vsevolod Vlasov.

        Tests:
        heap-shapshot.html
        heap-shapshot-loader.html

        * inspector/front-end/HeapSnapshot.js:
        (WebInspector.Int32Array):
        (WebInspector.Int32Array.prototype.get array):
        (WebInspector.HeapSnapshotLoader.prototype._parseNodes):
        (WebInspector.HeapSnapshotLoader.prototype.pushJSONChunk):
        (WebInspector.HeapSnapshot):
        (WebInspector.HeapSnapshot.prototype._init):

2012-03-01  Nikolas Zimmermann  <nzimmermann@rim.com>

        Introduce SMIL overrideStyle, to make SVG stop mutating CSS styles directly
        https://bugs.webkit.org/show_bug.cgi?id=79790

        Reviewed by Zoltan Herczeg.

        Next step towards enabling animVal support for XML attribute animations.
        When SVG CSS properties are animated using SMIL, we currently mutate
        the target elements style, and have to keep a baseValue around as String
        to be able to recover from the DOM mutations at the end, if fill!="freeze".

        The approach required by SMIL is to keep around an override style declaration
        set and apply it right after the inline style declarations. Implement that
        finally, to avoid mutating styles directly.

        Test: svg/animations/attributeTypes.html

        * css/CSSStyleSelector.cpp: Model "SMIL animation style" applying just like "inline style" declarations.
        (WebCore::CSSStyleSelector::addElementStyleProperties): Refactored common code from matchAllRules().
        (WebCore::CSSStyleSelector::matchAllRules): Apply "SMIL animation style" after "inline style" declarations, as specified in SMIL2.
        * css/CSSStyleSelector.h: Add new addElementStyleProperties() helper.
        * svg/SVGAnimateElement.cpp: Keep track of animation state, if it's about to end, clear "SMIL animation style" upon next applyResultToTarget() call.
        (WebCore::SVGAnimateElement::SVGAnimateElement):
        (WebCore::SVGAnimateElement::applyResultsToTarget): Reset the CSS property we're animating int the "SMIL animation style", after animation ends.
                                                            (Instead of resetting target->style() properties to the old baseValue, as we used to do).
        (WebCore::SVGAnimateElement::endedActiveInterval): Set m_aboutToStopAnimation to true, so next call to applyResultsToTarget() knows the animation ends.
        * svg/SVGAnimateElement.h: Store bool m_aboutToSTopAnimation;
        * svg/SVGAnimationElement.cpp:
        (WebCore::setTargetAttributeAnimatedCSSValue):
        (WebCore::setTargetAttributeAnimatedXMLValue):
            Refactored both of these methods from setTargetAttributeAnimatedValue().
            Changed the CSS part, to apply property changes to the "SMIL animation style" instead of the regular StylePropertySet.
        (WebCore::SVGAnimationElement::setTargetAttributeAnimatedValue): Refactored code, use shouldApplyAnimation() to determine whether this animation should run.
        (WebCore::SVGAnimationElement::resetAnimationState): New helper calling setTargetAttributeAnimatedValue with a null-string for CSS attributes, when the animation ends.
                                                             This is used to detect that the CSS property should be removed from the "SMIL animation style".
        (WebCore::SVGAnimationElement::shouldApplyAnimation): Refactored from existing code, and make it more obvious how attributeType influences the animation, all according to SVG 1.1/SMIL2.
        * svg/SVGAnimationElement.h:
        * svg/SVGElement.cpp: Manage the "SMIL animation style", in SVGElementRareData, if needed. Only gets created if SMIL animations on CSS properties run.
        (WebCore::SVGElement::~SVGElement): Destroy SMIL animation style, upon destruction.
        (WebCore::SVGElement::animatedSMILStyleProperties): Returns the StylePropertySet for the "SMIL animation style", if it's available.
        (WebCore::SVGElement::ensureAnimatedSMILStyleProperties): Enforces creating the StylePropertySet for the "SMIL animation style".
        * svg/SVGElement.h: Expose new methods.
        * svg/SVGElementRareData.h: Stores the "SMIL animation style", actual managment is done by SVGElement, if needed.
        (WebCore::SVGElementRareData::animatedSMILStyleProperties): Retrieve it.
        (WebCore::SVGElementRareData::ensureAnimatedSMILStyleProperties): Create it.
        (WebCore::SVGElementRareData::destroyAnimatedSMILStyleProperties): Destroy it.
        * svg/animation/SVGSMILElement.h: Make endedActiveInterval() virtual again, its needed by SVGAnimateElement now.

2012-03-01  Nikolas Zimmermann  <nzimmermann@rim.com>

        Unreviewed, rolling out r109255.
        http://trac.webkit.org/changeset/109255
        https://bugs.webkit.org/show_bug.cgi?id=79932

        Breaks rounded rects with dashed strokes in SVG

        * WebCore.exp.in:
        * platform/graphics/Path.cpp:
        (WebCore::Path::addRoundedRect):
        * platform/graphics/Path.h:
        (Path):
        * platform/graphics/cg/PathCG.cpp:
        * platform/mac/WebCoreSystemInterface.h:
        * platform/mac/WebCoreSystemInterface.mm:

2012-03-01  Adam Barth  <abarth@webkit.org>

        DOMWindow shouldn't have any INDEXED_DATABASE ifdefs
        https://bugs.webkit.org/show_bug.cgi?id=80013

        Reviewed by Kentaro Hara.

        Before this patch, DOMWindow still knew about IDB because of the
        database factory.  This patch moves the factory to
        DOMWindowIndexedDatabase.

        * Modules/indexeddb/DOMWindowIndexedDatabase.cpp:
        (WebCore::DOMWindowIndexedDatabase::DOMWindowIndexedDatabase):
        (WebCore::DOMWindowIndexedDatabase::from):
        (WebCore):
        (WebCore::DOMWindowIndexedDatabase::disconnectFrame):
        (WebCore::DOMWindowIndexedDatabase::webkitIndexedDB):
        * Modules/indexeddb/DOMWindowIndexedDatabase.h:
        (DOMWindowIndexedDatabase):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::~DOMWindow):
        (WebCore::DOMWindow::clear):
        (WebCore):
        * page/DOMWindow.h:
        (DOMWindow):

2012-03-01  Nikolas Zimmermann  <nzimmermann@rim.com>

        SVG <use> element allows invalid contents
        https://bugs.webkit.org/show_bug.cgi?id=77764

        Reviewed by Zoltan Herczeg.

        Unbreak the world after r109299 - dozens of SVGUseElement tests fail in trunk because:
        - text nodes weren't allowed in SVG shadow subtrees
        - tagName matching ignores any prefixes, thus svg:circle fails to identify as SVGCircleElement

        * svg/SVGUseElement.cpp:
        (WebCore::isDisallowedElement):

2012-03-01  Luke Macpherson   <macpherson@chromium.org>

        Handle CSSPropertyWebkitHyphens in CSSStyleApplyProperty.
        https://bugs.webkit.org/show_bug.cgi?id=80004

        Reviewed by Eric Seidel.

        No new tests / refactoring only.

        * css/CSSStyleApplyProperty.cpp:
        (WebCore::CSSStyleApplyProperty::CSSStyleApplyProperty):
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::collectMatchingRulesForList):

2012-02-29  Pavel Podivilov  <podivilov@chromium.org>

        Web Inspector: abstract out the common pattern of creating auto-updated locations.
        https://bugs.webkit.org/show_bug.cgi?id=79906

        Reviewed by Vsevolod Vlasov.

        * inspector/front-end/DebuggerPresentationModel.js:
        (WebInspector.PresentationCallFrame.prototype.uiLocation):
        (WebInspector.DebuggerPresentationModel.CallFramePlacard):
        (WebInspector.DebuggerPresentationModel.CallFramePlacard.prototype.discard):
        (WebInspector.DebuggerPresentationModel.CallFramePlacard.prototype._update):
        (WebInspector.DebuggerPresentationModel.LinkifierFormatter.prototype.formatRawSourceCodeAnchor):
        (WebInspector.DebuggerPresentationModel.DefaultLinkifierFormatter.prototype.formatRawSourceCodeAnchor):
        (WebInspector.DebuggerPresentationModel.Linkifier):
        (WebInspector.DebuggerPresentationModel.Linkifier.prototype.linkifyRawSourceCode):
        (WebInspector.DebuggerPresentationModel.Linkifier.prototype.reset):
        (WebInspector.DebuggerPresentationModel.Linkifier.prototype._updateAnchor):
        * inspector/front-end/RawSourceCode.js:
        (WebInspector.RawSourceCode.prototype.createLiveLocation):
        (WebInspector.RawSourceCode.LiveLocation):
        (WebInspector.RawSourceCode.LiveLocation.prototype.init):
        (WebInspector.RawSourceCode.LiveLocation.prototype.dispose):
        (WebInspector.RawSourceCode.LiveLocation.prototype._update):

2012-03-01  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Make the tiling code slightly smarter
        https://bugs.webkit.org/show_bug.cgi?id=80015

        Reviewed by Simon Hausmann.

        Avoid doing the same tranformations all over in each call to
        tileRectForCoordinate.

        Do not resize tiles and then drop them because they are not out of
        the keep rect; instead drop before resizing.

        Rename dropTilesOutsideRect to setKeepRect as it now stored the keep
        rect. This is used to avoid unneeded iteration of all tiles for
        invalidates outside the keep rect.

        * platform/graphics/TiledBackingStore.cpp:
        (WebCore::TiledBackingStore::invalidate):
        (WebCore):
        (WebCore::TiledBackingStore::commitScaleChange):
        (WebCore::TiledBackingStore::coverageRatio):
        (WebCore::TiledBackingStore::createTiles):
        (WebCore::TiledBackingStore::adjustForContentsRect):
        (WebCore::TiledBackingStore::resizeEdgeTiles):
        (WebCore::TiledBackingStore::setKeepRect):
        (WebCore::TiledBackingStore::removeAllNonVisibleTiles):
        (WebCore::TiledBackingStore::tileRectForCoordinate):
        (WebCore::TiledBackingStore::setSupportsAlpha):
        * platform/graphics/TiledBackingStore.h:
        (TiledBackingStore):

2012-02-29  Kinuko Yasuda  <kinuko@chromium.org>

        Use the new createSnapshotFileAndReadMetadata API for FileEntry.file()
        https://bugs.webkit.org/show_bug.cgi?id=79928

        Reviewed by David Levin.

        No new tests: no functionality changes.
        fast/filesystem/ tests should use the new code (they should pass once
        the corresponding chromium change is rolled in).

        * fileapi/DOMFileSystem.cpp:
        (WebCore::DOMFileSystem::createFile): Updated to use the new API.
        * fileapi/DOMFileSystemSync.cpp:
        (WebCore::DOMFileSystemSync::createFile): Updated to use the new API.
        * fileapi/FileSystemCallbacks.cpp:
        * fileapi/FileSystemCallbacks.h:
        (FileSystemCallbacksBase):
        * platform/AsyncFileSystem.h:
        (AsyncFileSystem):
        * platform/AsyncFileSystemCallbacks.h: Added default implementation (which just calls ASSERT_NOTREACHED()) so that subclasses can focus only on the callback methods that they're interested in.

2012-02-29  Pavel Podivilov  <podivilov@chromium.org>

        Web Inspector: add UISourceCode.isEditable property.
        https://bugs.webkit.org/show_bug.cgi?id=79909

        Reviewed by Vsevolod Vlasov.

        * inspector/front-end/DebuggerPresentationModel.js:
        (WebInspector.DebuggerPresentationModel.prototype.canEditScriptSource):
        * inspector/front-end/RawSourceCode.js:
        (WebInspector.RawSourceCode.prototype._createUISourceCode):
        * inspector/front-end/UISourceCode.js:
        (WebInspector.UISourceCode):

2012-02-29  Shinya Kawanaka  <shinyak@chromium.org> 

        Fallback elements in non-youngest shadow tree should not be rendered.
        https://bugs.webkit.org/show_bug.cgi?id=80002

        Reviewed by Hajime Morita.

        Fallback elements in non-youngest shadow tree should not be rendered, so its phase should be
        AttachingNotDistributed instead of AttachingFallbacked.

        Tests: multiple-shadowroot-rendering.html covers this patch.

        * dom/NodeRenderingContext.cpp:
        (WebCore::NodeRenderingContext::NodeRenderingContext):

2012-02-29  Adam Barth  <abarth@webkit.org>

        ScriptExecutionContext has too many ifdef ENABLE(SQL_DATABASE)
        https://bugs.webkit.org/show_bug.cgi?id=79633

        Reviewed by Eric Seidel.

        This class creates a DatabaseContext object to supplement the
        ScriptExecutionContext with database-specific information.  This new
        object lets us remove a bunch of database-specific (and ifdefed) logic
        from ScriptExecutionContext.(cpp|h).

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.exp.in:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/ScriptExecutionContext.cpp:
        (WebCore::ScriptExecutionContext::ScriptExecutionContext):
        (WebCore::ScriptExecutionContext::~ScriptExecutionContext):
        (WebCore):
        * dom/ScriptExecutionContext.h:
        (WebCore):
        (ScriptExecutionContext):
        * history/PageCache.cpp:
        (WebCore::logCanCacheFrameDecision):
        (WebCore::PageCache::canCachePageContainingThisFrame):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::stopLoading):
        * platform/Supplementable.h:
        (WebCore::Supplementable::provideSupplement):
        (WebCore::Supplementable::requireSupplement):
        (Supplementable):
        * storage/AbstractDatabase.cpp:
        (WebCore::AbstractDatabase::AbstractDatabase):
        * storage/AbstractDatabase.h:
        (WebCore):
        (WebCore::AbstractDatabase::databaseContext):
        (AbstractDatabase):
        * storage/Database.cpp:
        (WebCore::Database::openDatabase):
        (WebCore::Database::Database):
        (WebCore::Database::openAndVerifyVersion):
        (WebCore::Database::markAsDeletedAndClose):
        (WebCore::Database::close):
        (WebCore::Database::closeImmediately):
        (WebCore::Database::performOpenAndVerify):
        (WebCore::Database::scheduleTransaction):
        (WebCore::Database::scheduleTransactionStep):
        (WebCore::Database::transactionClient):
        (WebCore::Database::transactionCoordinator):
        (WebCore::Database::tableNames):
        (WebCore::Database::securityOrigin):
        * storage/DatabaseContext.cpp: Added.
        (WebCore):
        (WebCore::existingDatabaseContextFrom):
        (WebCore::DatabaseContext::DatabaseContext):
        (WebCore::DatabaseContext::~DatabaseContext):
        (WebCore::DatabaseContext::from):
        (WebCore::DatabaseContext::databaseThread):
        (WebCore::DatabaseContext::hasOpenDatabases):
        (WebCore::DatabaseContext::stopDatabases):
        * storage/DatabaseContext.h: Added.
        (WebCore):
        (DatabaseContext):
        (WebCore::DatabaseContext::setHasOpenDatabases):
        * storage/SQLTransaction.cpp:
        (WebCore::SQLTransaction::checkAndHandleClosedOrInterruptedDatabase):
        (WebCore::SQLTransaction::notifyDatabaseThreadIsShuttingDown):
        * workers/WorkerThread.cpp:
        (WebCore::WorkerThreadShutdownStartTask::performTask):

2012-02-29  Shinya Kawanaka  <shinyak@chromium.org>

        Refactoring: HTMLContentSelector should be InsertionPoint-aware.
        https://bugs.webkit.org/show_bug.cgi?id=79901

        Reviewed by Hajime Morita.

        ContentSelectorQuery took HTMLContentElement as argument, but patch changes it to take InsertionPoint instead.
        If InsertionPoint is not HTMLContentElement, ContentSelectorQuery will selects the rest of light children.

        Now InsertionPoint has pure virtual method 'select'. <shadow> will implement this as a method returning empty string.

        * dom/ShadowRoot.cpp:
        (WebCore::ShadowRoot::hasInsertionPoint):
        * dom/ShadowRoot.h:
        (ShadowRoot):
        * dom/ShadowTree.cpp:
        (WebCore::ShadowTree::needsReattachHostChildrenAndShadow):
        (WebCore::ShadowTree::hostChildrenChanged):
        * html/shadow/ContentSelectorQuery.cpp:
        (WebCore::ContentSelectorQuery::ContentSelectorQuery):
        (WebCore::ContentSelectorQuery::matches):
        * html/shadow/ContentSelectorQuery.h:
        (WebCore):
        (ContentSelectorQuery):
        * html/shadow/HTMLContentElement.cpp:
        (WebCore::HTMLContentElement::detach):
        * html/shadow/HTMLContentElement.h:
        (WebCore::toHTMLContentElement):
        (WebCore):
        * html/shadow/HTMLContentSelector.cpp:
        (WebCore::HTMLContentSelector::select):
        * html/shadow/HTMLContentSelector.h:
        (HTMLContentSelector):
        * html/shadow/InsertionPoint.h:
        (InsertionPoint):

2012-02-29  Luke Macpherson   <macpherson@chromium.org>

        Handle CSSPropertySpeak in CSSStyleApplyProperty.
        https://bugs.webkit.org/show_bug.cgi?id=79879

        Reviewed by Eric Seidel.

        No new tests / refactoring only.

        * css/CSSStyleApplyProperty.cpp:
        (WebCore::CSSStyleApplyProperty::CSSStyleApplyProperty):
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::collectMatchingRulesForList):
        * rendering/style/RenderStyle.h:

2012-02-29  Luke Macpherson   <macpherson@chromium.org>

        Handle CSSPropertyWebkitColumnAxis in CSSStyleApplyProperty.
        https://bugs.webkit.org/show_bug.cgi?id=79869

        Reviewed by Eric Seidel.

        No new tests / refactoring only.

        * css/CSSStyleApplyProperty.cpp:
        (WebCore::CSSStyleApplyProperty::CSSStyleApplyProperty):
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::collectMatchingRulesForList):

2012-02-29  Erik Arvidsson  <arv@chromium.org>

        Rename DOMSelection to Selection
        https://bugs.webkit.org/show_bug.cgi?id=79688

        Reviewed by Adam Barth.

        No new tests. Existing tests have been updated to cover this.

        * page/DOMSelection.idl:
        * page/DOMWindow.idl:

2012-02-29  Joshua Bell  <jsbell@chromium.org>

        IndexedDB: IDBDatabase.objectStoreNames and IDObjectStore.indexNames results should be sorted
        https://bugs.webkit.org/show_bug.cgi?id=79950

        Reviewed by Tony Chang.

        Test: storage/indexeddb/list-ordering.html

        * dom/DOMStringList.cpp: Added sort method, not exposed via IDL.
        (WebCore::DOMStringList::sort):
        (WebCore):
        * dom/DOMStringList.h:
        (DOMStringList):
        * storage/IDBDatabaseBackendImpl.cpp:
        (WebCore::IDBDatabaseBackendImpl::objectStoreNames):
        * storage/IDBObjectStoreBackendImpl.cpp:
        (WebCore::IDBObjectStoreBackendImpl::indexNames):

2012-02-29  W. James MacLean  <wjmaclean@chromium.org>

        [chromium] Estimate pixel count for frame rate control
        https://bugs.webkit.org/show_bug.cgi?id=74982

        Reviewed by James Robinson.

        Value checks added to unit tests.

        Adds mechanism to compute and collect statistics on pixel overdraw for selected frames.

        * platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:
        (WebCore::CCLayerTreeHostImpl::optimizeRenderPasses):
        * platform/graphics/chromium/cc/CCQuadCuller.cpp:
        (WebCore::wedgeProduct):
        (WebCore):
        (WebCore::quadArea):
        (WebCore::CCQuadCuller::cullOccludedQuads):
        * platform/graphics/chromium/cc/CCQuadCuller.h:
        (CCQuadCuller):
        * platform/graphics/chromium/cc/CCRenderPass.cpp:
        (WebCore::CCRenderPass::optimizeQuads):
        * platform/graphics/chromium/cc/CCRenderPass.h:
        (CCOverdrawCounts):
        (WebCore):
        (CCRenderPass):

2012-02-29  Jason Liu  <jason.liu@torchmobile.com.cn>

        [BlackBerry]Make about:cache feature available in release version.
        https://bugs.webkit.org/show_bug.cgi?id=79866

        Reviewed by Antonio Gomes.

        No tests.
        * platform/network/blackberry/NetworkJob.cpp:
        (WebCore::NetworkJob::handleAbout):

2012-02-29  James Simonsen  <simonjam@chromium.org>

        [chromium] Fix navigation start time on cross-renderer navigation
        https://bugs.webkit.org/show_bug.cgi?id=75922

        Reviewed by Darin Fisher.

        * loader/DocumentLoadTiming.cpp:
        (WebCore::DocumentLoadTiming::setNavigationStart): Added.
        * loader/DocumentLoadTiming.h:

2012-02-29  Stephen Chenney  <schenney@chromium.org>

        SVG <use> element allows invalid contents
        https://bugs.webkit.org/show_bug.cgi?id=77764

        Reviewed by Nikolas Zimmermann.

        Modify the isDisallowedElement method to disallow all of the
        disallowed elements, instead of just a few. It is now a whitelist
        implementation.

        This also fixes bugs 78807, 78838 and 79798 related to memory
        corruption issues.

        Tests: svg/custom/bug78807.svg
               svg/custom/bug78838.html
               svg/custom/bug79798.html

        * svg/SVGUseElement.cpp:
        (WebCore::isDisallowedElement):

2012-02-29  Ami Fischman  <fischman@chromium.org>

        Continue the search for playable mime types among <source> children of <video> even when using data: URLs
        https://bugs.webkit.org/show_bug.cgi?id=79934

        Reviewed by Eric Carlson.

        Test: media/sources-fallback-codecs.html

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::selectNextSourceChild):

2012-02-29  Ian Vollick  <vollick@chromium.org>

        [chromium] Add impl-thread support for animation-timing-function
        https://bugs.webkit.org/show_bug.cgi?id=79819

        Reviewed by James Robinson.

        * WebCore.gypi:
        * platform/graphics/chromium/cc/CCKeyframedAnimationCurve.cpp:
        (WebCore::CCKeyframe::CCKeyframe):
        (WebCore):
        (WebCore::CCKeyframe::~CCKeyframe):
        (WebCore::CCKeyframe::time):
        (WebCore::CCKeyframe::timingFunction):
        (WebCore::CCFloatKeyframe::create):
        (WebCore::CCFloatKeyframe::CCFloatKeyframe):
        (WebCore::CCFloatKeyframe::~CCFloatKeyframe):
        (WebCore::CCFloatKeyframe::value):
        (WebCore::CCFloatKeyframe::clone):
        (WebCore::CCTransformKeyframe::create):
        (WebCore::CCTransformKeyframe::CCTransformKeyframe):
        (WebCore::CCTransformKeyframe::~CCTransformKeyframe):
        (WebCore::CCTransformKeyframe::value):
        (WebCore::CCTransformKeyframe::clone):
        (WebCore::CCKeyframedFloatAnimationCurve::create):
        (WebCore::CCKeyframedFloatAnimationCurve::CCKeyframedFloatAnimationCurve):
        (WebCore::CCKeyframedFloatAnimationCurve::addKeyframe):
        (WebCore::CCKeyframedFloatAnimationCurve::duration):
        (WebCore::CCKeyframedFloatAnimationCurve::clone):
        (WebCore::CCKeyframedFloatAnimationCurve::getValue):
        (WebCore::CCKeyframedTransformAnimationCurve::create):
        (WebCore::CCKeyframedTransformAnimationCurve::CCKeyframedTransformAnimationCurve):
        (WebCore::CCKeyframedTransformAnimationCurve::~CCKeyframedTransformAnimationCurve):
        (WebCore::CCKeyframedTransformAnimationCurve::addKeyframe):
        (WebCore::CCKeyframedTransformAnimationCurve::duration):
        (WebCore::CCKeyframedTransformAnimationCurve::clone):
        (WebCore::CCKeyframedTransformAnimationCurve::getValue):
        * platform/graphics/chromium/cc/CCKeyframedAnimationCurve.h:
        (CCKeyframe):
        (CCFloatKeyframe):
        (WebCore):
        (CCTransformKeyframe):
        (CCKeyframedFloatAnimationCurve):
        (CCKeyframedTransformAnimationCurve):
        * platform/graphics/chromium/cc/CCLayerAnimationController.cpp:
        * platform/graphics/chromium/cc/CCTimingFunction.cpp: Added.
        (WebCore):
        (WebCore::CCTimingFunction::CCTimingFunction):
        (WebCore::CCTimingFunction::~CCTimingFunction):
        (WebCore::CCTimingFunction::duration):
        (WebCore::CCCubicBezierTimingFunction::create):
        (WebCore::CCCubicBezierTimingFunction::CCCubicBezierTimingFunction):
        (WebCore::CCCubicBezierTimingFunction::~CCCubicBezierTimingFunction):
        (WebCore::CCCubicBezierTimingFunction::getValue):
        (WebCore::CCCubicBezierTimingFunction::clone):
        (WebCore::CCEaseTimingFunction::create):
        (WebCore::CCEaseInTimingFunction::create):
        (WebCore::CCEaseOutTimingFunction::create):
        (WebCore::CCEaseInOutTimingFunction::create):
        * platform/graphics/chromium/cc/CCTimingFunction.h: Added.
        (WebCore):
        (CCTimingFunction):
        (CCCubicBezierTimingFunction):
        (CCEaseTimingFunction):
        (CCEaseInTimingFunction):
        (CCEaseOutTimingFunction):
        (CCEaseInOutTimingFunction):

2012-02-29  Shinya Kawanaka  <shinyak@chromium.org>

        Methods in ShadowTree and TreeScopeAdopter should be multiple shadow roots aware.
        https://bugs.webkit.org/show_bug.cgi?id=79768

        Reviewed by Hajime Morita.

        Some methods in ShadowTree and TreeScopeAdopter were not multiple shadow roots aware.
        They should consider multiple shadow roots.

        Test: fast/dom/shadow/multiple-shadowroot-adopt.html

        * dom/ShadowTree.cpp:
        (WebCore::ShadowTree::setParentTreeScope):
        (WebCore):
        (WebCore::ShadowTree::childNeedsStyleRecalc):
        (WebCore::ShadowTree::needsStyleRecalc):
        * dom/ShadowTree.h:
        (WebCore):
        (ShadowTree):
        * dom/TreeScopeAdopter.cpp:
        (WebCore::shadowTreeFor):
        (WebCore::TreeScopeAdopter::moveTreeToNewScope):
        (WebCore::TreeScopeAdopter::moveTreeToNewDocument):
        (WebCore::TreeScopeAdopter::moveShadowTreeToNewDocument):
        (WebCore):
        * dom/TreeScopeAdopter.h:
        (TreeScopeAdopter):

2012-02-29  David Levin  <levin@chromium.org>

        [chromium] Add the ability to turn off autoresize.
        https://bugs.webkit.org/show_bug.cgi?id=77452

        Reviewed by Darin Fisher.

        Test: fast/autoresize/turn-off-autoresize.html

        * page/FrameView.cpp:
        (WebCore::FrameView::enableAutoSizeMode): Fix the code
        path for turning off autoresize to set the scrollbars to auto.

2012-02-29  David Barton  <dbarton@mathscribe.com>

        <msubsup> setNeedsLayout() correction
        https://bugs.webkit.org/show_bug.cgi?id=79856

        Reviewed by Julien Chaffraix.

        m_scripts->setNeedsLayout(true, false); needs to be added to the fix for bug 79274.

        No new tests. It's actually difficult to test the need for this with the current code,
        because there are a lot of extra setNeedsLayout() calls right now. I caught this after
        removing some of those calls that should be redundant, for a future patch. Actually
        removing those calls now changes other behavior, due to other bugs, so I'll save all
        that for future patches. We should land this fix now though I think, as it could
        possibly matter in some cases.

        * rendering/mathml/RenderMathMLSubSup.cpp:
        (WebCore::RenderMathMLSubSup::layout):

2012-02-29  Andreas Kling  <awesomekling@apple.com>

        IsSynchronizingStyleAttributeFlag could be purged.
        <http://webkit.org/b/79313>

        Reviewed by Anders Carlsson.

        We were using IsSynchronizingStyleAttributeFlag to prevent various things from
        happening below setAttribute() when serializing the "style" attribute based on
        an element's inline style.

        Simplify the whole thing by adding a way to set an attribute without triggering
        any callbacks (a 'notifyChanged' argument to Element::setAttribute().)
        This removes the need for IsSynchronizingStyleAttributeFlag in the first place
        and makes StyledElement::updateStyleAttribute() a bit cheaper to boot.

        * dom/Element.cpp:
        (WebCore::Element::setAttribute):
        (WebCore::Element::setAttributeInternal):
        (WebCore::Element::willModifyAttribute):
        (WebCore::Element::didModifyAttribute):
        (WebCore::Element::didRemoveAttribute):
        * dom/Element.h:
        * dom/Node.h:
        * dom/StyledElement.cpp:
        (WebCore::StyledElement::updateStyleAttribute):
        (WebCore::StyledElement::attributeChanged):
        * html/HTMLElement.cpp:
        (WebCore::StyledElement::copyNonAttributeProperties):

2012-02-29  Daniel Cheng  <dcheng@chromium.org>

        [chromium] REGRESSION: Cannot drag a file out
        https://bugs.webkit.org/show_bug.cgi?id=79817

        Reviewed by Ryosuke Niwa.

        Temporary fix for file drag out. This change won't be needed once DataTransferItemList
        support is better implemented.

        Test: platform/chromium/fast/events/drag-downloadURL.html

        * platform/chromium/ChromiumDataObject.cpp:
        (WebCore::ChromiumDataObject::types):

2012-02-29  Luke Macpherson   <macpherson@chromium.org>

        Clean up CSSPrimitiveValue::computeLengthDouble().
        https://bugs.webkit.org/show_bug.cgi?id=77065

        Reviewed by Eric Seidel.

        Refactoring only / no behavioral change.

        * css/CSSPrimitiveValue.cpp:
        (WebCore::CSSPrimitiveValue::computeLengthDouble):

2012-02-29  Beth Dakin  <bdakin@apple.com>

        Speculative build-fix.

        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::paintReplaced):

2012-02-29  Beth Dakin  <bdakin@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=79705
        didNewFirstVisuallyNonEmptyLayout should be enhanced to look at size instead 
        of a raw tally
        -and corresponding-
        <rdar://problem/10821314>

        Reviewed by Dave Hyatt.

        Instead of firing didNewFirstVisuallyNonEmptyLayout() when a raw tally of 
        relevant painted objects has reached a port-defined threshold, this patch 
        looks at the size of those objects with respect to the view area. The patch 
        also looks at relevant objects that cannot yet be fully painted, such as 
        incrementally loading images. 

        We no longer need a HashSet for the relevant painted objects since Region can 
        do all of the heavy lifting. We now have a Region for the painted and 
        unpainted regions. We do need a HashSet for the unpainted objects though, 
        because we need to know if a painted object needs to be subtracted from the 
        unpainted region before being added to the painted region.
        * page/Page.cpp:
        (WebCore):
        (WebCore::Page::isCountingRelevantRepaintedObjects):
        (WebCore::Page::startCountingRelevantRepaintedObjects):
        (WebCore::Page::resetRelevantPaintedObjectCounter):
        (WebCore::Page::addRelevantRepaintedObject):
        (WebCore::Page::addRelevantUnpaintedObject):
        * page/Page.h:
        (Page):

        New function on Region iterates through the rects and calculates the total 
        area.
        * platform/graphics/Region.cpp:
        (WebCore::Region::totalArea):
        (WebCore):
        * platform/graphics/Region.h:
        (Region):

        Remove code from these classes since they are not actually relevant objects.
        * rendering/InlineBox.cpp:
        (WebCore::InlineBox::paint):
        * rendering/RenderRegion.cpp:
        (WebCore::RenderRegion::paintReplaced):
        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::paint):

        All of these other callers send a rect that actually represents their size 
        (usually the visualOverflowRect) instead of the paintInfo's paintRect, and 
        they call addRelevantUnpaintedObject when appropriate.
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::paint):
        * rendering/RenderEmbeddedObject.cpp:
        (WebCore::RenderEmbeddedObject::paint):
        (WebCore::RenderEmbeddedObject::paintReplaced):
        * rendering/RenderHTMLCanvas.cpp:
        (WebCore::RenderHTMLCanvas::paintReplaced):
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::paintReplaced):
        * rendering/RenderVideo.cpp:
        (WebCore::RenderVideo::paintReplaced):
        * rendering/svg/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::paintReplaced):

2012-02-29  Joshua Bell  <jsbell@chromium.org>

        IndexedDB: Resource leak with IDBObjectStore.openCursor
        https://bugs.webkit.org/show_bug.cgi?id=79835

        IDBCursor object that were never continue()'d to the end would leak due to a 
        reference cycle with IDBRequest. In addition, the IDBRequest would never be
        marked "finished" which would prevent GC from reclaiming it. IDBTransactions
        now track and notify IDBCursors to break these references when the transaction
        can no longer not process requests.

        Reviewed by Tony Chang.

        Tests: storage/indexeddb/cursor-continue.html

        * storage/IDBCursor.cpp:
        (WebCore::IDBCursor::IDBCursor): Register with IDBTransaction bookkeeping.
        (WebCore::IDBCursor::continueFunction): Early error if transaction has finished.
        (WebCore::IDBCursor::close): Break the reference cycle with IDBRequest, and notify it
        that the cursor is finished.
        (WebCore):
        * storage/IDBCursor.h:
        (WebCore):
        (IDBCursor):
        * storage/IDBRequest.cpp:
        (WebCore::IDBRequest::IDBRequest):
        (WebCore::IDBRequest::finishCursor): If there is no request in flight, mark itself as
        finished to allow GC.
        (WebCore):
        (WebCore::IDBRequest::dispatchEvent): Once an in-flight request has been processed,
        mark the request as finished if the cursor is finished, to allow GC.
        * storage/IDBRequest.h:
        (IDBRequest):
        * storage/IDBTransaction.cpp: Track open cursors, close them when finished.
        (WebCore::IDBTransaction::OpenCursorNotifier::OpenCursorNotifier):
        (WebCore):
        (WebCore::IDBTransaction::OpenCursorNotifier::~OpenCursorNotifier):
        (WebCore::IDBTransaction::registerOpenCursor):
        (WebCore::IDBTransaction::unregisterOpenCursor):
        (WebCore::IDBTransaction::closeOpenCursors):
        (WebCore::IDBTransaction::onAbort):
        (WebCore::IDBTransaction::onComplete):
        * storage/IDBTransaction.h:
        (WebCore):
        (OpenCursorNotifier):
        (IDBTransaction):

2012-02-29  David Hyatt  <hyatt@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=79940
        <rdar://problem/10080189>
        
        Add support in WebKit for an intra-line character grid for Japanese text layout.
        
        Patch logicalLeftOffsetForLine and logicalRightOffsetForLine in order to get the
        basic edge snapping grid functionality up and running. See all the FIXMEs in the function for
        some of the issues that still have to be dealt with for it to really work well.

        Reviewed by Dan Bernstein.

        Added new tests in fast/line-grid.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::logicalLeftOffsetForLine):
        (WebCore::RenderBlock::logicalRightOffsetForLine):

2012-02-29  Anders Carlsson  <andersca@apple.com>

        [Chromium] Some Layout Tests in platform/chromium/rubberbanding and platform/chromium/compositing/rubberbanding are failing
        https://bugs.webkit.org/show_bug.cgi?id=79878

        Reviewed by James Robinson.

        Make sure that ScrollableArea::setScrollOffsetFromAnimation doesn't end up
        setting the ScrollAnimator's current scroll position by making a new function, scrollPositionChanged,
        that both notifyScrollPositionChanged and setScrollOffsetFromAnimation call and move the call to update
        the position to notifyScrollPositionChanged.

        * platform/ScrollableArea.cpp:
        (WebCore::ScrollableArea::notifyScrollPositionChanged):
        (WebCore):
        (WebCore::ScrollableArea::scrollPositionChanged):
        (WebCore::ScrollableArea::setScrollOffsetFromAnimation):
        * platform/ScrollableArea.h:
        (ScrollableArea):

2012-02-29  Dana Jansens  <danakj@chromium.org>

        [chromium] Don't let invalidation for next frame prevent tile upload
        https://bugs.webkit.org/show_bug.cgi?id=79841

        Reviewed by James Robinson.

        We currently don't push dirty tiles to the impl thread so there are no
        tiles with garbage data on the impl thread. However, this judgement is
        overzealous and blocks tiles that get invalidated by WebKit for the
        next frame during the paint of the current frame.

        Instead, check if a tile is dirty and was not painted for the current
        frame when deciding to push the tile to the impl thread. This requires
        that we know if a tile was painted during the current frame, which we
        can do if we always reset m_updateRect to be empty each frame.

        New unit tests: TiledLayerChromiumTest.pushTilesMarkedDirtyDuringPaint
                        TiledLayerChromiumTest.pushTilesLayerMarkedDirtyDuringPaintOnNextLayer
                        TiledLayerChromiumTest.pushTilesLayerMarkedDirtyDuringPaintOnPreviousLayer

        * platform/graphics/chromium/TiledLayerChromium.cpp:
        (WebCore::UpdatableTile::isDirtyForCurrentFrame):
        (WebCore::TiledLayerChromium::pushPropertiesTo):
        (WebCore::TiledLayerChromium::prepareToUpdateTiles):
        (WebCore::TiledLayerChromium::resetUpdateState):
        (WebCore):
        (WebCore::TiledLayerChromium::prepareToUpdate):
        * platform/graphics/chromium/TiledLayerChromium.h:
        (TiledLayerChromium):

2012-02-29  Tommy Widenflycht  <tommyw@google.com>

        MediaStream API: MediaStreamTrackList out-of-bounds access fix
        https://bugs.webkit.org/show_bug.cgi?id=79889

        Reviewed by Adam Barth.

        Out-of-bounds access to MediaStreamTrackList ASSERTS instead of returning 0,
        this is not according to ecmascript standard. Also fixed a similar issue in MediaStreamList.

        Test: fast/mediastream/peerconnection-mediastreamlist.html

        * Modules/mediastream/MediaStreamList.cpp:
        (WebCore::MediaStreamList::item):
        * Modules/mediastream/MediaStreamTrackList.cpp:
        (WebCore::MediaStreamTrackList::item):

2012-02-29  Leo Yang  <leo.yang@torchmobile.com.cn>

        [BlackBerry] Upstream the BlackBerry change to platform/graphics/FloatSize.h
        https://bugs.webkit.org/show_bug.cgi?id=79893

        Reviewed by Antonio Gomes.

        Add conversion convenience between WebCore::FloatSize and BlackBerry::Platform::FloatSize.

        The porting can't be built yet, no new tests.

        * platform/graphics/FloatSize.h:
        (Platform):
        (FloatSize):

2012-02-29  Leo Yang  <leo.yang@torchmobile.com.cn>

        [BlackBerry] Upstream the BlackBerry change to platform/graphics/FloatRect.h
        https://bugs.webkit.org/show_bug.cgi?id=79891

        Reviewed by Antonio Gomes.

        Add conversion convenience between WebCore::FloatRect and BlackBerry::Platform::FloatRect.

        The porting can't be built yet, no new tests.

        * platform/graphics/FloatRect.h:
        (Platform):
        (FloatRect):

2012-02-29  Tim Horton  <timothy_horton@apple.com>

        Make use of CG rounded-rect primitives
        https://bugs.webkit.org/show_bug.cgi?id=79932
        <rdar://problem/9274953>

        Reviewed by Simon Fraser.

        Dispatch to potentially platform-specific rounded rectangle path
        construction from addPathForRoundedRect. Make use of this to call
        wkCGPathAddRoundedRect on Lion and above, as long as the rounded
        corners are all equivalent.

        No new tests, as this is covered by many that use rounded corners,
        and is only a performance improvement.

        * WebCore.exp.in:
        * platform/graphics/Path.cpp:
        (WebCore::Path::addRoundedRect):
        (WebCore):
        (WebCore::Path::addPathForRoundedRect):
        * platform/graphics/Path.h:
        (Path):
        * platform/graphics/cg/PathCG.cpp:
        (WebCore::Path::addPathForRoundedRect):
        (WebCore):
        * platform/mac/WebCoreSystemInterface.h:
        * platform/mac/WebCoreSystemInterface.mm:

2012-02-29  Leo Yang  <leo.yang@torchmobile.com.cn>

        [BlackBerry] Upstream the BlackBerry change to platform/graphics/FloatPoint.h
        https://bugs.webkit.org/show_bug.cgi?id=79887

        Reviewed by Antonio Gomes.

        Add conversion convenience between WebCore::FloatPoint and BlackBerry::Platform::FloatPoint.

        The porting can't be built yet, no new tests.

        * platform/graphics/FloatPoint.h:
        (Platform):
        (FloatPoint):

2012-02-29  Kaustubh Atrawalkar  <kaustubh@motorola.com>

        ShadowRoot need innerHTML
        https://bugs.webkit.org/show_bug.cgi?id=78473

        Reviewed by Hajime Morita.

        Refactor code for sharing common code between HTMLElement & ShadowRoot.
        Implement innerHTML attribute for ShadowRoot.

        Test: fast/dom/shadow/shadow-root-innerHTML.html

        * dom/ShadowRoot.cpp:
        (WebCore::ShadowRoot::cloneNode):
        (WebCore):
        (WebCore::ShadowRoot::innerHTML):
        (WebCore::ShadowRoot::setInnerHTML):
        * dom/ShadowRoot.h:
        (ShadowRoot):
        * dom/ShadowRoot.idl:
        * editing/markup.cpp:
        (WebCore::urlToMarkup):
        (WebCore):
        (WebCore::createFragmentFromSource):
        (WebCore::hasOneChild):
        (WebCore::hasOneTextChild):
        (WebCore::replaceChildrenWithFragment):
        (WebCore::replaceChildrenWithText):
        * editing/markup.h:
        * html/HTMLElement.cpp:
        (WebCore):

2012-02-29  Julien Chaffraix  <jchaffraix@webkit.org>

        Stop doubling maximalOutlineSize during painting
        https://bugs.webkit.org/show_bug.cgi?id=79724

        Reviewed by Tony Chang.

        Refactoring only, covered by existing tests (mostly repaint ones).

        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::shouldPaint):
        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::paintCollapsedBorders):
        Introduce a local repaint rectangle that we inflate by the maximalOutlineSize
        to simplify the comparison logic. Also tried to make it clearer what's going on
        by tweaking the existing code.

        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::paintObject):
        Remove the doubling.

2012-02-29  Ken Buchanan  <kenrb@chromium.org>

        Crash when changing list marker locations
        https://bugs.webkit.org/show_bug.cgi?id=79681

        Reviewed by David Hyatt.

        This fixes a regression crash from r108548.

        There are some conditions where removing the anonymous block
        parent at that point can cause problems. One is when there is
        a continuation from it, and another when it is a sibling of
        lineBoxParent and it causes lineBoxParent to be deleted
        incidentally. This patch delays the destruction until after
        lineBoxParent has been used and makes an exception for
        continuations.

        * rendering/RenderListItem.cpp:
        (WebCore::RenderListItem::updateMarkerLocation)

2012-02-29  Max Feil  <mfeil@rim.com>

        [BlackBerry] Add support for FLAC audio and OGG/Vorbis audio
        https://bugs.webkit.org/show_bug.cgi?id=79519

        Reviewed by Antonio Gomes.

        A layout test already exists for OGG. We do not support OGG
        video at this time, only audio.

        Test: media/media-can-play-flac-audio.html

        * platform/blackberry/MIMETypeRegistryBlackBerry.cpp:
        (WebCore):

2012-02-28  Beth Dakin  <bdakin@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=79868
        Overlay scrollbars should respond to AppKit's NSEventPhaseMayBegin
        -and corresponding-
        <rdar://problem/10688637>

        Reviewed by Anders Carlsson.

        Scrollbars are currently drawn on the main thread even when scrolling happens 
        on the scrolling thread, so we have to call back to the main thread for the 
        time being to make the right drawing calls for NSEventPhaseMayBegin.
        * page/scrolling/ScrollingCoordinator.cpp:
        (WebCore::ScrollingCoordinator::handleWheelEventPhase):
        (WebCore):
        * page/scrolling/ScrollingCoordinator.h:
        (ScrollingCoordinator):
        * page/scrolling/ScrollingTree.cpp:
        (WebCore::ScrollingTree::handleWheelEventPhase):
        (WebCore):
        * page/scrolling/ScrollingTree.h:
        * page/scrolling/mac/ScrollingTreeNodeMac.mm:
        (WebCore::ScrollingTreeNodeMac::handleWheelEvent):
        * platform/ScrollAnimator.h:
        (WebCore::ScrollAnimator::handleWheelEventPhase):
        (ScrollAnimator):

        Call into AppKit on NSEventPhaseMayBegin.
        * platform/mac/ScrollAnimatorMac.h:
        (ScrollAnimatorMac):
        * platform/mac/ScrollAnimatorMac.mm:
        (WebCore::ScrollAnimatorMac::mayBeginScrollGesture):
        (WebCore):
        (WebCore::ScrollAnimatorMac::handleWheelEventPhase):
        (WebCore::ScrollAnimatorMac::handleWheelEvent):

2012-02-28  Jer Noble  <jer.noble@apple.com>

        Full screen video volume slider has "progress bar"
        https://bugs.webkit.org/show_bug.cgi?id=79812

        Reviewed by Eric Carlson.

        No new tests; strictly a platform-specific look-and-feel change.

        The full-screen volume slider has a "media-slider"" appearance, which is rendering as if
        the volume slider has a "progress".  Make a concrete "media-fullscreen-volume-slider" appearance
        which has the correct look-and-feel.

        Add two new appearance keywords, media-fullscreen-volume-slider and thumb, and their associated
        types and CSS keywords:
        * css/CSSValueKeywords.in:
        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        * html/shadow/MediaControlElements.h:
        * platform/ThemeTypes.h:

        Handle the new slider and thumb types when rendering:
        * rendering/RenderMediaControls.cpp:
        (WebCore::RenderMediaControls::adjustMediaSliderThumbSize):
        (WebCore::RenderMediaControls::paintMediaControlsPart):
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::adjustStyle):
        (WebCore::RenderTheme::paint):
        * rendering/RenderTheme.h:
        (WebCore::RenderTheme::paintMediaFullScreenVolumeSliderTrack):
        (WebCore::RenderTheme::paintMediaFullScreenVolumeSliderThumb):
        * rendering/RenderThemeMac.h:
        (RenderThemeMac):
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::adjustMediaSliderThumbSize):
        (WebCore::RenderThemeMac::paintMediaFullScreenVolumeSliderTrack):
        (WebCore::RenderThemeMac::paintMediaFullScreenVolumeSliderThumb):
        * rendering/RenderMediaControlsChromium.cpp:
        (WebCore::RenderMediaControlsChromium::paintMediaControlsPart):

        * accessibility/AccessibilitySlider.cpp:
        (WebCore::AccessibilitySlider::orientation): Mark the fullscreen volume slider as horizontal.
        * html/shadow/SliderThumbElement.cpp:
        (WebCore::RenderSliderThumb::updateAppearance): Give MediaFullScreenVolumeSliderParts 
            MediaFullScreenVolumeSliderThumbParts.
        * css/fullscreenQuickTime.css: Change the styles for the fullscreen slider, min, and max buttons.
        (video:-webkit-full-screen::-webkit-media-controls-fullscreen-volume-min-button):
        (video:-webkit-full-screen::-webkit-media-controls-fullscreen-volume-slider):
        (video:-webkit-full-screen::-webkit-media-controls-fullscreen-volume-max-button):
        * html/shadow/MediaControlRootElement.cpp:
        (WebCore::MediaControlRootElement::reset): Set the value of the fullscreen volume slider
            when resetting.

2012-02-29  Antti Koivisto  <antti@apple.com>

        Applying region style should not need to access parent rules
        https://bugs.webkit.org/show_bug.cgi?id=79910 
         
        Reviewed by Andreas Kling.

        Currently CSSStyleSelector::applyProperties looks into parent rules to see if a rule is
        part of region style. The plan is to eliminate the rule parent pointer so this needs to be refactored.
        
        Add a bit to RuleData to indicate if the StyleRule is part of a region style.

        * css/CSSStyleSelector.cpp:
        (RuleData):
        (WebCore::RuleData::isInRegionRule):
        (RuleSet):
        (WebCore::CSSStyleSelector::addMatchedProperties):
        (WebCore::CSSStyleSelector::sortAndTransferMatchedRules):
        (WebCore::CSSStyleSelector::collectMatchingRulesForList):
        * css/CSSStyleSelector.h:
        (CSSStyleSelector):

2012-02-27  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: [InspectorIndexedDB] Add refresh to IndexedDB support.
        https://bugs.webkit.org/show_bug.cgi?id=79695

        Reviewed by Pavel Feldman.

        * inspector/front-end/IndexedDBViews.js:
        (WebInspector.IDBDataView):
        (WebInspector.IDBDataView.prototype._refreshButtonClicked):
        (WebInspector.IDBDataView.prototype.get statusBarItems):
        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.IndexedDBTreeElement):
        (WebInspector.IndexedDBTreeElement.prototype.onattach):
        (WebInspector.IndexedDBTreeElement.prototype._handleContextMenuEvent):
        (WebInspector.IDBDatabaseTreeElement.prototype.onattach):
        (WebInspector.IDBDatabaseTreeElement.prototype._handleContextMenuEvent):
        (WebInspector.IDBDatabaseTreeElement.prototype._refreshIndexedDB):

2012-02-29  Andrey Kosyakov  <caseq@chromium.org>

        Web Inspector: timeline markers are not shown on the timeline panel
        https://bugs.webkit.org/show_bug.cgi?id=79921

        Reviewed by Pavel Feldman.

        * inspector/front-end/TimelinePanel.js:
        (WebInspector.TimelinePanel.prototype._innerAddRecordToTimeline.addTimestampRecords):
        (WebInspector.TimelinePanel.prototype._innerAddRecordToTimeline):

2012-02-29  Kenichi Ishibashi  <bashi@chromium.org>

        Align InlineBox::m_expansion to a byte boundary
        https://bugs.webkit.org/show_bug.cgi?id=79761

        Add a bit to m_expansion to align a byte boundary.
        This will make valgrind memcheck happy.
        I confirmed sizeof(InlineBox) is unchanged.

        Reviewed by Hajime Morita.

        No new tests. No behavior changes.

        * rendering/InlineBox.h:
        (InlineBox): Aligned m_expansion to a byte boundary.

2012-02-28  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Do not iterate all tiles for resizing when the content didn't change
        https://bugs.webkit.org/show_bug.cgi?id=79787

        Reviewed by Simon Hausmann.

        * platform/graphics/TiledBackingStore.cpp:
        (WebCore::TiledBackingStore::createTiles):

2012-02-29  Parag Radke  <parag@motorola.com>

        Crash in WebCore::CompositeEditCommand::insertNodeAt
        https://bugs.webkit.org/show_bug.cgi?id=67764

        Reviewed by Ryosuke Niwa.

        If caret position after deletion and destination position coincides then
        removing the node will result in removing the destination node also. Hence crash.

        Test: editing/deleting/delete-block-merge-contents-025.html

        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::cleanupAfterDeletion):
        If the caret position after delete and the destination position
        renderes at the same place, pruning the node and making an early exit.

2012-02-29  Pavel Feldman  <pfeldman@google.com>

        Web Inspector: remove calculator's updateBoundaries in the timeline panel.
        https://bugs.webkit.org/show_bug.cgi?id=79907

        Reviewed by Yury Semikhatsky.

        * inspector/front-end/NetworkPanel.js:
        (WebInspector.NetworkBaseCalculator.prototype.computeBarGraphLabels):
        (WebInspector.NetworkBaseCalculator.prototype.formatTime):
        (WebInspector.NetworkTimeCalculator.prototype.computeBarGraphLabels):
        (WebInspector.NetworkTimeCalculator.prototype.formatTime):
        (WebInspector.NetworkTransferTimeCalculator.prototype.formatTime):
        (WebInspector.NetworkTransferDurationCalculator.prototype.formatTime):
        * inspector/front-end/TimelineGrid.js:
        (WebInspector.TimelineGrid.prototype.updateDividers):
        * inspector/front-end/TimelineOverviewPane.js:
        (WebInspector.TimelineOverviewCalculator.prototype.formatTime):
        (WebInspector.TimelineStartAtZeroOverview):
        (WebInspector.TimelineStartAtZeroOverview.prototype.update):
        * inspector/front-end/TimelinePanel.js:
        (WebInspector.TimelinePanel):
        (WebInspector.TimelinePanel.prototype._toggleStartAtZeroButtonClicked):
        (WebInspector.TimelinePanel.prototype._refresh):
        (WebInspector.TimelinePanel.prototype._refreshRecords):
        (WebInspector.TimelinePanel.prototype.get timelinePaddingLeft):
        (WebInspector.TimelineCalculator):
        (WebInspector.TimelineCalculator.prototype.setWindow):
        (WebInspector.TimelineCalculator.prototype.setRecords):
        (WebInspector.TimelineCalculator.prototype.formatTime):
        (WebInspector.TimelineFitInWindowCalculator):
        (WebInspector.TimelineFitInWindowCalculator.prototype.setWindow):
        (WebInspector.TimelineFitInWindowCalculator.prototype.setRecords):
        * inspector/front-end/TimelinePresentationModel.js:
        (WebInspector.TimelinePresentationModel.Record.prototype.generatePopupContent):

2012-02-29  Yury Semikhatsky  <yurys@chromium.org>

        Web Inspector: enable Profiles panel for workers
        https://bugs.webkit.org/show_bug.cgi?id=79908

        Introduced worker profiler agent. Enabled script profiling for
        workers.

        Reviewed by Pavel Feldman.

        * bindings/js/ScriptProfiler.cpp:
        (WebCore::ScriptProfiler::startForPage):
        (WebCore):
        (WebCore::ScriptProfiler::startForWorkerContext):
        (WebCore::ScriptProfiler::stopForPage):
        (WebCore::ScriptProfiler::stopForWorkerContext):
        * bindings/js/ScriptProfiler.h:
        (WebCore):
        (ScriptProfiler):
        * bindings/v8/ScriptProfiler.cpp:
        (WebCore::ScriptProfiler::startForPage):
        (WebCore):
        (WebCore::ScriptProfiler::startForWorkerContext):
        (WebCore::ScriptProfiler::stopForPage):
        (WebCore::ScriptProfiler::stopForWorkerContext):
        * bindings/v8/ScriptProfiler.h:
        (WebCore):
        (ScriptProfiler):
        * inspector/InspectorProfilerAgent.cpp:
        (WebCore):
        (PageProfilerAgent):
        (WebCore::PageProfilerAgent::PageProfilerAgent):
        (WebCore::PageProfilerAgent::~PageProfilerAgent):
        (WebCore::PageProfilerAgent::startProfiling):
        (WebCore::PageProfilerAgent::stopProfiling):
        (WebCore::InspectorProfilerAgent::create):
        (WorkerProfilerAgent):
        (WebCore::WorkerProfilerAgent::WorkerProfilerAgent):
        (WebCore::WorkerProfilerAgent::~WorkerProfilerAgent):
        (WebCore::WorkerProfilerAgent::startProfiling):
        (WebCore::WorkerProfilerAgent::stopProfiling):
        (WebCore::InspectorProfilerAgent::InspectorProfilerAgent):
        (WebCore::InspectorProfilerAgent::start):
        (WebCore::InspectorProfilerAgent::stop):
        * inspector/InspectorProfilerAgent.h:
        (WebCore):
        (InspectorProfilerAgent):
        * inspector/WorkerInspectorController.cpp:
        (WebCore::WorkerInspectorController::WorkerInspectorController):
        (WebCore::WorkerInspectorController::connectFrontend):
        (WebCore::WorkerInspectorController::disconnectFrontend):
        (WebCore::WorkerInspectorController::restoreInspectorStateFromCookie):
        * inspector/WorkerInspectorController.h:
        (WebCore):
        (WorkerInspectorController):
        * inspector/front-end/ProfilesPanel.js:
        * inspector/front-end/inspector.js:
        (WebInspector._createPanels):

2012-02-29  Alexander Pavlov  <apavlov@chromium.org>

        Web Inspector: Clicking relative links fails when query string contains a slash
        https://bugs.webkit.org/show_bug.cgi?id=79905

        Reviewed by Vsevolod Vlasov.

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

2012-02-29  Pavel Feldman  <pfeldman@google.com>

        Web Inspector: Ctrl R should reload page from the console panel as well.
        https://bugs.webkit.org/show_bug.cgi?id=79883

        Reviewed by Vsevolod Vlasov.

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

2012-02-28  Pavel Podivilov  <podivilov@chromium.org>

        Extended attributes list should go before 'static' and 'const' modifiers in IDLs.
        https://bugs.webkit.org/show_bug.cgi?id=79807

        Reviewed by Kentaro Hara.

        No new tests. Generated code isn't changed.

        * bindings/scripts/IDLParser.pm:
        (ParseInterface):
        * bindings/scripts/IDLStructure.pm:
        * bindings/scripts/test/TestObj.idl:
        * bindings/scripts/test/TestSupplemental.idl:
        * html/DOMURL.idl:
        * html/HTMLMediaElement.idl:
        * html/HTMLTrackElement.idl:

2012-02-28  Yury Semikhatsky  <yurys@chromium.org>

        Web Inspector: move DOM counter graphs out of experimental
        https://bugs.webkit.org/show_bug.cgi?id=79802

        Enable DOM counter graphs by default.

        Reveal nearest record from the left hand side when there is no
        record containing the point where the user clicked.

        Reviewed by Pavel Feldman.

        * inspector/front-end/Settings.js:
        (WebInspector.ExperimentsSettings):
        * inspector/front-end/TimelinePanel.js:
        (WebInspector.TimelinePanel):
        (WebInspector.TimelinePanel.prototype._endSplitterDragging):
        (WebInspector.TimelinePanel.prototype._onTimelineEventRecorded):
        (WebInspector.TimelinePanel.prototype.sidebarResized):
        (WebInspector.TimelinePanel.prototype._resetPanel):
        (WebInspector.TimelinePanel.prototype._refresh):
        (WebInspector.TimelinePanel.prototype.revealRecordAt):

2012-02-28  MORITA Hajime  <morrita@google.com>

        [Refactoring] Shadow related attach paths should be in ShadowTree.
        https://bugs.webkit.org/show_bug.cgi?id=79854

        Reviewed by Ryosuke Niwa.

        No new tests. No behavior change.

        This change introduces ShadowTree::attachHost() and ShadowTree::detachHost()
        and moves shadow-enabled attachment code from Element to ShadowRoot.
        This also factored out small ContainerNode method to use it from ShadowTree.

        Even after this change, the traveral order in ShadowTree
        attachment has some unclear part. Coming changes will clarify
        these. This change is aimed to be purely textural.

        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::attach):
        (WebCore::ContainerNode::detach):
        * dom/ContainerNode.h:
        (ContainerNode):
        (WebCore::ContainerNode::attachAsNode): Added.
        (WebCore::ContainerNode::attachChildren): Added.
        (WebCore::ContainerNode::attachChildrenIfNeeded): Added.
        (WebCore::ContainerNode::attachChildrenLazily): Added.
        (WebCore::ContainerNode::detachAsNode): Added.
        (WebCore::ContainerNode::detachChildrenIfNeeded): Added.
        (WebCore::ContainerNode::detachChildren): Added.
        * dom/Element.cpp:
        (WebCore::Element::attach):
        (WebCore::Element::detach):
        * dom/ShadowTree.cpp:
        (WebCore::ShadowTree::addShadowRoot):
        (WebCore::ShadowTree::removeAllShadowRoots):
        (WebCore::ShadowTree::detachHost):
        (WebCore):
        (WebCore::ShadowTree::attachHost):
        (WebCore::ShadowTree::reattachHostChildrenAndShadow):
        * dom/ShadowTree.h:
        (ShadowTree):

2012-02-28  Arko Saha  <arko@motorola.com>

        Microdata: Implement HTMLPropertiesCollection collection.namedItem().
        https://bugs.webkit.org/show_bug.cgi?id=73156

        Reviewed by Kentaro Hara.

        Tests: fast/dom/MicroData/nameditem-must-be-case-sensitive.html
               fast/dom/MicroData/nameditem-must-return-correct-item-properties.html
               fast/dom/MicroData/properties-collection-nameditem-test.html

        * bindings/scripts/CodeGeneratorJS.pm: Modified code generator to generate
        JS bindings code for HTMLPropertiesCollection [NamedGetter] property.
        (GenerateImplementation):
        * html/HTMLPropertiesCollection.cpp:
        (WebCore::HTMLPropertiesCollection::names):
        (WebCore):
        (WebCore::HTMLPropertiesCollection::namedItem): Returns a NodeList object
        containing any elements that add a property named name.
        (WebCore::HTMLPropertiesCollection::hasNamedItem): Checks if the items can
        be retrieved or not based on the property named name.
        * html/HTMLPropertiesCollection.h: Added namedItem(), hasProperty(),
        hasNamedItem() methods.
        (HTMLPropertiesCollection):
        * html/HTMLPropertiesCollection.idl: Added namedItem() IDL method.

2012-02-28  Kinuko Yasuda  <kinuko@chromium.org>

        Add size field to Metadata in FileSystem API
        https://bugs.webkit.org/show_bug.cgi?id=79813

        Reviewed by David Levin.

        Test: fast/filesystem/op-get-metadata.html

        * fileapi/FileSystemCallbacks.cpp:
        (WebCore::MetadataCallbacks::didReadMetadata):
        * fileapi/Metadata.h:
        (WebCore::Metadata::create):
        (WebCore::Metadata::modificationTime):
        (WebCore::Metadata::size): Added.
        (WebCore::Metadata::Metadata):
        * fileapi/Metadata.idl:

2012-02-28  Dmitry Lomov  <dslomov@google.com>

        [JSC] Implement ArrayBuffer transfer
        https://bugs.webkit.org/show_bug.cgi?id=73493.
        Implement ArrayBuffer transfer, per Khronos spec:  http://www.khronos.org/registry/typedarray/specs/latest/#9.
        This brings parity with V8 implementation of transferable typed arrays.

        Reviewed by Oliver Hunt.

        Covered by existing tests.

        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::handlePostMessage):
        * bindings/js/JSDictionary.cpp:
        (WebCore::JSDictionary::convertValue):
        * bindings/js/JSHistoryCustom.cpp:
        (WebCore::JSHistory::pushState):
        (WebCore::JSHistory::replaceState):
        * bindings/js/JSMessageEventCustom.cpp:
        (WebCore::handleInitMessageEvent):
        * bindings/js/JSMessagePortCustom.cpp:
        (WebCore::fillMessagePortArray):
        * bindings/js/JSMessagePortCustom.h:
        (WebCore):
        (WebCore::handlePostMessage):
        * bindings/js/ScriptValue.cpp:
        (WebCore::ScriptValue::serialize):
        * bindings/js/SerializedScriptValue.cpp:
        (WebCore):
        (WebCore::CloneSerializer::serialize):
        (CloneSerializer):
        (WebCore::CloneSerializer::CloneSerializer):
        (WebCore::CloneSerializer::fillTransferMap):
        (WebCore::CloneSerializer::dumpArrayBufferView):
        (WebCore::CloneSerializer::dumpIfTerminal):
        (WebCore::CloneDeserializer::deserialize):
        (WebCore::CloneDeserializer::CloneDeserializer):
        (WebCore::CloneDeserializer::readTerminal):
        (CloneDeserializer):
        (WebCore::SerializedScriptValue::SerializedScriptValue):
        (WebCore::SerializedScriptValue::transferArrayBuffers):
        (WebCore::SerializedScriptValue::create):
        (WebCore::SerializedScriptValue::deserialize):
        * bindings/js/SerializedScriptValue.h:
        (WebCore):
        (SerializedScriptValue):

2012-02-28  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Unreviewed. Build fixes after recent bindings changes.

        * bindings/scripts/CodeGeneratorCPP.pm: 
        (ShouldSkipType):
        * testing/Internals.idl:

2012-02-28  Yoshifumi Inoue  <yosin@chromium.org>

        [Forms] Spin button sometimes ignores Indeterminate of m_upDownState
        https://bugs.webkit.org/show_bug.cgi?id=79754

        Reviewed by Kent Tamura.

        This patch checks enum value Indeterminate before using m_upDownState. This make
        sure Indeterminate state doesn't act like Down state.

        m_upDownState can be Indeterminate at mousedown event if mouse pointer is on
        spin button when it is displayed.

        Test: fast/forms/number/spin-button-state.html

        * html/shadow/TextControlInnerElements.cpp:
        (WebCore::SpinButtonElement::defaultEventHandler):
        (WebCore::SpinButtonElement::repeatingTimerFired):

2012-02-27  MORITA Hajime  <morrita@google.com>

        [Refactoring] RenderSummary and RenderDetail is no longer needed.
        https://bugs.webkit.org/show_bug.cgi?id=79641

        Reviewed by Kent Tamura.

        Removed RenderDetails and RenderSummary because its only
        modification they had is already handled by RenderBlock::styleWillChange().
        These are just a historical artifact. We could have removed these
        classes when they were switched to shadow-based implementations.

        Tests: fast/html/details-inline-expected.html
               fast/html/details-inline.html

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * html/HTMLDetailsElement.cpp:
        (WebCore::HTMLDetailsElement::createRenderer):
        * html/HTMLSummaryElement.cpp:
        (WebCore::HTMLSummaryElement::createRenderer):
        (WebCore::HTMLSummaryElement::defaultEventHandler):
        * rendering/RenderDetails.cpp: Removed.
        * rendering/RenderDetails.h: Removed.
        * rendering/RenderDetailsMarker.cpp:
        (WebCore::RenderDetailsMarker::isOpen):
        * rendering/RenderDetailsMarker.h:
        (RenderDetailsMarker):
        * rendering/RenderObject.h:
        (RenderObject):
        * rendering/RenderSummary.cpp: Removed.
        * rendering/RenderSummary.h: Removed.
        * rendering/RenderingAllInOne.cpp:

2012-02-28  Simon Fraser  <simon.fraser@apple.com>

        Optimize the rects being drawn into compositing layers
        https://bugs.webkit.org/show_bug.cgi?id=79852

        Reviewed by Dan Bernstein.

        Use the newly added WebKitSystemInterface method
        to limit the area being painted in a CALayer
        -drawInContext callback. This avoids redundant drawing,
        for performance.

        * platform/graphics/mac/WebLayer.mm:
        (drawLayerContents):

2012-02-28  Simon Fraser  <simon.fraser@apple.com>

        Fix the SnowLeopard build.

        * WebCore.exp.in:

2012-02-28  Anders Carlsson  <andersca@apple.com>

        With tiled drawing enabled, pressing Down arrow after scrolling via mouse gesture causes page to jump back up to top
        https://bugs.webkit.org/show_bug.cgi?id=79249
        <rdar://problem/10866273>

        Reviewed by Sam Weinig.

        ScrollableArea::notifyScrollPositionChanged must make sure that the scroll animator position is kept up to date.

        * platform/ScrollAnimator.cpp:
        (WebCore::ScrollAnimator::setCurrentPosition):
        (WebCore):
        * platform/ScrollAnimator.h:
        (ScrollAnimator):
        * platform/ScrollableArea.cpp:
        (WebCore::ScrollableArea::notifyScrollPositionChanged):

2012-02-28  Daniel Cheng  <dcheng@chromium.org>

        Unreviewed, rolling out r107894.
        http://trac.webkit.org/changeset/107894
        https://bugs.webkit.org/show_bug.cgi?id=30416

        dataTransfer.types should be an Array since DOMStringList is deprecated.

        * bindings/js/JSClipboardCustom.cpp:
        (WebCore::JSClipboard::types):
        (WebCore):
        * bindings/v8/custom/V8ClipboardCustom.cpp:
        (WebCore::V8Clipboard::typesAccessorGetter):
        (WebCore):
        * dom/Clipboard.cpp:
        (WebCore::Clipboard::hasStringOfType):
        * dom/Clipboard.h:
        (Clipboard):
        * dom/Clipboard.idl:
        * platform/blackberry/ClipboardBlackBerry.cpp:
        (WebCore::ClipboardBlackBerry::types):
        * platform/blackberry/ClipboardBlackBerry.h:
        (ClipboardBlackBerry):
        * platform/chromium/ChromiumDataObject.cpp:
        (WebCore::ChromiumDataObject::types):
        * platform/chromium/ChromiumDataObject.h:
        (ChromiumDataObject):
        * platform/chromium/ClipboardChromium.cpp:
        (WebCore::ClipboardChromium::types):
        (WebCore::ClipboardChromium::mayUpdateItems):
        * platform/chromium/ClipboardChromium.h:
        (ClipboardChromium):
        * platform/chromium/DragDataChromium.cpp:
        (WebCore::containsHTML):
        (WebCore::DragData::containsURL):
        (WebCore::DragData::asURL):
        (WebCore::DragData::containsPlainText):
        (WebCore::DragData::canSmartReplace):
        (WebCore::DragData::asFragment):
        * platform/efl/ClipboardEfl.cpp:
        (WebCore::ClipboardEfl::types):
        * platform/efl/ClipboardEfl.h:
        (ClipboardEfl):
        * platform/gtk/ClipboardGtk.cpp:
        (WebCore::ClipboardGtk::types):
        * platform/gtk/ClipboardGtk.h:
        (ClipboardGtk):
        * platform/mac/ClipboardMac.h:
        (ClipboardMac):
        * platform/mac/ClipboardMac.mm:
        (WebCore::addHTMLClipboardTypesForCocoaType):
        (WebCore::ClipboardMac::types):
        * platform/qt/ClipboardQt.cpp:
        (WebCore::ClipboardQt::types):
        * platform/qt/ClipboardQt.h:
        (ClipboardQt):
        * platform/win/ClipboardWin.cpp:
        (WebCore::addMimeTypesForFormat):
        (WebCore::ClipboardWin::types):
        * platform/win/ClipboardWin.h:
        (ClipboardWin):
        * platform/wx/ClipboardWx.cpp:
        (WebCore::ClipboardWx::types):
        * platform/wx/ClipboardWx.h:
        (ClipboardWx):

2012-02-28  Simon Fraser  <simon.fraser@apple.com>

        Update WebKitSystemInterface.

        Reviewed by Sam Weinig.

        * WebCore.exp.in:
        (drawLayerContents):
        * platform/mac/WebCoreSystemInterface.h:
        * platform/mac/WebCoreSystemInterface.mm:

2012-02-27  MORITA Hajime  <morrita@google.com>

        <content> element should behave as HTMLUnknownElement outside of a shadow DOM subtree
        https://bugs.webkit.org/show_bug.cgi?id=79551

        Reviewed by Dimitri Glazkov.

        The problem happened because HTMLContentElement doesn't create renderer anytime.
        
        This change allows it to create a renderer unless the HTMLContentElement is shadowed.
        Since this could happen not only on <content> but also on upcoming <shadow>,
        the corresponding part of the code is pulled up to InsertionPoint.

        Tests: fast/dom/shadow/content-element-outside-shadow-style-expected.html
               fast/dom/shadow/content-element-outside-shadow-style.html

        * dom/NodeRenderingContext.cpp:
        (WebCore::NodeRenderingContext::NodeRenderingContext):
        * dom/ShadowRoot.h:
        (WebCore):
        (WebCore::TreeScope::isShadowRoot):
        * dom/TreeScope.h:
        (TreeScope):
        * html/shadow/HTMLContentElement.h:
        * html/shadow/InsertionPoint.cpp:
        (WebCore::InsertionPoint::isShadowBoundary):
        (WebCore):
        * html/shadow/InsertionPoint.h:
        (InsertionPoint):
        (WebCore::isShadowBoundary):
        (WebCore):

2012-02-28  Daniel Cheng  <dcheng@chromium.org>

        Clipboard::getData should return an empty string instead of undefined
        https://bugs.webkit.org/show_bug.cgi?id=79712

        Reviewed by Tony Chang.

        Per the spec, an empty string should be returned when there is no data for the given typestring.

        Test: fast/events/dataTransfer-getData-returns-empty-string.html

        * bindings/js/JSClipboardCustom.cpp:
        * bindings/v8/custom/V8ClipboardCustom.cpp:
        * dom/Clipboard.h:
        (Clipboard):
        * dom/Clipboard.idl:
        * platform/blackberry/ClipboardBlackBerry.cpp:
        (WebCore::ClipboardBlackBerry::getData):
        * platform/blackberry/ClipboardBlackBerry.h:
        (ClipboardBlackBerry):
        * platform/chromium/ClipboardChromium.cpp:
        (WebCore::ClipboardChromium::getData):
        * platform/chromium/ClipboardChromium.h:
        (ClipboardChromium):
        * platform/efl/ClipboardEfl.cpp:
        (WebCore::ClipboardEfl::getData):
        * platform/efl/ClipboardEfl.h:
        (ClipboardEfl):
        * platform/gtk/ClipboardGtk.cpp:
        (WebCore::ClipboardGtk::getData):
        * platform/gtk/ClipboardGtk.h:
        (ClipboardGtk):
        * platform/mac/ClipboardMac.h:
        (ClipboardMac):
        * platform/mac/ClipboardMac.mm:
        (WebCore::ClipboardMac::getData):
        * platform/qt/ClipboardQt.cpp:
        (WebCore::ClipboardQt::getData):
        * platform/qt/ClipboardQt.h:
        (ClipboardQt):
        * platform/win/ClipboardUtilitiesWin.cpp:
        (WebCore::getFullCFHTML):
        (WebCore::getURL):
        (WebCore::getPlainText):
        (WebCore::getTextHTML):
        (WebCore::getCFHTML):
        (WebCore::fragmentFromHTML):
        * platform/win/ClipboardUtilitiesWin.h:
        (WebCore):
        * platform/win/ClipboardWin.cpp:
        (WebCore::ClipboardWin::getData):
        * platform/win/ClipboardWin.h:
        (ClipboardWin):
        * platform/wx/ClipboardWx.cpp:
        (WebCore::ClipboardWx::getData):
        * platform/wx/ClipboardWx.h:
        (ClipboardWx):

2012-02-28  Kenichi Ishibashi  <bashi@chromium.org>

        [Chromium] Uninitialized value in LocaleToScriptCodeForFontSelection
        https://bugs.webkit.org/show_bug.cgi?id=79779

        Set USCRIPT_COMMON to scriptCode as the initial value.

        Reviewed by Kent Tamura.

        No new tests. No behavior change.

        * platform/text/LocaleToScriptMappingICU.cpp:
        (WebCore::localeToScriptCodeForFontSelection):

2012-02-28  Kenneth Russell  <kbr@google.com>

        [chromium] Work around IOSurface-related corruption during readback
        https://bugs.webkit.org/show_bug.cgi?id=79735

        Reviewed by James Robinson.

        Copy the compositor's IOSurface-backed output into a temporary
        texture and perform the ReadPixels operation against that texture.

        It is infeasible to write an automated test for this issue.
        Tested manually by performing print preview multiple times against
        pages containing WebGL content on 10.7 and observing that the
        corruption in the output is no longer present.

        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::getFramebufferPixels):

2012-02-28  Adrienne Walker  <enne@google.com>

        [chromium] Inform v8 about extra memory used for PatternSkia clamp mode
        https://bugs.webkit.org/show_bug.cgi?id=79846

        Reviewed by James Robinson.

        For large images, creating a non-repeating Pattern in Skia can
        allocate a lot of memory. Inform v8 about this so that it can
        potentially garbage collect any Pattern objects that aren't being used
        and that are holding onto large image copies.

        * platform/graphics/Pattern.cpp:
        (WebCore::Pattern::Pattern):
        * platform/graphics/Pattern.h:
        (Pattern):
        * platform/graphics/skia/PatternSkia.cpp:
        (WebCore::Pattern::platformDestroy):
        (WebCore::Pattern::platformPattern):

2012-02-28  Jonathan Backer  <backer@chromium.org>

        [chromium] Reset damage tracker on visibility change.
        https://bugs.webkit.org/show_bug.cgi?id=79267

        Reviewed by James Robinson.

        Unit tests: CCLayerTreeHostImplTest.cpp

        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::setVisible):

2012-02-28  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r108834.
        http://trac.webkit.org/changeset/108834
        https://bugs.webkit.org/show_bug.cgi?id=79840

        Seems to cause a number of crashes under
        FrameView::doDeferredRepaints (Requested by jamesr__ on
        #webkit).

        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::draw):
        * svg/graphics/SVGImage.h:
        * svg/graphics/SVGImageCache.cpp:
        (WebCore::SVGImageCache::imageContentChanged):
        (WebCore::SVGImageCache::redrawTimerFired):
        * svg/graphics/SVGImageCache.h:
        (SVGImageCache):

2012-02-29  Mario Sanchez Prada  <msanchez@igalia.com>

        [GTK] Add support for nested event loops in RunLoop
        https://bugs.webkit.org/show_bug.cgi?id=79499

        Reviewed by Martin Robinson.

        Run a new nested mainloop if the main event loop is already
        running when calling to RunLoop::run(), and take care of stopping
        the right main loop too when RunLoop::stop() is invoked.

        * platform/RunLoop.h:
        (RunLoop):
        * platform/gtk/RunLoopGtk.cpp:
        (WebCore::RunLoop::RunLoop):
        (WebCore::RunLoop::~RunLoop):
        (WebCore::RunLoop::run):
        (WebCore::RunLoop::innermostLoop):
        (WebCore::RunLoop::pushNestedMainLoop):
        (WebCore::RunLoop::popNestedMainLoop):
        (WebCore):
        (WebCore::RunLoop::stop):

2012-02-28  Julien Chaffraix  <jchaffraix@webkit.org>

        Move RenderLayer::size() calls to a common function
        https://bugs.webkit.org/show_bug.cgi?id=76972

        Reviewed by Simon Fraser.

        Refactoring only.

        This change introduces RenderBox::cachedSizeForOverflowClip() that handles all the cached size
        requests that currently goes through the RenderLayer. This indirection helps to decouple the need
        for a RenderLayer so that we can lazily allocate RenderLayers as part of bug 75568.

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::cachedSizeForOverflowClip):
        Added this function to handle the calls to RenderLayer's size(). Unfortunately a lot of the
        code calls RenderLayer::size() directly so I could not make it private.

        * rendering/LayoutState.cpp:
        (WebCore::LayoutState::LayoutState):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::computeRectForRepaint):
        * rendering/RenderBox.h:
        (RenderBox):
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::clippedOverflowRectForRepaint):
        (WebCore::RenderInline::computeRectForRepaint):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::computeRectForRepaint):
        Fixed the call sites above.

2012-02-28  Tim Dresser  <tdresser@chromium.org>

        Provide DefaultDeviceScaleFactor though WebSettings
        https://bugs.webkit.org/show_bug.cgi?id=79534

        Reviewed by Darin Fisher.

        * page/Settings.cpp:
        (WebCore::Settings::Settings):
        (WebCore::Settings::setDefaultDeviceScaleFactor):
        (WebCore):
        * page/Settings.h:
        (Settings):
        (WebCore::Settings::defaultDeviceScaleFactor):

2012-02-28  Oliver Hunt  <oliver@apple.com>

        Fix build.

        * mathml/MathMLElement.cpp:
        (WebCore::MathMLElement::collectStyleForAttribute):

2012-02-28  Dean Jackson  <dino@apple.com>

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

        Unreviewed build fix for when ENABLE(CSS_FILTERS) is on
        but ENABLE(CSS_SHADERS) is off.

        * css/WebKitCSSFilterValue.cpp:
        (WebCore::WebKitCSSFilterValue::typeUsesSpaceSeparator):

2012-02-28  Dave Moore  <davemoore@chromium.org>

        Slow content causes choppy scrolling
        https://bugs.webkit.org/show_bug.cgi?id=79403

        Reviewed by James Robinson.

        This code helps make scrolling (via wheel or pad) less choppy
        when the content takes a long time to respond to the fake mouse moves
        generated during scrolls.


 * page/EventHandler.cpp:
        (WebCore):
        (MaximumDurationTracker):
        (WebCore::MaximumDurationTracker::MaximumDurationTracker):
        (WebCore::MaximumDurationTracker::~MaximumDurationTracker):
        (WebCore::EventHandler::EventHandler):
        (WebCore::EventHandler::clear):
        (WebCore::EventHandler::mouseMoved):
        (WebCore::EventHandler::dispatchFakeMouseMoveEventSoon):
        (WebCore::EventHandler::dispatchFakeMouseMoveEventSoonInQuad):
        * page/EventHandler.h:

2012-02-28  Andreas Kling  <awesomekling@apple.com>

        StyledElement::isPresentationAttribute() only needs the attribute name.
        <http://webkit.org/b/79828>

        Reviewed by Anders Carlsson.

        Pass the QualifiedName to isPresentationAttribute instead of the whole
        Attribute. We only need the name to know what kind of attribute it is.

        This makes the code a little less ugly and makes it possible to use
        the function without having an Attribute object.

        * dom/StyledElement.cpp:
        (WebCore::StyledElement::attributeChanged):
        * dom/StyledElement.h:
        (WebCore::StyledElement::isPresentationAttribute):
        * html/HTMLBRElement.cpp:
        (WebCore::HTMLBRElement::isPresentationAttribute):
        * html/HTMLBRElement.h:
        * html/HTMLBodyElement.cpp:
        (WebCore::HTMLBodyElement::isPresentationAttribute):
        * html/HTMLBodyElement.h:
        * html/HTMLButtonElement.cpp:
        (WebCore::HTMLButtonElement::isPresentationAttribute):
        * html/HTMLButtonElement.h:
        * html/HTMLDivElement.cpp:
        (WebCore::HTMLDivElement::isPresentationAttribute):
        * html/HTMLDivElement.h:
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::isPresentationAttribute):
        * html/HTMLElement.h:
        * html/HTMLEmbedElement.cpp:
        (WebCore::HTMLEmbedElement::isPresentationAttribute):
        * html/HTMLEmbedElement.h:
        * html/HTMLFontElement.cpp:
        (WebCore::HTMLFontElement::isPresentationAttribute):
        * html/HTMLFontElement.h:
        * html/HTMLFrameSetElement.cpp:
        (WebCore::HTMLFrameSetElement::isPresentationAttribute):
        * html/HTMLFrameSetElement.h:
        * html/HTMLHRElement.cpp:
        (WebCore::HTMLHRElement::isPresentationAttribute):
        * html/HTMLHRElement.h:
        * html/HTMLIFrameElement.cpp:
        (WebCore::HTMLIFrameElement::isPresentationAttribute):
        * html/HTMLIFrameElement.h:
        * html/HTMLImageElement.cpp:
        (WebCore::HTMLImageElement::isPresentationAttribute):
        * html/HTMLImageElement.h:
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::isPresentationAttribute):
        * html/HTMLInputElement.h:
        * html/HTMLLIElement.cpp:
        (WebCore::HTMLLIElement::isPresentationAttribute):
        * html/HTMLLIElement.h:
        * html/HTMLMarqueeElement.cpp:
        (WebCore::HTMLMarqueeElement::isPresentationAttribute):
        * html/HTMLMarqueeElement.h:
        * html/HTMLOListElement.cpp:
        (WebCore::HTMLOListElement::isPresentationAttribute):
        * html/HTMLOListElement.h:
        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::isPresentationAttribute):
        * html/HTMLObjectElement.h:
        * html/HTMLParagraphElement.cpp:
        (WebCore::HTMLParagraphElement::isPresentationAttribute):
        * html/HTMLParagraphElement.h:
        * html/HTMLPlugInElement.cpp:
        (WebCore::HTMLPlugInElement::isPresentationAttribute):
        * html/HTMLPlugInElement.h:
        * html/HTMLPreElement.cpp:
        (WebCore::HTMLPreElement::isPresentationAttribute):
        * html/HTMLPreElement.h:
        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::isPresentationAttribute):
        * html/HTMLSelectElement.h:
        * html/HTMLTableCaptionElement.cpp:
        (WebCore::HTMLTableCaptionElement::isPresentationAttribute):
        * html/HTMLTableCaptionElement.h:
        * html/HTMLTableCellElement.cpp:
        (WebCore::HTMLTableCellElement::isPresentationAttribute):
        * html/HTMLTableCellElement.h:
        * html/HTMLTableColElement.cpp:
        (WebCore::HTMLTableColElement::isPresentationAttribute):
        * html/HTMLTableColElement.h:
        * html/HTMLTableElement.cpp:
        (WebCore::HTMLTableElement::isPresentationAttribute):
        * html/HTMLTableElement.h:
        * html/HTMLTablePartElement.cpp:
        (WebCore::HTMLTablePartElement::isPresentationAttribute):
        * html/HTMLTablePartElement.h:
        * html/HTMLTextAreaElement.cpp:
        (WebCore::HTMLTextAreaElement::isPresentationAttribute):
        * html/HTMLTextAreaElement.h:
        * html/HTMLUListElement.cpp:
        (WebCore::HTMLUListElement::isPresentationAttribute):
        * html/HTMLUListElement.h:
        * html/HTMLVideoElement.cpp:
        (WebCore::HTMLVideoElement::isPresentationAttribute):
        * html/HTMLVideoElement.h:
        * mathml/MathMLElement.cpp:
        (WebCore::MathMLElement::isPresentationAttribute):
        * mathml/MathMLElement.h:
        * svg/SVGImageElement.cpp:
        (WebCore::SVGImageElement::isPresentationAttribute):
        * svg/SVGImageElement.h:
        * svg/SVGStyledElement.cpp:
        (WebCore::SVGStyledElement::isPresentationAttribute):
        * svg/SVGStyledElement.h:
        * svg/SVGTextContentElement.cpp:
        (WebCore::SVGTextContentElement::isPresentationAttribute):
        * svg/SVGTextContentElement.h:

2012-02-28  Enrica Casucci  <enrica@apple.com>

        More Pasteboard code cleanup.
        https://bugs.webkit.org/show_bug.cgi?id=79816

        Removing the last references to NSPasteboard.

        Reviewed by Alexey Proskuryakov.

        No new tests. No change in functionality.

        * WebCore.xcodeproj/project.pbxproj:
        * editing/mac/EditorMac.mm:
        (WebCore::Editor::pasteWithPasteboard):
        (WebCore::Editor::takeFindStringFromSelection):
        * loader/EmptyClients.h:
        (WebCore::EmptyEditorClient::setInsertionPasteboard):
        * page/DragClient.h:
        * page/EditorClient.h:
        * platform/DragData.h:
        * platform/Pasteboard.h:
        * platform/mac/ClipboardMac.h:
        * platform/mac/PasteboardHelper.h: Removed.

2012-02-28  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r109137.
        http://trac.webkit.org/changeset/109137
        https://bugs.webkit.org/show_bug.cgi?id=79833

        Broke cr-mac build (Requested by aklein on #webkit).

        * platform/graphics/mac/SimpleFontDataMac.mm:
        (WebCore):
        (WebCore::pathFromFont):

2012-02-28  Jungshik Shin  <jshin@chromium.org>

        Add a fallback path to LineBreakIteratorPoolICU when the locale
        name from a web page is invalid and ICU fails to get a line break
        iterator instance. Also add a null check to 
        TextBreakIteratorICU::acquireLineBreakIterator.

        Reviewed by Dan Bernstein.

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

        Test: fast/text/invalid-locale.html

        * platform/text/LineBreakIteratorPoolICU.h:
        (WebCore::LineBreakIteratorPool::take):
        * platform/text/TextBreakIteratorICU.cpp:
        (WebCore::acquireLineBreakIterator):

2012-02-28  Abhishek Arya  <inferno@chromium.org>

        Crash due to accessing removed continuation in multi-column layout.
        https://bugs.webkit.org/show_bug.cgi?id=78417

        Reviewed by David Hyatt.

        This patch addresses two problems:
        1. Run-in block got split due to addition of a column-span child.
        The clone part was incorrectly intruding into the sibling block,
        even when it was part of the continuation chain.
        2. Like r73296, we don't need to set continuation on an
        anonymous block since we haven't split a real element.

        Test: fast/multicol/span/runin-continuation-crash.html

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

2012-02-28  Abhishek Arya  <inferno@chromium.org>

        Incorrect before child parent calculation when adding new children
        to anonymous column blocks.
        https://bugs.webkit.org/show_bug.cgi?id=79755

        Reviewed by David Hyatt.

        before child can be wrapped in anonymous containers, so need to
        take care of that in before child parent calculation.

        Test: fast/multicol/span/before-child-anonymous-column-block.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::addChildToAnonymousColumnBlocks):

2012-02-28  Ned Holbrook  <nholbrook@apple.com>

        Reimplement pathFromFont() in SimpleFontDataMac.mm
        https://bugs.webkit.org/show_bug.cgi?id=79811

        Reviewed by Dan Bernstein.

        Debug-only function, so no new tests.

        * platform/graphics/mac/SimpleFontDataMac.mm:
        (WebCore::pathFromFont): Reimplemented.

2012-02-28  Alexis Menard  <alexis.menard@openbossa.org>

        getComputedStyle fails for 'first-line' pseudo-element
        https://bugs.webkit.org/show_bug.cgi?id=57505

        Reviewed by Tony Chang.

        Querying the selector with a pseudo-element using getComputedStyle should work
        even if the selector was not declared in the stylesheet. When not declared, we need
        to use the RenderStyle created to do the rendering as there is no pseudo-style.
        This match the behavior of Firefox.

        No new tests : Updated expectation and extended getComputedStyle-with-pseudo-element.html.

        * dom/Element.cpp:
        (WebCore::Element::computedStyle):

2012-02-28  Ashod Nakashian  <ashodnakashian@yahoo.com>

        Move FILE_SYSTEM code out of WorkerContext and into the fileapi folder
        https://bugs.webkit.org/show_bug.cgi?id=79449

        Reviewed by Adam Barth.

        This moves FILE_SYSTEM code out of WorkerContext and into the fileapi/WorkerContextFileSystem.
        None-functional changes, no new tests necessary.

        * CMakeLists.txt:
        * DerivedSources.make:
        * DerivedSources.pri:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * fileapi/WorkerContextFileSystem.cpp: Added.
        (WebCore):
        (WebCore::WorkerContextFileSystem::webkitRequestFileSystem):
        (WebCore::WorkerContextFileSystem::webkitRequestFileSystemSync):
        (WebCore::WorkerContextFileSystem::webkitResolveLocalFileSystemURL):
        (WebCore::WorkerContextFileSystem::webkitResolveLocalFileSystemSyncURL):
        * fileapi/WorkerContextFileSystem.h: Added.
        (WebCore):
        (WorkerContextFileSystem):
        * fileapi/WorkerContextFileSystem.idl: Added.
        * workers/WorkerContext.cpp:
        (WebCore::WorkerContext::ensureEventTargetData):
        * workers/WorkerContext.h:
        (WebCore):
        (WorkerContext):
        * workers/WorkerContext.idl:

2012-02-28  Alexey Proskuryakov  <ap@apple.com>

        FileReader crashes when file is not readable
        https://bugs.webkit.org/show_bug.cgi?id=79715

        Reviewed by Jian Li.

        Test: fast/files/file-reader-directory-crash.html

        * platform/SharedBuffer.cpp: (WebCore::SharedBuffer::SharedBuffer): Crash early if a caller
        mixed up in-band error signal with length again.

        * platform/network/BlobResourceHandle.cpp:
        (WebCore): Changed errors into an enum. Added a proper domain for blob errors.
        (WebCore::BlobResourceHandle::didReceiveResponse): There is already a constant for INT_MAX
        in C/C++.
        (WebCore::BlobResourceHandle::didRead): Don't send "-1" for failure down the success path.
        (WebCore::BlobResourceHandle::notifyFail): Use a proper domain for blob errors, and a non-
        empty message.

2012-02-28  Adam Klein  <adamk@chromium.org>

        Unreviewed, fix cr-win build after r109119.

        * platform/graphics/chromium/TransparencyWin.h:
        (TransparencyWin):

2012-02-28  Mario Sanchez Prada  <msanchez@igalia.com>

        [GTK] Add GMainLoop and GMainContext to be handled by GRefPtr
        https://bugs.webkit.org/show_bug.cgi?id=79496

        Reviewed by Martin Robinson.

        Updated places where raw pointers to GMainLoop and GMainContext
        were being used, replacing them with GRefPtr-based code.

        * platform/RunLoop.h:
        (RunLoop):
        * platform/gtk/RunLoopGtk.cpp:
        (WebCore::RunLoop::RunLoop):
        (WebCore::RunLoop::~RunLoop):
        (WebCore::RunLoop::mainLoop):
        (WebCore::RunLoop::stop):
        (WebCore::RunLoop::wakeUp):
        (WebCore::RunLoop::TimerBase::start):
        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCoreSynchronousLoader):
        (WebCore::WebCoreSynchronousLoader::WebCoreSynchronousLoader):
        (WebCore::WebCoreSynchronousLoader::~WebCoreSynchronousLoader):
        (WebCore::WebCoreSynchronousLoader::didFinishLoading):
        (WebCore::WebCoreSynchronousLoader::run):

2012-02-28  Alok Priyadarshi  <alokp@chromium.org>

        Heap-use-after-free in WebCore::RenderLayer::addChild
        https://bugs.webkit.org/show_bug.cgi?id=79698

        Reviewed by Simon Fraser.

        This patch fixes a regression introduced in r108659.
        The reflection layer was moved to the parent by mistake. It was then
        deleted and the parent was left holding on to a deleted pointer. This
        patch restores the location where reflection layer is removed - before
        moving the child layers.

        Test: fast/reflections/toggle-reflection-crash.html

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::removeOnlyThisLayer):

2012-02-28  Ken Buchanan  <kenrb@chromium.org>

        Crash from list marker having inline and block children
        https://bugs.webkit.org/show_bug.cgi?id=79793

        Reviewed by Julien Chaffraix.

        Crashing condition in which an anonymous block was being collapsed
        even though it had a block sibling. removeChild() was not checking
        for siblings that might precede :before content renderers, such
        as list items. This patch corrects that.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::removeChild)

2012-02-28  Adam Klein  <adamk@chromium.org>

        Unreviewed, speculative test fix after r109016.

        * platform/graphics/chromium/TransparencyWin.cpp:
        (WebCore::TransparencyWin::OwnedBuffers::OwnedBuffers): Explicitly pass a scale of 1 to ImageBuffer::create.
        * platform/graphics/chromium/TransparencyWin.h:
        (WebCore): Update names of re-enabled tests.

2012-02-28  Antti Koivisto  <antti@apple.com>

        Give StyleRule files of its own
        https://bugs.webkit.org/show_bug.cgi?id=79778

        Totally rubber-stamped by Andreas Kling.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSParser.cpp:
        * css/CSSStyleRule.cpp:
        (WebCore):
        (WebCore::CSSStyleRule::style):
        * css/CSSStyleRule.h:
        (WebCore):
        (CSSStyleRule):
        * css/CSSStyleSelector.cpp:
        * css/CSSStyleSheet.cpp:
        * css/StyleRule.cpp: Copied from Source/WebCore/css/CSSStyleRule.cpp.
        (WebCore):
        * css/StyleRule.h: Copied from Source/WebCore/css/CSSStyleRule.h.
        (WebCore):
        * editing/EditingStyle.cpp:
        * inspector/InspectorCSSAgent.cpp:
        * inspector/InspectorInstrumentation.cpp:
        * inspector/InspectorStyleSheet.cpp:
        * page/PageSerializer.cpp:

2012-02-28  Pavel Feldman  <pfeldman@google.com>

        Web Inspector: remove window aspects from the timeline presentation model.
        https://bugs.webkit.org/show_bug.cgi?id=79803

        Reviewed by Yury Semikhatsky.

        * inspector/front-end/TimelineOverviewPane.js:
        (WebInspector.TimelineOverviewPane):
        (WebInspector.TimelineOverviewPane.prototype.accept):
        (WebInspector.TimelineOverviewPane.prototype._setWindowIndices):
        (WebInspector.TimelineOverviewPane.prototype.windowLeft):
        (WebInspector.TimelineOverviewPane.prototype.windowRight):
        (WebInspector.TimelineOverviewPane.prototype._fireWindowChanged):
        (WebInspector.TimelineOverviewWindow.prototype._dragWindow):
        (WebInspector.TimelineOverviewPane.WindowSelector):
        * inspector/front-end/TimelinePanel.js:
        (WebInspector.TimelinePanel):
        (WebInspector.TimelinePanel.prototype._onCategoryCheckboxClicked):
        (WebInspector.TimelinePanel.prototype._updateBoundaries):
        * inspector/front-end/TimelinePresentationModel.js:
        (WebInspector.TimelinePresentationModel.prototype.reset):
        (WebInspector.TimelineCategory):
        (WebInspector.TimelineCategory.prototype.get hidden):
        (WebInspector.TimelineCategory.prototype.set hidden):

2012-02-28  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Improve the visual of the tiling
        https://bugs.webkit.org/show_bug.cgi?id=79648

        Reviewed by Noam Rosenthal.

        When we cover the view with tiles[1], we do so from the center
        and out, in bigger and bigger cicles by finding the current minimum
        covered distance.

        This looks like painting a rect, then a cross, then a rect, ...
        and can be noticed when a page blocks during tiling.

        We can do this better by only covering with tiles in rects at a time.

        The original code was done so that it gave preference to tiles in
        vertical direction due to that being the most common scrolling
        direction. This is not needed anymore as we are now using the
        trajectory vector when panning, which always gives preference for
        creating tiles in the panned direction.

        [1] It should be noted that we always cover the visibleRect in one go,
            and that we here are talking about covering the coverRect beyond
            the visibleRect

        * platform/graphics/TiledBackingStore.cpp:
        (WebCore::TiledBackingStore::tileDistance):

2012-02-28  Yury Semikhatsky  <yurys@chromium.org>

        Web Inspector: preserve memory counters size after frontend reopening
        https://bugs.webkit.org/show_bug.cgi?id=79792

        Clear collected counter values when timeline panel is reset. Persist
        timeline grid/counters splitter position to restore it when front-end
        is opened next time.

        Reviewed by Pavel Feldman.

        * inspector/front-end/MemoryStatistics.js:
        (WebInspector.MemoryStatistics.prototype.reset):
        * inspector/front-end/TimelinePanel.js:
        (WebInspector.TimelinePanel):
        (WebInspector.TimelinePanel.prototype._setSplitterPosition):
        (WebInspector.TimelinePanel.prototype._resetPanel):
        * inspector/front-end/timelinePanel.css:
        (#counter-values-bar):

2012-02-28  Pavel Feldman  <pfeldman@google.com>

        Web Inspector: move filtering of the timeline records into the presentation model.
        https://bugs.webkit.org/show_bug.cgi?id=79789

        Reviewed by Yury Semikhatsky.

        * inspector/front-end/TimelineModel.js:
        * inspector/front-end/TimelineOverviewPane.js:
        (WebInspector.TimelineOverviewPane):
        (WebInspector.TimelineOverviewPane.prototype.setStartAtZero):
        (WebInspector.TimelineOverviewPane.prototype.scrollWindow):
        (WebInspector.TimelineOverviewPane.prototype.accept):
        (WebInspector.TimelineOverviewPane.prototype._setWindowIndices):
        (WebInspector.TimelineStartAtZeroOverview):
        (WebInspector.TimelineStartAtZeroOverview.prototype._onWindowChanged):
        * inspector/front-end/TimelinePanel.js:
        (WebInspector.TimelinePanel):
        (WebInspector.TimelinePanel.prototype._createStatusbarButtons):
        (WebInspector.TimelinePanel.prototype._updateRecordsCounter):
        (WebInspector.TimelinePanel.prototype._glueParentButtonClicked):
        (WebInspector.TimelinePanel.prototype._toggleStartAtZeroButtonClicked):
        (WebInspector.TimelinePanel.prototype._innerAddRecordToTimeline):
        (WebInspector.TimelinePanel.prototype._resetPanel):
        (WebInspector.TimelinePanel.prototype._refresh):
        (WebInspector.TimelinePanel.prototype.revealRecordAt):
        (WebInspector.TimelinePanel.prototype._refreshRecords):
        (WebInspector.TimelineExpandableElement.prototype._update):
        (WebInspector.TimelineCategoryFilter):
        (WebInspector.TimelineCategoryFilter.prototype.accept):
        (WebInspector.TimelineIsLongFilter):
        (WebInspector.TimelineIsLongFilter.prototype.accept):
        * inspector/front-end/TimelinePresentationModel.js:
        (WebInspector.TimelinePresentationModel):
        (WebInspector.TimelinePresentationModel.prototype.addFilter):
        (WebInspector.TimelinePresentationModel.prototype.reset):
        (WebInspector.TimelinePresentationModel.prototype.minimumRecordTime):
        (WebInspector.TimelinePresentationModel.prototype.maximumRecordTime):
        (WebInspector.TimelinePresentationModel.prototype.addRecord):
        (WebInspector.TimelinePresentationModel.prototype._updateBoundaries):
        (WebInspector.TimelinePresentationModel.prototype._findParentRecord):
        (WebInspector.TimelinePresentationModel.prototype.setGlueRecords):
        (WebInspector.TimelinePresentationModel.prototype.fireWindowChanged):
        (WebInspector.TimelinePresentationModel.prototype.get _recordStyles):
        (WebInspector.TimelinePresentationModel.prototype.filteredRecords):
        (WebInspector.TimelinePresentationModel.prototype._filterRecords):
        (WebInspector.TimelinePresentationModel.Record.prototype.get visibleChildrenCount):
        (WebInspector.TimelinePresentationModel.Record.prototype.get invisibleChildrenCount):
        (WebInspector.TimelinePresentationModel.Filter):
        (WebInspector.TimelinePresentationModel.Filter.prototype.accept):

2012-02-28  Florin Malita  <fmalita@google.com>

        Percent width/height SVG not always scaled on window resize
        https://bugs.webkit.org/show_bug.cgi?id=79490

        Reviewed by Nikolas Zimmermann.

        Tests: fast/repaint/percent-minheight-resize-expected.html
               fast/repaint/percent-minheight-resize.html
               svg/custom/svg-percent-scale-expected.html
               svg/custom/svg-percent-scale-vonly-expected.html
               svg/custom/svg-percent-scale-vonly.html
               svg/custom/svg-percent-scale.html

        Fix a couple of problems preventing correct SVG scaling on window resize:

        - RenderReplaced::computePreferredLogicalWidths is not SVG attribute aware and computes
        a non-zero m_minPreferredLogicalWidth even when the SVG widh/height are percentages.

        - RenderBlock::layoutInlineChildren is also not SVG attribute aware and does not trigger
        percent height child layouts on vertical-only resizes.

        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::layoutInlineChildren):
        Use hasRelativeDimensions() instead of direct width/height->isPercent tests. This also fixes
        an HTML issue where percent {min,max}Height inline elements are not updated on vertical-only resizes.

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::hasRelativeDimensions):
        (WebCore):
        * rendering/RenderBox.h:
        (RenderBox):
        Add virtual hasRelativeDimensions() method.

        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::computePreferredLogicalWidths):
        Use hasRelativeDimensions() instead of direct width/height->isPercent tests.

        * rendering/svg/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::computeReplacedLogicalHeight):
        (WebCore::RenderSVGRoot::willBeDestroyed):
        Register percent-height SVG elements with the gPercentHeightDescendantsMap, and clean-up on destruction
        or height unit change.

        (WebCore::RenderSVGRoot::hasRelativeDimensions):
        (WebCore):
        * rendering/svg/RenderSVGRoot.h:
        (RenderSVGRoot):
        SVG-aware hasRelativeDimensions() override.

2012-02-28  Yury Semikhatsky  <yurys@chromium.org>

        Web Inspector: show resource dividers on memory counter graphs
        https://bugs.webkit.org/show_bug.cgi?id=79782

        Resource dividers are drawn on the memory counter graphs.

        Reviewed by Pavel Feldman.

        * inspector/front-end/MemoryStatistics.js:
        (WebInspector.MemoryStatistics.prototype.updateDividers):
        (WebInspector.MemoryStatistics.prototype.setMainTimelineGrid):
        (WebInspector.MemoryStatistics.prototype._updateSize):
        (WebInspector.MemoryStatistics.prototype.show):
        (WebInspector.MemoryStatistics.prototype.refresh):
        (WebInspector.MemoryStatistics.prototype._refreshDividers):
        * inspector/front-end/TimelineGrid.js:
        (WebInspector.TimelineGrid.prototype.get dividersElement):
        (WebInspector.TimelineGrid.prototype.updateDividers):
        * inspector/front-end/TimelinePanel.js:
        (WebInspector.TimelinePanel):
        (WebInspector.TimelinePanel.prototype._timelinesOverviewModeChanged):
        (WebInspector.TimelinePanel.prototype._refreshRecords):
        (WebInspector.TimelinePanel.prototype.get timlinePaddingLeft):
        * inspector/front-end/timelinePanel.css:
        (#memory-graphs-canvas-container):
        (#memory-graphs-canvas-container .resources-dividers):

2012-02-28  Nikolas Zimmermann  <nzimmermann@rim.com>

        Integrate SVGUseElement within the new shadow root concept
        https://bugs.webkit.org/show_bug.cgi?id=78902

        Reviewed by Zoltan Herczeg.

        Replace SVG shadow tree implementation with the new, modern #shadow-root implementation.

        Current situation in trunk:
        SVGUseElement doesn't create/hold the shadow tree, unlike its expected in
        the modern #shadow-root concept, but its renderer RenderSVGShadowTreeRootContainer.
        That creates a cycle, as the actual DOM tree is stored as RefPtr<SVGGElement> inside
        a renderer - that's weak conceptually, and has lead to sublte security bugs in the past.

        Whenever a target element of a <use> element changed, invalidateShadowTree() is called
        which calls setNeedsStyleRecalc(), and sets m_needsShadodwTreeRecreation to true.
        Once style recalculation happens, the RenderSVGShadowTreeRootContainer then eventually
        built the shadow tree, by cloning the target node, building the SVGElementInstance tree
        etc, -- all within the render tree.

        To easy reviewing, here's a dump of the current render tree for a simple <use> example:
        <defs><rect id="rect"/></defs><use xlink:href="#rect"/>

        Dump of render tree:
        RenderSVGHiddenContainer {defs}        // <defs> (SVGDefsElement)
            RenderSVGRect {rect}               // <rect> (SVGRectElement)
        RenderSVGShadowTreeRootContainer {use} // <use> (SVGUseElement)
            RenderSVGContainer {g}             // <g> (SVGShadowTreeRootElement)
                RenderSVGRect {rect}           // <rect> (SVGRectElement, clone of <rect> in <defs>)

        The SVGShadowTreeRootElement is created & stored by RenderSVGShadowTreeRootContainer,
        the renderer of the <use> element. The RenderSVGTransformableContainer renderer created
        for the SVGShadowTreeRootElement stores the x/y translation induced by the <use> attributes.

        There are lots of places all over WebCore that assume the existance of a <g> renderer
        as first child of the <use> element, representing the "SVG shadow tree root".

        Summary of this patch:
        Let SVGUseElement create&maintain a #shadow-root, and append the cloned target elements
        into this shadow root. We no longer have to take care of attachment/detachment, style
        recalculation, etc. - that's handled transparenly by ShadowRoot(List) now.

        This makes SVGShadowTreeElements & RenderSVGShadowTreeRootContainer obsolete. Switch
        SVGUseElement to create a RenderSVGTransformableContainer as its renderer, and make
        it respect the translation induced by the x/y attributes, given for a <use> element.

        Remove all occourences of SVGShadowRoot, remove all special cases it induced.

        It's all covered by existing tests, took a while to make them all pass again.

        * CMakeLists.txt: Remove SVGShadowTreeElements/RenderSVGShadowTreeRootContainer from build.
        * GNUmakefile.list.am: Ditto.
        * Target.pri: Ditto.
        * WebCore.gypi: Ditto.
        * WebCore.vcproj/WebCore.vcproj: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Ditto.
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::collectMatchingRulesForList): Enable fast path for selector checking, now that special shadow tree rules are gone.
        * css/SelectorChecker.cpp:
        (WebCore::linkAttribute): No need to guard this code with ENABLE(SVG).
        (WebCore::SelectorChecker::checkSelector): Remove obsolete SVG shadow root special case.
        * dom/EventDispatcher.cpp:
        (WebCore::eventTargetRespectingSVGTargetRules): Remove loop, simplify & cleanup this code.
        (WebCore::EventDispatcher::adjustToShadowBoundaries): s/isShadowRootOrSVGShadowRoot/isShadowRoot/.
        (WebCore::EventDispatcher::adjustRelatedTarget): Ditto.
        (WebCore::EventDispatcher::ensureEventAncestors): Simplify logic for SVG, fixed a FIXME.
        * dom/Node.cpp: Remove obsolete svgShadowHost().
        (WebCore::Node::shadowTreeRootNode): Remove obsolete isSVGShadowRoot() checks.
        (WebCore::Node::nonBoundaryShadowTreeRootNode): Ditto.
        (WebCore::Node::isInShadowTree): Make it const.
        * dom/Node.h: Remove isSVGShadowRoot/svgShadowHost.
        (WebCore::Node::isShadowRoot): s/IsShadowRootOrSVGShadowRootFlag/isShadowRoot/.
        (WebCore::Node::parentNode): Augment comments.
        (WebCore::Node::parentNodeGuaranteedHostFree): Ditto.
        * dom/Range.cpp:
        (WebCore::Range::checkNodeBA): Remove obsolete SVG shadow root special case.
        * dom/ScriptElement.cpp:
        (WebCore::ScriptElement::prepareScript): Ditto.
        * rendering/RenderObject.h: Remove isSVGShadowTreeRootContainer.
        (WebCore::RenderObject::isSVGTransformableContainer): Added.
        * rendering/svg/RenderSVGAllInOne.cpp: Remove SVGShadowTreeElements/RenderSVGShadowTreeRootContainer from build.
        * rendering/svg/RenderSVGModelObject.cpp:
        (WebCore::isGraphicsElement): To check for <use>, a tag name comparision is needed now, as it no longer has a special renderer.
        * rendering/svg/RenderSVGResourceClipper.cpp:
        (WebCore::RenderSVGResourceClipper::drawContentIntoMaskImage): Ditto.
        (WebCore::RenderSVGResourceClipper::calculateClipContentRepaintRect): Ditto.
        (WebCore::RenderSVGResourceClipper::hitTestClipContent): Ditto.
        * rendering/svg/RenderSVGResourceContainer.cpp: Remove RenderSVGShadowTreeRootContainer.h include.
        * rendering/svg/RenderSVGShadowTreeRootContainer.cpp: Removed.
        * rendering/svg/RenderSVGShadowTreeRootContainer.h: Removed.
        * rendering/svg/RenderSVGTransformableContainer.cpp: Keep track of last used additional x/y translation.
        (WebCore::RenderSVGTransformableContainer::calculateLocalTransform): Handle x/y translation for <use> contains here, instead of storing it in the SVGShadowTreeRootElement.
        * rendering/svg/RenderSVGTransformableContainer.h: Store last used x/y translation.
        (WebCore::RenderSVGTransformableContainer::isSVGTransformableContainer): Return true.
        (WebCore::toRenderSVGTransformableContainer): Add conversion helpers.
        * rendering/svg/RenderSVGViewportContainer.cpp: Ditto.
        (WebCore::RenderSVGViewportContainer::calcViewport): Handle width/height attributes inheritance from the <use> element, if we're a <svg> or <symbol> replacement in the shadow tree.
        * rendering/svg/RenderSVGViewportContainer.h: Remove isSVGContainer() override which is not needed here (already present in RenderSVGContainer).
        * rendering/svg/SVGShadowTreeElements.cpp: Removed.
        * rendering/svg/SVGShadowTreeElements.h: Removed.
        * svg/SVGAElement.cpp:
        (WebCore::SVGAElement::createRenderer): Check if parentNode is really a SVGElement, before casting.
        * svg/SVGElement.cpp:
        (WebCore::SVGElement::isOutermostSVGSVGElement): Early exit if tag name isn't <svg>, or if we're in a shadow tree (can't be an outermost <svg> element then).
        (WebCore::hasLoadListener): Deploy parentOrHostElement() usage to remove any special cases, related to shadow boundaries.
        (WebCore::SVGElement::sendSVGLoadEventIfPossible): Ditto.
        (WebCore::SVGElement::customStyleForRenderer): Ditto.
        * svg/SVGElementInstance.cpp:
        (WebCore::SVGElementInstance::invalidateAllInstancesOfElement): Call updateStyleIfNeeded() instead of updateLayoutIgnorePendingStylesheets().
        * svg/SVGGElement.cpp:
        (WebCore::SVGGElement::rendererIsNeeded): s/parentNode/parentOrHostElement/ - we need to cross shadow boundaries now.
        * svg/SVGGElement.h: Remove obsolete isShadowTreeContainerElement().
        * svg/SVGLocatable.cpp:
        (WebCore::SVGLocatable::nearestViewportElement): s/parentNode/parentOrHostElement/ - we need to cross shadow boundaries now.
        (WebCore::SVGLocatable::farthestViewportElement): Ditto.
        (WebCore::SVGLocatable::computeCTM): Ditto.
        * svg/SVGStyledElement.cpp:
        (WebCore::SVGStyledElement::title): Ditto. (+ simplify code a lot, no need to walk the shadow tree to find its root anymore, use isInShadowTree() helper.)
        (WebCore::SVGStyledElement::rendererIsNeeded): Ditto.
        * svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::SVGUseElement): Remove no longer needed m_updatesBlocked.
        (WebCore::SVGUseElement::create): Always call ensureShadowRoot(), to create a #shadow-root, upon creating a SVGUseElement.
        (WebCore::SVGUseElement::insertedIntoDocument): Align with SVGFEImageElement/SVGTRefElement - call buildPendingResource() from insertedIntoDocument(), finally! (no renderer needed anymore to update the SVG shadow subtree).
        (WebCore::SVGUseElement::removedFromDocument): Align with SVGFEImageElement/SVGTRefElement - immediately release the SVGElementInstance & shadow tree, once we're removed from the document.
        (WebCore::SVGUseElement::svgAttributeChanged): Simplify code a lot, no longer need to deal with x/y/width/height attributes, the renderes in the shadow tree grab these values from their corresponding <use> elements automatically now.
        (WebCore::SVGUseElement::willRecalcStyle):
            New main part of the logic. invalidateShadowTree() calls setNeedsStyleRecalc, and sets m_needsShadowTreeRecreation=true. If we encounter this case, force rebuilding the SVG shadow tree
            and the SVGElementInstance tree, immediately, before executing the actual style recalc. This allows us to lazily rebuild the SVG shadow tree for the <use> element. Consider:
            <defs><rect id="rect"></defs> <use xlink:href="#rect"/>. Now from a script we change the rect x/y/width/height attributes:
            rect.setAttribute("x", "10"); rect.setAttribute("y", "10")... each call will lead to a SVGUseElement::invalidateShadowTree() call by SVGElementInstance::invalidateAllInstancesOfElement, invoked after the <rect> element got parsed.
            This won't update the shadow tree four times, but only once upon the next style recalculation - otherwise performance is a nightmare.
            This will serve as future starting point, to explore partial SVG subtree re-clones, which should easily be doable now.
        (WebCore::dumpInstanceTree): Add a 'static' to allow DUMP_INSTANCE_TREE to be used in clang builds.
        (WebCore::SVGUseElement::clearResourceReferences): Added helper to release instance & shadow tree.
        (WebCore::SVGUseElement::buildPendingResource): Modeled exactly like SVGFEImageElement/SVGTRefElement. It's possible to share more code between these in future.
        (WebCore::SVGUseElement::buildShadowAndInstanceTree): Cleanup code, adapt to new shadow-root concept.
        (WebCore::SVGUseElement::createRenderer): Create a RenderSVGTransformableContainer, no longer a <use> specific renderer.
        (WebCore::removeDisallowedElementsFromSubtree): Use new replacedChild/appendChild variants, that don't require a ExceptionCode to be passed in.
        (WebCore::SVGUseElement::buildShadowTree): Ditto.
        (WebCore::SVGUseElement::expandUseElementsInShadowTree): Ditto.
        (WebCore::SVGUseElement::expandSymbolElementsInShadowTree): Ditto.
        (WebCore::SVGUseElement::invalidateShadowTree): Only trigger style recalculations if needed.
        * svg/SVGUseElement.h: Remove lots of now unnecessary overrides: attach/detach/didRecalcStyle/updateContainerOffset/updateContainerSizes/etc..
        * svg/animation/SVGSMILElement.cpp:
        (WebCore::SVGSMILElement::insertedIntoDocument): No need to walk the shadow tree to find its root anymore, use isInShadowTree() helper.

2012-02-28  Shinya Kawanaka  <shinyak@chromium.org>

        Element should be able to have multiple shadow roots.
        https://bugs.webkit.org/show_bug.cgi?id=77931

        Reviewed by Hajime Morita.

        This patch enables us to add multiple shadow subtrees into elements.
        Note that multiple shadow subtrees are enabled
        only if RuntimeEnabledFeatures::multipleShadowSubtrees is enabled.

        Since we don't have <shadow> element yet, only the youngest shadow tree
        will be rendered. This patch includes tests to confirm adding a new shadow
        tree dynamically to confirm only the youngest shadow tree is renderered.

        Tests: fast/dom/shadow/multiple-shadowroot-rendering.html
               fast/dom/shadow/multiple-shadowroot.html

        * WebCore.exp.in:
        * dom/Element.cpp:
          Uses ShadowRootList interfaces directly instead of ShadowRootList emulation methods.
        (WebCore::Element::~Element):
        (WebCore::Element::attach):
        (WebCore::Element::addShadowRoot):
        (WebCore::Element::removeShadowRootList):
        * dom/Element.h:
        (Element):
        * dom/NodeRenderingContext.cpp:
          Makes non-youngest shadow subtrees hidden.
        (WebCore::NodeRenderingContext::NodeRenderingContext):
        (WebCore::NodeRenderingContext::hostChildrenChanged):
          Since non-youngest children may be changed, make sure host children are changed.
        * dom/ShadowRoot.cpp:
        (WebCore::ShadowRoot::create):
        * dom/ShadowRoot.h:
          Utility methods to make code intention clear are added.
        (WebCore::ShadowRoot::youngerShadowRoot):
        (WebCore::ShadowRoot::olderShadowRoot):
        (ShadowRoot):
        (WebCore::ShadowRoot::isYoungest):
        (WebCore::ShadowRoot::isOldest):
        * dom/ShadowRootList.cpp:
        (WebCore::ShadowRootList::popShadowRoot):
        (WebCore::ShadowRootList::attach):
        (WebCore::ShadowRootList::detach):
          Detaches shadow subtrees.
        * testing/Internals.cpp:
        (WebCore::Internals::address):
        (WebCore):
        (WebCore::Internals::youngerShadowRoot):
        (WebCore::Internals::olderShadowRoot):
        (WebCore::Internals::removeShadowRoot):
        * testing/Internals.h:
        (Internals):
        * testing/Internals.idl:

2012-02-28  Antti Koivisto  <antti@apple.com>

        Split CSSStyleRule into internal and CSSOM type
        https://bugs.webkit.org/show_bug.cgi?id=79763

        Reviewed by Andreas Kling.

        - Split the data out as StyleRule
        - Make CSSStyleSelector operate on StyleRule instead of CSSStyleRule
        
        This is an intermediate step. Both CSSStyleRule and StyleRule are still always constructed so
        the patch increases memory consumption by a few pointers per css rule. Upcoming
        patches will make CSSStyleRules to be constructed on demand.
        
        The patch does not yet move StyleRule to a file of its own.

        * css/CSSPageRule.cpp:
        (WebCore::CSSPageRule::CSSPageRule):
        * css/CSSPageRule.h:
        (WebCore::CSSPageRule::create):
        (CSSPageRule):
        * css/CSSParser.cpp:
        (WebCore::CSSParser::createStyleRule):
        (WebCore::CSSParser::createPageRule):
        * css/CSSRule.h:
        (WebCore::CSSRule::CSSRule):
        (CSSRule):
        * css/CSSStyleRule.cpp:
        (WebCore::StyleRule::StyleRule):
        (WebCore):
        (WebCore::StyleRule::~StyleRule):
        (WebCore::StyleRule::addSubresourceStyleURLs):
        (WebCore::StyleRule::ensureCSSStyleRule):
        (WebCore::CSSStyleRule::CSSStyleRule):
        (WebCore::CSSStyleRule::~CSSStyleRule):
        (WebCore::CSSStyleRule::generateSelectorText):
        (WebCore::CSSStyleRule::setSelectorText):
        (WebCore::CSSStyleRule::cssText):
        * css/CSSStyleRule.h:
        (WebCore):
        (StyleRule):
        (WebCore::StyleRule::selectorList):
        (WebCore::StyleRule::properties):
        (WebCore::StyleRule::sourceLine):
        (WebCore::StyleRule::adoptSelectorVector):
        (WebCore::StyleRule::adoptSelectorList):
        (WebCore::StyleRule::setProperties):
        (WebCore::CSSStyleRule::create):
        (WebCore::CSSStyleRule::style):
        (CSSStyleRule):
        (WebCore::CSSStyleRule::styleRule):
        * css/CSSStyleSelector.cpp:
        (RuleData):
        (WebCore::RuleData::rule):
        (RuleSet):
        (WebCore::CSSStyleSelector::addMatchedProperties):
        (WebCore::CSSStyleSelector::sortAndTransferMatchedRules):
        (WebCore::CSSStyleSelector::collectMatchingRulesForList):
        * css/CSSStyleSelector.h:
        (WebCore::CSSStyleSelector::RuleSelectorPair::RuleSelectorPair):
        (RuleSelectorPair):
        (MatchResult):
        (CSSStyleSelector):
        * css/CSSStyleSheet.cpp:
        (WebCore::CSSStyleSheet::addSubresourceStyleURLs):
        * editing/EditingStyle.cpp:
        (WebCore::styleFromMatchedRulesForElement):
        * inspector/InspectorCSSAgent.cpp:
        (WebCore::SelectorProfile::startSelector):
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::willMatchRuleImpl):
        (WebCore::InspectorInstrumentation::willProcessRuleImpl):
        * inspector/InspectorInstrumentation.h:
        (WebCore):
        (InspectorInstrumentation):
        (WebCore::InspectorInstrumentation::willMatchRule):
        (WebCore::InspectorInstrumentation::willProcessRule):
        * inspector/InspectorStyleSheet.cpp:
        (WebCore::InspectorStyleSheet::buildObjectForRule):
        (WebCore::InspectorStyleSheet::revalidateStyle):
        * page/PageSerializer.cpp:
        (WebCore::PageSerializer::serializeFrame):
        (WebCore::PageSerializer::serializeCSSStyleSheet):
        (WebCore::PageSerializer::retrieveResourcesForRule):
        (WebCore::PageSerializer::retrieveResourcesForProperties):
        * page/PageSerializer.h:
        (WebCore):
        (PageSerializer):

2012-02-28  Roland Steiner  <rolandsteiner@chromium.org>

        RuntimeEnabledFeatures::setMultipleShadowSubtreesEnabled should not be inline
        https://bugs.webkit.org/show_bug.cgi?id=79753

        Moved the function implementation to the .cpp file.

        Reviewed by Hajime Morita.

        No new tests. (no functional change)

        * bindings/generic/RuntimeEnabledFeatures.cpp:
        (WebCore::RuntimeEnabledFeatures::setMultipleShadowSubtreesEnabled):
        (WebCore):
        * bindings/generic/RuntimeEnabledFeatures.h:
        (RuntimeEnabledFeatures):

2012-02-28  Noel Gordon  <noel.gordon@gmail.com>

        Fix comment about RGB swizzle decoding and Adobe transform=0 images
        https://bugs.webkit.org/show_bug.cgi?id=79457

        Unreviewed. No new tests, comment change only.

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

2012-02-27  Shinya Kawanaka  <shinyak@chromium.org>

        Element::removeShadowRoot() and setShadowRoot() should be moved into ShadowTree.
        https://bugs.webkit.org/show_bug.cgi?id=78313

        Reviewed by Hajime Morita.

        This patch is for refactoring ShadowTree related code.
          (1) Element::removeShadowRoot() and Element::setShadowRoot() are moved into ShadowTree.
          (2) ShadowTree is now put on its own heap.

        No new tests, no change in behavior.

        * WebCore.exp.in:
        * dom/Element.cpp:
        (WebCore::Element::~Element):
        (WebCore::Element::shadowTree):
        (WebCore::Element::ensureShadowTree):
          Ensure the existence of ShadowTree. This does not ensure ShadowRoot exists.
        * dom/Element.h:
        (Element):
        * dom/ElementRareData.h:
          Makes ShadowTree on Heap.
        (ElementRareData):
        (WebCore::ElementRareData::~ElementRareData):
        * dom/ShadowRoot.cpp:
        (WebCore::ShadowRoot::create):
        * dom/ShadowTree.cpp:
        (WebCore::validateShadowRoot):
        (WebCore):
        (WebCore::ShadowTree::addShadowRoot):
        (WebCore::ShadowTree::removeAllShadowRoots):
        * dom/ShadowTree.h:
        (ShadowTree):
        * testing/Internals.cpp:
        (WebCore::Internals::removeShadowRoot):

2012-02-27  David Barton  <dbarton@mathscribe.com>

        Fix <msubsup> formatting, especially for a tall base, subscript, or superscript
        https://bugs.webkit.org/show_bug.cgi?id=79274

        Reviewed by Julien Chaffraix.

        Move the <msubsup> formatting code in stretchToHeight() to layout(). Then revise the
        combined code to produce more vertically accurate results, and without extra white
        space. Finally, don't multiply msub/msup/msubsup operator stretching by 1.2.

        Test: Added the bug report's attached test case to mathml/presentation/subsup.xhtml, and
        it and 5 other test files in mathml/presentation now produce improved results. The
        integral sign in mo-stretch.html is no longer scaled up by an extra 1.2, and baselines
        are more accurate so the base is higher in msubsup-sub-changed.png. Several examples are
        slightly tighter vertically, because their (somewhat) anonymous blocks wrapping
        subscripts and superscripts now have the correct font size.

        * rendering/mathml/RenderMathMLSubSup.cpp:
        (WebCore):
        (WebCore::RenderMathMLSubSup::addChild):
        (WebCore::RenderMathMLSubSup::stretchToHeight):
        (WebCore::RenderMathMLSubSup::layout):
        * rendering/mathml/RenderMathMLSubSup.h:
        (RenderMathMLSubSup):
        * rendering/style/RenderStyle.h:

2012-02-27  Ned Holbrook  <nholbrook@apple.com>

        kCTFontTableOptionExcludeSynthetic is unneeded
        https://bugs.webkit.org/show_bug.cgi?id=79744

        Reviewed by Dan Bernstein.

        The aforementioned option is a no-op, so no new tests.

        * platform/graphics/mac/SimpleFontDataMac.mm:
        (WebCore::fontHasVerticalGlyphs): Specify no options.

2012-02-27  Wei James  <james.wei@intel.com>

        Multi-Channel support in AudioBufferSourceNode
        https://bugs.webkit.org/show_bug.cgi?id=79202

        Reviewed by Chris Rogers.

        Test: webaudio/audiobuffersource-multi-channels.html

        * webaudio/AudioBufferSourceNode.cpp:
        (WebCore::AudioBufferSourceNode::renderSilenceAndFinishIfNotLooping):
        (WebCore::AudioBufferSourceNode::renderFromBuffer):
        (WebCore::AudioBufferSourceNode::setBuffer):
        * webaudio/AudioBufferSourceNode.h:
        (AudioBufferSourceNode):

2012-02-27  Leo Yang  <leo.yang@torchmobile.com.cn>

        [BlackBerry] Upstream the BlackBerry change to platform/graphics/IntRect.h
        https://bugs.webkit.org/show_bug.cgi?id=79732

        Reviewed by Antonio Gomes.

        Add conversion convenience between WebCore::IntRect and BlackBerry::Platform::IntRect.

        The porting can't be built yet, no new tests.

        * platform/graphics/IntRect.h:
        (Platform):
        (IntRect):

2012-02-27  Emil A Eklund  <eae@chromium.org>

        Printed font-size should not be dependant on zoom level
        https://bugs.webkit.org/show_bug.cgi?id=79717

        Reviewed by Adam Barth.

        Ignore full page zoom level when printing a document.

        Test: printing/zoomed-document.html

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

2012-02-27  Kenichi Ishibashi  <bashi@chromium.org>

        [Chromium] Unreviewed gardening, further compile fixes for
        TransparencyWinTest.

        * platform/graphics/chromium/TransparencyWin.h:
        (WebCore):

2012-02-27  Kenichi Ishibashi  <bashi@chromium.org>

        [Chromium] Unreviewed gardening, fix compile error after r109043

        * platform/graphics/chromium/TransparencyWin.h:
        (TransparencyWin):

2012-02-27  Adam Barth  <abarth@webkit.org>

        EventFactory.in should be named EventNames.in
        https://bugs.webkit.org/show_bug.cgi?id=79727

        Reviewed by Kentaro Hara.

        Originally EventFactory.in was just used to generate EventFactory.cpp,
        but now we're able to generate a bunch of other Event-related code from
        this "in" file.

        In writing some documentation about how to use these mechanisms, the
        name EventFactory.in didn't seem like the right name.  This patch
        renames EventFactory.in to EventNames.in, which more accurately
        describes the role of this file (and matches the naming convention of
        HTMLTagNames.in).

        * CMakeLists.txt:
        * DerivedSources.make:
        * DerivedSources.pri:
        * GNUmakefile.am:
        * WebCore.gyp/WebCore.gyp:
        * WebCore.gyp/scripts/action_makenames.py:
        (main):
        * WebCore.xcodeproj/project.pbxproj:
        * dom/EventNames.in: Copied from Source/WebCore/dom/EventFactory.in.
        * dom/EventFactory.in: Removed.

2012-02-27  Yoshifumi Inoue  <yosin@chromium.org>

        [Forms] Make order of attribute/method in HTMLInputElement.idl as same as specification
        https://bugs.webkit.org/show_bug.cgi?id=79622

        For ease of maintainability, this patch reorders attributes and methods declaration
        matching with specification.

        Reviewed by Adam Barth.

        No new tests. No behavior change.

        * html/HTMLInputElement.idl: Reorder and remove obsolete comments.

2012-02-27  Luke Macpherson   <macpherson@chromium.org>

        Sort CSSStyleSelector property handler constructors by CSS property name.
        https://bugs.webkit.org/show_bug.cgi?id=79713

        Reviewed by Andreas Kling.

        No new tests / refactoring only.

        This patch is simply an automated sort of the property constructors.
        Presently they are all over the place and it is difficult to know where to insert new rules.
        This patch provides a clear pattern and should reduce future conflicts when adding properties.

        * css/CSSStyleApplyProperty.cpp:
        (WebCore::CSSStyleApplyProperty::CSSStyleApplyProperty):

2012-02-27  James Kozianski  <koz@chromium.org>

        [chromium] Plumb extensionGroup into didCreateScriptContext().
        https://bugs.webkit.org/show_bug.cgi?id=79072

        Reviewed by Darin Fisher.

        * bindings/v8/V8DOMWindowShell.cpp:
        (WebCore::V8DOMWindowShell::initContextIfNeeded):
        * bindings/v8/V8IsolatedContext.cpp:
        (WebCore::V8IsolatedContext::V8IsolatedContext):
        * loader/EmptyClients.h:
        (WebCore::EmptyFrameLoaderClient::didCreateScriptContext):
        * loader/FrameLoaderClient.h:
        (FrameLoaderClient):

2012-02-27  Huang Dongsung  <luxtella@company100.net>

        Fixed a typo in CanvasRenderingContext2D::drawImage(HTMLCanvasElement);
        incorrect source and destination rect used.
        https://bugs.webkit.org/show_bug.cgi?id=79566

        Pass dstRect and bufferSrcRect to
        CanvasRenderingContext2D::fullCanvasCompositedDrawImage() for the destination
        and source rect, respectively.

        Reviewed by Daniel Bates.

        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::drawImage):

2012-02-27  Hyowon Kim  <hw1008.kim@samsung.com>

        [EFL] Initial implementation of GraphicsContext3DPrivate
        https://bugs.webkit.org/show_bug.cgi?id=62961

        Reviewed by Noam Rosenthal.

        This patch adds the GraphicsContext3DPrivate class using Evas_GL.
        GraphicsContext3DPrivate delegates all GL function calls to Evas_GL_API.

        * platform/graphics/efl/GraphicsContext3DPrivate.cpp: Added.
        (WebCore):
        (WebCore::GraphicsContext3DPrivate::create):
        (WebCore::GraphicsContext3DPrivate::GraphicsContext3DPrivate):
        (WebCore::GraphicsContext3DPrivate::~GraphicsContext3DPrivate):
        (WebCore::GraphicsContext3DPrivate::initialize):
        (WebCore::GraphicsContext3DPrivate::createSurface):
        (WebCore::GraphicsContext3DPrivate::platformGraphicsContext3D):
        (WebCore::GraphicsContext3DPrivate::makeContextCurrent):
        (WebCore::GraphicsContext3DPrivate::isGLES2Compliant):
        (WebCore::GraphicsContext3DPrivate::activeTexture):
        (WebCore::GraphicsContext3DPrivate::attachShader):
        (WebCore::GraphicsContext3DPrivate::bindAttribLocation):
        (WebCore::GraphicsContext3DPrivate::bindBuffer):
        (WebCore::GraphicsContext3DPrivate::bindFramebuffer):
        (WebCore::GraphicsContext3DPrivate::bindRenderbuffer):
        (WebCore::GraphicsContext3DPrivate::bindTexture):
        (WebCore::GraphicsContext3DPrivate::blendColor):
        (WebCore::GraphicsContext3DPrivate::blendEquation):
        (WebCore::GraphicsContext3DPrivate::blendEquationSeparate):
        (WebCore::GraphicsContext3DPrivate::blendFunc):
        (WebCore::GraphicsContext3DPrivate::blendFuncSeparate):
        (WebCore::GraphicsContext3DPrivate::bufferData):
        (WebCore::GraphicsContext3DPrivate::bufferSubData):
        (WebCore::GraphicsContext3DPrivate::checkFramebufferStatus):
        (WebCore::GraphicsContext3DPrivate::clear):
        (WebCore::GraphicsContext3DPrivate::clearColor):
        (WebCore::GraphicsContext3DPrivate::clearDepth):
        (WebCore::GraphicsContext3DPrivate::clearStencil):
        (WebCore::GraphicsContext3DPrivate::colorMask):
        (WebCore::GraphicsContext3DPrivate::compileShader):
        (WebCore::GraphicsContext3DPrivate::copyTexImage2D):
        (WebCore::GraphicsContext3DPrivate::copyTexSubImage2D):
        (WebCore::GraphicsContext3DPrivate::cullFace):
        (WebCore::GraphicsContext3DPrivate::depthFunc):
        (WebCore::GraphicsContext3DPrivate::depthMask):
        (WebCore::GraphicsContext3DPrivate::depthRange):
        (WebCore::GraphicsContext3DPrivate::detachShader):
        (WebCore::GraphicsContext3DPrivate::disable):
        (WebCore::GraphicsContext3DPrivate::disableVertexAttribArray):
        (WebCore::GraphicsContext3DPrivate::drawArrays):
        (WebCore::GraphicsContext3DPrivate::drawElements):
        (WebCore::GraphicsContext3DPrivate::enable):
        (WebCore::GraphicsContext3DPrivate::enableVertexAttribArray):
        (WebCore::GraphicsContext3DPrivate::finish):
        (WebCore::GraphicsContext3DPrivate::flush):
        (WebCore::GraphicsContext3DPrivate::framebufferRenderbuffer):
        (WebCore::GraphicsContext3DPrivate::framebufferTexture2D):
        (WebCore::GraphicsContext3DPrivate::frontFace):
        (WebCore::GraphicsContext3DPrivate::generateMipmap):
        (WebCore::GraphicsContext3DPrivate::getActiveAttrib):
        (WebCore::GraphicsContext3DPrivate::getActiveUniform):
        (WebCore::GraphicsContext3DPrivate::getAttachedShaders):
        (WebCore::GraphicsContext3DPrivate::getAttribLocation):
        (WebCore::GraphicsContext3DPrivate::getBooleanv):
        (WebCore::GraphicsContext3DPrivate::getBufferParameteriv):
        (WebCore::GraphicsContext3DPrivate::getContextAttributes):
        (WebCore::GraphicsContext3DPrivate::getError):
        (WebCore::GraphicsContext3DPrivate::getFloatv):
        (WebCore::GraphicsContext3DPrivate::getFramebufferAttachmentParameteriv):
        (WebCore::GraphicsContext3DPrivate::getIntegerv):
        (WebCore::GraphicsContext3DPrivate::getProgramiv):
        (WebCore::GraphicsContext3DPrivate::getProgramInfoLog):
        (WebCore::GraphicsContext3DPrivate::getRenderbufferParameteriv):
        (WebCore::GraphicsContext3DPrivate::getShaderiv):
        (WebCore::GraphicsContext3DPrivate::getShaderInfoLog):
        (WebCore::GraphicsContext3DPrivate::getShaderSource):
        (WebCore::GraphicsContext3DPrivate::getString):
        (WebCore::GraphicsContext3DPrivate::getTexParameterfv):
        (WebCore::GraphicsContext3DPrivate::getTexParameteriv):
        (WebCore::GraphicsContext3DPrivate::getUniformfv):
        (WebCore::GraphicsContext3DPrivate::getUniformiv):
        (WebCore::GraphicsContext3DPrivate::getUniformLocation):
        (WebCore::GraphicsContext3DPrivate::getVertexAttribfv):
        (WebCore::GraphicsContext3DPrivate::getVertexAttribiv):
        (WebCore::GraphicsContext3DPrivate::getVertexAttribOffset):
        (WebCore::GraphicsContext3DPrivate::hint):
        (WebCore::GraphicsContext3DPrivate::isBuffer):
        (WebCore::GraphicsContext3DPrivate::isEnabled):
        (WebCore::GraphicsContext3DPrivate::isFramebuffer):
        (WebCore::GraphicsContext3DPrivate::isProgram):
        (WebCore::GraphicsContext3DPrivate::isRenderbuffer):
        (WebCore::GraphicsContext3DPrivate::isShader):
        (WebCore::GraphicsContext3DPrivate::isTexture):
        (WebCore::GraphicsContext3DPrivate::lineWidth):
        (WebCore::GraphicsContext3DPrivate::linkProgram):
        (WebCore::GraphicsContext3DPrivate::pixelStorei):
        (WebCore::GraphicsContext3DPrivate::polygonOffset):
        (WebCore::GraphicsContext3DPrivate::readPixels):
        (WebCore::GraphicsContext3DPrivate::renderbufferStorage):
        (WebCore::GraphicsContext3DPrivate::sampleCoverage):
        (WebCore::GraphicsContext3DPrivate::scissor):
        (WebCore::GraphicsContext3DPrivate::shaderSource):
        (WebCore::GraphicsContext3DPrivate::stencilFunc):
        (WebCore::GraphicsContext3DPrivate::stencilFuncSeparate):
        (WebCore::GraphicsContext3DPrivate::stencilMask):
        (WebCore::GraphicsContext3DPrivate::stencilMaskSeparate):
        (WebCore::GraphicsContext3DPrivate::stencilOp):
        (WebCore::GraphicsContext3DPrivate::stencilOpSeparate):
        (WebCore::GraphicsContext3DPrivate::texImage2D):
        (WebCore::GraphicsContext3DPrivate::texParameterf):
        (WebCore::GraphicsContext3DPrivate::texParameteri):
        (WebCore::GraphicsContext3DPrivate::texSubImage2D):
        (WebCore::GraphicsContext3DPrivate::uniform1f):
        (WebCore::GraphicsContext3DPrivate::uniform1fv):
        (WebCore::GraphicsContext3DPrivate::uniform1i):
        (WebCore::GraphicsContext3DPrivate::uniform1iv):
        (WebCore::GraphicsContext3DPrivate::uniform2f):
        (WebCore::GraphicsContext3DPrivate::uniform2fv):
        (WebCore::GraphicsContext3DPrivate::uniform2i):
        (WebCore::GraphicsContext3DPrivate::uniform2iv):
        (WebCore::GraphicsContext3DPrivate::uniform3f):
        (WebCore::GraphicsContext3DPrivate::uniform3fv):
        (WebCore::GraphicsContext3DPrivate::uniform3i):
        (WebCore::GraphicsContext3DPrivate::uniform3iv):
        (WebCore::GraphicsContext3DPrivate::uniform4f):
        (WebCore::GraphicsContext3DPrivate::uniform4fv):
        (WebCore::GraphicsContext3DPrivate::uniform4i):
        (WebCore::GraphicsContext3DPrivate::uniform4iv):
        (WebCore::GraphicsContext3DPrivate::uniformMatrix2fv):
        (WebCore::GraphicsContext3DPrivate::uniformMatrix3fv):
        (WebCore::GraphicsContext3DPrivate::uniformMatrix4fv):
        (WebCore::GraphicsContext3DPrivate::useProgram):
        (WebCore::GraphicsContext3DPrivate::validateProgram):
        (WebCore::GraphicsContext3DPrivate::vertexAttrib1f):
        (WebCore::GraphicsContext3DPrivate::vertexAttrib1fv):
        (WebCore::GraphicsContext3DPrivate::vertexAttrib2f):
        (WebCore::GraphicsContext3DPrivate::vertexAttrib2fv):
        (WebCore::GraphicsContext3DPrivate::vertexAttrib3f):
        (WebCore::GraphicsContext3DPrivate::vertexAttrib3fv):
        (WebCore::GraphicsContext3DPrivate::vertexAttrib4f):
        (WebCore::GraphicsContext3DPrivate::vertexAttrib4fv):
        (WebCore::GraphicsContext3DPrivate::vertexAttribPointer):
        (WebCore::GraphicsContext3DPrivate::viewport):
        (WebCore::GraphicsContext3DPrivate::createBuffer):
        (WebCore::GraphicsContext3DPrivate::createFramebuffer):
        (WebCore::GraphicsContext3DPrivate::createProgram):
        (WebCore::GraphicsContext3DPrivate::createRenderbuffer):
        (WebCore::GraphicsContext3DPrivate::createShader):
        (WebCore::GraphicsContext3DPrivate::createTexture):
        (WebCore::GraphicsContext3DPrivate::deleteBuffer):
        (WebCore::GraphicsContext3DPrivate::deleteFramebuffer):
        (WebCore::GraphicsContext3DPrivate::deleteProgram):
        (WebCore::GraphicsContext3DPrivate::deleteRenderbuffer):
        (WebCore::GraphicsContext3DPrivate::deleteShader):
        (WebCore::GraphicsContext3DPrivate::deleteTexture):
        (WebCore::GraphicsContext3DPrivate::synthesizeGLError):
        (WebCore::GraphicsContext3DPrivate::getExtensions):
        * platform/graphics/efl/GraphicsContext3DPrivate.h: Added.
        (WebCore):
        (GraphicsContext3DPrivate):

2012-02-27  Shawn Singh  <shawnsingh@chromium.org>

        RenderLayer ClipRect not accounting for transforms
        https://bugs.webkit.org/show_bug.cgi?id=76486

        Reviewed by Simon Fraser.

        Test: compositing/layer-creation/overlap-transformed-and-clipped.html

        This patch changes calculateClipRects() so that the clipRect
        offset is allowed to be converted across layers with
        transforms. This is necessary because the RenderLayerCompositor
        needs clipRects in document space, rather than with respect to
        some local clipping layer.

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::calculateClipRects):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::localToContainerPoint):
        (WebCore):
        * rendering/RenderObject.h:
        (RenderObject):

2012-02-27  Adam Klein  <adamk@chromium.org>

        [MutationObservers] Clear pending mutation records on disconnect()
        https://bugs.webkit.org/show_bug.cgi?id=78639

        Reviewed by Ojan Vafai.

        Test: fast/mutation/disconnect-cancel-pending.html

        * dom/WebKitMutationObserver.cpp:
        (WebCore::WebKitMutationObserver::disconnect): Clear pending records.
        (WebCore::WebKitMutationObserver::deliver): Avoid calling the callback if no records are pending delivery.

2012-02-27  Adam Klein  <adamk@chromium.org>

        Always notify subtree of removal in ContainerNode::removeChildren
        https://bugs.webkit.org/show_bug.cgi?id=79316

        Reviewed by Ryosuke Niwa.

        In the inDocument case, Node::removedFromDocument is called.
        In the out-of-document case, call ContainerNode::removedFromTree to ensure,
        e.g., form-associated elements are properly disconnected.

        Test: fast/forms/form-associated-element-removal.html

        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::removeChildren):

2012-02-27  Adam Barth  <abarth@webkit.org>

        Repair license blocks for files created during modularization
        https://bugs.webkit.org/show_bug.cgi?id=79721

        Reviewed by Eric Seidel.

        We failed to copy the license blocks correctly when moving code into
        these files.  This patch restores the correct license blocks.

        * Modules/geolocation/NavigatorGeolocation.cpp:
        * Modules/geolocation/NavigatorGeolocation.h:
        * Modules/mediastream/NavigatorMediaStream.cpp:
        * Modules/mediastream/NavigatorMediaStream.h:
        * bindings/js/JSDOMWindowWebAudioCustom.cpp:
        * bindings/js/JSDOMWindowWebSocketCustom.cpp:
        * storage/DOMWindowSQLDatabase.cpp:
        * storage/DOMWindowSQLDatabase.h:

2012-02-27  Julien Chaffraix  <jchaffraix@webkit.org>

        Extract the logic for computing the dirty rows / columns out of RenderTableSection::paintObject
        https://bugs.webkit.org/show_bug.cgi?id=79580

        Reviewed by Eric Seidel.

        Refactoring only.

        * rendering/RenderTableSection.h:
        (CellSpan):
        (WebCore::CellSpan::CellSpan):
        (WebCore::CellSpan::start):
        (WebCore::CellSpan::end):
        Added this class to hold the span information.

        (WebCore::RenderTableSection::fullTableRowSpan):
        (WebCore::RenderTableSection::fullTableColumnSpan):
        Those functions return the span corresponding to the full table.

        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::dirtiedRows):
        (WebCore::RenderTableSection::dirtiedColumns):
        Those functions compute the rows / columns impacted by a |damageRect|. On the slow painting path, they
        return the full table span.

        (WebCore::RenderTableSection::paintObject):
        Updated this function to call the new ones. Also we now inflate the local rectangle with the outlineSize.
        This wasn't done previously and we had to manually patch some size comparison to account for the outline.

2012-02-27  Kentaro Hara  <haraken@chromium.org>

        Rename resolve-supplemental.pl to preprocess-idls.pl
        https://bugs.webkit.org/show_bug.cgi?id=79660

        Reviewed by Adam Barth.

        Due to r108322, resolve-supplemental.pl not only resolves supplemental
        dependencies but also runs IDL attribute checker. For clarification,
        this patch renames resolve-supplemental.pl to preprocess-idls.pl.

        No tests. Confirm that all builds pass.

        * DerivedSources.make:
        * DerivedSources.pri:
        * GNUmakefile.am:
        * UseJSC.cmake:
        * UseV8.cmake:
        * WebCore.gyp/WebCore.gyp:
        * WebCore.vcproj/MigrateScripts:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/scripts/preprocess-idls.pl: Renamed from Source/WebCore/bindings/scripts/resolve-supplemental.pl.

2012-02-27  Kentaro Hara  <haraken@chromium.org>

        [JSC] Add [ConstructorParameters=] to all custom constructors
        https://bugs.webkit.org/show_bug.cgi?id=78221

        Reviewed by Adam Barth.

        This patch adds [ConstructorParameters=X] to IDL files that have
        custom constructors, where X is the maximum number of arguments
        of the constructor. [ConstructorParameters=X] is needed for custom
        constructors, because custom constructors do not have a signature
        in IDL files and thus CodeGeneratorJS.pm cannot know the number of
        constructor arguments.

        Test: fast/js/constructor-length.html

        * dom/WebKitMutationObserver.idl:
        * html/DOMFormData.idl:
        * html/canvas/ArrayBuffer.idl:
        * html/canvas/DataView.idl:
        * html/canvas/Float32Array.idl:
        * html/canvas/Float64Array.idl:
        * html/canvas/Int16Array.idl:
        * html/canvas/Int32Array.idl:
        * html/canvas/Int8Array.idl:
        * html/canvas/Uint16Array.idl:
        * html/canvas/Uint32Array.idl:
        * html/canvas/Uint8Array.idl:
        * html/canvas/Uint8ClampedArray.idl:
        * webaudio/AudioContext.idl:

        * bindings/scripts/test/TestTypedArray.idl:

        * bindings/scripts/test/JS/JSFloat64Array.cpp: Updated run-bindings-tests results.
        (WebCore::JSFloat64ArrayConstructor::finishCreation):

2012-02-23  Raphael Kubo da Costa  <kubo@profusion.mobi>

        [BlackBerry][EFL] Provide dummy RunLoop implementations.
        https://bugs.webkit.org/show_bug.cgi?id=79398

        Reviewed by Antonio Gomes.

        r108067 fixed the EFL build by not building RunLoop.cpp on EFL and
        BlackBerry, as both platforms lack an implementation that provides the
        missing methods for the RunLoop class.

        However, RunLoop.cpp is a generic file which should not be included
        directly in PlatformWinCE.cmake (plus it helps in converting the
        AppleWin port to CMake).

        Fix this by providing a dummy implementation of the missing RunLoop
        methods for both EFL and BlackBerry.

        * CMakeLists.txt:
        * PlatformBlackBerry.cmake:
        * PlatformEfl.cmake:
        * PlatformWinCE.cmake:
        * platform/blackberry/RunLoopBlackBerry.cpp: Added.
        (WebCore):
        (WebCore::RunLoop::RunLoop):
        (WebCore::RunLoop::~RunLoop):
        (WebCore::RunLoop::wakeUp):
        * platform/efl/RunLoopEfl.cpp: Added.
        (WebCore):
        (WebCore::RunLoop::RunLoop):
        (WebCore::RunLoop::~RunLoop):
        (WebCore::RunLoop::wakeUp):

2012-02-27  John Sullivan  <sullivan@apple.com>

        Build fix (on Lion at least).

        * dom/Attr.cpp:
        (WebCore::Attr::childrenChanged):
        Removed names of unused parameters.
        
        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::childrenChanged):
        Ditto.

2012-02-27  Kentaro Hara  <haraken@chromium.org>

        Remove [ConstructorParameters] from IDL files that have [Constructor]
        https://bugs.webkit.org/show_bug.cgi?id=79643

        Reviewed by Adam Barth.

        This patch removes [ConstructorParameters] from IDL files that have [Constructor],
        since CodeGeneratorJS.pm can automatically detect the number of constructor
        arguments by the [Constructor(...)] signature.

        Test: fast/js/constructor-length.html

        * Modules/mediastream/PeerConnection.idl:
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateConstructorDefinition):
        * css/WebKitCSSMatrix.idl:
        * page/EventSource.idl:
        * workers/SharedWorker.idl:
        * workers/Worker.idl:

2012-02-27  Julien Chaffraix  <jchaffraix@webkit.org>

        Avoid doing 2 hash lookups if we override RenderBox's logical width / height
        https://bugs.webkit.org/show_bug.cgi?id=79591

        Reviewed by Antonio Gomes.

        Refactoring only.

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::clearOverrideSize):
        Instead of doing one hash lookup as part of hasOverride{Height|Width}, let's
        just directly call HashMap::remove that will do the lookup instead.

2012-02-27  Adam Klein  <adamk@chromium.org>

        Move WebCore-internal DOM notification methods from Node to ContainerNode where appropriate
        https://bugs.webkit.org/show_bug.cgi?id=79697

        Reviewed by Ryosuke Niwa.

        insertedIntoTree/removedFromTree are only used by subclasses of
        ContainerNode. Moreover, attempting to make use of these notifications
        in a non-container Node would currently not work, because
        Node::removedFromDocument/insertedIntoDocument do not dispatch to these methods.
        Rather than adding useless calls to an always-empty virtual method,
        this patch moves these methods to ContainerNode.

        Meanwhile, childrenChanged moves to ContainerNode for an obvious reason:
        non-container Nodes have no children to change.

        No new tests, refactoring only.

        * dom/Attr.cpp:
        (WebCore::Attr::childrenChanged): Remove call to now-nonexistent Node::childrenChanged.
        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::removeChild): Check that the removed child is a container node before notifying it of removal.
        (WebCore::ContainerNode::parserRemoveChild): ditto.
        (WebCore::ContainerNode::insertedIntoTree): Remove call to now-nonexistent Node::insertedIntoTree.
        (WebCore::ContainerNode::removedFromTree): Remove call to now-nonexistent Node::removedFromTree.
        (WebCore::ContainerNode::childrenChanged): Remove call to now-nonexistent Node::childrenChanged.
        (WebCore::notifyChildInserted): Check that the inserted child is a container node before notifying it of insertion.
        * dom/ContainerNode.h:
        (ContainerNode): Migrate comments from Node.h, point back at it for more notification methods.
        * dom/Node.h:
        (Node): Move methods, update comments to point at ContainerNode.h.

2012-02-27  Chris Rogers  <crogers@google.com>

        Implement static compression curve parameters for DynamicsCompressorNode
        https://bugs.webkit.org/show_bug.cgi?id=78937

        Reviewed by Kenneth Russell.

        Test: webaudio/dynamicscompressor-basic.html

        * platform/audio/DynamicsCompressor.cpp:
        (WebCore::DynamicsCompressor::setParameterValue):
        (WebCore):
        (WebCore::DynamicsCompressor::initializeParameters):
        (WebCore::DynamicsCompressor::process):
        * platform/audio/DynamicsCompressor.h:
        * platform/audio/DynamicsCompressorKernel.cpp:
        (WebCore):
        (WebCore::DynamicsCompressorKernel::DynamicsCompressorKernel):
        (WebCore::DynamicsCompressorKernel::setPreDelayTime):
        (WebCore::DynamicsCompressorKernel::kneeCurve):
        (WebCore::DynamicsCompressorKernel::saturate):
        (WebCore::DynamicsCompressorKernel::slopeAt):
        (WebCore::DynamicsCompressorKernel::kAtSlope):
        (WebCore::DynamicsCompressorKernel::updateStaticCurveParameters):
        (WebCore::DynamicsCompressorKernel::process):
        * platform/audio/DynamicsCompressorKernel.h:
        (DynamicsCompressorKernel):
        (WebCore::DynamicsCompressorKernel::meteringGain):
        * webaudio/DynamicsCompressorNode.cpp:
        (WebCore::DynamicsCompressorNode::DynamicsCompressorNode):
        (WebCore::DynamicsCompressorNode::process):
        * webaudio/DynamicsCompressorNode.h:
        (WebCore):
        (WebCore::DynamicsCompressorNode::create):
        (DynamicsCompressorNode):
        (WebCore::DynamicsCompressorNode::threshold):
        (WebCore::DynamicsCompressorNode::knee):
        (WebCore::DynamicsCompressorNode::ratio):
        (WebCore::DynamicsCompressorNode::reduction):
        * webaudio/DynamicsCompressorNode.idl:

2012-02-27  Enrica Casucci  <enrica@apple.com>

        WebKit2: implement platform strategy to access Pasteboard in the UI process.
        https://bugs.webkit.org/show_bug.cgi?id=79253
        <rdar://problem/9971876>

        Reviewed by Alexey Proskuryakov.

        No new tests. No behavior change.

        * platform/mac/PlatformPasteboardMac.mm:
        (WebCore::PlatformPasteboard::bufferForType): There is no need
        to create a SharedBuffer object if there is no NSData in the pasteboard
        for the given pasteboard type.

2012-02-27  Adrienne Walker  <enne@google.com>

        [chromium] Unreviewed speculative Chromium win build fix.

        mdelaney's http://trac.webkit.org/changeset/109016 changed the
        interface on ImageBuffer, but didn't update TransparencyWin.

        * platform/graphics/chromium/TransparencyWin.cpp:
        (WebCore::TransparencyWin::OwnedBuffers::canHandleSize):

2012-02-27  Matthew Delaney  <mdelaney@apple.com>

        Add ImageBuffer support for having a hi-res backing store. This allows
        ImageBuffer clients to specify a scale factor upon creation so that they
        don't have to maintain that info themselves as they use/pass around the ImageBuffer.
        https://bugs.webkit.org/show_bug.cgi?id=79395

        Reviewed by Dan Bernstein.

        No new tests. This patch doesn't change behavior.

        * platform/graphics/ImageBuffer.h:
        (WebCore::ImageBuffer::create): Scale the backing store by the resolution scale.
        (WebCore::ImageBuffer::logicalSize): Differentiate the logical size from the backing store's size.
        (WebCore::ImageBuffer::internalSize): The backing store's size.

        * platform/graphics/cg/ImageBufferCG.cpp: Prefer the explicit use of logicalSize and internalSize.

        Explicitly state a 1x scale for all ImageBuffer creation sites
        since this is what they currently assume.
        * html/HTMLCanvasElement.cpp:
        * html/canvas/CanvasRenderingContext2D.cpp:
        * html/canvas/WebGLRenderingContext.cpp:
        * page/Frame.cpp:
        * platform/graphics/CrossfadeGeneratedImage.cpp:
        * platform/graphics/ShadowBlur.cpp:
        * platform/graphics/filters/FEColorMatrix.cpp:
        * platform/graphics/filters/FEDropShadow.cpp:
        * platform/graphics/filters/FilterEffect.cpp:
        * platform/mac/ScrollbarThemeMac.mm:
        * rendering/FilterEffectRenderer.cpp:
        * rendering/RenderThemeMac.mm:
        * rendering/svg/SVGImageBufferTools.cpp:
        * svg/graphics/SVGImage.cpp:
        * svg/graphics/SVGImageCache.cpp:

        Update ImageBuffer::size() calls to new versions.
        * platform/graphics/GraphicsContext.cpp:
        * platform/graphics/ImageBuffer.cpp:
        * platform/graphics/skia/PlatformContextSkia.cpp:

2012-02-27  Mihnea Ovidenie  <mihnea@adobe.com>

        [CSSRegions]-webkit-flow-into initial value should be none instead of auto
        https://bugs.webkit.org/show_bug.cgi?id=79670

        Reviewed by Simon Fraser.

        No new tests, modified expectations for existing tests.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseFlowThread):
        * css/CSSStyleApplyProperty.cpp:
        (WebCore::CSSStyleApplyProperty::CSSStyleApplyProperty):

2012-02-27  Ojan Vafai  <ojan@chromium.org>

        implement display: -webkit-inline-flexbox
        https://bugs.webkit.org/show_bug.cgi?id=77772

        Reviewed by David Hyatt.

        Tests: css3/flexbox/inline-flexbox-expected.html
               css3/flexbox/inline-flexbox.html

        * rendering/style/RenderStyle.h:
        -Add INLINE_FLEXBOX to the list of replaced display types.
        -Restructure the isDisplayInline methods to avoid code duplication.

2012-02-27  Ken Buchanan  <kenrb@chromium.org>

        Absolute positioned elements with Inline Relative Positioned Container are not layout correctly
        https://bugs.webkit.org/show_bug.cgi?id=78713

        Reviewed by David Hyatt.

        Test: fast/css/positioned-in-relative-position-inline-crash.html

        Patch originally by Robin Cao.

        This is a regression. r104183 changes containingBlock() so that it returns the container
        of an anonymous block for positioned objects, not the anonymous block itself. We should
        change markContainingBlocksForLayout() to match the change in containingBlock().

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::markContainingBlocksForLayout):

2012-02-27  Pavel Feldman  <pfeldman@google.com>

        Web Inspector: move record formatting into the timeline presentation model.
        https://bugs.webkit.org/show_bug.cgi?id=79684

        Drive-by: fix for stop recording in reset; cpu time restored.

        Reviewed by Vsevolod Vlasov.

        * inspector/front-end/TimelineModel.js:
        (WebInspector.TimelineModel.prototype.reset):
        * inspector/front-end/TimelineOverviewPane.js:
        (WebInspector.TimelineOverviewPane.prototype.update.updateBoundaries):
        (WebInspector.TimelineOverviewCalculator.prototype.updateBoundaries):
        * inspector/front-end/TimelinePanel.js:
        (WebInspector.TimelinePanel):
        (WebInspector.TimelinePanel.prototype._rootRecord):
        (WebInspector.TimelinePanel.prototype._updateRecordsCounter):
        (WebInspector.TimelinePanel.prototype._repopulateRecords):
        (WebInspector.TimelinePanel.prototype._onTimelineEventRecorded):
        (WebInspector.TimelinePanel.prototype._innerAddRecordToTimeline):
        (WebInspector.TimelinePanel.prototype._resetPanel):
        (WebInspector.TimelinePanel.prototype._refresh):
        (WebInspector.TimelinePanel.prototype._updateBoundaries):
        (WebInspector.TimelinePanel.prototype._filterRecords):
        (WebInspector.TimelinePanel.prototype.revealRecordAt):
        (WebInspector.TimelinePanel.prototype._showPopover):
        (WebInspector.TimelineCalculator.prototype.computeBarGraphPercentages):
        (WebInspector.TimelineCalculator.prototype.computeBarGraphWindowPosition):
        (WebInspector.TimelineCalculator.prototype.updateBoundaries):
        (WebInspector.TimelineStartAtZeroCalculator.prototype.computeBarGraphPercentages):
        (WebInspector.TimelineRecordGraphRow):
        (WebInspector.TimelineRecordGraphRow.prototype.update):
        * inspector/front-end/TimelinePresentationModel.js:
        (WebInspector.TimelinePresentationModel):
        (WebInspector.TimelinePresentationModel.prototype.createFormattedRecord):
        (WebInspector.TimelinePresentationModel.prototype._createRootRecord):
        (WebInspector.TimelinePresentationModel.prototype.rootRecord):
        (WebInspector.TimelinePresentationModel.prototype.reset):
        (WebInspector.TimelinePresentationModel.prototype._findParentRecord):
        (WebInspector.TimelinePresentationModel.prototype._resetWindow):
        (WebInspector.TimelinePresentationModel.prototype._addCategory):
        (WebInspector.TimelinePresentationModel.prototype.setCategoryVisibility):
        (WebInspector.TimelinePresentationModel.prototype.get _recordStyles):
        (WebInspector.TimelinePresentationModel.Record):
        (WebInspector.TimelinePresentationModel.Record.prototype.get lastChildEndTime):
        (WebInspector.TimelinePresentationModel.Record.prototype.set lastChildEndTime):
        (WebInspector.TimelinePresentationModel.Record.prototype.get selfTime):
        (WebInspector.TimelinePresentationModel.Record.prototype.set selfTime):
        (WebInspector.TimelinePresentationModel.Record.prototype.get cpuTime):
        (WebInspector.TimelinePresentationModel.Record.prototype.isLong):
        (WebInspector.TimelinePresentationModel.Record.prototype.get children):
        (WebInspector.TimelinePresentationModel.Record.prototype.containsTime):
        (WebInspector.TimelinePresentationModel.Record.prototype._generateAggregatedInfo):
        (WebInspector.TimelinePresentationModel.Record.prototype.generatePopupContent):
        (WebInspector.TimelinePresentationModel.Record.prototype._refreshDetails):
        (WebInspector.TimelinePresentationModel.Record.prototype._getRecordDetails):
        (WebInspector.TimelinePresentationModel.Record.prototype._linkifyLocation):
        (WebInspector.TimelinePresentationModel.Record.prototype._linkifyCallFrame):
        (WebInspector.TimelinePresentationModel.Record.prototype._linkifyTopCallFrame):
        (WebInspector.TimelinePresentationModel.Record.prototype._linkifyScriptLocation):
        (WebInspector.TimelinePresentationModel.Record.prototype.calculateAggregatedStats):
        (WebInspector.TimelinePresentationModel.Record.prototype.get aggregatedStats):
        (WebInspector.TimelinePresentationModel.PopupContentHelper):
        (WebInspector.TimelinePresentationModel.PopupContentHelper.prototype._createCell):
        (WebInspector.TimelinePresentationModel.PopupContentHelper.prototype._appendTextRow):
        (WebInspector.TimelinePresentationModel.PopupContentHelper.prototype._appendElementRow):
        (WebInspector.TimelinePresentationModel.PopupContentHelper.prototype._appendStackTrace):
        * inspector/front-end/timelinePanel.css:
        (.timeline-graph-bar.cpu):

2012-02-27  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Scripts navigator overlay should not consume mouse actions.
        https://bugs.webkit.org/show_bug.cgi?id=79674

        Reviewed by Pavel Feldman.

        * inspector/front-end/Panel.js:
        (WebInspector.Panel.prototype.registerShortcut):
        (WebInspector.Panel.prototype.unregisterShortcut):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype._editorClosed):
        (WebInspector.ScriptsPanel.prototype._editorSelected):
        (WebInspector.ScriptsPanel.prototype._fileSelected):
        (WebInspector.ScriptsPanel.prototype._escDownWhileNavigatorOverlayOpen):
        (WebInspector.ScriptsPanel.prototype.set _showNavigatorOverlay):
        (WebInspector.ScriptsPanel.prototype._hideNavigatorOverlay):
        (WebInspector.ScriptsPanel.prototype._navigatorOverlayWasShown):
        * inspector/front-end/SidebarOverlay.js:
        (WebInspector.SidebarOverlay):
        (WebInspector.SidebarOverlay.prototype.show):
        (WebInspector.SidebarOverlay.prototype._containingElementFocused):
        (WebInspector.SidebarOverlay.prototype.position):
        (WebInspector.SidebarOverlay.prototype.hide):
        (WebInspector.SidebarOverlay.prototype._setWidth):
        * inspector/front-end/dialog.css:
        (.go-to-line-dialog button:active):
        * inspector/front-end/scriptsPanel.css:
        (#scripts-editor-view .sidebar-overlay):
        * inspector/front-end/splitView.css:
        (.split-view-resizer):
        (.sidebar-overlay):
        (.sidebar-overlay-resizer):

2012-02-27  Philippe Normand  <pnormand@igalia.com>

        [GStreamer] 0.11 support in MediaPlayerPrivateGStreamer
        https://bugs.webkit.org/show_bug.cgi?id=77089

        Reviewed by Martin Robinson.

        Basic port to GStreamer 0.11 APIs. This patch excludes the video
        painting changes and the GStreamerGWorld changes which are handled
        in two other patches (bugs 77087 and 77088).

        * GNUmakefile.list.am: Add GStreamerVersioning files to the build.
        * Source/WebCore/PlatformEfl.cmake: Ditto.
        * Source/WebCore/Target.pri: Ditto.
        * platform/graphics/gstreamer/GRefPtrGStreamer.cpp:
        (WTF::GstElement):
        (WTF::GstPad):
        (WTF::GstPadTemplate):
        (WTF::GstTask):
        * platform/graphics/gstreamer/GStreamerVersioning.cpp: Added.
        (webkit_gst_object_ref_sink):
        (webkit_gst_element_get_pad_caps):
        * platform/graphics/gstreamer/GStreamerVersioning.h: Added.
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::isAvailable):
        (WebCore::MediaPlayerPrivateGStreamer::duration):
        (WebCore::MediaPlayerPrivateGStreamer::naturalSize):

2012-02-27  Philip Rogers  <pdr@google.com>

        Stop recomputing SVG path data twice during layout
        https://bugs.webkit.org/show_bug.cgi?id=79672

        Reviewed by Nikolas Zimmermann.

        * rendering/svg/RenderSVGShape.cpp:
        (WebCore::RenderSVGShape::layout):

2012-02-27  Timothy Hatcher  <timothy@apple.com>

        Updated for WebKit2 string changes.

        https://webkit.org/b/79649

        Reviewed by John Sullivan.

        * English.lproj/Localizable.strings: Updated.

2012-02-27  Pavel Feldman  <pfeldman@google.com>

        Web Inspector: Ctrl+K should not zoom in
        https://bugs.webkit.org/show_bug.cgi?id=79676

        Reviewed by Vsevolod Vlasov.

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

2012-02-27  Pavel Feldman  <pfeldman@google.com>

        Web Inspector: extract TimelineModel and TimelinePresentationModel into their own files.
        https://bugs.webkit.org/show_bug.cgi?id=79675

        Reviewed by Vsevolod Vlasov.

        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * inspector/compile-front-end.sh:
        * inspector/front-end/TimelineAgent.js: Removed.
        * inspector/front-end/TimelineModel.js: Added.
        (WebInspector.TimelineModel):
        (WebInspector.TimelineModel.prototype.startRecord):
        (WebInspector.TimelineModel.prototype.stopRecord):
        (WebInspector.TimelineModel.prototype.get records):
        (WebInspector.TimelineModel.prototype._onRecordAdded):
        (WebInspector.TimelineModel.prototype._addRecord):
        (WebInspector.TimelineModel.prototype._loadNextChunk):
        (WebInspector.TimelineModel.prototype._loadFromFile):
        (WebInspector.TimelineModel.prototype._loadFromFile.onError):
        (WebInspector.TimelineModel.prototype._saveToFile):
        (WebInspector.TimelineModel.prototype._reset):
        * inspector/front-end/TimelinePanel.js:
        (WebInspector.TimelinePanel.prototype.get _recordStyles):
        (WebInspector.TimelinePanel.prototype._createEventDivider):
        (WebInspector.TimelinePanel.prototype._findParentRecord):
        (WebInspector.TimelinePanel.prototype._innerAddRecordToTimeline):
        (WebInspector.TimelinePanel.prototype._refreshRecords):
        (WebInspector.TimelinePanel.FormattedRecord):
        (WebInspector.TimelinePanel.FormattedRecord.prototype._generatePopupContent):
        (WebInspector.TimelinePanel.FormattedRecord.prototype._getRecordDetails):
        * inspector/front-end/TimelinePresentationModel.js: Added.
        (WebInspector.TimelinePresentationModel):
        (WebInspector.TimelinePresentationModel.prototype.reset):
        (WebInspector.TimelinePresentationModel.prototype.get categories):
        (WebInspector.TimelinePresentationModel.prototype.addCategory):
        (WebInspector.TimelinePresentationModel.prototype.setWindowPosition):
        (WebInspector.TimelinePresentationModel.prototype.setWindowIndices):
        (WebInspector.TimelinePresentationModel.prototype.setCategoryVisibility):
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/inspector.html:

2012-02-27  Alexander Pavlov  <apavlov@chromium.org>

        Web Inspector: [Styles] Allow adding CSS properties anywhere in the style declaration, not only at the end
        https://bugs.webkit.org/show_bug.cgi?id=79662

        Reviewed by Pavel Feldman.

        * inspector/front-end/CSSStyleModel.js:
        (WebInspector.CSSStyleDeclaration.prototype.newBlankProperty):
        (WebInspector.CSSProperty.prototype.setText):
        (WebInspector.CSSProperty.prototype.setValue):
        * inspector/front-end/MetricsSidebarPane.js:
        (WebInspector.MetricsSidebarPane.prototype._applyUserInput):
        * inspector/front-end/StylesSidebarPane.js:
        (WebInspector.StylePropertiesSection):
        (WebInspector.StylePropertiesSection.prototype._handleSelectorContainerClick):
        (WebInspector.StylePropertiesSection.prototype.addNewBlankProperty):
        (WebInspector.StylePropertyTreeElement.prototype):
        (WebInspector.StylePropertyTreeElement.prototype.element.userInput.previousContent.context.moveDirection):
        (WebInspector.StylePropertyTreeElement.prototype.styleText.updateInterface.majorChange.isRevert):

2012-02-27  Pavel Feldman  <pfeldman@google.com>

        [Shadow]: Expose one ShadowRoot in the Elements panel (under experiment flag)
        https://bugs.webkit.org/show_bug.cgi?id=78202

        Reviewed by Yury Semikhatsky.

        * dom/ShadowTree.cpp:
        (WebCore::ShadowTree::pushShadowRoot):
        (WebCore::ShadowTree::popShadowRoot):
        * inspector/Inspector.json:
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::unbind):
        (WebCore::InspectorDOMAgent::assertEditableNode):
        (WebCore::InspectorDOMAgent::assertEditableElement):
        (WebCore::InspectorDOMAgent::pushChildNodesToFrontend):
        (WebCore::InspectorDOMAgent::setAttributeValue):
        (WebCore::InspectorDOMAgent::setAttributesAsText):
        (WebCore::InspectorDOMAgent::removeAttribute):
        (WebCore::InspectorDOMAgent::removeNode):
        (WebCore::InspectorDOMAgent::setOuterHTML):
        (WebCore::InspectorDOMAgent::setNodeValue):
        (WebCore::InspectorDOMAgent::moveTo):
        (WebCore::InspectorDOMAgent::buildObjectForNode):
        (WebCore::InspectorDOMAgent::didPushShadowRoot):
        (WebCore):
        (WebCore::InspectorDOMAgent::willPopShadowRoot):
        * inspector/InspectorDOMAgent.h:
        (WebCore):
        (InspectorDOMAgent):
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::didPushShadowRootImpl):
        (WebCore):
        (WebCore::InspectorInstrumentation::willPopShadowRootImpl):
        * inspector/InspectorInstrumentation.h:
        (WebCore):
        (InspectorInstrumentation):
        (WebCore::InspectorInstrumentation::didPushShadowRoot):
        (WebCore::InspectorInstrumentation::willPopShadowRoot):
        * inspector/PageConsoleAgent.cpp:
        (WebCore::PageConsoleAgent::addInspectedNode):
        * inspector/front-end/DOMAgent.js:
        (WebInspector.DOMNode):
        (WebInspector.DOMNode.prototype.hasChildNodes):
        (WebInspector.DOMNode.prototype.isInShadowTree):
        (WebInspector.DOMNode.prototype._insertChild):
        (WebInspector.DOMNode.prototype._setChildrenPayload):
        (WebInspector.DOMDocument):
        (WebInspector.DOMAgent.prototype._setDetachedRoot):
        (WebInspector.DOMAgent.prototype._shadowRootPopped):
        (WebInspector.DOMDispatcher.prototype.childNodeRemoved):
        (WebInspector.DOMDispatcher.prototype.shadowRootPushed):
        (WebInspector.DOMDispatcher.prototype.shadowRootPopped):
        * inspector/front-end/ElementsTreeOutline.js:
        * inspector/front-end/MemoryStatistics.js:
        * inspector/front-end/Settings.js:
        (WebInspector.ExperimentsSettings):
        * inspector/front-end/inspector.css:
        (.webkit-html-tag.shadow, .webkit-html-fragment.shadow):

2012-02-27  Andrey Kosyakov  <caseq@chromium.org>

        Web Inspector: [refactoring] remove dependencies from TimelinePanel from most of FormattedRecord
        https://bugs.webkit.org/show_bug.cgi?id=79665

        Reviewed by Pavel Feldman.

        * inspector/front-end/TimelinePanel.js:
        (WebInspector.TimelinePanel.prototype._innerAddRecordToTimeline):
        (WebInspector.TimelinePanel.FormattedRecord):
        (WebInspector.TimelinePanel.FormattedRecord.prototype._generatePopupContent):
        (WebInspector.TimelinePanel.FormattedRecord.prototype._getRecordDetails):
        (WebInspector.TimelinePanel.FormattedRecord.prototype._linkifyLocation):
        (WebInspector.TimelinePanel.FormattedRecord.prototype._linkifyCallFrame):
        (WebInspector.TimelinePanel.FormattedRecord.prototype._linkifyTopCallFrame):
        (WebInspector.TimelinePanel.FormattedRecord.prototype._linkifyScriptLocation):
        (WebInspector.TimelinePanel.PopupContentHelper):
        (WebInspector.TimelinePanel.PopupContentHelper.prototype._appendStackTrace):

2012-02-27  Yury Semikhatsky  <yurys@chromium.org>

        Web Inspector: reveal corresponding timeline record when user clicks on memory graph
        https://bugs.webkit.org/show_bug.cgi?id=79669

        When user clicks on DOM counter graph corresponding timeline record is
        revealed in timelime grid and all its ancestors are expanded.

        Reviewed by Pavel Feldman.

        * inspector/front-end/MemoryStatistics.js:
        (WebInspector.MemoryStatistics.prototype._onClick):
        * inspector/front-end/TimelineOverviewPane.js:
        (WebInspector.TimelineOverviewPane.prototype.update):
        (WebInspector.HeapGraph.prototype.update):
        (WebInspector.HeapGraph.prototype._clear):
        * inspector/front-end/TimelinePanel.js:
        (WebInspector.TimelinePanel.prototype.revealRecordAt.recordFinder):
        (WebInspector.TimelinePanel.prototype.revealRecordAt):
        (WebInspector.TimelinePanel.prototype._refreshRecords):
        (WebInspector.TimelinePanel.forAllRecords):
        (WebInspector.TimelinePanel.FormattedRecord.prototype.containsTime):

2012-02-27  Ilya Tikhonovsky  <loislo@chromium.org>

        Unreviewed single line fix for r108983.

        * inspector/front-end/DetailedHeapshotView.js:
        (WebInspector.DetailedHeapshotView.prototype.willHide):

2012-02-27  Yury Semikhatsky  <yurys@chromium.org>

        Web Inspector: repaint counter graphs when timeline splitter moves
        https://bugs.webkit.org/show_bug.cgi?id=79644

        Immediately refresh timeline panel on splitter move.

        Reviewed by Pavel Feldman.

        * inspector/front-end/TimelinePanel.js:
        (WebInspector.TimelinePanel.prototype._splitterDragging):

2012-02-27  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix make distcheck.

        * GNUmakefile.am: Add missing files.
        * GNUmakefile.list.am: Ditto.

2012-02-27  Patrick Gansterer  <paroga@webkit.org>

        [CMake] Build fix after r108709.

        * CMakeLists.txt: Move DOMWindowSVG.idl to the other IDL files.

2012-02-27  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: [chromium] Profiles - Tooltip with object/property types stays on screen when another tab selected
        https://bugs.webkit.org/show_bug.cgi?id=79654

        Reviewed by Yury Semikhatsky.

        * inspector/front-end/DetailedHeapshotView.js:
        (WebInspector.DetailedHeapshotView.prototype.willHide):

2012-02-27  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Remove page/PageSupplement.h from WebCore's Target.pri

        The file itself was removed in r108958.

        Reviewed by Kenneth Rohde Christiansen.

        * Target.pri:

2012-02-27  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Use USE() macro instead of ENABLE() for using the Qt image decoder

        Reviewed by Kenneth Rohde Christiansen..

        * Target.pri:
        * WebCore.pri:
        * platform/MIMETypeRegistry.cpp:
        (WebCore::initializeSupportedImageMIMETypes):
        (WebCore::initializeSupportedImageMIMETypesForEncoding):
        * platform/image-decoders/ImageDecoder.h:
        (WebCore::ImageFrame::getAddr):
        (ImageFrame):
        * platform/image-decoders/qt/ImageFrameQt.cpp:
        (WebCore):
        (WebCore::ImageFrame::asNewNativeImage):

2012-02-27  MORITA Hajime  <morrita@google.com>

        Removing <ul>, <li> inside shadow DOM triggers assertion in updateListMarkerNumbers
        https://bugs.webkit.org/show_bug.cgi?id=72440

        Reviewed by Ryosuke Niwa.

        This problem was caused by the inconsistent detach order of DOM tree where
        Element::detach() called ContainerNode::detach() before shadow tree is detached.
        This resulted the renderer of the element being destroyed even if its children,
        each of which came from an element in the shadow tree, are alive.
        In principle, child renderers should be destroyed before its parent.

        This change aligns the detach order with the attach order. The shadow tree is
        now deatched before parent's ContainerNode::detach() is called.

        Test: fast/dom/shadow/shadow-ul-li.html

        * dom/Element.cpp:
        (WebCore::Element::detach):

2012-02-27  Keishi Hattori  <keishi@webkit.org>

        Color input type should be clickable through keyboard
        https://bugs.webkit.org/show_bug.cgi?id=79629

        Reviewed by Kent Tamura.

        Introduced BaseClickableWithKeyInputType that represents an input type
        that can be clicked by pressing space/return keys.
        ColorInputType, FileInputType directly inherit it because it doesn't
        want the other methods(like appendFormData) in BaseButtonInputType.

        * CMakeLists.txt: Added BaseClickableWithKeyInputType.cpp
        * GNUmakefile.list.am: Added BaseClickableWithKeyInputType.{cpp,h}
        * Target.pri: Added BaseClickableWithKeyInputType.{cpp,h}
        * WebCore.gypi: Added BaseClickableWithKeyInputType.{cpp,h}
        * WebCore.vcproj/WebCore.vcproj: Added BaseClickableWithKeyInputType.{cpp,h}
        * WebCore.xcodeproj/project.pbxproj: Added BaseClickableWithKeyInputType.{cpp,h}
        * html/BaseButtonInputType.cpp:
        * html/BaseButtonInputType.h:
        (WebCore::BaseButtonInputType::BaseButtonInputType): Inherits BaseClickableWithKeyInputType now.
        (BaseButtonInputType):
        * html/BaseCheckableInputType.cpp: Changed comment.
        * html/BaseClickableWithKeyInputType.cpp:
        (WebCore):
        (WebCore::BaseClickableWithKeyInputType::handleKeydownEvent): Moved from BaseButtonInputType
        (WebCore::BaseClickableWithKeyInputType::handleKeypressEvent): Moved from BaseButtonInputType
        (WebCore::BaseClickableWithKeyInputType::handleKeyupEvent): Moved from BaseButtonInputType
        (WebCore::BaseClickableWithKeyInputType::accessKeyAction): Moved from BaseButtonInputType
        * html/BaseClickableWithKeyInputType.h:
        (WebCore):
        (BaseClickableWithKeyInputType): Input type that can be clicked by pressing space/return keys.
        (WebCore::BaseClickableWithKeyInputType::BaseClickableWithKeyInputType):
        * html/ColorInputType.h:
        (WebCore::ColorInputType::ColorInputType): Inherits BaseClickableWithKeyInputType now.
        * html/FileInputType.cpp:
        (WebCore::FileInputType::FileInputType):
        * html/FileInputType.h:
        (FileInputType): Inherits BaseClickableWithKeyInputType now.
        * html/RangeInputType.cpp: Changed comment.
        (WebCore):

2012-02-27  Keishi Hattori  <keishi@webkit.org>

        Add missing include to ColorInputType.cpp
        https://bugs.webkit.org/show_bug.cgi?id=79632

        Reviewed by Kent Tamura.

        * html/ColorInputType.cpp: Include ShadowTree.h

2012-02-27  Andrey Kosyakov  <caseq@chromium.org>

        Use built-in bind in ExtensionAPI.js

        Web Inspector: [Extensions API] get rid of custom bind() in favor of built-in
        https://bugs.webkit.org/show_bug.cgi?id=79570

        Reviewed by Pavel Feldman.

        * inspector/front-end/ExtensionAPI.js:
        (injectedExtensionAPI.EventSinkImpl.prototype.addListener):
        (injectedExtensionAPI):
        (injectedExtensionAPI.Panels.prototype.create):
        (injectedExtensionAPI.AuditResultImpl):
        (injectedExtensionAPI.ExtensionServerClient):

2012-02-21  Pavel Podivilov  <podivilov@chromium.org>

        Web Inspector: get rid of RawSourceCode.sourceMapping getter.
        https://bugs.webkit.org/show_bug.cgi?id=79461

        Reviewed by Yury Semikhatsky.

        * inspector/front-end/BreakpointManager.js:
        (WebInspector.BreakpointManager.prototype.uiSourceCodeAdded):
        (WebInspector.BreakpointManager.prototype.setBreakpoint):
        (WebInspector.BreakpointManager.prototype._materializeBreakpoint):
        (WebInspector.BreakpointManager.prototype._breakpointDebuggerLocationChanged):
        * inspector/front-end/ConsoleMessage.js:
        (WebInspector.ConsoleMessageImpl.prototype.get location):
        * inspector/front-end/DebuggerPresentationModel.js:
        (WebInspector.DebuggerPresentationModel.prototype.rawLocationToUILocation):
        (WebInspector.DebuggerPresentationModel.prototype.uiSourceCodes):
        (WebInspector.DebuggerPresentationModel.prototype._handleUISourceCodeListChanged):
        (WebInspector.DebuggerPresentationModel.prototype._uiSourceCodeListChanged):
        (WebInspector.DebuggerPresentationModel.prototype._restoreBreakpoints):
        (WebInspector.DebuggerPresentationModel.prototype._restoreConsoleMessages):
        (WebInspector.DebuggerPresentationModel.prototype._restoreExecutionLine):
        (WebInspector.DebuggerPresentationModel.prototype._consoleMessageAdded):
        (WebInspector.DebuggerPresentationModel.prototype.continueToLine):
        (WebInspector.DebuggerPresentationModel.prototype.set selectedCallFrame):
        (WebInspector.DebuggerPresentationModel.prototype._debuggerReset):
        (WebInspector.PresentationCallFrame.prototype.uiLocation):
        (WebInspector.DebuggerPresentationModel.CallFramePlacard):
        (WebInspector.DebuggerPresentationModel.CallFramePlacard.prototype.discard):
        (WebInspector.DebuggerPresentationModel.CallFramePlacard.prototype._update):
        (WebInspector.DebuggerPresentationModelResourceBinding.prototype.canSetContent):
        (WebInspector.DebuggerPresentationModelResourceBinding.prototype.setContent):
        (WebInspector.DebuggerPresentationModel.DefaultLinkifierFormatter.prototype.formatRawSourceCodeAnchor):
        (WebInspector.DebuggerPresentationModel.Linkifier.prototype.linkifyRawSourceCode):
        (WebInspector.DebuggerPresentationModel.Linkifier.prototype.reset):
        (WebInspector.DebuggerPresentationModel.Linkifier.prototype._updateAnchor):
        * inspector/front-end/RawSourceCode.js:
        (WebInspector.RawSourceCode.prototype.rawLocationToUILocation):
        (WebInspector.RawSourceCode.prototype.uiLocationToRawLocation):
        (WebInspector.RawSourceCode.prototype.uiSourceCodeList):
        (WebInspector.RawSourceCode.prototype._saveSourceMapping):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype._updateCallFrame):
        * inspector/front-end/ScriptsSearchScope.js:
        (WebInspector.ScriptsSearchResultsPane.prototype.createAnchor):

2012-02-27  Mihnea Ovidenie  <mihnea@adobe.com>

        [CSSRegions]Implement NamedFlow::getRegionsByContentNode
        https://bugs.webkit.org/show_bug.cgi?id=77746

        Reviewed by David Hyatt.

        Tests: fast/regions/get-regions-by-content-node-horiz-bt.html
               fast/regions/get-regions-by-content-node-horiz-tb.html
               fast/regions/get-regions-by-content-node-vert-lr.html
               fast/regions/get-regions-by-content-node-vert-rl.html
               fast/regions/get-regions-by-content-node.html
               fast/regions/get-regions-by-content-node2.html

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/Node.cpp:
        (WebCore::Node::removeCachedRegionNodeList):
        (WebCore):
        (WebCore::Node::getRegionsByContentNode):
        (WebCore::NodeListsNodeData::invalidateCaches):
        (WebCore::NodeListsNodeData::isEmpty):
        * dom/Node.h:
        (WebCore):
        (Node):
        * dom/NodeRareData.h:
        (NodeListsNodeData):
        * dom/RegionNodeList.cpp:
        (WebCore):
        (WebCore::RegionNodeList::RegionNodeList):
        (WebCore::RegionNodeList::~RegionNodeList):
        (WebCore::RegionNodeList::nodeMatches):
        * dom/RegionNodeList.h:
        (WebCore):
        (RegionNodeList):
        (WebCore::RegionNodeList::create):
        * dom/WebKitNamedFlow.cpp:
        (WebCore::WebKitNamedFlow::getRegionsByContentNode):
        (WebCore):
        * dom/WebKitNamedFlow.h:
        (WebCore):
        (WebKitNamedFlow):
        * dom/WebKitNamedFlow.idl:
        * rendering/RenderFlowThread.cpp:
        (WebCore::RenderFlowThread::regionInRange):
        (WebCore):
        (WebCore::RenderFlowThread::objectInFlowRegion):
        * rendering/RenderFlowThread.h:
        * rendering/RenderRegion.h:
        (WebCore::RenderRegion::flowThread):

2012-02-27  Yury Semikhatsky  <yurys@chromium.org>

        Web Inspector: counter graphs should resize after console showing
        https://bugs.webkit.org/show_bug.cgi?id=79640

        Invoke Panel.doResize after showing drawer.

        Reviewed by Pavel Feldman.

        * inspector/front-end/Drawer.js:
        (WebInspector.Drawer.prototype.show.animationFinished):
        (WebInspector.Drawer.prototype.show):

2012-02-27  Dan Beam  <dbeam@chromium.org>

        Web Inspector: Close TabbedPanes on middle click of tab handle
        https://bugs.webkit.org/show_bug.cgi?id=79518

        Reviewed by Pavel Feldman.

        * inspector/front-end/TabbedPane.js:
        (WebInspector.TabbedPaneTab.prototype._createTabElement):
        (WebInspector.TabbedPaneTab.prototype._tabClicked):

2012-02-26  Yury Semikhatsky  <yurys@chromium.org>

        Web Inspector: crash in fake workers
        https://bugs.webkit.org/show_bug.cgi?id=79637

        Notify front-end about worker creation/destruction synchronously instead of
        posting a task.

        Reviewed by Pavel Feldman.

        * inspector/InspectorAgent.cpp:
        (WebCore):
        (WebCore::InspectorAgent::didCreateWorker):
        (WebCore::InspectorAgent::didDestroyWorker):
        * inspector/InspectorAgent.h:
        (InspectorAgent):

2012-02-26  Adam Barth  <abarth@webkit.org>

        Unreviewed.

        Fix some warnings in the build from referencing the non-existent
        websockets directory.

        * WebCore.gyp/WebCore.gyp:

2012-02-26  Shinya Kawanaka  <shinyak@chromium.org>

        Rename ShadowRootList to ShadowTree.
        https://bugs.webkit.org/show_bug.cgi?id=79342

        Reviewed by Hajime Morita.

        This patch renames ShadowRootList ot ShadowTree.

        No new tests, no change in behavior.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.exp.in:
        * WebCore.gypi:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/DOMAllInOne.cpp:
        * dom/Document.cpp:
        (WebCore::Document::buildAccessKeyMap):
        * dom/Element.cpp:
        (WebCore::Element::willRemove):
        (WebCore::Element::insertedIntoDocument):
        (WebCore::Element::removedFromDocument):
        (WebCore::Element::insertedIntoTree):
        (WebCore::Element::removedFromTree):
        (WebCore::Element::attach):
        (WebCore::Element::detach):
        (WebCore::Element::recalcStyle):
        (WebCore::Element::hasShadowRoot):
        (WebCore::Element::shadowTree):
        (WebCore::Element::setShadowRoot):
        (WebCore::Element::ensureShadowRoot):
        (WebCore::Element::removeShadowRoot):
        (WebCore::Element::childrenChanged):
        * dom/Element.h:
        (WebCore):
        (Element):
        * dom/ElementRareData.h:
        (ElementRareData):
        (WebCore::ElementRareData::~ElementRareData):
        * dom/Node.cpp:
        (WebCore::oldestShadowRoot):
        * dom/NodeRenderingContext.cpp:
        (WebCore::NodeRenderingContext::NodeRenderingContext):
        (WebCore::NodeRenderingContext::hostChildrenChanged):
        (WebCore::NodeRenderingContext::shouldCreateRenderer):
        * dom/NodeRenderingContext.h:
        (WebCore):
        * dom/ShadowRoot.cpp:
        (WebCore::ShadowRoot::tree):
        (WebCore::ShadowRoot::attach):
        * dom/ShadowRoot.h:
        (WebCore):
        (ShadowRoot):
        * dom/ShadowTree.cpp: Renamed from Source/WebCore/dom/ShadowRootList.cpp.
        (WebCore):
        (WebCore::ShadowTree::ShadowTree):
        (WebCore::ShadowTree::~ShadowTree):
        (WebCore::ShadowTree::pushShadowRoot):
        (WebCore::ShadowTree::popShadowRoot):
        (WebCore::ShadowTree::insertedIntoDocument):
        (WebCore::ShadowTree::removedFromDocument):
        (WebCore::ShadowTree::insertedIntoTree):
        (WebCore::ShadowTree::removedFromTree):
        (WebCore::ShadowTree::willRemove):
        (WebCore::ShadowTree::attach):
        (WebCore::ShadowTree::detach):
        (WebCore::ShadowTree::insertionPointFor):
        (WebCore::ShadowTree::isSelectorActive):
        (WebCore::ShadowTree::reattach):
        (WebCore::ShadowTree::childNeedsStyleRecalc):
        (WebCore::ShadowTree::needsStyleRecalc):
        (WebCore::ShadowTree::recalcShadowTreeStyle):
        (WebCore::ShadowTree::needsReattachHostChildrenAndShadow):
        (WebCore::ShadowTree::hostChildrenChanged):
        (WebCore::ShadowTree::setNeedsReattachHostChildrenAndShadow):
        (WebCore::ShadowTree::reattachHostChildrenAndShadow):
        (WebCore::ShadowTree::ensureSelector):
        * dom/ShadowTree.h: Renamed from Source/WebCore/dom/ShadowRootList.h.
        (WebCore):
        (ShadowTree):
        (WebCore::ShadowTree::hasShadowRoot):
        (WebCore::ShadowTree::youngestShadowRoot):
        (WebCore::ShadowTree::oldestShadowRoot):
        (WebCore::ShadowTree::selector):
        (WebCore::ShadowTree::clearNeedsReattachHostChildrenAndShadow):
        (WebCore::ShadowTree::host):
        * dom/TreeScopeAdopter.cpp:
        (WebCore::shadowRootFor):
        * html/ColorInputType.cpp:
        (WebCore::ColorInputType::createShadowSubtree):
        (WebCore::ColorInputType::shadowColorSwatch):
        * html/FileInputType.cpp:
        (WebCore::FileInputType::createShadowSubtree):
        (WebCore::FileInputType::multipleAttributeChanged):
        * html/HTMLDetailsElement.cpp:
        (WebCore::HTMLDetailsElement::findMainSummary):
        * html/HTMLKeygenElement.cpp:
        (WebCore::HTMLKeygenElement::shadowSelect):
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::mediaControls):
        (WebCore::HTMLMediaElement::hasMediaControls):
        * html/HTMLSummaryElement.cpp:
        * html/HTMLTextAreaElement.cpp:
        (WebCore::HTMLTextAreaElement::innerTextElement):
        (WebCore::HTMLTextAreaElement::updatePlaceholderText):
        * html/InputType.cpp:
        (WebCore::InputType::destroyShadowSubtree):
        * html/RangeInputType.cpp:
        (WebCore::RangeInputType::handleMouseDownEvent):
        (WebCore::RangeInputType::createShadowSubtree):
        * html/TextFieldInputType.cpp:
        (WebCore::TextFieldInputType::createShadowSubtree):
        (WebCore::TextFieldInputType::updatePlaceholderText):
        * html/ValidationMessage.cpp:
        (WebCore::ValidationMessage::deleteBubbleTree):
        * html/shadow/HTMLContentElement.cpp:
        (WebCore::HTMLContentElement::attach):
        (WebCore::HTMLContentElement::detach):
        (WebCore::HTMLContentElement::parseAttribute):
        * html/shadow/SliderThumbElement.cpp:
        (WebCore::sliderThumbElementOf):
        (WebCore::RenderSliderContainer::layout):
        (WebCore::trackLimiterElementOf):
        * page/FocusController.cpp:
        (WebCore::shadowRoot):
        * rendering/RenderFileUploadControl.cpp:
        (WebCore::RenderFileUploadControl::uploadButton):
        * svg/SVGTRefElement.cpp:
        (WebCore::SVGTRefElement::updateReferencedText):
        (WebCore::SVGTRefElement::detachTarget):
        * testing/Internals.cpp:
        (WebCore::Internals::ensureShadowRoot):
        (WebCore::Internals::youngestShadowRoot):
        (WebCore::Internals::oldestShadowRoot):

2012-02-26  Adam Barth  <abarth@webkit.org>

        Extract Supplementable base class from Page and Navigator
        https://bugs.webkit.org/show_bug.cgi?id=79624

        Reviewed by Hajime Morita.

        We'll use this pattern again soon for ScriptExecutionContext.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Modules/gamepad/NavigatorGamepad.cpp:
        (WebCore::NavigatorGamepad::from):
        * Modules/gamepad/NavigatorGamepad.h:
        * Modules/geolocation/NavigatorGeolocation.cpp:
        (WebCore::NavigatorGeolocation::from):
        * Modules/geolocation/NavigatorGeolocation.h:
        * Modules/mediastream/NavigatorMediaStream.cpp:
        (WebCore::NavigatorMediaStream::webkitGetUserMedia):
        * Modules/mediastream/UserMediaController.cpp:
        (WebCore::provideUserMediaTo):
        * Modules/mediastream/UserMediaController.h:
        (WebCore::UserMediaController::from):
        * Target.pri:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/DeviceMotionController.cpp:
        (WebCore::provideDeviceMotionTo):
        * dom/DeviceMotionController.h:
        (WebCore::DeviceMotionController::from):
        * dom/DeviceOrientationController.cpp:
        (WebCore::provideDeviceOrientationTo):
        * dom/DeviceOrientationController.h:
        (WebCore):
        (WebCore::DeviceOrientationController::from):
        * notifications/NotificationController.cpp:
        (WebCore::provideNotification):
        * notifications/NotificationController.h:
        (WebCore):
        (WebCore::NotificationController::from):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::page):
        (WebCore):
        (WebCore::DOMWindow::addEventListener):
        (WebCore::DOMWindow::removeEventListener):
        (WebCore::DOMWindow::removeAllEventListeners):
        * page/DOMWindow.h:
        (WebCore):
        (DOMWindow):
        * page/Navigator.cpp:
        (WebCore):
        * page/Navigator.h:
        (Navigator):
        * page/NavigatorSupplement.cpp: Removed.
        * page/NavigatorSupplement.h: Removed.
        * page/Page.cpp:
        (WebCore):
        * page/Page.h:
        (Page):
        * page/PageSupplement.cpp: Removed.
        * page/PageSupplement.h: Removed.
        * page/SpeechInput.cpp:
        (WebCore::provideSpeechInputTo):
        * page/SpeechInput.h:
        (WebCore::SpeechInput::from):
        * platform/Supplementable.h: Added.
        (WebCore):
        (Supplement):
        (WebCore::Supplement::~Supplement):
        (WebCore::Supplement::provideTo):
        (WebCore::Supplement::from):
        (Supplementable):
        (WebCore::Supplementable::provideSupplement):
        (WebCore::Supplementable::requireSupplement):

2012-02-26  Hajime Morrita  <morrita@chromium.org>

        Move ChromeClient::showContextMenu() to ContextMenuClient
        https://bugs.webkit.org/show_bug.cgi?id=79427

        Reviewed by Adam Barth.

        - Removed ChromeClient::showContextMenu(), Chrome::showContextMenu()
        - Added ContextMenuController::showContextMenuAt(), ContextMenuClient::showContextMenu()
        - Hided showContextMenu() behind ACCESSIBILITY_CONTEXT_MENUS

        This change localizes context menu related code and will make it easy to
        modularize CONTEXT_MENUS code.

        Refactoring. No new tests.

        * WebCore.exp.in:
        * accessibility/mac/WebAccessibilityObjectWrapper.mm:
        (-[WebAccessibilityObjectWrapper accessibilityShowContextMenu]):
        * loader/EmptyClients.h:
        (EmptyContextMenuClient):
        (WebCore::EmptyContextMenuClient::showContextMenu):
        * page/ContextMenuClient.h:
        (ContextMenuClient):
        * page/ContextMenuController.cpp:
        (WebCore):
        (WebCore::ContextMenuController::showContextMenuAt):
        * page/ContextMenuController.h:
        (ContextMenuController):
        * page/Chrome.cpp:
        * page/Chrome.h:
        (Chrome):
        * page/ChromeClient.h:
        (ChromeClient):

2012-02-26  Benjamin Poulain  <bpoulain@apple.com>

        [Mac] Release localized Strings instead of AutoRelease
        https://bugs.webkit.org/show_bug.cgi?id=79552

        Reviewed by Sam Weinig.

        By using the CoreFoundation API, we can release the memory as soon as
        the WTF::String is created.

        * WebCore.xcodeproj/project.pbxproj:
        * platform/mac/LocalizedStringsMac.cpp: Renamed from Source/WebCore/platform/mac/LocalizedStringsMac.mm.
        (WebCore):
        (WebCore::localizedString):

2012-02-26  Adam Barth  <abarth@webkit.org>

        ContextDestructionObserver should live in its own file
        https://bugs.webkit.org/show_bug.cgi?id=79619

        Reviewed by Hajime Morita.

        WebKit prefers to have one class per file.  (This patch is paying a
        build system hacking debt I incurred earlier.)

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/ActiveDOMObject.cpp:
        (WebCore):
        * dom/ActiveDOMObject.h:
        (ActiveDOMObject):
        (WebCore::ActiveDOMObject::suspendIfNeededCalled):
        (WebCore::ActiveDOMObject::setPendingActivity):
        (WebCore::ActiveDOMObject::unsetPendingActivity):
        * dom/ContextDestructionObserver.cpp: Added.
        (WebCore):
        (WebCore::ContextDestructionObserver::ContextDestructionObserver):
        (WebCore::ContextDestructionObserver::~ContextDestructionObserver):
        (WebCore::ContextDestructionObserver::contextDestroyed):
        * dom/ContextDestructionObserver.h: Added.
        (WebCore):
        (ContextDestructionObserver):
        (WebCore::ContextDestructionObserver::scriptExecutionContext):
        * dom/DOMAllInOne.cpp:

2012-02-26  Dirk Schulze  <krit@webkit.org>

        Cleanup of Adobes copyright text. The text got harmonized with copyright texts of other companies. 

        Rubber stamped by.

        * css/CSSWrapShapes.cpp:
        * css/CSSWrapShapes.h:
        * css/WebKitCSSRegionRule.cpp:
        * css/WebKitCSSRegionRule.h:
        * css/WebKitCSSRegionRule.idl:
        * css/WebKitCSSShaderValue.cpp:
        * css/WebKitCSSShaderValue.h:
        * dom/WebKitNamedFlow.cpp:
        * dom/WebKitNamedFlow.h:
        * dom/WebKitNamedFlow.idl:
        * loader/cache/CachedShader.cpp:
        * loader/cache/CachedShader.h:
        * platform/graphics/filters/CustomFilterMesh.cpp:
        * platform/graphics/filters/CustomFilterMesh.h:
        * platform/graphics/filters/CustomFilterNumberParameter.h:
        * platform/graphics/filters/CustomFilterOperation.cpp:
        * platform/graphics/filters/CustomFilterOperation.h:
        * platform/graphics/filters/CustomFilterParameter.h:
        * platform/graphics/filters/CustomFilterProgram.cpp:
        * platform/graphics/filters/CustomFilterProgram.h:
        * platform/graphics/filters/CustomFilterProgramClient.h:
        * platform/graphics/filters/CustomFilterShader.cpp:
        * platform/graphics/filters/CustomFilterShader.h:
        * platform/graphics/filters/FECustomFilter.cpp:
        * platform/graphics/filters/FECustomFilter.h:
        * rendering/FilterEffectObserver.h:
        * rendering/RenderFlowThread.cpp:
        * rendering/RenderFlowThread.h:
        * rendering/RenderRegion.cpp:
        * rendering/RenderRegion.h:
        * rendering/style/StyleCachedShader.cpp:
        * rendering/style/StyleCachedShader.h:
        * rendering/style/StyleCustomFilterProgram.h:
        * rendering/style/StylePendingShader.h:
        * rendering/style/StyleShader.h:

2012-02-26  Hyowon Kim  <hw1008.kim@samsung.com>

        [EFL] Implementation of GraphicsContext3D for EFL port
        https://bugs.webkit.org/show_bug.cgi?id=79452

        Reviewed by Noam Rosenthal.

        Evas_GL is used to do OpenGL rendering on Evas, in which
        a structure 'Evas_GL_API' contains all the OpenGL functions.

        GraphicsContext3D in EFL port should call OpenGL functions indirectly
        through the Evas_GL_API, and not use GraphicsContext3DOpenGL(Common).

        So, we use the GraphicsContext3DPrivate to delegate all OpenGL function calls,
        and it will be implemented to use Evas_GL (bug 62961).

        No new tests. No behavior change.

        * platform/graphics/efl/GraphicsContext3DEfl.cpp: Added.
        (WebCore):
        (WebCore::GraphicsContext3D::create):
        (WebCore::GraphicsContext3D::GraphicsContext3D):
        (WebCore::GraphicsContext3D::~GraphicsContext3D):
        (WebCore::GraphicsContext3D::platformGraphicsContext3D):
        (WebCore::GraphicsContext3D::platformLayer):
        (WebCore::GraphicsContext3D::makeContextCurrent):
        (WebCore::GraphicsContext3D::isGLES2Compliant):
        (WebCore::GraphicsContext3D::activeTexture):
        (WebCore::GraphicsContext3D::attachShader):
        (WebCore::GraphicsContext3D::bindAttribLocation):
        (WebCore::GraphicsContext3D::bindBuffer):
        (WebCore::GraphicsContext3D::bindFramebuffer):
        (WebCore::GraphicsContext3D::bindRenderbuffer):
        (WebCore::GraphicsContext3D::bindTexture):
        (WebCore::GraphicsContext3D::blendColor):
        (WebCore::GraphicsContext3D::blendEquation):
        (WebCore::GraphicsContext3D::blendEquationSeparate):
        (WebCore::GraphicsContext3D::blendFunc):
        (WebCore::GraphicsContext3D::blendFuncSeparate):
        (WebCore::GraphicsContext3D::bufferData):
        (WebCore::GraphicsContext3D::bufferSubData):
        (WebCore::GraphicsContext3D::checkFramebufferStatus):
        (WebCore::GraphicsContext3D::clear):
        (WebCore::GraphicsContext3D::clearColor):
        (WebCore::GraphicsContext3D::clearDepth):
        (WebCore::GraphicsContext3D::clearStencil):
        (WebCore::GraphicsContext3D::colorMask):
        (WebCore::GraphicsContext3D::compileShader):
        (WebCore::GraphicsContext3D::copyTexImage2D):
        (WebCore::GraphicsContext3D::copyTexSubImage2D):
        (WebCore::GraphicsContext3D::cullFace):
        (WebCore::GraphicsContext3D::depthFunc):
        (WebCore::GraphicsContext3D::depthMask):
        (WebCore::GraphicsContext3D::depthRange):
        (WebCore::GraphicsContext3D::detachShader):
        (WebCore::GraphicsContext3D::disable):
        (WebCore::GraphicsContext3D::disableVertexAttribArray):
        (WebCore::GraphicsContext3D::drawArrays):
        (WebCore::GraphicsContext3D::drawElements):
        (WebCore::GraphicsContext3D::enable):
        (WebCore::GraphicsContext3D::enableVertexAttribArray):
        (WebCore::GraphicsContext3D::finish):
        (WebCore::GraphicsContext3D::flush):
        (WebCore::GraphicsContext3D::framebufferRenderbuffer):
        (WebCore::GraphicsContext3D::framebufferTexture2D):
        (WebCore::GraphicsContext3D::frontFace):
        (WebCore::GraphicsContext3D::generateMipmap):
        (WebCore::GraphicsContext3D::getActiveAttrib):
        (WebCore::GraphicsContext3D::getActiveUniform):
        (WebCore::GraphicsContext3D::getAttachedShaders):
        (WebCore::GraphicsContext3D::getAttribLocation):
        (WebCore::GraphicsContext3D::getBooleanv):
        (WebCore::GraphicsContext3D::getBufferParameteriv):
        (WebCore::GraphicsContext3D::getContextAttributes):
        (WebCore::GraphicsContext3D::getError):
        (WebCore::GraphicsContext3D::getFloatv):
        (WebCore::GraphicsContext3D::getFramebufferAttachmentParameteriv):
        (WebCore::GraphicsContext3D::getIntegerv):
        (WebCore::GraphicsContext3D::getProgramiv):
        (WebCore::GraphicsContext3D::getProgramInfoLog):
        (WebCore::GraphicsContext3D::getRenderbufferParameteriv):
        (WebCore::GraphicsContext3D::getShaderiv):
        (WebCore::GraphicsContext3D::getShaderInfoLog):
        (WebCore::GraphicsContext3D::getShaderSource):
        (WebCore::GraphicsContext3D::getString):
        (WebCore::GraphicsContext3D::getTexParameterfv):
        (WebCore::GraphicsContext3D::getTexParameteriv):
        (WebCore::GraphicsContext3D::getUniformfv):
        (WebCore::GraphicsContext3D::getUniformiv):
        (WebCore::GraphicsContext3D::getUniformLocation):
        (WebCore::GraphicsContext3D::getVertexAttribfv):
        (WebCore::GraphicsContext3D::getVertexAttribiv):
        (WebCore::GraphicsContext3D::getVertexAttribOffset):
        (WebCore::GraphicsContext3D::hint):
        (WebCore::GraphicsContext3D::isBuffer):
        (WebCore::GraphicsContext3D::isEnabled):
        (WebCore::GraphicsContext3D::isFramebuffer):
        (WebCore::GraphicsContext3D::isProgram):
        (WebCore::GraphicsContext3D::isRenderbuffer):
        (WebCore::GraphicsContext3D::isShader):
        (WebCore::GraphicsContext3D::isTexture):
        (WebCore::GraphicsContext3D::lineWidth):
        (WebCore::GraphicsContext3D::linkProgram):
        (WebCore::GraphicsContext3D::pixelStorei):
        (WebCore::GraphicsContext3D::polygonOffset):
        (WebCore::GraphicsContext3D::readPixels):
        (WebCore::GraphicsContext3D::releaseShaderCompiler):
        (WebCore::GraphicsContext3D::renderbufferStorage):
        (WebCore::GraphicsContext3D::sampleCoverage):
        (WebCore::GraphicsContext3D::scissor):
        (WebCore::GraphicsContext3D::shaderSource):
        (WebCore::GraphicsContext3D::stencilFunc):
        (WebCore::GraphicsContext3D::stencilFuncSeparate):
        (WebCore::GraphicsContext3D::stencilMask):
        (WebCore::GraphicsContext3D::stencilMaskSeparate):
        (WebCore::GraphicsContext3D::stencilOp):
        (WebCore::GraphicsContext3D::stencilOpSeparate):
        (WebCore::GraphicsContext3D::texImage2D):
        (WebCore::GraphicsContext3D::texParameterf):
        (WebCore::GraphicsContext3D::texParameteri):
        (WebCore::GraphicsContext3D::texSubImage2D):
        (WebCore::GraphicsContext3D::uniform1f):
        (WebCore::GraphicsContext3D::uniform1fv):
        (WebCore::GraphicsContext3D::uniform1i):
        (WebCore::GraphicsContext3D::uniform1iv):
        (WebCore::GraphicsContext3D::uniform2f):
        (WebCore::GraphicsContext3D::uniform2fv):
        (WebCore::GraphicsContext3D::uniform2i):
        (WebCore::GraphicsContext3D::uniform2iv):
        (WebCore::GraphicsContext3D::uniform3f):
        (WebCore::GraphicsContext3D::uniform3fv):
        (WebCore::GraphicsContext3D::uniform3i):
        (WebCore::GraphicsContext3D::uniform3iv):
        (WebCore::GraphicsContext3D::uniform4f):
        (WebCore::GraphicsContext3D::uniform4fv):
        (WebCore::GraphicsContext3D::uniform4i):
        (WebCore::GraphicsContext3D::uniform4iv):
        (WebCore::GraphicsContext3D::uniformMatrix2fv):
        (WebCore::GraphicsContext3D::uniformMatrix3fv):
        (WebCore::GraphicsContext3D::uniformMatrix4fv):
        (WebCore::GraphicsContext3D::useProgram):
        (WebCore::GraphicsContext3D::validateProgram):
        (WebCore::GraphicsContext3D::vertexAttrib1f):
        (WebCore::GraphicsContext3D::vertexAttrib1fv):
        (WebCore::GraphicsContext3D::vertexAttrib2f):
        (WebCore::GraphicsContext3D::vertexAttrib2fv):
        (WebCore::GraphicsContext3D::vertexAttrib3f):
        (WebCore::GraphicsContext3D::vertexAttrib3fv):
        (WebCore::GraphicsContext3D::vertexAttrib4f):
        (WebCore::GraphicsContext3D::vertexAttrib4fv):
        (WebCore::GraphicsContext3D::vertexAttribPointer):
        (WebCore::GraphicsContext3D::viewport):
        (WebCore::GraphicsContext3D::reshape):
        (WebCore::GraphicsContext3D::markContextChanged):
        (WebCore::GraphicsContext3D::markLayerComposited):
        (WebCore::GraphicsContext3D::layerComposited):
        (WebCore::GraphicsContext3D::paintRenderingResultsToCanvas):
        (WebCore::GraphicsContext3D::paintRenderingResultsToImageData):
        (WebCore::GraphicsContext3D::paintCompositedResultsToCanvas):
        (WebCore::GraphicsContext3D::createBuffer):
        (WebCore::GraphicsContext3D::createFramebuffer):
        (WebCore::GraphicsContext3D::createProgram):
        (WebCore::GraphicsContext3D::createRenderbuffer):
        (WebCore::GraphicsContext3D::createShader):
        (WebCore::GraphicsContext3D::createTexture):
        (WebCore::GraphicsContext3D::deleteBuffer):
        (WebCore::GraphicsContext3D::deleteFramebuffer):
        (WebCore::GraphicsContext3D::deleteProgram):
        (WebCore::GraphicsContext3D::deleteRenderbuffer):
        (WebCore::GraphicsContext3D::deleteShader):
        (WebCore::GraphicsContext3D::deleteTexture):
        (WebCore::GraphicsContext3D::synthesizeGLError):
        (WebCore::GraphicsContext3D::getExtensions):
        (WebCore::GraphicsContext3D::getInternalFramebufferSize):
        (WebCore::GraphicsContext3D::setContextLostCallback):
        (WebCore::GraphicsContext3D::getImageData):
        (WebCore::GraphicsContext3D::validateAttributes):
        (WebCore::GraphicsContext3D::readRenderingResults):
        (WebCore::GraphicsContext3D::reshapeFBOs):
        (WebCore::GraphicsContext3D::resolveMultisamplingIfNecessary):
        (WebCore::GraphicsContext3D::isResourceSafe):

2012-02-26  James Robinson  <jamesr@chromium.org>

        [chromium] Wire up shouldUpdateScrollPositionOnMainThread and nonFastScrollableRegion to compositor
        https://bugs.webkit.org/show_bug.cgi?id=79155

        Reviewed by Adam Barth.

        This hooks up ScrollingCoordinator::setNonFastScrollableRegion() and
        ScrollingCoordinator::setShouldUpdateScrollLayerPositionOnMainThread() to the chromium compositor
        implementation and implements them on the impl thread.

        New compositor behavior is covered by unit tests in LayerChromiumTests and CCLayerTreeHostImplTests. The rest is
        just glue code.

        * page/scrolling/chromium/ScrollingCoordinatorChromium.cpp:
        (WebCore::ScrollingCoordinator::setNonFastScrollableRegion):
        (WebCore::ScrollingCoordinator::setShouldUpdateScrollLayerPositionOnMainThread):
        * platform/graphics/chromium/LayerChromium.cpp:
        (WebCore::LayerChromium::LayerChromium):
        (WebCore::LayerChromium::setShouldScrollOnMainThread):
        (WebCore):
        (WebCore::LayerChromium::setNonFastScrollableRegion):
        (WebCore::LayerChromium::pushPropertiesTo):
        * platform/graphics/chromium/LayerChromium.h:
        (WebCore):
        (LayerChromium):
        * platform/graphics/chromium/cc/CCLayerImpl.cpp:
        (WebCore::CCLayerImpl::CCLayerImpl):
        * platform/graphics/chromium/cc/CCLayerImpl.h:
        (WebCore::CCLayerImpl::shouldScrollOnMainThread):
        (WebCore::CCLayerImpl::setShouldScrollOnMainThread):
        (CCLayerImpl):
        (WebCore::CCLayerImpl::nonFastScrollableRegion):
        (WebCore::CCLayerImpl::setNonFastScrollableRegion):
        * platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:
        (WebCore::CCLayerTreeHostImpl::scrollBegin):

2012-02-26  Kentaro Hara  <haraken@chromium.org>

        Unreviewed. Rebaselined run-bindings-tests results.

        * bindings/scripts/test/GObject/WebKitDOMTestInterface.cpp:
        (webkit_dom_test_interface_supplemental_method4):

2012-02-26  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r108547.
        http://trac.webkit.org/changeset/108547
        https://bugs.webkit.org/show_bug.cgi?id=79606

        Crashes on ClusterFuzz (Requested by inferno-sec on #webkit).

        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::layoutInlineChildren):

2012-02-25  Adam Barth  <abarth@webkit.org>

        Move websockets to Modules/websockets
        https://bugs.webkit.org/show_bug.cgi?id=79598

        Reviewed by Eric Seidel.

        Nowadays, the only ENABLE(WEB_SOCKETS) ifdef in WebCore proper is in
        WebCore::Settings, and that will be removed (soon?) once Apple drops
        support for the old WebSockets protocol.

        * CMakeLists.txt:
        * DerivedSources.make:
        * DerivedSources.pri:
        * GNUmakefile.am:
        * GNUmakefile.list.am:
        * Modules/websockets: Copied from Source/WebCore/websockets.
        * Target.pri:
        * WebCore.gyp/WebCore.gyp:
        * WebCore.gypi:
        * WebCore.pri:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.vcproj/WebCoreCommon.vsprops:
        * WebCore.vcproj/copyForwardingHeaders.cmd:
        * WebCore.xcodeproj/project.pbxproj:
        * websockets: Removed.
        * websockets/CloseEvent.h: Removed.
        * websockets/CloseEvent.idl: Removed.
        * websockets/DOMWindowWebSocket.idl: Removed.
        * websockets/ThreadableWebSocketChannel.cpp: Removed.
        * websockets/ThreadableWebSocketChannel.h: Removed.
        * websockets/ThreadableWebSocketChannelClientWrapper.cpp: Removed.
        * websockets/ThreadableWebSocketChannelClientWrapper.h: Removed.
        * websockets/WebSocket.cpp: Removed.
        * websockets/WebSocket.h: Removed.
        * websockets/WebSocket.idl: Removed.
        * websockets/WebSocketChannel.cpp: Removed.
        * websockets/WebSocketChannel.h: Removed.
        * websockets/WebSocketChannelClient.h: Removed.
        * websockets/WebSocketDeflater.cpp: Removed.
        * websockets/WebSocketDeflater.h: Removed.
        * websockets/WebSocketExtensionDispatcher.cpp: Removed.
        * websockets/WebSocketExtensionDispatcher.h: Removed.
        * websockets/WebSocketExtensionProcessor.h: Removed.
        * websockets/WebSocketFrame.h: Removed.
        * websockets/WebSocketHandshake.cpp: Removed.
        * websockets/WebSocketHandshake.h: Removed.
        * websockets/WebSocketHandshakeRequest.cpp: Removed.
        * websockets/WebSocketHandshakeRequest.h: Removed.
        * websockets/WebSocketHandshakeResponse.cpp: Removed.
        * websockets/WebSocketHandshakeResponse.h: Removed.
        * websockets/WorkerThreadableWebSocketChannel.cpp: Removed.
        * websockets/WorkerThreadableWebSocketChannel.h: Removed.

2012-02-25  Benjamin Poulain  <benjamin@webkit.org>

        Get rid of KURL::deprecatedString()
        https://bugs.webkit.org/show_bug.cgi?id=79594

        Reviewed by Andreas Kling.

        The method KURL::deprecatedString() is unused, remove it from WebCore.

        The last reference to the method was removed in r96779.

        * platform/KURL.cpp:
        (WebCore):
        * platform/KURL.h:
        (KURL):
        * platform/KURLGoogle.cpp:
        (WebCore):
        * platform/KURLWTFURL.cpp:
        (WebCore):

2012-02-25  Benjamin Poulain  <benjamin@webkit.org>

        Get rid of copyParsedQueryTo()
        https://bugs.webkit.org/show_bug.cgi?id=79590

        Reviewed by Andreas Kling.

        The function KURL::copyParsedQueryTo() is unused. Remove it from WebCore.

        The function was used by HTMLAnchorElement::getParameter() but that feature
        was removed in r100164.

        * WebCore.order:
        * platform/KURL.cpp:
        (WebCore):
        * platform/KURL.h:
        (WebCore):
        (KURL):
        * platform/KURLGoogle.cpp:
        (WebCore):
        * platform/KURLWTFURL.cpp:
        (WebCore):

2012-02-25  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r108924.
        http://trac.webkit.org/changeset/108924
        https://bugs.webkit.org/show_bug.cgi?id=79597

        broke 4 inspector tests (Requested by kling on #webkit).

        * dom/StyledElement.cpp:
        (WebCore::StyledElement::parseAttribute):

2012-02-25  Adam Barth  <abarth@webkit.org>

        Fix typo in comment.  This #endif is for a different ENABLE macro.

        * page/NavigatorRegisterProtocolHandler.cpp:

2012-02-25  Anders Carlsson  <andersca@apple.com>

        Move an ASSERT to avoid it firing due to a race condition
        https://bugs.webkit.org/show_bug.cgi?id=79596

        Reviewed by Andreas Kling.

        ScrollingThread::isCurrentThread() can return false if called too early.
        Move it into ScrollingThread::initializeRunLoop where we know that the thread has
        been set up correctly.

        * page/scrolling/ScrollingThread.cpp:
        (WebCore::ScrollingThread::threadBody):
        * page/scrolling/mac/ScrollingThreadMac.mm:
        (WebCore::ScrollingThread::initializeRunLoop):

2012-02-25  Andreas Kling  <awesomekling@apple.com>

        Setting style="" should destroy the element's inline style.
        <http://webkit.org/b/79595>

        Reviewed by Anders Carlsson.

        There's no reason for an element with style="" to have an inline style object.
        Remove the inline style in that case, just like we do when removing the style
        attribute altogether.

        * dom/StyledElement.cpp:
        (WebCore::StyledElement::parseAttribute):

2012-02-25  Andreas Kling  <awesomekling@apple.com>

        Allow matched property cache for elements with additional attribute style.
        <http://webkit.org/b/79583>

        Reviewed by Antti Koivisto.

        There's no reason to disallow the matched style property cache for elements
        that return something from additionalAttributeStyle(). The only requirement
        for a property set to be cached is that it either doesn't mutate OR that it
        invalidates the document's CSSStyleSelector when doing so.

        This allows some more match caching for table-related elements, though we
        are still held back by explicitly 'inherited' properties in html.css.

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

2012-02-25  Julien Chaffraix  <jchaffraix@webkit.org>

        Clean-up RenderTableSection::calcRowLogicalHeight
        https://bugs.webkit.org/show_bug.cgi?id=77705

        Reviewed by Nikolas Zimmermann.

        Refactoring / simplication of the code.

        This change removes some variables that were unneeded and were
        hiding what the code was really doing. Also some of the code was
        split and moved down to RenderTableCell.

        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::logicalHeightForRowSizing):
        * rendering/RenderTableCell.h:
        (RenderTableCell):
        Added the previous helper function to calculate the cell's
        adjusted logical height.

        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::calcRowLogicalHeight):
        Removed some variables, simplified the rowspan logic to be clearer
        (and added a comment about how we handle rowspans).

2012-02-25  Benjamin Poulain  <benjamin@webkit.org>

        Add an empty skeleton of KURL for WTFURL
        https://bugs.webkit.org/show_bug.cgi?id=78990

        Reviewed by Adam Barth.

        Add an empty skeleton of KURL based on WTFURL.

        With WTFURL, the data of KURL is in an implicitely shared object
        named KURLWTFURLImpl.

        In KURLWTFURLImpl, KURL created with invalid URL would be stored
        as a String. A valid URL would be stored as a ParsedURL.

        * ForwardingHeaders/wtf/url/ParsedURL.h: Added.
        * WebCore.exp.in:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/KURL.cpp:
        (WebCore):
        * platform/KURL.h:
        (KURL):
        (WebCore::KURL::KURL):
        (WebCore::KURL::isHashTableDeletedValue):
        (WebCore):
        * platform/KURLWTFURL.cpp: Added.
        (WebCore):
        (WebCore::KURL::KURL):
        (WebCore::KURL::copy):
        (WebCore::KURL::isNull):
        (WebCore::KURL::isEmpty):
        (WebCore::KURL::isValid):
        (WebCore::KURL::hasPath):
        (WebCore::KURL::string):
        (WebCore::KURL::protocol):
        (WebCore::KURL::host):
        (WebCore::KURL::port):
        (WebCore::KURL::hasPort):
        (WebCore::KURL::user):
        (WebCore::KURL::pass):
        (WebCore::KURL::path):
        (WebCore::KURL::lastPathComponent):
        (WebCore::KURL::query):
        (WebCore::KURL::fragmentIdentifier):
        (WebCore::KURL::hasFragmentIdentifier):
        (WebCore::KURL::copyParsedQueryTo):
        (WebCore::KURL::baseAsString):
        (WebCore::KURL::deprecatedString):
        (WebCore::KURL::fileSystemPath):
        (WebCore::KURL::protocolIs):
        (WebCore::KURL::protocolIsInHTTPFamily):
        (WebCore::KURL::setProtocol):
        (WebCore::KURL::setHost):
        (WebCore::KURL::removePort):
        (WebCore::KURL::setPort):
        (WebCore::KURL::setHostAndPort):
        (WebCore::KURL::setUser):
        (WebCore::KURL::setPass):
        (WebCore::KURL::setPath):
        (WebCore::KURL::setQuery):
        (WebCore::KURL::setFragmentIdentifier):
        (WebCore::KURL::removeFragmentIdentifier):
        (WebCore::KURL::hostStart):
        (WebCore::KURL::hostEnd):
        (WebCore::KURL::pathStart):
        (WebCore::KURL::pathEnd):
        (WebCore::KURL::pathAfterLastSlash):
        (WebCore::KURL::invalidate):
        (WebCore::KURL::isHierarchical):
        (WebCore::protocolIs):
        (WebCore::equalIgnoringFragmentIdentifier):
        (WebCore::protocolHostAndPortAreEqual):
        (WebCore::encodeWithURLEscapeSequences):
        (WebCore::decodeURLEscapeSequences):
        * platform/KURLWTFURLImpl.h: Copied from Source/WebCore/platform/mac/KURLMac.mm.
        (WebCore):
        (KURLWTFURLImpl):
        * platform/cf/KURLCFNet.cpp:
        (WebCore):
        (WebCore::KURL::KURL):
        (WebCore::KURL::createCFURL):
        * platform/mac/KURLMac.mm:
        (WebCore):
        (WebCore::KURL::KURL):
        (WebCore::KURL::operator NSURL *):

2012-02-25  Anders Carlsson  <andersca@apple.com>

        Make the libc++ workaround more targeted
        https://bugs.webkit.org/show_bug.cgi?id=79578
        <rdar://problem/10933150>

        Reviewed by Sam Weinig.

        Change the std::move implementation to take a WebCore::TimerHeapReference directly so 
        WebCore still builds with a version of libc++ that has the right std::move function template.

        * WebCorePrefix.h:
        (WebCore):
        (move):

2012-02-25  Andreas Kling  <awesomekling@apple.com>

        Remove HTMLEmbedElement::insertedIntoDocument().
        <http://webkit.org/b/79576>

        Reviewed by Anders Carlsson.

        * html/HTMLEmbedElement.cpp:
        * html/HTMLEmbedElement.h:

2012-02-25  Adrienne Walker  <enne@google.com>

        Fix unused variable warnings in HarfBuzzShaperBase
        https://bugs.webkit.org/show_bug.cgi?id=79575

        Reviewed by Andreas Kling.

        In builds where asserts are not enabled, the error variable is unused.

        * platform/graphics/harfbuzz/HarfBuzzShaperBase.cpp:
        (WebCore::normalizeSpacesAndMirrorChars):

2012-02-25  Andreas Kling  <awesomekling@apple.com>

        Remove HTMLTableElement::attach().
        <http://webkit.org/b/79574>

        Reviewed by Anders Carlsson.

        Remove this attach() override since it was only used to assert that
        we're not already attached, and this is already done by Node::attach().

        * html/HTMLTableElement.cpp:
        * html/HTMLTableElement.h:

2012-02-25  Andreas Kling  <awesomekling@apple.com>

        HTMLTableElement: Avoid CSSParser in createSharedCellStyle().
        <http://webkit.org/b/79573>

        Reviewed by Anders Carlsson.

        * html/HTMLTableElement.cpp:
        (WebCore::HTMLTableElement::createSharedCellStyle):

2012-02-25  Nikolas Zimmermann  <nzimmermann@rim.com>

        Unreviewed, rolling out r108557.
        http://trac.webkit.org/changeset/108557
        https://bugs.webkit.org/show_bug.cgi?id=77705

        Broke svg/zoom/page/zoom-replated-intrinsic-ratio-001.htm.

        * rendering/RenderTableCell.cpp:
        * rendering/RenderTableCell.h:
        (RenderTableCell):
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::calcRowLogicalHeight):

2012-02-25  Andreas Kling  <awesomekling@apple.com>

        HTMLParamElement: Clean up name/value attribute handling.
        <http://webkit.org/b/79559>

        Reviewed by Anders Carlsson.

        Out-of-line name() and value(), and move the logic from parseAttribute()
        into them instead. This makes the class a bit simpler and shrinks it by
        two AtomicStrings. Also reduced isURLAttribute() to a two-liner.

        * html/HTMLParamElement.cpp:
        (WebCore::HTMLParamElement::name):
        (WebCore::HTMLParamElement::value):
        (WebCore::HTMLParamElement::isURLAttribute):
        * html/HTMLParamElement.h:

2012-02-24  Tien-Ren Chen  <trchen@chromium.org>

        [chromium] Replace RefPtr with OwnPtr for CCLayerImpl tree structure
        https://bugs.webkit.org/show_bug.cgi?id=78404

        Reviewed by James Robinson.

        No new tests. Updated existing test to reflect changes.

        * platform/graphics/chromium/CanvasLayerChromium.cpp:
        (WebCore::CanvasLayerChromium::createCCLayerImpl):
        * platform/graphics/chromium/CanvasLayerChromium.h:
        (CanvasLayerChromium):
        * platform/graphics/chromium/LayerChromium.cpp:
        (WebCore::LayerChromium::createCCLayerImpl):
        * platform/graphics/chromium/LayerChromium.h:
        (LayerChromium):
        * platform/graphics/chromium/PluginLayerChromium.cpp:
        (WebCore::PluginLayerChromium::createCCLayerImpl):
        * platform/graphics/chromium/PluginLayerChromium.h:
        (PluginLayerChromium):
        * platform/graphics/chromium/SolidColorLayerChromium.cpp:
        (WebCore::SolidColorLayerChromium::createCCLayerImpl):
        * platform/graphics/chromium/SolidColorLayerChromium.h:
        (SolidColorLayerChromium):
        * platform/graphics/chromium/TiledLayerChromium.cpp:
        (WebCore::TiledLayerChromium::createCCLayerImpl):
        * platform/graphics/chromium/TiledLayerChromium.h:
        (TiledLayerChromium):
        * platform/graphics/chromium/TreeSynchronizer.cpp:
        (WebCore::TreeSynchronizer::synchronizeTrees):
        (WebCore::TreeSynchronizer::collectExistingCCLayerImplRecursive):
        (WebCore):
        (WebCore::TreeSynchronizer::reuseOrCreateCCLayerImpl):
        (WebCore::TreeSynchronizer::synchronizeTreeRecursive):
        * platform/graphics/chromium/TreeSynchronizer.h:
        (TreeSynchronizer):
        * platform/graphics/chromium/VideoLayerChromium.cpp:
        (WebCore::VideoLayerChromium::createCCLayerImpl):
        * platform/graphics/chromium/VideoLayerChromium.h:
        (VideoLayerChromium):
        * platform/graphics/chromium/cc/CCCanvasLayerImpl.h:
        (WebCore::CCCanvasLayerImpl::create):
        * platform/graphics/chromium/cc/CCDamageTracker.cpp:
        (WebCore::CCDamageTracker::updateDamageTrackingState):
        (WebCore::CCDamageTracker::trackDamageFromActiveLayers):
        * platform/graphics/chromium/cc/CCDamageTracker.h:
        (CCDamageTracker):
        * platform/graphics/chromium/cc/CCLayerImpl.cpp:
        (WebCore::CCLayerImpl::CCLayerImpl):
        (WebCore::CCLayerImpl::addChild):
        (WebCore::sortLayers):
        (WebCore::CCLayerImpl::setMaskLayer):
        (WebCore::CCLayerImpl::setReplicaLayer):
        * platform/graphics/chromium/cc/CCLayerImpl.h:
        (WebCore::CCLayerImpl::create):
        (WebCore::CCLayerImpl::children):
        (CCLayerImpl):
        (WebCore):
        * platform/graphics/chromium/cc/CCLayerIterator.cpp:
        (WebCore):
        (WebCore::CCLayerIteratorActions::BackToFront::begin):
        (WebCore::CCLayerIteratorActions::BackToFront::end):
        (WebCore::CCLayerIteratorActions::BackToFront::next):
        (WebCore::CCLayerIteratorActions::FrontToBack::begin):
        (WebCore::CCLayerIteratorActions::FrontToBack::end):
        (WebCore::CCLayerIteratorActions::FrontToBack::next):
        (WebCore::CCLayerIteratorActions::FrontToBack::goToHighestInSubtree):
        * platform/graphics/chromium/cc/CCLayerIterator.h:
        (WebCore):
        (CCLayerIterator):
        (WebCore::CCLayerIterator::begin):
        (WebCore::CCLayerIterator::end):
        (WebCore::CCLayerIterator::targetRenderSurfaceLayer):
        (WebCore::CCLayerIterator::CCLayerIterator):
        (WebCore::CCLayerIterator::getRawPtr):
        (WebCore::CCLayerIterator::currentLayer):
        (WebCore::CCLayerIterator::targetRenderSurfaceChildren):
        (BackToFront):
        (FrontToBack):
        * platform/graphics/chromium/cc/CCLayerSorter.cpp:
        (WebCore::CCLayerSorter::createGraphNodes):
        * platform/graphics/chromium/cc/CCLayerSorter.h:
        (CCLayerSorter):
        * platform/graphics/chromium/cc/CCLayerTreeHost.cpp:
        (WebCore::CCLayerTreeHost::finishCommitOnImplThread):
        (WebCore::CCLayerTreeHost::didBecomeInvisibleOnImplThread):
        (WebCore::CCLayerTreeHost::reserveTextures):
        (WebCore::CCLayerTreeHost::paintLayerContents):
        (WebCore::CCLayerTreeHost::updateCompositorResources):
        * platform/graphics/chromium/cc/CCLayerTreeHostCommon.cpp:
        (WebCore):
        (WebCore::calculateDrawTransformsAndVisibilityInternal):
        (WebCore::walkLayersAndCalculateVisibleLayerRects):
        (WebCore::CCLayerTreeHostCommon::calculateDrawTransformsAndVisibility):
        * platform/graphics/chromium/cc/CCLayerTreeHostCommon.h:
        (CCLayerTreeHostCommon):
        * platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:
        (WebCore::CCLayerTreeHostImpl::CCLayerTreeHostImpl):
        (WebCore::CCLayerTreeHostImpl::trackDamageForAllSurfaces):
        (WebCore::CCLayerTreeHostImpl::calculateRenderPasses):
        (WebCore::CCLayerTreeHostImpl::drawLayers):
        (WebCore::CCLayerTreeHostImpl::setRootLayer):
        * platform/graphics/chromium/cc/CCLayerTreeHostImpl.h:
        (CCLayerTreeHostImpl):
        (WebCore::CCLayerTreeHostImpl::releaseRootLayer):
        (WebCore::CCLayerTreeHostImpl::scrollLayer):
        * platform/graphics/chromium/cc/CCPluginLayerImpl.h:
        (WebCore::CCPluginLayerImpl::create):
        * platform/graphics/chromium/cc/CCRenderSurface.h:
        (WebCore::CCRenderSurface::layerList):
        (CCRenderSurface):
        * platform/graphics/chromium/cc/CCSolidColorLayerImpl.h:
        (WebCore::CCSolidColorLayerImpl::create):
        * platform/graphics/chromium/cc/CCTiledLayerImpl.h:
        (WebCore::CCTiledLayerImpl::create):
        * platform/graphics/chromium/cc/CCVideoLayerImpl.h:
        (WebCore::CCVideoLayerImpl::create):

2012-02-24  Andreas Kling  <awesomekling@apple.com>

        Don't pass constant strings to CSSParser for presentation attributes.
        <http://webkit.org/b/79530>

        Reviewed by Anders Carlsson.

        "both" -> CSSValueBoth.
        "center" -> CSSValueCenter.

        * html/HTMLBRElement.cpp:
        (WebCore::HTMLBRElement::collectStyleForAttribute):
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::collectStyleForAttribute):

2012-02-24  Yael Aharon  <yael.aharon@nokia.com>

        [Texmap] Add const-ness to TextureMapperShaderManager
        https://bugs.webkit.org/show_bug.cgi?id=79545

        Reviewed by Noam Rosenthal.
        
        Add const to new methods.
        No new tests.

        * platform/graphics/texmap/TextureMapperShaderManager.cpp:
        (WebCore::TextureMapperShaderProgramSimple::vertexShaderSource):
        (WebCore::TextureMapperShaderProgramSimple::fragmentShaderSource):
        (WebCore::TextureMapperShaderProgramOpacityAndMask::vertexShaderSource):
        (WebCore::TextureMapperShaderProgramOpacityAndMask::fragmentShaderSource):
        * platform/graphics/texmap/TextureMapperShaderManager.h:
        (WebCore::TextureMapperShaderProgram::matrixVariable):
        (WebCore::TextureMapperShaderProgram::sourceMatrixVariable):
        (WebCore::TextureMapperShaderProgram::sourceTextureVariable):
        (WebCore::TextureMapperShaderProgram::opacityVariable):
        (TextureMapperShaderProgram):
        (TextureMapperShaderProgramSimple):
        (WebCore::TextureMapperShaderProgramOpacityAndMask::maskMatrixVariable):
        (WebCore::TextureMapperShaderProgramOpacityAndMask::maskTextureVariable):
        (TextureMapperShaderProgramOpacityAndMask):

2012-02-24  Tom Sepez  <tsepez@chromium.org>

        XSS Auditor targeting legitimate frames as false positives.
        https://bugs.webkit.org/show_bug.cgi?id=79397

        Reviewed by Adam Barth.

        Test: http/tests/security/xssAuditor/script-tag-safe4.html

        * html/parser/XSSAuditor.cpp:
        (WebCore::XSSAuditor::filterCharacterToken):
        (WebCore::XSSAuditor::filterScriptToken):
        (WebCore::XSSAuditor::filterObjectToken):
        (WebCore::XSSAuditor::filterEmbedToken):
        (WebCore::XSSAuditor::filterAppletToken):
        (WebCore::XSSAuditor::filterIframeToken):
        (WebCore::XSSAuditor::decodedSnippetForToken):
        (WebCore):
        (WebCore::XSSAuditor::decodedSnippetForName):
        (WebCore::XSSAuditor::decodedSnippetForAttribute):
        (WebCore::XSSAuditor::decodedSnippetForJavascript):
        (WebCore::XSSAuditor::isContainedInRequest):
        (WebCore::XSSAuditor::isSameOriginResource):
        * html/parser/XSSAuditor.h:

2012-02-24  Ian Vollick  <vollick@chromium.org>

        [chromium] Plumb animation started notifications from CCLayerTreeHost to GraphicsLayerChromium
        https://bugs.webkit.org/show_bug.cgi?id=77646

        Reviewed by James Robinson.

        * WebCore.gypi:
        * platform/graphics/chromium/GraphicsLayerChromium.cpp:
        (std):
        (WebCore::GraphicsLayerChromium::~GraphicsLayerChromium):
        (WebCore::GraphicsLayerChromium::addAnimation):
        (WebCore::GraphicsLayerChromium::pauseAnimation):
        (WebCore::GraphicsLayerChromium::removeAnimation):
        (WebCore::GraphicsLayerChromium::suspendAnimations):
        (WebCore::GraphicsLayerChromium::resumeAnimations):
        (WebCore::GraphicsLayerChromium::updateLayerPreserves3D):
        (WebCore::GraphicsLayerChromium::mapAnimationNameToId):
        (WebCore):
        (WebCore::GraphicsLayerChromium::notifyAnimationStarted):
        (WebCore::GraphicsLayerChromium::notifyAnimationFinished):
        * platform/graphics/chromium/GraphicsLayerChromium.h:
        (GraphicsLayerChromium):
        * platform/graphics/chromium/LayerChromium.cpp:
        (WebCore::LayerChromium::LayerChromium):
        (WebCore::LayerChromium::setAnimationEvent):
        (WebCore):
        * platform/graphics/chromium/LayerChromium.h:
        (WebCore):
        (LayerChromium):
        (WebCore::LayerChromium::setLayerAnimationDelegate):
        * platform/graphics/chromium/cc/CCAnimationEvents.cpp: Added.
        (WebCore):
        (WebCore::CCAnimationEvent::CCAnimationEvent):
        (WebCore::CCAnimationEvent::~CCAnimationEvent):
        (WebCore::CCAnimationEvent::toAnimationStartedEvent):
        (WebCore::CCAnimationEvent::toAnimationFinishedEvent):
        (WebCore::CCAnimationStartedEvent::create):
        (WebCore::CCAnimationStartedEvent::CCAnimationStartedEvent):
        (WebCore::CCAnimationStartedEvent::~CCAnimationStartedEvent):
        (WebCore::CCAnimationStartedEvent::type):
        (WebCore::CCAnimationFinishedEvent::create):
        (WebCore::CCAnimationFinishedEvent::CCAnimationFinishedEvent):
        (WebCore::CCAnimationFinishedEvent::~CCAnimationFinishedEvent):
        (WebCore::CCAnimationFinishedEvent::type):
        * platform/graphics/chromium/cc/CCAnimationEvents.h:
        (WebCore):
        (CCAnimationEvent):
        (WebCore::CCAnimationEvent::layerId):
        (CCAnimationStartedEvent):
        (WebCore::CCAnimationStartedEvent::startTime):
        (CCAnimationFinishedEvent):
        (WebCore::CCAnimationFinishedEvent::animationId):
        * platform/graphics/chromium/cc/CCLayerAnimationControllerImpl.cpp:
        (WebCore::CCLayerAnimationControllerImpl::animate):
        (WebCore::CCLayerAnimationControllerImpl::startAnimationsWaitingForNextTick):
        (WebCore::CCLayerAnimationControllerImpl::startAnimationsWaitingForStartTime):
        (WebCore::CCLayerAnimationControllerImpl::startAnimationsWaitingForTargetAvailability):
        (WebCore::CCLayerAnimationControllerImpl::purgeFinishedAnimations):
        (WebCore::CCLayerAnimationControllerImpl::tickAnimations):
        * platform/graphics/chromium/cc/CCLayerAnimationControllerImpl.h:
        (CCLayerAnimationControllerImpl):
        * platform/graphics/chromium/cc/CCLayerAnimationDelegate.h: Copied from Source/WebCore/platform/graphics/chromium/cc/CCAnimationEvents.h.
        (WebCore):
        (CCLayerAnimationDelegate):
        * platform/graphics/chromium/cc/CCLayerTreeHost.cpp:
        (WebCore::CCLayerTreeHost::setAnimationEvents):
        (WebCore::CCLayerTreeHost::setAnimationEventsRecursive):
        (WebCore):
        * platform/graphics/chromium/cc/CCLayerTreeHost.h:

2012-02-24  Abhishek Arya  <inferno@chromium.org>

        Regression(r107477): Crash in StaticNodeList::itemWithName.
        https://bugs.webkit.org/show_bug.cgi?id=79532

        Reviewed by Andreas Kling.

        Make sure that node is an element node before checking its id attribute.

        Test: fast/mutation/mutation-callback-non-element-crash.html

        * dom/StaticNodeList.cpp:
        (WebCore::StaticNodeList::itemWithName):

2012-02-24  Tony Chang  <tony@chromium.org>

        More refactoring in RenderFlexibleBox
        https://bugs.webkit.org/show_bug.cgi?id=79533

        Reviewed by Ojan Vafai.

        No new tests, just refactoring.

        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::layoutFlexItems): Move the flipping of RTL+column positions to its own method.
        This might be a tiny bit slower, but it's clearer since it's not related to alignment.
        (WebCore::RenderFlexibleBox::layoutAndPlaceChildren): Move the logical height calculation out of the loop.  We only need the final height.
        (WebCore::RenderFlexibleBox::alignChildren):
        (WebCore::RenderFlexibleBox::flipForRightToLeftColumn):
        * rendering/RenderFlexibleBox.h:
        (RenderFlexibleBox):

2012-02-24  Abhishek Arya  <inferno@chromium.org>

        Positioned objects not cleared when moving children
        to clone block in multi-column layout.
        https://bugs.webkit.org/show_bug.cgi?id=78416

        Reviewed by Eric Seidel.

        Test: fast/multicol/span/positioned-child-not-removed-crash.html

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

2012-02-24  Michael Saboff  <msaboff@apple.com>

        Unreviewed, Windows build fix.  Changed "-1" to newly
        created constant JSC::Yarr::offsetNoMatch added in r108858.

        * platform/text/RegularExpression.cpp:
        (WebCore::RegularExpression::match):

2012-02-24  Eric Carlson  <eric.carlson@apple.com>

        Update TextTrackCue API
        https://bugs.webkit.org/show_bug.cgi?id=79368

        Change TextTrackCue.alignment to .align, TextTrackCue.linePosition and .textPosition to .line
        and .position, and TextTrackCue.direction to .vertical. Change direction values "horizontal" 
        to "","vertical" to "rl", and "vertical-lr" to "lr".

        Reviewed by Eric Seidel.

        No new tests, updated existing tests for API changes.

        * html/track/TextTrackCue.cpp:
        (WebCore::horizontalKeyword):
        (WebCore::verticalGrowingLeftKeyword):
        (WebCore):
        (WebCore::verticalGrowingRightKeyword):
        (WebCore::verticalKeywordOLD):
        (WebCore::verticallrKeywordOLD):
        (WebCore::TextTrackCue::TextTrackCue):
        (WebCore::TextTrackCue::vertical):
        (WebCore::TextTrackCue::setVertical):
        (WebCore::TextTrackCue::setLine):
        (WebCore::TextTrackCue::setPosition):
        (WebCore::TextTrackCue::align):
        (WebCore::TextTrackCue::setAlign):
        (WebCore::TextTrackCue::parseSettings):
        * html/track/TextTrackCue.h:
        (TextTrackCue):
        (WebCore::TextTrackCue::line):
        (WebCore::TextTrackCue::position):
        * html/track/TextTrackCue.idl:

2012-02-24  Adrienne Walker  <enne@google.com>

        Fix uninitialized variables in HarfBuzzShaperBase
        https://bugs.webkit.org/show_bug.cgi?id=79546

        Reviewed by Dirk Pranke.

        These were introduced in r108733.

        * platform/graphics/harfbuzz/HarfBuzzShaperBase.cpp:
        (WebCore::HarfBuzzShaperBase::HarfBuzzShaperBase):

2012-02-24  Noel Gordon  <noel.gordon@gmail.com>

        [chromium] JPEG RGB image with Adode Marker fails to turbo swizzle decode
        https://bugs.webkit.org/show_bug.cgi?id=79457

        Reviewed by Adam Barth.

        If a JPEG has no JFIF marker, the Adode Marker must be used to determine the image
        color space for decoding via that markers transform value. Transform 0 images with
        3 color components (RGB) fail to decode with libjpeg-turbo when a swizzle decoding
        is active. Detect this case and decode using JCS_RGB output color space instead.

        Test: fast/images/rgb-jpeg-with-abode-marker-only.html

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

2012-02-24  Joshua Bell  <jsbell@chromium.org>

        [V8] IndexedDB: IDBTransaction objects leak in Workers
        https://bugs.webkit.org/show_bug.cgi?id=79308

        Use a V8RecursionScope whenever Workers call into script, so that
        post-script side-effects can be executed.

        Reviewed by Tony Chang.

        Test: storage/indexeddb/transaction-abort-workers.html

        * bindings/v8/ScheduledAction.cpp:
        (WebCore::ScheduledAction::execute):
        * bindings/v8/V8WorkerContextErrorHandler.cpp:
        (WebCore::V8WorkerContextErrorHandler::callListenerFunction):
        * bindings/v8/V8WorkerContextEventListener.cpp:
        (WebCore::V8WorkerContextEventListener::callListenerFunction):
        * bindings/v8/WorkerContextExecutionProxy.cpp: Replace custom recursion tracking.
        (WebCore::WorkerContextExecutionProxy::WorkerContextExecutionProxy):
        (WebCore::WorkerContextExecutionProxy::runScript):
        * bindings/v8/WorkerContextExecutionProxy.h:
        (WorkerContextExecutionProxy):

2012-02-24  Gregg Tavares  <gman@google.com>

        Limit WebGL Errors in Console to 10 per context
        https://bugs.webkit.org/show_bug.cgi?id=79387

        Reviewed by Kenneth Russell.
        
        Some apps generated enough errors to overload
        the Dev Tools so limit the number of errors.
        For a correct app there should never be any
        errors so seeing the first few should be enough
        to debug.

        No new tests as no new functionality

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore):
        (WebCore::WebGLRenderingContextErrorMessageCallback::onErrorMessage):
        (WebCore::WebGLRenderingContext::WebGLRenderingContext):
        (WebCore::WebGLRenderingContext::initializeNewContext):
        (WebCore::WebGLRenderingContext::printGLErrorToConsole):
        (WebCore::WebGLRenderingContext::synthesizeGLError):
        * html/canvas/WebGLRenderingContext.h:
        (WebGLRenderingContext):

2012-02-24  Michael Saboff  <msaboff@apple.com>

        ASSERT(position < 0) in JSC::Yarr::Interpreter::InputStream::readChecked
        https://bugs.webkit.org/show_bug.cgi?id=73728

        Reviewed by Gavin Barraclough.

        No new tests, refactored usage of JSC::Yarr interpreter.
        Should be covered by existing tests.

        Changed WebCore callers of JSC::Yarr:Interpreter::interpret() to match the
        new signature with unsigned offsets.

        * inspector/ContentSearchUtils.cpp:
        (WebCore::ContentSearchUtils::findMagicComment):
        * platform/text/RegularExpression.cpp:
        (WebCore::RegularExpression::match):

2012-02-24  Hans Muller  <hmuller@adobe.com>

        onclick is not reliable for transformed SVG elements
        https://bugs.webkit.org/show_bug.cgi?id=34714

        Reviewed by Dirk Schulze.

        Use FloatPoints in RenderSVGRoot::nodeAtPoint() when converting the incoming
        point to local coordinates.

        Test: svg/hittest/svg-small-viewbox.xhtml

        * rendering/svg/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::nodeAtPoint):

2012-02-24  Julien Chaffraix  <jchaffraix@webkit.org>

        Implement limited parsing of -webkit-grid-column and -webkit-grid-row
        https://bugs.webkit.org/show_bug.cgi?id=79151

        Reviewed by Ojan Vafai.

        Test: fast/css-grid-layout/grid-item-column-row-get-set.html

        This change implements a subset of the grammar:

        -webkit-grid-{row|column} := <integer> | 'auto'

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        Added the new files to our build systems.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::valueForGridPosition): Check that we have the right translated grammar
        (this function will be more useful once we implement more of the grammar).
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):
        Added handling for the new properties.

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):
        Allow only 'auto' or <integer>.

        * css/CSSProperty.cpp:
        (WebCore::CSSProperty::isInheritedProperty):
        grid-colum and grid-row are not inherited.

        * css/CSSPropertyNames.in:
        Added the 2 new properties.

        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::RenderStyle):
        (WebCore::RenderStyle::diff):
        * rendering/style/RenderStyle.h:
        * rendering/style/StyleGridItemData.cpp: Added.
        (WebCore::StyleGridItemData::StyleGridItemData):
        * rendering/style/StyleGridItemData.h: Added.
        (StyleGridItemData):
        (WebCore::StyleGridItemData::create):
        (WebCore::StyleGridItemData::copy):
        (WebCore::StyleGridItemData::operator==):
        (WebCore::StyleGridItemData::operator!=):
        Implemented the minimum working class.

        * rendering/style/StyleRareNonInheritedData.cpp:
        (WebCore::StyleRareNonInheritedData::StyleRareNonInheritedData):
        (WebCore::StyleRareNonInheritedData::operator==):
        * rendering/style/StyleRareNonInheritedData.h:
        (StyleRareNonInheritedData):
        Added StyleGridItemData to the class StyleRareNonInheritedData.

2012-02-24  Joshua Bell  <jsbell@chromium.org>

        IndexedDB: IDBObjectStore.count() and IDBIndex.count() should accept key argument
        https://bugs.webkit.org/show_bug.cgi?id=79422

        Reviewed by Tony Chang.

        Tests: storage/indexeddb/index-count.html
               storage/indexeddb/objectstore-count.html

        * storage/IDBIndex.cpp:
        (WebCore::IDBIndex::count):
        (WebCore):
        * storage/IDBIndex.h:
        (WebCore::IDBIndex::count):
        (IDBIndex):
        * storage/IDBIndex.idl:
        * storage/IDBObjectStore.cpp:
        (WebCore::IDBObjectStore::deleteFunction):
        (WebCore::IDBObjectStore::count):
        (WebCore):
        * storage/IDBObjectStore.h:
        (WebCore::IDBObjectStore::count):
        (IDBObjectStore):
        * storage/IDBObjectStore.idl:

2012-02-24  Adam Barth  <abarth@webkit.org>

        Move mediastream into Modules/mediastream
        https://bugs.webkit.org/show_bug.cgi?id=79517

        Reviewed by Eric Seidel.

        This patch moves the mediastream directory into Modules.  mediastream
        is a self-contained feature and is a good candidate for being a module.

        * GNUmakefile.am:
        * GNUmakefile.list.am:
        * Modules/mediastream: Copied from Source/WebCore/mediastream.
        * WebCore.gyp/WebCore.gyp:
        * WebCore.gypi:
        * mediastream: Removed.
        * mediastream/DOMWindowMediaStream.idl: Removed.
        * mediastream/LocalMediaStream.cpp: Removed.
        * mediastream/LocalMediaStream.h: Removed.
        * mediastream/LocalMediaStream.idl: Removed.
        * mediastream/MediaStream.cpp: Removed.
        * mediastream/MediaStream.h: Removed.
        * mediastream/MediaStream.idl: Removed.
        * mediastream/MediaStreamEvent.cpp: Removed.
        * mediastream/MediaStreamEvent.h: Removed.
        * mediastream/MediaStreamEvent.idl: Removed.
        * mediastream/MediaStreamList.cpp: Removed.
        * mediastream/MediaStreamList.h: Removed.
        * mediastream/MediaStreamList.idl: Removed.
        * mediastream/MediaStreamRegistry.cpp: Removed.
        * mediastream/MediaStreamRegistry.h: Removed.
        * mediastream/MediaStreamTrack.cpp: Removed.
        * mediastream/MediaStreamTrack.h: Removed.
        * mediastream/MediaStreamTrack.idl: Removed.
        * mediastream/MediaStreamTrackList.cpp: Removed.
        * mediastream/MediaStreamTrackList.h: Removed.
        * mediastream/MediaStreamTrackList.idl: Removed.
        * mediastream/NavigatorMediaStream.cpp: Removed.
        * mediastream/NavigatorMediaStream.h: Removed.
        * mediastream/NavigatorMediaStream.idl: Removed.
        * mediastream/NavigatorUserMediaError.h: Removed.
        * mediastream/NavigatorUserMediaError.idl: Removed.
        * mediastream/NavigatorUserMediaErrorCallback.h: Removed.
        * mediastream/NavigatorUserMediaErrorCallback.idl: Removed.
        * mediastream/NavigatorUserMediaSuccessCallback.h: Removed.
        * mediastream/NavigatorUserMediaSuccessCallback.idl: Removed.
        * mediastream/PeerConnection.cpp: Removed.
        * mediastream/PeerConnection.h: Removed.
        * mediastream/PeerConnection.idl: Removed.
        * mediastream/SignalingCallback.h: Removed.
        * mediastream/SignalingCallback.idl: Removed.
        * mediastream/UserMediaClient.h: Removed.
        * mediastream/UserMediaController.cpp: Removed.
        * mediastream/UserMediaController.h: Removed.
        * mediastream/UserMediaRequest.cpp: Removed.
        * mediastream/UserMediaRequest.h: Removed.

2012-02-24  Abhishek Arya  <inferno@chromium.org>

        Overhanging floats not removed from new flex box.
        https://bugs.webkit.org/show_bug.cgi?id=79522

        Reviewed by Ojan Vafai.

        Similar to r69476.

        Test: fast/flexbox/overhanging-floats-not-removed-crash.html

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

2012-02-24  Brent Fulgham  <bfulgham@webkit.org>

        [WinCairo] Compute more acurate font heights.
        https://bugs.webkit.org/show_bug.cgi?id=79524

        Reviewed by Adam Roben.

        Adjust font handling as suggested by Lynn Neir to use the proper
        xHeight value for the font, rather than the fall-back guess
        used in the current code.

        css1/text_properties/line_height.html

        * platform/graphics/win/SimpleFontDataCairoWin.cpp:
        (WebCore::SimpleFontData::platformInit): Properly initialize a
          few elements.
        (WebCore::SimpleFontData::platformWidthForGlyph): Use the Cairo
          cairo_scaled_font_text_extents call, rather than attempting
          to compute the value from ::GetGlyphOutline.

2012-02-24  Tim Horton  <timothy_horton@apple.com>

        Infinite repaint loop with SVGImageCache and deferred repaint timers
        https://bugs.webkit.org/show_bug.cgi?id=78315
        <rdar://problem/10651634>

        Reviewed by Dean Jackson.

        Only defer image redraw on a timer if we're in layout. This breaks
        the repaint loop while still preventing us from drawing inside layout.

        No new tests, as the problem only occurs in a nonstandard configuration.

        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::draw):
        (WebCore::SVGImage::frameView):
        (WebCore):
        * svg/graphics/SVGImage.h:
        (WebCore):
        * svg/graphics/SVGImageCache.cpp:
        (WebCore::SVGImageCache::imageContentChanged):
        (WebCore::SVGImageCache::redraw):
        (WebCore::SVGImageCache::redrawTimerFired):
        (WebCore):
        * svg/graphics/SVGImageCache.h:
        (SVGImageCache):

2012-02-24  Tim Horton  <timothy_horton@apple.com>

        SVG should be supported in Dashboard compatibility mode
        https://bugs.webkit.org/show_bug.cgi?id=78322
        <rdar://problem/5861278>

        Reviewed by Dean Jackson.

        Enable SVG elements inside Dashboard, more or less reverting r21418.

        Tests: http/tests/xmlhttprequest/svg-created-by-xhr-allowed-in-dashboard.html
               svg/custom/embedded-svg-allowed-in-dashboard.xml
               svg/custom/manually-parsed-embedded-svg-allowed-in-dashboard.html
               svg/custom/manually-parsed-svg-allowed-in-dashboard.html
               svg/custom/svg-allowed-in-dashboard-object.html

        * dom/DOMImplementation.cpp:
        (WebCore::DOMImplementation::createDocument):
        * dom/Document.cpp:
        (WebCore::Document::importNode):
        * dom/make_names.pl:
        (printFactoryCppFile):

2012-02-24  Min Qin  <qinmin@google.com>

        Expose a setting to exempt media playback from user gesture requirement after a user gesture is initiated on loading/playing a media
        https://bugs.webkit.org/show_bug.cgi?id=79167

        Reviewed by Adam Barth.

        Test: media/video-play-require-user-gesture.html

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::load):
        (WebCore::HTMLMediaElement::play):
        (WebCore::HTMLMediaElement::removeBehaviorsRestrictionsAfterFirstUserGesture):
        (WebCore):
        * html/HTMLMediaElement.h:
        (HTMLMediaElement):
        * testing/Internals.cpp:
        (WebCore::Internals::setMediaPlaybackRequiresUserGesture):
        (WebCore):
        * testing/Internals.h:
        (Internals):
        * testing/Internals.idl:

2012-02-24  Adam Barth  <abarth@webkit.org>

        DOMWindow*.idl should have had the same license block as DOMWindow.idl did originally
        https://bugs.webkit.org/show_bug.cgi?id=79507

        Reviewed by Alexey Proskuryakov.

        In moving pieces of DOMWindow.idl into separate files, we mistakenly
        changed some of the license blocks.  All these files should have a
        license block that matches the file that originally contained the code.

        * Modules/intents/DOMWindowIntents.idl:
        * fileapi/DOMWindowFileSystem.idl:
        * html/DOMWindowHTML.idl:
        * html/canvas/DOMWindowWebGL.idl:
        * mediastream/DOMWindowMediaStream.idl:
        * storage/DOMWindowSQLDatabase.idl:
        * svg/DOMWindowSVG.idl:
        * webaudio/DOMWindowWebAudio.idl:
        * websockets/DOMWindowWebSocket.idl:
        * workers/DOMWindowWorker.idl:
        * xml/DOMWindowXML.idl:

2012-02-24  David Kilzer  <ddkilzer@apple.com>

        Use xcrun to find compiler paths for Generate Derived Sources build phase script
        <http://webkit.org/b/79512>

        Reviewed by Mark Rowe.

        * WebCore.xcodeproj/project.pbxproj:
        (Generate Derived Sources): Use xcrun to find the path to the
        compiler since that works on both iOS and OS X.

2012-02-24  Anders Carlsson  <andersca@apple.com>

        Crash in TileCache::revalidateTiles
        https://bugs.webkit.org/show_bug.cgi?id=79510
        <rdar://problem/10928035>

        Reviewed by Sam Weinig.

        Handle the tile cache layer's PlatformCALayer going away before the
        CALayer itself has been deallocated.

        * platform/graphics/ca/mac/TileCache.mm:
        (WebCore::TileCache::revalidateTiles):

2012-02-24  Adam Klein  <adamk@chromium.org>

        Don't notify the inspector of Node insertions initiated by the parser
        https://bugs.webkit.org/show_bug.cgi?id=79388

        Reviewed by Adam Barth.

        This is part of a series of changes to make ContainerNode's
        implementation simpler and more internally consistent.

        I don't know of a way to break on parser-initiated insertions,
        and the code already doesn't notify on parser-initiated removes
        (in ContainerNode::parserRemoveChild).

        No new tests, should already be covered by
        inspector/debugger/dom-breakpoints.html.

        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::parserInsertBefore):
        (WebCore::ContainerNode::parserAddChild):

2012-02-24  Daniel Bates  <dbates@webkit.org>

        Attempt to fix the Windows and WinCE build after changeset r108809
        <http://trac.webkit.org/changeset/108809> (https://bugs.webkit.org/show_bug.cgi?id=38995)

        Substitute styleLoadEventSender() for loadEventSender() in HTMLStyleElement.cpp
        and substitute linkLoadEventSender() for loadEventSender() in HTMLLinkElement.cpp. 

        * html/HTMLLinkElement.cpp:
        (WebCore::linkLoadEventSender):
        (WebCore::HTMLLinkElement::~HTMLLinkElement):
        (WebCore::HTMLLinkElement::dispatchPendingLoadEvents):
        (WebCore::HTMLLinkElement::dispatchPendingEvent):
        (WebCore::HTMLLinkElement::notifyLoadedSheetAndAllCriticalSubresources):
        * html/HTMLStyleElement.cpp:
        (WebCore::styleLoadEventSender):
        (WebCore::HTMLStyleElement::~HTMLStyleElement):
        (WebCore::HTMLStyleElement::dispatchPendingLoadEvents):
        (WebCore::HTMLStyleElement::dispatchPendingEvent):
        (WebCore::HTMLStyleElement::notifyLoadedSheetAndAllCriticalSubresources):

2012-02-24  Peter Beverloo  <peter@chromium.org>

        [Chromium] Fix Chromium Android build by building HarfBuzzShaperBase.cpp
        https://bugs.webkit.org/show_bug.cgi?id=79497

        Reviewed by Tony Gentilcore.

        The Chromium Android build was broken by revision r108733, as the
        HarfBuzzShaperBase.cpp file also should have been included for Android.
        Fix the build by including it.

        * WebCore.gyp/WebCore.gyp:

2012-02-24  Yael Aharon  <yael.aharon@nokia.com>

        [Texmap] Consolidate the common parts of TextureMapperGL::drawTexture
        https://bugs.webkit.org/show_bug.cgi?id=79143

        Reviewed by Noam Rosenthal.

        Combine the two drawTexture methods into one, and extract the part that
        could not be combined into its own method.
        No new tests. Refactoring only.

        * platform/graphics/texmap/TextureMapperGL.cpp:
        (WebCore):
        (WebCore::TextureMapperGL::drawTexture):
        * platform/graphics/texmap/TextureMapperGL.h:
        (WebCore):
        (BitmapTextureGL):
        (WebCore::BitmapTextureGL::~BitmapTextureGL):
        (WebCore::BitmapTextureGL::id):
        (WebCore::BitmapTextureGL::relativeSize):
        (WebCore::BitmapTextureGL::setTextureMapper):
        (WebCore::BitmapTextureGL::BitmapTextureGL):
        * platform/graphics/texmap/TextureMapperShaderManager.cpp:
        (WebCore::TextureMapperShaderProgramOpacityAndMask::fragmentShaderSource):
        (WebCore):
        (WebCore::TextureMapperShaderProgramOpacityAndMask::prepare):
        * platform/graphics/texmap/TextureMapperShaderManager.h:
        (WebCore):
        (WebCore::TextureMapperShaderProgram::prepare):
        (WebCore::TextureMapperShaderProgram::matrixVariable):
        (WebCore::TextureMapperShaderProgram::sourceMatrixVariable):
        (WebCore::TextureMapperShaderProgram::sourceTextureVariable):
        (WebCore::TextureMapperShaderProgram::opacityVariable):
        (TextureMapperShaderProgram):
        (TextureMapperShaderProgramSimple):
        (TextureMapperShaderProgramOpacityAndMask):
        (WebCore::TextureMapperShaderProgramOpacityAndMask::maskMatrixVariable):
        (WebCore::TextureMapperShaderProgramOpacityAndMask::maskTextureVariable):

2012-02-24  Daniel Bates  <dbates@webkit.org>

        style element and link element for CSS stylesheet should emit load/error event when sheet loads/fails to load
        https://bugs.webkit.org/show_bug.cgi?id=38995

        Reviewed by Adam Barth and Nate Chapin.

        Tests: fast/dom/HTMLLinkElement/link-onerror-stylesheet-with-existent-and-non-existent-import.html
               fast/dom/HTMLLinkElement/link-onerror-stylesheet-with-non-existent-import.html
               fast/dom/HTMLLinkElement/link-onerror.html
               fast/dom/HTMLLinkElement/link-onload-before-page-load.html
               fast/dom/HTMLLinkElement/link-onload-stylesheet-with-import.html
               fast/dom/HTMLLinkElement/link-onload.html
               fast/dom/HTMLLinkElement/link-onload2.html
               fast/dom/HTMLLinkElement/programmatically-add-link-with-onerror-handler.html
               fast/dom/HTMLLinkElement/programmatically-add-link-with-onload-handler.html
               fast/dom/HTMLStyleElement/programmatically-add-style-with-onerror-handler.html
               fast/dom/HTMLStyleElement/programmatically-add-style-with-onload-handler.html
               fast/dom/HTMLStyleElement/style-onerror-with-existent-and-non-existent-import.html
               fast/dom/HTMLStyleElement/style-onerror.html
               fast/dom/HTMLStyleElement/style-onload-before-page-load.html
               fast/dom/HTMLStyleElement/style-onload.html
               fast/dom/HTMLStyleElement/style-onload2.html

        Implements support for firing Load and Error events at HTML Link and HTML Style elements as per
        the HTML5 spec. (draft 05/25/2011) section "The link element" <http://www.w3.org/TR/html5/semantics.html#the-link-element>
        and "The style element" <http://www.w3.org/TR/html5/semantics.html#the-style-element>, respectively.

        * css/CSSImportRule.cpp:
        (WebCore::CSSImportRule::setCSSStyleSheet): Modified to call CSSStyleSheet::notifyLoadedSheet()
        after the style sheet associated with the @import rule loaded.
        * css/CSSStyleSheet.cpp: Added instance variable m_didLoadErrorOccur to track whether a network error
        occurred while loading any @import style sheets.
        (WebCore::CSSStyleSheet::CSSStyleSheet):
        (WebCore::CSSStyleSheet::checkLoaded):
        (WebCore):
        (WebCore::CSSStyleSheet::notifyLoadedSheet): Added; update m_didLoadErrorOccur to reflect if a network
        error occurred while loading a style sheet associated with an @import rule.
        * css/CSSStyleSheet.h:
        (WebCore):
        (CSSStyleSheet):
        * dom/Document.cpp:
        (WebCore::Document::implicitClose): Call HTML{LinkElement, StyleElement}::dispatchPendingLoadEvents() to
        ensure that all pending Load events for link and style elements are dispatched before we fire the Load
        event for the window.
        * dom/Node.h:
        (WebCore::Node::notifyLoadedSheetAndAllCriticalSubresources): Added; as stated in its name, this method is
        called once a style sheet and all its critical subresources (@imports) have loaded.
        * html/HTMLLinkElement.cpp:
        (WebCore::loadEventSender):
        (WebCore):
        (WebCore::HTMLLinkElement::HTMLLinkElement):
        (WebCore::HTMLLinkElement::~HTMLLinkElement): Modified to cancel all pending Load events on destruction.
        (WebCore::HTMLLinkElement::parseAttribute): Register event listeners for Load and Error events regardless of whether we
        built with link prefetch support.
        (WebCore::HTMLLinkElement::setCSSStyleSheet):
        (WebCore::HTMLLinkElement::dispatchPendingLoadEvents): Added; called from Document::implicitClose() to
        ensure that all pending Load events for link elements have been dispatched before we fire the Load event
        for the window.
        (WebCore::HTMLLinkElement::dispatchPendingEvent): Added; called by EventSender.
        (WebCore::HTMLLinkElement::notifyLoadedSheetAndAllCriticalSubresources): Added.
        * html/HTMLLinkElement.h:
        (WebCore):
        (HTMLLinkElement):
        * html/HTMLStyleElement.cpp:
        (WebCore::loadEventSender):
        (WebCore):
        (WebCore::HTMLStyleElement::HTMLStyleElement):
        (WebCore::HTMLStyleElement::~HTMLStyleElement): Modified to cancel all pending Load events on destruction.
        (WebCore::HTMLStyleElement::parseAttribute): Register event listeners for Load and Error events.
        (WebCore::HTMLStyleElement::dispatchPendingLoadEvents): Added; called from Document::implicitClose() to
        ensure that all pending Load events for link elements have been dispatched before we fire the Load event
        for the window.
        (WebCore::HTMLStyleElement::dispatchPendingEvent): Added; called by EventSender.
        (WebCore::HTMLStyleElement::notifyLoadedSheetAndAllCriticalSubresources): Added.
        * html/HTMLStyleElement.h:
        (WebCore):
        (HTMLStyleElement):

2012-02-24  Adam Roben  <aroben@apple.com>

        Mac build fix after r108698

        * page/scrolling/mac/ScrollingCoordinatorMac.mm: Added missing #import.

2012-02-24  Csaba Osztrogonác  <ossy@webkit.org>

        Unreviewed speculative buildfix after r108785 for ENABLE(SVG) && !ENABLE(XSLT) case.

        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::canRequest):

2012-02-24  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Do not show scripts panel navigator automatically more than once to the same user.
        https://bugs.webkit.org/show_bug.cgi?id=79489

        Reviewed by Pavel Feldman.

        * inspector/front-end/ScriptsPanel.js:

2012-02-24  Philippe Normand  <pnormand@igalia.com>

        Fix GTK WebAudio build for WebKitGTK 1.7.90.

        Patch by Priit Laes <plaes@plaes.org> on 2012-02-24
        Rubber-stamped by Philippe Normand.

        * GNUmakefile.list.am: Add AudioBufferCallback.h and
        DenormalDisabler.h to the list of files so they get disted in the
        tarballs.

2012-02-24  Yury Semikhatsky  <yurys@chromium.org>

        Web Inspector: show all counters on one graph
        https://bugs.webkit.org/show_bug.cgi?id=79484

        Now it is possible to hide any counter. All graphs share the same area.
        Current values are displayed above that area.

        Reviewed by Pavel Feldman.

        * English.lproj/localizedStrings.js:
        * inspector/front-end/MemoryStatistics.js:
        (WebInspector.MemoryStatistics.getDocumentCount):
        (WebInspector.MemoryStatistics.getNodeCount):
        (WebInspector.MemoryStatistics.getListenerCount):
        (WebInspector.MemoryStatistics):
        (WebInspector.SwatchCheckbox):
        (WebInspector.SwatchCheckbox.prototype.get checked):
        (WebInspector.SwatchCheckbox.prototype.set checked):
        (WebInspector.SwatchCheckbox.prototype._toggleCheckbox):
        (WebInspector.CounterUI):
        (WebInspector.CounterUI.prototype._toggleCounterGraph):
        (WebInspector.CounterUI.prototype.setRange):
        (WebInspector.CounterUI.prototype.updateCurrentValue):
        (WebInspector.CounterUI.prototype.clearCurrentValueAndMarker):
        (WebInspector.CounterUI.prototype.get visible):
        (WebInspector.CounterUI.prototype.saveImageUnderMarker):
        (WebInspector.CounterUI.prototype.restoreImageUnderMarker):
        (WebInspector.CounterUI.prototype.discardImageUnderMarker):
        (WebInspector.MemoryStatistics.prototype._updateSize):
        (WebInspector.MemoryStatistics.prototype._draw):
        (WebInspector.MemoryStatistics.prototype._onMouseOut):
        (WebInspector.MemoryStatistics.prototype._refreshCurrentValues):
        (WebInspector.MemoryStatistics.prototype._highlightCurrentPositionOnGraphs):
        (WebInspector.MemoryStatistics.prototype._drawGraph):
        (WebInspector.MemoryStatistics.prototype._clear):
        * inspector/front-end/timelinePanel.css:
        (.memory-counter-sidebar-info):
        (.memory-counter-sidebar-info .swatch):
        (.memory-counter-sidebar-info .title):
        (.memory-counter-value):
        (#counter-values-bar):

2012-02-24  Pavel Feldman  <pfeldman@google.com>

        Web Inspector: map Ctrl/Cmd +/- to zoom in hosted mode.
        https://bugs.webkit.org/show_bug.cgi?id=79475

        (In remote front-end mode, default zoom actions are working.)

        Reviewed by Yury Semikhatsky.

        * inspector/InspectorFrontendHost.cpp:
        (WebCore::InspectorFrontendHost::setZoomFactor):
        (WebCore):
        * inspector/InspectorFrontendHost.h:
        (InspectorFrontendHost):
        * inspector/InspectorFrontendHost.idl:
        * inspector/front-end/InspectorFrontendHostStub.js:
        (.WebInspector.InspectorFrontendHostStub):
        (.WebInspector.InspectorFrontendHostStub.prototype.loadResourceSynchronously):
        (.WebInspector.InspectorFrontendHostStub.prototype.setZoomFactor):
        * inspector/front-end/Settings.js:
        (WebInspector.Settings):
        * inspector/front-end/inspector.js:
        (WebInspector._initializeCapability):
        (WebInspector._zoomIn):
        (WebInspector._zoomOut):
        (WebInspector._resetZoom):
        (WebInspector._requestZoom.set InspectorFrontendHost):
        (WebInspector._requestZoom):
        (WebInspector._doLoadedDoneWithCapabilities.get if):
        (WebInspector.documentKeyDown):

2012-02-24  Allan Sandfeld Jensen  <allan.jensen@nokia.com>

        Refactor EventHandler::handleGestureEvent.
        https://bugs.webkit.org/show_bug.cgi?id=79476

        Reviewed by Kenneth Rohde Christiansen.

        No new tests. No behavior change.

        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleGestureEvent):
        (WebCore::EventHandler::handleGestureTap):
        (WebCore::EventHandler::handleGestureScrollUpdate):
        * page/EventHandler.h:

2012-02-24  Zoltan Horvath  <zoltan@webkit.org>

        [Qt] Allow to use WebCore imagedecoders
        https://bugs.webkit.org/show_bug.cgi?id=32410

        Add ENABLE(QT_IMAGE_DECODER) guards around Qt imagedecoders and set it to default.
        By passing ENABLE_QT_IMAGE_DECODER=0 define to the build system, WebKit will build
        with WebCore's imagedecoders.

        I added NO_RETURN attribute and PLATFORM(QT) conditionals to 2 functions of PNG and
        JPEG decoders to avoid compiler warnings because in Qt-port we treat warning as errors (-Werror).

        I'm continuing the refactoring of this area and try to use Qt imagedecoders only in
        cases when WebCore doesn't support the image format.

        Reviewed by Simon Hausmann.

        No behavior change, no need new tests.

        * Target.pri:
        * WebCore.pri:
        * platform/MIMETypeRegistry.cpp:
        (WebCore::initializeSupportedImageMIMETypes):
        (WebCore::initializeSupportedImageMIMETypesForEncoding):
        * platform/image-decoders/ImageDecoder.h:
        (WebCore::ImageFrame::getAddr):
        (ImageFrame):
        * platform/image-decoders/jpeg/JPEGImageDecoder.cpp:
        NO_RETURN has been added to a function to avoid warning message.
        * platform/image-decoders/png/PNGImageDecoder.cpp:
        NO_RETURN has been added to a function to avoid warning message.
        (WebCore):
        * platform/image-decoders/qt/ImageFrameQt.cpp:
        (WebCore):
        (WebCore::ImageFrame::asNewNativeImage):

2012-02-24  Lynn Neir <lynn.neir@skype.net>

        [Windows, WinCairo] Handle indeterminate checkbox state
        https://bugs.webkit.org/show_bug.cgi?id=79288

        Reviewed by Adam Roben.

        Tested by fast/forms/indeterminate.html

        * rendering/RenderThemeWin.cpp: Add code to check for indeterminate
          state in CheckBox.

2012-02-24  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] Font related problem with newer Qt5
        https://bugs.webkit.org/show_bug.cgi?id=79402

        Reviewed by Kenneth Rohde Christiansen.

        Apply the descent += 1 workaround needed to produce correct metrics only for Qt 4,
        because the behaviour has been corrected in Qt 5.

        * platform/graphics/qt/SimpleFontDataQt.cpp:
        (WebCore::SimpleFontData::platformInit):

2012-02-24  Kentaro Hara  <haraken@chromium.org>

        Move XML-related APIs from DOMWindow.idl to DOMWindowXML.idl
        https://bugs.webkit.org/show_bug.cgi?id=79434

        Reviewed by Adam Barth.

        For WebKit modularization, this patch moves XML-related APIs
        from DOMWindow.idl to DOMWIndowXML.idl.

        No tests. No change in behavior.

        * xml/DOMWindowXML.idl: Added.
        * page/DOMWindow.idl:

        * CMakeLists.txt: Added "DOMWindowXML.idl".
        * DerivedSources.make: Ditto.
        * DerivedSources.pri: Ditto.
        * GNUmakefile.list.am: Ditto.
        * WebCore.gypi: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Ditto.

2012-02-24  Renata Hodovan  <reni@webkit.org>

        External <use> xlink:href references do not work
        https://bugs.webkit.org/show_bug.cgi?id=12499

        Reviewed by Nikolas Zimmermann.

        Support external references on <use> by introducing CachedSVGDocument.
        CachedSVGDocument is a CachedResource specialized for SVGDocuments.
        This CachedSVGDocument will be stored for every use element with external reference.
        This first patch only contains the new classes to test whether it works on every platform.
        So they aren't used anywhere and just a follow-up patch will bind them into the caching system.

        No new tests - no change in functionality.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * loader/cache/CachedResource.cpp:
        (WebCore::defaultPriorityForResourceType):
        (WebCore::cachedResourceTypeToTargetType):
        * loader/cache/CachedResource.h:
        * loader/cache/CachedResourceClient.h:
        (CachedResourceClient):
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::createResource):
        (WebCore::CachedResourceLoader::checkInsecureContent):
        (WebCore::CachedResourceLoader::canRequest):
        * loader/cache/CachedSVGDocument.cpp: Added.
        (WebCore):
        (WebCore::CachedSVGDocument::CachedSVGDocument):
        (WebCore::CachedSVGDocument::~CachedSVGDocument):
        (WebCore::CachedSVGDocument::setEncoding):
        (WebCore::CachedSVGDocument::encoding):
        (WebCore::CachedSVGDocument::data):
        * loader/cache/CachedSVGDocument.h: Added.
        (WebCore):
        (CachedSVGDocument):
        (WebCore::CachedSVGDocument::document):
        (WebCore::CachedSVGDocument::schedule):
        (CachedSVGDocumentClient):
        (WebCore::CachedSVGDocumentClient::~CachedSVGDocumentClient):
        (WebCore::CachedSVGDocumentClient::expectedType):
        (WebCore::CachedSVGDocumentClient::resourceClientType):

2012-02-24  Alexis Menard  <alexis.menard@openbossa.org>

        Little optimization in CSSParser::parseShorthand.
        https://bugs.webkit.org/show_bug.cgi?id=79356

        Reviewed by Tony Chang.

        Remove one loop by initializing array values at declaration time.
        Also early return when the number of properties parsed are equals
        with longhands count of the shorthand. It happens to be very often
        the case (e.g. border). Instruments shows an improvement from 19ms
        to 17ms on the time spent in this function for the css-parser-yui
        benchmark.

        No new tests : refactor, exisiting ones should cover.

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

2012-02-24  Kentaro Hara  <haraken@chromium.org>

        Move HTML-related APIs from DOMWindow.idl to DOMWindowHTML.idl
        https://bugs.webkit.org/show_bug.cgi?id=79436

        Reviewed by Adam Barth.

        For WebKit modularization, this patch moves HTML-related APIs
        from DOMWindow.idl to DOMWindowHTML.idl.

        No tests. No change in behavior.

        * html/DOMWindowHTML.idl:
        * page/DOMWindow.idl:

2012-02-24  Jochen Eisinger  <jochen@chromium.org>

        [v8] when a named item on document goes out of scope, actually remove it
        https://bugs.webkit.org/show_bug.cgi?id=79409

        Reviewed by Adam Barth.

        The original change already included the code, but it led to some
        problems, so it was reverted in http://trac.webkit.org/changeset/63845.
        However, not removing the items leaks a considerable amount of memory,
        so I'm adding the code back. The bug that led to the revert was that
        the accessor was removed unconditionally. I'm now only removing it,
        when the last item with that name is removed.

        Test: fast/dom/HTMLDocument/named-item.html

        * bindings/v8/V8DOMWindowShell.cpp:
        (WebCore::V8DOMWindowShell::namedItemRemoved):

2012-02-24  Kentaro Hara  <haraken@chromium.org>

        Move Worker-related APIs from DOMWindow.idl to DOMWindowWorker.idl
        https://bugs.webkit.org/show_bug.cgi?id=79442

        Reviewed by Adam Barth.

        For WebKit modularization, this patch moves Worker-related APIs
        from DOMWindow.idl to DOMWindowWorker.idl.

        No tests. No change in behavior.

        * workers/DOMWindowWorker.idl: Added.
        * page/DOMWindow.idl:

        * CMakeLists.txt:
        * DerivedSources.make:
        * DerivedSources.pri:
        * GNUmakefile.list.am:
        * WebCore.gypi:

2012-02-24  Robin Cao  <robin.cao@torchmobile.com.cn>

        [BlackBerry] Upstream helper classes for skia
        https://bugs.webkit.org/show_bug.cgi?id=79216

        Reviewed by Antonio Gomes.

        Initial upstreaming, no new tests.

        * platform/graphics/blackberry/skia/ImageBufferData.h: Added.
        (WebCore):
        (ImageBufferData):
        * platform/graphics/blackberry/skia/PlatformSupport.cpp: Added.
        (WebCore):
        (WebCore::setFontRenderStyleDefaults):
        (WebCore::PlatformSupport::getRenderStyleForStrike):
        (WebCore::PlatformSupport::getFontFamilyForCharacters):
        * platform/graphics/blackberry/skia/PlatformSupport.h: Added.
        (WebCore):
        (PlatformSupport):
        (FontFamily):

2012-02-24  Robin Cao  <robin.cao@torchmobile.com.cn>

        [BlackBerry] Upstream ImageBlackBerry in platform/graphics/blackberry
        https://bugs.webkit.org/show_bug.cgi?id=79212

        Reviewed by Antonio Gomes.

        Initial upstreaming, no new tests.

        * PlatformBlackBerry.cmake:
        * platform/graphics/blackberry/ImageBlackBerry.cpp: Added.
        (WebCore):
        (WebCore::Image::loadPlatformResource):

2012-02-24  Leo Yang  <leo.yang@torchmobile.com.cn>

        [BlackBerry] Upstream the BlackBerry change to platform/graphics/IntSize.h
        https://bugs.webkit.org/show_bug.cgi?id=79430

        Reviewed by Antonio Gomes.

        Add conversion convenience between WebCore::IntSize and BlackBerry::Platform::IntSize.

        The porting can't be built yet, no new tests.

        * platform/graphics/IntSize.h:
        (Platform):
        (IntSize):

2012-02-24  Shinya Kawanaka  <shinyak@chromium.org>

        SpellCheckRequest needs to know the context where the spellcheck happened.
        https://bugs.webkit.org/show_bug.cgi?id=79320

        Reviewed by Hajime Morita.

        WebKit clients should be able to get the context how the spellcheck happended.
        For example, WebKit clients may want to change the behavior by a spellcheck request is
        invoked in typing or in pasting.

        This patch added an enum in SpellCheckRequest so that WebKit clients can understand the context.

        * editing/Editor.cpp:
        (WebCore::Editor::replaceSelectionWithFragment):
        (WebCore::Editor::markAllMisspellingsAndBadGrammarInRanges):
        * editing/SpellChecker.cpp:
        (WebCore::SpellCheckRequest::SpellCheckRequest):
        (WebCore::SpellCheckRequest::create):
        (WebCore::SpellChecker::invokeRequest):
        * editing/SpellChecker.h:
        (SpellCheckRequest):
        (WebCore::SpellCheckRequest::textCheckingRequest):
        (WebCore::SpellCheckRequest::processType):
        * loader/EmptyClients.h:
        (WebCore::EmptyTextCheckerClient::requestCheckingOfString):
        * platform/text/TextCheckerClient.h:
        (WebCore):
        (TextCheckerClient):
        * platform/text/TextChecking.h:
        (TextCheckingRequest):
        (WebCore::TextCheckingRequest::TextCheckingRequest):
        (WebCore::TextCheckingRequest::setSequence):
        (WebCore::TextCheckingRequest::sequence):
        (WebCore::TextCheckingRequest::text):
        (WebCore::TextCheckingRequest::mask):
        (WebCore::TextCheckingRequest::processType):
        (WebCore):

2012-02-24  Hayato Ito  <hayato@chromium.org>

        Make Node::showTreeForThis (and Node::showTreeForThisAcrossFrame) dump multiple shadow roots.
        https://bugs.webkit.org/show_bug.cgi?id=79351

        Reviewed by Dimitri Glazkov.

        No new tests since these utility functions are only available in debug build.
        I manually tested in GDB session.

        * dom/Node.cpp:
        (WebCore::oldestShadowRootFor):
        (WebCore::traverseTreeAndMark):
        (WebCore::parentOrHostOrFrameOwner):
        (WebCore::showSubTreeAcrossFrame):
        * dom/ShadowRoot.h:
        (WebCore::ShadowRoot::youngerShadowRoot):
        (WebCore::ShadowRoot::olderShadowRoot):
        (WebCore::toShadowRoot):
        (WebCore):

2012-02-24  Pavel Feldman  <pfeldman@chromium.org>

        Not reviewed: follow up to inspector's r108331, using more general condition.

        * inspector/front-end/JavaScriptSourceFrame.js:
        (WebInspector.JavaScriptSourceFrame.prototype._getPopoverAnchor):

2012-02-24  Kentaro Hara  <haraken@chromium.org>

        Move WebGL APIs from DOMWindow.idl to DOMWindowWebGL.idl
        https://bugs.webkit.org/show_bug.cgi?id=79432

        Reviewed by Adam Barth.

        For WebKit modularization, this patch moves WebGL-related APIs
        from DOMWindow.idl to DOMWindowWebGL.idl.

        No tests. No change in behavior.

        * html/canvas/DOMWindowWebGL.idl: Added.
        * page/DOMWindow.idl:

        * DerivedSources.make: Added DOMWindowWebGL.idl.
        * DerivedSources.pri: Ditto.
        * GNUmakefile.list.am: Ditto.
        * WebCore.gypi: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Ditto.

2012-02-24  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: [Regression] network worker tests crash on qt.
        https://bugs.webkit.org/show_bug.cgi?id=79263

        Reviewed by Pavel Feldman.

        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::createDecoder):
        (WebCore::InspectorPageAgent::cachedResourceContent):

2012-02-24  Andreas Kling  <awesomekling@apple.com>

        Miscellaneous CSSParser dodging in presentation attribute parsing.
        <http://webkit.org/b/79468>

        Reviewed by Antti Koivisto.

        - Bypass CSSParser when adding constant values to attribute styles.
        - Added fast paths for the valid HTMLTablePartElement align values.

        * html/HTMLEmbedElement.cpp:
        (WebCore::HTMLEmbedElement::collectStyleForAttribute):
        * html/HTMLHRElement.cpp:
        (WebCore::HTMLHRElement::collectStyleForAttribute):
        * html/HTMLIFrameElement.cpp:
        (WebCore::HTMLIFrameElement::collectStyleForAttribute):
        * html/HTMLTableElement.cpp:
        (WebCore::HTMLTableElement::collectStyleForAttribute):
        * html/HTMLTablePartElement.cpp:
        (WebCore::HTMLTablePartElement::collectStyleForAttribute):

2012-02-24  Dana Jansens  <danakj@chromium.org>

        [chromium] Avoid culling work for fully-non-opaque tiles, and add tracing for draw culling
        https://bugs.webkit.org/show_bug.cgi?id=79183

        Reviewed by James Robinson.

        Addresses performance issues with draw culling by avoiding the work
        of mapRect and other function calls when the quad has no opaque area.
        And adds a TRACE_EVENT to watch the time spent in draw culling.

        * platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:
        (WebCore::CCLayerTreeHostImpl::optimizeRenderPasses):
        * platform/graphics/chromium/cc/CCQuadCuller.cpp:
        (WebCore::CCQuadCuller::cullOccludedQuads):

2012-02-24  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Scripts panel navigator overlay should be shown automatically only one time.
        https://bugs.webkit.org/show_bug.cgi?id=79467

        Reviewed by Pavel Feldman.

        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype._hideNavigatorOverlay):
        (WebInspector.ScriptsPanel.prototype._navigatorOverlayWillHide):

2012-02-23  MORITA Hajime  <morrita@google.com>

        Adding a ShadowRoot to image-backed element causes a crash
        https://bugs.webkit.org/show_bug.cgi?id=78878

        Reviewed by Dimitri Glazkov.

        The crash happened because NodeRenderingContext tried to append a
        child to a renderer regardless one isn't capable of holding any
        children if it appears in the shadow attaching phase. RenderImage
        is one of such renderer classes which aren't capable.

        NodeRenderingContext decide whether the contextual node as a child
        can create its renderer based on RenderObject::canHaveChildren()
        and Node::childShouldCreateRenderer(). But the responsibility
        between these two methods are getting confused. which results this
        unfortuante crash path.

        This change re-aligns the responsibility:

        - Now canHaveChildren() purely declares the ability of the
          renderer. If the renderer is capable of having children, it
          return true regardless of HTML semantics.

        - On the other hand, childShouldCreateRenderer() cares about the
          semantics. If the element doesn't allow children to be rendered,
          this returns false.

        - Note that these decision on elements are contextual. Each element
          needs to know which role it is playing in the tree composition
          algorithm of Shadow DOM. That's why the method parameter is changed
          from Node* to NodeRenderingContext.

        - Fixed updateFirstLetter() which relied on this confused assumption.
          This change introduces RenderDeprecatedFlexibleBox::buttonText()
          to refine the relying assumption.

        With this change, some decision points are moved from a renderer to an
        element. Following renderers no longer stop reject having children:

        - RenderButton, RenderListBox, RenderMenuList, RenderMeter,
          RenderProgress, RenderTextControl.

        Corresponding element for such a render (HTMLProgressElement of
        RenderProgress for exaple) now cares about that.

        Reviewed by Dimitri Glazkov.

        Tests: fast/dom/shadow/shadow-on-image-expected.html
               fast/dom/shadow/shadow-on-image.html

        * dom/Element.cpp:
        (WebCore::Element::childShouldCreateRenderer):
        * dom/Element.h:
        (Element):
        * dom/Node.h:
        (WebCore::Node::childShouldCreateRenderer):
        * dom/NodeRenderingContext.cpp:
        (WebCore::NodeRenderingContext::shouldCreateRenderer):
        * dom/NodeRenderingContext.h:
        (NodeRenderingContext):
        (WebCore::NodeRenderingContext::isOnEncapsulationBoundary):
        (WebCore):
        * html/HTMLDetailsElement.cpp:
        (WebCore::HTMLDetailsElement::childShouldCreateRenderer):
        * html/HTMLDetailsElement.h:
        (HTMLDetailsElement):
        * html/HTMLMediaElement.cpp:
        (WebCore):
        (WebCore::HTMLMediaElement::childShouldCreateRenderer):
        * html/HTMLMediaElement.h:
        (HTMLMediaElement):
        * html/HTMLMeterElement.cpp:
        (WebCore::HTMLMeterElement::childShouldCreateRenderer):
        (WebCore):
        * html/HTMLMeterElement.h:
        (HTMLMeterElement):
        * html/HTMLProgressElement.cpp:
        (WebCore::HTMLProgressElement::childShouldCreateRenderer):
        (WebCore):
        * html/HTMLProgressElement.h:
        (HTMLProgressElement):
        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::childShouldCreateRenderer):
        (WebCore):
        * html/HTMLSelectElement.h:
        (HTMLSelectElement):
        * html/HTMLSummaryElement.cpp:
        (WebCore::HTMLSummaryElement::childShouldCreateRenderer):
        (WebCore):
        * html/HTMLSummaryElement.h:
        (HTMLSummaryElement):
        * html/HTMLTextFormControlElement.cpp:
        (WebCore::HTMLTextFormControlElement::childShouldCreateRenderer):
        (WebCore):
        * html/HTMLTextFormControlElement.h:
        (HTMLTextFormControlElement):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::updateFirstLetter):
        * rendering/RenderButton.cpp:
        * rendering/RenderButton.h:
        (RenderButton):
        * rendering/RenderDeprecatedFlexibleBox.h:
        (WebCore::RenderDeprecatedFlexibleBox::buttonText):
        * rendering/RenderListBox.h:
        (RenderListBox):
        * rendering/RenderMedia.h:
        (WebCore::RenderMedia::canHaveChildren):
        * rendering/RenderMenuList.h:
        (RenderMenuList):
        (WebCore::RenderMenuList::hasControlClip):
        * rendering/RenderMeter.h:
        * rendering/RenderProgress.h:
        * rendering/RenderTextControl.h:
        * rendering/svg/RenderSVGRoot.h:
        (WebCore::RenderSVGRoot::canHaveChildren):
        * svg/SVGAElement.cpp:
        (WebCore::SVGAElement::childShouldCreateRenderer):
        * svg/SVGAElement.h:
        (SVGAElement):
        * svg/SVGAltGlyphElement.cpp:
        (WebCore::SVGAltGlyphElement::childShouldCreateRenderer):
        * svg/SVGAltGlyphElement.h:
        (SVGAltGlyphElement):
        * svg/SVGDocument.cpp:
        (WebCore::SVGDocument::childShouldCreateRenderer):
        * svg/SVGDocument.h:
        (SVGDocument):
        * svg/SVGElement.cpp:
        (WebCore::SVGElement::childShouldCreateRenderer):
        * svg/SVGElement.h:
        (SVGElement):
        * svg/SVGForeignObjectElement.cpp:
        (WebCore::SVGForeignObjectElement::childShouldCreateRenderer):
        * svg/SVGForeignObjectElement.h:
        (SVGForeignObjectElement):
        * svg/SVGSwitchElement.cpp:
        (WebCore::SVGSwitchElement::childShouldCreateRenderer):
        * svg/SVGSwitchElement.h:
        (SVGSwitchElement):
        * svg/SVGTRefElement.cpp:
        (WebCore::SVGTRefElement::childShouldCreateRenderer):
        * svg/SVGTRefElement.h:
        (SVGTRefElement):
        * svg/SVGTSpanElement.cpp:
        (WebCore::SVGTSpanElement::childShouldCreateRenderer):
        * svg/SVGTSpanElement.h:
        (SVGTSpanElement):
        * svg/SVGTextElement.cpp:
        (WebCore::SVGTextElement::childShouldCreateRenderer):
        * svg/SVGTextElement.h:
        (SVGTextElement):
        * svg/SVGTextPathElement.cpp:
        (WebCore::SVGTextPathElement::childShouldCreateRenderer):
        * svg/SVGTextPathElement.h:

2012-02-24  Kentaro Hara  <haraken@chromium.org>

        Support [Supplemental] on static methods
        https://bugs.webkit.org/show_bug.cgi?id=79357

        Reviewed by Adam Barth.

        [Supplemental] on static methods does not work in CodeGeneratorJS.pm
        and CodeGeneratorV8.pm due to mis-ordered if-elsif statements.
        This patch fixes it and supports [Supplemental] on static methods.

        Test: bindings/scripts/test/TestSupplemental.idl

        * bindings/scripts/CodeGeneratorJS.pm: Modified as described above.
        (GenerateParametersCheck):
        * bindings/scripts/CodeGeneratorV8.pm: Ditto.
        (GenerateFunctionCallString):

        * bindings/scripts/test/TestSupplemental.idl: Added a test case.

        * bindings/scripts/test/CPP/WebDOMTestInterface.cpp: Updated run-bindings-tests results.
        (WebDOMTestInterface::supplementalMethod4):
        * bindings/scripts/test/CPP/WebDOMTestInterface.h: Ditto.
        * bindings/scripts/test/GObject/WebKitDOMTestInterface.cpp: Ditto.
        (webkit_dom_test_interface_supplemental_method4):
        * bindings/scripts/test/GObject/WebKitDOMTestInterface.h: Ditto.
        * bindings/scripts/test/JS/JSTestInterface.cpp: Ditto.
        (WebCore):
        (WebCore::JSTestInterfaceConstructor::getOwnPropertySlot):
        (WebCore::JSTestInterfaceConstructor::getOwnPropertyDescriptor):
        (WebCore::jsTestInterfaceConstructorFunctionSupplementalMethod4):
        * bindings/scripts/test/JS/JSTestInterface.h: Ditto.
        (WebCore):
        * bindings/scripts/test/ObjC/DOMTestInterface.h: Ditto.
        * bindings/scripts/test/ObjC/DOMTestInterface.mm: Ditto.
        (-[DOMTestInterface supplementalMethod4]):
        * bindings/scripts/test/V8/V8TestInterface.cpp: Ditto.
        (TestInterfaceInternal):
        (WebCore::TestInterfaceInternal::supplementalMethod4Callback):
        (WebCore::ConfigureV8TestInterfaceTemplate):

2012-02-24  Tony Chang  <tony@chromium.org>

        Small refactor in RenderFlexibleBox::layoutAndPlaceChildren
        https://bugs.webkit.org/show_bug.cgi?id=79420

        Reviewed by Ojan Vafai.

        No new tests, just a refactor.

        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::layoutAndPlaceChildren): Share some of the logic
        in computing the cross axis length.

2012-02-24  Yury Semikhatsky  <yurys@chromium.org>

        Web Inspector: cannot drag timeline overview window when clicking inside the window
        https://bugs.webkit.org/show_bug.cgi?id=79453

        Reviewed by Pavel Feldman.

        * inspector/front-end/timelinePanel.css:
        (.timeline-overview-window-rulers):

2012-02-24  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r108731.
        http://trac.webkit.org/changeset/108731
        https://bugs.webkit.org/show_bug.cgi?id=79464

        Broke Chromium Win tests (Requested by bashi on #webkit).

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gyp/WebCore.gyp:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * websockets/WebSocket.cpp:
        (WebCore::WebSocket::didConnect):
        * websockets/WebSocketChannel.cpp:
        (WebCore::WebSocketChannel::connect):
        (WebCore::WebSocketChannel::fail):
        (WebCore::WebSocketChannel::processFrame):
        (WebCore::WebSocketChannel::sendFrame):
        * websockets/WebSocketChannel.h:
        * websockets/WebSocketDeflateFramer.cpp: Removed.
        * websockets/WebSocketDeflateFramer.h: Removed.

2012-02-22  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Show scripts panel navigator overlay on the first scripts panel opening.
        https://bugs.webkit.org/show_bug.cgi?id=79248

        Reviewed by Pavel Feldman.

        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype.wasShown):
        (WebInspector.ScriptsPanel.prototype.set _showNavigatorOverlay):
        (WebInspector.ScriptsPanel.prototype._hideNavigatorOverlay):

2012-02-24  Mike Lawther  <mikelawther@chromium.org>

        CSS3 calc(): handle non-negative values
        https://bugs.webkit.org/show_bug.cgi?id=79188

        Reviewed by Daniel Bates.

        Some CSS properties (e.g. padding) are required to be non-negative. These
        are now restricted to the correct range.

        Tests: css3/calc/negative-padding-expected.html
               css3/calc/negative-padding.html

        * css/CSSCalculationValue.cpp:
        (WebCore):
        (WebCore::CSSCalcValue::clampToPermittedRange): Added
        (WebCore::CSSCalcValue::doubleValue):
        (WebCore::CSSCalcValue::isNegative): Added
        (WebCore::CSSCalcValue::computeLengthPx):
        (WebCore::CSSCalcValue::create):
        * css/CSSCalculationValue.h:
        (CSSCalcValue):
        (WebCore::CSSCalcValue::CSSCalcValue):
        * css/CSSParser.cpp:
        (WebCore::CSSParser::validCalculationUnit):
        (WebCore::CSSParser::parseCalculation):
        * css/CSSParser.h:
        * platform/CalculationValue.h:

2012-02-22  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: [Regression] xhr tests are crashing after r108506.
        https://bugs.webkit.org/show_bug.cgi?id=79265

        Reviewed by Pavel Feldman.

        * inspector/InspectorResourceAgent.cpp:
        (WebCore::InspectorResourceAgent::setInitialScriptContent):
        (WebCore::InspectorResourceAgent::setInitialXHRContent):

2012-02-24  Huang Dongsung  <luxtella@company100.net>

        Rename LocalStorageThread to StorageThread and LocalStorageTask to StorageTask.
        https://bugs.webkit.org/show_bug.cgi?id=79358

        Revision 45124 commented FIXME to rename these classes.

        Reviewed by Kentaro Hara.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.order:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * storage/LocalStorageTask.h: Removed.
        * storage/StorageSyncManager.cpp:
        (WebCore::StorageSyncManager::StorageSyncManager):
        (WebCore::StorageSyncManager::scheduleImport):
        (WebCore::StorageSyncManager::scheduleSync):
        (WebCore::StorageSyncManager::scheduleDeleteEmptyDatabase):
        * storage/StorageSyncManager.h:
        (WebCore):
        (StorageSyncManager):
        * storage/StorageTask.cpp: Renamed from Source/WebCore/storage/LocalStorageTask.cpp.
        (WebCore):
        (WebCore::StorageTask::StorageTask):
        (WebCore::StorageTask::~StorageTask):
        (WebCore::StorageTask::performTask):
        * storage/StorageTask.h: Added.
        (WebCore):
        (StorageTask):
        (WebCore::StorageTask::createImport):
        (WebCore::StorageTask::createSync):
        (WebCore::StorageTask::createDeleteEmptyDatabase):
        (WebCore::StorageTask::createOriginIdentifiersImport):
        (WebCore::StorageTask::createSetOriginDetails):
        (WebCore::StorageTask::createDeleteOrigin):
        (WebCore::StorageTask::createDeleteAllOrigins):
        (WebCore::StorageTask::createTerminate):
        * storage/StorageThread.cpp: Renamed from Source/WebCore/storage/LocalStorageThread.cpp.
        (WebCore):
        (WebCore::StorageThread::create):
        (WebCore::StorageThread::StorageThread):
        (WebCore::StorageThread::~StorageThread):
        (WebCore::StorageThread::start):
        (WebCore::StorageThread::threadEntryPointCallback):
        (WebCore::StorageThread::threadEntryPoint):
        (WebCore::StorageThread::scheduleTask):
        (WebCore::StorageThread::terminate):
        (WebCore::StorageThread::performTerminate):
        * storage/StorageThread.h: Renamed from Source/WebCore/storage/LocalStorageThread.h.
        (WebCore):
        (StorageThread):
        * storage/StorageTracker.cpp:
        (WebCore::StorageTracker::StorageTracker):
        (WebCore::StorageTracker::importOriginIdentifiers):
        (WebCore::StorageTracker::setOriginDetails):
        (WebCore::StorageTracker::scheduleTask):
        (WebCore::StorageTracker::deleteAllOrigins):
        (WebCore::StorageTracker::deleteOrigin):
        * storage/StorageTracker.h:
        (WebCore):
        (StorageTracker):
        * storage/wince/StorageThreadWinCE.cpp: Renamed from Source/WebCore/storage/wince/LocalStorageThreadWinCE.cpp.
        (WebCore):
        (WebCore::StorageThread::StorageThread):
        (WebCore::StorageThread::~StorageThread):
        (WebCore::StorageThread::start):
        (WebCore::StorageThread::timerFired):
        (WebCore::StorageThread::scheduleImport):
        (WebCore::StorageThread::scheduleSync):
        (WebCore::StorageThread::terminate):
        (WebCore::StorageThread::performTerminate):
        * storage/wince/StorageThreadWinCE.h: Renamed from Source/WebCore/storage/wince/LocalStorageThreadWinCE.h.
        (WebCore):
        (StorageThread):
        (WebCore::StorageThread::create):

2012-02-23  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: prepare border images on timelines to enable zooming.
        https://bugs.webkit.org/show_bug.cgi?id=79360

        Reviewed by Yury Semikhatsky.

        * 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/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/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/inspectorCommon.css:
        (body):
        * inspector/front-end/networkLogView.css:
        (.network-graph-bar):
        (.resource-cached .network-graph-bar):
        (.network-category-documents .network-graph-bar):
        (.network-category-documents.resource-cached .network-graph-bar):
        (.network-category-stylesheets .network-graph-bar):
        (.network-category-stylesheets.resource-cached .network-graph-bar):
        (.network-category-images.resource-cached .network-graph-bar):
        (.network-category-fonts .network-graph-bar):
        (.network-category-fonts.resource-cached .network-graph-bar):
        (.network-category-scripts .network-graph-bar):
        (.network-category-scripts.resource-cached .network-graph-bar):
        (.network-category-xhr .network-graph-bar):
        (.network-category-xhr.resource-cached .network-graph-bar):
        (.network-category-websockets .network-graph-bar):
        (.network-category-websockets.resource-cached .network-graph-bar):

2012-02-23  Yury Semikhatsky  <yurys@chromium.org>

        Web Inspector: exception in front-end on selecting an element in heap snapshot
        https://bugs.webkit.org/show_bug.cgi?id=79447

        Fixed a typo in method name and added a check that selected node has
        corresponding heap snapshot object before adding that object to the console
        as $0 entry.

        Reviewed by Pavel Feldman.

        * inspector/front-end/DetailedHeapshotView.js:
        (WebInspector.DetailedHeapshotView.prototype._inspectedObjectChanged):

2012-02-23  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: hide color picker upon panel switch.
        https://bugs.webkit.org/show_bug.cgi?id=79355

        Reviewed by Vsevolod Vlasov.

        * inspector/front-end/ElementsPanel.js:
        (WebInspector.ElementsPanel.prototype.willHide):
        * inspector/front-end/StylesSidebarPane.js:
        (WebInspector.StylesSidebarPane.prototype._showUserAgentStylesSettingChanged):
        (WebInspector.StylesSidebarPane.prototype.willHide):

2012-02-23  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: make color review larger in the color picker.
        https://bugs.webkit.org/show_bug.cgi?id=79339

        Reviewed by Vsevolod Vlasov.

        * inspector/front-end/Popover.js:
        (WebInspector.Popover.prototype.hide):
        * inspector/front-end/Spectrum.js:
        * inspector/front-end/elementsPanel.css:
        (.spectrum-container):
        (.spectrum-color):
        (.spectrum-display-value):
        (.spectrum-hue):
        (.spectrum-fill):
        (.spectrum-range-container label):
        (.spectrum-range-container input):
        (.spectrum-slider):
        (.spectrum-container .swatch):
        * inspector/front-end/inspector.css:
        (.swatch):

2012-02-23  Kenichi Ishibashi  <bashi@chromium.org>

        [Chromium] Add HarfBuzzShaperBase class
        https://bugs.webkit.org/show_bug.cgi?id=79336

        Extract a part of ComplexTextControllerHarfBuzz class as
        HarfBuzzShaperBase class. This patch intends to share the code between
        old HarfBuzz and HarfBuzz-ng.

        Reviewed by Tony Chang.

        No new tests. No behavior change. Existing tests in fast/text should pass.

        * PlatformBlackBerry.cmake: Added HarfBuzzShaperBase.cpp.
        * WebCore.gyp/WebCore.gyp: Added HarfBuzzShaperBase.(cpp|h).
        * WebCore.gypi: Ditto.
        * platform/graphics/harfbuzz/ComplexTextControllerHarfBuzz.cpp:
        (WebCore::ComplexTextController::ComplexTextController): Removed redundant arguments.
        (WebCore::ComplexTextController::nextScriptRun): Use m_normalizedBuffer and m_normalizedBufferLength instead of m_run.
        (WebCore::ComplexTextController::setupFontForScriptRun): Ditto.
        (WebCore::ComplexTextController::setGlyphPositions): Ditto.
        * platform/graphics/harfbuzz/ComplexTextControllerHarfBuzz.h:
        (ComplexTextController):
        * platform/graphics/harfbuzz/FontHarfBuzz.cpp:
        (WebCore::Font::drawComplexText): Removed redundant arguments of ComplexTextController constructor.
        (WebCore::Font::floatWidthForComplexText): Ditto.
        (WebCore::Font::offsetForPositionForComplexText): Ditto.
        (WebCore::Font::selectionRectForComplexText): Ditto.
        * platform/graphics/harfbuzz/HarfBuzzShaperBase.cpp: Added.
        (WebCore):
        (WebCore::HarfBuzzShaperBase::HarfBuzzShaperBase):
        (WebCore::normalizeSpacesAndMirrorChars):
        (WebCore::HarfBuzzShaperBase::setNormalizedBuffer):
        (WebCore::HarfBuzzShaperBase::isWordEnd):
        (WebCore::HarfBuzzShaperBase::determineWordBreakSpacing):
        (WebCore::HarfBuzzShaperBase::setPadding):
        * platform/graphics/harfbuzz/HarfBuzzShaperBase.h: Added.
        (WebCore):
        (HarfBuzzShaperBase):
        (WebCore::HarfBuzzShaperBase::~HarfBuzzShaperBase):
        (WebCore::HarfBuzzShaperBase::isCodepointSpace):

2012-02-23  Kenichi Ishibashi  <bashi@chromium.org>

        Adding WebSocket per-frame DEFLATE extension
        https://bugs.webkit.org/show_bug.cgi?id=77522

        Add WebSocketDeflateFramer class which handles deflate-frame extension.
        This class encapsulates WebSocketDeflater and WebSocketInflater classes,
        which depend on zlib, so that WebSocketChannel is not necessary to aware
        zlib dependency.

        This is the second patch to land. The previous patch broke Chromium Win
        release build. r108600 should fix the build failure. I also added
        zlib entry to |export_dependent_settings| of |webcore_prerequisites|
        target.

        Reviewed by Kent Tamura.

        Tests: http/tests/websocket/tests/hybi/compressed-control-frame.html
               http/tests/websocket/tests/hybi/deflate-frame-comp-bit-onoff.html
               http/tests/websocket/tests/hybi/deflate-frame-invalid-parameter.html
               http/tests/websocket/tests/hybi/deflate-frame-parameter.html

        * CMakeLists.txt: Added WebSocketDeflateFramer.(cpp|h)
        * GNUmakefile.list.am: Ditto.
        * Target.pri: Ditto.
        * WebCore.gypi: Ditto.
        * WebCore.gyp/WebCore.gyp: Added zlib dependency.
        * WebCore.vcproj/WebCore.vcproj: Added WebSocketDeflateFramer.(cpp|h)
        * WebCore.xcodeproj/project.pbxproj: Ditto.
        * websockets/WebSocket.cpp:
        (WebCore::WebSocket::didConnect): Set m_extensions.
        * websockets/WebSocketChannel.cpp:
        (WebCore::WebSocketChannel::connect): Add deflate-frame extension processor to WebSocketHanshake if deflate can use.
        (WebCore::WebSocketChannel::fail): Call m_deflateFramer.didFail().
        (WebCore::WebSocketChannel::processFrame): Decompress frames if needed.
        (WebCore::WebSocketChannel::sendFrame): Compress frames if possible.
        * websockets/WebSocketChannel.h:
        * websockets/WebSocketDeflateFramer.cpp: Added.
        (WebCore):
        (WebSocketExtensionDeflateFrame):
        (WebCore::WebSocketExtensionDeflateFrame::create):
        (WebCore::WebSocketExtensionDeflateFrame::~WebSocketExtensionDeflateFrame):
        (WebCore::WebSocketExtensionDeflateFrame::WebSocketExtensionDeflateFrame):
        (WebCore::WebSocketExtensionDeflateFrame::handshakeString):
        (WebCore::WebSocketExtensionDeflateFrame::processResponse):
        (WebCore::DeflateResultHolder::DeflateResultHolder):
        (WebCore::DeflateResultHolder::~DeflateResultHolder):
        (WebCore::DeflateResultHolder::fail):
        (WebCore::InflateResultHolder::InflateResultHolder):
        (WebCore::InflateResultHolder::~InflateResultHolder):
        (WebCore::InflateResultHolder::fail):
        (WebCore::WebSocketDeflateFramer::WebSocketDeflateFramer):
        (WebCore::WebSocketDeflateFramer::createExtensionProcessor):
        (WebCore::WebSocketDeflateFramer::canDeflate):
        (WebCore::WebSocketDeflateFramer::enableDeflate):
        (WebCore::WebSocketDeflateFramer::deflate):
        (WebCore::WebSocketDeflateFramer::resetDeflateContext):
        (WebCore::WebSocketDeflateFramer::inflate):
        (WebCore::WebSocketDeflateFramer::resetInflateContext):
        (WebCore::WebSocketDeflateFramer::didFail):
        * websockets/WebSocketDeflateFramer.h: Added.
        (WebCore):
        (DeflateResultHolder):
        (WebCore::DeflateResultHolder::succeeded):
        (WebCore::DeflateResultHolder::failureReason):
        (InflateResultHolder):
        (WebCore::InflateResultHolder::succeeded):
        (WebCore::InflateResultHolder::failureReason):
        (WebSocketDeflateFramer):
        (WebCore::WebSocketDeflateFramer::enabled):

2012-02-23  Andy Estes  <aestes@apple.com>

        Rename [setS|s]uppressIncrementalRendering to [setS|s]uppressesIncrementalRendering and make it WebPreferences API.
        https://bugs.webkit.org/show_bug.cgi?id=79433

        Reviewed by Dan Bernstein.

        * dom/Document.cpp:
        (WebCore::Document::implicitClose):
        (WebCore::Document::visualUpdatesAllowed):
        * page/Settings.cpp:
        (WebCore::Settings::Settings):
        * page/Settings.h:
        (WebCore::Settings::setSuppressesIncrementalRendering):
        (WebCore::Settings::suppressesIncrementalRendering):
        (Settings):

2012-02-23  Erik Arvidsson  <arv@chromium.org>

        Rename DOMWindow to Window in the bindings
        https://bugs.webkit.org/show_bug.cgi?id=78721

        Reviewed by Adam Barth.

        Covered by existing tests.

        * inspector/front-end/DetailedHeapshotGridNodes.js:
        (WebInspector.HeapSnapshotGenericObjectNode):
        (WebInspector.HeapSnapshotGenericObjectNode.prototype.isWindow):
        * inspector/front-end/HeapSnapshot.js:
        (WebInspector.HeapSnapshotNode.prototype.get isWindow):
        (WebInspector.HeapSnapshot.prototype._calculateObjectToWindowDistance):
        (WebInspector.HeapSnapshot.prototype._markQueriableHeapObjects):
        * page/DOMWindow.idl:

2012-02-23  Shinya Kawanaka  <shinyak@chromium.org>

        NodeRenderingContext should have ShadowRootList instead of ShadowRoot.
        https://bugs.webkit.org/show_bug.cgi?id=79079

        Reviewed by Dimitri Glazkov.

        Apparently NodeRenderingContext should have ShadowRootList instead of ShadowRoot.
        This patch changes it.

        No new tests. Simple refactoring.

        * dom/NodeRenderingContext.cpp:
        (WebCore::NodeRenderingContext::NodeRenderingContext):
        (WebCore::NodeRenderingContext::hostChildrenChanged):
        (WebCore::NodeRenderingContext::shouldCreateRenderer):
        * dom/NodeRenderingContext.h:
        (WebCore):

2012-02-23  Ian Vollick  <vollick@chromium.org>

        [chromium] Implement keyframed animations for the cc thread.
        https://bugs.webkit.org/show_bug.cgi?id=77229

        Reviewed by James Robinson.

        * WebCore.gypi:
        * platform/graphics/chromium/LayerChromium.cpp:
        (WebCore::LayerChromium::hasActiveAnimation):
        (WebCore):
        * platform/graphics/chromium/LayerChromium.h:
        (LayerChromium):
        * platform/graphics/chromium/cc/CCActiveAnimation.cpp:
        (WebCore::CCActiveAnimation::CCActiveAnimation):
        (WebCore::CCActiveAnimation::isFinishedAt):
        (WebCore::CCActiveAnimation::trimTimeToCurrentIteration):
        (WebCore::CCActiveAnimation::cloneForImplThread):
        * platform/graphics/chromium/cc/CCActiveAnimation.h:
        (WebCore::CCActiveAnimation::curve):
        (CCActiveAnimation):
        * platform/graphics/chromium/cc/CCKeyframedAnimationCurve.cpp: Added.
        (WebCore::CCKeyframedFloatAnimationCurve::create):
        (WebCore):
        (WebCore::CCKeyframedFloatAnimationCurve::CCKeyframedFloatAnimationCurve):
        (WebCore::CCKeyframedFloatAnimationCurve::~CCKeyframedFloatAnimationCurve):
        (WebCore::CCKeyframedFloatAnimationCurve::duration):
        (WebCore::CCKeyframedFloatAnimationCurve::clone):
        (WebCore::CCKeyframedFloatAnimationCurve::getValue):
        (WebCore::CCKeyframedTransformAnimationCurve::create):
        (WebCore::CCKeyframedTransformAnimationCurve::CCKeyframedTransformAnimationCurve):
        (WebCore::CCKeyframedTransformAnimationCurve::~CCKeyframedTransformAnimationCurve):
        (WebCore::CCKeyframedTransformAnimationCurve::duration):
        (WebCore::CCKeyframedTransformAnimationCurve::clone):
        (WebCore::CCKeyframedTransformAnimationCurve::getValue):
        * platform/graphics/chromium/cc/CCKeyframedAnimationCurve.h: Added.
        (WebCore):
        (WebCore::CCFloatKeyframe::CCFloatKeyframe):
        (CCFloatKeyframe):
        (WebCore::CCTransformKeyframe::CCTransformKeyframe):
        (CCTransformKeyframe):
        (CCKeyframedFloatAnimationCurve):
        (CCKeyframedTransformAnimationCurve):
        * platform/graphics/chromium/cc/CCLayerAnimationController.cpp:
        (WebCore::CCLayerAnimationController::addAnimation):
        * platform/graphics/chromium/cc/CCLayerAnimationController.h:
        (WebCore::CCLayerAnimationController::hasActiveAnimation):
        (CCLayerAnimationController):
        * platform/graphics/chromium/cc/CCLayerAnimationControllerImpl.cpp:
        (WebCore::CCLayerAnimationControllerImpl::tickAnimations):

2012-02-23  Raymond Toy  <rtoy@google.com>

        Use MathExtras round() in timeToSampleFrame
        https://bugs.webkit.org/show_bug.cgi?id=79281

        Reviewed by Chris Rogers.

        No new tests. Existing tests cover this change.

        * platform/audio/AudioUtilities.cpp:
        (WebCore::AudioUtilities::timeToSampleFrame): Use round(). 

2012-02-23  Greg Billock  <gbillock@google.com>

        Don't clear IntentRequest callback pointers on stop()

        This causes re-entry into ScriptExecutionContext when
        the ActiveDOMCallback objects get deleted, which crashes.
        Instead, just de-activate the object and wait for
        context destruction to clean up.

        Test crashes consistently without fix and passes with fix.
        Added some test infrastructure to support this test.
        https://bugs.webkit.org/show_bug.cgi?id=78638

        Reviewed by Adam Barth.

        * Modules/intents/IntentRequest.cpp:
        (WebCore::IntentRequest::IntentRequest):
        (WebCore::IntentRequest::stop):
        (WebCore::IntentRequest::postResult):
        (WebCore::IntentRequest::postFailure):
        * Modules/intents/IntentRequest.h:
        (IntentRequest):

2012-02-23  Konrad Piascik  <kpiascik@rim.com>

        Upstream BlackBerry Cookie Management Classes
        https://bugs.webkit.org/show_bug.cgi?id=73654

        Reviewed by Rob Buis.

        Added ManualTests/cookieSpeedTest.html as well as tested functionality
        on the BlackBerry port with http://testsuites.opera.com/cookies/
        Passes all non Cookie 2 tests since Cookie 2 is not implemented/supported at this time.
        Error handling and extended tests do not all pass and will be updated with future bugs/patches.

        * platform/blackberry/CookieDatabaseBackingStore/CookieDatabaseBackingStore.cpp: Added.
        * platform/blackberry/CookieDatabaseBackingStore/CookieDatabaseBackingStore.h: Added.
        * platform/blackberry/CookieJarBlackBerry.cpp: Added.
        * platform/blackberry/CookieManager.cpp: Added.
        * platform/blackberry/CookieManager.h: Added.
        * platform/blackberry/CookieMap.cpp: Added.
        * platform/blackberry/CookieMap.h: Added.
        * platform/blackberry/CookieParser.cpp: Added.
        * platform/blackberry/CookieParser.h: Added.
        * platform/blackberry/ParsedCookie.cpp: Added.
        * platform/blackberry/ParsedCookie.h: Added.

2012-02-23  Levi Weintraub  <leviw@chromium.org>

        Switch drawLineForBoxSide to use integers
        https://bugs.webkit.org/show_bug.cgi?id=78647

        Reviewed by Eric Seidel.

        drawLineForBoxSide handles painting lines for boxes which must be done on pixel boundaries.
        Its interface doesn't make it possible to pixel snap properly within the function itself --
        it draws one side of the box at a time, and the logical right and bottom lines can only be
        properly determined using the logical top and left positions -- so it needs to be treated 
        like a graphics context function, whereby the caller handles the proper pixel snapping before
        passing the values in.

        No new tests. No change in behavior.

        * rendering/LayoutTypes.h:
        (WebCore::pixelSnappedIntRectFromEdges): convenience function for returning a pixel snapped
        int rect from four LayoutUnits that are its edges (as opposed to position and size).
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::paintColumnRules): Pixel snapping the column rule rect.
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paintOneBorderSide): Side rects are now IntRects by the time
        they get to paintOneBorderSide.
        (WebCore::calculateSideRect): Properly use RoundedRect as IntRects instead of LayoutRects.
        (WebCore::RenderBoxModelObject::paintBorderSides): Ditto.
        (WebCore::RenderBoxModelObject::paintBorder): Ditto.
        (WebCore::calculateSideRectIncludingInner): Ditto.
        * rendering/RenderBoxModelObject.h:
        (RenderBoxModelObject):
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::paintOutlineForLine): Outline widths are related to borders and stored
        as ints. Removing an unnecessary conversion to LayoutUnits. Pixel snapping the edges of the box.
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::drawLineForBoxSide): Moving back to integers and removing an
        unnecessary pixelSnappedIntRect call.
        (WebCore::RenderObject::paintOutline): Pixel snapping the column rule rect and using an integer
        for outlineOffset.
        * rendering/RenderObject.h:
        (RenderObject):

2012-02-23  Leo Yang  <leo.yang@torchmobile.com.cn>

        [BlackBerry] Upstream the BlackBerry change to platform/graphics/IntPoint.h
        https://bugs.webkit.org/show_bug.cgi?id=79094

        Reviewed by Antonio Gomes.

        Add conversion convenience between WebCore::IntPoint and BlackBerry::Platform::IntPoint.

        The porting can't be built yet, no new tests.

        * platform/graphics/IntPoint.h:
        (Platform):
        (IntPoint):

2012-02-23  Justin Novosad  <junov@chromium.org>

        [Chromium] Add profiling trace for deferred canvas rendering
        https://bugs.webkit.org/show_bug.cgi?id=79376

        Reviewed by Stephen White.

        No new tests.

        * platform/graphics/chromium/Canvas2DLayerChromium.cpp:
        (WebCore::Canvas2DLayerChromium::paintContentsIfDirty):
        Profiling trace for the entire method, as well as for
        calls to canvas flush and context flush, both of which may
        cause deferred operation to be executed.
        * platform/graphics/skia/PlatformContextSkia.cpp:
        (WebCore::PlatformContextSkia::bitmap):
        Inserting a profiling trace in this method because it may cause
        deferred draw commands to be executed.

2012-02-23  Shinya Kawanaka  <shinyak@chromium.org>

        ShadowRootList should have recalculation flag instead of ShadowRoot.
        https://bugs.webkit.org/show_bug.cgi?id=79071

        Reviewed by Hajime Morita.

        When light children or shadow children are changed, we currently re-construct a shadow subtree.
        However, when supporting multiple shadow subtrees, all shadow subtrees should be re-constructed.
        So ShadowRootList should have re-construction flag instead of ShadowRoot.

        Also, re-construction methods in ShadowRoot should be moved to ShadowRootList.

        No new tests, should be convered by existing tests.

        * dom/Element.cpp:
        (WebCore::Element::recalcStyle):
        (WebCore::Element::childrenChanged):
        * dom/NodeRenderingContext.cpp:
        (WebCore::NodeRenderingContext::hostChildrenChanged):
        * dom/ShadowRoot.cpp:
        (WebCore::ShadowRoot::ShadowRoot):
        (WebCore::ShadowRoot::list):
        * dom/ShadowRoot.h:
        (WebCore):
        (ShadowRoot):
        * dom/ShadowRootList.cpp:
        (WebCore::ShadowRootList::ShadowRootList):
        (WebCore::ShadowRootList::reattach):
        (WebCore):
        (WebCore::ShadowRootList::childNeedsStyleRecalc):
        (WebCore::ShadowRootList::needsStyleRecalc):
        (WebCore::ShadowRootList::recalcShadowTreeStyle):
        (WebCore::ShadowRootList::needsReattachHostChildrenAndShadow):
        (WebCore::ShadowRootList::hostChildrenChanged):
        (WebCore::ShadowRootList::setNeedsReattachHostChildrenAndShadow):
        (WebCore::ShadowRootList::reattachHostChildrenAndShadow):
        * dom/ShadowRootList.h:
        (WebCore):
        (ShadowRootList):
        (WebCore::ShadowRootList::clearNeedsReattachHostChildrenAndShadow):
        * html/shadow/HTMLContentElement.cpp:
        (WebCore::HTMLContentElement::attach):
        (WebCore::HTMLContentElement::detach):
        (WebCore::HTMLContentElement::parseAttribute):

2012-02-23  Roland Steiner  <rolandsteiner@chromium.org>

        Unreviewed: add clause in ASSERT missing from r108474.

        No new tests. (fix)

        * html/HTMLStyleElement.cpp:
        (WebCore::HTMLStyleElement::willRemove):

2012-02-23  Eric Seidel  <eric@webkit.org>

        Split out HTML constructors into new DOMWindowHTML suplemental idl
        https://bugs.webkit.org/show_bug.cgi?id=79377

        Reviewed by Adam Barth.

        * CMakeLists.txt:
        * DerivedSources.make:
        * DerivedSources.pri:
        * GNUmakefile.list.am:
        * WebCore.gypi:
        * WebCore.xcodeproj/project.pbxproj:
        * html/DOMWindowHTML.idl: Added.
        * page/DOMWindow.idl:

2012-02-23  Eric Seidel  <eric@webkit.org>

        Move SVG element constructors out of DOMWindow.idl into a new DOMWindowSVG.idl suplemental
        https://bugs.webkit.org/show_bug.cgi?id=79379

        Reviewed by Adam Barth.

        * CMakeLists.txt:
        * DerivedSources.make:
        * DerivedSources.pri:
        * GNUmakefile.list.am:
        * WebCore.gypi:
        * WebCore.xcodeproj/project.pbxproj:
        * page/DOMWindow.idl:
        * svg/DOMWindowSVG.idl: Added.

2012-02-23  Jonathan Backer  <backer@chromium.org>

        [chromium] Plumb video damage to the damage tracker.
        https://bugs.webkit.org/show_bug.cgi?id=79373

        Reviewed by James Robinson.

        * platform/graphics/chromium/VideoLayerChromium.cpp:
        (WebCore::VideoLayerChromium::contentChanged):
        (WebCore):
        * platform/graphics/chromium/VideoLayerChromium.h:
        (VideoLayerChromium):

2012-02-23  MORITA Hajime  <morrita@google.com>

        This test checks select attribute of content element is valid.
        https://bugs.webkit.org/show_bug.cgi?id=65595

        Reviewed by Dimitri Glazkov.

        This change introduces FrameTree::scopedChild() and
        FrameTree::scopedChild(), which can be used for scope-aware
        frame lookup. Using these, the named accessor and the indexed
        acceccor on Document, and Window.length are now TreeScope
        aware. They don't count iframes in Shadow DOM.

        This change also removes FrameTree::m_childCount since
        Frame::childCount() is no longer in the hot
        path. m_scopedChildCount is added instead.

        Test: fast/dom/shadow/iframe-shadow.html

        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::childFrameGetter):
        (WebCore::indexGetter):
        (WebCore::JSDOMWindow::getOwnPropertySlot):
        (WebCore::JSDOMWindow::getOwnPropertyDescriptor):
        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        (WebCore::V8DOMWindow::indexedPropertyGetter):
        (WebCore::V8DOMWindow::namedPropertyGetter):
        (WebCore::V8DOMWindow::namedSecurityCheck):
        (WebCore::V8DOMWindow::indexedSecurityCheck):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::length):
        * page/Frame.cpp:
        (WebCore::Frame::inScope):
        (WebCore):
        * page/Frame.h:
        (WebCore):
        (Frame):
        * page/FrameTree.cpp:
        (WebCore::FrameTree::actuallyAppendChild):
        (WebCore::FrameTree::removeChild):
        (WebCore::FrameTree::scopedChild):
        (WebCore):
        (WebCore::FrameTree::scopedChildCount):
        (WebCore::FrameTree::childCount):
        * page/FrameTree.h:
        (WebCore):
        (FrameTree):
        (WebCore::FrameTree::FrameTree):

2012-02-23  Philip Rogers  <pdr@google.com>

        Recompute font metrics on scale changes
        https://bugs.webkit.org/show_bug.cgi?id=75091

        Reviewed by Nikolas Zimmermann.

        SVG text metrics depend on the transform from renderer to the svg root
        which requires that we propagate transform changes down to text.
        This change adds a boolean for tracking transform changes to
        SVGViewportContainers and SVGTransformableContainers, and updates
        RenderSVGText::layout() to recalculate text metrics if the transform
        of an ancestor has changed.

        Tests: platform/mac/svg/text/text-rescale.html
               platform/mac/svg/text/text-viewbox-rescale.html
               svg/text/text-rescale.html
               svg/text/text-viewbox-rescale.html

        * rendering/RenderObject.h:
        (WebCore::RenderObject::isSVGTransformableContainer):
        (WebCore::RenderObject::isSVGViewportContainer):
        * rendering/svg/RenderSVGContainer.h:
        (WebCore::RenderSVGContainer::didTransformToRootUpdate):
        * rendering/svg/RenderSVGInlineText.cpp:
        (WebCore::RenderSVGInlineText::computeNewScaledFontForStyle):
        * rendering/svg/RenderSVGText.cpp:
        (WebCore::RenderSVGText::RenderSVGText):
        (WebCore::RenderSVGText::layout):
        * rendering/svg/RenderSVGText.h:
        (WebCore::RenderSVGText::setNeedsTextMetricsUpdate):
        (RenderSVGText):
        * rendering/svg/RenderSVGTransformableContainer.cpp:
        (WebCore::RenderSVGTransformableContainer::RenderSVGTransformableContainer):
        (WebCore::RenderSVGTransformableContainer::calculateLocalTransform):
        * rendering/svg/RenderSVGTransformableContainer.h:
        (WebCore::RenderSVGTransformableContainer::isSVGTransformableContainer):
        (WebCore::RenderSVGTransformableContainer::didTransformToRootUpdate):
        (RenderSVGTransformableContainer):
        * rendering/svg/RenderSVGViewportContainer.cpp:
        (WebCore::RenderSVGViewportContainer::RenderSVGViewportContainer):
        (WebCore::RenderSVGViewportContainer::calcViewport):
        * rendering/svg/RenderSVGViewportContainer.h:
        (WebCore::RenderSVGViewportContainer::didTransformToRootUpdate):
        (RenderSVGViewportContainer):
        * rendering/svg/SVGRenderSupport.cpp:
        (WebCore::SVGRenderSupport::transformToRootChanged):
        (WebCore):
        (WebCore::SVGRenderSupport::layoutChildren):
        * rendering/svg/SVGRenderSupport.h:
        (SVGRenderSupport):

2012-02-21  James Robinson  <jamesr@chromium.org>

        [chromium] Notify compositor of wheel event registration via ScrollingCoordinator
        https://bugs.webkit.org/show_bug.cgi?id=79133

        Reviewed by Dimitri Glazkov.

        This notifies the chromium compositor of changes to the number of wheel event handlers via ScrollingCoordinator
        instead of through ChromeClient/WebViewImpl. This is the path we'll use for other properties in the future and
        is more extensible for handling things other than the root layer.

        Property behavior is covered by new unit tests in LayerChromiumTests and CCLayerTreeHostImplTest.

        * page/scrolling/ScrollingCoordinator.cpp:
        * page/scrolling/ScrollingCoordinator.h:
        (WebCore):
        (ScrollingCoordinator):
            Add a ScrollingCoordinatorPrivate so implementations can tack on additional data without having to #ifdef up
            ScrollingCoordinator.h/cpp
        * page/scrolling/ScrollingCoordinatorNone.cpp:
        (WebCore):
        (WebCore::ScrollingCoordinator::~ScrollingCoordinator):
        * page/scrolling/chromium/ScrollingCoordinatorChromium.cpp:
        (ScrollingCoordinatorPrivate):
            ScrollingCoordinatorPrivate in the chromium implementation keeps a reference to the scroll layer.
        (WebCore::ScrollingCoordinatorPrivate::ScrollingCoordinatorPrivate):
        (WebCore::ScrollingCoordinatorPrivate::~ScrollingCoordinatorPrivate):
        (WebCore::ScrollingCoordinatorPrivate::setScrollLayer):
        (WebCore::ScrollingCoordinatorPrivate::scrollLayer):
        (WebCore):
        (WebCore::ScrollingCoordinator::create):
        (WebCore::ScrollingCoordinator::~ScrollingCoordinator):
        (WebCore::ScrollingCoordinator::frameViewHorizontalScrollbarLayerDidChange):
        (WebCore::ScrollingCoordinator::frameViewVerticalScrollbarLayerDidChange):
        (WebCore::ScrollingCoordinator::setScrollLayer):
        (WebCore::ScrollingCoordinator::setNonFastScrollableRegion):
        (WebCore::ScrollingCoordinator::setScrollParameters):
        (WebCore::ScrollingCoordinator::setWheelEventHandlerCount):
        (WebCore::ScrollingCoordinator::setShouldUpdateScrollLayerPositionOnMainThread):
        * page/scrolling/mac/ScrollingCoordinatorMac.mm:
        (WebCore):
        (WebCore::ScrollingCoordinator::~ScrollingCoordinator):
        * platform/graphics/chromium/LayerChromium.cpp:
        (WebCore::LayerChromium::LayerChromium):
        (WebCore::LayerChromium::setHaveWheelEventHandlers):
        (WebCore):
        (WebCore::LayerChromium::pushPropertiesTo):
        * platform/graphics/chromium/LayerChromium.h:
        (LayerChromium):
        * platform/graphics/chromium/cc/CCInputHandler.h:
        * platform/graphics/chromium/cc/CCLayerImpl.cpp:
        (WebCore::CCLayerImpl::CCLayerImpl):
        * platform/graphics/chromium/cc/CCLayerImpl.h:
        (WebCore::CCLayerImpl::haveWheelEventHandlers):
        (WebCore::CCLayerImpl::setHaveWheelEventHandlers):
        (CCLayerImpl):
        * platform/graphics/chromium/cc/CCLayerTreeHost.cpp:
        (WebCore::CCLayerTreeHost::CCLayerTreeHost):
        (WebCore::CCLayerTreeHost::finishCommitOnImplThread):
        * platform/graphics/chromium/cc/CCLayerTreeHost.h:
        (CCLayerTreeHost):
        * platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:
        (WebCore::CCLayerTreeHostImpl::CCLayerTreeHostImpl):
        (WebCore::CCLayerTreeHostImpl::scrollBegin):
        * platform/graphics/chromium/cc/CCLayerTreeHostImpl.h:
        (CCLayerTreeHostImpl):

2012-02-23  No'am Rosenthal  <noam.rosenthal@nokia.com>

        [Qt][WK2] Clipping is broken
        https://bugs.webkit.org/show_bug.cgi?id=78677

        Reviewed by Simon Hausmann.

        Rework the clipping stack in TextureMapperGL.
        Instead of saving a stack of IntRect scissor clips, we save every clipping change in the
        stack, and reapply it when we end the clip. Popping the stack is almost free, since we
        don't reapply the stencil but simply change the stencil test index.

        In addition, we don't use a special shader for clipping, and we don't apply clipping for
        masked children, since they're already clipped because they're rendered into an intermediate
        buffer.

        This fixes exiting tests in LayoutTests/compositing/overflow.
        It also fixes asserts in the leaves demo, as well as asserts in nytimes.com and other sites.

        * page/FrameView.cpp:
        (WebCore::FrameView::paintContents):
        * platform/graphics/texmap/TextureMapperGL.cpp:
        (ClipState):
        (WebCore::TextureMapperGLData::SharedGLData::ClipState::ClipState):
        (SharedGLData):
        (WebCore::TextureMapperGLData::SharedGLData::pushClipState):
        (WebCore::TextureMapperGLData::SharedGLData::popClipState):
        (WebCore::TextureMapperGLData::SharedGLData::scissorClip):
        (WebCore::TextureMapperGLData::SharedGLData::applyCurrentClip):
        (TextureMapperGLData):
        (BitmapTextureGL):
        (WebCore::TextureMapperGLData::initStencil):
        (WebCore):
        (WebCore::TextureMapperGL::beginPainting):
        (WebCore::TextureMapperGL::endPainting):
        (WebCore::TextureMapperGL::drawTexture):
        (WebCore::BitmapTextureGL::initStencil):
        (WebCore::BitmapTextureGL::bind):
        (WebCore::BitmapTextureGL::destroy):
        (WebCore::TextureMapperGL::bindSurface):
        (WebCore::TextureMapperGL::beginScissorClip):
        (WebCore::TextureMapperGL::beginClip):
        (WebCore::TextureMapperGL::endClip):
        * platform/graphics/texmap/TextureMapperLayer.cpp:
        (WebCore::TextureMapperLayer::paintSelfAndChildren):
        * platform/graphics/texmap/TextureMapperShaderManager.cpp:
        * platform/graphics/texmap/TextureMapperShaderManager.h:

2012-02-23  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r108685.
        http://trac.webkit.org/changeset/108685
        https://bugs.webkit.org/show_bug.cgi?id=79414

        Broke Chromium builds (Requested by enne on #webkit).

        * Target.pri:
        * WebCore.pri:
        * platform/MIMETypeRegistry.cpp:
        (WebCore::initializeSupportedImageMIMETypes):
        (WebCore::initializeSupportedImageMIMETypesForEncoding):
        * platform/image-decoders/ImageDecoder.h:
        (WebCore::ImageFrame::getAddr):
        (ImageFrame):
        * platform/image-decoders/jpeg/JPEGImageDecoder.cpp:
        * platform/image-decoders/png/PNGImageDecoder.cpp:
        (WebCore):
        * platform/image-decoders/qt/ImageFrameQt.cpp:

2012-02-23  Koji Ishii  <kojiishi@gmail.com>

        CSS2:text-decoration: <rt> element should not inherit text-decoration property
        https://bugs.webkit.org/show_bug.cgi?id=71266

        Reviewed by Kentaro Hara.

        Tests: fast/ruby/text-decoration-in-descendants-ruby-expected.html
               fast/ruby/text-decoration-in-descendants-ruby.html

        The spec says "text decorations are not propagated to any out-of-flow descendants":
        http://www.w3.org/TR/2011/WD-css3-text-20110901/#decoration
        Floats etc. are fixed in bug 18611, but <rt> is not inline either and therefore
        it should be included; it was confirmed at a discussion at www-style.
        http://lists.w3.org/Archives/Public/www-style/2011Sep/0238.html

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::getTextDecorationColors):

2012-02-23  Zoltan Horvath  <zoltan@webkit.org>

        [Qt] Allow to use WebCore imagedecoders
        https://bugs.webkit.org/show_bug.cgi?id=32410

        Add ENABLE(QT_IMAGE_DECODER) guards around Qt imagedecoders and set it to default.
        By passing ENABLE_QT_IMAGE_DECODER=0 define to the build system WebKit will build
        with WebCore's imagedecoders.

        I added NO_RETURN attribute to 2 functions of PNG and JPEG decoders to avoid compiler warnings
        because in Qt-port we treat warning as errors (-Werror).

        I'm continuing the refactoring of this area and try to use Qt imagedecoders only in 
        cases when WebCore doesn't support the image format.

        Reviewed by Simon Hausmann.

        No behavior change, no need new tests.

        * Target.pri:
        * WebCore.pri:
        * platform/MIMETypeRegistry.cpp:
        (WebCore::initializeSupportedImageMIMETypes):
        (WebCore::initializeSupportedImageMIMETypesForEncoding):
        * platform/image-decoders/ImageDecoder.h:
        (WebCore::ImageFrame::getAddr):
        (ImageFrame):
        * platform/image-decoders/jpeg/JPEGImageDecoder.cpp:
        NO_RETURN has been added to a function to avoid warning message.
        * platform/image-decoders/png/PNGImageDecoder.cpp:
        NO_RETURN has been added to a function to avoid warning message.
        (WebCore):
        * platform/image-decoders/qt/ImageFrameQt.cpp:
        (WebCore):
        (WebCore::ImageFrame::asNewNativeImage):

2012-02-23  Dana Jansens  <danakj@chromium.org>

        [chromium] Push CCLayerIteratorPosition struct into CCLayerIterator class.
        https://bugs.webkit.org/show_bug.cgi?id=75864

        Reviewed by James Robinson.

        * platform/graphics/chromium/cc/CCLayerIterator.cpp:
        (WebCore::CCLayerIteratorActions::BackToFront::begin):
        (WebCore::CCLayerIteratorActions::BackToFront::end):
        (WebCore::CCLayerIteratorActions::BackToFront::next):
        (WebCore::CCLayerIteratorActions::FrontToBack::begin):
        (WebCore::CCLayerIteratorActions::FrontToBack::end):
        (WebCore::CCLayerIteratorActions::FrontToBack::next):
        (WebCore::CCLayerIteratorActions::FrontToBack::goToHighestInSubtree):
        * platform/graphics/chromium/cc/CCLayerIterator.h:
        (WebCore::CCLayerIterator::CCLayerIterator):
        (WebCore::CCLayerIterator::operator++):
        (WebCore::CCLayerIterator::operator==):
        (WebCore::CCLayerIterator::operator->):
        (WebCore::CCLayerIterator::operator*):
        (WebCore::CCLayerIterator::representsTargetRenderSurface):
        (WebCore::CCLayerIterator::representsContributingRenderSurface):
        (WebCore::CCLayerIterator::currentLayer):
        (WebCore::CCLayerIterator::currentLayerRepresentsContributingRenderSurface):
        (WebCore::CCLayerIterator::currentLayerRepresentsTargetRenderSurface):
        (WebCore::CCLayerIterator::targetRenderSurfaceLayer):
        (WebCore::CCLayerIterator::targetRenderSurface):
        (WebCore::CCLayerIterator::targetRenderSurfaceChildren):
        * platform/graphics/chromium/cc/CCLayerIteratorPosition.h: Removed.

2012-02-23  Daniel Sievers  <sievers@chromium.org>

        [Chromium] Add video stream texture support
        https://bugs.webkit.org/show_bug.cgi?id=78398

        This upstreams the abstraction used on Android for
        hardware video decoding with the compositor.

        Most of the interfaces are kept generic and the core
        of this change is to allow texturing from an external
        texture while receiving notifications (on the compositor
        thread if we are running it) when there are new frames to
        be displayed.

        Reviewed by James Robinson.

        * platform/graphics/chromium/Extensions3DChromium.h:
        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::drawSingleTextureVideoQuad):
        (WebCore::LayerRendererChromium::drawRGBA):
        (WebCore::LayerRendererChromium::drawNativeTexture):
        (WebCore):
        (WebCore::LayerRendererChromium::drawStreamTexture):
        (WebCore::LayerRendererChromium::drawVideoQuad):
        (WebCore::LayerRendererChromium::streamTextureLayerProgram):
        (WebCore::LayerRendererChromium::cleanupSharedObjects):
        * platform/graphics/chromium/LayerRendererChromium.h:
        (LayerRendererChromium):
        * platform/graphics/chromium/ShaderChromium.cpp:
        (WebCore::VertexShaderVideoTransform::VertexShaderVideoTransform):
        (WebCore):
        (WebCore::VertexShaderVideoTransform::init):
        (WebCore::VertexShaderVideoTransform::getShaderString):
        (WebCore::FragmentShaderOESImageExternal::init):
        (WebCore::FragmentShaderOESImageExternal::getShaderString):
        * platform/graphics/chromium/ShaderChromium.h:
        (VertexShaderVideoTransform):
        (WebCore::VertexShaderVideoTransform::matrixLocation):
        (WebCore::VertexShaderVideoTransform::texTransformLocation):
        (WebCore::VertexShaderVideoTransform::texMatrixLocation):
        (WebCore):
        (FragmentShaderOESImageExternal):
        * platform/graphics/chromium/VideoFrameChromium.h:
        * platform/graphics/chromium/VideoFrameProvider.h:
        (Client):
        (VideoFrameProvider):
        * platform/graphics/chromium/cc/CCVideoDrawQuad.cpp:
        (WebCore::CCVideoDrawQuad::CCVideoDrawQuad):
        * platform/graphics/chromium/cc/CCVideoDrawQuad.h:
        (WebCore::CCVideoDrawQuad::matrix):
        (CCVideoDrawQuad):
        (WebCore::CCVideoDrawQuad::setMatrix):
        * platform/graphics/chromium/cc/CCVideoLayerImpl.cpp:
        (WebCore):
        (WebCore::CCVideoLayerImpl::CCVideoLayerImpl):
        (WebCore::convertVFCFormatToGC3DFormat):
        (WebCore::CCVideoLayerImpl::appendQuads):
        (WebCore::CCVideoLayerImpl::didReceiveFrame):
        (WebCore::CCVideoLayerImpl::didUpdateMatrix):
        (WebCore::CCVideoLayerImpl::setNeedsRedraw):
        * platform/graphics/chromium/cc/CCVideoLayerImpl.h:
        (WebCore):
        (CCVideoLayerImpl):

2012-02-23  Stephen White  <senorblanco@chromium.org>

        [chromium] Implement drop-shadow() CSS filter on composited layers.
        https://bugs.webkit.org/show_bug.cgi?id=79386

        Reviewed by James Robinson.

        Covered by css3/filters/effect-drop-shadow-hw.html

        * platform/graphics/chromium/cc/CCRenderSurfaceFilters.cpp:
        (WebCore::CCRenderSurfaceFilters::apply):
        * platform/graphics/filters/FilterOperation.h:
        (WebCore::DropShadowFilterOperation::movesPixels):

2012-02-23  Erik Arvidsson  <arv@chromium.org>

        Add support for InterfaceName in the bindings
        https://bugs.webkit.org/show_bug.cgi?id=79384

        Reviewed by Adam Barth.

        This makes the interface name part of the idl file instead of being hard coded into the code generators.

        * bindings/scripts/CodeGenerator.pm:
        (GetVisibleInterfaceName): Extracted from CodeGenerator{JS,V8}.pm and changed to look at the extended attribute.
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateImplementation):
        (GenerateConstructorDefinition):
        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateImplementation):
        * bindings/scripts/IDLAttributes.txt:
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore):
        * bindings/scripts/test/TestObj.idl:
        * bindings/scripts/test/V8/V8TestObj.cpp:
        (WebCore::ConfigureV8TestObjTemplate):
        * dom/DOMCoreException.idl: Set the InterfaceName.
        * html/DOMFormData.idl: Ditto.
        * plugins/DOMMimeType.idl: Ditto.
        * plugins/DOMMimeTypeArray.idl: Ditto.
        * plugins/DOMPlugin.idl: Ditto.
        * plugins/DOMPluginArray.idl: Ditto.

2012-02-22  Ryosuke Niwa  <rniwa@webkit.org>

        REGRESSION(r99076): WebKit pastes the trailing newline into a single-line text field
        https://bugs.webkit.org/show_bug.cgi?id=79305

        Reviewed by Tony Chang.

        The bug was caused by ReplacementFragment::m_hasInterchangeNewlineAtEnd not reset even when
        text field's beforeTextInserted event handler removed interchange new lines at the end.
        Because the event handler is responsible for trimming new lines, we need to recompute the values
        for m_hasInterchangeNewlineAt* after the event dispatch.

        Test: editing/input/paste-text-ending-with-interchange-newline.html

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

2012-02-23  Andreas Kling  <awesomekling@apple.com>

        Make use of StylePropertySet::setProperty(propertyID, CSSValue).
        <http://webkit.org/b/79374>

        Reviewed by Antti Koivisto.

        Use the new setProperty() overload that takes a CSSValue in more places. This allows us
        to get rid of 1/3 setProperty() overloads that don't expand shorthands.

        * css/StylePropertySet.h:
        * css/StylePropertySet.cpp:

            Remove the setProperty() overload for specific primitive value types. StyledElement
            can take care of this without help from StylePropertySet.

        * dom/StyledElement.h:
        * dom/StyledElement.cpp:
        (WebCore::StyledElement::setInlineStyleProperty):
        (WebCore::StyledElement::addPropertyToAttributeStyle):

            Switch some functions over to using the setProperty() overload that takes a CSSValue.

        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::applyBorderAttributeToStyle):
        * html/HTMLHRElement.cpp:
        (WebCore::HTMLHRElement::collectStyleForAttribute):
        * html/HTMLTableElement.cpp:
        (WebCore::HTMLTableElement::collectStyleForAttribute):
        * html/HTMLTablePartElement.cpp:
        (WebCore::HTMLTablePartElement::collectStyleForAttribute):

            Use shorthands where possible to shrink the code a bit. Pass border widths as CSS_PX
            values directly instead of making a CSSParser round-trip.

2012-02-23  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Build fix, use the strings in LocalizedStrings.cpp.

        * platform/wx/LocalizedStringsWx.cpp:
        (WebCore::localizedString):
        (WebCore):

2012-02-23  Alok Priyadarshi  <alokp@chromium.org>

        Microsoft IE fishtank demo causes assertion in RenderLayer::convertToLayerCoords
        https://bugs.webkit.org/show_bug.cgi?id=61964

        Reviewed by James Robinson.
        
        The assertion is caused with the following callstack:
        WebCore::RenderLayer::convertToLayerCoords
        WebCore::RenderLayerCompositor::layerWillBeRemoved
        WebCore::RenderLayer::removeChild
        WebCore::RenderLayer::removeOnlyThisLayer
        
        WebCore::RenderLayer::removeOnlyThisLayer removes itself from the parent
        before moving its children to its parent. When WebCore::RenderLayer::convertToLayerCoords
        is called for one of the children, it tries to walk to root only to stop at the immediate
        parent which was disconnected from the tree in WebCore::RenderLayer::removeOnlyThisLayer.
        If removal of layer is delayed until the children has been moved, the ASSERT is avoided.

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::removeOnlyThisLayer):

2012-02-23  Matthew Delaney  <mdelaney@apple.com>

        Fix for canvas breakage caused by r108597 from the following:
        https://bugs.webkit.org/show_bug.cgi?id=79317

        Reviewed by Oliver Hunt.

        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::paintsIntoCanvasBuffer):

2012-02-23  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: mad Redo to Cmd+Shift+Z, not Cmd+Y on a Mac.
        https://bugs.webkit.org/show_bug.cgi?id=79341

        Reviewed by Timothy Hatcher.

        * inspector/front-end/ElementsPanel.js:
        (WebInspector.ElementsPanel.prototype.handleShortcut):

2012-02-23  Ryosuke Niwa  <rniwa@webkit.org>

        Mac build fix after 108629.

        * WebCore.exp.in:

2012-02-23  Tom Sepez  <tsepez@chromium.org>

        [chromium] XSS Auditor bypass via javascript url and control characters
        https://bugs.webkit.org/show_bug.cgi?id=79154

        Reviewed by Adam Barth.

        Test: http/tests/security/xssAuditor/javascript-link-control-char2.html

        * html/parser/XSSAuditor.cpp:
        (WebCore):
        (WebCore::XSSAuditor::eraseDangerousAttributesIfInjected):

2012-02-23  Patrick Gansterer  <paroga@webkit.org>

        [CMake] Add WEBKIT_INCLUDE_CONFIG_FILES_IF_EXISTS macro
        https://bugs.webkit.org/show_bug.cgi?id=79371

        Reviewed by Daniel Bates.

        * CMakeLists.txt:

2012-02-23  Julien Chaffraix  <jchaffraix@webkit.org>

        Cleanup RenderBlock::moveChildrenTo
        https://bugs.webkit.org/show_bug.cgi?id=79319

        Reviewed by Eric Seidel.

        Refactoring, no change in behavior expected.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::moveChildrenTo):
        Removed inline check that was redundant, switched to |while| to a |for|
        to show what's going on more closely and adds a call to moveChildTo to
        share more code between the 2 functions.

2012-02-23  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] Add support for touch cancellation
        https://bugs.webkit.org/show_bug.cgi?id=79348

        Reviewed by Kenneth Rohde Christiansen.

        Map Qt touch cancel events to the WebCore equivalent.

        No new tests, unskipped existing test for Qt 5.

        * platform/PlatformTouchPoint.h:
        (PlatformTouchPoint):
        * platform/qt/PlatformTouchEventQt.cpp:
        (WebCore::PlatformTouchEvent::PlatformTouchEvent):
        * platform/qt/PlatformTouchPointQt.cpp:
        (WebCore::PlatformTouchPoint::PlatformTouchPoint):

2012-02-23  Erik Arvidsson  <arv@chromium.org>

        Unreviewed. Rebaseline binding test files.

        * bindings/scripts/test/GObject/WebKitDOMTestInterface.cpp:
        (webkit_dom_test_interface_supplemental_method1):
        (webkit_dom_test_interface_supplemental_method2):
        (webkit_dom_test_interface_get_supplemental_str1):
        (webkit_dom_test_interface_get_supplemental_str2):
        (webkit_dom_test_interface_set_supplemental_str2):
        (webkit_dom_test_interface_get_supplemental_node):
        (webkit_dom_test_interface_set_supplemental_node):
        (webkit_dom_test_interface_set_property):
        (webkit_dom_test_interface_get_property):

2012-02-23  Anders Carlsson  <andersca@apple.com>

        Crash in ScrollElasticityController::snapRubberBandTimerFired()
        https://bugs.webkit.org/show_bug.cgi?id=79372
        <rdar://problem/10915193>

        Reviewed by Andreas Kling.

        Invalidate the rubber-band timer in the ScrollingTreeNodeMac destructor.

        * page/scrolling/mac/ScrollingTreeNodeMac.h:
        (ScrollingTreeNodeMac):
        * page/scrolling/mac/ScrollingTreeNodeMac.mm:
        (WebCore::ScrollingTreeNodeMac::~ScrollingTreeNodeMac):
        (WebCore):

2012-02-23  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: add experiment that loads stylesheets as links
        https://bugs.webkit.org/show_bug.cgi?id=79340

        Reviewed by Timothy Hatcher.

        * inspector/front-end/Settings.js:
        (WebInspector.ExperimentsSettings):
        * inspector/front-end/View.js:
        (WebInspector.View.prototype._doLoadCSS):

2012-02-23  Adam Roben  <aroben@apple.com>

        Mac build fix after r108615

        * WebCore.exp.in: Added a missing export.

2012-02-23  Adam Barth  <abarth@webkit.org>

        Move MediaStream related declarations from DOMWindow to DOMWindowMediaStream
        https://bugs.webkit.org/show_bug.cgi?id=79343

        Reviewed by Eric Seidel.

        These declarations belong in the MEDIA_STREAM module.

        * GNUmakefile.list.am:
        * WebCore.gypi:
        * mediastream/DOMWindowMediaStream.idl: Added.
        * page/DOMWindow.idl:

2012-02-22  Igor Oliveira  <igor.o@sisa.samsung.com>

        Every call to RenderObject::setAnimatableStyle() iterates through all m_compositeAnimations: potentially O(N^2)
        https://bugs.webkit.org/show_bug.cgi?id=38025

        This patchs implements updateAnimationTimerForRenderer, it just checks the timeToNextService for
        the current RenderObject reducing the amount of iterations.

        Reviewed by Simon Fraser.

        * page/animation/AnimationController.cpp:
        (WebCore):
        (WebCore::AnimationControllerPrivate::updateAnimationTimerForRenderer):
        (WebCore::AnimationController::updateAnimations):
        * page/animation/AnimationControllerPrivate.h:
        (AnimationControllerPrivate):

2012-02-22  Hajime Morrita  <morrita@chromium.org>

        NOTIFICATIONS should be implemented as PageSupplement
        https://bugs.webkit.org/show_bug.cgi?id=79052

        Reviewed by Adam Barth.

        Turned NotificationController to a PageSupplement.

        No new tests. No behavior change.

        * notifications/NotificationController.cpp:
        (WebCore::NotificationController::clientFrom):
        (WebCore):
        (WebCore::NotificationController::supplementName):
        (WebCore::provideNotification):
        * notifications/NotificationController.h:
        (NotificationController):
        (WebCore::NotificationController::from):
        * notifications/NotificationPresenter.h:
        (WebCore):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::webkitNotifications):
        * page/Page.cpp:
        (WebCore::Page::Page):
        (WebCore::Page::PageClients::PageClients):
        * page/Page.h:
        (WebCore):
        (PageClients):
        (Page):

2012-02-22  Dmitry Lomov  <dslomov@google.com>

        [Chromium][V8] Support Uint8ClampedArray in postMessage
        https://bugs.webkit.org/show_bug.cgi?id=79291.

        Reviewed by Kenneth Russell.

        Covered by existing tests.

        * bindings/v8/SerializedScriptValue.cpp:

2012-02-22  Kentaro Hara  <haraken@chromium.org>

        Enable Geolocation bindings for GObject
        https://bugs.webkit.org/show_bug.cgi?id=79293

        Reviewed by Adam Barth.

        This patch adds "WebCore::" to supplemental method calls.
        This will solve the GTK build failure we have observed in the Geolocation API,
        and thus this patch enables the Geolocation API.

        * Modules/geolocation/NavigatorGeolocation.idl:
        * bindings/scripts/CodeGeneratorGObject.pm:
        (GenerateProperty):
        (GenerateFunction):

2012-02-22  MORITA Hajime  <morrita@google.com>

        [Refactoring] Align supplementName() values.
        https://bugs.webkit.org/show_bug.cgi?id=79311

        Reviewed by Adam Barth.

        No new tests. No behavioral change.

        * dom/DeviceOrientationController.cpp:
        (WebCore::DeviceOrientationController::supplementName):
        * mediastream/UserMediaController.cpp:
        (WebCore::UserMediaController::supplementName):

2012-02-22  Yuta Kitamura  <yutak@chromium.org>

        Unreviewed, rolling out r108602.
        http://trac.webkit.org/changeset/108602
        https://bugs.webkit.org/show_bug.cgi?id=78878

        Caused a couple of layout test failures on Chromium bots.

        * dom/Element.cpp:
        (WebCore::Element::childShouldCreateRenderer):
        * dom/Element.h:
        (Element):
        * dom/Node.h:
        (WebCore::Node::childShouldCreateRenderer):
        * dom/NodeRenderingContext.cpp:
        (WebCore::NodeRenderingContext::shouldCreateRenderer):
        * dom/NodeRenderingContext.h:
        (NodeRenderingContext):
        * html/HTMLDetailsElement.cpp:
        (WebCore::HTMLDetailsElement::childShouldCreateRenderer):
        * html/HTMLDetailsElement.h:
        (HTMLDetailsElement):
        * html/HTMLMediaElement.cpp:
        (WebCore):
        * html/HTMLMediaElement.h:
        (HTMLMediaElement):
        * html/HTMLMeterElement.cpp:
        * html/HTMLMeterElement.h:
        (HTMLMeterElement):
        * html/HTMLProgressElement.cpp:
        * html/HTMLProgressElement.h:
        (HTMLProgressElement):
        * html/HTMLSelectElement.cpp:
        * html/HTMLSelectElement.h:
        (HTMLSelectElement):
        * html/HTMLSummaryElement.cpp:
        * html/HTMLSummaryElement.h:
        (HTMLSummaryElement):
        * html/HTMLTextFormControlElement.cpp:
        * html/HTMLTextFormControlElement.h:
        (HTMLTextFormControlElement):
        * rendering/RenderButton.cpp:
        (WebCore::RenderButton::canHaveChildren):
        (WebCore):
        * rendering/RenderButton.h:
        (RenderButton):
        * rendering/RenderListBox.h:
        (WebCore::RenderListBox::canHaveChildren):
        (RenderListBox):
        * rendering/RenderMedia.h:
        * rendering/RenderMenuList.h:
        (WebCore::RenderMenuList::canHaveChildren):
        * rendering/RenderMeter.h:
        (WebCore::RenderMeter::canHaveChildren):
        * rendering/RenderProgress.h:
        (WebCore::RenderProgress::canHaveChildren):
        * rendering/RenderTextControl.h:
        (WebCore::RenderTextControl::canHaveChildren):
        * rendering/svg/RenderSVGRoot.h:
        (WebCore::RenderSVGRoot::canHaveChildren):
        * svg/SVGAElement.cpp:
        (WebCore::SVGAElement::childShouldCreateRenderer):
        * svg/SVGAElement.h:
        (SVGAElement):
        * svg/SVGAltGlyphElement.cpp:
        (WebCore::SVGAltGlyphElement::childShouldCreateRenderer):
        * svg/SVGAltGlyphElement.h:
        (SVGAltGlyphElement):
        * svg/SVGDocument.cpp:
        (WebCore::SVGDocument::childShouldCreateRenderer):
        * svg/SVGDocument.h:
        (SVGDocument):
        * svg/SVGElement.cpp:
        (WebCore::SVGElement::childShouldCreateRenderer):
        * svg/SVGElement.h:
        (SVGElement):
        * svg/SVGForeignObjectElement.cpp:
        (WebCore::SVGForeignObjectElement::childShouldCreateRenderer):
        * svg/SVGForeignObjectElement.h:
        (SVGForeignObjectElement):
        * svg/SVGSwitchElement.cpp:
        (WebCore::SVGSwitchElement::childShouldCreateRenderer):
        * svg/SVGSwitchElement.h:
        (SVGSwitchElement):
        * svg/SVGTRefElement.cpp:
        (WebCore::SVGTRefElement::childShouldCreateRenderer):
        * svg/SVGTRefElement.h:
        (SVGTRefElement):
        * svg/SVGTSpanElement.cpp:
        (WebCore::SVGTSpanElement::childShouldCreateRenderer):
        * svg/SVGTSpanElement.h:
        (SVGTSpanElement):
        * svg/SVGTextElement.cpp:
        (WebCore::SVGTextElement::childShouldCreateRenderer):
        * svg/SVGTextElement.h:
        (SVGTextElement):
        * svg/SVGTextPathElement.cpp:
        (WebCore::SVGTextPathElement::childShouldCreateRenderer):
        * svg/SVGTextPathElement.h:

2012-02-22  Abhishek Arya  <inferno@chromium.org>

        Crash in RenderBlock::addChildIgnoringAnonymousColumnBlocks.
        https://bugs.webkit.org/show_bug.cgi?id=79043

        Reviewed by Julien Chaffraix.

        Tests: fast/runin/runin-div-before-child.html
               fast/runin/runin-table-before-child.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::addChildIgnoringAnonymousColumnBlocks): handle
        the case of run-in elements and strengthen code to handle cases where
        beforeChild is incorrectly set.
        * rendering/RenderObject.h: remove anonymousContainer function since
        the new logic in RenderBlock does not need it.

2012-02-22  Hayato Ito  <hayato@chromium.org>

        Make ShadowRootList manage a node distribution.
        https://bugs.webkit.org/show_bug.cgi?id=79008

        Reviewed by Dimitri Glazkov.

        The result of node distributions is currently stored in
        ShadowRoot. To support multiple ShadowRoots, such node distribution
        information should be managed in one place per shadow host. Now
        ShadowRootList takes this responsibility on behalf of owing
        multiple ShadowRoots. Clients should ask ShadowRootList for such
        information, not for each ShadowRoot.

        No tests. No change in behavior.

        * dom/NodeRenderingContext.cpp:
        (WebCore::NodeRenderingContext::NodeRenderingContext):
        * dom/ShadowRoot.cpp:
        (WebCore::ShadowRoot::create):
        (WebCore::ShadowRoot::attach):
        * dom/ShadowRoot.h:
        (ShadowRoot):
        * dom/ShadowRootList.cpp:
        (WebCore::ShadowRootList::insertionPointFor):
        (WebCore):
        (WebCore::ShadowRootList::isSelectorActive):
        (WebCore::ShadowRootList::ensureSelector):
        * dom/ShadowRootList.h:
        (WebCore):
        (ShadowRootList):
        (WebCore::ShadowRootList::hasShadowRoot):
        (WebCore::ShadowRootList::youngestShadowRoot):
        (WebCore::ShadowRootList::oldestShadowRoot):
        (WebCore::ShadowRootList::selector):
        (WebCore::ShadowRootList::host):
        * html/shadow/HTMLContentElement.cpp:
        (WebCore::HTMLContentElement::attach):
        (WebCore::HTMLContentElement::detach):
        * html/shadow/HTMLContentSelector.cpp:
        (WebCore::HTMLContentSelector::willSelectOver):
        * html/shadow/HTMLContentSelector.h:
        (HTMLContentSelector):

2012-02-22  Wei James  <james.wei@intel.com>

        Add multi channels support in AudioBus and AudioBufferSourceNode
        https://bugs.webkit.org/show_bug.cgi?id=79017

        Reviewed by Chris Rogers.

        Tests: webaudio/up-mixing-mono-51.html
               webaudio/up-mixing-mono-stereo.html
               webaudio/up-mixing-stereo-51.html

        * platform/audio/AudioBus.cpp:
        (WebCore::AudioBus::copyFrom):
        (WebCore::AudioBus::sumFrom):
        (WebCore::AudioBus::processWithGainFromMonoStereo):
        (WebCore::AudioBus::processWithGainFrom):

2012-02-22  Kentaro Hara  <haraken@chromium.org>

        [Supplemental] should support constants
        https://bugs.webkit.org/show_bug.cgi?id=79303

        Reviewed by Adam Barth.

        Given that we have

            interface [Supplemental=Y] X { constant int A = 123; }

        then the code generator should generate

            X::A

        to refer to the constant. However, the current code generator generates Y::A instead.
        This patch fixes it.

        Test: bindings/scripts/test/TestSupplemental.idl

        * bindings/scripts/CodeGenerator.pm: Modified as described above.
        (GenerateCompileTimeCheckForEnumsIfNeeded):

        * bindings/scripts/test/JS/JSTestInterface.cpp: Updated run-bindings-tests results.
        (WebCore):
        * bindings/scripts/test/V8/V8TestInterface.cpp: Ditto.
        (WebCore):

        * page/DOMWindow.h: Moved DOMWindow::FileSystemType to DOMWindowFileSystem::FileSystemType.
        (DOMWindow):
        * fileapi/DOMWindowFileSystem.h: Ditto.
        (DOMWindowFileSystem):
        * fileapi/DOMWindowFileSystem.cpp: Ditto.
        (WebCore):

2012-02-22  MORITA Hajime  <morrita@google.com>

        Adding a ShadowRoot to image-backed element causes a crash
        https://bugs.webkit.org/show_bug.cgi?id=78878

        Reviewed by Dimitri Glazkov.

        The crash happened because NodeRenderingContext tried to append a
        child to a renderer regardless one isn't capable of holding any
        children if it appears in the shadow attaching phase. RenderImage
        is one of such renderer classes which aren't capable.

        NodeRenderingContext decide whether the contextual node as a child
        can create its renderer based on RenderObject::canHaveChildren()
        and Node::childShouldCreateRenderer(). But the responsibility
        between these two methods are getting confused. which results this
        unfortuante crash path.

        This change re-aligns the responsibility:

        - Now canHaveChildren() purely declares the ability of the
          renderer. If the renderer is capable of having children, it
          return true regardless of HTML semantics.

        - On the other hand, childShouldCreateRenderer() cares about the
          semantics. If the element doesn't allow children to be rendered,
          this returns false.

        - Note that these decision on elements are contextual. Each element
          needs to know which role it is playing in the tree composition
          algorithm of Shadow DOM. That's why the method parameter is changed
          from Node* to NodeRenderingContext.

        With this change, some decision points are moved from a renderer to an
        element. Following renderers no longer stop reject having children:

        - RenderButton, RenderListBox, RenderMenuList, RenderMeter,
          RenderProgress, RenderTextControl.

        Corresponding element for such a render (HTMLProgressElement of
        RenderProgress for exaple) now cares about that.

        Tests: fast/dom/shadow/shadow-on-image-expected.html
        fast/dom/shadow/shadow-on-image.html

        * dom/Element.cpp:
        (WebCore::Element::childShouldCreateRenderer):
        * dom/Element.h:
        (Element):
        * dom/Node.h:
        * dom/NodeRenderingContext.cpp:
        (WebCore::NodeRenderingContext::shouldCreateRenderer):
        * dom/NodeRenderingContext.h:
        (NodeRenderingContext):
        (WebCore::NodeRenderingContext::isOnEncapsulationBoundary):
        (WebCore):
        * html/HTMLDetailsElement.cpp:
        (WebCore::HTMLDetailsElement::childShouldCreateRenderer):
        * html/HTMLDetailsElement.h:
        (HTMLDetailsElement):
        * html/HTMLMeterElement.cpp:
        (WebCore::HTMLMeterElement::childShouldCreateRenderer):
        (WebCore):
        * html/HTMLMeterElement.h:
        (HTMLMeterElement):
        * html/HTMLProgressElement.cpp:
        (WebCore::HTMLProgressElement::childShouldCreateRenderer):
        * html/HTMLMediaElement.h:
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::childShouldCreateRenderer):
        (WebCore):
        * html/HTMLProgressElement.h:
        (HTMLProgressElement):
        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::childShouldCreateRenderer):
        (WebCore):
        * html/HTMLSelectElement.h:
        (HTMLSelectElement):
        * html/HTMLSummaryElement.cpp:
        * html/HTMLSummaryElement.h:
        (HTMLSummaryElement):
        * html/HTMLTextFormControlElement.cpp:
        * html/HTMLTextFormControlElement.h:
        (HTMLTextFormControlElement):
        * rendering/RenderButton.cpp:
        * rendering/RenderButton.h:
        (RenderButton):
        * rendering/RenderListBox.h:
        (RenderListBox):
        * rendering/RenderMedia.h:
        (WebCore::RenderMedia::canHaveChildren):
        * rendering/RenderMenuList.h:
        * rendering/RenderMeter.h:
        * rendering/RenderProgress.h:
        * rendering/RenderTextControl.h:
        * rendering/svg/RenderSVGRoot.h:
        * svg/SVGAElement.cpp:
        (WebCore::SVGAElement::childShouldCreateRenderer):
        * svg/SVGAElement.h:
        (SVGAElement):
        * svg/SVGAltGlyphElement.cpp:
        (WebCore::SVGAltGlyphElement::childShouldCreateRenderer):
        * svg/SVGAltGlyphElement.h:
        (SVGAltGlyphElement):
        * svg/SVGDocument.cpp:
        (WebCore::SVGDocument::childShouldCreateRenderer):
        * svg/SVGDocument.h:
        (SVGDocument):
        * svg/SVGElement.cpp:
        (WebCore::SVGElement::childShouldCreateRenderer):
        * svg/SVGElement.h:
        (SVGElement):
        * svg/SVGForeignObjectElement.cpp:
        (WebCore::SVGForeignObjectElement::childShouldCreateRenderer):
        * svg/SVGForeignObjectElement.h:
        (SVGForeignObjectElement):
        * svg/SVGSwitchElement.cpp:
        (WebCore::SVGSwitchElement::childShouldCreateRenderer):
        * svg/SVGSwitchElement.h:
        (SVGSwitchElement):
        * svg/SVGTRefElement.cpp:
        (WebCore::SVGTRefElement::childShouldCreateRenderer):
        * svg/SVGTRefElement.h:
        (SVGTRefElement):
        * svg/SVGTSpanElement.cpp:
        (WebCore::SVGTSpanElement::childShouldCreateRenderer):
        * svg/SVGTSpanElement.h:
        (SVGTSpanElement):
        * svg/SVGTextElement.cpp:
        (WebCore::SVGTextElement::childShouldCreateRenderer):
        * svg/SVGTextElement.h:
        (SVGTextElement):
        * svg/SVGTextPathElement.cpp:
        (WebCore::SVGTextPathElement::childShouldCreateRenderer):
        * svg/SVGTextPathElement.h:

2012-02-22  Yong Li  <yoli@rim.com>

        [BlackBerry] NetworkJob can access deleted objects.
        https://bugs.webkit.org/show_bug.cgi?id=79246

        Reviewed by Antonio Gomes.

        When a NetworkJob is created by unload handler, we still need
        to send the request to the server, but we shouldn't save and
        keep using the Frame pointer because the frame is being detached.
        The NetworkJob will be cancelled by PingLoader as soon as it gets
        first response from host.
        Also see https://bugs.webkit.org/show_bug.cgi?id=30457.

        No new tests because existing test case is good enough like
        LayoutTests/http/tests/navigation/image-load-in-unload-handler.html.

        * platform/network/blackberry/NetworkJob.cpp:
        (WebCore::NetworkJob::NetworkJob):
        (WebCore::NetworkJob::initialize):

2012-02-22  Kenichi Ishibashi  <bashi@chromium.org>

        [WebSocket] Remove zlib.h from WebSocketDeflater.h
        https://bugs.webkit.org/show_bug.cgi?id=79298

        Use forward declaration and OwnPtr for z_stream to move zlib.h from
        .h file to .cpp file.

        Reviewed by Kent Tamura.

        No new tests. No behavior change.

        * websockets/WebSocketDeflater.cpp:
        (WebCore::WebSocketDeflater::WebSocketDeflater):
        (WebCore::WebSocketDeflater::initialize):
        (WebCore::WebSocketDeflater::~WebSocketDeflater):
        (WebCore::setStreamParameter):
        (WebCore::WebSocketDeflater::addBytes):
        (WebCore::WebSocketDeflater::finish):
        (WebCore::WebSocketDeflater::reset):
        (WebCore::WebSocketInflater::WebSocketInflater):
        (WebCore::WebSocketInflater::initialize):
        (WebCore::WebSocketInflater::~WebSocketInflater):
        (WebCore::WebSocketInflater::addBytes):
        (WebCore::WebSocketInflater::finish):
        * websockets/WebSocketDeflater.h:
        (WebSocketDeflater): Use OwnPtr for m_stream.
        (WebSocketInflater): Ditto.

2012-02-22  James Robinson  <jamesr@chromium.org>

        Remove GraphicsContext3D::paintsIntoCanvasBuffer and unify WebGL and canvas 2d logic
        https://bugs.webkit.org/show_bug.cgi?id=79317

        Reviewed by Kenneth Russell.

        HTMLCanvasElement::paint needs to know whether to attempt to paint the canvas buffer for its context. In the
        case of an accelerated canvas or WebGL context, unless we are printing it is typically the composited layer's
        responsibility to present the contents and the element itself is only responsible for backgrounds, borders and
        the like.  This removes a rather indirect path that WebGL content used to take to accomplish this and unifies
        the logic with CanvasRenderingContext2D's, which has the exact same needs.

        Covered by existing canvas layout tests.

        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::paintsIntoCanvasBuffer):
        (WebCore):
        (WebCore::HTMLCanvasElement::paint):
        * html/HTMLCanvasElement.h:
        (HTMLCanvasElement):
        * html/canvas/CanvasRenderingContext.h:
        * html/canvas/CanvasRenderingContext2D.cpp:
        * html/canvas/CanvasRenderingContext2D.h:
        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore):
        * html/canvas/WebGLRenderingContext.h:
        * platform/graphics/GraphicsContext3D.h:

2012-02-22  Pablo Flouret  <pablof@motorola.com>

        PopStateEvent.state should use the same object as history.state
        https://bugs.webkit.org/show_bug.cgi?id=77493

        Reviewed by Kentaro Hara.

        Tests: fast/loader/stateobjects/state-attribute-history-getter.html
               fast/loader/stateobjects/state-attribute-popstate-event.html

        * bindings/js/JSPopStateEventCustom.cpp:
        (WebCore):
        (WebCore::cacheState):
        (WebCore::JSPopStateEvent::state):
        * bindings/v8/V8HiddenPropertyName.h:
        (WebCore):
        * bindings/v8/custom/V8HistoryCustom.cpp:
        (WebCore::V8History::stateAccessorGetter):
        (WebCore::V8History::pushStateCallback):
        (WebCore::V8History::replaceStateCallback):
        * bindings/v8/custom/V8PopStateEventCustom.cpp:
        (WebCore):
        (WebCore::cacheState):
        (WebCore::V8PopStateEvent::stateAccessorGetter):
        * dom/Document.cpp:
        (WebCore::Document::enqueuePopstateEvent):
        * dom/PopStateEvent.cpp:
        (WebCore::PopStateEvent::PopStateEvent):
        (WebCore::PopStateEvent::create):
        * dom/PopStateEvent.h:
        (WebCore):
        (PopStateEvent):
        (WebCore::PopStateEvent::history):
        * dom/PopStateEvent.idl:
        * page/History.cpp:
        (WebCore::History::stateChanged):
        (WebCore):
        (WebCore::History::isSameAsCurrentState):
        * page/History.h:
        (History):

2012-02-22  Adam Klein  <adamk@chromium.org>

        Remove obsolete FIXMEs from ContainerNode
        https://bugs.webkit.org/show_bug.cgi?id=79295

        Reviewed by Ryosuke Niwa.

        Each of these three identical FIXMEs has since been fixed by adding
        "RefPtr<Node> protect(this)" at the top of each method.

        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::insertBefore):
        (WebCore::ContainerNode::replaceChild):
        (WebCore::ContainerNode::removeChild):
2012-02-22  Dmitry Lomov  <dslomov@google.com>

        [JSC] Implement ArrayBuffer and typed array cloning in JSC
        https://bugs.webkit.org/show_bug.cgi?id=79294

        Reviewed by Oliver Hunt.

        Covered by existing tests.

        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::typedArrayElementSize):
        (WebCore):
        (WebCore::CloneSerializer::dumpArrayBufferView):
        (CloneSerializer):
        (WebCore::CloneSerializer::dumpIfTerminal):
        (WebCore::CloneSerializer::write):
        (WebCore::CloneDeserializer::readArrayBufferViewSubtag):
        (CloneDeserializer):
        (WebCore::CloneDeserializer::readArrayBuffer):
        (WebCore::CloneDeserializer::readArrayBufferView):
        (WebCore::CloneDeserializer::getJSValue):
        (WebCore::CloneDeserializer::readTerminal):

2012-02-22  Adrienne Walker  <enne@google.com>

        [chromium] Unreviewed speculative chromium-mac build fix.
        https://bugs.webkit.org/show_bug.cgi?id=75874

        This broke in r108581.

        * platform/graphics/chromium/cc/CCLayerAnimationController.h:
        (WebCore):

2012-02-22  Raymond Toy  <rtoy@google.com>

        exponentialRampToValue doesn't use starting value
        https://bugs.webkit.org/show_bug.cgi?id=78035

        Reviewed by Chris Rogers.

        Test: webaudio/audioparam-exponentialRampToValueAtTime.html

        * webaudio/AudioParamTimeline.cpp:
        (WebCore::AudioParamTimeline::valuesForTimeRangeImpl): Set
        starting value for exponential ramp.

2012-02-22  Andreas Kling  <awesomekling@apple.com>

        Make parsing color presentation attributes do less pointless work.
        <http://webkit.org/b/79304>

        Reviewed by Antti Koivisto.

        Let HTMLElement::addHTMLColorToStyle() construct the color CSSValue directly
        rather than passing a string that has to go through CSSParser.

        * css/StylePropertySet.cpp:
        (WebCore::StylePropertySet::setProperty):
        * css/StylePropertySet.h:

            Added a setProperty(propertyID, CSSValue) overload that expands shorthand
            properties if necessary. Also added a little comment about the behavior
            differences between setProperty() overloads.

        * html/HTMLElement.cpp:
        (WebCore::parseColorStringWithCrazyLegacyRules):

            Changed this to return an RGBA32.

        (WebCore::HTMLElement::addHTMLColorToStyle):

            Figure out the RGB value and construct a (pooled) CSSValue directly.

2012-02-22  Ian Vollick  <vollick@chromium.org>

        [chromium] Plumb from GraphicsLayer to the cc thread animation code
        https://bugs.webkit.org/show_bug.cgi?id=75874

        Reviewed by James Robinson.

        * WebCore.gypi:
        * page/Settings.cpp:
        (WebCore::Settings::Settings):
        * page/Settings.h:
        (WebCore::Settings::setThreadedAnimationEnabled):
        (WebCore::Settings::threadedAnimationEnabled):
        (Settings):
        * platform/graphics/chromium/GraphicsLayerChromium.cpp:
        (std):
        (WebCore::GraphicsLayerChromium::addChild):
        (WebCore::GraphicsLayerChromium::addAnimation):
        (WebCore):
        (WebCore::GraphicsLayerChromium::pauseAnimation):
        (WebCore::GraphicsLayerChromium::removeAnimation):
        (WebCore::GraphicsLayerChromium::suspendAnimations):
        (WebCore::GraphicsLayerChromium::resumeAnimations):
        (WebCore::GraphicsLayerChromium::setContentsToMedia):
        (WebCore::GraphicsLayerChromium::updateLayerPreserves3D):
        (WebCore::GraphicsLayerChromium::mapAnimationNameToId):
        * platform/graphics/chromium/GraphicsLayerChromium.h:
        (GraphicsLayerChromium):
        * platform/graphics/chromium/LayerChromium.cpp:
        (WebCore::LayerChromium::LayerChromium):
        (WebCore::LayerChromium::addAnimation):
        (WebCore):
        (WebCore::LayerChromium::pauseAnimation):
        (WebCore::LayerChromium::removeAnimation):
        (WebCore::LayerChromium::suspendAnimations):
        (WebCore::LayerChromium::resumeAnimations):
        (WebCore::LayerChromium::setLayerAnimationController):
        (WebCore::LayerChromium::pushPropertiesTo):
        * platform/graphics/chromium/LayerChromium.h:
        (WebCore):
        (LayerChromium):
        (WebCore::LayerChromium::layerAnimationController):
        (WebCore::LayerChromium::numChildren):
        * platform/graphics/chromium/cc/CCActiveAnimation.cpp:
        (WebCore::CCActiveAnimation::create):
        (WebCore):
        (WebCore::CCActiveAnimation::CCActiveAnimation):
        (WebCore::CCActiveAnimation::~CCActiveAnimation):
        (WebCore::CCActiveAnimation::isWaiting):
        (WebCore::CCActiveAnimation::isRunningOrHasRun):
        (WebCore::CCActiveAnimation::cloneForImplThread):
        (WebCore::CCActiveAnimation::synchronizeProperties):
        * platform/graphics/chromium/cc/CCActiveAnimation.h:
        (CCActiveAnimation):
        (WebCore::CCActiveAnimation::AnimationSignature::AnimationSignature):
        (AnimationSignature):
        (WebCore::CCActiveAnimation::id):
        (WebCore::CCActiveAnimation::group):
        (WebCore::CCActiveAnimation::signature):
        * platform/graphics/chromium/cc/CCAnimationCurve.h:
        (CCAnimationCurve):
        (CCTransformAnimationCurve):
        * platform/graphics/chromium/cc/CCAnimationEvents.h: Copied from Source/WebCore/platform/graphics/chromium/cc/CCAnimationCurve.h.
        (WebCore):
        (WebCore::CCAnimationStartedEvent::CCAnimationStartedEvent):
        (CCAnimationStartedEvent):
        * platform/graphics/chromium/cc/CCLayerAnimationController.cpp: Added.
        (WebCore):
        (WebCore::CCLayerAnimationController::CCLayerAnimationController):
        (WebCore::CCLayerAnimationController::~CCLayerAnimationController):
        (WebCore::CCLayerAnimationController::create):
        (WebCore::CCLayerAnimationController::addAnimation):
        (WebCore::CCLayerAnimationController::pauseAnimation):
        (WebCore::CCLayerAnimationController::removeAnimation):
        (WebCore::CCLayerAnimationController::suspendAnimations):
        (WebCore::CCLayerAnimationController::resumeAnimations):
        (WebCore::CCLayerAnimationController::synchronizeAnimations):
        (WebCore::CCLayerAnimationController::removeCompletedAnimations):
        (WebCore::CCLayerAnimationController::pushNewAnimationsToImplThread):
        (WebCore::CCLayerAnimationController::removeAnimationsCompletedOnMainThread):
        (WebCore::CCLayerAnimationController::pushAnimationProperties):
        (WebCore::CCLayerAnimationController::getActiveAnimation):
        (WebCore::CCLayerAnimationController::remove):
        * platform/graphics/chromium/cc/CCLayerAnimationController.h: Added.
        (WebCore):
        (CCLayerAnimationController):
        (WebCore::CCLayerAnimationController::activeAnimations):
        * platform/graphics/chromium/cc/CCLayerAnimationControllerImpl.cpp:
        (WebCore::CCLayerAnimationControllerImpl::~CCLayerAnimationControllerImpl):
        (WebCore):
        (WebCore::CCLayerAnimationControllerImpl::animate):
        (WebCore::CCLayerAnimationControllerImpl::add):
        (WebCore::CCLayerAnimationControllerImpl::getActiveAnimation):
        (WebCore::CCLayerAnimationControllerImpl::startAnimationsWaitingForNextTick):
        (WebCore::CCLayerAnimationControllerImpl::startAnimationsWaitingForStartTime):
        (WebCore::CCLayerAnimationControllerImpl::startAnimationsWaitingForTargetAvailability):
        (WebCore::CCLayerAnimationControllerImpl::purgeFinishedAnimations):
        (WebCore::CCLayerAnimationControllerImpl::tickAnimations):
        * platform/graphics/chromium/cc/CCLayerAnimationControllerImpl.h:
        (CCLayerAnimationControllerImplClient):
        (CCLayerAnimationControllerImpl):
        * platform/graphics/chromium/cc/CCLayerImpl.cpp:
        (WebCore::CCLayerImpl::CCLayerImpl):
        * platform/graphics/chromium/cc/CCLayerImpl.h:
        (CCLayerImpl):
        (WebCore::CCLayerImpl::id):
        (WebCore::CCLayerImpl::opacity):
        (WebCore::CCLayerImpl::transform):
        (WebCore::CCLayerImpl::bounds):
        (WebCore::CCLayerImpl::layerAnimationController):
        * platform/graphics/chromium/cc/CCLayerTreeHost.cpp:
        (WebCore::CCLayerTreeHost::finishCommitOnImplThread):
        (WebCore::CCLayerTreeHost::setAnimationEvents):
        (WebCore):
        (WebCore::CCLayerTreeHost::didBecomeInvisibleOnImplThread):
        * platform/graphics/chromium/cc/CCLayerTreeHost.h:
        (WebCore::CCSettings::CCSettings):
        (CCSettings):
        (CCLayerTreeHost):
        * platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:
        (WebCore::CCLayerTreeHostImpl::CCLayerTreeHostImpl):
        (WebCore::CCLayerTreeHostImpl::animate):
        (WebCore::CCLayerTreeHostImpl::animateLayersRecursive):
        (WebCore):
        (WebCore::CCLayerTreeHostImpl::animatePageScale):
        (WebCore::CCLayerTreeHostImpl::animateLayers):
        * platform/graphics/chromium/cc/CCLayerTreeHostImpl.h:
        (CCLayerTreeHostImplClient):
        (CCLayerTreeHostImpl):
        (WebCore::CCLayerTreeHostImpl::needsAnimateLayers):
        (WebCore::CCLayerTreeHostImpl::setNeedsAnimateLayers):
        * platform/graphics/chromium/cc/CCSingleThreadProxy.cpp:
        (WebCore::CCSingleThreadProxy::postAnimationEventsToMainThreadOnImplThread):
        (WebCore):
        * platform/graphics/chromium/cc/CCSingleThreadProxy.h:
        (CCSingleThreadProxy):
        (WebCore):
        (DebugScopedSetMainThread):
        (WebCore::DebugScopedSetMainThread::DebugScopedSetMainThread):
        (WebCore::DebugScopedSetMainThread::~DebugScopedSetMainThread):
        * platform/graphics/chromium/cc/CCThreadProxy.cpp:
        (WebCore::CCThreadProxy::postAnimationEventsToMainThreadOnImplThread):
        (WebCore):
        (WebCore::CCThreadProxy::setAnimationEvents):
        * platform/graphics/chromium/cc/CCThreadProxy.h:
        (CCThreadProxy):

2012-02-22  Anders Carlsson  <andersca@apple.com>

        Subframes with scrollable areas must be added to the non-fast scrollable region
        https://bugs.webkit.org/show_bug.cgi?id=79306
        <rdar://problem/10915564>

        Reviewed by Andreas Kling.

        When computing the non-fast scrollable region, add subframes with scrollable regions to the region.

        * page/scrolling/ScrollingCoordinator.cpp:
        (WebCore::computeNonFastScrollableRegion):

2012-02-22  Nate Chapin  <japhet@chromium.org>

        CachedResourceLoader ignores the Range header
        in determineRavlidationPolicy(), resulting in incorrect
        cache hits.

        Reviewed by Adam Barth.

        Test: http/tests/xmlhttprequest/range-test.html
        Test written by Aaron Colwell (acolwell@chromium.org).

        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::determineRevalidationPolicy):

2012-02-22  Antti Koivisto  <antti@apple.com>

        REGRESSION (r104060): Web font is not loaded if specified by link element dynamically inserted
        https://bugs.webkit.org/show_bug.cgi?id=79186

        Reviewed by Andreas Kling.

        Test: fast/css/font-face-insert-link.html
        
        If a dynamically inserted stylesheet contains @font-face rules, we may fail to update the rendering.
        
        Before r104060 the style selector was destroyed on every style change, and the font selector along with it.
        This is no longer the case and we can't rely on comparing font selector pointers when comparing Fonts
        for equality. This patch adds version number to the font selector and checks it in Font::operator==.
        The version number is incremented when new font-face rules are added to the font selector.
        
        FontFallbackList is an object shared between Fonts so the extra field shouldn't matter much in terms
        of memory.

        * css/CSSFontSelector.cpp:
        (WebCore::CSSFontSelector::CSSFontSelector):
        (WebCore::CSSFontSelector::addFontFaceRule):
        * css/CSSFontSelector.h:
        (CSSFontSelector):
        * platform/graphics/Font.cpp:
        (WebCore::Font::operator==):
        * platform/graphics/FontFallbackList.cpp:
        (WebCore::FontFallbackList::FontFallbackList):
        (WebCore::FontFallbackList::invalidate):
        * platform/graphics/FontFallbackList.h:
        (FontFallbackList):
        (WebCore::FontFallbackList::fontSelectorVersion):
        * platform/graphics/FontSelector.h:
        (FontSelector):

2012-02-22  Nate Chapin  <japhet@chromium.org>

        Prevent CachedRawResource from sending the same data
        chunk multiple times.
        https://bugs.webkit.org/show_bug.cgi?id=78810

        Reviewed by Adam Barth.

        If a CachedRawResource receives data while a CachedRawResourceCallback
        timer is active, the incremental data will be sent to the client, followed
        but all data received so far, resulting in invalid data. Resolving this adds
        complexity to CachedRawResource and requires making a few more CachedResource
        functions virtual, so push the callback logic into CachedResource where it can
        be implemented more cleanly.

        Test: inspector/debugger/script-formatter-console.html
            should no longer be flaky.

        * loader/cache/CachedRawResource.cpp: CachedRawResourceCallback renamed and moved to CachedResource.
        (WebCore::CachedRawResource::didAddClient): More or less the same as sendCallbacks() was.
        * loader/cache/CachedRawResource.h:
        * loader/cache/CachedResource.cpp:
        (WebCore::CachedResource::addClient): Check the return value of addClientToSet() to determine whether
            or not to call didAddClient.
        (WebCore::CachedResource::didAddClient): May be called during addClient(), or may be called on a timer.
            If called on a timer, move the client between sets.
        (WebCore::CachedResource::addClientToSet): Determine whether didAddClient() can be called synchronously and
            return true if it can.
        (WebCore::CachedResource::removeClient): Ensure we cancel pending callbacks if necessary.
        (WebCore::CachedResource::CachedResourceCallback::CachedResourceCallback): Renamed and moved from CachedRawResource.
        * loader/cache/CachedResource.h:
        (WebCore::CachedResource::hasClients): Check m_clientsAwaitingCallback as well as m_clients.
        (WebCore::CachedResource::CachedResourceCallback::schedule):
        (WebCore::CachedResource::hasClient): Helper for calling contains() on both m_clientsAwaitingCallback and m_clients.

2012-02-22  Daniel Bates  <dbates@webkit.org>

        Update change log entry for r108561 to reflect removal of "if (m_dispatchSoonList.isEmpty())".
        https://bugs.webkit.org/show_bug.cgi?id=78840

        Mention removal of unnecessary check for empty list m_dispatchSoonList in EventSender::cancelEvent().

        Also, fix the date in the change log entry for changeset r108562 since it landed today (02/22/2012).

2012-02-22  Ryosuke Niwa  <rniwa@webkit.org>

        Remove the remaining uses of CSSStyleDeclaration in Editor
        https://bugs.webkit.org/show_bug.cgi?id=78939

        Reviewed by Enrica Casucci.

        Changed the argument types of shouldApplyStyle, applyParagraphStyle, applyStyleToSelection,
        applyParagraphStyleToSelection, and computeAndSetTypingStyle in Editor from CSSStyleDeclaration
        to StylePropertySet.

        * WebCore.exp.in:
        * WebCore.xcodeproj/project.pbxproj:
        * editing/Editor.cpp:
        (WebCore::Editor::applyStyle):
        (WebCore::Editor::shouldApplyStyle):
        (WebCore::Editor::applyParagraphStyle):
        (WebCore::Editor::applyStyleToSelection):
        (WebCore::Editor::applyParagraphStyleToSelection):
        (WebCore::Editor::setBaseWritingDirection):
        (WebCore::Editor::computeAndSetTypingStyle):
        * editing/Editor.h:
        (WebCore):
        (Editor):
        * editing/EditorCommand.cpp:
        (WebCore::applyCommandToFrame):
        (WebCore::executeApplyParagraphStyle):
        (WebCore::executeMakeTextWritingDirectionLeftToRight):
        (WebCore::executeMakeTextWritingDirectionNatural):
        (WebCore::executeMakeTextWritingDirectionRightToLeft):
        * loader/EmptyClients.h:
        (WebCore::EmptyEditorClient::shouldApplyStyle):
        * page/DragController.cpp:
        (WebCore::DragController::concludeEditDrag):
        * page/EditorClient.h:
        (WebCore):
        (EditorClient):

2012-02-22  Daniel Bates  <dbates@webkit.org>

        Abstract ImageEventSender into a general purpose EventSender
        https://bugs.webkit.org/show_bug.cgi?id=78840

        Reviewed by Adam Barth.

        Abstract the functionality in ImageEventSender so that it can be used again.
        This functionality may be useful in fixing WebKit Bug #38995.

        No functionality was changed; no new tests.

        * GNUmakefile.list.am: Added EventSender.h.
        * Target.pri: Ditto.
        * WebCore.gypi: Ditto.
        * WebCore.vcproj/WebCore.vcproj: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Ditto.
        * dom/EventSender.h: Added.
        (WebCore):
        (EventSender):
        (WebCore::EventSender::eventType):
        (WebCore::EventSender::hasPendingEvents):
        (WebCore::EventSender::timerFired):
        (WebCore::::EventSender):
        (WebCore::::dispatchEventSoon):
        (WebCore::::cancelEvent): Removed unnecessary check for empty list m_dispatchSoonList;
        As far as I can tell this is an artifact of using a
        QPtrList data structure for this functionality when it was originally in
        DocumentImpl::removeImage() (see <http://trac.webkit.org/browser/trunk/WebCore/khtml/xml/DocumentImpl.cpp?rev=12515#L2302>),
        which actually removed items from a list (as opposed to zeroing them out as we do
        now).
        (WebCore::::dispatchPendingEvents):
        * loader/ImageLoader.cpp: Modified to use EventSender.
        (WebCore):
        (WebCore::ImageLoader::dispatchPendingEvent): Added; called by EventSender when the ImageLoader
        should dispatch a pending BeforeLoad or Load event.
        * loader/ImageLoader.h:
        (WebCore):
        (ImageLoader):

2012-02-22  Max Vujovic  <mvujovic@adobe.com>

        Paddings and borders on root SVG element with viewbox causes child SVG elements to be rendered with the incorrect size
        https://bugs.webkit.org/show_bug.cgi?id=78613

        Reviewed by Nikolas Zimmermann.

        When computing its localToBorderBoxTransform, RenderSVGRoot was using its width and height
        as the dimensions of the SVG viewport. However, width and height include CSS borders and
        paddings, which are not part of the SVG viewport area. Now, RenderSVGRoot uses its
        contentWidth and contentHeight, which correspond to the SVG viewport area.

        Tests: svg/custom/svg-root-padding-border-margin-expected.html
               svg/custom/svg-root-padding-border-margin.html

        * rendering/svg/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::buildLocalToBorderBoxTransform):

2012-02-22  Raphael Kubo da Costa  <kubo@profusion.mobi>

        [EFL] Get rid of GeolocationServiceEfl
        https://bugs.webkit.org/show_bug.cgi?id=79270

        Reviewed by Adam Barth.

        These were just a bunch of dummy files with no real functionality, and
        removing them helps the preparation of bug 78853, which will make
        client-based geolocation the default.

        No new tests, this functionality was not used.

        * PlatformEfl.cmake:
        * platform/efl/GeolocationServiceEfl.cpp: Removed.
        * platform/efl/GeolocationServiceEfl.h: Removed.

2012-02-22  Julien Chaffraix  <jchaffraix@webkit.org>

        Clean-up RenderTableSection::calcRowLogicalHeight
        https://bugs.webkit.org/show_bug.cgi?id=77705

        Reviewed by Eric Seidel.

        Refactoring / simplication of the code.

        This change removes some variables that were unneeded and were
        hiding what the code was really doing. Also some of the code was
        split and moved down to RenderTableCell.

        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::logicalHeightForRowSizing):
        * rendering/RenderTableCell.h:
        (RenderTableCell):
        Added the previous helper function to calculate the cell's
        adjusted logical height.

        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::calcRowLogicalHeight):
        Removed some variables, simplified the rowspan logic to be clearer
        (and added a comment about how we handle rowspans).

2012-02-22  Adam Barth  <abarth@webkit.org>

        Move FILE_SYSTEM code out of DOMWindow and into the fileapi folder
        https://bugs.webkit.org/show_bug.cgi?id=79259

        Reviewed by Eric Seidel.

        This patch is part of our ongoing effort to remove ifdefs from code
        classes.  The FILE_SYSTEM code in DOMWindow doesn't really have any
        necessary connection to DOMWindow.  DOMWindow is just the context
        object that the API hangs off of.

        This patch moves the FILE_SYSTEM code into the fileapi folder using
        [Supplemental].

        * CMakeLists.txt:
        * DerivedSources.make:
        * DerivedSources.pri:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * fileapi/DOMWindowFileSystem.cpp: Added.
        (WebCore):
        (WebCore::DOMWindowFileSystem::DOMWindowFileSystem):
        (WebCore::DOMWindowFileSystem::~DOMWindowFileSystem):
        (WebCore::DOMWindowFileSystem::webkitRequestFileSystem):
        (WebCore::DOMWindowFileSystem::webkitResolveLocalFileSystemURL):
        * fileapi/DOMWindowFileSystem.h: Added.
        (WebCore):
        (DOMWindowFileSystem):
        * fileapi/DOMWindowFileSystem.idl: Added.
        * page/DOMWindow.cpp:
        (WebCore):
        * page/DOMWindow.h:
        (WebCore):
        (DOMWindow):
        * page/DOMWindow.idl:

2012-02-22  Luke Macpherson   <macpherson@chromium.org>

        Re-implement many more HANDLE_INHERIT_AND_INITIAL_AND_PRIMITIVE macros in CSSStyleApplyProperty.
        https://bugs.webkit.org/show_bug.cgi?id=79200

        Reviewed by Andreas Kling.

        No new tests / refactoring only.

        * css/CSSStyleApplyProperty.cpp:
        (WebCore::CSSStyleApplyProperty::CSSStyleApplyProperty):
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::collectMatchingRulesForList):
        * rendering/style/RenderStyle.h:

2012-02-22  Tom Sepez  <tsepez@chromium.org>

        XSSAuditor bypass with <svg> tags and html-entities.
        https://bugs.webkit.org/show_bug.cgi?id=78836

        Reviewed by Adam Barth.

        Tests: http/tests/security/xssAuditor/iframe-onload-in-svg-tag.html
               http/tests/security/xssAuditor/script-tag-inside-svg-tag.html
               http/tests/security/xssAuditor/script-tag-inside-svg-tag2.html
               http/tests/security/xssAuditor/script-tag-inside-svg-tag3.html

        * html/parser/XSSAuditor.cpp:
        (WebCore::isNonCanonicalCharacter):
        (WebCore::isTerminatingCharacter):
        (WebCore):
        (WebCore::startsHTMLCommentAt):
        (WebCore::startsSingleLineCommentAt):
        (WebCore::fullyDecodeString):
        (WebCore::XSSAuditor::XSSAuditor):
        (WebCore::XSSAuditor::init):
        (WebCore::XSSAuditor::filterToken):
        (WebCore::XSSAuditor::filterStartToken):
        (WebCore::XSSAuditor::filterEndToken):
        (WebCore::XSSAuditor::filterCharacterToken):
        (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::decodedSnippetForAttribute):
        (WebCore::XSSAuditor::snippetForJavaScript):
        * html/parser/XSSAuditor.h:
        (XSSAuditor):

2012-02-22  Anders Carlsson  <andersca@apple.com>

        Crash when marking cached pages for full style recalc
        https://bugs.webkit.org/show_bug.cgi?id=79276
        <rdar://problem/10884036>

        Reviewed by Beth Dakin.

        Guard against a null history item.

        * history/BackForwardController.cpp:
        (WebCore::BackForwardController::markPagesForFullStyleRecalc):

2012-02-22  Ken Buchanan  <kenrb@chromium.org>

        Crash from empty anonymous block preceding :before content
        https://bugs.webkit.org/show_bug.cgi?id=78250

        Reviewed by David Hyatt.

        RenderListMarkers getting removed from the tree in updateMarkerLocation()
        can leave parent anonymous blocks behind with no children. This was
        confusing updateBeforeAfterContent() because it does not expect
        an empty block to precede :before content renderers.

        Fix is to remove the anonymous block if it will lose all of its children.

        * rendering/RenderListItem.cpp:
        (WebCore::RenderListItem::updateMarkerLocation):

2012-02-22  Abhishek Arya  <inferno@chromium.org>

        Crash due to accessing removed parent lineboxes when clearing view selection.
        https://bugs.webkit.org/show_bug.cgi?id=79264

        Reviewed by Eric Seidel.

        When our block needed a full layout, we were deleting our own lineboxes
        and letting descendant children (at any level in hierarchy and not just 
        immediate children) clear their own lineboxes as we keep laying them out.
        This was problematic because those descendant children lineboxes were
        pointing to removed parent lineboxes in the meantime. An example scenario
        where this would go wrong is first-letter object removal, which can cause
        clearing view selection, leading to accessing parent lineboxes. The patch
        modifies clearing the entire linebox tree upfront. It shouldn't introduce
        performance issues since it will eventually happen as we are laying out
        those children.
 
        Test: fast/css-generated-content/first-letter-textbox-parent-crash.html

        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::layoutInlineChildren):

2012-02-22  Abhishek Arya  <inferno@chromium.org>

        Cloning and linebox issues in multi-column layout.
        https://bugs.webkit.org/show_bug.cgi?id=78273

        Reviewed by Eric Seidel.

        Tests: fast/multicol/span/clone-flexbox.html
               fast/multicol/span/clone-summary.html
               fast/multicol/span/textbox-not-removed-crash.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::clone): Fix cloning algorithm to take
        care of cloning descendant classes of RenderBlock.
        (WebCore::RenderBlock::splitBlocks): When we move our inline children
        to cloneBlock, we need to clear our entire line box tree. Any descendant
        child in the hierarchy could be a part of our line box tree and will
        never get cleared since the child has moved to new parent cloneBlock.

2012-02-22  Tim Dresser  <tdresser@chromium.org>

        CCLayerTreeHostImpl calls didDraw more frequently than willDraw
        https://bugs.webkit.org/show_bug.cgi?id=79139

        Reviewed by James Robinson.

        Ensure that didDraw is called if and only if willDraw was called previously.

        CCLayerTreeHostImplTest.didDrawNotCalledOnHiddenLayer has been added to ensure that
        hidden layers, for which willDraw is not called, will also not have didDraw called.

        * platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:
        (WebCore::CCLayerTreeHostImpl::drawLayers):
        * platform/graphics/chromium/cc/CCVideoLayerImpl.cpp:
        (WebCore::CCVideoLayerImpl::didDraw):

2012-02-22  Levi Weintraub  <leviw@chromium.org>

        ScrollbarThemeComposite::thumbPosition uses the result of a divide by zero
        https://bugs.webkit.org/show_bug.cgi?id=78910

        Reviewed by Eric Seidel.

        Adding a check to avoid doing a floating point divide by zero and assigning NaN to an integer.
        This causes problems with our conversion to subpixel layout, which asserts when we overflow.

        * platform/ScrollbarThemeComposite.cpp:
        (WebCore::ScrollbarThemeComposite::thumbPosition):

2012-02-22  Raymond Liu  <raymond.liu@intel.com>

        Have the DynamicsCompressorNode support multi-channel data
        https://bugs.webkit.org/show_bug.cgi?id=77856

        Reviewed by Chris Rogers.

        * platform/audio/DynamicsCompressor.cpp:
        (WebCore::DynamicsCompressor::DynamicsCompressor):
        (WebCore::DynamicsCompressor::setEmphasisStageParameters):
        (WebCore::DynamicsCompressor::process):
        (WebCore::DynamicsCompressor::reset):
        (WebCore::DynamicsCompressor::setNumberOfChannels):
        (WebCore):
        * platform/audio/DynamicsCompressor.h:
        (DynamicsCompressor):
        * platform/audio/DynamicsCompressorKernel.cpp:
        (WebCore::DynamicsCompressorKernel::DynamicsCompressorKernel):
        (WebCore::DynamicsCompressorKernel::setNumberOfChannels):
        (WebCore):
        (WebCore::DynamicsCompressorKernel::setPreDelayTime):
        (WebCore::DynamicsCompressorKernel::process):
        (WebCore::DynamicsCompressorKernel::reset):
        * platform/audio/DynamicsCompressorKernel.h:
        (DynamicsCompressorKernel):
        * webaudio/DynamicsCompressorNode.cpp:
        (WebCore::DynamicsCompressorNode::DynamicsCompressorNode):
        (WebCore::DynamicsCompressorNode::initialize):

2012-02-22  Bear Travis  <betravis@adobe.com>

        Not correctly recalculating layout for elements within nested SVG elements
        https://bugs.webkit.org/show_bug.cgi?id=77535

        Reviewed by Dirk Schulze.

        Relatively positioned text is not correctly updating its position when the
        size of its nearest viewport changes. Updating to mark text for layout when
        viewPort size changes.
        
        Test: svg/repaint/inner-svg-change-viewPort-relative.svg

        * rendering/svg/SVGRenderSupport.cpp:
        (WebCore::SVGRenderSupport::layoutChildren):

2012-02-22  Alexei Svitkine  <asvitkine@chromium.org>

        [chromium] Fix remaining compositing/rubberbanding test failures
        https://bugs.webkit.org/show_bug.cgi?id=78008

        These were happening due to the fact that ScrollView wasn't updating
        the overhang layer when the contentsSize was updated. This is necessary
        because calculateOverhangAreasForPainting() takes the contentsSize into
        account when determining whether the overhang areas are visible.

        Reviewed by James Robinson.

        Re-enabled the following tests with updated baselines:
        * platform/chromium/compositing/rubberbanding/transform-overhang-e-expected.png:
        * platform/chromium/compositing/rubberbanding/transform-overhang-s-expected.png:
        * platform/chromium/compositing/rubberbanding/transform-overhang-se-expected.png:
        * platform/chromium/test_expectations.txt:

        * platform/ScrollView.cpp:
        (WebCore::ScrollView::setContentsSize):
        (WebCore::ScrollView::scrollContents):
        (WebCore::ScrollView::updateOverhangAreas):
        (WebCore):
        * platform/ScrollView.h:
        (ScrollView):

2012-02-22  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: [Regression] network worker tests crash on qt.
        https://bugs.webkit.org/show_bug.cgi?id=79263

        Reviewed by Pavel Feldman.

        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::createDecoder):
        (WebCore::InspectorPageAgent::cachedResourceContent):

2012-02-22  Adrienne Walker  <enne@google.com>

        Unreviewed, rolling out r108518.
        http://trac.webkit.org/changeset/108518
        https://bugs.webkit.org/show_bug.cgi?id=75864

        Breaks surfaceOcclusionWithOverlappingSiblingSurfaces unit test.

        * WebCore.gypi:
        * platform/graphics/chromium/cc/CCLayerIterator.cpp:
        (WebCore):
        (WebCore::CCLayerIteratorActions::BackToFront::begin):
        (WebCore::CCLayerIteratorActions::BackToFront::end):
        (WebCore::CCLayerIteratorActions::BackToFront::next):
        (WebCore::CCLayerIteratorActions::FrontToBack::begin):
        (WebCore::CCLayerIteratorActions::FrontToBack::end):
        (WebCore::CCLayerIteratorActions::FrontToBack::next):
        (WebCore::CCLayerIteratorActions::FrontToBack::goToHighestInSubtree):
        * platform/graphics/chromium/cc/CCLayerIterator.h:
        (WebCore):
        (WebCore::CCLayerIterator::CCLayerIterator):
        (WebCore::CCLayerIterator::operator++):
        (WebCore::CCLayerIterator::operator==):
        (WebCore::CCLayerIterator::operator->):
        (WebCore::CCLayerIterator::operator*):
        (WebCore::CCLayerIterator::representsTargetRenderSurface):
        (WebCore::CCLayerIterator::representsContributingRenderSurface):
        (WebCore::CCLayerIterator::targetRenderSurfaceLayer):
        (CCLayerIterator):
        (BackToFront):
        (FrontToBack):
        * platform/graphics/chromium/cc/CCLayerIteratorPosition.h: Added.
        (WebCore):
        (CCLayerIteratorPositionValue):
        (WebCore::CCLayerIteratorPosition::CCLayerIteratorPosition):
        (CCLayerIteratorPosition):
        (WebCore::CCLayerIteratorPosition::currentLayer):
        (WebCore::CCLayerIteratorPosition::currentLayerRepresentsContributingRenderSurface):
        (WebCore::CCLayerIteratorPosition::currentLayerRepresentsTargetRenderSurface):
        (WebCore::CCLayerIteratorPosition::targetRenderSurfaceLayer):
        (WebCore::CCLayerIteratorPosition::targetRenderSurface):
        (WebCore::CCLayerIteratorPosition::targetRenderSurfaceChildren):
        (WebCore::CCLayerIteratorPosition::operator==):

2012-02-22  Dan Bernstein  <mitz@apple.com>

        REGRESSION (r62632): page-break-inside: avoid is ignored
        https://bugs.webkit.org/show_bug.cgi?id=79262

        Reviewed by Adele Peterson.

        This was disabled in r62632 because of <http://webkit.org/b/41532>. Changes to the
        pagination code since then have invalidated that bug, so enabling the feature again does not
        re-introduce the bug.

        Updated expected results for printing/page-break-inside-avoid.html.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::adjustForUnsplittableChild):

2012-02-22  Philippe Normand  <pnormand@igalia.com>

        [GStreamer] webkitwebsrc: use HTTP referer provided by MediaPlayer
        https://bugs.webkit.org/show_bug.cgi?id=79236

        Reviewed by Martin Robinson.

        Store a pointer to the MediaPlayer object in the private structure
        of the WebKitWebSrc element so we can call its public methods,
        like ::referrer().

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::sourceChanged):
        * platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:
        (_WebKitWebSrcPrivate):
        * platform/graphics/gstreamer/WebKitWebSourceGStreamer.h:

2012-02-22  Martin Robinson  <mrobinson@igalia.com>

        [GTK] Clean build is broken when using make -j
        https://bugs.webkit.org/show_bug.cgi?id=76388

        No new tests. This is just a build fix.

        Use order-only dependencies to ensure that built sources are built before
        files that depend on them.

        * GNUmakefile.am: Establish an order-only dependency on some built sources before starting
        to build non-generated sources. Rename some temporary files and variables to be more consistent.
        * bindings/gobject/GNUmakefile.am: Updated to reflect new variable names.

2012-02-22  Dana Jansens  <danakj@chromium.org>

        [Chromium] New CCOcclusionTracker class with tests
        https://bugs.webkit.org/show_bug.cgi?id=78549

        Reviewed by James Robinson.

        Adds a CCOcclusionTrackerBase template class that is able to track occlusion
        of layers while traversing the layer tree from front-to-back, with typedefed
        versions for the main and impl threads.

        At each step of the front-to-back traversal, the class should be notified of
        changes to the current render target, and when done working with a layer, the
        layer is added the tracked occlusion.

        The class provides tests for checking if a rect in content space
        for a layer/surface is occluded by others in front of it.

        Unit tests: CCOcclusionTrackerTest.cpp

        * WebCore.gypi:
        * platform/graphics/chromium/cc/CCOcclusionTracker.cpp: Added.
        (WebCore):
        (WebCore::::enterTargetRenderSurface):
        (WebCore::::finishedTargetRenderSurface):
        (WebCore::transformSurfaceOpaqueRegion):
        (WebCore::::leaveToTargetRenderSurface):
        (WebCore::contentToScreenSpaceTransform):
        (WebCore::contentToTargetSurfaceTransform):
        (WebCore::computeOcclusionBehindLayer):
        (WebCore::::markOccludedBehindLayer):
        (WebCore::testContentRectOccluded):
        (WebCore::::occluded):
        (WebCore::::surfaceOccluded):
        (WebCore::rectSubtractRegion):
        (WebCore::computeUnoccludedContentRect):
        (WebCore::::unoccludedContentRect):
        (WebCore::::surfaceUnoccludedContentRect):
        (WebCore::::currentOcclusionInScreenSpace):
        (WebCore::::currentOcclusionInTargetSurface):
        * platform/graphics/chromium/cc/CCOcclusionTracker.h: Added.
        (WebCore):
        (CCOcclusionTrackerBase):
        (WebCore::CCOcclusionTrackerBase::CCOcclusionTrackerBase):
        (StackObject):

2012-02-22  Joshua Bell  <jsbell@chromium.org>

        [Chromium] IndexedDB: Integrate with about:tracing
        https://bugs.webkit.org/show_bug.cgi?id=78831

        Annotate interesting IDB functions so they show up in the
        tracing utility included in the Chromium port.

        Reviewed by Tony Chang.

        * WebCore.gypi:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/v8/IDBBindingUtilities.cpp:
        (WebCore::createIDBKeyFromSerializedValueAndKeyPath):
        (WebCore::injectIDBKeyIntoSerializedValue):
        * storage/IDBCursor.cpp:
        (WebCore::IDBCursor::direction):
        (WebCore::IDBCursor::key):
        (WebCore::IDBCursor::primaryKey):
        (WebCore::IDBCursor::value):
        (WebCore::IDBCursor::update):
        (WebCore::IDBCursor::continueFunction):
        (WebCore::IDBCursor::deleteFunction):
        * storage/IDBCursorBackendImpl.cpp:
        (WebCore::IDBCursorBackendImpl::direction):
        (WebCore::IDBCursorBackendImpl::key):
        (WebCore::IDBCursorBackendImpl::primaryKey):
        (WebCore::IDBCursorBackendImpl::value):
        (WebCore::IDBCursorBackendImpl::update):
        (WebCore::IDBCursorBackendImpl::continueFunction):
        (WebCore::IDBCursorBackendImpl::continueFunctionInternal):
        (WebCore::IDBCursorBackendImpl::deleteFunction):
        (WebCore::IDBCursorBackendImpl::prefetchContinue):
        (WebCore::IDBCursorBackendImpl::prefetchContinueInternal):
        (WebCore::IDBCursorBackendImpl::prefetchReset):
        (WebCore::IDBCursorBackendImpl::close):
        * storage/IDBDatabase.cpp:
        (WebCore::IDBDatabase::dispatchEvent):
        * storage/IDBIndex.cpp:
        (WebCore::IDBIndex::openCursor):
        (WebCore::IDBIndex::count):
        (WebCore::IDBIndex::openKeyCursor):
        (WebCore::IDBIndex::get):
        (WebCore::IDBIndex::getKey):
        * storage/IDBIndexBackendImpl.cpp:
        (WebCore::IDBIndexBackendImpl::openCursorInternal):
        (WebCore::IDBIndexBackendImpl::openCursor):
        (WebCore::IDBIndexBackendImpl::openKeyCursor):
        (WebCore::IDBIndexBackendImpl::countInternal):
        (WebCore::IDBIndexBackendImpl::count):
        (WebCore::IDBIndexBackendImpl::getInternal):
        (WebCore::IDBIndexBackendImpl::get):
        (WebCore::IDBIndexBackendImpl::getKey):
        * storage/IDBObjectStore.cpp:
        (WebCore::IDBObjectStore::name):
        (WebCore::IDBObjectStore::keyPath):
        (WebCore::IDBObjectStore::indexNames):
        (WebCore::IDBObjectStore::transaction):
        (WebCore::IDBObjectStore::get):
        (WebCore::IDBObjectStore::add):
        (WebCore::IDBObjectStore::put):
        (WebCore::IDBObjectStore::deleteFunction):
        (WebCore::IDBObjectStore::clear):
        (WebCore::IDBObjectStore::createIndex):
        (WebCore::IDBObjectStore::index):
        (WebCore::IDBObjectStore::openCursor):
        (WebCore::IDBObjectStore::count):
        * storage/IDBObjectStoreBackendImpl.cpp:
        (WebCore::IDBObjectStoreBackendImpl::get):
        (WebCore::IDBObjectStoreBackendImpl::getInternal):
        (WebCore::fetchKeyFromKeyPath):
        (WebCore::injectKeyIntoKeyPath):
        (WebCore::IDBObjectStoreBackendImpl::put):
        (WebCore::IDBObjectStoreBackendImpl::putInternal):
        (WebCore::IDBObjectStoreBackendImpl::deleteFunction):
        (WebCore::IDBObjectStoreBackendImpl::deleteInternal):
        (WebCore::IDBObjectStoreBackendImpl::clear):
        (WebCore::IDBObjectStoreBackendImpl::openCursor):
        (WebCore::IDBObjectStoreBackendImpl::openCursorInternal):
        (WebCore::IDBObjectStoreBackendImpl::count):
        (WebCore::IDBObjectStoreBackendImpl::countInternal):
        * storage/IDBRequest.cpp:
        (WebCore::IDBRequest::onSuccess):
        (WebCore::IDBRequest::onSuccessWithContinuation):
        (WebCore::IDBRequest::dispatchEvent):
        * storage/IDBTracing.h: Added.
        * storage/IDBTransaction.cpp:
        (WebCore::IDBTransaction::dispatchEvent):
        * storage/IDBTransactionBackendImpl.cpp:
        (WebCore::IDBTransactionBackendImpl::abort):
        (WebCore::IDBTransactionBackendImpl::commit):
        (WebCore::IDBTransactionBackendImpl::taskTimerFired):
        (WebCore::IDBTransactionBackendImpl::taskEventTimerFired):

2012-02-22  Dana Jansens  <danakj@chromium.org>

        [chromium] Push CCLayerIteratorPosition struct into CCLayerIterator class.
        https://bugs.webkit.org/show_bug.cgi?id=75864

        Reviewed by James Robinson.

        * platform/graphics/chromium/cc/CCLayerIterator.cpp:
        (WebCore::CCLayerIteratorActions::BackToFront::begin):
        (WebCore::CCLayerIteratorActions::BackToFront::end):
        (WebCore::CCLayerIteratorActions::BackToFront::next):
        (WebCore::CCLayerIteratorActions::FrontToBack::begin):
        (WebCore::CCLayerIteratorActions::FrontToBack::end):
        (WebCore::CCLayerIteratorActions::FrontToBack::next):
        (WebCore::CCLayerIteratorActions::FrontToBack::goToHighestInSubtree):
        * platform/graphics/chromium/cc/CCLayerIterator.h:
        (WebCore::CCLayerIterator::CCLayerIterator):
        (WebCore::CCLayerIterator::operator++):
        (WebCore::CCLayerIterator::operator==):
        (WebCore::CCLayerIterator::operator->):
        (WebCore::CCLayerIterator::operator*):
        (WebCore::CCLayerIterator::representsTargetRenderSurface):
        (WebCore::CCLayerIterator::representsContributingRenderSurface):
        (WebCore::CCLayerIterator::currentLayer):
        (WebCore::CCLayerIterator::currentLayerRepresentsContributingRenderSurface):
        (WebCore::CCLayerIterator::currentLayerRepresentsTargetRenderSurface):
        (WebCore::CCLayerIterator::targetRenderSurfaceLayer):
        (WebCore::CCLayerIterator::targetRenderSurface):
        (WebCore::CCLayerIterator::targetRenderSurfaceChildren):
        * platform/graphics/chromium/cc/CCLayerIteratorPosition.h: Removed.

2012-02-22  Pavel Feldman  <pfeldman@google.com>

        Web Inspector: console doesn't show properly arrays from which tail values have been deleted
        https://bugs.webkit.org/show_bug.cgi?id=79242

        Reviewed by Yury Semikhatsky.

        * English.lproj/localizedStrings.js:
        * inspector/front-end/ConsoleMessage.js:
        (WebInspector.ConsoleMessageImpl.prototype._printArray.appendUndefined):
        (WebInspector.ConsoleMessageImpl.prototype._printArray):

2012-02-22  Pavel Feldman  <pfeldman@google.com>

        Web Inspector: warning external font mime (font/font/woff).
        https://bugs.webkit.org/show_bug.cgi?id=79244

        Reviewed by Yury Semikhatsky.

        * inspector/front-end/Resource.js:

2012-02-22  Yury Semikhatsky  <yurys@chromium.org>

        Web Inspector: use dots as markers on the counter graphs
        https://bugs.webkit.org/show_bug.cgi?id=79243

        Changed counter graphs marker and counter text styles.

        Reviewed by Pavel Feldman.

        * English.lproj/localizedStrings.js:
        * inspector/front-end/MemoryStatistics.js:
        (WebInspector.MemoryStatistics):
        (WebInspector.MemoryStatistics.prototype._createCounterSidebarElement):
        (WebInspector.MemoryStatistics.prototype.addTimlineEvent):
        (WebInspector.MemoryStatistics.prototype._draw):
        (WebInspector.MemoryStatistics.prototype._onMouseOut):
        (WebInspector.MemoryStatistics.prototype._onMouseOver):
        (WebInspector.MemoryStatistics.prototype._onMouseMove):
        (WebInspector.MemoryStatistics.prototype._refreshCurrentValues):
        (WebInspector.MemoryStatistics.prototype._recordIndexAt):
        (WebInspector.MemoryStatistics.prototype._highlightCurrentPositionOnGraphs):
        (WebInspector.MemoryStatistics.prototype._clearMarkers):
        (WebInspector.MemoryStatistics.prototype._saveImageUnderMarker):
        (WebInspector.MemoryStatistics.prototype.refresh):
        (WebInspector.MemoryStatistics.prototype._drawPolyline):
        (WebInspector.MemoryStatistics.prototype._clear):
        * inspector/front-end/timelinePanel.css:
        (.memory-counter-sidebar-info):
        (.memory-counter-sidebar-info .title):
        (.memory-counter-sidebar-info .counter-value):

2012-02-22  Pavel Feldman  <pfeldman@google.com>

        Web Inspector: make 'glue asynchronous events' optional.
        https://bugs.webkit.org/show_bug.cgi?id=79240

        Reviewed by Yury Semikhatsky.

        * English.lproj/localizedStrings.js:
        * inspector/front-end/Images/statusbarButtonGlyphs.png:
        * inspector/front-end/TimelinePanel.js:
        (WebInspector.TimelinePanel.prototype.get statusBarItems):
        (WebInspector.TimelinePanel.prototype._createStatusbarButtons):
        (WebInspector.TimelinePanel.prototype._glueParentButtonClicked):
        (WebInspector.TimelinePanel.prototype._toggleStartAtZeroButtonClicked):
        (WebInspector.TimelinePanel.prototype._repopulateRecords):
        (WebInspector.TimelinePanel.prototype._findParentRecord):
        (WebInspector.TimelinePanel.prototype._innerAddRecordToTimeline):
        (WebInspector.TimelinePanel.prototype.sidebarResized):
        (WebInspector.TimelineCalculator.prototype.computeBarGraphPercentages):
        (WebInspector.TimelineCalculator.prototype.computeBarGraphWindowPosition):
        (WebInspector.TimelineRecordGraphRow):
        (WebInspector.TimelineRecordGraphRow.prototype.update):
        (WebInspector.TimelinePanel.FormattedRecord.prototype._calculateAggregatedStats):
        * inspector/front-end/timelinePanel.css:
        (.glue-async-status-bar-item .glyph):
        (.timeline-start-at-zero-status-bar-item .glyph):

2012-02-22  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: [REGRESSION] Console xhr logging is broken for async xhrs since r107672.
        https://bugs.webkit.org/show_bug.cgi?id=79229

        Reviewed by Pavel Feldman.

        Test: http/tests/inspector/console-xhr-logging-async.html

        * inspector/InspectorResourceAgent.cpp:
        (WebCore::InspectorResourceAgent::setInitialScriptContent):
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::didFinishLoading):

2012-02-22  Andrey Kosyakov  <caseq@chromium.org>

        Web Inspector: fix memory counters and start-at-zero modes of timeline panels to co-exist nicely
        https://bugs.webkit.org/show_bug.cgi?id=79241

        Reviewed by Yury Semikhatsky.

        * inspector/front-end/MemoryStatistics.js:
        (WebInspector.MemoryStatistics.prototype.addTimlineEvent):
        * inspector/front-end/TimelineOverviewPane.js:
        (WebInspector.TimelineOverviewPane):
        (WebInspector.TimelineOverviewPane.prototype._showTimelines):
        (WebInspector.TimelineOverviewPane.prototype._showMemoryGraph):
        (WebInspector.TimelineOverviewPane.prototype.setStartAtZero):
        (WebInspector.TimelineOverviewPane.prototype._onWindowChanged):
        * inspector/front-end/TimelinePanel.js:
        (WebInspector.TimelinePanel.prototype._timelinesOverviewModeChanged):

2012-02-22  Andrey Kosyakov  <caseq@chromium.org>

        Web Inspector: [experimental] add a mode to display timeline events aligned by the start time
        https://bugs.webkit.org/show_bug.cgi?id=79123

        Reviewed by Pavel Feldman.

        * inspector/front-end/Images/statusbarButtonGlyphs.png:
        * inspector/front-end/Settings.js:
        (WebInspector.ExperimentsSettings):
        * inspector/front-end/TimelineOverviewPane.js:
        (WebInspector.TimelineOverviewPane):
        (WebInspector.TimelineOverviewPane.prototype._showTimelines):
        (WebInspector.TimelineOverviewPane.prototype._showMemoryGraph):
        (WebInspector.TimelineOverviewPane.prototype._onWindowChanged):
        (WebInspector.TimelineOverviewPane.prototype.setStartAtZero):
        (WebInspector.TimelineOverviewPane.prototype.update):
        (WebInspector.TimelineOverviewPane.prototype.reset):
        (WebInspector.TimelineOverviewWindow):
        (WebInspector.TimelineOverviewWindow.prototype.reset):
        (WebInspector.TimelineOverviewWindow.prototype._setWindowPosition):
        (WebInspector.TimelineOverviewWindow.prototype.scrollWindow):
        (WebInspector.TimelineStartAtZeroOverview):
        (WebInspector.TimelineStartAtZeroOverview.prototype.reset):
        (WebInspector.TimelineStartAtZeroOverview.prototype.update):
        (WebInspector.TimelineStartAtZeroOverview.prototype._filterRecords):
        (WebInspector.TimelineStartAtZeroOverview.prototype._buildBar):
        (WebInspector.TimelineStartAtZeroOverview.prototype._onWindowChanged):
        * inspector/front-end/TimelinePanel.js:
        (WebInspector.TimelinePanel.prototype.get statusBarItems):
        (WebInspector.TimelinePanel.prototype._createStatusbarButtons):
        (WebInspector.TimelinePanel.prototype._toggleStartAtZeroButtonClicked):
        (WebInspector.TimelinePanel.prototype.get _startAtZero):
        (WebInspector.TimelinePanel.prototype._innerAddRecordToTimeline):
        (WebInspector.TimelinePanel.prototype.sidebarResized):
        (WebInspector.TimelinePanel.prototype._onRecordsCleared):
        (WebInspector.TimelinePanel.prototype._resetPanel):
        (WebInspector.TimelinePanel.prototype._scheduleRefresh):
        (WebInspector.TimelinePanel.prototype._refresh):
        (WebInspector.TimelinePanel.prototype._filterRecords):
        (WebInspector.TimelinePanel.prototype._refreshRecords):
        (WebInspector.TimelineCalculator.prototype.computeBarGraphWindowPosition):
        (WebInspector.TimelineStartAtZeroCalculator):
        (WebInspector.TimelineStartAtZeroCalculator.prototype.computeBarGraphPercentages):
        (WebInspector.TimelineStartAtZeroCalculator.prototype.computeBarGraphWindowPosition):
        (WebInspector.TimelineStartAtZeroCalculator.prototype.calculateWindow):
        (WebInspector.TimelineStartAtZeroCalculator.prototype.reset):
        (WebInspector.TimelineStartAtZeroCalculator.prototype.updateBoundaries):
        (WebInspector.TimelineStartAtZeroCalculator.prototype.formatValue):
        (WebInspector.TimelinePanel.FormattedRecord):
        (WebInspector.TimelinePanel.FormattedRecord.prototype._generateAggregatedInfo):
        (WebInspector.TimelinePanel.FormattedRecord.prototype._generatePopupContent):
        (WebInspector.TimelinePanel.FormattedRecord.prototype._calculateAggregatedStats):
        (WebInspector.TimelinePanel.FormattedRecord.prototype.get aggregatedStats):
        (WebInspector.TimelineModel.prototype.get records):
        (WebInspector.TimelinePresentationModel):
        (WebInspector.TimelinePresentationModel.prototype.reset):
        (WebInspector.TimelinePresentationModel.prototype.setWindowIndices):
        (WebInspector.TimelineRecordFilter):
        (WebInspector.TimelineRecordFilter.prototype.accept):
        (WebInspector.TimelineStartAtZeroRecordFilter):
        (WebInspector.TimelineStartAtZeroRecordFilter.prototype.accept):
        * inspector/front-end/timelinePanel.css:
        (.timeline-start-at-zero #timeline-overview-sidebar):
        (.timeline-start-at-zero #timeline-overview-grid):
        (.timeline-overview-window):
        (.timeline-start-at-zero .timeline-overview-window):
        (.timeline-start-at-zero .timeline-overview-dividers-background):
        (.timeline-overview-window-rulers):
        (.timeline-start-at-zero #timeline-overview-memory):
        (.popover .timeline-loading):
        (.popover .timeline-scripting):
        (.popover .timeline-rendering):
        (.timeline-start-at-zero-status-bar-item .glyph):
        (.timeline-start-at-zero-status-bar-item.toggled-on .glyph):
        (.timeline-overview-start-at-zero):
        (.timeline-overview-start-at-zero-bars):
        (.timeline-overview-start-at-zero-bars .padding):
        (.timeline-overview-start-at-zero-bars .timeline-bar-vertical):
        (.timeline-bar-vertical div:first-child):
        (.timeline-bar-vertical .timeline-loading):
        (.timeline-bar-vertical .timeline-scripting):
        (.timeline-bar-vertical .timeline-rendering):

2012-02-22  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        [Qt] Disregard previous backing store as soon as possible
        https://bugs.webkit.org/show_bug.cgi?id=79232

        Reviewed by Simon Hausmann and No'am Rosenthal.

        Make it possible to drop non-visible tiles and to test
        if the current visible rect is fully covered.

        * platform/graphics/TiledBackingStore.cpp:
        (WebCore::TiledBackingStore::visibleContentsRect):
        (WebCore::TiledBackingStore::coverageRatio):
        (WebCore::TiledBackingStore::visibleAreaIsCovered):
        (WebCore):
        (WebCore::TiledBackingStore::createTiles):
        (WebCore::TiledBackingStore::removeAllNonVisibleTiles):
        * platform/graphics/TiledBackingStore.h:
        (TiledBackingStore):

2012-02-22  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] Move QMenu dependant scrollbar context menu handling out of WebCore
        https://bugs.webkit.org/show_bug.cgi?id=79233

        Reviewed by Kenneth Rohde Christiansen.

        Move the code into WebKit/qt/Api/qwebpage.cpp, the only place where it is called from.

        * Target.pri: Remove ScrollbarQt.cpp from build.
        * platform/Scrollbar.h: Remove Qt-only context menu handling but make moveThum
        accessible from the outside.
        * platform/qt/ScrollbarQt.cpp: Removed. Not needed anymore.

2012-02-22  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: retrieving content for some XHR requests crashes inspected page renderer
        https://bugs.webkit.org/show_bug.cgi?id=79026

        Reviewed by Pavel Feldman.

        Fixed loading empty xhr content and xhr content decoding that was
        broken in r107672.

        Tests: http/tests/inspector/network/network-cyrillic-xhr.html
               http/tests/inspector/network/network-empty-xhr.html

        * inspector/InspectorPageAgent.cpp:
        (WebCore):
        (WebCore::InspectorPageAgent::createDecoder):
        (WebCore::InspectorPageAgent::cachedResourceContent):
        * inspector/InspectorPageAgent.h:
        (WebCore):
        * inspector/NetworkResourcesData.cpp:
        (WebCore::NetworkResourcesData::ResourceData::decodeDataToContent):
        (WebCore::NetworkResourcesData::responseReceived):
        * inspector/NetworkResourcesData.h:
        (WebCore::NetworkResourcesData::ResourceData::decoder):
        (WebCore::NetworkResourcesData::ResourceData::setDecoder):

2012-02-22  Peter Rybin  <peter.rybin@gmail.com>

        Web Inspector: CodeGeneratorInspector.py: remove neural-net-style constructions
        https://bugs.webkit.org/show_bug.cgi?id=79153

        Reviewed by Yury Semikhatsky.

        CParamType class removed completely, some ("virtual") methods are
        removed. TypeModel notion is added instead with some minor helper
        classes and methods.

        * inspector/CodeGeneratorInspector.py:
        (DomainNameFixes):
        (RawTypes.BaseType):
        (RawTypes.String):
        (RawTypes.String.get_raw_type_model):
        (RawTypes.Int):
        (RawTypes.Int.get_raw_type_model):
        (RawTypes.Number):
        (RawTypes.Number.get_raw_type_model):
        (RawTypes.Bool):
        (RawTypes.Bool.get_raw_type_model):
        (RawTypes.Object):
        (RawTypes.Object.get_raw_type_model):
        (RawTypes.Any):
        (RawTypes.Any.get_raw_type_model):
        (RawTypes.Array):
        (RawTypes.Array.get_raw_type_model):
        (replace_right_shift):
        (CommandReturnPassModel):
        (CommandReturnPassModel.ByReference):
        (CommandReturnPassModel.ByReference.__init__):
        (CommandReturnPassModel.ByReference.get_return_var_type):
        (CommandReturnPassModel.get_output_argument_prefix):
        (CommandReturnPassModel.get_output_to_raw_expression):
        (CommandReturnPassModel.get_output_parameter_type):
        (CommandReturnPassModel.get_set_return_condition):
        (CommandReturnPassModel.ByPointer):
        (CommandReturnPassModel.ByPointer.__init__):
        (CommandReturnPassModel.ByPointer.get_return_var_type):
        (TypeModel):
        (TypeModel.RefPtrBased):
        (TypeModel.RefPtrBased.__init__):
        (TypeModel.RefPtrBased.get_optional):
        (TypeModel.RefPtrBased.get_command_return_pass_model):
        (TypeModel.RefPtrBased.get_input_param_type_text):
        (TypeModel.RefPtrBased.get_event_setter_expression_pattern):
        (TypeModel.Enum):
        (TypeModel.Enum.__init__):
        (TypeModel.Enum.get_optional):
        (TypeModel.Enum.get_optional.EnumOptional):
        (TypeModel.Enum.get_optional.EnumOptional.get_optional):
        (TypeModel.Enum.get_optional.EnumOptional.get_command_return_pass_model):
        (TypeModel.Enum.get_input_param_type_text):
        (TypeModel.Enum.get_event_setter_expression_pattern):
        (TypeModel.Enum.get_command_return_pass_model):
        (TypeModel.ValueType):
        (TypeModel.ValueType.__init__):
        (TypeModel.ValueType.get_optional):
        (TypeModel.ValueType.get_command_return_pass_model):
        (TypeModel.ValueType.get_input_param_type_text):
        (TypeModel.ValueType.get_event_setter_expression_pattern):
        (TypeModel.ValueType.ValueOptional):
        (TypeModel.ValueType.ValueOptional.__init__):
        (TypeModel.ValueType.ValueOptional.get_optional):
        (TypeModel.ValueType.ValueOptional.get_command_return_pass_model):
        (TypeModel.ValueType.ValueOptional.get_input_param_type_text):
        (TypeModel.ValueType.ValueOptional.get_event_setter_expression_pattern):
        (TypeModel.init_class):
        (TypeBindings.create_ad_hoc_type_declaration.Helper):
        (TypeBindings.create_type_declaration_.EnumBinding.get_array_item_c_type_text):
        (TypeBindings.create_type_declaration_.EnumBinding.get_setter_value_expression_pattern):
        (TypeBindings.create_type_declaration_.EnumBinding):
        (TypeBindings.create_type_declaration_.EnumBinding.get_type_model):
        (TypeBindings.create_type_declaration_):
        (TypeBindings.create_type_declaration_.get_type_model):
        (TypeBindings.create_type_declaration_.get_array_item_c_type_text):
        (get_type_model):
        (AdHocTypeContextImpl.__init__):
        (PlainObjectBinding):
        (PlainObjectBinding.get_type_model):
        (AdHocTypeContext):
        (ArrayBinding.get_array_item_c_type_text):
        (ArrayBinding):
        (ArrayBinding.get_type_model):
        (RawTypeBinding.get_validator_call_text):
        (RawTypeBinding.reduce_to_raw_type):
        (RawTypeBinding):
        (RawTypeBinding.get_type_model):
        (MethodGenerateModes.StrictParameterMode.get_c_param_type_text):
        (MethodGenerateModes.RawParameterMode.get_c_param_type_text):
        (MethodGenerateModes.CombinedMode.get_c_param_type_text):
        (Generator.go):
        (Generator.process_event):
        (Generator.process_command):
        (Generator.resolve_type_and_generate_ad_hoc):
        (Generator.resolve_type_and_generate_ad_hoc.AdHocTypeContext):
        * inspector/InspectorDebuggerAgent.cpp:
        (WebCore::InspectorDebuggerAgent::didParseSource):

2012-02-21  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: [InspectorIndexedDB] Show IndexedDB views on selection IndexedDB elements in resources panel.
        https://bugs.webkit.org/show_bug.cgi?id=79098

        Reviewed by Pavel Feldman.

        * English.lproj/localizedStrings.js:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * inspector/InspectorIndexedDBAgent.cpp:
        (WebCore):
        * inspector/compile-front-end.sh:
        * inspector/front-end/IndexedDBModel.js:
        (WebInspector.IndexedDBModel.prototype._assertFrameId):
        (WebInspector.IndexedDBModel.prototype.loadObjectStoreData):
        (WebInspector.IndexedDBModel.prototype.loadIndexData):
        * inspector/front-end/IndexedDBViews.js: Added.
        * inspector/front-end/ObjectPropertiesSection.js:
        (WebInspector.ObjectPropertiesSection):
        (WebInspector.ObjectPropertiesSection.prototype.updateProperties):
        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.ResourcesPanel.prototype.showIndexedDB):
        (WebInspector.IndexedDBTreeElement.prototype.refreshIndexedDB):
        (WebInspector.IndexedDBTreeElement.prototype._indexedDBAdded):
        (WebInspector.IDBDatabaseTreeElement):
        (WebInspector.IDBDatabaseTreeElement.prototype.get itemURL):
        (WebInspector.IDBDatabaseTreeElement.prototype.update):
        (WebInspector.IDBDatabaseTreeElement.prototype.onselect):
        (WebInspector.IDBObjectStoreTreeElement):
        (WebInspector.IDBObjectStoreTreeElement.prototype.get itemURL):
        (WebInspector.IDBObjectStoreTreeElement.prototype.update):
        (WebInspector.IDBObjectStoreTreeElement.prototype.onselect):
        (WebInspector.IDBIndexTreeElement):
        (WebInspector.IDBIndexTreeElement.prototype.get itemURL):
        (WebInspector.IDBIndexTreeElement.prototype.update):
        (WebInspector.IDBIndexTreeElement.prototype.onselect):
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/externs.js:
        * inspector/front-end/indexedDBViews.css: Added.
        * inspector/front-end/inspector.html:

2012-02-22  Nikolas Zimmermann  <nzimmermann@rim.com>

        REGRESSION(58212): html foreignObjects with positions other than static not hidden correctly when parent has display:none
        https://bugs.webkit.org/show_bug.cgi?id=41386

        Reviewed by Zoltan Herczeg.

        r58212 gave SVGGElements a renderer, regardless if "display: none" was set or not, for various reasons (see change set).
        The <g> renderer for such cases is a RenderSVGHiddenContainer. We make sure in SVG that such subtrees are never used
        for painting & hittesting - they only exist for the purpose of SVG DOM (query getCTM, etc..) and to create renderers
        for child resources, like <g display="none"><linearGradient>.

        This concept still works fine for: <g display="none"><foreignObject><body>Foobar</body></foreignObject></g>, as
        RenderSVGForeignObject::paint is never called thus we never paint the subtree of the <fO>. If the <body> elements
        contains "position: relative" a new layer is created for the <body>. When the document paints we have two seperated
        layers, and the <body> layer doesn't know that it's actually inside a "SVG hidden subtree", and gets painted, where it
        shouldn't. HTML doesn't have this problems, as a display: none object, never creates a renderer.

        The fix is to disallow layer creation in hidden SVG subtrees, to mimic what would happen if we'd follow HTML rules
        to not create renderers for display: none objects. This avoids any indirections - as no layers are created anymore.

        Tests: svg/foreignObject/fO-display-none-with-relative-pos-content.svg
               svg/foreignObject/fO-display-none.svg
               svg/foreignObject/fO-parent-display-changes.svg
               svg/foreignObject/fO-parent-display-none-with-relative-pos-content.svg
               svg/foreignObject/fO-parent-display-none.svg
               svg/foreignObject/fO-parent-of-parent-display-none-with-relative-pos-content.svg
               svg/foreignObject/fO-parent-of-parent-display-none.svg

        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::styleDidChange): Only create layers, if its allowed -- layerCreationAllowedForSubtree() will always return true for HTML, and only false for layers inside a hidden SVG subtree.
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::addChild): Only create layers, if its allowed.
        * rendering/RenderObject.h: Add inline layerCreationAllowedForSubtree() helper, that craws the tree to find a RenderSVGHiddenContainer ancestor, if not present, return true.

2012-02-22  Zoltan Herczeg  <zherczeg@webkit.org>

        Drop clipToImageBuffer from RenderBoxModelObject
        https://bugs.webkit.org/show_bug.cgi?id=79225

        Reviewed by Nikolas Zimmermann.

        -webkit-background-clip: text is a rarely used non-standard
        feature uses clipToImageBuffer. It is replaced by
        CompositeDestinationIn on a transparent layer. The new
        approach has the same speed as the old one.

        Existing tests cover this issue.

        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paintFillLayerExtended):

2012-02-22  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Merge setVisibleRectTrajectoryVector and adjustVisibleRect to
        the more descriptive coverWithTilesIfNeeded
        https://bugs.webkit.org/show_bug.cgi?id=79230

        Reviewed by Simon Hausmann.

        Both setVisibleRectTrajectoryVector and the adjustVisibleRect are
        used for initiating re-tiling, so make that more obvious and merge
        the two.

        * platform/graphics/TiledBackingStore.cpp:
        (WebCore::TiledBackingStore::coverWithTilesIfNeeded):
        * platform/graphics/TiledBackingStore.h:
        (TiledBackingStore):

2012-02-17  Nikolas Zimmermann  <nzimmermann@rim.com>

        REGRESSION: unbalanced transparency layers for clipPath
        https://bugs.webkit.org/show_bug.cgi?id=78074

        Reviewed by Zoltan Herczeg.

        If we're rendering to a mask image buffer, all children are rendered with opacity=1, regardless what their RenderStyles specify.
        SVGRenderSupport::finishRenderSVGContent() did not take this into account and always called endTransparencyLayer(). Fix that
        by checking if we're rendering to a mask image buffer, if so don't call endTransparencyLayer().

        Add new reftest covering both the visual & logical correctness (no assertion).

        Tests: svg/clip-path/opacity-assertion-expected.svg
               svg/clip-path/opacity-assertion.svg

        * rendering/svg/SVGRenderSupport.cpp:
        (WebCore::isRenderingMaskImage): Extraced as sharable helper function.
        (WebCore::SVGRenderSupport::prepareToRenderSVGContent): Factor out isRenderingMaskImage() function.
        (WebCore::SVGRenderSupport::finishRenderSVGContent): Only call endTransparencyLayer(), if we actually called beginTL() first. 

2012-02-22  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Improve comments in tiling code.

        Rubberstamped by Simon Hausmann.

        * platform/graphics/TiledBackingStore.cpp:
        (WebCore::TiledBackingStore::createTiles):

2012-02-22  'Pavel Feldman'  <pfeldman@google.com>

        Not reviewed: build fix.

        * inspector/InspectorController.cpp:
        * inspector/InspectorController.h:
        (InspectorController):

2012-02-21  Pavel Feldman  <pfeldman@google.com>

        Web Inspector: do not filter out requestAnimationFrame from timeline, implement stop on animation events.
        https://bugs.webkit.org/show_bug.cgi?id=79116

        Reviewed by Yury Semikhatsky.

        * English.lproj/localizedStrings.js:
        * dom/ScriptedAnimationController.cpp:
        (WebCore::ScriptedAnimationController::registerCallback):
        * inspector/InspectorInstrumentation.cpp:
        (WebCore):
        (WebCore::InspectorInstrumentation::didRequestAnimationFrameCallbackImpl):
        (WebCore::InspectorInstrumentation::didCancelAnimationFrameCallbackImpl):
        (WebCore::InspectorInstrumentation::willFireAnimationFrameEventImpl):
        * inspector/InspectorInstrumentation.h:
        (InspectorInstrumentation):
        (WebCore::InspectorInstrumentation::didRequestAnimationFrameCallback):
        * inspector/InspectorTimelineAgent.cpp:
        (TimelineRecordType):
        (WebCore::InspectorTimelineAgent::didRequestAnimationFrameCallback):
        (WebCore::InspectorTimelineAgent::didCancelAnimationFrameCallback):
        (WebCore::InspectorTimelineAgent::willFireAnimationFrameEvent):
        (WebCore::InspectorTimelineAgent::didFireAnimationFrameEvent):
        * inspector/InspectorTimelineAgent.h:
        (InspectorTimelineAgent):
        * inspector/front-end/BreakpointsSidebarPane.js:
        (WebInspector.EventListenerBreakpointsSidebarPane):
        (WebInspector.EventListenerBreakpointsSidebarPane.eventNameForUI):
        * inspector/front-end/TimelineAgent.js:
        * inspector/front-end/TimelinePanel.js:
        (WebInspector.TimelinePanel):
        (WebInspector.TimelinePanel.prototype.get _recordStyles):
        (WebInspector.TimelinePanel.prototype._findParentRecord):
        (WebInspector.TimelinePanel.prototype._innerAddRecordToTimeline):
        (WebInspector.TimelinePanel.prototype._onRecordsCleared):
        (WebInspector.TimelinePanel.FormattedRecord):
        (WebInspector.TimelinePanel.FormattedRecord.prototype._generatePopupContent):
        (WebInspector.TimelinePanel.FormattedRecord.prototype._getRecordDetails):

2012-02-22  Changhun Kang  <temoochin@company100.net>

        Remove unused class declaration in WebCore/page/scrolling/ScrollingCoordinator.h
        https://bugs.webkit.org/show_bug.cgi?id=79175

        Reviewed by Kentaro Hara.

        * page/scrolling/ScrollingCoordinator.h:
        Remove PlatformGestureEvent class declaration.
        (WebCore):

2012-02-22  Andras Becsi  <andras.becsi@nokia.com>

        [Qt][WK2] Fix the N9 build
        https://bugs.webkit.org/show_bug.cgi?id=79101

        Reviewed by Simon Hausmann.

        Fixed the include order of the rolled out r108359 not to break
        the build with CONFIG+=force_static_libs_as_shared.

        * platform/graphics/OpenGLShims.h: Add missing include.

2012-02-22  Shinya Kawanaka  <shinyak@chromium.org>

        firstRendererOf() should also return a fallback element renderer in NodeRenderingContext.
        https://bugs.webkit.org/show_bug.cgi?id=79180

        Reviewed by Hajime Morita.

        Currently we have handled AttachingFallback in some special mannger, however if firstRendererOf
        and lastRendererOf return a fallback element renderer, we don't need to handle it in such a manner.

        We have introduced new attaching phase: AttachingFallbacked, and AttachingNotFallbacked.
        They are used for fallback elements.

        Added new test cases in:
          fast/dom/shadow/shadow-contents-fallback.html
          fast/dom/shadow/shadow-contents-fallback-dynamic.html

        * dom/NodeRenderingContext.cpp:
        (WebCore::NodeRenderingContext::NodeRenderingContext):
        (WebCore::firstRendererOf):
        (WebCore::lastRendererOf):
        (WebCore::NodeRenderingContext::nextRenderer):
        (WebCore::NodeRenderingContext::previousRenderer):
        (WebCore::NodeRenderingContext::shouldCreateRenderer):
        * dom/NodeRenderingContext.h:
        * html/shadow/InsertionPoint.h:
        (WebCore::isInsertionPoint):
        (WebCore):
        (WebCore::toInsertionPoint):

2012-02-22  Csaba Osztrogonác  <ossy@webkit.org>

        [Qt] Unreviewed gardening after r108464.

        * Target.pri:

2012-02-22  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r108468.
        http://trac.webkit.org/changeset/108468
        https://bugs.webkit.org/show_bug.cgi?id=79219

        Broke Chromium Win release build (Requested by bashi on
        #webkit).

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * websockets/WebSocket.cpp:
        (WebCore::WebSocket::didConnect):
        * websockets/WebSocketChannel.cpp:
        (WebCore::WebSocketChannel::connect):
        (WebCore::WebSocketChannel::fail):
        (WebCore::WebSocketChannel::processFrame):
        (WebCore::WebSocketChannel::sendFrame):
        * websockets/WebSocketChannel.h:
        * websockets/WebSocketDeflateFramer.cpp: Removed.
        * websockets/WebSocketDeflateFramer.h: Removed.

2012-02-20  Roland Steiner  <rolandsteiner@chromium.org>

        <style scoped>: Add runtime-flag
        https://bugs.webkit.org/show_bug.cgi?id=79074

        Added runtime-flag.
        Query runtime flag when (un)registering a <style scoped> element, and when determineing a style sheet's scope.

        Reviewed by Dimitri Glazkov.

        No new tests. (no change in functionality)

        * bindings/generic/RuntimeEnabledFeatures.cpp:
        (WebCore):
        * bindings/generic/RuntimeEnabledFeatures.h:
        (RuntimeEnabledFeatures):
        (WebCore::RuntimeEnabledFeatures::styleScopedEnabled):
        (WebCore::RuntimeEnabledFeatures::setStyleScopedEnabled):
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::determineScopingElement):
        * html/HTMLStyleElement.cpp:
        (WebCore::HTMLStyleElement::registerWithScopingNode):
        (WebCore::HTMLStyleElement::unregisterWithScopingNode):
        * html/HTMLStyleElement.idl:

2012-02-21  Alexander Pavlov  <apavlov@chromium.org>

        Web Inspector: Audit rules to recommend unprefixing supported CSS properties
        https://bugs.webkit.org/show_bug.cgi?id=78985

        Reviewed by Pavel Feldman.

        * inspector/front-end/AuditCategories.js:
        (WebInspector.AuditCategories.PagePerformance.prototype.initialize):
        * inspector/front-end/AuditRules.js:
        (WebInspector.AuditRules.CSSRuleBase):
        (WebInspector.AuditRules.CSSRuleBase.prototype.doRun.sheetsCallback):
        (WebInspector.AuditRules.CSSRuleBase.prototype.doRun):
        (WebInspector.AuditRules.CSSRuleBase.prototype._visitStyleSheet.sheetCallback):
        (WebInspector.AuditRules.CSSRuleBase.prototype._visitStyleSheet):
        (WebInspector.AuditRules.CSSRuleBase.prototype._visitRule):
        (WebInspector.AuditRules.CSSRuleBase.prototype.visitStyleSheet):
        (WebInspector.AuditRules.CSSRuleBase.prototype.didVisitStyleSheet):
        (WebInspector.AuditRules.CSSRuleBase.prototype.visitRule):
        (WebInspector.AuditRules.CSSRuleBase.prototype.didVisitRule):
        (WebInspector.AuditRules.CSSRuleBase.prototype.visitProperty):
        (WebInspector.AuditRules.VendorPrefixedCSSProperties):
        (WebInspector.AuditRules.VendorPrefixedCSSProperties.prototype.didVisitStyleSheet):
        (WebInspector.AuditRules.VendorPrefixedCSSProperties.prototype.visitRule):
        (WebInspector.AuditRules.VendorPrefixedCSSProperties.prototype.didVisitRule):
        (WebInspector.AuditRules.VendorPrefixedCSSProperties.prototype.visitProperty):
        * inspector/front-end/ResourceUtils.js:

2012-02-22  Shinya Kawanaka  <shinyak@chromium.org>

        Node::attach() should be after attaching children in Element::attach().
        https://bugs.webkit.org/show_bug.cgi?id=79201

        Reviewed by Hajime Morita.

        In Element::attach(), Node::attach() is called before attaching children if a shaodw root exists.
        This may cause O(N^2) problem in NodeRenderingContext.

        No new tests. Existing tests should cover this.

        * dom/Element.cpp:
        (WebCore::Element::attach):

2012-02-22  Kenichi Ishibashi  <bashi@chromium.org>

        Adding WebSocket per-frame DEFLATE extension
        https://bugs.webkit.org/show_bug.cgi?id=77522

        Add WebSocketDeflateFramer class which handles deflate-frame extension.
        This class encapsulates WebSocketDeflater and WebSocketInflater classes,
        which depend on zlib, so that WebSocketChannel is not necessary to aware
        zlib dependency.

        Reviewed by Kent Tamura.

        Tests: http/tests/websocket/tests/hybi/compressed-control-frame.html
               http/tests/websocket/tests/hybi/deflate-frame-comp-bit-onoff.html
               http/tests/websocket/tests/hybi/deflate-frame-invalid-parameter.html
               http/tests/websocket/tests/hybi/deflate-frame-parameter.html

        * CMakeLists.txt: Added WebSocketDeflateFramer.(cpp|h)
        * GNUmakefile.list.am: Ditto.
        * Target.pri: Ditto.
        * WebCore.gypi: Ditto.
        * WebCore.vcproj/WebCore.vcproj: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Ditto.
        * websockets/WebSocket.cpp:
        (WebCore::WebSocket::didConnect): Set m_extensions.
        * websockets/WebSocketChannel.cpp:
        (WebCore::WebSocketChannel::connect): Add deflate-frame extension processor to WebSocketHanshake if deflate can use.
        (WebCore::WebSocketChannel::fail): Call m_deflateFramer.didFail().
        (WebCore::WebSocketChannel::processFrame): Decompress frames if needed.
        (WebCore::WebSocketChannel::sendFrame): Compress frames if possible.
        * websockets/WebSocketChannel.h:
        * websockets/WebSocketDeflateFramer.cpp: Added.
        (WebCore):
        (WebSocketExtensionDeflateFrame):
        (WebCore::WebSocketExtensionDeflateFrame::create):
        (WebCore::WebSocketExtensionDeflateFrame::~WebSocketExtensionDeflateFrame):
        (WebCore::WebSocketExtensionDeflateFrame::WebSocketExtensionDeflateFrame):
        (WebCore::WebSocketExtensionDeflateFrame::handshakeString):
        (WebCore::WebSocketExtensionDeflateFrame::processResponse):
        (WebCore::DeflateResultHolder::DeflateResultHolder):
        (WebCore::DeflateResultHolder::~DeflateResultHolder):
        (WebCore::DeflateResultHolder::fail):
        (WebCore::InflateResultHolder::InflateResultHolder):
        (WebCore::InflateResultHolder::~InflateResultHolder):
        (WebCore::InflateResultHolder::fail):
        (WebCore::WebSocketDeflateFramer::WebSocketDeflateFramer):
        (WebCore::WebSocketDeflateFramer::createExtensionProcessor):
        (WebCore::WebSocketDeflateFramer::canDeflate):
        (WebCore::WebSocketDeflateFramer::enableDeflate):
        (WebCore::WebSocketDeflateFramer::deflate):
        (WebCore::WebSocketDeflateFramer::resetDeflateContext):
        (WebCore::WebSocketDeflateFramer::inflate):
        (WebCore::WebSocketDeflateFramer::resetInflateContext):
        (WebCore::WebSocketDeflateFramer::didFail):
        * websockets/WebSocketDeflateFramer.h: Added.
        (WebCore):
        (DeflateResultHolder):
        (WebCore::DeflateResultHolder::succeeded):
        (WebCore::DeflateResultHolder::failureReason):
        (InflateResultHolder):
        (WebCore::InflateResultHolder::succeeded):
        (WebCore::InflateResultHolder::failureReason):
        (WebSocketDeflateFramer):
        (WebCore::WebSocketDeflateFramer::enabled):

2012-02-22  Yuta Kitamura  <yutak@chromium.org>

        Unreviewed, rolling out r108453.
        http://trac.webkit.org/changeset/108453
        https://bugs.webkit.org/show_bug.cgi?id=78549

        Broke Chromium's webkit_unit_tests.

        * WebCore.gypi:
        * platform/graphics/chromium/cc/CCOcclusionTracker.cpp: Removed.
        * platform/graphics/chromium/cc/CCOcclusionTracker.h: Removed.

2012-02-22  Zoltan Herczeg  <zherczeg@webkit.org>

        [Qt] clipToImageBuffer assertion fix in debug mode on Qt.

        Rubber stamped by Csaba Osztrogonác.

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

2012-02-22  Adam Barth  <abarth@webkit.org>

        [GTK] fast/frames/frame-dead-region.html crash
        https://bugs.webkit.org/show_bug.cgi?id=79205

        Unreviewed.

        Apparently we're not supposed to call willDetachPage from
        CachedFrame::destroy.  This call got added in
        http://trac.webkit.org/changeset/108428, but it seems to cause a crash.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::closeAndRemoveChild):
        (WebCore::FrameLoader::detachFromParent):
        * page/Frame.h:
        (WebCore::Frame::detachFromPage):
        * page/Page.cpp:
        (WebCore::Page::~Page):

2012-02-22  Adam Barth  <abarth@webkit.org>

        Move Geolocation code into Modules/geolocation
        https://bugs.webkit.org/show_bug.cgi?id=79204

        Reviewed by Hajime Morita.

        There are still some dangling references into the Geolocation module,
        which I will clean up in a followup patch.

        * CMakeLists.txt:
        * DerivedSources.make:
        * DerivedSources.pri:
        * GNUmakefile.list.am:
        * Modules/geolocation/Geolocation.cpp: Copied from Source/WebCore/page/Geolocation.cpp.
        * Modules/geolocation/Geolocation.h: Copied from Source/WebCore/page/Geolocation.h.
        * Modules/geolocation/Geolocation.idl: Copied from Source/WebCore/page/Geolocation.idl.
        * Modules/geolocation/GeolocationController.cpp: Copied from Source/WebCore/page/GeolocationController.cpp.
        * Modules/geolocation/GeolocationController.h: Copied from Source/WebCore/page/GeolocationController.h.
        * Modules/geolocation/GeolocationError.h: Copied from Source/WebCore/page/GeolocationError.h.
        * Modules/geolocation/GeolocationPosition.h: Copied from Source/WebCore/page/GeolocationPosition.h.
        * Modules/geolocation/Geoposition.h: Copied from Source/WebCore/page/Geoposition.h.
        * Modules/geolocation/Geoposition.idl: Copied from Source/WebCore/page/Geoposition.idl.
        * Modules/geolocation/PositionCallback.h: Copied from Source/WebCore/page/PositionCallback.h.
        * Modules/geolocation/PositionCallback.idl: Copied from Source/WebCore/page/PositionCallback.idl.
        * Modules/geolocation/PositionError.h: Copied from Source/WebCore/page/PositionError.h.
        * Modules/geolocation/PositionError.idl: Copied from Source/WebCore/page/PositionError.idl.
        * Modules/geolocation/PositionErrorCallback.h: Copied from Source/WebCore/page/PositionErrorCallback.h.
        * Modules/geolocation/PositionErrorCallback.idl: Copied from Source/WebCore/page/PositionErrorCallback.idl.
        * Modules/geolocation/PositionOptions.h: Copied from Source/WebCore/page/PositionOptions.h.
        * Target.pri:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * page/Geolocation.cpp: Removed.
        * page/Geolocation.h: Removed.
        * page/Geolocation.idl: Removed.
        * page/GeolocationController.cpp: Removed.
        * page/GeolocationController.h: Removed.
        * page/GeolocationError.h: Removed.
        * page/GeolocationPosition.h: Removed.
        * page/Geoposition.h: Removed.
        * page/Geoposition.idl: Removed.
        * page/PositionCallback.h: Removed.
        * page/PositionCallback.idl: Removed.
        * page/PositionError.h: Removed.
        * page/PositionError.idl: Removed.
        * page/PositionErrorCallback.h: Removed.
        * page/PositionErrorCallback.idl: Removed.
        * page/PositionOptions.h: Removed.

2012-02-22  Frederik Gladhorn  <frederik.gladhorn@nokia.com>

        [gtk] Accessibility: use find funtion in vector instead of for.
        https://bugs.webkit.org/show_bug.cgi?id=77878

        Reviewed by Hajime Morita.

        Minor cleanup, use the find function from vector.

        * accessibility/gtk/WebKitAccessibleWrapperAtk.cpp:
        (webkitAccessibleGetIndexInParent):

2012-02-22  Ryosuke Niwa  <rniwa@webkit.org>

        Remove the remaining uses of CSSStyleDeclaration in Editor
        https://bugs.webkit.org/show_bug.cgi?id=78939

        Reviewed by Enrica Casucci.

        Changed the argument types of shouldApplyStyle, applyParagraphStyle, applyStyleToSelection,
        applyParagraphStyleToSelection, and computeAndSetTypingStyle in Editor from CSSStyleDeclaration
        to StylePropertySet.

        * WebCore.exp.in:
        * WebCore.xcodeproj/project.pbxproj:
        * editing/Editor.cpp:
        (WebCore::Editor::applyStyle):
        (WebCore::Editor::shouldApplyStyle):
        (WebCore::Editor::applyParagraphStyle):
        (WebCore::Editor::applyStyleToSelection):
        (WebCore::Editor::applyParagraphStyleToSelection):
        (WebCore::Editor::setBaseWritingDirection):
        (WebCore::Editor::computeAndSetTypingStyle):
        * editing/Editor.h:
        (WebCore):
        (Editor):
        * editing/EditorCommand.cpp:
        (WebCore::applyCommandToFrame):
        (WebCore::executeApplyParagraphStyle):
        (WebCore::executeMakeTextWritingDirectionLeftToRight):
        (WebCore::executeMakeTextWritingDirectionNatural):
        (WebCore::executeMakeTextWritingDirectionRightToLeft):
        * loader/EmptyClients.h:
        (WebCore::EmptyEditorClient::shouldApplyStyle):
        * page/DragController.cpp:
        (WebCore::DragController::concludeEditDrag):
        * page/EditorClient.h:
        (WebCore):
        (EditorClient):

2012-02-22  Dana Jansens  <danakj@chromium.org>

        [chromium] Cull quads outside of the scissoring damage rect
        https://bugs.webkit.org/show_bug.cgi?id=79181

        Reviewed by James Robinson.

        Quads outside of the partial swap cause us to execute GL operations
        that actually use a fair amount of CPU time (enough to affect power
        usage). Here we cull quads by only keeping their intersection
        with the damage rect used for partial swap.

        Unit test: CCQuadCuller.cpp

        * platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:
        (WebCore::CCLayerTreeHostImpl::optimizeRenderPasses):
        * platform/graphics/chromium/cc/CCQuadCuller.cpp:
        (WebCore::CCQuadCuller::cullOccludedQuads):
        * platform/graphics/chromium/cc/CCQuadCuller.h:
        (CCQuadCuller):
        * platform/graphics/chromium/cc/CCRenderPass.cpp:
        (WebCore::CCRenderPass::optimizeQuads):
        * platform/graphics/chromium/cc/CCRenderPass.h:
        (CCRenderPass):

2012-02-21  Dana Jansens  <danakj@chromium.org>

        [Chromium] New CCOcclusionTracker class with tests
        https://bugs.webkit.org/show_bug.cgi?id=78549

        Reviewed by James Robinson.

        Adds a CCOcclusionTrackerBase template class that is able to track occlusion
        of layers while traversing the layer tree from front-to-back, with typedefed
        versions for the main and impl threads.

        At each step of the front-to-back traversal, the class should be notified of
        changes to the current render target, and when done working with a layer, the
        layer is added the tracked occlusion.

        The class provides tests for checking if a rect in content space
        for a layer/surface is occluded by others in front of it.

        Unit tests: CCOcclusionTrackerTest.cpp

        * WebCore.gypi:
        * platform/graphics/chromium/cc/CCOcclusionTracker.cpp: Added.
        (WebCore):
        (WebCore::::enterTargetRenderSurface):
        (WebCore::::finishedTargetRenderSurface):
        (WebCore::transformSurfaceOpaqueRegion):
        (WebCore::::leaveToTargetRenderSurface):
        (WebCore::contentToScreenSpaceTransform):
        (WebCore::contentToTargetSurfaceTransform):
        (WebCore::computeOcclusionBehindLayer):
        (WebCore::::markOccludedBehindLayer):
        (WebCore::testContentRectOccluded):
        (WebCore::::occluded):
        (WebCore::::surfaceOccluded):
        (WebCore::rectSubtractRegion):
        (WebCore::computeUnoccludedContentRect):
        (WebCore::::unoccludedContentRect):
        (WebCore::::surfaceUnoccludedContentRect):
        (WebCore::::currentOcclusionInScreenSpace):
        (WebCore::::currentOcclusionInTargetSurface):
        * platform/graphics/chromium/cc/CCOcclusionTracker.h: Added.
        (WebCore):
        (CCOcclusionTrackerBase):
        (WebCore::CCOcclusionTrackerBase::CCOcclusionTrackerBase):
        (StackObject):

2012-02-21  Andreas Kling  <awesomekling@apple.com>

        Cache <font face> family lists in CSSValuePool.
        <http://webkit.org/b/79195>

        Reviewed by Antti Koivisto.

        HTMLFontElements with "face" attributes are very common in legacy web content.
        Add a String->CSSValue cache for these in CSSValuePool and use it to avoid
        reparsing and recreating duplicate font face values.

        This knocks 20ms (~1.5%) worth of samples off of the Moz page cycler on my system.

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseFontFaceValue):
        * css/CSSParser.h:
        * css/CSSValuePool.cpp:
        (WebCore::CSSValuePool::createFontFaceValue):
        * css/CSSValuePool.h:
        * html/HTMLFontElement.cpp:
        (WebCore::HTMLFontElement::collectStyleForAttribute):

2012-02-21  Adam Barth  <abarth@webkit.org>

        Separate the implementation of registerProtocolHandler from Navigator.cpp
        https://bugs.webkit.org/show_bug.cgi?id=78945

        Reviewed by Eric Seidel.

        The implementation of registerProtocolHandler needlessly complicates
        the implementation of Navigator.cpp.  In principle,
        registerProtocolHandler (and possibly registerContentHandler, when we
        implement that feature) could be its own module, but that seems like
        overkill for one or two files.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * page/Navigator.cpp:
        (WebCore):
        * page/Navigator.h:
        (Navigator):
        * page/Navigator.idl:

2012-02-21  MORITA Hajime  <morrita@google.com>

        HasIDFlag and HasClassFlag can be removed.
        https://bugs.webkit.org/show_bug.cgi?id=77861

        Reviewed by Andreas Kling.

        Replaced HasIDFlag and HasClassFlag with a check against
        ElementAttributeData. It looks these flags (originally bitfields)
        were legacy of ancient era, where we didn't cache @id and @class
        values and needed a hash lookup for each check.

        No new tests. No behavioral change.

        * dom/Element.cpp:
        (WebCore::Element::idAttributeChanged):
        * dom/Element.h:
        (WebCore::Element::hasID):
        (WebCore):
        (WebCore::Element::hasClass):
        (WebCore::Node::hasID):
        (WebCore::Node::hasClass):
        * dom/ElementAttributeData.h:
        (WebCore::ElementAttributeData::hasID):
        (WebCore::ElementAttributeData::hasClass):
        (ElementAttributeData):
        * dom/Node.h:
        (Node):
        (WebCore::nodeStyleChangeShift):
        * dom/StyledElement.cpp:
        (WebCore::StyledElement::classAttributeChanged):

2012-02-21  Matthew Delaney  <mdelaney@apple.com>

        2D Canvas setTransform makes unnecessary matrix mults
        https://bugs.webkit.org/show_bug.cgi?id=79190

        Reviewed by Dan Bernstein.

        No new tests - plenty of current tests using setTransform.

        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::setTransform):

2012-02-21  MORITA Hajime <morrita@google.com>

        INPUT_SPEECH should be implemented as a PageSupplement.
        https://bugs.webkit.org/show_bug.cgi?id=79051

        Turned SpeechInput to a PageSupplement.

        Reviewed by Adam Barth.

        No new tests. No behavior change.

        * html/shadow/TextControlInnerElements.cpp:
        (WebCore::InputFieldSpeechButtonElement::speechInput):
        (WebCore::InputFieldSpeechButtonElement::attach):
        * page/Page.cpp:
        (WebCore::Page::Page):
        (WebCore::Page::PageClients::PageClients):
        * page/Page.h:
        (WebCore):
        (PageClients):
        (Page):
        * page/SpeechInput.cpp:
        (WebCore::SpeechInput::supplementName):
        (WebCore):
        (WebCore::provideSpeechInputTo):
        * page/SpeechInput.h:
        (SpeechInput):
        (WebCore::SpeechInput::from):
        * page/SpeechInputClient.h:
        (WebCore):

2012-02-21  Alexandre Elias  <aelias@google.com>

        [chromium] Add three small zoom gesture features
        https://bugs.webkit.org/show_bug.cgi?id=74216

        Reviewed by James Robinson.

        1. Support panning around with two fingers.
        2. When double-tap zooming, issue the commit at final/scroll scale as
        early as possible.
        3. When pinch zooming out, issue a commit at minimum scale to avoid
        showing checkerboard.

        Added test for panning to CCLayerTreeHostImplTest::pinchGesture.
        (The other features are heuristics whose exact behavior we don't need
        to lock in with a test.)

        * platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:
        (WebCore::CCLayerTreeHostImpl::startPageScaleAnimation):
        (WebCore::CCLayerTreeHostImpl::pinchGestureBegin):
        (WebCore::CCLayerTreeHostImpl::pinchGestureUpdate):
        (WebCore::CCLayerTreeHostImpl::computeDoubleTapZoomDeltas):
        (WebCore::CCLayerTreeHostImpl::computePinchZoomDeltas):
        (WebCore::CCLayerTreeHostImpl::makeScrollAndScaleSet):
        (WebCore::CCLayerTreeHostImpl::processScrollDeltas):
        * platform/graphics/chromium/cc/CCLayerTreeHostImpl.h:

2012-02-21  Filip Pizlo  <fpizlo@apple.com>

        JSC should be a triple-tier VM
        https://bugs.webkit.org/show_bug.cgi?id=75812
        <rdar://problem/10079694>

        Reviewed by Gavin Barraclough.
        
        No new tests, because there is no change in behavior.

        * CMakeLists.txt:

2012-02-21  Kentaro Hara  <haraken@chromium.org>

        NavigatorMediaStream.idl defines an interface for NavigatorGamepad
        https://bugs.webkit.org/show_bug.cgi?id=79152

        Reviewed by Adam Barth.

        Fixed a typo: NavigatorGamepad => NavigatorMediaStream

        This typo fix just changes the name of generated files:

        - V8NavigatorGamepad.h => V8NavigatorMediaStream.h
        - V8NavigatorGamepad.cpp => V8NavigatorMediaStream.cpp

        The reason why the typo has not caused any serious build issues is that
        the generate files for supplemental interfaces are "empty" and not important.
        They just exist to control makefile dependencies.

        No tests. No change in behavior.

        * mediastream/NavigatorMediaStream.idl:

2012-02-21  Daniel Sievers  <sievers@chromium.org>

        [Chromium] Fix compositor setting color uniforms incorrectly for solid color quads.
        https://bugs.webkit.org/show_bug.cgi?id=76017

        Reviewed by James Robinson.

        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::drawSolidColorQuad):

2012-02-21  Max Vujovic  <mvujovic@adobe.com>

        getCTM() on SVG root element with borders, paddings, and viewbox returns incorrect values
        https://bugs.webkit.org/show_bug.cgi?id=78631

        Reviewed by Eric Seidel.

        SVGSVGElement::currentViewportSize was returning the size of the SVG viewport plus CSS
        borders and paddings, causing the CTM calculation to be off.

        Test: svg/dom/SVGLocatable-getCTM-svg-root.html

        * svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::currentViewportSize):

            SVGSVGElement::currentViewportSize now uses the contentBoxRect instead of the frameRect.
            The contentBoxRect corresponds to the SVG viewport and does not include borders and
            paddings.

2012-02-21  Robin Cao  <robin.cao@torchmobile.com.cn>

        [BlackBerry] Upstream Icon class in platform/graphics/blackberry
        https://bugs.webkit.org/show_bug.cgi?id=79088

        Reviewed by Antonio Gomes.

        Initial upstreaming, no new tests.

        * platform/graphics/blackberry/IconBlackBerry.cpp: Added.
        (WebCore):
        (WebCore::Icon::~Icon):
        (WebCore::Icon::paint):
        (WebCore::Icon::createIconForFiles):

2012-02-21  Kenichi Ishibashi  <bashi@chromium.org>

        Rename "reserved1" flag of WebSocketFrame to compress
        https://bugs.webkit.org/show_bug.cgi?id=79187

        WebSocket deflate-frame extension draft specification defines COMP bit.
        http://tools.ietf.org/html/draft-tyoshino-hybi-websocket-perframe-deflate-05#page-11

        Reviewed by Kent Tamura.

        No new tests. http/tests/websocket/tests/hybi/reserved-bits.html is revised to follow the change.

        * websockets/WebSocketChannel.cpp:
        (WebCore):
        (WebCore::WebSocketChannel::parseFrame): "reserved1" renamed "compress".
        (WebCore::WebSocketChannel::processFrame): Removed reserved1 flag check.
        (WebCore::makeFrameData):
        (WebCore::WebSocketChannel::sendFrame):
        * websockets/WebSocketFrame.h: "reserved1" flag renamed "compress".
        (WebCore::WebSocketFrame::WebSocketFrame):
        (WebSocketFrame):

2012-02-21  Yael Aharon  <yael.aharon@nokia.com>

        [Texmap] Move all TextureMapper related files to graphics/texmap
        https://bugs.webkit.org/show_bug.cgi?id=79141

        Reviewed by Martin Robinson.

        Move TextureMaooerGL and TextureMapperShaderManager files to graphics/texmap.
        No new tests. 

        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * platform/graphics/qt/GraphicsContext3DQt.cpp
        * platform/graphics/opengl/TextureMapperGL.cpp: Removed.
        * platform/graphics/opengl/TextureMapperGL.h: Removed.
        * platform/graphics/opengl/TextureMapperShaderManager.cpp: Removed.
        * platform/graphics/opengl/TextureMapperShaderManager.h: Removed.
        * platform/graphics/texmap/TextureMapperGL.cpp: Copied from Source/WebCore/platform/graphics/opengl/TextureMapperGL.cpp.
        * platform/graphics/texmap/TextureMapperGL.h: Copied from Source/WebCore/platform/graphics/opengl/TextureMapperGL.h.
        * platform/graphics/texmap/TextureMapperShaderManager.cpp: Copied from Source/WebCore/platform/graphics/opengl/TextureMapperShaderManager.cpp.
        * platform/graphics/texmap/TextureMapperShaderManager.h: Copied from Source/WebCore/platform/graphics/opengl/TextureMapperShaderManager.h.

2012-02-20  MORITA Hajime  <morrita@google.com>

        MEDIA_STREAM should be implemented as a PageSupplement.
        https://bugs.webkit.org/show_bug.cgi?id=79050

        Reviewed by Adam Barth.

        Added UserMediaController which implements PageSupplement. This
        controller mediates WebCore-to-client communication and lifecycle
        management. Then pushed UserMediaController out as a
        PageSupplement module.

        No new tests. No behavior change.

        * WebCore.gypi:
        * GNUmakefile.list.am:
        * mediastream/NavigatorMediaStream.cpp:
        (WebCore::NavigatorMediaStream::webkitGetUserMedia):
        * mediastream/UserMediaClient.h:
        (WebCore):
        * mediastream/UserMediaController.cpp: Added.
        (WebCore):
        (WebCore::UserMediaController::supplementName):
        (WebCore::UserMediaController::UserMediaController):
        (WebCore::UserMediaController::~UserMediaController):
        (WebCore::UserMediaController::create):
        (WebCore::provideUserMediaTo):
        * mediastream/UserMediaController.h: Added.
        (WebCore):
        (UserMediaController):
        (WebCore::UserMediaController::client):
        (WebCore::UserMediaController::from):
        (WebCore::UserMediaController::requestUserMedia):
        (WebCore::UserMediaController::cancelUserMediaRequest):
        * mediastream/UserMediaRequest.cpp:
        (WebCore::UserMediaRequest::create):
        (WebCore::UserMediaRequest::UserMediaRequest):
        (WebCore::UserMediaRequest::didCompleteQuery):
        (WebCore::UserMediaRequest::contextDestroyed):
        * mediastream/UserMediaRequest.h:
        (WebCore):
        (UserMediaRequest):
        * page/Page.cpp:
        (WebCore::Page::Page):
        (WebCore::Page::~Page):
        (WebCore::Page::PageClients::PageClients):
        * page/Page.h:
        (WebCore):
        (PageClients):
        (Page):

2012-02-21  James Robinson  <jamesr@chromium.org>

        Node::isContentEditable should only update styles, not layout
        https://bugs.webkit.org/show_bug.cgi?id=78637

        Reviewed by Ryosuke Niwa.

        isContentEditable depends on knowing the node's current computed style, so it has to update styles if they are
        out of date.  It does not depend on knowing any layout-derived properties, however, so updating layout is just a
        waste of time.

        Behavior is covered by existing layout tests, primarily in editing/

        * dom/Node.cpp:
        (WebCore::Node::isContentEditable):
        (WebCore::Node::isContentRichlyEditable):

2012-02-21  James Robinson  <jamesr@chromium.org>

        Partially revert r108418 - move allowEventDispatch() call back to where it used to be.

        Rubber-stamped by Ryosuke Niwa.

        Tested by fast/text/find-layout-crash.html

        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::removeChildren):

2012-02-21  Anders Carlsson  <andersca@apple.com>

        Background jitters on pages with background-attachment: fixed
        https://bugs.webkit.org/show_bug.cgi?id=79182

        Reviewed by Dan Bernstein.

        Make sure to update the main frame scroll position before updating the scrolling layer.
        This also fixes a (purely theoretical) bug where we wouldn't be updating the main frame
        position if the main frame didn't have a scroll layer.

        * page/scrolling/ScrollingCoordinator.cpp:
        (WebCore::ScrollingCoordinator::updateMainFrameScrollPositionAndScrollLayerPosition):

2012-02-21  Dana Jansens  <danakj@chromium.org>

        Early-out in Region::unite() for adding an empty region.
        https://bugs.webkit.org/show_bug.cgi?id=79174

        Reviewed by Anders Carlsson.

        * platform/graphics/Region.cpp:
        (WebCore::Region::unite):

2012-02-21  Dana Jansens  <danakj@chromium.org>

        [chromium] Painting a layer clears opaque rect in untouched tiles
        https://bugs.webkit.org/show_bug.cgi?id=79157

        Reviewed by James Robinson.

        When painting a tiled layer, we would throw away the saved opaque rect
        for any tiles that were not part of the paint. So now we check
        if we are able to save the existing saved opaque rect in a more
        proper way:
        1. If any pixels of the saved rect are painted non-opaque, we replace
        the saved rect.
        2. If an opaque rect is drawn outside of the saved rect, we replace
        the saved rect.

        Unit test: TiledLayerChromiumTest.cpp

        * platform/graphics/chromium/TiledLayerChromium.cpp:
        (WebCore::TiledLayerChromium::prepareToUpdateTiles):
        (WebCore::TiledLayerChromium::addSelfToOccludedScreenSpace):

2012-02-21  Raymond Toy  <rtoy@google.com>

        Small typo in AudioPannerNode.cpp
        https://bugs.webkit.org/show_bug.cgi?id=75890

        Change to check elevation as intended instead of azimuth.
        
        Reviewed by Chris Rogers.

        No new tests for correction of typo.

        * webaudio/AudioPannerNode.cpp:
        (WebCore::AudioPannerNode::getAzimuthElevation):

2012-02-21  Adam Barth  <abarth@webkit.org>

        Frame and Navigator shouldn't need to worry about Geolocation
        https://bugs.webkit.org/show_bug.cgi?id=78860

        Reviewed by Eric Seidel.

        This patch removes some Geolocation-specific code from Frame and
        Navigator in favor of our new supplemental module mechanism.  We're
        still refining the module system, but we seem to be converging on a
        simple Observer/Supplement design.

        In a future patch, I'll move the remaining Geolocation-related files in
        WebCore into Modules/geolocation.  This patch appears to be the first
        patch that introduces a module used by all the various build systems,
        which is why there's a bit more build system overhead than usual.

        * Modules/geolocation: Added.
        * Modules/geolocation/NavigatorGeolocation.cpp: Added.
        (WebCore):
        (WebCore::NavigatorGeolocation::NavigatorGeolocation):
        (WebCore::NavigatorGeolocation::~NavigatorGeolocation):
        (WebCore::NavigatorGeolocation::pageDestroyed):
        (WebCore::NavigatorGeolocation::from):
        (WebCore::NavigatorGeolocation::geolocation):
        * Modules/geolocation/NavigatorGeolocation.h: Added.
        (WebCore):
        (NavigatorGeolocation):
        * Modules/geolocation/NavigatorGeolocation.idl: Added.
            - I've temporarily disabled this API for GObject because it generates
              a strange compile error.  Once I land this patch, I'll spend some
              more time fixing the compile error.
        * page/DOMWindow.cpp:
        (WebCore):
        * page/DOMWindow.h:
        (DOMWindow):
        * page/Frame.cpp:
        (WebCore::Frame::pageDestroyed):
        (WebCore::Frame::transferChildFrameToNewDocument):
        * page/FrameDestructionObserver.cpp:
        (WebCore::FrameDestructionObserver::pageDestroyed):
        (WebCore):
        * page/FrameDestructionObserver.h:
        (FrameDestructionObserver):
        * page/Navigator.cpp:
        (WebCore):
        * page/Navigator.h:
        (WebCore):
        (Navigator):
        * page/Navigator.idl:

2012-02-21  Shawn Singh  <shawnsingh@chromium.org>

        [chromium] Refactor CCLayerTreeHostCommon: merge scattered setTargetRenderSurface logic
        https://bugs.webkit.org/show_bug.cgi?id=78936

        Reviewed by James Robinson.

        No change in behavior, the code moved around already covered by existing tests.

        In calculateDrawTransformsAndVisibility(), there are two separate
        if-else statements where setTargetRenderSurface logic is
        performed, and this makes the code less readable and more error
        prone. This patch merges the logic, removing the redundant if-else
        statements.

        This code also merges one other set of if-statements that are
        equivalent, if (layer->parent()) and if (layer!=rootLayer).

        * platform/graphics/chromium/LayerChromium.cpp:
        (WebCore::LayerChromium::createRenderSurface):
        * platform/graphics/chromium/cc/CCLayerImpl.cpp:
        (WebCore::CCLayerImpl::createRenderSurface):
        * platform/graphics/chromium/cc/CCLayerTreeHostCommon.cpp:
        (WebCore::calculateDrawTransformsAndVisibilityInternal):

2012-02-21  Kentaro Hara  <haraken@chromium.org>

        Remove FIXME from resolve-supplemental.pl
        https://bugs.webkit.org/show_bug.cgi?id=79160

        Reviewed by Adam Barth.

        The IDL attribute checker has been enabled in all build systems.
        This patch removes FIXME in resolve-supplemental.pl.
        Also, this patch improves a comment in IDLAttributes.txt.

        No tests. No change in behavior.

        * bindings/scripts/IDLAttributes.txt:
        * bindings/scripts/resolve-supplemental.pl:

2012-02-21  Emil A Eklund  <eae@chromium.org>

        Add FractionalLayoutRect for sub-pixel layout
        https://bugs.webkit.org/show_bug.cgi?id=78924

        Reviewed by Eric Seidel.

        Add FractionalLayoutUnit version of Rect class. Uses FractionalLayoutPoint
        and FractionalLayoutSize internally.

        Also add conversions to int/float versions of same.

        No new tests.

        * GNUmakefile.list.am:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/FloatRect.cpp:
        (WebCore::FloatRect::FloatRect):
        (WebCore):
        * platform/graphics/FloatRect.h:
        (WebCore):
        (FloatRect):
        * platform/graphics/FractionalLayoutRect.cpp: Added.
        (WebCore):
        (WebCore::FractionalLayoutRect::FractionalLayoutRect):
        (WebCore::FractionalLayoutRect::intersects):
        (WebCore::FractionalLayoutRect::contains):
        (WebCore::FractionalLayoutRect::intersect):
        (WebCore::FractionalLayoutRect::unite):
        (WebCore::FractionalLayoutRect::uniteIfNonZero):
        (WebCore::FractionalLayoutRect::scale):
        (WebCore::unionRect):
        (WebCore::enclosingIntRect):
        (WebCore::enclosingFractionalLayoutRect):
        (WebCore::pixelSnappedIntRect):
        * platform/graphics/FractionalLayoutRect.h: Added.
        (WebCore):
        (FractionalLayoutRect):
        (WebCore::FractionalLayoutRect::FractionalLayoutRect):
        (WebCore::FractionalLayoutRect::location):
        (WebCore::FractionalLayoutRect::size):
        (WebCore::FractionalLayoutRect::setLocation):
        (WebCore::FractionalLayoutRect::setSize):
        (WebCore::FractionalLayoutRect::x):
        (WebCore::FractionalLayoutRect::y):
        (WebCore::FractionalLayoutRect::maxX):
        (WebCore::FractionalLayoutRect::maxY):
        (WebCore::FractionalLayoutRect::width):
        (WebCore::FractionalLayoutRect::height):
        (WebCore::FractionalLayoutRect::setX):
        (WebCore::FractionalLayoutRect::setY):
        (WebCore::FractionalLayoutRect::setWidth):
        (WebCore::FractionalLayoutRect::setHeight):
        (WebCore::FractionalLayoutRect::isEmpty):
        (WebCore::FractionalLayoutRect::center):
        (WebCore::FractionalLayoutRect::move):
        (WebCore::FractionalLayoutRect::moveBy):
        (WebCore::FractionalLayoutRect::expand):
        (WebCore::FractionalLayoutRect::contract):
        (WebCore::FractionalLayoutRect::shiftXEdgeTo):
        (WebCore::FractionalLayoutRect::shiftMaxXEdgeTo):
        (WebCore::FractionalLayoutRect::shiftYEdgeTo):
        (WebCore::FractionalLayoutRect::shiftMaxYEdgeTo):
        (WebCore::FractionalLayoutRect::minXMinYCorner):
        (WebCore::FractionalLayoutRect::maxXMinYCorner):
        (WebCore::FractionalLayoutRect::minXMaxYCorner):
        (WebCore::FractionalLayoutRect::maxXMaxYCorner):
        (WebCore::FractionalLayoutRect::contains):
        (WebCore::FractionalLayoutRect::inflateX):
        (WebCore::FractionalLayoutRect::inflateY):
        (WebCore::FractionalLayoutRect::inflate):
        (WebCore::FractionalLayoutRect::transposedRect):
        (WebCore::FractionalLayoutRect::infiniteRect):
        (WebCore::intersection):
        (WebCore::unionRect):
        (WebCore::operator==):
        (WebCore::operator!=):
        * platform/graphics/IntRect.cpp:
        (WebCore::IntRect::IntRect):
        (WebCore):
        * platform/graphics/IntRect.h:
        (WebCore):
        (IntRect):

2012-02-21  James Robinson  <jamesr@chromium.org>

        Enable ScrollingCoordinator in chromium whenever compositing is enabled
        https://bugs.webkit.org/show_bug.cgi?id=79165

        Reviewed by Adam Barth.

        As the title says.

        * page/scrolling/chromium/ScrollingCoordinatorChromium.cpp:
        (WebCore::ScrollingCoordinator::frameViewHorizontalScrollbarLayerDidChange):
        (WebCore::ScrollingCoordinator::frameViewVerticalScrollbarLayerDidChange):
        (WebCore::ScrollingCoordinator::setScrollLayer):
        (WebCore::ScrollingCoordinator::setNonFastScrollableRegion):
        (WebCore::ScrollingCoordinator::setScrollParameters):
        (WebCore::ScrollingCoordinator::setWheelEventHandlerCount):
        (WebCore::ScrollingCoordinator::setShouldUpdateScrollLayerPositionOnMainThread):
            Remove ASSERT_NOT_REACHED()ed from these functions, they are now expected to be called but do nothing.
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::RenderLayerBacking):
            Guard a mac-specific piece of code in #if PLATFORM(MAC). This code already has a FIXME.
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::shouldCompositeOverflowControls):
            Make coordinatesScroll..() sufficient but not necessary for compositing overflow controls. In chromium, we
            want to composite overflow controls even for FrameViews that we aren't coordinating via the
            ScrollingCoordinator.

2012-02-21  Adam Klein  <adamk@chromium.org>

        Setting innerText causes DOMSubtreeModified to be dispatched too early
        https://bugs.webkit.org/show_bug.cgi?id=79140

        Reviewed by Ryosuke Niwa.

        Followup to r108152: move children change notifications later in
        ContainerNode::removeChildren(), thus making sure Node::inDocument()
        is in the correct state when we call into script.

        Tests: fast/dom/getElementById-consistency3.html
               fast/dom/getElementById-consistency4.html
               fast/dom/getElementById-consistency5.html

        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::removeChildren):

2012-02-15  Ryosuke Niwa  <rniwa@webkit.org>

        Assertion failure in TextIterator::handleTextBox
        https://bugs.webkit.org/show_bug.cgi?id=78530

        Reviewed by Eric Seidel.

        The assertion failure was caused by handleTextNodeFirstLetter's updating m_text without clearing
        m_sortedTextBoxesPosition. Re-structured handleTextNode so that we always reset m_sortedTextBoxesPosition
        when we have a first-letter.

        Test: editing/text-iterator/rtl-first-letter-text-iterator-crash.html

        * editing/TextIterator.cpp:
        (WebCore::TextIterator::handleTextNode):
        (WebCore::TextIterator::handleTextBox):
        (WebCore::TextIterator::handleTextNodeFirstLetter):

2012-02-21  Yael Aharon  <yael.aharon@nokia.com>

        Unreviewed build fix.

        No new tests.

        * platform/graphics/opengl/TextureMapperGL.cpp:

2012-02-21  Adam Klein  <adamk@chromium.org>

        ContainerNode::childrenChanged must be called immediately after removing children
        https://bugs.webkit.org/show_bug.cgi?id=79162

        Reviewed by Ryosuke Niwa.

        In r108152, a call to childrenChanged() was erroneously moved
        below the call to child->removedFromDocument(). This breaks, at the
        least, the behavior of the <title> element. This patch corrects the
        mistake and adds a test.

        Test: fast/dom/title-directionality-removeChild.html

        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::removeChild):

2012-02-21  Luke Macpherson   <macpherson@chromium.org>

        Implement many instances of HANDLE_INHERIT_AND_INITIAL_AND_PRIMITIVE in CSSStyleApplyProperty.
        https://bugs.webkit.org/show_bug.cgi?id=79067

        Reviewed by Andreas Kling.

        No new tests / refactoring only.

        * css/CSSStyleApplyProperty.cpp:
        (WebCore::CSSStyleApplyProperty::CSSStyleApplyProperty):
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::collectMatchingRulesForList):
        * rendering/style/RenderStyle.h:

2012-02-21  Jon Lee  <jonlee@apple.com>

        Bring notifications support to WK1 mac
        https://bugs.webkit.org/show_bug.cgi?id=78783
        <rdar://problem/10610578>

        Reviewed by Anders Carlsson.

        * WebCore.exp.in: Expose dispatchErrorEvent on Notification.

2012-02-21  No'am Rosenthal  <noam.rosenthal@nokia.com>

        [Qt] Previous web page appears outside content rect
        https://bugs.webkit.org/show_bug.cgi?id=78816

        Adjust the scissor clipping by -1, as the glScissor() function requires coordinates and
        not sizes.

        Reviewed by Kenneth Rohde Christiansen.

        No new functionality.

        * platform/graphics/opengl/TextureMapperGL.cpp:
        (WebCore::scissorClip):

2012-02-21  Victor Carbune  <vcarbune@adobe.com>

        Added support for pause-on-exit flag on a TextTrackCue.
        https://bugs.webkit.org/show_bug.cgi?id=72173

        Reviewed by Eric Carlson.

        Test: media/track/track-cues-pause-on-exit.html

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::updateActiveTextTrackCues): Implemented
        support for pausing the video if the pause-on-exit flag is set on
        a cue that is currently exiting.

2012-02-21  Kentaro Hara  <haraken@chromium.org>

        Enable the IDL attribute checker in all build systems
        https://bugs.webkit.org/show_bug.cgi?id=79090

        Reviewed by Adam Barth.

        We have enabled the IDL attribute checker in Chromium in r108322.
        This patch enables the IDL attribute checker in all other
        build systems.

        No tests. I manually checked that [Custommm], [CallWith=],
        [CallWith=ScriptExecutionContext|Foo] cause build failures.

        * CMakeLists.txt:
        * DerivedSources.make:
        * DerivedSources.pri:
        * GNUmakefile.am:
        * UseJSC.cmake:
        * UseV8.cmake:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/scripts/IDLAttributes.txt: Added [ObjCCustomImplementation]
        since I forgot to add it in r108322.

2012-02-21  Yael Aharon  <yael.aharon@nokia.com>

        [Texmap] Better management of shaders in TextureMapperGL
        https://bugs.webkit.org/show_bug.cgi?id=78674
 
        Reviewed by Noam Rosenthal.
 
        Split TextureMapperGL.cpp into two files.
        Get rid of the enums that we were using to identify shaders and to identify variables.
        Switch flip and opaque from using bool to using enums.
 
        No new tests. This is refactoring only.
 
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * platform/graphics/OpenGLShims.h:
        * platform/graphics/opengl/TextureMapperGL.cpp:
        (WebCore):
        (SharedGLData):
        (WebCore::TextureMapperGLData::SharedGLData::SharedGLData):
        (WebCore::TextureMapperGLData::SharedGLData::~SharedGLData):
        (WebCore::TextureMapperGLData::TextureMapperGLData):
        (TextureMapperGLData):
        (WebCore::TextureMapperGL::drawTexture):
        (WebCore::TextureMapperGL::drawTextureWithMaskAndOpacity):
        (WebCore::TextureMapperGL::drawTextureSimple):
        (WebCore::TextureMapperGL::beginClip):
        * platform/graphics/opengl/TextureMapperGL.h:
        * platform/graphics/opengl/TextureMapperShaderManager.cpp: Added.
        (WebCore):
        (WebCore::FRAGMENT_SHADER):
        (WebCore::TextureMapperShaderProgram::initializeProgram):
        (WebCore::TextureMapperShaderProgram::getUniformLocation):
        (WebCore::TextureMapperShaderProgram::~TextureMapperShaderProgram):
        (WebCore::TextureMapperShaderProgramSimple::create):
        (WebCore::TextureMapperShaderProgramSimple::TextureMapperShaderProgramSimple):
        (WebCore::TextureMapperShaderProgramSimple::vertexShaderSource):
        (WebCore::TextureMapperShaderProgramSimple::fragmentShaderSource):
        (WebCore::TextureMapperShaderProgramOpacityAndMask::create):
        (WebCore::TextureMapperShaderProgramOpacityAndMask::TextureMapperShaderProgramOpacityAndMask):
        (WebCore::TextureMapperShaderProgramOpacityAndMask::vertexShaderSource):
        (WebCore::TextureMapperShaderProgramOpacityAndMask::fragmentShaderSource):
        (WebCore::TextureMapperShaderProgramClip::create):
        (WebCore::TextureMapperShaderProgramClip::TextureMapperShaderProgramClip):
        (WebCore::TextureMapperShaderProgramClip::vertexShaderSource):
        (WebCore::TextureMapperShaderProgramClip::fragmentShaderSource):
        (WebCore::TextureMapperShaderManager::TextureMapperShaderManager):
        (WebCore::TextureMapperShaderManager::~TextureMapperShaderManager):
        * platform/graphics/opengl/TextureMapperShaderManager.h: Added.
        (WebCore):
        (WebCore::debugGLCommand):
        (TextureMapperShaderProgram):
        (WebCore::TextureMapperShaderProgram::id):
        (WebCore::TextureMapperShaderProgram::vertexAttrib):
        (WebCore::TextureMapperShaderProgram::shaderType):
        (TextureMapperShaderProgramSimple):
        (WebCore::TextureMapperShaderProgramSimple::matrixVariable):
        (WebCore::TextureMapperShaderProgramSimple::sourceMatrixVariable):
        (WebCore::TextureMapperShaderProgramSimple::sourceTextureVariable):
        (WebCore::TextureMapperShaderProgramSimple::opacityVariable):
        (TextureMapperShaderProgramOpacityAndMask):
        (WebCore::TextureMapperShaderProgramOpacityAndMask::sourceMatrixVariable):
        (WebCore::TextureMapperShaderProgramOpacityAndMask::matrixVariable):
        (WebCore::TextureMapperShaderProgramOpacityAndMask::maskMatrixVariable):
        (WebCore::TextureMapperShaderProgramOpacityAndMask::sourceTextureVariable):
        (WebCore::TextureMapperShaderProgramOpacityAndMask::maskTextureVariable):
        (WebCore::TextureMapperShaderProgramOpacityAndMask::opacityVariable):
        (TextureMapperShaderProgramClip):
        (WebCore::TextureMapperShaderProgramClip::matrixVariable):
        (TextureMapperShaderManager):
        (WebCore::TextureMapperShaderManager::getShaderProgram):
        * platform/graphics/qt/GraphicsContext3DQt.cpp:
        (WebCore::GraphicsContext3DPrivate::paintToTextureMapper):
        * platform/graphics/texmap/TextureMapper.h:
        (WebCore::BitmapTexture::reset):
        (WebCore::BitmapTexture::isOpaque):
        (BitmapTexture):

2012-02-21  Anders Carlsson  <andersca@apple.com>

        The tile cache should keep track of the tile coverage rect
        https://bugs.webkit.org/show_bug.cgi?id=79149
        <rdar://problem/10877338>

        Reviewed by Andreas Kling.

        Keep track of the tile coverage rect and use it to avoid trying to iterate over non-existent tiles on large pages.

        * platform/graphics/ca/mac/TileCache.h:
        (TileCache):
        * platform/graphics/ca/mac/TileCache.mm:
        (WebCore::TileCache::setNeedsDisplayInRect):
        (WebCore::TileCache::revalidateTiles):

2012-02-21  Andreas Kling  <awesomekling@apple.com>

        Make WebKitCSSShaderValue inherit directly from CSSValue.
        <http://webkit.org/b/79144>

        Reviewed by Antti Koivisto.

        WebKitCSSShaderValue was inheriting from CSSPrimitiveValue but only used
        it for storing the shader URL. Moved that to a String member instead.

        WebKitCSSShaderValues didn't even return true for isPrimitiveValue() so
        there should be no behavior change whatsoever here.

        * css/WebKitCSSShaderValue.cpp:
        (WebCore::WebKitCSSShaderValue::WebKitCSSShaderValue):
        (WebCore::WebKitCSSShaderValue::cachedShader):
        (WebCore::WebKitCSSShaderValue::customCssText):
        * css/WebKitCSSShaderValue.h:
        (WebKitCSSShaderValue):

2012-02-21  James Robinson  <jamesr@chromium.org>

        Unreviewed windows build fix - avoid return statement after return if USE(ACCELERATED_COMPOSITING) is set.

        * page/scrolling/ScrollingCoordinator.cpp:
        (WebCore::ScrollingCoordinator::coordinatesScrollingForFrameView):

2012-02-21  James Robinson  <jamesr@chromium.org>

        ScrollingCoordinator::coordinatesScrollingForFrameView should be conditional on compositing being active
        https://bugs.webkit.org/show_bug.cgi?id=79126

        Reviewed by Anders Carlsson.

        The ScrollingCoordinator should only attempt to coordinate scrolling when compositing is active, since it's all
        about manipulating GraphicsLayers. Adds a runtime check.

        Also removes some stray #if ENABLE(THREADED_SCROLLING) guards that snuck into FrameView.

        * page/FrameView.cpp:
        (WebCore::FrameView::addFixedObject):
        (WebCore::FrameView::removeFixedObject):
        * page/scrolling/ScrollingCoordinator.cpp:
        (WebCore::ScrollingCoordinator::coordinatesScrollingForFrameView):
        (WebCore::ScrollingCoordinator::frameViewRootLayerDidChange):

2012-02-21  James Robinson  <jamesr@chromium.org>

        Chromium build fix. Unreviwed but rubber-stamped by Antti.

        * dom/Document.cpp:
        * editing/ReplaceSelectionCommand.cpp:
        * inspector/InspectorStyleSheet.h:

2012-02-21  Eric Carlson  <eric.carlson@apple.com>

        Set Referrer header for media downloads
        https://bugs.webkit.org/show_bug.cgi?id=78614

        Reviewed by Alexey Proskuryakov.

        Test: http/tests/media/video-referer.html was modified to test this change.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::mediaPlayerReferrer): New, return the document's referer.
        * html/HTMLMediaElement.h:

        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::referrer): New, return the client's mediaPlayerReferrer.
        * platform/graphics/MediaPlayer.h:
        (WebCore::MediaPlayerClient::mediaPlayerReferrer):

        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createAVAssetForURL): Tell AVFoundation to add
            a referer header.

2012-02-21  Antti Koivisto  <antti@apple.com>

        Not reviewed.

        Remove some obsolete comments, use consistent name for propertyID.

        * css/StylePropertySet.h:
        (StylePropertySet):

2012-02-21  Antti Koivisto  <antti@apple.com>

        Clean up StylePropertySet included headers
        https://bugs.webkit.org/show_bug.cgi?id=79134

        Reviewed by Andreas Kling.

        Remove unneccesary includes.

        * bindings/js/JSDOMBinding.h:
        * css/StylePropertySet.cpp:
        * css/StylePropertySet.h:
        (WebCore):
        (StylePropertySet):
        * editing/RemoveCSSPropertyCommand.cpp:

2012-02-21  Lin Wei  <wei.a.lin@intel.com>

        Fix bug from r107672.
        https://bugs.webkit.org/show_bug.cgi?id=78773

        Before set MediaStreamTrack disable/enable operation,
        checking the status of MediaStream that contains this MediaStreamTrack.
        if MediaStream is finished, then skipping operation of 
        didSetMediaStreamTrackEnabled().

        Reviewed by Adam Barth.
        * mediastream/MediaStreamTrack.cpp:
        (WebCore::MediaStreamTrack::setEnabled):

2012-02-21  Julien Chaffraix  <jchaffraix@webkit.org>

        Move RenderLayer::scrolledContentOffset calls to a common function
        https://bugs.webkit.org/show_bug.cgi?id=76971

        Reviewed by David Hyatt.

        Refactoring without any change in behavior.

        This change adds a RenderBox::scrolledContentOffset function to handle all
        the calls that goes through the layer(). This indirection will enable us to
        add layer() checks without patching a lot of call sites as part of bug 75568.

        We also moved down the concept of scroll offset down to RenderBox where it belongs!

        * rendering/RenderLayer.h:
        (RenderLayer):
        (WebCore::RenderLayer::scrolledContentOffset):
        Moved scrolledContent to the private section of the class to prevent misuse.

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::scrolledContentOffset):
        New function to add an indirection with RenderLayer.

        * editing/visible_units.cpp:
        (WebCore::absoluteLineDirectionPointToLocalPointInBlock):
        * rendering/LayoutState.cpp:
        (WebCore::LayoutState::LayoutState):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::layoutBlock):
        (WebCore::RenderBlock::paintObject):
        (WebCore::RenderBlock::selectionGapRectsForRepaint):
        (WebCore::RenderBlock::paintSelection):
        (WebCore::RenderBlock::nodeAtPoint):
        (WebCore::RenderBlock::offsetForContents):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::offsetFromContainer):
        (WebCore::RenderBox::computeRectForRepaint):
        * rendering/RenderBox.h:
        (RenderBox):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paintFillLayerExtended):
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::clippedOverflowRectForRepaint):
        (WebCore::RenderInline::computeRectForRepaint):
        (WebCore::RenderInline::offsetFromContainer):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::computeRectForRepaint):
        (WebCore::RenderObject::mapLocalToContainer):
        (WebCore::RenderObject::mapAbsoluteToLocalPoint):
        (WebCore::RenderObject::offsetFromContainer):
        * rendering/RenderTextControlSingleLine.cpp:
        (WebCore::RenderTextControlInnerBlock::positionForPoint):
        Patched all those call sites to use the new function.

2012-02-21  Emil A Eklund  <eae@chromium.org>

        Remove obsolete float comparison FIXMEs
        https://bugs.webkit.org/show_bug.cgi?id=79127

        Reviewed by Eric Seidel.

        Remove obsolete FIXME comments added back when we were planning to use
        floating point units for layout.

        No new tests, no code changes.

        * page/FrameView.cpp:
        (WebCore::FrameView::init):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::layoutBlock):
        (WebCore::RenderBlock::computeStartPositionDeltaForChildAvoidingFloats):
        (WebCore::RenderBlock::getClearDelta):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::computeLogicalHeight):
        (WebCore::RenderBox::computeLogicalHeightUsing):
        (WebCore::RenderBox::computePercentageLogicalHeight):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::ImageQualityController::shouldPaintAtLowQuality):

2012-02-21  Alexander Pavlov  <apavlov@chromium.org>

        Web Inspector: it is nearly impossible to select and copy text on the Elements panel.
        https://bugs.webkit.org/show_bug.cgi?id=60814

        Reviewed by Pavel Feldman.

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

2012-02-21  Abhishek Arya  <inferno@chromium.org>

        Crash in RenderTableSection::nodeAtPoint.
        https://bugs.webkit.org/show_bug.cgi?id=78922

        Reviewed by Julien Chaffraix.

        Test: fast/table/table-section-node-at-point-crash.html

        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::nodeAtPoint): recalc cells if the
        m_needsCellRecalc is set. Otherwise, we will end up accessing
        removed table cells.

2012-02-21  Antti Koivisto  <antti@apple.com>

        Move PropertySetCSSStyleDeclaration to a file of its own
        https://bugs.webkit.org/show_bug.cgi?id=79121

        Rubber-stamped by Andreas Kling.

        This makes StylePropertySet.cpp more readable.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * css/PropertySetCSSStyleDeclaration.cpp: Copied from Source/WebCore/css/StylePropertySet.cpp.
        (WebCore::PropertySetCSSStyleDeclaration::ref):
        (WebCore::PropertySetCSSStyleDeclaration::deref):
        (WebCore):
        * css/PropertySetCSSStyleDeclaration.h: Added.
        (WebCore):
        (PropertySetCSSStyleDeclaration):
        (WebCore::PropertySetCSSStyleDeclaration::PropertySetCSSStyleDeclaration):
        (WebCore::PropertySetCSSStyleDeclaration::parentElement):
        (WebCore::PropertySetCSSStyleDeclaration::clearParentRule):
        (WebCore::PropertySetCSSStyleDeclaration::clearParentElement):
        (WebCore::PropertySetCSSStyleDeclaration::contextStyleSheet):
        (WebCore::PropertySetCSSStyleDeclaration::setNeedsStyleRecalc):
        (RuleCSSStyleDeclaration):
        (WebCore::RuleCSSStyleDeclaration::RuleCSSStyleDeclaration):
        (WebCore::RuleCSSStyleDeclaration::parentRule):
        (WebCore::RuleCSSStyleDeclaration::clearParentRule):
        (InlineCSSStyleDeclaration):
        (WebCore::InlineCSSStyleDeclaration::InlineCSSStyleDeclaration):
        (WebCore::InlineCSSStyleDeclaration::parentElement):
        (WebCore::InlineCSSStyleDeclaration::clearParentElement):
        * css/StylePropertySet.cpp:
        (WebCore):

2012-02-21  Philippe Normand  <pnormand@igalia.com>

        [GTK] WebAudio build is broken
        https://bugs.webkit.org/show_bug.cgi?id=79113

        Reviewed by Martin Robinson.

        * platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.cpp:
        (webKitWebAudioGStreamerChannelPosition): Set a default value for
        the position variable.
        * platform/audio/gtk/AudioBusGtk.cpp: Include CString.h, needed
        for sharedResourcesPath().

2012-02-21  Andreas Kling  <awesomekling@apple.com>

        Kill FontFamilyValue.
        <http://webkit.org/b/79103>

        Reviewed by Antti Koivisto.

        Remove FontFamilyValue and replace all usage by CSSPrimitiveValue.
        The class was only used to filter font family names, removing bracketed
        suffixes, e.g "[Xft]".

        This was added to KHTML in 2002 to support the use of specific X11 font
        families inside KMail: <https://bugs.kde.org/show_bug.cgi?id=38808>

        Test: fast/css/font-family-trailing-bracket-gunk.html

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.order:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSFontSelector.cpp:
        (WebCore::CSSFontSelector::addFontFaceRule):
        * css/CSSParser.cpp:
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::collectMatchingRulesForList):
        * css/CSSValue.cpp:
        (WebCore::CSSValue::cssText):
        (WebCore::CSSValue::destroy):
        * css/CSSValue.h:
        * css/CSSValuePool.cpp:
        (WebCore::CSSValuePool::createFontFamilyValue):
        * css/CSSValuePool.h:
        (CSSValuePool):
        * css/FontFamilyValue.cpp: Removed.
        * css/FontFamilyValue.h: Removed.

2012-02-21  Alexis Menard  <alexis.menard@openbossa.org>

        Little optimization for CSSParser::parseFillShorthand.
        https://bugs.webkit.org/show_bug.cgi?id=79042

        Reviewed by Hajime Morita.

        Remove one extra loop that we can combine with the following one
        which adds the properties to the parser's list of properties. I also
        removed a useless check.
        Instruments shows on the css-parser-yui benchmark an improvement
        of 13ms (from 77ms spent in the function to 64ms).

        No new tests : refactoring, existings tests should cover.

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

2012-02-20  David Hyatt  <hyatt@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=79046
        
        width of overflow:hidden blocks is wrong when their margins overlap floats.
        
        Relevant discussion is here: http://lists.w3.org/Archives/Public/www-style/2012Feb/0954.html
        
        This patch makes the following changes to how objects shrink when avoiding floats:
        (1) The containing block width used for percentage calculations is now constant. This means that
        an overflow:hidden block with a margin-left of 10% will no longer change what 10% means depending
        on the available line width. From a code perspective, containingBlockLogicalWidthForContent and
        containingBlockLogicalWidthForContentInRegion no longer contain any special-case code for
        shrinkToAvoidFloats() objects.

        (2) Now the computation of the logical width for the shrinking object itself handles the adjustments.
        Two kinds of adjustments are made for both the start and end margins. Conceptually what we do is shrink
        the object to the available line width minus our margins, and then expand the width back out to the content edge
        or to the float edge as necessary. If the float fully fits in the margin, then we expand back out to the
        content edge. Otherwise if the float doesn't fit, then we expand only to the float edge, making sure our
        margin overlaps with the float. This expansion is not performed for negative margins, since our result is already
        correct in that case.
        
        Reviewed by Dan Bernstein.

        Added the new tests from the thread on www-style about this issue (from Alan Gresley and George Talbot)
        in fast/block/float.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::containsFloat):
        * rendering/RenderBlock.h:
        (WebCore::RenderBlock::containsFloats):
        Changed to be const.

        (WebCore::RenderBlock::endOffsetForLine):
        (WebCore::RenderBlock::endOffsetForContent):
        Added endOffsetForXXX methods to mirror their startOffset counterparts. Used by the width adjustment code.

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::shrinkLogicalWidthToAvoidFloats):
        New method that handles shrinking the logical width to the line width (and then re-expanding back out to the
        float and/or content edges as needed).

        (WebCore::RenderBox::containingBlockLogicalWidthForContent):
        (WebCore::RenderBox::containingBlockLogicalWidthForContentInRegion):
        Patched to no longer do the shrinking of objects to avoid floats.

        (WebCore::RenderBox::computeLogicalWidthInRegion):
        (WebCore::RenderBox::computeLogicalWidthInRegionUsing):
        Patched to handle calling the new shrinking code to adjust our logical width.

        * rendering/RenderBox.h:
        (RenderBox):
        The signature of computeLogicalWithUsing changed to be region-specific and to carry along enough information
        to efficiently perform the shrinking.

        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::computeLogicalWidth):
        Patched to handle calling the new shrinking code to adjust our logical width.

2012-02-21  Sam Weinig  <sam@webkit.org>

        Attempt to fix the Snow Leopard build.

        * Configurations/Base.xcconfig:

2012-02-21  Sam Weinig  <sam@webkit.org>

        Use libc++ when building with Clang on Mac
        https://bugs.webkit.org/show_bug.cgi?id=78981

        Reviewed by Dan Bernstein.

        * Configurations/Base.xcconfig:

2012-02-21  Adam Roben  <aroben@apple.com>

        Mac build fix

        * WebCore.xcodeproj/project.pbxproj: Mark TextTrack.h and TextTrackCue.h private so that
        WebKit can include them.

2012-02-21  Andras Becsi  <andras.becsi@nokia.com>

        [Qt][WK2] Fix the N9 build
        https://bugs.webkit.org/show_bug.cgi?id=79101

        Reviewed by Noam Rosenthal.

        No new tests needed.

        * platform/graphics/opengl/TextureMapperGL.cpp: Add missing include.

2012-02-21  Adam Roben  <aroben@apple.com>

        Roll out r108309, r108323, and r108326

        They broke the 32-bit Lion build.

        Original bugs is <http://webkit.org/b/75812> <rdar://problem/10079694>.

        * CMakeLists.txt:

2012-02-21  Alexander Pavlov  <apavlov@chromium.org>

        Web Inspector: [SuggestBox] textPrompt.css disablement displays garbled suggest box
        https://bugs.webkit.org/show_bug.cgi?id=79107

        Reviewed by Pavel Feldman.

        * inspector/front-end/TextPrompt.js:
        (WebInspector.TextPrompt.SuggestBox):
        (WebInspector.TextPrompt.SuggestBox.prototype.get visible):
        (WebInspector.TextPrompt.SuggestBox.prototype.hide):
        (WebInspector.TextPrompt.SuggestBox.prototype.removeFromElement):
        (WebInspector.TextPrompt.SuggestBox.prototype._completionsReady):
        * inspector/front-end/textPrompt.css:
        (.suggest-box):

2012-02-21  Yury Semikhatsky  <yurys@chromium.org>

        Web Inspector: timeline hangs on a page with deep chain of nested events.
        https://bugs.webkit.org/show_bug.cgi?id=79106

        Use stack of states instead of recursive calls when traversing records tree to
        avoid stack overflow.

        Reviewed by Pavel Feldman.

        * inspector/front-end/TimelineOverviewPane.js:
        (WebInspector.TimelineOverviewPane.prototype._forAllRecords):
        * inspector/front-end/TimelinePanel.js:
        (WebInspector.TimelinePanel.prototype._filterRecords):

2012-02-21  Pavel Feldman  <pfeldman@google.com>

        Web Inspector: [crash] upon style modification after navigation
        https://bugs.webkit.org/show_bug.cgi?id=79108

        Reviewed by Yury Semikhatsky.

        * inspector/InspectorHistory.cpp:
        (WebCore::InspectorHistory::undo):
        (WebCore::InspectorHistory::redo):
        (WebCore::InspectorHistory::reset):

2012-02-21  Patrick Gansterer  <paroga@webkit.org>

        Use WTF::cryptographicallyRandomValues in FileSystemWin.cpp
        https://bugs.webkit.org/show_bug.cgi?id=79089

        Reviewed by Adam Roben.

        Avoid loading and unloading of the crypto library during every
        call to openTemporaryFile() and make the code easier.

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

2012-02-21  Alexander Færøy  <alexander.faeroy@nokia.com>

        Remove stylesheet pointer from StylePropertySet
        https://bugs.webkit.org/show_bug.cgi?id=79092

        Reviewed by Csaba Osztrogonác.

        Qt buildfix after r108345.

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

2012-02-21  Csaba Osztrogonác  <ossy@webkit.org>

        Remove stylesheet pointer from StylePropertySet
        https://bugs.webkit.org/show_bug.cgi?id=79092

        Reviewed by Antti Koivisto.

        Qt buildfix after r108345. We need this workaround because of buggy gcc (4.4.5), which
        reported a false warning: 'value$m_ptr' may be used uninitialized in this function

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

2012-02-21  Andreas Kling  <awesomekling@apple.com>

        Shrink attribute style property sets after populating them.
        <http://webkit.org/b/78972>

        Reviewed by Antti Koivisto.

        Add a StylePropertySet::shrinkToFit() and call it at the end of updateStyleAttribute()
        to minimize the amount of wasted space.

        * css/StylePropertySet.h:
        (WebCore::StylePropertySet::shrinkToFit):
        * dom/StyledElement.cpp:
        (WebCore::StyledElement::updateAttributeStyle):

2012-02-21  Antti Koivisto  <antti@apple.com>

        Remove stylesheet pointer from StylePropertySet
        https://bugs.webkit.org/show_bug.cgi?id=79092

        Reviewed by Andreas Kling.

        The context should be passed as an argument for CSS parser invoking setters that actually need it.
        
        - Remove the context stylesheet pointer.
        - Add context stylesheet argument to setters.
        - Drop an unnecessary StylePropertySet constructor, pass strict parsing flag directly.
        - Adapt to changes by passing in the context stylesheet where needed.
        - Add StyledElement::applyPresentationAttributeToStyle helpers for building up the attribute style.

        * css/CSSFontFaceRule.cpp:
        (WebCore::CSSFontFaceRule::addSubresourceStyleURLs):
        * css/CSSParser.cpp:
        (WebCore::parseColorValue):
        (WebCore::parseSimpleLengthValue):
        (WebCore::CSSParser::parseValue):
        (WebCore::CSSParser::parseDeclaration):
        (WebCore::CSSParser::createStyleRule):
        (WebCore::CSSParser::createFontFaceRule):
        (WebCore::CSSParser::createPageRule):
        (WebCore::CSSParser::createKeyframeRule):
        * css/CSSParser.h:
        (CSSParser):
        * css/CSSStyleRule.cpp:
        (WebCore::CSSStyleRule::addSubresourceStyleURLs):
        * css/StylePropertySet.cpp:
        (WebCore::PropertySetCSSStyleDeclaration::contextStyleSheet):
        (WebCore::PropertySetCSSStyleDeclaration::setNeedsStyleRecalc):
        (RuleCSSStyleDeclaration):
        (InlineCSSStyleDeclaration):
        (WebCore):
        (WebCore::StylePropertySet::StylePropertySet):
        (WebCore::StylePropertySet::setProperty):
        (WebCore::StylePropertySet::parseDeclaration):
        (WebCore::StylePropertySet::addSubresourceStyleURLs):
        (WebCore::StylePropertySet::clearParentRule):
        (WebCore::StylePropertySet::clearParentElement):
        (WebCore::PropertySetCSSStyleDeclaration::setCssText):
        (WebCore::PropertySetCSSStyleDeclaration::setProperty):
        (WebCore::PropertySetCSSStyleDeclaration::setPropertyInternal):
        (WebCore::PropertySetCSSStyleDeclaration::parentStyleSheet):
        (WebCore::RuleCSSStyleDeclaration::setNeedsStyleRecalc):
        (WebCore::RuleCSSStyleDeclaration::contextStyleSheet):
        (WebCore::InlineCSSStyleDeclaration::contextStyleSheet):
        (SameSizeAsStylePropertySet):
        * css/StylePropertySet.h:
        (WebCore::StylePropertySet::create):
        (StylePropertySet):
        * css/WebKitCSSMatrix.cpp:
        (WebCore::WebKitCSSMatrix::setMatrixValue):
        * dom/ElementAttributeData.cpp:
        (WebCore::ElementAttributeData::ensureInlineStyleDecl):
        * dom/StyledElement.cpp:
        (WebCore):
        (WebCore::StyledElement::parseAttribute):
        (WebCore::StyledElement::setInlineStyleProperty):
        (WebCore::StyledElement::addSubresourceAttributeURLs):
        (WebCore::StyledElement::updateAttributeStyle):
        * dom/StyledElement.h:
        (StyledElement):
        (WebCore::StyledElement::applyPresentationAttributeToStyle):
        (WebCore):
        * html/HTMLBRElement.cpp:
        (WebCore::HTMLBRElement::collectStyleForAttribute):
        * html/HTMLBodyElement.cpp:
        (WebCore::HTMLBodyElement::collectStyleForAttribute):
        * html/HTMLDivElement.cpp:
        (WebCore::HTMLDivElement::collectStyleForAttribute):
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::applyBorderAttributeToStyle):
        (WebCore::HTMLElement::mapLanguageAttributeToLocale):
        (WebCore::HTMLElement::collectStyleForAttribute):
        (WebCore::HTMLElement::applyAlignmentAttributeToStyle):
        (WebCore::HTMLElement::addHTMLLengthToStyle):
        (WebCore::HTMLElement::addHTMLColorToStyle):
        * html/HTMLElement.h:
        (HTMLElement):
        * html/HTMLFontElement.cpp:
        (WebCore::HTMLFontElement::collectStyleForAttribute):
        * html/HTMLHRElement.cpp:
        (WebCore::HTMLHRElement::collectStyleForAttribute):
        * html/HTMLImageElement.cpp:
        (WebCore::HTMLImageElement::collectStyleForAttribute):
        * html/HTMLLIElement.cpp:
        (WebCore::HTMLLIElement::collectStyleForAttribute):
        * html/HTMLMarqueeElement.cpp:
        (WebCore::HTMLMarqueeElement::collectStyleForAttribute):
        * html/HTMLOListElement.cpp:
        (WebCore::HTMLOListElement::collectStyleForAttribute):
        * html/HTMLParagraphElement.cpp:
        (WebCore::HTMLParagraphElement::collectStyleForAttribute):
        * html/HTMLTableCaptionElement.cpp:
        (WebCore::HTMLTableCaptionElement::collectStyleForAttribute):
        * html/HTMLTableCellElement.cpp:
        (WebCore::HTMLTableCellElement::collectStyleForAttribute):
        * html/HTMLTableElement.cpp:
        (WebCore::HTMLTableElement::collectStyleForAttribute):
        * html/HTMLTablePartElement.cpp:
        (WebCore::HTMLTablePartElement::collectStyleForAttribute):
        * html/HTMLTextAreaElement.cpp:
        (WebCore::HTMLTextAreaElement::collectStyleForAttribute):
        * html/HTMLUListElement.cpp:
        (WebCore::HTMLUListElement::collectStyleForAttribute):
        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::setFont):
        * mathml/MathMLElement.cpp:
        (WebCore::MathMLElement::collectStyleForAttribute):
        * svg/SVGFontFaceElement.cpp:
        (WebCore::SVGFontFaceElement::insertedIntoDocument):
        (WebCore::SVGFontFaceElement::removedFromDocument):
        (WebCore::SVGFontFaceElement::removeFromMappedElementSheet):
        * svg/SVGImageElement.cpp:
        (WebCore::SVGImageElement::collectStyleForAttribute):
        * svg/SVGStyledElement.cpp:
        (WebCore::SVGStyledElement::collectStyleForAttribute):
        * svg/SVGTextContentElement.cpp:
        (WebCore::SVGTextContentElement::collectStyleForAttribute):

2012-02-21  Yury Semikhatsky  <yurys@chromium.org>

        [V8] Web Inspector: set breakpoint/pause doesn't work when worker is in a tight loop
        https://bugs.webkit.org/show_bug.cgi?id=79097

        Worker script will be interrupted to dispatch all arriving inspector commands.
        This way debugger will be operable even if worker is in a tight loop.

        Reviewed by Pavel Feldman.

        * bindings/js/ScriptDebugServer.h:
        (Task):
        (WebCore::ScriptDebugServer::Task::~Task):
        (ScriptDebugServer):
        * bindings/js/WorkerScriptDebugServer.cpp:
        (WebCore::WorkerScriptDebugServer::interruptAndRunTask):
        (WebCore):
        * bindings/js/WorkerScriptDebugServer.h:
        (WorkerScriptDebugServer):
        * bindings/v8/ScriptDebugServer.cpp:
        (WebCore::ScriptDebugServer::interruptAndRun):
        * bindings/v8/ScriptDebugServer.h:
        (ScriptDebugServer):
        * bindings/v8/WorkerScriptDebugServer.cpp:
        (WebCore::WorkerScriptDebugServer::WorkerScriptDebugServer):
        (WebCore::WorkerScriptDebugServer::interruptAndRunTask):
        (WebCore):
        * bindings/v8/WorkerScriptDebugServer.h:
        (v8):
        (WebCore):
        (WorkerScriptDebugServer):
        * inspector/WorkerDebuggerAgent.cpp:
        (WebCore::WorkerDebuggerAgent::WorkerDebuggerAgent):
        (WebCore::WorkerDebuggerAgent::~WorkerDebuggerAgent):
        (WebCore):
        (WebCore::WorkerDebuggerAgent::interruptAndDispatchInspectorCommands):
        * inspector/WorkerDebuggerAgent.h:
        (WebCore):
        (WorkerDebuggerAgent):
        * workers/WorkerMessagingProxy.cpp:
        (WebCore):
        (WebCore::WorkerMessagingProxy::sendMessageToInspector):
        * workers/WorkerRunLoop.cpp:
        (WebCore::WorkerRunLoop::run):
        (WebCore::WorkerRunLoop::runInMode):
        * workers/WorkerRunLoop.h:
        (WorkerRunLoop):

2012-02-21  'Pavel Feldman'  <pfeldman@google.com>

        Not reviewed: fixing Mac build (take 2).

        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::setShowPaintRects):

2012-02-21  'Pavel Feldman'  <pfeldman@google.com>

        Not reviewed: fixing Mac build.

        * inspector/DOMNodeHighlighter.cpp:
        (WebCore::DOMNodeHighlighter::drawOutline):
        * inspector/DOMNodeHighlighter.h:
        (DOMNodeHighlighter):
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::willPaintImpl):
        * inspector/InspectorInstrumentation.h:
        (InspectorInstrumentation):
        (WebCore::InspectorInstrumentation::willPaint):
        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::InspectorPageAgent):
        (WebCore::InspectorPageAgent::willPaint):
        (WebCore::InspectorPageAgent::didPaint):
        * inspector/InspectorPageAgent.h:

2012-02-21  Peter Rybin  <peter.rybin@gmail.com>

        Web Inspector: Switch Debugger agent to TypeBuilder
        https://bugs.webkit.org/show_bug.cgi?id=78390

        Reviewed by Vsevolod Vlasov.

        Client code is switched to TypeBuilder.

        * inspector/CodeGeneratorInspector.py:
        * inspector/InjectedScript.cpp:
        (WebCore::InjectedScript::evaluateOnCallFrame):
        (WebCore::InjectedScript::getFunctionDetails):
        (WebCore::InjectedScript::getProperties):
        (WebCore::InjectedScript::wrapCallFrames):
        * inspector/InjectedScript.h:
        (InjectedScript):
        * inspector/InspectorDebuggerAgent.cpp:
        (WebCore::InspectorDebuggerAgent::setBreakpointByUrl):
        (WebCore::InspectorDebuggerAgent::resolveBreakpoint):
        (WebCore::InspectorDebuggerAgent::getFunctionDetails):
        (WebCore::InspectorDebuggerAgent::evaluateOnCallFrame):
        (WebCore::InspectorDebuggerAgent::currentCallFrames):
        (WebCore::InspectorDebuggerAgent::didParseSource):
        * inspector/InspectorDebuggerAgent.h:
        (InspectorDebuggerAgent):

2012-02-21  'Pavel Feldman'  <pfeldman@google.com>

        Not reviewed: fixing poor merge in r108332.

        * inspector/front-end/StylesSidebarPane.js:
        (WebInspector.StylePropertiesSection.prototype._handleSelectorClick):
        * inspector/front-end/externs.js:

2012-02-21  Alexander Pavlov  <apavlov@chromium.org>

        Web Inspector: [Styles] Rule source URL tooltip should show line number
        https://bugs.webkit.org/show_bug.cgi?id=79087

        Reviewed by Pavel Feldman.

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

2012-02-21  Pavel Feldman  <pfeldman@chomium.org>

        Web Inspector: clicking empty space should not re-enter edit mode
        https://bugs.webkit.org/show_bug.cgi?id=79024

        Reviewed by Vsevolod Vlasov.

        * inspector/front-end/StylesSidebarPane.js:
        (WebInspector.StylePropertiesSection):
        (WebInspector.StylePropertiesSection.prototype._handleEmptySpaceMouseDown):
        (WebInspector.StylePropertiesSection.prototype._handleEmptySpaceClick):

2012-02-21  Pavel Feldman  <pfeldman@chomium.org>

        Web Inspector: evaluate on hover does not work for large files.
        https://bugs.webkit.org/show_bug.cgi?id=79015

        Reviewed by Yury Semikhatsky.

        * inspector/front-end/JavaScriptSourceFrame.js:
        (WebInspector.JavaScriptSourceFrame.prototype._getPopoverAnchor):
        (WebInspector.JavaScriptSourceFrame.prototype._highlightExpression):
        * inspector/front-end/Popover.js:
        (WebInspector.PopoverHelper.prototype._handleMouseAction):
        * inspector/front-end/SourceJavaScriptTokenizer.js:
        (WebInspector.SourceJavaScriptTokenizer):
        (WebInspector.SourceJavaScriptTokenizer.prototype.nextToken):
        * inspector/front-end/SourceJavaScriptTokenizer.re2js:

2012-02-21  Pavel Feldman  <pfeldman@google.com>

        Web Inspector: add "show paint rectangles" setting.
        https://bugs.webkit.org/show_bug.cgi?id=79030

        Reviewed by Yury Semikhatsky.

        * English.lproj/localizedStrings.js:
        * inspector/DOMNodeHighlighter.cpp:
        (WebCore::DOMNodeHighlighter::drawOutline):
        (DOMNodeHighlighter):
        * inspector/DOMNodeHighlighter.h:
        (WebCore):
        (DOMNodeHighlighter):
        * inspector/Inspector.json:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::willPaintImpl):
        (WebCore::InspectorInstrumentation::didPaintImpl):
        * inspector/InspectorInstrumentation.h:
        (WebCore):
        (InspectorInstrumentation):
        (WebCore::InspectorInstrumentation::willPaint):
        * inspector/InspectorPageAgent.cpp:
        (PageAgentState):
        (WebCore::InspectorPageAgent::create):
        (WebCore::InspectorPageAgent::InspectorPageAgent):
        (WebCore::InspectorPageAgent::setShowPaintRects):
        (WebCore):
        (WebCore::InspectorPageAgent::didClearWindowObjectInWorld):
        (WebCore::InspectorPageAgent::willPaint):
        (WebCore::InspectorPageAgent::didPaint):
        (WebCore::InspectorPageAgent::buildObjectForFrame):
        * inspector/InspectorPageAgent.h:
        (WebCore):
        * inspector/front-end/Settings.js:
        (WebInspector.Settings):
        * inspector/front-end/SettingsScreen.js:
        (WebInspector.SettingsScreen):
        (WebInspector.SettingsScreen.prototype._showPaintRectsChanged):
        * inspector/front-end/inspector.js:
        * page/FrameView.cpp:
        (WebCore::FrameView::paintContents):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::paintContents):

2012-02-21  Andras Becsi  <andras.becsi@nokia.com>

        [Qt] Clean-up project file after r108310

        Reviewed by Csaba Osztrogonác.

        No new tests needed.

        * Target.pri: Fix path for TextTrack headers.

2012-02-17  Philippe Normand  <pnormand@igalia.com>

        [GStreamer] media/W3C failures
        https://bugs.webkit.org/show_bug.cgi?id=75078

        Reviewed by Martin Robinson.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::load): Clean out everything
        after file:// url path to cope with media/W3C tests loading
        file:///path/to/media.ext?some parameters.

2012-02-21  Matt Lilek  <mrl@apple.com>

        Not reviewed, build fix for non-client-based Geolocation builds after r107982.

        * page/Geolocation.cpp:

2012-02-21  Yury Semikhatsky  <yurys@chromium.org>

        [V8] Web Inspector: simplify worker debugger implementation
        https://bugs.webkit.org/show_bug.cgi?id=79085

        There is one instance of WorkerScriptDebugServer per worker thread. We don't
        need to resolve WorkerContext from V8::Context anymore.

        Reviewed by Pavel Feldman.

        * bindings/v8/WorkerScriptDebugServer.cpp:
        (WebCore::WorkerScriptDebugServer::WorkerScriptDebugServer):
        (WebCore::WorkerScriptDebugServer::addListener):
        (WebCore::WorkerScriptDebugServer::removeListener):
        (WebCore::WorkerScriptDebugServer::getDebugListenerForContext):
        (WebCore::WorkerScriptDebugServer::runMessageLoopOnPause):
        * bindings/v8/WorkerScriptDebugServer.h:
        (WorkerScriptDebugServer):
        * inspector/WorkerDebuggerAgent.cpp:
        (WebCore::WorkerDebuggerAgent::WorkerDebuggerAgent):
        (WebCore::WorkerDebuggerAgent::startListeningScriptDebugServer):
        (WebCore::WorkerDebuggerAgent::stopListeningScriptDebugServer):

2012-02-21  Kentaro Hara  <haraken@chromium.org>

        Enable the IDL attribute checker in Chromium
        https://bugs.webkit.org/show_bug.cgi?id=79082

        Reviewed by Adam Barth.

        We have fixed 10~ bugs caused by typos of IDL attributes.
        This patch adds an IDL attribute checker, which checks if all IDL attributes
        used in IDL files are implemented by code generators.

            - The IDL attribute checker uses IDLAttributes.txt, which lists all
              IDL attributes implemented in code generators. If we want to add
              a new IDL attribute, we need to add it to IDLAttributes.txt manually.
            - The IDL attribute checker checks if all IDL attributes used in IDL files
              are listed in IDLAttributes.txt.
            - If the IDL attribute checker fails, the build fails with a verbose error message.

        No tests. I manually checked that [Custommm], [CallWith=],
        [CallWith=ScriptExecutionContext|Foo] cause build failures.

        * WebCore.gyp/WebCore.gyp: Modified to enable the IDL attribute checker.

        * bindings/scripts/resolve-supplemental.pl:
        (loadIDLAttributes): This method loads a list of IDL attributes from IDLAttributes.txt.
        (checkIDLAttributes): This method implementes the IDL attribute checker as described above.
        (checkIfIDLAttributesExists):

        * bindings/scripts/IDLParser.pm: "1" is not good to represent that
        the IDL attribute does not have any value. This patch changed it to "VALUE_IS_MISSING".
        (parseExtendedAttributes):
        (ParseInterface):
        * bindings/scripts/CodeGenerator.pm: Ditto.
        (ContentAttributeName):
        * bindings/scripts/CodeGeneratorV8.pm: Ditto.
        (GenerateNormalAttrGetter):
        (GenerateNormalAttrSetter):
        (GenerateSingleBatchedAttribute):
        (GetRuntimeEnableFunctionName):
        * bindings/scripts/IDLAttributes.txt: Added. This file lists all IDL attributes implemented
        in code generators.

2012-02-21  Patrick Gansterer  <paroga@webkit.org>

        Use Win32 API to get file information
        https://bugs.webkit.org/show_bug.cgi?id=55336

        Reviewed by Adam Roben.

        Use FindFirstFile() in favour over _wstat64() to share the code with WinCE.

        * platform/win/FileSystemWin.cpp:
        (WebCore):
        (WebCore::getFindData):
        (WebCore::getFileSize):
        (WebCore::getFileModificationTime):
        (WebCore::fileExists):

2012-02-20  Adam Barth  <abarth@webkit.org>

        Invalid cast in WebCore::toElement / WebCore::HTMLElementStack::ElementRecord::element
        https://bugs.webkit.org/show_bug.cgi?id=78975

        Reviewed by Eric Seidel.

        We're supposed to set the action attribute on the form element we just
        created.  Previously, we assumed the newly created form element would
        be on the top of the stack of open elements, but if we're in the table
        body insertion mode, the form element gets treated as self closing and
        is therefore popped off the stack of open elements.

        Fortunately, we already cache a pointer to the most recently inserted
        form element on the HTMLConstructionSite, so we can just grab the
        element from there.

        Test: html5lib/runner.html

        * html/parser/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::processIsindexStartTagForInBody):
        (WebCore):

2012-02-20  Adam Barth  <abarth@webkit.org>

        Unite TextTrack-related files with their friends in WebCore/html/track
        https://bugs.webkit.org/show_bug.cgi?id=78941

        Reviewed by Eric Seidel.

        The code that supports <track> seems to be split between the
        WebCore/html directory and the WebCore/html/track directory.  This
        patch unites this code in the WebCore/html/track directory.

        * CMakeLists.txt:
        * DerivedSources.make:
        * DerivedSources.pri:
        * GNUmakefile.list.am:
        * WebCore.gypi:
        * WebCore.xcodeproj/project.pbxproj:
        * html/LoadableTextTrack.cpp: Removed.
        * html/LoadableTextTrack.h: Removed.
        * html/TextTrack.cpp: Removed.
        * html/TextTrack.h: Removed.
        * html/TextTrack.idl: Removed.
        * html/TextTrackCue.cpp: Removed.
        * html/TextTrackCue.h: Removed.
        * html/TextTrackCue.idl: Removed.
        * html/TextTrackCueList.cpp: Removed.
        * html/TextTrackCueList.h: Removed.
        * html/TextTrackCueList.idl: Removed.
        * html/track/LoadableTextTrack.cpp: Copied from Source/WebCore/html/LoadableTextTrack.cpp.
        * html/track/LoadableTextTrack.h: Copied from Source/WebCore/html/LoadableTextTrack.h.
        * html/track/TextTrack.cpp: Copied from Source/WebCore/html/TextTrack.cpp.
        * html/track/TextTrack.h: Copied from Source/WebCore/html/TextTrack.h.
        * html/track/TextTrack.idl: Copied from Source/WebCore/html/TextTrack.idl.
        * html/track/TextTrackCue.cpp: Copied from Source/WebCore/html/TextTrackCue.cpp.
        * html/track/TextTrackCue.h: Copied from Source/WebCore/html/TextTrackCue.h.
        * html/track/TextTrackCue.idl: Copied from Source/WebCore/html/TextTrackCue.idl.
        * html/track/TextTrackCueList.cpp: Copied from Source/WebCore/html/TextTrackCueList.cpp.
        * html/track/TextTrackCueList.h: Copied from Source/WebCore/html/TextTrackCueList.h.
        * html/track/TextTrackCueList.idl: Copied from Source/WebCore/html/TextTrackCueList.idl.

2012-02-20  Filip Pizlo  <fpizlo@apple.com>

        JSC should be a triple-tier VM
        https://bugs.webkit.org/show_bug.cgi?id=75812
        <rdar://problem/10079694>

        Reviewed by Gavin Barraclough.
        
        No new tests, because there is no change in behavior.

        * CMakeLists.txt:

2012-02-20  Benjamin Poulain  <benjamin@webkit.org>

        Get rid of the LocalizationStrategy
        https://bugs.webkit.org/show_bug.cgi?id=78324

        Reviewed by Sam Weinig.

        Remove LocalizationStrategy and unify the localization behind
        LocalizedStrings.h and LocalizedStrings.cpp.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.exp.in:
        * WebCore.gypi:
        * WebCore.order:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/DefaultLocalizationStrategy.cpp: Removed.
        * platform/DefaultLocalizationStrategy.h: Removed.
        * platform/LocalizationStrategy.h: Removed.
        * platform/LocalizedStrings.cpp:
        * platform/LocalizedStrings.h:
        (WebCore):
        * platform/PlatformStrategies.cpp:
        * platform/PlatformStrategies.h:
        (WebCore):
        (WebCore::PlatformStrategies::PlatformStrategies):
        (PlatformStrategies):
        * platform/qt/LocalizedStringsQt.cpp: Copied from Source/WebKit/qt/WebCoreSupport/PlatformStrategiesQt.cpp.

2012-02-20  Kentaro Hara  <haraken@chromium.org>

        Remove [TreatReturnedNullStringAsNull] from HTMLMediaElement.mediaGroup
        https://bugs.webkit.org/show_bug.cgi?id=79064

        Reviewed by Hajime Morita.

        [TreatReturnedNullStringAsNull] is a typo of [TreatReturnedNullStringAs=Null].
        But as far as I read the spec
        (http://www.whatwg.org/specs/web-apps/current-work/multipage/the-video-element.html#attr-media-mediagroup),
        there is no statement about what value should be returned when HTMLMediaElement.mediaGroup
        is not yet initialized. In particular, there is no statement that says "null should
        be returned when HTMLMediaElement.mediaGroup is not initialized". Thus, instead of
        fixing the typo, just removing [TreatReturnedNullStringAsNull] would make sense.
        Removing [TreatReturnedNullStringAsNull] does not change the current behavior.

        Test: media/media-controller.html (No change in the test results.)

        * html/HTMLMediaElement.idl:

2012-02-20  Hayato Ito  <hayato@chromium.org>

        Use InsertinonPoint instead of HTMLContentElement.
        https://bugs.webkit.org/show_bug.cgi?id=78778

        Reviewed by Hajime Morita.

        Replace HTMLContentElement with InsertionPoint in NodeRenderingContext and HTMLContentSelection.
        This is one of followup patches for r108207.

        No new tests, no change in behavior.

        * dom/NodeRenderingContext.cpp:
        (WebCore::nextRendererOf):
        (WebCore::previousRendererOf):
        (WebCore::firstRendererOf):
        (WebCore::lastRendererOf):
        * dom/NodeRenderingContext.h:
        (WebCore):
        (NodeRenderingContext):
        (WebCore::NodeRenderingContext::insertionPoint):
        * dom/ShadowRoot.cpp:
        (WebCore::ShadowRoot::insertionPointFor):
        * dom/ShadowRoot.h:
        (WebCore):
        * html/shadow/HTMLContentElement.cpp:
        (WebCore::HTMLContentElement::HTMLContentElement):
        (WebCore::HTMLContentElement::attach):
        (WebCore::HTMLContentElement::detach):
        * html/shadow/HTMLContentElement.h:
        (HTMLContentElement):
        * html/shadow/HTMLContentSelector.cpp:
        (WebCore::HTMLContentSelector::select):
        * html/shadow/HTMLContentSelector.h:
        (WebCore):
        (HTMLContentSelection):
        (WebCore::HTMLContentSelection::insertionPoint):
        (WebCore::HTMLContentSelection::HTMLContentSelection):
        (WebCore::HTMLContentSelection::create):
        * html/shadow/InsertionPoint.cpp:
        (WebCore::InsertionPoint::InsertionPoint):
        * html/shadow/InsertionPoint.h:
        (WebCore::InsertionPoint::selections):
        (WebCore::InsertionPoint::hasSelection):
        (InsertionPoint):

2012-02-20  David Barton  <dbarton@mathscribe.com>

        MathML internals - code clean-up for RenderMathMLSubSup
        https://bugs.webkit.org/show_bug.cgi?id=79063

        Reviewed by Eric Seidel.

        In the next patch, I will shrink and revise the <msubsup> formatting code. To make this
        easier to follow, I am first doing some simple code clean-up.

        No new tests.

        * rendering/mathml/RenderMathMLRow.cpp:
        (WebCore::RenderMathMLRow::layout):
        * rendering/mathml/RenderMathMLRow.h:
        (WebCore::RenderMathMLRow::isRenderMathMLRow):
        * rendering/mathml/RenderMathMLSubSup.cpp:
        (WebCore::RenderMathMLSubSup::stretchToHeight):
        (WebCore::RenderMathMLSubSup::layout):
            - There is no need to iterate over baseWrapper's children since it should have only
              one child, the base of the <msubsup>.

2012-02-20  Kentaro Hara  <haraken@chromium.org>

        Replace [V8Custom=DOMWindowNOP] with [V8Custom]
        https://bugs.webkit.org/show_bug.cgi?id=79062

        Reviewed by Adam Barth.

        [V8Custom=DOMWindowNOP] is not implemented by CodeGeneratorV8.pm.
        This patch replaces it with [V8Custom].

        No new tests. No change in behavior.

        * page/DOMWindow.idl:

2012-02-20  Kentaro Hara  <haraken@chromium.org>

        [JSGenerateIsReachable=ImplRoot] is not implemented, it should be [JSGenerateIsReachable]
        https://bugs.webkit.org/show_bug.cgi?id=79061

        Reviewed by Adam Barth.

        CSSStyleDeclaration.idl uses [JSGenerateIsReachable=ImplRoot],
        but "ImplRoot" is not implemented in CodeGeneratorJS.pm.
        This patch replaces [JSGenerateIsReachable=ImplRoot] with [JSGenerateIsReachable].

        No tests. No change in behavior.

        * css/CSSStyleDeclaration.idl:

2012-02-20  Kentaro Hara  <haraken@chromium.org>

        [EnabledAtRuntime] in HTMLShadowElement.idl should be [V8EnabledAtRuntime]
        https://bugs.webkit.org/show_bug.cgi?id=79058

        Reviewed by Adam Barth.

        [EnabledAtRuntime] does not exist any longer. It should be [V8EnabledAtRuntime].

        No tests.

        * html/shadow/HTMLShadowElement.idl:

2012-02-20  Kentaro Hara  <haraken@chromium.org>

        Replace [Callback=FunctionOnly] with [Callback]
        https://bugs.webkit.org/show_bug.cgi?id=79060

        Reviewed by Adam Barth.

        [Callback=FunctionOnly] is not implemented by any code generator.
        This patch replaces it with [Callback].

        No tests. No change in behavior.

        * Modules/intents/IntentResultCallback.idl:
        * Modules/intents/NavigatorIntents.idl:
        * dom/RequestAnimationFrameCallback.idl:
        * mediastream/NavigatorMediaStream.idl:
        * mediastream/NavigatorUserMediaErrorCallback.idl:
        * mediastream/NavigatorUserMediaSuccessCallback.idl:
        * mediastream/PeerConnection.idl:
        * mediastream/SignalingCallback.idl:
        * page/PositionCallback.idl:
        * page/PositionErrorCallback.idl:

2012-02-20  Andy Chen  <andchen@rim.com>

        2012-02-17  Andy Chen  <andchen@rim.com>

        [BlackBerry] Need to override active/inactive text search highlight color for RenderThemeBlackBerry
        https://bugs.webkit.org/show_bug.cgi?id=78920

        Override two functions for text search highlight colors so that we can
        provide platform specified colors.

        Reviewed by Antonio Gomes.

        No function change so no new tests.

        * platform/blackberry/RenderThemeBlackBerry.cpp:
        (WebCore::RenderThemeBlackBerry::platformActiveTextSearchHighlightColor):
        (WebCore::RenderThemeBlackBerry::platformInactiveTextSearchHighlightColor):
        * platform/blackberry/RenderThemeBlackBerry.h:

2012-02-20  John Knottenbelt  <jknotten@chromium.org>

        Default canvas backing store to be 1:1 with specified dimensions.
        https://bugs.webkit.org/show_bug.cgi?id=78971

        Reviewed by Adam Barth.

        Although the canvas specification states that the backing image may
        be larger than the user-specified dimensions, there are a number of
        philip canvas tests that fail when the backing image data is not
        1:1 with the specified canvas dimensions. These failures are
        tracked in https://bugs.webkit.org/show_bug.cgi?id=73645

        This change defaults the canvas backing store to be 1:1 with the
        user-specified dimensions, while also providing an
        ENABLE(HIGH_DPI_CANVAS) build option to reinstate the original
        behaviour, so that the above bug may be more easily fixed.

        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::HTMLCanvasElement):

2012-02-20  Mary Wu  <mary.wu@torchmobile.com.cn>

        Upstream RenderThemeBlackberry.h/.cpp into WebCore/platform/blackberry
        https://bugs.webkit.org/show_bug.cgi?id=78785

        Main Contributors:
        Daniel Bates <dbates@rim.com>
        Bryan Gislason <bgislason@rim.com>
        Akash Vaswani <akvaswani@rim.com>
        Dave Battista <dbattista@rim.com>
        Robin Cao  <robin.cao@torchmobile.com.cn>
        Genevieve Mak <gmak@rim.com>
        Mike Fenton  <mifenton@rim.com>

        Reviewed by Antonio Gomes.

        Initial upstream, no new tests.

        * platform/blackberry/RenderThemeBlackBerry.cpp: Added.
        * platform/blackberry/RenderThemeBlackBerry.h: Added.

2012-02-20  Martin Robinson  <mrobinson@igalia.com>

        [GTK] [EFL] Collapse duplicate WebGL support code
        https://bugs.webkit.org/show_bug.cgi?id=78970

        Reviewed by Gustavo Noronha Silva.

        No new tests. This just cleans up duplicated code.

        Centralize duplicated WebGL code for EFL and GTK+ in the Cairo
        directory. This is in preparation for the changes necessary to
        connect WebGL to the TextureMapper AC.

        * GNUmakefile.list.am: Update source list.
        * PlatformEfl.cmake: Update source list.
        * platform/graphics/cairo/DrawingBufferCairo.cpp: Renamed from Source/WebCore/platform/graphics/gtk/DrawingBufferGtk.cpp.
        * platform/graphics/cairo/GraphicsContext3DCairo.cpp: Integrated the code From GraphicsContext3DGtk.cpp.
        * platform/graphics/efl/DrawingBufferEfl.cpp: Removed.
        * platform/graphics/efl/GraphicsContext3DEfl.cpp: Removed.
        * platform/graphics/gtk/GraphicsContext3DGtk.cpp: Removed.

2012-02-20  Martin Robinson  <mrobinson@igalia.com>

        [UNIX] Plugin information fields are not interpreted as UTF-8
        https://bugs.webkit.org/show_bug.cgi?id=78635

        Reviewed by Gustavo Noronha Silva.

        Interpret plugin metadata as UTF8 aways. This matches the behavior
        of Chromium and the Totem plugin.

        This is tested by a change to TestNetscapePlugin and expectations updates.

        * plugins/efl/PluginPackageEfl.cpp:
        (WebCore::PluginPackage::fetchInfo): Use String::fromUTF8.
        * plugins/gtk/PluginPackageGtk.cpp:
        (WebCore::PluginPackage::fetchInfo): Use String::fromUTF8.
        * plugins/qt/PluginPackageQt.cpp:
        (WebCore::PluginPackage::fetchInfo): Use String::fromUTF8.

2012-02-20  Martin Robinson  <mrobinson@igalia.com>

        [GTK] Web content oftens steals focus from other widgets
        https://bugs.webkit.org/show_bug.cgi?id=77791

        Reviewed by Gustavo Noronha Silva.

        * platform/gtk/WidgetGtk.cpp:
        (WebCore::Widget::setFocus): No longer do anything special to try
        to grab "real" widget focus. This matches the behavior on Qt.
        * plugins/gtk/PluginViewGtk.cpp:
        (WebCore::PluginView::setFocus): Moved the focus handling to here.
        This ensures that behavior for plugins does not change.

2012-02-20  Yael Aharon  <yael.aharon@nokia.com>

        Regression (108135) isOpaque() returns uninitialized variable.
        https://bugs.webkit.org/show_bug.cgi?id=79049

        Reviewed by Noam Rosenthal.

        isOpaque() should use the new m_flags instead of the old m_isOpaque.
        No new tests. No new functionality.

        * platform/graphics/texmap/TextureMapper.h:
        (WebCore::BitmapTexture::reset):
        (WebCore::BitmapTexture::isOpaque):
        (BitmapTexture):

2012-02-20  Kentaro Hara  <haraken@chromium.org>

        Unreviewed. Rebaselined run-bindings-tests results.

        * bindings/scripts/test/CPP/WebDOMTestInterface.cpp:
        * bindings/scripts/test/CPP/WebDOMTestInterface.h:
        * bindings/scripts/test/CPP/WebDOMTestObj.cpp:
        * bindings/scripts/test/CPP/WebDOMTestObj.h:

2012-02-20  No'am Rosenthal  <noam.rosenthal@nokia.com>

        [Qt][WK2] Clipping is broken
        https://bugs.webkit.org/show_bug.cgi?id=78677

        It's not necessary to add a full-viewport rect to the scissor clip stack.
        It creates a situation where if there's a clip in the page, we return to
        the viewport clip instead of applying the WebView's clip we got from the
        scenegraph.

        Also, it's unnecessary to clip before we paint the layer's content, we should
        only clip afterwards, before painting the children. 

        Reviewed by Kenneth Rohde Christiansen.

        No new functionality.

        * platform/graphics/opengl/TextureMapperGL.cpp:
        (WebCore::BitmapTextureGL::size):
        (WebCore::scissorClip):
        (WebCore):
        (WebCore::TextureMapperGL::beginScissorClip):
        (WebCore::TextureMapperGL::endScissorClip):
        * platform/graphics/texmap/TextureMapperLayer.cpp:
        (WebCore::TextureMapperLayer::paintSelfAndChildren):

2012-02-20  No'am Rosenthal  <noam.rosenthal@nokia.com>

        [Texmap] Layers and tiles appear to have missing pixels in their right/bottom borders
        https://bugs.webkit.org/show_bug.cgi?id=78961

        The relativeSize member should point to one pixel before the edge, since it's used
        by glVertexAttribPointer, which takes edge points and not sizes.

        Reviewed by Kenneth Rohde Christiansen.

        No new funcionality.

        * platform/graphics/opengl/TextureMapperGL.cpp:
        (WebCore::BitmapTextureGL::didReset):

2012-02-20  Kihong Kwon  <kihong.kwon@samsung.com>

        Add a new API for the Vibration API(W3C).
        https://bugs.webkit.org/show_bug.cgi?id=72010

        http://dev.w3.org/2009/dap/vibration/
        This patch implements navigator.webkitvibrate() API.
        This API operates differently depending upon a given parameter:
        1. It cancels vibration when given 0 or [].
        2. It gives a vibration duration in milliseconds when given as a single integer value.
        3. It gives a vibration pattern when given as an integer array. For instance, [1000 300 1000] generates a vibration of 1000ms followed by 300ms of idle time, and then creates another vibration of 1000ms.

        Reviewed by Hajime Morita.

        Test: fast/dom/navigator-vibration.html

        * CMakeLists.txt:
        * Modules/vibration/NavigatorVibration.cpp: Added.
        (WebCore):
        (WebCore::NavigatorVibration::NavigatorVibration):
        (WebCore::NavigatorVibration::~NavigatorVibration):
        (WebCore::NavigatorVibration::webkitVibrate):
        Add webkitVibrate method to get an array or single integer parameter for vibrating.
        They check vibration is activated in the platform, and then call vibrate() in the Vibration class.
        * Modules/vibration/NavigatorVibration.h: Added.
        (WebCore):
        (NavigatorVibration):
        * Modules/vibration/NavigatorVibration.idl: Added.
        * Modules/vibration/Vibration.cpp: Added.
        This class implements the entire vibration logic.
        (WebCore):
        (WebCore::Vibration::Vibration):
        (WebCore::Vibration::~Vibration):
        (WebCore::Vibration::create):
        (WebCore::Vibration::vibrate):
        (WebCore::Vibration::cancelVibration):
        (WebCore::Vibration::suspendVibration):
        (WebCore::Vibration::resumeVibration):
        (WebCore::Vibration::timerStartFired):
        (WebCore::Vibration::timerStopFired):
        (WebCore::Vibration::supplementName):
        (WebCore::Vibration::isActive):
        (WebCore::provideVibrationTo):
        * Modules/vibration/Vibration.h: Added.
        (WebCore):
        (Vibration):
        (WebCore::Vibration::from):
        * Modules/vibration/VibrationClient.h: Added.
        vibrate() and cancelVibrate() need to be implemented in the VibrationClient.
        (WebCore):
        (VibrationClient):
        (WebCore::VibrationClient::~VibrationClient):

2012-02-20  Yuta Kitamura  <yutak@chromium.org>

        Unreviewed, rolling out r108263.
        http://trac.webkit.org/changeset/108263
        https://bugs.webkit.org/show_bug.cgi?id=77856

        Broke Chromium Windows build.

        * platform/audio/DynamicsCompressor.cpp:
        (WebCore::DynamicsCompressor::DynamicsCompressor):
        (WebCore::DynamicsCompressor::setEmphasisStageParameters):
        (WebCore::DynamicsCompressor::process):
        (WebCore::DynamicsCompressor::reset):
        * platform/audio/DynamicsCompressor.h:
        (WebCore::DynamicsCompressor::isStereo):
        (DynamicsCompressor):
        * platform/audio/DynamicsCompressorKernel.cpp:
        (WebCore::DynamicsCompressorKernel::DynamicsCompressorKernel):
        (WebCore::DynamicsCompressorKernel::setPreDelayTime):
        (WebCore::DynamicsCompressorKernel::process):
        (WebCore::DynamicsCompressorKernel::reset):
        * platform/audio/DynamicsCompressorKernel.h:
        (DynamicsCompressorKernel):
        * webaudio/DynamicsCompressorNode.cpp:
        (WebCore::DynamicsCompressorNode::DynamicsCompressorNode):
        (WebCore::DynamicsCompressorNode::initialize):

2012-02-20  Raymond Liu  <raymond.liu@intel.com>

        Have the DynamicsCompressorNode support multi-channel data
        https://bugs.webkit.org/show_bug.cgi?id=77856

        Reviewed by Chris Rogers.

        * platform/audio/DynamicsCompressor.cpp:
        (WebCore::DynamicsCompressor::DynamicsCompressor):
        (WebCore::DynamicsCompressor::setEmphasisStageParameters):
        (WebCore::DynamicsCompressor::process):
        (WebCore::DynamicsCompressor::reset):
        (WebCore::DynamicsCompressor::setNumberOfChannels):
        (WebCore):
        * platform/audio/DynamicsCompressor.h:
        (DynamicsCompressor):
        * platform/audio/DynamicsCompressorKernel.cpp:
        (WebCore::DynamicsCompressorKernel::DynamicsCompressorKernel):
        (WebCore::DynamicsCompressorKernel::setNumberOfChannels):
        (WebCore):
        (WebCore::DynamicsCompressorKernel::setPreDelayTime):
        (WebCore::DynamicsCompressorKernel::process):
        (WebCore::DynamicsCompressorKernel::reset):
        * platform/audio/DynamicsCompressorKernel.h:
        (DynamicsCompressorKernel):
        * webaudio/DynamicsCompressorNode.cpp:
        (WebCore::DynamicsCompressorNode::DynamicsCompressorNode):
        (WebCore::DynamicsCompressorNode::initialize):

2012-02-20  David Barton  <dbarton@mathscribe.com>

        RenderMathMLRow::baselinePosition() only if linePositionMode == PositionOnContainingLine
        https://bugs.webkit.org/show_bug.cgi?id=79039

        Reviewed by Eric Seidel.

        RenderMathMLRow::baselinePosition() is actually unnecessary, but I am deleting it in two
        steps. First we add a guard to restrict it to the intended PositionOnContainingLine
        case, leaving PositionOfInteriorLineBoxes to a superclass, RenderBlock. This removes
        some randomness, and tightens up the results of four existing test files.

        Test: mathml/presentation/row.xhtml, fenced.xhtml, mo.xhtml, and mo-stretch.html

        * rendering/mathml/RenderMathMLRow.cpp:
        (WebCore::RenderMathMLRow::baselinePosition):

2012-02-18  Jon Lee  <jonlee@apple.com>

        HTML input file control "No File Selected" needs more room in some languages
        https://bugs.webkit.org/show_bug.cgi?id=32366
        <rdar://problem/4481028>

        Reviewed by David Hyatt.

        The patch exposes a function to return the "no file(s) selected" label text.

        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::fileListDefaultLabel): Added to expose the text for the label in
        file upload controls when nothing has been selected.
        (WebCore::RenderTheme::fileListNameForWidth): Refactor to use fileListDefaultLabel().
        * rendering/RenderTheme.h: Change fileListNameForWidth() to be a const function.

        * rendering/RenderThemeMac.h: Update fileListNameForWidth() to be a const function for
        platform implementations.
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::fileListNameForWidth): Refactor to use fileListDefaultLabel().

        Update fileListNameForWidth() to be a const function for platform implementations.
        * platform/gtk/RenderThemeGtk.h:
        * platform/gtk/RenderThemeGtk.cpp:
        * platform/qt/RenderThemeQt.h:
        * platform/qt/RenderThemeQt.cpp:

        * rendering/RenderFileUploadControl.cpp:
        (WebCore::RenderFileUploadControl::computePreferredLogicalWidths): Change the calculation
        of the max preferred logical width. Calculate the length of the "no file(s) selected" text,
        and include the button and after-button margin. Take the max of that and the original
        default width, which was a string of 34 (defaultWidthNumChars) "0"'s, in the case that the
        label text is too short.

2012-02-20  Gavin Barraclough  <barraclough@apple.com>

        Rubber stamped by Sam Weinig.

        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::JSDOMWindowBase::allowsAccessFrom):
            - Errk, remove dead code from end of function.

2012-02-16  Gavin Barraclough  <barraclough@apple.com>

        Move special __proto__ property to Object.prototype
        https://bugs.webkit.org/show_bug.cgi?id=78409

        Reviewed by Oliver Hunt.

        Re-implement this as a regular accessor property.  This has three key benefits:
        1) It makes it possible for objects to be given properties named __proto__.
        2) Object.prototype.__proto__ can be deleted, preventing object prototypes from being changed.
        3) This largely removes the magic used the implement __proto__, it can just be made a regular accessor property.

        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::JSDOMWindowBase::allowsAccessFrom):
        (WebCore):
            - expose allowsAccessFrom check to JSC.
        * bindings/js/JSDOMWindowBase.h:
        (JSDOMWindowBase):
            - expose allowsAccessFrom check to JSC.

2012-02-20  Benjamin Poulain  <benjamin@webkit.org>

        Make JSCSSStyleDeclaration work directly with CSS Property ID
        https://bugs.webkit.org/show_bug.cgi?id=79014

        Reviewed by Geoffrey Garen.

        Previously, accessing the CSS property was done by converting from
        the JavaScript name to the CSS name, then converting that name to a lowercase
        character array, and finally getting the CSS property ID.

        This patch cut the indirection and make the code go directly from the
        JavaScript name conversion to the CSS property ID.

        This improves the performance mainly due to the following:
        -avoid dynamic memory allocation
        -cut the conversion early when possible
        -do not parse the string twice
        The previous fast-path optimization was removed because it is no longer
        necessary with this change.

        The improvement are the following:
        -previous fast-path: no change
        -previous slow-path: ~3 times faster

        Test: fast/dom/CSSStyleDeclaration/access-longest-css-property.html
        This just test the edge case of CSSPropertyName.

        * bindings/js/JSCSSStyleDeclarationCustom.cpp:
        (WebCore::writeWebKitPrefix):
        (WebCore::writeEpubPrefix):
        (WebCore::cssPropertyIDForJSCSSPropertyName):
        (WebCore::isCSSPropertyName):
        (WebCore::JSCSSStyleDeclaration::nameGetter):
        (WebCore::JSCSSStyleDeclaration::putDelegate):
        * css/CSSParser.cpp:
        (WebCore::cssPropertyID):
        (WebCore):
        (WebCore::cssPropertyNameIOSAliasing):
        * css/CSSParser.h:
        (WebCore):

2012-02-20  Dan Bernstein  <mitz@apple.com>

        Updated Localizable.strings after r107440.

        Rubber-stamped by Joseph Pecoraro.

        * English.lproj/Localizable.strings:

2012-02-20  David Barton  <dbarton@mathscribe.com>

        MathML internals - remove nonOperatorHeight(), hasBase()
        https://bugs.webkit.org/show_bug.cgi?id=78977

        Reviewed by Eric Seidel.

        Stretchy operators, including embellished ones, should stretch to the largest height of
        the non-stretchy items in the same explicit or implicit <mrow>.
        RenderMathMLRow::layout() used to use hasBase(), isRenderMathMLOperator(), and
        nonOperatorHeight() to approximate this height. We now use unembellishedOperator() to
        improve this approximation, while also simplifying the code. More plainly, the code used
        to skip all operators when estimating this height, instead of just the stretchy ones. We
        continue to do that for now, but we more accurately skip all embellished operators
        (using our currently implemented approximate definition of this), and use the simple and
        true height of the remaining items. In case all items in the row are stretchy,
        style()->fontSize() is better than using whatever heights these items currently happen
        to be stretched to.

        Test: mathml/presentation/mo-stretch.html, and many existing tests

        * rendering/mathml/RenderMathMLBlock.cpp:
        (WebCore):
        * rendering/mathml/RenderMathMLBlock.h:
        (WebCore::RenderMathMLBlock::unembellishedOperator):
        * rendering/mathml/RenderMathMLRow.cpp:
        (WebCore):
        (WebCore::RenderMathMLRow::layout):
        * rendering/mathml/RenderMathMLRow.h:
        (WebCore::RenderMathMLRow::isRenderMathMLRow):
        * rendering/mathml/RenderMathMLSubSup.cpp:
        (WebCore):
        * rendering/mathml/RenderMathMLSubSup.h:
        (RenderMathMLSubSup):
        * rendering/mathml/RenderMathMLUnderOver.cpp:
        (WebCore):
        * rendering/mathml/RenderMathMLUnderOver.h:
        (RenderMathMLUnderOver):

2012-02-17  Anders Carlsson  <andersca@apple.com>

        Stop the committer timer when the page is destroyed
        https://bugs.webkit.org/show_bug.cgi?id=78907

        Reviewed by Adam Roben.

        We don't want the committer timer to fire after the scrolling tree has been invalidated,
        so stop the committer timer to prevent it from firing and trying to access the scrolling tree.

        * page/scrolling/ScrollingCoordinator.cpp:
        (WebCore::ScrollingCoordinator::pageDestroyed):

2012-02-20  Patrick Gansterer  <paroga@webkit.org>

        [WIN] Allow compiling FileSystem without CoreFoundation.
        https://bugs.webkit.org/show_bug.cgi?id=79032

        Reviewed by Adam Roben.

        Add #if USE(CF) around code using the CoreFoundation functions.

        * platform/FileSystem.h:
        * platform/win/FileSystemWin.cpp:

2012-02-20  Robin Cao  <robin.cao@torchmobile.com.cn>

        [BlackBerry] Upstream the first few files in platform/graphics/blackberry
        https://bugs.webkit.org/show_bug.cgi?id=79023

        Reviewed by Antonio Gomes.

        Initial upstreaming, no new tests.

        * platform/graphics/blackberry/FloatPointBlackBerry.cpp: Added.
        (WebCore):
        (WebCore::FloatPoint::FloatPoint):
        (WebCore::FloatPoint::operator BlackBerry::Platform::FloatPoint):
        * platform/graphics/blackberry/FloatRectBlackBerry.cpp: Added.
        (WebCore):
        (WebCore::FloatRect::FloatRect):
        (WebCore::FloatRect::operator BlackBerry::Platform::FloatRect):
        * platform/graphics/blackberry/FloatSizeBlackBerry.cpp: Added.
        (WebCore):
        (WebCore::FloatSize::FloatSize):
        (WebCore::FloatSize::operator BlackBerry::Platform::FloatSize):
        * platform/graphics/blackberry/IntPointBlackBerry.cpp: Added.
        (WebCore):
        (WebCore::IntPoint::IntPoint):
        (WebCore::IntPoint::operator BlackBerry::Platform::IntPoint):
        * platform/graphics/blackberry/IntRectBlackBerry.cpp: Added.
        (WebCore):
        (WebCore::IntRect::IntRect):
        (WebCore::IntRect::operator BlackBerry::Platform::IntRect):
        * platform/graphics/blackberry/IntSizeBlackBerry.cpp: Added.
        (WebCore):
        (WebCore::IntSize::IntSize):
        (WebCore::IntSize::operator BlackBerry::Platform::IntSize):

2012-02-20  Patrick Gansterer  <paroga@webkit.org>

        [WIN] Share openTemporaryFile with WinCE
        https://bugs.webkit.org/show_bug.cgi?id=58750

        Reviewed by Adam Roben.

        Use pathByAppendingComponent instead of PathCombine to share the
        code with WinCE. Also use the wide version of Windows functions.

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

2012-02-20  Victor Carbune  <victor@rosedu.org>

        Added code to support dispatching of missed cues in case of normal playback
        and event sorting in case of simultaneous event triggering.

        <track>-related events cuechange, enter, and exit should be sorted and filtered before dispatching
        https://bugs.webkit.org/show_bug.cgi?id=72171

        Reviewed by Eric Carlson.

        Tests: media/track/track-cues-missed.html
               media/track/track-cues-sorted-before-dispatch.html

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::HTMLMediaElement): Added initialization code
        for newly added state variables.
        (WebCore::trackIndexCompare): Static boolean compare function between
        the index of two tracks.
        (WebCore):
        (WebCore::eventTimeCueCompare): Static boolean compare function between
        events associated with text track cues.
        (WebCore::HTMLMediaElement::updateActiveTextTrackCues): Added code to
        sort the events associated with text track cues before dispatching.
        Each step from the specification is commented within the code.
        (WebCore::HTMLMediaElement::finishSeek): Added a boolean variable that
        is needed within the text track update function, to know whether a seek
        event has occured before or not.
        (WebCore::HTMLMediaElement::mediaPlayerTimeChanged): Moved the update
        call for text tracks at the beginning of the function instead of the end.
        'ended' events for video should be dispatched after track specific events.
        * html/HTMLMediaElement.h: Added variables to keep
        state information required by the text track update algorithm (last time
        the algorithm was run, and whether a seeking event has occured)
        (HTMLMediaElement):

        * html/LoadableTextTrack.cpp: Refactored fireCueChangeEvent method
        (WebCore::LoadableTextTrack::fireCueChangeEvent): The method dispatches a
        synchronous cue change event for the track element.
        * html/LoadableTextTrack.h:
        (LoadableTextTrack):
        * html/TextTrack.cpp: Modified the fireCueChange method, cached track index.
        (WebCore::TextTrack::TextTrack):
        (WebCore::TextTrack::trackIndex): Cached the track index.
        (WebCore):
        (WebCore::TextTrack::invalidateTrackIndex): Invalidates the track. Used
        when a new track is added in a TextTrackList instance.
        * html/TextTrack.h:
        (TextTrack):
        (WebCore::TextTrack::fireCueChangeEvent): The fireCueChangeEvent has been changed,
        as events need to be fired asyncronously.
        * html/TextTrackCue.cpp: Added internal variables to keep the current index
        position in the track cue order. This is invalidated when an element is
        inserted before.
        (WebCore::TextTrackCue::TextTrackCue):
        (WebCore::TextTrackCue::cueIndex): Getter for the cueIndex.
        (WebCore):
        (WebCore::TextTrackCue::invalidateCueIndex): Invalidates the currently stored
        cue index.
        (WebCore::TextTrackCue::dispatchEvent): Event dispatching is done asynchronously
        now. This should be the only method used for event dispatching.
        (WebCore::TextTrackCue::setIsActive): The setIsActive method no longer dispatches
        events, but rather just changes the m_isActive variable.
        * html/TextTrackCue.h:
        (TextTrackCue):

        * html/TextTrackCueList.cpp:
        (WebCore::TextTrackCueList::getCueIndex): Retrieves the cue index, in the track cue
        order, of a given cue.
        (WebCore):
        (WebCore::TextTrackCueList::add): Modified the add method such that all the next cue
        indexes are invalidated.
        (WebCore::TextTrackCueList::invalidateCueIndexes): Invalidates all cue indexes starting
        with a specific position.
        * html/TextTrackCueList.h:
        (TextTrackCueList):
        * html/track/TextTrackList.cpp:
        (TextTrackList::getTrackIndex): Retrieves the track index position.
        (TextTrackList::append): Added method for invalidating the text track index in case of
        changing the list contents.
        * html/track/TextTrackList.h:
        (TextTrackList):

2012-02-20  Kenichi Ishibashi  <bashi@chromium.org>

        [WebSocket] Move WebSocketChannel::FrameData into a separate header file
        https://bugs.webkit.org/show_bug.cgi?id=78682

        Extract WebSocketChannel::FrameData as WebSocketFrame. This brings
        flexibility to add classes which want to do something for
        incoming/outgoing frames (e.g. compression/decompression).

        Reviewed by Kent Tamura.

        No new tests. No behavior change.

        * GNUmakefile.list.am: AddedWebSocketFrame.h
        * Target.pri: Ditto.
        * WebCore.gypi: Ditto.
        * WebCore.vcproj/WebCore.vcproj: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Ditto.
        * websockets/WebSocketChannel.cpp: Modified to use WebSocketFrame instead of FrameData
        (WebCore):
        (WebCore::WebSocketChannel::send):
        (WebCore::WebSocketChannel::startClosingHandshake):
        (WebCore::WebSocketChannel::parseFrame):
        (WebCore::WebSocketChannel::processFrame):
        (WebCore::WebSocketChannel::enqueueTextFrame):
        (WebCore::WebSocketChannel::enqueueRawFrame):
        (WebCore::WebSocketChannel::enqueueBlobFrame):
        (WebCore::appendMaskedFramePayload): Added.
        (WebCore::makeFrameData): Added.
        (WebCore::WebSocketChannel::sendFrame):
        * websockets/WebSocketChannel.h: Removed FrameData.
        (WebSocketChannel):
        (QueuedFrame):
        * websockets/WebSocketFrame.h: Added.
        (WebCore):
        (WebSocketFrame):
        (WebCore::WebSocketFrame::isNonControlOpCode):
        (WebCore::WebSocketFrame::isControlOpCode):
        (WebCore::WebSocketFrame::isReservedOpCode):
        (WebCore::WebSocketFrame::WebSocketFrame):

2012-02-20  Adam Roben  <aroben@apple.com>

        32-bit build fix

        * platform/FractionalLayoutUnit.h:
        (WebCore::FractionalLayoutUnit::setRawValue): Explicitly cast long long to int, since they
        are different widths in 32-bit.

2012-02-20  Adam Roben  <aroben@apple.com>

        Clang build fix

        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::willModifyDOMAttr): Removed unused parameter.

2012-02-20  Vsevolod Vlasov  <vsevik@chromium.org>

        Unreviewed manual rollout of r107970 which breaks table column widths
        updates from javascript (e.g. inspector's network panel).

        * rendering/FixedTableLayout.cpp:
        (WebCore::FixedTableLayout::calcWidthArray):
        * rendering/RenderTableCol.h:
        (RenderTableCol):

2012-02-20  Alexander Pavlov  <apavlov@chromium.org>

        Web Inspector: [Styles] Inconsistent alignment of non-parsed properties (having an exclamation mark)
        https://bugs.webkit.org/show_bug.cgi?id=79028

        Reviewed by Yury Semikhatsky.

        * inspector/front-end/elementsPanel.css:
        (.styles-section .properties li.not-parsed-ok img.exclamation-mark):

2012-02-20  Alexander Pavlov  <apavlov@chromium.org>

        Web Inspector: DOMAttrModified should not be fired if the attribute value remains the same
        https://bugs.webkit.org/show_bug.cgi?id=79025

        Reviewed by Pavel Feldman.

        * dom/Element.cpp:
        (WebCore::Element::willModifyAttribute):
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::InspectorDOMAgent):
        (WebCore::InspectorDOMAgent::willModifyDOMAttr):
        (WebCore):
        (WebCore::InspectorDOMAgent::didModifyDOMAttr):
        * inspector/InspectorDOMAgent.h:
        (InspectorDOMAgent):
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::willModifyDOMAttrImpl):
        * inspector/InspectorInstrumentation.h:
        (InspectorInstrumentation):
        (WebCore::InspectorInstrumentation::willModifyDOMAttr):

2012-02-20  Kwonjin Jeong  <gram@company100.net>

        Correct a typo error in ScrollingCoordinator.h
        https://bugs.webkit.org/show_bug.cgi?id=79012

        Reviewed by Andreas Kling.

        * page/scrolling/ScrollingCoordinator.h:
        (ScrollingCoordinator):

2012-02-20  Alexander Pavlov  <apavlov@chromium.org>

        Web Inspector: [Styles] box-shadow and -webkit-box-shadow properties are not considered color-aware
        https://bugs.webkit.org/show_bug.cgi?id=78988

        Reviewed by Yury Semikhatsky.

        * inspector/front-end/CSSKeywordCompletions.js:

2012-02-20  Yosifumi Inoue  <yosin@chromium.org>

        [Forms] Spin buttons of number input type should fire both input and change event
        https://bugs.webkit.org/show_bug.cgi?id=75067

        Reviewed by Kent Tamura.

        This patch makes spin button in number input field clicks to fire input and change events as described in WHATWG HTML5 specification.
        To implement this behavior, this patch introduces new value DispatchInputAndChangeEvent in TextFieldEventBehavior.

        Test: fast/forms/number/spin-button-events.html

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::stepUpFromRenderer): Pass DispatchInputAndChangeEvent instead of DispatchChangeEvent to applyStep, setValue, and setValueAsNumber.
        * html/HTMLTextFormControlElement.h: Add new enum value DispatchInputAndChangeEvent to TextFieldEventBehavior.
        * html/TextFieldInputType.cpp:
        (WebCore::TextFieldInputType::setValue): Handle DispatchInputAndChangeEvent and use RefPtr for element to keep reference.

2012-02-20  Shinya Kawanaka  <shinyak@chromium.org>

        Attached/Detached state must be testable
        https://bugs.webkit.org/show_bug.cgi?id=79010

        Reviewed by Hajime Morita.

        Added a method to check an element attached or not.

        Test: fast/dom/shadow/shadow-root-attached.html

        * testing/Internals.cpp:
        (WebCore::Internals::attached):
        (WebCore):
        * testing/Internals.h:
        (Internals):
        * testing/Internals.idl:

2012-02-20  Kenichi Ishibashi  <bashi@chromium.org>

        [WebSocket] Add deflater/inflater classes
        https://bugs.webkit.org/show_bug.cgi?id=78449

        Add WebSocketDeflater/WebSocketInflater classes which wrap zlib
        functions. These classes are not used yet, but will be used for
        supporting WebSocket deflate-frame extension.

        This patch is second try. The previous patch broke Chromium Win
        build. I added dependency of zlib to WebCore.gyp. I think it's
        OK because Chromium already depends on zlib.

        Reviewed by Kent Tamura.

        No new tests except for chromium port. Behavior is unchanged.

        * GNUmakefile.list.am: Added WebSocketDeflater.(cpp|h).
        * WebCore.gyp/WebCore.gyp: Added zlib dependency.
        * WebCore.gypi: Added WebSocketDeflater.(cpp|h).
        * WebCore.vcproj/WebCore.vcproj: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Ditto.
        * websockets/WebSocketDeflater.cpp: Added.
        (WebCore):
        (WebCore::WebSocketDeflater::create):
        (WebCore::WebSocketDeflater::WebSocketDeflater):
        (WebCore::WebSocketDeflater::initialize):
        (WebCore::WebSocketDeflater::~WebSocketDeflater):
        (WebCore::setStreamParameter):
        (WebCore::WebSocketDeflater::addBytes):
        (WebCore::WebSocketDeflater::finish):
        (WebCore::WebSocketDeflater::reset):
        (WebCore::WebSocketInflater::create):
        (WebCore::WebSocketInflater::WebSocketInflater):
        (WebCore::WebSocketInflater::initialize):
        (WebCore::WebSocketInflater::~WebSocketInflater):
        (WebCore::WebSocketInflater::addBytes):
        (WebCore::WebSocketInflater::finish):
        (WebCore::WebSocketInflater::reset):
        * websockets/WebSocketDeflater.h: Added.
        (WebCore):
        (WebSocketDeflater):
        (WebCore::WebSocketDeflater::data):
        (WebCore::WebSocketDeflater::size):
        (WebSocketInflater):
        (WebCore::WebSocketInflater::data):
        (WebCore::WebSocketInflater::size):

2012-02-20  pfeldman@chomium.org  <pavel.feldman@gmail.com>

        Web Inspector: consume undo/redo shortcuts.
        https://bugs.webkit.org/show_bug.cgi?id=79016

        Reviewed by Vsevolod Vlasov.

        * inspector/front-end/ElementsPanel.js:
        (WebInspector.ElementsPanel.prototype.handleShortcut):

2012-02-20  Philippe Normand  <pnormand@igalia.com>

        MediaPlayer: MediaPlayerPrivate registration cleanup
        https://bugs.webkit.org/show_bug.cgi?id=78897

        Reviewed by Martin Robinson.

        * platform/graphics/MediaPlayer.cpp:
        (WebCore::installedMediaEngines): Simplified GStreamer Private
        player registration by using the PlatformMediaEngineClassName
        macro like other players do.

2012-02-17  Yury Semikhatsky  <yurys@chromium.org>

        [Chromium] Web Inspector: terminated workers are not removed from dedicated worker list
        https://bugs.webkit.org/show_bug.cgi?id=78899

        Notify inspector about starting context from WorkerContextProxy not from Worker.

        Reviewed by Pavel Feldman.

        * workers/Worker.cpp:
        (WebCore::Worker::notifyFinished):
        * workers/WorkerMessagingProxy.cpp:
        (WebCore::WorkerMessagingProxy::startWorkerContext):

2012-02-19  Keishi Hattori  <keishi@webkit.org>

        Use shadowRootList for ColorInputType
        https://bugs.webkit.org/show_bug.cgi?id=79007

        Reviewed by Kent Tamura.

        * html/ColorInputType.cpp:
        (WebCore::ColorInputType::createShadowSubtree): Changed shadowRoot to shadowRootList.
        (WebCore::ColorInputType::shadowColorSwatch): Changed shadowRoot to shadowRootList.

2012-02-19  Shinya Kawanaka  <shinyak@chromium.org>

        Introduce InsertionPoint, which will be a common base class of HTMLShadowElement and HTMLContentElement.
        https://bugs.webkit.org/show_bug.cgi?id=78771

        Reviewed by Hajime Morita.

        This patch introduces InsertionPoint, which will be a common base class of HTMLShadowElement and HTMLContentElement.

        This is a step for rendering <shadow> correctly, because <shadow> has almost the same function of <content>.
        After this patch, we will change NodeRenderingContext and related classes to accept InsertionPoint instead of
        HTMLContentElement only.

        No new tests, no change in behavior.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * html/shadow/HTMLContentElement.cpp:
        (WebCore::HTMLContentElement::HTMLContentElement):
        (WebCore::HTMLContentElement::attach):
        (WebCore::HTMLContentElement::detach):
        (WebCore::HTMLContentElement::parseAttribute):
        * html/shadow/HTMLContentElement.h:
        * html/shadow/InsertionPoint.cpp: Added.
        (WebCore):
        (WebCore::InsertionPoint::InsertionPoint):
        (WebCore::InsertionPoint::~InsertionPoint):
        * html/shadow/InsertionPoint.h: Added.
        (WebCore):
        (InsertionPoint):

2012-02-19  Paweł Forysiuk  <tuxator@o2.pl>

        [GTK] Can't find webinspector and error page redirection on Windows
        https://bugs.webkit.org/show_bug.cgi?id=51616

        Create and use an abstraction for finding shared resources on Windows.

        Reviewed by Martin Robinson.

        * platform/FileSystem.h:
        (WebCore):
        * platform/audio/gtk/AudioBusGtk.cpp:
        (WebCore::AudioBus::loadPlatformResource):
        * platform/graphics/gtk/ImageGtk.cpp:
        (WebCore::getPathToImageResource):
        * platform/gtk/FileSystemGtk.cpp:
        (WebCore::sharedResourcesPath):
        (WebCore):

2012-02-19  James Robinson  <jamesr@chromium.org>

        Move stub implementations of ScrollingCoordinator functions into ScrollingCoordinatorNone.cpp
        https://bugs.webkit.org/show_bug.cgi?id=78951

        Reviewed by Adam Barth.

        This move stubs for ScrollingCoordinator functions into ScrollingCoordinatorNone.cpp instead of #ifdefing inside
        ScrollingCoordinator.cpp.  The mac port uses ScrollingCoordinator when #if ENABLE(THREADED_SCROLLING) is not set
        and implementations in ScrollingCoordinator.cpp / ScrollingCoordinatorMac.mm otherwise.  The chromium port
        always uses implementations in ScrollingCoordinatorChromium.cpp.  All other ports use
        ScrollingCoordinatorNone.cpp.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbx:
        * page/scrolling/ScrollingCoordinator.cpp:
        * page/scrolling/ScrollingCoordinatorNone.cpp:
        (WebCore):
        (WebCore::ScrollingCoordinator::create):
        (WebCore::ScrollingCoordinator::frameViewHorizontalScrollbarLayerDidChange):
        (WebCore::ScrollingCoordinator::frameViewVerticalScrollbarLayerDidChange):
        (WebCore::ScrollingCoordinator::setScrollLayer):
        (WebCore::ScrollingCoordinator::setNonFastScrollableRegion):
        (WebCore::ScrollingCoordinator::setScrollParameters):
        (WebCore::ScrollingCoordinator::setWheelEventHandlerCount):
        (WebCore::ScrollingCoordinator::setShouldUpdateScrollLayerPositionOnMainThread):
        * page/scrolling/mac/ScrollingCoordinatorMac.mm:
        (WebCore::ScrollingCoordinator::create):
        (WebCore):

2012-02-19  Kentaro Hara  <haraken@chromium.org>

        Rename [CheckDomainSecurity] to [CheckSecurity]
        https://bugs.webkit.org/show_bug.cgi?id=78874

        Reviewed by Adam Barth.

        "Domain security" isn't a term that's used elsewhere.
        This patch renames IDL attributes as follows:

        - [CheckDomainSecurity] => [CheckSecurity]
        - [DoNotCheckDomainSecurity] => [DoNotCheckSecurity]
        - [DoNotCheckDomainSecurityOnGetter] => [DoNotCheckSecurityOnGetter]
        - [DoNotCheckDomainSecurityOnSetter] => [DoNotCheckSecurityOnSetter]

        No tests. No change in behavior.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateGetOwnPropertyDescriptorBody):
        (GenerateImplementation):
        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateHeader):
        (IsVisibleAcrossOrigins):
        (GenerateFunctionCallback):
        (GenerateSingleBatchedAttribute):
        (GenerateImplementation):
        (GenerateToV8Converters):
        * bindings/scripts/test/TestDomainSecurity.idl:
        * bindings/scripts/test/V8/V8TestActiveDOMObject.cpp:
        (WebCore::ConfigureV8TestActiveDOMObjectTemplate):
        * page/DOMWindow.idl:
        * page/History.idl:
        * page/Location.idl:

2012-02-19  James Robinson  <jamesr@chromium.org>

        Unreviewed, rolling out r108195.
        http://trac.webkit.org/changeset/108195
        https://bugs.webkit.org/show_bug.cgi?id=77700

        Lots of failing ASSERT()s on v8 bots, requested by kling on
        #webkit

        * bindings/js/JSCSSValueCustom.cpp:
        (WebCore::toJS):
        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateHeader):

2012-02-19  Kentaro Hara  <haraken@chromium.org>

        Rename [CheckAccessToNode] to [CheckSecurityForNode]
        https://bugs.webkit.org/show_bug.cgi?id=78991

        Reviewed by Adam Barth.

        For naming consistency with [CheckSecurity], this patch renames
        [CheckAccessToNode] to [CheckSecurityForNode].

        No tests. No change in behavior.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateImplementation):
        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateNormalAttrGetter):
        (GenerateFunctionCallback):
        * bindings/scripts/test/TestObj.idl:
        * bindings/scripts/test/V8/V8TestObj.cpp:
        (WebCore):
        * html/HTMLEmbedElement.idl:
        * html/HTMLFrameElement.idl:
        * html/HTMLIFrameElement.idl:
        * html/HTMLObjectElement.idl:
        * page/DOMWindow.idl:

2012-02-19  James Robinson  <jamesr@chromium.org>

        Sort WebCore Xcode project files with sort-Xcode-project-files script. Unreviewed.

        * WebCore.xcodeproj/project.pbxproj:

2012-02-19  Andreas Kling  <awesomekling@apple.com>

        Make CSSValue wrapper getters return unique objects every time.
        <http://webkit.org/b/77700>

        Reviewed by Antti Koivisto.

        Change the behavior of CSSValue getters to return unique JS wrappers every
        time they are called. This means we no longer have to deal with the risk
        of leaking custom properties between unrelated documents, and are free to
        implement global value sharing across WebCore.

        This patch will be followed by one making CSSValuePool globally shared,
        it's done in two steps to monitor the impact of this change.

        * bindings/js/JSCSSValueCustom.cpp:
        (WebCore::toJS):
        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateHeader):
        (IsCSSValueType):

2012-02-19  Abhishek Arya  <inferno@chromium.org>

        Crash in RenderBlock::splitAnonymousBlocksAroundChild.
        https://bugs.webkit.org/show_bug.cgi?id=78994

        Reviewed by Eric Seidel.

        Generalize splitTablePartsAroundChild to handle splitting
        in nested tables.
        Table->Table Section->Table Row->Table Cell->Table->Table Section->Table Row

        Test: fast/table/table-split-inside-table.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::splitTablePartsAroundChild):

2012-02-19  Kalev Lember  <kalevlember@gmail.com>

        [GTK] Fix build on platforms where UChar is wchar_t
        https://bugs.webkit.org/show_bug.cgi?id=78996

        Reviewed by Martin Robinson.

        The ICU backend defines UChar as wchar_t for platforms where wchar_t is
        16 bits wide, e.g. win32.

        * platform/graphics/pango/FontPango.cpp:
        (WebCore::utf16ToUtf8): Use reinterpret_cast instead of static_cast.
        * platform/gtk/GtkPopupMenu.cpp:
        (WebCore::GtkPopupMenu::typeAheadFind): Ditto.

2012-02-19  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix make distcheck issues.

        * GNUmakefile.list.am: Add missing header.

2012-02-18  Robert Hogan  <robert@webkit.org>

        CSS 2.1 failure: inline-box-002.htm fails
        https://bugs.webkit.org/show_bug.cgi?id=69210

        Reviewed by David Hyatt.

        Tests: css2.1/20110323/dynamic-top-change-005.htm
               css2.1/20110323/dynamic-top-change-005a.htm
               css2.1/20110323/dynamic-top-change-005b.htm
               css2.1/20110323/inline-box-002.htm
               fast/css/relative-positioned-block-nested-with-inline-parent-dynamic-removed.html
               fast/css/relative-positioned-block-nested-with-inline-parent-dynamic.html
               fast/css/relative-positioned-block-nested-with-inline-parent-multiple-descendant-blocks-dynamic.html
               fast/css/relative-positioned-block-nested-with-inline-parent.html
               fast/css/relative-positioned-block-with-inline-ancestor-and-parent-dynamic.html
               fast/css/relative-positioned-block-with-inline-ancestor-dynamic-removed.html
               fast/css/relative-positioned-block-with-inline-ancestor-dynamic.html
               fast/css/relative-positioned-block-with-inline-ancestor.html
               fast/css/relative-positioned-block-with-inline-parent-dynamic-removed.html
               fast/css/relative-positioned-block-with-inline-parent-dynamic.html
               fast/css/relative-positioned-block-with-inline-parent-keeps-style.html
               fast/css/relative-positioned-block-with-inline-parent.html

        A block within an inline is affected by relative positioning on the inline box. Give
        the anonymous block containing the block a layer and make it relative positioned. Then
        calculate the offset of the anonymous block's layer by accumulating the offsets from its
        inline continuation and the inline continuation's inline parents.
        If the position of an inline changes from or to relative positioned then ensure that any
        descendant blocks update their position and layer accordingly.

        * rendering/RenderBoxModelObject.cpp:
        (): add an enum RelPosAxis
        (WebCore::accumulateRelativePositionOffsets): 
        Total up the offsets of all relatively positioned inlines that are de-facto parents of the relatively 
        positioned anonymous block's child block.

        (WebCore):
        (WebCore::RenderBoxModelObject::relativePositionOffsetX): 
        Use accumulateRelativePositionOffsets when calculating the relative position offset of a relatively positioned anonymous block.

        (WebCore::RenderBoxModelObject::relativePositionOffsetY): ditto

        * rendering/RenderInline.cpp:
        (WebCore::hasRelPositionedInlineAncestor): 
        Detects if the anonymous block contains a block that is the de-facto descendant of a relatively positioned inline.

        (WebCore::updateStyleOfAnonymousBlockContinuations): 
        Update the style's positioning for each anonymous block containing a block that is descendant from the inline whose style has changed.

        (WebCore::RenderInline::styleDidChange): 
        If an inline changes to or from relative positioning ensure that any descendant blocks change to or from relative positioning
        as well, unless they still have a relatively positioned ancestor after the current ancestor loses its relative positioning.

        (WebCore::RenderInline::addChildIgnoringContinuation): 
        If the anonymous block contains a block that is effectively descended from a relatively positioned inline, make it relatively
        positioned so the block will respect its inline ancestor's relative positioning.

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::propagateStyleToAnonymousChildren): 
        Preserve style position in anonymous block continuations when the parent block propagates a style change. 

2012-02-18  raman Tenneti  <rtenneti@chromium.org>

        Track the NPN protocol version negotiated with the server
        https://bugs.webkit.org/show_bug.cgi?id=77349

        Reviewed by Darin Fisher..

        [chromium] Added ExtraData to WebURLResponse.
        
        No intended functionality change.

        * platform/network/chromium/ResourceResponse.h:
        (ExtraData):
        (WebCore::ResourceResponse::ExtraData::~ExtraData):
        (ResourceResponse):
        (WebCore::ResourceResponse::extraData):
        (WebCore::ResourceResponse::setExtraData):

2012-02-18  Abhishek Arya  <inferno@chromium.org>

        Unreviewed, rolling out r107965.
        http://trac.webkit.org/changeset/107965
        https://bugs.webkit.org/show_bug.cgi?id=78273

        crashes

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::clone):

2012-02-18  Sam Weinig  <sam@webkit.org>

        Make WebCore compile with libc++ (Part 2)
        https://bugs.webkit.org/show_bug.cgi?id=78974

        Reviewed by Anders Carlsson.

        * config.h:
        Disable the DisallowCType check when using libc++.

2012-02-18  Sam Weinig  <sam@webkit.org>

        Fix the build.

        * page/DOMWindow.idl:

2012-02-14  Sam Weinig  <sam@webkit.org>

        Make WebCore compile with libc++ (Part 1)
        https://bugs.webkit.org/show_bug.cgi?id=78974

        Reviewed by Anders Carlsson.

        Add a workaround for <rdar://problem/10858112>, which cause the standard heap functions
        not to work when using an iterator with proxy objects for reference and pointer types.

        * WebCorePrefix.h:
        (move):
        Add an overload of std::move that the heap functions can call successfully.

2012-02-18  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Build fixes for C++ bindings after recent changes.
        
        * bindings/scripts/CodeGeneratorCPP.pm:
        (ShouldSkipType):
        (GenerateHeader):
        * page/DOMWindow.idl:

2012-02-18  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Build fix, add new platform method wx impl.

        * platform/wx/ContextMenuWx.cpp:
        (ContextMenu::itemCount):

2012-02-18  Sam Weinig  <sam@webkit.org>

        Fix part of the windows build failure.

        * WebCore.vcproj/WebCore.vcproj:
        Don't build JSWebKitCSSRegionRule.cpp, since it is already being built
        as part of DerivedSources.cpp.

2012-02-18  Sam Weinig  <sam@webkit.org>

        Fix the ENABLE(THREADED_SCROLLING) build.

        * page/scrolling/ScrollingCoordinator.cpp:
        (WebCore::ScrollingCoordinator::setNonFastScrollableRegion):
        (WebCore::ScrollingCoordinator::setScrollParameters):

2012-02-18  Andreas Kling  <awesomekling@apple.com>

        HTML: Remove unnecessary attributeChange() overrides.
        <http://webkit.org/b/78890>

        Reviewed by Anders Carlsson.

        Move logic from attributeChanged() overrides into parseAttribute().
        This is a step towards making attributeChanged() non-virtual.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::parseAttribute):
        * html/HTMLMediaElement.h:
        (HTMLMediaElement):
        * html/HTMLScriptElement.cpp:
        (WebCore::HTMLScriptElement::parseAttribute):
        * html/HTMLScriptElement.h:
        (HTMLScriptElement):
        * html/HTMLTrackElement.cpp:
        (WebCore::HTMLTrackElement::parseAttribute):
        * html/HTMLTrackElement.h:
        (HTMLTrackElement):

2012-02-18  Andreas Kling  <awesomekling@apple.com>

        Remove Element::createAttribute().
        <http://webkit.org/b/78965>

        Reviewed by Anders Carlsson.

        Switch call sites to use Attribute::create() directly, as there is no magic
        in calling Element::createAttribute() anymore (it used to be virtual and handled
        differently by StyledElement.)

        * dom/Element.cpp:
        (WebCore::Element::setAttributeInternal):
        * dom/Element.h:
        * svg/properties/SVGAnimatedPropertySynchronizer.h:

2012-02-18  Andreas Kling  <awesomekling@apple.com>

        HTMLBodyElement: Avoid synchronous style recalc when setting link/vlink/alink.
        <http://webkit.org/b/78959>

        Reviewed by Anders Carlsson.

        Mark the body element for deferred style recalc instead of doing it synchronously
        when the attributes change.

        * html/HTMLBodyElement.cpp:
        (WebCore::HTMLBodyElement::parseAttribute):

2012-02-18  Martin Robinson  <mrobinson@igalia.com>

        Fix the TextureMapper build for non-Qt ports. Qt debug builds
        must use RTTI, but GTK+, at least, does not.

        * platform/graphics/texmap/TextureMapperLayer.cpp:
        (WebCore::TextureMapperLayer::updateBackingStore): Make the RTTI check
        Qt only.

2012-02-16  Andreas Kling  <awesomekling@apple.com>

        FontFamilyValue: Utilize inheritance from CSSPrimitiveValue better.
        <http://webkit.org/b/78806>

        Reviewed by Antti Koivisto.

        Now that FontFamilyValue's string doesn't change after creation, we can just
        pass the massaged family name up to the CSSPrimitiveValue constructor and get
        cached cssText() for free. This also shrinks FontFamilyValue by sizeof(String)
        though that's less of an issue now that we cache them in CSSValuePool.

        * css/FontFamilyValue.cpp:
        (WebCore::stripFontFamilyJunk):
        (WebCore::FontFamilyValue::FontFamilyValue):
        * css/FontFamilyValue.h:
        (WebCore::FontFamilyValue::familyName):
        (FontFamilyValue):

2012-02-17  Adam Klein  <adamk@chromium.org>

        Avoid inconsistency in Node::inDocument due to DOMSubtreeModified dispatch
        https://bugs.webkit.org/show_bug.cgi?id=76087

        Reviewed by Ryosuke Niwa.

        Move post-removal notifications after call to Node::removeFromDocument
        to avoid inconsistent state of Node::inDocument() and thus avoid
        inconsistent state in DocumentOrderedMap.

        Tests: fast/dom/getElementById-consistency.html
               fast/dom/getElementById-consistency2.html

        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::removeChild):
        * svg/SVGTRefElement.cpp:
        (WebCore::SVGTRefElement::updateReferencedText): Fixed to work with new timing of DOMSubtreeModified dispatch.

2012-02-17  Joshua Bell  <jsbell@chromium.org>

        IndexedDB: Support overloaded methods that take IDBKey or IDBKeyRange
        https://bugs.webkit.org/show_bug.cgi?id=78399

        Implements IDBObjectStore.delete(IDBKeyRange) to exercise the functionality.

        Reviewed by Tony Chang.

        Test: storage/indexeddb/delete-range.html

        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateFunctionCallString): Use .get() to disambiguate when passing RefPtr.
        * bindings/scripts/test/V8/V8TestObj.cpp: Update test expectations.
        * storage/IDBLevelDBBackingStore.cpp:
        (WebCore):
        * storage/IDBObjectStore.cpp:
        (WebCore::IDBObjectStore::deleteFunction):
        (WebCore):
        * storage/IDBObjectStore.h:
        (IDBObjectStore):
        * storage/IDBObjectStore.idl:
        * storage/IDBObjectStoreBackendImpl.cpp:
        (WebCore::IDBObjectStoreBackendImpl::deleteFunction):
        (WebCore):
        (WebCore::IDBObjectStoreBackendImpl::deleteInternal):
        * storage/IDBObjectStoreBackendImpl.h:
        (IDBObjectStoreBackendImpl):
        * storage/IDBObjectStoreBackendInterface.h:

2012-02-17  Kentaro Hara  <haraken@chromium.org>

        Replace [V8OnInstance] with [V8Unforgeable]
        https://bugs.webkit.org/show_bug.cgi?id=78894

        Reviewed by Adam Barth.

        [V8OnInstance] means that the method should be defined
        (not on a prototype chain but) on a DOM object. It is the
        same meaning as [V8Unforgeable]. This patch replaces [V8OnInstance]
        with [V8Unforgeable].

        No tests. No change in behavior.

        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateImplementation):
        * page/Location.idl:

2012-02-17  James Robinson  <jamesr@chromium.org>

        [chromium] Unreviewed build fix. MSVS gyp generator can't handle multiple .cpps with the same name in the same
        target from different paths.

        * WebCore.gypi:
        * page/scrolling/chromium/ScrollingCoordinatorChromium.cpp: Renamed from Source/WebCore/page/scrolling/chromium/ScrollingCoordinator.cpp.
        (WebCore):
        (WebCore::ScrollingCoordinator::frameViewHorizontalScrollbarLayerDidChange):
        (WebCore::ScrollingCoordinator::frameViewVerticalScrollbarLayerDidChange):
        (WebCore::ScrollingCoordinator::setScrollLayer):
        (WebCore::ScrollingCoordinator::setNonFastScrollableRegion):
        (WebCore::ScrollingCoordinator::setScrollParameters):
        (WebCore::ScrollingCoordinator::setWheelEventHandlerCount):
        (WebCore::ScrollingCoordinator::setShouldUpdateScrollLayerPositionOnMainThread):

2012-02-17  James Robinson  <jamesr@chromium.org>

        Unreviewed mac compile fix pt 2

        * page/scrolling/ScrollingCoordinator.cpp:
        (WebCore::ScrollingCoordinator::frameViewHorizontalScrollbarLayerDidChange):
        (WebCore::ScrollingCoordinator::frameViewVerticalScrollbarLayerDidChange):
        (WebCore::ScrollingCoordinator::setScrollLayer):
        (WebCore::ScrollingCoordinator::setNonFastScrollableRegion):
        (WebCore::ScrollingCoordinator::setScrollParameters):
        (WebCore::ScrollingCoordinator::setWheelEventHandlerCount):
        (WebCore::ScrollingCoordinator::setShouldUpdateScrollLayerPositionOnMainThread):

2012-02-17  James Robinson  <jamesr@chromium.org>

        Unreviewed mac compile fix (unused parameter warning)

        * page/scrolling/ScrollingCoordinator.cpp:
        (WebCore::ScrollingCoordinator::frameViewHorizontalScrollbarLayerDidChange):
        (WebCore::ScrollingCoordinator::frameViewVerticalScrollbarLayerDidChange):

2012-02-14  James Robinson  <jamesr@chromium.org>

        Move ScrollingCoordinator out of ENABLE(THREADED_SCROLLING) ifdef and enable on all platforms
        https://bugs.webkit.org/show_bug.cgi?id=78401

        Reviewed by Adam Barth.

        Separates THREADED_SCROLLING from ScrollingCoordinator and enables ScrollingCoordinator-related code on
        chromium. ScrollingCoordinator receives scrolling information to be used with an external scrolling source.
        ENABLE(THREADED_SCROLLING) enables a codepath that uses a thread in WebCore to handle scrolling related input
        events and interact with composited layers.

        * WebCore.gyp/WebCore.gyp:
        * WebCore.gypi:
        * dom/Document.cpp:
        (WebCore::wheelEventHandlerCountChanged):
        * page/FrameView.cpp:
        (WebCore::FrameView::addSlowRepaintObject):
        (WebCore::FrameView::removeSlowRepaintObject):
        (WebCore::FrameView::performPostLayoutTasks):
        * page/Page.cpp:
        (WebCore::Page::~Page):
        (WebCore):
        * page/Page.h:
        (Page):
        * page/Settings.cpp:
        (WebCore::Settings::Settings):
        * page/Settings.h:
        (Settings):
        * page/scrolling/ScrollingCoordinator.cpp:
        (WebCore::ScrollingCoordinator::ScrollingCoordinator):
        (WebCore::ScrollingCoordinator::~ScrollingCoordinator):
        (WebCore::ScrollingCoordinator::pageDestroyed):
        (WebCore):
        * page/scrolling/ScrollingCoordinator.h:
        (WebCore):
        (ScrollingCoordinator):
        * page/scrolling/ScrollingThread.cpp:
        (WebCore::ScrollingThread::createThreadIfNeeded):
        * page/scrolling/ScrollingTreeState.cpp:
        * page/scrolling/ScrollingTreeState.h:
        * page/scrolling/chromium/ScrollingCoordinator.cpp: Added.
        (WebCore):
        (WebCore::ScrollingCoordinator::scheduleTreeStateCommit):
        (WebCore::ScrollingCoordinator::frameViewScrollLayerDidChange):
        (WebCore::ScrollingCoordinator::frameViewHorizontalScrollbarLayerDidChange):
        (WebCore::ScrollingCoordinator::frameViewVerticalScrollbarLayerDidChange):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::RenderLayerBacking):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::frameViewDidScroll):
        (WebCore::shouldCompositeOverflowControls):
        (WebCore::RenderLayerCompositor::requiresOverhangAreasLayer):
        (WebCore::RenderLayerCompositor::requiresContentShadowLayer):
        (WebCore::RenderLayerCompositor::updateOverflowControlsLayers):
        (WebCore::RenderLayerCompositor::ensureRootLayer):
        (WebCore):
        * rendering/RenderLayerCompositor.h:
        (WebCore):
        (RenderLayerCompositor):

2012-02-17  Emil A Eklund  <eae@chromium.org>

        Add FractionalLayoutPoint for sub-pixel layout
        https://bugs.webkit.org/show_bug.cgi?id=78913

        Reviewed by Eric Seidel.

        Add FractionalLayoutUnit version of Point class and a couple of
        conversion methods to the Int and Float versions of same.

        No new tests.

        * GNUmakefile.list.am:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/FloatPoint.cpp:
        (WebCore::FloatPoint::FloatPoint):
        (WebCore):
        (WebCore::FloatPoint::moveBy):
        * platform/graphics/FloatPoint.h:
        (WebCore):
        (FloatPoint):
        * platform/graphics/FractionalLayoutPoint.h: Added.
        (WebCore):
        (FractionalLayoutPoint):
        (WebCore::FractionalLayoutPoint::FractionalLayoutPoint):
        (WebCore::FractionalLayoutPoint::zero):
        (WebCore::FractionalLayoutPoint::x):
        (WebCore::FractionalLayoutPoint::y):
        (WebCore::FractionalLayoutPoint::setX):
        (WebCore::FractionalLayoutPoint::setY):
        (WebCore::FractionalLayoutPoint::move):
        (WebCore::FractionalLayoutPoint::moveBy):
        (WebCore::FractionalLayoutPoint::scale):
        (WebCore::FractionalLayoutPoint::expandedTo):
        (WebCore::FractionalLayoutPoint::shrunkTo):
        (WebCore::FractionalLayoutPoint::clampNegativeToZero):
        (WebCore::FractionalLayoutPoint::transposedPoint):
        (WebCore::operator+=):
        (WebCore::operator-=):
        (WebCore::operator+):
        (WebCore::operator-):
        (WebCore::operator==):
        (WebCore::operator!=):
        (WebCore::toPoint):
        (WebCore::toSize):
        (WebCore::flooredIntPoint):
        (WebCore::roundedIntPoint):
        (WebCore::ceiledIntPoint):
        * platform/graphics/FractionalLayoutSize.cpp:
        (WebCore::pixelSnappedIntSize):
        * platform/graphics/FractionalLayoutSize.h:
        (WebCore):

2012-02-17  Ryosuke Niwa  <rniwa@webkit.org>

        Move textDirectionForSelection from Editor to EditingStyle
        https://bugs.webkit.org/show_bug.cgi?id=78868

        Reviewed by Enrica Casucci.

        Move textDirectionForSelection from Editor to EditingStyle to centralize the editing code's
        dependency on CSSStyleDeclaration.

        * editing/EditingStyle.cpp:
        (WebCore::EditingStyle::textDirectionForSelection):
        (WebCore):
        * editing/EditingStyle.h:
        (EditingStyle):
        * editing/Editor.cpp:
        (WebCore):
        * editing/Editor.h:
        (Editor):
        * editing/EditorCommand.cpp:
        (WebCore::stateTextWritingDirection):
        * editing/ReplaceSelectionCommand.cpp:
        * editing/markup.cpp:

2012-02-17  David Barton  <dbarton@mathscribe.com>

        MathML internals - embellished operators, getBase() accessor functions
        https://bugs.webkit.org/show_bug.cgi?id=78617

        Reviewed by Eric Seidel.

        Define functions that return an unembellished "base", by omitting
        subscripts/superscripts, underscripts/overscripts, or denominators. This is needed in
        subsequent patches both for correct operator stretching and simple code factoring.

        No new tests.

        * rendering/mathml/RenderMathMLBlock.h:
        (WebCore):
        (RenderMathMLBlock):
        (WebCore::RenderMathMLBlock::unembellishedOperator):
        * rendering/mathml/RenderMathMLFraction.cpp:
        (WebCore::RenderMathMLFraction::unembellishedOperator):
        (WebCore):
        * rendering/mathml/RenderMathMLFraction.h:
        (RenderMathMLFraction):
        * rendering/mathml/RenderMathMLOperator.h:
        (WebCore::RenderMathMLOperator::unembellishedOperator):
        * rendering/mathml/RenderMathMLSubSup.cpp:
        (WebCore::RenderMathMLSubSup::base):
        (WebCore):
        (WebCore::RenderMathMLSubSup::unembellishedOperator):
        (WebCore::RenderMathMLSubSup::stretchToHeight):
            - renamed a variable for clarity, especially in later patches
        (WebCore::RenderMathMLSubSup::layout):
            - renamed a variable for clarity, especially in later patches
        * rendering/mathml/RenderMathMLSubSup.h:
        (RenderMathMLSubSup):
        * rendering/mathml/RenderMathMLUnderOver.cpp:
        (WebCore::RenderMathMLUnderOver::base):
        (WebCore):
        (WebCore::RenderMathMLUnderOver::unembellishedOperator):
        (WebCore::RenderMathMLUnderOver::stretchToHeight):
        * rendering/mathml/RenderMathMLUnderOver.h:
        (RenderMathMLUnderOver):

2012-02-17  No'am Rosenthal  <noam.rosenthal@nokia.com>

        [Qt][WK2] Allow opaque tiles
        https://bugs.webkit.org/show_bug.cgi?id=78809

        Replace the isOpaque boolean in BitmapTexture to a SupportsAlpha flag.
        Use reset/didReset instead of a virtual function that has to call the superclass.

        Make sure that all calls to BitmapTexture::reset() pass the correct SupportsAlpha flag,
        based on the source image.
        Since we now disable blending for opaque textures, we also have to make sure that we treat
        the depth buffer correctly and bring it back to its previous state.

        Reviewed by Kenneth Rohde Christiansen.

        No behavior changes.

        * platform/graphics/opengl/TextureMapperGL.cpp:
        (TextureMapperGLData):
        (WebCore::TextureMapperGLData::initStencil):
        (WebCore::TextureMapperGLData::TextureMapperGLData):
        (BitmapTextureGL):
        (WebCore::TextureMapperGL::beginPainting):
        (WebCore::TextureMapperGL::endPainting):
        (WebCore::TextureMapperGL::drawTexture):
        (WebCore::BitmapTextureGL::didReset):
        (WebCore::BitmapTextureGL::bind):
        (WebCore::TextureMapperGL::beginClip):
        * platform/graphics/texmap/TextureMapper.h:
        (WebCore::BitmapTexture::BitmapTexture):
        (WebCore::BitmapTexture::flags):
        (WebCore::BitmapTexture::didReset):
        (WebCore::BitmapTexture::reset):
        (BitmapTexture):
        * platform/graphics/texmap/TextureMapperBackingStore.cpp:
        (WebCore::TextureMapperTile::updateContents):
        (WebCore::TextureMapperTiledBackingStore::updateContentsFromImageIfNeeded):
        (WebCore::TextureMapperTiledBackingStore::createOrDestroyTilesIfNeeded):
        (WebCore::TextureMapperTiledBackingStore::updateContents):
        * platform/graphics/texmap/TextureMapperBackingStore.h:
        (TextureMapperTiledBackingStore):
        * platform/graphics/texmap/TextureMapperImageBuffer.cpp:
        (WebCore::BitmapTextureImageBuffer::didReset):
        (WebCore):
        * platform/graphics/texmap/TextureMapperImageBuffer.h:
        (BitmapTextureImageBuffer):

2012-02-17  Stephen Chenney  <schenney@chromium.org>

        Crash in SVGAnimateElement due to changed target
        https://bugs.webkit.org/show_bug.cgi?id=75096

        Reviewed by Nikolas Zimmermann.

        The SVGAnimateElement object creates various internal objects
        depending on the type of property being animated, which depends on the
        target. These objects were not being recreated when the target
        changed, and crashes ensued. Now the SVGSMILElement provides a virtual
        method that is called when the target changes, and SVGAnimateElement
        updates its objects as necessary. We also deactivate the animation
        when the target changes, forcing recomputation of other derived
        objects.

        This change also removes various unnecessary calls to semi-expensive
        methods.

        Not only does this change fix the new test, it also fixes potential
        crashes in other tests that apparently never manifested before (but
        manifest when this new test is included in DRT).

        Test: svg/animations/svglength-animation-retarget-crash.html

        * svg/SVGAnimateElement.cpp:
        (WebCore::SVGAnimateElement::hasValidAttributeType):
        (WebCore::SVGAnimateElement::calculateAnimatedValue):
        (WebCore::SVGAnimateElement::calculateFromAndToValues):
        (WebCore::SVGAnimateElement::calculateFromAndByValues):
        (WebCore::SVGAnimateElement::resetToBaseValue):
        (WebCore::SVGAnimateElement::calculateDistance):
        (WebCore):
        (WebCore::SVGAnimateElement::targetElementDidChange):
        * svg/SVGAnimateElement.h:
        (SVGAnimateElement):
        * svg/SVGAnimatedTypeAnimator.h:
        (SVGAnimatedTypeAnimator):
        (WebCore::SVGAnimatedTypeAnimator::type):
        * svg/animation/SVGSMILElement.cpp:
        (WebCore::SVGSMILElement::targetElement):
        (WebCore::SVGSMILElement::resetTargetElement):
        (WebCore):
        * svg/animation/SVGSMILElement.h:
        (SVGSMILElement):
        (WebCore::SVGSMILElement::targetElementDidChange):

2012-02-17  David Hyatt  <hyatt@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=78934
        
        Add the -webkit-line-align property to support the alignment of lines in the inline direction
        to the line grid.

        Reviewed by Dan Bernstein.

        Added fast/line-grid/line-align-parsing.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore):
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):
        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        (WebCore):
        (WebCore::CSSPrimitiveValue::operator LineAlign):
        * css/CSSProperty.cpp:
        (WebCore::CSSProperty::isInheritedProperty):
        * css/CSSPropertyNames.in:
        * css/CSSStyleApplyProperty.cpp:
        (WebCore::CSSStyleApplyProperty::CSSStyleApplyProperty):
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):
        * css/CSSValueKeywords.in:
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::diff):
        * rendering/style/RenderStyle.h:
        * rendering/style/RenderStyleConstants.h:
        * rendering/style/StyleRareInheritedData.cpp:
        (WebCore::StyleRareInheritedData::StyleRareInheritedData):
        (WebCore::StyleRareInheritedData::operator==):
        * rendering/style/StyleRareInheritedData.h:
        (StyleRareInheritedData):

2012-02-17  Emil A Eklund  <eae@chromium.org>

        Add FractionalLayoutSize for sub-pixel layout
        https://bugs.webkit.org/show_bug.cgi?id=78852

        Reviewed by Eric Seidel.

        Add FractionalLayoutUnit version of Size class and a couple of
        conversion methods to the Int and Float versions of same.

        No new tests.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/FloatPoint.cpp:
        (WebCore::FloatPoint::move):
        Add FractionalLayoutSize version of move.

        * platform/graphics/FloatPoint.h:
        * platform/graphics/FloatSize.cpp:
        (WebCore::FloatSize::FloatSize):
        Add FloatSize(FractionalLayoutSize) constructor.

        * platform/graphics/FloatSize.h:
        * platform/graphics/FractionalLayoutSize.cpp: Added.
        * platform/graphics/FractionalLayoutSize.h: Added.

2012-02-17  Enrica Casucci  <enrica@apple.com>

        REGRESSION (r107606): Copy Link writes malformed WebURLsWithTitlesPboardType
        data to the pasteboard.
        https://bugs.webkit.org/show_bug.cgi?id=78933
        <rdar://problem/10874553>
        
        For this format, the data needs to be placed in the pasteboard as array of arrays
        of strings. Currently is it stored as array of strings, which causes the code
        that uses this format to break.
        
        Reviewed by Ryosuke Niwa.

        * platform/mac/PlatformPasteboardMac.mm:
        (WebCore::PlatformPasteboard::setPathnamesForType):

2012-02-17  Abhishek Arya  <inferno@chromium.org>

        Incorrect placement of a new child when beforeChild and its
        previous sibling are in the same table.
        https://bugs.webkit.org/show_bug.cgi?id=78269

        Reviewed by Julien Chaffraix.

        Tests: fast/table/table-cell-split.html
               fast/table/table-row-split.html
               fast/table/table-section-split-with-after-content.html
               fast/table/table-section-split.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::splitAnonymousBlocksAroundChild): add
        call to splitTablePartsAroundChild to take care of splitting the
        table first if the child is part of table.
        (WebCore::markTableForSectionAndCellRecalculation): add helper to
        mark table for complete relayout by invalidating sections and cells.
        (WebCore):
        (WebCore::moveAllTableChildrenTo): moves children to another table.
        (WebCore::RenderBlock::splitTablePartsAroundChild): split table child
        and its next siblings into a new table. This allows adding a new
        non-table child between the tables.
        (WebCore::RenderBlock::addChildIgnoringAnonymousColumnBlocks): calls
        splitTablePartsAroundChild to see if we need to split the table
        for adding this new child.
        * rendering/RenderBlock.h:
        (RenderBlock):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::createAnonymousTable): add helper for
        creating anonymous table.
        (WebCore):
        (WebCore::RenderObject::addChild): use the new helper for creating
        anonymous table.
        * rendering/RenderObject.h:
        (WebCore):
        (RenderObject):
        (WebCore::RenderObject::isTablePart): add helper to tell if the object
        is a table part.

2012-02-17  Andreas Kling  <awesomekling@apple.com>

        Element: Inline style selector and AX invalidation in attributeChanged().
        <http://webkit.org/b/78888>

        Reviewed by Antti Koivisto.

        Inline the updateAfterAttributeChanged() and recalcStyleIfNeededAfterAttributeChanged()
        methods into Element::attributeChanged(). They were separated when we needed them in
        StyledElement::attributeChanged(), but that's no longer the case.

        * dom/Element.cpp:
        (WebCore::Element::attributeChanged):
        * dom/Element.h:

2012-02-17  David Reveman  <reveman@chromium.org>

        [Chromium] Texture eviction doesn't show up in traces.
        https://bugs.webkit.org/show_bug.cgi?id=78851

        Reviewed by James Robinson.

        Add TextureManager::evictTexture() function with TRACE statement so
        that texture eviction shows up in traces.

        No new tests.

        * platform/graphics/chromium/TextureManager.cpp:
        (WebCore::TextureManager::evictTexture):
        (WebCore):
        (WebCore::TextureManager::reduceMemoryToLimit):
        * platform/graphics/chromium/TextureManager.h:
        (TextureManager):

2012-02-17  Kalev Lember  <kalevlember@gmail.com>

        Remove unused parameters from WTF threading API
        https://bugs.webkit.org/show_bug.cgi?id=78389

        Reviewed by Adam Roben.

        waitForThreadCompletion() had an out param 'void **result' to get the
        'void *' returned by ThreadFunction. However, the implementation in
        ThreadingWin.cpp ignored the out param, not filling it in. This had
        led to a situation where none of the client code made use of the param
        and just ignored it.

        To clean this up, the patch changes the signature of ThreadFunction to
        return void instead of void* and drops the the unused 'void **result'
        parameter from waitForThreadCompletion. Also, all client code is
        updated for the API change.

        As mentioned in https://bugs.webkit.org/show_bug.cgi?id=78389 , even
        though the change only affects internal API, Safari is using it
        directly and we'll need to keep the old versions around for ABI
        compatibility. For this, the patch adds compatibility wrappers with
        the old ABI.

        * bindings/js/GCController.cpp:
        (WebCore::collect):
        (WebCore::GCController::garbageCollectOnAlternateThreadForDebugging):
        * fileapi/FileThread.cpp:
        (WebCore::FileThread::fileThreadStart):
        (WebCore::FileThread::runLoop):
        * fileapi/FileThread.h:
        (FileThread):
        * loader/icon/IconDatabase.cpp:
        (WebCore::IconDatabase::close):
        (WebCore::IconDatabase::iconDatabaseSyncThreadStart):
        (WebCore::IconDatabase::iconDatabaseSyncThread):
        (WebCore::IconDatabase::syncThreadMainLoop):
        * loader/icon/IconDatabase.h:
        (IconDatabase):
        * page/scrolling/ScrollingThread.cpp:
        (WebCore::ScrollingThread::threadCallback):
        * page/scrolling/ScrollingThread.h:
        (ScrollingThread):
        * platform/audio/HRTFDatabaseLoader.cpp:
        (WebCore::databaseLoaderEntry):
        (WebCore::HRTFDatabaseLoader::waitForLoaderThreadCompletion):
        * platform/audio/ReverbConvolver.cpp:
        (WebCore::backgroundThreadEntry):
        (WebCore::ReverbConvolver::~ReverbConvolver):
        * platform/network/cf/LoaderRunLoopCF.cpp:
        (WebCore::runLoaderThread):
        * storage/DatabaseThread.cpp:
        (WebCore::DatabaseThread::databaseThreadStart):
        (WebCore::DatabaseThread::databaseThread):
        * storage/DatabaseThread.h:
        (DatabaseThread):
        * storage/LocalStorageThread.cpp:
        (WebCore::LocalStorageThread::threadEntryPointCallback):
        (WebCore::LocalStorageThread::threadEntryPoint):
        (WebCore::LocalStorageThread::terminate):
        * storage/LocalStorageThread.h:
        (LocalStorageThread):
        * webaudio/AsyncAudioDecoder.cpp:
        (WebCore::AsyncAudioDecoder::~AsyncAudioDecoder):
        (WebCore::AsyncAudioDecoder::threadEntry):
        * webaudio/AsyncAudioDecoder.h:
        (AsyncAudioDecoder):
        * webaudio/OfflineAudioDestinationNode.cpp:
        (WebCore::OfflineAudioDestinationNode::uninitialize):
        (WebCore::OfflineAudioDestinationNode::renderEntry):
        * webaudio/OfflineAudioDestinationNode.h:
        (OfflineAudioDestinationNode):
        * workers/WorkerThread.cpp:
        (WebCore::WorkerThread::workerThreadStart):
        (WebCore::WorkerThread::workerThread):
        * workers/WorkerThread.h:
        (WorkerThread):

2012-02-17  Robert Hogan  <robert@webkit.org>

        AppleMac Build fix for r108111

        Remove variable that is now unused.

        Unreviewed, build fix.

        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::alwaysRequiresLineBox): Remove lineInfo
        (WebCore::requiresLineBox): 
        (WebCore::RenderBlock::LineBreaker::nextLineBreak):

2012-02-17  Michal Mocny  <mmocny@google.com>

        [chromium] GL_CHROMIUM_gpu_memory_manager extension
        https://bugs.webkit.org/show_bug.cgi?id=77155

        Reviewed by James Robinson.

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

2012-01-23  Robert Hogan  <robert@webkit.org>

        REGRESSION: empty span creates renders with non-zero height
        https://bugs.webkit.org/show_bug.cgi?id=76465

        Reviewed by David Hyatt.

        Tests: fast/css/empty-span.html
               fast/css/non-empty-span.html

        Empty inlines with line-height, vertical-alignment or font metrics should only get a linebox if there is some
        other content in the line. So only create line boxes for such elements on lines that are not empty.

        This patch fixes a regression where an empty inline with line-height was propagating its height to an empty line.
        It also fixes cases where lines with content that had a leading empty inline element weren't respecting the 
        vertical alignment or font-height of the empty inline.

        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::constructLine): only create line boxes for lines that are not empty.
        (WebCore::requiresLineBoxForContent): an inline flow with line-height, vertical-alignment, or font-size
         will need a linebox if the rest of the line is not empty.
        (WebCore):
        (WebCore::alwaysRequiresLineBox): rename from inlineFlowRequiresLineBox.
        (WebCore::requiresLineBox):
        (WebCore::RenderBlock::LineBreaker::nextLineBreak): if the inline flow definitely requires a line, mark
         the line non-empty - otherwise hold off.

2012-02-17  Raymond Toy  <rtoy@google.com>

        RealtimeAnalyserNode does not consistently respect .minDecibels
        https://bugs.webkit.org/show_bug.cgi?id=78729

        Make use of m_minDecibel consistent.  Clean up some style issues
        with names of local variables and style issues with float
        constants.
        
        Reviewed by Chris Rogers.

        No new tests because the changes are cosmetic for style issues.

        * webaudio/RealtimeAnalyser.cpp:
        (WebCore):
        (WebCore::RealtimeAnalyser::doFFTAnalysis):
        (WebCore::RealtimeAnalyser::getFloatFrequencyData):
        (WebCore::RealtimeAnalyser::getByteFrequencyData):
        (WebCore::RealtimeAnalyser::getByteTimeDomainData):

2012-02-17  Abhishek Arya  <inferno@chromium.org>

        :before content incorrectly placed in continuation
        when we don't have a first child.
        https://bugs.webkit.org/show_bug.cgi?id=78380

        Reviewed by David Hyatt.

        Test: fast/css-generated-content/before-content-continuation-chain.html

        * rendering/RenderObjectChildList.cpp:
        (WebCore::RenderObjectChildList::updateBeforeAfterContent):

2012-02-17  Mihnea Ovidenie  <mihnea@adobe.com>

        CSS regions enabled by default
        https://bugs.webkit.org/show_bug.cgi?id=78525

        Reviewed by David Hyatt.

        Test: fast/regions/css-regions-disabled.html

        Add a runtime preference to enable/disable regions functionality at runtime(WebKitCSSRegionsEnabled).
        CSSRegions are still enabled by default.
        In DRT, use layoutTestController.overridePreference("WebKitCSSRegionsEnabled", "0") to disable the css regions functionality.

        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):
        (WebCore::CSSParser::cssRegionsEnabled):
        (WebCore):
        (WebCore::CSSParser::parseFlowThread):
        (WebCore::CSSParser::parseRegionThread):
        (WebCore::CSSParser::createRegionRule):
        * css/CSSParser.h:
        * dom/Document.cpp:
        (WebCore::Document::cssRegionsEnabled):
        (WebCore):
        (WebCore::Document::webkitGetFlowByName):
        * dom/Document.h:
        (Document):
        * dom/Element.cpp:
        (WebCore::Element::webkitRegionOverflow):
        * dom/NodeRenderingContext.cpp:
        (WebCore::NodeRenderingContext::moveToFlowThreadIfNeeded):
        * page/Settings.cpp:
        (WebCore::Settings::Settings):
        * page/Settings.h:
        (WebCore::Settings::setCSSRegionsEnabled):
        (WebCore::Settings::cssRegionsEnabled):
        (Settings):
        * rendering/RenderFlowThread.cpp:
        (WebCore::RenderFlowThread::RenderFlowThread):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::createObject):
        * rendering/RenderRegion.cpp:
        (WebCore::RenderRegion::RenderRegion):

2012-02-17  Mihnea Ovidenie  <mihnea@adobe.com>

        [CSSRegions]Implement NamedFlow::overflow
        https://bugs.webkit.org/show_bug.cgi?id=78880

        Reviewed by David Hyatt.

        Test: fast/regions/webkit-named-flow-overflow.html

        * dom/WebKitNamedFlow.cpp:
        (WebCore::WebKitNamedFlow::WebKitNamedFlow):
        (WebCore::WebKitNamedFlow::overflow):
        (WebCore):
        * dom/WebKitNamedFlow.h:
        (WebCore):
        (WebCore::WebKitNamedFlow::create):
        (WebKitNamedFlow):
        * dom/WebKitNamedFlow.idl:
        * rendering/RenderFlowThread.cpp:
        (WebCore::RenderFlowThread::RenderFlowThread):
        (WebCore::RenderFlowThread::ensureNamedFlow):
        (WebCore::RenderFlowThread::computeOverflowStateForRegions):
        * rendering/RenderFlowThread.h:

2012-02-17  Joe Thomas  <joethomas@motorola.com>

        flex-wrap:nowrap should be flex-wrap:none
        https://bugs.webkit.org/show_bug.cgi?id=78772

        As per the spec http://dev.w3.org/csswg/css3-flexbox/#flex-wrap0, flex-wrap:nowrap should be changed to flex-wrap:none.

        Reviewed by Ojan Vafai.

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):
        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        (WebCore::CSSPrimitiveValue::operator EFlexWrap):
        * css/CSSValueKeywords.in:
        * rendering/style/RenderStyle.h:
        * rendering/style/RenderStyleConstants.h:

2012-02-17  Enrica Casucci  <enrica@apple.com>

        Refactor DragData class to use PlatformStrategies in the Mac implementation.
        https://bugs.webkit.org/show_bug.cgi?id=78768

        Reviewed by Darin Adler.

        No new tests. No behavior change.

        * WebCore.exp.in: Added new exported method of the PlatformPasteboard class.
        * platform/DragData.h:
        (WebCore::DragData::pasteboardName): Added pasteboardName and removed pasteboard.
        * platform/PasteboardStrategy.h: Added color() method.
        * platform/PlatformPasteboard.h: Ditto.
        * platform/mac/ClipboardMac.mm:
        (WebCore::Clipboard::create): Changed to use pasteboardName() method.
        * platform/mac/DragDataMac.mm: All the methods below have been changed to use pasteboardName
        and the pasteboardStrategy() methods.
        (WebCore::DragData::DragData):
        (WebCore::DragData::canSmartReplace):
        (WebCore::DragData::containsColor):
        (WebCore::DragData::containsFiles):
        (WebCore::DragData::numberOfFiles):
        (WebCore::DragData::asFilenames):
        (WebCore::DragData::containsPlainText):
        (WebCore::DragData::asPlainText):
        (WebCore::DragData::asColor):
        (WebCore::DragData::containsCompatibleContent):
        (WebCore::DragData::asURL):
        (WebCore::DragData::asFragment):
        * platform/mac/PlatformPasteboardMac.mm:
        (WebCore::PlatformPasteboard::color): Added implementation of the color() method.

2012-02-17  Nate Chapin  <japhet@chromium.org>

        [Chromium mac] Cursors and background images disappear.
        https://bugs.webkit.org/show_bug.cgi?id=78834

        The issue occurs because a CachedImage sees that it has no clients
        and decide it is safe to purge its m_data buffer. However,
        StyleCachedImage is holding a CachedResourceHandle to the
        CachedImage, and it can still add a client later. If it does so,
        the CachedImage says everything is loaded but has no data.

        Reviewed by Adam Barth.

        No new tests, since the known repros have resisted reduction.
        Tested manually with chrome.angrybirds.com, redfin.com and a
        couple of other sites.

        * rendering/style/StyleCachedImage.cpp:
        * rendering/style/StyleCachedImage.h: Ensure the underlying
            CachedImage has a client for the lifetime of the
            StyleCachedImage and doesn't purge its buffer. Call
            addClient(this) in the constructor and removeClient(this) in
            the destructor, then ignore all cache callbacks.

2012-02-17  Julien Chaffraix  <jchaffraix@webkit.org>

        Table cell's anonymous wrappers are left in the tree, impacting our layout
        https://bugs.webkit.org/show_bug.cgi?id=7180

        Reviewed by David Hyatt.

        Tests: fast/table/table-switch-cell-position-bad-layout-expected.html
               fast/table/table-switch-cell-position-bad-layout.html

        This patch implements cell's anonymous wrapper removal at detach time.

        Trimming the render tree when we remove objects from it would be more complex
        to generalize as several objects override the behavior to do their own clean-ups.
        This would also open more potential for programming errors.

        This change is limited to table cells' as a simple step towards fixing bug 52123
        and more generally eliminate some anonymous wrappers from the tree at detach time.

        * dom/Node.cpp:
        (WebCore::Node::detach):
        Patched detach to call destroyAndCleanupAnonymousWrappers. The Document does not need
        to clean up any anonymous wrappers on detach.

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::destroyAndCleanupAnonymousWrappers):
        Added this method to wrap destroy() call and trim the render tree. To avoid slowing down
        detach in some cases, added a fast path.

        * rendering/RenderObject.h: Added destroyAndCleanupAnonymousWrappers.

2012-02-17  Rob Buis  <rbuis@rim.com>

        ASSERT (and crash) with dynamically moved <font-face>
        https://bugs.webkit.org/show_bug.cgi?id=64839

        Reviewed by Antti Koivisto.

        Reset the style declaration when rmeoving the font-face element from the document.

        Test: svg/custom/font-face-move.svg

        * svg/SVGFontFaceElement.cpp:
        (WebCore::SVGFontFaceElement::removedFromDocument):

2012-02-17  Martin Robinson  <mrobinson@igalia.com>

        Fix some warnings encountered during the GTK+ build
        https://bugs.webkit.org/show_bug.cgi?id=78911

        Reviewed by Xan Lopez.

        No new tests. These are just fixes for warnings.

        * page/GestureTapHighlighter.cpp: Avoid using potentially signed operations on
        a size_t type. Use size_t for iterating over members of a vector.
        * platform/graphics/texmap/TextureMapperBackingStore.cpp: Use size_t where necessary.
        (WebCore::TextureMapperTiledBackingStore::createOrDestroyTilesIfNeeded): Ditto.
        * platform/graphics/texmap/TextureMapperLayer.cpp: Ditto.
        (WebCore::TextureMapperLayer::computeTransformsRecursive): Ditto.
        (WebCore::TextureMapperLayer::paintSelfAndChildren): Ditto.
        (WebCore::TextureMapperLayer::intermediateSurfaceRect): Ditto.

2012-02-17  Tim Dresser  <tdresser@chromium.org>

        [chromium] Refactor video drawing to be more data driven
        https://bugs.webkit.org/show_bug.cgi?id=76720

        Reviewed by James Robinson.

        CCVideoLayerImpl no longer handles drawing itself, but produces a list of CCVideoDrawQuads.
        These quads are then drawn by LayerRendererChromium.

        CCLayerImpl::willDraw(LayerRendererChromium*) is called directly before appendQuads.
        CCLayerImpl::didDraw() is called directly after all drawing has been completed.
        CCLayerImpl::draw has been removed.

        willDraw and didDraw are used to handle interaction with the VideoFrameProvider
        in CCVideoLayerImpl. willDraw gets a frame from the VideoFrameProvider, and
        didDraw returns it.

        A unit test has been added: CCLayerTreeHostImplTest.didDrawCalledOnAllLayers.
        This test ensures that CCLayerImpl::didDraw() is called on all layers,
        including layers on different render surfaces.

        As this was a refactor, no other tests were added.

        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::drawYUV):
        (WebCore):
        (WebCore::LayerRendererChromium::drawSingleTextureVideoQuad):
        (WebCore::LayerRendererChromium::drawRGBA):
        (WebCore::LayerRendererChromium::drawNativeTexture):
        (WebCore::LayerRendererChromium::copyFrameToTextures):
        (WebCore::LayerRendererChromium::copyPlaneToTexture):
        (WebCore::LayerRendererChromium::drawVideoQuad):
        * platform/graphics/chromium/LayerRendererChromium.h:
        (LayerRendererChromium):
        * platform/graphics/chromium/cc/CCLayerImpl.cpp:
        * platform/graphics/chromium/cc/CCLayerImpl.h:
        (WebCore::CCLayerImpl::didDraw):
        (CCLayerImpl):
        * platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:
        (WebCore::CCLayerTreeHostImpl::calculateRenderPasses):
        (WebCore::CCLayerTreeHostImpl::drawLayers):
        * platform/graphics/chromium/cc/CCLayerTreeHostImpl.h:
        (CCLayerTreeHostImpl):
        * platform/graphics/chromium/cc/CCVideoDrawQuad.cpp:
        (WebCore::CCVideoDrawQuad::create):
        (WebCore::CCVideoDrawQuad::CCVideoDrawQuad):
        * platform/graphics/chromium/cc/CCVideoDrawQuad.h:
        (CCVideoDrawQuad):
        (WebCore::CCVideoDrawQuad::textures):
        (WebCore::CCVideoDrawQuad::frame):
        (WebCore::CCVideoDrawQuad::format):
        * platform/graphics/chromium/cc/CCVideoLayerImpl.cpp:
        (WebCore::CCVideoLayerImpl::willDraw):
        (WebCore::CCVideoLayerImpl::appendQuads):
        (WebCore::CCVideoLayerImpl::didDraw):
        (WebCore::CCVideoLayerImpl::computeVisibleSize):
        * platform/graphics/chromium/cc/CCVideoLayerImpl.h:
        (CCVideoLayerImpl):
        (WebCore::CCVideoLayerImpl::providerMutex):
        (WebCore::CCVideoLayerImpl::provider):
        (Texture):

2012-02-17  Stephen Chenney  <schenney@chromium.org>

        Crash at WebCore::SVGUseElement::expandSymbolElementsInShadowTree
        https://bugs.webkit.org/show_bug.cgi?id=77639

        Reviewed by Nikolas Zimmermann.

        Fix a SVG crash in Release builds, although it still crashes in Debug builds.
        The crash occurred when an SVG use element attempted to reference a style element while the file
        contained an error causing the error banner to display. The fix is to prevent SVGUseElement
        from recalculating style during tree building and return immediately when style is recalculated and
        the tree is building.

        Test: svg/custom/use-referencing-style-crash.svg

        * svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::willRecalcStyle): Return false if the tree is being built.
        (WebCore::SVGUseElement::didRecalcStyle): Check and return if the tree
        is being built and we are not yet ready for style update.

2012-02-17  Ilya Tikhonovsky  <loislo@chromium.org>

        Unreviewed, rolling out r108077.
        http://trac.webkit.org/changeset/108077
        https://bugs.webkit.org/show_bug.cgi?id=78390

        it broke compilation.

        * inspector/CodeGeneratorInspector.py:
        * inspector/InjectedScript.cpp:
        (WebCore::InjectedScript::evaluateOnCallFrame):
        (WebCore::InjectedScript::getFunctionDetails):
        (WebCore::InjectedScript::getProperties):
        (WebCore::InjectedScript::wrapCallFrames):
        * inspector/InjectedScript.h:
        (InjectedScript):
        * inspector/InspectorDebuggerAgent.cpp:
        (WebCore::InspectorDebuggerAgent::setBreakpointByUrl):
        (WebCore::InspectorDebuggerAgent::resolveBreakpoint):
        (WebCore::InspectorDebuggerAgent::getFunctionDetails):
        (WebCore::InspectorDebuggerAgent::evaluateOnCallFrame):
        (WebCore::InspectorDebuggerAgent::currentCallFrames):
        (WebCore::InspectorDebuggerAgent::didParseSource):
        * inspector/InspectorDebuggerAgent.h:
        (InspectorDebuggerAgent):

2012-02-17  Florin Malita  <fmalita@google.com>

        chrome.dll!WebCore::SVGTRefElement::updateReferencedText ReadAV@NULL (e85cb8e140071fa7790cad215b0109dc)
        https://bugs.webkit.org/show_bug.cgi?id=74858

        Reviewed by Nikolas Zimmermann.

        Tests: svg/custom/tref-remove-target-crash-expected.svg
               svg/custom/tref-remove-target-crash.svg

        Add a DOMNodeRemovedFromDocumentEvent listener to detect when the target element is removed. Upon removal,
        cleanup all listeners and re-activate the pending resource to attach if the referenced ID is added
        at a later time programmatically. Also move the DOMSubtreeModifiedEvent listener from the parent to
        the target element to simplify the implementation and reduce the scope.

        * svg/SVGTRefElement.cpp:
        (WebCore::TargetListener::create):
        (WebCore::TargetListener::cast):
        (WebCore::TargetListener::clear):
        (WebCore::TargetListener::TargetListener):
        (WebCore::TargetListener::operator==):
        (WebCore::TargetListener::handleEvent):
        (WebCore::SVGTRefElement::detachTarget):
        (WebCore::SVGTRefElement::buildPendingResource):
        * svg/SVGTRefElement.h:

2012-02-17  Simon Fraser  <simon.fraser@apple.com>

        Fix the build after r108077.

        * inspector/CodeGeneratorInspector.py:
        (RawTypes.Any.generate_validate_method):

2012-02-17  Simon Fraser  <simon.fraser@apple.com>

        Avoid using a transparency layer for rgba() border drawing when possible
        https://bugs.webkit.org/show_bug.cgi?id=63176

        Reviewed by Dan Bernstein.
        
        The non-radiused border drawing code would use a transparency layer
        when drawing any one or more borders with alpha colors. However,
        we only need to use a transparency layer when there is a corner
        join between the borders being rendered with any one color,
        so add a utility function includesAdjacentEdges() that can tell us
        that, and use it to avoid making extraneous transparency layers.

        Optimization only, no new tests.

        * rendering/RenderBoxModelObject.cpp:
        (WebCore::includesAdjacentEdges):
        (WebCore):
        (WebCore::RenderBoxModelObject::paintTranslucentBorderSides):

2012-02-17  Pavel Feldman  <pfeldman@google.com>

        Not reviewed: Qt minimal build fix.

        * inspector/InjectedScript.h:
        (WebCore):

2012-02-17  Peter Rybin  <peter.rybin@gmail.com>

        Web Inspector: Switch Debugger agent to TypeBuilder
        https://bugs.webkit.org/show_bug.cgi?id=78390

        Reviewed by Vsevolod Vlasov.

        Client code is switched to TypeBuilder.

        * inspector/CodeGeneratorInspector.py:
        * inspector/InjectedScript.cpp:
        (WebCore::InjectedScript::evaluateOnCallFrame):
        (WebCore::InjectedScript::getFunctionDetails):
        (WebCore::InjectedScript::getProperties):
        (WebCore::InjectedScript::wrapCallFrames):
        * inspector/InjectedScript.h:
        (InjectedScript):
        * inspector/InspectorDebuggerAgent.cpp:
        (WebCore::InspectorDebuggerAgent::setBreakpointByUrl):
        (WebCore::InspectorDebuggerAgent::resolveBreakpoint):
        (WebCore::InspectorDebuggerAgent::getFunctionDetails):
        (WebCore::InspectorDebuggerAgent::evaluateOnCallFrame):
        (WebCore::InspectorDebuggerAgent::currentCallFrames):
        (WebCore::InspectorDebuggerAgent::didParseSource):
        * inspector/InspectorDebuggerAgent.h:
        (InspectorDebuggerAgent):

2012-02-17  Pavel Feldman  <pfeldman@google.com>

        Web Inspector: hide color picker on selected node update.
        https://bugs.webkit.org/show_bug.cgi?id=78896

        Reviewed by Vsevolod Vlasov.

        * inspector/front-end/Spectrum.js:
        (WebInspector.Spectrum.prototype.get visible):
        (WebInspector.Spectrum.prototype.toggle):
        (WebInspector.Spectrum.prototype.show):
        * inspector/front-end/StylesSidebarPane.js:
        (WebInspector.StylesSidebarPane.prototype.update):
        (WebInspector.StylePropertyTreeElement.prototype.updateTitle.):

2012-02-17  Pavel Feldman  <pfeldman@google.com>

        Web Inspector: check undo-redo boundaries based on current action index, not history size.
        https://bugs.webkit.org/show_bug.cgi?id=78895

        Reviewed by Vsevolod Vlasov.

        Tests: inspector/elements/perform-undo-undo.html
               inspector/styles/perform-undo-perform-of-mergable-action.html

        * inspector/InspectorHistory.cpp:
        (WebCore::InspectorHistory::perform):

2012-02-17  Ilya Tikhonovsky  <loislo@chromium.org>

        Unreviewed, rolling out r108071.
        http://trac.webkit.org/changeset/108071
        https://bugs.webkit.org/show_bug.cgi?id=77155

        chromium-mac compilation failed

        * platform/graphics/chromium/Extensions3DChromium.h:

2012-02-17  Michal Mocny  <mmocny@google.com>

        [chromium] GL_CHROMIUM_gpu_memory_manager extension
        https://bugs.webkit.org/show_bug.cgi?id=77155

        Reviewed by James Robinson.

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

2012-02-17  Raphael Kubo da Costa  <kubo@profusion.mobi>

        [CMake, EFL] Unreviewed, fix the build when building with
        SHARED_CORE=ON after r107820.

        RunLoopEfl.cpp has not been upstreamed yet, and building only
        RunLoop.cpp created an .so with some missing, unimplemented
        symbols. The BlackBerry port seems to be in the same situation.

        The best solution for now is to build RunLoop.cpp only on the
        WinCE port.

        * CMakeLists.txt: Remove RunLoop.cpp from the list of files to build.
        * PlatformWinCE.cmake: Add RunLoop.cpp to the list of files to build.

2012-02-17  Pavel Feldman  <pfeldman@google.com>

        Web Inspector: a bit of color picker polish
        https://bugs.webkit.org/show_bug.cgi?id=78892

        - Fixed computed style swatch
        - Removed color: caption
        - Rendered value as source code, user-selectable
        - Removed scroller gap

        Reviewed by Yury Semikhatsky.

        * English.lproj/localizedStrings.js:
        * inspector/front-end/Popover.js:
        (WebInspector.Popover.prototype.setCanShrink):
        (WebInspector.Popover.prototype._positionElement):
        * inspector/front-end/Spectrum.js:
        * inspector/front-end/StylesSidebarPane.js:
        (WebInspector.StylePropertyTreeElement.prototype._resetMouseDownElement):
        (WebInspector.StylePropertyTreeElement.prototype.updateTitle.):
        * inspector/front-end/elementsPanel.css:
        (.spectrum-container):
        (.spectrum-display-value):
        (.spectrum-range-container):
        * inspector/front-end/popover.css:
        (.popover .content.fixed-height):

2012-02-17  Pavel Feldman  <pfeldman@google.com>

        Web Inspector: color picker does not allow changing the color.
        https://bugs.webkit.org/show_bug.cgi?id=78886

        Reviewed by Vsevolod Vlasov.

        * inspector/front-end/ElementsPanel.js:
        (WebInspector.ElementsPanel.prototype._showPopover.showPopover):
        * inspector/front-end/Popover.js:
        (WebInspector.Popover.prototype.setCanShrink):
        (WebInspector.Popover.prototype._positionElement):
        * inspector/front-end/Settings.js:
        * inspector/front-end/Spectrum.js:
        * inspector/front-end/StylesSidebarPane.js:
        (WebInspector.StylesSidebarPane):
        (WebInspector.StylePropertyTreeElement.prototype.updateTitle.):

2012-02-17  Pavel Feldman  <pfeldman@google.com>

        Web Inspector: new image preview has poorly positioned popover arrow.
        https://bugs.webkit.org/show_bug.cgi?id=78884

        Reviewed by Vsevolod Vlasov.

        * inspector/front-end/Popover.js:
        (WebInspector.Popover.prototype._positionElement):
        * inspector/front-end/utilities.js:
        (Element.prototype.boxInWindow):

2012-02-17  Pavel Feldman  <pfeldman@google.com>

        Web Inspector: enable "Single click CSS editing" experiment by default.
        https://bugs.webkit.org/show_bug.cgi?id=78881

        Reviewed by Vsevolod Vlasov.

        * inspector/front-end/elementsPanel.css:
        (.styles-section .properties .enabled-button):

2012-02-17  Pavel Feldman  <pfeldman@google.com>

        Web Inspector: split innerUpdate into rebuildUpdate and refreshUpdate, make computed styles load lazily.
        https://bugs.webkit.org/show_bug.cgi?id=78827

        Reviewed by Vsevolod Vlasov.

        * inspector/front-end/StylesSidebarPane.js:
        (WebInspector.StylesSidebarPane.prototype.update):
        (WebInspector.StylesSidebarPane.prototype._refreshUpdate.computedStyleCallback):
        (WebInspector.StylesSidebarPane.prototype._refreshUpdate):
        (WebInspector.StylesSidebarPane.prototype._rebuildUpdate):
        (WebInspector.StylesSidebarPane.prototype._validateNode):
        (WebInspector.StylesSidebarPane.prototype._styleSheetOrMediaQueryResultChanged):
        (WebInspector.StylesSidebarPane.prototype._attributesModified):
        (WebInspector.StylesSidebarPane.prototype._attributesRemoved):
        (WebInspector.StylesSidebarPane.prototype._styleInvalidated):
        (WebInspector.StylesSidebarPane.prototype._innerRefreshUpdate):
        (WebInspector.StylesSidebarPane.prototype._innerRebuildUpdate):
        (WebInspector.StylesSidebarPane.prototype._nodeStylesUpdatedForTest):
        (WebInspector.StylesSidebarPane.prototype._toggleElementStatePane):
        (WebInspector.StylesSidebarPane.prototype._createElementStatePane.clickListener):
        (WebInspector.StylesSidebarPane.prototype._showUserAgentStylesSettingChanged):
        (WebInspector.ComputedStyleSidebarPane.prototype.expand):
        (WebInspector.StylePropertyTreeElement.prototype):

2012-02-17  No'am Rosenthal  <noam.rosenthal@nokia.com>

        [Qt][WK2] Allow partial updates
        https://bugs.webkit.org/show_bug.cgi?id=78824

        BitmapTextureGL should not zero-fill the textures when resetting.
        This was needed in the previous buffer management system, where texture were not completely
        filled by the backing store.

        Reviewed by Simon Hausmann.

        No new behavior.

        * platform/graphics/opengl/TextureMapperGL.cpp:
        (BitmapTextureGL):
        (WebCore::texSubImage2DResourceSafe):
        (WebCore):
        (WebCore::BitmapTextureGL::reset):

2012-02-17  Yosifumi Inoue  <yosin@chromium.org>

        [Forms] Integrate InputType::dispatchChangeEventInResponseToSetValue into InputType::setValue
        https://bugs.webkit.org/show_bug.cgi?id=78873

        Reviewed by Kent Tamura.

        This patch moves event dispatch logic to InputType and TextFieldInputType from HTMLInputElement
        and merge dispatchChangeEventInResponseToSetValue to setValue.

        No new tests. No change in behavior.

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::setValue): Move dispatch logic to InputType and TextFieldInput.
        * html/InputType.cpp: Remove dispatchChangeEventInResponseToSetValue implementation.
        * html/InputType.h: Remove dispatchChangeEventInResponseToSetValue declaration.
        (WebCore::InputType::setValue): Move code from dispatchChangeEventInResponseToSetValue.
        * html/TextFieldInputType.cpp: Remove dispatchChangeEventInResponseToSetValue implementation.
        * html/TextFieldInputType.h: Remove dispatchChangeEventInResponseToSetValue declaration.
        (WebCore::TextFieldInputType::setValue): Move code from dispatchChangeEventInResponseToSetValue. Stop dispatching event in InputType::setValue.
        * html/HTMLTextFormControlElement.h: Make setTextAsOfLastFormControlChangeEvent to public from protected for accessing from InputType class.

2012-02-17  Yury Semikhatsky  <yurys@chromium.org>

        Unreviewed. Mac build fix after r108047.

        * WebCore.xcodeproj/project.pbxproj:

2012-02-16  Andreas Kling  <awesomekling@apple.com>

        Removing the last presentation attribute should result in a null attributeStyle().
        <http://webkit.org/b/78812>

        Reviewed by Antti Koivisto.

        If the collectStyleForAttribute() pass in updateAttributeStyle() doesn't encounter any
        respected presentation attributes, set a null attributeStyle() instead of an empty one.

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::collectMatchingRulesForList):
        * dom/StyledElement.cpp:
        (WebCore::StyledElement::updateAttributeStyle):

2012-02-16  Yury Semikhatsky  <yurys@chromium.org>

        Web Inspector: use static counters for estimation of allocated Documents, Nodes and JS EventListeners
        https://bugs.webkit.org/show_bug.cgi?id=78825

        Introduced static counters of allocated Documents, Nodes and JS EventListeners.
        Their values are displayed on the Timeline panel.

        Reviewed by Pavel Feldman.

        * CMakeLists.txt:
        * English.lproj/localizedStrings.js:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSEventListener.cpp:
        (WebCore::JSEventListener::JSEventListener):
        (WebCore::JSEventListener::~JSEventListener):
        * bindings/v8/V8AbstractEventListener.cpp:
        (WebCore::V8AbstractEventListener::V8AbstractEventListener):
        (WebCore::V8AbstractEventListener::~V8AbstractEventListener):
        * dom/Document.cpp:
        (WebCore::Document::Document):
        (WebCore::Document::~Document):
        * dom/Document.h:
        (WebCore::Node::Node):
        * dom/Node.cpp:
        (WebCore::Node::~Node):
        * inspector/InspectorAllInOne.cpp:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        * inspector/InspectorCounters.cpp: Added.
        (WebCore):
        (WebCore::InspectorCounters::counterValue):
        * inspector/InspectorCounters.h: Added.
        (WebCore):
        (InspectorCounters):
        (WebCore::InspectorCounters::incrementCounter):
        (WebCore::InspectorCounters::decrementCounter):
        * inspector/InspectorTimelineAgent.cpp:
        (WebCore::InspectorTimelineAgent::didCallFunction):
        (WebCore::InspectorTimelineAgent::didDispatchEvent):
        (WebCore::InspectorTimelineAgent::didWriteHTML):
        (WebCore::InspectorTimelineAgent::didFireTimer):
        (WebCore::InspectorTimelineAgent::didEvaluateScript):
        (WebCore::InspectorTimelineAgent::setHeapSizeStatistic):
        (WebCore::InspectorTimelineAgent::InspectorTimelineAgent):
        * inspector/InspectorTimelineAgent.h:
        (WebCore):
        (WebCore::InspectorTimelineAgent::create):
        (InspectorTimelineAgent):
        * inspector/front-end/MemoryStatistics.js:
        (WebInspector.MemoryStatistics):
        (WebInspector.MemoryStatistics.prototype.addTimlineEvent):
        (WebInspector.MemoryStatistics.prototype._draw.getDocumentCount):
        (WebInspector.MemoryStatistics.prototype._refreshCurrentValues):
        * inspector/front-end/TimelinePanel.js:
        (WebInspector.TimelinePanel.prototype._onTimelineEventRecorded):

2012-02-16  Cris Neckar  <cdn@chromium.org>

        Correct a misleading comment regarding string delimiters in CSS parsing.
        https://bugs.webkit.org/show_bug.cgi?id=78521

        Reviewed by Zoltan Herczeg.

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

2012-02-16  Martin Robinson  <mrobinson@igalia.com>

        Fix the TextureMapper build for GTK+.

        No new tests. This is just a build fix.

        * GNUmakefile.list.am: Add missing files to the build and change spaces to tabs.

2012-02-16  Daniel Bates  <dbates@webkit.org>

        Add ENABLE(STYLE_SCOPED) around HTMLStyleElement::m_isRegisteredWithScopingNode 

        The instance variable HTMLStyleElement::m_isRegisteredWithScopingNode is only
        referenced from within ENABLE(STYLE_SCOPED)-guarded code. We should add this
        guard around its declaration.

        * html/HTMLStyleElement.h:
        (HTMLStyleElement):

2012-02-16  Shinya Kawanaka  <shinyak@chromium.org>

        [v8] v8 doesn't assume to do 'new WebKitShadowRoot(host)'
        https://bugs.webkit.org/show_bug.cgi?id=78875

        Reviewed by Kentaro Hara.

        Since v8 does not assume that we do 'new WebkitShadowRoot(host)', a wrapper object for new WebKitShadowRoot(host)
        was saved in DOMObject storage instead of DOMNode storage.

        CodeGenerator should handle with DOMNode correctly to solve the problem.

        Test: fast/dom/shadow/shadow-root-new.html

        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateConstructorCallback):

2012-02-16  Ilya Tikhonovsky  <loislo@chromium.org>

        Unreviewed rollout r107952 because it broke shadow-boundary-events.html and related-target-focusevent.html on mac.
        see http://webkit.org/b/78832

        * CMakeLists.txt:
        * DerivedSources.cpp:
        * DerivedSources.make:
        * DerivedSources.pri:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/DOMAllInOne.cpp:
        * dom/EventDispatchMediator.cpp:
        (WebCore::FocusEventDispatchMediator::create):
        (WebCore):
        (WebCore::FocusEventDispatchMediator::FocusEventDispatchMediator):
        (WebCore::FocusEventDispatchMediator::dispatchEvent):
        (WebCore::BlurEventDispatchMediator::create):
        (WebCore::BlurEventDispatchMediator::BlurEventDispatchMediator):
        (WebCore::BlurEventDispatchMediator::dispatchEvent):
        * dom/EventDispatchMediator.h:
        (FocusEventDispatchMediator):
        (WebCore):
        (BlurEventDispatchMediator):
        * dom/EventFactory.in:
        * dom/FocusEvent.cpp: Removed.
        * dom/FocusEvent.h: Removed.
        * dom/FocusEvent.idl: Removed.
        * dom/Node.cpp:
        (WebCore::Node::dispatchFocusInEvent):
        (WebCore::Node::dispatchFocusOutEvent):
        * dom/UIEvent.cpp:
        (WebCore::FocusInEventDispatchMediator::create):
        (WebCore):
        (WebCore::FocusInEventDispatchMediator::FocusInEventDispatchMediator):
        (WebCore::FocusInEventDispatchMediator::dispatchEvent):
        (WebCore::FocusOutEventDispatchMediator::create):
        (WebCore::FocusOutEventDispatchMediator::FocusOutEventDispatchMediator):
        (WebCore::FocusOutEventDispatchMediator::dispatchEvent):
        * dom/UIEvent.h:
        (FocusInEventDispatchMediator):
        (WebCore):
        (FocusOutEventDispatchMediator):
        * page/DOMWindow.idl:

2012-02-16  Mark Hahnenberg  <mhahnenberg@apple.com>

        Another fix for viewport tests

        No new tests.

        * dom/ViewportArguments.cpp:
        (WebCore::numericPrefix): When we don't parse a number, we could either be 
        trying to parse junk, which returns NaN, or we could get an empty string, 
        which returns 0, so we need to account for that in the assert.

2012-02-16  Mark Hahnenberg  <mhahnenberg@apple.com>

        Another build fix for viewport tests

        No new tests.

        * dom/ViewportArguments.cpp:
        (WebCore::numericPrefix): We now return NaN instead of 0 when we fail to 
        parse a number using charactersToFloatIgnoringJunk, so we need to assert that 
        we have NaN rather than 0.

2012-02-16  Alexandre Elias  <aelias@google.com>

        [chromium] Bundle page scale factor and limits in CCLayerTreeHost
        https://bugs.webkit.org/show_bug.cgi?id=78762

        Setting page scale factor and its limits in separate methods
        may cause clamping bugs if one of them makes it to the
        impl thread before the other.  Change the API to bundle them together,
        which matches the existing impl-side interface.

        Reviewed by James Robinson.

        No new tests (API change will disallow this type of bug).

        * platform/graphics/chromium/cc/CCLayerTreeHost.cpp:
        (WebCore::CCLayerTreeHost::CCLayerTreeHost):
        (WebCore::CCLayerTreeHost::finishCommitOnImplThread):
        (WebCore::CCLayerTreeHost::setPageScaleFactorAndLimits):
        * platform/graphics/chromium/cc/CCLayerTreeHost.h:
        (CCLayerTreeHost):

2012-02-16  Kentaro Hara  <haraken@chromium.org>

        Unreviewed. Rebaselined run-bindings-tests results.

        * bindings/scripts/test/JS/JSTestEventConstructor.cpp:
        (WebCore::JSTestEventConstructorConstructor::finishCreation):
        * bindings/scripts/test/JS/JSTestInterface.cpp:
        (WebCore::JSTestInterfaceConstructor::finishCreation):
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::JSTestObjConstructor::finishCreation):
        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp:
        (WebCore::JSTestSerializedScriptValueInterfaceConstructor::finishCreation):

2012-02-16  Sami Kyostila  <skyostil@chromium.org>

        [chromium] LayerChromium::setNeedsDisplay does not apply contents scale correctly
        https://bugs.webkit.org/show_bug.cgi?id=77464

        Use bounds() instead of contentBounds() to calculate the region to mark
        as needing painting in LayerChromium::setNeedsDisplay(). contentBounds()
        includes contents scale, while bounds() does not.

        Since this change also means that TiledLayerChromium::setNeedsDisplayRect() is
        given an unscaled rectangle, modify that function to scale the rectangle before
        using it to invalidate the underlying tiles.

        Reviewed by James Robinson.

        Tests: New tests added to LayerChromium and TiledLayerChromium unit tests.

        * platform/graphics/chromium/LayerChromium.h:
        (WebCore::LayerChromium::setNeedsDisplay):
        * platform/graphics/chromium/TiledLayerChromium.cpp:
        (WebCore::TiledLayerChromium::setNeedsDisplayRect):

2012-02-16  Raymond Liu  <raymond.liu@intel.com>

        Lazy init for DefaultAudioDestinationNode and OfflineAudioDestinationNode
        https://bugs.webkit.org/show_bug.cgi?id=76509

        Reviewed by Eric Seidel.

        No new tests required.

        * webaudio/AudioDestinationNode.h:
        * webaudio/AudioNode.h:
        (WebCore::AudioNode::sampleRate):
        * webaudio/DefaultAudioDestinationNode.cpp:
        (WebCore::DefaultAudioDestinationNode::DefaultAudioDestinationNode):
        * webaudio/DefaultAudioDestinationNode.h:
        * webaudio/OfflineAudioDestinationNode.cpp:
        (WebCore::OfflineAudioDestinationNode::OfflineAudioDestinationNode):
        * webaudio/OfflineAudioDestinationNode.h:
        (WebCore::OfflineAudioDestinationNode::sampleRate):

2012-02-16  Shinya Kawanaka  <shinyak@chromium.org>

        [Refactoring] Remove location from NodeRenderingContext.
        https://bugs.webkit.org/show_bug.cgi?id=78796

        Reviewed by Hajime Morita.

        This is a simple refactoring to remove m_location from NodeRenderingContext.
        TreeLocation is merged into AttachPhase like the following.
            LocationUndertermined -> Calculating
            LocationNotInTree -> AttachingNotInTree
            LocationLightChild -> AttachingStraight / AttachingNotDistributed / AttachingDistributed
            LocationShadowChild -> AttachingStraight / AttachingShadowChild / AttachingFallback

        We have renamed the enum items of AttachPhase, because not only <content> but also
        <shadow> will use the phases. Basically these words are taken from Shadow DOM spec.
        'Calculating' means NodeRenderingContext is used not for attaching but for calculating RenderObject.

        No new tests, no change in behavior.

        * dom/NodeRenderingContext.cpp:
        (WebCore::NodeRenderingContext::NodeRenderingContext):
        (WebCore::NodeRenderingContext::nextRenderer):
        (WebCore::NodeRenderingContext::previousRenderer):
        (WebCore::NodeRenderingContext::parentRenderer):
        (WebCore::NodeRenderingContext::shouldCreateRenderer):
        * dom/NodeRenderingContext.h:
        (NodeRenderingContext):
        (WebCore::NodeRenderingContext::parentNodeForRenderingAndStyle):

2012-02-16  Kent Tamura  <tkent@chromium.org>

        Run sort-Xcode-project-file.

        * WebCore.xcodeproj/project.pbxproj: Sorted.

2012-02-16  Mark Hahnenberg  <mhahnenberg@apple.com>

        Another build fix for viewport tests

        No new tests.

        * dom/ViewportArguments.cpp:
        (WebCore::numericPrefix): We now return NaN instead of 0 when we fail to 
        parse a number using charactersToFloatIgnoringJunk, so we need to assert that 
        we have NaN rather than 0.

2012-02-15  Michael Nordman  <michaeln@google.com>

        [chromium] Fix bugs in the implementation of WebDatabase::closeDatabaseImmediately.
        https://bugs.webkit.org/show_bug.cgi?id=78841

        WebDatabase now delegates this function entirely to DatabaseTracker,
        a new closeDatabasesImmediately() has been added for that purpose. That
        method posts tasks to the appropiate context thread for each database
        instance that should be closed immediately.

        The DatabaseTracker getAllOpenDatabases() method has been removed from
        the chromium impl because it's unsafe, refs cannot be safely taken on
        AbstractDatabase instances in the tracker's collection of open databases.

        Add a message to the console log when a database is forcibly closed.

        Transactions initiated on a database instance that has been forcibly
        closed complete with a transaction error callback.
        
        This is part of resolving http://crbug.com/98939

        Reviewed by David Levin.

        No new layout tests, there is no common code way to closeImmediately.
        We have coverage for this in py automation tests.

        * platform/sql/SQLiteDatabase.cpp:
        The closeImmediately code path can result in the underlying sqlite3 handle being
        closed earlier than usual and trip some assertions. Updated the assertions to no
        longer trigger in this early close case.
        (WebCore::SQLiteDatabase::close):
        (WebCore::SQLiteDatabase::setMaximumSize):
        * platform/sql/SQLiteDatabase.h:
        (WebCore::SQLiteDatabase::sqlite3Handle):

        * storage/Database.cpp:
        (WebCore::Database::closeImmediately): Modified to only be called on the context thread and to log a console message.
        (WebCore::Database::changeVersion): Use the private runTransaction helper method.
        (WebCore::Database::transaction): Pass a new param required by the runTransaction helper.
        (WebCore::Database::readTransaction): Ditto.
        (WebCore::callTransactionErrorCallback): Used to defer invocation of the error callback.
        (WebCore::Database::runTransaction): Modified to detect when the database has been closed, and
        to invoke the error callback in that case. This also avoids creating a reference cycle between
        a newly created transaction and the database that previously existed due to a transction being
        added and never removed from the Q while in this state.
        * storage/Database.h:
        * storage/DatabaseSync.cpp:
        (WebCore::DatabaseSync::closeImmediately): Modified to only be called on the context thread and to log a console message.
        * storage/DatabaseTracker.h:

        * storage/chromium/DatabaseTrackerChromium.cpp:
        Posts tasks to the appropiate context thread for execution without bumping AbstractDatabase refcounts.
        (DatabaseTracker::CloseOneDatabaseImmediatelyTask):
        (WebCore::DatabaseTracker::CloseOneDatabaseImmediatelyTask::create):
        (WebCore::DatabaseTracker::CloseOneDatabaseImmediatelyTask::performTask):
        (WebCore::DatabaseTracker::CloseOneDatabaseImmediatelyTask::CloseOneDatabaseImmediatelyTask):
        (WebCore::DatabaseTracker::closeDatabasesImmediately): 
        (WebCore::DatabaseTracker::closeOneDatabaseImmediately):

2012-02-16  Dana Jansens  <danakj@chromium.org>

        [Chromium] Occlusion tracking with CSS filters
        https://bugs.webkit.org/show_bug.cgi?id=77498

        Reviewed by James Robinson.

        The new CSS filter support within the compositor changes how
        occlusion tracking needs to function. A filter can change the
        alpha value of pixels, making an otherwise opaque pixel no
        longer so. Secondly, a filter may move color values around
        on a surface, which can cause otherwise occluded areas to
        become visible and require painting.

        New unit tests: CCLayerTreeHostTest.cpp

        Tests: compositing/culling/filter-occlusion-alpha-large.html
               compositing/culling/filter-occlusion-alpha.html
               compositing/culling/filter-occlusion-blur-large.html
               compositing/culling/filter-occlusion-blur.html

        * platform/graphics/chromium/RenderSurfaceChromium.cpp:
        (WebCore::RenderSurfaceChromium::RenderSurfaceChromium):
        * platform/graphics/chromium/RenderSurfaceChromium.h:
        (WebCore::RenderSurfaceChromium::setFilters):
        (WebCore::RenderSurfaceChromium::filters):
        (WebCore::RenderSurfaceChromium::setNearestAncestorThatMovesPixels):
        (WebCore::RenderSurfaceChromium::nearestAncestorThatMovesPixels):
        (RenderSurfaceChromium):
        * platform/graphics/chromium/cc/CCLayerTreeHost.cpp:
        (WebCore::enterTargetRenderSurface):
        (WebCore::CCLayerTreeHost::paintLayerContents):
        * platform/graphics/chromium/cc/CCLayerTreeHostCommon.cpp:
        (WebCore::subtreeShouldRenderToSeparateSurface):
        (WebCore::calculateDrawTransformsAndVisibilityInternal):
        (WebCore::CCLayerTreeHostCommon::calculateDrawTransformsAndVisibility):
        * platform/graphics/chromium/cc/CCRenderSurface.cpp:
        (WebCore::CCRenderSurface::CCRenderSurface):
        * platform/graphics/chromium/cc/CCRenderSurface.h:
        (WebCore::CCRenderSurface::setNearestAncestorThatMovesPixels):
        (WebCore::CCRenderSurface::nearestAncestorThatMovesPixels):
        (CCRenderSurface):
        * platform/graphics/filters/FilterOperation.h:
        (FilterOperation):
        (WebCore::FilterOperation::affectsOpacity):
        (WebCore::FilterOperation::movesPixels):
        (WebCore::ReferenceFilterOperation::affectsOpacity):
        (WebCore::ReferenceFilterOperation::movesPixels):
        (ReferenceFilterOperation):
        (WebCore::BasicComponentTransferFilterOperation::affectsOpacity):
        (BasicComponentTransferFilterOperation):
        (WebCore::BlurFilterOperation::affectsOpacity):
        (WebCore::BlurFilterOperation::movesPixels):
        (BlurFilterOperation):
        (WebCore::DropShadowFilterOperation::affectsOpacity):
        (DropShadowFilterOperation):
        * platform/graphics/filters/FilterOperations.cpp:
        (WebCore::FilterOperations::hasFilterThatAffectsOpacity):
        (WebCore):
        (WebCore::FilterOperations::hasFilterThatMovesPixels):
        * platform/graphics/filters/FilterOperations.h:
        (WebCore::FilterOperations::isEmpty):
        (FilterOperations):

2012-02-16  Leo Yang  <leo.yang@torchmobile.com.cn>

        [BlackBerry] Adapt to the removal of WebStringIml.h
        https://bugs.webkit.org/show_bug.cgi?id=78784

        Reviewed by Antonio Gomes.

        WebKit/blackberry/WebCoreSupport/WebStringImpl.h which hasn't been upstreamed
        has been removed internally. We should adapt to this removal for the
        upstreamed part of the BlackBerry port. Actually WebStringImpl is not necessary
        because it just inherits from WTF::StringImpl but adding nothing.

        No functionalities changed, no new tests.

        * platform/text/blackberry/StringBlackBerry.cpp:
        (WTF::String::operator WebString):

2012-02-15  Geoffrey Garen  <ggaren@apple.com>

        Made Weak<T> single-owner, adding PassWeak<T>
        https://bugs.webkit.org/show_bug.cgi?id=78740

        Reviewed by Sam Weinig.

        * bindings/js/JSDOMBinding.cpp:
        (WebCore::jsStringSlowCase): Use PassWeak<T>, as required by our new
        hash map API.

        * bindings/js/JSDOMBinding.h:
        (WebCore::getCachedWrapper):
        (WebCore::cacheWrapper): Use PassWeak<T> and raw pointer, as required by
        our new hash map API.

        * bindings/js/JSEventListener.h:
        (WebCore::JSEventListener::setWrapper):
        * bindings/js/ScriptWrappable.h:
        (WebCore::ScriptWrappable::setWrapper):
        * bridge/jsc/BridgeJSC.cpp:
        (JSC::Bindings::Instance::createRuntimeObject):
        * bridge/runtime_root.cpp:
        (JSC::Bindings::RootObject::addRuntimeObject): Use PassWeak<T>, as
        required by our new hash map and Weak<T> APIs.

2012-02-16  Ryosuke Niwa  <rniwa@webkit.org>

        Crash in visiblePositionForIndex
        https://bugs.webkit.org/show_bug.cgi?id=77683

        Reviewed by Eric Seidel.

        Fixed the crash.

        Test: editing/execCommand/applyblockelement-visiblepositionforindex-crash.html

        * editing/ApplyBlockElementCommand.cpp:
        (WebCore::ApplyBlockElementCommand::doApply):
        * editing/InsertListCommand.cpp:
        (WebCore::InsertListCommand::doApply):
        * editing/htmlediting.cpp:
        (WebCore::indexForVisiblePosition):
        * editing/htmlediting.h:
        (WebCore):

2012-02-16  Matthew Delaney  <mdelaney@apple.com>

        ShadowBlur.cpp's cached content matching needs to consider m_layerSize changes
        https://bugs.webkit.org/show_bug.cgi?id=78765

        Reviewed by Simon Fraser.

        No new tests due to the flaky nature of reproducing the issue.

        * platform/graphics/ShadowBlur.cpp:
        (WebCore::ScratchBuffer::getScratchBuffer): Make sure to call clearScratchBuffer()
        when we create a new ImageBuffer in order to invalidate cached values.
        (WebCore::ScratchBuffer::setCachedShadowValues): Roll together matching and setting
        of cached values into one method to enforce them being the same.
        (WebCore::ScratchBuffer::setCachedInsetShadowValues): Ditto.

        Restructure to use new method described above.
        (WebCore::ShadowBlur::drawRectShadowWithoutTiling): 
        (WebCore::ShadowBlur::drawInsetShadowWithoutTiling):
        (WebCore::ShadowBlur::drawInsetShadowWithTiling):
        (WebCore::ShadowBlur::drawRectShadowWithTiling):
        (WebCore::ShadowBlur::beginShadowLayer):

2012-02-16  Dana Jansens  <danakj@chromium.org>

        [chromium] Empty divs not transforming overflow correctly
        https://bugs.webkit.org/show_bug.cgi?id=78850

        Reviewed by James Robinson.

        Test: compositing/overflow/transform-in-empty-container.html

        * platform/graphics/chromium/GraphicsLayerChromium.cpp:
        (WebCore::GraphicsLayerChromium::setSize):

2012-02-16  Emil A Eklund  <eae@chromium.org>

        Fix use of long long in FractionalLayoutUnit::setRawValue
        https://bugs.webkit.org/show_bug.cgi?id=78835

        Reviewed by Eric Seidel.

        Change setRawValue(long long) to compare against int min and max instead
        of using abs as not all platforms we support implement a long long
        version of abs or llabs.

        No new tests.

        * platform/FractionalLayoutUnit.h:
        (WebCore::FractionalLayoutUnit::setRawValue):
        Compare against int min/max instead of just max with abs.
        
        (WebCore::FractionalLayoutUnit::isInBounds):
        Fix type mismatch warning.
        
        (WebCore::operator==):
        Fix typo.
        
        (WebCore::operator*):
        Use long long version of setRawValue.

2012-02-15  Shinya Kawanaka  <shinyak@chromium.org>

        Add an internal flag to accept multiple shadow roots for the purpose of tests.
        https://bugs.webkit.org/show_bug.cgi?id=78453

        Reviewed by Hajime Morita.

        This patch introduces a flag to enable multiple shadow subtrees.
        This flag is intended to be used for testing purpose for a while.
        We will remove it later.

        No new tests, no change in behavior.

        * WebCore.exp.in:
        * bindings/generic/RuntimeEnabledFeatures.cpp:
        (WebCore):
        * bindings/generic/RuntimeEnabledFeatures.h:
        (RuntimeEnabledFeatures):
        (WebCore::RuntimeEnabledFeatures::multipleShadowSubtreesEnabled):
        (WebCore::RuntimeEnabledFeatures::setMultipleShadowSubtreesEnabled):
        * dom/ShadowRoot.cpp:
        (WebCore::ShadowRoot::create):
        * dom/ShadowRootList.cpp:
        (WebCore::ShadowRootList::pushShadowRoot):
        * testing/Internals.cpp:
        (WebCore::Internals::setMultipleShadowSubtreesEnabled):
        (WebCore):
        * testing/Internals.h:
        (Internals):
        * testing/Internals.idl:

2012-02-16  Mark Hahnenberg  <mhahnenberg@apple.com>

        Fix the broken viewport tests
        https://bugs.webkit.org/show_bug.cgi?id=78774

        Reviewed by Kenneth Rohde Christiansen.

        No new tests.

        * dom/ViewportArguments.cpp:
        (WebCore::numericPrefix): Changed to use the new charactersToFloatWithJunk function(s).

2012-02-16  Cris Neckar  <cdn@chromium.org>

        Very large strings could cause the new quoted string to wrap.
        https://bugs.webkit.org/show_bug.cgi?id=78387

        Reviewed by Eric Seidel.

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

2012-02-16  Eric Seidel  <eric@webkit.org>

        Add a themeChromiumAndroid.css file for android-specific default styles
        https://bugs.webkit.org/show_bug.cgi?id=78547

        Reviewed by Adam Barth.

        This includes the themeChromiumAndroid.css file from the Chromium-Android port
        as well as some addidtional changes they had to html.css.  I believe those
        changes were made before themeChromiumAndroid was created, but it's now the better place for this CSS.

        * WebCore.gyp/WebCore.gyp:
        * css/themeChromiumAndroid.css: Added.
        (select[size][multiple]):
        (input[type="date"], input[type="datetime"], input[type="datetime-local"], input[type="time"], input[type="month"]):
        * rendering/RenderThemeChromiumAndroid.cpp:
        (WebCore::RenderThemeChromiumAndroid::extraDefaultStyleSheet):
        (WebCore):
        * rendering/RenderThemeChromiumAndroid.h:
        (RenderThemeChromiumAndroid):
        (WebCore::RenderThemeChromiumAndroid::delegatesMenuListRendering):
        (WebCore::RenderThemeChromiumAndroid::platformTapHighlightColor):

2012-02-16  Brady Eidson  <beidson@apple.com>

        <rdar://problem/10616280> and https://bugs.webkit.org/show_bug.cgi?id=78767
        REGRESSION (r90471) - iAd Producer 2.0.1 produces blank pages

        Reviewed by Sam Weinig.

        No new tests. (Subtle API change attached to a specific application)

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::isLoadingInAPISense): Return true if the app needs the quirk
        and there are outstanding subresource loads.

        * page/Settings.cpp:
        (WebCore::Settings::Settings):
        * page/Settings.h:
        (WebCore::Settings::setNeedsIsLoadingInAPISenseQuirk):
        (WebCore::Settings::needsIsLoadingInAPISenseQuirk):
        (Settings):

2012-02-16  Kentaro Hara  <haraken@chromium.org>

        Remove [ConvertScriptString] from FileReaderSync.idl
        https://bugs.webkit.org/show_bug.cgi?id=78335

        Reviewed by Eric Seidel.

        The spec says that FileReadSync should throw NOT_FOUND_ERR
        if a given blob is invalid: http://www.w3.org/TR/FileAPI/#FileReaderSync

        By this fix, we can completely remove [ConvertScriptString] from WebKit.

        Tests: fast/files/workers/worker-read-blob-sync.html
               fast/files/workers/worker-read-file-sync.html

        * fileapi/FileReaderSync.cpp: Modified to throw NOT_FOUND_ERR if a blob is invalid.
        (WebCore::FileReaderSync::readAsArrayBuffer):
        (WebCore::FileReaderSync::readAsBinaryString):
        (WebCore::FileReaderSync::readAsText):
        (WebCore::FileReaderSync::readAsDataURL):
        * fileapi/FileReaderSync.idl:

        * bindings/scripts/CodeGeneratorJS.pm: Removed [ConvertScriptString]
        since no one is using it.
        (NativeToJSValue):
        * bindings/scripts/CodeGeneratorV8.pm: Ditto.
        (NativeToJSValue):

        * bindings/scripts/test/TestObj.idl: Removed a test case for [ConvertScriptString].

        * bindings/scripts/test/CPP/WebDOMTestObj.cpp: Updated run-bindings-tests results.
        * bindings/scripts/test/CPP/WebDOMTestObj.h:
        * bindings/scripts/test/GObject/WebKitDOMTestObj.cpp:
        (webkit_dom_test_obj_get_property):
        (webkit_dom_test_obj_class_init):
        * bindings/scripts/test/GObject/WebKitDOMTestObj.h:
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore):
        * bindings/scripts/test/JS/JSTestObj.h:
        (WebCore):
        * bindings/scripts/test/ObjC/DOMTestObj.h:
        * bindings/scripts/test/ObjC/DOMTestObj.mm:
        * bindings/scripts/test/V8/V8TestObj.cpp:
        (WebCore):


2012-02-16  Dana Jansens  <danakj@chromium.org>

        [chromium] Clipping/Transforms applied in wrong order in opaque paint tracking
        https://bugs.webkit.org/show_bug.cgi?id=78775

        Reviewed by Stephen White.

        The clip was being applied in device coordinates, before transforming the painted
        rect into device coordinates. This made any translations get doubly represented,
        and gave incorrect paint tracking results.

        Test: compositing/culling/unscrolled-within-boxshadow.html

        Unit test: PlatformContextSkiaTest.cpp

        * platform/graphics/skia/OpaqueRegionSkia.cpp:
        (WebCore::OpaqueRegionSkia::didDraw):

2012-02-16  Abhishek Arya  <inferno@chromium.org>

        Crash with tables in multi-column layout.
        https://bugs.webkit.org/show_bug.cgi?id=78415

        Reviewed by Julien Chaffraix.

        Multi-column code creates anonymous column blocks directly
        under RenderTable, thereby violating table layout assumption.
        E.g. Captions in this testcase gets reparented to these anonymous
        column blocks and when they go away, they are not able to clear
        themselves from table's m_captions list (since RenderTable::removeChild
        is not called).

        Test: fast/multicol/span/table-multi-column-crash.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::containingColumnsBlock):

2012-02-16  ChangSeok Oh  <shivamidow@gmail.com>

        [GTK] File system api build is broken
        https://bugs.webkit.org/show_bug.cgi?id=78479

        Reviewed by Philippe Normand.

        This patch is a small step to support FileSystem API for GTK port.
        As I know, bug58443 also dealt with it, but it looks like the submitted patch
        needs to be updated. To do that, I think I need to discuss with the original author.
        So, I hope to just fix build break issue in this bug.

        No new tests. Implementing the feature is not done yet.

        * GNUmakefile.list.am: Added some missing files.
        * bindings/js/JSDirectoryEntryCustom.cpp: Added Error.h to use its API.
        * platform/AsyncFileSystem.cpp:
        (WebCore):
        (WebCore::AsyncFileSystem::create): The arguments don't match the declaration in AsyncFileSystem.h.
        * platform/gtk/AsyncFileSystemGtk.cpp: Added.
        (WebCore):
        (WebCore::AsyncFileSystem::isAvailable):
        (WebCore::AsyncFileSystem::isValidType):
        (WebCore::AsyncFileSystem::create):
        (WebCore::AsyncFileSystem::openFileSystem):
        (WebCore::AsyncFileSystem::crackFileSystemURL):
        (WebCore::AsyncFileSystemGtk::AsyncFileSystemGtk):
        (WebCore::AsyncFileSystemGtk::~AsyncFileSystemGtk):
        (WebCore::AsyncFileSystemGtk::toURL):
        (WebCore::AsyncFileSystemGtk::move):
        (WebCore::AsyncFileSystemGtk::copy):
        (WebCore::AsyncFileSystemGtk::remove):
        (WebCore::AsyncFileSystemGtk::removeRecursively):
        (WebCore::AsyncFileSystemGtk::readMetadata):
        (WebCore::AsyncFileSystemGtk::createFile):
        (WebCore::AsyncFileSystemGtk::createDirectory):
        (WebCore::AsyncFileSystemGtk::fileExists):
        (WebCore::AsyncFileSystemGtk::directoryExists):
        (WebCore::AsyncFileSystemGtk::readDirectory):
        (WebCore::AsyncFileSystemGtk::createWriter):
        * platform/gtk/AsyncFileSystemGtk.h: Added.
        (WebCore):
        (AsyncFileSystemGtk):

2012-02-16  Adrienne Walker  <enne@google.com>

        Handle dirty descendant visibility status in RenderLayer::updateLayerPositionsAfterScroll
        https://bugs.webkit.org/show_bug.cgi?id=78286

        Reviewed by Julien Chaffraix.

        This is an unfortunate bandaid over a corner case where sometimes the
        visible descendant status dirty flag is true when this function is
        called from FrameView::repaintFixedElementsAfterScrolling. As it
        should be cheap to refresh this flag when dirty in most cases (as it
        early outs after finding any visible descendant), just lazily update
        the dirty flag here to ensure correctness.

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateLayerPositionsAfterScroll):

2012-02-16  Adam Barth  <abarth@webkit.org>

        Chrome::*Geolocation* are just useless pass-throughs to ChromeClient and should be removed
        https://bugs.webkit.org/show_bug.cgi?id=78844

        Reviewed by Eric Seidel.

        These function serve no useful purpose and should be removed.

        * page/Chrome.cpp:
        (WebCore):
        * page/Chrome.h:
        (Chrome):
        * page/Geolocation.cpp:
        (WebCore::Geolocation::reset):
        (WebCore::Geolocation::requestPermission):

2012-02-16  Sergio Villar Senin  <svillar@igalia.com>

        [soup] Move important SoupSession feature initialization to WebCore
        https://bugs.webkit.org/show_bug.cgi?id=68602

        Reviewed by Martin Robinson.

        Moved content sniffer and decoder initialization from WebKit to
        WebCore because network stuff will not work as expected without
        them. Added also out-of-the-box proxy support to WebCore.

        No new tests required as we're just moving stuff from WebKit to
        WebCore.

        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::ResourceHandle::defaultSession):

2012-02-16  Julien Chaffraix  <jchaffraix@webkit.org>

        thead in table without tbody causes table height doubling
        https://bugs.webkit.org/show_bug.cgi?id=37244

        Reviewed by Ojan Vafai.

        Tests: fast/table/double-height-table-no-tbody-expected.html
               fast/table/double-height-table-no-tbody.html

        The bug is caused by the layout code would wrongly assuming that a
        table without a <tbody> is an empty table. We would set the logical
        height to the style's logical height wrongly before inflating the
        logical height to account for the section(s). This would cause us
        to increase past our needed size thus the bug.

        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::layout):
        A table is empty if it does not have any top section, not just a <tbody>.
        The test uncovered an issue with height distribution in layoutRows where we
        would distribute the extra height to the first <tbody> not section.

2012-02-07  Robert Hogan  <robert@webkit.org>

        CSS 2.1 failure: fixed-table-layout-013 and fixed-table-layout-015 fail
        https://bugs.webkit.org/show_bug.cgi?id=78027

        Reviewed by Julien Chaffraix.

        Both of these test the (slightly implicit) rule that width set on column-groups cannot
        affect the width of columns in a fixed layout table: http://www.w3.org/TR/CSS21/tables.html#fixed-table-layout
        FF, Opera and IE all pass these two tests.

        Tests: css2.1/20110323/fixed-table-layout-013.htm
               css2.1/20110323/fixed-table-layout-015.htm

        * rendering/FixedTableLayout.cpp:
        (WebCore::nextCol): A helper function for finding the next column along.
        (WebCore::FixedTableLayout::calcWidthArray): Ignore width specified by column groups.
        * rendering/RenderTableCol.h:
        (WebCore::RenderTableCol::isTableColGroup): Convenience function for identifying column groups.

2012-02-16  Philippe Normand  <pnormand@igalia.com>

        Unreviewed, rolling out r107941.
        http://trac.webkit.org/changeset/107941
        https://bugs.webkit.org/show_bug.cgi?id=68602

        Broke 23 http tests on GTK

        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::ResourceHandle::defaultSession):

2012-02-16  Tom Sepez  <tsepez@chromium.org>

        XSS Auditor bypass with U+2028/2029
        https://bugs.webkit.org/show_bug.cgi?id=78732

        Reviewed by Adam Barth.

        Test: http/tests/security/xssAuditor/script-tag-with-trailing-comment-U2028.html

        * html/parser/XSSAuditor.cpp:
        (WebCore::isJSNewline):
        (WebCore::XSSAuditor::snippetForJavaScript):

2012-02-15  Mark Rowe  <mrowe@apple.com>

        NPN_GetValueForURL / NPNURLVProxy returns DIRECT when proxy configured via PAC
        <http://webkit.org/b/78766> / <rdar://problem/10729283>

        Reviewed by Anders Carlsson.

        * platform/network/cf/ProxyServerCFNet.cpp:
        (WebCore::proxyAutoConfigurationResultCallback): Stop the runloop, and then process
        the results that we received.
        (WebCore::processProxyServers): Processing of array of proxy configuration information
        moved from addProxyServersForURL. Handling of proxy auto-configuration URLs is now handled
        by calling CFNetworkExecuteProxyAutoConfigurationURL and waiting synchronously on the result
        callback. Doing this synchronously is not great, but it's the best we can do without a lot
        of restructuring of the code that calls this. We arbitrarily time out the execution after five
        seconds to avoid permanently hanging.
        (WebCore::addProxyServersForURL): Call in to our helper function.

2012-02-16  Abhishek Arya  <inferno@chromium.org>

        Fix clone() function to handle descendant classes of RenderBlock.
        https://bugs.webkit.org/show_bug.cgi?id=78273

        Reviewed by Eric Seidel.

        Test: fast/multicol/span/clone-flexbox-crash.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::clone):

2012-02-16  Raul Hudea  <rhudea@adobe.com>

        [CSSRegions]overflowRegion tests are flaky
        https://bugs.webkit.org/show_bug.cgi?id=78761

        Reviewed by Tony Chang.

        The overflowRegion tests were updated.

        * dom/Element.cpp:
        (WebCore::Element::webkitRegionOverflow):

2012-02-16  Raul Hudea  <rhudea@adobe.com>

        [CSS Regions] Repaint issues when changing innerHTML of content
        https://bugs.webkit.org/show_bug.cgi?id=78787

        Reviewed by David Hyatt.

        The calculation of the clipping rectangle is based on the repaint rectangle,
        so it needs to be clipped to the current region, because it might spread over multiple ones.

        Test: fast/repaint/region-painting-invalidation.html

        * rendering/RenderFlowThread.cpp:
        (WebCore::RenderFlowThread::repaintRectangleInRegions):

2012-02-16  Adam Roben  <aroben@apple.com>

        Roll out r107887

        It broke 32-bit builds due to truncation from "long long" to "int".

        Original bug is <http://webkit.org/b/76571> Add FractionalLayoutPoint/Size/Rect for
        sub-pixel layout

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * WebCore.gypi:
        * WebCore.order:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/FractionalLayoutUnit.h:
        (WebCore::FractionalLayoutUnit::isInBounds):
        (WebCore::operator==):
        (WebCore::operator*):
        * platform/graphics/FloatPoint.cpp:
        * platform/graphics/FloatPoint.h:
        (WebCore):
        (FloatPoint):
        (WebCore::FloatPoint::move):
        (WebCore::FloatPoint::moveBy):
        * platform/graphics/FloatRect.cpp:
        * platform/graphics/FloatRect.h:
        (WebCore):
        * platform/graphics/FloatSize.cpp:
        * platform/graphics/FloatSize.h:
        (WebCore):
        * platform/graphics/FractionalLayoutPoint.h: Removed.
        * platform/graphics/FractionalLayoutRect.cpp: Removed.
        * platform/graphics/FractionalLayoutRect.h: Removed.
        * platform/graphics/FractionalLayoutSize.cpp: Removed.
        * platform/graphics/FractionalLayoutSize.h: Removed.
        * platform/graphics/IntRect.cpp:
        * platform/graphics/IntRect.h:
        (WebCore):
        (IntRect):

2012-02-16  Pavel Feldman  <pfeldman@google.com>

        Web Inspector: cache settings values
        https://bugs.webkit.org/show_bug.cgi?id=78815

        Reviewed by Vsevolod Vlasov.

        * inspector/front-end/Settings.js:
        (WebInspector.Setting.prototype.get if):
        (WebInspector.Setting.prototype):
        (WebInspector.Setting.prototype.):
        (WebInspector.Setting.prototype.set this):

2012-02-16  Terry Anderson  <tdanderson@chromium.org>

        WebKit does not support DOM 3 Events FocusEvent
        https://bugs.webkit.org/show_bug.cgi?id=76216

        Created a new FocusEvent class (extends UIEvent) with a relatedTarget attribute.  Moved
        the {Focus,Blur,FocusIn,FocusOut}EventDispatchMediator classes inside FocusEvent.  Now when
        focusin or focusout events are dispatched, a FocusEvent is created with the relatedTarget
        attribute set accordingly.  No other logic changes have been made besides adding the
        FocusEvent class.

        Reviewed by Eric Seidel.

        Test: fast/events/related-target-focusevent.html

        * CMakeLists.txt:
        * DerivedSources.cpp:
        * DerivedSources.make:
        * DerivedSources.pri:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/DOMAllInOne.cpp:
            - Included mention of FocusEvent / JSFocusEvent in the above files to
              allow the patch to build on the different platforms
        * dom/EventDispatchMediator.cpp:
        * dom/EventDispatchMediator.h:
        * dom/EventFactory.in:
        * dom/FocusEvent.cpp: Added.
        (WebCore):
        (WebCore::FocusEvent::FocusEvent):
        (WebCore::FocusEvent::~FocusEvent):
        (WebCore::FocusEvent::initFocusEvent):
        (WebCore::FocusEvent::interfaceName):
        (WebCore::FocusInEventDispatchMediator::create):
        (WebCore::FocusInEventDispatchMediator::FocusInEventDispatchMediator):
        (WebCore::FocusInEventDispatchMediator::dispatchEvent):
        (WebCore::FocusInEventDispatchMediator::event):
        (WebCore::FocusOutEventDispatchMediator::create):
        (WebCore::FocusOutEventDispatchMediator::FocusOutEventDispatchMediator):
        (WebCore::FocusOutEventDispatchMediator::dispatchEvent):
        (WebCore::FocusOutEventDispatchMediator::event):
        (WebCore::FocusEventDispatchMediator::create):
        (WebCore::FocusEventDispatchMediator::FocusEventDispatchMediator):
        (WebCore::FocusEventDispatchMediator::dispatchEvent):
        (WebCore::BlurEventDispatchMediator::create):
        (WebCore::BlurEventDispatchMediator::BlurEventDispatchMediator):
        (WebCore::BlurEventDispatchMediator::dispatchEvent):
        * dom/FocusEvent.h: Copied from Source/WebCore/dom/EventDispatchMediator.h.
        (WebCore):
        (FocusEvent):
        (WebCore::FocusEvent::create):
        (WebCore::FocusEvent::relatedTarget):
        (WebCore::FocusEvent::setRelatedTarget):
        (FocusInEventDispatchMediator):
        (FocusOutEventDispatchMediator):
        (FocusEventDispatchMediator):
        (BlurEventDispatchMediator):
        * dom/FocusEvent.idl: Added.
        * dom/Node.cpp:
        (WebCore::Node::dispatchFocusInEvent):
        (WebCore::Node::dispatchFocusOutEvent):
        * dom/UIEvent.cpp:
        * dom/UIEvent.h:
        * page/DOMWindow.idl:

2012-02-16  No'am Rosenthal  <noam.rosenthal@nokia.com>

        [Texmap] Improve the way we deal with BGRA extension
        https://bugs.webkit.org/show_bug.cgi?id=78822

        Swizzle the RGBA manually only in OpenGL ES, and only if the extension is not available.
        Pass the pixel-format of the images when updating TextureMapperTiledBackingStore.

        Reviewed by Kenneth Rohde Christiansen.

        No new behavior.

        * platform/graphics/opengl/TextureMapperGL.cpp:
        (WebCore):
        (WebCore::hasExtension):
        (WebCore::hasBgraExtension):
        (WebCore::BitmapTextureGL::updateContents):
        * platform/graphics/texmap/TextureMapperBackingStore.cpp:
        (WebCore::TextureMapperTile::updateContents):
        (WebCore::TextureMapperTiledBackingStore::updateContentsFromImageIfNeeded):
        (WebCore::TextureMapperTiledBackingStore::updateContents):
        * platform/graphics/texmap/TextureMapperBackingStore.h:
        (TextureMapperTile):
        (TextureMapperTiledBackingStore):
        (WebCore::TextureMapperTiledBackingStore::updateContents):
        * platform/graphics/texmap/TextureMapperLayer.cpp:
        (WebCore::TextureMapperLayer::updateBackingStore):

2012-02-16  Simon Hausmann  <simon.hausmann@nokia.com>

        [Gtk][Efl][Qt] Move OpenGLShims out of cairo/ subdirectory
        https://bugs.webkit.org/show_bug.cgi?id=78800

        Reviewed by Kenneth Rohde Christiansen.

        The file is not specific to Cairo and used in other ports. Move it into
        common space.

        * GNUmakefile.list.am:
        * PlatformEfl.cmake:
        * Target.pri:
        * platform/graphics/OpenGLShims.cpp: Renamed from Source/WebCore/platform/graphics/cairo/OpenGLShims.cpp.
        (WebCore):
        (WebCore::openGLFunctionTable):
        (WebCore::getProcAddress):
        (WebCore::lookupOpenGLFunctionAddress):
        (WebCore::initializeOpenGLShims):
        * platform/graphics/OpenGLShims.h: Renamed from Source/WebCore/platform/graphics/cairo/OpenGLShims.h.
        (WebCore):
        (_OpenGLFunctionTable):
        * platform/graphics/opengl/Extensions3DOpenGL.cpp:
        * platform/graphics/opengl/GraphicsContext3DOpenGL.cpp:
        * platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:
        * platform/graphics/opengl/TextureMapperGL.cpp:
        * platform/graphics/qt/Extensions3DQt.cpp:
        * platform/graphics/qt/GraphicsContext3DQt.cpp:

2012-02-16  No'am Rosenthal  <noam.rosenthal@nokia.com>

        [Qt][WK2] Allow opaque tiles
        https://bugs.webkit.org/show_bug.cgi?id=78809

        Add a supportsAlpha property to TiledBackingStore.
        We invalidate all the tiles if that property changes, because the buffers need to be
        recreated in a different format.

        Reviewed by Kenneth Rohde Christiansen.

        No behavior changes.

        * platform/graphics/TiledBackingStore.cpp:
        (WebCore::TiledBackingStore::TiledBackingStore):
        (WebCore::TiledBackingStore::setSupportsAlpha):
        (WebCore):
        * platform/graphics/TiledBackingStore.h:
        (TiledBackingStore):
        (WebCore::TiledBackingStore::supportsAlpha):

2012-02-16  Sergio Villar Senin  <svillar@igalia.com>

        [soup] Move important SoupSession feature initialization to WebCore
        https://bugs.webkit.org/show_bug.cgi?id=68602

        Reviewed by Martin Robinson.

        Moved content sniffer and decoder initialization from WebKit to
        WebCore because network stuff will not work as expected without
        them. Added also out-of-the-box proxy support to WebCore.

        No new tests required as we're just moving stuff from WebKit to
        WebCore.

        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::ResourceHandle::defaultSession):

2012-02-16  Pavel Feldman  <pfeldman@google.com>

        Web Inspector: remove free flow DOM editing experiment.
        https://bugs.webkit.org/show_bug.cgi?id=78813

        Reviewed by Yury Semikhatsky.

        * inspector/front-end/DOMAgent.js:
        (WebInspector.DOMAgent.prototype._markRevision):

2012-02-16  Patrick Gansterer  <paroga@webkit.org>

        WinCE build fix after r107453.

        * platform/FractionalLayoutUnit.h:
        (WebCore::FractionalLayoutUnit::isInBounds): Use fabs() instead of abs().

2012-02-15  Pavel Feldman  <pfeldman@google.com>

        Web Inspector: explicitly mark undoable state from the front-end.
        https://bugs.webkit.org/show_bug.cgi?id=78716

        Reviewed by Vsevolod Vlasov.

        * inspector/InspectorCSSAgent.cpp:
        (WebCore::InspectorCSSAgent::toggleProperty):
        (WebCore::InspectorCSSAgent::setRuleSelector):
        (WebCore::InspectorCSSAgent::addRule):
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::setAttributeValue):
        (WebCore::InspectorDOMAgent::setAttributesAsText):
        (WebCore::InspectorDOMAgent::removeAttribute):
        (WebCore::InspectorDOMAgent::removeNode):
        (WebCore::InspectorDOMAgent::setNodeName):
        (WebCore::InspectorDOMAgent::setOuterHTML):
        (WebCore::InspectorDOMAgent::setNodeValue):
        (WebCore::InspectorDOMAgent::moveTo):
        * inspector/InspectorHistory.cpp:
        (WebCore::InspectorHistory::redo):
        * inspector/InspectorHistory.h:
        (InspectorHistory):
        * inspector/front-end/CSSStyleModel.js:
        (WebInspector.CSSStyleModel.prototype.setRuleSelector.callback):
        (WebInspector.CSSStyleModel.prototype.setRuleSelector):
        (WebInspector.CSSStyleModel.prototype.addRule.callback):
        (WebInspector.CSSStyleModel.prototype.addRule):
        (WebInspector.CSSStyleModel.prototype.setStyleSheetText):
        (WebInspector.CSSProperty.prototype.setText.callback):
        (WebInspector.CSSProperty.prototype.setText):
        (WebInspector.CSSProperty.prototype.setDisabled.callback):
        (WebInspector.CSSProperty.prototype.setDisabled):
        (WebInspector.CSSStyleSheet.prototype.setText):
        * inspector/front-end/DOMAgent.js:
        (WebInspector.DOMAgent.prototype._markRevision):
        (WebInspector.DOMAgent.prototype.get markUndoableState):

2012-02-15  Pavel Feldman  <pfeldman@google.com>

        Web Inspector: revert 'modification of DOM upon single click for selected nodes'.
        https://bugs.webkit.org/show_bug.cgi?id=78717

        Reviewed by Vsevolod Vlasov.

        * inspector/front-end/ElementsTreeOutline.js:
        (WebInspector.ElementsTreeElement.prototype.onattach):

2012-02-16  Pavel Feldman  <pfeldman@google.com>

        Web Inspector: move style disable checkboxes to the left
        https://bugs.webkit.org/show_bug.cgi?id=78780

        Reviewed by Vsevolod Vlasov.

        * inspector/front-end/StylesSidebarPane.js:
        (WebInspector.StylePropertiesSection):
        (WebInspector.StylePropertiesSection.prototype._handleSelectorDoubleClick):
        (WebInspector.StylePropertyTreeElement.prototype):
        * inspector/front-end/elementsPanel.css:
        (.styles-section.matched-styles .properties):
        (.styles-section.matched-styles .properties li):
        (.styles-section .properties li.parent::before):
        (.styles-section .properties li.parent.expanded::before):
        (.styles-section.matched-styles .properties li.parent .expand-element):
        (.styles-section.matched-styles .properties li.parent.expanded .expand-element):
        (.styles-section.computed-style .properties li.parent::before):
        (.styles-section.computed-style .properties li.parent.expanded::before):
        (.styles-section.matched-styles:not(.read-only):hover .properties .enabled-button):
        (.styles-section.matched-styles:not(.read-only) .properties li.disabled .enabled-button):
        (.styles-section .properties .enabled-button):
        (.styles-section.matched-styles .properties ol.expanded):
        * inspector/front-end/treeoutline.js:
        (TreeElement.treeElementDoubleClicked):

2012-02-16  Yury Semikhatsky  <yurys@chromium.org>

        Web Inspector: show memory counter graphics when switching to memory view
        https://bugs.webkit.org/show_bug.cgi?id=78808

        Switching to memory view in timeline will display memory counters. Counter
        graphics know show fair data without approximations between sampling points.

        Reviewed by Pavel Feldman.

        * English.lproj/localizedStrings.js:
        * inspector/front-end/MemoryStatistics.js:
        (WebInspector.MemoryStatistics.prototype._calculateVisibleIndexes):
        (WebInspector.MemoryStatistics.prototype._calculateXValues):
        (WebInspector.MemoryStatistics.prototype._drawPolyline):
        * inspector/front-end/TimelinePanel.js:
        (WebInspector.TimelinePanel.prototype.get statusBarItems):
        (WebInspector.TimelinePanel.prototype._createStatusbarButtons):
        (WebInspector.TimelinePanel.prototype._timelinesOverviewItemSelected):
        (WebInspector.TimelinePanel.prototype._memoryOverviewItemSelected):

2012-02-16  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: [heap snapshot] It could be useful to have access to the selected heap object from the console.
        https://bugs.webkit.org/show_bug.cgi?id=78496

        Reviewed by Yury Semikhatsky.

       * bindings/js/JSInjectedScriptHostCustom.cpp:
        (WebCore::JSInjectedScriptHost::inspectedObject):
        * bindings/v8/custom/V8InjectedScriptHostCustom.cpp:
        (WebCore::V8InjectedScriptHost::inspectedObjectCallback):
        * inspector/InjectedScriptHost.cpp:
        (WebCore::InjectedScriptHost::InjectedScriptHost):
        (WebCore::InjectedScriptHost::InspectableObject::get):
        (WebCore):
        (WebCore::InjectedScriptHost::addInspectedObject):
        (WebCore::InjectedScriptHost::clearInspectedObjects):
        (WebCore::InjectedScriptHost::inspectedObject):
        * inspector/InjectedScriptHost.h:
        (InspectableObject):
        (WebCore::InjectedScriptHost::InspectableObject::~InspectableObject):
        (InjectedScriptHost):
        * inspector/InjectedScriptHost.idl:
        * inspector/InjectedScriptSource.js:
        (.):
        * inspector/Inspector.json:
        * inspector/InspectorAgent.cpp:
        (WebCore::InspectorAgent::domContentLoadedEventFired):
        * inspector/InspectorConsoleAgent.cpp:
        (InspectableHeapObject):
        (WebCore::InspectableHeapObject::InspectableHeapObject):
        (WebCore::InspectableHeapObject::get):
        (WebCore):
        (WebCore::InspectorConsoleAgent::addInspectedHeapObject):
        * inspector/InspectorConsoleAgent.h:
        (InspectorConsoleAgent):
        * inspector/InspectorProfilerAgent.cpp:
        (WebCore::InspectorProfilerAgent::resetState):
        * inspector/PageConsoleAgent.cpp:
        (InspectableNode):
        (WebCore::InspectableNode::InspectableNode):
        (WebCore::InspectableNode::get):
        (WebCore):
        (WebCore::PageConsoleAgent::addInspectedNode):
        * inspector/front-end/DetailedHeapshotView.js:
        (WebInspector.DetailedHeapshotView.prototype._selectionChanged):
        (WebInspector.DetailedHeapshotView.prototype._inspectedObjectChanged):

2012-02-16  Kihong Kwon  <kihong.kwon@samsung.com>

        Add support for unsigned long[] to idl bindings to JSC.
        https://bugs.webkit.org/show_bug.cgi?id=78210

        Reviewed by Kentaro Hara.

        Add support for unsigned long[] parameter type in idl.
        This patch adds support just for unsigned long[] parameter type.
        (support for other types of array should be done in another patch.)

        tests added to TestObj.idl.

        * bindings/js/JSDOMBinding.h:
        (WebCore::jsUnsignedLongArrayToVector):
        * bindings/scripts/CodeGeneratorJS.pm:
        (AddIncludesForType):
        (JSValueToNative):
        (NativeToJSValue):
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore):
        (WebCore::jsTestObjPrototypeFunctionMethodWithUnsignedLongArray):
        * bindings/scripts/test/JS/JSTestObj.h:
        (WebCore):
        * bindings/scripts/test/TestObj.idl:

2012-02-16  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: [InspectorIndexedDB] Add IndexedDB TreeElement to resources panel.
        https://bugs.webkit.org/show_bug.cgi?id=78609

        Reviewed by Yury Semikhatsky.

        Added IndexedDB tree element to resources panel (behind experimental setting).
        Test is currently disabled, since we don't run tests with experiments enabled.

        * English.lproj/localizedStrings.js:
        * WebCore.gypi:
        * inspector/front-end/Images/indexedDB.png: Added.
        * inspector/front-end/Images/indexedDBIndex.png: Added.
        * inspector/front-end/Images/indexedDBObjectStore.png: Added.
        * inspector/front-end/IndexedDBModel.js:
        (WebInspector.IndexedDBModel):
        (WebInspector.IndexedDBModel.prototype.refreshDatabaseNames):
        (WebInspector.IndexedDBModel.prototype.refreshDatabase):
        (WebInspector.IndexedDBModel.prototype._reset):
        (WebInspector.IndexedDBModel.prototype._originAddedToFrame):
        (WebInspector.IndexedDBModel.prototype._originRemoved):
        (WebInspector.IndexedDBModel.prototype._databaseAdded):
        (WebInspector.IndexedDBModel.prototype._databaseRemoved):
        (WebInspector.IndexedDBModel.prototype._loadDatabaseNamesForFrame):
        (WebInspector.IndexedDBModel.prototype._loadDatabase.callback):
        (WebInspector.IndexedDBModel.prototype._loadDatabase):
        (WebInspector.IndexedDBModel.Frame):
        (WebInspector.IndexedDBModel.DatabaseId):
        (WebInspector.IndexedDBModel.DatabaseId.prototype.equals):
        (WebInspector.IndexedDBModel.Database):
        (WebInspector.IndexedDBModel.Index):
        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.IndexedDBTreeElement):
        (WebInspector.IndexedDBTreeElement.prototype.onexpand):
        (WebInspector.IndexedDBTreeElement.prototype._createIndexedDBModel):
        (WebInspector.IndexedDBTreeElement.prototype.refreshIndexedDB):
        (WebInspector.IndexedDBTreeElement.prototype._indexedDBAdded):
        (WebInspector.IndexedDBTreeElement.prototype._indexedDBRemoved):
        (WebInspector.IndexedDBTreeElement.prototype._indexedDBLoaded):
        (WebInspector.IndexedDBTreeElement.prototype._idbDatabaseTreeElement):
        (WebInspector.IDBDatabaseTreeElement):
        (WebInspector.IDBDatabaseTreeElement.prototype.update):
        (WebInspector.IDBDatabaseTreeElement.prototype.onselect):
        (WebInspector.IDBObjectStoreTreeElement):
        (WebInspector.IDBObjectStoreTreeElement.prototype.update):
        (WebInspector.IDBIndexTreeElement):
        (WebInspector.IDBIndexTreeElement.prototype.update):
        * inspector/front-end/Settings.js:
        (WebInspector.ExperimentsSettings):
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/resourcesPanel.css:
        (.indexed-db-storage-tree-item .icon):
        (.indexed-db-object-store-storage-tree-item .icon):
        (.indexed-db-index-storage-tree-item .icon):

2012-02-15  Nikolas Zimmermann  <nzimmermann@rim.com>

        REGRESSION (Safari 5.0.5 - 5.1): No animation on svg-wow.org/text-effects/text-effects.xhtml
        https://bugs.webkit.org/show_bug.cgi?id=65072

        Reviewed by Zoltan Herczeg.

        Fix EMS/EXS length resolving, when the target context has no renderer, eg.
        <text display="none" dy="1em">ABC</text>, myText.dy.baseVal.getItem(0).value()
        currently throws, even if <text> has a parent, we could use to resolve the length.

        Always fall-back to parent context, to resolve EMS/EXS units, instead of ignoring it.
        The current behaviour stays the same, if the target element is not in the document,
        then we really can't resolve lengths like this.

        Tests: svg/text/ems-display-none.svg
               svg/text/exs-display-none.svg

        * svg/SVGLengthContext.cpp:
        (WebCore::renderStyleForLengthResolving):
        (WebCore::SVGLengthContext::convertValueFromUserUnitsToEMS):
        (WebCore::SVGLengthContext::convertValueFromEMSToUserUnits):
        (WebCore::SVGLengthContext::convertValueFromUserUnitsToEXS):
        (WebCore::SVGLengthContext::convertValueFromEXSToUserUnits):

2012-02-16  Simon Hausmann  <simon.hausmann@nokia.com>

        Build fix for Qt 5 without QtWidgets.

        Reviewed by Tor Arne Vestbø.

        The reason why QGLContext is included in Extensions3DQt.cpp is to
        achieve an implicit gl.h inclusion (needed for GL_FALSE). This patch
        replaces the inclusion with the OpenGLShims.h inclusions, which has
        the necessary #ifdefs in place to pull in gl.h with Qt 5 without QtWidgets.

        * platform/graphics/qt/Extensions3DQt.cpp:

2012-02-16  Shawn Singh  <shawnsingh@chromium.org>

        [chromium] Refactor CCLayerTreeHostCommon: create helper function for complex boolean condition
        https://bugs.webkit.org/show_bug.cgi?id=78539

        Reviewed by James Robinson.

        This change should introduce no change in behavior, and its
        expected behavior is already covered by existing tests.

        In calculateDrawTransformsAndVisibility, there is a complex
        boolean condition that indicates whether we should create a
        RenderSurface or not. This patch pulls out that boolean logic,
        and wraps it in a helper function for much better readability.

        * platform/graphics/chromium/cc/CCLayerTreeHostCommon.cpp:
        (WebCore::layerShouldBeSkipped):
        (WebCore):
        (WebCore::subtreeShouldRenderToSeparateSurface):
        (WebCore::calculateDrawTransformsAndVisibilityInternal):

2012-02-16  Andrey Kosyakov  <caseq@chromium.org>

        Web Inspector: [refactoring] move timeline overview sidebar creation to TimelineOverviewPane
        https://bugs.webkit.org/show_bug.cgi?id=78782

        Reviewed by Vsevolod Vlasov.

        * inspector/front-end/TimelineOverviewPane.js:
        (WebInspector.TimelineOverviewPane):
        (WebInspector.TimelineOverviewPane.prototype.showTimelines):
        (WebInspector.TimelineOverviewPane.prototype.showMemoryGraph):
        (WebInspector.TimelineOverviewPane.prototype.sidebarResized):
        * inspector/front-end/TimelinePanel.js:
        (WebInspector.TimelinePanel):
        (WebInspector.TimelinePanel.prototype.sidebarResized):

2012-02-15  Andreas Kling  <awesomekling@apple.com>

        Share font-family CSS values through CSSValuePool.
        <http://webkit.org/b/78604>

        Reviewed by Darin Adler.

        Cache and share FontFamilyValue instances in the per-document CSSValuePool.
        This reduces memory consumption by 248 kB on the Moz page cycler (64-bit)
        and avoids a bunch of extra work.

        This is a regression from the recent attribute style refactoring; previously
        the mapped attribute declaration table would ensure that multiple 'font'
        elements with the same 'face' value would share the same FontFamilyValue.

        We're not yet sharing the entire CSSValueList returned by parseFontFamily()
        but this is a step on the way there.

        * css/FontFamilyValue.cpp:
        * css/FontFamilyValue.h:

            Removed appendSpaceSeparated(), making FontFamilyValue immutable.

        * css/CSSParser.cpp:
        (FontFamilyValueBuilder):
        (WebCore::FontFamilyValueBuilder::FontFamilyValueBuilder):
        (WebCore::FontFamilyValueBuilder::add):
        (WebCore::FontFamilyValueBuilder::commit):
        (WebCore::CSSParser::parseFontFamily):

            Refactor parseFontFamily() to defer creation of FontFamilyValue until
            the whole family name is known. Added a little helper class to avoid
            code duplication.

        * css/CSSValuePool.h:
        * css/CSSValuePool.cpp:
        (WebCore::CSSValuePool::createFontFamilyValue):

            Added a FontFamilyValue cache to CSSValuePool. All values are tied to
            the lifetime of the pool.

2012-02-16  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] Move event conversion functions from WebCore to WebKit
        https://bugs.webkit.org/show_bug.cgi?id=78788

        Reviewed by Kenneth Rohde Christiansen.

        Move QtWidgets dependent mouse event constructors out of WebCore
        into WebKit, similar to the web event conversions of WebKit2.

        * Target.pri:
        * platform/PlatformMouseEvent.h:
        (PlatformMouseEvent):
        * platform/PlatformWheelEvent.h:
        (PlatformWheelEvent):

2012-02-16  Simon Hausmann  <simon.hausmann@nokia.com>

        Unreviewed prospective Qt 4.8/Mac build fix.

        Cast the PlatformWidget from QObject* to QWidget* to gain access
        to QWidget methods.

        * plugins/mac/PluginViewMac.mm:
        (WebCore::nativeWindowFor):
        (WebCore::cgHandleFor):
        (WebCore::topLevelOffsetFor):
        (WebCore::PluginView::setFocus):
        (WebCore::PluginView::invalidateRect):

2012-02-16  Roland Steiner  <rolandsteiner@chromium.org>

        <style scoped>: Implement scoped selector matching in the slow path
        https://bugs.webkit.org/show_bug.cgi?id=77528

        Added scope information to SelectorCheckingContext, SelectorChecker methods and CSSStyleSelector methods.
        Added matchOptions struct to CSSStyleSelector similar to SelectorCheckingContext in SelectorChecker.
        Adapted the calling sites.

        Reviewed by Antti Koivisto.

        No new tests. (extended existing tests)

        * css/CSSStyleSelector.cpp:
        (RuleData):
        (RuleSet):
        (WebCore::CSSStyleSelector::determineScopingElement):
        (WebCore::CSSStyleSelector::collectMatchingRules):
        (WebCore::CSSStyleSelector::collectMatchingRulesForRegion):
        (WebCore::CSSStyleSelector::matchScopedAuthorRules):
        (WebCore::CSSStyleSelector::matchAuthorRules):
        (WebCore::CSSStyleSelector::collectMatchingRulesForList):
        * css/CSSStyleSelector.h:
        (CSSStyleSelector):
        (MatchOptions):
        (WebCore::CSSStyleSelector::MatchOptions::MatchOptions):
        * css/SelectorChecker.cpp:
        (WebCore::SelectorChecker::checkSelector):
        * css/SelectorChecker.h:
        (WebCore::SelectorChecker::SelectorCheckingContext::SelectorCheckingContext):
        (SelectorCheckingContext):
        (SelectorChecker):

2012-02-15  Patrick Gansterer  <paroga@webkit.org>

        Windows build fix for !ENABLE(CSS_FILTERS) after r106593.

        * platform/graphics/ca/win/PlatformCALayerWin.cpp:

2012-02-15  Antti Koivisto  <antti@apple.com>

        Move the context invalidation code out from StylePropertySet
        https://bugs.webkit.org/show_bug.cgi?id=78589

        Reviewed by Ryosuke Niwa.

        StylePropertySet should be independent of its context so that they can in the future
        be shared between documents. The context invalidation code should move to the CSSOM wrapper.
        
        Parent rule and parent element pointers move to the CSSOM wrapper classes. 
        
        The wrapper is responsible of invalidating the element or document style on mutation.
        In case of internal mutation of style attribute, StyledElement takes care of the 
        invalidation.
        
        The StylePropertySet will still have a pointer to the context stylesheet so the patch
        doesn't actually reduce memory usage. That pointer will be factored out later.

        * css/CSSFontFaceRule.cpp:
        (WebCore::CSSFontFaceRule::~CSSFontFaceRule):
        * css/CSSFontFaceRule.h:
        (WebCore::CSSFontFaceRule::style):
        * css/CSSPageRule.cpp:
        (WebCore::CSSPageRule::~CSSPageRule):
        * css/CSSPageRule.h:
        (WebCore::CSSPageRule::style):
        (WebCore::CSSPageRule::setDeclaration):
        * css/CSSParser.cpp:
        (WebCore::CSSParser::createStyleRule):
        (WebCore::CSSParser::createFontFaceRule):
        (WebCore::CSSParser::createPageRule):
        (WebCore::CSSParser::createKeyframeRule):
        * css/CSSStyleRule.cpp:
        (WebCore::CSSStyleRule::~CSSStyleRule):
        * css/CSSStyleRule.h:
        (WebCore::CSSStyleRule::style):
        (WebCore::CSSStyleRule::setDeclaration):
        * css/StylePropertySet.cpp:
        (PropertySetCSSStyleDeclaration):
        (WebCore::PropertySetCSSStyleDeclaration::parentElement):
        (WebCore::PropertySetCSSStyleDeclaration::clearParentRule):
        (WebCore::PropertySetCSSStyleDeclaration::clearParentElement):
        (WebCore::PropertySetCSSStyleDeclaration::setNeedsStyleRecalc):
        (RuleCSSStyleDeclaration):
        (WebCore::RuleCSSStyleDeclaration::RuleCSSStyleDeclaration):
        (WebCore::RuleCSSStyleDeclaration::parentRule):
        (WebCore::RuleCSSStyleDeclaration::clearParentRule):
        (WebCore):
        (InlineCSSStyleDeclaration):
        (WebCore::InlineCSSStyleDeclaration::InlineCSSStyleDeclaration):
        (WebCore::InlineCSSStyleDeclaration::parentElement):
        (WebCore::InlineCSSStyleDeclaration::clearParentElement):
        (WebCore::StylePropertySet::StylePropertySet):
        (WebCore::StylePropertySet::removeShorthandProperty):
        (WebCore::StylePropertySet::removeProperty):
        (WebCore::StylePropertySet::setProperty):
        (WebCore::StylePropertySet::parseDeclaration):
        (WebCore::StylePropertySet::addParsedProperties):
        (WebCore::StylePropertySet::addParsedProperty):
        (WebCore::StylePropertySet::merge):
        (WebCore::StylePropertySet::removePropertiesInSet):
        (WebCore::StylePropertySet::copy):
        (WebCore::StylePropertySet::ensureCSSStyleDeclaration):
        (WebCore::StylePropertySet::ensureRuleCSSStyleDeclaration):
        (WebCore::StylePropertySet::ensureInlineCSSStyleDeclaration):
        (WebCore::StylePropertySet::clearParentRule):
        (WebCore::StylePropertySet::clearParentElement):
        (WebCore::PropertySetCSSStyleDeclaration::setCssText):
        (WebCore::PropertySetCSSStyleDeclaration::setProperty):
        (WebCore::PropertySetCSSStyleDeclaration::removeProperty):
        (WebCore::PropertySetCSSStyleDeclaration::setPropertyInternal):
        (WebCore::RuleCSSStyleDeclaration::setNeedsStyleRecalc):
        (WebCore::InlineCSSStyleDeclaration::setNeedsStyleRecalc):
        * css/StylePropertySet.h:
        (WebCore::StylePropertySet::create):
        (StylePropertySet):
        (WebCore::StylePropertySet::useStrictParsing):
        (WebCore::StylePropertySet::contextStyleSheet):
        (WebCore::StylePropertySet::setContextStyleSheet):
        * css/WebKitCSSKeyframeRule.cpp:
        (WebCore::WebKitCSSKeyframeRule::~WebKitCSSKeyframeRule):
        (WebCore::WebKitCSSKeyframeRule::setDeclaration):
        * css/WebKitCSSKeyframeRule.h:
        (WebCore::WebKitCSSKeyframeRule::style):
        * dom/ElementAttributeData.cpp:
        (WebCore::ElementAttributeData::ensureInlineStyleDecl):
        (WebCore::ElementAttributeData::destroyInlineStyleDecl):
        * dom/ElementAttributeData.h:
        (ElementAttributeData):
        * dom/StyledElement.cpp:
        (WebCore::StyledElement::insertedIntoDocument):
        (WebCore):
        (WebCore::StyledElement::removedFromDocument):
        (WebCore::StyledElement::parseAttribute):
        (WebCore::StyledElement::inlineStyleChanged):
        (WebCore::StyledElement::setInlineStyleProperty):
        (WebCore::StyledElement::removeInlineStyleProperty):
        (WebCore::StyledElement::updateAttributeStyle):
        * dom/StyledElement.h:
        (StyledElement):
        (WebCore::StyledElement::destroyInlineStyleDecl):
        * editing/ApplyStyleCommand.cpp:
        (WebCore::ApplyStyleCommand::applyRelativeFontStyleChange):
        * editing/DeleteButtonController.cpp:
        (WebCore::DeleteButtonController::createDeletionUI):
        (WebCore::DeleteButtonController::show):
        (WebCore::DeleteButtonController::hide):
        * editing/Editor.cpp:
        (WebCore::Editor::applyEditingStyleToElement):
        * editing/RemoveCSSPropertyCommand.cpp:
        (WebCore::RemoveCSSPropertyCommand::doApply):
        (WebCore::RemoveCSSPropertyCommand::doUnapply):
        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::removeRedundantStylesAndKeepStyleSpanInline):
        * html/ColorInputType.cpp:
        (WebCore::ColorInputType::updateColorSwatch):
        * html/HTMLTextFormControlElement.cpp:
        (WebCore::HTMLTextFormControlElement::updatePlaceholderVisibility):
        * html/ImageDocument.cpp:
        (WebCore::ImageDocument::resizeImageToFit):
        (WebCore::ImageDocument::restoreImageSize):
        (WebCore::ImageDocument::windowSizeChanged):
        * html/ValidationMessage.cpp:
        (WebCore::adjustBubblePosition):
        (WebCore::ValidationMessage::buildBubbleTree):
        * html/shadow/MediaControlElements.cpp:
        (WebCore::MediaControlElement::show):
        (WebCore::MediaControlElement::hide):
        (WebCore::MediaControlPanelElement::setPosition):
        (WebCore::MediaControlPanelElement::resetPosition):
        (WebCore::MediaControlPanelElement::makeOpaque):
        (WebCore::MediaControlPanelElement::makeTransparent):
        (WebCore::MediaControlInputElement::show):
        (WebCore::MediaControlInputElement::hide):
        (WebCore::MediaControlTextTrackContainerElement::updateSizes):
        * html/shadow/MeterShadowElement.cpp:
        (WebCore::MeterValueElement::setWidthPercentage):
        * html/shadow/ProgressShadowElement.cpp:
        (WebCore::ProgressValueElement::setWidthPercentage):
        * html/shadow/SliderThumbElement.cpp:
        (WebCore::TrackLimiterElement::create):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::resize):
        * rendering/RenderTextControlSingleLine.cpp:
        (WebCore::RenderTextControlSingleLine::styleDidChange):
        * svg/SVGFontFaceElement.cpp:
        (WebCore::SVGFontFaceElement::SVGFontFaceElement):
        (WebCore::SVGFontFaceElement::insertedIntoDocument):
        (WebCore::SVGFontFaceElement::removeFromMappedElementSheet):

2012-02-15  Daniel Cheng  <dcheng@chromium.org>

        dataTransfer.types (HTML5 drag & drop) should return DOMStringList
        https://bugs.webkit.org/show_bug.cgi?id=30416

        Reviewed by Eric Seidel.

        This change breaks backwards compatibility; however, since Firefox only supported
        event.dataTransfer.types.contains, sites already needed to check whether to use contains or
        indexOf. Therefore, the net compatibility effect of this change should be minimal.

        Test: fast/events/drag-dataTransfer-live-attributes.html

        * bindings/js/JSClipboardCustom.cpp:
        (WebCore):
        * bindings/v8/custom/V8ClipboardCustom.cpp:
        * dom/Clipboard.cpp:
        (WebCore::Clipboard::hasStringOfType):
        * dom/Clipboard.h:
        (WebCore):
        (Clipboard):
        * dom/Clipboard.idl:
        * platform/blackberry/ClipboardBlackBerry.cpp:
        (WebCore::ClipboardBlackBerry::types):
        * platform/blackberry/ClipboardBlackBerry.h:
        (ClipboardBlackBerry):
        * platform/chromium/ChromiumDataObject.cpp:
        (WebCore::ChromiumDataObject::types):
        * platform/chromium/ChromiumDataObject.h:
        (ChromiumDataObject):
        * platform/chromium/ClipboardChromium.cpp:
        (WebCore::ClipboardChromium::types):
        (WebCore::ClipboardChromium::mayUpdateItems):
        * platform/chromium/ClipboardChromium.h:
        (ClipboardChromium):
        * platform/chromium/DragDataChromium.cpp:
        (WebCore::containsHTML):
        (WebCore::DragData::containsURL):
        (WebCore::DragData::asURL):
        (WebCore::DragData::containsPlainText):
        (WebCore::DragData::canSmartReplace):
        (WebCore::DragData::asFragment):
        * platform/efl/ClipboardEfl.cpp:
        (WebCore::ClipboardEfl::types):
        * platform/efl/ClipboardEfl.h:
        (ClipboardEfl):
        * platform/gtk/ClipboardGtk.cpp:
        (WebCore::ClipboardGtk::types):
        * platform/gtk/ClipboardGtk.h:
        (ClipboardGtk):
        * platform/mac/ClipboardMac.h:
        (ClipboardMac):
        * platform/mac/ClipboardMac.mm:
        (WebCore::addHTMLClipboardTypesForCocoaType):
        (WebCore::ClipboardMac::types):
        * platform/qt/ClipboardQt.cpp:
        (WebCore::ClipboardQt::types):
        * platform/qt/ClipboardQt.h:
        (ClipboardQt):
        * platform/win/ClipboardWin.cpp:
        (WebCore::addMimeTypesForFormat):
        (WebCore::ClipboardWin::types):
        * platform/win/ClipboardWin.h:
        (ClipboardWin):
        * platform/wx/ClipboardWx.cpp:
        (WebCore::ClipboardWx::types):
        * platform/wx/ClipboardWx.h:
        (ClipboardWx):

2012-02-15  Bear Travis  <betravis@adobe.com>

        Repaint issues on changing 'viewBox' of inner SVG
        https://bugs.webkit.org/show_bug.cgi?id=77903

        Reviewed by Nikolas Zimmermann.

        Do not update the child viewbox/viewport transform to its parent
        coordinate system until after layout has stored the old bounds for
        repainting purposes.
        
        Test: svg/repaint/inner-svg-change-viewBox-contract.svg

        * rendering/svg/RenderSVGViewportContainer.cpp:
        (WebCore::RenderSVGViewportContainer::RenderSVGViewportContainer):
        (WebCore::RenderSVGViewportContainer::calcViewport):
        (WebCore):
        (WebCore::RenderSVGViewportContainer::calculateLocalTransform):
        (WebCore::RenderSVGViewportContainer::localToParentTransform):
        * rendering/svg/RenderSVGViewportContainer.h:
        (WebCore::RenderSVGViewportContainer::setNeedsTransformUpdate):
        (RenderSVGViewportContainer):
        * svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::svgAttributeChanged):

2012-02-15  Bear Travis  <betravis@adobe.com>

        Repaint issues on changing 'viewBox' of inner SVG
        https://bugs.webkit.org/show_bug.cgi?id=77903

        Reviewed by Nikolas Zimmermann.

        Do not update the child viewbox/viewport transform to its parent
        coordinate system until after layout has stored the old bounds for
        repainting purposes.
        
        Test: svg/repaint/inner-svg-change-viewBox-contract.svg

        * rendering/svg/RenderSVGViewportContainer.cpp:
        (WebCore::RenderSVGViewportContainer::RenderSVGViewportContainer):
        (WebCore::RenderSVGViewportContainer::calcViewport):
        (WebCore):
        (WebCore::RenderSVGViewportContainer::calculateLocalTransform):
        (WebCore::RenderSVGViewportContainer::localToParentTransform):
        * rendering/svg/RenderSVGViewportContainer.h:
        (WebCore::RenderSVGViewportContainer::setNeedsTransformUpdate):
        (RenderSVGViewportContainer):
        * svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::svgAttributeChanged):

2012-02-15  Daniel Cheng  <dcheng@chromium.org>

        dataTransfer.types (HTML5 drag & drop) should return DOMStringList
        https://bugs.webkit.org/show_bug.cgi?id=30416

        Reviewed by Eric Seidel.

        This change breaks backwards compatibility; however, since Firefox only supported
        event.dataTransfer.types.contains, sites already needed to check whether to use contains or
        indexOf. Therefore, the net compatibility effect of this change should be minimal.

        Test: fast/events/drag-dataTransfer-live-attributes.html

        * bindings/js/JSClipboardCustom.cpp:
        (WebCore):
        * bindings/v8/custom/V8ClipboardCustom.cpp:
        * dom/Clipboard.cpp:
        (WebCore::Clipboard::hasStringOfType):
        * dom/Clipboard.h:
        (WebCore):
        (Clipboard):
        * dom/Clipboard.idl:
        * platform/blackberry/ClipboardBlackBerry.cpp:
        (WebCore::ClipboardBlackBerry::types):
        * platform/blackberry/ClipboardBlackBerry.h:
        (ClipboardBlackBerry):
        * platform/chromium/ChromiumDataObject.cpp:
        (WebCore::ChromiumDataObject::types):
        * platform/chromium/ChromiumDataObject.h:
        (ChromiumDataObject):
        * platform/chromium/ClipboardChromium.cpp:
        (WebCore::ClipboardChromium::types):
        (WebCore::ClipboardChromium::mayUpdateItems):
        * platform/chromium/ClipboardChromium.h:
        (ClipboardChromium):
        * platform/chromium/DragDataChromium.cpp:
        (WebCore::containsHTML):
        (WebCore::DragData::containsURL):
        (WebCore::DragData::asURL):
        (WebCore::DragData::containsPlainText):
        (WebCore::DragData::canSmartReplace):
        (WebCore::DragData::asFragment):
        * platform/efl/ClipboardEfl.cpp:
        (WebCore::ClipboardEfl::types):
        * platform/efl/ClipboardEfl.h:
        (ClipboardEfl):
        * platform/gtk/ClipboardGtk.cpp:
        (WebCore::ClipboardGtk::types):
        * platform/gtk/ClipboardGtk.h:
        (ClipboardGtk):
        * platform/mac/ClipboardMac.h:
        (ClipboardMac):
        * platform/mac/ClipboardMac.mm:
        (WebCore::addHTMLClipboardTypesForCocoaType):
        (WebCore::ClipboardMac::types):
        * platform/qt/ClipboardQt.cpp:
        (WebCore::ClipboardQt::types):
        * platform/qt/ClipboardQt.h:
        (ClipboardQt):
        * platform/win/ClipboardWin.cpp:
        (WebCore::addMimeTypesForFormat):
        (WebCore::ClipboardWin::types):
        * platform/win/ClipboardWin.h:
        (ClipboardWin):
        * platform/wx/ClipboardWx.cpp:
        (WebCore::ClipboardWx::types):
        * platform/wx/ClipboardWx.h:
        (ClipboardWx):

2012-02-15  Bear Travis  <betravis@adobe.com>

        Repaint issues on changing 'viewBox' of inner SVG
        https://bugs.webkit.org/show_bug.cgi?id=77903

        Reviewed by Nikolas Zimmermann.

        Do not update the child viewbox/viewport transform to its parent
        coordinate system until after layout has stored the old bounds for
        repainting purposes.
        
        Test: svg/repaint/inner-svg-change-viewBox-contract.svg

        * rendering/svg/RenderSVGViewportContainer.cpp:
        (WebCore::RenderSVGViewportContainer::RenderSVGViewportContainer):
        (WebCore::RenderSVGViewportContainer::calcViewport):
        (WebCore):
        (WebCore::RenderSVGViewportContainer::calculateLocalTransform):
        (WebCore::RenderSVGViewportContainer::localToParentTransform):
        * rendering/svg/RenderSVGViewportContainer.h:
        (WebCore::RenderSVGViewportContainer::setNeedsTransformUpdate):
        (RenderSVGViewportContainer):
        * svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::svgAttributeChanged):

2012-02-15  Anders Carlsson  <andersca@apple.com>

        Fix unused parameter warnings.

        * platform/graphics/ca/mac/WebTileCacheLayer.mm:
        (-[WebTileCacheLayer setContentsScale:]):

2012-02-15  Emil A Eklund  <eae@chromium.org>

        Convert RenderFrameSet to LayoutUnits in preparation for turning on subpixel layout
        https://bugs.webkit.org/show_bug.cgi?id=78526

        Reviewed by Eric Seidel.

        Revert paintColumnBorder and paintRowBorder to IntRect and pixel snap in
        paint before calling them. This way the rounding logic is contained in a
        single place (in paint).

        No new tests, no new functionality.

        * rendering/RenderFrameSet.cpp:
        (WebCore::RenderFrameSet::paintColumnBorder):
        (WebCore::RenderFrameSet::paintRowBorder):
        (WebCore::RenderFrameSet::paint):
        (WebCore::RenderFrameSet::getCursor):
        * rendering/RenderFrameSet.h:
        (RenderFrameSet):

2012-02-15  Emil A Eklund  <eae@chromium.org> and Levi Weintraub  <leviw@chromium.org>

        Add FractionalLayoutPoint/Size/Rect for sub-pixel layout
        https://bugs.webkit.org/show_bug.cgi?id=76571

        Reviewed by Eric Seidel.

        Add fixed point versions of the Point, Size and Rect classes using
        the new FractionalLayoutPoint type and.

        FractionalLayoutPoint, FractionalLayoutSize and FractionalLayoutRect are
        Point, Size and Rect implementations respectively using this new type.

        No new tests.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * WebCore.gypi:
        * WebCore.order:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/FractionalLayoutUnit.h:
        Fixed a couple of typos and signed/unsigned bugs.

        * platform/graphics/FloatPoint.cpp:
        (WebCore::FloatPoint::FloatPoint):
        Add explicit FloatPoint(FractionalLayoutPoint) constructor.
        
        (WebCore::FloatPoint::move):
        Add move(FractionalLayoutSize) implementation.
        
        (WebCore::FloatPoint::moveBy):
        Add moveBy(FractionalLayoutPoint) implementation.

        * platform/graphics/FloatPoint.h:
        * platform/graphics/FloatRect.cpp:
        (WebCore::FloatRect::FloatRect):
        Add explicit FloatRectFractionalLayoutRect) constructor.
        
        * platform/graphics/FloatRect.h:
        (WebCore):
        (FloatRect):
        * platform/graphics/FloatSize.cpp:
        (WebCore::FloatSize::FloatSize):
        Add explicit FloatSize(FractionalLayoutSize) constructor.

        * platform/graphics/FloatSize.h:
        * platform/graphics/FractionalLayoutPoint.h: Added.
        * platform/graphics/FractionalLayoutRect.cpp: Added.
        * platform/graphics/FractionalLayoutRect.h: Added.
        * platform/graphics/FractionalLayoutSize.cpp: Added.
        * platform/graphics/FractionalLayoutSize.h: Added.
        * platform/graphics/IntRect.cpp:
        (WebCore::IntRect::IntRect):
        Add explicit IntRect(FractionalLayoutRect) constructor.

        * platform/graphics/IntRect.h:

2012-02-15  Kentaro Hara  <haraken@chromium.org>

        [Mac] PasteboardMac.mm build fails
        https://bugs.webkit.org/show_bug.cgi?id=78655

        Reviewed by Enrica Casucci.

        This patch fixes the code to make a plain text for pasted file names.
        The code should return a string of concatenated file names.

        Test: editing/pasteboard/drag-files-to-editable-element.html

        * platform/mac/PasteboardMac.mm:
        (WebCore::Pasteboard::plainText):

2012-02-15  Anders Carlsson  <andersca@apple.com>

        Another attempt at fixing the Snow Leopard build.

        * platform/graphics/ca/mac/TileCache.mm:
        (WebCore::TileCache::setContentsScale):

2012-02-15  Pablo Flouret  <pablof@motorola.com>

        Add support for the translate attribute in html elements.
        https://bugs.webkit.org/show_bug.cgi?id=78751

        Reviewed by Adam Barth.

        The translate attribute is used to specify whether an element's
        attribute values and the values of its Text node children are to be
        translated when the page is localized, or whether to leave them
        unchanged.

        Details at http://www.whatwg.org/specs/web-apps/current-work/multipage/elements.html#attr-translate

        Test: fast/dom/HTMLElement/translate.html

        * html/HTMLAttributeNames.in:
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::translateAttributeMode):
        (WebCore):
        (WebCore::HTMLElement::translate):
        (WebCore::HTMLElement::setTranslate):
        * html/HTMLElement.h:
        (HTMLElement):
        * html/HTMLElement.idl:

2012-02-15  Sami Kyostila  <skyostil@google.com>

        Add -webkit-overflow-scrolling CSS property
        https://bugs.webkit.org/show_bug.cgi?id=78664

        Reviewed by Eric Seidel.

        Add a CSS property indicating that an element with overflow scrolling
        should follow the platform's behavior for touch scrollable user
        interface objects. For instance, this property could enable momentum
        scrolling for the element if that is the platform convention.

        The property has two possible values: auto (default) and touch. The
        former does not alter overflow scrolling behavior, while the latter
        activates touch scrolling.

        As a side effect, enabling touch scrolling also causes an element to
        gain a stacking context. This is to allow the implementation to promote
        the scrolling contents into a render layer, which can be translated more
        efficiently.

        This property was introduced with iOS 5 WebKit. Another implementation
        is in Chrome for Android.

        Test: platform/chromium/compositing/overflow/overflow-scrolling-touch-stacking-context.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore):
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):
        * css/CSSProperty.cpp:
        (WebCore::CSSProperty::isInheritedProperty):
        * css/CSSPropertyNames.in:
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::adjustRenderStyle):
        (WebCore::CSSStyleSelector::applyProperty):
        * css/CSSValueKeywords.in:
        * rendering/style/RenderStyle.h:
        * rendering/style/StyleRareInheritedData.cpp:
        (WebCore::StyleRareInheritedData::StyleRareInheritedData):
        (WebCore::StyleRareInheritedData::operator==):
        * rendering/style/StyleRareInheritedData.h:
        (StyleRareInheritedData):

2012-02-15  Levi Weintraub  <leviw@chromium.org>

        Add zeroLayoutUnit constant.
        https://bugs.webkit.org/show_bug.cgi?id=78747

        Reviewed by Eric Seidel.

        Converting call sites where LayoutUnits and raw zeros are in ternary operations
        and templatized function calls (like std::max and min) to use a new zeroLayoutUnit
        constant instead of the raw zero.

        No new tests. No change in behavior.

        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::placeBoxesInBlockDirection):
        (WebCore::InlineFlowBox::addBorderOutsetVisualOverflow):
        (WebCore::InlineFlowBox::paintFillLayer):
        (WebCore::InlineFlowBox::paintBoxDecorations):
        (WebCore::InlineFlowBox::paintMask):
        (WebCore::InlineFlowBox::computeOverAnnotationAdjustment):
        * rendering/LayoutTypes.h:
        (WebCore):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::MarginInfo::MarginInfo):
        (WebCore::RenderBlock::adjustFloatingBlock):
        (WebCore::RenderBlock::paintColumnRules):
        (WebCore::RenderBlock::nextFloatLogicalBottomBelow):
        (WebCore::RenderBlock::getClearDelta):
        (WebCore::RenderBlock::computeInlinePreferredLogicalWidths):
        (WebCore::getHeightForLineCount):
        (WebCore::RenderBlock::adjustForUnsplittableChild):
        * rendering/RenderBlock.h:
        (WebCore::RenderBlock::paginationStrut):
        (WebCore::RenderBlock::pageLogicalOffset):
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::LineLayoutState::updateRepaintRangeFromBox):
        (WebCore::RenderBlock::addOverflowFromInlineChildren):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::positionForPoint):
        * rendering/RenderBox.h:
        (WebCore::RenderBox::minYVisualOverflow):
        (WebCore::RenderBox::minXVisualOverflow):
        (RenderBox):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::offsetLeft):
        (WebCore::RenderBoxModelObject::offsetTop):
        (WebCore::RenderBoxModelObject::paintFillLayerExtended):
        * rendering/RenderFieldset.cpp:
        (WebCore::RenderFieldset::paintBoxDecorations):
        * rendering/RenderFileUploadControl.cpp:
        (WebCore::nodeWidth):
        * rendering/RenderFlowThread.cpp:
        (WebCore::RenderFlowThread::layout):
        (WebCore::RenderFlowThread::computeLogicalWidth):
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::paintOutlineForLine):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::resize):
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::listIndexAtOffset):
        (WebCore::RenderListBox::verticalScrollbarWidth):
        * rendering/RenderMarquee.cpp:
        (WebCore::RenderMarquee::computePosition):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::repaintAfterLayoutIfNeeded):
        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::computePreferredLogicalWidths):
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::convertStyleLogicalWidthToComputedWidth):
        (WebCore::RenderTable::layout):
        * rendering/RenderTable.h:
        (WebCore::RenderTable::bordersPaddingAndSpacingInRowDirection):
        * rendering/mathml/RenderMathMLSubSup.cpp:
        (WebCore::RenderMathMLSubSup::layout):

2012-02-15  Alexey Proskuryakov  <ap@apple.com>

        Crash after trying to use FileReader in a document with null origin string
        https://bugs.webkit.org/show_bug.cgi?id=78649

        Reviewed by Enrica Casucci.

        Test: fast/files/null-origin-string.html

        * fileapi/FileReaderLoader.cpp: (WebCore::FileReaderLoader::~FileReaderLoader):
        HashMaps don't like empty keys, and they don't like removing keys that have never been added.

2012-02-15  Anders Carlsson  <andersca@apple.com>

        Attempt to fix the Snow Leopard build.

        * platform/graphics/ca/mac/TileCache.mm:
        (WebCore::TileCache::createTileLayer):
        * platform/graphics/ca/mac/WebTileCacheLayer.mm:
        (-[WebTileCacheLayer setContentsScale:]):

2012-02-15  Dan Bernstein  <mitz@apple.com>

        REGRESSION (r107836): fast/box-shadow/spread.html and fast/writing-mode/box-shadow-*.html tests failing
        https://bugs.webkit.org/show_bug.cgi?id=78759

        Reviewed by Simon Fraser.

        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::boxShadowCanBeAppliedToBackground): Added. Returns false if
        paintFillLayer() would push a clip before painting the layer, thus preventing it from casting
        its own shadow.
        (WebCore::InlineFlowBox::paintBoxDecorations): Pass this as an additional parameter to
        boxShadowShouldBeAppliedToBackground().
        * rendering/InlineFlowBox.h:
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paintFillLayerExtended): Pass the InlineFlowBox along to
        boxShadowShouldBeAppliedToBackground().
        (WebCore::RenderBoxModelObject::boxShadowShouldBeAppliedToBackground): Added an InlineFlowBox
        parameter. If non-0, check boxShadowCanBeAppliedToBackground(). Also check for shadow spread,
        and for the case of border radius with a background image, in which paintFillLayerExtended uses
        clipping. Finally, fixed a bug in the for() loop for finding the last background layer which
        was noticed by Tony Chang.
        * rendering/RenderBoxModelObject.h:
        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::boxShadowShouldBeAppliedToBackground):
        * rendering/RenderTableCell.h:

2012-02-15  Erik Arvidsson  <arv@chromium.org>

        Expose Window constructor
        https://bugs.webkit.org/show_bug.cgi?id=78722

        Reviewed by Adam Barth.

        Test: fast/dom/Window/window-constructor-presence.html

        * page/DOMWindow.idl:

2012-02-15  Kelly Norton  <knorton@google.com>

        fill-opacity does not render properly only on Chromium Mac.
        https://bugs.webkit.org/show_bug.cgi?id=78624

        Reviewed by Stephen White.

        Test: svg/text/text-fill-opacity.svg

        * platform/graphics/skia/FontSkia.cpp:
        (WebCore::Font::drawGlyphs):

2012-02-15  Leo Yang  <leo.yang@torchmobile.com.cn>

        [BlackBerry] Upstream WebPageClient.h
        https://bugs.webkit.org/show_bug.cgi?id=78660

        Reviewed by Antonio Gomes.

        Header inclusion fix, no new test.

        * plugins/blackberry/PluginViewPrivateBlackBerry.h:
        Add #include <BlackBerryPlatformIntRectRegion.h>
        and #include <BlackBerryPlatformGraphics.h> because they
        are being removed from WebKit/blackberry/Api/WebPageClient.h.

2012-02-15  Tim Horton  <timothy_horton@apple.com>

        REGRESSION(r105057): Dynamically changing <tspan> offsets is broken
        https://bugs.webkit.org/show_bug.cgi?id=78385
        <rdar://problem/10832932>

        Reviewed by Simon Fraser.

        Don't short-circuit buildLayoutAttributesIfNeeded if m_textPositions is already full;
        we can't skip rebuilding the layout attributes, just walking the tree to acquire the
        positioning lists (invalidation of positioning lists is already covered by textDOMChanged).

        Test: svg/text/tspan-dynamic-positioning.svg

        * rendering/svg/SVGTextLayoutAttributesBuilder.cpp:
        (WebCore::SVGTextLayoutAttributesBuilder::buildLayoutAttributesIfNeeded):

2012-02-15  Tommy Widenflycht  <tommyw@google.com>

        MediaStream API: Removing SecurityContext from the embedder API
        https://bugs.webkit.org/show_bug.cgi?id=73816

        Reviewed by Darin Fisher.

        Tests for the Media Stream API will be provided by the bug 56587, pending enough landed code.

        * mediastream/PeerConnection.cpp:
        (WebCore::PeerConnection::PeerConnection):
        * platform/mediastream/PeerConnectionHandler.h:
        (WebCore):
        (PeerConnectionHandler):
        * platform/mediastream/gstreamer/PeerConnectionHandler.cpp:
        (WebCore::PeerConnectionHandler::create):
        (WebCore::PeerConnectionHandler::PeerConnectionHandler):

2012-02-15  Nate Chapin  <japhet@chromium.org>

        Fix test regressons from r107672.
        https://bugs.webkit.org/show_bug.cgi?id=76564

        Move setting CachedRawResource::m_identifer from
        data() to setResponse(). WorkerScriptLoader depends
        on the identifier being set correctly during setResponse()
        in order to correctly mark itself as a ScriptResource in
        the inspector.

        Reviewed by Adam Barth.

        Fixes several worker script loading tests.

        * loader/cache/CachedRawResource.cpp:
        (WebCore::CachedRawResource::data):
        (WebCore::CachedRawResource::setResponse):

2012-02-15  Enrica Casucci  <enrica@apple.com>

        REGRESSION: "Copy image" fails...copies image URL instead.
        https://bugs.webkit.org/show_bug.cgi?id=78723
        <rdar://problem/10869104>

        During the refactoring of the Pasteboard class some code was lost.
        When placing an NSImage in the NSPasteboard as NSTIFFPboardType, we need
        to use the its TIFF representation.
        
        Reviewed by Andy Estes.

        * platform/mac/PasteboardMac.mm:
        (WebCore::Pasteboard::writeImage):

2012-01-31  Raphael Kubo da Costa  <kubo@profusion.mobi>

        [soup] Add support for multiple SoupSessions.
        https://bugs.webkit.org/show_bug.cgi?id=77341

        Reviewed by Gustavo Noronha Silva.

        Make the libsoup network backend support multiple SoupSessions. This is
        accomplished by using the NetworkingContext classes, which now have a
        `soupSession()' method when the libsoup backend is being used.

        libsoup's ResourceHandle implementation now retrieves the SoupSession
        via the NetworkingContext it receives instead of relying on
        defaultSession(). defaultSession() is still used when a null
        NetworkingContext is passed to ResourceHandle::start (for example, via
        webkit_download_start).

        The CookieJar implementation retrieves the SoupSession from the
        NetworkingContext as much as possible as well -- the functions used by
        WebKit2 could not be converted, though, as they seem to assume there is
        only one shared cookie jar.

        No new tests, covered by the existing ones.

        * platform/network/NetworkingContext.h:
        (NetworkingContext): Add soupSession() method if USE(SOUP) is set.
        * platform/network/ResourceHandleInternal.h:
        (ResourceHandleInternal):
        * platform/network/soup/CookieJarSoup.cpp:
        (WebCore::cookieJarForDocument):
        (WebCore):
        (WebCore::defaultCookieJar):
        (WebCore::setCookies):
        (WebCore::cookies):
        (WebCore::cookieRequestHeaderFieldValue):
        (WebCore::cookiesEnabled):
        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::ResourceHandleInternal::soupSession): Add method to retrieve
        a SoupSession from a NetworkingContext and fallback to defaultSession()
        if there's no valid NetworkingContext.
        (WebCore):
        (WebCore::ensureSessionIsInitialized): Only change or use the default
        cookie jar if the SoupSession being changed is the default one.
        (WebCore::sendRequestCallback):
        (WebCore::startHTTPRequest):
        (WebCore::ResourceHandle::cancel):
        (WebCore::startNonHTTPRequest):

2012-02-15  Anders Carlsson  <andersca@apple.com>

        The TileCache object should be deallocated on the main thread
        https://bugs.webkit.org/show_bug.cgi?id=78757
        <rdar://problem/10866161>

        Reviewed by Sam Weinig.

        Since the WebTileCacheLayer can be deleted on the scrolling thread, we need to make sure that the underlying
        TileCache object is actually destroyed on the main thread.

        * platform/graphics/ca/mac/TileCache.h:
        * platform/graphics/ca/mac/TileCache.mm:
        (WebCore::TileCache::~TileCache):
        Assert that this object is being destroyed on the main thread.

        * platform/graphics/ca/mac/WebTileCacheLayer.mm:
        (-[WebTileCacheLayer dealloc]):
        If dealloc is being called from a non-main thread, make sure to delete the tile cache object on the main thread.

2012-02-15  Anders Carlsson  <andersca@apple.com>

        Scrolling Coordinator must be deleted on the main thread
        https://bugs.webkit.org/show_bug.cgi?id=78756
        <rdar://problem/10866167>

        Reviewed by Sam Weinig.

        ScrollingTree::invalidate will finish breaking the cycle between the scrolling coordinator and the
        scrolling tree by dereffing the scrolling coordinator. We need to make sure that this happens on the main
        thread because the scrolling coordinator expects to be destroyed from there.

        * page/scrolling/ScrollingTree.cpp:
        (WebCore::derefScrollingCoordinator):
        (WebCore):
        (WebCore::ScrollingTree::invalidate):

2012-02-15  Anders Carlsson  <andersca@apple.com>

        Scrolling coordinator should handle pages being restored from the page cache
        https://bugs.webkit.org/show_bug.cgi?id=78753
        <rdar://problem/10866171>

        Reviewed by Sam Weinig.

        Replace ScrollingCoordinator::frameViewScrollLayerDidChange with a new member function,
        ScrollingCoordinator::frameViewRootLayerDidChange which is called whenever the root layer
        of the frame view changes (which happens on back/forward navigation as well).

        In this function, reset the scrolling tree state from the frame view.

        * page/scrolling/ScrollingCoordinator.cpp:
        (WebCore::scrollLayerForFrameView):
        Add a helper function.

        (WebCore::ScrollingCoordinator::frameViewRootLayerDidChange):
        Reset the entire scrolling tree state.

        (WebCore::ScrollingCoordinator::updateMainFrameScrollPositionAndScrollLayerPosition):
        Call the newly added helper function.

        * page/scrolling/ScrollingCoordinator.h:
        (ScrollingCoordinator):
        * page/scrolling/mac/ScrollingCoordinatorMac.mm:
        Remove frameViewScrollLayerDidChange.

        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::ensureRootLayer):
        Remove call to ScrollingCoordinator::frameViewScrollLayerDidChange.

        (WebCore::RenderLayerCompositor::attachRootLayer):
        Call ScrollingCoordinator::frameViewRootLayerDidChange.

2012-02-15  Enrica Casucci  <enrica@apple.com>

        Refactor ClipboardMac class to use PlatformStrategies.
        https://bugs.webkit.org/show_bug.cgi?id=78554

        Reviewed by Anders Carlsson.

        No new tests. No change in behavior.

        * WebCore.exp.in: Added new exported methods of the PlatformPasteboard class
        * editing/mac/EditorMac.mm:
        (WebCore::Editor::newGeneralClipboard): Use name based pasteboard references.
        * page/DragClient.h:
        (WebCore::DragClient::declareAndWriteDragImage): Ditto.
        * page/mac/EventHandlerMac.mm:
        (WebCore::EventHandler::createDraggingClipboard): Ditto.
        * platform/PasteboardStrategy.h: Added new methods to get a unique pasteboard name
        and the pasteboard change count.
        * platform/PlatformPasteboard.h: Ditto.
        * platform/mac/ClipboardMac.h:
        (WebCore::ClipboardMac::create): Using name based pasteboard.
        (WebCore::ClipboardMac::pasteboardName): Replacing the old pasteboard() method.
        * platform/mac/ClipboardMac.mm: All the methods below have been modified to avoid
        using Objective-C types and direct access to NSPasteboard object.
        (WebCore::Clipboard::create):
        (WebCore::ClipboardMac::ClipboardMac):
        (WebCore::ClipboardMac::hasData):
        (WebCore::cocoaTypeFromHTMLClipboardType):
        (WebCore::utiTypeFromCocoaType):
        (WebCore::addHTMLClipboardTypesForCocoaType):
        (WebCore::ClipboardMac::clearData):
        (WebCore::ClipboardMac::clearAllData):
        (WebCore::absoluteURLsFromPasteboardFilenames):
        (WebCore::absoluteURLsFromPasteboard):
        (WebCore::ClipboardMac::getData):
        (WebCore::ClipboardMac::setData):
        (WebCore::ClipboardMac::types):
        (WebCore::ClipboardMac::files):
        (WebCore::ClipboardMac::setDragImage):
        (WebCore::ClipboardMac::writeRange):
        (WebCore::ClipboardMac::writePlainText):
        (WebCore::ClipboardMac::writeURL):
        (WebCore::ClipboardMac::declareAndWriteDragImage):
        * platform/mac/PasteboardMac.mm:
        (WebCore::Pasteboard::writeClipboard): Using name based pasteboard reference.
        * platform/mac/PlatformPasteboardMac.mm:
        (WebCore::PlatformPasteboard::getPathnamesForType): Fixed to support NSArray and NString content.
        (WebCore::PlatformPasteboard::changeCount): Added.
        (WebCore::PlatformPasteboard::uniqueName): Added.

2012-02-15  Anders Carlsson  <andersca@apple.com>

        TileCache needs to support setting the contents scale
        https://bugs.webkit.org/show_bug.cgi?id=78741
        <rdar://problem/10710773>

        Reviewed by Sam Weinig.

        * platform/graphics/ca/mac/TileCache.h:
        * platform/graphics/ca/mac/TileCache.mm:
        (WebCore::TileCache::setContentsScale):
        Update the contents scale of all the tiles and then revalidate the tile cache since tiles
        might have come and gone as a result of setting the contents scale.
        
        (WebCore::TileCache::createTileLayer):
        Set the contents scale of the tile layer.

        * platform/graphics/ca/mac/WebTileCacheLayer.mm:
        (-[WebTileCacheLayer setContentsScale:]):
        Call TileCache::setContentsScale.

2012-02-15  Anders Carlsson  <andersca@apple.com>

        Try to fix the Chromium build and remove a snarky comment in the process.

        * platform/chromium/PopupListBox.cpp:
        (WebCore::PopupListBox::handleWheelEvent):

2012-02-15  Anders Carlsson  <andersca@apple.com>

        Wheel events should be re-dispatched to the scrolling thread
        https://bugs.webkit.org/show_bug.cgi?id=78731
        <rdar://problem/10866144>

        Reviewed by Sam Weinig.

        When threaded scrolling is enabled, all the state is assumed to be kept in the scrolling tree,
        on the scrolling thread. This means that even if we do end up processing an event on the main thread
        (because of wheel event handlers for example), we still have to dispatch the wheel event back to the
        scrolling thread.

        * page/FrameView.cpp:
        (WebCore::FrameView::wheelEvent):
        Move wheelEvent from ScrollView and ask the scrolling coordinator to handle the wheel event.

        * page/scrolling/ScrollingCoordinator.cpp:
        (WebCore::ScrollingCoordinator::handleWheelEvent):
        Dispatch the event to the scrolling thread, unless it will start a gesture. In that case we'll return false
        so that information will be passed back to the UI process.
        
        (ScrollingCoordinator):
        * platform/ScrollView.cpp:
        * platform/ScrollView.h:
        Move wheelEvent to FrameView.

2012-02-15  Mark Hahnenberg  <mhahnenberg@apple.com>

        RootObject::finalize can cause a crash in object->invalidate()
        https://bugs.webkit.org/show_bug.cgi?id=78645

        Reviewed by Geoffrey Garen.

        No new tests.

        * bridge/runtime_root.cpp:
        (JSC::Bindings::RootObject::finalize): Added a stack-allocated RefPtr to protect the RootObject
        during the call to invalidate().

2012-02-15  Dan Bernstein  <mitz@apple.com>

        <rdar://problem/10870238> Box shadow drawing takes an unnecessarily slow code path in some single-shadow, opaque-background cases
        https://bugs.webkit.org/show_bug.cgi?id=78728

        In some cases, when there is only one normal box shadow, and the box has an opaque background,
        it is possible to draw the box shadow by having the background cast it directly. This appears
        to be faster than the generic code path that uses a separate drawing pass to cast the shadow,
        clipping out the border box and the shadow-casting box.

        Reviewed by Dave Hyatt.

        No new tests, because behavior is unchanged.

        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::paintBoxDecorations): Changed to not paint normal box shadows if
        they are going to be cast by the background.
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::paintBoxDecorations): Ditto.
        * rendering/RenderBox.h: Made determineBackgroundBleedAvoidance() protected.
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::applyBoxShadowForBackground): Added this helper function, which applies the first
        normal shadow from the given RenderStyle to the given GraphicsContext.
        (WebCore::RenderBoxModelObject::paintFillLayerExtended): Added calls to
        applyBoxShadowForBackground() before drawing the background color when needed.
        (WebCore::RenderBoxModelObject::boxShadowShouldBeAppliedToBackground): Added. Returns true
        in some of the cases where the box shadow can be cast by the background directly.
        * rendering/RenderBoxModelObject.h:
        * rendering/RenderFieldset.cpp:
        (WebCore::RenderFieldset::paintBoxDecorations): Changed to not paint normal box shadows if
        they are going to be cast by the background.
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::paintBoxDecorations): Ditto.
        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::boxShadowShouldBeAppliedToBackground): Added this override that
        always returns false, because table cells sometimes apply a clip before drawing the background.
        * rendering/RenderTableCell.h:

2012-02-15  Ojan Vafai  <ojan@chromium.org>

        getComputedStyle of flex-item-align:auto should resolve to it's parent's flex-align value
        https://bugs.webkit.org/show_bug.cgi?id=76326

        Reviewed by Tony Chang.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):

2012-02-15  Sadrul Habib Chowdhury  <sadrul@chromium.org>

        Notify ChromeClient when touch-event handlers are installed/removed.
        https://bugs.webkit.org/show_bug.cgi?id=77440

        Reviewed by Darin Fisher and Ryosuke Niwa.

        Keep a count of the number of touch-event handlers and notify the
        embedder when the count changes. Depending on the count, the embedder
        can decide whether or not to dispatch touch events to webkit.

        * dom/Document.cpp:
        (WebCore::Document::Document):
        (WebCore::Document::didAddTouchEventHandler):
        (WebCore):
        (WebCore::Document::didRemoveTouchEventHandler):
        * dom/Document.h:
        (WebCore::Document::touchEventHandlerCount):
        (Document):
        * dom/Node.cpp:
        (WebCore::isTouchEventType):
        (WebCore::tryAddEventListener):
        (WebCore::tryRemoveEventListener):
        * loader/EmptyClients.h:
        (WebCore::EmptyChromeClient::numTouchEventHandlersChanged):
        * page/ChromeClient.h:
        (ChromeClient):
        * page/Frame.cpp:
        (WebCore::Frame::notifyChromeClientWheelEventHandlerCountChanged):
        (WebCore::Frame::notifyChromeClientTouchEventHandlerCountChanged):
        (WebCore):
        * page/Frame.h:
        (Frame):

2012-02-15  Eric Carlson  <eric.carlson@apple.com>

        Unset the active flag when TextTrackCues go away
        https://bugs.webkit.org/show_bug.cgi?id=72552

        Reviewed by Maciej Stachowiak.

        Test: media/track/track-active-cues.html

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::loadTimerFired): Configure new text tracks before preparing to load
            so we know about all tracks when resource selection begins.
        (WebCore::HTMLMediaElement::prepareForLoad): Call updateActiveTextTrackCues after setting
            to m_readyState is HAVE_NOTHING so all cues get deactivated. Don't build list of 
            available text tracks because resource selection won't actually start until after the load timer fires.
        (WebCore::HTMLMediaElement::loadInternal): Build list of non-disabled tracks.
        (WebCore::HTMLMediaElement::updateActiveTextTrackCues):  Clear the active flag on all cues
            when m_readyState is HAVE_NOTHING or m_player is 0.
        (WebCore::HTMLMediaElement::setReadyState): Don't update m_readyState when tracks which haven't
            loaded yet will prevent events from firing. Call updateActiveTextTrackCues to ensure that the
            first cue(s) are shown as soon as possible.
        (WebCore::HTMLMediaElement::userCancelledLoad): Call updateActiveTextTrackCues when when m_readyState 
            is HAVE_NOTHING so all cues get deactivated.

2012-02-15  Jessie Berlin  <jberlin@apple.com>

        WebCore build exceeds address space on 32-bit Windows builders (again).
        https://bugs.webkit.org/show_bug.cgi?id=78724

        Reviewed by Jon Honeycutt.

        Add the rest of the inspector .cpp files to the InspectorAllInOne.cpp file in Production and
        Release builds.

        * WebCore.vcproj/WebCore.vcproj:
        In the process, let VS have its way with this file.

        * inspector/InspectorAllInOne.cpp:

2012-02-15  Anders Carlsson  <andersca@apple.com>

        Remove ScrollableArea::handleGestureEvent
        https://bugs.webkit.org/show_bug.cgi?id=78661

        Reviewed by Adam Roben.

        ScrollableArea::handleGestureEvent ends up being a no-op so remove it and the related code.

        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleGestureEvent):
        * platform/ScrollAnimator.cpp:
        * platform/ScrollAnimator.h:
        (ScrollAnimator):
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::wheelEvent):
        * platform/ScrollView.h:
        (ScrollView):
        * platform/ScrollableArea.cpp:
        * platform/ScrollableArea.h:
        (ScrollableArea):

2012-02-14  Stephen White  <senorblanco@chromium.org>

        Fix for incorrect/offset image in CSS filters (non-composited path)
        https://bugs.webkit.org/show_bug.cgi?id=78626

        Reviewed by Darin Adler.

        Test: css3/filters/multiple-filters-invalidation.html

        * rendering/FilterEffectRenderer.cpp:
        (WebCore::FilterEffectRenderer::prepare):
        When invalidating results, invalidate all intermediate filter
        results, not just the last effect's result.

2012-02-15  Alexander Pavlov  <apavlov@chromium.org>

        Web Inspector: "Minus" (Delete) button disappears for hovered watch expression in Watches pane
        https://bugs.webkit.org/show_bug.cgi?id=78714

        Reviewed by Pavel Feldman.

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

2012-02-15  Patrick Gansterer  <paroga@webkit.org>

        [CMake] Move RunLoop to WebCore/platform
        https://bugs.webkit.org/show_bug.cgi?id=78504

        Reviewed by Adam Roben.

        r105475 moved RunLoop.cpp from WebKit2 to WebCore, but missed the CMake based ports.

        * CMakeLists.txt:
        * PlatformWinCE.cmake:

2012-02-15  Zoltan Herczeg  <zherczeg@webkit.org>

        Remove clipToImageBuffer from SourceAlpha and feComposite
        https://bugs.webkit.org/show_bug.cgi?id=78355

        Reviewed by Nikolas Zimmermann.

        The implementation of clipToImageBuffer is inefficient on
        non-mac platforms, so we would benefit if remove it.

        Existing tests cover this feature.

        * platform/graphics/filters/FEComposite.cpp:
        (WebCore::FEComposite::platformApplySoftware):
        * platform/graphics/filters/SourceAlpha.cpp:
        (WebCore::SourceAlpha::platformApplySoftware):

2012-02-15  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] Replace use of QGLWidget/QGLContext with QOpenGLContext and QSurface for Qt 5
        https://bugs.webkit.org/show_bug.cgi?id=78694

        Reviewed by Noam Rosenthal.

        Typedef PlatformGraphicsContext3D and PlatformGraphicsSurface3D to QOpenGLContext
        and QSurface for Qt 5. Use these APIs to change the current context and get the
        procedure addresses. Removed QGraphicsObject inheritance remainder while we're at it,
        because that code path is obsolete.

        * platform/graphics/GraphicsContext3D.h:
        * platform/graphics/cairo/OpenGLShims.cpp:
        (WebCore::getProcAddress):
        * platform/graphics/cairo/OpenGLShims.h:
        * platform/graphics/qt/GraphicsContext3DQt.cpp:
        (WebCore::GraphicsContext3DPrivate::~GraphicsContext3DPrivate):
        (WebCore::GraphicsContext3DPrivate::blitMultisampleFramebufferAndRestoreContext):
        (WebCore::GraphicsContext3DPrivate::makeCurrentIfNeeded):
        (WebCore::GraphicsContext3D::~GraphicsContext3D):

2012-02-15  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] Move Qt platform specific GL Context/Surface creation out of WebCore into WebKit
        https://bugs.webkit.org/show_bug.cgi?id=78692

        Reviewed by Noam Rosenthal.

        Replace the "glWidget" term in the GraphicsContext with "surface" and delegate
        the context and surface creation to the page client.

        * platform/graphics/GraphicsContext3D.h:
        * platform/graphics/qt/GraphicsContext3DQt.cpp:
        (GraphicsContext3DPrivate):
        (WebCore::GraphicsContext3DPrivate::GraphicsContext3DPrivate):
        (WebCore::GraphicsContext3DPrivate::~GraphicsContext3DPrivate):
        (WebCore::GraphicsContext3DPrivate::blitMultisampleFramebufferAndRestoreContext):
        (WebCore::GraphicsContext3DPrivate::makeCurrentIfNeeded):
        (WebCore::GraphicsContext3D::GraphicsContext3D):
        (WebCore::GraphicsContext3D::~GraphicsContext3D):
        (WebCore::GraphicsContext3D::platformGraphicsContext3D):
        * platform/qt/QWebPageClient.h:
        (QWebPageClient):

2012-02-15  No'am Rosenthal  <noam.rosenthal@nokia.com>

        [Texmap] Support filters in TextureMapperImageBuffer
        https://bugs.webkit.org/show_bug.cgi?id=76026

        Implement GraphicsLayer::setFilters for TextureMapper, and pass the filters all the way
        to BitmapTextureImageBuffer. This does not introduce a new filters implementation, but
        rather uses the non-AC implementation. A complete implementation will be needed in
        TextureMapperGL, which can use some of the glue in this code.

        Reviewed by Kenneth Rohde Christiansen.

        Unskipped 10 tests in css3/filters.

        * platform/graphics/texmap/GraphicsLayerTextureMapper.cpp:
        (WebCore):
        (WebCore::GraphicsLayerTextureMapper::setFilters):
        * platform/graphics/texmap/GraphicsLayerTextureMapper.h:
        (GraphicsLayerTextureMapper):
        * platform/graphics/texmap/TextureMapper.h:
        (BitmapTexture):
        (WebCore::BitmapTexture::applyFilters):
        * platform/graphics/texmap/TextureMapperImageBuffer.cpp:
        (WebCore):
        (WebCore::BitmapTextureImageBuffer::applyFilters):
        * platform/graphics/texmap/TextureMapperImageBuffer.h:
        (BitmapTextureImageBuffer):
        * platform/graphics/texmap/TextureMapperLayer.cpp:
        (WebCore::TextureMapperLayer::shouldPaintToIntermediateSurface):
        (WebCore):
        (WebCore::applyFilters):
        (WebCore::TextureMapperLayer::paintRecursive):
        (WebCore::TextureMapperLayer::syncCompositingStateSelf):
        * platform/graphics/texmap/TextureMapperLayer.h:
        (State):

2012-02-15  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] Clean up fallback rendering of GraphicsContext3D to Canvas
        https://bugs.webkit.org/show_bug.cgi?id=78690

        Reviewed by Noam Rosenthal.

        Use the common paintRenderingResultsToCanvas code to retrieve the
        pixels from the FBO and use a Qt port specific paintToCanvas
        implementation to wrap the pixels into a QImage and render it
        into the graphics context, just like it's done for the other ports.

        This removes the QGraphicsObject based paint, which is an now 
        obsolete method of rendering.

        * platform/graphics/GraphicsContext3D.h:
        * platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:
        (WebCore::GraphicsContext3D::paintRenderingResultsToCanvas):
        * platform/graphics/qt/GraphicsContext3DQt.cpp:
        (GraphicsContext3DPrivate):
        (WebCore::GraphicsContext3D::paintToCanvas):

2012-02-14  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] Eliminate first set of QtWidgets dependencies from WebCore
        https://bugs.webkit.org/show_bug.cgi?id=78611

        Reviewed by Kenneth Rohde Christiansen.

        * bindings/js/ScriptControllerQt.cpp: Remove unused include.
        * page/qt/EventHandlerQt.cpp:
        (WebCore::EventHandler::tabsToAllFormControls): Replace import
        of private Qt(Widgets) variable with the default of Qt 5, where
        it is also not configurable.
        * platform/ContextMenu.h: Remove unused include.
        * platform/ContextMenuItem.h: Ditto.
        * platform/Widget.h: Use QObject as type for PlatformWidget
        instead of QWidget.
        * platform/graphics/Icon.h:
        (Icon): Prefer QImage over QIcon for storage.
        * platform/graphics/gstreamer/PlatformVideoWindowPrivate.h:
        (WebCore): Make it compile with QWindow for Qt 5 and QWidget for Qt 4.
        * platform/graphics/gstreamer/PlatformVideoWindowQt.cpp:
        (FullScreenVideoWindow::FullScreenVideoWindow):
        (FullScreenVideoWindow::keyPressEvent):
        (FullScreenVideoWindow::event):
        (FullScreenVideoWindow::showFullScreen):
        (PlatformVideoWindow::PlatformVideoWindow):
        * platform/graphics/qt/IconQt.cpp: Revert the implementation of this class
        back to notImplemented(). It was trying to load the actual file as QIcon
        instead of trying to find a symbolic icon for the given file. We should
        probably use the QMimeType API in Qt 5 once it becomes available.
        (WebCore::Icon::createIconForFiles):
        (WebCore::Icon::paint):
        * platform/graphics/qt/ImageQt.cpp:
        (graphics): Remove use of QStyle for retrieving icons. Code moved to
        WebCoreSupport instead.
        * platform/qt/ContextMenuQt.cpp: Removed unused include.
        * platform/qt/PlatformScreenQt.cpp: Add #ifdefs to use QScreen API
        with Qt 5.
        (WebCore::screenDepth):
        (WebCore::screenDepthPerComponent):
        (WebCore::screenIsMonochrome):
        (WebCore::screenRect):
        (WebCore::screenAvailableRect):
        * platform/qt/QWebPageClient.h: Add hook for showing/hiding widget.
        (WebCore):
        (QWebPageClient):
        * platform/qt/SoundQt.cpp:
        (WebCore::systemBeep): Beep is not implemented in Qt 5 and its use is
        questionable. Move back to notImplemented() until proper QPA API becomes
        available in Qt 5 (if ever...).
        * platform/qt/WidgetQt.cpp: Delegate QWidget specific show/hide calls
        to the PageClient, out of WebCore.
        (WebCore::Widget::Widget):
        (WebCore::Widget::show):
        (WebCore::Widget::hide):
        * plugins/PluginView.h: Remove unused include.
        * rendering/RenderTreeAsText.cpp:
        (WebCore::RenderTreeAsText::writeRenderObject): When dumping properties of
        QWidget, use the QObject property API to retrieve the values instead of
        QWidget specific API. Removed the mask from the dump as it's not available
        as property and our layout tests don't seem to use it.

2012-02-15  Alexander Pavlov  <apavlov@chromium.org>

        Web Inspector: Fix minor design issues in the Spectrum color picker
        https://bugs.webkit.org/show_bug.cgi?id=78693

        Drive-by: frontend compilability fixes.

        Reviewed by Pavel Feldman.

        * English.lproj/localizedStrings.js:
        * inspector/compile-front-end.sh:
        * inspector/front-end/ElementsPanel.js:
        * inspector/front-end/Popover.js:
        * inspector/front-end/Spectrum.js:
        (WebInspector.Spectrum.rgbaToHSVA):
        (WebInspector.Spectrum.prototype.set color):
        (WebInspector.Spectrum.prototype.get isVisible):
        (WebInspector.Spectrum.prototype.toggle):
        (WebInspector.Spectrum.prototype.show):
        (WebInspector.Spectrum.prototype.hide):
        * inspector/front-end/StylesSidebarPane.js:
        (WebInspector.StylePropertyTreeElement.prototype.updateTitle.):
        * inspector/front-end/elementsPanel.css:
        (.spectrum-container):
        (.spectrum-top):
        (.spectrum-color):
        (.spectrum-hue):
        (.spectrum-fill):
        (.spectrum-range-container):
        (.spectrum-range-container *):
        (.spectrum-range-container label):
        (.spectrum-range-container input):
        (.swatch, .spectrum-dragger, .spectrum-slider):
        (.spectrum-sat):
        (.spectrum-val):
        (.spectrum-dragger):
        (.spectrum-slider):
        * inspector/front-end/inspector.css:
        (.custom-popup-vertical-scroll ::-webkit-scrollbar-track-piece:vertical:increment):

2012-02-15  Yury Semikhatsky  <yurys@chromium.org>

        Unreviewed. Build fix after r107806

        * inspector/InjectedScript.cpp:
        (WebCore::InjectedScript::callFunctionWithEvalEnabled):
        * inspector/InjectedScript.h:
        (InjectedScript):

2012-02-15  Yury Semikhatsky  <yurys@chromium.org>

        Web Inspector: crash when inspecting an element on a page with eval disabled by CSP
        https://bugs.webkit.org/show_bug.cgi?id=78705

        Inspector functions in injected script may use eval so we need to make sure
        it is allowed for inspector code on pages where it is prohibited by CSP.

        Reviewed by Pavel Feldman.

        Test: inspector/elements/resolve-node-blocked.html

        * inspector/InjectedScript.cpp:
        (WebCore::InjectedScript::nodeForObjectId):
        (WebCore::InjectedScript::wrapCallFrames):
        (WebCore::InjectedScript::wrapObject):
        (WebCore::InjectedScript::releaseObjectGroup):
        (WebCore::InjectedScript::callFunctionWithEvalEnabled):
        (WebCore):
        (WebCore::InjectedScript::makeCall):
        * inspector/InjectedScript.h:
        (InjectedScript):

2012-02-13  Brian Grinstead  <briangrinstead@gmail.com>

        Web Inspector: Add colorpicker functionality to color swatches in Styles Sidebar
        https://bugs.webkit.org/show_bug.cgi?id=71262

        Reviewed by Pavel Feldman.

        * English.lproj/localizedStrings.js:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * inspector/front-end/Settings.js:
        * inspector/front-end/Spectrum.js: Added.
        (WebInspector.Spectrum.hueDrag):
        (WebInspector.Spectrum.colorDrag):
        (WebInspector.Spectrum.alphaDrag):
        (WebInspector.Spectrum):
        (WebInspector.Spectrum.hsvaToRGBA):
        (WebInspector.Spectrum.rgbaToHSVA):
        (WebInspector.Spectrum.draggable.prevent):
        (WebInspector.Spectrum.draggable.move):
        (WebInspector.Spectrum.draggable.start):
        (WebInspector.Spectrum.draggable.stop):
        (WebInspector.Spectrum.draggable):
        (WebInspector.Spectrum.prototype.set color):
        (WebInspector.Spectrum.prototype.get color):
        (WebInspector.Spectrum.prototype.get outputColorFormat):
        (WebInspector.Spectrum.prototype.get colorHueOnly):
        (WebInspector.Spectrum.prototype.set displayText):
        (WebInspector.Spectrum.prototype._onchange):
        (WebInspector.Spectrum.prototype._updateHelperLocations):
        (WebInspector.Spectrum.prototype._updateUI):
        (WebInspector.Spectrum.prototype.toggle):
        (WebInspector.Spectrum.prototype.show):
        (WebInspector.Spectrum.prototype.reposition):
        (WebInspector.Spectrum.prototype.hide):
        * inspector/front-end/StylesSidebarPane.js:
        (WebInspector.StylesSidebarPane):
        (WebInspector.StylePropertyTreeElement.prototype.updateTitle.):
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/inspector.css:
        (.swatch):
        (.swatch-inner):
        (.spectrum-container):
        (.spectrum-top):
        (.spectrum-color):
        (.spectrum-hue):
        (.spectrum-fill):
        (.spectrum-range-container):
        (.spectrum-range-container *):
        (.spectrum-range-container label):
        (.spectrum-range-container input):
        (.swatch, .spectrum-dragger, .spectrum-slider):
        (.spectrum-sat):
        (.spectrum-val):
        (.spectrum-dragger):
        (.spectrum-slider):
        * inspector/front-end/inspector.html:

2012-02-15  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        [Qt] Be smarter with tile usages during tiling
        https://bugs.webkit.org/show_bug.cgi?id=78243

        Reviewed by Simon Hausmann.

        The keep rect used to know what existing tiles to keep around, is now a
        padding (in tile dimensions) around the usual cover rect. With usual,
        I mean to point out that we take our panning optimization into account.

        We also do a good effort at keeping the amount of tiles steady, by not
        simply intersecting our areas with the contentRect, but moving it
        first into legal bounds and then expanding in opposite direction to
        cover a similar amount of pixels.

        In the future the cover area should be calculated given available
        system memory.

        * platform/graphics/TiledBackingStore.cpp:
        (WebCore):
        (WebCore::TiledBackingStore::TiledBackingStore):
        (WebCore::TiledBackingStore::createTiles):
        (WebCore::TiledBackingStore::adjustForContentsRect):
        (WebCore::TiledBackingStore::computeCoverAndKeepRect):
        (WebCore::TiledBackingStore::tileRectForCoordinate):
        * platform/graphics/TiledBackingStore.h:
        (TiledBackingStore):

2012-02-13  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: [InspectorIndexedDB] Pass data entries from object stores and indexes to front-end.
        https://bugs.webkit.org/show_bug.cgi?id=78503

        Reviewed by Yury Semikhatsky.

        Test: http/tests/inspector/indexeddb/database-data.html

        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::SerializedScriptValue::deserializeForInspector):
        (WebCore):
        * bindings/js/SerializedScriptValue.h:
        (SerializedScriptValue):
        * bindings/v8/SerializedScriptValue.cpp:
        (WebCore::SerializedScriptValue::deserializeForInspector):
        (WebCore):
        * bindings/v8/SerializedScriptValue.h:
        (SerializedScriptValue):
        * inspector/InjectedScript.cpp:
        (WebCore::InjectedScript::wrapObject):
        (WebCore::InjectedScript::wrapSerializedObject):
        (WebCore):
        (WebCore::InjectedScript::canAccessInspectedWindow):
        * inspector/InjectedScript.h:
        (InjectedScript):
        * inspector/Inspector.json:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        * inspector/InspectorIndexedDBAgent.cpp:
        (WebCore):
        (WebCore::InspectorIndexedDBAgent::InspectorIndexedDBAgent):
        (WebCore::assertFrame):
        (WebCore::assertDocument):
        (WebCore::InspectorIndexedDBAgent::requestData):
        * inspector/InspectorIndexedDBAgent.h:
        (WebCore):
        (WebCore::InspectorIndexedDBAgent::create):
        (InspectorIndexedDBAgent):
        * inspector/front-end/IndexedDBModel.js:
        (WebInspector.IndexedDBModel.idbKeyFromKey):
        (WebInspector.IndexedDBModel.keyFromIDBKey):
        (WebInspector.IndexedDBModel.keyRangeFromIDBKeyRange):
        (WebInspector.IndexedDBModel.prototype._loadDatabase):
        (WebInspector.IndexedDBModel.prototype.loadObjectStoreData):
        (WebInspector.IndexedDBModel.prototype.loadIndexData):
        (WebInspector.IndexedDBModel.Entry):
        (WebInspector.IndexedDBRequestManager):
        (WebInspector.IndexedDBRequestManager.prototype._requestData.innerCallback):
        (WebInspector.IndexedDBRequestManager.prototype._requestData):
        (WebInspector.IndexedDBRequestManager.prototype.requestObjectStoreData):
        (WebInspector.IndexedDBRequestManager.prototype._objectStoreDataLoaded):
        (WebInspector.IndexedDBRequestManager.prototype.requestIndexData):
        (WebInspector.IndexedDBRequestManager.prototype._indexDataLoaded):
        (WebInspector.IndexedDBRequestManager.prototype._frameDetached):
        (WebInspector.IndexedDBRequestManager.prototype._databaseRemoved):
        (WebInspector.IndexedDBRequestManager.prototype._reset):
        (WebInspector.IndexedDBRequestManager.DataRequest):
        (WebInspector.IndexedDBDispatcher.prototype.databaseLoaded):
        (WebInspector.IndexedDBDispatcher.prototype.objectStoreDataLoaded):
        (WebInspector.IndexedDBDispatcher.prototype.indexDataLoaded):

2012-02-15  Hajime Morrita  <morrita@chromium.org>

        REGRESSION(r107518): DeviceOrientationController doesn't remove registered DOMWindows
        https://bugs.webkit.org/show_bug.cgi?id=78683

        Reviewed by Kentaro Hara.
        
        A copy-n-paste disaster. This change fixed it by calling correct methods.

        No new tests. Needs browser side mocking for testing this.
        A Chromium automated test covers this.

        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::removeAllEventListeners):
        * page/Page.cpp:
        (WebCore::Page::provideSupplement):
        (WebCore::Page::requireSupplement):
        * page/Page.h: Fix typo.
        (Page):

2012-02-15  Roland Steiner  <rolandsteiner@chromium.org>

        Unreviewed, quick build fix for 107792

        * inspector/DOMEditor.cpp:
        (WebCore::DOMEditor::RemoveAttributeAction::redo):

2012-02-15  Tony Gentilcore  <tonyg@chromium.org>

        [chromium] Don't use increased FontCache size on Android
        https://bugs.webkit.org/show_bug.cgi?id=78656

        Reviewed by Adam Barth.

        The chromium port uses a larger font cache size because it increases
        performance on the intl1 and intl2 page cyclers. However, on Android
        devices where resources are more constrained, it isn't desireable to
        allow the FontCache to grow so big.

        No new tests because no testable difference in functionality.

        * platform/graphics/FontCache.cpp:
        (WebCore):

2012-02-15  Roland Steiner  <rolandsteiner@chromium.org>

        <style scoped>: Allow <style scoped> as a direct child of a ShadowRoot
        https://bugs.webkit.org/show_bug.cgi?id=77853

        Moved registration code from Element to Node. updated Internals and build files accordingly.
        Moved registration data members from ElementRareData to NodeRareData.
        Forward willRemove() from host element into shadow DOM tree.

        Reviewed by Dimitri Glazkov.

        Test: fast/css/style-scoped/registering-shadowroot.html

        * WebCore.exp.in:
        * dom/Element.cpp:
        (WebCore::Element::willRemove):
        * dom/Element.h:
        (Element):
        * dom/ElementRareData.h:
        (ElementRareData):
        (WebCore::ElementRareData::ElementRareData):
        * dom/Node.cpp:
        (WebCore):
        (WebCore::Node::hasScopedHTMLStyleChild):
        (WebCore::Node::numberOfScopedHTMLStyleChildren):
        (WebCore::Node::registerScopedHTMLStyleChild):
        (WebCore::Node::unregisterScopedHTMLStyleChild):
        * dom/Node.h:
        (Node):
        * dom/NodeRareData.h:
        (WebCore::NodeRareData::NodeRareData):
        (NodeRareData):
        (WebCore::NodeRareData::registerScopedHTMLStyleChild):
        (WebCore::NodeRareData::unregisterScopedHTMLStyleChild):
        (WebCore::NodeRareData::hasScopedHTMLStyleChild):
        (WebCore::NodeRareData::numberOfScopedHTMLStyleChildren):
        * dom/ShadowRootList.cpp:
        (WebCore::ShadowRootList::willRemove):
        (WebCore):
        * dom/ShadowRootList.h:
        (ShadowRootList):
        * html/HTMLStyleElement.cpp:
        (WebCore::HTMLStyleElement::registerWithScopingNode):
        (WebCore::HTMLStyleElement::unregisterWithScopingNode):
        * testing/Internals.cpp:
        (WebCore::Internals::numberOfScopedHTMLStyleChildren):
        * testing/Internals.h:
        (Internals):
        * testing/Internals.idl:

2012-02-14  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: implement redo for DOM actions.
        https://bugs.webkit.org/show_bug.cgi?id=78601

        Reviewed by Yury Semikhatsky.

        * inspector/DOMEditor.cpp:
        (WebCore::DOMEditor::RemoveChildAction::perform):
        (WebCore::DOMEditor::RemoveChildAction::redo):
        (DOMEditor::RemoveChildAction):
        (WebCore::DOMEditor::InsertBeforeAction::redo):
        (DOMEditor::InsertBeforeAction):
        (WebCore::DOMEditor::RemoveAttributeAction::perform):
        (WebCore::DOMEditor::RemoveAttributeAction::redo):
        (DOMEditor::RemoveAttributeAction):
        (WebCore::DOMEditor::SetAttributeAction::perform):
        (WebCore::DOMEditor::SetAttributeAction::redo):
        (DOMEditor::SetAttributeAction):
        (WebCore::DOMEditor::SetOuterHTMLAction::redo):
        (DOMEditor::SetOuterHTMLAction):
        (WebCore::DOMEditor::ReplaceWholeTextAction::perform):
        (WebCore::DOMEditor::ReplaceWholeTextAction::redo):
        (DOMEditor::ReplaceWholeTextAction):
        (WebCore::DOMEditor::ReplaceChildNodeAction::perform):
        (WebCore::DOMEditor::ReplaceChildNodeAction::redo):
        (DOMEditor::ReplaceChildNodeAction):
        (WebCore::DOMEditor::SetNodeValueAction::perform):
        (WebCore::DOMEditor::SetNodeValueAction::redo):
        (DOMEditor::SetNodeValueAction):
        * inspector/Inspector.json:
        * inspector/InspectorCSSAgent.cpp:
        (WebCore::InspectorCSSAgent::SetStyleSheetTextAction::perform):
        (WebCore::InspectorCSSAgent::SetStyleSheetTextAction::undo):
        (WebCore::InspectorCSSAgent::SetStyleSheetTextAction::redo):
        (WebCore::InspectorCSSAgent::SetPropertyTextAction::perform):
        (InspectorCSSAgent::SetPropertyTextAction):
        (WebCore::InspectorCSSAgent::SetPropertyTextAction::undo):
        (WebCore::InspectorCSSAgent::SetPropertyTextAction::redo):
        (WebCore::InspectorCSSAgent::TogglePropertyAction::perform):
        (WebCore::InspectorCSSAgent::TogglePropertyAction::redo):
        (InspectorCSSAgent::TogglePropertyAction):
        (WebCore::InspectorCSSAgent::SetRuleSelectorAction::perform):
        (WebCore::InspectorCSSAgent::SetRuleSelectorAction::redo):
        (InspectorCSSAgent::SetRuleSelectorAction):
        (WebCore::InspectorCSSAgent::AddRuleAction::perform):
        (WebCore::InspectorCSSAgent::AddRuleAction::redo):
        (InspectorCSSAgent::AddRuleAction):
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::setNodeValue):
        (WebCore::InspectorDOMAgent::redo):
        (WebCore):
        * inspector/InspectorDOMAgent.h:
        (InspectorDOMAgent):
        * inspector/InspectorHistory.cpp:
        (WebCore::InspectorHistory::InspectorHistory):
        (WebCore::InspectorHistory::perform):
        (WebCore::InspectorHistory::markUndoableState):
        (WebCore::InspectorHistory::undo):
        (WebCore::InspectorHistory::redo):
        (WebCore):
        * inspector/InspectorHistory.h:
        (Action):
        (InspectorHistory):
        * inspector/front-end/CSSStyleModel.js:
        (WebInspector.CSSStyleModel):
        (WebInspector.CSSStyleModel.prototype._undoRedoRequested):
        (WebInspector.CSSStyleModel.prototype._undoRedoCompleted):
        * inspector/front-end/DOMAgent.js:
        (WebInspector.DOMAgent.prototype.get undo):
        (WebInspector.DOMAgent.prototype.redo):
        * inspector/front-end/ElementsPanel.js:
        (WebInspector.ElementsPanel.prototype.handleShortcut):

2012-02-15  Yuta Kitamura  <yutak@chromium.org>

        WebSocket: MessageEvent fired during send() on workers
        https://bugs.webkit.org/show_bug.cgi?id=76521

        Reviewed by David Levin.

        WebSocket's message event should not be invoked while a synchronous operation
        (send() and bufferedAmount) is in progress.

        Test: http/tests/websocket/tests/hybi/workers/no-onmessage-in-sync-op.html

        * websockets/ThreadableWebSocketChannelClientWrapper.cpp:
        Added #if ENABLE(WORKERS) because ThreadableWebSocketChannelClientWrapper is not used
        if Web Workers is not available.
        Changed access label because private members were declared as protected with no good reason.
        (WebCore::ThreadableWebSocketChannelClientWrapper::ThreadableWebSocketChannelClientWrapper):
        Receive ScriptExecutionContext so we can post a task that should be executed later.
        (WebCore::ThreadableWebSocketChannelClientWrapper::create):
        (WebCore::ThreadableWebSocketChannelClientWrapper::processPendingTasksCallback):
        (WebCore::ThreadableWebSocketChannelClientWrapper::processPendingTasks):
        * websockets/ThreadableWebSocketChannelClientWrapper.h:
        * websockets/WorkerThreadableWebSocketChannel.cpp:
        (WebCore::WorkerThreadableWebSocketChannel::WorkerThreadableWebSocketChannel):

2012-02-15  No'am Rosenthal  <noam.rosenthal@nokia.com>

        [Texmap] Divide TextureMapperNode.cpp to 3 files.
        https://bugs.webkit.org/show_bug.cgi?id=76660

        Rename TextureMapperNode to TextureMapperLayer.

        Reviewed by Kenneth Rohde Christiansen.

        No new tests.

        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * platform/graphics/texmap/GraphicsLayerTextureMapper.cpp:
        (WebCore::GraphicsLayerTextureMapper::GraphicsLayerTextureMapper):
        (WebCore::GraphicsLayerTextureMapper::notifyChange):
        (WebCore::GraphicsLayerTextureMapper::setNeedsDisplay):
        (WebCore::GraphicsLayerTextureMapper::setContentsNeedsDisplay):
        (WebCore::GraphicsLayerTextureMapper::setNeedsDisplayInRect):
        (WebCore::GraphicsLayerTextureMapper::setParent):
        (WebCore::GraphicsLayerTextureMapper::setChildren):
        (WebCore::GraphicsLayerTextureMapper::addChild):
        (WebCore::GraphicsLayerTextureMapper::addChildAtIndex):
        (WebCore::GraphicsLayerTextureMapper::addChildAbove):
        (WebCore::GraphicsLayerTextureMapper::addChildBelow):
        (WebCore::GraphicsLayerTextureMapper::replaceChild):
        (WebCore::GraphicsLayerTextureMapper::removeFromParent):
        (WebCore::GraphicsLayerTextureMapper::setMaskLayer):
        (WebCore::GraphicsLayerTextureMapper::setReplicatedByLayer):
        (WebCore::GraphicsLayerTextureMapper::setPosition):
        (WebCore::GraphicsLayerTextureMapper::setAnchorPoint):
        (WebCore::GraphicsLayerTextureMapper::setSize):
        (WebCore::GraphicsLayerTextureMapper::setTransform):
        (WebCore::GraphicsLayerTextureMapper::setChildrenTransform):
        (WebCore::GraphicsLayerTextureMapper::setPreserves3D):
        (WebCore::GraphicsLayerTextureMapper::setMasksToBounds):
        (WebCore::GraphicsLayerTextureMapper::setDrawsContent):
        (WebCore::GraphicsLayerTextureMapper::setContentsOpaque):
        (WebCore::GraphicsLayerTextureMapper::setBackfaceVisibility):
        (WebCore::GraphicsLayerTextureMapper::setOpacity):
        (WebCore::GraphicsLayerTextureMapper::setContentsRect):
        (WebCore::GraphicsLayerTextureMapper::setContentsToImage):
        (WebCore::GraphicsLayerTextureMapper::setContentsToMedia):
        (WebCore::GraphicsLayerTextureMapper::syncCompositingStateForThisLayerOnly):
        (WebCore::GraphicsLayerTextureMapper::syncCompositingState):
        (WebCore::GraphicsLayerTextureMapper::addAnimation):
        * platform/graphics/texmap/GraphicsLayerTextureMapper.h:
        (WebCore):
        (GraphicsLayerTextureMapper):
        (WebCore::GraphicsLayerTextureMapper::layer):
        * platform/graphics/texmap/TextureMapperLayer.cpp: Renamed from Source/WebCore/platform/graphics/texmap/TextureMapperNode.cpp.
        (WebCore):
        (WebCore::toTextureMapperLayer):
        (WebCore::TextureMapperLayer::rootLayer):
        (WebCore::TextureMapperLayer::setTransform):
        (WebCore::TextureMapperLayer::clearBackingStoresRecursive):
        (WebCore::TextureMapperLayer::computeTransformsRecursive):
        (WebCore::TextureMapperLayer::updateBackingStore):
        (WebCore::TextureMapperLayer::paint):
        (WebCore::TextureMapperLayer::paintSelf):
        (WebCore::TextureMapperLayer::compareGraphicsLayersZValue):
        (WebCore::TextureMapperLayer::sortByZOrder):
        (WebCore::TextureMapperLayer::paintSelfAndChildren):
        (WebCore::TextureMapperLayer::intermediateSurfaceRect):
        (WebCore::TextureMapperLayer::shouldPaintToIntermediateSurface):
        (WebCore::TextureMapperLayer::isVisible):
        (WebCore::TextureMapperLayer::paintSelfAndChildrenWithReplica):
        (WebCore::TextureMapperLayer::paintRecursive):
        (WebCore::TextureMapperLayer::~TextureMapperLayer):
        (WebCore::TextureMapperLayer::syncCompositingState):
        (WebCore::TextureMapperLayer::syncCompositingStateSelf):
        (WebCore::TextureMapperLayer::descendantsOrSelfHaveRunningAnimations):
        (WebCore::TextureMapperLayer::syncAnimations):
        (WebCore::TextureMapperLayer::syncAnimationsRecursively):
        * platform/graphics/texmap/TextureMapperLayer.h: Renamed from Source/WebCore/platform/graphics/texmap/TextureMapperNode.h.
        (WebCore):
        (TextureMapperPaintOptions):
        (WebCore::TextureMapperPaintOptions::TextureMapperPaintOptions):
        (TextureMapperLayer):
        (WebCore::TextureMapperLayer::TextureMapperLayer):
        (WebCore::TextureMapperLayer::size):
        (WebCore::TextureMapperLayer::setOpacity):
        (WebCore::TextureMapperLayer::setTextureMapper):
        (WebCore::TextureMapperLayer::setShouldUpdateBackingStoreFromLayer):
        (WebCore::TextureMapperLayer::setBackingStore):
        (WebCore::TextureMapperLayer::backingStore):
        (WebCore::TextureMapperLayer::texture):
        (WebCore::TextureMapperLayer::layerRect):
        (State):
        (WebCore::TextureMapperLayer::State::State):

2012-02-15  Hayato Ito  <hayato@chromium.org>

        ShadowRoot: Remove a public static factory function which doesn't have any callers.
        https://bugs.webkit.org/show_bug.cgi?id=78668

        Reviewed by Kent Tamura.

        No tests. No change in behavior.

        * dom/ShadowRoot.cpp:
        (WebCore::ShadowRoot::create):
        * dom/ShadowRoot.h:
        (ShadowRoot):

2012-02-14  Hao Zheng  <zhenghao@chromium.org>

        Cleanup pending transaction queue in Database.
        https://bugs.webkit.org/show_bug.cgi?id=75048

        Reviewed by David Levin.

        Each SQLTransaction has 3 SQLCallbackWrappers, and each of them
        holds a ref to WorkerContext. As a result, if the worker thread is
        stopped before all SQLTransactions are finished, the ASSERT of
        m_workerContext->hasOneRef() in WorkerThread::workerThread() would fail.

        No new tests.
        REGRESSION(r103429) fast/workers/storage/use-same-database-in-page-and-workers.html asserts

        * storage/Database.cpp:
        (WebCore::Database::close): Cleanup pending transaction queue in close().
        * storage/SQLCallbackWrapper.h:
        (WebCore::SQLCallbackWrapper::clear):
        (SafeReleaseTask): Make SafeReleaseTask a cleanup task, which is
        necessary because at the time of SafeReleaseTask is performed,
        WorkerRunLoop has been terminated and only runs cleanup tasks.
        (WebCore::SQLCallbackWrapper::SafeReleaseTask::create):
        (WebCore::SQLCallbackWrapper::SafeReleaseTask::performTask):
        (WebCore::SQLCallbackWrapper::SafeReleaseTask::isCleanupTask):
        (WebCore::SQLCallbackWrapper::SafeReleaseTask::SafeReleaseTask):

2012-02-14  Antti Koivisto  <antti@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=78662
        CSSStyleSelector should not rely on parent rule pointer in StylePropertySet

        Reviewed by Andreas Kling.

        Pass the rule pointer down to the style applying so we don't need to rely on
        StylePropertySet having one.

        To make this easier the patch also refactors the matched properties vector to
        be part of MatchResult object instead of a member of CSSStyleSelector.
        
        Rename Declaration -> Properties.
        
        * css/CSSFontSelector.cpp:
        (WebCore::CSSFontSelector::dispatchInvalidationCallbacks):
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::CSSStyleSelector):
        (WebCore::CSSStyleSelector::sweepMatchedPropertiesCache):
        (WebCore::CSSStyleSelector::addMatchedProperties):
        (WebCore::CSSStyleSelector::sortAndTransferMatchedRules):
        (WebCore::CSSStyleSelector::matchScopedAuthorRules):
        (WebCore::CSSStyleSelector::matchAuthorRules):
        (WebCore::CSSStyleSelector::matchUserRules):
        (WebCore::CSSStyleSelector::matchUARules):
        (WebCore::CSSStyleSelector::collectMatchingRulesForList):
        (WebCore::CSSStyleSelector::matchAllRules):
        (WebCore):
        (WebCore::CSSStyleSelector::initForStyleResolve):
        (WebCore::CSSStyleSelector::matchesRuleSet):
        (WebCore::CSSStyleSelector::styleForElement):
        (WebCore::CSSStyleSelector::styleForKeyframe):
        (WebCore::CSSStyleSelector::pseudoStyleForElement):
        (WebCore::CSSStyleSelector::styleForPage):
        (WebCore::CSSStyleSelector::pseudoStyleRulesForElement):
        (WebCore::isInsideRegionRule):
        (WebCore::CSSStyleSelector::applyProperties):
        (WebCore::CSSStyleSelector::applyMatchedProperties):
        (WebCore::CSSStyleSelector::computeMatchedPropertiesHash):
        (WebCore::operator==):
        (WebCore::operator!=):
        (WebCore::CSSStyleSelector::findFromMatchedPropertiesCache):
        (WebCore::CSSStyleSelector::addToMatchedPropertiesCache):
        (WebCore::CSSStyleSelector::invalidateMatchedPropertiesCache):
        (WebCore::isCacheableInMatchedPropertiesCache):
        (WebCore::CSSStyleSelector::matchPageRules):
        * css/CSSStyleSelector.h:
        (CSSStyleSelector):
        (WebCore::CSSStyleSelector::addMatchedRule):
        (WebCore::CSSStyleSelector::MatchedProperties::MatchedProperties):
        (MatchedProperties):
        (MatchResult):
        (MatchedPropertiesCacheItem):

2012-02-14  Takashi Toyoshima  <toyoshim@chromium.org>

        WebSocketChannel minor refactoring for code manageability
        https://bugs.webkit.org/show_bug.cgi?id=78576

        Reviewed by Kent Tamura.

        Change the first argument type of WebSocketChannel
        from ScriptExecutionContext to Document.
        WebSocketChannel always assume this ScriptExecutionContext must
        inherit Document. Then, it results in many static cast.
        It isn't readable and dangerous against future code changes.

        * websockets/ThreadableWebSocketChannel.cpp: Pass the first argument for WebSocketChannel as Document.
        (WebCore::ThreadableWebSocketChannel::create):
        * websockets/WebSocketChannel.cpp: Replace all ScriptExecutionContext* m_context descriptions to Document* m_document.
        (WebCore::WebSocketChannel::WebSocketChannel):
        (WebCore::WebSocketChannel::connect):
        (WebCore::WebSocketChannel::fail):
        (WebCore::WebSocketChannel::disconnect):
        (WebCore::WebSocketChannel::didOpenSocketStream):
        (WebCore::WebSocketChannel::didCloseSocketStream):
        (WebCore::WebSocketChannel::didReceiveSocketStreamData):
        (WebCore::WebSocketChannel::didFailSocketStream):
        (WebCore::WebSocketChannel::processBuffer):
        (WebCore::WebSocketChannel::processOutgoingFrameQueue):
        * websockets/WebSocketChannel.h: Change the first argument for construction to Document and hold it as Document m_document.
        (WebCore):
        (WebCore::WebSocketChannel::create):
        (WebSocketChannel):
        * websockets/WorkerThreadableWebSocketChannel.cpp: Pass the first argument for WebSocketChannel as Document.
        (WebCore::WorkerThreadableWebSocketChannel::Peer::Peer):

2012-02-14  Noel Gordon  <noel.gordon@gmail.com>

        Unreviewed, rolling out r107774.
        http://trac.webkit.org/changeset/107774
        https://bugs.webkit.org/show_bug.cgi?id=78661

        Broke Chromium build

        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleGestureEvent):
        * platform/ScrollAnimator.cpp:
        (WebCore):
        (WebCore::ScrollAnimator::handleGestureEvent):
        * platform/ScrollAnimator.h:
        (ScrollAnimator):
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::wheelEvent):
        * platform/ScrollView.h:
        (ScrollView):
        * platform/ScrollableArea.cpp:
        (WebCore):
        (WebCore::ScrollableArea::handleGestureEvent):
        * platform/ScrollableArea.h:
        (ScrollableArea):

2012-02-14  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r107766.
        http://trac.webkit.org/changeset/107766
        https://bugs.webkit.org/show_bug.cgi?id=78665

        Breaks Chromium Win build (Requested by bashi1 on #webkit).

        * GNUmakefile.list.am:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * websockets/WebSocketDeflater.cpp: Removed.
        * websockets/WebSocketDeflater.h: Removed.

2012-02-14  Anders Carlsson  <andersca@apple.com>

        Remove ScrollableArea::handleGestureEvent
        https://bugs.webkit.org/show_bug.cgi?id=78661

        Reviewed by Sam Weinig.

        ScrollableArea::handleGestureEvent ends up being a no-op so remove it and the related code. 

        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleGestureEvent):
        * platform/ScrollAnimator.cpp:
        * platform/ScrollAnimator.h:
        (ScrollAnimator):
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::wheelEvent):
        * platform/ScrollView.h:
        (ScrollView):
        * platform/ScrollableArea.cpp:
        * platform/ScrollableArea.h:
        (ScrollableArea):

2012-02-14  Kentaro Hara  <haraken@chromium.org>

        [JSC] Cache the number of non-custom constructor arguments
        https://bugs.webkit.org/show_bug.cgi?id=78195

        Reviewed by Darin Adler.

        If [ConstructorParameters=] is specified, JSC caches the number of constructor
        arguments for performance. However, at present, [ConstructorParameters=] is specified
        on a small part of constructors (It appears that people have forgotten to
        add [ConstructorParameters=]). Thus, for non-custom constructors, this patch modifies
        CodeGeneratorJS.pm so that it caches the number of constructor arguments automatically
        without [ConstructorParameters=] (CodeGeneratorJS.pm can know the number of arguments
        by the [Constructor=...] signature).

        Test: fast/js/constructor-length.html

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateConstructorDefinition):

2012-02-14  Mark Rowe  <mrowe@apple.com>

        <http://webkit.org/b/78658> platformUserPreferredLanguages is leaking all of the language codes

        Reviewed by Darin Adler.

        * platform/mac/Language.mm:
        (WebCore::httpStyleLanguageCode): Switch to using RetainPtr's for temporaries to make the ownership
        more explicit. Switch to returning a WTF::String so that the caller doesn't have to worry about
        ownership at all. Change the name to reflect the lack of transfer of ownership.
        (WebCore::platformUserPreferredLanguages):

2012-02-14  Kentaro Hara  <haraken@chromium.org>

        [Mac] PasteboardMac.mm build fails
        https://bugs.webkit.org/show_bug.cgi?id=78655

        Reviewed by Hajime Morita.

        Although the bots have been working fine, PasteboardMac.mm build fails
        in our local Mac environments due to an uninitialized variable:

            /Users/haraken/WebKit/Source/WebCore/platform/mac/PasteboardMac.mm:322: warning: 'string' may be used uninitialized in this function

        This patch initializes the 'string' to nil to fix the build failure.

        No tests. No change in behavior.

        * platform/mac/PasteboardMac.mm:
        (WebCore::Pasteboard::plainText):

2012-02-14  Kenichi Ishibashi  <bashi@chromium.org>

        [WebSocket] Add extension attribute support
        https://bugs.webkit.org/show_bug.cgi?id=78557

        Implement WebSocket "extensions" attribute that holds a list of
        extension the server accepted. No change in behavior at this time
        because we don't send any extension on handshake.

        Reviewed by Kent Tamura.

        No new tests. http/tests/websocket/tests/hybi/extensions.html checks the value of this attribute.

        * websockets/ThreadableWebSocketChannel.h: Add extensions().
        (ThreadableWebSocketChannel):
        * websockets/ThreadableWebSocketChannelClientWrapper.cpp:
        (WebCore::ThreadableWebSocketChannelClientWrapper::extensions): Added.
        (WebCore):
        (WebCore::ThreadableWebSocketChannelClientWrapper::setExtensions): Added.
        * websockets/ThreadableWebSocketChannelClientWrapper.h:
        (ThreadableWebSocketChannelClientWrapper):
        * websockets/WebSocket.cpp: Added m_extensions member variable.
        (WebCore::WebSocket::WebSocket):
        (WebCore::WebSocket::extensions): Returns m_extensions.
        * websockets/WebSocket.h:
        * websockets/WebSocketChannel.cpp:
        (WebCore::WebSocketChannel::extensions): Added.
        (WebCore):
        * websockets/WebSocketChannel.h:
        (WebSocketChannel):
        * websockets/WebSocketExtensionDispatcher.cpp:
        (WebCore::WebSocketExtensionDispatcher::fail): Added.
        (WebCore::WebSocketExtensionDispatcher::processHeaderValue): Stores accepted extensions.
        (WebCore::WebSocketExtensionDispatcher::acceptedExtensions): Added.
        (WebCore):
        (WebCore::WebSocketExtensionDispatcher::acceptedExtensions): Added.
        * websockets/WebSocketExtensionDispatcher.h:
        (WebSocketExtensionDispatcher):
        * websockets/WebSocketHandshake.cpp:
        (WebCore::WebSocketHandshake::acceptedExtensions): Added.
        (WebCore):
        * websockets/WebSocketHandshake.h:
        * websockets/WorkerThreadableWebSocketChannel.cpp:
        (WebCore::WorkerThreadableWebSocketChannel::extensions): Added.
        (WebCore):
        (WebCore::workerContextDidConnect): Calls ThreadableWebSocketChannelClientWrapper::setExtensions().
        (WebCore::WorkerThreadableWebSocketChannel::Peer::didConnect): Passes extensions as an argument.
        * websockets/WorkerThreadableWebSocketChannel.h:
        (WorkerThreadableWebSocketChannel):

2012-02-14  Kentaro Hara  <haraken@chromium.org>

        Rename [JSGenerateToJS] to [JSGenerateToJSObject]
        https://bugs.webkit.org/show_bug.cgi?id=78490

        Reviewed by Adam Barth.

        This patch renames [JSGenerateToJS] to [JSGenerateToJSObject],
        for naming consistency with [CustomToJSObject], [JSCustomToJSObject] and [V8CustomToJSObject].

        No tests. No change in behavior.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateHeader):
        (GenerateImplementation):
        * dom/WebKitNamedFlow.idl:
        * fileapi/DirectoryEntry.idl:
        * fileapi/DirectoryEntrySync.idl:
        * fileapi/File.idl:
        * fileapi/FileEntry.idl:
        * fileapi/FileEntrySync.idl:
        * html/DOMFormData.idl:
        * html/DOMSettableTokenList.idl:
        * html/DOMURL.idl:
        * html/MediaController.idl:
        * mediastream/LocalMediaStream.idl:
        * webaudio/AudioBufferCallback.idl:
        * webaudio/AudioBufferSourceNode.idl:
        * webaudio/AudioDestinationNode.idl:
        * webaudio/AudioGain.idl:
        * webaudio/AudioGainNode.idl:
        * webaudio/AudioPannerNode.idl:
        * webaudio/AudioProcessingEvent.idl:
        * webaudio/BiquadFilterNode.idl:
        * webaudio/ConvolverNode.idl:
        * webaudio/DelayNode.idl:
        * webaudio/DynamicsCompressorNode.idl:
        * webaudio/HighPass2FilterNode.idl:
        * webaudio/JavaScriptAudioNode.idl:
        * webaudio/LowPass2FilterNode.idl:
        * webaudio/MediaElementAudioSourceNode.idl:
        * webaudio/OfflineAudioCompletionEvent.idl:
        * webaudio/RealtimeAnalyserNode.idl:
        * webaudio/WaveShaperNode.idl:
        * workers/SharedWorker.idl:
        * workers/Worker.idl:

2012-02-14  Kenichi Ishibashi  <bashi@chromium.org>

        [WebSocket] Add deflater/inflater classes
        https://bugs.webkit.org/show_bug.cgi?id=78449

        Add WebSocketDeflater/WebSocketInflater classes which wrap zlib
        functions. These classes are not used yet, but will be used for
        supporting WebSocket deflate-frame extension.

        Reviewed by Kent Tamura.

        No new tests except for chromium port. Behavior is unchanged.

        * GNUmakefile.list.am: Added.WebSocketDeflater.(cpp|h).
        * WebCore.gypi: Ditto.
        * WebCore.vcproj/WebCore.vcproj: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Ditto.
        * websockets/WebSocketDeflater.cpp: Added.
        (WebCore):
        (WebCore::WebSocketDeflater::create):
        (WebCore::WebSocketDeflater::WebSocketDeflater):
        (WebCore::WebSocketDeflater::initialize):
        (WebCore::WebSocketDeflater::~WebSocketDeflater):
        (WebCore::WebSocketDeflater::addBytes):
        (WebCore::WebSocketDeflater::finish):
        (WebCore::WebSocketDeflater::reset):
        (WebCore::WebSocketInflater::create):
        (WebCore::WebSocketInflater::WebSocketInflater):
        (WebCore::WebSocketInflater::initialize):
        (WebCore::WebSocketInflater::~WebSocketInflater):
        (WebCore::WebSocketInflater::addBytes):
        (WebCore::WebSocketInflater::finish):
        (WebCore::WebSocketInflater::reset):
        * websockets/WebSocketDeflater.h: Added.
        (WebCore):
        (WebSocketDeflater):
        (WebCore::WebSocketDeflater::data):
        (WebCore::WebSocketDeflater::size):
        (WebSocketInflater):
        (WebCore::WebSocketInflater::data):
        (WebCore::WebSocketInflater::size):

2012-02-14  Dana Jansens  <danakj@chromium.org>

        [chromium] Compare filters on impl thread when setting them, and test setting in unit tests
        https://bugs.webkit.org/show_bug.cgi?id=78643

        Reviewed by James Robinson.

        Add setFilters() coverage to CCLayerImplTest.cpp

        * platform/graphics/chromium/cc/CCLayerImpl.cpp:
        (WebCore::CCLayerImpl::setFilters):

2012-02-14  Ryosuke Niwa  <rniwa@webkit.org>

        Crash in deleteInsignificantText
        https://bugs.webkit.org/show_bug.cgi?id=78567

        Reviewed by Eric Seidel.

        Fix the crash. Also update layout at the beginning of each call to deleteInsignificantText
        since the previous call may have mutated the DOM.

        Test: editing/inserting/delete-insignificant-text-crash.html

        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::deleteInsignificantText):

2012-02-14  Levi Weintraub  <leviw@chromium.org>

        Prepare RenderLayerBacking and RenderLayerCompositor for subpixel layout
        https://bugs.webkit.org/show_bug.cgi?id=78630

        Reviewed by Simon Fraser.

        In our transition to subpixel layout in the render tree, we continue to pass RenderLayerBacking
        and RenderLayerCompositor integer (pixel) sizes and positions. This patch moves nearly all
        methods and members on these two classes back to integers, and applies pixel snapping logic to
        LayoutUnits pulled in.

        No new tests. No change in behavior.

        * rendering/RenderBox.h:
        (WebCore::RenderBox::pixelSnappedLayoutOverflowRect): Convenience function for getting pixel
        snapped overflow bounds.
        * rendering/RenderLayerBacking.cpp:
        (WebCore):
        (WebCore::RenderLayerBacking::updateCompositedBounds): Switch to integers and pixel snapping the
        clipping bounds.
        (WebCore::clipBox): Returns a pixel snapped rect.
        (WebCore::RenderLayerBacking::updateGraphicsLayerGeometry): Using pixelSnappedLayerCoords. Removing
        pixelSnappedIntRect calls to clipBox since this is now an IntRect.
        (WebCore::RenderLayerBacking::computeTransformOrigin): Switching to operate on a pixel snapped rect.
        (WebCore::RenderLayerBacking::computePerspectiveOrigin): Ditto.
        (WebCore::RenderLayerBacking::contentOffsetInCompostingLayer): Returns a size based on m_compositingBounds,
        which is now an IntSize.
        (WebCore::RenderLayerBacking::contentsBox): Switching to use pixel snapped values from the render tree.
        (WebCore::RenderLayerBacking::setContentsNeedDisplayInRect): This now takes in and outputs integers.
        (WebCore::RenderLayerBacking::paintIntoLayer): Uses a pixel snapped rect for the dirty rect.
        (WebCore::paintScrollbar): Scrollbars are Widgets & painted natively, so they should use integers.
        (WebCore::RenderLayerBacking::paintContents): We now properly take in an integer clip rect, as it's
        used for the scrollbars. 
        (WebCore::RenderLayerBacking::startAnimation): Using pixel snapped values for animations and transitions.
        (WebCore::RenderLayerBacking::startTransition): Ditto.
        (WebCore::RenderLayerBacking::compositedBounds): Composited bounds are now properly stored as integers.
        (WebCore::RenderLayerBacking::setCompositedBounds): Ditto.
        * rendering/RenderLayerBacking.h:
        (RenderLayerBacking):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::calculateCompositedBounds): Composited bounds are pixel snapped, but
        we use LayoutUnits up until we snap and return.
        (WebCore::RenderLayerCompositor::addToOverlapMap): Overlap mapping uses our integer positions. Switching
        it back to operating on them.
        (WebCore::RenderLayerCompositor::addToOverlapMapRecursive): Ditto.
        (WebCore::RenderLayerCompositor::overlapsCompositedLayers): Ditto.
        (WebCore::RenderLayerCompositor::computeCompositingRequirements): Using integers.
        (WebCore::RenderLayerCompositor::frameViewDidChangeLocation): FrameViews are on integer bounds. We now
        properly use these as integers.
        (WebCore::RenderLayerCompositor::frameViewDidScroll): Ditto.
        (WebCore::RenderLayerCompositor::recursiveRepaintLayerRect): Switching to use integers and
        pixelSnappedLayerCoords.
        (WebCore::RenderLayerCompositor::repaintCompositedLayersAbsoluteRect): Ditto.
        (WebCore::RenderLayerCompositor::updateRootLayerPosition): Using integer positions, which are what
        the apis used already returned.
        (WebCore::RenderLayerCompositor::requiresCompositingForPlugin): Using pixel snapped values.
        (WebCore::RenderLayerCompositor::requiresCompositingForFrame): Ditto.
        (WebCore::paintScrollbar): Scrollbars should always use integers.
        (WebCore::RenderLayerCompositor::paintContents): Switching to use an integer clip rect.
        (WebCore::RenderLayerCompositor::ensureRootLayer): Using values from new pixelSnappedLayoutOverflowRect
        method on RenderBox to ensure we're using values that are pixel snapped to the proper location.
        (WebCore::RenderLayerCompositor::destroyRootLayer): Properly calling scrollbar invalidation methods
        with integers.
        * rendering/RenderLayerCompositor.h:
        (RenderLayerCompositor):

2012-02-14  Anders Carlsson  <andersca@apple.com>

        Swipe gestures don't work if main frame has a horizontal scrollbar
        https://bugs.webkit.org/show_bug.cgi?id=78650
        <rdar://problem/10864993>

        Reviewed by Sam Weinig.

        Change ScrollingTree::tryToHandleWheelEvent so we can indicate that an event was
        processed by the scrolling tree but that we should indicate back to WebKit that it wasn't handled.

        * page/scrolling/ScrollingTree.cpp:
        (WebCore::ScrollingTree::ScrollingTree):
        Initialize new member variables.

        (WebCore::ScrollingTree::tryToHandleWheelEvent):
        If the wheel event will start a swipe gesture, return DidNotHandleEvent.

        (WebCore::ScrollingTree::updateBackForwardState):
        This can now be called from any thread, so use a mutex.

        (WebCore::ScrollingTree::setMainFramePinState):
        New function that will set the current main frame pin state.

        (WebCore::ScrollingTree::canGoBack):
        (WebCore::ScrollingTree::canGoForward):
        Put locks around these.

        (WebCore::ScrollingTree::willWheelEventStartSwipeGesture):
        Helper function that returns whether the given wheel event will start a swipe gesture
        because the main frame is pinned to the left/right and we can go back/forward.

        * page/scrolling/mac/ScrollingTreeNodeMac.mm:
        (WebCore::ScrollingTreeNodeMac::update):
        Call updateMainFramePinState if the frame geometry changes.

        (WebCore::ScrollingTreeNodeMac::setScrollPosition):
        Call updateMainFramePinState.

        (WebCore::ScrollingTreeNodeMac::updateMainFramePinState):
        Compute the main frame pin state and set it on the scrolling tree.

2012-02-14  Brian Weinstein  <bweinstein@apple.com>

        Web Inspector: Add the ability to show the resources panel on launch
        https://bugs.webkit.org/show_bug.cgi?id=78641

        Reviewed by Timothy Hatcher.

        * WebCore.exp.in: Add a new function to be exported.
        * inspector/InspectorFrontendClientLocal.cpp:
        (WebCore::InspectorFrontendClientLocal::showResources): Call showResources on load.
        * inspector/InspectorFrontendClientLocal.h:
        (InspectorFrontendClientLocal):
        * inspector/front-end/InspectorFrontendAPI.js:
        (InspectorFrontendAPI.showResources): Show the resources panel.

2012-02-14  Enrica Casucci  <enrica@apple.com>

        REGRESSION (r107568-r107627): Crash when copying in WebCore::SharedBuffer::hasPlatformData().
        https://bugs.webkit.org/show_bug.cgi?id=78577

        Reviewed by Dan Bernstein.

        * platform/mac/PlatformPasteboardMac.mm:
        (WebCore::PlatformPasteboard::setBufferForType): Missing null check when
        setting data to the NSPasteboard.

2012-02-14  Ryosuke Niwa  <rniwa@webkit.org>

        Crash in WebCore::SVGElement::removedFromDocument
        https://bugs.webkit.org/show_bug.cgi?id=77270

        Reviewed by Adam Barth.

        Add a protector before calling NodeRemovalDispatcher::dispatch since
        NodeRemovalDispatcher::dispatch may remove the last RefPtr to this node.

        Test: fast/dom/Range/surround-contents-font-face-crash.svg

        * dom/ContainerNodeAlgorithms.h:
        (WebCore::Private::addChildNodesToDeletionQueue):

2012-02-14  Matt Lilek  <mrl@apple.com>

        Don't ENABLE_DASHBOARD_SUPPORT unconditionally on all Mac platforms
        https://bugs.webkit.org/show_bug.cgi?id=78629

        Reviewed by David Kilzer.

        * Configurations/FeatureDefines.xcconfig:

2012-02-14  Andreas Kling  <awesomekling@apple.com>

        Avoid full style recalc when presentation attributes change.
        <http://webkit.org/b/78636>

        Reviewed by Antti Koivisto.

        Use setNeedsStyleRecalc(InlineStyleChange) when a presentation attribute changes
        to reduce the amount of work done in recalcStyle().

        * dom/StyledElement.cpp:
        (WebCore::StyledElement::attributeChanged):

2012-02-14  Ramya Chandrasekaran  <cramya@google.com>

        Last character display for passwords in Android.
        https://bugs.webkit.org/show_bug.cgi?id=78532

        Reviewed by Adam Barth.

        * page/Settings.cpp:
        (WebCore::Settings::Settings):

2012-02-14  Joshua Bell  <jsbell@chromium.org>

        IndexedDB: Invalid dates should not be valid keys
        https://bugs.webkit.org/show_bug.cgi?id=78622

        Reviewed by Tony Chang.

        Tests: storage/indexeddb/invalid-keys.html
               storage/indexeddb/factory-cmp.html

        * bindings/v8/IDBBindingUtilities.cpp: Special case for NaN Dates.
        (WebCore::createIDBKeyFromValue):

2012-02-14  Ken Buchanan  <kenrb@chromium.org>

        Crash from line break iterators in counter content
        https://bugs.webkit.org/show_bug.cgi?id=72977

        Reviewed by David Hyatt.

        Calculating the width of counter text can sometimes cause the
        underlying text buffer to change. This patch causes the iterator
        to reset appropriately when this happens.

        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::LineBreaker::nextLineBreak):

2012-02-14  Levi Weintraub  <leviw@chromium.org>

        Update usage of LayoutUnits in RenderLayer
        https://bugs.webkit.org/show_bug.cgi?id=78511

        Reviewed by Simon Fraser.

        Updating RenderLayer to properly use LayoutUnits. See descriptions below for the rationale behind all
        the changes. Also adding a roundedIntSize method that takes a LayoutSize.

        No new tests. No change in behavior.

        * rendering/LayoutTypes.h:
        (WebCore::roundedIntSize): Inline method that currently does nothing, but will round a LayoutSize
        to an IntSize.
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateLayerPositions): Switching repaint and outline boxes to LayoutRects, as
        it's important to keep the precision of these rects until handing off to the embedder (in FrameView).
        (WebCore::RenderLayer::computeRepaintRects): Repaint rects should be preserved in subpixel units until
        being passed to the embedding layer. This prevents needless repaints.
        (WebCore::RenderLayer::convertToPixelSnappedLayerCoords): Convenience function to return pixel snapped rects
        (WebCore):
        (WebCore::RenderLayer::convertToLayerCoords): Fixing a style flaw.
        (WebCore::RenderLayer::scrollRectToVisible): Pixel snapping the rect when handing off to the embedder.
        (WebCore::RenderLayer::maximumScrollPosition): Scroll offsets are rounded.
        (WebCore::RenderLayer::scrollCornerRect): Scrollbars are drawn natively and should be positioned on pixel
        boundaries.
        (WebCore::RenderLayer::scrollCornerAndResizerRect): Resize corner doesn't influence the size/position of
        render objects. It is only painted and hit tested. Therefor it should use integers.
        (WebCore::RenderLayer::offsetFromResizeCorner): Ditto.
        (WebCore::RenderLayer::positionOverflowControls): Overflow controls are drawn natively and should be
        positioned on integer boundaries.
        (WebCore::RenderLayer::paintOverflowControls): Ditto.
        (WebCore::RenderLayer::paintScrollCorner): Ditto.
        (WebCore::RenderLayer::drawPlatformResizerImage): Ditto.
        (WebCore::RenderLayer::paintResizer): Ditto.
        (WebCore::RenderLayer::hitTestOverflowControls): Hit testing & overflow controls both use integers.
        (WebCore::RenderLayer::clipToRect): Clipping to actual painted (pixel snapped) layer bounds in the
        graphics context.
        (WebCore::RenderLayer::paintLayerContents): Calling paintOverflowControls at pixel bounds.
        (WebCore::RenderLayer::hitTest): Intersecting the hit test area with pixel snapped boundaries.
        (WebCore::RenderLayer::setBackingNeedsRepaintInRect): Sending pixelSnapped rects to the backing
        store, which only cares about pixels, and hence integers.
        * rendering/RenderLayer.h:
        (WebCore::RenderLayer::scrolledContentOffset): RenderLayer's scroll offsets are used in platform
        code, so we need to return them as integers. Rounding the scroll overflow before adding it to the
        scroll offset, which was already stored in integers.
        (RenderLayer):

2012-02-14  Abhishek Arya  <inferno@chromium.org>

        Crash in NavigationScheduler::schedule.
        https://bugs.webkit.org/show_bug.cgi?id=78297

        Reviewed by Adam Barth.

        Protect frame pointer and navigation scheduler when we stop the
        load (when redirect is scheduled during a load). Also, dont fire
        the navigation scheduler timer when we know that frameloader is
        going away.

        Test: http/tests/navigation/navigation-redirect-schedule-crash.html

        * loader/NavigationScheduler.cpp:
        (WebCore::NavigationScheduler::schedule):

2012-02-14  Alexis Menard  <alexis.menard@openbossa.org>

        font shorthand with inherit keyword incorrectly parsed and rendered
        https://bugs.webkit.org/show_bug.cgi?id=20181

        Reviewed by Tony Chang.

        As stated in http://www.w3.org/TR/CSS21/changes.html#q142
        if the inherit (and also by extension initial) is encountered in the
        middle of the shorthand then the property becomes invalid.

        Test: fast/css/font-shorthand-mix-inherit.html

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseFont):
        (WebCore::CSSParser::parseFontFamily):

2012-02-14  Abhishek Arya  <inferno@chromium.org>

        Crash due to incorrect firing of mutation event during class attribute parsing.
        https://bugs.webkit.org/show_bug.cgi?id=78537

        Reviewed by Ryosuke Niwa.

        Test: fast/dom/class-attr-change-double-mutation-fire.html

        * dom/StyledElement.cpp:
        (WebCore::StyledElement::classAttributeChanged):

2012-02-14  Mike Lawther  <mikelawther@chromium.org>

        CSS3 calc: add isZero implementations to catch divide by zero
        https://bugs.webkit.org/show_bug.cgi?id=78603

        Reviewed by Ojan Vafai.

        * css/CSSCalculationValue.cpp:
        (WebCore::CSSCalcPrimitiveValue::isZero):
        (CSSCalcPrimitiveValue):
        (WebCore::CSSCalcBinaryOperation::isZero):
        (CSSCalcBinaryOperation):
        * css/CSSCalculationValue.h:
        (CSSCalcExpressionNode):

2012-02-12  Timothy Hatcher  <timothy@apple.com>

        Don't include CachedResources that haven't downloaded when populating the Web Inspector on load.

        https://webkit.org/b/78447
        rdar://problem/10843542

        Reviewed by Brian Weinstein.

        Test: inspector/protocol/page-agent.html

        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::cachedResourcesForFrame): Skip CachedFonts and CachedImages that
        return true for stillNeedsLoad.
        * loader/cache/CachedFont.h:
        (WebCore::CachedFont::stillNeedsLoad): Added.

2012-02-12  Timothy Hatcher  <timothy@apple.com>

        Web Inspector: include failed and canceled in FrameResourceTree.

        https://webkit.org/b/78445

        Reviewed by Pavel Feldman.

        Test: inspector/protocol/page-agent.html

        * WebCore.xcodeproj/project.pbxproj: Added Inspector.json, Inspector-0.1.json and Inspector-1.0.json
        for quick access and easy editing.
        * inspector/Inspector.json: Added failed and canceled as optional properties to the object for resources in FrameResourceTree.
        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::buildObjectForFrameTree): Set those properties.

2012-02-14  Csaba Osztrogonác  <ossy@webkit.org>

        Typo fix after r107707.

        * platform/graphics/texmap/TextureMapperNode.cpp:
        (WebCore::TextureMapperNode::updateBackingStore):

2012-02-14  Andrey Kosyakov  <caseq@chromium.org>

        Web Inspector: [refactoring] extract TimelineOverviewWindow from TimelineOverviewPanel
        https://bugs.webkit.org/show_bug.cgi?id=78599

        Reviewed by Pavel Feldman.

        * inspector/front-end/TimelineOverviewPane.js:
        (WebInspector.TimelineOverviewPane):
        (WebInspector.TimelineOverviewPane.prototype.reset):
        (WebInspector.TimelineOverviewPane.prototype.scrollWindow):
        (WebInspector.TimelineOverviewWindow):
        (WebInspector.TimelineOverviewWindow.prototype.reset):
        (WebInspector.TimelineOverviewWindow.prototype.scrollWindow):
        (WebInspector.TimelineOverviewWindow.prototype._windowResizeDragging):
        (WebInspector.TimelineOverviewWindow.prototype._dragWindow):
        (WebInspector.TimelineOverviewWindow.prototype._windowSelectorDragging):
        (WebInspector.TimelineOverviewWindow.prototype._endWindowSelectorDragging):
        (WebInspector.TimelineOverviewWindow.prototype._windowDragging):
        (WebInspector.TimelineOverviewWindow.prototype._resizeWindowRight):
        (WebInspector.TimelineOverviewWindow.prototype._resizeWindowMaximum):
        (WebInspector.TimelineOverviewWindow.prototype._setWindowPosition):
        (WebInspector.TimelineOverviewWindow.prototype._endWindowDragging):
        (WebInspector.TimelinePanel.WindowSelector):

2012-02-14  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Make ScriptsNavigator default file selector.
        https://bugs.webkit.org/show_bug.cgi?id=78349

        Reviewed by Pavel Feldman.

        Moved ScriptsNavigator out of experiments.
        Introduced new setting "useScriptsNavigator" with true as default value.
        Updated scripts panel tests related to file selector.

        Tests: inspector/debugger/scripts-combobox-file-selector-history.html
               inspector/debugger/scripts-file-selector.html

        * English.lproj/localizedStrings.js:
        * inspector/front-end/DebuggerPresentationModel.js:
        (WebInspector.DebuggerPresentationModel.prototype.uiSourceCodes):
        * inspector/front-end/ScriptsNavigator.js:
        (WebInspector.ScriptsNavigator.prototype._removeUISourceCode):
        (WebInspector.ScriptsNavigator.prototype._showScriptFoldersSettingChanged):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype._uiSourceCodeAdded):
        (WebInspector.ScriptsPanel.prototype._addUISourceCode):
        (WebInspector.ScriptsPanel.prototype._updateExecutionLine):
        * inspector/front-end/Settings.js:
        (WebInspector.ExperimentsSettings):
        * inspector/front-end/SettingsScreen.js:
        (WebInspector.SettingsScreen):

2012-02-14  No'am Rosenthal  <noam.rosenthal@nokia.com>

        [Qt][Texmap] Refactor backing-store code in TextureMapper
        https://bugs.webkit.org/show_bug.cgi?id=78305

        Instead of dealing with tiling inside of TextureMapperNode, we now deal with that in a new
        TextureMapperBackingStore class. Since the class is abstract, WebKit2 can overload it to
        support remotely-managed tiles.
        The backing-store for directly composited images is handled separately, in a new class
        TextureMapperCompositedImage. The TextureMapper implementation decides the dimension of
        the tiles, for example 2000 in the case of OpenGL.
        Also, directly composited content is now handled correctly, by painting it after the regular
        content and not as part of the same texture.

        To make this work, the functions in TextureMapperPlatformLayers had to become non-const,
        thus the changes to that file and GraphicsContext3DQt.

        Reviewed by Kenneth Rohde Christiansen.

        No new functionality, no new tests.

        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * platform/graphics/opengl/TextureMapperGL.h:
        (WebCore::TextureMapperGL::maxTextureDimension):
        * platform/graphics/qt/GraphicsContext3DQt.cpp:
        (GraphicsContext3DPrivate):
        (WebCore::GraphicsContext3DPrivate::paintToTextureMapper):
        * platform/graphics/texmap/GraphicsLayerTextureMapper.cpp:
        (WebCore::GraphicsLayerTextureMapper::GraphicsLayerTextureMapper):
        (WebCore::GraphicsLayerTextureMapper::didSynchronize):
        (WebCore::GraphicsLayerTextureMapper::setNeedsDisplay):
        (WebCore::GraphicsLayerTextureMapper::setContentsNeedsDisplay):
        (WebCore::GraphicsLayerTextureMapper::setNeedsDisplayInRect):
        (WebCore::GraphicsLayerTextureMapper::addChildBelow):
        (WebCore):
        (WebCore::GraphicsLayerTextureMapper::getContentsLayer):
        (WebCore::GraphicsLayerTextureMapper::setContentsToImage):
        (WebCore::GraphicsLayerTextureMapper::setContentsToMedia):
        * platform/graphics/texmap/GraphicsLayerTextureMapper.h:
        (GraphicsLayerTextureMapper):
        (WebCore::GraphicsLayerTextureMapper::platformLayer):
        (WebCore::GraphicsLayerTextureMapper::needsDisplay):
        (WebCore::GraphicsLayerTextureMapper::needsDisplayRect):
        * platform/graphics/texmap/TextureMapper.cpp:
        * platform/graphics/texmap/TextureMapper.h:
        (WebCore::TextureMapper::maxTextureDimension):
        (TextureMapper):
        * platform/graphics/texmap/TextureMapperBackingStore.cpp: Added.
        * platform/graphics/texmap/TextureMapperBackingStore.h: Added.
        * platform/graphics/texmap/TextureMapperNode.cpp:
        (WebCore::TextureMapperNode::backingStore):
        (WebCore::TextureMapperNode::updateBackingStore):
        (WebCore::TextureMapperNode::paint):
        (WebCore::TextureMapperNode::paintSelf):
        (WebCore::TextureMapperNode::intermediateSurfaceRect):
        (WebCore::TextureMapperNode::paintRecursive):
        (WebCore::TextureMapperNode::syncCompositingStateSelf):
        (WebCore::TextureMapperNode::syncCompositingState):
        * platform/graphics/texmap/TextureMapperNode.h:
        (TextureMapperPaintOptions):
        (WebCore::TextureMapperPaintOptions::TextureMapperPaintOptions):
        (WebCore::TextureMapperNode::TextureMapperNode):
        (TextureMapperNode):
        (WebCore::TextureMapperNode::setBackingStore):
        (WebCore::TextureMapperNode::texture):
        (WebCore::TextureMapperNode::layerRect):
        (WebCore::TextureMapperNode::createBackingStore):
        (State):
        (WebCore::TextureMapperNode::State::State):
        * platform/graphics/texmap/TextureMapperPlatformLayer.h:
        (TextureMapperPlatformLayer):
        (WebCore::TextureMapperPlatformLayer::swapBuffers):

2012-02-14  Shinya Kawanaka  <shinyak@google.com>

        Use youngestShadowRoot and oldestShadowRoot instead of Element::shadowRoot().
        https://bugs.webkit.org/show_bug.cgi?id=78455

        Reviewed by Hajime Morita.

        Element::shadowRoot() was used for these 3 purposes.
        1. checks a shadow root exists.
        2. gets author shadow root.
        3. gets user agent shadow root.

        We have to distinguish them when implementing multiple shadow subtrees.

        Calling for (1), (2), and (3) are convered to hasShadowRoot(),
        ShadowRootList()->youngestShadowRoot(), and ShadowRootList()->oldestShadowRoot() respectively.

        No new tests, no change in behavior.

        * WebCore.exp.in:
        * dom/Document.cpp:
        (WebCore::Document::buildAccessKeyMap):
        * dom/Element.cpp:
        (WebCore::Element::insertedIntoDocument):
        (WebCore::Element::removedFromDocument):
        (WebCore::Element::insertedIntoTree):
        (WebCore::Element::removedFromTree):
        (WebCore::Element::attach):
        (WebCore::Element::detach):
        (WebCore::Element::recalcStyle):
        (WebCore::Element::ensureShadowRoot):
        (WebCore::Element::childrenChanged):
        (WebCore::Element::focus):
        * dom/Element.h:
        (Element):
        * dom/EventDispatcher.cpp:
        (WebCore::isShadowHost):
        * dom/Node.cpp:
        (WebCore::shadowRoot):
        * dom/NodeRenderingContext.cpp:
        (WebCore::NodeRenderingContext::NodeRenderingContext):
        * dom/ShadowRoot.cpp:
        (WebCore::ShadowRoot::create):
        * dom/ShadowRootList.cpp:
        (WebCore::ShadowRootList::insertedIntoDocument):
        (WebCore):
        (WebCore::ShadowRootList::removedFromDocument):
        (WebCore::ShadowRootList::insertedIntoTree):
        (WebCore::ShadowRootList::removedFromTree):
        (WebCore::ShadowRootList::hostChildrenChanged):
        (WebCore::ShadowRootList::attach):
        (WebCore::ShadowRootList::detach):
        * dom/ShadowRootList.h:
        (ShadowRootList):
        * dom/TreeScopeAdopter.cpp:
        (WebCore::shadowRootFor):
        * html/FileInputType.cpp:
        (WebCore::FileInputType::createShadowSubtree):
        (WebCore::FileInputType::multipleAttributeChanged):
        * html/HTMLDetailsElement.cpp:
        (WebCore::HTMLDetailsElement::createShadowSubtree):
        (WebCore::HTMLDetailsElement::findMainSummary):
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::createShadowSubtree):
        * html/HTMLKeygenElement.cpp:
        (WebCore::HTMLKeygenElement::HTMLKeygenElement):
        (WebCore::HTMLKeygenElement::shadowSelect):
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::mediaControls):
        (WebCore::HTMLMediaElement::hasMediaControls):
        * html/HTMLMeterElement.cpp:
        (WebCore::HTMLMeterElement::createShadowSubtree):
        * html/HTMLProgressElement.cpp:
        (WebCore::HTMLProgressElement::createShadowSubtree):
        * html/HTMLSummaryElement.cpp:
        (WebCore::HTMLSummaryElement::createShadowSubtree):
        * html/HTMLTextAreaElement.cpp:
        (WebCore::HTMLTextAreaElement::createShadowSubtree):
        (WebCore::HTMLTextAreaElement::innerTextElement):
        (WebCore::HTMLTextAreaElement::updatePlaceholderText):
        * html/InputType.cpp:
        (WebCore::InputType::destroyShadowSubtree):
        * html/RangeInputType.cpp:
        (WebCore::RangeInputType::handleMouseDownEvent):
        (WebCore::RangeInputType::createShadowSubtree):
        * html/TextFieldInputType.cpp:
        (WebCore::TextFieldInputType::createShadowSubtree):
        (WebCore::TextFieldInputType::updatePlaceholderText):
        * html/ValidationMessage.cpp:
        (WebCore::ValidationMessage::deleteBubbleTree):
        * html/shadow/SliderThumbElement.cpp:
        (WebCore::sliderThumbElementOf):
        (WebCore::RenderSliderContainer::layout):
        (WebCore::trackLimiterElementOf):
        * page/FocusController.cpp:
        (WebCore::shadowRoot):
        * rendering/RenderFileUploadControl.cpp:
        (WebCore::RenderFileUploadControl::uploadButton):
        * svg/SVGTRefElement.cpp:
        (WebCore::SVGTRefElement::updateReferencedText):
        * testing/Internals.cpp:
        (WebCore::Internals::ensureShadowRoot):
        (WebCore::Internals::shadowRoot):
        (WebCore):
        (WebCore::Internals::youngestShadowRoot):
        (WebCore::Internals::oldestShadowRoot):
        * testing/Internals.h:
        (Internals):
        * testing/Internals.idl:

2012-02-14  Alexander Pavlov  <apavlov@chromium.org>

        Elements panel needs to be able to preview images
        https://bugs.webkit.org/show_bug.cgi?id=21570

        Reviewed by Pavel Feldman.

        * inspector/front-end/ElementsPanel.js:
        (WebInspector.ElementsPanel):
        (WebInspector.ElementsPanel.prototype.willHide):
        (WebInspector.ElementsPanel.prototype._getPopoverAnchor):
        (WebInspector.ElementsPanel.prototype._loadDimensionsForNode.resolvedNode.dimensions):
        (WebInspector.ElementsPanel.prototype._loadDimensionsForNode.resolvedNode):
        (WebInspector.ElementsPanel.prototype._loadDimensionsForNode):
        (WebInspector.ElementsPanel.prototype._showPopover.dimensionsCallback):
        (WebInspector.ElementsPanel.prototype._showPopover.showPopover):
        (WebInspector.ElementsPanel.prototype._showPopover.buildPopoverContents):
        (WebInspector.ElementsPanel.prototype._showPopover):
        * inspector/front-end/ElementsTreeOutline.js:
        (WebInspector.ElementsTreeOutline.prototype._onmousemove):
        * inspector/front-end/StylesSidebarPane.js:
        (WebInspector.StylePropertyTreeElement.prototype.updateTitle.get g):
        (WebInspector.StylePropertyTreeElement.prototype.updateTitle):
        * inspector/front-end/elementsPanel.css:
        (.image-preview-container):
        (.image-preview-container img):

2012-02-14  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: List expansion arrows is pointing down even
        when the list of eventListeners are hidden in the Elements tab
        https://bugs.webkit.org/show_bug.cgi?id=78360

        Reviewed by Timothy Hatcher.

        * inspector/front-end/elementsPanel.css:
        (.section .event-bar .header):
        (.section .event-bars .event-bar .header .title):
        (.section .event-bar .header .subtitle):
        (.section .event-bar .header::before):
        (.section .event-bar.expanded .header::before):

2012-02-14  Hayato Ito  <hayato@chromium.org>

        Make ShadowRoot.nodeType return DOCUMENT_FRAGMENT_NODE.
        https://bugs.webkit.org/show_bug.cgi?id=77514

        Reviewed by Dimitri Glazkov.

        NodeType.SHADOW_ROOT_NODE type is finally gone.

        * bindings/js/JSNodeCustom.cpp:
        (WebCore::createWrapperInline):
        * bindings/objc/DOM.mm:
        (kitClass):
        * bindings/v8/custom/V8NodeCustom.cpp:
        (WebCore::toV8Slow):
        * dom/ContainerNode.cpp:
        (WebCore::collectTargetNodes):
        (WebCore::ContainerNode::replaceChild):
        * 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:
        * dom/ShadowRoot.h:
        (ShadowRoot):
        (WebCore::toShadowRoot):
        * editing/FrameSelection.cpp:
        (WebCore::nodeIsDetachedFromDocument):
        (WebCore):
        (WebCore::FrameSelection::textWillBeReplaced):
        * editing/MarkupAccumulator.cpp:
        (WebCore::MarkupAccumulator::appendStartMarkup):
        * html/parser/HTMLElementStack.cpp:
        (WebCore::HTMLNames::isRootNode):
        (WebCore::HTMLElementStack::pushRootNode):
        * html/parser/HTMLElementStack.h:
        (WebCore::isInHTMLNamespace):
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::pushChildNodesToFrontend):
        (WebCore::InspectorDOMAgent::buildObjectForNode):
        * xml/XPathUtil.cpp:
        (WebCore::XPath::isValidContextNode):

2012-02-14  Andreas Kling  <awesomekling@apple.com>

        StylePropertySet: Try to find a CSSValuePool for identifier values.
        <http://webkit.org/b/78590>

        Reviewed by Antti Koivisto.

        For StylePropertySets with a parent element (inline and attribute style),
        grab at the parentElement()->document() to locate a CSSValuePool.
        This code will change soon in the CSSOM refactoring and moreso once we
        figure out how to have a global CSSValuePool, but I'm hoping it will buy
        us some perf back in the meantime.

        * css/StylePropertySet.cpp:
        (WebCore::StylePropertySet::setProperty):

2012-02-14  Nikolas Zimmermann  <nzimmermann@rim.com>

        Convert svg/animations to use SMIL methods for driving the timeline
        https://bugs.webkit.org/show_bug.cgi?id=78422

        Reviewed by Hajime Morita.

        Fix last-minute typo in clearTimesWithDynamicOrigins, leading to assertions browsing the W3C SVG animation tests.
        Covered by existing tests in svg/animations.

        * svg/SVGAnimationElement.cpp: Remove unused endedActiveInterval.
        * svg/SVGAnimationElement.h: Ditto.
        * svg/animation/SVGSMILElement.cpp:
        (WebCore::clearTimesWithDynamicOrigins): Fix order of walking the times list.
        (WebCore::SVGSMILElement::reset): Move calls to clearTimesWithDynamicOrigins into endedActiveInterval.
        (WebCore::SVGSMILElement::endedActiveInterval):
        * svg/animation/SVGSMILElement.h:
        (SVGSMILElement): Devirtualize endedActiveInterval.

2012-02-14  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r107661.
        http://trac.webkit.org/changeset/107661
        https://bugs.webkit.org/show_bug.cgi?id=78591

        crash on lion/qt bots (Requested by hayato on #webkit).

        * bindings/js/JSNodeCustom.cpp:
        (WebCore::createWrapperInline):
        * bindings/objc/DOM.mm:
        (kitClass):
        * bindings/v8/custom/V8NodeCustom.cpp:
        (WebCore::toV8Slow):
        * dom/ContainerNode.cpp:
        (WebCore::collectTargetNodes):
        (WebCore::ContainerNode::replaceChild):
        * 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):
        (WebCore):
        * dom/ShadowRoot.h:
        (ShadowRoot):
        (WebCore::toShadowRoot):
        * editing/FrameSelection.cpp:
        (WebCore::FrameSelection::textWillBeReplaced):
        * editing/MarkupAccumulator.cpp:
        (WebCore::MarkupAccumulator::appendStartMarkup):
        * html/parser/HTMLElementStack.cpp:
        (WebCore::HTMLNames::isRootNode):
        (WebCore::HTMLElementStack::pushRootNode):
        * html/parser/HTMLElementStack.h:
        (WebCore::isInHTMLNamespace):
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::pushChildNodesToFrontend):
        (WebCore::InspectorDOMAgent::buildObjectForNode):
        * xml/XPathUtil.cpp:
        (WebCore::XPath::isValidContextNode):

2012-02-14  Hayato Ito  <hayato@chromium.org>

        Fix typo. HTMLContentSeleciton -> HTMLContentSelection.
        https://bugs.webkit.org/show_bug.cgi?id=78571

        Reviewed by Hajime Morita.

        No tests. No change in behavior.

        * dom/NodeRenderingContext.cpp:
        (WebCore::nextRendererOf):
        (WebCore::previousRendererOf):
        (WebCore::firstRendererOf):
        (WebCore::lastRendererOf):
        * dom/ShadowRoot.cpp:
        (WebCore::ShadowRoot::insertionPointFor):
        * html/shadow/HTMLContentElement.cpp:
        (WebCore::HTMLContentElement::attach):
        * html/shadow/HTMLContentSelector.cpp:
        (WebCore::HTMLContentSelection::append):
        (WebCore::HTMLContentSelection::unlink):
        (WebCore::HTMLContentSelectionList::find):
        (WebCore::HTMLContentSelectionList::append):
        (WebCore::HTMLContentSelector::select):
        (WebCore::HTMLContentSelector::unselect):
        (WebCore::HTMLContentSelector::findFor):
        * html/shadow/HTMLContentSelector.h:
        (HTMLContentSelection):
        (WebCore::HTMLContentSelection::next):
        (WebCore::HTMLContentSelection::previous):
        (WebCore::HTMLContentSelection::HTMLContentSelection):
        (WebCore::HTMLContentSelection::create):
        (WebCore::HTMLContentSelectionList::first):
        (WebCore::HTMLContentSelectionList::last):
        (HTMLContentSelectionList):
        (WebCore::HTMLContentSelectionSet::add):
        (WebCore::HTMLContentSelectionSet::remove):
        (HTMLContentSelectionSet):
        (WebCore::HTMLContentSelectionSet::Translator::equal):
        (WebCore::HTMLContentSelectionSet::Hash::hash):
        (WebCore::HTMLContentSelectionSet::Hash::equal):
        (WebCore::HTMLContentSelectionSet::find):
        (HTMLContentSelector):

2012-02-14  Mike Lawther  <mikelawther@chromium.org>

        CSS3 calc: embed calc expressions in CSSPrimitiveValue
        https://bugs.webkit.org/show_bug.cgi?id=78446

        Reviewed by Ojan Vafai.
        
        Adds calc expressions to CSSPrimitiveValue. This enables simple (ie no mixing of
        percents with numbers/lengths) expressions to be evaluated on most properties.

        Tests: css3/calc/block-mask-overlay-image-outset-expected.html
               css3/calc/css3-radial-gradients-expected.html
               css3/calc/gradient-color-stops-expected.html

        * css/CSSCalculationValue.cpp:
        (WebCore::CSSCalcValue::computeLengthPx):
        (WebCore):
        (WebCore::CSSCalcPrimitiveValue::doubleValue):
        (CSSCalcPrimitiveValue):
        (WebCore::CSSCalcPrimitiveValue::computeLengthPx):
        (CSSCalcBinaryOperation):
        (WebCore::CSSCalcBinaryOperation::computeLengthPx):
        * css/CSSCalculationValue.h:
        (CSSCalcExpressionNode):
        (CSSCalcValue):
        * css/CSSParser.cpp:
        (WebCore::CSSParser::createPrimitiveNumericValue):
        (WebCore::CSSParser::parseValidPrimitive):
        * css/CSSPrimitiveValue.cpp:
        (WebCore::isValidCSSUnitTypeForDoubleConversion):
        (WebCore::CSSPrimitiveValue::primitiveType):
        (WebCore::CSSPrimitiveValue::init):
        (WebCore):
        (WebCore::CSSPrimitiveValue::cleanup):
        (WebCore::CSSPrimitiveValue::computeLengthDouble):
        (WebCore::CSSPrimitiveValue::getDoubleValue):
        (WebCore::CSSPrimitiveValue::getDoubleValueInternal):
        (WebCore::CSSPrimitiveValue::customCssText):
        * css/CSSPrimitiveValue.h:
        (WebCore):
        (WebCore::CSSPrimitiveValue::isLength):
        (WebCore::CSSPrimitiveValue::isNumber):
        (WebCore::CSSPrimitiveValue::isPercentage):
        (WebCore::CSSPrimitiveValue::isPx):
        (WebCore::CSSPrimitiveValue::isCalculated):
        (WebCore::CSSPrimitiveValue::isCalculatedPercentageNumber):
        (WebCore::CSSPrimitiveValue::isCalculatedPercentageLength):
        (CSSPrimitiveValue):
        (WebCore::CSSPrimitiveValue::getValue):
        (WebCore::CSSPrimitiveValue::cssCalcValue):
        * css/CSSStyleApplyProperty.cpp:
        (WebCore::ApplyPropertyBorderRadius::applyValue):

2012-02-14  Pavel Feldman  <pfeldman@chromium.org>

        Not reviewed: follow up to r107683: protect inspector sidebar from updating
        while inserting new rule.

        * inspector/front-end/StylesSidebarPane.js:
        (WebInspector.BlankStylePropertiesSection.prototype.editingSelectorCommitted.successCallback):
        (WebInspector.BlankStylePropertiesSection.prototype.editingSelectorCommitted):

2012-02-14  Rick Byers  <rbyers@.com>

        Extend Chromium V8 tracing to cover more cases
        https://bugs.webkit.org/show_bug.cgi?id=78507

        Reviewed by Eric Seidel.

        No tests modified because this affects only chrome tracing which we
        currently don't try to validate with automated tests.

        * bindings/v8/V8EventListener.cpp:
        (WebCore::V8EventListener::callListenerFunction):
        * bindings/v8/V8Proxy.cpp:
        (WebCore::V8Proxy::instrumentedCallFunction):
        (WebCore::V8Proxy::newInstance):

2012-02-14  Pavel Feldman  <pfeldman@google.com>

        Web Inspector: fire stylesheet changed event upon CSS modifications.
        https://bugs.webkit.org/show_bug.cgi?id=78500

        Reviewed by Yury Semikhatsky.

        * inspector/Inspector.json:
        * inspector/InspectorCSSAgent.cpp:
        (WebCore::InspectorCSSAgent::SetStyleSheetTextAction::mergeId):
        (InspectorCSSAgent::SetStyleSheetTextAction):
        (WebCore::InspectorCSSAgent::SetStyleSheetTextAction::merge):
        (WebCore::InspectorCSSAgent::setStyleSheetText):
        (WebCore::InspectorCSSAgent::asInspectorStyleSheet):
        (WebCore::InspectorCSSAgent::bindStyleSheet):
        (WebCore::InspectorCSSAgent::viaInspectorStyleSheet):
        (WebCore::InspectorCSSAgent::styleSheetChanged):
        (WebCore):
        * inspector/InspectorCSSAgent.h:
        (InspectorCSSAgent):
        * inspector/InspectorStyleSheet.cpp:
        (WebCore::InspectorStyleSheet::create):
        (WebCore::InspectorStyleSheet::InspectorStyleSheet):
        (WebCore::InspectorStyleSheet::reparseStyleSheet):
        (WebCore::InspectorStyleSheet::setRuleSelector):
        (WebCore::InspectorStyleSheet::addRule):
        (WebCore::InspectorStyleSheet::deleteRule):
        (WebCore::InspectorStyleSheet::setPropertyText):
        (WebCore::InspectorStyleSheet::toggleProperty):
        (WebCore::InspectorStyleSheet::fireStyleSheetChanged):
        (WebCore):
        (WebCore::InspectorStyleSheetForInlineStyle::create):
        (WebCore::InspectorStyleSheetForInlineStyle::InspectorStyleSheetForInlineStyle):
        * inspector/InspectorStyleSheet.h:
        (WebCore::InspectorStyleSheet::Listener::~Listener):
        (Listener):
        (InspectorStyleSheet):
        (InspectorStyleSheetForInlineStyle):
        * inspector/front-end/CSSStyleModel.js:
        (WebInspector.CSSStyleModel):
        (WebInspector.CSSStyleModel.prototype.setRuleSelector):
        (WebInspector.CSSStyleModel.prototype.setRuleSelector.callback):
        (WebInspector.CSSStyleModel.prototype.addRule):
        (WebInspector.CSSStyleModel.prototype.addRule.callback):
        (WebInspector.CSSStyleModel.prototype._fireStyleSheetChanged.callback):
        (WebInspector.CSSStyleModel.prototype._fireStyleSheetChanged):
        (WebInspector.CSSStyleModel.prototype.setStyleSheetText):
        (WebInspector.CSSStyleModel.prototype._undoRequested):
        (WebInspector.CSSStyleModel.prototype._undoCompleted):
        (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.CSSDispatcher.prototype.mediaQueryResultChanged):
        (WebInspector.CSSDispatcher.prototype.styleSheetChanged):
        * inspector/front-end/DOMAgent.js:
        (WebInspector.DOMAgent.prototype._emulateTouchEventsChanged):
        (WebInspector.DOMAgent.prototype.get undo):
        * inspector/front-end/ElementsPanel.js:
        (WebInspector.ElementsPanel.prototype.handleShortcut):

2012-02-11  Nikolas Zimmermann  <nzimmermann@rim.com>

        Convert svg/animations to use SMIL methods for driving the timeline
        https://bugs.webkit.org/show_bug.cgi?id=78422

        Reviewed by Dirk Schulze.

        Switch the svg/animations tests to use SVGSVGElement.setCurrentTime to drive the animation timeline.
        This should fix all flakiness we previously had with these tests - and as nice side-effect we're now
        using the standard SVG methods to drive the timeline, and thus have more coverage for these methods.
        It already exposed several SMIL bugs, that had to be fixed, before this worked:

        - beginElement()/endElement() modify the begin/end times of a SVGSMILElement. When beginElement() is
          called a new begin time is added to the list - and the same happens for endElement() with the end list.
          Unfortunately the begin/end times never get removed again, leading to incorrect instance time resolving
          when begin/endElement is called repeatedly, combined with moving the timeline through setCurrentTime.

          SMIL3 specifically demands that all 'dynamic' times in the begin/endTimes list, such that got inserted
          via beginElement/endElement - get removed if the begin/endTimes list is updated. Why?
          When calling beginElement, then endElement, then beginElement again, the begin/endTimes lists should be
          identical, w/o leftovers from any previous begin/endElement call.

          To keep track of that introduce SMILTimeWithOrigin, which holds a SMILTime and an Origin enum,
          which determines whether this SMILTime was created by the parser or dynamically created via
          beginElement/endElement.

        - SMILTimeContainer::setElapsed() (called by SVGSVGElement::setCurrentTime) forgot to update the
          animation state, when it was not paused.

        - document.getElementsByTagName('animateMotion')[0], always returned 'object SVGElement', instead of
          SVGAnimateMotion element making it impossible to query the animation start time, as the interfaces
          from SVGAnimationElement were not available. Fix that by removing the last hacks from svgtags.in,
          now that all IDLs are available.

        Now that we use SVGSVGElement::setCurrentTime to drive the animation testing, we can remove
        the DRT specific sampleSVGAnimationAtTime functionality, and its code springled all over WebCore.

        Covered by all existing tests in svg/animations.

        * WebCore.exp.in: Remove sampleAnimationAtTime() symbols.
        * WebCore.order: Ditto.
        * svg/SVGAnimationElement.cpp: Add a flag to begin/endElement, SMILTimeWithOrigin::ScriptOrigin, to indicate that these are dynamic SMILTimes, added by a script. 
        (WebCore::SVGAnimationElement::beginElementAt):
        (WebCore::SVGAnimationElement::endElementAt):
        * svg/SVGDocumentExtensions.cpp: Remove sampleAnimationAtTime.
        * svg/SVGDocumentExtensions.h: Ditto.
        * svg/animation/SMILTime.h: Add SMILTimeWithOrigin helper.
        (SMILTimeWithOrigin): Needs a SMILTime and an Origin enum entry.
        (WebCore::SMILTimeWithOrigin::SMILTimeWithOrigin):
        (WebCore::SMILTimeWithOrigin::time): Returns the SMILTime.
        (WebCore::SMILTimeWithOrigin::originIsScript): Determines if this SMILTime got added by a script.
        (WebCore::operator<): Used by std::sort.
        * svg/animation/SMILTimeContainer.cpp:
        (WebCore::SMILTimeContainer::setElapsed): Always call updateAnimations, even if the animation is not paused. Use the right elpased time value, to seek precisely to the desired position.
        (WebCore::SMILTimeContainer::timerFired): Cleanup code, no need for a local variable 'elapsed'.
        (WebCore::SMILTimeContainer::updateAnimations): Remove DRT specific sampling code, which is no longer needed.
        * svg/animation/SMILTimeContainer.h: Remove sampleAnimationAtTime.
        * svg/animation/SVGSMILElement.cpp:
        (WebCore::SVGSMILElement::SVGSMILElement): Only call resolveFirstInterval, not reset, from the constructor - it wastes unnecessary time, as everything is already initialized.
        (WebCore::clearTimesWithDynamicOrigins): Helper function to clear all SMILTimes from the begin/endTimes list, that are dynamic.
        (WebCore::SVGSMILElement::reset): Clear begin/endTimes lists, on any reset() call (when driving the animation timeline through setElapsed).
        (WebCore::SVGSMILElement::insertedIntoDocument): m_beginTimes now stores SMILTimeWithOrigins, adapt the code.
        (WebCore::sortTimeList): Ditto.
        (WebCore::SVGSMILElement::parseBeginOrEnd): Ditto.
        (WebCore::SVGSMILElement::addBeginTime): Ditto.
        (WebCore::SVGSMILElement::addEndTime): Ditto.
        (WebCore::extractTimeFromVector): Ditto.
        (WebCore::SVGSMILElement::findInstanceTime): Ditto.
        * svg/animation/SVGSMILElement.h: 
        * svg/svgtags.in: Enable animateMotion/hkern/mpath JS interfaces, which were not enabled, despite their IDLs existed.

2012-02-14  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: [REGRESSION] Copy Stack Trace is broken
        https://bugs.webkit.org/show_bug.cgi?id=78583

        Reviewed by Yury Semikhatsky.

        Test: inspector/debugger/copy-stack-trace.html

        * inspector/front-end/CallStackSidebarPane.js:
        (WebInspector.CallStackSidebarPane.prototype._copyStackTrace):

2012-02-14  Eric Seidel  <eric@webkit.org>

        Upstream Android's support for SK_B32_SHIFT to JPEGImageEncoder
        https://bugs.webkit.org/show_bug.cgi?id=78540

        Reviewed by Adam Barth.

        * platform/image-encoders/skia/JPEGImageEncoder.cpp:
        (WebCore::encodePixels):

2012-02-13  Pavel Feldman  <pfeldman@chromium.org>

        [Qt] inspector/styles/undo-add-new-rule.html crashes
        https://bugs.webkit.org/show_bug.cgi?id=78502

        Reviewed by Yury Semikhatsky.

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

2012-02-13  Nate Chapin  <japhet@chromium.org>

        Reuse CachedRawResources (e.g., XHRs) that are stored
        in the MemoryCache when appropriate.
        https://bugs.webkit.org/show_bug.cgi?id=76564

        Reviewed by Antti Koivisto.

        No new tests, expected behavior covered by existing tests.

        * html/DOMURL.cpp:
        (WebCore::DOMURL::revokeObjectURL): Objects shouldn't remain in the
            MemoryCache if revokeObjectURL is called on them.
        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::cachedResourceContent): Add CachedRawResource support.
        * inspector/InspectorResourceAgent.cpp:
        (WebCore::InspectorResourceAgent::setCacheDisabled): Immediately
            evict resources, rather than waiting for navigation, since XHRs
            should hit the cache if it has been disabled.
        * loader/cache/CachedRawResource.cpp:
        (CachedRawResourceCallback): Encapsulates the async callback for
            a cache hit for CachedRawResources.
        (WebCore::CachedRawResource::sendCallbacks): Do the work defered in didAddClient.
        (WebCore::CachedRawResource::didAddClient): Scheduled a CachedRawResourceCallback if
            we already have a response, since async XHRs may not play nicely with receiving
            their data synchronously.
        (WebCore::CachedRawResource::removeClient): Ensure we cancel a callback to a client if
            it removes itself.
        (WebCore::CachedRawResource::canReuse): Provide some basic rules for when a
            CachedRawResource can be reused.
        * loader/cache/CachedRawResource.h:
        * loader/cache/CachedResource.h:
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::determineRevalidationPolicy): Don't automatically reload
            CachedRawResources, and add a check for whether this request has already been
            made conditional.
        * xml/XMLHttpRequest.cpp:

2012-02-13  Dana Jansens  <danakj@chromium.org>

        [chromium] Set opaque flag on SkBitmap in per-tile layer updater
        https://bugs.webkit.org/show_bug.cgi?id=78498

        Reviewed by Stephen White.

        No new tests.

        * platform/graphics/chromium/BitmapSkPictureCanvasLayerTextureUpdater.cpp:
        (WebCore::BitmapSkPictureCanvasLayerTextureUpdater::Texture::prepareRect):
        * platform/graphics/chromium/SkPictureCanvasLayerTextureUpdater.h:
        (SkPictureCanvasLayerTextureUpdater):
        (WebCore::SkPictureCanvasLayerTextureUpdater::layerIsOpaque):

2012-02-13  W. James MacLean  <wjmaclean@chromium.org>

        [chromium] Remove obsolete zoom animation pathway.
        https://bugs.webkit.org/show_bug.cgi?id=78359

        Reviewed by James Robinson.

        Tests for existing pathways should not be broken. Tests for removed pathway removed previously.

        This patch removes dead code from the previous incarnation of zoom animation for chromium.

        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleGestureEvent):
        * page/FrameView.cpp:
        * page/FrameView.h:
        (FrameView):
        * platform/ScrollAnimator.cpp:
        (WebCore::ScrollAnimator::ScrollAnimator):
        * platform/ScrollAnimator.h:
        (ScrollAnimator):
        * platform/ScrollAnimatorNone.cpp:
        (WebCore::ScrollAnimatorNone::ScrollAnimatorNone):
        (WebCore::ScrollAnimatorNone::animationTimerFired):
        * platform/ScrollAnimatorNone.h:
        (ScrollAnimatorNone):
        * platform/ScrollableArea.cpp:
        * platform/ScrollableArea.h:
        * testing/InternalSettings.cpp:
        * testing/InternalSettings.h:
        (InternalSettings):
        * testing/InternalSettings.idl:
        * testing/Internals.cpp:

2012-02-13  Shinya Kawanaka  <shinyak@chromium.org>

        [Regression] r107650 broke the windows build.
        https://bugs.webkit.org/show_bug.cgi?id=78569

        Build fix, Unreviewed.

        The variable defined in switch statement should not escape from the switch statement.

        * dom/Element.cpp:
        (WebCore::Element::webkitRegionOverflow):

2012-02-13  ChangSeok Oh  <shivamidow@gmail.com>

        [GTK] Mutation Observers build is broken
        https://bugs.webkit.org/show_bug.cgi?id=78433

        Reviewed by Martin Robinson.

        Added some files missed.

        No new tests since no new feature.

        * GNUmakefile.list.am:

2012-02-13  Hayato Ito  <hayato@chromium.org>

        Make ShadowRoot.nodeType return DOCUMENT_FRAGMENT_NODE.
        https://bugs.webkit.org/show_bug.cgi?id=77514

        Reviewed by Dimitri Glazkov.

        NodeType.SHADOW_ROOT_NODE type is finally gone.

        * bindings/js/JSNodeCustom.cpp:
        (WebCore::createWrapperInline):
        * bindings/objc/DOM.mm:
        (kitClass):
        * bindings/v8/custom/V8NodeCustom.cpp:
        (WebCore::toV8Slow):
        * dom/ContainerNode.cpp:
        (WebCore::collectTargetNodes):
        (WebCore::ContainerNode::replaceChild):
        * 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:
        * dom/ShadowRoot.h:
        (ShadowRoot):
        (WebCore::toShadowRoot):
        * editing/FrameSelection.cpp:
        (WebCore::nodeIsDetachedFromDocument):
        (WebCore):
        (WebCore::FrameSelection::textWillBeReplaced):
        * editing/MarkupAccumulator.cpp:
        (WebCore::MarkupAccumulator::appendStartMarkup):
        * html/parser/HTMLElementStack.cpp:
        (WebCore::HTMLNames::isRootNode):
        (WebCore::HTMLElementStack::pushRootNode):
        * html/parser/HTMLElementStack.h:
        (WebCore::isInHTMLNamespace):
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::pushChildNodesToFrontend):
        (WebCore::InspectorDOMAgent::buildObjectForNode):
        * xml/XPathUtil.cpp:
        (WebCore::XPath::isValidContextNode):

2012-02-13  Ojan Vafai  <ojan@chromium.org>

        rtl + flex-direction:column is positioning elements incorrectly
        https://bugs.webkit.org/show_bug.cgi?id=78555

        Reviewed by Tony Chang.

        Do the y-axis flipping after we have adjusted the y-position for
        flex-align instead of before.

        Tests: css3/flexbox/flex-align-baseline.html
               css3/flexbox/flex-align-end.html

        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::alignChildren):
        The amount we adjust by also needs to be flipped for rtl+column,
        so the flipping needs to be done after we align the flex items.

2012-02-09  Ojan Vafai  <ojan@chromium.org>

        nesting horizontal flexboxes is broken
        https://bugs.webkit.org/show_bug.cgi?id=76867

        Reviewed by David Hyatt.

        This is copied from RenderDeprecatedFlexibleBox and updated
        for RenderFlexibleBox and to handle vertical writing mode.

        Tests: css3/flexbox/preferred-widths-orthogonal.html
               css3/flexbox/preferred-widths.html

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

2012-02-13  Anders Carlsson  <andersca@apple.com>

        The tile cache layer should have its background set to the page background
        https://bugs.webkit.org/show_bug.cgi?id=78560
        <rdar://problem/10857472>

        Reviewed by Sam Weinig.

        * page/FrameView.cpp:
        (WebCore::FrameView::recalculateScrollbarOverlayStyle):
        Inform the RenderLayerCompositor that the background color has changed.

        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::updateLayerBackgroundColor):
        For tile cache layers we don't need a separate contents layer for the background color so
        just set the background color on the layer directly.

        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::documentBackgroundColorDidChange):
        If the root render layer is using a tile cache layer, update its background color.

2012-02-13  Raul Hudea  <rhudea@adobe.com>

        Implement Element.webkitRegionOverflow

        [CSSRegions][CSSOM] Implement Element.regionOverflow
        https://bugs.webkit.org/show_bug.cgi?id=77863

        Reviewed by David Hyatt.

        On each layout, compute the overflowState for each region belonging to the flow thread

        Tests: fast/regions/element-region-overflow-state-vertical-rl.html
               fast/regions/element-region-overflow-state.html

        * dom/Element.cpp:
        (WebCore::Element::webkitRegionOverflow):
        (WebCore):
        * dom/Element.h:
        * dom/Element.idl:
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::computeOverflow):
        * rendering/RenderFlowThread.cpp:
        (WebCore::RenderFlowThread::computeOverflowStateForRegions):
        (WebCore):
        * rendering/RenderFlowThread.h:
        * rendering/RenderRegion.cpp:
        (WebCore::RenderRegion::RenderRegion):
        * rendering/RenderRegion.h:
        (RenderRegion):
        (WebCore::RenderRegion::regionState):
        (WebCore::RenderRegion::setRegionState):

2012-02-13  Alexey Proskuryakov  <ap@apple.com>

        File API IDLs are incorrect in Xcode project
        https://bugs.webkit.org/show_bug.cgi?id=78551

        Rubber-stamped by Dan Bernstein.

        * WebCore.xcodeproj/project.pbxproj: Corrected paths, and added missing files.

2012-02-13  Benjamin Poulain  <bpoulain@apple.com>

        SharedBuffer::getSomeData() can potentially return a pointer past the data
        https://bugs.webkit.org/show_bug.cgi?id=77799

        Reviewed by David Kilzer.

        The expected behavior from SharedBuffer::getSomeData() is to return a size and pointer of value 0
        if position is past the data.

        However, the code handling the memory mapped data is before the code ensuring the aforementioned
        condition. It is possible to return a pointer past the data, and a non-null size.

        This patch aims at preventing such invalid memory access by checking position is in the boundaries
        before any attempt is made to return the data.

        * platform/SharedBuffer.cpp:
        (WebCore::SharedBuffer::getSomeData):

2012-02-13  Benjamin Poulain  <bpoulain@apple.com>

        SharedBuffer::getSomeData() must support m_dataArray if NETWORK_CFDATA_ARRAY_CALLBACK is defined
        https://bugs.webkit.org/show_bug.cgi?id=77718

        Reviewed by David Kilzer.

        Previously, the last part of SharedBuffer::getSomeData() was systematically accessing
        the data from the segments. When NETWORK_CFDATA_ARRAY_CALLBACK is defined, there can
        be data in m_dataArray past the segment.

        The previous code was making invalid memory access pass the segment vector. This patch
        adds support for getting the data out of m_dataArray to make SharedBuffer::getSomeData()
        works with NETWORK_CFDATA_ARRAY_CALLBACK.

        This is covered by existing tests when NETWORK_CFDATA_ARRAY_CALLBACK is defined.
        The test 'fast/events/constructors/track-event-constructor.html' is a reliable test
        for this.

        * platform/SharedBuffer.cpp:
        (WebCore::SharedBuffer::getSomeData):
        * platform/SharedBuffer.h:
        (SharedBuffer):
        * platform/cf/SharedBufferCF.cpp:
        (WebCore):
        (WebCore::SharedBuffer::copySomeDataFromDataArray):

2012-02-13  Anders Carlsson  <andersca@apple.com>

        Force slow-scrolling mode when there are position:fixed elements on a page
        https://bugs.webkit.org/show_bug.cgi?id=78553
        <rdar://problem/10247934>

        Reviewed by Dan Bernstein.

        Eventually, the scrolling tree will know about fixed positioning layers so their position can be updated
        when the scroll layer position is updated. For now we'll take the simple route however.

        * page/FrameView.cpp:
        (WebCore::FrameView::addFixedObject):
        (WebCore::FrameView::removeFixedObject):
        Inform the scrolling coordinator when the number of fixed objects changes between 0 and 1.

        * page/FrameView.h:
        (WebCore::FrameView::hasFixedObjects):
        Make this public.

        * page/scrolling/ScrollingCoordinator.cpp:
        (WebCore::ScrollingCoordinator::frameViewHasSlowRepaintObjectsDidChange):
        Call updateShouldUpdateScrollLayerPositionOnMainThread.

        (WebCore::ScrollingCoordinator::frameViewHasFixedObjectsDidChange):
        Call updateShouldUpdateScrollLayerPositionOnMainThread.

        (WebCore::ScrollingCoordinator::updateMainFrameScrollPositionAndScrollLayerPosition):
        Make sure to update compositing layers here. Normally, they will be updated by layout but doing a layout
        here is too intrusive since it could potentially change the size of the page.

        (WebCore::ScrollingCoordinator::updateShouldUpdateScrollLayerPositionOnMainThread):
        If we have fixed objects or slow repaint objects we need to update the scroll layer position on the main thread.

2012-02-13  Adrienne Walker  <enne@google.com>

        [chromium] Use HashMap<..., OwnPtr<Tile>> for compositor tilemap
        https://bugs.webkit.org/show_bug.cgi?id=74154

        Reviewed by James Robinson.

        Covered by the compositing/ layout tests.

        * platform/graphics/chromium/TiledLayerChromium.cpp:
        (WebCore::UpdatableTile::create):
        (WebCore::UpdatableTile::UpdatableTile):
        (WebCore::TiledLayerChromium::createTile):
        * platform/graphics/chromium/cc/CCLayerTilingData.cpp:
        (WebCore::CCLayerTilingData::addTile):
        (WebCore::CCLayerTilingData::takeTile):
        (WebCore::CCLayerTilingData::tileAt):
        * platform/graphics/chromium/cc/CCLayerTilingData.h:
        * platform/graphics/chromium/cc/CCTiledLayerImpl.cpp:
        (WebCore::DrawableTile::create):
        (WebCore::DrawableTile::DrawableTile):
        (WebCore::CCTiledLayerImpl::createTile):

2012-02-13  Kentaro Hara  <haraken@chromium.org>

        Add [CustomToJSObject] to interfaces which have custom toJS() and toV8()
        https://bugs.webkit.org/show_bug.cgi?id=78489

        Reviewed by Adam Barth.

        This is the final step to remove hard-coding from HasCustomToV8Implementation()
        in CodeGeneratorV8.pm. This patch replaces [JSCustomToJS] with [CustomToJSObject]
        for interfaces which have custom toJS() and custom toV8().

        No tests. No change in behavior.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateHeader):
        (GenerateImplementation):
        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateHeader):

        * bindings/scripts/test/TestTypedArray.idl:
        * css/CSSRule.idl:
        * css/CSSValue.idl:
        * css/StyleSheet.idl:
        * dom/Document.idl:
        * dom/Event.idl:
        * dom/Node.idl:
        * fileapi/Blob.idl:
        * fileapi/Entry.idl:
        * fileapi/EntrySync.idl:
        * html/HTMLCollection.idl:
        * html/ImageData.idl:
        * html/canvas/ArrayBufferView.idl:
        * html/canvas/DataView.idl:
        * html/canvas/Float32Array.idl:
        * html/canvas/Float64Array.idl:
        * html/canvas/Int16Array.idl:
        * html/canvas/Int32Array.idl:
        * html/canvas/Int8Array.idl:
        * html/canvas/Uint16Array.idl:
        * html/canvas/Uint32Array.idl:
        * html/canvas/Uint8Array.idl:
        * html/canvas/Uint8ClampedArray.idl:
        * storage/IDBAny.idl:
        * storage/IDBKey.idl:
        * svg/SVGPathSeg.idl:

2012-02-13  Arun Patole  <bmf834@motorola.com>

        Chrome crashes when attempting to add cue to track element
        https://bugs.webkit.org/show_bug.cgi?id=77951

        Reviewed by Eric Carlson.

        Allocate text track's text track list of cues before using it.

        * html/TextTrack.cpp:
        (WebCore::TextTrack::cues):
        (WebCore::TextTrack::addCue):
        (WebCore::TextTrack::removeCue): return if text track list of cues is not allocated.
        (WebCore::TextTrack::ensureTextTrackCueList):Added.
        * html/TextTrack.h:
        (TextTrack):

2012-02-13  Andy Estes  <aestes@apple.com>

        Fix the Windows build.

        * platform/PlatformPasteboard.h:
        (PlatformPasteboard):

2012-02-13  Abhishek Arya  <inferno@chromium.org>

        Crash with button in multi-column layout.
        https://bugs.webkit.org/show_bug.cgi?id=78378

        Reviewed by David Hyatt.

        Button creates an anonymous wrapper and expects that new children
        be added to its m_inner anonymous block. However, splitBlock code
        incorrectly creates column blocks directly under the button.

        Test: fast/multicol/span/split-flow-anonymous-wrapper-crash.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::containingColumnsBlock):
        (WebCore::RenderBlock::columnsBlockForSpanningElement):

2012-02-09  Ojan Vafai  <ojan@chromium.org>

        nesting horizontal flexboxes is broken
        https://bugs.webkit.org/show_bug.cgi?id=76867

        Reviewed by David Hyatt.

        This is copied from RenderDeprecatedFlexibleBox and updated
        for RenderFlexibleBox and to handle vertical writing mode.

        Tests: css3/flexbox/preferred-widths-orthogonal.html
               css3/flexbox/preferred-widths.html

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

2012-02-13  Mihnea Ovidenie  <mihnea@adobe.com>

        Crash in RenderFlowThread::setRegionBoxesRegionStyle
        https://bugs.webkit.org/show_bug.cgi?id=78298

        Reviewed by David Hyatt.

        Test: fast/regions/set-box-style-in-region-crash.html

        We have to make sure that anonymous block objects get their information in RenderFlowThread
        removed properly.

        * dom/Node.cpp:
        (WebCore::Node::diff):
        Correct a comment.
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::collapseAnonymousBoxChild):
        Remove the information for anonymous block from render flow thread.
        * rendering/RenderFlowThread.cpp:
        (WebCore::RenderFlowThread::removeFlowChildInfo):
        (WebCore):
        (WebCore::RenderFlowThread::setRegionRangeForBox):
        Do not set region range if the flow thread does not have regions.
        * rendering/RenderFlowThread.h:
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::willBeDestroyed):
        Add an assert to make sure that after we remove an object, there is no remaining info
        in any render flow thread.

2012-02-13  Tony Chang  <tony@chromium.org>

        Unreviewed, rolling out r107582.
        http://trac.webkit.org/changeset/107582
        https://bugs.webkit.org/show_bug.cgi?id=78349

        Broke three inspector interactive_ui_tests

        * English.lproj/localizedStrings.js:
        * inspector/front-end/DebuggerPresentationModel.js:
        (WebInspector.DebuggerPresentationModel.prototype.uiSourceCodes):
        * inspector/front-end/ScriptsNavigator.js:
        (WebInspector.ScriptsNavigator.prototype._removeUISourceCode.get while):
        (WebInspector.ScriptsNavigator.prototype._removeUISourceCode):
        (WebInspector.ScriptsNavigator.prototype._showScriptFoldersSettingChanged):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype._uiSourceCodeAdded):
        (WebInspector.ScriptsPanel.prototype._updateExecutionLine):
        * inspector/front-end/Settings.js:
        (WebInspector.ExperimentsSettings):
        * inspector/front-end/SettingsScreen.js:
        (WebInspector.SettingsScreen):

2012-02-13  Abhishek Arya  <inferno@chromium.org>

        Incorrect children placement in multi-column layout.
        https://bugs.webkit.org/show_bug.cgi?id=78160

        Reviewed by David Hyatt.

        Test: fast/multicol/span/clone-before-after-content-crash.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::clone): no longer need to take care of making
        children noninline (remove fix r105769) since moveChild functions take
        care of adding the child properly if type of children differ. this
        function just makes sure to set the right value of childrenInline property.
        (WebCore::RenderBlock::splitBlocks): similar to moveChild functions below.
        (WebCore::RenderBlock::moveChildTo): when child is fullRemoveInsert (across
        different parents, e.g clones), we should use addChild function to make sure
        it handles the case of different type of children between fromBlock and
        toBlock correctly (specifically making children non-inline/wrapping inline
        children under anonymous blocks.).
        (WebCore::RenderBlock::moveChildrenTo):
        * rendering/RenderBlock.h:
        (RenderBlock):
        (WebCore::RenderBlock::moveAllChildrenTo): Rename to->toBlock.
        (WebCore::RenderBlock::moveChildrenTo): Rename to->toBlock.

2012-02-13  Stephen White  <senorblanco@chromium.org>

        [chromium] Implement Brightness and Contrast filters on composited
        layers.  Fix Saturation filter.
        https://bugs.webkit.org/show_bug.cgi?id=78527

        Reviewed by Kenneth Russell.

        Will be covered by existing tests in css3/filters, when enabled.

        * platform/graphics/chromium/cc/CCRenderSurfaceFilters.cpp:
        (WebCore::CCRenderSurfaceFilters::apply):

2012-02-13  Anders Carlsson  <andersca@apple.com>

        Turn off edge antialiasing for tile cache tile layers
        https://bugs.webkit.org/show_bug.cgi?id=78533
        <rdar://problem/10710798>

        Reviewed by Sam Weinig.

        * platform/graphics/ca/mac/TileCache.mm:
        (WebCore::TileCache::createTileLayer):

2012-02-13  Enrica Casucci  <enrica@apple.com>

        Build fix. Unreviewed.

        * WebCore.xcodeproj/project.pbxproj:

2012-02-13  Brady Eidson  <beidson@apple.com>

        <rdar://problem/7196487> and https://bugs.webkit.org/show_bug.cgi?id=26777
        Add https pages to the page cache in some cases

        Reviewed by Anders Carlsson.

        Test: http/tests/navigation/https-in-page-cache.html

        * history/PageCache.cpp:
        (WebCore::PageCache::canCachePageContainingThisFrame): Allow HTTPS pages that do not specify cache-control: no-cache
          or cache-control: no-store into the page cache. This will match Firefox's behavior for HTTPS in their bfcache.

2012-02-10  Enrica Casucci  <enrica@apple.com>

        Refactor Mac platform implementation of the Pasteboard class to use Platform Strategies.
        https://bugs.webkit.org/show_bug.cgi?id=78282

        This patch removes any accesss to the NSPasteboard object from the Pasteboard class which
        now makes use of a new pasteboardStrategy object that is implemented both in WebKit and
        WebKit2. The actual access to NSPasteboard is now performed inside the PlatformPasteboard
        class. Currently both WebKit and WebKit2 use the same implementation of the PasteboardStrategy
        interface but this one more step in the direction of removing access to NSPasteboard from
        the WebProcess.
        As part of the refactoring the I've reduced to a minimum the use of OBJ-C classes.

        Reviewed by Anders Carlsson.

        No new tests. No change in behavior, just code refactoring.

        * WebCore.exp.in: Added exported class PlatformPasteboard.
        * WebCore.xcodeproj/project.pbxproj: Added new files to the build.
        * editing/mac/EditorMac.mm:
        (WebCore::Editor::writeSelectionToPasteboard): New method signature that doesn't use OBJ-C types.
        * platform/Pasteboard.h:

        * platform/PasteboardStrategy.h: Added PasteboardStrategy abstract class.
        * platform/PlatformPasteboard.h: Added. This class implements access to NSPasteboard.
        * platform/PlatformStrategies.h:
        (WebCore::PlatformStrategies::pasteboardStrategy): Added.
        * platform/mac/DragDataMac.mm:
        (WebCore::DragData::canSmartReplace):
        (WebCore::insertablePasteboardTypes): 
        (WebCore::DragData::asURL):
        * platform/mac/PasteboardMac.mm:
        (WebCore::selectionPasteboardTypes): Changed to use Vector<String> instead of NSArray.
        (WebCore::writableTypesForURL): Ditto.
        (WebCore::createWritableTypesForImage): Ditto.
        (WebCore::writableTypesForImage): Ditto.
        (WebCore::Pasteboard::Pasteboard): Removed access to NSPasteboard.
        (WebCore::Pasteboard::clear): Modified to use platformStrategies()->pasteboardStrategy().
        (WebCore::Pasteboard::writeSelectionForTypes): Ditto.
        (WebCore::Pasteboard::writePlainText): Ditto.
        (WebCore::Pasteboard::writeSelection): Ditto.
        (WebCore::writeURLForTypes): Ditto.
        (WebCore::Pasteboard::writeURL): Ditto.
        (WebCore::writeFileWrapperAsRTFDAttachment): Ditto.
        (WebCore::Pasteboard::writeImage): Ditto.
        (WebCore::Pasteboard::writeClipboard): Ditto.
        (WebCore::Pasteboard::canSmartReplace): Ditto.
        (WebCore::Pasteboard::plainText): Ditto.
        (WebCore::documentFragmentWithRTF): Ditto.
        (WebCore::Pasteboard::documentFragment): Ditto.
        * platform/mac/PlatformPasteboardMac.mm: Added.
        (WebCore::PlatformPasteboard::PlatformPasteboard):
        (WebCore::PlatformPasteboard::getTypes):
        (WebCore::PlatformPasteboard::bufferForType):
        (WebCore::PlatformPasteboard::getPathnamesForType):
        (WebCore::PlatformPasteboard::stringForType):
        (WebCore::PlatformPasteboard::copy):
        (WebCore::PlatformPasteboard::setTypes):
        (WebCore::PlatformPasteboard::setBufferForType):
        (WebCore::PlatformPasteboard::setPathnamesForType):
        (WebCore::PlatformPasteboard::setStringForType):

2012-02-13  Raul Hudea  <rhudea@adobe.com>

        [CSS Regions] Inconsistent text selection behavior in regions
        https://bugs.webkit.org/show_bug.cgi?id=76456

        Reviewed by David Hyatt.

        Use the proper bounding rect when doing hit testing on flow threads.
        Based on initial patch by Alexandru Chiculita.

        Test: fast/regions/hit-test-region.html

        * rendering/RenderFlowThread.cpp:
        (WebCore::RenderFlowThread::hitTestRegion):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::hitTest):
        * rendering/RenderRegion.cpp:
        (WebCore::RenderRegion::nodeAtPoint):

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

        [Windows] Add API to enable inverted color drawing on a WebView
        https://bugs.webkit.org/show_bug.cgi?id=77382

        Reviewed by Adam Roben.

        Implement CACFLayerTreeHost::setShouldInvertColors(), which instructs
        the layer tree host to render composited content with inverted colors.

        Test: platform/win/inverted-colors/non-composited.html

        * platform/graphics/ca/win/CACFLayerTreeHost.cpp:
        (WebCore::CACFLayerTreeHost::setShouldInvertColors):
        (WebCore):
        * platform/graphics/ca/win/CACFLayerTreeHost.h:
        (CACFLayerTreeHost):
        * platform/graphics/ca/win/WKCACFViewLayerTreeHost.cpp: Use
        SOFT_LINK_OPTIONAL since WKCACFViewSetShouldInvertColors might not
        exist in older versions of WebKitQuartzCoreAdditions.
        (WebCore::WKCACFViewLayerTreeHost::setShouldInvertColors):
        (WebCore):
        * platform/graphics/ca/win/WKCACFViewLayerTreeHost.h:
        (WKCACFViewLayerTreeHost):

2012-02-13  Anders Carlsson  <andersca@apple.com>

        The scrolling tree needs to know about the back forward state of the page
        https://bugs.webkit.org/show_bug.cgi?id=78523
        <rdar://problem/10756548>

        Reviewed by Sam Weinig.

        In order to know if a page should rubber-band in the horizontal direction, the scrolling tree
        needs to know about the back/forward state of the page.

        * WebCore.exp.in:
        Export new symbols.

        * WebCore.xcodeproj/project.pbxproj:
        * page/scrolling/ScrollingTree.cpp:
        (WebCore::ScrollingTree::ScrollingTree):
        Initialize m_canGoBack and m_canGoForward.

        (WebCore::ScrollingTree::updateBackForwardState):
        Update m_canGoBack and m_canGoForward.

        * page/scrolling/ScrollingTree.h:
        (WebCore::ScrollingTree::canGoBack):
        (WebCore::ScrollingTree::canGoForward):
        Add getters.

        * page/scrolling/mac/ScrollingTreeNodeMac.mm:
        (WebCore::ScrollingTreeNodeMac::shouldRubberBandInDirection):
        Implement this, using canGoBack and canGoForward.

2012-02-13  Brady Eidson  <beidson@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=78520
        Cleanup PageCache::canCachePageContainingThisFrame readability

        Reviewed by Anders Carlsson.

        No new tests. (Code cleanup, no change in behavior)

        * history/PageCache.cpp:
        (WebCore::PageCache::canCachePageContainingThisFrame): Store three commonly
          getter-accessed variables in local variables for readability.

2012-02-13  Timothy Hatcher  <timothy@apple.com>

        Don't include a separator before the "Inspect Element" context menu item when the context menu is empty.

        https://webkit.org/b/78312

        Reviewed by Brian Weinstein.

        * page/ContextMenuController.cpp:
        (WebCore::ContextMenuController::addInspectElementItem): Check itemCount before appending the separator.
        * platform/gtk/ContextMenuGtk.cpp:
        (WebCore::ContextMenu::itemCount): Added. Implement so this builds on GTK.

2012-02-13  Patrick Gansterer  <paroga@webkit.org>

        [WIN] Define HWND_MESSAGE if not done already
        https://bugs.webkit.org/show_bug.cgi?id=78341

        Reviewed by Adam Roben.

        HWND_MESSAGE is not defined on WinCE.
        Set it to 0 when not defined to avoid #ifdefs.

        * platform/win/PasteboardWin.cpp:
        (WebCore::Pasteboard::Pasteboard):
        * platform/win/WindowsExtras.h:
        (WebCore):

2012-02-13  Chris Fleizach  <cfleizach@apple.com>

        AX: <mark> element should be exposed through attributes
        https://bugs.webkit.org/show_bug.cgi?id=75727

        Reviewed by Beth Dakin.

        Exposes an attribute indicating that an element has highlighting through attributedStringForRange.
        Also allows the search mechanism to find elements with this style.

        Test: platform/mac/accessibility/attributed-string-includes-highlighting.html

        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::isAccessibilityObjectSearchMatch):
        (WebCore::AccessibilityObject::hasHighlighting):
        * accessibility/AccessibilityObject.h:
        * accessibility/mac/WebAccessibilityObjectWrapper.mm:
        (createAccessibilitySearchKeyMap):
        (AXAttributeStringSetStyle):

2012-02-13  Chris Fleizach  <cfleizach@apple.com>

        AX: the web area should report that focus can be set to itself
        https://bugs.webkit.org/show_bug.cgi?id=78272

        Reviewed by Beth Dakin.

        Test: platform/mac/accessibility/webarea-can-set-focus.html

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::canSetFocusAttribute):
        * accessibility/AccessibilityTable.cpp:
        (WebCore::AccessibilityTable::isDataTable):
           Fixed erroneous comment.

2012-02-13  Patrick Gansterer  <paroga@webkit.org>

        Port RunLoop to WinCE
        https://bugs.webkit.org/show_bug.cgi?id=76781

        Reviewed by Adam Roben.

        * platform/win/RunLoopWin.cpp:
        (WebCore::RunLoop::registerRunLoopMessageWindowClass):

2012-02-10  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Make ScriptsNavigator default file selector.
        https://bugs.webkit.org/show_bug.cgi?id=78349

        Reviewed by Pavel Feldman.

        Moved ScriptsNavigator out of experiments.
        Introduced new setting "useScriptsNavigator" with true as default value.
        Updated scripts panel tests related to file selector.

        Tests: inspector/debugger/scripts-combobox-file-selector-history.html
               inspector/debugger/scripts-file-selector.html

        * English.lproj/localizedStrings.js:
        * inspector/front-end/DebuggerPresentationModel.js:
        (WebInspector.DebuggerPresentationModel.prototype.uiSourceCodes):
        * inspector/front-end/ScriptsNavigator.js:
        (WebInspector.ScriptsNavigator.prototype._removeUISourceCode):
        (WebInspector.ScriptsNavigator.prototype._showScriptFoldersSettingChanged):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype._uiSourceCodeAdded):
        (WebInspector.ScriptsPanel.prototype._addUISourceCode):
        (WebInspector.ScriptsPanel.prototype._updateExecutionLine):
        * inspector/front-end/Settings.js:
        (WebInspector.ExperimentsSettings):
        * inspector/front-end/SettingsScreen.js:
        (WebInspector.SettingsScreen):

2012-02-13  Andreas Kling  <awesomekling@apple.com>

        Make HTMLTableCaptionElement inherit from HTMLElement.
        <http://webkit.org/b/78505>

        Reviewed by Antti Koivisto.

        HTMLTableCaptionElement was already bypassing its base class (HTMLTablePartElement)
        and calling up to HTMLElement in all its overrides. Just make it an HTMLElement
        instead since it doesn't use anything from HTMLTablePartElement.
        Remove parseAttribute() overload since it's no longer needed.

        * html/HTMLTableCaptionElement.cpp:
        (WebCore::HTMLTableCaptionElement::HTMLTableCaptionElement):
        (WebCore::HTMLTableCaptionElement::isPresentationAttribute):
        (WebCore::HTMLTableCaptionElement::collectStyleForAttribute):
        * html/HTMLTableCaptionElement.h:

2012-02-13  Andreas Kling  <awesomekling@apple.com>

        HTMLMarqueeElement: Don't cache presence of truespeed attribute.
        <http://webkit.org/b/78483>

        Reviewed by Antti Koivisto.

        Out-of-line minimumDelay() and look up the "truespeed" attribute there instead
        of caching the minimum delay in parseAttribute().
        Remove HTMLMarqueeElement::parseAttribute() as it's no longer needed.

        * html/HTMLMarqueeElement.cpp:
        (WebCore::HTMLMarqueeElement::HTMLMarqueeElement):
        (WebCore::HTMLMarqueeElement::minimumDelay):
        * html/HTMLMarqueeElement.h:
        (HTMLMarqueeElement):

2012-02-13  Andrey Kosyakov  <caseq@chromium.org>

        Web Inspector: [refactoring] factor common timeline UI state into TimelinePresentationModel
        https://bugs.webkit.org/show_bug.cgi?id=78501

        Reviewed by Pavel Feldman.

        * inspector/front-end/TimelineOverviewPane.js:
        (WebInspector.TimelineOverviewPane):
        (WebInspector.TimelineOverviewPane.prototype._onCategoryVisibilityChanged):
        (WebInspector.TimelineOverviewPane.prototype.update):
        (WebInspector.TimelineOverviewPane.prototype.sidebarResized):
        (WebInspector.TimelineOverviewPane.prototype._setWindowPosition):
        (WebInspector.TimelineOverviewPane.prototype.scrollWindow):
        * inspector/front-end/TimelinePanel.js:
        (WebInspector.TimelinePanel):
        (WebInspector.TimelinePanel.prototype._createTopPane):
        (WebInspector.TimelinePanel.prototype.get statusBarItems):
        (WebInspector.TimelinePanel.prototype.get _recordStyles):
        (WebInspector.TimelinePanel.prototype._createStatusbarButtons):
        (WebInspector.TimelinePanel.prototype._createTimelineCategoryStatusBarCheckbox):
        (WebInspector.TimelinePanel.prototype._onCategoryCheckboxClicked):
        (WebInspector.TimelinePanel.prototype._innerAddRecordToTimeline):
        (WebInspector.TimelinePanel.prototype.sidebarResized):
        (WebInspector.TimelinePanel.prototype._updateBoundaries):
        (WebInspector.TimelinePanel.prototype._showPopover):
        (WebInspector.TimelinePresentationModel):
        (WebInspector.TimelinePresentationModel.prototype.get categories):
        (WebInspector.TimelinePresentationModel.prototype.addCategory):
        (WebInspector.TimelinePresentationModel.prototype.setWindowPosition):
        (WebInspector.TimelinePresentationModel.prototype.setCategoryVisibility):

2012-02-13  Joel Webber  <jgw@google.com>

        Use requestAnimationFrame callbacks to pump CSS animations
        https://bugs.webkit.org/show_bug.cgi?id=64591

        Reviewed by James Robinson.

        No new tests needed (covered by tests in animations/*).

        * page/FrameView.cpp:
        (WebCore::FrameView::serviceScriptedAnimations):
        * page/animation/AnimationController.cpp:
        (WebCore::AnimationControllerPrivate::updateAnimations):
        (WebCore::AnimationControllerPrivate::updateAnimationTimer):
        (WebCore::AnimationControllerPrivate::fireEventsAndUpdateStyle):
        (WebCore::AnimationControllerPrivate::animationFrameCallbackFired):
        (WebCore::AnimationController::updateAnimations):
        (WebCore::AnimationController::serviceAnimations):
        * page/animation/AnimationController.h:
        * page/animation/AnimationControllerPrivate.h:

2012-02-13  Patrick Gansterer  <paroga@webkit.org>

        Add WindowsExtras.h
        https://bugs.webkit.org/show_bug.cgi?id=78340

        Reviewed by Adam Roben.

        Add a new file to share common code for Win32/WinCE differences.

        * platform/win/PopupMenuWin.cpp:
        (WebCore::PopupMenuWin::PopupMenuWndProc):
        * platform/win/RunLoopWin.cpp:
        (WebCore::RunLoop::RunLoopWndProc):
        * platform/win/WindowsExtras.h: Added.
        (WebCore):
        (WebCore::getWindowPointer):
        (WebCore::setWindowPointer):

2012-02-13  Andreas Kling  <awesomekling@apple.com>

        Don't mark element for style recalc when modifying its attribute style.
        <http://webkit.org/b/78497>

        Reviewed by Antti Koivisto.

        StylePropertySet::setNeedsStyleRecalc() shouldn't do anything for attribute styles.
        Their invalidation is handled exclusively by StyledElement::attributeChanged().
        Elements with presentation attributes were being marked for style recalc twice,
        once when the attribute changed, and again during attribute style update, below the
        call to collectStyleForAttribute().

        * css/StylePropertySet.cpp:
        (WebCore::StylePropertySet::setNeedsStyleRecalc):

2012-02-13  Caio Marcelo de Oliveira Filho  <caio.oliveira@openbossa.org>

        Move attribute storage from NamedNodeMap to ElementAttributeData
        https://bugs.webkit.org/show_bug.cgi?id=77674

        Reviewed by Andreas Kling.

        Move m_attributes vector from NamedNodeMap to ElementAttributeData. Make the
        remaining callsites interact with ElementAttributeData if possible. The parsing
        code is still interacting with NamedNodeMap, so some functions remained as
        wrappers there. A next change will it use ElementAttributeData instead.

        The code for DOM exported functions remained in NamedNodeMap. This implementation
        should move to Element in a next change, too.

        * dom/Attr.h:
        (Attr):
        * dom/Element.cpp:
        (WebCore::Element::setAttribute):
        (WebCore::Element::setAttributeInternal):
        (WebCore::Element::parserSetAttributeMap):
        (WebCore::Element::removeAttribute):
        (WebCore::Element::hasAttribute):
        (WebCore::Element::hasAttributeNS):
        (WebCore::Element::normalizeAttributes):
        * dom/Element.h:
        (Element):
        (WebCore::Element::ensureUpdatedAttributes):
        (WebCore::Element::ensureAttributeData):
        (WebCore):
        (WebCore::Element::updatedAttributeData):
        (WebCore::Element::ensureUpdatedAttributeData):
        These *AttributeData functions are the correct correct way for callers to touch
        the details of attribute storage. The "updated" variants will update invalid
        attributes before return.

        (WebCore::Element::setAttributesFromElement):
        * dom/ElementAttributeData.cpp:
        (WebCore::ElementAttributeData::~ElementAttributeData):
        (WebCore):
        (WebCore::ElementAttributeData::ensureInlineStyleDecl):
        (WebCore::ElementAttributeData::addAttribute):
        (WebCore::ElementAttributeData::removeAttribute):
        (WebCore::ElementAttributeData::detachAttributesFromElement):
        (WebCore::ElementAttributeData::copyAttributesToVector):
        (WebCore::ElementAttributeData::getAttributeItemIndexSlowCase):
        (WebCore::ElementAttributeData::setAttributes): Make use of the assumption that
        this will only be called with a valid Element, since the only call site is an
        Element method.
        (WebCore::ElementAttributeData::clearAttributes):
        (WebCore::ElementAttributeData::replaceAttribute): Make use of the assumption
        this will only be called with a valid Element, since the only call site return
        early if there's no Element.
        * dom/ElementAttributeData.h:
        (ElementAttributeData):
        (WebCore::ElementAttributeData::length):
        (WebCore::ElementAttributeData::isEmpty):
        (WebCore::ElementAttributeData::attributeItem):
        (WebCore::ElementAttributeData::removeAttribute):
        (WebCore):
        (WebCore::ElementAttributeData::getAttributeItem):
        (WebCore::ElementAttributeData::getAttributeItemIndex):
        * dom/NamedNodeMap.cpp:
        (WebCore::NamedNodeMap::getNamedItem):
        (WebCore::NamedNodeMap::removeNamedItem):
        (WebCore::NamedNodeMap::setNamedItem):
        (WebCore::NamedNodeMap::item):
        (WebCore::NamedNodeMap::detachFromElement):
        * dom/NamedNodeMap.h:
        (WebCore::NamedNodeMap::length):
        (WebCore::NamedNodeMap::isEmpty):
        (WebCore::NamedNodeMap::attributeItem):
        (WebCore::NamedNodeMap::getAttributeItem):
        (WebCore::NamedNodeMap::getAttributeItemIndex):
        (WebCore::NamedNodeMap::shrinkToLength):
        (WebCore::NamedNodeMap::reserveInitialCapacity):
        (WebCore::NamedNodeMap::addAttribute):
        (WebCore::NamedNodeMap::removeAttribute):
        (NamedNodeMap):
        * dom/StyledElement.cpp:
        (WebCore::StyledElement::updateAttributeStyle):
        * dom/StyledElement.h:
        (WebCore::StyledElement::ensureInlineStyleDecl):
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::updateType):
        * svg/properties/SVGAnimatedPropertySynchronizer.h:
        * xml/parser/XMLDocumentParserQt.cpp:
        (WebCore::XMLDocumentParser::XMLDocumentParser):

2012-02-13  Alexei Filippov  <alexeif@chromium.org>

        Web Inspector: wrong percent calculations for empty snapshot.
        https://bugs.webkit.org/show_bug.cgi?id=78329

        Reviewed by Yury Semikhatsky.

        * inspector/front-end/DetailedHeapshotGridNodes.js:
        (WebInspector.HeapSnapshotGridNode.prototype._createValueCell):

2012-02-13  Alexei Filippov  <alexeif@chromium.org>

        Web Inspector: add class filter to heap profiler.
        https://bugs.webkit.org/show_bug.cgi?id=78362

        Reviewed by Yury Semikhatsky.

        * inspector/front-end/DataGrid.js:
        (WebInspector.DataGrid.prototype.insertChild):
        * inspector/front-end/DetailedHeapshotView.js:
        (WebInspector.HeapSnapshotSortableDataGrid.prototype._performSorting):
        (WebInspector.HeapSnapshotConstructorsDataGrid):
        (WebInspector.HeapSnapshotConstructorsDataGrid.prototype._nameFilterChanged):
        (WebInspector.DetailedHeapshotView.prototype._changeNameFilter):
        * inspector/front-end/heapProfiler.css:
        (.detailed-heapshot-view .constructors-view-grid):
        (.detailed-heapshot-view .constructors-view-toolbar):
        (.detailed-heapshot-view .constructors-view-toolbar input.constructors-view-filter):

2012-02-13  Peter Rybin  <peter.rybin@gmail.com>

        Web Inspector: In Inspector.json PropertyDescriptor.writable should be declared optional
        https://bugs.webkit.org/show_bug.cgi?id=77917

        Reviewed by Pavel Feldman.

        Property descriptor is fixed in Inspector.json. Also retroactively in
        0.1 and 1.0.
        Injected script in instructed to never return null property values.

        * inspector/InjectedScriptSource.js:
        (.):
        * inspector/Inspector-0.1.json:
        * inspector/Inspector-1.0.json:
        * inspector/Inspector.json:

2012-02-13  ChangSeok Oh  <shivamidow@gmail.com>

        [GTK] Revise configuration for MHTML
        https://bugs.webkit.org/show_bug.cgi?id=78364

        Reviewed by Gustavo Noronha Silva.

        Added mhtml directory and removed target files duplicated to build when enabling mhtml.
        Archive.cpp, ArchiveFactory.cpp & their headers are included at the above line.
        This duplication has caused build-break if mhtml is enabled.

        No new tests, since no new features.

        * GNUmakefile.am:
        * GNUmakefile.list.am:

2012-02-06  Raphael Kubo da Costa  <kubo@profusion.mobi>

        [EFL] Drop support for the Curl network backend.
        https://bugs.webkit.org/show_bug.cgi?id=77874

        Reviewed by Eric Seidel.

        Nobody seems to be maintaining the Curl backend in WebCore, the
        EFL port developers all seem to be using the Soup backend and the
        port itself has many features which are only implemented for the
        latter.

        No new tests, just some dependency plumbing.

        * PlatformEfl.cmake: Build the glib/soup source files
        unconditionally.
        * platform/efl/FileSystemEfl.cpp: Remove ENABLE(GLIB_SUPPORT) check.

2012-02-13  Pavel Feldman  <pfeldman@google.com>

        Web Inspector: wrap settings selector text and adding a rule with undoable actions.
        https://bugs.webkit.org/show_bug.cgi?id=78482

        Reviewed by Yury Semikhatsky.

        Tests: inspector/styles/undo-add-new-rule.html
               inspector/styles/undo-set-selector-text.html

        * inspector/InspectorCSSAgent.cpp:
        (WebCore::InspectorCSSAgent::StyleSheetAction::StyleSheetAction):
        (InspectorCSSAgent::StyleSheetAction):
        (WebCore::InspectorCSSAgent::SetStyleSheetTextAction::SetStyleSheetTextAction):
        (WebCore::InspectorCSSAgent::SetStyleSheetTextAction::perform):
        (WebCore::InspectorCSSAgent::SetStyleSheetTextAction::undo):
        (WebCore::InspectorCSSAgent::SetPropertyTextAction::SetPropertyTextAction):
        (WebCore::InspectorCSSAgent::SetPropertyTextAction::perform):
        (WebCore::InspectorCSSAgent::SetPropertyTextAction::undo):
        (WebCore::InspectorCSSAgent::SetPropertyTextAction::mergeId):
        (WebCore::InspectorCSSAgent::TogglePropertyAction::TogglePropertyAction):
        (WebCore::InspectorCSSAgent::TogglePropertyAction::perform):
        (WebCore::InspectorCSSAgent::TogglePropertyAction::undo):
        (InspectorCSSAgent::SetRuleSelectorAction):
        (WebCore::InspectorCSSAgent::SetRuleSelectorAction::SetRuleSelectorAction):
        (WebCore::InspectorCSSAgent::SetRuleSelectorAction::perform):
        (WebCore::InspectorCSSAgent::SetRuleSelectorAction::undo):
        (WebCore):
        (InspectorCSSAgent::AddRuleAction):
        (WebCore::InspectorCSSAgent::AddRuleAction::AddRuleAction):
        (WebCore::InspectorCSSAgent::AddRuleAction::perform):
        (WebCore::InspectorCSSAgent::AddRuleAction::undo):
        (WebCore::InspectorCSSAgent::AddRuleAction::newRuleId):
        (WebCore::InspectorCSSAgent::setStyleSheetText):
        (WebCore::InspectorCSSAgent::setPropertyText):
        (WebCore::InspectorCSSAgent::toggleProperty):
        (WebCore::InspectorCSSAgent::setRuleSelector):
        (WebCore::InspectorCSSAgent::addRule):
        (WebCore::InspectorCSSAgent::asInspectorStyleSheet):
        (WebCore::InspectorCSSAgent::bindStyleSheet):
        (WebCore::InspectorCSSAgent::viaInspectorStyleSheet):
        (WebCore::InspectorCSSAgent::styleSheetChanged):
        * inspector/InspectorCSSAgent.h:
        (InspectorCSSAgent):
        * inspector/InspectorStyleSheet.cpp:
        (WebCore::InspectorStyleSheet::create):
        (WebCore::InspectorStyleSheet::InspectorStyleSheet):
        (WebCore::InspectorStyleSheet::reparseStyleSheet):
        (WebCore::InspectorStyleSheet::ruleSelector):
        (WebCore):
        (WebCore::InspectorStyleSheet::setRuleSelector):
        (WebCore::InspectorStyleSheet::addRule):
        (WebCore::InspectorStyleSheet::deleteRule):
        (WebCore::InspectorStyleSheet::setPropertyText):
        (WebCore::InspectorStyleSheet::toggleProperty):
        (WebCore::InspectorStyleSheet::fireStyleSheetChanged):
        (WebCore::InspectorStyleSheetForInlineStyle::create):
        (WebCore::InspectorStyleSheetForInlineStyle::InspectorStyleSheetForInlineStyle):
        * inspector/InspectorStyleSheet.h:
        (InspectorStyleSheet):
        (WebCore::InspectorStyleSheet::styleId):
        (InspectorStyleSheetForInlineStyle):

2012-02-13  Hayato Ito  <hayato@chromium.org>

        Rename names defined in ContentInclutionSelector to more intuitive names.
        https://bugs.webkit.org/show_bug.cgi?id=78333

        Reviewed by Hajime Morita.

        This is just refactoring, renaming non-intuitive names to more intuitive names
        so that they match the terms in the spec.

        No tests. No change in behavior.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/NodeRenderingContext.cpp:
        (WebCore::NodeRenderingContext::NodeRenderingContext):
        (WebCore::nextRendererOf):
        (WebCore::previousRendererOf):
        (WebCore::firstRendererOf):
        (WebCore::lastRendererOf):
        (WebCore::NodeRenderingContext::nextRenderer):
        (WebCore::NodeRenderingContext::previousRenderer):
        * dom/NodeRenderingContext.h:
        (NodeRenderingContext):
        (WebCore::NodeRenderingContext::insertionPoint):
        * dom/ShadowRoot.cpp:
        (WebCore::ShadowRoot::insertionPointFor):
        (WebCore::ShadowRoot::isSelectorActive):
        (WebCore::ShadowRoot::attach):
        (WebCore::ShadowRoot::selector):
        (WebCore::ShadowRoot::ensureSelector):
        * dom/ShadowRoot.h:
        (WebCore):
        (ShadowRoot):
        * html/shadow/ContentInclusionSelector.h: Removed.
        * html/shadow/HTMLContentElement.cpp:
        (WebCore::HTMLContentElement::HTMLContentElement):
        (WebCore::HTMLContentElement::attach):
        (WebCore::HTMLContentElement::detach):
        * html/shadow/HTMLContentElement.h:
        (WebCore):
        (WebCore::HTMLContentElement::selections):
        (WebCore::HTMLContentElement::hasSelection):
        (HTMLContentElement):
        * html/shadow/HTMLContentSelector.cpp: Renamed from Source/WebCore/html/shadow/ContentInclusionSelector.cpp.
        (WebCore):
        (WebCore::HTMLContentSeleciton::append):
        (WebCore::HTMLContentSeleciton::unlink):
        (WebCore::HTMLContentSelectionList::HTMLContentSelectionList):
        (WebCore::HTMLContentSelectionList::~HTMLContentSelectionList):
        (WebCore::HTMLContentSelectionList::find):
        (WebCore::HTMLContentSelectionList::clear):
        (WebCore::HTMLContentSelectionList::append):
        (WebCore::HTMLContentSelector::HTMLContentSelector):
        (WebCore::HTMLContentSelector::~HTMLContentSelector):
        (WebCore::HTMLContentSelector::select):
        (WebCore::HTMLContentSelector::unselect):
        (WebCore::HTMLContentSelector::findFor):
        (WebCore::HTMLContentSelector::didSelect):
        (WebCore::HTMLContentSelector::willSelectOver):
        * html/shadow/HTMLContentSelector.h: Added.
        (WebCore):
        (HTMLContentSeleciton):
        (WebCore::HTMLContentSeleciton::insertionPoint):
        (WebCore::HTMLContentSeleciton::node):
        (WebCore::HTMLContentSeleciton::next):
        (WebCore::HTMLContentSeleciton::previous):
        (WebCore::HTMLContentSeleciton::HTMLContentSeleciton):
        (WebCore::HTMLContentSeleciton::create):
        (HTMLContentSelectionList):
        (WebCore::HTMLContentSelectionList::first):
        (WebCore::HTMLContentSelectionList::last):
        (WebCore::HTMLContentSelectionList::isEmpty):
        (HTMLContentSelectionSet):
        (WebCore::HTMLContentSelectionSet::add):
        (WebCore::HTMLContentSelectionSet::remove):
        (WebCore::HTMLContentSelectionSet::isEmpty):
        (Translator):
        (WebCore::HTMLContentSelectionSet::Translator::hash):
        (WebCore::HTMLContentSelectionSet::Translator::equal):
        (WebCore::HTMLContentSelectionSet::Hash::hash):
        (WebCore::HTMLContentSelectionSet::Hash::equal):
        (Hash):
        (WebCore::HTMLContentSelectionSet::find):
        (HTMLContentSelector):
        (WebCore::HTMLContentSelector::hasCandidates):
        * testing/Internals.cpp:
        (WebCore::Internals::includerFor):

2012-02-13  No'am Rosenthal  <noam.rosenthal@nokia.com>

        [Texmap] morphing-cubes animation appears too close when clicking the button
        https://bugs.webkit.org/show_bug.cgi?id=78476

        Fixed bug in TextureMapperAnimation that made transform animations that go to/from identity
        to not work.

        Reviewed by Simon Hausmann.

        No behavior changes.

        * platform/graphics/texmap/TextureMapperAnimation.cpp:
        (WebCore::applyTransformAnimation):

2012-02-13  Yosifumi Inoue  <yosin@chromium.org>

        [Forms] Use enum instead of bool for HTMLInputElement::setValue
        https://bugs.webkit.org/show_bug.cgi?id=75217

        Reviewed by Kent Tamura.

        Use TextFieldEventBehavior enum instead of sendChangeEvent bool
        parameter for HTMLInputElement::setValue method. This new enum
        parameter will be extended to dispatch input and change events
        when user agent populates input field as specified in
        "Common events behavior" of HTML5 standard.

        This patch is required for fixing bug 75067 "[Forms] Spin buttons
        of number input type should fire both input and change event."

        No new tests. Existing tests cover this patch.

        * html/BaseButtonInputType.cpp:
        (WebCore::BaseButtonInputType::setValue):
        * html/BaseButtonInputType.h:
        * html/BaseCheckableInputType.cpp:
        (WebCore::BaseCheckableInputType::setValue):
        * html/BaseCheckableInputType.h:
        * html/BaseDateAndTimeInputType.cpp:
        (WebCore::BaseDateAndTimeInputType::setValueAsNumber):
        * html/BaseDateAndTimeInputType.h:
        * html/CheckboxInputType.cpp:
        (WebCore::CheckboxInputType::willDispatchClick):
        * html/ColorInputType.cpp:
        (WebCore::ColorInputType::setValue):
        * html/ColorInputType.h:
        * html/FileInputType.cpp:
        (WebCore::FileInputType::setValue):
        * html/FileInputType.h:
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::applyStep):
        (WebCore::HTMLInputElement::stepUp):
        (WebCore::HTMLInputElement::stepDown):
        (WebCore::HTMLInputElement::setChecked):
        (WebCore::HTMLInputElement::setValueForUser):
        (WebCore::HTMLInputElement::setValue):
        (WebCore::HTMLInputElement::setValueInternal):
        (WebCore::HTMLInputElement::setValueAsNumber):
        (WebCore::HTMLInputElement::stepUpFromRenderer):
        * html/HTMLInputElement.h:
        * html/HTMLTextFormControlElement.h:
        * html/HiddenInputType.cpp:
        (WebCore::HiddenInputType::setValue):
        * html/HiddenInputType.h:
        * html/InputType.cpp:
        (WebCore::InputType::setValueAsNumber):
        (WebCore::InputType::setValue):
        * html/InputType.h:
        * html/NumberInputType.cpp:
        (WebCore::NumberInputType::setValueAsNumber):
        * html/NumberInputType.h:
        * html/RadioInputType.cpp:
        (WebCore::RadioInputType::willDispatchClick):
        * html/RangeInputType.cpp:
        (WebCore::RangeInputType::setValueAsNumber):
        (WebCore::RangeInputType::handleKeydownEvent):
        (WebCore::RangeInputType::setValue):
        * html/RangeInputType.h:
        * html/TextFieldInputType.cpp:
        (WebCore::TextFieldInputType::setValue):
        * html/TextFieldInputType.h:

2012-02-13  Andreas Kling  <awesomekling@apple.com>

        Move attribute style invalidation to attributeChanged().
        <http://webkit.org/b/78461>

        Reviewed by Antti Koivisto.

        Moved attribute style invalidation out of the parseAttribute() overloads
        and added an "isPresentationAttribute(Attribute*) virtual to StyledElement.
        Returning true for a given Attribute will cause attribute style invalidation
        when that attribute passes through attributeChanged().

        Removed a couple of parseAttribute() overloads whose only remaining purpose
        was invalidating attribute style.

        For form elements that deliberately don't map the "align" attribute, added
        short-circuits in isPresentationAttribute instead of falling back to the
        respective base class (which may othweise then map "align")

        * dom/StyledElement.cpp:
        (WebCore::StyledElement::attributeChanged):
        * dom/StyledElement.h:
        (WebCore::StyledElement::isPresentationAttribute):
        * html/HTMLBRElement.cpp:
        (WebCore::HTMLBRElement::isPresentationAttribute):
        * html/HTMLBRElement.h:
        * html/HTMLBodyElement.cpp:
        (WebCore::HTMLBodyElement::isPresentationAttribute):
        (WebCore::HTMLBodyElement::collectStyleForAttribute):
        (WebCore::HTMLBodyElement::parseAttribute):
        * html/HTMLBodyElement.h:
        * html/HTMLButtonElement.cpp:
        (WebCore::HTMLButtonElement::isPresentationAttribute):
        (WebCore::HTMLButtonElement::parseAttribute):
        * html/HTMLButtonElement.h:
        * html/HTMLDivElement.cpp:
        (WebCore::HTMLDivElement::isPresentationAttribute):
        * html/HTMLDivElement.h:
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::isPresentationAttribute):
        (WebCore::HTMLElement::parseAttribute):
        * html/HTMLElement.h:
        * html/HTMLEmbedElement.cpp:
        (WebCore::HTMLEmbedElement::isPresentationAttribute):
        (WebCore::HTMLEmbedElement::parseAttribute):
        * html/HTMLEmbedElement.h:
        * html/HTMLFontElement.cpp:
        (WebCore::HTMLFontElement::isPresentationAttribute):
        * html/HTMLFontElement.h:
        * html/HTMLFrameSetElement.cpp:
        (WebCore::HTMLFrameSetElement::isPresentationAttribute):
        (WebCore::HTMLFrameSetElement::parseAttribute):
        * html/HTMLFrameSetElement.h:
        * html/HTMLHRElement.cpp:
        (WebCore::HTMLHRElement::isPresentationAttribute):
        (WebCore::HTMLHRElement::collectStyleForAttribute):
        * html/HTMLHRElement.h:
        * html/HTMLIFrameElement.cpp:
        (WebCore::HTMLIFrameElement::isPresentationAttribute):
        (WebCore::HTMLIFrameElement::collectStyleForAttribute):
        (WebCore::HTMLIFrameElement::parseAttribute):
        * html/HTMLIFrameElement.h:
        * html/HTMLImageElement.cpp:
        (WebCore::HTMLImageElement::isPresentationAttribute):
        (WebCore::HTMLImageElement::collectStyleForAttribute):
        (WebCore::HTMLImageElement::parseAttribute):
        * html/HTMLImageElement.h:
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::isPresentationAttribute):
        (WebCore::HTMLInputElement::collectStyleForAttribute):
        (WebCore::HTMLInputElement::parseAttribute):
        * html/HTMLInputElement.h:
        * html/HTMLLIElement.cpp:
        (WebCore::HTMLLIElement::isPresentationAttribute):
        (WebCore::HTMLLIElement::parseAttribute):
        * html/HTMLLIElement.h:
        * html/HTMLMarqueeElement.cpp:
        (WebCore::HTMLMarqueeElement::isPresentationAttribute):
        (WebCore::HTMLMarqueeElement::collectStyleForAttribute):
        (WebCore::HTMLMarqueeElement::parseAttribute):
        * html/HTMLMarqueeElement.h:
        * html/HTMLOListElement.cpp:
        (WebCore::HTMLOListElement::isPresentationAttribute):
        (WebCore::HTMLOListElement::parseAttribute):
        * html/HTMLOListElement.h:
        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::isPresentationAttribute):
        (WebCore::HTMLObjectElement::parseAttribute):
        * html/HTMLObjectElement.h:
        * html/HTMLParagraphElement.cpp:
        (WebCore::HTMLParagraphElement::isPresentationAttribute):
        * html/HTMLParagraphElement.h:
        * html/HTMLPlugInElement.cpp:
        (WebCore::HTMLPlugInElement::isPresentationAttribute):
        (WebCore::HTMLPlugInElement::collectStyleForAttribute):
        * html/HTMLPlugInElement.h:
        * html/HTMLPreElement.cpp:
        (WebCore::HTMLPreElement::isPresentationAttribute):
        (WebCore::HTMLPreElement::collectStyleForAttribute):
        * html/HTMLPreElement.h:
        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::isPresentationAttribute):
        (WebCore::HTMLSelectElement::parseAttribute):
        * html/HTMLSelectElement.h:
        * html/HTMLTableCaptionElement.cpp:
        (WebCore::HTMLTableCaptionElement::isPresentationAttribute):
        (WebCore::HTMLTableCaptionElement::parseAttribute):
        * html/HTMLTableCaptionElement.h:
        * html/HTMLTableCellElement.cpp:
        (WebCore::HTMLTableCellElement::isPresentationAttribute):
        (WebCore::HTMLTableCellElement::collectStyleForAttribute):
        (WebCore::HTMLTableCellElement::parseAttribute):
        * html/HTMLTableCellElement.h:
        * html/HTMLTableColElement.cpp:
        (WebCore::HTMLTableColElement::isPresentationAttribute):
        (WebCore::HTMLTableColElement::parseAttribute):
        * html/HTMLTableColElement.h:
        * html/HTMLTableElement.cpp:
        (WebCore::HTMLTableElement::isPresentationAttribute):
        (WebCore::HTMLTableElement::parseAttribute):
        * html/HTMLTableElement.h:
        * html/HTMLTablePartElement.cpp:
        (WebCore::HTMLTablePartElement::isPresentationAttribute):
        (WebCore::HTMLTablePartElement::collectStyleForAttribute):
        * html/HTMLTablePartElement.h:
        * html/HTMLTextAreaElement.cpp:
        (WebCore::HTMLTextAreaElement::isPresentationAttribute):
        (WebCore::HTMLTextAreaElement::parseAttribute):
        * html/HTMLTextAreaElement.h:
        * html/HTMLUListElement.cpp:
        (WebCore::HTMLUListElement::isPresentationAttribute):
        (WebCore::HTMLUListElement::collectStyleForAttribute):
        * html/HTMLUListElement.h:
        * html/HTMLVideoElement.cpp:
        (WebCore::HTMLVideoElement::isPresentationAttribute):
        (WebCore::HTMLVideoElement::parseAttribute):
        * html/HTMLVideoElement.h:
        * mathml/MathMLElement.cpp:
        (WebCore::MathMLElement::isPresentationAttribute):
        (WebCore::MathMLElement::collectStyleForAttribute):
        * mathml/MathMLElement.h:
        * svg/SVGImageElement.cpp:
        (WebCore::SVGImageElement::isPresentationAttribute):
        (WebCore::SVGImageElement::parseAttribute):
        * svg/SVGImageElement.h:
        * svg/SVGStyledElement.cpp:
        (WebCore::SVGStyledElement::isPresentationAttribute):
        (WebCore::SVGStyledElement::parseAttribute):
        * svg/SVGStyledElement.h:
        * svg/SVGTextContentElement.cpp:
        (WebCore::SVGTextContentElement::isPresentationAttribute):
        (WebCore::SVGTextContentElement::parseAttribute):
        * svg/SVGTextContentElement.h:

2012-02-13  Kentaro Hara  <haraken@chromium.org>

        Add [JSCustomToJSObject] IDL attribute to interfaces that have
        custom toJS() but do not have custom toV8()
        https://bugs.webkit.org/show_bug.cgi?id=78466

        Reviewed by Adam Barth.

        This is the second step to remove hard-coding in HasCustomToV8Implementation()
        in CodeGeneratorV8.pm. This patch replaces [JSCustomToJS] with [JSCustomToJSObject]
        for interfaces which have custom toJS() but do not have custom toV8().

        No tests. No change in behavior.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateHeader):
        (GenerateImplementation):
        * bindings/scripts/CodeGeneratorV8.pm:
        (HasCustomToV8Implementation): I found that AbstractWorker and CanvasRenderingContext
        are the only IDL files to which I need to add [JSCustomToJSObject].
        Other IDL files which had been listed here do not have [JSCustomToJS].
        * html/canvas/CanvasRenderingContext.idl:
        * workers/AbstractWorker.idl:

2012-02-13  Andreas Kling  <awesomekling@apple.com>

        Avoid unnecessary work when evaluating style sharing candidates.
        <http://webkit.org/b/78220>

        Reviewed by Antti Koivisto.

        Do the cheap checks (bitfields, pointers) before calling virtuals and doing hash lookups.
        Remove comparison of attributes that are reflected in the attribute styles (cellpadding.)
        Moved comparison of "type" and "readonly" attributes into the more specific
        canShareStyleWithControl() since they are only relevant for input elements. Don't bother
        calling isFormControlElement() on both elements as they already have the same tagQName().

        Altogether this knocks off ~8ms worth of samples per cycle of the "Moz" page cycler test.

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::canShareStyleWithControl):
        (WebCore::CSSStyleSelector::canShareStyleWithElement):
        (WebCore::isCommonAttributeSelectorAttribute):

2012-02-13  Arko Saha  <arko@motorola.com>

        <summary> is not keyboard accessible.
        https://bugs.webkit.org/show_bug.cgi?id=75478

        Reviewed by Hajime Morita.

        Toggle the content of <details> element on pressing Enter or Spacebar
        key on a focused <summary> element.

        Test: fast/html/details-keyboard-show-hide.html

        * html/HTMLSummaryElement.cpp:
        (WebCore::HTMLSummaryElement::supportsFocus):
        (WebCore):
        (WebCore::HTMLSummaryElement::defaultEventHandler):
        * html/HTMLSummaryElement.h:
        (HTMLSummaryElement):

2012-02-13  Gavin Barraclough  <barraclough@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=78434
        Unreviewed - temporarily reverting r107498 will I fix a couple of testcases.

        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore):
        * bindings/js/JSDOMWindowBase.h:
        (JSDOMWindowBase):

2012-02-13  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: get rid of cycles in containment view of an object.
        https://bugs.webkit.org/show_bug.cgi?id=78462

        Reviewed by Yury Semikhatsky.

        * inspector/front-end/DetailedHeapshotGridNodes.js:
        (WebInspector.HeapSnapshotObjectNode.prototype.updateHasChildren):
        (WebInspector.HeapSnapshotObjectNode.prototype._prefixObjectCell):

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

        Remove ENABLE(MEDIA_STREAM) from Navigator.h
        https://bugs.webkit.org/show_bug.cgi?id=78467

        Reviewed by Kentaro Hara.

        Navigator.webkitGetUser media doesn't really have anything to do with
        Navigator.cpp.  This patch moves it into the mediastream directory and
        removes the ENABLE(MEDIA_STREAM) ifdefs in Navigator.h and
        Navigator.cpp.

        * GNUmakefile.list.am:
        * WebCore.gypi:
        * mediastream/NavigatorMediaStream.cpp: Added.
        (WebCore):
        (WebCore::NavigatorMediaStream::NavigatorMediaStream):
        (WebCore::NavigatorMediaStream::~NavigatorMediaStream):
        (WebCore::NavigatorMediaStream::webkitGetUserMedia):
        * mediastream/NavigatorMediaStream.h: Added.
        (WebCore):
        (NavigatorMediaStream):
        * mediastream/NavigatorMediaStream.idl: Added.
        * page/Navigator.cpp:
        (WebCore):
        * page/Navigator.h:
        (WebCore):
        (Navigator):
        * page/Navigator.idl:

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

        Navigator.webkitGetUserMedia doesn't need to be custom
        https://bugs.webkit.org/show_bug.cgi?id=78464

        Reviewed by Eric Seidel.

        The code generator has gotten smarter since this function was added.

        * GNUmakefile.list.am:
        * UseV8.cmake:
        * WebCore.gypi:
        * bindings/js/JSNavigatorCustom.cpp: Removed.
        * bindings/v8/custom/V8NavigatorCustom.cpp: Removed.
        * page/Navigator.idl:

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

        Move ENABLE(GAMEPAD) logic out of Navigator.h/cpp
        https://bugs.webkit.org/show_bug.cgi?id=78457

        Reviewed by Hajime Morita.

        This patch moves GAMEPAD-specific logic out of Navigator by introducing
        the concept of a NavigatorSupplement, analogous to the recently
        introduced PageSupplement.

        * Modules/gamepad/NavigatorGamepad.cpp:
        (WebCore::NavigatorGamepad::from):
        (WebCore):
        (WebCore::NavigatorGamepad::webkitGamepads):
        (WebCore::NavigatorGamepad::gamepads):
        * Modules/gamepad/NavigatorGamepad.h:
        (NavigatorGamepad):
        * WebCore.gypi:
        * dom/DeviceMotionController.cpp:
        (WebCore::DeviceMotionController::supplementName):
        * page/Navigator.cpp:
        (WebCore::Navigator::provideSupplement):
        (WebCore):
        (WebCore::Navigator::requireSupplement):
        * page/Navigator.h:
        (Navigator):
        * page/Page.h:
        (Page):
        * page/PageSupplement.h:
            - This patch cleans up some nits in PageSupplement.
        (WebCore):
        (PageSupplement):

2012-02-12  Kentaro Hara  <haraken@chromium.org>

        Add a [V8CustomToJSObject] IDL attribute
        https://bugs.webkit.org/show_bug.cgi?id=78450

        Reviewed by Adam Barth.

        This is the first step to remove hard-coding in HasCustomToV8Implementation()
        in CodeGeneratorV8.pm. This patch adds [V8CustomToJSObject]
        to interfaces which have custom toV8() but do not have custom toJS().

        No tests. No change in behavior.

        * bindings/scripts/CodeGeneratorV8.pm: Replaced hard-coding with [V8CustomToJSObject].
        (HasCustomToV8Implementation):

        * css/CSSStyleSheet.idl: Added [V8CustomToJSObject].
        * dom/DOMStringMap.idl:
        * dom/Element.idl:
        * dom/NamedNodeMap.idl:
        * html/DOMTokenList.idl:
        * html/HTMLDocument.idl:
        * html/HTMLElement.idl:
        * html/canvas/CanvasPixelArray.idl:
        * inspector/ScriptProfile.idl:
        * inspector/ScriptProfileNode.idl:
        * page/DOMWindow.idl:
        * page/Location.idl:
        * svg/SVGDocument.idl:
        * svg/SVGElement.idl:
        * workers/WorkerContext.idl:

2012-02-12  David Barr  <davidbarr@chromium.org>

        CSS3 currentColor on outline-color gets treated as inherit
        https://bugs.webkit.org/show_bug.cgi?id=73180

        Reviewed by Antti Koivisto.

        The CSS2 and CSS3 UI modules state that outline-color
        is not inherited. Make it so.
        http://www.w3.org/TR/CSS2/ui.html#propdef-outline-color
        http://www.w3.org/TR/css3-ui/#outline-color

        Test: fast/css/outline-currentcolor.html

        * css/CSSStyleApplyProperty.cpp:
        (WebCore::CSSStyleApplyProperty::CSSStyleApplyProperty):

2012-02-12  Antti Koivisto  <antti@apple.com>

        CSSPageRule should inherit from CSSRule instead of CSSStyleRule
        https://bugs.webkit.org/show_bug.cgi?id=78452

        Reviewed by Anders Carlsson.

        This matches CSSOM and eliminates the only subclass of CSSStyleRule, enabling further refactoring.

        * css/CSSPageRule.cpp:
        (WebCore::CSSPageRule::CSSPageRule):
        (WebCore::CSSPageRule::~CSSPageRule):
        (WebCore):
        (WebCore::CSSPageRule::selectorText):
        (WebCore::CSSPageRule::setSelectorText):
        (WebCore::CSSPageRule::cssText):
        * css/CSSPageRule.h:
        (CSSPageRule):
        (WebCore::CSSPageRule::style):
        (WebCore::CSSPageRule::selector):
        (WebCore::CSSPageRule::properties):
        (WebCore::CSSPageRule::adoptSelectorVector):
        (WebCore::CSSPageRule::setDeclaration):
        * css/CSSRule.cpp:
        (WebCore::CSSRule::cssText):
        * css/CSSStyleRule.cpp:
        (WebCore::CSSStyleRule::generateSelectorText):
        * css/CSSStyleSelector.cpp:
        (WebCore::RuleSet::pageRules):
        (RuleSet):
        (WebCore::RuleSet::addPageRule):
        (WebCore::comparePageRules):
        (WebCore::CSSStyleSelector::matchPageRules):
        (WebCore::CSSStyleSelector::matchPageRulesForList):
        * css/CSSStyleSelector.h:
        (CSSStyleSelector):

2012-02-12  Shinya Kawanaka  <shinyak@google.com>

        Introduce ShadowRootList.
        https://bugs.webkit.org/show_bug.cgi?id=78069

        Reviewed by Hajime Morita.

        This is a step to implement multiple shadow subtrees.

        This patch introduces a shadow root list. ShadowRootList is a doubly linked list,
        and each shadow root now has a younger shadow root and older shadow root,
        which are a previous element and a next element respectively.
        Since a visual tree traversal, which will be introduced in coming patches, will need a older shadow root,
        we make a shadow root list a doubly linked list.

        However, ShadowRootList does not have more than one shadow root now.
        This will be changed in a series of coming patches.

        Element::shadowRoot(), setShadowRoot(), ensureShadowRoot(), and removeShadowRoot() are
        emulated using ShadowRootList for a while. These API will be replaced to ShadowRootList API later.

        No new tests, no change in behavior.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/DOMAllInOne.cpp:
        * dom/Element.cpp:
        (WebCore::Element::hasShadowRoot):
          Retruns true if an element has a shadowRoot.
        (WebCore::Element::shadowRootList):
          Gets shadow root list if any.
        (WebCore::Element::shadowRoot):
          Gets the first shadow root from the shadow root list.
        (WebCore::Element::setShadowRoot):
          Sets the first shadow root to the shadow root list.
        (WebCore::Element::removeShadowRoot):
          Removes all the shadow roots in the shadow root list.
        * dom/Element.h:
        (WebCore):
        (Element):
        * dom/ElementRareData.h:
        (ElementRareData):
        (WebCore::ElementRareData::ElementRareData):
          Has shadow root lists instead of shadow root.
        (WebCore::ElementRareData::~ElementRareData):
        * dom/ShadowRoot.cpp:
        (WebCore::ShadowRoot::ShadowRoot):
        (WebCore::ShadowRoot::~ShadowRoot):
        * dom/ShadowRoot.h:
        (ShadowRoot):
        (WebCore::ShadowRoot::youngerShadowRoot):
        (WebCore::ShadowRoot::olderShadowRoot):
        * dom/ShadowRootList.cpp: Added.
        (WebCore):
        (WebCore::ShadowRootList::ShadowRootList):
        (WebCore::ShadowRootList::~ShadowRootList):
        (WebCore::ShadowRootList::pushShadowRoot):
          Adds a shadow root into the list. Currently we limit the list can have only one shadow root.
        (WebCore::ShadowRootList::popShadowRoot):
          Removes and returns the youngest shadow root if any.
        * dom/ShadowRootList.h: Added.
        (WebCore):
        (ShadowRootList):
        (WebCore::ShadowRootList::hasShadowRoot):
        (WebCore::ShadowRootList::youngestShadowRoot):
        (WebCore::ShadowRootList::oldestShadowRoot):

2012-02-12  Shinya Kawanaka  <shinyak@google.com>

        INPUT shouldn't create ShadowRoot dynamically.
        https://bugs.webkit.org/show_bug.cgi?id=77930

        Reviewed by Dimitri Glazkov.

        When input type is changed, ShadowRoot was being re-created. This makes it difficult to
        support multiple shadow subtrees. This patch makes input re-use the existing shadow root
        instead of re-creating a shaow root. A shadow root should be created when an element is created.

        Since media control elements are implemented using input elements, these elements should also
        create a shadow root in their construction phase.

        Test: fast/dom/shadow/input-shadow-nochange.html
        Tests related to media controls should be covered by existing tests.

        * html/ColorInputType.cpp:
        (WebCore::ColorInputType::createShadowSubtree):
        * html/FileInputType.cpp:
        (WebCore::FileInputType::createShadowSubtree):
        (WebCore::FileInputType::multipleAttributeChanged):
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::createShadowSubtree):
        * html/InputType.cpp:
        (WebCore::InputType::destroyShadowSubtree):
        * html/RangeInputType.cpp:
        (WebCore::RangeInputType::createShadowSubtree):
        * html/TextFieldInputType.cpp:
        (WebCore::TextFieldInputType::createShadowSubtree):
        * html/shadow/MediaControlElements.cpp:
          Creates a shadow tree in the construction phase.
        (WebCore::MediaControlPanelMuteButtonElement::create):
        (WebCore::MediaControlVolumeSliderMuteButtonElement::create):
        (WebCore::MediaControlPlayButtonElement::create):
        (WebCore::MediaControlSeekForwardButtonElement::create):
        (WebCore::MediaControlSeekBackButtonElement::create):
        (WebCore::MediaControlRewindButtonElement::create):
        (WebCore::MediaControlReturnToRealtimeButtonElement::create):
        (WebCore::MediaControlToggleClosedCaptionsButtonElement::create):
        (WebCore::MediaControlTimelineElement::create):
        (WebCore::MediaControlVolumeSliderElement::create):
        (WebCore::MediaControlFullscreenVolumeSliderElement::create):
        (WebCore::MediaControlFullscreenButtonElement::create):
        (WebCore::MediaControlFullscreenVolumeMinButtonElement::create):
        (WebCore::MediaControlFullscreenVolumeMaxButtonElement::create):

2012-02-12  Shinya Kawanaka  <shinyak@google.com>

        SVGTRefElement shouldn't create a shadow root dynamically.
        https://bugs.webkit.org/show_bug.cgi?id=77938

        Reviewed by Hajime Morita.

        SVGTRefElement creates a shadow root dynamically. This will cause a problem to support
        multiple shadow subtrees. So it should be created in a constructor phase.

        Test: svg/custom/tref-shadowdom.html

        * svg/SVGTRefElement.cpp:
        (WebCore::SVGTRefElement::create):
        (WebCore::SVGTRefElement::createShadowSubtree):
        (WebCore):
        (WebCore::SVGTRefElement::updateReferencedText):
        * svg/SVGTRefElement.h:
        (SVGTRefElement):

2012-02-12  Kentaro Hara  <haraken@chromium.org>

        Unreviewed. Rebaselined run-bindings-tests results.

        * bindings/scripts/test/JS/JSFloat64Array.cpp:
        (WebCore):
        * bindings/scripts/test/JS/JSTestActiveDOMObject.cpp:
        (WebCore):
        (WebCore::JSTestActiveDOMObject::destroy):
        (WebCore::JSTestActiveDOMObject::~JSTestActiveDOMObject):
        * bindings/scripts/test/JS/JSTestActiveDOMObject.h:
        (JSTestActiveDOMObject):
        * bindings/scripts/test/JS/JSTestCustomNamedGetter.cpp:
        (WebCore):
        (WebCore::JSTestCustomNamedGetter::destroy):
        (WebCore::JSTestCustomNamedGetter::~JSTestCustomNamedGetter):
        * bindings/scripts/test/JS/JSTestCustomNamedGetter.h:
        (JSTestCustomNamedGetter):
        * bindings/scripts/test/JS/JSTestEventConstructor.cpp:
        (WebCore):
        (WebCore::JSTestEventConstructor::destroy):
        (WebCore::JSTestEventConstructor::~JSTestEventConstructor):
        * bindings/scripts/test/JS/JSTestEventConstructor.h:
        (JSTestEventConstructor):
        * bindings/scripts/test/JS/JSTestEventTarget.cpp:
        (WebCore):
        (WebCore::JSTestEventTarget::destroy):
        (WebCore::JSTestEventTarget::~JSTestEventTarget):
        * bindings/scripts/test/JS/JSTestEventTarget.h:
        (JSTestEventTarget):
        * bindings/scripts/test/JS/JSTestInterface.cpp:
        (WebCore):
        (WebCore::JSTestInterface::destroy):
        (WebCore::JSTestInterface::~JSTestInterface):
        * bindings/scripts/test/JS/JSTestInterface.h:
        (JSTestInterface):
        * bindings/scripts/test/JS/JSTestMediaQueryListListener.cpp:
        (WebCore):
        (WebCore::JSTestMediaQueryListListener::destroy):
        (WebCore::JSTestMediaQueryListListener::~JSTestMediaQueryListListener):
        * bindings/scripts/test/JS/JSTestMediaQueryListListener.h:
        (JSTestMediaQueryListListener):
        * bindings/scripts/test/JS/JSTestNamedConstructor.cpp:
        (WebCore):
        (WebCore::JSTestNamedConstructor::destroy):
        (WebCore::JSTestNamedConstructor::~JSTestNamedConstructor):
        * bindings/scripts/test/JS/JSTestNamedConstructor.h:
        (JSTestNamedConstructor):
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore):
        (WebCore::JSTestObj::destroy):
        (WebCore::JSTestObj::~JSTestObj):
        * bindings/scripts/test/JS/JSTestObj.h:
        (JSTestObj):
        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp:
        (WebCore):
        (WebCore::JSTestSerializedScriptValueInterface::destroy):
        (WebCore::JSTestSerializedScriptValueInterface::~JSTestSerializedScriptValueInterface):
        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.h:
        (JSTestSerializedScriptValueInterface):

2012-02-12  Abhishek Arya  <inferno@chromium.org>

        Regression (r104528): Crash when moving nodes across documents.
        https://bugs.webkit.org/show_bug.cgi?id=78432

        Reviewed by Hajime Morita.

        Test: fast/dom/node-move-to-new-document-crash-main.html

        * dom/TreeScopeAdopter.cpp:
        (WebCore::TreeScopeAdopter::moveTreeToNewScope):
        (WebCore::TreeScopeAdopter::moveTreeToNewDocument):
        (WebCore::TreeScopeAdopter::moveNodeToNewDocument):

2012-02-12  Hajime Morrita  <morrita@chromium.org>

        Page should have less intrusive way to associate API implementation objects.
        https://bugs.webkit.org/show_bug.cgi?id=78085

        Reviewed by Adam Barth.

        Introducing PageSupplement interface to attach behind-the-flag-ish
        objects to Page instances.

        This change aims to improve modularity of Modules/ entries. With
        PageSupplement mechinary, we can eliminate ifdef conditionals from
        Page.h/Page.cpp and are able to add Modules/ entries without
        touching non-Module WebCore files. WebKit API classes like WebPage
        can "provide" these objects dynamically during the Page setup phase.

        In this change, DeviceMotionController and
        DeviceOrientationController is updated to adopt PageSupplement
        inteface for an illustrative purpose because they are going to
        move into Modules/ shortly. Other Page associated API backing
        objects also should be transformed to PageSupplement family.

        Reviewed by Adam Barth.

        No new tests. No behavior change.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/DeviceMotionClient.h:
        (WebCore):
        * dom/DeviceMotionController.cpp:
        (WebCore::DeviceMotionController::supplementName):
        (WebCore):
        (WebCore::DeviceMotionController::isActiveAt):
        (WebCore::provideDeviceMotionTo):
        * dom/DeviceMotionController.h:
        (DeviceMotionController):
        (WebCore::DeviceMotionController::from):
        * dom/DeviceOrientationClient.h:
        (WebCore):
        * dom/DeviceOrientationController.cpp:
        (WebCore::DeviceOrientationController::supplementName):
        (WebCore):
        (WebCore::DeviceOrientationController::isActiveAt):
        (WebCore::provideDeviceOrientationTo):
        * dom/DeviceOrientationController.h:
        (DeviceOrientationController):
        (WebCore::DeviceOrientationController::from):
        * dom/Document.cpp:
        (WebCore::Document::suspendActiveDOMObjects):
        (WebCore::Document::resumeActiveDOMObjects):
        * history/PageCache.cpp:
        (WebCore::logCanCachePageDecision):
        (WebCore::PageCache::canCache):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::addEventListener):
        (WebCore::DOMWindow::removeEventListener):
        (WebCore::DOMWindow::removeAllEventListeners):
        * page/PageSupplement.cpp:
        (WebCore::PageSupplement::~PageSupplement):
        (WebCore::PageSupplement::provideTo):
        (WebCore::PageSupplement::from):
        * page/PageSupplement.h:
        * page/Page.cpp:
        (WebCore::Page::Page):
        (WebCore::Page::~Page):
        (WebCore::Page::provideSupplement):
        (WebCore):
        (WebCore::Page::requireSupplement):
        (WebCore::Page::notifyDestroyedToSupplements):
        (WebCore::Page::PageClients::PageClients):
        * page/Page.h:
        (WebCore):
        (PageClients):
        (Page):
        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::dataChanged):

2012-02-12  Nico Weber  <nicolasweber@gmx.de>

        [chromium/mac] Change the type of webkit_system_interface from static_library to none
        https://bugs.webkit.org/show_bug.cgi?id=78441

        This target exists only run an action and to add a dependency to the
        action's output to targets depending on webkit_system_interface.
        This is what target type 'none' is for. With this, no dummy source
        file is needed, and no empty libwebkit_system_interface.a is created.
        This also fixes this (harmless) libtool warning:

        libtool: warning for library: libwebkit_system_interface.a the table
        of contents is empty (no object file members in the library define
        global symbols)

        Reviewed by Adam Barth.

        * WebCore.gyp/WebCore.gyp:
        * WebCore.gyp/mac/Empty.cpp: Removed.

2012-02-12  Kenichi Ishibashi  <bashi@chromium.org>

        If @font-face does not provide an explicit italic/bold variant, regular is used.
        https://bugs.webkit.org/show_bug.cgi?id=34147

        Reviewed by Dan Bernstein.

        Update @font-face handling code so that it matches @font-face behavior to the current draft of CSS3 Font spec. The original patch was written by yusukes@chromium.org.
        - Drops support for "bolder", "lighter", and "all" value. These are no longer allowed.
        - Only allows one value for font-style and font-weight.

        Tests: fast/css/font-face-synthetic-bold-italic.html
               fast/css/font-face-weight-matching.html

        * css/CSSFontSelector.cpp:
        (WebCore::CSSFontSelector::addFontFaceRule): Removed "all", "lighter", "bolder" handling code.
        (WebCore::compareFontFaces):Updated the weight matching algortihm.
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue): Replaced parseFontStyle() call with checking primitive values.
        (WebCore::CSSParser::parseFontWeight): Changed to allow only primitive values.
        (WebCore::CSSParser::createFontFaceRule): Removed checks for font-weight and font-style.
        (WebCore::CSSParser::deleteFontFaceOnlyValues): Ditto.
        * css/CSSParser.h: Removed parseFontStyle().

2012-02-12  David Reveman  <reveman@chromium.org>

        [Chromium] Avoid unnecessary memset in per-tile layer updater.
        https://bugs.webkit.org/show_bug.cgi?id=78426

        Reviewed by Stephen White.

        Use our own SkBitmap and call SkBitmap::allocPixels() instead of
        letting SkDevice construct a SkBitmap. This avoids an unnecessary
        memset otherwise done by SkDevice.

        No new tests.

        * platform/graphics/chromium/BitmapSkPictureCanvasLayerTextureUpdater.cpp:
        (WebCore::BitmapSkPictureCanvasLayerTextureUpdater::Texture::prepareRect):
        (WebCore::BitmapSkPictureCanvasLayerTextureUpdater::Texture::updateRect):
        * platform/graphics/chromium/BitmapSkPictureCanvasLayerTextureUpdater.h:
        (Texture):

2012-02-12  Joe Thomas  <joethomas@motorola.com>

        Add toText and isTextNode helpers in Text class.
        https://bugs.webkit.org/show_bug.cgi?id=78140

        Added a new helper function toText() in dom/Text.h which does the type casting operation to Text object.
        Modified the code to make use of this helper function.

        Reviewed by Adam Barth.

        No new tests.

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::accessibleNameForNode):
        * bindings/v8/custom/V8NodeCustom.cpp:
        (WebCore::toV8Slow):
        * css/SelectorChecker.cpp:
        (WebCore::SelectorChecker::checkOneSelector):
        * dom/Attr.cpp:
        (WebCore::Attr::childrenChanged):
        * dom/Element.cpp:
        (WebCore::Element::recalcStyle):
        * dom/Node.cpp:
        (WebCore::Node::normalize):
        * dom/Position.cpp:
        (WebCore::Position::containerText):
        (WebCore::Position::leadingWhitespacePosition):
        * dom/Range.cpp:
        (WebCore::Range::insertNode):
        (WebCore::Range::getBorderAndTextQuads):
        * dom/ScriptElement.cpp:
        (WebCore::ScriptElement::scriptContent):
        * dom/ShadowRoot.cpp:
        (WebCore::ShadowRoot::recalcShadowTreeStyle):
        * dom/Text.h: Added new helper function toText.
        (WebCore::toText): new helper function which does the type casting operation to Text object.
        (WebCore):
        * editing/ApplyBlockElementCommand.cpp:
        (WebCore::isNewLineAtPosition):
        (WebCore::ApplyBlockElementCommand::endOfNextParagrahSplittingTextNodesIfNeeded):
        * editing/ApplyStyleCommand.cpp:
        (WebCore::ApplyStyleCommand::splitTextAtEnd):
        (WebCore::ApplyStyleCommand::splitTextElementAtEnd):
        (WebCore::ApplyStyleCommand::joinChildTextNodes):
        * editing/BreakBlockquoteCommand.cpp:
        (WebCore::BreakBlockquoteCommand::doApply):
        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::insertNodeAt):
        (WebCore::CompositeEditCommand::positionOutsideTabSpan):
        (WebCore::CompositeEditCommand::canRebalance):
        (WebCore::CompositeEditCommand::rebalanceWhitespaceAt):
        (WebCore::CompositeEditCommand::prepareWhitespaceAtPositionForSplit):
        (WebCore::CompositeEditCommand::deleteInsignificantText):
        (WebCore::CompositeEditCommand::removePlaceholderAt):
        (WebCore::CompositeEditCommand::cleanupAfterDeletion):
        (WebCore::CompositeEditCommand::breakOutOfEmptyMailBlockquotedParagraph):
        * editing/DeleteSelectionCommand.cpp:
        (WebCore::DeleteSelectionCommand::handleGeneralDelete):
        (WebCore::DeleteSelectionCommand::fixupWhitespace):
        * editing/Editor.cpp:
        (WebCore::Editor::setComposition):
        * editing/InsertLineBreakCommand.cpp:
        (WebCore::InsertLineBreakCommand::doApply):
        * editing/InsertParagraphSeparatorCommand.cpp:
        (WebCore::InsertParagraphSeparatorCommand::doApply):
        * editing/InsertTextCommand.cpp:
        (WebCore::InsertTextCommand::insertTab):
        * editing/MarkupAccumulator.cpp:
        (WebCore::MarkupAccumulator::appendStartMarkup):
        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::removeUnrenderedTextNodesAtEnds):
        (WebCore::ReplaceSelectionCommand::addSpacesForSmartReplace):
        (WebCore::ReplaceSelectionCommand::insertAsListItems):
        (WebCore::ReplaceSelectionCommand::performTrivialReplace):
        * editing/htmlediting.cpp:
        (WebCore::lineBreakExistsAtPosition):
        * editing/visible_units.cpp:
        (WebCore::startPositionForLine):
        (WebCore::endPositionForLine):
        (WebCore::startOfParagraph):
        (WebCore::endOfParagraph):
        * html/HTMLElement.cpp:
        (WebCore::replaceChildrenWithFragment):
        (WebCore::replaceChildrenWithText):
        (WebCore::mergeWithNextTextNode):
        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::hasFallbackContent):
        (WebCore::HTMLObjectElement::updateDocNamedItem):
        * html/HTMLOptionElement.cpp:
        (WebCore::HTMLOptionElement::setText):
        * html/HTMLScriptElement.cpp:
        (WebCore::HTMLScriptElement::setText):
        * html/HTMLTextAreaElement.cpp:
        (WebCore::HTMLTextAreaElement::defaultValue):
        * html/HTMLTextFormControlElement.cpp:
        (WebCore::HTMLTextFormControlElement::innerTextValue):
        (WebCore::HTMLTextFormControlElement::valueWithHardLineBreaks):
        * html/HTMLTitleElement.cpp:
        (WebCore::HTMLTitleElement::text):
        (WebCore::HTMLTitleElement::setText):
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::setNodeValue):
        * rendering/RenderText.cpp:
        (WebCore::RenderText::originalText):
        * rendering/RenderTextFragment.cpp:
        (WebCore::RenderTextFragment::originalText):
        (WebCore::RenderTextFragment::previousCharacter):

2012-02-12  Kentaro Hara  <haraken@chromium.org>

        Remove [CPPCustom] from CodeGeneratorCPP.pm
        https://bugs.webkit.org/show_bug.cgi?id=78342

        Reviewed by Adam Barth.

        This patch removes [CPPCustom].

        [CPPCustom] has been used in DOMWindow.location only to indicate that
        DOMWindow.location should be ignored in CPP. However, there are many
        other attributes and methods that CPP does not support (e.g. [CallWith=...],
        [CustomSetter], etc), and they are not yet marked with [CPPCustom].
        CPP just generates "meaningless" code for those unsupported attributes
        and methods. Ideally we can mark all unsupported attributes and methods
        with [CPPCustom], but it would not be so practical. Otherwise, removing
        [CPPCustom] would make sense. The side effect of removing [CPPCustom]
        is just that CPP will generate "meaningless" code for DOMWindow.location.

        No tests. No change in behavior.

        * bindings/scripts/CodeGeneratorCPP.pm:
        (ShouldSkipType):
        * page/DOMWindow.idl:

2012-02-12  Kentaro Hara  <haraken@chromium.org>

        Rename [JSCustomPrototypeDefineOwnProperty] to [JSCustomDefineOwnPropertyOnPrototype]
        https://bugs.webkit.org/show_bug.cgi?id=78354

        Reviewed by Adam Barth.

        This patch renames [JSCustomPrototypeDefineOwnProperty] to
        [JSCustomDefineOwnPropertyOnPrototype], for naming consistency with
        [JSCustomDefineOwnProperty] and [JSCustomNamedGetterOnPrototype].

        No tests. No change in behavior.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateHeader):
        * page/Location.idl:

2012-02-11  Filip Pizlo  <fpizlo@apple.com>

        It should be possible to send all JSC debug logging to a file
        https://bugs.webkit.org/show_bug.cgi?id=78418

        Reviewed by Sam Weinig.
        
        Introduced wtf/DataLog, which defines WTF::dataFile, WTF::dataLog,
        and WTF::dataLogV. Changed all debugging- and profiling-related printfs
        to use WTF::dataLog() or one of its friends. By default, debug logging
        goes to stderr, unless you change the setting in wtf/DataLog.cpp.

        No new tests because behavior is unchanged.

        * ForwardingHeaders/wtf/DataLog.h: Added.

2012-02-11  Gavin Barraclough  <barraclough@apple.com>

        Move special __proto__ property to Object.prototype
        https://bugs.webkit.org/show_bug.cgi?id=78409

        Reviewed by Oliver Hunt.

        Re-implement this as a regular accessor property.  This has three key benefits:
        1) It makes it possible for objects to be given properties named __proto__.
        2) Object.prototype.__proto__ can be deleted, preventing object prototypes from being changed.
        3) This largely removes the magic used the implement __proto__, it can just be made a regular accessor property.

        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::JSDOMWindowBase::allowsAccessFrom):
        (WebCore):
            - expose allowsAccessFrom check to JSC.
        * bindings/js/JSDOMWindowBase.h:
        (JSDOMWindowBase):
            - expose allowsAccessFrom check to JSC.

2012-02-11  Benjamin Poulain  <benjamin@webkit.org>

        Get rid of WebCore::URLString
        https://bugs.webkit.org/show_bug.cgi?id=78429

        Reviewed by Adam Barth.

        URLString is unused, remove the class.

        * GNUmakefile.list.am:
        * WebCore.gypi:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/KURL.cpp:
        * platform/KURL.h:
        (KURL):
        * platform/URLString.h: Removed.

2012-02-11  Sam Weinig  <sam@webkit.org>

        Fix the windows build.

        Since Windows uses an all-in-one file to compile, the isRespectedPresentationAttribute()
        functions all need unique names.

        * html/HTMLBodyElement.cpp:
        * html/HTMLHRElement.cpp:
        * html/HTMLIFrameElement.cpp:
        * html/HTMLImageElement.cpp:
        * html/HTMLInputElement.cpp:
        * html/HTMLMarqueeElement.cpp:
        * html/HTMLPlugInElement.cpp:
        * html/HTMLTableCellElement.cpp:
        * html/HTMLTablePartElement.cpp:
        * mathml/MathMLElement.cpp:

2012-02-11  Anders Carlsson  <andersca@apple.com>

        Overlay scrollbars don't appear when scrolling on the scrolling thread
        https://bugs.webkit.org/show_bug.cgi?id=78427

        Reviewed by Sam Weinig.

        Add a ScrollAnimator::notifyContentAreaScrolled and call it from ScrollAnimator::notifyContentAreaScrolled.
        It is then overridden in ScrollAnimatorMac to tickle AppKit so that overlay scrollbars will be shown.

        * platform/ScrollAnimator.h:
        (WebCore::ScrollAnimator::notifyContentAreaScrolled):
        (ScrollAnimator):
        * platform/ScrollableArea.cpp:
        (WebCore::ScrollableArea::notifyScrollPositionChanged):
        * platform/mac/ScrollAnimatorMac.h:
        (ScrollAnimatorMac):
        * platform/mac/ScrollAnimatorMac.mm:
        (WebCore::ScrollAnimatorMac::notifyPositionChanged):
        (WebCore::ScrollAnimatorMac::notifyContentAreaScrolled):
        (WebCore):

2012-02-11  Anders Carlsson  <andersca@apple.com>

        Implement more ScrollElasticityControllerClient member functions
        https://bugs.webkit.org/show_bug.cgi?id=78425
        <rdar://problem/10710727>

        Reviewed by Sam Weinig.

        * page/scrolling/ScrollingTreeNode.h:
        (ScrollingTreeNode):
        (WebCore::ScrollingTreeNode::horizontalScrollElasticity):
        (WebCore::ScrollingTreeNode::verticalScrollElasticity):
        (WebCore::ScrollingTreeNode::hasEnabledHorizontalScrollbar):
        (WebCore::ScrollingTreeNode::hasEnabledVerticalScrollbar):
        Add new getters.

        * page/scrolling/mac/ScrollingTreeNodeMac.h:
        * page/scrolling/mac/ScrollingTreeNodeMac.mm:
        (WebCore::ScrollingTreeNodeMac::allowsHorizontalStretching):
        (WebCore::ScrollingTreeNodeMac::allowsVerticalStretching):
        (WebCore::ScrollingTreeNodeMac::stretchAmount):
        (WebCore::ScrollingTreeNodeMac::pinnedInDirection):
        (WebCore::ScrollingTreeNodeMac::canScrollHorizontally):
        (WebCore::ScrollingTreeNodeMac::canScrollVertically):
        (WebCore::ScrollingTreeNodeMac::absoluteScrollPosition):
        (WebCore::ScrollingTreeNodeMac::immediateScrollByWithoutContentEdgeConstraints):
        (WebCore::ScrollingTreeNodeMac::startSnapRubberbandTimer):
        (WebCore::ScrollingTreeNodeMac::stopSnapRubberbandTimer):
        (WebCore::ScrollingTreeNodeMac::scrollByWithoutContentEdgeConstraints):
        Implement ScrollElasticityControllerClient member functions.

2012-02-11  Antti Koivisto  <antti@apple.com>

        Add size assert for Length
        https://bugs.webkit.org/show_bug.cgi?id=78420

        Rubber-stamped by Andreas Kling.

        Length type is memory critical and must not grow.

        * platform/Length.cpp:
        (SameSizeAsLength):
        (WebCore):

2012-02-11  Anders Carlsson  <andersca@apple.com>

        Pass wheel events to a scroll elasticity controller on the scrolling thread
        https://bugs.webkit.org/show_bug.cgi?id=78421

        Reviewed by Sam Weinig.

        Add a ScrollElasticityController to ScrollingTreeNodeMac and pass wheel events to it.
        Fix ScrollingTreeNodeMac::scrollBy to clamp by the minimum and maximum scroll positions.

        * page/scrolling/mac/ScrollingTreeNodeMac.h:
        (ScrollingTreeNodeMac):
        * page/scrolling/mac/ScrollingTreeNodeMac.mm:
        (WebCore::ScrollingTreeNodeMac::ScrollingTreeNodeMac):
        (WebCore::ScrollingTreeNodeMac::handleWheelEvent):
        (WebCore::ScrollingTreeNodeMac::immediateScrollBy):
        (WebCore::ScrollingTreeNodeMac::setScrollLayerPosition):
        (WebCore::ScrollingTreeNodeMac::minimumScrollPosition):
        (WebCore):
        (WebCore::ScrollingTreeNodeMac::maximumScrollPosition):
        (WebCore::ScrollingTreeNodeMac::scrollBy):

2012-02-11  Andreas Kling  <awesomekling@apple.com>

        Attribute styles should be created lazily.
        <http://webkit.org/b/78381>

        Reviewed by Antti Koivisto.

        TL;DR summary: Lazily construct the StyledElement::attributeStyle() instead of
        moving properties in/out of it in parseAttribute(). This allows us to enable
        the matched declaration cache for elements with presentation attributes.

        The matched declaration cache has been disabled for elements with presentation
        attributes because attributeStyle() was mutable, and (simply put) the cache maps
        a set of StylePropertySet pointers to a resulting RenderStyle. This requires
        that the StylePropertySets are immutable.

        To make them immutable, we now construct the attribute style lazily by adding
        a flag (to Node) that gets set in parseAttribute() when a presentation attribute
        respected by the element changes. A subsequent call to attributeStyle() checks
        the flag and rebuilds the style by looping over the attributes and calling the
        new virtual StyledElement::collectStyleForAttribute() on each one. Any dangling
        references to the previous attribute style will be garbage collected by the
        cache in CSSStyleSelector::sweepMatchedDeclarationCache().

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

            Enable matched declaration cache for elements with attribute style.

        * dom/Node.h:
        (WebCore::Node::attributeStyleDirty):
        (WebCore::Node::setAttributeStyleDirty):
        (WebCore::Node::clearAttributeStyleDirty):

            Add a Node flag to signify that a presentation attribute has changed and
            the attribute style needs to be rebuilt.

        * dom/ElementAttributeData.h:
        * dom/ElementAttributeData.cpp:
        (WebCore::ElementAttributeData::setAttributeStyle):

            Added a setter for the attribute style, called by updateAttributeStyle().

        * dom/StyledElement.cpp:
        (WebCore::StyledElement::addHTMLLengthToStyle):
        (WebCore::StyledElement::addHTMLColorToStyle):

            Moved and renamed two of the old addCSS* helpers from StyledElement.

        (WebCore::StyledElement::updateAttributeStyle):

            Called by attributeStyle() in case the "attribute style dirty" flag is
            set. Rebuilds the attribute style from scratch by looping over the
            attribute map and calling collectStyleForAttribute() on each attribute.

        * dom/StyledElement.h:
        (WebCore::StyledElement::collectStyleForAttribute):
        (WebCore::StyledElement::attributeStyle):
        (WebCore::StyledElement::setNeedsAttributeStyleUpdate):

            Helper, sets the attribute style dirty flag and marks the element for
            full style recalc. This is what parseAttribute() calls in subclasses
            when they encounter a presentation attribute.

        * html/HTMLBRElement.cpp:
        (WebCore::HTMLBRElement::collectStyleForAttribute):
        (WebCore::HTMLBRElement::parseAttribute):
        * html/HTMLBRElement.h:
        * html/HTMLBodyElement.cpp:
        (WebCore::isRespectedPresentationAttribute):
        (WebCore::HTMLBodyElement::collectStyleForAttribute):
        (WebCore::HTMLBodyElement::parseAttribute):
        * html/HTMLBodyElement.h:
        * html/HTMLDivElement.cpp:
        (WebCore::HTMLDivElement::collectStyleForAttribute):
        (WebCore::HTMLDivElement::parseAttribute):
        * html/HTMLDivElement.h:
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::applyBorderAttributeToStyle):
        (WebCore::HTMLElement::mapLanguageAttributeToLocale):
        (WebCore::HTMLElement::collectStyleForAttribute):
        (WebCore::HTMLElement::parseAttribute):
        (WebCore::HTMLElement::applyAlignmentAttributeToStyle):
        * html/HTMLElement.h:
        * html/HTMLEmbedElement.cpp:
        (WebCore::HTMLEmbedElement::collectStyleForAttribute):
        (WebCore::HTMLEmbedElement::parseAttribute):
        * html/HTMLEmbedElement.h:
        * html/HTMLFontElement.cpp:
        (WebCore::HTMLFontElement::collectStyleForAttribute):
        (WebCore::HTMLFontElement::parseAttribute):
        * html/HTMLFontElement.h:
        * html/HTMLFrameSetElement.cpp:
        (WebCore::HTMLFrameSetElement::collectStyleForAttribute):
        (WebCore::HTMLFrameSetElement::parseAttribute):
        * html/HTMLFrameSetElement.h:
        * html/HTMLHRElement.cpp:
        (WebCore::isRespectedPresentationAttribute):
        (WebCore::HTMLHRElement::collectStyleForAttribute):
        (WebCore::HTMLHRElement::parseAttribute):
        * html/HTMLHRElement.h:
        * html/HTMLIFrameElement.cpp:
        (WebCore::HTMLIFrameElement::collectStyleForAttribute):
        (WebCore::HTMLIFrameElement::parseAttribute):
        * html/HTMLIFrameElement.h:
        * html/HTMLImageElement.cpp:
        (WebCore::isRespectedPresentationAttribute):
        (WebCore::HTMLImageElement::collectStyleForAttribute):
        (WebCore::HTMLImageElement::parseAttribute):
        * html/HTMLImageElement.h:
        * html/HTMLInputElement.cpp:
        (WebCore::isRespectedPresentationAttribute):
        (WebCore::HTMLInputElement::collectStyleForAttribute):
        (WebCore::HTMLInputElement::parseAttribute):
        * html/HTMLInputElement.h:
        * html/HTMLLIElement.cpp:
        (WebCore::HTMLLIElement::collectStyleForAttribute):
        (WebCore::HTMLLIElement::parseAttribute):
        * html/HTMLLIElement.h:
        * html/HTMLMarqueeElement.cpp:
        (WebCore::isRespectedPresentationAttribute):
        (WebCore::HTMLMarqueeElement::collectStyleForAttribute):
        (WebCore::HTMLMarqueeElement::parseAttribute):
        * html/HTMLMarqueeElement.h:
        * html/HTMLOListElement.cpp:
        (WebCore::HTMLOListElement::collectStyleForAttribute):
        (WebCore::HTMLOListElement::parseAttribute):
        * html/HTMLOListElement.h:
        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::collectStyleForAttribute):
        (WebCore::HTMLObjectElement::parseAttribute):
        * html/HTMLObjectElement.h:
        * html/HTMLParagraphElement.cpp:
        (WebCore::HTMLParagraphElement::collectStyleForAttribute):
        (WebCore::HTMLParagraphElement::parseAttribute):
        * html/HTMLParagraphElement.h:
        * html/HTMLPlugInElement.cpp:
        (WebCore::isRespectedPresentationAttribute):
        (WebCore::HTMLPlugInElement::collectStyleForAttribute):
        (WebCore::HTMLPlugInElement::parseAttribute):
        * html/HTMLPlugInElement.h:
        * html/HTMLPreElement.cpp:
        (WebCore::HTMLPreElement::collectStyleForAttribute):
        (WebCore::HTMLPreElement::parseAttribute):
        * html/HTMLPreElement.h:
        * html/HTMLTableCaptionElement.cpp:
        (WebCore::HTMLTableCaptionElement::collectStyleForAttribute):
        (WebCore::HTMLTableCaptionElement::parseAttribute):
        * html/HTMLTableCaptionElement.h:
        * html/HTMLTableCellElement.cpp:
        (WebCore::isRespectedPresentationAttribute):
        (WebCore::HTMLTableCellElement::collectStyleForAttribute):
        (WebCore::HTMLTableCellElement::parseAttribute):
        * html/HTMLTableCellElement.h:
        * html/HTMLTableColElement.cpp:
        (WebCore::HTMLTableColElement::collectStyleForAttribute):
        (WebCore::HTMLTableColElement::parseAttribute):
        * html/HTMLTableColElement.h:
        * html/HTMLTableElement.cpp:
        (WebCore::getBordersFromFrameAttributeValue):
        (WebCore::HTMLTableElement::collectStyleForAttribute):
        (WebCore::HTMLTableElement::parseAttribute):
        * html/HTMLTableElement.h:
        * html/HTMLTablePartElement.cpp:
        (WebCore::isRespectedPresentationAttribute):
        (WebCore::HTMLTablePartElement::collectStyleForAttribute):
        (WebCore::HTMLTablePartElement::parseAttribute):
        * html/HTMLTablePartElement.h:
        * html/HTMLTextAreaElement.cpp:
        (WebCore::HTMLTextAreaElement::collectStyleForAttribute):
        (WebCore::HTMLTextAreaElement::parseAttribute):
        * html/HTMLTextAreaElement.h:
        * html/HTMLUListElement.cpp:
        (WebCore::HTMLUListElement::collectStyleForAttribute):
        (WebCore::HTMLUListElement::parseAttribute):
        * html/HTMLUListElement.h:
        * html/HTMLVideoElement.cpp:
        (WebCore::HTMLVideoElement::collectStyleForAttribute):
        (WebCore::HTMLVideoElement::parseAttribute):
        * html/HTMLVideoElement.h:
        * mathml/MathMLElement.cpp:
        (WebCore::isRespectedPresentationAttribute):
        (WebCore::MathMLElement::collectStyleForAttribute):
        (WebCore::MathMLElement::parseAttribute):
        * mathml/MathMLElement.h:
        * svg/SVGImageElement.cpp:
        (WebCore::SVGImageElement::collectStyleForAttribute):
        (WebCore::SVGImageElement::parseAttribute):
        * svg/SVGImageElement.h:
        * svg/SVGStyledElement.cpp:
        (WebCore::SVGStyledElement::collectStyleForAttribute):
        (WebCore::SVGStyledElement::parseAttribute):
        * svg/SVGStyledElement.h:
        * svg/SVGTextContentElement.cpp:
        (WebCore::SVGTextContentElement::collectStyleForAttribute):
        (WebCore::SVGTextContentElement::parseAttribute):
        * svg/SVGTextContentElement.h:

            Split handling of presentation attributes between parseAttribute() and
            collectStyleForAttribute() as appropriate. Some minor refactorings here and
            there (mostly in HTMLTableElement) to avoid excessive code duplication.
            Also sprinkled FIXMEs about inefficiencies we should clean up.

2012-02-11   Arko Saha  <arko@motorola.com>

        HTML 5: Support click() method on HTMLElement.
        https://bugs.webkit.org/show_bug.cgi?id=27880

        Reviewed by Timothy Hatcher.

        Test: fast/dom/click-method-on-html-element.html

        * bindings/objc/PublicDOMInterfaces.h: Added click() method in DOMHTMLElement
        with availability macro AVAILABLE_AFTER_WEBKIT_VERSION_5_1.
        * html/HTMLButtonElement.idl: Moved click() method under LANGUAGE_OBJECTIVE_C.
        * html/HTMLElement.idl: Added click() IDL method.
        * html/HTMLInputElement.idl: Moved click() method under LANGUAGE_OBJECTIVE_C.

2012-02-11  Martin Robinson  <mrobinson@igalia.com>

        [GStreamer] html5test.com says that gstreamer ports do not support WebM for audio
        https://bugs.webkit.org/show_bug.cgi?id=78244

        Reviewed by Eric Seidel.

        Specifically advertise support for audio/webm when we support the vorbis
        audio codec. This is necessary because gstreamer doesn't advertise it.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::mimeTypeCache): Add an override for audio/webm.

2012-02-11  Anders Carlsson  <andersca@apple.com>

        Try to fix the Windows build.

        * platform/win/PopupMenuWin.cpp:
        (WebCore::PopupMenuWin::scrollToRevealSelection):

2012-02-08  Stephen White  <senorblanco@chromium.org>

        [chromium] Enable CSS filters on composited layers.
        https://bugs.webkit.org/show_bug.cgi?id=77266

        Reviewed by James Robinson.

        Will be covered by existing tests in css3/filters (when enabled).

        * WebCore.gypi:
        Add CCRenderSurfaceFilters.* to the Chromium build.
        * platform/graphics/chromium/GraphicsLayerChromium.cpp:
        (WebCore::GraphicsLayerChromium::setFilters):
        * platform/graphics/chromium/GraphicsLayerChromium.h:
        Override setFilters() virtual from GraphicsLayer.
        * platform/graphics/chromium/LayerChromium.cpp:
        (WebCore::LayerChromium::setFilters):
        Implement setFilters() to cache the filters here...
        (WebCore::LayerChromium::pushPropertiesTo):
        ... and push them to the CCLayerImpl at commit time.
        * platform/graphics/chromium/LayerChromium.h:
        (WebCore::LayerChromium::filters):
        Implement accessor.
        * platform/graphics/chromium/RenderSurfaceChromium.h:
        (WebCore::RenderSurfaceChromium::setFilters):
        Implement stub version of setFilters(), to satisfy the templates.
        * platform/graphics/chromium/cc/CCLayerImpl.cpp:
        (WebCore::CCLayerImpl::setFilters):
        Implement setter to receive filters at commit time.
        * platform/graphics/chromium/cc/CCLayerImpl.h:
        (WebCore::CCLayerImpl::filters):
        Implement member var and accessor for filters.
        * platform/graphics/chromium/cc/CCLayerTreeHostCommon.cpp:
        (WebCore::calculateDrawTransformsAndVisibilityInternal):
        Add another clause here to force creation of a RenderSurface when
        filters are present, and to forward them from the layer to the
        RenderSurface.
        * platform/graphics/chromium/cc/CCRenderSurface.cpp:
        (WebCore::CCRenderSurface::draw):
        (WebCore::CCRenderSurface::drawLayer):
        Check for filters at draw time, apply them, and forward the result
        through the drawing traversal.
        (WebCore::CCRenderSurface::drawSurface):
        If filter bitmap is present, bind it instead of the normal
        RenderSurface texture.
        (WebCore::CCRenderSurface::applyFilters):
        Apply filters to the render surface texture, and return the result.
        This function is a no-op for the threaded compositor, due to use
        of the SharedGraphicsContext3D.
        * platform/graphics/chromium/cc/CCRenderSurface.h:
        (WebCore::CCRenderSurface::setFilters):
        (WebCore::CCRenderSurface::filters):
        (CCRenderSurface):
        Filters getters and setters.
        * platform/graphics/chromium/cc/CCRenderSurfaceFilters.cpp: Added.
        (WebCore::CCRenderSurfaceFilters::apply):
        External interface for this (static) class.  All internal
        implementation and helper functions are in the unnamed namespace.
        * platform/graphics/chromium/cc/CCRenderSurfaceFilters.h: Added.

2012-02-11  Andreas Kling  <awesomekling@apple.com>

        Node.isEqualNode() compares attributes twice.
        <http://webkit.org/b/78414>

        Reviewed by Anders Carlsson.

        A single pass across the attribute maps should be enough for anyone.

        Added a test verifying correct behavior of Node.isEqualNode() when comparing
        two elements, one of which has had attributes that were all removed,
        resulting in an empty but non-null NamedNodeMap hanging off of the element.
        Note that this change is not fixing a regression, I'm just adding the test
        since I came close to introducing a bug here.

        Test: fast/dom/isEqualNode-after-removeAttribute.html

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

2012-02-11  Andreas Kling  <awesomekling@apple.com>

        HTMLTablePartElement: Add helper method to find parent table.
        <http://webkit.org/b/78413>

        Reviewed by Anders Carlsson.

        Add HTMLTablePartElement::findParentTable() and use that in subclasses instead
        of duplicating the code.

        * html/HTMLTableCellElement.cpp:
        (WebCore::HTMLTableCellElement::additionalAttributeStyle):
        * html/HTMLTableColElement.cpp:
        (WebCore::HTMLTableColElement::additionalAttributeStyle):
        * html/HTMLTablePartElement.cpp:
        (WebCore::HTMLTablePartElement::findParentTable):
        (WebCore):
        * html/HTMLTablePartElement.h:
        (WebCore):
        (HTMLTablePartElement):
        * html/HTMLTableSectionElement.cpp:
        (WebCore::HTMLTableSectionElement::additionalAttributeStyle):

2012-02-11  Andreas Kling  <awesomekling@apple.com>

        Use Element's hasName/hasID flags to avoid unnecessary work when looking up name/id attributes.
        <http://webkit.org/b/77845>

        Reviewed by Anders Carlsson.

        Have Element::getIdAttribute() check the hasID() flag before looking up the attribute.
        Add an Element::getNameAttribute() to do the same thing with hasName().
        Update call sites to make use of these helpers whenever possible.

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::accessibilityDescription):
        * dom/DocumentOrderedMap.cpp:
        (WebCore::keyMatchesId):
        * dom/Element.h:
        (Element):
        (WebCore::Element::getIdAttribute):
        (WebCore):
        (WebCore::Element::getNameAttribute):
        * dom/NameNodeList.cpp:
        (WebCore::NameNodeList::nodeMatches):
        * dom/StaticHashSetNodeList.cpp:
        (WebCore::StaticHashSetNodeList::itemWithName):
        * dom/StaticNodeList.cpp:
        (WebCore::StaticNodeList::itemWithName):
        * html/HTMLAnchorElement.cpp:
        (WebCore::HTMLAnchorElement::name):
        * html/HTMLAppletElement.cpp:
        (WebCore::HTMLAppletElement::createRenderer):
        * html/HTMLCollection.cpp:
        (WebCore::HTMLCollection::checkForNameMatch):
        (WebCore::HTMLCollection::updateNameCache):
        * html/HTMLEmbedElement.cpp:
        (WebCore::HTMLEmbedElement::updateWidget):
        * html/HTMLFormCollection.cpp:
        (WebCore::HTMLFormCollection::updateNameCache):
        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLFormControlElement::formControlName):
        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::name):
        * html/HTMLFrameElementBase.cpp:
        (WebCore::HTMLFrameElementBase::setNameAndOpenURL):
        * html/HTMLMetaElement.cpp:
        (WebCore::HTMLMetaElement::name):
        * html/HTMLNameCollection.cpp:
        (WebCore::HTMLNameCollection::itemAfter):
        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::updateWidget):
        (WebCore::HTMLObjectElement::updateDocNamedItem):
        (WebCore::HTMLObjectElement::containsJavaApplet):
        (WebCore::HTMLObjectElement::formControlName):
        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::buildObjectForFrame):
        * page/Frame.cpp:
        (WebCore::Frame::matchLabelsAgainstElement):
        * rendering/svg/RenderSVGResourceContainer.cpp:
        (WebCore::RenderSVGResourceContainer::RenderSVGResourceContainer):
        * svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::getElementById):

2012-02-11  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r107435.
        http://trac.webkit.org/changeset/107435
        https://bugs.webkit.org/show_bug.cgi?id=78410

        It broke the Qt build (Requested by Ossy on #webkit).

        * WebCore.exp.in:
        * WebCore.xcodeproj/project.pbxproj:
        * editing/mac/EditorMac.mm:
        (WebCore::Editor::writeSelectionToPasteboard):
        * platform/Pasteboard.h:
        (WebCore):
        (Pasteboard):
        * platform/PasteboardStrategy.h: Removed.
        * platform/PlatformPasteboard.h: Removed.
        * platform/PlatformStrategies.h:
        (WebCore):
        (WebCore::PlatformStrategies::PlatformStrategies):
        (PlatformStrategies):
        * platform/mac/DragDataMac.mm:
        (WebCore::DragData::canSmartReplace):
        (WebCore::insertablePasteboardTypes):
        (WebCore::DragData::asURL):
        * platform/mac/PasteboardMac.mm:
        (WebCore):
        (WebCore::selectionPasteboardTypes):
        (WebCore::writableTypesForURL):
        (WebCore::createWritableTypesForImage):
        (WebCore::writableTypesForImage):
        (WebCore::Pasteboard::Pasteboard):
        (WebCore::Pasteboard::clear):
        (WebCore::Pasteboard::writeSelectionForTypes):
        (WebCore::Pasteboard::writePlainText):
        (WebCore::Pasteboard::writeSelection):
        (WebCore::writeURLForTypes):
        (WebCore::Pasteboard::writeURL):
        (WebCore::writeFileWrapperAsRTFDAttachment):
        (WebCore::Pasteboard::writeImage):
        (WebCore::Pasteboard::writeClipboard):
        (WebCore::Pasteboard::canSmartReplace):
        (WebCore::Pasteboard::plainText):
        (WebCore::documentFragmentWithRTF):
        (WebCore::Pasteboard::documentFragment):
        * platform/mac/PlatformPasteboardMac.mm: Removed.

2012-02-10  Antti Koivisto  <antti@apple.com>

        Move CSSOM wrapper pointer out of StylePropertySet
        https://bugs.webkit.org/show_bug.cgi?id=78406

        Reviewed by Andreas Kling.
        
        Most StylePropertySet instances never have CSSOM wrappers so having a pointer to one in
        each and and every object makes no sense.

        Move the PropertySetCSSStyleDeclaration instances to a global HashMap. This shrinks
        StylePropertySet by a pointer.
        
        Added COMPILE_ASSERT for StylePropertySet size.

        * css/StylePropertySet.cpp:
        (WebCore):
        (WebCore::StylePropertySet::StylePropertySet):
        (WebCore::StylePropertySet::~StylePropertySet):
        (WebCore::StylePropertySet::ensureCSSStyleDeclaration):
        * css/StylePropertySet.h:
        (StylePropertySet):

2012-02-10  David Barton  <dbarton@mathscribe.com>

        MathML internals - use createXXX() function naming, ASSERT()s
        https://bugs.webkit.org/show_bug.cgi?id=78384

        Reviewed by Eric Seidel.

        Standard RefPtr function naming uses "createXXX" instead of "makeXXX".
        I also added a couple of ASSERT()s.

        No new tests.

        * rendering/mathml/RenderMathMLBlock.cpp:
        (WebCore::RenderMathMLBlock::createBlockStyle):
        * rendering/mathml/RenderMathMLBlock.h:
        (RenderMathMLBlock):
        * rendering/mathml/RenderMathMLFenced.cpp:
        (WebCore::RenderMathMLFenced::createOperatorStyle):
        (WebCore::RenderMathMLFenced::makeFences):
        (WebCore::RenderMathMLFenced::addChild):
        * rendering/mathml/RenderMathMLFenced.h:
        (RenderMathMLFenced):
        * rendering/mathml/RenderMathMLFraction.cpp:
        (WebCore::RenderMathMLFraction::addChild):
        * rendering/mathml/RenderMathMLRoot.cpp:
        (WebCore::RenderMathMLRoot::addChild):
        * rendering/mathml/RenderMathMLSubSup.cpp:
        (WebCore::RenderMathMLSubSup::RenderMathMLSubSup):
        * rendering/mathml/RenderMathMLUnderOver.cpp:
        (WebCore::RenderMathMLUnderOver::RenderMathMLUnderOver):
        (WebCore::RenderMathMLUnderOver::addChild):

2012-02-10  Dan Bernstein  <mitz@apple.com>

        Non-threaded scrolling build fix.

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

2012-02-10  Edward O'Connor  <eoconnor@apple.com>

        Change values for WEBKIT_KEYFRAMES_RULE, WEBKIT_KEYFRAME_RULE
        https://bugs.webkit.org/show_bug.cgi?id=71293

        Reviewed by Chris Marrin.

        Tests: animations/animation-css-rule-types.html

        * css/CSSRule.h: Change WEBKIT_KEYFRAMES_RULE to 7 and
        WEBKIT_KEYFRAME_RULE to 8.
        * css/CSSRule.idl: Ditto.

2012-02-10  Eric Seidel  <eric@webkit.org>

        AtomicMarkupTokenBase::initializeAttributes should not create a StringImpl if it doesn't need to
        https://bugs.webkit.org/show_bug.cgi?id=78394

        Reviewed by Adam Barth.

        On the very next line is passes value to Attribute::create which takes
        an AtomicString, so this code was just allocating a StringImpl (every time)
        only to (much of the time) just release that StringImpl on the next line
        when it got the AtomicString instead.

        I discovered this while looking at DOM/Events.html, but it's unclear
        if this fix actually makes that benchmark faster.

        * xml/parser/MarkupTokenBase.h:
        (WebCore::::initializeAttributes):

2012-02-10  Anders Carlsson  <andersca@apple.com>

        Always update the scroll position through the scrolling coordinator
        https://bugs.webkit.org/show_bug.cgi?id=78403

        Reviewed by Sam Weinig.

        To get correct behavior, we always want to update the scrolling layer position
        on the scrolling thread. Do this by allowing the scrolling coordinator to intercept
        scroll position update requests and send them to the scrolling tree.

        * page/FrameView.cpp:
        (WebCore::FrameView::requestScrollPositionUpdate):
        Let the scrolling coordinator have a go at updating the scroll position for this frame view.

        * page/scrolling/ScrollingCoordinator.cpp:
        (WebCore::ScrollingCoordinator::requestScrollPositionUpdate):
        If it's a frame view we're coordinating scrolling for, tell the scrolling tree to update 
        the scroll position.

        * page/scrolling/ScrollingTree.cpp:
        (WebCore::ScrollingTree::setMainFrameScrollPosition):
        Call through to the scrolling tree node.

        * page/scrolling/ScrollingTreeNode.h:
        Add a new pure virtual setScrollPosition member function.

        (WebCore::ScrollingTreeNodeMac::setScrollPosition):
        Move most of the code from scrollBy here.

        (WebCore::ScrollingTreeNodeMac::setScrollLayerPosition):
        Rename this member function from setScrollPosition to avoid conflicts.

        (WebCore::ScrollingTreeNodeMac::scrollBy):
        Just call setScsrollPosition.

        * platform/ScrollableArea.cpp:
        (WebCore::ScrollableArea::setScrollOffsetFromAnimation):
        Call requestScrollPositionUpdate, which allows subclasses of scrollable area to intercept
        the scroll operation and call it asynchronously.

2012-02-10  Anders Carlsson  <andersca@apple.com>

        ScrollableArea should have a function for noting that the scroll position changed
        https://bugs.webkit.org/show_bug.cgi?id=78402

        Reviewed by Sam Weinig.

        The scrolling coordinator needs a specialized function to call whenever the main frame
        scrolling position has changed, so add ScrollableArea::notifyScrollPositionChanged and
        call it from the scrolling coordinator.

        * page/scrolling/ScrollingCoordinator.cpp:
        (WebCore::ScrollingCoordinator::updateMainFrameScrollPosition):
        (WebCore::ScrollingCoordinator::updateMainFrameScrollPositionAndScrollLayerPosition):
        * platform/ScrollableArea.cpp:
        (WebCore::ScrollableArea::notifyScrollPositionChanged):
        New function.

        (WebCore::ScrollableArea::setScrollOffsetFromAnimation):
        Call ScrollableArea::notifyScrollPositionChanged.

2012-02-09  Levi Weintraub  <leviw@chromium.org>

        Unreviewed build fix.

        Fixing the build by removing a duplicate definition of pixelSnappedIntRect in LayoutTypes.h and
        removing conflict markers from the changelog.

        * rendering/LayoutTypes.h:
        (pixelSnappedIntRect):
        * ChangeLog:

2012-02-09  Levi Weintraub  <leviw@chromium.org>

        Add pixelSnappedIntRect method
        https://bugs.webkit.org/show_bug.cgi?id=78054

        Reviewed by Eric Seidel.

        This patch introduces a pixelSnappedIntRect method that will snap a sub-pixel LayoutRect to
        pixel boundaries. These pixel snapped forms are what is used to communicate with the graphics
        engine (to paint at whole pixel boundaries) and the embedding app (so they don't need to 
        understand we're using sub-pixel units).

        No new tests. No change in behavior.

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::isOffScreen):
        (WebCore::AccessibilityRenderObject::boundsForVisiblePositionRange):
        * dom/Range.cpp:
        (WebCore::Range::boundingBox):
        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::paint):
        * html/shadow/TextControlInnerElements.cpp:
        (WebCore::InputFieldSpeechButtonElement::startSpeechInput):
        * page/Frame.cpp:
        (WebCore::Frame::nodeImage):
        * page/FrameView.cpp:
        (WebCore::FrameView::repaintContentRectangle):
        (WebCore::FrameView::doDeferredRepaints):
        (WebCore::FrameView::windowClipRectForLayer):
        * platform/graphics/GraphicsLayer.cpp:
        (WebCore::GraphicsLayer::paintGraphicsLayerContents):
        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::paint):
        * rendering/LayoutTypes.h:
        (WebCore::pixelSnappedIntRect):
        (WebCore):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::paintColumnContents):
        (WebCore::RenderBlock::selectionGaps):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::paintBoxDecorations):
        (WebCore::RenderBox::pushContentsClip):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paintFillLayerExtended):
        (WebCore::RenderBoxModelObject::calculateBackgroundImageGeometry):
        (WebCore::RenderBoxModelObject::drawBoxSideFromPath):
        (WebCore::RenderBoxModelObject::paintBoxShadow):
        * rendering/RenderDetailsMarker.cpp:
        (WebCore::RenderDetailsMarker::paint):
        * rendering/RenderFlowThread.cpp:
        (WebCore::RenderFlowThread::paintIntoRegion):
        * rendering/RenderFrameSet.cpp:
        (WebCore::RenderFrameSet::paintColumnBorder):
        (WebCore::RenderFrameSet::paintRowBorder):
        (WebCore::RenderFrameSet::positionFramesWithFlattening):
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::paintReplaced):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::scrollRectToVisible):
        (WebCore::RenderLayer::positionOverflowControls):
        (WebCore::RenderLayer::calculateRects):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateGraphicsLayerGeometry):
        (WebCore::paintScrollbar):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::calculateCompositedBounds):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::drawLineForBoxSide):
        (WebCore::RenderObject::addPDFURLRect):
        * rendering/RenderTextControlSingleLine.cpp:
        (WebCore::RenderTextControlSingleLine::showPopup):
        (WebCore::RenderTextControlSingleLine::paint):
        * rendering/RenderWidget.cpp:
        (WebCore::RenderWidget::paint):
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::getRoundedBorderFor):
        (WebCore::RenderStyle::getRoundedInnerBorderFor):

2012-02-09  Levi Weintraub  <leviw@chromium.org>

        Add pixelSnappedIntRect method
        https://bugs.webkit.org/show_bug.cgi?id=78054

        Reviewed by Eric Seidel.

        This patch introduces a pixelSnappedIntRect method that will snap a sub-pixel LayoutRect to
        pixel boundaries. These pixel snapped forms are what is used to communicate with the graphics
        engine (to paint at whole pixel boundaries) and the embedding app (so they don't need to 
        understand we're using sub-pixel units).

        No new tests. No change in behavior.

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::isOffScreen):
        (WebCore::AccessibilityRenderObject::boundsForVisiblePositionRange):
        * dom/Range.cpp:
        (WebCore::Range::boundingBox):
        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::paint):
        * html/shadow/TextControlInnerElements.cpp:
        (WebCore::InputFieldSpeechButtonElement::startSpeechInput):
        * page/Frame.cpp:
        (WebCore::Frame::nodeImage):
        * page/FrameView.cpp:
        (WebCore::FrameView::repaintContentRectangle):
        (WebCore::FrameView::doDeferredRepaints):
        (WebCore::FrameView::windowClipRectForLayer):
        * platform/graphics/GraphicsLayer.cpp:
        (WebCore::GraphicsLayer::paintGraphicsLayerContents):
        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::paint):
        * rendering/LayoutTypes.h:
        (WebCore::pixelSnappedIntRect):
        (WebCore):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::paintColumnContents):
        (WebCore::RenderBlock::selectionGaps):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::paintBoxDecorations):
        (WebCore::RenderBox::pushContentsClip):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paintFillLayerExtended):
        (WebCore::RenderBoxModelObject::calculateBackgroundImageGeometry):
        (WebCore::RenderBoxModelObject::drawBoxSideFromPath):
        (WebCore::RenderBoxModelObject::paintBoxShadow):
        * rendering/RenderDetailsMarker.cpp:
        (WebCore::RenderDetailsMarker::paint):
        * rendering/RenderFlowThread.cpp:
        (WebCore::RenderFlowThread::paintIntoRegion):
        * rendering/RenderFrameSet.cpp:
        (WebCore::RenderFrameSet::paintColumnBorder):
        (WebCore::RenderFrameSet::paintRowBorder):
        (WebCore::RenderFrameSet::positionFramesWithFlattening):
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::paintReplaced):
                * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::scrollRectToVisible):
        (WebCore::RenderLayer::positionOverflowControls):
        (WebCore::RenderLayer::calculateRects):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateGraphicsLayerGeometry):
        (WebCore::paintScrollbar):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::calculateCompositedBounds):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::drawLineForBoxSide):
        (WebCore::RenderObject::addPDFURLRect):
        * rendering/RenderTextControlSingleLine.cpp:
        (WebCore::RenderTextControlSingleLine::showPopup):
        (WebCore::RenderTextControlSingleLine::paint):
        * rendering/RenderWidget.cpp:
        (WebCore::RenderWidget::paint):
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::getRoundedBorderFor):
        (WebCore::RenderStyle::getRoundedInnerBorderFor):

2012-02-10  Brian Weinstein  <bweinstein@apple.com>

        Web Inspector: Add the ability to jump to the source for a given frame
        https://bugs.webkit.org/show_bug.cgi?id=78396

        Reviewed by Tim Hatcher.

        * WebCore.exp.in: Add a new exported function.
        * inspector/InspectorController.cpp: Add and expose the InspectorPageAgent.
        (WebCore::InspectorController::InspectorController): Set m_pageAgent.
        * inspector/InspectorController.h: Add m_pageAgent.
        (WebCore::InspectorController::pageAgent): Return m_pageAgent.

        * inspector/InspectorFrontendClientLocal.cpp:
        (WebCore::InspectorFrontendClientLocal::showMainResourceForFrame): Get the inspector's frame ID
            of the frame that was passed in, and add a call to evaluate on load.
        * inspector/InspectorFrontendClientLocal.h:

        * inspector/front-end/InspectorFrontendAPI.js:
        (InspectorFrontendAPI.showMainResourceForFrame): Add a FIXME to show the source code for the main
            resource of the given frame.

2012-02-10  Vineet Chaudhary  <rgf748@motorola.com>

        https://bugs.webkit.org/show_bug.cgi?id=72756
        DOMHTMLElement’s accessKey property is declared as available in WebKit version that didn’t have it. 

        Reviewed by Timothy Hatcher.

        No new tests.

        * bindings/objc/PublicDOMInterfaces.h: Moving accessKey property to DOMHTMLElement
          with an appropriate availability macro AVAILABLE_AFTER_WEBKIT_VERSION_5_1.
          Also Moving accessKey property to HTMLAnchorElement, HTMLAreaElement, HTMLButtonElement,
          HTMLInputElement, HTMLLabelElement, HTMLLegendElement  and HTMLTextAreaElement idls
          with an availability macro AVAILABLE_WEBKIT_VERSION_1_3_AND_LATER_BUT_DEPRECATED_AFTER_WEBKIT_VERSION_5_1.
        * html/HTMLAnchorElement.idl: Adding accessKey entries back to idls under LANGUAGE_OBJECTIVE_C.
        * html/HTMLAreaElement.idl: Ditto.
        * html/HTMLButtonElement.idl: Ditto.
        * html/HTMLInputElement.idl: Ditto.
        * html/HTMLLabelElement.idl: Ditto.
        * html/HTMLLegendElement.idl: Ditto.
        * html/HTMLTextAreaElement.idl: Ditto.

2012-02-10  Beth Dakin  <bdakin@apple.com>

        Speculative build fix.

        * platform/win/PopupMenuWin.cpp:
        (WebCore::PopupMenuWin::scrollToRevealSelection):

2012-02-10  Adam Klein  <adamk@chromium.org>

        Enable MUTATION_OBSERVERS by default on all platforms
        https://bugs.webkit.org/show_bug.cgi?id=78196

        Reviewed by Ojan Vafai.

        * Configurations/FeatureDefines.xcconfig:
        * UseV8.cmake: Add some previously-missing files.
        * WebCore.vcproj/WebCore.vcproj: ditto.
        * bindings/js/JSBindingsAllInOne.cpp: ditto.
        * dom/DOMAllInOne.cpp: ditto.

2012-02-10  Emil A Eklund  <eae@chromium.org> and Levi Weintraub  <leviw@chromium.org>

        Add FractionalLayoutUnit type for sub-pixel layout
        https://bugs.webkit.org/show_bug.cgi?id=77485

        Reviewed by Eric Seidel.

        Add fixed point implementation (FractionalLayoutUnit).

        FractionalLayoutUnit represents values as multiples of 1/60th pixel. This allows us
        to represent sub-pixel values using integer math and avoids floating point precision
        problems.

        No new tests.

        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/FractionalLayoutUnit.h: Added.

2012-02-10  Adam Langley  <agl@chromium.org>

        Don't lowercase ping URLs.

        Previously, ping URLs would be lowercased when splitting them apart.
        URLs are not, however, case-insensitive.

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

        Reviewed by Tony Chang.

        * html/HTMLAnchorElement.cpp:
        (WebCore::HTMLAnchorElement::sendPings): Don't lowercase URL.

2012-02-10  Ojan Vafai  <ojan@chromium.org>

        flex-pack:center and flex-item-align:center should do true centering
        https://bugs.webkit.org/show_bug.cgi?id=77385

        Reviewed by Tony Chang.

        Also, removed passing totalPositiveFlexibility around. We don't
        need to know about positive/negative flex once we run the flexing algorithm.
        We used to need to know this in order to flex margins, but margins can
        no longer be flexed.

        Test: css3/flexbox/true-centering.html

        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::layoutFlexItems):
        (WebCore::initialPackingOffset):
        (WebCore::packingSpaceBetweenChildren):
        (WebCore::RenderFlexibleBox::layoutAndPlaceChildren):
        (WebCore::RenderFlexibleBox::layoutColumnReverse):
        * rendering/RenderFlexibleBox.h:
        (RenderFlexibleBox):

2012-02-10  Mark Hahnenberg  <mhahnenberg@apple.com>

        Split MarkedSpace into destructor and destructor-free subspaces
        https://bugs.webkit.org/show_bug.cgi?id=77761

        Reviewed by Geoffrey Garen.

        No new tests.

        * bindings/js/JSDOMWindowShell.cpp: Removed old operator new, which was just used in the create
        function so that we can use allocateCell instead.
        (WebCore):
        * bindings/js/JSDOMWindowShell.h:
        (WebCore::JSDOMWindowShell::create):
        (JSDOMWindowShell):
        * bindings/scripts/CodeGeneratorJS.pm: Added destructor back to root JS DOM nodes (e.g. JSNode, etc)
        because their destroy functions need to be called, so we don't want the NeedsDestructor struct to 
        think they don't need destruction due to having empty/trivial destructors.
        Removed ASSERT_HAS_TRIVIAL_DESTRUCTOR from all JS DOM wrapper auto-generated objects because their 
        ancestors now have non-trivial destructors. 
        (GenerateHeader):
        (GenerateImplementation):
        (GenerateConstructorDefinition):

2012-02-10  Anders Carlsson  <andersca@apple.com>

        Remove a bunch of unused ScrollableArea member functions
        https://bugs.webkit.org/show_bug.cgi?id=78388

        Reviewed by Beth Dakin.

        * platform/ScrollableArea.cpp:
        * platform/ScrollableArea.h:

2012-02-10  Pavel Podivilov  <podivilov@chromium.org>

        Fix a few typos in IDL exception names.
        https://bugs.webkit.org/show_bug.cgi?id=78356

        Reviewed by Adam Barth.

        * dom/Node.idl:
        * notifications/NotificationCenter.idl:
        * page/Navigator.idl:

2012-02-10  Benjamin Poulain  <bpoulain@apple.com>

        DefaultLocalizationStrategy::htmlSelectMultipleItems() should use size_t instead of int
        https://bugs.webkit.org/show_bug.cgi?id=78374

        Reviewed by Joseph Pecoraro.

        The value comes from size_t and is converted to int for no good reason. We should use
        size_t.

        * platform/DefaultLocalizationStrategy.cpp:
        (WebCore::DefaultLocalizationStrategy::htmlSelectMultipleItems):
        * platform/DefaultLocalizationStrategy.h:
        (DefaultLocalizationStrategy):

2012-02-10  Anders Carlsson  <andersca@apple.com>

        More ScrollableArea cleanup
        https://bugs.webkit.org/show_bug.cgi?id=78383

        Reviewed by Beth Dakin.

        Get rid of setScrollOriginX and setScrollOriginY. Make ScrollableArea::setScrollOrigin private.

        * platform/ScrollView.cpp:
        (WebCore::ScrollView::updateScrollbars):
        * platform/ScrollableArea.cpp:
        (WebCore::ScrollableArea::setScrollOrigin):
        * platform/ScrollableArea.h:
        (ScrollableArea):

2012-02-10  Kentaro Hara  <haraken@chromium.org>

        Rename [JSCustomPrototypePutDelegate] to [JSCustomNamedGetterOnPrototype]
        https://bugs.webkit.org/show_bug.cgi?id=78353

        Reviewed by Adam Barth.

        [JSCustomPrototypePutDelegate] is used to write custom code for named
        getters on a prototype interface. "PutDelegate" is just a method name
        in implementation and not so descriptive. This patch renames it to
        [JSCustomNamedGetterOnPrototype]. This is also for naming consistency
        with [CustomNamedGetter].

        No tests. No change in behavior.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateHeader):
        (GenerateImplementation):
        * page/Location.idl:

2012-02-10  Enrica Casucci  <enrica@apple.com>

        Refactor Mac platform implementation of the Pasteboard class to use Platform Strategies.
        https://bugs.webkit.org/show_bug.cgi?id=78282

        This patch removes any accesss to the NSPasteboard object from the Pasteboard class which
        now makes use of a new pasteboardStrategy object that is implemented both in WebKit and
        WebKit2. The actual access to NSPasteboard is now performed inside the PlatformPasteboard
        class. Currently both WebKit and WebKit2 use the same implementation of the PasteboardStrategy
        interface but this one more step in the direction of removing access to NSPasteboard from
        the WebProcess.
        As part of the refactoring the I've reduced to a minimum the use of OBJ-C classes.
        
        Reviewed by Anders Carlsson.

        No new tests. No change in behavior, just code refactoring.

        * WebCore.exp.in: Added exported class PlatformPasteboard.
        * WebCore.xcodeproj/project.pbxproj: Added new files to the build.
        * editing/mac/EditorMac.mm:
        (WebCore::Editor::writeSelectionToPasteboard): New method signature that doesn't use OBJ-C types.
        * platform/Pasteboard.h:

        * platform/PasteboardStrategy.h: Added PasteboardStrategy abstract class.
        * platform/PlatformPasteboard.h: Added. This class implements access to NSPasteboard.
        * platform/PlatformStrategies.h:
        (WebCore::PlatformStrategies::pasteboardStrategy): Added.
        * platform/mac/DragDataMac.mm:
        (WebCore::DragData::canSmartReplace):
        (WebCore::insertablePasteboardTypes): 
        (WebCore::DragData::asURL):
        * platform/mac/PasteboardMac.mm:
        (WebCore::selectionPasteboardTypes): Changed to use Vector<String> instead of NSArray.
        (WebCore::writableTypesForURL): Ditto.
        (WebCore::createWritableTypesForImage): Ditto.
        (WebCore::writableTypesForImage): Ditto.
        (WebCore::Pasteboard::Pasteboard): Removed access to NSPasteboard.
        (WebCore::Pasteboard::clear): Modified to use platformStrategies()->pasteboardStrategy().
        (WebCore::Pasteboard::writeSelectionForTypes): Ditto.
        (WebCore::Pasteboard::writePlainText): Ditto.
        (WebCore::Pasteboard::writeSelection): Ditto.
        (WebCore::writeURLForTypes): Ditto.
        (WebCore::Pasteboard::writeURL): Ditto.
        (WebCore::writeFileWrapperAsRTFDAttachment): Ditto.
        (WebCore::Pasteboard::writeImage): Ditto.
        (WebCore::Pasteboard::writeClipboard): Ditto.
        (WebCore::Pasteboard::canSmartReplace): Ditto.
        (WebCore::Pasteboard::plainText): Ditto.
        (WebCore::documentFragmentWithRTF): Ditto.
        (WebCore::Pasteboard::documentFragment): Ditto.
        * platform/mac/PlatformPasteboardMac.mm: Added.
        (WebCore::PlatformPasteboard::PlatformPasteboard):
        (WebCore::PlatformPasteboard::getTypes):
        (WebCore::PlatformPasteboard::bufferForType):
        (WebCore::PlatformPasteboard::getPathnamesForType):
        (WebCore::PlatformPasteboard::stringForType):
        (WebCore::PlatformPasteboard::copy):
        (WebCore::PlatformPasteboard::setTypes):
        (WebCore::PlatformPasteboard::setBufferForType):
        (WebCore::PlatformPasteboard::setPathnamesForType):
        (WebCore::PlatformPasteboard::setStringForType):

2012-02-10  Kentaro Hara  <haraken@chromium.org>

        Rename [JSCustomGetOwnPropertySlotDelegate] to [JSCustomGetOwnPropertySlotAndDescriptor]
        https://bugs.webkit.org/show_bug.cgi?id=78352

        Reviewed by Adam Barth.

        [JSCustomGetOwnPropertySlotDelegate] is used for "flexibly customizable"
        named getter. It allows us to write custom code for getOwnPropertySlotDelegate()
        and getOwnPropertyDescriptorDelegate(). To clarify that, we can rename
        [JSCustomGetOwnPropertySlotDelegate] to [JSCustomGetOwnPropertySlotAndDescriptor].

        No tests. No change in behavior.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateGetOwnPropertySlotBody):
        (GenerateGetOwnPropertyDescriptorBody):
        (GenerateHeader):
        (GenerateImplementation):

        * html/HTMLAppletElement.idl:
        * html/HTMLEmbedElement.idl:
        * html/HTMLObjectElement.idl:
        * page/History.idl:
        * page/Location.idl:
        * workers/WorkerContext.idl:

2012-02-10  Anders Carlsson  <andersca@apple.com>

        Minor ScrollAnimatorMac cleanup
        https://bugs.webkit.org/show_bug.cgi?id=78375

        Reviewed by Beth Dakin.

        Get rid of adjustScrollXPositionIfNecessary and adjustScrollYPositionIfNecessary.
        Also, reduce nesting in willAdd/didAdd functions by using early returns.

        * platform/mac/ScrollAnimatorMac.h:
        (ScrollAnimatorMac):
        * platform/mac/ScrollAnimatorMac.mm:
        (WebCore::ScrollAnimatorMac::didAddVerticalScrollbar):
        (WebCore::ScrollAnimatorMac::willRemoveVerticalScrollbar):
        (WebCore::ScrollAnimatorMac::didAddHorizontalScrollbar):
        (WebCore::ScrollAnimatorMac::willRemoveHorizontalScrollbar):
        (WebCore::ScrollAnimatorMac::immediateScrollBy):

2012-02-10  Anders Carlsson  <andersca@apple.com>

        Minor ScrollableArea cleanup
        https://bugs.webkit.org/show_bug.cgi?id=78372

        Reviewed by Beth Dakin.

        Get rid of scrollToXOffsetWithoutAnimation and scrollToYOffsetWithoutAnimation.

        * platform/ScrollableArea.cpp:
        (WebCore::ScrollableArea::scrollToOffsetWithoutAnimation):
        * platform/ScrollableArea.h:
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::computeLogicalHeight):
        (WebCore::RenderListBox::scrollToRevealElementAtListIndex):
        (WebCore::RenderListBox::setScrollTop):

2012-02-10  Benjamin Poulain  <bpoulain@apple.com>

        [Mac] DYLIB_INSTALL_NAME_BASE should not be prefixed by the SDKROOT
        https://bugs.webkit.org/show_bug.cgi?id=78320

        Reviewed by Joseph Pecoraro.

        <rdar://problem/10839750>

        * Configurations/WebCore.xcconfig:

2012-02-10  Anders Carlsson  <andersca@apple.com>

        Update the non-fast-scrollable region for subframe layout as well
        https://bugs.webkit.org/show_bug.cgi?id=78366
        <rdar://problem/10844064>

        Reviewed by Beth Dakin.

        * page/scrolling/ScrollingCoordinator.cpp:
        (WebCore::computeNonFastScrollableRegion):
        Move the non-fast-scrollable region computation out into a new function.

        (WebCore::ScrollingCoordinator::frameViewLayoutUpdated):
        Always recompute the non-fast-scrollable region whenever a frame view's layout is updated,
        not just the main frame.

2012-02-09  Chris Marrin  <cmarrin@apple.com>

        Implement hardware animation of CSS filters
        https://bugs.webkit.org/show_bug.cgi?id=78155

        Added logic to PlatformCAAnimation to return enough information
        to GraphicsLayerCA to be able to construct a keyPath animation
        for each filter property. Some filters need to animate multiple
        properties per filter, so PlatformCAAnimation also returns the number
        of properties per filter and then an animation is constructed for 
        each one. Also added all the support logic to handle hardware filter
        animation in the higher level logic, just like we do for transforms and
        opacity.

        Also stubbed out new PlatformCAAnimation functions for Windows. We don't yet
        support hardware filters on Windows.

        Reviewed by Dean Jackson.

        Tests: css3/filters/filter-animation-from-none-hw.html
               css3/filters/filter-animation-from-none-multi-hw.html
               css3/filters/filter-animation-from-none-multi.html
               css3/filters/filter-animation-hw.html
               css3/filters/filter-animation-multi-hw.html
               css3/filters/filter-animation-multi.html

        * page/animation/AnimationBase.cpp:
        (WebCore):
        (PropertyWrapperAcceleratedFilter):
        (WebCore::PropertyWrapperAcceleratedFilter::PropertyWrapperAcceleratedFilter):
        (WebCore::PropertyWrapperAcceleratedFilter::animationIsAccelerated):
        (WebCore::PropertyWrapperAcceleratedFilter::blend):
        (WebCore::AnimationBase::ensurePropertyMap):
        * platform/graphics/GraphicsLayer.cpp:
        (WebCore):
        (WebCore::filterOperationsAt):
        (WebCore::GraphicsLayer::validateFilterOperations):
        * platform/graphics/GraphicsLayer.h:
        (WebCore):
        (FilterAnimationValue):
        (WebCore::FilterAnimationValue::FilterAnimationValue):
        (WebCore::FilterAnimationValue::clone):
        (WebCore::FilterAnimationValue::value):
        (GraphicsLayer):
        * platform/graphics/GraphicsLayerClient.h:
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::propertyIdToString):
        (WebCore::GraphicsLayerCA::moveOrCopyAnimations):
        (WebCore::GraphicsLayerCA::addAnimation):
        (WebCore::GraphicsLayerCA::ensureStructuralLayer):
        (WebCore::GraphicsLayerCA::createAnimationFromKeyframes):
        (WebCore::GraphicsLayerCA::appendToUncommittedAnimations):
        (WebCore):
        (WebCore::GraphicsLayerCA::createFilterAnimationsFromKeyframes):
        (WebCore::GraphicsLayerCA::createBasicAnimation):
        (WebCore::GraphicsLayerCA::createKeyframeAnimation):
        (WebCore::GraphicsLayerCA::setFilterAnimationEndpoints):
        (WebCore::GraphicsLayerCA::setFilterAnimationKeyframes):
        (WebCore::GraphicsLayerCA::swapFromOrToTiledLayer):
        (WebCore::GraphicsLayerCA::cloneLayer):
        * platform/graphics/ca/GraphicsLayerCA.h:
        (GraphicsLayerCA):
        * platform/graphics/ca/PlatformCAAnimation.h:
        (PlatformCAAnimation):
        * platform/graphics/ca/mac/PlatformCAAnimationMac.mm:
        (PlatformCAAnimation::setFromValue):
        (PlatformCAAnimation::setToValue):
        (PlatformCAAnimation::setValues):
        (PlatformCAAnimation::numAnimatedFilterProperties):
        (PlatformCAAnimation::animatedFilterPropertyName):
        * platform/graphics/ca/win/PlatformCAAnimationWin.cpp:
        (PlatformCAAnimation::setFromValue):
        (PlatformCAAnimation::setToValue):
        (PlatformCAAnimation::setValues):
        (PlatformCAAnimation::numAnimatedFilterProperties):
        (PlatformCAAnimation::animatedFilterPropertyName):
        * platform/graphics/filters/FilterOperation.h:
        (FilterOperation):
        (WebCore::FilterOperation::isDefault):
        (DefaultFilterOperation):
        (WebCore::DefaultFilterOperation::create):
        (WebCore::DefaultFilterOperation::operator==):
        (WebCore::DefaultFilterOperation::isDefault):
        (WebCore::DefaultFilterOperation::DefaultFilterOperation):
        (WebCore):
        * rendering/RenderLayer.h:
        (WebCore::RenderLayer::hasFilter):
        (RenderLayer):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::startAnimation):
        (WebCore::RenderLayerBacking::startTransition):
        (WebCore::RenderLayerBacking::graphicsLayerToCSSProperty):
        (WebCore::RenderLayerBacking::cssToGraphicsLayerProperty):

2012-02-10  Peter Rybin  <peter.rybin@gmail.com>

        Web Inspector: CodeGeneratorInspector.py: properly resolve output types of commands
        https://bugs.webkit.org/show_bug.cgi?id=78025

        Reviewed by Vsevolod Vlasov.

        Code for generating ad-hoc types is added. It was reused from event
        generator part.

        * inspector/CodeGeneratorInspector.py:
        (Generator.process_event):
        (Generator.process_command):
        (Generator.resolve_type_and_generate_ad_hoc):
        (Generator.resolve_type_and_generate_ad_hoc.AdHocTypeContext):
        (Generator.resolve_type_and_generate_ad_hoc.AdHocTypeContext.get_type_name_fix):
        (Generator.resolve_type_and_generate_ad_hoc.AdHocTypeContext.get_type_name_fix.NameFix):
        (Generator.resolve_type_and_generate_ad_hoc.AdHocTypeContext.get_type_name_fix.NameFix.output_comment):
        (Generator.resolve_type_and_generate_ad_hoc.AdHocTypeContext.add_type):
        (Generator.resolve_type_and_generate_ad_hoc.InterfaceForwardListener):
        (Generator.resolve_type_and_generate_ad_hoc.InterfaceForwardListener.add_type_data):
        (Generator.resolve_type_and_generate_ad_hoc.InterfaceResolveContext):
        (Generator.resolve_type_and_generate_ad_hoc.InterfaceGenerateContext):
        (Generator):

2012-02-10  Kentaro Hara  <haraken@chromium.org>

        Rename [CustomPropertyNames] to [CustomEnumerateProperty]
        https://bugs.webkit.org/show_bug.cgi?id=78351

        Reviewed by Adam Barth.

        This patch renames [CustomPropertyNames] to [CustomEnumerateProperty],
        for clarification and for naming consistency with [CustomDeleteProperty].

        No tests. No change in behavior.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateHeader):
        (GenerateImplementation):
        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateHeaderNamedAndIndexedPropertyAccessors):
        (GenerateImplementationNamedPropertyGetter):

        * css/CSSStyleDeclaration.idl:
        * dom/DOMStringMap.idl:
        * page/DOMWindow.idl:
        * page/History.idl:
        * page/Location.idl:
        * storage/Storage.idl:

2012-02-09  Antti Koivisto  <antti@apple.com>

        Use underlying property set to refcount PropertySetCSSStyleDeclaration
        https://bugs.webkit.org/show_bug.cgi?id=78257

        Reviewed by Andreas Kling.

        Clean up the PropertySetCSSStyleDeclaration refcounting. PropertySetCSSStyleDeclaration now
        forwards the ref/deref to the underlying StylePropertySet.

        Also made CSSComputedStyleDeclaration construction use the standard create() pattern.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::ref):
        (WebCore):
        (WebCore::CSSComputedStyleDeclaration::deref):
        * css/CSSComputedStyleDeclaration.h:
        (WebCore::CSSComputedStyleDeclaration::create):
        (CSSComputedStyleDeclaration):
        (WebCore):
        * css/CSSStyleDeclaration.h:
        (CSSStyleDeclaration):
        * css/StylePropertySet.cpp:
        (WebCore::PropertySetCSSStyleDeclaration::PropertySetCSSStyleDeclaration):
        (WebCore):
        (WebCore::StylePropertySet::~StylePropertySet):
        (WebCore::StylePropertySet::ensureCSSStyleDeclaration):
        (WebCore::PropertySetCSSStyleDeclaration::makeMutable):
        * css/StylePropertySet.h:
        * editing/ApplyStyleCommand.cpp:
        (WebCore::ApplyStyleCommand::splitAncestorsWithUnicodeBidi):
        (WebCore::ApplyStyleCommand::removeEmbeddingUpToEnclosingBlock):
        (WebCore::highestEmbeddingAncestor):
        (WebCore::ApplyStyleCommand::computedFontSize):
        * editing/EditingStyle.cpp:
        (WebCore::EditingStyle::init):
        (WebCore::EditingStyle::removeStyleAddedByNode):
        (WebCore::EditingStyle::removeStyleConflictingWithStyleOfNode):
        (WebCore::EditingStyle::triStateOfStyle):
        (WebCore::EditingStyle::styleIsPresentInComputedStyleOfNode):
        (WebCore::EditingStyle::mergeStyleFromRulesForSerialization):
        (WebCore::backgroundColorInEffect):
        * editing/Editor.cpp:
        (WebCore::Editor::textDirectionForSelection):
        * inspector/InspectorCSSAgent.cpp:
        (WebCore::InspectorCSSAgent::getComputedStyleForNode):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::getComputedStyle):
        * svg/SVGAnimateElement.cpp:
        (WebCore::getPropertyValue):
        * svg/animation/SMILTimeContainer.cpp:
        (WebCore::SMILTimeContainer::baseValueFor):

2012-02-10  Alexander Pavlov  <apavlov@chromium.org>

        Web Inspector: [TextPrompt] TAB should complete suggestions up to their common prefix in Console
        https://bugs.webkit.org/show_bug.cgi?id=78236

        Reviewed by Vsevolod Vlasov.

        * inspector/front-end/TextPrompt.js:
        (WebInspector.TextPrompt.prototype._completionsReady):
        (WebInspector.TextPrompt.prototype._completeCommonPrefix):
        (WebInspector.TextPrompt.prototype.acceptSuggestion):
        (WebInspector.TextPrompt.prototype.tabKeyPressed):

2012-02-10  Pavel Feldman  <pfeldman@google.com>

        Web Inspector: implement undo for setOuterHTML via undo-ing nested primitive commands.
        https://bugs.webkit.org/show_bug.cgi?id=78346

        Reviewed by Yury Semikhatsky.

        Tests: inspector/elements/undo-set-outer-html-2.html
               inspector/elements/undo-set-outer-html.html

        * inspector/DOMEditor.cpp:
        (WebCore::DOMEditor::RemoveChildAction::RemoveChildAction):
        (WebCore::DOMEditor::InsertBeforeAction::InsertBeforeAction):
        (WebCore::DOMEditor::InsertBeforeAction::undo):
        (WebCore::DOMEditor::RemoveAttributeAction::RemoveAttributeAction):
        (WebCore::DOMEditor::SetAttributeAction::SetAttributeAction):
        (WebCore::DOMEditor::SetOuterHTMLAction::SetOuterHTMLAction):
        (WebCore::DOMEditor::SetOuterHTMLAction::perform):
        (WebCore::DOMEditor::SetOuterHTMLAction::undo):
        (DOMEditor::SetOuterHTMLAction):
        (WebCore::DOMEditor::ReplaceWholeTextAction::ReplaceWholeTextAction):
        (DOMEditor::ReplaceChildNodeAction):
        (WebCore::DOMEditor::ReplaceChildNodeAction::ReplaceChildNodeAction):
        (WebCore::DOMEditor::ReplaceChildNodeAction::perform):
        (WebCore::DOMEditor::ReplaceChildNodeAction::undo):
        (WebCore):
        (DOMEditor::SetNodeValueAction):
        (WebCore::DOMEditor::SetNodeValueAction::SetNodeValueAction):
        (WebCore::DOMEditor::SetNodeValueAction::perform):
        (WebCore::DOMEditor::SetNodeValueAction::undo):
        (WebCore::DOMEditor::insertBefore):
        (WebCore::DOMEditor::removeChild):
        (WebCore::DOMEditor::setAttribute):
        (WebCore::DOMEditor::removeAttribute):
        (WebCore::DOMEditor::setOuterHTML):
        (WebCore::DOMEditor::replaceWholeText):
        (WebCore::DOMEditor::replaceChild):
        (WebCore::DOMEditor::setNodeValue):
        (WebCore::populateErrorString):
        * inspector/DOMEditor.h:
        (DOMEditor):
        * inspector/DOMPatchSupport.cpp:
        (WebCore::DOMPatchSupport::patchDocument):
        (WebCore):
        (WebCore::DOMPatchSupport::DOMPatchSupport):
        (WebCore::DOMPatchSupport::patchNode):
        (WebCore::DOMPatchSupport::innerPatchNode):
        (WebCore::DOMPatchSupport::innerPatchChildren):
        (WebCore::DOMPatchSupport::insertBeforeAndMarkAsUsed):
        (WebCore::DOMPatchSupport::removeChildAndMoveToNew):
        * inspector/DOMPatchSupport.h:
        (WebCore):
        (DOMPatchSupport):
        * inspector/InspectorCSSAgent.cpp:
        (WebCore::InspectorCSSAgent::StyleSheetAction::perform):
        (WebCore::InspectorCSSAgent::StyleSheetAction::undo):
        (InspectorCSSAgent::StyleSheetAction):
        (WebCore::InspectorCSSAgent::SetStyleSheetTextAction::perform):
        (WebCore::InspectorCSSAgent::SetStyleSheetTextAction::undo):
        (WebCore::InspectorCSSAgent::SetPropertyTextAction::perform):
        (WebCore::InspectorCSSAgent::SetPropertyTextAction::undo):
        (WebCore::InspectorCSSAgent::TogglePropertyAction::perform):
        (WebCore::InspectorCSSAgent::TogglePropertyAction::undo):
        (WebCore::InspectorCSSAgent::setStyleSheetText):
        (WebCore::InspectorCSSAgent::setPropertyText):
        (WebCore::InspectorCSSAgent::toggleProperty):
        (WebCore::InspectorCSSAgent::assertStyleSheetForId):
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::toErrorString):
        (WebCore):
        (WebCore::InspectorDOMAgent::setAttributesAsText):
        (WebCore::InspectorDOMAgent::setOuterHTML):
        (WebCore::InspectorDOMAgent::undo):
        * inspector/InspectorDOMAgent.h:
        (InspectorDOMAgent):
        * inspector/InspectorHistory.cpp:
        (WebCore::InspectorHistory::perform):
        (WebCore::InspectorHistory::undo):
        * inspector/InspectorHistory.h:
        (WebCore):
        (Action):
        (InspectorHistory):
        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::setDocumentContent):
        * inspector/InspectorStyleSheet.cpp:
        (WebCore::InspectorStyle::setPropertyText):
        (WebCore::InspectorStyle::toggleProperty):
        (WebCore::InspectorStyleSheet::setPropertyText):
        (WebCore::InspectorStyleSheet::toggleProperty):
        * inspector/InspectorStyleSheet.h:
        (InspectorStyle):
        (InspectorStyleSheet):

2012-02-10  Kentaro Hara  <haraken@chromium.org>

        Replace [CustomArgumentHandling] with [CallWith=ScriptArguments|CallStack]
        https://bugs.webkit.org/show_bug.cgi?id=78327

        Reviewed by Adam Barth.

        This patch replaces [CustomArgumentHandling] with [CallWith=ScriptArguments|CallStack],
        and removes [CustomArgumentHandling].

        Test: bindings/scripts/test/TestObj.idl

        * bindings/scripts/CodeGeneratorJS.pm: Modified to replace
        [CustomArgumentHandling] with [CallWith=ScriptArguments|CallStack].
        (GenerateCallWith):
        (GenerateParametersCheck):
        * bindings/scripts/CodeGeneratorV8.pm: Ditto.
        (GenerateCallWith):
        * bindings/scripts/CodeGeneratorGObject.pm: Ditto.
        (SkipFunction):
        (GenerateFunction):
        * bindings/scripts/CodeGeneratorCPP.pm: Simply removed [CustomArgumentHandling]
        from the skipped list. By this fix, CodeGeneratorCPP.pm will generate
        meaningless code for attributes or methods which was previously marked as
        [CustomArgumentHandling], but this change will be harmless.
        (ShouldSkipType):

        * bindings/v8/custom/V8ConsoleCustom.cpp: Changed the argument order.
        (WebCore::V8Console::assertCallback):
        * page/Console.cpp: Ditto.
        (WebCore::Console::assertCondition):
        (WebCore::Console::timeEnd):
        * page/Console.h: Ditto.
        (Console):

        * bindings/scripts/test/TestObj.idl: Added test cases for [CallWith=ScriptArguments|CallStack].

        * bindings/scripts/test/CPP/WebDOMTestObj.cpp: Updated run-bindings-tests results.
        (WebDOMTestObj::withScriptArgumentsAndCallStackAttribute):
        (WebDOMTestObj::setWithScriptArgumentsAndCallStackAttribute):
        (WebDOMTestObj::withScriptArgumentsAndCallStack):
        * bindings/scripts/test/CPP/WebDOMTestObj.h:
        * bindings/scripts/test/GObject/WebKitDOMTestObj.cpp:
        (webkit_dom_test_obj_with_script_arguments_and_call_stack):
        (webkit_dom_test_obj_get_with_script_arguments_and_call_stack_attribute):
        (webkit_dom_test_obj_set_with_script_arguments_and_call_stack_attribute):
        (webkit_dom_test_obj_get_property):
        (webkit_dom_test_obj_class_init):
        * bindings/scripts/test/GObject/WebKitDOMTestObj.h:
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore):
        (WebCore::jsTestObjWithScriptArgumentsAndCallStackAttribute):
        (WebCore::setJSTestObjWithScriptArgumentsAndCallStackAttribute):
        (WebCore::jsTestObjPrototypeFunctionWithScriptArgumentsAndCallStack):
        * bindings/scripts/test/JS/JSTestObj.h:
        (WebCore):
        * bindings/scripts/test/ObjC/DOMTestObj.h:
        * bindings/scripts/test/ObjC/DOMTestObj.mm:
        (-[DOMTestObj withScriptArgumentsAndCallStackAttribute]):
        (-[DOMTestObj setWithScriptArgumentsAndCallStackAttribute:]):
        (-[DOMTestObj withScriptArgumentsAndCallStack]):
        * bindings/scripts/test/V8/V8TestObj.cpp:
        (WebCore::TestObjInternal::withScriptArgumentsAndCallStackAttributeAttrGetter):
        (TestObjInternal):
        (WebCore::TestObjInternal::withScriptArgumentsAndCallStackAttributeAttrSetter):
        (WebCore::TestObjInternal::withScriptArgumentsAndCallStackCallback):
        (WebCore):
        (WebCore::ConfigureV8TestObjTemplate):

2012-02-10  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] KURL::fileSystemPath() doesn't work if uri contains #
        https://bugs.webkit.org/show_bug.cgi?id=78339

        Reviewed by Philippe Normand.

        * platform/gtk/KURLGtk.cpp:
        (WebCore::KURL::fileSystemPath): Use GFile API instead of
        g_filename_from_uri() to convert the uri to a local
        path. g_file_get_path() removes the anchor from the uri and
        returns a valid path instead of NULL.

2012-02-10  Pablo Flouret  <pablof@motorola.com>

        CodeGeneratorJS doesn't always generate visitChildren() implementation when required
        https://bugs.webkit.org/show_bug.cgi?id=78336

        Reviewed by Kentaro Hara.
        
        In an IDL for an interface that declares no functions, but has
        attributes with [CachedAttribute], the implementation of visitChildren()
        is not generated by the JSC code generator.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateImplementation):
        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp:
        (WebCore::JSTestSerializedScriptValueInterface::visitChildren):
        (WebCore):

2012-02-10  Noel Gordon  <noel.gordon@gmail.com>

        [chromium] Increase JPEG decoding performance some more
        https://bugs.webkit.org/show_bug.cgi?id=78323

        Reviewed by Adam Barth.

        Increase JPEG image decoding speed by another 9% (avg) according to libjpeg-turbo tjbench.

        No new tests. Covered by many existing tests, all requiring subsequent rebaselines.

        * platform/image-decoders/jpeg/JPEGImageDecoder.cpp:
        (dctMethod): Fast decode on the jpeg-turbo using ports (Chrome Android, Chrome, Chromium).
        (WebCore::JPEGImageReader::decode): Select DCT method via a helper routine.

2012-02-10  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: FileSelector should not depend on DebuggerPresentationModel.
        https://bugs.webkit.org/show_bug.cgi?id=78337

        Reviewed by Pavel Feldman.

        * inspector/front-end/ScriptsNavigator.js:
        (WebInspector.ScriptsNavigator):
        (WebInspector.ScriptsNavigator.prototype._showScriptFoldersSettingChanged):
        (WebInspector.ScriptsNavigator.prototype.reset):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype._reset):
        (WebInspector.ScriptsPanel.FileSelector.prototype.replaceUISourceCodes):
        (WebInspector.ScriptsPanel.FileSelector.prototype.reset):
        (WebInspector.ScriptsPanel.ComboBoxFileSelector):
        (WebInspector.ScriptsPanel.ComboBoxFileSelector.prototype.reset):

2012-02-10  Kentaro Hara  <haraken@chromium.org>

        Remove [ConvertingNullStringTo] from CloseEvent.idl
        https://bugs.webkit.org/show_bug.cgi?id=78328

        Reviewed by Adam Barth.

        In CloseEvent.idl, [ConvertingNullStringTo] is a typo of [ConvertNullStringTo],
        (although in bug 78108, [ConvertNullStringTo] was renamed to [TreatReturnedNullStringAs]).

        Anyway, the spec says that "The reason attribute must return the value it was
        initialized to. When the object is created, this attribute must be initialized to empty string."
        http://dev.w3.org/html5/websockets/#event-definitions
        Thus, this patch removes [ConvertingNullStringTo] from CloseEvent.idl.

        Test: fast/events/constructors/close-event-constructor.html

        * websockets/CloseEvent.idl:

2012-02-10  Pavel Feldman  <pfeldman@google.com>

        [Qt] REGRESSION(r107242): It made 5 inspector tests crash in debug mode
        https://bugs.webkit.org/show_bug.cgi?id=78330

        Reviewed by Yury Semikhatsky.

        * inspector/DOMPatchSupport.cpp:
        (WebCore::DOMPatchSupport::innerPatchChildren):

2012-02-09  Andrey Kosyakov  <caseq@chromium.org>

        Web Inspector: [refactoring] TimelineModel should not depend on TimelinePanel
        https://bugs.webkit.org/show_bug.cgi?id=78254

        Reviewed by Yury Semikhatsky.

        * inspector/front-end/TimelinePanel.js:
        (WebInspector.TimelinePanel):
        (WebInspector.TimelinePanel.prototype._loadFromFile):
        (WebInspector.TimelinePanel.prototype._toggleTimelineButtonClicked):
        (WebInspector.TimelinePanel.prototype._onTimelineEventRecorded):
        (WebInspector.TimelinePanel.prototype._clearPanel):
        (WebInspector.TimelinePanel.prototype._onRecordsCleared):
        (WebInspector.TimelineModel):
        (WebInspector.TimelineModel.prototype.startRecord):
        (WebInspector.TimelineModel.prototype.stopRecord):
        (WebInspector.TimelineModel.prototype._onRecordAdded):
        (WebInspector.TimelineModel.prototype._addRecord):
        (WebInspector.TimelineModel.prototype._loadNextChunk):
        (WebInspector.TimelineModel.prototype._loadFromFile):
        (WebInspector.TimelineModel.prototype._reset):

2012-02-09  Kentaro Hara  <haraken@chromium.org>

        Unreviewed, rolling out r107368.
        http://trac.webkit.org/changeset/107368
        https://bugs.webkit.org/show_bug.cgi?id=78327

        break GTK build

        * bindings/scripts/CodeGeneratorCPP.pm:
        (ShouldSkipType):
        * bindings/scripts/CodeGeneratorGObject.pm:
        (SkipFunction):
        (GenerateFunction):
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateCallWith):
        (GenerateParametersCheck):
        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateFunctionCallback):
        (GenerateCallWith):
        (GenerateFunctionCallString):
        * bindings/scripts/test/CPP/WebDOMTestObj.cpp:
        * bindings/scripts/test/CPP/WebDOMTestObj.h:
        * bindings/scripts/test/GObject/WebKitDOMTestObj.cpp:
        (webkit_dom_test_obj_get_property):
        (webkit_dom_test_obj_class_init):
        * bindings/scripts/test/GObject/WebKitDOMTestObj.h:
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore):
        (WebCore::jsTestObjPrototypeFunctionCustomArgsAndException):
        * bindings/scripts/test/JS/JSTestObj.h:
        (WebCore):
        * bindings/scripts/test/ObjC/DOMTestObj.h:
        * bindings/scripts/test/ObjC/DOMTestObj.mm:
        (-[DOMTestObj customArgsAndException:]):
        * bindings/scripts/test/TestObj.idl:
        * bindings/scripts/test/V8/V8TestObj.cpp:
        (WebCore::TestObjInternal::customArgsAndExceptionCallback):
        (TestObjInternal):
        (WebCore):
        (WebCore::ConfigureV8TestObjTemplate):
        * bindings/v8/custom/V8ConsoleCustom.cpp:
        (WebCore::V8Console::assertCallback):
        * page/Console.cpp:
        (WebCore::Console::assertCondition):
        (WebCore::Console::timeEnd):
        * page/Console.h:
        (Console):
        * page/Console.idl:

2012-02-09  Zoltan Herczeg  <zherczeg@webkit.org>

        Heap-buffer-overflow in WebCore::CSSParser::lex
        https://bugs.webkit.org/show_bug.cgi?id=77402

        Reviewed by Antti Koivisto.

        Comments should check only a single \0 terminator.

        Test: fast/css/parsing-css-comment.html

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

2012-02-09  Kentaro Hara  <haraken@chromium.org>

        Replace [CustomArgumentHandling] with [CallWith=ScriptArguments|CallStack]
        https://bugs.webkit.org/show_bug.cgi?id=78327

        Reviewed by Adam Barth.

        This patch replaces [CustomArgumentHandling] with [CallWith=ScriptArguments|CallStack],
        and removes [CustomArgumentHandling].

        Test: bindings/scripts/test/TestObj.idl

        * bindings/scripts/CodeGeneratorJS.pm: Modified to replace
        [CustomArgumentHandling] with [CallWith=ScriptArguments|CallStack].
        (GenerateCallWith):
        (GenerateParametersCheck):
        * bindings/scripts/CodeGeneratorV8.pm: Ditto.
        (GenerateCallWith):
        * bindings/scripts/CodeGeneratorCPP.pm: Simply removed [CustomArgumentHandling]
        from the skipped list. By this fix, CodeGeneratorCPP.pm will generate
        meaningless code for attributes or methods which was previously marked as
        [CustomArgumentHandling], but this change will be harmless.
        (ShouldSkipType):
        * bindings/scripts/CodeGeneratorGObject.pm: Ditto.
        (SkipFunction):
        (GenerateFunction):

        * bindings/v8/custom/V8ConsoleCustom.cpp: Changed the argument order.
        (WebCore::V8Console::assertCallback):
        * page/Console.cpp: Ditto.
        (WebCore::Console::assertCondition):
        (WebCore::Console::timeEnd):
        * page/Console.h: Ditto.
        (Console):

        * bindings/scripts/test/TestObj.idl: Added test cases for [CallWith=ScriptArguments|CallStack].

        * bindings/scripts/test/CPP/WebDOMTestObj.cpp: Updated run-bindings-tests results.
        (WebDOMTestObj::withScriptArgumentsAndCallStackAttribute):
        (WebDOMTestObj::setWithScriptArgumentsAndCallStackAttribute):
        (WebDOMTestObj::withScriptArgumentsAndCallStack):
        * bindings/scripts/test/CPP/WebDOMTestObj.h:
        * bindings/scripts/test/GObject/WebKitDOMTestObj.cpp:
        (webkit_dom_test_obj_with_script_arguments_and_call_stack):
        (webkit_dom_test_obj_get_with_script_arguments_and_call_stack_attribute):
        (webkit_dom_test_obj_set_with_script_arguments_and_call_stack_attribute):
        (webkit_dom_test_obj_get_property):
        (webkit_dom_test_obj_class_init):
        * bindings/scripts/test/GObject/WebKitDOMTestObj.h:
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore):
        (WebCore::jsTestObjWithScriptArgumentsAndCallStackAttribute):
        (WebCore::setJSTestObjWithScriptArgumentsAndCallStackAttribute):
        (WebCore::jsTestObjPrototypeFunctionWithScriptArgumentsAndCallStack):
        * bindings/scripts/test/JS/JSTestObj.h:
        (WebCore):
        * bindings/scripts/test/ObjC/DOMTestObj.h:
        * bindings/scripts/test/ObjC/DOMTestObj.mm:
        (-[DOMTestObj withScriptArgumentsAndCallStackAttribute]):
        (-[DOMTestObj setWithScriptArgumentsAndCallStackAttribute:]):
        (-[DOMTestObj withScriptArgumentsAndCallStack]):
        * bindings/scripts/test/V8/V8TestObj.cpp:
        (WebCore::TestObjInternal::withScriptArgumentsAndCallStackAttributeAttrGetter):
        (TestObjInternal):
        (WebCore::TestObjInternal::withScriptArgumentsAndCallStackAttributeAttrSetter):
        (WebCore::TestObjInternal::withScriptArgumentsAndCallStackCallback):
        (WebCore):
        (WebCore::ConfigureV8TestObjTemplate):

2012-02-09  Adam Barth  <abarth@webkit.org>

        Dromaeo/dom-traverse.html should go fast
        https://bugs.webkit.org/show_bug.cgi?id=78307

        Reviewed by Eric Seidel.

        This patch improves Dromaeo/dom-traverse.html by roughly 2.5% by
        removing a branch.  Previously, we null-checked the result of
        V8DOMWrapper::getWrapper in a hot code path, but the only case where we
        return a non-empty wrapper comes from a cold code path.  By pushing the
        null check into the cold codepath, we eliminate the branch from the
        hot code path.

        This patch also annotates the branches in the hot code path with their
        likely outcome.  I didn't measure a statistically significant
        improvement with that aspect of the change, but it seems worthwhile.

        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateHeader):
        * bindings/v8/V8DOMWrapper.cpp:
        (WebCore::getExistingWrapperInline):
        (WebCore):
        (WebCore::V8DOMWrapper::getExistingWrapperSlow):
        (WebCore::V8DOMWrapper::getWrapperSlow):
        * bindings/v8/V8DOMWrapper.h:
        (WebCore::V8DOMWrapper::getExistingWrapper):
        (V8DOMWrapper):
        (WebCore::V8DOMWrapper::getWrapper):
        * bindings/v8/custom/V8NodeCustom.cpp:
        (WebCore::toV8Slow):

2012-02-09  Emil A Eklund  <eae@chromium.org>

        Convert Frame/FrameView to LayoutUnits in preparation for turning on subpixel layout
        https://bugs.webkit.org/show_bug.cgi?id=78311

        Reviewed by Eric Seidel.

        No new tests, no new functionality.

        * page/Frame.cpp:
        (WebCore::Frame::nodeImage):
        Pixel snap painting rect for image to ensure that it is painted aligned
        to device pixels. This avoids avoid unwanted anti-aliasing.

        * page/FrameView.cpp:
        (WebCore::FrameView::windowClipRectForLayer):
        Pixel snap clip rects as all window coordinates and sizes are exposed as
        integers.

        * page/GestureTapHighlighter.cpp:
        * page/Page.cpp:
        (WebCore::Page::addRelevantRepaintedObject):
        As the painting is done aligned on pixel boundaries we need to pixel snap
        the view rect when checking if it intersects the objects paint rect.

        * page/mac/FrameMac.mm:
        (WebCore::Frame::snapshotDragImage):
        (WebCore::Frame::nodeImage):
        Pixel snap painting rect for image to ensure that it is painted aligned
        to device pixels. This avoids avoid unwanted anti-aliasing.

        * page/win/FrameCGWin.cpp:
        (WebCore::Frame::nodeImage):
        Pixel snap painting rect for image to ensure that it is painted aligned
        to device pixels. This avoids avoid unwanted anti-aliasing.

        * rendering/LayoutTypes.h:
        (WebCore::pixelSnappedIntRect):
        (WebCore):
        No-op implementation of pixelSnappedIntRect for now.

2012-02-09  Kenichi Ishibashi  <bashi@chromium.org>

        Add WebSocket extension support
        https://bugs.webkit.org/show_bug.cgi?id=78079

        This patch introduces WebSocketExtensionDispatcher class, which creates client's
        Sec-WebSocket-Extensions header field and parses the server response.
        This patch doesn't add any actual extension, so no changes in behavior.

        Reviewed by Kent Tamura.

        No new tests except for chromium port.

        * CMakeLists.txt: Added WebSocketExtensionDispatcher.(cpp|h) and WebSocketExtensionProcessor.h.
        * GNUmakefile.list.am: Ditto.
        * Target.pri: Ditto.
        * WebCore.gypi: Ditto.
        * WebCore.vcproj/WebCore.vcproj: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Ditto.
        * websockets/WebSocketExtensionDispatcher.cpp: Added.
        (WebCore):
        (ExtensionParser):
        (WebCore::ExtensionParser::ExtensionParser):
        (WebCore::ExtensionParser::currentToken):
        (WebCore::ExtensionParser::finished):
        (WebCore::ExtensionParser::parsedSuccessfully):
        (WebCore::isTokenCharacter):
        (WebCore::isSeparator):
        (WebCore::ExtensionParser::skipSpaces):
        (WebCore::ExtensionParser::consumeToken):
        (WebCore::ExtensionParser::consumeQuotedString):
        (WebCore::ExtensionParser::consumeQuotedStringOrToken):
        (WebCore::ExtensionParser::consumeCharacter):
        (WebCore::WebSocketExtensionDispatcher::reset):
        (WebCore::WebSocketExtensionDispatcher::addProcessor):
        (WebCore::WebSocketExtensionDispatcher::createHeaderValue):
        (WebCore::WebSocketExtensionDispatcher::processHeaderValue):
        (WebCore::WebSocketExtensionDispatcher::failureReason):
        * websockets/WebSocketExtensionDispatcher.h: Added.
        (WebCore):
        (WebSocketExtensionDispatcher):
        (WebCore::WebSocketExtensionDispatcher::WebSocketExtensionDispatcher):
        * websockets/WebSocketExtensionProcessor.h: Added.
        (WebCore):
        (WebSocketExtensionProcessor):
        (WebCore::WebSocketExtensionProcessor::~WebSocketExtensionProcessor):
        (WebCore::WebSocketExtensionProcessor::extensionToken):
        (WebCore::WebSocketExtensionProcessor::failureReason):
        (WebCore::WebSocketExtensionProcessor::WebSocketExtensionProcessor):
        * websockets/WebSocketHandshake.cpp:
        (WebCore::WebSocketHandshake::clientHandshakeMessage): Adds extension header value if exists.
        (WebCore::WebSocketHandshake::clientHandshakeRequest): Ditto.
        (WebCore::WebSocketHandshake::reset): Resets WebSocketExtensionDispatcher object.
        (WebCore::WebSocketHandshake::serverHandshakeResponse): Removed.
        (WebCore::WebSocketHandshake::addExtensionProcessor): Added.
        (WebCore::WebSocketHandshake::readHTTPHeaders): Parses and checks every time Sec-WebSocket-Extensions header appears.
        (WebCore::WebSocketHandshake::checkResponseHeaders): Removed the check of Sec-WebSocket-Extensions.
        * websockets/WebSocketHandshake.h: Removed serverHandshakeResponse().

2012-02-09  Xianzhu Wang  <wangxianzhu@chromium.org>

        Avoid compositing invisible fixed positioned elements
        https://bugs.webkit.org/show_bug.cgi?id=78186

        Reviewed by James Robinson.

        Test: compositing/layer-creation/fixed-position-out-of-view.html

        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::requiresCompositingForPosition):

2012-02-09  Timothy Hatcher  <timothy@apple.com>

        Prevent attaching when inspecting the Web Inspector.

        https://webkit.org/b/78304

        Reviewed by Brian Weinstein.

        * inspector/InspectorFrontendClientLocal.cpp:
        (WebCore::InspectorFrontendClientLocal::canAttachWindow): Prevent attaching when the page is an inspector page.

2012-02-09  Dana Jansens  <danakj@chromium.org>

        [Chromium] Assertion failure minX <= maxX in Region.cpp
        https://bugs.webkit.org/show_bug.cgi?id=78038

        Reviewed by James Robinson.

        Covered by existing tests (should make them stop asserting).

        Clamp sizes for composited layers coming out of WebCore to make sure they are valid non-negative values.

        * platform/graphics/chromium/GraphicsLayerChromium.cpp:
        (WebCore::GraphicsLayerChromium::setSize):

2012-02-09  Gregg Tavares  <gman@google.com>

        Make WebGLRenderingContext::printWarningToConsole safer
        https://bugs.webkit.org/show_bug.cgi?id=78284

        Reviewed by Kenneth Russell.

        No new tests because no change in functionality.

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore):
        (WebCore::WebGLRenderingContext::printWarningToConsole):

2012-02-09  W. James MacLean  <wjmaclean@chromium.org>

        [chromium] Add support for starting page/scale animations on CC impl thread from WebViewImpl
        https://bugs.webkit.org/show_bug.cgi?id=77872

        Reviewed by James Robinson.

        Added unit test.

        Provides a pathway to invoke CCLayerTreeHostImpl::startPageScaleAnimation() from
        WebViewImpl. This is intended to support scale and scroll animations, such as WebInputEvent::GestureDoubleTap.

        * platform/CrossThreadCopier.h:
        (WebCore):
        * platform/graphics/chromium/cc/CCLayerTreeHost.cpp:
        (WebCore::CCLayerTreeHost::startPageScaleAnimation):
        * platform/graphics/chromium/cc/CCLayerTreeHost.h:
        (CCLayerTreeHost):
        * platform/graphics/chromium/cc/CCLayerTreeHostImpl.h:
        (CCLayerTreeHostImpl):
        * platform/graphics/chromium/cc/CCProxy.h:
        (CCProxy):
        * platform/graphics/chromium/cc/CCSingleThreadProxy.cpp:
        (WebCore::CCSingleThreadProxy::startPageScaleAnimation):
        (WebCore):
        * platform/graphics/chromium/cc/CCSingleThreadProxy.h:
        (CCSingleThreadProxy):
        * platform/graphics/chromium/cc/CCThreadProxy.cpp:
        (WebCore::CCThreadProxy::startPageScaleAnimation):
        (WebCore):
        (WebCore::CCThreadProxy::requestStartPageScaleAnimationOnImplThread):
        * platform/graphics/chromium/cc/CCThreadProxy.h:
        (CCThreadProxy):

2012-02-09  Xianzhu Wang  <wangxianzhu@chromium.org>

        [Chromium] TiledLayerChromium::protectVisibleTileTextures() should only protect the visible textures
        https://bugs.webkit.org/show_bug.cgi?id=78249

        Reviewed by James Robinson.

        * platform/graphics/chromium/TiledLayerChromium.cpp:
        (WebCore::TiledLayerChromium::protectVisibleTileTextures):

2012-02-09  Hayato Ito  <hayato@chromium.org>

        Add Node::isShadowElement() member function.
        https://bugs.webkit.org/show_bug.cgi?id=78201

        Reviewed by Dimitri Glazkov.

        No tests. No change in behavior. An upcoming change requires this to detect HTMLShadowElement.

        * dom/Node.h:
        (Node):
        (WebCore::Node::isShadowElement):
        * html/shadow/HTMLShadowElement.h:
        (WebCore::HTMLShadowElement::isShadowElement):

2012-02-09  Ryosuke Niwa  <rniwa@webkit.org>

        CachedResourceLoader is destroyed before CSSFontSelector is destroyed
        https://bugs.webkit.org/show_bug.cgi?id=77817

        Reviewed by Adam Barth.

        Explicitly clear style selector before destorying the cached resource loader.

        No new tests but PerformanceTests/Parser/html5-full-render.html was crashing
        on performance bots due to this bug.

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

2012-02-09  Anders Carlsson  <andersca@apple.com>

        Update the scroll layer position on the main thread when we have slow repaint objects
        https://bugs.webkit.org/show_bug.cgi?id=78300
        <rdar://problem/10710754>

        Reviewed by Dan Bernstein.

        When we have slow repaint objects (background-attachment: fixed), we need to update the
        scroll layer position on the main thread, otherwise the web page will appear to jiggle.
    
        * page/FrameView.cpp:
        (WebCore::FrameView::addSlowRepaintObject):
        (WebCore::FrameView::removeSlowRepaintObject):
        Call ScrollingCoordinator::frameViewHasSlowRepaintObjectsDidChange if needed.

        * page/FrameView.h:
        (WebCore::FrameView::hasSlowRepaintObjects):
        Add new getter.

        * page/scrolling/ScrollingCoordinator.cpp:
        (WebCore::ScrollingCoordinator::frameViewHasSlowRepaintObjectsDidChange):
        Call ScrollingTreeNode::shouldUpdateScrollLayerPositionOnMainThread.

        (WebCore::ScrollingCoordinator::updateMainFrameScrollPositionAndScrollLayerPosition):
        New function that will update both the main frame scroll position and the scroll layer position.

        * page/scrolling/ScrollingTree.cpp:
        (WebCore::ScrollingTree::updateMainFrameScrollPositionAndScrollLayerPosition):
        Dispatch a call to ScrollingCoordinator::updateMainFrameScrollPositionAndScrollLayerPosition on the main thread.

        * page/scrolling/ScrollingTreeNode.cpp:
        (WebCore::ScrollingTreeNode::ScrollingTreeNode):
        Initialize m_shouldUpdateScrollLayerPositionOnMainThread.

        (WebCore::ScrollingTreeNode::update):
        Set m_shouldUpdateScrollLayerPositionOnMainThread.

        * page/scrolling/ScrollingTreeState.cpp:
        (WebCore::ScrollingTreeState::ScrollingTreeState):
        Initialize m_shouldUpdateScrollLayerPositionOnMainThread.

        (WebCore::ScrollingTreeState::setShouldUpdateScrollLayerPositionOnMainThread):
        Update m_shouldUpdateScrollLayerPositionOnMainThread if needed.

        * page/scrolling/mac/ScrollingTreeNodeMac.mm:
        (WebCore::ScrollingTreeNodeMac::setScrollPosition):
        Assert that we're not supposed to update the scroll layer position on the main thread.

        (WebCore::ScrollingTreeNodeMac::scrollBy):
        If we're supposed to update the scroll layer position on the main thread, 
        call ScrollingTree::updateMainFrameScrollPositionAndScrollLayerPosition.

        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::frameViewDidScroll):
        If the frame view has its scrolling coordinated by a scrolling coordinator, don't update the scroll layer position.

2012-02-09  Anders Carlsson  <andersca@apple.com>

        FrameView::addSlowRepaintObject() doesn't update m_canBlitOnScroll correctly
        https://bugs.webkit.org/show_bug.cgi?id=78291

        Reviewed by Dan Bernstein.

        m_slowRepaintObjectCount needs to be incremented before calling updateCanBlitOnScrollRecursively(),
        because otherwise useSlowRepaints() will return false even though we have to use slow repaints.

        I was unable to make a layout test for this because it requires that updateCanBlitOnScrollRecursively() isn't
        called again after m_slowRepaintObjectCount has been incremented.

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

2012-02-09  Ojan Vafai  <ojan@chromium.org>

        Remove TreeOrderIterator and iterate over the child boxes directly.
        https://bugs.webkit.org/show_bug.cgi?id=78294

        Reviewed by Tony Chang.

        No new tests. This is purely a refactor. No change in behavior. 

        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::layoutFlexItems):
        (WebCore::RenderFlexibleBox::computeMainAxisPreferredSizes):
        * rendering/RenderFlexibleBox.h:
        (RenderFlexibleBox):
        (FlexOrderHashTraits):
        (WebCore::RenderFlexibleBox::FlexOrderHashTraits::emptyValue):
        (WebCore::RenderFlexibleBox::FlexOrderHashTraits::constructDeletedValue):
        (WebCore::RenderFlexibleBox::FlexOrderHashTraits::isDeletedValue):

2012-02-09  Kentaro Hara  <haraken@chromium.org>

        Code generators should support multiple values for the [CallWith=] attribute
        https://bugs.webkit.org/show_bug.cgi?id=78224

        Reviewed by Adam Barth.

        Currently we can specify only one value for one [CallWith=],
        like [CallWith=ScriptExecutionContext] or [CallWith=ScriptState].
        To reduce redundant IDL attributes, we are planning to support multiple
        values for [CallWith=], like [CallWith=ScriptExecutionContext|ScriptArguments|CallStack].
        This patch makes a change on code generators to support it.

        Test: bindings/scripts/test/TestObj.idl
        No change in WebKit behavior since IDL files have not yet used [CallWith=X|Y|Z].

        * bindings/scripts/CodeGenerator.pm: Modified to support [CallWith=X|Y|Z].
        (ExtendedAttributeContains):
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateImplementation):
        (GenerateCallWith):
        (GenerateParametersCheck):
        (GenerateImplementationFunctionCall):
        (GenerateConstructorDeclaration):
        (GenerateConstructorDefinition):
        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateNormalAttrGetter):
        (GenerateNormalAttrSetter):
        (GenerateCallWith):
        (GenerateFunctionCallString):

        * bindings/scripts/test/TestObj.idl: Added test cases for [CallWith=X|Y|Z].

        * bindings/scripts/test/CPP/WebDOMTestObj.cpp: Updated run-bindings-tests results.
        (WebDOMTestObj::withScriptExecutionContextAndScriptStateAttribute):
        (WebDOMTestObj::setWithScriptExecutionContextAndScriptStateAttribute):
        (WebDOMTestObj::withScriptExecutionContextAndScriptStateAttributeRaises):
        (WebDOMTestObj::setWithScriptExecutionContextAndScriptStateAttributeRaises):
        (WebDOMTestObj::withScriptExecutionContextAndScriptStateWithSpacesAttribute):
        (WebDOMTestObj::setWithScriptExecutionContextAndScriptStateWithSpacesAttribute):
        (WebDOMTestObj::withScriptExecutionContextAndScriptState):
        (WebDOMTestObj::withScriptExecutionContextAndScriptStateObjException):
        (WebDOMTestObj::withScriptExecutionContextAndScriptStateWithSpaces):
        * bindings/scripts/test/CPP/WebDOMTestObj.h:
        * bindings/scripts/test/GObject/WebKitDOMTestObj.cpp:
        (webkit_dom_test_obj_with_script_execution_context_and_script_state):
        (webkit_dom_test_obj_with_script_execution_context_and_script_state_obj_exception):
        (webkit_dom_test_obj_with_script_execution_context_and_script_state_with_spaces):
        (webkit_dom_test_obj_get_with_script_execution_context_and_script_state_attribute):
        (webkit_dom_test_obj_set_with_script_execution_context_and_script_state_attribute):
        (webkit_dom_test_obj_get_with_script_execution_context_and_script_state_attribute_raises):
        (webkit_dom_test_obj_set_with_script_execution_context_and_script_state_attribute_raises):
        (webkit_dom_test_obj_get_with_script_execution_context_and_script_state_with_spaces_attribute):
        (webkit_dom_test_obj_set_with_script_execution_context_and_script_state_with_spaces_attribute):
        (webkit_dom_test_obj_get_property):
        (webkit_dom_test_obj_class_init):
        * bindings/scripts/test/GObject/WebKitDOMTestObj.h:
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore):
        (WebCore::jsTestObjWithScriptExecutionContextAndScriptStateAttribute):
        (WebCore::jsTestObjWithScriptExecutionContextAndScriptStateAttributeRaises):
        (WebCore::jsTestObjWithScriptExecutionContextAndScriptStateWithSpacesAttribute):
        (WebCore::setJSTestObjWithScriptExecutionContextAndScriptStateAttribute):
        (WebCore::setJSTestObjWithScriptExecutionContextAndScriptStateAttributeRaises):
        (WebCore::setJSTestObjWithScriptExecutionContextAndScriptStateWithSpacesAttribute):
        (WebCore::jsTestObjPrototypeFunctionWithScriptExecutionContextAndScriptState):
        (WebCore::jsTestObjPrototypeFunctionWithScriptExecutionContextAndScriptStateObjException):
        (WebCore::jsTestObjPrototypeFunctionWithScriptExecutionContextAndScriptStateWithSpaces):
        * bindings/scripts/test/JS/JSTestObj.h:
        (WebCore):
        * bindings/scripts/test/ObjC/DOMTestObj.h:
        * bindings/scripts/test/ObjC/DOMTestObj.mm:
        (-[DOMTestObj withScriptExecutionContextAndScriptStateAttribute]):
        (-[DOMTestObj setWithScriptExecutionContextAndScriptStateAttribute:]):
        (-[DOMTestObj withScriptExecutionContextAndScriptStateAttributeRaises]):
        (-[DOMTestObj setWithScriptExecutionContextAndScriptStateAttributeRaises:]):
        (-[DOMTestObj withScriptExecutionContextAndScriptStateWithSpacesAttribute]):
        (-[DOMTestObj setWithScriptExecutionContextAndScriptStateWithSpacesAttribute:]):
        (-[DOMTestObj withScriptExecutionContextAndScriptState]):
        (-[DOMTestObj withScriptExecutionContextAndScriptStateObjException]):
        (-[DOMTestObj withScriptExecutionContextAndScriptStateWithSpaces]):
        * bindings/scripts/test/V8/V8TestObj.cpp:
        (WebCore::TestObjInternal::withScriptExecutionContextAndScriptStateAttributeAttrGetter):
        (TestObjInternal):
        (WebCore::TestObjInternal::withScriptExecutionContextAndScriptStateAttributeAttrSetter):
        (WebCore::TestObjInternal::withScriptExecutionContextAndScriptStateAttributeRaisesAttrGetter):
        (WebCore::TestObjInternal::withScriptExecutionContextAndScriptStateAttributeRaisesAttrSetter):
        (WebCore::TestObjInternal::withScriptExecutionContextAndScriptStateWithSpacesAttributeAttrGetter):
        (WebCore::TestObjInternal::withScriptExecutionContextAndScriptStateWithSpacesAttributeAttrSetter):
        (WebCore::TestObjInternal::withScriptExecutionContextAndScriptStateCallback):
        (WebCore::TestObjInternal::withScriptExecutionContextAndScriptStateObjExceptionCallback):
        (WebCore::TestObjInternal::withScriptExecutionContextAndScriptStateWithSpacesCallback):
        (WebCore):

2012-02-09  Kentaro Hara  <haraken@chromium.org>

        Rename [ConvertNullStringTo=] to [TreatReturnedNullStringAs=]
        https://bugs.webkit.org/show_bug.cgi?id=78108

        Reviewed by Adam Barth.

        [ConvertNullStringTo=] is not descriptive. To clarify that it specifies
        the behavior when the null string is returned by WebCore, this patch renames
        [ConvertNullStringTo=] to [TreatReturnedNullStringAs=]. This change is also
        for naming consistency with [TreatNullAs] and [TreatUndefinedAs].

        No tests. No change in behavior.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateGetOwnPropertySlotBody):
        (NativeToJSValue):
        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateImplementationIndexer):
        (NativeToJSValue):
        * bindings/scripts/test/TestObj.idl:
        * css/CSSCharsetRule.idl:
        * css/CSSImportRule.idl:
        * css/CSSPageRule.idl:
        * css/CSSRule.idl:
        * css/CSSStyleDeclaration.idl:
        * css/CSSStyleRule.idl:
        * css/CSSValue.idl:
        * css/MediaList.idl:
        * css/StyleSheet.idl:
        * css/WebKitCSSKeyframesRule.idl:
        * dom/Attr.idl:
        * dom/CharacterData.idl:
        * dom/Clipboard.idl:
        * dom/DOMStringList.idl:
        * dom/Document.idl:
        * dom/DocumentType.idl:
        * dom/Element.idl:
        * dom/Entity.idl:
        * dom/MutationRecord.idl:
        * dom/Node.idl:
        * dom/Notation.idl:
        * dom/ProcessingInstruction.idl:
        * html/DOMTokenList.idl:
        * html/DOMURL.idl:
        * html/HTMLMediaElement.idl:
        * html/canvas/WebGLDebugShaders.idl:
        * html/canvas/WebGLRenderingContext.idl:
        * page/DOMWindow.idl:
        * storage/IDBObjectStore.idl:
        * storage/IDBRequest.idl:
        * storage/Storage.idl:
        * storage/StorageEvent.idl:
        * websockets/WebSocket.idl:
        * xml/XMLHttpRequest.idl:
        * xml/XPathNSResolver.idl:
        * xml/XSLTProcessor.idl:

2012-02-09  Tony Chang  <tony@chromium.org>

        more refactoring of RenderFlexibleBox in preparation for multiline
        https://bugs.webkit.org/show_bug.cgi?id=78281

        Reviewed by Ojan Vafai.

        Previously, we were creating Vector of each flex item's preferred size in document order,
        but for multiline, we need to break the lines in the flex order.  I just removed this code
        since it was the wrong order.

        Instead, have 2 funtions, computeMainAxisPreferredSizes which only does the necessary
        layouts and margin computations to compute preferred sizes and computeFlexOrder which
        does the work of computing the flex order, preferred sizes, positive/negative flex.

        For multiline, we will have computeFlexOrder drive a while loop and it will return the
        flex items, preferred size, and positive/negative flex values for each line.

        No new tests, just refactoring.

        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::layoutFlexItems):
        (WebCore::RenderFlexibleBox::computeMainAxisPreferredSizes): Only layout auto sized children and set margins.
        (WebCore::RenderFlexibleBox::computeFlexOrder): Compute flex order, preferred size, positive/negative flex.
        (WebCore::RenderFlexibleBox::runFreeSpaceAllocationAlgorithm): Use the precomputed flex order.
        (WebCore::RenderFlexibleBox::layoutAndPlaceChildren): Use the precomputed flex order.
        (WebCore::RenderFlexibleBox::layoutColumnReverse): Use the precomputed flex order.
        (WebCore::RenderFlexibleBox::alignChildren): Use the precomputed flex order.
        * rendering/RenderFlexibleBox.h:
        (RenderFlexibleBox):

2012-02-09  Kentaro Hara  <haraken@chromium.org>

        Rename [Optional=CallWithDefaultValue] and [Optional=CallWithNullValue]
        https://bugs.webkit.org/show_bug.cgi?id=78200

        Reviewed by Adam Barth.

        [Optional=CallWithDefaultValue] and [Optional=CallWithNullValue] are confusing.

        - [Optional=CallWithDefaultValue] indicates that a missing value should be treated
        as if the JavaScript undefined is passed.
        - [Optional=CallWithNullValue] indicates that a missing value should be treated as
        the WebKit null value (i.e. JSValue() or v8::Local<v8::Value>()).
        - Actually, the difference between [Optional=CallWithDefaultValue] and
        [Optional=CallWithNullValue] will appear only when the type of the missing value
        is DOMString. In case of [Optional=CallWithDefaultValue], the missing value is
        converted to the string "undefined". On the other hand, in case of
        [Optional=CallWithNullValue], the missing value is converted to the WebKit null string.

        With these observations, this patch renames as follows:

        - Rename [Optional=CallWithDefaultValue] to [Optional=DefaultIsUndefined].
        - Rename [Optional=CallWithNullValue] to [Optional=DefaultIsNullString].

        Test: bindings/scripts/test/TestObj.idl

        * bindings/js/JSDOMBinding.h: Renamed MissingIsEmpty to DefaultIsNullString,
        renamed MissingIsUndefined to DefaultIsUndefined.
        * bindings/v8/V8Binding.h: Ditto.
        * bindings/v8/custom/V8BindingMacros.h: Ditto.

        * bindings/scripts/CodeGeneratorJS.pm: Modified to support the renaming.
        (GenerateParametersCheck):
        * bindings/scripts/CodeGeneratorV8.pm: Ditto.
        (GenerateParametersCheck):
        (RequiresCustomSignature):

        * bindings/scripts/test/TestObj.idl: Renamed [Optional=...] as described above.
        * bindings/scripts/test/TestInterface.idl: Ditto.
        * bindings/scripts/test/TestNamedConstructor.idl: Ditto.

        * bindings/scripts/test/CPP/WebDOMTestObj.cpp: Updated run-bindings-tests results.
        (WebDOMTestObj::methodWithOptionalString):
        (WebDOMTestObj::methodWithOptionalStringIsUndefinedString):
        (WebDOMTestObj::methodWithOptionalStringIsNullString):
        * bindings/scripts/test/CPP/WebDOMTestObj.h:
        * bindings/scripts/test/GObject/WebKitDOMTestObj.cpp:
        (webkit_dom_test_obj_method_with_optional_string):
        (webkit_dom_test_obj_method_with_optional_string_is_undefined_string):
        (webkit_dom_test_obj_method_with_optional_string_is_null_string):
        * bindings/scripts/test/GObject/WebKitDOMTestObj.h:
        * bindings/scripts/test/JS/JSTestNamedConstructor.cpp:
        (WebCore::JSTestNamedConstructorNamedConstructor::constructJSTestNamedConstructor):
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore):
        (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalString):
        (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalStringIsUndefinedString):
        (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalStringIsNullString):
        * bindings/scripts/test/JS/JSTestObj.h:
        (WebCore):
        * bindings/scripts/test/ObjC/DOMTestObj.h:
        * bindings/scripts/test/ObjC/DOMTestObj.mm:
        (-[DOMTestObj methodWithOptionalString:]):
        (-[DOMTestObj methodWithOptionalStringIsUndefinedString:]):
        (-[DOMTestObj methodWithOptionalStringIsNullString:]):
        * bindings/scripts/test/V8/V8TestNamedConstructor.cpp:
        (WebCore::V8TestNamedConstructorConstructorCallback):
        * bindings/scripts/test/V8/V8TestObj.cpp:
        (WebCore::TestObjInternal::methodWithOptionalStringCallback):
        (TestObjInternal):
        (WebCore::TestObjInternal::methodWithOptionalStringIsUndefinedStringCallback):
        (WebCore::TestObjInternal::methodWithOptionalStringIsNullStringCallback):
        (WebCore):

        * Modules/gamepad/GamepadList.idl: Renamed [Optional=...] as described above.
        * Modules/intents/Intent.idl:
        * css/CSSMediaRule.idl:
        * css/CSSPrimitiveValue.idl:
        * css/CSSRuleList.idl:
        * css/CSSStyleDeclaration.idl:
        * css/CSSStyleSheet.idl:
        * css/CSSValueList.idl:
        * css/MediaList.idl:
        * css/MediaQueryList.idl:
        * css/MediaQueryListListener.idl:
        * css/StyleMedia.idl:
        * css/StyleSheetList.idl:
        * css/WebKitCSSKeyframesRule.idl:
        * css/WebKitCSSMatrix.idl:
        * dom/CharacterData.idl:
        * dom/ClientRectList.idl:
        * dom/CompositionEvent.idl:
        * dom/CustomEvent.idl:
        * dom/DOMImplementation.idl:
        * dom/DOMStringList.idl:
        * dom/DataTransferItem.idl:
        * dom/DataTransferItemList.idl:
        * dom/DeviceMotionEvent.idl:
        * dom/DeviceOrientationEvent.idl:
        * dom/Document.idl:
        * dom/Element.idl:
        * dom/Event.idl:
        * dom/HashChangeEvent.idl:
        * dom/KeyboardEvent.idl:
        * dom/MessageEvent.idl:
        * dom/MouseEvent.idl:
        * dom/MutationEvent.idl:
        * dom/NamedNodeMap.idl:
        * dom/Node.idl:
        * dom/NodeFilter.idl:
        * dom/NodeList.idl:
        * dom/OverflowEvent.idl:
        * dom/Range.idl:
        * dom/ShadowRoot.idl:
        * dom/Text.idl:
        * dom/TextEvent.idl:
        * dom/TouchEvent.idl:
        * dom/UIEvent.idl:
        * dom/WheelEvent.idl:
        * html/DOMFormData.idl:
        * html/HTMLAllCollection.idl:
        * html/HTMLAudioElement.idl:
        * html/HTMLCanvasElement.idl:
        * html/HTMLCollection.idl:
        * html/HTMLDocument.idl:
        * html/HTMLElement.idl:
        * html/HTMLInputElement.idl:
        * html/HTMLMediaElement.idl:
        * html/HTMLOptionElement.idl:
        * html/HTMLOptionsCollection.idl:
        * html/HTMLSelectElement.idl:
        * html/HTMLTableElement.idl:
        * html/HTMLTableRowElement.idl:
        * html/HTMLTableSectionElement.idl:
        * html/HTMLTextAreaElement.idl:
        * html/TextTrackCue.idl:
        * html/canvas/CanvasGradient.idl:
        * html/canvas/CanvasRenderingContext2D.idl:
        * html/canvas/Float32Array.idl:
        * html/canvas/Float64Array.idl:
        * html/canvas/Int16Array.idl:
        * html/canvas/Int32Array.idl:
        * html/canvas/Int8Array.idl:
        * html/canvas/OESVertexArrayObject.idl:
        * html/canvas/Uint16Array.idl:
        * html/canvas/Uint32Array.idl:
        * html/canvas/Uint8Array.idl:
        * html/canvas/Uint8ClampedArray.idl:
        * page/Console.idl:
        * page/DOMSelection.idl:
        * page/DOMWindow.idl:
        * page/History.idl:
        * page/Location.idl:
        * plugins/DOMMimeTypeArray.idl:
        * plugins/DOMPlugin.idl:
        * plugins/DOMPluginArray.idl:
        * storage/IDBDatabase.idl:
        * storage/StorageEvent.idl:
        * svg/ElementTimeControl.idl:
        * svg/SVGDocument.idl:
        * svg/SVGElementInstanceList.idl:
        * svg/SVGFEDropShadowElement.idl:
        * svg/SVGFEGaussianBlurElement.idl:
        * svg/SVGFEMorphologyElement.idl:
        * svg/SVGFilterElement.idl:
        * svg/SVGLocatable.idl:
        * svg/SVGMarkerElement.idl:
        * svg/SVGPathElement.idl:
        * svg/SVGSVGElement.idl:
        * svg/SVGStylable.idl:
        * svg/SVGTests.idl:
        * svg/SVGTextContentElement.idl:
        * webaudio/AudioNode.idl:
        * workers/SharedWorker.idl:
        * workers/WorkerContext.idl:
        * xml/DOMParser.idl:
        * xml/XMLSerializer.idl:
        * xml/XPathEvaluator.idl:
        * xml/XPathExpression.idl:
        * xml/XPathNSResolver.idl:
        * xml/XPathResult.idl:

2012-02-09  Matthew Delaney  <mdelaney@apple.com>

        getComputedStyle() returns different values for different zoom levels
        https://bugs.webkit.org/show_bug.cgi?id=32230

        Reviewed by Beth Dakin.

        Test: fast/css/getComputedStyle/getComputedStyle-zoom-and-background-size.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::fillSizeToCSSValue): Pass down the RenderStyle for use in adjusting
        values to account for zoom.
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue): Adjust additional
        properties that are affected by zoom.

2012-02-09  Kentaro Hara  <haraken@chromium.org>

        Rename [Return] to [CustomReturn]
        https://bugs.webkit.org/show_bug.cgi?id=78225

        Reviewed by Adam Barth.

        [Return] is used to handle custom code for a returned value.
        To clarify it, this patch renames [Return] to [CustomReturn].

        No tests. No change in behavior.

        * bindings/scripts/CodeGeneratorCPP.pm:
        (GenerateImplementation):
        * bindings/scripts/CodeGeneratorGObject.pm:
        (GenerateFunction):
        * bindings/scripts/CodeGeneratorObjC.pm:
        (GenerateImplementation):
        * dom/Node.idl:

2012-02-09  Levi Weintraub  <leviw@chromium.org>

        Add roundedIntPoint method for LayoutPoints
        https://bugs.webkit.org/show_bug.cgi?id=78262

        Reviewed by Eric Seidel.

        Adding a roundedIntPoint method that operates on a LayoutPoint. Currently, this does
        nothing as LayoutPoint is a typedef to IntPoint. When we enable sub-pixel LayoutUnits,
        this is a critical part in our pixel snapping strategy, where we round the logical top-
        left point, then snap the right and bottom edges.

        Also using this new method where we wish to convert LayoutPoints to IntPoints, which
        we're currently doing implicitly (since they're the same thing).

        No new tests. No change in functionality.

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::visiblePositionForPoint):
        (WebCore::AccessibilityRenderObject::accessibilityHitTest):
        * page/EventHandler.cpp:
        (WebCore::EventHandler::eventMayStartDrag):
        (WebCore::EventHandler::hitTestResultAtPoint):
        (WebCore::EventHandler::selectCursor):
        * rendering/LayoutTypes.h:
        (WebCore::roundedIntPoint):
        (WebCore):
        * rendering/RenderEmbeddedObject.cpp:
        (WebCore::RenderEmbeddedObject::getReplacementTextGeometry):
        * rendering/RenderFlowThread.cpp:
        (WebCore::RenderFlowThread::paintIntoRegion):
        * rendering/RenderFrameSet.cpp:
        (WebCore::RenderFrameSet::getCursor):
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::paintReplaced):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::scrollRectToVisible):
        (WebCore::RenderLayer::offsetFromResizeCorner):
        (WebCore::RenderLayer::isPointInResizeControl):
        (WebCore::RenderLayer::paintLayerContents):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::paintContents):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::paintContents):
        * 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):

2012-02-09  John Bates  <jbates@google.com>

        [Chromium] Add chromium-style tracing support
        https://bugs.webkit.org/show_bug.cgi?id=76885

        Reviewed by Darin Fisher.

        This code enables WebKit trace events to pass through more data to the
        chromium platform tracing API and generally to use the full tracing
        API provided by chromium.

        * bindings/v8/V8Proxy.cpp:
        (WebCore::V8Proxy::evaluate): Replace old tracing API.
        * page/Console.cpp:
        (WebCore::Console::time): Replace old tracing API.
        (WebCore::Console::timeEnd): Replace old tracing API.
        * platform/chromium/PlatformSupport.h:
        * platform/chromium/TraceEvent.h:
        (WebCore::TraceEvent::TraceID::TraceID):
        (WebCore::TraceEvent::TraceID::data):
        (WebCore::TraceEvent::TraceStringWithCopy::TraceStringWithCopy):
        (WebCore::TraceEvent::TraceStringWithCopy::operator const char* ):
        (WebCore::TraceEvent::setTraceValue):
        (WebCore::TraceEvent::addTraceEvent):
        (WebCore::TraceEvent::TraceEndOnScopeClose::TraceEndOnScopeClose):
        (WebCore::TraceEvent::TraceEndOnScopeClose::~TraceEndOnScopeClose):
        (WebCore::TraceEvent::TraceEndOnScopeClose::initialize):
        (WebCore::TraceEvent::TraceEndOnScopeClose::addEventIfEnabled):
        (WebCore::TraceEvent::TraceEndOnScopeCloseThreshold::TraceEndOnScopeCloseThreshold):
        (WebCore::TraceEvent::TraceEndOnScopeCloseThreshold::~TraceEndOnScopeCloseThreshold):
        (WebCore::TraceEvent::TraceEndOnScopeCloseThreshold::initialize):
        (WebCore::TraceEvent::TraceEndOnScopeCloseThreshold::addEventIfEnabled):

2012-02-09  David Hyatt  <hyatt@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=78256
        
        Rename line-grid-snap to line-snap so that it matches the draft proposal for the
        property.

        Reviewed by Dan Bernstein.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore):
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):
        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        (WebCore::CSSPrimitiveValue::operator LineSnap):
        * css/CSSProperty.cpp:
        (WebCore::CSSProperty::isInheritedProperty):
        * css/CSSPropertyNames.in:
        * css/CSSStyleApplyProperty.cpp:
        (WebCore::CSSStyleApplyProperty::CSSStyleApplyProperty):
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):
        * rendering/RootInlineBox.cpp:
        (WebCore::RootInlineBox::alignBoxesInBlockDirection):
        (WebCore::RootInlineBox::lineSnapAdjustment):
        * rendering/RootInlineBox.h:
        (RootInlineBox):
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::diff):
        * rendering/style/RenderStyle.h:
        * rendering/style/RenderStyleConstants.h:
        * rendering/style/StyleRareInheritedData.cpp:
        (WebCore::StyleRareInheritedData::StyleRareInheritedData):
        (WebCore::StyleRareInheritedData::operator==):
        * rendering/style/StyleRareInheritedData.h:
        (StyleRareInheritedData):

2012-02-09  Benjamin Poulain  <bpoulain@apple.com>

        The localization of htmlSelectMultipleItems() needs better support of pluralization
        https://bugs.webkit.org/show_bug.cgi?id=78197

        Reviewed by Joseph Pecoraro.

        For translation, the localization of 0 and 1 depends on the language.

        * English.lproj/Localizable.strings:
        * platform/DefaultLocalizationStrategy.cpp:
        (WebCore::DefaultLocalizationStrategy::htmlSelectMultipleItems):

2012-02-09  Anders Carlsson  <andersca@apple.com>

        ScrollingTreeNodeMac should implement ScrollElasticityController
        https://bugs.webkit.org/show_bug.cgi?id=78277

        Reviewed by Andreas Kling.

        Add stubbed out implementations of the ScrollElasticityController member functions.

        * page/scrolling/mac/ScrollingTreeNodeMac.h:
        (ScrollingTreeNodeMac):
        * page/scrolling/mac/ScrollingTreeNodeMac.mm:
        (WebCore::ScrollingTreeNodeMac::allowsHorizontalStretching):
        (WebCore):
        (WebCore::ScrollingTreeNodeMac::allowsVerticalStretching):
        (WebCore::ScrollingTreeNodeMac::stretchAmount):
        (WebCore::ScrollingTreeNodeMac::pinnedInDirection):
        (WebCore::ScrollingTreeNodeMac::canScrollHorizontally):
        (WebCore::ScrollingTreeNodeMac::canScrollVertically):
        (WebCore::ScrollingTreeNodeMac::shouldRubberBandInDirection):
        (WebCore::ScrollingTreeNodeMac::absoluteScrollPosition):
        (WebCore::ScrollingTreeNodeMac::immediateScrollBy):
        (WebCore::ScrollingTreeNodeMac::immediateScrollByWithoutContentEdgeConstraints):
        (WebCore::ScrollingTreeNodeMac::startSnapRubberbandTimer):
        (WebCore::ScrollingTreeNodeMac::stopSnapRubberbandTimer):

2012-02-09  Adrienne Walker  <enne@google.com>

        [chromium] Correct potential double reserveTextures() in CCLayerTreeHost
        https://bugs.webkit.org/show_bug.cgi?id=78258

        Reviewed by James Robinson.

        This isn't a problem currently, because scrollbar layers don't create
        render surfaces. However, if this ever got used for other layers, we
        could call reserve on them twice needlessly. It's also just bad form
        to have an iterator doing the wrong thing.

        * platform/graphics/chromium/cc/CCLayerTreeHost.cpp:
        (WebCore::CCLayerTreeHost::reserveTextures):

2012-02-09  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r107261.
        http://trac.webkit.org/changeset/107261
        https://bugs.webkit.org/show_bug.cgi?id=78274

        It has regressed svg/W3C-SVG-1.1/styling-css-05-b.svg (using
        lang() selectors) (Requested by jchaffraix on #webkit).

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::canShareStyleWithControl):
        (WebCore::CSSStyleSelector::canShareStyleWithElement):
        (WebCore::isCommonAttributeSelectorAttribute):

2012-02-09  Joshua Bell  <jsbell@chromium.org>

        [Chromium] IndexedDB: IDBVersionChangeRequest V8 wrapper not generated as ActiveDOMObject
        https://bugs.webkit.org/show_bug.cgi?id=78167

        Add ActiveDOMObject annotation to IDBVersionChangeRequest.idl; it is not
        automagically inherited from IDBRequest.idl.

        Reviewed by Adam Barth.

        Test: storage/indexeddb/versionchangerequest-activedomobject.html

        * storage/IDBVersionChangeRequest.idl:

2012-02-09  Anders Carlsson  <andersca@apple.com>

        The scrolling tree should know more about the scrollbar state
        https://bugs.webkit.org/show_bug.cgi?id=78268

        Reviewed by Andreas Kling.

        With this change, the scroll tree now keeps track of the horizontal scroll elasticity,
        the vertical scroll elasticity and whether the page has enabled scrollbars.

        This is needed in order to make rubber-banding work correctly when doing fast scrolling.

        * page/scrolling/ScrollingCoordinator.cpp:
        (WebCore::ScrollingCoordinator::frameViewLayoutUpdated):
        * page/scrolling/ScrollingTreeNode.cpp:
        (WebCore::ScrollingTreeNode::ScrollingTreeNode):
        (WebCore::ScrollingTreeNode::update):
        * page/scrolling/ScrollingTreeNode.h:
        (ScrollingTreeNode):
        * page/scrolling/ScrollingTreeState.cpp:
        (WebCore::ScrollingTreeState::ScrollingTreeState):
        (WebCore::ScrollingTreeState::setHorizontalScrollElasticity):
        (WebCore):
        (WebCore::ScrollingTreeState::setVerticalScrollElasticity):
        (WebCore::ScrollingTreeState::setHasEnabledHorizontalScrollbar):
        (WebCore::ScrollingTreeState::setHasEnabledVerticalScrollbar):
        * page/scrolling/ScrollingTreeState.h:
        (WebCore::ScrollingTreeState::horizontalScrollElasticity):
        (ScrollingTreeState):
        (WebCore::ScrollingTreeState::verticalScrollElasticity):
        (WebCore::ScrollingTreeState::hasEnabledHorizontalScrollbar):
        (WebCore::ScrollingTreeState::hasEnabledVerticalScrollbar):

2012-02-09  Xianzhu Wang  <wangxianzhu@chromium.org>

        Unnecessary and incorrect invalidation about composited fixed-position layers
        https://bugs.webkit.org/show_bug.cgi?id=75638

        When a FrameView scrolls, composited fixed-position layers should
        not contribute to the invalidation rect of the root layer.

        Reviewed by Simon Fraser.

        No new tests. Haven't found a good way to test this programatically.

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

2012-02-09  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r107035.
        http://trac.webkit.org/changeset/107035
        https://bugs.webkit.org/show_bug.cgi?id=78253

        Regressed DOMDivWalk (Requested by arv on #webkit).

        * Target.pri:
        * UseV8.cmake:
        * WebCore.gypi:
        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateNormalAttrGetter):
        (HasCustomToV8Implementation):
        * bindings/v8/custom/V8DOMStringMapCustom.cpp:
        (WebCore::toV8):
        (WebCore):
        * bindings/v8/custom/V8DOMTokenListCustom.cpp: Copied from Source/WebCore/bindings/v8/custom/V8NamedNodeMapCustom.cpp.
        (WebCore):
        (WebCore::toV8):
        * bindings/v8/custom/V8NamedNodeMapCustom.cpp:
        (WebCore::toV8):
        (WebCore):

2012-02-09  David Barton  <dbarton@mathscribe.com>

        MathML internals for bug 52444 fix - type checking, PassRefPtr
        https://bugs.webkit.org/show_bug.cgi?id=78180

        Reviewed by Eric Seidel.
        
        static_cast<Element*>(node()) is done in methods in RenderMathMLFenced.cpp and a few
        other files. It is more type-safe if the RenderMathMLFenced() or other constructor only
        accepts an Element*, not a Node*. Also a couple functions were changed to return a
        PassRefPtr instead of a RefPtr.

        No new tests.

        * rendering/mathml/RenderMathMLFenced.cpp:
        (WebCore::RenderMathMLFenced::RenderMathMLFenced):
        (WebCore::RenderMathMLFenced::updateFromElement):
        (WebCore::RenderMathMLFenced::makeOperatorStyle):
        (WebCore::RenderMathMLFenced::makeFences):
        (WebCore::RenderMathMLFenced::addChild):
        * rendering/mathml/RenderMathMLFenced.h:
        (RenderMathMLFenced):
        * rendering/mathml/RenderMathMLFraction.cpp:
        (WebCore::RenderMathMLFraction::RenderMathMLFraction):
        * rendering/mathml/RenderMathMLFraction.h:
        (RenderMathMLFraction):
        * rendering/mathml/RenderMathMLMath.cpp:
        (WebCore::RenderMathMLMath::RenderMathMLMath):
        * rendering/mathml/RenderMathMLMath.h:
        (RenderMathMLMath):
        * rendering/mathml/RenderMathMLOperator.cpp:
        (WebCore::RenderMathMLOperator::RenderMathMLOperator):
        (WebCore::RenderMathMLOperator::updateFromElement):
        (WebCore::RenderMathMLOperator::createStackableStyle):
        (WebCore::RenderMathMLOperator::createGlyph):
        * rendering/mathml/RenderMathMLOperator.h:
        (RenderMathMLOperator):
        * rendering/mathml/RenderMathMLRoot.cpp:
        (WebCore::RenderMathMLRoot::RenderMathMLRoot):
        (WebCore::RenderMathMLRoot::layout):
        * rendering/mathml/RenderMathMLRoot.h:
        (RenderMathMLRoot):
        * rendering/mathml/RenderMathMLRow.cpp:
        (WebCore::RenderMathMLRow::RenderMathMLRow):
        * rendering/mathml/RenderMathMLRow.h:
        (RenderMathMLRow):
        * rendering/mathml/RenderMathMLSquareRoot.cpp:
        (WebCore::RenderMathMLSquareRoot::RenderMathMLSquareRoot):
        * rendering/mathml/RenderMathMLSquareRoot.h:
        (RenderMathMLSquareRoot):
        * rendering/mathml/RenderMathMLSubSup.cpp:
        (WebCore::RenderMathMLSubSup::addChild):
        * rendering/mathml/RenderMathMLSubSup.h:
        (RenderMathMLSubSup):
        * rendering/mathml/RenderMathMLUnderOver.cpp:
        (WebCore::RenderMathMLUnderOver::RenderMathMLUnderOver):
        * rendering/mathml/RenderMathMLUnderOver.h:
        (RenderMathMLUnderOver):

2012-02-09  Andreas Kling  <awesomekling@apple.com>

        Avoid unnecessary work when evaluating style sharing candidates.
        <http://webkit.org/b/78220>

        Reviewed by Antti Koivisto.

        Do the cheap checks (bitfields, pointers) before calling virtuals and doing hash lookups.
        Remove comparison of attributes that are reflected in the attribute styles (cellpadding,
        lang and xml:lang.) Moved comparison of "type" and "readonly" attributes into the more
        specific canShareStyleWithControl() since they are only relevant for input elements.
        Don't bother calling isFormControlElement() on both elements since we already know they
        have the same tagQName().

        Altogether this knocks off 8-9ms worth of samples per cycle of the "Moz" page cycler test.

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::canShareStyleWithControl):
        (WebCore::CSSStyleSelector::canShareStyleWithElement):
        (WebCore::isCommonAttributeSelectorAttribute):

2012-02-09  Mike Lawther  <mikelawther@chromium.org>

        CSS3 calc() - remove mod
        https://bugs.webkit.org/show_bug.cgi?id=78226

        mod has been removed from the spec for calc().

        Reviewed by Ojan Vafai.

        * css/CSSCalculationValue.cpp:
        (WebCore::CSSCalcBinaryOperation::create):
        (WebCore::CSSCalcBinaryOperation::evaluate):
        (WebCore::CSSCalcExpressionNodeParser::parseValueMultiplicativeExpression):
        * css/CSSGrammar.y:
        * platform/CalculationValue.h:

2012-02-09  Pavel Feldman  <pfeldman@google.com>

        Web Inspector: rename DOMEditor to DOMPatchSupport, move undoable actions from
        InspectorDOMAgent to the new DOMEditor.
        https://bugs.webkit.org/show_bug.cgi?id=78245

        Reviewed by Yury Semikhatsky.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * inspector/DOMEditor.cpp:
        (DOMEditor::DOMAction):
        (WebCore::DOMEditor::DOMAction::DOMAction):
        (WebCore::DOMEditor::DOMAction::perform):
        (WebCore::DOMEditor::DOMAction::undo):
        (DOMEditor::RemoveChildAction):
        (WebCore::DOMEditor::RemoveChildAction::RemoveChildAction):
        (WebCore::DOMEditor::RemoveChildAction::perform):
        (WebCore::DOMEditor::RemoveChildAction::undo):
        (DOMEditor::InsertBeforeAction):
        (WebCore::DOMEditor::InsertBeforeAction::InsertBeforeAction):
        (WebCore::DOMEditor::InsertBeforeAction::perform):
        (WebCore::DOMEditor::InsertBeforeAction::undo):
        (DOMEditor::RemoveAttributeAction):
        (WebCore::DOMEditor::RemoveAttributeAction::RemoveAttributeAction):
        (WebCore::DOMEditor::RemoveAttributeAction::perform):
        (WebCore::DOMEditor::RemoveAttributeAction::undo):
        (DOMEditor::SetAttributeAction):
        (WebCore::DOMEditor::SetAttributeAction::SetAttributeAction):
        (WebCore::DOMEditor::SetAttributeAction::perform):
        (WebCore::DOMEditor::SetAttributeAction::undo):
        (DOMEditor::SetOuterHTMLAction):
        (WebCore::DOMEditor::SetOuterHTMLAction::SetOuterHTMLAction):
        (WebCore::DOMEditor::SetOuterHTMLAction::perform):
        (WebCore::DOMEditor::SetOuterHTMLAction::undo):
        (WebCore::DOMEditor::SetOuterHTMLAction::newNode):
        (DOMEditor::ReplaceWholeTextAction):
        (WebCore::DOMEditor::ReplaceWholeTextAction::ReplaceWholeTextAction):
        (WebCore::DOMEditor::ReplaceWholeTextAction::perform):
        (WebCore::DOMEditor::ReplaceWholeTextAction::undo):
        (WebCore::DOMEditor::DOMEditor):
        (WebCore):
        (WebCore::DOMEditor::~DOMEditor):
        (WebCore::DOMEditor::insertBefore):
        (WebCore::DOMEditor::removeChild):
        (WebCore::DOMEditor::setAttribute):
        (WebCore::DOMEditor::removeAttribute):
        (WebCore::DOMEditor::setOuterHTML):
        (WebCore::DOMEditor::replaceWholeText):
        * inspector/DOMEditor.h:
        (WebCore):
        (DOMEditor):
        * inspector/DOMPatchSupport.cpp: Copied from Source/WebCore/inspector/DOMEditor.cpp.
        (WebCore::DOMPatchSupport::DOMPatchSupport):
        (WebCore::DOMPatchSupport::~DOMPatchSupport):
        (WebCore::DOMPatchSupport::patchDocument):
        (WebCore::DOMPatchSupport::patchNode):
        (WebCore::DOMPatchSupport::innerPatchNode):
        (WebCore):
        (WebCore::DOMPatchSupport::diff):
        (WebCore::DOMPatchSupport::innerPatchChildren):
        (WebCore::DOMPatchSupport::createDigest):
        (WebCore::DOMPatchSupport::insertBefore):
        (WebCore::DOMPatchSupport::removeChild):
        (WebCore::DOMPatchSupport::markNodeAsUsed):
        (WebCore::DOMPatchSupport::dumpMap):
        * inspector/DOMPatchSupport.h: Copied from Source/WebCore/inspector/DOMEditor.h.
        (DOMPatchSupport):
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::InspectorDOMAgent):
        (WebCore::InspectorDOMAgent::setFrontend):
        (WebCore::InspectorDOMAgent::clearFrontend):
        (WebCore::InspectorDOMAgent::reset):
        (WebCore::InspectorDOMAgent::setAttributeValue):
        (WebCore::InspectorDOMAgent::setAttributesAsText):
        (WebCore::InspectorDOMAgent::removeAttribute):
        (WebCore::InspectorDOMAgent::removeNode):
        (WebCore::InspectorDOMAgent::setNodeName):
        (WebCore::InspectorDOMAgent::setOuterHTML):
        (WebCore::InspectorDOMAgent::setNodeValue):
        (WebCore::InspectorDOMAgent::moveTo):
        * inspector/InspectorDOMAgent.h:
        (WebCore):
        (InspectorDOMAgent):
        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::setDocumentContent):

2012-02-09  Mark Rowe  <mrowe@apple.com>

        REGRESSION (r104746): iframes load PDFs as media documents
        <http://webkit.org/b/77079> / <rdar://problem/10757933>

        Roll out r104746 since it completely broke support for loading PDF documents in subframes.

        Reviewed by Adam Treat.

        * dom/DOMImplementation.cpp:
        (WebCore::DOMImplementation::createDocument):

2012-02-09  Andrey Kosyakov  <caseq@chromium.org>

        Web Inspector: [refactoring] take _showShortEvents out of timeline calculator
        https://bugs.webkit.org/show_bug.cgi?id=78230

        Reviewed by Pavel Feldman.

        * inspector/front-end/TimelinePanel.js:
        (WebInspector.TimelinePanel):
        (WebInspector.TimelinePanel.prototype._toggleFilterButtonClicked):
        (WebInspector.TimelinePanel.prototype._refresh):
        (WebInspector.TimelinePanel.prototype._addToRecordsWindow):

2012-02-08  Dan Vrátil  <dvratil@redhat.com>, Milan Crha <mcrha@redhat.com>

        [GTK] Embedded GtkWidgets are not drawn
        https://bugs.webkit.org/show_bug.cgi?id=63451

        Remove widget from it's parent container when GtkPluginWidget is destroyed.
        Remove paint() method because real expose even is used for drawing child widgets now.

        Reviewed by Martin Robinson.

        * platform/gtk/GtkPluginWidget.cpp:
        (WebCore::GtkPluginWidget::~GtkPluginWidget):
        (WebCore):
        * platform/gtk/GtkPluginWidget.h:
        (GtkPluginWidget):

2012-02-09  Arun Patole  <arun.patole@motorola.com>

        Setting media element 'src' attribute to "" should trigger load
        https://bugs.webkit.org/show_bug.cgi?id=47907

        Reviewed by Eric Carlson.

        Test: media/video-src-empty.html

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::attributeChanged):Trigger a load, as long as the 'src' attribute is present.

2012-02-09  Jonathan Backer  <backer@chromium.org>

        [chromium] Add setNeedsRedraw to WebWidget
        https://bugs.webkit.org/show_bug.cgi?id=77555

        Reviewed by James Robinson.

        * platform/graphics/chromium/cc/CCLayerTreeHost.cpp:
        (WebCore::CCLayerTreeHost::setNeedsRedraw):
        * platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:
        (WebCore::CCLayerTreeHostImpl::setFullRootLayerDamage):
        (WebCore):
        * platform/graphics/chromium/cc/CCLayerTreeHostImpl.h:
        (CCLayerTreeHostImpl):
        * platform/graphics/chromium/cc/CCSingleThreadProxy.cpp:
        (WebCore::CCSingleThreadProxy::setNeedsRedraw):
        * platform/graphics/chromium/cc/CCThreadProxy.cpp:
        (WebCore::CCThreadProxy::setNeedsRedraw):
        (WebCore::CCThreadProxy::setFullRootLayerDamageOnImplThread):
        (WebCore):
        * platform/graphics/chromium/cc/CCThreadProxy.h:
        (CCThreadProxy):

2012-02-09  Pavel Feldman  <pfeldman@google.com>

        Web Inspector: fix setOuterHTML for the case that adds / removes duplicate.
        https://bugs.webkit.org/show_bug.cgi?id=78235

        Reviewed by Yury Semikhatsky.

        * inspector/DOMEditor.cpp:
        (WebCore::DOMEditor::diff):
        (WebCore::DOMEditor::innerPatchChildren):
        (WebCore):
        (WebCore::nodeName):
        (WebCore::DOMEditor::dumpMap):
        * inspector/DOMEditor.h:
        (DOMEditor):

2012-02-09  Allan Sandfeld Jensen  <allan.jensen@nokia.com>

        Ensure timers and other active DOM objects do not fire in suspended documents.
        https://bugs.webkit.org/show_bug.cgi?id=53733

        ScriptExecutionContext now remembers it has suspended active DOM objects
        and suspends all newly installed active DOM objects as well.

        All create-calls active DOM objects now calls the post constructor method
        suspendIfNeeded that updates the suspend state. It is post constructor
        because the suspend/resume functions are virtual and thus can not be called
        from constructors.

        Reviewed by Mihai Parparita.

        Test: fast/events/suspend-timers.html

        * Modules/intents/IntentRequest.cpp:
        (WebCore::IntentRequest::create):
        * bindings/generic/ActiveDOMCallback.cpp:
        (WebCore::ActiveDOMCallback::ActiveDOMCallback):
        * dom/ActiveDOMObject.cpp:
        (WebCore::ActiveDOMObject::ActiveDOMObject):
        (WebCore::ActiveDOMObject::~ActiveDOMObject):
        (WebCore::ActiveDOMObject::suspendIfNeeded):
        * dom/ActiveDOMObject.h:
        (WebCore::ActiveDOMObject::suspendIfNeededCalled):
        * dom/DocumentEventQueue.cpp:
        (WebCore::DocumentEventQueue::DocumentEventQueue):
        * dom/ScriptExecutionContext.cpp:
        (WebCore::ScriptExecutionContext::ScriptExecutionContext):
        (WebCore::ScriptExecutionContext::~ScriptExecutionContext):
        (WebCore::ScriptExecutionContext::canSuspendActiveDOMObjects):
        (WebCore::ScriptExecutionContext::suspendActiveDOMObjects):
        (WebCore::ScriptExecutionContext::resumeActiveDOMObjects):
        (WebCore::ScriptExecutionContext::stopActiveDOMObjects):
        (WebCore::ScriptExecutionContext::suspendActiveDOMObjectIfNeeded):
        * dom/ScriptExecutionContext.h:
        (ScriptExecutionContext):
        (WebCore::ScriptExecutionContext::activeDOMObjectsAreSuspended):
        * fileapi/DOMFileSystem.cpp:
        (WebCore::DOMFileSystem::create):
        * fileapi/FileReader.cpp:
        (WebCore::FileReader::create):
        * fileapi/FileReader.h:
        * fileapi/FileWriter.cpp:
        (WebCore::FileWriter::create):
        * fileapi/FileWriter.h:
        * history/CachedFrame.cpp:
        (WebCore::CachedFrame::CachedFrame):
        * html/HTMLAudioElement.cpp:
        (WebCore::HTMLAudioElement::create):
        (WebCore::HTMLAudioElement::createForJSConstructor):
        * html/HTMLMarqueeElement.cpp:
        (WebCore::HTMLMarqueeElement::create):
        * html/HTMLVideoElement.cpp:
        (WebCore::HTMLVideoElement::create):
        * mediastream/PeerConnection.cpp:
        (WebCore::PeerConnection::create):
        * notifications/Notification.cpp:
        (WebCore::Notification::create):
        * notifications/NotificationCenter.cpp:
        (WebCore::NotificationCenter::create):
        * notifications/NotificationCenter.h:
        * page/DOMTimer.cpp:
        (WebCore::DOMTimer::install):
        (WebCore::DOMTimer::fired):
        * page/EventSource.cpp:
        (WebCore::EventSource::create):
        * page/SuspendableTimer.cpp:
        (WebCore::SuspendableTimer::SuspendableTimer):
        * storage/IDBDatabase.cpp:
        (WebCore::IDBDatabase::create):
        * storage/IDBRequest.cpp:
        (WebCore::IDBRequest::create):
        * storage/IDBTransaction.cpp:
        (WebCore::IDBTransaction::create):
        * storage/IDBVersionChangeRequest.cpp:
        (WebCore::IDBVersionChangeRequest::create):
        * webaudio/AudioContext.cpp:
        (WebCore::AudioContext::create):
        (WebCore::AudioContext::createOfflineContext):
        * websockets/WebSocket.cpp:
        (WebCore::WebSocket::create):
        * websockets/WebSocket.h:
        * workers/SharedWorker.cpp:
        (WebCore::SharedWorker::create):
        * workers/Worker.cpp:
        (WebCore::Worker::create):
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::create):

2012-02-09  Vsevolod Vlasov  <vsevik@chromium.org>

        Unreviewed followup for r107235.

        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype._hideNavigatorOverlay):
        (WebInspector.ScriptsPanel.prototype._navigatorOverlayWillHide):

2012-02-09  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Support hiding scripts panel debug sidebar.
        https://bugs.webkit.org/show_bug.cgi?id=77543

        Reviewed by Pavel Feldman.

        * English.lproj/localizedStrings.js:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * inspector/compile-front-end.sh:
        * inspector/front-end/Dialog.js:
        (WebInspector.Dialog):
        (WebInspector.DialogDelegate.prototype.show):
        * inspector/front-end/Images/navigatorPinButton.png: Added.
        * inspector/front-end/Images/navigatorShowHideButton.png: Added.
        * inspector/front-end/ScriptsNavigator.js:
        (WebInspector.ScriptsNavigator):
        (WebInspector.ScriptsNavigator.prototype.get view):
        (WebInspector.ScriptsNavigator.prototype.get element):
        (WebInspector.ScriptsNavigator.prototype.show):
        (WebInspector.ScriptsNavigator.prototype.focus):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype._fileSelected):
        (WebInspector.ScriptsPanel.prototype._createDebugToolbar):
        (WebInspector.ScriptsPanel.prototype._createNavigatorControls):
        (WebInspector.ScriptsPanel.prototype._createNavigatorControlButton):
        (WebInspector.ScriptsPanel.prototype._toggleNavigator):
        (WebInspector.ScriptsPanel.prototype._hidePinnedNavigator):
        (WebInspector.ScriptsPanel.prototype.set _pinNavigator):
        (WebInspector.ScriptsPanel.prototype.set _showNavigatorOverlay):
        (WebInspector.ScriptsPanel.prototype._hideNavigatorOverlay):
        (WebInspector.ScriptsPanel.prototype._navigatorOverlayWasShown):
        (WebInspector.ScriptsPanel.prototype._navigatorOverlayWillHide):
        * inspector/front-end/SidebarOverlay.js: Added.
        * inspector/front-end/SplitView.js:
        (WebInspector.SplitView.prototype.get resizable):
        (WebInspector.SplitView.prototype.hideMainElement):
        (WebInspector.SplitView.prototype.showMainElement):
        (WebInspector.SplitView.prototype.hideSidebarElement):
        (WebInspector.SplitView.prototype.showSidebarElement):
        (WebInspector.SplitView.prototype._resizerDragging):
        * inspector/front-end/TabbedEditorContainer.js:
        (WebInspector.TabbedEditorContainer.prototype.get element):
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/dialog.css:
        * inspector/front-end/inspector.html:
        * inspector/front-end/scriptsPanel.css:

2012-02-09  Alexei Filippov  <alexeif@chromium.org>

        Web Inspector: Show percentage by default in heap profiler.
        https://bugs.webkit.org/show_bug.cgi?id=78103

        Reviewed by Pavel Feldman.

        * inspector/front-end/DetailedHeapshotGridNodes.js:
        (WebInspector.HeapSnapshotGridNode.prototype._toPercentString):
        (WebInspector.HeapSnapshotGridNode.prototype._createValueCell):
        (WebInspector.HeapSnapshotGenericObjectNode.prototype.get data):
        (WebInspector.HeapSnapshotConstructorNode.prototype.get data):
        * inspector/front-end/DetailedHeapshotView.js:
        (WebInspector.DetailedHeapshotView.profileCallback):
        (WebInspector.DetailedHeapshotView):
        (WebInspector.DetailedHeapshotView.prototype.get statusBarItems):
        (WebInspector.DetailedHeapshotView.prototype._mouseDownInContentsGrid):
        (WebInspector.DetailedHeapshotView.prototype._updateFilterOptions):
        * inspector/front-end/UIUtils.js:
        (Number.withThousandsSeparator):
        * inspector/front-end/heapProfiler.css:
        (.detailed-heapshot-view .data-grid span.percent-column):

2012-02-09  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: Timeline memory graph would have been more useful if it had used minUsedHeapSize as the lower bound. Currently it uses zero as the lower bound.
        https://bugs.webkit.org/show_bug.cgi?id=78222

        Reviewed by Pavel Feldman.

        * inspector/front-end/TimelineOverviewPane.js:
        (WebInspector.HeapGraph):
        (WebInspector.HeapGraph.prototype.update):
        * inspector/front-end/timelinePanel.css:
        (.memory-graph-label):
        (.max.memory-graph-label):
        (.min.memory-graph-label):

2012-02-09  Alexander Pavlov  <apavlov@chromium.org>

        Web Inspector: Update protocol and UI to follow bug 77204 (Kill per-Attribute style declarations)
        https://bugs.webkit.org/show_bug.cgi?id=77962

        Reviewed by Pavel Feldman.

        * English.lproj/localizedStrings.js:
        * inspector/Inspector.json:
        * inspector/InspectorCSSAgent.cpp:
        (WebCore::InspectorCSSAgent::getInlineStylesForNode):
        (WebCore::InspectorCSSAgent::buildObjectForAttributesStyle):
        * inspector/InspectorCSSAgent.h:
        (InspectorCSSAgent):
        * inspector/front-end/AuditRules.js:
        (WebInspector.AuditRules.ImageDimensionsRule.prototype.doRun):
        (WebInspector.AuditRules.ImageDimensionsRule.prototype.doRun.getStyles):
        * inspector/front-end/CSSStyleModel.js:
        (WebInspector.CSSStyleModel.prototype.getInlineStylesAsync):
        * inspector/front-end/StylesSidebarPane.js:
        (WebInspector.StylesSidebarPane.prototype._executeRebuildUpdate.inlineCallback):
        (WebInspector.StylesSidebarPane.prototype._rebuildStyleRules):
        (WebInspector.StylesSidebarPane.prototype._rebuildStyleRules.get continue):

2012-02-08  Pavel Feldman  <pfeldman@google.com>

        Web Inspector: toggle Edit as HTML on F2, drag nodes up / down upon Ctrl(Cmd) Up / Down.
        https://bugs.webkit.org/show_bug.cgi?id=78123

        Reviewed by Yury Semikhatsky.

        * English.lproj/localizedStrings.js:
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::SetOuterHTMLAction::SetOuterHTMLAction):
        (WebCore::InspectorDOMAgent::SetOuterHTMLAction::undo):
        (InspectorDOMAgent::SetOuterHTMLAction):
        * inspector/front-end/ElementsPanel.js:
        (WebInspector.ElementsPanel.prototype._registerShortcuts):
        (WebInspector.ElementsPanel.prototype.handleShortcut):
        * inspector/front-end/ElementsTreeOutline.js:
        (WebInspector.ElementsTreeOutline.prototype._ondragstart):
        (WebInspector.ElementsTreeOutline.prototype._ondragover):
        (WebInspector.ElementsTreeOutline.prototype._doMove):
        (WebInspector.ElementsTreeOutline.prototype._ondragend):
        (WebInspector.ElementsTreeOutline.prototype._populateContextMenu):
        (WebInspector.ElementsTreeOutline.prototype.handleShortcut):
        (WebInspector.ElementsTreeOutline.prototype._toggleEditAsHTML):
        (WebInspector.ElementsTreeOutline.prototype._selectNodeAfterEdit):
        (WebInspector.ElementsTreeElement.prototype._startEditingAsHTML.commit):
        (WebInspector.ElementsTreeElement.prototype._tagNameEditingCommitted.changeTagNameCallback):
        (WebInspector.ElementsTreeElement.prototype._tagNameEditingCommitted):
        * inspector/front-end/UIUtils.js:

2012-02-09  Roland Steiner  <rolandsteiner@chromium.org>

        SelectorChecker::checkSelector: move parameters into a struct
        https://bugs.webkit.org/show_bug.cgi?id=77525

        Added 'SelectorCheckingContext' struct to hold parameters for the function.
        Adapted calling sites.
        (fixing change log after the commit message got bungled up).

        Reviewed by Antti Koivisto.

        No new tests. (refactoring)

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::checkSelector):
        * css/SelectorChecker.cpp:
        (WebCore::SelectorChecker::checkSelector):
        (WebCore):
        (WebCore::SelectorChecker::checkOneSelector):
        * css/SelectorChecker.h:
        (SelectorCheckingContext):
        (WebCore::SelectorChecker::SelectorCheckingContext::SelectorCheckingContext):
        (SelectorChecker):

2012-02-09  Philip Rogers  <pdr@google.com>

        Fix mirroring with SVG fonts
        https://bugs.webkit.org/show_bug.cgi?id=77067

        Reviewed by Nikolas Zimmermann.

        SVG fonts were incorrectly handling mirrored characters in bidi text.
        In this change I added the function createStringWithMirroredCharacters
        which handles mirroring the characters when selecting glyphs for SVG
        fonts. I also made a small cosmetic change in the function
        charactersWithArabicForm, changing the bool parameter "mirror" to "rtl"
        which better reflects what it actually does.

        Several new tests were added to test mirroring with SVG fonts in the
        presence of Arabic forms and non-BMP characters.

        Tests: svg/custom/glyph-selection-arabic-forms.svg
               svg/custom/glyph-selection-bidi-mirror.svg
               svg/custom/glyph-selection-non-bmp.svg

        * platform/graphics/SVGGlyph.cpp:
        (WebCore::charactersWithArabicForm):
        * svg/SVGFontData.cpp:
        (WebCore::SVGFontData::applySVGGlyphSelection):
        (WebCore::SVGFontData::createStringWithMirroredCharacters):
        * svg/SVGFontData.h:
        (SVGFontData):

2012-02-09  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Scripts navigator fails to reopen previously closed script.
        https://bugs.webkit.org/show_bug.cgi?id=78212

        Reviewed by Pavel Feldman.

        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype._reset):
        (WebInspector.ScriptsPanel.prototype._showFile):
        (WebInspector.ScriptsPanel.prototype._editorClosed):
        * inspector/front-end/TabbedEditorContainer.js:
        (WebInspector.TabbedEditorContainer.prototype._tabClosed):

2012-02-09  Shinya Kawanaka  <shinyak@google.com>

        ASSERT_NO_EXCEPTION should be initialized with non-zero value.
        https://bugs.webkit.org/show_bug.cgi?id=78194

        Reviewed by Hajime Morita.

        ExceptionCode should not be checked without initializing it.
        However, we encountered a bug that breaks this rule.
        It was missed until now because ExceptionCode is sometimes set to 0 even if it is not initialized.
        This patch ensures it is initialized as non-zero value.

        No new tests, no change in behavior.

        * dom/ExceptionCodePlaceholder.cpp:
        (WebCore::NoExceptionAssertionChecker::NoExceptionAssertionChecker):
        (WebCore::NoExceptionAssertionChecker::~NoExceptionAssertionChecker):
        * dom/ExceptionCodePlaceholder.h:
        (NoExceptionAssertionChecker):

2012-02-09  Roland Steiner  <rolandsteiner@chromium.org>

        Unreviewed, rolling out r107197.
        http://trac.webkit.org/changeset/107197
        https://bugs.webkit.org/show_bug.cgi?id=77525

        broke Chromium Linux

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::checkSelector):
        * css/SelectorChecker.cpp:
        (WebCore::SelectorChecker::checkSelector):
        (WebCore):
        (WebCore::SelectorChecker::checkOneSelector):
        * css/SelectorChecker.h:

2012-02-09  Kentaro Hara  <haraken@chromium.org>

        Unreviewed, rolling out r107182, r107186, r107189, r107191,
        and r107199.
        http://trac.webkit.org/changeset/107182
        http://trac.webkit.org/changeset/107186
        http://trac.webkit.org/changeset/107189
        http://trac.webkit.org/changeset/107191
        http://trac.webkit.org/changeset/107199
        https://bugs.webkit.org/show_bug.cgi?id=78200

        Layout tests of JSC-related port are crashing

        * Modules/gamepad/GamepadList.idl:
        * Modules/intents/Intent.idl:
        * bindings/js/JSDOMBinding.h:
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateGetOwnPropertySlotBody):
        (GenerateParametersCheck):
        (NativeToJSValue):
        (GenerateConstructorDefinition):
        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateParametersCheck):
        (GenerateImplementationIndexer):
        (RequiresCustomSignature):
        (NativeToJSValue):
        * bindings/scripts/test/CPP/WebDOMTestObj.cpp:
        * bindings/scripts/test/CPP/WebDOMTestObj.h:
        * bindings/scripts/test/GObject/WebKitDOMTestObj.cpp:
        * bindings/scripts/test/GObject/WebKitDOMTestObj.h:
        * bindings/scripts/test/JS/JSFloat64Array.cpp:
        (WebCore::jsFloat64ArrayPrototypeFunctionFoo):
        * bindings/scripts/test/JS/JSTestActiveDOMObject.cpp:
        (WebCore::jsTestActiveDOMObjectPrototypeFunctionExcitingFunction):
        (WebCore::jsTestActiveDOMObjectPrototypeFunctionPostMessage):
        * bindings/scripts/test/JS/JSTestCustomNamedGetter.cpp:
        (WebCore::jsTestCustomNamedGetterPrototypeFunctionAnotherFunction):
        * bindings/scripts/test/JS/JSTestEventTarget.cpp:
        (WebCore::jsTestEventTargetPrototypeFunctionItem):
        (WebCore::jsTestEventTargetPrototypeFunctionDispatchEvent):
        * bindings/scripts/test/JS/JSTestInterface.cpp:
        (WebCore::JSTestInterfaceConstructor::constructJSTestInterface):
        (WebCore::jsTestInterfacePrototypeFunctionSupplementalMethod2):
        * bindings/scripts/test/JS/JSTestMediaQueryListListener.cpp:
        (WebCore::jsTestMediaQueryListListenerPrototypeFunctionMethod):
        * bindings/scripts/test/JS/JSTestNamedConstructor.cpp:
        (WebCore::JSTestNamedConstructorNamedConstructor::constructJSTestNamedConstructor):
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore):
        (WebCore::jsTestObjPrototypeFunctionVoidMethodWithArgs):
        (WebCore::jsTestObjPrototypeFunctionIntMethodWithArgs):
        (WebCore::jsTestObjPrototypeFunctionObjMethodWithArgs):
        (WebCore::jsTestObjPrototypeFunctionMethodThatRequiresAllArgsAndThrows):
        (WebCore::jsTestObjPrototypeFunctionSerializedValue):
        (WebCore::jsTestObjPrototypeFunctionIdbKey):
        (WebCore::jsTestObjPrototypeFunctionOptionsObject):
        (WebCore::jsTestObjPrototypeFunctionCustomArgsAndException):
        (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalArg):
        (WebCore::jsTestObjPrototypeFunctionMethodWithNonOptionalArgAndOptionalArg):
        (WebCore::jsTestObjPrototypeFunctionMethodWithNonOptionalArgAndTwoOptionalArgs):
        (WebCore::jsTestObjPrototypeFunctionMethodWithNonCallbackArgAndCallbackArg):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethod1):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethod2):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethod3):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethod4):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethod6):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethod7):
        (WebCore::jsTestObjConstructorFunctionClassMethodWithOptional):
        (WebCore::jsTestObjConstructorFunctionOverloadedMethod11):
        (WebCore::jsTestObjConstructorFunctionOverloadedMethod12):
        (WebCore::jsTestObjPrototypeFunctionConvert1):
        (WebCore::jsTestObjPrototypeFunctionConvert2):
        (WebCore::jsTestObjPrototypeFunctionConvert3):
        (WebCore::jsTestObjPrototypeFunctionConvert4):
        (WebCore::jsTestObjPrototypeFunctionConvert5):
        (WebCore::jsTestObjPrototypeFunctionStrictFunction):
        * bindings/scripts/test/JS/JSTestObj.h:
        (WebCore):
        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp:
        (WebCore::JSTestSerializedScriptValueInterfaceConstructor::constructJSTestSerializedScriptValueInterface):
        * bindings/scripts/test/ObjC/DOMTestObj.h:
        * bindings/scripts/test/ObjC/DOMTestObj.mm:
        * bindings/scripts/test/TestInterface.idl:
        * bindings/scripts/test/TestNamedConstructor.idl:
        * bindings/scripts/test/TestObj.idl:
        * bindings/scripts/test/V8/V8Float64Array.cpp:
        (WebCore::Float64ArrayInternal::fooCallback):
        * bindings/scripts/test/V8/V8TestActiveDOMObject.cpp:
        (WebCore::TestActiveDOMObjectInternal::excitingFunctionCallback):
        (WebCore::TestActiveDOMObjectInternal::postMessageCallback):
        * bindings/scripts/test/V8/V8TestCustomNamedGetter.cpp:
        (WebCore::TestCustomNamedGetterInternal::anotherFunctionCallback):
        * bindings/scripts/test/V8/V8TestEventTarget.cpp:
        (WebCore::TestEventTargetInternal::itemCallback):
        (WebCore::TestEventTargetInternal::dispatchEventCallback):
        * bindings/scripts/test/V8/V8TestInterface.cpp:
        (WebCore::TestInterfaceInternal::supplementalMethod2Callback):
        (WebCore::V8TestInterface::constructorCallback):
        * bindings/scripts/test/V8/V8TestMediaQueryListListener.cpp:
        (WebCore::TestMediaQueryListListenerInternal::methodCallback):
        * bindings/scripts/test/V8/V8TestNamedConstructor.cpp:
        (WebCore::V8TestNamedConstructorConstructorCallback):
        * bindings/scripts/test/V8/V8TestObj.cpp:
        (WebCore::TestObjInternal::voidMethodWithArgsCallback):
        (WebCore::TestObjInternal::intMethodWithArgsCallback):
        (WebCore::TestObjInternal::objMethodWithArgsCallback):
        (WebCore::TestObjInternal::methodThatRequiresAllArgsAndThrowsCallback):
        (WebCore::TestObjInternal::idbKeyCallback):
        (WebCore::TestObjInternal::optionsObjectCallback):
        (WebCore::TestObjInternal::customArgsAndExceptionCallback):
        (WebCore::TestObjInternal::methodWithOptionalArgCallback):
        (WebCore::TestObjInternal::methodWithNonOptionalArgAndOptionalArgCallback):
        (WebCore::TestObjInternal::methodWithNonOptionalArgAndTwoOptionalArgsCallback):
        (WebCore::TestObjInternal::methodWithNonCallbackArgAndCallbackArgCallback):
        (WebCore::TestObjInternal::overloadedMethod1Callback):
        (WebCore::TestObjInternal::overloadedMethod2Callback):
        (WebCore::TestObjInternal::overloadedMethod3Callback):
        (WebCore::TestObjInternal::overloadedMethod4Callback):
        (WebCore::TestObjInternal::overloadedMethod6Callback):
        (WebCore::TestObjInternal::overloadedMethod7Callback):
        (WebCore::TestObjInternal::classMethodWithOptionalCallback):
        (WebCore::TestObjInternal::overloadedMethod11Callback):
        (WebCore::TestObjInternal::overloadedMethod12Callback):
        (WebCore::TestObjInternal::enabledAtRuntimeMethod1Callback):
        (WebCore::TestObjInternal::enabledAtRuntimeMethod2Callback):
        (WebCore::TestObjInternal::convert1Callback):
        (WebCore::TestObjInternal::convert2Callback):
        (WebCore::TestObjInternal::convert3Callback):
        (WebCore::TestObjInternal::convert4Callback):
        (WebCore::TestObjInternal::convert5Callback):
        (WebCore::TestObjInternal::strictFunctionCallback):
        (WebCore):
        * bindings/scripts/test/V8/V8TestSerializedScriptValueInterface.cpp:
        (WebCore::V8TestSerializedScriptValueInterface::constructorCallback):
        * bindings/v8/V8Binding.h:
        * bindings/v8/custom/V8BindingMacros.h:
        * css/CSSCharsetRule.idl:
        * css/CSSImportRule.idl:
        * css/CSSMediaRule.idl:
        * css/CSSPageRule.idl:
        * css/CSSPrimitiveValue.idl:
        * css/CSSRule.idl:
        * css/CSSRuleList.idl:
        * css/CSSStyleDeclaration.idl:
        * css/CSSStyleRule.idl:
        * css/CSSStyleSheet.idl:
        * css/CSSValue.idl:
        * css/CSSValueList.idl:
        * css/MediaList.idl:
        * css/MediaQueryList.idl:
        * css/MediaQueryListListener.idl:
        * css/StyleMedia.idl:
        * css/StyleSheet.idl:
        * css/StyleSheetList.idl:
        * css/WebKitCSSKeyframesRule.idl:
        * css/WebKitCSSMatrix.idl:
        * dom/Attr.idl:
        * dom/CharacterData.idl:
        * dom/ClientRectList.idl:
        * dom/Clipboard.idl:
        * dom/CompositionEvent.idl:
        * dom/CustomEvent.idl:
        * dom/DOMImplementation.idl:
        * dom/DOMStringList.idl:
        * dom/DataTransferItem.idl:
        * dom/DataTransferItemList.idl:
        * dom/DeviceMotionEvent.idl:
        * dom/DeviceOrientationEvent.idl:
        * dom/Document.idl:
        * dom/DocumentType.idl:
        * dom/Element.idl:
        * dom/Entity.idl:
        * dom/Event.idl:
        * dom/HashChangeEvent.idl:
        * dom/KeyboardEvent.idl:
        * dom/MessageEvent.idl:
        * dom/MouseEvent.idl:
        * dom/MutationEvent.idl:
        * dom/MutationRecord.idl:
        * dom/NamedNodeMap.idl:
        * dom/Node.idl:
        * dom/NodeFilter.idl:
        * dom/NodeList.idl:
        * dom/Notation.idl:
        * dom/OverflowEvent.idl:
        * dom/ProcessingInstruction.idl:
        * dom/Range.idl:
        * dom/ShadowRoot.idl:
        * dom/Text.idl:
        * dom/TextEvent.idl:
        * dom/TouchEvent.idl:
        * dom/UIEvent.idl:
        * dom/WheelEvent.idl:
        * html/DOMFormData.idl:
        * html/DOMTokenList.idl:
        * html/DOMURL.idl:
        * html/HTMLAllCollection.idl:
        * html/HTMLAudioElement.idl:
        * html/HTMLCanvasElement.idl:
        * html/HTMLCollection.idl:
        * html/HTMLDocument.idl:
        * html/HTMLElement.idl:
        * html/HTMLInputElement.idl:
        * html/HTMLMediaElement.idl:
        * html/HTMLOptionElement.idl:
        * html/HTMLOptionsCollection.idl:
        * html/HTMLSelectElement.idl:
        * html/HTMLTableElement.idl:
        * html/HTMLTableRowElement.idl:
        * html/HTMLTableSectionElement.idl:
        * html/HTMLTextAreaElement.idl:
        * html/TextTrackCue.idl:
        * html/canvas/CanvasGradient.idl:
        * html/canvas/CanvasRenderingContext2D.idl:
        * html/canvas/Float32Array.idl:
        * html/canvas/Float64Array.idl:
        * html/canvas/Int16Array.idl:
        * html/canvas/Int32Array.idl:
        * html/canvas/Int8Array.idl:
        * html/canvas/OESVertexArrayObject.idl:
        * html/canvas/Uint16Array.idl:
        * html/canvas/Uint32Array.idl:
        * html/canvas/Uint8Array.idl:
        * html/canvas/Uint8ClampedArray.idl:
        * html/canvas/WebGLDebugShaders.idl:
        * html/canvas/WebGLRenderingContext.idl:
        * page/Console.idl:
        * page/DOMSelection.idl:
        * page/DOMWindow.idl:
        * page/History.idl:
        * page/Location.idl:
        * plugins/DOMMimeTypeArray.idl:
        * plugins/DOMPlugin.idl:
        * plugins/DOMPluginArray.idl:
        * storage/IDBDatabase.idl:
        * storage/IDBObjectStore.idl:
        * storage/IDBRequest.idl:
        * storage/Storage.idl:
        * storage/StorageEvent.idl:
        * svg/ElementTimeControl.idl:
        * svg/SVGDocument.idl:
        * svg/SVGElementInstanceList.idl:
        * svg/SVGFEDropShadowElement.idl:
        * svg/SVGFEGaussianBlurElement.idl:
        * svg/SVGFEMorphologyElement.idl:
        * svg/SVGFilterElement.idl:
        * svg/SVGLocatable.idl:
        * svg/SVGMarkerElement.idl:
        * svg/SVGPathElement.idl:
        * svg/SVGSVGElement.idl:
        * svg/SVGStylable.idl:
        * svg/SVGTests.idl:
        * svg/SVGTextContentElement.idl:
        * webaudio/AudioNode.idl:
        * websockets/WebSocket.idl:
        * workers/SharedWorker.idl:
        * workers/WorkerContext.idl:
        * xml/DOMParser.idl:
        * xml/XMLHttpRequest.idl:
        * xml/XMLSerializer.idl:
        * xml/XPathEvaluator.idl:
        * xml/XPathExpression.idl:
        * xml/XPathNSResolver.idl:
        * xml/XPathResult.idl:
        * xml/XSLTProcessor.idl:

2012-02-09  Shinya Kawanaka  <shinyak@google.com>

        Disable adding a shadow root to elements having a dynamic built-in shadow root.
        https://bugs.webkit.org/show_bug.cgi?id=77935

        Reviewed by Hajime Morita.

        We temporarily disable adding a shadow root in elements having a dynamic user agent shadow root.
        These shadow roots are currently created using Element::ensureShadowRoot.
        So we don't check the condition if a shadow root is created eaither using Element::ensureShadowRoot
        or ShadowRoot::CreatingUserAgentShadowRoot is specified for ShadowRoot::create.

        Test: fast/dom/shadow/shadow-disable.html

        * dom/Element.cpp:
        (WebCore::Element::ensureShadowRoot):
        * dom/ShadowRoot.cpp:
        (WebCore::allowsUserShadowRoot):
        (WebCore):
        (WebCore::ShadowRoot::create):
        * dom/ShadowRoot.h:
        (ShadowRoot):
        * html/HTMLDetailsElement.cpp:
        (WebCore::HTMLDetailsElement::createShadowSubtree):
          ShadowRoot::CreatingUserAgentShadowRoot is specified.
        * html/HTMLKeygenElement.cpp:
        (WebCore::HTMLKeygenElement::HTMLKeygenElement): ditto.
        * html/HTMLMeterElement.cpp:
        (WebCore::HTMLMeterElement::createShadowSubtree): ditto.
        * html/HTMLProgressElement.cpp:
        (WebCore::HTMLProgressElement::createShadowSubtree): ditto.
        * html/HTMLSummaryElement.cpp:
        (WebCore::HTMLSummaryElement::createShadowSubtree): ditto.
        * html/HTMLTextAreaElement.cpp:
        (WebCore::HTMLTextAreaElement::createShadowSubtree): ditto.

2012-02-08  Alexander Pavlov  <apavlov@chromium.org>

        Web Inspector: hovering over element with :hover style halts inspector
        https://bugs.webkit.org/show_bug.cgi?id=78086

        Reviewed by Pavel Feldman.

        Test: inspector/styles/updates-throttled.html

        * inspector/front-end/StylesSidebarPane.js:
        (WebInspector.StylesSidebarPane.prototype._executeRebuildUpdate):
        (WebInspector.StylesSidebarPane.prototype._innerUpdate.computedStyleCallback):
        (WebInspector.StylesSidebarPane.prototype._innerUpdate):

2012-02-09  Kentaro Hara  <haraken@chromium.org>

        Unreviewed. Fix build failure caused by r107191.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateParametersCheck):
        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateParametersCheck):

2012-02-09  Roland Steiner  <rolandsteiner@chromium.org>

        SelectorChecker::checkSelector: move parameters into a struct
        https://bugs.webkit.org/show_bug.cgi?id=77525

        Added 'SelectorCheckingContext' struct to hold parameters for the function.
        Adapted calling sites.

        Reviewed by Antti Koivisto.

        No new tests. (refactoring)

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::checkSelector):
        * css/SelectorChecker.cpp:
        (WebCore::SelectorChecker::checkSelector):
        (WebCore):
        (WebCore::SelectorChecker::checkOneSelector):
        * css/SelectorChecker.h:
        (SelectorCheckingContext):
        (WebCore::SelectorChecker::SelectorCheckingContext::SelectorCheckingContext):
        (SelectorChecker):

2012-02-09  Kent Tamura  <tkent@chromium.org>

        Do not localize numbers in scientific notation
        https://bugs.webkit.org/show_bug.cgi?id=78208

        Reviewed by Hajime Morita.

        For a preparation of fixing http://wkb.ug/62939, we stop supporting
        localized numbers in scientific notation in <input type=number>.

        We're going to change number localization processing so that it replaces
        letters one by one. It will be very hard to support scientific notation.

        * html/NumberInputType.cpp:
        (WebCore::isE): A helper functio for String::find() to detect scientific notation.
        (WebCore::NumberInputType::visibleValue): Avoid localization for scientific notation.
        (WebCore::NumberInputType::convertFromVisibleValue): ditto.
        (WebCore::NumberInputType::isAcceptableValue):
        Use convertFromVisibleValue, also stop accepting a standard format as a fallback.

2012-02-09  Leo Yang  <leo.yang@torchmobile.com.cn>

        EntryBase.cpp is missing in CMake build system when turning on ENABLE_FILE_SYSTEM
        https://bugs.webkit.org/show_bug.cgi?id=78190

        Reviewed by Antonio Gomes.

        EntryBase.cpp is not in the CMake build system, which causes build failure (undefined
        symbols to EntryBase) when turning on ENABLE_FILE_SYSTEM.

        Build system fix, no new tests.

        * CMakeLists.txt:

2012-02-09  Andreas Kling  <awesomekling@apple.com>

        REGRESSION(r53878): Input elements don't share their styles if the document contains no validity style rules.
        <http://webkit.org/b/69400>

        Reviewed by Kent Tamura.

        Don't reject style sharing candidates prematurely just because the document doesn't
        have any :valid or :invalid selectors.

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

2012-02-09  Kentaro Hara  <haraken@chromium.org>

        Unreviewed. Fixed typo in the following files. [TreatUndefinedAs] => [TreatAsUndefined].

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateParametersCheck):

        * bindings/scripts/test/TestObj.idl:

        * bindings/scripts/test/CPP/WebDOMTestObj.cpp: Updated run-bindings-tests results.
        (WebDOMTestObj::methodWithOptionalIsUndefinedString):
        * bindings/scripts/test/CPP/WebDOMTestObj.h:
        * bindings/scripts/test/GObject/WebKitDOMTestObj.cpp:
        (webkit_dom_test_obj_method_with_optional_is_undefined_string):
        * bindings/scripts/test/GObject/WebKitDOMTestObj.h:
        * bindings/scripts/test/JS/JSTestNamedConstructor.cpp:
        (WebCore::JSTestNamedConstructorNamedConstructor::constructJSTestNamedConstructor):
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore):
        (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalIsUndefinedString):
        (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalIsNullStringString):
        (WebCore::jsTestObjPrototypeFunctionConvert5):
        * bindings/scripts/test/JS/JSTestObj.h:
        (WebCore):
        * bindings/scripts/test/ObjC/DOMTestObj.h:
        * bindings/scripts/test/ObjC/DOMTestObj.mm:
        (-[DOMTestObj methodWithOptionalIsUndefinedString:]):
        * bindings/scripts/test/V8/V8TestObj.cpp:
        (WebCore::TestObjInternal::methodWithOptionalIsUndefinedStringCallback):
        (WebCore):

2012-02-09  Kentaro Hara  <haraken@chromium.org>

        Unreviewed. Fixed typo in the following files. [TreatReturnedNullStringTo=] => [TreatReturnedNullStringAs=].

        * bindings/scripts/test/TestObj.idl:
        * css/CSSCharsetRule.idl:
        * css/CSSImportRule.idl:
        * css/CSSPageRule.idl:
        * css/CSSRule.idl:
        * css/CSSStyleDeclaration.idl:
        * css/CSSStyleRule.idl:
        * css/CSSValue.idl:
        * css/MediaList.idl:
        * css/StyleSheet.idl:
        * css/WebKitCSSKeyframesRule.idl:
        * dom/Attr.idl:
        * dom/CharacterData.idl:
        * dom/Clipboard.idl:
        * dom/DOMStringList.idl:
        * dom/Document.idl:
        * dom/DocumentType.idl:
        * dom/Element.idl:
        * dom/Entity.idl:
        * dom/MutationRecord.idl:
        * dom/Node.idl:
        * dom/Notation.idl:
        * dom/ProcessingInstruction.idl:
        * html/DOMTokenList.idl:
        * html/DOMURL.idl:
        * html/HTMLMediaElement.idl:
        * html/canvas/WebGLDebugShaders.idl:
        * html/canvas/WebGLRenderingContext.idl:
        * page/DOMWindow.idl:
        * storage/IDBObjectStore.idl:
        * storage/IDBRequest.idl:
        * storage/Storage.idl:
        * storage/StorageEvent.idl:
        * websockets/WebSocket.idl:
        * xml/XMLHttpRequest.idl:
        * xml/XPathNSResolver.idl:
        * xml/XSLTProcessor.idl:

2012-02-08  Kentaro Hara  <haraken@chromium.org>

        Rename [ConvertNullStringTo=] to [TreatReturnedNullStringAs=]
        https://bugs.webkit.org/show_bug.cgi?id=78108

        Reviewed by Adam Barth.

        [ConvertNullStringTo=] is not descriptive. To clarify that it specifies
        the behavior when the null string is returned by WebCore, this patch renames
        [ConvertNullStringTo=] to [TreatReturnedNullStringAs=]. This change is also
        for naming consistency with [TreatNullAs] and [TreatUndefinedAs].

        No tests. No change in behavior.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateGetOwnPropertySlotBody):
        (NativeToJSValue):
        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateImplementationIndexer):
        (NativeToJSValue):

        * bindings/scripts/test/TestObj.idl: No change in run-bindings-tests results.

        * css/CSSCharsetRule.idl:
        * css/CSSImportRule.idl:
        * css/CSSPageRule.idl:
        * css/CSSRule.idl:
        * css/CSSStyleDeclaration.idl:
        * css/CSSStyleRule.idl:
        * css/CSSValue.idl:
        * css/MediaList.idl:
        * css/StyleSheet.idl:
        * css/WebKitCSSKeyframesRule.idl:
        * dom/Attr.idl:
        * dom/CharacterData.idl:
        * dom/Clipboard.idl:
        * dom/DOMStringList.idl:
        * dom/Document.idl:
        * dom/DocumentType.idl:
        * dom/Element.idl:
        * dom/Entity.idl:
        * dom/MutationRecord.idl:
        * dom/Node.idl:
        * dom/Notation.idl:
        * dom/ProcessingInstruction.idl:
        * html/DOMTokenList.idl:
        * html/DOMURL.idl:
        * html/HTMLMediaElement.idl:
        * html/canvas/WebGLDebugShaders.idl:
        * html/canvas/WebGLRenderingContext.idl:
        * page/DOMWindow.idl:
        * storage/IDBObjectStore.idl:
        * storage/IDBRequest.idl:
        * storage/Storage.idl:
        * storage/StorageEvent.idl:
        * websockets/WebSocket.idl:
        * xml/XMLHttpRequest.idl:
        * xml/XPathNSResolver.idl:
        * xml/XSLTProcessor.idl:

2012-02-08  Andreas Kling  <awesomekling@apple.com>

        Simplify ownership of StyledElement::additionalAttributeStyles().
        <http://webkit.org/b/78204>

        Reviewed by Anders Carlsson.

        Change additionalAttributeStyle() to return a raw pointer rather than a PassRefPtr.

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::matchAllRules):
        (WebCore::CSSStyleSelector::canShareStyleWithElement):
        * dom/StyledElement.h:
        (WebCore::StyledElement::additionalAttributeStyle):
        * html/HTMLTableCellElement.cpp:
        (WebCore::HTMLTableCellElement::additionalAttributeStyle):
        * html/HTMLTableCellElement.h:
        (HTMLTableCellElement):
        * html/HTMLTableColElement.cpp:
        (WebCore::HTMLTableColElement::additionalAttributeStyle):
        * html/HTMLTableColElement.h:
        (HTMLTableColElement):
        * html/HTMLTableElement.cpp:
        (WebCore::HTMLTableElement::additionalAttributeStyle):
        (WebCore::HTMLTableElement::additionalCellStyle):
        (WebCore::HTMLTableElement::additionalGroupStyle):
        * html/HTMLTableElement.h:
        (HTMLTableElement):
        * html/HTMLTableSectionElement.cpp:
        (WebCore::HTMLTableSectionElement::additionalAttributeStyle):
        * html/HTMLTableSectionElement.h:
        (HTMLTableSectionElement):

2012-02-08  Kentaro Hara  <haraken@chromium.org>

        Rename [Optional=CallWithDefalutValue] and [Optional=CallWithNullValue]
        https://bugs.webkit.org/show_bug.cgi?id=78200

        Reviewed by Adam Barth.

        [Optional=CallWithDefalutValue] and [Optional=CallWithNullValue] are confusing.

        - [Optional=CallWithDefalutValue] indicates that a missing value should be treated
        as if the JavaScript undefined is passed.
        - [Optional=CallWithNullValue] indicates that a missing value should be treated as
        the WebKit null value (i.e. JSValue() or v8::Local<v8::Value>()).
        - Actually, the difference between [Optional=CallWithDefalutValue] and
        [Optional=CallWithNullValue] appears only when the type of the missing value is DOMString.
        In case of [Optional=CallWithDefalutValue], the missing value is converted to the string
        "undefined". On the other hand, in case of [Optional=CallWithNullValue], the missing
        value is converted to the WebKit null string.

        With these observations, this patch renames them as follows:

        - Rename [Optional=CallWithDefalutValue] to [Optional=TreatAsUndefined].
        - Remove [Optional=CallWithNullValue]. Instead, we use
        [Optional=TreatAsUndefined, TreatUndefinedAs=NullString].

        Test: bindings/scripts/test/TestInterface.idl

        * bindings/js/JSDOMBinding.h: Renamed MissingIsUndefined to MissingIsUndefinedValue,
        renamed MissingIsEmpty to MissingIsNullValue.
        * bindings/v8/V8Binding.h: Ditto.
        * bindings/v8/custom/V8BindingMacros.h: Ditto.

        * bindings/scripts/CodeGeneratorJS.pm: Modified to support the IDL attribute renaming.
        (GenerateParametersCheck):
        (GenerateConstructorDefinition):
        * bindings/scripts/CodeGeneratorV8.pm: Ditto.
        (GenerateParametersCheck):
        (RequiresCustomSignature):

        * Modules/gamepad/GamepadList.idl: Renamed IDL attributes as described above.
        * Modules/intents/Intent.idl:
        * css/CSSMediaRule.idl:
        * css/CSSPrimitiveValue.idl:
        * css/CSSRuleList.idl:
        * css/CSSStyleDeclaration.idl:
        * css/CSSStyleSheet.idl:
        * css/CSSValueList.idl:
        * css/MediaList.idl:
        * css/MediaQueryList.idl:
        * css/MediaQueryListListener.idl:
        * css/StyleMedia.idl:
        * css/StyleSheetList.idl:
        * css/WebKitCSSKeyframesRule.idl:
        * css/WebKitCSSMatrix.idl:
        * dom/CharacterData.idl:
        * dom/ClientRectList.idl:
        * dom/CompositionEvent.idl:
        * dom/CustomEvent.idl:
        * dom/DOMImplementation.idl:
        * dom/DOMStringList.idl:
        * dom/DataTransferItem.idl:
        * dom/DataTransferItemList.idl:
        * dom/DeviceMotionEvent.idl:
        * dom/DeviceOrientationEvent.idl:
        * dom/Document.idl:
        * dom/Element.idl:
        * dom/Event.idl:
        * dom/HashChangeEvent.idl:
        * dom/KeyboardEvent.idl:
        * dom/MessageEvent.idl:
        * dom/MouseEvent.idl:
        * dom/MutationEvent.idl:
        * dom/NamedNodeMap.idl:
        * dom/Node.idl:
        * dom/NodeFilter.idl:
        * dom/NodeList.idl:
        * dom/OverflowEvent.idl:
        * dom/Range.idl:
        * dom/ShadowRoot.idl:
        * dom/Text.idl:
        * dom/TextEvent.idl:
        * dom/TouchEvent.idl:
        * dom/UIEvent.idl:
        * dom/WheelEvent.idl:
        * html/DOMFormData.idl:
        * html/HTMLAllCollection.idl:
        * html/HTMLAudioElement.idl:
        * html/HTMLCanvasElement.idl:
        * html/HTMLCollection.idl:
        * html/HTMLDocument.idl:
        * html/HTMLElement.idl:
        * html/HTMLInputElement.idl:
        * html/HTMLMediaElement.idl:
        * html/HTMLOptionElement.idl:
        * html/HTMLOptionsCollection.idl:
        * html/HTMLSelectElement.idl:
        * html/HTMLTableElement.idl:
        * html/HTMLTableRowElement.idl:
        * html/HTMLTableSectionElement.idl:
        * html/HTMLTextAreaElement.idl:
        * html/TextTrackCue.idl:
        * html/canvas/CanvasGradient.idl:
        * html/canvas/CanvasRenderingContext2D.idl:
        * html/canvas/Float32Array.idl:
        * html/canvas/Float64Array.idl:
        * html/canvas/Int16Array.idl:
        * html/canvas/Int32Array.idl:
        * html/canvas/Int8Array.idl:
        * html/canvas/OESVertexArrayObject.idl:
        * html/canvas/Uint16Array.idl:
        * html/canvas/Uint32Array.idl:
        * html/canvas/Uint8Array.idl:
        * html/canvas/Uint8ClampedArray.idl:
        * page/Console.idl:
        * page/DOMSelection.idl:
        * page/DOMWindow.idl:
        * page/History.idl:
        * page/Location.idl:
        * plugins/DOMMimeTypeArray.idl:
        * plugins/DOMPlugin.idl:
        * plugins/DOMPluginArray.idl:
        * storage/IDBDatabase.idl:
        * storage/StorageEvent.idl:
        * svg/ElementTimeControl.idl:
        * svg/SVGDocument.idl:
        * svg/SVGElementInstanceList.idl:
        * svg/SVGFEDropShadowElement.idl:
        * svg/SVGFEGaussianBlurElement.idl:
        * svg/SVGFEMorphologyElement.idl:
        * svg/SVGFilterElement.idl:
        * svg/SVGLocatable.idl:
        * svg/SVGMarkerElement.idl:
        * svg/SVGPathElement.idl:
        * svg/SVGSVGElement.idl:
        * svg/SVGStylable.idl:
        * svg/SVGTests.idl:
        * svg/SVGTextContentElement.idl:
        * webaudio/AudioNode.idl:
        * workers/SharedWorker.idl:
        * workers/WorkerContext.idl:
        * xml/DOMParser.idl:
        * xml/XMLSerializer.idl:
        * xml/XPathEvaluator.idl:
        * xml/XPathExpression.idl:
        * xml/XPathNSResolver.idl:
        * xml/XPathResult.idl:

        * bindings/scripts/test/TestInterface.idl: Added test cases for [Optional],
        [Optional=TreatAsUndefined] and [Optional=TreatAsUndefined, TreatUndefinedAs=NullString]
        * bindings/scripts/test/TestNamedConstructor.idl: Renamed IDL attributes as described above.
        * bindings/scripts/test/TestObj.idl: Ditto.

        * bindings/scripts/test/CPP/WebDOMTestObj.cpp: Updated run-bindings-tests results.
        (WebDOMTestObj::methodWithOptionalString):
        (WebDOMTestObj::methodWithOptionalIsTreatAsUndefinedString):
        (WebDOMTestObj::methodWithOptionalIsNullStringString):
        * bindings/scripts/test/CPP/WebDOMTestObj.h: Ditto.
        * bindings/scripts/test/GObject/WebKitDOMTestObj.cpp: Ditto.
        (webkit_dom_test_obj_method_with_optional_string):
        (webkit_dom_test_obj_method_with_optional_is_treat_as_undefined_string):
        (webkit_dom_test_obj_method_with_optional_is_null_string_string):
        * bindings/scripts/test/GObject/WebKitDOMTestObj.h: Ditto.
        * bindings/scripts/test/JS/JSFloat64Array.cpp: Ditto.
        (WebCore::jsFloat64ArrayPrototypeFunctionFoo):
        * bindings/scripts/test/JS/JSTestActiveDOMObject.cpp: Ditto.
        (WebCore::jsTestActiveDOMObjectPrototypeFunctionExcitingFunction):
        (WebCore::jsTestActiveDOMObjectPrototypeFunctionPostMessage):
        * bindings/scripts/test/JS/JSTestCustomNamedGetter.cpp: Ditto.
        (WebCore::jsTestCustomNamedGetterPrototypeFunctionAnotherFunction):
        * bindings/scripts/test/JS/JSTestEventTarget.cpp: Ditto.
        (WebCore::jsTestEventTargetPrototypeFunctionItem):
        (WebCore::jsTestEventTargetPrototypeFunctionDispatchEvent):
        * bindings/scripts/test/JS/JSTestInterface.cpp: Ditto.
        (WebCore::JSTestInterfaceConstructor::constructJSTestInterface):
        (WebCore::jsTestInterfacePrototypeFunctionSupplementalMethod2):
        * bindings/scripts/test/JS/JSTestMediaQueryListListener.cpp: Ditto.
        (WebCore::jsTestMediaQueryListListenerPrototypeFunctionMethod):
        * bindings/scripts/test/JS/JSTestNamedConstructor.cpp: Ditto.
        (WebCore::JSTestNamedConstructorNamedConstructor::constructJSTestNamedConstructor):
        * bindings/scripts/test/JS/JSTestObj.cpp: Ditto.
        (WebCore):
        (WebCore::jsTestObjPrototypeFunctionVoidMethodWithArgs):
        (WebCore::jsTestObjPrototypeFunctionIntMethodWithArgs):
        (WebCore::jsTestObjPrototypeFunctionObjMethodWithArgs):
        (WebCore::jsTestObjPrototypeFunctionMethodThatRequiresAllArgsAndThrows):
        (WebCore::jsTestObjPrototypeFunctionSerializedValue):
        (WebCore::jsTestObjPrototypeFunctionIdbKey):
        (WebCore::jsTestObjPrototypeFunctionOptionsObject):
        (WebCore::jsTestObjPrototypeFunctionCustomArgsAndException):
        (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalArg):
        (WebCore::jsTestObjPrototypeFunctionMethodWithNonOptionalArgAndOptionalArg):
        (WebCore::jsTestObjPrototypeFunctionMethodWithNonOptionalArgAndTwoOptionalArgs):
        (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalString):
        (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalIsTreatAsUndefinedString):
        (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalIsNullStringString):
        (WebCore::jsTestObjPrototypeFunctionMethodWithNonCallbackArgAndCallbackArg):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethod1):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethod2):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethod3):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethod4):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethod6):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethod7):
        (WebCore::jsTestObjConstructorFunctionClassMethodWithOptional):
        (WebCore::jsTestObjConstructorFunctionOverloadedMethod11):
        (WebCore::jsTestObjConstructorFunctionOverloadedMethod12):
        (WebCore::jsTestObjPrototypeFunctionConvert1):
        (WebCore::jsTestObjPrototypeFunctionConvert2):
        (WebCore::jsTestObjPrototypeFunctionConvert3):
        (WebCore::jsTestObjPrototypeFunctionConvert4):
        (WebCore::jsTestObjPrototypeFunctionConvert5):
        (WebCore::jsTestObjPrototypeFunctionStrictFunction):
        * bindings/scripts/test/JS/JSTestObj.h: Ditto.
        (WebCore):
        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp: Ditto.
        (WebCore::JSTestSerializedScriptValueInterfaceConstructor::constructJSTestSerializedScriptValueInterface):
        * bindings/scripts/test/ObjC/DOMTestObj.h: Ditto.
        * bindings/scripts/test/ObjC/DOMTestObj.mm: Ditto.
        (-[DOMTestObj methodWithOptionalString:]):
        (-[DOMTestObj methodWithOptionalIsTreatAsUndefinedString:]):
        (-[DOMTestObj methodWithOptionalIsNullStringString:]):
        * bindings/scripts/test/V8/V8Float64Array.cpp: Ditto.
        (WebCore::Float64ArrayInternal::fooCallback):
        * bindings/scripts/test/V8/V8TestActiveDOMObject.cpp: Ditto.
        (WebCore::TestActiveDOMObjectInternal::excitingFunctionCallback):
        (WebCore::TestActiveDOMObjectInternal::postMessageCallback):
        * bindings/scripts/test/V8/V8TestCustomNamedGetter.cpp: Ditto.
        (WebCore::TestCustomNamedGetterInternal::anotherFunctionCallback):
        * bindings/scripts/test/V8/V8TestEventTarget.cpp: Ditto.
        (WebCore::TestEventTargetInternal::itemCallback):
        (WebCore::TestEventTargetInternal::dispatchEventCallback):
        * bindings/scripts/test/V8/V8TestInterface.cpp: Ditto.
        (WebCore::TestInterfaceInternal::supplementalMethod2Callback):
        (WebCore::V8TestInterface::constructorCallback):
        * bindings/scripts/test/V8/V8TestMediaQueryListListener.cpp: Ditto.
        (WebCore::TestMediaQueryListListenerInternal::methodCallback):
        * bindings/scripts/test/V8/V8TestNamedConstructor.cpp: Ditto.
        (WebCore::V8TestNamedConstructorConstructorCallback):
        * bindings/scripts/test/V8/V8TestObj.cpp: Ditto.
        (WebCore::TestObjInternal::voidMethodWithArgsCallback):
        (WebCore::TestObjInternal::intMethodWithArgsCallback):
        (WebCore::TestObjInternal::objMethodWithArgsCallback):
        (WebCore::TestObjInternal::methodThatRequiresAllArgsAndThrowsCallback):
        (WebCore::TestObjInternal::idbKeyCallback):
        (WebCore::TestObjInternal::optionsObjectCallback):
        (WebCore::TestObjInternal::customArgsAndExceptionCallback):
        (WebCore::TestObjInternal::methodWithOptionalArgCallback):
        (WebCore::TestObjInternal::methodWithNonOptionalArgAndOptionalArgCallback):
        (WebCore::TestObjInternal::methodWithNonOptionalArgAndTwoOptionalArgsCallback):
        (WebCore::TestObjInternal::methodWithOptionalStringCallback):
        (TestObjInternal):
        (WebCore::TestObjInternal::methodWithOptionalIsTreatAsUndefinedStringCallback):
        (WebCore::TestObjInternal::methodWithOptionalIsNullStringStringCallback):
        (WebCore::TestObjInternal::methodWithNonCallbackArgAndCallbackArgCallback):
        (WebCore::TestObjInternal::overloadedMethod1Callback):
        (WebCore::TestObjInternal::overloadedMethod2Callback):
        (WebCore::TestObjInternal::overloadedMethod3Callback):
        (WebCore::TestObjInternal::overloadedMethod4Callback):
        (WebCore::TestObjInternal::overloadedMethod6Callback):
        (WebCore::TestObjInternal::overloadedMethod7Callback):
        (WebCore::TestObjInternal::classMethodWithOptionalCallback):
        (WebCore::TestObjInternal::overloadedMethod11Callback):
        (WebCore::TestObjInternal::overloadedMethod12Callback):
        (WebCore::TestObjInternal::enabledAtRuntimeMethod1Callback):
        (WebCore::TestObjInternal::enabledAtRuntimeMethod2Callback):
        (WebCore::TestObjInternal::convert1Callback):
        (WebCore::TestObjInternal::convert2Callback):
        (WebCore::TestObjInternal::convert3Callback):
        (WebCore::TestObjInternal::convert4Callback):
        (WebCore::TestObjInternal::convert5Callback):
        (WebCore::TestObjInternal::strictFunctionCallback):
        (WebCore):
        * bindings/scripts/test/V8/V8TestSerializedScriptValueInterface.cpp: Ditto.
        (WebCore::V8TestSerializedScriptValueInterface::constructorCallback):

2012-02-08  Kentaro Hara  <haraken@chromium.org>

        Rename [HasNumericIndexGetter] to [NumericIndexedGetter]
        https://bugs.webkit.org/show_bug.cgi?id=78096

        Reviewed by Adam Barth.

        This patch renames [HasNumericIndexGetter] to [NumericIndexedGetter],
        for naming consistency with [IndexedGetter] and [CustomIndexedGetter].

        No tests. No change in behavior.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateGetOwnPropertySlotBody):
        (GenerateGetOwnPropertyDescriptorBody):
        (GenerateHeader):
        (GenerateImplementation):
        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateHeaderNamedAndIndexedPropertyAccessors):
        (GenerateImplementationIndexer):

        * bindings/scripts/test/TestTypedArray.idl: No change in run-bindings-tests results.

        * html/canvas/CanvasPixelArray.idl:
        * html/canvas/Float32Array.idl:
        * html/canvas/Float64Array.idl:
        * html/canvas/Int16Array.idl:
        * html/canvas/Int32Array.idl:
        * html/canvas/Int8Array.idl:
        * html/canvas/Uint16Array.idl:
        * html/canvas/Uint32Array.idl:
        * html/canvas/Uint8Array.idl:
        * html/canvas/Uint8ClampedArray.idl:

2012-02-08  Tony Chang  <tony@chromium.org>

        refactor RenderFlexibleBox to return preferred sizes of all children
        https://bugs.webkit.org/show_bug.cgi?id=78169

        Reviewed by Ojan Vafai.

        This is in preparation for multi-line flexbox. We need the preferred
        size of each child so we can compute where the multi-line breaks happen.

        No new tests, just refactoring.

        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::preferredMainAxisContentExtentForChild): Renamed from preferredMainAxisContentExtentForFlexItem because
        other methods are ForChild rather than ForFlexItem.
        (WebCore::RenderFlexibleBox::layoutFlexItems):
        (WebCore::RenderFlexibleBox::computeMainAxisPreferredSizes):
        (WebCore::RenderFlexibleBox::runFreeSpaceAllocationAlgorithm):
        * rendering/RenderFlexibleBox.h:
        (RenderFlexibleBox):

2012-02-08  Shinya Kawanaka  <shinyak@google.com>

        Stop calling Element::ensureShadowRoot() if it is used in construction phase.
        https://bugs.webkit.org/show_bug.cgi?id=77929

        Reviewed by Hajime Morita.

        ShadowRoot's life cycle can be consufing If Element::ensureShadowRoot() is used.
        So we want to remove Element::ensureShadowRoot().
        This patch replaces Element::ensureShadowRoot() if it is used in object construction phase.

        No new tests, no change in behavior.

        * dom/ShadowRoot.cpp:
        (WebCore::ShadowRoot::create):
          Initialize exception code before calling appendChild.
        * html/HTMLDetailsElement.cpp:
        (WebCore::HTMLDetailsElement::createShadowSubtree):
        * html/HTMLKeygenElement.cpp:
        (WebCore::HTMLKeygenElement::HTMLKeygenElement):
        * html/HTMLMeterElement.cpp:
        (WebCore::HTMLMeterElement::createShadowSubtree):
        * html/HTMLProgressElement.cpp:
        (WebCore::HTMLProgressElement::createShadowSubtree):
        * html/HTMLSummaryElement.cpp:
        (WebCore::HTMLSummaryElement::createShadowSubtree):
        * html/HTMLTextAreaElement.cpp:
        (WebCore::HTMLTextAreaElement::createShadowSubtree):

2012-02-08  David Reveman  <reveman@chromium.org>

        [Chromium] Avoid unnecessary full tile updates without breaking atomicity of commits.
        https://bugs.webkit.org/show_bug.cgi?id=76740

        Reviewed by James Robinson.

        Allow the final batch of texture uploads to be performed without
        allocating new textures and re-painting complete tiles.

        This patch is tested by the following unit test:
        - CCLayerTreeHostTestAtomicCommitWithPartialUpdate.runMultiThread
        - TiledLayerChromiumTest.partialUpdates

        * platform/graphics/chromium/TiledLayerChromium.cpp:
        (WebCore::UpdatableTile::UpdatableTile):
        (UpdatableTile):
        (WebCore::TiledLayerChromium::updateCompositorResources):
        (WebCore):
        (WebCore::TiledLayerChromium::tileOnlyNeedsPartialUpdate):
        (WebCore::TiledLayerChromium::tileNeedsBufferedUpdate):
        (WebCore::TiledLayerChromium::prepareToUpdateTiles):
        * platform/graphics/chromium/TiledLayerChromium.h:
        (TiledLayerChromium):
        * platform/graphics/chromium/cc/CCLayerTreeHost.cpp:
        (WebCore::CCLayerTreeHost::CCLayerTreeHost):
        (WebCore::CCLayerTreeHost::initializeLayerRenderer):
        (WebCore::CCLayerTreeHost::updateLayers):
        (WebCore::CCLayerTreeHost::requestPartialTextureUpdate):
        (WebCore):
        * platform/graphics/chromium/cc/CCLayerTreeHost.h:
        (WebCore::CCSettings::CCSettings):
        (CCSettings):
        (CCLayerTreeHost):
        * platform/graphics/chromium/cc/CCProxy.h:
        (CCProxy):
        * platform/graphics/chromium/cc/CCSingleThreadProxy.cpp:
        (WebCore::CCSingleThreadProxy::doCommit):
        * platform/graphics/chromium/cc/CCSingleThreadProxy.h:
        (WebCore::CCSingleThreadProxy::maxPartialTextureUpdates):
        * platform/graphics/chromium/cc/CCTextureUpdater.cpp:
        (WebCore::CCTextureUpdater::append):
        (WebCore):
        (WebCore::CCTextureUpdater::appendPartial):
        (WebCore::CCTextureUpdater::hasMoreUpdates):
        (WebCore::CCTextureUpdater::update):
        (WebCore::CCTextureUpdater::clear):
        * platform/graphics/chromium/cc/CCTextureUpdater.h:
        (CCTextureUpdater):
        * platform/graphics/chromium/cc/CCThreadProxy.cpp:
        (WTF):
        (WebCore::CCThreadProxy::scheduledActionUpdateMoreResources):
        (WebCore::CCThreadProxy::maxPartialTextureUpdates):
        * platform/graphics/chromium/cc/CCThreadProxy.h:
        (CCThreadProxy):

2012-02-07  MORITA Hajime  <morrita@google.com>

        Replacement text should be available from the marker.
        https://bugs.webkit.org/show_bug.cgi?id=77934

        Reviewed by Kent Tamura.

        On spellchecking, TextCheckingResult can contain a replacement text
        which is usable both for an automatic replacement and for showing a suggestion.

        But when marking a misspelled word ragarding to returned
        TextCheckingResult, Editor uses only the misspelled range data and
        discards the replacement value. Then it asks the same value again
        when showing suggestion/autocorrection.

        It would be great if the marker holds the replacement text
        and Editor can use it on suggesting a correction, without any re-request.
        This is especially true in the case when it needs IPC messaging for spellchecking:
        We can save one round-trip by this technique.

        Here is actual change:

        - Passed the replacement text to addMarker() for for misspelling markers.
          Note that this is done only for the unified checker path because legacy
          TextCheckerClient API doesn't provide such a replacement.
        - Added an Internals API to retrieve a description text on a marker.

        Test: editing/spelling/spelling-marker-description.html

        * WebCore.exp.in:
        * editing/Editor.cpp:
        (WebCore::Editor::markAndReplaceFor):
        * testing/Internals.cpp:
        (WebCore::Internals::markerAt):
        (WebCore):
        (WebCore::Internals::markerRangeForNode):
        (WebCore::Internals::markerDescriptionForNode):
        * testing/Internals.h:
        (WebCore):
        (Internals):
        * testing/Internals.idl:

2012-02-08  Eric Seidel  <eric@webkit.org>

        Remove more cruft now that HTMLIsIndexElement is gone
        https://bugs.webkit.org/show_bug.cgi?id=77887

        Reviewed by Darin Adler.

        Just removing dead code, thus no tests.
        There is likely more to remove after this.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * html/HTMLInputElement.cpp:
        * html/HTMLInputElement.h:
        (HTMLInputElement):
        * html/InputType.cpp:
        (WebCore::createInputTypeFactoryMap):
        * html/InputType.h:
        (InputTypeNames):
        * html/IsIndexInputType.cpp: Removed.
        * html/IsIndexInputType.h: Removed.
        * rendering/HitTestResult.cpp:
        (WebCore::HitTestResult::isContentEditable):

2012-02-08  Andreas Kling  <awesomekling@apple.com>

        Increased style sharing for elements with presentation attributes.
        <http://webkit.org/b/78199>

        Reviewed by Antti Koivisto.

        When determining whether two elements can share style, we can do a lot better.
        Instead of comparing the attribute maps for exact equality, do a property-by-property
        comparison of the attributeStyle() and the additionalAttributeStyle() (if any.)

        This increases our style sharing hit rate and shaves 100ms off of each cycle on
        Chromium's "Moz" page cycler test on my machine.

        The function that compares attribute styles has O(n^2) runtime in the worst case,
        where n is the number of properties in the styles. However, given the low number of
        properties found in attribute styles, this should be fine, and it doesn't seem to
        heat up in profiles.

        * css/CSSStyleSelector.cpp:
        (WebCore::attributeStylesEqual):
        (WebCore::CSSStyleSelector::canShareStyleWithElement):

2012-02-08  Raymond Liu  <raymond.liu@intel.com>

        Fix the caculation of preDelayFrames in DynamicsCompressorKernel
        https://bugs.webkit.org/show_bug.cgi?id=78057

        Reviewed by Chris Rogers.

        No new tests required.

        * platform/audio/DynamicsCompressorKernel.cpp:
        (WebCore::DynamicsCompressorKernel::setPreDelayTime):

2012-02-08  Adam Klein  <adamk@chromium.org>

        DOM mutations should not be delivered on worker threads
        https://bugs.webkit.org/show_bug.cgi?id=77898

        Reviewed by Dmitry Titov.

        In V8RecursionScope, only call WebKitMutationObserver::deliverAllMutations
        if in a Document context.

        This is accomplished through a change to V8Proxy::instrumentedCallFunction
        (which now takes a Frame* instead of a Page*), requiring an update to all
        callers of that function (accounting for the majority of files changed
        in this patch).

        Added ASSERT(isMainThread()) in a deliverAllMutations to confirm that
        it's no longer called on worker threads, and in enqueueMutationRecord,
        where the same global store of active observers is accessed.

        See also http://crbug.com/112586, where the problem was initially
        reported.

        * bindings/v8/ScriptFunctionCall.cpp:
        (WebCore::ScriptCallback::call):
        * bindings/v8/V8NodeFilterCondition.cpp:
        (WebCore::V8NodeFilterCondition::acceptNode):
        * bindings/v8/V8Proxy.cpp:
        (WebCore::V8Proxy::runScript):
        (WebCore::V8Proxy::callFunction):
        (WebCore::V8Proxy::instrumentedCallFunction):
        * bindings/v8/V8Proxy.h:
        (WebCore):
        (V8Proxy):
        * bindings/v8/V8RecursionScope.cpp:
        (WebCore::V8RecursionScope::didLeaveScriptContext):
        * bindings/v8/V8RecursionScope.h:
        (WebCore):
        (WebCore::V8RecursionScope::V8RecursionScope):
        (V8RecursionScope):
        (WebCore::V8RecursionScope::~V8RecursionScope):
        * bindings/v8/V8WindowErrorHandler.cpp:
        (WebCore::V8WindowErrorHandler::callListenerFunction):
        * bindings/v8/custom/V8CustomVoidCallback.cpp:
        (WebCore::invokeCallback):
        * bindings/v8/custom/V8CustomXPathNSResolver.cpp:
        (WebCore::V8CustomXPathNSResolver::lookupNamespaceURI):
        * dom/WebKitMutationObserver.cpp:
        (WebCore::WebKitMutationObserver::enqueueMutationRecord):
        (WebCore::WebKitMutationObserver::deliverAllMutations):

2012-02-08  Anders Carlsson  <andersca@apple.com>

        Don't use the wheel event handler count to track if a page has horizontal scrollbars
        https://bugs.webkit.org/show_bug.cgi?id=78192

        Reviewed by Andreas Kling.

        Stop calling Document::didAddWheelEventHandler and Document::didRemoveWheelEventHandler when
        adding and removing scrollbars.

        * page/FrameView.cpp:
        * page/FrameView.h:
        (FrameView):
        * rendering/RenderLayer.cpp:
        * rendering/RenderLayer.h:

2012-02-08  Igor Oliveira  <igor.o@sisa.samsung.com>

        Implement reverse animation direction

        Implement reverse animation direction
        https://bugs.webkit.org/show_bug.cgi?id=60525

        Implement reverse and alternate-reverse direction.

        Reviewed by Dean Jackson.

        Tests: animations/animation-direction-alternate-reverse.html
               animations/animation-direction-reverse.html
               animations/fill-mode-reverse.html

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseAnimationDirection):
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::mapAnimationDirection):
        * css/CSSValueKeywords.in:
        * page/WebKitAnimation.cpp:
        (WebCore::WebKitAnimation::direction):
        * page/WebKitAnimation.h:
        * page/animation/AnimationBase.cpp:
        (WebCore::AnimationBase::fractionalTime):
        * platform/animation/Animation.h:
        (Animation):
        * platform/graphics/texmap/TextureMapperAnimation.cpp:
        (WebCore):
        (WebCore::shouldReverseAnimationValue):
        (WebCore::normalizedAnimationValue):

2012-02-08  James Robinson  <jamesr@chromium.org>

        [chromium] Avoid creating a temporary GraphicsContext3D if someone requests the WebView's GraphicsContext3D before initialization is complete
        https://bugs.webkit.org/show_bug.cgi?id=78154

        Reviewed by Kenneth Russell.

        * platform/graphics/chromium/cc/CCSingleThreadProxy.cpp:
        (WebCore::CCSingleThreadProxy::context):

2012-02-08  David Hyatt  <hyatt@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=78157
        
        Make multi-column layout work with line grids that are outside of the multi-column
        block.

        Reviewed by Dan Bernstein.

        Added new tests in fast/line-grid.

        * rendering/LayoutState.cpp:
        (WebCore::LayoutState::LayoutState):
        (WebCore::LayoutState::propagateLineGridInfo):
        (WebCore::LayoutState::establishLineGrid):
        (WebCore):
        (WebCore::LayoutState::computeLineGridPaginationOrigin):
        * rendering/LayoutState.h:
        (WebCore::LayoutState::LayoutState):
        (WebCore::LayoutState::lineGrid):
        (WebCore::LayoutState::lineGridOffset):
        (WebCore::LayoutState::lineGridPaginationOrigin):
        (WebCore::LayoutState::needsBlockDirectionLocationSetBeforeLayout):
        (LayoutState):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::layoutBlockChildren):
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::layoutInlineChildren):
        * rendering/RenderView.h:
        (WebCore::RenderView::pushLayoutState):
        * rendering/RootInlineBox.cpp:
        (WebCore::RootInlineBox::lineGridSnapAdjustment):

2012-02-08  Matthew Delaney  <mdelaney@apple.com>

        GeneratorGeneratedImage::drawPattern does not factor in its destination context's scale when generating its image tiles

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

        Reviewed by Beth Dakin.

        No new tests, current pixel tests will cover this. Though some pixel results might improve to become less pixel-y.

        * platform/graphics/GeneratorGeneratedImage.cpp:
        (WebCore::GeneratorGeneratedImage::draw): Updated context to destContext for consistency.
        (WebCore::GeneratorGeneratedImage::drawPattern): Taught drawPattern about the destination
        scale factor to avoid having low-res generated images such as gradients in certain cases.
        * platform/graphics/GraphicsContext.cpp:
        (WebCore::GraphicsContext::createCompatibleBuffer): Have the image buffer match the
        context acceleration setting as well.

2012-02-08  Adam Klein  <adamk@chromium.org>

        Simplify and correct mutation delivery timing for JSC
        https://bugs.webkit.org/show_bug.cgi?id=78172

        Reviewed by Adam Barth.

        Instead of keeping a static recursion counter in JSMainThreadExecState,
        simply wait for a state change from non-null ExecState to null ExecState.
        Because s_mainThreadState is initially null, this equivalent to
        waiting for s_recursionLevel to rewind to zero.

        This also properly handles the usage of JSMainThreadNullState (and
        does not do mutation delivery), since that class is only used by
        non-JS bindings. Now fast/mutation/end-of-task-delivery.html properly
        fails, whereas it was passing before due to usage of the ObjC DOM API
        from DumpRenderTree.

        * bindings/js/JSMainThreadExecState.cpp:
        (WebCore):
        * bindings/js/JSMainThreadExecState.h: Added a comment explaining the purpose of JSMainThreadNullState.
        (WebCore::JSMainThreadExecState::JSMainThreadExecState):
        (WebCore::JSMainThreadExecState::~JSMainThreadExecState):
        (JSMainThreadExecState):
        (WebCore):

2012-02-08  Kentaro Hara  <haraken@chromium.org>

        Remove [ConvertToString] from CodeGeneratorCPP.pm and rename
        it to [ObjCImplementedAsUnsignedLong]
        https://bugs.webkit.org/show_bug.cgi?id=78100

        Reviewed by Eric Seidel.

        Now [ConvertToString] is used by ObjC's HTMLElement.size only.
        This patch removes [ConvertToString] code from CodeGeneratorCPP.pm,
        and renames [ConvertToString] to [ObjCImplementedAsUnsignedLong].

        No tests. No change in behavior.

        * bindings/scripts/CodeGeneratorCPP.pm:
        (GenerateImplementation):
        * bindings/scripts/CodeGeneratorObjC.pm:
        (GenerateImplementation):
        * html/HTMLInputElement.idl: Removed FIXME comment, because the latest spec
        says HTMLInputElement.size should be unsigned long.
        (http://www.whatwg.org/specs/web-apps/current-work/multipage/the-input-element.html#the-input-element)

2012-02-08  Leo Yang  <leo.yang@torchmobile.com.cn>

        REGRESSION(r84194): Build fails when turning on ENABLE_FILE_SYSTEM
        https://bugs.webkit.org/show_bug.cgi?id=78088

        Reviewed by Antonio Gomes.

        WebCore::getDOMObjectWrapper was changed to WebCore::wrap in r84194.
        Adapt to this change in JSEntryCustom.cpp and JSEntrySyncCustom.cpp.

        Build fix, no new tests.

        * bindings/js/JSEntryCustom.cpp:
        (WebCore::toJS):
        * bindings/js/JSEntrySyncCustom.cpp:
        (WebCore::toJS):

2012-02-08  Dana Jansens  <danakj@chromium.org>

        [Chromium] Fix opaque tracking for box shadows and non-composited child elements
        https://bugs.webkit.org/show_bug.cgi?id=78073

        Reviewed by Stephen White.

        Tests: compositing/culling/scrolled-within-boxshadow.html
               compositing/culling/translated-boxshadow.html

        Unit tests: PlatformContextSkiaTest.cpp

        When painting a box shadow, a filter is applied to the skia canvas, that can make
        pixels painted with an opaque color end up non-opaque. So consider image/mask/color
        filters when deciding if a paint is opaque.

        Also when painting the background of an element with a box shadow, the background is
        painted with a transform on the skia canvas based on the size of the box shadow. This
        transform needs to be considered when tracking an opaque paint.

        However, when a layer's contentRect position is non-zero, we translate the GraphicsContext
        to put the contentRect at 0,0 in the skia canvas. For tracking opaque regions in the resulting
        layer, we need to unto this translation. Scaling can also occur which we must undo. So we pass
        the transform in to PlatformContextSkia to go from the SkCanvas back to the layer's content
        coordinate space. Opaque paints can then be tracked in the layer's content space rather than
        in the skia canvas space.

        * platform/graphics/chromium/BitmapCanvasLayerTextureUpdater.cpp:
        (WebCore::BitmapCanvasLayerTextureUpdater::prepareToUpdate):
        * platform/graphics/chromium/CanvasLayerTextureUpdater.cpp:
        (WebCore::CanvasLayerTextureUpdater::paintContents):
        * platform/graphics/chromium/CanvasLayerTextureUpdater.h:
        (WebCore):
        (CanvasLayerTextureUpdater):
        * platform/graphics/chromium/SkPictureCanvasLayerTextureUpdater.cpp:
        (WebCore::SkPictureCanvasLayerTextureUpdater::prepareToUpdate):
        * platform/graphics/skia/OpaqueRegionSkia.cpp:
        (WebCore::paintIsOpaque):
        (WebCore::OpaqueRegionSkia::didDrawRect):
        (WebCore::OpaqueRegionSkia::didDrawPath):
        (WebCore::OpaqueRegionSkia::didDrawPoints):
        (WebCore::OpaqueRegionSkia::didDrawBounded):
        (WebCore::OpaqueRegionSkia::didDraw):
        (WebCore::OpaqueRegionSkia::markRectAsOpaque):
        (WebCore::OpaqueRegionSkia::markRectAsNonOpaque):
        * platform/graphics/skia/OpaqueRegionSkia.h:
        (WebCore):
        (OpaqueRegionSkia):
        * platform/graphics/skia/PlatformContextSkia.cpp:
        (WebCore::PlatformContextSkia::didDrawRect):
        (WebCore::PlatformContextSkia::didDrawPath):
        (WebCore::PlatformContextSkia::didDrawPoints):
        (WebCore::PlatformContextSkia::didDrawBounded):
        * platform/graphics/skia/PlatformContextSkia.h:
        (PlatformContextSkia):
        (WebCore::PlatformContextSkia::setOpaqueRegionTransform):

2012-02-08  Kentaro Hara  <haraken@chromium.org>

        Remove [CustomHeader] from CanvasPixelArray and rename [CustomHeader] to [JSCustomHeader]
        https://bugs.webkit.org/show_bug.cgi?id=78089

        Reviewed by Adam Barth.

        This patch removes [CustomHeader] from CanvasPixelArray.idl, since CanvasPixelArrayCustom.h
        does not exist. (The reason why missing CanvasPixelArrayCustom.h has not caused build failure
        is that [CustomHeader] has been JSC-specific and JSC has not enabled CanvasPixelArray.)
        Also, this patch renames [CustomHeader] to [JSCustomHeader], since whether a given class
        should have custom header or not will depend on JavaScript bindings.

        No tests. No change in behavior.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateHeader):
        * dom/Node.idl:
        * html/canvas/CanvasPixelArray.idl:

2012-02-08  Zalan Bujtas  <zbujtas@gmail.com>

        Dispatch updateViewportArguments(), when Document is finished
        restoring from page cache.

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

        Reviewed by Kenneth Rohde Christiansen.

        Move updateViewportArguments() call from setPageInCache() to
        documentDidResumeFromPageCache() to ensure, that the Document is
        fully resumed from the page cache and attached to the mainframe,
        when the viewport arguments are updated.

        No tests. No change in behaviour.

        * dom/Document.cpp:
        (WebCore::Document::setInPageCache):
        (WebCore::Document::documentDidResumeFromPageCache):

2012-02-08  Shawn Singh  <shawnsingh@chromium.org>

        [chromium] Remove incorrect early exit in CCDamageTracker
        https://bugs.webkit.org/show_bug.cgi?id=76924

        Reviewed by James Robinson.

        New unit test added to CCDamageTrackerTest.cpp

        This patch does three things: (1) adds unit test that demonstrates
        that early exiting in CCDamageTracker is wrong, (2) removes the
        early exit and cleans up the surrounding code, and (3) re-names
        several functions in CCDamageTracker so that state updating is
        implied by the name, and not just a bad side-effect of the functions.

        * platform/graphics/chromium/cc/CCDamageTracker.cpp:
        (WebCore::CCDamageTracker::updateDamageTrackingState):
        (WebCore::CCDamageTracker::trackDamageFromActiveLayers):
        (WebCore::CCDamageTracker::trackDamageFromSurfaceMask):
        (WebCore::CCDamageTracker::trackDamageFromLeftoverRects):
        * platform/graphics/chromium/cc/CCDamageTracker.h:
        (CCDamageTracker):
        * platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:
        (WebCore::CCLayerTreeHostImpl::trackDamageForAllSurfaces):

2012-02-08  James Robinson  <jamesr@chromium.org>

        [chromium] Check that we can make the SharedGraphicsContext3D current before returning
        https://bugs.webkit.org/show_bug.cgi?id=78142

        Reviewed by Stephen White.

        If we can't make the context current, we can't use it.

        * platform/graphics/gpu/SharedGraphicsContext3D.cpp:
        (WebCore::SharedGraphicsContext3D::get):

2012-02-08  Abhishek Arya  <inferno@chromium.org>

        Crash in Node::normalize.
        https://bugs.webkit.org/show_bug.cgi?id=78135

        Reviewed by Ryosuke Niwa.

        No new tests. Original testcase does not reduce to manageable
        extent.

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

2012-02-08  Antoine Labour  <piman@chromium.org>

        Make WebGL context current early to check validity
        https://bugs.webkit.org/show_bug.cgi?id=78141

        Reviewed by James Robinson.

        Covered by existing tests

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

2012-02-08  Jonathan Backer  <backer@chromium.org>

        [chromium] Disable root layer clears on release builds.
        https://bugs.webkit.org/show_bug.cgi?id=77478

        Reviewed by James Robinson.

        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::clearRenderSurface):
        (WebCore::LayerRendererChromium::drawRenderPass):
        * platform/graphics/chromium/LayerRendererChromium.h:
        (LayerRendererChromium):

2012-02-08  Anders Carlsson  <andersca@apple.com>

        Add a content shadow layer to the render layer compositor
        https://bugs.webkit.org/show_bug.cgi?id=78133
        <rdar://problem/10797742>

        Reviewed by Beth Dakin.

        Have the render layer compositor optionally create a content shadow layer,
        and add a ScrollbarTheme::setUpContentShadowLayer member function that subclasses
        can use to set content shadow properties.

        * platform/mac/ScrollbarThemeMac.mm:
        (WebCore::ScrollbarThemeMac::setUpContentShadowLayer):
        Set the layer properties once, and set the shadow path on every call, since we know that this
        function will be called every time the size of the content shadow layer changes.

        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::updateRootLayerPosition):
        Reposition the content shadow layer, and call ScrollbarTheme::setUpContentShadowLayer if the size changes.

        (WebCore::RenderLayerCompositor::requiresContentShadowLayer):
        Add new helper function.

        (WebCore::RenderLayerCompositor::updateOverflowControlsLayers):
        Create a content shadow layer if needed.

2012-02-07  Andy Estes  <aestes@apple.com>

        REGRESSION (r102983): ClicktoFlash drawing of old style youtube embeds missing until resize
        https://bugs.webkit.org/show_bug.cgi?id=77167

        Reviewed by Eric Seidel.

        Test: plugins/layout-in-beforeload-listener-affects-plugin-loading.html

        r102983 made FrameView::updateWidgets() check if the DOM node actually
        needs a widget update before calling updateWidget(). Due to historical
        reasons, however, updateWidget() can be legitimately called twice: once
        at attach time for non-Netscape plug-ins and once at layout time for
        Netscape plug-ins.

        If the widget represents a Netscape plug-in, but updateWidget() is
        called for the CreateOnlyNonNetscapePlugins case after the DOM node was
        marked as needing an update, updateWidget() will clear the update flag
        and prevent a second call to updateWidget() at layout time for the
        CreateAnyWidgetType case.

        As much as I loathe adding to the code duplication between
        HTMLEmbedElement::updateWidget() and HTMLObjectElement::updateWidget(),
        the simplest solution seems to be marking the DOM node as needing
        update in the case where we are calling updateWidget() for the
        CreateOnlyNonNetscapePlugins case and we know we will be loading a
        Netscape plug-in.

        * html/HTMLEmbedElement.cpp:
        (WebCore::HTMLEmbedElement::updateWidget): Call
        setNeedsWidgetUpdate(true) if pluginCreationOption is
        CreateOnlyNonNetscapePlugins but we will load a Netscape plug-in.
        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::updateWidget): Ditto.
        * html/HTMLPlugInElement.cpp:
        (WebCore::HTMLPlugInElement::guardedDispatchBeforeLoadEvent): Remove an
        invalid assertion that prevents the layout test from running in a Debug
        configuration.

2012-02-07  Ojan Vafai  <ojan@chromium.org>

        Floated flexboxes render as regular RenderBlocks
        https://bugs.webkit.org/show_bug.cgi?id=77909

        Reviewed by Eric Seidel.

        Add grid/flexbox cases to adjusting the display of floated/positioned
        elements. Also, move this logic into a switch statement. This makes
        the code more readable and gives compile warnings when new display types
        are added that aren't handled here.

        Test: css3/flexbox/floated-flexbox.html

        * css/CSSStyleSelector.cpp:
        (WebCore::adjustDisplay):
        (WebCore):
        (WebCore::CSSStyleSelector::adjustRenderStyle):

2012-02-08  Dirk Schulze  <krit@webkit.org>

        viewBox on nested SVG causes wrong content size for relative values
        https://bugs.webkit.org/show_bug.cgi?id=69459

        Reviewed by Nikolas.

        In the past we just checked the change of the viewport size of the root SVG element. If the size changed, all childs
        with relative length values needed a relayout. We did not consider that we might have other viewports in the document.
        Childs with relative lengths had a strange zooming, if just the viewport size of an inner SVG element changed.

        With this patch we check if the size of the nearest viewport changes. Is this the case, childs with relative lengths
        need a relayout.

        Test: inner-svg-change-viewBox.svg

        * rendering/svg/RenderSVGContainer.cpp:
        (WebCore::RenderSVGContainer::layout):
        * rendering/svg/RenderSVGContainer.h:
        (RenderSVGContainer):
        (WebCore::RenderSVGContainer::determineIfLayoutSizeChanged): Check if we need layout and have relative length values.
        * rendering/svg/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::layout): Remove resetting 'viewport size changed' flag for code operability. No influence on the layout.
        * rendering/svg/RenderSVGViewportContainer.cpp:
        (WebCore::RenderSVGViewportContainer::RenderSVGViewportContainer): Add a flag that indicates that the viewport size changes.
        (WebCore::RenderSVGViewportContainer::determineIfLayoutSizeChanged): The flag gets set during the layout phase of the SVG element if the size changes.
        (WebCore):
        * rendering/svg/RenderSVGViewportContainer.h:
        (WebCore::RenderSVGViewportContainer::isLayoutSizeChanged): Added getter to get flag status.
        (RenderSVGViewportContainer):
        (WebCore::toRenderSVGViewportContainer): Added casting function for constant RenderObjects.
        (WebCore):
        * rendering/svg/SVGRenderSupport.cpp:
        (WebCore::layoutSizeOfNearestViewportChanged): Search the nearest viewport and check if the size changed.
        (WebCore):
        (WebCore::SVGRenderSupport::layoutChildren): Don't check the roots viewport for size changes, but the nearest viewport.
        * svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::svgAttributeChanged): Added viewBoxAttr to the list of attributes that cause relayout.

2012-02-08  Gregg Tavares  <gman@google.com>

        Implement new WEBGL compressed texture extensions
        https://bugs.webkit.org/show_bug.cgi?id=77066

        This removes the old experimental compressed
        texture extension and implements the first new
        one.

        A test is in the WebGL conformance tests in
        extensions/webgl-compressed-texture-s3tc.html
        and will be copied here in a future patch.

        Reviewed by Kenneth Russell.

        No new tests. Test coming in future patch.

        * CMakeLists.txt:
        * DerivedSources.make:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSWebGLRenderingContextCustom.cpp:
        (WebCore::toJS):
        * bindings/v8/custom/V8WebGLRenderingContextCustom.cpp:
        (WebCore::toV8Object):
        * html/canvas/WebGLCompressedTextureS3TC.cpp: Added.
        (WebCore):
        (WebCore::WebGLCompressedTextureS3TC::WebGLCompressedTextureS3TC):
        (WebCore::WebGLCompressedTextureS3TC::~WebGLCompressedTextureS3TC):
        (WebCore::WebGLCompressedTextureS3TC::getName):
        (WebCore::WebGLCompressedTextureS3TC::create):
        (WebCore::WebGLCompressedTextureS3TC::supported):
        * html/canvas/WebGLCompressedTextureS3TC.h: Copied from Source/WebCore/html/canvas/WebGLExtension.h.
        (WebCore):
        (WebGLCompressedTextureS3TC):
        * html/canvas/WebGLCompressedTextureS3TC.idl: Renamed from Source/WebCore/html/canvas/WebGLCompressedTextures.idl.
        * html/canvas/WebGLCompressedTextures.cpp: Removed.
        * html/canvas/WebGLCompressedTextures.h: Removed.
        * html/canvas/WebGLExtension.h:
        * html/canvas/WebGLGetInfo.cpp:
        (WebCore::WebGLGetInfo::WebGLGetInfo):
        (WebCore):
        (WebCore::WebGLGetInfo::getWebGLUnsignedIntArray):
        * html/canvas/WebGLGetInfo.h:
        * html/canvas/WebGLObject.cpp:
        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore):
        (WebCore::WebGLRenderingContext::addCompressedTextureFormat):
        (WebCore::WebGLRenderingContext::compressedTexImage2D):
        (WebCore::WebGLRenderingContext::compressedTexSubImage2D):
        (WebCore::WebGLRenderingContext::getExtension):
        (WebCore::WebGLRenderingContext::getParameter):
        (WebCore::WebGLRenderingContext::getSupportedExtensions):
        (WebCore::WebGLRenderingContext::validateCompressedTexFormat):
        (WebCore::WebGLRenderingContext::validateCompressedTexFuncData):
        (WebCore::WebGLRenderingContext::validateCompressedTexDimensions):
        (WebCore::WebGLRenderingContext::validateCompressedTexSubDimensions):
        * html/canvas/WebGLRenderingContext.h:
        (WebCore):
        (WebGLRenderingContext):
        * html/canvas/WebGLRenderingContext.idl:

2012-02-08  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: heap snapshot: implement Distance column in Object's retaining tree.
        https://bugs.webkit.org/show_bug.cgi?id=78113

        Retaining path list was replaced with Retaining tree some time ago.
        But it was not so useful when we want to track the retaining path from an object to a DOM Window node.

        Drive by fix: sort doesn't work in retaining tree panel.
        Drive by fix: save/load child nodes doesn't work for the retaining tree panel.

        Reviewed by Yury Semikhatsky.

        * inspector/front-end/DetailedHeapshotGridNodes.js:
        (WebInspector.HeapSnapshotObjectNode):
        (WebInspector.HeapSnapshotObjectNode.prototype._childHashForEntity): save/load children fix
        (WebInspector.HeapSnapshotObjectNode.prototype._childHashForNode): save/load children fix
        (WebInspector.HeapSnapshotObjectNode.prototype.comparator):
        (WebInspector.HeapSnapshotObjectNode.prototype._enhanceData):
        * inspector/front-end/DetailedHeapshotView.js:
        (WebInspector.HeapSnapshotContainmentDataGrid):
        (WebInspector.HeapSnapshotRetainmentDataGrid):
        (WebInspector.HeapSnapshotRetainmentDataGrid.prototype._sortFields):
        * inspector/front-end/HeapSnapshot.js:
        (WebInspector.HeapSnapshotRetainerEdge.prototype.set retainerIndex):
        (WebInspector.HeapSnapshotRetainerEdge.prototype.set edgeIndex):
        (WebInspector.HeapSnapshotRetainerEdge.prototype.get _node):
        (WebInspector.HeapSnapshotRetainerEdge.prototype.get _edge):
        (WebInspector.HeapSnapshotNode.prototype.get distanceToWindow):
        (WebInspector.HeapSnapshot.prototype._init):
        (WebInspector.HeapSnapshot.prototype._buildRetainers):
        (WebInspector.HeapSnapshot.prototype._calculateObjectToWindowDistance):
        (WebInspector.HeapSnapshot.prototype._bfs):
        (WebInspector.HeapSnapshotEdgesProvider.prototype._serialize):
        (WebInspector.HeapSnapshotEdgesProvider.prototype.sort.compareEdgeFieldName):
        (WebInspector.HeapSnapshotEdgesProvider.prototype.sort.compareNodeField):
        (WebInspector.HeapSnapshotEdgesProvider.prototype.sort.compareEdgeAndNode):
        (WebInspector.HeapSnapshotEdgesProvider.prototype.sort.compareNodeAndEdge):
        (WebInspector.HeapSnapshotEdgesProvider.prototype.sort.compareNodeAndNode):
        (WebInspector.HeapSnapshotEdgesProvider.prototype.sort):
        (WebInspector.HeapSnapshotNodesProvider.prototype._serialize):
        * inspector/front-end/heapProfiler.css:
        (.detailed-heapshot-view .data-grid td.distanceToWindow-column):

2012-02-08  Anders Carlsson  <andersca@apple.com>

        Fix assertion in svg/dom/SVGStyledElement-pendingResource-crash.html
        https://bugs.webkit.org/show_bug.cgi?id=78126

        Reviewed by Dan Bernstein.

        This broke in r106977 when I tried to change an early return into an ASSERT,
        so let's bring back the early return.

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

2012-02-08  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r106920, r106924, r106933, r106939,
        and r107090.
        http://trac.webkit.org/changeset/106920
        http://trac.webkit.org/changeset/106924
        http://trac.webkit.org/changeset/106933
        http://trac.webkit.org/changeset/106939
        http://trac.webkit.org/changeset/107090
        https://bugs.webkit.org/show_bug.cgi?id=78124

        Something is completely wrong this change (Requested by
        Ossy_gardener on #webkit).

        * platform/FileSystem.h:
        (WebCore):
        * platform/qt/FileSystemQt.cpp:

2012-02-08  David Hyatt  <hyatt@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=78122
        
        Add support for the "contains" value for line-grid-snap. This value centers the line box in between the
        text-top and text-bottom of the minimum number of grid lines that enclose the line box. This is useful for
        centering headers in a line grid.

        Reviewed by Adam Roben.

        Added a new test in fast/line-grid.

        * rendering/RootInlineBox.cpp:
        (WebCore::RootInlineBox::lineGridSnapAdjustment):

2012-02-08  Cary Clark  <caryclark@google.com>

        [Skia Mac] Make misspelling underline dots unclipped
        https://bugs.webkit.org/show_bug.cgi?id=78117
        http://code.google.com/p/chromium/issues/detail?id=113154

        Reviewed by Stephen White.

        No new tests. Existing layout tests cover this.

        As is done on the CoreGraphics Mac platform, adjust the
        underline width to remove partial dots, not including the
        trailing transparent pixel column.

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

2012-02-08  Pavel Feldman  <pfeldman@google.com>

        Web Inspector: bind entire subtree upon childNodeInserted so that text node were accounted.
        https://bugs.webkit.org/show_bug.cgi?id=78116

        Reviewed by Yury Semikhatsky.

        * inspector/front-end/DOMAgent.js:
        (WebInspector.DOMNode):
        (WebInspector.DOMDocument):
        (WebInspector.DOMAgent.prototype._setDocument):
        (WebInspector.DOMAgent.prototype._setDetachedRoot):
        (WebInspector.DOMAgent.prototype._setChildNodes):
        (WebInspector.DOMAgent.prototype._childNodeRemoved):
        (WebInspector.DOMAgent.prototype._unbind):

2012-02-08  Peter Rybin  <peter.rybin@gmail.com>

        Web Inspector: Optional out arguments are not supported in the Web Inspector protocol, which breaks the implementation
        https://bugs.webkit.org/show_bug.cgi?id=77967

        Reviewed by Yury Semikhatsky.

        Condition for RefPtr-based types added. This is more-or-less a hack
        and it's should be redone together with the switch to type-safe API.

        * inspector/CodeGeneratorInspector.py:
        (Generator.process_command):

2012-02-07  Yury Semikhatsky  <yurys@chromium.org>

        Web Inspector: inspected object wrapper should be released by InjectedScript when popover closes
        https://bugs.webkit.org/show_bug.cgi?id=77972

        When object popover is shown the object under cursor is resolved and its
        wrapper is put into 'popover' object wrapper group. The group is discarded
        when the popover closes.

        Reviewed by Pavel Feldman.

        * bindings/js/ScriptProfiler.cpp:
        (WebCore::ScriptProfiler::objectByHeapObjectId):
        * bindings/js/ScriptProfiler.h:
        (WebCore):
        (ScriptProfiler):
        * bindings/v8/ScriptProfiler.cpp:
        (WebCore::ScriptProfiler::objectByHeapObjectId):
        (WebCore):
        * bindings/v8/ScriptProfiler.h:
        (WebCore):
        (ScriptProfiler):
        * inspector/Inspector.json:
        * inspector/InspectorProfilerAgent.cpp:
        (WebCore::InspectorProfilerAgent::getObjectByHeapObjectId):
        * inspector/InspectorProfilerAgent.h:
        (InspectorProfilerAgent):
        * inspector/front-end/DetailedHeapshotGridNodes.js:
        (WebInspector.HeapSnapshotGenericObjectNode.prototype.queryObjectContent):
        * inspector/front-end/DetailedHeapshotView.js:
        (WebInspector.DetailedHeapshotView.prototype._resolveObjectForPopover):
        * inspector/front-end/JavaScriptSourceFrame.js:
        (WebInspector.JavaScriptSourceFrame):
        (WebInspector.JavaScriptSourceFrame.prototype._resolveObjectForPopover):
        (WebInspector.JavaScriptSourceFrame.prototype._onHidePopover):
        * inspector/front-end/ObjectPopoverHelper.js:
        (WebInspector.ObjectPopoverHelper):
        (WebInspector.ObjectPopoverHelper.prototype._showObjectPopover):
        (WebInspector.ObjectPopoverHelper.prototype._onHideObjectPopover):

2012-02-08  Mario Sanchez Prada  <msanchez@igalia.com>

        [Gtk] atk_text_get_text_at_offset() fails to provide the correct line for list items whose text wraps
        https://bugs.webkit.org/show_bug.cgi?id=73431

        Reviewed by Chris Fleizach.

        Don't replace item's markers with the objectReplacementCharacter
        character, as they will be treated in an special way later on.

        * accessibility/gtk/WebKitAccessibleInterfaceText.cpp:
        (textForRenderer): Don't append the objectReplacementCharacter
        character for list item's markers.

2012-02-08  Pavel Feldman  <pfeldman@google.com>

        Web Inspector: do not clear entire tree map upon last element deletion.
        https://bugs.webkit.org/show_bug.cgi?id=78112

        Reviewed by Yury Semikhatsky.

        * inspector/front-end/treeoutline.js:
        (TreeOutline.prototype._forgetChildrenRecursive):

2012-02-08  Kaustubh Atrawalkar  <kaustubh@motorola.com>

        Migrate createObjectURL & revokeObjectURL to static (Class) methods.
        https://bugs.webkit.org/show_bug.cgi?id=74386

        Reviewed by Kentaro Hara.

        Move createObjectURL & revokeObjectURL from DOMURL implementation to
        static methods as per specs - http://www.w3.org/TR/FileAPI/#creating-revoking

        Test: fast/dom/DOMURL/check-instanceof-domurl-functions.html
        Already Existing:
            fast/files/revoke-blob-url.html
            fast/dom/window-domurl-crash.html
            fast/files/apply-blob-url-to-img.html
            fast/files/create-blob-url-crash.html
            fast/files/workers/inline-worker-via-blob-url.html

        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/ScriptExecutionContext.cpp:
        (WebCore::ScriptExecutionContext::~ScriptExecutionContext):
        (WebCore::ScriptExecutionContext::fileThread):
        (WebCore):
        (WebCore::ScriptExecutionContext::publicURLManager):
        * dom/ScriptExecutionContext.h:
        (WebCore):
        (ScriptExecutionContext):
        * html/DOMURL.cpp:
        (WebCore):
        (WebCore::DOMURL::createObjectURL): Changed to static.
        (WebCore::DOMURL::revokeObjectURL): ditto.
        * html/DOMURL.h:
        (DOMURL):
        (WebCore::DOMURL::create):
        * html/DOMURL.idl:
        * html/PublicURLManager.h: Added.
        (WebCore):
        (PublicURLManager):
        (WebCore::PublicURLManager::create):
        (WebCore::PublicURLManager::contextDestroyed):
        (WebCore::PublicURLManager::blobURLs):
        (WebCore::PublicURLManager::streamURLs):
        * page/DOMWindow.cpp: Removed object initialization for DOMURL.
        (WebCore):
        * page/DOMWindow.h: ditto.
        (DOMWindow):
        * page/DOMWindow.idl:
        * workers/WorkerContext.cpp:
        (WebCore):
        * workers/WorkerContext.h:
        (WorkerContext):
        * workers/WorkerContext.idl:

2012-02-01  Brian Grinstead  <briangrinstead@gmail.com>

        Web Inspector: Add changes for Spectrum colorpicker
        https://bugs.webkit.org/show_bug.cgi?id=75454

        Reviewed by Pavel Feldman.

        * inspector/front-end/Color.js:
        (WebInspector.Color.fromRGB):
        * inspector/front-end/utilities.js:
        (Element.prototype.totalOffsetLeft):
        (Element.prototype.totalOffsetTop):
        (Element.prototype.totalOffset):
        (Element.prototype.scrollOffset):
        ():

2012-02-08  Alexander Pavlov  <apavlov@chromium.org>

        Web Inspector: Avoid an avalanche of "class" attribute modifications in WatchExpressionsSidebarPane
        https://bugs.webkit.org/show_bug.cgi?id=78102

        Reviewed by Vsevolod Vlasov.

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

2012-02-08  Antaryami Pandia  <antaryami.pandia@motorola.com>

        CSS2 overflow: scrollbar not visible on SELECT elements when overflow: scroll is set.
        https://bugs.webkit.org/show_bug.cgi?id=69993

        Reviewed by Simon Fraser.

        The issue was that for overflow:scroll, currently webkit always places the horizontal
        and vertical scrollbar. But Since the listbox renderer handles its scrolling,
        we should not set scrollbar for list-box.

        Tests: fast/css/getComputedStyle/computed-style-select-overflow.html
               fast/forms/select-overflow-scroll-inherited.html
               fast/forms/select-overflow-scroll.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::layoutBlock):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateScrollInfoAfterLayout):

2012-02-08  Nikolas Zimmermann  <nzimmermann@rim.com>

        feImage doesn't invalidate when its target SVG element is animated
        https://bugs.webkit.org/show_bug.cgi?id=73860

        Reviewed by Dirk Schulze.

        Consider following testcase:
        <defs>
            <rect id="rect" fill="red" width="50" height="50"/>
            <filter id="filter">
                <feImage xlink:href="#rect"/>
            </filter>
        </defs>
        <rect width="50" height="50" filter="url(#filter)"/>

        If the <rect id="rect"> gets changed dynamically (attribute/property/style change) the <feImage>
        doesn't notice this, as there's no link between the <rect> and the <feImage>, as the <rect> is not
        a child of the <feImage/>. To get invalidations working for these situations, we have to track
        the referencingElement & referencedElement in SVGDocumentExtensions.

        Fixes parts the SVG-Wow twirl testcase and David Daileys SVG waves example.

        Tests: svg/filters/feImage-animated-transform-on-target-rect.svg
               svg/filters/feImage-late-indirect-update.svg
               svg/filters/feImage-mutliple-targets-id-change.svg
               svg/filters/feImage-target-attribute-change-with-use-indirection-2.svg
               svg/filters/feImage-target-attribute-change-with-use-indirection.svg
               svg/filters/feImage-target-attribute-change.svg
               svg/filters/feImage-target-inline-style-change.svg
               svg/filters/feImage-target-property-change.svg
               svg/filters/feImage-target-style-change.svg

        * rendering/svg/RenderSVGResource.cpp:
        (WebCore::removeFromFilterCacheAndInvalidateDependencies): Renamed from removeFromFilterCache, as it has another purpose now.
        (WebCore::RenderSVGResource::markForLayoutAndParentResourceInvalidation): s/removeFromFilterCache/removeFromFilterCacheAndInvalidateDependencies/.
        * rendering/svg/RenderSVGResource.h: Removed removeFromFilterCache, it got inlined.
        * svg/SVGDocumentExtensions.cpp: Add a new HashMap<SVGElement*, OwnPtr<HashSet<SVGElement*> > > used for dependency tracking.
        (WebCore::SVGDocumentExtensions::setOfElementsReferencingTarget): Returns all elements the passed in element depends on.
        (WebCore::SVGDocumentExtensions::addElementReferencingTarget): Register element 'a' referencing target 'b'.
        (WebCore::SVGDocumentExtensions::removeAllTargetReferencesForElement): Called by element 'a' on destruction or any target change.
        (WebCore::SVGDocumentExtensions::removeAllElementReferencesForTarget): Called by element 'b' on destruction.
        * svg/SVGDocumentExtensions.h: Expose new methods.
        * svg/SVGElement.cpp:
        (WebCore::SVGElement::~SVGElement): Call remove removeAllElementReferencesForTarget on destruction.
        * svg/SVGFEImageElement.cpp:
        (WebCore::SVGFEImageElement::clearResourceReferences):
        (WebCore::SVGFEImageElement::buildPendingResource):

2012-02-08  Kihong Kwon  <kihong.kwon@samsung.com>

        [EFL] Using string method instead of char* operation in the platformLanguage().
        https://bugs.webkit.org/show_bug.cgi?id=78077

        Reviewed by Andreas Kling.

        No new tests. Just fix a bug of platformLanguage function.

        * platform/efl/LanguageEfl.cpp:
        (WebCore::platformLanguage):
        Change char* operation to string operation.

2012-02-08  Alexander Pavlov  <apavlov@chromium.org>

        Web Inspector: Touch event emulation fails for iframes
        https://bugs.webkit.org/show_bug.cgi?id=77987

        Reviewed by Pavel Feldman.

        Test: fast/events/touch/emulated-touch-iframe.html

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

2012-02-08  Andreas Kling  <awesomekling@apple.com>

        StyledElement: Manully setNeedsStyleRecalc() after adding CSSProperties directly.
        <http://webkit.org/b/78068>

        Rubber-stamped by Ryosuke Niwa.

        Turns out that setProperty() with a CSSProperty has quite different behavior from
        the other setProperty() methods. We should probably clean that up (separately.)
        For now, simply call setNeedsStyleRecalc() manually in the addCSS* functions that
        use setProperty(CSSProperty).

        * dom/StyledElement.cpp:
        (WebCore::StyledElement::addCSSProperty):
        (WebCore::StyledElement::addCSSImageProperty):

2012-02-08  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r107050.
        http://trac.webkit.org/changeset/107050
        https://bugs.webkit.org/show_bug.cgi?id=78094

        May crash editing tests (Requested by morrita on #webkit).

        * html/HTMLDetailsElement.cpp:
        (WebCore::HTMLDetailsElement::createShadowSubtree):
        * html/HTMLKeygenElement.cpp:
        (WebCore::HTMLKeygenElement::HTMLKeygenElement):
        * html/HTMLMeterElement.cpp:
        (WebCore::HTMLMeterElement::createShadowSubtree):
        * html/HTMLProgressElement.cpp:
        (WebCore::HTMLProgressElement::createShadowSubtree):
        * html/HTMLSummaryElement.cpp:
        (WebCore::HTMLSummaryElement::createShadowSubtree):
        * html/HTMLTextAreaElement.cpp:
        (WebCore::HTMLTextAreaElement::createShadowSubtree):

2012-02-08  Nikolas Zimmermann  <nzimmermann@rim.com>

        [Qt] REGRESSION(r106918): It made svg/zoom/page/zoom-foreignObject.svg crash with Qt5-WK1
        https://bugs.webkit.org/show_bug.cgi?id=77995

        Reviewed by Csaba Osztrogonác.

        From the stack traces it's obvious that SVGImageChromeClient tried to invalidate the root view,
        while its SVGImage was being destructed, due to an updateStyleIfNeeded() call, coming
        from frameDetached(). There's no point in redrawing there, so we should just stop it.

        Covered by existing tests on the Qt but, unfortunately I couldn't reproduce it on Mac.

        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImageChromeClient::invalidateContentsAndRootView): Stop invalidating if m_page is 0.
        (WebCore::SVGImage::~SVGImage): Clear m_page, so that SVGImageChromeClient knows we're destructing.
        * svg/graphics/SVGImage.h:

2012-02-08  Pablo Flouret  <pablof@motorola.com>

        Add state attribute to history's dom interface.
        https://bugs.webkit.org/show_bug.cgi?id=76035

        Reviewed by Kentaro Hara.

        Tests: fast/loader/stateobjects/state-attribute-object-types.html
               fast/loader/stateobjects/state-attribute-only-one-deserialization.html

        * bindings/js/JSHistoryCustom.cpp:
        (WebCore::JSHistory::state):
        (WebCore):
        (WebCore::JSHistory::pushState):
        (WebCore::JSHistory::replaceState):
        * bindings/v8/custom/V8HistoryCustom.cpp:
        (WebCore::V8History::stateAccessorGetter):
        (WebCore):
        (WebCore::V8History::pushStateCallback):
        (WebCore::V8History::replaceStateCallback):
        * page/History.cpp:
        (WebCore::History::History):
        (WebCore::History::state):
        (WebCore):
        (WebCore::History::stateInternal):
        (WebCore::History::stateChanged):
        * page/History.h:
        (History):
        * page/History.idl:

2012-02-08  Nikolas Zimmermann  <nzimmermann@rim.com>

        SVGLoad event fires too early
        https://bugs.webkit.org/show_bug.cgi?id=78084

        Reviewed by Hajime Morita.

        SVGLoad event fires too early, making it impossible to use the vanilla repaint.js harness (runRepaintTest).

        We're using a hack called runSVGRepaintTest() at the moment in trunk, which runs runRepaintTest() from a 0ms timer,
        which is not reliable. The main difference between HTML onload and SVG onload is that HTMLs event is a "window event",
        thus dispatched through DOMWindow (eg. <body onload="alert(event.target)" will yield Document,
        <svg onload="alert(evt.target)"> will say SVGSVGElement).

        Consider:
        <svg onload="alert('1')>
        <g onload="alert('2)">
        <rect onload="alert('3')"/>
        </svg>

        As soon as the <rect> finishes parsing (SVGElement::finishedParsingChildren), it's SVGLoad event is fired.
        So first you'll see '3', then '2', then '1'.

        Using:
        <svg onload="alert('1')>
        <g onload="alert('2)">
        <image xlink:href="someExternal.jpg" onload="alert('3')"/>
        </svg>

        will yield the same SVGLoad order. When using <image externalREsourcesRequired="true", first the '1' will fire,
        then '3', then '2', all as expected and specified in SVG.

        http://www.w3.org/TR/SVG/interact.html#LoadEvent says:
        "The event is triggered at the point at which the user agent has fully parsed the element and its descendants and is
        ready to act appropriately upon that element, such as being ready to render the element to the target device. Referenced
        external resources that are required must be loaded, parsed and ready to render before the event is triggered. Optional
        external resources are not required to be ready for the event to be triggered."

        What we don't implement correctly is the second part of the first sentence: "and is ready to act appropriately upon that
        element, such as being ready to render the element to the target device". We currently fire the SVGLoad event, right after
        </svg> is seen, if no externalResourceRequired="true" attributes are set anywhere. This is not wrong, but not correct for
        WebKit, as we're not yet "ready to render".

        HTML fires its window onload event from Document::implicitClose(), where it calls Document::dispatchWindowLoadEvent.
        At this point we're ready to render. So I'm now aligning the timing of the outermost <svg> elements SVGLoad event, to be
        equal to HTML. This lets use use the repaint.js harness w/o any special SVG tricks.

        Covered by existing tests.

        * dom/Document.cpp:
        (WebCore::Document::implicitClose): Dispatch SVGLoad event for outermost <svg> elements from here, as HTML does for its window onload event.
        * svg/SVGDocumentExtensions.cpp:
        (WebCore::SVGDocumentExtensions::dispatchSVGLoadEventToOutermostSVGElements): Sends a SVGLoad event to all outermost <svg> elements in a document, if possible.
        There can be multiple ones, if using <svg><foreignObject><svg>... - the <svg> in the <fO> also acts as outermost <svg> element.
        * svg/SVGDocumentExtensions.h: Add new dispatchSVGLoadEventToOutermostSVGElements() helper.
        * svg/SVGElement.cpp:
        (WebCore::SVGElement::isOutermostSVGSVGElement): Moved from SVGSVGElement into SVGElement, and renamed from isOutermostSVG().
        (WebCore::SVGElement::sendSVGLoadEventIfPossible): Don't dispatch load events to outermost <svg> elements, if Document::implicitClose() wasn't called yet.
        (WebCore::SVGElement::finishParsingChildren): Stop using the default SVGLoad dispatching logic for outermost <svg> elements.
        * svg/SVGElement.h: Add isOutermostSVGSVGElement().
        * svg/SVGSVGElement.cpp: Rename isOutermostSVG to isOutermostSVGSVGElement.
        (WebCore::SVGSVGElement::currentScale):
        (WebCore::SVGSVGElement::setCurrentScale):
        (WebCore::SVGSVGElement::localCoordinateSpaceTransform):
        (WebCore::SVGSVGElement::createRenderer):
        * svg/SVGSVGElement.h: Move isOutermostSVG() to SVGElement.
        * svg/SVGStyledElement.cpp:
        (WebCore::SVGStyledElement::title): Rename isOutermostSVG to isOutermostSVGSVGElement.

2012-02-08  Alexander Pavlov  <apavlov@chromium.org>

        Web Inspector: [CRASH] InspectorDOMAgent::updateTouchEventEmulationInPage()
        https://bugs.webkit.org/show_bug.cgi?id=78090

        Reviewed by Vsevolod Vlasov.

        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::updateTouchEventEmulationInPage):

2012-02-07  Alexander Pavlov  <apavlov@chromium.org>

        Web Inspector: Closed computed style sidebar pane rebuilds, resulting in slowness
        https://bugs.webkit.org/show_bug.cgi?id=77865

        Reviewed by Pavel Feldman.

        Test: inspector/styles/lazy-computed-style.html

        * inspector/front-end/StylesSidebarPane.js:
        (WebInspector.StylesSidebarPane):
        (WebInspector.StylesSidebarPane.prototype._executeRebuildUpdate):
        (WebInspector.StylesSidebarPane.prototype._refreshComputedStyleSection):
        (WebInspector.ComputedStyleSidebarPane.prototype.expand):
        (WebInspector.ComputedStylePropertiesSection.prototype.onpopulate):

2012-02-08  Tommy Widenflycht  <tommyw@google.com>

        MediaStream API: Adding the onstatechange callback to PeerConnection
        https://bugs.webkit.org/show_bug.cgi?id=77954

        When readyState changes a callback should be triggered.

        Reviewed by Adam Barth.

        Tests for the Media Stream API will be provided by the bug 56587, pending enough landed code.

        * dom/EventNames.h:
        (WebCore):
        * mediastream/PeerConnection.cpp:
        (WebCore::PeerConnection::changeReadyState):
        * mediastream/PeerConnection.h:
        (PeerConnection):
        (WebCore::PeerConnection::didChangeState):
        * mediastream/PeerConnection.idl:
        * platform/mediastream/PeerConnectionHandlerClient.h:
        (PeerConnectionHandlerClient):

2012-02-08  Kentaro Hara  <haraken@chromium.org>

        Rename [DelegatingPutFunction] IDL to [CustomNamedSetter] IDL
        https://bugs.webkit.org/show_bug.cgi?id=77963

        Reviewed by Adam Barth.

        This patch renames [DelegatingPutFunction] IDL to [CustomNamedSetter] IDL,
        for clarification and for naming consistency with [NamedGetter] and [CustomIndexedSetter].

        No tests. No change in behavior.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateHeader):
        (GenerateImplementation):
        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateHeaderNamedAndIndexedPropertyAccessors):
        (GenerateImplementationIndexer):
        (GenerateImplementationNamedPropertyGetter):
        * bindings/scripts/test/TestInterface.idl:
        * css/CSSStyleDeclaration.idl:
        * dom/DOMStringMap.idl:
        * html/HTMLAppletElement.idl:
        * html/HTMLEmbedElement.idl:
        * html/HTMLObjectElement.idl:
        * page/History.idl:
        * page/Location.idl:
        * storage/Storage.idl:

2012-02-08  Kentaro Hara  <haraken@chromium.org>

        Replace [CheckNodeSecurity] with [CheckAccessToNode]
        https://bugs.webkit.org/show_bug.cgi?id=77971

        Reviewed by Adam Barth.

        [CheckNodeSecurity] is not implemented by code generators.
        This patch replaces [CheckNodeSecurity] with [CheckAccessToNode].

        Test: http/tests/security/cross-frame-access-frameelement.html

        * page/DOMWindow.idl:

2012-02-08  Kentaro Hara  <haraken@chromium.org>

        Rename [CustomPushEventHandlerScope] to [JSCustomPushEventHandlerScope]
        https://bugs.webkit.org/show_bug.cgi?id=78081

        Reviewed by Adam Barth.

        [CustomPushEventHandlerScope] is a JSC-specific IDL attribute.
        This patch renames it to [JSCustomPushEventHandlerScope]

        No tests. No change in behavior.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateHeader):
        * dom/Node.idl:
        * html/HTMLElement.idl:

2012-02-06  Kentaro Hara  <haraken@chromium.org>

        Add "JS" prefix to JSC-specific IDLs
        https://bugs.webkit.org/show_bug.cgi?id=77846

        Reviewed by Darin Adler.

        In bug 77693, we have added "JS" prefix to several JSC specific IDLs.
        This patch adds "JS" prefix to the remaining JSC specific IDLs.
        Specifically, this patch renames IDLs as follows:

        [CustomDefineOwnProperty] => [JSCustomDefineOwnProperty]
        [CustomPrototypeDefineOwnProperty] => [JSCustomPrototypeDefineOwnProperty]
        [GenerateNativeConverter] => [JSGenerateToNativeObject]  (Note: For naming consistency
        with [JSGenerateToJS] and [JSCustomToNativeObject])
        [DelegatingGetOwnPropertySlot] => [JSCustomGetOwnPropertySlotDelegate]  (Note: Should be prefixed "JS",
        should be prefixed with "Custom", and for naming consistency with [CustomGetOwnPropertySlot])

        No tests. No change in behavior.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateGetOwnPropertySlotBody):
        (GenerateGetOwnPropertyDescriptorBody):
        (GenerateHeader):
        (GenerateImplementation):
        * bindings/scripts/test/TestTypedArray.idl:
        * dom/Attr.idl:
        * dom/DataTransferItemList.idl:
        * dom/Document.idl:
        * dom/DocumentType.idl:
        * dom/Element.idl:
        * dom/Node.idl:
        * fileapi/DirectoryEntry.idl:
        * fileapi/DirectoryEntrySync.idl:
        * fileapi/File.idl:
        * fileapi/FileEntry.idl:
        * fileapi/FileEntrySync.idl:
        * fileapi/WebKitBlobBuilder.idl:
        * html/DOMFormData.idl:
        * html/DOMURL.idl:
        * html/HTMLAppletElement.idl:
        * html/HTMLCanvasElement.idl:
        * html/HTMLElement.idl:
        * html/HTMLEmbedElement.idl:
        * html/HTMLImageElement.idl:
        * html/HTMLMediaElement.idl:
        * html/HTMLObjectElement.idl:
        * html/HTMLOptionElement.idl:
        * html/HTMLOptionsCollection.idl:
        * html/HTMLTableCaptionElement.idl:
        * html/HTMLTableSectionElement.idl:
        * html/HTMLVideoElement.idl:
        * html/TextTrackCue.idl:
        * html/canvas/Float32Array.idl:
        * html/canvas/Float64Array.idl:
        * html/canvas/Int16Array.idl:
        * html/canvas/Int32Array.idl:
        * html/canvas/Int8Array.idl:
        * html/canvas/Uint16Array.idl:
        * html/canvas/Uint32Array.idl:
        * html/canvas/Uint8Array.idl:
        * html/canvas/Uint8ClampedArray.idl:
        * mediastream/LocalMediaStream.idl:
        * page/DOMWindow.idl:
        * page/History.idl:
        * page/Location.idl:
        * storage/StorageInfo.idl:
        * svg/SVGElement.idl:
        * svg/SVGElementInstance.idl:
        * workers/DedicatedWorkerContext.idl:
        * workers/SharedWorker.idl:
        * workers/SharedWorkerContext.idl:
        * workers/Worker.idl:
        * workers/WorkerContext.idl:

2012-02-07  Kentaro Hara  <haraken@chromium.org>

        Rename [HasOverridingNameGetter] attribute to [CustomNamedGetter] attribute
        https://bugs.webkit.org/show_bug.cgi?id=78076

        Reviewed by Adam Barth.

        This patch renames the [HasOverridingNameGetter] attribute to the
        [CustomNamedGetter] attribute, for naming consistency with [CustomNamedSetter].

        Test: bindings/scripts/test/TestCustomNamedGetter.idl

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateGetOwnPropertySlotBody):
        (GenerateGetOwnPropertyDescriptorBody):
        (GenerateHeader):
        (GenerateImplementation):
        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateHeaderNamedAndIndexedPropertyAccessors):
        (GenerateImplementationNamedPropertyGetter):

        * html/HTMLDocument.idl:
        * html/HTMLFormElement.idl:
        * html/HTMLFrameSetElement.idl:

        * bindings/scripts/test/TestCustomNamedGetter.idl: Renamed from Source/WebCore/bindings/scripts/test/TestOverridingNameGetter.idl.

        * bindings/scripts/test/CPP/WebDOMTestCustomNamedGetter.cpp: Updated run-bindings-tests results.
        (WebDOMTestCustomNamedGetter::WebDOMTestCustomNamedGetterPrivate::WebDOMTestCustomNamedGetterPrivate):
        (WebDOMTestCustomNamedGetter::WebDOMTestCustomNamedGetterPrivate):
        (WebDOMTestCustomNamedGetter::WebDOMTestCustomNamedGetter):
        (WebDOMTestCustomNamedGetter::operator=):
        (WebDOMTestCustomNamedGetter::impl):
        (WebDOMTestCustomNamedGetter::~WebDOMTestCustomNamedGetter):
        (WebDOMTestCustomNamedGetter::anotherFunction):
        (toWebCore):
        (toWebKit):
        * bindings/scripts/test/CPP/WebDOMTestCustomNamedGetter.h: Ditto.
        (WebCore):
        (WebDOMTestCustomNamedGetter):
        * bindings/scripts/test/GObject/WebKitDOMTestCustomNamedGetter.cpp: Ditto.
        (WebKit):
        (WebKit::kit):
        (webkit_dom_test_custom_named_getter_another_function):
        (WebKit::core):
        (webkit_dom_test_custom_named_getter_finalize):
        (webkit_dom_test_custom_named_getter_set_property):
        (webkit_dom_test_custom_named_getter_get_property):
        (webkit_dom_test_custom_named_getter_constructed):
        (webkit_dom_test_custom_named_getter_class_init):
        (webkit_dom_test_custom_named_getter_init):
        (WebKit::wrapTestCustomNamedGetter):
        * bindings/scripts/test/GObject/WebKitDOMTestCustomNamedGetter.h: Ditto.
        (_WebKitDOMTestCustomNamedGetter):
        (_WebKitDOMTestCustomNamedGetterClass):
        * bindings/scripts/test/GObject/WebKitDOMTestCustomNamedGetterPrivate.h: Ditto.
        (WebKit):
        * bindings/scripts/test/GObject/WebKitDOMTestOverridingNameGetter.h: Ditto.
        * bindings/scripts/test/JS/JSTestCustomNamedGetter.cpp: Ditto.
        (WebCore):
        (WebCore::JSTestCustomNamedGetterConstructor::JSTestCustomNamedGetterConstructor):
        (WebCore::JSTestCustomNamedGetterConstructor::finishCreation):
        (WebCore::JSTestCustomNamedGetterConstructor::getOwnPropertySlot):
        (WebCore::JSTestCustomNamedGetterConstructor::getOwnPropertyDescriptor):
        (WebCore::JSTestCustomNamedGetterPrototype::self):
        (WebCore::JSTestCustomNamedGetterPrototype::getOwnPropertySlot):
        (WebCore::JSTestCustomNamedGetterPrototype::getOwnPropertyDescriptor):
        (WebCore::JSTestCustomNamedGetter::JSTestCustomNamedGetter):
        (WebCore::JSTestCustomNamedGetter::finishCreation):
        (WebCore::JSTestCustomNamedGetter::createPrototype):
        (WebCore::JSTestCustomNamedGetter::destroy):
        (WebCore::JSTestCustomNamedGetter::getOwnPropertySlot):
        (WebCore::JSTestCustomNamedGetter::getOwnPropertyDescriptor):
        (WebCore::jsTestCustomNamedGetterConstructor):
        (WebCore::JSTestCustomNamedGetter::getConstructor):
        (WebCore::jsTestCustomNamedGetterPrototypeFunctionAnotherFunction):
        (WebCore::isObservable):
        (WebCore::JSTestCustomNamedGetterOwner::isReachableFromOpaqueRoots):
        (WebCore::JSTestCustomNamedGetterOwner::finalize):
        (WebCore::toJS):
        (WebCore::toTestCustomNamedGetter):
        * bindings/scripts/test/JS/JSTestCustomNamedGetter.h: Ditto.
        (WebCore):
        (JSTestCustomNamedGetter):
        (WebCore::JSTestCustomNamedGetter::create):
        (WebCore::JSTestCustomNamedGetter::createStructure):
        (WebCore::JSTestCustomNamedGetter::impl):
        (WebCore::JSTestCustomNamedGetter::releaseImpl):
        (WebCore::JSTestCustomNamedGetter::releaseImplIfNotNull):
        (JSTestCustomNamedGetterOwner):
        (WebCore::wrapperOwner):
        (WebCore::wrapperContext):
        (JSTestCustomNamedGetterPrototype):
        (WebCore::JSTestCustomNamedGetterPrototype::create):
        (WebCore::JSTestCustomNamedGetterPrototype::createStructure):
        (WebCore::JSTestCustomNamedGetterPrototype::JSTestCustomNamedGetterPrototype):
        (JSTestCustomNamedGetterConstructor):
        (WebCore::JSTestCustomNamedGetterConstructor::create):
        (WebCore::JSTestCustomNamedGetterConstructor::createStructure):
        * bindings/scripts/test/JS/JSTestOverridingNameGetter.cpp:
        * bindings/scripts/test/ObjC/DOMTestCustomNamedGetter.h: Ditto.
        * bindings/scripts/test/ObjC/DOMTestCustomNamedGetter.mm: Ditto.
        (-[DOMTestCustomNamedGetter dealloc]):
        (-[DOMTestCustomNamedGetter finalize]):
        (-[DOMTestCustomNamedGetter anotherFunction:]):
        (core):
        (kit):
        * bindings/scripts/test/ObjC/DOMTestCustomNamedGetterInternal.h: Ditto.
        (WebCore):
        * bindings/scripts/test/V8/V8TestCustomNamedGetter.cpp: Ditto.
        (WebCore):
        (TestCustomNamedGetterInternal):
        (WebCore::TestCustomNamedGetterInternal::V8_USE):
        (WebCore::TestCustomNamedGetterInternal::anotherFunctionCallback):
        (WebCore::ConfigureV8TestCustomNamedGetterTemplate):
        (WebCore::V8TestCustomNamedGetter::GetRawTemplate):
        (WebCore::V8TestCustomNamedGetter::GetTemplate):
        (WebCore::V8TestCustomNamedGetter::HasInstance):
        (WebCore::V8TestCustomNamedGetter::wrapSlow):
        (WebCore::V8TestCustomNamedGetter::derefObject):
        * bindings/scripts/test/V8/V8TestCustomNamedGetter.h: Ditto.
        (WebCore):
        (V8TestCustomNamedGetter):
        (WebCore::V8TestCustomNamedGetter::toNative):
        (WebCore::V8TestCustomNamedGetter::existingWrapper):
        (WebCore::V8TestCustomNamedGetter::wrap):
        (WebCore::toV8):

2012-02-07  Emil A Eklund  <eae@chromium.org>

        Revert TableSection cell and border calculations to integers
        https://bugs.webkit.org/show_bug.cgi?id=77918

        Reviewed by Eric Seidel.

        Change RenderTableSection cell width, row height and border calculations
        back to use integers. Table layout is done on integer bounds to comply
        with the specification and to ensure that columns given the same width,
        including percentage widths, are rendered with identical widths. The same
        applies to heights.

        No new tests.

        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::setCellLogicalWidths):
        (WebCore::RenderTableSection::calcRowLogicalHeight):
        (WebCore::RenderTableSection::layoutRows):
        (WebCore::RenderTableSection::calcOuterBorderBefore):
        (WebCore::RenderTableSection::calcOuterBorderAfter):
        (WebCore::RenderTableSection::calcOuterBorderStart):
        (WebCore::RenderTableSection::calcOuterBorderEnd):
        (WebCore::RenderTableSection::paintObject):
        (WebCore::RenderTableSection::nodeAtPoint):
        * rendering/RenderTableSection.h:
        (RenderTableSection):
        (WebCore::RenderTableSection::RowStruct::RowStruct):
        (WebCore::RenderTableSection::outerBorderBefore):
        (WebCore::RenderTableSection::outerBorderAfter):
        (WebCore::RenderTableSection::outerBorderStart):
        (WebCore::RenderTableSection::outerBorderEnd):

2012-02-07  Robert Kroeger  <rjkroege@chromium.org>

        [chromium] Remove the no longer necessary Chromium gesture recognizer.
        https://bugs.webkit.org/show_bug.cgi?id=77492

        Reviewed by Adam Barth.

        * WebCore.gypi:
        * platform/PlatformGestureRecognizer.h: Removed.
        * platform/chromium/FramelessScrollView.h:
        (WebCore):
        (FramelessScrollView):
        * platform/chromium/GestureRecognizerChromium.cpp: Removed.
        * platform/chromium/GestureRecognizerChromium.h: Removed.
        * platform/chromium/PopupContainer.cpp:
        (WebCore):
        * platform/chromium/PopupContainer.h:
        * platform/chromium/PopupListBox.cpp:
        (WebCore):
        * platform/chromium/PopupListBox.h:
        (PopupListBox):

2012-02-07  Erik Arvidsson  <arv@chromium.org>

        [V8] Allow bindings for attributes on DOM nodes to also set a named hidden reference
        https://bugs.webkit.org/show_bug.cgi?id=78052

        Reviewed by Nate Chapin.

        Before this patch the code generator did not add the named hidden reference when the data node
        was a DOM Node. This lead to us having to create custom toV8 bindings in a few places.

        Covered by existing tests

        * Target.pri:
        * UseV8.cmake:
        * WebCore.gypi:
        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateNormalAttrGetter):
        (HasCustomToV8Implementation):
        * bindings/v8/custom/V8DOMStringMapCustom.cpp:
        * bindings/v8/custom/V8DOMTokenListCustom.cpp: Removed.
        * bindings/v8/custom/V8NamedNodeMapCustom.cpp:

2012-02-07  Kentaro Hara  <haraken@chromium.org>

        [GTK] Ignore [Custom] attributes in CodeGeneratorGObject.pm
        https://bugs.webkit.org/show_bug.cgi?id=78059

        Reviewed by Adam Barth.

        CodeGeneratorGObject.pm does not support custom attributes.
        We can skip generating code for attributes with [Custom].
        The change would make sense, since CodeGeneratorGObject.pm already
        skips attributes with [CustomGetter] or [CustomSetter].

        Test: bindings/scripts/test/TestObj.idl

        * bindings/scripts/CodeGeneratorGObject.pm:
        (SkipAttribute):
        * bindings/scripts/test/GObject/WebKitDOMTestObj.cpp:

2012-02-07  Emil A Eklund  <eae@chromium.org>

        Add pixelSnappedX/Y/Width/Height methods
        https://bugs.webkit.org/show_bug.cgi?id=78040

        Reviewed by Eric Seidel.

        Add pixel snapped versions of x/y/width/height methods. These return the
        same value as the x/w/width/height methods for now but once we move over
        to sub pixel layout they will snap the subpixel value to a device pixel
        and return an integer value.

        When snapping the left and top edge is simply rounded to the nearest
        device pixel.
        The right and bottom edges are computed by subtracting the rounded left/
        top edge from the precise location and size. This ensures that the edges
        all line up with device pixels and that the total size of an object,
        including borders, is at most one pixel off.

        In summary, the values are computed as follows:
                x: round(x)
                y: round(y)
                maxX: round(x + width)
                maxY: round(y + height)
                width: round(x + width) - round(x)
                height: round(y + height) - round(y)

        We use the term pixel snapped to indicate that the numbers are not merely
        rounded. This also matches the naming used by the line box tree.

        No new tests, no functionality changes.

        * page/PrintContext.cpp:
        (WebCore::PrintContext::pageNumberForElement):
        * rendering/RenderBlock.cpp:
        (WebCore::::collectIfNeeded):
        * rendering/RenderBlock.h:
        (RenderBlock):
        (WebCore::RenderBlock::pixelSnappedLogicalRightOffsetForLine):
        (WebCore::RenderBlock::pixelSnappedLogicalLeftOffsetForLine):
        (WebCore::RenderBlock::FloatingObject::pixelSnappedX):
        (WebCore::RenderBlock::FloatingObject::pixelSnappedMaxX):
        (WebCore::RenderBlock::FloatingObject::pixelSnappedY):
        (WebCore::RenderBlock::FloatingObject::pixelSnappedMaxY):
        (WebCore::RenderBlock::FloatingObject::pixelSnappedWidth):
        (WebCore::RenderBlock::FloatingObject::pixelSnappedHeight):
        (FloatingObject):
        (WebCore::RenderBlock::pixelSnappedLogicalTopForFloat):
        (WebCore::RenderBlock::pixelSnappedLogicalBottomForFloat):
        (WebCore::RenderBlock::pixelSnappedLogicalLeftForFloat):
        (WebCore::RenderBlock::pixelSnappedLogicalRightForFloat):
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::LineWidth::shrinkAvailableWidthForNewFloatIfNeeded):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::pixelSnappedClientWidth):
        (WebCore):
        (WebCore::RenderBox::pixelSnappedClientHeight):
        (WebCore::RenderBox::scrollHeight):
        * rendering/RenderBox.h:
        (WebCore::RenderBox::pixelSnappedWidth):
        (WebCore::RenderBox::pixelSnappedHeight):
        (RenderBox):
        (WebCore::RenderBox::pixelSnappedOffsetWidth):
        (WebCore::RenderBox::pixelSnappedOffsetHeight):
        (WebCore::RenderBox::clientLogicalWidth):
        (WebCore::RenderBox::clientLogicalHeight):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::pixelSnappedOffsetWidth):
        (WebCore):
        (WebCore::RenderBoxModelObject::pixelSnappedOffsetHeight):
        * rendering/RenderBoxModelObject.h:
        (WebCore::RenderBoxModelObject::pixelSnappedOffsetLeft):
        (WebCore::RenderBoxModelObject::pixelSnappedOffsetTop):
        (RenderBoxModelObject):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::pixelSnappedScrollWidth):
        (WebCore):
        (WebCore::RenderLayer::pixelSnappedScrollHeight):
        (WebCore::RenderLayer::computeScrollDimensions):
        (WebCore::RenderLayer::updateScrollInfoAfterLayout):
        * rendering/RenderLayer.h:
        (RenderLayer):
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::scrollHeight):
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::volumeSliderOffsetFromMuteButton):
        * rendering/RenderTreeAsText.cpp:
        (WebCore::write):

2012-02-07  Mike Lawther  <mikelawther@chromium.org>

        CSS3 calc() - simple parse time evaluation
        https://bugs.webkit.org/show_bug.cgi?id=77960

        Adds simple number/percent expression evaluation. rgb() and hsl() functions now
        allow simple calc() expressions.

        Reviewed by Ojan Vafai.

        * css/CSSCalculationValue.cpp:
        (WebCore):
        (WebCore::CSSCalcValue::doubleValue):
        (WebCore::CSSCalcPrimitiveValue::doubleValue):
        (WebCore::CSSCalcBinaryOperation::doubleValue):
        (CSSCalcBinaryOperation):
        (WebCore::CSSCalcBinaryOperation::evaluate):
        * css/CSSCalculationValue.h:
        (CSSCalcExpressionNode):
        (WebCore::CSSCalcValue::isInt):
        (CSSCalcValue):
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parsedDouble):

2012-02-07  Andreas Kling  <awesomekling@apple.com>

        REGRESSION(r106668-r106889): Chromium page cycler tests (Intl2) performance regressions.
        <http://webkit.org/b/78068>

        Reviewed by Ryosuke Niwa.

        Create CSS_IDENT values for attribute styles in the document's CSSValuePool.
        This regressed in r106756 and I suspect it'll fix up the cycler regression.

        * dom/StyledElement.cpp:
        (WebCore::StyledElement::addCSSProperty):

2012-02-07  Noel Gordon  <noel.gordon@gmail.com>

        Remove TextureMapperQt from the gyp projects
        https://bugs.webkit.org/show_bug.cgi?id=78055

        Reviewed by Noam Rosenthal.

        TextureMapperQt.{cpp,h} were removed in r106659, remove references to
        these files from the gyp projects.

        * WebCore.gypi:

2012-02-07  Tony Chang  <tony@chromium.org>

        merge DashboardSupportCSSPropertyNames.in into CSSPropertyNames.in
        https://bugs.webkit.org/show_bug.cgi?id=78036

        Reviewed by Darin Adler.

        In r89362, we started running the preprocessor through CSSPropertyNames.in.
        Now we can move DashboardSupportCSSPropertyNames.in into CSSPropertyNames.in
        and wrap it in an #if.

        No new tests, build refactoring.

        * Configurations/FeatureDefines.xcconfig: Add ENABLE_DASHBOARD_SUPPORT to FEATURE_DEFINES.
        * DerivedSources.make: Remove DashboardSupportCSSPropertyNames.in.
        * DerivedSources.pri: Remove DashboardSupportCSSPropertyNames.in.
        * WebCore.xcodeproj/project.pbxproj: Remove DashboardSupportCSSPropertyNames.in.
        * css/CSSPropertyNames.in: Wrap -webkit-dashboard-region in an #if.
        * css/DashboardSupportCSSPropertyNames.in: Removed.

2012-02-07  Xingnan Wang  <xingnan.wang@intel.com>

        Enable IPP for FFTFrame
        https://bugs.webkit.org/show_bug.cgi?id=75522

        Reviewed by Tony Chang.

        Add the FFTFrame implementation using Intel IPP's DFT algorithm.

        * WebCore.gyp/WebCore.gyp:
        * WebCore.gypi:
        * platform/audio/FFTFrame.h:
        (FFTFrame):
        * platform/audio/FFTFrameStub.cpp:
        * platform/audio/ipp/FFTFrameIPP.cpp: Added.
        (WebCore):
        (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):

2012-02-07  Adrienne Walker  <enne@google.com>

        Properly detect top level frames when propogating compositing
        https://bugs.webkit.org/show_bug.cgi?id=78033

        Reviewed by James Robinson.

        There's no need to enumerate all tag names when searching for a
        top-level frame. If a render view's document has a frame, then that
        frame is not the top-level one.

        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::shouldPropagateCompositingToEnclosingFrame):
        * rendering/RenderLayerCompositor.h:
        (RenderLayerCompositor):

2012-02-07  Chris Palmer  <palmer@google.com>

        Resolve crash in FrameLoader::checkTimerFired.
        https://bugs.webkit.org/show_bug.cgi?id=77907

        Reviewed by Eric Seidel.

        Test is LayoutTests/http/tests/appcache/deferred-events-delete-while-raising-timer.html.

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

2012-02-07  Yong Li  <yoli@rim.com>

        [BlackBerry] NetworkJob should stop redirecting when the request is cleared by client
        https://bugs.webkit.org/show_bug.cgi?id=78029

        Reviewed by Rob Buis.

        When a redirect is rejected by security origin check, the ResourceRequest
        will be cleared (see DocumentThreadableLoader::redirectReceived()). In this
        case, we should stop handling the request.

        No new tests because existing tests (like http:/tests/xmlhttprequest/redirect-cross
        -origin-tripmine.html) can cover this.

        * platform/network/blackberry/NetworkJob.cpp:
        (WebCore::NetworkJob::startNewJobWithRequest):

2012-02-07  David Barton  <dbarton@mathscribe.com>

        Remove extraneous MathML code before bug 52444 fix
        https://bugs.webkit.org/show_bug.cgi?id=78034

        Reviewed by Eric Seidel.
        
        Per Darin Adler, I am breaking up the patch fixing bug 52444 into smaller pieces.
        This patch removes a couple unused functions, some extra blank lines, unused #include
        directives, etc., and adds a very few WebKit-standard changes to these files.

        No new tests.

        * rendering/mathml/RenderMathMLBlock.cpp:
        (WebCore):
        * rendering/mathml/RenderMathMLBlock.h:
        (WebCore::RenderMathMLBlock::getBoxModelObjectHeight):
            - changed to a static member function since 'this' is unused;
              removed redundant non-const version
        (WebCore::RenderMathMLBlock::getBoxModelObjectWidth):
            - changed to a static member function since 'this' is unused;
              removed redundant non-const version
        (WebCore):
        * rendering/mathml/RenderMathMLFraction.cpp:
        * rendering/mathml/RenderMathMLMath.cpp:
        * rendering/mathml/RenderMathMLMath.h:
        * rendering/mathml/RenderMathMLOperator.h:
        (WebCore):
        * rendering/mathml/RenderMathMLRoot.cpp:
        * rendering/mathml/RenderMathMLRow.cpp:
        * rendering/mathml/RenderMathMLRow.h:
        * rendering/mathml/RenderMathMLSquareRoot.cpp:
        * rendering/mathml/RenderMathMLSquareRoot.h:
        * rendering/mathml/RenderMathMLSubSup.cpp:
        * rendering/mathml/RenderMathMLSubSup.h:
        * rendering/mathml/RenderMathMLUnderOver.cpp:
        * rendering/mathml/RenderMathMLUnderOver.h:

2012-02-07  David Reveman  <reveman@chromium.org>

        [Chromium] REGRESSION(r101854): Causing large amounts of unnecessary repainting.
        https://bugs.webkit.org/show_bug.cgi?id=78020

        Reviewed by James Robinson.

        Revert r101854.

        This patch is tested by the following unit test:
        - TextureManagerTest.requestTextureExceedingPreferredLimit

        * platform/graphics/chromium/ManagedTexture.cpp:
        (WebCore::ManagedTexture::reserve):
        * platform/graphics/chromium/TextureManager.cpp:
        (WebCore::TextureManager::requestTexture):
        * platform/graphics/chromium/TextureManager.h:
        (TextureManager):

2012-02-07  Anders Carlsson  <andersca@apple.com>

        Use the non-fast-scrollable region to detect when we can't do fast scrolling
        https://bugs.webkit.org/show_bug.cgi?id=78056
        <rdar://problem/10247932>

        Reviewed by Sam Weinig.

        * page/scrolling/ScrollingCoordinator.cpp:
        (WebCore::ScrollingCoordinator::frameViewLayoutUpdated):
        Actually set the non-fast scrollable region on the scrolling tree state.

        * page/scrolling/ScrollingTree.cpp:
        (WebCore::ScrollingTree::tryToHandleWheelEvent):
        Check if the wheel event's position is inside the non-fast-scrollable region
        and return false if it is.

        (WebCore::ScrollingTree::updateMainFrameScrollPosition):
        Store the cached main frame scroll position so we can use it in tryToHandleWheelEvent.

        * platform/graphics/Region.cpp:
        * platform/graphics/Region.h:
        Add a simple contains(const IntPoint&) member function.

2012-02-07  Dan Bernstein  <mitz@apple.com>

        <rdar://problem/10475450> Synthetic bold is illegible under some scaling transforms
        https://bugs.webkit.org/show_bug.cgi?id=78044

        Reviewed by Beth Dakin.

        Tests: fast/text/synthetic-bold-transformed-expected.html
               fast/text/synthetic-bold-transformed.html

        * platform/graphics/mac/FontMac.mm:
        (WebCore::Font::drawGlyphs): Changed to interpret syntheticBoldOffset as a length in device pixels.

2012-02-07  Levi Weintraub  <leviw@chromium.org>

        Update LayoutUnit usage in ColumnInfo and RenderFrameSet
        https://bugs.webkit.org/show_bug.cgi?id=77914

        Reviewed by Eric Seidel.

        Updating ColumnInfo and RenderFrameSet to use LayoutUnits
        instead of directly referencing integers for locations and
        distances.

        No new tests. No changed behavior.

        * rendering/ColumnInfo.h:
        (WebCore::ColumnInfo::forcedBreakOffset):
        (WebCore::ColumnInfo::maximumDistanceBetweenForcedBreaks):
        (ColumnInfo):
        * rendering/RenderFrameSet.cpp:
        (WebCore::RenderFrameSet::paintColumnBorder):
        (WebCore::RenderFrameSet::paintRowBorder):
        * rendering/RenderFrameSet.h:
        (RenderFrameSet):

2012-02-07  Adam Klein  <adamk@chromium.org>

        Add JSC support for delivering mutations when the outermost script context exits
        https://bugs.webkit.org/show_bug.cgi?id=70289

        Reviewed by Eric Seidel.

        The meat of this change is in JSMainThreadExecState, where a counter
        is incremented every time WebCore calls into JSC and decremented every
        time it returns. When the counter reaches zero, any pending mutations
        are delivered (this mirrors very similar code in V8Proxy and V8RecursionScope).

        The rest of the changes are of two sorts: compilation/logic fixes for
        JSC code when ENABLE(MUTATION_OBSERVERS) is true, and additional
        usages of JSMainThreadExecState so as to trigger the above
        increment/decrements at the appropriate times.

        * bindings/js/JSCustomXPathNSResolver.cpp:
        (WebCore::JSCustomXPathNSResolver::lookupNamespaceURI):
        Use JSMainThreadExecState instead of JSC::call.
        * bindings/js/JSDictionary.cpp:
        (WebCore::JSDictionary::convertValue): Add support
        for tryGetProperty with a HashMap<AtomicString>.
        * bindings/js/JSDictionary.h:
        * bindings/js/JSErrorHandler.cpp:
        (WebCore::JSErrorHandler::handleEvent):
        Use JSMainThreadExecState instead of JSC::call.
        * bindings/js/JSHTMLDocumentCustom.cpp:
        (WebCore::JSHTMLDocument::open):
        Use JSMainThreadExecState instead of JSC::call.
        * bindings/js/JSMainThreadExecState.cpp:
        (WebCore::JSMainThreadExecState::didLeaveScriptContext):
        * bindings/js/JSMainThreadExecState.h:
        (WebCore::JSMainThreadExecState::JSMainThreadExecState):
        Increment a static recursion level counter.
        (WebCore::JSMainThreadExecState::~JSMainThreadExecState):
        Decrement a static recursion level counter and, if we are
        at zero (the outermost script invocation), deliver any
        outstanding mutation records.
        * bindings/js/JSNodeFilterCondition.cpp:
        (WebCore::JSNodeFilterCondition::acceptNode):
        Use JSMainThreadExecState instead of JSC::call.
        * bindings/js/JSWebKitMutationObserverCustom.cpp:
        (WebCore::JSWebKitMutationObserver::observe):
        Fix JSDictionary logic, add support for attributeFilter.

2012-02-07  Anders Carlsson  <andersca@apple.com>

        Fix build.

        * platform/ScrollableArea.h:
        (WebCore::ScrollableArea::scrollableAreaBoundingBox):

2012-02-07  Levi Weintraub  <leviw@chromium.org>

        [SVG] Use element disappears after scripted change
        https://bugs.webkit.org/show_bug.cgi?id=74392

        Reviewed by Eric Seidel.

        Solution uncovered by Nikolas Zimmermann. Removing an early return that caused
        SVGUseElements to not update the shadow root's style, and therefor not render
        correctly.

        Test: svg/custom/use-disappears-after-style-update.svg

        * svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::didRecalcStyle):

2012-02-07  Kentaro Hara  <haraken@chromium.org>

        Rename [v8OnProto] IDL attribute to [V8OnProto] IDL attribute
        https://bugs.webkit.org/show_bug.cgi?id=77973

        Reviewed by Adam Barth.

        This patch renames [v8OnProto] to [V8OnProto], since V8 specific IDL
        attributes should be prefixed by "V8".

        No tests. No change in behavior.

        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateNormalAttrGetter):
        (GenerateNormalAttrSetter):
        (GenerateSingleBatchedAttribute):
        (GenerateImplementation):

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

        media/audio-data-url.html test broken on Lion
        https://bugs.webkit.org/show_bug.cgi?id=69779

        Reviewed by Eric Carlson.

        Do not use "OpenForPlayback" attribute on data:// urls, as CoreMedia/QuickTime X cannot
        handle those URLs.

        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        (WebCore::MediaPlayerPrivateQTKit::createQTMovie):

2012-02-07  Anders Carlsson  <andersca@apple.com>

        Scrolling tree should keep track of region we can't do fast scrolling for
        https://bugs.webkit.org/show_bug.cgi?id=78050

        Reviewed by Dan Bernstein.

        We currently won't do fast scrolling for subframes and other types of scrollable areas.
        Because of this, we'll have the scrolling tree keep a region of the page for which we can't
        do fast scrolling. This region will be updated after layout.

        * page/FrameView.cpp:
        (WebCore::FrameView::scrollableAreaBoundingBox):
        Return the bounding box.

        * page/scrolling/ScrollingCoordinator.cpp:
        (WebCore::ScrollingCoordinator::frameViewLayoutUpdated):
        Go through all the scrollable areas in this frame view and compute the region which we can't do
        fast scrolling for.

        * page/scrolling/ScrollingTree.cpp:
        (WebCore::ScrollingTree::commitNewTreeState):
        Update the non-fast-scrollable region.

        * page/scrolling/ScrollingTreeState.cpp:
        (WebCore::ScrollingTreeState::setNonFastScrollableRegion):
        Set the non-fast-scrollable region if it's changed.

        * platform/ScrollableArea.h:
        Add scrollableAreaBoundingBox member function.

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::scrollableAreaBoundingBox):
        Return the bounding box.

        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::scrollableAreaBoundingBox):
        Return the bounding box.

2012-02-07  Levi Weintraub  <leviw@chromium.org>

        unicode-bidi:plaintext is supposed to be effective on display:inline elements too
        https://bugs.webkit.org/show_bug.cgi?id=73310

        Reviewed by Eric Seidel.

        Adding support for unicode-bidi: plaintext as a property on inlines. These are treated
        like unicode-bidi: isolate with the addition of their directionality being determined
        by the UBA.

        Tests: fast/text/international/inline-plaintext-is-isolated-expected.html
               fast/text/international/inline-plaintext-is-isolated.html
               fast/text/international/inline-plaintext-relayout-with-leading-neutrals-expected.html
               fast/text/international/inline-plaintext-relayout-with-leading-neutrals.html
               fast/text/international/inline-plaintext-with-generated-content-expected.html
               fast/text/international/inline-plaintext-with-generated-content.html

        * platform/text/UnicodeBidi.h:
        (WebCore::isIsolated): Added this convenience function as Plaintext and Isolate Unicode-Bidi values
        are both treated as isolated content.
        * rendering/InlineIterator.h:
        (WebCore::notifyObserverEnteredObject): Inline now supports Unicode-Bidi Plaintext.
        (WebCore::notifyObserverWillExitObject): Ditto.
        (WebCore::bidiFirstSkippingEmptyInlines): Changed to support being called without a resolver.
        (WebCore::isIsolatedInline): Inline now supports Unicode-Bidi: Plaintext.
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::determineDirectionality): Generalized for inlines.
        (WebCore::constructBidiRuns): Added support for Unicode-Bidi: Plaintext as an isolated inline.
        (WebCore::RenderBlock::layoutRunsAndFloatsInRange): Fixed comment.
        (WebCore::RenderBlock::determineStartPosition): Fixed comment and switched to updated
        bidiFirstSkippingEmptyInlines.

2012-02-07  Kentaro Hara  <haraken@chromium.org>

        [Refactoring] Use the [IsWorkerContext] IDL in CodeGeneratorV8.pm
        https://bugs.webkit.org/show_bug.cgi?id=77957

        Reviewed by Adam Barth.

        This patch replaces IsSubType("WorkerContext") and something equivalent that
        with the [IsWorkerContext] IDL.

        No tests. No change in behavior.

        * bindings/scripts/CodeGeneratorV8.pm:
        (GetInternalFields):
        (GenerateConstructorGetter):
        (GenerateImplementation):

2012-02-07  David Reveman  <reveman@chromium.org>

        [Chromium] Crash when using per-tile painting on Windows.
        https://bugs.webkit.org/show_bug.cgi?id=75715

        Reviewed by James Robinson.

        PlatformCanvas constructor on win32 expects forth argument to be a
        shared section handle. Passing a pointer to a system memory causes
        it to crash. Fix this by not using the PlatformCanvas API for
        SkCanvas construction in per-tile texture uploader.

        Tested with manual tests.

        * platform/graphics/chromium/BitmapSkPictureCanvasLayerTextureUpdater.cpp:
        (WebCore::BitmapSkPictureCanvasLayerTextureUpdater::Texture::prepareRect):
        (WebCore::BitmapSkPictureCanvasLayerTextureUpdater::Texture::updateRect):
        * platform/graphics/chromium/BitmapSkPictureCanvasLayerTextureUpdater.h:
        (Texture):

2012-02-07  Jer Noble  <jer.noble@apple.com>

        Unreviewed build fix; make OSStatus the explicit return type for CMTimebase functions.

        * platform/mac/PlatformClockCM.mm:

2012-02-07  James Robinson  <jamesr@chromium.org>

        [chromium] Allow retaining texture across frames in composited video playback and correctly handle lost context
        https://bugs.webkit.org/show_bug.cgi?id=77923

        Reviewed by Kenneth Russell.

        Thanks to r106840, we can improve the video playback mode a bit. Instead of creating a new texture on every
        frame, this attempts to reuse the texture from the previous frame unless the context is lost. Also improves
        error checking in case the TextureManager cannot successfully reserve memory for the texture.

        Tested manually by killing the GPU process with an html5 video playing and verifying that the video playback
        continues and that we don't create a new set of textures for each plane on each frame.

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

2012-02-07  Matthew Delaney  <mdelaney@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=77912
        Removing old CG shadow code.
        
        A CG-specific shadow offset hack was added in http://trac.webkit.org/changeset/34317
        for this particular setShadow method. However, this shadow offset adjustment for CG
        has since moved down into platform specific code. Thus, this offset adjustment here
        is now redundant.

        The CG-only shadow setting code block in this setShadow method is now redundant.
        Since it sets the shadow values to the CGContext directly - and not to the State object -
        it will be overwritten later by any subsequent calls to setting shadow values such as
        blur, offset, or shadow color.

        Reviewed by Simon Fraser.

        No new tests. Current canvas tests cover this path.

        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::setShadow):

2012-02-07  James Robinson  <jamesr@chromium.org>

        [chromium] Gracefully handle compositor initialization failure in single-threaded proxy
        https://bugs.webkit.org/show_bug.cgi?id=78013

        Reviewed by Kenneth Russell.

        If compositor initialization fails it's not safe to proceed through the rest of the frame process. This adds
        some early outs.

        Tested manually by forcing the first makeContextCurrent() call fail.

        * platform/graphics/chromium/cc/CCLayerTreeHost.cpp:
        (WebCore::CCLayerTreeHost::updateLayers):
        * platform/graphics/chromium/cc/CCLayerTreeHost.h:
        (CCLayerTreeHost):
        * platform/graphics/chromium/cc/CCSingleThreadProxy.cpp:
        (WebCore::CCSingleThreadProxy::compositeAndReadback):
        (WebCore::CCSingleThreadProxy::compositeImmediately):
        (WebCore::CCSingleThreadProxy::commitIfNeeded):
        * platform/graphics/chromium/cc/CCSingleThreadProxy.h:
        (CCSingleThreadProxy):

2012-02-07  Brady Eidson  <beidson@apple.com>

        <rdar://problem/9567286> and https://bugs.webkit.org/show_bug.cgi?id=78003
        WebKit associates credentials with the wrong site if the authentication challenge takes place after a redirect chain

        Reviewed by Alexey Proskuryakov.

        Test: http/tests/loading/authentication-after-redirect-stores-wrong-credentials/authentication-after-redirect-stores-wrong-credentials.html

        Associate the credential with the URL of the challenge itself, not the original request:
        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::ResourceHandle::didReceiveAuthenticationChallenge): 
        (WebCore::ResourceHandle::receivedCredential):
        * platform/network/mac/ResourceHandleMac.mm:
        (WebCore::ResourceHandle::didReceiveAuthenticationChallenge):
        (WebCore::ResourceHandle::receivedCredential):

2012-02-07  Tony Chang  <tony@chromium.org>

        move warning about css values and render style constants closer to where it applies
        https://bugs.webkit.org/show_bug.cgi?id=78017

        Reviewed by Darin Adler.

        Move the warning about keeping RenderStyleConstnats.h enums and
        CSSValueKeywords.in values in the same order closer to the properties
        that the warning applies to. The warning was easy to miss and was
        confusing since it doesn't apply to most values.

        Also refactor 2 conversion functions to
        enumerate the possible values so the order doesn't matter.

        No new tests, just refactoring and comment cleanup.

        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::operator EListStylePosition): Name all possible values and add a NOT_REACHED().
        (WebCore::CSSPrimitiveValue::operator EUserModify): Name all possible values and add a NOT_REACHED().
        * css/CSSValueKeywords.in:
        * css/SVGCSSPropertyNames.in:
        * css/SVGCSSValueKeywords.in:
        * rendering/style/RenderStyleConstants.h:

2012-02-06  Jer Noble  <jer.noble@apple.com>

        Use CMClock as a timing source for PlatformClock where available.
        https://bugs.webkit.org/show_bug.cgi?id=77885

        Reviewed by Eric Carlson.

        No new tests; performance improvement covered by existing test cases.

        * WebCore.xcodeproj/project.pbxproj:
        * platform/Clock.cpp:
        (Clock::create): Use PlatformClockCM if available.
        * platform/mac/PlatformClockCM.h: Added.
        (WebCore::PlatformClockCM::playRate):
        (WebCore::PlatformClockCM::isRunning):
        * platform/mac/PlatformClockCM.mm: Added.
        (PlatformClockCM::PlatformClockCM):
        (PlatformClockCM::initializeWithTimingSource):
        (PlatformClockCM::setCurrentTime):
        (PlatformClockCM::currentTime):
        (PlatformClockCM::setPlayRate):
        (PlatformClockCM::start):
        (PlatformClockCM::stop):

2012-02-06  Anders Carlsson  <andersca@apple.com>

        ScrollableAreaSet should be moved from Page to FrameView
        https://bugs.webkit.org/show_bug.cgi?id=62762

        Reviewed by Beth Dakin.

        It makes more sense for the set of scrollable areas to be per frame view instead of per page;
        scrollable areas are associated with a containing frame view and their lifecycle follows the lifecycle of the
        frame view much more closely. This could even fix a bunch of crashes where a scrollable area outlived its containing page.

        * WebCore.exp.in:
        Replace the Page member functions with FrameView member functions instead.

        * page/EventHandler.cpp:
        (WebCore::EventHandler::mouseMoved):
        Check if the frame view contains the given layer.

        (WebCore::EventHandler::updateMouseEventTargetNode):
        Ditto.

        * page/FocusController.cpp:
        (WebCore::contentAreaDidShowOrHide):
        Add helper function.

        (WebCore::FocusController::setContainingWindowIsVisible):
        Call contentAreaDidShowOrHide for the main frame view, and for all scrollable areas
        inside all subframe views.

        * page/FrameView.cpp:
        (WebCore::FrameView::FrameView):
        Use early returns to make the code more clear. Also, don't add the scrollable area to the set here.

        (WebCore::FrameView::~FrameView):
        Don't remove the scrollable area here.

        (WebCore::FrameView::zoomAnimatorTransformChanged):
        m_page is gone so use m_frame->page() instead.

        (WebCore::FrameView::setAnimatorsAreActive):
        Call ScrollAnimator::setIsActive for all the scrollable areas in this frame view. Previously we used to do
        this for all scrollable areas on the page, but since setAnimatorsAreActive will be called for each document,
        this will be done implicitly.

        (WebCore::FrameView::notifyPageThatContentAreaWillPaint):
        Call ScrollableArea::contentDidPaint for this frame view and all its immediate scrollable areas. Previously, we used
        to do this for all scrollable areas on the page, but we only need to do it for this frame view.

        (WebCore::FrameView::scrollAnimatorEnabled):
        Get the page from m_frame since m_page is gone.

        (WebCore::FrameView::addScrollableArea):
        (WebCore::FrameView::removeScrollableArea):
        (WebCore::FrameView::containsScrollableArea):
        Move these member functions here from Page.

        (WebCore::FrameView::addChild):
        If we are adding a frame view, add it to the scrollable area set.

        (WebCore::FrameView::removeChild):
        If we are removing a frame view, remove it from the scrollable area set.

        * page/FrameView.h:
        Move the member function declarations and the scrollable area set member variable here from Page.

        * page/Page.cpp:
        (WebCore::Page::~Page):
        Don't call disconnectPage on the scrollable areas anymore.

        * platform/ScrollView.h:
        (ScrollView):
        Make addChild and removeChild virtual.

        * platform/ScrollableArea.h:
        Remove disconnectFromPage.

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::RenderLayer):
        (WebCore::RenderLayer::~RenderLayer):
        (WebCore::RenderLayer::styleChanged):
        The frame view now keeps track of the scrollable areas.

        * rendering/RenderLayer.h:
        Remove the page member variable and disconnectFromPage.

        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::RenderListBox):
        (WebCore::RenderListBox::~RenderListBox):
        The frame view now keeps track of the scrollable areas.

        * rendering/RenderListBox.h:
        Remove the page member variable and disconnectFromPage.

2012-02-07  Matthew Delaney  <mdelaney@apple.com>

        Remove redundant checks in CanvasRenderingContext2D.cpp
        https://bugs.webkit.org/show_bug.cgi?id=78000

        Reviewed by Dan Bernstein.

        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::setShadowColor):
        (WebCore::CanvasRenderingContext2D::setShadow):
        (WebCore::CanvasRenderingContext2D::drawImage):

2012-02-07  Abhishek Arya  <inferno@chromium.org>

        Crash in ContainerNode functions due to mutation events.
        https://bugs.webkit.org/show_bug.cgi?id=77999

        Reviewed by Ryosuke Niwa.

        Add RefPtr to protect premature deletion of this due to mutation events.

        Tests: fast/dom/remove-body-during-body-replacement.html
               fast/dom/remove-body-during-body-replacement2.html

        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::insertBefore):
        (WebCore::ContainerNode::replaceChild):
        (WebCore::ContainerNode::removeChild):
        (WebCore::ContainerNode::appendChild):

2012-02-07  Dana Jansens  <danakj@chromium.org>

        [Chromium] Memory bug during occlusion tracking if Vector::append() needs to reallocate the buffer
        https://bugs.webkit.org/show_bug.cgi?id=77996

        Reviewed by James Robinson.

        We're holding onto the last element in the Vector and then calling
        append(). If append() reallocates the Vector's buffer, the pointer
        is no longer valid.

        * platform/graphics/chromium/cc/CCLayerTreeHost.cpp:
        (WebCore::enterTargetRenderSurface):

2012-02-07  Abhishek Arya  <inferno@chromium.org>

        Crash due to column style not updated on post block
        in splitInlines.
        https://bugs.webkit.org/show_bug.cgi?id=77939

        Reviewed by Julien Chaffraix.

        Test: fast/multicol/span/split-inline-wrong-post-block-crash.html

        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::splitFlow):

2012-02-07  Peter Rybin  <peter.rybin@gmail.com>

        Web Inspector: CodeGeneratorInspector.py: extend Array validator functionality
        https://bugs.webkit.org/show_bug.cgi?id=77919

        Patch by Peter Rybin <peter.rybin@gmail.com> on 2012-02-07
        Reviewed by Yury Semikhatsky.

        Array validator method runtimeCast is added, internal backing method
        is moved from .cpp to .h (it's template anyway), boolean validator is
        supported.

        * inspector/CodeGeneratorInspector.py:
        (RawTypes.Bool.get_validate_method_params.ValidateMethodParams):
        (RawTypes.Bool.get_validate_method_params):
        (TypeBuilder):

2012-02-07  Dean Jackson  <dino@apple.com>

        Apple/Safari: Enable WebGL multisampling on ATI cards
        for OS X 10.7.2 and above.
        https://bugs.webkit.org/show_bug.cgi?id=77922

        Address review comments by Alexey Proskuryakov and Mark Rowe.

        * platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:
        (WebCore::systemAllowsMultisamplingOnATICards):

2012-02-07  Dean Jackson  <dino@apple.com>

        Apple/Safari: Enable WebGL multisampling on ATI cards
        for OS X 10.7.2 and above.
        https://bugs.webkit.org/show_bug.cgi?id=77922

        Reviewed by Chris Marrin.

        Follow Chrome's lead to allow WebGL antialiasing
        on ATI cards as long as we're on 10.7.2 and above.

        No new tests. Covered by existing tests.

        * platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:
        (WebCore::systemAllowsMultisamplingOnATICards):
        (WebCore):
        (WebCore::GraphicsContext3D::validateAttributes):

2012-02-07  Pavel Feldman  <pfeldman@google.com>

        Web Inspector: add generic support for undo-ing DOM edits.
        https://bugs.webkit.org/show_bug.cgi?id=77875

        Reviewed by Yury Semikhatsky.

        This change introduces InspectorHistory::Action that encapsulates all DOM modifications
        initiated by the inspector. There is a way to undo these actions up until the undoable
        state marker.

        Tests: inspector/elements/undo-dom-edits-2.html
               inspector/elements/undo-dom-edits.html
               inspector/styles/undo-add-property.html
               inspector/styles/undo-change-property.html
               inspector/styles/undo-property-toggle.html

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * inspector/Inspector.json:
        * inspector/InspectorAllInOne.cpp:
        * inspector/InspectorCSSAgent.cpp:
        (InspectorCSSAgent::StyleSheetAction):
        (WebCore::InspectorCSSAgent::StyleSheetAction::StyleSheetAction):
        (WebCore::InspectorCSSAgent::StyleSheetAction::perform):
        (WebCore::InspectorCSSAgent::StyleSheetAction::undo):
        (WebCore):
        (InspectorCSSAgent::SetStyleSheetTextAction):
        (WebCore::InspectorCSSAgent::SetStyleSheetTextAction::SetStyleSheetTextAction):
        (WebCore::InspectorCSSAgent::SetStyleSheetTextAction::perform):
        (WebCore::InspectorCSSAgent::SetStyleSheetTextAction::undo):
        (InspectorCSSAgent::SetPropertyTextAction):
        (WebCore::InspectorCSSAgent::SetPropertyTextAction::SetPropertyTextAction):
        (WebCore::InspectorCSSAgent::SetPropertyTextAction::toString):
        (WebCore::InspectorCSSAgent::SetPropertyTextAction::perform):
        (WebCore::InspectorCSSAgent::SetPropertyTextAction::undo):
        (WebCore::InspectorCSSAgent::SetPropertyTextAction::mergeId):
        (WebCore::InspectorCSSAgent::SetPropertyTextAction::merge):
        (InspectorCSSAgent::TogglePropertyAction):
        (WebCore::InspectorCSSAgent::TogglePropertyAction::TogglePropertyAction):
        (WebCore::InspectorCSSAgent::TogglePropertyAction::perform):
        (WebCore::InspectorCSSAgent::TogglePropertyAction::undo):
        (WebCore::InspectorCSSAgent::getStyleSheetText):
        (WebCore::InspectorCSSAgent::setStyleSheetText):
        (WebCore::InspectorCSSAgent::setPropertyText):
        (WebCore::InspectorCSSAgent::toggleProperty):
        * inspector/InspectorCSSAgent.h:
        (InspectorCSSAgent):
        * inspector/InspectorDOMAgent.cpp:
        (InspectorDOMAgent::DOMAction):
        (WebCore::InspectorDOMAgent::DOMAction::DOMAction):
        (WebCore::InspectorDOMAgent::DOMAction::perform):
        (WebCore::InspectorDOMAgent::DOMAction::undo):
        (WebCore):
        (InspectorDOMAgent::RemoveChildAction):
        (WebCore::InspectorDOMAgent::RemoveChildAction::RemoveChildAction):
        (WebCore::InspectorDOMAgent::RemoveChildAction::perform):
        (WebCore::InspectorDOMAgent::RemoveChildAction::undo):
        (InspectorDOMAgent::InsertBeforeAction):
        (WebCore::InspectorDOMAgent::InsertBeforeAction::InsertBeforeAction):
        (WebCore::InspectorDOMAgent::InsertBeforeAction::perform):
        (WebCore::InspectorDOMAgent::InsertBeforeAction::undo):
        (InspectorDOMAgent::RemoveAttributeAction):
        (WebCore::InspectorDOMAgent::RemoveAttributeAction::RemoveAttributeAction):
        (WebCore::InspectorDOMAgent::RemoveAttributeAction::perform):
        (WebCore::InspectorDOMAgent::RemoveAttributeAction::undo):
        (InspectorDOMAgent::SetAttributeAction):
        (WebCore::InspectorDOMAgent::SetAttributeAction::SetAttributeAction):
        (WebCore::InspectorDOMAgent::SetAttributeAction::perform):
        (WebCore::InspectorDOMAgent::SetAttributeAction::undo):
        (InspectorDOMAgent::SetOuterHTMLAction):
        (WebCore::InspectorDOMAgent::SetOuterHTMLAction::SetOuterHTMLAction):
        (WebCore::InspectorDOMAgent::SetOuterHTMLAction::perform):
        (WebCore::InspectorDOMAgent::SetOuterHTMLAction::undo):
        (WebCore::InspectorDOMAgent::SetOuterHTMLAction::newNode):
        (InspectorDOMAgent::ReplaceWholeTextAction):
        (WebCore::InspectorDOMAgent::ReplaceWholeTextAction::ReplaceWholeTextAction):
        (WebCore::InspectorDOMAgent::ReplaceWholeTextAction::perform):
        (WebCore::InspectorDOMAgent::ReplaceWholeTextAction::undo):
        (WebCore::InspectorDOMAgent::InspectorDOMAgent):
        (WebCore::InspectorDOMAgent::reset):
        (WebCore::InspectorDOMAgent::setAttributeValue):
        (WebCore::InspectorDOMAgent::setAttributesAsText):
        (WebCore::InspectorDOMAgent::removeAttribute):
        (WebCore::InspectorDOMAgent::removeNode):
        (WebCore::InspectorDOMAgent::setNodeName):
        (WebCore::InspectorDOMAgent::setOuterHTML):
        (WebCore::InspectorDOMAgent::setNodeValue):
        (WebCore::InspectorDOMAgent::moveTo):
        (WebCore::InspectorDOMAgent::undo):
        (WebCore::InspectorDOMAgent::markUndoableState):
        * inspector/InspectorDOMAgent.h:
        (InspectorDOMAgent):
        (WebCore::InspectorDOMAgent::history):
        * inspector/InspectorHistory.cpp: Added.
        (WebCore::InspectorHistory::Action::Action):
        (WebCore):
        (WebCore::InspectorHistory::Action::~Action):
        (WebCore::InspectorHistory::Action::toString):
        (WebCore::InspectorHistory::Action::isUndoableStateMark):
        (WebCore::InspectorHistory::Action::mergeId):
        (WebCore::InspectorHistory::Action::merge):
        (WebCore::InspectorHistory::InspectorHistory):
        (WebCore::InspectorHistory::~InspectorHistory):
        (WebCore::InspectorHistory::perform):
        (WebCore::InspectorHistory::markUndoableState):
        (WebCore::InspectorHistory::undo):
        (WebCore::InspectorHistory::reset):
        * inspector/InspectorHistory.h: Added.
        (WebCore):
        (InspectorHistory):
        (Action):
        * inspector/InspectorStyleSheet.cpp:
        (WebCore::InspectorStyle::setPropertyText):
        (WebCore::InspectorStyle::styleText):
        (WebCore::InspectorStyleSheet::addRule):
        (WebCore::InspectorStyleSheet::buildObjectForStyleSheet):
        (WebCore::InspectorStyleSheet::buildObjectForStyle):
        (WebCore::InspectorStyleSheet::setPropertyText):
        (WebCore::InspectorStyleSheet::getText):
        (WebCore::InspectorStyleSheetForInlineStyle::getText):
        * inspector/InspectorStyleSheet.h:
        (InspectorStyle):
        (InspectorStyleSheet):
        (InspectorStyleSheetForInlineStyle):
        * inspector/front-end/CSSStyleModel.js:
        (WebInspector.CSSProperty.prototype.setText):
        * inspector/front-end/ElementsPanel.js:
        (WebInspector.ElementsPanel.prototype._selectedNodeChanged):
        (WebInspector.ElementsPanel.prototype._updateSidebars):
        (WebInspector.ElementsPanel.prototype.handleShortcut):
        * inspector/front-end/StylesSidebarPane.js:
        (WebInspector.StylePropertiesSection.prototype.onpopulate):
        (WebInspector.StylePropertiesSection.prototype.addNewBlankProperty):
        (WebInspector.ComputedStylePropertiesSection.prototype.onpopulate):
        (WebInspector.StylePropertyTreeElement):
        (WebInspector.StylePropertyTreeElement.prototype):

2012-02-07  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r106935.
        http://trac.webkit.org/changeset/106935
        https://bugs.webkit.org/show_bug.cgi?id=77994

        "Crashes runMultiThread webkit_unit_test" (Requested by tonyg-
        cr on #webkit).

        * platform/graphics/chromium/cc/CCLayerTreeHost.cpp:
        (WebCore::CCLayerTreeHost::setNeedsRedraw):
        * platform/graphics/chromium/cc/CCSingleThreadProxy.cpp:
        (WebCore::CCSingleThreadProxy::setNeedsRedraw):
        * platform/graphics/chromium/cc/CCThreadProxy.cpp:
        (WebCore::CCThreadProxy::setNeedsRedraw):
        * platform/graphics/chromium/cc/CCThreadProxy.h:
        (CCThreadProxy):

2012-02-07  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r106932.
        http://trac.webkit.org/changeset/106932
        https://bugs.webkit.org/show_bug.cgi?id=77988

        Breaks Mac bots (Requested by pfeldman on #webkit).

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * inspector/Inspector.json:
        * inspector/InspectorAllInOne.cpp:
        * inspector/InspectorCSSAgent.cpp:
        (WebCore::InspectorCSSAgent::getStyleSheetText):
        (WebCore::InspectorCSSAgent::setStyleSheetText):
        (WebCore::InspectorCSSAgent::setPropertyText):
        (WebCore::InspectorCSSAgent::toggleProperty):
        * inspector/InspectorCSSAgent.h:
        (InspectorCSSAgent):
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::InspectorDOMAgent):
        (WebCore::InspectorDOMAgent::reset):
        (WebCore::InspectorDOMAgent::setAttributeValue):
        (WebCore::InspectorDOMAgent::setAttributesAsText):
        (WebCore::InspectorDOMAgent::removeAttribute):
        (WebCore::InspectorDOMAgent::removeNode):
        (WebCore::InspectorDOMAgent::setNodeName):
        (WebCore::InspectorDOMAgent::setOuterHTML):
        (WebCore::InspectorDOMAgent::setNodeValue):
        (WebCore::InspectorDOMAgent::moveTo):
        * inspector/InspectorDOMAgent.h:
        (InspectorDOMAgent):
        * inspector/InspectorHistory.cpp: Removed.
        * inspector/InspectorHistory.h: Removed.
        * inspector/InspectorStyleSheet.cpp:
        (WebCore::InspectorStyle::setPropertyText):
        (WebCore::InspectorStyle::styleText):
        (WebCore::InspectorStyleSheet::addRule):
        (WebCore::InspectorStyleSheet::buildObjectForStyleSheet):
        (WebCore::InspectorStyleSheet::buildObjectForStyle):
        (WebCore::InspectorStyleSheet::setPropertyText):
        (WebCore::InspectorStyleSheet::text):
        (WebCore::InspectorStyleSheetForInlineStyle::text):
        * inspector/InspectorStyleSheet.h:
        (InspectorStyle):
        (InspectorStyleSheet):
        (InspectorStyleSheetForInlineStyle):
        * inspector/front-end/CSSStyleModel.js:
        (WebInspector.CSSProperty.prototype.setText):
        * inspector/front-end/ElementsPanel.js:
        (WebInspector.ElementsPanel.prototype._selectedNodeChanged):
        (WebInspector.ElementsPanel.prototype.handleShortcut):
        * inspector/front-end/StylesSidebarPane.js:
        (WebInspector.StylePropertiesSection.prototype.onpopulate):
        (WebInspector.StylePropertiesSection.prototype.addNewBlankProperty):
        (WebInspector.ComputedStylePropertiesSection.prototype.onpopulate):
        (WebInspector.StylePropertyTreeElement):
        (WebInspector.StylePropertyTreeElement.prototype):

2012-02-07  Priit Laes  <plaes@plaes.org>

        [GTK] Build failure with --enable-web-audio
        https://bugs.webkit.org/show_bug.cgi?id=77978

        Reviewed by Gustavo Noronha Silva.

        * GNUmakefile.list.am: Include AudioSourceProviderClient.h

2012-02-07  Alexei Filippov  <alexeif@chromium.org>

        Web Inspector: fix objects duplication when switching filter in heap profiler.
        https://bugs.webkit.org/show_bug.cgi?id=77974

        Reviewed by Yury Semikhatsky.

        * inspector/front-end/DetailedHeapshotView.js:
        (WebInspector.HeapSnapshotConstructorsDataGrid.prototype.populateChildren):

2012-02-07  Jonathan Backer  <backer@chromium.org>

        [chromium] Add setNeedsRedraw to WebWidget
        https://bugs.webkit.org/show_bug.cgi?id=77555

        Reviewed by James Robinson.

        * platform/graphics/chromium/cc/CCLayerTreeHost.cpp:
        (WebCore::CCLayerTreeHost::setNeedsRedraw):
        * platform/graphics/chromium/cc/CCSingleThreadProxy.cpp:
        (WebCore::CCSingleThreadProxy::setNeedsRedraw):
        * platform/graphics/chromium/cc/CCThreadProxy.cpp:
        (WebCore::CCThreadProxy::setNeedsRedraw):
        (WebCore::CCThreadProxy::resetDamageTrackerOnImplThread):
        (WebCore):
        * platform/graphics/chromium/cc/CCThreadProxy.h:
        (CCThreadProxy):

2012-02-07  Michael Brüning  <michael.bruning@nokia.com>

        [Qt][WK2] Compute and set cache capacities using the current CacheModel
        https://bugs.webkit.org/show_bug.cgi?id=73918

        Reviewed by Kenneth Rohde Christiansen.

        No new tests. (build fix)

        * platform/qt/FileSystemQt.cpp:
        (WebCore::getVolumeFreeSizeForPath):

2012-02-07  Pavel Feldman  <pfeldman@google.com>

        Web Inspector: add generic support for undo-ing DOM edits.
        https://bugs.webkit.org/show_bug.cgi?id=77875

        Reviewed by Yury Semikhatsky.

        This change introduces InspectorHistory::Action that encapsulates all DOM modifications
        initiated by the inspector. There is a way to undo these actions up until the undoable
        state marker.

        Tests: inspector/elements/undo-dom-edits-2.html
               inspector/elements/undo-dom-edits.html
               inspector/styles/undo-add-property.html
               inspector/styles/undo-change-property.html
               inspector/styles/undo-property-toggle.html

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * inspector/Inspector.json:
        * inspector/InspectorAllInOne.cpp:
        * inspector/InspectorCSSAgent.cpp:
        (InspectorCSSAgent::StyleSheetAction):
        (WebCore::InspectorCSSAgent::StyleSheetAction::StyleSheetAction):
        (WebCore::InspectorCSSAgent::StyleSheetAction::perform):
        (WebCore::InspectorCSSAgent::StyleSheetAction::undo):
        (WebCore):
        (InspectorCSSAgent::SetStyleSheetTextAction):
        (WebCore::InspectorCSSAgent::SetStyleSheetTextAction::SetStyleSheetTextAction):
        (WebCore::InspectorCSSAgent::SetStyleSheetTextAction::perform):
        (WebCore::InspectorCSSAgent::SetStyleSheetTextAction::undo):
        (InspectorCSSAgent::SetPropertyTextAction):
        (WebCore::InspectorCSSAgent::SetPropertyTextAction::SetPropertyTextAction):
        (WebCore::InspectorCSSAgent::SetPropertyTextAction::toString):
        (WebCore::InspectorCSSAgent::SetPropertyTextAction::perform):
        (WebCore::InspectorCSSAgent::SetPropertyTextAction::undo):
        (WebCore::InspectorCSSAgent::SetPropertyTextAction::mergeId):
        (WebCore::InspectorCSSAgent::SetPropertyTextAction::merge):
        (InspectorCSSAgent::TogglePropertyAction):
        (WebCore::InspectorCSSAgent::TogglePropertyAction::TogglePropertyAction):
        (WebCore::InspectorCSSAgent::TogglePropertyAction::perform):
        (WebCore::InspectorCSSAgent::TogglePropertyAction::undo):
        (WebCore::InspectorCSSAgent::getStyleSheetText):
        (WebCore::InspectorCSSAgent::setStyleSheetText):
        (WebCore::InspectorCSSAgent::setPropertyText):
        (WebCore::InspectorCSSAgent::toggleProperty):
        * inspector/InspectorCSSAgent.h:
        (InspectorCSSAgent):
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::InspectorDOMAgent):
        (WebCore::InspectorDOMAgent::reset):
        (WebCore::InspectorDOMAgent::setAttributeValue):
        (WebCore::InspectorDOMAgent::setAttributesAsText):
        (WebCore::InspectorDOMAgent::removeAttribute):
        (WebCore::InspectorDOMAgent::removeNode):
        (WebCore::InspectorDOMAgent::setNodeName):
        (WebCore::InspectorDOMAgent::setOuterHTML):
        (WebCore::InspectorDOMAgent::setNodeValue):
        (WebCore::InspectorDOMAgent::moveTo):
        (WebCore::InspectorDOMAgent::undo):
        (WebCore):
        (WebCore::InspectorDOMAgent::markUndoableState):
        * inspector/InspectorDOMAgent.h:
        (InspectorDOMAgent):
        (WebCore::InspectorDOMAgent::history):
        * inspector/InspectorHistory.cpp: Added.
        (WebCore::InspectorHistory::Action::Action):
        (WebCore):
        (WebCore::InspectorHistory::Action::~Action):
        (WebCore::InspectorHistory::Action::toString):
        (WebCore::InspectorHistory::Action::isUndoableStateMark):
        (WebCore::InspectorHistory::Action::mergeId):
        (WebCore::InspectorHistory::Action::merge):
        (WebCore::InspectorHistory::InspectorHistory):
        (WebCore::InspectorHistory::~InspectorHistory):
        (WebCore::InspectorHistory::perform):
        (WebCore::InspectorHistory::markUndoableState):
        (WebCore::InspectorHistory::undo):
        (WebCore::InspectorHistory::reset):
        * inspector/InspectorHistory.h: Added.
        (WebCore):
        (InspectorHistory):
        (Action):
        * inspector/InspectorStyleSheet.cpp:
        (WebCore::InspectorStyle::setPropertyText):
        (WebCore::InspectorStyle::styleText):
        (WebCore::InspectorStyleSheet::addRule):
        (WebCore::InspectorStyleSheet::buildObjectForStyleSheet):
        (WebCore::InspectorStyleSheet::buildObjectForStyle):
        (WebCore::InspectorStyleSheet::setPropertyText):
        (WebCore::InspectorStyleSheet::getText):
        (WebCore::InspectorStyleSheetForInlineStyle::getText):
        * inspector/InspectorStyleSheet.h:
        (InspectorStyle):
        (InspectorStyleSheet):
        (InspectorStyleSheetForInlineStyle):
        * inspector/front-end/CSSStyleModel.js:
        (WebInspector.CSSProperty.prototype.setText):
        * inspector/front-end/ElementsPanel.js:
        (WebInspector.ElementsPanel.prototype._selectedNodeChanged):
        (WebInspector.ElementsPanel.prototype._updateSidebars):
        (WebInspector.ElementsPanel.prototype.handleShortcut):
        * inspector/front-end/StylesSidebarPane.js:
        (WebInspector.StylePropertiesSection.prototype.onpopulate):
        (WebInspector.StylePropertiesSection.prototype.addNewBlankProperty):
        (WebInspector.ComputedStylePropertiesSection.prototype.onpopulate):
        (WebInspector.StylePropertyTreeElement):
        (WebInspector.StylePropertyTreeElement.prototype):

2012-02-07  Chris Guan  <chris.guan@torchmobile.com.cn>

        [Blackberry] Clean up Networkjob and Networkmanger: remove unused variables in release build and change some public functions into be private ones
        https://bugs.webkit.org/show_bug.cgi?id=77926

        Reviewed by Rob Buis.

        1. rename clientIsOk to isClientAvailable.
        2. m_isRunning is only for an ASSERT in NetWorkManager, So move out from
        release build but keep available in debug build.
        
        No changes in behavior, so no new tests.

        * platform/network/blackberry/NetworkJob.cpp:
        (WebCore::NetworkJob::NetworkJob):
        (WebCore::NetworkJob::handleNotifyDataReceived):
        (WebCore::NetworkJob::handleNotifyDataSent):
        (WebCore::NetworkJob::handleNotifyClose):
        (WebCore::NetworkJob::startNewJobWithRequest):
        (WebCore::NetworkJob::sendResponseIfNeeded):
        (WebCore::NetworkJob::sendMultipartResponseIfNeeded):
        * platform/network/blackberry/NetworkJob.h:
        (NetworkJob):
        (WebCore::NetworkJob::isClientAvailable):

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

        Web Inspector: don't mark object is queriable if it is only reachable by internal reference
        https://bugs.webkit.org/show_bug.cgi?id=77877

        Reviewed by Pavel Feldman.

        * inspector/front-end/HeapSnapshot.js:
        (WebInspector.HeapSnapshot.prototype._markQueriableHeapObjects):

2012-02-07  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r106909.
        http://trac.webkit.org/changeset/106909
        https://bugs.webkit.org/show_bug.cgi?id=77965

        ~20 tests are crashing on chromium win release bot. (Requested
        by loislo on #webkit).

        * html/HTMLDetailsElement.cpp:
        (WebCore::HTMLDetailsElement::createShadowSubtree):
        * html/HTMLKeygenElement.cpp:
        (WebCore::HTMLKeygenElement::HTMLKeygenElement):
        * html/HTMLMeterElement.cpp:
        (WebCore::HTMLMeterElement::createShadowSubtree):
        * html/HTMLProgressElement.cpp:
        (WebCore::HTMLProgressElement::createShadowSubtree):
        * html/HTMLSummaryElement.cpp:
        (WebCore::HTMLSummaryElement::createShadowSubtree):
        * html/HTMLTextAreaElement.cpp:
        (WebCore::HTMLTextAreaElement::createShadowSubtree):

2012-02-07  Andreas Kling  <awesomekling@apple.com>

        REGRESSION(r106819): ~28% or so performance regression on the ManInBlue HTML benchmark
        <http://webkit.org/b/77952>

        Reviewed by Andreas Kling.
        Patch by Ryosuke Niwa.

        The performance regression was caused by using ensureAttributeData() which forces the
        regeneration of invalidated attributes ("style" and SVG animatable attributes.)
        Added an ensureAttributeDataWithoutUpdate() helper that only ensures the presence
        of ElementAttributeData, not the validity of its contents. Use that when grabbing
        at an element's inline and attribute styles.

        * dom/Element.h:
        (Element):
        (WebCore::Element::ensureAttributeDataWithoutUpdate):
        * dom/StyledElement.h:
        (WebCore::StyledElement::ensureInlineStyleDecl):
        (WebCore::StyledElement::ensureAttributeStyle):

2012-02-07  Michael Brüning  <michael.bruning@nokia.com>

        [Qt][WK2] Compute and set cache capacities using the current CacheModel
        https://bugs.webkit.org/show_bug.cgi?id=73918

        Reviewed by Csaba Osztrogonác.

        No new tests. (build fix).

        * platform/qt/FileSystemQt.cpp:

2012-02-07  Michael Brüning  <michael.bruning@nokia.com>

        [Qt][WK2] Compute and set cache capacities using the current CacheModel
        https://bugs.webkit.org/show_bug.cgi?id=73918

        Reviewed by Kenneth Rohde Christiansen.

        No new tests. (Not applicable)

        Added OS-specific implementation for retrieving the free disk space.

        * platform/FileSystem.h:
        (WebCore):
        * platform/qt/FileSystemQt.cpp:
        (WebCore::getVolumeFreeSizeForPath):
        (WebCore):

2012-02-07  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        [Inspector] Add the Nokia N9 user agent
        https://bugs.webkit.org/show_bug.cgi?id=77949

        Reviewed by Simon Hausmann.

        * inspector/front-end/SettingsScreen.js:
        (WebInspector.SettingsScreen.prototype._createUserAgentSelectRowElement.get const):

2012-02-07  Alexander Pavlov  <apavlov@chromium.org>

        [CRASH] bool EventHandler::dispatchSyntheticTouchEventIfEnabled(const PlatformMouseEvent& event) references a NULL pointer
        https://bugs.webkit.org/show_bug.cgi?id=77953

        Reviewed by Andreas Kling.

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

2012-02-07  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r106912.
        http://trac.webkit.org/changeset/106912
        https://bugs.webkit.org/show_bug.cgi?id=77947

        "AppleWebKit build is broken" (Requested by haraken on
        #webkit).

        * dom/ScriptExecutionContext.cpp:
        (WebCore::ScriptExecutionContext::~ScriptExecutionContext):
        (WebCore):
        * dom/ScriptExecutionContext.h:
        (WebCore):
        (ScriptExecutionContext):
        * html/DOMURL.cpp:
        (WebCore::DOMURL::DOMURL):
        (WebCore):
        (WebCore::DOMURL::~DOMURL):
        (WebCore::DOMURL::contextDestroyed):
        (WebCore::DOMURL::createObjectURL):
        (WebCore::DOMURL::revokeObjectURL):
        * html/DOMURL.h:
        (WebCore::DOMURL::create):
        (DOMURL):
        * html/DOMURL.idl:
        * html/PublicURLManager.h: Removed.
        * page/DOMWindow.cpp:
        (WebCore):
        (WebCore::DOMWindow::webkitURL):
        * page/DOMWindow.h:
        (DOMWindow):
        * page/DOMWindow.idl:
        * workers/WorkerContext.cpp:
        (WebCore):
        (WebCore::WorkerContext::webkitURL):
        * workers/WorkerContext.h:
        (WorkerContext):
        * workers/WorkerContext.idl:

2012-02-07  Kentaro Hara  <haraken@chromium.org>

        Unreviewed, rolling out r106862.
        http://trac.webkit.org/changeset/106862
        https://bugs.webkit.org/show_bug.cgi?id=77510

        Mac build fails if we manually remove generated code

        * DerivedSources.make:
        * bindings/scripts/generate-bindings.pl:
        (generateEmptyHeaderAndCpp):
        * bindings/scripts/resolve-supplemental.pl:
        * bindings/scripts/update-idl-needs-rebuild.pl: Removed.

2012-02-07  Kaustubh Atrawalkar  <kaustubh@motorola.com>

        Migrate createObjectURL & revokeObjectURL to static (Class) methods.
        https://bugs.webkit.org/show_bug.cgi?id=74386

        Reviewed by David Levin.

        Test: fast/dom/DOMURL/check-instanceof-domurl-functions.html
        Already Existing:
            fast/files/revoke-blob-url.html
            fast/dom/window-domurl-crash.html
            fast/files/apply-blob-url-to-img.html
            fast/files/create-blob-url-crash.html
            fast/files/workers/inline-worker-via-blob-url.html

        * dom/ScriptExecutionContext.cpp:
        (WebCore::ScriptExecutionContext::fileThread):
        (WebCore):
        (WebCore::ScriptExecutionContext::publicURLManager):
        * dom/ScriptExecutionContext.h:
        (WebCore):
        (ScriptExecutionContext):
        * html/DOMURL.cpp:
        (WebCore):
        (WebCore::DOMURL::createObjectURL): Changed to static.
        (WebCore::DOMURL::revokeObjectURL): ditto.
        * html/DOMURL.h:
        (DOMURL):
        (WebCore::DOMURL::create):
        * html/DOMURL.idl:
        * html/PublicURLManager.h: Added.
        (WebCore):
        (PublicURLManager):
        (WebCore::PublicURLManager::create):
        (WebCore::PublicURLManager::contextDestroyed):
        (WebCore::PublicURLManager::blobURLs):
        (WebCore::PublicURLManager::streamURLs):
        * page/DOMWindow.cpp: Removed object initialization for DOMURL.
        (WebCore):
        * page/DOMWindow.h: ditto.
        (DOMWindow):
        * page/DOMWindow.idl:
        * workers/WorkerContext.cpp:
        (WebCore):
        * workers/WorkerContext.h:
        (WorkerContext):
        * workers/WorkerContext.idl:

2012-02-03  Vsevolod Vlasov  <vsevik@chromium.org>

        http/tests/inspector/indexeddb/database-structure.html failing on chromium win/linux
        https://bugs.webkit.org/show_bug.cgi?id=77661

        Reviewed by Yury Semikhatsky.

        * inspector/InspectorIndexedDBAgent.cpp:
        (WebCore):

2012-02-07  Hayato Ito  <hayato@chromium.org>

        Fix build on Mac with '--shadow-dom'.
        https://bugs.webkit.org/show_bug.cgi?id=77940

        Reviewed by Hajime Morita.

        * WebCore.xcodeproj/project.pbxproj:

2012-02-06  Shinya Kawanaka  <shinyak@google.com>

        Stop calling Element::ensureShadowRoot() if it is used in construction phase.
        https://bugs.webkit.org/show_bug.cgi?id=77929

        Reviewed by Hajime Morita.

        ShadowRoot's life cycle can be consufing If Element::ensureShadowRoot() is used.
        So we want to remove Element::ensureShadowRoot().
        This patch replaces Element::ensureShadowRoot() if it is used in object construction phase.

        No new tests, no change in behavior.

        * html/HTMLDetailsElement.cpp:
        (WebCore::HTMLDetailsElement::createShadowSubtree):
        * html/HTMLKeygenElement.cpp:
        (WebCore::HTMLKeygenElement::HTMLKeygenElement):
        * html/HTMLMeterElement.cpp:
        (WebCore::HTMLMeterElement::createShadowSubtree):
        * html/HTMLProgressElement.cpp:
        (WebCore::HTMLProgressElement::createShadowSubtree):
        * html/HTMLSummaryElement.cpp:
        (WebCore::HTMLSummaryElement::createShadowSubtree):
        * html/HTMLTextAreaElement.cpp:
        (WebCore::HTMLTextAreaElement::createShadowSubtree):

2012-02-06  Shinya Kawanaka  <shinyak@google.com>

        Remove Element::ensureShadowRoot export.
        https://bugs.webkit.org/show_bug.cgi?id=77932

        Reviewed by Hajime Morita.

        Removes Element::ensureShadowRoot export.

        No new tests, no change in behavior.

        * WebCore.exp.in:

2012-02-06  Ilya Tikhonovsky  <loislo@chromium.org>

        Unreviewed. Web Inspector: rename Artificial to Synthetic according to v8 patch r10614.

        * inspector/front-end/DetailedHeapshotGridNodes.js:
        * inspector/front-end/HeapSnapshot.js:
        (WebInspector.HeapSnapshotNode.prototype.get isSynthetic):
        (WebInspector.HeapSnapshot.prototype._init):

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

        Implement querySelector on ShadowRoot.
        https://bugs.webkit.org/show_bug.cgi?id=77714

        Reviewed by Dimitri Glazkov.

        * dom/SelectorQuery.cpp:
        (WebCore::nodeIsRootNodeOfTreeScope):
        (WebCore):
        (WebCore::SelectorDataList::execute):

2012-02-06  Martin Robinson  <mrobinson@igalia.com> and Nayan Kumar K  <nayankk@motorola.com>

        [GTK] Add TextureMapperGL implementation
        https://bugs.webkit.org/show_bug.cgi?id=75308

        Reviewed by Alejandro G. Castro.

        No new tests. This will be covered by accelerated compositing and
        3D CSS transform tests eventually.

        * GNUmakefile.list.am: Added some files necessary to build TextureMapperGL.
        * platform/graphics/cairo/TextureMapperGLCairo.cpp: Added implementations.
        * platform/graphics/cairo/TextureMapperGLCairo.h: Updated member list.
        * platform/graphics/gtk/WindowGLContext.h: Added.
        * platform/graphics/gtk/WindowGLContextGLX.cpp: Added.
        * platform/graphics/opengl/TextureMapperGL.cpp: Use the GL shims on GTK.

2012-02-06  Emil A Eklund  <eae@chromium.org>

        Change baselinePosition and lineHeight to LayoutUnit
        https://bugs.webkit.org/show_bug.cgi?id=77905

        Reviewed by Eric Seidel.

        Change the virtual baselinePosition and lineHeight methods to return
        LayoutUnits as they are both computed from the height and top/bottom
        margins (or width and left/right margins for vertical text), all of
        which are LayoutUnits.

        No new tests.

        * platform/efl/RenderThemeEfl.cpp:
        (WebCore::RenderThemeEfl::baselinePosition):
        * platform/efl/RenderThemeEfl.h:
        (RenderThemeEfl):
        * platform/gtk/RenderThemeGtk.cpp:
        (WebCore::RenderThemeGtk::baselinePosition):
        * platform/gtk/RenderThemeGtk.h:
        (RenderThemeGtk):
        * platform/qt/RenderThemeQt.cpp:
        (WebCore::RenderThemeQt::baselinePosition):
        * platform/qt/RenderThemeQt.h:
        (RenderThemeQt):
        * rendering/RenderListMarker.cpp:
        (WebCore::RenderListMarker::lineHeight):
        (WebCore::RenderListMarker::baselinePosition):
        * rendering/RenderListMarker.h:
        (RenderListMarker):
        * rendering/RenderSlider.cpp:
        (WebCore::RenderSlider::baselinePosition):
        * rendering/RenderSlider.h:
        (RenderSlider):
        * rendering/RootInlineBox.h:
        (WebCore::RootInlineBox::baselinePosition):
        (WebCore::RootInlineBox::lineHeight):
        * rendering/mathml/RenderMathMLFraction.cpp:
        (WebCore::RenderMathMLFraction::baselinePosition):
        * rendering/mathml/RenderMathMLFraction.h:
        (RenderMathMLFraction):
        * rendering/mathml/RenderMathMLOperator.cpp:
        (WebCore::RenderMathMLOperator::baselinePosition):
        * rendering/mathml/RenderMathMLOperator.h:
        (RenderMathMLOperator):
        * rendering/mathml/RenderMathMLRow.cpp:
        (WebCore::RenderMathMLRow::baselinePosition):
        * rendering/mathml/RenderMathMLRow.h:
        (RenderMathMLRow):
        * rendering/mathml/RenderMathMLSubSup.cpp:
        (WebCore::RenderMathMLSubSup::baselinePosition):
        * rendering/mathml/RenderMathMLSubSup.h:
        (RenderMathMLSubSup):
        * rendering/mathml/RenderMathMLUnderOver.cpp:
        (WebCore::RenderMathMLUnderOver::baselinePosition):
        * rendering/mathml/RenderMathMLUnderOver.h:
        (RenderMathMLUnderOver):

2012-02-06  Xianzhu Wang  <wangxianzhu@chromium.org>

        Avoid Page::updateViewportArguments() if the causing frame is not the main frame
        https://bugs.webkit.org/show_bug.cgi?id=77387

        Reviewed by Kenneth Rohde Christiansen.

        * dom/Document.cpp:
        (WebCore::Document::processViewport):
        (WebCore::Document::updateViewportArguments):
        (WebCore::Document::setInPageCache):
        * dom/Document.h:
        (Document):
        * html/HTMLBodyElement.cpp:
        (WebCore::HTMLBodyElement::insertedIntoDocument):
        * page/Frame.cpp:
        (WebCore::Frame::setDocument):
        * page/Page.cpp:
        (WebCore::Page::viewportArguments):
        (WebCore):
        * page/Page.h:
        (Page):

2012-02-06  Martin Robinson  <mrobinson@igalia.com>

        Fix some miscellaneous 'make dist' error for WebKitGTK+.

        * GNUmakefile.list.am: Add some missing Shadow DOM files to the
        source list.

2012-02-06  Dana Jansens  <danakj@chromium.org>

        Add contains() test to Region
        https://bugs.webkit.org/show_bug.cgi?id=72294

        Reviewed by Anders Carlsson.

        * platform/graphics/Region.cpp:
        (WebCore::Region::contains):
        (WebCore):
        * platform/graphics/Region.h:
        (Region):
        (Shape):
        (WebCore::operator==):
        (WebCore):

2012-02-06  Kentaro Hara  <haraken@chromium.org>

        Rename [DontCheckEnums], [ReturnsNew], [DoNotCheckDomainSecurityOnGet],
        [DoNotCheckDomainSecurityOnSet] and [ImplementationFunction] IDLs
        https://bugs.webkit.org/show_bug.cgi?id=77852

        Reviewed by Adam Barth.

        This patch renames [DontCheckEnums], [ReturnsNew], [DoNotCheckDomainSecurityOnGet],
        [DoNotCheckDomainSecurityOnSet] and [ImplementationFunction] IDLs for clarification.

        [DontCheckEnums] => [DoNotCheckConstants]  (This IDL inserts assertions to check if a
        constant value is equal to the expected constant value)
        [ReturnsNew] => [ReturnNewObject] (For clarification)
        [DoNotCheckDomainSecurityOnGet] => [DoNotCheckDomainSecurityOnGetter] (For naming consistency
        with other [*Getter] IDLs)
        [DoNotCheckDomainSecurityOnSet] => [DoNotCheckDomainSecurityOnSetter] (For naming consistency
        with other [*Setter] IDLs)
        [ImplementationFunction=] => [ImplementedAs=] (For clarification. This IDL specifies a method
        name in implementation)

        No tests. No change in behavior.

        * bindings/scripts/CodeGenerator.pm:
        (ShouldCheckEnums):
        (GenerateCompileTimeCheckForEnumsIfNeeded):
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateHeader):
        (GenerateImplementation):
        (NativeToJSValue):
        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateSingleBatchedAttribute):
        (GenerateFunctionCallString):
        (NativeToJSValue):

        * bindings/scripts/test/TestObj.idl:
        * bindings/scripts/test/TestTypedArray.idl:

        * bindings/scripts/test/JS/JSTestInterface.cpp:
        (WebCore):
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore):
        * bindings/scripts/test/V8/V8TestInterface.cpp:
        (WebCore):
        * bindings/scripts/test/V8/V8TestObj.cpp:
        (WebCore):

        * css/WebKitCSSFilterValue.idl:
        * css/WebKitCSSTransformValue.idl:
        * dom/DOMCoreException.idl:
        * dom/Document.idl:
        * dom/EventException.idl:
        * dom/RangeException.idl:
        * fileapi/FileException.idl:
        * fileapi/OperationNotAllowedException.idl:
        * html/HTMLFormElement.idl:
        * html/canvas/Float32Array.idl:
        * html/canvas/Float64Array.idl:
        * html/canvas/Int16Array.idl:
        * html/canvas/Int32Array.idl:
        * html/canvas/Int8Array.idl:
        * html/canvas/OESStandardDerivatives.idl:
        * html/canvas/OESVertexArrayObject.idl:
        * html/canvas/Uint16Array.idl:
        * html/canvas/Uint32Array.idl:
        * html/canvas/Uint8Array.idl:
        * html/canvas/Uint8ClampedArray.idl:
        * html/canvas/WebGLCompressedTextures.idl:
        * html/canvas/WebGLDebugRendererInfo.idl:
        * html/canvas/WebGLRenderingContext.idl:
        * inspector/JavaScriptCallFrame.idl:
        * loader/appcache/DOMApplicationCache.idl:
        * page/Console.idl:
        * page/DOMWindow.idl:
        * page/Location.idl:
        * storage/IDBCursor.idl:
        * storage/IDBDatabaseException.idl:
        * storage/IDBObjectStore.idl:
        * storage/SQLException.idl:
        * svg/SVGComponentTransferFunctionElement.idl:
        * svg/SVGException.idl:
        * svg/SVGFEBlendElement.idl:
        * svg/SVGFEColorMatrixElement.idl:
        * svg/SVGFECompositeElement.idl:
        * svg/SVGFEConvolveMatrixElement.idl:
        * svg/SVGFEDisplacementMapElement.idl:
        * svg/SVGFEMorphologyElement.idl:
        * svg/SVGFETurbulenceElement.idl:
        * svg/SVGGradientElement.idl:
        * xml/XMLHttpRequestException.idl:
        * xml/XPathException.idl:

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

        [chromium] canvas demo is slow due to unnecessary resource cleanups
        https://bugs.webkit.org/show_bug.cgi?id=77135

        Reviewed by Kenneth Russell.

        This defers dropping a ManagedTexture until it is evicted by the manager, the layer is destroyed, the
        TextureManager is destroyed, or the layer is added to a CCLayerTreeHost that has a different texture manager. In
        particular, removing a layer from a CCLayerTreeHost and then adding it back to the same host does not drop any
        ManagedTextures unless the manager has to evict it for other reasons. This provides a big speedup on sites that
        rebuild the compositing tree frequently.

        New unit test added for ManagedTexture / TextureManager interaction.

        * platform/graphics/chromium/Canvas2DLayerChromium.cpp:
        (WebCore::Canvas2DLayerChromium::setLayerTreeHost):
        (WebCore::Canvas2DLayerChromium::setTextureManager):
        * platform/graphics/chromium/Canvas2DLayerChromium.h:
        (Canvas2DLayerChromium):
        * platform/graphics/chromium/LayerChromium.cpp:
        (WebCore::LayerChromium::setLayerTreeHost):
        * platform/graphics/chromium/LayerChromium.h:
        (LayerChromium):
        * platform/graphics/chromium/ManagedTexture.cpp:
        (WebCore::ManagedTexture::setTextureManager):
        (WebCore):
        (WebCore::ManagedTexture::steal):
        (WebCore::ManagedTexture::clear):
        * platform/graphics/chromium/ManagedTexture.h:
        (ManagedTexture):
        * platform/graphics/chromium/RenderSurfaceChromium.h:
        (RenderSurfaceChromium):
        * platform/graphics/chromium/TiledLayerChromium.cpp:
        (WebCore::TiledLayerChromium::setLayerTreeHost):
        (WebCore):
        (WebCore::TiledLayerChromium::prepareToUpdateTiles):
        * platform/graphics/chromium/TiledLayerChromium.h:

2012-02-06  Kentaro Hara  <haraken@chromium.org>

        Unreviewed, rolling out r106883.
        http://trac.webkit.org/changeset/106883
        https://bugs.webkit.org/show_bug.cgi?id=77852

        build failure around Chromium V8 bindings

        * bindings/scripts/CodeGenerator.pm:
        (ShouldCheckEnums):
        (GenerateCompileTimeCheckForEnumsIfNeeded):
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateHeader):
        (GenerateImplementation):
        (NativeToJSValue):
        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateSingleBatchedAttribute):
        (GenerateFunctionCallString):
        (NativeToJSValue):
        * bindings/scripts/test/JS/JSTestInterface.cpp:
        (WebCore):
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore):
        * bindings/scripts/test/TestObj.idl:
        * bindings/scripts/test/TestTypedArray.idl:
        * bindings/scripts/test/V8/V8TestInterface.cpp:
        (WebCore):
        * bindings/scripts/test/V8/V8TestObj.cpp:
        (WebCore):
        * css/WebKitCSSFilterValue.idl:
        * css/WebKitCSSTransformValue.idl:
        * dom/DOMCoreException.idl:
        * dom/Document.idl:
        * dom/EventException.idl:
        * dom/RangeException.idl:
        * fileapi/FileException.idl:
        * fileapi/OperationNotAllowedException.idl:
        * html/HTMLFormElement.idl:
        * html/canvas/Float32Array.idl:
        * html/canvas/Float64Array.idl:
        * html/canvas/Int16Array.idl:
        * html/canvas/Int32Array.idl:
        * html/canvas/Int8Array.idl:
        * html/canvas/OESStandardDerivatives.idl:
        * html/canvas/OESVertexArrayObject.idl:
        * html/canvas/Uint16Array.idl:
        * html/canvas/Uint32Array.idl:
        * html/canvas/Uint8Array.idl:
        * html/canvas/Uint8ClampedArray.idl:
        * html/canvas/WebGLCompressedTextures.idl:
        * html/canvas/WebGLDebugRendererInfo.idl:
        * html/canvas/WebGLRenderingContext.idl:
        * inspector/JavaScriptCallFrame.idl:
        * loader/appcache/DOMApplicationCache.idl:
        * page/Console.idl:
        * page/DOMWindow.idl:
        * page/Location.idl:
        * storage/IDBCursor.idl:
        * storage/IDBDatabaseException.idl:
        * storage/IDBObjectStore.idl:
        * storage/SQLException.idl:
        * svg/SVGComponentTransferFunctionElement.idl:
        * svg/SVGException.idl:
        * svg/SVGFEBlendElement.idl:
        * svg/SVGFEColorMatrixElement.idl:
        * svg/SVGFECompositeElement.idl:
        * svg/SVGFEConvolveMatrixElement.idl:
        * svg/SVGFEDisplacementMapElement.idl:
        * svg/SVGFEMorphologyElement.idl:
        * svg/SVGFETurbulenceElement.idl:
        * svg/SVGGradientElement.idl:
        * xml/XMLHttpRequestException.idl:
        * xml/XPathException.idl:

2012-02-06  Yongsheng Zhu  <yongsheng.zhu@intel.com>

        WebGL must allocate smaller drawing buffer when the allocation fails. 
        https://bugs.webkit.org/show_bug.cgi?id=76654

        Reviewed by Kenneth Russell.

        Test: fast/canvas/webgl/drawingbuffer-test.html

        * platform/graphics/gpu/DrawingBuffer.cpp:
        (WebCore):
        (WebCore::DrawingBuffer::create):
        (WebCore::DrawingBuffer::reset):

2012-02-06  Kentaro Hara  <haraken@chromium.org>

        Unreviewed. Rebaselined run-bindings-tests results.

        * bindings/scripts/test/V8/V8TestObj.cpp:
        (WebCore::TestObjInternal::optionsObjectCallback):

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

        Correct usage of LayoutUnits in dom, editing, page, accessibility, inspector, and loader
        https://bugs.webkit.org/show_bug.cgi?id=77891

        Reviewed by Darin Adler.

        Updating the usage of LayoutUnits in the dom, editing, page, accessibility, inspector, and loader
        directories to properly use LayoutUnits vs ints.

        No new tests. No new behavior.

        * accessibility/AccessibilityObject.h:
        (WebCore::AccessibilityObject::boundsForVisiblePositionRange):
        (WebCore::AccessibilityObject::doAXBoundsForRange):
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::isOffScreen):
        (WebCore::AccessibilityRenderObject::clickPoint):
        (WebCore::AccessibilityRenderObject::boundsForVisiblePositionRange):
        (WebCore::AccessibilityRenderObject::doAXBoundsForRange):
        (WebCore::AccessibilityRenderObject::accessibilityImageMapHitTest):
        * accessibility/AccessibilityRenderObject.h:
        (AccessibilityRenderObject):
        * accessibility/AccessibilitySlider.cpp:
        (WebCore::AccessibilitySlider::elementAccessibilityHitTest):
        * accessibility/AccessibilitySlider.h:
        (AccessibilitySlider):
        * accessibility/mac/WebAccessibilityObjectWrapper.mm:
        (-[WebAccessibilityObjectWrapper accessibilityShowContextMenu]):
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::computedTransform):
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        * dom/Clipboard.h:
        (WebCore::Clipboard::dragLocation):
        (Clipboard):
        * dom/DocumentMarkerController.cpp:
        (WebCore::DocumentMarkerController::renderedRectsForMarkers):
        * dom/DocumentMarkerController.h:
        * dom/Element.cpp:
        (WebCore::Element::screenRect):
        * dom/Element.h:
        (Element):
        * editing/Editor.cpp:
        (WebCore::Editor::rangeForPoint):
        (WebCore::Editor::firstRectForRange):
        * editing/RenderedPosition.cpp:
        (WebCore::RenderedPosition::absoluteRect):
        * editing/RenderedPosition.h:
        (WebCore::RenderedPosition::absoluteRect):
        (RenderedPosition):
        * editing/VisiblePosition.h:
        (VisiblePosition):
        * inspector/DOMNodeHighlighter.cpp:
        * loader/SubframeLoader.cpp:
        (WebCore::SubframeLoader::createJavaAppletWidget):
        * loader/SubframeLoader.h:
        (SubframeLoader):
        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleMousePressEvent):
        * page/Frame.cpp:
        (WebCore::Frame::nodeImage):
        * page/win/FrameCGWin.cpp:
        (WebCore::Frame::nodeImage):

2012-02-05  Kentaro Hara  <haraken@chromium.org>

        Rename [DontCheckEnums], [ReturnsNew], [DoNotCheckDomainSecurityOnGet],
        [DoNotCheckDomainSecurityOnSet] and [ImplementationFunction] IDLs
        https://bugs.webkit.org/show_bug.cgi?id=77852

        Reviewed by Adam Barth.

        This patch renames [DontCheckEnums], [ReturnsNew], [DoNotCheckDomainSecurityOnGet],
        [DoNotCheckDomainSecurityOnSet] and [ImplementationFunction] IDLs for clarification.

        [DontCheckEnums] => [DoNotCheckConstants]  (This IDL inserts assertions to check if a
        constant value is equal to the expected constant value)
        [ReturnsNew] => [ReturnNewObject] (For clarification)
        [DoNotCheckDomainSecurityOnGet] => [DoNotCheckDomainSecurityOnGetter] (For naming consistency
        with other [*Getter] IDLs)
        [DoNotCheckDomainSecurityOnSet] => [DoNotCheckDomainSecurityOnSetter] (For naming consistency
        with other [*Setter] IDLs)
        [ImplementationFunction=] => [ImplementedAs=] (For clarification. This IDL specifies a method
        name in implementation)

        No tests. No change in behavior.

        * bindings/scripts/CodeGenerator.pm:
        (ShouldCheckEnums):
        (GenerateCompileTimeCheckForEnumsIfNeeded):
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateHeader):
        (GenerateImplementation):
        (NativeToJSValue):
        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateSingleBatchedAttribute):
        (GenerateFunctionCallString):
        (NativeToJSValue):

        * bindings/scripts/test/TestObj.idl:
        * bindings/scripts/test/TestTypedArray.idl:

        * bindings/scripts/test/JS/JSTestInterface.cpp: Updated run-bindings-tests results.
        (WebCore):
        * bindings/scripts/test/JS/JSTestObj.cpp: Ditto.
        (WebCore):
        * bindings/scripts/test/V8/V8TestInterface.cpp: Ditto.
        (WebCore):
        * bindings/scripts/test/V8/V8TestObj.cpp: Ditto.
        (WebCore):

        * bindings/scripts/test/TestObj.idl:
        * bindings/scripts/test/TestTypedArray.idl:
        * css/WebKitCSSFilterValue.idl:
        * css/WebKitCSSTransformValue.idl:
        * dom/DOMCoreException.idl:
        * dom/Document.idl:
        * dom/EventException.idl:
        * dom/RangeException.idl:
        * fileapi/FileException.idl:
        * fileapi/OperationNotAllowedException.idl:
        * html/HTMLFormElement.idl:
        * html/canvas/Float32Array.idl:
        * html/canvas/Float64Array.idl:
        * html/canvas/Int16Array.idl:
        * html/canvas/Int32Array.idl:
        * html/canvas/Int8Array.idl:
        * html/canvas/OESStandardDerivatives.idl:
        * html/canvas/OESVertexArrayObject.idl:
        * html/canvas/Uint16Array.idl:
        * html/canvas/Uint32Array.idl:
        * html/canvas/Uint8Array.idl:
        * html/canvas/Uint8ClampedArray.idl:
        * html/canvas/WebGLCompressedTextures.idl:
        * html/canvas/WebGLDebugRendererInfo.idl:
        * html/canvas/WebGLRenderingContext.idl:
        * inspector/JavaScriptCallFrame.idl:
        * loader/appcache/DOMApplicationCache.idl:
        * page/Console.idl:
        * page/DOMWindow.idl:
        * page/Location.idl:
        * storage/IDBCursor.idl:
        * storage/IDBDatabaseException.idl:
        * storage/IDBObjectStore.idl:
        * storage/SQLException.idl:
        * svg/SVGComponentTransferFunctionElement.idl:
        * svg/SVGException.idl:
        * svg/SVGFEBlendElement.idl:
        * svg/SVGFEColorMatrixElement.idl:
        * svg/SVGFECompositeElement.idl:
        * svg/SVGFEConvolveMatrixElement.idl:
        * svg/SVGFEDisplacementMapElement.idl:
        * svg/SVGFEMorphologyElement.idl:
        * svg/SVGFETurbulenceElement.idl:
        * svg/SVGGradientElement.idl:
        * xml/XMLHttpRequestException.idl:

2012-02-06  Stephen Chenney  <schenney@chromium.org>

        RenderSVGShape::strokeContains will fail for some strokes
        https://bugs.webkit.org/show_bug.cgi?id=76931

        Reviewed by Darin Adler.

        Adding support for rounded zero-length endcaps for SVG path hit
        testing.

        Tests: svg/hittest/zero-length-butt-cap-path.xhtml
               svg/hittest/zero-length-round-cap-path.xhtml
               svg/hittest/zero-length-square-cap-path.xhtml

        * rendering/svg/RenderSVGShape.cpp:
        (WebCore::RenderSVGShape::strokeContains):

2012-02-06  Gregg Tavares  <gman@google.com>

        Add webGLErrorsToConsoleEnabled Settings flag
        https://bugs.webkit.org/show_bug.cgi?id=77696

        Reviewed by Kenneth Russell.

        No new tests as there is no change in behavior.

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore):
        (WebCore::WebGLRenderingContext::setupFlags):
        * page/Settings.cpp:
        (WebCore::Settings::Settings):
        * page/Settings.h:
        (Settings):
        (WebCore::Settings::webGLErrorsToConsoleEnabled):

2012-02-06  Emil A Eklund  <eae@chromium.org>

        Convert PopupMenuClient::clientPadding over to new layout abstraction
        https://bugs.webkit.org/show_bug.cgi?id=77798

        Reviewed by Eric Seidel.

        Change PopupMenuClient and all classes inheriting from it to use the new
        layout types for padding.

        No new tests.

        * platform/PopupMenuClient.h:
        (PopupMenuClient):
        * rendering/RenderMenuList.h:
        * rendering/RenderTextControlSingleLine.cpp:
        (WebCore::RenderTextControlSingleLine::clientPaddingLeft):
        (WebCore::RenderTextControlSingleLine::clientPaddingRight):
        * rendering/RenderTextControlSingleLine.h:

2012-02-06  Philip Rogers  <pdr@google.com>

        Fix color animations by value
        https://bugs.webkit.org/show_bug.cgi?id=77812

        Reviewed by Darin Adler.

        Test: svg/animations/animate-color-fill-from-by.html

        * svg/SVGAnimatedColor.cpp:
        (WebCore::SVGAnimatedColorAnimator::calculateFromAndByValues):

2012-02-03  Jer Noble  <jer.noble@apple.com>

        REGRESSION (r104303): Clicking inline video controls gives the video a focus ring
        https://bugs.webkit.org/show_bug.cgi?id=77288

        Reviewed by Darin Adler.

        Test: media/video-mouse-focus.html

        Do not allow media elements to be focused by mouse click by overriding isMouseFocusable
        and returning false.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::isMouseFocusable):
        * html/HTMLMediaElement.h:

2012-02-06  Anders Carlsson  <andersca@apple.com>

        Overlay scrollbars flash when window is simply activated
        https://bugs.webkit.org/show_bug.cgi?id=77911
        <rdar://problem/10211995>

        Reviewed by Kenneth Russell.

        Add a new member function, FocusController::setContainingWindowIsVisible, and move the code
        that calls ScrollableArea::contentAreaDidShow/ScrollableArea::contentAreaDidHide there, since
        we only want to flash scrollers when the window becomes visible.

        * WebCore.exp.in:
        * page/FocusController.cpp:
        (WebCore::FocusController::FocusController):
        (WebCore::FocusController::setActive):
        (WebCore::FocusController::setContainingWindowIsVisible):
        (WebCore):
        * page/FocusController.h:
        (FocusController):
        (WebCore::FocusController::containingWindowIsVisible):

        * platform/mac/ScrollAnimatorMac.mm:
        (-[WebScrollbarPainterControllerDelegate scrollerImpPair:setContentAreaNeedsDisplayInRect:]):
        Call ScrollAnimatorMac::contentAreaWillPaint here, since that will trigger AppKit to flash the scrollers.

2012-02-06  Greg Simon  <gregsimon@chromium.org>

        postMessage leaks MemoryEvent object
        https://bugs.webkit.org/show_bug.cgi?id=77893

        Reviewed by Adam Barth.

        Changed from PassRefPtr().leakRef() to RefPtr.get() when 
        calling into FrameLoaderClient to stop +1 extra ref.

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

2012-02-06  Ehsan Akhgari  <ehsan.akhgari@gmail.com>

        WebGL conformance test misc/functions-returning-strings.html fails
        https://bugs.webkit.org/show_bug.cgi?id=77149

        Make sure that WebGL methods returning strings don't return null when
        they run successfully.

        Reviewed by Kenneth Russell.

        Test: fast/canvas/webgl/functions-returning-strings.html

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore):
        (WebCore::WebGLRenderingContext::getProgramInfoLog):
        (WebCore::WebGLRenderingContext::getShaderInfoLog):
        (WebCore::WebGLRenderingContext::getShaderSource):
        (WebCore::WebGLRenderingContext::ensureNotNull):
        * html/canvas/WebGLRenderingContext.h:
        (WebGLRenderingContext):

2012-02-06  Enrica Casucci  <enrica@apple.com>

        Refactor Mac platform implementation of the Pasteboard class.
        https://bugs.webkit.org/show_bug.cgi?id=77567
        
        The goal of this change is to remove the majority of the methods in
        the class interface that are Mac specific.
        writeSelectionForTypes has been left to support OS X services.
        Some of the methods have been turned into static functions.
        The method asURL was being used only by the DragData class and its
        implementation has been moved there.
        This is a first step in the direction of removing NSPasteboard access from
        the WebProcess for WebKit2 (https://bugs.webkit.org/show_bug.cgi?id=77259)
        leaving the WebKit1 behavior unchanged.

        Reviewed by Alexey Proskuryakov.

        No new tests. No changes in behavior.

        * platform/Pasteboard.h: Removed most of the Mac specific methods.
        * platform/mac/ClipboardMac.mm:
        (WebCore::ClipboardMac::writeRange):
        (WebCore::ClipboardMac::writeURL):
        * platform/mac/DragDataMac.mm:
        (WebCore::DragData::asURL): Moved code from PasteboardMac.mm. Removed FIXME
        because we only want to handle the case of single file, otherwise the user
        doesn't know which of the files has been chosen.
        * platform/mac/PasteboardMac.mm:
        (WebCore::writeURLForTypes):
        (WebCore::Pasteboard::writeURL):
        (WebCore::writeFileWrapperAsRTFDAttachment): Now a static function.
        (WebCore::Pasteboard::writeImage):
        (WebCore::documentFragmentWithImageResource): Ditto.
        (WebCore::documentFragmentWithRTF): Ditto.
        (WebCore::Pasteboard::documentFragment):

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

        [chromium] Drop tiles completely outside of layer bounds when resizing to a smaller size
        https://bugs.webkit.org/show_bug.cgi?id=77910

        Reviewed by Kenneth Russell.

        When resizing a tiled layer to a smaller size, drop all tiles that lie completely outside the new layer bounds.
        This avoids attempting to access out-of-bounds tiles when iterating over all tiles in the tiler, which triggers
        ASSERT()s, as well as saves some memory.

        New unit test added to TiledLayerChromiumTest.

        * platform/graphics/chromium/TiledLayerChromium.cpp:
        (WebCore::TiledLayerChromium::invalidateRect):
        * platform/graphics/chromium/cc/CCLayerTilingData.cpp:
        (WebCore::CCLayerTilingData::setBounds):

2012-02-06  Chris Rogers  <crogers@google.com>

        zvmul incorrectly multiplies complex arrays on Windows.
        https://bugs.webkit.org/show_bug.cgi?id=77900

        Reviewed by Kenneth Russell.

        * platform/audio/VectorMath.cpp:
        (WebCore::VectorMath::zvmul):

2012-02-06  Andreas Kling  <awesomekling@apple.com>

        REGRESSION(r106756): 10% performance hit on DOM/Template.
        <http://webkit.org/b/77831>

        Reviewed by Ryosuke Niwa.

        Let the StylePropertySet used for element attribute style have the element as its parent.
        This is accomplished by adding an m_parentIsElement bit to StylePropertySet and sharing
        some of the internal logic with inline styles.

        In the end, this means that CSSParser will now pick up the document's CSSValuePool when
        parsing properties for attribute styles, which fixes the perf regression from r106756.

        * css/StylePropertySet.cpp:
        (WebCore::StylePropertySet::StylePropertySet):
        (WebCore::StylePropertySet::contextStyleSheet):

            Find contextStyleSheet via the parentElement() when there is one.

        (WebCore::StylePropertySet::setNeedsStyleRecalc):

            Always set FullStyleChange for attribute style mutations. We can probably use the
            same lighter invalidation as inline styles, but that's a topic for another patch.

        * css/StylePropertySet.h:
        (WebCore::StylePropertySet::createInline):
        (WebCore::StylePropertySet::createAttributeStyle):
        (WebCore::StylePropertySet::parentRuleInternal):
        (WebCore::StylePropertySet::clearParentRule):
        (StylePropertySet):
        (WebCore::StylePropertySet::parentElement):
        (WebCore::StylePropertySet::clearParentElement):

            Added m_parentIsElement bit and update assertions as appropriate to not just
            cover the inline style case. Added a createAttributeStyle() helper to create
            a StylePropertySet for use as Element::attributeStyle().

        * dom/StyledElement.h:
        * dom/ElementAttributeData.h:
        * dom/ElementAttributeData.cpp:
        (WebCore::ElementAttributeData::ensureAttributeStyle):

            Use StylePropertySet::createAttributeStyle().

        * dom/StyledElement.cpp:
        (WebCore::StyledElement::removeCSSProperties):
        (WebCore::StyledElement::addCSSProperty):
        (WebCore::StyledElement::addCSSImageProperty):

            Remove setNeedsStyleRecalc() calls since that is now handled automatically by
            StylePropertySet's mutation methods.

2012-02-06  Kentaro Hara  <haraken@chromium.org>

        In AppleWebKit, stop rebuilding IDLs that need not to be rebuilt
        https://bugs.webkit.org/show_bug.cgi?id=77510

        Reviewed by Adam Barth.

        Currently, if any IDL file is updated, all IDL files are rebuilt.
        This patch stops rebuilding IDL files which are not modified nor
        whose supplemental dependencies are not changed.

        The new build flow is as follows:

            supplemental.dep : $(ALL_IDLS)
                perl resolve-supplemental.pl ...

            %.idl-needs-rebuild : %.idl supplemental.dep
                perl update-idl-needs-rebuild.pl ...

            JS%.cpp : %.idl-needs-rebuild
                perl generate-bindings.pl ...

        resolve-supplemental.pl generates the following supplemental.dep.
        The number in () is the last access timestamp of the file.

            A.idl(1200)
            B.idl(1000) B-supplemental1.idl(800) B-supplemental2.idl(1200)
            C.idl(1000)

        update-idl-needs-rebuild.pl for X.idl touches X.idl-needs-rebuild,
        if X.idl-needs-rebuild is older than X.idl or the IDL files which are
        supplementing X.idl. For example, if the timestamps of A.idl-needs-rebuild,
        B.idl-needs-rebuild and C.idl-needs-rebuild are all 1000, then A.idl-needs-rebuild
        and B.idl-needs-rebuild will be touched.

        Even if no IDL files are modified, update-idl-needs-rebuild.pl can run for all IDL files,
        but generate-bindings.pl won't run. If any IDL file is updated, resolve-supplemental.pl
        will run once, update-idl-needs-rebuild.pl will run for all IDL files, and
        generate-bindings.pl will run for the IDL files which are modified or whose
        dependencies are changed.

        No tests. I manually confirmed the followings:
        - Touch Element.idl, then only Element.idl is rebuilt
        - Touch DOMWindow.idl, then only DOMWindow.idl is rebuilt
        - Touch DOMWindowWebAudio.idl, then only DOMWindow.idl and DOMWindowWebAudio.idl are rebuilt

        * DerivedSources.make: Modified the build flow as described above.
        * bindings/scripts/generate-bindings.pl: Modified to read an IDL file path from .idl-needs-rebuild.
        * bindings/scripts/update-idl-needs-rebuild.pl: Added. Touches X.idl-needs-rebuild if
        the X.idl-needs-rebuild is older than X.idl or the IDL files which are supplementing X.idl.
        (touch):

2012-02-06  Wei James  <james.wei@intel.com>

        AudioBus need to support stereo->mono down mix in copyFrom sumFrom etc.
        https://bugs.webkit.org/show_bug.cgi?id=77609

        Reviewed by Kenneth Russell.

        Test: webaudio/stereo2mono-down-mixing.html

        * platform/audio/AudioBus.cpp:
        (WebCore):
        (WebCore::AudioBus::copyFrom):
        (WebCore::AudioBus::sumFrom):

2012-02-06  Cris Neckar  <cdn@chromium.org>

        Add RefPtrs for parent and sibling counter nodes
        https://bugs.webkit.org/show_bug.cgi?id=75212

        Reviewed by Adam Barth.

        Test: fast/css/counters/reparent-table-children-with-counters-crash.html

        * rendering/RenderCounter.cpp:
        (WebCore::findPlaceForCounter):
        (WebCore::makeCounterNode):
        (WebCore::updateCounters):

2012-02-06  Kalev Lember  <kalevlember@gmail.com>

        [GTK] Add missing pango include dir to fix build
        https://bugs.webkit.org/show_bug.cgi?id=77832

        Reviewed by Martin Robinson.

        * GNUmakefile.am: Added $(PANGO_CFLAGS) to libWebCore_la_CPPFLAGS.

2012-02-06  Jochen Eisinger  <jochen@chromium.org>

        Before accessing a frame's script controller in V8 bindings, first check that the frame actually exists
        https://bugs.webkit.org/show_bug.cgi?id=77370

        Reviewed by Adam Barth.

        I don't have a working reproduction of the crash yet. As soon as I have
        one,  I will add new layout tests.

        * bindings/v8/PageScriptDebugServer.cpp:
        (WebCore::PageScriptDebugServer::addListener):
        * bindings/v8/ScheduledAction.cpp:
        (WebCore::ScheduledAction::execute):
        * bindings/v8/ScriptCachedFrameData.cpp:
        (WebCore::ScriptCachedFrameData::restore):
        * page/DOMTimer.cpp:
        (WebCore::DOMTimer::DOMTimer): remove temporary debug code

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

        Support detaching TextureManager from ManagedTexture
        https://bugs.webkit.org/show_bug.cgi?id=77655

        Reviewed by Kenneth Russell.
        Initial patch by Alok Priyadarshi.

        TextureManager now holds references to the textures it manages.
        This allows TextureManager to inform managed textures when it gets deleted
        so that the texture that outlive the TextureManager can handle the situation gracefully.

        Unit test in TextureManagerTest.cpp

        * platform/graphics/chromium/ManagedTexture.cpp:
        (WebCore::ManagedTexture::ManagedTexture):
        (WebCore::ManagedTexture::~ManagedTexture):
        (WebCore):
        (WebCore::ManagedTexture::managerWillDie):
        (WebCore::ManagedTexture::isValid):
        (WebCore::ManagedTexture::reserve):
        (WebCore::ManagedTexture::unreserve):
        (WebCore::ManagedTexture::steal):
        (WebCore::ManagedTexture::reset):
        * platform/graphics/chromium/ManagedTexture.h:
        (WebCore::ManagedTexture::manager):
        (ManagedTexture):
        (WebCore::ManagedTexture::isReserved):
        * platform/graphics/chromium/TextureManager.cpp:
        (WebCore::TextureManager::~TextureManager):
        (WebCore):
        (WebCore::TextureManager::setPreferredMemoryLimitBytes):
        (WebCore::TextureManager::registerTexture):
        (WebCore::TextureManager::unregisterTexture):
        * platform/graphics/chromium/TextureManager.h:
        (WebCore):
        (TextureManager):

2012-02-06  Anders Carlsson  <andersca@apple.com>

        Wheel event handler count not updated when adding handlers to the window
        https://bugs.webkit.org/show_bug.cgi?id=77895

        Reviewed by Dan Bernstein.

        Test: fast/events/wheelevent-handler-count.html

        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::addEventListener):
        (WebCore::DOMWindow::removeEventListener):
        Update the wheel event count.

        * testing/Internals.cpp:
        (WebCore::Internals::wheelEventHandlerCount):
        * testing/Internals.h:
        * testing/Internals.idl:
        Add wheelEventHandlerCount to window.internals.

2012-02-06  Matthew Delaney  <mdelaney@apple.com>

        toDataURL() uses stale data after putImageData()
        https://bugs.webkit.org/show_bug.cgi?id=65767

        This patch fixes the issue we've encountered of getting back
        stale copies of the CGContext of accelerated ImageBuffers who have seen
        putImageData calls but have not been drawn into via the CG API.
        This issue is fixed by modifying the way we implement putImageData
        in ImageBufferCG to draw the bits wrapped in a CGImage while the CGContext
        is in a state where the data will effectively be copied (as is needed for
        implementing putImageData) instead of directly modifying the bits of the IOSurface.

        Reviewed by Chris Marrin.

        Test: fast/canvas/check-stale-putImageData, pixel test to check that the canvas is in fact painted.

        * platform/graphics/cg/ImageBufferCG.cpp: Implement new way of putting image data.
        * platform/graphics/ImageBuffer.h: Merged two previously separate put data calls
            into a single and more sensibly named 'putByteArray', since that's what it does!

        * WebCore.exp.in: Added new WKSI call for use in ImageBufferCG.cpp
        * platform/mac/WebCoreSystemInterface.h:
        * platform/mac/WebCoreSystemInterface.mm:

        Using new method name.
        * html/canvas/CanvasRenderingContext2D.cpp:
        * platform/graphics/ImageBuffer.cpp:
        * platform/graphics/ShadowBlur.cpp:        
        * platform/graphics/filters/FEColorMatrix.cpp:
        * platform/graphics/filters/FEDropShadow.cpp:
        * platform/graphics/filters/FilterEffect.cpp:

        Updated other ports' ImageBuffers to use new method.
        * platform/graphics/cairo/ImageBufferCairo.cpp:
        * platform/graphics/qt/ImageBufferQt.cpp:
        * platform/graphics/skia/ImageBufferSkia.cpp:
        * platform/graphics/wince/ImageBufferWinCE.cpp:
        * platform/graphics/wx/ImageBufferWx.cpp:

2012-02-06  Caio Marcelo de Oliveira Filho  <caio.oliveira@openbossa.org>

        Provide more attribute methods in Element
        https://bugs.webkit.org/show_bug.cgi?id=77800

        Reviewed by Ryosuke Niwa.

        Reduce the clients of NamedNodeMap. This will make easier to change the
        implementation of our attribute storage. The clients now use Element methods
        that expose Attribute* accessors.

        Instead of checking the existence of NamedNodeMap, clients can call
        hasAttributes() or hasAttributesWithoutUpdate() (that skips updating invalid
        style or animation svg attributes).

        If there are attributes, they can be accessed by index via attributeCount() /
        attributeItem(), as well as by QualifiedName. Those accessors assume there are an
        attribute storage.

        * css/SelectorChecker.cpp:
        (WebCore::anyAttributeMatches):
        (WebCore::SelectorChecker::checkOneSelector):
        * css/SelectorChecker.h:
        (WebCore::SelectorChecker::checkExactAttribute):
        * dom/DatasetDOMStringMap.cpp:
        (WebCore::DatasetDOMStringMap::getNames):
        (WebCore::DatasetDOMStringMap::item):
        (WebCore::DatasetDOMStringMap::contains):
        * dom/Document.cpp:
        (WebCore::Document::importNode): use setAttributesFromElement() instead of manually copying.
        * dom/Element.h:
        (Element):
        (WebCore::Element::hasAttributesWithoutUpdate):
        (WebCore):
        (WebCore::Element::attributeCount):
        (WebCore::Element::attributeItem):
        (WebCore::Element::getAttributeItem):
        (WebCore::Element::removeAttribute):
        * dom/Node.cpp:
        (WebCore::Node::isDefaultNamespace):
        (WebCore::Node::lookupNamespaceURI):
        (WebCore::Node::lookupNamespacePrefix):
        (WebCore::Node::compareDocumentPosition):
        * editing/ApplyStyleCommand.cpp:
        (WebCore::hasNoAttributeOrOnlyStyleAttribute):
        (WebCore::isEmptyFontTag):
        * editing/EditingStyle.cpp:
        (WebCore::EditingStyle::elementIsStyledSpanOrHTMLEquivalent):
        * editing/InsertParagraphSeparatorCommand.cpp:
        (WebCore::highestVisuallyEquivalentDivBelowRoot):
        * editing/MarkupAccumulator.cpp:
        (WebCore::MarkupAccumulator::appendElement):
        * editing/markup.cpp:
        (WebCore::completeURLs):
        (WebCore::StyledMarkupAccumulator::appendElement):
        * html/HTMLEmbedElement.cpp:
        (WebCore::HTMLEmbedElement::parametersForPlugin):
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::updateType):
        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::parametersForPlugin):
        * html/HTMLParamElement.cpp:
        (WebCore::HTMLParamElement::isURLAttribute):
        * html/parser/HTMLFormattingElementList.cpp:
        (WebCore::attributeCountWithoutUpdate):
        (WebCore::HTMLFormattingElementList::tryToEnsureNoahsArkConditionQuickly):
        (WebCore::HTMLFormattingElementList::ensureNoahsArkCondition): Store Attribute*
        to avoid looking up the right element again by name.
        * inspector/DOMEditor.cpp:
        (WebCore::DOMEditor::innerPatchNode):
        (WebCore::DOMEditor::createDigest):
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::setAttributesAsText):
        (WebCore::InspectorDOMAgent::performSearch):
        (WebCore::InspectorDOMAgent::buildArrayForElementAttributes):
        * page/PageSerializer.cpp:
        (WebCore::isCharsetSpecifyingNode):
        * svg/SVGStyledElement.cpp:
        (WebCore::SVGStyledElement::getPresentationAttribute):
        * xml/XPathFunctions.cpp:
        (WebCore::XPath::FunLang::evaluate):
        * xml/XPathNodeSet.cpp:
        (WebCore::XPath::NodeSet::traversalSort):
        * xml/XPathStep.cpp:
        (WebCore::XPath::Step::nodesInAxis):
        * xml/parser/XMLDocumentParserLibxml2.cpp:
        (WebCore::XMLDocumentParser::XMLDocumentParser):
        * xml/parser/XMLTreeBuilder.cpp:
        (WebCore::XMLTreeBuilder::XMLTreeBuilder):

2012-02-06  Joshua Bell  <jsbell@chromium.org>

        IndexedDB: Raise exception during add/put call if autoIncrement key insertion will fail
        https://bugs.webkit.org/show_bug.cgi?id=77374

        If a put request will use a key generator, try inserting a dummy key during the sync
        put() call to check if the key insertion will succeed so an exception can be raised
        early, rather than deferring to the asynchronous task.

        Reviewed by Tony Chang.

        Test: storage/indexeddb/keypath-edges.html

        * storage/IDBObjectStoreBackendImpl.cpp:
        (WebCore::IDBObjectStoreBackendImpl::put):

2012-02-06  Gustavo Noronha Silva  <gns@gnome.org>

        Add a null check for the gdkwindow, that will happen if the window
        is not mapped.

        Reviewed by Martin Robinson.

        * platform/gtk/GtkUtilities.cpp:
        (WebCore::convertWidgetPointToScreenPoint):

2012-02-06  Eugene Girard  <girard@chromium.org>

        IndexedDB createObjectStore should throw if options arg is invalid
        Added logic to OptionsObject to determine if an invalid object was created.
        Javascript bindings now detect invalid OptionsObject's and throw TypeError when found.
        https://bugs.webkit.org/show_bug.cgi?id=58471

        Reviewed by Adam Barth.

        Test: storage/indexeddb/createObjectStore-bad-options.html

        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateParametersCheck):
        * bindings/v8/OptionsObject.cpp:
        (WebCore::OptionsObject::isObject):
        * bindings/v8/OptionsObject.h:

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

        Unreviewed, rolling out r106797 and r106806.
        http://trac.webkit.org/changeset/106797
        http://trac.webkit.org/changeset/106806
        https://bugs.webkit.org/show_bug.cgi?id=77888

        The change is still causing some crashes in webaudio/ on the
        Chromium bots (Requested by jchaffraix on #webkit).

        * Modules/intents/IntentRequest.cpp:
        (WebCore::IntentRequest::create):
        * bindings/generic/ActiveDOMCallback.cpp:
        (WebCore::ActiveDOMCallback::ActiveDOMCallback):
        * dom/ActiveDOMObject.cpp:
        (WebCore::ActiveDOMObject::ActiveDOMObject):
        (WebCore::ActiveDOMObject::~ActiveDOMObject):
        * dom/ActiveDOMObject.h:
        (ActiveDOMObject):
        * dom/DocumentEventQueue.cpp:
        (WebCore::DocumentEventQueue::DocumentEventQueue):
        * dom/ScriptExecutionContext.cpp:
        (WebCore::ScriptExecutionContext::ScriptExecutionContext):
        (WebCore::ScriptExecutionContext::~ScriptExecutionContext):
        (WebCore::ScriptExecutionContext::canSuspendActiveDOMObjects):
        (WebCore::ScriptExecutionContext::suspendActiveDOMObjects):
        (WebCore::ScriptExecutionContext::resumeActiveDOMObjects):
        (WebCore::ScriptExecutionContext::stopActiveDOMObjects):
        * dom/ScriptExecutionContext.h:
        (ScriptExecutionContext):
        * fileapi/DOMFileSystem.cpp:
        (WebCore::DOMFileSystem::create):
        * fileapi/FileReader.cpp:
        (WebCore):
        * fileapi/FileReader.h:
        (WebCore::FileReader::create):
        * fileapi/FileWriter.cpp:
        (WebCore):
        * fileapi/FileWriter.h:
        (WebCore::FileWriter::create):
        * history/CachedFrame.cpp:
        (WebCore::CachedFrame::CachedFrame):
        * html/HTMLAudioElement.cpp:
        (WebCore::HTMLAudioElement::create):
        (WebCore::HTMLAudioElement::createForJSConstructor):
        * html/HTMLMarqueeElement.cpp:
        (WebCore::HTMLMarqueeElement::create):
        * html/HTMLVideoElement.cpp:
        (WebCore::HTMLVideoElement::create):
        * mediastream/PeerConnection.cpp:
        (WebCore::PeerConnection::create):
        * notifications/Notification.cpp:
        (WebCore::Notification::create):
        * notifications/NotificationCenter.cpp:
        * notifications/NotificationCenter.h:
        (WebCore::NotificationCenter::create):
        * page/DOMTimer.cpp:
        (WebCore::DOMTimer::install):
        (WebCore::DOMTimer::fired):
        * page/EventSource.cpp:
        (WebCore::EventSource::create):
        * page/SuspendableTimer.cpp:
        (WebCore::SuspendableTimer::SuspendableTimer):
        * storage/IDBDatabase.cpp:
        (WebCore::IDBDatabase::create):
        * storage/IDBRequest.cpp:
        (WebCore::IDBRequest::create):
        * storage/IDBTransaction.cpp:
        (WebCore::IDBTransaction::create):
        * storage/IDBVersionChangeRequest.cpp:
        (WebCore::IDBVersionChangeRequest::create):
        * webaudio/AudioContext.cpp:
        (WebCore::AudioContext::create):
        * websockets/WebSocket.cpp:
        * websockets/WebSocket.h:
        (WebCore::WebSocket::create):
        * workers/SharedWorker.cpp:
        (WebCore::SharedWorker::create):
        * workers/Worker.cpp:
        (WebCore::Worker::create):
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::create):

2012-02-06  Caio Marcelo de Oliveira Filho  <caio.oliveira@openbossa.org>

        Move style related functions from NamedNodeMap to ElementAttributeData
        https://bugs.webkit.org/show_bug.cgi?id=77879

        Reviewed by Ryosuke Niwa.

        This commit also removes the NamedNodeMap::mappedAttributeCount(),
        which is a leftover from removal of mapped attributes.

        * dom/ElementAttributeData.cpp:
        (WebCore::ElementAttributeData::ensureInlineStyleDecl):
        (WebCore):
        (WebCore::ElementAttributeData::destroyInlineStyleDecl):
        (WebCore::ElementAttributeData::ensureAttributeStyle):
        * dom/ElementAttributeData.h:
        (WebCore::ElementAttributeData::inlineStyleDecl):
        (ElementAttributeData):
        (WebCore::ElementAttributeData::attributeStyle):
        * dom/NamedNodeMap.cpp:
        * dom/NamedNodeMap.h:
        * dom/StyledElement.h:
        (StyledElement):
        (WebCore::StyledElement::inlineStyleDecl):
        (WebCore::StyledElement::ensureInlineStyleDecl):
        (WebCore::StyledElement::attributeStyle):
        (WebCore::StyledElement::ensureAttributeStyle):
        (WebCore::StyledElement::destroyInlineStyleDecl):

2012-02-06  Abhishek Arya  <inferno@chromium.org>

        Crash in SubframeLoader::loadSubframe.
        https://bugs.webkit.org/show_bug.cgi?id=77345

        Reviewed by Nate Chapin.

        Mutation event when loading subframe can blow away the
        main frame. Add a RefPtr to protect against that.

        Test: fast/frames/subframe-load-crash-main.html

        * loader/SubframeLoader.cpp:
        (WebCore::SubframeLoader::loadSubframe):

2012-02-06  ChangSeok Oh  <shivamidow@gmail.com>

        Initial implementation of GraphicsContext3DOpenGLES.cpp
        https://bugs.webkit.org/show_bug.cgi?id=76248

        Reviewed by Martin Robinson.

        Implemented APIs in GraphicsContext3DOpenGLES.cpp according to the GLES spec. roughly.
        But no way to run these codes right now, because they need an extra port
        specific implementation to work. I plan to add these extra codes for the GTK port
        in the next patch. And also this patch doesn't support anti-aliasing yet. Another bug
        will deal with it.
        Moved some APIs in GraphicsContext3DOpenGLES.cpp to GraphicsContext3DCommon.cpp.
        It looks it could be shared between gl and gles.
        Two helper functions are added to avoid code duplication in GraphicsContext3D.
        Added a missing period at the end of comment lines.

        No new tests required.
        We'll be able to verify this patch by using the existing webgl test cases.

        * platform/graphics/GraphicsContext3D.h: Add build flag to access stencilBuffer & depthBuffer for gles.
        (WebCore):
        * platform/graphics/opengl/GraphicsContext3DOpenGL.cpp:
        (WebCore::GraphicsContext3D::reshapeFBOs): Helper function extracted from GC3D::reshape to resize regular & multisampled FBOs.
        (WebCore::GraphicsContext3D::resolveMultisamplingIfNecessary): Helper function to resolve multisampling.
        * platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:
        (WebCore::GraphicsContext3D::validateAttributes): Add condition to disable antialiasing & packedDepthStencilExtension for GLES.
        (WebCore::GraphicsContext3D::paintRenderingResultsToCanvas):
        (WebCore::GraphicsContext3D::paintRenderingResultsToImageData):

        Following APIs looked shareable so that moved into GC3DOpenGLCommon.cpp.
        (WebCore::GraphicsContext3D::prepareTexture):
        (WebCore):
        (WebCore::GraphicsContext3D::readRenderingResults):
        (WebCore::GraphicsContext3D::reshape):
        (WebCore::GraphicsContext3D::bindFramebuffer):
        (WebCore::GraphicsContext3D::copyTexImage2D):
        (WebCore::GraphicsContext3D::copyTexSubImage2D):
        (WebCore::GraphicsContext3D::getActiveUniform):
        (WebCore::GraphicsContext3D::readPixels):

        Added a missing period at the end of comment line.
        (WebCore::GraphicsContext3D::compileShader):
        (WebCore::GraphicsContext3D::getActiveAttrib):
        (WebCore::GraphicsContext3D::uniform2fv):
        (WebCore::GraphicsContext3D::uniform3fv):
        (WebCore::GraphicsContext3D::uniform4fv):
        (WebCore::GraphicsContext3D::uniform2iv):
        (WebCore::GraphicsContext3D::uniform3iv):
        (WebCore::GraphicsContext3D::uniform4iv):
        (WebCore::GraphicsContext3D::uniformMatrix2fv):
        (WebCore::GraphicsContext3D::uniformMatrix3fv):
        (WebCore::GraphicsContext3D::uniformMatrix4fv):
        (WebCore::GraphicsContext3D::texSubImage2D):

        * platform/graphics/opengl/GraphicsContext3DOpenGLES.cpp:
        (WebCore::GraphicsContext3D::reshapeFBOs): Same with the above.
        (WebCore::GraphicsContext3D::resolveMultisamplingIfNecessary): Same with the above.

        Brief explanation about what the differences are between gl and gles.
        (WebCore::GraphicsContext3D::renderbufferStorage): Removed codes for converting GLES parameter to GL parameter.
        (WebCore::GraphicsContext3D::getIntegerv): Removed codes that emulate GLES.
        (WebCore::GraphicsContext3D::texImage2D): Removed codes for converting GLES parameter to GL parameter.

2012-02-06  Alexander Pavlov  <apavlov@chromium.org>

        Web Inspector: [Meta] Allow emulation of touch events
        https://bugs.webkit.org/show_bug.cgi?id=77096

        Reviewed by Pavel Feldman.

        This is the inspector part of the change, core part implementation tracked in bug 77105.

        * English.lproj/localizedStrings.js:
        * inspector/Inspector.json:
        * inspector/InspectorDOMAgent.cpp:
        (DOMAgentState):
        (WebCore::InspectorDOMAgent::clearFrontend):
        (WebCore::InspectorDOMAgent::restore):
        (WebCore):
        (WebCore::InspectorDOMAgent::updateTouchEventEmulationInDocuments):
        (WebCore::InspectorDOMAgent::setTouchEmulationEnabled):
        * inspector/InspectorDOMAgent.h:
        (InspectorDOMAgent):
        * inspector/front-end/DOMAgent.js:
        (WebInspector.DOMAgent.prototype._captureDOM):
        (WebInspector.DOMAgent.prototype._emulateTouchEventsChanged):
        * inspector/front-end/Settings.js:
        (WebInspector.Settings):
        * inspector/front-end/SettingsScreen.js:
        (WebInspector.SettingsScreen):

2012-02-06  Chris Guan  <chris.guan@torchmobile.com.cn>

        [Blackberry] Non-supported about: operations never stops loading
        https://bugs.webkit.org/show_bug.cgi?id=76366

        Reviewed by Rob Buis.

        If user typed a non-supported "about:" scheme such as "about:nonsupport",
        the loadAboutURL() function in NetworkManger should recognize and handle it as 
        an error of invalid url.

        * platform/network/blackberry/NetworkJob.cpp:
        (WebCore::NetworkJob::loadAboutURL):
        (WebCore::NetworkJob::handleAbout):
        * platform/network/blackberry/NetworkJob.h:
        (NetworkJob):
        * platform/network/blackberry/NetworkManager.cpp:
        (WebCore::NetworkManager::startJob):

2012-02-06  Alexander Pavlov  <apavlov@chromium.org>

        Web Inspector: Remove unused disabledComputedProperties from methods in StylesSidebarPane
        https://bugs.webkit.org/show_bug.cgi?id=77876

        Reviewed by Pavel Feldman.

        * inspector/front-end/StylesSidebarPane.js:
        (WebInspector.StylesSidebarPane.prototype._refreshUpdate):
        (WebInspector.StylesSidebarPane.prototype._rebuildUpdate):
        (WebInspector.StylesSidebarPane.prototype._markUsedProperties):
        (WebInspector.StylesSidebarPane.prototype._refreshSectionsForStyleRules):
        (WebInspector.StylesSidebarPane.prototype._rebuildSectionsForStyleRules):
        (WebInspector.StylePropertiesSection.prototype.onpopulate):
        (WebInspector.ComputedStylePropertiesSection):
        (WebInspector.ComputedStylePropertiesSection.prototype._isPropertyInherited):

2012-02-06  Alexei Filippov  <alexeif@chromium.org>

        Web Inspector: Redesign summary view / retaining tree contents
        https://bugs.webkit.org/show_bug.cgi?id=77870

        Reviewed by Pavel Feldman.

        1. Make object IDs less contrast.
        2. Put array indices in [].
        3. Do not write type if it's just "Object".

        * inspector/front-end/DetailedHeapshotGridNodes.js:
        (WebInspector.HeapSnapshotGenericObjectNode.prototype._createObjectCell):
        (WebInspector.HeapSnapshotGenericObjectNode.prototype.get data):
        (WebInspector.HeapSnapshotObjectNode.prototype._emptyData):
        (WebInspector.HeapSnapshotObjectNode.prototype._enhanceData):
        (WebInspector.HeapSnapshotObjectNode.prototype._prefixObjectCell):
        (WebInspector.HeapSnapshotConstructorNode.prototype.get data):
        * inspector/front-end/heapProfiler.css:
        (.detailed-heapshot-view .console-formatted-id):
        (.detailed-heapshot-view td.object-column span.grayed):

2012-02-06  No'am Rosenthal  <noam.rosenthal@nokia.com>

        [Texmap][Qt] Avoid an image copy when uploading textures in WebKit1
        https://bugs.webkit.org/show_bug.cgi?id=77748

        Reviewed by Kenneth Rohde Christiansen.

        Use QPixmap::buffer() API to get access to the QPixmap's pixels without implicit copies.

        Instrumentation shows that the deep image copies created from TextureMapperGL are
        eliminated.

        * platform/graphics/opengl/TextureMapperGL.cpp:
        (WebCore::BitmapTextureGL::updateContents):

2012-02-06  Allan Sandfeld Jensen  <allan.jensen@nokia.com>

        LayoutTest failures on r106797
        https://bugs.webkit.org/show_bug.cgi?id=77868

        Call suspendIfNeeded from subclass of IDBRequest, IDBVersionChangeRequest.

        Reviewed by Simon Hausmann.

        * storage/IDBVersionChangeRequest.cpp:
        (WebCore::IDBVersionChangeRequest::create):

2012-02-06  No'am Rosenthal  <noam.rosenthal@nokia.com>

        [Qt] Implement ImageBuffer::copyImage(ImageBuffer::DontCopyBackingStore)
        https://bugs.webkit.org/show_bug.cgi?id=77689

        Reviewed by Kenneth Rohde Christiansen.

        Use StillImageQt::createForRendering when using DontCopyBackingStore.
        Enable DontCopyBackingStore in TextureMapperNode.
        This removes deep copies resulting from the use of ImageBuffer.

        Instrumentation shows that deep image copies resulted from ImageBuffer are eliminated.

        * platform/graphics/qt/ImageBufferQt.cpp:
        (WebCore::ImageBuffer::copyImage):
        * platform/graphics/texmap/TextureMapperNode.cpp:
        (WebCore::TextureMapperNode::renderContent):

2012-02-06  Allan Sandfeld Jensen  <allan.jensen@nokia.com>

        WebGestureEvent can not encode delta and area.
        https://bugs.webkit.org/show_bug.cgi?id=77728

        Add area field to PlatformGestureEvent.

        Reviewed by Kenneth Rohde Christiansen.

        * platform/PlatformGestureEvent.h:
        (WebCore::PlatformGestureEvent::PlatformGestureEvent):
        (WebCore::PlatformGestureEvent::area):

2012-02-06  Charles Wei  <charles.wei@torchmobile.com.cn>

        [BlackBerry]Use extension for a mimetype as the suggested extension
        if the url file doesn't have an extension.
        https://bugs.webkit.org/show_bug.cgi?id=76779

        Reviewed by Antonio Gomes.

        No new tests. 

        * platform/network/blackberry/NetworkJob.cpp:
        (WebCore::NetworkJob::sendResponseIfNeeded):

2012-02-06  Kentaro Hara  <haraken@chromium.org>

        Rename [HasIndexGetter], [HasNameGetter] and [HasCustomIndexSetter] IDLs
        https://bugs.webkit.org/show_bug.cgi?id=77848

        Reviewed by Adam Barth.

        For naming consistency with [CustomGetter] and [CustomSetter],
        this patch renames the following IDLs:

        [HasIndexGetter] => [IndexedGetter]  (Remove "Has". This IDL is for "indexed" properties
        in the Web IDL: http://dev.w3.org/2006/webapi/WebIDL/#idl-indexed-properties)
        [HasCustomIndexSetter] => [CustomIndexedSetter]  (Ditto.)
        [HasNameGetter] => [NamedGetter] (Remove "Has". This IDL is for "named" properties
        in the Web IDL: http://dev.w3.org/2006/webapi/WebIDL/#idl-named-properties)

        No tests. No change in behavior.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateGetOwnPropertySlotBody):
        (GenerateGetOwnPropertyDescriptorBody):
        (GenerateHeader):
        (GenerateImplementation):
        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateHeaderNamedAndIndexedPropertyAccessors):
        (GenerateImplementationIndexer):
        (GenerateImplementationNamedPropertyGetter):

        * bindings/scripts/test/TestEventTarget.idl: No change in run-bindings-tests results.
        * bindings/scripts/test/TestTypedArray.idl: Ditto.

        * Modules/gamepad/GamepadList.idl:
        * css/CSSRuleList.idl:
        * css/CSSStyleDeclaration.idl:
        * css/CSSValueList.idl:
        * css/MediaList.idl:
        * css/StyleSheetList.idl:
        * css/WebKitCSSFilterValue.idl:
        * css/WebKitCSSKeyframesRule.idl:
        * css/WebKitCSSTransformValue.idl:
        * dom/ClientRectList.idl:
        * dom/DOMStringList.idl:
        * dom/DOMStringMap.idl:
        * dom/DataTransferItemList.idl:
        * dom/NamedNodeMap.idl:
        * dom/NodeList.idl:
        * dom/TouchList.idl:
        * fileapi/EntryArray.idl:
        * fileapi/EntryArraySync.idl:
        * fileapi/FileList.idl:
        * html/DOMSettableTokenList.idl:
        * html/DOMTokenList.idl:
        * html/HTMLAllCollection.idl:
        * html/HTMLCollection.idl:
        * html/HTMLFormElement.idl:
        * html/HTMLOptionsCollection.idl:
        * html/HTMLPropertiesCollection.idl:
        * html/HTMLSelectElement.idl:
        * html/TextTrackCueList.idl:
        * html/canvas/CanvasPixelArray.idl:
        * html/canvas/Float32Array.idl:
        * html/canvas/Float64Array.idl:
        * html/canvas/Int16Array.idl:
        * html/canvas/Int32Array.idl:
        * html/canvas/Int8Array.idl:
        * html/canvas/Uint16Array.idl:
        * html/canvas/Uint32Array.idl:
        * html/canvas/Uint8Array.idl:
        * html/canvas/Uint8ClampedArray.idl:
        * html/track/TextTrackList.idl:
        * mediastream/MediaStreamList.idl:
        * mediastream/MediaStreamTrackList.idl:
        * page/SpeechInputResultList.idl:
        * page/WebKitAnimationList.idl:
        * plugins/DOMMimeTypeArray.idl:
        * plugins/DOMPlugin.idl:
        * plugins/DOMPluginArray.idl:
        * storage/Storage.idl:

2012-02-06  Allan Sandfeld Jensen  <allan.jensen@nokia.com>

        Ensure timers and other active DOM objects do not fire in suspended documents.
        https://bugs.webkit.org/show_bug.cgi?id=53733

        ScriptExecutionContext now remembers it has suspended active DOM objects
        and suspends all newly installed active DOM objects as well.

        All create-calls active DOM objects now calls the post constructor method
        suspendIfNeeded that updates the suspend state. It is post constructor
        because the suspend/resume functions are virtual and thus can not be called
        from constructors.

        Reviewed by Mihai Parparita.

        Test: fast/events/suspend-timers.html

        * Modules/intents/IntentRequest.cpp:
        (WebCore::IntentRequest::create):
        * bindings/generic/ActiveDOMCallback.cpp:
        (WebCore::ActiveDOMCallback::ActiveDOMCallback):
        * dom/ActiveDOMObject.cpp:
        (WebCore::ActiveDOMObject::ActiveDOMObject):
        (WebCore::ActiveDOMObject::~ActiveDOMObject):
        (WebCore::ActiveDOMObject::suspendIfNeeded):
        * dom/ActiveDOMObject.h:
        (WebCore::ActiveDOMObject::suspendIfNeededCalled):
        * dom/DocumentEventQueue.cpp:
        (WebCore::DocumentEventQueue::DocumentEventQueue):
        * dom/ScriptExecutionContext.cpp:
        (WebCore::ScriptExecutionContext::ScriptExecutionContext):
        (WebCore::ScriptExecutionContext::~ScriptExecutionContext):
        (WebCore::ScriptExecutionContext::canSuspendActiveDOMObjects):
        (WebCore::ScriptExecutionContext::suspendActiveDOMObjects):
        (WebCore::ScriptExecutionContext::resumeActiveDOMObjects):
        (WebCore::ScriptExecutionContext::stopActiveDOMObjects):
        (WebCore::ScriptExecutionContext::suspendActiveDOMObjectIfNeeded):
        * dom/ScriptExecutionContext.h:
        (WebCore::ScriptExecutionContext::activeDOMObjectsAreSuspended):
        * fileapi/DOMFileSystem.cpp:
        (WebCore::DOMFileSystem::create):
        * fileapi/FileReader.cpp:
        (WebCore::FileReader::create):
        * fileapi/FileReader.h:
        * fileapi/FileWriter.cpp:
        (WebCore::FileWriter::create):
        * fileapi/FileWriter.h:
        * history/CachedFrame.cpp:
        (WebCore::CachedFrame::CachedFrame):
        * html/HTMLAudioElement.cpp:
        (WebCore::HTMLAudioElement::create):
        * html/HTMLMarqueeElement.cpp:
        (WebCore::HTMLMarqueeElement::create):
        * html/HTMLVideoElement.cpp:
        (WebCore::HTMLVideoElement::create):
        * mediastream/PeerConnection.cpp:
        (WebCore::PeerConnection::create):
        * notifications/Notification.cpp:
        (WebCore::Notification::create):
        * notifications/NotificationCenter.cpp:
        (WebCore::NotificationCenter::create):
        * notifications/NotificationCenter.h:
        * page/DOMTimer.cpp:
        (WebCore::DOMTimer::install):
        (WebCore::DOMTimer::fired):
        * page/EventSource.cpp:
        (WebCore::EventSource::create):
        * page/SuspendableTimer.cpp:
        (WebCore::SuspendableTimer::SuspendableTimer):
        * storage/IDBDatabase.cpp:
        (WebCore::IDBDatabase::create):
        * storage/IDBRequest.cpp:
        (WebCore::IDBRequest::create):
        * storage/IDBTransaction.cpp:
        (WebCore::IDBTransaction::create):
        * webaudio/AudioContext.cpp:
        (WebCore::AudioContext::create):
        * websockets/WebSocket.cpp:
        (WebCore::WebSocket::create):
        * websockets/WebSocket.h:
        * workers/SharedWorker.cpp:
        (WebCore::SharedWorker::create):
        * workers/Worker.cpp:
        (WebCore::Worker::create):
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::create):

2012-02-06  Philippe Normand  <pnormand@igalia.com>

        Adding FFTFrameGStreamer.cpp that I forgot to commit
        in r106537. That new file was reviewed in https://bugs.webkit.org/show_bug.cgi?id=73545.

        * platform/audio/gstreamer/FFTFrameGStreamer.cpp: Added.

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

        Add <shadow> element, which is guarded by SHADOW_DOM flag.
        https://bugs.webkit.org/show_bug.cgi?id=76435

        Reviewed by Dimitri Glazkov.

        Test: fast/dom/shadow/shadow-element.html

        * CMakeLists.txt:
        * DerivedSources.cpp:
        * DerivedSources.make:
        * DerivedSources.pri:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * html/HTMLElementsAllInOne.cpp:
        * html/HTMLTagNames.in:
        * html/shadow/HTMLShadowElement.cpp: Added.
        (WebCore):
        (WebCore::HTMLShadowElement::HTMLShadowElement):
        (WebCore::HTMLShadowElement::create):
        (WebCore::HTMLShadowElement::~HTMLShadowElement):
        * html/shadow/HTMLShadowElement.h: Added.
        (WebCore):
        (HTMLShadowElement):
        * html/shadow/HTMLShadowElement.idl: Added.

2012-02-06  Joe Thomas  <joethomas@motorola.com>

        https://bugs.webkit.org/show_bug.cgi?id=76995.
        WebKit fails IETC :indeterminate and input type=radio test.

        All input types should respect indeterminate property(getter and setter). This is true with other browsers.
        Indeterminate appearance for radio input type is supported by IOS platform. Webkit need not support indeterminate appearance
        for radio input type on other platforms.

        Reviewed by Kent Tamura.

        Test: fast/forms/indeterminate-input-types.html

        * html/CheckboxInputType.cpp:
        (WebCore::CheckboxInputType::supportsIndeterminateAppearance): Checks indeterminate appearance is supported.
        (WebCore):
        * html/CheckboxInputType.h:
        (CheckboxInputType):
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::setIndeterminate): Removed the check isCheckable().
        (WebCore::HTMLInputElement::isIndeterminate): Checks indeterminate appearance is supported.
        (WebCore):
        * html/HTMLInputElement.h:
        (HTMLInputElement):
        * html/InputType.cpp:
        (WebCore::InputType::supportsIndeterminateAppearance): Checks indeterminate appearance is supported.
        (WebCore):
        * html/InputType.h:
        (InputType):
        * html/RadioInputType.cpp:
        (WebCore::RadioInputType::willDispatchClick): Indeterminate related code is moved to IOS specific.
        (WebCore::RadioInputType::didDispatchClick): Ditto.
        (WebCore::RadioInputType::supportsIndeterminateAppearance): Checks indeterminate appearance is supported.
        (WebCore):
        * html/RadioInputType.h:
        (RadioInputType):

2012-02-06  Robin Cao  <robin.cao@torchmobile.com.cn>

        [BlackBerry] Remove unused variable in PluginViewBlackBerry
        https://bugs.webkit.org/show_bug.cgi?id=77847

        Reviewed by Kentaro Hara.

        No changes in behavior, so no new tests.

        * plugins/blackberry/PluginViewBlackBerry.cpp:
        (WebCore::PluginView::updatePluginWidget):

2012-02-06  Peter Rybin  <peter.rybin@gmail.com>

        Web Inspector: Fix CallArgument type in Inspector.json
        https://bugs.webkit.org/show_bug.cgi?id=77839

        Reviewed by Yury Semikhatsky.

        Protocol description is fixed: field type is changed. No changes to
        program code are necessary.

        * inspector/Inspector-0.1.json:
        * inspector/Inspector-1.0.json:
        * inspector/Inspector.json:

2012-02-05  Gavin Barraclough  <barraclough@apple.com>

        Remove JSObject defineGetter/defineSetter lookupGetter/lookupSetter
        https://bugs.webkit.org/show_bug.cgi?id=77451

        Reviewed by Sam Weinig.

        These can now all be implemented in terms of defineOwnProperty & getPropertyDescriptor.
        Also remove initializeGetterSetterProperty, since this is equivalent to putDirectAccessor.

        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore):
        (WebCore::JSDOMWindow::defineOwnProperty):
        * bindings/js/JSDOMWindowShell.cpp:
        (WebCore):
        * bindings/js/JSDOMWindowShell.h:
        (JSDOMWindowShell):
        * bindings/js/JSLocationCustom.cpp:
        (WebCore::JSLocation::defineOwnProperty):
        (WebCore::JSLocationPrototype::defineOwnProperty):
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateHeader):
        * page/DOMWindow.idl:
        * page/Location.idl:

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

        Unreviewed. Fix make distrcheck.

        * GNUmakefile.am: Fix typo in inspector json file.
        * GNUmakefile.list.am: Remove non existent file.

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

        Unreviewed. Qt minimal compilation fix after r106777.

        * inspector/InspectorDatabaseAgent.h: added missing #if ENABLED guards.

2012-02-05  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: REGRESSION detached dom nodes aren't highlighted
        https://bugs.webkit.org/show_bug.cgi?id=77829

        This functionality was lost when I replaced (Native roots) with (Detached DOM trees) on v8 side.

        Reviewed by Yury Semikhatsky.

        * inspector/front-end/HeapSnapshot.js:
        (WebInspector.HeapSnapshotNode.prototype.get isDetachedDOMTreesRoot):
        (WebInspector.HeapSnapshot.prototype._markDetachedDOMTreeNodes):

2012-02-05  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: get rid of artificial heap snapshot nodes from the retaining tree.
        https://bugs.webkit.org/show_bug.cgi?id=77850

        Reviewed by Yury Semikhatsky.

        * inspector/front-end/DetailedHeapshotGridNodes.js:
        (WebInspector.HeapSnapshotObjectNode):
        (WebInspector.HeapSnapshotObjectNode.prototype.updateHasChildren):
        (WebInspector.HeapSnapshotObjectNode.prototype._prefixObjectCell):
        * inspector/front-end/HeapSnapshot.js:
        (WebInspector.HeapSnapshotNode.prototype.get isArtificial):
        (WebInspector.HeapSnapshot.prototype._init):

2012-02-05  Peter Rybin  <peter.rybin@gmail.com>

        Web Inspector: CodeGeneratorInspector.py: switch domain agents to formal interfaces in BackendDispatcher
        https://bugs.webkit.org/show_bug.cgi?id=77444

        Reviewed by Yury Semikhatsky.

        All agent code is switched to formal interfaces. Actual agent class
        names and includes are dropped from InspectorBackendDispatcher.h.

        * inspector/CodeGeneratorInspector.py:
        (DomainNameFixes.get_fixed_data):
        (Generator.go):
        * inspector/InspectorAgent.h:
        * inspector/InspectorApplicationCacheAgent.h:
        * inspector/InspectorCSSAgent.cpp:
        (WebCore::InspectorCSSAgent::getMatchedStylesForNode):
        * inspector/InspectorCSSAgent.h:
        (InspectorCSSAgent):
        * inspector/InspectorConsoleAgent.h:
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::highlightNode):
        * inspector/InspectorDOMAgent.h:
        (InspectorDOMAgent):
        * inspector/InspectorDOMDebuggerAgent.h:
        * inspector/InspectorDOMStorageAgent.h:
        * inspector/InspectorDatabaseAgent.h:
        * inspector/InspectorDebuggerAgent.cpp:
        (WebCore::InspectorDebuggerAgent::setBreakpoint):
        (WebCore::InspectorDebuggerAgent::continueToLocation):
        * inspector/InspectorDebuggerAgent.h:
        (InspectorDebuggerAgent):
        * inspector/InspectorFileSystemAgent.h:
        * inspector/InspectorIndexedDBAgent.h:
        * inspector/InspectorMemoryAgent.h:
        * inspector/InspectorPageAgent.h:
        * inspector/InspectorProfilerAgent.cpp:
        (WebCore::InspectorProfilerAgent::getProfile):
        (WebCore::InspectorProfilerAgent::removeProfile):
        * inspector/InspectorProfilerAgent.h:
        (InspectorProfilerAgent):
        * inspector/InspectorResourceAgent.cpp:
        (WebCore::InspectorResourceAgent::setExtraHTTPHeaders):
        * inspector/InspectorResourceAgent.h:
        (InspectorResourceAgent):
        * inspector/InspectorRuntimeAgent.h:
        * inspector/InspectorTimelineAgent.cpp:
        (WebCore::InspectorTimelineAgent::start):
        * inspector/InspectorTimelineAgent.h:
        (InspectorTimelineAgent):
        * inspector/InspectorWorkerAgent.cpp:
        (WebCore::InspectorWorkerAgent::sendMessageToWorker):
        * inspector/InspectorWorkerAgent.h:
        (InspectorWorkerAgent):

2012-02-05  Kentaro Hara  <haraken@chromium.org>

        Rename [TreatNullAs=EmptyString] to [TreatNullAs=NullString],
        [TreatUndefinedAs=EmptyString] to [TreatUndefinedAs=NullString]
        https://bugs.webkit.org/show_bug.cgi?id=77611

        Reviewed by Adam Barth.

        While the Web IDL spec requires [TreatNullAs=EmptyString] and [TreatUndefinedAs=EmptyString],
        the current WebKit treats them as (not an empty string but) a null string.
        To avoid confusion, this patch renames [TreatNullAs=EmptyString] to [TreatNullAs=NullString],
        and [TreatUndefinedAs=EmptyString] to [TreatUndefinedAs=NullString].
        (Eventually we should fix WebKit so that it uses an empty string and then
        rename them to [TreatNullAs=EmptyString] and [TreatUndefinedAs=EmptyString].)

        No tests. No change in behavior.

        * bindings/scripts/CodeGeneratorJS.pm: Added FIXME.
        (JSValueToNative):
        * bindings/scripts/CodeGeneratorV8.pm: Ditto.
        (GetNativeTypeFromSignature):

        * bindings/scripts/test/TestObj.idl:
        * css/CSSCharsetRule.idl:
        * css/CSSPageRule.idl:
        * css/CSSRule.idl:
        * css/CSSStyleDeclaration.idl:
        * css/CSSStyleRule.idl:
        * css/CSSValue.idl:
        * css/MediaList.idl:
        * css/WebKitCSSKeyframesRule.idl:
        * dom/Attr.idl:
        * dom/CharacterData.idl:
        * dom/DOMImplementation.idl:
        * dom/Document.idl:
        * dom/Element.idl:
        * dom/NamedNodeMap.idl:
        * dom/Node.idl:
        * dom/ProcessingInstruction.idl:
        * dom/ShadowRoot.idl:
        * fileapi/Blob.idl:
        * fileapi/DirectoryEntry.idl:
        * fileapi/DirectoryEntrySync.idl:
        * fileapi/Entry.idl:
        * fileapi/EntrySync.idl:
        * fileapi/WebKitBlobBuilder.idl:
        * html/HTMLAnchorElement.idl:
        * html/HTMLButtonElement.idl:
        * html/HTMLCanvasElement.idl:
        * html/HTMLDocument.idl:
        * html/HTMLElement.idl:
        * html/HTMLFieldSetElement.idl:
        * html/HTMLFormElement.idl:
        * html/HTMLFrameElement.idl:
        * html/HTMLInputElement.idl:
        * html/HTMLKeygenElement.idl:
        * html/HTMLMediaElement.idl:
        * html/HTMLObjectElement.idl:
        * html/HTMLOutputElement.idl:
        * html/HTMLScriptElement.idl:
        * html/HTMLSelectElement.idl:
        * html/HTMLTextAreaElement.idl:
        * html/HTMLTitleElement.idl:
        * html/canvas/CanvasRenderingContext2D.idl:
        * page/Console.idl:
        * page/DOMWindow.idl:
        * storage/StorageEvent.idl:
        * svg/SVGAngle.idl:
        * svg/SVGElement.idl:
        * svg/SVGLength.idl:
        * svg/SVGScriptElement.idl:

2012-02-05  Kentaro Hara  <haraken@chromium.org>

        Rename [JSCCustom*] IDL to [JSCustom*] IDL
        https://bugs.webkit.org/show_bug.cgi?id=77844

        Reviewed by Adam Barth.

        Most existing JSC-specific IDLs have "JS" prefix. We can rename [JSCCustom] to
        [JSCustom], [JSCCustomGetter] to [JSCustomGetter], and [JSCCustomSetter] to
        [JSCustomSetter].

        No tests. No change in behavior.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateHeader):
        (GenerateImplementation):
        * css/CSSStyleDeclaration.idl:
        * html/HTMLDocument.idl:
        * html/canvas/DataView.idl:
        * page/DOMWindow.idl:
        * page/MemoryInfo.idl:
        * webaudio/ConvolverNode.idl:
        * webaudio/DOMWindowWebAudio.idl:
        * webaudio/WaveShaperNode.idl:
        * websockets/DOMWindowWebSocket.idl:
        * workers/WorkerContext.idl:

2012-02-05  ChangSeok Oh  <shivamidow@gmail.com>

        [EFL] Enable WebGL with glx backend
        https://bugs.webkit.org/show_bug.cgi?id=77308

        Reviewed by Martin Robinson.

        Implemented WebGL feature for EFL port. The way is very similar to the one of GTK port.

        No new tests required. We can verify this feature with the existing test cases.

        * CMakeLists.txt: Revised common files required for WebGL.
        * PlatformEfl.cmake: Added EFL specific files.
        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::getContext):
        * platform/graphics/ANGLEWebKitBridge.h:
        * platform/graphics/GraphicsContext3D.h:
        (WebCore):
        (WebCore::GraphicsContext3D::platformTexture):
        (GraphicsContext3D):
        (WebCore::GraphicsContext3D::paintsIntoCanvasBuffer):
        * platform/graphics/efl/DrawingBufferEfl.cpp: Copied from GTK port.
        (WebCore):
        (WebCore::DrawingBuffer::DrawingBuffer):
        (WebCore::DrawingBuffer::~DrawingBuffer):
        (WebCore::DrawingBuffer::platformColorBuffer):
        (WebCore::DrawingBuffer::paintCompositedResultsToCanvas):
        * platform/graphics/efl/GraphicsContext3DEfl.cpp: Almost same with GraphicsContext3DGtk.cpp.
        (WebCore::GraphicsContext3D::create):
        (WebCore::GraphicsContext3D::GraphicsContext3D):
        (WebCore::GraphicsContext3D::~GraphicsContext3D):
        (WebCore::GraphicsContext3D::makeContextCurrent):
        (WebCore::GraphicsContext3D::platformGraphicsContext3D):
        (WebCore::GraphicsContext3D::isGLES2Compliant):
        * platform/graphics/opengl/Extensions3DOpenGL.cpp:
        (WebCore::Extensions3DOpenGL::createVertexArrayOES):
        (WebCore::Extensions3DOpenGL::deleteVertexArrayOES):
        (WebCore::Extensions3DOpenGL::isVertexArrayOES):
        (WebCore::Extensions3DOpenGL::bindVertexArrayOES):
        * platform/graphics/opengl/GraphicsContext3DOpenGL.cpp:
        * platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:

2012-02-05  Abhishek Arya  <inferno@chromium.org>

        Crash in FormSubmission::create.
        https://bugs.webkit.org/show_bug.cgi?id=77813

        Reviewed by Kent Tamura.

        Test: fast/forms/form-submission-create-crash.xhtml

        * loader/FormSubmission.cpp:
        (WebCore::FormSubmission::create):

2012-02-05  Andreas Kling  <awesomekling@apple.com>

        Remove unused file MappedAttributeEntry.h.
        <http://webkit.org/b/77841>

        Reviewed by Anders Carlsson.

        * GNUmakefile.list.am:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/MappedAttributeEntry.h: Removed.
        * dom/StyledElement.h:

2012-02-05  Andreas Kling  <awesomekling@apple.com>

        StyledElement: Rename parseMappedAttribute() to parseAttribute().
        <http://webkit.org/b/77830>

        Reviewed by Anders Carlsson.

        Rename across the board and decorate subclasses with OVERRIDE.

2012-02-05  Gustavo Noronha Silva  <gns@gnome.org>

        Unreviewed syntax fix.

        * English.lproj/localizedStrings.js:

2012-02-05  Andreas Kling  <awesomekling@apple.com>

        Swedish buildfix.

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

2012-02-05  Anders Carlsson  <andersca@apple.com>

        The scrolling tree should be aware of any wheel event handlers on the page
        https://bugs.webkit.org/show_bug.cgi?id=77840

        Reviewed by Andreas Kling.

        If there are wheel event handlers on the page, any wheel events must be redispatched
        to the main thread so they can go through the DOM event handling.

        * dom/Document.cpp:
        (WebCore::wheelEventHandlerCountChanged):
        Inform the scrolling coordinator that the wheel event count changed.

        (WebCore::Document::didAddWheelEventHandler):
        (WebCore::Document::didRemoveWheelEventHandler):
        Call wheelEventHandlerCountChanged.

        * page/scrolling/ScrollingCoordinator.cpp:
        (WebCore::ScrollingCoordinator::frameViewWheelEventHandlerCountChanged):
        Call recomputeWheelEventHandlerCount.

        (WebCore::ScrollingCoordinator::recomputeWheelEventHandlerCount):
        Update the scrolling tree state.

        * page/scrolling/ScrollingTree.cpp:
        (WebCore::ScrollingTree::ScrollingTree):
        Initialize m_hasWheelEventHandlers to false.

        (WebCore::ScrollingTree::tryToHandleWheelEvent):
        If m_hasWheelEventHandlers is true, bail.

        (WebCore::ScrollingTree::commitNewTreeState):
        Update m_hasWheelEventHandlers.

        * page/scrolling/ScrollingTreeState.cpp:
        (WebCore::ScrollingTreeState::ScrollingTreeState):
        (WebCore::ScrollingTreeState::setWheelEventHandlerCount):
        Add getter and setter for the wheel event handler count.

2012-02-05  Andreas Kling  <awesomekling@apple.com>

        Remove mapped vs non-mapped attribute distinction.
        <http://webkit.org/b/77827>

        Reviewed by Antti Koivisto.

        Removed the isMappedAttribute flag from Attribute as it no longer serves
        a practical purpose. Previously, StyledElement would generate mapped
        attributes and plain Element would generate non-mapped ones.

        The distinction is now made much more clearly by dividing the work between
        Element's and StyledElement's attributeChanged() methods. The only thing
        that StyledElement wants to do in addition to what Element does is
        calling parseMappedAttribute() (which we'll rename in a later patch.)

        * dom/Attribute.cpp:
        (WebCore::Attribute::clone):
        * dom/Attribute.h:
        (WebCore::Attribute::create):
        (WebCore::Attribute::Attribute):
        (Attribute):
        * dom/Document.cpp:
        (WebCore::Document::createAttributeNS):
        * dom/Element.cpp:
        (WebCore::Element::attributeChanged):
        * dom/Element.h:
        (Element):
        * dom/Node.cpp:
        (WebCore::Node::dumpStatistics):
        * dom/StyledElement.cpp:
        (WebCore::StyledElement::attributeChanged):
        (WebCore::StyledElement::parseMappedAttribute):
        * dom/StyledElement.h:
        (StyledElement):
        * html/parser/HTMLConstructionSite.cpp:
        (WebCore):
        * html/parser/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::attributesForIsindexInput):
        * html/parser/TextDocumentParser.cpp:
        (WebCore::TextDocumentParser::insertFakePreElement):
        * svg/SVGStyledElement.cpp:
        (WebCore::SVGStyledElement::getPresentationAttribute):
        * xml/parser/MarkupTokenBase.h:
        (WebCore::::initializeAttributes):

2012-02-05  Andreas Kling  <awesomekling@apple.com>

        Kill CSSMappedAttributeDeclaration.
        <http://webkit.org/b/77820>

        Reviewed by Antti Koivisto.

        Replace all use of CSSMappedAttributeDeclaration by StylePropertySet.
        Moved the setNeedsStyleRecalc() calls from CSSMappedAttributeDeclaration
        to the add/remove-CSS-property helpers in StyledElement.

        This removes one step of indirection for attribute styles and reduces
        the size of elements that have presentational attributes by one pointer.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.order:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/CSSMappedAttributeDeclaration.cpp: Removed.
        * dom/CSSMappedAttributeDeclaration.h: Removed.
        * dom/DOMAllInOne.cpp:

            Remove CSSMappedAttributeDeclaration.{cpp,h}

        * css/CSSParser.h:
        * css/CSSParser.cpp:
        (WebCore::parseSimpleLengthValue):

            Remove CSSParser::parseMappedAttributeValue(), we now use parseValue()
            directly instead. We lose the benefit of caching new CSSValues in the
            document's CSSValuePool but this optimization can be added back later.

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::matchAllRules):
        * dom/ElementAttributeData.h:
        (ElementAttributeData):
        * dom/NamedNodeMap.cpp:
        (WebCore::NamedNodeMap::ensureAttributeStyle):
        * dom/NamedNodeMap.h:
        (WebCore::NamedNodeMap::attributeStyle):
        (NamedNodeMap):
        * dom/StyledElement.cpp:
        (WebCore::StyledElement::removeCSSProperties):
        (WebCore::StyledElement::addCSSProperty):
        (WebCore::StyledElement::addCSSImageProperty):
        (WebCore::StyledElement::addCSSLength):
        (WebCore::StyledElement::addCSSColor):
        * dom/StyledElement.h:
        (WebCore):
        (WebCore::StyledElement::attributeStyle):
        (WebCore::StyledElement::ensureAttributeStyle):
        * inspector/InspectorCSSAgent.cpp:
        (WebCore::InspectorCSSAgent::buildArrayForAttributeStyles):

2012-02-05  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: beautify retaining tree items view.
        https://bugs.webkit.org/show_bug.cgi?id=77810

        Reviewed by Yury Semikhatsky.

        * inspector/front-end/DetailedHeapshotGridNodes.js:
        (WebInspector.HeapSnapshotGenericObjectNode.prototype._createObjectCell):
        (WebInspector.HeapSnapshotObjectNode.prototype._prefixObjectCell):
        * inspector/front-end/heapProfiler.css:
        (.cycled-ancessor-node):
        * inspector/front-end/profilesPanel.css:

2012-02-04  Shawn Singh  <shawnsingh@chromium.org>

        [chromium] Add support to force full damage in CCDamageTracker
        https://bugs.webkit.org/show_bug.cgi?id=76805

        Reviewed by James Robinson.

        Unit test added to CCDamageTrackerTest.cpp.

        This feature is needed for events that should cause the entire
        surface to be damaged, even if layers themselves had only partial
        damage or no damage at all. For example, tab-switching is one such
        event.

        * platform/graphics/chromium/cc/CCDamageTracker.cpp:
        (WebCore::CCDamageTracker::CCDamageTracker):
        (WebCore::CCDamageTracker::updateDamageRectForNextFrame):
        * platform/graphics/chromium/cc/CCDamageTracker.h:
        (WebCore::CCDamageTracker::forceFullDamageNextUpdate):
        (CCDamageTracker):

2012-02-04  Anders Carlsson  <andersca@apple.com>

        Remove dead code from ScrollingCoordinator
        https://bugs.webkit.org/show_bug.cgi?id=77821

        Reviewed by Sam Weinig.

        * WebCore.exp.in:
        * page/scrolling/ScrollingCoordinator.cpp:
        (WebCore::ScrollingCoordinator::ScrollingCoordinator):
        * page/scrolling/ScrollingCoordinator.h:
        (ScrollingCoordinator):
        * page/scrolling/mac/ScrollingCoordinatorMac.mm:
        (WebCore::ScrollingCoordinator::frameViewScrollLayerDidChange):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::frameViewDidChangeSize):
        (WebCore::RenderLayerCompositor::updateRootLayerPosition):

2012-02-04  Anders Carlsson  <andersca@apple.com>

        The scrolling tree should inform the main scrolling coordinator when the scroll position changes
        https://bugs.webkit.org/show_bug.cgi?id=77818

        Reviewed by Sam Weinig.

        * page/scrolling/ScrollingCoordinator.cpp:
        (WebCore::ScrollingCoordinator::updateMainFrameScrollPosition):
        Set the main frame scroll position.

        * page/scrolling/ScrollingTree.cpp:
        (WebCore::ScrollingTree::updateMainFrameScrollPosition):
        Call ScrollingCoordinator::updateMainFrameScrollPosition on the main thread.

        * page/scrolling/mac/ScrollingTreeNodeMac.mm:
        (WebCore::ScrollingTreeNodeMac::scrollBy):
        Call ScrollingTree::updateMainFrameScrollPosition.

2012-02-04  Andreas Kling  <awesomekling@apple.com>

        Element: Remove unnecessary attributeChanged() argument.
        <http://webkit.org/b/77814>

        Reviewed by Ryosuke Niwa.

        Remove the 'preserveDecls' argument to Element::attributeChanged() as that is no
        longer needed after the removal of per-attribute style declarations.
        Decorated subclass overrides with OVERRIDE since we're touching the lines.

        Also removed an old inaccurate comment in NamedNodeMap::setAttributes() - calling
        attributeChanged() is absolutely necessary to initialize element-specific state.

        * dom/Element.cpp:
        (WebCore::Element::attributeChanged):
        * dom/Element.h:
        (Element):
        * dom/NamedNodeMap.cpp:
        (WebCore::NamedNodeMap::setAttributes):
        * dom/StyledElement.cpp:
        (WebCore::StyledElement::attributeChanged):
        * dom/StyledElement.h:
        (StyledElement):
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::updateType):
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::attributeChanged):
        * html/HTMLMediaElement.h:
        (HTMLMediaElement):
        * html/HTMLScriptElement.cpp:
        (WebCore::HTMLScriptElement::attributeChanged):
        * html/HTMLScriptElement.h:
        (HTMLScriptElement):
        * html/HTMLTrackElement.cpp:
        (WebCore::HTMLTrackElement::attributeChanged):
        * html/HTMLTrackElement.h:
        (HTMLTrackElement):
        * svg/SVGAnimationElement.cpp:
        (WebCore::SVGAnimationElement::attributeChanged):
        * svg/SVGAnimationElement.h:
        * svg/SVGElement.cpp:
        (WebCore::SVGElement::attributeChanged):
        * svg/SVGElement.h:
        (SVGElement):
        * svg/animation/SVGSMILElement.cpp:
        (WebCore::SVGSMILElement::attributeChanged):
        * svg/animation/SVGSMILElement.h:
        (SVGSMILElement):

2012-02-04  Ken Buchanan  <kenrb@chromium.org>

        Crash when reparenting children of flexible boxes
        https://bugs.webkit.org/show_bug.cgi?id=77458

        Reviewed by Ojan Vafai.

        This fixes some regressions I introduced in r106150. RenderBlock::
        removeChild needs to be careful about not collapsing anonymous
        blocks underneath flexible boxes, and also about node ordering
        when there is an after block.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::removeChild):
        (WebCore::RenderBlock::collapseAnonymousBoxChild):

2012-02-04  Ryosuke Niwa  <rniwa@webkit.org>

        Debug build fix after r106715.

        * html/HTMLDetailsElement.cpp:
        (WebCore::DetailsSummaryElement::create):

2012-02-04  Andreas Kling  <awesomekling@apple.com>

        Unreviewed test fix after r106740.
        <http://webkit.org/b/77204>

        Disable matched declaration caching for elements with attribute style until we can
        figure out how it's supposed to work.

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

2012-02-03  Andreas Kling  <awesomekling@apple.com>

        Kill per-Attribute style declarations.
        <http://webkit.org/b/77204>

        Reviewed by Antti Koivisto.

        TL;DR summary: Remove the per-Attribute style declarations and replace them by a single
        style declaration on StyledElement that acts as a secondary inline style.

        The previous design was conceived in the Age of the Old Web(tm) where the majority of
        element styling was accomplished via attributes. Nowadays, CSS is a much better tool for
        this and we should optimize around that instead.

        StyledElements now have an attributeStyle() which contains all the styling from attributes.
        parseMappedAttribute() is responsible for adding/removing properties to the attributeStyle
        as the corresponding attributes come in/out of the element.

        Each Attribute instance shrinks by one pointer, each element that has attributes grows by
        one pointer. The styles from individual attributes are no longer shared, so content that
        uses a lot of repeating styling attributes will see a slight memory regression from this.
        Future improvements to this could enable sharing the attributeStyle between elements that
        have the same exact attributes to mitigate some of the damage.

        There should be no web-facing behavior change from this, but it does break two things:

        - The Inspector feature for displaying per-attribute styles. To keep things manageable,
          this patch simply files all the attribute styles together under an anonymous attribute
          in the Inspector.

        - The Obj-C DOM binding for Attr::style() has to be kept for compatibility reasons,
          though it's already deprecated. It will now always return nil, since there's no way to
          retrieve a live style declaration that's specific to a certain Attr.

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::matchAllRules):
        (WebCore::CSSStyleSelector::canShareStyleWithElement):
        * dom/Attr.h:
        (WebCore):
        (Attr):
        (WebCore::Attr::style):
        * dom/Attribute.cpp:
        (WebCore::Attribute::clone):
        * dom/Attribute.h:
        (WebCore):
        (WebCore::Attribute::create):
        (WebCore::Attribute::createMapped):
        (Attribute):
        (WebCore::Attribute::Attribute):
        * dom/CSSMappedAttributeDeclaration.cpp:
        (WebCore::CSSMappedAttributeDeclaration::~CSSMappedAttributeDeclaration):
        (WebCore::CSSMappedAttributeDeclaration::setMappedProperty):
        * dom/CSSMappedAttributeDeclaration.h:
        (CSSMappedAttributeDeclaration):
        (WebCore::CSSMappedAttributeDeclaration::CSSMappedAttributeDeclaration):
        * dom/Element.h:
        (Element):
        * dom/ElementAttributeData.h:
        (ElementAttributeData):
        * dom/NamedNodeMap.cpp:
        (WebCore::NamedNodeMap::ensureAttributeStyle):
        (WebCore):
        * dom/NamedNodeMap.h:
        (WebCore::NamedNodeMap::attributeStyle):
        (NamedNodeMap):
        * dom/StyledElement.cpp:
        (WebCore):
        (WebCore::StyledElement::attributeChanged):
        (WebCore::StyledElement::removeCSSProperties):
        (WebCore::StyledElement::addCSSProperty):
        (WebCore::StyledElement::addCSSImageProperty):
        (WebCore::StyledElement::addCSSLength):
        (WebCore::StyledElement::addCSSColor):
        * dom/StyledElement.h:
        (StyledElement):
        (WebCore::StyledElement::removeCSSProperty):
        (WebCore::StyledElement::attributeStyle):
        (WebCore::StyledElement::ensureAttributeStyle):
        * html/HTMLBRElement.cpp:
        (WebCore::HTMLBRElement::parseMappedAttribute):
        * html/HTMLBRElement.h:
        (HTMLBRElement):
        * html/HTMLBodyElement.cpp:
        (WebCore::HTMLBodyElement::parseMappedAttribute):
        * html/HTMLBodyElement.h:
        (HTMLBodyElement):
        * html/HTMLDivElement.cpp:
        (WebCore::HTMLDivElement::parseMappedAttribute):
        * html/HTMLDivElement.h:
        (HTMLDivElement):
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::applyBorderAttribute):
        (WebCore::HTMLElement::mapLanguageAttributeToLocale):
        (WebCore::HTMLElement::parseMappedAttribute):
        (WebCore::HTMLElement::removeHTMLAlignment):
        (WebCore):
        (WebCore::HTMLElement::addHTMLAlignmentToStyledElement):
        (WebCore::HTMLElement::setContentEditable):
        * html/HTMLElement.h:
        (HTMLElement):
        * html/HTMLEmbedElement.cpp:
        (WebCore::HTMLEmbedElement::parseMappedAttribute):
        * html/HTMLEmbedElement.h:
        (HTMLEmbedElement):
        * html/HTMLFontElement.cpp:
        (WebCore::HTMLFontElement::parseMappedAttribute):
        * html/HTMLFontElement.h:
        (HTMLFontElement):
        * html/HTMLFrameSetElement.cpp:
        (WebCore::HTMLFrameSetElement::parseMappedAttribute):
        * html/HTMLFrameSetElement.h:
        (HTMLFrameSetElement):
        * html/HTMLHRElement.cpp:
        (WebCore::HTMLHRElement::parseMappedAttribute):
        * html/HTMLHRElement.h:
        (HTMLHRElement):
        * html/HTMLIFrameElement.cpp:
        (WebCore::HTMLIFrameElement::parseMappedAttribute):
        * html/HTMLIFrameElement.h:
        (HTMLIFrameElement):
        * html/HTMLImageElement.cpp:
        (WebCore::HTMLImageElement::parseMappedAttribute):
        * html/HTMLImageElement.h:
        (HTMLImageElement):
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::parseMappedAttribute):
        * html/HTMLInputElement.h:
        (HTMLInputElement):
        * html/HTMLLIElement.cpp:
        (WebCore::HTMLLIElement::parseMappedAttribute):
        * html/HTMLLIElement.h:
        (HTMLLIElement):
        * html/HTMLMarqueeElement.cpp:
        (WebCore::HTMLMarqueeElement::parseMappedAttribute):
        * html/HTMLMarqueeElement.h:
        (HTMLMarqueeElement):
        * html/HTMLOListElement.cpp:
        (WebCore::HTMLOListElement::parseMappedAttribute):
        * html/HTMLOListElement.h:
        (HTMLOListElement):
        * html/HTMLOutputElement.cpp:
        * html/HTMLOutputElement.h:
        (HTMLOutputElement):
        * html/HTMLParagraphElement.cpp:
        (WebCore::HTMLParagraphElement::parseMappedAttribute):
        * html/HTMLParagraphElement.h:
        (HTMLParagraphElement):
        * html/HTMLPlugInElement.cpp:
        (WebCore::HTMLPlugInElement::parseMappedAttribute):
        * html/HTMLPlugInElement.h:
        (HTMLPlugInElement):
        * html/HTMLPreElement.cpp:
        (WebCore::HTMLPreElement::parseMappedAttribute):
        * html/HTMLPreElement.h:
        (HTMLPreElement):
        * html/HTMLTableCaptionElement.cpp:
        (WebCore::HTMLTableCaptionElement::parseMappedAttribute):
        * html/HTMLTableCaptionElement.h:
        (HTMLTableCaptionElement):
        * html/HTMLTableCellElement.cpp:
        (WebCore::HTMLTableCellElement::parseMappedAttribute):
        * html/HTMLTableCellElement.h:
        (HTMLTableCellElement):
        * html/HTMLTableColElement.cpp:
        (WebCore::HTMLTableColElement::parseMappedAttribute):
        * html/HTMLTableColElement.h:
        (HTMLTableColElement):
        * html/HTMLTableElement.cpp:
        (WebCore::HTMLTableElement::parseMappedAttribute):
        * html/HTMLTableElement.h:
        (HTMLTableElement):
        * html/HTMLTablePartElement.cpp:
        (WebCore):
        (WebCore::HTMLTablePartElement::parseMappedAttribute):
        * html/HTMLTablePartElement.h:
        * html/HTMLTextAreaElement.cpp:
        (WebCore::HTMLTextAreaElement::parseMappedAttribute):
        * html/HTMLUListElement.cpp:
        (WebCore::HTMLUListElement::parseMappedAttribute):
        * html/HTMLUListElement.h:
        (HTMLUListElement):
        * html/HTMLVideoElement.cpp:
        (WebCore::HTMLVideoElement::parseMappedAttribute):
        * inspector/InspectorCSSAgent.cpp:
        (WebCore::InspectorCSSAgent::buildArrayForAttributeStyles):
        * mathml/MathMLElement.cpp:
        (WebCore::MathMLElement::parseMappedAttribute):
        * mathml/MathMLElement.h:
        * svg/SVGImageElement.cpp:
        (WebCore::SVGImageElement::parseMappedAttribute):
        * svg/SVGStyledElement.cpp:
        (WebCore::SVGStyledElement::parseMappedAttribute):
        (WebCore::SVGStyledElement::getPresentationAttribute):
        * svg/SVGStyledElement.h:
        (SVGStyledElement):
        * svg/SVGTextContentElement.cpp:
        (WebCore::SVGTextContentElement::parseMappedAttribute):

2012-02-03  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: get rid of cycles in retaining tree
        https://bugs.webkit.org/show_bug.cgi?id=77801

        Drive by fix: 'retained by' prefix was removed.

        Reviewed by Yury Semikhatsky.

        * inspector/front-end/DetailedHeapshotGridNodes.js:
        (WebInspector.HeapSnapshotObjectNode):
        (WebInspector.HeapSnapshotObjectNode.prototype._updateHasChildren):
        (WebInspector.HeapSnapshotObjectNode.prototype._createChildNode):
        (WebInspector.HeapSnapshotObjectNode.prototype._prefixObjectCell):
        * inspector/front-end/profilesPanel.css:
        (.cycled-ancessor-node):

2012-02-04  Kentaro Hara  <haraken@chromium.org>

        Add the "JS" prefix to JSC specific IDL attributes
        https://bugs.webkit.org/show_bug.cgi?id=77693

        Reviewed by Darin Adler.

        Some JSC specific IDLs do not have "JS" prefix, e.g. [CustomIsReachable].
        It might be OK since JSC is the main JavaScript engine in WebKit, but
        distinguishing IDLs widely used in WebKit and IDLs used in JSC only would help
        people understand the role of IDLs.

        This patch renames the following JSC specific IDLs:

            CustomFinalize => JSCustomFinalize
            CustomIsReachable => JSCustomIsReachable
            CustomMarkFunction => JSCustomMarkFunction
            CustomToJS => JSCustomToJS
            CustomNativeConverter => JSCustomToNativeObject (Note: For naming consistency with [JSCustomToJS])
            GenerateIsReachable => JSGenerateIsReachable
            GenerateToJS => JSGenerateToJS
            NoStaticTables => JSNoStaticTables
            WindowEventListener => JSWindowEventListener
            InlineGetOwnPropertySlot => JSInlineGetOwnPropertySlot
            DelegatingPrototypePutFunction => JSCustomPrototypePutDelegate

        No tests. No changes in behavior.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateGetOwnPropertySlotBody):
        (GenerateGetOwnPropertyDescriptorBody):
        (GenerateHeader):
        (GenerateImplementation):
        * bindings/scripts/CodeGeneratorV8.pm:
        (HasCustomToV8Implementation):

        * bindings/scripts/test/TestTypedArray.idl: No change in run-bindings-tests results.

        * css/CSSRule.idl:
        * css/CSSRuleList.idl:
        * css/CSSStyleDeclaration.idl:
        * css/CSSValue.idl:
        * css/MediaList.idl:
        * css/MediaQueryListListener.idl:
        * css/StyleMedia.idl:
        * css/StyleSheet.idl:
        * css/StyleSheetList.idl:
        * dom/Attr.idl:
        * dom/DOMCoreException.idl:
        * dom/DOMImplementation.idl:
        * dom/DOMStringMap.idl:
        * dom/Document.idl:
        * dom/Element.idl:
        * dom/ErrorEvent.idl:
        * dom/Event.idl:
        * dom/EventException.idl:
        * dom/EventListener.idl:
        * dom/MessageChannel.idl:
        * dom/MessageEvent.idl:
        * dom/MessagePort.idl:
        * dom/NamedNodeMap.idl:
        * dom/Node.idl:
        * dom/NodeFilter.idl:
        * dom/NodeIterator.idl:
        * dom/NodeList.idl:
        * dom/TreeWalker.idl:
        * dom/WebKitNamedFlow.idl:
        * fileapi/Blob.idl:
        * fileapi/DOMFileSystem.idl:
        * fileapi/DOMFileSystemSync.idl:
        * fileapi/DirectoryEntry.idl:
        * fileapi/DirectoryEntrySync.idl:
        * fileapi/DirectoryReader.idl:
        * fileapi/DirectoryReaderSync.idl:
        * fileapi/Entry.idl:
        * fileapi/EntryArray.idl:
        * fileapi/EntryArraySync.idl:
        * fileapi/EntrySync.idl:
        * fileapi/File.idl:
        * fileapi/FileEntry.idl:
        * fileapi/FileEntrySync.idl:
        * fileapi/FileError.idl:
        * fileapi/FileException.idl:
        * fileapi/FileList.idl:
        * fileapi/FileReader.idl:
        * fileapi/FileReaderSync.idl:
        * fileapi/FileWriter.idl:
        * fileapi/Metadata.idl:
        * fileapi/OperationNotAllowedException.idl:
        * fileapi/WebKitBlobBuilder.idl:
        * html/DOMFormData.idl:
        * html/DOMSettableTokenList.idl:
        * html/DOMTokenList.idl:
        * html/DOMURL.idl:
        * html/HTMLAllCollection.idl:
        * html/HTMLBodyElement.idl:
        * html/HTMLCollection.idl:
        * html/HTMLFrameSetElement.idl:
        * html/ImageData.idl:
        * html/MediaController.idl:
        * html/TextTrack.idl:
        * html/TextTrackCue.idl:
        * html/VoidCallback.idl:
        * html/canvas/ArrayBuffer.idl:
        * html/canvas/ArrayBufferView.idl:
        * html/canvas/CanvasRenderingContext.idl:
        * html/canvas/DataView.idl:
        * html/canvas/Float32Array.idl:
        * html/canvas/Float64Array.idl:
        * html/canvas/Int16Array.idl:
        * html/canvas/Int32Array.idl:
        * html/canvas/Int8Array.idl:
        * html/canvas/OESStandardDerivatives.idl:
        * html/canvas/OESTextureFloat.idl:
        * html/canvas/OESVertexArrayObject.idl:
        * html/canvas/Uint16Array.idl:
        * html/canvas/Uint32Array.idl:
        * html/canvas/Uint8Array.idl:
        * html/canvas/Uint8ClampedArray.idl:
        * html/canvas/WebGLCompressedTextures.idl:
        * html/canvas/WebGLDebugRendererInfo.idl:
        * html/canvas/WebGLDebugShaders.idl:
        * html/canvas/WebGLLoseContext.idl:
        * html/canvas/WebGLRenderingContext.idl:
        * html/track/TextTrackList.idl:
        * loader/appcache/DOMApplicationCache.idl:
        * mediastream/LocalMediaStream.idl:
        * page/BarInfo.idl:
        * page/Console.idl:
        * page/DOMSelection.idl:
        * page/DOMWindow.idl:
        * page/EventSource.idl:
        * page/Geolocation.idl:
        * page/History.idl:
        * page/Location.idl:
        * page/Navigator.idl:
        * page/Screen.idl:
        * page/WorkerNavigator.idl:
        * plugins/DOMMimeTypeArray.idl:
        * plugins/DOMPluginArray.idl:
        * storage/Database.idl:
        * storage/DatabaseSync.idl:
        * storage/IDBAny.idl:
        * storage/IDBKey.idl:
        * storage/SQLError.idl:
        * storage/SQLException.idl:
        * storage/SQLResultSet.idl:
        * storage/SQLResultSetRowList.idl:
        * storage/SQLTransaction.idl:
        * storage/SQLTransactionSync.idl:
        * storage/Storage.idl:
        * svg/SVGElementInstance.idl:
        * svg/SVGPathSeg.idl:
        * webaudio/AudioBufferCallback.idl:
        * webaudio/AudioBufferSourceNode.idl:
        * webaudio/AudioContext.idl:
        * webaudio/AudioDestinationNode.idl:
        * webaudio/AudioGain.idl:
        * webaudio/AudioGainNode.idl:
        * webaudio/AudioPannerNode.idl:
        * webaudio/AudioProcessingEvent.idl:
        * webaudio/BiquadFilterNode.idl:
        * webaudio/ConvolverNode.idl:
        * webaudio/DelayNode.idl:
        * webaudio/DynamicsCompressorNode.idl:
        * webaudio/HighPass2FilterNode.idl:
        * webaudio/JavaScriptAudioNode.idl:
        * webaudio/LowPass2FilterNode.idl:
        * webaudio/MediaElementAudioSourceNode.idl:
        * webaudio/OfflineAudioCompletionEvent.idl:
        * webaudio/RealtimeAnalyserNode.idl:
        * webaudio/WaveShaperNode.idl:
        * websockets/CloseEvent.idl:
        * websockets/WebSocket.idl:
        * workers/AbstractWorker.idl:
        * workers/DedicatedWorkerContext.idl:
        * workers/SharedWorker.idl:
        * workers/SharedWorkerContext.idl:
        * workers/Worker.idl:
        * workers/WorkerContext.idl:
        * workers/WorkerLocation.idl:
        * xml/XMLHttpRequest.idl:
        * xml/XMLHttpRequestException.idl:
        * xml/XMLHttpRequestProgressEvent.idl:
        * xml/XMLHttpRequestUpload.idl:
        * xml/XPathResult.idl:

2012-02-04  Emil A Eklund  <eae@chromium.org>

        Convert RenderTheme over to new layout abstraction
        https://bugs.webkit.org/show_bug.cgi?id=77783

        Reviewed by Eric Seidel.

        Change the RenderTheme classes to use the new layout abstraction as a
        part of the ongoing conversion work.

        No new tests.

        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::paint):
        (WebCore::RenderTheme::volumeSliderOffsetFromMuteButton):
        (WebCore::RenderTheme::baselinePosition):
        (WebCore::RenderTheme::adjustRepaintRect):
        (WebCore::RenderTheme::meterSizeForBounds):
        * rendering/RenderTheme.h:
        (RenderTheme):
        (WebCore::RenderTheme::paintCapsLockIndicator):
        * rendering/RenderThemeChromiumMac.h:
        (RenderThemeChromiumMac):
        * rendering/RenderThemeChromiumMac.mm:
        (WebCore::RenderThemeChromiumMac::volumeSliderOffsetFromMuteButton):
        * rendering/RenderThemeChromiumSkia.cpp:
        (WebCore::RenderThemeChromiumSkia::convertToPaintingRect):
        (WebCore::RenderThemeChromiumSkia::paintSearchFieldCancelButton):
        (WebCore::RenderThemeChromiumSkia::paintSearchFieldResultsDecoration):
        (WebCore::RenderThemeChromiumSkia::paintSearchFieldResultsButton):
        * rendering/RenderThemeChromiumSkia.h:
        * rendering/RenderThemeMac.h:
        (RenderThemeMac):
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::adjustRepaintRect):
        (WebCore::RenderThemeMac::inflateRect):
        (WebCore::RenderThemeMac::setControlSize):
        (WebCore::RenderThemeMac::paintCapsLockIndicator):
        (WebCore::RenderThemeMac::paintMenuList):
        (WebCore::RenderThemeMac::meterSizeForBounds):
        (WebCore::RenderThemeMac::paintMenuListButtonGradients):
        (WebCore::RenderThemeMac::setPopupButtonCellState):
        (WebCore::RenderThemeMac::paintSearchFieldCancelButton):
        (WebCore::RenderThemeMac::volumeSliderOffsetFromMuteButton):
        * rendering/RenderThemeSafari.cpp:
        (WebCore::RenderThemeSafari::baselinePosition):
        * rendering/RenderThemeSafari.h:
        (RenderThemeSafari):
        * rendering/RenderThemeWin.cpp:
        (WebCore::RenderThemeWin::paintSearchFieldCancelButton):
        (WebCore::RenderThemeWin::paintSearchFieldResultsDecoration):
        (WebCore::RenderThemeWin::paintSearchFieldResultsButton):
        (WebCore::RenderThemeWin::volumeSliderOffsetFromMuteButton):
        * rendering/RenderThemeWin.h:
        (RenderThemeWin):

2012-02-04  Stephen White  <senorblanco@chromium.org>

        [chromium] Fix multi-second hangs in compositor invalidating large layers
        https://bugs.webkit.org/show_bug.cgi?id=77774

        Reviewed by James Robinson.

        Correctness covered by existing tests.

        * platform/graphics/chromium/TiledLayerChromium.cpp:
        (WebCore::TiledLayerChromium::pushPropertiesTo):
        Remove tiles from the tiler when they are invalid (ie., no longer have
        texture backing).
        (WebCore::TiledLayerChromium::invalidateRect):
        Instead of iterating over the tile indices (which may be very large),
        iterate over the tile hash map instead.

2012-02-04  Swapna P  <spottabathini@innominds.com>

        Reviewed by Antonio Gomes.
        
        Bug: iframe with scrolling=no incorrectly autoscrollable
        https://bugs.webkit.org/show_bug.cgi?id=61558
        
        Added check for frame scrolling mode just before applying scroll on frame content in function RenderLayer::scrollRect
        
        Testcase: LayoutTests/fast/events/autoscroll-with-non-scrollable-parent.html
        
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::scrollRectToVisible):

2012-02-03  Tim Horton  <timothy_horton@apple.com>

        Canvas-into-canvas drawing should respect backing store scale ratio
        https://bugs.webkit.org/show_bug.cgi?id=77784
        <rdar://problem/10549729>

        Reviewed by Dan Bernstein.

        Respect the backing store scale ratio when drawing a canvas into another
        canvas via ctx.drawImage(canvas, x, y). Previous behavior caused canvas
        drawing to differ based on the size of the backing store, which is ideally
        an implementation detail to authors.

        Also, rename the source canvas arguments to CanvasRenderingContext2D::drawImage
        to be more clear.

        No new tests.

        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::drawImage):

2012-02-03  Beth Dakin  <bdakin@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=77782
        WebPageProxy::didNewFirstVisuallyNonEmptyLayout should is called more than 
        once on some pages with frames
        -and corresponding-
        <rdar://problem/10798474>

        Reviewed by Sam Weinig.

        startCountingRelevantRepaintedObjects() should only be called for the main 
        frame. Otherwise, the counter will be re-set inappropriately, and 
        didNewFirstVisuallyNonEmptyLayout may even end up firing more than once. 
        * page/FrameView.cpp:
        (WebCore::FrameView::performPostLayoutTasks):

2012-02-03  Benjamin Poulain  <bpoulain@apple.com>

        Reduce the memory allocations of WebCore's cssPropertyName()
        https://bugs.webkit.org/show_bug.cgi?id=74782

        Reviewed by Geoffrey Garen.

        Add a fast path to avoid the use of the StringBuilder.

        The string builder is needed for two cases:
        -CSS prefix (the character after the prefix must be uppercase)
        -JavaScript CamelCase name for CSS properties

        We can skip all memory allocations if the property is not in those
        two cases. We start by testing the string for uppercase characters,
        and just return the an identical string.

        This patch create a "fast case" 2.7 times faster than previously.
        The "slow case" is 2-3% slower due to the additional check at the beginning.

        * bindings/js/JSCSSStyleDeclarationCustom.cpp:
        (WebCore):
        (WebCore::containsASCIIUpperChar):
        (WebCore::cssPropertyName):
        (WebCore::isCSSPropertyName):

2012-02-03  Anders Carlsson  <andersca@apple.com>

        WebKit2 should dispatch wheel events to the new ScrollingTree class
        https://bugs.webkit.org/show_bug.cgi?id=77795

        Reviewed by Andreas Kling.

        * WebCore.exp.in:
        Add new symbols needed by WebKit2.

        * WebCore.xcodeproj/project.pbxproj:
        Make ScrollingTree.h private so it can be included by WebKit2.

        * page/scrolling/ScrollingCoordinator.cpp:
        (WebCore::ScrollingCoordinator::scrollingTree):
        * page/scrolling/ScrollingCoordinator.h:
        Add a scrolling tree getter.

2012-02-03  Dmitry Lomov  <dslomov@google.com>

        [Chromium] WebCore::toV8Context crashes if DomWindow::frame() returns null.
        https://bugs.webkit.org/show_bug.cgi?id=77686.

        Reviewed by Adam Barth.

        * bindings/v8/V8Helpers.cpp:
        (WebCore::toV8Context):

2012-02-03  Anders Carlsson  <andersca@apple.com>

        The scrolling tree should be able to handle wheel events
        https://bugs.webkit.org/show_bug.cgi?id=77794

        Reviewed by Andreas Kling.

        * page/scrolling/ScrollingTree.cpp:
        (WebCore::ScrollingTree::tryToHandleWheelEvent):
        New function. Currently this always returns that it was able to handle the wheel event,
        but this will change in the future.

        (WebCore::ScrollingTree::handleWheelEvent):
        Ask the root node to handle the wheel event.

        * page/scrolling/ScrollingTreeNode.h:
        Add a handleWheelEvent pure virtual member function.

        * page/scrolling/mac/ScrollingTreeNodeMac.mm:
        (WebCore::ScrollingTreeNodeMac::handleWheelEvent):
        Call scrollBy for now. Eventually this should use a scroll elasticity controller to handle
        things like rubber-banding.

        (WebCore::ScrollingTreeNodeMac::scrollPosition):
        (WebCore::ScrollingTreeNodeMac::setScrollPosition):
        Add getters and setters for the scroll position.

        (WebCore::ScrollingTreeNodeMac::scrollBy):
        Update the scroll position given the offset.

2012-02-03  Ryosuke Niwa  <rniwa@webkit.org>

        Crash in Node::dispatchSubtreeModifiedEvent
        https://bugs.webkit.org/show_bug.cgi?id=77449

        Reviewed by Alexey Proskuryakov.

        The bug was caused by appendChild not retaining this pointer.
        This is normally okay because there's another owner within JSC/V8 binding code that
        holds onto the node but this isn't the case when nodes are created as a part
        of setting document.title. Fixed the crash by retaining the pointer as needed.

        Test: fast/dom/remove-body-during-title-creation.html

        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::appendChild):

2012-02-03  Anders Carlsson  <andersca@apple.com>

        Apply changed properties from the updated scrolling tree state
        https://bugs.webkit.org/show_bug.cgi?id=77792

        Reviewed by Andreas Kling.

        * page/scrolling/ScrollingTreeNode.cpp:
        (WebCore::ScrollingTreeNode::update):
        Update the tree node properties from the scrolling tree state.

        * page/scrolling/ScrollingTreeNode.h:
        (WebCore::ScrollingTreeNode::scrollingTree):
        (WebCore::ScrollingTreeNode::viewportRect):
        (WebCore::ScrollingTreeNode::contentsSize):
        Add getters.

        * page/scrolling/ScrollingTreeState.h:
        (WebCore::ScrollingTreeState::changedProperties):
        New function for accessing the changed properties of the scrolling tree state.

        * page/scrolling/mac/ScrollingTreeNodeMac.h:
        * page/scrolling/mac/ScrollingTreeNodeMac.mm:
        (WebCore::ScrollingTreeNodeMac::update):
        Update the scroll layer from the scrolling tree if necessary.

2012-02-03  Brady Eidson  <beidson@apple.com>

        <rdar://problem/10742441> and https://bugs.webkit.org/show_bug.cgi?id=77766
        Need a WK2 API to filter which subframes go into WebArchives as they are created.

        Reviewed by Darin Adler.

        This adds a filter callback object that allows clients to get called back for each
        subframe that might be added to a WebArchive.

        API only, No new layout tests.

        * WebCore.exp.in:
        * loader/archive/cf/LegacyWebArchive.cpp:
        (WebCore::LegacyWebArchive::create):
        (WebCore::LegacyWebArchive::createFromSelection):
        * loader/archive/cf/LegacyWebArchive.h:
        (FrameFilter):
        (WebCore:: FrameFilter::~ FrameFilter):
        (LegacyWebArchive):

2012-02-03  Joshua Bell  <jsbell@chromium.org>

        IndexedDB: Key generators not rolled back if insertion fails or is aborted
        https://bugs.webkit.org/show_bug.cgi?id=77060

        Reviewed by Tony Chang.

        Test: storage/indexeddb/key-generator.html

        * storage/IDBObjectStoreBackendImpl.cpp:
        (WebCore::IDBObjectStoreBackendImpl::put): Add abort task to reset cache.
        (WebCore::IDBObjectStoreBackendImpl::revertAutoIncrementKeyCache):
        (WebCore):
        (WebCore::IDBObjectStoreBackendImpl::putInternal): Reset cache on error.
        * storage/IDBObjectStoreBackendImpl.h:
        (IDBObjectStoreBackendImpl):

2012-02-03  Tony Chang  <tony@chromium.org>

        positive and negative flex values are not being cleared on style changes
        https://bugs.webkit.org/show_bug.cgi?id=77771

        Reviewed by Ojan Vafai.

        If the width or height was a flex() value, but is no longer a flex
        value, we weren't clearing the positive and negative flex values in
        RenderStyle.

        Test: css3/flexbox/flex-no-flex.html

        * css/CSSStyleApplyProperty.cpp:
        (WebCore::ApplyPropertyLength::applyValue):

2012-02-03  James Robinson  <jamesr@chromium.org>

        [chromium] Defer makeContextCurrent in compositor until first frame
        https://bugs.webkit.org/show_bug.cgi?id=77269

        Reviewed by Kenneth Russell.

        There are situations where we need to instantiate a compositor, but can't call makeContextCurrent() until some
        initialization work completes on another thread that we cannot block for. This defers the first
        makeContextCurrent() call until we need to produce the first frame at which point we know the call can succeed,
        assuming that the scheduler does the right thing.

        This is accomplished by splitting up proxy initialization into two pieces:
        *) initializeContext() which attempts to instantiate a GraphicsContext3D. This can fail if we can't make a
        context at all, in which case we abort completely and return NULL from CCLayerTreeHost::create().

        *) initializeLayerRenderer() which uses the previously-created context to instantiate our compositor objects and
            grab our renderer capabilities. This can fail if the context is not usable for compositing, which we report
            to the client as a lost context event.

        Internally this introduces a new state to the CCLayerTreeHostImpl where it has a context but does not yet have a
        LayerRendererChromium, which has fairly minimal impact. One other change is that we don't instantiate the
        TextureManagers until we have the renderer capabilities, but this isn't necessary until we want to start
        painting so it doesn't have any impact outside of some overly intrustive unit tests.

        * platform/graphics/chromium/ContentLayerChromium.cpp:
        (WebCore::ContentLayerChromium::paintContentsIfDirty):
        (WebCore::ContentLayerChromium::createTextureUpdater):
        * platform/graphics/chromium/ContentLayerChromium.h:
        (ContentLayerChromium):
        * platform/graphics/chromium/ImageLayerChromium.cpp:
        (WebCore::ImageLayerChromium::paintContentsIfDirty):
        * platform/graphics/chromium/ImageLayerChromium.h:
        (ImageLayerChromium):
        * platform/graphics/chromium/TiledLayerChromium.cpp:
        * platform/graphics/chromium/TiledLayerChromium.h:
        (WebCore::TiledLayerChromium::setSampledTexelFormat):
        (TiledLayerChromium):
        * platform/graphics/chromium/cc/CCLayerTreeHost.cpp:
        (WebCore::CCLayerTreeHost::CCLayerTreeHost):
        (WebCore::CCLayerTreeHost::initialize):
        (WebCore::CCLayerTreeHost::initializeLayerRenderer):
        (WebCore):
        (WebCore::CCLayerTreeHost::beginCommitOnImplThread):
        (WebCore::CCLayerTreeHost::compositeAndReadback):
        (WebCore::CCLayerTreeHost::finishAllRendering):
        (WebCore::CCLayerTreeHost::setViewportSize):
        (WebCore::CCLayerTreeHost::setVisible):
        (WebCore::CCLayerTreeHost::updateLayers):
        * platform/graphics/chromium/cc/CCLayerTreeHost.h:
        (CCLayerTreeHost):
        ():
        * platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:
        (WebCore::CCLayerTreeHostImpl::isContextLost):
        * platform/graphics/chromium/cc/CCProxy.h:
        (CCProxy):
        * platform/graphics/chromium/cc/CCSingleThreadProxy.cpp:
        (WebCore::CCSingleThreadProxy::CCSingleThreadProxy):
        (WebCore::CCSingleThreadProxy::compositeAndReadback):
        (WebCore::CCSingleThreadProxy::initializeContext):
        (WebCore::CCSingleThreadProxy::initializeLayerRenderer):
        (WebCore::CCSingleThreadProxy::layerRendererCapabilities):
        * platform/graphics/chromium/cc/CCSingleThreadProxy.h:
        (CCSingleThreadProxy):
        * platform/graphics/chromium/cc/CCThreadProxy.cpp:
        (WebCore::CCThreadProxy::CCThreadProxy):
        (WebCore::CCThreadProxy::compositeAndReadback):
        (WebCore::CCThreadProxy::initializeContext):
        (WebCore):
        (WebCore::CCThreadProxy::initializeLayerRenderer):
        (WebCore::CCThreadProxy::layerRendererCapabilities):
        (WebCore::CCThreadProxy::initializeImplOnImplThread):
        (WebCore::CCThreadProxy::initializeContextOnImplThread):
        (WebCore::CCThreadProxy::initializeLayerRendererOnImplThread):
        * platform/graphics/chromium/cc/CCThreadProxy.h:
        (CCThreadProxy):

2012-02-03  James Robinson  <jamesr@chromium.org>

        Unreviewed compile fix for chromium - add commas after entries in list in WebCore.gypi

        * WebCore.gypi:

2012-02-03  Andreas Kling  <awesomekling@apple.com>

        Unreviewed build fix attempt after r106695.

        CSSMutableStyleDeclaration was renamed to StylePropertySet.

        * bindings/scripts/CodeGeneratorCPP.pm:
        (AddIncludesForType):
        * bindings/scripts/CodeGeneratorV8.pm:
        (AddIncludesForType):
        * bindings/v8/V8DOMWindowShell.cpp:
        * bindings/v8/V8DOMWrapper.cpp:
        * bindings/v8/V8Proxy.cpp:

2012-02-03  Yong Li  <yoli@rim.com>

        [BlackBerry] Let userIdleTime() return maximum number instead of 0 as
        most of other ports do.
        https://bugs.webkit.org/show_bug.cgi?id=77769

        Reviewed by Rob Buis.

        userIdleTime() should return a big number so it won't block page cache
        from releasing cached pages. See PageCache::releaseAutoreleasedPagesNowOrReschedule().

        No new tests as no visible functional changes.

        * platform/blackberry/SystemTimeBlackBerry.cpp:
        (WebCore::userIdleTime):

2012-02-03  Anders Carlsson  <andersca@apple.com>

        Commit scrolling tree state changes to the scrolling tree
        https://bugs.webkit.org/show_bug.cgi?id=77780

        Reviewed by Darin Adler.

        * WebCore.xcodeproj/project.pbxproj:
        * page/scrolling/ScrollingCoordinator.cpp:
        (WebCore::ScrollingCoordinator::commitTreeState):
        Send the new scrolling tree state over to the ScrollingTree on the scrolling thread.

        * page/scrolling/ScrollingTree.cpp:
        (WebCore::ScrollingTree::ScrollingTree):
        Create a root node.

        (WebCore::ScrollingTree::commitNewTreeState):
        Update the root node.

        * page/scrolling/ScrollingTreeNode.cpp: Copied from Source/WebCore/page/scrolling/ScrollingTree.cpp.
        * page/scrolling/ScrollingTreeNode.h: Copied from Source/WebCore/page/scrolling/ScrollingTree.cpp.
        Stub out an abstract ScrollingTreeNode class.

        * page/scrolling/mac/ScrollingCoordinatorMac.mm:
        (WebCore::ScrollingCoordinator::frameViewScrollLayerDidChange):
        Update the scroll layer on the tree state.

        * page/scrolling/mac/ScrollingTreeNodeMac.h: Copied from Source/WebCore/page/scrolling/ScrollingTree.cpp.
        * page/scrolling/mac/ScrollingTreeNodeMac.mm: Copied from Source/WebCore/page/scrolling/ScrollingTree.cpp.
        Stub out the concrete ScrollingTreeNodeMac subclass.

2012-02-03  Antti Koivisto  <antti@apple.com>

        Rename CSSMutableStyleDeclaration.h/.cpp to StylePropertySet.h/.cpp 
        https://bugs.webkit.org/show_bug.cgi?id=77779

        Reviewed by Darin Adler.

        Match the new class name.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSCSSStyleDeclarationCustom.cpp:
        * bindings/js/JSDOMBinding.h:
        * bindings/scripts/CodeGeneratorJS.pm:
        (NativeToJSValue):
        * bindings/scripts/CodeGeneratorObjC.pm:
        (AddIncludesForType):
        * css/CSSAllInOne.cpp:
        * css/CSSComputedStyleDeclaration.cpp:
        * css/CSSFontFaceRule.cpp:
        * css/CSSFontFaceRule.h:
        * css/CSSFontSelector.cpp:
        * css/CSSMutableStyleDeclaration.cpp: Removed.
        * css/CSSMutableStyleDeclaration.h: Removed.
        * css/CSSPageRule.cpp:
        * css/CSSParser.cpp:
        * css/CSSStyleRule.cpp:
        * css/CSSStyleRule.h:
        * css/StylePropertySet.cpp: Copied from Source/WebCore/css/CSSMutableStyleDeclaration.cpp.
        * css/StylePropertySet.h: Copied from Source/WebCore/css/CSSMutableStyleDeclaration.h.
        * css/WebKitCSSKeyframeRule.cpp:
        * css/WebKitCSSKeyframeRule.h:
        * css/WebKitCSSKeyframesRule.cpp:
        * css/WebKitCSSMatrix.cpp:
        * dom/CSSMappedAttributeDeclaration.h:
        * dom/ElementAttributeData.h:
        * dom/StyledElement.cpp:
        * dom/StyledElement.h:
        * editing/ApplyStyleCommand.cpp:
        * editing/DeleteButtonController.cpp:
        * editing/EditingStyle.cpp:
        * editing/Editor.cpp:
        * editing/EditorCommand.cpp:
        * editing/RemoveCSSPropertyCommand.cpp:
        * editing/ReplaceSelectionCommand.cpp:
        * editing/markup.cpp:
        * html/canvas/CanvasRenderingContext2D.cpp:
        * html/shadow/MeterShadowElement.cpp:
        * inspector/InspectorCSSAgent.cpp:
        * inspector/InspectorDOMAgent.cpp:
        * page/DragController.cpp:
        * page/Frame.cpp:
        * rendering/RenderLayer.cpp:
        * rendering/RenderTreeAsText.cpp:
        * svg/SVGFontFaceElement.h:
        (WebCore):

2012-02-03  Mihnea Ovidenie  <mihnea@adobe.com>

        Crash in RenderFlowThread::setRegionBoxesRegionStyle
        https://bugs.webkit.org/show_bug.cgi?id=77474

        Reviewed by David Hyatt.

        Flexbox and deprecated flexible box should also compute their region range
        when they are part of a named flow. Until now, only RenderBlock elements
        were doing that. Flexbox and deprecated flexible box, while implementing
        their own layoutBlock method, were not doing that.

        Tests: fast/regions/flexbox-in-region-crash.html
               fast/regions/select-in-region-crash.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::computeInitialRegionRangeForBlock):
        (WebCore):
        (WebCore::RenderBlock::computeRegionRangeForBlock):
        (WebCore::RenderBlock::layoutBlock):
        * rendering/RenderBlock.h:
        (RenderBlock):
        * rendering/RenderDeprecatedFlexibleBox.cpp:
        (WebCore::RenderDeprecatedFlexibleBox::layoutBlock):
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::layoutBlock):
        * rendering/RenderFlowThread.cpp:
        (WebCore::RenderFlowThread::removeRegionFromThread):
        (WebCore::RenderFlowThread::removeRenderBoxRegionInfo):
        * rendering/RenderRegion.cpp:
        (WebCore::RenderRegion::RenderRegion):
        (WebCore::RenderRegion::paintReplaced):
        * rendering/RenderRegion.h:
        (RenderRegion):

2012-02-03  Anders Carlsson  <andersca@apple.com>

        Update the tree state after layout and add a way to commit it
        https://bugs.webkit.org/show_bug.cgi?id=77767

        Reviewed by Andreas Kling.

        * page/FrameView.cpp:
        (WebCore::FrameView::performPostLayoutTasks):
        Call ScrollingCoordinator::frameViewLayoutUpdated if we have a scrolling coordinator.

        * page/scrolling/ScrollingCoordinator.cpp:
        (WebCore::ScrollingCoordinator::ScrollingCoordinator):
        Initialize m_scrollingTreeStateCommitterTimer.

        (WebCore::ScrollingCoordinator::frameViewLayoutUpdated):
        Update the viewport rect and contents size of the frame view.

        (WebCore::ScrollingCoordinator::scheduleTreeStateCommit):
        Schedule a tree state commit unless we've already scheduled one or there are no changed properties.

        (WebCore::ScrollingCoordinator::scrollingTreeStateCommitterTimerFired):
        Call commitTreeState().

        (WebCore::ScrollingCoordinator::commitTreeStateIfNeeded):
        Commit the tree state unless there are no changed properties.

        (WebCore::ScrollingCoordinator::commitTreeState):
        Commit the tree state. We currently don't do anything with the committed state yet.

        * page/scrolling/ScrollingCoordinator.h:
        Add new member functions and the timer member variable.

        * page/scrolling/ScrollingTreeState.cpp:
        (WebCore::ScrollingTreeState::commit):
        Copy the current tree state and restore the changed properties on the original.

        * page/scrolling/ScrollingTreeState.h:
        (WebCore::ScrollingTreeState::hasChangedProperties):
        Return whether there are any changed properties in the tree state.

2012-02-03  Andreas Kling  <awesomekling@apple.com>

        HTMLElement: Clean up tabindex attribute parsing.
        <http://webkit.org/b/77763>

        Reviewed by Antti Koivisto.

        Remove an unnecessary getAttribute() call when parsing tabindexAttr.

        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::parseMappedAttribute):

2012-02-03  Anders Carlsson  <andersca@apple.com>

        ScrollingTreeState should keep track of the scroll layer
        https://bugs.webkit.org/show_bug.cgi?id=77762

        Reviewed by Andreas Kling.

        * WebCore.xcodeproj/project.pbxproj:
        * page/scrolling/ScrollingTreeState.h:
        (ScrollingTreeState):
        * page/scrolling/mac/ScrollingTreeStateMac.mm: Copied from Source/WebCore/page/scrolling/ScrollingTreeState.h.
        (WebCore):
        (WebCore::ScrollingTreeState::platformScrollLayer):
        (WebCore::ScrollingTreeState::setScrollLayer):

2012-02-03  Antti Koivisto  <antti@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=77740
        Split CSSMutableStyleDeclaration into separate internal and CSSOM types 

        Reviewed by Andreas Kling and Darin Adler.

        Split the CSSMutableStyleDeclaration into an internal type (StylePropertySet) and a CSSOM implementation type (PropertySetCSSStyleDeclaration).
        
        To keep things somewhat manageable, this patch does NOT

        - rename or add any files (so files names won't match types)
        - rename fields, methods or variables to match new type names (like CSSStyleRule::declaration() -> CSSStyleRule::propertySet())
        - try to realize any memory or performance gains (StylePropertySet loses the vptr but gains PropertySetCSSStyleDeclaration*)

        * WebCore.exp.in:
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::copy):
        (WebCore::CSSComputedStyleDeclaration::makeMutable):
        (WebCore::CSSComputedStyleDeclaration::copyPropertiesInSet):
        * css/CSSComputedStyleDeclaration.h:
        (WebCore):
        (CSSComputedStyleDeclaration):
        * css/CSSFontFaceRule.h:
        (WebCore::CSSFontFaceRule::style):
        (WebCore::CSSFontFaceRule::declaration):
        (WebCore::CSSFontFaceRule::setDeclaration):
        (CSSFontFaceRule):
        * css/CSSFontSelector.cpp:
        (WebCore::CSSFontSelector::addFontFaceRule):
        * css/CSSMutableStyleDeclaration.cpp:
        (PropertySetCSSStyleDeclaration):
        (WebCore::PropertySetCSSStyleDeclaration::create):
        (WebCore::PropertySetCSSStyleDeclaration::PropertySetCSSStyleDeclaration):
        (WebCore):
        (WebCore::StylePropertySet::StylePropertySet):
        (WebCore::StylePropertySet::~StylePropertySet):
        (WebCore::StylePropertySet::deref):
        (WebCore::StylePropertySet::contextStyleSheet):
        (WebCore::StylePropertySet::copyPropertiesFrom):
        (WebCore::StylePropertySet::getPropertyValue):
        (WebCore::StylePropertySet::borderSpacingValue):
        (WebCore::StylePropertySet::appendFontLonghandValueIfExplicit):
        (WebCore::StylePropertySet::fontValue):
        (WebCore::StylePropertySet::get4Values):
        (WebCore::StylePropertySet::getLayeredShorthandValue):
        (WebCore::StylePropertySet::getShorthandValue):
        (WebCore::StylePropertySet::getCommonValue):
        (WebCore::StylePropertySet::getPropertyCSSValue):
        (WebCore::StylePropertySet::removeShorthandProperty):
        (WebCore::StylePropertySet::removeProperty):
        (WebCore::StylePropertySet::setNeedsStyleRecalc):
        (WebCore::StylePropertySet::propertyIsImportant):
        (WebCore::StylePropertySet::getPropertyShorthand):
        (WebCore::StylePropertySet::isPropertyImplicit):
        (WebCore::StylePropertySet::setProperty):
        (WebCore::StylePropertySet::parseDeclaration):
        (WebCore::StylePropertySet::addParsedProperties):
        (WebCore::StylePropertySet::addParsedProperty):
        (WebCore::StylePropertySet::asText):
        (WebCore::StylePropertySet::merge):
        (WebCore::StylePropertySet::addSubresourceStyleURLs):
        (WebCore::StylePropertySet::copyBlockProperties):
        (WebCore::StylePropertySet::removeBlockProperties):
        (WebCore::StylePropertySet::removePropertiesInSet):
        (WebCore::StylePropertySet::findPropertyWithId):
        (WebCore::StylePropertySet::propertyMatches):
        (WebCore::StylePropertySet::removeEquivalentProperties):
        (WebCore::StylePropertySet::copy):
        (WebCore::StylePropertySet::copyPropertiesInSet):
        (WebCore::StylePropertySet::ensureCSSStyleDeclaration):
        (WebCore::PropertySetCSSStyleDeclaration::length):
        (WebCore::PropertySetCSSStyleDeclaration::item):
        (WebCore::PropertySetCSSStyleDeclaration::parentRule):
        (WebCore::PropertySetCSSStyleDeclaration::cssText):
        (WebCore::PropertySetCSSStyleDeclaration::setCssText):
        (WebCore::PropertySetCSSStyleDeclaration::getPropertyCSSValue):
        (WebCore::PropertySetCSSStyleDeclaration::getPropertyValue):
        (WebCore::PropertySetCSSStyleDeclaration::getPropertyPriority):
        (WebCore::PropertySetCSSStyleDeclaration::getPropertyShorthand):
        (WebCore::PropertySetCSSStyleDeclaration::isPropertyImplicit):
        (WebCore::PropertySetCSSStyleDeclaration::setProperty):
        (WebCore::PropertySetCSSStyleDeclaration::removeProperty):
        (WebCore::PropertySetCSSStyleDeclaration::getPropertyCSSValueInternal):
        (WebCore::PropertySetCSSStyleDeclaration::getPropertyValueInternal):
        (WebCore::PropertySetCSSStyleDeclaration::setPropertyInternal):
        (WebCore::PropertySetCSSStyleDeclaration::parentStyleSheet):
        (WebCore::PropertySetCSSStyleDeclaration::copy):
        (WebCore::PropertySetCSSStyleDeclaration::makeMutable):
        (WebCore::PropertySetCSSStyleDeclaration::cssPropertyMatches):
        * css/CSSMutableStyleDeclaration.h:
        (WebCore):
        (StylePropertySet):
        (WebCore::StylePropertySet::create):
        (WebCore::StylePropertySet::createInline):
        * css/CSSPageRule.h:
        (WebCore):
        * css/CSSParser.cpp:
        (WebCore::parseColorValue):
        (WebCore::parseSimpleLengthValue):
        (WebCore::CSSParser::parseValue):
        (WebCore::CSSParser::parseDeclaration):
        (WebCore::CSSParser::createStyleRule):
        (WebCore::CSSParser::createFontFaceRule):
        (WebCore::CSSParser::createPageRule):
        (WebCore::CSSParser::createKeyframeRule):
        * css/CSSParser.h:
        (WebCore):
        (CSSParser):
        * css/CSSStyleDeclaration.h:
        (WebCore):
        (CSSStyleDeclaration):
        * css/CSSStyleRule.h:
        (WebCore::CSSStyleRule::style):
        (WebCore::CSSStyleRule::setDeclaration):
        (WebCore::CSSStyleRule::declaration):
        (CSSStyleRule):
        * css/CSSStyleSelector.cpp:
        (WebCore::leftToRightDeclaration):
        (WebCore::rightToLeftDeclaration):
        (WebCore::CSSStyleSelector::addMatchedDeclaration):
        (WebCore::CSSStyleSelector::collectMatchingRulesForList):
        (WebCore::CSSStyleSelector::matchAllRules):
        (WebCore::CSSStyleSelector::styleForKeyframe):
        (WebCore::isInsideRegionRule):
        (WebCore::CSSStyleSelector::applyDeclaration):
        (WebCore::CSSStyleSelector::applyDeclarations):
        (WebCore::CSSStyleSelector::matchPageRulesForList):
        * css/CSSStyleSelector.h:
        (CSSStyleSelector):
        (MatchedStyleDeclaration):
        * css/WebKitCSSKeyframeRule.cpp:
        (WebCore::WebKitCSSKeyframeRule::setDeclaration):
        * css/WebKitCSSKeyframeRule.h:
        (WebCore::WebKitCSSKeyframeRule::style):
        (WebCore::WebKitCSSKeyframeRule::declaration):
        (WebKitCSSKeyframeRule):
        * css/WebKitCSSMatrix.cpp:
        (WebCore::WebKitCSSMatrix::setMatrixValue):
        * dom/Attr.h:
        (WebCore::Attr::style):
        * dom/Attribute.h:
        (WebCore::Attribute::decl):
        * dom/CSSMappedAttributeDeclaration.h:
        (WebCore::CSSMappedAttributeDeclaration::declaration):
        (WebCore::CSSMappedAttributeDeclaration::CSSMappedAttributeDeclaration):
        (CSSMappedAttributeDeclaration):
        * dom/Document.cpp:
        (WebCore::Document::createCSSStyleDeclaration):
        * dom/ElementAttributeData.h:
        (ElementAttributeData):
        * dom/NamedNodeMap.cpp:
        (WebCore::NamedNodeMap::ensureInlineStyleDecl):
        * dom/NamedNodeMap.h:
        (WebCore::NamedNodeMap::inlineStyleDecl):
        (NamedNodeMap):
        * dom/StyledElement.cpp:
        (WebCore::StyledElement::updateStyleAttribute):
        (WebCore::StyledElement::copyNonAttributeProperties):
        (WebCore::StyledElement::addSubresourceAttributeURLs):
        * dom/StyledElement.h:
        (WebCore::StyledElement::additionalAttributeStyle):
        (WebCore::StyledElement::inlineStyleDecl):
        (WebCore::StyledElement::ensureInlineStyleDecl):
        * editing/ApplyStyleCommand.cpp:
        (WebCore::ApplyStyleCommand::applyRelativeFontStyleChange):
        (WebCore::ApplyStyleCommand::removeEmbeddingUpToEnclosingBlock):
        (WebCore::ApplyStyleCommand::applyInlineStyleToNodeRange):
        (WebCore::ApplyStyleCommand::removeCSSStyle):
        (WebCore::ApplyStyleCommand::addBlockStyle):
        (WebCore::ApplyStyleCommand::addInlineStyleIfNeeded):
        * editing/DeleteButtonController.cpp:
        (WebCore::DeleteButtonController::createDeletionUI):
        * editing/EditingStyle.cpp:
        (WebCore::copyEditingProperties):
        (WebCore::editingStyleFromComputedStyle):
        (WebCore):
        (WebCore::HTMLElementEquivalent::propertyExistsInStyle):
        (HTMLElementEquivalent):
        (WebCore::HTMLElementEquivalent::valueIsPresentInStyle):
        (HTMLTextDecorationEquivalent):
        (WebCore::HTMLTextDecorationEquivalent::propertyExistsInStyle):
        (WebCore::HTMLTextDecorationEquivalent::valueIsPresentInStyle):
        (HTMLAttributeEquivalent):
        (WebCore::HTMLAttributeEquivalent::valueIsPresentInStyle):
        (WebCore::HTMLAttributeEquivalent::attributeValueAsCSSValue):
        (WebCore::EditingStyle::EditingStyle):
        (WebCore::getRGBAFontColor):
        (WebCore::EditingStyle::setProperty):
        (WebCore::EditingStyle::setStyle):
        (WebCore::EditingStyle::overrideWithStyle):
        (WebCore::EditingStyle::extractAndRemoveTextDirection):
        (WebCore::EditingStyle::removeStyleAddedByNode):
        (WebCore::EditingStyle::removeStyleConflictingWithStyleOfNode):
        (WebCore::EditingStyle::triStateOfStyle):
        (WebCore::EditingStyle::conflictsWithInlineStyleOfElement):
        (WebCore::EditingStyle::elementIsStyledSpanOrHTMLEquivalent):
        (WebCore::elementMatchesAndPropertyIsNotInInlineStyleDecl):
        (WebCore::EditingStyle::mergeStyle):
        (WebCore::styleFromMatchedRulesForElement):
        (WebCore::EditingStyle::mergeStyleFromRules):
        (WebCore::EditingStyle::mergeStyleFromRulesForSerialization):
        (WebCore::removePropertiesInStyle):
        (WebCore::EditingStyle::removeStyleFromRulesAndContext):
        (WebCore::EditingStyle::removePropertiesInElementDefaultStyle):
        (WebCore::EditingStyle::forceInline):
        (WebCore::reconcileTextDecorationProperties):
        (WebCore::StyleChange::StyleChange):
        (WebCore::setTextDecorationProperty):
        (WebCore::StyleChange::extractTextStyles):
        (WebCore::diffTextDecorations):
        (WebCore::fontWeightIsBold):
        (WebCore::getTextAlignment):
        (WebCore::getPropertiesNotIn):
        (WebCore::getIdentifierValue):
        (WebCore::isTransparentColorValue):
        (WebCore::hasTransparentBackgroundColor):
        * editing/EditingStyle.h:
        (WebCore):
        (WebCore::EditingStyle::create):
        (EditingStyle):
        (WebCore::EditingStyle::style):
        (StyleChange):
        * editing/Editor.cpp:
        (WebCore::Editor::setBaseWritingDirection):
        (WebCore::Editor::applyEditingStyleToElement):
        * editing/EditorCommand.cpp:
        (WebCore::applyCommandToFrame):
        (WebCore::executeApplyStyle):
        (WebCore::executeToggleStyleInList):
        (WebCore::executeApplyParagraphStyle):
        (WebCore::executeMakeTextWritingDirectionLeftToRight):
        (WebCore::executeMakeTextWritingDirectionNatural):
        (WebCore::executeMakeTextWritingDirectionRightToLeft):
        * editing/FrameSelection.cpp:
        (WebCore::FrameSelection::copyTypingStyle):
        * editing/FrameSelection.h:
        (WebCore):
        * editing/RemoveCSSPropertyCommand.cpp:
        (WebCore::RemoveCSSPropertyCommand::doApply):
        (WebCore::RemoveCSSPropertyCommand::doUnapply):
        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::removeRedundantStylesAndKeepStyleSpanInline):
        * editing/ReplaceSelectionCommand.h:
        (WebCore):
        * editing/markup.cpp:
        (WebCore):
        (StyledMarkupAccumulator):
        (WebCore::StyledMarkupAccumulator::wrapWithStyleNode):
        (WebCore::StyledMarkupAccumulator::appendStyleNodeOpenTag):
        (WebCore::propertyMissingOrEqualToNone):
        * html/HTMLTableCellElement.cpp:
        (WebCore::HTMLTableCellElement::additionalAttributeStyle):
        * html/HTMLTableCellElement.h:
        (HTMLTableCellElement):
        * html/HTMLTableColElement.cpp:
        (WebCore::HTMLTableColElement::additionalAttributeStyle):
        * html/HTMLTableColElement.h:
        (HTMLTableColElement):
        * html/HTMLTableElement.cpp:
        (WebCore::leakBorderStyle):
        (WebCore::HTMLTableElement::additionalAttributeStyle):
        (WebCore::HTMLTableElement::createSharedCellStyle):
        (WebCore::HTMLTableElement::additionalCellStyle):
        (WebCore::leakGroupBorderStyle):
        (WebCore::HTMLTableElement::additionalGroupStyle):
        * html/HTMLTableElement.h:
        (HTMLTableElement):
        * html/HTMLTableSectionElement.cpp:
        (WebCore::HTMLTableSectionElement::additionalAttributeStyle):
        * html/HTMLTableSectionElement.h:
        (HTMLTableSectionElement):
        * html/ValidationMessage.cpp:
        (WebCore::adjustBubblePosition):
        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::setFont):
        * html/shadow/MediaControlElements.cpp:
        (WebCore::MediaControlPanelElement::setPosition):
        (WebCore::MediaControlPanelElement::resetPosition):
        (WebCore::MediaControlPanelElement::makeOpaque):
        (WebCore::MediaControlPanelElement::makeTransparent):
        * html/shadow/SliderThumbElement.cpp:
        (WebCore::TrackLimiterElement::create):
        * inspector/InspectorCSSAgent.cpp:
        (WebCore::InspectorCSSAgent::buildArrayForAttributeStyles):
        * inspector/InspectorStyleSheet.cpp:
        (WebCore::InspectorStyle::setPropertyText):
        (WebCore::InspectorStyleSheetForInlineStyle::getStyleAttributeRanges):
        * page/DragController.cpp:
        (WebCore::DragController::concludeEditDrag):
        * page/PageSerializer.cpp:
        (WebCore::PageSerializer::retrieveResourcesForCSSDeclaration):
        * page/PageSerializer.h:
        (WebCore):
        (PageSerializer):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::resize):
        * rendering/RenderTreeAsText.cpp:
        (WebCore::isEmptyOrUnstyledAppleStyleSpan):
        * svg/SVGFontFaceElement.cpp:
        (WebCore::SVGFontFaceElement::SVGFontFaceElement):

2012-02-03  Jochen Eisinger  <jochen@chromium.org>

        Remove unneccesary canExecuteScripts check from v8 bindings, and correctly indeicate when we're about to execute a script
        https://bugs.webkit.org/show_bug.cgi?id=76704

        Reviewed by Adam Barth.

        Test: http/tests/security/isolatedWorld/sandboxed-iframe.html

        * bindings/v8/ScheduledAction.cpp:
        (WebCore::ScheduledAction::execute):
        * bindings/v8/V8EventListener.cpp:
        (WebCore::V8EventListener::callListenerFunction):
        * bindings/v8/V8LazyEventListener.cpp:
        (WebCore::V8LazyEventListener::callListenerFunction):
        * bindings/v8/V8Proxy.cpp:
        (WebCore::V8Proxy::handleOutOfMemory):
        (WebCore::toV8Context):

2012-02-03  Anders Carlsson  <andersca@apple.com>

        Add ScrollingTreeState class
        https://bugs.webkit.org/show_bug.cgi?id=77756

        Reviewed by Andreas Kling.

        Add a new ScrollingTreeState whose intent is to be a data container for the current
        scrolling tree state. the ScrollingCoordinator class will update it and periodically
        send over the new state to the ScrollingTree object on the scrolling thread.

        * WebCore.xcodeproj/project.pbxproj:
        * page/scrolling/ScrollingCoordinator.cpp:
        (WebCore::ScrollingCoordinator::ScrollingCoordinator):
        * page/scrolling/ScrollingCoordinator.h:
        (WebCore):
        (ScrollingCoordinator):
        * page/scrolling/ScrollingTreeState.cpp: Added.
        (WebCore):
        (WebCore::ScrollingTreeState::create):
        (WebCore::ScrollingTreeState::ScrollingTreeState):
        (WebCore::ScrollingTreeState::~ScrollingTreeState):
        (WebCore::ScrollingTreeState::setViewportRect):
        (WebCore::ScrollingTreeState::setContentsSize):
        * page/scrolling/ScrollingTreeState.h: Added.
        (WebCore):
        (ScrollingTreeState):
        (WebCore::ScrollingTreeState::viewportRect):
        (WebCore::ScrollingTreeState::contentsSize):

2012-02-03  Beth Dakin  <bdakin@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=77691
        Fix PlatformScreen layering violation and PlatformScreenMac's incorrect use 
        of device scale

        Reviewed by Andy Estes.

        Make screenAvailableRect() and screenRect() take a Widget again instead of a 
        FrameView since taking a FrameView is a layering violation.
        * WebCore.exp.in:
        * platform/PlatformScreen.h:
        (WebCore):
        * platform/blackberry/PlatformScreenBlackBerry.cpp:
        (WebCore::screenAvailableRect):
        (WebCore::screenRect):
        * platform/chromium/PlatformScreenChromium.cpp:
        (WebCore::screenRect):
        (WebCore::screenAvailableRect):
        * platform/chromium/PlatformSupport.h:
        (WebCore):
        (PlatformSupport):
        * platform/efl/PlatformScreenEfl.cpp:
        (WebCore::screenRect):
        (WebCore::screenAvailableRect):
        * platform/gtk/PlatformScreenGtk.cpp:
        (WebCore::screenRect):
        (WebCore::screenAvailableRect):
        * platform/qt/PlatformScreenQt.cpp:
        (WebCore::screenRect):
        (WebCore::screenAvailableRect):
        * platform/win/PlatformScreenWin.cpp:
        (WebCore::screenRect):
        (WebCore::screenAvailableRect):
        * platform/wx/ScreenWx.cpp:
        (WebCore::screenRect):
        (WebCore::screenAvailableRect):

        It's wrong for the deviceScaleFactor to be taken into consideration here at 
        all.
        * platform/mac/PlatformScreenMac.mm:
        (WebCore::screenRect):
        (WebCore::screenAvailableRect):
        (WebCore::toUserSpace):
        (WebCore::toDeviceSpace):

2012-02-03  Dan Bernstein  <mitz@apple.com>

        <rdar://problem/10352073> Floating image leaves hole in previous column when wrapped to next column
        https://bugs.webkit.org/show_bug.cgi?id=77694

        Reviewed by Darin Adler.

        Tests: fast/dynamic/float-moved-downwards-for-pagination-expected.html
               fast/dynamic/float-moved-downwards-for-pagination.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::clearFloats): When determining which lines to dirty,
        also check for changes to the top edge of the float, which can happen when
        float gets pushed down by a pagination strut.

2012-02-03  Alexis Menard  <alexis.menard@openbossa.org>

        REGRESSION (r105401-105403): Blue flash on css border transition
        https://bugs.webkit.org/show_bug.cgi?id=77491

        Reviewed by Simon Fraser.

        The new blend function added with r105403 takes unsigned as parameters therefore
        we have to be careful to not overflow in case the to is less than from (animating
        from 400 to 0 for example).

        Test: animations/animation-border-overflow.html

        * platform/animation/AnimationUtilities.h:
        (WebCore::blend):

2012-02-03  Justin Novosad  <junov@chromium.org>

        [Chromium] ImageBufferSkia: remove unnecessary overload of flush in
        AcceleratedDeviceContext
        https://bugs.webkit.org/show_bug.cgi?id=77741

        Reviewed by Stephen White.

        Removing dead code.

        * platform/graphics/skia/ImageBufferSkia.cpp:
        (AcceleratedDeviceContext):

2012-02-03  Balazs Kelemen  <kbalazs@webkit.org>

        Speculative unreviewed build fix for Qt-Windows
        after http://trac.webkit.org/changeset/106659.

        * platform/graphics/texmap/TextureMapper.h:
        (WebCore::TextureMapper::platformCreateAccelerated):

2012-02-03  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r106654.
        http://trac.webkit.org/changeset/106654
        https://bugs.webkit.org/show_bug.cgi?id=77742

        triggers asserts on mac, win, gtk, qt debug bots (Requested by
        philn-tp on #webkit).

        * Modules/intents/IntentRequest.cpp:
        (WebCore::IntentRequest::create):
        * bindings/generic/ActiveDOMCallback.cpp:
        (WebCore::ActiveDOMCallback::ActiveDOMCallback):
        * dom/ActiveDOMObject.cpp:
        (WebCore::ActiveDOMObject::ActiveDOMObject):
        (WebCore::ActiveDOMObject::~ActiveDOMObject):
        * dom/ActiveDOMObject.h:
        (ActiveDOMObject):
        * dom/DocumentEventQueue.cpp:
        (WebCore::DocumentEventQueue::DocumentEventQueue):
        * dom/ScriptExecutionContext.cpp:
        (WebCore::ScriptExecutionContext::ScriptExecutionContext):
        (WebCore::ScriptExecutionContext::~ScriptExecutionContext):
        (WebCore::ScriptExecutionContext::canSuspendActiveDOMObjects):
        (WebCore::ScriptExecutionContext::suspendActiveDOMObjects):
        (WebCore::ScriptExecutionContext::resumeActiveDOMObjects):
        (WebCore::ScriptExecutionContext::stopActiveDOMObjects):
        * dom/ScriptExecutionContext.h:
        (ScriptExecutionContext):
        * fileapi/DOMFileSystem.cpp:
        (WebCore::DOMFileSystem::create):
        * fileapi/FileReader.cpp:
        (WebCore):
        * fileapi/FileReader.h:
        (WebCore::FileReader::create):
        * fileapi/FileWriter.cpp:
        (WebCore):
        * fileapi/FileWriter.h:
        (WebCore::FileWriter::create):
        * history/CachedFrame.cpp:
        (WebCore::CachedFrame::CachedFrame):
        * html/HTMLAudioElement.cpp:
        (WebCore::HTMLAudioElement::create):
        * html/HTMLMarqueeElement.cpp:
        (WebCore::HTMLMarqueeElement::create):
        * html/HTMLVideoElement.cpp:
        (WebCore::HTMLVideoElement::create):
        * mediastream/PeerConnection.cpp:
        (WebCore::PeerConnection::create):
        * notifications/Notification.cpp:
        (WebCore::Notification::create):
        * notifications/NotificationCenter.cpp:
        * notifications/NotificationCenter.h:
        (WebCore::NotificationCenter::create):
        * page/DOMTimer.cpp:
        (WebCore::DOMTimer::install):
        (WebCore::DOMTimer::fired):
        * page/EventSource.cpp:
        (WebCore::EventSource::create):
        * page/SuspendableTimer.cpp:
        (WebCore::SuspendableTimer::SuspendableTimer):
        * storage/IDBDatabase.cpp:
        (WebCore::IDBDatabase::create):
        * storage/IDBRequest.cpp:
        (WebCore::IDBRequest::create):
        * storage/IDBTransaction.cpp:
        (WebCore::IDBTransaction::create):
        * webaudio/AudioContext.cpp:
        (WebCore::AudioContext::create):
        * websockets/WebSocket.cpp:
        * websockets/WebSocket.h:
        (WebCore::WebSocket::create):
        * workers/SharedWorker.cpp:
        (WebCore::SharedWorker::create):
        * workers/Worker.cpp:
        (WebCore::Worker::create):
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::create):

2012-02-03  Kentaro Hara  <haraken@chromium.org>

        Add the "V8" prefix to V8 specific IDL attributes
        https://bugs.webkit.org/show_bug.cgi?id=77713

        Reviewed by Adam Barth.

        This patch adds the "V8" prefix to a V8 specific IDL attribute:
        [EnabledAtRuntime] => [V8EnabledAtRuntime]

        No tests. No change in behavior.

        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateHeader):
        (GenerateImplementation):
        (GetRuntimeEnableFunctionName):

        * bindings/scripts/test/TestObj.idl:
        * bindings/scripts/test/V8/V8TestObj.cpp: Updated the run-bindings-tests results.
        (WebCore::ConfigureV8TestObjTemplate):

        * Modules/gamepad/NavigatorGamepad.idl:
        * dom/Clipboard.idl:
        * dom/Document.idl:
        * dom/Element.idl:
        * dom/MouseEvent.idl:
        * dom/ShadowRoot.idl:
        * html/HTMLInputElement.idl:
        * html/HTMLMediaElement.idl:
        * html/HTMLTrackElement.idl:
        * html/TextTrack.idl:
        * html/TextTrackCue.idl:
        * html/TextTrackCueList.idl:
        * html/shadow/HTMLContentElement.idl:
        * html/track/TextTrackList.idl:
        * html/track/TrackEvent.idl:
        * page/DOMWindow.idl:
        * page/History.idl:
        * page/Navigator.idl:
        * storage/DOMWindowSQLDatabase.idl:
        * webaudio/DOMWindowWebAudio.idl:
        * websockets/DOMWindowWebSocket.idl:
        * workers/WorkerContext.idl:
        * xml/XMLHttpRequest.idl:

2012-02-03  Alexei Filippov  <alexeif@chromium.org>

        Web Inspector: Retained size for classes is too conservative in heap profiler
        https://bugs.webkit.org/show_bug.cgi?id=77726

        Reviewed by Yury Semikhatsky.

        Makes retained size of all objects of particular class show correct value
        in Summary view of heap profiler.

        * inspector/front-end/DetailedHeapshotGridNodes.js:
        (WebInspector.HeapSnapshotConstructorNode.prototype.get data):
        * inspector/front-end/HeapSnapshot.js:
        (WebInspector.HeapSnapshot.prototype._buildAggregates):
        (WebInspector.HeapSnapshot.prototype._buildAggregates.forDominatedNodes):

2012-02-02  Alexander Pavlov  <apavlov@chromium.org>

        Web Inspector: Introduce "Copy XPath" popup menu item for DOM elements
        https://bugs.webkit.org/show_bug.cgi?id=77619

        Reviewed by Vsevolod Vlasov.

        XPath is optimized whenever an element has the "id" attribute.

        Test: inspector/elements/node-xpath.xhtml

        * English.lproj/localizedStrings.js:
        * inspector/front-end/DOMAgent.js:
        (WebInspector.DOMNode.XPathStep):
        (WebInspector.DOMNode.XPathStep.prototype.toString):
        (WebInspector.DOMNode.prototype.copyXPath):
        (WebInspector.DOMNode.prototype.isXMLNode):
        (WebInspector.DOMNode.prototype.xPath):
        (WebInspector.DOMNode.prototype._xPathValue):
        (WebInspector.DOMNode.prototype._xPathIndex):
        * inspector/front-end/ElementsTreeOutline.js:
        (WebInspector.ElementsTreeElement.prototype._populateNodeContextMenu):

2012-02-03  Dana Jansens  <danakj@chromium.org>

        [Chromium] Use the current clip when marking paints as opaque
        https://bugs.webkit.org/show_bug.cgi?id=77582

        Reviewed by Stephen White.

        New unit test in PlatformContextSkiaTest.cpp

        * platform/graphics/skia/OpaqueRegionSkia.cpp:
        (WebCore::OpaqueRegionSkia::markRectAsOpaque):
        * platform/graphics/skia/PlatformContextSkia.h:
        (WebCore::PlatformContextSkia::canvas):

2012-02-03  Yury Semikhatsky  <yurys@chromium.org>

        inspector/debugger/pause-in-inline-script.html asserts in chromium debug
        https://bugs.webkit.org/show_bug.cgi?id=77663

        Make ASSERT in MainResourceLoader not fail if debugger hits breakpoint
        in the main resource inline script.

        Reviewed by Pavel Feldman.

        Test: inspector/debugger/pause-in-inline-script.html

        * bindings/js/ScriptDebugServer.h:
        (WebCore::ScriptDebugServer::isPaused):
        (ScriptDebugServer):
        * bindings/v8/ScriptDebugServer.h:
        (ScriptDebugServer):
        * inspector/InspectorDebuggerAgent.cpp:
        (WebCore::InspectorDebuggerAgent::didClearMainFrameWindowObject):
        (WebCore):
        (WebCore::InspectorDebuggerAgent::isPaused):
        * inspector/InspectorDebuggerAgent.h:
        (InspectorDebuggerAgent):
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::isDebuggerPausedImpl):
        (WebCore):
        * inspector/InspectorInstrumentation.h:
        (InspectorInstrumentation):
        (WebCore::InspectorInstrumentation::isDebuggerPaused):
        (WebCore):
        * loader/MainResourceLoader.cpp:
        (WebCore::MainResourceLoader::didFinishLoading):

2012-02-03  Kentaro Hara  <haraken@chromium.org>

        Fix typo
        https://bugs.webkit.org/show_bug.cgi?id=77708

        Reviewed by Adam Roben.

        This patch fixes typos: [ObjCLegacyUnamedParameters] => [ObjCLegacyUnnamedParameters]

        No tests. No change in behavior.

        * css/CSSMediaRule.idl:
        * css/CSSPrimitiveValue.idl:
        * css/CSSStyleDeclaration.idl:
        * css/CSSStyleSheet.idl:
        * dom/CharacterData.idl:
        * dom/DOMImplementation.idl:
        * dom/Document.idl:
        * dom/Element.idl:
        * dom/Event.idl:
        * dom/EventTarget.idl:
        * dom/MouseEvent.idl:
        * dom/MutationEvent.idl:
        * dom/NamedNodeMap.idl:
        * dom/Node.idl:
        * dom/Range.idl:
        * dom/UIEvent.idl:
        * html/HTMLSelectElement.idl:
        * xml/XPathExpression.idl:

2012-02-03  No'am Rosenthal  <noam.rosenthal@nokia.com>

        [Qt][Texmap] Refactor TextureMapper API to use ImageBuffers when possible.
        https://bugs.webkit.org/show_bug.cgi?id=77148

        Reviewed by Martin Robinson.

        Removed TextureMapperQt, and instead created a TextureMapperImageBuffer class,
        which responds to an "Software" mode of TextureMapper, instead of creating subclasses
        of TextureMapper directly. This allows using the software fallback of TextureMapper by any
        sort.

        To make the ImageBuffer backend easier, content updates to BitmapTexture can now use either
        an image, or a raw data pointer. The raw data pointer is provided for performance reasons,
        as converting data to/from Image references in Qt generates unnecessary deep copies of the
        image data.

        Also, functions that use TransformationMatrix were added to GraphicsContext, to allow for
        3D transforms in cross platform code.
        After this patch everything renders the same. An additional bug report was created to allow
        ImageBuffer shallow image copies: https://bugs.webkit.org/show_bug.cgi?id=77689

        Covered extensively by existing tests, no behavioral changes.

        * Target.pri:
        * platform/graphics/GraphicsContext.cpp:
        * platform/graphics/GraphicsContext.h:
        (WebCore):
        (GraphicsContext):
        * platform/graphics/cairo/TextureMapperCairo.cpp:
        * platform/graphics/opengl/TextureMapperGL.cpp:
        (TextureMapperGLData):
        (BitmapTextureGL):
        (WebCore::BitmapTextureGL::BitmapTextureGL):
        (WebCore::TextureMapperGL::beginPainting):
        (WebCore::BitmapTextureGL::reset):
        (WebCore):
        (WebCore::swizzleBGRAToRGBA):
        (WebCore::BitmapTextureGL::updateContents):
        (WebCore::BitmapTextureGL::destroy):
        (WebCore::TextureMapperGL::bindSurface):
        (WebCore::TextureMapper::platformCreateAccelerated):
        * platform/graphics/opengl/TextureMapperGL.h:
        (TextureMapperGL):
        (WebCore::TextureMapperGL::accelerationMode):
        (WebCore):
        * platform/graphics/qt/GraphicsContext3DQt.cpp:
        (WebCore::GraphicsContext3DPrivate::paintToTextureMapper):
        * platform/graphics/qt/GraphicsContextQt.cpp:
        (WebCore):
        (WebCore::GraphicsContext::get3DTransform):
        (WebCore::GraphicsContext::concat3DTransform):
        (WebCore::GraphicsContext::set3DTransform):
        * platform/graphics/qt/TextureMapperQt.cpp: Removed.
        * platform/graphics/qt/TextureMapperQt.h: Removed.
        * platform/graphics/texmap/TextureMapper.cpp:
        (WebCore):
        (BitmapTextureImageBuffer):
        (TextureMapperImageBuffer):
        * platform/graphics/texmap/TextureMapper.h:
        (WebCore::BitmapTexture::BitmapTexture):
        (BitmapTexture):
        (WebCore::BitmapTexture::bpp):
        (WebCore::BitmapTexture::isOpaque):
        (WebCore::TextureMapper::setGraphicsContext):
        (WebCore::TextureMapper::graphicsContext):
        (TextureMapper):
        (WebCore::TextureMapper::TextureMapper):
        (WebCore::TextureMapper::platformCreateAccelerated):
        * platform/graphics/texmap/TextureMapperNode.cpp:
        (WebCore::TextureMapperNode::renderContent):
        (WebCore::TextureMapperNode::setContentsTileBackBuffer):
        * platform/graphics/texmap/TextureMapperNode.h:
        (TextureMapperNode):

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

        Web Inspector: console evaluation doesn't work on breakpoint in pages with CSP
        https://bugs.webkit.org/show_bug.cgi?id=77203

        Inspector console evaluation now works when debugger is paused in a page with
        content-security-policy prohibiting evals.

        Reviewed by Pavel Feldman.

        Test: inspector/debugger/eval-on-pause-blocked.html

        * bindings/js/JSInjectedScriptHostCustom.cpp:
        * bindings/js/ScriptState.cpp:
        (WebCore::evalEnabled):
        (WebCore):
        (WebCore::setEvalEnabled):
        * bindings/js/ScriptState.h:
        (WebCore):
        * bindings/v8/ScriptObject.h:
        (WebCore::ScriptObject::ScriptObject):
        * bindings/v8/ScriptState.cpp:
        (WebCore::evalEnabled):
        (WebCore):
        (WebCore::setEvalEnabled):
        * bindings/v8/ScriptState.h:
        (WebCore):
        * bindings/v8/custom/V8InjectedScriptHostCustom.cpp:
        * inspector/InjectedScript.cpp:
        (WebCore::InjectedScript::makeCall):
        * inspector/InjectedScriptHost.idl:
        * inspector/InjectedScriptSource.js:
        (.):

2012-02-03  Rob Buis  <rbuis@rim.com>

        Upstream targetType usage on ResourceRequest for BlackBerry port
        https://bugs.webkit.org/show_bug.cgi?id=77649

        Reviewed by Antonio Gomes.

        Upstream bits that make use of targetType enum.

        * loader/PingLoader.cpp:
        (WebCore::PingLoader::loadImage):
        (WebCore::PingLoader::sendPing):
        (WebCore::PingLoader::reportContentSecurityPolicyViolation):
        * platform/network/blackberry/ResourceRequest.h:
        (ResourceRequest):
        (WebCore::ResourceRequest::targetType):
        (WebCore::ResourceRequest::setTargetType):
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::createRequest):

2012-02-03  Allan Sandfeld Jensen  <allan.jensen@nokia.com>

        Ensure timers and other active DOM objects do not fire in suspended documents.
        https://bugs.webkit.org/show_bug.cgi?id=53733

        ScriptExecutionContext now remembers it has suspended active DOM objects
        and suspends all newly installed active DOM objects as well.

        All create-calls active DOM objects now calls the post constructor method
        suspendIfNeeded that updates the suspend state. It is post constructor
        because the suspend/resume functions are virtual and thus can not be called
        from constructors.

        Reviewed by Mihai Parparita.

        Test: fast/events/suspend-timers.html

        * Modules/intents/IntentRequest.cpp:
        (WebCore::IntentRequest::create):
        * bindings/generic/ActiveDOMCallback.cpp:
        (WebCore::ActiveDOMCallback::ActiveDOMCallback):
        * dom/ActiveDOMObject.cpp:
        (WebCore::ActiveDOMObject::ActiveDOMObject):
        (WebCore::ActiveDOMObject::~ActiveDOMObject):
        (WebCore::ActiveDOMObject::suspendIfNeeded):
        * dom/ActiveDOMObject.h:
        (WebCore::ActiveDOMObject::suspendIfNeededCalled):
        * dom/DocumentEventQueue.cpp:
        (WebCore::DocumentEventQueue::DocumentEventQueue):
        * dom/ScriptExecutionContext.cpp:
        (WebCore::ScriptExecutionContext::ScriptExecutionContext):
        (WebCore::ScriptExecutionContext::~ScriptExecutionContext):
        (WebCore::ScriptExecutionContext::canSuspendActiveDOMObjects):
        (WebCore::ScriptExecutionContext::suspendActiveDOMObjects):
        (WebCore::ScriptExecutionContext::resumeActiveDOMObjects):
        (WebCore::ScriptExecutionContext::stopActiveDOMObjects):
        (WebCore::ScriptExecutionContext::suspendActiveDOMObjectIfNeeded):
        * dom/ScriptExecutionContext.h:
        (WebCore::ScriptExecutionContext::activeDOMObjectsAreSuspended):
        * fileapi/DOMFileSystem.cpp:
        (WebCore::DOMFileSystem::create):
        * fileapi/FileReader.cpp:
        (WebCore::FileReader::create):
        * fileapi/FileReader.h:
        * fileapi/FileWriter.cpp:
        (WebCore::FileWriter::create):
        * fileapi/FileWriter.h:
        * history/CachedFrame.cpp:
        (WebCore::CachedFrame::CachedFrame):
        * html/HTMLAudioElement.cpp:
        (WebCore::HTMLAudioElement::create):
        * html/HTMLMarqueeElement.cpp:
        (WebCore::HTMLMarqueeElement::create):
        * html/HTMLVideoElement.cpp:
        (WebCore::HTMLVideoElement::create):
        * mediastream/PeerConnection.cpp:
        (WebCore::PeerConnection::create):
        * notifications/Notification.cpp:
        (WebCore::Notification::create):
        * notifications/NotificationCenter.cpp:
        (WebCore::NotificationCenter::create):
        * notifications/NotificationCenter.h:
        * page/DOMTimer.cpp:
        (WebCore::DOMTimer::install):
        (WebCore::DOMTimer::fired):
        * page/EventSource.cpp:
        (WebCore::EventSource::create):
        * page/SuspendableTimer.cpp:
        (WebCore::SuspendableTimer::SuspendableTimer):
        * storage/IDBDatabase.cpp:
        (WebCore::IDBDatabase::create):
        * storage/IDBRequest.cpp:
        (WebCore::IDBRequest::create):
        * storage/IDBTransaction.cpp:
        (WebCore::IDBTransaction::create):
        * webaudio/AudioContext.cpp:
        (WebCore::AudioContext::create):
        * websockets/WebSocket.cpp:
        (WebCore::WebSocket::create):
        * websockets/WebSocket.h:
        * workers/SharedWorker.cpp:
        (WebCore::SharedWorker::create):
        * workers/Worker.cpp:
        (WebCore::Worker::create):
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::create):

2012-02-03  Allan Sandfeld Jensen  <allan.jensen@nokia.com>

        Do not ASSERT on TouchStationary TouchPoint state.
        https://bugs.webkit.org/show_bug.cgi?id=77620

        Reviewed by Kenneth Rohde Christiansen.

        * page/EventHandler.cpp:
        (WebCore::eventNameForTouchPointState): Explicitly show that TouchStationary is asserted.
        (WebCore::EventHandler::handleTouchEvent):
            Remove TouchStationary from ASSERT. The value of HitTestRequest is restored to the
            value it should have if hittested, but is not used.

2012-02-03  Kentaro Hara  <haraken@chromium.org>

        Add the "ObjC" prefix to ObjC specific IDL attributes
        https://bugs.webkit.org/show_bug.cgi?id=77708

        Reviewed by Adam Barth.

        This patch adds the "ObjC" prefix to ObjC specific IDL attributes, as follows:

            [Polymorphic] => [ObjCPolymorphic]
            [OldStyleObjC] => [ObjCLegacyUnamedParameters]
            [UsesView] => [ObjCUseDefaultView] (Note: Renamed for clarification)

        No tests. No changes in behavior.

        * bindings/scripts/CodeGeneratorObjC.pm:
        (GenerateHeader):
        (GenerateImplementation):
        * css/CSSMediaRule.idl:
        * css/CSSPrimitiveValue.idl:
        * css/CSSRule.idl:
        * css/CSSStyleDeclaration.idl:
        * css/CSSStyleSheet.idl:
        * css/CSSValue.idl:
        * css/StyleSheet.idl:
        * dom/CharacterData.idl:
        * dom/DOMImplementation.idl:
        * dom/Document.idl:
        * dom/Element.idl:
        * dom/Event.idl:
        * dom/EventTarget.idl:
        * dom/MouseEvent.idl:
        * dom/MutationEvent.idl:
        * dom/NamedNodeMap.idl:
        * dom/Node.idl:
        * dom/Range.idl:
        * dom/UIEvent.idl:
        * html/HTMLCollection.idl:
        * html/HTMLSelectElement.idl:
        * svg/SVGPathSeg.idl:
        * xml/XPathExpression.idl:

2012-02-03  MORITA Hajime  <morrita@google.com>

        TypingCommand should be prepared against detached document.
        https://bugs.webkit.org/show_bug.cgi?id=77216

        Reviewed by Ryosuke Niwa.

        Added null checks for document()->frame().

        No new tests. Just tighten guards for possible codepaths.

        * editing/TypingCommand.cpp:
        (WebCore::TypingCommand::markMisspellingsAfterTyping):
        (WebCore::TypingCommand::typingAddedToOpenCommand):
        (WebCore::TypingCommand::deleteKeyPressed):
        (WebCore::TypingCommand::forwardDeleteKeyPressed):

2012-02-03  Kentaro Hara  <haraken@chromium.org>

        Rename [DontEnum] IDL to [NotEnumerable] IDL
        https://bugs.webkit.org/show_bug.cgi?id=77710

        Reviewed by Adam Barth.

        [DontEnum] is a negation of [[Enumerable]] in the ECMAScript spec
        (8.6.1 of http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf).
        This patch renames [DontEnum] to [NotEnumerable].

        No tests. No change in behavior.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateAttributesHashTable):
        (GenerateImplementation):
        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateSingleBatchedAttribute):
        (GenerateImplementation):

        * css/WebKitCSSMatrix.idl:
        * dom/DOMCoreException.idl:
        * dom/Document.idl:
        * dom/Element.idl:
        * dom/EventException.idl:
        * dom/RangeException.idl:
        * fileapi/FileException.idl:
        * fileapi/OperationNotAllowedException.idl:
        * html/DOMTokenList.idl:
        * html/HTMLAnchorElement.idl:
        * html/HTMLBodyElement.idl:
        * html/HTMLFrameSetElement.idl:
        * html/HTMLInputElement.idl:
        * page/DOMSelection.idl:
        * page/DOMWindow.idl:
        * page/Location.idl:
        * storage/IDBDatabaseException.idl:
        * storage/Storage.idl:
        * svg/SVGElementInstance.idl:
        * svg/SVGException.idl:
        * workers/WorkerLocation.idl:
        * xml/XMLHttpRequestException.idl:
        * xml/XPathException.idl:

2012-02-03  Kentaro Hara  <haraken@chromium.org>

        Rename [InitializedByConstructor] IDL to [InitializedByEventConstructor] IDL
        https://bugs.webkit.org/show_bug.cgi?id=77711

        Reviewed by Adam Barth.

        [InitializedByConstructor] can be used only when [ConstructorTemplate=Event]
        is specified on the interface. This patch renames [InitializedByConstructor] to
        [InitializedByEventConstructor] for clarification.

        No tests. No change in behavior.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateConstructorDefinition):
        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateEventConstructorCallback):

        * bindings/scripts/test/TestEventConstructor.idl:
        * bindings/scripts/test/V8/V8TestEventConstructor.cpp: Updated the run-bindings-tests results.
        (WebCore):

        * dom/BeforeLoadEvent.idl:
        * dom/CustomEvent.idl:
        * dom/ErrorEvent.idl:
        * dom/Event.idl:
        * dom/HashChangeEvent.idl:
        * dom/MessageEvent.idl:
        * dom/OverflowEvent.idl:
        * dom/PageTransitionEvent.idl:
        * dom/PopStateEvent.idl:
        * dom/ProgressEvent.idl:
        * dom/WebKitAnimationEvent.idl:
        * dom/WebKitTransitionEvent.idl:
        * html/canvas/WebGLContextEvent.idl:
        * html/track/TrackEvent.idl:
        * storage/StorageEvent.idl:
        * websockets/CloseEvent.idl:

2012-02-03  Kentaro Hara  <haraken@chromium.org>

        Add the "CPP" prefix to CPP specific IDL attributes
        https://bugs.webkit.org/show_bug.cgi?id=77707

        Reviewed by Adam Barth.

        This patch adds the "CPP" prefix to a CPP specific IDL attribute.
        Specifically, this patch renames [PureInterface] to [CPPPureInterface]

        No tests. No change in behavior.

        * bindings/scripts/CodeGeneratorCPP.pm:
        (GenerateHeader):
        (GenerateImplementation):
        * css/MediaQueryListListener.idl:
        * dom/EventListener.idl:
        * dom/EventTarget.idl:
        * dom/NodeFilter.idl:

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

        Implement touch event emulation in the WebCore layer
        https://bugs.webkit.org/show_bug.cgi?id=77105

        Reviewed by Ryosuke Niwa.

        This change essentially maps mouse events into single-touch events in the following way:
        - mousedown -> touchstart
        - mouseup -> touchend
        - mousemove -> touchmove (between mousedown and mouseup).

        Test: fast/events/touch/emulate-touch-events.html

        * page/EventHandler.cpp:
        (SyntheticTouchPoint): A synthetic touch point built from PlatformMouseEvent.
        (WebCore::SyntheticTouchPoint::SyntheticTouchPoint):
        (SyntheticSingleTouchEvent): A synthetic touch point event built from PlatformMouseEvent.
        (WebCore::SyntheticSingleTouchEvent::SyntheticSingleTouchEvent):
        (WebCore::EventHandler::handleMouseReleaseEvent): Invoke maybeDispatchSyntheticTouchEvent() and bail out if necessary.
        (WebCore::EventHandler::handleMousePressEvent): Invoke maybeDispatchSyntheticTouchEvent() and bail out if necessary.
        (WebCore::EventHandler::mouseMoved): Invoke maybeDispatchSyntheticTouchEvent() and bail out if necessary.
        (WebCore::EventHandler::dispatchSyntheticTouchEventIfEnabled): Dispatch a synthetic touch event if necessary.
        * page/EventHandler.h: Added new method.
        * page/Settings.cpp:
        (WebCore::Settings::Settings): Added m_touchEventEmulationEnabled initializer.
        * page/Settings.h: Added m_touchEventEmulationEnabled, getter, and setter.
        (WebCore::Settings::setTouchEventEmulationEnabled): Added.
        (WebCore::Settings::isTouchEventEmulationEnabled): Added.
        * platform/PlatformTouchPoint.h:
        (WebCore::PlatformTouchPoint::PlatformTouchPoint): Unconditionally compile the parameterless ctor.
        * testing/InternalSettings.cpp:
        (WebCore::InternalSettings::setTouchEventEmulationEnabled): Added for testing.
        * testing/InternalSettings.h: Added setTouchEventEmulationEnabled() for testing.
        * testing/InternalSettings.idl: Added setTouchEventEmulationEnabled() for testing.

2012-02-03  Kentaro Hara  <haraken@chromium.org>

        Remove [NoCPPCustom] IDL
        https://bugs.webkit.org/show_bug.cgi?id=77704

        Reviewed by Adam Barth.

        This patch removes [NoCPPCustom], by replacing [Custom, NoCPPCustom]
        in HTMLDocument.idl with [JSCCustom, V8Custom].

        No tests. No change in behavior.

        * bindings/scripts/CodeGeneratorCPP.pm:
        (ShouldSkipType):
        * html/HTMLDocument.idl:

2012-02-03  Kentaro Hara  <haraken@chromium.org>

        Remove [LegacyParent] from CodeGeneratorGObject.pm, and rename it to [JSLegacyParent]
        https://bugs.webkit.org/show_bug.cgi?id=77706

        Reviewed by Adam Barth.

        This patch removes dead code about [LegacyParent] from CodeGeneratorGObject.pm,
        and renames [LegacyParent] to [JSLegacyParent].

        No tests. No changes in behavior.

        * bindings/scripts/CodeGeneratorGObject.pm:
        (Generate):
        * bindings/scripts/CodeGeneratorJS.pm:
        (GetParentClassName):
        (GenerateHeader):
        (GenerateImplementation):
        * page/DOMWindow.idl:
        * workers/WorkerContext.idl:

2012-02-03  Pavel Feldman  <pfeldman@google.com>

        Web Inspector: preserve elements panel selection upon node drag'n'drop
        https://bugs.webkit.org/show_bug.cgi?id=77722

        Reviewed by Vsevolod Vlasov.

        Test: inspector/elements/move-node.html

        * inspector/front-end/DOMAgent.js:
        (WebInspector.DOMAgent.prototype._markRevision):
        * inspector/front-end/ElementsTreeOutline.js:
        (WebInspector.ElementsTreeOutline.prototype._ondrop):
        (WebInspector.ElementsTreeOutline.prototype._doMove.callback):
        (WebInspector.ElementsTreeOutline.prototype._doMove):

2012-02-03  Shinya Kawanaka  <shinyak@google.com>

       Reimplement DETAILS and SUMMARY using selector query.
        https://bugs.webkit.org/show_bug.cgi?id=75930

        Reviewed by Hajime Morita.

        DETAILS is reimplemented using content element and its fallback feature.
        We don't need to recreate DOM even if SUMMARY is removed from or added into DETAILS.

        No new tests, should be covered by existing tests.

        * html/HTMLDetailsElement.cpp:
        (WebCore::DetailsSummaryElement::fallbackSummary):
          Takes fallback element of content summary.
        (DetailsSummaryElement):
        (WebCore::DetailsSummaryElement::create):
          Creates a fallback element also.
        (WebCore):
        (WebCore::HTMLDetailsElement::create):
        (WebCore::HTMLDetailsElement::HTMLDetailsElement):
        (WebCore::HTMLDetailsElement::createShadowSubtree):
        (WebCore::HTMLDetailsElement::findMainSummary):
        (WebCore::HTMLDetailsElement::parseMappedAttribute):
        (WebCore::HTMLDetailsElement::childShouldCreateRenderer):
        (WebCore::HTMLDetailsElement::toggleOpen):
        * html/HTMLDetailsElement.h:
        (HTMLDetailsElement):
        * html/HTMLSummaryElement.cpp:
        (WebCore::HTMLSummaryElement::isMainSummary):

2012-02-03  Jochen Eisinger  <jochen@chromium.org>

        Crash when trying to add a timer to a detached document.
        https://bugs.webkit.org/show_bug.cgi?id=77692

        Reviewed by Alexey Proskuryakov.

        In http://webkit.org/b/77370, a timer is fired on a detached document.
        Since a document clears all timers when it is detached, and it
        shouldn't be possible to add a timer to a detached document, we crash
        if this should happen anyway. This will hopefully result in an easier
        to debug crash dump.

        * page/DOMTimer.cpp:
        (WebCore::DOMTimer::DOMTimer):

2012-02-03  Shinya Kawanaka  <shinyak@google.com>

        Stop calling Element::ensureShadowRoot in Internals.
        https://bugs.webkit.org/show_bug.cgi?id=77612

        Reviewed by Hajime Morita.

        We want to check a shadow root is built-in or created by users to support multiple shadow subtrees.
        But Element::ensureShadowRoot() makes it difficult, because it doesn't care about the returning shadow element
        is built-in or user generated, so let's remove Element::ensureShadowRoot().

        As a first step, this patch removes ensureShadowRoot() in Internals.

        No new tests, because no changes in behavior.

        * WebCore.exp.in:
        * testing/Internals.cpp:
        (WebCore::Internals::ensureShadowRoot):

2012-02-02  Alexei Filippov  <alexeif@chromium.org>

        Web Inspector: Always show percents together with counters in heap inspector.
        https://bugs.webkit.org/show_bug.cgi?id=77434

        Reviewed by Pavel Feldman.

        * inspector/front-end/DetailedHeapshotGridNodes.js:
        (WebInspector.HeapSnapshotGridNode.prototype._toPercentString):
        (WebInspector.HeapSnapshotGridNode.prototype._createValueCell):
        (WebInspector.HeapSnapshotGenericObjectNode.prototype.createCell):
        (WebInspector.HeapSnapshotGenericObjectNode.prototype.get data):
        (WebInspector.HeapSnapshotConstructorNode.prototype.createCell):
        (WebInspector.HeapSnapshotConstructorNode.prototype.get data):
        (WebInspector.HeapSnapshotDiffNode.prototype.get data):
        * inspector/front-end/DetailedHeapshotView.js:
        (WebInspector.HeapSnapshotContainmentDataGrid):
        (WebInspector.HeapSnapshotConstructorsDataGrid):
        (WebInspector.HeapSnapshotDiffDataGrid):
        (WebInspector.HeapSnapshotDominatorsDataGrid):
        (WebInspector.DetailedHeapshotView.prototype._mouseDownInContentsGrid):
        (WebInspector.DetailedHeapshotView.prototype.get _isShowingAsPercent):
        (WebInspector.DetailedHeapshotView.prototype._percentClicked):
        * inspector/front-end/heapProfiler.css:
        (.detailed-heapshot-view .data-grid span.percent-column):

2012-02-02  Matt Falkenhagen  <falken@chromium.org>

        Use content-language from http-equiv to set document locale and font
        https://bugs.webkit.org/show_bug.cgi?id=76701

        Reviewed by Darin Adler.

        So far, only content-language set through http-equiv is used; the HTTP Content-Language
        header is not yet supported.

        Tests: fast/text/content-language-case-insensitivity.html
               fast/text/content-language-mapped-to-webkit-locale.html
               fast/text/international/content-language-font-selection-expected.html
               fast/text/international/content-language-font-selection.html
               fast/text/international/content-language-with-subtags-expected.html
               fast/text/international/content-language-with-subtags.html

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::styleForDocument): Use content language when selecting initial font.
        * dom/Document.cpp:
        (WebCore::Document::setContentLanguage): Recalculate style so language is taken into account.
        (WebCore):
        * dom/Document.h:
        (Document):

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

        Unreviewed, rolling out r106620.
        http://trac.webkit.org/changeset/106620
        https://bugs.webkit.org/show_bug.cgi?id=77716

        It broke non ENABLE(3D_RENDERING) builds (Requested by
        Ossy_morning on #webkit).

        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * platform/graphics/GraphicsContext.h:
        (WebCore):
        (GraphicsContext):
        * platform/graphics/cairo/TextureMapperCairo.cpp:
        (WebCore::TextureMapper::create):
        (WebCore):
        * platform/graphics/opengl/TextureMapperGL.cpp:
        (Entry):
        (DirectlyCompositedImageRepository):
        (WebCore::TextureMapperGLData::DirectlyCompositedImageRepository::findOrCreate):
        (WebCore::TextureMapperGLData::DirectlyCompositedImageRepository::deref):
        (WebCore::TextureMapperGLData::DirectlyCompositedImageRepository::DirectlyCompositedImageRepository):
        (WebCore::TextureMapperGLData::DirectlyCompositedImageRepository::~DirectlyCompositedImageRepository):
        (TextureMapperGLData):
        (BitmapTextureGL):
        (WebCore::BitmapTextureGL::isOpaque):
        (WebCore::BitmapTextureGL::pack):
        (WebCore::BitmapTextureGL::unpack):
        (WebCore::BitmapTextureGL::isPacked):
        (WebCore::BitmapTextureGL::BitmapTextureGL):
        (WebCore::TextureMapperGL::beginPainting):
        (WebCore::BitmapTextureGL::reset):
        (WebCore::BitmapTextureGL::beginPaint):
        (WebCore::BitmapTextureGL::endPaint):
        (WebCore):
        (WebCore::BitmapTextureGL::updateContents):
        (WebCore::BitmapTextureGL::updateRawContents):
        (WebCore::BitmapTextureGL::setContentsToImage):
        (WebCore::BitmapTextureGL::destroy):
        (WebCore::TextureMapperGL::bindSurface):
        * platform/graphics/opengl/TextureMapperGL.h:
        (TextureMapperGL):
        (WebCore::TextureMapperGL::allowSurfaceForRoot):
        (BGRA32PremultimpliedBuffer):
        (WebCore::BGRA32PremultimpliedBuffer::~BGRA32PremultimpliedBuffer):
        (WebCore):
        * platform/graphics/qt/GraphicsContext3DQt.cpp:
        (WebCore::GraphicsContext3DPrivate::paintToTextureMapper):
        * platform/graphics/qt/GraphicsContextQt.cpp:
        * platform/graphics/qt/TextureMapperQt.cpp: Added.
        (WebCore):
        (WebCore::BitmapTextureQt::destroy):
        (WebCore::BitmapTextureQt::reset):
        (WebCore::BitmapTextureQt::beginPaint):
        (WebCore::BitmapTextureQt::endPaint):
        (WebCore::BitmapTextureQt::updateContents):
        (WebCore::BitmapTextureQt::save):
        (WebCore::BitmapTextureQt::setContentsToImage):
        (WebCore::BitmapTextureQt::pack):
        (WebCore::BitmapTextureQt::unpack):
        (WebCore::TextureMapperQt::beginClip):
        (WebCore::TextureMapperQt::endClip):
        (WebCore::TextureMapperQt::viewportSize):
        (WebCore::TextureMapperQt::TextureMapperQt):
        (WebCore::TextureMapperQt::setGraphicsContext):
        (WebCore::TextureMapperQt::graphicsContext):
        (WebCore::TextureMapperQt::bindSurface):
        (WebCore::TextureMapperQt::drawTexture):
        (WebCore::TextureMapper::create):
        (WebCore::TextureMapperQt::createTexture):
        (WebCore::BitmapTextureQt::BitmapTextureQt):
        (WebCore::TextureMapperQt::beginPainting):
        (WebCore::TextureMapperQt::endPainting):
        (BGRA32PremultimpliedBufferQt):
        (WebCore::BGRA32PremultimpliedBufferQt::beginPaint):
        (WebCore::BGRA32PremultimpliedBufferQt::endPaint):
        (WebCore::BGRA32PremultimpliedBufferQt::data):
        (WebCore::BGRA32PremultimpliedBuffer::create):
        (WebCore::uidForImage):
        * platform/graphics/qt/TextureMapperQt.h: Added.
        (WebCore):
        (BitmapTextureQt):
        (WebCore::BitmapTextureQt::~BitmapTextureQt):
        (WebCore::BitmapTextureQt::size):
        (WebCore::BitmapTextureQt::isValid):
        (WebCore::BitmapTextureQt::sourceRect):
        (WebCore::BitmapTextureQt::isPacked):
        (WebCore::BitmapTextureQt::painter):
        (TextureMapperQt):
        (WebCore::TextureMapperQt::allowSurfaceForRoot):
        (WebCore::TextureMapperQt::initialize):
        (WebCore::TextureMapperQt::create):
        (WebCore::TextureMapperQt::currentPainter):
        * platform/graphics/texmap/TextureMapper.cpp:
        * platform/graphics/texmap/TextureMapper.h:
        (WebCore::BitmapTexture::BitmapTexture):
        (WebCore::BitmapTexture::allowOfflineTextureUpload):
        (BitmapTexture):
        (WebCore::BitmapTexture::pack):
        (WebCore::BitmapTexture::unpack):
        (WebCore::BitmapTexture::isPacked):
        (WebCore::BitmapTexture::updateRawContents):
        (WebCore::BitmapTexture::beginPaintMedia):
        (WebCore::BitmapTexture::save):
        (WebCore::BitmapTexture::lock):
        (WebCore::BitmapTexture::unlock):
        (WebCore::BitmapTexture::isLocked):
        (TextureMapper):
        (WebCore::TextureMapper::viewportSize):
        (WebCore::TextureMapper::setViewportSize):
        (WebCore::TextureMapper::allowPartialUpdates):
        (WebCore::TextureMapper::isOpenGLBacked):
        (WebCore::TextureMapper::setTransform):
        (WebCore::TextureMapper::transform):
        * platform/graphics/texmap/TextureMapperImageBuffer.cpp: Removed.
        * platform/graphics/texmap/TextureMapperImageBuffer.h: Removed.
        * platform/graphics/texmap/TextureMapperNode.cpp:
        (WebCore::TextureMapperNode::renderContent):
        (WebCore::TextureMapperNode::setContentsTileBackBuffer):
        * platform/graphics/texmap/TextureMapperNode.h:
        (TextureMapperNode):

2012-02-02  Keishi Hattori  <keishi@webkit.org>

        ColorInputType needs to use ensureInlineStyleDecl
        https://bugs.webkit.org/show_bug.cgi?id=77699

        Reviewed by Kent Tamura.

        Because WebCore internally should use the more specific CSSMutableStyleDeclaration
        http://trac.webkit.org/changeset/105739

        * html/ColorInputType.cpp:
        (WebCore::ColorInputType::updateColorSwatch):

2012-02-02  Roland Steiner  <rolandsteiner@chromium.org>

        Simplify SelectorChecker::checkSelector and checkOneSelector
        https://bugs.webkit.org/show_bug.cgi?id=77697

        Make use of Element::previous/nextElementSibling.
        Made those methods inline.
        Simplify code in checkSelector and checkOneSelector, esp. for first/nth/nth-last/last/only-child implementations.

        Reviewed by Andreas Kling.

        No new tests. (refactoring)

        * css/SelectorChecker.cpp:
        (WebCore::SelectorChecker::checkSelector):
        (WebCore::SelectorChecker::checkOneSelector):
        * dom/Element.cpp:
        * dom/Element.h:
        (WebCore::Element::previousElementSibling):
        (WebCore):
        (WebCore::Element::nextElementSibling):

2012-02-02  Keishi Hattori  <keishi@webkit.org>

        ColorChooserClient is missing a virtual destructor
        https://bugs.webkit.org/show_bug.cgi?id=77698

        Reviewed by Kent Tamura.

        * platform/ColorChooserClient.h:
        (WebCore::ColorChooserClient::~ColorChooserClient): Added.

2012-02-02  Keishi Hattori  <keishi@webkit.org>

        Remove OVERRIDE from ColorInputType::valueAsColor
        https://bugs.webkit.org/show_bug.cgi?id=77701

        Reviewed by Kent Tamura.

        * html/ColorInputType.h:
        (WebCore::ColorInputType::valueAsColor):

2012-02-02  Bear Travis  <betravis@adobe.com>

        Support 'disabled' attribute on SVGStyleElement
        https://bugs.webkit.org/show_bug.cgi?id=52130

        Adding disabled property to SVGStyleElement, which
        mirrors the functionality added to HTMLStyleElement
        for DOM1. The disabled property reflects and sets
        the disabled state of its style sheet.

        Based off of patch for bug 25287

        Reviewed by Dirk Schulze.

        Test: svg/dom/SVGStyleElement/disable-svg-style-element.html

        * svg/SVGStyleElement.cpp:
        (WebCore::SVGStyleElement::disabled):
        (WebCore):
        (WebCore::SVGStyleElement::setDisabled):
        * svg/SVGStyleElement.h:
        (SVGStyleElement):
        * svg/SVGStyleElement.idl:

2012-02-02  Hayato Ito  <hayato@chromium.org>

        Make ShadowRoot interface inherit DocumentFragment interface in IDL.
        https://bugs.webkit.org/show_bug.cgi?id=77511

        Reviewed by Kentaro Hara.

        This patch contains only the change of IDL to isolate issues.
        Other changes, such as tests for querySelector of ShadowRoot, will be added in follow-up patches.

        No tests. No change in behavior.

        * dom/ShadowRoot.idl:

2012-02-02  Raymond Toy  <rtoy@google.com>

        Check parameters to biquad filters
        https://bugs.webkit.org/show_bug.cgi?id=71413

        Reviewed by Kenneth Russell.

        Tests added for each filter type and for the limiting cases for
        each filter type.

        * platform/audio/Biquad.cpp:
        (WebCore::Biquad::setLowpassParams):
        (WebCore::Biquad::setHighpassParams):
        (WebCore::Biquad::setLowShelfParams):
        (WebCore::Biquad::setHighShelfParams):
        (WebCore::Biquad::setPeakingParams):
        (WebCore::Biquad::setAllpassParams):
        (WebCore::Biquad::setNotchParams):
        (WebCore::Biquad::setBandpassParams):
        Check for invalid parameters and clip them to something sensible.
        Also check for the limiting cases and try to use the limiting form
        of the z-transform for the biquad.  Some issues cannot be
        consistently handled because the z-transform is not continuous as
        the parameters approach the limit.

2012-02-02  No'am Rosenthal  <noam.rosenthal@nokia.com>

        [Qt][Texmap] Refactor TextureMapper API to use ImageBuffers when possible.
        https://bugs.webkit.org/show_bug.cgi?id=77148

        Reviewed by Martin Robinson.

        Removed TextureMapperQt, and instead created a TextureMapperImageBuffer class,
        which responds to an "Software" mode of TextureMapper, instead of creating subclasses
        of TextureMapper directly. This allows using the software fallback of TextureMapper by any
        sort.

        To make the ImageBuffer backend easier, content updates to BitmapTexture can now use either
        an image, or a raw data pointer. The raw data pointer is provided for performance reasons,
        as converting data to/from Image references in Qt generates unnecessary deep copies of the
        image data.

        Also, functions that use TransformationMatrix were added to GraphicsContext, to allow for
        3D transforms in cross platform code.
        After this patch everything renders the same. An additional bug report was created to allow
        ImageBuffer shallow image copies: https://bugs.webkit.org/show_bug.cgi?id=77689

        Covered extensively by existing tests, no behavioral changes.

        * Target.pri:
        * platform/graphics/GraphicsContext.cpp:
        * platform/graphics/GraphicsContext.h:
        (WebCore):
        (GraphicsContext):
        * platform/graphics/cairo/TextureMapperCairo.cpp:
        * platform/graphics/opengl/TextureMapperGL.cpp:
        (TextureMapperGLData):
        (BitmapTextureGL):
        (WebCore::BitmapTextureGL::BitmapTextureGL):
        (WebCore::TextureMapperGL::beginPainting):
        (WebCore::BitmapTextureGL::reset):
        (WebCore):
        (WebCore::swizzleBGRAToRGBA):
        (WebCore::BitmapTextureGL::updateContents):
        (WebCore::BitmapTextureGL::destroy):
        (WebCore::TextureMapperGL::bindSurface):
        (WebCore::TextureMapper::platformCreateAccelerated):
        * platform/graphics/opengl/TextureMapperGL.h:
        (TextureMapperGL):
        (WebCore::TextureMapperGL::accelerationMode):
        (WebCore):
        * platform/graphics/qt/GraphicsContext3DQt.cpp:
        (WebCore::GraphicsContext3DPrivate::paintToTextureMapper):
        * platform/graphics/qt/GraphicsContextQt.cpp:
        (WebCore):
        (WebCore::GraphicsContext::get3DTransform):
        (WebCore::GraphicsContext::concat3DTransform):
        (WebCore::GraphicsContext::set3DTransform):
        * platform/graphics/qt/TextureMapperQt.cpp: Removed.
        * platform/graphics/qt/TextureMapperQt.h: Removed.
        * platform/graphics/texmap/TextureMapper.cpp:
        (WebCore):
        (BitmapTextureImageBuffer):
        (TextureMapperImageBuffer):
        * platform/graphics/texmap/TextureMapper.h:
        (WebCore::BitmapTexture::BitmapTexture):
        (BitmapTexture):
        (WebCore::BitmapTexture::bpp):
        (WebCore::BitmapTexture::isOpaque):
        (WebCore::TextureMapper::setGraphicsContext):
        (WebCore::TextureMapper::graphicsContext):
        (TextureMapper):
        (WebCore::TextureMapper::TextureMapper):
        (WebCore::TextureMapper::platformCreateAccelerated):
        * platform/graphics/texmap/TextureMapperNode.cpp:
        (WebCore::TextureMapperNode::renderContent):
        (WebCore::TextureMapperNode::setContentsTileBackBuffer):
        * platform/graphics/texmap/TextureMapperNode.h:
        (TextureMapperNode):

2012-02-02  Adam Barth  <abarth@webkit.org>

        Rename checkNodeSecurity and allowsAccessFromFrame to have sensible names
        https://bugs.webkit.org/show_bug.cgi?id=75796

        Reviewed by Eric Seidel.

        As requested by Darin Adler, this patch renames these functions be
        clear that we're asking whether the access should be allowed rather
        than explicitly allowing the access.

        * bindings/generic/BindingSecurity.h:
        (BindingSecurity):
        (WebCore::::shouldAllowAccessToNode):
        (WebCore::::allowSettingFrameSrcToJavascriptUrl):
        * bindings/js/JSDOMBinding.cpp:
        (WebCore::shouldAllowAccessToNode):
        (WebCore::shouldAllowAccessToFrame):
        * bindings/js/JSDOMBinding.h:
        (WebCore):
        * bindings/js/JSHTMLFrameElementCustom.cpp:
        (WebCore::allowSettingJavascriptURL):
        * bindings/js/JSHistoryCustom.cpp:
        (WebCore::JSHistory::getOwnPropertySlotDelegate):
        (WebCore::JSHistory::getOwnPropertyDescriptorDelegate):
        (WebCore::JSHistory::putDelegate):
        (WebCore::JSHistory::deleteProperty):
        (WebCore::JSHistory::getOwnPropertyNames):
        * bindings/js/JSLocationCustom.cpp:
        (WebCore::JSLocation::getOwnPropertySlotDelegate):
        (WebCore::JSLocation::getOwnPropertyDescriptorDelegate):
        (WebCore::JSLocation::putDelegate):
        (WebCore::JSLocation::deleteProperty):
        (WebCore::JSLocation::getOwnPropertyNames):
        (WebCore::JSLocation::toStringFunction):
        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::canAccessFromCurrentOrigin):
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateGetOwnPropertyDescriptorBody):
        (GenerateImplementation):
        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateNormalAttrGetter):
        (GenerateFunctionCallback):
        * bindings/scripts/test/JS/JSTestActiveDOMObject.cpp:
        (WebCore::JSTestActiveDOMObject::getOwnPropertyDescriptor):
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::jsTestObjContentDocument):
        (WebCore::jsTestObjPrototypeFunctionGetSVGDocument):
        * bindings/scripts/test/V8/V8TestObj.cpp:
        (WebCore::TestObjInternal::contentDocumentAttrGetter):
        (WebCore::TestObjInternal::getSVGDocumentCallback):

2012-02-02  Kalev Lember  <kalevlember@gmail.com>

        [GTK] Make gtk+ symbols available to WidgetBackingStoreCairo.cpp
        https://bugs.webkit.org/show_bug.cgi?id=77679

        WidgetBackingStoreCairo.cpp uses GTK+ symbols, so we need it in
        webcoregtk_sources instead of webcore_sources.

        Reviewed by Martin Robinson.

        * GNUmakefile.list.am: Move WidgetBackingStoreCairo.cpp to webcoregtk.

2012-02-02  Shinya Kawanaka  <shinyak@google.com>

        StyleRecalc should occur when shadow root exists and light children are changed.
        https://bugs.webkit.org/show_bug.cgi?id=76262

        Reviewed by Hajime Morita.

        When light children is changed, the element included in HTMLContentElement may also be changed.
        So we have to recalculate inclusion of content element again.

        Test: fast/dom/shadow/shadow-contents-fallback-dynamic.html

        * dom/Element.cpp:
        (WebCore::Element::childrenChanged):

2012-02-02  Ami Fischman  <fischman@chromium.org>

        Avoid crashing renderer when GPU process dies by not caching textures between video frames.
        https://bugs.webkit.org/show_bug.cgi?id=77654

        Reviewed by James Robinson.

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

2012-02-02  Anders Carlsson  <andersca@apple.com>

        Add ScrollingTree class
        https://bugs.webkit.org/show_bug.cgi?id=77695

        Reviewed by Andreas Kling.

        * WebCore.xcodeproj/project.pbxproj:
        Add new files.

        * page/scrolling/ScrollingCoordinator.cpp:
        (WebCore::ScrollingCoordinator::ScrollingCoordinator):
        Create a scrolling tree.

        (WebCore::ScrollingCoordinator::~ScrollingCoordinator):
        Assert that the scrolling tree is null.

        (WebCore::ScrollingCoordinator::pageDestroyed):
        Null out the scrolling tree member variable and tell it to invalidate itself.

        * page/scrolling/ScrollingTree.cpp: Added.

        (WebCore::ScrollingTree::invalidate):
        Null out the scrolling coordinator, breaking the reference cycle between the scrolling
        coordinator and the scrolling tree.
    
        * page/scrolling/ScrollingTree.h: Added.

2012-02-02  Tim Dresser  <tdresser@chromium.org>

        Refactor plugin drawing to be more data driven
        https://bugs.webkit.org/show_bug.cgi?id=76715

        Reviewed by James Robinson.

        CCPluginLayerImpl no longer handles drawing itself, but produces a list of CCPluginDrawQuads.
        These quads are then drawn by LayerRendererChromium.

        CCLayerImpl::willDraw(LayerRendererChromium*) is called directly before appendQuads.
        This allows for CCLayerImpl objects to allocate textures before appendQuads is called.

        This is a refactor, so no new tests were added.
        Flash was tested manually on Linux and Mac.

        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::PluginProgramBinding::set):
        (PluginProgramBinding):
        (WebCore):
        (WebCore::TexStretchPluginProgramBinding::set):
        (TexStretchPluginProgramBinding):
        (WebCore::TexTransformPluginProgramBinding::set):
        (TexTransformPluginProgramBinding):
        (WebCore::LayerRendererChromium::drawPluginQuad):
        * platform/graphics/chromium/cc/CCLayerImpl.h:
        (WebCore::CCLayerImpl::willDraw):
        * platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:
        (WebCore::CCLayerTreeHostImpl::calculateRenderPasses):
        * platform/graphics/chromium/cc/CCPluginDrawQuad.cpp:
        (WebCore::CCPluginDrawQuad::create):
        (WebCore::CCPluginDrawQuad::CCPluginDrawQuad):
        * platform/graphics/chromium/cc/CCPluginDrawQuad.h:
        (CCPluginDrawQuad):
        (WebCore::CCPluginDrawQuad::uvRect):
        (WebCore::CCPluginDrawQuad::textureId):
        (WebCore::CCPluginDrawQuad::flipped):
        (WebCore::CCPluginDrawQuad::ioSurfaceWidth):
        (WebCore::CCPluginDrawQuad::ioSurfaceHeight):
        (WebCore::CCPluginDrawQuad::ioSurfaceTextureId):
        * platform/graphics/chromium/cc/CCPluginLayerImpl.cpp:
        (WebCore::CCPluginLayerImpl::willDraw):
        (WebCore::CCPluginLayerImpl::appendQuads):
        * platform/graphics/chromium/cc/CCPluginLayerImpl.h:
        (CCPluginLayerImpl):

2012-01-29  Pablo Flouret  <pablof@motorola.com>

        V8 idl code generator doesn't handle SerializedScriptValue attributes properly.
        https://bugs.webkit.org/show_bug.cgi?id=77295

        Reviewed by Kentaro Hara.

        Only the case of one (and only one) SerializedScriptValue attribute was
        handled, and it was deserialized eagerly in the constructor instead of
        generating getters/setters. This patch gets rid of that behavior and
        generates the getters and setters instead (similar to what the JSC
        generator does).
        Also handle the case of SSV attributes with [CachedAttribute]
        declaration, caching the deserialized value in a hidden attribute on the
        object.

        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateNormalAttrGetter):
        (GenerateNormalAttrSetter):
        (GenerateConstructorCallback):
        (GenerateNamedConstructorCallback):
        (GenerateSingleBatchedAttribute):
        (GenerateImplementation):
        (GenerateToV8Converters):
        (JSValueToNative):
        (NativeToJSValue):
        * bindings/scripts/test/CPP/WebDOMTestSerializedScriptValueInterface.cpp:
        (WebDOMTestSerializedScriptValueInterface::setValue):
        (WebDOMTestSerializedScriptValueInterface::readonlyValue):
        (WebDOMTestSerializedScriptValueInterface::cachedValue):
        (WebDOMTestSerializedScriptValueInterface::setCachedValue):
        (WebDOMTestSerializedScriptValueInterface::cachedReadonlyValue):
        * bindings/scripts/test/CPP/WebDOMTestSerializedScriptValueInterface.h:
        (WebDOMTestSerializedScriptValueInterface):
        * bindings/scripts/test/GObject/WebKitDOMTestSerializedScriptValueInterface.cpp:
        (webkit_dom_test_serialized_script_value_interface_set_value):
        (webkit_dom_test_serialized_script_value_interface_get_readonly_value):
        (webkit_dom_test_serialized_script_value_interface_get_cached_value):
        (webkit_dom_test_serialized_script_value_interface_set_cached_value):
        (webkit_dom_test_serialized_script_value_interface_get_cached_readonly_value):
        (webkit_dom_test_serialized_script_value_interface_get_property):
        (webkit_dom_test_serialized_script_value_interface_class_init):
        * bindings/scripts/test/GObject/WebKitDOMTestSerializedScriptValueInterface.h:
        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp:
        ():
        (WebCore::jsTestSerializedScriptValueInterfaceReadonlyValue):
        (WebCore):
        (WebCore::jsTestSerializedScriptValueInterfaceCachedValue):
        (WebCore::jsTestSerializedScriptValueInterfaceCachedReadonlyValue):
        (WebCore::JSTestSerializedScriptValueInterface::put):
        (WebCore::setJSTestSerializedScriptValueInterfaceValue):
        (WebCore::setJSTestSerializedScriptValueInterfaceCachedValue):
        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.h:
        (JSTestSerializedScriptValueInterface):
        (JSTestSerializedScriptValueInterfacePrototype):
        (WebCore):
        * bindings/scripts/test/ObjC/DOMTestSerializedScriptValueInterface.h:
        * bindings/scripts/test/ObjC/DOMTestSerializedScriptValueInterface.mm:
        (-[DOMTestSerializedScriptValueInterface setValue:]):
        (-[DOMTestSerializedScriptValueInterface readonlyValue]):
        (-[DOMTestSerializedScriptValueInterface cachedValue]):
        (-[DOMTestSerializedScriptValueInterface setCachedValue:]):
        (-[DOMTestSerializedScriptValueInterface cachedReadonlyValue]):
        * bindings/scripts/test/TestSerializedScriptValueInterface.idl:
        * bindings/scripts/test/V8/V8TestSerializedScriptValueInterface.cpp:
        (WebCore::TestSerializedScriptValueInterfaceInternal::valueAttrGetter):
        (TestSerializedScriptValueInterfaceInternal):
        (WebCore::TestSerializedScriptValueInterfaceInternal::valueAttrSetter):
        (WebCore::TestSerializedScriptValueInterfaceInternal::readonlyValueAttrGetter):
        (WebCore::TestSerializedScriptValueInterfaceInternal::cachedValueAttrGetter):
        (WebCore::TestSerializedScriptValueInterfaceInternal::cachedValueAttrSetter):
        (WebCore::TestSerializedScriptValueInterfaceInternal::cachedReadonlyValueAttrGetter):
        ():
        (WebCore::V8TestSerializedScriptValueInterface::constructorCallback):
        (WebCore::ConfigureV8TestSerializedScriptValueInterfaceTemplate):
        (WebCore::V8TestSerializedScriptValueInterface::wrapSlow):

2012-02-02  Adam Barth  <abarth@webkit.org>

        BMW Car Configuration Page doesn't work (Only manifests in Chromium)
        https://bugs.webkit.org/show_bug.cgi?id=77312

        Reviewed by Dimitri Glazkov.

        When we autogenerated the event factory, we missed the check for
        whether touch events were enabled at runtime:
        http://trac.webkit.org/changeset/97933/trunk/Source/WebCore/dom/Document.cpp

        This patch adds the check back.

        Unfortunately, there isn't a testing frame work for
        RuntimeEnabledFeatures.  The main difficulty is that these static bools
        need to be set when WebKit is initialized and can't be changed (which
        is why they're not part of WebCore::Settings).  To test them properly,
        we'd need a testing framework that booted up WebKit for each test.

        We could test this particular change (which doesn't need the bool to be
        constant through the runtime of WebKit), but that would create a
        sandtrap for future patches who might thing that this testing framework
        can really be used to test RuntimeEnabledFeatures.

        The net result is that Chromium is going to end up living with the
        non-default codepath for these settings being untested, which will lead
        to regressions like this one.  If we ened up with a bunch of these
        regressions, we'll likely end up with a testing framework similar to
        Chromium's browsers_tests, which create a fresh subprocess for each
        test.

        * dom/EventFactory.in:
        * dom/make_event_factory.pl:
        (defaultItemFactory):
        (generateImplementation):

2012-02-02  Justin Novosad  <junov@chromium.org>

        [Chromium] Use SkCanvas::flush in skia port
        https://bugs.webkit.org/show_bug.cgi?id=77463

        Reviewed by Stephen White.

        Code cleanup in skia port. Using SkCanvas::flush to remove
        unnecessary dependency on GrContext.  Removed unnecessary inclusions
        and forward declarations of GrContext in several source files.

        * platform/graphics/chromium/Canvas2DLayerChromium.cpp:
        (WebCore::Canvas2DLayerChromium::paintContentsIfDirty):
        * platform/graphics/chromium/LayerRendererChromium.cpp:
        * platform/graphics/chromium/LayerRendererChromium.h:
        * platform/graphics/chromium/cc/CCLayerTreeHost.h:
        * platform/graphics/chromium/cc/CCLayerTreeHostImpl.h:
        * platform/graphics/chromium/cc/CCProxy.h:
        * platform/graphics/skia/PlatformContextSkia.cpp:

2012-02-02  Chris Marrin  <cmarrin@apple.com>

        Turn on CSS Filters on Windows
        https://bugs.webkit.org/show_bug.cgi?id=76667

        Turning on CSS_FILTERS flag for Windows and fixed a couple of resultant build errors

        Reviewed by Adele Peterson.

        * WebCore.vcproj/copyForwardingHeaders.cmd:
        * platform/graphics/ca/win/PlatformCALayerWin.cpp:
        (PlatformCALayer::setFilters):
        (PlatformCALayer::filtersCanBeComposited):

2012-02-02  Jon Lee  <jonlee@apple.com>

        Clear shown notifications when context is no longer active
        https://bugs.webkit.org/show_bug.cgi?id=77363
        <rdar://problem/10568907>

        Reviewed by Darin Adler.

        * notifications/NotificationPresenter.h: Add new virtual function to clear notifications
        associated with a given execution context. By default the notifications are left alone, as
        before. Individual implementations can override to allow notifications to clear them.

        * notifications/NotificationCenter.cpp:
        (WebCore::NotificationCenter::disconnectFrame): When disconnecting the page from the frame, we
        call clearNotifications().
        * page/Frame.cpp:
        (WebCore::Frame::pageDestroyed): When the page is destroyed, tell the DOM window to reset notifications.

2012-02-02  Anders Carlsson  <andersca@apple.com>

        The overhang area layer should have a linen background
        https://bugs.webkit.org/show_bug.cgi?id=77670
        <rdar://problem/10797727>

        Reviewed by Andreas Kling.

        * page/scrolling/mac/ScrollingCoordinatorMac.mm:
        (WebCore::ScrollingCoordinator::scrollByOnScrollingThread):
        Add an #ifdef so that scroll position clamping can be disabled. This will be
        removed once rubber-banding works properly.

        * platform/ScrollbarTheme.h:
        (WebCore::ScrollbarTheme::setUpOverhangAreasLayerContents):
        Add new empty function.

        * platform/mac/ScrollbarThemeMac.h:
        (ScrollbarThemeMac):
        * platform/mac/ScrollbarThemeMac.mm:
        (WebCore::linenBackgroundColor):
        Helper function for getting the CGColorRef that represents the linen background color.

        (WebCore::ScrollbarThemeMac::setUpOverhangAreasLayerContents):
        Set the linen background color as the overhang areas layer background color.

        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::updateOverflowControlsLayers):
        Call ScrollbarTheme::setUpOverhangAreasLayerContents.

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

        Unreviewed, rolling out r106566.
        http://trac.webkit.org/changeset/106566
        https://bugs.webkit.org/show_bug.cgi?id=77673

        Broke the Windows build (Requested by jessieberlin on
        #webkit).

        * WebCore.vcproj/copyForwardingHeaders.cmd:
        * platform/graphics/ca/win/PlatformCALayerWin.cpp:

2012-02-02  Tommy Widenflycht  <tommyw@google.com>

        [chromium] MediaStream API: Adding the embedding code for MediaStreamCenter
        https://bugs.webkit.org/show_bug.cgi?id=73130

        Reviewed by Darin Fisher.

        Tests for the Media Stream API will be provided by the bug 56587, pending enough landed code.

        * mediastream/UserMediaClient.h:
        (UserMediaClient):
        * mediastream/UserMediaRequest.cpp:
        (WebCore::UserMediaRequest::didCompleteQuery):
        * mediastream/UserMediaRequest.h:
        (UserMediaRequest):
        (WebCore::UserMediaRequest::audio):
        (WebCore::UserMediaRequest::video):
        (WebCore::UserMediaRequest::cameraPreferenceUser):
        (WebCore::UserMediaRequest::cameraPreferenceEnvironment):
        * platform/mediastream/MediaStreamCenter.cpp:
        (WebCore):
        (WebCore::MediaStreamCenter::queryMediaStreamSources):
        * platform/mediastream/MediaStreamCenter.h:
        (WebCore):
        (MediaStreamSourcesQueryClient):
        (MediaStreamCenter):

2012-02-02  Raymond Toy  <rtoy@google.com>

        Constant values to set "distanceModel" are undefined
        https://bugs.webkit.org/show_bug.cgi?id=74273

        Reviewed by Kenneth Russell.

        Tests: webaudio/distance-exponential.html
               webaudio/distance-inverse.html
               webaudio/distance-linear.html

        * webaudio/AudioPannerNode.h: Define enum for the new constants
        for the distance models.
        * webaudio/AudioPannerNode.idl: Define matching constants for the
        distance models.

2012-02-02  Raymond Toy  <rtoy@google.com>

        Illegal panner model values should throw an exception
        https://bugs.webkit.org/show_bug.cgi?id=77235

        Reviewed by Kenneth Russell.

        Modified existing panner-set-model test to catch exceptions.
        Debug build should not crash anymore.

        * webaudio/AudioPannerNode.cpp:
        (WebCore::AudioPannerNode::setPanningModel):  Throw exception for
        invalid model values.
        * webaudio/AudioPannerNode.h:
        (AudioPannerNode): Update declaration
        * webaudio/AudioPannerNode.idl: Setting panner model can throw
        exception. 

2012-02-02  Kentaro Hara  <haraken@chromium.org>

        Rename [ConvertUndefinedOrNullToNullString] to
        [TreatNullAs=EmptyString, TreatUndefinedAs=EmptyString]
        https://bugs.webkit.org/show_bug.cgi?id=77611

        Reviewed by Adam Barth.

        This patch renames [ConvertUndefinedOrNullToNullString] to
        [TreatNullAs=EmptyString, TreatUndefinedAs=EmptyString], according to the spec
        (http://dev.w3.org/2006/webapi/WebIDL/#TreatNullAs,
        http://dev.w3.org/2006/webapi/WebIDL/#TreatUndefinedAs).

        No tests. No changes in behavior.

        * bindings/scripts/CodeGeneratorJS.pm:
        (JSValueToNative):
        * bindings/scripts/CodeGeneratorV8.pm:
        (GetNativeTypeFromSignature):
        * dom/DOMImplementation.idl:
        * dom/Document.idl:
        * fileapi/Blob.idl:
        * fileapi/DirectoryEntry.idl:
        * fileapi/DirectoryEntrySync.idl:
        * fileapi/Entry.idl:
        * fileapi/EntrySync.idl:
        * fileapi/WebKitBlobBuilder.idl:
        * html/HTMLButtonElement.idl:
        * html/HTMLCanvasElement.idl:
        * html/HTMLFieldSetElement.idl:
        * html/HTMLInputElement.idl:
        * html/HTMLKeygenElement.idl:
        * html/HTMLObjectElement.idl:
        * html/HTMLOutputElement.idl:
        * html/HTMLSelectElement.idl:
        * html/HTMLTextAreaElement.idl:
        * page/Console.idl:
        * page/DOMWindow.idl:

        * bindings/scripts/test/TestObj.idl: No changes in run-bindings-tests results.

2012-02-02  Anders Carlsson  <andersca@apple.com>

        NPAPI will not send mouse up events when mouse is outside plugin area
        https://bugs.webkit.org/show_bug.cgi?id=77657
        <rdar://problem/10160674>

        Reviewed by Andreas Kling.

        Export EventHandler::setCapturingMouseEventsNode.

        * WebCore.exp.in:

2012-02-02  Antti Koivisto  <antti@apple.com>

        Move remaining implementation from CSSStyleDeclaration to subclasses 
        https://bugs.webkit.org/show_bug.cgi?id=77621

        Reviewed by Andreas Kling.

        This leaves CSSStyleDeclaration a near-pure CSSOM interface.

        * bindings/js/JSCSSStyleDeclarationCustom.cpp:
        (WebCore::isCSSPropertyName):
        (WebCore::JSCSSStyleDeclaration::putDelegate):
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::parentRule):
        (WebCore):
        * css/CSSComputedStyleDeclaration.h:
        (CSSComputedStyleDeclaration):
        * css/CSSMutableStyleDeclaration.cpp:
        (WebCore::CSSMutableStyleDeclaration::CSSMutableStyleDeclaration):
        (WebCore::CSSMutableStyleDeclaration::contextStyleSheet):
        (WebCore):
        (WebCore::CSSMutableStyleDeclaration::parentRule):
        * css/CSSMutableStyleDeclaration.h:
        (WebCore::CSSMutableStyleDeclaration::isInlineStyleDeclaration):
        (WebCore::CSSMutableStyleDeclaration::parentRuleInternal):
        (WebCore::CSSMutableStyleDeclaration::clearParentRule):
        (CSSMutableStyleDeclaration):
        (WebCore::CSSMutableStyleDeclaration::parentElement):
        (WebCore::CSSMutableStyleDeclaration::clearParentElement):
        (WebCore::CSSMutableStyleDeclaration::parentStyleSheet):
        * css/CSSParser.cpp:
        (WebCore::parseColorValue):
        (WebCore::parseSimpleLengthValue):
        (WebCore::CSSParser::parseValue):
        (WebCore::CSSParser::parseDeclaration):
        * css/CSSStyleDeclaration.cpp:
        (WebCore):
        * css/CSSStyleDeclaration.h:
        (CSSStyleDeclaration):
        (WebCore::CSSStyleDeclaration::parentStyleSheet):
        (WebCore::CSSStyleDeclaration::CSSStyleDeclaration):
        * css/CSSStyleRule.cpp:
        (WebCore::CSSStyleRule::setSelectorText):
                            
            Eliminate unnecessary call to CSSMutableStyleDeclaration::parentStyleSheet()

        * css/CSSStyleRule.h:
        (WebCore::CSSStyleRule::setDeclaration):
        * css/CSSStyleSelector.cpp:
        (WebCore::isInsideRegionRule):
        (WebCore::CSSStyleSelector::applyDeclaration):
        * css/WebKitCSSKeyframeRule.cpp:
        (WebCore::WebKitCSSKeyframeRule::setDeclaration):
        * page/PageSerializer.cpp:
        (WebCore::PageSerializer::serializeFrame):
        (WebCore::PageSerializer::serializeCSSStyleSheet):
        (WebCore::PageSerializer::retrieveResourcesForCSSRule):
        (WebCore::PageSerializer::retrieveResourcesForCSSDeclaration):
        * page/PageSerializer.h:
        
            Eliminate unnecessary call to CSSMutableStyleDeclaration::parentStyleSheet()
        
        (WebCore):
        (PageSerializer):

2012-02-02  Chris Marrin  <cmarrin@apple.com>

        Turn on CSS Filters on Windows
        https://bugs.webkit.org/show_bug.cgi?id=76667

        Turning on CSS_FILTERS flag for Windows and fixed a couple of resultant build errors

        Reviewed by Adele Peterson.

        * WebCore.vcproj/copyForwardingHeaders.cmd:
        * platform/graphics/ca/win/PlatformCALayerWin.cpp:
        (PlatformCALayer::setFilters):
        (PlatformCALayer::filtersCanBeComposited):

2012-02-02  Anders Carlsson  <andersca@apple.com>

        Move ScrollingThread to its own file
        https://bugs.webkit.org/show_bug.cgi?id=77652

        Reviewed by Sam Weinig.

        This just shuffles some classes around and makes ScrollingCoordinator call into ScrollingThread.
        Hopefully we'll be able to make ScrollingThread use the new WebCore::RunLoop class eventually.

        * WebCore.xcodeproj/project.pbxproj:
        * page/scrolling/ScrollingCoordinator.cpp:
        (WebCore::ScrollingCoordinator::handleWheelEvent):
        * page/scrolling/ScrollingCoordinator.h:
        (ScrollingCoordinator):
        * page/scrolling/ScrollingThread.cpp: Added.
        (WebCore):
        (WebCore::ScrollingThread::ScrollingThread):
        (WebCore::ScrollingThread::isCurrentThread):
        (WebCore::ScrollingThread::dispatch):
        (WebCore::ScrollingThread::shared):
        (WebCore::ScrollingThread::createThreadIfNeeded):
        (WebCore::ScrollingThread::threadCallback):
        (WebCore::ScrollingThread::threadBody):
        (WebCore::ScrollingThread::dispatchFunctionsFromScrollingThread):
        * page/scrolling/ScrollingThread.h: Added.
        (WebCore):
        (ScrollingThread):
        * page/scrolling/mac/ScrollingCoordinatorMac.mm:
        (WebCore::ScrollingCoordinator::scrollByOnScrollingThread):
        (WebCore::ScrollingCoordinator::updateMainFrameScrollLayerPositionOnScrollingThread):
        * page/scrolling/mac/ScrollingThreadMac.mm: Added.
        (WebCore):
        (WebCore::ScrollingThread::initializeRunLoop):
        (WebCore::ScrollingThread::wakeUpRunLoop):
        (WebCore::ScrollingThread::threadRunLoopSourceCallback):

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

        Unreviewed, rolling out r106551.
        http://trac.webkit.org/changeset/106551
        https://bugs.webkit.org/show_bug.cgi?id=77648

        Breaking mac and gtk tests due to font differences. (Requested
        by _pdr_ on #webkit).

        * platform/graphics/SVGGlyph.cpp:
        (WebCore::charactersWithArabicForm):
        * svg/SVGFontData.cpp:
        (WebCore::SVGFontData::applySVGGlyphSelection):
        * svg/SVGFontData.h:
        (SVGFontData):

2012-02-02  Alexander Pavlov  <apavlov@chromium.org>

        Web Inspector: [REGRESSION] Slow continuous DOM traversal with Up/Down keys
        https://bugs.webkit.org/show_bug.cgi?id=77643

        Reviewed by Pavel Feldman.

        Test: inspector/styles/updates-during-dom-traversal.html

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

2012-02-02  Claudio Saavedra  <csaavedra@igalia.com> and Martin Robinson  <mrobinson@igalia.com>

        [GTK] WebKitWebView won't work in a GtkOffscreenWindow
        https://bugs.webkit.org/show_bug.cgi?id=76911

        Reviewed by Philippe Normand.

        * platform/gtk/GtkUtilities.cpp:
        (WebCore::widgetIsOnscreenToplevelWindow): Added this helper.
        * platform/gtk/GtkUtilities.h:
        (WebCore): Added helper declaration.

2012-02-02  Allan Sandfeld Jensen  <allan.jensen@nokia.com>

        Update active and hover state on touch release.
        https://bugs.webkit.org/show_bug.cgi?id=77620

        Reviewed by Kenneth Rohde Christiansen.

        * rendering/HitTestRequest.h:
        (WebCore::HitTestRequest::move):
        (WebCore::HitTestRequest::release):
        (WebCore::HitTestRequest::touchEvent):
        (WebCore::HitTestRequest::mouseEvent):
        (WebCore::HitTestRequest::touchMove):
        (WebCore::HitTestRequest::touchRelease):
            Rename the enum values in HitTestRequest to be mouse/touch
            agnostic, and add value for recognizing touch events.
        * rendering/RenderFrameSet.cpp:
        (WebCore::RenderFrameSet::nodeAtPoint): Update for HitTestRequest rename.
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::hitTest): ditto
        (WebCore::RenderLayer::updateHoverActiveState): Reset hoverstate on touch release.
        * page/EventHandler.cpp:
        (WebCore::EventHandler::updateSelectionForMouseDrag): Update for HitTestRequest rename.
        (WebCore::EventHandler::handleMouseMoveEvent): ditto
        (WebCore::EventHandler::handleMouseReleaseEvent): ditto
        (WebCore::EventHandler::hoverTimerFired): ditto
        (WebCore::EventHandler::dragSourceEndedAt): ditto
        (WebCore::EventHandler::handleTouchEvent): Hittest touch release to reset
            active and hover states and add touch enum to all touch hittests.

2012-02-02  Pavel Feldman  <pfeldman@google.com>

        Web Inspector: enable editing of selected rows on single click in elements panel.
        https://bugs.webkit.org/show_bug.cgi?id=77627

        Reviewed by Vsevolod Vlasov.

        * inspector/front-end/ElementsTreeOutline.js:
        (WebInspector.ElementsTreeElement.prototype.onattach):
        (WebInspector.ElementsTreeElement.prototype.onselect):
        (WebInspector.ElementsTreeElement.prototype._mouseDown):
        * inspector/front-end/treeoutline.js:
        (TreeElement.prototype.selectOnMouseDown):
        (TreeElement.prototype.select):

2012-02-02  Philip Rogers  <pdr@google.com>

        Fix mirroring with SVG fonts
        https://bugs.webkit.org/show_bug.cgi?id=77067

        Reviewed by Nikolas Zimmermann.

        SVG fonts were incorrectly handling mirrored characters in bidi text.
        In this change I added the function createStringWithMirroredCharacters
        which handles mirroring the characters when selecting glyphs for SVG
        fonts. I also made a small cosmetic change in the function
        charactersWithArabicForm, changing the bool parameter "mirror" to "rtl"
        which better reflects what it actually does.

        Several new tests were added to test mirroring with SVG fonts in the
        presence of Arabic forms and non-BMP characters.

        Tests: svg/custom/glyph-selection-arabic-forms.svg
               svg/custom/glyph-selection-bidi-mirror.svg
               svg/custom/glyph-selection-non-bmp.svg

        * platform/graphics/SVGGlyph.cpp:
        (WebCore::charactersWithArabicForm):
        * svg/SVGFontData.cpp:
        (WebCore::SVGFontData::applySVGGlyphSelection):
        (WebCore::SVGFontData::createStringWithMirroredCharacters):
        * svg/SVGFontData.h:
        (SVGFontData):

2012-02-02  Pavel Feldman  <pfeldman@google.com>

        Web Inspector: add experiment for single click styles editing.
        https://bugs.webkit.org/show_bug.cgi?id=77624

        Reviewed by Vsevolod Vlasov.

        * inspector/front-end/Settings.js:
        (WebInspector.ExperimentsSettings):
        * inspector/front-end/StylesSidebarPane.js:
        (WebInspector.StylePropertiesSection):
        (WebInspector.StylePropertyTreeElement.prototype.onattach):
        (WebInspector.StylePropertyTreeElement.prototype._mouseDown):
        (WebInspector.StylePropertyTreeElement.prototype._resetMouseDownElement):
        (WebInspector.StylePropertyTreeElement.prototype):
        (WebInspector.StylePropertyTreeElement.prototype.selectElement.context):

2012-02-02  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Make the tap highlighting work for all test cases
        https://bugs.webkit.org/show_bug.cgi?id=77626

        Reviewed by Simon Hausmann.

        Clean up of the current code to make it more generic. Now uses
        addFocusRingRects for finding the areas to highlight.

        Tested by current manual tests.

        * page/GestureTapHighlighter.cpp:
        (WebCore::GestureTapHighlighter::pathForNodeHighlight):

2012-02-02  Mario Sanchez Prada  <msanchez@igalia.com>

        [Gtk] atk_text_get_text_at_offset() sometimes fails to provide the correct line
        https://bugs.webkit.org/show_bug.cgi?id=72382

        Reviewed by Martin Robinson.

        Do not add unnecesary blanks at the end of a line of text.

        * accessibility/gtk/WebKitAccessibleInterfaceText.cpp:
        (textForRenderer): Do not just append a '\n' at the end of a line
        if the linebreak for that line was already considered.

2012-02-02  Raul Hudea  <rhudea@adobe.com>

        Regions should ignore the saved currentRenderFlowThread during repainting
        because if there are imbricated flow threads, it might end using the wrong one.

        [CSSRegions] Assert failure in RenderView::computeRectForRepaint
        https://bugs.webkit.org/show_bug.cgi?id=77430

        Reviewed by David Hyatt.

        Test: fast/regions/imbricated-flow-threads-crash.html

        * rendering/RenderFlowThread.cpp:
        (CurrentRenderFlowThreadDisabler):
        (WebCore::CurrentRenderFlowThreadDisabler::CurrentRenderFlowThreadDisabler):
        (WebCore::CurrentRenderFlowThreadDisabler::~CurrentRenderFlowThreadDisabler):
        (WebCore):
        (WebCore::RenderFlowThread::repaintRectangleInRegions):

2012-02-02  Kinuko Yasuda  <kinuko@chromium.org>

        Cleanup: Move chrome-specific filesystem type handling code (for FileSystem API) under chromium directory (re-landing r105395)
        https://bugs.webkit.org/show_bug.cgi?id=76551

        Reviewed by David Levin.

        Moved the implementation of crackFileSystemURL() and toURL() from
        WebCore/fileapi/DOMFileSystemBase into WebCore/platform/AsyncFileSystem
        so that each platform can extend/implement their behavior if necessary.

        No new tests as it has no functional changes.

        * fileapi/DOMFileSystemBase.cpp: Moved crackFileSystemURL() to AsyncFileSystem.
        * fileapi/DOMFileSystemBase.h:
        (DOMFileSystemBase):
        * fileapi/EntryBase.cpp: Moved toURL() to AsyncFileSystem.
        (WebCore::EntryBase::toURL):
        * page/DOMWindow.cpp: Made corresponding callsite changes.
        (WebCore::DOMWindow::webkitRequestFileSystem):
        (WebCore::DOMWindow::webkitResolveLocalFileSystemURL):
        * page/DOMWindow.h:
        * platform/AsyncFileSystem.cpp:
        (WebCore::AsyncFileSystem::isValidType): Added.
        * platform/AsyncFileSystem.h:
        (AsyncFileSystem):
        * workers/WorkerContext.cpp: Made corresponding callsite changes.
        (WebCore::WorkerContext::webkitRequestFileSystem):
        (WebCore::WorkerContext::webkitRequestFileSystemSync):
        (WebCore::WorkerContext::webkitResolveLocalFileSystemURL):
        (WebCore::WorkerContext::webkitResolveLocalFileSystemSyncURL):
        * workers/WorkerContext.h:

2012-02-02  Yury Semikhatsky  <yurys@chromium.org>

        Web Inspector: pause on uncaugh exceptions state is not properly restored
        https://bugs.webkit.org/show_bug.cgi?id=77558

        'Pause on exceptions' state is now stored in InspectorState object so that it is
        properly restored on inspected process change.

        Reviewed by Vsevolod Vlasov.

        * inspector/InspectorDebuggerAgent.cpp:
        (DebuggerAgentState):
        (WebCore::InspectorDebuggerAgent::InspectorDebuggerAgent):
        (WebCore::InspectorDebuggerAgent::disable):
        (WebCore::InspectorDebuggerAgent::restore):
        (WebCore::InspectorDebuggerAgent::setPauseOnExceptions):
        (WebCore):
        (WebCore::InspectorDebuggerAgent::setPauseOnExceptionsImpl):
        * inspector/InspectorDebuggerAgent.h:
        (InspectorDebuggerAgent):

2012-02-02  Kentaro Hara  <haraken@chromium.org>

        The third argument of addEventListener/removeEventListener of PeerConnection should be optional
        https://bugs.webkit.org/show_bug.cgi?id=77606

        Reviewed by Adam Barth.

        This patch corrects a typo in PeerConnection.idl, i.e. [optional] => [Optional].

        Test: fast/mediastream/peerconnection-eventlistener-optional-argument.html

        * mediastream/PeerConnection.idl:

2012-02-02  Rakesh KN  <rakesh.kn@motorola.com>

        hidden attribute on <input type=file /> suppresses the file selection dialog
        https://bugs.webkit.org/show_bug.cgi?id=58208

        Reviewed by Ryosuke Niwa.

        We want to allow opening file dialog on hidden element when click() is called
        on the element. The behaviour is similar to Firefox and IE.

        Added manual test as the file dialog opens only on user gesture.

        * html/FileInputType.cpp:
        (WebCore::FileInputType::handleDOMActivateEvent):
        Removed renderer check as input can be hidden.

2012-02-01  Philippe Normand  <pnormand@igalia.com>

        [GStreamer] FFTFrame implementation
        https://bugs.webkit.org/show_bug.cgi?id=73545

        Reviewed by Chris Rogers.

        FFTFrame implementation based on GStreamer's FFT processing
        library.

        No new tests, existing WebAudio tests cover this.

        * GNUmakefile.am:
        * GNUmakefile.list.am:
        * platform/audio/FFTFrame.h:
        * platform/audio/FFTFrameStub.cpp:
        * platform/audio/gstreamer/FFTFrameGStreamer.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):

2012-02-02  Kentaro Hara  <haraken@chromium.org>

        Rename [CheckFrameSecurity] and [SVGCheckSecurity] to [CheckAccessToNode]
        https://bugs.webkit.org/show_bug.cgi?id=77601

        Reviewed by Adam Barth.

        [CheckFrameSecurity] and [SVGCheckSecurity] have the same meaning; i.e. generate code
        to check allowAccessToNode() for a given attribute or method. This patch renames them
        to [CheckAccessToNode].

        No tests. No changes in behavior.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateImplementation):
        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateNormalAttrGetter):
        (GenerateFunctionCallback):
        * html/HTMLEmbedElement.idl:
        * html/HTMLFrameElement.idl:
        * html/HTMLIFrameElement.idl:
        * html/HTMLObjectElement.idl:

        * bindings/scripts/test/TestObj.idl:
        * bindings/scripts/test/V8/V8TestObj.cpp: Updated the test results.
        (WebCore):

2012-02-01  Kentaro Hara  <haraken@chromium.org>

        Rename [V8DisallowShadowing] to [V8Unforgeable]
        https://bugs.webkit.org/show_bug.cgi?id=77599

        Reviewed by Adam Barth.

        This patch renames [V8DisallowShadowing] to [V8Unforgeable], following the Web IDL
        spec (http://dev.w3.org/2006/webapi/WebIDL/#Unforgeable).

        No tests. No change in behavior.

        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateNormalAttrGetter):
        (GenerateSingleBatchedAttribute):
        (GenerateImplementation):
        * page/DOMWindow.idl:
        * page/Location.idl:

2012-02-01  Kentaro Hara  <haraken@chromium.org>

        Rename [ConvertNullToNullString] to [TreatNullAs=EmptyString]
        https://bugs.webkit.org/show_bug.cgi?id=77602

        Reviewed by Adam Barth.

        This patch renames [ConvertNullToNullString] to [TreatNullAs=EmptyString],
        according to the spec (http://dev.w3.org/2006/webapi/WebIDL/#TreatNullAs).

        No tests. No changes in behavior.

        * bindings/scripts/CodeGeneratorJS.pm:
        (JSValueToNative):
        * bindings/scripts/CodeGeneratorV8.pm:
        (GetNativeTypeFromSignature):

        * css/CSSCharsetRule.idl:
        * css/CSSPageRule.idl:
        * css/CSSRule.idl:
        * css/CSSStyleDeclaration.idl:
        * css/CSSStyleRule.idl:
        * css/CSSValue.idl:
        * css/MediaList.idl:
        * css/WebKitCSSKeyframesRule.idl:
        * dom/Attr.idl:
        * dom/CharacterData.idl:
        * dom/DOMImplementation.idl:
        * dom/Document.idl:
        * dom/Element.idl:
        * dom/NamedNodeMap.idl:
        * dom/Node.idl:
        * dom/ProcessingInstruction.idl:
        * dom/ShadowRoot.idl:
        * html/HTMLAnchorElement.idl:
        * html/HTMLButtonElement.idl:
        * html/HTMLDocument.idl:
        * html/HTMLElement.idl:
        * html/HTMLFormElement.idl:
        * html/HTMLFrameElement.idl:
        * html/HTMLInputElement.idl:
        * html/HTMLMediaElement.idl:
        * html/HTMLOutputElement.idl:
        * html/HTMLScriptElement.idl:
        * html/HTMLSelectElement.idl:
        * html/HTMLTextAreaElement.idl:
        * html/HTMLTitleElement.idl:
        * html/canvas/CanvasRenderingContext2D.idl:
        * page/DOMWindow.idl:
        * storage/StorageEvent.idl:
        * svg/SVGAngle.idl:
        * svg/SVGElement.idl:
        * svg/SVGLength.idl:
        * svg/SVGScriptElement.idl:

        * bindings/scripts/test/TestObj.idl: No change in the run-bindings-tests results.

2012-02-01  Kentaro Hara  <haraken@chromium.org>

        Remove [GenerateConstructor] from IDL files
        https://bugs.webkit.org/show_bug.cgi?id=77598

        Reviewed by Adam Barth.

        [GenerateConstructor] is used in some IDL files but it is not implemented
        in code generators. I could not find any history about [GenerateConstructor]
        in code generators. This patch removes them from IDL files.

        Maybe we want to replace [GenerateConstructor] with [Constructor] eventually,
        but currently no tests are written for their constructors (e.g. "new DOMTokenList()").
        So simply removing them would make sense.

        No new tests. No change in behavior.

        * dom/DOMStringList.idl:
        * html/DOMSettableTokenList.idl:
        * html/DOMTokenList.idl:
        * svg/SVGFEConvolveMatrixElement.idl:
        * webaudio/AudioPannerNode.idl:

2012-02-01  Eric Carlson  <eric.carlson@apple.com>

        Consider user's preferred language when choosing text tracks
        https://bugs.webkit.org/show_bug.cgi?id=74121

        Reviewed by Alexey Proskuryakov.

        Tests: media/track/track-language-preference.html
               media/track/track-prefer-captions.html

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::loadTimerFired): configureTextTracks -> configureNewTextTracks.
        (WebCore::HTMLMediaElement::textTracksAreReady): Add more comments.
        (WebCore::HTMLMediaElement::textTrackModeChanged): Ditto.
        (WebCore::HTMLMediaElement::showingTrackWithSameKind): Minor restructuring.
        (WebCore::HTMLMediaElement::userIsInterestedInThisTrackKind): Renamed from userIsInterestedInThisTrack,
            don't consider user's language preference.
        (WebCore::HTMLMediaElement::configureTextTrackGroup): New, configure all tracks in a group, 
            considering user's kind and language preferences.
        (WebCore::HTMLMediaElement::configureNewTextTracks): New, configure all newly added tracks.
        * html/HTMLMediaElement.h:
        (WebCore::HTMLMediaElement::TrackGroup::TrackGroup):
        (TrackGroup):

        * platform/Language.cpp:
        (WebCore::canonicalLanguageIdentifier): New, create a canonicalized version of a language string.
        (WebCore::bestMatchingLanguage): New, return the language from the list that best matches the 
            specified language.
        (WebCore::preferredLanguageFromList): New, return the language in the specified list that best
            matches the user's language preference.
        * platform/Language.h:

        * testing/Internals.cpp:
        (WebCore::Internals::setShouldDisplayTrackType): New, allow DRT to set the track type preference.
        (WebCore::Internals::shouldDisplayTrackType): New, allow DRT to read the track type preference.
        * testing/Internals.h:
        * testing/Internals.idl:

2012-02-01  Hayato Ito  <hayato@chromium.org>

        Change class hierarycy so that ShadowRoot can inherit DocumentFragment.
        https://bugs.webkit.org/show_bug.cgi?id=76693

        Reviewed by Darin Adler.

        Make ShadowRoot inherit DocumentFragment so that it matches the class hierarchy of IDL in the spec.
        TreeScope becomes a separated class, which is now inherited by Document and ShadowRoot using multiple-inheritance.
        This patch is pre-requirement for coming IDL change.

        No tests. No change in behavior.

        * dom/Document.cpp:
        (WebCore::Document::Document):
        (WebCore::Document::~Document):
        (WebCore::Document::buildAccessKeyMap):
        (WebCore::Document::childrenChanged):
        (WebCore::Document::attach):
        (WebCore::Document::detach):
        * dom/Document.h:
        (Document):
        * dom/DocumentFragment.cpp:
        (WebCore::DocumentFragment::DocumentFragment):
        * dom/DocumentFragment.h:
        (DocumentFragment):
        * dom/DocumentOrderedMap.cpp:
        (WebCore::DocumentOrderedMap::get):
        * dom/ShadowRoot.cpp:
        (WebCore::ShadowRoot::ShadowRoot):
        (WebCore::ShadowRoot::~ShadowRoot):
        (WebCore::ShadowRoot::attach):
        * dom/ShadowRoot.h:
        * dom/TreeScope.cpp:
        (WebCore::TreeScope::TreeScope):
        (WebCore::TreeScope::~TreeScope):
        (WebCore::TreeScope::setParentTreeScope):
        (WebCore::TreeScope::getImageMap):
        (WebCore::TreeScope::findAnchor):
        * dom/TreeScope.h:
        (WebCore):
        (WebCore::TreeScope::rootNode):
        (TreeScope):
        * dom/TreeScopeAdopter.cpp:
        (WebCore::TreeScopeAdopter::moveTreeToNewScope):
        * page/DragController.cpp:
        (WebCore::asFileInput):
        * page/FocusController.cpp:
        (WebCore::ownerOfTreeScope):
        (WebCore::FocusController::nextFocusableNode):
        (WebCore::FocusController::previousFocusableNode):

2012-02-01  Benjamin Poulain  <bpoulain@apple.com>

        WorkerScriptController::evaluate() should not return anything
        https://bugs.webkit.org/show_bug.cgi?id=77587

        Reviewed by Adam Barth.

        Remove the return value from WorkerScriptController as it is
        (and should be) unused.

        * bindings/js/WorkerScriptController.cpp:
        (WebCore::WorkerScriptController::evaluate):
        * bindings/js/WorkerScriptController.h:
        (WorkerScriptController):
        * bindings/v8/WorkerScriptController.cpp:
        (WebCore::WorkerScriptController::evaluate):
        * bindings/v8/WorkerScriptController.h:
        (WorkerScriptController):

2012-02-01  Kentaro Hara  <haraken@chromium.org>

        Remove [DelegatingPrototypeGetOwnPropertySlot], [HasCustomIndexGetter],
        [HasIndexSetter], [JSConstructorTemplate] and [NonEmpty] from code generators
        https://bugs.webkit.org/show_bug.cgi?id=77585

        Reviewed by Adam Barth.

        This patch removes [DelegatingPrototypeGetOwnPropertySlot], [HasCustomIndexGetter],
        [HasIndexSetter], [JSConstructorTemplate] and [NonEmpty] from code generators,
        since they are not used by no IDL files.

        No tests. No change in behavior.

        * bindings/scripts/CodeGenerator.pm:
        (GetterExpression):
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateGetOwnPropertySlotBody):
        (GenerateGetOwnPropertyDescriptorBody):
        (GenerateHeader):
        (GenerateImplementation):
        (IsConstructable):
        (IsConstructorTemplate):

        * bindings/scripts/test/TestObj.idl:
        * bindings/scripts/test/CPP/WebDOMTestObj.cpp: Updated the run-bindings-tests results.
        * bindings/scripts/test/CPP/WebDOMTestObj.h: Ditto.
        * bindings/scripts/test/GObject/WebKitDOMTestObj.cpp: Ditto.
        (webkit_dom_test_obj_set_property):
        (webkit_dom_test_obj_get_property):
        (webkit_dom_test_obj_class_init):
        * bindings/scripts/test/GObject/WebKitDOMTestObj.h: Ditto.
        * bindings/scripts/test/JS/JSTestObj.cpp: Ditto.
        (WebCore):
        * bindings/scripts/test/JS/JSTestObj.h: Ditto.
        (WebCore):
        * bindings/scripts/test/ObjC/DOMTestObj.h: Ditto.
        * bindings/scripts/test/ObjC/DOMTestObj.mm: Ditto.
        * bindings/scripts/test/V8/V8TestObj.cpp: Ditto.
        (WebCore):

2012-02-01  Shinya Kawanaka  <shinyak@google.com>

        Select attribute of HTMLContentElement should be able be changed dynamically.
        https://bugs.webkit.org/show_bug.cgi?id=76261

        Reviewed by Hajime Morita.

        When select attribute is changed, the flag to recalc style is set.

        Test: fast/dom/shadow/content-element-select-dynamic.html

        * html/shadow/HTMLContentElement.cpp:
        (WebCore::HTMLContentElement::parseMappedAttribute):
          Sets recalc style when select is changed.
        * html/shadow/HTMLContentElement.h:
        (HTMLContentElement):

2012-02-01  Kentaro Hara  <haraken@chromium.org>

        Remove [ImplementationUUID] and [InterfaceUUID] from html/canvas/*.idl
        https://bugs.webkit.org/show_bug.cgi?id=77589

        Reviewed by Adam Barth.

        [ImplementationUUID] and [InterfaceUUID] are used in html/canvas/*.idl,
        but they are not implemented in code generators and thus have no meaning.
        This patch removes them.

        No tests. No change in behavior.

        * html/canvas/CanvasGradient.idl:
        * html/canvas/CanvasPattern.idl: The file is now empty though.
        * html/canvas/CanvasRenderingContext.idl:
        * html/canvas/CanvasRenderingContext2D.idl:
        * html/canvas/WebGLRenderingContext.idl:

2012-02-01  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r106408.
        http://trac.webkit.org/changeset/106408
        https://bugs.webkit.org/show_bug.cgi?id=77592

        crashes in chromium mac release tests (Requested by japhet on
        #webkit).

        * platform/graphics/Region.cpp:
        * platform/graphics/Region.h:
        (Region):
        (Shape):

2012-02-01  No'am Rosenthal  <noam.rosenthal@nokia.com>

        [Texmap] Use glScissors for clipping in TextureMapperGL when possible
        https://bugs.webkit.org/show_bug.cgi?id=77575

        Reviewed by Martin Robinson.

        Maintain a clipping stack, that helps us use stencils in conjunction with scissors.
        We apply scissors when the clip region is rectalinear, and stencil when it's not.

        No behavior changes so no new tests.

        * platform/graphics/opengl/TextureMapperGL.cpp:
        (SharedGLData):
        (WebCore::TextureMapperGLData::SharedGLData::SharedGLData):
        (WebCore::TextureMapperGL::drawTexture):
        (WebCore::TextureMapperGL::bindSurface):
        (WebCore):
        (WebCore::scissorClip):
        (WebCore::TextureMapperGL::beginScissorClip):
        (WebCore::TextureMapperGL::endScissorClip):
        (WebCore::TextureMapperGL::beginClip):
        (WebCore::TextureMapperGL::endClip):
        * platform/graphics/opengl/TextureMapperGL.h:
        (TextureMapperGL):

2012-02-01  Anders Carlsson  <andersca@apple.com>

        Move the scrolling coordinator to page/scrolling
        https://bugs.webkit.org/show_bug.cgi?id=77590

        Reviewed by Dan Bernstein.

        Put scrolling related files in page/scrolling to avoid cluttering the page directory.

        * WebCore.xcodeproj/project.pbxproj:
        * page/scrolling/ScrollingCoordinator.cpp: Renamed from Source/WebCore/page/ScrollingCoordinator.cpp.
        * page/scrolling/ScrollingCoordinator.h: Renamed from Source/WebCore/page/ScrollingCoordinator.h.
        * page/scrolling/mac/ScrollingCoordinatorMac.mm: Renamed from Source/WebCore/page/mac/ScrollingCoordinatorMac.mm.

2012-02-01  Kentaro Hara  <haraken@chromium.org>

        Remove [ObjCPrefix], [V8ConstructorTemplate], [allowAccessToNode],
        [v8implname] and [v8referenceattr] from code generators
        https://bugs.webkit.org/show_bug.cgi?id=77588

        Reviewed by Adam Barth.

        This patch removes [ObjCPrefix], [V8ConstructorTemplate], [allowAccessToNode],
        [v8implname] and [v8referenceattr] from code generators, since they are not used
        by any IDL files.

        No tests. No changes in behavior.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateImplementation):
        * bindings/scripts/CodeGeneratorObjC.pm:
        (GenerateHeader):
        (GenerateImplementation):
        * bindings/scripts/CodeGeneratorV8.pm:
        (IsConstructable):
        (IsConstructorTemplate):
        (GenerateNormalAttrGetter):
        (GenerateFunctionCallString):

2012-02-01  Pablo Flouret  <pablof@motorola.com>

        Support targetOrigin = "/" in postMessage for sending messages to same origin as source document.
        https://bugs.webkit.org/show_bug.cgi?id=77580

        Reviewed by Adam Barth.

        No new tests. Modified http/tests/security/postMessage/target-origin.html
        to test this case as well.

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

2012-02-01  Caio Marcelo de Oliveira Filho  <caio.oliveira@openbossa.org>

        Avoid creating NamedNodeMap unnecessarily
        https://bugs.webkit.org/show_bug.cgi?id=77574

        Reviewed by Ryosuke Niwa.

        The method Element::attributes() was being used for multiple things in our
        codebase: (1) as the getter for NamedNodeMap exposed to DOM, (2) as a way to other WebCore
        code get the "attribute storage" (currently inside NamedNodeMap), and (3) as a way to
        get the attribute storage creating one if necessary.

        This commit separate the jobs in different functions:

        1) attributes() keeps being the DOM getter, and loses its boolean parameter.

        2) updatedAttributes() updates the invalid attributes and returns the attribute
        storage. If we don't have one, return 0.

        3) ensureUpdatedAttributes() updates the invalid attributes and forces the
        creation of attribute storage to return.

        There is also another way to get to the attribute storage currently, via
        attributeMap(), which doesn't update the attributes for possible changes in Style
        or SVG attributes.

        Note that the new functions are not available in Node class, so C++ code manipulating
        attributes should cast to Element.

        This separation also made easier to spot and fix some places where we do not
        need to create the attribute storage if it doesn't exist.

        No new tests, this commit shouldn't change the behavior of existing code.

        * css/SelectorChecker.cpp:
        (WebCore::SelectorChecker::checkOneSelector):
        * dom/DatasetDOMStringMap.cpp:
        (WebCore::DatasetDOMStringMap::getNames):
        (WebCore::DatasetDOMStringMap::item):
        (WebCore::DatasetDOMStringMap::contains):
        * dom/Document.cpp:
        (WebCore::Document::importNode):
        * dom/Element.cpp:
        (WebCore::Element::setAttribute):
        (WebCore::Element::hasAttributes):
        (WebCore::Element::setAttributeNode):
        (WebCore::Element::setAttributeNodeNS):
        (WebCore::Element::removeAttributeNode):
        (WebCore::Element::getAttributeNode):
        (WebCore::Element::getAttributeNodeNS):
        (WebCore::Element::hasAttribute):
        (WebCore::Element::hasAttributeNS):
        (WebCore::Element::normalizeAttributes):
        * dom/Element.h:
        (Element):
        (WebCore::Element::attributes):
        (WebCore::Element::ensureAttributeData):
        (WebCore::Element::ensureUpdatedAttributes):
        (WebCore::Element::updatedAttributes):
        (WebCore::Element::setAttributesFromElement):
        (WebCore::Element::ensureAttributeMap): Made const to be reused by ensureUpdatedAttributes().
        (WebCore::Element::updateInvalidAttributes):
        (WebCore):
        * dom/NamedNodeMap.cpp:
        (WebCore::NamedNodeMap::mapsEquivalent): Having no attributes is equivalent to
        not having an attribute storage because the attribute storage is lazily created.
        * dom/Node.cpp:
        (WebCore::Node::isEqualNode): Do not force the creation of attribute storage to
        compare two nodes.
        (WebCore::Node::isDefaultNamespace): Use updatedAttributes(). Since we iterate
        using length, it's OK if the attribute storage is empty.
        (WebCore::Node::lookupNamespaceURI): Ditto.
        (WebCore::Node::lookupNamespacePrefix): Ditto.
        (WebCore::Node::compareDocumentPosition): Ditto.
        * editing/ApplyStyleCommand.cpp:
        (WebCore::hasNoAttributeOrOnlyStyleAttribute):
        (WebCore::isEmptyFontTag):
        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::isRemovableBlock): Use isElementNode() explicitly
        to identify non-Element nodes, then use hasAttributes() if is Element.
        * editing/InsertParagraphSeparatorCommand.cpp:
        (WebCore::highestVisuallyEquivalentDivBelowRoot):
        * editing/MarkupAccumulator.cpp:
        (WebCore::MarkupAccumulator::appendElement): Do not create the attribute storage
        unnecessarily.
        * editing/htmlediting.cpp:
        (WebCore::areIdenticalElements): Do not create the attribute storage
        unnecessarily. Use mapsEquivalent() for comparing the attributes.
        * editing/markup.cpp:
        (WebCore::completeURLs): Do not create the attribute storage unnecessarily.
        (WebCore::StyledMarkupAccumulator::appendElement): Ditto.
        (WebCore::isPlainTextMarkup): hasAttributes() will avoid creating the attribute
        storage unnecessarily.
        * html/HTMLEmbedElement.cpp:
        (WebCore::HTMLEmbedElement::parametersForPlugin):
        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::parametersForPlugin):
        * html/HTMLParamElement.cpp:
        (WebCore::HTMLParamElement::isURLAttribute): Do not create the attribute storage
        unnecessarily.
        * html/parser/HTMLConstructionSite.cpp:
        (WebCore::HTMLConstructionSite::mergeAttributesFromTokenIntoElement): Use
        ensureUpdatedAttributes() since we will add new attributes.
        (WebCore):
        * inspector/InspectorCSSAgent.cpp:
        (WebCore::InspectorCSSAgent::buildArrayForAttributeStyles):
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::setAttributesAsText):
        (WebCore::InspectorDOMAgent::performSearch):
        (WebCore::InspectorDOMAgent::buildArrayForElementAttributes):
        * page/PageSerializer.cpp:
        (WebCore::isCharsetSpecifyingNode): Do not assume attributeMap will exist.
        * svg/properties/SVGAnimatedPropertySynchronizer.h: Use ensureUpdatedAttributes()
        since we will add new attributes.
        * xml/XPathFunctions.cpp:
        (WebCore::XPath::FunLang::evaluate): Do not create the attribute storage
        unnecessarily.
        * xml/XPathNodeSet.cpp:
        (WebCore::XPath::NodeSet::traversalSort):
        * xml/XPathStep.cpp:
        (WebCore::XPath::Step::nodesInAxis): Use isElementNode() instead of comparing
        nodeType() manually. Do not create the attribute storage unnecessarily.
        * xml/parser/XMLDocumentParserLibxml2.cpp:
        (WebCore::XMLDocumentParser::XMLDocumentParser): Do not create the attribute
        storage unnecessarily.
        * xml/parser/XMLDocumentParserQt.cpp:
        (WebCore::XMLDocumentParser::XMLDocumentParser): Ditto.
        * xml/parser/XMLTreeBuilder.cpp:
        (WebCore::XMLTreeBuilder::XMLTreeBuilder): Ditto.

2012-02-01  Adam Barth  <abarth@webkit.org>

        contentDispositionType misparses the Content-Disposition header in some obscure corner cases
        https://bugs.webkit.org/show_bug.cgi?id=77577

        Reviewed by Eric Seidel.

        The contentDispositionType extracts the disposition-type from the
        Content-Disposition header.  According to RFC 6266 (and previous RFCs),
        the disposition-type must be an RFC 2616 token.  Rather than enforce
        this general rule, we had special-cased some examples (including
        name=foo and filename=bar).  This patch generalizes our check to
        properly validate that the disposition-type is an RFC 2616 token.

        In conjunction with some other work in the Chromium network stack, this
        causes Chromium to pass the following tests:

          http://greenbytes.de/tech/tc2231/#inlonlyquoted
          http://greenbytes.de/tech/tc2231/#attonlyquoted

        Without this patch, these test cases neither trigger a navigation nor a
        download in Chromium.  This patch does not appear to cause any visible
        change in Safari.  (Safari passes these tests both before and after
        this patch.)

        * platform/network/HTTPParsers.cpp:
        (WebCore::isRFC2616Token):
        (WebCore::contentDispositionType):
            - This patch also adds a comment to
              filenameFromHTTPContentDisposition, which explains some of the
              was this function incorrectly implements the requirements in
              RFC 6266.  Resolving these issues is a subject for a future
              patch.
        * platform/network/HTTPParsers.h:

2012-02-01  Dan Bernstein  <mitz@apple.com>

        WebCore part of <rdar://problem/10442663> Paginated display does not respect page-break-{before,after}
        https://bugs.webkit.org/show_bug.cgi?id=77505

        Reviewed by Darin Adler.

        * page/Page.h:
        (WebCore::Page::Pagination::Pagination): Added initializer for the behavesLikeColumns member
        variable.
        (WebCore::Page::Pagination::operator==): Added comparison of behavesLikeColumns values.
        (Pagination): Added behavesLikeColumns member variable. When set to false (the default),
        paginated display respects the page-break-{before,after} properties rather than the
        column-break-{before,after} ones.
        * rendering/ColumnInfo.h:
        (WebCore::ColumnInfo::ColumnInfo): Added initializer for the m_paginationUnit member.
        (WebCore::ColumnInfo::paginationUnit): Added this getter.
        (WebCore::ColumnInfo::setPaginationUnit): Added this setter.
        (ColumnInfo): Added m_paginationUnit member. It defaults to Column.
        * rendering/LayoutState.h:
        (WebCore::LayoutState::isPaginatingColumns): Changed to check the pagination unit.
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::layoutBlock): Added code to set the pagination unit in the ColumnInfo.
        (WebCore::RenderBlock::paginationUnit): Added. The base class implementation returns Column.
        * rendering/RenderBlock.h:
        * rendering/RenderView.cpp:
        (WebCore::RenderView::paginationUnit): Added this override that returns Page, unless
        this is the RenderView for the main frame and pagination is set to behave like columns.
        * rendering/RenderView.h:

2012-02-01  Florin Malita  <fmalita@google.com>

        Backgrounds in HTML inside foreignObject don't draw
        https://bugs.webkit.org/show_bug.cgi?id=23111

        Reviewed by Eric Seidel.

        Test: svg/foreignObject/body-background.svg

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::paintBackground):
        Tweak the <body> background inhibiting logic to allow drawing when the element is embedded in FOs.


2012-02-01  Gustavo Lima Chaves  <glima@profusion.mobi>

        Make one able to set the local storage (tracker) database dir's path
        https://bugs.webkit.org/show_bug.cgi?id=77006

        Reviewed by Darin Adler.

        There are no behavior changes with the diff, so no need for new tests.

        * storage/StorageTracker.cpp:
        (WebCore::StorageTracker::setDatabaseDirectoryPath):
        (WebCore):
        (WebCore::StorageTracker::databaseDirectoryPath):
        * storage/StorageTracker.h:
        (StorageTracker):

2012-02-01  Anders Carlsson  <andersca@apple.com>

        Fix Window build.

        * platform/graphics/avfoundation/cf/MediaPlayerPrivateAVFoundationCF.cpp:
        (WebCore::LayerClient::platformCALayerDidCreateTiles):
        * platform/graphics/win/MediaPlayerPrivateQuickTimeVisualContext.cpp:
        (WebCore::MediaPlayerPrivateQuickTimeVisualContext::LayerClient::platformCALayerDidCreateTiles):

2012-02-01  John Yani  <vanuan@gmail.com>

        GetMIMEDescription should return const char *
        https://bugs.webkit.org/show_bug.cgi?id=77297

        Reviewed by Alexey Proskuryakov.

        No new tests. No change in behaviour.

        * plugins/blackberry/PluginPackageBlackBerry.cpp:
        (WebCore::PluginPackage::fetchInfo):
        * plugins/efl/PluginPackageEfl.cpp:
        (WebCore):
        (WebCore::PluginPackage::fetchInfo):
        * plugins/npapi.h:
        * plugins/npfunctions.h:
        * plugins/qt/PluginPackageQt.cpp:
        (WebCore::PluginPackage::fetchInfo):

2012-02-01  Timothy Hatcher  <timothy@apple.com>

        Consolidate duplicate "willHide" functions in DetailedHeapshotView.js to fix
        a syntax error in JSC and make the Inspector open again in Release builds.

        https://webkit.org/b/77424

        Reviewed by Brian Weinstein.

        * inspector/front-end/DetailedHeapshotView.js:
        (WebInspector.DetailedHeapshotView.prototype.willHide): Consolidated.
        (WebInspector.DetailedHeapshotView.prototype.willHide): Removed.

2012-02-01  Justin Novosad  <junov@chromium.org>

        [Chromium] Enable deferred canvas rendering in the skia port
        https://bugs.webkit.org/show_bug.cgi?id=76732

        Reviewed by Stephen White.

        No new tests: covered by existing canvas layout tests

        Adding a new setting to enable deferred 2d canvas rendering.
        Added support for deferred 2d canvas rendering in ImageBufferSkia
        and Canvas2DLayerChromium, mostly plumbing. Deffered rendering
        implementation is provided by skia (class SkDeferredCanvas).

        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::shouldDefer):
        (WebCore):
        (WebCore::HTMLCanvasElement::createImageBuffer):
        * html/HTMLCanvasElement.h:
        (HTMLCanvasElement):
        * page/Settings.cpp:
        (WebCore::Settings::Settings):
        (WebCore::Settings::setAccelerated2dCanvasEnabled):
        (WebCore):
        (WebCore::Settings::setDeferred2dCanvasEnabled):
        * page/Settings.h:
        (Settings):
        (WebCore::Settings::deferred2dCanvasEnabled):
        * platform/graphics/ImageBuffer.h:
        (WebCore::ImageBuffer::create):
        (ImageBuffer):
        * platform/graphics/cairo/ImageBufferCairo.cpp:
        (WebCore::ImageBuffer::ImageBuffer):
        * platform/graphics/cg/ImageBufferCG.cpp:
        (WebCore::ImageBuffer::ImageBuffer):
        * platform/graphics/chromium/Canvas2DLayerChromium.cpp:
        (WebCore::Canvas2DLayerChromium::Canvas2DLayerChromium):
        (WebCore):
        (WebCore::Canvas2DLayerChromium::setCanvas):
        (WebCore::Canvas2DLayerChromium::paintContentsIfDirty):
        * platform/graphics/chromium/Canvas2DLayerChromium.h:
        (Canvas2DLayerChromium):
        * platform/graphics/qt/ImageBufferQt.cpp:
        (WebCore::ImageBuffer::ImageBuffer):
        * platform/graphics/skia/ImageBufferSkia.cpp:
        (AcceleratedDeviceContext):
        (WebCore::AcceleratedDeviceContext::AcceleratedDeviceContext):
        (WebCore::AcceleratedDeviceContext::prepareForDraw):
        (WebCore::AcceleratedDeviceContext::flush):
        (WebCore):
        (WebCore::createAcceleratedCanvas):
        (WebCore::ImageBuffer::ImageBuffer):
        * platform/graphics/wince/ImageBufferWinCE.cpp:
        (WebCore::ImageBuffer::ImageBuffer):
        * platform/graphics/wx/ImageBufferWx.cpp:
        (WebCore::ImageBuffer::ImageBuffer):

2012-02-01  Ryosuke Niwa  <rniwa@webkit.org>

        Gcc build fix after r106482.

        * platform/graphics/ca/GraphicsLayerCA.h:
        (GraphicsLayerCA):

2012-02-01  Beth Dakin  <bdakin@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=77383
        Add a different didFirstVisuallNonEmptyLayout heuristic to experiment with
        -and corresponding-
        <rdar://problem/10709560>

        Reviewed by Sam Weinig.

        The goal is to re-vamp didFirstVisuallyNonEmptyLayout to be more accurate. 
        This patch adds a new heuristic called didNewFirstVisuallNonEmptyLayout and 
        leaves the old one for the time being. That is temporary.

        The heuristic for didNewFirstVisuallNonEmptyLayout is to count relevant 
        painted RenderObjects on Page.
        * page/Page.cpp:
        (WebCore::Page::Page):
        (WebCore::Page::setPaintedObjectsCounterThreshold):
        (WebCore::Page::addRelevantRepaintedObject):
        * page/Page.h:
        (WebCore):
        (Page):
        (WebCore::Page::startCountingRepaintedObjects):
        * WebCore.exp.in:

        Start counting relevant painted RenderObjects on the page once the first 
        layout is complete.
        * page/FrameView.cpp:
        (WebCore::FrameView::performPostLayoutTasks):

        Machinery for firing didNewFirstVisuallNonEmptyLayout.
        * loader/EmptyClients.h:
        (WebCore::EmptyFrameLoaderClient::dispatchDidNewFirstVisuallyNonEmptyLayout):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::didNewFirstVisuallyNonEmptyLayout):
        (WebCore):
        * loader/FrameLoader.h:
        (FrameLoader):
        * loader/FrameLoaderClient.h:
        (WebCore::FrameLoaderClient::dispatchDidNewFirstVisuallyNonEmptyLayout):

        These RenderObjects are the ones that this api currently consider to be 
        relevant. If their repaint rects intersect with the viewRect, then they are 
        added to the relevant objects set on the Page.
        * rendering/InlineBox.cpp:
        (WebCore::InlineBox::paint):
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::paint):
        * rendering/RenderEmbeddedObject.cpp:
        (WebCore::RenderEmbeddedObject::paintReplaced):
        * rendering/RenderHTMLCanvas.cpp:
        (WebCore::RenderHTMLCanvas::paintReplaced):
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::paintReplaced):
        * rendering/RenderRegion.cpp:
        (WebCore::RenderRegion::paintReplaced):
        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::paint):
        * rendering/RenderVideo.cpp:
        (WebCore::RenderVideo::paintReplaced):
        * rendering/svg/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::paintReplaced):

2012-02-01  Alexis Menard  <alexis.menard@openbossa.org>

        CSSStyleDeclaration.getPropertyPriority() fails for CSS shorthand properties with 'important' priority
        https://bugs.webkit.org/show_bug.cgi?id=49058

        Reviewed by Andreas Kling.

        CSSMutableStyleDeclaration::getPropertyPriority was not handling shorthands properly. Shorthands are
        not part of the property list of the style so we need to query the longhands which are the one added
        in the list. Only if the longhands have equal priority the shorthand priority is known. I also renamed
        getPropertyPriority (not the CSSOM exposed method) to something more consistent with WebKit naming guidelines.

        Test: fast/css/shorthand-priority.html

        * css/CSSMutableStyleDeclaration.cpp:
        (WebCore::CSSMutableStyleDeclaration::propertyIsImportant):
        (WebCore::CSSMutableStyleDeclaration::addParsedProperty):
        (WebCore::CSSMutableStyleDeclaration::getPropertyPriority):
        * css/CSSMutableStyleDeclaration.h:
        (CSSMutableStyleDeclaration):
        * editing/EditingStyle.cpp:
        (WebCore::EditingStyle::extractAndRemoveTextDirection):
        (WebCore::EditingStyle::collapseTextDecorationProperties):
        (WebCore::EditingStyle::conflictsWithInlineStyleOfElement):
        (WebCore::setTextDecorationProperty):
        * editing/RemoveCSSPropertyCommand.cpp:
        (WebCore::RemoveCSSPropertyCommand::doApply):

2012-02-01  Ryosuke Niwa  <rniwa@webkit.org>

        Crash in EventHandler::updateDragAndDrop
        https://bugs.webkit.org/show_bug.cgi?id=77569

        Reviewed by Alexey Proskuryakov.

        Test: fast/events/remove-target-with-shadow-in-drag.html

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

2012-02-01  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r106382.
        http://trac.webkit.org/changeset/106382
        https://bugs.webkit.org/show_bug.cgi?id=77571

        Causing chromium crashes in PNGImageDecoder (Requested by
        japhet on #webkit).

        * bindings/v8/V8Proxy.cpp:
        (WebCore::V8Proxy::evaluate):
        * page/Console.cpp:
        (WebCore::Console::time):
        (WebCore::Console::timeEnd):
        * platform/chromium/PlatformSupport.h:
        * platform/chromium/TraceEvent.h:
        (internal):
        (ScopeTracer):
        (WebCore::internal::ScopeTracer::ScopeTracer):
        (WebCore::internal::ScopeTracer::~ScopeTracer):

2012-02-01  Anders Carlsson  <andersca@apple.com>

        Reviewed by Darin Adler.

        Simplify the code that creates a new tile layer by getting a reference to the RetainPtr<WebTileLayer>&
        slot in the hash map and assign directly into it.

        * platform/graphics/ca/mac/TileCache.mm:
        (WebCore::TileCache::revalidateTiles):

2012-02-01  Anders Carlsson  <andersca@apple.com>

        Tile cache doesn't have an upper limit
        https://bugs.webkit.org/show_bug.cgi?id=77564
        <rdar://problem/10710744>

        Reviewed by Darin Adler.

        Cache enough tiles to cover 3x the visible height and 2x the visible width of the page,
        and drop tiles that are outside that area.

        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::platformCALayerDidCreateTiles):
        Call GraphicsLayerClient::notifySyncRequired here, which will schedule a layer flush and ensure that
        the page layout is up to date before the new tiles are painted.

        * platform/graphics/ca/PlatformCALayerClient.h:
        Add platformCALayerDidCreateTiles member function.

        * platform/graphics/ca/mac/TileCache.h:
        Update for new/removed member functions and member variables.

        * platform/graphics/ca/mac/TileCache.mm:
        (WebCore::TileCache::TileCache):
        Initialize the tile revalidation timer.

        (WebCore::TileCache::tileCacheLayerBoundsChanged):
        If we don't have any tiles at all right now, revalidate the tiles immediately. Otherwise,
        schedule the revalidation timer.

        (WebCore::TileCache::setNeedsDisplayInRect):
        Return early if we have no tiles.

        (WebCore::TileCache::visibleRectChanged):
        Schedule tile revalidation.

        (WebCore::TileCache::rectForTileIndex):
        New helper function that returns the bounds rect of a tile given its tile index.

        (WebCore::TileCache::getTileIndexRangeForRect):
        Clamp the rect to the bounds of the tile cache layer.

        (WebCore::TileCache::scheduleTileRevalidation):
        Schedule the revalidation timer if it hasn't already been scheduled.

        (WebCore::TileCache::tileRevalidationTimerFired):
        Call revalidateTiles.

        (WebCore::TileCache::revalidateTiles):
        Compute the tile coverage rect and remove all tiles that are outside. Create new tiles for any
        parts of the tile coverage rect that don't have tiles already.

        (WebCore::TileCache::tileLayerAtIndex):
        Remove invalid assertions.

2012-02-01  Max Vujovic  <mvujovic@adobe.com>

        Add support for fixed and percent min-width on the table element for table-layout: auto to
        match Firefox and Opera's behavior.

        In FixedTableLayout.cpp, the computePreferredLogicalWidths method looks like it has
        issues based on the comment: "FIXME: This entire calculation is incorrect for both
        minwidth and maxwidth." (minwidth and maxwidth refer to the preferred widths, not the
        min-width and max-width styles). I have not implemented min-width for FixedTableLayout
        in this patch since it requires some more research around that comment.

        min-width and max-width on the table element was discussed on the www-style list:
        http://lists.w3.org/Archives/Public/www-style/2012Jan/0684.html

        min-width is not implemented on <table> for table-layout: auto
        https://bugs.webkit.org/show_bug.cgi?id=76553

        Reviewed by Julien Chaffraix.

        Test: fast/table/min-width.html

        * rendering/AutoTableLayout.cpp:
        (WebCore::AutoTableLayout::computePreferredLogicalWidths):

            If the min or max preferred logical width is less than a fixed min width style, it is
            set to the fixed min width style. Like a percent width style, a percent min-width style
            does not affect the min or max preferred logical widths computed by the table layout
            algorithm. RenderTable's computeLogicalWidth method handles percent min-width styles.

            min-width for the table-layout: fixed case has been split out into this bug:
            https://bugs.webkit.org/show_bug.cgi?id=76948

        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::computeLogicalWidth):

            If the RenderStyle's logical min width is defined and greater than the logical width
            calculation, this method sets the logical width to the logical min width.

        (WebCore::RenderTable::convertStyleWidthToComputedWidth):

            This new method generalizes and factors out logic from RenderTable::computeLogicalWidth
            that converted the width style to a computed value in the fixed and percent case.
            RenderTable::computeLogicalWidth now calls this method to determine the computed values
            for both the width style and the min-width style. In the future, it can also be used for
            the max-width style.

            Note that this method handles the special CSS table case, which requires borders and
            paddings to be included in the computed width calculation. This applies to all width
            styles, including width, min-width, and max-width. Before, this special case was handled
            in RenderTable::computeLogicalWidth.

        * rendering/RenderTable.h:

2012-02-01  Brian Salomon  <bsalomon@google.com>

        [SKIA/CHROMIUM] Perform getImageData format conversions using Skia
        https://bugs.webkit.org/show_bug.cgi?id=77553

        Reviewed by Stephen White.

        Many existing canvas tests exercise this functionality.

        * platform/graphics/skia/ImageBufferSkia.cpp:
        (WebCore::getImageData):

2012-02-01  Nate Chapin  <japhet@chromium.org>

        preventDefault() in a mousedown in a subframe should not
        prevent the scrollbar from handling mouse movements if the
        cursor leaves the subframe.
        https://bugs.webkit.org/show_bug.cgi?id=73097

        Reviewed by Darin Adler.

        Test: fast/events/scroll-div-with-prevent-default-in-subframe.html

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

2012-02-01  Mario Sanchez Prada  <msanchez@igalia.com>

        [GTK] editing/inserting/4960120-2.html flaky crash
        https://bugs.webkit.org/show_bug.cgi?id=76815

        Reviewed by Martin Robinson.

        Check if the node for the first parent object not ignoring
        accessibility is null before using it. This might happen with
        certain kind of accessibility objects, such as the root one (the
        scroller containing the webArea object as its only child).

        * accessibility/gtk/WebKitAccessibleWrapperAtk.cpp:
        (objectFocusedAndCaretOffsetUnignored): Add missing null check.

2012-02-01  Antti Koivisto  <antti@apple.com>

        Make CSSMappedAttributeDeclaration have CSSMutableStyleDeclaration instead of being one
        https://bugs.webkit.org/show_bug.cgi?id=77545

        Reviewed by Andreas Kling.

        This is the easiest path for eliminating the last remaining subclass of CSSMutableStyleDeclaration.
        
        On negative side this increases memory use of CSSMappedAttributeDeclaration by one ptr and refcount
        (it loses the vptr) in total.
        
        This is not meant to be the end state, just an intermediate refactoring step. CSSMappedAttributeDeclaration
        should clearly be renamed too but this patch doesn't do that. It might not exist in its current form
        much longer.

        * css/CSSMutableStyleDeclaration.cpp:
        (WebCore::CSSMutableStyleDeclaration::setProperty):
        (WebCore::CSSMutableStyleDeclaration::merge):
        * css/CSSMutableStyleDeclaration.h:

            Remove protected section. No subclasses remain.        
            Rename setPropertyInternal() to setProperty(). All public methods here are internal.
        
        (CSSMutableStyleDeclaration):
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseMappedAttributeValue):
        * dom/Attribute.cpp:
        (WebCore::Attribute::clone):
        * dom/Attribute.h:
        (Attribute):
        (WebCore::Attribute::decl):
        (WebCore::Attribute::mappedAttributeDeclaration):
        (WebCore::Attribute::setMappedAttributeDeclaration):
        (WebCore::Attribute::Attribute):
        * dom/CSSMappedAttributeDeclaration.cpp:
        (WebCore::CSSMappedAttributeDeclaration::setMappedImageProperty):
        (WebCore::CSSMappedAttributeDeclaration::setMappedProperty):
        (WebCore::CSSMappedAttributeDeclaration::removeMappedProperty):
        * dom/CSSMappedAttributeDeclaration.h:
        (CSSMappedAttributeDeclaration):
        (WebCore::CSSMappedAttributeDeclaration::declaration):
        (WebCore::CSSMappedAttributeDeclaration::CSSMappedAttributeDeclaration):
        
            Make CSSMutableStyleDeclaration a member instead of the base class.
        
        * dom/StyledElement.cpp:
        (WebCore::StyledElement::attributeChanged):
        (WebCore::StyledElement::removeCSSProperty):
        (WebCore::StyledElement::addCSSProperty):
        (WebCore::StyledElement::addCSSImageProperty):
        (WebCore::StyledElement::addCSSLength):
        (WebCore::StyledElement::addCSSColor):
        (WebCore::StyledElement::createMappedDecl):
        * svg/SVGStyledElement.cpp:
        (WebCore::SVGStyledElement::getPresentationAttribute):

2012-02-01  Allan Sandfeld Jensen  <allan.jensen@nokia.com>

        [Qt] Set all PlatformTouchPoint values possible from a QTouch event.
        https://bugs.webkit.org/show_bug.cgi?id=77442

        Reviewed by Kenneth Rohde Christiansen.

        * platform/qt/PlatformTouchPointQt.cpp:
        (WebCore::PlatformTouchPoint::PlatformTouchPoint):

2012-02-01  Peter Rybin  <peter.rybin@gmail.com>

        Web Inspector: CodeGeneratorInspector.py: move type builder code to dedicated InspectorTypeBuilder .h/.cpp
        https://bugs.webkit.org/show_bug.cgi?id=77471

        Reviewed by Yury Semikhatsky.

        Code is moved physically to other file -- generator is changed accrodingly.

        * inspector/CodeGeneratorInspector.py:
        (String):
        (provides):
        (typename):
        (Array):

2012-02-01  Yury Semikhatsky  <yurys@chromium.org>

        Web Inspector: debugger reports wrong sources when paused in inline script on page reload
        https://bugs.webkit.org/show_bug.cgi?id=77548

        V8 returns treats each script source as ending with \n, now we take
        this into account when reporting script line count to the inspector
        front-end.

        Reviewed by Vsevolod Vlasov.

        Test: inspector/debugger/pause-in-inline-script.html

        * bindings/js/ScriptDebugServer.cpp:
        (WebCore::ScriptDebugServer::dispatchDidParseSource):
        * bindings/v8/DebuggerScript.js:

2012-02-01  Shinya Kawanaka  <shinyak@google.com>

        Content element should be able to be dynamically added/removed/replaced in a shadow tree.
        https://bugs.webkit.org/show_bug.cgi?id=76611

        Reviewed by Hajime Morita

        When a content element is added/removed/replaced in a shadow tree, we have to recreate
        the shadow tree to recalculate inclusions of content elements. Currently we didn't recalculate it
        when content element is removed. (When added, it is recalculated.)
        This patch enables us to recalcurate the shadow tree when content element is removed.

        Test: fast/dom/shadow/content-element-move.html

        * dom/Element.cpp:
        (WebCore::Element::attach):
          If a shadow root exists, attaches shadow tree before attaching child elements.
        * dom/ShadowRoot.cpp:
          Added a flag to recalculate shadow tree.
        (WebCore::ShadowRoot::ShadowRoot):
        (WebCore::ShadowRoot::recalcShadowTreeStyle):
          Recalculates light children and shadow tree.
        (WebCore::ShadowRoot::setNeedsReattachHostChildrenAndShadow):
        (WebCore::ShadowRoot::reattachHostChildrenAndShadow):
          Detaches shadow tree and host light children, and attaches them again.
        * dom/ShadowRoot.h:
        (WebCore::ShadowRoot::clearNeedsReattachHostChildrenAndShadow):
        (WebCore::ShadowRoot::needsReattachHostChildrenAndShadow):
        * html/shadow/HTMLContentElement.cpp:
        (WebCore::HTMLContentElement::attach):
          Does not need to detach included elements, because they are not attached in ContainerNode anymore.
        (WebCore::HTMLContentElement::detach):
          When a content element detached, reattaches a shadow tree.

2012-02-01  Peter Beverloo  <peter@chromium.org>

        getIntersectionList causes transforms to be recalculated in SVG
        https://bugs.webkit.org/show_bug.cgi?id=77179

        Reviewed by Nikolas Zimmermann.

        Introduce a local variable to store the element's local-to-parent
        transformation matrix in, removing the need for the const_cast and
        stopping us from modifying any matrices elsewhere.

        Test: svg/custom/intersection-list-transforms.svg

        * rendering/svg/RenderSVGModelObject.cpp:
        (WebCore::getElementCTM):

2012-02-01  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: [InspectorIndexedDB] Add tests for database names and database structure requests.
        https://bugs.webkit.org/show_bug.cgi?id=77439

        Reviewed by Pavel Feldman.

        Tests: http/tests/inspector/indexeddb/database-names.html
               http/tests/inspector/indexeddb/database-structure.html

        * inspector/front-end/IndexedDBModel.js:
        (WebInspector.IndexedDBModel.prototype.refreshDatabase):

2012-01-31  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Scripts navigator becomes empty after "show folders" settings change.
        https://bugs.webkit.org/show_bug.cgi?id=77441

        Reviewed by Pavel Feldman.

        * inspector/front-end/ScriptsNavigator.js:
        (WebInspector.ScriptsNavigator.prototype._reset):
        * inspector/front-end/utilities.js:

2012-02-01  Shawn Singh  <shawnsingh@chromium.org>

        Fix the semantics of passing contentsVisible flag to GraphicsLayers
        https://bugs.webkit.org/show_bug.cgi?id=76975

        Reviewed by Simon Fraser.

        This patch is covered by existing tests, in particular
        compositing/visibility/layer-visible-content.html; its
        expectations are rebaselined.

        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateGraphicsLayerGeometry):

2012-02-01  Philippe Normand  <pnormand@igalia.com>

        Unreviewed, another GTK build fix after r106446.

        * platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:
        Restore webKitWebSrcGetProtocols as it was before r106446.

2012-02-01  Philippe Normand  <pnormand@igalia.com>

        Unreviewed, GTK build fix after r106446.

        * platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:

2012-02-01  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r106432.
        http://trac.webkit.org/changeset/106432
        https://bugs.webkit.org/show_bug.cgi?id=77529

        it breaks tests (Requested by shinyak on #webkit).

        * dom/Element.cpp:
        (WebCore::Element::attach):
        * dom/ShadowRoot.cpp:
        (WebCore::ShadowRoot::recalcShadowTreeStyle):
        * dom/ShadowRoot.h:
        (ShadowRoot):
        * html/shadow/HTMLContentElement.cpp:
        (WebCore::HTMLContentElement::attach):
        (WebCore::HTMLContentElement::detach):

2012-02-01  Hayato Ito  <hayato@chromium.org>

        Remove unnecessary [OldStyleObjC] from ShadowRoot.idl.
        https://bugs.webkit.org/show_bug.cgi?id=77516

        Reviewed by Kentaro Hara.

        No new tests. No change in behavior.

        * dom/ShadowRoot.idl:

2012-01-26  Philippe Normand  <pnormand@igalia.com>

        [GStreamer] 0.11 webkitwebsrc
        https://bugs.webkit.org/show_bug.cgi?id=77086

        Port the webkitwebsrc element to GStreamer 0.11 APIs.

        Reviewed by Gustavo Noronha Silva.

        No new tests, existing http media layout tests should cover this.

        * platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:
        (webkit_web_src_class_init):

2012-01-31  Hans Wennborg  <hans@chromium.org>

        Speech Input: Report speech element rect relative to window rather than frame
        https://bugs.webkit.org/show_bug.cgi?id=76443

        Reviewed by Darin Fisher.

        When requesting speech input, report the speech element rect relative
        to the window rather than the frame. The embedder will typically use
        this position to show a bubble indicating that speech recognition is
        in progress.

        Test: fast/speech/bubble-position.html

        * html/shadow/TextControlInnerElements.cpp:
        (WebCore::InputFieldSpeechButtonElement::startSpeechInput):

2012-01-31  Andreas Kling  <awesomekling@apple.com>

        Make elements that don't have attributes smaller.
        <http://webkit.org/b/76876>

        Reviewed by Sam Weinig and Antti Koivisto.

        Move the inline style declaration from StyledElement to ElementAttributeData, since having
        an inline style declaration also implies having a style attribute on the element.
        This saves one CPU word per element that has no attributes.

        This reduces memory consumption by 412 kB (on 64-bit) when viewing the full
        HTML5 spec at <http://whatwg.org/c>.

        This was rolled out once because of a performance regression which has been averted this
        time around by adding an Element::ensureAttributeMap() so we can force creation of the
        NamedNodeMap without also serializing the inline style for the "style" attribute.

        * dom/Element.h:
        (Element):
        (WebCore::Element::ensureAttributeMap):
        (WebCore):
        * dom/ElementAttributeData.h:
        (ElementAttributeData):
        * dom/NamedNodeMap.cpp:
        (WebCore::NamedNodeMap::ensureInlineStyleDecl):
        (WebCore):
        (WebCore::NamedNodeMap::destroyInlineStyleDecl):
        * dom/NamedNodeMap.h:
        (WebCore::NamedNodeMap::inlineStyleDecl):
        (NamedNodeMap):
        * dom/StyledElement.cpp:
        (WebCore::StyledElement::addSubresourceAttributeURLs):
        * dom/StyledElement.h:
        (WebCore::StyledElement::inlineStyleDecl):
        (WebCore::StyledElement::ensureInlineStyleDecl):
        (StyledElement):
        (WebCore::StyledElement::destroyInlineStyleDecl):

2012-01-31  Hayato Ito  <hayato@chromium.org>

        Add APIs, getElementsByXXX family, to ShadowRoot IDL.
        https://bugs.webkit.org/show_bug.cgi?id=77323

        Reviewed by Dimitri Glazkov.

        Add APIs (getElementById, getElemesntByTagName, getElementsByClassName and getElementsByTagNameNS)
        to ShadowRoot IDL.

        * dom/ShadowRoot.idl:

2012-01-31  Shinya Kawanaka  <shinyak@google.com>

        Content element should be able to be dynamically added/removed/replaced in a shadow tree.
        https://bugs.webkit.org/show_bug.cgi?id=76611

        Reviewed by Hajime Morita.

        When a content element is added/removed/replaced in a shadow tree, we have to recreate
        the shadow tree to recalculate inclusions of content elements. Currently we didn't recalculate it
        when content element is removed. (When added, it is recalculated.)
        This patch enables us to recalcurate the shadow tree when content element is removed.

        Test: fast/dom/shadow/content-element-move.html

        * dom/Element.cpp:
        (WebCore::Element::attach):
          If a shadow root exists, attaches shadow tree before attaching child elements.
        * dom/ShadowRoot.cpp:
        (WebCore::ShadowRoot::recalcShadowTreeStyle):
          Recalculates light children and shadow tree.
        (WebCore::ShadowRoot::reattachHostChildrenAndShadow):
          Detaches shadow tree and host light children, and attaches them again.
        * dom/ShadowRoot.h:
          Added a flag to recalculate shadow tree.
        (WebCore::ShadowRoot::setNeedsShadowTreeStyleRecalc):
        (WebCore::ShadowRoot::clearNeedsShadowTreeStyleRecalc):
        (WebCore::ShadowRoot::needsShadowTreeStyleRecalc):
        * html/shadow/HTMLContentElement.cpp:
        (WebCore::HTMLContentElement::attach):
          Does not need to detach included elements, because they are not attached in ContainerNode anymore.
        (WebCore::HTMLContentElement::detach):
          When a content element detached, reattaches a shadow tree.

2012-01-31  Joe Thomas  <joethomas@motorola.com>

        https://bugs.webkit.org/show_bug.cgi?id=76801
        Listboxes incorrectly display contents when cleared and then re-populated.

        Whenever the number of items in the listbox is less than the size of listbox (number of visible items the listbox can accomodate),
        we set the listbox scroll-offset to zero. The scroll-offset of the Scrollbar should also be set to 0 so that when the listbox is re-populated,
        scrollbar position and the content inside the listbox are in sync.

        Reviewed by Andreas Kling.

        Tests: fast/forms/listbox-clear-restore.html

        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::computeLogicalHeight): Setting the scroll-offset of the Scrollbar to 0 when scrollbar is not needed.

2012-01-31  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Unreviewed. Fix build break after r106373.

        * CMakeLists.txt:

2012-01-31  Adam Barth  <abarth@webkit.org>

        HTMLPreloadScanner should understand the <base> element
        https://bugs.webkit.org/show_bug.cgi?id=77231

        Reviewed by Eric Seidel.

        Previously, the HTMLPreloadScanner would ignore the <base> element when
        preloading resources.  If there was a <base> tag, this could cause the
        preload scanner to make a bunch of useless requests.

        This patch teaches the preload scanner to use <base> tags to better
        predict which URLs will be used by the document.

        Tests: fast/preloader/first-base-tag-scanned-wins.html
               fast/preloader/first-base-tag-wins.html
               fast/preloader/understands-base-tag.html

        * dom/Document.cpp:
        (WebCore::Document::completeURL):
        (WebCore):
        * dom/Document.h:
        (Document):
        (WebCore::Document::baseElementURL):
        * html/parser/HTMLPreloadScanner.cpp:
        (WebCore::HTMLNames::PreloadTask::PreloadTask):
        (WebCore::HTMLNames::PreloadTask::processAttributes):
        (WebCore::HTMLNames::PreloadTask::preload):
        (WebCore::HTMLNames::PreloadTask::baseElementHref):
        (PreloadTask):
        (WebCore::HTMLPreloadScanner::scan):
        (WebCore::HTMLPreloadScanner::processToken):
        (WebCore::HTMLPreloadScanner::updatePredictedBaseElementURL):
        (WebCore):
        * html/parser/HTMLPreloadScanner.h:
        (HTMLPreloadScanner):

2012-01-31  Raymond Liu  <raymond.liu@intel.com>

        Dynamic allocate AudioBus with required number of channels for AudioNodeInput
        https://bugs.webkit.org/show_bug.cgi?id=76516

        Reviewed by Kenneth Russell.

        No new tests required.

        * webaudio/AudioBasicProcessorNode.cpp:
        (WebCore::AudioBasicProcessorNode::checkNumberOfChannelsForInput):
        * webaudio/AudioChannelMerger.cpp:
        (WebCore::AudioChannelMerger::checkNumberOfChannelsForInput):
        * webaudio/AudioGainNode.cpp:
        (WebCore::AudioGainNode::checkNumberOfChannelsForInput):
        * webaudio/AudioNode.cpp:
        (WebCore::AudioNode::checkNumberOfChannelsForInput):
        * webaudio/AudioNode.h:
        * webaudio/AudioNodeInput.cpp:
        (WebCore::AudioNodeInput::AudioNodeInput):
        (WebCore::AudioNodeInput::updateInternalBus):
        (WebCore::AudioNodeInput::internalSummingBus):
        * webaudio/AudioNodeInput.h:

2012-01-31  Alexey Proskuryakov  <ap@apple.com>

        REGRESSION (WebKit2): event.keyCode is always zero when typing in Russian
        https://bugs.webkit.org/show_bug.cgi?id=77473
        <rdar://problem/10751357>

        Reviewed by Darin Adler.

        Test: platform/mac/fast/events/non-roman-key-code.html

        * WebCore.exp.in:
        * platform/mac/PlatformEventFactoryMac.h:
        * platform/mac/PlatformEventFactoryMac.mm:
        (WebCore::keyIdentifierForKeyEvent):
        (WebCore::windowsKeyCodeForKeyEvent):
        Export functions for reuse in WebKit2. I did not attempt any larger refactoring at this time.

2012-01-31  Gregg Tavares  <gman@google.com>

        Make WebGL put synthesized errors in the JS console
        https://bugs.webkit.org/show_bug.cgi?id=77267

        Reviewed by Kenneth Russell.

        No new functionality so no new tests.

        * html/canvas/WebGLCompressedTextures.cpp:
        (WebCore::WebGLCompressedTextures::validateCompressedTexFuncData):
        (WebCore::WebGLCompressedTextures::compressedTexImage2D):
        (WebCore::WebGLCompressedTextures::compressedTexSubImage2D):
        * html/canvas/WebGLCompressedTextures.h:
        (WebGLCompressedTextures):
        * html/canvas/WebGLDebugShaders.cpp:
        (WebCore::WebGLDebugShaders::getTranslatedShaderSource):
        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::activeTexture):
        (WebCore::WebGLRenderingContext::attachShader):
        (WebCore::WebGLRenderingContext::bindAttribLocation):
        (WebCore::WebGLRenderingContext::checkObjectToBeBound):
        (WebCore::WebGLRenderingContext::bindBuffer):
        (WebCore::WebGLRenderingContext::bindFramebuffer):
        (WebCore::WebGLRenderingContext::bindRenderbuffer):
        (WebCore::WebGLRenderingContext::bindTexture):
        (WebCore::WebGLRenderingContext::blendEquation):
        (WebCore::WebGLRenderingContext::blendEquationSeparate):
        (WebCore::WebGLRenderingContext::blendFunc):
        (WebCore::WebGLRenderingContext::blendFuncSeparate):
        (WebCore::WebGLRenderingContext::bufferData):
        (WebCore::WebGLRenderingContext::bufferSubData):
        (WebCore::WebGLRenderingContext::checkFramebufferStatus):
        (WebCore::WebGLRenderingContext::clear):
        (WebCore::WebGLRenderingContext::compileShader):
        (WebCore::WebGLRenderingContext::compressedTexImage2D):
        (WebCore::WebGLRenderingContext::compressedTexSubImage2D):
        (WebCore::WebGLRenderingContext::copyTexImage2D):
        (WebCore::WebGLRenderingContext::copyTexSubImage2D):
        (WebCore::WebGLRenderingContext::createShader):
        (WebCore::WebGLRenderingContext::deleteObject):
        (WebCore::WebGLRenderingContext::depthRange):
        (WebCore::WebGLRenderingContext::detachShader):
        (WebCore::WebGLRenderingContext::disable):
        (WebCore::WebGLRenderingContext::disableVertexAttribArray):
        (WebCore::WebGLRenderingContext::validateWebGLObject):
        (WebCore::WebGLRenderingContext::drawArrays):
        (WebCore::WebGLRenderingContext::drawElements):
        (WebCore::WebGLRenderingContext::enable):
        (WebCore::WebGLRenderingContext::enableVertexAttribArray):
        (WebCore::WebGLRenderingContext::framebufferRenderbuffer):
        (WebCore::WebGLRenderingContext::framebufferTexture2D):
        (WebCore::WebGLRenderingContext::generateMipmap):
        (WebCore::WebGLRenderingContext::getActiveAttrib):
        (WebCore::WebGLRenderingContext::getActiveUniform):
        (WebCore::WebGLRenderingContext::getAttachedShaders):
        (WebCore::WebGLRenderingContext::getAttribLocation):
        (WebCore::WebGLRenderingContext::getBufferParameter):
        (WebCore::WebGLRenderingContext::getFramebufferAttachmentParameter):
        (WebCore::WebGLRenderingContext::getParameter):
        (WebCore::WebGLRenderingContext::getProgramParameter):
        (WebCore::WebGLRenderingContext::getProgramInfoLog):
        (WebCore::WebGLRenderingContext::getRenderbufferParameter):
        (WebCore::WebGLRenderingContext::getShaderParameter):
        (WebCore::WebGLRenderingContext::getShaderInfoLog):
        (WebCore::WebGLRenderingContext::getShaderSource):
        (WebCore::WebGLRenderingContext::getTexParameter):
        (WebCore::WebGLRenderingContext::getUniform):
        (WebCore::WebGLRenderingContext::getUniformLocation):
        (WebCore::WebGLRenderingContext::getVertexAttrib):
        (WebCore::WebGLRenderingContext::hint):
        (WebCore::WebGLRenderingContext::isEnabled):
        (WebCore::WebGLRenderingContext::linkProgram):
        (WebCore::WebGLRenderingContext::pixelStorei):
        (WebCore::WebGLRenderingContext::readPixels):
        (WebCore::WebGLRenderingContext::renderbufferStorage):
        (WebCore::WebGLRenderingContext::scissor):
        (WebCore::WebGLRenderingContext::shaderSource):
        (WebCore::WebGLRenderingContext::stencilFunc):
        (WebCore::WebGLRenderingContext::stencilFuncSeparate):
        (WebCore::WebGLRenderingContext::stencilMaskSeparate):
        (WebCore::WebGLRenderingContext::texImage2DBase):
        (WebCore::WebGLRenderingContext::texImage2DImpl):
        (WebCore::WebGLRenderingContext::texImage2D):
        (WebCore::WebGLRenderingContext::videoFrameToImage):
        (WebCore::WebGLRenderingContext::texParameter):
        (WebCore::WebGLRenderingContext::texSubImage2DBase):
        (WebCore::WebGLRenderingContext::texSubImage2DImpl):
        (WebCore::WebGLRenderingContext::texSubImage2D):
        (WebCore::WebGLRenderingContext::uniform1f):
        (WebCore::WebGLRenderingContext::uniform1fv):
        (WebCore::WebGLRenderingContext::uniform1i):
        (WebCore::WebGLRenderingContext::uniform1iv):
        (WebCore::WebGLRenderingContext::uniform2f):
        (WebCore::WebGLRenderingContext::uniform2fv):
        (WebCore::WebGLRenderingContext::uniform2i):
        (WebCore::WebGLRenderingContext::uniform2iv):
        (WebCore::WebGLRenderingContext::uniform3f):
        (WebCore::WebGLRenderingContext::uniform3fv):
        (WebCore::WebGLRenderingContext::uniform3i):
        (WebCore::WebGLRenderingContext::uniform3iv):
        (WebCore::WebGLRenderingContext::uniform4f):
        (WebCore::WebGLRenderingContext::uniform4fv):
        (WebCore::WebGLRenderingContext::uniform4i):
        (WebCore::WebGLRenderingContext::uniform4iv):
        (WebCore::WebGLRenderingContext::uniformMatrix2fv):
        (WebCore::WebGLRenderingContext::uniformMatrix3fv):
        (WebCore::WebGLRenderingContext::uniformMatrix4fv):
        (WebCore::WebGLRenderingContext::useProgram):
        (WebCore::WebGLRenderingContext::validateProgram):
        (WebCore::WebGLRenderingContext::vertexAttrib1f):
        (WebCore::WebGLRenderingContext::vertexAttrib1fv):
        (WebCore::WebGLRenderingContext::vertexAttrib2f):
        (WebCore::WebGLRenderingContext::vertexAttrib2fv):
        (WebCore::WebGLRenderingContext::vertexAttrib3f):
        (WebCore::WebGLRenderingContext::vertexAttrib3fv):
        (WebCore::WebGLRenderingContext::vertexAttrib4f):
        (WebCore::WebGLRenderingContext::vertexAttrib4fv):
        (WebCore::WebGLRenderingContext::vertexAttribPointer):
        (WebCore::WebGLRenderingContext::viewport):
        (WebCore::WebGLRenderingContext::forceLostContext):
        (WebCore::WebGLRenderingContext::loseContextImpl):
        (WebCore::WebGLRenderingContext::forceRestoreContext):
        (WebCore::WebGLRenderingContext::validateTextureBinding):
        (WebCore::WebGLRenderingContext::validateLocationLength):
        (WebCore::WebGLRenderingContext::validateSize):
        (WebCore::WebGLRenderingContext::validateString):
        (WebCore::WebGLRenderingContext::validateTexFuncFormatAndType):
        (WebCore::WebGLRenderingContext::validateTexFuncLevel):
        (WebCore::WebGLRenderingContext::validateTexFuncParameters):
        (WebCore::WebGLRenderingContext::validateTexFuncData):
        (WebCore::WebGLRenderingContext::validateDrawMode):
        (WebCore::WebGLRenderingContext::validateStencilSettings):
        (WebCore::WebGLRenderingContext::validateStencilFunc):
        (WebCore::WebGLRenderingContext::validateFramebufferFuncParameters):
        (WebCore::WebGLRenderingContext::validateBlendEquation):
        (WebCore::WebGLRenderingContext::validateBlendFuncFactors):
        (WebCore::WebGLRenderingContext::validateCapability):
        (WebCore::WebGLRenderingContext::validateUniformParameters):
        (WebCore::WebGLRenderingContext::validateUniformMatrixParameters):
        (WebCore::WebGLRenderingContext::validateBufferDataParameters):
        (WebCore::WebGLRenderingContext::validateHTMLImageElement):
        (WebCore::WebGLRenderingContext::vertexAttribfImpl):
        (WebCore::WebGLRenderingContext::vertexAttribfvImpl):
        (WebCore::WebGLRenderingContext::maybeRestoreContext):
        (WebCore):
        (WebCore::WebGLRenderingContext::synthesizeGLError):
        * html/canvas/WebGLRenderingContext.h:
        (WebGLRenderingContext):

2012-01-31  Raymond Liu  <raymond.liu@intel.com>

        Clean up m_processLock logic in AudioBasicProcessorNode and AudioGainNode
        https://bugs.webkit.org/show_bug.cgi?id=76772

        Reviewed by Kenneth Russell.

        No new tests required.

        * webaudio/AudioBasicProcessorNode.cpp:
        (WebCore::AudioBasicProcessorNode::process):
        (WebCore::AudioBasicProcessorNode::checkNumberOfChannelsForInput):
        * webaudio/AudioBasicProcessorNode.h:
        * webaudio/AudioGainNode.cpp:
        (WebCore::AudioGainNode::process):
        (WebCore::AudioGainNode::checkNumberOfChannelsForInput):
        * webaudio/AudioGainNode.h:
        (AudioGainNode):

2012-01-31  Adam Klein  <adamk@chromium.org>

        ProcessingInstruction should not be a ContainerNode
        https://bugs.webkit.org/show_bug.cgi?id=75141

        Reviewed by Darin Adler.

        Per the DOM spec, ProcessingInstruction can't have any children.
        And the WebCore behavior already matches the spec by always returning
        false for childTypeAllowed(). This change simplifies
        ProcessingInstruction's implementation by making it subclass Node
        instead of ContainerNode.

        Test: fast/dom/processing-instruction-appendChild-exceptions.xhtml

        * dom/ContainerNode.cpp: Moved dispatchBeforeLoadEvent up to Node.
        * dom/ContainerNode.h:
        * dom/Node.cpp:
        (WebCore::Node::dispatchBeforeLoadEvent): Moved up from ContainerNode
        since it's used both by ProcessingInstruction and various Element
        subclasses.
        * dom/Node.h:
        * dom/ProcessingInstruction.cpp:
        (WebCore::ProcessingInstruction::ProcessingInstruction): Call Node constructor.
        (WebCore::ProcessingInstruction::insertedIntoDocument): Call Node impl.
        (WebCore::ProcessingInstruction::removedFromDocument): ditto.
        (WebCore::ProcessingInstruction::finishParsingChildren): ditto.
        * dom/ProcessingInstruction.h:

2012-01-31  Matthew Delaney  <mdelaney@apple.com>

        Failing 2d.shadow.enable.off.2.html on Lion
        https://bugs.webkit.org/show_bug.cgi?id=77489

        Reviewed by Dan Bernstein.

        The canvas spec requires that shadows not be drawn under certain
        circumstances outlined here: http://www.whatwg.org/specs/web-apps/current-work/#shadows
        This patch adds in those checks which allows us to pass now (on Lion)
        the philip canvas test that was checking that constraint.

        No new tests. Unskipping the test on Lion that this patch fixes.

        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::setAllAttributesToDefault):
        (WebCore::CanvasRenderingContext2D::setShadow):
        (WebCore::CanvasRenderingContext2D::applyShadow):
        (WebCore::CanvasRenderingContext2D::shouldDrawShadows):
        * html/canvas/CanvasRenderingContext2D.h:
        (CanvasRenderingContext2D):

2012-01-31  Anders Carlsson  <andersca@apple.com>

        TileCache::setNeedsDisplayInRect cleanup
        https://bugs.webkit.org/show_bug.cgi?id=77486

        Reviewed by Andreas Kling.

        * platform/graphics/ca/mac/TileCache.h:
        * platform/graphics/ca/mac/TileCache.mm:
        (WebCore::TileCache::setNeedsDisplayInRect):
        TileCache::tileLayerAtIndex can in the future return nil, so cope with that. Also, replace
        nested if statements with continue statements.

        (WebCore::TileCache::getTileIndexRangeForRect):
        Rename this to better indicate that it returns a range of indices.

2012-01-31  Dana Jansens  <danakj@chromium.org>

        Add contains() test to Region
        https://bugs.webkit.org/show_bug.cgi?id=72294

        Reviewed by Anders Carlsson.

        * platform/graphics/Region.cpp:
        (WebCore::Region::contains):
        (WebCore):
        * platform/graphics/Region.h:
        (Region):
        (Shape):
        (WebCore::operator==):
        (WebCore):

2012-01-31  Sami Kyostila  <skyostil@chromium.org>

        [chromium] Compositor debug borders are not scaled correctly
        https://bugs.webkit.org/show_bug.cgi?id=77468

        Use CCLayerImpl::contentBounds() instead of CCLayerImpl::bounds() to calculate debug
        border geometry so that the borders are properly scaled.

        Reviewed by James Robinson.

        * platform/graphics/chromium/cc/CCLayerImpl.cpp:
        (WebCore::CCLayerImpl::appendDebugBorderQuad):

2012-01-31  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r106376.
        http://trac.webkit.org/changeset/106376
        https://bugs.webkit.org/show_bug.cgi?id=77481

        Broke WebGLLayerChromiumTest in webkit_unit_tests (Requested
        by kbr_google on #webkit).

        * platform/graphics/gpu/DrawingBuffer.cpp:
        (WebCore):
        (WebCore::DrawingBuffer::reset):

2012-01-31  Mihnea Ovidenie  <mihnea@adobe.com>

        [CSSRegions]Reduce the cases when the box style in region is computed
        https://bugs.webkit.org/show_bug.cgi?id=77446

        Reviewed by David Hyatt.

        Covered by existing region style tests.

        * rendering/RenderRegion.cpp:
        (WebCore::RenderRegion::setRegionBoxesRegionStyle):
        (WebCore::RenderRegion::restoreRegionBoxesOriginalStyle):

2012-01-31  Anders Carlsson  <andersca@apple.com>

        Put tiles in a HashMap
        https://bugs.webkit.org/show_bug.cgi?id=77480

        Reviewed by Antti Koivisto.

        Put tiles in a hash map keyed off the tile index.

        * platform/graphics/ca/mac/TileCache.h:
        Shuffle member variables around so the order makes more sense.
        Add the tile map.

        * platform/graphics/ca/mac/TileCache.mm:
        (WebCore::TileCache::TileCache):
        Update member initializers.

        (WebCore::TileCache::setNeedsDisplayInRect):
        Call tileLayerAtIndex instead of tileLayerAtPosition.

        (WebCore::TileCache::setAcceleratesDrawing):
        (WebCore::TileCache::setTileDebugBorderWidth):
        (WebCore::TileCache::setTileDebugBorderColor):
        Iterate over the hash map instead of the sublayers.

        (WebCore::TileCache::resizeTileGrid):
        Add the created layers to the map.

        (WebCore::TileCache::tileLayerAtIndex):
        Rename from tileLayerAtPoint to better reflect that this member function
        returns a tile layer at the given index and not the given point.

2012-01-31  Antti Koivisto  <antti@apple.com>

        Make CSSOM style() return CSSStyleDeclaration*
        https://bugs.webkit.org/show_bug.cgi?id=77475

        Reviewed by Anders Carlsson

        CSSStyleRule::style() and some other places return CSSMutableStyleDeclaration. 
        They should return the plain CSSOM type instead.
        
        CSSMutableStyleDeclaration* should be available through non-CSSOM function.

        * css/CSSFontFaceRule.h:
        (WebCore::CSSFontFaceRule::style):
        (WebCore::CSSFontFaceRule::declaration):
        * css/CSSFontSelector.cpp:
        (WebCore::CSSFontSelector::addFontFaceRule):
        * css/CSSStyleRule.h:
        (WebCore::CSSStyleRule::style):
        (WebCore::CSSStyleRule::declaration):
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::styleForKeyframe):
        * css/WebKitCSSKeyframeRule.h:
        (WebCore):
        (WebCore::WebKitCSSKeyframeRule::style):
        (WebCore::WebKitCSSKeyframeRule::declaration):
        (WebKitCSSKeyframeRule):
        * editing/EditingStyle.cpp:
        (WebCore::styleFromMatchedRulesForElement):
        * inspector/InspectorStyleSheet.cpp:
        (WebCore::InspectorStyleSheet::revalidateStyle):
        * page/PageSerializer.cpp:
        (WebCore::PageSerializer::retrieveResourcesForCSSRule):
        * svg/SVGFontFaceElement.cpp:
        (WebCore::SVGFontFaceElement::parseMappedAttribute):
        (WebCore::SVGFontFaceElement::fontFamily):
        (WebCore::SVGFontFaceElement::rebuildFontFace):

2012-01-31  Scott Graham  <scottmg@chromium.org>

        [Chromium] Remove references to gyp cygwin build target
        https://bugs.webkit.org/show_bug.cgi?id=77253

        Reviewed by Julien Chaffraix.

        Target dependency is no longer required, it's done earlier in the
        build process.

        * WebCore.gyp/WebCore.gyp:

2012-01-31  Jon Lee  <jonlee@apple.com>

        Hidden form elements do not save their state prior to form submission
        https://bugs.webkit.org/show_bug.cgi?id=77391
        <rdar://problem/10563108>

        Reviewed by Brady Eidson.

        Test: fast/forms/state-restore-hidden.html

        * html/HiddenInputType.cpp: Teach hidden inputs to save and restore their state.
        (WebCore::HiddenInputType::saveFormControlState):
        (WebCore::HiddenInputType::restoreFormControlState):
        * html/HiddenInputType.h:
        (HiddenInputType):

2012-01-31  Joshua Bell  <jsbell@chromium.org>

        IndexedDB: IDBCursor.update() should raise exception if key changed
        https://bugs.webkit.org/show_bug.cgi?id=76952

        Move the test from the async task to the synchronous call, per spec. Also re-ordered the tests
        done during the synchronous call and the asynchronous task to follow the spec order.

        Reviewed by Tony Chang.

        Tests: storage/indexeddb/cursor-update.html

        * storage/IDBObjectStoreBackendImpl.cpp:
        (WebCore::IDBObjectStoreBackendImpl::put): Added check during update() call, order checks per spec.
        (WebCore::IDBObjectStoreBackendImpl::putInternal): Move effective key calculation inline.
        * storage/IDBObjectStoreBackendImpl.h: Removed selectKeyForPut method.

2012-01-31  Anders Carlsson  <andersca@apple.com>

        Inform the tile cache whenever the visible rect changes
        https://bugs.webkit.org/show_bug.cgi?id=77470

        Reviewed by Andreas Kling.

        * platform/graphics/GraphicsLayer.h:
        (WebCore::GraphicsLayer::visibleRectChanged):
        Add empty function.

        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::visibleRectChanged):
        Call through to the PlatformCALayer.

        * platform/graphics/ca/mac/PlatformCALayerMac.mm:
        (PlatformCALayer::visibleRectChanged):
        Call through to the underlying WebTileCacheLayer.

        * platform/graphics/ca/mac/TileCache.mm:
        (WebCore::TileCache::visibleRectChanged):
        Add empty stub.

        (WebCore::TileCache::visibleRect):
        Add new (currently unused) helper function that returns the visible rect of the
        tile cache layer.

        * platform/graphics/ca/mac/WebTileCacheLayer.h:
        * platform/graphics/ca/mac/WebTileCacheLayer.mm:
        (-[WebTileCacheLayer visibleRectChanged]):
        Call through to the TielCache object.

        * platform/graphics/ca/win/PlatformCALayerWin.cpp:
        (PlatformCALayer::visibleRectChanged):
        Add stub.

        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::frameViewDidScroll):
        Call GraphicsLayer::visibleRectChanged.

2012-01-31  Antti Koivisto  <antti@apple.com>

        Remove CSSStyleDeclaration isElementStyleDeclaration bit
        https://bugs.webkit.org/show_bug.cgi?id=77460

        Reviewed by Andreas Kling.

        Inline style declaration is now the only type of style declaration with element parent.
        We can remove the bit and the associated logic.

        * bindings/js/JSDOMBinding.h:
        (WebCore::root):
        * css/CSSMutableStyleDeclaration.cpp:
        (WebCore::CSSMutableStyleDeclaration::CSSMutableStyleDeclaration):
        (WebCore::CSSMutableStyleDeclaration::setNeedsStyleRecalc):
        * css/CSSMutableStyleDeclaration.h:
        (WebCore::CSSMutableStyleDeclaration::createInline):
        (CSSMutableStyleDeclaration):
        * css/CSSStyleDeclaration.cpp:
        (WebCore::CSSStyleDeclaration::CSSStyleDeclaration):
        (WebCore):
        (WebCore::CSSStyleDeclaration::parentStyleSheet):
        * css/CSSStyleDeclaration.h:
        (WebCore::CSSStyleDeclaration::parentRule):
        (WebCore::CSSStyleDeclaration::clearParentRule):
        (WebCore::CSSStyleDeclaration::parentElement):
        (WebCore::CSSStyleDeclaration::clearParentElement):
        (CSSStyleDeclaration):

2012-01-31  Dana Jansens  <danakj@chromium.org>

        [chromium] Compute occlusion during paint loop
        https://bugs.webkit.org/show_bug.cgi?id=76858

        Reviewed by James Robinson.

        New unit tests in TiledLayerChromiumTest.cpp, CCLayerTreeHostCommonTest.cpp, CCLayerTreeHostTest.cpp

        * platform/graphics/FloatRect.cpp:
        (WebCore::enclosedIntRect):
        (WebCore):
        * platform/graphics/FloatRect.h:
        (WebCore):
        * platform/graphics/chromium/Canvas2DLayerChromium.cpp:
        (WebCore::Canvas2DLayerChromium::paintContentsIfDirty):
        * platform/graphics/chromium/Canvas2DLayerChromium.h:
        (Canvas2DLayerChromium):
        * platform/graphics/chromium/ContentLayerChromium.cpp:
        (WebCore::ContentLayerChromium::paintContentsIfDirty):
        * platform/graphics/chromium/ContentLayerChromium.h:
        (ContentLayerChromium):
        * platform/graphics/chromium/ImageLayerChromium.cpp:
        (WebCore::ImageLayerChromium::paintContentsIfDirty):
        * platform/graphics/chromium/ImageLayerChromium.h:
        (ImageLayerChromium):
        * platform/graphics/chromium/LayerChromium.cpp:
        (WebCore::LayerChromium::contentToScreenSpaceTransform):
        (WebCore):
        (WebCore::LayerChromium::addSelfToOccludedScreenSpace):
        (WebCore::LayerChromium::isPaintedAxisAlignedInScreen):
        * platform/graphics/chromium/LayerChromium.h:
        (WebCore):
        (WebCore::LayerChromium::paintContentsIfDirty):
        (LayerChromium):
        * platform/graphics/chromium/RenderSurfaceChromium.h:
        (RenderSurfaceChromium):
        * platform/graphics/chromium/TiledLayerChromium.cpp:
        (WebCore::TiledLayerChromium::addSelfToOccludedScreenSpace):
        * platform/graphics/chromium/TiledLayerChromium.h:
        (WebCore):
        ():
        * platform/graphics/chromium/cc/CCLayerTreeHost.cpp:
        (WebCore::CCLayerTreeHost::paintContentsIfDirty):
        (WebCore::CCLayerTreeHost::paintMaskAndReplicaForRenderSurface):
        (RenderSurfaceRegion):
        (WebCore):
        (WebCore::pushTargetRenderSurfaceRegion):
        (WebCore::popAndPushTargetRenderSurfaceRegion):
        (WebCore::CCLayerTreeHost::paintLayerContents):
        * platform/graphics/chromium/cc/CCLayerTreeHost.h:
        (WebCore):
        ():
        * platform/graphics/chromium/cc/CCQuadCuller.cpp:

2012-01-31  John Bates  <jbates@google.com>

        [Chromium] Add chromium-style tracing support
        https://bugs.webkit.org/show_bug.cgi?id=76885

        Reviewed by Darin Fisher.

        This code enables WebKit trace events to pass through more data to the
        chromium platform tracing API and generally to use the full tracing
        API provided by chromium.

        * bindings/v8/V8Proxy.cpp:
        (WebCore::V8Proxy::evaluate): Replace old tracing API.
        * page/Console.cpp:
        (WebCore::Console::time): Replace old tracing API.
        (WebCore::Console::timeEnd): Replace old tracing API.
        * platform/chromium/PlatformSupport.h:
        * platform/chromium/TraceEvent.h:
        (WebCore::TraceEvent::TraceID::TraceID):
        (WebCore::TraceEvent::TraceID::data):
        (WebCore::TraceEvent::TraceStringWithCopy::TraceStringWithCopy):
        (WebCore::TraceEvent::TraceStringWithCopy::operator const char* ):
        (WebCore::TraceEvent::setTraceValue):
        (WebCore::TraceEvent::addTraceEvent):
        (WebCore::TraceEvent::TraceEndOnScopeClose::TraceEndOnScopeClose):
        (WebCore::TraceEvent::TraceEndOnScopeClose::~TraceEndOnScopeClose):
        (WebCore::TraceEvent::TraceEndOnScopeClose::initialize):
        (WebCore::TraceEvent::TraceEndOnScopeClose::addEventIfEnabled):
        (WebCore::TraceEvent::TraceEndOnScopeCloseThreshold::TraceEndOnScopeCloseThreshold):
        (WebCore::TraceEvent::TraceEndOnScopeCloseThreshold::~TraceEndOnScopeCloseThreshold):
        (WebCore::TraceEvent::TraceEndOnScopeCloseThreshold::initialize):
        (WebCore::TraceEvent::TraceEndOnScopeCloseThreshold::addEventIfEnabled):

2012-01-31  Ryosuke Niwa  <rniwa@webkit.org>

        Crash in DeleteSelectionCommand::handleGeneralDelete when attempting to delete the start block
        https://bugs.webkit.org/show_bug.cgi?id=77077

        Reviewed by Enrica Casucci.

        The crash was caused by a missing null check after removing the position out of the start block.
        Fixed the bug by adding an early return.

        Tests: editing/deleting/delete-start-block.html
               editing/selection/move-into-empty-root-inline-box.html

        * editing/DeleteSelectionCommand.cpp:
        (WebCore::DeleteSelectionCommand::handleGeneralDelete):

2012-01-31  Rafael Brandao  <rafael.lobo@openbossa.org>

        HTMLIsIndexElement should not expose HTMLInputElement properties
        https://bugs.webkit.org/show_bug.cgi?id=76095

        Reviewed by Eric Seidel.

        This is a buildfix for r106373.

        * DerivedSources.pri: Removed reference to HTMLIsIndexElement.idl

2012-01-31  Yongsheng Zhu  <yongsheng.zhu@intel.com>

        WebGL must allocate smaller drawing buffer when the allocation fails. 
        https://bugs.webkit.org/show_bug.cgi?id=76654

        Reviewed by Kenneth Russell.

        Test: fast/canvas/webgl/drawingbuffer-test.html

        * platform/graphics/gpu/DrawingBuffer.cpp:
        (WebCore):
        (WebCore::DrawingBuffer::create):
        (WebCore::DrawingBuffer::reset):

2012-01-25  Eric Seidel  <eric@webkit.org>

        HTMLIsIndexElement should not expose HTMLInputElement properties
        https://bugs.webkit.org/show_bug.cgi?id=76095

        Reviewed by Adam Barth.

        document.createElement("isindex") should produce an HTMLUnknownElement
        per the HTML5 spec.  The parser automagically translates <isindex> into
        a whole dom tree roughly representing what <isindex> used to do 15 years ago. :)

        This patch just removes our support for HTMLIsIndexElement.  The parser
        support was already in.  Having support for HTMLIsIndexElement was causing
        one of the IE TestCenter tests to fail.

        Test: fast/dom/HTMLIsIndexElement/prototype-chain.html

        * DerivedSources.cpp:
        * DerivedSources.make:
        * DerivedSources.pri:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.exp.in:
        * WebCore.gypi:
        * WebCore.order:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/gobject/GNUmakefile.am:
        * bindings/gobject/WebKitHTMLElementWrapperFactory.cpp:
        (WebKit::createHTMLElementWrapper):
        * bindings/objc/DOM.mm:
        (WebCore::createElementClassMap):
        * bindings/objc/DOMHTML.h:
        * bindings/objc/PublicDOMInterfaces.h:
        * html/HTMLElementsAllInOne.cpp:
        * html/HTMLIsIndexElement.cpp: Removed.
        * html/HTMLIsIndexElement.h: Removed.
        * html/HTMLIsIndexElement.idl: Removed.
        * html/HTMLTagNames.in:
        * page/DOMWindow.idl:

2012-01-31  Alexis Menard  <alexis.menard@openbossa.org>

        Unreviewed include cleanup.

        Tested locally on Qt and Chromium port.

        * dom/Node.cpp:

2012-01-31  Arko Saha  <arko@motorola.com>

        The spec renamed addTrack() to addTextTrack().
        https://bugs.webkit.org/show_bug.cgi?id=77381

        Reviewed by Eric Carlson.

        Renamed addTrack() to addTextTrack().
        Spec: http://www.whatwg.org/specs/web-apps/current-work/multipage/the-video-element.html#media-elements

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::addTextTrack):
        * html/HTMLMediaElement.h:
        (WebCore::HTMLMediaElement::addTextTrack):
        * html/HTMLMediaElement.idl:

2012-01-31  Peter Rybin  <peter.rybin@gmail.com>

        Web Inspector: CodeGeneratorInspector.py: reimplement generated array types
        https://bugs.webkit.org/show_bug.cgi?id=77289

        Reviewed by Vsevolod Vlasov.

        Arrays are now rendered as a single template class. Its type-specific
        details are provided by an additional ArrayItemHelper class that is
        defined using C++ specialization technique.

        * inspector/CodeGeneratorInspector.py:
        (RawTypes.String):
        (RawTypes.String.get_array_item_raw_c_type_text):
        (RawTypes.Int):
        (RawTypes.Int.get_array_item_raw_c_type_text):
        (RawTypes.Number):
        (RawTypes.Number.get_array_item_raw_c_type_text):
        (RawTypes.Bool):
        (RawTypes.Bool.get_array_item_raw_c_type_text):
        (RawTypes.Object):
        (RawTypes.Object.get_array_item_raw_c_type_text):
        (RawTypes.Any):
        (RawTypes.Any.get_array_item_raw_c_type_text):
        (RawTypes.Array):
        (RawTypes.Array.get_array_item_raw_c_type_text):
        (RawTypes):
        (TypeBindings.create_type_declaration_.EnumBinding):
        (TypeBindings.create_type_declaration_.EnumBinding.get_array_item_c_type_text):
        (TypeBindings.create_type_declaration_.PlainString):
        (TypeBindings.create_type_declaration_.PlainString.get_array_item_c_type_text):
        (TypeBindings.create_type_declaration_.TypedefString):
        (TypeBindings.create_type_declaration_.TypedefString.get_array_item_c_type_text):
        (StructItemTraits):
        (get_array_item_c_type_text):
        (PlainObjectBinding):
        (PlainObjectBinding.get_array_item_c_type_text):
        (AdHocTypeContext):
        (AdHocTypeContext.get_type_name_fix):
        (AdHocTypeContext.add_type):
        (ArrayBinding):
        (ArrayBinding.resolve_inner):
        (ArrayBinding.resolve_inner.ResolveData):
        (ArrayBinding.request_user_runtime_cast):
        (ArrayBinding.request_internal_runtime_cast):
        (ArrayBinding.get_code_generator):
        (ArrayBinding.get_code_generator.CodeGenerator):
        (ArrayBinding.get_code_generator.CodeGenerator.generate_type_builder):
        (ArrayBinding.get_code_generator.CodeGenerator.generate_forward_declaration):
        (ArrayBinding.get_code_generator.CodeGenerator.register_use):
        (ArrayBinding.get_code_generator.CodeGenerator.get_generate_pass_id):
        (ArrayBinding.get_validator_call_text):
        (ArrayBinding.get_in_c_type_text):
        (ArrayBinding.get_array_item_c_type_text):
        (ArrayBinding.get_setter_value_expression_pattern):
        (ArrayBinding.reduce_to_raw_type):
        (RawTypeBinding.get_array_item_c_type_text):
        (ArrayItemHelper):
        (typename):
        (ArrayOf):
        (Traits):

2012-01-31  Antti Koivisto  <antti@apple.com>

        Parent SVGFontFaceElements style declaration to the rule
        https://bugs.webkit.org/show_bug.cgi?id=77421

        Reviewed by Adam Roben.

        For some reason the declaration is parented to the element which adds a bunch of unnecessary special case code.
        The invalidation on mutation is done explicitly by SVGFontFaceElement so that is not affected. The declaration
        is not exposed so the change is not observable with a test.

        * css/CSSFontFaceRule.cpp:
        (WebCore::CSSFontFaceRule::~CSSFontFaceRule):
        * css/CSSMutableStyleDeclaration.h:
        (WebCore::CSSMutableStyleDeclaration::createInline):
        * svg/SVGFontFaceElement.cpp:
        (WebCore::SVGFontFaceElement::SVGFontFaceElement):
        (WebCore::SVGFontFaceElement::parseMappedAttribute):
        (WebCore::SVGFontFaceElement::fontFamily):
        (WebCore::SVGFontFaceElement::rebuildFontFace):
        * svg/SVGFontFaceElement.h:
        
            Remove the unnecessary m_styleDeclaration field, access through m_fontFaceRule instead.

2012-01-31  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Tap highlighting: Support better outlines for multiline inlines
        https://bugs.webkit.org/show_bug.cgi?id=77428

        Reviewed by Simon Hausmann.

        Covered by manual tests.

        Do not use the linesBoundingBox anymore but draw a custom path
        with rounded corners. Inlines are drawn as max 3 rects, first
        line rect, joined middle rect and the rect for the last line.

        * page/GestureTapHighlighter.cpp:
        * platform/graphics/Path.h: Make addBeziersForRoundedRect public.

2012-01-31  Alexei Filippov  <alexeif@chromium.org>

        Web Inspector: show sizes in bytes instead of KB, MB in heap profiler.
        https://bugs.webkit.org/show_bug.cgi?id=77199

        Reviewed by Pavel Feldman.

        * inspector/front-end/DetailedHeapshotGridNodes.js:
        (WebInspector.HeapSnapshotGenericObjectNode.prototype.get data):
        (WebInspector.HeapSnapshotInstanceNode.prototype._enhanceData):
        (WebInspector.HeapSnapshotConstructorNode.prototype.get data):
        (WebInspector.HeapSnapshotDiffNode.prototype.get data):
        * inspector/front-end/UIUtils.js:
        (Number.withThousandsSeparator):

2012-01-26  Hans Wennborg  <hans@chromium.org>

        Speech Input: move MockSpeechInputClient into Chromium DumpRenderTree implementation
        https://bugs.webkit.org/show_bug.cgi?id=77083

        Reviewed by Darin Fisher.

        Remove SpeechInputClientMock. The mock is moving to the DumpRenderTree
        implementation.

        No new tests, just refactoring.

        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/mock/SpeechInputClientMock.cpp: Removed.
        * platform/mock/SpeechInputClientMock.h: Removed.

2012-01-31  Pavel Feldman  <pfeldman@google.com>

        Web Inspector: boost protocol version to 1.0
        https://bugs.webkit.org/show_bug.cgi?id=77408

        Reviewed by Yury Semikhatsky.

        * inspector/Inspector-1.0.json: Copied from Source/WebCore/inspector/Inspector.json.
        * inspector/Inspector.json:

2012-01-31  Roland Steiner  <rolandsteiner@chromium.org>

        <style scoped>: Improve shortcut code for cases where <style scoped> isn't used
        https://bugs.webkit.org/show_bug.cgi?id=77410

        Move shortcut from setupScopingElementStack(), do it at the calling sites instead
        (where a larger chunk of work can be skipped).

        Reviewed by Antti Koivisto.

        No new tests. (refactoring)

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::setupScopingElementStack): remove shortcut code
        (WebCore::CSSStyleSelector::pushParent): add shortcut code
        (WebCore::CSSStyleSelector::matchScopedAuthorRules): factor matching scoped rules out from matchAuthorRules
        (WebCore::CSSStyleSelector::matchAuthorRules): add shortcut code
        * css/CSSStyleSelector.h:
        (CSSStyleSelector): add matchScopedAuthorRules

2012-01-31  Pavel Feldman  <pfeldman@google.com>

        Web Inspector: DOMDebugger.setEventListenerBreakpoint should accept regular DOM event names.
        https://bugs.webkit.org/show_bug.cgi?id=77409

        Reviewed by Yury Semikhatsky.

        * inspector/Inspector.json:
        * inspector/InspectorDOMDebuggerAgent.cpp:
        (WebCore::InspectorDOMDebuggerAgent::setEventListenerBreakpoint):
        (WebCore):
        (WebCore::InspectorDOMDebuggerAgent::setInstrumentationBreakpoint):
        (WebCore::InspectorDOMDebuggerAgent::setBreakpoint):
        (WebCore::InspectorDOMDebuggerAgent::removeEventListenerBreakpoint):
        (WebCore::InspectorDOMDebuggerAgent::removeInstrumentationBreakpoint):
        (WebCore::InspectorDOMDebuggerAgent::removeBreakpoint):
        (WebCore::InspectorDOMDebuggerAgent::pauseOnNativeEventIfNeeded):
        * inspector/InspectorDOMDebuggerAgent.h:
        (InspectorDOMDebuggerAgent):
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::didInstallTimerImpl):
        (WebCore::InspectorInstrumentation::didRemoveTimerImpl):
        (WebCore::InspectorInstrumentation::willHandleEventImpl):
        (WebCore::InspectorInstrumentation::willFireTimerImpl):
        (WebCore::InspectorInstrumentation::pauseOnNativeEventIfNeeded):
        * inspector/InspectorInstrumentation.h:
        (InspectorInstrumentation):
        * inspector/front-end/BreakpointsSidebarPane.js:
        (WebInspector.EventListenerBreakpointsSidebarPane.prototype._setBreakpoint):
        (WebInspector.EventListenerBreakpointsSidebarPane.prototype._removeBreakpoint):

2012-01-31  Pablo Flouret  <pablof@motorola.com>

        Fix compilation errors on build-webkit --debug --no-workers on mac.
        https://bugs.webkit.org/show_bug.cgi?id=75869

        Reviewed by Adam Barth.

        * WebCore.exp.in:

2012-01-30  Konrad Piascik  <kpiascik@rim.com>

        Web Inspector: [BlackBerry] Add BlackBerry UA Strings to the Inspector's UA switcher
        https://bugs.webkit.org/show_bug.cgi?id=77343

        Reviewed by Yury Semikhatsky.

        * inspector/front-end/SettingsScreen.js:
        (WebInspector.SettingsScreen.prototype._createUserAgentSelectRowElement.get const):

2012-01-30  Yury Semikhatsky  <yurys@chromium.org>

        Web Inspector: should be possible to step through all event listeners when event listener breakpoint is hit
        https://bugs.webkit.org/show_bug.cgi?id=77331

        Inspector instrumentation is called before and after each event handler invokation.
        In case inspector front-end is closed it is no-op, otherwise it may stop execution
        on an event listener breakpoint.

        Reviewed by Pavel Feldman.

        Test: inspector/debugger/step-through-event-listeners.html

        * dom/EventTarget.cpp:
        (WebCore::EventTarget::fireEventListeners):
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::willDispatchEventImpl):
        (WebCore::InspectorInstrumentation::willHandleEventImpl):
        (WebCore):
        (WebCore::InspectorInstrumentation::didHandleEventImpl):
        (WebCore::InspectorInstrumentation::didDispatchEventImpl):
        (WebCore::InspectorInstrumentation::willDispatchEventOnWindowImpl):
        (WebCore::InspectorInstrumentation::didDispatchEventOnWindowImpl):
        * inspector/InspectorInstrumentation.h:
        (InspectorInstrumentation):
        (WebCore::InspectorInstrumentation::willHandleEvent):
        (WebCore):
        (WebCore::InspectorInstrumentation::didHandleEvent):

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

        Attach light children after removing a shadow root.
        https://bugs.webkit.org/show_bug.cgi?id=74267

        Reviewed by Ryosuke Niwa.

        Tests: fast/dom/shadow/dynamically-created-shadow-root-expected.html
               fast/dom/shadow/dynamically-created-shadow-root.html:

        * dom/Element.cpp:
        (WebCore::Element::removeShadowRoot):

2012-01-30  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r106324.
        http://trac.webkit.org/changeset/106324
        https://bugs.webkit.org/show_bug.cgi?id=77406

        Broke CCLayerTreeHostTestLayerOcclusion.runMultiThread and
        runSingleThread (Requested by yuzo1 on #webkit).

        * platform/graphics/FloatRect.cpp:
        * platform/graphics/FloatRect.h:
        (WebCore):
        * platform/graphics/chromium/Canvas2DLayerChromium.cpp:
        (WebCore::Canvas2DLayerChromium::paintContentsIfDirty):
        * platform/graphics/chromium/Canvas2DLayerChromium.h:
        (WebCore):
        (Canvas2DLayerChromium):
        * platform/graphics/chromium/ContentLayerChromium.cpp:
        (WebCore::ContentLayerChromium::paintContentsIfDirty):
        * platform/graphics/chromium/ContentLayerChromium.h:
        (WebCore):
        (ContentLayerChromium):
        * platform/graphics/chromium/ImageLayerChromium.cpp:
        (WebCore::ImageLayerChromium::paintContentsIfDirty):
        * platform/graphics/chromium/ImageLayerChromium.h:
        (WebCore):
        (ImageLayerChromium):
        * platform/graphics/chromium/LayerChromium.cpp:
        * platform/graphics/chromium/LayerChromium.h:
        (WebCore):
        (WebCore::LayerChromium::paintContentsIfDirty):
        (LayerChromium):
        * platform/graphics/chromium/RenderSurfaceChromium.h:
        * platform/graphics/chromium/TiledLayerChromium.cpp:
        * platform/graphics/chromium/TiledLayerChromium.h:
        (WebCore):
        * platform/graphics/chromium/cc/CCLayerTreeHost.cpp:
        (WebCore::CCLayerTreeHost::paintContentsIfDirty):
        (WebCore::CCLayerTreeHost::paintMaskAndReplicaForRenderSurface):
        (WebCore::CCLayerTreeHost::paintLayerContents):
        * platform/graphics/chromium/cc/CCLayerTreeHost.h:
        (WebCore):
        * platform/graphics/chromium/cc/CCQuadCuller.cpp:
        (WebCore::enclosedIntRect):
        (WebCore):

2012-01-30  Raymond Liu  <raymond.liu@intel.com>

        Fix ASSERT fail within AudioBus::processWithGainFrom()
        https://bugs.webkit.org/show_bug.cgi?id=76685

        Reviewed by Daniel Bates.

        Test: webaudio/audionode-connect-order.html

        * webaudio/AudioBasicProcessorNode.cpp:
        (WebCore::AudioBasicProcessorNode::AudioBasicProcessorNode):

2012-01-30  Roland Steiner  <rolandsteiner@chromium.org>

        <style scoped>: Implement scoped stylesheets and basic application
        https://bugs.webkit.org/show_bug.cgi?id=73190

        Implementing support for <style scoped>:
        Add a vector stack to CSSStyleSelector that keeps track of encountered scoping elements. This is
        used for O(1) access to all relevant style sheets for a given element.
        Adapt matching of author style sheets to also consult appropriate scoped sheets.
        Finally, prevent style sharing from crossing into/out of scoped style boundaries.

        Reviewed by Antti Koivisto.

        Tests: fast/css/style-scoped/style-scoped-attach.html
               fast/css/style-scoped/style-scoped-basic.html
               fast/css/style-scoped/style-scoped-detach.html
               fast/css/style-scoped/style-scoped-remove-scoped.html
               fast/css/style-scoped/style-scoped-set-scoped.html

        * css/CSSStyleSelector.cpp:
        (RuleSet):
        (WebCore::CSSStyleSelector::CSSStyleSelector): add code for scoped style sheets
        (WebCore::CSSStyleSelector::collectFeatures): ditto
        (WebCore):
        (WebCore::CSSStyleSelector::determineScopingElement): determine whether an author sheet is scoped (and to which scope), or global
        (WebCore::CSSStyleSelector::scopedRuleSetForElement): returns the RuleSet for the <style scoped> contained by the passed-in element (if any), or 0
        (WebCore::CSSStyleSelector::appendAuthorStylesheets): add code for scoped style sheets
        (WebCore::CSSStyleSelector::setupScopingElementStack): determine scoping element ancestors of the given element
        (WebCore::CSSStyleSelector::pushParent): simplify and refactor SelectorChecker::pushParent, as code in CSStyleSelector needs partial access
        (WebCore::CSSStyleSelector::popParent): ditto
        (WebCore::CSSStyleSelector::sortAndTransferMatchedRules): helper function
        (WebCore::CSSStyleSelector::matchAuthorRules): use AuthorRuleSetIterator to iterate over all relevant RuleSets
        (WebCore::CSSStyleSelector::matchRules): adapt for scoped style rules
        (WebCore::CSSStyleSelector::matchAllRules): ditto
        (WebCore::CSSStyleSelector::locateCousinList): prevent style sharing across scope boundaries
        (WebCore::CSSStyleSelector::canShareStyleWithElement): ditto
        (WebCore::CSSStyleSelector::locateSharedStyle): ditto
        (WebCore::CSSStyleSelector::pseudoStyleForElement): changed call to matchAuthorRules
        (WebCore::CSSStyleSelector::styleForPage): add comment
        (WebCore::CSSStyleSelector::checkRegionStyle): add global scope parameter
        (WebCore::CSSStyleSelector::pseudoStyleRulesForElement): changed call to matchAuthorRules
        (WebCore::RuleSet::addRulesFromSheet): adapt for scoped style rules
        * css/CSSStyleSelector.h:
        (CSSStyleSelector):
        (WebCore::CSSStyleSelector::ScopeStackFrame::ScopeStackFrame): struct holding an Element pointer and a RuleSet pointer, to be used in a Vector
        (WebCore::CSSStyleSelector::scopingElementStackIsConsistent): returns if the last seen parent matches the passed-in element
        * css/SelectorChecker.cpp:
        (WebCore::SelectorChecker::setupParentStack): set up the parent stack (refactoring)
        (WebCore::SelectorChecker::pushParent): simplify and refactor
        * css/SelectorChecker.h:
        (WebCore::SelectorChecker::popParent): ditto
        (WebCore::SelectorChecker::parentStackIsEmpty): ditto
        (WebCore::SelectorChecker::parentStackIsConsistent): make parameter const

2012-01-30  Dana Jansens  <danakj@chromium.org>

        [chromium] Compute occlusion during paint loop
        https://bugs.webkit.org/show_bug.cgi?id=76858

        Reviewed by James Robinson.

        New unit tests in TiledLayerChromiumTest.cpp, CCLayerTreeHostCommonTest.cpp, CCLayerTreeHostTest.cpp

        * platform/graphics/FloatRect.cpp:
        (WebCore::enclosedIntRect):
        (WebCore):
        * platform/graphics/FloatRect.h:
        (WebCore):
        * platform/graphics/chromium/Canvas2DLayerChromium.cpp:
        (WebCore::Canvas2DLayerChromium::paintContentsIfDirty):
        * platform/graphics/chromium/Canvas2DLayerChromium.h:
        (Canvas2DLayerChromium):
        * platform/graphics/chromium/ContentLayerChromium.cpp:
        (WebCore::ContentLayerChromium::paintContentsIfDirty):
        * platform/graphics/chromium/ContentLayerChromium.h:
        (ContentLayerChromium):
        * platform/graphics/chromium/ImageLayerChromium.cpp:
        (WebCore::ImageLayerChromium::paintContentsIfDirty):
        * platform/graphics/chromium/ImageLayerChromium.h:
        (ImageLayerChromium):
        * platform/graphics/chromium/LayerChromium.cpp:
        (WebCore::LayerChromium::contentToScreenSpaceTransform):
        (WebCore):
        (WebCore::LayerChromium::addSelfToOccludedScreenSpace):
        (WebCore::LayerChromium::isPaintedAxisAlignedInScreen):
        * platform/graphics/chromium/LayerChromium.h:
        (WebCore):
        (WebCore::LayerChromium::paintContentsIfDirty):
        (LayerChromium):
        * platform/graphics/chromium/RenderSurfaceChromium.h:
        (RenderSurfaceChromium):
        * platform/graphics/chromium/TiledLayerChromium.cpp:
        (WebCore::TiledLayerChromium::addSelfToOccludedScreenSpace):
        * platform/graphics/chromium/TiledLayerChromium.h:
        (WebCore):
        ():
        * platform/graphics/chromium/cc/CCLayerTreeHost.cpp:
        (WebCore::CCLayerTreeHost::paintContentsIfDirty):
        (WebCore::CCLayerTreeHost::paintMaskAndReplicaForRenderSurface):
        (RenderSurfaceRegion):
        (WebCore):
        (WebCore::pushTargetRenderSurfaceRegion):
        (WebCore::popAndPushTargetRenderSurfaceRegion):
        (WebCore::CCLayerTreeHost::paintLayerContents):
        * platform/graphics/chromium/cc/CCLayerTreeHost.h:
        (WebCore):
        ():
        * platform/graphics/chromium/cc/CCQuadCuller.cpp:

2012-01-30  Caio Marcelo de Oliveira Filho  <caio.oliveira@openbossa.org>

        Add ElementAttributeData class to replace internal uses of NamedNodeMap
        https://bugs.webkit.org/show_bug.cgi?id=77233

        Reviewed by Andreas Kling.

        Move part of non-DOM functionality of NamedNodeMap into a separate class. This is
        the first step toward the goal of separating NamedNodeMap from internal attribute
        storage, as described in https://bugs.webkit.org/show_bug.cgi?id=75069.

        The internal attribute storage is exposed as attributeData() in Element, and when
        necessary (because it has no back pointer to Element) via methods in Element.

        No new tests. Except from setClass() change this is just moving the code, no new
        feature was added.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/DOMAllInOne.cpp:
        * dom/Element.cpp:
        (WebCore::Element::idAttributeChanged):
        * dom/Element.h:
        (WebCore::Element::attributeData):
        (WebCore::Element::ensureAttributeData):
        (Element):
        (WebCore::Element::idForStyleResolution):
        * dom/ElementAttributeData.cpp: Added.
        (WebCore):
        (WebCore::ElementAttributeData::setClass): the only caller of this function
        already deal with the case when the element has no class, so don't do it here.
        * dom/ElementAttributeData.h: Added.
        (WebCore):
        (ElementAttributeData):
        (WebCore::ElementAttributeData::clearClass):
        (WebCore::ElementAttributeData::classNames):
        (WebCore::ElementAttributeData::idForStyleResolution):
        (WebCore::ElementAttributeData::setIdForStyleResolution):
        (WebCore::ElementAttributeData::ElementAttributeData):
        * dom/NamedNodeMap.cpp:
        (WebCore::NamedNodeMap::clearAttributes):
        * dom/NamedNodeMap.h:
        (WebCore::NamedNodeMap::attributeData):
        (NamedNodeMap):
        * dom/StyledElement.cpp:
        (WebCore::StyledElement::classAttributeChanged):
        * dom/StyledElement.h:
        (WebCore::StyledElement::classNames):
        * html/ClassList.cpp:
        (WebCore::ClassList::classNames):

2012-01-30  Gregg Tavares  <gman@chromium.org>

        Add Plumming to get graphics error messages to JS Console
        https://bugs.webkit.org/show_bug.cgi?id=77238

        Reviewed by Kenneth Russell.

        No new tests. No change in behavior.

        * html/canvas/WebGLRenderingContext.cpp:
        (WebGLRenderingContextErrorMessageCallback):
        (WebCore::WebGLRenderingContextErrorMessageCallback::WebGLRenderingContextErrorMessageCallback):
        (WebCore::WebGLRenderingContextErrorMessageCallback::onErrorMessage):
        (WebCore::WebGLRenderingContextErrorMessageCallback::~WebGLRenderingContextErrorMessageCallback):
        (WebCore):
        (WebCore::WebGLRenderingContext::create):
        (WebCore::WebGLRenderingContext::initializeNewContext):
        (WebCore::WebGLRenderingContext::~WebGLRenderingContext):
        * html/canvas/WebGLRenderingContext.h:
        (WebGLRenderingContext):
        * platform/graphics/GraphicsContext3D.h:
        (ErrorMessageCallback):
        (WebCore::GraphicsContext3D::ErrorMessageCallback::~ErrorMessageCallback):
        (GraphicsContext3D):
        * platform/graphics/cairo/GraphicsContext3DCairo.cpp:
        (WebCore::GraphicsContext3D::setErrorMessageCallback):
        (WebCore):
        * platform/graphics/efl/GraphicsContext3DEfl.cpp:
        (WebCore::GraphicsContext3D::setErrorMessageCallback):
        (WebCore):
        * platform/graphics/qt/GraphicsContext3DQt.cpp:
        (WebCore::GraphicsContext3D::setErrorMessageCallback):
        (WebCore):

2012-01-30  Anders Carlsson  <andersca@apple.com>

        Simplify RenderLayerCompositor::frameViewDidScroll
        https://bugs.webkit.org/show_bug.cgi?id=77398

        Reviewed by Sam Weinig.

        Remove the scrollPosition parameter from RenderLayerCompositor::frameViewDidScroll; we can just get it
        from the associated FrameView object.

        * page/FrameView.cpp:
        (WebCore::FrameView::scrollPositionChanged):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::frameViewDidChangeSize):
        Call frameViewDidScroll() here instead of setting the scroll layer position explicitly.

        (WebCore::RenderLayerCompositor::frameViewDidScroll):
        (WebCore::RenderLayerCompositor::ensureRootLayer):
        * rendering/RenderLayerCompositor.h:
        (RenderLayerCompositor):

2012-01-30  Pablo Flouret  <pablof@motorola.com>

        Don't select the next selectable index when deselecting an option in select elements with size set to a value greater than one.
        https://bugs.webkit.org/show_bug.cgi?id=76389

        Reviewed by Kent Tamura.

        This behavior matches the rest of the browsers.

        Test: fast/forms/select/option-selecting.html

        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::optionSelectionStateChanged):

2012-01-30  Anders Carlsson  <andersca@apple.com>

        Scrollbars don't show when scrolling on the scrolling thread
        https://bugs.webkit.org/show_bug.cgi?id=77396
        <rdar://problem/10710736>

        Reviewed by Sam Weinig.

        Use ScrollAnimator::scrollToOffsetWithoutAnimation when updating the frame view scroll offset,
        since that function will end up invalidating the scrollbars correctly.

        * page/ScrollingCoordinator.cpp:
        (WebCore::ScrollingCoordinator::didUpdateMainFrameScrollPosition):

2012-01-30  Anders Carlsson  <andersca@apple.com>

        Show repaint counters in individual tiles
        https://bugs.webkit.org/show_bug.cgi?id=77390
        <rdar://problem/10767967>

        Reviewed by Darin Adler.

        * platform/graphics/ca/mac/TileCache.h:
        * platform/graphics/ca/mac/TileCache.mm:
        (WebCore::TileCache::setNeedsDisplayInRect):
        Make sure to invalidate the repaint counter rect if necessary.

        (WebCore::TileCache::drawLayer):
        Draw the repaint counter.

        (WebCore::TileCache::showRepaintCounter):
        New function that determines whether we should show repaint counters for the given tile cache.

        * platform/graphics/ca/mac/WebTileLayer.h:
        * platform/graphics/ca/mac/WebTileLayer.mm:
        (-[WebTileLayer incrementRepaintCount]):
        Add method for getting the repaint count.

2012-01-30  Dan Bernstein  <mitz@apple.com>

        <rdar://problem/10778045> REGRESSION (r91935): text-combine fails
        https://bugs.webkit.org/show_bug.cgi?id=77373

        Reviewed by Darin Adler.

        Removed tests that were failing because of this bug from the Lion skipped
        list.

        * platform/graphics/mac/GlyphPageTreeNodeMac.cpp:
        (WebCore::GlyphPage::fill): Changed to use CTFontGetGlyphsForCharacters,
        rather than wkGetVerticalGlyphsForCharacters, for non-fullwidth fonts.

2012-01-30  Christopher Hutten-Czapski  <chutten@rim.com>

        BlackBerry - Support Proxy-Authenticate headers when a proxy is configured
        https://bugs.webkit.org/show_bug.cgi?id=77361

        Though we have a proxy configured, we might not have the auth
        credentials it requires. Support Proxy-Authenticate for that case.

        Reviewed by George Staikos.

        * platform/network/blackberry/NetworkJob.cpp:
        (WebCore::NetworkJob::handleNotifyHeaderReceived):
        (WebCore::NetworkJob::handleAuthHeader):
        (WebCore::NetworkJob::sendRequestWithCredentials):
        * platform/network/blackberry/NetworkJob.h:
        * platform/network/blackberry/NetworkManager.cpp:
        (WebCore::NetworkManager::startJob):

2012-01-27  James Robinson  <jamesr@chromium.org>

        [chromium] Remove unnecessary retry logic in LayerRendererChromium initialization for accelerated painting
        https://bugs.webkit.org/show_bug.cgi?id=77247

        Reviewed by Kenneth Russell.

        The accelerate painting setting is done differently from other capability-dependent settings for no good reason,
        requiring that we retry initialization with different settings. For all other settings we set the capabilities
        bit to true if the setting is requested and if the required capabilities exist on the underlying context.

        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::create):
        (WebCore::LayerRendererChromium::initialize):
        * platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:
        (WebCore::CCLayerTreeHostImpl::initializeLayerRenderer):

2012-01-30  Brady Eidson  <beidson@apple.com>

        <rdar://problem/10707072>
        Crashes in WebProcess at WebCore::Node::rendererIsNeeded

        Reviewed by Darin Adler.

        In specific circumstances a plugin element can be without a render style at the point in time where
        the page navigated and enters the page cache.

        When this is the cash, the element should not enter into the "custom style for renderer" mode and should
        instead use the default render style machinery.

        Test: plugins/crash-restoring-pluging-page-from-page-cache.html

        * html/HTMLPlugInImageElement.cpp:
        (WebCore::HTMLPlugInImageElement::documentWillSuspendForPageCache): Only setHasCustomStyleForRenderer and 
          forceRecalc if there actually is a custom style to be used.
        (WebCore::HTMLPlugInImageElement::documentDidResumeFromPageCache): Only clearHasCustomStyleForRenderer if there
          actually was a custom style to be cleared.
        (WebCore::HTMLPlugInImageElement::customStyleForRenderer): This should only be called if there actually is a 
          custom style to be used. Otherwise the element would have to fallback to the "normal" RenderStyle which might
          not exist.

2012-01-30  Anders Carlsson  <andersca@apple.com>

        Show debug borders for individual tile cache tiles
        https://bugs.webkit.org/show_bug.cgi?id=77388

        Reviewed by Sam Weinig.

        * platform/graphics/GraphicsLayer.cpp:
        (WebCore::GraphicsLayer::updateDebugIndicators):
        Give tile cache tiles a thin dark blue border.

        * platform/graphics/ca/mac/TileCache.h:
        (WebCore::TileCache::tileDebugBorderWidth):
        (WebCore::TileCache::tileDebugBorderColor):
        Add getters and member variables for the tile debug border width and color.

        * platform/graphics/ca/mac/TileCache.mm:
        (WebCore::TileCache::TileCache):
        Initialize m_tileDebugBorderWidth.

        (WebCore::TileCache::setTileDebugBorderWidth):
        Update the border width of each tile layer.

        (WebCore::TileCache::setTileDebugBorderColor):
        Update the border color of each tile layer.

        (WebCore::TileCache::createTileLayer):
        Set the border color and border width.

        * platform/graphics/ca/mac/WebTileCacheLayer.h:
        * platform/graphics/ca/mac/WebTileCacheLayer.mm:
        (-[WebTileCacheLayer borderColor]):
        (-[WebTileCacheLayer setBorderColor:]):
        (-[WebTileCacheLayer borderWidth]):
        (-[WebTileCacheLayer setBorderWidth:]):
        Call through to the TileCache.

        * platform/graphics/mac/WebLayer.mm:
        (drawLayerContents):
        Don't draw the repaint counter for tile cache layers, each tile will maintain its own repaint counter.

2012-01-30  Rakesh KN  <rakesh.kn@motorola.com>

        single-file input elements should refuse multi-file drags
        https://bugs.webkit.org/show_bug.cgi?id=25913

        Reviewed by Eric Seidel.

        Refuse the multiple file drags onto a single file input element.

        No new tests: Covered by existing tests, updated the expected results.

        * page/DragController.cpp:
        (WebCore::DragController::tryDocumentDrag):
        Setting the dragSession.numberOfItemsToBeAccepted to 0 so that drag operation is none if the
        file input element under mouse is single input type and number of files dragged onto that
        input element are more than 1.

2012-01-30  Dana Jansens  <danakj@chromium.org>

        [chromium] Use region reported painted opaque for draw culling
        https://bugs.webkit.org/show_bug.cgi?id=76015

        Reviewed by James Robinson.

        New unit tests in CCTiledLayerImplTest.cpp, CCQuadCullerTest.cpp, CCLayerTreeHostImplTest.cpp

        * platform/graphics/chromium/LayerChromium.cpp:
        (WebCore::LayerChromium::setOpaque):
        * platform/graphics/chromium/TiledLayerChromium.cpp:
        (UpdatableTile):
        (WebCore::TiledLayerChromium::pushPropertiesTo):
        (WebCore::TiledLayerChromium::prepareToUpdateTiles):
        * platform/graphics/chromium/cc/CCDrawQuad.cpp:
        (WebCore::CCDrawQuad::opaqueRect):
        (WebCore):
        * platform/graphics/chromium/cc/CCDrawQuad.h:
        (CCDrawQuad):
        (WebCore::CCDrawQuad::needsBlending):
        * platform/graphics/chromium/cc/CCQuadCuller.cpp:
        (WebCore::CCQuadCuller::cullOccludedQuads):
        * platform/graphics/chromium/cc/CCSolidColorDrawQuad.cpp:
        (WebCore::CCSolidColorDrawQuad::CCSolidColorDrawQuad):
        * platform/graphics/chromium/cc/CCTileDrawQuad.cpp:
        (WebCore::CCTileDrawQuad::create):
        (WebCore::CCTileDrawQuad::CCTileDrawQuad):
        * platform/graphics/chromium/cc/CCTileDrawQuad.h:
        (CCTileDrawQuad):
        * platform/graphics/chromium/cc/CCTiledLayerImpl.cpp:
        (DrawableTile):
        (WebCore::DrawableTile::opaqueRect):
        (WebCore::DrawableTile::setOpaqueRect):
        (WebCore::CCTiledLayerImpl::appendQuads):
        (WebCore::CCTiledLayerImpl::pushTileProperties):
        * platform/graphics/chromium/cc/CCTiledLayerImpl.h:
        (CCTiledLayerImpl):

2012-01-30  Ryosuke Niwa  <rniwa@webkit.org>

        Crash in previousLinePosition when moving into a root inline box without leaves
        https://bugs.webkit.org/show_bug.cgi?id=76812

        Reviewed by Enrica Casucci.

        The crash was caused by us assuming that every root inline box has at least one leaf,
        which isn't true when we create inline boxes for an empty text run with margin, border, etc...

        Test: editing/selection/move-into-empty-root-inline-box.html

        * editing/visible_units.cpp:
        (WebCore::previousLinePosition):
        (WebCore::nextLinePosition):

2012-01-30  Levi Weintraub  <leviw@chromium.org>

        !m_insideRegionPaint assertion in RenderRegion.cpp is invalid
        https://bugs.webkit.org/show_bug.cgi?id=77372

        Reviewed by David Hyatt.

        Removing the !m_insideRegionPaint assertion that's in three functions in
        RenderRegion. It's triggering in numerous layout tests and isn't valid.

        No new tests as this just removes assertions.

        * rendering/RenderRegion.cpp:
        (WebCore::RenderRegion::setRenderBoxRegionInfo):
        (WebCore::RenderRegion::takeRenderBoxRegionInfo):
        (WebCore::RenderRegion::removeRenderBoxRegionInfo):

2012-01-30  Adrienne Walker  <enne@google.com>

        [chromium] Always pre-reserve scrollbar and scroll corner textures
        https://bugs.webkit.org/show_bug.cgi?id=77251

        Reviewed by James Robinson.

        Add a flag to LayerChromium that says that a layer's textures should
        always be reserved. Prior to painting layers, find all layers marked
        as such and reserve their textures. This will prevent texture memory
        limits from being hit before the root layer's scrollbars are reserved
        and painted.

        * platform/graphics/chromium/LayerChromium.cpp:
        (WebCore::LayerChromium::LayerChromium):
        * platform/graphics/chromium/LayerChromium.h:
        (LayerChromium):
        (WebCore::LayerChromium::reserveTextures):
        (WebCore::LayerChromium::setAlwaysReserveTextures):
        (WebCore::LayerChromium::alwaysReserveTextures):
        * platform/graphics/chromium/TiledLayerChromium.cpp:
        (WebCore::TiledLayerChromium::reserveTextures):
        * platform/graphics/chromium/TiledLayerChromium.h:
        ():
        * platform/graphics/chromium/cc/CCLayerTreeHost.cpp:
        (WebCore::CCLayerTreeHost::updateLayers):
        (WebCore::CCLayerTreeHost::reserveTextures):
        (WebCore):
        * platform/graphics/chromium/cc/CCLayerTreeHost.h:
        ():

2012-01-30  Beth Dakin  <bdakin@apple.com>

        Speculative 32-bit build-fix.

        * WebCore.exp.in:

2012-01-30  Mihnea Ovidenie  <mihnea@adobe.com>

        [CSSRegions]Add support for background-color in region styling
        https://bugs.webkit.org/show_bug.cgi?id=71488

        Reviewed by David Hyatt.

        Based on work by Alexandru Chiculita (achicu@adobe.com).
        Previous patches for region styling were touching RenderObject::style() method. After several attempts to avoid regressions
        (including caching of RenderObject::style() pointer in most used methods), we decided to attempt a different approach:
        Step1: before each region is repainted, we compute the style for each box that falls into the region
        Step2: before paint, we store the box original style
        Step3: paint the region contents using the style in region
        Step4: after paint is finished, we restore the box original style (and store the box style in region for future region paint)

        Tests for region styling are also enabled with this patch.

        * WebCore.exp.in:
        * rendering/RenderFlowThread.cpp:
        (WebCore::RenderFlowThread::clearRenderBoxCustomStyle):
        (WebCore::RenderFlowThread::setRegionRangeForBox):
        * rendering/RenderFlowThread.h:
        ():
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::paint):
        (WebCore::RenderLayer::hitTest):
        * rendering/RenderObject.cpp:
        * rendering/RenderObject.h:
        (WebCore::RenderObject::style):
        (RenderObject):
        * rendering/RenderObjectChildList.cpp:
        (WebCore::RenderObjectChildList::removeChildNode):
        * rendering/RenderRegion.cpp:
        (WebCore::RenderRegion::RenderRegion):
        (WebCore::RenderRegion::setRegionBoxesRegionStyle):
        (WebCore):
        (WebCore::RenderRegion::restoreRegionBoxesOriginalStyle):
        (WebCore::RenderRegion::paintReplaced):
        (WebCore::RenderRegion::setRenderBoxRegionInfo):
        (WebCore::RenderRegion::takeRenderBoxRegionInfo):
        (WebCore::RenderRegion::removeRenderBoxRegionInfo):
        (WebCore::RenderRegion::renderBoxRegionStyle):
        (WebCore::RenderRegion::computeStyleInRegion):
        (WebCore::RenderRegion::clearBoxStyleInRegion):
        * rendering/RenderRegion.h:
        (RenderRegion):
        * rendering/RenderView.cpp:
        (WebCore::RenderView::RenderView):
        * rendering/RenderView.h:
        (WebCore):
        (RenderView):

2012-01-30  Jessie Berlin  <jberlin@apple.com>

        WebCore build exceeds address space on 32-bit Windows builders (again).
        https://bugs.webkit.org/show_bug.cgi?id=77357

        Reviewed by Adam Roben.

        Add an Inspector All-In-One file, but only use it in Release and Production builds.
        This differs from our other All-In-One files, but it is a better approach because it makes
        debugging possible in the Debug configuration (the symbols will be in the correct .obj file
        for the original .cpp files).

        * WebCore.vcproj/WebCore.vcproj:
        Also, let VS have its way with the vcproj file.
        * inspector/InspectorAllInOne.cpp: Added.

2012-01-28  Matthew Delaney  <mdelaney@apple.com>

        Limit periodic flushing inside ImageBufferCG to just Lion
        https://bugs.webkit.org/show_bug.cgi?id=77353
        <rdar://problem/10328309>

        Reviewed by Chris Marrin.

        * platform/graphics/cg/ImageBufferCG.cpp:
        * platform/graphics/cg/ImageBufferDataCG.h:

2012-01-30  Tommy Widenflycht  <tommyw@google.com>

        Memory leak caused by PeerConnection add a NULL media stream
        https://bugs.webkit.org/show_bug.cgi?id=76150

        It was my missunderstanding that the IDL keyword [StrictTypeChecking] also protects against
        null or undefined arguments, it doesn't. Added checks for null pointers.

        Reviewed by Adam Barth.

        Test: fast/mediastream/peerconnection-addstream.html

        * mediastream/PeerConnection.cpp:
        (WebCore::PeerConnection::addStream):
        (WebCore::PeerConnection::removeStream):

2012-01-26  Andy Estes  <aestes@apple.com>

        [Windows] Optionally invert colors when drawing to a WebView's backing store.
        https://bugs.webkit.org/show_bug.cgi?id=77168

        Reviewed by Sam Weinig.

        * css/CSSPrimitiveValueMappings.h: Assert that CompositeDifference is
        not converted to a CSS value. Exposing a new compositing operation to
        CSS is outside the scope of this patch.
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        * platform/graphics/GraphicsTypes.h: Add CompositeDifference as a
        CompositeOperator. Also, remove an outdated comment.
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::setPlatformCompositeOperation): Map
        CompositeDifference to kCGBlendModeDifference.

2012-01-28  Matthew Delaney  <mdelaney@apple.com>

        Limit the shadow offset CG hack to just SL and Lion
        https://bugs.webkit.org/show_bug.cgi?id=77348
        <rdar://problem/10158016>

        Reviewed by Chris Marrin.

        No new tests, current tests cover this.

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

2012-01-30  Beth Dakin  <bdakin@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=77263
        PlatformScreenMac should not rely on NSWindow for important bits of data

        Reviewed by Geoff Garen.

        The main problem is that we cannot rely on the NSWindow for information about 
        the deviceScaleFactor because we cannot access an NSWindow from within 
        WebCore for WebKit2 windows. Instead, we can fetch it from 
        WebCore::deviceScaleFactor(), but we need a Frame to call that. So 
        screenAvailableRect and screenRect both now take a FrameView* instead of a 
        Widget*. All existing call sites actually sent a FrameView in anyway, so this 
        is not a big change, but it does require touching a lot of platforms.
        * WebCore.exp.in:
        * platform/PlatformScreen.h:
        (WebCore):
        * platform/blackberry/PlatformScreenBlackBerry.cpp:
        (WebCore::screenAvailableRect):
        (WebCore::screenRect):
        * platform/chromium/PlatformScreenChromium.cpp:
        (WebCore::screenRect):
        (WebCore::screenAvailableRect):
        * platform/chromium/PlatformSupport.h:
        (WebCore):
        (PlatformSupport):
        ():
        * platform/efl/PlatformScreenEfl.cpp:
        (WebCore::screenRect):
        (WebCore::screenAvailableRect):
        * platform/gtk/PlatformScreenGtk.cpp:
        (WebCore::screenRect):
        (WebCore::screenAvailableRect):
        * platform/qt/PlatformScreenQt.cpp:
        (WebCore::screenRect):
        (WebCore::screenAvailableRect):
        * platform/win/PlatformScreenWin.cpp:
        (WebCore::screenRect):
        (WebCore::screenAvailableRect):
        * platform/wx/ScreenWx.cpp:
        (WebCore::screenRect):
        (WebCore::screenAvailableRect):

        The Mac-only functions toUserSpace() and toDeviceSpace() were also updated to 
        take a parameter for the deviceScaleFactor.
        * platform/mac/PlatformScreenMac.mm:
        (WebCore::screenRect):
        (WebCore::screenAvailableRect):
        (WebCore::toUserSpace):
        (WebCore::toDeviceSpace):

2012-01-30  Antti Koivisto  <antti@apple.com>

        Kill CSSMutableStyleDeclarationConstIterator
        https://bugs.webkit.org/show_bug.cgi?id=77342

        Reviewed by Sam Weinig.

        CSSMutableStyleDeclaration is an array and should be iterated using an index. This simplifies the code.

        * css/CSSMutableStyleDeclaration.cpp:
        (WebCore::CSSMutableStyleDeclaration::copyPropertiesFrom):
        (WebCore::CSSMutableStyleDeclaration::removeProperty):
        (WebCore::CSSMutableStyleDeclaration::setProperty):
        (WebCore::CSSMutableStyleDeclaration::setPropertyInternal):
        (WebCore::CSSMutableStyleDeclaration::parseDeclaration):
        (WebCore::CSSMutableStyleDeclaration::addParsedProperties):
        (WebCore::CSSMutableStyleDeclaration::addParsedProperty):
        (WebCore::CSSMutableStyleDeclaration::merge):
        (WebCore::CSSMutableStyleDeclaration::removePropertiesInSet):
        * css/CSSMutableStyleDeclaration.h:
        (WebCore):
        (WebCore::CSSMutableStyleDeclaration::createForSVGFontFaceElement):
        (CSSMutableStyleDeclaration):
        * css/CSSStyleDeclaration.cpp:
        (WebCore::CSSStyleDeclaration::CSSStyleDeclaration):
        * css/CSSStyleDeclaration.h:
        (CSSStyleDeclaration):
        ():
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::styleForKeyframe):
        (WebCore::CSSStyleSelector::applyDeclaration):
        * editing/EditingStyle.cpp:

2012-01-30  Michael Saboff  <msaboff@apple.com>

        Dromaeo tests call parseSimpleLengthValue() on 8 bit strings
        https://bugs.webkit.org/show_bug.cgi?id=76649

        Reviewed by Geoffrey Garen.

        No functionality change, therefore no new tests.

        Added 8 bit patch for parseSimpleLengthValue().

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

2012-01-30  Michael Saboff  <msaboff@apple.com>

        WebCore decodeEscapeSequences unnecessarily converts 8 bit strings to 16 bit when decoding.
        https://bugs.webkit.org/show_bug.cgi?id=76648

        Reviewed by Geoffrey Garen.

        Using new overloaded append(String&, offset, length)  member to build result string.
        The new member properly handles 8/16 bit-ness of strings.

        Functionality not changed, therefore no new tests.

        * platform/text/DecodeEscapeSequences.h:
        (WebCore::decodeEscapeSequences):

2012-01-30  Pavel Feldman  <pfeldman@google.com>

        Not reviewed: follow up to r105625, use proper event categoty in inspector frontend.

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

2012-01-30  Parag Radke  <nrqv63@motorola.com>

        REGRESSION (r82580): Reproducible crash in CSSPrimitiveValue::computeLengthDouble
        https://bugs.webkit.org/show_bug.cgi?id=61989

        Reviewed by Simon Fraser.

        According to css3 specs when font-size is specified in 'rems' for an element implies the font-size
        of the root element. In this case as HTML element has a property 'display:none' and hence renderer 
        is NULL causes this crash.

        Test: fast/css/fontsize-unit-rems-crash.html

        * css/CSSPrimitiveValue.cpp:
        (WebCore::CSSPrimitiveValue::computeLengthDouble):
        Added a null check for the root element's RenderStyle as it can be null in case of html has a property
        hidden or display:none.

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

        [Qt] WKTR: Use a software rendering pipiline when running tests.
        https://bugs.webkit.org/show_bug.cgi?id=76708

        Reviewed by Kenneth Rohde Christiansen.

        * platform/graphics/qt/TextureMapperQt.cpp: Allow setting the context to null.
        (WebCore::TextureMapperQt::setGraphicsContext):
        * platform/graphics/qt/TextureMapperQt.h:
        (WebCore::TextureMapperQt::initialize):

2012-01-27  Enrica Casucci  <enrica@apple.com>

        Remove all references to NSPasteboard objects from the Pasteboard
        class interface on Mac.
        https://bugs.webkit.org/show_bug.cgi?id=77261
        
        This is cleanup work needed as first step in the direction of
        removing access to NSPasteboard from the WebProcess.
        This way all access to the NSPasteboard object are internal to
        the class.
        Removed static methods taking NSPasteboard as paramenter and changed
        the constructor of the class to take the pasteboard name instead of
        the NSPasteboard object.

        Reviewed by Alexey Proskuryakov.

        No new tests. There is no change in behavior.

        * editing/Editor.cpp: Removed ununsed private method writeSelectionToPasteboard.
        (WebCore):
        * editing/Editor.h: Ditto.
        (Editor):
        ():
        * editing/mac/EditorMac.mm:
        (WebCore::Editor::writeSelectionToPasteboard):
        (WebCore::Editor::readSelectionFromPasteboard):
        * platform/Pasteboard.h:
        (Pasteboard):
        * platform/mac/ClipboardMac.mm:
        (WebCore::ClipboardMac::writeRange):
        (WebCore::ClipboardMac::writePlainText):
        (WebCore::ClipboardMac::writeURL):
        * platform/mac/DragDataMac.mm:
        (WebCore::DragData::asPlainText):
        (WebCore::DragData::asURL):
        (WebCore::DragData::asFragment):
        * platform/mac/PasteboardMac.mm:
        (WebCore::Pasteboard::generalPasteboard):
        (WebCore::Pasteboard::Pasteboard):
        (WebCore::Pasteboard::writeSelectionForTypes): Added.
        (WebCore::Pasteboard::writePlainText):
        (WebCore::Pasteboard::writeSelection):
        (WebCore::Pasteboard::writeURLForTypes): Added.
        (WebCore::Pasteboard::writeURL):
        (WebCore::Pasteboard::writeImage):

2012-01-29  Antti Koivisto  <antti@apple.com>

        Reduce non-CSSOM API of CSSStyleDeclaration
        https://bugs.webkit.org/show_bug.cgi?id=77299

        Reviewed by Andreas Kling.

        CSSStyleDeclaration should expose the CSSOM API only. Subclasses should expose the internal API only. 
        This will move us closer to being able to split the CSSOM API from the internal implementation.
        
        - Make CSSStyleDeclaration CSSOM functions virtual, internal functions non-virtual.
        - Move implementations to subclasses (CSSComputedStyleDeclaration, CSSMutableStyleDeclaration).
        - Make CSSOM functions in the subclasses private (making it harder to invoke them internally).
        - Switch a bunch of places to use internal API instead of CSSOM.

        * bindings/v8/custom/V8CSSStyleDeclarationCustom.cpp:
        (WebCore::V8CSSStyleDeclaration::namedPropertyGetter):
        (WebCore::V8CSSStyleDeclaration::namedPropertySetter):
        
            Switch to *Internal versions of the CSSOM functions.
        
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore):
        (WebCore::CSSComputedStyleDeclaration::length):
        (WebCore::CSSComputedStyleDeclaration::cssPropertyMatches):
        (WebCore::CSSComputedStyleDeclaration::copyPropertiesInSet):
        
            Move copyPropertiesInSet to subclasses, devirtualize.
            
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        (WebCore::CSSComputedStyleDeclaration::getPropertyValue):
        (WebCore::CSSComputedStyleDeclaration::getPropertyPriority):
        (WebCore::CSSComputedStyleDeclaration::getPropertyShorthand):
        (WebCore::CSSComputedStyleDeclaration::isPropertyImplicit):
        (WebCore::CSSComputedStyleDeclaration::setProperty):
        (WebCore::CSSComputedStyleDeclaration::removeProperty):
        * css/CSSComputedStyleDeclaration.h:
        (CSSComputedStyleDeclaration):
        * css/CSSFontFaceRule.cpp:
        (WebCore::CSSFontFaceRule::cssText):
        * css/CSSMutableStyleDeclaration.cpp:
        (WebCore::CSSMutableStyleDeclaration::length):
        (WebCore::CSSMutableStyleDeclaration::asText):
        (WebCore::CSSMutableStyleDeclaration::cssText):
        (WebCore):
        (WebCore::CSSMutableStyleDeclaration::getPropertyCSSValue):
        (WebCore::CSSMutableStyleDeclaration::getPropertyValue):
        (WebCore::CSSMutableStyleDeclaration::getPropertyPriority):
        (WebCore::CSSMutableStyleDeclaration::getPropertyShorthand):
        (WebCore::CSSMutableStyleDeclaration::isPropertyImplicit):
        (WebCore::CSSMutableStyleDeclaration::setProperty):
        (WebCore::CSSMutableStyleDeclaration::removeProperty):
        (WebCore::CSSMutableStyleDeclaration::copyPropertiesInSet):
        
            Move copyPropertiesInSet to subclasses, devirtualize.
        
        (WebCore::CSSMutableStyleDeclaration::cssPropertyMatches):
        (WebCore::CSSMutableStyleDeclaration::removeEquivalentProperties):
        
            Move diff() to CSSMutableStyleDeclaration, rename to removeEquivalentProperties, switch to mutate
            this object instead of the argument object.
    
        * css/CSSMutableStyleDeclaration.h:
        (CSSMutableStyleDeclaration):
        (WebCore::CSSMutableStyleDeclaration::propertyCount):
        (WebCore::CSSMutableStyleDeclaration::isEmpty):
        (WebCore::CSSMutableStyleDeclaration::propertyAt):
        
            Expose properties and property count internally (iterator should be removed in favor of these).
        
        * css/CSSStyleDeclaration.cpp:
        (WebCore):
        * css/CSSStyleDeclaration.h:
        (CSSStyleDeclaration):
        (WebCore::CSSStyleDeclaration::getPropertyCSSValueInternal):
        (WebCore::CSSStyleDeclaration::getPropertyValueInternal):
        (WebCore::CSSStyleDeclaration::setPropertyInternal):
        
            Add *Internal versions of some CSSOM APIs to support some editing and bindings uses.
            These take propertyIDs instead of strings names.

        * css/CSSStyleRule.cpp:
        (WebCore::CSSStyleRule::cssText):
        * css/CSSStyleSelector.cpp:
        (WebCore::leftToRightDeclaration):
        (WebCore::rightToLeftDeclaration):
        (WebCore::CSSStyleSelector::collectMatchingRulesForList):
        (WebCore::CSSStyleSelector::matchPageRulesForList):
        * css/WebKitCSSKeyframeRule.cpp:
        (WebCore::WebKitCSSKeyframeRule::cssText):
        * dom/StyledElement.cpp:
        (WebCore::StyledElement::updateStyleAttribute):
        * editing/ApplyStyleCommand.cpp:
        (WebCore::ApplyStyleCommand::applyRelativeFontStyleChange):
        (WebCore::ApplyStyleCommand::removeEmbeddingUpToEnclosingBlock):
        (WebCore::ApplyStyleCommand::applyInlineStyleToNodeRange):
        (WebCore::ApplyStyleCommand::applyInlineStyleToPushDown):
        (WebCore::ApplyStyleCommand::addBlockStyle):
        (WebCore::ApplyStyleCommand::addInlineStyleIfNeeded):
        * editing/EditingStyle.cpp:
        ():
        (WebCore::copyEditingProperties):
        (WebCore):
        (WebCore::propertyCSSValue):
        (WebCore::getRGBAFontColor):
        (WebCore::EditingStyle::overrideWithStyle):
        (WebCore::EditingStyle::removeStyleAddedByNode):
        (WebCore::EditingStyle::removeStyleConflictingWithStyleOfNode):
        (WebCore::EditingStyle::triStateOfStyle):
        (WebCore::EditingStyle::styleIsPresentInComputedStyleOfNode):
        (WebCore::EditingStyle::prepareToApplyAt):
        (WebCore::removePropertiesInStyle):
        (WebCore::EditingStyle::removeStyleFromRulesAndContext):
        (WebCore::EditingStyle::removePropertiesInElementDefaultStyle):
        (WebCore::StyleChange::StyleChange):
        (WebCore::fontWeightIsBold):
        (WebCore::getPropertiesNotIn):
        (WebCore::getIdentifierValue):
        (WebCore::hasTransparentBackgroundColor):
        * editing/EditingStyle.h:
        
            Adapt to changes.
    
        (WebCore):
        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::removeRedundantStylesAndKeepStyleSpanInline):
        (WebCore::handleStyleSpansBeforeInsertion):
        (WebCore::ReplaceSelectionCommand::handleStyleSpans):
        * editing/mac/EditorMac.mm:
        (WebCore::styleForSelectionStart):
        * editing/markup.cpp:
        (WebCore::StyledMarkupAccumulator::appendStyleNodeOpenTag):
        (WebCore::StyledMarkupAccumulator::appendElement):
        * html/ImageDocument.cpp:
        (WebCore::ImageDocument::resizeImageToFit):
        (WebCore::ImageDocument::restoreImageSize):
        (WebCore::ImageDocument::windowSizeChanged):
        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::setFont):
        * html/canvas/CanvasStyle.cpp:
        (WebCore::currentColor):
        * inspector/InspectorStyleSheet.cpp:
        (WebCore::InspectorStyleSheet::revalidateStyle):
        * page/PageSerializer.cpp:
        (WebCore::PageSerializer::retrieveResourcesForCSSDeclaration):
        * rendering/RenderTreeAsText.cpp:
        (WebCore::isEmptyOrUnstyledAppleStyleSpan):
        * svg/SVGStyledElement.cpp:
        (WebCore::SVGStyledElement::getPresentationAttribute):

2012-01-30  Pavel Feldman  <pfeldman@google.com>

        Web Inspector: protocol validator should fail if one of response fields turns optional
        https://bugs.webkit.org/show_bug.cgi?id=76452

        Reviewed by Yury Semikhatsky.

        * inspector/Inspector-0.1.json:
        * inspector/Inspector.json:
        * inspector/generate-inspector-protocol-version:
        (compare_commands):
        (compare_events):
        (compare_params_list):
        (compare_types):
        (self_test):

2012-01-30  Yury Semikhatsky  <yurys@chromium.org>

        Web Inspector: keyboard navigation through comparison view in heap profiler should update retainers view
        https://bugs.webkit.org/show_bug.cgi?id=77326

        Keyboard navigation in the detailed heap snapshot view now updates retainers view.

        Reviewed by Pavel Feldman.

        * inspector/front-end/DataGrid.js: Added SelectedNode/DeselectedNode events to DataGrid.
        (WebInspector.DataGridNode.prototype.select):
        (WebInspector.DataGridNode.prototype.deselect):
        * inspector/front-end/DetailedHeapshotView.js:
        (WebInspector.DetailedHeapshotView.prototype._selectionChanged):
        (WebInspector.DetailedHeapshotView.prototype._setRetainmentDataGridSource):

2012-01-30  Yury Semikhatsky  <yurys@chromium.org>

        Unreviewed. Fix inspector front-end compilation.

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

2012-01-30  Roland Steiner  <rolandsteiner@chromium.org>

        Node::parentOrHostElement(): Node::shadowHost() already returns an Element*
        https://bugs.webkit.org/show_bug.cgi?id=77332

        Reviewed by Kent Tamura.

        No new tests. (simple refactoring)

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

2012-01-30  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix make distcheck.

        * GNUmakefile.am: Add idl files in Source/WebCore/html/shadow/ to
        EXTRA_DIST.
        * GNUmakefile.list.am: Add missing files.

2012-01-27  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: TabbedEditorContainer should save open tabs.
        https://bugs.webkit.org/show_bug.cgi?id=76912

        Reviewed by Pavel Feldman.

        Test: inspector/tabbed-editors-history.html

        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype._uiSourceCodeAdded):
        (WebInspector.ScriptsPanel.prototype._reset):
        (WebInspector.ScriptsPanel.prototype._showFile):
        (WebInspector.ScriptsPanel.prototype._updateExecutionLine):
        (WebInspector.ScriptsPanel.prototype._editorSelected):
        (WebInspector.EditorContainer.prototype.uiSourceCodeAdded):
        (WebInspector.ScriptsPanel.SingleFileEditorContainer.prototype.showFile):
        (WebInspector.ScriptsPanel.SingleFileEditorContainer.prototype.reset):
        * inspector/front-end/TabbedEditorContainer.js:
        (WebInspector.TabbedEditorContainer):
        (WebInspector.TabbedEditorContainer.prototype.showFile):
        (WebInspector.TabbedEditorContainer.prototype._editorClosedByUserAction):
        (WebInspector.TabbedEditorContainer.prototype._editorSelectedByUserAction):
        (WebInspector.TabbedEditorContainer.prototype._updateHistory.tabIdToURL):
        (WebInspector.TabbedEditorContainer.prototype._updateHistory):
        (WebInspector.TabbedEditorContainer.prototype._appendFileTab):
        (WebInspector.TabbedEditorContainer.prototype._tabClosed):
        (WebInspector.TabbedEditorContainer.prototype._tabSelected):
        (WebInspector.TabbedEditorContainer.prototype.reset):
        (WebInspector.TabbedEditorContainer.History):
        (WebInspector.TabbedEditorContainer.History.prototype.index):
        (WebInspector.TabbedEditorContainer.History.prototype.update):
        (WebInspector.TabbedEditorContainer.History.prototype.remove):
        (WebInspector.TabbedEditorContainer.History.prototype.save):
        * inspector/front-end/TabbedPane.js:
        (WebInspector.TabbedPane.prototype.appendTab):
        (WebInspector.TabbedPane.prototype.closeTab):
        (WebInspector.TabbedPane.prototype._innerCloseTab):
        (WebInspector.TabbedPane.prototype.closeAllTabs):
        (WebInspector.TabbedPane.prototype.lastOpenedTabIds):
        (WebInspector.TabbedPane.prototype._tabsSelectChanged):

2012-01-30  Alexander Pavlov  <apavlov@chromium.org>

        Web Inspector: [Styles] Unable to paste and subsequently edit multiple properties in the Styles pane
        https://bugs.webkit.org/show_bug.cgi?id=77209

        Reviewed by Pavel Feldman.

        Check if the property value contains a ";" before kicking the freeflow text update.

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

2012-01-30  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Change Open Resource and Go To function shortcuts in scripts panel.
        https://bugs.webkit.org/show_bug.cgi?id=77321

        Reviewed by Pavel Feldman.

        * inspector/front-end/FilteredItemSelectionDialog.js:
        (WebInspector.JavaScriptOutlineDialog.createShortcut):
        (WebInspector.OpenResourceDialog.createShortcut):
        * inspector/front-end/ScriptsPanel.js:

2012-01-30  Yury Semikhatsky  <yurys@chromium.org>

        Web Inspector: hide function popover in heap snapshot view before navigating to the function definition
        https://bugs.webkit.org/show_bug.cgi?id=77330

        Reviewed by Pavel Feldman.

        * inspector/front-end/DetailedHeapshotView.js:
        (WebInspector.DetailedHeapshotView.prototype.willHide):

2012-01-30  Jonathan Dong  <jonathan.dong@torchmobile.com.cn>

        [BlackBerry] Credential backing store implementation
        https://bugs.webkit.org/show_bug.cgi?id=76761

        Reviewed by Antonio Gomes.

        Implemented credential backing store database and related
        operations in class CredentialBackingStore.

        * platform/network/blackberry/CredentialBackingStore.cpp:
        (WebCore::CredentialBackingStore::~CredentialBackingStore):
        (WebCore::CredentialBackingStore::open):
        (WebCore::CredentialBackingStore::close):
        (WebCore::CredentialBackingStore::addLogin):
        (WebCore::CredentialBackingStore::updateLogin):
        (WebCore::CredentialBackingStore::hasLogin):
        (WebCore::CredentialBackingStore::getLogin):
        (WebCore::CredentialBackingStore::removeLogin):
        (WebCore::CredentialBackingStore::clear):

2012-01-30  Allan Sandfeld Jensen  <allan.jensen@nokia.com>

        Only send resize events when layout size changes.
        https://bugs.webkit.org/show_bug.cgi?id=77212

        When using fixed layout the widget size is the size of content, therefore
        resize checks must check against layoutsize and not widget size.

        Reviewed by Kenneth Rohde Christiansen.

        Needs to be manual tests because the test framework does not currently
        support testing fixed layout.

        Tests: ManualTests/resize-events.html

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

2012-01-30  Pavel Feldman  <pfeldman@google.com>

        Web Inspector: TimelinePanel does not respect InspectorFrontendHost.canSaveAs
        https://bugs.webkit.org/show_bug.cgi?id=77301

        Reviewed by Vsevolod Vlasov.

        * inspector/front-end/TimelinePanel.js:
        (WebInspector.TimelinePanel.prototype._registerShortcuts):

2012-01-30  Nikolas Zimmermann  <nzimmermann@rim.com>

        Not reviewed. Fix Clang build for real after r106218.

        * inspector/CodeGeneratorInspector.py:
        (Generator.go): Add virtual destructor to the ABCs.

2012-01-30  Shinya Kawanaka  <shinyak@google.com>

        No need to keep anonymous RenderBlock in DETAILS.
        https://bugs.webkit.org/show_bug.cgi?id=77322

        Reviewed by Hajime Morita.

        Anonymous RenderBlock of DETAILS element was not squashed when detaching them.
        However, it should be removed.

        No new tests. Should be covered by existing tests.

        * rendering/RenderBlock.cpp:
        (WebCore::canMergeContiguousAnonymousBlocks):

2012-01-30  Zoltan Herczeg  <zherczeg@webkit.org>

        Custom written CSS lexer
        https://bugs.webkit.org/show_bug.cgi?id=70107

        Rubber Stamped by Csaba Osztrogonác.

        Do not advance pointer at the end of input, just
        keep returning with END_TOKEN.

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

2012-01-30  Shinya Kawanaka  <shinyak@google.com>

        The query selector for HTMLContentElement should follow the shadow dom spec.
        https://bugs.webkit.org/show_bug.cgi?id=75946

        Reviewed by Hajime Morita.

        Checks the query selector of HTMLContentElement is valid.
        If not valid, the selector won't match anything, and shows fallback element.

        Test: fast/dom/shadow/content-selector-query.html

        * html/shadow/ContentSelectorQuery.cpp:
        (WebCore::ContentSelectorQuery::ContentSelectorQuery):
        (WebCore::ContentSelectorQuery::isValidSelector):
        (WebCore::ContentSelectorQuery::matches):
          When a select query is not valid, any element won't be matched.
        (WebCore::validateSubSelector):
        (WebCore::validateSelector):
        (WebCore::ContentSelectorQuery::validateSelectorList):
          Validate selectors.
        * html/shadow/ContentSelectorQuery.h:
        * html/shadow/HTMLContentElement.cpp:
        (WebCore::HTMLContentElement::isSelectValid):
          Returns true if select attribute is valid.
        * html/shadow/HTMLContentElement.h:
        * testing/Internals.cpp:
        (WebCore::Internals::isValidContentSelect):
        * testing/Internals.h:
        * testing/Internals.idl:

2012-01-30  Hans Wennborg  <hans@chromium.org>

        Unreviewed, rolling out r106219.
        http://trac.webkit.org/changeset/106219
        https://bugs.webkit.org/show_bug.cgi?id=77083

        This broke Chromium's test_shell.

        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/mock/SpeechInputClientMock.cpp: Added.
        (WebCore):
        (WebCore::SpeechInputClientMock::SpeechInputClientMock):
        (WebCore::SpeechInputClientMock::setListener):
        (WebCore::SpeechInputClientMock::startRecognition):
        (WebCore::SpeechInputClientMock::stopRecording):
        (WebCore::SpeechInputClientMock::cancelRecognition):
        (WebCore::SpeechInputClientMock::addRecognitionResult):
        (WebCore::SpeechInputClientMock::clearResults):
        (WebCore::SpeechInputClientMock::timerFired):
        * platform/mock/SpeechInputClientMock.h: Added.
        (WebCore):
        (SpeechInputClientMock):

2012-01-30  Yury Semikhatsky  <yurys@chromium.org>

        Unreviewed. Clang build fix after r106218

        * inspector/CodeGeneratorInspector.py:

2012-01-30  ChangSeok Oh  <shivamidow@gmail.com>

        Make GraphicsContext3DPrivate of GTK port shareable.
        https://bugs.webkit.org/show_bug.cgi?id=77296

        Reviewed by Eric Seidel.

        GraphicsContext3DPrivate.cpp/h of GTK port look shareable with another port
        using glx backend for WebGL. For example, EFL port.
        Moved GraphicsContext3DPrivate.cpp and its header into Source/WebCore/platform/graphics/glx.

        No new tests required, because of no new feature.

        * GNUmakefile.am:
        * GNUmakefile.list.am:
        * platform/graphics/glx/GraphicsContext3DPrivate.cpp: Renamed from Source/WebCore/platform/graphics/gtk/GraphicsContext3DPrivate.cpp.
        (sharedDisplay):
        (WebCore):
        (WebCore::activeGraphicsContexts):
        (WebCore::GraphicsContext3DPrivate::addActiveGraphicsContext):
        (WebCore::GraphicsContext3DPrivate::removeActiveGraphicsContext):
        (WebCore::GraphicsContext3DPrivate::cleanupActiveContextsAtExit):
        (WebCore::GraphicsContext3DPrivate::create):
        (WebCore::GraphicsContext3DPrivate::createPbufferContext):
        (WebCore::GraphicsContext3DPrivate::createPixmapContext):
        (WebCore::GraphicsContext3DPrivate::GraphicsContext3DPrivate):
        (WebCore::GraphicsContext3DPrivate::~GraphicsContext3DPrivate):
        (WebCore::GraphicsContext3DPrivate::makeContextCurrent):
        * platform/graphics/glx/GraphicsContext3DPrivate.h: Renamed from Source/WebCore/platform/graphics/gtk/GraphicsContext3DPrivate.h.
        (WebCore):
        (GraphicsContext3DPrivate):

2012-01-26  Hans Wennborg  <hans@chromium.org>

        Speech Input: move MockSpeechInputClient into Chromium DumpRenderTree implementation
        https://bugs.webkit.org/show_bug.cgi?id=77083

        Reviewed by Darin Fisher.

        Remove SpeechInputClientMock. The mock is moving to the DumpRenderTree
        implementation.

        No new tests, just refactoring.

        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/mock/SpeechInputClientMock.cpp: Removed.
        * platform/mock/SpeechInputClientMock.h: Removed.

2012-01-30  Peter Rybin  <peter.rybin@gmail.com>

        Web Inspector: CodeGeneratorInspector.py: clean InspectorBackendDispatcher.h
        https://bugs.webkit.org/show_bug.cgi?id=77062

        Reviewed by Yury Semikhatsky.

        Code generator is changed. Now it generates InspectorBackendDispatcher
        as an abstract class so that implementation details could be fully
        hidden in .cpp file in a separate 'impl' class. This should make .h
        file more clear.
        Also new formal interfaces to domain agents are generated. This is an
        improvement over the current case when interfaces to agents are
        definen implicitly at calling sites.

        * inspector/CodeGeneratorInspector.py:
        (RawTypes):
        (RawTypes.OutputPassModel):
        (RawTypes.OutputPassModel.ByPointer):
        (RawTypes.OutputPassModel.ByPointer.get_argument_prefix):
        (RawTypes.OutputPassModel.ByPointer.get_parameter_type_suffix):
        (RawTypes.OutputPassModel.ByReference):
        (RawTypes.OutputPassModel.ByReference.get_argument_prefix):
        (RawTypes.OutputPassModel.ByReference.get_parameter_type_suffix):
        (RawTypes.BaseType.is_event_param_check_optional):
        (RawTypes.String):
        (RawTypes.String.get_output_pass_model):
        (RawTypes.String.is_heavy_value):
        (RawTypes.Int):
        (RawTypes.Int.get_output_pass_model):
        (RawTypes.Int.is_heavy_value):
        (RawTypes.Number):
        (RawTypes.Number.get_output_pass_model):
        (RawTypes.Number.is_heavy_value):
        (RawTypes.Bool.get_c_param_type):
        (RawTypes.Bool):
        (RawTypes.Bool.get_output_pass_model):
        (RawTypes.Bool.is_heavy_value):
        (RawTypes.Object):
        (RawTypes.Object.get_output_pass_model):
        (RawTypes.Object.is_heavy_value):
        (RawTypes.Any.get_c_initializer):
        (RawTypes.Any):
        (RawTypes.Any.get_output_pass_model):
        (RawTypes.Any.is_heavy_value):
        (RawTypes.Array):
        (RawTypes.Array.get_output_pass_model):
        (RawTypes.Array.is_heavy_value):
        (InspectorBackendDispatcherImpl):
        (void):
        (Generator):
        (Generator.go):
        (Generator.process_command):
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::connectFrontend):
        * inspector/WorkerInspectorController.cpp:
        (WebCore::WorkerInspectorController::connectFrontend):

2012-01-29  Zoltan Herczeg  <zherczeg@webkit.org>

        Custom written CSS lexer
        https://bugs.webkit.org/show_bug.cgi?id=70107

        Reviewed by Antti Koivisto and Oliver Hunt.

        This patch replaces the flex based CSS lexer to a
        new, custom written one. The new code is more
        than 2 times faster according to oprofile and CPU
        cycle counters.

        The code structure is quite straightforward: it choose
        the possible token group based on the first character
        and employ utility functions to parse the longer than
        one character long ones. Most of the utilities are inline
        to make the lexer fast.

        All build systems updated. Including removing the flex support.

        Existing tests cover this feature.

        * CMakeLists.txt:
        * DerivedSources.make:
        * DerivedSources.pri:
        * GNUmakefile.am:
        * GNUmakefile.list.am:
        * WebCore.gyp/WebCore.gyp:
        * WebCore.gyp/scripts/action_maketokenizer.py: Removed.
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSParser.cpp:
        (WebCore::CSSParser::CSSParser):
        (WebCore::CSSParser::setupParser):
        (WebCore::parseSimpleLengthValue):
        (WebCore::mightBeRGBA):
        (WebCore::mightBeRGB):
        ():
        (WebCore::isCSSLetter):
        (WebCore):
        (WebCore::isCSSEscape):
        (WebCore::isURILetter):
        (WebCore::isIdentifierStartAfterDash):
        (WebCore::isEqualToCSSIdentifier):
        (WebCore::checkAndSkipEscape):
        (WebCore::skipWhiteSpace):
        (WebCore::CSSParser::isIdentifierStart):
        (WebCore::CSSParser::checkAndSkipString):
        (WebCore::CSSParser::parseEscape):
        (WebCore::CSSParser::parseIdentifier):
        (WebCore::CSSParser::parseString):
        (WebCore::CSSParser::parseURI):
        (WebCore::CSSParser::parseUnicodeRange):
        (WebCore::CSSParser::parseNthChild):
        (WebCore::CSSParser::parseNthChildExtra):
        (WebCore::CSSParser::detectFunctionTypeToken):
        (WebCore::CSSParser::detectMediaQueryToken):
        (WebCore::CSSParser::detectNumberToken):
        (WebCore::CSSParser::detectDashToken):
        (WebCore::CSSParser::detectAtToken):
        (WebCore::CSSParser::lex):
        (WebCore::CSSParser::markSelectorListStart):
        (WebCore::CSSParser::markSelectorListEnd):
        (WebCore::CSSParser::markRuleBodyStart):
        (WebCore::CSSParser::markRuleBodyEnd):
        (WebCore::CSSParser::markPropertyStart):
        (WebCore::CSSParser::markPropertyEnd):
        * css/CSSParser.h:
        (WebCore::CSSParser::token):
        (CSSParser):
        ():
        * css/tokenizer.flex: Removed.

2012-01-29  Dale Curtis  <dalecurtis@chromium.org>

        Prepare WebCore.gyp for ffmpeg source transition.
        https://bugs.webkit.org/show_bug.cgi?id=77254

        We're migrating our ffmpeg repo from a set of patches living on top of
        a tarball to an actual git fork of upstream.  The paths have changed
        slightly.

        In order to not break the current build, we'll keep both paths around
        until the transition is complete.  Afterward the 'patched-ffmpeg' path
        will be removed.

        Reviewed by Tony Chang.

        No new tests. GYP change, if it doesn't work, nothing will compile.

        * WebCore.gyp/WebCore.gyp:

2012-01-29  Hayato Ito  <hayato@chromium.org>

        Add a ShadowRoot constructor as 'WebKitShadowRootConstructor', enabled by SHADOW_DOM flag.
        https://bugs.webkit.org/show_bug.cgi?id=76354

        Reviewed by Hajime Morita.

        We use vendor-prefixed name, 'WebKitShadowRoot', instead of 'ShadowRoot'
        since this is a feature under development.

        * dom/ShadowRoot.cpp:
        (WebCore::ShadowRoot::create):
        (WebCore):
        * dom/ShadowRoot.h:
        (WebCore):
        (ShadowRoot):
        * dom/ShadowRoot.idl:
        * page/DOMWindow.idl:

2012-01-29  Noel Gordon  <noel.gordon@gmail.com>

        [chromium] Use decoding swizzle only on libjpeg-turbo 1.1.90+
        https://bugs.webkit.org/show_bug.cgi?id=74286

        Reviewed by Kenneth Russell.

        No new tests. Covered by many existing tests: in particular 
            fast/images/*, fast/canvas/*,
            tables/mozilla/bugs/bug29314.html
            tables/mozilla/bugs/bug13169.html
            tables/mozilla/bugs/bug10565.html
            tables/mozilla/bugs/bug11026.html
            fast/repaint/backgroundSizeRepaint.html
            fast/repaint/block-layout-inline-children-replaced.html
            fast/repaint/clipped-relative.html
            fast/repaint/selected-replaced.html
            tables/mozilla/bugs/bug12908-1.html

        * platform/image-decoders/jpeg/JPEGImageDecoder.cpp:
        (rgbOutputColorSpace): Swizzle decode iff libjpeg-turbo is r732 or above.

2012-01-29  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r105999.
        http://trac.webkit.org/changeset/105999
        https://bugs.webkit.org/show_bug.cgi?id=77304

        Validating that this caused a performance regression in page
        load tests. (Requested by leviw on #webkit).

        * dom/NamedNodeMap.cpp:
        * dom/NamedNodeMap.h:
        (NamedNodeMap):
        * dom/StyledElement.cpp:
        (WebCore::StyledElement::updateStyleAttribute):
        (WebCore::StyledElement::createInlineStyleDecl):
        (WebCore):
        (WebCore::StyledElement::destroyInlineStyleDecl):
        (WebCore::StyledElement::ensureInlineStyleDecl):
        (WebCore::StyledElement::style):
        (WebCore::StyledElement::addSubresourceAttributeURLs):
        * dom/StyledElement.h:
        (WebCore::StyledElement::inlineStyleDecl):
        (StyledElement):

2012-01-29  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r106109.
        http://trac.webkit.org/changeset/106109
        https://bugs.webkit.org/show_bug.cgi?id=77302

        It made tests crash (Requested by Ossy_weekend on #webkit).

        * platform/graphics/qt/TextureMapperQt.cpp:
        (WebCore::TextureMapperQt::setGraphicsContext):
        * platform/graphics/qt/TextureMapperQt.h:
        (WebCore::TextureMapperQt::initialize):

2012-01-28  Alexander Færøy  <ahf@0x90.dk>

        [Qt] Remove references to CSSBorderImageValue.h in Target.pri
        https://bugs.webkit.org/show_bug.cgi?id=77277

        Reviewed by Antonio Gomes.

        CSSBorderImageValue.h was removed in r105502.

        * Target.pri:

2012-01-28  Julien Chaffraix  <jchaffraix@webkit.org>

        REGRESSION (r94016): Element with visibility:hidden but visible descendant may not be properly repainted
        https://bugs.webkit.org/show_bug.cgi?id=76126

        Reviewed by Simon Fraser.

        Tests: fast/layers/scroll-no-visible-content-but-visible-descendant-expected.html
               fast/layers/scroll-no-visible-content-but-visible-descendant.html

        The optimization missed out that if the current layer does not have some visible content
        (m_hasVisibleContent is false), a descendant could totally be visible and would need to
        have its repaint rectangles recomputed.

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateLayerPositionsAfterScroll):
        Bail out only if the layer doesn't have visible content AND no visible descendants.

2012-01-27  Chris Marrin  <cmarrin@apple.com>

        Get rid of TransformOperationList
        https://bugs.webkit.org/show_bug.cgi?id=77249

        Reviewed by Dan Bernstein.

        Changed fetchTransformOperationList to validateTransformOperations and got rid of separately generated list
        of transform operations. These are not needed, they are already available in the keyframe lists and they
        make it more difficult to add support for hardware animated filters. No behavior changes.


        * platform/graphics/GraphicsLayer.cpp:
        (WebCore::GraphicsLayer::validateTransformOperations):
        * platform/graphics/GraphicsLayer.h:
        (GraphicsLayer):
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::appendToUncommittedAnimations):
        (WebCore::GraphicsLayerCA::createTransformAnimationsFromKeyframes):
        * platform/graphics/ca/GraphicsLayerCA.h:
        ():
        * platform/graphics/texmap/GraphicsLayerTextureMapper.cpp:
        (WebCore::GraphicsLayerTextureMapper::addAnimation):
        * platform/graphics/texmap/TextureMapperAnimation.cpp:
        (WebCore::applyTransformAnimation):
        (WebCore::TextureMapperAnimation::TextureMapperAnimation):
        (WebCore::TextureMapperAnimation::applyInternal):
        * platform/graphics/texmap/TextureMapperAnimation.h:
        (TextureMapperAnimation):

2012-01-27  Raymond Toy  <rtoy@google.com>

        AudioPannerNode::setPanningModel() does not update m_panningModel properly
        https://bugs.webkit.org/show_bug.cgi?id=66830

        Reviewed by Kenneth Russell.

        Test: webaudio/panner-set-model.html

        * webaudio/AudioPannerNode.cpp:
        (WebCore::AudioPannerNode::setPanningModel):  Update
        m_panningModel appropriately.  Also silently do nothing if the
        model is invalid.

2012-01-27  Chris Rogers  <crogers@google.com>

        HRTFPanner could have high-quality mode for smoother transitions
        https://bugs.webkit.org/show_bug.cgi?id=76470

        Reviewed by Kenneth Russell.

        * platform/audio/HRTFPanner.cpp:
        (WebCore):
        (WebCore::HRTFPanner::HRTFPanner):
        (WebCore::HRTFPanner::reset):
        (WebCore::HRTFPanner::calculateDesiredAzimuthIndexAndBlend):
        (WebCore::HRTFPanner::pan):
        * platform/audio/HRTFPanner.h:
        (HRTFPanner):
        ():

2012-01-27  Mike Lawther  <mikelawther@chromium.org>

        CSS calc parsing stage
        https://bugs.webkit.org/show_bug.cgi?id=57082

        This is the parsing stage of calc. The expressions are evaluated and 
        expression trees are generated. CSS values are not created yet - that
        will happen in a subsequent commit. 

        Reviewed by David Hyatt.

        No functional change - covered by existing tests in LayoutTests/css3/calc.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSCalculationValue.cpp: Added.
        (WebCore):
        (WebCore::unitCategory):
        (WebCore::CSSCalcValue::customCssText):
        (WebCore::CSSCalcExpressionNode::~CSSCalcExpressionNode):
        (CSSCalcPrimitiveValue):
        (WebCore::CSSCalcPrimitiveValue::create):
        (WebCore::CSSCalcPrimitiveValue::cssText):
        (WebCore::CSSCalcPrimitiveValue::CSSCalcPrimitiveValue):
        ():
        (CSSCalcBinaryOperation):
        (WebCore::CSSCalcBinaryOperation::create):
        (WebCore::CSSCalcBinaryOperation::CSSCalcBinaryOperation):
        (WebCore::checkDepthAndIndex):
        (CSSCalcExpressionNodeParser):
        (WebCore::CSSCalcExpressionNodeParser::parseCalc):
        (Value):
        (WebCore::CSSCalcExpressionNodeParser::operatorValue):
        (WebCore::CSSCalcExpressionNodeParser::parseValue):
        (WebCore::CSSCalcExpressionNodeParser::parseValueTerm):
        (WebCore::CSSCalcExpressionNodeParser::parseValueMultiplicativeExpression):
        (WebCore::CSSCalcExpressionNodeParser::parseAdditiveValueExpression):
        (WebCore::CSSCalcExpressionNodeParser::parseValueExpression):
        (WebCore::CSSCalcValue::create):
        * css/CSSCalculationValue.h: Added.
        (WebCore):
        ():
        (CSSCalcExpressionNode):
        (WebCore::CSSCalcExpressionNode::category):
        (WebCore::CSSCalcExpressionNode::isInt):
        (WebCore::CSSCalcExpressionNode::isZero):
        (WebCore::CSSCalcExpressionNode::CSSCalcExpressionNode):
        (CSSCalcValue):
        (WebCore::CSSCalcValue::category):
        (WebCore::CSSCalcValue::isInt):
        (WebCore::CSSCalcValue::CSSCalcValue):
        * css/CSSParser.cpp:
        (WebCore::CSSParser::validCalculationUnit):
        (WebCore):
        (WebCore::CSSParser::validUnit):
        (WebCore::CSSParser::createPrimitiveNumericValue):
        (WebCore::CSSParser::parseValidPrimitive):
        (WebCore::CSSParser::parseValue):
        (WebCore::CSSParser::parseFillPositionComponent):
        (WebCore::CSSParser::parsedDouble):
        (WebCore::CSSParser::isCalculation):
        (WebCore::CSSParser::colorIntFromValue):
        (WebCore::CSSParser::parseColorParameters):
        (WebCore::CSSParser::parseHSLParameters):
        (WebCore::ShadowParseContext::ShadowParseContext):
        (WebCore::ShadowParseContext::commitLength):
        (WebCore::ShadowParseContext::commitStyle):
        (ShadowParseContext):
        (WebCore::CSSParser::parseShadow):
        (WebCore::BorderImageSliceParseContext::BorderImageSliceParseContext):
        (WebCore::BorderImageSliceParseContext::commitNumber):
        (WebCore::BorderImageSliceParseContext::commitBorderImageSlice):
        (BorderImageSliceParseContext):
        (WebCore::CSSParser::parseBorderImageSlice):
        (WebCore::BorderImageQuadParseContext::BorderImageQuadParseContext):
        (WebCore::BorderImageQuadParseContext::commitNumber):
        (WebCore::BorderImageQuadParseContext::commitBorderImageQuad):
        (BorderImageQuadParseContext):
        (WebCore::CSSParser::parseBorderImageQuad):
        (WebCore::CSSParser::parseCalculation):
        * css/CSSParser.h:
        ():
        (CSSParser):
        * css/CSSValue.cpp:
        (WebCore::CSSValue::cssText):
        (WebCore::CSSValue::destroy):
        * css/CSSValue.h:
        (WebCore::CSSValue::isCalculationValue):
        ():
        * css/SVGCSSParser.cpp:
        (WebCore::CSSParser::parseSVGValue):
        * platform/CalculationValue.cpp: Added.
        (WebCore):
        * platform/CalculationValue.h: Added.
        (WebCore):
        ():

2012-01-27  Anders Carlsson  <andersca@apple.com>

        WebTileLayers should honor the acceleratesDrawing flag
        https://bugs.webkit.org/show_bug.cgi?id=77242
        <rdar://problem/10622128>

        Reviewed by Dan Bernstein.

        * platform/graphics/ca/mac/TileCache.h:
        (WebCore::TileCache::acceleratesDrawing):
        Add getter.

        * platform/graphics/ca/mac/TileCache.mm:
        (WebCore::TileCache::TileCache):
        Initialize m_acceleratesDrawing.

        (WebCore::TileCache::setAcceleratesDrawing):
        Set m_acceleratesDrawing and go through all tile layers and update the flag.

        (WebCore::TileCache::createTileLayer):
        Call -[CALayer setAcceleratesDrawing:] on the newly created layer.

        * platform/graphics/ca/mac/WebTileCacheLayer.mm:
        (-[WebTileCacheLayer setAcceleratesDrawing:]):
        (-[WebTileCacheLayer acceleratesDrawing]):
        Call through to the TileCache object.

2012-01-27  Raymond Toy  <rtoy@google.com>

        Round time to sample frame
        https://bugs.webkit.org/show_bug.cgi?id=76659

        Three major changes:

        1. Modify timeToSampleFrame to round the time to the sample frame
        and add support for Visual Studio to round the time in the same
        way as on gcc. (The issue is that Visual Studio uses x87
        instructions with 80-bit floats.)  This makes Visual Studio more
        consistent with the results with gcc.

        2. Change the current time variable from keeping time in seconds
        to keeping time in sample frames.  This minimizes rounding except
        when needed for the Javascript API.

        3. Update AudioBufferSourceNode::process to use samples (instead
        of time) as much as possible to reduce round-off effects.

        Reviewed by Kenneth Russell.

        Tests: Added note-grain-on test to exercise precise
        timing. Existing tests (gain and audiobuffersource-playbackrate)
        also cover some of these changes, and the equalpower panner test is
        modified to enable the tests for the offset of the impulses.

        * platform/audio/AudioUtilities.cpp:
        (WebCore::AudioUtilities::timeToSampleFrame): Moved from
        AudioParamTimeLine and slightly modified, and updated to round
        operations consistently.  Add special flags for Visual Studio to
        generate code with rounding that is consistent with gcc.
        * platform/audio/AudioUtilities.h: Declare new function.
        * webaudio/AudioBufferSourceNode.cpp:
        (WebCore::AudioBufferSourceNode::process): Use new functions to
        convert time to sample frame.  Update code to use integer
        arithmetic as much as possible.
        (WebCore::AudioBufferSourceNode::renderFromBuffer): Use
        timeToSampleFrame to convert time to sample frame.
        * webaudio/AudioContext.h: Define new currentSample method to get
        the current sample.
        * webaudio/AudioDestinationNode.cpp:
        (WebCore::AudioDestinationNode::provideInput): Use new function to
        convert sample frame to time.  Update
        * webaudio/AudioDestiationNode.h: Rename m_currentTime to
        m_currentSample, add method to return current Sample.  Update
        currentTime() method to compute time from the current sample.
        * webaudio/AudioParamTimeline.cpp:
        (WebCore::AudioParamTimeline::valuesForTimeRangeImpl): Remove
        timeToSampleFrame and use new function in AudioUtilities to
        convert time to sample frame.

2012-01-27  Adrienne Walker  <enne@google.com>

        [chromium] Don't ever skip drawing the non-composited content layer
        https://bugs.webkit.org/show_bug.cgi?id=77236

        Reviewed by James Robinson.

        Since the root layer has its textures potentially reserved last in a
        front-to-back iteration, don't ever skip drawing it if we can't
        reserve its textures. Instead, checkerboard and draw background color
        quads instead to fill the viewport. This behavior is tied to the
        backgroundFillsViewport setting.

        * platform/graphics/chromium/TiledLayerChromium.cpp:
        (WebCore::TiledLayerChromium::prepareToUpdateTiles):
        * platform/graphics/chromium/cc/CCLayerTilingData.cpp:
        (WebCore::CCLayerTilingData::reset):
        * platform/graphics/chromium/cc/CCTiledLayerImpl.cpp:
        (WebCore::CCTiledLayerImpl::appendQuads):

2012-01-27  Martin Robinson  <mrobinson@igalia.com>

        Fix a warning in the GTK+ build.

        Reviewed by Gustavo Noronha Silva.

        No new tests. This should not change behavior.

        * plugins/gtk/PluginViewGtk.cpp:
        (WebCore::PluginView::platformStart): Use reinterpet_cast to convert X11 Windows into void pointers.

2012-01-27  Tien-Ren Chen  <trchen@chromium.org>

        [chromium] CCLayerTreeHostImpl minor code cleanup
        https://bugs.webkit.org/show_bug.cgi?id=77181

        Fix a typo in comments and group functions properly.
        Replace duplicated content size code with function.

        Reviewed by James Robinson.

        No new tests. No change in behavior.

        * platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:
        (WebCore::CCLayerTreeHostImpl::startPageScaleAnimation):
        (WebCore::CCLayerTreeHostImpl::contentSize):
        (WebCore):
        (WebCore::CCLayerTreeHostImpl::updateMaxScrollPosition):
        * platform/graphics/chromium/cc/CCLayerTreeHostImpl.h:
        (CCLayerTreeHostImpl):

2012-01-27  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Unreviewed. Build fix, add missing header.

        * rendering/svg/SVGImageBufferTools.h:

2012-01-27  Victor Carbune  <victor@rosedu.org>

        Added the GenericEventQueue class in order to generalize asynchronous
        event dispatching in HTMLMediaElement.

        In order to support asynchronous events dispatched by HTMLTrackElement
        there is a need for a generalized implementation of an event queue to
        be used for both HTMLMediaElement and Text Tracks.

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

        Reviewed by Eric Carlson.

        No new tests. No new functionality, only refactoring.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:

        * dom/GenericEventQueue.cpp: Added. Implements the abstract class EventQueue.
        (WebCore::GenericEventQueue::GenericEventQueue):
        (WebCore::GenericEventQueue::~GenericEventQueue):
        (WebCore::GenericEventQueue::enqueueEvent): Append an event to the current
        pending event list.
        (WebCore::GenericEventQueue::cancelEvent): Removes an event from the current
        pending event list.
        (WebCore::GenericEventQueue::timerFired): Callback method when the timer fires.
        Dispatches all events that are currently pending.
        (WebCore::GenericEventQueue::close): Closes the event queue such that it cannot
        be used anymore.
        (WebCore::GenericEventQueue::cancelAllEvents): Removes all pending events.
        (WebCore::GenericEventQueue::hasPendingEvents): True if there are pending events.
        * dom/GenericEventQueue.h: Added.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::HTMLMediaElement):
        (WebCore::HTMLMediaElement::scheduleEvent): Refactored method to enqueue
        the scheduled event on the GenericEventQueue instance.
        (WebCore::HTMLMediaElement::cancelPendingEventsAndCallbacks): Ditto.
        (WebCore::HTMLMediaElement::hasPendingActivity): Ditto.
        (WebCore::HTMLMediaElement::dispatchEvent): This method is overriden
        to keep an evidence when a canPlay event is fired.
        * html/HTMLMediaElement.h:

2012-01-27  Martin Robinson  <mrobinson@igalia.com>

        Fix a warning in the GTK+ build.

        Reviewed by Gustavo Noronha Silva.

        No new tests. This should not change behavior.

        * plugins/gtk/PluginViewGtk.cpp:
        (WebCore::PluginView::platformStart): Use reinterpet_cast to convert X11 Windows into void pointers.

2012-01-27  Benjamin Poulain  <bpoulain@apple.com>

        Speed up the prefix matching of cssPropertyName()
        https://bugs.webkit.org/show_bug.cgi?id=77158

        Reviewed by Geoffrey Garen.

        This patch improves the performance by:
        -not checking the PropertyName with all 7 prefix
         (now, in the worse case, 2 prefixes are checked)
        -avoiding the conversion 8bits->16bits by using String::operator[]
         instead of ::characters()

        To avoid checking every prefix, the code branch based on the first
        characters of the propertyName.
        The remaining of the prefix is checked character by characters like before.

        When accessing CSS property, this gives a 13% improvement when there is no prefix.
        There is no performance regression for the matching of prefix, including for the first one
        of the previous matching code ("css").

        * bindings/js/JSCSSStyleDeclarationCustom.cpp:
        ():
        (WebCore::matchesCSSPropertyNamePrefix):
        (WebCore):
        (WebCore::getCSSPropertyNamePrefix):
        (WebCore::cssPropertyName):

2012-01-27  Ken Buchanan  <kenrb@chromium.org>

        Crash in updateFirstLetter() from unnecessary anonymous block
        https://bugs.webkit.org/show_bug.cgi?id=72675

        Reviewed by David Hyatt.

        There was a problem with anonymous blocks not getting removed when
        their only block flow siblings are removed if they also have non-block
        flow first-letter siblings (i.e. floats). This patch modifies
        RenderBlock::removeChild() to look for this situation and strip out
        unnecessary anonymous container blocks if it occurs.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::removeChild):
        (WebCore::RenderBlock::collapseAnonymousBoxChild): Added
        * rendering/RenderBlock.h:
        (WebCore::RenderBlock::collapseAnonymousBoxChild): Added

2012-01-27  Fady Samuel  <fsamuel@chromium.org>

        Rename shouldLayoutFixedElementsRelativeToFrame and make it a setting
        https://bugs.webkit.org/show_bug.cgi?id=76459

        Reviewed by Darin Fisher.

        This should be a setting because it is independent of a particular frame and
        should be preserved even if the mainframe changes.

        Renamed (set)ShouldLayoutFixedElementsRelativeToFrame to 
        (set)FixedElementsLayoutRelativeToFrame due to the connotation
        the word "should" may have in this context: If set, 
        position:fixed elements will ALWAYS be laid out relative to the frame.


        * WebCore.exp.in:
        * page/FrameView.cpp:
        (WebCore::FrameView::reset):
        (WebCore::FrameView::scrollXForFixedPosition):
        (WebCore::FrameView::scrollYForFixedPosition):
        (WebCore::FrameView::fixedElementsLayoutRelativeToFrame):
        (WebCore):
        * page/FrameView.h:
        (FrameView):
        * page/Settings.cpp:
        (WebCore::Settings::Settings):
        (WebCore::Settings::setFixedElementsLayoutRelativeToFrame):
        (WebCore):
        * page/Settings.h:
        (Settings):
        (WebCore::Settings::fixedElementsLayoutRelativeToFrame):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::fixedElementLaysOutRelativeToFrame):
        (WebCore::RenderBox::containingBlockLogicalWidthForPositioned):
        (WebCore::RenderBox::containingBlockLogicalHeightForPositioned):
        * rendering/RenderBox.h:
        (RenderBox):
        * testing/InternalSettings.cpp:
        (WebCore::InternalSettings::setFixedElementsLayoutRelativeToFrame):
        * testing/InternalSettings.h:
        (InternalSettings):
        * testing/InternalSettings.idl:

2012-01-27  Kentaro Hara  <haraken@chromium.org>

        Support the [Supplemental] IDL for constants
        https://bugs.webkit.org/show_bug.cgi?id=77228

        Reviewed by Adam Barth.

        We have supported the [Supplemental] IDL for attributes and methods.
        This patch supports it for constants.

        Test: bindings/scripts/test/TestSupplemental.idl

        * bindings/scripts/generate-bindings.pl:
        Supported [Supplemental] constants.
        Updated some comments.

        * bindings/scripts/test/TestSupplemental.idl:
        Added test cases for [Supplemental] constants.

        * bindings/scripts/test/CPP/WebDOMTestInterface.h: Updated the test results.
        * bindings/scripts/test/JS/JSTestInterface.cpp: Ditto.
        (WebCore::JSTestInterfacePrototype::getOwnPropertySlot):
        (WebCore::JSTestInterfacePrototype::getOwnPropertyDescriptor):
        (WebCore):
        (WebCore::jsTestInterfaceSUPPLEMENTAL_CONSTANT1):
        (WebCore::jsTestInterfaceSUPPLEMENTAL_CONSTANT2):
        * bindings/scripts/test/JS/JSTestInterface.h: Ditto.
        (WebCore):
        * bindings/scripts/test/ObjC/DOMTestInterface.h: Ditto.
        * bindings/scripts/test/V8/V8TestInterface.cpp: Ditto.
        (WebCore::ConfigureV8TestInterfaceTemplate):

2012-01-27  Anders Carlsson  <andersca@apple.com>

        When threaded scrolling is enabled for a FrameView, always put scrollbars in layers
        https://bugs.webkit.org/show_bug.cgi?id=77232
        <rdar://problem/10766708>

        Reviewed by Beth Dakin.

        * page/ScrollingCoordinator.cpp:
        (WebCore::ScrollingCoordinator::coordinatesScrollingForFrameView):
        * page/ScrollingCoordinator.h:
        Add a new helper function.

        * rendering/RenderLayerCompositor.cpp:
        (WebCore::shouldCompositeOverflowControls):
        Make this take a FrameView, check with the scrolling coordinator if the overflow controls should be composited.

        (WebCore::RenderLayerCompositor::requiresHorizontalScrollbarLayer):
        (WebCore::RenderLayerCompositor::requiresVerticalScrollbarLayer):
        (WebCore::RenderLayerCompositor::requiresScrollCornerLayer):
        Update for the change to make shouldCompositeOverflowControls take a FrameView.

2012-01-24  Vincent Scheib  <scheib@chromium.org>

        Pointer Lock: Implement pointer interface
        https://bugs.webkit.org/show_bug.cgi?id=75762

        Reviewed by Julien Chaffraix.

        Implement the navigator.pointer interface via a new
        PointerLockController class, as per
        http://dvcs.w3.org/hg/webevents/raw-file/default/mouse-lock.html.

        The implementation is being made in steps, the feature is still behind
        compile-time and run-time flags, 'webkit' prefixed, and not yet enabled
        in any browser. (Chromium has a developer flag required.) Follow-up
        work will include handling DOM elements being removed, making all
        callbacks asynchronous, iframe permissions (similar to Full Screen),
        etc.

        PointerLockController maintains state of which Element is the current
        lock target and the success and failure callbacks. ChromeClient has
        methods added to expose the required state change requests.

        Tests: pointer-lock/lock-already-locked.html
               pointer-lock/lock-fail-responses.html
               pointer-lock/mouse-event-delivery.html
               pointer-lock/pointerlocklost-event.html

        * WebCore.gypi:
        * dom/EventNames.h:
        * page/ChromeClient.h:
        (WebCore::ChromeClient::requestPointerLock):
        (WebCore::ChromeClient::requestPointerUnlock):
        (WebCore::ChromeClient::isPointerLocked):
        * page/Navigator.cpp:
        (WebCore::Navigator::webkitPointer):
        * page/Page.cpp:
        (WebCore::Page::Page):
        * page/Page.h:
        (WebCore::Page::pointerLockController):
        * page/PointerLock.cpp:
        (WebCore::PointerLock::PointerLock):
        (WebCore::PointerLock::create):
        (WebCore::PointerLock::lock):
        (WebCore::PointerLock::unlock):
        (WebCore::PointerLock::isLocked):
        * page/PointerLock.h:
        (WebCore::PointerLock::create):
        * page/PointerLockController.cpp: Added.
        (WebCore::PointerLockController::PointerLockController):
        (WebCore::PointerLockController::requestPointerLock):
        (WebCore::PointerLockController::requestPointerUnlock):
        (WebCore::PointerLockController::isLocked):
        (WebCore::PointerLockController::didAcquirePointerLock):
        (WebCore::PointerLockController::didNotAcquirePointerLock):
        (WebCore::PointerLockController::didLosePointerLock):
        (WebCore::PointerLockController::dispatchLockedMouseEvent):
        * page/PointerLockController.h: Copied from Source/WebCore/page/PointerLock.h.

2012-01-27  Abhishek Arya  <inferno@chromium.org>

        Crash in DocumentLoader::detachFromFrame.
        https://bugs.webkit.org/show_bug.cgi?id=62764

        Reviewed by Brady Eidson.

        r105556 didn't fix the crash because canceling the
        main resource loader blows away both the current
        document loader and frame underneath. Both protectors
        are also used in stopLoading() when m_mainResourceLoader->cancel()
        is called. Also, tested the fix under ASAN.

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::detachFromFrame):

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

        flexbox scrollbars don't take flex-direction into account
        https://bugs.webkit.org/show_bug.cgi?id=70772

        Reviewed by Darin Adler.

        This fixes a bug where we always used the logicalScrollbarHeight.
        For column flow, this was incorrect.

        Also fix a bug where we didn't include the trailing border+padding+scrollbar when computing the
        height of a column flow.

        Tests: css3/flexbox/cross-axis-scrollbar-expected.html
               css3/flexbox/cross-axis-scrollbar.html

        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::crossAxisScrollbarExtent): Add a direction aware method for getting the scrollbar size.
        (WebCore):
        (WebCore::RenderFlexibleBox::layoutAndPlaceChildren): Use crossAxisScrollbarExtent.
        * rendering/RenderFlexibleBox.h:
        (RenderFlexibleBox):

2012-01-27  Kentaro Hara  <haraken@chromium.org>

        Unreviewed. Rebasedlined run-bindings-tests results.

        * bindings/scripts/test/CPP/WebDOMTestInterface.cpp:
        (WebDOMTestInterface::supplementalMethod1):
        (WebDOMTestInterface::supplementalMethod2):

2012-01-27  No'am Rosenthal  <noam.rosenthal@nokia.com>

        [Qt][WK2] Child layers appear in wrong position when scrolling
        https://bugs.webkit.org/show_bug.cgi?id=77063

        Reviewed by Simon Fraser.

        When using the delegatesScrolling mode in FrameView, the compositor doesn't need
        to control the special clip/scroll layers. Also, when we change that mode, we need to let
        the compositor reset its backing-stores and rebuild them without scrolling/clipping.

        This is tested by compositing tests, when run with Qt in touch mode.

        * page/FrameView.cpp:
        (WebCore::FrameView::delegatesScrollingDidChange):
        (WebCore):
        * page/FrameView.h:
        (FrameView):
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::setDelegatesScrolling):
        * platform/ScrollView.h:
        (WebCore::ScrollView::delegatesScrollingDidChange):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::requiresScrollLayer):

2012-01-27  Thiago Marcos P. Santos  <tmpsantos@gmail.com>

        Removed unused method from CSSStyleSelector
        https://bugs.webkit.org/show_bug.cgi?id=77190

        Reviewed by Andreas Kling.

        * css/CSSStyleSelector.h:
        (CSSStyleSelector):

2012-01-27  Zeno Albisser  <zeno@webkit.org>

        [Qt][Mac] Build fails after adding ICU support (r105997).
        https://bugs.webkit.org/show_bug.cgi?id=77118

        Use SmareReplaceCF.cpp code path if platform Mac.

        Reviewed by Tor Arne Vestbø.

        * Target.pri:

2012-01-27  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: detailed heap snapshot: Replace (Native objects) root element
        with '(Detached DOM trees)' and '(Document DOM trees)'
        https://bugs.webkit.org/show_bug.cgi?id=77201

        I think it'd be nice to replace one group containing all native objects with
        separate groups for different types of native objects.

        Reviewed by Yury Semikhatsky.

        * bindings/v8/RetainedDOMInfo.cpp:
        (WebCore::RetainedDOMInfo::GetGroupLabel):
        (WebCore):
        * bindings/v8/RetainedDOMInfo.h:
        (RetainedDOMInfo):

2012-01-27  Nikolas Zimmermann  <nzimmermann@rim.com>

        <feImage> doesn't work with local references when using primitiveUnits="objectBoundingBox"
        https://bugs.webkit.org/show_bug.cgi?id=77205

        Reviewed by Antti Koivisto.

        Consider following testcase:
        <svg width="1000" height="500">
        <defs>
            <circle id="c" cx="50%" cy="50%" r="10%"/>
            <filter id="f" filterUnits="userSpaceOnUse" x="0" y="0" width="100" height="100" primitiveUnits="objectBoundingBox">
                <feImage xlink:href="#c"/>
            </filter>
        </defs>
        <rect width="100" height="100" filter="url(#f)"/>
        </svg>

        The <svg> has a viewport of 1000x50. The <circle> in the <defs> element is resolved as <circle cx="500" cy="250" r="79"/>,
        as the context for this element (looking at it isolated!) is the viewport of the <svg>. We then setup a 0x0 - 100x100 rect
        in user space, which gets filtered, by a filter, also defined in user space (for simplicity), but with primitiveUnits="objectBoundingBox".

        That means that the default subregion of the filter effect <feImage/> which has no inputs, is defined in the SVG 1.1 spec to be equal to
        the filter region, which is 0x0-100x100 in user space. This <feImage/> is supposed to produce a 100x100 image, containing a circle in the
        middle (aka. <circle cx="50" cy="50".../>), but it doesn't, as the <circle> it's trying to paint, is laid out at 500x250, and thus outside
        the 100x100 sized image buffer.

        So how to resolve this?
        The RenderSVGShape thats owned by the <circle> generates its Path value by calling cx().value(lengthContext) and the SVGLengthContext here
        resolves to the <svg>. That happens on _layout_. If we would want to change the SVGLengthContext in this case (what I originally planned!)
        to carry a custom 100x100 viewport, we'd need to relayout. Unfortunately this is not an option, as this would mean that
        SVGImageBufferTools::renderSubtreeToImageBuffer, would need to relayout its children first, but we produce the filter images when painting.
        This is very dangerous and has just recently been fixed so that SVGImageBufferTools can ASSERT(!item->needsLayout()) when painting the
        subtree to an image buffer.

        The only sane solution I see, that does not require relayouts, is to make a map between the <circle> bounding box in user space (500x250
        center point) to the filter primitive subregion space (here: 100x100 center point), and concat that transformation before painting the
        subtree to the image buffer. Of course this approach only works if all values of the <circle> are relative. If someone uses
        <circle id="c" cx="50%" cy="666"> the transformation that I'm looking for is undefined. We'd really need to create a new Path here, to
        resolve only cx against the new viewport, and not cy.

        Though in practice it turns out this is not a problem. All use cases of feImage + primitiveUnits="objectBoundingBox" link to elements
        that are completely defined in percentual values, as this is really the only thing which makes sense - otherwise you can always switch
        back to primtiveUnits="userSpaceOnUse". Anyhow, I'm going to fix all known wild-life test cases by my approach, and say we don't support
        using mixed length units when referencing those elements from feImages with primitiveUnits="objectBoundingBox".

        Adding lots of new testcases, trying all the different feImage modes.

        Tests: svg/filters/feImage-filterUnits-objectBoundingBox-primitiveUnits-objectBoundingBox.svg
               svg/filters/feImage-filterUnits-objectBoundingBox-primitiveUnits-userSpaceOnUse.svg
               svg/filters/feImage-filterUnits-userSpaceOnUse-primitiveUnits-objectBoundingBox.svg
               svg/filters/feImage-filterUnits-userSpaceOnUse-primitiveUnits-userSpaceOnUse.svg
               svg/filters/feImage-position.svg
               svg/filters/feImage-subregions-preseveAspectRatio-none-with-viewBox.svg
               svg/filters/feImage-subregions-preseveAspectRatio-none.svg
               svg/filters/feImage-subregions.svg

        * rendering/svg/RenderSVGResourceFilterPrimitive.cpp:
        (WebCore::RenderSVGResourceFilterPrimitive::determineFilterPrimitiveSubregion): Reverse logic, simplifying the code a bit. Remove FEImage special cases (absoluteSubregion).
        * svg/SVGLengthContext.h: Make determineViewport() public, for use in FEImage.
        * svg/graphics/filters/SVGFEImage.cpp:
        (WebCore::FEImage::determineAbsolutePaintRect): Don't apply preserveAspectRatio transformation for local elements, it's not defined and breaks content.
        (WebCore::FEImage::platformApplySoftware): Figure out the absolute subregion by utilizing filterPrimitiveSubregion() as FETurbulence does.
                                                   Map between filter primitive subregion and target object space for primitiveUnits="objectBoundingBox" support on SVG element references.
        * svg/graphics/filters/SVGFEImage.h: Remove absoluteSubregion member & setter, it's no longer needed.

2012-01-26  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Scripts panel: fix event dispatching between FileSelector and EditorContainer.
        https://bugs.webkit.org/show_bug.cgi?id=77126

        Reviewed by Pavel Feldman.

        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype._uiSourceCodeAdded.get if):
        (WebInspector.ScriptsPanel.prototype._reset):
        (WebInspector.ScriptsPanel.prototype._showSourceLine):
        (WebInspector.ScriptsPanel.prototype._updateExecutionLine):
        (WebInspector.ScriptsPanel.prototype._editorClosed):
        (WebInspector.ScriptsPanel.prototype._editorSelected):
        (WebInspector.ScriptsPanel.FileSelector.prototype.revealUISourceCode):
        (WebInspector.ScriptsPanel.ComboBoxFileSelector.prototype.revealUISourceCode):
        (WebInspector.ScriptsPanel.ComboBoxFileSelector.prototype._innerRevealUISourceCode):
        (WebInspector.ScriptsPanel.ComboBoxFileSelector.prototype._addOptionToFilesSelect.insertOrdered):
        (WebInspector.ScriptsPanel.ComboBoxFileSelector.prototype._addOptionToFilesSelect):
        (WebInspector.ScriptsPanel.ComboBoxFileSelector.prototype._goBack):
        (WebInspector.ScriptsPanel.ComboBoxFileSelector.prototype._goForward):
        (WebInspector.ScriptsPanel.ComboBoxFileSelector.prototype._filesSelectChanged):
        * inspector/front-end/TabbedEditorContainer.js:
        (WebInspector.TabbedEditorContainer):
        (WebInspector.TabbedEditorContainer.prototype._tabClosed):
        (WebInspector.TabbedEditorContainer.prototype._tabSelected):
        (WebInspector.TabbedEditorContainer.prototype.reset):

2012-01-27  Nikolas Zimmermann  <nzimmermann@rim.com>

        <feImage> DOM mutation problems
        https://bugs.webkit.org/show_bug.cgi?id=77198

        Reviewed by Antti Koivisto.

        Consider <feImage xlink:href="#rect"/>, where <rect> gets dynamically added to the tree.
        Currently <feImage> doesn't notice this, as it doesn't register itself pending on "#rect".

        Integrate <feImage> properly within the pending resources concept, fixing the bug.

        Tests: svg/filters/feImage-target-add-to-document.svg
               svg/filters/feImage-target-changes-id.svg
               svg/filters/feImage-target-id-change.svg
               svg/filters/feImage-target-reappend-to-document.svg
               svg/filters/feImage-target-remove-from-document.svg

        * svg/SVGFEImageElement.cpp: Rename invalidateImageResource to clearResourceReferences.
        (WebCore::SVGFEImageElement::~SVGFEImageElement): Call clearResourceReferences.
        (WebCore::SVGFEImageElement::clearResourceReferences): Remove any occurence of m_targetImage, it's no longer used.
        (WebCore::SVGFEImageElement::requestImageResource): requestImageResource is now called by buildPendingResource.
        (WebCore::SVGFEImageElement::buildPendingResource): Called whenever any element that we depend on gets resolved - now invalidates the <filter>.
        (WebCore::SVGFEImageElement::parseMappedAttribute): Don't start loading from parseMappedAttribute.
        (WebCore::SVGFEImageElement::svgAttributeChanged): Start loading from here, for consistency with SVGImageElement.
        (WebCore::SVGFEImageElement::insertedIntoDocument): Invoke buildPendingResource(), if we enter the tree.
        (WebCore::SVGFEImageElement::removedFromDocument): Clear m_cachedImage as soon as we get removed from the tree.
        (WebCore::SVGFEImageElement::build): Clean up this function, m_targetImage is no longer exist.
        * svg/SVGFEImageElement.h: Remove OwnPtr<ImageBuffer> m_targetImage, which is no longer used.

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

        [Qt] WKTR: Use a software rendering pipiline when running tests.
        https://bugs.webkit.org/show_bug.cgi?id=76708

        Reviewed by Kenneth Rohde Christiansen.

        * platform/graphics/qt/TextureMapperQt.cpp: Allow setting the context to null.
        (WebCore::TextureMapperQt::setGraphicsContext):
        * platform/graphics/qt/TextureMapperQt.h:
        (WebCore::TextureMapperQt::initialize):

2012-01-27  Branimir Lambov  <blambov@google.com>

        SVG filters incorrectly move elements
        https://bugs.webkit.org/show_bug.cgi?id=73643

        Reviewed by Nikolas Zimmermann.

        Fixes SVG image buffer creation to use the enclosing integer rect
        instead of unstable rounded coordinates with scaling which was causing
        animated images to jump around under filters. The image buffer was not 
        aligned on a pixel boundary, and thus the positions and sizes of anything
        drawn under that filter changed by 1-2 pixels compared to the same
        elements drawn without an intermediate buffer, or drawn with a buffer
        with a different target rectangle. 
        
        The change improves the positioning of clip paths, masks and filters.

        Tests: svg/clip-path/clip-in-clip.svg
               svg/clip-path/clipper-placement-issue.svg
               svg/filters/filter-placement-issue.svg

        * platform/graphics/filters/FETile.cpp:
        (WebCore::FETile::platformApplySoftware):
        * rendering/svg/RenderSVGResourceClipper.cpp:
        (WebCore::RenderSVGResourceClipper::applyClippingToContext):
        * rendering/svg/RenderSVGResourceFilter.cpp:
        (WebCore::RenderSVGResourceFilter::applyResource):
        * rendering/svg/RenderSVGResourceGradient.cpp:
        (WebCore::createMaskAndSwapContextForTextGradient):
        (WebCore::clipToTextMask):
        * rendering/svg/RenderSVGResourceMasker.cpp:
        (WebCore::RenderSVGResourceMasker::applyResource):
        (WebCore::RenderSVGResourceMasker::drawContentIntoMaskImage):
        * rendering/svg/RenderSVGResourcePattern.cpp:
        (WebCore::RenderSVGResourcePattern::createTileImage):
        * rendering/svg/SVGImageBufferTools.cpp:
        (WebCore::SVGImageBufferTools::createImageBuffer):
        (WebCore::SVGImageBufferTools::createImageBufferForPattern):
        (WebCore::SVGImageBufferTools::clipToImageBuffer):
        (WebCore::SVGImageBufferTools::clampedAbsoluteTargetRect):
        (WebCore::SVGImageBufferTools::clampedAbsoluteSize):
        * rendering/svg/SVGImageBufferTools.h:
        (WebCore::SVGImageBufferTools::calcImageBufferRect):

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

        Web Inspector: should be possible to open function declaration from script popover
        https://bugs.webkit.org/show_bug.cgi?id=76913

        Added inferred/display function name and source location to the popover in scripts panel.
        Now when a function is hovered user can navigate to its definition.

        Reviewed by Pavel Feldman.

        Test: inspector/debugger/function-details.html

        * bindings/js/JSInjectedScriptHostCustom.cpp:
        (WebCore::JSInjectedScriptHost::functionDetails):
        * bindings/v8/custom/V8InjectedScriptHostCustom.cpp:
        (WebCore::V8InjectedScriptHost::functionDetailsCallback):
        * inspector/InjectedScript.cpp:
        (WebCore::InjectedScript::getFunctionDetails):
        * inspector/InjectedScript.h:
        (InjectedScript):
        * inspector/InjectedScriptHost.idl:
        * inspector/InjectedScriptSource.js:
        (.):
        * inspector/Inspector.json:
        * inspector/InspectorDebuggerAgent.cpp:
        (WebCore::InspectorDebuggerAgent::getFunctionDetails):
        * inspector/InspectorDebuggerAgent.h:
        (InspectorDebuggerAgent):
        * inspector/front-end/DebuggerPresentationModel.js:
        (WebInspector.DebuggerPresentationModel.Linkifier.prototype.linkifyFunctionLocation):
        * inspector/front-end/ObjectPopoverHelper.js:
        (WebInspector.ObjectPopoverHelper):
        (WebInspector.ObjectPopoverHelper.prototype._showObjectPopover.showObjectPopover.):
        (WebInspector.ObjectPopoverHelper.prototype._showObjectPopover):
        (WebInspector.ObjectPopoverHelper.prototype._onHideObjectPopover):
        * inspector/front-end/ObjectPropertiesSection.js:
        (WebInspector.ObjectPropertyTreeElement.prototype._functionContextMenuEventFired):
        (WebInspector.ObjectPropertyTreeElement.prototype._functionContextMenuEventFired.revealFunction):
        * inspector/front-end/RemoteObject.js:
        (WebInspector.RemoteObject):
        (WebInspector.RemoteObject.fromPayload):
        (WebInspector.RemoteObject.prototype.get functionName):
        * inspector/front-end/scriptsPanel.css:
        (.function-location-link):
        (.function-popover-title):
        (.function-popover-title .function-name):

2012-01-26  Noel Gordon  <noel.gordon@gmail.com>

        Remove FIXME: ColorProfile encapsulation as a Vector<char> works well 
        https://bugs.webkit.org/show_bug.cgi?id=77176

        Reviewed by Adam Barth.

        No new tests. No change in behavior.

        * platform/image-decoders/ImageDecoder.h:

2012-01-26  Matthew Delaney  <mdelaney@apple.com>

        ImageBuffer::draw should deep copy if drawing to an accelerated context
        https://bugs.webkit.org/show_bug.cgi?id=77185

        Reviewed by Simon Fraser.

        No new tests since any test for this issue would be flaky at best.

        * platform/graphics/cg/ImageBufferCG.cpp: Deep copy when drawing ourself into
            an accelerated context for both draw and drawPattern.
        (WebCore::ImageBuffer::draw):
        (WebCore::ImageBuffer::drawPattern):

2012-01-26  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Unreviewed. Build fixes.
        - Remove some constructors not generated by CPP bindings
          from being added to CPP binding headers
        - Keyboard event fixes after modifier changes
        - Add stubs for Language and RunLoop platform methods

        * bindings/scripts/CodeGeneratorCPP.pm:
        (GetNamespaceForClass):
        (GenerateImplementation):
        * platform/mac/WebCoreSystemInterface.h:
        * platform/wx/KeyboardEventWx.cpp:
        (WebCore::PlatformKeyboardEvent::PlatformKeyboardEvent):
        * platform/wx/LanguageWx.cpp: Added.
        (WebCore):
        (WebCore::platformLanguage):
        (WebCore::platformUserPreferredLanguages):
        * platform/wx/RunLoopWx.cpp: Added.
        (WebCore):
        (WebCore::RunLoop::run):
        (WebCore::RunLoop::stop):
        (WebCore::RunLoop::RunLoop):
        (WebCore::RunLoop::~RunLoop):
        (WebCore::RunLoop::wakeUp):
        * storage/DOMWindowSQLDatabase.idl:
        * webaudio/DOMWindowWebAudio.idl:
        * websockets/DOMWindowWebSocket.idl:

2012-01-26  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r105486.
        http://trac.webkit.org/changeset/105486
        https://bugs.webkit.org/show_bug.cgi?id=77182

        This patch doesn't take web workers into account. (Requested
        by dave_levin on #webkit).

        * html/DOMURL.cpp:
        (WebCore::DOMURL::DOMURL):
        (WebCore::DOMURL::~DOMURL):
        (WebCore::DOMURL::contextDestroyed):
        (WebCore):
        (WebCore::DOMURL::createObjectURL):
        (WebCore::DOMURL::revokeObjectURL):
        * html/DOMURL.h:
        (WebCore::DOMURL::create):
        (DOMURL):
        * html/DOMURL.idl:
        * page/DOMWindow.cpp:
        (WebCore):
        (WebCore::DOMWindow::webkitURL):
        * page/DOMWindow.h:
        (DOMWindow):
        ():
        * page/DOMWindow.idl:
        * workers/WorkerContext.cpp:
        (WebCore):
        (WebCore::WorkerContext::webkitURL):
        (WebCore::WorkerContext::webkitRequestFileSystem):
        * workers/WorkerContext.h:
        (WorkerContext):
        ():
        * workers/WorkerContext.idl:

2012-01-26  Noel Gordon  <noel.gordon@gmail.com>

        Cleanup JPEGImageDecoder includes
        https://bugs.webkit.org/show_bug.cgi?id=77171

        Reviewed by Adam Barth.

        No new tests. Refactoring cleanup only.

        * platform/image-decoders/jpeg/JPEGImageDecoder.cpp:

2012-01-26  Tim Horton  <hortont424@gmail.com>

        3D transformed elements hide when showing the print dialog
        https://bugs.webkit.org/show_bug.cgi?id=45894
        <rdar://problem/7441593>

        Reviewed by Andy Estes.

        Suspend updates of the compositing layer tree while printing is taking place,
        preventing on-screen layers from moving to their print-mode positions.

        No new tests, as WebKitTestRunner doesn't support putting the document
        into printing mode.

        * page/FrameView.cpp:
        (WebCore::FrameView::syncCompositingStateForThisFrame):
        (WebCore::FrameView::paintContents):
        * platform/graphics/ca/LayerFlushScheduler.h:
        (WebCore::LayerFlushScheduler::isSuspended): Added.

2012-01-26  Pablo Flouret  <pablof@motorola.com>

        Fix bad code generated by the JSC idl code generator for [CachedAttribute] attributes
        https://bugs.webkit.org/show_bug.cgi?id=77165

        Reviewed by Oliver Hunt.

        Missing parameter in a call to deserialize() and using 'this' in the
        attribute accessor functions (which are static).

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateImplementation):
        (NativeToJSValue):
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::jsTestObjCachedAttribute1):
        (WebCore::jsTestObjCachedAttribute2):
        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp:
        (WebCore::jsTestSerializedScriptValueInterfaceValue):

2012-01-26  W. James MacLean  <wjmaclean@chromium.org>

        [chromium] Allow modification of size of partially occluded quads during culling to reduce pixel overdraw.
        https://bugs.webkit.org/show_bug.cgi?id=76349

        Reviewed by James Robinson.

        Prior to this patch, draw culling either rejects a DrawQuad because it is completely
        occluded, or draws the entire quad (even if it is largely occluded). This patch
        attempts to reduce the number of pixels drawn by determining if a partially
        occluded DrawQuad can be resized to a smaller quad, based on what portion of the
        DrawQuad is actually visible, and performing that resizing where possible.

        Added cases to existing unit tests.

        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::drawTileQuad):
        * platform/graphics/chromium/cc/CCDrawQuad.cpp:
        (WebCore::CCDrawQuad::CCDrawQuad):
        * platform/graphics/chromium/cc/CCDrawQuad.h:
        (WebCore::CCDrawQuad::setQuadVisibleRect):
        (WebCore::CCDrawQuad::quadVisibleRect):
        * platform/graphics/chromium/cc/CCQuadCuller.cpp:
        (WebCore::rectSubtractRegion):
        (WebCore::CCQuadCuller::cullOccludedQuads):

2012-01-26  Anders Carlsson  <andersca@apple.com>

        Scrollbars disappear when switching from legacy to overlay scrollbars
        https://bugs.webkit.org/show_bug.cgi?id=77166

        Reviewed by Dan Bernstein.

        * platform/ScrollView.cpp:
        (WebCore::ScrollView::scrollbarStyleChanged):
        Call positionScrollbarLayers to make sure that the new scrollbar layers are positioned correctly.

        * platform/mac/ScrollAnimatorMac.mm:
        (WebCore::ScrollAnimatorMac::updateScrollerStyle):
        Call ScrollbarThemeMac::setNewPainterForScrollbar after making the call to the scrollbar painter controller
        to set the horizontal or vertical imp, since setting the imp will reset the knob style.

2012-01-26  Adam Barth  <abarth@webkit.org>

        NULL ptr in WebCore::ContainerNode::parserAddChild
        https://bugs.webkit.org/show_bug.cgi?id=76258

        Reviewed by Eric Seidel.

        Test: fast/parser/nested-fragment-parser-crash.html

        We always need a parent element to attach to.  In crazy cases, we can
        have elements in the stack of open elements that are already detached
        from the DOM.  In those cases, they don't have a parent, so we aren't
        able to enforce the maximum DOM depth.  (Fortunately, they're not
        attached to the DOM anymore so we don't need to enforce the maximum DOM
        depth!)

        * html/parser/HTMLConstructionSite.cpp:
        (WebCore::HTMLConstructionSite::attachLater):
        (WebCore::HTMLConstructionSite::fosterParent):

2012-01-26  Cris Neckar  <cdn@chromium.org>

        The registration of schemes is currently racey as they are not registered from the main thread. 
        Getting rid of the assert that ensures that we are registering from the main thread until we can fix this.

        Thank you ap@webkit for helping us identify this.

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

        Reviewed by Adam Barth.

        * platform/SchemeRegistry.cpp:
        (WebCore::CORSEnabledSchemes):

2012-01-26  Anders Carlsson  <andersca@apple.com>

        We don't need to always repaint overlay scrollbars if they're in layers
        https://bugs.webkit.org/show_bug.cgi?id=77159

        Reviewed by Beth Dakin.

        If a scrollable area has overlay scrollbars we'll always invalidate both scrollbars, regardless of
        whether both scroll offsets actually change since they're translucent and we want to draw the new page
        contents underneath.
        
        However, if the scrollbars are painted into GraphicsLayers they'll be composited by the GPU, and so we don't
        need to repaint them unless the corresponding scroll offset actually changes (which is handled in Scrollbar::updateThumb).

        * platform/ScrollableArea.cpp:
        (WebCore::ScrollableArea::setScrollOffsetFromAnimation):

2012-01-26  Joshua Bell  <jsbell@chromium.org>

        IndexedDB: WebCore::IDBKey objects are leaked
        https://bugs.webkit.org/show_bug.cgi?id=77114

        Reviewed by Tony Chang.

        Fixing memory leaks, no new tests.

        * storage/IDBKey.h:
        (WebCore::IDBKey::createInvalid):
        (WebCore::IDBKey::createNumber):
        (WebCore::IDBKey::createString):
        (WebCore::IDBKey::createDate):
        (WebCore::IDBKey::createArray):

2012-01-25  Cris Neckar  <cdn@chromium.org>

        Add a scheme registry for CORS requests. Allow simple CORS requests to be made to registered schemes.
        https://bugs.webkit.org/show_bug.cgi?id=77041

        Reviewed by Alexey Proskuryakov.

        * loader/DocumentThreadableLoader.cpp:
        (WebCore::DocumentThreadableLoader::makeSimpleCrossOriginAccessRequest):
        * platform/SchemeRegistry.cpp:
        (WebCore::CORSEnabledSchemes):
        (WebCore):
        (WebCore::SchemeRegistry::registerCORSEnabledScheme):
        (WebCore::SchemeRegistry::isCORSEnabledScheme):
        * platform/SchemeRegistry.h:
        (SchemeRegistry):

2012-01-26  Noel Gordon  <noel.gordon@gmail.com>

        File extension for webp files is .webp
        https://bugs.webkit.org/show_bug.cgi?id=76982

        Reviewed by Adam Barth.

        No new tests. No change in behavior.

        * platform/image-decoders/webp/WEBPImageDecoder.h:
        (WebCore::WEBPImageDecoder::filenameExtension):

2012-01-26  Alok Priyadarshi  <alokp@chromium.org>

        [chromium] Remove dead and unnecessary code related to LayerChromium::cleanupResources
        https://bugs.webkit.org/show_bug.cgi?id=77137

        Reviewed by James Robinson.

        No new test needed. Only removing dead code.

        * platform/graphics/chromium/LayerChromium.cpp:
        * platform/graphics/chromium/LayerChromium.h:
        (WebCore::LayerChromium::layerTreeHost):
        * platform/graphics/chromium/TiledLayerChromium.cpp:
        (WebCore::TiledLayerChromium::setLayerTreeHost):

2012-01-26  Anders Carlsson  <andersca@apple.com>

        Move horizontal rubber-band checks to ScrollElasticityController::handleWheelEvent
        https://bugs.webkit.org/show_bug.cgi?id=77147

        Reviewed by Adam Roben.

        * platform/mac/ScrollAnimatorMac.h:
        (ScrollAnimatorMac):
        * platform/mac/ScrollAnimatorMac.mm:
        (WebCore::ScrollAnimatorMac::handleWheelEvent):
        Always call ScrollElasticityController::handleWheelEvent, and only call didBeginScrollGesture and
        didEndScrollGesture if the event was actually handled.

        (WebCore::ScrollAnimatorMac::shouldRubberBandInDirection):
        Implement this.

        * platform/mac/ScrollElasticityController.h:
        * platform/mac/ScrollElasticityController.mm:
        (WebCore::ScrollElasticityController::handleWheelEvent):
        Check if we should rubber-band and return false if we shouldn't.

        (WebCore::ScrollElasticityController::shouldRubberBandInHorizontalDirection):
        Ask the client if we should rubber-band.

2012-01-19  James Robinson  <jamesr@chromium.org>

        [chromium] Remove setLayerTreeHost nonsense on lost context
        https://bugs.webkit.org/show_bug.cgi?id=76675

        Reviewed by Kenneth Russell.

        This code isn't needed any more. On a lost context event, we drop all TextureManager-managed textures through
        the proxy and no layer types need special lost context handling.

        * platform/graphics/chromium/cc/CCLayerTreeHost.cpp:
        (WebCore::CCLayerTreeHost::didRecreateGraphicsContext):

2012-01-26  Anders Carlsson  <andersca@apple.com>

        Simplify checking of whether we should rubberband horizontally
        https://bugs.webkit.org/show_bug.cgi?id=77141

        Reviewed by Adam Roben.

        Have a single check for horizontal rubber-banding in both directions. This is in preparation
        for moving this code into ScrollElasticityController.

        * platform/mac/ScrollAnimatorMac.mm:
        (WebCore::shouldRubberBandInHorizontalDirection):
        (WebCore::ScrollAnimatorMac::handleWheelEvent):

2012-01-26  Scott Graham  <scottmg@chomium.org>

        Fix include path in gyp file for V8InternalSettings.h
        https://bugs.webkit.org/show_bug.cgi?id=77128

        Reviewed by Kent Tamura.

        * WebCore.gyp/WebCore.gyp:

2012-01-26  James Robinson  <jamesr@chromium.org>

        We shouldn't synchronously update styles on all documents after running script
        https://bugs.webkit.org/show_bug.cgi?id=46761

        Reviewed by Simon Fraser.

        Currently we call Document::updateStyleForAllDocuments() after invoking any event or timeout handler. This is
        slow since it iterates over the entire document tree and defeats our recalcStyle timer batching. It is
        unnecessary as any code that depends on styles or the render tree being up to date must call
        updateStyleIfNeeded() on the document it is accessing.

        The first reference I can find to this code is in r798 in the file WebCore/khtml/xml/domnode_impl.cpp. It's been
        cargo culted forward ever since.

        * bindings/ScriptControllerBase.cpp:
        (WebCore::ScriptController::executeScript):
        * bindings/js/ScheduledAction.cpp:
        (WebCore::ScheduledAction::execute):
        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::ScriptController):
        (WebCore::ScriptController::executeScriptInWorld):
        * bindings/js/ScriptController.h:
        * bindings/v8/ScheduledAction.cpp:
        (WebCore::ScheduledAction::execute):
        * bindings/v8/ScriptController.cpp:
        (WebCore::ScriptController::ScriptController):
        * bindings/v8/ScriptController.h:
        * dom/ScriptElement.cpp:
        (WebCore::ScriptElement::executeScript):
        * inspector/InspectorClient.cpp:
        (WebCore::InspectorClient::doDispatchMessageOnFrontendPage):

2012-01-26  Anders Carlsson  <andersca@apple.com>

        Get rid of ScrollElasticityController::beginScrollGesture()
        https://bugs.webkit.org/show_bug.cgi?id=77138

        Reviewed by Adam Roben.

        ScrollElasticityController::handleWheelEvent now checks if the wheel event phase is
        PlatformWheelEventPhaseBegan and sets up the gesture state if it is.

        * platform/mac/ScrollAnimatorMac.mm:
        (WebCore::ScrollAnimatorMac::handleWheelEvent):
        * platform/mac/ScrollElasticityController.h:
        (ScrollElasticityController):
        * platform/mac/ScrollElasticityController.mm:
        (WebCore::ScrollElasticityController::handleWheelEvent):

2012-01-26  Anders Carlsson  <andersca@apple.com>

        Get rid of ScrollElasticityController::endScrollGesture()
        https://bugs.webkit.org/show_bug.cgi?id=77134

        Reviewed by Adam Roben.

        Just make ScrollElasticityController::handleWheelEvent call snapRubberBand if the wheel
        event phase is PlatformWheelEventPhaseEnded.

        * platform/mac/ScrollAnimatorMac.mm:
        (WebCore::ScrollAnimatorMac::handleWheelEvent):
        * platform/mac/ScrollElasticityController.h:
        (ScrollElasticityController):
        * platform/mac/ScrollElasticityController.mm:
        (WebCore::ScrollElasticityController::handleWheelEvent):

2012-01-26  Abhishek Arya  <inferno@chromium.org>

        Crash in SVGSVGElement::currentViewBoxRect.
        https://bugs.webkit.org/show_bug.cgi?id=77121

        Reviewed by Nikolas Zimmermann.

        Symbols shouldn't be rendered. Revert the ASSERT
        from r105513 into a hard check.

        Test: svg/custom/symbol-viewport-element-crash.svg

        * svg/SVGLengthContext.cpp:
        (WebCore::SVGLengthContext::determineViewport):

2012-01-26  Anders Carlsson  <andersca@apple.com>

        Inline beginScrollGesture/endScrollGesture in handleWheelEvent
        https://bugs.webkit.org/show_bug.cgi?id=77133

        Reviewed by Andreas Kling.

        * platform/mac/ScrollAnimatorMac.h:
        (ScrollAnimatorMac):
        * platform/mac/ScrollAnimatorMac.mm:
        (WebCore::ScrollAnimatorMac::handleWheelEvent):

2012-01-26  Anders Carlsson  <andersca@apple.com>

        No need to set m_haveScrolledSincePageLoad in beginScrollGesture
        https://bugs.webkit.org/show_bug.cgi?id=77132

        Reviewed by Andreas Kling.

        m_haveScrolledSincePageLoad is already set to true in handleWheelEvent so we don't need
        to set it to true again.

        * platform/mac/ScrollAnimatorMac.mm:
        (WebCore::ScrollAnimatorMac::beginScrollGesture):

2012-01-26  Anders Carlsson  <andersca@apple.com>

        Simplify checking for whether we should rubberband or not when at the edge
        https://bugs.webkit.org/show_bug.cgi?id=77131

        Reviewed by Beth Dakin.

        We only need to check once if we're pinned at either edge whether we should rubber-band
        or not. Do this when the wheel event phase is PlatformWheelEventPhaseBegan. This lets us
        remove a bunch of code that would keep track of the current horizontal scroll direction.

        * platform/mac/ScrollAnimatorMac.h:
        (ScrollAnimatorMac):
        * platform/mac/ScrollAnimatorMac.mm:
        (WebCore::ScrollAnimatorMac::ScrollAnimatorMac):
        (WebCore::ScrollAnimatorMac::handleWheelEvent):
        (WebCore::ScrollAnimatorMac::beginScrollGesture):

2012-01-26  Eli Fidler  <efidler@rim.com>

        [JSC] Inspector instrumentation for JavaScript calls.
        https://bugs.webkit.org/show_bug.cgi?id=40119

        Reviewed by Geoffrey Garen.

        Covered by existing Chromium inspector tests

        * bindings/js/JSCallbackData.cpp:
        (WebCore::JSCallbackData::invokeCallback):
        * bindings/js/JSEventListener.cpp:
        (WebCore::JSEventListener::handleEvent):
        * bindings/js/JSMainThreadExecState.h:
        (WebCore::JSMainThreadExecState::instrumentedCall):
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::willCallFunctionImpl):

2012-01-26  Mike Reed  <reed@google.com>

        Signal to skia to force A8 text from LCD output, but only when we have to disable LCD because we're in a layer
        https://bugs.webkit.org/show_bug.cgi?id=76547

        Reviewed by Stephen White.

        Existing tests should confirm nothing is broken. Antialiased text
        is disabled in layouttests, so they should be unaffected by the
        difference in antialiasing quality.

        * platform/graphics/skia/SkiaFontWin.cpp:
        (WebCore::setupPaintForFont):


2012-01-26  Anders Carlsson  <andersca@apple.com>

        Use PlatformWheelEvent::phase() to determine if a scroll gesture begins or ends
        https://bugs.webkit.org/show_bug.cgi?id=77127

        Reviewed by Beth Dakin.

        * platform/mac/ScrollAnimatorMac.h:
        (ScrollAnimatorMac):
        Remove handleGestureEvent.

        * platform/mac/ScrollAnimatorMac.mm:
        (WebCore::ScrollAnimatorMac::handleWheelEvent):
        Look at the event phase to determine when to call didBeginGesture and didEndGesture.

2012-01-26  Benjamin Poulain  <benjamin@webkit.org>

        Using strncmp() for comparing scheme and port numbers is inefficient
        https://bugs.webkit.org/show_bug.cgi?id=75821

        Reviewed by Darin Adler.

        Replace the equal() function comparing 2 arbitrary strings by a template
        comparing the string to an array, character by character.

        This is only used for small strings: the schemes and the ports.

        * platform/KURL.cpp:
        (WebCore::equal):
        (WebCore::isDefaultPortForScheme):
        (WebCore::isNonFileHierarchicalScheme):
        (WebCore::isCanonicalHostnameLowercaseForScheme):

2012-01-26  Anders Carlsson  <andersca@apple.com>

        WebWheelEvent::Phase and PlatformWheelEvent::Phase declarations should match AppKit
        https://bugs.webkit.org/show_bug.cgi?id=77123

        Reviewed by Beth Dakin.

        * platform/PlatformWheelEvent.h:
        ():
        * platform/mac/PlatformEventFactoryMac.mm:
        (WebCore::phaseForEvent):

2012-01-26  Daniel Cheng  <dcheng@chromium.org>

        Revert code changes from r105800
        https://bugs.webkit.org/show_bug.cgi?id=77071

        The strings are already lowercased in EventHandler.cpp:findDropZone() so there's
        no need to call lower() again.

        Reviewed by Tony Chang.

        Covered by existing tests.

        * dom/Clipboard.cpp:
        (WebCore::Clipboard::hasDropZoneType):

2012-01-26  Stephen Chenney  <schenney@chromium.org>

        REGRESSION (r91125): Polyline tool in google docs is broken
        https://bugs.webkit.org/show_bug.cgi?id=65796

        Reviewed by Nikolas Zimmermann.

        It turns out that the CG problem is a design decision. The bounding code
        returns CGRectNull for cases where a bound is ill-defined, rather than the
        empty bound as expected.

        I'm also removing the workaround for isEmpty to get correct zero length paths.
        It is no longer necessary.

        Tested by existing layout tests.

        * platform/graphics/cg/PathCG.cpp: Removed path empty and path bound testing classes.
        (WebCore::Path::boundingRect): Added check for CGRectNull
        (WebCore::Path::fastBoundingRect): Added check for CGRectNull
        (WebCore::Path::strokeBoundingRect): Added check for CGRectNull
        (WebCore::Path::isEmpty): Reverted to former behavior, just using CGPathIsEmpty.
        (WebCore::Path::hasCurrentPoint): Reverted to former behavior, using isEmpty.
        (WebCore::Path::transform): Reverted to former behavior, using isEmpty.

2012-01-26  Andreas Kling  <awesomekling@apple.com>

        Refactor application of additional style attributes for table elements.
        <http://webkit.org/b/77095>

        Reviewed by Darin Adler.

        The primary purpose of this change is to reduce usage of CSSMappedAttributeDeclaration.
        Instead of using the mapped attribute decl table for additional table style, just use
        regular CSSMutableStyleDeclarations. We cache them all globally, except for the style
        that's shared between a table's cells. That one is cached per-table since it depends
        on the table's border and padding.

        * dom/CSSMappedAttributeDeclaration.cpp:
        (WebCore::CSSMappedAttributeDeclaration::~CSSMappedAttributeDeclaration):
        * dom/MappedAttributeEntry.h:

            Remove the concept of persistent CSSMappedAttributeDeclarations. The hunk in
            ~CSSMappedAttributeDeclaration was wildly wrong since it would leave stale pointers
            in the decl table, but unreachable since we always leaked one ref to those decls.

        * dom/StyledElement.h:
        (WebCore::StyledElement::additionalAttributeStyle):
        * html/HTMLTableCellElement.cpp:
        (WebCore::HTMLTableCellElement::additionalAttributeStyle):
        * html/HTMLTableCellElement.h:
        (HTMLTableCellElement):
        * html/HTMLTableColElement.cpp:
        (WebCore::HTMLTableColElement::additionalAttributeStyle):
        * html/HTMLTableColElement.h:
        (HTMLTableColElement):
        * html/HTMLTableElement.cpp:
        (WebCore::HTMLTableElement::parseMappedAttribute):
        (WebCore::leakBorderStyle):
        (WebCore::HTMLTableElement::additionalAttributeStyle):
        (WebCore::HTMLTableElement::createSharedCellStyle):
        (WebCore::HTMLTableElement::additionalCellStyle):
        (WebCore::leakGroupBorderStyle):
        (WebCore::HTMLTableElement::additionalGroupStyle):
        * html/HTMLTableElement.h:
        (HTMLTableElement):
        * html/HTMLTableSectionElement.cpp:
        (WebCore::HTMLTableSectionElement::additionalAttributeStyle):
        * html/HTMLTableSectionElement.h:
        (HTMLTableSectionElement):

            Instead of collecting additional style decls into a vector, switch over to a
            "PassRefPtr<CSSMutableStyleDeclaration> additionalAttributeStyle()".
            All style declarations that can be reused for all elements are cached at the return
            sites, leaving only the shared table cell style which we cache on HTMLTableElement.
            Also removed the canHaveAdditionalAttributeStyleDecls() virtual since the default
            additionalAttributeStyle() will just return 0.

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

            Updated for the new additional style conventions.

2012-01-26  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Scripts panel editor container should be based on UISourceCode objects, not SourceFrames.
        https://bugs.webkit.org/show_bug.cgi?id=77098

        Reviewed by Pavel Feldman.

        * inspector/front-end/ScriptsNavigator.js:
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype.setScriptSourceIsBeingEdited):
        (WebInspector.ScriptsPanel.prototype.get visibleView):
        (WebInspector.ScriptsPanel.prototype.viewForFile):
        (WebInspector.ScriptsPanel.prototype._uiSourceCodeReplaced):
        (WebInspector.EditorContainer):
        (WebInspector.EditorContainer.prototype.get visibleView):
        (WebInspector.EditorContainer.prototype.showFile):
        (WebInspector.EditorContainer.prototype.setFileIsDirty):
        (WebInspector.EditorContainer.prototype.replaceFiles):
        (WebInspector.EditorContainer.prototype.reset):
        (WebInspector.EditorContainerDelegate):
        (WebInspector.EditorContainerDelegate.prototype.viewForFile):
        (WebInspector.ScriptsPanel.ComboBoxFileSelector.prototype.replaceUISourceCodes):
        (WebInspector.ScriptsPanel.SingleFileEditorContainer):
        (WebInspector.ScriptsPanel.SingleFileEditorContainer.prototype.get visibleView):
        (WebInspector.ScriptsPanel.SingleFileEditorContainer.prototype.showFile):
        (WebInspector.ScriptsPanel.SingleFileEditorContainer.prototype.setFileIsDirty):
        (WebInspector.ScriptsPanel.SingleFileEditorContainer.prototype.replaceFiles):
        (WebInspector.ScriptsPanel.SingleFileEditorContainer.prototype.reset):
        * inspector/front-end/TabbedEditorContainer.js:
        (WebInspector.TabbedEditorContainer):
        (WebInspector.TabbedEditorContainer.prototype.get visibleView):
        (WebInspector.TabbedEditorContainer.prototype._titleForFile):
        (WebInspector.TabbedEditorContainer.prototype._tooltipForFile):
        (WebInspector.TabbedEditorContainer.prototype._appendFileTab):
        (WebInspector.TabbedEditorContainer.prototype._tabClosed):
        (WebInspector.TabbedEditorContainer.prototype._tabSelected):
        (WebInspector.TabbedEditorContainer.prototype.replaceFiles.get if):
        (WebInspector.TabbedEditorContainer.prototype.replaceFiles):
        (WebInspector.TabbedEditorContainer.prototype.setFileIsDirty.get if):
        (WebInspector.TabbedEditorContainer.prototype.setFileIsDirty):
        (WebInspector.TabbedEditorContainer.prototype.reset):

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

        SVG + <object> tests are flakey
        https://bugs.webkit.org/show_bug.cgi?id=77099

        Reviewed by Andreas Kling.

        Bug 76447 changed the way RenderSVGRoot figures out its size. Previously RenderSVGRoot directly called out to the
        ownerRenderer (RenderEmbeddedObject) to compute its replaced size when embedded through eg. <object> element,
        which was quite hacky. It now relies on the ownerRenderers availableLogicalWidth/Height to be correctly set,
        which requires that the ownerRenderer is always laid out before the RenderSVGRoot and not the other way round.

        This is the source of current flakiness bugs.

        In trunk FrameView contains several special hacks, to layout the ownerRenderers view, after the RenderSVGRoots view
        finished layout. This worked without flakiness as RenderSVGRoot used to directly call computeReplacedLogicalWidth/Height
        on the ownerRenderer, which is now gone. Fortunately we can keep the new design, and can remove all hacks out of
        RenderSVGRoot/FrameView, if we can guarantee that the ownerRenderer FrameView is laid out before the RenderSVGRoot FrameView.

        This is a much less error-prone approach as the previous one. This lets us run nrwt --tolerance 0 -p svg -g again,
        without 100% reproducable failing svg/wicd tests. (There's still one unrelated error, before guard malloc mode passes fully).

        Test: svg/wicd/sizing-flakiness.html (Adjusted version of the rightsizing test, made to fail with trunk w/o this patch.)

        * page/FrameView.cpp: Remove m_inLayoutParentView.
        (WebCore::FrameView::FrameView): Remove no longer needed m_inLayoutParentView.
        (WebCore::FrameView::forceLayoutParentViewIfNeeded): Simplify, no need to call updateWidgetPositions anymore, nor to clear/query flags in RenderSVGRoot.
        (WebCore::FrameView::layout): Call forceLayoutParentViewIfNeeded() before laying out the embedded document, to guarantee the correct order.
        * page/FrameView.h:
        (FrameView): Remove m_inLayoutParentView.
        * rendering/svg/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::RenderSVGRoot): Remove m_needsSizeNegotiationWithHostDocument.
        (WebCore::resolveLengthAttributeForSVG): Remove outcommented code, that went in by accident.
        (WebCore::RenderSVGRoot::layout): Remove m_needsSizeNegotiationWithHostDocument handling which is now incorrect and no longer needed.
        * rendering/svg/RenderSVGRoot.h:
        (RenderSVGRoot): Remove m_needsSizeNegotiationWithHostDocument + accessors.

2012-01-23  Andreas Kling  <awesomekling@apple.com>

        Make elements that don't have attributes smaller.
        <http://webkit.org/b/76876>

        Reviewed by Antti Koivisto.

        Move the inline style declaration from StyledElement to NamedNodeMap, since having
        an inline style declaration also implies having a style attribute on the element.
        This saves one CPU word per element that has no attributes.

        This reduces memory consumption by 412 kB (on 64-bit) when viewing the full
        HTML5 spec at <http://whatwg.org/c>.

        * dom/NamedNodeMap.cpp:
        (WebCore::NamedNodeMap::ensureInlineStyleDecl):
        (WebCore::NamedNodeMap::destroyInlineStyleDecl):
        (WebCore::NamedNodeMap::createInlineStyleDecl):
        * dom/NamedNodeMap.h:
        (WebCore::NamedNodeMap::inlineStyleDecl):
        * dom/StyledElement.cpp:
        (WebCore::StyledElement::updateStyleAttribute):
        (WebCore::StyledElement::addSubresourceAttributeURLs):
        * dom/StyledElement.h:
        (WebCore::StyledElement::inlineStyleDecl):
        (WebCore::StyledElement::ensureInlineStyleDecl):
        (WebCore::StyledElement::destroyInlineStyleDecl):

2012-01-26  Jesus Sanchez-Palencia  <jesus.palencia@openbossa.org>

        [Qt] Use ICU if available
        https://bugs.webkit.org/show_bug.cgi?id=76821

        Reviewed by Simon Hausmann.

        Adding correct sources to a Qt 5 based build.

        No new tests, it's just a build dependency change.

        * Target.pri:

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

        Not reviewed. Fix mac build after r105988.

        * WebCore.exp.in:

2012-01-26  Nándor Huszka  <huszka.nandor@stud.u-szeged.hu>

        [WK2] WebKitTestRunner needs layoutTestController.setGeolocationPermission
        https://bugs.webkit.org/show_bug.cgi?id=42545

        Reviewed by Zoltan Herczeg.

        No need for new tests, there is no behavior change.

        Added a line to file which copies the forwarding headers.

        * WebCore.vcproj/copyForwardingHeaders.cmd:

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

        Not reviewed. Fix Qt build after r105978.

        * rendering/svg/RenderSVGResourceClipper.cpp: Add missing Frame/FrameView includes.
        * rendering/svg/RenderSVGResourceSolidColor.cpp: Ditto.
        * rendering/svg/SVGInlineTextBox.cpp: Ditto.
        * rendering/svg/SVGRenderSupport.cpp: Ditto.

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

        Not reviewed. Fix non-AllInOne builds after r105978.

        * rendering/svg/RenderSVGResource.cpp:

2012-01-26  Vsevolod Vlasov  <vsevik@chromium.org>

        Unreviewed inspector closure compilation fix.

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

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

        Not reviewed. Fix release builds after r105978.

        * rendering/svg/SVGInlineTextBox.cpp:
        (WebCore::SVGInlineTextBox::paintSelectionBackground): Remove unused variable.

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

        Unreviewed, rolling out r105968.
        http://trac.webkit.org/changeset/105968
        https://bugs.webkit.org/show_bug.cgi?id=76995

        Incorrect behavior change

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::setIndeterminate):

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

        crash in WebCore::RenderSVGContainer::paint
        https://bugs.webkit.org/show_bug.cgi?id=69714

        Reviewed by Dirk Schulze.

        When RenderSVGResourceClipper draws its children to a mask, it requires some special constraints:
        - fill-opacity/stroke-opacity/opacity forced to 1
        - masker/filter resources shouldn't be applied to the children
        - fill must be set to the initial fill paint server for all children (solid black)
        - stroke must be set to the initial stroke paint server for all children (none)

        This was achieved before by mutating the style of the children, which made them need a relayout.
        SVGImageBufferTools:renderSubtreeToImageBuffer thus needed to layout the children, if needed, before painting.

        This can be completly avoided, when changing RenderSVGResourceClipper to avoid style mutations.
        Introduce a new "PaintBehaviorRenderingSVGMask", and set the current FrameViews paintBehaviour to this
        state, before painting the subtree. This way we can detect that we're rendering a clip mask, without
        having to mutate the style of the children and without having to relayout.

        We can now ASSERT(!item->needsLayout()) in renderSubtreeToImageBuffer.

        Tests: svg/clip-path/clip-path-tspan-and-stroke.svg
               svg/custom/layout-loop.svg

        * rendering/PaintPhase.h:
        * rendering/svg/RenderSVGResource.cpp:
        (WebCore::requestPaintingResource):
        * rendering/svg/RenderSVGResourceClipper.cpp:
        (WebCore::RenderSVGResourceClipper::RenderSVGResourceClipper):
        (WebCore::RenderSVGResourceClipper::removeAllClientsFromCache):
        (WebCore::RenderSVGResourceClipper::removeClientFromCache):
        (WebCore::RenderSVGResourceClipper::applyClippingToContext):
        (WebCore::RenderSVGResourceClipper::drawContentIntoMaskImage):
        * rendering/svg/RenderSVGResourceClipper.h:
        * rendering/svg/RenderSVGResourceMasker.cpp:
        (WebCore::RenderSVGResourceMasker::applyResource):
        (WebCore::RenderSVGResourceMasker::drawContentIntoMaskImage):
        * rendering/svg/RenderSVGResourceMasker.h:
        * rendering/svg/RenderSVGResourcePattern.cpp:
        (WebCore::RenderSVGResourcePattern::createTileImage):
        * rendering/svg/RenderSVGResourceSolidColor.cpp:
        (WebCore::RenderSVGResourceSolidColor::applyResource):
        * rendering/svg/SVGImageBufferTools.cpp:
        (WebCore::SVGImageBufferTools::renderSubtreeToImageBuffer):
        * rendering/svg/SVGInlineTextBox.cpp:
        (WebCore::SVGInlineTextBox::paintSelectionBackground):
        (WebCore::SVGInlineTextBox::paint):
        * rendering/svg/SVGRenderSupport.cpp:
        (WebCore::SVGRenderSupport::prepareToRenderSVGContent):

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

        Not reviewed. Try to fix Gtk build - JSShadowRoot.cpp can't be found, fix by looking for it in the derived sources.

        * GNUmakefile.list.am:

2012-01-24  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Improve user experience of advanced search panel closing.
        https://bugs.webkit.org/show_bug.cgi?id=76983

        Reviewed by Pavel Feldman.

        Added close button to search panel.
        Esc now closes the panel even when search filed has focus.

        * English.lproj/localizedStrings.js:
        * inspector/front-end/AdvancedSearchController.js:
        (WebInspector.AdvancedSearchController.prototype.close):
        (WebInspector.SearchView):
        (WebInspector.SearchView.prototype._onKeyDown):
        (WebInspector.SearchView.prototype._closeButtonPressed):
        * inspector/front-end/inspector.css:
        (.search-view .search-panel):
        (.search-view .search-panel button.search-close-button):
        * inspector/front-end/inspector.js:
        (WebInspector._escPressed):
        (WebInspector.closeDrawerView):

2012-01-26  Joe Thomas  <joethomas@motorola.com>

        https://bugs.webkit.org/show_bug.cgi?id=76995.
        WebKit fails IETC :indeterminate and input type=radio test.

        As per the HTML spec http://www.whatwg.org/specs/web-apps/current-work/multipage/the-input-element.html#dom-input-indeterminate,
        only checkbox input type should respect the indeterminate state.
        Removed the support for indeterminate state for radio input types.

        Reviewed by Eric Seidel.

        Modified the existing test cases.

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::setIndeterminate): Indeterminate state is supported only for checkbox input type.

2012-01-25  Daniel Cheng  <dcheng@chromium.org>

        [chromium] Fix ClipboardChromium::validateFilename to actually operate on extensions
        https://bugs.webkit.org/show_bug.cgi?id=76996

        As it turns out, we were always calling validateFilename on a data object with an empty
        extension. Now we call it on an actual extension so that it's sanitized.

        Reviewed by Tony Chang.

        Unit test: webkit_unit_tests --gtest_filter=ClipboardChromium.*

        * WebCore.gypi:
        * platform/chromium/ClipboardChromium.cpp:
        (WebCore::writeImageToDataObject):
        * platform/chromium/ClipboardChromium.h:
        (ClipboardChromium):
        * platform/chromium/ClipboardChromiumLinux.cpp: Removed.
        * platform/chromium/ClipboardChromiumPosix.cpp: Renamed from Source/WebCore/platform/chromium/ClipboardChromiumMac.cpp.
        (WebCore):
        (WebCore::isInvalidFileCharacter):
        (WebCore::ClipboardChromium::validateFilename):
        * platform/chromium/ClipboardChromiumWin.cpp:
        (WebCore):
        (WebCore::ClipboardChromium::validateFilename):

2012-01-25  James Robinson  <jamesr@chromium.org>

        [chromium] Rollout r100751, this mechanism does not work and is very slow
        https://bugs.webkit.org/show_bug.cgi?id=77055

        Unreviewed rollout of http://trac.webkit.org/changeset/100751. The refresh rate mechanism is not implemented,
        but it still triggers a very slow codepath and triggers races on some platforms.

        * platform/PlatformScreen.h:
        (WebCore):
        * platform/chromium/PlatformScreenChromium.cpp:
        * platform/chromium/PlatformSupport.h:
        (PlatformSupport):
        ():
        * platform/graphics/chromium/cc/CCLayerTreeHost.h:
        (WebCore::CCSettings::CCSettings):
        (CCSettings):
        * platform/graphics/chromium/cc/CCThreadProxy.cpp:
        (WebCore::CCThreadProxy::initializeImplOnImplThread):

2012-01-25  Mark Rowe  <mrowe@apple.com>

        Reapply Daniel Bates's build fix from r105847 after the exact same issue was reintroduced in r105930.
        
        Attempt to fix Mac build after changeset <http://trac.webkit.org/changeset/105930>.
        (https://bugs.webkit.org/show_bug.cgi?id=75049)

        Don't include NotImplemented.h in KURL.h since NotImplemented.h includes Logging.h, which defines
        LOG_CHANNEL_PREFIX to be "Log". And this conflicts with the inclusion of WebKitLogging.h in
        WebHTMLView.mm (which would have defined LOG_CHANNEL_PREFIX to be "WebKitLog").

        * platform/KURL.h:
        (WebCore::KURL::innerURL):

2012-01-25  Eric Seidel  <eric@webkit.org>

        Unreviewed, rolling out r105940.
        http://trac.webkit.org/changeset/105940
        https://bugs.webkit.org/show_bug.cgi?id=76095

        Only half this change landed

        * DerivedSources.cpp:
        * DerivedSources.make:
        * DerivedSources.pri:

2012-01-25  Mark Rowe  <mrowe@apple.com>

        Build in to an alternate location when USE_STAGING_INSTALL_PATH is set.

        <rdar://problem/10609417> Adopt USE_STAGING_INSTALL_PATH

        Reviewed by David Kilzer.

        * Configurations/WebCore.xcconfig: Define NORMAL_WEBCORE_FRAMEWORKS_DIR, which contains
        the path where WebCore is normally installed. Update WEBCORE_FRAMEWORKS_DIR to point to
        the staged frameworks directory when USE_STAGING_INSTALL_PATH is set. Define
        NORMAL_PRODUCTION_FRAMEWORKS_DIR, which contains the path where our public frameworks
        are normally installed. Update PRODUCTION_FRAMEWORKS_DIR to point to the staged frameworks
        directory when USE_STAGING_INSTALL_PATH is set. Always set the framework's install name
        based on the normal framework location. This prevents an incorrect install name from being
        used when installing in to the staged frameworks directory. Look for our other frameworks
        in the staged frameworks directory when USE_STAGING_INSTALL_PATH is set.

2012-01-25  Eric Seidel  <eric@webkit.org>

        "text" and "URL" legacy clipboard types should not be case sensitive
        https://bugs.webkit.org/show_bug.cgi?id=76947

        Reviewed by Adam Barth.

        This matches the HTML5 spec which says the first thing to do is to lowercase
        the type before comparing.
        I also removed the stripping of whitespace since that is not part of the modern spec (and no tests failed as a result of removal).
        Turns out we already had a test for case sensitivity, but it was disabled on Mac
        so I just re-enabled it and have added failing expectations for the parts
        of the test we still fail.

        * platform/mac/ClipboardMac.mm:
        (WebCore::cocoaTypeFromHTMLClipboardType):
        (WebCore::ClipboardMac::getData):

2012-01-25  Eric Seidel  <eric@webkit.org>

        HTMLIsIndexElement should not expose HTMLInputElement properties
        https://bugs.webkit.org/show_bug.cgi?id=76095

        Reviewed by Adam Barth.

        document.createElement("isindex") should produce an HTMLUnknownElement
        per the HTML5 spec.  The parser automagically translates <isindex> into
        a whole dom tree roughly representing what <isindex> used to do 15 years ago. :)

        This patch just removes our support for HTMLIsIndexElement.  The parser
        support was already in.  Having support for HTMLIsIndexElement was causing
        one of the IE TestCenter tests to fail.

        Test: fast/dom/HTMLIsIndexElement/prototype-chain.html

        * DerivedSources.cpp:
        * DerivedSources.make:
        * DerivedSources.pri:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.exp.in:
        * WebCore.gypi:
        * WebCore.order:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/gobject/GNUmakefile.am:
        * bindings/gobject/WebKitHTMLElementWrapperFactory.cpp:
        (WebKit::createHTMLElementWrapper):
        * bindings/objc/DOM.mm:
        (WebCore::createElementClassMap):
        * bindings/objc/DOMHTML.h:
        * bindings/objc/PublicDOMInterfaces.h:
        * html/HTMLElementsAllInOne.cpp:
        * html/HTMLIsIndexElement.cpp: Removed.
        * html/HTMLIsIndexElement.h: Removed.
        * html/HTMLIsIndexElement.idl: Removed.
        * html/HTMLTagNames.in:
        * page/DOMWindow.idl:

2012-01-25  Eric Seidel  <eric@webkit.org>

        HTMLEmbedObject should match HTMLObjectElement by stopping any load when it is removed from beforeload
        https://bugs.webkit.org/show_bug.cgi?id=74360

        Reviewed by Adam Barth.

        Neither of these !renderer() checks is strictly necessary since requestObject()
        makes the same check.  However requestObject() asserts before it makes that
        check, so it makes sense to add the check to HTMLEmebedObject instead of
        removing the check from HTMLObjectElement.
        I also moved the protect RefPtr to before the beforeload dispatch since
        beforeload can remove the whole DOM element (as this test does) and
        thus I beleive the renderer() check could be checking free'd memory.

        Updated fast/dom/beforeload/remove-flash-in-beforeload-listener.html to test
        <embed> as well as <object>.

        * html/HTMLEmbedElement.cpp:
        (WebCore::HTMLEmbedElement::updateWidget):
        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::updateWidget):

2012-01-25  Kent Tamura  <tkent@chromium.org>

        Move focus/blur handling code of HTMLInputElement to InputType
        https://bugs.webkit.org/show_bug.cgi?id=76984

        Reviewed by Dimitri Glazkov.

        No new tests. Just a refactoring.

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::handleFocusEvent):
        Move the code to PasswordInputType::handleFocusEvent().
        (WebCore::HTMLInputElement::handleBlurEvent):
        Move the code to TextFieldInputType::handleBlurEvent() and
        PasswordInputType::handleBlurEvent().
        * html/InputType.cpp:
        (WebCore::InputType::handleFocusEvent):
        * html/InputType.h:
        (InputType): Add handleFocusEvent().
        * html/PasswordInputType.cpp:
        (WebCore::PasswordInputType::handleFocusEvent):
        Move the code for type=password from HTMLInputElement::handleFocusEvent().
        (WebCore::PasswordInputType::handleBlurEvent):
        Move the code for tyep=password from HTMLInputElement::handleBlurEvent().
        * html/PasswordInputType.h:
        (PasswordInputType): Add handleFocusEvent() and handleBlurEvent().
        * html/TextFieldInputType.cpp:
        (WebCore::TextFieldInputType::handleBlurEvent):
        Move the code for text field types from HTMLInputElement::handleBlurEvent().
        * html/TextFieldInputType.h:
        (TextFieldInputType): Add handleBlurEvent().

2012-01-25  Adam Barth  <abarth@webkit.org>

        Node.cpp shouldn't duplicate QualifiedName parsing logic
        https://bugs.webkit.org/show_bug.cgi?id=76672

        Reviewed by Eric Seidel.

        I added this code out of ignorance that this logic already existed in
        Document.cpp.  In a future patch, we should consider moving it to
        QualifiedName.cpp.

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

2012-01-25  Eric Seidel  <eric@webkit.org>

        Share more code between updateWidget implementations in HTMLEmbedElement and HTMLObjectElement
        https://bugs.webkit.org/show_bug.cgi?id=74340

        Reviewed by Adam Barth.

        I'm preparing to unify these two methods, and starting by sharing more code between them.

        * html/HTMLEmbedElement.cpp:
        (WebCore::HTMLEmbedElement::updateWidget):
        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::updateWidget):
        * html/HTMLPlugInElement.cpp:
        (WebCore::HTMLPlugInElement::guardedDispatchBeforeLoadEvent):
        * html/HTMLPlugInElement.h:

2012-01-25  Eric Uhrhane  <ericu@chromium.org>

        Add full support for filesystem URLs.
        https://bugs.webkit.org/show_bug.cgi?id=75049

        Reviewed by Adam Barth.

        No new tests; existing layout tests cover the basic functionality, and
        the new functionality won't be there until Chromium adds it.  This patch
        merely enables that, without changing behavior.

        * fileapi/EntryBase.cpp:
        (WebCore::EntryBase::toURL): Add missing escaping of URL path.

        * page/SecurityOrigin.cpp:
        (WebCore::extractInnerURL): Use innerURL member, if it's populated.

        * platform/KURL.h:
        (WebCore::KURL::innerURL): Add innerURL member.

        * platform/KURLGoogle.cpp:
        (WebCore::KURLGooglePrivate::KURLGooglePrivate):
        (WebCore::KURLGooglePrivate::operator=):
        Add copy constructor and operator=, which are now needed since
        m_innerURL needs special handling.
        (WebCore::KURLGooglePrivate::setUtf8):
        (WebCore::KURLGooglePrivate::setAscii):
        Add calls to initInnerURL.
        (WebCore::KURLGooglePrivate::initInnerURL):
        Add method to init/copy m_innerURL.
        (WebCore::KURLGooglePrivate::copyTo):
        Handle m_innerURL during copies.
        (WebCore::encodeWithURLEscapeSequences):
        Unescape %2F ['/'] in paths; it's much more readable, and it's safe.

        * platform/KURLGooglePrivate.h:
        (WebCore::KURLGooglePrivate::innerURL): Add accessor for new m_innerURL.

2012-01-25  Daniel Cheng  <dcheng@chromium.org>

        [chromium] Refactor Clipboard invalidate for DataTransferItem/DataTransferItemList into a wrapper
        https://bugs.webkit.org/show_bug.cgi?id=76993

        We want to unify the backing data store for ClipboardChromium and DataTransferItems. For
        that, we want use a similar representation to DataTransferItem list inside
        ChromiumDataObject.  However, since ChromiumDataObject should be valid in scopes where
        Clipboard is not (e.g. default drag processing), we need to separate the clipboard
        invalidation logic into a wrapper class.

        Reviewed by Tony Chang.

        Covered by existing tests.

        * platform/chromium/ClipboardChromium.cpp:
        ():
        (WebCore::ClipboardChromium::items):
        * platform/chromium/DataTransferItemChromium.cpp:
        (WebCore::DataTransferItemChromium::getAsString):
        * platform/chromium/DataTransferItemListChromium.cpp:
        (WebCore::DataTransferItemListChromium::length):
        (WebCore::DataTransferItemListChromium::item):
        (WebCore::DataTransferItemListChromium::deleteItem):
        (WebCore::DataTransferItemListChromium::clear):
        (WebCore::DataTransferItemListChromium::add):

2012-01-25  No'am Rosenthal  <noam.rosenthal@nokia.com>

        [Texmap] Divide TextureMapperNode.cpp to 3 files.
        https://bugs.webkit.org/show_bug.cgi?id=76660

         Reviewed by Kenneth Rohde Christiansen.

         Split the animation part of TextureMapperNode out to a separate file, called
         TextureMapperAnimation.
         Provide a clean interface for that class, that allows separating the internals of the scene
         painting from the internals of the animation interpolation.

         No new tests. Existing animation tests cover this.

         * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * platform/graphics/texmap/GraphicsLayerTextureMapper.cpp:
        (WebCore::GraphicsLayerTextureMapper::addAnimation):
        (WebCore::GraphicsLayerTextureMapper::pauseAnimation):
        (WebCore::GraphicsLayerTextureMapper::removeAnimation):
        * platform/graphics/texmap/GraphicsLayerTextureMapper.h:
        (GraphicsLayerTextureMapper):
        * platform/graphics/texmap/TextureMapperNode.cpp:
        (WebCore::TextureMapperNode::syncCompositingStateSelf):
        (WebCore::TextureMapperNode::descendantsOrSelfHaveRunningAnimations):
        (WebCore::TextureMapperNode::syncAnimations):
        (WebCore::TextureMapperNode::syncAnimationsRecursively):
        (WebCore::TextureMapperNode::syncCompositingState):
        * platform/graphics/texmap/TextureMapperNode.h:
        (TextureMapperNode):

2012-01-25  Hajime Morita  <morrita@google.com>

        ENABLE_SHADOW_DOM should be available via build-webkit --shadow-dom
        https://bugs.webkit.org/show_bug.cgi?id=76863

        Reviewed by Dimitri Glazkov.

        Added a feature flag.

        No tests, it's a behid flag configuration change.

        * CMakeLists.txt:
        * Configurations/FeatureDefines.xcconfig:
        * DerivedSources.cpp:
        * DerivedSources.make:
        * DerivedSources.pri:
        * GNUmakefile.am:
        * GNUmakefile.list.am:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:

2012-01-25  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r105906.
        http://trac.webkit.org/changeset/105906
        https://bugs.webkit.org/show_bug.cgi?id=77038

        Breaks compositing/visibility/layer-visible-content.html and
        compositing/visibility/visibility-image-layers-dynamic.html
        (Requested by leviw|gardening on #webkit).

        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateGraphicsLayerGeometry):

2012-01-25  Mike Fenton  <mifenton@rim.com>

        Page Up and Page Down mappings are backwards on BlackBerry port.
        https://bugs.webkit.org/show_bug.cgi?id=77021

        Fix Page Up and Page Down mappings as they are reversed.

        Reviewed by Antonio Gomes.

        * platform/blackberry/PlatformKeyboardEventBlackBerry.cpp:
        (WebCore::keyIdentifierForBlackBerryCharacter):
        (WebCore::windowsKeyCodeForBlackBerryCharacter):

2012-01-25  Hajime Morita  <morrita@google.com>

        <content> should create HTMLContentElement object
        https://bugs.webkit.org/show_bug.cgi?id=76439

        Reviewed by Dimitri Glazkov.

        - Added HTMLContentElement.idl which has @select attribute.
        - Added "content" element.

        Both are behind ENABLE_SHADOW_DOM.

        Tests: fast/dom/shadow/content-element-api.html
               fast/dom/shadow/content-element-outside-shadow.html

        * CMakeLists.txt:
        * DerivedSources.cpp:
        * DerivedSources.make:
        * DerivedSources.pri:
        * GNUmakefile.list.am:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * html/HTMLTagNames.in:
        * html/shadow/HTMLContentElement.cpp:
        (WebCore::contentTagName):
        (WebCore):
        (WebCore::HTMLContentElement::create):
        * html/shadow/HTMLContentElement.h:
        (HTMLContentElement):
        * html/shadow/HTMLContentElement.idl: Added.

2012-01-25  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r105828.
        http://trac.webkit.org/changeset/105828
        https://bugs.webkit.org/show_bug.cgi?id=77036

        Caused many crashes in ClusterFuzz and PerformanceTests
        (Requested by inferno-sec on #webkit).

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::removeChild):
        * rendering/RenderBlock.h:
        (RenderBlock):

2012-01-25  Shawn Singh  <shawnsingh@chromium.org>

        Fix the semantics of passing contentsVisible flag to GraphicsLayers
        https://bugs.webkit.org/show_bug.cgi?id=76975

        Reviewed by Simon Fraser.

        This patch is covered by existing tests, in particular
        compositing/visibility/layer-visible-content.html; its
        expectations are rebaselined.

        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateGraphicsLayerGeometry):

2012-01-25  Tony Chang  <tony@chromium.org>

        support overflow:auto and overflow:scroll in new flexbox
        https://bugs.webkit.org/show_bug.cgi?id=76953

        Reviewed by David Hyatt.

        Tests: css3/flexbox/flexbox-overflow-auto-expected.html
               css3/flexbox/flexbox-overflow-auto.html

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::addLayoutOverflow): In the case of reverse flexboxen, we can overflow up or to the left (like horizontal-bt or rtl content).
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::layoutBlock): Call updateScrollInfoAfterLayout() to add overflow scrollbars.
        (WebCore::RenderFlexibleBox::layoutAndPlaceChildren): In row-reverse, offset the start of the content by the scrollbar.
        (WebCore::RenderFlexibleBox::layoutColumnReverse): In column-reverse, offset the start of the content by the scrollbar.
        * rendering/RenderFlexibleBox.h:
        (RenderFlexibleBox): Make isHorizontalFlow public.
        * rendering/style/RenderStyle.h:
        (WebCore::RenderStyleBitfields::isReverseFlexDirection): Convenience method.

2012-01-25  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r105885.
        http://trac.webkit.org/changeset/105885
        https://bugs.webkit.org/show_bug.cgi?id=77027

        Causes assertions in Position. (Requested by leviw|gardening
        on #webkit).

        * dom/Position.cpp:
        (WebCore::Position::upstream):
        (WebCore::Position::downstream):
        * dom/PositionIterator.cpp:
        * dom/PositionIterator.h:
        (PositionIterator):
        * editing/htmlediting.cpp:
        (WebCore::nextCandidate):
        (WebCore::nextVisuallyDistinctCandidate):
        (WebCore::previousCandidate):
        (WebCore::previousVisuallyDistinctCandidate):

2012-01-25  Alexis Menard  <alexis.menard@openbossa.org>

        border-image should be implemented like a shorthand.
        https://bugs.webkit.org/show_bug.cgi?id=76697

        Reviewed by Tony Chang.

        Make sure that border-image is implemented like a shorthand : when we parse
        it we set the correct value to its longhands. The code was not doing it
        previously as we inherited the old implementation of -webkit-border-image which
        is not a shorthand but a regular property. It will then increase
        style.length for a given element as we now expand the longhands.
        The behavior stays the same for -webkit-border-image.

        Test: fast/css/border-image-style-length.html

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):
        (WebCore::BorderImageParseContext::BorderImageParseContext):
        (WebCore::BorderImageParseContext::commitWebKitBorderImage):
        (WebCore::BorderImageParseContext::commitBorderImage):
        (BorderImageParseContext):
        (WebCore::BorderImageParseContext::commitBorderImageProperty):
        (WebCore::CSSParser::parseBorderImage):
        * css/CSSParser.h:
        ():
        * css/CSSPropertyLonghand.cpp:
        (WebCore::initShorthandMap):
        * css/CSSStyleApplyProperty.cpp:
        ():
        (WebCore::ApplyPropertyExpanding::applyInheritValue):
        (WebCore::ApplyPropertyExpanding::applyInitialValue):
        (WebCore::ApplyPropertyExpanding::applyValue):
        (WebCore::ApplyPropertyBorderImageModifier::applyInitialValue):
        (WebCore::CSSStyleApplyProperty::CSSStyleApplyProperty):
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::mapNinePieceImage):
        * page/animation/AnimationBase.cpp:
        (WebCore::AnimationBase::ensurePropertyMap):
        (WebCore::addShorthandProperties):
        * rendering/style/RenderStyle.h:
        (WebCore::RenderStyleBitfields::borderImageSlices):
        (WebCore::RenderStyleBitfields::borderImageWidth):
        (WebCore::RenderStyleBitfields::borderImageOutset):
        (RenderStyleBitfields):
        (WebCore::RenderStyleBitfields::setBorderImageSlices):
        (WebCore::RenderStyleBitfields::setBorderImageWidth):
        (WebCore::RenderStyleBitfields::setBorderImageOutset):

2012-01-23  MORITA Hajime  <morrita@google.com>

        [Refactoring][Internals] Should have InternalSettings
        https://bugs.webkit.org/show_bug.cgi?id=76424

        Reviewed by Kent Tamura.

        This change extracted setting related method from window.internals
        to window.internals.settings object.
        - Invoked Internals::reset() in the constructor to employ Document object.
        - Moved setting and configuration related Internals methods to
          newly introduced InternalSettings object.

        No new tests, covered by existing tests.

        * DerivedSources.make:
        * DerivedSources.pri:
        * GNUmakefile.am:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gyp/WebCore.gyp:
        * WebCore.gypi:
        * WebCore.vcproj/WebCoreTestSupport.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * testing/InternalSettings.cpp: Added.
        (WebCore::InternalSettings::create):
        (WebCore::InternalSettings::~InternalSettings):
        (WebCore::InternalSettings::InternalSettings):
        (WebCore::InternalSettings::settings):
        (WebCore::InternalSettings::document):
        (WebCore::InternalSettings::page):
        (WebCore::InternalSettings::setInspectorResourcesDataSizeLimits):
        (WebCore::InternalSettings::setForceCompositingMode):
        (WebCore::InternalSettings::setAcceleratedFiltersEnabled):
        (WebCore::InternalSettings::setEnableCompositingForFixedPosition):
        (WebCore::InternalSettings::setEnableCompositingForScrollableFrames):
        (WebCore::InternalSettings::setAcceleratedDrawingEnabled):
        (WebCore::InternalSettings::setEnableScrollAnimator):
        (WebCore::InternalSettings::setZoomAnimatorTransform):
        (WebCore::InternalSettings::setZoomParameters):
        (WebCore::InternalSettings::setMockScrollbarsEnabled):
        (WebCore::InternalSettings::setPasswordEchoEnabled):
        (WebCore::InternalSettings::setPasswordEchoDurationInSeconds):
        (WebCore::InternalSettings::setShouldLayoutFixedElementsRelativeToFrame):
        (WebCore::InternalSettings::setUnifiedTextCheckingEnabled):
        (WebCore::InternalSettings::unifiedTextCheckingEnabled):
        (WebCore::InternalSettings::pageScaleFactor):
        (WebCore::InternalSettings::setPageScaleFactor):
        (WebCore::InternalSettings::setPerTileDrawingEnabled):
        * testing/InternalSettings.h: Added.
        * testing/InternalSettings.idl: Added.
        * testing/Internals.cpp:
        (WebCore::Internals::create):
        (WebCore::Internals::Internals):
        (WebCore::Internals::reset):
        * testing/Internals.h:
        (WebCore::Internals::settings):
        * testing/Internals.idl:
        * testing/js/WebCoreTestSupport.cpp:
        (WebCoreTestSupport::injectInternalsObject):
        * testing/v8/WebCoreTestSupport.cpp:
        (WebCoreTestSupport::injectInternalsObject):

2012-01-25  Alexis Menard  <alexis.menard@openbossa.org>

        border-image should not crash when the source is not specified.
        https://bugs.webkit.org/show_bug.cgi?id=77001

        Reviewed by Andreas Kling.

        This bug was introduced by r105502 but was exposed by r105738.
        The image-source of a border-image is not mandatory therefore it
        may happen that you have no value set for it. WebCore::createBorderImageValue
        was wrongly assuming that the image is always set. This problem also required a bit
        of refactoring in CSSStyleSelector::mapNinePieceImage to take into account that
        the image could be optional (just like other properties).

        Test: fast/css/border-image-null-image-crash.html

        * css/CSSBorderImage.cpp:
        (WebCore::createBorderImageValue):
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::mapNinePieceImage):

2012-01-25  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        [Qt] Implement tap feedback respecting -webkit-tap-highlight-color
        https://bugs.webkit.org/show_bug.cgi?id=76914

        Reviewed by Simon Hausmann.

        Implement highlighting of dom nodes with a rounded rect, respecting
        the color of -webkit-tap-highlight-color and any transform applied
        to the element.

        Tested with manual test.

        * Target.pri:
        * page/GestureTapHighlighter.cpp: Added.
        (WebCore::GestureTapHighlighter::pathForNodeHighlight):
        * page/GestureTapHighlighter.h: Added.

2012-01-25  Joshua Bell  <jsbell@chromium.org>

        IndexedDB: Need to distinguish key paths that don't yield value vs. yield invalid key
        https://bugs.webkit.org/show_bug.cgi?id=76487

        Implement the precondition checks for IDBObjectStore.add/put operations: raise an error
        if there is a key generator (autoIncrement) and the path yields a value and the value
        is not a valid key; raise an error if any of the index key paths yield a value which
        is not a valid key.

        Reviewed by Tony Chang.

        Tests: storage/indexeddb/keypath-edges.html
               storage/indexeddb/objectstore-basics.html

        * storage/IDBObjectStoreBackendImpl.cpp:
        (WebCore::IDBObjectStoreBackendImpl::put):

2012-01-25  Yong Li  <yoli@rim.com>

        https://bugs.webkit.org/show_bug.cgi?id=65377
        Skip the entire node when it is right to do so, instead of stepping
        through every character, so we save CPU time on checking every position
        unnecessarily.

        Reviewed by Darin Adler.

        Test: perf/selection-skip-hidden-node.html

        * dom/Position.cpp:
        (WebCore::Position::upstream):
        (WebCore::Position::downstream):
        * dom/PositionIterator.cpp:
        (WebCore::PositionIterator::moveToLeafNodeStart):
        (WebCore::PositionIterator::moveToLeafNodeEnd):
        * dom/PositionIterator.h:
        * editing/htmlediting.cpp:
        (WebCore::nextCandidate):
        (WebCore::nextVisuallyDistinctCandidate):
        (WebCore::previousCandidate):
        (WebCore::previousVisuallyDistinctCandidate):

2012-01-25  Kaustubh Atrawalkar  <kaustubh@motorola.com>

        Remove unnecessary member variable from PluginView.
        https://bugs.webkit.org/show_bug.cgi?id=76909

        Reviewed by Adam Roben.

        No new tests needed.

        * plugins/PluginView.cpp:
        (WebCore::PluginView::getURLNotify):
        (WebCore::PluginView::getURL):
        (WebCore::PluginView::PluginView):
        (WebCore::PluginView::handlePost):
        (WebCore::PluginView::getValueForURL):
        (WebCore::PluginView::setValueForURL):
        * plugins/PluginView.h:

2012-01-25  Yael Aharon  <yael.aharon@nokia.com>

        [Qt] Build fix when using force_static_libs_as_shared
        https://bugs.webkit.org/show_bug.cgi?id=76832

        Reviewed by Simon Hausmann.

        Add a dependency on QtWidgets, when compiling against Qt5.

        No new tests. This is a build fix.

        * Target.pri:

2012-01-25  Sami Kyostila  <skyostil@chromium.org>

        Clipping of render layer boundaries does not take page scale into account
        https://bugs.webkit.org/show_bug.cgi?id=76850

        Reviewed by Simon Fraser.

        When inserting render layers into the compositor's overlap map, the
        layer boundaries are clipped against any potential parent clip rects.
        The clip rects are given in CSS coordinates, while the render layer
        boundaries are in scaled CSS coordinates, so the result is incorrect.
        This patch scales the clip rects before calculating the intersection.

        Test: compositing/overflow/overflow-scaled-descendant-overlapping.html

        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::addToOverlapMap):

2012-01-25  Stephen Chenney  <schenney@chromium.org>

        Linecaps wrong for zero length lines
        https://bugs.webkit.org/show_bug.cgi?id=71820

        Reviewed by Nikolas Zimmermann.

        Total reworking of the method used to draw zero-length linecaps for
        SVG. This patch works for all zero length sub-paths.

        Tests: svg/stroke/zero-length-path-linecap-rendering.svg
               svg/stroke/zero-length-subpaths-linecap-rendering.svg

        * rendering/svg/RenderSVGShape.cpp: Significant refactoring to enable
          new implementation and clarify code.
        (WebCore::RenderSVGShape::createShape):
        (WebCore::RenderSVGShape::strokeContains):
        (WebCore::RenderSVGShape::shouldStrokeZeroLengthSubpath):
        (WebCore::RenderSVGShape::zeroLengthSubpathRect):
        (WebCore::RenderSVGShape::zeroLengthLinecapPath):
        (WebCore::RenderSVGShape::nonScalingStrokePath):
        (WebCore::RenderSVGShape::setupNonScalingStrokeTransform):
        (WebCore::RenderSVGShape::fillShape):
        (WebCore::RenderSVGShape::strokePath):
        (WebCore::RenderSVGShape::fillAndStrokePath):
        (WebCore::RenderSVGShape::updateCachedBoundaries):
        (WebCore::RenderSVGShape::processZeroLengthSubpaths):
        * rendering/svg/RenderSVGShape.h: Declarations for new methods.
        * rendering/svg/SVGSubpathData.h: Class for finding zero length subpaths.
        * svg/SVGPathBuilder.h: Fix typos
        * svg/SVGPathConsumer.h: Fix typos
        * svg/SVGPathSegListBuilder.h: Fix typos
        * svg/SVGPathTraversalStateBuilder.h: Fix typos

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

        Web Inspector: show memory counter graphs in timeline panel
        https://bugs.webkit.org/show_bug.cgi?id=76843

        Timeline panel is extended with several graphs depicting total node count,
        number of DOM groups and event listeners. This feature is hidden behind
        experimental setting.

        Reviewed by Pavel Feldman.

        * English.lproj/localizedStrings.js:
        * inspector/Inspector.json:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        * inspector/InspectorTimelineAgent.cpp:
        (WebCore::InspectorTimelineAgent::setDomCountersEnabled):
        (WebCore::InspectorTimelineAgent::didCallFunction):
        (WebCore::InspectorTimelineAgent::didDispatchEvent):
        (WebCore::InspectorTimelineAgent::didWriteHTML):
        (WebCore::InspectorTimelineAgent::didFireTimer):
        (WebCore::InspectorTimelineAgent::didEvaluateScript):
        (WebCore::InspectorTimelineAgent::setHeapSizeStatistic):
        (WebCore::InspectorTimelineAgent::collectDomCounters):
        (WebCore::InspectorTimelineAgent::InspectorTimelineAgent):
        * inspector/InspectorTimelineAgent.h:
        (WebCore::InspectorTimelineAgent::create):
        * inspector/TimelineRecordFactory.cpp:
        * inspector/front-end/Settings.js:
        (WebInspector.ExperimentsSettings):
        * inspector/front-end/TimelinePanel.js:
        (WebInspector.TimelinePanel):
        (WebInspector.MemoryStatistics):
        (WebInspector.MemoryStatistics.prototype.setTopPosition):
        (WebInspector.MemoryStatistics.prototype.setSidebarWidth):
        (WebInspector.MemoryStatistics.prototype._sidebarResized):
        (WebInspector.MemoryStatistics.prototype._updateSize):
        (WebInspector.MemoryStatistics.prototype._updateSidebarSize):
        (WebInspector.MemoryStatistics.prototype._createCounterSidebarElement):
        (WebInspector.MemoryStatistics.prototype.addTimlineEvent):
        (WebInspector.MemoryStatistics.prototype._draw.getGroupCount):
        (WebInspector.MemoryStatistics.prototype._draw.getNodeCount):
        (WebInspector.MemoryStatistics.prototype._draw.getListenerCount):
        (WebInspector.MemoryStatistics.prototype._draw):
        (WebInspector.MemoryStatistics.prototype._calculateVisibleIndexes):
        (WebInspector.MemoryStatistics.prototype._onMouseOver):
        (WebInspector.MemoryStatistics.prototype._refreshCurrentValues):
        (WebInspector.MemoryStatistics.prototype.visible):
        (WebInspector.MemoryStatistics.prototype.show):
        (WebInspector.MemoryStatistics.prototype.refresh):
        (WebInspector.MemoryStatistics.prototype.hide):
        (WebInspector.MemoryStatistics.prototype._setVerticalClip):
        (WebInspector.MemoryStatistics.prototype._calculateXValues):
        (WebInspector.MemoryStatistics.prototype._drawPolyline):
        (WebInspector.MemoryStatistics.prototype._drawBottomBound):
        (WebInspector.MemoryStatistics.prototype._clear):
        (WebInspector.TimelinePanel.prototype._startSplitterDragging):
        (WebInspector.TimelinePanel.prototype._splitterDragging):
        (WebInspector.TimelinePanel.prototype._endSplitterDragging):
        (WebInspector.TimelinePanel.prototype._setSplitterPosition):
        (WebInspector.TimelinePanel.prototype.get statusBarItems):
        (WebInspector.TimelinePanel.prototype._createStatusbarButtons):
        (WebInspector.TimelinePanel.prototype._toggleMemoryStatistics):
        (WebInspector.TimelinePanel.prototype._onTimelineEventRecorded):
        (WebInspector.TimelinePanel.prototype.sidebarResized):
        (WebInspector.TimelinePanel.prototype._refresh):
        * inspector/front-end/timelinePanel.css:
        (#timeline-memory-splitter):
        (#memory-counters-graph):
        (#memory-graphs-container):
        (#memory-graphs-container .split-view-contents):
        (.timeline-marker):
        (.memory-counter-sidebar-info):
        (.memory-counter-sidebar-info.bottom-border-visible):

2012-01-25  Joseph Pecoraro  <pecoraro@apple.com>

        <http://webkit.org/b/76941> Web Inspector: Remove Unused InspectorFrontendHost.search Stub

        Reviewed by Pavel Feldman.

        * inspector/front-end/InspectorFrontendHostStub.js:

2012-01-25  Vsevolod Vlasov  <vsevik@chromium.org>

        Unreviewed inspector style fix.

        * inspector/front-end/tabbedPane.css:
        (.tabbed-pane-header-tab-close-button):
        (select.tabbed-pane-header-tabs-drop-down-select):

2012-01-25  Pablo Flouret  <pablof@motorola.com>

        Fix incorrect behavior in HTMLCollection.prototype.item().
        https://bugs.webkit.org/show_bug.cgi?id=74468

        Reviewed by Adam Barth.

        HTMLCollection.prototype.item("someString") was falling back to
        .namedItem("someString"), which is wrong per spec. Also align the
        handling of various other types of objects passed as the argument with
        the spec and the rest of the browsers.

        Test: fast/dom/collection-item.html

        * bindings/js/JSHTMLCollectionCustom.cpp: Remove custom implementation of item().
        * bindings/v8/custom/V8HTMLCollectionCustom.cpp: Ditto.
        * html/HTMLCollection.idl: Remove [Custom] in item(), it's not needed.

2012-01-25  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r105858.
        http://trac.webkit.org/changeset/105858
        https://bugs.webkit.org/show_bug.cgi?id=77004

        It made many tests crash on Qt (Requested by Ossy on #webkit).

        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * platform/graphics/texmap/GraphicsLayerTextureMapper.cpp:
        (WebCore::GraphicsLayerTextureMapper::addAnimation):
        (WebCore::GraphicsLayerTextureMapper::pauseAnimation):
        (WebCore::GraphicsLayerTextureMapper::removeAnimation):
        * platform/graphics/texmap/GraphicsLayerTextureMapper.h:
        (GraphicsLayerTextureMapper):
        * platform/graphics/texmap/TextureMapperAnimation.cpp: Removed.
        * platform/graphics/texmap/TextureMapperAnimation.h: Removed.
        * platform/graphics/texmap/TextureMapperNode.cpp:
        (WebCore::TextureMapperNode::syncCompositingStateSelf):
        (WebCore::TextureMapperNode::descendantsOrSelfHaveRunningAnimations):
        (WebCore::normalizedAnimationValue):
        (WebCore):
        (WebCore::TextureMapperNode::applyOpacityAnimation):
        (WebCore::solveEpsilon):
        (WebCore::solveCubicBezierFunction):
        (WebCore::solveStepsFunction):
        (WebCore::applyTimingFunction):
        (WebCore::TextureMapperNode::applyTransformAnimation):
        (WebCore::TextureMapperNode::applyAnimationFrame):
        (WebCore::TextureMapperNode::applyAnimation):
        (WebCore::TextureMapperNode::hasOpacityAnimation):
        (WebCore::TextureMapperNode::hasTransformAnimation):
        (WebCore::TextureMapperNode::syncAnimations):
        (WebCore::TextureMapperNode::syncAnimationsRecursively):
        (WebCore::TextureMapperNode::syncCompositingState):
        (WebCore::TextureMapperAnimation::TextureMapperAnimation):
        * platform/graphics/texmap/TextureMapperNode.h:
        (TextureMapperAnimation):
        (WebCore::TextureMapperAnimation::create):
        (WebCore):
        (TextureMapperNode):

2012-01-25  Kenichi Ishibashi  <bashi@chromium.org>

        fast/text/unicode-variation-selector.html doesn't pass on Lion
        https://bugs.webkit.org/show_bug.cgi?id=76041

        Reviewed by Dan Bernstein.

        Consumes non-BMP marks in advanceByCombiningCharacterSequence() to take into
        account Ideographic variation selectors (these are non-BMP marks).

        No new tests. fast/text/unicode-variation-selector.html should pass on Lion.

        * platform/graphics/mac/ComplexTextController.cpp:
        (WebCore::advanceByCombiningCharacterSequence): Use Unicode code point
        to iterate the loop which consumes marks.

2012-01-25  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: DetailedHeapSnapshot: adjust node name cell format for the retainers tree.
        https://bugs.webkit.org/show_bug.cgi?id=76989

        Reviewed by Pavel Feldman.

        * English.lproj/localizedStrings.js:
        * inspector/front-end/DetailedHeapshotGridNodes.js:
        (WebInspector.HeapSnapshotGenericObjectNode.prototype._createObjectCell):
        (WebInspector.HeapSnapshotGenericObjectNode.prototype.get data):
        (WebInspector.HeapSnapshotObjectNode):
        (WebInspector.HeapSnapshotObjectNode.prototype._prefixObjectCell):
        (WebInspector.HeapSnapshotObjectNode.prototype._postfixObjectCell):
        * inspector/front-end/HeapSnapshot.js:
        (WebInspector.HeapSnapshotEdgesProvider.prototype._serialize):

2012-01-25  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: [InspectorIndexedDB] Pass Database, object stores and indexes meta information to frontend.
        https://bugs.webkit.org/show_bug.cgi?id=76711

        Reviewed by Yury Semikhatsky.

        * inspector/Inspector.json:
        * inspector/InspectorIndexedDBAgent.cpp:
        (WebCore):
        (WebCore::assertDocument):
        (WebCore::assertIDBFactory):
        (WebCore::InspectorIndexedDBAgent::requestDatabaseNamesForFrame):
        (WebCore::InspectorIndexedDBAgent::requestDatabase):
        * inspector/InspectorIndexedDBAgent.h:
        (InspectorIndexedDBAgent):
        * inspector/front-end/IndexedDBModel.js:
        (WebInspector.IndexedDBModel):
        (WebInspector.IndexedDBModel.prototype._frameDetached):
        (WebInspector.IndexedDBModel.prototype._reset):
        (WebInspector.IndexedDBModel.prototype._originAddedToFrame):
        (WebInspector.IndexedDBModel.prototype._originRemovedFromFrame):
        (WebInspector.IndexedDBModel.prototype._originRemoved):
        (WebInspector.IndexedDBModel.prototype._updateOriginDatabaseNames):
        (WebInspector.IndexedDBModel.prototype._databaseRemoved):
        (WebInspector.IndexedDBModel.prototype._loadDatabaseNamesForFrame):
        (WebInspector.IndexedDBModel.prototype._loadDatabase):
        (WebInspector.IndexedDBModel.Frame):
        (WebInspector.IndexedDBModel.Database):
        (WebInspector.IndexedDBModel.ObjectStore):
        (WebInspector.IndexedDBModel.ObjectStoreIndex):
        (WebInspector.IndexedDBRequestManager.prototype._databaseNamesLoaded):
        (WebInspector.IndexedDBRequestManager.prototype.requestDatabase.innerCallback):
        (WebInspector.IndexedDBRequestManager.prototype.requestDatabase):
        (WebInspector.IndexedDBRequestManager.prototype._databaseLoaded):
        (WebInspector.IndexedDBRequestManager.prototype._frameDetached):
        (WebInspector.IndexedDBRequestManager.prototype._databaseRemoved):
        (WebInspector.IndexedDBRequestManager.prototype._reset):
        (WebInspector.IndexedDBRequestManager.DatabaseRequest):
        (WebInspector.IndexedDBDispatcher.prototype.databaseNamesLoaded):
        (WebInspector.IndexedDBDispatcher.prototype.databaseLoaded):

2012-01-25  Peter Rybin  <peter.rybin@gmail.com>

        Web Inspector: CodeGeneratorInspector.py: add optional runtime validator
        https://bugs.webkit.org/show_bug.cgi?id=76676

        Reviewed by Yury Semikhatsky.

        Generator algorithm is redone significantly.

        * inspector/CodeGeneratorInspector.py:
        (RawTypes.BaseType):
        (RawTypes.BaseType.request_raw_internal_runtime_cast):
        (RawTypes.BaseType.generate_validate_method_impl):
        (RawTypes):
        (RawTypes.generate_validate_methods):
        (RawTypes.String):
        (RawTypes.String.generate_validate_method):
        (RawTypes.String.get_raw_validator_call_text):
        (RawTypes.Int):
        (RawTypes.Int.generate_validate_method):
        (RawTypes.Int.get_raw_validator_call_text):
        (RawTypes.Number):
        (RawTypes.Number.generate_validate_method):
        (RawTypes.Number.get_raw_validator_call_text):
        (RawTypes.Bool):
        (RawTypes.Bool.generate_validate_method):
        (RawTypes.Bool.get_raw_validator_call_text):
        (RawTypes.Object):
        (RawTypes.Object.generate_validate_method):
        (RawTypes.Object.get_raw_validator_call_text):
        (RawTypes.Any):
        (RawTypes.Any.generate_validate_method):
        (RawTypes.Any.get_raw_validator_call_text):
        (RawTypes.Array):
        (RawTypes.Array.generate_validate_method):
        (RawTypes.Array.get_raw_validator_call_text):
        (TypeBindings.create_named_type_declaration.Helper):
        (TypeBindings.create_ad_hoc_type_declaration.Helper):
        (TypeBindings.create_type_declaration_.EnumBinding):
        (TypeBindings.create_type_declaration_.EnumBinding.resolve_inner):
        (TypeBindings.create_type_declaration_.EnumBinding.request_user_runtime_cast):
        (TypeBindings.create_type_declaration_.EnumBinding.request_internal_runtime_cast):
        (TypeBindings.create_type_declaration_.EnumBinding.get_code_generator):
        (TypeBindings.create_type_declaration_.EnumBinding.get_code_generator.CodeGenerator.generate_type_builder):
        (TypeBindings.create_type_declaration_.EnumBinding.get_validator_call_text):
        (TypeBindings.create_type_declaration_.EnumBinding.get_in_c_type_text):
        (TypeBindings.create_type_declaration_.PlainString):
        (TypeBindings.create_type_declaration_.PlainString.resolve_inner):
        (TypeBindings.create_type_declaration_.PlainString.request_user_runtime_cast):
        (TypeBindings.create_type_declaration_.PlainString.request_internal_runtime_cast):
        (TypeBindings.create_type_declaration_.PlainString.get_validator_call_text):
        (TypeBindings.create_type_declaration_.TypedefString):
        (TypeBindings.create_type_declaration_.TypedefString.resolve_inner):
        (TypeBindings.create_type_declaration_.TypedefString.request_user_runtime_cast):
        (TypeBindings.create_type_declaration_.TypedefString.request_internal_runtime_cast):
        (TypeBindings.create_type_declaration_.TypedefString.get_code_generator.CodeGenerator.generate_type_builder):
        (TypeBindings.create_type_declaration_.TypedefString.get_validator_call_text):
        (TypeBindings.create_type_declaration_.TypedefString.get_in_c_type_text):
        (TypeBindings.create_type_declaration_.ClassBinding):
        (TypeBindings.create_type_declaration_.ClassBinding.resolve_inner):
        (TypeBindings.create_type_declaration_.ClassBinding.resolve_inner.PropertyData):
        (TypeBindings.create_type_declaration_.ClassBinding.resolve_inner.ResolveData):
        (TypeBindings.create_type_declaration_.ClassBinding.request_user_runtime_cast):
        (TypeBindings.create_type_declaration_.ClassBinding.request_internal_runtime_cast):
        (TypeBindings.create_type_declaration_.ClassBinding.get_code_generator):
        (TypeBindings.create_type_declaration_.ClassBinding.get_code_generator.CodeGenerator.generate_type_builder):
        (get_validator_call_text):
        (get_in_c_type_text):
        (AdHocTypeContextImpl):
        (AdHocTypeContextImpl.__init__):
        (AdHocTypeContextImpl.get_type_name_fix):
        (AdHocTypeContextImpl.get_type_name_fix.NameFix):
        (AdHocTypeContextImpl.get_type_name_fix.NameFix.output_comment):
        (AdHocTypeContextImpl.add_type):
        (PlainObjectBinding):
        (PlainObjectBinding.resolve_inner):
        (PlainObjectBinding.request_user_runtime_cast):
        (PlainObjectBinding.request_internal_runtime_cast):
        (PlainObjectBinding.get_validator_call_text):
        (ArrayBinding):
        (ArrayBinding.resolve_inner):
        (ArrayBinding.resolve_inner.AdHocTypeContext):
        (ArrayBinding.resolve_inner.AdHocTypeContext.get_type_name_fix):
        (ArrayBinding.resolve_inner.AdHocTypeContext.get_type_name_fix.NameFix):
        (ArrayBinding.resolve_inner.AdHocTypeContext.get_type_name_fix.NameFix.output_comment):
        (ArrayBinding.resolve_inner.AdHocTypeContext.add_type):
        (ArrayBinding.resolve_inner.ResolveData):
        (ArrayBinding.request_user_runtime_cast):
        (ArrayBinding.request_internal_runtime_cast):
        (ArrayBinding.get_code_generator):
        (ArrayBinding.get_code_generator.CodeGenerator.generate_type_builder):
        (ArrayBinding.get_validator_call_text):
        (ArrayBinding.get_in_c_type_text):
        (RawTypeBinding.resolve_inner):
        (RawTypeBinding):
        (RawTypeBinding.request_user_runtime_cast):
        (RawTypeBinding.request_internal_runtime_cast):
        (RawTypeBinding.get_validator_call_text):
        (TypeData.get_name):
        (TypeData):
        (TypeData.get_domain_name):
        (resolve_param_type):
        (NeedRuntimeCastRequest):
        (NeedRuntimeCastRequest.__init__):
        (NeedRuntimeCastRequest.acknowledge):
        (NeedRuntimeCastRequest.is_acknowledged):
        (resolve_all_types):
        (resolve_all_types.ForwardListener):
        (resolve_all_types.ForwardListener.add_type_data):
        (resolve_all_types.ResolveContext):
        (Generator):
        (Generator.go):
        (Generator.process_event):
        (Generator.process_event.AdHocTypeContext):
        (Generator.process_event.AdHocTypeContext.add_type):
        (Generator.process_event.EventForwardListener):
        (Generator.process_event.EventForwardListener.add_type_data):
        (Generator.process_event.EventResolveContext):
        (Generator.process_event.EventGenerateContext):
        (Generator.process_types.GenerateContext):
        (Generator.process_types.create_type_builder_caller.call_type_builder):
        (Generator.process_types.generate_forward_callback):
        * inspector/InspectorValues.h:
        (WebCore::InspectorObject::size):

2012-01-25  Anton Muhin  <antonm@chromium.org>

        Unreview manual revert of r105843.

        * fileapi/EntryBase.cpp:
        (WebCore::EntryBase::toURL):
        * page/SecurityOrigin.cpp:
        (WebCore::extractInnerURL):
        * platform/KURL.h:
        (KURL):
        * platform/KURLGoogle.cpp:
        (WebCore):
        (WebCore::KURLGooglePrivate::setUtf8):
        (WebCore::KURLGooglePrivate::setAscii):
        (WebCore::KURLGooglePrivate::initProtocolIsInHTTPFamily):
        (WebCore::KURLGooglePrivate::copyTo):
        (WebCore::encodeWithURLEscapeSequences):
        * platform/KURLGooglePrivate.h:
        (KURLGooglePrivate):

2012-01-25  Noel Gordon  <noel.gordon@gmail.com>

        Use maximum image dimension definition from libwebp
        https://bugs.webkit.org/show_bug.cgi?id=76980

        Reviewed by Kent Tamura.

        No new tests, no change in behavior.

        * platform/image-encoders/skia/WEBPImageEncoder.cpp:
        (WebCore::encodePixels): s/WEBP_MAX_DIMENSION/WEBPImageEncoder::MaximumImageDimension/
        * platform/image-encoders/skia/WEBPImageEncoder.h:
        (): Remove local definition of the maximum webp image dimension

2012-01-25  Noel Gordon  <noel.gordon@gmail.com>

        JPEGDecoder should use imageDecoder colorProfile helpers
        https://bugs.webkit.org/show_bug.cgi?id=76968
        
        Reviewed by Adam Barth.

        No new tests. Cover by existing tests, in particular:
          fast/images/ycbcr-with-cmyk-color-profile.html
          fast/images/gray-scale-jpeg-with-color-profile.html
          fast/images/cmyk-jpeg-with-color-profile.html
          fast/images/color-jpeg-with-color-profile.html

        * platform/image-decoders/jpeg/JPEGImageDecoder.cpp: white-space removals via Xcode.
        (WebCore::readColorProfile):  Use ImageDecoder.h color profile helper routines.
        (WebCore::JPEGImageReader::JPEGImageReader):
        (WebCore::JPEGImageReader::decode):

2012-01-25  No'am Rosenthal  <noam.rosenthal@nokia.com>

        [Texmap] Divide TextureMapperNode.cpp to 3 files.
        https://bugs.webkit.org/show_bug.cgi?id=76660

        Reviewed by Kenneth Rohde Christiansen.

        Split the animation part of TextureMapperNode out to a separate file, called
        TextureMapperAnimation.
        Provide a clean interface for that class, that allows separating the internals of the scene
        painting from the internals of the animation interpolation.

        No new tests. Existing animation tests cover this.

        * GNUmakefile.list.am: Added new TextureMapper-related files.
        * Target.pri: Added new TextureMapper-related files.
        * WebCore.gypi: Added new TextureMapper-related files.
        * platform/graphics/texmap/GraphicsLayerTextureMapper.cpp:
        (WebCore::GraphicsLayerTextureMapper::addAnimation):
        (WebCore::GraphicsLayerTextureMapper::pauseAnimation):
        (WebCore::GraphicsLayerTextureMapper::removeAnimation):
        * platform/graphics/texmap/GraphicsLayerTextureMapper.h:
        * platform/graphics/texmap/TextureMapperAnimation.cpp: Added.
        * platform/graphics/texmap/TextureMapperAnimation.h: Added.
        * platform/graphics/texmap/TextureMapperNode.cpp:
        (WebCore::TextureMapperNode::syncCompositingStateSelf):
        (WebCore::TextureMapperNode::descendantsOrSelfHaveRunningAnimations):
        (WebCore::TextureMapperNode::syncAnimations):
        (WebCore::TextureMapperNode::syncAnimationsRecursively):
        (WebCore::TextureMapperNode::syncCompositingState):
        * platform/graphics/texmap/TextureMapperNode.h:

2012-01-25  Roland Steiner  <rolandsteiner@chromium.org>

        <style scoped>: Implement registering of <style scoped> with the scoping element
        https://bugs.webkit.org/show_bug.cgi?id=67790

        Implement registering of a <style> element with its parent element if the 'scoped' attribute is set.
        Update the registration whenever the 'scoped' attribute is changed,
        or the <style> element eneters or leaves the tree.

        Also, extend windows.internals to allow for testing of the registration ref-counting.

        Reviewed by Dimitri Glazkov.

        Test: fast/css/style-scoped/registering.html

        * WebCore.exp.in:
        * dom/Element.cpp:
        (WebCore::Element::hasScopedHTMLStyleChild):
        (WebCore::Element::numberOfScopedHTMLStyleChildren):
        (WebCore::Element::registerScopedHTMLStyleChild):
        (WebCore::Element::unregisterScopedHTMLStyleChild):
        * dom/Element.h:
        * dom/ElementRareData.h:
        (WebCore::ElementRareData::ElementRareData):
        (WebCore::ElementRareData::registerScopedHTMLStyleChild):
        (WebCore::ElementRareData::unregisterScopedHTMLStyleChild):
        (WebCore::ElementRareData::hasScopedHTMLStyleChild):
        (WebCore::ElementRareData::numberOfScopedHTMLStyleChildren):
        * html/HTMLStyleElement.cpp:
        (WebCore::HTMLStyleElement::HTMLStyleElement):
        (WebCore::HTMLStyleElement::~HTMLStyleElement):
        (WebCore::HTMLStyleElement::parseMappedAttribute):
        (WebCore::HTMLStyleElement::registerWithScopingNode):
        (WebCore::HTMLStyleElement::unregisterWithScopingNode):
        (WebCore::HTMLStyleElement::insertedIntoDocument):
        (WebCore::HTMLStyleElement::removedFromDocument):
        (WebCore::HTMLStyleElement::willRemove):
        * html/HTMLStyleElement.h:
        * testing/Internals.cpp:
        (WebCore::Internals::numberOfScopedHTMLStyleChildren):
        * testing/Internals.h:
        * testing/Internals.idl:

2012-01-24  Daniel Bates  <dbates@webkit.org>

        Attempt to fix Mac build after changeset <http://trac.webkit.org/changeset/105843>
        (https://bugs.webkit.org/show_bug.cgi?id=75049)

        Don't include NotImplemented.h in KURL.h since NotImplemented.h includes Logging.h, which defines
        LOG_CHANNEL_PREFIX to be "Log". And this conflicts with the inclusion of WebKitLogging.h in
        WebHTMLView.mm (which would have defined LOG_CHANNEL_PREFIX to be "WebKitLog").

        * platform/KURL.h:
        (WebCore::KURL::innerURL):

2012-01-24  Vangelis Kokkevis  <vangelis@chromium.org>

        [chromium] Ignore m_skipsDraw in TiledLayerChromium::drawsContent()
        https://bugs.webkit.org/show_bug.cgi?id=76735

        This is to add skipped layers to their RenderSurface's layer list so that they
        are considered in the next update. Without this change, m_skipsDraw = false sticks
        with the layer for the remainder of its lifetime.

        Reviewed by James Robinson.

        Tests: Unit test (TiledLayerChromiumTest.cpp)

        * platform/graphics/chromium/TiledLayerChromium.cpp:
        (WebCore::TiledLayerChromium::drawsContent):
        * platform/graphics/chromium/TiledLayerChromium.h:
        (WebCore::TiledLayerChromium::skipsDraw):

2012-01-24  Kentaro Hara  <haraken@chromium.org>

        Invalidate r105697, r105766, r105809 and r105805
        https://bugs.webkit.org/show_bug.cgi?id=76970

        Reviewed by Adam Barth.

        I've been trying to stop rebuilding .h/.cpp files generated by
        unchanged IDLs (bug 76836), but the approach was wrong.
        This patch invalidates patches committed in r105697, r105766,
        r105809 and r105805.

        In r105697, r105766, r105809 and r105805, I modified CodeGenerator*.pm
        so that they overwrite .h/.cpp files only when the bytes differ.
        By this fix, we were able to stop rebuilding .h/.cpp files that are not
        changed. However, the fix has made generate-bindings.pl run for almost
        all IDLs every time. The reason is as follows:

        (0) Assume that there are A.idl, B.idl and C.idl.

        (1) Modify A.idl.
        (2) First build.
        (3) supplemental_dependency.tmp is updated.
        (4) generate-bindings.pl runs for A.idl, B.idl and C.idl.
        (5) A.h and A.cpp are updated. B.h, B.cpp, C.h and C.cpp are not updated.

        (6) Second build.
        (7) Since B.h, B.cpp, C.h and C.cpp are older than supplemental_dependency.tmp, generate-bindings.pl runs for B.idl and C.idl.
        (8) B.h, B.cpp, C.h and C.cpp are not updated.

        (9) Third build.
        (10) Since B.h, B.cpp, C.h and C.cpp are older than supplemental_dependency.tmp, generate-bindings.pl runs for B.idl and C.idl.
        (11) B.h, B.cpp, C.h and C.cpp are not updated.
        ...

        We should fix the bug somehow, but how to fix it is not obvious.
        For the time being, this patch invalidates r105697, r105766, r105809
        and r105805.

        No tests. No change in behavior.

        * bindings/scripts/CodeGenerator.pm:
        (UpdateFile):
        * bindings/scripts/CodeGeneratorCPP.pm:
        (WriteData):
        * bindings/scripts/CodeGeneratorJS.pm:
        (WriteData):
        * bindings/scripts/CodeGeneratorObjC.pm:
        (WriteData):
        * bindings/scripts/CodeGeneratorV8.pm:
        (WriteData):

2012-01-24  Eric Uhrhane  <ericu@chromium.org>

        Add full support for filesystem URLs.
        https://bugs.webkit.org/show_bug.cgi?id=75049

        Reviewed by Adam Barth.

        No new tests; existing layout tests cover the basic functionality, and
        the new functionality won't be there until Chromium adds it.  This patch
        merely enables that, without changing behavior.

        * fileapi/EntryBase.cpp:
        (WebCore::EntryBase::toURL): Add missing escaping of URL path.

        * page/SecurityOrigin.cpp:
        (WebCore::extractInnerURL): Use innerURL member, if it's populated.

        * platform/KURL.h:
        (WebCore::KURL::innerURL): Add innerURL member.

        * platform/KURLGoogle.cpp:
        (WebCore::KURLGooglePrivate::KURLGooglePrivate):
        (WebCore::KURLGooglePrivate::operator=):
        Add copy constructor and operator=, which are now needed since
        m_innerURL needs special handling.
        (WebCore::KURLGooglePrivate::setUtf8):
        (WebCore::KURLGooglePrivate::setAscii):
        Add calls to initInnerURL.
        (WebCore::KURLGooglePrivate::initInnerURL):
        Add method to init/copy m_innerURL.
        (WebCore::KURLGooglePrivate::copyTo):
        Handle m_innerURL during copies.
        (WebCore::encodeWithURLEscapeSequences):
        Unescape %2F ['/'] in paths; it's much more readable, and it's safe.

        * platform/KURLGooglePrivate.h:
        (WebCore::KURLGooglePrivate::innerURL): Add accessor for new m_innerURL.

2012-01-24  Ken Buchanan  <kenrb@chromium.org>

        Crash in updateFirstLetter() from unnecessary anonymous block
        https://bugs.webkit.org/show_bug.cgi?id=72675

        Reviewed by David Hyatt.

        There was a problem with anonymous blocks not getting removed when
        their only block flow siblings are removed if they also have non-block
        flow first-letter siblings (i.e. floats). This patch modifies
        RenderBlock::removeChild() to look for this situation and strip out
        unnecessary anonymous container blocks if it occurs.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::removeChild):
        (WebCore::RenderBlock::collapseAnonymousBoxChild): Added
        * rendering/RenderBlock.h:
        (WebCore::RenderBlock::collapseAnonymousBoxChild): Added

2012-01-24  Daniel Cheng  <dcheng@chromium.org>

        [chromium] event.dataTransfer.types should not return "Text" or "URL"
        https://bugs.webkit.org/show_bug.cgi?id=76218

        Per the spec, "Text" and "URL" are special values handled for IE compatibility reasons in
        dataTransfer.setData() and dataTransfer.getData(). These values should not be exposed
        elsewhere.

        Reviewed by Tony Chang.

        Test: fast/events/dropzone-005.html

        * platform/chromium/ChromiumDataObject.cpp:
        (WebCore::ChromiumDataObject::types):
        (WebCore::ChromiumDataObject::getData):
        * platform/chromium/DragDataChromium.cpp:
        (WebCore::DragData::containsURL):
        (WebCore::DragData::asURL):
        (WebCore::DragData::canSmartReplace):

2012-01-24  Daniel Cheng  <dcheng@chromium.org>

        Make DataTransferItemList::length() const.
        https://bugs.webkit.org/show_bug.cgi?id=76946

        Just a const-correctness change.

        Reviewed by Tony Chang.

        No new tests since no functionality changed.

        * dom/DataTransferItemList.h:
        (DataTransferItemList):
        * platform/chromium/DataTransferItemListChromium.cpp:
        (WebCore::DataTransferItemListChromium::length):
        * platform/chromium/DataTransferItemListChromium.h:
        (DataTransferItemListChromium):
        * platform/qt/DataTransferItemListQt.cpp:
        (WebCore::DataTransferItemListQt::length):
        * platform/qt/DataTransferItemListQt.h:
        (DataTransferItemListQt):

2012-01-24  Tony Chang  <tony@chromium.org>

        REGRESSION(r103245): can't scroll left/up using scrollbar controls of overflowing elements
        https://bugs.webkit.org/show_bug.cgi?id=76317

        Reviewed by Darin Adler.

        Test: scrollbars/scroll-rtl-or-bt-layer.html

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateScrollInfoAfterLayout): Call scrollToOffsetWithoutAnimation since we're always
        scrolling to the just computed offset.

2012-01-24  Mark Rowe  <mrowe@apple.com>

        Fix all of the builds after r105812.

        * loader/EmptyClients.h: Move the #include in to the correct #if.

2012-01-24  Dmitry Lomov  <dslomov@google.com>

        [Chromium][V8] DOMWindow::postMessage crashes if window disassociated with frame.
        https://bugs.webkit.org/show_bug.cgi?id=76944.

        Reviewed by David Levin.

        * bindings/v8/V8Proxy.cpp:
        (WebCore::V8Proxy::retrieveWindowForCallingContext):
        * bindings/v8/V8Proxy.h:
        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        (WebCore::handlePostMessageCallback):

2012-01-24  Geoffrey Garen  <ggaren@apple.com>

        Updated bindings test expectations after my last patch.

        Not reviewed.

        * bindings/scripts/test/JS/JSTestActiveDOMObject.cpp:
        (WebCore::jsTestActiveDOMObjectPrototypeFunctionPostMessage):
        * bindings/scripts/test/JS/JSTestEventConstructor.cpp:
        (WebCore::JSTestEventConstructorConstructor::constructJSTestEventConstructor):
        * bindings/scripts/test/JS/JSTestEventTarget.cpp:
        (WebCore::jsTestEventTargetPrototypeFunctionAddEventListener):
        (WebCore::jsTestEventTargetPrototypeFunctionRemoveEventListener):
        * bindings/scripts/test/JS/JSTestInterface.cpp:
        (WebCore::JSTestInterfaceConstructor::constructJSTestInterface):
        (WebCore::setJSTestInterfaceSupplementalStr2):
        (WebCore::jsTestInterfacePrototypeFunctionSupplementalMethod2):
        * bindings/scripts/test/JS/JSTestNamedConstructor.cpp:
        (WebCore::JSTestNamedConstructorNamedConstructor::constructJSTestNamedConstructor):
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::setJSTestObjStringAttr):
        (WebCore::setJSTestObjStringAttrWithGetterException):
        (WebCore::setJSTestObjStringAttrWithSetterException):
        (WebCore::jsTestObjPrototypeFunctionVoidMethodWithArgs):
        (WebCore::jsTestObjPrototypeFunctionIntMethodWithArgs):
        (WebCore::jsTestObjPrototypeFunctionObjMethodWithArgs):
        (WebCore::jsTestObjPrototypeFunctionMethodThatRequiresAllArgsAndThrows):
        (WebCore::jsTestObjPrototypeFunctionAddEventListener):
        (WebCore::jsTestObjPrototypeFunctionRemoveEventListener):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethod1):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethod3):
        (WebCore::jsTestObjConstructorFunctionOverloadedMethod12):
        (WebCore::jsTestObjPrototypeFunctionStrictFunction):
        * bindings/scripts/test/JS/JSTestOverridingNameGetter.cpp:
        (WebCore::jsTestOverridingNameGetterPrototypeFunctionAnotherFunction):
        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp:
        (WebCore::JSTestSerializedScriptValueInterfaceConstructor::constructJSTestSerializedScriptValueInterface):

2012-01-24  Greg Billock  <gbillock@google.com>

        Change dispatchIntent API to pure virtual in FrameLoaderClient.

        The Windows compiler needs this to deal with the forward declaration
        of WebCore::IntentRequest.
        https://bugs.webkit.org/show_bug.cgi?id=76940

        Reviewed by Adam Barth.

        * loader/EmptyClients.h:
        (WebCore::EmptyFrameLoaderClient::dispatchIntent):
        * loader/FrameLoaderClient.h:

2012-01-24  Kentaro Hara  <haraken@chromium.org>

        CodeGeneratorJS.pm should overwrite the output .h/.cpp
        only if the bytes differ
        https://bugs.webkit.org/show_bug.cgi?id=76922

        Reviewed by Darin Adler.

        This is one of steps to stop rebuilding .h/.cpp files
        generated by unchanged IDLs (bug 76836).
        This patch makes a change on CodeGeneratorJS.pm so that
        it overwrites the output .h/.cpp only if the bytes differ.

        No tests. No change in behavior.
        I manually confirmed that when I add a new attribute to Element.idl,
        the time-stamps of unrelated JS*.h and JS*.cpp do not change.

        * bindings/scripts/CodeGeneratorJS.pm:
        (WriteData): Used UpdateFileIfChanged().

2012-01-24  Kentaro Hara  <haraken@chromium.org>

        CodeGeneratorCPP.pm should overwrite the output .h/.cpp
        only if the bytes differ
        https://bugs.webkit.org/show_bug.cgi?id=76926

        Reviewed by Adam Barth.

        This is one of steps to stop rebuilding .h/.cpp files
        generated by unchanged IDLs (bug 76836).
        This patch makes a change on CodeGeneratorCPP.pm so that
        it overwrites the output .h/.cpp only if the bytes differ.

        No tests. No change in behavior.
        Manually confirm that when you add a new attribute to Element.idl,
        the time-stamps of unrelated WebDOM*.h and WebDOM*.cpp do not change.

        * bindings/scripts/CodeGeneratorCPP.pm:
        (WriteData): Used UpdateFileIfChanged().

2012-01-24  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r105238.
        http://trac.webkit.org/changeset/105238
        https://bugs.webkit.org/show_bug.cgi?id=76943

        Remove the assert text hack as it served its purpose.
        (Requested by dave_levin on #webkit).

        * dom/ActiveDOMObject.cpp:
        (WebCore::ContextDestructionObserver::ContextDestructionObserver):
        (WebCore::ContextDestructionObserver::~ContextDestructionObserver):
        (WebCore::ActiveDOMObject::ActiveDOMObject):
        (WebCore::ActiveDOMObject::~ActiveDOMObject):
        * storage/DatabaseSync.cpp:
        (WebCore::DatabaseSync::openDatabaseSync):
        (WebCore::DatabaseSync::~DatabaseSync):
        (WebCore::DatabaseSync::changeVersion):
        (WebCore::DatabaseSync::runTransaction):

2012-01-24  Kentaro Hara  <haraken@chromium.org>

        [Refactoring] In CodeGeneratorGObject.pm, merge
        GeneratePrivateHeader() into WriteData()
        https://bugs.webkit.org/show_bug.cgi?id=76923

        Reviewed by Adam Barth.

        This patch merges GeneratePrivateHeader() into WriteData(),
        so that all code to output .h/.cpp is managed by WriteData(),
        just like other CodeGenerator*.pm does.

        No tests. No change in behavior.
        Confirm that GTK/GObject build passes.

        * bindings/scripts/CodeGeneratorGObject.pm:
        (Generate):
        (WriteData): Copied GeneratePrivateHeader() to here.
        Removed $hasLegacyParen, $hasRealParent and $hasParent
        since they are not used.
        (GenerateInterface):

2012-01-24  Daniel Cheng  <dcheng@chromium.org>

        dropzone does not normalize type strings
        https://bugs.webkit.org/show_bug.cgi?id=76925

        Per the HTML spec, we are supposed to normalize types during dropzone processing by
        lowercasing them.

        Reviewed by Tony Chang.

        Tests: fast/events/dropzone-002.html

        * dom/Clipboard.cpp:
        (WebCore::Clipboard::hasDropZoneType):

2012-01-24  Mario Sanchez Prada  <msanchez@igalia.com>

        [GTK] Refactor GTK's accessibilitity code to be more modular
        https://bugs.webkit.org/show_bug.cgi?id=76783

        Reviewed by Martin Robinson.

        Don't expose functions for the ATK interfaces in header files.

        Expose only the initialization function for each interface, and
        use the generic functions from ATK interfaces where needed.

        * accessibility/gtk/WebKitAccessibleInterfaceAction.cpp:
        (webkitAccessibleActionDoAction): Made this function static.
        (webkitAccessibleActionGetNActions): Ditto.
        (webkitAccessibleActionGetDescription): Ditto.
        (webkitAccessibleActionGetKeybinding): Ditto.
        (webkitAccessibleActionGetName): Ditto.
        (webkitAccessibleActionInterfaceInit): Moved to the bottom.
        * accessibility/gtk/WebKitAccessibleInterfaceAction.h: Removed all
        functions but the one for initializing the interface from here.

        * accessibility/gtk/WebKitAccessibleInterfaceComponent.cpp:
        (webkitAccessibleComponentRefAccessibleAtPoint): Made this function static.
        (webkitAccessibleComponentGetExtents): Ditto.
        (webkitAccessibleComponentGrabFocus): Ditto.
        (webkitAccessibleComponentInterfaceInit): Moved to the bottom.
        * accessibility/gtk/WebKitAccessibleInterfaceComponent.h: Removed all
        functions but the one for initializing the interface from here.

        * accessibility/gtk/WebKitAccessibleInterfaceDocument.cpp:
        (webkitAccessibleDocumentGetAttributeValue): Made this function static.
        (webkitAccessibleDocumentGetAttributes): Ditto.
        (webkitAccessibleDocumentGetLocale): Ditto.
        (webkitAccessibleDocumentInterfaceInit): Moved to the bottom.
        * accessibility/gtk/WebKitAccessibleInterfaceDocument.h: Removed all
        functions but the one for initializing the interface from here.

        * accessibility/gtk/WebKitAccessibleInterfaceEditableText.cpp:
        (webkitAccessibleEditableTextSetRunAttributes): Made this function static.
        (webkitAccessibleEditableTextSetTextContents): Ditto.
        (webkitAccessibleEditableTextInsertText): Ditto.
        (webkitAccessibleEditableTextCopyText): Ditto.
        (webkitAccessibleEditableTextCutText): Ditto.
        (webkitAccessibleEditableTextDeleteText): Ditto.
        (webkitAccessibleEditableTextPasteText): Ditto.
        (webkitAccessibleEditableTextInterfaceInit): Moved to the bottom.
        * accessibility/gtk/WebKitAccessibleInterfaceEditableText.h: Removed all
        functions but the one for initializing the interface from here.

        * accessibility/gtk/WebKitAccessibleInterfaceHyperlinkImpl.cpp:
        (webkitAccessibleHyperlinkImplGetHyperlink): Made this function static.
        (webkitAccessibleHyperlinkImplInterfaceInit): Moved to the bottom.
        * accessibility/gtk/WebKitAccessibleInterfaceHyperlinkImpl.h: Removed all
        functions but the one for initializing the interface from here.

        * accessibility/gtk/WebKitAccessibleInterfaceHypertext.cpp:
        (webkitAccessibleHypertextGetLink): Made this function static.
        (webkitAccessibleHypertextGetNLinks): Ditto.
        (webkitAccessibleHypertextGetLinkIndex): Ditto.
        (webkitAccessibleHypertextInterfaceInit): Moved to the bottom.
        * accessibility/gtk/WebKitAccessibleInterfaceHypertext.h: Removed all
        functions but the one for initializing the interface from here.

        * accessibility/gtk/WebKitAccessibleInterfaceImage.cpp:
        (webkitAccessibleImageGetImagePosition): Made this function static.
        (webkitAccessibleImageGetImageDescription): Ditto.
        (webkitAccessibleImageGetImageSize): Ditto.
        (webkitAccessibleImageInterfaceInit): Moved to the bottom.
        * accessibility/gtk/WebKitAccessibleInterfaceImage.h: Removed all
        functions but the one for initializing the interface from here.

        * accessibility/gtk/WebKitAccessibleInterfaceSelection.cpp:
        (webkitAccessibleSelectionAddSelection): Made this function static.
        (webkitAccessibleSelectionClearSelection): Ditto.
        (webkitAccessibleSelectionRefSelection): Ditto.
        (webkitAccessibleSelectionGetSelectionCount): Ditto.
        (webkitAccessibleSelectionIsChildSelected): Ditto.
        (webkitAccessibleSelectionRemoveSelection): Ditto.
        (webkitAccessibleSelectionSelectAllSelection): Ditto.
        (webkitAccessibleSelectionInterfaceInit): Moved to the bottom.
        * accessibility/gtk/WebKitAccessibleInterfaceSelection.h: Removed all
        functions but the one for initializing the interface from here.

        * accessibility/gtk/WebKitAccessibleInterfaceTable.cpp:
        (webkitAccessibleTableRefAt): Made this function static.
        (webkitAccessibleTableGetIndexAt): Ditto.
        (webkitAccessibleTableGetColumnAtIndex): Ditto.
        (webkitAccessibleTableGetRowAtIndex): Ditto.
        (webkitAccessibleTableGetNColumns): Ditto.
        (webkitAccessibleTableGetNRows): Ditto.
        (webkitAccessibleTableGetColumnExtentAt): Ditto.
        (webkitAccessibleTableGetRowExtentAt): Ditto.
        (webkitAccessibleTableGetColumnHeader): Ditto.
        (webkitAccessibleTableGetRowHeader): Ditto.
        (webkitAccessibleTableGetCaption): Ditto.
        (webkitAccessibleTableGetColumnDescription): Ditto.
        (webkitAccessibleTableGetRowDescription): Ditto.
        (webkitAccessibleTableInterfaceInit): Moved to the bottom.
        * accessibility/gtk/WebKitAccessibleInterfaceTable.h: Removed all
        functions but the one for initializing the interface from here.

        * accessibility/gtk/WebKitAccessibleInterfaceText.cpp:
        (textForRenderer): Made this function static.
        (textForObject): Ditto.
        (webkitAccessibleTextGetText): Ditto.
        (webkitAccessibleTextGetTextAfterOffset): Ditto.
        (webkitAccessibleTextGetTextAtOffset): Ditto.
        (webkitAccessibleTextGetTextBeforeOffset): Ditto.
        (webkitAccessibleTextGetCharacterAtOffset): Ditto.
        (webkitAccessibleTextGetCaretOffset): Ditto.
        (webkitAccessibleTextGetRunAttributes): Ditto.
        (webkitAccessibleTextGetDefaultAttributes): Ditto.
        (webkitAccessibleTextGetCharacterExtents): Ditto.
        (webkitAccessibleTextGetRangeExtents): Ditto.
        (webkitAccessibleTextGetCharacterCount): Ditto.
        (webkitAccessibleTextGetOffsetAtPoint): Ditto.
        (webkitAccessibleTextGetNSelections): Ditto.
        (webkitAccessibleTextGetSelection): Ditto.
        (webkitAccessibleTextAddSelection): Ditto.
        (webkitAccessibleTextSetSelection): Ditto.
        (webkitAccessibleTextRemoveSelection): Ditto.
        (webkitAccessibleTextSetCaretOffset): Ditto.
        (webkitAccessibleTextInterfaceInit): Moved to the bottom.
        * accessibility/gtk/WebKitAccessibleInterfaceText.h: Removed all
        functions but the one for initializing the interface from here.

        * accessibility/gtk/WebKitAccessibleInterfaceValue.cpp:
        (webkitAccessibleValueGetCurrentValue): Made this function static.
        (webkitAccessibleValueGetMaximumValue): Ditto.
        (webkitAccessibleValueGetMinimumValue): Ditto.
        (webkitAccessibleValueSetCurrentValue): Ditto.
        (webkitAccessibleValueGetMinimumIncrement): Ditto.
        (webkitAccessibleValueInterfaceInit): Moved to the bottom.
        * accessibility/gtk/WebKitAccessibleInterfaceValue.h: Removed all
        functions but the one for initializing the interface from here.

        * accessibility/gtk/WebKitAccessibleWrapperAtk.cpp:
        (webkitAccessibleGetName): Replace call to
        webkitAccessibleTextGetText with atk_text_get_text.

2012-01-24  James Robinson  <jamesr@chromium.org>

        [chromium] Add null check for ContentLayerChromium::m_delegate back to ContentLayerChromium::drawsContent()
        https://bugs.webkit.org/show_bug.cgi?id=76887

        Reviewed by Dimitri Glazkov.

        A ContentLayerChromium's m_delegate pointer is nulled out when its owning GraphicsLayerChromium is destroyed.
        It's possible in some circumstances for this to happen during painting. The null check for this pointer was
        erroneously removed from the base class TiledLayerChromium in r105460.

        No new tests since we don't know how to reproduce this sort of layer mutation during paint (not for lack of
        trying!). Fix based on crash reports from the field.

        * platform/graphics/chromium/ContentLayerChromium.cpp:
        (WebCore::ContentLayerChromium::drawsContent):
        * platform/graphics/chromium/ContentLayerChromium.h:

2012-01-16  Robert Hogan  <robert@webkit.org>

        REGRESSION (r102040): Wrong column widths when row has colspan and unwrappable text
        https://bugs.webkit.org/show_bug.cgi?id=74874

        Reviewed by Julien Chaffraix.

        Tests: fast/css/min-width-with-spanned-cell-fixed.html
               fast/css/min-width-with-spanned-cell.html

        A cell with unwrappable text must be as wide as the text is long. If it is a colspan in a table whose
        columns are all percent and the width of the span cell is wider than the cells it spans in any other 
        row then it will squeeze those cells beyond the width required to display their contents.

        To fix this ensure that the squeezing of cells within a span respects the minimum width determined by
        their contents. The squeezing remains for fixed layout tables as per FF and Opera.

        * rendering/AutoTableLayout.cpp:
        (WebCore::AutoTableLayout::calcEffectiveLogicalWidth):

2012-01-24  Tommy Widenflycht  <tommyw@google.com>

        MediaStream API: Split the MediaStream track list into audio/video specific ones.
        https://bugs.webkit.org/show_bug.cgi?id=76614

        The latest draft of the WebRTC standard have split the MediaStream combined track list
        into audio/video specific ones.

        Reviewed by Darin Fisher.

        Tests for the Media Stream API will be provided by the bug 56587, pending enough landed code.

        * mediastream/LocalMediaStream.cpp:
        (WebCore::LocalMediaStream::create):
        (WebCore::LocalMediaStream::LocalMediaStream):
        * mediastream/LocalMediaStream.h:
        * mediastream/MediaStream.cpp:
        (WebCore::processTrackList):
        (WebCore::MediaStream::create):
        (WebCore::MediaStream::MediaStream):
        * mediastream/MediaStream.h:
        (WebCore::MediaStream::audioTracks):
        (WebCore::MediaStream::videoTracks):
        * mediastream/MediaStream.idl:
        * mediastream/MediaStreamTrack.cpp:
        (WebCore::MediaStreamTrack::create):
        (WebCore::MediaStreamTrack::MediaStreamTrack):
        (WebCore::MediaStreamTrack::kind):
        (WebCore::MediaStreamTrack::label):
        (WebCore::MediaStreamTrack::enabled):
        (WebCore::MediaStreamTrack::setEnabled):
        (WebCore::MediaStreamTrack::component):
        * mediastream/MediaStreamTrack.h:
        * mediastream/UserMediaClient.h:
        * mediastream/UserMediaRequest.cpp:
        (WebCore::UserMediaRequest::mediaStreamSourcesQueryCompleted):
        (WebCore::UserMediaRequest::succeed):
        * mediastream/UserMediaRequest.h:
        * platform/mediastream/MediaStreamCenter.cpp:
        (WebCore::MediaStreamCenter::queryMediaStreamSources):
        (WebCore::MediaStreamCenter::didSetMediaStreamTrackEnabled):
        * platform/mediastream/MediaStreamCenter.h:
        * platform/mediastream/MediaStreamDescriptor.h:
        (WebCore::MediaStreamDescriptor::create):
        (WebCore::MediaStreamDescriptor::numberOfAudioComponents):
        (WebCore::MediaStreamDescriptor::audioComponent):
        (WebCore::MediaStreamDescriptor::numberOfVideoComponents):
        (WebCore::MediaStreamDescriptor::videoComponent):
        (WebCore::MediaStreamDescriptor::MediaStreamDescriptor):

2012-01-24  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r105738.
        http://trac.webkit.org/changeset/105738
        https://bugs.webkit.org/show_bug.cgi?id=76930

        caused fast/css/getComputedStyle/computed-style-border-
        image.html to crash (Requested by kling on #webkit).

        * dom/NamedNodeMap.cpp:
        * dom/NamedNodeMap.h:
        * dom/StyledElement.cpp:
        (WebCore::StyledElement::updateStyleAttribute):
        (WebCore::StyledElement::createInlineStyleDecl):
        (WebCore::StyledElement::destroyInlineStyleDecl):
        (WebCore::StyledElement::ensureInlineStyleDecl):
        (WebCore::StyledElement::style):
        (WebCore::StyledElement::addSubresourceAttributeURLs):
        * dom/StyledElement.h:
        (WebCore::StyledElement::inlineStyleDecl):

2012-01-24  Parag Radke  <nrqv63@motorola.com>

        REGRESSION (r73385): Marquee with behavior="alternate" is not working
        https://bugs.webkit.org/show_bug.cgi?id=64230

        Reviewed by Simon Fraser.

        This patch gives correct content width for marquee, which computes
        correct start position to scroll marquee.

        Test: fast/html/marquee-alternate.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::computePreferredLogicalWidths):
        We need(style()->marqueeBehavior() != MALTERNATE) check as we always need the marquee's 
        actual content width to compute the initial/end position in case of 'MALTERNATE'.
        So we need to calculate the logical width in Alternate case even if fixed width is specified
        as content has to animate between renderBox().right().x() - contentWidth() and 
        renderBox().left().x() + contentWidth().
        
        * rendering/RenderMarquee.cpp:
        (WebCore::RenderMarquee::computePosition):
        Using PreferredLogicalWidth in place of LayoutOverflow for calculating correct content width.

2012-01-24  Andreas Kling  <awesomekling@apple.com>

        RenderInline: Skip caching the computed line height.
        <http://webkit.org/b/76929>

        Reviewed by David Hyatt.

        Stop caching the computed line height on RenderInline and make retrieving it from
        RenderStyle slightly cheaper, freeing up 4 bytes per RenderInline instance.
        This appears to be mostly performance neutral, I don't get more than the occasional
        sample hit when instrumenting heavier web pages.

        This reduces memory consumption by 228 kB (both 32/64-bit) when viewing the full
        HTML5 spec at <http://whatwg.org/c>.

        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::RenderInline):
        (WebCore::RenderInline::styleDidChange):
        (WebCore::RenderInline::lineHeight):
        * rendering/RenderInline.h:
        * rendering/style/RenderStyle.h:
        (WebCore::RenderStyle::computedLineHeight):

            Optimize computedLineHeight() to mitigate some of the damage of calling
            it more often.

2012-01-24  Abhishek Arya  <inferno@chromium.org>

        Crash when rendering -webkit-column-span.
        https://bugs.webkit.org/show_bug.cgi?id=73265

        Reviewed by David Hyatt.

        This patch addresses 2 problems causing crashes in multi-column layout
        1. Trying to render -webkit-column-span for :before, :after caused
           re-entrancy in updateBeforeAfterContent while working on splitFlow.
        2. Cloning a block which has its :before, :after content not added yet,
           caused issues because cloneBlock will definitely have its :before,
           :after content created when setStyle() is called. So, we would
           overwrite cloneBlock with a wrong childrenInline value.

        Tests: fast/multicol/clone-block-children-inline-mismatch-crash.html
               fast/multicol/span/generated-child-split-flow-crash.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::clone):
        (WebCore::RenderBlock::columnsBlockForSpanningElement):

2012-01-22  Robert Hogan  <robert@webkit.org>

        Incorrect positioning of floating pseudo-elements in table captions
        https://bugs.webkit.org/show_bug.cgi?id=76664

        Reviewed by Julien Chaffraix.

        Tests: fast/table/caption-encloses-overhanging-float-expected.html
               fast/table/caption-encloses-overhanging-float.html

        Allow table captions to expand and enclose overhanging floats. When performing
        layout on a caption ensure that its logical top is set so that it does not mistakenly
        conclude that floats in a previous sibling are intruding into it when they're not.

        Mostly diagnosed by Abhishek Arya.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::expandsToEncloseOverhangingFloats): add table captions to the list
         that can enclosed overhanging floats.
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::layoutCaption): use the best available approximation of the caption's logical
         top offset before laying it out.
        (WebCore::RenderTable::layout):
        * rendering/RenderTable.h:

2012-01-24  Kentaro Hara  <haraken@chromium.org>

        In CodeGeneratorV8.pm, overwrite the output .h/.cpp
        only if the bytes differ
        https://bugs.webkit.org/show_bug.cgi?id=76920

        Reviewed by Darin Adler.

        This is one of steps to stop rebuilding .h/.cpp files
        generated by unchanged IDLs (bug 76836).
        This patch makes a change on CodeGeneratorV8.pm so that
        it overwrites the output .h/.cpp only if the bytes differ.

        No tests. No change in behavior.
        I manually confirmed that when I add a new attribute to Element.idl,
        the time-stamps of unrelated V8*.h and V8*.cpp do not change.

        * bindings/scripts/CodeGeneratorV8.pm:
        (WriteData): Used UpdateFileIfChanged().

2012-01-24  Kentaro Hara  <haraken@chromium.org>

        [Refactoring] Remove finish() from all CodeGenerator*.pm
        https://bugs.webkit.org/show_bug.cgi?id=76918

        Reviewed by Darin Adler.

        Now finish() is empty in all CodeGenerator*.pm. This patch removes them.

        No tests. No change in behavior.

        * bindings/scripts/CodeGenerator.pm:
        (ProcessDocument):
        * bindings/scripts/CodeGeneratorCPP.pm:
        * bindings/scripts/CodeGeneratorGObject.pm:
        * bindings/scripts/CodeGeneratorJS.pm:
        * bindings/scripts/CodeGeneratorObjC.pm:
        * bindings/scripts/CodeGeneratorV8.pm:

2012-01-24  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: incorrect highlight position when searching in console
        https://bugs.webkit.org/show_bug.cgi?id=76837

        Reviewed by Yury Semikhatsky.

        * inspector/front-end/ConsoleMessage.js:
        (WebInspector.ConsoleMessageImpl.prototype._formatMessage):
        (WebInspector.ConsoleMessageImpl.prototype.clearHighlight):
        (WebInspector.ConsoleMessageImpl.prototype.highlightSearchResults):
        (WebInspector.ConsoleMessageImpl.prototype._highlightSearchResultsInElement):
        (WebInspector.ConsoleMessageImpl.prototype.matchesRegex):

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

        Show layer borders for scrollbar layers
        https://bugs.webkit.org/show_bug.cgi?id=76888

        Reviewed by Beth Dakin.
        
        When compositing layer borders are showing, show the borders
        for scrollbars layers. This reduces confusion about whether scrollbars
        are rendering into their own layers.
        
        Requires a new parameter to two GraphicsLayerClient methods.

        * platform/graphics/GraphicsLayer.h:
        (WebCore::GraphicsLayer::showDebugBorders):
        (WebCore::GraphicsLayer::showRepaintCounter):
        * platform/graphics/GraphicsLayerClient.h:
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::showDebugBorders):
        (WebCore::RenderLayerBacking::showRepaintCounter):
        * rendering/RenderLayerBacking.h:
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::showDebugBorders):
        (WebCore::RenderLayerCompositor::showRepaintCounter):
        * rendering/RenderLayerCompositor.h:

2012-01-24  David Levin  <levin@chromium.org>

        [windows] Convert usage of GetDC to HWndDC Part 3.
        https://bugs.webkit.org/show_bug.cgi?id=76889

        Reviewed by Adam Roben.

        No new functionality so no new tests.

        * platform/graphics/win/UniscribeController.cpp:
        (WebCore::UniscribeController::shapeAndPlaceItem): Simple replacement.
        (WebCore::UniscribeController::shape): Use the delayed allocation.
        * platform/win/PopupMenuWin.cpp:
        (WebCore::PopupMenuWin::paint): Fix a dc leak and use the dellayed allocation.

2012-01-24  Mario Sanchez Prada  <msanchez@igalia.com>

        [GTK] Refactor GTK's accessibilitity code to be more modular
        https://bugs.webkit.org/show_bug.cgi?id=76783

        Reviewed by Martin Robinson.

        Fix coding style in the ATK AccessibilityObject wrapper.

        * accessibility/gtk/WebKitAccessibleWrapperAtk.cpp:
        (webkitAccessibleGetName):
        (webkitAccessibleGetDescription):
        (webkitAccessibleGetParent):
        (webkitAccessibleGetNChildren):
        (webkitAccessibleRefChild):
        (webkitAccessibleGetIndexInParent):
        (webkitAccessibleGetAttributes):
        (atkRole):
        (webkitAccessibleGetRole):
        (setAtkStateSetFromCoreObject):
        (webkitAccessibleRefStateSet):
        (webkitAccessibleRefRelationSet):
        (webkitAccessibleInit):
        (webkitAccessibleFinalize):
        (webkit_accessible_class_init):

2012-01-24  Mario Sanchez Prada  <msanchez@igalia.com>

        [GTK] Refactor GTK's accessibilitity code to be more modular
        https://bugs.webkit.org/show_bug.cgi?id=76783

        Reviewed by Martin Robinson.

        Cleanup the list of includes in WebKitAccessibleWrapperAtk.cpp.

        * accessibility/gtk/WebKitAccessibleWrapperAtk.cpp: Removes
        'include' lines that are no longer needed after the refactor.

2012-01-24  Raphael Kubo da Costa  <kubo@profusion.mobi>

        [EFL] Remove CookieJarEfl.cpp
        https://bugs.webkit.org/show_bug.cgi?id=76916

        Reviewed by Gustavo Noronha Silva.

        CookieJarEfl.cpp has not been used for years -- we either need
        CookieJarCurl or CookieJarSoup depending on the chosen network
        backend.

        No new tests, just an unused file being removed.

        * WebCore.gypi: Remove reference to CookieJarEfl.cpp.
        * platform/efl/CookieJarEfl.cpp: Removed.

2012-01-24  Abhishek Arya  <inferno@chromium.org>

        Crash when accessing removed parent in InlineTextBox.
        https://bugs.webkit.org/show_bug.cgi?id=72982

        Reviewed by James Robinson.

        The crash happens because:
        1. We add heading element(h1) before the span element(span1),
           causing splitflow on the anonymous block containing BeforeText,
           span1(and SpanText) and AfterText.
        2. span1 moves to the cloneBlock (continuation).
        3. Our anonymous block and cloneBlock are both marked for layout,
           however we still have a copy of our lineboxes with its childs
           as the textboxes belonging to SpanText.
        4. Our anonymous block only child BeforeText is getting removed,
           so we dont have any children anymore and we delete our lineboxes,
           leaving behind the children textboxes belonging to SpanText.
        5. SpanText is getting destroyed, so it tries to inform removed
           parent lineboxes causing the crash.

        Test: fast/block/block-remove-child-delete-line-box-crash.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::removeChild):

2012-01-24  Mario Sanchez Prada  <msanchez@igalia.com>

        [GTK] Refactor GTK's accessibilitity code to be more modular
        https://bugs.webkit.org/show_bug.cgi?id=76783

        Reviewed by Martin Robinson.

        New files for the implementation of the AtkTable interface,
        containing the related code from WebKitAccessibleWrapperAtk.cpp.

        * accessibility/gtk/WebKitAccessibleInterfaceTable.cpp: Added.
        (core):
        (cell):
        (cellIndex):
        (cellAtIndex):
        (webkitAccessibleTableInterfaceInit):
        (webkitAccessibleTableRefAt):
        (webkitAccessibleTableGetIndexAt):
        (webkitAccessibleTableGetColumnAtIndex):
        (webkitAccessibleTableGetRowAtIndex):
        (webkitAccessibleTableGetNColumns):
        (webkitAccessibleTableGetNRows):
        (webkitAccessibleTableGetColumnExtentAt):
        (webkitAccessibleTableGetRowExtentAt):
        (webkitAccessibleTableGetColumnHeader):
        (webkitAccessibleTableGetRowHeader):
        (webkitAccessibleTableGetCaption):
        (webkitAccessibleTableGetColumnDescription):
        (webkitAccessibleTableGetRowDescription):
        * accessibility/gtk/WebKitAccessibleInterfaceTable.h: Added.
        * accessibility/gtk/WebKitAccessibleWrapperAtk.cpp: Remove code
        related to the implementation of the AtkTable interface.

        Add new files to build files.

        * GNUmakefile.list.am: Add WebKitAccessibleInterfaceTable.[h|cpp].
        * WebCore.gypi: Ditto.

2012-01-24  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Scripts panel tabbed editor container should have gray background when there are no open tabs.
        https://bugs.webkit.org/show_bug.cgi?id=76903

        Reviewed by Yury Semikhatsky.

        * inspector/front-end/TabbedPane.js:
        (WebInspector.TabbedPane.prototype._updateTabElements):
        * inspector/front-end/tabbedPane.css:
        (.tabbed-pane-content.has-no-tabs):

2012-01-24  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: OpenResourceDialog should work when there are no open tabs in scripts panel.
        https://bugs.webkit.org/show_bug.cgi?id=76907

        Reviewed by Yury Semikhatsky.

        * inspector/front-end/FilteredItemSelectionDialog.js:
        (WebInspector.OpenResourceDialog.install):
        * inspector/front-end/ScriptsPanel.js:

2012-01-24  Peter Rybin  <peter.rybin@gmail.com>

        Web Inspector: CodeGeneratorInspector.py: put TypeBuilder namespace in a separate sources
        https://bugs.webkit.org/show_bug.cgi?id=76868

        Reviewed by Yury Semikhatsky.

        Configurations of (hopefully) all build systems are fixed.

        * CMakeLists.txt:
        * DerivedSources.make:
        * DerivedSources.pri:
        * GNUmakefile.am:
        * GNUmakefile.list.am:
        * WebCore.gyp/WebCore.gyp:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * inspector/CodeGeneratorInspector.py:
        (dash_to_camelcase):
        (InspectorFrontend_h):
        (InspectorBackendDispatcher_h):

2012-01-24  Mario Sanchez Prada  <msanchez@igalia.com>

        [GTK] Refactor GTK's accessibilitity code to be more modular
        https://bugs.webkit.org/show_bug.cgi?id=76783

        Reviewed by Martin Robinson.

        New files for the implementation of the AtkText interface,
        containing the related code from WebKitAccessibleWrapperAtk.cpp.

        * accessibility/gtk/WebKitAccessibleInterfaceText.cpp: Added.
        (core):
        (textForRenderer):
        (textForObject):
        (getGailTextUtilForAtk):
        (getPangoLayoutForAtk):
        (baselinePositionForRenderObject):
        (getAttributeSetForAccessibilityObject):
        (compareAttribute):
        (attributeSetDifference):
        (accessibilityObjectLength):
        (getAccessibilityObjectForOffset):
        (getRunAttributesFromAccesibilityObject):
        (textExtents):
        (getSelectionOffsetsForObject):
        (webkitAccessibleTextInterfaceInit):
        (webkitAccessibleTextGetText):
        (webkitAccessibleTextGetTextAfterOffset):
        (webkitAccessibleTextGetTextAtOffset):
        (webkitAccessibleTextGetTextBeforeOffset):
        (webkitAccessibleTextGetCharacterAtOffset):
        (webkitAccessibleTextGetCaretOffset):
        (webkitAccessibleTextGetRunAttributes):
        (webkitAccessibleTextGetDefaultAttributes):
        (webkitAccessibleTextGetCharacterExtents):
        (webkitAccessibleTextGetRangeExtents):
        (webkitAccessibleTextGetCharacterCount):
        (webkitAccessibleTextGetOffsetAtPoint):
        (webkitAccessibleTextGetNSelections):
        (webkitAccessibleTextGetSelection):
        (webkitAccessibleTextAddSelection):
        (webkitAccessibleTextRemoveSelection):
        (webkitAccessibleTextSetSelection):
        (webkitAccessibleTextSetCaretOffset):
        * accessibility/gtk/WebKitAccessibleInterfaceText.h: Added.

        Move common function selectionBelongsToObject out from the wrapper
        to the utility file, used from WebKitAccessibleInterfaceText.cpp.

        * accessibility/gtk/WebKitAccessibleUtil.cpp:
        (selectionBelongsToObject): Taken from WebKitAccessibleWrapperAtk.cpp.
        * accessibility/gtk/WebKitAccessibleUtil.h:
        * accessibility/gtk/WebKitAccessibleWrapperAtk.cpp: Remove local
        implementation of selectionBelongsToObject, and the code related
        to the implementation of the AtkText interface.
        (webkit_accessible_get_name): Update call to the former function
        webkit_accessible_text_get_text and use the new function name.
        (webkit_accessible_table_get_column_description): Ditto.
        (webkit_accessible_table_get_row_description): Ditto.

        Add new files to build files.

        * GNUmakefile.list.am: Add WebKitAccessibleInterfaceText.[h|cpp].
        * WebCore.gypi: Ditto.

2012-01-24  Mario Sanchez Prada  <msanchez@igalia.com>

        [GTK] Refactor GTK's accessibilitity code to be more modular
        https://bugs.webkit.org/show_bug.cgi?id=76783

        Reviewed by Martin Robinson.

        New files for the implementation of the AtkValue interface,
        containing the related code from WebKitAccessibleWrapperAtk.cpp.

        * accessibility/gtk/WebKitAccessibleInterfaceValue.cpp: Added.
        (core):
        (webkitAccessibleValueInterfaceInit):
        (webkitAccessibleValueGetCurrentValue):
        (webkitAccessibleValueGetMaximumValue):
        (webkitAccessibleValueGetMinimumValue):
        (webkitAccessibleValueSetCurrentValue):
        (webkitAccessibleValueGetMinimumIncrement):
        * accessibility/gtk/WebKitAccessibleInterfaceValue.h: Added.
        * accessibility/gtk/WebKitAccessibleWrapperAtk.cpp: Remove code
        related to the implementation of the AtkValue interface.

        Add new files to build files.

        * GNUmakefile.list.am: Add WebKitAccessibleInterfaceValue.[h|cpp].
        * WebCore.gypi: Ditto.

2012-01-24  Antti Koivisto  <antti@apple.com>

        Reduce internal use of CSSStyleDeclaration base class
        https://bugs.webkit.org/show_bug.cgi?id=76904

        Reviewed by Andreas Kling.

        Internally WebCore should use the more specific CSSMutableStyleDeclaration and CSSComputedStyleDeclaration types.
        The CSSStyleDeclaration base should be used in the DOM API functions only. This will make it easier to separate 
        internal style sheet implementation from the DOM in the future.
        
        - Switch CSSStyleDeclaration -> CSSMutableStyleDeclaration where feasible
        - Use StyledElement::ensureInlineStyleDecl() instead of Element::style() (which is a DOM API function)
        - Remove Attribute::style() which looks like a DOM API function but is not exposed.

        * css/CSSMutableStyleDeclaration.h:
        (WebCore::CSSMutableStyleDeclaration::getPropertyCSSValue):
        * dom/Attr.h:
        (WebCore::Attr::style):
        * dom/Attribute.h:
        * editing/EditingStyle.cpp:
        (WebCore::HTMLElementEquivalent::propertyExistsInStyle):
        (WebCore::HTMLElementEquivalent::valueIsPresentInStyle):
        (WebCore::HTMLTextDecorationEquivalent::propertyExistsInStyle):
        (WebCore::HTMLTextDecorationEquivalent::valueIsPresentInStyle):
        (WebCore::HTMLAttributeEquivalent::valueIsPresentInStyle):
        * editing/Editor.cpp:
        (WebCore::Editor::applyEditingStyleToElement):
        * editing/markup.cpp:
        (WebCore::StyledMarkupAccumulator::wrapWithStyleNode):
        (WebCore::StyledMarkupAccumulator::appendStyleNodeOpenTag):
        (WebCore::propertyMissingOrEqualToNone):
        * inspector/InspectorCSSAgent.cpp:
        (WebCore::InspectorCSSAgent::buildArrayForAttributeStyles):
        * page/DragController.cpp:
        (WebCore::DragController::concludeEditDrag):
        * page/PageSerializer.cpp:
        (WebCore::PageSerializer::serializeFrame):
        (WebCore::PageSerializer::retrieveResourcesForCSSDeclaration):
        * page/PageSerializer.h:
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::resize):
        * svg/SVGStyledElement.cpp:
        (WebCore::SVGStyledElement::getPresentationAttribute):

2012-01-23  Andreas Kling  <awesomekling@apple.com>

        Make elements that don't have attributes smaller.
        <http://webkit.org/b/76876>

        Reviewed by Antti Koivisto.

        Move the inline style declaration from StyledElement to NamedNodeMap, since having
        an inline style declaration also implies having a style attribute on the element.
        This saves one CPU word per element that has no attributes.

        This reduces memory consumption by 412 kB (on 64-bit) when viewing the full
        HTML5 spec at <http://whatwg.org/c>.

        * dom/NamedNodeMap.cpp:
        (WebCore::NamedNodeMap::ensureInlineStyleDecl):
        (WebCore::NamedNodeMap::destroyInlineStyleDecl):
        (WebCore::NamedNodeMap::createInlineStyleDecl):
        * dom/NamedNodeMap.h:
        (WebCore::NamedNodeMap::inlineStyleDecl):
        * dom/StyledElement.cpp:
        (WebCore::StyledElement::updateStyleAttribute):
        (WebCore::StyledElement::addSubresourceAttributeURLs):
        * dom/StyledElement.h:
        (WebCore::StyledElement::inlineStyleDecl):
        (WebCore::StyledElement::ensureInlineStyleDecl):
        (WebCore::StyledElement::destroyInlineStyleDecl):

2012-01-24  No'am Rosenthal  <noam.rosenthal@nokia.com>

        [Qt][WK2] Qt's cross-process AC copies images excessively when updating tiles.
        https://bugs.webkit.org/show_bug.cgi?id=76877

        Reviewed by Kenneth Rohde Christiansen.

        Add BitmapTexture::updateRawContents(), which allows uploading image data to a texture
        without changing its format or swizzling RGB. The data has to be in the texture's native
        format.

        No new tests, this affects performance on all existing tests.

        * platform/graphics/opengl/TextureMapperGL.cpp:
        (WebCore::BitmapTextureGL::updateRawContents):
        * platform/graphics/qt/TextureMapperQt.cpp:
        * platform/graphics/texmap/TextureMapper.h:
        (WebCore::BitmapTexture::updateRawContents):
        * platform/graphics/texmap/TextureMapperNode.cpp:
        (WebCore::TextureMapperNode::setContentsTileBackBuffer):
        * platform/graphics/texmap/TextureMapperNode.h:

2012-01-24  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: inspector/debugger/dom-breakpoints.html started to fail after r105642
        https://bugs.webkit.org/show_bug.cgi?id=76908

        Reviewed by Yury Semikhatsky.

        * css/CSSMutableStyleDeclaration.cpp:

2012-01-24  Csaba Osztrogonác  <ossy@webkit.org>

        [Refactoring] Make finish() of CodeGeneratorJS.pm empty
        https://bugs.webkit.org/show_bug.cgi?id=76846

        Reviewed by Tor Arne Vestbø.

        * bindings/scripts/CodeGeneratorJS.pm: Warning fix after r105683.
        (WriteData):

2012-01-24  Andras Becsi  <andras.becsi@nokia.com>

        [Qt] Fix the build with the newes Qt5 hashes
        https://bugs.webkit.org/show_bug.cgi?id=76657

        Reviewed by Simon Hausmann.

        No new tests needed.

        * platform/graphics/cairo/OpenGLShims.cpp:
        (WebCore::getProcAddress): Adopt API changes.

2012-01-24  Ádám Kallai  <Kallai.Adam@stud.u-szeged.hu>

        [Qt] Incremental build problem.
        https://bugs.webkit.org/show_bug.cgi?id=74687

        It is necessary to set mathattrs.in dependency for generating MathMLNames.cpp file.

        Reviewed by Csaba Osztrogonác.

        * DerivedSources.pri:
        I added missing depend.

2012-01-24  Mario Sanchez Prada  <msanchez@igalia.com>

        [GTK] Refactor GTK's accessibilitity code to be more modular
        https://bugs.webkit.org/show_bug.cgi?id=76783

        Reviewed by Martin Robinson.

        New files for the implementation of the AtkSelection interface,
        containing the related code from WebKitAccessibleWrapperAtk.cpp.

        * accessibility/gtk/WebKitAccessibleInterfaceSelection.cpp: Added.
        (core):
        (listObjectForSelection):
        (optionFromList):
        (optionFromSelection):
        (webkitAccessibleSelectionInterfaceInit):
        (webkitAccessibleSelectionAddSelection):
        (webkitAccessibleSelectionClearSelection):
        (webkitAccessibleSelectionRefSelection):
        (webkitAccessibleSelectionGetSelectionCount):
        (webkitAccessibleSelectionIsChildSelected):
        (webkitAccessibleSelectionRemoveSelection):
        (webkitAccessibleSelectionSelectAllSelection):
        * accessibility/gtk/WebKitAccessibleInterfaceSelection.h: Added.
        * accessibility/gtk/WebKitAccessibleWrapperAtk.cpp: Remove code
        related to the implementation of the AtkSelection interface.

        Add new files to build files.

        * GNUmakefile.list.am: Add WebKitAccessibleInterfaceSelection.[h|cpp].
        * WebCore.gypi: Ditto.

2012-01-24  Mario Sanchez Prada  <msanchez@igalia.com>

        [GTK] Refactor GTK's accessibilitity code to be more modular
        https://bugs.webkit.org/show_bug.cgi?id=76783

        Reviewed by Martin Robinson.

        New files for the implementation of the AtkImage interface,
        containing the related code from WebKitAccessibleWrapperAtk.cpp.

        * accessibility/gtk/WebKitAccessibleInterfaceImage.cpp: Added.
        (core):
        (webkitAccessibleImageInterfaceInit):
        (webkitAccessibleImageGetImagePosition):
        (webkitAccessibleImageGetImageDescription):
        (webkitAccessibleImageGetImageSize):
        * accessibility/gtk/WebKitAccessibleInterfaceImage.h: Added.
        * accessibility/gtk/WebKitAccessibleWrapperAtk.cpp: Remove code
        related to the implementation of the AtkImage interface.

        Add new files to build files.

        * GNUmakefile.list.am: Add WebKitAccessibleInterfaceImage.[h|cpp].
        * WebCore.gypi: Ditto.

2012-01-24  Mario Sanchez Prada  <msanchez@igalia.com>

        [GTK] Refactor GTK's accessibilitity code to be more modular
        https://bugs.webkit.org/show_bug.cgi?id=76783

        Reviewed by Martin Robinson.

        New files for the implementation of the AtkHypertext interface,
        containing the related code from WebKitAccessibleWrapperAtk.cpp.

        * accessibility/gtk/WebKitAccessibleInterfaceHypertext.cpp: Added.
        (core):
        (webkitAccessibleHypertextInterfaceInit):
        (webkitAccessibleHypertextGetLink):
        (webkitAccessibleHypertextGetNLinks):
        (webkitAccessibleHypertextGetLinkIndex):
        * accessibility/gtk/WebKitAccessibleInterfaceHypertext.h: Added.
        * accessibility/gtk/WebKitAccessibleWrapperAtk.cpp: Remove code
        related to the implementation of the AtkHypertext interface.

        Add new files to build files.

        * GNUmakefile.list.am: Add WebKitAccessibleInterfaceHypertext.[h|cpp].
        * WebCore.gypi: Ditto.

2012-01-24  Mario Sanchez Prada  <msanchez@igalia.com>

        [GTK] Refactor GTK's accessibilitity code to be more modular
        https://bugs.webkit.org/show_bug.cgi?id=76783

        Reviewed by Martin Robinson.

        New files for the implementation of the AtkHyperlinkImpl interface,
        containing the related code from WebKitAccessibleWrapperAtk.cpp.

        * accessibility/gtk/WebKitAccessibleInterfaceHyperlinkImpl.cpp: Added.
        (webkitAccessibleHyperlinkImplInterfaceInit):
        (webkitAccessibleHyperlinkImplGetHyperlink):
        * accessibility/gtk/WebKitAccessibleInterfaceHyperlinkImpl.h: Added.
        * accessibility/gtk/WebKitAccessibleWrapperAtk.cpp: Remove code
        related to the implementation of the AtkHyperlinkImpl interface.
        (webkit_accessible_class_init):

        Add new files to build files.

        * GNUmakefile.list.am: Add WebKitAccessibleInterfaceHyperlinkImpl.[h|cpp].
        * WebCore.gypi: Ditto.

2012-01-24  Mario Sanchez Prada  <msanchez@igalia.com>

        [GTK] Refactor GTK's accessibilitity code to be more modular
        https://bugs.webkit.org/show_bug.cgi?id=76783

        Reviewed by Martin Robinson.

        New files for the implementation of the AtkEditableText interface,
        containing the related code from WebKitAccessibleWrapperAtk.cpp.

        * accessibility/gtk/WebKitAccessibleInterfaceEditableText.cpp: Added.
        (core):
        (webkitAccessibleEditableTextInterfaceInit):
        (webkitAccessibleEditableTextSetRunAttributes):
        (webkitAccessibleEditableTextSetTextContents):
        (webkitAccessibleEditableTextInsertText):
        (webkitAccessibleEditableTextCopyText):
        (webkitAccessibleEditableTextCutText):
        (webkitAccessibleEditableTextDeleteText):
        (webkitAccessibleEditableTextPasteText):
        * accessibility/gtk/WebKitAccessibleInterfaceEditableText.h: Added.
        * accessibility/gtk/WebKitAccessibleWrapperAtk.cpp: Remove code
        related to the implementation of the AtkEditableText interface.

        Add new files to build files.

        * GNUmakefile.list.am: Add WebKitAccessibleInterfaceEditableText.[h|cpp].
        * WebCore.gypi: Ditto.

2012-01-24  Mario Sanchez Prada  <msanchez@igalia.com>

        [GTK] Refactor GTK's accessibilitity code to be more modular
        https://bugs.webkit.org/show_bug.cgi?id=76783

        Reviewed by Martin Robinson.

        New files for the implementation of the AtkDocument interface,
        containing the related code from WebKitAccessibleWrapperAtk.cpp.

        * accessibility/gtk/WebKitAccessibleInterfaceDocument.cpp: Added.
        (core):
        (documentAttributeValue):
        (webkitAccessibleDocumentInterfaceInit):
        (webkitAccessibleDocumentGetAttributeValue):
        (webkitAccessibleDocumentGetAttributes):
        (webkitAccessibleDocumentGetLocale):
        * accessibility/gtk/WebKitAccessibleInterfaceDocument.h: Added.

        Move common function addAttributeToSet() out from the wrapper to
        the utility file, used from WebKitAccessibleInterfaceDocument.cpp.

        * accessibility/gtk/WebKitAccessibleUtil.cpp:
        (addToAtkAttributeSet): Taken from WebKitAccessibleWrapperAtk.cpp.
        * accessibility/gtk/WebKitAccessibleUtil.h:
        * accessibility/gtk/WebKitAccessibleWrapperAtk.cpp: Remove local
        implementation of addAttributeToSet, as well as all the code related
        to the implementation of the AtkDocument interface.

        Add new files to build files.

        * GNUmakefile.list.am: Add WebKitAccessibleInterfaceDocument.[h|cpp].
        * WebCore.gypi: Ditto.

2012-01-24  Mario Sanchez Prada  <msanchez@igalia.com>

        [GTK] Refactor GTK's accessibilitity code to be more modular
        https://bugs.webkit.org/show_bug.cgi?id=76783

        Reviewed by Martin Robinson.

        New files for the implementation of the AtkComponent interface,
        containing the related code from WebKitAccessibleWrapperAtk.cpp.

        * accessibility/gtk/WebKitAccessibleInterfaceComponent.cpp: Added.
        (core):
        (atkToContents):
        (webkitAccessibleComponentInterfaceInit):
        (webkitAccessibleComponentRefAccessibleAtPoint):
        (webkitAccessibleComponentGetExtents):
        (webkitAccessibleComponentGrabFocus):
        * accessibility/gtk/WebKitAccessibleInterfaceComponent.h: Added.

        Move common function contentsToAtk() out from the wrapper to the
        utility file, used from WebKitAccessibleInterfaceComponent.cpp.

        * accessibility/gtk/WebKitAccessibleUtil.cpp:
        (contentsRelativeToAtkCoordinateType): Taken from WebKitAccessibleWrapperAtk.cpp.
        * accessibility/gtk/WebKitAccessibleUtil.h:
        * accessibility/gtk/WebKitAccessibleWrapperAtk.cpp: Remove local
        implementation of contentsToAtk, as well as all the code related
        to the implementation of the AtkComponent interface.

        Add new files to build files.

        * GNUmakefile.list.am: Add WebKitAccessibleInterfaceComponent.[h|cpp].
        * WebCore.gypi: Ditto.

2012-01-24  Kentaro Hara  <haraken@chromium.org>

        [Refactoring] Makes finish() of CodeGeneratorV8.pm empty
        https://bugs.webkit.org/show_bug.cgi?id=76841

        Reviewed by Adam Barth.

        This is one of steps to stop rebuilding .h/.cpp files
        generated by unchanged IDLs (bug 76836).

        As refactoring, we are planning to remove finish() from
        all CodeGenerators. This patch makes finish() of
        CodeGeneratorV8.pm empty.

        No new tests. No change in behavior.

        * bindings/scripts/CodeGeneratorV8.pm:
        (finish): Made it empty. We will remove finish() after
        making finish() of all CodeGenerators empty.
        (GenerateInterface): Modified to call WriteData().
        (WriteData): Simple code refactoring.
        Removed if(defined $IMPL).
        Removed if(defined $HEADER).
        $IMPL -> IMPL.
        $HEADER -> HEADER.

2012-01-24  Mario Sanchez Prada  <msanchez@igalia.com>

        Unreviewed build fix for GTK after r105698.

        * bindings/js/JSPeerConnectionCustom.cpp:
        (WebCore::JSPeerConnectionConstructor::constructJSPeerConnection):

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

        Fix build erros on Mac by r105706.
        https://bugs.webkit.org/show_bug.cgi?id=76763

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::compressedTexImage2D): Removed unused argument names.
        (WebCore::WebGLRenderingContext::compressedTexSubImage2D): ditto.

2012-01-23  Kent Tamura  <tkent@chromium.org>

        Introduce RadioButtonGroup class to keep track of the group members and required state
        https://bugs.webkit.org/show_bug.cgi?id=74909

        Reviewed by Darin Adler.

        RadioButtonGroup contains a set of member radio buttons in the group,
        and "required" status of the group. This helps implementing correct
        radio button validity, and improving performance of updating validity
        status of radio buttons.

        This change fixes the following bugs:
        - A radio button should be "required" if one of a member of the same
          group has the "required" attribute.
          https://bugs.webkit.org/show_bug.cgi?id=76365
        - :invalid style is not applied when a checked radio button is removed
          from its radio group
          https://bugs.webkit.org/show_bug.cgi?id=74914
        - Loading a page with N radio buttons in a group takes O(N^2) time.

        Tests: fast/forms/radio/radio-live-validation-style.html
               perf/adding-radio-buttons.html

        * dom/CheckedRadioButtons.cpp:
        (WebCore::RadioButtonGroup::isEmpty):
        (WebCore::RadioButtonGroup::isRequired):
        (WebCore::RadioButtonGroup::checkedButton):
        (WebCore::RadioButtonGroup::RadioButtonGroup):
        (WebCore::RadioButtonGroup::create):
        (WebCore::RadioButtonGroup::isValid):
        (WebCore::RadioButtonGroup::setCheckedButton):
        (WebCore::RadioButtonGroup::add):
        (WebCore::RadioButtonGroup::updateCheckedState):
        (WebCore::RadioButtonGroup::requiredAttributeChanged):
        (WebCore::RadioButtonGroup::remove):
        (WebCore::RadioButtonGroup::setNeedsValidityCheckForAllButtons):
        Add RadioButtonGroup class. It keeps track of pointers to member radio
        buttons and required status of the group in addition to the checked
        radio button pointer.

        (WebCore::CheckedRadioButtons::CheckedRadioButtons):
        (WebCore::CheckedRadioButtons::~CheckedRadioButtons):
        Define empty constructor and destructor in order to avoid exposing
        RadioButtonGroup class.

        (WebCore::CheckedRadioButtons::addButton):
        (WebCore::CheckedRadioButtons::updateCheckedState):
        (WebCore::CheckedRadioButtons::requiredAttributeChanged):
        (WebCore::CheckedRadioButtons::checkedButtonForGroup):
        (WebCore::CheckedRadioButtons::isInRequiredGroup):
        (WebCore::CheckedRadioButtons::removeButton):
        Change the HashMap member of this class so that it maps a group name to
        a RadioButtonGroup object. These functions just get a RadioButtonGroup
        object and call a corresponding member function of RadioButtonGroup.

        * dom/CheckedRadioButtons.h: Update declarations.

        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLFormControlElement::parseMappedAttribute):
        (WebCore::HTMLFormControlElement::requiredAttributeChanged):
        Move a part of parseMappedAttribute() into requiredAttributeChanged().
        * html/HTMLFormControlElement.h: Add requiredAttributeChanged().
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::valueMissing):
        Move required check code to InputType::valueMissing implementations.
        RadioInputType needs special handling for checking required state.
        readOnly() and disabled() are unnecessary because willValidate() checks them.
        (WebCore::HTMLInputElement::setChecked):
        Call new function CheckedRadioButtons::updateCheckedState() instead of
        removeButton() and updateCheckedRadioButtons().
        (WebCore::HTMLInputElement::requiredAttributeChanged):
        Override this to call CheckedRadioButtons::requiredAttributeChanged().
        * html/HTMLInputElement.h: Add requiredAttributeChanged().
        * html/RadioInputType.cpp:
        (WebCore::RadioInputType::valueMissing):
        Check required state by CheckedRadioButtons::isInRequiredGroup().
        * html/RadioInputType.h: Remove attach().

        * html/CheckboxInputType.cpp:
        (WebCore::CheckboxInputType::valueMissing):
          Move required check from HTMLInputElement::valueMissing().
        * html/FileInputType.cpp:
        (WebCore::FileInputType::valueMissing): ditto.
        * html/TextFieldInputType.cpp:
        (WebCore::TextFieldInputType::valueMissing): ditto.

2012-01-24  Noel Gordon  <noel.gordon@gmail.com>

        [chromium] PNG image with CMYK ICC color profile renders color-inverted and squashed
        https://bugs.webkit.org/show_bug.cgi?id=76804

        Reviewed by Adam Barth.

        Use color profiles for PNG images only if their embedded color profile is from an RGB
        color space input device.

        Test: fast/images/rgb-png-with-cmyk-color-profile.html

        * platform/image-decoders/ImageDecoder.h:
        (WebCore::ImageDecoder::rgbColorProfile): Return true if the profile has an RGB color space.
        (WebCore::ImageDecoder::inputDeviceColorProfile): Return true if the profile is from an input device.
        * platform/image-decoders/png/PNGImageDecoder.cpp:
        (WebCore::readColorProfile): Ignore PNG image embedded color profile unless the profile
        comes from an RGB color space input device.
        (WebCore::PNGImageDecoder::headerAvailable): Minor white-space removals courtesy Xcode.

2012-01-23  Pavel Podivilov  <podivilov@chromium.org>

        Web Inspector: fix sticky DOM breakpoints.
        https://bugs.webkit.org/show_bug.cgi?id=64437

        Reviewed by Yury Semikhatsky.

        * inspector/front-end/DOMBreakpointsSidebarPane.js:
        (WebInspector.DOMBreakpointsSidebarPane.prototype._inspectedURLChanged):

2012-01-24  Gregg Tavares  <gman@google.com>

        Expose WebGL texture compression methods on WebGLRenderingContext
        https://bugs.webkit.org/show_bug.cgi?id=76763

        Reviewed by Kenneth Russell.

        Test: fast/canvas/webgl/compressed-tex-image.html

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::compressedTexImage2D):
        (WebCore::WebGLRenderingContext::compressedTexSubImage2D):
        * html/canvas/WebGLRenderingContext.h:
        * html/canvas/WebGLRenderingContext.idl:

2012-01-24  Kenichi Ishibashi  <bashi@chromium.org>

        [V8] Add Uint8ClampedArray support
        https://bugs.webkit.org/show_bug.cgi?id=76803

        Reviewed by Kenneth Russell.

        No new tests. fast/js/script-tests/dfg-uint8clampedarray.js should pass on chromium port.

        * WebCore.gypi: Added required files.
        * bindings/scripts/CodeGeneratorV8.pm:
        (IsTypedArrayType): Added Uint8ClampedArray.
        * bindings/v8/SerializedScriptValue.cpp: Added the tag for Uint8ClampedArray.
        (WebCore::V8ObjectMap::Writer::writeArrayBufferView): Appends the tag when buffer is Uint8ClampedArray.
        (WebCore::V8ObjectMap::Reader::readArrayBufferView): Creates Uint8ClampedArray instance when the tag represents Uint8ClampedArray.
        * bindings/v8/custom/V8ArrayBufferViewCustomScript.js:
        * bindings/v8/custom/V8Uint8ClampedArrayCustom.cpp: Added.
        (WebCore::V8Uint8ClampedArray::constructorCallback):
        (WebCore::V8Uint8ClampedArray::setCallback):
        (WebCore::toV8):
        * page/Crypto.cpp: Added isUnsignedByteClampedArray() call to isIntegerArray().
        * page/DOMWindow.idl: Removed ifdefs.
        * workers/WorkerContext.idl: Added Uint8ArrayConstructor.

2012-01-24  Ilya Tikhonovsky  <loislo@chromium.org>

        Unreviewed build fix for GTK Debug build after r105698.

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

2012-01-23  Scott Graham  <scottmg@chromium.org>

        Avoid spurious rebuilds on vs2010 due to DerivedSources not existing
        https://bugs.webkit.org/show_bug.cgi?id=76873

        Reviewed by Adam Barth.

        * WebCore.gyp/WebCore.gyp:

2012-01-23  Geoffrey Garen  <ggaren@apple.com>

        JSValue::toString() should return a JSString* instead of a UString
        https://bugs.webkit.org/show_bug.cgi?id=76861

        Reviewed by Gavin Barraclough.

        Mechanical changes to call value() after calling toString(), to
        convert from "JS string" (JSString*) to "C++ string" (UString), since
        toString() no longer returns a "C++ string".

        * bindings/js/IDBBindingUtilities.cpp:
        (WebCore::createIDBKeyFromValue):
        * bindings/js/JSCSSStyleDeclarationCustom.cpp:
        (WebCore::JSCSSStyleDeclaration::getPropertyCSSValue):
        * bindings/js/JSClipboardCustom.cpp:
        (WebCore::JSClipboard::clearData):
        (WebCore::JSClipboard::getData):
        * bindings/js/JSCustomXPathNSResolver.cpp:
        (WebCore::JSCustomXPathNSResolver::lookupNamespaceURI):
        * bindings/js/JSDOMBinding.cpp:
        (WebCore::valueToStringWithNullCheck):
        (WebCore::valueToStringWithUndefinedOrNullCheck):
        (WebCore::reportException):
        * bindings/js/JSDOMFormDataCustom.cpp:
        (WebCore::JSDOMFormData::append):
        * bindings/js/JSDOMStringMapCustom.cpp:
        (WebCore::JSDOMStringMap::putDelegate):
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::setLocation):
        (WebCore::JSDOMWindow::open):
        (WebCore::JSDOMWindow::addEventListener):
        (WebCore::JSDOMWindow::removeEventListener):
        * bindings/js/JSDeviceMotionEventCustom.cpp:
        (WebCore::JSDeviceMotionEvent::initDeviceMotionEvent):
        * bindings/js/JSDeviceOrientationEventCustom.cpp:
        (WebCore::JSDeviceOrientationEvent::initDeviceOrientationEvent):
        * bindings/js/JSDictionary.cpp:
        (WebCore::JSDictionary::convertValue):
        * bindings/js/JSDocumentCustom.cpp:
        (WebCore::JSDocument::setLocation):
        * bindings/js/JSEventListener.cpp:
        (WebCore::JSEventListener::handleEvent):
        * bindings/js/JSHTMLAllCollectionCustom.cpp:
        (WebCore::callHTMLAllCollection):
        (WebCore::JSHTMLAllCollection::item):
        (WebCore::JSHTMLAllCollection::namedItem):
        * bindings/js/JSHTMLCanvasElementCustom.cpp:
        (WebCore::JSHTMLCanvasElement::getContext):
        * bindings/js/JSHTMLCollectionCustom.cpp:
        (WebCore::JSHTMLCollection::item):
        (WebCore::JSHTMLCollection::namedItem):
        * bindings/js/JSHTMLDocumentCustom.cpp:
        (WebCore::documentWrite):
        * bindings/js/JSHTMLInputElementCustom.cpp:
        (WebCore::JSHTMLInputElement::setSelectionDirection):
        (WebCore::JSHTMLInputElement::setSelectionRange):
        * bindings/js/JSInspectorFrontendHostCustom.cpp:
        (WebCore::JSInspectorFrontendHost::showContextMenu):
        * bindings/js/JSJavaScriptCallFrameCustom.cpp:
        (WebCore::JSJavaScriptCallFrame::evaluate):
        * bindings/js/JSLocationCustom.cpp:
        (WebCore::JSLocation::setHref):
        (WebCore::JSLocation::setProtocol):
        (WebCore::JSLocation::setHost):
        (WebCore::JSLocation::setHostname):
        (WebCore::JSLocation::setPort):
        (WebCore::JSLocation::setPathname):
        (WebCore::JSLocation::setSearch):
        (WebCore::JSLocation::setHash):
        (WebCore::JSLocation::replace):
        (WebCore::JSLocation::assign):
        * bindings/js/JSMessageEventCustom.cpp:
        (WebCore::handleInitMessageEvent):
        * bindings/js/JSSQLTransactionCustom.cpp:
        (WebCore::JSSQLTransaction::executeSql):
        * bindings/js/JSSQLTransactionSyncCustom.cpp:
        (WebCore::JSSQLTransactionSync::executeSql):
        * bindings/js/JSSharedWorkerCustom.cpp:
        (WebCore::JSSharedWorkerConstructor::constructJSSharedWorker):
        * bindings/js/JSStorageCustom.cpp:
        (WebCore::JSStorage::putDelegate):
        * bindings/js/JSWebGLRenderingContextCustom.cpp:
        (WebCore::JSWebGLRenderingContext::getExtension):
        * bindings/js/JSWebSocketCustom.cpp:
        (WebCore::JSWebSocketConstructor::constructJSWebSocket):
        (WebCore::JSWebSocket::send):
        (WebCore::JSWebSocket::close):
        * bindings/js/JSWorkerContextCustom.cpp:
        (WebCore::JSWorkerContext::importScripts):
        * bindings/js/JSWorkerCustom.cpp:
        (WebCore::JSWorkerConstructor::constructJSWorker):
        * bindings/js/JSXMLHttpRequestCustom.cpp:
        (WebCore::JSXMLHttpRequest::open):
        (WebCore::JSXMLHttpRequest::send):
        * bindings/js/JSXSLTProcessorCustom.cpp:
        (WebCore::JSXSLTProcessor::setParameter):
        (WebCore::JSXSLTProcessor::getParameter):
        (WebCore::JSXSLTProcessor::removeParameter):
        * bindings/js/ScheduledAction.cpp:
        (WebCore::ScheduledAction::create):
        * bindings/js/ScriptEventListener.cpp:
        (WebCore::eventListenerHandlerBody):
        * bindings/js/ScriptValue.cpp:
        (WebCore::ScriptValue::toString):
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateEventListenerCall):
        (JSValueToNative):
        (GenerateConstructorDefinition):
        * bridge/c/c_utility.cpp:
        (JSC::Bindings::convertValueToNPVariant):
        * bridge/jni/jni_jsobject.mm:
        (JavaJSObject::convertValueToJObject):
        * bridge/jni/jsc/JNIUtilityPrivate.cpp:
        (JSC::Bindings::convertArrayInstanceToJavaArray):
        (JSC::Bindings::convertValueToJValue):
        * bridge/jni/jsc/JavaFieldJSC.cpp:
        (JavaField::dispatchValueFromInstance):
        (JavaField::valueFromInstance):
        (JavaField::dispatchSetValueToInstance):
        (JavaField::setValueToInstance):
        * bridge/jni/jsc/JavaInstanceJSC.cpp:
        (JavaInstance::invokeMethod):
        * testing/js/JSInternalsCustom.cpp:
        (WebCore::JSInternals::setUserPreferredLanguages):

2012-01-23  Kentaro Hara  <haraken@chromium.org>

        In CodeGeneratorObjC.pm, overwrite the output .h/.mm
        only if the bytes differ
        https://bugs.webkit.org/show_bug.cgi?id=76874

        Reviewed by Adam Barth.

        This is one of steps to stop rebuilding .h/.cpp/.mm files
        generated by unchanged IDLs (bug 76836).
        This patch makes a change on CodeGeneratorObjC.pm so that
        it overwrites the output .h/.mm only if the bytes differ.

        No tests. No change in behavior.
        I manually confirmed that when I add a new attribute to Element.idl,
        the time-stamps of unrelated DOM*.h and DOM*.mm do not change.

        * bindings/scripts/CodeGenerator.pm:
        (UpdateFileIfChanged): Added. This method writes data to a file
        only if the data is different from the data in the current file.
        * bindings/scripts/CodeGeneratorObjC.pm:
        (WriteData): Used UpdateFileIfChanged().

2012-01-23  Alexey Proskuryakov  <ap@apple.com>

        REGRESSION: Downloaded file name fallback encodings are not set correctly
        https://bugs.webkit.org/show_bug.cgi?id=76862

        Reviewed by Adam Barth.

        Tests: http/tests/download/default-encoding.html
               http/tests/download/form-submission-result.html
               http/tests/download/inherited-encoding.html
               http/tests/download/literal-utf-8.html

        * loader/DocumentWriter.cpp:
        * loader/DocumentWriter.h:
        Removed deprecatedFrameEncoding. Due to changes in Document::encoding behavior, it can now
        be used in its place.

        * loader/FrameLoader.cpp: (WebCore::FrameLoader::addExtraFieldsToRequest): Instead of hunting
        down a correct loader (and active one is not always correct any more), just use opening document's
        encoding.

2012-01-23  Ojan Vafai  <ojan@chromium.org>

        Implement flex-pack:distribute
        https://bugs.webkit.org/show_bug.cgi?id=76864

        Reviewed by Tony Chang.

        See http://dev.w3.org/csswg/css3-flexbox/#flex-pack.

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):
        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        (WebCore::CSSPrimitiveValue::operator EFlexPack):
        * css/CSSValueKeywords.in:
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::initialPackingOffset):
        (WebCore::packingSpaceBetweenChildren):
        (WebCore::RenderFlexibleBox::layoutAndPlaceChildren):
        (WebCore::RenderFlexibleBox::layoutColumnReverse):
        * rendering/style/RenderStyleConstants.h:
        * rendering/style/StyleFlexibleBoxData.h:

2012-01-23  Luke Macpherson   <macpherson@chromium.org>

        Implement CSS clip property in CSSStyleApplyProperty.
        https://bugs.webkit.org/show_bug.cgi?id=74913

        Reviewed by Andreas Kling.

        No new tests / refactoring only.

        * css/CSSPrimitiveValue.h:
        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::convertToLength):
        This new function aims to provide a single call for converting many CSSPrimitiveValue
        values to Lengths. It is templated to allow the caller to specify which conversions
        are appropriate depending on the context in which the value is used.
        * css/CSSStyleApplyProperty.cpp:
        (WebCore::ApplyPropertyClip::convertToLength):
        (WebCore::ApplyPropertyClip::applyInheritValue):
        (WebCore::ApplyPropertyClip::applyInitialValue):
        (WebCore::ApplyPropertyClip::applyValue):
        (WebCore::ApplyPropertyClip::createHandler):
        (WebCore::CSSStyleApplyProperty::CSSStyleApplyProperty):
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):

2012-01-23  Tom Sepez  <tsepez@chromium.org>

        decodeEscapeSequences() not correct for some encodings (GBK, Big5, ...).
        https://bugs.webkit.org/show_bug.cgi?id=71316

        Reviewed by Daniel Bates.

        Pass trailing unescaped bytes into the character set decoder to get correct
        results in the presence of encodings which re-use ASCII values in sequences.
        
        Tests: http/tests/navigation/anchor-frames-gbk.html
               http/tests/security/xssAuditor/iframe-onload-GBK-char.html
               http/tests/security/xssAuditor/img-onerror-GBK-char.html
               http/tests/security/xssAuditor/script-tag-Big5-char-twice-url-encode-16bit-unicode.html
               http/tests/security/xssAuditor/script-tag-Big5-char-twice-url-encode.html
               http/tests/security/xssAuditor/script-tag-Big5-char.html
               http/tests/security/xssAuditor/script-tag-Big5-char2.html

        * platform/text/DecodeEscapeSequences.h:
        (WebCore::Unicode16BitEscapeSequence::findInString):
        (WebCore::Unicode16BitEscapeSequence::findEndOfRun):
        (WebCore::Unicode16BitEscapeSequence::decodeRun):
        (WebCore::URLEscapeSequence::findInString):
        (WebCore::URLEscapeSequence::findEndOfRun):
        (WebCore::URLEscapeSequence::decodeRun):
        (WebCore::decodeEscapeSequences):

2012-01-23  Adam Barth  <abarth@webkit.org>

        Fix a build break in a clean compile of the Chromium port (at least
        reported by tbreisacher).

        * css/CSSStyleDeclaration.cpp:

2012-01-23  Zan Dobersek  <zandobersek@gmail.com>

        [GTK] editing/deleting/5408255.html results are incorrect
        https://bugs.webkit.org/show_bug.cgi?id=53644

        Reviewed by Martin Robinson.

        When the WEBKIT_TOP_LEVEL environment variable is set, resources
        should be loaded from the source tree to which the variable is
        pointing. This approach is used when performing testing on the
        Gtk port.

        No new tests, changes cause one test to pass.

        * platform/graphics/gtk/ImageGtk.cpp:
        (getPathToImageResource): Also make changes to the resource path
        construction code on Windows.
        (WebCore::Image::loadPlatformResource):

2012-01-23  Julien Chaffraix  <jchaffraix@webkit.org>

        Crash in WebCore::RenderTableSection::rowLogicalHeightChanged
        https://webkit.org/b/76842

        Reviewed by Darin Adler.

        Test: fast/table/crash-section-logical-height-changed-needsCellRecalc.html

        The issue was that we would access our section's structure when it was dirty.

        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::rowLogicalHeightChanged):
        Bail out if we need cells recalculation as our internal structure is not up-to-date
        and we will recompute all the rows' heights as part of the recomputation anyway.

2012-01-23  Kentaro Hara  <haraken@chromium.org>

        [Refactoring] Make finish() of CodeGeneratorJS.pm empty
        https://bugs.webkit.org/show_bug.cgi?id=76846

        Reviewed by Adam Barth.

        This is one of steps to stop rebuilding .h/.cpp files generated
        by unchanged IDLs (bug 76836).

        As a refactoring, we are planning to remove finish() from all
        CodeGenerators. In this bug, we make finish() of CodeGeneratorJS.pm
        empty.

        No new tests. No change in behavior.

        * bindings/scripts/CodeGeneratorJS.pm:
        (finish): Made it empty. We will remove finish() after
        making finish() of all CodeGenerators empty.
        (GenerateInterface): Modified to call WriteData().
        (WriteData): Simple code refactoring.
        Removed if(defined $IMPL).
        Removed if(defined $HEADER).
        Removed if(defined $DEPS).
        $IMPL -> IMPL.
        $HEADER -> HEADER.
        $DEPS -> DEPS.

2012-01-23  Shawn Singh  <shawnsingh@chromium.org>

        [chromium] updateRect is incorrect when contentBounds != bounds
        https://bugs.webkit.org/show_bug.cgi?id=72919

        Reviewed by James Robinson.

        Unit test added to TiledLayerChromiumTest.cpp

        The m_updateRect member in LayerChromium types is used to track
        what was painted for that layer. For tiled layers (especially
        image layers), the updateRect was being given with respect to the
        size of the content, rather than the size of the layer. This patch
        adds a conversion so that updateRect is always with respect to the
        layer size, so that damage tracking will work correctly in those
        cases.

        * platform/graphics/chromium/LayerChromium.h:
        * platform/graphics/chromium/TiledLayerChromium.cpp:
        (WebCore::TiledLayerChromium::updateCompositorResources):

2012-01-23  Konrad Piascik  <kpiascik@rim.com>

        Web Inspector: Make "Copy as HTML" use the same copy functions as other copy methods.
        https://bugs.webkit.org/show_bug.cgi?id=76706

        Reviewed by Pavel Feldman.

        Changed DOMAgent.copyNode to call getOuterHTML and use the callback function to
        return the text to InspectorFrontendHost.copyText.  This will make all copy
        functions use the same code path.

        Not testable.

        * inspector/Inspector.json:
        * inspector/InspectorDOMAgent.cpp:
        * inspector/InspectorDOMAgent.h:
        * inspector/front-end/DOMAgent.js:
        (WebInspector.DOMNode.prototype.copyNode.copy):
        (WebInspector.DOMNode.prototype.copyNode):

2012-01-23  Luke Macpherson   <macpherson@chromium.org>

        Make zoom multiplier float instead of double to match RenderStyle::effectiveZoom etc. and thus avoid unnecessary precision conversions.
        https://bugs.webkit.org/show_bug.cgi?id=69490

        Reviewed by Andreas Kling.

        Covered by existing tests.

        * css/CSSPrimitiveValue.cpp:
        (WebCore::CSSPrimitiveValue::computeLength):
        Use float multiplier instead of double.
        (WebCore::CSSPrimitiveValue::computeLengthDouble):
        Use float multiplier instead of double.
        * css/CSSPrimitiveValue.h:
        Change type signatures of computeLength template prototype.

2012-01-23  Priit Laes  <plaes@plaes.org>

        [GTK][PATCH] More build silencing with (AM_V_...)
        https://bugs.webkit.org/show_bug.cgi?id=76791

        Reviewed by Gustavo Noronha Silva.

        * GNUmakefile.am: Silence is golden...

2012-01-23  Arko Saha  <nghq36@motorola.com>

        MicroData: Remove ExceptionCode& from setAttribute() call.
        https://bugs.webkit.org/show_bug.cgi?id=76695

        Reviewed by Hajime Morita.

        Changeset http://trac.webkit.org/changeset/103296 removed unused
        ExceptionCode& argument from Element::setAttribute(QualifiedName).
        Hence updating all calls to setAttribute() method in MicroData code.

        * html/HTMLAnchorElement.cpp:
        (WebCore::HTMLAnchorElement::setItemValueText):
        * html/HTMLAreaElement.cpp:
        (WebCore::HTMLAreaElement::setItemValueText):
        * html/HTMLEmbedElement.cpp:
        (WebCore::HTMLEmbedElement::setItemValueText):
        * html/HTMLIFrameElement.cpp:
        (WebCore::HTMLIFrameElement::setItemValueText):
        * html/HTMLImageElement.cpp:
        (WebCore::HTMLImageElement::setItemValueText):
        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::setItemValueText):
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::setItemValueText):
        * html/HTMLMetaElement.cpp:
        (WebCore::HTMLMetaElement::setItemValueText):
        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::setItemValueText):
        * html/HTMLSourceElement.cpp:
        (WebCore::HTMLSourceElement::setItemValueText):
        * html/HTMLTrackElement.cpp:
        (WebCore::HTMLTrackElement::setItemValueText):

2012-01-23  Hayato Ito  <hayato@chromium.org>

        Fix crash when a focused node is removed while in processing focusin event.
        https://bugs.webkit.org/show_bug.cgi?id=76656

        Reviewed by Dimitri Glazkov.

        Test: fast/events/focus-remove-focuesed-node.html

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

2012-01-23  David Levin  <levin@chromium.org>

        [windows] Convert usages of GetDC to HWndDC Part 1.
        https://bugs.webkit.org/show_bug.cgi?id=76744

        Reviewed by Adam Roben.

        No new functionality so no new tests.

        * platform/graphics/win/FontCacheWin.cpp:
        (WebCore::FontCache::getFontDataForCharacters): Changed GetDC to HWndDC
        and removed ReleaseDC.
        (WebCore::createGDIFont): Ditto.
        (WebCore::FontCache::getTraitsInFamily): Ditto.
        * platform/graphics/win/FontPlatformDataWin.cpp:
        (WebCore::FontPlatformData::FontPlatformData): Ditto.
        * platform/graphics/win/SimpleFontDataCGWin.cpp:
        (WebCore::SimpleFontData::platformInit): Ditto.
        * platform/graphics/win/SimpleFontDataWin.cpp:
        (WebCore::SimpleFontData::initGDIFont): Ditto.
        (WebCore::SimpleFontData::containsCharacters): Ditto.
        (WebCore::SimpleFontData::determinePitch): Ditto.
        (WebCore::SimpleFontData::boundsForGDIGlyph): Ditto.
        (WebCore::SimpleFontData::widthForGDIGlyph): Ditto.
        (WebCore::SimpleFontData::scriptFontProperties): Ditto.
        * platform/win/CursorWin.cpp:
        (WebCore::createSharedCursor): Ditto.
        * platform/win/DragImageCGWin.cpp:
        (WebCore::scaleDragImage): Ditto.
        (WebCore::createDragImageFromImage): Ditto.
        * platform/win/DragImageWin.cpp:
        (WebCore::createDragImageForLink): Ditto.
        * platform/win/PasteboardWin.cpp:
        (WebCore::Pasteboard::writeImage): Ditto.

2012-01-23  Martin Robinson  <mrobinson@igalia.com>

        [GTK] Scrollbars do not respect the has-backward-stepper and has-forward-stepper properties
        https://bugs.webkit.org/show_bug.cgi?id=76747

        Reviewed by Gustavo Noronha Silva.

        No new tests. Regressions are covered by existing tests, but testing
        different GTK+ theme configurations is not possible yet.

        * platform/gtk/ScrollbarThemeGtk.cpp:
        (WebCore::ScrollbarThemeGtk::backButtonRect): If there is no back stepper, return an empty rect.
        (WebCore::ScrollbarThemeGtk::forwardButtonRect): If there is no forward stepper, return an empty rect.
        (WebCore::ScrollbarThemeGtk::trackRect): Adjust track rect calculation to account for when there is
        no steppers.
        * platform/gtk/ScrollbarThemeGtk.h: New members describing whether there are primary steppers.
        * platform/gtk/ScrollbarThemeGtk2.cpp:
        (WebCore::ScrollbarThemeGtk::updateThemeProperties): Look at the theme to determine if there
        are primary foward and back steppers.
        * platform/gtk/ScrollbarThemeGtk3.cpp:
        (WebCore::ScrollbarThemeGtk::updateThemeProperties): Ditto.

2012-01-23  Ryosuke Niwa  <rniwa@webkit.org>

        REGRESSION(r105396): drag state is not cleared after each drag
        https://bugs.webkit.org/show_bug.cgi?id=76878

        Reviewed by Alexey Proskuryakov.

        Revert a part of r105396 that made performDragAndDrop not call clearDragState
        when the default action was not prevented since it caused a regression.

        I'm pretty certain always calling clearDragState in performDragAndDrop is wrong
        but I can't think of a test case where this becomes a problem at the moment.
        Since this area is not well tested, revert the change instead of making further
        changes to the code base.

        Tests: fast/events/clear-drag-state.html
               fast/events/clear-edit-drag-state.html

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

2012-01-23  Thiago Marcos P. Santos  <tmpsantos@gmail.com>

        Fixed typo in exception messages
        https://bugs.webkit.org/show_bug.cgi?id=76710

        Reviewed by Alexey Proskuryakov.

        * dom/DOMCoreException.cpp:
        * fileapi/FileException.cpp:
        * storage/SQLTransaction.cpp:
        (WebCore::SQLTransaction::openTransactionAndPreflight):
        (WebCore::SQLTransaction::postflightAndCommit):
        * xml/XMLHttpRequestException.cpp:

2012-01-18  David Levin  <levin@chromium.org>

        Allow delayed DC allocation in HWndDC.
        https://bugs.webkit.org/show_bug.cgi?id=76737

        Reviewed by Adam Roben.

        No new functionality exposed so no new tests.

        * platform/win/HWndDC.h: Changed this slightly to allow
        for allocating a window DC after the initial creation since
        this pattern occurrs in several places so this makes it easy to
        replace them in an upcoming change.
        (WebCore::HWndDC::HWndDC):
        (WebCore::HWndDC::~HWndDC):
        (WebCore::HWndDC::setHWnd):
        (WebCore::HWndDC::clear):

2012-01-23  Arko Saha  <nghq36@motorola.com>

        MicroData: Compilation error while building Webkit with --microdata.
        https://bugs.webkit.org/show_bug.cgi?id=76703

        Reviewed by Hajime Morita.

        * dom/MicroDataItemList.cpp:
        (WebCore::MicroDataItemList::MicroDataItemList):
        (WebCore::MicroDataItemList::~MicroDataItemList):
        * dom/MicroDataItemList.h:
        * dom/NodeRareData.h:
        (WebCore::NodeRareData::properties):
        * html/HTMLPropertiesCollection.cpp:
        (WebCore::HTMLPropertiesCollection::create):
        (WebCore::HTMLPropertiesCollection::HTMLPropertiesCollection):
        * html/HTMLPropertiesCollection.h:

2012-01-13  David Levin  <levin@chromium.org>

        [chromium] Convert uses of GetDC to HWndDC.
        https://bugs.webkit.org/show_bug.cgi?id=76290

        Reviewed by Dmitry Titov.

        * platform/graphics/chromium/FontCacheChromiumWin.cpp:
        (WebCore::createFontIndirectAndGetWinName):
        (WebCore::fontContainsCharacter):
        (WebCore::FontCache::getLastResortFallbackFont):
        (WebCore::FontCache::getTraitsInFamily):
        * platform/graphics/chromium/FontPlatformDataChromiumWin.cpp:
        (WebCore::FontPlatformData::scriptFontProperties):
        * platform/graphics/chromium/FontUtilsChromiumWin.cpp:
        (WebCore::FontMap::getAscent):
        (WebCore::FontMap::getSpaceGlyph):
        * platform/graphics/chromium/GlyphPageTreeNodeChromiumWin.cpp:
        (WebCore::fillBMPGlyphs):
        * platform/graphics/chromium/SimpleFontDataChromiumWin.cpp:
        (WebCore::SimpleFontData::platformInit):
        (WebCore::SimpleFontData::determinePitch):
        (WebCore::SimpleFontData::platformWidthForGlyph):
        * platform/graphics/chromium/UniscribeHelper.cpp:
        (WebCore::UniscribeHelper::EnsureCachedDCCreated):
        * rendering/RenderThemeChromiumWin.cpp:
        (WebCore::systemFontSize):
        (WebCore::pointsToPixels):

2012-01-23  Joe Thomas  <joethomas@motorola.com>

        https://bugs.webkit.org/show_bug.cgi?id=75799
        Calling intersectsNode on a detached range should throw.

        INVALID_STATE_ERR exception should be thrown if intersectsNode is called on a detached Range.

        Reviewed by Darin Adler.

        Test: fast/dom/Range/range-intersectsNode-exception.html

        * dom/Range.cpp:
        (WebCore::Range::intersectsNode): Throwing INVALID_STATE_ERR exception if the range is detached.

2012-01-23  Daniel Cheng  <dcheng@chromium.org>

        Convert DataTransferItem/DataTransferItemList back into an interface class
        https://bugs.webkit.org/show_bug.cgi?id=76856

        When Qt implemented the DataTransferItemList, a lot of logic was moved into the shared
        classes since Chromium/Qt happened to implement it the same way. Now that I want to do some
        refactoring/cleanup work to better implement DataTransferItemList in Chromium, we won't
        share the same data anymore so it doesn't make sense to keep that code in a common location.

        Reviewed by David Levin.

        Covered by existing tests.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/DataTransferItem.cpp:
        * dom/DataTransferItem.h:
        * dom/DataTransferItemList.cpp: Removed.
        * dom/DataTransferItemList.h:
        * platform/chromium/ClipboardChromium.cpp:
        (WebCore::ClipboardChromium::mayUpdateItems):
        * platform/chromium/DataTransferItemChromium.cpp:
        (WebCore::DataTransferItemChromium::create):
        (WebCore::DataTransferItemChromium::DataTransferItemChromium):
        (WebCore::DataTransferItemChromium::getAsString):
        (WebCore::DataTransferItemChromium::getAsFile):
        (WebCore::DataTransferItemChromium::clipboardChromium):
        * platform/chromium/DataTransferItemChromium.h:
        (WebCore::DataTransferItemChromium::kind):
        (WebCore::DataTransferItemChromium::type):
        * platform/chromium/DataTransferItemListChromium.cpp:
        (WebCore::DataTransferItemListChromium::DataTransferItemListChromium):
        * platform/chromium/DataTransferItemListChromium.h:
        * platform/qt/DataTransferItemListQt.cpp:
        (WebCore::DataTransferItemListQt::DataTransferItemListQt):
        (WebCore::DataTransferItemListQt::length):
        (WebCore::DataTransferItemListQt::item):
        (WebCore::DataTransferItemListQt::deleteItem):
        (WebCore::DataTransferItemListQt::clear):
        (WebCore::DataTransferItemListQt::add):
        * platform/qt/DataTransferItemListQt.h:
        * platform/qt/DataTransferItemQt.cpp:
        (WebCore::DataTransferItemQt::create):
        (WebCore::DataTransferItemQt::DataTransferItemQt):
        (WebCore::DataTransferItemQt::getAsString):
        (WebCore::DataTransferItemQt::getAsFile):
        * platform/qt/DataTransferItemQt.h:
        (WebCore::DataTransferItemQt::kind):
        (WebCore::DataTransferItemQt::type):

2012-01-23  Andreas Kling  <awesomekling@apple.com>

        Unreviewed buildfix for ENABLE(MUTATION_OBSERVERS) following r105642.

        * css/CSSMutableStyleDeclaration.cpp:

2012-01-23  Philip Rogers  <pdr@google.com>

        Update uniteIfNonZero to use isZero.
        https://bugs.webkit.org/show_bug.cgi?id=76637

        Reviewed by Darin Adler.

        No new tests. (I found no existing codepath that would be affected by
        this change but I think this change is still valuable in preventing
        future bugs.)

        * platform/graphics/FloatRect.cpp:
        (WebCore::FloatRect::uniteIfNonZero):

        The following change is a minor followup to
        https://bugs.webkit.org/show_bug.cgi?id=76177#c12 and is not directly
        related to the rest of this patch.
        * rendering/svg/SVGRenderSupport.cpp:
        (WebCore::SVGRenderSupport::computeContainerBoundingBoxes):

2012-01-23  Antti Koivisto  <antti@apple.com>

        Eliminate CSSElementStyleDeclaration
        https://bugs.webkit.org/show_bug.cgi?id=76848

        Reviewed by Andreas Kling.

        CSSElementStyleDeclaration has little functionality. It can merge with CSSMutableStyleDeclaration simplifying the code.
        
        Having an element parent is mutually exclusive with having a css rule parent. We can keep them in a union. This also
        shrinks all inline style declarations by one pointer.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSDOMBinding.h:
        (WebCore::root):
        * css/CSSAllInOne.cpp:
        * css/CSSElementStyleDeclaration.cpp: Removed.
        * css/CSSElementStyleDeclaration.h: Removed.
        * css/CSSMutableStyleDeclaration.cpp:
        (WebCore::CSSMutableStyleDeclaration::setNeedsStyleRecalc):
        * css/CSSMutableStyleDeclaration.h:
        (WebCore::CSSMutableStyleDeclaration::createInline):
        (WebCore::CSSMutableStyleDeclaration::createForSVGFontFaceElement):
        (WebCore::CSSMutableStyleDeclaration::CSSMutableStyleDeclaration):
        * css/CSSStyleDeclaration.cpp:
        (WebCore::CSSStyleDeclaration::CSSStyleDeclaration):
        (WebCore::CSSStyleDeclaration::parentStyleSheet):
        
            Merge the CSSElementStyleDeclaration::styleSheet() logic here.
        
        * css/CSSStyleDeclaration.h:
        (WebCore::CSSStyleDeclaration::parentRule):
        (WebCore::CSSStyleDeclaration::clearParentRule):
        (WebCore::CSSStyleDeclaration::parentElement):
        (WebCore::CSSStyleDeclaration::clearParentElement):
        * css/CSSStyleRule.cpp:
        (WebCore::CSSStyleRule::setSelectorText):
        
            CSSStyleRule's style declaration can't have isElementStyleDeclaration set, the dead code can be removed.
            This is asserted in setDeclaration() and again implicitly in the destructor (by clearParentRule()).
        
        * dom/StyledElement.cpp:
        (WebCore::StyledElement::createInlineStyleDecl):
        (WebCore::StyledElement::destroyInlineStyleDecl):
        (WebCore::StyledElement::ensureInlineStyleDecl):
        (WebCore::StyledElement::copyNonAttributeProperties):
        * dom/StyledElement.h:
        (WebCore::StyledElement::inlineStyleDecl):
        * editing/ApplyStyleCommand.cpp:
        (WebCore::ApplyStyleCommand::applyRelativeFontStyleChange):
        (WebCore::ApplyStyleCommand::addInlineStyleIfNeeded):
        * editing/DeleteButtonController.cpp:
        (WebCore::DeleteButtonController::createDeletionUI):
        * html/ValidationMessage.cpp:
        (WebCore::adjustBubblePosition):
        * html/shadow/MediaControlElements.cpp:
        (WebCore::MediaControlPanelElement::setPosition):
        (WebCore::MediaControlPanelElement::resetPosition):
        (WebCore::MediaControlPanelElement::makeOpaque):
        (WebCore::MediaControlPanelElement::makeTransparent):
        * html/shadow/SliderThumbElement.cpp:
        (WebCore::TrackLimiterElement::create):
        * svg/SVGFontFaceElement.cpp:
        (WebCore::SVGFontFaceElement::SVGFontFaceElement):

2012-01-23  Benjamin Poulain  <bpoulain@apple.com>

        Use OVERRIDE for PopupMenuClient's implementations
        https://bugs.webkit.org/show_bug.cgi?id=76774

        Reviewed by Darin Adler.

        * rendering/RenderMenuList.h: Also sort the methods to the same
        order as PopupMenuClient.
        * rendering/RenderTextControlSingleLine.h:

2012-01-23  Xianzhu Wang  <wangxianzhu@chromium.org>

        Basic enhancements to StringBuilder
        https://bugs.webkit.org/show_bug.cgi?id=67081

        These changes are because we explicitly disallowed StringBuilder's
        copy constructor and assignment operator, and the change of return
        type of StringBuilder::toString().

        Reviewed by Darin Adler.

        No new tests. All layout tests and unit tests should run as before.

        * platform/graphics/win/MediaPlayerPrivateQuickTimeVisualContext.cpp:
        (WebCore::MediaPlayerPrivateQuickTimeVisualContext::setUpCookiesForQuickTime):
        * svg/SVGPathStringBuilder.h:
        (WebCore::SVGPathStringBuilder::cleanup):

2012-01-23  W. James MacLean  <wjmaclean@chromium.org>

        [chromium] Add WebSolidColorLayer interface to draw non-textured color layers from Aura.
        https://bugs.webkit.org/show_bug.cgi?id=75732

        Reviewed by James Robinson.

        Add WebSolidColorLayer to paint solid-color layers without a backing texture.

        Test: unit test for CCSolidColorLayerImpl.

        * WebCore.gypi:
        * platform/graphics/chromium/SolidColorLayerChromium.cpp: Added.
        (WebCore::SolidColorLayerChromium::createCCLayerImpl):
        (WebCore::SolidColorLayerChromium::create):
        (WebCore::SolidColorLayerChromium::SolidColorLayerChromium):
        (WebCore::SolidColorLayerChromium::~SolidColorLayerChromium):
        * platform/graphics/chromium/SolidColorLayerChromium.h: Added.
        * platform/graphics/chromium/cc/CCSolidColorLayerImpl.cpp: Added.
        (WebCore::CCSolidColorLayerImpl::CCSolidColorLayerImpl):
        (WebCore::CCSolidColorLayerImpl::~CCSolidColorLayerImpl):
        (WebCore::CCSolidColorLayerImpl::quadTransform):
        (WebCore::CCSolidColorLayerImpl::appendQuads):
        * platform/graphics/chromium/cc/CCSolidColorLayerImpl.h: Added.
        (WebCore::CCSolidColorLayerImpl::create):
        (WebCore::CCSolidColorLayerImpl::layerTypeAsString):

2012-01-23  Antti Koivisto  <antti@apple.com>

        Attempt to fix Qt build.
    
        Not reviewed.

        * css/CSSElementStyleDeclaration.cpp:
        * css/CSSElementStyleDeclaration.h:
        (WebCore::CSSElementStyleDeclaration::createForSVGFontFaceElement):

2012-01-23  Andreas Kling  <awesomekling@apple.com>

        Move m_rootEditableElementForSelectionOnMouseDown off of HTMLAnchorElement.
        <http://webkit.org/b/76833>

        Reviewed by Antti Koivisto.

        Move HTMLAnchorElement::m_rootEditableElementForSelectionOnMouseDown to a rare
        data-style hashmap, effectively shrinking HTMLAnchorElement by one CPU word.

        The pointer is only used during interactive event handling, so it shouldn't have
        any noticeable effects on web performance.

        This reduces memory consumption by 256 kB (on 64-bit) when viewing the full
        HTML5 spec at <http://whatwg.org/c>.

        * html/HTMLAnchorElement.cpp:
        (WebCore::HTMLAnchorElement::HTMLAnchorElement):
        (WebCore::HTMLAnchorElement::~HTMLAnchorElement):
        (WebCore::HTMLAnchorElement::defaultEventHandler):
        (WebCore::HTMLAnchorElement::treatLinkAsLiveForEventType):
        (WebCore::rootEditableElementMap):
        (WebCore::HTMLAnchorElement::rootEditableElementForSelectionOnMouseDown):
        (WebCore::HTMLAnchorElement::setRootEditableElementForSelectionOnMouseDown):
        * html/HTMLAnchorElement.h:

2012-01-23  Antti Koivisto  <antti@apple.com>

        Eliminate CSSElementStyleDeclaration subclasses
        https://bugs.webkit.org/show_bug.cgi?id=76827

        Reviewed by Andreas Kling.

        CSSInlineStyleDeclaration and FontFaceStyleDeclaration serve no real purpose.

        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSElementStyleDeclaration.cpp:
        (WebCore::CSSElementStyleDeclaration::createForSVGFontFaceElement):
        (WebCore::CSSElementStyleDeclaration::styleSheet):
        * css/CSSElementStyleDeclaration.h:
        (WebCore::CSSElementStyleDeclaration::createInline):
        (WebCore::toCSSElementStyleDeclaration):
        * css/CSSInlineStyleDeclaration.h: Removed.
        * css/CSSMutableStyleDeclaration.cpp:
        * dom/StyledElement.cpp:
        (WebCore::StyledElement::createInlineStyleDecl):
        (WebCore::StyledElement::ensureInlineStyleDecl):
        (WebCore::StyledElement::copyNonAttributeProperties):
        * dom/StyledElement.h:
        (WebCore::StyledElement::inlineStyleDecl):
        * editing/ApplyStyleCommand.cpp:
        (WebCore::ApplyStyleCommand::applyRelativeFontStyleChange):
        (WebCore::ApplyStyleCommand::addInlineStyleIfNeeded):
        * editing/DeleteButtonController.cpp:
        (WebCore::DeleteButtonController::createDeletionUI):
        * html/ValidationMessage.cpp:
        (WebCore::adjustBubblePosition):
        * html/shadow/MediaControlElements.cpp:
        (WebCore::MediaControlPanelElement::setPosition):
        (WebCore::MediaControlPanelElement::resetPosition):
        (WebCore::MediaControlPanelElement::makeOpaque):
        (WebCore::MediaControlPanelElement::makeTransparent):
        * html/shadow/SliderThumbElement.cpp:
        (WebCore::TrackLimiterElement::create):
        * svg/SVGFontFaceElement.cpp:
        (WebCore::SVGFontFaceElement::SVGFontFaceElement):

2012-01-23  Pavel Feldman  <pfeldman@google.com>

        Not reviewed: annotate inspector's js so that it compiled.

        * inspector/front-end/ElementsTreeOutline.js:
        * inspector/front-end/TextPrompt.js:
        (WebInspector.TextPrompt.SuggestBox.prototype.upKeyPressed):
        (WebInspector.TextPrompt.SuggestBox.prototype.downKeyPressed):

2012-01-23  Philippe Normand  <pnormand@igalia.com>

        [GStreamer] fix WebAudio build after r105431
        https://bugs.webkit.org/show_bug.cgi?id=76819

        Reviewed by Martin Robinson.

        * platform/audio/gstreamer/AudioFileReaderGStreamer.cpp:
        (WebCore::copyGstreamerBuffersToAudioChannel): Use mutableData()
        when copying.
        * platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.cpp:
        (webKitWebAudioSrcLoop): Drop constness when setting the buffer
        data pointer.

2012-01-23  Pavel Feldman  <pfeldman@google.com>

        Web Inspector: add touch events to the event listeners list.
        https://bugs.webkit.org/show_bug.cgi?id=76830

        Reviewed by Yury Semikhatsky.

        * English.lproj/localizedStrings.js:
        * inspector/InjectedScriptSource.js:
        (.):
        * inspector/front-end/BreakpointsSidebarPane.js:
        (WebInspector.EventListenerBreakpointsSidebarPane):

2012-01-23  Pavel Feldman  <pfeldman@google.com>

        Web Inspector: inspector close button is missing in the dock-to-right mode.
        https://bugs.webkit.org/show_bug.cgi?id=76829

        Reviewed by Timothy Hatcher.

        * inspector/front-end/inspector.js:
        (WebInspector.set attached):
        (WebInspector.get _setCompactMode):

2012-01-23  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: IndexedDBModel should keep track of requests sent to the backend.
        https://bugs.webkit.org/show_bug.cgi?id=76705

        Reviewed by Pavel Feldman.

        * inspector/Inspector.json:
        * inspector/InspectorIndexedDBAgent.cpp:
        (WebCore::InspectorIndexedDBAgent::requestDatabaseNamesForFrame):
        * inspector/InspectorIndexedDBAgent.h:
        * inspector/front-end/IndexedDBModel.js:
        (WebInspector.IndexedDBModel):
        (WebInspector.IndexedDBModel.prototype._frameDetached):
        (WebInspector.IndexedDBModel.prototype._reset):
        (WebInspector.IndexedDBModel.prototype._loadDatabaseNamesForFrame):
        (WebInspector.IndexedDBRequestManager):
        (WebInspector.IndexedDBRequestManager.prototype.requestDatabaseNamesForFrame.innerCallback):
        (WebInspector.IndexedDBRequestManager.prototype.requestDatabaseNamesForFrame):
        (WebInspector.IndexedDBRequestManager.prototype._databaseNamesLoaded):
        (WebInspector.IndexedDBRequestManager.prototype._requestId):
        (WebInspector.IndexedDBRequestManager.prototype._frameDetached):
        (WebInspector.IndexedDBRequestManager.prototype._reset):
        (WebInspector.IndexedDBRequestManager.DatabasesForFrameRequest):
        (WebInspector.IndexedDBDispatcher):
        (WebInspector.IndexedDBDispatcher.prototype.databaseNamesLoaded):

2012-01-23  Pavel Feldman  <pfeldman@google.com>

        Web Inspector: Inspecting an element inside an iframe no longer works
        https://bugs.webkit.org/show_bug.cgi?id=76808

        Reviewed by Timothy Hatcher.

        Test: http/tests/inspector/inspect-element.html

        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::innerParentNode):
        * inspector/front-end/DOMAgent.js:
        (WebInspector.DOMNode.prototype.getChildNodes.mycallback):
        (WebInspector.DOMNode.prototype.getChildNodes):
        (WebInspector.DOMNode.prototype._setChildrenPayload):
        * inspector/front-end/ElementsTreeOutline.js:
        (WebInspector.ElementsTreeOutline.prototype._selectedNodeChanged):

2012-01-23  Andrey Kosyakov  <caseq@chromium.org>

        Web Inspector: response.bodySize in HAR is invalid (negative) for cached resources
        https://bugs.webkit.org/show_bug.cgi?id=76823

        Reviewed by Yury Semikhatsky.

        - fix response.bodySize for cached resources;
        Also some drive-by fixes:
        - pretty-print HAR when exported
        - proper annotation for JSON.stringify()
        - de-obfuscate a piece of code in TimelinePanel

        * inspector/front-end/HAREntry.js:
        (WebInspector.HAREntry.prototype.get responseBodySize):
        * inspector/front-end/NetworkPanel.js:
        (WebInspector.NetworkLogView.prototype._exportAll):
        (WebInspector.NetworkLogView.prototype._exportResource):

2012-01-23  Mario Sanchez Prada  <msanchez@igalia.com>

        [GTK] Refactor GTK's accessibilitity code to be more modular
        https://bugs.webkit.org/show_bug.cgi?id=76783

        Reviewed by Martin Robinson.

        New files for the implementation of the AtkAction interface,
        containing the related code from WebKitAccessibleWrapperAtk.cpp.

        * accessibility/gtk/WebKitAccessibleInterfaceAction.cpp: Added.
        (core):
        (webkitAccessibleActionInterfaceInit):
        (webkitAccessibleActionDoAction):
        (webkitAccessibleActionGetNActions):
        (webkitAccessibleActionGetDescription):
        (webkitAccessibleActionGetKeybinding):
        (webkitAccessibleActionGetName):
        * accessibility/gtk/WebKitAccessibleInterfaceAction.h: Added.

        * accessibility/gtk/WebKitAccessibleWrapperAtk.cpp: Remove code
        related to the implementation of the AtkAction interface.

        Add new files to build files.

        * GNUmakefile.list.am: Add WebKitAccessibleInterfaceAction.[h|cpp].
        * WebCore.gypi: Ditto.

2012-01-23  Nikolas Zimmermann  <nzimmermann@rim.com>

        SVG animation repaint issue with image and dynamic clipPath
        https://bugs.webkit.org/show_bug.cgi?id=76559

        Reviewed by Zoltan Herczeg.

        Based on patch by Kelly Norton <knorton@google.com>. I extended the patch
        to correctly handle relative length resolution as well.

        RenderSVGImage doesn't react on setNeedsBoundariesUpdate() calls
        and thus fails to update its boundaries in some cases.

        The logic is also inconsistent, compared to the other renderers.
        Fix that properly, by reusing the method used in RenderSVGViewportContainer.
        Call calculateImageViewport() immediately, after initializing the LayoutRepainter.
        Previously we resolved the image viewport in RenderSVGImage::updateFromElement. This is
        wrong, as it queries the frameRect() of the RenderSVGRoot in a state, where the renderer
        still needs layout, leading to wrong results.

        I turned Kellys manual testcase into a predictable test, see svg/repaint/image-with-clip-path.svg
        Relative sized image handling is tested in svg/custom/relative-sized-image.xhtml now.

        Tests: svg/custom/relative-sized-image.xhtml
               svg/repaint/image-with-clip-path.svg

        * rendering/svg/RenderSVGImage.cpp:
        (WebCore::RenderSVGImage::RenderSVGImage):
        (WebCore::RenderSVGImage::updateImageViewport):
        (WebCore::RenderSVGImage::layout):
        * rendering/svg/RenderSVGImage.h:
        (WebCore::RenderSVGImage::setNeedsBoundariesUpdate):
        * svg/SVGImageElement.cpp:
        (WebCore::SVGImageElement::svgAttributeChanged):

2012-01-23  Nikolas Zimmermann  <nzimmermann@rim.com>

        <feImage> has problems referencing local elements
        https://bugs.webkit.org/show_bug.cgi?id=76800

        Reviewed by Zoltan Herczeg.

        <feImage> referencing local elements are currently rendered into an ImageBuffer
        by SVGFEImageElement, using the local coordinates of the referenced renderer.

        This approach is buggy and should be avoided, by moving the rendering fully
        into SVGFEImage, which takes care of respecting the correct transformations.

        This fixes <feImage> + local references, which currently breaks two tests in trunk.
        Covered by existing tests.

        * rendering/svg/RenderSVGResourceFilterPrimitive.cpp:
        (WebCore::RenderSVGResourceFilterPrimitive::determineFilterPrimitiveSubregion):
        * svg/SVGFEImageElement.cpp:
        (WebCore::SVGFEImageElement::build):
        * svg/graphics/filters/SVGFEImage.cpp:
        (WebCore::FEImage::FEImage):
        (WebCore::FEImage::createWithImage):
        (WebCore::FEImage::createWithIRIReference):
        (WebCore::FEImage::determineAbsolutePaintRect):
        (WebCore::FEImage::referencedRenderer):
        (WebCore::FEImage::platformApplySoftware):
        (WebCore::FEImage::externalRepresentation):
        * svg/graphics/filters/SVGFEImage.h:
        (WebCore::FEImage::~FEImage):
        * svg/graphics/filters/SVGFilter.h:
        (WebCore::SVGFilter::absoluteTransform):

2012-01-23  Nikolas Zimmermann  <nzimmermann@rim.com>

        Not reviewed. Fix Mac build, by exporting a new symbol.

        * WebCore.exp.in:

2012-01-23  Mario Sanchez Prada  <msanchez@igalia.com>

        [GTK] Refactor GTK's accessibilitity code to be more modular
        https://bugs.webkit.org/show_bug.cgi?id=76783

        Reviewed by Martin Robinson.

        Move common function returnString() from the wrapper and
        hyperlink implementations to a new utility file.

        * accessibility/gtk/WebKitAccessibleUtil.cpp: Added.
        (returnString): Taken from WebKitAccessibleWrapperAtk.cpp and
        WebKitAccessibleHyperlink.cpp
        * accessibility/gtk/WebKitAccessibleUtil.h: Added.

        * accessibility/gtk/WebKitAccessibleHyperlink.cpp: Remove local
        implementation of returnString.
        * accessibility/gtk/WebKitAccessibleWrapperAtk.cpp: Ditto.

        Add new files to build files.

        * GNUmakefile.list.am: Add WebKitAccessibleUtil.[h|cpp].
        * WebCore.gypi: Ditto.

2012-01-23  Mario Sanchez Prada  <msanchez@igalia.com>

        [GTK] Refactor GTK's accessibilitity code to be more modular
        https://bugs.webkit.org/show_bug.cgi?id=76783

        Reviewed by Martin Robinson.

        Fix typo in class struct (parent class field had the wrong type),
        fix coding style issues and update date in headers.

        * accessibility/gtk/WebKitAccessibleHyperlink.cpp:
        * accessibility/gtk/WebKitAccessibleHyperlink.h:

2012-01-23  Mario Sanchez Prada  <msanchez@igalia.com>

        [GTK] Refactor GTK's accessibilitity code to be more modular
        https://bugs.webkit.org/show_bug.cgi?id=76783

        Reviewed by Martin Robinson.

        Rename WebKitAccessible's public functions to follow WebKit's
        coding style and update callers.

        * accessibility/gtk/WebKitAccessibleWrapperAtk.cpp:
        (webkitAccessibleNew): Renamed from webkit_accessible_new.
        (webkitAccessibleGetAccessibilityObject): Likewise.
        (webkitAccessibleDetach):Likewise.
        (webkitAccessibleGetFocusedElement): Likewise.
        * accessibility/gtk/WebKitAccessibleWrapperAtk.h:

        Update calls to WebKitAccessible's public functions.

        * accessibility/gtk/AXObjectCacheAtk.cpp:
        (WebCore::AXObjectCache::detachWrapper): Update call.
        (WebCore::AXObjectCache::attachWrapper): Ditto.
        * accessibility/gtk/WebKitAccessibleHyperlink.cpp:
        (core): Update call.

2012-01-19  Kenichi Ishibashi  <bashi@chromium.org>

        WebKit fails IETC composition event types
        https://bugs.webkit.org/show_bug.cgi?id=76690

        Reviewed by Ryosuke Niwa.

        Dispatches at least one compositionupdate event.
        The spec(*) says that a composition session includes one or more
        compositionupdate event(s).
        Other major browsers (Firefox and IE) don't populate the data attribute
        of the compositionstart event, but we set the given text in the data
        attribute to minimize the effect of this change.

        (*) http://dev.w3.org/2006/webapi/DOM-Level-3-Events/html/DOM3-Events.html#events-compositionevents

        Updated existing test: fast/fast/events/ime-composition-events-001.html.

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

2012-01-22  Mario Sanchez Prada  <msanchez@igalia.com>

        [GTK] Refactor GTK's accessibilitity code to be more modular
        https://bugs.webkit.org/show_bug.cgi?id=76783

        Reviewed by Martin Robinson.

        Rename the file for the ATK AccessibilityObject wrapper to be more
        coherent with the rest of the files in the same directory.

        * accessibility/gtk/WebKitAccessibleWrapperAtk.cpp: Renamed from
        Source/WebCore/accessibility/gtk/AccessibilityObjectWrapperAtk.cpp.
        (fallbackObject):
        (returnString):
        (core):
        (webkit_accessible_get_name):
        (webkit_accessible_get_description):
        (setAtkRelationSetFromCoreObject):
        (isRootObject):
        (atkParentOfRootObject):
        (webkit_accessible_get_parent):
        (getNChildrenForTable):
        (webkit_accessible_get_n_children):
        (getChildForTable):
        (webkit_accessible_ref_child):
        (getIndexInParentForCellInRow):
        (webkit_accessible_get_index_in_parent):
        (addAttributeToSet):
        (webkit_accessible_get_attributes):
        (atkRole):
        (webkit_accessible_get_role):
        (selectionBelongsToObject):
        (isTextWithCaret):
        (setAtkStateSetFromCoreObject):
        (webkit_accessible_ref_state_set):
        (webkit_accessible_ref_relation_set):
        (webkit_accessible_init):
        (webkit_accessible_finalize):
        (webkit_accessible_class_init):
        (webkit_accessible_get_type):
        (webkit_accessible_action_do_action):
        (webkit_accessible_action_get_n_actions):
        (webkit_accessible_action_get_description):
        (webkit_accessible_action_get_keybinding):
        (webkit_accessible_action_get_name):
        (atk_action_interface_init):
        (listObjectForSelection):
        (optionFromList):
        (optionFromSelection):
        (webkit_accessible_selection_add_selection):
        (webkit_accessible_selection_clear_selection):
        (webkit_accessible_selection_ref_selection):
        (webkit_accessible_selection_get_selection_count):
        (webkit_accessible_selection_is_child_selected):
        (webkit_accessible_selection_remove_selection):
        (webkit_accessible_selection_select_all_selection):
        (atk_selection_interface_init):
        (utf8Substr):
        (convertUniCharToUTF8):
        (textForRenderer):
        (textForObject):
        (webkit_accessible_text_get_text):
        (getGailTextUtilForAtk):
        (getPangoLayoutForAtk):
        (webkit_accessible_text_get_text_after_offset):
        (webkit_accessible_text_get_text_at_offset):
        (webkit_accessible_text_get_text_before_offset):
        (webkit_accessible_text_get_character_at_offset):
        (webkit_accessible_text_get_caret_offset):
        (baselinePositionForRenderObject):
        (getAttributeSetForAccessibilityObject):
        (compareAttribute):
        (attributeSetDifference):
        (accessibilityObjectLength):
        (getAccessibilityObjectForOffset):
        (getRunAttributesFromAccesibilityObject):
        (webkit_accessible_text_get_run_attributes):
        (webkit_accessible_text_get_default_attributes):
        (textExtents):
        (webkit_accessible_text_get_character_extents):
        (webkit_accessible_text_get_range_extents):
        (webkit_accessible_text_get_character_count):
        (webkit_accessible_text_get_offset_at_point):
        (getSelectionOffsetsForObject):
        (webkit_accessible_text_get_n_selections):
        (webkit_accessible_text_get_selection):
        (webkit_accessible_text_add_selection):
        (webkit_accessible_text_set_selection):
        (webkit_accessible_text_remove_selection):
        (webkit_accessible_text_set_caret_offset):
        (atk_text_interface_init):
        (webkit_accessible_editable_text_set_run_attributes):
        (webkit_accessible_editable_text_set_text_contents):
        (webkit_accessible_editable_text_insert_text):
        (webkit_accessible_editable_text_copy_text):
        (webkit_accessible_editable_text_cut_text):
        (webkit_accessible_editable_text_delete_text):
        (webkit_accessible_editable_text_paste_text):
        (atk_editable_text_interface_init):
        (contentsToAtk):
        (atkToContents):
        (webkit_accessible_component_ref_accessible_at_point):
        (webkit_accessible_component_get_extents):
        (webkit_accessible_component_grab_focus):
        (atk_component_interface_init):
        (webkit_accessible_image_get_image_position):
        (webkit_accessible_image_get_image_description):
        (webkit_accessible_image_get_image_size):
        (atk_image_interface_init):
        (cell):
        (cellIndex):
        (cellAtIndex):
        (webkit_accessible_table_ref_at):
        (webkit_accessible_table_get_index_at):
        (webkit_accessible_table_get_column_at_index):
        (webkit_accessible_table_get_row_at_index):
        (webkit_accessible_table_get_n_columns):
        (webkit_accessible_table_get_n_rows):
        (webkit_accessible_table_get_column_extent_at):
        (webkit_accessible_table_get_row_extent_at):
        (webkit_accessible_table_get_column_header):
        (webkit_accessible_table_get_row_header):
        (webkit_accessible_table_get_caption):
        (webkit_accessible_table_get_column_description):
        (webkit_accessible_table_get_row_description):
        (atk_table_interface_init):
        (webkitAccessibleHypertextGetLink):
        (webkitAccessibleHypertextGetNLinks):
        (webkitAccessibleHypertextGetLinkIndex):
        (atkHypertextInterfaceInit):
        (webkitAccessibleHyperlinkImplGetHyperlink):
        (atkHyperlinkImplInterfaceInit):
        (documentAttributeValue):
        (webkit_accessible_document_get_attribute_value):
        (webkit_accessible_document_get_attributes):
        (webkit_accessible_document_get_locale):
        (atk_document_interface_init):
        (webkitAccessibleValueGetCurrentValue):
        (webkitAccessibleValueGetMaximumValue):
        (webkitAccessibleValueGetMinimumValue):
        (webkitAccessibleValueSetCurrentValue):
        (webkitAccessibleValueGetMinimumIncrement):
        (atkValueInterfaceInit):
        (GetAtkInterfaceTypeFromWAIType):
        (getInterfaceMaskFromObject):
        (getUniqueAccessibilityTypeName):
        (getAccessibilityTypeFromObject):
        (webkit_accessible_new):
        (webkit_accessible_get_accessibility_object):
        (webkit_accessible_detach):
        (webkit_accessible_get_focused_element):
        (objectFocusedAndCaretOffsetUnignored):
        * accessibility/gtk/WebKitAccessibleWrapperAtk.h: Renamed from
        Source/WebCore/accessibility/gtk/AccessibilityObjectWrapperAtk.h.

        Update the include for the AccessibilityObject wrapper header.

        * accessibility/gtk/AXObjectCacheAtk.cpp: Update include.
        * accessibility/gtk/WebKitAccessibleHyperlink.cpp: Ditto.
        * accessibility/gtk/WebKitAccessibleHyperlink.h: Ditto.
        * editing/gtk/FrameSelectionGtk.cpp:

        Update filename for the ATK wrapper in build files.

        * GNUmakefile.list.am: Updated.
        * WebCore.gypi: Updated.

2012-01-20  Pavel Feldman  <pfeldman@google.com>

        Web Inspector: PageAgent.open() dosen't belong to the protocol.
        https://bugs.webkit.org/show_bug.cgi?id=74790

        Reviewed by Yury Semikhatsky.

        * inspector/Inspector.json:
        * inspector/InspectorFrontendClient.h:
        * inspector/InspectorFrontendClientLocal.cpp:
        (WebCore::InspectorFrontendClientLocal::openInNewTab):
        * inspector/InspectorFrontendClientLocal.h:
        * inspector/InspectorFrontendHost.cpp:
        (WebCore::InspectorFrontendHost::openInNewTab):
        * inspector/InspectorFrontendHost.h:
        * inspector/InspectorFrontendHost.idl:
        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::navigate):
        * inspector/InspectorPageAgent.h:
        * inspector/front-end/ImageView.js:
        (WebInspector.ImageView.prototype._openInNewTab):
        * inspector/front-end/InspectorFrontendHostStub.js:
        (.WebInspector.InspectorFrontendHostStub.prototype.openInNewTab):
        * inspector/front-end/NetworkPanel.js:
        (WebInspector.NetworkDataGridNode.prototype._openInNewTab):
        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.FrameResourceTreeElement.prototype.ondblclick):
        * inspector/front-end/inspector.js:
        (WebInspector.openResource):

2012-01-23  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: DetailedHeapSnapshot: Replace the list of retainers with the expandable tree (to get rid of cycles)
        https://bugs.webkit.org/show_bug.cgi?id=76813

        Reviewed by Pavel Feldman.

        * English.lproj/localizedStrings.js:
        * inspector/front-end/DetailedHeapshotGridNodes.js:
        (WebInspector.HeapSnapshotObjectNode):
        * inspector/front-end/DetailedHeapshotView.js:
        (WebInspector.HeapSnapshotContainmentDataGrid.prototype.setDataSource):
        (WebInspector.HeapSnapshotRetainmentDataGrid):
        (WebInspector.HeapSnapshotRetainmentDataGrid.prototype.reset):
        (WebInspector.DetailedHeapshotView.prototype._startRetainersHeaderDragging):
        * inspector/front-end/HeapSnapshot.js:
        (WebInspector.HeapSnapshot.prototype.createRetainingEdgesProvider):
        (WebInspector.HeapSnapshotEdgesProvider):
        * inspector/front-end/HeapSnapshotProxy.js:
        (WebInspector.HeapSnapshotProxy.prototype.createEdgesProvider):
        (WebInspector.HeapSnapshotProxy.prototype.createRetainingEdgesProvider):

2012-01-20  Andrey Kosyakov  <caseq@chromium.org>

        Web Inspector: HAR pageref attributes are wrong and inconsistent with pages array
        https://bugs.webkit.org/show_bug.cgi?id=76398

        Reviewed by Pavel Feldman.

        - introduce a notion of LoadPage;
        - move page load times to LoadPage;
        - associate network resources with LoadPage;
        - export pages for all available resoruces to HAR, not just the last page;
        - use page ids, not document URLs in HAR entries to refer to pages;
        - use page URL as a title field of a HAR page;

        * inspector/front-end/AuditsPanel.js:
        (WebInspector.AuditsPanel):
        * inspector/front-end/HAREntry.js:
        (WebInspector.HAREntry.prototype.build):
        (WebInspector.HAREntry.prototype.get responseCompression):
        (WebInspector.HARLog.prototype._buildPages):
        (WebInspector.HARLog.prototype._convertPage):
        (WebInspector.HARLog.prototype._pageEventTime):
        * inspector/front-end/NetworkLog.js:
        (WebInspector.NetworkLog):
        (WebInspector.NetworkLog.prototype._mainFrameNavigated):
        (WebInspector.NetworkLog.prototype._onResourceStarted):
        (WebInspector.Page):
        (WebInspector.Page.prototype.get id):
        (WebInspector.Page.prototype.get url):
        (WebInspector.Page.prototype.get contentLoadTime):
        (WebInspector.Page.prototype.set contentLoadTime):
        (WebInspector.Page.prototype.get loadTime):
        (WebInspector.Page.prototype.set loadTime):
        (WebInspector.Page.prototype.get startTime):
        (WebInspector.Page.prototype._bindResource):
        * inspector/front-end/NetworkManager.js:
        (WebInspector.NetworkDispatcher.prototype.requestServedFromMemoryCache):
        * inspector/front-end/Resource.js:
        (WebInspector.Resource.prototype.get page):
        (WebInspector.Resource.prototype.set page):
        * inspector/front-end/ResourceTreeModel.js:
        (WebInspector.ResourceTreeFrame):
        (WebInspector.ResourceTreeFrame.prototype.get page):
        (WebInspector.PageDispatcher.prototype.domContentEventFired):
        (WebInspector.PageDispatcher.prototype.loadEventFired):

2012-01-22  Mario Sanchez Prada  <msanchez@igalia.com>

        [GTK] ATK text-caret-moved and text-selection-changed events not being emitted
        https://bugs.webkit.org/show_bug.cgi?id=76069

        Reviewed by Martin Robinson.

        Fix bug introduced with patch for Bug 72830.

        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::isDescendantOfObject): New function,
        to check if an accessibility object is a descendant of other object.
        (WebCore::AccessibilityObject::isAncestorOfObject): New function,
        to check if an accessibility object is an ancestor of other object.
        * accessibility/AccessibilityObject.h:

        * accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:
        (webkit_accessible_text_get_caret_offset): Make sure to pass the
        right reference object to objectFocusedAndCaretOffsetUnignored.
        (objectFocusedAndCaretOffsetUnignored): Use positionBeforeNode
        instead of firstPositionInNode for calculating the begining of the
        range used to calculate the offsets. Ensure that the reference
        object is never a descendant of the actual object being returned.

        * editing/gtk/FrameSelectionGtk.cpp:
        (WebCore::FrameSelection::notifyAccessibilityForSelectionChange):
        Pass the right accessibility object associated with the current
        selection to objectFocusedAndCaretOffsetUnignored.

2012-01-21  David Reveman  <reveman@chromium.org>

        [Chromium] Incremental texture updates are not atomic.
        https://bugs.webkit.org/show_bug.cgi?id=72672

        Reviewed by Adam Barth.

        Use a new set of textures for each commit when incremental
        texture updates are enabled.

        This patch is tested by the following unit test:
        - CCLayerTreeHostTestAtomicCommit.runMultiThread

        * platform/graphics/chromium/ManagedTexture.cpp:
        (WebCore::ManagedTexture::ManagedTexture):
        (WebCore::ManagedTexture::steal):
        * platform/graphics/chromium/ManagedTexture.h:
        * platform/graphics/chromium/TiledLayerChromium.cpp:
        (WebCore::TiledLayerChromium::prepareToUpdateTiles):
        * platform/graphics/chromium/cc/CCLayerTreeHost.cpp:
        (WebCore::CCLayerTreeHost::initialize):
        (WebCore::CCLayerTreeHost::commitComplete):
        (WebCore::CCLayerTreeHost::deleteTextureAfterCommit):
        * platform/graphics/chromium/cc/CCLayerTreeHost.h:
        (WebCore::CCSettings::CCSettings):
        * platform/graphics/chromium/cc/CCProxy.h:
        * platform/graphics/chromium/cc/CCSingleThreadProxy.h:
        (WebCore::CCSingleThreadProxy::partialTextureUpdateCapability):
        * platform/graphics/chromium/cc/CCThreadProxy.cpp:
        (WebCore::CCThreadProxy::scheduledActionUpdateMoreResources):
        (WebCore::CCThreadProxy::partialTextureUpdateCapability):
        * platform/graphics/chromium/cc/CCThreadProxy.h:

2012-01-21  Pablo Flouret  <pablof@motorola.com>

        Add .url attribute alongside .URL in EventSource and WebSocket to comply with the specs but not break existing usage.
        https://bugs.webkit.org/show_bug.cgi?id=40899

        Reviewed by Adam Barth.

        Tests: fast/eventsource/eventsource-url-attribute.html
               http/tests/websocket/tests/hixie76/url-attribute.html
               http/tests/websocket/tests/hybi/url-attribute.html

        * page/EventSource.idl:
        * websockets/WebSocket.idl:

2012-01-21  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r105564.
        http://trac.webkit.org/changeset/105564
        https://bugs.webkit.org/show_bug.cgi?id=76792

        Does not compile on Chromium Mac (Requested by abarth on
        #webkit).

        * platform/graphics/chromium/ManagedTexture.cpp:
        * platform/graphics/chromium/ManagedTexture.h:
        * platform/graphics/chromium/TiledLayerChromium.cpp:
        (WebCore::TiledLayerChromium::prepareToUpdateTiles):
        * platform/graphics/chromium/cc/CCLayerTreeHost.cpp:
        (WebCore::CCLayerTreeHost::initialize):
        (WebCore::CCLayerTreeHost::commitComplete):
        * platform/graphics/chromium/cc/CCLayerTreeHost.h:
        (WebCore::CCSettings::CCSettings):
        * platform/graphics/chromium/cc/CCProxy.h:
        * platform/graphics/chromium/cc/CCSingleThreadProxy.h:
        * platform/graphics/chromium/cc/CCThreadProxy.cpp:
        (WebCore::CCThreadProxy::scheduledActionUpdateMoreResources):
        * platform/graphics/chromium/cc/CCThreadProxy.h:

2012-01-20  Chris Marrin  <cmarrin@apple.com>

        Implement hardware accelerated Brightness and contrast filters
        https://bugs.webkit.org/show_bug.cgi?id=75521
        https://bugs.webkit.org/show_bug.cgi?id=76719

        Reviewed by Simon Fraser.

        Implemented hardware accelerated brightness and contrast filters. This also fixes
        the bug where grayscale filter was accidentally never getting hardware accelerated.
        It also complies with proposed spec changes for the brightness filter to be additive 
        rather than multiplicative, according to https://bugs.webkit.org/show_bug.cgi?id=76719. 
        Had to make both fixes in the same patch because I had to change the allowed brightness
        values for the hardware version, so I had to change the software version as well.

        Tests: css3/filters/effect-brightness-hw.html
               css3/filters/effect-contrast-hw.html

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseBuiltinFilterArguments):
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::createFilterOperations):
        * platform/graphics/ca/mac/PlatformCALayerMac.mm:
        (PlatformCALayer::setFilters):
        (PlatformCALayer::filtersCanBeComposited):
        * rendering/FilterEffectRenderer.cpp:
        (WebCore::FilterEffectRenderer::build):

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

        <feImage> ignores preserveAspectRatio="none"
        https://bugs.webkit.org/show_bug.cgi?id=76780

        Reviewed by Antti Koivisto.

        preserveAspectRatio="none" was ignored in SVGFEImage. It always called transformRect() w/o checking
        whether it was supposed to transform the rect or not - move code from RenderSVGImage right into
        transformRect(), to do nothing if preserveAspectRatio="none" was given.

        Test: svg/filters/feImage-preserveAspectratio.svg

        * rendering/svg/RenderSVGImage.cpp:
        (WebCore::RenderSVGImage::paint):
        * svg/SVGPreserveAspectRatio.cpp:
        (WebCore::SVGPreserveAspectRatio::transformRect):

2012-01-21  Jochen Eisinger  <jochen@chromium.org>

        history.replaceState should update the HistoryItem to use a GET method if previously non-GET (POST)
        https://bugs.webkit.org/show_bug.cgi?id=76721

        Reviewed by Mihai Parparita.

        Tests: http/tests/history/replacestate-post-to-get-2.html
               http/tests/history/replacestate-post-to-get.html

        * loader/HistoryController.cpp:
        (WebCore::HistoryController::replaceState):

2012-01-21  Florin Malita  <fmalita@google.com>

        Null dereference in SVGDocumentExtensions::removePendingResource when updating <use>'s href
        https://bugs.webkit.org/show_bug.cgi?id=69284

        Reviewed by Nikolas Zimmermann.

        Test: svg/custom/use-crash-pending-resource.svg

        The crash is caused by assumptions in SVGUseElement that xlink:href is the only
        pending resource. This patch adds support for dealing with multiple pending resources.

        * rendering/svg/RenderSVGResourceContainer.cpp:
        (WebCore::RenderSVGResourceContainer::registerResource):
        * svg/SVGDocumentExtensions.cpp:
        (WebCore::SVGDocumentExtensions::hasPendingResource):
        (WebCore::SVGDocumentExtensions::isElementPendingResources):
        (WebCore::SVGDocumentExtensions::isElementPendingResource):
        (WebCore::SVGDocumentExtensions::removePendingResourceForElement):
        * svg/SVGDocumentExtensions.h:
        * svg/SVGStyledElement.cpp:
        (WebCore::SVGStyledElement::buildPendingResourcesIfNeeded):
        (WebCore::SVGStyledElement::clearHasPendingResourcesIfPossible):
        Renamed SVGDocumentExtensions::hasPendingResources -> Renamed SVGDocumentExtensions::hasPendingResource.
        Renamed SVGDocumentExtensions::isElementInPendingResources -> SVGDocumentExtensions::isElementPendingResources.
        Added support for querying and removing pending resources for a specific element.

        * svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::svgAttributeChanged):
        (WebCore::SVGUseElement::buildPendingResource):
        Refactored to support multiple pending resources.

2012-01-21  Stephen Chenney  <schenney@chromium.org>

        REGRESSION (Safari 5.0.5 - ToT): crash in SVG test http://dev.w3.org/SVG/profiles/1.1F2/test/harness/htmlObjectApproved/animate-elem-39-t.html
        https://bugs.webkit.org/show_bug.cgi?id=64671

        Reviewed by Nikolas Zimmermann.

        No new tests. This change is to fix crashes in existing tests.

        * svg/animation/SVGSMILElement.cpp:
        (WebCore::SVGSMILElement::beginListChanged): If the new begin time is
        later than the current end time, and the event time is also after then
        end time (but we have not yet updated to that time) and the animation
        is active, we need to make the animation inactive explicitly.

2012-01-21  Benjamin Poulain  <bpoulain@apple.com>

        PopupMenuClient::multiple() should be const
        https://bugs.webkit.org/show_bug.cgi?id=76771

        Reviewed by Kent Tamura.

        * platform/PopupMenuClient.h:
        (WebCore::PopupMenuClient::multiple):
        * rendering/RenderMenuList.cpp:
        (WebCore::RenderMenuList::multiple):
        * rendering/RenderMenuList.h:

2012-01-20  Mark Pilgrim  <pilgrim@chromium.org>

        Switch indexeddb to use supplemental IDL for DOMWindow
        https://bugs.webkit.org/show_bug.cgi?id=76723

        Reviewed by Adam Barth.

        No new tests required, all existing tests pass.

        * Modules/indexeddb: Added.
        * Modules/indexeddb/DOMWindowIndexedDatabase.cpp: Added. webkitIndexedDB() method previously in DOMWindow.cpp
        (WebCore::DOMWindowIndexedDatabase::DOMWindowIndexedDatabase):
        (WebCore::DOMWindowIndexedDatabase::~DOMWindowIndexedDatabase):
        (WebCore::DOMWindowIndexedDatabase::webkitIndexedDB):
        * Modules/indexeddb/DOMWindowIndexedDatabase.h: Added.
        * Modules/indexeddb/DOMWindowIndexedDatabase.idl: Added. attributes previously in DOMWindow.idl
        * WebCore.gyp/WebCore.gyp: add Modules/indexeddb/ directory
        * WebCore.gypi: add Modules/indexeddb/*
        * page/DOMWindow.cpp: remove webkitIndexedDB() method, add accessor methods for m_idbFactory
        (WebCore::DOMWindow::getIDBFactory):
        (WebCore::DOMWindow::setIDBFactory):
        * page/DOMWindow.h:
        * page/DOMWindow.idl:

2012-01-20  David Levin  <levin@chromium.org>

        Allow isContextThread to be called while in ~ScriptExecutionContext.
        https://bugs.webkit.org/show_bug.cgi?id=76756

        Reviewed by Adam Barth.

        It is possible for objects to get torn down or get called from ~ScriptExecutionContext
        and in turn call isContextThread. The resulting behavior is undefined. This change defines
        the behavior. I don't know of any places that do this but I have a test that is rarely
        failing due to isContextThread being false. This is my best guess as to why, and I
        don't see a reason to try to avoid calling isContextThread at this point.

        No new functionality exposed so no new tests.

        * dom/ScriptExecutionContext.h:
        (WebCore::ScriptExecutionContext::isContextThread):

2012-01-20  Alexandre Elias  <aelias@google.com>

        [chromium] Write unit tests for compositor-thread zooming
        https://bugs.webkit.org/show_bug.cgi?id=71529

        Reviewed by James Robinson.

        Add unit tests for pinch zoom and page scale animation.  Includes
        small cleanups in CCLayerTreeHostImpl for testability.

        * platform/graphics/chromium/cc/CCInputHandler.h:
        * platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:
        (WebCore::CCLayerTreeHostImpl::startPageScaleAnimation):
        (WebCore::CCLayerTreeHostImpl::setViewportSize):
        * platform/graphics/chromium/cc/CCLayerTreeHostImpl.h:

2012-01-20  David Reveman  <reveman@chromium.org>

        [Chromium] Incremental texture updates are not atomic.
        https://bugs.webkit.org/show_bug.cgi?id=72672

        Reviewed by James Robinson.

        Use a new set of textures for each commit when incremental
        texture updates are enabled.

        This patch is tested by the following unit test:
        - CCLayerTreeHostTestAtomicCommit.runMultiThread

        * platform/graphics/chromium/ManagedTexture.cpp:
        (WebCore::ManagedTexture::ManagedTexture):
        (WebCore::ManagedTexture::steal):
        * platform/graphics/chromium/ManagedTexture.h:
        * platform/graphics/chromium/TiledLayerChromium.cpp:
        (WebCore::TiledLayerChromium::prepareToUpdateTiles):
        * platform/graphics/chromium/cc/CCLayerTreeHost.cpp:
        (WebCore::CCLayerTreeHost::initialize):
        (WebCore::CCLayerTreeHost::commitComplete):
        (WebCore::CCLayerTreeHost::deleteTextureAfterCommit):
        * platform/graphics/chromium/cc/CCLayerTreeHost.h:
        (WebCore::CCSettings::CCSettings):
        * platform/graphics/chromium/cc/CCProxy.h:
        * platform/graphics/chromium/cc/CCSingleThreadProxy.h:
        (WebCore::CCSingleThreadProxy::partialTextureUpdateCapability):
        * platform/graphics/chromium/cc/CCThreadProxy.cpp:
        (WebCore::CCThreadProxy::scheduledActionUpdateMoreResources):
        (WebCore::CCThreadProxy::partialTextureUpdateCapability):
        * platform/graphics/chromium/cc/CCThreadProxy.h:

2012-01-20  Chris Rogers  <crogers@google.com>

        De-zippering incorrectly snaps to target gain
        https://bugs.webkit.org/show_bug.cgi?id=76741

        Reviewed by Kenneth Russell.

        * platform/audio/AudioBus.cpp:

2012-01-20  Dana Jansens  <danakj@chromium.org>

        [chromium] Partially filled pixels do not occlude pixels below them.
        https://bugs.webkit.org/show_bug.cgi?id=76658

        Reviewed by James Robinson.

        Test: compositing/culling/tile-occlusion-boundaries.html

        * platform/graphics/chromium/cc/CCQuadCuller.cpp:
        (WebCore::enclosedIntRect):
        (WebCore::CCQuadCuller::cullOccludedQuads):

2012-01-20  Ami Fischman  <fischman@chromium.org>

        Small cleanup of {get,put}CurrentFrame for  WebMediaPlayerClientImpl/CCVideoLayerImpl.
        https://bugs.webkit.org/show_bug.cgi?id=76332

        Reviewed by James Robinson.

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

2012-01-20  Brady Eidson  <beidson@apple.com>

        <rdar://problem/9328684> and https://bugs.webkit.org/show_bug.cgi?id=62764
        Frequent crashes due to null frame below ApplicationCacheHost::scheduleLoadFallbackResourceFromApplicationCache

        Reviewed by Sam Weinig.

        No way to reproduce without special malloc debugging and that doesn't even reproduce on all platforms.  So still no test.

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::detachFromFrame): Protect m_frame for the duration of this method.

2012-01-20  Alexey Proskuryakov  <ap@apple.com>

        WebCore should not send invalid URLs to client createWindow methods.
        https://bugs.webkit.org/show_bug.cgi?id=39017

        Unreviewed test fix.

        * page/DOMWindow.cpp: (WebCore::DOMWindow::createWindow): Let empty URLs through.

2012-01-20  Sam Weinig  <sam@webkit.org>

        Make WebCore RunLoop work for WebKit1
        https://bugs.webkit.org/show_bug.cgi?id=76739

        Reviewed by Anders Carlsson.

        * platform/RunLoop.cpp:
        Specialize RunLoop initialization for Mac, where it can happen on any thread.
        
        * platform/RunLoop.h:
        Add RunLoop constructor that takes a CFRunLoopRef on the mac for initializing
        the main thread.

        * platform/mac/RunLoopMac.mm:
        (WebCore::RunLoop::initializeMainRunLoop):
        Add new implementation that can work from any thread (and multiple threads at the
        same time if necessary).

        (WebCore::RunLoop::current):
        Treat the main thread specially, not storing it in thread specific data.

        (WebCore::RunLoop::main):
        Copy main accessor since it needs access to the file static.

        (WebCore::RunLoop::RunLoop):
        Add constructor which takes a CFRunLoopRef.

2012-01-20  Tim Horton  <timothy_horton@apple.com>

        Crash in RenderSVGResourceContainer::markAllClientsForInvalidation
        https://bugs.webkit.org/show_bug.cgi?id=76606
        <rdar://problem/10720970>

        Reviewed by Dirk Schulze.

        Notify SVGResourcesCache and superclass when RenderSVGInline is about
        to be destroyed, preventing a crash.

        Test: svg/custom/crash-inline-container-client.html

        * rendering/svg/RenderSVGInline.cpp:
        (WebCore::RenderSVGInline::willBeDestroyed):
        * rendering/svg/RenderSVGInline.h:

2012-01-20  Alexey Proskuryakov  <ap@apple.com>

        WebCore should not send invalid URLs to client createWindow methods.
        https://bugs.webkit.org/show_bug.cgi?id=39017

        Reviewed by Sam Weinig.

        Test: fast/dom/window/open-invalid-url.html

        * page/DOMWindow.cpp: (WebCore::DOMWindow::createWindow): Bail out early for invalid URLs.

2012-01-20  Caio Marcelo de Oliveira Filho  <caio.oliveira@openbossa.org>

        Remove unused variable in RenderReplaced after r105513
        https://bugs.webkit.org/show_bug.cgi?id=76742

        Reviewed by Daniel Bates.

        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::computeReplacedLogicalWidth):
        (WebCore::RenderReplaced::computeReplacedLogicalHeight):

2012-01-20  Jonathan Backer  <backer@chromium.org>

        [chromium] Plumb damage from accelerated canvas 2D.
        https://bugs.webkit.org/show_bug.cgi?id=76728

        Reviewed by Kenneth Russell.

        * platform/graphics/chromium/Canvas2DLayerChromium.cpp:
        (WebCore::Canvas2DLayerChromium::contentChanged):

2012-01-20  Julien Chaffraix  <jchaffraix@webkit.org>

        Crash in RenderTable::borderBefore
        https://bugs.webkit.org/show_bug.cgi?id=75215

        Reviewed by David Hyatt.

        Test: fast/table/crash-beforeBorder-dirty-section.html

        This is a regression from r97661 that added some calls to get the object's borders but tables are a
        special case and they may need to recompute some sections' pointers.

        The whole sections' pointers lazy recomputation logic is unfortunately far from being bullet proof and
        this change is only a mitigation for the current crash.

        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::borderBefore):
        (WebCore::RenderTable::borderAfter):
        Make sure we recompute our sections. The change was made here to avoid hitting the
        path used inside the table code (ie outerBorder{Before|After}) that shouldn't be
        affected.

        * rendering/RenderTable.h:
        (WebCore::RenderTable::topSection):
        Added an ASSERT to catch more bad use in the future.

2012-01-20  Marc-Andre Decoste  <mad@chromium.org>

        Add proper offset to position right click to simulate a context menu invocation.
        https://bugs.webkit.org/show_bug.cgi?id=76421

        Reviewed by Ojan Vafai.

        Manual tests only because DRT doesn't support context menu key.

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

2012-01-20  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r105426.
        http://trac.webkit.org/changeset/105426
        https://bugs.webkit.org/show_bug.cgi?id=76726

        Might have caused a 20% regression in the PLT (Requested by
        abarth|gardener on #webkit).

        * rendering/RenderObject.h:
        (WebCore::RenderObject::style):

2012-01-20  Sadrul Habib Chowdhury  <sadrul@chromium.org>

        [chromium] Revert a couple of changes in fileapi/ that break tests in chromeos.
        https://bugs.webkit.org/show_bug.cgi?id=76718

        Reviewed by Darin Fisher.

        * fileapi/BlobURL.cpp:
        (WebCore::BlobURL::getIdentifier):
        (WebCore::BlobURL::createBlobURL):
        * fileapi/BlobURL.h:
        (WebCore::BlobURL::blobProtocol):
        * fileapi/DOMFileSystemBase.cpp:
        (WebCore::DOMFileSystemBase::crackFileSystemURL):
        * fileapi/DOMFileSystemBase.h:
        * fileapi/EntryBase.cpp:
        (WebCore::EntryBase::toURL):
        * fileapi/FileWriter.cpp:
        (WebCore::FileWriter::write):
        (WebCore::FileWriter::truncate):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::webkitRequestFileSystem):
        * page/DOMWindow.h:
        * platform/AsyncFileSystem.cpp:
        * platform/AsyncFileSystem.h:
        * workers/WorkerContext.cpp:
        (WebCore::WorkerContext::webkitRequestFileSystem):
        (WebCore::WorkerContext::webkitRequestFileSystemSync):

2012-01-20  Tim Dresser  <tdresser@chromium.org>

        Refactor canvas drawing to be more data driven
        https://bugs.webkit.org/show_bug.cgi?id=76635

        CCCanvasLayerImpl no longer handles drawing itself, but produces a list of CCCanvasDrawQuads.
        These quads are then drawn by LayerRendererChromium.

        This is a refactor, so no new tests were added.

        Reviewed by James Robinson.

        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::drawCanvasQuad):
        * platform/graphics/chromium/cc/CCCanvasDrawQuad.cpp:
        (WebCore::CCCanvasDrawQuad::create):
        (WebCore::CCCanvasDrawQuad::CCCanvasDrawQuad):
        * platform/graphics/chromium/cc/CCCanvasDrawQuad.h:
        (WebCore::CCCanvasDrawQuad::textureId):
        (WebCore::CCCanvasDrawQuad::hasAlpha):
        (WebCore::CCCanvasDrawQuad::premultipliedAlpha):
        * platform/graphics/chromium/cc/CCCanvasLayerImpl.cpp:
        (WebCore::CCCanvasLayerImpl::appendQuads):
        * platform/graphics/chromium/cc/CCCanvasLayerImpl.h:

2012-01-19  Abhishek Arya  <inferno@chromium.org>

        Crash in xsltParseGlobalVariable.
        https://bugs.webkit.org/show_bug.cgi?id=75978

        Reviewed by Andreas Kling.

        The code missed to reset the stylesheet pointer after we fail
        to compile the XSLT stylesheet. As a result, the stylesheet gets
        reused with a removed document in the next transformToFragment call.

        Test: fast/xsl/xslt-transform-to-fragment-crash.html

        * xml/XSLTProcessorLibxslt.cpp:
        (WebCore::XSLTProcessor::transformToString):

2012-01-20  Nikolas Zimmermann  <nzimmermann@rim.com>

        REGRESSION (r98852): apple.com navigation bar is broken under full-page zoom
        https://bugs.webkit.org/show_bug.cgi?id=76249

        Reviewed by Andreas Kling.

        Fix regression with full-page zoom & border-image. paintNinePieceImage() expects local, unzoomed coordinates.
        Restore the behaviour as it was before r98852, fixing the regression.

        Test: fast/borders/scaled-border-image.html

        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paintNinePieceImage):

2012-01-20  Mihnea Ovidenie  <mihnea@adobe.com>

        [CSSRegion]Expose DOM interface for WebKitCSSRegionRule
        https://bugs.webkit.org/show_bug.cgi?id=73985

        Reviewed by Antti Koivisto.

        Start by exposing the interface and the cssRules attribute of type CSSRuleList.
        Test: fast/regions/webkit-region-rule.html

        * CMakeLists.txt:
        * DerivedSources.cpp:
        * DerivedSources.make:
        * DerivedSources.pri:
        * GNUmakefile.list.am:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSCSSRuleCustom.cpp:
        (WebCore::toJS):
        * bindings/objc/DOMCSS.mm:
        (kitClass):
        * bindings/v8/custom/V8CSSRuleCustom.cpp:
        (WebCore::toV8):
        * css/WebKitCSSRegionRule.cpp:
        * css/WebKitCSSRegionRule.h:
        * css/WebKitCSSRegionRule.idl:
        * page/DOMWindow.idl:

2012-01-20  Nikolas Zimmermann  <nzimmermann@rim.com>

        Differentiate between SVG/CSS width/height attributes/properties
        https://bugs.webkit.org/show_bug.cgi?id=76447

        Reviewed by Antti Koivisto.

        Remove a gazillion of hacks out of our SVG implementation, by correctly differentiating between the
        SVG width/height attributes and the CSS width/height properties. They need to be treated independently
        when handling the intrinsic size negotiation, according to both CSS 2.1 & SVG 1.1 2nd Edition specs.

        Fixes several bugs in the LayoutTests/svg/custom/*object*sizing tests, we now match Opera perfectly. FF still has some bugs, and IE9 as well.

        * css/svg.css: Remove hardcoded, width/height: 100% on <svg>.
        * rendering/RenderBox.h:
        (WebCore::RenderBox::computeIntrinsicRatioInformation): Make 'intrinsicRatio' a float, and add 'intrinsicSize' as seperated FloatSize, to avoid confusion.
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::calculateImageIntrinsicDimensions): Add forgotton case for percentage intrinsic sizes, that lead to workarounds in other places, that can now be removed.
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::computeReplacedLogicalWidth): Directly use imageHasRelativeWidth/Height(), it does differentiate between SVG/CSS width/height attributes/properties now.
        (WebCore::RenderImage::computeIntrinsicRatioInformation): Adapt to 'intrinsicRatio' argument change.
        * rendering/RenderImage.h: Ditto.
        * rendering/RenderReplaced.cpp: Refactor existing code, break out firstContainingBlockWithLogicalWidth/hasReplacedLogicalWidth/hasReplacedLogicalHeight/hasAutoHeightOrContainingBlockWithAutoHeight.
        (WebCore::firstContainingBlockWithLogicalWidth): Refactored.
        (WebCore::RenderReplaced::hasReplacedLogicalWidth): Refactored, and exported, so SVGSVGElement::widthAttributeEstablishesViewport() can use it.
        (WebCore::hasAutoHeightOrContainingBlockWithAutoHeight): Refactored.
        (WebCore::RenderReplaced::hasReplacedLogicalHeight): Refactored, and exported, so SVGSVGElement::heightAttributeEstablishesViewport() can use it.
        (WebCore::RenderReplaced::computeReplacedLogicalWidth): Adapt to 'intrinsicRatio' changes ('intrinsicSize' is now decoupled from it). Refactor so that RenderSVGRoot can directly use it as well!
        (WebCore::RenderReplaced::computeReplacedLogicalHeight): Ditto.
        * rendering/RenderReplaced.h:
        * rendering/svg/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::computeIntrinsicRatioInformation): Only determine the intrinsic size & ratio using the SVG width/height attributes, not the CSS width/height properties, as it's specified.
        (WebCore::resolveLengthAttributeForSVG): Helper function for computeReplacedLogicalWidth/Height, that scales Length values that come from SVG width/height attributes.
        (WebCore::RenderSVGRoot::computeReplacedLogicalWidth): Finally remove home-brewn size computation logic - it can be fully shared with RenderReplaced now that we inherit from it.
        (WebCore::RenderSVGRoot::computeReplacedLogicalHeight): Ditto.
        * rendering/svg/RenderSVGRoot.h:
        * rendering/svg/RenderSVGViewportContainer.h:
        (WebCore::RenderSVGViewportContainer::viewport): Export viewport() for easier length resolution.
        * svg/SVGLengthContext.cpp:
        (WebCore::SVGLengthContext::determineViewport): Finally clean up this hell, and make it easy to understand. Only need to resolve lengths against either RenderSVGRoot or RenderSVGViewportContainer now.
        * svg/SVGSVGElement.cpp: 
        (WebCore::SVGSVGElement::viewport): Remove wrong code and disable this. Its not used, and we have no test coverage for it. Its current implementation didn't make any sense.
        (WebCore::SVGSVGElement::parseMappedAttribute): Remove hacks mapping SVG width/height attributes to CSS properties.
        (WebCore::SVGSVGElement::svgAttributeChanged): Ditto.
        (WebCore::SVGSVGElement::localCoordinateSpaceTransform): Refactored.
        (WebCore::SVGSVGElement::currentViewBoxRect): Ditto.
        (WebCore::SVGSVGElement::currentViewportSize): Ditto.
        (WebCore::SVGSVGElement::widthAttributeEstablishesViewport): Main logic determining if the SVG or CSS properties establish the viewport -  a direct transliteration from the spec.
        (WebCore::SVGSVGElement::heightAttributeEstablishesViewport): Ditto.
        (WebCore::SVGSVGElement::intrinsicWidth): Helper.
        (WebCore::SVGSVGElement::intrinsicHeight): Ditto.
        * svg/SVGSVGElement.h:
        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::size): Cleanup code.
        (WebCore::SVGImage::hasRelativeWidth): Added, avoids hacks in RenderBoxModelObject.
        (WebCore::SVGImage::hasRelativeHeight): Ditto.
        (WebCore::SVGImage::computeIntrinsicDimensions): Make use of new SVGSVGElement::computeIntrinsicDimensions.
        * svg/graphics/SVGImage.h:

2012-01-20  Sami Kyostila  <skyostil@chromium.org>

        window.innerWidth/Height should not include page scale
        https://bugs.webkit.org/show_bug.cgi?id=76555

        The DOM attributes window.innerWidth and window.innerHeight should be in
        CSS pixels instead of device pixels. Currently the text zoom factor is
        cancelled out when calculating these values, but the same also needs to
        be done for the page scale.

        There is an additional subtlety concerning frames/iframes since their
        visible content rectangle is already in (unscaled) CSS pixels. By using
        Frame::frameScaleFactor() we avoid unnecessarily cancelling out the page
        scale factor in this case.

        Reviewed by Kenneth Rohde Christiansen.

        Tests: fast/dom/iframe-inner-size-scaling.html
               fast/dom/window-inner-size-scaling.html

        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::innerHeight):
        (WebCore::DOMWindow::innerWidth):

2012-01-20  Kinuko Yasuda  <kinuko@chromium.org>

        Add DataTransferItems support for drag-and-drop'ed files and texts
        https://bugs.webkit.org/show_bug.cgi?id=76367

        Reviewed by Tony Chang.

        Per http://www.whatwg.org/specs/web-apps/current-work/multipage/dnd.html#the-datatransfer-interface
        the new interface should also support drag-and-dropped files and texts in
        addition to pasted texts/images.  The user apps should also be able to add
        texts/files to the drag store by calling event.dataTransfer.items.add().

        This patch adds drag-and-drop'ed items support in DataTransferItem and
        DataTransferItemList so that they work for dropped files and texts (as well as
        the copy-pasted texts/images).

        This patch also adds customized toJS()/toV8() code to Blob/File javascript
        binding so that the JS code can get either Blob or File underlying object
        where the API returns Blob. This change is necessary since we return Blob
        from DataTransferItem.getAsFile() for pasted images but want to return File
        for dropped files.

        Tests: editing/pasteboard/data-transfer-items-drag-drop-file.html
               editing/pasteboard/data-transfer-items-drag-drop-string.html

        * GNUmakefile.list.am: Added entries for the new {JS,V8}BlobCustom.
        * Target.pri: Ditto.
        * UseJSC.cmake: Ditto.
        * WebCore.gypi: Ditto.
        * bindings/js/JSBindingsAllInOne.cpp: Ditto.
        * bindings/js/JSBlobCustom.cpp: Added toJS custom code that returns File or
        Blob depending on the return value of isFile().
        (WebCore::toJS):
        * bindings/v8/custom/V8BlobCustom.cpp: Added toV8 custom code.
        (WebCore::toV8):
        * dom/DataTransferItem.h: Added a new create() method which takes File.
        * dom/DataTransferItemList.cpp: Added add(File) method.
        (WebCore::DataTransferItemList::add):
        * dom/DataTransferItemList.h: Ditto.
        * dom/DataTransferItemList.idl: Ditto.
        * fileapi/Blob.idl: Added CustomToJS for toJS/toV8.
        * platform/chromium/ClipboardChromium.cpp: Added code for drag-and-drop'ed items.
        (WebCore::ClipboardChromium::items): Revised.
        (WebCore::ClipboardChromium::mayUpdateItems): Added.
        (WebCore::ClipboardChromium::isStorageUpdated): Added.
        * platform/chromium/ClipboardChromium.h:
        * platform/chromium/DataTransferItemChromium.cpp: Added a new constructor that
        takes File and updated getAsFile() to make it support dropped files.
        (WebCore::DataTransferItem::create):
        (WebCore::DataTransferItemChromium::DataTransferItemChromium):
        (WebCore::DataTransferItemChromium::getAsFile):
        * platform/chromium/DataTransferItemChromium.h:
        * platform/chromium/DataTransferItemListChromium.cpp:
        (WebCore::DataTransferItemListChromium::addInternalItem):
        * platform/chromium/DataTransferItemListChromium.cpp: Added overrides implementation for m_item accessors to make them reflect the changes in the owner clipboard.
        (WebCore::DataTransferItemListChromium::length):
        (WebCore::DataTransferItemListChromium::item):
        (WebCore::DataTransferItemListChromium::deleteItem):
        (WebCore::DataTransferItemListChromium::clear):
        (WebCore::DataTransferItemListChromium::add):
        (WebCore::DataTransferItemListChromium::mayUpdateItems): Added.
        * platform/qt/DataTransferItemQt.cpp: Added a new constructor that takes File and updated
        getAsFile() to make it support dropped files.
        (WebCore::DataTransferItem::create):
        (WebCore::DataTransferItemQt::DataTransferItemQt):
        (WebCore::DataTransferItemQt::getAsFile):
        * platform/qt/DataTransferItemQt.h:

2012-01-20  Alexis Menard  <alexis.menard@openbossa.org>

        remove CSSBorderImageValue
        https://bugs.webkit.org/show_bug.cgi?id=75563

        Reviewed by Tony Chang.

        Remove CSSBorderImageValue as border-image is a shorthand therefore we don't
        need a dedicated CSS class type for it. CSSBorderImageValue was here for
        -webkit-border-image which is not a shorthand. This is the first step to move border-image
        close to a correct shorthand implementation while keeping -webkit-border-image being a regular
        CSS property.

        No new tests : It's a refactor, existing tests should cover it.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.order:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSAllInOne.cpp:
        * css/CSSBorderImage.cpp: Added.
        (WebCore::createBorderImageValue):
        * css/CSSBorderImage.h: Added.
        * css/CSSBorderImageValue.cpp: Removed.
        * css/CSSBorderImageValue.h: Removed.
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::valueForNinePieceImage):
        * css/CSSParser.cpp:
        (WebCore::BorderImageParseContext::commitBorderImage):
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::mapNinePieceImage):
        * css/CSSValue.cpp:
        (WebCore::CSSValue::addSubresourceStyleURLs):
        (WebCore::CSSValue::cssText):
        (WebCore::CSSValue::destroy):
        * css/CSSValue.h:

2012-01-20  Hayato Ito  <hayato@chromium.org>

        Add ShadowRoot.idl which is enabled by newly introduced SHADOW_DOM flag.
        https://bugs.webkit.org/show_bug.cgi?id=76353

        Reviewed by Hajime Morita.

        Add ShadowRoot.idl, which is enabled only on chromium port since this is
        under development feature.
        ShadowRoot.idl contains minimum API so that we can test it.
        Other APIs should be added on other changes so that we can isolate issues.

        Test: fast/dom/shadow/shadow-root-js-api.html

        * WebCore.gypi:
        * bindings/generic/RuntimeEnabledFeatures.cpp:
        * bindings/generic/RuntimeEnabledFeatures.h:
        (WebCore::RuntimeEnabledFeatures::shadowDOMEnabled):
        (WebCore::RuntimeEnabledFeatures::setShadowDOMEnabled):
        * dom/ShadowRoot.h:
        (WebCore::ShadowRoot::host):
        * dom/ShadowRoot.idl: Added.
        * testing/Internals.cpp:
        (WebCore::Internals::ensureShadowRoot):
        (WebCore::Internals::shadowRoot):
        * testing/Internals.h:
        * testing/Internals.idl:

2012-01-19  Kent Tamura  <tkent@chromium.org>

        Change LocalizedNumber interface
        https://bugs.webkit.org/show_bug.cgi?id=76613

        Reviewed by Hajime Morita.

        Change the functions of LocalizedNumber from:
          double parseLocalizedNumber(const String&);
          String formatLocalizedNumber(double, unsigned fractionDigits);
        To:
          String convertToLocalizedNumber(const String&, usnigned fractionDigits);
          String convertFromLocalizedNumber(const String&);
        in order that we can avoid conversion from/to a double value.

        The fractionDigits argumetn of convertToLocalizedNumber() will be
        removed in the future.  We need it because we'd like to recycle the old
        functions to implement new functions for now and functions in
        LocalizedNumber can't call functions in HTMLParserIdioms.cpp.

        No new tests because the change doesn't make any behavior change.

        * html/NumberInputType.cpp:
        (WebCore::NumberInputType::visibleValue):
        Use convertToLocalizedNumber.
        (WebCore::NumberInputType::convertFromVisibleValue):
        Use convertFromLocalizedNumber.
        (WebCore::NumberInputType::isAcceptableValue): ditto.
        * platform/text/LocalizedNumber.h:
        Remove parseLocalizedNumber and formatLocalizedNumber, and
        introduce convertToLocalizedNumber and convertFromLocalizedNumber.
        * platform/text/LocalizedNumberICU.cpp:
        (WebCore::parseLocalizedNumber): Make this static.
        (WebCore::formatLocalizedNumber): Make this static.
        (WebCore::convertToLocalizedNumber): Implement this with formatLocalizedNumber.
        (WebCore::convertFromLocalizedNumber): Implement this with parseLocalizedNumber.
        * platform/text/LocalizedNumberNone.cpp:
        (WebCore::convertToLocalizedNumber):
        Implement this as a function returning the input string.
        (WebCore::convertFromLocalizedNumber): ditto.
        * platform/text/mac/LocalizedNumberMac.mm:
        (WebCore::parseLocalizedNumber): Make this static.
        (WebCore::formatLocalizedNumber): Make this static.
        (WebCore::convertToLocalizedNumber): Implement this with formatLocalizedNumber.
        (WebCore::convertFromLocalizedNumber): Implement this with parseLocalizedNumber.

2012-01-19  Pavel Feldman  <pfeldman@google.com>

        Web Inspector: problem with Ctrl - <arrows> shortcuts in Scripts panel
        https://bugs.webkit.org/show_bug.cgi?id=76622

        Reviewed by Yury Semikhatsky.

        * inspector/front-end/InspectorView.js:
        (WebInspector.InspectorView.prototype._keyDown):
        * inspector/front-end/TextViewer.js:
        (WebInspector.TextViewer.prototype.set readOnly):
        (WebInspector.TextViewer.prototype._cancelEditing):
        (WebInspector.TextViewer.prototype.wasShown):
        (WebInspector.TextViewer.prototype.willHide):
        * inspector/front-end/UIUtils.js:
        (WebInspector.isInEditMode):
        * inspector/front-end/inspector.js:
        (WebInspector.documentKeyDown):

2012-01-19  Kaustubh Atrawalkar  <kaustubh@motorola.com> & Erik Arvidsson  <arv@chromium.org>

        Migrate createObjectURL & revokeObjectURL to static (Class) methods.
        https://bugs.webkit.org/show_bug.cgi?id=74386

        Reviewed by Adam Barth.

        Test: fast/dom/DOMURL/check-instanceof-domurl-functions.html
        Already Existing -
            fast/files/revoke-blob-url.html
            fast/dom/window-domurl-crash.html
            fast/files/apply-blob-url-to-img.html
            fast/files/create-blob-url-crash.html
            fast/files/workers/inline-worker-via-blob-url.html

        * html/DOMURL.cpp: Added HashMap for local static objects.
        (WebCore::PublicURLManager::PublicURLManager):
        (WebCore::PublicURLManager::contextDestroyed):
        (WebCore::PublicURLManager::blobURLs):
        (WebCore::PublicURLManager::streamURLs):
        (WebCore::publicURLManagerMap):
        (WebCore::publicURLManager):
        (WebCore::publicBlobURLs):
        (WebCore::publicStreamURLs):
        (WebCore::DOMURL::createObjectURL): Changed to static.
        (WebCore::DOMURL::revokeObjectURL): ditto.
        * html/DOMURL.h:
        (WebCore::DOMURL::create):
        (WebCore::DOMURL::~DOMURL):
        (WebCore::DOMURL::DOMURL):
        * html/DOMURL.idl:
        * page/DOMWindow.cpp: Removed object initialization for DOMURL.
        * page/DOMWindow.h: ditto.
        * page/DOMWindow.idl: ditto.
        * workers/WorkerContext.cpp: ditto.
        * workers/WorkerContext.h: ditto.
        * workers/WorkerContext.idl: ditto.

2012-01-20  Alexandru Chiculita  <achicu@adobe.com>

        CSS Shaders: Add a Settings flag to enable/disable CSS Shaders at runtime
        https://bugs.webkit.org/show_bug.cgi?id=76444
        
        Added setCSSCustomFilterEnabled/isCSSCustomFilterEnabled that is false by default.
        I've enabled it by default on Apple Mac, to make sure there's no behavior change. Anyway, CSS shaders need
        WebGL enabled, so it ends up being disabled by default.

        Reviewed by Nikolas Zimmermann.

        Test: css3/filters/effect-custom-disabled.html

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseFilter):
            Do not parse the custom() function when shaders are disabled.
            
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):
            Do not overwrite the old style->filter() if parsing fails.
            
        (WebCore::CSSStyleSelector::createFilterOperations):
            Do not continue if one custom() filter fails to parse.
            
        * page/Settings.cpp:
        (WebCore::Settings::Settings):
        * page/Settings.h:
        (WebCore::Settings::setCSSCustomFilterEnabled):
        (WebCore::Settings::isCSSCustomFilterEnabled):
        * rendering/FilterEffectRenderer.cpp:
        (WebCore::isCSSCustomFilterEnabled):
        (WebCore::FilterEffectRenderer::build):
            Avoid creating the filter when shaders are disabled. It may happen to get here if shaders were disabled between parsing and rendering.
        
2012-01-19  Shinya Kawanaka  <shinyak@google.com>

        Node::canHaveLightChildRendererWithShadow is not used anywhere.
        https://bugs.webkit.org/show_bug.cgi?id=76627

        Reviewed by Darin Adler.

        Since Node::canHaveLightChildRendererWithShadow is not overriden anywhere, and it returns always false.
        We can remove it.

        No new tests, because no change in behavior.

        * dom/Node.h:
        * dom/NodeRenderingContext.cpp:
        (WebCore::NodeRenderingContext::shouldCreateRenderer):

2012-01-19  Kinuko Yasuda  <kinuko@chromium.org>

        Cleanup: make constant variable names in fileapi/ conform to WebKit's coding guideline
        https://bugs.webkit.org/show_bug.cgi?id=76625

        Reviewed by David Levin.

        No new tests as this patch has no functional changes.

        * fileapi/BlobURL.cpp:
        (WebCore::BlobURL::getIdentifier):
        (WebCore::BlobURL::createBlobURL):
        * fileapi/BlobURL.h:
        * fileapi/FileWriter.cpp:
        (WebCore::FileWriter::write):
        (WebCore::FileWriter::truncate):
        * platform/AsyncFileSystem.cpp:
        (WebCore::AsyncFileSystem::crackFileSystemURL):
        (WebCore::AsyncFileSystem::toURL):
        (WebCore::AsyncFileSystem::isAvailable):
        * platform/AsyncFileSystem.h:

2012-01-18  Sam Weinig  <sam@webkit.org>

        Move RunLoop to WebCore/platform
        https://bugs.webkit.org/show_bug.cgi?id=76471

        Reviewed by Anders Carlsson.

        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.exp.in:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        Add newly moved files.

        * platform/RunLoop.cpp: Moved from Source/WebKit2/Platform/RunLoop.cpp.
        * platform/RunLoop.h: Moved from Source/WebKit2/Platform/RunLoop.h.
        * platform/gtk/RunLoopGtk.cpp: Moved from Source/WebKit2/Platform/gtk/RunLoopGtk.cpp.
        * platform/mac/RunLoopMac.mm: Moved from Source/WebKit2/Platform/mac/RunLoopMac.mm.
        * platform/qt/RunLoopQt.cpp: Moved from Source/WebKit2/Platform/qt/RunLoopQt.cpp.
        * platform/win/RunLoopWin.cpp: Moved from Source/WebKit2/Platform/win/RunLoopWin.cpp.
        Move the files.

2012-01-19  Pablo Flouret  <pablof@motorola.com>

        Fix inconsistent text selection behavior with option-shift-left/right/up/down.
        https://bugs.webkit.org/show_bug.cgi?id=75652

        Reviewed by Enrica Casucci.

        On Mac, selecting backwards by word, line or paragraph from the middle
        of some text, and then going forward leaves the caret back in the middle
        with no selection, instead of directly selecting to the other end of the
        word/line/paragraph (Unix/Windows behavior). Fix this by adding a new
        editing behavior to control whether the selection should go across the
        initial position of the caret directly or not in situations like the one
        outlined above.

        Test: editing/selection/selection-extend-should-not-move-across-caret-on-mac.html

        * editing/EditingBehavior.h:
        (WebCore::EditingBehavior::shouldExtendSelectionByWordOrLineAcrossCaret):
        * editing/FrameSelection.cpp:
        (WebCore::FrameSelection::modify):

2012-01-19  Simon Fraser  <simon.fraser@apple.com>

        Regression (r98735): Video chat moles in Gmail render incorrectly on Mac OS
        https://bugs.webkit.org/show_bug.cgi?id=75682

        Reviewed by James Robinson.
        
        RenderLayerBacking::isSimpleContainerCompositingLayer() gave incorret
        results in the case where the layer itself was visibility:hidden, but
        where it had visible, non-composited descendant layers.
        
        Fix by breaking RenderLayerBacking::hasVisibleNonCompositingDescendants()
        into two methods, one that tests for renderers in this layer which
        render stuff (and are thus affected by visibility on this layer), and
        another which walks descendant, non-composited layers looking for those
        which are visible.
        
        Removed an early return in the "renderObject->node()->isDocumentNode()"
        clause, because we want to run the same code that we run for non-document
        nodes.

        Test: compositing/visibility/layer-visible-content.html

        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::isSimpleContainerCompositingLayer):
        (WebCore::RenderLayerBacking::containsNonEmptyRenderers):
        (WebCore::RenderLayerBacking::hasVisibleNonCompositingDescendantLayers):
        * rendering/RenderLayerBacking.h:

2012-01-19  Alexandre Elias  <aelias@google.com>

        [chromium] Draw gutter quads outside root content layer
        https://bugs.webkit.org/show_bug.cgi?id=76328

        Reviewed by James Robinson.

        Add new layer property "backgroundCoversViewport".  If the content
        layers don't fully cover the render surface, this code calculates the
        difference between the root clip rect and the root content layer and
        draws up to four background-color quads in exactly the area that would
        be undrawn.

        Test: CCTiledLayerImplTest::backgroundCoversViewport

        * platform/graphics/chromium/LayerChromium.cpp:
        (WebCore::LayerChromium::LayerChromium):
        (WebCore::LayerChromium::setBackgroundCoversViewport):
        (WebCore::LayerChromium::pushPropertiesTo):
        * platform/graphics/chromium/LayerChromium.h:
        (WebCore::LayerChromium::backgroundCoversViewport):
        * platform/graphics/chromium/cc/CCLayerImpl.cpp:
        (WebCore::CCLayerImpl::CCLayerImpl):
        (WebCore::CCLayerImpl::setBackgroundCoversViewport):
        * platform/graphics/chromium/cc/CCLayerImpl.h:
        (WebCore::CCLayerImpl::backgroundCoversViewport):
        * platform/graphics/chromium/cc/CCTiledLayerImpl.cpp:
        (WebCore::CCTiledLayerImpl::appendQuads):

2012-01-19  Cary Clark  <caryclark@google.com>

        [Skia Mac] Match style of platform error underline for misspellings
        https://bugs.webkit.org/show_bug.cgi?id=76556

        Reviewed by Stephen White.

        Add Darwin-specific code in Skia to draw the error underline so that
        it matches the CoreGraphics style.

        Many existing layout tests inadvertantly trigger the misspelling
        underline by including the word 'foo' in an editable field. Those
        tests are temporarily suppressed separately in an edit to
        test_expectations.txt.

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

2012-01-19  No'am Rosenthal  <noam.rosenthal@nokia.com>

        [Texmap] TextureMapper creates two many big intermediate surfaces
        https://bugs.webkit.org/show_bug.cgi?id=76336

        Reviewed by Simon Hausmann.

        The following has been done to optimize surface allocation:
        1. Instead of using a viewport-size surface, use a surface in the size of the layer's
           bounding rect and apply the transform after the content has been rendered into it.
        2. Avoid generating intermediate surface for occasions where they're not necessary,
           such as nested reflections without opacity.
        3. Releasing of textures from the pool is now implicit, based on refCount.
        4. Do not use intermediate surfaces for preserve-3d layers. This is in alignment with
           other ports.

        Tests in LayoutTests/compositing/masks and LayoutTests/compositing/reflection cover this.

        * platform/graphics/texmap/TextureMapper.cpp:
        (WebCore::TextureMapper::acquireTextureFromPool):
        * platform/graphics/texmap/TextureMapper.h:
        * platform/graphics/texmap/TextureMapperNode.cpp:
        (WebCore::TextureMapperNode::paintSelf):
        (WebCore::TextureMapperNode::paintSelfAndChildren):
        (WebCore::TextureMapperNode::intermediateSurfaceRect):
        (WebCore::TextureMapperNode::shouldPaintToIntermediateSurface):
        (WebCore::TextureMapperNode::isVisible):
        (WebCore::TextureMapperNode::paintSelfAndChildrenWithReplica):
        (WebCore::TextureMapperNode::paintRecursive):
        (WebCore::TextureMapperNode::syncCompositingStateSelf):
        (WebCore::TextureMapperNode::syncCompositingState):
        * platform/graphics/texmap/TextureMapperNode.h:
        (WebCore::TextureMapperPaintOptions::TextureMapperPaintOptions):

2012-01-19  Eric Seidel  <eric@webkit.org>

        Assertion failure in WebCore::HTMLFrameElementBase::insertedIntoDocument()
        https://bugs.webkit.org/show_bug.cgi?id=50312

        Reviewed by Alexey Proskuryakov.

        Removed the ASSERT and updated the comment.

        Test: fast/frames/assert-on-insertedIntoDocument.html

        * html/HTMLFrameElementBase.cpp:
        (WebCore::HTMLFrameElementBase::insertedIntoDocument):

2012-01-19  James Robinson  <jamesr@chromium.org>

        [chromium] Remove CCLayerDelegate, add ContentLayerDelegate for painting
        https://bugs.webkit.org/show_bug.cgi?id=76663

        Reviewed by Kenneth Russell.

        CCLayerDelegate used to be an interface with a half-dozen callbacks on it, but now it has only one call -
        paintContents() - and that one call is only valid for one subclass of LayerChromium, ContentLayerChromium. This
        removes the CCLayerDelegate pointer from LayerChromium and adds a ContentLayerDelegate for the paint call.

        The majority of the code changes in this patch are removing the nil parameter from various places that construct
        LayerChromium instances. Also tightens the type of GraphicsLayerChromium::m_layer to ContentLayerChromium.

        Refactoring/removing dead code, so no new tests.

        * platform/graphics/chromium/Canvas2DLayerChromium.cpp:
        (WebCore::Canvas2DLayerChromium::Canvas2DLayerChromium):
        * platform/graphics/chromium/CanvasLayerChromium.cpp:
        (WebCore::CanvasLayerChromium::CanvasLayerChromium):
        * platform/graphics/chromium/CanvasLayerChromium.h:
        * platform/graphics/chromium/ContentLayerChromium.cpp:
        (WebCore::ContentLayerPainter::create):
        (WebCore::ContentLayerPainter::ContentLayerPainter):
        (WebCore::ContentLayerChromium::create):
        (WebCore::ContentLayerChromium::ContentLayerChromium):
        * platform/graphics/chromium/ContentLayerChromium.h:
        (WebCore::ContentLayerDelegate::~ContentLayerDelegate):
        (WebCore::ContentLayerChromium::clearDelegate):
        * platform/graphics/chromium/DrawingBufferChromium.cpp:
        (WebCore::DrawingBuffer::platformLayer):
        * platform/graphics/chromium/GraphicsLayerChromium.cpp:
        (WebCore::GraphicsLayerChromium::~GraphicsLayerChromium):
        (WebCore::GraphicsLayerChromium::setContentsToImage):
        (WebCore::GraphicsLayerChromium::setContentsToCanvas):
        (WebCore::GraphicsLayerChromium::setContentsToMedia):
        (WebCore::GraphicsLayerChromium::updateLayerPreserves3D):
        * platform/graphics/chromium/GraphicsLayerChromium.h:
        * platform/graphics/chromium/ImageLayerChromium.cpp:
        (WebCore::ImageLayerChromium::create):
        (WebCore::ImageLayerChromium::ImageLayerChromium):
        * platform/graphics/chromium/ImageLayerChromium.h:
        * platform/graphics/chromium/LayerChromium.cpp:
        (WebCore::LayerChromium::create):
        (WebCore::LayerChromium::LayerChromium):
        * platform/graphics/chromium/LayerChromium.h:
        * platform/graphics/chromium/PluginLayerChromium.cpp:
        (WebCore::PluginLayerChromium::create):
        (WebCore::PluginLayerChromium::PluginLayerChromium):
        * platform/graphics/chromium/PluginLayerChromium.h:
        * platform/graphics/chromium/TiledLayerChromium.cpp:
        (WebCore::TiledLayerChromium::TiledLayerChromium):
        (WebCore::TiledLayerChromium::drawsContent):
        * platform/graphics/chromium/TiledLayerChromium.h:
        * platform/graphics/chromium/VideoLayerChromium.cpp:
        (WebCore::VideoLayerChromium::create):
        (WebCore::VideoLayerChromium::VideoLayerChromium):
        * platform/graphics/chromium/VideoLayerChromium.h:
        * platform/graphics/chromium/WebGLLayerChromium.cpp:
        (WebCore::WebGLLayerChromium::create):
        (WebCore::WebGLLayerChromium::WebGLLayerChromium):
        * platform/graphics/chromium/WebGLLayerChromium.h:

2012-01-19  Greg Billock  <gbillock@google.com>

        [Coverity] Fix uninitialized constructor defects in .../html
        https://bugs.webkit.org/show_bug.cgi?id=74965

        Reviewed by Simon Fraser.

        Test: fast/canvas/script-tests/canvas-webkitLineDash.js

        * html/HTMLFormCollection.cpp:
        (WebCore::HTMLFormCollection::HTMLFormCollection):
        * html/StepRange.cpp:
        (WebCore::StepRange::StepRange):
        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::State::State):
        * html/canvas/CanvasStyle.h:
        (WebCore::CanvasStyle::CMYKAValues::CMYKAValues):
        * html/canvas/WebGLGetInfo.cpp:
        (WebCore::WebGLGetInfo::WebGLGetInfo):
        * html/parser/CSSPreloadScanner.cpp:
        (WebCore::CSSPreloadScanner::CSSPreloadScanner):
        * html/track/WebVTTParser.cpp:
        (WebCore::WebVTTParser::WebVTTParser):

2012-01-19  Alexandru Chiculita  <achicu@adobe.com>

        CSS Shaders: Remove the setTimeout from the layout tests
        https://bugs.webkit.org/show_bug.cgi?id=76535

        Reviewed by Tony Chang.

        We had setTimeout on old tests because the snapshot picture was taken too early, before the shaders were loaded.
        The problem was that the RenderLayer was notified that the shader was loaded only after the onload event was triggered,
        so a simple setTimeout(0) would have fixed the issue, but better than that would be to to always call CachedResource::data 
        in CachedShader::data, which notifies the load earlier (before onload).

        No new tests, just removed the setTimeout from old ones.

        * loader/cache/CachedShader.cpp:
        (WebCore::CachedShader::data):

2012-01-19  Min Qin  <qinmin@google.com>

        Improve touch handling performance by reusing the hitTest result
        https://bugs.webkit.org/show_bug.cgi?id=75506

        Reviewed by Adam Barth.

        This is a performance optimization and should not cause behavior changes. Existing tests should cover it.

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

2012-01-19  Jon Lee  <jonlee@apple.com>

        Add text-overflow support that allows placeholder and value text to show an ellipsis when not focused
        https://bugs.webkit.org/show_bug.cgi?id=76118
        <rdar://problem/9271742>

        Reviewed by Dan Bernstein.

        Tests: fast/css/text-overflow-input-focus-placeholder-expected.html
               fast/css/text-overflow-input-focus-placeholder.html
               fast/css/text-overflow-input-focus-value-expected.html
               fast/css/text-overflow-input-focus-value.html
               fast/css/text-overflow-input.html

        * rendering/RenderTextControlSingleLine.cpp:
        (WebCore::RenderTextControlSingleLine::styleDidChange): When the style of the text control
        changes, we update the text overflow property of the placeholder.
        (WebCore::RenderTextControlSingleLine::createInnerTextStyle): When the style of the text control
        changes, we update the text overflow property of the inner text block.
        (WebCore::RenderTextControlSingleLine::textShouldBeTruncated): The text of the value and placeholder should
        only contain the ellipsis if the input's text-overflow property is set to ellipsis, and the input is not focused.
        * rendering/RenderTextControlSingleLine.h:

2012-01-19  Mark Hahnenberg  <mhahnenberg@apple.com>

        Implement a new allocator for backing stores
        https://bugs.webkit.org/show_bug.cgi?id=75181

        Reviewed by Filip Pizlo.

        No new tests.

        Added forwarding header for new CheckedBoolean used in the bump allocator.

        * ForwardingHeaders/wtf/CheckedBoolean.h: Added.

2012-01-13  Ryosuke Niwa  <rniwa@webkit.org>

        Crash in CompositeEditCommand::ensureComposition
        https://bugs.webkit.org/show_bug.cgi?id=76207

        Reviewed by Chang Shu.

        The crash was caused by TypingCommand not kept alive when new editing commands are executed
        during adding more typings to the open last typing command since m_lastEditCommand is replaced
        by the new command. Fixed the bug by keeping them alive a little longer with RefPtr.

        Test: editing/execCommand/editing-command-while-executing-typing-command-crash.html

        * editing/FrameSelection.cpp:
        (WebCore::shouldStopBlinkingDueToTypingCommand):
        (WebCore::FrameSelection::updateAppearance):
        * editing/TypingCommand.cpp:
        (WebCore::TypingCommand::deleteSelection):
        (WebCore::TypingCommand::deleteKeyPressed):
        (WebCore::TypingCommand::forwardDeleteKeyPressed):
        (WebCore::TypingCommand::insertText):
        (WebCore::TypingCommand::insertLineBreak):
        (WebCore::TypingCommand::insertParagraphSeparatorInQuotedContent):
        (WebCore::TypingCommand::insertParagraphSeparator):
        (WebCore::TypingCommand::lastTypingCommandIfStillOpenForTyping):
        (WebCore::TypingCommand::closeTyping):
        * editing/TypingCommand.h:

2012-01-19  Andreas Kling  <awesomekling@apple.com>

        Unreviewed debug build fix.

        Remove ASSERT that the cached match is cacheable (we don't store that flag anymore.)

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

2012-01-19  Robert Hogan  <robert@webkit.org>

        Fix Debug build after r105433

        Unreviewed, build fix.

        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::recalcCollapsedBorders):

2012-01-19  Andreas Kling  <awesomekling@apple.com>

        CSSStyleSelector: Factor 'isCacheable' flag out of MatchedResult.
        <http://webkit.org/b/76376>

        Reviewed by Antti Koivisto.

        Break up the MatchResult struct into MatchResult and MatchRanges. The matched
        declaration cache only needs the ranges, so we save 4 bytes per entry.

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::matchAllRules):
        (WebCore::CSSStyleSelector::matchUARules):
        (WebCore::CSSStyleSelector::pseudoStyleForElement):
        (WebCore::CSSStyleSelector::pseudoStyleRulesForElement):
        (WebCore::operator==):
        (WebCore::operator!=):
        (WebCore::CSSStyleSelector::findFromMatchedDeclarationCache):
        (WebCore::CSSStyleSelector::addToMatchedDeclarationCache):
        (WebCore::CSSStyleSelector::applyMatchedDeclarations):
        * css/CSSStyleSelector.h:
        (WebCore::CSSStyleSelector::MatchRanges::MatchRanges):
        (WebCore::CSSStyleSelector::MatchResult::MatchResult):

2012-01-19  Eric Carlson  <eric.carlson@apple.com>

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

        Reviewed by Darin Adler.

        Notify the media element when tracks are added to and removed from a document instead of
        a tree because we don't want to trigger loading unless a track element is in the document.

        Test: media/track/track-delete-during-setup.html

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::trackWasRemoved): Renamed from trackWillBeRemoved because it is
            now called after removal.
        * html/HTMLMediaElement.h:

        * html/HTMLTrackElement.cpp:
        (WebCore::HTMLTrackElement::insertedIntoDocument): Was insertedIntoTree. Use this instead
            because we care about when a track is inserted and removed from a document, not a tree.
        (WebCore::HTMLTrackElement::removedFromDocument): Ditto.
        * html/HTMLTrackElement.h:

2012-01-18  Robert Hogan  <robert@webkit.org>

        Hit ASSERTION FAILED: table()->collapseBorders() on techcrunch.com
        https://bugs.webkit.org/show_bug.cgi?id=76405

        Reviewed by Julien Chaffraix.

        Tests: fast/css/nested-table-with-collapsed-borders.html

        Change recalcCollapsedBorders() so that it only collects border values for the current
        table. Calculating the borders for nested tables was wrong as well as wasting cycles, though it would never
        have impacted rendering since a cell only paints the borders that match its own.

        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::recalcCollapsedBorders):

2012-01-18  Jer Noble  <jer.noble@apple.com>

        Make WebAudio API const-correct.
        https://bugs.webkit.org/show_bug.cgi?id=76573

        Reviewed by Daniel Bates.

        No new tests; no net change in functionality, so covered by existing tests.

        The non-const data() accessor was renamed mutableData() to expose const-correctness
        bugs during compile time:
        * platform/audio/AudioChannel.h:
        (WebCore::AudioChannel::mutableData):

        The following functions were made const correct:
        * platform/audio/AudioArray.h:
        (WebCore::AudioArray::copyToRange):
        * platform/audio/AudioBus.h:
        (WebCore::AudioBus::createBufferFromRange):
        (WebCore::AudioBus::createBySampleRateConverting):
        (WebCore::AudioBus::createByMixingToMono):
        * platform/audio/FFTConvolver.cpp:
        (WebCore::FFTConvolver::process):
        * platform/audio/FFTConvolver.h:
        * platform/audio/FFTFrame.cpp:
        (WebCore::FFTFrame::doPaddedFFT):
        (WebCore::FFTFrame::doFFT):
        * platform/audio/FFTFrame.h:
        * platform/audio/ReverbConvolverStage.cpp:
        (WebCore::ReverbConvolverStage::ReverbConvolverStage):
        (WebCore::ReverbConvolverStage::process):
        * platform/audio/ReverbConvolverStage.h:
        * platform/audio/ReverbInputBuffer.cpp:
        (WebCore::ReverbInputBuffer::write):
        * platform/audio/ReverbInputBuffer.h:
        * platform/audio/SincResampler.cpp:
        (WebCore::SincResampler::process):
        * platform/audio/SincResampler.h:
        * platform/audio/ZeroPole.cpp:
        (WebCore::ZeroPole::process):
        * platform/audio/ZeroPole.h:
        * platform/audio/AudioBus.cpp:
        (WebCore::AudioBus::channelByType):
        * platform/audio/AudioBus.h:
        (WebCore::AudioBus::gain):
        * platform/audio/AudioDSPKernelProcessor.cpp:
        (WebCore::AudioDSPKernelProcessor::process):
        * platform/audio/AudioDSPKernelProcessor.h:
        * platform/audio/AudioProcessor.h:
        * platform/audio/DynamicsCompressor.cpp:
        (WebCore::DynamicsCompressor::process):
        * platform/audio/DynamicsCompressor.h:
        * platform/audio/DynamicsCompressorKernel.cpp:
        (WebCore::DynamicsCompressorKernel::process):
        * platform/audio/DynamicsCompressorKernel.h:
        * platform/audio/EqualPowerPanner.cpp:
        (WebCore::EqualPowerPanner::pan):
        * platform/audio/EqualPowerPanner.h:
        * platform/audio/HRTFElevation.h:
        (WebCore::HRTFElevation::numberOfAzimuths):
        * platform/audio/HRTFPanner.cpp:
        (WebCore::HRTFPanner::pan):
        * platform/audio/HRTFPanner.h:
        * platform/audio/Panner.h:
        * platform/audio/Reverb.cpp:
        (WebCore::Reverb::process):
        * platform/audio/Reverb.h:
        * platform/audio/ReverbConvolver.cpp:
        (WebCore::ReverbConvolver::process):
        * platform/audio/ReverbConvolver.h:
        * platform/audio/ffmpeg/FFTFrameFFMPEG.cpp:
        (WebCore::FFTFrame::doFFT):
        * platform/audio/mkl/FFTFrameMKL.cpp:
        (WebCore::FFTFrame::doFFT):

        The following functions were modified to use the renamed mutableData() accessor:
        * platform/audio/AudioBus.cpp:
        (WebCore::AudioBus::processWithGainFromMonoStereo):
        (WebCore::AudioBus::copyWithSampleAccurateGainValuesFrom):
        * platform/audio/AudioChannel.cpp:
        (WebCore::AudioChannel::scale):
        (WebCore::AudioChannel::copyFrom):
        (WebCore::AudioChannel::copyFromRange):
        (WebCore::AudioChannel::sumFrom):
        * platform/audio/AudioDSPKernelProcessor.cpp:
        (WebCore::AudioDSPKernelProcessor::process):
        * platform/audio/AudioResampler.cpp:
        (WebCore::AudioResampler::process):
        * platform/audio/DynamicsCompressor.cpp:
        (WebCore::DynamicsCompressor::process):
        * platform/audio/EqualPowerPanner.cpp:
        (WebCore::EqualPowerPanner::pan):
        * platform/audio/HRTFKernel.cpp:
        (WebCore::extractAverageGroupDelay):
        (WebCore::HRTFKernel::HRTFKernel):
        (WebCore::HRTFKernel::createImpulseResponse):
        * platform/audio/HRTFPanner.cpp:
        (WebCore::HRTFPanner::pan):
        * platform/audio/MultiChannelResampler.cpp:
        (WebCore::MultiChannelResampler::process):
        * platform/audio/Reverb.cpp:
        (WebCore::Reverb::process):
        * platform/audio/ReverbConvolver.cpp:
        (WebCore::ReverbConvolver::ReverbConvolver):
        (WebCore::ReverbConvolver::process):
        * platform/audio/mac/AudioFileReaderMac.cpp:
        (WebCore::AudioFileReader::createBus):
        * platform/audio/mac/FFTFrameMac.cpp:
        (WebCore::FFTFrame::doFFT):
        * webaudio/AudioBufferSourceNode.cpp:
        (WebCore::AudioBufferSourceNode::process):
        (WebCore::AudioBufferSourceNode::renderFromBuffer):
        * webaudio/BiquadProcessor.cpp:
        (WebCore::BiquadProcessor::process):
        * webaudio/JavaScriptAudioNode.cpp:
        (WebCore::JavaScriptAudioNode::process):
        * webaudio/OfflineAudioDestinationNode.cpp:
        (WebCore::OfflineAudioDestinationNode::render):
        * webaudio/RealtimeAnalyser.cpp:
        (WebCore::RealtimeAnalyser::writeInput):
        * webaudio/WaveShaperProcessor.cpp:
        (WebCore::WaveShaperProcessor::process):

2012-01-19  Vsevolod Vlasov  <vsevik@chromium.org>

        Unreviewed, inspector closure compilation fix.

        * inspector/front-end/ScriptsPanel.js:
        * inspector/front-end/TabbedEditorContainer.js:

2012-01-19  David Hyatt  <hyatt@apple.com>

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

        Before landing support for centering, fix the keyword value to match the latest draft.
        The new keyword is "contain" instead of "bounds."

        Revised the existing parsing tests to reflect the updated value.

        Reviewed by Dan Bernstein.

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):
        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        (WebCore::CSSPrimitiveValue::operator LineGridSnap):
        * css/CSSValueKeywords.in:
        * rendering/style/RenderStyleConstants.h:

2012-01-19  Joi Sigurdsson  <joi@chromium.org>

        Enable use of precompiled headers in Chromium port on Windows.

        Bug 76381 - Use precompiled headers in Chromium port on Windows
        https://bugs.webkit.org/show_bug.cgi?id=76381

        Reviewed by Tony Chang.

        No new tests needed; if the change builds and existing tests pass
        that should provide enough coverage.

        * WebCore.gyp/WebCore.gyp: Include WinPrecompile.gypi.

2012-01-19  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Switching tabs in TabbedEditorContainer should reveal selected script in navigator.
        https://bugs.webkit.org/show_bug.cgi?id=76636

        Reviewed by Pavel Feldman.

        Renamed FileSelector's ScriptSelected event into FileSelected, added EditorSelected
        event to EditorContainer.
        Renamed _showSourceFrame into _showFile.
        Made _uiSourceCodeRemoved reuse _removeSourceFrame.

        * inspector/front-end/ScriptsNavigator.js:
        (WebInspector.ScriptsNavigator.prototype.scriptSelected):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype._uiSourceCodeRemoved):
        (WebInspector.ScriptsPanel.prototype._showAndRevealInFileSelector):
        (WebInspector.ScriptsPanel.prototype._editorSelected):
        (WebInspector.ScriptsPanel.prototype._fileSelected):
        (WebInspector.ScriptsPanel.ComboBoxFileSelector.prototype._goBack):
        (WebInspector.ScriptsPanel.ComboBoxFileSelector.prototype._goForward):
        (WebInspector.ScriptsPanel.ComboBoxFileSelector.prototype._filesSelectChanged):
        * inspector/front-end/TabbedEditorContainer.js:
        (WebInspector.TabbedEditorContainer):
        (WebInspector.TabbedEditorContainer.prototype._tabSelected):

2012-01-19  Mihnea Ovidenie  <mihnea@adobe.com>

        [CSSRegions]Add support for background-color in region styling
        https://bugs.webkit.org/show_bug.cgi?id=71488

        Reviewed by David Hyatt.

        This patch enables region styling again. The region styling tests were also added back. 
        With the improvements from https://bugs.webkit.org/show_bug.cgi?id=76265, hopefully we will not see the same 3% regressions
        in performance.

        * rendering/RenderObject.h:
        (WebCore::RenderObject::style):

2012-01-16  Jer Noble  <jer.noble@apple.com>

        Crash at WebCore::MediaControlRootElement::makeOpaque + 97
        https://bugs.webkit.org/show_bug.cgi?id=76391

        Reviewed by John Sullivan.

        No new tests; Speculative fix for crash.

        Crash report data suggests this crash is occurring as the document is being
        closed.  Check the nullity of document()->page() before deref-ing.

        * html/shadow/MediaControlElements.cpp:
        (WebCore::MediaControlPanelElement::makeOpaque):

2012-01-19  Ken Buchanan <kenrb@chromium.org>

        Layout Test fast/text/international/spaces-combined-in-vertical-text.html is failing
        https://bugs.webkit.org/show_bug.cgi?id=75787

        Reviewed by Simon Fraser.

        This is a tweak to my patch in r104322. On some platforms
        RenderCombineText::combineText() can abort early during inline
        iteration, causing this loop in skipLeadingWhitespace to spin,
        hence the layout test timeouts. This patch accounts for that
        condition and makes the loop iteration more robust.

        No new test because this is fixing a failure on an existing test.

        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::LineBreaker::skipLeadingWhitespace):

2012-01-19  Jer Noble  <jer.noble@apple.com>

        HRTFPanner not rendering correctly on mac port
        https://bugs.webkit.org/show_bug.cgi?id=76397

        Reviewed by Eric Carlson.

        No new tests; HRTF results are currently not testable.

        Re-generate the Composite.wav file from its constituent azimuth & elevation files.

        * platform/audio/resources/Composite.wav:

2012-01-19  David Hyatt  <hyatt@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=76577
        
        Fix crash when nested line grids are used. Make sure to bail out if no line grid
        is found rather than crashing.

        Reviewed by Dan Bernstein.

        Added fast/line-grid/line-grid-nested.html.

        * rendering/LayoutState.cpp:
        (WebCore::LayoutState::establishLineGrid):

2012-01-18  Enrica Casucci  <enrica@apple.com>

        editingAttributedStringFromRange in WebHTMLConverter does not handle NSUnderlineStyleAttributeName.
        https://bugs.webkit.org/show_bug.cgi?id=76588
        <rdar://problem/9325183>

        Reviewed by Dan Bernstein.

        Added TestWebKitAPI test.

        * platform/mac/HTMLConverter.mm:
        (+[WebHTMLConverter editingAttributedStringFromRange:]):

2012-01-18  Alexander Pavlov  <apavlov@chromium.org>

        Web Inspector: Implement screen resolution emulation backend
        https://bugs.webkit.org/show_bug.cgi?id=76532

        Reviewed by Pavel Feldman.

        The emulation affects [min-|max-]device-(width|height) media queries, window.screen.(width|height),
        and window.inner(Width|Height).

        Test: inspector/styles/override-screen-size.html

        * css/MediaQueryEvaluator.cpp:
        (WebCore::device_heightMediaFeatureEval): Apply device-height override if necessary.
        (WebCore::device_widthMediaFeatureEval): Apply device-width override if necessary.
        * inspector/Inspector.json:
        * inspector/InspectorCSSAgent.cpp:
        (WebCore::InspectorCSSAgent::InspectorCSSAgent):
        (WebCore::InspectorCSSAgent::startSelectorProfiler):
        (WebCore::InspectorCSSAgent::stopSelectorProfilerImpl):
        (WebCore::InspectorCSSAgent::willMatchRule):
        (WebCore::InspectorCSSAgent::didMatchRule):
        (WebCore::InspectorCSSAgent::willProcessRule):
        (WebCore::InspectorCSSAgent::didProcessRule):
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::applyScreenWidthOverrideImpl):
        (WebCore::InspectorInstrumentation::applyScreenHeightOverrideImpl):
        * inspector/InspectorInstrumentation.h:
        (WebCore::InspectorInstrumentation::applyScreenWidthOverride):
        (WebCore::InspectorInstrumentation::applyScreenHeightOverride):
        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::InspectorPageAgent):
        (WebCore::InspectorPageAgent::restore):
        (WebCore::InspectorPageAgent::disable):
        (WebCore::InspectorPageAgent::setScreenSizeOverride):
        (WebCore::InspectorPageAgent::applyScreenWidthOverride):
        (WebCore::InspectorPageAgent::applyScreenHeightOverride):
        (WebCore::InspectorPageAgent::updateFrameViewFixedLayout):
        (WebCore::InspectorPageAgent::clearFrameViewFixedLayout):
        (WebCore::InspectorPageAgent::setFrameViewFixedLayout):
        * inspector/InspectorPageAgent.h:
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::innerHeight): Apply height override if necessary.
        (WebCore::DOMWindow::innerWidth): Apply width override if necessary.
        * page/Screen.cpp:
        (WebCore::Screen::height): Apply height override if necessary.
        (WebCore::Screen::width): Apply width override if necessary.

2012-01-18  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        [Qt] Handle the layers visible rect calculation on the web process.
        https://bugs.webkit.org/show_bug.cgi?id=74720

        Reviewed by Noam Rosenthal.

        Remove all visible rect calculation related code from TextureMapperNode.

        * platform/graphics/texmap/TextureMapperNode.cpp:
        * platform/graphics/texmap/TextureMapperNode.h:

2012-01-19  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Improve focus switching in scripts panel.
        https://bugs.webkit.org/show_bug.cgi?id=76628

        Reviewed by Pavel Feldman.

        * inspector/front-end/Dialog.js:
        (WebInspector.Dialog.prototype._hide):
        * inspector/front-end/FilteredItemSelectionDialog.js:
        (WebInspector.FilteredItemSelectionDialog.prototype.onEnter):
        (WebInspector.JavaScriptOutlineDialog.prototype.selectItem):
        * inspector/front-end/ScriptsNavigator.js:
        (WebInspector.ScriptsNavigator.prototype.get defaultFocusedElement):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype._showSourceLine):

2012-01-19  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Add isSelfOrAnsector and isSelfOrDescendant methods to utilities.
        https://bugs.webkit.org/show_bug.cgi?id=76618

        Added isSelfOrAncestor, isSelfOrDescendant and WebInspector.restoreFocusFromElement methods.

        Reviewed by Pavel Feldman.

        * inspector/front-end/Drawer.js:
        * inspector/front-end/HelpScreen.js:
        (WebInspector.HelpScreen.prototype._onBlur):
        * inspector/front-end/MetricsSidebarPane.js:
        (WebInspector.MetricsSidebarPane.prototype._handleKeyDown):
        * inspector/front-end/Popover.js:
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype.showUISourceCode):
        * inspector/front-end/StylesSidebarPane.js:
        ():
        * inspector/front-end/TextPrompt.js:
        (WebInspector.TextPrompt.prototype.detach):
        (WebInspector.TextPrompt.prototype.isCaretAtEndOfPrompt):
        * inspector/front-end/TextViewer.js:
        (WebInspector.TextEditorMainPanel.prototype._updateSelectionOnStartEditing):
        (WebInspector.TextEditorMainPanel.prototype._handleDOMUpdates):
        * inspector/front-end/UIUtils.js:
        (WebInspector.startEditing.cleanUpAfterEditing):
        (WebInspector.restoreFocusFromElement):
        * inspector/front-end/utilities.js:
        (Element.prototype.isInsertionCaretInside):
        ():

2012-01-19  Andreas Kling  <awesomekling@apple.com>

        DynamicNodeList: Simplify internal Caches object.
        <http://webkit.org/b/76600>

        Reviewed by Ryosuke Niwa.

        Move m_caches from DynamicSubtreeNodeList and ChildNodeList up into DynamicNodeList.
        Remove the inheritance from RefCounted and store it simply as "Caches m_caches"
        This avoids one heap allocation per DynamicNodeList. Also reordered the Caches members
        to pack slightly better on 64-bit.

        * dom/ChildNodeList.cpp:
        (WebCore::ChildNodeList::ChildNodeList):
        (WebCore::ChildNodeList::length):
        (WebCore::ChildNodeList::item):
        * dom/ChildNodeList.h:
        * dom/DynamicNodeList.cpp:
        (WebCore::DynamicSubtreeNodeList::DynamicSubtreeNodeList):
        (WebCore::DynamicSubtreeNodeList::length):
        (WebCore::DynamicSubtreeNodeList::itemForwardsFromCurrent):
        (WebCore::DynamicSubtreeNodeList::itemBackwardsFromCurrent):
        (WebCore::DynamicSubtreeNodeList::item):
        * dom/DynamicNodeList.h:
        (WebCore::DynamicNodeList::invalidateCache):
        * dom/Node.cpp:
        (WebCore::NodeRareData::clearChildNodeListCache):

2012-01-19  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: TabbedPane closeAllTabs does not close all tabs.
        https://bugs.webkit.org/show_bug.cgi?id=76624

        Reviewed by Pavel Feldman.

        * inspector/front-end/ScriptsPanel.js:
        * inspector/front-end/TabbedPane.js:
        (WebInspector.TabbedPane.prototype.closeAllTabs):

2012-01-18  Rob Buis  <rbuis@rim.com>

        image/pjpeg not supported for decoding on BlackBerry platform
        https://bugs.webkit.org/show_bug.cgi?id=76595

        Reviewed by Antonio Gomes.

        Add image/pjpeg as one of the supported types for image decoding on BlackBerry platform.

        * platform/MIMETypeRegistry.cpp:
        (WebCore::initializeSupportedImageMIMETypes):

2012-01-19  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r105402.
        http://trac.webkit.org/changeset/105402
        https://bugs.webkit.org/show_bug.cgi?id=76623

        Layout test problems (Requested by WildFox on #webkit).

        * css/svg.css:
        (svg):
        * rendering/RenderBox.h:
        (WebCore::RenderBox::computeIntrinsicRatioInformation):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::calculateImageIntrinsicDimensions):
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::computeReplacedLogicalWidth):
        (WebCore::RenderImage::computeIntrinsicRatioInformation):
        * rendering/RenderImage.h:
        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::computeReplacedLogicalWidth):
        (WebCore::RenderReplaced::logicalHeightIsAuto):
        (WebCore::RenderReplaced::computeReplacedLogicalHeight):
        * rendering/RenderReplaced.h:
        * rendering/svg/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::computeIntrinsicRatioInformation):
        (WebCore::RenderSVGRoot::computeReplacedLogicalWidth):
        (WebCore::RenderSVGRoot::computeReplacedLogicalHeight):
        * rendering/svg/RenderSVGRoot.h:
        * rendering/svg/RenderSVGViewportContainer.h:
        * svg/SVGLengthContext.cpp:
        (WebCore::SVGLengthContext::determineViewport):
        * svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::viewport):
        (WebCore::SVGSVGElement::parseMappedAttribute):
        (WebCore::updateCSSForAttribute):
        (WebCore::SVGSVGElement::svgAttributeChanged):
        (WebCore::SVGSVGElement::localCoordinateSpaceTransform):
        (WebCore::SVGSVGElement::currentViewBoxRect):
        * svg/SVGSVGElement.h:
        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::size):
        (WebCore::SVGImage::computeIntrinsicDimensions):
        * svg/graphics/SVGImage.h:

2012-01-19  Alexis Menard  <alexis.menard@openbossa.org>

        Strange Result for getComputedStyle on borderWidth set in em
        https://bugs.webkit.org/show_bug.cgi?id=18294

        Reviewed by Tony Chang.

        BorderValue stores its width on a 12 bits unsigned. This patch 
        increase it to 27. The patch also modify the way to set the 
        width or to get it, we now use a unsigned rather than a short.

        Test: fast/css/border-width-large.html

        * css/CSSPrimitiveValue.cpp:
        (WebCore::CSSPrimitiveValue::computeLength):
        * css/CSSStyleApplyProperty.cpp:
        (WebCore::CSSStyleApplyProperty::CSSStyleApplyProperty):
        * page/animation/AnimationBase.cpp:
        (WebCore::blendFunc):
        (WebCore::AnimationBase::ensurePropertyMap):
        * platform/animation/AnimationUtilities.h:
        (WebCore::blend):
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::adjustStyle):
        * rendering/style/BorderData.h:
        (WebCore::BorderData::borderLeftWidth):
        (WebCore::BorderData::borderRightWidth):
        (WebCore::BorderData::borderTopWidth):
        (WebCore::BorderData::borderBottomWidth):
        * rendering/style/BorderValue.h:
        (WebCore::BorderValue::width):
        * rendering/style/RenderStyle.cpp:
        * rendering/style/RenderStyle.h:
        (WebCore::RenderStyleBitfields::borderLeftWidth):
        (WebCore::RenderStyleBitfields::borderRightWidth):
        (WebCore::RenderStyleBitfields::borderTopWidth):
        (WebCore::RenderStyleBitfields::borderBottomWidth):
        (WebCore::RenderStyleBitfields::setBorderLeftWidth):
        (WebCore::RenderStyleBitfields::setBorderRightWidth):
        (WebCore::RenderStyleBitfields::setBorderTopWidth):
        (WebCore::RenderStyleBitfields::setBorderBottomWidth):
        (WebCore::RenderStyleBitfields::initialBorderWidth):
        (WebCore::RenderStyleBitfields::initialColumnRuleWidth):
        (WebCore::RenderStyleBitfields::initialOutlineWidth):

2012-01-18  Nikolas Zimmermann  <nzimmermann@rim.com>

        Differentiate between SVG/CSS width/height attributes/properties
        https://bugs.webkit.org/show_bug.cgi?id=76447

        Reviewed by Antti Koivisto.

        Remove a gazillion of hacks out of our SVG implementation, by correctly differentiating between the
        SVG width/height attributes and the CSS width/height properties. They need to be treated independently
        when handling the intrinsic size negotiation, according to both CSS 2.1 & SVG 1.1 2nd Edition specs.

        Fixes several bugs in the LayoutTests/svg/custom/*object*sizing tests, we now match Opera perfectly. FF still has some bugs, and IE9 as well.

        * css/svg.css: Remove hardcoded, width/height: 100% on <svg>.
        * rendering/RenderBox.h:
        (WebCore::RenderBox::computeIntrinsicRatioInformation): Make 'intrinsicRatio' a float, and add 'intrinsicSize' as seperated FloatSize, to avoid confusion.
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::calculateImageIntrinsicDimensions): Add forgotton case for percentage intrinsic sizes, that lead to workarounds in other places, that can now be removed.
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::computeReplacedLogicalWidth): Directly use imageHasRelativeWidth/Height(), it does differentiate between SVG/CSS width/height attributes/properties now.
        (WebCore::RenderImage::computeIntrinsicRatioInformation): Adapt to 'intrinsicRatio' argument change.
        * rendering/RenderImage.h: Ditto.
        * rendering/RenderReplaced.cpp: Refactor existing code, break out firstContainingBlockWithLogicalWidth/hasReplacedLogicalWidth/hasReplacedLogicalHeight/hasAutoHeightOrContainingBlockWithAutoHeight.
        (WebCore::firstContainingBlockWithLogicalWidth): Refactored.
        (WebCore::RenderReplaced::hasReplacedLogicalWidth): Refactored, and exported, so SVGSVGElement::widthAttributeEstablishesViewport() can use it.
        (WebCore::hasAutoHeightOrContainingBlockWithAutoHeight): Refactored.
        (WebCore::RenderReplaced::hasReplacedLogicalHeight): Refactored, and exported, so SVGSVGElement::heightAttributeEstablishesViewport() can use it.
        (WebCore::RenderReplaced::computeReplacedLogicalWidth): Adapt to 'intrinsicRatio' changes ('intrinsicSize' is now decoupled from it). Refactor so that RenderSVGRoot can directly use it as well!
        (WebCore::RenderReplaced::computeReplacedLogicalHeight): Ditto.
        * rendering/RenderReplaced.h:
        * rendering/svg/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::computeIntrinsicRatioInformation): Only determine the intrinsic size & ratio using the SVG width/height attributes, not the CSS width/height properties, as it's specified.
        (WebCore::resolveLengthAttributeForSVG): Helper function for computeReplacedLogicalWidth/Height, that scales Length values that come from SVG width/height attributes.
        (WebCore::RenderSVGRoot::computeReplacedLogicalWidth): Finally remove home-brewn size computation logic - it can be fully shared with RenderReplaced now that we inherit from it.
        (WebCore::RenderSVGRoot::computeReplacedLogicalHeight): Ditto.
        * rendering/svg/RenderSVGRoot.h:
        * rendering/svg/RenderSVGViewportContainer.h:
        (WebCore::RenderSVGViewportContainer::viewport): Export viewport() for easier length resolution.
        * svg/SVGLengthContext.cpp:
        (WebCore::SVGLengthContext::determineViewport): Finally clean up this hell, and make it easy to understand. Only need to resolve lengths against either RenderSVGRoot or RenderSVGViewportContainer now.
        * svg/SVGSVGElement.cpp: 
        (WebCore::SVGSVGElement::viewport): Remove wrong code and disable this. Its not used, and we have no test coverage for it. Its current implementation didn't make any sense.
        (WebCore::SVGSVGElement::parseMappedAttribute): Remove hacks mapping SVG width/height attributes to CSS properties.
        (WebCore::SVGSVGElement::svgAttributeChanged): Ditto.
        (WebCore::SVGSVGElement::localCoordinateSpaceTransform): Refactored.
        (WebCore::SVGSVGElement::currentViewBoxRect): Ditto.
        (WebCore::SVGSVGElement::currentViewportSize): Ditto.
        (WebCore::SVGSVGElement::widthAttributeEstablishesViewport): Main logic determining if the SVG or CSS properties establish the viewport -  a direct transliteration from the spec.
        (WebCore::SVGSVGElement::heightAttributeEstablishesViewport): Ditto.
        (WebCore::SVGSVGElement::intrinsicWidth): Helper.
        (WebCore::SVGSVGElement::intrinsicHeight): Ditto.
        * svg/SVGSVGElement.h:
        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::size): Cleanup code.
        (WebCore::SVGImage::hasRelativeWidth): Added, avoids hacks in RenderBoxModelObject.
        (WebCore::SVGImage::hasRelativeHeight): Ditto.
        (WebCore::SVGImage::computeIntrinsicDimensions): Make use of new SVGSVGElement::computeIntrinsicDimensions.
        * svg/graphics/SVGImage.h:

2012-01-19  Ryosuke Niwa  <rniwa@webkit.org>

        drop event isn't fired for contentEditable in edit drag
        https://bugs.webkit.org/show_bug.cgi?id=57185

        Reviewed by Adam Barth.

        Dispatch drop and dragend events after edit drag per HTML5 spec:
        http://www.whatwg.org/specs/web-apps/current-work/multipage/dnd.html#drag-and-drop-processing-model

        There are two major differences between the spec and WebKit's new behavior:

        While the spec says we have to insert the dragged contents immediately after dispatching drop event
        and delete the source in the default event handler of dragend event, doing so in WebKit is extremely
        difficult because of the way we manage the selection. Instead, we continue to delete the source
        and insert the dragged contents immediately after the drop event; this behavior matches that of Firefox 9.

        When the dragged contents and the destination of the move is in the same text node, ReplaceSelectionCommand
        may end up replacing it with a new text node. But this removal causes a problem when EventHandler uses
        the node to dispatch dragend event because the node is "orphaned" from its parent at that point. To mitigate
        this issue, we update the dragState's m_dragSrc when the node is orphaned by the edit drag. While this behavior
        may differ from the spec and other browsers, not delivering dragend to the editing host seems strictly worse than
        dispatching it at the slightly wrong target.

        Tests: fast/events/moving-text-should-fire-drop-and-dragend-events-2.html
               fast/events/moving-text-should-fire-drop-and-dragend-events.html

        * page/DragController.cpp:
        (WebCore::DragController::performDrag): Dispatch drop event even when m_isHandlingDrag is true as long
        as DragDestinationActionDHTML is an acceptable action.
        (WebCore::DragController::concludeEditDrag): Call updateDragStateAfterEditDragIfNeeded after inserting
        the dragged contents. This is necessary when ReplaceSelectionCommand or MoveSelectionCommand modifies
        the source node while inserting the dragged contents.
        * page/EventHandler.cpp:
        (WebCore::EventHandler::performDragAndDrop): Clear the drag state only if drop event's default action
        was prevented so that we dispatch dragevent event later.
        (WebCore::EventHandler::updateDragStateAfterEditDragIfNeeded): Update dragState's m_dragSrc when the node
        is orphaned. See above for the rationale.
        * page/EventHandler.h:

2012-01-18  Kinuko Yasuda  <kinuko@chromium.org>

        Cleanup: Move chrome-specific filesystem type handling code (for FileSystem API) under chromium directory
        https://bugs.webkit.org/show_bug.cgi?id=76551

        Reviewed by Darin Fisher.

        Moved the implementation of crackFileSystemURL() and toURL() from
        WebCore/fileapi/DOMFileSystemBase into WebCore/platform/AsyncFileSystem
        so that each platform can extend/implement their behavior if necessary.

        No new tests since this patch has no functionality changes. (Existing
        tests should pass)

        * fileapi/DOMFileSystemBase.cpp: Moved the implementation of
        crackFileSystemURL() to AsyncFileSystem
        (WebCore::DOMFileSystemBase::crackFileSystemURL):
        * fileapi/DOMFileSystemBase.h:
        * fileapi/EntryBase.cpp: Moved the implementation of toURL() to AsyncFileSystem
        (WebCore::EntryBase::toURL):
        * page/DOMWindow.cpp: Removed chrome-specific type handling code.
        (WebCore::DOMWindow::webkitRequestFileSystem):
        * page/DOMWindow.h: Removed chrome-specific filesystem type
        (EXTERNAL).
        * platform/AsyncFileSystem.cpp: Added default implementation of toURL() and crackFileSystemURL()
        (WebCore::AsyncFileSystem::toURL):
        (WebCore::AsyncFileSystem::crackFileSystemURL):
        * platform/AsyncFileSystem.h:
        * workers/WorkerContext.cpp: Removed chrome-specific type handling code.
        (WebCore::WorkerContext::webkitRequestFileSystem):
        (WebCore::WorkerContext::webkitRequestFileSystemSync):

2012-01-19  Mihnea Ovidenie  <mihnea@adobe.com>

        Cache RenderStyle pointer as a method to avoid performance regression for region styling
        https://bugs.webkit.org/show_bug.cgi?id=76265

        Reviewed by David Hyatt.

        No new tests since this is just refactoring.
        When region styling was enabled in https://bugs.webkit.org/show_bug.cgi?id=71488,
        it introduced a performance regression due to the change of RenderObject::style() method.
        This patch tries to avoid a new performance regression when region styling will be enabled again.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::MarginInfo::MarginInfo):
        (WebCore::RenderBlock::styleWillChange):
        (WebCore::RenderBlock::layoutBlock):
        (WebCore::RenderBlock::layoutBlockChildren):
        (WebCore::RenderBlock::layoutBlockChild):
        (WebCore::RenderBlock::computePreferredLogicalWidths):
        (WebCore::getBorderPaddingMargin):
        (WebCore::RenderBlock::computeInlinePreferredLogicalWidths):
        (WebCore::RenderBlock::computeBlockPreferredLogicalWidths):
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::layoutRunsAndFloatsInRange):
        (WebCore::RenderBlock::LineBreaker::nextLineBreak):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::willBeDestroyed):
        (WebCore::RenderBox::styleWillChange):
        (WebCore::RenderBox::styleDidChange):
        (WebCore::RenderBox::updateBoxModelInfoFromStyle):
        (WebCore::RenderBox::computeRectForRepaint):
        (WebCore::RenderBox::computeLogicalWidthInRegion):
        (WebCore::RenderBox::computeLogicalWidthUsing):
        (WebCore::RenderBox::computeLogicalHeight):
        (WebCore::RenderBox::computePercentageLogicalHeight):
        (WebCore::RenderBox::computePositionedLogicalHeight):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::styleWillChange):
        (WebCore::RenderBoxModelObject::updateBoxModelInfoFromStyle):
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::styleDidChange):
        * rendering/RenderText.cpp:
        (WebCore::RenderText::styleDidChange):
        (WebCore::RenderText::computePreferredLogicalWidths):

2012-01-19  Kazuhiro Inaba  <kinaba@chromium.org>

        [Chromium] Random characters got rendered as empty boxes or with incorrect glyphs even when a font is present
        https://bugs.webkit.org/show_bug.cgi?id=76508

        Reviewed by Kent Tamura.

        Wrapped GetGlyphIndices() API calls so that when they failed we trigger font
        loading outside the sandbox and retry the call.

        No new auto tests since the bug involves the system's occasional cache behavior
        and thus there's no reliable way to reproduce and test the situation.

        * platform/graphics/chromium/GlyphPageTreeNodeChromiumWin.cpp:
        (WebCore::getGlyphIndices):
        GDI call wrapper ensuring fonts to be loaded.
        (WebCore::initSpaceGlyph):
        Changed to use the wrapper function.
        (WebCore::fillBMPGlyphs):
        Changed to use the wrapper function.
        Introduced scoped HDC management by HWndDC.
        (WebCore::GlyphPage::fill):

2012-01-19  Adam Barth  <abarth@webkit.org>

        createAttributeNS should understand that "xmlns" is allowed in the http://www.w3.org/2000/xmlns/
        https://bugs.webkit.org/show_bug.cgi?id=76579

        Reviewed by Eric Seidel.

        This patch cleans up a tiny corner case involving the (somewhat
        magical) xmlns attribute that we uncovered when working on
        setAttributeNS.

        Tests: fast/dom/Document/createAttributeNS-namespace-err.html

        * dom/Document.cpp:
        (WebCore::Document::importNode):
        (WebCore::Document::hasValidNamespaceForElements):
        (WebCore::Document::hasValidNamespaceForAttributes):
        (WebCore::Document::createElementNS):
        (WebCore::Document::createAttributeNS):
        * dom/Document.h:
        * dom/Element.cpp:
        (WebCore::Element::setAttributeNS):

2012-01-19  Roland Steiner  <rolandsteiner@chromium.org>

        Unreviewed build fix for DEBUG: remove comparison of an unsigned variable with '>= 0' in ASSERT.

        No new tests. (no functionality change)

        * webaudio/AudioNodeOutput.cpp:
        (WebCore::AudioNodeOutput::AudioNodeOutput):

2012-01-18  Li Yin  <li.yin@intel.com>

        [v8] Low efficiency of writing long string from web application to plugin.
        https://bugs.webkit.org/show_bug.cgi?id=76592

        The efficiency will be improved by 300 times in the best case, when the
        size of string reaches 1MB.

        Reviewed by Adam Barth.

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

2012-01-18  Adam Barth  <abarth@webkit.org>

        Assigning to Element.prefix should throw exception when using illegal characters
        https://bugs.webkit.org/show_bug.cgi?id=76589

        Reviewed by Eric Seidel.

        This patch fixes a FIXME and implements the INVALID_CHARACTER_ERR
        exception described in
        http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-NodeNSPrefix

        Tests: fast/dom/Element/prefix-setter-exception.html

        * dom/Node.cpp:
        (WebCore::isValidNameStartCharacter):
        (WebCore::isValidNameCharacter):
        (WebCore::hasInvalidValidNameCharacters):
        (WebCore::Node::checkSetPrefix):

2012-01-18  Shinya Kawanaka  <shinyak@google.com>

        ShadowContent query should be able to have fallback elements.
        https://bugs.webkit.org/show_bug.cgi?id=75306

        Reviewed by Hajime Morita.

        When no elements are selected by a shadow content element selector query,
        light children are selected as a fallback elements.

        Test: fast/dom/shadow/shadow-contents-fallback.html

        * dom/NodeRenderingContext.cpp:
        (WebCore::NodeRenderingContext::NodeRenderingContext):
          Considers fallback phase. When no elements are chosen, the phase is set to 'fallback'.
        (WebCore::NodeRenderingContext::nextRenderer):
          Takes fallback phase into account.
        (WebCore::NodeRenderingContext::previousRenderer): ditto.
        * dom/NodeRenderingContext.h:
        * html/shadow/HTMLContentElement.cpp:
        (WebCore::HTMLContentElement::attach):
          Calculates inclusions before attaching light children.
        * html/shadow/HTMLContentElement.h:
        (WebCore::HTMLContentElement::hasInclusion):

2012-01-18  Kent Tamura  <tkent@chromium.org>

        REGRESSION(r100111): A 'change' event does not fire when a mouse drag
        occurs to switch elements in a listbox <select>
        https://bugs.webkit.org/show_bug.cgi?id=76244

        Reviewed by Hajime Morita.

        Test: fast/forms/select/listbox-drag-in-non-multiple.html

        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::updateSelectedState):
        Do not update m_activeSelectionState for non-multiple <select>.
        (WebCore::HTMLSelectElement::listBoxDefaultEventHandler):
        Use setActiveSelection*Index() and updateListBoxSelection(true) instead
        of updateSelectedState() because updateSelectedState() updates
        m_lastOnChangeSelection and will prevent the mouseup handler from
        dispatching 'change' event.
        We should not call listBoxOnChange() in the mousemove handler in order
        to align the behavior of IE and Firefox.

2012-01-18  Eric Seidel  <eric@webkit.org>

        setAttributeNS should comply with the obscure rules of DOM2, just like createAttributeNS and createElementNS do
        https://bugs.webkit.org/show_bug.cgi?id=76143

        Reviewed by Adam Barth.

        Test: fast/dom/Element/setAttributeNS-namespace-err.html

        * dom/Element.cpp:
        (WebCore::Element::setAttributeNS):

2012-01-18  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r105376.
        http://trac.webkit.org/changeset/105376
        https://bugs.webkit.org/show_bug.cgi?id=76601

        Roll 76493 back in after discussion with jsbell (Requested by
        rolandsteiner on #webkit).

        * bindings/v8/IDBBindingUtilities.cpp:
        (WebCore::injectIDBKeyIntoSerializedValue):

2012-01-18  Ian Vollick  <vollick@chromium.org>

        [chromium] Create a base-class CCAnimation to represent compositor animations
        https://bugs.webkit.org/show_bug.cgi?id=73233

        Adds a kernel for running animations on the chromium compositor
        thread.

        Reviewed by Kenneth Russell.

        * WebCore.gypi:
        * platform/graphics/chromium/cc/CCActiveAnimation.cpp: Added.
        (WebCore::CCActiveAnimation::CCActiveAnimation):
        (WebCore::CCActiveAnimation::setRunState):
        (WebCore::CCActiveAnimation::isFinishedAt):
        (WebCore::CCActiveAnimation::trimTimeToCurrentIteration):
        * platform/graphics/chromium/cc/CCActiveAnimation.h: Added.
        (WebCore::CCActiveAnimation::create):
        (WebCore::CCActiveAnimation::~CCActiveAnimation):
        (WebCore::CCActiveAnimation::group):
        (WebCore::CCActiveAnimation::targetProperty):
        (WebCore::CCActiveAnimation::runState):
        (WebCore::CCActiveAnimation::iterations):
        (WebCore::CCActiveAnimation::setIterations):
        (WebCore::CCActiveAnimation::startTime):
        (WebCore::CCActiveAnimation::setStartTime):
        (WebCore::CCActiveAnimation::isFinished):
        (WebCore::CCActiveAnimation::animationCurve):
        * platform/graphics/chromium/cc/CCAnimationCurve.cpp: Added.
        (WebCore::CCAnimationCurve::toFloatAnimationCurve):
        (WebCore::CCAnimationCurve::toTransformAnimationCurve):
        * platform/graphics/chromium/cc/CCAnimationCurve.h: Added.
        (WebCore::CCAnimationCurve::~CCAnimationCurve):
        (WebCore::CCFloatAnimationCurve::~CCFloatAnimationCurve):
        (WebCore::CCFloatAnimationCurve::type):
        (WebCore::CCTransformAnimationCurve::~CCTransformAnimationCurve):
        (WebCore::CCTransformAnimationCurve::type):
        * platform/graphics/chromium/cc/CCLayerAnimationControllerImpl.cpp: Added.
        (WebCore::CCLayerAnimationControllerImpl::create):
        (WebCore::CCLayerAnimationControllerImpl::CCLayerAnimationControllerImpl):
        (WebCore::CCLayerAnimationControllerImpl::animate):
        (WebCore::CCLayerAnimationControllerImpl::add):
        (WebCore::CCLayerAnimationControllerImpl::getActiveAnimation):
        (WebCore::CCLayerAnimationControllerImpl::hasActiveAnimation):
        (WebCore::CCLayerAnimationControllerImpl::startAnimationsWaitingForNextTick):
        (WebCore::CCLayerAnimationControllerImpl::startAnimationsWaitingForStartTime):
        (WebCore::CCLayerAnimationControllerImpl::startAnimationsWaitingForTargetAvailability):
        (WebCore::CCLayerAnimationControllerImpl::resolveConflicts):
        (WebCore::CCLayerAnimationControllerImpl::purgeFinishedAnimations):
        (WebCore::CCLayerAnimationControllerImpl::tickAnimations):
        * platform/graphics/chromium/cc/CCLayerAnimationControllerImpl.h: Added.
        (WebCore::CCLayerAnimationControllerImplClient::~CCLayerAnimationControllerImplClient):

2012-01-18  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r105331.
        http://trac.webkit.org/changeset/105331
        https://bugs.webkit.org/show_bug.cgi?id=76599

        May have broken Chromium InjectIDBKey browser_test (Requested
        by rolandsteiner on #webkit).

        * bindings/v8/IDBBindingUtilities.cpp:
        (WebCore::injectIDBKeyIntoSerializedValue):

2012-01-18  Raymond Liu  <raymond.liu@intel.com>

        Remove some unused code in AudioContext
        https://bugs.webkit.org/show_bug.cgi?id=76506

        Reviewed by Kenneth Russell.

        No new tests required.

        * webaudio/AudioContext.cpp:
        (WebCore::AudioContext::constructCommon):
        (WebCore::AudioContext::uninitialize):
        * webaudio/AudioContext.h:

2012-01-18  Raymond Liu  <raymond.liu@intel.com>

        Only create AudioBus with required number of channels for AudioNodeOutput
        https://bugs.webkit.org/show_bug.cgi?id=76417

        Reviewed by Kenneth Russell.

        No new tests required.

        * webaudio/AudioNodeOutput.cpp:
        (WebCore::AudioNodeOutput::AudioNodeOutput):
        (WebCore::AudioNodeOutput::setNumberOfChannels):
        (WebCore::AudioNodeOutput::updateInternalBus):
        (WebCore::AudioNodeOutput::updateNumberOfChannels):
        (WebCore::AudioNodeOutput::pull):
        * webaudio/AudioNodeOutput.h:

2012-01-18  Andreas Kling  <awesomekling@apple.com>

        Cache and reuse the NodeList returned by Node::childNodes().
        <http://webkit.org/b/76591>

        Reviewed by Ryosuke Niwa.

        Instead of only caching the DynamicNodeList::Caches for .childNodes on NodeRareData,
        cache the full ChildNodeList object. Lifetime management is left to wrappers who
        invalidate the cached (raw) pointer via Node::removeCachedChildNodeList(), called
        from ~ChildNodeList().

        This is a slight behavior change, in that Node.childNodes === Node.childNodes will
        now be true. This matches the behavior of both Firefox and Opera.

        This reduces memory consumption by 192 kB (on 32-bit) when viewing the full
        HTML5 spec at <http://whatwg.org/c>

        Test: fast/dom/gc-9.html
              fast/dom/node-childNodes-idempotence.html

        * dom/Node.cpp:
        (WebCore::Node::childNodes):
        * dom/NodeRareData.h:
        (WebCore::NodeRareData::NodeRareData):
        (WebCore::NodeRareData::childNodeList):
        (WebCore::NodeRareData::setChildNodeList):

            Only construct one ChildNodeList per Node and store it on NodeRareData for
            retrieval across childNodes() calls.

        * dom/ChildNodeList.h:
        (WebCore::ChildNodeList::create):
        * dom/ChildNodeList.cpp:
        (WebCore::ChildNodeList::ChildNodeList):

            Construct the Caches at creation instead of passing it to the constructor.

        (WebCore::ChildNodeList::reset):

            Added, resets the internal cache.

        (WebCore::ChildNodeList::~ChildNodeList):

            Call Node::removeCachedChildNodeList().

        * dom/DynamicNodeList.cpp:
        * dom/DynamicNodeList.h:

            Have DynamicNodeList (and subclasses) respond "true" to isDynamicNodeList().
            Previously only DynamicSubtreeNodeList (and subclasses) were doing this.
            Without it, JSC may GC our ChildNodeLists prematurely (due to NodeList's
            isReachableFromOpaqueRoots() implementation checking isDynamicNodeList().)

        * dom/Node.h:
        * dom/Node.cpp:
        (WebCore::Node::removeCachedChildNodeList):

            Added for ~ChildNodeList() to remove the pointer to itself from the Node.

        (WebCore::NodeRareData::clearChildNodeListCache):

            Call ChildNodeList::reset().

2012-01-18  James Robinson  <jamesr@chromium.org>

        Unreviewed, rolling out r105366.
        http://trac.webkit.org/changeset/105366
        https://bugs.webkit.org/show_bug.cgi?id=76015

        Breaks CCLayerTreeHostImplTest unit test

        * platform/graphics/chromium/TiledLayerChromium.cpp:
        (WebCore::TiledLayerChromium::pushPropertiesTo):
        (WebCore::TiledLayerChromium::prepareToUpdateTiles):
        * platform/graphics/chromium/cc/CCDrawQuad.h:
        (WebCore::CCDrawQuad::drawsOpaque):
        (WebCore::CCDrawQuad::needsBlending):
        * platform/graphics/chromium/cc/CCQuadCuller.cpp:
        (WebCore::CCQuadCuller::cullOccludedQuads):
        * platform/graphics/chromium/cc/CCSolidColorDrawQuad.cpp:
        (WebCore::CCSolidColorDrawQuad::CCSolidColorDrawQuad):
        * platform/graphics/chromium/cc/CCTileDrawQuad.cpp:
        (WebCore::CCTileDrawQuad::create):
        (WebCore::CCTileDrawQuad::CCTileDrawQuad):
        * platform/graphics/chromium/cc/CCTileDrawQuad.h:
        * platform/graphics/chromium/cc/CCTiledLayerImpl.cpp:
        (WebCore::CCTiledLayerImpl::appendQuads):
        (WebCore::CCTiledLayerImpl::syncTextureId):
        * platform/graphics/chromium/cc/CCTiledLayerImpl.h:

2012-01-18  Thiago Marcos P. Santos  <tmpsantos@gmail.com>

        Save two ID checks on CSS Min/Width property validation
        https://bugs.webkit.org/show_bug.cgi?id=76565

        The same validation is done again in the next case statement. Check for
        CSSValueIntrinsic and CSSValueMinIntrinsic was done twice when the value
        is a number.

        Reviewed by Andreas Kling.

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

2012-01-18  Dana Jansens  <danakj@chromium.org>

        [chromium] Use region reported painted opaque for draw culling
        https://bugs.webkit.org/show_bug.cgi?id=76015

        Reviewed by James Robinson.

        New unit tests in CCQuadCullerTest.cpp and CCTiledLayerImplTest.cpp

        * platform/graphics/chromium/TiledLayerChromium.cpp:
        (WebCore::TiledLayerChromium::pushPropertiesTo):
        (WebCore::TiledLayerChromium::prepareToUpdateTiles):
        * platform/graphics/chromium/cc/CCDrawQuad.h:
        (WebCore::CCDrawQuad::opaqueRect):
        (WebCore::CCDrawQuad::needsBlending):
        * platform/graphics/chromium/cc/CCQuadCuller.cpp:
        (WebCore::CCQuadCuller::cullOccludedQuads):
        * platform/graphics/chromium/cc/CCTileDrawQuad.cpp:
        (WebCore::CCTileDrawQuad::create):
        (WebCore::CCTileDrawQuad::CCTileDrawQuad):
        * platform/graphics/chromium/cc/CCTileDrawQuad.h:
        * platform/graphics/chromium/cc/CCTiledLayerImpl.cpp:
        (WebCore::DrawableTile::opaqueRect):
        (WebCore::DrawableTile::setOpaqueRect):
        (WebCore::CCTiledLayerImpl::appendQuads):
        (WebCore::CCTiledLayerImpl::pushTileProperties):
        * platform/graphics/chromium/cc/CCTiledLayerImpl.h:

2012-01-18  Victoria Kirst  <vrk@chromium.org>

        HTMLMediaElement should fire 'progress' event before 'idle' if it was previously loading
        https://bugs.webkit.org/show_bug.cgi?id=76568

        Reviewed by Eric Carlson.

        This fires a progress event when going from a non-empty state to idle,
        for the same reason that a progress event is fired when going from a
        non-idle state to loaded. Also consolidated logic in a single helper method.

        No new tests because the decision of if/when a user agent sets the network state
        to idle is up to the user agent in this scenario.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::setNetworkState):
        (WebCore::HTMLMediaElement::changeNetworkStateFromLoadingToIdle):
        * html/HTMLMediaElement.h:

2012-01-18  Jon Lee  <jonlee@apple.com>

        [WK2] Sync call for notifications permissions causes flashes on gmail.com
        https://bugs.webkit.org/show_bug.cgi?id=76570
        <rdar://problem/10647155>

        Reviewed by Anders Carlsson and Sam Weinig.

        * WebCore.exp.in: Export SecurityOrigin::toString().

        Add runtime setting to enable/disable notifications.

        * page/Settings.cpp:
        (WebCore::Settings::Settings):
        * page/Settings.h: Add new bit for whether notifications are enabled.
        (WebCore::Settings::setNotificationsEnabled):
        (WebCore::Settings::notificationsEnabled):

2012-01-18  Eric Carlson  <eric.carlson@apple.com>

        Provide access to user's list of preferred languages
        https://bugs.webkit.org/show_bug.cgi?id=76138

        Reviewed by Timothy Hatcher.

        No new tests, tested by fast/harness/user-preferred-language.html.

        * platform/mac/Language.mm:
        (WebCore::platformUserPreferredLanguages): Don't over-release a the CFStrings returned by 
            CFLocaleCopyPreferredLanguages.

2012-01-18  Joshua Bell  <jsbell@chromium.org>

        IndexedDB: Implement create-intermediate-objects semantics when injecting values via keyPaths
        https://bugs.webkit.org/show_bug.cgi?id=76493

        Reviewed by Tony Chang.

        Tests: storage/indexeddb/objectstore-autoincrement.html

        * bindings/v8/IDBBindingUtilities.cpp:
        (WebCore::injectIDBKeyIntoSerializedValue):

2012-01-18  Joshua Bell  <jsbell@chromium.org>

        IndexedDB: Invalid keys yielded by key paths should raise exceptions, not error callbacks
        https://bugs.webkit.org/show_bug.cgi?id=76075

        Reviewed by Tony Chang.

        Tests: storage/indexeddb/objectstore-basics.html

        * storage/IDBObjectStoreBackendImpl.cpp:
        (WebCore::IDBObjectStoreBackendImpl::put):

2012-01-18  Dana Jansens  <danakj@chromium.org>

        [chromium] Fix compile error from bug #76211
        https://bugs.webkit.org/show_bug.cgi?id=76575

        Reviewed by James Robinson.

        No new tests. Fixing compile only.

        * platform/graphics/chromium/ImageLayerChromium.cpp:
        (WebCore::ImageLayerTextureUpdater::prepareToUpdate):

2012-01-18  Adam Barth  <abarth@webkit.org>

        REGRESSION (r104000): AdBlock extension fails to load/function
        https://bugs.webkit.org/show_bug.cgi?id=75554

        Reviewed by Andy Estes.

        Previously, we would claim the documentElement was available before
        we'd actually attached it to the DOM (which we now do via the
        attachment queue).  This issue was noted in the code with a FIXME
        comment, but there was no test coverage for the issue.  This patch
        resolves the FIXME and adds a test.

        Test: userscripts/document-element-available-at-start.html

        * html/parser/HTMLConstructionSite.cpp:
        (WebCore::HTMLConstructionSite::insertHTMLHtmlStartTagBeforeHTML):

2012-01-18  Eric Carlson  <eric.carlson@apple.com>

        Provide access to user's list of preferred languages
        https://bugs.webkit.org/show_bug.cgi?id=76138

        Reviewed by Alexey Proskuryakov.

        Test: fast/harness/user-preferred-language.html

        * WebCore.exp.in: Export the new functions.
        * WebCore.order: Ditto.

        * Target.pri: Include new files.
        * WebCore.gypi: Ditto.
        * WebCore.vcproj/WebCoreTestSupport.vcproj: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Ditto.

        * platform/Language.cpp:
        (WebCore::defaultLanguage): Return userPreferredLanguages[0].
        (WebCore::preferredLanguagesOverride): New, return the languages override.
        (WebCore::overrideUserPreferredLanguages): New, set the languages override.
        (WebCore::userPreferredLanguages): New, return the languages array.
        * platform/Language.h:

        * platform/blackberry/LocalizedStringsBlackBerry.cpp:
        (WebCore::platformLanguage): Renamed from platformDefaultLanguage, now static.
        (WebCore::platformUserPreferredLanguages): New.

        * platform/chromium/LanguageChromium.cpp:
        (WebCore::platformLanguage): Renamed from platformDefaultLanguage, now static.
        (WebCore::platformUserPreferredLanguages): New.

        * platform/efl/LanguageEfl.cpp:
        (WebCore::platformLanguage): Renamed from platformDefaultLanguage, now static.
        (WebCore::platformUserPreferredLanguages): New.

        * platform/gtk/LanguageGtk.cpp:
        (WebCore::platformLanguage): Renamed from platformDefaultLanguage, now static.
        (WebCore::platformUserPreferredLanguages): New.

        * platform/mac/Language.mm:
        (+[WebLanguageChangeObserver _webkit_languagePreferencesDidChange]): Flag the user languages
            as invalid.
        (WebCore::platformLanguage): Removed.
        (WebCore::platformUserPreferredLanguages): New, return the list of user preferred languages.

        * platform/qt/LanguageQt.cpp:
        (WebCore::platformLanguage): Renamed from platformDefaultLanguage, now static.
        (WebCore::platformUserPreferredLanguages): New.

        * platform/win/LanguageWin.cpp:
        (WebCore::platformLanguage): Renamed from platformDefaultLanguage, now static.
        (WebCore::platformUserPreferredLanguages): New.

        * testing/Internals.cpp:
        (WebCore::Internals::userPreferredLanguages): New, return the platform's user preferred languages.
        (WebCore::Internals::setUserPreferredLanguages): New, override the user's preferred languages.
        * testing/Internals.h:
        * testing/Internals.idl: Add userPreferredLanguages.

        * testing/js/JSInternalsCustom.cpp:
        (WebCore::JSInternals::userPreferredLanguages): New.
        (WebCore::JSInternals::setUserPreferredLanguages): New.

        * testing/v8/V8InternalsCustom.cpp:
        (WebCore::V8Internals::userPreferredLanguagesAccessorGetter): New.
        (WebCore::V8Internals::userPreferredLanguagesAccessorSetter): New.

2012-01-18  Dana Jansens  <danakj@chromium.org>

        [chromium] Enable tracking opaque region in Skia graphics context, return it from LayerTextureUpdater
        https://bugs.webkit.org/show_bug.cgi?id=76211

        Reviewed by James Robinson.

        New unit tests in LayerTextureUpdaterTest.cpp

        * platform/graphics/chromium/BitmapCanvasLayerTextureUpdater.cpp:
        (WebCore::BitmapCanvasLayerTextureUpdater::prepareToUpdate):
        * platform/graphics/chromium/BitmapCanvasLayerTextureUpdater.h:
        * platform/graphics/chromium/BitmapSkPictureCanvasLayerTextureUpdater.cpp:
        (WebCore::BitmapSkPictureCanvasLayerTextureUpdater::prepareToUpdate):
        * platform/graphics/chromium/BitmapSkPictureCanvasLayerTextureUpdater.h:
        * platform/graphics/chromium/ContentLayerChromium.cpp:
        (WebCore::ContentLayerChromium::createTextureUpdater):
        * platform/graphics/chromium/LayerTextureUpdater.h:
        (WebCore::LayerTextureUpdater::prepareToUpdate):
        * platform/graphics/chromium/PlatformCanvas.h:
        (WebCore::PlatformCanvas::Painter::skiaContext):
        * platform/graphics/chromium/SkPictureCanvasLayerTextureUpdater.cpp:
        (WebCore::SkPictureCanvasLayerTextureUpdater::SkPictureCanvasLayerTextureUpdater):
        (WebCore::SkPictureCanvasLayerTextureUpdater::prepareToUpdate):
        (WebCore::SkPictureCanvasLayerTextureUpdater::setOpaque):
        * platform/graphics/chromium/SkPictureCanvasLayerTextureUpdater.h:
        * platform/graphics/chromium/TiledLayerChromium.cpp:
        (WebCore::TiledLayerChromium::prepareToUpdateTiles):

2012-01-18  Tim Dresser  <tdresser@chromium.org>

        [chromium] Refactor canvas, plugin, and video drawing to be more data-driven
        https://bugs.webkit.org/show_bug.cgi?id=76274

        Reviewed by James Robinson.

        This is the first step in refactoring canvas, plugin, and video drawing.
        The CCCustomLayerDrawQuad implementation has been copied to CCCanvasDrawQuad, CCPluginDrawQuad and CCVideoDrawQuad.
        All references to CustomLayer have been removed.

        As this is a refactor, no new tests were added. CCLayerTreeHostImplTest.blendingOffWhenDrawingOpaqueLayers was modified to
        no longer test culling.

        * WebCore.gypi:
        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::drawQuad):
        (WebCore::LayerRendererChromium::drawCanvasQuad):
        (WebCore::LayerRendererChromium::drawVideoQuad):
        (WebCore::LayerRendererChromium::drawPluginQuad):
        * platform/graphics/chromium/LayerRendererChromium.h:
        * platform/graphics/chromium/cc/CCCanvasDrawQuad.cpp: Copied from Source/WebCore/platform/graphics/chromium/cc/CCCustomLayerDrawQuad.cpp.
        (WebCore::CCCanvasDrawQuad::create):
        (WebCore::CCCanvasDrawQuad::CCCanvasDrawQuad):
        * platform/graphics/chromium/cc/CCCanvasDrawQuad.h: Copied from Source/WebCore/platform/graphics/chromium/cc/CCCustomLayerDrawQuad.h.
        (WebCore::CCCanvasDrawQuad::layer):
        * platform/graphics/chromium/cc/CCCanvasLayerImpl.cpp:
        (WebCore::CCCanvasLayerImpl::appendQuads):
        * platform/graphics/chromium/cc/CCCanvasLayerImpl.h:
        * platform/graphics/chromium/cc/CCDrawQuad.cpp:
        (WebCore::CCDrawQuad::toCanvasDrawQuad):
        (WebCore::CCDrawQuad::toVideoDrawQuad):
        (WebCore::CCDrawQuad::toPluginDrawQuad):
        * platform/graphics/chromium/cc/CCDrawQuad.h:
        * platform/graphics/chromium/cc/CCLayerImpl.cpp:
        (WebCore::CCLayerImpl::appendQuads):
        * platform/graphics/chromium/cc/CCPluginDrawQuad.cpp: Copied from Source/WebCore/platform/graphics/chromium/cc/CCCustomLayerDrawQuad.cpp.
        (WebCore::CCPluginDrawQuad::create):
        (WebCore::CCPluginDrawQuad::CCPluginDrawQuad):
        * platform/graphics/chromium/cc/CCPluginDrawQuad.h: Copied from Source/WebCore/platform/graphics/chromium/cc/CCCustomLayerDrawQuad.h.
        (WebCore::CCPluginDrawQuad::layer):
        * platform/graphics/chromium/cc/CCPluginLayerImpl.cpp:
        (WebCore::CCPluginLayerImpl::appendQuads):
        * platform/graphics/chromium/cc/CCPluginLayerImpl.h:
        * platform/graphics/chromium/cc/CCQuadCuller.cpp:
        * platform/graphics/chromium/cc/CCVideoDrawQuad.cpp: Renamed from Source/WebCore/platform/graphics/chromium/cc/CCCustomLayerDrawQuad.cpp.
        (WebCore::CCVideoDrawQuad::create):
        (WebCore::CCVideoDrawQuad::CCVideoDrawQuad):
        * platform/graphics/chromium/cc/CCVideoDrawQuad.h: Renamed from Source/WebCore/platform/graphics/chromium/cc/CCCustomLayerDrawQuad.h.
        (WebCore::CCVideoDrawQuad::layer):
        * platform/graphics/chromium/cc/CCVideoLayerImpl.cpp:
        (WebCore::CCVideoLayerImpl::appendQuads):
        * platform/graphics/chromium/cc/CCVideoLayerImpl.h:

2012-01-18  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Unsafe cross origin access errors should show stack trace in console.
        https://bugs.webkit.org/show_bug.cgi?id=73099

        Reviewed by Pavel Feldman.

        Test: http/tests/inspector/console-cross-origin-iframe-logging.html

        * bindings/v8/V8Proxy.cpp:
        (WebCore::V8Proxy::reportUnsafeAccessTo):
        * dom/ScriptExecutionContext.cpp:
        (WebCore::ScriptExecutionContext::addConsoleMessage):
        * dom/ScriptExecutionContext.h:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::shouldAllowNavigation):
        * page/Console.cpp:
        (WebCore::Console::addMessage):
        * page/Console.h:
        * page/DOMWindow.cpp:
        (WebCore::PostMessageTimer::PostMessageTimer):
        (WebCore::PostMessageTimer::stackTrace):
        (WebCore::DOMWindow::postMessage):
        (WebCore::DOMWindow::postMessageTimerFired):
        (WebCore::DOMWindow::printErrorMessage):

2012-01-18  Pablo Flouret  <pablof@motorola.com>

        Add [CallWith] support for attributes in JSC/V8 idl code generators.
        Part of https://bugs.webkit.org/show_bug.cgi?id=76035

        Reviewed by Adam Barth.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateImplementation):
        (GenerateAttributeCallWith):
        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateNormalAttrGetter):
        (GenerateNormalAttrSetter):
        (GenerateAttributeCallWith):
        * bindings/scripts/test/CPP/WebDOMTestObj.cpp:
        (WebDOMTestObj::withScriptStateAttribute):
        (WebDOMTestObj::setWithScriptStateAttribute):
        (WebDOMTestObj::withScriptExecutionContextAttribute):
        (WebDOMTestObj::setWithScriptExecutionContextAttribute):
        (WebDOMTestObj::withScriptStateAttributeRaises):
        (WebDOMTestObj::setWithScriptStateAttributeRaises):
        (WebDOMTestObj::withScriptExecutionContextAttributeRaises):
        (WebDOMTestObj::setWithScriptExecutionContextAttributeRaises):
        * bindings/scripts/test/CPP/WebDOMTestObj.h:
        * bindings/scripts/test/GObject/WebKitDOMTestObj.cpp:
        (webkit_dom_test_obj_get_with_script_state_attribute):
        (webkit_dom_test_obj_set_with_script_state_attribute):
        (webkit_dom_test_obj_get_with_script_execution_context_attribute):
        (webkit_dom_test_obj_set_with_script_execution_context_attribute):
        (webkit_dom_test_obj_get_with_script_state_attribute_raises):
        (webkit_dom_test_obj_set_with_script_state_attribute_raises):
        (webkit_dom_test_obj_get_with_script_execution_context_attribute_raises):
        (webkit_dom_test_obj_set_with_script_execution_context_attribute_raises):
        (webkit_dom_test_obj_set_property):
        (webkit_dom_test_obj_get_property):
        (webkit_dom_test_obj_class_init):
        * bindings/scripts/test/GObject/WebKitDOMTestObj.h:
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::jsTestObjWithScriptStateAttribute):
        (WebCore::jsTestObjWithScriptExecutionContextAttribute):
        (WebCore::jsTestObjWithScriptStateAttributeRaises):
        (WebCore::jsTestObjWithScriptExecutionContextAttributeRaises):
        (WebCore::setJSTestObjWithScriptStateAttribute):
        (WebCore::setJSTestObjWithScriptExecutionContextAttribute):
        (WebCore::setJSTestObjWithScriptStateAttributeRaises):
        (WebCore::setJSTestObjWithScriptExecutionContextAttributeRaises):
        * bindings/scripts/test/JS/JSTestObj.h:
        * bindings/scripts/test/ObjC/DOMTestObj.h:
        * bindings/scripts/test/ObjC/DOMTestObj.mm:
        (-[DOMTestObj withScriptStateAttribute]):
        (-[DOMTestObj setWithScriptStateAttribute:]):
        (-[DOMTestObj withScriptExecutionContextAttribute]):
        (-[DOMTestObj setWithScriptExecutionContextAttribute:]):
        (-[DOMTestObj withScriptStateAttributeRaises]):
        (-[DOMTestObj setWithScriptStateAttributeRaises:]):
        (-[DOMTestObj withScriptExecutionContextAttributeRaises]):
        (-[DOMTestObj setWithScriptExecutionContextAttributeRaises:]):
        * bindings/scripts/test/TestObj.idl:
        * bindings/scripts/test/V8/V8TestObj.cpp:
        (WebCore::TestObjInternal::withScriptStateAttributeAttrGetter):
        (WebCore::TestObjInternal::withScriptStateAttributeAttrSetter):
        (WebCore::TestObjInternal::withScriptExecutionContextAttributeAttrGetter):
        (WebCore::TestObjInternal::withScriptExecutionContextAttributeAttrSetter):
        (WebCore::TestObjInternal::withScriptStateAttributeRaisesAttrGetter):
        (WebCore::TestObjInternal::withScriptStateAttributeRaisesAttrSetter):
        (WebCore::TestObjInternal::withScriptExecutionContextAttributeRaisesAttrGetter):
        (WebCore::TestObjInternal::withScriptExecutionContextAttributeRaisesAttrSetter):

2012-01-18  Tim Horton  <timothy_horton@apple.com>

        [CG] Rasterized scaling of transformed SVG shapes with gradient fill and -webkit-svg-shadow applied
        https://bugs.webkit.org/show_bug.cgi?id=76482
        <rdar://problem/10415483>

        Reviewed by Simon Fraser.

        Scale the CGLayer used when filling or stroking a shadowed path or rect with
        a gradient in GraphicsContextCG. Previously, the CGLayer was created and rendered
        into at the untransformed size of the shape, leading to pixelation when it was
        then scaled up and drawn into the destination.

        Add AffineTransform::mapSize() to map a size through a transformation.

        Test: svg/custom/transform-with-shadow-and-gradient.svg

        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::fillPath):
        (WebCore::GraphicsContext::strokePath):
        (WebCore::GraphicsContext::fillRect):
        (WebCore::GraphicsContext::strokeRect):
        * platform/graphics/transforms/AffineTransform.cpp:
        (WebCore::AffineTransform::mapSize): Added.
        * platform/graphics/transforms/AffineTransform.h:

2012-01-18  Dominic Mazzoni  <dmazzoni@google.com>

        Accessibility: Chromium needs methods to scroll an object into view or to a specific location.
        https://bugs.webkit.org/show_bug.cgi?id=73460

        Reviewed by Chris Fleizach.

        Tests: platform/chromium/accessibility/scroll-to-global-point-main-window.html
               platform/chromium/accessibility/scroll-to-global-point-nested.html
               platform/chromium/accessibility/scroll-to-global-point-iframe.html
               platform/chromium/accessibility/scroll-to-global-point-iframe-nested.html
               platform/chromium/accessibility/scroll-to-make-visible-div-overflow.html
               platform/chromium/accessibility/scroll-to-make-visible-iframe.html
               platform/chromium/accessibility/scroll-to-make-visible-main-window.html
               platform/chromium/accessibility/scroll-to-make-visible-nested.html
               platform/chromium/accessibility/scroll-to-make-visible-with-subfocus.html

        * accessibility/AccessibilityObject.cpp:
        (WebCore::computeBestScrollOffset):
        (WebCore::AccessibilityObject::scrollToMakeVisible):
        (WebCore::AccessibilityObject::scrollToMakeVisibleWithSubFocus):
        (WebCore::AccessibilityObject::scrollToGlobalPoint):
        * accessibility/AccessibilityObject.h:
        (WebCore::AccessibilityObject::getScrollableAreaIfScrollable):
        (WebCore::AccessibilityObject::scrollTo):
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::getScrollableAreaIfScrollable):
        (WebCore::AccessibilityRenderObject::scrollTo):
        * accessibility/AccessibilityRenderObject.h:
        * accessibility/AccessibilityScrollView.cpp:
        (WebCore::AccessibilityScrollView::getScrollableAreaIfScrollable):
        (WebCore::AccessibilityScrollView::scrollTo):
        * accessibility/AccessibilityScrollView.h:

2012-01-17  Alexey Proskuryakov  <ap@apple.com>

        file:// doesn't work as base URL
        https://bugs.webkit.org/show_bug.cgi?id=76496

        Reviewed by Darin Adler.

        Test: fast/url/degenerate-file-base.html

        * platform/KURL.cpp: (WebCore::KURL::parse): Handle degenerate file URLs properly.

2012-01-18  Ilya Tikhonovsky  <loislo@chromium.org>

        [chromium] Web Inspector: highlight DOM nodes from detached DOM trees.
        https://bugs.webkit.org/show_bug.cgi?id=76545

        Reviewed by Yury Semikhatsky.

        * inspector/front-end/DetailedHeapshotGridNodes.js:
        (WebInspector.HeapSnapshotGenericObjectNode):
        (WebInspector.HeapSnapshotGenericObjectNode.prototype.get data):
        * inspector/front-end/HeapSnapshot.js:
        (WebInspector.HeapSnapshotNode.prototype.get isNativeRoot):
        (WebInspector.HeapSnapshotNode.prototype.get isDetachedDOMTree):
        (WebInspector.HeapSnapshot.prototype._init):
        (WebInspector.HeapSnapshot.prototype._markDetachedDOMTreeNodes):
        (WebInspector.HeapSnapshot.prototype._markQueriableHeapObjects):
        (WebInspector.HeapSnapshot.prototype._calculateFlags):
        * inspector/front-end/heapProfiler.css:
        (.detached-dom-tree-node):

2012-01-18  Pavel Feldman  <pfeldman@google.com>

        Web Inspector: there should be a way to set HTML for given frame.
        https://bugs.webkit.org/show_bug.cgi?id=76548

        Reviewed by Yury Semikhatsky.

        * inspector/Inspector.json:
        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::setDocumentContent):
        * inspector/InspectorPageAgent.h:
        * inspector/front-end/DOMAgent.js:
        (WebInspector.DOMModelResourceBinding.prototype.setContent.callbackWrapper):
        (WebInspector.DOMModelResourceBinding.prototype.setContent):

2012-01-18  Sergio Villar Senin  <svillar@igalia.com>

        [GTK] [regression] A couple of tests failing after r105253
        https://bugs.webkit.org/show_bug.cgi?id=76549

        Reviewed by Gustavo Noronha Silva.

        Fixes a regression added by r105253. The method that
        RenderThemeGtk needs to overwrite is popsMenuBySpaceOrReturn()
        instead of popsMenuByArrowKeys().

        No new tests as it's already covered by
        fast/forms/select-popup-pagekeys.html and
        fast/forms/select/menulist-onchange-fired-with-key-up-down.html
        that started to fail after the revision mentioned above.

        * platform/gtk/RenderThemeGtk.h:
        (WebCore::RenderThemeGtk::popsMenuBySpaceOrReturn):

2012-01-18  Andrey Kosyakov  <caseq@chromium.org>

        Web Inspector: omit compression field in HAR entries for resources coming from cache
        https://bugs.webkit.org/show_bug.cgi?id=76543

        Reviewed by Yury Semikhatsky.

        * inspector/front-end/HAREntry.js:
        (WebInspector.HAREntry.prototype._buildContent):
        (WebInspector.HAREntry.prototype.get responseCompression):

2012-01-18  Mihnea Ovidenie  <mihnea@adobe.com>

        [CSSRegions]Fix region style code in CSSStyleSelector
        https://bugs.webkit.org/show_bug.cgi?id=76453

        Reviewed by Antti Koivisto.

        Follow up after comments in https://bugs.webkit.org/show_bug.cgi?id=76064.
        With the new approach, the css rule specificity is correctly taken into account
        when applying the region style rule.
        No new tests, the region style tests are still disabled.

        * css/CSSStyleSelector.cpp:
        (WebCore::RuleSet::RuleSetSelectorPair::RuleSetSelectorPair):
        (WebCore::CSSStyleSelector::CSSStyleSelector):
        (WebCore::CSSStyleSelector::addMatchedDeclaration):
        (WebCore::CSSStyleSelector::collectMatchingRules):
        (WebCore::CSSStyleSelector::collectMatchingRulesForRegion):
        (WebCore::CSSStyleSelector::matchRules):
        (WebCore::CSSStyleSelector::collectMatchingRulesForList):
        (WebCore::CSSStyleSelector::matchAllRules):
        (WebCore::CSSStyleSelector::styleForElement):
        (WebCore::CSSStyleSelector::pseudoStyleForElement):
        (WebCore::CSSStyleSelector::checkRegionStyle):
        (WebCore::CSSStyleSelector::checkRegionSelector):
        (WebCore::RuleData::RuleData):
        (WebCore::RuleSet::RuleSet):
        (WebCore::RuleSet::addRule):
        (WebCore::RuleSet::addRegionRule):
        (WebCore::RuleSet::addRulesFromSheet):
        (WebCore::isInsideRegionRule):
        (WebCore::CSSStyleSelector::applyDeclaration):
        (WebCore::CSSStyleSelector::applyDeclarations):
        (WebCore::CSSStyleSelector::isValidRegionStyleProperty):
        (WebCore::CSSStyleSelector::applyProperty):
        * css/CSSStyleSelector.h:

2012-01-17  Jer Noble  <jer.noble@apple.com>

        Mac fails to fire an 'error' event for a <video> <source> having an URL with no file extension
        https://bugs.webkit.org/show_bug.cgi?id=76494

        Reviewed by Eric Carlson.

        No new tests; fixes compositing/video/video-with-invalid-source.html. Modified 
        media/video-source-error-no-candidate.html to check error condition.

        When we run out of media engines for a given resource, inform the media player client
        that resource loading failed by calling mediaPlayerResourceNotSupported().

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::mediaPlayerResourceNotSupported):
        * html/HTMLMediaElement.h:
        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::loadWithNextMediaEngine):
        * platform/graphics/MediaPlayer.h:
        (WebCore::MediaPlayerClient::mediaPlayerResourceNotSupported):

2012-01-18  Alexandru Chiculita  <achicu@adobe.com>

        CSS Shaders: Parse float parameters for the custom() filter syntax
        https://bugs.webkit.org/show_bug.cgi?id=76253

        Reviewed by Nikolas Zimmermann.

        Custom CSS filters allow passing parameters from CSS to the underlying rendering technology (in this case WebGL Shaders).
        This patch adds support for parameters of types float, vec2, vec3 and vec4.

        https://dvcs.w3.org/hg/FXTF/raw-file/tip/custom/index.html#feCustomParamsAttribute

        Tests: css3/filters/effect-custom-combined-missing.html
               css3/filters/effect-custom-parameters.html

        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
            Added CustomFilterParameter.h, CustomFilterNumberParameter.h and CustomFilterOperation.cpp to the projects.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::valueForCustomFilterNumberParameter):
        (WebCore::CSSComputedStyleDeclaration::valueForCustomFilterParameter):
        (WebCore::CSSComputedStyleDeclaration::valueForFilter):
            Added the computed parameters in alphabetic order (CustomFilterOperation always keeps the parameters sorted).
        * css/CSSComputedStyleDeclaration.h:
        * css/CSSStyleSelector.cpp:
        (WebCore::sortParametersByNameComparator):
        (WebCore::CSSStyleSelector::parseCustomFilterNumberParamter):
        (WebCore::CSSStyleSelector::parseCustomFilterParameterList):
        (WebCore::CSSStyleSelector::createCustomFilterOperation):
            Added parsing for float, vec2, vec3 and vec4. The values are space separated.

        * css/CSSStyleSelector.h:
        * platform/graphics/filters/CustomFilterNumberParameter.h: Added.
        (WebCore::CustomFilterNumberParameter::create):
        (WebCore::CustomFilterNumberParameter::size):
        (WebCore::CustomFilterNumberParameter::valueAt):
        (WebCore::CustomFilterNumberParameter::addValue):
        (WebCore::CustomFilterNumberParameter::CustomFilterNumberParameter):

        * platform/graphics/filters/CustomFilterOperation.cpp: Added.
        (WebCore::CustomFilterOperation::CustomFilterOperation):
        (WebCore::CustomFilterOperation::~CustomFilterOperation):
            Moved constructor and destructor in CustomFilterOperation.cpp to avoid including CustomFilterParameter everywhere.
        (WebCore::CustomFilterOperation::hasSortedParameterList):
            Debug runtime check that we always have parameters in alphabetic order.

        * platform/graphics/filters/CustomFilterOperation.h:
        (WebCore::CustomFilterOperation::create):
        (WebCore::CustomFilterOperation::parameters):
            Just added the parameters list. Not using a map, but keeping the items sorted by name. We need them sorted
            to make it easy and fast to merge two CustomFilterOperations during animations.

        * platform/graphics/filters/CustomFilterParameter.h: Added.
        (WebCore::CustomFilterParameter::~CustomFilterParameter):
        (WebCore::CustomFilterParameter::parameterType):
        (WebCore::CustomFilterParameter::name):
        (WebCore::CustomFilterParameter::CustomFilterParameter):
        * platform/graphics/filters/CustomFilterShader.cpp:
        (WebCore::CustomFilterShader::uniformLocationByName):
        * platform/graphics/filters/CustomFilterShader.h:

        * platform/graphics/filters/FECustomFilter.cpp:
        (WebCore::FECustomFilter::FECustomFilter):
        (WebCore::FECustomFilter::create):
        (WebCore::FECustomFilter::platformApplySoftware):
        (WebCore::FECustomFilter::bindProgramNumberParameters):
        (WebCore::FECustomFilter::bindProgramParameters):
            Added code that maps the parameters from CSS to WebGL.
        (WebCore::FECustomFilter::bindProgramAndBuffers):
        * platform/graphics/filters/FECustomFilter.h:

        * rendering/FilterEffectRenderer.cpp:
        (WebCore::FilterEffectRenderer::build):
            Fixed a case when the filter was not created, letting the filter add itself as a source of its own. 
            Also added a test case for this particular case: css3/filters/effect-custom-combined-missing.html.

2012-01-18  Andrey Kosyakov  <caseq@chromium.org>

        Web Inspector: resource tree model leaks frames
        https://bugs.webkit.org/show_bug.cgi?id=76533

        Reviewed by Pavel Feldman.

        * inspector/front-end/ResourceTreeModel.js:
        (WebInspector.ResourceTreeModel.prototype._frameDetached):
        (WebInspector.ResourceTreeModel.prototype._removeFrame):
        (WebInspector.ResourceTreeFrame.prototype._removeChildFrame):

2012-01-17  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Enable support for Open Script dialog based on FilteredItemSelectionDialog.
        https://bugs.webkit.org/show_bug.cgi?id=76466

        Reviewed by Pavel Feldman.

        * English.lproj/localizedStrings.js:
        * inspector/front-end/FilteredItemSelectionDialog.js:
        (WebInspector.JavaScriptOutlineDialog.createShortcut):
        (WebInspector.OpenResourceDialog.filterOutEmptyURLs):
        (WebInspector.OpenResourceDialog):
        (WebInspector.OpenResourceDialog.install):
        (WebInspector.OpenResourceDialog._show):
        (WebInspector.OpenResourceDialog.createShortcut):
        (WebInspector.OpenResourceDialog.prototype.itemTitleAt):
        (WebInspector.OpenResourceDialog.prototype.itemKeyAt):
        (WebInspector.OpenResourceDialog.prototype.itemsCount):
        (WebInspector.OpenResourceDialog.prototype.requestItems):
        (WebInspector.OpenResourceDialog.prototype.selectItem):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype.showUISourceCode):

2012-01-18  Pavel Feldman  <pfeldman@google.com>

        Not reviewed: follow up to r105262, fixing front-end compilation.

        * inspector/front-end/DOMAgent.js:
        (WebInspector.DOMDocument):
        (WebInspector.DOMModelResourceBinding.prototype.setContent.setOuterHTML):

2012-01-17  Pavel Feldman  <pfeldman@google.com>

        Web Inspector: track HTML revisions when editing DOM and / or upon free flow edits.
        https://bugs.webkit.org/show_bug.cgi?id=76457

        Reviewed by Yury Semikhatsky.

        Test: inspector/elements/set-html-via-resource.html

        * inspector/DOMEditor.cpp:
        (WebCore::DOMEditor::patchNode):
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::getOuterHTML):
        (WebCore::InspectorDOMAgent::setOuterHTML):
        (WebCore::InspectorDOMAgent::buildObjectForNode):
        * inspector/front-end/DOMAgent.js:
        (WebInspector.DOMNode):
        (WebInspector.DOMNode.prototype.setNodeName):
        (WebInspector.DOMNode.prototype.setNodeValue):
        (WebInspector.DOMNode.prototype.setAttribute):
        (WebInspector.DOMNode.prototype.setAttributeValue):
        (WebInspector.DOMNode.prototype.removeAttribute):
        (WebInspector.DOMNode.prototype.getChildNodes.mycallback):
        (WebInspector.DOMNode.prototype.getChildNodes):
        (WebInspector.DOMNode.prototype.setOuterHTML):
        (WebInspector.DOMNode.prototype.removeNode):
        (WebInspector.DOMNode.prototype.moveTo):
        (WebInspector.DOMDocument):
        (WebInspector.DOMAgent):
        (WebInspector.DOMAgent.prototype._setDocument):
        (WebInspector.DOMAgent.prototype._buildHighlightConfig):
        (WebInspector.DOMAgent.prototype._markRevision):
        (WebInspector.DOMAgent.prototype._captureDOM.callback):
        (WebInspector.DOMAgent.prototype._captureDOM):
        (WebInspector.DOMModelResourceBinding.prototype.setContent):
        (WebInspector.DOMModelResourceBinding.prototype.setContent.setOuterHTML):
        (WebInspector.DOMModelResourceBinding.prototype.setContent.withDocument):
        * inspector/front-end/ElementsTreeOutline.js:
        (WebInspector.ElementsTreeElement.prototype._attributeEditingCommitted):

2012-01-18  Andrey Kosyakov  <caseq@chromium.org>

        Web Inspector: Popover does not disappear, causes debugger failure.
        https://bugs.webkit.org/show_bug.cgi?id=71363

        Reviewed by Pavel Feldman.

        This is a work-around simple enough for a merge. The real fix would
        be to get TextViewer to manage the highlight on its own, so it's not
        accidently removed while re-building DOM for the text chunk.

        * inspector/front-end/JavaScriptSourceFrame.js:
        (WebInspector.JavaScriptSourceFrame.prototype._onHidePopover):

2012-01-18  Shinya Kawanaka  <shinyak@google.com>

        Unreviewed build fix.
        https://bugs.webkit.org/show_bug.cgi?id=76525

        Removed missing build headers.

        * WebCore.xcodeproj/project.pbxproj:

2012-01-18  Jun Mukai  <mukai@chromium.org>

        Use RenderTheme in HTMLSelectElement instead of #defines.
        <http://webkit.org/b/76519>

        Reviewed by Kent Tamura.

        Tests: no new tests because of no behavioral changes.

        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::platformHandleKeydownEvent):
        (WebCore::HTMLSelectElement::menuListDefaultEventHandler):
        * platform/gtk/RenderThemeGtk.h:
        (WebCore::RenderThemeGtk::popsMenuByArrowKeys):
        * rendering/RenderTheme.h:
        (WebCore::RenderTheme::popsMenuByArrowKeys):
        (WebCore::RenderTheme::popsMenuBySpaceOrReturn):
        * rendering/RenderThemeChromiumLinux.h:
        (WebCore::RenderThemeChromiumLinux::popsMenuBySpaceOrReturn):
        * rendering/RenderThemeMac.h:
        (WebCore::RenderThemeMac::popsMenuByArrowKeys):

2012-01-18  Abhishek Arya  <inferno@chromium.org>

        Crash in FrameView::forceLayoutParentViewIfNeeded.        
        https://bugs.webkit.org/show_bug.cgi?id=76309

        Reviewed by Nikolas Zimmermann.

        updateWidgetPositions can blow away the owning renderer
        and its frameview, so need to protect it with refptr.

        Test: svg/dom/parent-view-layout-crash.html

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

2012-01-18  Shinya Kawanaka  <shinyak@google.com>

        Move ShadowContentElement from dom/ to html/ and make ShadowContentElement subclass of HTMLElement.
        https://bugs.webkit.org/show_bug.cgi?id=76241

        Reviewed by Dimitri Glazkov.

        Renamed ShadowContentElement to HTMLContentElement, and move it from dom/ to html/.
        Also, ShadowInclusionSelector and ShadowContentSelectorQuery are renamed to
        Content InclusionSelector and ContentSelectorQuery respectively.

        No new tests, because no change in behavior.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.exp.in:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/DOMAllInOne.cpp:
        * dom/NodeRenderingContext.cpp:
        (WebCore::nextRendererOf):
        (WebCore::previousRendererOf):
        (WebCore::firstRendererOf):
        (WebCore::lastRendererOf):
        (WebCore::NodeRenderingContext::nextRenderer):
        (WebCore::NodeRenderingContext::previousRenderer):
        * dom/NodeRenderingContext.h:
        (WebCore::NodeRenderingContext::includer):
        * dom/ShadowRoot.cpp:
        (WebCore::ShadowRoot::includerFor):
        (WebCore::ShadowRoot::inclusions):
        (WebCore::ShadowRoot::ensureInclusions):
        * dom/ShadowRoot.h:
        * html/HTMLDetailsElement.cpp:
        (WebCore::DetailsContentElement::DetailsContentElement):
        (WebCore::DetailsSummaryElement::DetailsSummaryElement):
        * html/HTMLElementsAllInOne.cpp:
        * html/HTMLSummaryElement.cpp:
        (WebCore::SummaryContentElement::SummaryContentElement):
        * html/shadow/ContentInclusionSelector.cpp: Renamed from Source/WebCore/dom/ShadowInclusionSelector.cpp.
        (WebCore::ShadowInclusion::append):
        (WebCore::ShadowInclusion::unlink):
        (WebCore::ShadowInclusionList::ShadowInclusionList):
        (WebCore::ShadowInclusionList::~ShadowInclusionList):
        (WebCore::ShadowInclusionList::find):
        (WebCore::ShadowInclusionList::clear):
        (WebCore::ShadowInclusionList::append):
        (WebCore::ContentInclusionSelector::ContentInclusionSelector):
        (WebCore::ContentInclusionSelector::~ContentInclusionSelector):
        (WebCore::ContentInclusionSelector::select):
        (WebCore::ContentInclusionSelector::unselect):
        (WebCore::ContentInclusionSelector::findFor):
        (WebCore::ContentInclusionSelector::didSelect):
        (WebCore::ContentInclusionSelector::willSelectOver):
        * html/shadow/ContentInclusionSelector.h: Renamed from Source/WebCore/dom/ShadowInclusionSelector.h.
        (WebCore::ShadowInclusion::includer):
        (WebCore::ShadowInclusion::content):
        (WebCore::ShadowInclusion::next):
        (WebCore::ShadowInclusion::previous):
        (WebCore::ShadowInclusion::ShadowInclusion):
        (WebCore::ShadowInclusion::create):
        (WebCore::ShadowInclusionList::first):
        (WebCore::ShadowInclusionList::last):
        (WebCore::ShadowInclusionList::isEmpty):
        (WebCore::ShadowInclusionSet::add):
        (WebCore::ShadowInclusionSet::remove):
        (WebCore::ShadowInclusionSet::isEmpty):
        (WebCore::ShadowInclusionSet::Translator::hash):
        (WebCore::ShadowInclusionSet::Translator::equal):
        (WebCore::ShadowInclusionSet::Hash::hash):
        (WebCore::ShadowInclusionSet::Hash::equal):
        (WebCore::ShadowInclusionSet::find):
        (WebCore::ContentInclusionSelector::hasCandidates):
        * html/shadow/ContentSelectorQuery.cpp: Renamed from Source/WebCore/dom/ShadowContentSelectorQuery.cpp.
        (WebCore::ContentSelectorQuery::ContentSelectorQuery):
        (WebCore::ContentSelectorQuery::matches):
        * html/shadow/ContentSelectorQuery.h: Renamed from Source/WebCore/dom/ShadowContentSelectorQuery.h.
        * html/shadow/HTMLContentElement.cpp: Renamed from Source/WebCore/dom/ShadowContentElement.cpp.
        (WebCore::HTMLContentElement::create):
        (WebCore::HTMLContentElement::HTMLContentElement):
        (WebCore::HTMLContentElement::~HTMLContentElement):
        (WebCore::HTMLContentElement::attach):
        (WebCore::HTMLContentElement::detach):
        (WebCore::HTMLContentElement::select):
        (WebCore::HTMLContentElement::setSelect):
        * html/shadow/HTMLContentElement.h: Renamed from Source/WebCore/dom/ShadowContentElement.h.
        (WebCore::HTMLContentElement::inclusions):
        (WebCore::HTMLContentElement::isContentElement):
        (WebCore::HTMLContentElement::rendererIsNeeded):
        (WebCore::HTMLContentElement::createRenderer):
        (WebCore::toHTMLContentElement):
        * testing/Internals.cpp:
        (WebCore::Internals::createContentElement):
        * testing/Internals.h:
        * testing/Internals.idl:

2012-01-17  Nikolas Zimmermann  <nzimmermann@rim.com>

        RenderSVGRoot should inherit from RenderReplaced
        https://bugs.webkit.org/show_bug.cgi?id=76446

        Reviewed by Zoltan Herczeg.

        Let RenderSVGRoot inherit from RenderReplaced, instead of faking RenderReplaced, by inherting from RenderBox
        and calling setReplaced(true) in the constructor. The outermost <svg> element is a replaced element in the
        sense of CSS, and thus this is just a logical move. It fixes some issues where the <svg> root appeared
        as selection leaf, covered by existing tests.

        It allows us to simplify the painting, as outlines, etc. are painted by RenderReplaced now.
        While I was it, speed up the local to border box computations by caching the result.

        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::paint):
        * rendering/svg/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::RenderSVGRoot):
        (WebCore::RenderSVGRoot::layout):
        (WebCore::RenderSVGRoot::paintReplaced):
        (WebCore::RenderSVGRoot::willBeDestroyed):
        (WebCore::RenderSVGRoot::styleWillChange):
        (WebCore::RenderSVGRoot::styleDidChange):
        (WebCore::RenderSVGRoot::updateFromElement):
        (WebCore::RenderSVGRoot::buildLocalToBorderBoxTransform):
        (WebCore::RenderSVGRoot::localToParentTransform):
        (WebCore::RenderSVGRoot::computeFloatRectForRepaint):
        (WebCore::RenderSVGRoot::mapLocalToContainer):
        (WebCore::RenderSVGRoot::nodeAtPoint):
        * rendering/svg/RenderSVGRoot.h:
        (WebCore::RenderSVGRoot::canHaveChildren):
        (WebCore::RenderSVGRoot::canBeSelectionLeaf):
        * svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::setupInitialView):

2012-01-17  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r105244.
        http://trac.webkit.org/changeset/105244
        https://bugs.webkit.org/show_bug.cgi?id=76518

        broke Chromium Mac (Requested by rolandsteiner on #webkit).

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

2012-01-17  Hajime Morrita  <morrita@chromium.org>

        [Internals] Should be able to access corresponding Document object.
        https://bugs.webkit.org/show_bug.cgi?id=76425

        Reviewed by Adam Barth.

        - Allow FrameDestructionObserver to re-setting the Frame reference.
        - Make Internals a subclass of FrameDestructionObserver.

        Since Internals::reset() is called for each test, we can access
        the acive Frame object during the test. The frame reference will be
        used by coming changes.

        No new tests. Covered by existing tests.

        * WebCore.exp.in:
        * page/FrameDestructionObserver.cpp:
        (WebCore::FrameDestructionObserver::FrameDestructionObserver):
        (WebCore::FrameDestructionObserver::~FrameDestructionObserver):
        (WebCore::FrameDestructionObserver::observe):
        * page/FrameDestructionObserver.h:
        * testing/Internals.cpp:
        (WebCore::Internals::Internals):
        (WebCore::Internals::reset):
        * testing/Internals.h:

2012-01-17  Dominic Mazzoni  <dmazzoni@google.com>

        Accessibility: Chromium needs methods to scroll an object into view or to a specific location.
        https://bugs.webkit.org/show_bug.cgi?id=73460

        Reviewed by Chris Fleizach.

        Tests: platform/chromium/accessibility/scroll-to-global-point-main-window.html
               platform/chromium/accessibility/scroll-to-global-point-nested.html
               platform/chromium/accessibility/scroll-to-make-visible-div-overflow.html
               platform/chromium/accessibility/scroll-to-make-visible-iframe.html
               platform/chromium/accessibility/scroll-to-make-visible-main-window.html
               platform/chromium/accessibility/scroll-to-make-visible-nested.html
               platform/chromium/accessibility/scroll-to-make-visible-with-subfocus.html

        * accessibility/AccessibilityObject.cpp:
        (WebCore::computeBestScrollOffset):
        (WebCore::AccessibilityObject::scrollToMakeVisible):
        (WebCore::AccessibilityObject::scrollToMakeVisibleWithSubFocus):
        (WebCore::AccessibilityObject::scrollToGlobalPoint):
        * accessibility/AccessibilityObject.h:
        (WebCore::AccessibilityObject::getScrollableAreaIfScrollable):
        (WebCore::AccessibilityObject::scrollTo):
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::getScrollableAreaIfScrollable):
        (WebCore::AccessibilityRenderObject::scrollTo):
        * accessibility/AccessibilityRenderObject.h:
        * accessibility/AccessibilityScrollView.cpp:
        (WebCore::AccessibilityScrollView::getScrollableAreaIfScrollable):
        (WebCore::AccessibilityScrollView::scrollTo):
        * accessibility/AccessibilityScrollView.h:

2012-01-17  Joe Thomas  <joethomas@motorola.com>

        https://bugs.webkit.org/show_bug.cgi?id=75089
        Access-Control-Request-Headers value should be lowercase

        Access-Control-Request-Headers is used when issuing a preflight request to let the server know
        the HTTP headers that will be used when the actual request is made.
        As per the W3C specification, Access-Control-Request-Headers value should be set in lowercase.

        Reviewed by Alexey Proskuryakov.

        Test: http/tests/xmlhttprequest/access-control-preflight-request-header-lowercase.html

        * loader/CrossOriginAccessControl.cpp:
        (WebCore::createAccessControlPreflightRequest): setting Access-Control-Request-Headers value to lowercase

2012-01-17  Hayato Ito  <hayato@chromium.org>

        Clean EventContext and move phase-tweaking logic to EventDispatcher.
        https://bugs.webkit.org/show_bug.cgi?id=76414

        Reviewed by Dimitri Glazkov.

        No tests. No change in behavior.

        * dom/EventContext.cpp:
        (WebCore::EventContext::handleLocalEvents):
        * dom/EventContext.h:
        (WebCore::EventContext::currentTargetSameAsTarget):
        * dom/EventDispatcher.cpp:
        (WebCore::EventDispatcher::dispatchEvent):

2012-01-17  David Levin  <levin@chromium.org>

        Need to figure out which assert is firing when worker-read-blob-async.html fails.
        https://bugs.webkit.org/show_bug.cgi?id=76503

        Reviewed by Adam Barth.

        No new functionality exposed so no new tests.

        This is just a quick and dirty way to make these asserts unique
        to expose which one of them is firing on a machine that doesn't have a
        good stack trace.

        * dom/ActiveDOMObject.cpp:
        (WebCore::ContextDestructionObserver::ContextDestructionObserver):
        (WebCore::ContextDestructionObserver::~ContextDestructionObserver):
        (WebCore::ActiveDOMObject::ActiveDOMObject):
        (WebCore::ActiveDOMObject::~ActiveDOMObject):
        * storage/DatabaseSync.cpp:
        (WebCore::DatabaseSync::openDatabaseSync):
        (WebCore::DatabaseSync::~DatabaseSync):
        (WebCore::DatabaseSync::changeVersion):
        (WebCore::DatabaseSync::runTransaction):

2012-01-17  Matthew Delaney  <mdelaney@apple.com>

        On post-Lion releases, preserve the Lion behavior where WebKit explicitly calls -setGeometryFlipped on the hosting layer for applications that were linked on Lion or earlier.
        <rdar://problem/10692025>

        Reviewed by Simon Fraser.

        * platform/mac/WebCoreSystemInterface.h: Added in new function for checking if linked-on-or-before Lion.
        * platform/mac/WebCoreSystemInterface.mm: Ditto.

2012-01-17  Yongsheng Zhu  <yongsheng.zhu@intel.com>

        Clear 'm_size' of DrawingBuffer in the 'clear' function
        https://bugs.webkit.org/show_bug.cgi?id=76239

        Reviewed by Kenneth Russell.
        
        Clear the resources of DrawingBuffer but don't clear 'm_size'. This makes
        's_currentResourceUsePixels' is not calculated correctly.

        * platform/graphics/gpu/DrawingBuffer.cpp:
        (WebCore::DrawingBuffer::clear):

2012-01-17  Philip Rogers  <pdr@google.com>

        Fix getBBox for perpendicular paths
        https://bugs.webkit.org/show_bug.cgi?id=76177

        Reviewed by Darin Adler.

        Test: svg/custom/getBBox-perpendicular-path.svg

        * platform/graphics/FloatRect.cpp:
        (WebCore::FloatRect::unite):
        (WebCore::FloatRect::uniteEvenIfEmpty):
        (WebCore::FloatRect::uniteIfNonZero):
        * platform/graphics/FloatRect.h:
        * rendering/svg/SVGRenderSupport.cpp:
        (WebCore::SVGRenderSupport::computeContainerBoundingBoxes):

2012-01-17  Kenneth Russell  <kbr@google.com>

        [chromium] Apply color profiles in more cases
        https://bugs.webkit.org/show_bug.cgi?id=76498

        Reviewed by Stephen White.

        Not adding new tests, as application of the color profile is not
        guaranteed for images used as textures in WebGL. Ran existing
        WebGL layout tests; all pass.

        * platform/image-decoders/skia/ImageDecoderSkia.cpp:
        (WebCore::ImageFrame::setStatus):

2012-01-17  Nate Chapin  <japhet@chromium.org>

        Ensure we don't cancel revalidation of a CachedResource
        in the middle of successful revalidation.
        It's more reliable to enforce this in CachedResource than in
        SubresourceLoader.
        https://bugs.webkit.org/show_bug.cgi?id=75713

        Reviewed by Adam Barth.

        No new test, the buggy case requires a non-stubbed window.print().

        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::didReceiveResponse):
        (WebCore::SubresourceLoader::didFinishLoading):
        * loader/SubresourceLoader.h:
        * loader/cache/CachedResource.cpp:
        (WebCore::CachedResource::CachedResource):
        (WebCore::CachedResource::clearResourceToRevalidate):
        (WebCore::CachedResource::switchClientsToRevalidatedResource):
        * loader/cache/CachedResource.h:

2012-01-17  Stephen Chenney  <schenney@chromium.org>

        NULL ptr in WebCore::RenderSVGInlineText::localCaretRect
        https://bugs.webkit.org/show_bug.cgi?id=75851

        Reviewed by Ryosuke Niwa.

        Added a check for null box in localCaretRect, to match test in other
        implementations. Adding a manual test because the crash is not reproducible
        in DRT.

        Test: ManualTests/svg-modify-deleted-selection.svg

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

2012-01-17  Caio Marcelo de Oliveira Filho  <caio.oliveira@openbossa.org>

        Uint8ClampedArray support
        https://bugs.webkit.org/show_bug.cgi?id=74455

        Reviewed by Filip Pizlo.

        Test: fast/js/dfg-uint8clampedarray.html

        * CMakeLists.txt:
        * DerivedSources.cpp:
        * DerivedSources.make:
        * DerivedSources.pri:
        * ForwardingHeaders/wtf/Uint8ClampedArray.h: Added.
        * GNUmakefile.list.am:
        * Target.pri:
        * UseJSC.cmake:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSBindingsAllInOne.cpp:
        * bindings/js/JSDOMWindowCustom.cpp:
        * bindings/js/JSUint8ClampedArrayCustom.cpp: Added.
        (WebCore::JSUint8ClampedArray::indexSetter):
        (WebCore::toJS):
        (WebCore::JSUint8ClampedArray::set):
        (WebCore::JSUint8ClampedArrayConstructor::constructJSUint8ClampedArray):
        * bindings/scripts/CodeGeneratorJS.pm:
        (IsTypedArrayType):
        (GenerateHeader):
        * html/canvas/Uint8ClampedArray.idl: Added.
        * page/DOMWindow.idl:

2012-01-17  Abhishek Arya  <inferno@chromium.org>

        Crash in in WebCore::EventHandler::mouseMoved.
        https://bugs.webkit.org/show_bug.cgi?id=76462

        Reviewed by Ryosuke Niwa.

        handleMouseMoveEvent call in EventHandler::mouseMoved can
        blow away the frame from underneath. Protect it with a frameview
        refptr.        

        Test: fast/events/mouse-moved-remove-frame-crash.html

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

2012-01-17  Sam Weinig  <sam@webkit.org>

        Add helper macro for forward declaring objective-c classes
        https://bugs.webkit.org/show_bug.cgi?id=76485

        Reviewed by Anders Carlsson.

        * accessibility/AccessibilityObject.h:
        * bindings/js/ScriptController.h:
        * bridge/objc/objc_utility.h:
        * page/DragClient.h:
        * page/EditorClient.h:
        * platform/AutodrainedPool.h:
        * platform/ContextMenuItem.h:
        * platform/Cursor.h:
        * platform/DragData.h:
        * platform/DragImage.h:
        * platform/KURL.h:
        * platform/Pasteboard.h:
        * platform/PlatformKeyboardEvent.h:
        * platform/PlatformMenuDescription.h:
        * platform/PlatformScreen.h:
        * platform/SharedBuffer.h:
        * platform/Widget.h:
        * platform/cf/SchedulePair.h:
        * platform/graphics/BitmapImage.h:
        * platform/graphics/FontPlatformData.h:
        * platform/graphics/GraphicsContext3D.h:
        * platform/graphics/GraphicsLayer.h:
        * platform/graphics/Icon.h:
        * platform/graphics/Image.h:
        * platform/graphics/MediaPlayer.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:
        * platform/graphics/ca/PlatformCAAnimation.h:
        * platform/graphics/ca/mac/TileCache.h:
        * platform/graphics/mac/ColorMac.h:
        * platform/graphics/mac/MediaPlayerPrivateQTKit.h:
        * platform/graphics/mac/MediaPlayerProxy.h:
        * platform/mac/ClipboardMac.h:
        * platform/mac/LocalCurrentGraphicsContext.h:
        * platform/mac/PasteboardHelper.h:
        * platform/mac/PopupMenuMac.h:
        * platform/mac/ScrollAnimatorMac.h:
        * platform/mac/WebCoreSystemInterface.h:
        * platform/network/ResourceHandle.h:
        * platform/network/ResourceHandleClient.h:
        * platform/network/ResourceHandleInternal.h:
        * platform/network/cf/AuthenticationChallenge.h:
        * platform/network/cf/ResourceError.h:
        * platform/network/cf/ResourceRequest.h:
        * platform/network/cf/ResourceResponse.h:
        * rendering/RenderThemeMac.h:
        Deploy OBJC_CLASS for a little code reduction.

2012-01-17  Andreas Kling  <awesomekling@apple.com>

        SpaceSplitString: Share equivalent string piece vectors.
        <http://webkit.org/b/76458>

        Reviewed by Antti Koivisto.

        Make SpaceSplitStringData ref-counted and cache them in a hashmap to reduce memory
        usage and avoid redundant string splitting work.  This reduces memory consumption
        by 618 kB (on 64-bit) when viewing the full HTML5 spec at <http://whatwg.org/c>

        * dom/SpaceSplitString.h:

            Add the source string to SpaceSplitStringData so we have a key for uncaching
            in the destructor. Also bumped the vector's inline size from 2 to 4.

        * dom/SpaceSplitString.cpp:
        (WebCore::sharedDataMap):
        (WebCore::SpaceSplitStringData::create):
        (WebCore::SpaceSplitStringData::createUnique):
        (WebCore::SpaceSplitStringData::SpaceSplitStringData):
        (WebCore::SpaceSplitString::SpaceSplitString):
        (WebCore::SpaceSplitString::set):
        (WebCore::SpaceSplitStringData::createVector):

            Added create helpers for SpaceSplitStringData. Moved case folding from
            createVector() to create(AtomicString). Added a hash map for caching
            AtomicString -> SpaceSplitStringData.

        (WebCore::SpaceSplitStringData::~SpaceSplitStringData):

            Remove the SpaceSplitStringData from the sharedDataMap().

        * dom/SpaceSplitString.cpp:
        (WebCore::SpaceSplitString::ensureUnique):

            Added, detaches from the shared SpaceSplitStringData if necessary.

        (WebCore::SpaceSplitStringData::add):
        (WebCore::SpaceSplitStringData::remove):

            Assert that add() and remove() are only used on unique SpaceSplitStringData.

        (WebCore::SpaceSplitString::add):
        (WebCore::SpaceSplitString::remove):

            Call ensureUnique() to potentially detach from a shared SpaceSplitStringData
            before making modifications.

        * dom/SpaceSplitString.cpp:
        (WebCore::SpaceSplitStringData::containsAll):

            Added gratuitous fast path for containsAll(*this).

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

        https://bugs.webkit.org/show_bug.cgi?id=76197
        
        Implementation of baseline grid alignment. This patch implements line grid tracking in the layout state,
        and also implements the snapping of lines to baselines. It works with normal flow, positioning and floats and
        with pagination, as long as the grid is inside the pagination context and not outside.

        Reviewed by Simon Fraser.

        Added a bunch of new tests in fast/line-grid.

        * WebCore.xcodeproj/project.pbxproj:
        * rendering/InlineFlowBox.h:
        (WebCore::InlineFlowBox::setHasTextChildren):
        * rendering/LayoutState.cpp:
        (WebCore::LayoutState::LayoutState):
        (WebCore::LayoutState::propagateLineGridInfo):
        (WebCore::LayoutState::establishLineGrid):
        * rendering/LayoutState.h:
        (WebCore::LayoutState::LayoutState):
        (WebCore::LayoutState::pageLogicalHeight):
        (WebCore::LayoutState::currentLineGrid):
        (WebCore::LayoutState::currentLineGridOffset):
        (WebCore::LayoutState::layoutOffset):
        (WebCore::LayoutState::needsBlockDirectionLocationSetBeforeLayout):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::layoutBlockChildren):
        (WebCore::RenderBlock::layoutPositionedObjects):
        (WebCore::RenderBlock::insertFloatingObject):
        (WebCore::RenderBlock::positionNewFloats):
        (WebCore::RenderBlock::pageLogicalTopForOffset):
        (WebCore::RenderBlock::adjustLinePositionForPagination):
        * rendering/RenderBlock.h:
        (WebCore::RenderBlock::lineGridBox):
        (WebCore::RenderBlock::setLineGridBox):
        (WebCore::RenderBlock::RenderBlockRareData::RenderBlockRareData):
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::layoutInlineChildren):
        (WebCore::RenderBlock::layoutLineGridBox):
        * rendering/RenderFlowThread.cpp:
        (WebCore::RenderFlowThread::regionLogicalTopForLine):
        * rendering/RenderFlowThread.h:
        * rendering/RenderView.h:
        (WebCore::RenderView::pushLayoutState):
        * rendering/RootInlineBox.cpp:
        (WebCore::RootInlineBox::alignBoxesInBlockDirection):
        (WebCore::RootInlineBox::lineGridSnapAdjustment):
        * rendering/RootInlineBox.h:

2012-01-17  Tim Horton  <timothy_horton@apple.com>

        -webkit-cross-fade doesn't respect background-size
        https://bugs.webkit.org/show_bug.cgi?id=74902
        <rdar://problem/10605289>

        Reviewed by Simon Fraser.

        CrossfadeGeneratedImage should report its intrinsic size, instead of
        improperly conforming to the size of its container.

        Test: css3/images/cross-fade-background-size.html

        * platform/graphics/CrossfadeGeneratedImage.h:
        (WebCore::CrossfadeGeneratedImage::setContainerSize):
        (WebCore::CrossfadeGeneratedImage::usesContainerSize):
        (WebCore::CrossfadeGeneratedImage::hasRelativeWidth):
        (WebCore::CrossfadeGeneratedImage::hasRelativeHeight):
        (WebCore::CrossfadeGeneratedImage::size):

2012-01-17  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Refactor JavaScriptOutlineDialog: extract FilteredItemSelectionDialog and reuse DialogDelegate.
        https://bugs.webkit.org/show_bug.cgi?id=76455

        Reviewed by Yury Semikhatsky.

        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * inspector/compile-front-end.sh:
        * inspector/front-end/Dialog.js:
        (WebInspector.Dialog):
        (WebInspector.Dialog.prototype._hide):
        * inspector/front-end/FilteredItemSelectionDialog.js: Added.
        (WebInspector.FilteredItemSelectionDialog):
        (WebInspector.FilteredItemSelectionDialog.prototype.position):
        (WebInspector.FilteredItemSelectionDialog.prototype.focus):
        (WebInspector.FilteredItemSelectionDialog.prototype.willHide):
        (WebInspector.FilteredItemSelectionDialog.prototype.onEnter):
        (WebInspector.FilteredItemSelectionDialog.prototype.get _itemsLoaded):
        (WebInspector.FilteredItemSelectionDialog.prototype._createItemElement):
        (WebInspector.FilteredItemSelectionDialog.prototype._hideItemElement):
        (WebInspector.FilteredItemSelectionDialog.prototype._itemElementVisible):
        (WebInspector.FilteredItemSelectionDialog.prototype._showItemElement):
        (WebInspector.FilteredItemSelectionDialog.prototype._checkItemAt):
        (WebInspector.FilteredItemSelectionDialog.prototype._createSearchRegExp):
        (WebInspector.FilteredItemSelectionDialog.prototype._filterItems):
        (WebInspector.FilteredItemSelectionDialog.prototype._onKeyDown):
        (WebInspector.FilteredItemSelectionDialog.prototype._scheduleFilter):
        (WebInspector.FilteredItemSelectionDialog.prototype._updateSelection):
        (WebInspector.FilteredItemSelectionDialog.prototype._onMouseMove):
        (WebInspector.FilteredItemSelectionDialog.prototype._onScroll):
        (WebInspector.FilteredItemSelectionDialog.prototype._highlightItems):
        (WebInspector.FilteredItemSelectionDialog.prototype._clearHighlight):
        (WebInspector.FilteredItemSelectionDialog.prototype._clearElementHighlight.changes.this._elementHighlightChanges.get if):
        (WebInspector.FilteredItemSelectionDialog.prototype._clearElementHighlight):
        (WebInspector.FilteredItemSelectionDialog.prototype._highlightItem.get var):
        (WebInspector.FilteredItemSelectionDialog.prototype._highlightItem):
        (WebInspector.FilteredItemSelectionDialog.prototype._itemElementInViewport):
        (WebInspector.SelectionDialogContentProvider):
        (WebInspector.SelectionDialogContentProvider.prototype.itemTitleAt):
        (WebInspector.SelectionDialogContentProvider.prototype.itemKeyAt):
        (WebInspector.SelectionDialogContentProvider.prototype.itemsCount):
        (WebInspector.SelectionDialogContentProvider.prototype.requestItems):
        (WebInspector.SelectionDialogContentProvider.prototype.selectItem):
        (WebInspector.JavaScriptOutlineDialog):
        (WebInspector.JavaScriptOutlineDialog.didAddChunk):
        (WebInspector.JavaScriptOutlineDialog.install):
        (WebInspector.JavaScriptOutlineDialog._show):
        (WebInspector.JavaScriptOutlineDialog.createShortcut):
        (WebInspector.JavaScriptOutlineDialog.prototype.itemTitleAt):
        (WebInspector.JavaScriptOutlineDialog.prototype.itemKeyAt):
        (WebInspector.JavaScriptOutlineDialog.prototype.itemsCount):
        (WebInspector.JavaScriptOutlineDialog.prototype.requestItems):
        (WebInspector.JavaScriptOutlineDialog.prototype.selectItem):
        (WebInspector.JavaScriptOutlineDialog.prototype._appendItemElements):
        * inspector/front-end/JavaScriptOutlineDialog.js: Removed.
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/filteredItemSelectionDialog.css: Renamed from Source/WebCore/inspector/front-end/javaScriptOutlineDialog.css.
        (.js-outline-dialog > input):
        (.js-outline-dialog > div.progress):
        (.js-outline-dialog > div.container):
        (.js-outline-dialog > .container > div.item):
        (.js-outline-dialog > .container > div.item.selected):
        (.js-outline-dialog > .container > div.item > span.highlight):
        * inspector/front-end/inspector.html:

2012-01-17  Peter Rybin  <peter.rybin@gmail.com>

        Web Inspector: CodeGeneratorInspector.py: start using typedefs
        https://bugs.webkit.org/show_bug.cgi?id=76382

        Reviewed by Yury Semikhatsky.

        Generator is patched accordingly.

        * inspector/CodeGeneratorInspector.py:
        (EnumConstants.get_enum_constant_code):
        (TypeBuilderPass):
        (TypeBindings.create_type_declaration_.EnumBinding.get_code_generator.CodeGenerator):
        (TypeBindings.create_type_declaration_.EnumBinding.get_code_generator.CodeGenerator.get_generate_pass_id):
        (TypeBindings.create_type_declaration_):
        (TypeBindings.create_type_declaration_.PlainString):
        (TypeBindings.create_type_declaration_.PlainString.get_code_generator):
        (TypeBindings.create_type_declaration_.PlainString.reduce_to_raw_type):
        (TypeBindings.create_type_declaration_.PlainString.get_setter_value_expression_pattern):
        (TypeBindings.create_type_declaration_.PlainString.get_in_c_type_text):
        (TypeBindings.create_type_declaration_.TypedefString):
        (TypeBindings.create_type_declaration_.TypedefString.get_code_generator):
        (TypeBindings.create_type_declaration_.TypedefString.get_code_generator.CodeGenerator):
        (TypeBindings.create_type_declaration_.TypedefString.get_code_generator.CodeGenerator.generate_type_builder):
        (TypeBindings.create_type_declaration_.TypedefString.get_code_generator.CodeGenerator.generate_type_builder.String):
        (TypeBindings.create_type_declaration_.TypedefString.get_code_generator.CodeGenerator.register_use):
        (TypeBindings.create_type_declaration_.TypedefString.get_code_generator.CodeGenerator.get_generate_pass_id):
        (TypeBindings.create_type_declaration_.TypedefString.reduce_to_raw_type):
        (TypeBindings.create_type_declaration_.TypedefString.get_setter_value_expression_pattern):
        (TypeBindings.create_type_declaration_.TypedefString.get_in_c_type_text):
        (get_generate_pass_id):
        (ArrayBinding.get_code_generator.CodeGenerator):
        (ArrayBinding.get_code_generator.CodeGenerator.get_generate_pass_id):
        (Generator.process_types.create_type_builder_caller):
        (Generator.process_types.create_type_builder_caller.call_type_builder):
        (Generator.process_types):

2012-01-11  Yury Semikhatsky  <yurys@chromium.org>

        Web Inspector: provide basic information about DOM character data size
        https://bugs.webkit.org/show_bug.cgi?id=76059

        Memory agent allows to estimate size of DOM character data and size of WebCore
        strings held by JavaScript objects.

        Reviewed by Pavel Feldman.

        * bindings/js/ScriptProfiler.h:
        (WebCore::ScriptProfiler::visitExternalJSStrings):
        * bindings/v8/ScriptProfiler.cpp:
        (WebCore::ScriptProfiler::visitExternalJSStrings):
        * bindings/v8/ScriptProfiler.h:
        * bindings/v8/V8Binding.cpp:
        (WebCore::WebCoreStringResource::visitStrings):
        (WebCore::V8BindingPerIsolateData::visitJSExternalStrings):
        * bindings/v8/V8Binding.h:
        * inspector/DOMWrapperVisitor.h:
        * inspector/Inspector.json:
        * inspector/InspectorMemoryAgent.cpp:
        (WebCore::CharacterDataStatistics::DOMTreeStatistics::DOMTreeStatistics):
        (WebCore::CharacterDataStatistics::DOMTreeStatistics::collectNodeStatistics):
        (WebCore::CharacterDataStatistics::CounterVisitor::CounterVisitor):
        (WebCore::CharacterDataStatistics::CounterVisitor::domGroups):
        (WebCore::CharacterDataStatistics::CounterVisitor::strings):
        (WebCore::CharacterDataStatistics::CounterVisitor::visitNode):
        (WebCore::CharacterDataStatistics::CounterVisitor::visitJSExternalString):
        (WebCore::InspectorMemoryAgent::getDOMNodeCount):
        * inspector/InspectorMemoryAgent.h:

2012-01-17  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Dialogs style and DialogDelegate interface fixes.
        https://bugs.webkit.org/show_bug.cgi?id=76449

        Reviewed by Pavel Feldman.

        * inspector/front-end/Dialog.js:
        (WebInspector.Dialog):
        (WebInspector.Dialog.currentInstance):
        (WebInspector.Dialog.show):
        (WebInspector.Dialog.hide):
        (WebInspector.Dialog.prototype._hide):
        (WebInspector.Dialog.prototype._onGlassPaneFocus):
        (WebInspector.Dialog.prototype._onFocus):
        (WebInspector.Dialog.prototype._position):
        (WebInspector.Dialog.prototype._onKeyDown):
        (WebInspector.DialogDelegate.prototype.wasShown):
        (WebInspector.DialogDelegate.prototype.position):
        (WebInspector.DialogDelegate.prototype.focus):
        (WebInspector.DialogDelegate.prototype.onEnter):
        (WebInspector.DialogDelegate.prototype.willHide):
        * inspector/front-end/GoToLineDialog.js:
        (WebInspector.GoToLineDialog):
        (WebInspector.GoToLineDialog.prototype.focus):
        (WebInspector.GoToLineDialog.prototype._onGoClick):
        (WebInspector.GoToLineDialog.prototype._applyLineNumber):
        (WebInspector.GoToLineDialog.prototype.onEnter):
        * inspector/front-end/dialog.css:
        (.dialog):

2012-01-17  Yury Semikhatsky  <yurys@chromium.org>

        Web Inspector: ConsoleMessage.cpp and InspectorResourceAgent.cpp doesn't conform to Inspector.json
        https://bugs.webkit.org/show_bug.cgi?id=76403

        A couple of protocol fixes.

        Reviewed by Pavel Feldman.

        * inspector/ConsoleMessage.cpp: return 'log' in case some unsupported value is passed.
        We cannot omit that return statement as GCC would complain on missing return statement
        despite all enum values are listed.
        (WebCore::messageTypeValue):
        * inspector/Inspector-0.1.json: fixed v0.1 protocol definition.
        * inspector/Inspector.json: made CachedResource.response field optional.

2012-01-17  Ilya Tikhonovsky  <loislo@chromium.org>

        [Chromium] Web Inspector: remove "Document DOM tree" class and "Detached DOM tree" from the Summary view.
        https://bugs.webkit.org/show_bug.cgi?id=76450

        Reviewed by Yury Semikhatsky.

        * inspector/front-end/HeapSnapshot.js:
        (WebInspector.HeapSnapshot.prototype._buildAggregates):

2012-01-17  Nikolas Zimmermann  <nzimmermann@rim.com>

        Large SVG text layout performance regression in r81168
        https://bugs.webkit.org/show_bug.cgi?id=65711

        Reviewed by Zoltan Herczeg.

        Final patch fixing the performance regression from r81168 plus giving us more performance we ever had.
        The testcase attached to bug 65711 creates 200 tspans as <text> children, and modifies just the first <tspan>s
        content periodically using a timer. It ran with <3 FPS in release builds before, and now at around 60 FPS,
        where the most dominant code path remaining is CG painting text. Still theres room to optimize further, as
        Intruments shows.

        Historically we rebuilt all SVGTextLayoutAttributes stored in the RenderSVGInlineText, whenever any
        children of the <text> subtree changed, in any way. This lead to a recomputation of the x/y/dx/dy/rotate
        value lists, for the whole tree, a recreation of the line box tree and finally a measurement of all characters
        in the subtree.

        This patch, and its previous patches preparing this, introduces progressive relayout for the SVG text subtree.
        DOM tree mutations, x/y/dx/dy/rotate value lists changes, and measuring-all-characters are now strictly decoupled.

        #1) x/y/dx/dy/rotate list changes:
        The x/y/dx/dy/rotate lists are only ever rebuilt, if they change or upon the initial RenderSVGText layout.
        This information is now cached in the so-called SVGCharacterDataMap, in each of the SVGTextLayoutAttributes,
        associated with a specific RenderSVGInlineText.

        #2) DOM tree mutations:
        If a new RenderSVGInlineText gets added to the tree, we have to create SVGTextLayoutAttributes for the new
        renderer, measure its characters, and cache the information in the attributes. Adding a new renderer to
        a SVG <text> subtree can affect the positioning of the previous and next sibling in the tree, due the
        whitespace merging logic. Example:

        <text y="50" x="50 100 150">A<tspan></tspan> C</text>:
        RenderSVGText {text} at (50,36) size 111x18 contains 1 chunk(s)
          RenderSVGInlineText {#text} at (0,0) size 12x18
            chunk 1 text run 1 at (50.00,50.00) startOffset 0 endOffset 1 width 12.00: "A"
          RenderSVGTSpan {tspan} at (0,0) size 0x0
          RenderSVGInlineText {#text} at (50,0) size 61x18
            chunk 1 text run 1 at (100.00,50.00) startOffset 0 endOffset 1 width 4.00: " "
            chunk 1 text run 1 at (150.00,50.00) startOffset 0 endOffset 1 width 11.00: "C"

        <text y="50" x="50 100 150">A<tspan>B</tspan> C</text>:
        RenderSVGText {text} at (50,36) size 115x18 contains 1 chunk(s)
          RenderSVGInlineText {#text} at (0,0) size 12x18
            chunk 1 text run 1 at (50.00,50.00) startOffset 0 endOffset 1 width 12.00: "A"
          RenderSVGTSpan {tspan} at (0,0) size 11x18
            RenderSVGInlineText {#text} at (50,0) size 11x18
              chunk 1 text run 1 at (100.00,50.00) startOffset 0 endOffset 1 width 11.00: "B"
          RenderSVGInlineText {#text} at (100,0) size 15x18
            chunk 1 text run 1 at (150.00,50.00) startOffset 0 endOffset 2 width 15.00: " C"

        Its obvious that adding a #text node as child to the <tspan> potentially affects the next & previous
        siblings in the DOM tree. Take extra care of these possibilities, by properly remeasuring not only
        the newly added renderer, but also the previous & next siblings layout attributes.

        Mutation of text nodes, or removal of text/tspan elements from the tree is handled in the same way.

        #3) Measuring the text subtree:
        Don't cache the metrics information in the SVGRootInlineBox, as it doesn't survive relayouts (RenderSVGText::layout).
        They're stored in the SVGTextLayoutAttributes, and will be updated if the underlying text content changes.

        Tests: svg/text/append-text-node-to-tspan.html
               svg/text/modify-text-node-in-tspan.html
               svg/text/remove-text-node-from-tspan.html

        * rendering/svg/RenderSVGInline.cpp:
        (WebCore::RenderSVGInline::addChild):
        * rendering/svg/RenderSVGInline.h:
        * rendering/svg/RenderSVGInlineText.cpp:
        (WebCore::RenderSVGInlineText::willBeDestroyed):
        (WebCore::RenderSVGInlineText::setTextInternal):
        (WebCore::RenderSVGInlineText::styleDidChange):
        * rendering/svg/RenderSVGInlineText.h:
        (WebCore::RenderSVGInlineText::layoutAttributes):
        * rendering/svg/RenderSVGText.cpp:
        (WebCore::recursiveUpdateLayoutAttributes):
        (WebCore::RenderSVGText::layoutAttributesChanged):
        (WebCore::findPreviousAndNextAttributes):
        (WebCore::RenderSVGText::layoutAttributesWillBeDestroyed):
        (WebCore::RenderSVGText::textDOMChanged):
        (WebCore::RenderSVGText::layout):
        (WebCore::RenderSVGText::addChild):
        (WebCore::recursiveCollectLayoutAttributes):
        (WebCore::RenderSVGText::rebuildLayoutAttributes):
        * rendering/svg/RenderSVGText.h:
        (WebCore::RenderSVGText::layoutAttributes):
        * rendering/svg/SVGRootInlineBox.cpp:
        (WebCore::SVGRootInlineBox::computePerCharacterLayoutInformation):
        (WebCore::findFirstAndLastAttributesInVector):
        (WebCore::reverseInlineBoxRangeAndValueListsIfNeeded):
        (WebCore::SVGRootInlineBox::reorderValueLists):
        * rendering/svg/SVGRootInlineBox.h:
        * rendering/svg/SVGTextLayoutAttributes.h:
        * rendering/svg/SVGTextLayoutAttributesBuilder.cpp:
        (WebCore::SVGTextLayoutAttributesBuilder::rebuildMetricsForWholeTree):
        * rendering/svg/SVGTextLayoutEngine.cpp:
        (WebCore::SVGTextLayoutEngine::SVGTextLayoutEngine):
        (WebCore::SVGTextLayoutEngine::currentLogicalCharacterAttributes):
        (WebCore::SVGTextLayoutEngine::currentLogicalCharacterMetrics):
        (WebCore::SVGTextLayoutEngine::currentVisualCharacterMetrics):
        (WebCore::SVGTextLayoutEngine::layoutTextOnLineOrPath):
        * rendering/svg/SVGTextLayoutEngine.h:
        (WebCore::SVGTextLayoutEngine::layoutAttributes):
        * rendering/svg/SVGTextMetrics.h:
        * rendering/svg/SVGTextMetricsBuilder.cpp:
        (WebCore::SVGTextMetricsBuilder::measureTextRenderer):
        * rendering/svg/SVGTextQuery.cpp:
        (WebCore::SVGTextQuery::modifyStartEndPositionsRespectingLigatures):
        * svg/SVGTextContentElement.cpp:
        (WebCore::SVGTextContentElement::childrenChanged):

2012-01-11  Alexander Pavlov  <apavlov@chromium.org>

        Web Inspector: [TextPrompt] Autocomplete adds unwanted text that's hard to remove
        https://bugs.webkit.org/show_bug.cgi?id=76058

        Reviewed by Pavel Feldman.

        As per the results of a war room:
        - Auto-suggest only after user typing (avoid showing suggestions when navigating through the user input.)
        - Do not select the first item if the suggest box is shown at the end of prompt (to allow Enter to commit the input.)
        - Only show grayed autocompletion at the end of prompt (otherwise show a suggest box with the first item selected.)
        - Grayed autocompletion can only be accepted with the End or Right keys.
        - Enter can accept a selected suggestion item from the list, without committing the input.
        - Retain the CSS model editing behavior as close to the existing one as possible.
        - Enable PageUp/PageDown to navigate the suggest box items.

        * inspector/front-end/StylesSidebarPane.js:
        (WebInspector.StylePropertyTreeElement.prototype):
        ():
        * inspector/front-end/TextPrompt.js:
        (WebInspector.TextPrompt.prototype.set text):
        (WebInspector.TextPrompt.prototype._removeSuggestionAids):
        (WebInspector.TextPrompt.prototype._selectStart.moveBackIfOutside):
        (WebInspector.TextPrompt.prototype._selectStart):
        (WebInspector.TextPrompt.prototype.onKeyDown):
        (WebInspector.TextPrompt.prototype.acceptAutoComplete):
        (WebInspector.TextPrompt.prototype.complete):
        (WebInspector.TextPrompt.prototype._completionsReady):
        (WebInspector.TextPrompt.prototype.isCaretAtEndOfPrompt):
        (WebInspector.TextPrompt.prototype.tabKeyPressed):
        (WebInspector.TextPrompt.prototype.downKeyPressed):
        (WebInspector.TextPrompt.prototype.pageUpKeyPressed):
        (WebInspector.TextPrompt.prototype.pageDownKeyPressed):
        (WebInspector.TextPrompt.SuggestBox.prototype._onNextItem):
        (WebInspector.TextPrompt.SuggestBox.prototype._onPreviousItem):
        (WebInspector.TextPrompt.SuggestBox.prototype.updateSuggestions):
        (WebInspector.TextPrompt.SuggestBox.prototype._updateItems):
        (WebInspector.TextPrompt.SuggestBox.prototype._canShowBox):
        (WebInspector.TextPrompt.SuggestBox.prototype._rememberRowCountPerViewport):
        (WebInspector.TextPrompt.SuggestBox.prototype._completionsReady):
        (WebInspector.TextPrompt.SuggestBox.prototype.pageUpKeyPressed):
        (WebInspector.TextPrompt.SuggestBox.prototype.pageDownKeyPressed):
        (WebInspector.TextPrompt.SuggestBox.prototype.enterKeyPressed):

2012-01-17  Alexander Pavlov  <apavlov@chromium.org>

        Web Inspector: CSS backend doesn't conform to Inspector.json
        https://bugs.webkit.org/show_bug.cgi?id=76402

        Reviewed by Yury Semikhatsky.

        * inspector/Inspector.json:
        * inspector/InspectorStyleSheet.cpp:
        (WebCore::InspectorStyleSheet::buildObjectForStyle):

2012-01-17  Tommy Widenflycht  <tommyw@google.com>

        MediaStream API: Add the mediaStream constructor
        https://bugs.webkit.org/show_bug.cgi?id=76436

        Adding support for creating a MediaStream using a collection of MediaStreamTracks.

        Reviewed by Adam Barth.

        Tests for the Media Stream API will be provided by the bug 56587, pending enough landed code.

        * mediastream/MediaStream.cpp:
        (WebCore::MediaStream::create):
        * mediastream/MediaStream.h:
        * mediastream/MediaStream.idl:
        * mediastream/MediaStreamTrack.cpp:
        (WebCore::MediaStreamTrack::component):
        * mediastream/MediaStreamTrack.h:
        * platform/mediastream/MediaStreamCenter.cpp:
        (WebCore::MediaStreamCenter::didConstructMediaStream):
        * platform/mediastream/MediaStreamCenter.h:

2012-01-17  Joshua Bell  <jsbell@chromium.org>

        IndexedDB: IDBIndex.get/getKey should yield undefined, not an error
        https://bugs.webkit.org/show_bug.cgi?id=76116

        Pass an undefined value (for IDBIndex.get()) or a null key
        (for IDBIndex.getKey()) back as the result, rather than raising
        an exception.

        Reviewed by Adam Barth.

        Tests: storage/indexeddb/index-basics.html
               storage/indexeddb/cursor-index-delete.html
               storage/indexeddb/duplicates.html

        * storage/IDBIndexBackendImpl.cpp:
        (WebCore::IDBIndexBackendImpl::getInternal):
        * storage/IDBRequest.cpp:
        (WebCore::IDBRequest::onSuccess):

2012-01-17  Luke Macpherson   <macpherson@chromium.org>

        Remove references to CSSPrimitiveValue::primitiveType().
        https://bugs.webkit.org/show_bug.cgi?id=76363

        Reviewed by Hajime Morita.

        No new tests / refactoring only.

        Goal is to remove primitiveType() completely. Only code left using it after this patch is in SVG.
        I've introduced some abstractions in CSSPrimitiveValue for time and angles to reduce duplicated code elsewhere.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::cssPropertyMatches):
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseColor):
        * css/CSSPrimitiveValue.cpp:
        (WebCore::CSSPrimitiveValue::computeDegrees):
        * css/CSSPrimitiveValue.h:
        (WebCore::CSSPrimitiveValue::isAngle):
        (WebCore::CSSPrimitiveValue::isAttr):
        (WebCore::CSSPrimitiveValue::isCounter):
        (WebCore::CSSPrimitiveValue::isFontIndependentLength):
        (WebCore::CSSPrimitiveValue::isLength):
        (WebCore::CSSPrimitiveValue::isPx):
        (WebCore::CSSPrimitiveValue::isRect):
        (WebCore::CSSPrimitiveValue::isRGBColor):
        (WebCore::CSSPrimitiveValue::isShape):
        (WebCore::CSSPrimitiveValue::isTime):
        (WebCore::CSSPrimitiveValue::computeTime):
        * css/CSSStyleSelector.cpp:
        (WebCore::convertToLength):
        (WebCore::createGridTrackBreadth):
        (WebCore::CSSStyleSelector::applyProperty):
        (WebCore::CSSStyleSelector::mapFillSize):
        (WebCore::CSSStyleSelector::mapFillXPosition):
        (WebCore::CSSStyleSelector::mapFillYPosition):
        (WebCore::CSSStyleSelector::mapAnimationDelay):
        (WebCore::CSSStyleSelector::mapAnimationDuration):
        (WebCore::CSSStyleSelector::mapNinePieceImageSlice):
        (WebCore::CSSStyleSelector::mapNinePieceImageQuad):
        (WebCore::CSSStyleSelector::colorFromPrimitiveValue):
        (WebCore::CSSStyleSelector::createTransformOperations):
        (WebCore::CSSStyleSelector::createCustomFilterOperation):
        (WebCore::CSSStyleSelector::createFilterOperations):
        * css/MediaQueryEvaluator.cpp:
        (WebCore::parseAspectRatio):
        (WebCore::numberValue):
        (WebCore::computeLength):
        * editing/EditingStyle.cpp:
        (WebCore::cssValueToRGBA):
        (WebCore::EditingStyle::extractFontSizeDelta):
        (WebCore::EditingStyle::mergeStyleFromRulesForSerialization):
        (WebCore::isCSSValueLength):
        (WebCore::hasTransparentBackgroundColor):

2012-01-16  Hajime Morrita  <morrita@chromium.org>

        [Internals] member varaibles should follow naming convention.
        https://bugs.webkit.org/show_bug.cgi?id=76426

        Reviewed by Kent Tamura.

        No new tests. Just a rename.

        * testing/Internals.cpp:
        (WebCore::Internals::Internals):
        (WebCore::Internals::setPasswordEchoEnabled):
        (WebCore::Internals::setPasswordEchoDurationInSeconds):
        (WebCore::Internals::reset):
        * testing/Internals.h:

2012-01-16  Hayato Ito  <hayato@chromium.org>

        Implement multiple AT_TARGET event dispatching in regard to shadow tree.
        https://bugs.webkit.org/show_bug.cgi?id=76217

        Reviewed by Dimitri Glazkov.

        The original motivation is to fix the regression: Event.eventPhase is not set to 2
        (at target) when handling dblclick event in <input> element.
        Since the issue is not specific to <input> element, but general one, this patch fixes
        the regression by adapting a living draft spec of shadow DOM.
        This won't break a compatibility if there is no shadow boundaries in event dispatching.
        See the following shadow dom spec how multiple AT_TARGET events work.
        http://dvcs.w3.org/hg/webcomponents/raw-file/tip/spec/shadow/index.html#event-dispatch

        * dom/EventContext.cpp:
        (WebCore::EventContext::handleLocalEvents):

2012-01-16  Jason Liu  <jason.liu@torchmobile.com.cn>

        platformRequest(QNX) need to get the conditional information from ResourceRequest.
        https://bugs.webkit.org/show_bug.cgi?id=75216

        Reviewed by George Staikos.

        Pass the isConditional() flag in ResourceRequest to the QNX platform's network request.
        QNX platform's network needs this flag to determine whether to use disk-cache.

        * platform/network/blackberry/ResourceRequestBlackBerry.cpp:
        (ResourceRequest::initializePlatformRequest):

2012-01-16  Robert Hogan  <robert@webkit.org>

        Heap-use-after-free in WebCore::RenderBlock::selectionGaps
        https://bugs.webkit.org/show_bug.cgi?id=75013

        Reviewed by David Hyatt.

        Test: fast/table/multiple-captions-crash3.html
              fast/table/multiple-captions-crash4.html
              fast/table/multiple-captions-crash5.html

        When a child float is removed, the parent needs to ensure any reference to the
        child is also removed from the floating objects list in any sibling block that 
        it intruded into.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::markSiblingsWithFloatsForLayout):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::removeFloatingOrPositionedChildFromBlockLists):

2012-01-16  Enrica Casucci  <enrica@apple.com>

        REGRESSION: r102553 Autocorrection bubble doesn't show up
        https://bugs.webkit.org/show_bug.cgi?id=76408
        <rdar://problem/10644746>

        Prior to r102553 Editor::markAllMisspellingsAndBadGrammarInRanges() used to pass its
        textCheckingOptions directly to markAndReplaceFor(). Now a request object is used,
        but, when the object is created, the TextCheckingTypeShowCorrectionPanel flag is dropped.
        
        Reviewed by Darin Adler.

        * editing/Editor.cpp:
        (WebCore::Editor::resolveTextCheckingTypeMask): Add TextCheckingTypeShowCorrectionPanel to
        the returned checkingTypes when appropriate.

2012-01-16  Jon Lee  <jonlee@apple.com>

        Build fix for r105086.

        * Configurations/FeatureDefines.xcconfig:
        * notifications/NotificationCenter.idl: change to use ENABLE_TEXT_NOTIFICATIONS_ONLY, which is only defined on Mac platform.

2012-01-16  Andreas Kling  <awesomekling@apple.com>

        Fix typo in StyledElement::mappedAttributeCount().
        <http://webkit.org/b/76393>

        Rubber-stamped by Antti Koivisto.

        * dom/StyledElement.h:
        (WebCore::StyledElement::mappedAttributeCount): Less &&, more ?:

2012-01-16  Jon Lee  <jonlee@apple.com>

        Build fix for r105086.

        * notifications/NotificationCenter.idl: expand ENABLE macro for .idl.

2012-01-16  Antti Koivisto  <antti@apple.com>

        Cache CSSStyleSelector::Features in RuleSets
        https://bugs.webkit.org/show_bug.cgi?id=76337

        Reviewed by Andreas Kling.

        Currently whenever the style selector is updated we go through all the applicable rules and
        collect the used features again. We should keep the features around as part of the RuleSets
        and update them incrementally. Collecting the features will then be just a matter of taking
        the union of all features used by the RuleSets.
        
        This is 1-2% CPU time reduction (engadget, nytimes) due less time spent in feature collection.
        
        This also simplifies the code by removing the need to cache the default style sheet features
        separately. 

        * css/CSSStyleSelector.cpp:
        
            Remove the global siblingRulesInDefaultStyle and uncommonAttributeRulesInDefaultStyle RuleSets.
            These are now part of the cached features of the defaultStyle.
        
        (WebCore::RuleSet::features):
        
            Add a field for caching the features.
        
        (WebCore::makeRuleSet):
        (WebCore::CSSStyleSelector::collectFeatures):
        
            Unify the features of all RuleSets.
            Create RuleSets for sibling and uncommon attribute lookups at the end.
        
        (WebCore::CSSStyleSelector::appendAuthorStylesheets):
        (WebCore::CSSStyleSelector::Features::add):
        (WebCore::ensureDefaultStyleSheetsForElement):
        (WebCore::CSSStyleSelector::locateSharedStyle):
        (WebCore::collectFeaturesFromSelector):
        (WebCore::collectFeaturesFromRuleData):
        (WebCore::RuleSet::addToRuleSet):
        (WebCore::RuleSet::addRule):
        
            Collect the features when adding the rules rather than as a separate pass through all the rules.
        
        * css/CSSStyleSelector.h:
        (WebCore::CSSStyleSelector::usesSiblingRules):
        (WebCore::CSSStyleSelector::RuleSelectorPair::RuleSelectorPair):
        
            Use Vector instead of a RuleSet for sibling and uncommon attribute selectors so unifying
            Features is simpler.

2012-01-16  Simon Fraser  <simon.fraser@apple.com>

        Huge filter area cause hangs and malloc failures
        https://bugs.webkit.org/show_bug.cgi?id=75711

        Reviewed by Dean Jackson.
        
        Filtering an element with a child that had a huge negative text-indent
        was extremely slow, because transparencyClipBox() returned a huge rect.
        
        Add a method, paintingExtent(), that wraps transparencyClipBox()
        and intersects it with the paintDirtyRect to constrain the size
        of the rect used for filters and transparency layers.

        Transparency layer extent is not testable in layout tests.

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::paintingExtent):
        (WebCore::RenderLayer::beginTransparencyLayers): Floating point literals are required
        to avoid ambiguous constructor call.
        (WebCore::RenderLayer::paintLayer):
        (WebCore::RenderLayer::paintLayerContents):
        * rendering/RenderLayer.h:

2012-01-16  Simon Fraser  <simon.fraser@apple.com>

        Borders and box masks behave incorrectly with overlapping offsets
        https://bugs.webkit.org/show_bug.cgi?id=76137

        Reviewed by Dean Jackson.
        
        There are some correct behaviors for -webkit-mask-box-image where
        parts of the mask are missing (when the sum of the slice sizes is
        greater than one dimension of the image). To render correctly
        in these cases, always use a transparency layer when rendering
        the mask.

        Test: fast/backgrounds/mask-box-image.html

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

2012-01-16  Simon Fraser  <simon.fraser@apple.com>

        Filtered element with composited content beneath it must be composited
        https://bugs.webkit.org/show_bug.cgi?id=76322

        Reviewed by Dean Jackson.
        
        If a RenderLayer has a filter effect, and a composited descendant, then
        that layer must also be composited so that the filter is applied via
        the compositing system, rather than via painting (otherwise the filter
        will not affect the descendant).

        Test: css3/filters/filtered-compositing-descendant.html

        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::requiresCompositingWhenDescendantsAreCompositing):

2012-01-16  Andreas Kling  <awesomekling@apple.com>

        Fix assertion failure in mappedAttributesEquivalent().
        <http://webkit.org/b/76393>

        Rubber-stamped by Antti Koivisto.

        The assertion that two mapped attributes with matching name/value will always
        have the exact same decl() was wrong, so make it a proper check once again.

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

2012-01-16  Jon Lee  <jonlee@apple.com>

        Remove HTML notifications support on Mac
        https://bugs.webkit.org/show_bug.cgi?id=76401
        <rdar://problem/10589881>

        Reviewed by Sam Weinig.

        * notifications/NotificationCenter.idl:

2012-01-16  xueqing huang  <huangxueqing@baidu.com>

        Add offline web applications API applicationCache.abort.
        https://bugs.webkit.org/show_bug.cgi?id=76270

        Reviewed by Alexey Proskuryakov.

        Tests:
        http/tests/appcache/abort-cache-onchecking.html
        http/tests/appcache/abort-cache-onchecking-manifest-404.html
        http/tests/appcache/abort-cache-onchecking-resource-404.html
        http/tests/appcache/abort-cache-ondownloading.html
        http/tests/appcache/abort-cache-ondownloading-manifest-404.html
        http/tests/appcache/abort-cache-ondownloading-resource-404.html
        http/tests/appcache/abort-cache-onprogress.html

        * loader/appcache/ApplicationCacheGroup.cpp:
        (WebCore::ApplicationCacheGroup::abort):
        * loader/appcache/ApplicationCacheGroup.h:
        * loader/appcache/ApplicationCacheHost.cpp:
        (WebCore::ApplicationCacheHost::abort):
        * loader/appcache/ApplicationCacheHost.h:
        * loader/appcache/DOMApplicationCache.cpp:
        (WebCore::DOMApplicationCache::abort):
        * loader/appcache/DOMApplicationCache.h:
        * loader/appcache/DOMApplicationCache.idl:

2012-01-16  Andreas Kling  <awesomekling@apple.com>

        Remove caching of mapped attribute count on NamedNodeMap.
        <http://webkit.org/b/76393>

        Reviewed by Antti Koivisto.

        Stop caching the mapped attribute count on Element's attribute map, effectively
        shrinking NamedNodeMap by one CPU word. The price we pay is always walking over
        the map in matchAllRules(), even if it has no mapped attribute styles.

        This reduces memory consumption by 605 kB (on 64-bit) when viewing the full
        HTML5 spec at <http://whatwg.org/c>

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

            Moved here from NamedNodeMap::mappedMapsEquivalent() to accomodate the only
            user under the added assumption that the two attribute maps have the same
            number of mapped attributes.

        (WebCore::CSSStyleSelector::matchAllRules):

            We don't have NamedNodeMap::hasMappedAttributes() at our convenience any
            more so walk the attribute map (if there is one) looking for styles to add.

        (WebCore::CSSStyleSelector::canShareStyleWithElement):

            Compare the elements' mapped attribute counts at an earlier time. This is
            slightly more expensive but we used to do it near the end anyway and this
            ends up rejecting elements that can't share style before doing a lot of
            semi-expensive checks.

        * dom/StyledElement.h:
        (WebCore::StyledElement::mappedAttributeCount):
        * dom/NamedNodeMap.h:
        (WebCore::NamedNodeMap::mappedAttributeCount):
        * dom/NamedNodeMap.cpp:
        (WebCore::NamedNodeMap::clearAttributes):

            Remove NamedNodeMap::m_mappedAttributeCount and add a function that walks
            the attribute map counting the attributes that have a decl().

        * dom/NamedNodeMap.h:
        * dom/StyledElement.cpp:
        (WebCore::StyledElement::attributeChanged):

            Remove declAdded()/declRemoved() callbacks.

2012-01-16  Jer Noble  <jer.noble@apple.com>

        Unreviewed build fix.

        Added necessary header files to VectorMath.cpp to fix Chromium compile error.

        * platform/audio/VectorMath.cpp:

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

        WebAudio: Optimize AudioChannel::maxAbsValue().
        https://bugs.webkit.org/show_bug.cgi?id=74359

        Reviewed by Eric Carlson.

        No new tests; optimization of existing code, so covered by existing test cases.

        * platform/audio/AudioChannel.cpp:
        (WebCore::AudioChannel::maxAbsValue): Replace implementation with optimized vector math 
            operation.
        * platform/audio/VectorMath.cpp:
        (WebCore::VectorMath::vmaxmgv): Vector math operation for determining maximum
            magnitude in a vector.
        * platform/audio/VectorMath.h:

2012-01-16  Joe Thomas  <joethomas@motorola.com>

        https://bugs.webkit.org/show_bug.cgi?id=41210
        Cross Origin XMLHttpRequest can not expose headers indicated in Access-Control-Expose-Headers HTTP Response Header

        Parsing the "Access-Control-Expose-Headers" in the XMLHTTPRequest response header.
        If the custom response-header is part of Access-Control-Expose-Headers, then consider that custom response-header as a valid one.

        Reviewed by Alexey Proskuryakov.

        Test: http/tests/xmlhttprequest/access-control-response-with-expose-headers.html

        * loader/CrossOriginAccessControl.cpp:
        (WebCore::parseAccessControlExposeHeadersAllowList):  parsing logic of Access-Control-Expose-Headers
        * loader/CrossOriginAccessControl.h:
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::getAllResponseHeaders): checking whether the custom response-header is part of "Access-Control-Expose-Headers"
        (WebCore::XMLHttpRequest::getResponseHeader):  checking whether the custom response-header is part of "Access-Control-Expose-Headers"

2012-01-16  Pavel Feldman  <pfeldman@google.com>

        Web Inspector: timeline record bars may overlap with the records column
        https://bugs.webkit.org/show_bug.cgi?id=76387

        Reviewed by Yury Semikhatsky.

        * inspector/front-end/timelinePanel.css:
        (#timeline-container .split-view-sidebar-left):

2012-01-13  Alexander Pavlov  <apavlov@chromium.org>

        Web Inspector: styles sidebar rendering is broken
        https://bugs.webkit.org/show_bug.cgi?id=76065

        Reviewed by Pavel Feldman.

        * inspector/front-end/StylesSidebarPane.js:
        (WebInspector.StylePropertiesSection):
        * inspector/front-end/elementsPanel.css:
        (.styles-section .header .subtitle):
        (.styles-section .properties):

2012-01-16  Csaba Osztrogonác  <ossy@webkit.org>

        [Qt] Inremental build problem revealed by https://bugs.webkit.org/show_bug.cgi?id=74455

        Reviewed by Tor Arne Vestbø.

        * DerivedSources.pri: supplemental_dependency.tmp must depends on idl files too.

2012-01-16  Pavel Feldman  <pfeldman@google.com>

        Web Inspector: do not merge iframes into a single DOM hierarchy.
        https://bugs.webkit.org/show_bug.cgi?id=76383

        Reviewed by Timothy Hatcher.

        * inspector/DOMEditor.h:
        * inspector/Inspector.json:
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::unbind):
        (WebCore::InspectorDOMAgent::buildObjectForNode):
        (WebCore::InspectorDOMAgent::innerFirstChild):
        (WebCore::InspectorDOMAgent::innerParentNode):
        * inspector/front-end/CSSStyleModel.js:
        (WebInspector.CSSStyleModel.prototype.setRuleSelector.callback):
        (WebInspector.CSSStyleModel.prototype.setRuleSelector):
        (WebInspector.CSSStyleModel.prototype.addRule.callback):
        (WebInspector.CSSStyleModel.prototype.addRule):
        (WebInspector.CSSStyleModel.prototype._ownerDocumentId):
        * inspector/front-end/DOMAgent.js:
        (WebInspector.DOMNode):
        (WebInspector.DOMNode.prototype.getChildNodes):
        (WebInspector.DOMNode.prototype._insertChild):
        (WebInspector.DOMNode.prototype._setChildrenPayload):
        (WebInspector.DOMDocument):
        (WebInspector.DOMAgent.prototype._setDetachedRoot):
        * inspector/front-end/ElementsTreeOutline.js:

2012-01-16  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: setCurrentFocusElement should not update selection when focus is moved to text field or text area.
        https://bugs.webkit.org/show_bug.cgi?id=76384

        Reviewed by Timothy Hatcher.

        * inspector/front-end/JavaScriptOutlineDialog.js:
        (WebInspector.JavaScriptOutlineDialog):
        * inspector/front-end/UIUtils.js:
        (WebInspector._isTextEditingElement):
        (WebInspector.setCurrentFocusElement):

2012-01-16  Nikolas Zimmermann  <nzimmermann@rim.com>

        Large SVG text layout performance regression in r81168
        https://bugs.webkit.org/show_bug.cgi?id=65711

        Reviewed by Zoltan Herczeg.

        Enable simple code path in SVGTextMetricsBuilder, allowing fast-measurement of simple text.
        This affects the geometry of several <text> elements, thus several tests need rebaselining.

        * rendering/svg/SVGTextMetricsBuilder.cpp:
        (WebCore::SVGTextMetricsBuilder::advance):
        (WebCore::SVGTextMetricsBuilder::advanceComplexText):

2012-01-16  Peter Rybin  <peter.rybin@gmail.com>

        Web Inspector: CodeGeneratorInspector.py: generate array types.
        https://bugs.webkit.org/show_bug.cgi?id=75284

        Reviewed by Yury Semikhatsky.

        New classes are generated for ecah array type instance. Some includes
        and ifdefs are fixed.

        * inspector/CodeGeneratorInspector.py:
        (ArrayBinding):
        (ArrayBinding.get_code_generator):
        (ArrayBinding.get_code_generator.CodeGenerator):
        (ArrayBinding.get_code_generator.CodeGenerator.generate_type_builder):
        (ArrayBinding.get_code_generator.CodeGenerator.generate_type_builder.AdHocTypeContext):
        (ArrayBinding.get_code_generator.CodeGenerator.generate_type_builder.AdHocTypeContext.get_type_name_fix):
        (ArrayBinding.get_code_generator.CodeGenerator.generate_type_builder.AdHocTypeContext.get_type_name_fix.NameFix):
        (ArrayBinding.get_code_generator.CodeGenerator.generate_type_builder.AdHocTypeContext.get_type_name_fix.NameFix.output_comment):
        (ArrayBinding.get_code_generator.CodeGenerator.generate_type_builder.AdHocTypeContext.call_generate_type_builder):
        (ArrayBinding.get_code_generator.CodeGenerator.generate_forward_declaration):
        (ArrayBinding.get_code_generator.CodeGenerator.register_use):
        (ArrayBinding.get_in_c_type_text):
        (ArrayBinding.get_setter_value_expression_pattern):
        (ArrayBinding.reduce_to_raw_type):
        (RawTypeBinding):
        (RawTypeBinding.__init__):
        (RawTypeBinding.get_code_generator):
        (RawTypeBinding.get_in_c_type_text):
        (RawTypeBinding.get_setter_value_expression_pattern):
        (RawTypeBinding.reduce_to_raw_type):
        (TypeData.__init__):
        (TypeData.get_binding):
        * inspector/ConsoleMessage.cpp:
        * inspector/InspectorValues.h:

2012-01-15  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: editing body multiplies head
        https://bugs.webkit.org/show_bug.cgi?id=62272

        Reviewed by Yury Semikhatsky.

        Test: inspector/elements/set-outer-html-body.html

        * inspector/DOMEditor.cpp:
        (WebCore::DOMEditor::patchDocument):
        (WebCore::DOMEditor::patchNode):
        (WebCore::DOMEditor::innerPatchChildren):
        (WebCore::DOMEditor::insertBefore):
        * inspector/DOMEditor.h:
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::setOuterHTML):

2012-01-16  Nikolas Zimmermann  <nzimmermann@rim.com>

        Large SVG text layout performance regression in r81168
        https://bugs.webkit.org/show_bug.cgi?id=65711

        Reviewed by Zoltan Herczeg.

        Change the way we store x/y/dx/dy/rotate values for a <text> element and its ancestors.

        SVGTextLayoutAttributesBuilder used to hold a Vector<float> for x/y/dx/dy/rotate, each as big
        as the whole text subtree length. For each character, that has an absolute position, or rotation
        the value was stored in this list. For all other characters a special empty value marker was stored.

        This is highly inefficient, and is now replaced with a HashMap<unsigned, SVGCharacterData> where
        SVGCharacterData is a struct, holding float x/y/dx/dy/rotate. The code is now optimized for the
        common case, where only a few characters actually specify such values, eg:
        <text x="50" y="90">looooong text<tspan x="50" y="30">abc</tspan></text>.

        NOTE: There are still some inefficiencies in this patch (especially the copying of SVGTextLayoutAttributes).
        To keep the patch size smaller, I decided to fix this in another patch, and only fix the memory issue with this patch.

        This reduces the memory consumption from 35MB to 10MB on the attached testcase in bug 65711.

        Doesn't affect any test, yet. A follow-up commit will enable the usage of the simple code path, using WidthIterator,
        in SVGTextMetricsBuilder, which will result in several layout test changes, because of geometry changes.

        * rendering/svg/RenderSVGInlineText.cpp:
        (WebCore::RenderSVGInlineText::RenderSVGInlineText):
        (WebCore::RenderSVGInlineText::characterStartsNewTextChunk):
        * rendering/svg/RenderSVGInlineText.h:
        (WebCore::RenderSVGInlineText::layoutAttributes):
        * rendering/svg/RenderSVGText.cpp:
        (WebCore::RenderSVGText::layout):
        (WebCore::recursiveCollectLayoutAttributes):
        (WebCore::RenderSVGText::rebuildLayoutAttributes):
        * rendering/svg/RenderSVGText.h:
        * rendering/svg/SVGRootInlineBox.cpp:
        (WebCore::SVGRootInlineBox::computePerCharacterLayoutInformation):
        (WebCore::SVGRootInlineBox::layoutCharactersInTextBoxes):
        (WebCore::SVGRootInlineBox::closestLeafChildForPosition):
        (WebCore::swapItemsInLayoutAttributes):
        (WebCore::findFirstAndLastAttributesInVector):
        (WebCore::reverseInlineBoxRangeAndValueListsIfNeeded):
        * rendering/svg/SVGTextLayoutAttributes.cpp:
        (WebCore::SVGTextLayoutAttributes::clear):
        (WebCore::dumpSVGCharacterDataMapValue):
        (WebCore::SVGTextLayoutAttributes::dump):
        * rendering/svg/SVGTextLayoutAttributes.h:
        (WebCore::SVGTextLayoutAttributes::characterDataMap):
        * rendering/svg/SVGTextLayoutAttributesBuilder.cpp:
        (WebCore::SVGTextLayoutAttributesBuilder::SVGTextLayoutAttributesBuilder):
        (WebCore::SVGTextLayoutAttributesBuilder::buildLayoutAttributesForTextRenderer):
        (WebCore::SVGTextLayoutAttributesBuilder::buildLayoutAttributesForWholeTree):
        (WebCore::SVGTextLayoutAttributesBuilder::rebuildMetricsForTextRenderer):
        (WebCore::SVGTextLayoutAttributesBuilder::rebuildMetricsForWholeTree):
        (WebCore::SVGTextLayoutAttributesBuilder::buildLayoutAttributesIfNeeded):
        (WebCore::processRenderSVGInlineText):
        (WebCore::SVGTextLayoutAttributesBuilder::collectTextPositioningElements):
        (WebCore::SVGTextLayoutAttributesBuilder::buildLayoutAttributes):
        (WebCore::updateCharacterData):
        (WebCore::SVGTextLayoutAttributesBuilder::fillCharacterDataMap):
        * rendering/svg/SVGTextLayoutAttributesBuilder.h:
        (WebCore::SVGTextLayoutAttributesBuilder::clearTextPositioningElements):
        * rendering/svg/SVGTextLayoutEngine.cpp:
        (WebCore::SVGTextLayoutEngine::updateRelativePositionAdjustmentsIfNeeded):
        (WebCore::SVGTextLayoutEngine::currentLogicalCharacterAttributes):
        (WebCore::SVGTextLayoutEngine::layoutTextOnLineOrPath):
        * rendering/svg/SVGTextLayoutEngine.h:
        (WebCore::SVGTextLayoutEngine::layoutAttributes):
        * rendering/svg/SVGTextMetricsBuilder.cpp:
        (WebCore::SVGTextMetricsBuilder::advance):
        (WebCore::SVGTextMetricsBuilder::advanceComplexText):
        (WebCore::SVGTextMetricsBuilder::measureTextRenderer):
        * rendering/svg/SVGTextQuery.cpp:
        (WebCore::SVGTextQuery::modifyStartEndPositionsRespectingLigatures):

2012-01-15  Andreas Kling  <awesomekling@apple.com>

        CSSCanvasValue can't be renamed, enforce this at compile-time.
        <http://webkit.org/b/76352>

        Reviewed by Antti Koivisto.

        Have the CSSCanvasValue constructor take the name as an argument instead of
        having a setName() that's only called from one place in CSSParser.

        * css/CSSCanvasValue.h:
        (WebCore::CSSCanvasValue::create):
        (WebCore::CSSCanvasValue::CSSCanvasValue):
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseCanvas):

2012-01-16  Andreas Kling  <awesomekling@apple.com>

        CSSStyleSelector: Dodge parser when creating default LTR/RTL declarations.
        <http://webkit.org/b/76374>

        Reviewed by Antti Koivisto.

        Pass CSSValueLtr/CSSValueRtl directly to setProperty() instead of parsing "ltr"/"rtl".

        * css/CSSStyleSelector.cpp:
        (WebCore::leftToRightDeclaration):
        (WebCore::rightToLeftDeclaration):

2012-01-16  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix make distcheck.

        * GNUmakefile.list.am: Add missing files.

2012-01-16  Roland Steiner  <rolandsteiner@chromium.org>

        CSSStyleSelector constructor and appendAuthorStylesheets() contain duplicated code
        https://bugs.webkit.org/show_bug.cgi?id=76043

        Re-use appendAuthorStylesheets() from within CSSStyleSelector constructor.

        Reviewed by Antti Koivisto.

        No new tests. (refactoring)

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::CSSStyleSelector):
        * css/StyleSheetList.h:
        (WebCore::StyleSheetList::vector):

2012-01-16  Shinya Kawanaka  <shinyak@google.com>

        [crash] Renderer crashes when spell checking a disabled input field.
        https://bugs.webkit.org/show_bug.cgi?id=75941

        Reviewed by Hajime Morita.

        We confirm the selection is editable before replacing text.

        Tests: ManualTests/editing-disabled-node-replace-crash.html

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

2012-01-16  Pablo Flouret  <pablof@motorola.com>

        Fix compilation errors on build-webkit --debug --no-svg --no-svg-fonts --no-svg-dom-objc-bindings on mac.
        https://bugs.webkit.org/show_bug.cgi?id=75865

        Reviewed by Hajime Morita.

        * WebCore.exp.in:
        * css/CSSStyleApplyProperty.cpp:
        (WebCore::ApplyPropertyDisplay::isValidDisplayValue):
        * loader/cache/CachedImage.cpp:
        (WebCore::CachedImage::setContainerSizeForRenderer):
        (WebCore::CachedImage::imageSizeForRenderer):
        * platform/graphics/FontFastPath.cpp:
        (WebCore::Font::drawGlyphBuffer):
        * rendering/FilterEffectRenderer.cpp:
        * svg/SVGElementInstance.idl:

2012-01-16  Pablo Flouret  <pablof@motorola.com>

        Compilation error on build-webkit --debug --no-request-animation-frame on mac.
        https://bugs.webkit.org/show_bug.cgi?id=75875

        Reviewed by Hajime Morita.

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

2012-01-16  Csaba Osztrogonác  <ossy@webkit.org>

        Web Inspector: Fix GoToLineDialog and extract common dialog functionality.
        https://bugs.webkit.org/show_bug.cgi?id=69341

        Unreviewed trivial buildfix/typo fix after r105043.

        * inspector/front-end/WebKit.qrc:

2011-10-11  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Fix GoToLineDialog and extract common dialog functionality.
        https://bugs.webkit.org/show_bug.cgi?id=69341

        Fixed dialog: in old implementation dialog never hides if you press mouse button
        on Go button and release it somewhere else.
        Dialog functionality extracted to be used for search dialog.

        Reviewed by Pavel Feldman.

        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * inspector/compile-front-end.sh:
        * inspector/front-end/Dialog.js: Added.
        (WebInspector.Dialog):
        (WebInspector.Dialog.show):
        (WebInspector.Dialog.prototype._hide):
        (WebInspector.Dialog.prototype._onFocus):
        (WebInspector.Dialog.prototype._doFocus):
        (WebInspector.Dialog.prototype._position):
        (WebInspector.Dialog.prototype._onKeyDown):
        (WebInspector.Dialog.prototype._onClick):
        (WebInspector.DialogDelegate):
        (WebInspector.DialogDelegate.prototype.get defaultFocusedElement):
        (WebInspector.DialogDelegate.prototype.get okButton):
        (WebInspector.DialogDelegate.prototype.onAction):
        * inspector/front-end/GoToLineDialog.js:
        (WebInspector.GoToLineDialog):
        (WebInspector.GoToLineDialog._show):
        (WebInspector.GoToLineDialog.prototype.get defaultFocusedElement):
        (WebInspector.GoToLineDialog.prototype.get okButton):
        (WebInspector.GoToLineDialog.prototype.onAction):
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/dialog.css: Renamed from Source/WebCore/inspector/front-end/goToLineDialog.css.
        (.dialog-glass-pane):
        (.dialog):
        (.dialog-contents):
        (.go-to-line-dialog input):
        (.go-to-line-dialog button):
        (.go-to-line-dialog button:active):
        * inspector/front-end/inspector.html:

2012-01-16  Jochen Eisinger  <jochen@chromium.org>

        ScriptRunner should also keep references to pending async scripts
        https://bugs.webkit.org/show_bug.cgi?id=76350

        Reviewed by Adam Barth.

        The CachedResourceLoader only keeps a raw pointer to a ScriptElement.
        If an async ScriptElement is removed from the document before it is
        executed, it might be garbage collected before the script is loaded, so
        it's never run.

        By making the ScriptRunner keep an explicit reference to the
        ScriptElement while it's loading (as is done for sync ScriptElements),
        we can guarantee that the ScriptElement lives until it is executed.

        No more flaky timeouts: http/tests/misc/async-script.html:

        * dom/ScriptElement.cpp:
        (WebCore::ScriptElement::prepareScript):
        (WebCore::ScriptElement::notifyFinished):
        * dom/ScriptRunner.cpp:
        (WebCore::ScriptRunner::~ScriptRunner):
        (WebCore::ScriptRunner::queueScriptForExecution):
        (WebCore::ScriptRunner::notifyScriptReady):
        * dom/ScriptRunner.h:
        (WebCore::ScriptRunner::hasPendingScripts):

2012-01-16  Renata Hodovan  <reni@webkit.org>

        Unreviewed build fix; added WebCore.exp.in changes lost in r105036.

        * WebCore.exp.in:

2012-01-15  Xinchao He  <xinchao.he@intel.com>

        Add DeviceOrientationEvent.absolute
        https://bugs.webkit.org/show_bug.cgi?id=51742

        Reviewed by Darin Fisher.

        This patch add the DeviceOrientationEvent.absolute to follow the
        latest w3c device orientation event spec.
        http://www.w3.org/TR/orientation-event/


        * bindings/js/JSDeviceOrientationEventCustom.cpp:
        (WebCore::JSDeviceOrientationEvent::absolute):
        (WebCore::JSDeviceOrientationEvent::initDeviceOrientationEvent):
        * bindings/v8/custom/V8DeviceOrientationEventCustom.cpp:
        (WebCore::V8DeviceOrientationEvent::absoluteAccessorGetter):
        (WebCore::V8DeviceOrientationEvent::initDeviceOrientationEventCallback):
        * dom/DeviceOrientation.cpp:
        (WebCore::DeviceOrientation::create):
        (WebCore::DeviceOrientation::DeviceOrientation):
        (WebCore::DeviceOrientation::absolute):
        (WebCore::DeviceOrientation::canProvideAbsolute):
        * dom/DeviceOrientation.h:
        * dom/DeviceOrientationEvent.idl:

2012-01-15  Luke Macpherson   <macpherson@chromium.org>

        Remove external references to CSSPrimitiveValue::UnitTypes enum.
        https://bugs.webkit.org/show_bug.cgi?id=76229

        Reviewed by Darin Adler.

        No new tests / refactoring only.

        * css/CSSFontSelector.cpp:
        (WebCore::CSSFontSelector::addFontFaceRule):
        * css/CSSGradientValue.cpp:
        (WebCore::CSSGradientValue::addStops):
        (WebCore::positionFromValue):
        (WebCore::CSSGradientValue::isCacheable):
        (WebCore::CSSRadialGradientValue::resolveRadius):
        (WebCore::CSSRadialGradientValue::createGradient):
        * css/CSSPrimitiveValue.h:
        (WebCore::CSSPrimitiveValue::isUnitTypeLength):
        (WebCore::CSSPrimitiveValue::isFontRelativeLength):
        (WebCore::CSSPrimitiveValue::isIdent):
        (WebCore::CSSPrimitiveValue::isNumber):
        (WebCore::CSSPrimitiveValue::isPercentage):
        (WebCore::CSSPrimitiveValue::isString):
        (WebCore::CSSPrimitiveValue::isURI):
        * css/CSSStyleApplyProperty.cpp:
        (WebCore::ApplyPropertyLength::applyValue):
        (WebCore::ApplyPropertyBorderRadius::applyValue):
        (WebCore::ApplyPropertyFontSize::applyValue):
        (WebCore::ApplyPropertyCursor::applyValue):
        (WebCore::ApplyPropertyPageSize::applyValue):
        (WebCore::ApplyPropertyTextEmphasisStyle::applyValue):
        (WebCore::ApplyPropertyZoom::applyValue):

2012-01-15  Pablo Flouret  <pablof@motorola.com>

        Fix compilation errors on build-webkit --debug --no-video on mac.
        https://bugs.webkit.org/show_bug.cgi?id=75867

        Reviewed by Philippe Normand.

        - Some exported HTMLMediaElement symbols were guarded by FULLSCREEN_API
          feature instead of VIDEO.
        - Unused parameter warning in CanvasRenderingContext::wouldTaintOrigin().
        - RenderThemeMac::shouldShowPlaceholderWhenFocused() implementation
          wrongly guarded by VIDEO feature.

        * WebCore.exp.in:
        * html/canvas/CanvasRenderingContext.cpp:
        (WebCore::CanvasRenderingContext::wouldTaintOrigin):
        * rendering/RenderThemeMac.mm:

2012-01-15  Andreas Kling  <awesomekling@apple.com>

        CSSParser: Fix failing assertion below BorderImageQuadParseContext.
        <http://webkit.org/b/76346> and <rdar://problem/10584969>

        Reviewed by Antti Koivisto.

        No longer asserts: fast/borders/inline-mask-overlay-image-outset-vertical-rl.html

        * css/CSSParser.cpp:
        (WebCore::BorderImageSliceParseContext::commitBorderImageSlice):
        (WebCore::BorderImageQuadParseContext::commitBorderImageQuad):

            Clone CSSValues by copying the RefPtrs instead of going through
            the CSSValuePool's create-from-double factory. This prevents an
            assertion when the incoming value is CSSValueAuto.

2011-08-30  Robert Hogan  <robert@webkit.org>

        <embed> width and height properties propagate to parent object node
        https://bugs.webkit.org/show_bug.cgi?id=17688

        Reviewed by Eric Seidel.

        Test: fast/images/embed-does-not-propagate-dimensions-to-object-ancestor.html

        WebKit seems to have inherited this behaviour from KHTML. When the width/height
        of an <embed> element is set, it propagates the values up to any parent <object>
        element. There doesn't seem to be any good reason for this and it is not consistent
        with the behaviour of Firefox and Opera.

        * html/HTMLEmbedElement.cpp:
        (WebCore::HTMLEmbedElement::insertedIntoDocument):
        (WebCore::HTMLEmbedElement::attributeChanged): Removed
        * html/HTMLEmbedElement.h:
        (WebCore::HTMLEmbedElement::attributeChanged): Removed

2011-12-30  Robert Hogan  <robert@webkit.org>

        compareBorders() is called too often during painting
        https://bugs.webkit.org/show_bug.cgi?id=73349

        Reviewed by Julien Chaffraix.

        Collapsed borders are re-calculated every time they are painted.
        This is unnecessary, they only change with the layout or style so calculate and
        cache them whenever the layout or style changes and use the cached values when
        painting. The cache is stored in the table section so that the memory footprint
        of a table is only increased when it has collapsing borders.

        The gain in performance here consists of skipping collapsed border computation
        during painting. The only path that incurs a small performance penalty is the 
        additional get/set on the cache when a collapsed border is computed. This penalty only applies
        during style change, layout, or when the width of the table is calculated. The computed
        border value is not stored in the cache when it has been calculated without its color
        for borderHalfStart and co., so that code path is unaffected by this change.

        No new tests, covered by existing collapsed border tests.

        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::willBeDestroyed): remove entries from collapsed border cache
        (WebCore::RenderTableCell::collapsedStartBorder):
         Compute, and also cache if the full border including color was computed. 
        (WebCore::RenderTableCell::computeCollapsedStartBorder):
        (WebCore::RenderTableCell::collapsedEndBorder): ditto
        (WebCore::RenderTableCell::computeCollapsedEndBorder):
        (WebCore::RenderTableCell::collapsedBeforeBorder): ditto
        (WebCore::RenderTableCell::computeCollapsedBeforeBorder):
        (WebCore::RenderTableCell::collapsedAfterBorder): ditto
        (WebCore::RenderTableCell::computeCollapsedAfterBorder):
        (WebCore::RenderTableCell::cachedCollapsedLeftBorder):
         Inline the function since it is only called in paintCollapsedBorders and remove
         includeColor as a parameter. Move the call to the table's style to the caller rather
         than call it 4 times in a row. Use the cached border values directly.
        (WebCore::RenderTableCell::cachedCollapsedRightBorder): ditto
        (WebCore::RenderTableCell::cachedCollapsedTopBorder): ditto
        (WebCore::RenderTableCell::cachedCollapsedBottomBorder): ditto
        (WebCore::RenderTableCell::paintCollapsedBorders):
         This function always uses the collapsed border cache now.
        * rendering/RenderTableCell.h:
         Make the collapsed border functions private.
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::removeCachedCollapsedBorders): The cache is deleted by the HashMap
         since it is the only owner of the cached item.
        (WebCore::RenderTableSection::setCachedCollapsedBorder):
        (WebCore::RenderTableSection::cachedCollapsedBorder):
         This will assert if there is no cached collapsed border for the side of the 
         cell requested by the caller.
        * rendering/RenderTableSection.h:
         HashMap wouldn't let me use CollapsedBorderSide in the key value for the cache
         so use int instead.

2012-01-14  David Levin  <levin@chromium.org>

        HWndDC should be in platform/win instead of wtf.
        https://bugs.webkit.org/show_bug.cgi?id=76314

        Reviewed by Sam Weinig.

        No new functionality, so no new tests.

        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * platform/win/HWndDC.h: Renamed from Source/JavaScriptCore/wtf/win/HWndDCWin.h.
        I also made the class non-copyable.
        (WebCore::HWndDC::HWndDC):
        (WebCore::HWndDC::~HWndDC):
        (WebCore::HWndDC::operator HDC):

2012-01-14  Adam Treat  <atreat@rim.com>

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

        Take a page from the Gtk and Qt ports and quiet these logs unless they
        are explicitly enabled via environment variable.

        Reviewed by George Staikos.

        * platform/blackberry/LoggingBlackBerry.cpp:
        (WebCore::initializeLoggingChannelsIfNecessary):

2011-11-09  Robert Hogan  <robert@webkit.org>

        CSS 2.1 failure: outline-color-applies-to* tests fail
        https://bugs.webkit.org/show_bug.cgi?id=71944

        Reviewed by Julien Chaffraix.

        Paint the outline color for row, row-group, header-group and footer-group
        elements.

        Tests: css2.1/20110323/outline-color-applies-to-001.htm
               css2.1/20110323/outline-color-applies-to-002.htm
               css2.1/20110323/outline-color-applies-to-003.htm
               css2.1/20110323/outline-color-applies-to-004.htm
               css2.1/20110323/outline-color-applies-to-005.htm
               css2.1/20110323/outline-color-applies-to-006.htm
               css2.1/20110323/outline-color-applies-to-007.htm
               css2.1/20110323/outline-color-applies-to-008.htm
               css2.1/20110323/outline-color-applies-to-009.htm
               css2.1/20110323/outline-color-applies-to-010.htm
               (There is no outline-color-applies-to-011.htm in the test suite.)
               css2.1/20110323/outline-color-applies-to-012.htm
               css2.1/20110323/outline-color-applies-to-013.htm
               css2.1/20110323/outline-color-applies-to-014.htm
               css2.1/20110323/outline-color-applies-to-015.htm
               fast/css/outline-color-self-painting-row.htm

        * rendering/RenderTableRow.cpp:
        (WebCore::RenderTableRow::paintOutlineForRowIfNeeded): Wrapper function for painting the outline for the row.
         This is used by RenderTableSection::paintObject and RenderTableRow::paint
        (WebCore::RenderTableRow::paint): For rows with a self-painting layer, paint the outline. Tested by
         fast/css/outline-color-self-painting-row.htm.
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::paint): Paint the outline for header-group, row-group and footer-groups.
        (WebCore::RenderTableSection::paintObject): When iterating through the cells paint the outline of rows as required.
        Doing it here avoids the need to walk the RenderTableSection's tree separately elsewhere.

2012-01-14  Simon Fraser  <simon.fraser@apple.com>

        Unmatched transparency layer begin/end on a filtered element with an opacity ancestor
        https://bugs.webkit.org/show_bug.cgi?id=76329

        Reviewed by Dan Bernstein.

        When doing a paint with painting disabled on the GraphicsContext, as we do
        for updating control tints, or computing text rectangles on Find, do not
        apply filter effects. This is both a performance gain, and fixes an issue
        with mismatched begin/end transparency layers.
        
        Manual test:
            ManualTests/filters/opacity-above-filter.html

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::paintLayerContents):

2012-01-13  Ojan Vafai  <ojan@chromium.org>

        Implement flex-align
        https://bugs.webkit.org/show_bug.cgi?id=75782

        Reviewed by Tony Chang.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        Intentially gets computed style for flex-item-align:auto wrong.
        Will fix this in a followup patch.
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):
        * css/CSSProperty.cpp:
        (WebCore::CSSProperty::isInheritedProperty):
        * css/CSSPropertyNames.in:
        * css/CSSStyleApplyProperty.cpp:
        (WebCore::CSSStyleApplyProperty::CSSStyleApplyProperty):
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::sizesToIntrinsicLogicalWidth):
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::flexAlignForChild):
        (WebCore::RenderFlexibleBox::layoutAndPlaceChildren):
        (WebCore::RenderFlexibleBox::alignChildren):
        * rendering/style/RenderStyle.h:
        (WebCore::RenderStyleBitfields::flexAlign):
        (WebCore::RenderStyleBitfields::setFlexAlign):
        (WebCore::RenderStyleBitfields::initialFlexAlign):
        (WebCore::RenderStyleBitfields::initialFlexItemAlign):
        * rendering/style/StyleFlexibleBoxData.cpp:
        (WebCore::StyleFlexibleBoxData::StyleFlexibleBoxData):
        (WebCore::StyleFlexibleBoxData::operator==):
        * rendering/style/StyleFlexibleBoxData.h:

2012-01-13  Brent Fulgham  <bfulgham@webkit.org>

        [Windows, WinCairo] Build correction after r104919.

        * WebCore.vcproj/WebCore.vcproj: Exclude ShadowContentSelectorQuery.cpp
          from the build, since it is built as part of DOMAllInOne.cpp.

2012-01-13  Vincent Scheib  <scheib@chromium.org>

        Pointer Lock: Change isLocked() from operator to attribute isLocked
        https://bugs.webkit.org/show_bug.cgi?id=76311

        Reviewed by Adam Barth.

        This patch implements the recent Mouse Lock Specification update
        changing navigator.pointer.isLocked() to .isLocked.

        Test pointer-lock/pointer-lock-api.html updated to new spec.

        * page/PointerLock.idl:

2012-01-13  Raymond Toy  <rtoy@google.com>

        noteOn, noteGrainOn and noteOff idl should take doubles
        https://bugs.webkit.org/show_bug.cgi?id=76073

        Reviewed by Adam Barth.

        Existing audiobuffersource-playbackrate and gain tests cover the
        noteOn and noteOff changes.

        * webaudio/AudioBufferSourceNode.idl: noteOn, noteGrainOn, and
        noteOff take doubles.

2012-01-13  Beth Dakin  <bdakin@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=71230
        Clicking where the overlay scroll track would be should not scroll the page
        -and corresponding-
        <rdar://problem/9585424>

        Reviewed by Alexey Proskuryakov.

        These new functions indicate whether the scrollbar should participate in hit 
        testing. Non-overlay scrollbars always should, so they return true. Overlay 
        scrollbars consult the animator, which checks the current alpha. 
        * platform/ScrollAnimator.h:
        (WebCore::ScrollAnimator::shouldScrollbarParticipateInHitTesting):
        * platform/Scrollbar.cpp:
        (WebCore::Scrollbar:: shouldParticipateInHitTesting):
        * platform/Scrollbar.h:
        * platform/mac/ScrollAnimatorMac.h:
        * platform/mac/ScrollAnimatorMac.mm:
        (WebCore::ScrollAnimatorMac:: shouldScrollbarParticipateInHitTesting):

        In these hit-testing functions, only hit-test when the scrollbar should 
        participate.
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::scrollbarAtPoint):
        * rendering/RenderEmbeddedObject.cpp:
        (WebCore::RenderEmbeddedObject::nodeAtPoint):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::hitTestOverflowControls):
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::isPointInOverflowControl):

2012-01-13  Dan Bernstein  <mitz@apple.com>

        REGRESSION: svg/custom/use-instanceRoot-event-listeners.xhtml & svg/custom/pointer-events-invalid-fill.svg broken on the Bots
        https://bugs.webkit.org/show_bug.cgi?id=76254

        Reviewed by Anders Carlsson.

        * css/CSSFontSelector.cpp:
        (WebCore::CSSFontSelector::beginLoadTimerFired): Added a call to
        CachedResourceLoader::loadDone() after decrementing the request count. This allows the
        frame loader to see that the request count is zero and dispatch didFinishLoad. 

2012-01-13  Jer Noble  <jer.noble@apple.com>

        WebAudio: Optimize calculateNormalizationScale().
        https://bugs.webkit.org/show_bug.cgi?id=74372

        Reviewed by Eric Carlson.

        No new tests; optimization of existing code, so covered by existing test cases.

        * platform/audio/Reverb.cpp:
        (WebCore::calculateNormalizationScale): Replace implementation with optimized vector
            math operation.
        (WebCore::Reverb::Reverb):
        * platform/audio/VectorMath.cpp:
        (WebCore::VectorMath::vsvesq): Vector math operation for squared sum of elements.
        * platform/audio/VectorMath.h:

2012-01-13  Nico Weber  <thakis@chromium.org>

        Remove a unused variable.
        https://bugs.webkit.org/show_bug.cgi?id=76307

        Reviewed by James Robinson.

        * platform/mac/ScrollElasticityController.mm:
        (WebCore::ScrollElasticityController::snapRubberBandTimerFired):

2012-01-13  Nate Chapin  <japhet@chromium.org>

        Revert most of the multipart changes in
        http://trac.webkit.org/changeset/104756.
        https://bugs.webkit.org/show_bug.cgi?id=76297

        Reviewed by Alexey Proskuryakov.

        http/tests/multipart/invalid-image-data.html
        should stop asserting on chromium win dbg.

        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::didReceiveResponse):
        (WebCore::SubresourceLoader::didReceiveData):
        (WebCore::SubresourceLoader::sendDataToResource):

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

        WebAudio: Use float instead of double values for gain operations.
        https://bugs.webkit.org/show_bug.cgi?id=74345

        Reviewed by Sam Weinig.

        No new tests; optimization of existing code, so covered by existing test cases.

        The following functions now take or operate on floats instead of doubles:
        (WebCore::AudioBus::scale):
        (WebCore::AudioBus::processWithGainFrom):
        (WebCore::AudioBus::copyWithGainFrom):
        (WebCore::AudioBus::sumWithGainFrom):
        * platform/audio/AudioBus.h:
        (WebCore::AudioBus::setGain):
        (WebCore::AudioBus::gain):
        * platform/audio/AudioChannel.cpp:
        (WebCore::AudioChannel::scale):
        * platform/audio/AudioChannel.h:
        * webaudio/AudioBufferSourceNode.cpp:
        (WebCore::AudioBufferSourceNode::process):
        * webaudio/AudioBufferSourceNode.h:
        * webaudio/AudioGainNode.h:
        * webaudio/AudioPannerNode.h:

2012-01-13  Greg Billock  <gbillock@google.com>

        Don't use pending activity notification in IntentRequest
        https://bugs.webkit.org/show_bug.cgi?id=76302

        Reviewed by Adam Barth.

        * Modules/intents/IntentRequest.cpp:
        (WebCore::IntentRequest::IntentRequest):
        (WebCore::IntentRequest::postResult):
        (WebCore::IntentRequest::postFailure):

2012-01-13  Raymond Toy  <rtoy@google.com>

        EQUALPOWER panner incorrectly computes gain
        https://bugs.webkit.org/show_bug.cgi?id=75767

        Reviewed by Kenneth Russell.

        Layout test added.

        * platform/audio/EqualPowerPanner.cpp:
        (WebCore::EqualPowerPanner::pan):  Correct the formula.

2012-01-13  Ojan Vafai  <ojan@chromium.org>

        Unreviewed, rolling out r104972.
        http://trac.webkit.org/changeset/104972
        https://bugs.webkit.org/show_bug.cgi?id=75782

        Broke some tests

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):
        * css/CSSProperty.cpp:
        (WebCore::CSSProperty::isInheritedProperty):
        * css/CSSPropertyNames.in:
        * css/CSSStyleApplyProperty.cpp:
        (WebCore::CSSStyleApplyProperty::CSSStyleApplyProperty):
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::sizesToIntrinsicLogicalWidth):
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::layoutAndPlaceChildren):
        (WebCore::RenderFlexibleBox::alignChildren):
        * rendering/style/RenderStyle.h:
        (WebCore::RenderStyleBitfields::initialFlexItemAlign):
        * rendering/style/StyleFlexibleBoxData.cpp:
        (WebCore::StyleFlexibleBoxData::StyleFlexibleBoxData):
        (WebCore::StyleFlexibleBoxData::operator==):
        * rendering/style/StyleFlexibleBoxData.h:

2012-01-13  Anders Carlsson  <andersca@apple.com>

        -[WebTileCacheLayer setNeedsDisplay] doesn't trigger invalidation
        https://bugs.webkit.org/show_bug.cgi?id=76299

        Reviewed by Simon Fraser.

        Override -[WebTileCacheLayer setNeedsDisplay] and call TileCache::setNeedsDisplay from there,
        instead of ending up with a huge rectangle in TileCache::setNeedsDisplayInRect which causes our
        tile computation logic to fail due to integer overflow when converting from CGFloats to ints.

        * platform/graphics/ca/mac/TileCache.h:
        * platform/graphics/ca/mac/TileCache.mm:
        (WebCore::TileCache::setNeedsDisplay):
        * platform/graphics/ca/mac/WebTileCacheLayer.mm:
        (-[WebTileCacheLayer setNeedsDisplay]):

2012-01-12  Ojan Vafai  <ojan@chromium.org>

        Implement flex-align
        https://bugs.webkit.org/show_bug.cgi?id=75782

        Reviewed by Tony Chang.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        Not 100% sure about this, but I think the computed value of
        flex-item-align needs to take the parent's flex-align into
        account for computed auto values.
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):
        * css/CSSProperty.cpp:
        (WebCore::CSSProperty::isInheritedProperty):
        * css/CSSPropertyNames.in:
        * css/CSSStyleApplyProperty.cpp:
        (WebCore::CSSStyleApplyProperty::CSSStyleApplyProperty):
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::sizesToIntrinsicLogicalWidth):
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::flexAlign):
        (WebCore::RenderFlexibleBox::layoutAndPlaceChildren):
        (WebCore::RenderFlexibleBox::alignChildren):
        * rendering/style/RenderStyle.h:
        (WebCore::RenderStyleBitfields::flexAlign):
        (WebCore::RenderStyleBitfields::setFlexAlign):
        (WebCore::RenderStyleBitfields::initialFlexAlign):
        (WebCore::RenderStyleBitfields::initialFlexItemAlign):
        * rendering/style/StyleFlexibleBoxData.cpp:
        (WebCore::StyleFlexibleBoxData::StyleFlexibleBoxData):
        (WebCore::StyleFlexibleBoxData::operator==):
        * rendering/style/StyleFlexibleBoxData.h:

2012-01-13  Simon Fraser  <simon.fraser@apple.com>

        Rename GraphicsContext* argument in various RenderLayer methods
        https://bugs.webkit.org/show_bug.cgi?id=76283

        Reviewed by James Robinson/Anders Carlsson.

        Rename the GraphicsContext* parameter "p" in various RenderLayer
        methods to "context". "p" was a historical name from when it was
        called Painter.

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::beginTransparencyLayers):
        (WebCore::RenderLayer::paint):
        (WebCore::RenderLayer::paintOverlayScrollbars):
        (WebCore::RenderLayer::restoreClip):
        (WebCore::RenderLayer::paintLayer):
        (WebCore::RenderLayer::paintLayerContentsAndReflection):
        (WebCore::RenderLayer::paintLayerContents):
        (WebCore::RenderLayer::paintList):

2012-01-13  Mihnea Ovidenie  <mihnea@adobe.com>

        [CSSRegions]Add back region style code removed in r104036
        https://bugs.webkit.org/show_bug.cgi?id=76064

        Reviewed by David Hyatt.

        No new tests. The region style tests are still skipped. A follow up patch will enable
        both region style for background-color and region style tests.

        * WebCore.exp.in:
        * css/CSSStyleSelector.cpp:
        (WebCore::RuleData::useInRegionStyle):
        (WebCore::CSSStyleSelector::CSSStyleSelector):
        (WebCore::CSSStyleSelector::addMatchedDeclaration):
        (WebCore::CSSStyleSelector::matchRules):
        (WebCore::CSSStyleSelector::matchAllRules):
        (WebCore::CSSStyleSelector::initForRegionStyling):
        (WebCore::CSSStyleSelector::initRegionRules):
        (WebCore::CSSStyleSelector::styleForElement):
        (WebCore::CSSStyleSelector::pseudoStyleForElement):
        (WebCore::RuleData::RuleData):
        (WebCore::RuleSet::RuleSet):
        (WebCore::RuleSet::addToRuleSet):
        (WebCore::CSSStyleSelector::applyDeclarations):
        (WebCore::isValidRegionStyleProperty):
        (WebCore::CSSStyleSelector::applyProperty):
        * css/CSSStyleSelector.h:
        (WebCore::CSSStyleSelector::setRegionForStyling):
        (WebCore::CSSStyleSelector::regionForStyling):
        (WebCore::CSSStyleSelector::applyPropertyToRegionStyle):
        * rendering/RenderFlowThread.cpp:
        (WebCore::RenderFlowThread::clearRenderObjectCustomStyle):
        (WebCore::RenderFlowThread::setRegionRangeForBox):
        * rendering/RenderFlowThread.h:
        * rendering/RenderLayer.cpp:
        (WebCore::CurrentRenderRegionMaintainer::CurrentRenderRegionMaintainer):
        (WebCore::CurrentRenderRegionMaintainer::~CurrentRenderRegionMaintainer):
        (WebCore::RenderLayer::paint):
        (WebCore::RenderLayer::hitTest):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::styleInRegion):
        * rendering/RenderObject.h:
        (WebCore::RenderObject::canHaveRegionStyle):
        * rendering/RenderObjectChildList.cpp:
        (WebCore::RenderObjectChildList::removeChildNode):
        * rendering/RenderRegion.cpp:
        (WebCore::RenderRegion::renderObjectRegionStyle):
        (WebCore::RenderRegion::computeStyleInRegion):
        (WebCore::RenderRegion::clearObjectStyleInRegion):
        * rendering/RenderRegion.h:
        * rendering/RenderView.cpp:
        (WebCore::RenderView::RenderView):
        * rendering/RenderView.h:
        (WebCore::RenderView::currentRenderRegion):
        (WebCore::RenderView::setCurrentRenderRegion):

2012-01-13  Kenneth Russell  <kbr@google.com>

        Unreviewed build fix; added project.pbxproj changes lost in r104954.
        https://bugs.webkit.org/show_bug.cgi?id=75906

        * WebCore.xcodeproj/project.pbxproj:

2012-01-13  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        TextureMapper: Extract layer transform logic to a LayerTransform class.
        https://bugs.webkit.org/show_bug.cgi?id=76291

        Reviewed by Noam Rosenthal.

        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * platform/graphics/texmap/LayerTransform.cpp: Added.
        (WebCore::LayerTransform::LayerTransform):
        (WebCore::LayerTransform::setPosition):
        (WebCore::LayerTransform::setSize):
        (WebCore::LayerTransform::setAnchorPoint):
        (WebCore::LayerTransform::setFlattening):
        (WebCore::LayerTransform::setLocalTransform):
        (WebCore::LayerTransform::setChildrenTransform):
        (WebCore::LayerTransform::combined):
        (WebCore::LayerTransform::combinedForChildren):
        (WebCore::LayerTransform::combineTransforms):
        (WebCore::LayerTransform::combineTransformsForChildren):
        * platform/graphics/texmap/LayerTransform.h: Added.
        * platform/graphics/texmap/TextureMapperNode.cpp:
        (WebCore::TextureMapperNode::setTransform):
        (WebCore::TextureMapperNode::computeTransformsRecursive):
        (WebCore::TextureMapperNode::collectVisibleContentsRects):
        (WebCore::TextureMapperNode::paintSelf):
        (WebCore::TextureMapperNode::compareGraphicsLayersZValue):
        (WebCore::TextureMapperNode::paintSelfAndChildren):
        (WebCore::TextureMapperNode::paintReflection):
        (WebCore::TextureMapperNode::syncCompositingStateSelf):
        * platform/graphics/texmap/TextureMapperNode.h:
        (WebCore::TextureMapperNode::TextureMapperNode):

2012-01-13  Kenneth Russell  <kbr@google.com>

        Unreviewed, build fix for unused argument warning after r104954.
        https://bugs.webkit.org/show_bug.cgi?id=75906

        Also fixed up somebody's bad merge in Source/WebCore/ChangeLog.

        * html/canvas/WebGLObject.cpp:
        (WebCore::WebGLObject::WebGLObject):

2012-01-13  Raphael Kubo da Costa  <kubo@profusion.mobi>

        [soup] Initialize m_soupFlags in all ResourceResponse constructors.

        Rubber-stamped by Gustavo Noronha Silva.

        m_soupFlags was being initialized in two of the three ResourceResponse
        constructors, causing some trouble in
        FrameLoaderClient::dispatchDidReceiveResponse (ports which use
        ResourceRequest::setSoupMessageFlags with the response's unitialized
        flags).

        * platform/network/soup/ResourceResponse.h:
        (WebCore::ResourceResponse::ResourceResponse):

2012-01-13  Alexey Proskuryakov  <ap@apple.com>

        CFURLRef to KURL conversion shouldn't turn raw paths into file URLs
        https://bugs.webkit.org/show_bug.cgi?id=76251

        Reviewed by Dan Bernstein.

        * platform/cf/KURLCFNet.cpp: (WebCore::KURL::KURL): Removed the offending code.

2012-01-13  Konrad Piascik  <kpiascik@rim.com>

        Web Inspector: Disconnecting the front-end does not disable profiling.
        https://bugs.webkit.org/show_bug.cgi?id=76213

        Reviewed by Pavel Feldman.

        Not testable.

        * inspector/InspectorProfilerAgent.cpp:
        (WebCore::InspectorProfilerAgent::clearFrontend):

2012-01-13  Andreas Kling  <awesomekling@apple.com>

        JSC/DOM bindings: Reduce HandleHeap churn in cacheWrapper().
        <http://webkit.org/b/76271>

        Reviewed by Darin Adler.

        Use JSC::Weak::swap() to move JSDOMWrappers into the DOMWrapperWorld's wrapper map.
        This avoids invoking the JSC::Weak copy constructor and associated HandleHeap churn.

        * bindings/js/JSDOMBinding.h:
        (WebCore::cacheWrapper):

2012-01-13  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: [InspectorIndexedDB] Add InspectorIndexedDBAgent and IndexedDBModel, pass database names to inspector.
        https://bugs.webkit.org/show_bug.cgi?id=76264

        Reviewed by Pavel Feldman.

        * CMakeLists.txt:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * inspector/CodeGeneratorInspector.py:
        * inspector/Inspector.json:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        * inspector/InspectorIndexedDBAgent.cpp: Added.
        (WebCore::InspectorIndexedDBAgent::FrontendProvider::create):
        (WebCore::InspectorIndexedDBAgent::FrontendProvider::~FrontendProvider):
        (WebCore::InspectorIndexedDBAgent::FrontendProvider::frontend):
        (WebCore::InspectorIndexedDBAgent::FrontendProvider::clearFrontend):
        (WebCore::InspectorIndexedDBAgent::FrontendProvider::FrontendProvider):
        (WebCore::InspectorIndexedDBAgent::InspectorIndexedDBAgent):
        (WebCore::InspectorIndexedDBAgent::~InspectorIndexedDBAgent):
        (WebCore::InspectorIndexedDBAgent::setFrontend):
        (WebCore::InspectorIndexedDBAgent::clearFrontend):
        (WebCore::InspectorIndexedDBAgent::restore):
        (WebCore::InspectorIndexedDBAgent::enable):
        (WebCore::InspectorIndexedDBAgent::disable):
        (WebCore::InspectorIndexedDBAgent::requestDatabaseNamesForFrame):
        * inspector/InspectorIndexedDBAgent.h: Added.
        (WebCore::InspectorIndexedDBAgent::create):
        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::buildObjectForFrame):
        * inspector/compile-front-end.sh:
        * inspector/front-end/IndexedDBModel.js: Added.
        * inspector/front-end/ResourceTreeModel.js:
        (WebInspector.ResourceTreeFrame):
        (WebInspector.ResourceTreeFrame.prototype.get securityOrigin):
        (WebInspector.ResourceTreeFrame.prototype._navigate):
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/inspector.html:

2012-01-13  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r104935.
        http://trac.webkit.org/changeset/104935
        https://bugs.webkit.org/show_bug.cgi?id=76277

        Breaks AppleWin compilation (Requested by vsevik on #webkit).

        * CMakeLists.txt:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * inspector/CodeGeneratorInspector.py:
        * inspector/Inspector.json:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        * inspector/InspectorIndexedDBAgent.cpp: Removed.
        * inspector/InspectorIndexedDBAgent.h: Removed.
        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::buildObjectForFrame):
        * inspector/compile-front-end.sh:
        * inspector/front-end/IndexedDBModel.js: Removed.
        * inspector/front-end/ResourceTreeModel.js:
        (WebInspector.ResourceTreeFrame):
        (WebInspector.ResourceTreeFrame.prototype._navigate):
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/inspector.html:

2012-01-13  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: [InspectorIndexedDB] Add InspectorIndexedDBAgent and IndexedDBModel, pass database names to inspector.
        https://bugs.webkit.org/show_bug.cgi?id=76264

        Reviewed by Pavel Feldman.

        * CMakeLists.txt:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * inspector/CodeGeneratorInspector.py:
        * inspector/Inspector.json:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        * inspector/InspectorIndexedDBAgent.cpp: Added.
        (WebCore::InspectorIndexedDBAgent::FrontendProvider::create):
        (WebCore::InspectorIndexedDBAgent::FrontendProvider::~FrontendProvider):
        (WebCore::InspectorIndexedDBAgent::FrontendProvider::frontend):
        (WebCore::InspectorIndexedDBAgent::FrontendProvider::clearFrontend):
        (WebCore::InspectorIndexedDBAgent::FrontendProvider::FrontendProvider):
        (WebCore::InspectorIndexedDBAgent::InspectorIndexedDBAgent):
        (WebCore::InspectorIndexedDBAgent::~InspectorIndexedDBAgent):
        (WebCore::InspectorIndexedDBAgent::setFrontend):
        (WebCore::InspectorIndexedDBAgent::clearFrontend):
        (WebCore::InspectorIndexedDBAgent::restore):
        (WebCore::InspectorIndexedDBAgent::enable):
        (WebCore::InspectorIndexedDBAgent::disable):
        (WebCore::InspectorIndexedDBAgent::requestDatabaseNamesForFrame):
        * inspector/InspectorIndexedDBAgent.h: Added.
        (WebCore::InspectorIndexedDBAgent::create):
        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::buildObjectForFrame):
        * inspector/compile-front-end.sh:
        * inspector/front-end/IndexedDBModel.js: Added.
        * inspector/front-end/ResourceTreeModel.js:
        (WebInspector.ResourceTreeFrame):
        (WebInspector.ResourceTreeFrame.prototype.get securityOrigin):
        (WebInspector.ResourceTreeFrame.prototype._navigate):
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/inspector.html:

2012-01-13  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] Fix build when using TextureMapper with OpenGL/ES
        https://bugs.webkit.org/show_bug.cgi?id=76268

        Reviewed by Tor Arne Vestbø.

        * WebCore.pri: When the texture mapper uses OpenGL/ES, then it also relies on the
        availability of libEGL by using eglGetCurrentContext(). In that case we need to link against
        libEGL.

2012-01-13  Jochen Eisinger  <jochen@chromium.org>

        Don't artifically keep IDBDatabase objects alive if there are no references to it.
        https://bugs.webkit.org/show_bug.cgi?id=75859

        Originally, this code was added to keep the IDBDatabase object alive
        even if no reference from JavaScript to the object existed, because
        running transactions could still send events for this database
        connection. Meanwhile, transactions are marked as active DOM objects
        during their lifetime, and they keep a RefPtr to the IDBDatabase
        object, so this hack is no longer required.

        Reviewed by Tony Gentilcore.

        Test: storage/indexeddb/delete-closed-database-object.html

        * storage/IDBDatabase.cpp:
        * storage/IDBDatabase.h:

2012-01-12  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        TextureMapper: Do the node transform computation when painting.
        https://bugs.webkit.org/show_bug.cgi?id=74721

        Reviewed by Noam Rosenthal.

        The transform of the node tree was built during the syncCompositingState
        step. This would cause an ASSERT with QWebView, trying to use a dirty transform
        state since the rootTextureMapperNode in QWebFramePrivate::renderCompositedLayers
        doesn't run the sync step after getting the world transform set.

        This moves the transform computation from the sync to the paint step to
        prevent making sure that the sync step has been run on all nodes before painting.

        * platform/graphics/texmap/TextureMapperNode.cpp:
        (WebCore::TextureMapperNode::computeTransformsRecursive):
        (WebCore::TextureMapperNode::computeTiles):
        Remove an unused variable.
        (WebCore::TextureMapperNode::paint):
        (WebCore::TextureMapperNode::syncAnimationsRecursively):
        (WebCore::TextureMapperNode::syncCompositingState):
        * platform/graphics/texmap/TextureMapperNode.h:

2012-01-12  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        TextureMapper: Simplify transform manipulations.
        https://bugs.webkit.org/show_bug.cgi?id=74719

        Reviewed by Noam Rosenthal.

        - Make sure that the replica node has a complete transform and
          use it directly instead of keeping a copy in the source.
        - Apply the origin and position translation only once, on the
          target and descendants transforms.
        - Use to2dTransform() on !preserves3D layers instead of doing
          the flattening manually.
        - Remove mentions of perspective as this is handled by WebCore
          through the children transform.
        - Apply the inverse target transform on the replica only where it
          is needed in paintReflection since it uses the full transform in paintSelf.
        - Merge the base and local transforms.

        * platform/graphics/texmap/TextureMapperNode.cpp:
        (WebCore::TextureMapperNode::setTransform):
        (WebCore::TextureMapperNode::computeTransformsSelf):
        (WebCore::TextureMapperNode::computeAllTransforms):
        (WebCore::TextureMapperNode::paintSelf):
        (WebCore::TextureMapperNode::paintReflection):
        * platform/graphics/texmap/TextureMapperNode.h:

2012-01-12  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        TextureMapper: Fix the fillsForward transform adjustment in syncAnimations.
        https://bugs.webkit.org/show_bug.cgi?id=76184

        Reviewed by Noam Rosenthal.

        Also make the intention clearer by using setTransform and setOpacity.

        * platform/graphics/texmap/TextureMapperNode.cpp:
        (WebCore::TextureMapperNode::syncAnimations):

2012-01-13  Vsevolod Vlasov  <vsevik@chromium.org>

        Unreviewed inspector scripts navigator style fixes.

        * inspector/front-end/scriptsPanel.css:
        (#scripts-editor-container-tabbed-pane .tabbed-pane-header-tab):

2012-01-13  Jochen Eisinger  <jochen@chromium.org>

        Once we prepared a script element for execution, execute it, even if the script element was meanwhile removed from the dom tree.
        https://bugs.webkit.org/show_bug.cgi?id=76083

        Reviewed by Adam Barth.

        This bug was caught by the following IE Test Center test:

        http://samples.msdn.microsoft.com/ietestcenter/HTML5/show_async_test.htm?11_RemovingAsyncScript

        Test: http/tests/misc/async-script-removed.html
              http/tests/misc/async-script.html

        * dom/ScriptElement.cpp:
        * dom/ScriptElement.h:
        * dom/ScriptRunner.cpp:
        (WebCore::ScriptRunner::queueScriptForExecution):
        * html/HTMLScriptElement.cpp:
        * html/HTMLScriptElement.h:
        * svg/SVGScriptElement.cpp:
        * svg/SVGScriptElement.h:

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

        Large SVG text layout performance regression in r81168
        https://bugs.webkit.org/show_bug.cgi?id=65711

        Reviewed by Antti Koivisto.

        Finish SVGTextMetricsBuilder introduction, tested in my local svg-text-performance branch.
        SVGTextMetricsBuilder has two public methods:
        a) SVGTextMetricsBuilder::measureTextRenderer(RenderSVGInlineText*)
           It will be used exclusively for non-initial, incremental layout changes. Once the inital
           text layout ran, any mutation of eg. a child text node of a <tspan>, will only trigger
           a rebuild of the layout attributes associated with the passed in renderer.

        b) SVGTextMetricsBuilder::buildMetricsAndLayoutAttributes(RenderSVGText*, RenderSVGInlineText* stopAtLeaf, SVGCharacterDataMap& allCharactersMap)
           stopAtLeaf=0:
           This carries out the initial layout phase. It measures all characters of the whole <text> subtree, and stores the SVGTextMetrics for each character
           in the SVGTextLayoutAttributes, stored in the RenderSVGInlineText object. It requires a SVGCharacterDataMap allCharactersMap as input argument,
           which contains a HashMap<unsigned, {float x, y, dx, dy, rotate}>, which maps each character position to a set of x/y/dx/dy/rotate values.
           The SVGCharacterDataMap living in SVGTextLayoutAttributes will be filled, from the global "allCharactersMap", so that each RenderSVGInlineText only
           stores the positioning information for its children, if any.

           Note: SVGTextMetricsBuilder is not yet deployed, so this talks about the design, once everything is landed.

           stopAtLeaf!=0:
           This is never used for the initial layout phase. If the initial layout is done, and eg. a <tspan> is added to the <text> subtree, we no longer
           need to rebuild the metrics map & layout attributes for the whole tree, but only for the desired <tspan>, and its previous/next sibling, if present
           (which may be affected by the inclusion of another node inbetween them).

        SVGTextMetricsBuilder is now finished, and will be used in the next patch chunk.
        Doesn't affect any tests yet.

        * rendering/svg/SVGTextLayoutAttributes.h:
        (WebCore::SVGTextLayoutAttributes::clear):
        (WebCore::SVGCharacterData::SVGCharacterData):
        * rendering/svg/SVGTextMetricsBuilder.cpp:
        (WebCore::SVGTextMetricsBuilder::SVGTextMetricsBuilder):
        (WebCore::SVGTextMetricsBuilder::currentCharacterStartsSurrogatePair):
        (WebCore::SVGTextMetricsBuilder::advance):
        (WebCore::SVGTextMetricsBuilder::advanceSimpleText):
        (WebCore::SVGTextMetricsBuilder::advanceComplexText):
        (WebCore::SVGTextMetricsBuilder::initializeMeasurementWithTextRenderer):
        (WebCore::MeasureTextData::MeasureTextData):
        (WebCore::SVGTextMetricsBuilder::measureTextRenderer):
        (WebCore::SVGTextMetricsBuilder::walkTree):
        (WebCore::SVGTextMetricsBuilder::measureTextRenderer):
        (WebCore::SVGTextMetricsBuilder::buildMetricsAndLayoutAttributes):
        * rendering/svg/SVGTextMetricsBuilder.h:

2012-01-13  Pavel Feldman  <pfeldman@google.com>

        Not reviewed: Fixing Win builders.

        * inspector/DOMEditor.cpp:
        (WebCore::DOMEditor::diff):

2012-01-13  Grzegorz Czajkowski  <g.czajkowski@samsung.com>

        [EFL] Add 'Copy Image Address' to context menu.
        https://bugs.webkit.org/show_bug.cgi?id=76153

        Reviewed by Andreas Kling.

        Enables 'Copy Image Address' option to context menu in WebKit-EFL as it is enabled in GTK and QT ports.

        * page/ContextMenuController.cpp:
        (WebCore::ContextMenuController::contextMenuItemSelected):
        (WebCore::ContextMenuController::populate):
        (WebCore::ContextMenuController::checkOrEnableIfNeeded):
        * platform/ContextMenuItem.h:
        * platform/LocalizationStrategy.h:
        * platform/LocalizedStrings.cpp:
        * platform/LocalizedStrings.h:
        * platform/efl/LocalizedStringsEfl.cpp:
        (WebCore::contextMenuItemTagCopyImageUrlToClipboard):

2012-01-13  Pavel Feldman  <pfeldman@google.com>

        Not reviewed: 32bit build fix.

        * inspector/DOMEditor.cpp:
        * inspector/DOMEditor.h:

2012-01-13  Mario Sanchez Prada  <msanchez@igalia.com>

        Unreviewed, rolling out r104905.
        http://trac.webkit.org/changeset/104905
        https://bugs.webkit.org/show_bug.cgi?id=76267

        This patch broke tests in the GTK 64bit Debug bot (Requested
        by msanchez on #webkit).

        * editing/gtk/FrameSelectionGtk.cpp:
        (WebCore::FrameSelection::notifyAccessibilityForSelectionChange):

2012-01-13  Pavel Feldman  <pfeldman@google.com>

        Web Inspector: make HTML editing preserve node identity when node nesting level changes.
        https://bugs.webkit.org/show_bug.cgi?id=76183

        Reviewed by Yury Semikhatsky.

        Test: inspector/elements/set-outer-html-2.html

        * inspector/DOMEditor.cpp:
        (WebCore::DOMEditor::patchDocument):
        (WebCore::DOMEditor::patchNode):
        (WebCore::DOMEditor::innerPatchHTMLElement):
        (WebCore::DOMEditor::innerPatchNode):
        (WebCore::DOMEditor::diff):
        (WebCore::DOMEditor::innerPatchChildren):
        (WebCore::DOMEditor::createDigest):
        (WebCore::DOMEditor::insertBefore):
        (WebCore::DOMEditor::removeChild):
        (WebCore::DOMEditor::markNodeAsUsed):
        (WebCore::DOMEditor::dumpMap):
        * inspector/DOMEditor.h:
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::setOuterHTML):

2012-01-13  Shinya Kawanaka  <shinyak@google.com>

        ShadowContentElement should be able to use query.
        https://bugs.webkit.org/show_bug.cgi?id=75302

        Reviewed by Hajime Morita.

        This patch introduces a selector to query elements in ShadowContentElement.
        This can be used instead of ShadowContentElement::shouldInclude in more sophisticated ways.

        Tests: fast/dom/shadow/shadow-contents-select-expected.html
               fast/dom/shadow/shadow-contents-select.html

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/DOMAllInOne.cpp:
        * dom/SelectorQuery.cpp:
        (WebCore::SelectorDataList::SelectorDataList):
          Extracted from SelectorQueryto share codes with ShadowContentSelectorQuery.
        (WebCore::SelectorDataList::initialize):
        (WebCore::SelectorDataList::matches):
        (WebCore::SelectorDataList::queryAll):
        (WebCore::SelectorDataList::queryFirst):
        (WebCore::SelectorDataList::canUseIdLookup):
        (WebCore::SelectorDataList::execute):
        (WebCore::SelectorQuery::SelectorQuery):
        (WebCore::SelectorQuery::queryAll):
        (WebCore::SelectorQuery::queryFirst):
        * dom/SelectorQuery.h:
        (WebCore::SelectorDataList::size):
        * dom/ShadowContentElement.cpp:
        (WebCore::ShadowContentElement::select):
        (WebCore::ShadowContentElement::setSelect):
        * dom/ShadowContentElement.h:
        * dom/ShadowContentSelectorQuery.cpp: Added.
        (WebCore::ShadowContentSelectorQuery::ShadowContentSelectorQuery):
        (WebCore::ShadowContentSelectorQuery::matches):
          Returns true if Node is matched by the query.
        * dom/ShadowContentSelectorQuery.h: Copied from Source/WebCore/dom/ShadowContentElement.h.
        * dom/ShadowInclusionSelector.cpp:
        (WebCore::ShadowInclusionSelector::select):
        * dom/ShadowInclusionSelector.h:
        * html/HTMLAttributeNames.in:
        * html/HTMLDetailsElement.cpp:
        (WebCore::summaryQuerySelector):
        (WebCore::DetailsContentElement::DetailsContentElement): Re-implemented using query.
        (WebCore::DetailsSummaryElement::DetailsSummaryElement): ditto.

2012-01-13  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: Detailed heap snapshot. _calculateFlags is too slow on a large heap snapshot.
        https://bugs.webkit.org/show_bug.cgi?id=76252

        _calculateFlags speed is about 10k edges per second.
        It requires 150sec for the snapshot with 1.5m edges.
        The root of problem is var node = list.shift();
        shift() is not effective in term of memory and cpu.
        In our case it can be replaced with pop().
        Now the function works 40 times faster.

        Drive by change: if statement was reformatted a bit for better readability.

        Reviewed by Yury Semikhatsky.

        * inspector/front-end/HeapSnapshot.js:
        (WebInspector.HeapSnapshot.prototype._calculateFlags):

2012-01-13  Alexander Pavlov  <apavlov@chromium.org>

        Web Inspector: [Chromium] JavaScriptOutlineDialog fails to open
        https://bugs.webkit.org/show_bug.cgi?id=76259

        Reviewed by Yury Semikhatsky.

        * WebCore.gypi:

2012-01-13  Kentaro Hara  <haraken@chromium.org>

        text-decorations should not be propagated to floating, absolutely or fixed
        positioned decendants
        https://bugs.webkit.org/show_bug.cgi?id=18611

        Reviewed by Darin Adler.

        Previously text-decorations were propagated to all child elements,
        but they should not be propagated to out-of-flow descendants,
        i.e. floating, absolutely or fixed positioned elements.

        The spec says "text decorations are not propagated to any out-of-flow descendants":
        http://www.w3.org/TR/2011/WD-css3-text-20110901/#decoration

        Test: fast/css/text-decoration-in-descendants.html

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::getTextDecorationColors):

2012-01-13  Kent Tamura  <tkent@chromium.org>

        REGRESSION (r104668): Crash in HTMLFormElement destructor if the
        document contains radio groups with the identical name.
        https://bugs.webkit.org/show_bug.cgi?id=76206

        Reviewed by Darin Adler.

        Test: fast/forms/radio/radio-group-document-destruction.html

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::~HTMLInputElement):
        setForm(0) may register this to a document-level radio button group.
        We need to unregister this from the group because
        Document::checkedRadioButtons() is still accessible from other objects.

2012-01-13  Mario Sanchez Prada  <msanchez@igalia.com>

        [GTK] ATK text-caret-moved and text-selection-changed events not being emitted
        https://bugs.webkit.org/show_bug.cgi?id=76069

        Reviewed by Martin Robinson.

        Fix bug introduced with patch for Bug 72830.

        * editing/gtk/FrameSelectionGtk.cpp:
        (WebCore::FrameSelection::notifyAccessibilityForSelectionChange):
        Pass the right accessibility object associated with the current
        selection to objectFocusedAndCaretOffsetUnignored.

2012-01-13  Alexandru Chiculita  <achicu@adobe.com>

        Refactor RenderLayerBacking::paintIntoLayer and RenderLayer::paintLayer()/paintLayerContents() to avoid duplicate code
        https://bugs.webkit.org/show_bug.cgi?id=75983

        Reviewed by Simon Fraser.

        No new tests, just merging two duplicate methods.

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::paintLayer):
            This method is used only in non-composited mode, so I've moved the check for composited mode much earlier.

        (WebCore::RenderLayer::paintLayerContentsAndReflection):
            Also used just in non-composited mode, it will draw the reflection and then just call paintLayerContents.

        (WebCore::RenderLayer::paintLayerContents):
            Old method, that is now used by both composited and non-composited mode. I've added 3 more flags used to render the
            Graphics layers: Background, Foreground and Mask.

        * rendering/RenderLayer.h:
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::paintIntoLayer):
            Removed all the code and delegated the work to RenderLayer::paintLayerContents.

2012-01-12  Gavin Barraclough  <barraclough@apple.com>

        Clean up putDirect (part 2)
        https://bugs.webkit.org/show_bug.cgi?id=76232

        Reviewed by Sam Weinig.

        Rename putWithAttributes to putDirectVirtual.

        * bindings/js/JSDOMWindowShell.cpp:
        (WebCore::JSDOMWindowShell::putDirectVirtual):
        * bindings/js/JSDOMWindowShell.h:

2012-01-12  MORITA Hajime  <morrita@google.com>

        [Chromium] JSExportMacros.h should be visible.
        https://bugs.webkit.org/show_bug.cgi?id=76147

        Reviewed by Tony Chang.

        No new tests. No behavior change.

        * config.h:

2012-01-12  ChangSeok Oh  <shivamidow@gmail.com>

        Split GraphicsContext3DOpenGL into several files
        https://bugs.webkit.org/show_bug.cgi?id=75462

        Reviewed by Kenneth Russell.

        Split GraphicsContext3DOpenGL.cpp into three files, GraphicsContext3DOpenGLCommon.cpp,
        GraphicsContext3DOpenGL.cpp & GraphicsContext3DOpenGLES.cpp so that makes gles support possible
        for WebGL etc. Most of common APIs between gl and gles are in GraphicsContext3DOpenGLCommon.cpp.
        The other gl and gles specific APIs are placed apart in GraphicsContext3DOpenGL.cpp &
        GraphicsContext3DOpenGLES.cpp

        No new tests required.

        * GNUmakefile.list.am: Added GraphicsContext3DOpenGLCommon.cpp
        * Target.pri: Added GraphicsContext3DOpenGLCommon.cpp
        * WebCore.gypi: Added GraphicsContext3DOpenGLCommon.cpp
        * WebCore.xcodeproj/project.pbxproj: Added GraphicsContext3DOpenGLCommon.cpp
        * platform/graphics/opengl/GraphicsContext3DOpenGL.cpp:
        (WebCore::GraphicsContext3D::readPixels):
        (WebCore::GraphicsContext3D::renderbufferStorage):
        * platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp: Copied from Source/WebCore/platform/graphics/opengl/GraphicsContext3DOpenGL.cpp.
        (WebCore::GraphicsContext3D::validateAttributes):
        (WebCore::GraphicsContext3D::isResourceSafe):
        (WebCore::GraphicsContext3D::paintRenderingResultsToCanvas):
        (WebCore::GraphicsContext3D::paintCompositedResultsToCanvas):
        (WebCore::GraphicsContext3D::paintRenderingResultsToImageData):
        (WebCore::GraphicsContext3D::getInternalFramebufferSize):
        (WebCore::GraphicsContext3D::activeTexture):
        (WebCore::GraphicsContext3D::attachShader):
        (WebCore::GraphicsContext3D::bindAttribLocation):
        (WebCore::GraphicsContext3D::bindBuffer):
        (WebCore::GraphicsContext3D::bindRenderbuffer):
        (WebCore::GraphicsContext3D::bindTexture):
        (WebCore::GraphicsContext3D::blendColor):
        (WebCore::GraphicsContext3D::blendEquation):
        (WebCore::GraphicsContext3D::blendEquationSeparate):
        (WebCore::GraphicsContext3D::blendFunc):
        (WebCore::GraphicsContext3D::blendFuncSeparate):
        (WebCore::GraphicsContext3D::bufferData):
        (WebCore::GraphicsContext3D::bufferSubData):
        (WebCore::GraphicsContext3D::checkFramebufferStatus):
        (WebCore::GraphicsContext3D::clearColor):
        (WebCore::GraphicsContext3D::clear):
        (WebCore::GraphicsContext3D::clearDepth):
        (WebCore::GraphicsContext3D::clearStencil):
        (WebCore::GraphicsContext3D::colorMask):
        (WebCore::GraphicsContext3D::compileShader):
        (WebCore::GraphicsContext3D::cullFace):
        (WebCore::GraphicsContext3D::depthFunc):
        (WebCore::GraphicsContext3D::depthMask):
        (WebCore::GraphicsContext3D::depthRange):
        (WebCore::GraphicsContext3D::detachShader):
        (WebCore::GraphicsContext3D::disable):
        (WebCore::GraphicsContext3D::disableVertexAttribArray):
        (WebCore::GraphicsContext3D::drawArrays):
        (WebCore::GraphicsContext3D::drawElements):
        (WebCore::GraphicsContext3D::enable):
        (WebCore::GraphicsContext3D::enableVertexAttribArray):
        (WebCore::GraphicsContext3D::finish):
        (WebCore::GraphicsContext3D::flush):
        (WebCore::GraphicsContext3D::framebufferRenderbuffer):
        (WebCore::GraphicsContext3D::framebufferTexture2D):
        (WebCore::GraphicsContext3D::frontFace):
        (WebCore::GraphicsContext3D::generateMipmap):
        (WebCore::GraphicsContext3D::getActiveAttrib):
        (WebCore::GraphicsContext3D::getAttachedShaders):
        (WebCore::GraphicsContext3D::getAttribLocation):
        (WebCore::GraphicsContext3D::getContextAttributes):
        (WebCore::GraphicsContext3D::getError):
        (WebCore::GraphicsContext3D::getString):
        (WebCore::GraphicsContext3D::hint):
        (WebCore::GraphicsContext3D::isBuffer):
        (WebCore::GraphicsContext3D::isEnabled):
        (WebCore::GraphicsContext3D::isFramebuffer):
        (WebCore::GraphicsContext3D::isProgram):
        (WebCore::GraphicsContext3D::isRenderbuffer):
        (WebCore::GraphicsContext3D::isShader):
        (WebCore::GraphicsContext3D::isTexture):
        (WebCore::GraphicsContext3D::lineWidth):
        (WebCore::GraphicsContext3D::linkProgram):
        (WebCore::GraphicsContext3D::pixelStorei):
        (WebCore::GraphicsContext3D::polygonOffset):
        (WebCore::GraphicsContext3D::releaseShaderCompiler):
        (WebCore::GraphicsContext3D::sampleCoverage):
        (WebCore::GraphicsContext3D::scissor):
        (WebCore::GraphicsContext3D::shaderSource):
        (WebCore::GraphicsContext3D::stencilFunc):
        (WebCore::GraphicsContext3D::stencilFuncSeparate):
        (WebCore::GraphicsContext3D::stencilMask):
        (WebCore::GraphicsContext3D::stencilMaskSeparate):
        (WebCore::GraphicsContext3D::stencilOp):
        (WebCore::GraphicsContext3D::stencilOpSeparate):
        (WebCore::GraphicsContext3D::texParameterf):
        (WebCore::GraphicsContext3D::texParameteri):
        (WebCore::GraphicsContext3D::uniform1f):
        (WebCore::GraphicsContext3D::uniform1fv):
        (WebCore::GraphicsContext3D::uniform2f):
        (WebCore::GraphicsContext3D::uniform2fv):
        (WebCore::GraphicsContext3D::uniform3f):
        (WebCore::GraphicsContext3D::uniform3fv):
        (WebCore::GraphicsContext3D::uniform4f):
        (WebCore::GraphicsContext3D::uniform4fv):
        (WebCore::GraphicsContext3D::uniform1i):
        (WebCore::GraphicsContext3D::uniform1iv):
        (WebCore::GraphicsContext3D::uniform2i):
        (WebCore::GraphicsContext3D::uniform2iv):
        (WebCore::GraphicsContext3D::uniform3i):
        (WebCore::GraphicsContext3D::uniform3iv):
        (WebCore::GraphicsContext3D::uniform4i):
        (WebCore::GraphicsContext3D::uniform4iv):
        (WebCore::GraphicsContext3D::uniformMatrix2fv):
        (WebCore::GraphicsContext3D::uniformMatrix3fv):
        (WebCore::GraphicsContext3D::uniformMatrix4fv):
        (WebCore::GraphicsContext3D::useProgram):
        (WebCore::GraphicsContext3D::validateProgram):
        (WebCore::GraphicsContext3D::vertexAttrib1f):
        (WebCore::GraphicsContext3D::vertexAttrib1fv):
        (WebCore::GraphicsContext3D::vertexAttrib2f):
        (WebCore::GraphicsContext3D::vertexAttrib2fv):
        (WebCore::GraphicsContext3D::vertexAttrib3f):
        (WebCore::GraphicsContext3D::vertexAttrib3fv):
        (WebCore::GraphicsContext3D::vertexAttrib4f):
        (WebCore::GraphicsContext3D::vertexAttrib4fv):
        (WebCore::GraphicsContext3D::vertexAttribPointer):
        (WebCore::GraphicsContext3D::viewport):
        (WebCore::GraphicsContext3D::getBooleanv):
        (WebCore::GraphicsContext3D::getBufferParameteriv):
        (WebCore::GraphicsContext3D::getFloatv):
        (WebCore::GraphicsContext3D::getFramebufferAttachmentParameteriv):
        (WebCore::GraphicsContext3D::getProgramiv):
        (WebCore::GraphicsContext3D::getProgramInfoLog):
        (WebCore::GraphicsContext3D::getRenderbufferParameteriv):
        (WebCore::GraphicsContext3D::getShaderiv):
        (WebCore::GraphicsContext3D::getShaderInfoLog):
        (WebCore::GraphicsContext3D::getShaderSource):
        (WebCore::GraphicsContext3D::getTexParameterfv):
        (WebCore::GraphicsContext3D::getTexParameteriv):
        (WebCore::GraphicsContext3D::getUniformfv):
        (WebCore::GraphicsContext3D::getUniformiv):
        (WebCore::GraphicsContext3D::getUniformLocation):
        (WebCore::GraphicsContext3D::getVertexAttribfv):
        (WebCore::GraphicsContext3D::getVertexAttribiv):
        (WebCore::GraphicsContext3D::getVertexAttribOffset):
        (WebCore::GraphicsContext3D::texSubImage2D):
        (WebCore::GraphicsContext3D::compressedTexImage2D):
        (WebCore::GraphicsContext3D::compressedTexSubImage2D):
        (WebCore::GraphicsContext3D::createBuffer):
        (WebCore::GraphicsContext3D::createFramebuffer):
        (WebCore::GraphicsContext3D::createProgram):
        (WebCore::GraphicsContext3D::createRenderbuffer):
        (WebCore::GraphicsContext3D::createShader):
        (WebCore::GraphicsContext3D::createTexture):
        (WebCore::GraphicsContext3D::deleteBuffer):
        (WebCore::GraphicsContext3D::deleteFramebuffer):
        (WebCore::GraphicsContext3D::deleteProgram):
        (WebCore::GraphicsContext3D::deleteRenderbuffer):
        (WebCore::GraphicsContext3D::deleteShader):
        (WebCore::GraphicsContext3D::deleteTexture):
        (WebCore::GraphicsContext3D::synthesizeGLError):
        (WebCore::GraphicsContext3D::markContextChanged):
        (WebCore::GraphicsContext3D::markLayerComposited):
        (WebCore::GraphicsContext3D::layerComposited):
        (WebCore::GraphicsContext3D::getExtensions):
        * platform/graphics/opengl/GraphicsContext3DOpenGLES.cpp: Added.
        (WebCore::GraphicsContext3D::readRenderingResults):
        (WebCore::GraphicsContext3D::reshape):
        (WebCore::GraphicsContext3D::prepareTexture):
        (WebCore::GraphicsContext3D::bindFramebuffer):
        (WebCore::GraphicsContext3D::copyTexImage2D):
        (WebCore::GraphicsContext3D::copyTexSubImage2D):
        (WebCore::GraphicsContext3D::getActiveUniform):
        (WebCore::GraphicsContext3D::readPixels):
        (WebCore::GraphicsContext3D::renderbufferStorage):
        (WebCore::GraphicsContext3D::getIntegerv):
        (WebCore::GraphicsContext3D::texImage2D):

2012-01-12  Wei James  <james.wei@intel.com>

        Add vsma in VectorMath to handle vector scale multiply and add and use it in AudioBus
        https://bugs.webkit.org/show_bug.cgi?id=75835

        When summing a audio bus, the source is multiplied with the scale and
        then summed into the destination bus. Add this function to fulfill it.

        Reviewed by Kenneth Russell.

        * platform/audio/AudioBus.cpp:
        * platform/audio/VectorMath.cpp:
        (WebCore::VectorMath::vsma):
        * platform/audio/VectorMath.h:

2012-01-12  James Simonsen  <simonjam@chromium.org>

        Web Inspector: [Chomium] Resources loaded with 304 status code have receiving time of 15000 days in network panel.
        https://bugs.webkit.org/show_bug.cgi?id=76176

        Reviewed by Nate Chapin.

        No new tests. Can't trigger this with inspector tests. Will add one when the Resource Timing API is in.

        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::didReceiveResponse): Use monotonic time.

2012-01-12  Alexey Proskuryakov  <ap@apple.com>

        NSURL to KURL conversion shouldn't turn raw paths into file URLs
        https://bugs.webkit.org/show_bug.cgi?id=76234

        Reviewed by Darin Adler.

        * platform/mac/KURLMac.mm: (WebCore::KURL::KURL): Removed this code.

2012-01-12  Anders Carlsson  <andersca@apple.com>

        Create a GraphicsLayer for the overhang areas if threaded scrolling is enabled
        https://bugs.webkit.org/show_bug.cgi?id=76220

        Reviewed by Simon Fraser.

        * page/FrameView.cpp:
        Remove PLATFORM(CHROMIUM) #ifdefs.

        * page/FrameView.h:
        Ditto.

        * platform/ScrollView.cpp:
        (WebCore::ScrollView::wheelEvent):
        Ditto.

        * platform/ScrollableArea.h:
        Ditto.

        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::frameViewDidChangeSize):
        Ditto.

        (WebCore::RenderLayerCompositor::requiresOverhangAreasLayer):
        Make this return true if we have a scrolling coordinator.

        (WebCore::RenderLayerCompositor::updateOverflowControlsLayers):
        Remove PLATFORM(CHROMIUM) #ifdefs. Fix a bug the overhang layer was being added above the clip layer.

        (WebCore::RenderLayerCompositor::destroyRootLayer):
        Remove PLATFORM(CHROMIUM) #ifdefs.
        
        * rendering/RenderLayerCompositor.h:
        Ditto.

2012-01-12  Kenichi Ishibashi  <bashi@chromium.org>

        Move SimpleFontDataSkia.cpp to Source/WebCore/platform/graphics/skia
        https://bugs.webkit.org/show_bug.cgi?id=76155

        Reviewed by Tony Chang.

        No new tests. No behavior change.

        * PlatformBlackBerry.cmake:
        * WebCore.gyp/WebCore.gyp:
        * WebCore.gypi:
        * platform/graphics/skia/SimpleFontDataSkia.cpp: Renamed from Source/WebCore/platform/graphics/harfbuzz/SimpleFontDataSkia.cpp.
        (WebCore::SimpleFontData::platformInit):
        (WebCore::SimpleFontData::platformCharWidthInit):
        (WebCore::SimpleFontData::platformDestroy):
        (WebCore::SimpleFontData::createScaledFontData):
        (WebCore::SimpleFontData::smallCapsFontData):
        (WebCore::SimpleFontData::emphasisMarkFontData):
        (WebCore::SimpleFontData::containsCharacters):
        (WebCore::SimpleFontData::determinePitch):
        (WebCore::SimpleFontData::platformBoundsForGlyph):
        (WebCore::SimpleFontData::platformWidthForGlyph):

2012-01-12  Benjamin Poulain  <bpoulain@apple.com>

        A Frame with frame flattening can be stuck in a state in which performPostLayoutTasks() is never executed
        https://bugs.webkit.org/show_bug.cgi?id=76154

        Reviewed by Beth Dakin.

        In a frame with inSubframeLayoutWithFrameFlattening == true, if
        -m_hasPendingPostLayoutTasks == true
        -FrameView::unscheduleRelayout() is executed
        -->the timer m_postLayoutTasksTimer is stopped
        -->no timer is scheduled due to m_hasPendingPostLayoutTasks == true && inSubframeLayoutWithFrameFlattening == true

        This patch revert the handling of the postLayoutTasks to its state prior to r66552.

        The timer itself is used as the only state to know if post layout tasks are scheduled.

        For the case without frame flattening:
        -Prior to this patch, when FrameView::unscheduleRelayout() was executed, the postLayoutTasksTimer was killed,
        and the post layout tasks would be executed during the next layout().
        -After this patch, the post layout tasks stay scheduled and are executed on the next event loop if layout()
        was not invoked before.

        * page/FrameView.cpp:
        (WebCore::FrameView::FrameView):
        (WebCore::FrameView::~FrameView):
        (WebCore::FrameView::reset):
        (WebCore::FrameView::layout):
        (WebCore::FrameView::unscheduleRelayout):
        (WebCore::FrameView::flushAnyPendingPostLayoutTasks):
        (WebCore::FrameView::performPostLayoutTasks):
        * page/FrameView.h:

2012-01-12  Yongjun Zhang  <yongjun_zhang@apple.com>

        Reviewed by Benjamin Poulain.

        https://bugs.webkit.org/show_bug.cgi?id=75991
        Make the code in MemoryPressureHandler::respondToMemoryPressure shareable.

        Move memory pressure handling code inside a new function (releaseMemory) so that
        we could shared it between mac and iOS.

        * Configurations/WebCore.xcconfig: add MemoryPressureHandlerMac.mm into iOS build.
        * platform/MemoryPressureHandler.h:
        * platform/mac/MemoryPressureHandlerMac.mm:
        (WebCore::MemoryPressureHandler::respondToMemoryPressure):
        (WebCore::MemoryPressureHandler::releaseMemory):

2012-01-12  Eric Seidel  <eric@webkit.org>

        Refactor DOMImplementation.hasFeature logic into helper functions.
        https://bugs.webkit.org/show_bug.cgi?id=76212

        Reviewed by Adam Barth.

        This patch should not have any behavior change.  The goal was
        to move our feature detection towards a more modular architecture
        (as that seems to be the current trend in webkit).  In a future
        patch we could easily move the SVG feature detection into the
        SVG directory, for example.  I've also added a list of all the
        Event3 features (currently commented out) which makes it obvious
        how many we're missing.

        * dom/DOMImplementation.cpp:
        (WebCore::isSVG10Feature):
        (WebCore::isSVG11Feature):
        (WebCore::isEvents2Feature):
        (WebCore::isEvents3Feature):
        (WebCore::DOMImplementation::hasFeature):

2012-01-12  Adam Barth  <abarth@webkit.org>

        NodeIterator loses track of the reference node when the reference node is removed from the document (IETC ni_removeReferenceNode)
        https://bugs.webkit.org/show_bug.cgi?id=76146

        Reviewed by Eric Seidel.

        In the case where we're removing the reference node we can end up with
        the wrong reference node.  This patch makes sure we traverse outside of
        the removed node's subtree.

        This bug was caught by the following IE Test Center test:

        http://samples.msdn.microsoft.com/ietestcenter/domtraversal/showdomtraversaltest.htm?ni_removeReferenceNode

        Our new behavior also match Firefox.

        I experimented a bit with adding ASSERT_NOT_REACHED to various branches
        in NodeIterator::updateForNodeRemoval, and it seems our test coverage
        for this function is relatively poor.  In the future, we should
        consider adding more tests for this complicated function.

        Test: fast/dom/node-iterator-reference-node-removed.html

        * dom/NodeIterator.cpp:
        (WebCore::NodeIterator::updateForNodeRemoval):

2012-01-12  Joshua Bell  <jsbell@chromium.org>

        IndexedDB: Throw exception if IDBCursor.continue() called with key equal to current
        https://bugs.webkit.org/show_bug.cgi?id=76100

        The fix for https://bugs.webkit.org/show_bug.cgi?id=74213 missed the "or equal" clause
        in the spec.

        Reviewed by Tony Chang.

        Test: storage/indexeddb/cursor-continue.html

        * storage/IDBCursorBackendImpl.cpp:
        (WebCore::IDBCursorBackendImpl::continueFunction):

2012-01-12  Jon Lee  <jonlee@apple.com>

        Setting value on a select element to a non existing option value should clear selection
        https://bugs.webkit.org/show_bug.cgi?id=67233
        <rdar://problem/10057159>

        Reviewed by Darin Adler.

        Test: fast/forms/select/setting-to-invalid-value.html

        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::setValue): Clear the selection in the cases where we cannot
        find an option with the specified value. The spec states to clear the selectedness of all
        options first. To avoid calling setSelectedIndex() multiple times, we clear the selected
        option(s) only when don't find the appropriate option.

        Also, correct the sentence style of a comment.

2012-01-12  Jer Noble  <jer.noble@apple.com>

        Unreviewed build fix after r104858.

        NSDataReadingMappedIfSafe is not defined on <= 10.6.  Use NSDataReadingMapped on that platform instead.

        * platform/audio/mac/AudioBusMac.mm:
        (WebCore::AudioBus::loadPlatformResource):

2012-01-12  Dana Jansens  <danakj@chromium.org>

        [skia] Track a simple opaque area when painting via PlatformContextSkia and save in LayerTextureUpdater
        https://bugs.webkit.org/show_bug.cgi?id=74352

        Reviewed by Stephen White.

        New unit tests in PlatformContextSkiaTest.cpp

        * WebCore.gypi:
        * platform/graphics/skia/GraphicsContextSkia.cpp:
        (WebCore::GraphicsContext::clearRect):
        (WebCore::GraphicsContext::drawConvexPolygon):
        (WebCore::GraphicsContext::drawEllipse):
        (WebCore::drawOuterPath):
        (WebCore::drawInnerPath):
        (WebCore::GraphicsContext::drawFocusRing):
        (WebCore::GraphicsContext::drawLine):
        (WebCore::GraphicsContext::drawLineForTextChecking):
        (WebCore::GraphicsContext::drawLineForText):
        (WebCore::GraphicsContext::fillPath):
        (WebCore::GraphicsContext::fillRect):
        (WebCore::GraphicsContext::fillRoundedRect):
        (WebCore::GraphicsContext::strokeArc):
        (WebCore::GraphicsContext::strokePath):
        (WebCore::GraphicsContext::strokeRect):
        * platform/graphics/skia/ImageSkia.cpp:
        (WebCore::paintSkBitmap):
        * platform/graphics/skia/OpaqueRegionSkia.cpp: Added.
        (WebCore::OpaqueRegionSkia::OpaqueRegionSkia):
        (WebCore::OpaqueRegionSkia::~OpaqueRegionSkia):
        (WebCore::OpaqueRegionSkia::asRect):
        (WebCore::xfermodeIsOpaque):
        (WebCore::xfermodePreservesOpaque):
        (WebCore::paintIsOpaque):
        (WebCore::OpaqueRegionSkia::didDrawRect):
        (WebCore::OpaqueRegionSkia::didDrawPath):
        (WebCore::OpaqueRegionSkia::didDrawPoints):
        (WebCore::OpaqueRegionSkia::didDrawBounded):
        (WebCore::OpaqueRegionSkia::didDraw):
        (WebCore::OpaqueRegionSkia::didDrawUnbounded):
        (WebCore::OpaqueRegionSkia::markRectAsOpaque):
        (WebCore::OpaqueRegionSkia::markRectAsNonOpaque):
        * platform/graphics/skia/OpaqueRegionSkia.h: Added.
        * platform/graphics/skia/PlatformContextSkia.cpp:
        (WebCore::PlatformContextSkia::PlatformContextSkia):
        (WebCore::PlatformContextSkia::clippedToImage):
        (WebCore::PlatformContextSkia::drawRect):
        (WebCore::PlatformContextSkia::paintSkPaint):
        (WebCore::PlatformContextSkia::didDrawRect):
        (WebCore::PlatformContextSkia::didDrawPath):
        (WebCore::PlatformContextSkia::didDrawPoints):
        (WebCore::PlatformContextSkia::didDrawBounded):
        * platform/graphics/skia/PlatformContextSkia.h:
        (WebCore::PlatformContextSkia::setTrackOpaqueRegion):
        (WebCore::PlatformContextSkia::opaqueRegion):

2012-01-12  Beth Dakin  <bdakin@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=76209
        Support expanded scrollbars
        -and corresponding-
        <rdar://problem/10527734>

        Reviewed by Sam Weinig.

        All this really requires is leaving the proper amount of space for the 
        expanded width.
        * platform/mac/NSScrollerImpDetails.h:
        * platform/mac/ScrollbarThemeMac.mm:
        (WebCore::supportsExpandedScrollbars):
        (WebCore::ScrollbarThemeMac::scrollbarThickness):

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

        WebAudio: Enable USE_CONCATENATED_IMPULSE_RESPONSES on Mac port.
        https://bugs.webkit.org/show_bug.cgi?id=74328

        Reviewed by Eric Carlson.

        No new tests; no net change in functionality.

        * WebCore.xcodeproj/project.pbxproj: Added SincResampler class, Composite.wav to the project.
            Removed IRC_*.wav resources from the project.
        * platform/audio/AudioBus.cpp:
        (WebCore::AudioBus::createBySampleRateConverting): Uncommented this function
        * platform/audio/AudioBus.h:
        * platform/audio/HRTFElevation.cpp:

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

        WebAudio: AudioBus::loadPlatformResource should mmap file on Mac port.
        https://bugs.webkit.org/show_bug.cgi?id=74326

        Reviewed by Darin Adler.

        No new tests; no net change in functionality.

        Use NSDataReadingMappedIfSafe when reading platform audio file data.

        * platform/audio/mac/AudioBusMac.mm:
        (WebCore::AudioBus::loadPlatformResource):

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

        WebAudio: Use Logging instead of printf.
        https://bugs.webkit.org/show_bug.cgi?id=74322

        Reviewed by Darin Adler.

        No new tests; no net change in functionality.

        Add a new WebCoreLogLevel for WebAudio, and use this new log level instead of 
        printf statements in webaudio classes.

        * platform/Logging.cpp:
        (WebCore::getChannelFromName):
        * platform/Logging.h:
        * platform/mac/LoggingMac.mm:
        (WebCore::InitializeLoggingChannelsIfNecessary):
        * platform/audio/FFTFrame.cpp:
        (WebCore::FFTFrame::print):
        * webaudio/DefaultAudioDestinationNode.cpp:
        (WebCore::DefaultAudioDestinationNode::initialize):

2012-01-12  Anders Carlsson  <andersca@apple.com>

        Make ScrollElasticityController members private
        https://bugs.webkit.org/show_bug.cgi?id=76208

        Reviewed by Andreas Kling.

        * platform/mac/ScrollAnimatorMac.mm:
        (WebCore::ScrollAnimatorMac::endScrollGesture):
        Call ScrollElasticityController::endScrollGesture.

        * platform/mac/ScrollElasticityController.h:
        Make members private.

        * platform/mac/ScrollElasticityController.mm:
        (WebCore::ScrollElasticityController::endScrollGesture):
        Call snapRubberBand.

        (WebCore::ScrollElasticityController::snapRubberBandTimerFired):
        Call stopSnapRubberbandTimer.

2012-01-12  Anders Carlsson  <andersca@apple.com>

        Move wheel event handling to ScrollElasticityController::handleWheelEvent
        https://bugs.webkit.org/show_bug.cgi?id=76205

        Reviewed by Andreas Kling.

        Move the code in ScrollAnimatorMac::smoothScrollWithEvent to ScrollElasticityController::handleWheelEvent and
        change ScrollAnimatorMac::handleWheelEvent to just call ScrollElasticityController::handleWheelEvent.
        This means that we'll not set m_haveScrolledSincePageLoad = true anymore (we used to set it in ScrollAnimatorMac::smoothScrollWithEvent),
        but we already set it to true in ScrollAnimatorMac::handleWheelEvent so it already had no effect.

        * platform/mac/ScrollAnimatorMac.h:
        * platform/mac/ScrollAnimatorMac.mm:
        (WebCore::ScrollAnimatorMac::handleWheelEvent):
        * platform/mac/ScrollElasticityController.h:
        * platform/mac/ScrollElasticityController.mm:
        (WebCore::elasticDeltaForReboundDelta):
        (WebCore::scrollWheelMultiplier):
        (WebCore::ScrollElasticityController::handleWheelEvent):

2012-01-12  Simon Fraser  <simon.fraser@apple.com>

        Borders and box masks behave incorrectly with overlapping offsets
        https://bugs.webkit.org/show_bug.cgi?id=76137

        Reviewed by Dave Hyatt.
        
        When border-image-slice sizes add up to more than the height or width
        of the border-image, the middle sections should not be rendered, per spec.
        
        Test: fast/borders/border-image-slice-constrained.html

        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paintNinePieceImage):

2012-01-12  Anders Carlsson  <andersca@apple.com>

        Make all calls to pinnedInDirection go through the ScrollElasticityController
        https://bugs.webkit.org/show_bug.cgi?id=76204

        Reviewed by Andreas Kling.

        * platform/mac/ScrollAnimatorMac.mm:
        (WebCore::ScrollAnimatorMac::smoothScrollWithEvent):

2012-01-12  Stephen White  <senorblanco@chromium.org>

        [chromium] Re-enable Skia feColorMatrix filter implementation.
        https://bugs.webkit.org/show_bug.cgi?id=76186

        This code was landed in http://trac.webkit.org/changeset/104566 and
        partially reverted in http://trac.webkit.org/changeset/104632 due
        to problems with the Windows Shared builder.  Those problems have
        been fixed in r3006, since rolled into Chrome.

        Reviewed by Kenneth Russell.

        Covered by SVG feColorMatrix tests.

        * WebCore.gypi:
        * platform/graphics/filters/FEColorMatrix.h:

2012-01-12  Anders Carlsson  <andersca@apple.com>

        Add allowsHorizontalStretching and allowsVerticalStretching to ScrollElasticityControllerClient
        https://bugs.webkit.org/show_bug.cgi?id=76202

        Reviewed by Andreas Kling.

        * platform/mac/ScrollAnimatorMac.h:
        * platform/mac/ScrollAnimatorMac.mm:
        (WebCore::ScrollAnimatorMac::allowsVerticalStretching):
        (WebCore::ScrollAnimatorMac::allowsHorizontalStretching):
        (WebCore::ScrollAnimatorMac::smoothScrollWithEvent):
        * platform/mac/ScrollElasticityController.h:

2012-01-12  Anders Carlsson  <andersca@apple.com>

        Move snapRubberBand to ScrollElasticityController
        https://bugs.webkit.org/show_bug.cgi?id=76200

        Reviewed by Andreas Kling.

        * platform/mac/ScrollAnimatorMac.h:
        * platform/mac/ScrollAnimatorMac.mm:
        (WebCore::ScrollAnimatorMac::smoothScrollWithEvent):
        (WebCore::ScrollAnimatorMac::endScrollGesture):
        * platform/mac/ScrollElasticityController.h:
        * platform/mac/ScrollElasticityController.mm:
        (systemUptime):
        (WebCore::ScrollElasticityController::snapRubberBand):

2012-01-12  Antti Koivisto  <antti@apple.com>

        REGRESSION(r104060): Setting user stylesheet may leave CSSStyleSelector with stale rule pointers 
        https://bugs.webkit.org/show_bug.cgi?id=76191

        Reviewed by Andreas Kling.
        
        Setting the user style sheet frees the existing user style sheet data structures. The code
        in Document::updatePageGroupUserSheets then relies on styleSelectorChanged to clear the
        style selector so it is not left with stale pointers. However under certain conditions
        involving pending stylesheets it may bail out quickly without clearing.
        
        Document::styleSelectorChanged has to take care that it never leaves the style selector stale
        even when bailing out early.

        Test: fast/css/user-stylesheet-crash.html

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

2012-01-12  Nat Duca  <nduca@chromium.org>

        [chromium] Turn off FrameRateController timesource when it is not needed
        https://bugs.webkit.org/show_bug.cgi?id=76149

        Reviewed by James Robinson.

        * platform/graphics/chromium/cc/CCDelayBasedTimeSource.h:
        (WebCore::CCDelayBasedTimeSource::active):
        * platform/graphics/chromium/cc/CCFrameRateController.cpp:
        (WebCore::CCFrameRateController::setActive):
        (WebCore::CCFrameRateController::onTimerTick):
        * platform/graphics/chromium/cc/CCFrameRateController.h:
        * platform/graphics/chromium/cc/CCScheduler.cpp:
        (WebCore::CCScheduler::CCScheduler):
        (WebCore::CCScheduler::setVisible):
        (WebCore::CCScheduler::processScheduledActions):
        * platform/graphics/chromium/cc/CCSchedulerStateMachine.cpp:
        (WebCore::CCSchedulerStateMachine::vsyncCallbackNeeded):
        * platform/graphics/chromium/cc/CCSchedulerStateMachine.h:
        * platform/graphics/chromium/cc/CCTimeSource.h:

2012-01-12  Anders Carlsson  <andersca@apple.com>

        Move snapRubberBandTimerFired to ScrollElasticityController
        https://bugs.webkit.org/show_bug.cgi?id=76196

        Reviewed by Andreas Kling.

        * platform/mac/ScrollAnimatorMac.mm:
        (WebCore::ScrollAnimatorMac::snapRubberBandTimerFired):
        * platform/mac/ScrollElasticityController.h:
        * platform/mac/ScrollElasticityController.mm:
        (WebCore::elasticDeltaForTimeDelta):
        (WebCore::roundTowardZero):
        (WebCore::roundToDevicePixelTowardZero):
        (WebCore::ScrollElasticityController::snapRubberBandTimerFired):

2012-01-12  Joshua Bell  <jsbell@chromium.org>

        IndexedDB: Raise NON_TRANSIENT_ERR when invalid mode specified for transaction
        https://bugs.webkit.org/show_bug.cgi?id=76072

        Spec was updated to detail what should be thrown: http://www.w3.org/Bugs/Public/show_bug.cgi?id=11406

        Reviewed by Tony Chang.

        Tests: storage/indexeddb/transaction-basics.html

        * storage/IDBDatabase.cpp:
        (WebCore::IDBDatabase::transaction):

2012-01-12  Anders Carlsson  <andersca@apple.com>

        Remove the last non-ScrollElasticityController call from ScrollAnimatorMac::snapRubberBandTimerFired
        https://bugs.webkit.org/show_bug.cgi?id=76193

        Reviewed by Andreas Kling.

        Use ScrollElasticityControllerClient::immediateScrollBy for the final scroll before the rubber-band timer stops.

        * platform/mac/ScrollAnimatorMac.mm:
        (WebCore::ScrollAnimatorMac::snapRubberBandTimerFired):

2011-09-26  Jer Noble  <jer.noble@apple.com>

        Emit an error event when a request to enter full-screen is rejected.
        https://bugs.webkit.org/show_bug.cgi?id=62320

        Reviewed by Eric Carlson.

        Tests: fullscreen/full-screen-request-rejected.html
               fullscreen/full-screen-request-removed.html

        When a request to enter full-screen is rejected, emit an event 
        (webkitfullscreenerror) in response.  But emit the event during the next
        trip through the run-loop, like the webkitfullscreenchange event, and so a new
        timer and queue are necessary.

        * dom/Document.cpp:
        (WebCore::Document::requestFullScreenForElement): Emit the error event
            if the request does not pass all our requirements.
        * dom/Document.h: Add new ivars.
        * dom/Document.idl: Add support for setting an onfullscreenerror attribute.
        * dom/Element.h: Ditto.
        * dom/Element.idl: Ditto.
        * dom/EventNames.h: Add the name for the error event.

2012-01-12  Beth Dakin  <bdakin@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=76133
        ScrollAnimatorMac::mouseEnteredScrollbar() and mouseExitedScrollbar() should 
        only do stuff for legacy scrollbars
        -and corresponding-
        <rdar://problem/10603290>

        Reviewed by Sam Weinig.

        * platform/mac/ScrollAnimatorMac.mm:
        (WebCore::ScrollAnimatorMac::mouseEnteredScrollbar):
        (WebCore::ScrollAnimatorMac::mouseExitedScrollbar):

2012-01-12  Dan Bernstein  <mitz@apple.com>

        When generating derived sources, use the same compiler that is used to compile WebCore.

        Fixes <http://webkit.org/b/76189>
        [mac] When compiling WebCore with clang, llvm-gcc is used to generate derived sources

        Reviewed by Mark Rowe.

        * DerivedSources.make: Changed to use the CC environment variable instead of hardcoded gcc.
        * WebCore.xcodeproj/project.pbxproj: Set the CC environment variable, if not already set,
        according to TARGET_GCC_VERSION. CC is used by DerivedSources.make and some of the perl
        scripts it invokes.

2012-01-12  Pierre Rossi  <pierre.rossi@gmail.com>

        [Qt] Unreviewed build fix after r104828.

        * platform/qt/RenderThemeQtMobile.cpp:
        (WebCore::StylePainterMobile::findComboButton):

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

        Unreviewed, rolling out r104829.
        http://trac.webkit.org/changeset/104829
        https://bugs.webkit.org/show_bug.cgi?id=76188

        it broke qt-minimal (Requested by loislo1 on #webkit).

        * inspector/CodeGeneratorInspector.py:
        (CodeGenerator):
        (CodeGenerator.generate_type_builder):
        (CodeGenerator.generate_type_builder.AdHocTypeContext):
        (CodeGenerator.generate_type_builder.AdHocTypeContext.get_type_name_fix):
        (CodeGenerator.generate_type_builder.AdHocTypeContext.get_type_name_fix.NameFix):
        (CodeGenerator.generate_type_builder.AdHocTypeContext.get_type_name_fix.NameFix.output_comment):
        (CodeGenerator.generate_type_builder.AdHocTypeContext.call_generate_type_builder):
        (CodeGenerator.register_use):
        (RawTypesBinding):
        (RawTypesBinding.get_code_generator):
        (RawTypesBinding.get_in_c_type_text):
        (RawTypesBinding.get_setter_value_expression_pattern):
        (RawTypesBinding.reduce_to_raw_type):
        (TypeData.__init__):
        * inspector/InspectorValues.h:

2012-01-12  Pavel Podivilov  <podivilov@chromium.org>

        Web Inspector: [JSC] //@ sourceURL is not respected.
        https://bugs.webkit.org/show_bug.cgi?id=65532

        Reviewed by Pavel Feldman.

        Test: inspector/debugger/source-url-comment.html

        * bindings/js/ScriptDebugServer.cpp:
        (WebCore::ScriptDebugServer::dispatchDidParseSource):
        * inspector/ContentSearchUtils.cpp:
        (WebCore::ContentSearchUtils::findMagicComment):
        (WebCore::ContentSearchUtils::findSourceURL):
        (WebCore::ContentSearchUtils::findSourceMapURL):
        * inspector/ContentSearchUtils.h:

2012-01-12  Csaba Osztrogonác  <ossy@webkit.org>

        [Qt] Unreviewed trivial buildfix after r104828.

        * platform/qt/RenderThemeQtMobile.cpp:
        (WebCore::StylePainterMobile::findComboButton):

2012-01-12  Peter Rybin  <peter.rybin@gmail.com>

        Web Inspector: CodeGeneratorInspector.py: generate array types.
        https://bugs.webkit.org/show_bug.cgi?id=75284

        Reviewed by Yury Semikhatsky.

        New classes are generated for ecah array type instance.

        * inspector/CodeGeneratorInspector.py:
        (ArrayBinding):
        (ArrayBinding.get_code_generator):
        (ArrayBinding.get_code_generator.CodeGenerator):
        (ArrayBinding.get_code_generator.CodeGenerator.generate_type_builder):
        (ArrayBinding.get_code_generator.CodeGenerator.generate_type_builder.AdHocTypeContext):
        (ArrayBinding.get_code_generator.CodeGenerator.generate_type_builder.AdHocTypeContext.get_type_name_fix):
        (ArrayBinding.get_code_generator.CodeGenerator.generate_type_builder.AdHocTypeContext.get_type_name_fix.NameFix):
        (ArrayBinding.get_code_generator.CodeGenerator.generate_type_builder.AdHocTypeContext.get_type_name_fix.NameFix.output_comment):
        (ArrayBinding.get_code_generator.CodeGenerator.generate_type_builder.AdHocTypeContext.call_generate_type_builder):
        (ArrayBinding.get_code_generator.CodeGenerator.generate_forward_declaration):
        (ArrayBinding.get_code_generator.CodeGenerator.register_use):
        (ArrayBinding.get_in_c_type_text):
        (ArrayBinding.get_setter_value_expression_pattern):
        (ArrayBinding.reduce_to_raw_type):
        (RawTypeBinding):
        (RawTypeBinding.__init__):
        (RawTypeBinding.get_code_generator):
        (RawTypeBinding.get_in_c_type_text):
        (RawTypeBinding.get_setter_value_expression_pattern):
        (RawTypeBinding.reduce_to_raw_type):
        (TypeData.__init__):
        (TypeData.get_binding):
        * inspector/InspectorValues.h:

2012-01-12  Pierre Rossi  <pierre.rossi@gmail.com>

        [Qt] Avoid string operations in mobile theme's caching mechanism
        https://bugs.webkit.org/show_bug.cgi?id=75010

        The string operations constantly performed in the mobile theme
        to fetch or put controls in the pixmap cache can be pretty expensive.
        The new mechanism harnesses the QPixmapCache::Key API instead.

        Reviewed by Kenneth Rohde Christiansen.

        No new tests, internal refactoring.

        * platform/qt/RenderThemeQtMobile.cpp:
        (WebCore::qHash):
        (WebCore::StylePainterMobile::findCachedControl):
        (WebCore::StylePainterMobile::insertIntoCache):
        (WebCore::StylePainterMobile::findCheckBox):
        (WebCore::StylePainterMobile::drawRadio):
        (WebCore::StylePainterMobile::findRadio):
        (WebCore::StylePainterMobile::drawMultipleComboButton):
        (WebCore::StylePainterMobile::drawSimpleComboButton):
        (WebCore::StylePainterMobile::getButtonImageSize):
        (WebCore::StylePainterMobile::findComboButton):
        (WebCore::StylePainterMobile::findLineEdit):
        (WebCore::StylePainterMobile::findPushButton):
        (WebCore::StylePainterMobile::drawComboBox):
        (WebCore::StylePainterMobile::drawProgress):
        (WebCore::StylePainterMobile::drawSliderThumb):
        (WebCore::RenderThemeQtMobile::paintTextField):
        (WebCore::RenderThemeQtMobile::paintMenuList):
        * platform/qt/RenderThemeQtMobile.h:
        (WebCore::KeyIdentifier::KeyIdentifier):
        (WebCore::KeyIdentifier::operator==):

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

        Unreviewed, rolling out r104805.
        http://trac.webkit.org/changeset/104805
        https://bugs.webkit.org/show_bug.cgi?id=76180

        Breaks apple win compilation. (Requested by vsevik on
        #webkit).

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.exp.in:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/DOMAllInOne.cpp:
        * dom/SelectorQuery.cpp:
        (WebCore::SelectorQuery::SelectorQuery):
        (WebCore::SelectorQuery::queryAll):
        (WebCore::SelectorQuery::queryFirst):
        (WebCore::SelectorQuery::canUseIdLookup):
        (WebCore::SelectorQuery::execute):
        * dom/SelectorQuery.h:
        * dom/ShadowContentElement.cpp:
        (WebCore::ShadowContentElement::create):
        (WebCore::ShadowContentElement::ShadowContentElement):
        (WebCore::ShadowContentElement::shouldInclude):
        * dom/ShadowContentElement.h:
        * dom/ShadowContentSelectorQuery.cpp: Removed.
        * dom/ShadowContentSelectorQuery.h: Removed.
        * dom/ShadowInclusionSelector.cpp:
        (WebCore::ShadowInclusionSelector::select):
        * dom/ShadowInclusionSelector.h:
        * html/HTMLDetailsElement.cpp:
        (WebCore::DetailsContentElement::DetailsContentElement):
        (WebCore::DetailsContentElement::shouldInclude):
        (WebCore::DetailsSummaryElement::DetailsSummaryElement):
        (WebCore::DetailsSummaryElement::shouldInclude):
        * html/HTMLSummaryElement.cpp:
        (WebCore::SummaryContentElement::SummaryContentElement):
        * testing/Internals.cpp:
        (WebCore::Internals::createShadowContentElement):
        * testing/Internals.h:
        * testing/Internals.idl:

2012-01-12  Zoltan Herczeg  <zherczeg@webkit.org>

        Fix turbulence bug when stitch tiles enabled and rendered in parallel
        https://bugs.webkit.org/show_bug.cgi?id=76042

        Reviewed by Nikolas Zimmermann.

        The width / height / wrap members are used by all threads
        in the same time. The patch makes them local for all threads.

        Fixes the layout fails in svg/dynamic-updates/SVGFETurbulence*

        * platform/graphics/filters/FETurbulence.cpp:
        (WebCore::FETurbulence::noise2D):
        (WebCore::Noise::if):
        (WebCore::FETurbulence::calculateTurbulenceValueForPoint):
        (WebCore::FETurbulence::fillRegion):
        * platform/graphics/filters/FETurbulence.h:
        (WebCore::FETurbulence::PaintingData::PaintingData):
        (WebCore::FETurbulence::StitchData::StitchData):

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

        Web Inspector: performance: restore 'log 300 messages into console' test.
        https://bugs.webkit.org/show_bug.cgi?id=76170

        It was removed in order of transition from layout tests to perf tests.

        Reviewed by Yury Semikhatsky.

        * inspector/front-end/ConsoleView.js:
        (WebInspector.ConsoleView.prototype._scheduleScrollIntoView.scrollIntoView):
        (WebInspector.ConsoleView.prototype._scheduleScrollIntoView):

2012-01-12  Hans Wennborg  <hans@chromium.org>

        Speech input: Send text to correct element even if focus has changed
        https://bugs.webkit.org/show_bug.cgi?id=76071

        Reviewed by Steve Block.

        Make sure that the text from speech input ends up in the correct
        element even if focus has changed since the user clicked on it.

        Test: fast/speech/change-focus.html

        * html/shadow/TextControlInnerElements.cpp:
        (WebCore::InputFieldSpeechButtonElement::setRecognitionResult):

2012-01-10  Pavel Podivilov  <podivilov@chromium.org>

        Web Inspector: make source urls relative to source map url.
        https://bugs.webkit.org/show_bug.cgi?id=75968

        Reviewed by Yury Semikhatsky.

        * inspector/front-end/CompilerSourceMapping.js:
        (WebInspector.ClosureCompilerSourceMapping):
        (WebInspector.ClosureCompilerSourceMapping.prototype._parseMap):
        (WebInspector.ClosureCompilerSourceMapping.prototype._canonicalizeURL):

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

        Not reviewed. Fix WebKit build after r104803, by setting ScriptCallStack.h role to private.

        * WebCore.xcodeproj/project.pbxproj:

2012-01-12  Shinya Kawanaka  <shinyak@google.com>

        ShadowContentElement should be able to use query.
        https://bugs.webkit.org/show_bug.cgi?id=75302

        Reviewed by Hajime Morita.

        This patch introduces a selector to query elements in ShadowContentElement.
        This can be used instead of ShadowContentElement::shouldInclude in more sophisticated ways.

        Tests: fast/dom/shadow/shadow-contents-select-expected.html
               fast/dom/shadow/shadow-contents-select.html

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.exp.in:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/DOMAllInOne.cpp:
        * dom/SelectorQuery.cpp:
        (WebCore::SelectorDataList::SelectorDataList):
          Extracted from SelectorQueryto share codes with ShadowContentSelectorQuery.
        (WebCore::SelectorDataList::initialize):
        (WebCore::SelectorDataList::matches):
        (WebCore::SelectorDataList::queryAll):
        (WebCore::SelectorDataList::queryFirst):
        (WebCore::SelectorDataList::canUseIdLookup):
        (WebCore::SelectorDataList::execute):
        (WebCore::SelectorQuery::SelectorQuery):
        (WebCore::SelectorQuery::queryAll):
        (WebCore::SelectorQuery::queryFirst):
        * dom/SelectorQuery.h:
        (WebCore::SelectorDataList::size):
        * dom/ShadowContentElement.cpp:
        (WebCore::selectAttr):
        (WebCore::ShadowContentElement::create):
        (WebCore::ShadowContentElement::ShadowContentElement):
        (WebCore::ShadowContentElement::select):
        * dom/ShadowContentElement.h:
        * dom/ShadowContentSelectorQuery.cpp: Added.
        (WebCore::ShadowContentSelectorQuery::ShadowContentSelectorQuery):
        (WebCore::ShadowContentSelectorQuery::matches):
          Returns true if Node is matched by the query.
        * dom/ShadowContentSelectorQuery.h: Copied from Source/WebCore/dom/ShadowContentElement.h.
        * dom/ShadowInclusionSelector.cpp:
        (WebCore::ShadowInclusionSelector::select):
        * dom/ShadowInclusionSelector.h:
        * html/HTMLDetailsElement.cpp:
        (WebCore::summaryQuerySelector):
        (WebCore::DetailsContentElement::DetailsContentElement): Re-implemented using query.
        (WebCore::DetailsSummaryElement::DetailsSummaryElement): ditto.
        * html/HTMLSummaryElement.cpp:
        (WebCore::SummaryContentElement::SummaryContentElement):
        * testing/Internals.cpp:
        (WebCore::Internals::createShadowContentElement):
        * testing/Internals.h:
        * testing/Internals.idl:

2012-01-11  Vsevolod Vlasov  <vsevik@chromium.org>

        Make default console messages line numbers consistent.
        https://bugs.webkit.org/show_bug.cgi?id=74075

        Reviewed by Pavel Feldman.

        Added default values for Console::addMessage sourceURL, lineNumber and
        callStack parameters, moved lineNumber after sourceURL.
        Made virtual method ScriptExecutionContext::addMessage private
        Added default values to ScriptExecutionContext::AddConsoleMessage sourceURL, lineNumber and
        callStack parameters, moved lineNumber after sourceURL.
        Reorder ScriptExecutionContext::logExceptionToConsole parameters, move lineNumber after sourceURL.
        Reordered sourceURL and lineNumber parameters in inspector methods.
        Made all calls to Console::addMessage() pass 0 as lineNumber by default (i.e. when line number is unknown / irrelevant).
        Unset line numbers are not printed to console in QT now.

        * bindings/js/JSCustomXPathNSResolver.cpp:
        (WebCore::JSCustomXPathNSResolver::lookupNamespaceURI):
        * bindings/v8/custom/V8CustomXPathNSResolver.cpp:
        (WebCore::V8CustomXPathNSResolver::lookupNamespaceURI):
        * dom/Document.cpp:
        (WebCore::Document::logExceptionToConsole):
        (WebCore::Document::addMessage):
        * dom/Document.h:
        * dom/ScriptExecutionContext.cpp:
        (WebCore::ScriptExecutionContext::AddConsoleMessageTask::performTask):
        (WebCore::ScriptExecutionContext::reportException):
        (WebCore::ScriptExecutionContext::addConsoleMessage):
        * dom/ScriptExecutionContext.h:
        * dom/UIEvent.cpp:
        (WebCore::UIEvent::warnDeprecatedLayerXYUsage):
        * dom/ViewportArguments.cpp:
        (WebCore::reportViewportWarning):
        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::validateInteractively):
        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::printWarningToConsole):
        * inspector/ConsoleMessage.cpp:
        (WebCore::ConsoleMessage::ConsoleMessage):
        * inspector/ConsoleMessage.h:
        * inspector/InspectorConsoleAgent.cpp:
        (WebCore::InspectorConsoleAgent::enable):
        (WebCore::InspectorConsoleAgent::addMessageToConsole):
        (WebCore::InspectorConsoleAgent::stopTiming):
        (WebCore::InspectorConsoleAgent::count):
        (WebCore::InspectorConsoleAgent::resourceRetrievedByXMLHttpRequest):
        * inspector/InspectorConsoleAgent.h:
        * inspector/InspectorConsoleInstrumentation.h:
        (WebCore::InspectorInstrumentation::addMessageToConsole):
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::addMessageToConsoleImpl):
        * inspector/InspectorInstrumentation.h:
        * inspector/InspectorProfilerAgent.cpp:
        (WebCore::InspectorProfilerAgent::addProfileFinishedMessageToConsole):
        (WebCore::InspectorProfilerAgent::addStartProfilingMessageToConsole):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::checkIfDisplayInsecureContent):
        (WebCore::FrameLoader::checkIfRunInsecureContent):
        (WebCore::FrameLoader::reportLocalLoadFailed):
        (WebCore::FrameLoader::shouldAllowNavigation):
        * loader/MainResourceLoader.cpp:
        (WebCore::MainResourceLoader::didReceiveResponse):
        * loader/appcache/ApplicationCacheGroup.cpp:
        (WebCore::ApplicationCacheGroup::didReceiveResponse):
        (WebCore::ApplicationCacheGroup::didFinishLoading):
        (WebCore::ApplicationCacheGroup::didFail):
        (WebCore::ApplicationCacheGroup::didReceiveManifestResponse):
        (WebCore::ApplicationCacheGroup::didFinishLoadingManifest):
        (WebCore::ApplicationCacheGroup::checkIfLoadIsComplete):
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::printAccessDeniedMessage):
        * page/Console.cpp:
        (WebCore::Console::addMessage):
        (WebCore::Console::groupEnd):
        * page/Console.h:
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::postMessageTimerFired):
        (WebCore::DOMWindow::printErrorMessage):
        * storage/AbstractDatabase.cpp:
        (WebCore::AbstractDatabase::logErrorMessage):
        * svg/SVGDocumentExtensions.cpp:
        (WebCore::reportMessage):
        * websockets/WebSocket.cpp:
        (WebCore::WebSocket::connect):
        * websockets/WebSocketChannel.cpp:
        (WebCore::WebSocketChannel::fail):
        (WebCore::WebSocketChannel::didFailSocketStream):
        * workers/DefaultSharedWorkerRepository.cpp:
        (WebCore::postConsoleMessageTask):
        (WebCore::SharedWorkerProxy::postConsoleMessageToWorkerObject):
        * workers/SharedWorkerContext.cpp:
        (WebCore::SharedWorkerContext::logExceptionToConsole):
        * workers/SharedWorkerContext.h:
        * workers/WorkerContext.cpp:
        (WebCore::WorkerContext::logExceptionToConsole):
        (WebCore::WorkerContext::addMessage):
        (WebCore::WorkerContext::addMessageToWorkerConsole):
        * workers/WorkerContext.h:
        * workers/WorkerMessagingProxy.cpp:
        (WebCore::postConsoleMessageTask):
        * xml/XSLTProcessorLibxslt.cpp:
        (WebCore::XSLTProcessor::parseErrorFunc):
        * xml/XSLTProcessorQt.cpp:
        (WebCore::XSLTMessageHandler::handleMessage):

2012-01-12  Mihnea Ovidenie  <mihnea@adobe.com>

        Add RenderStyle::isPositioned() helper method
        https://bugs.webkit.org/show_bug.cgi?id=75959

        Reviewed by Tony Chang.

        No new tests since this is refactoring of existing code.
        Replace (style()->position() == AbsolutePosition || style()->position() == FixedPosition) 
        with (style()->isPositioned()).
        Replace (style()->position() != AbsolutePosition && style()->position() != FixedPosition) 
        with (!style()->isPositioned()).

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::updateBoxModelInfoFromStyle):
        (WebCore::RenderBox::offsetFromContainer):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::mapAbsoluteToLocalPoint):
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::computeRectForRepaint):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::markContainingBlocksForLayout):
        (WebCore::RenderObject::setPreferredLogicalWidthsDirty):
        (WebCore::RenderObject::invalidateContainerPreferredLogicalWidths):
        * rendering/style/RenderStyle.h:
        (WebCore::RenderStyleBitfields::isPositioned):

2012-01-11  KwangHyuk Kim  <hyuki.kim@samsung.com>

        [EFL] Rename parameter and variable name 'r' to 'rect' in IntRectEfl.cpp.
        https://bugs.webkit.org/show_bug.cgi?id=76140

        Reviewed by Andreas Kling.

        No new tests : Just for change of parameter and variable name.

        * platform/graphics/efl/IntRectEfl.cpp:
        (WebCore::IntRect::IntRect):
        (WebCore::IntRect::operator Eina_Rectangle):

2012-01-11  Shinya Kawanaka  <shinyak@google.com>

        QuerySelector should not have side effect.
        https://bugs.webkit.org/show_bug.cgi?id=75298

        Reviewed by Antti Koivisto.

        Since SelectorChecker is not collecting-rules-only mode, it may set some flags in render styles
        if some pseudo types (e.g. first-of-type) are used.

        No new tests. Covered by existing tests.

        * dom/SelectorQuery.cpp:
        (WebCore::SelectorQuery::SelectorQuery):
          Made collecting rules only.

2012-01-11  Dan Bernstein  <mitz@apple.com>

        <rdar://problem/10679035> Implement font-variant-ligatures: {no-}common-ligatures
        https://bugs.webkit.org/show_bug.cgi?id=76103

        Reviewed by Sam Weinig.

        Tests: fast/css/parsing-font-variant-ligatures.html
               fast/text/font-variant-ligatures-expected.html
               fast/text/font-variant-ligatures.html

        Added support for all font-variant-ligatures values in the style system and in
        FontDescription, and made the {no-}common-ligatures value keywords control basic ligatures.
        The {no-}{discretionary,historical}-ligatures keywords have no effect on rendering at this
        time.

        font-variant-ligatures was not made part of the font shorthand property.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue): Added code to handle
        font-variant-ligatures.
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue): Added code to handle font-variant-ligatures.
        (WebCore::CSSParser::parseFontVariantLigatures): Added. Parses font-variant-ligatures.
        * css/CSSParser.h:
        * css/CSSProperty.cpp:
        (WebCore::CSSProperty::isInheritedProperty): Added font-variant-ligatures to the set of
        inherited properties.
        * css/CSSPropertyNames.in: Added -webkit-font-variant-ligatures.
        * css/CSSStyleApplyProperty.cpp:
        (WebCore::ApplyPropertyFontVariantLigatures::applyInheritValue): Added. Copies
        {common,discretionary,historical}LigaturesState from the parent style font description.
        (WebCore::ApplyPropertyFontVariantLigatures::applyInitialValue): Added. Sets
        {common,discretionary,historical}LigaturesState to normal.
        (WebCore::ApplyPropertyFontVariantLigatures::applyValue): Added.
        (WebCore::ApplyPropertyFontVariantLigatures::createHandler): Added.
        (WebCore::CSSStyleApplyProperty::CSSStyleApplyProperty): Added a handler for
        font-variant-ligatures.
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyDeclaration): Updated for the number of properties that
        affect the font.
        (WebCore::CSSStyleSelector::applyProperty): Added CSSPropertyWebkitFontVariantLigatures to
        the switch statement, which needs to list all values in SVG-disabled builds.
        * css/CSSValueKeywords.in: Added the value keywords
        {no-}{common,discretionary,historical}-ligatures.
        * platform/graphics/Font.h:
        (WebCore::Font::typesettingFeatures): Changed to enable ligatures if common ligatures are
        enabled in the font description, disable them if they are disabled, and leave them to the
        default (determined by the text-rendering property) if they are in the normal state.
        * platform/graphics/FontDescription.h:
        (WebCore::FontDescription::FontDescription): Added initializers.
        (WebCore::FontDescription::commonLigaturesState): Added this accessor.
        (WebCore::FontDescription::discretionaryLigaturesState): Ditto.
        (WebCore::FontDescription::historicalLigaturesState): Ditto.
        (WebCore::FontDescription::setCommonLigaturesState): Ditto.
        (WebCore::FontDescription::setDiscretionaryLigaturesState): Ditto.
        (WebCore::FontDescription::setHistoricalLigaturesState): Ditto.
        (WebCore::FontDescription::operator==): Updated to compare the ligatures state members.

2012-01-11  Adrienne Walker  <enne@google.com>

        Repaint all graphics layers when their renderer offset changes
        https://bugs.webkit.org/show_bug.cgi?id=75730

        Reviewed by Simon Fraser.

        In RenderLayerBacking, only the main graphics layer gets repainted
        when the offset changes. If the offset on other graphics layers (e.g.
        the foreground layer) changes, they should get repainted as well.

        Test: compositing/geometry/foreground-offset-change.html

        * platform/graphics/GraphicsLayer.cpp:
        (WebCore::GraphicsLayer::setOffsetFromRenderer):
        (WebCore::GraphicsLayer::paintGraphicsLayerContents):
        * platform/graphics/GraphicsLayer.h:
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateGraphicsLayerGeometry):
        (WebCore::RenderLayerBacking::paintContents):

2012-01-11  Scott Violet  <sky@google.com>

        [chromium] TiledLayerChromium drops invalidates that occur during
        LayerTextureUpdater::prepareToUpdate
        https://bugs.webkit.org/show_bug.cgi?id=76067

        Reviewed by James Robinson.

        Test coverage in TiledLayerChromiumTest.

        * platform/graphics/chromium/TiledLayerChromium.cpp:
        (WebCore::TiledLayerChromium::prepareToUpdateTiles):

2012-01-11  Kentaro Hara  <haraken@chromium.org>

        [JSC] Remove redundant arguments from [Supplemental] custom methods
        https://bugs.webkit.org/show_bug.cgi?id=76127

        Reviewed by Adam Barth.

        Since in JSC a callback of custom methods is non-static, we do not need
        to pass a pointer of an implementation object.

        Before (JSTestInterface.cpp):
            JSValue jsTestInterfaceSupplementalStr3(ExecState* exec, JSValue slotBase, ...)
            {
                JSTestInterface* castedThis = static_cast<JSTestInterface*>(asObject(slotBase));
                TestInterface* impl = static_cast<TestInterface*>(castedThis->impl());
                return castedThis->supplementalStr3(impl, exec);
            }

        After (JSTestInterface.cpp):
            JSValue jsTestInterfaceSupplementalStr3(ExecState* exec, JSValue slotBase, ...)
            {
                JSTestInterface* castedThis = static_cast<JSTestInterface*>(asObject(slotBase));
                 return castedThis->supplementalStr3(exec);  // JSTestInterface knows 'impl'.
            }

        Tests: bindings/scripts/test/TestInterface.idl
               http/tests/websocket/tests/*
               webaudio/*

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateHeader): Previously when we specify [CustomGetter, CustomSetter], the header for
        the custom setter was not generated. This patch fixes the bug.
        (GenerateImplementation):

        * bindings/js/JSDOMWindowWebAudioCustom.cpp: Removed redundant DOMWindow* from webkitAudioContext().
        (WebCore::JSDOMWindow::webkitAudioContext):
        * bindings/js/JSDOMWindowWebSocketCustom.cpp: Removed redundant DOMWindow* from webSocket().
        (WebCore::JSDOMWindow::webSocket):

        * bindings/scripts/test/JS/JSTestInterface.cpp: Updated the test result.
        (WebCore::jsTestInterfaceSupplementalStr3):
        (WebCore::setJSTestInterfaceSupplementalStr3):
        * bindings/scripts/test/JS/JSTestInterface.h: Ditto.

2012-01-11  Adam Barth  <abarth@webkit.org>

        iframe sandbox doesn't block autofocus (IETC automatic-feature-block-autofocus-form-control)
        https://bugs.webkit.org/show_bug.cgi?id=76120

        Reviewed by Eric Seidel.

        Test: fast/forms/no-autofocus-in-sandbox.html

        * html/HTMLFormControlElement.cpp:
        (WebCore::shouldAutofocus):
            - The HTML5 spec says that we shouldn't autofocus elements when the
              automatic features are sandboxed.

2012-01-11  Beth Dakin  <bdakin@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=75904
        WebKit 1: Scrollbar uiStateTransitionProgress requires tracking the mouse all 
        the time
        -and corresponding-
        <rdar://problem/10498816>

        Reviewed by Darin Adler.

        This patch gets rid of the optional parameter called onlyUpdateScrollbars for 
        mouseMoved() and instead moves that functionality into its own function 
        called passMouseMovedEventToScrollbars().
        * WebCore.exp.in:
        * page/EventHandler.cpp:
        (WebCore::EventHandler::mouseMoved):
        (WebCore::EventHandler::passMouseMovedEventToScrollbars):
        * page/EventHandler.h:
        * page/mac/EventHandlerMac.mm:
        (WebCore::EventHandler::passMouseMovedEventToScrollbars):

2012-01-11  Joshua Bell  <jsbell@chromium.org>

        IndexedDB: Methods should throw TRANSACTION_INACTIVE_ERR when transaction is completed/aborted
        https://bugs.webkit.org/show_bug.cgi?id=76108

        Updated IDBDatabaseException error codes to match spec (the pre-DOM4 version),
        including updated description strings, and changed relevant store and index 
        methods to raise the expected exception type now that it is detailed in the spec.

        Reviewed by Tony Chang.

        Tests: storage/indexeddb/transaction-basics.html

        * storage/IDBCursorBackendImpl.cpp:
        (WebCore::IDBCursorBackendImpl::continueFunction):
        (WebCore::IDBCursorBackendImpl::prefetchContinue):
        * storage/IDBDatabaseException.cpp:
        * storage/IDBDatabaseException.h:
        * storage/IDBDatabaseException.idl:
        * storage/IDBIndexBackendImpl.cpp:
        (WebCore::IDBIndexBackendImpl::openCursor):
        (WebCore::IDBIndexBackendImpl::openKeyCursor):
        (WebCore::IDBIndexBackendImpl::count):
        (WebCore::IDBIndexBackendImpl::get):
        (WebCore::IDBIndexBackendImpl::getKey):
        * storage/IDBObjectStoreBackendImpl.cpp:
        (WebCore::IDBObjectStoreBackendImpl::get):
        (WebCore::IDBObjectStoreBackendImpl::put):
        (WebCore::IDBObjectStoreBackendImpl::deleteFunction):
        (WebCore::IDBObjectStoreBackendImpl::clear):
        (WebCore::IDBObjectStoreBackendImpl::createIndex):
        (WebCore::IDBObjectStoreBackendImpl::deleteIndex):
        (WebCore::IDBObjectStoreBackendImpl::openCursor):
        (WebCore::IDBObjectStoreBackendImpl::count):

2012-01-11  Kentaro Hara  <haraken@chromium.org>

        Implement the [Supplemental] IDL for custom methods
        https://bugs.webkit.org/show_bug.cgi?id=76036

        Reviewed by Adam Barth.

        We have implemented the [Supplemental] IDL for non-custom methods in bug 75944.
        This patch implements it for custom methods. This patch modifies only CodeGeneratorV8.pm,
        since CodeGeneratorJS.pm requires no change and other code generators
        do not support custom methods.

        Test: bindings/scripts/test/TestSupplemental.idl

        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateHeader):

        * bindings/scripts/test/TestSupplemental.idl: Added a custom method with the [Supplemental] IDL.

        * bindings/scripts/test/JS/JSTestInterface.cpp: Updated the test result.
        (WebCore::jsTestInterfacePrototypeFunctionSupplementalMethod3):
        * bindings/scripts/test/JS/JSTestInterface.h: Ditto.
        * bindings/scripts/test/ObjC/DOMTestInterface.h: Ditto.
        * bindings/scripts/test/ObjC/DOMTestInterface.mm: Ditto.
        (-[DOMTestInterface supplementalMethod3]):
        * bindings/scripts/test/V8/V8TestInterface.cpp: Ditto.

2011-12-21  Shaw Andy  <andy.shaw@digia.com>

        Fix build issue on Windows when Qt is configured with -ltcg
        https://bugs.webkit.org/show_bug.cgi?id=75003

        Rubber-stamped by Simon Hausmann.

        * WebCore.pri:

2012-01-09  Avi Drissman  <avi@chromium.org>

        https://bugs.webkit.org/show_bug.cgi?id=75860
        [Chromium Mac] no background is drawn for input elements

        Reviewed by Eric Seidel.

        Reverts r104240 for Chromium. Unfortunately the code that uses Cocoa
        API misbehaves when built with the 10.5 SDK, so we use SPI. For now.

        * rendering/RenderThemeChromiumMac.h:
        * rendering/RenderThemeChromiumMac.mm:
        (WebCore::RenderThemeChromiumMac::paintTextField):

2012-01-11  Adam Barth  <abarth@webkit.org>

        iframe sandbox doesn't block videos from autoplaying (IETC automatic-feature-block-autoplay-video)
        https://bugs.webkit.org/show_bug.cgi?id=76111

        Reviewed by Eric Seidel.

        Test: media/no-auto-play-in-sandbox.html

        * dom/SecurityContext.h:
            - Add a flag for sandboxing automatic features, per the HTML5 spec.
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::setReadyState):
            - Implement requirement in the HTML5 spec to not autoplay media
              when automatic features are sandboxed.

2012-01-11  Nate Chapin  <japhet@chromium.org>

        SubresourceLoader cleanup post r100311.
        1. Simplify matching incrementRequestCount()/decrementRequestCount() calls.
        2. Remove CachedImage custom code from SubresourceLoader.
        3. Add a bunch of ASSERTs.
        4. Remove the multipart-only call to didReceiveData() from didReceiveResponse(),
           since didReceiveData() would get called immediately after anyway.
        https://bugs.webkit.org/show_bug.cgi?id=75887

        Reviewed by Adam Barth.

        No new tests, refactor only.

        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::didReceiveResponse): Remove multipart special case, handle it in didReceiveData().
        (WebCore::SubresourceLoader::didReceiveData): Handle multipart state here, since we will receive only one
             didReceiveData() call per multipart segment, but no didFinishLoading() call.
        * loader/SubresourceLoader.h: Add a RequestCountTracker subclass to reduce complexity of ensuring we don't
            decrement request count twice on CachedResourceLoader.
        * loader/cache/CachedImage.cpp:
        (WebCore::CachedImage::setResponse): Move CachedImage::clear() call out of SubresourceLoader, since it's
            kind of a layering violation as is.
        * loader/cache/CachedImage.h:
        * loader/cache/CachedResource.cpp:

2012-01-11  Joshua Bell  <jsbell@chromium.org>

        IndexedDB: Version change transaction should abort if constraints fail during createIndex
        https://bugs.webkit.org/show_bug.cgi?id=76094

        Reviewed by Tony Chang.

        Test: storage/indexeddb/index-population.html

        * storage/IDBIndexBackendImpl.cpp:
        (WebCore::IDBIndexBackendImpl::addingKeyAllowed):
        * storage/IDBIndexBackendImpl.h:
        * storage/IDBLevelDBBackingStore.cpp:
        (WebCore::IDBLevelDBBackingStore::forEachObjectStoreRecord):
        * storage/IDBObjectStoreBackendImpl.cpp:

2012-01-11  Greg Billock  <gbillock@google.com>

        Switch web intents to use supplemental IDL for DOMWindow
        https://bugs.webkit.org/show_bug.cgi?id=76092

        Reviewed by Adam Barth.

        * Modules/intents/DOMWindowIntents.idl: Added.
        * WebCore.gypi:
        * page/DOMWindow.idl:

2012-01-11  Kent Tamura  <tkent@chromium.org>

        Rename HTMLInputElement::setDefaultName to setInitialName.
        https://bugs.webkit.org/show_bug.cgi?id=76039

        Reviewed by Darin Adler.

        Rename setDefaultName to setInitialName, make it protected, and add two
        assertions.

        This change should not change any behavior.

        Test: fast/forms/isindex-name.html

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::setInitialName):
        - Renamed from setDefaultName.
        - Add assertions.
        * html/HTMLInputElement.h:
        Rename setDefaultName to setInitialName, and move it to protected.
        * html/HTMLIsIndexElement.cpp:
        (WebCore::HTMLIsIndexElement::HTMLIsIndexElement):
        Update a setDefaultName callsite.
        (WebCore::HTMLIsIndexElement::parseMappedAttribute):
        A style fix.

2012-01-11  Adam Treat  <atreat@rim.com>

        https://bugs.webkit.org/show_bug.cgi?id=76088
        The common case of content type = text/plain is not optimized and the plugin database is initialized instead

        In the dom/DOMImplementation.cpp file you can find the comment that text/plain is
        optimized so that the plugin database is not loaded. Unfortunately, this has been
        regressed since the patch for http://bugs.webkit.org/show_bug.cgi?id=16815 which
        refactored a bunch of the plugin code.  Now, the plugin database is initialized
        before we handle text/plain.  This line in DOMImplementation.cpp triggers
        the plugin initialization:

                pluginData = frame->page()->pluginData();

        The case of image types != PDF and the case of HTML5 video content type are also
        not optimized to be handled before plugin initialization.

        The solution is to refactor so all of these content types are handled before
        we initialize the plugin database.

        Reviewed by Adam Treat.

        * dom/DOMImplementation.cpp:
        (WebCore::DOMImplementation::createDocument):

2012-01-11  Alexandre Elias  <aelias@google.com>

        [chromium] Make Skia canvas opaque for root layer tiles
        https://bugs.webkit.org/show_bug.cgi?id=75939

        Reviewed by James Robinson.

        Skia has extra optimizations if a bitmap has the "opaque" flag -- in
        particular, it doesn't do an unnecessary memset at creation time.
        Pass down the LayerChromium's opaque flag to Skia.

        * platform/graphics/chromium/BitmapCanvasLayerTextureUpdater.cpp:
        (WebCore::BitmapCanvasLayerTextureUpdater::setIsNonCompositedContent):
        * platform/graphics/chromium/BitmapCanvasLayerTextureUpdater.h:
        * platform/graphics/chromium/ContentLayerChromium.cpp:
        (WebCore::ContentLayerChromium::createTextureUpdater):
        * platform/graphics/chromium/LayerTextureUpdater.h:
        (WebCore::LayerTextureUpdater::setIsNonCompositedContent):
        * platform/graphics/chromium/PlatformCanvas.cpp:
        (WebCore::PlatformCanvas::PlatformCanvas):
        (WebCore::PlatformCanvas::resize):
        * platform/graphics/chromium/PlatformCanvas.h:
        (WebCore::PlatformCanvas::setOpaque):
        (WebCore::PlatformCanvas::opaque):
        * platform/graphics/chromium/TiledLayerChromium.cpp:
        (WebCore::TiledLayerChromium::setIsNonCompositedContent):

2012-01-11  Greg Billock  <gbillock@google.com>

        [Coverity] Address some uninit constructor issues in WebCore/dom
        https://bugs.webkit.org/show_bug.cgi?id=74977

        Reviewed by Ryosuke Niwa.

        * css/SelectorChecker.h:
        (WebCore::SelectorChecker::ParentStackFrame::ParentStackFrame):
        * dom/DeviceMotionData.cpp:
        (WebCore::DeviceMotionData::DeviceMotionData):
        * dom/DeviceOrientation.cpp:
        (WebCore::DeviceOrientation::DeviceOrientation):

2012-01-11  Kenneth Russell  <kbr@google.com>

        [chromium] Color profiles are incorrect for images without premultiplied alpha
        https://bugs.webkit.org/show_bug.cgi?id=75999

        Reviewed by Stephen White.

        Don't apply the color profile if the user has requested separate alpha.

        Test: fast/canvas/webgl/texture-color-profile.html

        * platform/image-decoders/skia/ImageDecoderSkia.cpp:
        (WebCore::ImageFrame::setStatus):

2012-01-11  No'am Rosenthal  <noam.rosenthal@nokia.com>

        [Qt][Texmap] LayoutTests/compositing/masks/masked-ancestor does not render correctly.
        https://bugs.webkit.org/show_bug.cgi?id=75910

        Reviewed by Simon Hausmann.

        Handle the mask surface correctly when drawing in two passes. Also, improve the readability
        of the code that decides whether to draw in two passes.

        LayoutTests/compositing/masks/masked-ancestor.html tests this.

        * platform/graphics/texmap/TextureMapperNode.cpp:
        (WebCore::TextureMapperNode::computeAllTransforms):
        (WebCore::TextureMapperNode::hasMoreThanOneTile):
        (WebCore::TextureMapperNode::paintRecursive):
        * platform/graphics/texmap/TextureMapperNode.h:

2012-01-11  Dmitry Titov  <dimich@chromium.org>

        Add new CSS enum value to a switch() in CSSStyleSelector::applyProperty() to fix compile error.
        https://bugs.webkit.org/show_bug.cgi?id=76081

        Reviewed by David Levin.

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

2012-01-11  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darin Adler. Prepared by Sheriff Bot. Rolling out r94902.
        http://trac.webkit.org/changeset/94902
        https://bugs.webkit.org/show_bug.cgi?id=75905

        Disagrees with general direction for WebKit, and makes
        refactoring harder (Requested by ap on #webkit).

        * loader/DocumentWriter.cpp:
        (WebCore::DocumentWriter::deprecatedFrameEncoding):
        * loader/DocumentWriter.h:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::addExtraFieldsToRequest):
        * platform/network/ResourceRequestBase.cpp:
        (WebCore::ResourceRequestBase::adopt):
        (WebCore::ResourceRequestBase::copyData):
        (WebCore::ResourceRequestBase::setResponseContentDispositionEncodingFallbackArray):
        * platform/network/ResourceRequestBase.h:

2012-01-11  Eli Fidler  <efidler@rim.com>

        Fix OpenGL dependency in CMake build system
        https://bugs.webkit.org/show_bug.cgi?id=73559

        Reviewed by Daniel Bates.

        * CMakeLists.txt:
        * PlatformEfl.cmake:

2012-01-11  Caio Marcelo de Oliveira Filho  <caio.oliveira@openbossa.org>

        Use HashMap<OwnPtr> for RenderBoxRegionInfo map in RenderRegion
        https://bugs.webkit.org/show_bug.cgi?id=75348

        Reviewed by Darin Adler.

        * rendering/RenderFlowThread.cpp:
        (WebCore::RenderFlowThread::logicalWidthChangedInRegions): use OwnPtr.
        * rendering/RenderRegion.cpp:
        (WebCore::RenderRegion::setRenderBoxRegionInfo): use HashMap::add() instead of
        get() potentially followed by set().
        (WebCore::RenderRegion::takeRenderBoxRegionInfo): change to return PassOwnPtr.
        (WebCore::RenderRegion::removeRenderBoxRegionInfo):
        (WebCore::RenderRegion::deleteAllRenderBoxRegionInfo):
        * rendering/RenderRegion.h:

2012-01-11  Joel Webber  <jgw@google.com>

        Implement setCurrentTime() and pauseAnimations() on SVGSVGElement
        https://bugs.webkit.org/show_bug.cgi?id=12073

        Reviewed by Nikolas Zimmermann.

        Adds the ability to reset an SVGSMILElement internally. SVGSMILElements are no longer removed
        from their containers when they become inactive, because they sometimes have to be reactivated
        when the container's current time is changed.

        Test: svg/animations/animate-setcurrenttime.html

        * svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::setCurrentTime):
        * svg/animation/SMILTimeContainer.cpp:
        (WebCore::SMILTimeContainer::SMILTimeContainer):
        (WebCore::SMILTimeContainer::begin):
        (WebCore::SMILTimeContainer::pause):
        (WebCore::SMILTimeContainer::setElapsed):
        (WebCore::SMILTimeContainer::updateAnimations):
        * svg/animation/SMILTimeContainer.h:
        * svg/animation/SVGSMILElement.cpp:
        (WebCore::SVGSMILElement::reset):
        * svg/animation/SVGSMILElement.h:

2012-01-11  Peter Rybin  <peter.rybin@gmail.com>

        Web Inspector: CodeGeneratorInspector.py: fix codestyle of generated enums
        https://bugs.webkit.org/show_bug.cgi?id=76062

        Reviewed by Yury Semikhatsky.

        This only changes how constants are named in generated .h file.

        * inspector/CodeGeneratorInspector.py:

2012-01-11  Pavel Feldman  <pfeldman@google.com>

        Web Inspector: "undefined" instead of error message in the SourceFrame.
        https://bugs.webkit.org/show_bug.cgi?id=76060

        Reviewed by Yury Semikhatsky.

        * inspector/front-end/ConsoleMessage.js:
        (WebInspector.ConsoleMessageImpl.prototype._formatMessage):
        (WebInspector.ConsoleMessageImpl.prototype.get message):

2012-01-11  Pavel Feldman  <pfeldman@google.com>

        Web Inspector: make setOuterHTML use new DOMEditor, cover it with tests.
        https://bugs.webkit.org/show_bug.cgi?id=76056

        Reviewed by Yury Semikhatsky.

        Test: inspector/elements/set-outer-html.html

        * inspector/DOMEditor.cpp:
        (WebCore::DOMEditor::Digest::Digest):
        (WebCore::DOMEditor::patchDocument):
        (WebCore::DOMEditor::patchNode):
        (WebCore::DOMEditor::innerPatchHTMLElement):
        (WebCore::DOMEditor::innerPatchNode):
        (WebCore::DOMEditor::diff):
        (WebCore::DOMEditor::innerPatchChildren):
        (WebCore::DOMEditor::createDigest):
        * inspector/DOMEditor.h:
        * inspector/Inspector-0.1.json:
        * inspector/Inspector.json:
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::setOuterHTML):
        * inspector/InspectorDOMAgent.h:
        * inspector/front-end/DOMAgent.js:
        (WebInspector.DOMNode):
        (WebInspector.DOMNode.prototype._renumber):
        * inspector/front-end/ElementsTreeOutline.js:
        ():

2012-01-10  Alexander Pavlov  <apavlov@chromium.org>

        Web Inspector: introduce "source" column in the CSS profiler.
        https://bugs.webkit.org/show_bug.cgi?id=75378

        Reviewed by Pavel Feldman.

        Rules are no longer merged by their selectors but are shown one per profile entry, with a link to
        their selector in the source whenever the latter is available.

        * inspector/Inspector.json:
        * inspector/InspectorCSSAgent.cpp:
        (WebCore::RuleMatchingStats::RuleMatchingStats):
        (WebCore::SelectorProfile::makeKey):
        (WebCore::SelectorProfile::startSelector):
        (WebCore::SelectorProfile::commitSelector):
        (WebCore::SelectorProfile::commitSelectorTime):
        (WebCore::SelectorProfile::toInspectorObject):
        (WebCore::InspectorCSSAgent::willMatchRule):
        (WebCore::InspectorCSSAgent::willProcessRule):
        (WebCore::InspectorCSSAgent::buildArrayForRuleList):
        * inspector/InspectorStyleSheet.cpp:
        (WebCore::InspectorStyleSheet::styleSheetURL):
        (WebCore::InspectorStyleSheet::finalURL):
        (WebCore::InspectorStyleSheet::setRuleSelector):
        * inspector/InspectorStyleSheet.h:
        * inspector/front-end/CSSSelectorProfileView.js:
        (WebInspector.CSSSelectorDataGridNode.prototype.get rawData):
        (WebInspector.CSSSelectorDataGridNode.prototype.createCell):
        (WebInspector.CSSSelectorProfileView):
        (WebInspector.CSSSelectorProfileView.prototype._createProfileNodes):
        (WebInspector.CSSSelectorProfileView.prototype._sortProfile.sourceComparator):
        (WebInspector.CSSSelectorProfileView.prototype._sortProfile):
        * inspector/front-end/ProfilesPanel.js:
        (WebInspector.ProfilesPanel.prototype.sidebarResized):
        * inspector/front-end/dataGrid.css:
        (.data-grid:focus tr.selected a):

2012-01-11  Peter Rybin  <peter.rybin@gmail.com>

        Web Inspector: CodeGeneratorInspector.py: generate enum types.
        https://bugs.webkit.org/show_bug.cgi?id=74954

        Reviewed by Yury Semikhatsky.

        Internal map of string contants is created. C enums are created for
        each JSON enum.

        * inspector/CodeGeneratorInspector.py:
        (EnumConstants.add_constant):
        (EnumConstants):
        (EnumConstants.get_enum_constant_code):
        (TypeBindings.create_type_declaration_.EnumBinding.get_code_generator.CodeGenerator.generate_type_builder):
        (TypeBindings.create_type_declaration_.EnumBinding.get_in_c_type_text):
        (TypeBindings.create_type_declaration_.EnumBinding.get_setter_value_expression_pattern):
        (TypeBindings.create_type_declaration_.PlainString.reduce_to_raw_type):
        (TypeBindings.create_type_declaration_.PlainString.get_setter_value_expression_pattern):
        (get_in_c_type_text):
        (get_setter_value_expression_pattern):
        (PlainObjectBinding.get_in_c_type_text):
        (PlainObjectBinding.get_setter_value_expression_pattern):
        (RawTypesBinding.get_in_c_type_text):
        (RawTypesBinding.get_setter_value_expression_pattern):
        (get_annotated_type_text):
        (MethodGenerateModes.get_modes):
        (MethodGenerateModes.StrictParameterMode.get_c_param_type_text):
        (MethodGenerateModes.StrictParameterMode):
        (MethodGenerateModes.StrictParameterMode.get_setter_value_expression):
        (MethodGenerateModes.RawParameterMode.get_c_param_type_text):
        (MethodGenerateModes.RawParameterMode):
        (MethodGenerateModes.RawParameterMode.get_setter_value_expression):
        (MethodGenerateModes.CombinedMode.get_c_param_type_text):
        (MethodGenerateModes):
        (MethodGenerateModes.CombinedMode):
        (MethodGenerateModes.CombinedMode.get_setter_value_expression):

2012-01-11  Caio Marcelo de Oliveira Filho  <caio.oliveira@openbossa.org>

        Avoid separate heap allocation for each RenderRegionRange in RenderFlowThread
        https://bugs.webkit.org/show_bug.cgi?id=75908

        Reviewed by Darin Adler.

        There's no benefit in explicit allocating RenderRegionRange in the heap. So this
        patch changes the RenderRegionRangeMap to use the value type directly instead of
        the pointer.

        * rendering/RenderFlowThread.cpp:
        (WebCore::RenderFlowThread::removeRegionFromThread):
        (WebCore::RenderFlowThread::layout):
        (WebCore::RenderFlowThread::removeRenderBoxRegionInfo):
        (WebCore::RenderFlowThread::setRegionRangeForBox):
        (WebCore::RenderFlowThread::getRegionRangeForBox):
        * rendering/RenderFlowThread.h: add default constructor to act as emptyValue()
        for HashMap.

2012-01-09  Alexandru Chiculita  <achicu@adobe.com>

        [CSS Shaders] Move CustomFilterOperation to the platform layer
        https://bugs.webkit.org/show_bug.cgi?id=74652

        Reviewed by Chris Marrin.

        FilterOperations are now part of the platform code and cannot reference style classes directly, but
        CustomFilterOperation requires to link to the CachedShader for the vertex and the fragment shader.
        
        The fix is to introduce another object that will actually keep a link to the cached resources, so in this patch 
        I'm adding a new class called CustomFilterProgram that will sit in the
        platform/graphics/filters directory and will be referenced from CustomFilterOperation.

        CustomFilterProgram is the base class of StyleCustomFilterProgram that is created from 
        CSSStyleSelector when a new CustomFilterOperation is created. StyleCustomFilterProgram is responsible
        with loading and keeping references to the StyleCachedShaders and the CachedShaders.

        More patches will follow with optimizations about reusing 3D graphics contexts and compiled shaders.

        Tests: css3/filters/custom-filter-shader-cache.html
               css3/filters/missing-custom-filter-shader.html

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::valueForFilter):
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::loadPendingShaders):
        (WebCore::CSSStyleSelector::createCustomFilterOperation):
            Updated to use the StyleCustomFilterProgram instead of the CustomFilterOperation.
        
        * platform/graphics/filters/CustomFilterOperation.h: Renamed from Source/WebCore/rendering/style/CustomFilterOperation.h.
        (WebCore::CustomFilterOperation::create):
            Accepts a CustomFilterProgram instead of vertex and fragment CachedShaders.
            
        (WebCore::CustomFilterOperation::program): Returns the CustomFilterProgram.
        
        (WebCore::CustomFilterOperation::CustomFilterOperation):
            Accepts a CustomFilterProgram instead of vertex and fragment CachedShaders.
            
        * platform/graphics/filters/CustomFilterProgram.cpp: Added.
        (WebCore::CustomFilterProgram::CustomFilterProgram):
        (WebCore::CustomFilterProgram::~CustomFilterProgram):
        (WebCore::CustomFilterProgram::addClient):
        (WebCore::CustomFilterProgram::removeClient):
        (WebCore::CustomFilterProgram::notifyClients):
        (WebCore::CustomFilterProgram::createShaderWithContext):
        * platform/graphics/filters/CustomFilterProgram.h: Added.
        * platform/graphics/filters/CustomFilterProgramClient.h: Added.
        (WebCore::CustomFilterProgramClient::~CustomFilterProgramClient):
        
        * platform/graphics/filters/FECustomFilter.cpp:
            FECustomFilter will not use strings anymore. It will just get a reference to the CustomFilterProgram.
        
        (WebCore::FECustomFilter::FECustomFilter):
        (WebCore::FECustomFilter::create):
        (WebCore::FECustomFilter::initializeContext):
            Using the CustomFilterProgram to generate the CustomFilterShader instance. A better name for CustomFilterShader
            would be CustomFilterCompiledProgram, but I would prefer to make that change in a different patch.
        
        * platform/graphics/filters/FECustomFilter.h:
        * rendering/FilterEffectRenderer.cpp:
        (WebCore::FilterEffectRenderer::~FilterEffectRenderer):
        (WebCore::FilterEffectRenderer::build):
        (WebCore::FilterEffectRenderer::notifyCustomFilterProgramLoaded):
        (WebCore::FilterEffectRenderer::removeCustomFilterClients):
        * rendering/FilterEffectRenderer.h:
        * rendering/style/StyleCustomFilterProgram.h: Added.
        (WebCore::StyleCustomFilterProgram::create):
        (WebCore::StyleCustomFilterProgram::setVertexShader):
        (WebCore::StyleCustomFilterProgram::vertexShader):
        (WebCore::StyleCustomFilterProgram::setFragmentShader):
        (WebCore::StyleCustomFilterProgram::fragmentShader):
        (WebCore::StyleCustomFilterProgram::vertexShaderString):
        (WebCore::StyleCustomFilterProgram::fragmentShaderString):
        (WebCore::StyleCustomFilterProgram::isLoaded):
        (WebCore::StyleCustomFilterProgram::willHaveClients):
        (WebCore::StyleCustomFilterProgram::didRemoveLastClient):
        (WebCore::StyleCustomFilterProgram::notifyFinished):
        (WebCore::StyleCustomFilterProgram::StyleCustomFilterProgram):

2012-01-11  Alexandru Chiculita  <achicu@adobe.com>

        CSS Filters: apply the filters in RenderLayerBacking::paintIntoLayer when filters cannot be composited in hardware
        https://bugs.webkit.org/show_bug.cgi?id=75842

        Reviewed by Simon Fraser.

        RenderLayers have two possible states: composited or not. When composited the RenderLayerBacking::paintIntoLayer is used
        to render the result inside the graphics context of the GraphicsLayer. When not composited the RenderLayer::paintLayer method will draw
        the result in the graphics context of the parent layer. 

        Because a recent patch forced creation of composited layers for filters, this patch makes RenderLayerBacking::paintIntoLayer aware
        that it might need to apply the filters when the composition engine failed to apply them in platform code.

        No new tests needed, I've just updated some of the old tests to force disable the accelerated composition
        so that we can still test software painted filters.

        * platform/graphics/GraphicsLayer.h:
        (WebCore::GraphicsLayer::clearFilters):
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::setFilters):
            If filtersCanBeComposited() is false we need to reset the CoreAnimation layer to remove any previously applied filter.
        * platform/graphics/ca/mac/PlatformCALayerMac.mm:
        (PlatformCALayer::filtersCanBeComposited):
            Added grayscale, brightness and contrast in the list of not accelerated filters. Otherwise an assert if triggered.
        * rendering/FilterEffectRenderer.cpp:
        (WebCore::FilterEffectRenderer::updateBackingStore):
            Moved this method from RenderLayer::updateFilterBackingStore. It had no dependencies on RenderLayer.
        (WebCore::FilterEffectRendererHelper::beginFilterEffect):
        (WebCore::FilterEffectRendererHelper::applyFilterEffect):
            Consolidated the filter rendering inside this helper class that is now used in both RenderLayerBacking::paintIntoLayer and RenderLayer::paintLayer.
        * rendering/FilterEffectRenderer.h:
        (WebCore::FilterEffectRendererHelper::FilterEffectRendererHelper):
        (WebCore::FilterEffectRendererHelper::haveFilterEffect):
        (WebCore::FilterEffectRendererHelper::hasStartedFilterEffect):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::paintLayer):
            Filters should apply after the opacity is applied, so I moved this down to paintLayerContents.
        (WebCore::RenderLayer::paintLayerContents):
        * rendering/RenderLayer.h:
        (WebCore::RenderLayer::filter):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::paintIntoLayer):
            Added software fallback rendering of the filters on composited RenderLayers.

2012-01-11  Jochen Eisinger  <jochen@chromium.org>

        Move the check for canExecuteScripts out of V8Proxy::retrieve
        https://bugs.webkit.org/show_bug.cgi?id=75533

        Reviewed by Adam Barth.

        This change doesn't move the check to custom/generated bindings for
        individual objects, as these won't get executed if scripts are disabled
        anyway.

        No new tests. No functional change.

        * bindings/v8/PageScriptDebugServer.cpp:
        (WebCore::PageScriptDebugServer::addListener):
        * bindings/v8/ScheduledAction.cpp:
        (WebCore::ScheduledAction::execute):
        * bindings/v8/ScriptCachedFrameData.cpp:
        (WebCore::ScriptCachedFrameData::restore):
        * bindings/v8/V8DOMWrapper.cpp:
        (WebCore::V8DOMWrapper::instantiateV8Object):
        * bindings/v8/V8EventListener.cpp:
        (WebCore::V8EventListener::callListenerFunction):
        * bindings/v8/V8LazyEventListener.cpp:
        (WebCore::V8LazyEventListener::callListenerFunction):
        (WebCore::V8LazyEventListener::prepareListenerObject):
        * bindings/v8/V8Proxy.cpp:
        (WebCore::V8Proxy::handleOutOfMemory):
        (WebCore::V8Proxy::retrieve):
        (WebCore::toV8Context):

2012-01-11  Kentaro Hara  <haraken@chromium.org>

        ShouldSkipTypeInHeader() and ShouldSkipTypeInImplementation() should be the same
        https://bugs.webkit.org/show_bug.cgi?id=76030

        Reviewed by Adam Barth.

        Because the attributes/methods that do not appear in the implementation
        do not need to appear in the header.

        Tests: bindings/scripts/test/TestCallback.idl
               bindings/scripts/test/TestObj.idl

        * bindings/scripts/CodeGeneratorCPP.pm:
        (ShouldSkipType): Renamed from ShouldSkipTypeInImplementation().
        (GenerateHeader): Replaced ShouldSkipTypeInImplementation() with ShouldSkipType(),
        and replaced ShouldSkipTypeInHeader() with ShouldSkipType().
        (GenerateImplementation): Ditto.
        * bindings/scripts/test/CPP/WebDOMTestCallback.h: Updated the test result.
        * bindings/scripts/test/CPP/WebDOMTestObj.h: Ditto.

2012-01-11  Zoltan Herczeg  <zherczeg@webkit.org>

        Fix more style errors in CSSParser.cpp (followup patch)
        https://bugs.webkit.org/show_bug.cgi?id=76038

        Reviewed by Nikolas Zimmermann.

        The previous was: http://trac.webkit.org/changeset/104576
        This patch mostly contains C cast to static_cast rewrites.

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):
        (WebCore::CSSParser::parseBackgroundColor):
        (WebCore::ShadowParseContext::commitLength):
        (WebCore::BorderImageSliceParseContext::commitNumber):
        (WebCore::BorderImageSliceParseContext::commitBorderImageSlice):
        (WebCore::BorderImageQuadParseContext::commitNumber):
        (WebCore::BorderImageQuadParseContext::commitBorderImageQuad):
        (WebCore::parseDeprecatedGradientPoint):

2012-01-11  Nikolas Zimmermann  <nzimmermann@rim.com>

        Not reviewed. Fix release builds.

        * rendering/svg/SVGTextMetricsBuilder.cpp:
        (WebCore::SVGTextMetricsBuilder::measureTextRenderer):

2012-01-11  Kentaro Hara  <haraken@chromium.org>

        REGRESSION(r101445): [V8] Generated code for custom getters and setters
        with the [Supplemental] IDL is wrong
        https://bugs.webkit.org/show_bug.cgi?id=76034

        Reviewed by Adam Barth.

        This patch fixes the class name of the implementation of custom getters
        and setters, as follows.

        Previous V8TestInterface.cpp:
            // Attribute 'supplementalStr3'
            {"supplementalStr3", V8TestSupplemental::supplementalStr3AccessorGetter, V8TestSupplemental::supplementalStr3AccessorSetter, ...},

        New V8TestInterface.cpp:
            // Attribute 'supplementalStr3'
            {"supplementalStr3", V8TestInterface::supplementalStr3AccessorGetter, V8TestInterface::supplementalStr3AccessorSetter, ...},

        Test: bindings/scripts/test/TestInterface.idl
              bindings/scripts/test/TestSupplemental.idl

        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateSingleBatchedAttribute):
        * bindings/scripts/test/V8/V8TestInterface.cpp:

2012-01-10  Nikolas Zimmermann  <nzimmermann@rim.com>

        Large SVG text layout performance regression in r81168
        https://bugs.webkit.org/show_bug.cgi?id=65711

        Reviewed by Zoltan Herczeg.

        Introduce SVGTextMetricsBuilder, which will be used to speed-up measuring of SVG text,
        by using the simple code path, whenever possibly. It's not enabled yet, as it requires
        a restructurization of SVGTextLayoutAttributesBuilder - its the first chunk of a set
        of patches, that all together fix the performance regression and much more :-)

        Doesn't affect any tests, SVGTextMetricsBuilder is not turned on yet.

        * CMakeLists.txt: Add SVGTextMetricsBuilder.cpp/h to build.
        * GNUmakefile.list.am: Ditto.
        * Target.pri: Ditto.
        * WebCore.gypi: Ditto.
        * WebCore.vcproj/WebCore.vcproj: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Ditto.
        * platform/graphics/Font.h:
        (WebCore::Font::codePath): Make it public, to be usable from SVGTextMetricsBuilder.
        * rendering/svg/RenderSVGAllInOne.cpp: Add SVGTextMetricsBuilder.cpp to build.
        * rendering/svg/RenderSVGText.cpp:
        * rendering/svg/RenderSVGText.h:
        * rendering/svg/SVGTextLayoutAttributesBuilder.cpp:
        (WebCore::SVGTextLayoutAttributesBuilder::propagateLayoutAttributes): SVGTextMetrics::emptyMetrics() is gone, adapt code.
        * rendering/svg/SVGTextLayoutEngine.cpp:
        (WebCore::SVGTextLayoutEngine::currentLogicalCharacterMetrics): Ditto.
        (WebCore::SVGTextLayoutEngine::layoutTextOnLineOrPath): Ditto.
        * rendering/svg/SVGTextMetrics.cpp:
        (WebCore::SVGTextMetrics::SVGTextMetrics): Made public, now used in SVGTextLayoutEngine.
        (WebCore::SVGTextMetrics::constructTextRun): Move to public static function, to be usable from SVGTextMetricsBuilder.
        * rendering/svg/SVGTextMetrics.h:
        (WebCore::SVGTextMetrics::isEmpty): Add new isEmpty method, which replaces the == empyMetrics().
        (WebCore::SVGTextMetrics::setWidth): Remove friendship with SVGTextLayoutAttributesBuilder, and make it public, to avoid another friendship.
        * rendering/svg/SVGTextMetricsBuilder.cpp: Added.
        (WebCore::SVGTextMetricsBuilder::SVGTextMetricsBuilder):
        (WebCore::SVGTextMetricsBuilder::advance):
        (WebCore::SVGTextMetricsBuilder::advanceSimpleText): New variant using WidthIterator directly, this is finally possible as SVG Fonts have been integrated into the glyph pages concept a while ago.
        (WebCore::SVGTextMetricsBuilder::advanceComplexText): Complex code path, accounting for sum of glyph widths != run width.
        (WebCore::SVGTextMetricsBuilder::measureTextRenderer): Either measure the text renderer, or just figure out lastCharacter.
        (WebCore::SVGTextMetricsBuilder::walkTreeUntilSpecificLeafIsReached): Walks SVG <text> tree, correctly computing "lastCharacter" until the leaf is reached.
        (WebCore::SVGTextMetricsBuilder::measureAllCharactersOfRenderer): Use above method.
        * rendering/svg/SVGTextMetricsBuilder.h: Added.

2012-01-11  Dan Bernstein  <mitz@apple.com>

        <rdar://problem/10674686> Implement the font-kerning CSS property
        https://bugs.webkit.org/show_bug.cgi?id=76033

        Reviewed by Darin Adler.

        Tests: fast/text/font-kerning-expected.html
               fast/text/font-kerning.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue): Added code to handle
        font-kerning.
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue): Ditto.
        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue): Added mapping from FontDescription::Kerning.
        (WebCore::CSSPrimitiveValue::operator FontDescription::Kerning): Added mapping to
        FontDescription::Kerning.
        * css/CSSProperty.cpp:
        (WebCore::CSSProperty::isInheritedProperty): Added font-kerning to the set of inherited
        properties.
        * css/CSSPropertyNames.in: Added -webkit-font-kerning.
        * css/CSSStyleApplyProperty.cpp:
        (WebCore::CSSStyleApplyProperty::CSSStyleApplyProperty): Added a handler for font-kerning.
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyDeclaration): Updated for the number of properties that
        affect the font.
        * platform/graphics/Font.h:
        (WebCore::Font::typesettingFeatures): Changed to enable kerning if font-kerning is set to
        normal, disable it if font-kerning is set to none, and leave it to the default (determined
        by the text-rendering property) if font-kerning is set to auto.
        * platform/graphics/FontDescription.h:
        (WebCore::FontDescription::FontDescription): Added a Kerning enum.
        (WebCore::FontDescription::kerning): Added this getter.
        (WebCore::FontDescription::setKerning): Added this setter.
        (WebCore::FontDescription::operator==): Updated to compare the m_kerning member.

2012-01-10  Ryosuke Niwa  <rniwa@webkit.org>

        Build fix. Forgot to revert Node.h.

        * dom/Node.h:

2012-01-10  Ryosuke Niwa  <rniwa@webkit.org>

        Revert r104210. It turned out that this patch makes improving the node list caches harder.

        * dom/Attr.cpp:
        (WebCore::Attr::setValue):
        (WebCore::Attr::childrenChanged):
        * dom/DynamicNodeList.cpp:
        (WebCore::DynamicSubtreeNodeList::DynamicSubtreeNodeList):
        (WebCore::DynamicSubtreeNodeList::length):
        (WebCore::DynamicSubtreeNodeList::itemForwardsFromCurrent):
        (WebCore::DynamicSubtreeNodeList::itemBackwardsFromCurrent):
        (WebCore::DynamicSubtreeNodeList::item):
        (WebCore::DynamicSubtreeNodeList::invalidateCache):
        (WebCore::DynamicSubtreeNodeList::Caches::create):
        (WebCore::DynamicSubtreeNodeList::Caches::reset):
        * dom/DynamicNodeList.h:
        * dom/Element.cpp:
        (WebCore::Element::updateAfterAttributeChanged):
        * dom/Node.cpp:
        (WebCore::Node::invalidateNodeListsCacheAfterAttributeChanged):
        (WebCore::Node::invalidateNodeListsCacheAfterChildrenChanged):
        (WebCore::Node::notifyLocalNodeListsLabelChanged):
        (WebCore::Node::itemTypeAttributeChanged):
        (WebCore::NodeListsNodeData::invalidateCaches):
        (WebCore::NodeListsNodeData::invalidateCachesThatDependOnAttributes):
        * dom/NodeRareData.h:
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::parseMappedAttribute):
        * html/HTMLLabelElement.cpp:
        (WebCore::HTMLLabelElement::parseMappedAttribute):
        * html/HTMLLabelElement.h:

2012-01-10  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r104263 and r104381.
        http://trac.webkit.org/changeset/104263
        http://trac.webkit.org/changeset/104381
        https://bugs.webkit.org/show_bug.cgi?id=76029

        Preparation to rollout r104210 (Requested by rniwa on
        #webkit).

        * dom/DynamicNodeList.cpp:
        (WebCore::DynamicSubtreeNodeList::SubtreeCaches::setLengthCache):
        (WebCore::DynamicSubtreeNodeList::SubtreeCaches::setItemCache):
        (WebCore::DynamicSubtreeNodeList::length):
        (WebCore::DynamicSubtreeNodeList::item):
        * dom/DynamicNodeList.h:
        (WebCore::DynamicSubtreeNodeList::SubtreeCaches::isLengthCacheValid):
        (WebCore::DynamicSubtreeNodeList::SubtreeCaches::isItemCacheValid):
        (WebCore::DynamicSubtreeNodeList::SubtreeCaches::domVersionIsConsistent):

2012-01-10  David Kilzer  <ddkilzer@apple.com>

        Add TestWebKitAPI tests for KURL
        <http://webkit.org/b/75774>

        Reviewed by Adam Barth.

        * WebCore.exp.in: Export additional KURL methods used in
        testing.

2012-01-10  Jer Noble  <jer.noble@apple.com>

        Crash in HTMLMediaElement::shouldDisableSleep()
        https://bugs.webkit.org/show_bug.cgi?id=76025

        Reviewed by Dan Bernstein.

        Check nullity of m_player before dereferencing.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::shouldDisableSleep):

2012-01-04  Kent Tamura  <tkent@chromium.org>

        A radio button not in a document should not join a radio button group
        https://bugs.webkit.org/show_bug.cgi?id=45719

        Reviewed by Darin Adler.

        As per the standard and other browser behaviors, we should not add a
        radio button not in a document to a radio button group.

        So, CheckedRadioButton member functions should be called in
        insertedIntoDocument() and removedFromDocument(), and they should do
        nothing if the specified radio button is not in a document.

        This change also fixes a bug that form owner change by 'form' attribute
        didn't update radio button groups correctly.

        Test: fast/forms/radio/radio-group.html

        * dom/CheckedRadioButtons.cpp:
        (WebCore::shouldMakeRadioGroup): A helper function to check <input> state.
        (WebCore::CheckedRadioButtons::addButton):
        - Change the argument type: HTMLFormControlElement* -> HTMLInputElement*.
        - Use shouldMakeRadioGroup().
        (WebCore::CheckedRadioButtons::removeButton): ditto.
        * dom/CheckedRadioButtons.h:
         Change the argument types of addButton() and removeButton():
         HTMLFormControlElement* -> HTMLInputElement*.
        * html/FormAssociatedElement.cpp:
         Do not update m_form except in setForm() and formWillBeDestroyed().
         This helps us to call registerFormElement() and removeFromElement()
         correctly, and call willChangeForm()/didChangeForm() hooks correctly.
        (WebCore::FormAssociatedElement::FormAssociatedElement):
        (WebCore::FormAssociatedElement::~FormAssociatedElement):
        (WebCore::FormAssociatedElement::insertedIntoTree):
        (WebCore::FormAssociatedElement::removedFromTree):
        (WebCore::FormAssociatedElement::setForm):
        (WebCore::FormAssociatedElement::willChangeForm):
        This virtual function is called before the owner form is updated.
        (WebCore::FormAssociatedElement::didChangeForm):
        This virtual function is called after the owner form was updated.
        (WebCore::FormAssociatedElement::formWillBeDestroyed):
        - Renamaed from formDestroyed()
        - Add calls to willChangeForm() and didChangeForm().
        (WebCore::FormAssociatedElement::resetFormOwner): Use setForm().
        (WebCore::FormAssociatedElement::formAttributeChanged): ditto.
        * html/FormAssociatedElement.h:
        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLFormControlElement::HTMLFormControlElement): Use setForm().
        (WebCore::HTMLFormControlElement::~HTMLFormControlElement):
        removeFormElement() is not needed. ~FormAssociatedElement() treats it.
        (WebCore::HTMLFormControlElement::parseMappedAttribute):
        No need to handle CheckedRadioButtons here. It is handled by HTMLInputElement.
        (WebCore::HTMLFormControlElement::insertedIntoTree): ditto.
        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::~HTMLFormElement):
         Rename formDestroyed() with willDestroyForm().
        (WebCore::HTMLFormElement::registerFormElement):
        We don't need to handle radio button groups here.
        (WebCore::HTMLFormElement::removeFormElement): ditto.
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::~HTMLInputElement):
        Calls setForm(0) so that it calls correct virtual functions of
        HTMLInputElement.
        (WebCore::HTMLInputElement::updateCheckedRadioButtons):
        Checking attached() was wrong.
        (WebCore::HTMLInputElement::willChangeForm):
        Remove this radio button from a radio button group for the old form.
        (WebCore::HTMLInputElement::didChangeForm):
        Add this radio button to a radio button group for the new form.
        (WebCore::HTMLInputElement::insertedIntoDocument):
        Add CheckedRadioButtons::addButton() call.
        (WebCore::HTMLInputElement::removedFromDocument):
        Add CheckedRadioButtons::removeButton() call.
        (WebCore::HTMLInputElement::didMoveToNewDocument):
        We don't need to handle CheckedRadioButton() here because
        removedFromDocument() handles it.
        * html/HTMLInputElement.h:
        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::HTMLObjectElement): Use setForm().
        (WebCore::HTMLObjectElement::~HTMLObjectElement):
        removeFormElement() is not needed. ~FormAssociatedElement() treats it.

2012-01-10  Kentaro Hara  <haraken@chromium.org>

        Remove redundant code from DOMWindowSQLDatabase.cpp
        https://bugs.webkit.org/show_bug.cgi?id=76010

        Reviewed by Adam Barth.

        This patch removes redundant code from DOMWindowSQLDatabase.cpp.

        - Remove window->frame() check, since window->frame() is always true when
          window->isCurrentlyDisplayedInFrame() is true.
        - window->frame()->document() can just be window->document()

        Tests: storage/open-database-creation-callback-isolated-world.html
               storage/open-database-creation-callback.html
               storage/open-database-empty-version.html
               storage/open-database-over-quota.html
               storage/open-database-set-empty-version.html
               storage/open-database-while-transaction-in-progress.html

        * storage/DOMWindowSQLDatabase.cpp:
        (WebCore::DOMWindowSQLDatabase::openDatabase):

2012-01-10  Dale Curtis  <dalecurtis@chromium.org>

        Repaint video controls when buffering during pause.
        https://bugs.webkit.org/show_bug.cgi?id=73957

        Pipes support for a new bufferingProgressed() method on MediaControls
        elements. Allows controls to be repainted as data buffers when paused.

        Reviewed by Hajime Morita.

        Test: http/tests/media/video-buffering-repaints-controls.html

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::setNetworkState):
        (WebCore::HTMLMediaElement::progressEventTimerFired):
        * html/shadow/MediaControlRootElement.cpp:
        (WebCore::MediaControlRootElement::bufferingProgressed):
        * html/shadow/MediaControlRootElement.h:
        * html/shadow/MediaControlRootElementChromium.cpp:
        (WebCore::MediaControlRootElementChromium::bufferingProgressed):
        * html/shadow/MediaControlRootElementChromium.h:
        * html/shadow/MediaControls.h:

2012-01-10  Daniel Cheng  <dcheng@chromium.org>

        [chromium] Pasteboard::documentFragment should fall back to text if there's no HTML text
        https://bugs.webkit.org/show_bug.cgi?id=75923

        Reviewed by Tony Chang.

        Test: editing/pasteboard/pasting-empty-html-falls-back-to-text.html

        * platform/chromium/PasteboardChromium.cpp:
        (WebCore::Pasteboard::documentFragment):

2012-01-10  Kentaro Hara  <haraken@chromium.org>

        Use the [Supplemental] IDL in SQLDatabase
        https://bugs.webkit.org/show_bug.cgi?id=76004

        Reviewed by Adam Barth.

        We've been working on WebKit modularization. By using the [Supplemental] IDL,
        we can move SQLDatabase related code from WebCore/page/DOMWindow.{h,cpp,idl}
        to WebCore/storage/DOMWindowSQLDatabase.{h,cpp,idl}.

        Tests: storage/open-database-creation-callback-isolated-world.html
               storage/open-database-creation-callback.html
               storage/open-database-empty-version.html
               storage/open-database-over-quota.html
               storage/open-database-set-empty-version.html
               storage/open-database-while-transaction-in-progress.html

        * CMakeLists.txt: Added DOMWindowSQLDatabase.{idl,h,cpp} to the build script.
        * DerivedSources.make: Ditto.
        * DerivedSources.pri: Ditto.
        * GNUmakefile.list.am: Ditto.
        * Target.pri: Ditto.
        * WebCore.gypi: Ditto.
        * WebCore.vcproj/WebCore.vcproj: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Ditto.

        * page/DOMWindow.cpp: Removed SQLDatabase related code.
        * page/DOMWindow.idl: Ditto.
        * page/DOMWindow.h: Ditto. Moved isCurrentlyDisplayedInFrame() from private: to public:
        so that DOMWindowSQLDatabase::openDatabase() can access it.

        * storage/DOMWindowSQLDatabase.cpp: Added. Moved openDatabase() from DOMWindow.cpp to here.
        (WebCore::DOMWindowSQLDatabase::openDatabase):
        * storage/DOMWindowSQLDatabase.h: Added. Moved openDatabase() from DOMWindow.h to here.
        * storage/DOMWindowSQLDatabase.idl: Added. Using the [Supplemental] IDL, moved openDatabase()
        and SQLException from DOMWindow.idl to here.

2012-01-10  Chris Marrin  <cmarrin@apple.com>

        CIFilter version of Sepia Tone filter doesn't match software
        https://bugs.webkit.org/show_bug.cgi?id=75129

        Reviewed by Simon Fraser.

        Changed sepia tone filter to use a CIColorMatrix filter with
        values that match sw filter.

        * platform/graphics/ca/mac/PlatformCALayerMac.mm:
        (interp):
        (PlatformCALayer::setFilters):

2012-01-10  Viatcheslav Ostapenko  <ostapenko.viatcheslav@nokia.com>

        [Qt][WK2]REGRESSION(r102435): It made tst_QQuickWebView::show() crash
        https://bugs.webkit.org/show_bug.cgi?id=74176

        Reviewed by Noam Rosenthal.

        Replaces static global GL resource holder with holder shared between
        TextureMapperGL instances created on the same GL context. Also adds
        deallocation of GL resources when last TextureMapperGL instance on the 
        current GL context gets deleted.

        Tested by multipleWebViewWindows and multipleWebViews Qt WK2 API tests.

        * platform/graphics/opengl/TextureMapperGL.cpp:
        (WebCore::TextureMapperGLData::SharedGLData::getCurrentGLContext):
        (WebCore::TextureMapperGLData::SharedGLData::glContextDataMap):
        (WebCore::TextureMapperGLData::SharedGLData::currentSharedGLData):
        (WebCore::TextureMapperGLData::SharedGLData::ProgramInfo::ProgramInfo):
        (WebCore::TextureMapperGLData::SharedGLData::createShaderProgram):
        (WebCore::TextureMapperGLData::SharedGLData::deleteShaderProgram):
        (WebCore::TextureMapperGLData::SharedGLData::SharedGLData):
        (WebCore::TextureMapperGLData::SharedGLData::~SharedGLData):
        (WebCore::TextureMapperGLData::sharedGLData):
        (WebCore::TextureMapperGLData::TextureMapperGLData):
        (WebCore::TextureMapperGLData::SharedGLData::initializeShaders):
        (WebCore::TextureMapperGL::beginPainting):
        (WebCore::TextureMapperGL::drawTexture):
        (WebCore::BitmapTextureGL::bind):
        (WebCore::TextureMapperGL::bindSurface):
        (WebCore::TextureMapperGL::beginClip):
        (WebCore::TextureMapperGL::endClip):
        * platform/graphics/opengl/TextureMapperGL.h:

2012-01-10  Simon Fraser  <simon.fraser@apple.com>

        Disabled mock scrollbars should draw differently
        https://bugs.webkit.org/show_bug.cgi?id=75995

        Reviewed by James Robinson.
        
        When the scrollbar is disabled, paint the entire track of
        mock scrollbars with a lighter gray, and hide the thumb.

        No tests, since mock scrollbars aren't enabled by default on Mac yet.

        * platform/mock/ScrollbarThemeMock.cpp:
        (WebCore::ScrollbarThemeMock::paintTrackBackground):
        (WebCore::ScrollbarThemeMock::paintThumb):

2012-01-10  Tony Chang  <tony@chromium.org>

        Need to handle absolutely positioned elements inside flexboxes
        https://bugs.webkit.org/show_bug.cgi?id=70793

        Reviewed by David Hyatt.

        Tests: css3/flexbox/insert-text-crash.html
               css3/flexbox/position-absolute-child.html

        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::computePreferredMainAxisExtent): Skip the size of positioned elements.
        (WebCore::RenderFlexibleBox::runFreeSpaceAllocationAlgorithm): Add placeholders for positioned elements.
        (WebCore::RenderFlexibleBox::prepareChildForPositionedLayout): Positions the layer for the positioned child.
        (WebCore::RenderFlexibleBox::layoutAndPlaceChildren): Handle positioned elements.
        (WebCore::RenderFlexibleBox::layoutColumnReverse): Adjust the main axis offset of the layer for positioned elements.
        * rendering/RenderFlexibleBox.h:

2012-01-10  Nat Duca  <nduca@chromium.org>

        [chromium] Reuse old timebase when activating CCDelayBasedTimeSource
        https://bugs.webkit.org/show_bug.cgi?id=75938

        Reviewed by James Robinson.

        * platform/graphics/chromium/cc/CCDelayBasedTimeSource.cpp:
        (WebCore::CCDelayBasedTimeSource::CCDelayBasedTimeSource):
        (WebCore::CCDelayBasedTimeSource::setActive):
        (WebCore::CCDelayBasedTimeSource::onTimerFired):
        (WebCore::CCDelayBasedTimeSource::postNextTickTask):
        * platform/graphics/chromium/cc/CCDelayBasedTimeSource.h:

2012-01-10  Kentaro Hara  <haraken@chromium.org>

        Support the [Supplemental] IDL on methods
        https://bugs.webkit.org/show_bug.cgi?id=75944

        Reviewed by Adam Barth.

        The spec for the [Supplemental] IDL:
        http://dev.w3.org/2006/webapi/WebIDL/#dfn-supplemental-interface

        Currently the [Supplemental] IDL is supported on attributes but not supported
        on methods. This patch makes a change to support it.

        Specifically, assume the following IDL:

            interface [Supplemental=X] Y {
                void func();
            }

        Then the code generator generates the following V8X.cpp.

            void funcCallback(Arguments& args) {
                X* imp = V8X::toNative(args.Holder());
                Y::func(imp);
            }

        Similar code is also generated for JS, ObjC, GObject and CPP bindings.

        Test: bindings/scripts/test/TestSupplemental.idl

        * bindings/scripts/CodeGeneratorCPP.pm: Modified as described above.
        (GenerateImplementation):
        * bindings/scripts/CodeGeneratorGObject.pm: Ditto.
        (GenerateFunction):
        * bindings/scripts/CodeGeneratorJS.pm: Ditto.
        (GenerateParametersCheck):
        * bindings/scripts/CodeGeneratorObjC.pm: Ditto.
        (GenerateImplementation):
        * bindings/scripts/CodeGeneratorV8.pm: Ditto.
        (GenerateFunctionCallString):
        * bindings/scripts/generate-bindings.pl: Ditto.

        * bindings/scripts/test/TestSupplemental.idl: Added test cases for [Supplemental] methods.

        * bindings/scripts/test/CPP/WebDOMTestInterface.cpp: Updated the test result.
        (WebDOMTestInterface::supplementalMethod1):
        (WebDOMTestInterface::supplementalMethod2):
        * bindings/scripts/test/CPP/WebDOMTestInterface.h: Ditto.
        * bindings/scripts/test/GObject/WebKitDOMTestInterface.cpp: Ditto.
        (webkit_dom_test_interface_supplemental_method1):
        (webkit_dom_test_interface_supplemental_method2):
        * bindings/scripts/test/GObject/WebKitDOMTestInterface.h: Ditto.
        * bindings/scripts/test/JS/JSTestInterface.cpp: Ditto.
        (WebCore::JSTestInterfacePrototype::getOwnPropertySlot):
        (WebCore::JSTestInterfacePrototype::getOwnPropertyDescriptor):
        (WebCore::jsTestInterfacePrototypeFunctionSupplementalMethod1):
        (WebCore::jsTestInterfacePrototypeFunctionSupplementalMethod2):
        * bindings/scripts/test/JS/JSTestInterface.h: Ditto.
        * bindings/scripts/test/ObjC/DOMTestInterface.h: Ditto.
        * bindings/scripts/test/ObjC/DOMTestInterface.mm: Ditto.
        (-[DOMTestInterface supplementalMethod1]):
        (-[DOMTestInterface supplementalMethod2:objArg:]):
        * bindings/scripts/test/V8/V8TestInterface.cpp: Ditto.
        (WebCore::TestInterfaceInternal::supplementalMethod1Callback):
        (WebCore::TestInterfaceInternal::supplementalMethod2Callback):
        (WebCore::ConfigureV8TestInterfaceTemplate):

2012-01-10  Kentaro Hara  <haraken@chromium.org>

        [Refactoring] Rename attributes in TestSupplemental.idl to clarify
        that they are supplemental attributes
        https://bugs.webkit.org/show_bug.cgi?id=75942

        Reviewed by Adam Barth.

        This patch just renames attributes in TestSupplemental.idl
        to make it easy to find in {JS,V8,WebKitDOM,DOM,WebDOM}TestInterface.cpp
        which attributes originate from TestSupplemental.idl.

        * bindings/scripts/test/TestSupplemental.idl: Just renamed three attributes.

        * bindings/scripts/test/CPP/WebDOMTestInterface.cpp: Updated the test result.
        (WebDOMTestInterface::supplementalStr1):
        (WebDOMTestInterface::supplementalStr2):
        (WebDOMTestInterface::setSupplementalStr2):
        * bindings/scripts/test/CPP/WebDOMTestInterface.h: Ditto.
        * bindings/scripts/test/GObject/WebKitDOMTestInterface.cpp: Ditto.
        (webkit_dom_test_interface_get_supplemental_str1):
        (webkit_dom_test_interface_get_supplemental_str2):
        (webkit_dom_test_interface_set_supplemental_str2):
        (webkit_dom_test_interface_set_property):
        (webkit_dom_test_interface_get_property):
        (webkit_dom_test_interface_class_init):
        * bindings/scripts/test/GObject/WebKitDOMTestInterface.h: Ditto.
        * bindings/scripts/test/JS/JSTestInterface.cpp: Ditto.
        (WebCore::jsTestInterfaceSupplementalStr1):
        (WebCore::jsTestInterfaceSupplementalStr2):
        (WebCore::jsTestInterface):
        (WebCore::setJSTestInterfaceSupplementalStr2):
        (WebCore::setJSTestInterface):
        * bindings/scripts/test/JS/JSTestInterface.h: Ditto.
        * bindings/scripts/test/ObjC/DOMTestInterface.h: Ditto.
        * bindings/scripts/test/ObjC/DOMTestInterface.mm: Ditto.
        (-[DOMTestInterface supplementalStr1]):
        (-[DOMTestInterface supplementalStr2]):
        (-[DOMTestInterface setSupplementalStr2:]):
        (-[DOMTestInterface ]):
        (-[DOMTestInterface set:]):
        * bindings/scripts/test/V8/V8TestInterface.cpp: Ditto.
        (WebCore::TestInterfaceInternal::supplementalStr1AttrGetter):
        (WebCore::TestInterfaceInternal::supplementalStr2AttrGetter):
        (WebCore::TestInterfaceInternal::supplementalStr2AttrSetter):

2012-01-10  John Bauman  <jbauman@chromium.org>

        [chromium] Correctly recreate DrawingBuffer on lost device
        https://bugs.webkit.org/show_bug.cgi?id=75912

        Reviewed by Kenneth Russell.

        Create new drawing buffer on new context, not old lost context. Also,
        make sure to bind new drawing buffer.

        No new tests.

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::maybeRestoreContext):

2012-01-10  Stephen White  <senorblanco@chromium.org>

        [Chromium] Partial revert of r104566, since it breaks the shared
        library build on Windows.
        https://bugs.webkit.org/show_bug.cgi?id=75994

        Reviewed by Dmitry Titov.

        Covered by SVG feColorMatrix tests (see LayoutTests/ChangeLog).

        * WebCore.gypi:
        * platform/graphics/filters/FEColorMatrix.h:

2012-01-10  Simon Fraser  <simon.fraser@apple.com>

        Clean up RenderLayerBacking code that looks for the body
        https://bugs.webkit.org/show_bug.cgi?id=39502

        Reviewed by Dave Hyatt.
        
        Consolidate code that propagates the <body> background to the
        root, adding a utility method on RenderObject that is called
        by RenderBox and RenderLayerBacking.
        
        Removed an unused method in RenderLayerBacking.
        
        The compositiong changes are not testable, since rendererBackgroundColor()
        is only used by fullscreen at present.

        Tests: fast/backgrounds/root-background-propagation.html
               fast/backgrounds/root-background-propagation2.html

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::paintRootBoxFillLayers):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::rendererBackgroundColor):
        * rendering/RenderLayerBacking.h:
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::rendererForRootBackground):
        * rendering/RenderObject.h:

2012-01-10  Dana Jansens  <danakj@chromium.org>

        [chromium] Create iterators for the RenderSurface-Layer tree
        https://bugs.webkit.org/show_bug.cgi?id=74203

        Reviewed by James Robinson.

        New unit tests: CCLayerIteratorTest.cpp

        * WebCore.gypi:
        * platform/graphics/chromium/RenderSurfaceChromium.h:
        * platform/graphics/chromium/cc/CCLayerIterator.cpp: Added.
        (WebCore::CCLayerIteratorActions::BackToFront::begin):
        (WebCore::CCLayerIteratorActions::BackToFront::end):
        (WebCore::CCLayerIteratorActions::BackToFront::next):
        (WebCore::CCLayerIteratorActions::FrontToBack::begin):
        (WebCore::CCLayerIteratorActions::FrontToBack::end):
        (WebCore::CCLayerIteratorActions::FrontToBack::next):
        (WebCore::CCLayerIteratorActions::FrontToBack::goToHighestInSubtree):
        * platform/graphics/chromium/cc/CCLayerIterator.h: Added.
        (WebCore::CCLayerIterator::CCLayerIterator):
        (WebCore::CCLayerIterator::begin):
        (WebCore::CCLayerIterator::end):
        (WebCore::CCLayerIterator::operator++):
        (WebCore::CCLayerIterator::operator==):
        (WebCore::CCLayerIterator::operator!=):
        (WebCore::CCLayerIterator::operator->):
        (WebCore::CCLayerIterator::operator*):
        (WebCore::CCLayerIterator::representsTargetRenderSurface):
        (WebCore::CCLayerIterator::representsContributingRenderSurface):
        (WebCore::CCLayerIterator::representsItself):
        (WebCore::CCLayerIterator::targetRenderSurfaceLayer):
        * platform/graphics/chromium/cc/CCLayerIteratorPosition.h: Added.
        (WebCore::CCLayerIteratorPosition::CCLayerIteratorPosition):
        (WebCore::CCLayerIteratorPosition::currentLayer):
        (WebCore::CCLayerIteratorPosition::currentLayerRepresentsContributingRenderSurface):
        (WebCore::CCLayerIteratorPosition::currentLayerRepresentsTargetRenderSurface):
        (WebCore::CCLayerIteratorPosition::targetRenderSurfaceLayer):
        (WebCore::CCLayerIteratorPosition::targetRenderSurface):
        (WebCore::CCLayerIteratorPosition::targetRenderSurfaceChildren):
        (WebCore::CCLayerIteratorPosition::operator==):
        * platform/graphics/chromium/cc/CCLayerTreeHost.cpp:
        (WebCore::CCLayerTreeHost::paintLayerContents):
        (WebCore::CCLayerTreeHost::updateCompositorResources):
        * platform/graphics/chromium/cc/CCLayerTreeHostCommon.cpp:
        (WebCore::walkLayersAndCalculateVisibleLayerRects):
        * platform/graphics/chromium/cc/CCRenderSurface.h:

2012-01-10  Ojan Vafai  <ojan@chromium.org>

        Rename flex-align to flex-item-align.
        https://bugs.webkit.org/show_bug.cgi?id=75929

        Reviewed by Darin Adler.

        The spec has changed and now flex-align will be set on
        the flexbox itself.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):
        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        (WebCore::CSSPrimitiveValue::operator EFlexAlign):
        * css/CSSProperty.cpp:
        (WebCore::CSSProperty::isInheritedProperty):
        * css/CSSPropertyNames.in:
        * css/CSSStyleApplyProperty.cpp:
        (WebCore::CSSStyleApplyProperty::CSSStyleApplyProperty):
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::sizesToIntrinsicLogicalWidth):
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::layoutAndPlaceChildren):
        (WebCore::RenderFlexibleBox::alignChildren):
        * rendering/style/RenderStyle.h:
        (WebCore::RenderStyleBitfields::flexItemAlign):
        (WebCore::RenderStyleBitfields::setFlexItemAlign):
        (WebCore::RenderStyleBitfields::initialFlexItemAlign):
        * rendering/style/RenderStyleConstants.h:
        * rendering/style/StyleFlexibleBoxData.cpp:
        (WebCore::StyleFlexibleBoxData::StyleFlexibleBoxData):
        (WebCore::StyleFlexibleBoxData::operator==):
        * rendering/style/StyleFlexibleBoxData.h:

2012-01-10  Eric Carlson  <eric.carlson@apple.com>

        Replace TextTrackCue "getCueAsSource" method with "text" attribute
        https://bugs.webkit.org/show_bug.cgi?id=75646

        Reviewed by Darin Adler.

        Test: media/track/track-cue-mutable-text.html

        * html/HTMLMediaElement.h: getCueAsSource() -> text().

        * html/TextTrackCue.cpp:
        (WebCore::TextTrackCue::setText): New. Set cue text and clear the document fragment.
        (WebCore::TextTrackCue::getCueAsHTML): Allocate the document fragment if it doesn't exist.
        * html/TextTrackCue.h:
        (WebCore::TextTrackCue::text):
        * html/TextTrackCue.idl: getCueAsSource() -> text().

        * html/shadow/MediaControlRootElement.cpp:
        (WebCore::MediaControlRootElement::updateTextTrackDisplay): getCueAsSource() -> text().
        * html/shadow/MediaControlRootElementChromium.cpp:
        (WebCore::MediaControlRootElementChromium::updateTextTrackDisplay): getCueAsSource() -> text().

        * html/track/WebVTTParser.cpp:
        (WebCore::WebVTTParser::collectCueText): processCueText is dead, long live createNewCue.
        (WebCore::WebVTTParser::createDocumentFragmentFromCueText): New, split out of processCueText.
            Create a document fragment from the String argument.
        (WebCore::WebVTTParser::createNewCue): Split out of processCueText.
        (WebCore::WebVTTParser::constructTreeFromToken): Add a comment pointing to the spec section
            with the rules for DOM construction.
        * html/track/WebVTTParser.h:

2012-01-10  Jer Noble  <jer.noble@apple.com>

        REGRESSION (r102024): Having the Bing homepage open prevents idle sleep
        https://bugs.webkit.org/show_bug.cgi?id=75972

        Reviewed by Oliver Hunt.

        No new tests; no testing infrastructure exists to test display sleep assertions.

        Only disable idle and display sleep when a video element is not paused, not looping, and
        has both a video and audio track.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::mediaPlayerRateChanged): Factor into updateDisableSleep() and
            shouldDisplaySleep().
        (WebCore::HTMLMediaElement::setLoop): Ditto.
        (WebCore::HTMLMediaElement::attributeChanged): Ditto.
        (WebCore::HTMLMediaElement::updateDisableSleep):
        (WebCore::HTMLMediaElement::shouldDisableSleep):
        * html/HTMLMediaElement.h:

2012-01-09  Matthew Delaney  <mdelaney@apple.com>

        [Mac] Accelerate canvas layers with the same logic as accelerating the canvas itself
        https://bugs.webkit.org/show_bug.cgi?id=75921

        Reviewed by Simon Fraser.

        No new tests. Does not affect detectable behavior.

        * rendering/RenderLayerCompositor.cpp: Use canvas's shouldAccelerate to avoid asking
        uninitialized canvas's if they're accelerated or not.
        (WebCore::RenderLayerCompositor::updateBacking):

2012-01-10  Daniel Sievers  <sievers@chromium.org>

        [Chromium] Do not recreate texture updater for image layer if one exists.
        https://bugs.webkit.org/show_bug.cgi?id=75589

        Reviewed by James Robinson.

        Test: platform/chromium/compositing/img-layer-grow.html

        * platform/graphics/chromium/ImageLayerChromium.cpp:
        (WebCore::ImageLayerChromium::createTextureUpdater):

2012-01-10  Mike Reed  <reed@google.com>

        [skia] not all convex paths are convex, so recompute convexity for the problematic ones
        https://bugs.webkit.org/show_bug.cgi?id=75960

        Reviewed by Stephen White.

        No new tests.
        See related chrome issue
        http://code.google.com/p/chromium/issues/detail?id=108605

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

2012-01-10  Gavin Barraclough  <barraclough@apple.com>

        Do not allow Array length to be set if it is non-configurable
        https://bugs.webkit.org/show_bug.cgi?id=75935

        Reviewed by Sam Weinig.

        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::CloneDeserializer::deserialize):
            - remove unnecessary call to JSArray::setLength.

2012-01-10  Adrienne Walker  <enne@google.com>

        [chromium] Draw debug tile borders on composited layers
        https://bugs.webkit.org/show_bug.cgi?id=75680

        Reviewed by James Robinson.

        On tiled layers, draw debug borders on the tiles themselves. By
        default, these are one pixel wide and transparent, so should be
        unobtrusive but informative. They are triggered when the layer itself
        would have a debug border via the existing flags.

        Also, fix the drawDebugBorderQuad function to handle arbitrarily
        positioned quads, not just full layer quads. Also, fix alpha issue
        with debug borders.

        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::drawDebugBorderQuad):
        * platform/graphics/chromium/cc/CCDebugBorderDrawQuad.cpp:
        (WebCore::CCDebugBorderDrawQuad::CCDebugBorderDrawQuad):
        * platform/graphics/chromium/cc/CCLayerImpl.cpp:
        (WebCore::CCLayerImpl::appendDebugBorderQuad):
        (WebCore::CCLayerImpl::quadTransform):
        (WebCore::CCLayerImpl::hasDebugBorders):
        * platform/graphics/chromium/cc/CCLayerImpl.h:
        * platform/graphics/chromium/cc/CCTiledLayerImpl.cpp:
        (WebCore::CCTiledLayerImpl::appendQuads):

2012-01-10  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Missing Implementation of Public InspectorDOMAgent Function
        https://bugs.webkit.org/show_bug.cgi?id=75759

        Follow-up: Remove the unused method. Keep the setter private.

        Reviewed by Pavel Feldman.

        * inspector/InspectorDOMAgent.cpp:
        * inspector/InspectorDOMAgent.h:

2012-01-10  Pavel Feldman  <pfeldman@google.com>

        Not reviewed, follow up to r104586: fix assertion within the loop.

        * inspector/DOMEditor.cpp:
        (WebCore::DOMEditor::patchChildren):

2012-01-10  Brady Eidson  <beidson@apple.com>

        <rdar://problem/9328684> and https://bugs.webkit.org/show_bug.cgi?id=62764
        Frequent crashes due to null frame below ApplicationCacheHost::scheduleLoadFallbackResourceFromApplicationCache
 
        Reviewed by Maciej Stachowiak.

        This is a non-reproducible high volume crash, so no test :(. 

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::stopLoading): Don't re-run actual "stop loading" logic if the document loader is already
          stopping loading. Also add an ASSERT that might catch cases where new loads may have been started while old loads
          were being stopped.
        (WebCore::DocumentLoader::detachFromFrame): Be conservative and stop loading when we detach a document loader from a frame. 

2012-01-10  Pavel Feldman  <pfeldman@google.com>

        Not reviewed: fixing the Mac build.

        * inspector/DOMEditor.cpp:
        (WebCore::DOMEditor::patchChildren):

2012-01-09  Jer Noble  <jer.noble@apple.com>

        Elements can appear over fullscreen video
        https://bugs.webkit.org/show_bug.cgi?id=75913

        Reviewed by Simon Fraser.

        No new tests; updated fullscreen/full-screen-zIndex.html to trigger error condition.

        RenderFullScreenPlaceholder inherits the pre-fullscreen element's style, causing a stacking
        context to be created.  Instead of making the placeholder the parent of the RenderFullScreen
        object, make the two renderers siblings.  Then the stacking context created by the placeholder
        will not affect the z-ordering of the RenderFullScreen.

        * rendering/RenderFullScreen.cpp:
        (RenderFullScreen::wrapRenderer):
        (RenderFullScreen::unwrapRenderer):
        (RenderFullScreen::createPlaceholder):

2012-01-10  Pavel Feldman  <pfeldman@google.com>

        Web Inspector: add "free flow DOM editing" experiment.
        https://bugs.webkit.org/show_bug.cgi?id=75955

        This change enables HTML editing from Resources panel experiment.

        Reviewed by Yury Semikhatsky.

        * CMakeLists.txt:
        * English.lproj/localizedStrings.js:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * inspector/DOMEditor.cpp: Added.
        (WebCore::DOMEditor::DOMEditor):
        (WebCore::DOMEditor::~DOMEditor):
        (WebCore::DOMEditor::patch):
        (WebCore::DOMEditor::NodeDigest::NodeDigest):
        (WebCore::DOMEditor::patchElement):
        (WebCore::DOMEditor::patchNode):
        (WebCore::DOMEditor::patchChildren):
        (WebCore::addStringToSHA1):
        (WebCore::DOMEditor::createNodeDigest):
        * inspector/DOMEditor.h: Added.
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::setOuterHTML):
        * inspector/front-end/DOMAgent.js:
        (WebInspector.DOMAgent):
        (WebInspector.DOMModelResourceBinding):
        (WebInspector.DOMModelResourceBinding.prototype.setContent):
        (WebInspector.DOMModelResourceBinding.prototype.canSetContent):
        * inspector/front-end/Settings.js:
        (WebInspector.ExperimentsSettings):

2012-01-10  Stephen Chenney  <schenney@chromium.org>

        [Chromium] Shift PathSkia to use Skia's new RawIter
        https://bugs.webkit.org/show_bug.cgi?id=75703

        Reviewed by Nikolas Zimmermann.

        No new tests required - covered by existing tests.

        * platform/graphics/Path.h: Added comments ont he return values from iteration.
        * platform/graphics/skia/PathSkia.cpp:
        (WebCore::Path::apply): Switched to SkPath::RawIter

2012-01-10  Peter Beverloo  <peter@chromium.org>

        [Chromium] Use SkFontHost::GetUnitsPerEm instead of advanced type
        metrics for Android in FontPlatformData
        https://bugs.webkit.org/show_bug.cgi?id=75702

        Reviewed by Stephen White.

        Since Skia for Android doesn't implement advanced type metric routines,
        use an alternative method to calculate the number of font units for an
        em size. This will be exercized by existing layout tests, as it's being
        used by the ComplexTextController.

        * platform/graphics/harfbuzz/FontPlatformDataHarfBuzz.cpp:
        (WebCore::FontPlatformData::emSizeInFontUnits):

2012-01-10  Vsevolod Vlasov  <vsevik@chromium.org>

        Unreviewed, inspector style fix.

        Web Inspector: elements tree is shifted 12px to the right.
        https://bugs.webkit.org/show_bug.cgi?id=75609

        * inspector/front-end/elementsPanel.css:
        (#elements-content):

2012-01-10  Zoltan Herczeg  <zherczeg@webkit.org>

        Fix style errors in CSSParser.cpp
        https://bugs.webkit.org/show_bug.cgi?id=75854

        Reviewed by Nikolas Zimmermann.

        Minor style fixes.

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):
        (WebCore::CSSParser::parseShadow):
        (WebCore::isBorderImageRepeatKeyword):
        (WebCore::BorderImageSliceParseContext::commitBorderImageSlice):
        (WebCore::BorderImageQuadParseContext::commitBorderImageQuad):
        (WebCore::filterInfoForName):

2012-01-10  Julien Chaffraix  <jchaffraix@webkit.org>

        REGRESSION (r93614): Safari Reader doesn't repaint correctly when scrolling
        https://bugs.webkit.org/show_bug.cgi?id=67100

        Reviewed by Dan Bernstein.

        Tests: fast/layers/scroll-with-transform-composited-layer.html
               fast/layers/scroll-with-transform-layer.html

        The regression came from a previous optimization that was wrongly kept after r93614.

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateLayerPositionsAfterScroll):
        Remove the early return for transformed layer. This change worked as we used
        to call updateLayerPositions from scrollTo which would call updateLayerPosition on
        all our descendants. After r93614, this is no longer the case and we explicitely need
        to call updateLayerPosition on our descendants from updateLayerPositionsAfterScroll.

2012-01-10  Stephen White  <senorblanco@chromium.org>

        Fix Chrome/Mac build.

        Build fix; unreviewed.

        * platform/graphics/filters/skia/FEColorMatrixSkia.cpp:
        (WebCore::luminanceToAlphaMatrix):

2012-01-06  Stephen White  <senorblanco@chromium.org>

        [Skia] Switch FEColorMatrix to use a skia-based implementation when
        compiling with USE(SKIA).  This change will also switch the software
        implementation of FEGaussianBlur to the skia implementation (ie.,
        it removes the acceleration check).
        https://bugs.webkit.org/show_bug.cgi?id=75582

        Reviewed by Dirk Schulze.

        Covered by svg/W3C-SVG-1.1/filters-color-01-b.svg and friends (will
        need a rebaseline).

        * WebCore.gypi:
        Add FEColorMatrixSkia.cpp to the build.
        * platform/graphics/filters/FEColorMatrix.h:
        Add platformApplySkia().
        * platform/graphics/filters/FEGaussianBlur.cpp:
        (WebCore::FEGaussianBlur::platformApplySoftware):
        Remove skia-specific code from FEGaussianBlur::platformApplySoftware().
        * platform/graphics/filters/FEGaussianBlur.h:
        Make platformApplySkia() virtual, and put it behind #if USE(SKIA).
        * platform/graphics/filters/FilterEffect.cpp:
        (WebCore::FilterEffect::apply):
        Call out to platformApplySkia(), or fall back to
        platformApplySoftware().
        * platform/graphics/filters/FilterEffect.h:
        Add platformApplySkia().
        * platform/graphics/filters/skia/FEColorMatrixSkia.cpp: Added.
        (WebCore::saturateMatrix):
        (WebCore::hueRotateMatrix):
        (WebCore::luminanceToAlphaMatrix):
        (WebCore::FEColorMatrix::platformApplySkia):
        Process color matrix effect, by calling out to generic matrix
        version of SkColorMatrixFilter.
        * platform/graphics/filters/skia/FEGaussianBlurSkia.cpp:
        (WebCore::FEGaussianBlur::platformApplySkia):
        Change the signature of FEGaussianBlur::platformApplySkia to be an
        override of the new FilterEffect base class version.

2012-01-10  Pavel Feldman  <pfeldman@google.com>

        Web Inspector: fix DebuggerPresentationModel::uiSourceCodes - do not iterate
        over same raw source code multiple times.
        https://bugs.webkit.org/show_bug.cgi?id=75953

        Reviewed by Yury Semikhatsky.

        * inspector/front-end/DebuggerPresentationModel.js:
        (WebInspector.DebuggerPresentationModel):
        (WebInspector.DebuggerPresentationModel.prototype._bindScriptToRawSourceCode):
        (WebInspector.DebuggerPresentationModel.prototype.uiSourceCodes):
        (WebInspector.DebuggerPresentationModel.prototype.setFormatSource):
        (WebInspector.DebuggerPresentationModel.prototype._consoleCleared):
        (WebInspector.DebuggerPresentationModel.prototype._debuggerReset):

2012-01-10  No'am Rosenthal  <noam.rosenthal@nokia.com>

        [Qt] Enable CSS_FILTERS in Qt build
        https://bugs.webkit.org/show_bug.cgi?id=75777

        Enable CSS_FILTERS and unskip the tests.

        Reviewed by Kenneth Rohde Christiansen.

        Filter tests are now unskipped for Qt.

        * Target.pri: add missing files to build.

2012-01-10  Pavel Feldman  <pfeldman@google.com>

        Web Inspector: typo: NetworkAgent.canClearBrowserCache -> NetworkAgent.canClearBrowserCookies.
        https://bugs.webkit.org/show_bug.cgi?id=75949

        Reviewed by Andreas Kling.

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

2012-01-10  pfeldman@chomium.org  <pavel.feldman@gmail.com>

        Web Inspector: restore front-end compilation
        https://bugs.webkit.org/show_bug.cgi?id=75625

        Reviewed by Yury Semikhatsky.

        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.SingleFileEditorContainer.prototype.replaceSourceFrames):
        * inspector/front-end/TabbedPane.js:
        * inspector/front-end/externs.js:
        (WebInspector.isCompactMode):
        * inspector/front-end/treeoutline.js:

2012-01-10  Grzegorz Czajkowski  <g.czajkowski@samsung.com>

        Add NULL checks to setting access obtained on frame and document.
        https://bugs.webkit.org/show_bug.cgi?id=72002

        Reviewed by Andreas Kling.

        Adds NULL checks to setting object where it's required.
        Generally WebCore checks NULL which may be returned from setting object obtained
        on frame or document but in some cases these are skipped. These checks are not
        needed to setting's access on page object.

        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::shouldAccelerate):
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::scheduleArchiveLoad):
        * loader/SubframeLoader.cpp:
        (WebCore::SubframeLoader::requestPlugin):
        * loader/appcache/ApplicationCacheGroup.cpp:
        (WebCore::ApplicationCacheGroup::selectCache):
        (WebCore::ApplicationCacheGroup::selectCacheWithoutManifestURL):
        * page/DragController.cpp:
        (WebCore::DragController::draggableNode):
        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleMouseReleaseEvent):
        * page/FocusController.cpp:
        (WebCore::FocusController::advanceFocusInDocumentOrder):
        * rendering/RenderFrameSet.cpp:
        (WebCore::RenderFrameSet::flattenFrameSet):
        * rendering/RenderIFrame.cpp:
        (WebCore::RenderIFrame::flattenFrame):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::updateBacking):
        * rendering/RenderText.cpp:
        (WebCore::SecureTextTimer::restartWithNewText):

2012-01-10  Andreas Kling  <awesomekling@apple.com>

        Matched declaration cache should support mapped attribute declarations.
        <http://webkit.org/b/75948>

        Reviewed by Antti Koivisto.

        Support caching of matches that include mapped attribute declarations.
        To make this possible, let the cache hold references to the matched style declarations.
        Otherwise, declarations are assumed to survive until ~CSSStyleSelector, which may not
        be the case for CSSMappedAttributeDeclaration.

        To avoid hoarding of stale CSSMappedAttributeDeclarations in the cache, do a sweep for
        every 100 additions and garbage collect any entries containing a declaration that is
        only referenced by the cache.

        This increases cache hit rate by up to ~10% on the Alexa top sites.

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::CSSStyleSelector):
        (WebCore::CSSStyleSelector::sweepMatchedDeclarationCache):
        (WebCore::CSSStyleSelector::matchAllRules):
        (WebCore::CSSStyleSelector::applyDeclarations):
        (WebCore::CSSStyleSelector::addToMatchedDeclarationCache):
        * css/CSSStyleSelector.h:

2012-01-10  Kenichi Ishibashi  <bashi@chromium.org>

        Complex path should be used when UVS exists in text run
        https://bugs.webkit.org/show_bug.cgi?id=75289

        Uses complex path when a text run contains UVS. The range from U+180B to U+180D already uses complex path.
        Removes unnecessary functions that were added by r102915.

        Reviewed by Dan Bernstein.

        No new tests. fast/text/unicode-variation-selector.html should take care of this change.

        * platform/graphics/Font.cpp:
        (WebCore::Font::codePath): Use Complex path when the text run contains UVS.
        * platform/graphics/SimpleFontData.h: Removed updateGlyphWithVariationSelector().
        * platform/graphics/SurrogatePairAwareTextIterator.cpp: Removed unnecessary static functions.
        * platform/graphics/SurrogatePairAwareTextIterator.h: Removed hasTrailingVariationSelector().
        * platform/graphics/WidthIterator.cpp:
        (WebCore::WidthIterator::advance): Removed UVS detection code.
        * platform/graphics/chromium/SimpleFontDataChromiumWin.cpp: Removed updateGlyphWithVariationSelector().
        * platform/graphics/freetype/SimpleFontDataFreeType.cpp: Ditto.
        * platform/graphics/harfbuzz/SimpleFontDataSkia.cpp: Ditto.
        * platform/graphics/mac/SimpleFontDataMac.mm: Ditto.
        * platform/graphics/pango/SimpleFontDataPango.cpp: Ditto.
        * platform/graphics/qt/SimpleFontDataQt.cpp: Ditto.
        * platform/graphics/win/SimpleFontDataWin.cpp: Ditto.
        * platform/graphics/wince/SimpleFontDataWinCE.cpp: Ditto.
        * platform/graphics/wx/SimpleFontDataWx.cpp: Ditto.

2012-01-10  Kenichi Ishibashi  <bashi@chromium.org>

        WebFonts are re-fetched from the server upon Document::styleSelectorChanged call.
        https://bugs.webkit.org/show_bug.cgi?id=73419

        Holds the CachedFont handle in CSSFontFaceSrcValue so that avoiding re-validation during style recalculation.

        Reviewed by Dan Bernstein.

        Test: http/tests/css/font-face-src-loading.html

        * css/CSSFontFaceSrcValue.cpp:
        (WebCore::CSSFontFaceSrcValue::cachedFont): Added.
        * css/CSSFontFaceSrcValue.h:
        * css/CSSFontSelector.cpp:
        (WebCore::CSSFontSelector::addFontFaceRule): Gets the CachedFont from CSSFontFaceSrcValue object. The object will request the resource if it doesn't exist.

2012-01-10  pfeldman@chomium.org  <pavel.feldman@gmail.com>

        Web Inspector: introduce experimental setting that makes source files always editable
        https://bugs.webkit.org/show_bug.cgi?id=75626

        Reviewed by Timothy Hatcher.

        * English.lproj/localizedStrings.js:
        * inspector/front-end/JavaScriptSourceFrame.js:
        (WebInspector.JavaScriptSourceFrame):
        (WebInspector.JavaScriptSourceFrame.prototype.setReadOnly):
        * inspector/front-end/NetworkPanel.js:
        (WebInspector.NetworkLogView):
        * inspector/front-end/ScriptsNavigator.js:
        (WebInspector.NavigatorScriptTreeElement.prototype.onselect):
        * inspector/front-end/Settings.js:
        (WebInspector.ExperimentsSettings):
        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame):
        (WebInspector.SourceFrame.prototype.get statusBarItems):
        (WebInspector.SourceFrame.prototype.setReadOnly):
        * inspector/front-end/inspector.js:
        (WebInspector.loaded):

2012-01-09  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r104507.
        http://trac.webkit.org/changeset/104507
        https://bugs.webkit.org/show_bug.cgi?id=75936

        Broke webkit_unit_tests (Requested by dimich on #webkit).

        * WebCore.gypi:
        * platform/graphics/chromium/RenderSurfaceChromium.h:
        * platform/graphics/chromium/cc/CCLayerIterator.cpp: Removed.
        * platform/graphics/chromium/cc/CCLayerIterator.h: Removed.
        * platform/graphics/chromium/cc/CCLayerIteratorPosition.h: Removed.
        * platform/graphics/chromium/cc/CCLayerTreeHost.cpp:
        (WebCore::CCLayerTreeHost::paintLayerContents):
        (WebCore::CCLayerTreeHost::updateCompositorResources):
        * platform/graphics/chromium/cc/CCLayerTreeHostCommon.cpp:
        (WebCore::walkLayersAndCalculateVisibleLayerRects):
        * platform/graphics/chromium/cc/CCRenderSurface.h:

2012-01-09  Rob Buis  <rbuis@rim.com>

        Upstream change to disable input[color] css rules for BlackBerry port
        https://bugs.webkit.org/show_bug.cgi?id=75719

        Reviewed by Antonio Gomes.

        Do not enable default css color rules for input["color"] for BlackBerry port.

        * CMakeLists.txt:

2012-01-09  Greg Billock  <gbillock@google.com>

        Implement navigator.startActivity; add IntentRequest object for managing web intents callbacks.
        Web content will invoke navigator.startActivity to launch a new Web
        Intents call. Each such call will map to an IntentRequest broker
        object which is used by client code to correlate any return data to
        the (optional) callbacks supplied by web content calls.
        https://bugs.webkit.org/show_bug.cgi?id=75756

        Reviewed by Adam Barth.

        Test: webintents/web-intents-api.html

        * Modules/intents/Intent.cpp: Added.
        (WebCore::Intent::identifier):
        (WebCore::Intent::setIdentifier):
        * Modules/intents/Intent.h: Added.
        * Modules/intents/Intent.idl: Added.
        * Modules/intents/IntentResultCallback.h: Added.
        (WebCore::IntentResultCallback::~IntentResultCallback):
        * Modules/intents/IntentResultCallback.idl: Added.
        * Modules/intents/IntentsRequest.cpp: Added.
        * Modules/intents/IntentsRequest.h: Added.
        * WebCore.gyp/WebCore.gyp:
        * WebCore.gypi:
        * bindings/scripts/CodeGeneratorV8.pm:
        (GetNativeTypeForCallbacks):
        * loader/FrameLoaderClient.h:
        (WebCore::FrameLoaderClient::dispatchIntent):

2012-01-09  Dan Bernstein  <mitz@apple.com>

        -[DOMRange renderedImageForcingBlackText:] fails with non-user-selectable text
        https://bugs.webkit.org/show_bug.cgi?id=75920

        Reviewed by Darin Adler.

        Test: added to TestWebKitAPI/Tests/mac/RenderedImageFromDOMRange.mm

        * page/mac/FrameMac.mm:
        (WebCore::Frame::rangeImage): Removed the requirement that the start and end positions used
        for setting the selection in the render tree be candidates.

2012-01-06  Hajime Morrita  <morrita@chromium.org>

        [Refactoring] Moving between TreeScopes should be done by its own class.
        https://bugs.webkit.org/show_bug.cgi?id=75290

        Reviewed by Ryosuke Niwa.

        This change extracted Node::setTreeScopeRecursively(),
        setDocumentRecursively() and a part of setDocument() into a new
        class called TreeScopeAdopter. By doing this, the idea of
        moving a node from scope to scope, that was originally hidden
        behind the forest of Node APIs, has become clearer.

        Note that this change is a preparation for Bug 59816.

        No new tests. No behavioral change.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/ContainerNode.cpp: Followed the renaming.
        (WebCore::ContainerNode::takeAllChildrenFrom):
        (WebCore::ContainerNode::insertBefore):
        (WebCore::ContainerNode::replaceChild):
        (WebCore::ContainerNode::removeBetween):
        (WebCore::ContainerNode::removeChildren):
        (WebCore::ContainerNode::appendChild):
        (WebCore::ContainerNode::parserAddChild):
        * dom/DOMAllInOne.cpp:
        * dom/Document.cpp: Followed te renaming.
        (WebCore::Document::setDocType):
        (WebCore::Document::adoptNode):
        * dom/Element.cpp: Followed te renaming.
        (WebCore::Element::removeShadowRoot):
        * dom/Node.cpp:
        (WebCore::Node::setDocument):
        (WebCore::Node::setTreeScope):
        (WebCore::Node::didMoveToNewDocument):
        * dom/Node.h:
        * dom/TreeScope.h:
        * dom/TreeScope.cpp:
        (WebCore::TreeScope::adoptIfNeeded): moved from setTreeScopeRecursively()
        * dom/TreeScopeAdopter.cpp: Added.
        (WebCore::TreeScopeAdopter::TreeScopeAdopter):
        (WebCore::TreeScopeAdopter::moveTreeToNewScope):
        (WebCore::TreeScopeAdopter::moveTreeToNewDocument):
        (WebCore::TreeScopeAdopter::ensureDidMoveToNewDocumentWasCalled):
        (WebCore::TreeScopeAdopter::moveNodeToNewDocument):
        * dom/TreeScopeAdopter.h: Added.
        (WebCore::TreeScopeAdopter::ensureDidMoveToNewDocumentWasCalled):
        (WebCore::TreeScopeAdopter::execute):
        (WebCore::TreeScopeAdopter::needsScopeChange()):
        (WebCore::TreeScopeAdopter::shadowRootFor):

2012-01-09  Adam Barth  <abarth@webkit.org>

        run-bindings-tests should exercise all the IDL attributes we use
        https://bugs.webkit.org/show_bug.cgi?id=75900

        Reviewed by Eric Seidel.

        I just grepped through the code generator script for IDL attributes and
        wrote tests for them.

        * bindings/scripts/test/CPP/WebDOMTestActiveDOMObject.cpp: Added.
        * bindings/scripts/test/CPP/WebDOMTestActiveDOMObject.h: Added.
        * bindings/scripts/test/CPP/WebDOMTestEventTarget.cpp: Added.
        * bindings/scripts/test/CPP/WebDOMTestEventTarget.h: Added.
        * bindings/scripts/test/CPP/WebDOMTestObj.cpp:
        * bindings/scripts/test/CPP/WebDOMTestObj.h:
        * bindings/scripts/test/CPP/WebDOMTestOverridingNameGetter.cpp: Added.
        * bindings/scripts/test/CPP/WebDOMTestOverridingNameGetter.h: Added.
        * bindings/scripts/test/GObject/WebKitDOMTestActiveDOMObject.cpp: Added.
        * bindings/scripts/test/GObject/WebKitDOMTestActiveDOMObject.h: Added.
        * bindings/scripts/test/GObject/WebKitDOMTestActiveDOMObjectPrivate.h: Added.
        * bindings/scripts/test/GObject/WebKitDOMTestEventTarget.cpp: Added.
        * bindings/scripts/test/GObject/WebKitDOMTestEventTarget.h: Added.
        * bindings/scripts/test/GObject/WebKitDOMTestEventTargetPrivate.h: Added.
        * bindings/scripts/test/GObject/WebKitDOMTestObj.cpp:
        * bindings/scripts/test/GObject/WebKitDOMTestObj.h:
        * bindings/scripts/test/GObject/WebKitDOMTestOverridingNameGetter.cpp: Added.
        * bindings/scripts/test/GObject/WebKitDOMTestOverridingNameGetter.h: Added.
        * bindings/scripts/test/GObject/WebKitDOMTestOverridingNameGetterPrivate.h: Added.
        * bindings/scripts/test/JS/JSTestActiveDOMObject.cpp: Added.
        * bindings/scripts/test/JS/JSTestActiveDOMObject.h: Added.
        * bindings/scripts/test/JS/JSTestEventConstructor.cpp:
        * bindings/scripts/test/JS/JSTestEventTarget.cpp: Added.
        * bindings/scripts/test/JS/JSTestEventTarget.h: Added.
        * bindings/scripts/test/JS/JSTestInterface.cpp:
        * bindings/scripts/test/JS/JSTestInterface.h:
        * bindings/scripts/test/JS/JSTestObj.cpp:
        * bindings/scripts/test/JS/JSTestObj.h:
        * bindings/scripts/test/JS/JSTestOverridingNameGetter.cpp: Added.
        * bindings/scripts/test/JS/JSTestOverridingNameGetter.h: Added.
        * bindings/scripts/test/ObjC/DOMTestActiveDOMObjectInternal.h: Added.
        * bindings/scripts/test/ObjC/DOMTestEventTarget.h: Added.
        * bindings/scripts/test/ObjC/DOMTestEventTarget.mm: Added.
        * bindings/scripts/test/ObjC/DOMTestEventTargetInternal.h: Added.
        * bindings/scripts/test/ObjC/DOMTestObj.h:
        * bindings/scripts/test/ObjC/DOMTestObj.mm:
        * bindings/scripts/test/ObjC/DOMTestOverridingNameGetter.h: Added.
        * bindings/scripts/test/ObjC/DOMTestOverridingNameGetter.mm: Added.
        * bindings/scripts/test/ObjC/DOMTestOverridingNameGetterInternal.h: Added.
        * bindings/scripts/test/TestDomainSecurity.idl: Added.
        * bindings/scripts/test/TestEventConstructor.idl:
        * bindings/scripts/test/TestEventTarget.idl: Added.
        * bindings/scripts/test/TestInterface.idl:
        * bindings/scripts/test/TestObj.idl:
        * bindings/scripts/test/TestOverridingNameGetter.idl: Added.
        * bindings/scripts/test/V8/V8TestActiveDOMObject.cpp: Added.
        * bindings/scripts/test/V8/V8TestActiveDOMObject.h: Added.
        * bindings/scripts/test/V8/V8TestEventConstructor.cpp:
        * bindings/scripts/test/V8/V8TestEventTarget.cpp: Added.
        * bindings/scripts/test/V8/V8TestEventTarget.h: Added.
        * bindings/scripts/test/V8/V8TestInterface.h:
        * bindings/scripts/test/V8/V8TestObj.cpp:
        * bindings/scripts/test/V8/V8TestOverridingNameGetter.cpp: Added.
        * bindings/scripts/test/V8/V8TestOverridingNameGetter.h: Added.

2012-01-09  Nat Duca  <nduca@chromium.org>

        [chromium] Add documentation to updater classes
        https://bugs.webkit.org/show_bug.cgi?id=75866

        Reviewed by James Robinson.

        * platform/graphics/chromium/BitmapCanvasLayerTextureUpdater.h:
        * platform/graphics/chromium/BitmapSkPictureCanvasLayerTextureUpdater.h:
        * platform/graphics/chromium/CanvasLayerTextureUpdater.h:
        * platform/graphics/chromium/FrameBufferSkPictureCanvasLayerTextureUpdater.h:
        * platform/graphics/chromium/SkPictureCanvasLayerTextureUpdater.h:

2012-01-09  Adam Barth  <abarth@webkit.org>

        Remove unused variable from CodeGeneratorV8
        https://bugs.webkit.org/show_bug.cgi?id=75895

        Reviewed by Eric Seidel.

        Unused variables aren't worth keeping around.

        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateHeader):
        (GenerateImplementation):

2012-01-09  Dana Jansens  <danakj@chromium.org>

        [chromium] Create iterators for the RenderSurface-Layer tree
        https://bugs.webkit.org/show_bug.cgi?id=74203

        Reviewed by James Robinson.

        New unit tests: CCLayerIteratorTest.cpp

        * WebCore.gypi:
        * platform/graphics/chromium/RenderSurfaceChromium.h:
        * platform/graphics/chromium/cc/CCLayerIterator.cpp: Added.
        (WebCore::CCLayerIteratorActions::BackToFront::begin):
        (WebCore::CCLayerIteratorActions::BackToFront::end):
        (WebCore::CCLayerIteratorActions::BackToFront::next):
        (WebCore::CCLayerIteratorActions::FrontToBack::begin):
        (WebCore::CCLayerIteratorActions::FrontToBack::end):
        (WebCore::CCLayerIteratorActions::FrontToBack::next):
        (WebCore::CCLayerIteratorActions::FrontToBack::goToHighestInSubtree):
        * platform/graphics/chromium/cc/CCLayerIterator.h: Added.
        (WebCore::CCLayerIterator::CCLayerIterator):
        (WebCore::CCLayerIterator::begin):
        (WebCore::CCLayerIterator::end):
        (WebCore::CCLayerIterator::operator++):
        (WebCore::CCLayerIterator::operator==):
        (WebCore::CCLayerIterator::operator!=):
        (WebCore::CCLayerIterator::operator->):
        (WebCore::CCLayerIterator::operator*):
        (WebCore::CCLayerIterator::representsTargetRenderSurface):
        (WebCore::CCLayerIterator::representsContributingRenderSurface):
        (WebCore::CCLayerIterator::representsItself):
        (WebCore::CCLayerIterator::targetRenderSurfaceLayer):
        * platform/graphics/chromium/cc/CCLayerIteratorPosition.h: Added.
        (WebCore::CCLayerIteratorPosition::CCLayerIteratorPosition):
        (WebCore::CCLayerIteratorPosition::currentLayer):
        (WebCore::CCLayerIteratorPosition::currentLayerRepresentsContributingRenderSurface):
        (WebCore::CCLayerIteratorPosition::currentLayerRepresentsTargetRenderSurface):
        (WebCore::CCLayerIteratorPosition::targetRenderSurfaceLayer):
        (WebCore::CCLayerIteratorPosition::targetRenderSurface):
        (WebCore::CCLayerIteratorPosition::targetRenderSurfaceChildren):
        (WebCore::CCLayerIteratorPosition::operator==):
        * platform/graphics/chromium/cc/CCLayerTreeHost.cpp:
        (WebCore::CCLayerTreeHost::paintLayerContents):
        (WebCore::CCLayerTreeHost::updateCompositorResources):
        * platform/graphics/chromium/cc/CCLayerTreeHostCommon.cpp:
        (WebCore::walkLayersAndCalculateVisibleLayerRects):
        * platform/graphics/chromium/cc/CCRenderSurface.h:

2012-01-09  Joshua Bell  <jsbell@chromium.org>

        IndexedDB: Throw exception if IDBCursor.continue() called with lower key than current
        https://bugs.webkit.org/show_bug.cgi?id=74213

        Reviewed by Tony Chang.

        * storage/IDBCursorBackendImpl.cpp:
        (WebCore::IDBCursorBackendImpl::continueFunction):

2012-01-09  Justin Novosad  <junov@chromium.org>

        [chromium win] Creating lots of temporary canvas contexts will crash.
        https://bugs.webkit.org/show_bug.cgi?id=68420

        When using the skia port, the allocation of 2d canvas backing stores
        no longer needs to be done through a platform API (GDI/CG) because
        canvases now use skia for drawing text.  Removing the allocation through
        GDI on windows prevents resource exhaustion due to unreferenced canvases
        that are awaiting garbage collection.

        Reviewed by Stephen White.

        No new tests: Relying on existing canvas layout tests.

        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::createImageBuffer):
        * platform/graphics/ImageBuffer.h:
        * platform/graphics/skia/ImageBufferSkia.cpp:
        (WebCore::createNonPlatformCanvas):
        (WebCore::ImageBuffer::ImageBuffer):

2012-01-09  Avi Drissman  <avi@chromium.org>

        https://bugs.webkit.org/show_bug.cgi?id=75860
        [Chromium Mac] no background is drawn for input elements

        Reviewed by Dimitri Glazkov.

        Reverts r104240 for Chromium. Unfortunately the code that uses Cocoa
        API misbehaves when built with the 10.5 SDK, so we use SPI. For now.

        * rendering/RenderThemeChromiumMac.h:
        * rendering/RenderThemeChromiumMac.mm:
        (WebCore::RenderThemeChromiumMac::paintTextField):

2012-01-09  Pablo Flouret  <pablof@motorola.com>

        Compilation error on build-webkit --debug --no-3d-canvas on mac.
        https://bugs.webkit.org/show_bug.cgi?id=75878

        Reviewed by Alexey Proskuryakov.

        * html/canvas/WebGLContextEvent.cpp:

2012-01-09  Tom Sepez  <tsepez@chromium.org>

        Treat code="" attribute in embed tags similarly to applet tags.
        https://bugs.webkit.org/show_bug.cgi?id=75871

        Reviewed by Daniel Bates.

        Tests: http/tests/security/xssAuditor/embed-tag-code-attribute-2.html
               http/tests/security/xssAuditor/embed-tag-code-attribute.html

        * html/parser/XSSAuditor.cpp:
        (WebCore::XSSAuditor::filterEmbedToken):

2012-01-09  Justin Novosad  <junov@chromium.org>

        [Chromium] remove all references to the legacy accelerated 2d Canvas
        implementation
        https://bugs.webkit.org/show_bug.cgi?id=75108

        Purging an old settings flag that is no longer referenced

        Reviewed by Darin Fisher.

        * page/Settings.cpp:
        (WebCore::Settings::Settings):
        * page/Settings.h:

2012-01-09  Eric Carlson  <eric.carlson@apple.com>

        REGRESSION(r104327?): media/track/track-cues-cuechange.html and track-cues-enter-exit.html 
        intermittently time out, media/track/track-cues-seeking and  fails
        https://bugs.webkit.org/show_bug.cgi?id=75817

        Unreviewed, fix a problem introduced in r104327.

        No new tests, covered by existing tests.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::HTMLMediaElement): Initialize m_ignoreTrackDisplayUpdate.

2012-01-09  Raymond Toy  <rtoy@google.com>

        Add normalize attribute to ConvolverNode to disable normalization.
        https://bugs.webkit.org/show_bug.cgi?id=75126

        Reviewed by Kenneth Russell.

        Tests added in convolution-mono-mono.html.

        * platform/audio/Reverb.cpp:
        (WebCore::Reverb::Reverb): Add extra arg to indicate whether
        normalization is enabled or not, and do it.
        * platform/audio/Reverb.h: Update declaration.
        * webaudio/ConvolverNode.cpp:
        (WebCore::ConvolverNode::ConvolverNode): Initialize attribute (to
        true).
        (WebCore::ConvolverNode::setBuffer): Call Reverb with
        normalization argument.
        * webaudio/ConvolverNode.h:
        (WebCore::ConvolverNode::normalize): New method to return
        normalization. 
        (WebCore::ConvolverNode::setNormalize):  New method to set
        normalization. 
        * webaudio/ConvolverNode.idl: Add normalize attribute.
        * LayoutTests/webaudio/convolution-mono-mono.html:
        * LayoutTests/webaudio/convolution-mono-mono-expected.txt:
        * LayoutTests/webaudio/resources/convolution-testing.js:
        Test for convolution.  Tests only work when normalization is
        disabled.

2012-01-09  Judy Hao  <judy.liqiong-hao@nokia.com>

        [GStreamer] webkitwebsrc: pad template is leaked
        https://bugs.webkit.org/show_bug.cgi?id=74224

        Reviewed by Philippe Normand.

        Use a GstPadTemplate smart pointer in webkit_web_src_init to
        avoid a memory leak.

        Fixing memory leaks. So, no new test case is introduced.

        * platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:
        (webkit_web_src_init):

2012-01-09  Xianzhu Wang  <wangxianzhu@chromium.org>

        Avoid unnecessary TextureManager::reduceMemoryToLimit().
        https://bugs.webkit.org/show_bug.cgi?id=75632

        Unnecessary TextureManager::reduceMemoryToLimit() will cause some tile
        textures that are required soon to be unnecessarily removed/replaced,
        and degrade performance, sometimes significantly.

        For example, CCLayerTreeHost::setViewport will be called during
        scrolling. The original code would call TextureManager::reduceMemoryToLimit(),
        causing some textures unnecessarily discarded and then recreated
        repeatedly during scrolling.

        It's also unnecessary to call TextureManager::reduceMemoryToLimit()
        from TextureManager::setPreferredMemoryLimitBytes() because the limit
        is not a hard limit. The callers should call reduceMemoryToLimit()
        explicitly if it wants it when setting the preferred memory limit.

        Reviewed by James Robinson.

        Tests: webkit_unit_tests --gtest_filter=TextureManagerTest.*:CCLayerTreeHostTestSetViewportSize.*

        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::finishDrawingFrame): Call reduceMemoryToLimit() explicitly
        * platform/graphics/chromium/TextureManager.cpp:
        (WebCore::TextureManager::setPreferredMemoryLimitBytes): Removed call to reduceMemoryToLimit().
        * platform/graphics/chromium/cc/CCLayerTreeHost.cpp:
        (WebCore::CCLayerTreeHost::finishCommitOnImplThread):
        (WebCore::CCLayerTreeHost::setViewportSize): Changed name from setViewport(). Check change of viewportSize.
        * platform/graphics/chromium/cc/CCLayerTreeHost.h:
        * platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:
        (WebCore::CCLayerTreeHostImpl::setViewportSize): Changed name from setViewport()
        * platform/graphics/chromium/cc/CCLayerTreeHostImpl.h:

2012-01-09  Sami Kyostila  <skyostil@chromium.org>

        [Chromium] JPEG RGB swizzling order should match platform pixel format
        https://bugs.webkit.org/show_bug.cgi?id=75861

        Choose between JCS_EXT_BGRX and JCS_EXT_RGBX channel swizzling
        based on the configured Skia 32-bit pixel format.

        Reviewed by Kenneth Russell.

        * platform/image-decoders/jpeg/JPEGImageDecoder.cpp:
        (rgbOutputColorSpace):

2012-01-09  Alexis Menard  <alexis.menard@openbossa.org>

        getComputedStyle for border-radius is not implemented.
        https://bugs.webkit.org/show_bug.cgi?id=75630

        Reviewed by Tony Chang.

        Implement getComputedStyle for border-radius shorthand property.

        Test: fast/css/getComputedStyle/getComputedStyle-border-radius-shorthand.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::getBorderRadiusCornerValues):
        (WebCore::getBorderRadiusCornerValue):
        (WebCore::getBorderRadiusShorthandValue):
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):

2012-01-09  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r104418.
        http://trac.webkit.org/changeset/104418
        https://bugs.webkit.org/show_bug.cgi?id=75855

        we still need to build against CG on Mac sometimes (Requested
        by epoger on #webkit).

        * WebCore.gyp/WebCore.gyp:

2012-01-09  Martin Robinson  <mrobinson@igalia.com>

        [GTK] [AC] Simplify accelerated compositing build options
        https://bugs.webkit.org/show_bug.cgi?id=75518

        Reviewed by Gustavo Noronha Silva.

        * GNUmakefile.am: Automatically enable 3D rendering when AC is available.
        * GNUmakefile.list.am: Clean up a comment.

2012-01-09  Antti Koivisto  <antti@apple.com>

        possible regression: r104060 maybe causing crashes
        https://bugs.webkit.org/show_bug.cgi?id=75676

        Reviewed by Andreas Kling.

        Based on the stacks, CSSStyleSelector may be getting deleted from under the
        CSSStyleSelector::appendAuthorStylesheets call. Protect by temporarily detaching
        from the document. Also add assertions to catch the case.
        
        No test, there is no known repro and the fix is speculative.

        * dom/Document.cpp:
        (WebCore::Document::Document):
        (WebCore::Document::setDocType):
        (WebCore::Document::childrenChanged):
        (WebCore::Document::clearStyleSelector):
        (WebCore::Document::updateActiveStylesheets):
        * dom/Document.h:

2012-01-09  Caio Marcelo de Oliveira Filho  <caio.oliveira@openbossa.org>

        Use Vector<OwnPtr> for m_viewportDependentMediaQueryResults in CSSStyleSelector
        https://bugs.webkit.org/show_bug.cgi?id=75723

        Reviewed by Andreas Kling.

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::~CSSStyleSelector):
        (WebCore::CSSStyleSelector::addViewportDependentMediaQueryResult):
        * css/CSSStyleSelector.h:

2012-01-09  Alexis Menard  <alexis.menard@openbossa.org>

        Extend CSSValueList to allow slash separated lists.
        https://bugs.webkit.org/show_bug.cgi?id=75841

        Reviewed by Andreas Kling.

        Multiple CSS properties are using slash to separate
        various parts (e.g. border-radius) so having this
        feature available in CSSValueList will make it easier
        in the future to support these properties.

        No new tests : existing ones should cover the refactor.

        * css/CSSInitialValue.h:
        (WebCore::CSSInitialValue::isImplicit):
        (WebCore::CSSInitialValue::CSSInitialValue):
        * css/CSSValue.cpp:
        (WebCore::CSSValue::isImplicitInitialValue):
        * css/CSSValue.h:
        In order for CSSValue to not grow I moved m_isImplicitInitialValue
        back to CSSInitialValue as this object is used only in CSSValuePool
        and is allocated only twice.
        (WebCore::CSSValue::CSSValue):
        * css/CSSValueList.cpp:
        (WebCore::CSSValueList::CSSValueList):
        (WebCore::CSSValueList::copy):
        Fix also usage of PassRefPtr.
        (WebCore::CSSValueList::customCssText):
        Refactor to use StringBuilder.
        * css/CSSValueList.h:
        (WebCore::CSSValueList::createCommaSeparated):
        (WebCore::CSSValueList::createSpaceSeparated):
        (WebCore::CSSValueList::createSlashSeparated):
        * css/WebKitCSSFilterValue.cpp:
        (WebCore::WebKitCSSFilterValue::WebKitCSSFilterValue):
        * css/WebKitCSSTransformValue.cpp:
        (WebCore::WebKitCSSTransformValue::WebKitCSSTransformValue):

2012-01-09  No'am Rosenthal  <noam.rosenthal@nokia.com>

        [Texmap] Move surface management from TextureMapperNode to TextureMapper
        https://bugs.webkit.org/show_bug.cgi?id=75779

        Instead of a TextureMapperSurfaceManager class inside of TextureMapperNode.cpp, we now
        maintain that surface pool inside of the TextureMapper class. This will later allow us to
        allocate intermediate surface from within TextureMapperGL, a functionality we need for
        filters.

        Also, surfaces are not automatically created with the viewport size, but rather with the
        size passed as a parameter. The surface from the pool is the smallest texture that is
        larger than the required size, or any texture if such texture is not yet allocated.

        Reviewed by Kenneth Rohde Christiansen.

        Tests in LayoutTests/compositing already cover this.

        * GNUmakefile.list.am: Added TextureMapper.cpp to the build.
        * Target.pri: Added TextureMapper.cpp to the build.
        * WebCore.gypi: Added TextureMapper.cpp to the build.
        * platform/graphics/texmap/TextureMapper.cpp: Added.
        * platform/graphics/texmap/TextureMapper.h:
        * platform/graphics/texmap/TextureMapperNode.cpp:
        (WebCore::TextureMapperNode::paint):
        (WebCore::TextureMapperNode::paintReflection):
        (WebCore::TextureMapperNode::paintRecursive):
        * platform/graphics/texmap/TextureMapperNode.h:
        (WebCore::TextureMapperNode::TextureMapperNode):

2012-01-09  Mario Sanchez Prada  <msanchez@igalia.com>

        [Gtk] Regression: text-inserted events lack text inserted and current line
        https://bugs.webkit.org/show_bug.cgi?id=72830

        Reviewed by Martin Robinson.

        Fix issue getting the exposed text for an accessibility object at,
        before of after a given offset, after changing it at least once.

        * accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:
        (webkit_accessible_class_init): Don't initialize
        gailTextUtilQuark, it won't be used anymore.
        (getGailTextUtilForAtk): Don't cache the GailTextUtil as object
        data, but create a new one each time this function is called.
        (webkit_accessible_text_get_caret_offset): Simplified code by
        using the new focusedObjectAndCaretOffsetUnignored function,
        instead of the old objectAndOffsetUnignored function.
        (focusedObjectAndCaretOffsetUnignored): Rewrite of the old
        objectAndOffsetUnignored function so it now needs less
        parameters than before and takes care of carefully selecting the
        start and end visible positions to calculate the position of the
        caret from the point of view of the accessibility object of
        reference passed as the only input parameter now. Updated callers.
        * accessibility/gtk/AccessibilityObjectWrapperAtk.h:

        * editing/gtk/FrameSelectionGtk.cpp:
        (WebCore::FrameSelection::notifyAccessibilityForSelectionChange):
        Simplified code by calling to focusedObjectAndCaretOffsetUnignored
        function, instead of the old objectAndOffsetUnignored function.

2012-01-09  Antti Koivisto  <antti@apple.com>

        Subtree invalidation on stylesheet change
        https://bugs.webkit.org/show_bug.cgi?id=75834

        Reviewed by Andreas Kling.
        
        Currently if we add a stylesheet with scoped selectors and matching scope elements exist,
        we recalculate the entire document style. It is sufficient to invalidate the subtrees 
        matching the scope only.
        
        This allows us to do less full style recalcs on many popular web sites (nytimes.com for example).
        Subtree recalcs are typically much cheaper.
        
        Test: fast/css/id-or-class-before-stylesheet.html

        * dom/Document.cpp:
        (WebCore::Document::testAddedStylesheetRequiresStyleRecalc):
        (WebCore::Document::analyzeStylesheetChange):
        (WebCore::Document::updateActiveStylesheets):
        * dom/Document.h:

2012-01-09  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix make distcheck issues.

        * GNUmakefile.list.am: Add missing header.

2012-01-09  Kentaro Hara  <haraken@chromium.org>

        [Refactoring] Use join(", ", @arguments) to build a method argument string
        in CodeGeneratorJS.pm
        https://bugs.webkit.org/show_bug.cgi?id=75830

        Reviewed by Adam Barth.

        The code in CodeGeneratorJS.pm to build a method argument string is dirty
        and error-prone. It is concatenating arguments one by one judging whether
        ", " is necessary or not. This patch refactors the code so that it pushes
        all arguments into @arguments and then builds a method string by
        join(", ", @arguments).

        Test: bindings/scripts/test/*

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateImplementation):
        (GenerateParametersCheck):
        (GenerateImplementationFunctionCall):

2012-01-09  Andreas Kling  <awesomekling@apple.com>

        CSSMutableStyleDeclaration: Remove propertiesEqual().
        <http://webkit.org/b/75829>

        Reviewed by Antti Koivisto.

        Remove propertiesEqual() since it was wrong (it only compared CSSValue pointers,
        not the actual values.)

        Skip comparing the style declarations in NamedNodeMap::mappedMapsEquivalent()
        and just compare pointers instead. This is possible because the declarations
        all come from the mapped attribute/declaration table.

        * css/CSSMutableStyleDeclaration.h:
        * dom/NamedNodeMap.cpp:
        (WebCore::NamedNodeMap::mappedMapsEquivalent):

2012-01-09  Adam Barth  <abarth@webkit.org>

        insertAdjacentHTML doesn't play nice with DocumentFragment
        https://bugs.webkit.org/show_bug.cgi?id=75826

        Reviewed by Eric Seidel.

        Test: fast/dom/insertAdjacentHTML-DocumentFragment-crash.html

        Document nodes aren't the only non-Element ContainerNodes.

        * html/HTMLElement.cpp:
        (WebCore::contextElementForInsertion):

2012-01-09  Andreas Kling  <awesomekling@apple.com>

        CSSStyleSelector: Any attribute with a decl() can be assumed to be mapped.
        <http://webkit.org/b/75832>

        Reviewed by Antti Koivisto.

        Replace isMappedAttribute() check with an assertion. Only a mapped attribute
        will have an associated style declaration.

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

2012-01-09  Kentaro Hara  <haraken@chromium.org>

        [Refactoring] Use join(", ", @arguments) to build a method argument
        string in CodeGeneratorV8.pm
        https://bugs.webkit.org/show_bug.cgi?id=75828

        Reviewed by Darin Adler.

        The code in CodeGeneratorV8.pm to build a method argument string is dirty
        and error-prone. It is concatenating arguments one by one judging whether
        ", " is necessary or not. This patch refactors the code so that it pushes
        all arguments into @arguments and then builds a method string by
        join(", ", @arguments).

        Test: bindings/scripts/test/*

        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateFunctionCallString):

2012-01-08  Benjamin Poulain  <benjamin@webkit.org>

        Build fix: ScrollAnimatorMac has missing initializer in systemUptime()
        https://bugs.webkit.org/show_bug.cgi?id=75827

        Reviewed by Darin Adler.

        Explicitly initialize the struct timeval to avoid compiler warnings.

        * platform/mac/ScrollAnimatorMac.mm:
        (systemUptime):

2012-01-08  ChangSeok Oh  <shivamidow@gmail.com>

        Memory allocation mismatch by using adoptArrayPtr in GraphicsContext3DOpenGL.cpp
        https://bugs.webkit.org/show_bug.cgi?id=75820

        Reviewed by Darin Adler.

        Dbates submitted a patch to release fastMalloc allocation
        in GraphicsContext3DOpenGL.cpp properly.
        See http://trac.webkit.org/browser/trunk/Source/WebCore/ChangeLog?rev=104395
        But one thing similar to the above still remains mismatched.

        No new tests required.

        * platform/graphics/opengl/GraphicsContext3DOpenGL.cpp:
        (WebCore::GraphicsContext3D::getShaderInfoLog):

2012-01-08  Leo Yang  <leo.yang@torchmobile.com.cn>

        [BlackBerry] Use the concrete FrameNetworkingContextBlackBerry to access Frame
        https://bugs.webkit.org/show_bug.cgi?id=75611

        Reviewed by Antonio Gomes.

        In platform/network/blackberry/ResourceHandleBlackBerry.cpp, we were using
        NetworkingContext::wrappedFrame() to access the frame associated with the
        networking context. NetworkingContext::wrappedFrame() was added as a virtual
        function by the BlackBerry porting internally. It's unnecessary because
        FrameNetworkingContextBlackBerry inherits from FrameNetworkingContext which
        has a protected frame() member which is exported as public in
        FrameNetworkingContextBlackBerry. We don't want to upstream wrappedFrame()
        as a specific change of the BlackBerry porting in
        platform/network/NetworkingContext.h, so use the concrete networking context
        FrameNetworkingContextBlackBerry to access the associated frame.

        No functionalities changed, no new tests.

        * platform/network/blackberry/ResourceHandleBlackBerry.cpp:
        (WebCore::ResourceHandle::start):
        (WebCore::ResourceHandle::loadResourceSynchronously):

2012-01-08  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r104421.
        http://trac.webkit.org/changeset/104421
        https://bugs.webkit.org/show_bug.cgi?id=75816

        Need to rebaseline some tests on Linux (Requested by noamr on
        #webkit).

        * Target.pri:

2012-01-08  No'am Rosenthal  <noam.rosenthal@nokia.com>

        [Qt] Enable CSS_FILTERS in Qt build
        https://bugs.webkit.org/show_bug.cgi?id=75777

        Enable CSS_FILTERS and unskip the tests.

        Reviewed by Kenneth Rohde Christiansen.

        Filter tests are now unskipped for Qt.

        * Target.pri: add missing files to build.

2012-01-08  Adam Barth  <abarth@webkit.org>

        [Chromium] Remove use_skia option from GYP
        https://bugs.webkit.org/show_bug.cgi?id=75811

        Reviewed by Ryosuke Niwa.

        The CG configuration of Chromium Mac is no longer supported.

        * WebCore.gyp/WebCore.gyp:

2012-01-08  Benjamin Poulain  <benjamin@webkit.org>

        Valid canonical URLs should have a lowercase hostname
        https://bugs.webkit.org/show_bug.cgi?id=75771

        Reviewed by Adam Barth.

        According to the RFC 3986 (and other browsers implementation), the hostname
        of valid canonical URLs should be lowercase.

        This patch lowercase the hostname in KURL::parse() similarily to what we
        do for the scheme.

        Tests: fast/url/host-lowercase-per-scheme.html
               fast/url/safari-extension.html

        * platform/KURL.cpp:
        (WebCore::isCanonicalHostnameLowercaseForScheme):
        (WebCore::KURL::parse):

2012-01-08  Adam Barth  <abarth@webkit.org>

        Rename checkNodeSecurity and allowsAccessFromFrame to have sensible names
        https://bugs.webkit.org/show_bug.cgi?id=75796

        Reviewed by Sam Weinig.

        This patch contains only renames and FIXME comments.  No behavior change.

        * bindings/js/JSDOMBinding.cpp:
        (WebCore::allowAccessToNode):
        (WebCore::allowAccessToFrame):
        * bindings/js/JSDOMBinding.h:
        * bindings/js/JSHTMLFrameElementCustom.cpp:
        (WebCore::allowSettingJavascriptURL):
        * bindings/js/JSHistoryCustom.cpp:
        (WebCore::JSHistory::getOwnPropertySlotDelegate):
        (WebCore::JSHistory::getOwnPropertyDescriptorDelegate):
        (WebCore::JSHistory::putDelegate):
        (WebCore::JSHistory::deleteProperty):
        (WebCore::JSHistory::getOwnPropertyNames):
        * bindings/js/JSLocationCustom.cpp:
        (WebCore::JSLocation::getOwnPropertySlotDelegate):
        (WebCore::JSLocation::getOwnPropertyDescriptorDelegate):
        (WebCore::JSLocation::putDelegate):
        (WebCore::JSLocation::deleteProperty):
        (WebCore::JSLocation::getOwnPropertyNames):
        (WebCore::JSLocation::toStringFunction):
        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::canAccessFromCurrentOrigin):
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateGetOwnPropertyDescriptorBody):
        (GenerateImplementation):
        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateNormalAttrGetter):
        (GenerateFunctionCallback):

2012-01-08  Adam Barth  <abarth@webkit.org>

        Remove deprecated toDynamicFrame and unused [CallWith=DynamicFrame]
        https://bugs.webkit.org/show_bug.cgi?id=75795

        Reviewed by Eric Seidel.

        We've succeeded in removing all the callers fo this function, including
        all the uses of CallWith=DynamicFrame in IDL files.

        * bindings/js/JSDOMBinding.cpp:
        * bindings/js/JSDOMBinding.h:
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateParametersCheck):
        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateFunctionCallString):
        * bindings/scripts/test/CPP/WebDOMTestObj.cpp:
        * bindings/scripts/test/CPP/WebDOMTestObj.h:
        * bindings/scripts/test/GObject/WebKitDOMTestObj.cpp:
        * bindings/scripts/test/GObject/WebKitDOMTestObj.h:
        * bindings/scripts/test/JS/JSTestObj.cpp:
        * bindings/scripts/test/JS/JSTestObj.h:
        * bindings/scripts/test/ObjC/DOMTestObj.h:
        * bindings/scripts/test/ObjC/DOMTestObj.mm:
        * bindings/scripts/test/TestObj.idl:
        * bindings/scripts/test/V8/V8TestObj.cpp:

2012-01-08  Adam Barth  <abarth@webkit.org>

        NeedsUserGestureCheck IDL attribute is no longer used
        https://bugs.webkit.org/show_bug.cgi?id=75794

        Reviewed by Eric Seidel.

        This IDL attribute is no longer used because we use static state to
        keep track of the user gesture state.  We can delete the code that
        supports it.

        * bindings/scripts/CodeGeneratorCPP.pm:
        * bindings/scripts/CodeGeneratorGObject.pm:
        * bindings/scripts/CodeGeneratorJS.pm:
        * bindings/scripts/CodeGeneratorV8.pm:
        * bindings/scripts/test/TestObj.idl:

2012-01-08  Adam Barth  <abarth@webkit.org>

        Remove unused security functions from V8 bindings
        https://bugs.webkit.org/show_bug.cgi?id=75797

        Reviewed by Eric Seidel.

        This functions have no callers.  They can be removed.

        * bindings/v8/ScriptController.cpp:
        * bindings/v8/ScriptController.h:
        * bindings/v8/specialization/V8BindingState.cpp:
        * bindings/v8/specialization/V8BindingState.h:

2012-01-08  Pratik Solanki  <psolanki@apple.com>

        Assertion failure under SharedBuffer::append() when NETWORK_CFDATA_ARRAY_CALLBACK is enabled
        https://bugs.webkit.org/show_bug.cgi?id=75656

        Reviewed by Darin Adler.

        Update the implementation of SubresourceLoader::didReceiveDataArray() to conform to the
        refactoring done as part of bug 71149 in r100311.

        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::didReceiveData):
        (WebCore::SubresourceLoader::errorLoadingResource):
        * loader/SubresourceLoader.h:
        * loader/cf/SubresourceLoaderCF.cpp:
        (WebCore::SubresourceLoader::didReceiveDataArray):

2012-01-08  Steve Block  <steveblock@google.com>

        Remove V8-specific Java Bridge code
        https://bugs.webkit.org/show_bug.cgi?id=75801

        Reviewed by Darin Adler.

        Also remove superfluous JSC and V8 guards, as the code is now used only
        with JSC.

        No new tests, removing dead code only.

        * WebCore.gypi:
        * bridge/jni/JNIUtility.cpp:
        (JSC::Bindings::javaTypeFromClassName):
        (JSC::Bindings::signatureFromJavaType):
        (JSC::Bindings::getJNIField):
        (JSC::Bindings::callJNIMethod):
        * bridge/jni/JavaType.h:
        * bridge/jni/jsc/JavaMethodJSC.cpp:
        (appendClassName):
        (JavaMethod::signature):
        * bridge/jni/v8/JNIUtilityPrivate.cpp: Removed.
        * bridge/jni/v8/JNIUtilityPrivate.h: Removed.
        * bridge/jni/v8/JavaClassV8.h: Removed.
        * bridge/jni/v8/JavaFieldV8.h: Removed.
        * bridge/jni/v8/JavaInstanceV8.h: Removed.
        * bridge/jni/v8/JavaMethodV8.h: Removed.
        * bridge/jni/v8/JavaNPObjectV8.cpp: Removed.
        * bridge/jni/v8/JavaNPObjectV8.h: Removed.
        * bridge/jni/v8/JavaValueV8.h: Removed.
        * bridge/jsc/BridgeJSC.h:

2012-01-08  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r104403.
        http://trac.webkit.org/changeset/104403
        https://bugs.webkit.org/show_bug.cgi?id=75803

        It broke all tests on Qt5 (Requested by Ossy_weekend on
        #webkit).

        * Target.pri:

2012-01-08  Antti Koivisto  <antti@apple.com>

        Don't create style selector in Element::recalcStyleIfNeededAfterAttributeChanged if it doesn't exist
        https://bugs.webkit.org/show_bug.cgi?id=75802

        Rubber-stamped by Andreas Kling.

        Element::recalcStyleIfNeededAfterAttributeChanged shouldn't create style selector for attribute 
        check if it doesn't already exist. We are going to need a full style recalc anyway in that case
        and the constructed style selector may get throw out again.

        * dom/Element.cpp:
        (WebCore::Element::recalcStyleIfNeededAfterAttributeChanged):

2012-01-08  No'am Rosenthal  <noam.rosenthal@nokia.com>

        [Qt] Enable CSS_FILTERS in Qt build
        https://bugs.webkit.org/show_bug.cgi?id=75777

        Enable CSS_FILTERS and unskip the tests.

        Reviewed by Kenneth Rohde Christiansen.

        Filter tests are now unskipped for Qt.

        * Target.pri: add missing files to build.

2012-01-07  Antti Koivisto  <antti@apple.com>

        REGRESSION (r104060): Layout Test fast/media/viewport-media-query.html is occasionally failing
        https://bugs.webkit.org/show_bug.cgi?id=75633

        Reviewed by Andreas Kling.
        
        If something triggers CSSStyleSelector construction very early, before documentElement is known,
        it won't be able to resolve viewport-related media queries. In the included test case
        the attribute on <html> element triggers the style selector creation. I can't repro
        the fast/media/viewport-media-query.html failure but I suspect it is the same issue with
        a different mechanism for early CSSStyleSelector construction.
        
        - Reset style selector on documentElement change.
        - Remove the code for lazy documentElement initialization. It is not an useful optimization,
          the children of Document rarely change.

        Test: fast/media/viewport-media-query-synchronous.html

        * WebCore.exp.in:
        * dom/Document.cpp:
        (WebCore::Document::childrenChanged):
        * dom/Document.h:
        (WebCore::Document::documentElement):

2012-01-07  Andreas Kling  <awesomekling@apple.com>

        Attempt to regenerate bindings on the Windows bot.

        * html/HTMLCollection.h:

2012-01-07  Daniel Bates  <dbates@webkit.org>

        Memory allocator mismatch; Use operator new[] with OwnArrayPtr instead of fastMalloc()

        Rubber-stamped by Adam Barth.

        Currently getProgramInfoLog() in GraphicsContext3DOpenGL.cpp assumes that operator new[]
        and fastMalloc() are equivalent when it adopts a fastMalloc() allocated buffer. Notice,
        OwnArrayPtr ultimately calls delete[] on destruction. When GLOBAL_FASTMALLOC_NEW is disabled,
        it isn't true that operator new[], operator delete[] are equivalent to fastMalloc(), fastFree(),
        respectively. Hence, there may be a mismatch between the allocation and deallocation
        routines. Therefore, we should allocate the array to be adopted by OwnArrayPtr using
        operator new[].

        * platform/graphics/opengl/GraphicsContext3DOpenGL.cpp:
        (WebCore::GraphicsContext3D::getProgramInfoLog):

2012-01-07  Chris Marrin  <cmarrin@apple.com>

        Fixed ANGLE build for GNU and QT broken in https://trac.webkit.org/changeset/104363

        Unreviewed.

        * GNUmakefile.list.am:
        * Target.pri:

2012-01-07  Andreas Kling  <awesomekling@apple.com>

        Unreviewed C++ bindings build fix after r104383.

        Use WTF::getPtr() to grab at impl pointer since they could be either RefPtr or raw.

        * bindings/scripts/CodeGeneratorCPP.pm:
        (GenerateImplementation):
        * bindings/scripts/test/CPP/WebDOMTestCallback.cpp:
        (WebDOMTestCallback::impl):
        * bindings/scripts/test/CPP/WebDOMTestEventConstructor.cpp:
        (WebDOMTestEventConstructor::impl):
        * bindings/scripts/test/CPP/WebDOMTestInterface.cpp:
        (WebDOMTestInterface::impl):
        * bindings/scripts/test/CPP/WebDOMTestMediaQueryListListener.cpp:
        (WebDOMTestMediaQueryListListener::impl):
        * bindings/scripts/test/CPP/WebDOMTestNamedConstructor.cpp:
        (WebDOMTestNamedConstructor::impl):
        * bindings/scripts/test/CPP/WebDOMTestObj.cpp:
        (WebDOMTestObj::impl):
        * bindings/scripts/test/CPP/WebDOMTestSerializedScriptValueInterface.cpp:
        (WebDOMTestSerializedScriptValueInterface::impl):

2012-01-07  Andreas Kling  <awesomekling@apple.com>

        Simplify HTMLCollection ownership model.
        <http://webkit.org/b/75437>

        Reviewed by Sam Weinig.

        Remove HTMLCollection's inheritance from RefCounted and use OwnPtr to store it.
        Added ref()/deref() methods that forward to the collection's base node, these
        are only ever used by DOM wrappers.

        This is a behavior change, HTMLCollection wrappers now keep the base node alive.

        Test: fast/dom/htmlcollection-protects-base.html

        * html/HTMLCollection.h:
        (WebCore::HTMLCollection::ref):
        (WebCore::HTMLCollection::deref):

            Removed inheritance from RefCounted. Added ref/deref that forward the refs
            to the collection's base Node.

        * dom/Element.cpp:
        (WebCore::Element::~Element):
        * dom/Document.h:
        * dom/Document.cpp:
        (WebCore::Document::~Document):
        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::~HTMLFormElement):
        * html/HTMLSelectElement.h:
        * html/HTMLSelectElement.cpp:

            Remove HTMLCollection::detachFromNode() and call sites.

        * html/HTMLAllCollection.cpp:
        (WebCore::HTMLAllCollection::namedItemWithIndex):
        * html/HTMLCollection.cpp:
        (WebCore::HTMLCollection::HTMLCollection):
        (WebCore::HTMLCollection::invalidateCacheIfNeeded):
        (WebCore::HTMLCollection::itemAfter):
        (WebCore::HTMLCollection::calcLength):
        (WebCore::HTMLCollection::length):
        (WebCore::HTMLCollection::item):
        (WebCore::HTMLCollection::nextItem):
        (WebCore::HTMLCollection::namedItem):
        (WebCore::HTMLCollection::updateNameCache):
        (WebCore::HTMLCollection::hasNamedItem):
        (WebCore::HTMLCollection::namedItems):
        (WebCore::HTMLCollection::tags):
        * html/HTMLFormCollection.cpp:
        (WebCore::HTMLFormCollection::calcLength):
        (WebCore::HTMLFormCollection::item):
        (WebCore::HTMLFormCollection::getNamedItem):
        (WebCore::HTMLFormCollection::namedItem):
        (WebCore::HTMLFormCollection::updateNameCache):
        * html/HTMLNameCollection.cpp:
        (WebCore::HTMLNameCollection::itemAfter):
        * html/HTMLOptionsCollection.cpp:
        (WebCore::HTMLOptionsCollection::add):
        (WebCore::HTMLOptionsCollection::remove):
        (WebCore::HTMLOptionsCollection::selectedIndex):
        (WebCore::HTMLOptionsCollection::setSelectedIndex):
        (WebCore::HTMLOptionsCollection::setLength):
        * html/HTMLPropertiesCollection.cpp:
        (WebCore::HTMLPropertiesCollection::length):
        (WebCore::HTMLPropertiesCollection::item):
        (WebCore::HTMLPropertiesCollection::names):

            Removed base node null-checks and assertions. Added one assertion to
            the HTMLCollection constructor (that m_base is non-null.)

        * dom/Document.h:
        * dom/Document.cpp:
        (WebCore::Document::openSearchDescriptionURL):
        (WebCore::Document::cachedCollection):
        (WebCore::Document::images):
        (WebCore::Document::applets):
        (WebCore::Document::embeds):
        (WebCore::Document::plugins):
        (WebCore::Document::objects):
        (WebCore::Document::scripts):
        (WebCore::Document::links):
        (WebCore::Document::forms):
        (WebCore::Document::anchors):
        (WebCore::Document::all):
        (WebCore::Document::windowNamedItems):
        (WebCore::Document::documentNamedItems):
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::namedItemGetter):
        * bindings/js/JSHTMLDocumentCustom.cpp:
        (WebCore::JSHTMLDocument::nameGetter):
        (WebCore::JSHTMLDocument::all):
        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        (WebCore::V8DOMWindow::namedPropertyGetter):
        * bindings/v8/custom/V8HTMLDocumentCustom.cpp:
        (WebCore::V8HTMLDocument::GetNamedProperty):
        * dom/ElementRareData.h:
        (WebCore::ElementRareData::ensureCachedHTMLCollection):
        * dom/NodeRareData.h:
        (WebCore::NodeRareData::properties):
        * html/HTMLAllCollection.h:
        * html/HTMLAllCollection.cpp:
        (WebCore::HTMLAllCollection::create):
        * html/HTMLCollection.h:
        * html/HTMLCollection.cpp:
        (WebCore::HTMLCollection::create):
        (WebCore::HTMLCollection::HTMLCollection):
        * html/HTMLDataListElement.cpp:
        (WebCore::HTMLDataListElement::options):
        * html/HTMLDataListElement.h:
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::children):
        * html/HTMLElement.h:
        * html/HTMLSelectElement.h:
        (WebCore::HTMLSelectElement::options):
        * html/HTMLFormCollection.h:
        * html/HTMLFormElement.h:
        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::elements):
        * html/HTMLNameCollection.h:
        (WebCore::HTMLNameCollection::create):
        * html/HTMLFormCollection.cpp:
        (WebCore::HTMLFormCollection::create):
        * html/HTMLMapElement.cpp:
        (WebCore::HTMLMapElement::imageElement):
        (WebCore::HTMLMapElement::areas):
        * html/HTMLMapElement.h:
        * html/HTMLPropertiesCollection.h:
        * html/HTMLTableElement.cpp:
        (WebCore::HTMLTableElement::rows):
        (WebCore::HTMLTableElement::tBodies):
        * html/HTMLTableElement.h:
        * html/HTMLTableRowElement.cpp:
        (WebCore::HTMLTableRowElement::insertCell):
        (WebCore::HTMLTableRowElement::deleteCell):
        (WebCore::HTMLTableRowElement::cells):
        * html/HTMLTableRowElement.h:
        * html/HTMLTableRowsCollection.cpp:
        (WebCore::HTMLTableRowsCollection::create):
        (WebCore::HTMLTableRowsCollection::itemAfter):
        * html/HTMLTableRowsCollection.h:
        * html/HTMLTableSectionElement.h:
        * html/HTMLTableSectionElement.cpp:
        (WebCore::HTMLTableSectionElement::insertRow):
        (WebCore::HTMLTableSectionElement::deleteRow):
        (WebCore::HTMLTableSectionElement::rows):
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::selectedOption):
        * html/HTMLOptionsCollection.h:
        * html/HTMLOptionsCollection.cpp:
        (WebCore::HTMLOptionsCollection::create):
        * html/HTMLPropertiesCollection.cpp:
        (WebCore::HTMLPropertiesCollection::create):
        * Source/WebCore/accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::getDocumentLinks):

            Store cached HTMLCollections in OwnPtrs. Methods that used to return
            PassRefPtr<HTMLCollection> now simply return HTMLCollection*.
            Updated call sites as appropriate.

2012-01-07  Adam Barth  <abarth@webkit.org>

        Attempt to fix Qt build.

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

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

        REGRESSION(r104210): Crash inside DynamicSubtreeNodeList::length
        https://bugs.webkit.org/show_bug.cgi?id=75731

        Reviewed by Andreas Kling.

        The crash was caused by DynamicSubtreeNodeList::SubtreeCaches::domVersionIsConsistent
        using m_cachedItem as a way to access the document. Changed SubtreeCaches to use
        DynamicSubtreeNodeList's m_node instead.

        Test: fast/dom/node-list-length-after-removing-node.html

        * dom/DynamicNodeList.cpp:
        (WebCore::DynamicSubtreeNodeList::SubtreeCaches::setLengthCache):
        (WebCore::DynamicSubtreeNodeList::SubtreeCaches::setItemCache):
        (WebCore::DynamicSubtreeNodeList::length):
        (WebCore::DynamicSubtreeNodeList::item):
        * dom/DynamicNodeList.h:
        (WebCore::DynamicSubtreeNodeList::SubtreeCaches::isLengthCacheValid):
        (WebCore::DynamicSubtreeNodeList::SubtreeCaches::isItemCacheValid):
        (WebCore::DynamicSubtreeNodeList::SubtreeCaches::cachedItem):
        (WebCore::DynamicSubtreeNodeList::SubtreeCaches::domVersionIsConsistent):

2012-01-07  Adam Barth  <abarth@webkit.org>

        Disconnecting DOMWindow properties is fragile and overly complicated
        https://bugs.webkit.org/show_bug.cgi?id=75699

        Reviewed by Alexey Proskuryakov.

        Previously, we had to carefully check every object tree hanging off of
        DOMWindow to make sure that every property correctly disconnected
        itself and all its subobjects from the Frame when the DOMWindow
        disconnected from the Frame.

        This patch introduces DOMWindowProperty, which is a base class that
        handles this work automagically, ensuring that we won't have any
        dangling Frame pointers and removing a bunch of boilerplate code.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * css/StyleMedia.cpp:
        (WebCore::StyleMedia::StyleMedia):
        * css/StyleMedia.h:
        (WebCore::StyleMedia::create):
        * loader/appcache/DOMApplicationCache.cpp:
        (WebCore::DOMApplicationCache::DOMApplicationCache):
        (WebCore::DOMApplicationCache::disconnectFrame):
        * loader/appcache/DOMApplicationCache.h:
        * page/BarInfo.cpp:
        (WebCore::BarInfo::BarInfo):
        * page/BarInfo.h:
        * page/Console.cpp:
        (WebCore::Console::Console):
        (WebCore::Console::memory):
        * page/Console.h:
        * page/DOMSelection.cpp:
        (WebCore::DOMSelection::DOMSelection):
        * page/DOMSelection.h:
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::registerProperty):
        (WebCore::DOMWindow::unregisterProperty):
        (WebCore::DOMWindow::clear):
        * page/DOMWindow.h:
        * page/Geolocation.cpp:
        (WebCore::Geolocation::Geolocation):
        (WebCore::Geolocation::disconnectFrame):
        * page/Geolocation.h:
        * page/History.cpp:
        (WebCore::History::History):
        * page/History.h:
        * page/Location.cpp:
        (WebCore::Location::Location):
        * page/Location.h:
        * page/Navigator.cpp:
        (WebCore::Navigator::Navigator):
        (WebCore::Navigator::~Navigator):
        * page/Navigator.h:
        * page/Performance.cpp:
        (WebCore::Performance::Performance):
        (WebCore::Performance::memory):
        * page/Performance.h:
        * page/PerformanceNavigation.cpp:
        (WebCore::PerformanceNavigation::PerformanceNavigation):
        * page/PerformanceNavigation.h:
        * page/PerformanceTiming.cpp:
        (WebCore::PerformanceTiming::PerformanceTiming):
        * page/PerformanceTiming.h:
        * page/Screen.cpp:
        (WebCore::Screen::Screen):
        * page/Screen.h:
        * plugins/DOMMimeTypeArray.cpp:
        (WebCore::DOMMimeTypeArray::DOMMimeTypeArray):
        * plugins/DOMMimeTypeArray.h:
        * plugins/DOMPluginArray.cpp:
        (WebCore::DOMPluginArray::DOMPluginArray):
        * plugins/DOMPluginArray.h:
        * storage/Storage.cpp:
        (WebCore::Storage::Storage):
        * storage/Storage.h:

2012-01-06  Mark Rowe  <mrowe@apple.com>

        REGRESSION (r83075): Save as PDF does not generate any links for webkit.org and others
        <http://webkit.org/b/75768> <rdar://problem/10659258>

        Use RenderObject::hasOutline when determining whether to always create line boxes so that
        we take in to consideration whether we'll be creating PDF link rects.

        Reviewed by Dan Bernstein.

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

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

        Unreviewed, rolling out r104373 and r104374.
        http://trac.webkit.org/changeset/104373
        http://trac.webkit.org/changeset/104374
        https://bugs.webkit.org/show_bug.cgi?id=75769

        Too many assertion failures. (Requested by kling on #webkit).

        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::namedItemGetter):
        * bindings/js/JSHTMLDocumentCustom.cpp:
        (WebCore::JSHTMLDocument::nameGetter):
        (WebCore::JSHTMLDocument::all):
        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        (WebCore::V8DOMWindow::namedPropertyGetter):
        * bindings/v8/custom/V8HTMLDocumentCustom.cpp:
        (WebCore::V8HTMLDocument::GetNamedProperty):
        * dom/Document.cpp:
        (WebCore::Document::~Document):
        (WebCore::Document::openSearchDescriptionURL):
        (WebCore::Document::cachedCollection):
        (WebCore::Document::images):
        (WebCore::Document::applets):
        (WebCore::Document::embeds):
        (WebCore::Document::plugins):
        (WebCore::Document::objects):
        (WebCore::Document::scripts):
        (WebCore::Document::links):
        (WebCore::Document::forms):
        (WebCore::Document::anchors):
        (WebCore::Document::all):
        (WebCore::Document::windowNamedItems):
        (WebCore::Document::documentNamedItems):
        * dom/Document.h:
        * dom/Element.cpp:
        (WebCore::Element::~Element):
        * dom/ElementRareData.h:
        (WebCore::ElementRareData::cachedHTMLCollection):
        (WebCore::ElementRareData::ensureCachedHTMLCollection):
        * dom/NodeRareData.h:
        (WebCore::NodeRareData::properties):
        * html/HTMLAllCollection.cpp:
        (WebCore::HTMLAllCollection::create):
        (WebCore::HTMLAllCollection::namedItemWithIndex):
        * html/HTMLAllCollection.h:
        * html/HTMLCollection.cpp:
        (WebCore::HTMLCollection::HTMLCollection):
        (WebCore::HTMLCollection::create):
        (WebCore::HTMLCollection::detachFromNode):
        (WebCore::HTMLCollection::invalidateCacheIfNeeded):
        (WebCore::HTMLCollection::itemAfter):
        (WebCore::HTMLCollection::calcLength):
        (WebCore::HTMLCollection::length):
        (WebCore::HTMLCollection::item):
        (WebCore::HTMLCollection::nextItem):
        (WebCore::HTMLCollection::namedItem):
        (WebCore::HTMLCollection::updateNameCache):
        (WebCore::HTMLCollection::hasNamedItem):
        (WebCore::HTMLCollection::namedItems):
        (WebCore::HTMLCollection::tags):
        * html/HTMLCollection.h:
        * html/HTMLDataListElement.cpp:
        (WebCore::HTMLDataListElement::options):
        * html/HTMLDataListElement.h:
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::children):
        * html/HTMLElement.h:
        * html/HTMLFormCollection.cpp:
        (WebCore::HTMLFormCollection::create):
        (WebCore::HTMLFormCollection::calcLength):
        (WebCore::HTMLFormCollection::item):
        (WebCore::HTMLFormCollection::getNamedItem):
        (WebCore::HTMLFormCollection::namedItem):
        (WebCore::HTMLFormCollection::updateNameCache):
        * html/HTMLFormCollection.h:
        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::~HTMLFormElement):
        (WebCore::HTMLFormElement::elements):
        * html/HTMLFormElement.h:
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::selectedOption):
        * html/HTMLMapElement.cpp:
        (WebCore::HTMLMapElement::imageElement):
        (WebCore::HTMLMapElement::areas):
        * html/HTMLMapElement.h:
        * html/HTMLNameCollection.cpp:
        (WebCore::HTMLNameCollection::itemAfter):
        * html/HTMLNameCollection.h:
        (WebCore::HTMLNameCollection::create):
        * html/HTMLOptionsCollection.cpp:
        (WebCore::HTMLOptionsCollection::create):
        (WebCore::HTMLOptionsCollection::add):
        (WebCore::HTMLOptionsCollection::remove):
        (WebCore::HTMLOptionsCollection::selectedIndex):
        (WebCore::HTMLOptionsCollection::setSelectedIndex):
        (WebCore::HTMLOptionsCollection::setLength):
        * html/HTMLOptionsCollection.h:
        * html/HTMLPropertiesCollection.cpp:
        (WebCore::HTMLPropertiesCollection::create):
        (WebCore::HTMLPropertiesCollection::length):
        (WebCore::HTMLPropertiesCollection::item):
        (WebCore::HTMLPropertiesCollection::names):
        * html/HTMLPropertiesCollection.h:
        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::~HTMLSelectElement):
        (WebCore::HTMLSelectElement::options):
        * html/HTMLSelectElement.h:
        * html/HTMLTableElement.cpp:
        (WebCore::HTMLTableElement::~HTMLTableElement):

2012-01-06  Andreas Kling  <awesomekling@apple.com>

        Unreviewed build fix after r104373.

        * html/HTMLTableElement.cpp:
        (WebCore::HTMLTableElement::~HTMLTableElement):

2012-01-06  Andreas Kling  <awesomekling@apple.com>

        Simplify HTMLCollection ownership model.
        <http://webkit.org/b/75437>

        Reviewed by Sam Weinig.

        Remove HTMLCollection's inheritance from RefCounted and use OwnPtr to store it.
        Added ref()/deref() methods that forward to the collection's base node, these
        are only ever used by DOM wrappers.

        This is a behavior change, HTMLCollection wrappers now keep the base node alive.

        Test: fast/dom/htmlcollection-protects-base.html

        * html/HTMLCollection.h:
        (WebCore::HTMLCollection::ref):
        (WebCore::HTMLCollection::deref):

            Removed inheritance from RefCounted. Added ref/deref that forward the refs
            to the collection's base Node.

        * dom/Element.cpp:
        (WebCore::Element::~Element):
        * dom/Document.h:
        * dom/Document.cpp:
        (WebCore::Document::~Document):
        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::~HTMLFormElement):
        * html/HTMLSelectElement.h:
        * html/HTMLSelectElement.cpp:

            Remove HTMLCollection::detachFromNode() and call sites.

        * html/HTMLAllCollection.cpp:
        (WebCore::HTMLAllCollection::namedItemWithIndex):
        * html/HTMLCollection.cpp:
        (WebCore::HTMLCollection::HTMLCollection):
        (WebCore::HTMLCollection::invalidateCacheIfNeeded):
        (WebCore::HTMLCollection::itemAfter):
        (WebCore::HTMLCollection::calcLength):
        (WebCore::HTMLCollection::length):
        (WebCore::HTMLCollection::item):
        (WebCore::HTMLCollection::nextItem):
        (WebCore::HTMLCollection::namedItem):
        (WebCore::HTMLCollection::updateNameCache):
        (WebCore::HTMLCollection::hasNamedItem):
        (WebCore::HTMLCollection::namedItems):
        (WebCore::HTMLCollection::tags):
        * html/HTMLFormCollection.cpp:
        (WebCore::HTMLFormCollection::calcLength):
        (WebCore::HTMLFormCollection::item):
        (WebCore::HTMLFormCollection::getNamedItem):
        (WebCore::HTMLFormCollection::namedItem):
        (WebCore::HTMLFormCollection::updateNameCache):
        * html/HTMLNameCollection.cpp:
        (WebCore::HTMLNameCollection::itemAfter):
        * html/HTMLOptionsCollection.cpp:
        (WebCore::HTMLOptionsCollection::add):
        (WebCore::HTMLOptionsCollection::remove):
        (WebCore::HTMLOptionsCollection::selectedIndex):
        (WebCore::HTMLOptionsCollection::setSelectedIndex):
        (WebCore::HTMLOptionsCollection::setLength):
        * html/HTMLPropertiesCollection.cpp:
        (WebCore::HTMLPropertiesCollection::length):
        (WebCore::HTMLPropertiesCollection::item):
        (WebCore::HTMLPropertiesCollection::names):

            Removed base node null-checks and assertions. Added one assertion to
            the HTMLCollection constructor (that m_base is non-null.)

        * dom/Document.h:
        * dom/Document.cpp:
        (WebCore::Document::openSearchDescriptionURL):
        (WebCore::Document::cachedCollection):
        (WebCore::Document::images):
        (WebCore::Document::applets):
        (WebCore::Document::embeds):
        (WebCore::Document::plugins):
        (WebCore::Document::objects):
        (WebCore::Document::scripts):
        (WebCore::Document::links):
        (WebCore::Document::forms):
        (WebCore::Document::anchors):
        (WebCore::Document::all):
        (WebCore::Document::windowNamedItems):
        (WebCore::Document::documentNamedItems):
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::namedItemGetter):
        * bindings/js/JSHTMLDocumentCustom.cpp:
        (WebCore::JSHTMLDocument::nameGetter):
        (WebCore::JSHTMLDocument::all):
        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        (WebCore::V8DOMWindow::namedPropertyGetter):
        * bindings/v8/custom/V8HTMLDocumentCustom.cpp:
        (WebCore::V8HTMLDocument::GetNamedProperty):
        * dom/ElementRareData.h:
        (WebCore::ElementRareData::ensureCachedHTMLCollection):
        * dom/NodeRareData.h:
        (WebCore::NodeRareData::properties):
        * html/HTMLAllCollection.h:
        * html/HTMLAllCollection.cpp:
        (WebCore::HTMLAllCollection::create):
        * html/HTMLCollection.h:
        * html/HTMLCollection.cpp:
        (WebCore::HTMLCollection::create):
        (WebCore::HTMLCollection::HTMLCollection):
        * html/HTMLDataListElement.cpp:
        (WebCore::HTMLDataListElement::options):
        * html/HTMLDataListElement.h:
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::children):
        * html/HTMLElement.h:
        * html/HTMLSelectElement.h:
        (WebCore::HTMLSelectElement::options):
        * html/HTMLFormCollection.h:
        * html/HTMLFormElement.h:
        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::elements):
        * html/HTMLNameCollection.h:
        (WebCore::HTMLNameCollection::create):
        * html/HTMLFormCollection.cpp:
        (WebCore::HTMLFormCollection::create):
        * html/HTMLMapElement.cpp:
        (WebCore::HTMLMapElement::imageElement):
        (WebCore::HTMLMapElement::areas):
        * html/HTMLMapElement.h:
        * html/HTMLPropertiesCollection.h:
        * html/HTMLTableElement.cpp:
        (WebCore::HTMLTableElement::rows):
        (WebCore::HTMLTableElement::tBodies):
        * html/HTMLTableElement.h:
        * html/HTMLTableRowElement.cpp:
        (WebCore::HTMLTableRowElement::insertCell):
        (WebCore::HTMLTableRowElement::deleteCell):
        (WebCore::HTMLTableRowElement::cells):
        * html/HTMLTableRowElement.h:
        * html/HTMLTableRowsCollection.cpp:
        (WebCore::HTMLTableRowsCollection::create):
        (WebCore::HTMLTableRowsCollection::itemAfter):
        * html/HTMLTableRowsCollection.h:
        * html/HTMLTableSectionElement.h:
        * html/HTMLTableSectionElement.cpp:
        (WebCore::HTMLTableSectionElement::insertRow):
        (WebCore::HTMLTableSectionElement::deleteRow):
        (WebCore::HTMLTableSectionElement::rows):
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::selectedOption):
        * html/HTMLOptionsCollection.h:
        * html/HTMLOptionsCollection.cpp:
        (WebCore::HTMLOptionsCollection::create):
        * html/HTMLPropertiesCollection.cpp:
        (WebCore::HTMLPropertiesCollection::create):

            Store cached HTMLCollections in OwnPtrs. Methods that used to return
            PassRefPtr<HTMLCollection> now simply return HTMLCollection*.
            Updated call sites as appropriate.

2012-01-06  Adam Barth  <abarth@webkit.org>

        DOMWindow should be a FrameDestructionObserver
        https://bugs.webkit.org/show_bug.cgi?id=75697

        Reviewed by Alexey Proskuryakov.

        DOMWindow plays exactly the role of a FrameDestructionObserver, just
        with special-case code.  It should just use the general-case code.

        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::DOMWindow):
        (WebCore::DOMWindow::~DOMWindow):
        (WebCore::DOMWindow::frameDestroyed):
        * page/DOMWindow.h:
        * page/Frame.cpp:
        (WebCore::Frame::~Frame):
        (WebCore::Frame::clearDOMWindow):
        (WebCore::Frame::setDOMWindow):
        * page/Frame.h:

2012-01-06  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Missing Implementation of Public InspectorDOMAgent Function
        https://bugs.webkit.org/show_bug.cgi?id=75759

        Implement missing accessor and make setter public.

        Reviewed by Timothy Hatcher.

        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::searchingForNodeInPage):
        * inspector/InspectorDOMAgent.h:

2012-01-06  W. James MacLean  <wjmaclean@chromium.org>

        [Chromium] Cull occluded tiles in tiled layers
        https://bugs.webkit.org/show_bug.cgi?id=70533

        Reviewed by James Robinson.

        Unit test provided, must pass all existing GPU layout tests.

        * WebCore.gypi:
        * platform/graphics/chromium/cc/CCLayerImpl.cpp:
        (WebCore::CCLayerImpl::appendQuads):
        (WebCore::CCLayerImpl::quadTransform):
        * platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:
        (WebCore::CCLayerTreeHostImpl::calculateRenderPasses):
        (WebCore::CCLayerTreeHostImpl::optimizeRenderPasses):
        (WebCore::CCLayerTreeHostImpl::drawLayers):
        * platform/graphics/chromium/cc/CCLayerTreeHostImpl.h:
        * platform/graphics/chromium/cc/CCQuadCuller.cpp: Added.
        (std::swap):
        (WebCore::regionContainsRect):
        (WebCore::CCQuadCuller::cullOccludedQuads):
        * platform/graphics/chromium/cc/CCQuadCuller.h: Added.
        (WebCore::CCQuadCuller::CCQuadCuller):
        * platform/graphics/chromium/cc/CCRenderPass.cpp:
        (WebCore::CCRenderPass::optimizeQuads):
        * platform/graphics/chromium/cc/CCRenderPass.h:

2012-01-06  Anders Carlsson  <andersca@apple.com>

        Move more rubberbanding code into ScrollAnimatorMac::smoothScrollWithEvent
        https://bugs.webkit.org/show_bug.cgi?id=75750

        Reviewed by Sam Weinig.

        * platform/mac/ScrollAnimatorMac.h:
        * platform/mac/ScrollAnimatorMac.mm:
        (WebCore::ScrollAnimatorMac::handleWheelEvent):
        Move rubberbanding related code into smoothScrollWithEvent.

        (WebCore::ScrollAnimatorMac::smoothScrollWithEvent):
        Move code here from handleWheelEvent and made the function return a boolean.

        (WebCore::ScrollAnimatorMac::snapRubberBand):
        Call the client.

        (WebCore::ScrollAnimatorMac::snapRubberBandTimerFired):
        Ditto.

2012-01-06  Greg Billock  <gbillock@google.com>

        WebCore implementation of the Intent object
        See http://dvcs.w3.org/hg/web-intents/raw-file/tip/spec/Overview.html
        for draft spec.

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

        Reviewed by Adam Barth.

        Test: web-intents/web-intents-api.html

        * WebCore.gypi:
        * page/DOMWindow.idl:
        * Modules/intents/Intent.cpp: Added.
        (WebCore::Intent::Intent):
        (WebCore::Intent::action):
        (WebCore::Intent::setAction):
        (WebCore::Intent::type):
        (WebCore::Intent::setType):
        (WebCore::Intent::data):
        (WebCore::Intent::setData):
        (WebCore::Intent::create):
        * Modules/intents/Intent.h: Added.
        * Modules/intents/Intent.idl: Added.

2012-01-06  Tim Horton  <timothy_horton@apple.com>

        [cg] userSpaceOnUse SVG Patterns have the wrong origin
        https://bugs.webkit.org/show_bug.cgi?id=75741
        <rdar://problem/9383222>

        Reviewed by Simon Fraser.

        The transformation from pattern space to user space should use the userToBase CTM,
        not the current CTM.

        Test: svg/custom/pattern-userSpaceOnUse-userToBaseTransform.xhtml

        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::applyStrokePattern):
        (WebCore::GraphicsContext::applyFillPattern):
        (WebCore::GraphicsContext::getCTM):
        * platform/graphics/cg/TransformationMatrixCG.cpp:
        (WebCore::AffineTransform::AffineTransform): Add a AffineTransform(CGAffineTransform) constructor
        * platform/graphics/transforms/AffineTransform.h:

2012-01-05  Simon Fraser  <simon.fraser@apple.com>

        Avoid falling into tiled layers more often when the device scale factor is > 1
        <rdar://problem/10588725>

        Reviewed by John Sullivan.
        
        Stop taking the device scale factor into account when deciding to make
        tiled layers.

        Test: compositing/tiled-layers-hidpi.html

        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::requiresTiledLayer):

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

        Touch a bunch of files in an attempt to fix Mac release builds.

        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::get):
        * accessibility/AccessibilityAllInOne.cpp:
        * editing/visible_units.cpp:
        (WebCore::previousBoundary):

2012-01-06  No'am Rosenthal  <noam.rosenthal@nokia.com>

        Enable a compositing trigger for filters
        https://bugs.webkit.org/show_bug.cgi?id=75658

        This will enable forcing the compositing code path when filters exist for a RenderObject.

        Reviewed by Simon Fraser.

        No new functionality so no new tests.

        * page/ChromeClient.h:
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::requiresCompositingLayer):
        (WebCore::RenderLayerCompositor::requiresCompositingForFilters):
        * rendering/RenderLayerCompositor.h:

2012-01-06  Anders Carlsson  <andersca@apple.com>

        Add and use ScrollElasticityControllerClient::absoluteScrollPosition
        https://bugs.webkit.org/show_bug.cgi?id=75744

        Reviewed by Dan Bernstein.

        * platform/mac/ScrollAnimatorMac.h:
        * platform/mac/ScrollAnimatorMac.mm:
        (WebCore::ScrollAnimatorMac::absoluteScrollPosition):
        (WebCore::ScrollAnimatorMac::snapRubberBandTimerFired):
        * platform/mac/ScrollElasticityController.h:

2012-01-06  Adam Barth  <abarth@webkit.org>

        Move FrameDestructionObserver to its own file
        https://bugs.webkit.org/show_bug.cgi?id=75693

        Reviewed by Eric Seidel.

        We should have one class per file, on general principles.  Also, this
        make it possible to use this class in DOMWindow without introducing a
        circular include dependency.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * page/Frame.cpp:
        * page/Frame.h:
        * page/FrameDestructionObserver.cpp: Added.
        (WebCore::FrameDestructionObserver::FrameDestructionObserver):
        (WebCore::FrameDestructionObserver::~FrameDestructionObserver):
        (WebCore::FrameDestructionObserver::frameDestroyed):
        * page/FrameDestructionObserver.h: Added.
        (WebCore::FrameDestructionObserver::frame):
        * plugins/DOMMimeType.h:
        * plugins/DOMPlugin.h:

2012-01-06  Anders Carlsson  <andersca@apple.com>

        Fix Snow Leopard build.

        * platform/mac/ScrollAnimatorMac.mm:
        (WebCore::ScrollAnimatorMac::immediateScrollBy):
        Move the function definition inside #if ENABLE(RUBBER_BANDING).

2012-01-04  Jon Lee  <jonlee@apple.com>

        Clicking on the cancel button on readonly and disabled search fields darkens as if the search field was editable
        https://bugs.webkit.org/show_bug.cgi?id=69886
        <rdar://problem/10070187>

        Reviewed by Adele Peterson.

        Tests: ManualTests/search-cancel-button.html

        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::paintSearchFieldCancelButton): If the input is readonly and/or disabled, force the cell to
        render without highlight.

2012-01-06  Simon Fraser  <simon.fraser@apple.com>

        Mitigate scrollbar differences when running pixel tests
        https://bugs.webkit.org/show_bug.cgi?id=67217

        Reviewed by Dan Bernstein.

        Export WebCore::Settings::mockScrollbarsEnabled() for DRT.

        * WebCore.exp.in:

2012-01-06  Tom Sepez  <tsepez@chromium.org>

        Pass Content-Security-Policy directives to worker threads.
        https://bugs.webkit.org/show_bug.cgi?id=73242

        Reviewed by David Levin.

        Tests: http/tests/security/contentSecurityPolicy/shared-worker-connect-src-allowed.html
               http/tests/security/contentSecurityPolicy/shared-worker-connect-src-blocked.html
               http/tests/security/contentSecurityPolicy/worker-connect-src-allowed.html
               http/tests/security/contentSecurityPolicy/worker-connect-src-blocked.html

        * page/ContentSecurityPolicy.h:
        (WebCore::ContentSecurityPolicy::policy):
        (WebCore::ContentSecurityPolicy::headerType):
        * workers/DedicatedWorkerContext.cpp:
        (WebCore::DedicatedWorkerContext::DedicatedWorkerContext):
        * workers/DedicatedWorkerContext.h:
        (WebCore::DedicatedWorkerContext::create):
        * workers/DedicatedWorkerThread.cpp:
        (WebCore::DedicatedWorkerThread::create):
        (WebCore::DedicatedWorkerThread::DedicatedWorkerThread):
        (WebCore::DedicatedWorkerThread::createWorkerContext):
        * workers/DedicatedWorkerThread.h:
        * workers/DefaultSharedWorkerRepository.cpp:
        (WebCore::SharedWorkerScriptLoader::notifyFinished):
        (WebCore::DefaultSharedWorkerRepository::workerScriptLoaded):
        * workers/DefaultSharedWorkerRepository.h:
        * workers/SharedWorkerContext.cpp:
        (WebCore::SharedWorkerContext::SharedWorkerContext):
        * workers/SharedWorkerContext.h:
        (WebCore::SharedWorkerContext::create):
        * workers/SharedWorkerThread.cpp:
        (WebCore::SharedWorkerThread::create):
        (WebCore::SharedWorkerThread::SharedWorkerThread):
        (WebCore::SharedWorkerThread::createWorkerContext):
        * workers/SharedWorkerThread.h:
        * workers/WorkerContext.cpp:
        (WebCore::WorkerContext::WorkerContext):
        * workers/WorkerContext.h:
        * workers/WorkerMessagingProxy.cpp:
        (WebCore::WorkerMessagingProxy::startWorkerContext):
        * workers/WorkerThread.cpp:
        (WebCore::WorkerThreadStartupData::create):
        (WebCore::WorkerThreadStartupData::WorkerThreadStartupData):
        (WebCore::WorkerThread::WorkerThread):
        (WebCore::WorkerThread::workerThread):
        * workers/WorkerThread.h:

2012-01-06  Mihnea Ovidenie  <mihnea@adobe.com>

        [CSSRegions]Crash while collecting svg elements in render flow thread.
        https://bugs.webkit.org/show_bug.cgi?id=73735

        Reviewed by David Hyatt.

        Tests: fast/regions/svg-doc-fragment-not-collected-expected.html
               fast/regions/svg-doc-fragment-not-collected.html
               fast/regions/svg-element-not-collected-expected.html
               fast/regions/svg-element-not-collected.html
               fast/regions/svg-root-element-collected.html

        By allowing only svg root elements to be collected in a render flow thread,
        the svg render tree is properly constructed, thus prevented a possible further crash.

        * dom/NodeRenderingContext.cpp:
        (WebCore::NodeRenderingContext::moveToFlowThreadIfNeeded):

2012-01-06  Eric Carlson  <eric.carlson@apple.com>

        Make TextTrackCue more mutable
        https://bugs.webkit.org/show_bug.cgi?id=72555

        Reviewed by Anders Carlsson.

        Test: media/track/track-cue-mutable.html

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::updateActiveTextTrackCues): Do nothing if the "ignore cue updates"
            flag is set
        (WebCore::HTMLMediaElement::textTrackAddCues): Block cue updates until all of the new cues have
            been added, then call updateActiveTextTrackCues so update the display if necessary.
        (WebCore::HTMLMediaElement::textTrackRemoveCues): Block cue updates until all of the new cues have
            been removed, then call updateActiveTextTrackCues so update the display if necessary.
        (WebCore::HTMLMediaElement::textTrackAddCue): Call updateActiveTextTrackCues so update the display if necessary.
        (WebCore::HTMLMediaElement::textTrackRemoveCue): Ditto.
        * html/HTMLMediaElement.h:
        (WebCore::HTMLMediaElement::ignoreTrackDisplayUpdateRequests):
        (WebCore::HTMLMediaElement::beginIgnoringTrackDisplayUpdateRequests):
        (WebCore::HTMLMediaElement::endIgnoringTrackDisplayUpdateRequests):

        * html/TextTrack.cpp:
        (WebCore::TextTrack::cueWillChange): New, remove the cue from the media element because its
            position in the interval tree is based on start and end times.
        (WebCore::TextTrack::cueDidChange): Add the cue to the media element.
        * html/TextTrack.h:

        * html/TextTrackCue.cpp:
        (WebCore::startKeyword): New, use a static String for the constant.
        (WebCore::middleKeyword): Ditto.
        (WebCore::endKeyword): Ditto.
        (WebCore::horizontalKeyword): Ditto.
        (WebCore::verticalKeyword): Ditto.
        (WebCore::verticallrKeyword): Ditto.
        (WebCore::TextTrackCue::cueWillChange): New, tell the track the cue is about to change.
        (WebCore::TextTrackCue::cueDidChange): New, tell the track the cue has changed.
        (WebCore::TextTrackCue::setId): New, attribute is mutable.
        (WebCore::TextTrackCue::setStartTime): Ditto.
        (WebCore::TextTrackCue::setEndTime): Ditto.
        (WebCore::TextTrackCue::setPauseOnExit): Ditto.
        (WebCore::TextTrackCue::direction): Ditto.
        (WebCore::TextTrackCue::setDirection): Ditto.
        (WebCore::TextTrackCue::setSnapToLines): Ditto.
        (WebCore::TextTrackCue::setLinePosition): Ditto.
        (WebCore::TextTrackCue::setTextPosition): Ditto.
        (WebCore::TextTrackCue::setSize): Ditto.
        (WebCore::TextTrackCue::alignment): Ditto.
        (WebCore::TextTrackCue::setAlignment): Ditto.
        (WebCore::TextTrackCue::parseSettings): Use the static strings.
        * html/TextTrackCue.h:
        (WebCore::TextTrackCue::id):
        (WebCore::TextTrackCue::startTime):
        (WebCore::TextTrackCue::endTime):
        (WebCore::TextTrackCue::pauseOnExit):
        * html/TextTrackCue.idl:

2012-01-06  Oliver Hunt  <oliver@apple.com>

        DFG no longer optimises CanvasPixelArray
        https://bugs.webkit.org/show_bug.cgi?id=75729

        Reviewed by Gavin Barraclough.

        Remove the custom ClassInfo for CanvasPixelArray as that is
        defeating ByteArray optimisation, and is no longer needed
        anyway as it was only there to change the visible name.

        * bindings/js/JSImageDataCustom.cpp:
        (WebCore::toJS):

2012-01-06  Ken Buchanan  <kenrb@chromium.org>

        ASSERT failure due to combine-text with preceding spaces
        https://bugs.webkit.org/show_bug.cgi?id=65147

        Reviewed by David Hyatt.

        A couple of ASSERTs were failing due to a parsing problem when
        advancing an inline iterator to the next linebreak in a
        RenderCombineText. skipLeadingWhitespace advances the iterator
        over leading whitespace but when searching for the line break
        nextLineBreak would call RenderCombineText::combineText(),
        collapsing the text so that the iterator is pointing past the
        end of it.

        This patch causes combineText() to be called during
        skipLeadingWhiteSpace before iteration over the RenderCombineText
        begins.

        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::LineBreaker::nextLineBreak):
        (WebCore::RenderBlock::LineBreaker::skipLeadingWhitespace):

2012-01-06  Anders Carlsson  <andersca@apple.com>

        Make ScrollAnimatorMac::snapRubberBandTimerFired use m_scrollElasticityController in more places
        https://bugs.webkit.org/show_bug.cgi?id=75726

        Reviewed by Sam Weinig.

        * platform/mac/ScrollAnimatorMac.h:
        * platform/mac/ScrollAnimatorMac.mm:
        (WebCore::ScrollAnimatorMac::canScrollHorizontally):
        (WebCore::ScrollAnimatorMac::canScrollVertically):
        (WebCore::ScrollAnimatorMac::snapRubberBandTimerFired):
        * platform/mac/ScrollElasticityController.h:

2012-01-06  Pratik Solanki  <psolanki@apple.com>

        WebKit1 fails to compile with USE(CFNETWORK) and HAVE(NETWORK_CFDATA_ARRAY_CALLBACK)
        https://bugs.webkit.org/show_bug.cgi?id=75675

        Reviewed by Oliver Hunt.

        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::willCacheResponse):

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

        Crash with range selection across different documents.
        https://bugs.webkit.org/show_bug.cgi?id=74285

        Reviewed by Ryosuke Niwa.

        Test: fast/dom/Range/range-selection-across-documents-crash.html

        * page/DOMSelection.cpp:
        (WebCore::DOMSelection::addRange):

2012-01-06  Sam Weinig  <sam@webkit.org>

        Remove unused OwnFastMallocPtr class.
        https://bugs.webkit.org/show_bug.cgi?id=75722

        Reviewed by Geoffrey Garen.

        * ForwardingHeaders/wtf/OwnFastMallocPtr.h: Removed.
        * bindings/js/JSWebGLRenderingContextCustom.cpp:

2012-01-06  Tony Chang  <tony@chromium.org>

        Need to relayout when stretching the height of a flex item
        https://bugs.webkit.org/show_bug.cgi?id=75661

        Reviewed by Ojan Vafai.

        Test: css3/flexbox/flex-align-stretch.html

        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::computePreferredMainAxisExtent): Always clear the override size since
        it may be set when aligning.
        (WebCore::RenderFlexibleBox::alignChildren): Only relayout if the height changed.

2012-01-06  Anders Carlsson  <andersca@apple.com>

        Add ScrollElasticityControllerClient::immediateScrollBy
        https://bugs.webkit.org/show_bug.cgi?id=75720

        Reviewed by Andreas Kling.

        Add a new ScrollElasticityControllerClient::immediateScrollBy client member function.
        Also, make ScrollAnimatorMac::smoothScrollWithEvent calls go through the ScrollElasticityController
        in preparation for moving that function to ScrollElasticityController.

        * platform/mac/ScrollAnimatorMac.h:
        * platform/mac/ScrollAnimatorMac.mm:
        (WebCore::ScrollAnimatorMac::smoothScrollWithEvent):
        * platform/mac/ScrollElasticityController.h:

2012-01-06  Wei James  <james.wei@intel.com>

        Use VectorMath lib when possible to optimize the processing in WebAudio AudioBus
        https://bugs.webkit.org/show_bug.cgi?id=75334

        Reviewed by Kenneth Russell.

        * platform/audio/AudioBus.cpp:
        (WebCore::AudioBus::processWithGainFromMonoStereo):

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

        Fullscreen video controller can't be dragged the first time I enter fullscreen
        https://bugs.webkit.org/show_bug.cgi?id=75709

        Reviewed by Eric Carlson.

        No new tests; updated video-controls-drag.html.

        When the media controls are created, check to see if we are full screen, and pass
        that information to the newly created controls.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::createMediaControls):

2012-01-05  Jer Noble  <jer.noble@apple.com>

        Media Element: scrubbing in full-screen mode breaks playback.
        https://bugs.webkit.org/show_bug.cgi?id=75650

        Reviewed by John Sullivan.

        Test: fullscreen/video-controls-timeline.html

        Only begin scrubbing if the panel itself is the mousedown event target.

        * html/shadow/MediaControlElements.cpp:
        (WebCore::MediaControlPanelElement::defaultEventHandler):

2012-01-05  Jer Noble  <jer.noble@apple.com>

        REGRESSION (r90797): Full screen video HUD cannot be dragged horizontally
        https://bugs.webkit.org/show_bug.cgi?id=75200

        Reviewed by Eric Carlson.

        Test: fullscreen/video-controls-drag.html

        The !important rules in fullscreenQuickTime.css are overriding the styles added by the 
        drag operation in MediaControlElements.cpp.  Give the panel a "dragged" class in setPosition
        (clearing it in resetPosition) that allows the !important rules to apply only when the 
        panel is not dragged.

        * css/fullscreenQuickTime.css:
        (video:-webkit-full-screen::-webkit-media-controls-panel):
        (video:-webkit-full-screen::-webkit-media-controls-panel:not(.dragged)):
        * html/shadow/MediaControlElements.cpp:
        (WebCore::MediaControlPanelElement::setPosition):
        (WebCore::MediaControlPanelElement::resetPosition):

2012-01-05  Antti Koivisto  <antti@apple.com>

        REGRESSION (r104060): fast/forms/textarea-metrics.html is failing
        https://bugs.webkit.org/show_bug.cgi?id=75644

        Reviewed by Alexey Proskuryakov.

        We need to clear the style selector on doc type change as the doc type
        may affect interpretation of the stylesheets. r104060 extended the life
        of the style selector in some cases, exposing this problem.

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

2012-01-06  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Move listing of include paths and libs to pri files in sources

        Includepaths are sometimes modified by non-Qt contributors so keeping
        them in files inside Sources makes it more likely that they are updated
        along with project files for the other ports.

        Using pri files instead of prf files for this also has the benefit that
        the include() from the main target file can be parsed and followed by
        Qt Creator -- something that does not work with load().

        Dependency from a target to a library through the WEBKIT variable are
        handled through forwarding-files in Tools/qmake/mkspecs/modules, which
        set the source root of the module and include the right pri file.

        Ideally we'd use the variant of include() that takes an optional
        namespace to read the variables into, or the fromfile() function,
        but both of these add an overhead of about 40% on the total qmake
        runtime, due to making a deep copy of all the variables in the
        project or re-reading all the prf files from scratch.

        Reviewed by Simon Hausmann.
        Reviewed by Ossy.

        * Target.pri:
        * WebCore.pri: Renamed from Tools/qmake/mkspecs/features/webcore.prf.

2012-01-06  Adam Barth  <abarth@webkit.org>

        FrameDestructionObserver should be more full-service
        https://bugs.webkit.org/show_bug.cgi?id=75690

        Reviewed by Eric Seidel.

        This patch moves code common to both subclasses of
        FrameDestructionObserver into FrameDestructionObserver itself.  As we
        add more subclasses, we don't want to keep copy/pasting this code.

        * page/Frame.cpp:
        (WebCore::FrameDestructionObserver::FrameDestructionObserver):
        (WebCore::FrameDestructionObserver::~FrameDestructionObserver):
        (WebCore::FrameDestructionObserver::frameDestroyed):
        * page/Frame.h:
        (WebCore::FrameDestructionObserver::frame):
        * plugins/DOMMimeType.cpp:
        (WebCore::DOMMimeType::DOMMimeType):
        (WebCore::DOMMimeType::~DOMMimeType):
        * plugins/DOMMimeType.h:
        * plugins/DOMPlugin.cpp:
        (WebCore::DOMPlugin::DOMPlugin):
        (WebCore::DOMPlugin::~DOMPlugin):
        * plugins/DOMPlugin.h:

2012-01-06  Dale Curtis  <dalecurtis@chromium.org>

        Move MediaDocument styles into CSS. Set black background for chromium.
        https://bugs.webkit.org/show_bug.cgi?id=74123

        Reviewed by Eric Seidel.

        Test: platform/chromium/media/video-black-bg-in-media-document.html

        * css/mediaControls.css:
        (body:-webkit-full-page-media):
        (video:-webkit-full-page-media):
        * css/mediaControlsChromium.css:
        (body:-webkit-full-page-media):
        * html/MediaDocument.cpp:
        (WebCore::MediaDocumentParser::createDocumentStructure):

2012-01-06  Alice Boxhall  <aboxhall@chromium.org>

        Report correct line number for non-native editable text elements.
        https://bugs.webkit.org/show_bug.cgi?id=71263

        Reviewed by Ryosuke Niwa.

        A non-native editable text element is an element with an ARIA role of "textbox", which is
        set on an element which behaves like an editable text element (such as a textarea, text
        input field or contenteditable text), but whose behaviour is controlled by the author rather
        than the browser.

        This change makes certain methods on Node, and related methods in htmlediting and
        visible_units, aware of the notion that an element may be editable only from the point of
        view of assistive technology (via the ARIA textbox role), via the EditableType enum added to
        EditingBoundary.h.

        This is so that AccessibilityObject::lineForPosition() can use previousLinePosition(), and
        AccessibilityRenderObject::indexForVisiblePosition() can use highestEditableRoot(), in a way
        that respects non-native editability.

        Test: accessibility/textbox-role-reports-line-number.html

        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::rootAXEditableElement): Returns the root element which is
        editable from the point of view of assistive technology, whether natively or otherwise.
        (WebCore::AXObjectCache::nodeIsTextControl): Whether the given node is considered an
        editable text element by assistive technology, natively or otherwise.
        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::lineForPosition): Modified to request the previous line
        position in an element which is editable to Accessibility.
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::indexForVisiblePosition): Modified to request the
        highest root element which is editable to Accessibility.
        * dom/Node.cpp:
        (WebCore::Node::rendererIsEditableToAccessibility): Whether this node is editable to
        Accessibility for the given EditableLevel.
        (WebCore::Node::rootEditableElement): Overloaded version of this method which takes an
        EditableType enum value indicating whether non-native editability is to be respected.
        * dom/Node.h:
        (WebCore::Node::rendererIsEditable): Overloaded version of this method which takes an
        EditableType enum value indicating whether non-native editability is to be respected.
        (WebCore::Node::rendererIsRichlyEditable):  Overloaded version of this method which takes
        an EditableType enum value indicating whether non-native editability is to be respected.
        * editing/EditingBoundary.h:
        * editing/htmlediting.cpp:
        (WebCore::highestEditableRoot): Added optional EditableType parameter.
        (WebCore::isEditablePosition): Added optional EditableType parameter.
        (WebCore::isRichlyEditablePosition): Added optional EditableType parameter.
        (WebCore::editableRootForPosition): Added optional EditableType parameter.
        * editing/htmlediting.h:
        * editing/visible_units.cpp:
        (WebCore::previousLeafWithSameEditability): Added optional EditableType parameter.
        (WebCore::previousLinePosition): Added optional EditableType parameter.
        (WebCore::nextLeafWithSameEditability): Added optional EditableType parameter.
        (WebCore::nextLinePosition): Added optional EditableType parameter.
        * editing/visible_units.h:

2012-01-05  Kent Tamura  <tkent@chromium.org>

        Fix a crash by importing an element of which local name ends with ":input".
        https://bugs.webkit.org/show_bug.cgi?id=75103

        Reviewed by Ryosuke Niwa.

        Test: fast/dom/importNode-confusing-localName.html

        * dom/Document.cpp:
        (WebCore::Document::importNode): Pass QualifiedName of the source elemnt
        to createElement() in order to avoid unnecessary serialization and
        parsing of the qualified name

2012-01-06  Alexis Menard  <alexis.menard@openbossa.org>

        Move HTMLFormControlElementWithState class in its own header file.
        https://bugs.webkit.org/show_bug.cgi?id=75482

        Reviewed by Kent Tamura.

        Move HTMLFormControlElementWithState class which was mixed in HTMLFormControlElement
        files into its own header file and its own implementation file.

        No new tests : the existing ones should cover the refactoring.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * html/HTMLElementsAllInOne.cpp:
        * html/HTMLFormControlElement.cpp:
        * html/HTMLFormControlElement.h:
        * html/HTMLKeygenElement.h:
        * html/HTMLSelectElement.h:
        * html/HTMLTextFormControlElement.h:

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

        Unreviewed, rolling out r104268.
        http://trac.webkit.org/changeset/104268
        https://bugs.webkit.org/show_bug.cgi?id=75689

        It broke the mac build (Requested by Ossy on #webkit).

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * html/HTMLElementsAllInOne.cpp:
        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLFormControlElementWithState::HTMLFormControlElementWithState):
        (WebCore::HTMLFormControlElementWithState::~HTMLFormControlElementWithState):
        (WebCore::HTMLFormControlElementWithState::didMoveToNewDocument):
        (WebCore::HTMLFormControlElementWithState::shouldAutocomplete):
        (WebCore::HTMLFormControlElementWithState::shouldSaveAndRestoreFormControlState):
        (WebCore::HTMLFormControlElementWithState::finishParsingChildren):
        * html/HTMLFormControlElement.h:
        (WebCore::HTMLFormControlElementWithState::canContainRangeEndPoint):
        (WebCore::HTMLFormControlElementWithState::saveFormControlState):
        (WebCore::HTMLFormControlElementWithState::restoreFormControlState):
        * html/HTMLFormControlElementWithState.cpp: Removed.
        * html/HTMLFormControlElementWithState.h: Removed.
        * html/HTMLKeygenElement.h:
        * html/HTMLSelectElement.h:
        * html/HTMLTextFormControlElement.h:

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

        Unreviewed, rolling out r104259 and r104261.
        http://trac.webkit.org/changeset/104259
        http://trac.webkit.org/changeset/104261
        https://bugs.webkit.org/show_bug.cgi?id=75688

        Caused assertion failures (Requested by rniwa on #webkit).

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::takeAllChildrenFrom):
        (WebCore::ContainerNode::insertBefore):
        (WebCore::ContainerNode::replaceChild):
        (WebCore::ContainerNode::removeBetween):
        (WebCore::ContainerNode::removeChildren):
        (WebCore::ContainerNode::appendChild):
        (WebCore::ContainerNode::parserAddChild):
        * dom/DOMAllInOne.cpp:
        * dom/Document.cpp:
        (WebCore::Document::setDocType):
        (WebCore::Document::adoptNode):
        * dom/Element.cpp:
        (WebCore::Element::removeShadowRoot):
        * dom/Node.cpp:
        (WebCore::Node::setDocument):
        (WebCore::Node::setTreeScopeRecursively):
        (WebCore::Node::setDocumentRecursively):
        (WebCore::Node::didMoveToNewDocument):
        * dom/Node.h:
        * dom/TreeScope.cpp:
        * dom/TreeScope.h:
        * dom/TreeScopeAdopter.cpp: Removed.
        * dom/TreeScopeAdopter.h: Removed.

2012-01-05  Dan Bernstein  <mitz@apple.com>

        <rdar://problem/10633760> Update copyright strings

        Reviewed by Mark Rowe.

        * Info.plist:

2012-01-05  Alexis Menard  <alexis.menard@openbossa.org>

        Move HTMLFormControlElementWithState class in its own header file.
        https://bugs.webkit.org/show_bug.cgi?id=75482

        Reviewed by Kent Tamura.

        Move HTMLFormControlElementWithState class which was mixed in HTMLFormControlElement
        files into its own header file and its own implementation file.

        No new tests : the existing ones should cover the refactoring.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * html/HTMLElementsAllInOne.cpp:
        * html/HTMLFormControlElement.cpp:
        * html/HTMLFormControlElement.h:
        * html/HTMLKeygenElement.h:
        * html/HTMLSelectElement.h:
        * html/HTMLTextFormControlElement.h:

2012-01-05  Wei James  <james.wei@intel.com>

        Optimize with memcpy instead of copying frame by frame in Realtimeanalyser::doFFTAnalysis
        https://bugs.webkit.org/show_bug.cgi?id=74693

        Reviewed by Kenneth Russell.

        * webaudio/RealtimeAnalyser.cpp:
        (WebCore::RealtimeAnalyser::doFFTAnalysis):

2012-01-05  Ryosuke Niwa  <rniwa@webkit.org>

        REGRESSION(r104210): Dromaeo DOM test score is lower
        https://bugs.webkit.org/show_bug.cgi?id=75679

        Reviewed by Andreas Kling.

        The regression was caused by isDomVersionConsistent not being able to obtain the tree version
        inside isLengthCacheValid when m_cachedItem is null. Fix the regression by always setting
        m_cachedItem to some node when caching the length so that we can obtain the tree version later.

        Also address Antti's review comment to fit m_cachedLength, m_isLengthCacheValid, and
        m_isItemCacheValid all in 32-bit.

        * dom/DynamicNodeList.cpp:
        (WebCore::DynamicSubtreeNodeList::SubtreeCaches::setLengthCache):

2012-01-05  Hajime Morrita  <morrita@chromium.org>

        Unreviewed bad merge fix for r104259 which dropped a line from r104210.

        * dom/TreeScopeAdopter.cpp:
        (WebCore::TreeScopeAdopter::moveTreeToNewScope):

2012-01-05  Yongjun Zhang  <yongjun_zhang@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=75593
        Reviewed by Alexey Proskuryakov.

        Null-check 'page' variable before use, to follow the common usage pattern of m_frame->page()
        throughout the rest of FrameView.cpp.

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

2012-01-04  Hajime Morrita  <morrita@chromium.org>

        [Refactoring] Moving between TreeScopes should be done by its own class.
        https://bugs.webkit.org/show_bug.cgi?id=75290

        Reviewed by Ryosuke Niwa.

        This change extracted Node::setTreeScopeRecursively(),
        setDocumentRecursively() and a part of setDocument() into a new
        class called TreeScopeAdopter. By doing this, the idea of
        moving a node from scope to scope, that was originally hidden
        behind the forest of Node APIs, has become clearer.

        Note that this change is a preparation for Bug 59816.

        No new tests. No behavioral change.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/ContainerNode.cpp: Followed the renaming.
        (WebCore::ContainerNode::takeAllChildrenFrom):
        (WebCore::ContainerNode::insertBefore):
        (WebCore::ContainerNode::replaceChild):
        (WebCore::ContainerNode::removeBetween):
        (WebCore::ContainerNode::removeChildren):
        (WebCore::ContainerNode::appendChild):
        (WebCore::ContainerNode::parserAddChild):
        * dom/DOMAllInOne.cpp:
        * dom/Document.cpp: Followed te renaming.
        (WebCore::Document::setDocType):
        (WebCore::Document::adoptNode):
        * dom/Element.cpp: Followed te renaming.
        (WebCore::Element::removeShadowRoot):
        * dom/Node.cpp:
        (WebCore::Node::setDocument):
        (WebCore::Node::setTreeScope):
        (WebCore::Node::didMoveToNewDocument):
        * dom/Node.h:
        * dom/TreeScope.h:
        * dom/TreeScope.cpp:
        (WebCore::TreeScope::adoptIfNeeded): moved from setTreeScopeRecursively()
        * dom/TreeScopeAdopter.cpp: Added.
        (WebCore::TreeScopeAdopter::TreeScopeAdopter):
        (WebCore::TreeScopeAdopter::moveTreeToNewScope):
        (WebCore::TreeScopeAdopter::moveTreeToNewDocument):
        (WebCore::TreeScopeAdopter::ensureDidMoveToNewDocumentWasCalled):
        (WebCore::TreeScopeAdopter::moveNodeToNewDocument):
        * dom/TreeScopeAdopter.h: Added.
        (WebCore::TreeScopeAdopter::ensureDidMoveToNewDocumentWasCalled):
        (WebCore::TreeScopeAdopter::execute):
        (WebCore::TreeScopeAdopter::needsScopeChange()):
        (WebCore::TreeScopeAdopter::shadowRootFor):

2012-01-05  Jochen Eisinger  <jochen@chromium.org>

        Disallow access to DOM storage from detached frames.
        https://bugs.webkit.org/show_bug.cgi?id=61326

        Reviewed by Adam Barth.

        * storage/StorageAreaImpl.cpp:
        (WebCore::StorageAreaImpl::disabledByPrivateBrowsingInFrame):

2012-01-05  No'am Rosenthal  <noam.rosenthal@nokia.com>

        [Qt][Texmap] Convert shaders in TextureMapperGL to use a macro
        https://bugs.webkit.org/show_bug.cgi?id=75598

        Use VERTEX_SHADER() and FRAGMENT_SHADER() macros, instead of quoted string literals when
        declaring shaders in TextureMapperGL.

        We need two macros to account for the differences between OpenGL and OpenGL ES2.

        Reviewed by Martin Robinson.

2012-01-05  Ryosuke Niwa  <rniwa@webkit.org>

        sizeof(CSSRule) is 20 instead of 12 on Windows
        https://bugs.webkit.org/show_bug.cgi?id=75665

        Reviewed by Darin Fisher.

        Unlike gcc and clang, MSVC pads each consecutive member variables of the same type
        in bitfields. e.g. if you have:

        sturct AB {
        unsigned m_1 : 31;
        bool m_2 : 1;
        }

        then MSVC pads m_1 and allocates sizeof(unsigned) * 2 for AB whereas gcc and clang
        only allocate sizeof(unsigned) * 1 for AB.

        Fix the bloat by turning all bitfields in CSSRule either signed or unsigned integers.

        * css/CSSRule.cpp:
        * css/CSSRule.h:
        (WebCore::CSSRule::sourceLine):
        (WebCore::CSSRule::setSourceLine):
        (WebCore::CSSRule::hasCachedSelectorText):
        (WebCore::CSSRule::setHasCachedSelectorText):
        * css/CSSStyleRule.cpp:
        (WebCore::CSSStyleRule::CSSStyleRule):
        (WebCore::CSSStyleRule::cleanup):
        (WebCore::CSSStyleRule::selectorText):
        (WebCore::CSSStyleRule::setSelectorText):
        * css/CSSStyleRule.h:

2012-01-05  David Grogan  <dgrogan@chromium.org>

        IndexedDB: fix cursor prefetch crash
        http://crbug.com/108071
        https://bugs.webkit.org/show_bug.cgi?id=75596

        Reviewed by Tony Chang.

        Test: storage/indexeddb/prefetch-bugfix-108071.html
        Note: DumpRenderTree doesn't exercise the bug, it only occurs in
        multi-process chromium.  The layout test will soon be run as a
        chromium ui test: http://codereview.chromium.org/9108004

        * storage/IDBCursorBackendImpl.cpp:
        (WebCore::IDBCursorBackendImpl::IDBCursorBackendImpl):
        (WebCore::IDBCursorBackendImpl::~IDBCursorBackendImpl): Destroy
        cursors before their objectstores.
        (WebCore::IDBCursorBackendImpl::prefetchReset): Don't run continue if
        the cursor is closed.
        (WebCore::IDBCursorBackendImpl::close): Set a closed flag.
        * storage/IDBCursorBackendImpl.h:

2012-01-04  James Robinson  <jamesr@chromium.org>

        [chromium] Route all animate calls through CCLayerTreeHost in composited mode to simplify rate limiting logic
        https://bugs.webkit.org/show_bug.cgi?id=75577

        Reviewed by Darin Fisher.

        This internalizes the animation rate limiting logic to CCLayerTreeHost and removes the setters/getters for the
        m_animating flag. This requires that all animation updates have to go through CCLayerTreeHost to get the right
        rate limiting behavior, regardless of which proxy is being used.

        * platform/graphics/chromium/cc/CCLayerTreeHost.cpp:
        (WebCore::CCLayerTreeHost::updateAnimations):
        (WebCore::CCLayerTreeHost::layout):
        (WebCore::CCLayerTreeHost::startRateLimiter):
        * platform/graphics/chromium/cc/CCLayerTreeHost.h:
        * platform/graphics/chromium/cc/CCThreadProxy.cpp:
        (WebCore::CCThreadProxy::beginFrameAndCommit):

2012-01-05  Justin Novosad  <junov@chromium.org>

        [Chromium] NativeImageSkia should mark SkBitmaps as immutable
        https://bugs.webkit.org/show_bug.cgi?id=74962

        Removed m_isDataComplete from class NativeImageSkia. Instead, data
        completeness will be tracked through SkBitmap::setImmutable/
        isImmutable.  The immutable state signifies that the pixel data
        will no longer change for the lifetime of the bitmap, which corresponds
        to the semantic of the old m_isDataComplete member. setImmutable is
        also called on the cached resized bitmap, since it too is invariant for
        its life time. Temporary resized bitmaps are also marked as immutable
        since they technically are.

        Reviewed by Stephen White.

        * platform/graphics/skia/NativeImageSkia.cpp:
        (WebCore::NativeImageSkia::NativeImageSkia):
        (WebCore::NativeImageSkia::resizedBitmap):
        (WebCore::NativeImageSkia::shouldCacheResampling):
        * platform/graphics/skia/NativeImageSkia.h:
        (WebCore::NativeImageSkia::setDataComplete):
        (WebCore::NativeImageSkia::isDataComplete):

2012-01-05  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r104231.
        http://trac.webkit.org/changeset/104231
        https://bugs.webkit.org/show_bug.cgi?id=75668

        Breaks the Qt build (Requested by abarth on #webkit).

        * platform/SchemeRegistry.cpp:
        * platform/SchemeRegistry.h:

2012-01-05  Beth Dakin  <bdakin@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=75654
        Text fields should draw using NSTextFieldCell instead of WebKitSystemInterface

        Reviewed by John Sullivan.

        This change should not have any affect on tests or real web sites. It just changed 
        the implementation under the hood to the more modern NSCell approach.
        * rendering/RenderThemeMac.h:
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::paintTextField):
        (WebCore::RenderThemeMac::textField):

2012-01-05  Ryosuke Niwa  <rniwa@webkit.org>

        Add a compile-time assertion for the size of CSSValue
        https://bugs.webkit.org/show_bug.cgi?id=75635

        Reviewed by Tony Chang.

        Tightened the compile-time assertion.

        * css/CSSValue.cpp:

2012-01-05  Adam Barth  <abarth@webkit.org>

        [V8] CodeGeneration for SerializedScriptValue doesn't play nice with [Constructor]
        https://bugs.webkit.org/show_bug.cgi?id=75641

        Reviewed by David Levin.

        Rather than generate getters for SerializedScriptValues, we eagerly
        deserialize them into JavaScript objects.  However, previously, we were
        only doing that for DOM wrappers created by taking an existing C++
        object and wrapping it.  For objects created with Constructors (e.g.,
        those with the [Constructor] attribute), we need to do this eager
        deserialization during the constructor as well.

        This bug isn't observable yet, but it is causing the WebIntent test
        being added in Bug 73051 to fail.

        Test: TestSerializedScriptValueInterface.idl
              webintents/web-intents-api.html (after Bug 73051 lands)

        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateEagerDeserialization):
        (GenerateConstructorCallback):
        (GenerateNamedConstructorCallback):
        (GenerateImplementation):
        (GenerateToV8Converters):
        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp:
        (WebCore::JSTestSerializedScriptValueInterfaceConstructor::constructJSTestSerializedScriptValueInterface):
        (WebCore::JSTestSerializedScriptValueInterfaceConstructor::getConstructData):
        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.h:
        * bindings/scripts/test/TestSerializedScriptValueInterface.idl:
        * bindings/scripts/test/V8/V8TestInterface.cpp:
        (WebCore::V8TestInterface::constructorCallback):
        * bindings/scripts/test/V8/V8TestNamedConstructor.cpp:
        (WebCore::V8TestNamedConstructorConstructorCallback):
        * bindings/scripts/test/V8/V8TestObj.cpp:
        (WebCore::V8TestObj::constructorCallback):
        * bindings/scripts/test/V8/V8TestSerializedScriptValueInterface.cpp:
        (WebCore::V8TestSerializedScriptValueInterface::constructorCallback):
        (WebCore::ConfigureV8TestSerializedScriptValueInterfaceTemplate):
        * bindings/scripts/test/V8/V8TestSerializedScriptValueInterface.h:

2012-01-05  Adam Barth  <abarth@webkit.org>

        Introduce Platform namespace for WebCore/platform
        https://bugs.webkit.org/show_bug.cgi?id=75653

        Reviewed by Eric Seidel.

        This patch introduces the Platform namespace for WebCore/platform.
        Introducing this namespace will help us find and fix layering
        violations in preparation for moving WebCore/platform to Platform.

        * platform/SchemeRegistry.cpp:
        * platform/SchemeRegistry.h:

2012-01-05  Ryosuke Niwa  <rniwa@webkit.org>

        Inserting nodes is slow due to Node::notifyNodeListsAttributeChanged (20%+)
        https://bugs.webkit.org/show_bug.cgi?id=73853

        Reviewed by Antti Koivisto.

        Lazily invalidate the node list caches instead of invaliding them at the time of modification. We use
        the DOM tree version to detect whether caches need to be invalidated or not. We now invalidate caches more
        frequently after this patch (in particular, invalidates caches that are stored on nodes not present in
        the ancestry of the modified nodes); however, our study on major Web sites such as Gmail, Facebook, Twitter,
        etc... indicate that about 1% of real-world usage benefits from keeping the caches alive across different
        DOM tree versions.

        In order to invalidate caches lazily, this patch adds replaces the type of m_caches in DynamicSubtreeNodeList
        by DynamicSubtreeNodeList::SubtreeCaches which encapsulates member variables in DynamicNodeList::Caches and
        invalidates values as needed. Also this change allows m_caches to be allocated as a part of
        DynamicSubtreeNodeList instead of a separate ref-counted object.

        * dom/Attr.cpp:
        (WebCore::Attr::setValue):
        (WebCore::Attr::childrenChanged):
        * dom/DynamicNodeList.cpp:
        (WebCore::DynamicSubtreeNodeList::DynamicSubtreeNodeList):
        (WebCore::DynamicSubtreeNodeList::length):
        (WebCore::DynamicSubtreeNodeList::itemForwardsFromCurrent):
        (WebCore::DynamicSubtreeNodeList::itemBackwardsFromCurrent):
        (WebCore::DynamicSubtreeNodeList::item):
        (WebCore::DynamicSubtreeNodeList::invalidateCache):
        (WebCore::DynamicNodeList::Caches::create):
        (WebCore::DynamicNodeList::Caches::reset):
        * dom/DynamicNodeList.h:
        (WebCore::DynamicSubtreeNodeList::SubtreeCaches::SubtreeCaches): Added.
        (WebCore::DynamicSubtreeNodeList::SubtreeCaches::isLengthCacheValid): Added.
        (WebCore::DynamicSubtreeNodeList::SubtreeCaches::isItemCacheValid): Added.
        (WebCore::DynamicSubtreeNodeList::SubtreeCaches::cachedLength): Added.
        (WebCore::DynamicSubtreeNodeList::SubtreeCaches::cachedItem): Added.
        (WebCore::DynamicSubtreeNodeList::SubtreeCaches::cachedItemOffset): Added.
        (WebCore::DynamicSubtreeNodeList::SubtreeCaches::setLengthCache): Added.
        (WebCore::DynamicSubtreeNodeList::SubtreeCaches::setItemCache): Added.
        (WebCore::DynamicSubtreeNodeList::SubtreeCaches::reset): Added.
        (WebCore::DynamicSubtreeNodeList::SubtreeCaches::domVersionIsConsistent): Added.
        * dom/Element.cpp:
        (WebCore::Element::updateAfterAttributeChanged):
        * dom/Node.cpp:
        (WebCore::Node::setTreeScopeRecursively): Clear caches when a node moves from one document to another.
        (WebCore::Node::invalidateNodeListsCacheAfterAttributeChanged): Only clears child node list of Attr.
        (WebCore::Node::invalidateNodeListsCacheAfterChildrenChanged): Only clears child node list.
        (WebCore::NodeListsNodeData::invalidateCaches): Merged with invalidateCachesThatDependOnAttributes.
        * dom/Node.h:
        * dom/NodeRareData.h:
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::parseMappedAttribute):
        * html/HTMLLabelElement.cpp:
        * html/HTMLLabelElement.h:

2012-01-05  Ojan Vafai  <ojan@chromium.org>

        IE quirk for percentage size on a table element doesn't work with orthogonal writing modes
        https://bugs.webkit.org/show_bug.cgi?id=70195

        Reviewed by Eric Seidel.

        Remove this quirk entirely. Mozilla and Opera don't implement it and IE
        doesn't restrict the quirk to standards mode. As it's unlikely for
        webkit-only content to hit this quirk (e.g. use tables for layout),
        it should be relatively safe to match Mozilla/Opera here.

        Test: fast/writing-mode/table-percent-width-quirk.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::computeBlockPreferredLogicalWidths):

2012-01-05  Tien Ren Chen  <trchen@chromium.org>

        [chromium] Add CCTimer class for the compositor
        https://bugs.webkit.org/show_bug.cgi?id=74769

        Reviewed by James Robinson.

        Add a simple timer class for CCThread that the timered task can be
        manually cancelled.

        * WebCore.gypi:
        * platform/graphics/chromium/cc/CCTimer.cpp: Added.
        (WebCore::CCTimerTask::CCTimerTask):
        (WebCore::CCTimerTask::~CCTimerTask):
        (WebCore::CCTimerTask::performTask):
        (WebCore::CCTimer::CCTimer):
        (WebCore::CCTimer::~CCTimer):
        (WebCore::CCTimer::startOneShot):
        (WebCore::CCTimer::stop):
        * platform/graphics/chromium/cc/CCTimer.h: Added.
        (WebCore::CCTimerClient::~CCTimerClient):
        (WebCore::CCTimer::isActive):

2012-01-05  Eric Carlson  <eric.carlson@apple.com>

        Implement temporal dimension portion of Media Fragments URI specification for video/audio
        https://bugs.webkit.org/show_bug.cgi?id=65838

        Reviewed by Sam Weinig.

        Tests: media/media-fragments/TC0001-TC0009.html
               media/media-fragments/TC0010-TC0019.html
               media/media-fragments/TC0020-TC0029.html
               media/media-fragments/TC0030-TC0039.html
               media/media-fragments/TC0040-TC0049.html
               media/media-fragments/TC0050-TC0059.html
               media/media-fragments/TC0060-TC0069.html
               media/media-fragments/TC0070-TC0079.html
               media/media-fragments/TC0080-TC0089.html
               media/media-fragments/TC0090-TC0099.html

        * CMakeLists.txt: Add fragment parser files.
        * GNUmakefile.list.am: Ditto.
        * Target.pri: Ditto.
        * WebCore.gypi: Ditto.
        * WebCore.vcproj/WebCore.vcproj: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Ditto.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::HTMLMediaElement): Initialize m_fragmentStartTime and m_fragmentEndTime.
        (WebCore::HTMLMediaElement::setReadyState): Check for and parse a media fragment once readyState
            reaches HAVE_METADATA, apply it once it reaches HAVE_CURRENT_DATA.
        (WebCore::HTMLMediaElement::initialTime): Return the fragment start time if possible.
        (WebCore::HTMLMediaElement::playbackProgressTimerFired): Pause if the time is >= the fragment
            end time.
        (WebCore::HTMLMediaElement::prepareMediaFragmentURI): Look for a temporal fragment.
        (WebCore::HTMLMediaElement::applyMediaFragmentURI): Apply the fragment, if any.
        * html/HTMLMediaElement.h:

        * html/MediaFragmentURIParser.cpp: Added.
        (WebCore::skipWhiteSpace):
        (WebCore::collectDigits):
        (WebCore::collectFraction):
        (WebCore::MediaFragmentURIParser::invalidTimeValue):
        (WebCore::MediaFragmentURIParser::MediaFragmentURIParser):
        (WebCore::MediaFragmentURIParser::startTime):
        (WebCore::MediaFragmentURIParser::endTime):
        (WebCore::MediaFragmentURIParser::parseFragments):
        (WebCore::MediaFragmentURIParser::parseTimeFragment):
        (WebCore::MediaFragmentURIParser::parseNPTFragment):
        (WebCore::MediaFragmentURIParser::parseNPTTime):
        * html/MediaFragmentURIParser.h: Added.
        (WebCore::MediaFragmentURIParser::~MediaFragmentURIParser):
        (WebCore::MediaFragmentURIParser::create):

2012-01-05  ChangSeok Oh  <shivamidow@gmail.com>

        Remove style warning in GraphicsContext3DOpenGL.cpp
        https://bugs.webkit.org/show_bug.cgi?id=75466

        Reviewed by Kenneth Russell.

        Relocated some headers according to alphabetical order & modified indentation.
        And used OwnArrayPtr to deal with character array.

        No new tests required. 

        * platform/graphics/opengl/GraphicsContext3DOpenGL.cpp:
        (WebCore::GraphicsContext3D::getString):
        (WebCore::GraphicsContext3D::releaseShaderCompiler):
        (WebCore::GraphicsContext3D::getProgramInfoLog):
        (WebCore::GraphicsContext3D::getShaderiv):
        (WebCore::GraphicsContext3D::getShaderInfoLog):
        (WebCore::GraphicsContext3D::getShaderSource):

2012-01-05  Ken Buchanan <kenrb@chromium.org>

        Crash due to reparenting of relpositioned object under anonymous block
        https://bugs.webkit.org/show_bug.cgi?id=70848

        The associated test case creates a condition where a relative
        positioned renderer is a descendant of an anonymous block for a
        table column. The anonymous block is the containingBlock() for the
        relpositioned renderer. Removal of a div causes the anonymous blocks to
        be merged, and the renderer becomes a descendant of a different block.
        Since the new containingBlock() has an empty positionedObject list,
        the relpositioned renderer does not get layout after being dirtied.

        This patch changes containingBlock() so that it returns the container
        of an anonymous block for positioned objects, not the anonymous
        block itself. It also adds an ASSERT to insertPositionedObject()
        to flag any other cases where something is trying to create a
        positioned object list on an anonymous block.

        Reviewed by David Hyatt.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::insertPositionedObject):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::containingBlock):

2012-01-05  Jian Li  <jianli@chromium.org>

        FileReader needs addEventListener
        https://bugs.webkit.org/show_bug.cgi?id=42723

        Reviewed by Adam Barth.

        Test: fast/files/file-reader-event-listener.html

        * fileapi/FileReader.idl:

2012-01-04  Pratik Solanki  <psolanki@apple.com>

        Remove deprecated calls from CookieJarCFNet.cpp
        https://bugs.webkit.org/show_bug.cgi?id=68958

        Reviewed by Sam Weinig.

        * platform/network/cf/CookieJarCFNet.cpp:
        (WebCore::cookieDomain):
        (WebCore::cookieExpirationTime):
        (WebCore::cookieName):
        (WebCore::cookiePath):
        (WebCore::cookieValue):

2012-01-05  Fady Samuel  <fsamuel@chromium.org>

        Move scalePageBy from eventSender to window.internals
        https://bugs.webkit.org/show_bug.cgi?id=64512

        Reviewed by Simon Fraser.

        Added setPageScaleFactor to window.internals.
        Renamed window.internals.getPageScaleFactor to window.internals.pageScaleFactor
        to match the webkit style.

        * testing/Internals.cpp:
        (WebCore::Internals::pageScaleFactor):
        (WebCore::Internals::setPageScaleFactor):
        * testing/Internals.h:
        * testing/Internals.idl:

2012-01-05  Cary Clark  <caryclark@google.com>

        [Skia Mac] Rounded bezel style button needs one more local graphics context to scale
        https://bugs.webkit.org/show_bug.cgi?id=75623
        http://code.google.com/p/chromium/issues/detail?id=108749

        In paintButton(), the local context is set up first, and later the context is
        scaled if there's a zoomFactor. Skia creates the CoreGraphics context to draw the
        button into without that scale factor. To fix this, another local context is added
        after the parameter context scale, before the button draw. The first local context
        is still required to restore the parameter context state.

        Reviewed by Stephen White.

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

2012-01-05  Alexis Menard  <alexis.menard@openbossa.org>

        getComputedStyle for background is not implemented.
        https://bugs.webkit.org/show_bug.cgi?id=75539

        Reviewed by Tony Chang.

        Implement getComputedStyle for background.

        Test: fast/css/getComputedStyle/getComputedStyle-background-shorthand.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):

2012-01-05  Ryosuke Niwa  <rniwa@webkit.org>

        DOM Attribute tests on Dromaeo spends 2.7% of time in hasSelectorForAttribute
        https://bugs.webkit.org/show_bug.cgi?id=75569

        Reviewed by Andreas Kling.

        Check needsStyleRecalc() first to avoid unnecessary hash lookups.

        * dom/Element.cpp:
        (WebCore::Element::recalcStyleIfNeededAfterAttributeChanged):

2012-01-05  Grzegorz Czajkowski  <g.czajkowski@samsung.com>

        [EFL] Replace alloca to C++ new placement.
        https://bugs.webkit.org/show_bug.cgi?id=72017

        Reviewed by Andreas Kling.

        Replaces alloca to C++ new placement as it is not very portable.
        It allows to skip checking of memory allocation as new never returns NULL.
        According to Edje's documentation type of val (member of Edje_Message_Float_Set)
        is double so I changed it to avoid undefined behaviour.

        * platform/efl/ScrollbarEfl.cpp:
        (ScrollbarEfl::updateThumbPositionAndProportion):

2012-01-05  Benjamin Poulain  <bpoulain@apple.com>

        Remove duplicate file references from WebCore.xcodeproj
        https://bugs.webkit.org/show_bug.cgi?id=75581

        Reviewed by Andreas Kling.

        Many generated DOMSVG files had two references.

        In platform/graphics, there was two arm directory
        with the same files related to ARM Neon.

        * WebCore.xcodeproj/project.pbxproj:

2012-01-05  Antti Koivisto  <antti@apple.com>

        Improve SelectorChecker::determineSelectorScopes
        https://bugs.webkit.org/show_bug.cgi?id=75619

        Reviewed by Andreas Kling.

        SelectorChecker::determineSelectorScopes currently searches to the end of the selector chain and
        then sees if the last one is suitable to be a scope. A better algorithm will find a scope from
        anywhere in the chain.
        
        With this patch we search the whole chain for potential scopes. We now prefer id scopes
        over class scopes. Scopes can be found for rules using sibling selectors too.
        
        On both engadget.com and nytimes.com, we can now skip one more full style recalc due to 
        the improved stylesheet analysis. 

        * css/SelectorChecker.cpp:
        (WebCore::SelectorChecker::determineSelectorScopes):

2012-01-05  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Use the default screen in PlatformScreenGtk methods when they are called with a NULL widget
        https://bugs.webkit.org/show_bug.cgi?id=75620

        Reviewed by Philippe Normand.

        We are currently retuning an empty rectangle for
        screenRect/screenAvailableRect and 0 for getVisual.

        * platform/gtk/PlatformScreenGtk.cpp:
        (WebCore::getVisual):
        (WebCore::screenRect):
        (WebCore::screenAvailableRect):

2012-01-05  Alpha Lam  <hclam@chromium.org>

        Unreviewed. Build fix.

        Adding missing const_cast<> to fix compilation failures due to r104143.

        * platform/audio/VectorMath.cpp:
        (WebCore::VectorMath::zvmul):

2012-01-05  Adam Barth  <abarth@webkit.org>

        Move Gamepad declarations from Navigator.idl into Modules/gamepad
        https://bugs.webkit.org/show_bug.cgi?id=75559

        Reviewed by Eric Seidel.

        This patch moves the gamepad-related declarations in Navigator.idl into
        Modules/gamepad.  The next step is to move the state into
        Modules/gamepad as well.

        * Modules/gamepad/NavigatorGamepad.cpp: Added.
        (WebCore::NavigatorGamepad::NavigatorGamepad):
        (WebCore::NavigatorGamepad::~NavigatorGamepad):
        (WebCore::NavigatorGamepad::webkitGamepads):
        * Modules/gamepad/NavigatorGamepad.h: Added.
        * Modules/gamepad/NavigatorGamepad.idl: Added.
        * WebCore.gypi:
        * page/Navigator.cpp:
        (WebCore::Navigator::gamepads):
        * page/Navigator.h:
        * page/Navigator.idl:

2012-01-05  Alexis Menard  <alexis.menard@openbossa.org>

        getComputedStyle for border-image is not implemented.
        https://bugs.webkit.org/show_bug.cgi?id=75347

        Reviewed by Tony Chang.

        Implement getComputedStyle for border-color.

        fast/css/getComputedStyle/computed-style-border-image.html was extended to cover the
        new feature.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):

2012-01-05  Xingnan Wang  <xingnan.wang@intel.com>

        Add a SSE2 optimized function zvmul in VectorMatch
        https://bugs.webkit.org/show_bug.cgi?id=74842

        Reviewed by Kenneth Russell.

        Use zvmul in FFTFrameFFMPEG.cpp::multiply() and FFTFrameMac.cpp::multiply().

        * platform/audio/VectorMath.cpp:
        (WebCore::VectorMath::zvmul):
        * platform/audio/VectorMath.h:
        * platform/audio/ffmpeg/FFTFrameFFMPEG.cpp:
        (WebCore::FFTFrame::multiply):
        * platform/audio/mac/FFTFrameMac.cpp:
        (WebCore::FFTFrame::multiply):

2012-01-05  Alpha Lam  <hclam@chromium.org>

        Unreviewed. Build fix for Chromium Mac Clang build.

        Push using namespace WTF to .cpp file from .h file.

        * platform/text/TextCodecASCIIFastPath.h:
        * platform/text/TextCodecLatin1.cpp:
        * platform/text/TextCodecUTF8.cpp:

2012-01-05  Max Vujovic  <mvujovic@adobe.com>

        WebKit adds vertical paddings and borders to the fixed width of CSS tables
        https://bugs.webkit.org/show_bug.cgi?id=74955

        Reviewed by Julien Chaffraix.

        Test: fast/table/css-table-width.html

        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::computeLogicalWidth):

            Changed the width calculation for CSS tables to take into account horizontal
            paddings and borders instead of vertical paddings and borders.

2012-01-05  Peter Beverloo  <peter@chromium.org>

        [Chromium] Upstream the RenderTheme and ScrollbarTheme for Android
        https://bugs.webkit.org/show_bug.cgi?id=74614

        Reviewed by Adam Barth.

        Upstream the RenderTheme and ScrollbarTheme for Android. These are
        mostly derived from their Linux variants.

        RenderThemeChromiumAndroid inherits from RenderThemeChromiumLinux and
        only overrides the three methods which have different behavior.
        Scrollbars will be drawn in the threaded compositor for Android (which
        will be upstreamed later), but for increased layout test parity we'll
        match Chromium-Linux.

        No new tests. This code will be exercised by existing layout tests, and
        by manually verifying that theme parts render as expected.

        * WebCore.gyp/WebCore.gyp:
        * WebCore.gypi:
        * platform/chromium/ScrollbarThemeChromiumAndroid.cpp: Added.
        (WebCore::ScrollbarTheme::nativeTheme):
        (WebCore::ScrollbarThemeChromiumAndroid::scrollbarThickness):
        (WebCore::ScrollbarThemeChromiumAndroid::paintScrollbarBackground):
        (WebCore::ScrollbarThemeChromiumAndroid::shouldCenterOnThumb):
        (WebCore::ScrollbarThemeChromiumAndroid::buttonSize):
        (WebCore::ScrollbarThemeChromiumAndroid::minimumThumbLength):
        * platform/chromium/ScrollbarThemeChromiumAndroid.h: Added.
        * rendering/RenderThemeChromiumAndroid.cpp: Added.
        (WebCore::RenderThemeChromiumAndroid::create):
        (WebCore::RenderTheme::themeForPage):
        (WebCore::RenderThemeChromiumAndroid::~RenderThemeChromiumAndroid):
        (WebCore::RenderThemeChromiumAndroid::systemColor):
        (WebCore::RenderThemeChromiumAndroid::adjustInnerSpinButtonStyle):
        * rendering/RenderThemeChromiumAndroid.h: Added.
        * rendering/RenderThemeChromiumLinux.cpp:
        * rendering/RenderThemeChromiumLinux.h:

2012-01-05  Allan Sandfeld Jensen  <allan.jensen@nokia.com>

        Fix potential superlinear runtime of multiple indirect adjenceny combinators.
        https://bugs.webkit.org/show_bug.cgi?id=75083

        Reviewed by Antti Koivisto.

        A sequence of indirect adjencency combinator such as "li ~ li ~ la" could with the
        former algorithm potentially do an quadratic number of element matches.
        The recursive matching algorithm now detects cases where all siblings have
        failed one indirect sibling match and fails the entire selector.

        Test: perf/nested-combined-selectors.html

        * css/SelectorChecker.cpp:
        (WebCore::SelectorChecker::checkSelector): Return SelectorFailsAllSiblings when
        all siblings have failed a selector component.
        * css/SelectorChecker.h: Add SelectorFailsAllSiblings enum value

2012-01-05  Andreas Kling  <awesomekling@apple.com>

        InspectorStyleSheet: Avoid cloning CSSRuleLists.
        <http://webkit.org/b/75603>

        Reviewed by Ryosuke Niwa.

        Don't filter out @charset rules from CSSRuleLists. This was forcing us to clone
        the stylesheet rule list, and is unnecessary since InspectorStyleSheet disregards
        any rule that isn't either a style rule or a rule with an internal rule list.

        * inspector/InspectorStyleSheet.cpp:
        (WebCore::asCSSRuleList):
        (WebCore::InspectorStyleSheet::buildObjectForStyleSheet):

            Don't pass omitCharsetRules=true to the CSSRuleList constructor.

2012-01-05  Andreas Kling  <awesomekling@apple.com>

        Make elements with attributes smaller by eliminating the ref count in NamedNodeMap.
        <http://webkit.org/b/75068>

        Reviewed by Antti Koivisto.

        Remove NamedNodeMap's inheritance from RefCounted and forward the ref()/deref()
        calls to its owner Element, effectively reducing the size of an element that has
        attributes by 4 bytes.

        This reduces memory consumption by 311 kB when viewing the full HTML5 spec.

        * dom/NamedNodeMap.cpp:
        (WebCore::NamedNodeMap::ref):
        (WebCore::NamedNodeMap::deref):

            Added. Forwards the operation to m_element. Only ever used by the DOM wrappers.

        * dom/NamedNodeMap.h:
        (WebCore::NamedNodeMap::create):
        * dom/DocumentType.h:
        * dom/Element.cpp:
        (WebCore::Element::parserSetAttributeMap):
        * dom/Element.h:
        * html/parser/HTMLConstructionSite.cpp:
        * html/parser/HTMLToken.h:
        (WebCore::AtomicHTMLToken::AtomicHTMLToken):
        * html/parser/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::processFakeStartTag):
        (WebCore::HTMLTreeBuilder::attributesForIsindexInput):
        * html/parser/HTMLTreeBuilder.h:
        * html/parser/TextDocumentParser.cpp:
        (WebCore::TextDocumentParser::insertFakePreElement):
        * xml/parser/MarkupTokenBase.h:
        (WebCore::AtomicMarkupTokenBase::AtomicMarkupTokenBase):
        (WebCore::AtomicMarkupTokenBase::takeAttributes):
        * xml/parser/XMLToken.h:
        (WebCore::AtomicXMLToken::AtomicXMLToken):

            Store NamedNodeMap in OwnPtr/PassOwnPtr, rather than RefPtr/PassRefPtr.

2012-01-05  Benjamin Poulain  <benjamin@webkit.org>

        Improve charactersAreAllASCII() to compare multiple characters at a time
        https://bugs.webkit.org/show_bug.cgi?id=74063

        Reviewed by Darin Adler.

        Move some part of TextCodecASCIIFastPath.h to WTF in ASCIIFastPath.h.
        The function isAllASCII() is changed to the template version which now works
        with both LChar and UChar.

        * ForwardingHeaders/wtf/text/ASCIIFastPath.h: Added.
        * platform/text/TextCodecASCIIFastPath.h:
        (WebCore::copyASCIIMachineWord):
        * platform/text/TextCodecLatin1.cpp:
        (WebCore::TextCodecLatin1::decode):
        * platform/text/TextCodecUTF8.cpp:
        (WebCore::TextCodecUTF8::decode):

2012-01-05  Eric Uhrhane  <ericu@chromium.org>

       [fileapi] WebKitFlags should not be constructable per Directories & System spec
       https://bugs.webkit.org/show_bug.cgi?id=68916

       Reviewed by Eric Seidel.

       Remove IDL for the object and all DOM references to it.
       * fileapi/WebKitFlags.idl: Removed.
       * page/DOMWindow.idl:
       * workers/WorkerContext.idl:
       Remove references to the JSC/V8 objects compiled from the IDL.
       * bindings/js/JSDirectoryEntryCustom.cpp:
       (WebCore::JSDirectoryEntry::getFile):
       (WebCore::JSDirectoryEntry::getDirectory):
       * bindings/js/JSDirectoryEntrySyncCustom.cpp:
       (WebCore::getFlags):
       * bindings/v8/custom/V8DirectoryEntryCustom.cpp:
       (WebCore::V8DirectoryEntry::getDirectoryCallback):
       (WebCore::V8DirectoryEntry::getFileCallback):
       * bindings/v8/custom/V8DirectoryEntrySyncCustom.cpp:
       (WebCore::getFlags):
       Fix up build files.
       * WebCore.gypi:
       * WebCore.vcproj/WebCore.vcproj:
       * WebCore.xcodeproj/project.pbxproj:
       * WebCore/CMakeLists.txt:
       * WebCore/CodeGenerators.pri:
       * WebCore/DerivedSources.cpp:
       * WebCore/DerivedSources.make:
       * WebCore/GNUmakefile.list.am:

2012-01-05  Ken Buchanan  <kenrb@chromium.org>

        Crash due to first-letter block processing
        https://bugs.webkit.org/show_bug.cgi?id=74009

        Fixing the way updateFirstLetter() finds the remaining text fragment
        for a given first-letter. Previously this was unreliable in some
        circumstances.

        This patch provides a reliable mechanism to identify the remaining
        text by storing first-letter to remaining text associations in a
        hash map, managed by methods in RenderBoxModelObject.

        Reviewed by David Hyatt.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::updateFirstLetter)
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::willBeDestroyed):
        (WebCore::RenderBoxModelObject::setFirstLetterRemainingText): Added
        (WebCore::RenderBoxModelObject::firstLetterRemainingText): Added
        * rendering/RenderBoxModelObject.h:
        (WebCore::RenderBoxModelObject::setFirstLetterRemainingText): Added
        (WebCore::RenderBoxModelObject::firstLetterRemainingText): Added

2012-01-05  Mihnea Ovidenie  <mihnea@adobe.com>

        Crash in RenderRegion::getRegionRangeForBox.
        https://bugs.webkit.org/show_bug.cgi?id=74781

        Reviewed by David Hyatt.

        Test: fast/regions/region-range-for-box-crash.html

        This patch fixes 2 issues:
        1. When removing a region from a flow thread, we clear the region range information for boxes since
        this information is accurate only after the regions are laid out.
        2. While the regions are invalidated (content of flow thread is not yet laid out in regions), the
        functions that ask for properties of content in regions should bail out early.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::regionAtBlockOffset):
        (WebCore::RenderBlock::logicalWidthChangedInRegions):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::clearRenderBoxRegionInfo):
        * rendering/RenderFlowThread.cpp:
        (WebCore::RenderFlowThread::removeRegionFromThread):
        (WebCore::RenderFlowThread::repaintRectangleInRegions):
        (WebCore::RenderFlowThread::mapFromFlowToRegion):
        (WebCore::RenderFlowThread::contentLogicalWidthOfFirstRegion):
        (WebCore::RenderFlowThread::contentLogicalHeightOfFirstRegion):
        (WebCore::RenderFlowThread::contentLogicalLeftOfFirstRegion):
        (WebCore::RenderFlowThread::firstRegion):
        (WebCore::RenderFlowThread::lastRegion):
        (WebCore::RenderFlowThread::getRegionRangeForBox):
        * rendering/RenderFlowThread.h:

2012-01-04  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r104084.
        http://trac.webkit.org/changeset/104084
        https://bugs.webkit.org/show_bug.cgi?id=75600

        Likely kills dom-perf benchmark in chromium
        http://build.chromium.org/f/chromium/perf/linux-
        release/dom_perf/report.html?history=150&rev=116444 (Requested
        by dslomov on #webkit).

        * dom/Attr.cpp:
        (WebCore::Attr::setValue):
        (WebCore::Attr::childrenChanged):
        * dom/DynamicNodeList.cpp:
        (WebCore::DynamicSubtreeNodeList::DynamicSubtreeNodeList):
        (WebCore::DynamicSubtreeNodeList::length):
        (WebCore::DynamicSubtreeNodeList::itemForwardsFromCurrent):
        (WebCore::DynamicSubtreeNodeList::itemBackwardsFromCurrent):
        (WebCore::DynamicSubtreeNodeList::item):
        (WebCore::DynamicSubtreeNodeList::invalidateCache):
        (WebCore::DynamicSubtreeNodeList::Caches::create):
        (WebCore::DynamicSubtreeNodeList::Caches::reset):
        * dom/DynamicNodeList.h:
        * dom/Element.cpp:
        (WebCore::Element::updateAfterAttributeChanged):
        * dom/Node.cpp:
        (WebCore::Node::setTreeScopeRecursively):
        (WebCore::Node::invalidateNodeListsCacheAfterAttributeChanged):
        (WebCore::Node::invalidateNodeListsCacheAfterChildrenChanged):
        (WebCore::Node::notifyLocalNodeListsLabelChanged):
        (WebCore::Node::itemTypeAttributeChanged):
        (WebCore::NodeListsNodeData::invalidateCaches):
        (WebCore::NodeListsNodeData::invalidateCachesThatDependOnAttributes):
        * dom/Node.h:
        * dom/NodeRareData.h:
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::parseMappedAttribute):
        * html/HTMLLabelElement.cpp:
        (WebCore::HTMLLabelElement::parseMappedAttribute):
        * html/HTMLLabelElement.h:

2012-01-04  James Robinson  <jamesr@chromium.org>

        [chromium] Remove chromium compositor support for unused zoomAnimatorTransform
        https://bugs.webkit.org/show_bug.cgi?id=75585

        Reviewed by Kenneth Russell.

        Removes compositor support for zoomAnimatorTransform property. This code is unused and never was used.
        Zoom animations are handled by adjusting the page scale factor and scroll offsets.

        * platform/graphics/chromium/LayerChromium.h:
        * platform/graphics/chromium/cc/CCLayerImpl.cpp:
        * platform/graphics/chromium/cc/CCLayerImpl.h:
        * platform/graphics/chromium/cc/CCLayerTreeHost.cpp:
        (WebCore::CCLayerTreeHost::finishCommitOnImplThread):
        * platform/graphics/chromium/cc/CCLayerTreeHost.h:
        * platform/graphics/chromium/cc/CCLayerTreeHostCommon.cpp:
        (WebCore::calculateDrawTransformsAndVisibilityInternal):
        * platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:
        * platform/graphics/chromium/cc/CCLayerTreeHostImpl.h:

2012-01-04  Kenneth Russell  <kbr@google.com>

        Fix semantics of WEBKIT_WEBGL_lose_context
        https://bugs.webkit.org/show_bug.cgi?id=75053

        Reviewed by James Robinson.

        Updated WEBGL_lose_context extension to match WebGL spec's
        behavior:

          - loseContext() causes the context to be lost immediately, but
            the webglcontextlost event isn't dispatched until JavaScript
            returns.
          - restoreContext() may only be called once dispatch of the
            webglcontextlost event has completed, *and* if that event handler
            prevented the default behavior of the event.
          - restoreContext() performs its work asynchronously. The context
            is not restored until just before the webglcontextrestored event
            is dispatched.

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::WebGLRenderingContext):
        (WebCore::WebGLRenderingContext::forceLostContext):
        (WebCore::WebGLRenderingContext::forceRestoreContext):
        (WebCore::WebGLRenderingContext::dispatchContextLostEvent):
        (WebCore::WebGLRenderingContext::maybeRestoreContext):
        * html/canvas/WebGLRenderingContext.h:

2011-12-30  Ryosuke Niwa  <rniwa@webkit.org>

        Inserting nodes is slow due to Node::notifyNodeListsAttributeChanged (20%+)
        https://bugs.webkit.org/show_bug.cgi?id=73853

        Reviewed by Antti Koivisto.

        Lazily invalidate the node list caches instead of invaliding them at the time of modification. We use
        the DOM tree version to detect whether caches need to be invalidated or not. We now invalidate caches more
        frequently after this patch (in particular, invalidates caches that are stored on nodes not present in
        the ancestry of the modified nodes); however, our study on major Web sites such as Gmail, Facebook, Twitter,
        etc... indicate that about 1% of real-world usage benefits from keeping the caches alive across different
        DOM tree versions.

        In order to invalidate caches lazily, this patch adds replaces the type of m_caches in DynamicSubtreeNodeList
        by DynamicSubtreeNodeList::SubtreeCaches which encapsulates member variables in DynamicNodeList::Caches and
        invalidates values as needed. Also this change allows m_caches to be allocated as a part of
        DynamicSubtreeNodeList instead of a separate ref-counted object.

        * dom/Attr.cpp:
        (WebCore::Attr::setValue):
        (WebCore::Attr::childrenChanged):
        * dom/DynamicNodeList.cpp:
        (WebCore::DynamicSubtreeNodeList::DynamicSubtreeNodeList):
        (WebCore::DynamicSubtreeNodeList::length):
        (WebCore::DynamicSubtreeNodeList::itemForwardsFromCurrent):
        (WebCore::DynamicSubtreeNodeList::itemBackwardsFromCurrent):
        (WebCore::DynamicSubtreeNodeList::item):
        (WebCore::DynamicSubtreeNodeList::invalidateCache):
        (WebCore::DynamicNodeList::Caches::create):
        (WebCore::DynamicNodeList::Caches::reset):
        * dom/DynamicNodeList.h:
        (WebCore::DynamicSubtreeNodeList::SubtreeCaches::SubtreeCaches): Added.
        (WebCore::DynamicSubtreeNodeList::SubtreeCaches::isLengthCacheValid): Added.
        (WebCore::DynamicSubtreeNodeList::SubtreeCaches::isItemCacheValid): Added.
        (WebCore::DynamicSubtreeNodeList::SubtreeCaches::cachedLength): Added.
        (WebCore::DynamicSubtreeNodeList::SubtreeCaches::cachedItem): Added.
        (WebCore::DynamicSubtreeNodeList::SubtreeCaches::cachedItemOffset): Added.
        (WebCore::DynamicSubtreeNodeList::SubtreeCaches::setLengthCache): Added.
        (WebCore::DynamicSubtreeNodeList::SubtreeCaches::setItemCache): Added.
        (WebCore::DynamicSubtreeNodeList::SubtreeCaches::reset): Added.
        (WebCore::DynamicSubtreeNodeList::SubtreeCaches::domVersionIsConsistent): Added.
        * dom/Element.cpp:
        (WebCore::Element::updateAfterAttributeChanged):
        * dom/Node.cpp:
        (WebCore::Node::setTreeScopeRecursively): Clear caches when a node moves from one document to another.
        (WebCore::Node::invalidateNodeListsCacheAfterAttributeChanged): Only clears child node list of Attr.
        (WebCore::Node::invalidateNodeListsCacheAfterChildrenChanged): Only clears child node list.
        (WebCore::NodeListsNodeData::invalidateCaches): Merged with invalidateCachesThatDependOnAttributes.
        * dom/Node.h:
        * dom/NodeRareData.h:
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::parseMappedAttribute):
        * html/HTMLLabelElement.cpp:
        * html/HTMLLabelElement.h:

2012-01-04  Ryosuke Niwa  <rniwa@webkit.org>

        Revert unintentional changes to Element.cpp in r104068.

        * dom/Element.cpp:
        (WebCore::Element::recalcStyleIfNeededAfterAttributeChanged):

2012-01-03  Ryosuke Niwa  <rniwa@webkit.org>

        REGRESSION (r92823): Background color not preserved when copying and pasting a table row
        https://bugs.webkit.org/show_bug.cgi?id=75330

        Reviewed by Tony Chang.

        The bug was caused by the background color of the wrapping style overriding the background color
        in a matched rule of a highest element to be serialized. Fixed the bug by removing the conflicting
        background color prior to the merge.

        Tests: editing/pasteboard/copy-element-with-conflicting-background-color-from-rule-expected.html
               editing/pasteboard/copy-element-with-conflicting-background-color-from-rule.html

        * editing/EditingStyle.cpp:
        (WebCore::editingStyleFromComputedStyle):
        (WebCore::EditingStyle::removeStyleAddedByNode):
        (WebCore::EditingStyle::removeStyleConflictingWithStyleOfNode):

2012-01-03  Antti Koivisto  <antti@apple.com>

        Reviewed by Dave Hyatt.

        Analyze stylesheet scope to minimize style recalcs
        https://bugs.webkit.org/show_bug.cgi?id=75508
        
        It is a relatively common pattern to use inline stylesheets in document body where all rules are scoped using descendant selector

        <style>
        #foo {...}
        #foo div {...}
        #foo .bar {...}
        </style>

        When this pattern is used it is also common that the rules only apply to elements that come after the style element. 

        When the set of active stylesheets changes we invalidate and recompute the entire document style. This is very expensive. We can 
        detect the case above and avoid the style recalc.
        
        On engadget.com, this patch cuts the time spent in style recalcs to roughly half. There are further savings from reduced 
        relayouts. In total the engine CPU time used over the page load is reduced by ~10%.

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::CSSStyleSelector):
        (WebCore::CSSStyleSelector::collectFeatures):
        
            Refactor feature collection from constructor to a separate function.
        
        (WebCore::CSSStyleSelector::appendAuthorStylesheets):
        
            New function for non-destructively updating the style selector.
        
        (WebCore::CSSStyleSelector::Features::clear):
        
            Clear the features for another collection.
            
        (WebCore::CSSStyleSelector::determineStylesheetSelectorScopes):
        
            Find if all rules on a stylesheetare scoped to some set of ids and classes.
        
        (WebCore::CSSStyleSelector::styleForDocument):
        
            Add optional font selector argument. We updated the correct base style font on style selector construction but that is no longer sufficient
            as font selector may be updated without reconstructing the style selector.
        
        (WebCore::RuleSet::addRulesFromSheet):
        
            Invalidate the matched declaration cache in case of new font-face rules.
        
        * css/CSSStyleSelector.h:
        * css/SelectorChecker.cpp:
        (WebCore::SelectorChecker::determineSelectorScopes):
        
            Find if all rules on a selector list are scoped to some set of ids and classes.
        
        * css/SelectorChecker.h:
        * dom/Document.cpp:
        (WebCore::Document::Document):
        (WebCore::Document::recalcStyle):
        
            Pass the font selector, if exists, to styleForDocument so we always have the base font up to date.
        
        (WebCore::Document::combineCSSFeatureFlags):
        (WebCore::Document::resetCSSFeatureFlags):
        (WebCore::Document::createStyleSelector):

            Refactor css feature flag resetting to functions.
        
        (WebCore::Document::removePendingSheet):
        
            Use new PendingStylesheetCompleted flag when new stylesheets arrive.

        (WebCore::Document::styleSelectorChanged):

            Skip style recalc if it is not needed.

        (WebCore::Document::collectActiveStylesheets):
        
            Refactor collecting stylesheets to a separate function.
        
        (WebCore::Document::testAddedStylesheetRequiresStyleRecalc):
        
            Determine the scopes and use hasElementWithId/getElementsByClassName to figure out if any scoped elements currently exist in the tree.
        
        (WebCore::Document::analyzeStylesheetChange):
        
            Figure out if we can update the style selector incrementally and if we can skip the style recalc.
        
        (WebCore::Document::updateActiveStylesheets):
        
            Renamed from recalcStyleSelector.
            Invoke the new analysis functions.
        
        * dom/Document.h:

2012-01-04  Igor Oliveira  <igor.oliveira@openbossa.org>

        Share fractional time code between AnimationBase and KeyframeAnimation
        https://bugs.webkit.org/show_bug.cgi?id=75549

        Remove left over from changeset 104045.

        Unreviewed trivial fix.

        * page/animation/AnimationBase.cpp:
        (WebCore::AnimationBase::fractionalTime):

2012-01-04  Igor Oliveira  <igor.oliveira@openbossa.org>

        Share fractional time code between AnimationBase and KeyframeAnimation
        https://bugs.webkit.org/show_bug.cgi?id=75549

        Share fractional time calculation between AnimationBase and KeyframeAnimation.

        Reviewed by Simon Fraser.

        * page/animation/AnimationBase.cpp:
        (WebCore::AnimationBase::fractionalTime):
        (WebCore::AnimationBase::progress):
        * page/animation/AnimationBase.h:
        * page/animation/KeyframeAnimation.cpp:
        (WebCore::KeyframeAnimation::fetchIntervalEndpointsForProperty):

2012-01-03  Vangelis Kokkevis  <vangelis@chromium.org>

        [chromium] Bypass the shadow texture copy for accelerated
        canvas when running the compositor in single threaded mode.
        https://bugs.webkit.org/show_bug.cgi?id=75146

        The texture copy fails on Windows as glCopyTexImage2D() doesn't
        support BGRA source textures.
        This change also modifies Canvas2DLayerChromium::updateCompositorResources
        to call glCopyTexSubImage2D() instead of glCopyTexImage2D() so that
        the copy can work with texture allocated via the glTexStorage2D
        extension.

        Reviewed by James Robinson.

        Tests: Canvas2DLayerChromiumTest.cpp

        * platform/graphics/chromium/Canvas2DLayerChromium.cpp:
        (WebCore::Canvas2DLayerChromium::Canvas2DLayerChromium):
        (WebCore::Canvas2DLayerChromium::~Canvas2DLayerChromium):
        (WebCore::Canvas2DLayerChromium::paintContentsIfDirty):
        (WebCore::Canvas2DLayerChromium::setTextureManager):
        (WebCore::Canvas2DLayerChromium::updateCompositorResources):
        (WebCore::Canvas2DLayerChromium::pushPropertiesTo):
        (WebCore::Canvas2DLayerChromium::unreserveContentsTexture):
        (WebCore::Canvas2DLayerChromium::cleanupResources):
        * platform/graphics/chromium/Canvas2DLayerChromium.h:

2012-01-04  Adam Roben  <aroben@apple.com>

        Use one big printf command instead of many chained echo commands to generate idl_files.tmp

        This works around a bug in Cygwin where sh.exe will crash if given a too-long sequence of
        &&-chained commands.

        Fixes <http://webkit.org/b/75546> <rdar://problem/10622193> REGRESSION (r103519): WebCore's
        DerivedSources.make crashes sh.exe if path to WebKit source tree is long enough

        Reviewed by Antti Koivisto.

        * DerivedSources.make: Change the '(echo foo && echo bar && echo baz && echo -n) >
        ./idl_files.tmp' command to 'printf "foo\nbar\nbaz\n" > ./idl_files.tmp'. We use the
        patsubst function to append "\n" to each IDL filename, then use the subst function to remove
        the spaces between the filenames.

2012-01-04  Mihnea Ovidenie  <mihnea@adobe.com>

        [CSSRegions]Rollout support for background-color region styling
        https://bugs.webkit.org/show_bug.cgi?id=75007

        Reviewed by Tony Chang.

        Removed functionality, therefore no new tests. Since this is a temporary rollout,
        the tests for region-style with background-color are not removed in this patch, just skipped.

        * WebCore.exp.in:
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::CSSStyleSelector):
        (WebCore::CSSStyleSelector::addMatchedDeclaration):
        (WebCore::CSSStyleSelector::matchRules):
        (WebCore::CSSStyleSelector::matchAllRules):
        (WebCore::CSSStyleSelector::styleForElement):
        (WebCore::CSSStyleSelector::pseudoStyleForElement):
        (WebCore::RuleData::RuleData):
        (WebCore::RuleSet::RuleSet):
        (WebCore::RuleSet::addToRuleSet):
        (WebCore::CSSStyleSelector::applyDeclarations):
        (WebCore::CSSStyleSelector::applyProperty):
        * css/CSSStyleSelector.h:
        * rendering/RenderFlowThread.cpp:
        (WebCore::RenderFlowThread::setRegionRangeForBox):
        * rendering/RenderFlowThread.h:
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::paint):
        (WebCore::RenderLayer::hitTest):
        * rendering/RenderObject.cpp:
        * rendering/RenderObject.h:
        * rendering/RenderObjectChildList.cpp:
        (WebCore::RenderObjectChildList::removeChildNode):
        * rendering/RenderRegion.cpp:
        * rendering/RenderRegion.h:
        * rendering/RenderView.cpp:
        (WebCore::RenderView::RenderView):
        * rendering/RenderView.h:

2012-01-04  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Introduce new qmake variable 'WEBKIT' for signaling dependencies

        The custom qmake variable 'WEBKIT' is used for signaling that a
        target depends in some way on other subproject of the WebKit
        project. For now this is limited to the set of intermediate
        libraries: wtf, javascriptcore, webcore, and webkit2.

        This replaces the previous convension of using load(foo) for
        just include paths, and CONFIG += foo to also link against foo.

        Adding a dependency results in additional include paths being
        available, and potentially linking to the library. This is
        decided by the build system based on conditions such as what
        kind of target is being built and the general build config.

        An advantage to his approach is that it simplifies the individual
        foo.prf files, for example by allowing us to use INCLUDEPATH +=
        and LIBS += as normal instead of prepending.

        Reviewed by Simon Hausmann.

        * Target.pri:

2012-01-03  Adam Barth  <abarth@webkit.org>

        HTMLConstructionSite::attach shouldn't return a value
        https://bugs.webkit.org/show_bug.cgi?id=75520

        Reviewed by Eric Seidel.

        We used to return a value to avoid some refchurn, but now that we're
        using tasks, we always need to take that reference.  Removing the
        return value lets us remove the template parameter, which is a boon.
        This patch has no impact on the html-parser.html benchmark.

        * html/parser/HTMLConstructionSite.cpp:
        (WebCore::HTMLConstructionSite::attachLater):
        (WebCore::HTMLConstructionSite::insertHTMLHtmlStartTagBeforeHTML):
        (WebCore::HTMLConstructionSite::insertHTMLHtmlStartTagInBody):
        (WebCore::HTMLConstructionSite::insertDoctype):
        (WebCore::HTMLConstructionSite::insertComment):
        (WebCore::HTMLConstructionSite::insertCommentOnDocument):
        (WebCore::HTMLConstructionSite::insertCommentOnHTMLHtmlElement):
        (WebCore::HTMLConstructionSite::insertHTMLHeadElement):
        (WebCore::HTMLConstructionSite::insertHTMLBodyElement):
        (WebCore::HTMLConstructionSite::insertHTMLFormElement):
        (WebCore::HTMLConstructionSite::insertHTMLElement):
        (WebCore::HTMLConstructionSite::insertSelfClosingHTMLElement):
        (WebCore::HTMLConstructionSite::insertScriptElement):
        (WebCore::HTMLConstructionSite::insertForeignElement):
        (WebCore::HTMLConstructionSite::insertTextNode):
        (WebCore::HTMLConstructionSite::reconstructTheActiveFormattingElements):
        (WebCore::HTMLConstructionSite::fosterParent):
        * html/parser/HTMLConstructionSite.h:

2012-01-03  Adam Barth  <abarth@webkit.org>

        Fix assert when foster parenting self-closing elements
        https://bugs.webkit.org/show_bug.cgi?id=75527

        Unreviewed.

        * html/parser/HTMLConstructionSite.cpp:
        (WebCore::HTMLConstructionSite::fosterParent):
            - We can't execute this task immediately because the code for
              self-closing elements wants to set the self-closing flag.
              Instead, we queue the task.

2012-01-03  Charles Wei  <charles.wei@torchmobile.com.cn>

        [BlackBerry] Need to support credentials in the URL
        https://bugs.webkit.org/show_bug.cgi?id=75341

        Reviewed by George Staikos.

        No new tests required.

        * platform/network/blackberry/NetworkJob.cpp:
        (WebCore::NetworkJob::sendRequestWithCredentials):

2012-01-03  Noel Gordon  <noel.gordon@gmail.com>

        [chromium] Use data decoding swizzle for turbo JPEG grayscale images
        https://bugs.webkit.org/show_bug.cgi?id=75189

        Reviewed by Adam Barth.

        No new tests.  Covered by exiting tests, in particular for grayscale
        images that were corrupted by earlier versions on libjpeg-turbo:

        tables/mozilla/bugs/bug29314.html
        tables/mozilla/bugs/bug13169.html
        tables/mozilla/bugs/bug10565.html
        tables/mozilla/bugs/bug11026.html
        fast/repaint/backgroundSizeRepaint.html
        fast/repaint/block-layout-inline-children-replaced.html
        fast/repaint/clipped-relative.html
        fast/repaint/selected-replaced.html
        tables/mozilla/bugs/bug12908-1.html

        * platform/image-decoders/jpeg/JPEGImageDecoder.cpp:
        (WebCore::JPEGImageReader::decode):  Use a data decoding swizzle for
        JCS_GRAYSCALE images.

2012-01-03  Adam Barth  <abarth@webkit.org>

        Minor speed improvement in HTML parser
        https://bugs.webkit.org/show_bug.cgi?id=75517

        Reviewed by Eric Seidel.

        This improves the html-parser.html benchmark by 0.3%.  I don't think
        that's actually anything to write home about, but this patch makes me
        feel better about my life.

        * html/parser/HTMLFormattingElementList.cpp:
        (WebCore::HTMLFormattingElementList::tryToEnsureNoahsArkConditionQuickly):

2012-01-03  Kentaro Hara  <haraken@chromium.org>

        Remove temporary code that we've inserted to implement the [Supplemental] IDL incrementally
        https://bugs.webkit.org/show_bug.cgi?id=75510

        Reviewed by Adam Barth.

        Now all build systems support the [Supplemental] IDL. This patch removes all
        temporary code that we've inserted to implement the [Supplemental] IDL.

        No tests. No change in behavior. Confirm that all builds pass.

        * bindings/js/JSDOMWindowCustom.cpp:
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateHeader):
        * bindings/scripts/generate-bindings.pl:
        * page/DOMWindow.idl: Removed all attributes with a temporal [Supplemented] IDL.

2012-01-03  Karl Koscher  <supersat@chromium.org>

        Give embedders a chance to handle postMessage calls
        https://bugs.webkit.org/show_bug.cgi?id=73883

        To support cross-process postMessage calls in Chromium (bug 73337), we need to intercept 
        postMessage calls to proxy windows. Originally we were just going to add a native event
        listener on the Chromium side, but that required more changes to WebKit and was a bit of
        a hack. See bug 73359 for a discuss about moving to this approach.

        Reviewed by Adam Barth.

        Test: platform/chromium/fast/events/intercept-postmessage.html

        * loader/FrameLoaderClient.h:
        (WebCore::FrameLoaderClient::willCheckAndDispatchPostMessage): new method to allow the
            embedder to intercept postMessage calls
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::postMessageTimerFired): add a call to
            FrameLoaderClient::willCheckAndDispatchPostMessage

2012-01-03  Eric Penner  <epenner@google.com>

        [chromium] Prevent crashing due to NULL texture updater.
        https://bugs.webkit.org/show_bug.cgi?id=75288

        Reviewed by James Robinson.

        * platform/graphics/chromium/ContentLayerChromium.cpp:
        * platform/graphics/chromium/ContentLayerChromium.h:
        * platform/graphics/chromium/ImageLayerChromium.cpp:
        * platform/graphics/chromium/ImageLayerChromium.h:

2012-01-03  Shawn Singh  <shawnsingh@chromium.org>

        [chromium] CCLayerSorter accidentally reverses order of some layers.
        https://bugs.webkit.org/show_bug.cgi?id=75046

        Reviewed by James Robinson.

        Unit test added to CCLayerSorterTest.cpp

        Fixes two related bugs that were causing z-ordering problems in
        layers when preserves3D triggers the need for layer sorting.

        The first problem was that CCLayerSorter accidentally reversed the
        order of layers when there was no sorting dependency between them.

        The second problem was that zDiff had numerical precision problems
        that forced sorting dependencies that were sometimes incorrect,
        when the dependencies should not have existed.

        * platform/graphics/chromium/cc/CCLayerSorter.cpp:
        (WebCore::CCLayerSorter::checkOverlap):
        (WebCore::CCLayerSorter::sort):

2012-01-03  Leo Yang  <leo.yang@torchmobile.com.cn>

        [BlackBerry] Add support of blob form data to the BlackBerry port
        https://bugs.webkit.org/show_bug.cgi?id=75218

        Pass FormDataElement::encodedBlob type of form data to the BlackBerry
        platform request to support blob data and blob file range.

        Reviewed by George Staikos.

        The port can't be built now, no new tests so far.

        * platform/network/blackberry/ResourceRequestBlackBerry.cpp:
        (WebCore::ResourceRequest::initializePlatformRequest):

2012-01-03  Adam Barth  <abarth@webkit.org>

        Two null crashes in Treebuilder
        https://bugs.webkit.org/show_bug.cgi?id=66101

        Reviewed by Eric Seidel.

        The underly issue with causing the crash is that we're re-entering the
        tree builder.  We've done a bunch of point fixes around tree builder
        re-entrancy, but neither the implementation nor the specification are
        really designed to handle re-entrancy.

        Firefox avoids this problem by putting the parser on its own thread.  I
        don't think we're quite ready to do that yet (although we will
        eventually, presumably, as computers become ever more parallel).  The
        approach in this patch is to queue up the DOM mutations and actually
        perform them on a shallower stack.  That's essentially the approach
        we've used for executing <scripts>.

        This patch queues up DOM modifications and executes them from a clean
        call stack, stopping us from re-entering the tree builder.  We might
        need to experiment with exactly where to kick off the queue, but this
        location seems reasonable and fixes the crash.

        Test: fast/parser/re-enter-and-crash.html

        * html/parser/HTMLConstructionSite.cpp:
        (WebCore::executeTask):
            - Add a helper function for actually executing a queue DOM
              mutation.
        (WebCore::HTMLConstructionSite::attach):
            - Instead of actually attaching the element to the DOM, this
              function now queues the element for attachment.  In a follow-up
              patch, I plan to change this function to return void (and I'll
              probably rename it to something that makes it clear that it only
              queues the attachment).
        (WebCore::HTMLConstructionSite::executeQueuedTasks):
        (WebCore::HTMLConstructionSite::insertDoctype):
            - Setting the compatmode from the Doctype requires the doctype to
              actually be in the DOM, so we need to execute our queued tasks
              synchronously.  We can likely improve this function by passing
              the Doctype element explicitly in a follow-up patch.
        (WebCore::HTMLConstructionSite::insertSelfClosingHTMLElement):
        (WebCore::HTMLConstructionSite::insertTextNode):
        (WebCore::HTMLConstructionSite::findFosterSite):
        (WebCore::HTMLConstructionSite::fosterParent):
        * html/parser/HTMLConstructionSite.h:
        (WebCore::HTMLConstructionSiteTask::HTMLConstructionSiteTask):
            - Add a task object that holds on to the relevant elements.  We
              define some vector traits for this object to match the traits on
              RefPtr (which make Vector operations faster by explaining that
              this type is moveable without having to churn reference counts).
        * html/parser/HTMLElementStack.cpp:
        (WebCore::HTMLElementStack::pushCommon):
            - We delay the "begin parsing" call until we actually attach the
              element to the DOM.  That splits the responsibility for calling
              begin/finished, which is less than ideal, but I didn't see
              another solution.
        * html/parser/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::constructTreeFromAtomicToken):
            - Kick off the queued mutations.

2012-01-03  Adam Barth  <abarth@webkit.org>

        view-source doesn't colorize </script> correctly
        https://bugs.webkit.org/show_bug.cgi?id=62971

        Reviewed by Eric Seidel.

        The reason these tags weren't colorized correctly was because the
        characters for the end tags where consumed by the tokenizer at the same
        time as it consumed the text of the script tag.  These characters are
        buffered internally by the tokenizer because the tokenizer is searching
        for "an appropriate end tag", which is "</script>" in this case.

        I tried a number of different approaches to fixing this bug.  The
        approach in this patch adds an accessor to the tokenizer to read out
        the buffered characters.  This approach makes it easier for the
        HTMLSourceTracker to get exactly the right value for these buffered
        characters without having to do a complicated simulation of the
        buffering itself.

        Tests: fast/frames/viewsource-plain-text-tags.html:

        * html/parser/HTMLViewSourceParser.cpp:
        (WebCore::HTMLViewSourceParser::pumpTokenizer):
        * html/parser/HTMLDocumentParser.cpp:
        (WebCore::HTMLDocumentParser::pumpTokenizer):
          - Give the HTMLSourceTracker a pointer to the tokenizer so it can ask
            for the buffered characters.
        * html/parser/HTMLSourceTracker.cpp:
        (WebCore::HTMLSourceTracker::start):
          - The idea here is to treat characters buffered internally by the
            tokenizer the same way we treat characters that were contained in a
            previous segment of source.  We copy them into our accumulation
            buffer and adjust the token base offset to account for the extra
            characters.
        (WebCore::HTMLSourceTracker::end):
          - Don't consier the character buffered by the tokenizer to be part of
            the token we've just finished.
        (WebCore::HTMLSourceTracker::sourceForToken):
          - Remove the assumption that all of the m_previousSource is contained
            in the source for the current token.  Because we now understand
            that the tokenizer can buffer some characters internally, we might
            not exhaust the m_previousSource.
        * html/parser/HTMLSourceTracker.h:
          - Rename m_sourceFromPreviousSegments to m_previousSource and changed
            to a SegementedString to avoid extra mallocs we keep appending tiny
            segments.
          - Rename m_source to m_currentSource to contrast nicely with
            m_previousSource.
        * html/parser/HTMLTokenizer.cpp:
        (WebCore::HTMLTokenizer::flushBufferedEndTag):
        (WebCore::HTMLTokenizer::nextToken):
          - Previously, we cleared the temporary buffer lazily when we needed
            to add new characters to it.  Now we clear it eagerly so that it's
            length tells us whether we're currently using it to store
            characters.
          - Previously, we weren't storing the character that we used to
            terminate the appropriate end tag (e.g., the > in </script>)
            because we didn't need to "unbuffer" that character into the
            HTMLToken::appendToCharacter.  Now, we do store that character in
            the temporary buffer so that the HTMLSourceTracker can see that
            character.
        (WebCore::HTMLTokenizer::bufferedCharacters):
        * html/parser/HTMLTokenizer.h:
        (WebCore::HTMLTokenizer::numberOfBufferedCharacters):
          - Add accessor methods to copy out the buffered characters.
          - Also, unrelated to the rest of this patch, I made the constructor
            for HTMLTokenizer explicit because it takes only a single
            paramater, per the style guide.
        * platform/text/SegmentedString.cpp:
        (WebCore::SegmentedString::clear):
          - SegmentedString::clear wasn't clearing all of its state.  I don't
            think this issue was actually observable, but I noticed it when
            working on this patch, so I fixed it.

2012-01-03  Benjamin Poulain  <bpoulain@apple.com>

        Exclude Mac's PlatformEventFactory from iOS
        https://bugs.webkit.org/show_bug.cgi?id=75493

        Reviewed by Sam Weinig.

        Move PlatformEventFactory.(h|cpp) to PlatformEventFactoryMac(h|cpp) and exclude the file
        from iOS build.

        * Configurations/WebCore.xcconfig: Also exclude EventHandlerMac for consistency.
        * WebCore.xcodeproj/project.pbxproj:
        * page/mac/EventHandlerMac.mm:
        * platform/mac/PlatformEventFactoryMac.h: Renamed from Source/WebCore/platform/mac/PlatformEventFactory.h.
        * platform/mac/PlatformEventFactoryMac.mm: Renamed from Source/WebCore/platform/mac/PlatformEventFactory.mm.
        (WebCore::globalPoint):
        (WebCore::globalPointForEvent):
        (WebCore::pointForEvent):
        (WebCore::mouseButtonForEvent):
        (WebCore::mouseEventTypeForEvent):
        (WebCore::clickCountForEvent):
        (WebCore::momentumPhaseForEvent):
        (WebCore::phaseForEvent):
        (WebCore::gestureEventTypeForEvent):
        (WebCore::textFromEvent):
        (WebCore::unmodifiedTextFromEvent):
        (WebCore::keyIdentifierForKeyEvent):
        (WebCore::isKeypadEvent):
        (WebCore::windowsKeyCodeForKeyEvent):
        (WebCore::isKeyUpEvent):
        (WebCore::modifiersForEvent):
        (WebCore::PlatformMouseEventBuilder::PlatformMouseEventBuilder):
        (WebCore::PlatformEventFactory::createPlatformMouseEvent):
        (WebCore::PlatformWheelEventBuilder::PlatformWheelEventBuilder):
        (WebCore::PlatformEventFactory::createPlatformWheelEvent):
        (WebCore::PlatformKeyboardEventBuilder::PlatformKeyboardEventBuilder):
        (WebCore::PlatformEventFactory::createPlatformKeyboardEvent):
        (WebCore::PlatformGestureEventBuilder::PlatformGestureEventBuilder):
        (WebCore::PlatformEventFactory::createPlatformGestureEvent):

2012-01-03  Wei James  <james.wei@intel.com>

        Optimize AudioBufferSourceNode process by avoiding interpolation when pitchRate==1
        https://bugs.webkit.org/show_bug.cgi?id=74592

        Reviewed by Kenneth Russell.

        Covered by existing webaudio layout tests, especially webaudio/audiobuffersource-playbackrate.html

        * webaudio/AudioBufferSourceNode.cpp:
        (WebCore::AudioBufferSourceNode::renderSilenceAndFinishIfNotLooping):
        (WebCore::AudioBufferSourceNode::renderFromBuffer):
        * webaudio/AudioBufferSourceNode.h:

2012-01-03  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Access to Node Highlighting info without drawing
        https://bugs.webkit.org/show_bug.cgi?id=75504

        Provide a "getHighlight" method alongside "drawHighlight" that
        gets most of the important node highlighting information. This
        can be used by a port to do its own node highlighting or provide
        extra content without interfering with the highlight rects.

        Reviewed by Timothy Hatcher.

        * WebCore.xcodeproj/project.pbxproj:
        Privately expose the Highlight struct in DOMNodeHighlighter.h.

        * inspector/DOMNodeHighlighter.cpp:
        (WebCore::DOMNodeHighlighter::drawHighlight):
        (WebCore::DOMNodeHighlighter::getHighlight):
        * inspector/DOMNodeHighlighter.h:
        Reuse the existing draw code to instead populate
        the Highlight struct with the information it is
        about to draw, and only draw if there is a context.

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::getHighlight):
        * inspector/InspectorController.h:
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::getHighlight):
        * inspector/InspectorDOMAgent.h:
        Get highlight information by going through getHighlight
        in InspectorController. This is alongside drawHighlight.

2012-01-03  Shawn Singh  <shawnsingh@chromium.org>

        [chromium] Push drawsContent and contentsVisible into accelerated compositor
        https://bugs.webkit.org/show_bug.cgi?id=71209

        Reviewed by James Robinson.

        Tests: compositing/visibility/visibility-simple-canvas2d-layer.html
               compositing/visibility/visibility-simple-video-layer.html
               compositing/visibility/visibility-simple-webgl-layer.html

        Rebaselined compositing/visibility/visibility-image-layers.html

        The CSS visibility property was not being properly obeyed by many
        specialized layer types in the accelerated compositor. The root of
        the problem was that drawsContent and contentsVisible flags were
        not properly propagated into the compositor. This patch removes
        the drawsContent() callback, and instead makes sure that
        drawsContent and contentsVisible are "pushed" through the
        accelerated compositor.

        * platform/graphics/chromium/Canvas2DLayerChromium.cpp:
        (WebCore::Canvas2DLayerChromium::drawsContent):
        * platform/graphics/chromium/ContentLayerChromium.cpp:
        * platform/graphics/chromium/ContentLayerChromium.h:
        * platform/graphics/chromium/GraphicsLayerChromium.cpp:
        (WebCore::GraphicsLayerChromium::setDrawsContent):
        (WebCore::GraphicsLayerChromium::setContentsVisible):
        (WebCore::GraphicsLayerChromium::setContentsToImage):
        (WebCore::GraphicsLayerChromium::setContentsToCanvas):
        (WebCore::GraphicsLayerChromium::setContentsToMedia):
        (WebCore::GraphicsLayerChromium::updateLayerIsDrawable):
        (WebCore::GraphicsLayerChromium::setupContentsLayer):
        * platform/graphics/chromium/GraphicsLayerChromium.h:
        * platform/graphics/chromium/LayerChromium.cpp:
        (WebCore::LayerChromium::LayerChromium):
        (WebCore::LayerChromium::setIsDrawable):
        * platform/graphics/chromium/LayerChromium.h:
        (WebCore::LayerChromium::drawsContent):
        * platform/graphics/chromium/PluginLayerChromium.h:
        * platform/graphics/chromium/TiledLayerChromium.cpp:
        (WebCore::TiledLayerChromium::drawsContent):
        * platform/graphics/chromium/VideoLayerChromium.h:
        * platform/graphics/chromium/WebGLLayerChromium.cpp:
        (WebCore::WebGLLayerChromium::drawsContent):
        * platform/graphics/chromium/cc/CCLayerImpl.cpp:
        (WebCore::CCLayerImpl::dumpLayerProperties):

2012-01-03  Shawn Singh  <shawnsingh@chromium.org>

        [chromium] Make sure root damage rect gets passed to renderer
        https://bugs.webkit.org/show_bug.cgi?id=74893

        Reviewed by James Robinson.

        Unit test added to CCLayerTreeHostImplTest.cpp

        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::swapBuffers):
        * platform/graphics/chromium/LayerRendererChromium.h:
        * platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:
        (WebCore::CCLayerTreeHostImpl::calculateRenderPasses):
        (WebCore::CCLayerTreeHostImpl::swapBuffers):
        * platform/graphics/chromium/cc/CCLayerTreeHostImpl.h:

2012-01-03  Yuzhu Shen  <yzshen@chromium.org>

        v8 binding: npCreateV8ScriptObject() should not returned an existing V8NPObject if the rootObject doesn't match
        https://bugs.webkit.org/show_bug.cgi?id=74515

        Reviewed by Nate Chapin.

        Test: http/tests/plugins/create-v8-script-objects.html

        * bindings/v8/NPV8Object.cpp:
        (WebCore::freeV8NPObject):
        (WebCore::npCreateV8ScriptObject):

2012-01-03  Jon Lee  <jonlee@apple.com>

        Leak of WebNotificationClient when page is destroyed
        https://bugs.webkit.org/show_bug.cgi?id=74980
        <rdar://problem/10611231>

        Reviewed by Mark Rowe.

        * notifications/NotificationController.cpp:
        (WebCore::NotificationController::~NotificationController): Notify the client
        that the controller has been destroyed.
        * notifications/NotificationPresenter.h: Add notificationControllerDestroyed()
        callback to the client interface.

2012-01-03  Alexis Menard  <alexis.menard@openbossa.org>

        getComputedStyle for list-style is not implemented.
        https://bugs.webkit.org/show_bug.cgi?id=75443

        Reviewed by Tony Chang.

        Implement getComputedStyle for list-style.

        Test: fast/css/getComputedStyle/getComputedStyle-list-style-shorthand.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):

2012-01-03  Adrienne Walker  <enne@google.com>

        [chromium] Remove unneeded content vs. layer space distinction in tiled layers
        https://bugs.webkit.org/show_bug.cgi?id=75498

        Reviewed by James Robinson.

        Long ago, before scrollbars became their own layers, tiled layers had
        a distinction between content space (what's mostly called layer space
        elsewhere) and layer space (the transformed content space). It seemed
        like this transform could get reused for supporting RTL pages, but as
        that's not the case, it should be eradicated.

        Tiled layers now deal with everything in "layer space", which is a 2d
        rectangle starting at (0, 0) in the top left of the layer and
        extending to contentBounds() in the bottom right.

        As no code actually set the tiler position, this change should be a
        no-op.

        Test: LayoutTests/compositing/

        * platform/graphics/chromium/TiledLayerChromium.cpp:
        (WebCore::UpdatableTile::isDirty):
        (WebCore::UpdatableTile::clearDirty):
        (WebCore::TiledLayerChromium::updateCompositorResources):
        (WebCore::TiledLayerChromium::createTile):
        (WebCore::TiledLayerChromium::invalidateRect):
        (WebCore::TiledLayerChromium::protectTileTextures):
        (WebCore::TiledLayerChromium::prepareToUpdateTiles):
        (WebCore::TiledLayerChromium::prepareToUpdate):
        (WebCore::TiledLayerChromium::prepareToUpdateIdle):
        (WebCore::TiledLayerChromium::needsIdlePaint):
        (WebCore::TiledLayerChromium::idlePaintRect):
        * platform/graphics/chromium/TiledLayerChromium.h:
        * platform/graphics/chromium/cc/CCLayerTilingData.cpp:
        (WebCore::CCLayerTilingData::operator=):
        (WebCore::CCLayerTilingData::layerRectToTileIndices):
        (WebCore::CCLayerTilingData::tileRect):
        * platform/graphics/chromium/cc/CCLayerTilingData.h:
        * platform/graphics/chromium/cc/CCTiledLayerImpl.cpp:
        (WebCore::CCTiledLayerImpl::appendQuads):

2011-12-22  Joseph Pecoraro  <pecoraro@apple.com>

        Implement Date and Time Input Value Sanitization
        https://bugs.webkit.org/show_bug.cgi?id=59951

        Sanitize non-parsable incoming strings to the empty string.

        Reviewed by Kent Tamura.

        Covered by existing tests.

        * html/BaseDateAndTimeInputType.h:
        * html/BaseDateAndTimeInputType.cpp:
        (WebCore::BaseDateAndTimeInputType::sanitizeValue): check if the
        incoming string is valid. If not just return the empty string.

2012-01-03  Julien Chaffraix  <jchaffraix@webkit.org>

        RenderLayer::backgroundClipRect should not check parent()
        https://bugs.webkit.org/show_bug.cgi?id=73731

        Reviewed by Simon Fraser.

        Clean-up only, no expected change in behavior.

        * rendering/RenderLayer.cpp:
        (WebCore::backgroundClipRectForPosition): Changed RenderObject::isPositioned() to
        a check for AbsolutePosition for consistency but also as this is equivalent due to:
        - the previous check for FixedPosition.
        - RenderView, which is positioned, will never goes to this code as it has no parent().

        (WebCore::RenderLayer::backgroundClipRect): Removed the parent() check. While at
        it, also moved the inline initialization of |backgroundClipRect| to its own function
        and removed a |view| check as the associated ASSERT seems to never have been reached.

2012-01-03  Alexey Proskuryakov  <ap@apple.com>

        <rdar://problem/10637779> REGRESSION (r102247): Focus ring is not drawn around a button

        Rubber-stamped by Dan Bernstein.

        * platform/mac/ThemeMac.mm: (WebCore::updateStates): Flip an incorrect conditional, this code
        should run on Snow Leopard and Lion.

2012-01-03  Alexis Menard  <alexis.menard@openbossa.org>

        getComputedStyle should return shorthands property with the minimum number of sides possible.
        https://bugs.webkit.org/show_bug.cgi?id=75434

        Reviewed by Tony Chang.

        As stated in http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSS2Properties we should
        return shorthands properties with the minimum number of sides possible.

        Existing tests have been updated accordingly.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        (WebCore::CSSComputedStyleDeclaration::getCSSPropertyValuesForSidesShorthand):
        * css/CSSComputedStyleDeclaration.h:

2012-01-03  Martin Robinson  <mrobinson@igalia.com>

        [GTK] GTK+ 3 theming code does not use the GtkOrientable style class
        https://bugs.webkit.org/show_bug.cgi?id=72789

        Reviewed by Philippe Normand.

        No new tests. Testing GTK+ theming is quite difficult
        because no two distributions have the same set of themes.
        Current tests prevent regressions.

        * platform/gtk/RenderThemeGtk3.cpp:
        (WebCore::applySliderStyleContextClasses): Added this helper that
        properly handles the orientable style class.
        (WebCore::RenderThemeGtk::paintSliderTrack): Use the new helper.
        (WebCore::RenderThemeGtk::paintSliderThumb): Ditto.
        * platform/gtk/ScrollbarThemeGtk3.cpp:
        (WebCore::applyScrollbarStyleContextClasses): Added this helper that
        properly handles the orientable style class.
        (WebCore::ScrollbarThemeGtk::paintTrackBackground): Use the new helper.
        (WebCore::ScrollbarThemeGtk::paintScrollbarBackground): Ditto.
        (WebCore::ScrollbarThemeGtk::paintThumb): Ditto.
        (WebCore::ScrollbarThemeGtk::paintButton): Ditto.

2012-01-03  Florin Malita  <fmalita@google.com>

        NULL ptr in WebCore::SVGStyledTransformableElement::animatedLocalTransform
        https://bugs.webkit.org/show_bug.cgi?id=75227

        Reviewed by Dirk Schulze.

        Test: svg/custom/webkit-transform-crash.html

        * svg/SVGStyledTransformableElement.cpp:
        (WebCore::SVGStyledTransformableElement::animatedLocalTransform):
        Add a null-renderer check.

2012-01-03  Alexis Menard  <alexis.menard@openbossa.org>

        getComputedStyle for border is not implemented.
        https://bugs.webkit.org/show_bug.cgi?id=75319

        Reviewed by Tony Chang.

        Implement getComputedStyle for border.

        fast/css/getComputedStyle/getComputedStyle-border-shorthand.html was extented.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):

2012-01-03  Alexis Menard  <alexis.menard@openbossa.org>

        Sort the WebCore Xcode project file

        Reviewed by Dimitri Glazkov.

        * WebCore.xcodeproj/project.pbxproj:

2012-01-03  Adrienne Walker  <enne@google.com>

        [chromium] Set tiler bounds explicitly rather than growing them
        https://bugs.webkit.org/show_bug.cgi?id=75331

        Reviewed by James Robinson.

        Rather than only growing bounds, make the bounds on the tiler be set
        explicitly by TiledLayerChromium. This patch now properly invalidates
        regions when the bounds change.

        * platform/graphics/chromium/TiledLayerChromium.cpp:
        (WebCore::TiledLayerChromium::updateBounds):
        (WebCore::TiledLayerChromium::prepareToUpdate):
        (WebCore::TiledLayerChromium::prepareToUpdateIdle):
        * platform/graphics/chromium/TiledLayerChromium.h:
        * platform/graphics/chromium/cc/CCLayerTilingData.cpp:
        (WebCore::CCLayerTilingData::setBounds):
        (WebCore::CCLayerTilingData::bounds):
        * platform/graphics/chromium/cc/CCLayerTilingData.h:

2012-01-03  Martin Robinson  <mrobinson@igalia.com>

        [GTK] Slider thumb is not centered on the track with the unico theme
        https://bugs.webkit.org/show_bug.cgi?id=72802

        Reviewed by Philippe Normand.

        No new tests. This only applies to certain GTK+ themes.
        Existing tests cover the default GTK+ theme.

        * platform/gtk/RenderThemeGtk3.cpp:
        (WebCore::RenderThemeGtk::paintSliderThumb): Do not resize the
        slider thumb by the trough border.

2012-01-03  Adrienne Walker  <enne@google.com>

        [chromium] Make tiled layer's tiler always exist
        https://bugs.webkit.org/show_bug.cgi?id=75329

        Reviewed by James Robinson.

        TiledLayerChromium has some awkward code to handle lazily creating the
        tiler, including lots of null checks and shadowing the tile size.
        Instead, always create the tiler up front. As values change that
        invalidate all tiles, reset it rather than clear the pointer.

        * platform/graphics/chromium/LayerChromium.cpp:
        (WebCore::LayerChromium::setIsNonCompositedContent):
        * platform/graphics/chromium/LayerChromium.h:
        * platform/graphics/chromium/TiledLayerChromium.cpp:
        (WebCore::TiledLayerChromium::TiledLayerChromium):
        (WebCore::TiledLayerChromium::cleanupResources):
        (WebCore::TiledLayerChromium::setTileSize):
        (WebCore::TiledLayerChromium::setBorderTexelOption):
        (WebCore::TiledLayerChromium::drawsContent):
        (WebCore::TiledLayerChromium::updateCompositorResources):
        (WebCore::TiledLayerChromium::setTilingOption):
        (WebCore::TiledLayerChromium::pushPropertiesTo):
        (WebCore::TiledLayerChromium::setIsNonCompositedContent):
        (WebCore::TiledLayerChromium::invalidateRect):
        (WebCore::TiledLayerChromium::protectTileTextures):
        (WebCore::TiledLayerChromium::prepareToUpdate):
        (WebCore::TiledLayerChromium::prepareToUpdateIdle):
        (WebCore::TiledLayerChromium::needsIdlePaint):
        (WebCore::TiledLayerChromium::idlePaintRect):
        * platform/graphics/chromium/TiledLayerChromium.h:
        * platform/graphics/chromium/cc/CCLayerTilingData.cpp:
        (WebCore::CCLayerTilingData::setBorderTexelOption):
        * platform/graphics/chromium/cc/CCLayerTilingData.h:
        * platform/graphics/gpu/TilingData.cpp:
        (WebCore::TilingData::setHasBorderTexels):
        * platform/graphics/gpu/TilingData.h:

2012-01-03  Kentaro Hara  <haraken@chromium.org>

        Unreviewed. Rebaselined run-bindings-tests results.

        * bindings/scripts/test/JS/JSTestEventConstructor.cpp:
        (WebCore::JSTestEventConstructor::destroy):
        * bindings/scripts/test/JS/JSTestEventConstructor.h:
        (WebCore::JSTestEventConstructor::releaseImplIfNotNull):
        * bindings/scripts/test/JS/JSTestInterface.cpp:
        (WebCore::JSTestInterface::destroy):
        * bindings/scripts/test/JS/JSTestInterface.h:
        (WebCore::JSTestInterface::releaseImplIfNotNull):
        * bindings/scripts/test/JS/JSTestMediaQueryListListener.cpp:
        (WebCore::JSTestMediaQueryListListener::destroy):
        * bindings/scripts/test/JS/JSTestMediaQueryListListener.h:
        (WebCore::JSTestMediaQueryListListener::releaseImplIfNotNull):
        * bindings/scripts/test/JS/JSTestNamedConstructor.cpp:
        (WebCore::JSTestNamedConstructor::destroy):
        * bindings/scripts/test/JS/JSTestNamedConstructor.h:
        (WebCore::JSTestNamedConstructor::releaseImplIfNotNull):
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::JSTestObj::destroy):
        * bindings/scripts/test/JS/JSTestObj.h:
        (WebCore::JSTestObj::releaseImplIfNotNull):
        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp:
        (WebCore::JSTestSerializedScriptValueInterface::destroy):
        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.h:
        (WebCore::JSTestSerializedScriptValueInterface::releaseImplIfNotNull):

2012-01-03  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Fix scrollbars size with GTK+ 3.x
        https://bugs.webkit.org/show_bug.cgi?id=75467

        Reviewed by Xan Lopez.

        * platform/gtk/RenderThemeGtk3.cpp:
        (WebCore::getStyleContext): Add the style class for the given
        widget type to the GtkWidgetPath when creating GtkStyleContext
        objects.

2012-01-03  Alexis Menard  <alexis.menard@openbossa.org>

        getComputedStyle for outline is not implemented.
        https://bugs.webkit.org/show_bug.cgi?id=75441

        Reviewed by Antonio Gomes.

        Implement getComputedStyle for outline.

        Test: fast/css/getComputedStyle/getComputedStyle-outline-shorthand.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):

2012-01-03  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Use gdk_screen_get_monitor_workarea() when available for screenAvailableRect()
        https://bugs.webkit.org/show_bug.cgi?id=75435

        Reviewed by Martin Robinson.

        * platform/gtk/GtkVersioning.c:
        (getScreenCurrentDesktop):
        (getScreenWorkArea):
        (gdk_screen_get_monitor_workarea): Implement it when GTK+ < 3.3.6.
        * platform/gtk/GtkVersioning.h:
        * platform/gtk/PlatformScreenGtk.cpp:
        (WebCore::screenAvailableRect): Use
        gdk_screen_get_monitor_workarea() instead of our own
        implementation.

2012-01-02  Kentaro Hara  <haraken@chromium.org>

        REGRESSION(r103919): Remove resolve-supplemental.pl from the WebCore target in Xcode
        https://bugs.webkit.org/show_bug.cgi?id=75458

        Reviewed by Adam Barth.

        At r103919, we added resolve-supplemental.pl to WebCore.framework/Resources,
        but we should have added it to the project without adding it to any target.
        This patch fixes it.

        No tests. No change in behavior.

        * WebCore.xcodeproj/project.pbxproj:

2012-01-02  Kentaro Hara  <haraken@chromium.org>

        Enable the [Supplemental] IDL on GTK/GObject
        https://bugs.webkit.org/show_bug.cgi?id=75411

        Reviewed by Adam Barth.

        This patch enables the [Supplemental] IDL on GObject bindings of GTK
        by changing the build flow of bindings/gobject/GNUmakefile.am as follows.

        - Previous build flow:
            foreach $idl (all IDL files) {
                generate-bindings.pl depends on $idl;
                generate-bindings.pl reads $idl;
                generate-bindings.pl generates .h and .cpp files for $idl;
            }

        - New build flow (See the discussions in bug 72138 for more details):
            resolve-supplemental.pl depends on all IDL files;
            resolve-supplemental.pl reads all IDL files;
            resolve-supplemental.pl resolves the dependency of [Supplemental=XXXX];
            resolve-supplemental.pl outputs supplemental_dependency.tmp;
            foreach $idl (all IDL files) {
                generate-bindings.pl depends on $idl and supplemental_dependency.tmp;
                generate-bindings.pl reads $idl;
                generate-bindings.pl reads supplemental_dependency.tmp;
                generate-bindings.pl generates .h and .cpp files for $idl,
                    including all attributes in the IDL files that are implementing $idl;
            }

        Tests: Confirm that build succeeds.
               http/tests/websocket/tests/*

        * GNUmakefile.am:
        * bindings/gobject/GNUmakefile.am:

2012-01-02  Kentaro Hara  <haraken@chromium.org>

        Add resolve-supplemental.pl to project.pbxproj
        https://bugs.webkit.org/show_bug.cgi?id=75426

        Reviewed by Adam Barth.

        We should have added "resolve-supplemental.pl" to build scripts of AppleWebKit
        when we enabled the [Supplemental] IDL on AppleWebKit at r103519.
        This is a follow-up patch for it.

        No tests. Just confirm that the AppleWebKit build passes.

        * WebCore.xcodeproj/project.pbxproj:

2012-01-02  Kentaro Hara  <haraken@chromium.org>

        Add resolve-supplemental.pl to build scripts of AppleWin
        https://bugs.webkit.org/show_bug.cgi?id=75412

        Reviewed by Adam Barth.

        We should have added "resolve-supplemental.pl" to build scripts of AppleWin
        when we enabled the [Supplemental] IDL on AppleWin at r103519.
        This is a follow-up patch for it.

        No tests. Just confirm that the AppleWin build passes.

        * WebCore.vcproj/MigrateScripts:
        * WebCore.vcproj/WebCore.vcproj:

2012-01-02  Sam Weinig  <sam@webkit.org>

        Fix the build.

        * bindings/scripts/CodeGeneratorJS.pm:

2012-01-02  Andy Estes  <aestes@apple.com>

        Fix the Windows build after r103888.

        * WebCore.vcproj/WebCore.vcproj: Remove CollectionCache.{cpp, h} from
        the WebCore vcproj.

2012-01-02  Sam Weinig  <sam@webkit.org>

        REGRESSION(r100517): We're leaking many, many DOM objects!
        https://bugs.webkit.org/show_bug.cgi?id=75451

        Reviewed by Mark Rowe.

        * bindings/scripts/CodeGeneratorJS.pm:
        Add a temporary workaround to the problem of handle finalizers
        not getting called by adding back the destructors (or rather
        their replacement, destroy() functions).

2012-01-02  Caio Marcelo de Oliveira Filho  <caio.oliveira@openbossa.org>

        Fix chromium mac build after r103905
        https://bugs.webkit.org/show_bug.cgi?id=75436

        Reviewed by Csaba Osztrogonác.

        Adding parenthesis to disambiguate because clang gives error
        "expression is not assignable".

        * rendering/svg/RenderSVGResourceGradient.cpp:
        (WebCore::RenderSVGResourceGradient::applyResource):

2011-12-29  Caio Marcelo de Oliveira Filho  <caio.oliveira@openbossa.org>

        Use HashMap<OwnPtr> in RenderSVGResourceGradient
        https://bugs.webkit.org/show_bug.cgi?id=75364

        Reviewed by Daniel Bates.

        * rendering/svg/RenderSVGResourceGradient.cpp:
        (WebCore::RenderSVGResourceGradient::removeAllClientsFromCache):
        (WebCore::RenderSVGResourceGradient::removeClientFromCache):
        (WebCore::RenderSVGResourceGradient::applyResource): avoid looking
        up the hash twice by using HashMap::add().
        * rendering/svg/RenderSVGResourceGradient.h: rename m_gradient to m_gradientMap.

2012-01-02  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Fix qmake warning about unescaped backslashes

        Reviewed by Ossy.

        * DerivedSources.pri:

2012-01-02  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix make distcheck issue.

        * GNUmakefile.am: Add resolve-supplemental.pl script to
        EXTRA_DIST.

2012-01-01  Andreas Kling  <awesomekling@apple.com>

        Clear HTMLCollection's internal cache on construction.
        <http://webkit.org/b/75423>

        Reviewed by Antti Koivisto.

        * html/HTMLCollection.h:
        * html/HTMLCollection.cpp:
        (WebCore::HTMLCollection::HTMLCollection):
        (WebCore::HTMLCollection::invalidateCacheIfNeeded):

2012-01-01  Eunmi Lee  <eunmi15.lee@samsung.com>

        [EFL] Move function to get dpi to the WebCore/platform/efl/EflScreenUtilities.cpp.
        https://bugs.webkit.org/show_bug.cgi?id=75292

        Reviewed by Andreas Kling.

        Move ewk_util_dpi_get() function in the ewk_util.cpp to the
        WebCore/platform/efl/EflScreenUtilities.cpp in order to use it in the WebKit2.
        The function's name is changed to getDPI().

        * PlatformEfl.cmake:
        * platform/efl/EflScreenUtilities.cpp: Added.
        (WebCore::getDPI):
        * platform/efl/EflScreenUtilities.h: Added.

2012-01-01  Andreas Kling  <awesomekling@apple.com>

        Merge CollectionCache into HTMLCollection.
        <http://webkit.org/b/75423>

        Reviewed by Anders Carlsson.

        - Move the members of CollectionCache into HTMLCollection.
        - Renamed resetCollectionInfo() to invalidateCacheIfNeeded().
        - Removed a bunch of overkill HashMap::checkConsistency() calls.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.xcodeproj/project.pbxproj:
        * html/CollectionCache.cpp: Removed.
        * html/CollectionCache.h: Removed.

            Remove CollectionCache.

        * html/HTMLAllCollection.cpp:
        (WebCore::HTMLAllCollection::namedItemWithIndex):
        * html/HTMLCollection.cpp:
        (WebCore::HTMLCollection::HTMLCollection):
        (WebCore::HTMLCollection::~HTMLCollection):
        (WebCore::HTMLCollection::invalidateCacheIfNeeded):
        (WebCore::HTMLCollection::length):
        (WebCore::HTMLCollection::item):
        (WebCore::HTMLCollection::nextItem):
        (WebCore::HTMLCollection::namedItem):
        (WebCore::HTMLCollection::updateNameCache):
        (WebCore::HTMLCollection::hasNamedItem):
        (WebCore::HTMLCollection::namedItems):
        (WebCore::HTMLCollection::append):
        * html/HTMLCollection.h:
        * html/HTMLFormCollection.cpp:
        (WebCore::HTMLFormCollection::item):
        (WebCore::HTMLFormCollection::getNamedItem):
        (WebCore::HTMLFormCollection::nextItem):
        (WebCore::HTMLFormCollection::namedItem):
        (WebCore::HTMLFormCollection::updateNameCache):

            HTMLCollection's m_info and info() become "struct m_cache" (protected.)

        * html/HTMLOptionsCollection.cpp:
        * html/HTMLOptionsCollection.h:
        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::setRecalcListItems):

            Expose HTMLCollection::invalidateCacheIfNeeded() so we can call it from
            HTMLSelectElement::setRecalcListItems().

        * html/HTMLFormCollection.h:

            Remove stale declaration of formCollectionInfo() which no longer exists.

2012-01-01  Andreas Kling  <awesomekling@apple.com>

        Move the remaining collections to caching on their respective base nodes.
        <http://webkit.org/b/75416>

        Reviewed by Anders Carlsson.

        Add a (lazily-allocated) array of HTMLCollections to ElementRareData and cache
        the various collections on their base node rather than recreating them every time.

        Test: fast/dom/collection-idempotence.html
              fast/dom/gc-9.html

        * html/CollectionType.h:
        * dom/ElementRareData.h:
        (WebCore::ElementRareData::hasCachedHTMLCollections):
        (WebCore::ElementRareData::cachedHTMLCollection):
        (WebCore::ElementRareData::ensureCachedHTMLCollection):
        * dom/Element.h:
        * dom/Element.cpp:
        (WebCore::Element::ensureCachedHTMLCollection):

            Plumbing to cache HTMLCollections on ElementRareData.

        (WebCore::Element::~Element):

            Detach any cached collections from an element when it's destroyed.

        * html/HTMLCollection.h:
        * html/HTMLCollection.cpp:
        (WebCore::HTMLCollection::HTMLCollection):
        (WebCore::HTMLCollection::create):
        (WebCore::HTMLCollection::~HTMLCollection):
        (WebCore::HTMLCollection::detachFromNode):
        * html/HTMLTableRowsCollection.cpp:
        (WebCore::HTMLTableRowsCollection::HTMLTableRowsCollection):
        * html/HTMLOptionsCollection.cpp:
        (WebCore::HTMLOptionsCollection::HTMLOptionsCollection):
        * html/HTMLFormCollection.cpp:
        (WebCore::HTMLFormCollection::HTMLFormCollection):
        * dom/Document.cpp:
        (WebCore::Document::cachedCollection):

            Consolidate the HTMLCollection constructors and get rid of the hacks to
            optionally retain the base node.

        * html/HTMLDataListElement.cpp:
        (WebCore::HTMLDataListElement::options):
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::children):
        * html/HTMLMapElement.cpp:
        (WebCore::HTMLMapElement::areas):
        * html/HTMLTableElement.cpp:
        (WebCore::HTMLTableElement::tBodies):
        * html/HTMLTableRowElement.cpp:
        (WebCore::HTMLTableRowElement::cells):
        * html/HTMLTableSectionElement.cpp:
        (WebCore::HTMLTableSectionElement::rows):

            Cached collections!

2012-01-01  Raymond Liu  <raymond.liu@intel.com>

        Use overload methods to implement [Optional] parameters in AudioNode.idl
        https://bugs.webkit.org/show_bug.cgi?id=75402

        Reviewed by Adam Barth.

        No new tests required.

        * GNUmakefile.list.am:
        * UseV8.cmake:
        * WebCore.gypi:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSAudioNodeCustom.cpp: Removed.
        * bindings/v8/custom/V8AudioNodeCustom.cpp: Removed.
        * webaudio/AudioNode.cpp:
        (WebCore::AudioNode::connect):
        (WebCore::AudioNode::disconnect):
        * webaudio/AudioNode.h:
        * webaudio/AudioNode.idl:

2011-12-20  Robert Hogan  <robert@webkit.org>

        CSS 2.1 failure: border-collapse-offset-002.htm fails
        https://bugs.webkit.org/show_bug.cgi?id=71705

        Reviewed by Julien Chaffraix.

        Tests: css2.1/20110323/border-collapse-offset-002-expected.html
               fast/css/caption-width-absolute-position-offset-top.htm
               fast/css/caption-width-absolute-position.htm
               fast/css/caption-width-fixed-position-offset-top.htm
               fast/css/caption-width-fixed-position.htm
               fast/css/caption-width-relative-position-offset-top.htm
               fast/css/caption-width-relative-position.htm

        Table captions are implemented as children of the table but have a special
        requirement to expand to the full width of the table rather than just the 'available'
        width, i.e. the full width minus padding and borders.

        To accomodate this create a RenderTableCaption object that reimplements containingBlockLogicalWidthForContent()
        to return the full width of the containing block (i.e. the table) rather than the available width.


        * CMakeLists.txt: Add RenderTableCaption.[cpp|h]
        * GNUmakefile.list.am: Add RenderTableCaption.[cpp|h]
        * Target.pri: Add RenderTableCaption.[cpp|h]
        * WebCore.gypi: Add RenderTableCaption.[cpp|h]
        * WebCore.vcproj/WebCore.vcproj: Add RenderTableCaption.[cpp|h]
        * WebCore.xcodeproj/project.pbxproj: Add RenderTableCaption.[cpp|h]
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::addChildIgnoringAnonymousColumnBlocks): Use RenderTableCaption
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::createObject): Add RenderTableCaption.[cpp|h]
        (WebCore::RenderObject::addChild): ditto
        * rendering/RenderObject.h:
        (WebCore::RenderObject::isTableCaption):
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::addChild):
        * rendering/RenderTable.h:
        * rendering/RenderTableCaption.cpp: Added.
        (WebCore::RenderTableCaption::RenderTableCaption): Implement RenderTableCaption
        (WebCore::RenderTableCaption::~RenderTableCaption):
        (WebCore::RenderTableCaption::containingBlockLogicalWidthForContent): Return the containing block's full width rather than it's available width.
        * rendering/RenderTableCaption.h: Added.
        (WebCore::RenderTableCaption::isTableCaption):
        (WebCore::toRenderTableCaption):
        * rendering/RenderingAllInOne.cpp:

2012-01-01  Kentaro Hara  <haraken@chromium.org>

        Unreviewed. Rebaselined run-bindings-tests results.

        * bindings/scripts/test/CPP/WebDOMTestSupplemental.cpp: Added.
        * bindings/scripts/test/CPP/WebDOMTestSupplemental.h: Added.
        * bindings/scripts/test/GObject/WebKitDOMTestSupplemental.cpp: Added.
        * bindings/scripts/test/GObject/WebKitDOMTestSupplemental.h: Added.
        * bindings/scripts/test/ObjC/DOMTestSupplemental.cpp: Added.
        * bindings/scripts/test/ObjC/DOMTestSupplemental.h: Added.

2012-01-01  Andreas Kling  <awesomekling@apple.com>

        Make HTMLCollections play nice after their base node is gone.
        <http://webkit.org/b/75410>

        Reviewed by Anders Carlsson.

        Added HTMLCollection::detachFromNode() and call that from destructors of nodes
        with cached collections.

        Sprinkled checks/assertions where applicable to make sure HTMLCollections are
        empty after their associated node has been destroyed.

        This is a slight change in behavior, as collections would previously keep
        their nodes alive indefinitely. Added a test to document this.

        Test: fast/dom/htmlcollection-zombies.html

        * dom/Document.cpp:
        (WebCore::Document::~Document):
        * html/HTMLAllCollection.cpp:
        (WebCore::HTMLAllCollection::namedItemWithIndex):
        * html/HTMLCollection.cpp:
        (WebCore::HTMLCollection::detachFromNode):
        (WebCore::HTMLCollection::resetCollectionInfo):
        (WebCore::HTMLCollection::itemAfter):
        (WebCore::HTMLCollection::calcLength):
        (WebCore::HTMLCollection::length):
        (WebCore::HTMLCollection::item):
        (WebCore::HTMLCollection::nextItem):
        (WebCore::HTMLCollection::namedItem):
        (WebCore::HTMLCollection::updateNameCache):
        (WebCore::HTMLCollection::hasNamedItem):
        (WebCore::HTMLCollection::namedItems):
        (WebCore::HTMLCollection::tags):
        * html/HTMLCollection.h:
        * html/HTMLFormCollection.cpp:
        (WebCore::HTMLFormCollection::calcLength):
        (WebCore::HTMLFormCollection::item):
        (WebCore::HTMLFormCollection::getNamedItem):
        (WebCore::HTMLFormCollection::getNamedFormItem):
        (WebCore::HTMLFormCollection::namedItem):
        (WebCore::HTMLFormCollection::updateNameCache):
        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::~HTMLFormElement):
        * html/HTMLNameCollection.cpp:
        (WebCore::HTMLNameCollection::itemAfter):
        * html/HTMLOptionsCollection.cpp:
        (WebCore::HTMLOptionsCollection::add):
        (WebCore::HTMLOptionsCollection::remove):
        (WebCore::HTMLOptionsCollection::selectedIndex):
        (WebCore::HTMLOptionsCollection::setSelectedIndex):
        (WebCore::HTMLOptionsCollection::setLength):
        * html/HTMLPropertiesCollection.cpp:
        (WebCore::HTMLPropertiesCollection::length):
        (WebCore::HTMLPropertiesCollection::item):
        (WebCore::HTMLPropertiesCollection::names):
        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::~HTMLSelectElement):
        * html/HTMLSelectElement.h:
        * html/HTMLTableElement.cpp:
        (WebCore::HTMLTableElement::~HTMLTableElement):
        * html/HTMLTableElement.h:
        * html/HTMLTableRowsCollection.cpp:
        (WebCore::HTMLTableRowsCollection::itemAfter):

2012-01-01  Andreas Kling  <awesomekling@apple.com>

        HTMLCollection: Remove the constructor's custom CollectionCache* argument.
        <http://webkit.org/b/75414>

        Reviewed by Anders Carlsson.

        We no longer need to initialize HTMLCollections with a custom CollectionCache,
        so remove the argument from the constructor.

        * html/HTMLCollection.cpp:
        (WebCore::HTMLCollection::HTMLCollection):
        * html/HTMLCollection.h:
        * html/HTMLFormCollection.cpp:
        (WebCore::HTMLFormCollection::HTMLFormCollection):
        * html/HTMLNameCollection.cpp:
        (WebCore::HTMLNameCollection::HTMLNameCollection):
        * html/HTMLOptionsCollection.cpp:
        (WebCore::HTMLOptionsCollection::HTMLOptionsCollection):
        * html/HTMLTableRowsCollection.cpp:
        (WebCore::HTMLTableRowsCollection::HTMLTableRowsCollection):

2011-12-31  Dan Bernstein  <mitz@apple.com>

        WebCore changes for: REGRESSION (WebKit2): Cursor, hover states not updated when page scrolls under stationary mouse pointer
        https://bugs.webkit.org/show_bug.cgi?id=75405

        Reviewed by Anders Carlsson.

        Test: fast/events/frame-scroll-fake-mouse-move.html

        * page/FrameView.cpp:
        (WebCore::FrameView::scrollPositionChanged): Added a call to
        EventHandler::dispatchFakeMouseMoveEventSoon().

2012-01-01  Andreas Kling  <awesomekling@apple.com>

        Cache named item collections on Document, not just their caches.
        <http://webkit.org/b/75403>

        Reviewed by Anders Carlsson.

        Keep two maps of name -> RefPtr<HTMLNameCollection> on Document. We already
        had maps for the CollectionCaches and were creating the HTMLNameCollections
        every time they were accessed. We now let the collections create and manage
        the CollectionCaches instead of Document.

        No new tests since these collections are not exposed to the web.

        * dom/Document.h:
        * dom/Document.cpp:
        (WebCore::Document::windowNamedItems):
        (WebCore::Document::documentNamedItems):

            Replace the name/CollectionCache maps by name/HTMLNameCollection maps.

        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::namedItemGetter):
        * bindings/js/JSHTMLDocumentCustom.cpp:
        (WebCore::JSHTMLDocument::nameGetter):

            Pass names as AtomicStrings to Document's collection getters.

        * html/HTMLNameCollection.h:
        (WebCore::HTMLNameCollection::create):
        * html/HTMLNameCollection.cpp:
        (WebCore::HTMLNameCollection::HTMLNameCollection):

            Store the name in an AtomicString instead of a String, incidentally
            making traversal of HTMLNameCollections more efficient.

        * html/CollectionType.h:

            Remove two now-unneeded constants.

2012-01-01  Andreas Kling  <awesomekling@apple.com>

        Remove Document::collectionInfo() and let collections manage their caches.
        <http://webkit.org/b/75401>

        Reviewed by Anders Carlsson.

        Remove the CollectionCaches from Document and have the document's collections
        create and manage the caches on-demand instead. This is a step towards merging
        CollectionCache into HTMLCollection.

        * dom/Document.h:
        * dom/Document.cpp:
        * html/HTMLCollection.cpp:
        (WebCore::HTMLCollection::HTMLCollection):
        * html/HTMLOptionsCollection.cpp:

2012-01-01  Andreas Kling  <awesomekling@apple.com>

        RenderThemeMac: Avoid double hash lookup in systemColor().
        <http://webkit.org/b/75409>

        Reviewed by Anders Carlsson.

        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::systemColor):

2012-01-01  Andreas Kling  <awesomekling@apple.com>

        CSSStyleSelector: Avoid double hash lookup in keyframeStylesForAnimation().
        <http://webkit.org/b/75408>

        Reviewed by Anders Carlsson.

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

2012-01-01  Andreas Kling  <awesomekling@apple.com>

        KeyframeAnimation: Use hash lookups to determine if property is animated.
        <http://webkit.org/b/75407>

        Reviewed by Anders Carlsson.

        Clean out an old FIXME about using hash lookups instead of iterating over
        the properties.

        * page/animation/KeyframeAnimation.cpp:
        (WebCore::KeyframeAnimation::hasAnimationForProperty):
        (WebCore::KeyframeAnimation::affectsProperty):

2011-12-31  Dan Bernstein  <mitz@apple.com>

        WebCore change for <rdar://problem/10463059> Cannot print USPS shipping labels
        http://webkit.org/b/72801

        Reviewed by Anders Carlsson and Alexey Proskuryakov.

        * WebCore.exp.in: Exported Chrome::print().

2011-12-31  Dan Bernstein  <mitz@apple.com>

        WebCore changes for <rdar://problem/8750356> REGRESSION (WebKit2): Printing a subframe containing a PDF prints the on-screen view instead of the entire PDF document
        <http://webkit.org/b/75232>

        Reviewed by Alexey Proskuryakov.

        * WebCore.exp.in: Exported PluginDocument::pluginWidget().
        * WebCore.xcodeproj/project.pbxproj: Promoted PluginDocument.h to private.
        * html/PluginDocument.h: Fixed a typo in a comment.

2011-12-30  Andreas Kling  <awesomekling@apple.com>

        Cache and reuse the HTMLTableElement.rows collection.
        <http://webkit.org/b/75398>

        Reviewed by Anders Carlsson.

        Let HTMLTableElement::rows() cache the returned collection and tie it to the
        lifetime of the form.

        Test: fast/dom/table-rows-collection-idempotence.html
              fast/dom/gc-9.html

        * html/HTMLTableElement.h:
        * html/HTMLTableElement.cpp:
        (WebCore::HTMLTableElement::rows):

            Cache the HTMLTableRowsCollection returned by rows() on the HTMLTableElement.
            Remove the per-table CollectionCache and let the collection manage that.

        * html/HTMLTableRowsCollection.h:
        * html/HTMLTableRowsCollection.cpp:
        (WebCore::HTMLTableRowsCollection::HTMLTableRowsCollection):
        (WebCore::HTMLTableRowsCollection::create):

            Tell the base class constructor to not retain the back-pointer to the table.

2011-12-30  Andreas Kling  <awesomekling@apple.com>

        Cache and reuse the HTMLSelectElement.options collection.
        <http://webkit.org/b/75399>

        Reviewed by Anders Carlsson.

        Let HTMLSelectElement::options() cache the returned collection and tie it to the
        lifetime of the form. This shrinks HTMLSelectElement by sizeof(CollectionCache)
        minus one pointer.

        Test: fast/dom/select-options-collection-idempotence.html
              fast/gc-9.html

        * html/HTMLSelectElement.h:
        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::options):

            Cache the HTMLOptionsCollection returned by options() on the HTMLSelectElement.
            Remove the per-select CollectionCache and let the collection manage that.

        * html/HTMLOptionsCollection.h:
        * html/HTMLOptionsCollection.cpp:
        (WebCore::HTMLOptionsCollection::create):
        (WebCore::HTMLOptionsCollection::HTMLOptionsCollection):

            Tell the base class constructor to not retain the back-pointer to the element.

        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::setRecalcListItems):
        * html/HTMLOptionsCollection.cpp:
        (WebCore::HTMLOptionsCollection::invalidateCache):

            Added so HTMLSelectElement can invalidate the collection without triggering
            unnecessary instantiation of a CollectionCache.

2011-12-30  Kentaro Hara  <haraken@chromium.org>

        Enable the [Supplemental] IDL on CMake
        https://bugs.webkit.org/show_bug.cgi?id=75345

        Reviewed by Daniel Bates.

        This patch enables the [Supplemental] IDL on CMake by changing the build
        flow of CMake as follows.

        - Previous build flow:
            foreach $idl (all IDL files) {
                generate-bindings.pl depends on $idl;
                generate-bindings.pl reads $idl;
                generate-bindings.pl generates .h and .cpp files for $idl;
            }

        - New build flow (See the discussions in bug 72138 for more details):
            resolve-supplemental.pl depends on all IDL files;
            resolve-supplemental.pl reads all IDL files;
            resolve-supplemental.pl resolves the dependency of [Supplemental=XXXX];
            resolve-supplemental.pl outputs supplemental_dependency.tmp;
            foreach $idl (all IDL files) {
                generate-bindings.pl depends on $idl and supplemental_dependency.tmp;
                generate-bindings.pl reads $idl;
                generate-bindings.pl reads supplemental_dependency.tmp;
                generate-bindings.pl generates .h and .cpp files for $idl,
                    including all attributes in the IDL files that are implementing $idl;
            }

        Tests: Confirm that build succeeds.
               http/tests/websocket/tests/*

        * CMakeLists.txt:
        * UseJSC.cmake: Modified to reflect the new build flow as described above.
        * UseV8.cmake: Ditto.

2011-12-30  Robert Hogan  <robert@webkit.org>

        REGRESSION (r94492): Text is shifted to the right in some buttons in the Mac App Store
        https://bugs.webkit.org/show_bug.cgi?id=74723

        Reviewed by Dan Bernstein.

        Tests: fast/css/absolute-inline-alignment-2.html
               fast/css/absolute-inline-alignment.html

        Inline positioned elements in the leading spaces of an inline run need to align to 
        adjacent text, so add them to the run as they're encountered.

        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::LineInfo::LineInfo): Keep a count of positioned objects encountered when
         skipping leading whitespace.
        (WebCore::LineInfo::runsFromLeadingWhitespace):
        (WebCore::LineInfo::resetRunsFromLeadingWhitespace):
        (WebCore::LineInfo::incrementRunsFromLeadingWhitespace):
        (WebCore::RenderBlock::constructLine): Leading positioned objects should not be considered
         when deciding the number of runs in a line. Otherwise they would contribute towards line 
         height themselves and prevent a free-standing BR following the positioned object from providing a full 
         20px of height.
        (WebCore::RenderBlock::layoutRunsAndFloatsInRange): Since a run containing line-breaks will enter
         skipLeadingWhitespace for each new line we reset the count every time so that the count of positioned
         objects we encounter only affects the line they appear on. This case is covered by 
         fast/inline/styledEmptyInlinesWithBRs.html
        (WebCore::RenderBlock::LineBreaker::skipLeadingWhitespace): Add a run for each inline positioned object
         encountered in leading white space. Keep a count of them so that they can be excluded from
         the total number of runs in constructLine. 

2011-12-30  Raymond Liu  <raymond.liu@intel.com>

        Remove unnecessary [Custom] attribute in CanvasRenderingContext2D.idl
        https://bugs.webkit.org/show_bug.cgi?id=75376

        Reviewed by Adam Barth.

        No new tests required.

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

2011-12-30  Andreas Kling  <awesomekling@apple.com>

        Cache and reuse the HTMLFormElement.elements collection.
        <http://webkit.org/b/75375>

        Reviewed by Anders Carlsson.

        Let HTMLFormElement::elements() cache the returned collection and tie it to the
        lifetime of the form. This reduces memory consumption by ~70 kB (on 64-bit) when
        viewing your average popular post on reddit.com.

        Test: fast/dom/form-elements-collection-idempotence.html
              fast/dom/gc-9.html

        * html/HTMLFormElement.h:
        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::elements):

            Cache the HTMLFormCollection returned by elements() on the HTMLFormElement.
            Remove the per-form CollectionCache and let the collection manage that.

        * html/HTMLCollection.h:
        * html/HTMLCollection.cpp:
        (WebCore::HTMLCollection::HTMLCollection):
        (WebCore::HTMLCollection::create):

            Have the HTMLCollection constructor take a bool argument that decides whether
            we retain the base node pointer or not. This mechanism is a temporary measure
            until all collection types are owned by their respective base nodes.

        * html/HTMLFormCollection.h:
        * html/HTMLFormCollection.cpp:
        (WebCore::HTMLFormCollection::HTMLFormCollection):
        (WebCore::HTMLFormCollection::create):

            Tell the base class constructor to not retain the back-pointer to the form.

2011-12-30  Andreas Kling  <awesomekling@apple.com>

        Unreviewed buildfix after r103841.

        * inspector/InspectorMemoryAgent.cpp:

2011-12-30  Andreas Kling  <awesomekling@apple.com>

        CSSStyleDeclaration: Only allow setting parent rule at construction.
        <http://webkit.org/b/75391>

        Reviewed by Dan Bernstein.

        A CSSStyleDeclaration should only ever belong to one CSSRule. Enforce this
        at compile-time by replacing setParentRule(CSSRule*) with clearParentRule().

        * css/CSSFontFaceRule.cpp:
        (WebCore::CSSFontFaceRule::~CSSFontFaceRule):
        * css/CSSStyleDeclaration.h:
        (WebCore::CSSStyleDeclaration::clearParentRule):
        * css/CSSStyleRule.cpp:
        (WebCore::CSSStyleRule::~CSSStyleRule):
        * css/WebKitCSSKeyframeRule.cpp:
        (WebCore::WebKitCSSKeyframeRule::~WebKitCSSKeyframeRule):

2011-12-30  Andreas Kling  <awesomekling@apple.com>

        WebKitCSSKeyframeRule.style.parentRule should point to the keyframe rule.
        <http://webkit.org/b/75336>

        Reviewed by Antti Koivisto.

        Let CSS animation keyframe rules .style.parentRule point back to the keyframe
        board, rather than the keyframes rule containing it.

        Test: fast/css/css-keyframe-style-parentRule.html

        * css/CSSParser.cpp:
        (WebCore::CSSParser::createKeyframeRule):
        * css/WebKitCSSKeyframeRule.cpp:
        (WebCore::WebKitCSSKeyframeRule::setDeclaration):

            Set the CSSMutableStyleDeclaration's parent rule when creating it instead
            of in WebKitCSSKeyframeRule::setDeclaration(). Add assertion to make sure
            it's only called with declarations already parented to the keyframe rule.

        * css/WebKitCSSKeyframesRule.cpp:
        (WebCore::WebKitCSSKeyframesRule::~WebKitCSSKeyframesRule):
        (WebCore::WebKitCSSKeyframesRule::append):
        (WebCore::WebKitCSSKeyframesRule::deleteRule):

            Stop reparenting keyframe rules' style declarations to the keyframes rule.

2011-12-30  Yury Semikhatsky  <yurys@chromium.org>

        Web Inspector: use typed front-end API in the memory agent
        https://bugs.webkit.org/show_bug.cgi?id=75382

        Memory agent now uses generate C++ API for communicating to the front-end.

        Reviewed by Pavel Feldman.

        * inspector/InspectorMemoryAgent.cpp:
        (WebCore::DOMTreeStatistics::CounterVisitor::CounterVisitor):
        (WebCore::DOMTreeStatistics::CounterVisitor::counters):
        (WebCore::DOMTreeStatistics::CounterVisitor::visitNode):

2011-12-30  Pavel Feldman  <pfeldman@google.com>

        Web Inspector: migrate from "attached" to "compact" styles.
        https://bugs.webkit.org/show_bug.cgi?id=75381

        When front-end is docked to right, it should look like "detached", but is still "attached".
        Use "compact" mode instead of "attached" mode in the styles to mitigate it.

        Reviewed by Yury Semikhatsky.

        * inspector/front-end/SearchController.js:
        (WebInspector.SearchController.prototype.updateSearchLabel):
        * inspector/front-end/Toolbar.js:
        (WebInspector.Toolbar.prototype.set compact):
        (WebInspector.Toolbar.prototype._toolbarDragStart):
        (WebInspector.Toolbar.prototype._toolbarDrag):
        * inspector/front-end/helpScreen.css:
        (body.compact .help-window-outer):
        (body.compact .help-window-main):
        (body.compact .help-window-caption):
        (body.compact .help-close-button):
        (body.compact .help-content):
        * inspector/front-end/inspector.css:
        (body.compact #toolbar):
        (body.compact.port-qt #toolbar):
        (body.compact.inactive #toolbar):
        (body.compact #search-toolbar-label):
        (body.compact #toolbar-dropdown-arrow):
        (body.compact #search):
        (body.compact.port-qt .toolbar-item.close-left, body.compact.port-qt .toolbar-item.close-right):
        (body.compact #main):
        * inspector/front-end/inspector.js:
        (WebInspector.set attached):
        (WebInspector.get isCompactMode):
        (WebInspector.get _setCompactMode):
        (WebInspector._installDockToRight.listener.get if):
        (WebInspector._installDockToRight.listener):
        * inspector/front-end/inspectorCommon.css:
        (body.dock-to-right):
        (body.dock-to-right.inactive):

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

        Unreviewed, rolling out r103794.
        http://trac.webkit.org/changeset/103794
        https://bugs.webkit.org/show_bug.cgi?id=75379

        the ASSERT is triggered by several tests (Requested by
        jchaffraix on #webkit).

        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::RenderTable):
        (WebCore::RenderTable::addChild):
        (WebCore::RenderTable::layout):
        (WebCore::RenderTable::recalcSections):
        (WebCore::RenderTable::outerBorderAfter):
        (WebCore::RenderTable::sectionAbove):
        (WebCore::RenderTable::sectionBelow):
        * rendering/RenderTable.h:
        (WebCore::RenderTable::header):
        (WebCore::RenderTable::footer):
        (WebCore::RenderTable::firstBody):
        (WebCore::RenderTable::hasSections):
        (WebCore::RenderTable::topSection):

2011-12-29  Pavel Feldman  <pfeldman@google.com>

        Web Inspector: enable dock-to-right view (still need embedders to support it).
        https://bugs.webkit.org/show_bug.cgi?id=75360

        Reviewed by Yury Semikhatsky.

        * English.lproj/localizedStrings.js:
        * inspector/front-end/Settings.js:
        (WebInspector.Settings):
        * inspector/front-end/SettingsScreen.js:
        (WebInspector.SettingsScreen):
        * inspector/front-end/inspector.js:
        (WebInspector.set attached):
        (WebInspector._renderAsAttached.get return):
        (WebInspector._renderAsAttached):
        (WebInspector._installDockToRight.updateToolbar):

2011-12-29  Raymond Liu  <raymond.liu@intel.com>

        Use IDL overloads in AudioContext.idl for createBuffer
        https://bugs.webkit.org/show_bug.cgi?id=75293

        Reviewed by Adam Barth.

        No new tests required.

        * bindings/js/JSAudioContextCustom.cpp:
        * bindings/v8/custom/V8AudioContextCustom.cpp:
        * webaudio/AudioContext.cpp:
        (WebCore::AudioContext::createBuffer):
        * webaudio/AudioContext.h:
        * webaudio/AudioContext.idl:

2011-12-29  Andreas Kling  <awesomekling@apple.com>

        HTMLDivElement: Remove unnecessary variable in parseMappedAttribute().
        <http://webkit.org/b/75363>

        Reviewed by Daniel Bates.

        * html/HTMLDivElement.cpp:
        (WebCore::HTMLDivElement::parseMappedAttribute):

2011-12-29  Andreas Kling  <awesomekling@apple.com>

        HTMLParagraphElement: Remove unnecessary variable in parseMappedAttribute().
        <http://webkit.org/b/75362>

        Reviewed by Daniel Bates.

        * html/HTMLParagraphElement.cpp:
        (WebCore::HTMLParagraphElement::parseMappedAttribute):

2011-12-29  Andreas Kling  <awesomekling@apple.com>

        Use HashMap<OwnPtr> for Document's named item collection caches.
        <http://webkit.org/b/75335>

        Reviewed by Daniel Bates.

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

            Remove now-unneeded deleteAllValues() loop.

        (WebCore::Document::nameCollectionInfo):

            Use add() instead of find()/add() to avoid one extra hash lookup.

        * dom/Document.h:

            Switch the value type of m_nameCollectionInfo to use OwnPtr.

2011-12-29  David Barton  <dbarton@mathscribe.com>

        mfenced skips the first separator if the separators attribute contains multiple separators
        https://bugs.webkit.org/show_bug.cgi?id=57697

        Reviewed by Dan Bernstein.

        Added 2 test cases.

        * rendering/mathml/RenderMathMLFenced.cpp:
        (WebCore::RenderMathMLFenced::addChild):
            - Thanks to Xun Sun <xun.sun@intel.com> for the off-by-one error fix.

2011-12-29  Alexis Menard  <alexis.menard@openbossa.org>

        Enable the [Supplemental] IDL on Qt.
        https://bugs.webkit.org/show_bug.cgi?id=75274

        Reviewed by Andreas Kling.

        http://trac.webkit.org/changeset/103783 broke the Qt SL bot.
        This patch fixes the problem by using 'tr' rather than 'sed' which
        seems to be more consistent between Mac and Linux.

        * DerivedSources.pri:

2011-12-29  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Scripts navigator should support incremental search by typing.
        https://bugs.webkit.org/show_bug.cgi?id=75349

        Reviewed by Pavel Feldman.

        * inspector/front-end/ScriptsNavigator.js:
        (WebInspector.ScriptsNavigator):
        (WebInspector.ScriptsNavigator.prototype.get defaultFocusedElement):
        (WebInspector.ScriptsNavigator.prototype.show):
        (WebInspector.ScriptsNavigator.prototype._reset):
        (WebInspector.NavigatorTreeOutline):
        (WebInspector.NavigatorTreeOutline.prototype.scriptTreeElements):
        (WebInspector.NavigatorTreeOutline.prototype.searchStarted):
        (WebInspector.NavigatorTreeOutline.prototype.searchFinished):
        (WebInspector.BaseNavigatorTreeElement.prototype.onreveal):
        (WebInspector.BaseNavigatorTreeElement.prototype.set titleText):
        (WebInspector.BaseNavigatorTreeElement.prototype.matchesSearchText):
        * inspector/front-end/inspector.css:
        (.outline-disclosure ol.search-match-not-found li.selected .selection):
        (.outline-disclosure ol.search-match-found li.selected):
        (.outline-disclosure ol.search-match-found li.selected *):
        (.outline-disclosure ol.search-match-found li.parent.selected::before):
        (.outline-disclosure ol.search-match-found li.parent.expanded.selected::before):
        * inspector/front-end/scriptsPanel.css:
        (#scripts-navigator-tree-search-box):
        (#scripts-navigator-tree-search-box.visible):
        (#scripts-navigator-tree-search-box > input):
        (.scripts.panel .navigator .search-match-found li.selected .selection):
        (.scripts.panel .navigator .search-match-not-found li.selected .selection):
        (.scripts.panel .navigator .searching li.selected .selection):
        * inspector/front-end/treeoutline.js:
        (TreeOutline):
        (TreeOutline.prototype._treeKeyPress):
        (TreeOutline.prototype._startSearch.focusSearchInput):
        (TreeOutline.prototype._startSearch):
        (TreeOutline.prototype._searchTextChanged):
        (TreeOutline.prototype._showSearchMatchElement):
        (TreeOutline.prototype._searchInputKeyDown):
        (TreeOutline.prototype._nextSearchMatch):
        (TreeOutline.prototype._previousSearchMatch):
        (TreeOutline.prototype._searchInputBlur):
        (TreeOutline.prototype._searchFinished):
        (TreeOutline.prototype.stopSearch):

2011-12-29  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Scripts navigator should trim long file names and show full url in tooltip.
        https://bugs.webkit.org/show_bug.cgi?id=75343

        Reviewed by Pavel Feldman.

        Test: inspector/debugger/ui-source-code-display-name.html

        * inspector/front-end/ScriptsNavigator.js:
        (WebInspector.ScriptsNavigator.prototype.setScriptSourceIsDirty):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.EditorContainer.prototype.showSourceFrame):
        (WebInspector.ScriptsPanel.EditorContainer.prototype.replaceSourceFrames):
        (WebInspector.ScriptsPanel.SingleFileEditorContainer.prototype.showSourceFrame):
        (WebInspector.ScriptsPanel.SingleFileEditorContainer.prototype.replaceSourceFrames):
        * inspector/front-end/TabbedEditorContainer.js:
        (WebInspector.TabbedEditorContainer):
        (WebInspector.TabbedEditorContainer.prototype._appendSourceFrameTab):
        (WebInspector.TabbedEditorContainer.prototype._tabClosed):
        (WebInspector.TabbedEditorContainer.prototype._replaceSourceFrameTab.get if):
        (WebInspector.TabbedEditorContainer.prototype._replaceSourceFrameTab):
        (WebInspector.TabbedEditorContainer.prototype.get replaceSourceFrames):
        (WebInspector.TabbedEditorContainer.prototype.reset):
        * inspector/front-end/TabbedPane.js:
        (WebInspector.TabbedPane.prototype.appendTab):
        (WebInspector.TabbedPane.prototype.changeTabTooltip):
        (WebInspector.TabbedPaneTab):
        (WebInspector.TabbedPaneTab.prototype.get tooltip):
        (WebInspector.TabbedPaneTab.prototype.set tooltip):
        (WebInspector.TabbedPaneTab.prototype._createTabElement):
        * inspector/front-end/UISourceCode.js:
        (WebInspector.UISourceCode.prototype._parseURL):
        * inspector/front-end/utilities.js:
        ():

2011-12-29  Alexis Menard  <alexis.menard@openbossa.org>

        getComputedStyle for margin is not implemented.
        https://bugs.webkit.org/show_bug.cgi?id=75358

        Reviewed by Andreas Kling.

        Implement getComputedStyle for margin.

        Test: fast/css/getComputedStyle/getComputedStyle-margin-shorthand.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):

2011-12-29  Caio Marcelo de Oliveira Filho  <caio.oliveira@openbossa.org>

        Use HashMap<OwnPtr> in RenderSVGResourcePattern
        https://bugs.webkit.org/show_bug.cgi?id=75361

        Reviewed by Andreas Kling.

        * rendering/svg/RenderSVGResourcePattern.cpp:
        (WebCore::RenderSVGResourcePattern::removeAllClientsFromCache):
        (WebCore::RenderSVGResourcePattern::removeClientFromCache):
        (WebCore::RenderSVGResourcePattern::applyResource): use HashMap::add() to avoid
        looking up the hash twice.
        * rendering/svg/RenderSVGResourcePattern.h: rename m_pattern to m_patternMap to
        improve readability a little bit.

2011-12-29  Alexis Menard  <alexis.menard@openbossa.org>

        getComputedStyle for padding is not implemented.
        https://bugs.webkit.org/show_bug.cgi?id=75352

        Reviewed by Andreas Kling.

        Implement getComputedStyle for padding shorthand property.

        Test: fast/css/getComputedStyle/getComputedStyle-padding-shorthand.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):

2011-12-29  Caio Marcelo de Oliveira Filho  <caio.oliveira@openbossa.org>

        Use HashMap<OwnPtr> in OriginAccessMap
        https://bugs.webkit.org/show_bug.cgi?id=75327

        Reviewed by Andreas Kling.

        * page/SecurityPolicy.cpp:
        (WebCore::SecurityPolicy::addOriginAccessWhitelistEntry):
        (WebCore::SecurityPolicy::removeOriginAccessWhitelistEntry):
        (WebCore::SecurityPolicy::resetOriginAccessWhitelists):

2011-12-29  Pavel Podivilov  <podivilov@chromium.org>

        Web Inspector: support sourceMappingURL magic comment.
        https://bugs.webkit.org/show_bug.cgi?id=75356

        Reviewed by Pavel Feldman.

        * inspector/ContentSearchUtils.cpp:
        (WebCore::ContentSearchUtils::findSourceMapURL):
        * inspector/ContentSearchUtils.h:
        * inspector/InspectorDebuggerAgent.cpp:
        (WebCore::InspectorDebuggerAgent::sourceMapURLForScript):

2011-12-29  Alexander Pavlov  <apavlov@chromium.org>

        Web Inspector: Suggest pop-over doesn't hide on tab switch
        https://bugs.webkit.org/show_bug.cgi?id=73611

        Reviewed by Pavel Feldman.

        * inspector/front-end/ConsoleView.js:
        (WebInspector.ConsoleView.prototype.willHide):
        * inspector/front-end/TextPrompt.js:
        (WebInspector.TextPrompt.prototype.complete):
        (WebInspector.TextPrompt.prototype._completionsReady):
        (WebInspector.TextPrompt.prototype.acceptSuggestion):
        (WebInspector.TextPrompt.prototype.hideSuggestBox):
        (WebInspector.TextPrompt.SuggestBox.prototype._completionsReady):

2011-12-28  Alexander Pavlov  <apavlov@chromium.org>

        Web Inspector: Implement CSS selector profiler
        https://bugs.webkit.org/show_bug.cgi?id=74004

        Reviewed by Pavel Feldman.

        This implementation of CSS selector profiler measures the total time required to match a certain selector
        against DOM nodes and apply the style declaration properties to the particular element,
        as well as the number of selector  matches (i.e. the number of nodes that matched the selector.)
        The results are approximate due to internal matching algorithm optimizations (shared styles et al.)
        Multiple selectors with the same selectorText are coalesced into a single record.

        * English.lproj/localizedStrings.js:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * inspector/compile-front-end.sh:
        * inspector/front-end/CSSSelectorProfileView.js: Added.
        (WebInspector.CSSSelectorDataGridNode):
        (WebInspector.CSSSelectorDataGridNode.prototype.get rawData):
        (WebInspector.CSSSelectorProfileView):
        (WebInspector.CSSSelectorProfileView.prototype.get statusBarItems):
        (WebInspector.CSSSelectorProfileView.prototype.get profile):
        (WebInspector.CSSSelectorProfileView.prototype.set profile):
        (WebInspector.CSSSelectorProfileView.prototype._createProfileNodes):
        (WebInspector.CSSSelectorProfileView.prototype.rebuildGridItems):
        (WebInspector.CSSSelectorProfileView.prototype.refreshData):
        (WebInspector.CSSSelectorProfileView.prototype.refreshShowAsPercents):
        (WebInspector.CSSSelectorProfileView.prototype._sortProfile.get selectorComparator):
        (WebInspector.CSSSelectorProfileView.prototype._sortProfile.timeComparator):
        (WebInspector.CSSSelectorProfileView.prototype._sortProfile.matchesComparator):
        (WebInspector.CSSSelectorProfileView.prototype._sortProfile):
        (WebInspector.CSSSelectorProfileType):
        (WebInspector.CSSSelectorProfileType.prototype.get buttonTooltip):
        (WebInspector.CSSSelectorProfileType.prototype.buttonClicked):
        (WebInspector.CSSSelectorProfileType.prototype.get treeItemTitle):
        (WebInspector.CSSSelectorProfileType.prototype.get description):
        (WebInspector.CSSSelectorProfileType.prototype.reset):
        (WebInspector.CSSSelectorProfileType.prototype.isRecordingProfile):
        (WebInspector.CSSSelectorProfileType.prototype.setRecordingProfile):
        (WebInspector.CSSSelectorProfileType.prototype.startRecordingProfile):
        (WebInspector.CSSSelectorProfileType.prototype.stopRecordingProfile):
        (WebInspector.CSSSelectorProfileType.prototype.createSidebarTreeElementForProfile):
        (WebInspector.CSSSelectorProfileType.prototype.createView):
        * inspector/front-end/DetailedHeapshotView.js:
        * inspector/front-end/ProfileView.js:
        * inspector/front-end/ProfilesPanel.js:
        (WebInspector.ProfileType.prototype.reset):
        (WebInspector.ProfilesPanel.prototype._reset):
        (WebInspector.ProfilesPanel.prototype.addProfileHeader):
        (WebInspector.ProfilesPanel.prototype._removeTemporaryProfile):
        (WebInspector.ProfilesPanel.prototype.setRecordingProfile):
        (WebInspector.ProfilesPanel.prototype.takeHeapSnapshot):
        (WebInspector.ProfilesPanel.prototype._reportHeapSnapshotProgress):
        (WebInspector.ProfilerDispatcher.prototype.addProfileHeader):
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/inspector.html:
        * inspector/front-end/profilesPanel.css:

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

        Unreviewed, rolling out r103798.
        http://trac.webkit.org/changeset/103798
        https://bugs.webkit.org/show_bug.cgi?id=75353

        some small scrollbar differences are making the tests fail on
        several platforms (Requested by jchaffraix on #webkit).

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateLayerPositionsAfterScroll):

2011-12-29  Alexander Pavlov  <apavlov@chromium.org>

        Web Inspector: Focus of the DOM tree is not restored when switching to the Elements panel
        https://bugs.webkit.org/show_bug.cgi?id=75351

        Reviewed by Yury Semikhatsky.

        * inspector/front-end/ElementsPanel.js:
        (WebInspector.ElementsPanel.prototype.wasShown):

2011-12-29  Julien Chaffraix  <jchaffraix@webkit.org>

        REGRESSION (r93614): Safari Reader doesn't repaint correctly when scrolling
        https://bugs.webkit.org/show_bug.cgi?id=67100

        Reviewed by Dan Bernstein.

        Tests: fast/layers/scroll-with-transform-composited-layer-expected.html
               fast/layers/scroll-with-transform-composited-layer.html
               fast/layers/scroll-with-transform-layer-expected.html
               fast/layers/scroll-with-transform-layer.html

        The regression came from a previous optimization that was wrongly kept after r93614.

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateLayerPositionsAfterScroll):
        Remove the early return for transformed layer. This change worked as we used
        to call updateLayerPositions from scrollTo which would call updateLayerPosition on
        all our descendants. After r93614, this is no longer the case and we explicitely need
        to call updateLayerPosition on our descendants from updateLayerPositionsAfterScroll.

2011-12-29  Alexander Pavlov  <apavlov@chromium.org>

        Web Inspector: Tree views can be collapsed/hidden using the keyboard arrows
        https://bugs.webkit.org/show_bug.cgi?id=46272

        Reviewed by Yury Semikhatsky.

        WebInspector.SidebarSectionTreeElement which is not selectable has also been made non-collapsible
        and expanded by default.

        * inspector/front-end/AuditsPanel.js:
        (WebInspector.AuditsPanel):
        * inspector/front-end/ProfilesPanel.js:
        (WebInspector.ProfilesPanel.prototype._registerProfileType):
        * inspector/front-end/SidebarTreeElement.js:
        (WebInspector.SidebarSectionTreeElement):
        (WebInspector.SidebarSectionTreeElement.prototype.selectable.false.collapse):
        * inspector/front-end/TimelinePanel.js:
        (WebInspector.TimelinePanel):

2011-12-29  Pavel Feldman  <pfeldman@google.com>

        Web Inspector: [chromium] pass dock to side request to the embedder.
        https://bugs.webkit.org/show_bug.cgi?id=75344

        Reviewed by Yury Semikhatsky.

        I'd like to enable dock-to-right for the front-end window. This is a background work
        to pass control flow from the front-end to the front-end host.

        * inspector/InspectorFrontendClient.h:
        * inspector/InspectorFrontendClientLocal.h:
        (WebCore::InspectorFrontendClientLocal::requestSetDockSide):
        * inspector/InspectorFrontendHost.cpp:
        (WebCore::InspectorFrontendHost::requestSetDockSide):
        * inspector/InspectorFrontendHost.h:
        * inspector/InspectorFrontendHost.idl:
        * inspector/front-end/InspectorFrontendHostStub.js:
        (.WebInspector.InspectorFrontendHostStub.prototype.requestAttachWindow):
        (.WebInspector.InspectorFrontendHostStub.prototype.requestDetachWindow):
        (.WebInspector.InspectorFrontendHostStub.prototype.requestSetDockSide):

2011-12-28  Pavel Podivilov  <podivilov@chromium.org>

        Web Inspector: add "enable source maps" checkbox setting.
        https://bugs.webkit.org/show_bug.cgi?id=75311

        Reviewed by Pavel Feldman.

        When "enable source maps" is on, all auto detected source maps are silently applied.

        * English.lproj/localizedStrings.js:
        * inspector/front-end/DebuggerPresentationModel.js:
        * inspector/front-end/JavaScriptSourceFrame.js:
        (WebInspector.JavaScriptSourceFrame.prototype.populateTextAreaContextMenu):
        * inspector/front-end/RawSourceCode.js:
        (WebInspector.RawSourceCode):
        (WebInspector.RawSourceCode.prototype.setFormatted):
        (WebInspector.RawSourceCode.prototype._updateSourceMapping.didCreateSourceMapping):
        (WebInspector.RawSourceCode.prototype._updateSourceMapping):
        (WebInspector.RawSourceCode.prototype._createUISourceCode):
        * inspector/front-end/Settings.js:
        (WebInspector.Settings):
        * inspector/front-end/SettingsScreen.js:
        (WebInspector.SettingsScreen):
        * inspector/front-end/UISourceCode.js:
        (WebInspector.UISourceCode):
        * inspector/front-end/inspector.js:
        (WebInspector._toolbarItemClicked):

2011-12-29  Julien Chaffraix  <jchaffraix@webkit.org>

        Tighten our checks for needsSectionRecalc in RenderTable
        https://bugs.webkit.org/show_bug.cgi?id=73972

        Reviewed by Adam Barth.

        Refactoring covered under the new tests.

        Now most of the functions use the header, first body and footer's 
        getters that checks if we need a section recalculation. The only
        exceptions are addChild and recalcSections as they can be called
        with the bit set.

        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::layout):
        (WebCore::RenderTable::outerBorderAfter):
        (WebCore::RenderTable::sectionAbove):
        (WebCore::RenderTable::sectionBelow):
        Updated the previous functions to use the sections' getters.

        (WebCore::RenderTable::RenderTable):
        (WebCore::RenderTable::addChild):
        (WebCore::RenderTable::recalcSections):
        Update the previous functions after the 2 renames
        (see below).

        * rendering/RenderTable.h:
        (WebCore::RenderTable::header):
        (WebCore::RenderTable::footer):
        (WebCore::RenderTable::firstBody):
        Added some ASSERT here. Also renamed m_head to m_header
        and m_foot to m_footer to match the getter and to avoid
        unneeded abbreviation.

        (WebCore::RenderTable::hasSections):
        (WebCore::RenderTable::topSection):
        Updated the previous functions to use the section getters.

2011-12-28  Caio Marcelo de Oliveira Filho  <caio.oliveira@openbossa.org>

        Use HashMap<OwnPtr> for UserScriptMap and UserStyleSheetMap
        https://bugs.webkit.org/show_bug.cgi?id=75323

        Reviewed by Darin Adler.

        * dom/Document.cpp:
        (WebCore::Document::pageGroupUserSheets):
        * page/PageGroup.cpp:
        (WebCore::PageGroup::addUserScriptToWorld):
        (WebCore::PageGroup::addUserStyleSheetToWorld):
        (WebCore::PageGroup::removeUserScriptFromWorld):
        (WebCore::PageGroup::removeUserStyleSheetFromWorld): fix a small mistake in
        previous code. Now the entry for world is removed (and deleted) only if its
        stylesheet vector is empty.
        (WebCore::PageGroup::removeUserScriptsFromWorld):
        (WebCore::PageGroup::removeUserStyleSheetsFromWorld):
        (WebCore::PageGroup::removeAllUserContent):
        * page/UserScriptTypes.h:
        * page/UserStyleSheetTypes.h:

2011-12-28  Andreas Kling  <awesomekling@apple.com>

        Reduce memory used by NamedNodeMap.
        <http://webkit.org/b/75333>

        Reviewed by Sam Weinig.

        Give NamedNodeMap's attribute vector an inline capacity of 4. The vast majority
        of elements have <= 4 attributes, and if they don't have any we normally don't
        allocate an attribute map at all.

        This reduces memory consumption by 1.2MB (on 64-bit) when loading the full HTML5
        spec at <http://whatwg.org/c>.

        * dom/NamedNodeMap.h:

2011-12-28  Andreas Kling  <awesomekling@apple.com>

        Reduce memory used by SpaceSplitString.
        <http://webkit.org/b/75315>

        Reviewed by Sam Weinig.

        Split the string upon creation instead of waiting until it's accessed.
        This allows us to get rid of all data members except the substring vector.
        Since we're storing AtomicStrings, this is way more memory-efficient than
        the previous implementation in the majority of cases.

        Also reduced the inline capcity of the vector to 2 (from 8), after testing
        showed this to cover 90% of the cases on the Alexa top sites.

        All in all this reduces memory consumption by 1.1MB (on 64-bit) when
        loading the full HTML5 spec at <http://whatwg.org/c>. On that same page,
        less than 2ms is spent (on my MBP) splitting the ~20000 strings.

        * dom/SpaceSplitString.cpp:
        (WebCore::SpaceSplitStringData::createVector):
        (WebCore::SpaceSplitStringData::containsAll):
        (WebCore::SpaceSplitStringData::remove):
        * dom/SpaceSplitString.h:
        (WebCore::SpaceSplitStringData::SpaceSplitStringData):
        (WebCore::SpaceSplitStringData::contains):
        (WebCore::SpaceSplitStringData::size):
        (WebCore::SpaceSplitStringData::operator[]):

2011-12-28  ChangSeok Oh  <shivamidow@gmail.com>

        [GTK] Fix compilation issue when selecting opengl for Accelerated compositing
        https://bugs.webkit.org/show_bug.cgi?id=75309

        Reviewed by Martin Robinson.

        Add TextureMapperGL and TextureMapperGLCairo files.
        They define new classes required to implement TextureMapperGL for GTK port.

        No new tests required.

        * GNUmakefile.list.am:
        * platform/graphics/cairo/TextureMapperGLCairo.cpp: Added.
        (WebCore::BGRA32PremultimpliedBufferCairo::BGRA32PremultimpliedBufferCairo):
        (WebCore::BGRA32PremultimpliedBufferCairo::~BGRA32PremultimpliedBufferCairo):
        (WebCore::BGRA32PremultimpliedBufferCairo::beginPaint):
        (WebCore::BGRA32PremultimpliedBufferCairo::data):
        (WebCore::BGRA32PremultimpliedBufferCairo::endPaint):
        (WebCore::uidForImage):
        (WebCore::BGRA32PremultimpliedBuffer::create):
        * platform/graphics/cairo/TextureMapperGLCairo.h: Added.

2011-12-28  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r103782.
        http://trac.webkit.org/changeset/103782
        https://bugs.webkit.org/show_bug.cgi?id=75328

        broke origin-whitelisting-removal.html (Requested by kling on
        #webkit).

        * page/SecurityPolicy.cpp:
        (WebCore::SecurityPolicy::addOriginAccessWhitelistEntry):
        (WebCore::SecurityPolicy::removeOriginAccessWhitelistEntry):
        (WebCore::SecurityPolicy::resetOriginAccessWhitelists):

2011-12-28  Kentaro Hara  <haraken@chromium.org>

        Enable the [Supplemental] IDL on Qt
        https://bugs.webkit.org/show_bug.cgi?id=75274

        Reviewed by Adam Barth.

        This patch enables the [Supplemental] IDL on Qt by changing the build
        flow of Qt as follows.

        - Previous build flow:
            foreach $idl (all IDL files) {
                generate-bindings.pl depends on $idl;
                generate-bindings.pl reads $idl;
                generate-bindings.pl generates .h and .cpp files for $idl;
            }

        - New build flow (See the discussions in bug 72138 for more details):
            resolve-supplemental.pl depends on all IDL files;
            resolve-supplemental.pl reads all IDL files;
            resolve-supplemental.pl resolves the dependency of [Supplemental=XXXX];
            resolve-supplemental.pl outputs supplemental_dependency.tmp;
            foreach $idl (all IDL files) {
                generate-bindings.pl depends on $idl and supplemental_dependency.tmp;
                generate-bindings.pl reads $idl;
                generate-bindings.pl reads supplemental_dependency.tmp;
                generate-bindings.pl generates .h and .cpp files for $idl,
                    including all attributes in the IDL files that are implementing $idl;
            }

        Tests: Confirm that build succeeds.
               http/tests/websocket/tests/*

        * DerivedSources.pri: Described the above build flow.

2011-12-28  Caio Marcelo de Oliveira Filho  <caio.oliveira@openbossa.org>

        Use HashMap<OwnPtr> in OriginAccessMap
        https://bugs.webkit.org/show_bug.cgi?id=75327

        Reviewed by Andreas Kling.

        * page/SecurityPolicy.cpp:
        (WebCore::SecurityPolicy::addOriginAccessWhitelistEntry):
        (WebCore::SecurityPolicy::removeOriginAccessWhitelistEntry):
        (WebCore::SecurityPolicy::resetOriginAccessWhitelists):

2011-12-28  Caio Marcelo de Oliveira Filho  <caio.oliveira@openbossa.org>

        Use HashMap<OwnPtr> for ProgressTracker's items
        https://bugs.webkit.org/show_bug.cgi?id=75326

        Reviewed by Andreas Kling.

        * loader/ProgressTracker.cpp:
        (WebCore::ProgressTracker::~ProgressTracker): although is empty, the destructor was
        kept so in the header file we can forward declare ProgressItem and use in an OwnPtr.
        (WebCore::ProgressTracker::reset):
        (WebCore::ProgressTracker::incrementProgress):
        (WebCore::ProgressTracker::completeProgress): removed a useless assignment to item
        member just before it is deleted.
        * loader/ProgressTracker.h:

2011-12-28  Alexis Menard  <alexis.menard@openbossa.org>

        getComputedStyle for border-color is not implemented.
        https://bugs.webkit.org/show_bug.cgi?id=75324

        Reviewed by Andreas Kling.

        Implement getComputedStyle for border-color.

        Test: fast/css/getComputedStyle/getComputedStyle-border-color-shorthand.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):

2011-12-28  Darin Adler  <darin@apple.com>

        Use OwnPtr to handle lifetime and deletion of FontFace objects
        https://bugs.webkit.org/show_bug.cgi?id=75221

        Reviewed by Daniel Bates.

        * css/CSSFontFaceSource.cpp:
        (WebCore::CSSFontFaceSource::getFontData): Use add instead of get/set to read and
        then later fill a cache. Use new version of registerCustomFont that takes PassOwnPtr.
        * css/CSSSegmentedFontFace.cpp:
        (WebCore::CSSSegmentedFontFace::getFontData): Ditto.

        * dom/Document.cpp:
        (WebCore::Document::registerCustomFont): Take a PassOwnPtr instead of raw pointer.
        * dom/Document.h: Ditto.

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

        "Fake" insertion mode in HTMLTreeBuilder doesn't do anything
        https://bugs.webkit.org/show_bug.cgi?id=75322

        Reviewed by Darin Adler.

        This machinery isn't needed anymore now that we're using the new
        foreign content hotness.

        * html/parser/HTMLTreeBuilder.cpp:
        * html/parser/HTMLTreeBuilder.h:
        (WebCore::HTMLTreeBuilder::setInsertionMode):

2011-12-28  Alexis Menard  <alexis.menard@openbossa.org>

        getComputedStyle for border-style is not implemented.
        https://bugs.webkit.org/show_bug.cgi?id=75312

        Reviewed by Andreas Kling.

        Implement getComputedStyle for border-style.

        Test: fast/css/getComputedStyle/getComputedStyle-border-style-shorthand.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):

2011-12-28  Alexis Menard  <alexis.menard@openbossa.org>

        getComputedStyle for border-bottom, border-top, border-left, border-right is not implemented.
        https://bugs.webkit.org/show_bug.cgi?id=74743

        Reviewed by Tony Chang.

        Implement getComputedStyle for border-top, border-bottom, border-right, border-left.

        Test: fast/css/getComputedStyle/getComputedStyle-border-shorthand.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        (WebCore::CSSComputedStyleDeclaration::getCSSPropertyValuesForShorthandProperties):
        * css/CSSComputedStyleDeclaration.h:

2011-12-28  Robert Hogan  <robert@webkit.org>

        Inline flow not learning height of all text descendants
        https://bugs.webkit.org/show_bug.cgi?id=75305

        Reviewed by Dan Bernstein.

        Tests: fast/inline/nested-text-descendants-expected.html
               fast/inline/nested-text-descendants.html

        The root inline box would only learn it had text descendants if its first grandchild
        was text. It wasn't informed of subsequent text grandchildren so could not factor them 
        into its calculation of the line height.
        To fix this, propagate the existence of a text descendant to the root inline box
        by walking up through the text child's ancestors.

        * rendering/InlineFlowBox.cpp:
        (WebCore::setHasTextDescendantsOnAncestors):
        (WebCore::InlineFlowBox::addToLine):
        * rendering/InlineFlowBox.h:
        (WebCore::InlineFlowBox::setHasTextDescendants):

2011-12-28  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r103620.
        http://trac.webkit.org/changeset/103620
        https://bugs.webkit.org/show_bug.cgi?id=75316

        Causes many crashes (Requested by abarth on #webkit).

        * loader/FrameLoaderClient.h:
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::postMessageTimerFired):

2011-12-28  Alexander Pavlov  <apavlov@chromium.org>

        [V8][Chromium] 'randomString' in document.body.style always returns true
        https://bugs.webkit.org/show_bug.cgi?id=75313

        Reviewed by Adam Barth.

        * bindings/v8/custom/V8CSSStyleDeclarationCustom.cpp:
        (WebCore::V8CSSStyleDeclaration::namedPropertyQuery):

2011-12-28  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Add domain.png to WebCore.gypi / WebKit.qrc.
        https://bugs.webkit.org/show_bug.cgi?id=75310

        Reviewed by Pavel Feldman.

        * WebCore.gypi:
        * inspector/front-end/WebKit.qrc:

2011-12-28  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: ExperimentsSettings causes warning on chromium when reading localizedStrings.
        https://bugs.webkit.org/show_bug.cgi?id=75299

        Reviewed by Pavel Feldman.

        * inspector/front-end/Settings.js:
        (WebInspector.ExperimentsSettings):
        * inspector/front-end/SettingsScreen.js:
        (WebInspector.SettingsScreen.prototype._createExperimentCheckbox):

2011-12-28  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Scripts panel: add debug sidebar resizer to TabbedEditorContainer.
        https://bugs.webkit.org/show_bug.cgi?id=75300

        Reviewed by Pavel Feldman.

        * inspector/front-end/ScriptsPanel.js:
        * inspector/front-end/scriptsPanel.css:
        (#scripts-debug-sidebar-resizer-widget):

2011-12-28  Alexander Pavlov  <apavlov@chromium.org>

        Web Inspector: Introduce a Profiler launcher view similar to that in the Audits panel
        https://bugs.webkit.org/show_bug.cgi?id=75228

        Reviewed by Pavel Feldman.

        * English.lproj/localizedStrings.js:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * inspector/front-end/AuditLauncherView.js:
        (WebInspector.AuditLauncherView):
        * inspector/front-end/AuditsPanel.js:
        (WebInspector.AuditsPanel):
        * inspector/front-end/DetailedHeapshotView.js:
        (WebInspector.DetailedHeapshotProfileType):
        (WebInspector.DetailedHeapshotProfileType.prototype.get treeItemTitle):
        (WebInspector.DetailedHeapshotProfileType.prototype.get description):
        * inspector/front-end/ProfileLauncherView.js: Added.
        (WebInspector.ProfileLauncherView):
        (WebInspector.ProfileLauncherView.prototype.setUpEventListeners):
        (WebInspector.ProfileLauncherView.prototype.addProfileType):
        (WebInspector.ProfileLauncherView.prototype._controlButtonClicked):
        (WebInspector.ProfileLauncherView.prototype._updateControls):
        (WebInspector.ProfileLauncherView.prototype._profileTypeChanged):
        (WebInspector.ProfileLauncherView.prototype._onProfileStarted):
        (WebInspector.ProfileLauncherView.prototype._onProfileFinished):
        * inspector/front-end/ProfileView.js:
        (WebInspector.CPUProfileType):
        (WebInspector.CPUProfileType.prototype.get treeItemTitle):
        (WebInspector.CPUProfileType.prototype.get description):
        * inspector/front-end/ProfilesPanel.js:
        (WebInspector.ProfileType.prototype.get treeItemTitle):
        (WebInspector.ProfileType.prototype.get description):
        (WebInspector.ProfilesPanel.prototype.get statusBarItems):
        (WebInspector.ProfilesPanel.prototype.toggleRecordButton):
        (WebInspector.ProfilesPanel.prototype._onProfileTypeSelected):
        (WebInspector.ProfilesPanel.prototype._reset):
        (WebInspector.ProfilesPanel.prototype._showLauncherView):
        (WebInspector.ProfilesPanel.prototype._registerProfileType):
        (WebInspector.ProfilesPanel.prototype._addProfileHeader):
        (WebInspector.ProfilesPanel.prototype._updateInterface):
        (WebInspector.ProfileTypeTreeElement):
        (WebInspector.ProfileTypeTreeElement.prototype.collapse):
        (WebInspector.ProfilesSidebarTreeElement):
        (WebInspector.ProfilesSidebarTreeElement.prototype.onattach):
        (WebInspector.ProfilesSidebarTreeElement.prototype.onselect):
        (WebInspector.ProfilesSidebarTreeElement.prototype.get selectable):
        (WebInspector.ProfilesSidebarTreeElement.prototype.refresh):
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/WelcomeView.js: Removed.
        * inspector/front-end/auditsPanel.css:
        (.audit-launcher-view .audit-launcher-view-content):
        (.audit-launcher-view div.button-container):
        (.panel-enabler-view.audit-launcher-view label):
        (.panel-enabler-view.audit-launcher-view label.disabled):
        * inspector/front-end/inspector.html:
        * inspector/front-end/panelEnablerView.css:
        (.panel-enabler-view img):
        (.panel-enabler-view .flexible-space):
        (.panel-enabler-view button:not(.status-bar-item)):
        (body.inactive .panel-enabler-view button, .panel-enabler-view button:disabled):
        (.panel-enabler-view input[type="radio"]):
        (.panel-enabler-view input[type="radio"]:active:not(:disabled)):
        (.panel-enabler-view input[type="radio"]:checked):
        (.panel-enabler-view input[type="radio"]:checked:active):
        * inspector/front-end/profilesPanel.css:
        (.profile-launcher-view-tree-item > .icon):
        (.profile-launcher-view-content):
        (.profile-launcher-view-content h1):
        (.panel-enabler-view.profile-launcher-view form):
        (.panel-enabler-view.profile-launcher-view label):
        (.profile-launcher-view-content p):
        (.panel-enabler-view.profile-launcher-view button:not(.status-bar-item)):
        (.profile-launcher-view-content button.running:not(.status-bar-item)):
        (body.inactive .profile-launcher-view-content button.running:not(.status-bar-item)):

2011-12-28  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r103763.
        http://trac.webkit.org/changeset/103763
        https://bugs.webkit.org/show_bug.cgi?id=75307

        "Compilation fails on Snow Leopard" (Requested by yurys on
        #webkit).

        * inspector/CodeGeneratorInspector.py:
        (Helper):
        (create_ad_hoc_type_declaration.Helper):
        (CodeGenerator.generate_type_builder):
        (get_in_c_type_text):

2011-12-28  Peter Rybin  <peter.rybin@gmail.com>

        Web Inspector: CodeGeneratorInspector.py: generate enum types.
        https://bugs.webkit.org/show_bug.cgi?id=74954

        Reviewed by Yury Semikhatsky.

        Internal map of string contants is created. C enums are created for
        each JSON enum.

        * inspector/CodeGeneratorInspector.py:
        (EnumConstants.add_constant):
        (EnumConstants):
        (EnumConstants.get_enum_constant_code):
        (TypeBindings.create_type_declaration_.EnumBinding.get_code_generator.CodeGenerator.generate_type_builder):
        (TypeBindings.create_type_declaration_.EnumBinding.get_in_c_type_text):
        (TypeBindings.create_type_declaration_.EnumBinding.get_setter_value_expression_pattern):
        (TypeBindings.create_type_declaration_.PlainString.reduce_to_raw_type):
        (TypeBindings.create_type_declaration_.PlainString.get_setter_value_expression_pattern):
        (get_in_c_type_text):
        (get_setter_value_expression_pattern):
        (PlainObjectBinding.get_in_c_type_text):
        (PlainObjectBinding.get_setter_value_expression_pattern):
        (RawTypesBinding.get_in_c_type_text):
        (RawTypesBinding.get_setter_value_expression_pattern):
        (get_annotated_type_text):
        (MethodGenerateModes.get_modes):
        (MethodGenerateModes.StrictParameterMode.get_c_param_type_text):
        (MethodGenerateModes.StrictParameterMode):
        (MethodGenerateModes.StrictParameterMode.get_setter_value_expression):
        (MethodGenerateModes.RawParameterMode.get_c_param_type_text):
        (MethodGenerateModes.RawParameterMode):
        (MethodGenerateModes.RawParameterMode.get_setter_value_expression):
        (MethodGenerateModes.CombinedMode.get_c_param_type_text):
        (MethodGenerateModes):
        (MethodGenerateModes.CombinedMode):
        (MethodGenerateModes.CombinedMode.get_setter_value_expression):

2011-12-28  Hans Wennborg  <hans@chromium.org>

        IndexedDB: IDBKeyRange constructor should throw when lower > upper
        https://bugs.webkit.org/show_bug.cgi?id=74705

        Reviewed by Tony Chang.

        Make IDBKeyRange throw an exception when lower > upper,
        or lower == upper and one or both of the bounds is open.

        Tested in storage/indexeddb/keyrange.html.

        * storage/IDBKeyRange.cpp:
        (WebCore::IDBKeyRange::bound):

2011-12-28  Alexander Pavlov  <apavlov@chromium.org>

        Web Inspector: [protocol] empty enum constant should be replaced with identifier
        https://bugs.webkit.org/show_bug.cgi?id=75273

        Reviewed by Yury Semikhatsky.

        * inspector/Inspector.json:
        * inspector/InspectorCSSAgent.cpp:
        (WebCore::InspectorCSSAgent::asInspectorStyleSheet):
        (WebCore::InspectorCSSAgent::detectOrigin):
        * inspector/InspectorStyleSheet.cpp:
        (WebCore::InspectorStyleSheet::buildObjectForRule):
        * inspector/front-end/CSSStyleModel.js:
        (WebInspector.CSSRule.prototype.get isRegular):

2011-12-27  Pavel Feldman  <pfeldman@google.com>

        Web Inspector: complete annotating SDK component.
        https://bugs.webkit.org/show_bug.cgi?id=75259

        Reviewed by Yury Semikhatsky.

        * inspector/front-end/DebuggerPresentationModel.js:
        (WebInspector.DebuggerPresentationModel.prototype._addScript):
        * inspector/front-end/NetworkManager.js:
        (WebInspector.NetworkManager.prototype._cacheDisabledSettingChanged):
        (WebInspector.NetworkDispatcher.prototype._isNull):
        (WebInspector.NetworkDispatcher.prototype.webSocketCreated):
        * inspector/front-end/Resource.js:
        (WebInspector.Resource.displayName):
        * inspector/front-end/ResourceTreeModel.js:
        (WebInspector.ResourceTreeModel.prototype._onResourceUpdated):
        (WebInspector.ResourceTreeModel.prototype._consoleMessageAdded):
        (WebInspector.ResourceTreeFrame.prototype.get name):
        * inspector/front-end/TabbedEditorContainer.js:

2011-12-27  Anantanarayanan G Iyengar  <ananta@chromium.org>

        Crash in the WebKit accessibility code while attempting to retrieve the title UI element.
        https://bugs.webkit.org/show_bug.cgi?id=75279

        Reviewed by Ryosuke Niwa.

        Fix a crash in the the WebKit accessibility code which occurs while retrieving
        the title UI clement. The fix is to NULL check the RenderObject::node return value.

        No test added as there is no reduction.

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::titleUIElement):

2011-12-27  Dominic Cooney  <dominicc@chromium.org>

        Remove initWebKitAnimationEvent method
        https://bugs.webkit.org/show_bug.cgi?id=71698

        Reviewed by Ojan Vafai.

        Now that WebKitAnimationEvent has a constructor, we don't need
        this
        method. <https://www.w3.org/Bugs/Public/show_bug.cgi?id=15338> is
        tracking the change to the CSS Animations spec.

        * dom/WebKitAnimationEvent.cpp:
        * dom/WebKitAnimationEvent.h:
        * dom/WebKitAnimationEvent.idl:

2011-12-27  Dominic Cooney   <dominicc@chromium.org>

        Remove initWebKitTransitionEvent method
        https://bugs.webkit.org/show_bug.cgi?id=71701

        Reviewed by Ojan Vafai.

        Now that WebKitTransitionEvent has a constructor, we don't need
        this
        method. <https://www.w3.org/Bugs/Public/show_bug.cgi?id=15339> is
        tracking the change to the CSS Transitions spec.

        * dom/WebKitTransitionEvent.cpp:
        * dom/WebKitTransitionEvent.h:
        * dom/WebKitTransitionEvent.idl:

2011-12-27  Tony Chang  <tony@chromium.org>

        Move HarfBuzz files into their own directory
        https://bugs.webkit.org/show_bug.cgi?id=72780

        Reviewed by Daniel Bates.

        FontCacheLinux.cpp got moved to platform/graphics/skia/FontCacheSkia.cpp since it wasn't HarfBuzz specific.

        I used HarfBuzz in filenames since that seems to be how the name is capitalized on the project home page.

        Fixed some style errors caught by the style checker.

        * PlatformBlackBerry.cmake:
        * WebCore.gyp/WebCore.gyp:
        * WebCore.gypi:
        * platform/graphics/chromium/FontPlatformData.h:
        * platform/graphics/harfbuzz/ComplexTextControllerHarfBuzz.cpp: Renamed from Source/WebCore/platform/graphics/chromium/ComplexTextControllerLinux.cpp.
        * platform/graphics/harfbuzz/ComplexTextControllerHarfBuzz.h: Renamed from Source/WebCore/platform/graphics/chromium/ComplexTextControllerLinux.h.
        * platform/graphics/harfbuzz/FontHarfBuzz.cpp: Renamed from Source/WebCore/platform/graphics/chromium/FontLinux.cpp.
        * platform/graphics/harfbuzz/FontPlatformDataHarfBuzz.cpp: Renamed from Source/WebCore/platform/graphics/chromium/FontPlatformDataLinux.cpp.
        * platform/graphics/harfbuzz/FontPlatformDataHarfBuzz.h: Renamed from Source/WebCore/platform/graphics/chromium/FontPlatformDataLinux.h.
        * platform/graphics/harfbuzz/HarfBuzzSkia.cpp: Renamed from Source/WebCore/platform/graphics/chromium/HarfbuzzSkia.cpp.
        * platform/graphics/harfbuzz/HarfBuzzSkia.h: Renamed from Source/WebCore/platform/graphics/chromium/HarfbuzzSkia.h.
        * platform/graphics/harfbuzz/SimpleFontDataSkia.cpp: Renamed from Source/WebCore/platform/graphics/chromium/SimpleFontDataLinux.cpp.
        * platform/graphics/skia/FontCacheSkia.cpp: Renamed from Source/WebCore/platform/graphics/chromium/FontCacheLinux.cpp.
        * platform/graphics/skia/GlyphPageTreeNodeSkia.cpp:

2011-12-27  Huang Dongsung  <luxtella@company100.net>

        [TexMap][QT] The fragment shader in OpenGL ES2 requires the default precision
        qualifier.
        https://bugs.webkit.org/show_bug.cgi?id=75168

        Reviewed by Noam Rosenthal.

        No new functionality so no new tests.

        * platform/graphics/opengl/TextureMapperGL.cpp:
        (WebCore::TextureMapperGL::initializeShaders):

2011-12-27  Ryosuke Niwa  <rniwa@webkit.org>

        [Chromium] uninitialized variable in fakeMouseMoveEventTimerFired
        https://bugs.webkit.org/show_bug.cgi?id=75263

        Reviewed by Tony Chang.

        The failure was caused by PlatformKeyboardEvent::getCurrentModifierState in PlatformKeyboardEventChromium.cpp
        not initializing arguments on Linux. Fixed the failure by always assigning false to the arguments.

        But we should really fix this function for Linux. Not recognizing any modifier isn't great.

        * platform/chromium/PlatformKeyboardEventChromium.cpp:
        (WebCore::PlatformKeyboardEvent::getCurrentModifierState):

2011-12-27  Kentaro Hara  <haraken@chromium.org>

        WIP: Enable the [Supplemental] IDL on Gtk
        https://bugs.webkit.org/show_bug.cgi?id=74972

        Reviewed by Adam Barth.

        This patch enables the [Supplemental] IDL on Gtk by changing the build
        flow of Gtk as follows.

        - Previous build flow:
            foreach $idl (all IDL files) {
                generate-bindings.pl depends on $idl;
                generate-bindings.pl reads $idl;
                generate-bindings.pl generates .h and .cpp files for $idl;
            }

        - New build flow (See the discussions in bug 72138 for more details):
            resolve-supplemental.pl depends on all IDL files;
            resolve-supplemental.pl reads all IDL files;
            resolve-supplemental.pl resolves the dependency of [Supplemental=XXXX];
            resolve-supplemental.pl outputs supplemental_dependency.tmp;
            foreach $idl (all IDL files) {
                generate-bindings.pl depends on $idl and supplemental_dependency.tmp;
                generate-bindings.pl reads $idl;
                generate-bindings.pl reads supplemental_dependency.tmp;
                generate-bindings.pl generates .h and .cpp files for $idl,
                    including all attributes in the IDL files that are implementing $idl;
            }

        Tests: Confirm that build succeeds.
               http/tests/websocket/tests/*

        * GNUmakefile.am: Described the above build flow.
        * GNUmakefile.list.am: Added a list of IDL files. Instead, removed a list of JS*.h and JS*.cpp
        that are generated by the IDL files.

2011-12-27  Tony Chang  <tony@chromium.org>

        [chromium] When building with clang, enable -Wglobal-constructors
        https://bugs.webkit.org/show_bug.cgi?id=74365

        Reviewed by Adam Barth.

        * WebCore.gyp/WebCore.gyp:

2011-12-27  Tony Chang  <tony@chromium.org>

        [chromium] really enable wpo for WebCore libs and for WTF
        https://bugs.webkit.org/show_bug.cgi?id=75264

        Reviewed by Adam Barth.

        * WebCore.gyp/WebCore.gyp: The variable was getting clobbered by the
        value set in common.gypi.  Use a target_defaults instead to set the
        variable.  I tested manually on my Windows machine and
        WholeProgramOptimization is getting set when buildtype is Official.

2011-12-27  Tony Chang  <tony@chromium.org>

        [chromium] remove references to files no longer in the tree
        https://bugs.webkit.org/show_bug.cgi?id=75262

        Reviewed by Adam Barth.

        * WebCore.gypi: platform/mac/PlatformMouseEventMac.mm and platform/mac/WheelEventMac.mm
        were removed in r103652.

2011-12-27  Vsevolod Vlasov  <vsevik@chromium.org>

        Unreviewed web inspector localizedStrings.js fix.

        * English.lproj/localizedStrings.js:

2011-12-27  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Introduce support for experimental settings.
        https://bugs.webkit.org/show_bug.cgi?id=75250

        Reviewed by Pavel Feldman.

        * English.lproj/localizedStrings.js:
        * inspector/front-end/ScriptsPanel.js:
        * inspector/front-end/Settings.js:
        (WebInspector.ExperimentsSettings):
        (WebInspector.ExperimentsSettings.prototype.get experiments):
        (WebInspector.ExperimentsSettings.prototype.get experimentsEnabled):
        (WebInspector.ExperimentsSettings.prototype._createExperiment):
        (WebInspector.ExperimentsSettings.prototype.set _cleanUpSetting.get var):
        (WebInspector.ExperimentsSettings.prototype.set _cleanUpSetting):
        (set WebInspector.Experiment):
        (WebInspector.Experiment.prototype.get name):
        (WebInspector.Experiment.prototype.get title):
        (WebInspector.Experiment.prototype.isEnabled):
        (WebInspector.Experiment.prototype.setEnabled):
        (set WebInspector):
        * inspector/front-end/SettingsScreen.js:
        (WebInspector.SettingsScreen):
        (WebInspector.SettingsScreen.prototype._createExperimentsWarningSubsection):
        (WebInspector.SettingsScreen.prototype._createExperimentCheckbox.listener):
        (WebInspector.SettingsScreen.prototype._createExperimentCheckbox):
        * inspector/front-end/helpScreen.css:
        (.settings-experiments-warning-subsection-warning):
        (.settings-experiments-warning-subsection-message):

2011-12-27  Alexander Pavlov  <apavlov@chromium.org>

        Web Inspector: exception when scrolling in JavaScriptOutline dialog with empty query
        https://bugs.webkit.org/show_bug.cgi?id=75255

        Reviewed by Pavel Feldman.

        * inspector/front-end/JavaScriptOutlineDialog.js:
        (WebInspector.JavaScriptOutlineDialog.prototype._onScroll):

2011-12-27  Pavel Feldman  <pfeldman@google.com>

        Web Inspector: add more annotations on SDK classes.
        https://bugs.webkit.org/show_bug.cgi?id=75247

        Reviewed by Yury Semikhatsky.

        * inspector/Inspector.json:
        * inspector/compile-front-end.sh:
        * inspector/front-end/ApplicationCacheModel.js:
        (WebInspector.ApplicationCacheDispatcher.prototype.networkStateUpdated):
        * inspector/front-end/BreakpointManager.js:
        (WebInspector.BreakpointManager.prototype._breakpoint):
        * inspector/front-end/Color.js:
        (WebInspector.Color.prototype.get shorthex):
        (WebInspector.Color.prototype.get hex):
        (WebInspector.Color.prototype.get rgb):
        (WebInspector.Color.prototype.get hsl):
        (WebInspector.Color.prototype.get nickname):
        (WebInspector.Color.prototype.hasShortHex):
        (WebInspector.Color.prototype._individualRGBValueToFloatValue):
        (WebInspector.Color.prototype._rgbStringsToHex):
        (WebInspector.Color.prototype._parse.this.nickname.set 2):
        (WebInspector.Color.prototype._parse.this.hsla.set 1):
        (WebInspector.Color.prototype._parse.this.rgba.set 0):
        (WebInspector.Color.prototype._parse.set WebInspector):
        (WebInspector.Color.prototype._parse):
        * inspector/front-end/CompilerSourceMapping.js:
        * inspector/front-end/ConsoleModel.js:
        * inspector/front-end/ContentProviders.js:
        (WebInspector.ScriptContentProvider):
        (WebInspector.ConcatenatedScriptsContentProvider):
        (WebInspector.CompilerSourceMappingContentProvider):
        (WebInspector.StaticContentProvider):
        * inspector/front-end/CookieParser.js:
        (WebInspector.CookieParser.KeyValue):
        (WebInspector.CookieParser.prototype.parseCookie):
        (WebInspector.CookieParser.prototype.parseSetCookie):
        (WebInspector.CookieParser.prototype._extractKeyValue):
        * inspector/front-end/DOMStorage.js:
        * inspector/front-end/Database.js:
        (WebInspector.DatabaseDispatcher.prototype.sqlTransactionSucceeded):
        (WebInspector.DatabaseDispatcher.prototype.sqlTransactionFailed):
        * inspector/front-end/DebuggerModel.js:
        (WebInspector.DebuggerModel.Location):
        (WebInspector.DebuggerModel.prototype._failedToParseScriptSource):
        * inspector/front-end/DebuggerPresentationModel.js:
        (WebInspector.DebuggerPresentationModelResourceBinding.prototype._setContentWithInitialContent):
        * inspector/front-end/ElementsTreeOutline.js:
        * inspector/front-end/HAREntry.js:
        * inspector/front-end/NetworkLog.js:
        (WebInspector.NetworkLog.prototype._mainFrameNavigated):
        * inspector/front-end/Placard.js:
        * inspector/front-end/RawSourceCode.js:
        (WebInspector.RawSourceCode.FormattedSourceMapping.prototype.uiLocationToRawLocation):
        (WebInspector.RawSourceCode.CompilerSourceMapping.prototype.uiLocationToRawLocation):
        * inspector/front-end/RemoteObject.js:
        (WebInspector.RemoteObject.fromPrimitiveValue):
        (WebInspector.RemoteObject.prototype.setPropertyValue.propertySetCallback):
        (WebInspector.RemoteObject.prototype.setPropertyValue):
        (WebInspector.LocalJSONObject.prototype.get hasChildren):
        (WebInspector.LocalJSONObject.prototype._children):
        * inspector/front-end/Resource.js:
        (WebInspector.Resource.restoreRevisions):
        (WebInspector.Resource.prototype.get queryParameters):
        (WebInspector.Resource.prototype.get formParameters):
        (WebInspector.Resource.prototype.isHttpFamily):
        * inspector/front-end/ResourceCategory.js:
        * inspector/front-end/ResourceUtils.js:
        * inspector/front-end/ScopeChainSidebarPane.js:
        (WebInspector.ScopeChainSidebarPane.prototype.update):
        * inspector/front-end/Script.js:
        (WebInspector.Script.prototype.isInlineScript):
        * inspector/front-end/ScriptFormatter.js:
        (WebInspector.ScriptFormatter.positionToLocation):
        * inspector/front-end/WelcomeView.js:
        (WebInspector.WelcomeView.prototype.addMessage):
        * inspector/front-end/externs.js:
        (Array.prototype.upperBound):

2011-12-27  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Scripts panel tabbed editor does not reopen closed tabs.
        https://bugs.webkit.org/show_bug.cgi?id=75245

        Reviewed by Pavel Feldman.

        * inspector/front-end/NetworkItemView.js:
        (WebInspector.NetworkItemView):
        * inspector/front-end/TabbedEditorContainer.js:
        (WebInspector.TabbedEditorContainer):
        (WebInspector.TabbedEditorContainer.prototype._tabClosed):
        * inspector/front-end/TabbedPane.js:
        (WebInspector.TabbedPane.prototype.closeTab):
        (WebInspector.TabbedPane.prototype.selectTab):

2011-12-27  Yury Semikhatsky  <yurys@chromium.org>

        Web Inspector: report per document JS event listener count
        https://bugs.webkit.org/show_bug.cgi?id=74298

        This patch adds JS event listener count to the memory agent
        report.

        Reviewed by Pavel Feldman.

        Test: inspector/dom-statistics.html

        * inspector/Inspector.json:
        * inspector/InspectorMemoryAgent.cpp:

2011-12-27  Alexander Pavlov  <apavlov@chromium.org>

        Web Inspector: [REGRESSION] Go to Function dialog always has a minimal height
        https://bugs.webkit.org/show_bug.cgi?id=75254

        Reviewed by Yury Semikhatsky.

        * inspector/front-end/scriptsPanel.css:
        (.script-view):

2011-12-26  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Create tabbed editor for scripts panel.
        https://bugs.webkit.org/show_bug.cgi?id=75230

        Reviewed by Pavel Feldman.

        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * inspector/compile-front-end.sh:
        * inspector/front-end/ScriptsNavigator.js:
        (WebInspector.ScriptsNavigator.prototype.replaceUISourceCodes.get if):
        (WebInspector.ScriptsNavigator.prototype.replaceUISourceCodes):
        (WebInspector.NavigatorScriptTreeElement.prototype.ondblclick):
        (WebInspector.NavigatorScriptTreeElement.prototype.onenter):
        * inspector/front-end/ScriptsPanel.js:
        * inspector/front-end/TabbedEditorContainer.js: Added.
        * inspector/front-end/TabbedPane.js:
        (WebInspector.TabbedPane.prototype.get visibleView):
        (WebInspector.TabbedPane.prototype.get selectedTabId):
        (WebInspector.TabbedPane.prototype.closeAllTabs):
        (WebInspector.TabbedPane.prototype.changeTabTitle):
        (WebInspector.TabbedPane.prototype.changeTabView):
        (WebInspector.TabbedPaneTab):
        (WebInspector.TabbedPaneTab.prototype.get title):
        (WebInspector.TabbedPaneTab.prototype.set title):
        (WebInspector.TabbedPaneTab.prototype.get view):
        (WebInspector.TabbedPaneTab.prototype.set view):
        (WebInspector.TabbedPaneTab.prototype._createTabElement):
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/inspector.html:
        * inspector/front-end/scriptsPanel.css:
        (.scripts-views-container):
        (.script-view):
        (#scripts-editor-container-tabbed-pane .tabbed-pane-header):
        (#scripts-editor-container-tabbed-pane .tabbed-pane-header-contents):
        (#scripts-editor-container-tabbed-pane .tabbed-pane-content):

2011-12-27  Pavel Feldman  <pfeldman@google.com>

        Not reviewed: Rolling out r103703 for breaking Canvas2DLayerChromiumTest.testFullLifecycle.

        * platform/graphics/chromium/Canvas2DLayerChromium.cpp:
        (WebCore::Canvas2DLayerChromium::Canvas2DLayerChromium):
        (WebCore::Canvas2DLayerChromium::~Canvas2DLayerChromium):
        (WebCore::Canvas2DLayerChromium::paintContentsIfDirty):
        (WebCore::Canvas2DLayerChromium::setTextureManager):
        (WebCore::Canvas2DLayerChromium::updateCompositorResources):
        (WebCore::Canvas2DLayerChromium::pushPropertiesTo):
        (WebCore::Canvas2DLayerChromium::unreserveContentsTexture):
        (WebCore::Canvas2DLayerChromium::cleanupResources):
        * platform/graphics/chromium/Canvas2DLayerChromium.h:

2011-12-22  Vangelis Kokkevis  <vangelis@chromium.org>

        [chromium] Bypass the shadow texture copy for accelerated
        canvas when running the compositor in single threaded mode.
        https://bugs.webkit.org/show_bug.cgi?id=75146

        The texture copy fails on Windows as glCopyTexImage2D() doesn't
        support BGRA source textures. 
        This change also modified Canvas2DLayerChromium::updateCompositorResources
        to call glCopyTexSubImage2D() instead of glCopyTexImage2D() so that
        the copy can work with texture allocated via the glTexStorage2D
        extension.

        Reviewed by James Robinson.


        * platform/graphics/chromium/Canvas2DLayerChromium.cpp:
        (WebCore::Canvas2DLayerChromium::Canvas2DLayerChromium):
        (WebCore::Canvas2DLayerChromium::~Canvas2DLayerChromium):
        (WebCore::Canvas2DLayerChromium::paintContentsIfDirty):
        (WebCore::Canvas2DLayerChromium::setTextureManager):
        (WebCore::Canvas2DLayerChromium::updateCompositorResources):
        (WebCore::Canvas2DLayerChromium::pushPropertiesTo):
        (WebCore::Canvas2DLayerChromium::unreserveContentsTexture):
        (WebCore::Canvas2DLayerChromium::cleanupResources):
        * platform/graphics/chromium/Canvas2DLayerChromium.h:

2011-12-26  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        [EFL][WK2] Implement context menu for EFL port.
        https://bugs.webkit.org/show_bug.cgi?id=74995

        Reviewed by Anders Carlsson.

        Implement missing ContextMenuEfl class in order to support WK2's context menu.
        Because WK2's context menu still needs WebCore's context menu implementation.
        And of course, this patch also can be used for WK1 without CROSS_PLATFORM_CONTEXT_MENU
        option.

        * platform/ContextMenu.h:
        * platform/ContextMenuItem.h:
        * platform/PlatformMenuDescription.h:
        * platform/efl/ContextMenuEfl.cpp:
        (WebCore::ContextMenu::~ContextMenu):
        (WebCore::ContextMenu::appendItem):
        (WebCore::ContextMenu::insertItem):
        (WebCore::ContextMenu::itemCount):
        (WebCore::ContextMenu::setPlatformDescription):
        (WebCore::ContextMenu::platformDescription):
        (WebCore::ContextMenu::releasePlatformDescription):
        (WebCore::platformMenuDescription):
        (WebCore::contextMenuItemVector):
        * platform/efl/ContextMenuItemEfl.cpp:
        (WebCore::ContextMenuItem::ContextMenuItem):
        (WebCore::ContextMenuItem::~ContextMenuItem):
        (WebCore::ContextMenuItem::setType):
        (WebCore::ContextMenuItem::type):
        (WebCore::ContextMenuItem::setAction):
        (WebCore::ContextMenuItem::action):
        (WebCore::ContextMenuItem::setTitle):
        (WebCore::ContextMenuItem::title):
        (WebCore::ContextMenuItem::setChecked):
        (WebCore::ContextMenuItem::checked):
        (WebCore::ContextMenuItem::setEnabled):
        (WebCore::ContextMenuItem::enabled):

2011-12-26  Hajime Morrita  <morrita@chromium.org>

        [Refactoring] Node::setTreeScopeRecursively() doesn't need includeRoot parameter
        https://bugs.webkit.org/show_bug.cgi?id=75240

        Reviewed by Anders Carlsson.

        No new tests. No behavior change.

        * dom/Node.cpp:
        (WebCore::Node::setTreeScopeRecursively):
        * dom/Node.h:

2011-12-26  Darin Adler  <darin@apple.com>

        Use OwnPtr and OwnArrayPtr in a couple more places
        https://bugs.webkit.org/show_bug.cgi?id=75211

        Reviewed by Andreas Kling.

        I had a patch with some changes from a while back from going through all sorts of
        classes and changing code to use adoptPtr. Most were landed long ago, these are the
        ones that still apply.

        There are six pieces here that could each be landed separately.
        The big one is CSSParser.

        * css/CSSGrammar.y: Update for members and functions that now
        return PassOwnPtr instead of raw pointers.
        * css/CSSParser.cpp:
        (WebCore::CSSParser::CSSParser): Remove explicit construction
        for m_valueList and m_data since OwnPtr and OwnArrayPtr initialize
        to zero without it.
        (WebCore::CSSParser::~CSSParser): Removed delete m_valueList and
        fastFree(m_data) since OwnPtr and OwnArrayPtr handle that.
        (WebCore::CSSParser::setupParser): Use adoptArrayPtr and new for
        the character array instead of fastFree/fastMalloc. Added get
        function calls as needed.
        (WebCore::CSSParser::parseValue): Added get function calls as needed.
        (WebCore::CSSParser::parseContent): Ditto.
        (WebCore::CSSParser::parseFillProperty): Ditto.
        (WebCore::CSSParser::parseTransformOriginShorthand): Ditto.
        (WebCore::CSSParser::parseBorderImage): Ditto.
        (WebCore::CSSParser::parseTransformOrigin): Ditto.
        (WebCore::CSSParser::parsePerspectiveOrigin): Ditto.
        (WebCore::CSSParser::sinkFloatingValueList): Changed to return PassOwnPtr.
        The adoptPtr call is here.
        (WebCore::CSSParser::sinkFloatingFunction): Ditto.
        (WebCore::CSSParser::markSelectorListStart): Added get function calls as needed.
        (WebCore::CSSParser::markSelectorListEnd): Ditto.
        (WebCore::CSSParser::markRuleBodyStart): Ditto.
        (WebCore::CSSParser::markRuleBodyEnd): Ditto.
        (WebCore::CSSParser::markPropertyStart): Ditto.
        (WebCore::CSSParser::markPropertyEnd): Ditto.
        * css/CSSParser.h: Moved conditional includes to their own paragraph.
        Made sinkFloatingValueList and sinkFloatingFunction return PassOwnPtr.
        Made m_valueList an OwnPtr and m_data an OwnArrayPtr.
        * css/SVGCSSParser.cpp:
        (WebCore::CSSParser::parseSVGValue): Added a call to the get function.

        * html/PluginDocument.h: Made isPluginDocument private. Also marked all the
        functions that are overriding here as OVERRIDE since I was touching the header.

        * html/parser/HTMLToken.h:
        (WebCore::HTMLTokenTypes::DoctypeData::DoctypeData): Removed an unneeded line
        explicitly initializing the base class.

        * page/animation/AnimationBase.cpp:
        (WebCore::RefCountedPropertyWrapper::RefCountedPropertyWrapper): Fixed indent.

        * rendering/style/RenderStyle.h: Moved conditional includes to their own paragraph.

        * xml/parser/MarkupTokenBase.h:
        (WebCore::MarkupTokenBase::beginDOCTYPE): Removed unneeded parentheses.

2011-12-26  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Extract FileEditor from ScriptsPanel.
        https://bugs.webkit.org/show_bug.cgi?id=75229

        Reviewed by Pavel Feldman.

        * inspector/front-end/JavaScriptSourceFrame.js:
        (WebInspector.JavaScriptSourceFrame.prototype.suggestedFileName):
        * inspector/front-end/ScriptsNavigator.js:
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype._reset):
        (WebInspector.ScriptsPanel.prototype.get visibleView):
        (WebInspector.ScriptsPanel.prototype._updateScriptViewStatusBarItems):
        (WebInspector.ScriptsPanel.prototype._uiSourceCodeReplaced.get if):
        (WebInspector.ScriptsPanel.EditorContainer):
        (WebInspector.ScriptsPanel.EditorContainer.prototype.get currentSourceFrame):
        (WebInspector.ScriptsPanel.EditorContainer.prototype.show):
        (WebInspector.ScriptsPanel.EditorContainer.prototype.showSourceFrame):
        (WebInspector.ScriptsPanel.EditorContainer.prototype.isSourceFrameOpen):
        (WebInspector.ScriptsPanel.EditorContainer.prototype.replaceSourceFrames):
        (WebInspector.ScriptsPanel.EditorContainer.prototype.setSourceFrameIsDirty):
        (WebInspector.ScriptsPanel.EditorContainer.prototype.reset):
        (WebInspector.ScriptsPanel.SingleFileEditorContainer):
        (WebInspector.ScriptsPanel.SingleFileEditorContainer.prototype.get currentSourceFrame):
        (WebInspector.ScriptsPanel.SingleFileEditorContainer.prototype.show):
        (WebInspector.ScriptsPanel.SingleFileEditorContainer.prototype.showSourceFrame):
        (WebInspector.ScriptsPanel.SingleFileEditorContainer.prototype.isSourceFrameOpen):
        (WebInspector.ScriptsPanel.SingleFileEditorContainer.prototype.replaceSourceFrames):
        (WebInspector.ScriptsPanel.SingleFileEditorContainer.prototype.setSourceFrameIsDirty):
        (WebInspector.ScriptsPanel.SingleFileEditorContainer.prototype.reset):
        * inspector/front-end/UISourceCode.js:
        (WebInspector.UISourceCode.prototype.get domain):
        (WebInspector.UISourceCode.prototype.get folderName):
        (WebInspector.UISourceCode.prototype.get fileName):
        (WebInspector.UISourceCode.prototype.get displayName):
        (WebInspector.UISourceCode.prototype._parseURL):

2011-12-26  Darin Adler  <darin@apple.com>

        Fix mutation observer build after didMoveToNewDocument change
        https://bugs.webkit.org/show_bug.cgi?id=75224

        Reviewed by Hajime Morita.

        * dom/Node.cpp:
        (WebCore::willCallDidMoveToNewDocument): Added.
        (WebCore::didMoveToNewDocumentWasCalled): Added.
        (WebCore::Node::setDocument): Call new debugging function.
        (WebCore::Node::didMoveToNewDocument): Ditto. Also use ASSERT_UNUSED
        unconditionally rather than UNUSED_PARAM inside and #if. Also added
        a new assertion that checks that hte old document was passed through
        properly.

2011-12-26  Alexander Pavlov  <apavlov@chromium.org>

        Web Inspector: [Scripts] Implement iterative match highlighting in the "Go to Function" dialog item list
        https://bugs.webkit.org/show_bug.cgi?id=75226

        Reviewed by Pavel Feldman.

        * inspector/front-end/JavaScriptOutlineDialog.js:
        (WebInspector.JavaScriptOutlineDialog):
        (WebInspector.JavaScriptOutlineDialog.prototype._createSearchRegExp):
        (WebInspector.JavaScriptOutlineDialog.prototype._filterFunctions):
        (WebInspector.JavaScriptOutlineDialog.prototype._onKeyDown.previousItem):
        (WebInspector.JavaScriptOutlineDialog.prototype._onKeyDown.nextItem):
        (WebInspector.JavaScriptOutlineDialog.prototype._onKeyDown):
        (WebInspector.JavaScriptOutlineDialog.prototype._updateSelection):
        (WebInspector.JavaScriptOutlineDialog.prototype._onScroll):
        (WebInspector.JavaScriptOutlineDialog.MatchHighlighter):
        (WebInspector.JavaScriptOutlineDialog.MatchHighlighter.prototype.highlightViewportItems):
        (WebInspector.JavaScriptOutlineDialog.MatchHighlighter.prototype.clearHighlight):
        (WebInspector.JavaScriptOutlineDialog.MatchHighlighter.prototype._highlightItem):
        (WebInspector.JavaScriptOutlineDialog.MatchHighlighter.prototype._viewportRowRange):
        * inspector/front-end/javaScriptOutlineDialog.css:
        (.js-outline-dialog > .container > div.item > span.highlight):

2011-12-26  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Extract FileSelector from ScriptsPanel.
        https://bugs.webkit.org/show_bug.cgi?id=75173

        Reviewed by Pavel Feldman.

        * inspector/front-end/ScriptsNavigator.js:
        (WebInspector.ScriptsNavigator):
        (WebInspector.ScriptsNavigator.prototype.get defaultFocusedElement):
        (WebInspector.ScriptsNavigator.prototype.show):
        (WebInspector.ScriptsNavigator.prototype.setScriptSourceIsDirty):
        (WebInspector.ScriptsNavigator.prototype.replaceUISourceCodes):
        (WebInspector.ScriptsNavigator.prototype.scriptSelected):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype.get defaultFocusedElement):
        (WebInspector.ScriptsPanel.prototype._uiSourceCodeAdded.get if):
        (WebInspector.ScriptsPanel.prototype.setScriptSourceIsBeingEdited):
        (WebInspector.ScriptsPanel.prototype._reset):
        (WebInspector.ScriptsPanel.prototype._showSourceLine):
        (WebInspector.ScriptsPanel.prototype._showAndRevealInFileSelector):
        (WebInspector.ScriptsPanel.prototype._createSourceFrame):
        (WebInspector.ScriptsPanel.prototype._updateExecutionLine):
        (WebInspector.ScriptsPanel.prototype._scriptSelected):
        (WebInspector.ScriptsPanel.FileSelector):
        (WebInspector.ScriptsPanel.FileSelector.prototype.get defaultFocusedElement):
        (WebInspector.ScriptsPanel.FileSelector.prototype.show):
        (WebInspector.ScriptsPanel.FileSelector.prototype.addUISourceCode):
        (WebInspector.ScriptsPanel.FileSelector.prototype.isScriptSourceAdded):
        (WebInspector.ScriptsPanel.FileSelector.prototype.revealUISourceCode):
        (WebInspector.ScriptsPanel.FileSelector.prototype.setScriptSourceIsDirty):
        (WebInspector.ScriptsPanel.FileSelector.prototype.replaceUISourceCodes):
        (WebInspector.ScriptsPanel.ComboBoxFileSelector):
        (WebInspector.ScriptsPanel.ComboBoxFileSelector.prototype.get defaultFocusedElement):
        (WebInspector.ScriptsPanel.ComboBoxFileSelector.prototype.show):
        (WebInspector.ScriptsPanel.ComboBoxFileSelector.prototype.showDebugSidebarResizeWidget):
        (WebInspector.ScriptsPanel.ComboBoxFileSelector.prototype.addUISourceCode):
        (WebInspector.ScriptsPanel.ComboBoxFileSelector.prototype.isScriptSourceAdded):
        (WebInspector.ScriptsPanel.ComboBoxFileSelector.prototype.revealUISourceCode):
        (WebInspector.ScriptsPanel.ComboBoxFileSelector.prototype._innerRevealUISourceCode):
        (WebInspector.ScriptsPanel.ComboBoxFileSelector.prototype._addToHistory):
        (WebInspector.ScriptsPanel.ComboBoxFileSelector.prototype.replaceUISourceCodes):
        (WebInspector.ScriptsPanel.ComboBoxFileSelector.prototype._showScriptFoldersSettingChanged):
        (WebInspector.ScriptsPanel.ComboBoxFileSelector.prototype._reset):
        (WebInspector.ScriptsPanel.ComboBoxFileSelector.prototype.setScriptSourceIsDirty):
        (WebInspector.ScriptsPanel.ComboBoxFileSelector.prototype._createEditorToolbar):
        (WebInspector.ScriptsPanel.ComboBoxFileSelector.prototype._addOptionToFilesSelect.get var):
        (WebInspector.ScriptsPanel.ComboBoxFileSelector.prototype._addOptionToFilesSelect.insertOrdered.optionCompare):
        (WebInspector.ScriptsPanel.ComboBoxFileSelector.prototype._addOptionToFilesSelect.insertOrdered):
        (WebInspector.ScriptsPanel.ComboBoxFileSelector.prototype._addOptionToFilesSelect):
        (WebInspector.ScriptsPanel.ComboBoxFileSelector.prototype._resetFilesSelect):
        (WebInspector.ScriptsPanel.ComboBoxFileSelector.prototype._updateBackAndForwardButtons):
        (WebInspector.ScriptsPanel.ComboBoxFileSelector.prototype._goBack):
        (WebInspector.ScriptsPanel.ComboBoxFileSelector.prototype._goForward):
        (WebInspector.ScriptsPanel.ComboBoxFileSelector.prototype._filesSelectChanged):
        * inspector/front-end/inspector.html:
        * inspector/front-end/utilities.js:
        ():

2011-12-26  Alexander Pavlov  <apavlov@chromium.org>

        Web Inspector: Implement "Go to Function" dialog for JavaScript
        https://bugs.webkit.org/show_bug.cgi?id=75092

        Reviewed by Pavel Feldman.

        * English.lproj/localizedStrings.js:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * inspector/compile-front-end.sh:
        * inspector/front-end/JavaScriptOutlineDialog.js: Added.
        (WebInspector.JavaScriptOutlineDialog.onMouseDown):
        (WebInspector.JavaScriptOutlineDialog):
        (WebInspector.JavaScriptOutlineDialog.didAddChunk):
        (WebInspector.JavaScriptOutlineDialog.install):
        (WebInspector.JavaScriptOutlineDialog._show):
        (WebInspector.JavaScriptOutlineDialog.createShortcut):
        (WebInspector.JavaScriptOutlineDialog.prototype._resizeWindow):
        (WebInspector.JavaScriptOutlineDialog.prototype._appendItemElements):
        (WebInspector.JavaScriptOutlineDialog.prototype._createSearchRegExp):
        (WebInspector.JavaScriptOutlineDialog.prototype._filterFunctions):
        (WebInspector.JavaScriptOutlineDialog.prototype._selectFirstItem):
        (WebInspector.JavaScriptOutlineDialog.prototype._hide):
        (WebInspector.JavaScriptOutlineDialog.prototype._onBlur):
        (WebInspector.JavaScriptOutlineDialog.prototype._onKeyDown.previousItem):
        (WebInspector.JavaScriptOutlineDialog.prototype._onKeyDown.nextItem):
        (WebInspector.JavaScriptOutlineDialog.prototype._onKeyDown):
        (WebInspector.JavaScriptOutlineDialog.prototype._scheduleFilter):
        (WebInspector.JavaScriptOutlineDialog.prototype._updateSelection):
        (WebInspector.JavaScriptOutlineDialog.prototype._onClick):
        (WebInspector.JavaScriptOutlineDialog.prototype._onMouseMove):
        (WebInspector.JavaScriptOutlineDialog.prototype._highlightFunctionLine):
        * inspector/front-end/JavaScriptSourceFrame.js:
        (WebInspector.JavaScriptSourceFrame.prototype.get uiSourceCode):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype._didBuildOutlineChunk):
        (WebInspector.ScriptsPanel.prototype._reset):
        (WebInspector.ScriptsPanel.prototype.requestVisibleScriptOutline):
        (WebInspector.ScriptsPanel.prototype._createEditorToolbar):
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/inspector.html:
        * inspector/front-end/javaScriptOutlineDialog.css: Added.
        (.js-outline-dialog):
        (.js-outline-dialog > input):
        (.js-outline-dialog > div.progress):
        (.js-outline-dialog > div.container):
        (.js-outline-dialog > .container > div.item):
        (.js-outline-dialog > .container > div.item.selected):

2011-12-26  Pavel Feldman  <pfeldman@google.com>

        Web Inspector: make SDK compilation component self-contained.
        https://bugs.webkit.org/show_bug.cgi?id=75172

        Reviewed by Yury Semikhatsky.

        * inspector/compile-front-end.sh:
        * inspector/front-end/ConsoleMessage.js:
        (WebInspector.ConsoleMessageImpl):
        (WebInspector.ConsoleMessageImpl.prototype.get stackTrace):
        (WebInspector.ConsoleMessageImpl.prototype.clone):
        * inspector/front-end/ConsoleModel.js:
        (WebInspector.ConsoleModel.prototype._messageRepeatCountUpdated):
        (WebInspector.ConsoleMessage):
        (WebInspector.ConsoleMessage.prototype.isErrorOrWarning):
        (WebInspector.ConsoleMessage.prototype.updateRepeatCount):
        (WebInspector.ConsoleMessage.prototype.clone):
        * inspector/front-end/DebuggerPresentationModel.js:
        (WebInspector.DebuggerPresentationModel.prototype._consoleMessageAdded):
        * inspector/front-end/ResourceUtils.js:
        * inspector/front-end/UIUtils.js:
        (WebInspector.resetToolbarColors):
        (WebInspector.populateHrefContextMenu):

2011-12-26  Hajime Morrita  <morrita@google.com>

        Unreviewed bad merge fix.

        * svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::didMoveToNewDocument):

2011-12-25  Hajime Morrita  <morrita@chromium.org>

        https://bugs.webkit.org/show_bug.cgi?id=74067
        Refactoring: Unitfy willMoveToNewDocument() and didMoveToNewDocument()

        Reviewed by Darin Adler.

        No new tests. No behavior change.

        This change combines two method Node::willMoveToNewOwnerDocument() and Node::didMoveToNewOwnerDocument()
        into Node::didMoveToNewDocument(Document* oldDocument).

        The intention of this change is:
        - Making upcoming refactoring (Bug 59816) possible. The refactoring will turn Node::m_document into
          Node::m_treeScope, and we will no longer have Node::setDocument() where we can invoke both
          willMoveToNewDocument() and didMoveToNewDocument() at once.
        - Killing one extra virtual method call.
        - Making the concept of "move" clearer by keeping such an operation into the single method.

        * dom/Node.cpp:
        (WebCore::setWillMoveToNewDocumentWasCalled):
        (WebCore::setDidMoveToNewDocumentWasCalled):
        (WebCore::Node::setDocument):
        (WebCore::Node::didMoveToNewDocument):
        * dom/Node.h:
        * dom/StyledElement.cpp:
        (WebCore::StyledElement::attributeChanged):
        * html/FormAssociatedElement.cpp:
        (WebCore::FormAssociatedElement::didMoveToNewDocument):
        * html/FormAssociatedElement.h:
        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLFormControlElement::didMoveToNewDocument):
        (WebCore::HTMLFormControlElementWithState::didMoveToNewDocument):
        * html/HTMLFormControlElement.h:
        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::didMoveToNewDocument):
        * html/HTMLFormElement.h:
        * html/HTMLImageElement.cpp:
        (WebCore::HTMLImageElement::didMoveToNewDocument):
        * html/HTMLImageElement.h:
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::didMoveToNewDocument):
        * html/HTMLInputElement.h:
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::didMoveToNewDocument):
        * html/HTMLMediaElement.h:
        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::didMoveToNewDocument):
        * html/HTMLObjectElement.h:
        * html/HTMLPlugInImageElement.cpp:
        (WebCore::HTMLPlugInImageElement::didMoveToNewDocument):
        * html/HTMLPlugInImageElement.h:
        * html/HTMLVideoElement.cpp:
        (WebCore::HTMLVideoElement::didMoveToNewDocument):
        * html/HTMLVideoElement.h:
        * html/ImageDocument.cpp:
        (WebCore::ImageDocumentElement::didMoveToNewDocument):
        * html/ImageInputType.cpp:
        (WebCore::ImageInputType::willMoveToNewDocument):
        * loader/ImageLoader.cpp:
        (WebCore::ImageLoader::elementDidMoveToNewDocument):
        * loader/ImageLoader.h:
        * svg/SVGImageElement.cpp:
        (WebCore::SVGImageElement::didMoveToNewDocument):
        * svg/SVGImageElement.h:
        * svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::didMoveToNewDocument):
        * svg/SVGSVGElement.h:

2011-12-25  Kentaro Hara  <haraken@chromium.org>

        REGRESSION(r102987): Fix the filename prefix of the generated empty .h
        and .cpp files for [Supplemental] IDLs
        https://bugs.webkit.org/show_bug.cgi?id=75082

        Reviewed by Darin Adler.

        In bug 74481, we changed generate-bindings.pl so that it generates empty .h
        and .cpp files for the [Supplemental] IDLs. However, the filename prefixes of
        those .h and .cpp files are wrong. This patch fixes the prefixes as follows:

            generator=JS  => JS*.h, JS*.cpp
            generator=V8  => V8*.h, V8*.cpp
            generator=ObjC  => DOM*.h, DOM*.cpp
            generator=GObject  => WebKitDOM*.h, WebKitDOM*.cpp
            generator=CPP  => WebDOM*.h, WebDOM*.cpp

        No new tests. No change in behavior.
        I confirmed that the names of generated .h and .cpp files are correct.

        * bindings/scripts/CodeGenerator.pm:
        (FileNamePrefix): Returns the prefix of file names.
        * bindings/scripts/CodeGeneratorCPP.pm:
        (GenerateInterface): Uses CodeGenerator::FileNamePrefix.
        * bindings/scripts/CodeGeneratorGObject.pm:
        (GenerateInterface): Ditto.
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateInterface): Ditto.
        * bindings/scripts/CodeGeneratorObjC.pm:
        (GenerateInterface): Ditto.
        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateInterface): Ditto.
        * bindings/scripts/generate-bindings.pl:
        (generateEmptyHeaderAndCpp): Ditto.

2011-12-25  Dan Bernstein  <mitz@apple.com>

        WebCore changes for: Find indicators overlap when a match spans multiple text boxes
        https://bugs.webkit.org/show_bug.cgi?id=75220

        Reviewed by Darin Adler.

        * WebCore.exp.in: Exported new unionRect(const Vector<FloatRect>&) and existing
        FloatRect::intersects().
        * platform/graphics/FloatRect.cpp:
        (WebCore::unionRect): Added.
        * platform/graphics/FloatRect.h:

2011-12-25  Darin Adler  <darin@apple.com>

        Use OwnPtr for CSSFontFace::m_sources
        https://bugs.webkit.org/show_bug.cgi?id=75219

        Reviewed by Dan Bernstein.

        * css/CSSFontFace.cpp:
        (WebCore::CSSFontFace::isLoaded): Use the same size_t idiom here as in the rest
        of the functions.
        (WebCore::CSSFontFace::isValid): Ditto. Also removed unneeded empty special casing.
        (WebCore::CSSFontFace::addSource): Changed to take a PassOwnPtr. Reordered so the
        PassOwnPtr zeroing does not cause trouble.
        (WebCore::CSSFontFace::getFontData): Added call to get.
        (WebCore::CSSFontFace::hasSVGFontFaceSource): Use the same size_t idiom here as in
        the rest of the functions.

        * css/CSSFontFace.h: Use PassOwnPtr for addSource argument, and Vector<OwnPtr> for
        the m_sources vector.

        * css/CSSFontSelector.cpp:
        (WebCore::CSSFontSelector::addFontFaceRule): Use OwnPtr and PassOwnPtr for font face
        sources that are passed to addSource.

        * css/CSSSegmentedFontFace.cpp: Added a now-needed include.

2011-12-24  Jarred Nicholls  <jarred@sencha.com>

        Allow XMLHttpRequest responseType to be set at any state up to and including HEADERS_RECEIVED
        https://bugs.webkit.org/show_bug.cgi?id=75190

        XMLHttpRequest.responseType should be modifiable at any state up to and including the
        HEADERS_RECEIVED state. Therefore, subsequent calls to open() should not reset responseType
        to its default value, and calls to open() must follow the same spec mandate set forth in
        setResponseType() for synchronous HTTP(S) requests made from the window context.

        Reviewed by Alexey Proskuryakov.

        Tests: fast/xmlhttprequest/xmlhttprequest-responsetype-before-open-sync-request.html
               fast/xmlhttprequest/xmlhttprequest-responsetype-before-open.html
               fast/xmlhttprequest/xmlhttprequest-responsetype-set-at-headers-received.html

        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::setResponseType):
        Prevent setting the value only when in LOADING and DONE states. No longer check if
        m_loader is present, which is instantiated on a call to send(), because responseType
        can be safely changed after a request is sent.
        (WebCore::XMLHttpRequest::open):
        Do not reset m_responseTypeCode to the default value, and prevent calls to open()
        for synchronous HTTP(S) requests made from the window context when m_responseTypeCode
        is not the default value.

2011-12-25  Sam Weinig  <sam@webkit.org>

        Fix tests failing as a result of r103643
        https://bugs.webkit.org/show_bug.cgi?id=75209

        Reviewed by Dan Bernstein.

        Switch accidental switch of default scroll granularity from 
        ScrollByPageWheelEvent back to ScrollByPixelWheelEvent.

        * platform/mac/PlatformEventFactory.mm:
        (WebCore::PlatformWheelEventBuilder::PlatformWheelEventBuilder):

2011-12-25  Darin Adler  <darin@apple.com>

        Change CSS canvas code that does HashMap get/set to use the more efficient add idiom
        https://bugs.webkit.org/show_bug.cgi?id=75204

        Reviewed by Dan Bernstein.

        * dom/Document.cpp:
        (WebCore::Document::getCSSCanvasContext): Change local variable name of element to
        element; it's not the function result, so not good to name it result.
        (WebCore::Document::getCSSCanvasElement): Use add instead of get/set so we only do
        one hash table lookup.

2011-12-24  Andreas Kling  <awesomekling@apple.com>

        CSSElementStyleDeclarations should never move between elements.
        <http://webkit.org/b/75198>

        Reviewed by Anders Carlsson.

        Have the CSSElementStyleDeclaration subclasses take a StyledElement* in
        the constructor and replace setElement(StyledElement*) by clearElement().

        No behavior change, just enforcing the current behavior at compile-time.

        * css/CSSElementStyleDeclaration.h:
        (WebCore::CSSElementStyleDeclaration::clearElement):
        (WebCore::CSSElementStyleDeclaration::CSSElementStyleDeclaration):
        * css/CSSInlineStyleDeclaration.h:
        (WebCore::CSSInlineStyleDeclaration::create):
        (WebCore::CSSInlineStyleDeclaration::CSSInlineStyleDeclaration):
        * dom/StyledElement.cpp:
        (WebCore::StyledElement::createInlineStyleDecl):
        (WebCore::StyledElement::destroyInlineStyleDecl):
        * svg/SVGFontFaceElement.cpp:
        (WebCore::FontFaceStyleDeclaration::FontFaceStyleDeclaration):

2011-12-23  Andreas Kling  <awesomekling@apple.com>

        Decouple CSSMappedAttributeDeclaration from element completely.
        <http://webkit.org/b/75187>

        Reviewed by Darin Adler.

        Let CSSMappedAttributeDeclaration inherit from CSSMutableDeclaration instead
        of CSSElementStyleDeclaration. Add methods to CSSMappedAttributeDeclaration
        for setting properties that also take a StyledElement* and use that mechanism
        instead of temporarily associating an element with the declaration.

        This reduces the size of mapped attributes by 4/8 bytes, but more importantly
        opens a number of ways to simplify style declarations in future patches.

        * css/CSSMutableStyleDeclaration.h:
        * dom/CSSMappedAttributeDeclaration.cpp:
        (WebCore::CSSMappedAttributeDeclaration::setNeedsStyleRecalc):
        (WebCore::CSSMappedAttributeDeclaration::setMappedImageProperty):
        (WebCore::CSSMappedAttributeDeclaration::setMappedLengthProperty):
        (WebCore::CSSMappedAttributeDeclaration::setMappedProperty):
        (WebCore::CSSMappedAttributeDeclaration::removeMappedProperty):
        * dom/CSSMappedAttributeDeclaration.h:
        (WebCore::CSSMappedAttributeDeclaration::CSSMappedAttributeDeclaration):

            Add/move methods to CSSMappedAttributeDeclaration for setting/removing
            properties that also take a StyledElement*. That element is used for
            scheduling style recalc and passing the right document to CSSParser.

        * css/CSSParser.h:
        * css/CSSParser.cpp:
        (WebCore::parseColorValue):
        (WebCore::parseSimpleLengthValue):
        (WebCore::CSSParser::parseValue):
        (WebCore::CSSParser::parseMappedAttributeValue):

            Added a parsedMappedAttributeValue() alternative to parseValue() that
            takes a StyledElement*.

        * dom/StyledElement.h:
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::setContentEditable):

            Add (and use) a StyledElement::removeCSSProperty() complement to the
            addCSS*() functions.

        * dom/StyledElement.cpp:
        (WebCore::StyledElement::attributeChanged):
        (WebCore::StyledElement::removeCSSProperty):
        (WebCore::StyledElement::addCSSProperty):
        (WebCore::StyledElement::addCSSImageProperty):
        (WebCore::StyledElement::addCSSLength):
        (WebCore::StyledElement::addCSSColor):
        (WebCore::StyledElement::createMappedDecl):
        * html/HTMLTableElement.cpp:
        (WebCore::HTMLTableElement::additionalAttributeStyleDecls):
        (WebCore::HTMLTableElement::addSharedCellBordersDecl):
        (WebCore::HTMLTableElement::addSharedCellPaddingDecl):
        (WebCore::HTMLTableElement::addSharedGroupDecls):

            Use the setMapped*Property() functions to plumb the element through.

        * css/CSSElementStyleDeclaration.h:

            Update comment about CSSElementStyleDeclaration's subclasses.

2011-12-24  Jarred Nicholls  <jarred@sencha.com>

        Allow XMLHttpRequest withCredentials to be set prior to a call to open()
        https://bugs.webkit.org/show_bug.cgi?id=75194

        XMLHttpRequest.withCredentials attribute should be modifiable prior to the OPENED state per
        the W3C spec. See http://dvcs.w3.org/hg/xhr/raw-file/tip/Overview.html#the-withcredentials-attribute

        Reviewed by Alexey Proskuryakov.

        Test: fast/xmlhttprequest/xmlhttprequest-withcredentials-before-open.html

        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::setWithCredentials):
        Prevent setting the value only after the OPENED state.

2011-12-24  Andreas Kling  <awesomekling@apple.com>

        Remove empty inline RenderStyle destructor.
        <http://webkit.org/b/75188>

        Rubber-stamped by Anders "Ordvits" Carlsson.

        * rendering/style/RenderStyle.h:

2011-12-24  Andreas Kling  <awesomekling@apple.com>

        RenderStyle: Inline the destructor.
        <http://webkit.org/b/75188>

        Reviewed by Kenneth Rohde Christiansen.

        The (empty) RenderStyle destructor gets a little hot sometimes, reaching up
        to 0.4% when loading the full HTML5 spec. Inline it to remove the pointless
        function call.

        * rendering/style/RenderStyle.cpp:
        * rendering/style/RenderStyle.h:
        (WebCore::RenderStyleBitfields::~RenderStyle):

2011-12-23  Noel Gordon  <noel.gordon@gmail.com>

        JPEG decoders should only save color profile markers if color management is enabled
        https://bugs.webkit.org/show_bug.cgi?id=75182

        Reviewed by Adam Barth.

        No new tests. Covered by existing tests.
            fast/images/ycbcr-with-cmyk-color-profile.html
            fast/images/gray-scale-jpeg-with-color-profile.html
            fast/images/cmyk-jpeg-with-color-profile.html
            fast/images/color-jpeg-with-color-profile.html

        * platform/image-decoders/jpeg/JPEGImageDecoder.cpp:
        (WebCore::JPEGImageReader::JPEGImageReader):  Store color profile (JPEG_APP0 + 2) markers
        using the iccjpeg helper setup_read_icc_profile() if color management is enabled.

2011-12-23  Alice Boxhall  <aboxhall@chromium.org>

        Fix crash when adding paragraph in contenteditable with role=textbox.
        https://bugs.webkit.org/show_bug.cgi?id=75159

        Reviewed by Ryosuke Niwa.

        Test: accessibility/textbox-role-on-contenteditable-crash.html

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::childrenChanged): Use rendererIsEditable() rather than isContentEditable()
        as this method is called during render layouts, and isContentEditable() triggers a layout update, which crashes.

2011-12-23  Noel Gordon  <noel.gordon@gmail.com>

        [chromium] JPEG image with CMYK ICC color profile renders color-inverted and squashed
        https://bugs.webkit.org/show_bug.cgi?id=74400

        Reviewed by Adam Barth.

        Use color profiles for GRAYSCALE, RGB, YCbCr, CMYK and YCCK jpeg images only if their
        embedded color profile is from an RGB color space input device.

        Test:
           fast/images/ycbcr-with-cmyk-color-profile.html
               - YCbCr image, with CMYK output device color profile.
        Existing Tests:
           fast/images/gray-scale-jpeg-with-color-profile.html
               - YCbCr image, with GRAY input device color profile.
           fast/images/cmyk-jpeg-with-color-profile.html
               - YCCK image, with CMYK output device color profile.
           fast/images/color-jpeg-with-color-profile.html
               - YCbCr image, with RGB input device color profile.

        * platform/image-decoders/jpeg/JPEGImageDecoder.cpp:
        (WebCore::rgbColorProfile): Return true if the profile has an RGB color space.
        (WebCore::inputDeviceColorProfile): Return true if the profile is from an input device.
        (WebCore::readColorProfile): Ignore the embedded color profile unless if it is from
        an RGB color space input device.
        (WebCore::JPEGImageReader::decode):

2011-12-23  Dan Bernstein  <mitz@apple.com>

        Print dlerror() when dyld functions fail unexpectedly
        https://bugs.webkit.org/show_bug.cgi?id=75185

        Reviewed by Sam Weinig.

        * platform/mac/SoftLinking.h:

2011-12-23  Sam Weinig  <sam@webkit.org>

        Start extracting platform specific bits out of PlatformEvents
        https://bugs.webkit.org/show_bug.cgi?id=75063

        Reviewed by Anders Carlsson.

        * WebCore.exp.in:
        Update exports.

        * WebCore.xcodeproj/project.pbxproj:
        Add factory, remove implementation files for mac PlatformWheelEvent
        and PlatformMouseEvent.

        * page/mac/EventHandlerMac.mm:
        (WebCore::EventHandler::wheelEvent):
        (WebCore::EventHandler::keyEvent):
        (WebCore::EventHandler::currentPlatformMouseEvent):
        Switch to use the factory.

        * platform/PlatformEvent.h:
        (WebCore::PlatformEvent::shiftKey):
        (WebCore::PlatformEvent::ctrlKey):
        (WebCore::PlatformEvent::altKey):
        (WebCore::PlatformEvent::metaKey):
        (WebCore::PlatformEvent::modifiers):
        (WebCore::PlatformEvent::PlatformEvent):
        Switch to storing the modifiers as bits on an unsigned
        instead of as individual bools.

        * platform/PlatformGestureEvent.h:
        Remove unused timestamp member.

        * platform/PlatformKeyboardEvent.h:
        (WebCore::PlatformKeyboardEvent::PlatformKeyboardEvent):
        (WebCore::PlatformKeyboardEvent::keyIdentifier):
        (WebCore::PlatformKeyboardEvent::macCharCode):
        (WebCore::PlatformKeyboardEvent::isSystemKey):
        Give this class a more consistent interface across platforms,
        and remove constructor that took an NSEvent.

        * platform/PlatformMouseEvent.h:
        Remove constructor that took an NSEvent (and an unused constructor that took
        many arguments) as well as some free functions for point conversion.

        * platform/PlatformWheelEvent.h:
        Remove constructor that took an NSEvent and an unnecessary override of the timestamp()
        function.

        * platform/mac/KeyEventMac.mm:
        Removed constructor and moved helpers to PlatformEventFactory.

        * platform/mac/PlatformEventFactory.h: Added.
        * platform/mac/PlatformEventFactory.mm: Added.
        (WebCore::globalPoint):
        (WebCore::globalPointForEvent):
        (WebCore::pointForEvent):
        (WebCore::mouseButtonForEvent):
        (WebCore::mouseEventTypeForEvent):
        (WebCore::clickCountForEvent):
        (WebCore::momentumPhaseForEvent):
        (WebCore::phaseForEvent):
        (WebCore::gestureEventTypeForEvent):
        (WebCore::textFromEvent):
        (WebCore::unmodifiedTextFromEvent):
        (WebCore::keyIdentifierForKeyEvent):
        (WebCore::isKeypadEvent):
        (WebCore::windowsKeyCodeForKeyEvent):
        (WebCore::isKeyUpEvent):
        (WebCore::modifiersForEvent):
        (WebCore::PlatformMouseEventBuilder::PlatformMouseEventBuilder):
        (WebCore::PlatformEventFactory::createPlatformMouseEvent):
        (WebCore::PlatformWheelEventBuilder::PlatformWheelEventBuilder):
        (WebCore::PlatformEventFactory::createPlatformWheelEvent):
        (WebCore::PlatformKeyboardEventBuilder::PlatformKeyboardEventBuilder):
        (WebCore::PlatformEventFactory::createPlatformKeyboardEvent):
        (WebCore::PlatformGestureEventBuilder::PlatformGestureEventBuilder):
        (WebCore::PlatformEventFactory::createPlatformGestureEvent):
        Consolidate platform event creation logic and add factory functions.

        * platform/mac/PlatformMouseEventMac.mm: Removed.
        * platform/mac/WheelEventMac.mm: Removed.

        * platform/mac/WebCoreSystemInterface.h:
        * platform/mac/WebCoreSystemInterface.mm:
        Expose wkGetNSEventKeyChar in WebCore.

        * platform/gtk/PlatformKeyboardEventGtk.cpp:
        (WebCore::PlatformKeyboardEvent::PlatformKeyboardEvent):
        * platform/gtk/PlatformMouseEventGtk.cpp:
        (WebCore::PlatformMouseEvent::PlatformMouseEvent):
        * platform/gtk/PlatformWheelEventGtk.cpp:
        (WebCore::PlatformWheelEvent::PlatformWheelEvent):
        * platform/qt/PlatformKeyboardEventQt.cpp:
        (WebCore::PlatformKeyboardEvent::PlatformKeyboardEvent):
        * platform/qt/PlatformMouseEventQt.cpp:
        (WebCore::mouseEventModifiersFromQtKeyboardModifiers):
        (WebCore::PlatformMouseEvent::PlatformMouseEvent):
        * platform/qt/PlatformTouchEventQt.cpp:
        (WebCore::PlatformTouchEvent::PlatformTouchEvent):
        * platform/win/KeyEventWin.cpp:
        (WebCore::PlatformKeyboardEvent::PlatformKeyboardEvent):
        * platform/win/WheelEventWin.cpp:
        (WebCore::PlatformWheelEvent::PlatformWheelEvent):
        Update for new variables/names.

2011-12-22  Andreas Kling  <kling@webkit.org>

        CSSParser: Avoid creating dummy declaration in parseColor() slow path.
        <http://webkit.org/b/75104>

        Reviewed by Darin Adler.

        We only needed the dummy declaration to trigger the instantiation of
        a CSSValuePool. Added an ensureCSSValuePool() method and have parseColor()
        call that instead.

        Also renamed the fast-path parseColor() to fastParseColor() and reordered
        the arguments for consistency with the slow-path parseColor().

        * css/CSSParser.cpp:
        (WebCore::parseColorValue):
        (WebCore::CSSParser::parseColor):
        (WebCore::CSSParser::ensureCSSValuePool):
        (WebCore::CSSParser::fastParseColor):
        (WebCore::CSSParser::parseColorFromValue):
        * css/CSSParser.h:

2011-12-21  Andreas Kling  <kling@webkit.org>

        Automate elements' registration as document namedItem/extraNamedItem.
        <http://webkit.org/b/74991>

        Reviewed by Antti Koivisto.

        Remove caching of the "id" and "name" attributes on applet, embed, form,
        image and object elements. We were caching them to keep the document's
        map of named and "extra named" (named by id) item counts in sync.

        Instead, add a hook to Element::willModifyAttribute() that detects when
        the attributes are being changed and handle the registration/unregistration
        automatically if the element returns true for shouldRegisterAsNamedItem()
        or shouldRegisterAsExtraNamedItem() respectively.

        This shrinks the elements by two AtomicStrings (8 or 16 bytes) each.

        IFrame elements retain the old mechanism for now, as there are some subtle
        differences to how that's handled.

        * dom/Node.h:
        (WebCore::Node::hasName):
        (WebCore::Node::setHasName):

            Cache whether we have a "name" attribute or not (1 bit on Node.)
            This is done in order to minimize the overhead added to Element's
            insertedIntoDocument() and removeFromDocument().

        * dom/StyledElement.cpp:
        (WebCore::StyledElement::attributeChanged):

            Update the Node's has-name flag as appropriate.

        * dom/Element.cpp:
        (WebCore::Element::updateNamedItemRegistration):
        (WebCore::Element::updateExtraNamedItemRegistration):

            Added. Called when the "name" and "id" attributes are changed.
            Updates the document's named item maps accordingly.

        (WebCore::Element::insertedIntoDocument):
        (WebCore::Element::removedFromDocument):

            Make sure updateName() is called in addition to updateId() when applicable.

        * dom/Element.h:
        (WebCore::Element::shouldRegisterAsNamedItem):
        (WebCore::Element::shouldRegisterAsExtraNamedItem):

            Added. If an element returns true for these, it will be automatically
            registered with the document when the name/id attribute changes.

        (WebCore::Element::updateId):
        (WebCore::Element::updateName):

            Register/unregister from the document's named item maps as appropriate.

        (WebCore::Element::willModifyAttribute):

            Add updateName() hook in addition to the existing updateId() hook.

        * dom/NamedNodeMap.cpp:
        (WebCore::NamedNodeMap::setAttributes):

            Make sure updateName() is called when we're cloning the attributes
            from another element.

        * html/HTMLAppletElement.cpp:
        (WebCore::HTMLAppletElement::parseMappedAttribute):
        * html/HTMLAppletElement.h:
        * html/HTMLEmbedElement.cpp:
        (WebCore::HTMLEmbedElement::parseMappedAttribute):
        (WebCore::HTMLEmbedElement::insertedIntoDocument):
        * html/HTMLEmbedElement.h:
        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::insertedIntoDocument):
        (WebCore::HTMLFormElement::removedFromDocument):
        (WebCore::HTMLFormElement::parseMappedAttribute):
        * html/HTMLFormElement.h:
        * html/HTMLImageElement.cpp:
        (WebCore::HTMLImageElement::parseMappedAttribute):
        (WebCore::HTMLImageElement::insertedIntoDocument):
        * html/HTMLImageElement.h:
        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::parseMappedAttribute):
        (WebCore::HTMLObjectElement::insertedIntoDocument):
        (WebCore::HTMLObjectElement::removedFromDocument):
        * html/HTMLObjectElement.h:
        * html/HTMLPlugInElement.h:

            Remove duplicated code that is now handled by Element.

        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::updateDocNamedItem):
        (WebCore::HTMLObjectElement::formControlName):

            Use fastGetAttribute() since we no longer cache the name.

2011-12-23  Anders Carlsson  <andersca@apple.com>

        Add two (currently unused) new member functions to ScrollElasticityControllerClient
        https://bugs.webkit.org/show_bug.cgi?id=75179

        Reviewed by Dan Bernstein.

        This is so we'll be able to move more code to ScrollElasticityController.

        * platform/mac/ScrollAnimatorMac.h:
        * platform/mac/ScrollAnimatorMac.mm:
        (WebCore::ScrollAnimatorMac::pinnedInDirection):
        (WebCore::ScrollAnimatorMac::immediateScrollByWithoutContentEdgeConstraints):
        * platform/mac/ScrollElasticityController.h:

2011-12-23  Simon Fraser  <simon.fraser@apple.com>

        Blur filter doesn't invalidate enough
        https://bugs.webkit.org/show_bug.cgi?id=74891

        Reviewed by Darin Adler.
        
        Take the effects of filters into account for repainting; we need
        to inflate the repaint rect by the outsets provided by the filter.
        
        Test: css3/filters/filter-repaint.html

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::computeRectForRepaint):
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::computeRectForRepaint):

2011-12-23  Simon Fraser  <simon.fraser@apple.com>

        Filters should apply to inline elements
        https://bugs.webkit.org/show_bug.cgi?id=75152

        Reviewed by Darin Adler.
        
        Filters need to cause creation of RenderLayers for inlines, just like
        opacity and masks do.

        Test: css3/filters/filtered-inline.html

        * rendering/RenderInline.h:
        (WebCore::RenderInline::requiresLayer):
        * rendering/RenderTableRow.h: Remove an obviously incorrect comment.

2011-12-23  Jarred Nicholls  <jarred@sencha.com>

        Synchronous XHR in window context should not support new XHR responseTypes for HTTP(S) requests
        https://bugs.webkit.org/show_bug.cgi?id=72154

        Per the latest W3C editor draft: http://dvcs.w3.org/hg/xhr/raw-file/tip/Overview.html
        This is a spec-mandated attempt to thwart and otherwise discourage the use of synchronous XHR
        in the window context by deliberately not exposing newer functionality. Here we are disabling
        the use of responseType in synchronous HTTP(S) XHR requests from the window context.

        When a user attempts this action, an InvalidAccessError exception is thrown and a message is
        printed to the console to further explain.

        Renamed reportUnsafeUsage to a more generic name, and hoisted it up so it would be defined
        earlier and thus referenceable by setResponseType.

        Reviewed by Alexey Proskuryakov.

        Test: fast/xmlhttprequest/xmlhttprequest-responsetype-sync-request.html

        * xml/XMLHttpRequest.cpp:
        (WebCore::logConsoleError):
        reportUnsafeUsage -> logConsoleError
        (WebCore::XMLHttpRequest::setResponseType):
        (WebCore::XMLHttpRequest::setRequestHeader):
        reportUnsafeUsage -> logConsoleError
        (WebCore::XMLHttpRequest::getResponseHeader):
        reportUnsafeUsage -> logConsoleError
        (WebCore::XMLHttpRequest::didFail):
        reportUnsafeUsage -> logConsoleError

2011-12-23  Alexander Pavlov  <apavlov@chromium.org>

        Web Inspector: Implement a worker for parsing out JavaScript function data
        https://bugs.webkit.org/show_bug.cgi?id=75166

        Reviewed by Pavel Feldman.

        Test: inspector/debugger/script-extract-outline.html

        * inspector/front-end/ScriptFormatter.js:
        (WebInspector.ScriptFormatter.prototype.formatContent):
        * inspector/front-end/ScriptFormatterWorker.js:
        (onmessage):
        (format):
        (getChunkCount):
        ():
        (Array.prototype.keySet):

2011-12-23  Ilya Tikhonovsky  <loislo@chromium.org>

        Unreviewed, rolling out r103624.
        http://trac.webkit.org/changeset/103624
        https://bugs.webkit.org/show_bug.cgi?id=68916

        Broke Snow Leopard builders

        * CMakeLists.txt:
        * DerivedSources.cpp:
        * DerivedSources.pri:
        * GNUmakefile.list.am:
        * WebCore.gypi:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSDirectoryEntryCustom.cpp:
        (WebCore::JSDirectoryEntry::getFile):
        (WebCore::JSDirectoryEntry::getDirectory):
        * bindings/js/JSDirectoryEntrySyncCustom.cpp:
        (WebCore::getFlags):
        * bindings/v8/custom/V8DirectoryEntryCustom.cpp:
        (WebCore::V8DirectoryEntry::getDirectoryCallback):
        (WebCore::V8DirectoryEntry::getFileCallback):
        * bindings/v8/custom/V8DirectoryEntrySyncCustom.cpp:
        (WebCore::getFlags):
        * fileapi/WebKitFlags.idl: Added.
        * page/DOMWindow.idl:
        * workers/WorkerContext.idl:

2011-12-23  Eric Uhrhane  <ericu@chromium.org>

       [fileapi] WebKitFlags should not be constructable per Directories & System spec
       https://bugs.webkit.org/show_bug.cgi?id=68916

       Reviewed by Eric Seidel.

       Remove IDL for the object and all DOM references to it.
       * fileapi/WebKitFlags.idl: Removed.
       * page/DOMWindow.idl:
       * workers/WorkerContext.idl:
       Remove references to the JSC/V8 objects compiled from the IDL.
       * bindings/js/JSDirectoryEntryCustom.cpp:
       (WebCore::JSDirectoryEntry::getFile):
       (WebCore::JSDirectoryEntry::getDirectory):
       * bindings/js/JSDirectoryEntrySyncCustom.cpp:
       (WebCore::getFlags):
       * bindings/v8/custom/V8DirectoryEntryCustom.cpp:
       (WebCore::V8DirectoryEntry::getDirectoryCallback):
       (WebCore::V8DirectoryEntry::getFileCallback):
       * bindings/v8/custom/V8DirectoryEntrySyncCustom.cpp:
       (WebCore::getFlags):
       Fix up build files.
       * WebCore.gypi:
       * WebCore.vcproj/WebCore.vcproj:
       * WebCore.xcodeproj/project.pbxproj:
       * WebCore/CMakeLists.txt:
       * WebCore/CodeGenerators.pri:
       * WebCore/DerivedSources.cpp:
       * WebCore/GNUmakefile.list.am:

2011-12-23  Pavel Feldman  <pfeldman@google.com>

        Web Inspector: Migrate to native Function.prototype.bind; fix front-end compilation with the
        version of compiler that respects Function.prototype.bind.
        https://bugs.webkit.org/show_bug.cgi?id=75170

        Reviewed by Yury Semikhatsky.

        * inspector/front-end/ApplicationCacheModel.js:
        * inspector/front-end/CSSKeywordCompletions.js:
        (WebInspector.CSSKeywordCompletions.colors):
        * inspector/front-end/CSSStyleModel.js:
        * inspector/front-end/CompilerSourceMapping.js:
        * inspector/front-end/DOMAgent.js:
        (WebInspector.DOMAgent.prototype.pushNodeToFrontend):
        (WebInspector.DOMAgent.prototype.pushNodeByPathToFrontend):
        (WebInspector.DOMAgent.prototype._dispatchWhenDocumentAvailable.onDocumentAvailable):
        (WebInspector.DOMAgent.prototype._dispatchWhenDocumentAvailable):
        (WebInspector.DOMAgent.prototype._loadNodeAttributes):
        (WebInspector.DOMAgent.prototype.querySelector):
        (WebInspector.DOMAgent.prototype.querySelectorAll):
        * inspector/front-end/DebuggerModel.js:
        * inspector/front-end/DebuggerPresentationModel.js:
        * inspector/front-end/ExtensionAPI.js:
        (injectedExtensionAPI.InspectorExtensionAPI):
        (injectedExtensionAPI):
        * inspector/front-end/ExtensionPanel.js:
        * inspector/front-end/NetworkManager.js:
        (WebInspector.NetworkManager.prototype.enableResourceTracking):
        (WebInspector.NetworkManager.prototype.disableResourceTracking):
        * inspector/front-end/Script.js:
        * inspector/front-end/Settings.js:
        * inspector/front-end/TextPrompt.js:
        (WebInspector.TextPrompt.prototype.complete):
        * inspector/front-end/utilities.js:

2011-12-23  Leo Yang  <leo.yang@torchmobile.com.cn>

        [BlackBerry] Add the BlackBerry specific pauseLoad(bool) to ResourceHandle
        https://bugs.webkit.org/show_bug.cgi?id=75162

        Reviewed by George Staikos.

        The porting can be built now, no new tests so far.

        * platform/network/ResourceHandle.h:

2011-12-23  Karl Koscher  <supersat@chromium.org>

        Give embedders a chance to handle postMessage calls
        https://bugs.webkit.org/show_bug.cgi?id=73883

        To support cross-process postMessage calls in Chromium (bug 73337), we need to intercept 
        postMessage calls to proxy windows. Originally we were just going to add a native event
        listener on the Chromium side, but that required more changes to WebKit and was a bit of
        a hack. See bug 73359 for a discuss about moving to this approach.

        Reviewed by Adam Barth.

        Test: platform/chromium/fast/events/intercept-postmessage.html

        * loader/FrameLoaderClient.h:
        (WebCore::FrameLoaderClient::willCheckAndDispatchPostMessage): new method to allow the
            embedder to intercept postMessage calls
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::postMessageTimerFired): add a call to
            FrameLoaderClient::willCheckAndDispatchPostMessage

2011-12-23  Tom Sepez  <tsepez@chromium.org>

        XSLT-created HTML documents do not inherit content-security-policy from originally loaded XML.
        https://bugs.webkit.org/show_bug.cgi?id=75043

        Reviewed by Adam Barth.

        Test: http/tests/security/contentSecurityPolicy/xsl-img-blocked.php

        * page/ContentSecurityPolicy.cpp:
        (WebCore::ContentSecurityPolicy::copyStateFrom):
        (WebCore::ContentSecurityPolicy::didReceiveHeader):
        * page/ContentSecurityPolicy.h:
        * xml/XSLTProcessor.cpp:
        (WebCore::XSLTProcessor::createDocumentFromSource):

2011-12-23  Darin Adler  <darin@apple.com>

        REGRESSION (r97533): Optgroup label is not disabled
        https://bugs.webkit.org/show_bug.cgi?id=74869

        Reviewed by Alexey Proskuryakov.

        * rendering/RenderMenuList.cpp:
        (WebCore::RenderMenuList::itemIsEnabled): Added back a line of code that was
        accidentally deleted as part of the refactoring in r97533. This line of code
        ensures that any items that are not option elements are disabled.

2011-12-19  Alexander Pavlov  <apavlov@chromium.org>

        Web Inspector: Add CSSStyleSelector instrumentation calls towards implementing a CSS selector profiler
        https://bugs.webkit.org/show_bug.cgi?id=74863

        Performance checks run on PerformanceTest/Parser/html5-full-render.html did not result in any noticeable
        perf regression, as the instrumentation calls are inline and bail out early if there are no
        Web Inspector frontends open.

        Reviewed by Antti Koivisto.

        No new tests, as the functionality is not bound to any user-visible outputs.

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::matchRulesForList):
        (WebCore::CSSStyleSelector::applyDeclaration):
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::willMatchRuleImpl):
        (WebCore::InspectorInstrumentation::didMatchRuleImpl):
        (WebCore::InspectorInstrumentation::willProcessRuleImpl):
        (WebCore::InspectorInstrumentation::didProcessRuleImpl):
        * inspector/InspectorInstrumentation.h:
        (WebCore::InspectorInstrumentation::willMatchRule):
        (WebCore::InspectorInstrumentation::didMatchRule):
        (WebCore::InspectorInstrumentation::willProcessRule):
        (WebCore::InspectorInstrumentation::didProcessRule):

2011-12-23  Ivan Briano  <ivan@profusion.mobi>

        [EFL] Fix building with Glib support disabled
        https://bugs.webkit.org/show_bug.cgi?id=70990

        Reviewed by Martin Robinson.

        Add forward declaration for cairo_surface_t, missing when building
        the EFL port with Glib disabled.

        * platform/cairo/WidgetBackingStore.h:

2011-12-23  Adam Klein  <adamk@chromium.org>

        Minimize callsites and duplication of before/after advice for attribute mutations
        https://bugs.webkit.org/show_bug.cgi?id=75054

        Reviewed by Ryosuke Niwa.

        r103452 helpfully made before and after advice regarding attribute
        changes symmetrical. This change finishes that work, by pulling
        together all the before/after work, not just the crumbs previously
        covered. This includes incrementing Document::domTreeVersion()
        when an attribute is about to be changed, Inspector instrumentation,
        and MutationEvent dispatch. This is in addition to the previous code,
        which handled enqueueing MutationRecords for MutationObservers and
        updating the Document's list of IDs.

        The only change in behavior should be in InspectorInstrumentation,
        which causes DOM breakpoints to occur for more cases of Attribute
        mutation. This seems like more correct behavior, and a test has
        been included to exercise it.

        Hopefully the last Attribute-related refactor for awhile.

        * dom/Attr.cpp:
        (WebCore::Attr::setValue): Update to call didModifyAttribute instead
        of attributeChanged.
        * dom/Element.cpp:
        (WebCore::Element::removeAttribute): Got rid of
        removeAttributeInternal as most of that logic moved back into
        NamedNodeMap::removeAttribute.
        (WebCore::Element::setAttributeInternal): Reorganized to read better
        now that only some cases result in calls to will/didModifyAttribute.
        (WebCore::Element::willModifyAttribute): Un-inlined and added
        incDOMTreeVersion and InspectorInstrumentation calls.
        (WebCore::Element::didModifyAttribute): New method which encapsulates
        calling attributeChanged, InspectorInstrumentation, and MutationEvents.
        (WebCore::Element::didRemoveAttribute): New method which encapsulates
        calling attributeChanged, InspectorInstrumentation, and MutationEvents.
        Separate from didModifyAttribute because it has special handling of
        the removed Attribute's value.
        * dom/Element.h:
        (WebCore::Element::willRemoveAttribute): New method which delegates to
        willModifyAttribute as appropriate.
        * dom/NamedNodeMap.cpp:
        (WebCore::NamedNodeMap::setNamedItem): Simplified.
        (WebCore::NamedNodeMap::removeNamedItem): Simplified.
        (WebCore::NamedNodeMap::addAttribute): Added calls to will/didModifyAttribute.
        (WebCore::NamedNodeMap::removeAttribute): ditto.
        (WebCore::NamedNodeMap::replaceAttribute): ditto.
        * svg/properties/SVGAnimatedPropertySynchronizer.h: Reverted changes
        made in r103452 now that addAttribute/removeAttribute once again
        call attributeChanged appropriately.

2011-12-22  Matt Falkenhagen  <falken@chromium.org>

        Map 'lang' and xml:lang attributes to '-webkit-locale' CSS property for use with font fallback and text-transform
        https://bugs.webkit.org/show_bug.cgi?id=67586

        Original patch by Jungshik Shin <jshin@chromium.org>

        Reviewed by Darin Adler.

        Tests: fast/text/lang-mapped-to-webkit-locale.xhtml
               fast/text/xml-lang-ignored-in-html.html

        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::mapLanguageAttributeToLocale):
        (WebCore::HTMLElement::parseMappedAttribute): Map 'lang' and 'xml:lang' to -webkit-locale.
        * html/HTMLElement.h:

2011-12-22  Ryosuke Niwa  <rniwa@webkit.org>

        WinCE build fix after r103539.

        * rendering/svg/RenderSVGResource.cpp:
        (WebCore::RenderSVGResource::removeFromFilterCache):

2011-12-22  Chris Marrin  <cmarrin@apple.com>

        Crash and incorrect behavior when switching between hardware and software CSS filters
        https://bugs.webkit.org/show_bug.cgi?id=75130

        Reviewed by Simon Fraser.

        Test: css3/filters/crash-hw-sw-switch.html

        Backing store on layer gets fixed up (added or removed) after style change is evaluated
        so the state of the m_filter variable might not match the current filter state. Added
        updateOrRemoveFilterEffect() call to ensureBacking() and clearBacking() to get the
        m_filter property in the right state. Also added an ASSERT() where the crash was
        occuring.

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::paintLayer):
        (WebCore::RenderLayer::ensureBacking):
        (WebCore::RenderLayer::clearBacking):

2011-12-22  Jon Lee  <jonlee@apple.com>

        Radio buttons cut in download movie sheet
        https://bugs.webkit.org/show_bug.cgi?id=75128
        <rdar://problem/9399450>

        Reviewed by Dan Bernstein.

        Test: compositing/overflow/theme-affects-visual-overflow.html

        The clipping comes from the fact the visual overflow rect of the radio button's
        RenderBlock is not expanded to accommodate for the size of the button on the Mac
        platform. We use the existing RenderTheme::adjustRepaintRect() to make the
        appropriate adjustment. This, consequently, makes it unnecessary to have to
        recalculate it for repaint.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::computeOverflow): As part of the overflow computation, we
        make a call to addVisualOverflowFromTheme().
        (WebCore::RenderBlock::addVisualOverflowFromTheme): Ask the theme to inflate the
        RenderBlock's rect if necessary, and add that to the visual overflow rect.
        * rendering/RenderBlock.h: Added addVisualOverflowFromTheme().
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::clippedOverflowRectForRepaint): Remove the call to
        adjustRepaintRect() since the rectangle r already uses the new visual overflow
        rect.
        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::clippedOverflowRectForRepaint): Remove the call to
        adjustRepaintRect() since the rectangle r already uses the new visual overflow
        rect.

2011-12-22  Chris Rogers  <crogers@google.com>

        Fix mac build breakage - add SincResampler files to WebCore.xcodeproj
        https://bugs.webkit.org/show_bug.cgi?id=75139

        Unreviewed build fix.

        * WebCore.xcodeproj/project.pbxproj:

2011-12-22  Simon Fraser  <simon.fraser@apple.com>

        Animating some CSS filter values is wrong
        https://bugs.webkit.org/show_bug.cgi?id=75122

        Reviewed by Chris Marrin.
        
        Fix some reversed filter animation behavior for brightness,
        contrast and drop-shadow filters.

        Test: css3/filters/filter-animation-from-none.html

        * platform/graphics/filters/FilterOperation.cpp:
        (WebCore::BasicComponentTransferFilterOperation::blend): Just use the global blend() function.
        (WebCore::BasicComponentTransferFilterOperation::passthroughAmount): Add CONTRAST and BRIGHTNESS to the sswitch.
        (WebCore::GammaFilterOperation::blend): Fix the ordering.
        (WebCore::DropShadowFilterOperation::blend): Fix the ordering.

2011-12-22  Chris Rogers  <crogers@google.com>

        Fix mac build caused by improper include of "Locker.h"
        https://bugs.webkit.org/show_bug.cgi?id=75134

        Unreviewed build fix.

        * webaudio/MediaElementAudioSourceNode.cpp:

2011-12-22  Anders Carlsson  <andersca@apple.com>

        More ScrollAnimatorMac cleanup
        https://bugs.webkit.org/show_bug.cgi?id=75127

        Reviewed by Andreas Kling.

        Introduce a immediateScrollByWithoutContentEdgeConstraints and use it whenever we want to scroll by an
        offset instead of doing the setConstrainsScrollingToContentEdge dance.

        * platform/mac/ScrollAnimatorMac.h:
        * platform/mac/ScrollAnimatorMac.mm:
        (WebCore::ScrollAnimatorMac::immediateScrollByWithoutContentEdgeConstraints):
        (WebCore::ScrollAnimatorMac::smoothScrollWithEvent):
        (WebCore::ScrollAnimatorMac::snapRubberBandTimerFired):

2011-12-22  Chris Rogers  <crogers@google.com>

        Implement MediaElementAudioSourceNode::setFormat() so numberOfChannels and sampleRate are accounted for
        https://bugs.webkit.org/show_bug.cgi?id=75057

        Reviewed by Eric Carlson.

        * GNUmakefile.list.am:
        * WebCore.gypi:
        * WebCore.xcodeproj/project.pbxproj:
        Add MultiChannelResampler source files to makefiles.
        * platform/audio/MultiChannelResampler.cpp: Added.
        (WebCore::MultiChannelResampler::MultiChannelResampler):
        (WebCore::MultiChannelResampler::process):
        * platform/audio/MultiChannelResampler.h: Added.
        Add MultiChannelResampler implementation which uses one SincResampler per channel.
        * webaudio/MediaElementAudioSourceNode.cpp:
        (WebCore::MediaElementAudioSourceNode::create):
        (WebCore::MediaElementAudioSourceNode::MediaElementAudioSourceNode):
        (WebCore::MediaElementAudioSourceNode::setFormat):
        (WebCore::MediaElementAudioSourceNode::process):
        Implement MediaElementAudioSourceNode::setFormat() so that we can
        properly setup a sample-rate converter and set the number of channels
        of the MediaElementAudioSourceNode output.
        * webaudio/MediaElementAudioSourceNode.h:

2011-12-22  Chris Fleizach  <cfleizach@apple.com>

        AX: WebKit should ignore ARIA role=presentation on focusable elements
        https://bugs.webkit.org/show_bug.cgi?id=75101

        Reviewed by Darin Adler.

        If an element is focusable, the presentational role must be ignored, lest the user not be able
        to interact with something important.

        Test: accessibility/presentational-elements-with-focus.html

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::accessibilityIsIgnored):
        (WebCore::AccessibilityRenderObject::determineAriaRoleAttribute):
        (WebCore::AccessibilityRenderObject::inheritsPresentationalRole):

2011-12-22  Anders Carlsson  <andersca@apple.com>

        Use immediateScrollBy instead of immediateScrollTo where possible
        https://bugs.webkit.org/show_bug.cgi?id=75124

        Reviewed by Sam Weinig.

        Instead of computing the position to scroll to, just compute the delta and use scrollBy instead.

        * platform/mac/ScrollAnimatorMac.mm:
        (WebCore::ScrollAnimatorMac::smoothScrollWithEvent):
        (WebCore::ScrollAnimatorMac::snapRubberBandTimerFired):

2011-12-22  Anders Carlsson  <andersca@apple.com>

        Remove a private ScrollAnimatorMac getter/setter and just update the member variable directly
        https://bugs.webkit.org/show_bug.cgi?id=75121

        Reviewed by Sam Weinig.

        * platform/mac/ScrollAnimatorMac.h:
        * platform/mac/ScrollAnimatorMac.mm:
        (WebCore::ScrollAnimatorMac::setIsActive):
        (WebCore::ScrollAnimatorMac::updateScrollerStyle):

2011-12-22  Anders Carlsson  <andersca@apple.com>

        Simplify ScrollAnimatorMac scrollByDelta functions
        https://bugs.webkit.org/show_bug.cgi?id=75120

        Reviewed by Sam Weinig.

        Merge immediateScrollByDeltaX and immediateScrollByDeltaY to a single function and rename it
        to immediateScrollBy. Also, rename immediateScrollToPoint to immediateScrollTo.
        
        * platform/mac/ScrollAnimatorMac.h:
        * platform/mac/ScrollAnimatorMac.mm:
        (WebCore::ScrollAnimatorMac::scrollToOffsetWithoutAnimation):
        (WebCore::ScrollAnimatorMac::immediateScrollTo):
        (WebCore::ScrollAnimatorMac::immediateScrollBy):
        (WebCore::ScrollAnimatorMac::immediateScrollToPointForScrollAnimation):
        (WebCore::ScrollAnimatorMac::smoothScrollWithEvent):
        (WebCore::ScrollAnimatorMac::snapRubberBandTimerFired):

2011-12-22  Anders Carlsson  <andersca@apple.com>

        Make some ScrollAnimatorMac member functions private
        https://bugs.webkit.org/show_bug.cgi?id=75117

        Reviewed by Sam Weinig.

        Make virtual member functions and functions that are only called from ScrollAnimatorMac private.

        * platform/mac/ScrollAnimatorMac.h:

2011-12-22  Anders Carlsson  <andersca@apple.com>

        Move some member variables out of ScrollElasticityController
        https://bugs.webkit.org/show_bug.cgi?id=75115

        Reviewed by Adam Roben.

        Move a couple of member variables that aren't related to rubberbanding out from
        ScrollElasticityController and back into ScrollAnimatorMac and remove now unneeded
        ScrollElasticityControllerClient member functions as well.

        * platform/mac/ScrollAnimatorMac.h:
        * platform/mac/ScrollAnimatorMac.mm:
        (WebCore::ScrollAnimatorMac::ScrollAnimatorMac):
        (WebCore::ScrollAnimatorMac::handleWheelEvent):
        (WebCore::ScrollAnimatorMac::beginScrollGesture):
        * platform/mac/ScrollElasticityController.h:
        * platform/mac/ScrollElasticityController.mm:
        (WebCore::ScrollElasticityController::ScrollElasticityController):
        (WebCore::ScrollElasticityController::beginScrollGesture):

2011-12-22  Balazs Kelemen  <kbalazs@webkit.org>

        Fix debug build with assertions disabled
        https://bugs.webkit.org/show_bug.cgi?id=75075

        Reviewed by Darin Adler.

        Check whether assertions are disabled instead of NDEBUG
        where appropriate to avoid "defined but not used" warnings.

        No change in behaviour so no new tests.

        * loader/cache/MemoryCache.cpp:
        (WebCore::MemoryCache::insertInLRUList):
        (WebCore::MemoryCache::removeFromLiveDecodedResourcesList):
        (WebCore::MemoryCache::insertInLiveDecodedResourcesList):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::layoutBlockChild):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateLayerPositions):

2011-12-22  Anders Carlsson  <andersca@apple.com>

        Get rid of didStartAnimatedScroll and didCompleteAnimatedScroll
        https://bugs.webkit.org/show_bug.cgi?id=75107

        Reviewed by Adam Roben.

        This is another step towards removing the display throttling in WebKit2.

        * page/ChromeClient.h:
        * page/FrameView.cpp:
        * page/FrameView.h:
        * platform/ScrollableArea.h:
        * platform/mac/ScrollAnimatorMac.mm:
        (WebCore::ScrollAnimatorMac::scroll):
        (WebCore::ScrollAnimatorMac::immediateScrollToPointForScrollAnimation):

2011-12-22  Anders Carlsson  <andersca@apple.com>

        Remove didStartRubberBand and didCompleteRubberBand callbacks
        https://bugs.webkit.org/show_bug.cgi?id=75102

        Reviewed by Adam Roben.

        The code to do display throttling in WebKit2 is complex and doesn't really help us except
        on an old benchmark that's no longer representative of real-world behavior; let's rip it out instead.

        * page/ChromeClient.h:
        * page/FrameView.cpp:
        * page/FrameView.h:
        * platform/ScrollView.cpp:
        * platform/ScrollView.h:
        * platform/ScrollableArea.h:
        * platform/mac/ScrollAnimatorMac.mm:
        (WebCore::ScrollAnimatorMac::snapRubberBandTimerFired):
        * rendering/RenderLayer.cpp:
        * rendering/RenderLayer.h:

2011-12-22  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: [Regression] Network item view is not displayed.
        https://bugs.webkit.org/show_bug.cgi?id=75100

        Not reviewed, one line css fix.

        * inspector/front-end/networkPanel.css:
        (.network-item-view.visible):

2011-12-22  Andreas Kling  <kling@webkit.org>

        NamedNodeMap: Get rid of declCount().
        <http://webkit.org/b/74948>

        Reviewed by Darin Adler.

        We already have the number of mapped attribute declarations in the map
        stored in m_mappedAttributeCount (updated by declAdded()/declRemoved())
        so compare that in mappedMapsEquivalent() to skip one loop over the map.

        * dom/NamedNodeMap.cpp:
        (WebCore::NamedNodeMap::mappedMapsEquivalent):
        * dom/NamedNodeMap.h:

2011-12-22  Andreas Kling  <kling@webkit.org>

        SnowLeopard crashes due to thread-unsafe EventListenerIterator ASSERTs
        <http://webkit.org/b/74260>

        Reviewed by Darin Adler.

        Guard EventListenerMap::m_activeIteratorCount with a mutex.

        * dom/EventListenerMap.cpp:
        (WebCore::activeIteratorCountMutex):
        (WebCore::EventListenerMap::assertNoActiveIterators):
        (WebCore::EventListenerMap::clear):
        (WebCore::EventListenerMap::add):
        (WebCore::EventListenerMap::remove):
        (WebCore::EventListenerMap::find):
        (WebCore::EventListenerMap::removeFirstEventListenerCreatedFromMarkup):
        (WebCore::EventListenerMap::copyEventListenersNotCreatedFromMarkupToTarget):
        (WebCore::EventListenerIterator::EventListenerIterator):
        (WebCore::EventListenerIterator::~EventListenerIterator):
        * dom/EventListenerMap.h:
        (WebCore::EventListenerMap::assertNoActiveIterators):

2011-12-22  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: TabbedPane should support closeable tabs, hiding tabs into drop down menu.
        https://bugs.webkit.org/show_bug.cgi?id=75085

        Reviewed by Pavel Feldman.

        Test: inspector/tabbed-pane-tabs-to-show.html

        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * inspector/front-end/ScriptsNavigator.js:
        (WebInspector.ScriptsNavigator):
        * inspector/front-end/TabbedPane.js:
        (WebInspector.TabbedPane):
        (WebInspector.TabbedPane.prototype.set shrinkableTabs):
        (WebInspector.TabbedPane.prototype.set closeableTabs):
        (WebInspector.TabbedPane.prototype.appendTab):
        (WebInspector.TabbedPane.prototype.closeTab):
        (WebInspector.TabbedPane.prototype.selectTab):
        (WebInspector.TabbedPane.prototype.onResize):
        (WebInspector.TabbedPane.prototype._updateTabElements):
        (WebInspector.TabbedPane.prototype._showTabElement):
        (WebInspector.TabbedPane.prototype._hideTabElement):
        (WebInspector.TabbedPane.prototype._createDropDownButton):
        (WebInspector.TabbedPane.prototype._updateTabsDropDown):
        (WebInspector.TabbedPane.prototype._populateDropDownFromIndex):
        (WebInspector.TabbedPane.prototype._tabsSelectChanged):
        (WebInspector.TabbedPane.prototype._measureDropDownButton):
        (WebInspector.TabbedPane.prototype._updateWidths):
        (WebInspector.TabbedPane.prototype._calculateMaxWidth.var):
        (WebInspector.TabbedPane.prototype._calculateMaxWidth):
        (WebInspector.TabbedPane.prototype._hideCurrentTab):
        (WebInspector.TabbedPaneTab):
        (WebInspector.TabbedPaneTab.prototype.get id):
        (WebInspector.TabbedPaneTab.prototype.get tabElement):
        (WebInspector.TabbedPaneTab.prototype.get measuredWidth):
        (WebInspector.TabbedPaneTab.prototype.get width):
        (WebInspector.TabbedPaneTab.prototype.set width):
        (WebInspector.TabbedPaneTab.prototype._createTabElement):
        (WebInspector.TabbedPaneTab.prototype._measure):
        (WebInspector.TabbedPaneTab.prototype._tabSelected):
        (WebInspector.TabbedPaneTab.prototype._tabClosed):
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/inspector.css:
        * inspector/front-end/scriptsPanel.css:
        (#scripts-navigator-tabbed-pane .tabbed-pane-header-contents):
        * inspector/front-end/tabbedPane.css: Added.

2011-12-22  Chris Fleizach  <cfleizach@apple.com>

        AX: attributed strings do not include AXHeading information when a link is contained within the heading
        https://bugs.webkit.org/show_bug.cgi?id=75059

        Reviewed by Darin Adler.

        An attributed string should contain the heading level of an ancestor node if it exists.
        This change allows the ancestor to be higher up in the hierarchy than just the direct parent.

        Test: platform/mac/accessibility/heading-and-link-attributed-string.html

        * accessibility/mac/WebAccessibilityObjectWrapper.mm:
          (AXAttributeStringSetHeadingLevel):

2011-12-22  Chris Fleizach  <cfleizach@apple.com>

        AX: Title attribute should not be used in AXTitle
        https://bugs.webkit.org/show_bug.cgi?id=75027

        Reviewed by Darin Adler.

        Accessibility has been incorrectly exposing the title attribute through AXTitle. The title
        attribute better corresponds with a help tag for accessibility clients.

        Test: platform/mac/accessibility/title-attribute-not-used-as-axtitle.html

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::title):
            Don't use the title attribute.
        (WebCore::AccessibilityRenderObject::exposesTitleUIElement):
            Change the semantics around when a checkbox or radio button combines it's title ui element. The change
            makes it so that we will expose the title ui element when the control already has a label. Otherwise
            the title ui element is hidden, and it's text is used as the AXTitle for the control.
        (WebCore::AccessibilityRenderObject::titleUIElement):
            Change this method so it always returns the title ui element, and then leave it up to exposesTitleUIElement
            to determine whether it should be shown.
        * accessibility/AccessibilityTableCell.h:
        (WebCore::AccessibilityTableCell::exposesTitleUIElement):
            There's no special logic for table cells that have title ui elements, and we don't want to use
            the logic in AccessibilityRenderObject, hence the override here.
        * accessibility/mac/WebAccessibilityObjectWrapper.mm:
        (-[WebAccessibilityObjectWrapper accessibilityAttributeValue:]):

2011-12-22  Chris Fleizach  <cfleizach@apple.com>

        AX: aria-describedby should not be part of AXDescription (should be a part of AXHelp)
        https://bugs.webkit.org/show_bug.cgi?id=75052

        Reviewed by Darin Adler.

        According to the ARIA spec, aria-describedby is a more detailed description that is akin to help, rather
        than a description describing the actual object.

        As such, it makes more sense for this attribute to be exposed under help text.

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::helpText):
        (WebCore::AccessibilityRenderObject::ariaAccessibilityDescription):

2011-12-22  Mariusz Grzegorczyk  <mariusz.g@samsung.com>

        [EFL] Missing plugins support for efl port
        https://bugs.webkit.org/show_bug.cgi?id=44505

        Reviewed by Anders Carlsson.

        Basic functionality of plugins for efl port.

        Template version, so no new tests are needed.

        * PlatformEfl.cmake:
        * plugins/PluginView.h:
        * plugins/efl/PluginDataEfl.cpp: Added. Copied from plugins/gtk/PluginDataGtk.cpp.
        (WebCore::PluginData::initPlugins): Fill mime/description/extension maps for plugins.
        (WebCore::PluginData::refresh): Refresh plugin's database.
        * plugins/efl/PluginPackageEfl.cpp: Added. Copied from plugins/gtk/PluginPackageGtk.cpp.
        (WebCore::PluginPackage::fetchInfo): Get info from plugin's library about name and mime supported.
        (WebCore::PluginPackage::NPVersion):
        (WebCore::PluginPackage::load): Load plugin.
        * plugins/efl/PluginViewEfl.cpp: Added. Copied from plugins/gtk/PluginViewGtk.cpp.
        (WebCore::PluginView::dispatchNPEvent):
        (WebCore::PluginView::handleFocusInEvent):
        (WebCore::PluginView::handleFocusOutEvent):
        (WebCore::PluginView::handleKeyboardEvent):
        (WebCore::PluginView::handleMouseEvent):
        (WebCore::PluginView::updatePluginWidget):
        (WebCore::PluginView::setFocus):
        (WebCore::PluginView::show):
        (WebCore::PluginView::hide):
        (WebCore::PluginView::paint):
        (WebCore::PluginView::setParent):
        (WebCore::PluginView::setNPWindowRect):
        (WebCore::PluginView::setNPWindowIfNeeded):
        (WebCore::PluginView::setParentVisible):
        (WebCore::PluginView::handlePostReadFile):
        (WebCore::PluginView::platformGetValueStatic):
        (WebCore::PluginView::platformGetValue):
        (WebCore::PluginView::invalidateRect):
        (WebCore::PluginView::invalidateRegion):
        (WebCore::PluginView::forceRedraw):
        (WebCore::PluginView::platformStart):
        (WebCore::PluginView::platformDestroy):

2011-12-22  Pavel Podivilov  <podivilov@chromium.org>

        Web Inspector: add "install source map" to JS source frame context menu.
        https://bugs.webkit.org/show_bug.cgi?id=74181

        Reviewed by Pavel Feldman.

        Add "install source map" to source frame context menu when source map url is auto detected.

        * English.lproj/localizedStrings.js:
        * inspector/front-end/CompilerSourceMapping.js:
        (WebInspector.ClosureCompilerSourceMapping.prototype.load):
        (WebInspector.ClosureCompilerSourceMapping.prototype._parseSections):
        * inspector/front-end/DebuggerPresentationModel.js:
        (WebInspector.DebuggerPresentationModel.prototype.installCompilerSourceMapping):
        * inspector/front-end/JavaScriptSourceFrame.js:
        (WebInspector.JavaScriptSourceFrame.prototype.populateTextAreaContextMenu):
        (WebInspector.JavaScriptSourceFrame.prototype.cancelEditing):
        * inspector/front-end/RawSourceCode.js:
        (WebInspector.RawSourceCode.prototype._createSourceMapping.didRequestContent.didFormatContent):
        (WebInspector.RawSourceCode.prototype._createSourceMapping.didRequestContent):
        (WebInspector.RawSourceCode.prototype._createSourceMapping):
        (WebInspector.RawSourceCode.prototype._createUISourceCode):
        * inspector/front-end/UISourceCode.js:
        (WebInspector.UISourceCode):

2011-12-22  Branimir Lambov  <blambov@google.com>

        SVG: "filter" race condition may prevent SVG elements from being re-drawn
        https://bugs.webkit.org/show_bug.cgi?id=53088

        Reviewed by Nikolas Zimmermann.

        Added code to explicitly invalidate data cached by filters applied to
        an invalidated object or one of its parents.

        Test: svg/filters/filter-refresh.svg

        * rendering/svg/RenderSVGResource.cpp:
        (WebCore::RenderSVGResource::removeFromFilterCache):
        (WebCore::RenderSVGResource::markForLayoutAndParentResourceInvalidation):
        Added code to invalidate any filters applied to any of the parents.
        * rendering/svg/RenderSVGResource.h:
        * rendering/svg/RenderSVGResourceContainer.cpp:
        (WebCore::RenderSVGResourceContainer::markAllClientsForInvalidation):
        Replaced a duplicate of RenderSVGResource::
        markForLayoutAndParentResourceInvalidation with a call to the method.
        * rendering/svg/SVGResourcesCache.cpp:
        (WebCore::SVGResourcesCache::clientLayoutChanged):
        Removed filter invalidation code as this function would not be called if
        the filter isn't already invalidated.
        (WebCore::SVGResourcesCache::clientStyleChanged):
        (WebCore::SVGResourcesCache::clientUpdatedFromElement):
        Replaced filter invalidation with a markForLayoutAndParentResourceInvalidation
        call as all filters in the ancestor chain need to be invalidated.

2011-12-22  Leo Yang  <leo.yang@torchmobile.com.cn>

        [BlackBerry] Upstream the BlackBerry change to ResourceHandle.h
        https://bugs.webkit.org/show_bug.cgi?id=75061

        Reviewed by George Staikos.

        No functionality change to the existing code, no new tests.

        * platform/network/ResourceHandle.h:

2011-12-22  Alexandru Chiculita  <achicu@adobe.com>

        [CSS Shaders] Follow up bug to fix issues mentioned in comment 23 from bug 73317
        https://bugs.webkit.org/show_bug.cgi?id=74840
        
        Some comments were added on bug 73317 after the patch was reviewed and committed.
        This patch is fixing those issues, mostly about coding style and some missing comments.
        
        The initial patch had no explanation about the feature in the ChangeLog, so I'm including the description
        in this patch:
        
        CSS Shaders allow a designer to use a pair of WebGL vertex and fragment shaders to alter the final
        rendering of a specific element. The navigator will render the element inside a texture and map it
        to a mesh. The mesh is formed by equal sized quads, that depending on the mesh style, attached or detached,
        can be stitched or separated. The number of quads can be changed from CSS.
        
        Usually the vertex shader is changing the vertices of the mesh, while the fragment shader affects only the color
        that is rendered to screen (for example lighting effects).
        
        More info about CSS Shaders can be found in the specification
        https://dvcs.w3.org/hg/FXTF/raw-file/tip/custom/index.html
        
        Also a good tutorial is published here
        http://www.adobe.com/devnet/html5/articles/css-shaders.html
        
        Initially we are using the software filter effects pipeline. It uploads the image to the GPU, applies
        the shaders, reads it back to CPU and continues the rendering. The advantage of using the software pipeline is that
        it can be enabled on all the platforms that have WebGL support. The obvious disadvantage is performance: copies from CPU
        memory to GPU memory and the CPU will need to wait the GPU to finish before it could continue. In following 
        patches the shaders will be integrated in the hardware accelerated pipeline, so that no copies and, most 
        important, no waits will be required.
        
        Also, the new syntax counts total number of the lines and the columns, not just the
        additional lines and columns, so the minimum accepted and the default value is now 1 by 1.

        Reviewed by Nikolas Zimmermann.

        Some tests were updated for the default mesh size change.

        * css/CSSParser.cpp:
            Only accept non-zero positive int values for mesh sizes.
            
        (WebCore::CSSParser::parseCustomFilter):
        * css/CSSStyleSelector.cpp:
            Updated the default mesh size to be 1 column with 1 line.
            
        (WebCore::CSSStyleSelector::createCustomFilterOperation):
        * loader/cache/CachedShader.cpp:
        (WebCore::CachedShader::shaderString):
            Corrected the CachedShader to use a StringBuilder. Also there was an incorrect 
            cast to bool, which resulted from a copy/paste from CachedScript which still has
            both same issues.
            
        (WebCore::CachedShader::data):
        * loader/cache/CachedShader.h:
        * platform/graphics/filters/CustomFilterMesh.cpp:
        (WebCore::MeshGenerator::MeshGenerator):
        (WebCore::MeshGenerator::verticesCount):
        (WebCore::MeshGenerator::generateAttachedMesh):
        (WebCore::MeshGenerator::generateDetachedMesh):
        (WebCore::CustomFilterMesh::CustomFilterMesh):
        * platform/graphics/filters/CustomFilterMesh.h:
        (WebCore::CustomFilterMesh::create):
        * platform/graphics/filters/CustomFilterShader.cpp:
        (WebCore::CustomFilterShader::CustomFilterShader):
            Exploded the body of the constructor into smaller helper functions.
            
        (WebCore::CustomFilterShader::compileShader):
        (WebCore::CustomFilterShader::linkProgram):
        (WebCore::CustomFilterShader::initializeParameterLocations):
        * platform/graphics/filters/CustomFilterShader.h:
        * platform/graphics/filters/FECustomFilter.cpp:
        (WebCore::orthogonalProjectionMatrix):
            Passing a TransformationMatrix by reference to be filled with the result matrix, instead
            of returning it by value. Also changed the name of the method.
            
        (WebCore::FECustomFilter::FECustomFilter):
        (WebCore::FECustomFilter::platformApplySoftware):
            Created some helper functions to make this method shorter.
            
        (WebCore::FECustomFilter::initializeContext):
        (WebCore::FECustomFilter::resizeContext):
        (WebCore::FECustomFilter::bindVertexAttribute):
        (WebCore::FECustomFilter::bindProgramAndBuffers):
        * platform/graphics/filters/FECustomFilter.h:

2011-12-12  Pavel Podivilov  <podivilov@chromium.org>

        Web Inspector: fix source map url resolving.
        https://bugs.webkit.org/show_bug.cgi?id=74305

        Reviewed by Pavel Feldman.

        Also fix the bug with repeated source urls in mapping sections.

        * inspector/front-end/CompilerSourceMapping.js:
        (WebInspector.ClosureCompilerSourceMapping):
        (WebInspector.ClosureCompilerSourceMapping.prototype.sources):
        (WebInspector.ClosureCompilerSourceMapping.prototype._parseMap):
        (WebInspector.ClosureCompilerSourceMapping.prototype._resolveSourceMapURL):
        * inspector/front-end/DebuggerPresentationModel.js:
        (WebInspector.DebuggerPresentationModel.prototype.installCompilerSourceMapping):
        * inspector/front-end/utilities.js:
        (String.prototype.asParsedURL):

2011-12-09  Pavel Podivilov  <podivilov@chromium.org>

        Web Inspector: auto detect source map url.
        https://bugs.webkit.org/show_bug.cgi?id=74088

        Reviewed by Pavel Feldman.

        Check to see if "X-SourceMap" HTTP response header was sent with script resource.
        Header value will be used as auto suggestion for source map url in UI.

        * inspector/Inspector.json:
        * inspector/InspectorDebuggerAgent.cpp:
        (WebCore::InspectorDebuggerAgent::sourceMapURLForScript):
        (WebCore::InspectorDebuggerAgent::didParseSource):
        * inspector/InspectorDebuggerAgent.h:
        * inspector/front-end/DebuggerModel.js:
        (WebInspector.DebuggerModel.prototype._parsedScriptSource):
        (WebInspector.DebuggerDispatcher.prototype.scriptParsed):
        * inspector/front-end/RawSourceCode.js:
        (WebInspector.RawSourceCode):
        * inspector/front-end/Script.js:
        (WebInspector.Script):

2011-12-22  Kentaro Hara  <haraken@chromium.org>

        Change the build flow of AppleWebKit to use the [Supplemental] IDL
        https://bugs.webkit.org/show_bug.cgi?id=74900

        Reviewed by Adam Barth.

        This is the final step for bug 74599. This patch changes the build flow
        of DerivedSources.make as follows, and thus enable the [Supplemental] IDL.

        - Previous build flow:
            foreach $idl (all IDL files) {
                generate-bindings.pl depends on $idl;
                generate-bindings.pl reads $idl;
                generate-bindings.pl generates .h and .cpp files for $idl;
            }

        - New build flow (See the discussions in bug 72138 for more details):
            resolve-supplemental.pl depends on all IDL files;
            resolve-supplemental.pl reads all IDL files;
            resolve-supplemental.pl resolves the dependency of [Supplemental=XXXX];
            resolve-supplemental.pl outputs supplemental_dependency.tmp;
            foreach $idl (all IDL files) {
                generate-bindings.pl depends on $idl and supplemental_dependency.tmp;
                generate-bindings.pl reads $idl;
                generate-bindings.pl reads supplemental_dependency.tmp;
                generate-bindings.pl generates .h and .cpp files for $idl,
                    including all attributes in the IDL files that are implementing $idl;
            }

        Tests: Confirm that build succeeds.
               http/tests/websocket/tests/*

        * DerivedSources.make: Described the build flow as described above.
        Added a list of IDL files. Instead, removed a list of JS*.h and JS*.cpp
        which are generated by the IDL files.

2011-12-22  Eric Uhrhane  <ericu@chromium.org>

        [filesystem] Remove old filesystem naming restrictions
        https://bugs.webkit.org/show_bug.cgi?id=62813

        Reviewed by David Levin.

        * fileapi/DOMFilePath.cpp:
        (WebCore::DOMFilePath::isValidPath): Replace strict restrictions with
        minimal safety [no files named "." or "..", no use of '\\' or '\0' in
        paths, no use of '/' in file names].

2011-12-22  Greg Billock  <gbillock@google.com>

        [Coverity] Address use-after-free report in MemoryCache
        https://bugs.webkit.org/show_bug.cgi?id=74970

        Reviewed by Eric Seidel.

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

2011-12-22  Tom Sepez  <tsepez@chromium.org>

        XSLT-created HTML documents do not inherit first party for cookies from originally loaded XML.
        https://bugs.webkit.org/show_bug.cgi?id=74757

        Reviewed by Alexey Proskuryakov.

        Tests: http/tests/security/cookies/first-party-cookie-allow-xslt.xml
               http/tests/security/cookies/third-party-cookie-blocking-xslt.xml

        * xml/XSLTProcessor.cpp:
        (WebCore::XSLTProcessor::createDocumentFromSource):

2011-12-22  Daniel Jalkut  <jalkut@red-sweater.com>

        WebKit editing throws exception when monochrome color dragged onto text
        https://bugs.webkit.org/show_bug.cgi?id=74775

        Reviewed by Ryosuke Niwa.

        Handle non-RGB colorspace colors in the Mac platform drag manager. Fixes NSException thrown 
        when dragging monochrome colors to contentEditable regions.

        Manual test added to trunk/ManualTests/drag-color-to-contenteditable.html

        * platform/mac/DragDataMac.mm:
        (WebCore::DragData::asColor):

2011-12-22  Peter Rybin  <peter.rybin@gmail.com>

        Web Inspector: CodeGeneratorInspector.py: generate anonymous types.
        https://bugs.webkit.org/show_bug.cgi?id=74890

        Reviewed by Yury Semikhatsky.

        Anonymous types are generated. Forward declarations are generated.

        In general it now generates C++ types for anonymous object types from
        JSON. It takes a name from the type declaration site, usually a
        parameter name. This all is explained in comments in generated file. Also
        all generated types now refer to other generated types in setter
        methods -- but this is commented out in generated code for now. All
        necessary forward declarations are also added. Anonymous enums are
        generated, but they are in comments too, because we didn't have
        solution about form the enums should have in C++ API.

        Internally:
        The change reorganizes type bindings — a polymorphous "code generator"
        object is factored out from binding.
        A helper class Writer is added to allow generating code with ajustable
        indentations and to support insertion points where additional code can
        be inserted retroactively.
        ForwardListener class is used for preparing necessary forward
        declarations.
        AdHocTypeContext conception is a speculative abstract class that is
        needed wherever anonymous type can emerge.

        * inspector/CodeGeneratorInspector.py:
        (fix_type_name.Result.output_comment):
        (Writer.__init__):
        (Writer.newline):
        (Writer.append):
        (Writer.newline_multiline):
        (Writer.append_multiline):
        (Writer.get_indented):
        (Writer):
        (Writer.insert_writer):
        (TypeBindings.create_named_type_declaration.Helper.write_doc):
        (TypeBindings.create_named_type_declaration.Helper):
        (TypeBindings.create_named_type_declaration.Helper.add_to_forward_listener):
        (TypeBindings.create_named_type_declaration):
        (TypeBindings.create_ad_hoc_type_declaration.Helper.write_doc):
        (TypeBindings.create_ad_hoc_type_declaration.Helper):
        (TypeBindings.create_ad_hoc_type_declaration.Helper.add_to_forward_listener):
        (TypeBindings.create_ad_hoc_type_declaration):
        (TypeBindings.create_type_declaration_.EnumBinding.get_code_generator.CodeGenerator.generate_type_builder):
        (TypeBindings.create_type_declaration_.EnumBinding.get_code_generator.CodeGenerator):
        (TypeBindings.create_type_declaration_.EnumBinding.get_code_generator.CodeGenerator.register_use):
        (TypeBindings.create_type_declaration_.EnumBinding.get_code_generator):
        (TypeBindings.create_type_declaration_.PlainString.get_code_generator.CodeGenerator.generate_type_builder.String):
        (TypeBindings.create_type_declaration_.PlainString.get_code_generator.CodeGenerator.generate_type_builder):
        (TypeBindings.create_type_declaration_.PlainString.get_code_generator.CodeGenerator):
        (TypeBindings.create_type_declaration_.PlainString.get_code_generator.CodeGenerator.register_use):
        (TypeBindings.create_type_declaration_.PlainString.get_code_generator):
        (TypeBindings.create_type_declaration_.PlainString.get_in_c_type_text.name):
        (TypeBindings.create_type_declaration_.PlainString):
        (TypeBindings.create_type_declaration_):
        (TypeBindings.create_type_declaration_.ClassBinding.get_code_generator):
        (TypeBindings.create_type_declaration_.ClassBinding.get_code_generator.CodeGenerator):
        (TypeBindings.create_type_declaration_.ClassBinding.get_code_generator.CodeGenerator.generate_type_builder):
        (AdHocTypeContextImpl.__init__):
        (AdHocTypeContextImpl.get_type_name_fix.NameFix):
        (AdHocTypeContextImpl.get_type_name_fix.NameFix.output_comment):
        (AdHocTypeContextImpl.get_type_name_fix):
        (AdHocTypeContextImpl):
        (AdHocTypeContextImpl.call_generate_type_builder):
        (generate_forward_declaration):
        (register_use):
        (get_in_c_type_text):
        (reduce_to_raw_type):
        (PlainObjectBinding.get_code_generator):
        (CodeGenerator.generate_type_builder.AdHocTypeContext.get_type_name_fix.NameFix):
        (CodeGenerator.generate_type_builder.AdHocTypeContext.get_type_name_fix.NameFix.output_comment):
        (CodeGenerator.generate_type_builder.AdHocTypeContext.get_type_name_fix):
        (CodeGenerator.generate_type_builder.AdHocTypeContext):
        (CodeGenerator.generate_type_builder.AdHocTypeContext.call_generate_type_builder):
        (CodeGenerator.generate_type_builder):
        (CodeGenerator):
        (CodeGenerator.register_use):
        (RawTypesBinding.get_code_generator):
        (RawTypesBinding.get_in_c_type_text):
        (RawTypesBinding):
        (RawTypesBinding.reduce_to_raw_type):
        (TypeData.__init__):
        (TypeData.get_json_type):
        (resolve_param_type):
        (Generator.go):
        (Generator.process_event.NoOpForwardListener):
        (Generator.process_event.NoOpForwardListener.add_type_data):
        (Generator.process_event.AdHocTypeContext.get_type_name_fix.NameFix):
        (Generator.process_event.AdHocTypeContext.get_type_name_fix.NameFix.output_comment):
        (Generator.process_event.AdHocTypeContext.get_type_name_fix):
        (Generator.process_event.AdHocTypeContext):
        (Generator.process_event.AdHocTypeContext.call_generate_type_builder):
        (Generator.process_event):
        (Generator.process_types.ForwardListener):
        (Generator.process_types.ForwardListener.add_type_data):
        (Generator.process_types.generate_all_domains_code.namespace_lazy_generator):
        (Generator.process_types.generate_all_domains_code):
        (Generator.process_types.call_type_builder):
        (Generator.process_types.generate_forward_callback):
        (Generator):
        (Generator.process_types):
        (flatten_list.fill_recursive):
        (flatten_list):

2011-12-22  Hans Muller  <hmuller@adobe.com>

        Onloadend event is not supported in XMLHttpRequest
        https://bugs.webkit.org/show_bug.cgi?id=40952

        Reviewed by Julien Chaffraix.

        Added support for the loadend ProgressEvent to XMLHttpRequest and XMLHttpRequestUpload.
        A new method, dispatchEventAndLoadEnd(), was added to XMLHttpRequestProgressEventThrottle
        and XMLHttpRequestUpload to foolproof the common case of dispatching a load, abort,
        or error event followed by a loadend event.

        Tests: http/tests/xmlhttprequest/onloadend-event-after-abort.html
               http/tests/xmlhttprequest/onloadend-event-after-error.html
               http/tests/xmlhttprequest/onloadend-event-after-load.html
               http/tests/xmlhttprequest/onloadend-event-after-sync-requests.html
               http/tests/xmlhttprequest/upload-onloadend-event-after-abort.html
               http/tests/xmlhttprequest/upload-onloadend-event-after-load.html
               http/tests/xmlhttprequest/upload-onloadend-event-after-sync-requests.html

        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::callReadyStateChangeListener):
        (WebCore::XMLHttpRequest::abort):
        (WebCore::XMLHttpRequest::networkError):
        (WebCore::XMLHttpRequest::abortError):
        (WebCore::XMLHttpRequest::didSendData):
        * xml/XMLHttpRequest.h:
        * xml/XMLHttpRequest.idl:
        * xml/XMLHttpRequestProgressEventThrottle.cpp:
        (WebCore::XMLHttpRequestProgressEventThrottle::dispatchEventAndLoadEnd):
        * xml/XMLHttpRequestProgressEventThrottle.h:
        * xml/XMLHttpRequestUpload.cpp:
        (WebCore::XMLHttpRequestUpload::dispatchEventAndLoadEnd):
        * xml/XMLHttpRequestUpload.h:
        * xml/XMLHttpRequestUpload.idl:

2011-12-22  Mark Pilgrim  <pilgrim@chromium.org>

        [FileSystem API] Entry.getMetadata successCallback is required
        https://bugs.webkit.org/show_bug.cgi?id=69638

        Reviewed by Eric Seidel.

        Test: fast/filesystem/simple-required-arguments-getmetadata.html

        * fileapi/Entry.idl: remove [Optional] flag from successCallback parameter

2011-12-22  Ilya Tikhonovsky  <loislo@chromium.org>

        Unreviewed, rolling out r103405.
        http://trac.webkit.org/changeset/103405
        https://bugs.webkit.org/show_bug.cgi?id=74088

        it broke WorkerDevToolsSanityTest.InspectSharedWorker

        * inspector/Inspector.json:
        * inspector/InspectorDebuggerAgent.cpp:
        (WebCore::InspectorDebuggerAgent::didParseSource):
        * inspector/InspectorDebuggerAgent.h:
        * inspector/front-end/DebuggerModel.js:
        (WebInspector.DebuggerModel.prototype._parsedScriptSource):
        (WebInspector.DebuggerDispatcher.prototype.scriptParsed):
        * inspector/front-end/RawSourceCode.js:
        (WebInspector.RawSourceCode):
        * inspector/front-end/Script.js:
        (WebInspector.Script):
        (WebInspector.Script.prototype.searchInContent):

2011-12-21  Darin Adler  <darin@apple.com>

        Make ~CSSParserSelector use Vector<OwnPtr>
        https://bugs.webkit.org/show_bug.cgi?id=73782

        Reviewed by Alexey Proskuryakov.

        * css/CSSParserValues.cpp:
        (WebCore::CSSParserSelector::~CSSParserSelector): Use Vector<OwnPtr>
        so we don't have to call leakPtr or deleteAllValues.

2011-12-21  Yosifumi Inoue  <yosin@chromium.org>

        [Forms] Selection change by type-ahead doesn't fire 'change' event
        https://bugs.webkit.org/show_bug.cgi?id=74590

        Reviewed by Kent Tamura.

        This patch changes when onchange event fired in select element for:
        1 Fire onchange event for type ahead selection.
        2 Don't fire onchange event for Enter key. We've already fired onchange event for cursor key
          and type ahead selection. So, onchange for Enter key is redundant. This behavior is 
          compatible to IE(9.0.8112.16421) and Opera(9.80) on Windows. FF(8.01) doesn't fire onchange
          by cursor key selection change and type ahead. FF requires Enter key press to fire onchange
          event.

        Test: fast/forms/select/menulist-type-ahead-find.html

        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::menuListDefaultEventHandler): Don't fire onchange event for Entry key.
        (WebCore::HTMLSelectElement::typeAheadFind): Add DispatchChangeEvent when
        calling selectOption method.

2011-12-21  Darin Adler  <darin@apple.com>

        Tweak and comment some transform-related code
        https://bugs.webkit.org/show_bug.cgi?id=68670

        Reviewed by Daniel Bates.

        * platform/mac/ScrollbarThemeMac.mm:
        (WebCore::ScrollbarThemeMac::paint): Added a FIXME about additional overhead paid here
        when the scale factor is 2x.
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paintBoxShadow): Added a FIXME about this check possibly
        being wrong, and also changed the local vairable name so the check need not stretch over
        multiple lines.

2011-12-21  Kent Tamura  <tkent@chromium.org>

        Change the item type of Document::m_formElementsWithState from Element*
        to HTMLFormControlElementWithState*.
        https://bugs.webkit.org/show_bug.cgi?id=74998

        Reviewed by Andreas Kling.

        No new tests. Just refactoring.

        * dom/Document.cpp:
        (WebCore::Document::formElementsState): Use HTMLFormControlElementWithState*.
        * dom/Document.h:
        (WebCore::Document::registerFormElementWithState): Change the argument type.
        (WebCore::Document::unregisterFormElementWithState): ditto.
        (WebCore::Document::formElements): Renamed from getFormElements().
        * dom/Element.h:
        Removed shouldSaveAndRestoreFormControlState(), saveFormControlState(),
        and restoreFormControlState() because they are not called for Element
        anymore.
        * html/HTMLFormControlElement.h:
        - Make formControlName() and formControlType() public.
         They are called from Document class.
        - Make shouldSaveAndRestoreFormControlState() public, and non-virtual.
         This is called from Document class, and no other classes override this.
        (WebCore::HTMLFormControlElementWithState::saveFormControlState):
        Moved from Element.
        (WebCore::HTMLFormControlElementWithState::restoreFormControlState): ditto.
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::updateCheckedRadioButtons):
        Use HTMLFormControlElementWithState* instead of Element*.

2011-12-21  Alexandre Elias  <aelias@google.com>

        [chromium] Always use border texels on platforms using pageScaleDelta
        https://bugs.webkit.org/show_bug.cgi?id=74226

        Reviewed by James Robinson.

        On platforms where the root layer can be zoomed in at draw time
        (pageScaleDelta), we want to turn on border texels in order for
        scaling to use GL_LINEAR instead of GL_NEAREST.

        No new tests. (Flag flip.)

        * platform/graphics/chromium/TiledLayerChromium.cpp:
        (WebCore::TiledLayerChromium::prepareToUpdate):

2011-12-21  Dale Curtis  <dalecurtis@chromium.org>

        [chromium] Scale audio, video tags in MediaDocument to fit in window.
        https://bugs.webkit.org/show_bug.cgi?id=73948

        Add CSS max-height: 100%, max-width: 100% settings to the audio and
        video tags when in MediaDocuments.

        Reviewed by Eric Seidel.

        Test: media/video-scales-in-media-document.html

        * css/mediaControlsChromium.css:
        (audio:-webkit-full-page-media, video:-webkit-full-page-media):

2011-12-21  Konrad Piascik  <kpiascik@rim.com>

        Implement the JavaScriptCore bindings for eventListenerHandlerLocation
        https://bugs.webkit.org/show_bug.cgi?id=74313

        Reviewed by Eric Seidel.

        Implemented the JavaScriptCore binding to allow Web Inspector to
        show the function name and line number for an event listener in
        the Elements panel.

        Tested by opening up a page which has a registered event listener in Safari
        and checking if the Elements panel script name and line number are present
        and clickable.

        * ForwardingHeaders/runtime/Executable.h: Added.
        * ForwardingHeaders/wtf/SegmentedVector.h: Added.
        * bindings/js/ScriptEventListener.cpp:
        (WebCore::eventListenerHandlerLocation):

2011-12-21  Chris Guan  <chris.guan@torchmobile.com.cn>

        Upstream the Multipart feature in Blackberry port
        https://bugs.webkit.org/show_bug.cgi?id=73533

        Reviewed by Rob Buis.

        I refactored Multipart code of Blackberry port. Moved Multipart into
        Blackerry network layer and removed the dependence of std::string.

        Initial upstream, no new test cases.

        * platform/network/blackberry/DeferredData.cpp:
        (WebCore::DeferredData::deferMultipartHeaderReceived):
        (WebCore::DeferredData::processHeaders):
        (WebCore::DeferredData::processDeferredData):
        * platform/network/blackberry/DeferredData.h:
        (WebCore::DeferredData::hasDeferredData):
        * platform/network/blackberry/NetworkJob.cpp:
        (WebCore::NetworkJob::notifyMultipartHeaderReceived):
        (WebCore::NetworkJob::handleNotifyMultipartHeaderReceived):
        (WebCore::NetworkJob::handleNotifyDataReceived):
        (WebCore::NetworkJob::handleNotifyClose):
        (WebCore::NetworkJob::startNewJobWithRequest):
        (WebCore::NetworkJob::sendResponseIfNeeded):
        (WebCore::NetworkJob::sendMultipartResponseIfNeeded):
        * platform/network/blackberry/NetworkJob.h:

2011-12-21  Eric Carlson  <eric.carlson@apple.com>

        Fix text track cue font size and colors
        https://bugs.webkit.org/show_bug.cgi?id=75051

        Reviewed by Darin Adler.

        No new tests, updated media/track/track-cue-rendering.html for the changes.

        * css/mediaControls.css:
        (video::-webkit-media-text-track-container): Match WebVTT spec.
        (video::-webkit-media-text-track-display): Ditto.

        * html/shadow/MediaControlElements.cpp:
        (WebCore::MediaControlTextTrackContainerElement::updateSizes): Change font size from  4% of the
            video height to 5% as per the spec. Don't enforce a minimum size.

2011-12-21  Andreas Kling  <kling@webkit.org>

        Unreviewed, rolling out r103473.
        http://trac.webkit.org/changeset/103473
        https://bugs.webkit.org/show_bug.cgi?id=74991

        Overestimated my superpowers a bit here.

        * dom/Element.cpp:
        (WebCore::Element::attributeChanged):
        (WebCore::Element::insertedIntoDocument):
        (WebCore::Element::removedFromDocument):
        * dom/Element.h:
        (WebCore::Element::updateId):
        (WebCore::Element::willModifyAttribute):
        * dom/NamedNodeMap.cpp:
        (WebCore::NamedNodeMap::setAttributes):
        * dom/Node.h:
        * html/HTMLAppletElement.cpp:
        (WebCore::HTMLAppletElement::parseMappedAttribute):
        (WebCore::HTMLAppletElement::insertedIntoDocument):
        (WebCore::HTMLAppletElement::removedFromDocument):
        * html/HTMLAppletElement.h:
        * html/HTMLEmbedElement.cpp:
        (WebCore::HTMLEmbedElement::parseMappedAttribute):
        (WebCore::HTMLEmbedElement::insertedIntoDocument):
        (WebCore::HTMLEmbedElement::removedFromDocument):
        * html/HTMLEmbedElement.h:
        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::insertedIntoDocument):
        (WebCore::HTMLFormElement::removedFromDocument):
        (WebCore::HTMLFormElement::parseMappedAttribute):
        * html/HTMLFormElement.h:
        * html/HTMLImageElement.cpp:
        (WebCore::HTMLImageElement::parseMappedAttribute):
        (WebCore::HTMLImageElement::insertedIntoDocument):
        (WebCore::HTMLImageElement::removedFromDocument):
        * html/HTMLImageElement.h:
        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::parseMappedAttribute):
        (WebCore::HTMLObjectElement::insertedIntoDocument):
        (WebCore::HTMLObjectElement::removedFromDocument):
        (WebCore::HTMLObjectElement::updateDocNamedItem):
        (WebCore::HTMLObjectElement::formControlName):
        * html/HTMLObjectElement.h:
        * html/HTMLPlugInElement.h:

2011-12-21  Simon Fraser  <simon.fraser@apple.com>

        Clean up RenderLayer code that applies filters and transforms
        https://bugs.webkit.org/show_bug.cgi?id=75032
        
        This also fixes:
            Nested filters not working as expected
            https://bugs.webkit.org/show_bug.cgi?id=75029
            
            Filter region is computed incorrectly
            https://bugs.webkit.org/show_bug.cgi?id=74889

        Reviewed by James Robinson.

        RenderLayer::paintLayer() had this confusing behavior where,
        for transforms, it would change the CTM and then re-enter
        the method with a bit set. This was partially, but incorrectly
        copied for filters, so things like nested filters didn't work,
        and the case of a filter + transform was confused.
        
        Clean up by making RenderLayer::paintLayer() be a fairly simple
        method that handles the re-entering with bit set, for both
        transforms and filters. The bulk of the code in RenderLayer::paintLayer()
        is now in RenderLayer::paintLayerContents(). There is no
        behavior change for transforms.
        
        There are two fixes for filters. First, instead of just using
        the layer size to compute the bounds of the filtered region,
        use transparencyClipBox() which already takes descendents, box
        decorations etc into account (it's what we use for opacity).
        Some cleanup of the coordinate math, and separation from transforms
        code was also achieved.
        
        Second, make sure we toggle off the PaintLayerAppliedFilters bit
        (which was renamed for clarity) for sublayers, so that sublayers
        paint their filters correctly.

        Tests: css3/filters/filter-region.html
               css3/filters/nested-filters.html

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::paintLayer):
        (WebCore::RenderLayer::paintLayerContents):
        (WebCore::RenderLayer::updateFilterBackingStore):
        * rendering/RenderLayer.h:

2011-12-21  Per-Erik Brodin  <per-erik.brodin@ericsson.com>

        Discard event data not followed by an empty line before eof when parsing an event-stream
        https://bugs.webkit.org/show_bug.cgi?id=68833

        Reviewed by Alexey Proskuryakov.

        Test: http/tests/eventsource/eventsource-eof.html

        * page/EventSource.cpp:
        (WebCore::EventSource::didFinishLoading):
        (WebCore::EventSource::parseEventStreamLine):
        * page/EventSource.h:

2011-12-21  Andreas Kling  <kling@webkit.org>

        Automate elements' registration as document namedItem/extraNamedItem.
        <http://webkit.org/b/74991>

        Reviewed by Antti Koivisto.

        Remove caching of the "id" and "name" attributes on applet, embed, form,
        image and object elements. We were caching them to keep the document's
        map of named and "extra named" (named by id) item counts in sync.

        Instead, add a hook to Element::willModifyAttribute() that detects when
        the attributes are being changed and handle the registration/unregistration
        automatically if the element returns true for shouldRegisterAsNamedItem()
        or shouldRegisterAsExtraNamedItem() respectively.

        This shrinks the elements by two AtomicStrings (8 or 16 bytes) each.

        IFrame elements retain the old mechanism for now, as there are some subtle
        differences to how that's handled.

        * dom/Node.h:
        (WebCore::Node::hasName):
        (WebCore::Node::setHasName):

            Cache whether we have a "name" attribute or not (1 bit on Node.)
            This is done in order to minimize the overhead added to Element's
            insertedIntoDocument() and removeFromDocument().

        * dom/Element.cpp:
        (WebCore::Element::updateNamedItemRegistration):
        (WebCore::Element::updateExtraNamedItemRegistration):

            Added. Called when the "name" and "id" attributes are changed.
            Updates the document's named item maps accordingly.

        (WebCore::Element::insertedIntoDocument):
        (WebCore::Element::removedFromDocument):

            Make sure updateName() is called in addition to updateId() when applicable.

        (WebCore::Element::attributeChanged):

            Update the Node's has-name flag as appropriate.

        * dom/Element.h:
        (WebCore::Element::shouldRegisterAsNamedItem):
        (WebCore::Element::shouldRegisterAsExtraNamedItem):

            Added. If an element returns true for these, it will be automatically
            registered with the document when the name/id attribute changes.

        (WebCore::Element::updateId):
        (WebCore::Element::updateName):

            Register/unregister from the document's named item maps as appropriate.

        (WebCore::Element::willModifyAttribute):

            Add updateName() hook in addition to the existing updateId() hook.

        * dom/NamedNodeMap.cpp:
        (WebCore::NamedNodeMap::setAttributes):

            Make sure updateName() is called when we're cloning the attributes
            from another element.

        * html/HTMLAppletElement.cpp:
        (WebCore::HTMLAppletElement::parseMappedAttribute):
        * html/HTMLAppletElement.h:
        * html/HTMLEmbedElement.cpp:
        (WebCore::HTMLEmbedElement::parseMappedAttribute):
        (WebCore::HTMLEmbedElement::insertedIntoDocument):
        * html/HTMLEmbedElement.h:
        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::insertedIntoDocument):
        (WebCore::HTMLFormElement::removedFromDocument):
        (WebCore::HTMLFormElement::parseMappedAttribute):
        * html/HTMLFormElement.h:
        * html/HTMLImageElement.cpp:
        (WebCore::HTMLImageElement::parseMappedAttribute):
        (WebCore::HTMLImageElement::insertedIntoDocument):
        * html/HTMLImageElement.h:
        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::parseMappedAttribute):
        (WebCore::HTMLObjectElement::insertedIntoDocument):
        (WebCore::HTMLObjectElement::removedFromDocument):
        * html/HTMLObjectElement.h:
        * html/HTMLPlugInElement.h:

            Remove duplicated code that is now handled by Element.

        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::updateDocNamedItem):
        (WebCore::HTMLObjectElement::formControlName):

            Use fastGetAttribute() since we no longer cache the name.

2011-12-21  Wyatt Carss  <wcarss@chromium.org>

        Reviewed by Ryosuke Niwa.

        strong and b should be font-weight: bold, not bolder
        https://bugs.webkit.org/show_bug.cgi?id=56400

        Test: fast/html/font-weight-bold-for-b-and-strong.html

        * css/html.css:
        (strong, b):

2011-12-21  Florin Malita  <fmalita@google.com>

        Improper handling of foreignobjects nested in svg groups
        https://bugs.webkit.org/show_bug.cgi?id=69762

        Reviewed by Nikolas Zimmermann.

        Tests: svg/foreignObject/repaint-rect-coordinates-expected.html
               svg/foreignObject/repaint-rect-coordinates.html

        * rendering/svg/RenderSVGForeignObject.h:
        (WebCore::RenderSVGForeignObject::objectBoundingBox):
        (WebCore::RenderSVGForeignObject::strokeBoundingBox):
        (WebCore::RenderSVGForeignObject::repaintRectInLocalCoordinates):
        Return local coordinates.

2011-12-21  Anders Carlsson  <andersca@apple.com>

        Make it possible to use contents layers in scrollbars
        https://bugs.webkit.org/show_bug.cgi?id=75044

        Reviewed by Simon Fraser.

        * page/ScrollingCoordinator.h:
        * page/mac/ScrollingCoordinatorMac.mm:
        (WebCore::ScrollingCoordinator::frameViewHorizontalScrollbarLayerDidChange):
        (WebCore::ScrollingCoordinator::frameViewVerticalScrollbarLayerDidChange):
        Don't pass const GraphicsLayers to these member functions; we need to be able to mutate them.

        * platform/ScrollView.cpp:
        (positionScrollbarLayer):
        If the scrollbar layer has a contents layer, just update its contents rect. Otherwise,
        invalidate the scrollbar layer.

2011-12-21  Anders Carlsson  <andersca@apple.com>

        Always reposition the scrollbar layers when the frame view size changes
        https://bugs.webkit.org/show_bug.cgi?id=75035

        Reviewed by Darin Adler.

        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::updateOverflowControlsLayers):
        Remove the layersChanged check and unconditionally call positionScrollbarLayers(). This only
        worked by accident before because we were recreating horizontal and vertical scrollbars on every call.

2011-12-21  Michał Pakuła vel Rutka  <m.pakula@samsung.com>

        [EFL] Add 'Select All' option to context menus in WebKit-EFL.
        https://bugs.webkit.org/show_bug.cgi?id=74920

        Reviewed by Eric Seidel.

        Enable 'Select All' option to context menus called on input fields in WebKit-EFL
        as it is enabled in GTK and QT ports.

        * page/ContextMenuController.cpp:
        (WebCore::ContextMenuController::contextMenuItemSelected): Add 'Select All' option.
        (WebCore::ContextMenuController::populate): Append 'Select All' item.
        (WebCore::ContextMenuController::checkOrEnableIfNeeded): Enable 'Select All' option.
        * platform/ContextMenuItem.h: Add 'Select All' option.
        * platform/LocalizationStrategy.h: Add constructor for 'Select All' option.
        * platform/LocalizedStrings.h: Add constructor for 'Select All' option.

2011-12-20  Adam Klein  <adamk@chromium.org>

        Make calls to willModifyAttribute and attributeChanged symmetrical
        https://bugs.webkit.org/show_bug.cgi?id=74987

        Reviewed by Ryosuke Niwa.

        Previously, calls to Element::willModifyAttribute sometimes happened
        in one method while calls to Element::attributeChanged happened in
        another. This change makes them symmetrical for all the cases I know
        about: setAttribute, removeAttribute, setNamedItem, removeNamedItem.

        To accomplish this, NamedNodeMap::addAttribute, removeAttribute, and
        replaceAttribute have been reduced to their pure functionality of
        manipulating m_attributes, and their callers are left responsible for
        properly notifying the Element of the underlying changes.

        One other bit of refactoring was done: to simplify
        Element::setAttribute, it now dispatches to
        Element::removeAttributeInternal if the incoming value is null.

        No new tests, no change in behavior.

        * dom/Attribute.h:
        * dom/Element.cpp:
        (WebCore::Element::removeAttribute):
        (WebCore::Element::removeAttributeInternal): Added, sharing code
        between the two removeAttribute overloads.
        (WebCore::Element::setAttributeInternal):
        * dom/Element.h:
        * dom/NamedNodeMap.cpp:
        (WebCore::NamedNodeMap::setNamedItem):
        (WebCore::NamedNodeMap::removeNamedItem):
        (WebCore::NamedNodeMap::addAttribute):
        (WebCore::NamedNodeMap::removeAttribute):
        (WebCore::NamedNodeMap::replaceAttribute):
        * svg/properties/SVGAnimatedPropertySynchronizer.h:
        Call Element::setAttribute unless the attribute is already present,
        and add a comment explaining why the code looks the way it does.

2011-12-21  Adrienne Walker  <enne@google.com>

        Unreviewed, rolling out r103408.
        http://trac.webkit.org/changeset/103408
        https://bugs.webkit.org/show_bug.cgi?id=75017

        WorkerDevToolsSanityTest.InspectSharedWorker is failing
        (Requested by loislo_ on #webkit).

        * inspector/front-end/CompilerSourceMapping.js:
        (WebInspector.ClosureCompilerSourceMapping):
        (WebInspector.ClosureCompilerSourceMapping.prototype.sources):
        (WebInspector.ClosureCompilerSourceMapping.prototype._parseMap):
        * inspector/front-end/DebuggerPresentationModel.js:
        (WebInspector.DebuggerPresentationModel.prototype.setCompilerSourceMapping):
        * inspector/front-end/utilities.js:
        (String.prototype.asParsedURL):

2011-12-21  Stephen White  <senorblanco@chromium.org>

        Fix CSS filters crash on zero-sized elements.
        https://bugs.webkit.org/show_bug.cgi?id=75020

        Reviewed by Dean Jackson.

        Test: css3/filters/filter-empty-element-crash.html

        * rendering/FilterEffectRenderer.cpp:
        (WebCore::FilterEffectRenderer::inputContext):
        Protect against null ImageBuffer.
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::paintLayer):
        Protect against null GraphicsContext.

2011-12-21  Anders Carlsson  <andersca@apple.com>

        Inform the scrolling coordinator when scrollbar layers come and go
        https://bugs.webkit.org/show_bug.cgi?id=75028

        Reviewed by Andreas Kling and Simon Fraser.

        * page/ScrollingCoordinator.h:
        * page/mac/ScrollingCoordinatorMac.mm:
        (WebCore::ScrollingCoordinator::setFrameViewHorizontalScrollbarLayer):
        (WebCore::ScrollingCoordinator::setFrameViewVerticalScrollbarLayer):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::updateOverflowControlsLayers):

2011-12-20  Dmitry Lomov  <dslomov@google.com>

        [Chromium] DatabaseTrackerChromium: iterating DatabaseSet races with Database disposal on worker thread 
        https://bugs.webkit.org/show_bug.cgi?id=74554

        Reviewed by David Levin.

        Covered by existing tests in fast/workers/storage.

        * storage/chromium/DatabaseTrackerChromium.cpp:
        (WebCore::NotifyDatabaseObserverOnCloseTask::create):
        (WebCore::NotifyDatabaseObserverOnCloseTask::performTask):
        (WebCore::NotifyDatabaseObserverOnCloseTask::isCleanupTask):
        (WebCore::NotifyDatabaseObserverOnCloseTask::NotifyDatabaseObserverOnCloseTask):
        (WebCore::DatabaseTracker::removeOpenDatabase):

2011-12-21  Eric Carlson  <eric.carlson@apple.com>

        HTMLMediaElement::configureTextTrackDisplay is unnecessary
        https://bugs.webkit.org/show_bug.cgi?id=74945

        Reviewed by Darin Adler.

        Nothing to test, just removing redundant code. Correct behavior tested by 
        media/track/track-cue-rendering.html and media/track/track-cue-nothing-to-render.html.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::configureTextTrackDisplay): Don't show and hide track, just call
            updateTextTrackDisplay and it will do the right thing.

2011-12-21  Anders Carlsson  <andersca@apple.com>

        ScrollingCoordinator functions should take FrameView objects
        https://bugs.webkit.org/show_bug.cgi?id=75023

        Reviewed by Sam Weinig.

        * page/ScrollingCoordinator.cpp:
        (WebCore::ScrollingCoordinator::syncFrameViewGeometry):
        * page/ScrollingCoordinator.h:
        * page/mac/ScrollingCoordinatorMac.mm:
        (WebCore::ScrollingCoordinator::setFrameViewScrollLayer):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::frameViewDidChangeSize):
        (WebCore::RenderLayerCompositor::updateRootLayerPosition):
        (WebCore::RenderLayerCompositor::ensureRootLayer):

2011-12-21  Anders Carlsson  <andersca@apple.com>

        Get rid of ScrollableAreaClient
        https://bugs.webkit.org/show_bug.cgi?id=75021

        Reviewed by Sam Weinig.

        The ScrollableAreaClient interface will just add an extra level of indirection between ScrollableArea and
        ScrollAnimator, which is unnecessary. Eventually I'd like to rename ScrollAnimator to something that better reflects
        all the different responsibilities it currently has.

        * WebCore.exp.in:
        * page/FrameView.cpp:
        (WebCore::FrameView::FrameView):
        * page/ScrollingCoordinator.cpp:
        * page/ScrollingCoordinator.h:
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::ScrollView):
        * platform/ScrollView.h:
        * platform/ScrollableArea.cpp:
        (WebCore::ScrollableArea::ScrollableArea):
        * platform/ScrollableArea.h:
        * platform/ScrollableAreaClient.h: Removed.

2011-12-21  Anders Carlsson  <andersca@apple.com>

        Don't recreate scrollbar layers whenever the frame view size changes
        https://bugs.webkit.org/show_bug.cgi?id=75018

        Reviewed by Darin Adler and Simon Fraser.

        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::updateOverflowControlsLayers):

2011-12-20  Andrey Kosyakov  <caseq@chromium.org>

        Web Inspector: [Extension API] refactor extension API build code, expose experimental APIs conditionally in chromium
        https://bugs.webkit.org/show_bug.cgi?id=74941

        Reviewed by Pavel Feldman.

        * WebCore.gypi:
        * inspector/front-end/ExtensionAPI.js:
        (buildPlatformExtensionAPI.platformExtensionAPI):
        (buildPlatformExtensionAPI):
        (buildExtensionAPIInjectedScript):
        * inspector/front-end/ExtensionServer.js:
        (WebInspector.ExtensionServer.prototype._addExtensions):
        (WebInspector.ExtensionServer.prototype._addExtension):
        (window.addExtension):

2011-12-12  Pavel Podivilov  <podivilov@chromium.org>

        Web Inspector: fix source map url resolving.
        https://bugs.webkit.org/show_bug.cgi?id=74305

        Reviewed by Pavel Feldman.

        Also fix the bug with repeated source urls in mapping sections.

        * inspector/front-end/CompilerSourceMapping.js:
        (WebInspector.ClosureCompilerSourceMapping):
        (WebInspector.ClosureCompilerSourceMapping.prototype.sources):
        (WebInspector.ClosureCompilerSourceMapping.prototype._parseMap):
        (WebInspector.ClosureCompilerSourceMapping.prototype._resolveSourceMapURL):
        * inspector/front-end/DebuggerPresentationModel.js:
        (WebInspector.DebuggerPresentationModel.prototype.installCompilerSourceMapping):
        * inspector/front-end/utilities.js:
        (String.prototype.asParsedURL):

2011-12-21  Renata Hodovan  <reni@webkit.org>

        New renderer for SVGRectElement
        https://bugs.webkit.org/show_bug.cgi?id=65769

        Rubber-stamped by Zoltan Herczeg.

        Change the return value of RenderSVGRect::renderName() from RenderSVGPath to RenderSVGRect.
        This is a follow-up patch of r101517 to correct the DRT output.

        * rendering/svg/RenderSVGRect.h:
        (WebCore::RenderSVGRect::renderName):

2011-12-21  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: TabbedPane should use tabElement width measuring to layout tab elements when width is too small to fit them.
        https://bugs.webkit.org/show_bug.cgi?id=75005

        Reviewed by Pavel Feldman.

        Test: inspector/tabbed-pane-max-tab-width-calculation.html

        * inspector/front-end/NetworkItemView.js:
        (WebInspector.NetworkItemView.prototype.wasShown):
        * inspector/front-end/TabbedPane.js:
        (WebInspector.TabbedPane):
        (WebInspector.TabbedPane.prototype.appendTab):
        (WebInspector.TabbedPane.prototype._createTabElement):
        (WebInspector.TabbedPane.prototype.onResize):
        (WebInspector.TabbedPane.prototype._maybeMeasureAndUpdate):
        (WebInspector.TabbedPane.prototype._measureTab):
        (WebInspector.TabbedPane.prototype._updateWidths):
        (WebInspector.TabbedPane.prototype._calculateMaxWidth):
        (WebInspector.TabbedPaneTab):
        * inspector/front-end/inspector.css:
        (.tabbed-pane-header):
        (.tabbed-pane-header-tabs):
        (.tabbed-pane-header-tab):
        (.tabbed-pane-header-tab.measuring):
        (.tabbed-pane-header-tab.selected):
        * inspector/front-end/scriptsPanel.css:
        (#scripts-navigator-tabbed-pane .tabbed-pane-header-tabs):

2011-12-09  Pavel Podivilov  <podivilov@chromium.org>

        Web Inspector: auto detect source map url.
        https://bugs.webkit.org/show_bug.cgi?id=74088

        Reviewed by Pavel Feldman.

        Check to see if "X-SourceMap" HTTP response header was sent with script resource.
        Header value will be used as auto suggestion for source map url in UI.

        * inspector/Inspector.json:
        * inspector/InspectorDebuggerAgent.cpp:
        (WebCore::InspectorDebuggerAgent::sourceMapURLForScript):
        (WebCore::InspectorDebuggerAgent::didParseSource):
        * inspector/InspectorDebuggerAgent.h:
        * inspector/front-end/DebuggerModel.js:
        (WebInspector.DebuggerModel.prototype._parsedScriptSource):
        (WebInspector.DebuggerDispatcher.prototype.scriptParsed):
        * inspector/front-end/RawSourceCode.js:
        (WebInspector.RawSourceCode):
        * inspector/front-end/Script.js:
        (WebInspector.Script):

2011-12-21  Pierre Rossi  <pierre.rossi@gmail.com>

        [Qt] Mobile theme refinements
        https://bugs.webkit.org/show_bug.cgi?id=74727

        Mostly to replace most of the rounded-rect-shaped
        controls with squircle-shaped ones.

        Reviewed by Kenneth Rohde Christiansen.

        No new tests needed.

        * platform/qt/RenderThemeQtMobile.cpp:
        (WebCore::drawControlBackground):
        (WebCore::painterScale):
        (WebCore::borderPen):
        (WebCore::StylePainterMobile::drawCheckableBackground): Toned down the gradient a bit.
        (WebCore::StylePainterMobile::findCheckBox):
        (WebCore::StylePainterMobile::drawRadio):
        (WebCore::StylePainterMobile::findRadio):
        (WebCore::StylePainterMobile::drawMultipleComboButton): increase spacing between the dots.
        (WebCore::StylePainterMobile::drawSimpleComboButton): attempt to improve readability.
        (WebCore::StylePainterMobile::getButtonImageSize):
        (WebCore::StylePainterMobile::findComboButton):
        (WebCore::StylePainterMobile::drawLineEdit):
        (WebCore::StylePainterMobile::findLineEdit):
        (WebCore::StylePainterMobile::drawPushButton):
        (WebCore::StylePainterMobile::findPushButton):
        (WebCore::StylePainterMobile::drawComboBox):
        (WebCore::StylePainterMobile::drawProgress):
        (WebCore::StylePainterMobile::drawSliderThumb):
        (WebCore::RenderThemeQtMobile::computeSizeBasedOnStyle):
        (WebCore::RenderThemeQtMobile::paintTextField):
        * platform/qt/RenderThemeQtMobile.h:

2011-12-21  Alexander Pavlov  <apavlov@chromium.org>

        Web Inspector: CSSStyleSheet::cssRules can return 0 and InspectorStyleSheet dosen't check
        https://bugs.webkit.org/show_bug.cgi?id=74938

        Prevent security checks when retrieving a just-added CSS rule from the "inspector stylesheet".

        Reviewed by Pavel Feldman.

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

2011-12-21  Renata Hodovan  <reni@webkit.org>

        Fulfill FIXME in  HTMLLinkElement.h.
        https://bugs.webkit.org/show_bug.cgi?id=74278

        Rename isStyleSheetLoading() method to styleSheetIsLoading().
        This new one has the correct grammar.

        Reviewed by Darin Adler.

        No new tests because the functionality remains the same.

        * dom/Document.cpp:
        (WebCore::Document::recalcStyleSelector):
        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::setDisabledState):
        (WebCore::HTMLLinkElement::styleSheetIsLoading):
        (WebCore::HTMLLinkElement::sheetLoaded):
        * html/HTMLLinkElement.h:

2011-12-21  Yosifumi Inoue  <yosin@chromium.org>

        [Forms] Add OVERRIDE to WebCore/html/*InputType.h
        https://bugs.webkit.org/show_bug.cgi?id=74996

        Reviewed by Kent Tamura.

        No new tests. Changes are just for compilation.

        * html/BaseButtonInputType.h: Add OVERRIDE.
        * html/BaseCheckableInputType.h: Add OVERRIDE.
        * html/BaseDateAndTimeInputType.h: Add OVERRIDE.
        * html/BaseTextInputType.h: Add OVERRIDE.
        * html/ButtonInputType.h: Add OVERRIDE.
        * html/CheckboxInputType.h: Add OVERRIDE.
        * html/ColorInputType.h: Add OVERRIDE.
        * html/DateInputType.h: Add OVERRIDE.
        * html/DateTimeInputType.h: Add OVERRIDE.
        * html/DateTimeLocalInputType.h: Add OVERRIDE.
        * html/EmailInputType.h: Add OVERRIDE.
        * html/FileInputType.h: Add OVERRIDE.
        * html/HiddenInputType.h: Add OVERRIDE.
        * html/ImageInputType.h: Add OVERRIDE.
        * html/IsIndexInputType.h: Add OVERRIDE.
        * html/MonthInputType.h: Add OVERRIDE.
        * html/NumberInputType.h: Add OVERRIDE.
        * html/PasswordInputType.h: Add OVERRIDE.
        * html/RadioInputType.h: Add OVERRIDE.
        * html/RangeInputType.h: Add OVERRIDE.
        * html/ResetInputType.h: Add OVERRIDE.
        * html/SearchInputType.h: Add OVERRIDE.
        * html/SubmitInputType.h: Add OVERRIDE.
        * html/TelephoneInputType.h: Add OVERRIDE.
        * html/TextFieldInputType.h: Add OVERRIDE.
        * html/TextInputType.h: Add OVERRIDE.
        * html/TimeInputType.h: Add OVERRIDE.
        * html/URLInputType.h: Add OVERRIDE.
        * html/WeekInputType.h: Add OVERRIDE.

2011-12-21  Matt Falkenhagen  <falken@chromium.org>

        Add all ICU languages to LocaleToScriptMappingDefault.cpp
        https://bugs.webkit.org/show_bug.cgi?id=67274

        Reviewed by Kent Tamura.

        This better mimics the behavior of LocaleToScriptMappingICU.cpp. ICU
        languages from ICU 3.6 are added. Also, script suffix in locale is
        handled, so for example "fa_Latn" is mapped to Latin while "fa" is mapped to
        Arabic.

        No new tests, there is no visible effect until default per-script fonts
        are added to non-ICU ports (alternatively, we could extend DumpRenderTree 
        to support overridePreference for per-script fonts as in bug 71110).

        * platform/text/LocaleToScriptMappingDefault.cpp:
        (WebCore::getScriptCode): add script name to script code mapping
        (WebCore::localeToScriptCodeForFontSelection): add ICU languages to map 

2011-12-20  Mary Wu  <mary.wu@torchmobile.com.cn>

        Upstream PageClientBlackBerry.h into WebCore/platform/blackberry
        https://bugs.webkit.org/show_bug.cgi?id=74169

        Reviewed by Daniel Bates.

        Initial upstream, no new tests.

        * platform/blackberry/PageClientBlackBerry.h: Added.

2011-12-20  Mary Wu  <mary.wu@torchmobile.com.cn>

        Upstream PlatformMouseEvent and LocalizedStrings into WebCore/platform/blackberry
        https://bugs.webkit.org/show_bug.cgi?id=74383

        Reviewed by Daniel Bates.

        Other Main Contributors:
        Rob Buis <rbuis@rim.com>
        Mike Fenton <mifenton@rim.com> 

        Initial upstream, no new tests.

        * PlatformBlackBerry.cmake: Modified to rename Localizations.cpp to LocalizedStringsBlackBerry.cpp
        * platform/blackberry/LocalizedStringsBlackBerry.cpp: Added.
        * platform/blackberry/PlatformMouseEventBlackBerry.cpp: Added.

2011-12-20  Peter Rybin  <peter.rybin@gmail.com>

        Web Inspector: CodeGenerator should not use pointers for out params of RefPtr type.
        https://bugs.webkit.org/show_bug.cgi?id=69366

        Reviewed by Pavel Feldman.

        Generator fixed and all usages are changed manually.

        * inspector/CodeGeneratorInspector.py:
        (RawTypes.BaseType):
        (RawTypes.BaseType.get_output_argument_prefix):
        (RawTypes.Object.get_output_argument_prefix):
        (RawTypes.Array.get_output_argument_prefix):
        (RawTypes):
        (Generator.process_command):
        * inspector/InspectorApplicationCacheAgent.cpp:
        (WebCore::InspectorApplicationCacheAgent::getFramesWithManifests):
        (WebCore::InspectorApplicationCacheAgent::getApplicationCacheForFrame):
        * inspector/InspectorApplicationCacheAgent.h:
        * inspector/InspectorCSSAgent.cpp:
        (WebCore::InspectorCSSAgent::clearFrontend):
        (WebCore::InspectorCSSAgent::getMatchedStylesForNode):
        (WebCore::InspectorCSSAgent::getInlineStylesForNode):
        (WebCore::InspectorCSSAgent::getComputedStyleForNode):
        (WebCore::InspectorCSSAgent::getAllStyleSheets):
        (WebCore::InspectorCSSAgent::getStyleSheet):
        (WebCore::InspectorCSSAgent::setPropertyText):
        (WebCore::InspectorCSSAgent::toggleProperty):
        (WebCore::InspectorCSSAgent::setRuleSelector):
        (WebCore::InspectorCSSAgent::addRule):
        (WebCore::InspectorCSSAgent::getSupportedCSSProperties):
        (WebCore::InspectorCSSAgent::stopSelectorProfiler):
        (WebCore::InspectorCSSAgent::stopSelectorProfilerImpl):
        * inspector/InspectorCSSAgent.h:
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::getDocument):
        (WebCore::InspectorDOMAgent::querySelectorAll):
        (WebCore::InspectorDOMAgent::getEventListenersForNode):
        (WebCore::InspectorDOMAgent::getSearchResults):
        (WebCore::InspectorDOMAgent::resolveNode):
        (WebCore::InspectorDOMAgent::getAttributes):
        * inspector/InspectorDOMAgent.h:
        * inspector/InspectorDOMStorageAgent.cpp:
        (WebCore::InspectorDOMStorageAgent::getDOMStorageEntries):
        * inspector/InspectorDOMStorageAgent.h:
        * inspector/InspectorDatabaseAgent.cpp:
        (WebCore::InspectorDatabaseAgent::getDatabaseTableNames):
        * inspector/InspectorDatabaseAgent.h:
        * inspector/InspectorDebuggerAgent.cpp:
        (WebCore::InspectorDebuggerAgent::setBreakpointByUrl):
        (WebCore::InspectorDebuggerAgent::setBreakpoint):
        (WebCore::InspectorDebuggerAgent::searchInContent):
        (WebCore::InspectorDebuggerAgent::setScriptSource):
        (WebCore::InspectorDebuggerAgent::getFunctionLocation):
        (WebCore::InspectorDebuggerAgent::evaluateOnCallFrame):
        * inspector/InspectorDebuggerAgent.h:
        * inspector/InspectorMemoryAgent.cpp:
        (WebCore::InspectorMemoryAgent::getDOMNodeCount):
        * inspector/InspectorMemoryAgent.h:
        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::getCookies):
        (WebCore::InspectorPageAgent::getResourceTree):
        (WebCore::InspectorPageAgent::searchInResource):
        (WebCore::InspectorPageAgent::searchInResources):
        * inspector/InspectorPageAgent.h:
        * inspector/InspectorProfilerAgent.cpp:
        (WebCore::InspectorProfilerAgent::getProfileHeaders):
        (WebCore::InspectorProfilerAgent::getProfile):
        (WebCore::InspectorProfilerAgent::getObjectByHeapObjectId):
        * inspector/InspectorProfilerAgent.h:
        * inspector/InspectorRuntimeAgent.cpp:
        (WebCore::InspectorRuntimeAgent::evaluate):
        (WebCore::InspectorRuntimeAgent::callFunctionOn):
        (WebCore::InspectorRuntimeAgent::getProperties):
        * inspector/InspectorRuntimeAgent.h:

2011-12-20  Eric Penner  <epenner@google.com>

        [chromium] m_triggerIdlePaints not reset after a compositeAndReadback
        https://bugs.webkit.org/show_bug.cgi?id=74974

        Reviewed by James Robinson.

        * platform/graphics/chromium/cc/CCLayerTreeHost.cpp:
        (WebCore::CCLayerTreeHost::compositeAndReadback):

2011-12-20  David Levin  <levin@chromium.org>

        Move misplaced assert in SQLiteStatement.cpp
        https://bugs.webkit.org/show_bug.cgi?id=74975

        Reviewed by Dmitry Titov.

        The test is coming with bug 74666.

        * platform/sql/SQLiteStatement.cpp:
        (WebCore::SQLiteStatement::step): If a database was interrupted
        before the prepare method was called, then m_isPrepared will be
        false, so I moved the assert to be after the check for interrupted.

2011-12-20  Eric Carlson  <eric.carlson@apple.com>

        WebVTT cues sometimes render when they should not
        https://bugs.webkit.org/show_bug.cgi?id=74873

        Not reviewed: update Chromium to pass new test added in r103371.

        * html/shadow/MediaControlRootElementChromium.cpp:
        (WebCore::MediaControlRootElementChromium::updateTextTrackDisplay):

2011-12-20  Andreas Kling  <kling@webkit.org>

        HTMLOptionsCollection: Remove incorrect FIXME about having a base class.
        <http://webkit.org/b/74973>

        Reviewed by Alexey Proskuryakov.

        HTMLOptionsCollection should indeed inherit from HTMLCollection according to
        current HTML5, so remove the comment saying we should change that.

        Spec: http://www.whatwg.org/specs/web-apps/current-work/#htmloptionscollection

        * html/HTMLOptionsCollection.idl:

2011-12-20  Florin Malita  <fmalita@google.com>

        td element ignores zero width/height input element
        https://bugs.webkit.org/show_bug.cgi?id=74636

        Reviewed by Kent Tamura.

        Test: fast/forms/input-zero-width.html

        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::computePreferredLogicalWidths):
        Relax the attribute test to allow setting widths == 0.

2011-12-20  Adam Klein  <adamk@chromium.org>

        Avoid unnecessary work when removing attributes from an element
        https://bugs.webkit.org/show_bug.cgi?id=74953

        Reviewed by Ryosuke Niwa.

        Various codepaths in Element and NamedNodeMap repeatedly search
        through the list of attributes during a single operation. To avoid
        this, I've added new getters to NamedNodeMap that return indices
        rather than Attribute*s (they return WTF::notFound if no match is
        found). These new methods are now used during removeAttribute
        operations, as well as setAttribute and NamedNodeMap::setNamedItem
        (along with a new replaceAttribute helper method).

        The other optimization here involves the creation/destruction
        of never-references Attr nodes. This is now avoided by calling
        NamedNodeMap::removeAttribute directly instead of going through
        NamedNodeMap::removeNamedItem.

        As a cleanup after the above changes, the ExceptionCode argument is
        gone from Element::removeAttribute and friends (it was never set
        previously). The bulk of the files mentioned below are simply updating
        callers to these methods.

        No new tests, no change in behavior expected.

        * dom/DatasetDOMStringMap.cpp:
        (WebCore::DatasetDOMStringMap::deleteItem):
        * dom/Element.cpp:
        (WebCore::Element::removeAttribute):
        (WebCore::Element::setBooleanAttribute):
        (WebCore::Element::removeAttributeNS):
        (WebCore::Element::setAttribute):
        (WebCore::Element::setAttributeInternal):
        * dom/Element.h:
        * dom/Element.idl:
        * dom/NamedNodeMap.cpp:
        (WebCore::NamedNodeMap::setNamedItem):
        (WebCore::NamedNodeMap::removeNamedItem):
        (WebCore::NamedNodeMap::getAttributeItemIndexSlowCase):
        (WebCore::NamedNodeMap::replaceAttribute):
        (WebCore::NamedNodeMap::removeAttribute):
        * dom/NamedNodeMap.h:
        (WebCore::NamedNodeMap::getAttributeItem):
        (WebCore::NamedNodeMap::getAttributeItemIndex):
        (WebCore::NamedNodeMap::removeAttribute):
        * editing/ApplyStyleCommand.cpp:
        (WebCore::ApplyStyleCommand::pushDownInlineStyleAroundNode):
        * editing/InsertParagraphSeparatorCommand.cpp:
        (WebCore::InsertParagraphSeparatorCommand::cloneHierarchyUnderNewBlock):
        * editing/SplitElementCommand.cpp:
        (WebCore::SplitElementCommand::executeApply):
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::setContentEditable):
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::setType):
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::setAttributesAsText):
        (WebCore::InspectorDOMAgent::removeAttribute):
        * svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::transferUseAttributesToReplacedElement):

2011-12-20  Eric Carlson  <eric.carlson@apple.com>

        WebVTT cues sometimes render when they should not
        https://bugs.webkit.org/show_bug.cgi?id=74873

        Reviewed by Darin Adler.

        Test: media/track/track-cue-nothing-to-render.html

        * html/shadow/MediaControlRootElement.cpp:
        (WebCore::MediaControlRootElement::updateTextTrackDisplay): Don't return early if the current
            cue is empty so the previous cue is removed.

2011-12-20  Ami Fischman  <fischman@chromium.org>

        Don't crash on the second time VideoLayerChromium::createCCVideoLayer() is called
        https://bugs.webkit.org/show_bug.cgi?id=74963

        Reviewed by James Robinson.

        Manually tested by force-dropping the layer tree in CCLayerTreeHost::didBecomeInvisibleOnImplThread().
        Crashed before the fix, doesn't crash after.

        * platform/graphics/chromium/VideoLayerChromium.cpp:
        (WebCore::VideoLayerChromium::VideoLayerChromium):
        (WebCore::VideoLayerChromium::~VideoLayerChromium):
        (WebCore::VideoLayerChromium::createCCLayerImpl):
        * platform/graphics/chromium/VideoLayerChromium.h:

2011-12-20  Scott Graham  <scottmg@chromium.org>

        wouldTaintOrigin m_cleanURLs cache grows very large when data urls used
        https://bugs.webkit.org/show_bug.cgi?id=74957

        Reviewed by Kenneth Russell.

        No new tests, but memory usage of CanvasRenderingContext::m_cleanURLs
        is reduced.

        * html/canvas/CanvasRenderingContext.cpp:
        (WebCore::CanvasRenderingContext::wouldTaintOrigin):

2011-12-20  Greg Billock  <gbillock@google.com>

        Change adoptPtr(new ...) to ...::create in Page.cpp
        https://bugs.webkit.org/show_bug.cgi?id=74457

        Reviewed by Darin Adler.

        * dom/DeviceMotionController.cpp:
        (WebCore::DeviceMotionController::create):
        * dom/DeviceMotionController.h:
        * dom/DeviceOrientationController.cpp:
        (WebCore::DeviceOrientationController::create):
        * dom/DeviceOrientationController.h:
        * editing/FrameSelection.cpp:
        (WebCore::DragCaretController::create):
        * editing/FrameSelection.h:
        * history/BackForwardController.cpp:
        (WebCore::BackForwardController::create):
        * history/BackForwardController.h:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::create):
        * inspector/InspectorController.h:
        * loader/ProgressTracker.cpp:
        (WebCore::ProgressTracker::create):
        * loader/ProgressTracker.h:
        * notifications/NotificationController.cpp:
        (WebCore::NotificationController::create):
        * notifications/NotificationController.h:
        * page/Chrome.cpp:
        (WebCore::Chrome::create):
        * page/Chrome.h:
        * page/ContextMenuController.cpp:
        (WebCore::ContextMenuController::create):
        * page/ContextMenuController.h:
        * page/DragController.cpp:
        (WebCore::DragController::create):
        * page/DragController.h:
        * page/FocusController.cpp:
        (WebCore::FocusController::create):
        * page/FocusController.h:
        * page/GeolocationController.cpp:
        (WebCore::GeolocationController::create):
        * page/GeolocationController.h:
        * page/Page.cpp:
        (WebCore::Page::Page):
        (WebCore::Page::initGroup):
        (WebCore::Page::speechInput):
        * page/PageGroup.cpp:
        (WebCore::PageGroup::create):
        * page/PageGroup.h:
        * page/Settings.cpp:
        (WebCore::Settings::create):
        * page/Settings.h:
        * page/SpeechInput.cpp:
        (WebCore::SpeechInput::create):
        * page/SpeechInput.h:

2011-12-20  Ryosuke Niwa  <rniwa@webkit.org>

        Mac build fix after r103354.

        * platform/mac/ScrollAnimatorMac.mm:
        (systemUptime):

2011-12-20  Anders Carlsson  <andersca@apple.com>

        Add ScrollableArea::contentsResized and have it call the scroll animator
        https://bugs.webkit.org/show_bug.cgi?id=74966

        Reviewed by Sam Weinig.

        * WebCore.exp.in:
        * page/FrameView.cpp:
        (WebCore::FrameView::setContentsSize):
        (WebCore::FrameView::contentsResized):
        * page/FrameView.h:
        * platform/ScrollView.h:
        * platform/ScrollableArea.cpp:
        (WebCore::ScrollableArea::contentsResized):
        * platform/ScrollableArea.h:

2011-12-20  Simon Fraser  <simon.fraser@apple.com>

        requestAnimationFrame on Mac fires at 60fps even when drawing is much slower
        https://bugs.webkit.org/show_bug.cgi?id=74964

        Reviewed by Chris Marrin.
        
        On Mac requestAnimationFrame uses a CVDisplayLink, sending notifications
        from the display link thread to the main thread that the display link fired.
        However, there was no throttling on these notifications; if processing an event
        took a long time, notifications would pile up, and then get handled after
        the slow event completed.
        
        This would cause JS animations which animate by changing style to report
        60fps when their display framerate was much lower.
        
        Fix by throttling notifications from the display link thread to the web
        thread; if the previous event hasn't completed yet, don't send any new ones.

        No new tests, since testing this runtime behavior is hard.

        * platform/graphics/DisplayRefreshMonitor.cpp:
        (WebCore::DisplayRefreshMonitor::DisplayRefreshMonitor):
        (WebCore::DisplayRefreshMonitor::refreshDisplayOnMainThread):
        (WebCore::DisplayRefreshMonitor::notifyClients): Factored out of the
        static refreshDisplayOnMainThread method so we can use 'this'.
        * platform/graphics/DisplayRefreshMonitor.h:
        * platform/graphics/mac/DisplayRefreshMonitorMac.cpp:
        (WebCore::DisplayRefreshMonitor::displayLinkFired):

2011-12-20  Greg Billock  <gbillock@google.com>

        [Coverity] Fix leak in V8HTMLDocument
        https://bugs.webkit.org/show_bug.cgi?id=74943

        Reviewed by Adam Barth.

        * bindings/v8/custom/V8HTMLDocumentCustom.cpp:
        (WebCore::V8HTMLDocument::openCallback):

2011-12-20  Sailesh Agrawal <sail@chromium.org>

        Merge ScrollAnimatorChromiumMac.mm back to ScrollAnimatorMac
        https://bugs.webkit.org/show_bug.cgi?id=61144

        Reviewed by Beth Dakin.

        At a high level the main changes are:
            - replace #ifdefs in ScrollAnimatorMac and ScrollbarThemeMac with run time checks
            - delete duplicate code in ScrollbarThemeChromiumMac. Keep the paint code since it does tickmarks and SKIA stuff.
            - delete ScrollAnimatorChromiumMac since ScrollAnimatorMac does the exact same thing
            - delete ScrollbarOverlayUtilitiesChromiumMac since NSScrollerImpDetails does the same thing

        No new tests. Just refactoring.

        * WebCore.gyp/WebCore.gyp:
        * WebCore.gypi:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/chromium/ScrollAnimatorChromiumMac.h: Removed.
        * platform/chromium/ScrollAnimatorChromiumMac.mm: Removed.
        * platform/chromium/ScrollbarOverlayUtilitiesChromiumMac.h: Removed.
        * platform/chromium/ScrollbarOverlayUtilitiesChromiumMac.mm: Removed.
        * platform/chromium/ScrollbarThemeChromiumMac.h:
        * platform/chromium/ScrollbarThemeChromiumMac.mm:
        (WebCore::ScrollbarThemeChromiumMac::ScrollbarThemeChromiumMac):
        (WebCore::scrollbarPainterPaintTrack):
        (WebCore::ScrollbarThemeChromiumMac::paint):
        * platform/mac/EmptyProtocolDefinitions.h:
        * platform/mac/NSScrollerImpDetails.h:
        (WebCore::isScrollbarOverlayAPIAvailable):
        * platform/mac/NSScrollerImpDetails.mm: Added.
        (WebCore::isScrollbarOverlayAPIAvailable):
        (WebCore::recommendedScrollerStyle):
        * platform/mac/ScrollAnimatorMac.h:
        * platform/mac/ScrollAnimatorMac.mm:
        (scrollbarPainterForScrollbar):
        (WebCore::ScrollAnimatorMac::ScrollAnimatorMac):
        (WebCore::ScrollAnimatorMac::~ScrollAnimatorMac):
        (WebCore::ScrollAnimatorMac::notifyPositionChanged):
        (WebCore::ScrollAnimatorMac::contentAreaWillPaint):
        (WebCore::ScrollAnimatorMac::mouseEnteredContentArea):
        (WebCore::ScrollAnimatorMac::mouseExitedContentArea):
        (WebCore::ScrollAnimatorMac::mouseMovedInContentArea):
        (WebCore::ScrollAnimatorMac::mouseEnteredScrollbar):
        (WebCore::ScrollAnimatorMac::mouseExitedScrollbar):
        (WebCore::ScrollAnimatorMac::willStartLiveResize):
        (WebCore::ScrollAnimatorMac::contentsResized):
        (WebCore::ScrollAnimatorMac::willEndLiveResize):
        (WebCore::ScrollAnimatorMac::contentAreaDidShow):
        (WebCore::ScrollAnimatorMac::contentAreaDidHide):
        (WebCore::ScrollAnimatorMac::didBeginScrollGesture):
        (WebCore::ScrollAnimatorMac::didEndScrollGesture):
        (WebCore::ScrollAnimatorMac::didAddVerticalScrollbar):
        (WebCore::ScrollAnimatorMac::willRemoveVerticalScrollbar):
        (WebCore::ScrollAnimatorMac::didAddHorizontalScrollbar):
        (WebCore::ScrollAnimatorMac::willRemoveHorizontalScrollbar):
        (WebCore::ScrollAnimatorMac::cancelAnimations):
        (WebCore::ScrollAnimatorMac::setIsActive):
        (WebCore::ScrollAnimatorMac::updateScrollerStyle):
        (WebCore::ScrollAnimatorMac::initialScrollbarPaintTimerFired):
        * platform/mac/ScrollElasticityController.h:
        * platform/mac/ScrollbarThemeMac.h:
        * platform/mac/ScrollbarThemeMac.mm:
        (+[WebScrollbarPrefsObserver appearancePrefsChanged:]):
        (+[WebScrollbarPrefsObserver behaviorPrefsChanged:]):
        (WebCore::updateArrowPlacement):
        (WebCore::ScrollbarThemeMac::registerScrollbar):
        (WebCore::ScrollbarThemeMac::setIsCurrentlyDrawingIntoLayer):
        (WebCore::ScrollbarThemeMac::ScrollbarThemeMac):
        (WebCore::ScrollbarThemeMac::scrollbarThickness):
        (WebCore::ScrollbarThemeMac::usesOverlayScrollbars):
        (WebCore::ScrollbarThemeMac::updateScrollbarOverlayStyle):
        (WebCore::ScrollbarThemeMac::hasButtons):
        (WebCore::ScrollbarThemeMac::hasThumb):
        (WebCore::ScrollbarThemeMac::minimumThumbLength):
        (WebCore::ScrollbarThemeMac::scrollbarPartToHIPressedState):
        (WebCore::ScrollbarThemeMac::updateEnabledState):
        (WebCore::scrollbarPainterPaint):
        (WebCore::ScrollbarThemeMac::paint):

2011-12-20  Tony Chang  <tony@chromium.org>

        sizeof(RenderStyle) is 64 instead of 56 on Windows (x86)
        https://bugs.webkit.org/show_bug.cgi?id=74876

        Reviewed by Ryosuke Niwa.

        Move bit fields into a new class and use unsigned for all types so we
        align at 4 byte bounds. Also move the initializers into the header
        file (has the side benefit of not needing to duplicate the initializers
        in 3 places).

        Enable the compile assert on Windows.

        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::RenderStyle):
        * rendering/style/RenderStyle.h:
        (WebCore::RenderStyleBitfields::affectedByUncommonAttributeSelectors):
        (WebCore::RenderStyleBitfields::setAffectedByUncommonAttributeSelectors):
        (WebCore::RenderStyleBitfields::unique):
        (WebCore::RenderStyleBitfields::setUnique):
        (WebCore::RenderStyleBitfields::affectedByEmpty):
        (WebCore::RenderStyleBitfields::emptyState):
        (WebCore::RenderStyleBitfields::setEmptyState):
        (WebCore::RenderStyleBitfields::childrenAffectedByFirstChildRules):
        (WebCore::RenderStyleBitfields::setChildrenAffectedByFirstChildRules):
        (WebCore::RenderStyleBitfields::childrenAffectedByLastChildRules):
        (WebCore::RenderStyleBitfields::setChildrenAffectedByLastChildRules):
        (WebCore::RenderStyleBitfields::childrenAffectedByDirectAdjacentRules):
        (WebCore::RenderStyleBitfields::setChildrenAffectedByDirectAdjacentRules):
        (WebCore::RenderStyleBitfields::childrenAffectedByForwardPositionalRules):
        (WebCore::RenderStyleBitfields::setChildrenAffectedByForwardPositionalRules):
        (WebCore::RenderStyleBitfields::childrenAffectedByBackwardPositionalRules):
        (WebCore::RenderStyleBitfields::setChildrenAffectedByBackwardPositionalRules):
        (WebCore::RenderStyleBitfields::firstChildState):
        (WebCore::RenderStyleBitfields::setFirstChildState):
        (WebCore::RenderStyleBitfields::lastChildState):
        (WebCore::RenderStyleBitfields::setLastChildState):
        (WebCore::RenderStyleBitfields::childIndex):
        (WebCore::RenderStyleBitfields::setChildIndex):
        (WebCore::RenderStyleBitfields::setHasExplicitlyInheritedProperties):
        (WebCore::RenderStyleBitfields::hasExplicitlyInheritedProperties):

2011-12-20  Tony Chang  <tony@chromium.org>

        [chromium] enable WPO for WebCore libs in official builds
        https://bugs.webkit.org/show_bug.cgi?id=74947

        Reviewed by James Robinson.

        Also move enable_wexit_time_destructors to the top level variables
        so we don't have to add it to all targets.

        * WebCore.gyp/WebCore.gyp:

2011-12-20  Anders Carlsson  <andersca@apple.com>

        Add ScrollableArea wrappers for a bunch of ScrollAnimator member functions
        https://bugs.webkit.org/show_bug.cgi?id=74951

        Reviewed by Sam Weinig.

        * WebCore.exp.in:
        * page/EventHandler.cpp:
        (WebCore::EventHandler::mouseMoved):
        (WebCore::EventHandler::updateMouseEventTargetNode):
        * page/FocusController.cpp:
        (WebCore::FocusController::setActive):
        * page/FrameView.cpp:
        (WebCore::FrameView::didMoveOnscreen):
        (WebCore::FrameView::willMoveOffscreen):
        (WebCore::FrameView::notifyPageThatContentAreaWillPaint):
        * platform/ScrollableArea.cpp:
        (WebCore::ScrollableArea::contentAreaWillPaint):
        (WebCore::ScrollableArea::mouseEnteredContentArea):
        (WebCore::ScrollableArea::mouseExitedContentArea):
        (WebCore::ScrollableArea::mouseMovedInContentArea):
        (WebCore::ScrollableArea::mouseEnteredScrollbar):
        (WebCore::ScrollableArea::mouseExitedScrollbar):
        (WebCore::ScrollableArea::contentAreaDidShow):
        (WebCore::ScrollableArea::contentAreaDidHide):
        * platform/ScrollableArea.h:
        * platform/ScrollableAreaClient.h:
        * platform/Scrollbar.cpp:
        (WebCore::Scrollbar::mouseEntered):
        (WebCore::Scrollbar::mouseExited):
        (WebCore::Scrollbar::mouseUp):

2011-12-20  Jarred Nicholls  <jarred@sencha.com>

        Perform case insensitive matching on MIME types in XHR
        https://bugs.webkit.org/show_bug.cgi?id=74800

        Perform case insensitive matching on responseMIMEType() in didReceiveData().
        Workaround case sensitive matching by DOMImplementation::isXMLMIMEType() in responseIsXML().

        Reviewed by Darin Adler.

        Tests: http/tests/xmlhttprequest/xmlhttprequest-mimetype-mixed-case.html
               http/tests/xmlhttprequest/xmlhttprequest-overridemimetype-mixed-case.html

        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::didReceiveData):
        (WebCore::XMLHttpRequest::responseIsXML):

2011-12-20  Adam Klein  <adamk@chromium.org>

        Remove no-op DOMAttr* event dispatch methods from Element
        https://bugs.webkit.org/show_bug.cgi?id=74946

        Reviewed by Darin Adler.

        The removed methods had their bodies #if 0'd out, so this should have
        no effect on anything.

        * dom/Element.cpp:
        * dom/Element.h:
        * dom/NamedNodeMap.cpp:
        (WebCore::NamedNodeMap::addAttribute):
        (WebCore::NamedNodeMap::removeAttribute):

2011-12-20  Anders Carlsson  <andersca@apple.com>

        ScrollableArea should have an optional ScrollableAreaClient
        https://bugs.webkit.org/show_bug.cgi?id=74949

        Reviewed by Sam Weinig.

        * WebCore.exp.in:
        * WebCore.xcodeproj/project.pbxproj:
        * page/FrameView.cpp:
        (WebCore::scrollableAreaClient):
        (WebCore::FrameView::FrameView):
        * page/ScrollingCoordinator.cpp:
        (WebCore::ScrollingCoordinator::scrollableAreaClientForFrame):
        * page/ScrollingCoordinator.h:
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::ScrollView):
        * platform/ScrollView.h:
        * platform/ScrollableArea.cpp:
        (WebCore::ScrollableArea::ScrollableArea):
        * platform/ScrollableArea.h:
        * platform/ScrollableAreaClient.h: Added.
        (WebCore::ScrollableAreaClient::~ScrollableAreaClient):
        (WebCore::ScrollableAreaClient::ScrollableAreaClient):

2011-12-19  Adam Klein  <adamk@chromium.org>

        Rename Element::setAttributeMap to parserSetAttributeMap and limit its use to the parser
        https://bugs.webkit.org/show_bug.cgi?id=74885

        Reviewed by Ryosuke Niwa.

        Element::setAttributeMap is currently used by the parser in cases
        where a NamedNodeMap of attributes has already been allocated and
        transfers ownership to the Element. Other uses in WebCore don't have
        this ownership-transfer requirement, and so are more clearly expressed
        with normal setAttribute calls.

        Eliminating non-parser callers allows the code to make safe
        assumptions about the state of the Element it's called on: no need to
        worry about, e.g., updating the id in the document's cache or
        enqueueing mutation records.

        No new tests, no change in behavior expected.

        * dom/Element.cpp:
        (WebCore::Element::parserSetAttributeMap): Renamed, added assertions
        to make sure it's not called unexpectedly, update comments.
        * dom/Element.h:
        * html/HTMLViewSourceDocument.cpp: Use setAttribute instead of setAttributeMap.
        (WebCore::HTMLViewSourceDocument::createContainingTable):
        (WebCore::HTMLViewSourceDocument::addSpanWithClassName):
        (WebCore::HTMLViewSourceDocument::addLine):
        (WebCore::HTMLViewSourceDocument::addBase):
        (WebCore::HTMLViewSourceDocument::addLink):
        * html/parser/HTMLConstructionSite.cpp: Reference new name.
        (WebCore::HTMLConstructionSite::insertHTMLHtmlStartTagBeforeHTML):
        (WebCore::HTMLConstructionSite::insertScriptElement):
        (WebCore::HTMLConstructionSite::createElement):
        (WebCore::HTMLConstructionSite::createHTMLElement):
        * html/track/WebVTTParser.cpp:
        (WebCore::WebVTTParser::constructTreeFromToken): Use setAttribute instead of setAttributeMap.
        Also get rid of an unnecessary String -> AtomicString conversion.

2011-12-20  Iain Merrick  <husky@google.com>

        Remove unused parameter from RenderLayerCompositor::rebuildCompositingLayerTree
        https://bugs.webkit.org/show_bug.cgi?id=74936

        Reviewed by Simon Fraser.

        Pure refactoring, no change in functionality.

        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::updateCompositingLayers):
        (WebCore::RenderLayerCompositor::rebuildCompositingLayerTree):
        * rendering/RenderLayerCompositor.h:

2011-12-20  Tony Chang  <tony@chromium.org>

        RenderStyle::InheritedFlags and RenderStyle::NonInheritedFlags members should be 4 byte aligned
        https://bugs.webkit.org/show_bug.cgi?id=74880

        Reviewed by Ryosuke Niwa.

        Use unsigned for all types so we get 4 byte boundaries (unsigned char
        means we try to align to 1 byte boundaries) and add setters and
        getters for bool members.

        Move some members around to make sure we're aligned to 4 byte boundaries.

        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::copyNonInheritedFrom):
        * rendering/style/RenderStyle.h:
        (WebCore::InheritedFlags::NonInheritedFlags::affectedByHover):
        (WebCore::InheritedFlags::NonInheritedFlags::setAffectedByHover):
        (WebCore::InheritedFlags::NonInheritedFlags::affectedByActive):
        (WebCore::InheritedFlags::NonInheritedFlags::setAffectedByActive):
        (WebCore::InheritedFlags::NonInheritedFlags::affectedByDrag):
        (WebCore::InheritedFlags::NonInheritedFlags::setAffectedByDrag):
        (WebCore::InheritedFlags::NonInheritedFlags::isLink):
        (WebCore::InheritedFlags::NonInheritedFlags::setIsLink):
        (WebCore::InheritedFlags::setBitDefaults):
        (WebCore::InheritedFlags::affectedByHoverRules):
        (WebCore::InheritedFlags::affectedByActiveRules):
        (WebCore::InheritedFlags::affectedByDragRules):
        (WebCore::InheritedFlags::setAffectedByHoverRules):
        (WebCore::InheritedFlags::setAffectedByActiveRules):
        (WebCore::InheritedFlags::setAffectedByDragRules):
        (WebCore::InheritedFlags::isLink):
        (WebCore::InheritedFlags::setIsLink):

2011-12-20  Julien Chaffraix  <jchaffraix@webkit.org>

        Regression(99212): table rows get incorrect height after changing some cells' height
        https://bugs.webkit.org/show_bug.cgi?id=74303

        Reviewed by Darin Adler.

        Tests: fast/table/resize-table-binding-cell.html
               fast/table/resize-table-cell.html
               fast/table/resize-table-row.html

        r99212 wrongly implemented the row's logicalHeight recalculation.
        The original code would use recalcCells which would properly recalculate a
        row logicalHeight by iterating over the table's cells but throwing out the
        existing result.

        Our approach is just to recompute our row's logicalHeight and leave the
        rest of the section untouched.

        * rendering/RenderTableSection.cpp:
        (WebCore::updateLogicalHeightForCell):
        Added this new helper function to update the RowStruct logicalHeight during
        |addCell| and |rowLogicalHeightChanged|.

        (WebCore::RenderTableSection::addCell):
        Replaced the old code with a call to updateLogicalHeightForCell.
        (WebCore::RenderTableSection::rowLogicalHeightChanged):
        Added a call to updateLogicalHeightForCell for each cells.

2011-12-20  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r103322.
        http://trac.webkit.org/changeset/103322
        https://bugs.webkit.org/show_bug.cgi?id=74927

        seven inspector's tests are crashing on qt (Requested by
        loislo on #webkit).

        * inspector/CodeGeneratorInspector.py:
        (RawTypes.BaseType.is_event_param_check_optional):
        (RawTypes.Object.is_event_param_check_optional):
        (RawTypes.Array.is_event_param_check_optional):
        (RawTypes):
        (Generator.process_command):
        * inspector/InspectorApplicationCacheAgent.cpp:
        (WebCore::InspectorApplicationCacheAgent::getFramesWithManifests):
        (WebCore::InspectorApplicationCacheAgent::getApplicationCacheForFrame):
        * inspector/InspectorApplicationCacheAgent.h:
        * inspector/InspectorCSSAgent.cpp:
        (WebCore::InspectorCSSAgent::clearFrontend):
        (WebCore::InspectorCSSAgent::getMatchedStylesForNode):
        (WebCore::InspectorCSSAgent::getInlineStylesForNode):
        (WebCore::InspectorCSSAgent::getComputedStyleForNode):
        (WebCore::InspectorCSSAgent::getAllStyleSheets):
        (WebCore::InspectorCSSAgent::getStyleSheet):
        (WebCore::InspectorCSSAgent::setPropertyText):
        (WebCore::InspectorCSSAgent::toggleProperty):
        (WebCore::InspectorCSSAgent::setRuleSelector):
        (WebCore::InspectorCSSAgent::addRule):
        (WebCore::InspectorCSSAgent::getSupportedCSSProperties):
        (WebCore::InspectorCSSAgent::stopSelectorProfiler):
        * inspector/InspectorCSSAgent.h:
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::getDocument):
        (WebCore::InspectorDOMAgent::querySelectorAll):
        (WebCore::InspectorDOMAgent::getEventListenersForNode):
        (WebCore::InspectorDOMAgent::getSearchResults):
        (WebCore::InspectorDOMAgent::resolveNode):
        (WebCore::InspectorDOMAgent::getAttributes):
        * inspector/InspectorDOMAgent.h:
        * inspector/InspectorDOMStorageAgent.cpp:
        (WebCore::InspectorDOMStorageAgent::getDOMStorageEntries):
        * inspector/InspectorDOMStorageAgent.h:
        * inspector/InspectorDatabaseAgent.cpp:
        (WebCore::InspectorDatabaseAgent::getDatabaseTableNames):
        * inspector/InspectorDatabaseAgent.h:
        * inspector/InspectorDebuggerAgent.cpp:
        (WebCore::InspectorDebuggerAgent::setBreakpointByUrl):
        (WebCore::InspectorDebuggerAgent::setBreakpoint):
        (WebCore::InspectorDebuggerAgent::searchInContent):
        (WebCore::InspectorDebuggerAgent::setScriptSource):
        (WebCore::InspectorDebuggerAgent::getFunctionLocation):
        (WebCore::InspectorDebuggerAgent::evaluateOnCallFrame):
        * inspector/InspectorDebuggerAgent.h:
        * inspector/InspectorMemoryAgent.cpp:
        (WebCore::InspectorMemoryAgent::getDOMNodeCount):
        * inspector/InspectorMemoryAgent.h:
        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::getCookies):
        (WebCore::InspectorPageAgent::getResourceTree):
        (WebCore::InspectorPageAgent::searchInResource):
        (WebCore::InspectorPageAgent::searchInResources):
        * inspector/InspectorPageAgent.h:
        * inspector/InspectorProfilerAgent.cpp:
        (WebCore::InspectorProfilerAgent::getProfileHeaders):
        (WebCore::InspectorProfilerAgent::getProfile):
        (WebCore::InspectorProfilerAgent::getObjectByHeapObjectId):
        * inspector/InspectorProfilerAgent.h:
        * inspector/InspectorRuntimeAgent.cpp:
        (WebCore::InspectorRuntimeAgent::evaluate):
        (WebCore::InspectorRuntimeAgent::callFunctionOn):
        (WebCore::InspectorRuntimeAgent::getProperties):
        * inspector/InspectorRuntimeAgent.h:

2011-12-19  Andrey Kosyakov  <caseq@chromium.org>

        Web Inspector: [Extensions API] allow setting extension API per extension security origin
        https://bugs.webkit.org/show_bug.cgi?id=74868

        Reviewed by Pavel Feldman.

        This replaces InspectorExtensionAPI string within InspectorFrontendHost with a map by extension
        security origin, so that we can have APIs customized by extension (in particular, this is needed
        to expose experimental APIs only to certain extensions).

        * inspector/InspectorAgent.cpp:
        (WebCore::InspectorAgent::didClearWindowObjectInWorld):
        (WebCore::InspectorAgent::setInjectedScriptForOrigin):
        * inspector/InspectorAgent.h:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::setInjectedScriptForOrigin):
        * inspector/InspectorController.h:
        * inspector/InspectorFrontendHost.cpp:
        (WebCore::InspectorFrontendHost::setInjectedScriptForOrigin):
        * inspector/InspectorFrontendHost.h:
        * inspector/InspectorFrontendHost.idl:
        * inspector/front-end/ExtensionServer.js:
        (WebInspector.ExtensionServer.prototype._addExtensions):
        (WebInspector.ExtensionServer.prototype._addExtension):

2011-12-20  Peter Rybin  <peter.rybin@gmail.com>

        Web Inspector: CodeGenerator should not use pointers for out params of RefPtr type.
        https://bugs.webkit.org/show_bug.cgi?id=69366

        Reviewed by Pavel Feldman.

        Generator fixed and all usages are changed manually.

        * inspector/CodeGeneratorInspector.py:
        (RawTypes.BaseType.is_event_param_check_optional):
        (RawTypes.BaseType):
        (RawTypes.BaseType.get_output_argument_prefix):
        (RawTypes.Object.get_output_argument_prefix):
        (RawTypes.Array.get_output_argument_prefix):
        (RawTypes):
        (Generator.process_command):
        * inspector/InspectorApplicationCacheAgent.cpp:
        (WebCore::InspectorApplicationCacheAgent::getFramesWithManifests):
        (WebCore::InspectorApplicationCacheAgent::getApplicationCacheForFrame):
        * inspector/InspectorApplicationCacheAgent.h:
        * inspector/InspectorCSSAgent.cpp:
        (WebCore::InspectorCSSAgent::clearFrontend):
        (WebCore::InspectorCSSAgent::getMatchedStylesForNode):
        (WebCore::InspectorCSSAgent::getInlineStylesForNode):
        (WebCore::InspectorCSSAgent::getComputedStyleForNode):
        (WebCore::InspectorCSSAgent::getAllStyleSheets):
        (WebCore::InspectorCSSAgent::getStyleSheet):
        (WebCore::InspectorCSSAgent::setPropertyText):
        (WebCore::InspectorCSSAgent::toggleProperty):
        (WebCore::InspectorCSSAgent::setRuleSelector):
        (WebCore::InspectorCSSAgent::addRule):
        (WebCore::InspectorCSSAgent::getSupportedCSSProperties):
        (WebCore::InspectorCSSAgent::stopSelectorProfiler):
        (WebCore::InspectorCSSAgent::stopSelectorProfilerImpl):
        * inspector/InspectorCSSAgent.h:
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::getDocument):
        (WebCore::InspectorDOMAgent::querySelectorAll):
        (WebCore::InspectorDOMAgent::getEventListenersForNode):
        (WebCore::InspectorDOMAgent::getSearchResults):
        (WebCore::InspectorDOMAgent::resolveNode):
        (WebCore::InspectorDOMAgent::getAttributes):
        * inspector/InspectorDOMAgent.h:
        * inspector/InspectorDOMStorageAgent.cpp:
        (WebCore::InspectorDOMStorageAgent::getDOMStorageEntries):
        * inspector/InspectorDOMStorageAgent.h:
        * inspector/InspectorDatabaseAgent.cpp:
        (WebCore::InspectorDatabaseAgent::getDatabaseTableNames):
        * inspector/InspectorDatabaseAgent.h:
        * inspector/InspectorDebuggerAgent.cpp:
        (WebCore::InspectorDebuggerAgent::setBreakpointByUrl):
        (WebCore::InspectorDebuggerAgent::setBreakpoint):
        (WebCore::InspectorDebuggerAgent::searchInContent):
        (WebCore::InspectorDebuggerAgent::setScriptSource):
        (WebCore::InspectorDebuggerAgent::getFunctionLocation):
        (WebCore::InspectorDebuggerAgent::evaluateOnCallFrame):
        * inspector/InspectorDebuggerAgent.h:
        * inspector/InspectorMemoryAgent.cpp:
        (WebCore::InspectorMemoryAgent::getDOMNodeCount):
        * inspector/InspectorMemoryAgent.h:
        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::getCookies):
        (WebCore::InspectorPageAgent::getResourceTree):
        (WebCore::InspectorPageAgent::searchInResource):
        (WebCore::InspectorPageAgent::searchInResources):
        * inspector/InspectorPageAgent.h:
        * inspector/InspectorProfilerAgent.cpp:
        (WebCore::InspectorProfilerAgent::getProfileHeaders):
        (WebCore::InspectorProfilerAgent::getProfile):
        (WebCore::InspectorProfilerAgent::getObjectByHeapObjectId):
        * inspector/InspectorProfilerAgent.h:
        * inspector/InspectorRuntimeAgent.cpp:
        (WebCore::InspectorRuntimeAgent::evaluate):
        (WebCore::InspectorRuntimeAgent::callFunctionOn):
        (WebCore::InspectorRuntimeAgent::getProperties):
        * inspector/InspectorRuntimeAgent.h:

2011-12-20  Julien Chaffraix  <jchaffraix@webkit.org>

        Crash in RenderTable::outerBorderAfter
        http://webkit.org/b/74026
        <rdar://problem/10552313>

        Reviewed by Eric Seidel.

        Test: fast/table/computeLogicalWidth-table-needsSectionRecalc.html

        RenderBlock can call computeLogicalWidth() before calling layout(). The code in
        RenderTable::computeLogicalWidth would make the assumption that layout() was called
        as layout() is responsible for recomputing our sections.

        To prevent the issue, let's just recompute the section if it's needed as this situation
        shouldn't be an error. Also adding more knowledge of table in RenderBlock seems bad.

        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::computeLogicalWidth):
        Make sure we recalculate our section if it's needed.

2011-12-20  Kentaro Hara  <haraken@chromium.org>

        [Refactoring] Replace imp with impl in CodeGeneratorJS.pm
        https://bugs.webkit.org/show_bug.cgi?id=74901

        Reviewed by Adam Barth.

        As pointed out in bug 74837, the generated code by CodeGeneratorJS.pm includes
        both 'imp' and 'impl'. This patch unifies them into 'impl'.
        I confirmed that "perl -lne 'print if /imp[^a-z]/' CodeGeneratorJS.pm" outputs nothing.

        No new tests. No change in behavior.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateAttributeEventListenerCall):
        (GenerateEventListenerCall):
        (GenerateImplementation):
        (GenerateParametersCheck):
        (GenerateImplementationFunctionCall):
        (NativeToJSValue):

        * bindings/scripts/test/JS/JSFloat64Array.cpp: Updated run-bindings-tests results.
        (WebCore::jsFloat64ArrayPrototypeFunctionFoo):
        * bindings/scripts/test/JS/JSTestEventConstructor.cpp:
        (WebCore::jsTestEventConstructorAttr1):
        (WebCore::jsTestEventConstructorAttr2):
        * bindings/scripts/test/JS/JSTestInterface.cpp:
        (WebCore::jsTestInterfaceStr1):
        (WebCore::jsTestInterfaceStr2):
        (WebCore::jsTestInterfaceStr3):
        (WebCore::setJSTestInterfaceStr2):
        (WebCore::setJSTestInterfaceStr3):
        * bindings/scripts/test/JS/JSTestMediaQueryListListener.cpp:
        (WebCore::jsTestMediaQueryListListenerPrototypeFunctionMethod):
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::jsTestObjReadOnlyIntAttr):
        (WebCore::jsTestObjReadOnlyStringAttr):
        (WebCore::jsTestObjReadOnlyTestObjAttr):
        (WebCore::jsTestObjShortAttr):
        (WebCore::jsTestObjUnsignedShortAttr):
        (WebCore::jsTestObjIntAttr):
        (WebCore::jsTestObjLongLongAttr):
        (WebCore::jsTestObjUnsignedLongLongAttr):
        (WebCore::jsTestObjStringAttr):
        (WebCore::jsTestObjTestObjAttr):
        (WebCore::jsTestObjXMLObjAttr):
        (WebCore::jsTestObjCreate):
        (WebCore::jsTestObjReflectedStringAttr):
        (WebCore::jsTestObjReflectedIntegralAttr):
        (WebCore::jsTestObjReflectedUnsignedIntegralAttr):
        (WebCore::jsTestObjReflectedBooleanAttr):
        (WebCore::jsTestObjReflectedURLAttr):
        (WebCore::jsTestObjReflectedNonEmptyURLAttr):
        (WebCore::jsTestObjReflectedCustomIntegralAttr):
        (WebCore::jsTestObjReflectedCustomBooleanAttr):
        (WebCore::jsTestObjReflectedCustomURLAttr):
        (WebCore::jsTestObjReflectedCustomNonEmptyURLAttr):
        (WebCore::jsTestObjAttrWithGetterException):
        (WebCore::jsTestObjAttrWithSetterException):
        (WebCore::jsTestObjStringAttrWithGetterException):
        (WebCore::jsTestObjStringAttrWithSetterException):
        (WebCore::jsTestObjScriptStringAttr):
        (WebCore::jsTestObjConditionalAttr1):
        (WebCore::jsTestObjConditionalAttr2):
        (WebCore::jsTestObjConditionalAttr3):
        (WebCore::jsTestObjCachedAttribute1):
        (WebCore::jsTestObjCachedAttribute2):
        (WebCore::jsTestObjDescription):
        (WebCore::jsTestObjId):
        (WebCore::jsTestObjHash):
        (WebCore::setJSTestObjShortAttr):
        (WebCore::setJSTestObjUnsignedShortAttr):
        (WebCore::setJSTestObjIntAttr):
        (WebCore::setJSTestObjLongLongAttr):
        (WebCore::setJSTestObjUnsignedLongLongAttr):
        (WebCore::setJSTestObjStringAttr):
        (WebCore::setJSTestObjTestObjAttr):
        (WebCore::setJSTestObjXMLObjAttr):
        (WebCore::setJSTestObjCreate):
        (WebCore::setJSTestObjReflectedStringAttr):
        (WebCore::setJSTestObjReflectedIntegralAttr):
        (WebCore::setJSTestObjReflectedUnsignedIntegralAttr):
        (WebCore::setJSTestObjReflectedBooleanAttr):
        (WebCore::setJSTestObjReflectedURLAttr):
        (WebCore::setJSTestObjReflectedNonEmptyURLAttr):
        (WebCore::setJSTestObjReflectedCustomIntegralAttr):
        (WebCore::setJSTestObjReflectedCustomBooleanAttr):
        (WebCore::setJSTestObjReflectedCustomURLAttr):
        (WebCore::setJSTestObjReflectedCustomNonEmptyURLAttr):
        (WebCore::setJSTestObjAttrWithGetterException):
        (WebCore::setJSTestObjAttrWithSetterException):
        (WebCore::setJSTestObjStringAttrWithGetterException):
        (WebCore::setJSTestObjStringAttrWithSetterException):
        (WebCore::setJSTestObjConditionalAttr1):
        (WebCore::setJSTestObjConditionalAttr2):
        (WebCore::setJSTestObjConditionalAttr3):
        (WebCore::setJSTestObjId):
        (WebCore::jsTestObjPrototypeFunctionVoidMethod):
        (WebCore::jsTestObjPrototypeFunctionVoidMethodWithArgs):
        (WebCore::jsTestObjPrototypeFunctionIntMethod):
        (WebCore::jsTestObjPrototypeFunctionIntMethodWithArgs):
        (WebCore::jsTestObjPrototypeFunctionObjMethod):
        (WebCore::jsTestObjPrototypeFunctionObjMethodWithArgs):
        (WebCore::jsTestObjPrototypeFunctionMethodThatRequiresAllArgsAndThrows):
        (WebCore::jsTestObjPrototypeFunctionSerializedValue):
        (WebCore::jsTestObjPrototypeFunctionIdbKey):
        (WebCore::jsTestObjPrototypeFunctionOptionsObject):
        (WebCore::jsTestObjPrototypeFunctionMethodWithException):
        (WebCore::jsTestObjPrototypeFunctionCustomArgsAndException):
        (WebCore::jsTestObjPrototypeFunctionAddEventListener):
        (WebCore::jsTestObjPrototypeFunctionRemoveEventListener):
        (WebCore::jsTestObjPrototypeFunctionWithDynamicFrame):
        (WebCore::jsTestObjPrototypeFunctionWithDynamicFrameAndArg):
        (WebCore::jsTestObjPrototypeFunctionWithDynamicFrameAndOptionalArg):
        (WebCore::jsTestObjPrototypeFunctionWithDynamicFrameAndUserGesture):
        (WebCore::jsTestObjPrototypeFunctionWithDynamicFrameAndUserGestureASAD):
        (WebCore::jsTestObjPrototypeFunctionWithScriptStateVoid):
        (WebCore::jsTestObjPrototypeFunctionWithScriptStateObj):
        (WebCore::jsTestObjPrototypeFunctionWithScriptStateVoidException):
        (WebCore::jsTestObjPrototypeFunctionWithScriptStateObjException):
        (WebCore::jsTestObjPrototypeFunctionWithScriptExecutionContext):
        (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalArg):
        (WebCore::jsTestObjPrototypeFunctionMethodWithNonOptionalArgAndOptionalArg):
        (WebCore::jsTestObjPrototypeFunctionMethodWithNonOptionalArgAndTwoOptionalArgs):
        (WebCore::jsTestObjPrototypeFunctionMethodWithCallbackArg):
        (WebCore::jsTestObjPrototypeFunctionMethodWithNonCallbackArgAndCallbackArg):
        (WebCore::jsTestObjPrototypeFunctionMethodWithCallbackAndOptionalArg):
        (WebCore::jsTestObjPrototypeFunctionConditionalMethod1):
        (WebCore::jsTestObjPrototypeFunctionConditionalMethod2):
        (WebCore::jsTestObjPrototypeFunctionConditionalMethod3):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethod1):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethod2):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethod3):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethod4):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethod5):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethod6):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethod7):
        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp:
        (WebCore::jsTestSerializedScriptValueInterfaceValue):

2011-12-20  Alok Priyadarshi  <alokp@chromium.org>

        [chromium] compositing/shadows tests fail with accelerated painting
        https://bugs.webkit.org/show_bug.cgi?id=74871

        Reviewed by James Robinson.
        
        Switched over to new API for creating accelerated canvas GrContext::createPlatformTexture.
        It correctly binds the stencil buffer to the FBO.

        Test: compositing/shadows/shadow-drawing.html (existing)

        * platform/graphics/chromium/FrameBufferSkPictureCanvasLayerTextureUpdater.cpp:
        (WebCore::createAcceleratedCanvas):
        (WebCore::FrameBufferSkPictureCanvasLayerTextureUpdater::updateTextureRect):
        * platform/graphics/chromium/ManagedTexture.cpp:
        (WebCore::ManagedTexture::allocate):
        (WebCore::ManagedTexture::bindTexture):
        (WebCore::ManagedTexture::framebufferTexture2D):
        * platform/graphics/chromium/ManagedTexture.h:

2011-12-20  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r103291.
        http://trac.webkit.org/changeset/103291
        https://bugs.webkit.org/show_bug.cgi?id=74915

        Looks like it broke fast/events/touch and
        fast/events/touch/gesture/gesture-scroll.html
        http://build.chromium.org/p/chromium.webkit/builders/Webkit%20Mac10.5/builds/7010
        (Requested by loislo on #webkit).

        * WebCore.gyp/WebCore.gyp:
        * WebCore.gypi:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/chromium/ScrollAnimatorChromiumMac.h: Copied from Source/WebCore/platform/mac/ScrollAnimatorMac.h.
        (WebCore::ScrollAnimatorChromiumMac::setIsDrawingIntoLayer):
        (WebCore::ScrollAnimatorChromiumMac::isDrawingIntoLayer):
        (WebCore::ScrollAnimatorChromiumMac::haveScrolledSincePageLoad):
        (WebCore::ScrollAnimatorChromiumMac::setNeedsScrollerStyleUpdate):
        (WebCore::ScrollAnimatorChromiumMac::needsScrollerStyleUpdate):
        * platform/chromium/ScrollAnimatorChromiumMac.mm: Added.
        (-[NSProcessInfo systemUptime]):
        (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::chromiumScrollbarTheme):
        (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::immediateScrollToPointForScrollAnimation):
        (WebCore::ScrollAnimatorChromiumMac::notifyPositionChanged):
        (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::elasticDeltaForReboundDelta):
        (WebCore::reboundDeltaForElasticDelta):
        (WebCore::scrollWheelMultiplier):
        (WebCore::isScrollingLeftAndShouldNotRubberBand):
        (WebCore::isScrollingRightAndShouldNotRubberBand):
        (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::setIsActive):
        (WebCore::ScrollAnimatorChromiumMac::updateScrollerStyle):
        (WebCore::ScrollAnimatorChromiumMac::startScrollbarPaintTimer):
        (WebCore::ScrollAnimatorChromiumMac::scrollbarPaintTimerIsActive):
        (WebCore::ScrollAnimatorChromiumMac::stopScrollbarPaintTimer):
        (WebCore::ScrollAnimatorChromiumMac::initialScrollbarPaintTimerFired):
        (WebCore::ScrollAnimatorChromiumMac::setVisibleScrollerThumbRect):
        * platform/chromium/ScrollbarOverlayUtilitiesChromiumMac.h: Added.
        * platform/chromium/ScrollbarOverlayUtilitiesChromiumMac.mm: Added.
        (lookUpNSScrollerImpClass):
        (lookUpNSScrollerImpPairClass):
        (scrollbarControlSizeToNSControlSize):
        (preferredScrollerStyle):
        (wkScrollbarPainterUsesOverlayScrollers):
        (wkScrollbarPainterIsHorizontal):
        (wkScrollbarPainterKnobAlpha):
        (wkScrollbarPainterSetOverlayState):
        (wkScrollbarPainterPaint):
        (wkScrollbarPainterPaintTrack):
        (wkScrollbarPainterPaintKnob):
        (wkScrollbarMinimumThumbLength):
        (wkScrollbarPainterSetDelegate):
        (wkScrollbarPainterSetEnabled):
        (wkScrollbarPainterTrackAlpha):
        (wkMakeScrollbarPainter):
        (wkScrollbarThickness):
        (wkScrollbarMinimumTotalLengthNeededForThumb):
        (wkVerticalScrollbarPainterForController):
        (wkHorizontalScrollbarPainterForController):
        (wkScrollbarPainterControllerStyle):
        (wkMakeScrollbarReplacementPainter):
        (wkSetPainterForPainterController):
        (wkSetScrollbarPainterControllerStyle):
        (wkScrollbarPainterKnobRect):
        (wkSetScrollbarPainterKnobAlpha):
        (wkSetScrollbarPainterTrackAlpha):
        (wkSetScrollbarPainterKnobStyle):
        (wkMakeScrollbarPainterController):
        (wkContentAreaScrolled):
        (wkContentAreaWillPaint):
        (wkMouseEnteredContentArea):
        (wkMouseExitedContentArea):
        (wkMouseMovedInContentArea):
        (wkWillStartLiveResize):
        (wkContentAreaResized):
        (wkWillEndLiveResize):
        (wkContentAreaDidShow):
        (wkContentAreaDidHide):
        (wkDidBeginScrollGesture):
        (wkDidEndScrollGesture):
        (wkScrollbarPainterForceFlashScrollers):
        (isScrollbarOverlayAPIAvailable):
        * platform/chromium/ScrollbarThemeChromiumMac.h:
        (WebCore::ScrollbarThemeChromiumMac::supportsControlTints):
        (WebCore::ScrollbarThemeChromiumMac::maxOverlapBetweenPages):
        * platform/chromium/ScrollbarThemeChromiumMac.mm:
        (WebCore::scrollbarMap):
        (+[ScrollbarPrefsObserver appearancePrefsChanged:]):
        (+[ScrollbarPrefsObserver behaviorPrefsChanged:]):
        (+[ScrollbarPrefsObserver registerAsObserver]):
        (WebCore::updateArrowPlacement):
        (WebCore::ScrollbarThemeChromiumMac::registerScrollbar):
        (WebCore::ScrollbarThemeChromiumMac::unregisterScrollbar):
        (WebCore::ScrollbarThemeChromiumMac::setNewPainterForScrollbar):
        (WebCore::ScrollbarThemeChromiumMac::painterForScrollbar):
        (WebCore::ScrollbarThemeChromiumMac::ScrollbarThemeChromiumMac):
        (WebCore::ScrollbarThemeChromiumMac::preferencesChanged):
        (WebCore::ScrollbarThemeChromiumMac::scrollbarThickness):
        (WebCore::ScrollbarThemeChromiumMac::usesOverlayScrollbars):
        (WebCore::toScrollbarPainterKnobStyle):
        (WebCore::ScrollbarThemeChromiumMac::updateScrollbarOverlayStyle):
        (WebCore::ScrollbarThemeChromiumMac::initialAutoscrollTimerDelay):
        (WebCore::ScrollbarThemeChromiumMac::autoscrollTimerDelay):
        (WebCore::ScrollbarThemeChromiumMac::buttonsPlacement):
        (WebCore::ScrollbarThemeChromiumMac::hasButtons):
        (WebCore::ScrollbarThemeChromiumMac::hasThumb):
        (WebCore::buttonRepaintRect):
        (WebCore::ScrollbarThemeChromiumMac::backButtonRect):
        (WebCore::ScrollbarThemeChromiumMac::forwardButtonRect):
        (WebCore::ScrollbarThemeChromiumMac::trackRect):
        (WebCore::ScrollbarThemeChromiumMac::minimumThumbLength):
        (WebCore::ScrollbarThemeChromiumMac::shouldCenterOnThumb):
        (WebCore::ScrollbarThemeChromiumMac::shouldDragDocumentInsteadOfThumb):
        (WebCore::scrollbarPartToHIPressedState):
        (WebCore::ScrollbarThemeChromiumMac::updateEnabledState):
        (WebCore::ScrollbarThemeChromiumMac::paint):
        * platform/mac/EmptyProtocolDefinitions.h:
        * platform/mac/NSScrollerImpDetails.h:
        * platform/mac/NSScrollerImpDetails.mm: Removed.
        * platform/mac/ScrollAnimatorMac.h:
        * platform/mac/ScrollAnimatorMac.mm:
        (-[WebScrollbarPainterDelegate layer]):
        (WebCore::ScrollAnimatorMac::ScrollAnimatorMac):
        (WebCore::ScrollAnimatorMac::~ScrollAnimatorMac):
        (WebCore::ScrollAnimatorMac::notifyPositionChanged):
        (WebCore::ScrollAnimatorMac::contentAreaWillPaint):
        (WebCore::ScrollAnimatorMac::mouseEnteredContentArea):
        (WebCore::ScrollAnimatorMac::mouseExitedContentArea):
        (WebCore::ScrollAnimatorMac::mouseMovedInContentArea):
        (WebCore::ScrollAnimatorMac::mouseEnteredScrollbar):
        (WebCore::ScrollAnimatorMac::mouseExitedScrollbar):
        (WebCore::ScrollAnimatorMac::willStartLiveResize):
        (WebCore::ScrollAnimatorMac::contentsResized):
        (WebCore::ScrollAnimatorMac::willEndLiveResize):
        (WebCore::ScrollAnimatorMac::contentAreaDidShow):
        (WebCore::ScrollAnimatorMac::contentAreaDidHide):
        (WebCore::ScrollAnimatorMac::didBeginScrollGesture):
        (WebCore::ScrollAnimatorMac::didEndScrollGesture):
        (WebCore::ScrollAnimatorMac::didAddVerticalScrollbar):
        (WebCore::ScrollAnimatorMac::willRemoveVerticalScrollbar):
        (WebCore::ScrollAnimatorMac::didAddHorizontalScrollbar):
        (WebCore::ScrollAnimatorMac::willRemoveHorizontalScrollbar):
        (WebCore::ScrollAnimatorMac::cancelAnimations):
        (WebCore::ScrollAnimatorMac::setIsActive):
        (WebCore::ScrollAnimatorMac::updateScrollerStyle):
        (WebCore::ScrollAnimatorMac::initialScrollbarPaintTimerFired):
        * platform/mac/ScrollElasticityController.h:
        * platform/mac/ScrollbarThemeMac.h:
        * platform/mac/ScrollbarThemeMac.mm:
        (+[WebScrollbarPrefsObserver appearancePrefsChanged:]):
        (+[WebScrollbarPrefsObserver behaviorPrefsChanged:]):
        (WebCore::ScrollbarTheme::nativeTheme):
        (WebCore::updateArrowPlacement):
        (WebCore::ScrollbarThemeMac::registerScrollbar):
        (WebCore::ScrollbarThemeMac::ScrollbarThemeMac):
        (WebCore::ScrollbarThemeMac::scrollbarThickness):
        (WebCore::ScrollbarThemeMac::usesOverlayScrollbars):
        (WebCore::ScrollbarThemeMac::updateScrollbarOverlayStyle):
        (WebCore::ScrollbarThemeMac::hasButtons):
        (WebCore::ScrollbarThemeMac::hasThumb):
        (WebCore::ScrollbarThemeMac::minimumThumbLength):
        (WebCore::scrollbarPartToHIPressedState):
        (WebCore::ScrollbarThemeMac::updateEnabledState):
        (WebCore::ScrollbarThemeMac::paint):

2011-12-19  Adam Klein  <adamk@chromium.org>

        Make all calls to NamedNodeMap::setAttributes go through Element
        https://bugs.webkit.org/show_bug.cgi?id=74895

        Reviewed by Ryosuke Niwa.

        There are two reasons for this change. One is an optimization: some
        callers were previously always creating a NamedNodeMap even if the
        source didn't have any attributes.

        The other reason is forward-looking: setAttributes' behavior is subtly
        wrong in the presence of MutationObservers. This doesn't matter
        for most callers since the element on which setAttributesFromElement
        is called is newly-created. In the editing case, however, it could
        make a difference in behavior, which I hope to fix in a future change
        without sacrificing the performance of cloneNode() on an Element
        (which is what NamedNodeMap::setAttributes is designed for).

        No new tests, no change in behavior.

        * dom/Element.cpp:
        (WebCore::Element::cloneElementWithoutChildren): Call setAttributesFromElement.
        * dom/Element.h:
        (WebCore::Element::setAttributesFromElement): Create new inline helper method
        which conditionally forwards to NamedNodeMap::setAttribute.
        * dom/NamedNodeMap.h: Make setAttributes private (Element is already a friend).
        * editing/ReplaceNodeWithSpanCommand.cpp:
        (WebCore::swapInNodePreservingAttributesAndChildren): Call setAttributesFromElement.
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::setNodeName): Call setAttributesFromElement.
        * svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::expandSymbolElementsInShadowTree): Call setAttributesFromElement.
        (WebCore::SVGUseElement::transferUseAttributesToReplacedElement): Call setAttributesFromElement
        and make use of ASSERT_NO_EXCEPTION to make code easier to read.

2011-12-19  Leo Yang  <leo.yang@torchmobile.com.cn>

        [BlackBerry] Upstream the BlackBerry change to ResourceRequestBase.cpp
        https://bugs.webkit.org/show_bug.cgi?id=74910

        Reviewed by Daniel Bates.

        No functionality change to the existing code, no new tests.

        * platform/network/ResourceRequestBase.cpp: The BlackBerry porting has its own
        initializeMaximumHTTPConnectionCountPerHost(). Exclude the default implementation.

2011-12-19  Leo Yang  <leo.yang@torchmobile.com.cn>

        [BlackBerry] Upstream the BlackBerry change to NetworkStateNotifier.h
        https://bugs.webkit.org/show_bug.cgi?id=74904

        Reviewed by Daniel Bates.

        No functionality change to existing code, no new tests.

        * platform/network/NetworkStateNotifier.h:

2011-12-19  Yael Aharon  <yael.aharon@nokia.com>

        Update dropzone implementation per spec update
        https://bugs.webkit.org/show_bug.cgi?id=74834

        Reviewed by Tony Chang.

        Update support for dropzone attribute to use file: and string: instead of f: and s:. 
        http://www.whatwg.org/specs/web-apps/current-work/#the-dropzone-attribute

        No new tests. Existing tests cover this and were updated.

        * dom/Clipboard.cpp:
        (WebCore::Clipboard::hasDropZoneType):

2011-12-19  Sam Weinig  <sam@webkit.org>

        Add support for scrollLineDown: and scrollLineUp: NSResponder selectors
        https://bugs.webkit.org/show_bug.cgi?id=74907

        Reviewed by Dan Bernstein.

        Added API test: WebKit2.ScrollByLineCommands

        * editing/EditorCommand.cpp:
        (WebCore::executeScrollLineUp):
        (WebCore::executeScrollLineDown):
        (WebCore::createCommandMap):
        Add implementations for scrollLineUp/Down. Do not expose
        these to execCommand

2011-12-19  Huang Dongsung  <luxtella@company100.net>

        [QT] WebGL can not make the frame buffer with the stencil buffer.
        https://bugs.webkit.org/show_bug.cgi?id=74783

        When initializing a framebuffer in OpenGL ES 2, we need to initialize the depth
        and stencil buffers separately, as opposed to the combined depth-stencil buffer
        we initialize for desktop GL.

        This makes fast/canvas/webgl/context-attributes-depth-stencil-combination.html
        work in OpenGL ES 2.

        Reviewed by Noam Rosenthal.

        * platform/graphics/GraphicsContext3D.h:
        * platform/graphics/qt/GraphicsContext3DQt.cpp:
        (WebCore::GraphicsContext3D::GraphicsContext3D):
        (WebCore::GraphicsContext3D::~GraphicsContext3D):
        (WebCore::GraphicsContext3D::reshape):

2011-12-19  Ami Fischman  <fischman@chromium.org>

        Teach VideoLayerChromium how to render native texture (to support HW video decode).
        https://bugs.webkit.org/show_bug.cgi?id=73043

        Reviewed by James Robinson.
        
        Fix the life-cycle of video frames handled by VideoLayerChromium/CCVideoLayerImpl.
        VideoFrameProvider::{get,put}CurrentFrame provide lease semantics.  Previously
        VideoLayerChromium would acquire the lease for the duration of copying the frame,
        even if that was only a texture ID, and immediately return the lease, while
        CCVideoLayerImpl::draw() would come along later and use the (no-longer locked)
        texture optimistically.  This change makes it so that CCVideoLayerImpl holds
        the frame's lease for the duration of draw(), guaranteeing the frame is valid to read.

        Existing test coverage (compositing/video/, LayoutTests).  HW render of
        HW-decoded textures is not yet tested explicitly.

        * platform/graphics/chromium/VideoLayerChromium.cpp:
        (WebCore::VideoLayerChromium::VideoLayerChromium):
        (WebCore::VideoLayerChromium::~VideoLayerChromium):
        (WebCore::VideoLayerChromium::createCCLayerImpl):
        (WebCore::VideoLayerChromium::releaseProvider):
        * platform/graphics/chromium/VideoLayerChromium.h:
        * platform/graphics/chromium/cc/CCVideoLayerImpl.cpp:
        (WebCore::CCVideoLayerImpl::CCVideoLayerImpl):
        (WebCore::CCVideoLayerImpl::~CCVideoLayerImpl):
        (WebCore::CCVideoLayerImpl::setProvider):
        (WebCore::convertVFCFormatToGC3DFormat):
        (WebCore::CCVideoLayerImpl::draw):
        (WebCore::CCVideoLayerImpl::copyFrameToTextures):
        (WebCore::CCVideoLayerImpl::copyPlaneToTexture):
        (WebCore::computeVisibleSize):
        (WebCore::CCVideoLayerImpl::reserveTextures):
        (WebCore::CCVideoLayerImpl::drawYUV):
        (WebCore::CCVideoLayerImpl::drawCommon):
        (WebCore::CCVideoLayerImpl::drawRGBA):
        (WebCore::CCVideoLayerImpl::drawNativeTexture):
        * platform/graphics/chromium/cc/CCVideoLayerImpl.h:

2011-12-19  Sam Weinig  <sam@webkit.org>

        More PlatformEvent cleanup
        https://bugs.webkit.org/show_bug.cgi?id=74831

        Reviewed by Dan Bernstein.

        * platform/PlatformMouseEvent.h:
        (WebCore::PlatformMouseEvent::position):
        Rename pos -> position(). Remove x() and y() accessors.

        (WebCore::PlatformMouseEvent::globalPosition):
        Added. Replaces globalX() and globalY() accessors.

        (WebCore::PlatformMouseEvent::movementDelta):
        Added. Replaces movementX() and movementY() accessors.

        * platform/PlatformWheelEvent.h:
        (WebCore::PlatformWheelEvent::position):
        Renamed pos -> position().

        (WebCore::PlatformWheelEvent::globalPosition):
        Renamed globalPos -> globalPosition().

        * dom/MouseEvent.cpp:
        (WebCore::MouseEvent::create):
        * dom/WheelEvent.cpp:
        (WebCore::WheelEventDispatchMediator::WheelEventDispatchMediator):
        * page/DragController.cpp:
        (WebCore::DragController::startDrag):
        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleMousePressEventSingleClick):
        (WebCore::EventHandler::handleMousePressEvent):
        (WebCore::EventHandler::eventMayStartDrag):
        (WebCore::EventHandler::handleMouseReleaseEvent):
        (WebCore::EventHandler::selectCursor):
        (WebCore::EventHandler::handleMouseDoubleClickEvent):
        (WebCore::EventHandler::handleMouseMoveEvent):
        (WebCore::EventHandler::dispatchDragEvent):
        (WebCore::EventHandler::prepareMouseEvent):
        (WebCore::EventHandler::dispatchMouseEvent):
        (WebCore::EventHandler::handleWheelEvent):
        (WebCore::EventHandler::sendContextMenuEvent):
        (WebCore::EventHandler::handleDrag):
        (WebCore::EventHandler::handleTouchEvent):
        * page/chromium/EventHandlerChromium.cpp:
        (WebCore::EventHandler::passMousePressEventToSubframe):
        * platform/Scrollbar.cpp:
        (WebCore::Scrollbar::mouseMoved):
        (WebCore::Scrollbar::mouseDown):
        * platform/ScrollbarThemeComposite.cpp:
        (WebCore::ScrollbarThemeComposite::hitTest):
        * platform/chromium/PopupContainer.cpp:
        (WebCore::constructRelativeMouseEvent):
        (WebCore::constructRelativeWheelEvent):
        * platform/chromium/PopupListBox.cpp:
        (WebCore::PopupListBox::handleMouseDownEvent):
        (WebCore::PopupListBox::handleMouseMoveEvent):
        (WebCore::PopupListBox::handleMouseReleaseEvent):
        (WebCore::PopupListBox::handleWheelEvent):
        * platform/chromium/ScrollbarThemeChromiumWin.cpp:
        (WebCore::ScrollbarThemeChromiumWin::shouldSnapBackToDragOrigin):
        * platform/qt/ScrollbarQt.cpp:
        (WebCore::Scrollbar::contextMenu):
        * platform/qt/ScrollbarThemeQt.cpp:
        (WebCore::ScrollbarThemeQt::hitTest):
        * platform/win/ScrollbarThemeWin.cpp:
        (WebCore::ScrollbarThemeWin::shouldSnapBackToDragOrigin):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::resize):
        Update to use new names, access style.

2011-12-19  Adam Klein  <adamk@chromium.org>

        Remove unused ExceptionCode& argument from Element::setAttribute(QualifiedName)
        https://bugs.webkit.org/show_bug.cgi?id=74740

        Reviewed by Ryosuke Niwa.

        Updated lots of callers to remove third argument. The list of changes
        below only lists things other than updating callers.

        * dom/Document.cpp:
        (WebCore::Document::importNode):
        * dom/Element.cpp:
        (WebCore::Element::setAttribute):
        (WebCore::Element::setAttributeNS):
        (WebCore::Element::setIntegralAttribute):
        (WebCore::Element::setUnsignedIntegralAttribute):
        * dom/Element.h: Removed third arg from method, removed old two-arg
        overload which now has an identical signature.
        * editing/mac/EditorMac.mm: Updated caller and used
        ASSERT_NO_EXCEPTION for nearby code.
        (WebCore::styleForSelectionStart):
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::setContentEditable):
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::setAttributesAsText):
        * svg/SVGAnimationElement.cpp:
        (WebCore::SVGAnimationElement::setTargetAttributeAnimatedValue):
        * svg/SVGElement.idl: Removed 'setter raises(DOMException)'
        * svg/SVGGlyphRefElement.idl: ditto.
        * svg/SVGStyleElement.cpp:
        (WebCore::SVGStyleElement::setType):
        (WebCore::SVGStyleElement::setMedia):
        (WebCore::SVGStyleElement::setTitle):
        * xml/parser/XMLTreeBuilder.cpp:
        (WebCore::XMLTreeBuilder::processAttributes):

2011-12-19  Kentaro Hara  <haraken@chromium.org>

        Unreviewed. Rebaselined run-bindings-tests results.

        * bindings/scripts/test/JS/JSFloat64Array.h:
        (WebCore::JSFloat64Array::create):
        (WebCore::JSFloat64ArrayPrototype::create):
        (WebCore::JSFloat64ArrayConstructor::create):
        * bindings/scripts/test/JS/JSTestEventConstructor.h:
        (WebCore::JSTestEventConstructor::create):
        (WebCore::JSTestEventConstructorPrototype::create):
        (WebCore::JSTestEventConstructorConstructor::create):
        * bindings/scripts/test/JS/JSTestInterface.h:
        (WebCore::JSTestInterface::create):
        (WebCore::JSTestInterfacePrototype::create):
        (WebCore::JSTestInterfaceConstructor::create):
        * bindings/scripts/test/JS/JSTestMediaQueryListListener.h:
        (WebCore::JSTestMediaQueryListListener::create):
        (WebCore::JSTestMediaQueryListListenerPrototype::create):
        (WebCore::JSTestMediaQueryListListenerConstructor::create):
        * bindings/scripts/test/JS/JSTestNamedConstructor.h:
        (WebCore::JSTestNamedConstructor::create):
        (WebCore::JSTestNamedConstructorPrototype::create):
        (WebCore::JSTestNamedConstructorConstructor::create):
        (WebCore::JSTestNamedConstructorNamedConstructor::create):
        * bindings/scripts/test/JS/JSTestObj.h:
        (WebCore::JSTestObj::create):
        (WebCore::JSTestObjPrototype::create):
        (WebCore::JSTestObjConstructor::create):
        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.h:
        (WebCore::JSTestSerializedScriptValueInterface::create):
        (WebCore::JSTestSerializedScriptValueInterfacePrototype::create):
        (WebCore::JSTestSerializedScriptValueInterfaceConstructor::create):

2011-12-19  James Robinson  <jamesr@chromium.org>

        [chromium] CCLayerDelegate and WebLayerClient do not need notifySyncRequired
        https://bugs.webkit.org/show_bug.cgi?id=74376

        Reviewed by Kenneth Russell.

        CCLayerDelegate::notifySyncRequired is an odd bit of interface that we originally cargo-culted from the
        CoreAnimation compositor implementation. It is a mechanism by which a LayerChromium instance may request a new
        frame via its CCLayerDelegate, which in WebCore is always a GraphicsLayerClient. In practice, all
        implementations eventually ended up routing to CCLayerTreeHost::setNeedsCommit which then made the proper
        scheduling decision.

        This patch routes all changes that would have gone through CCLayerDelegate::notifySyncRequired directly to
        CCLayerTreeHost::setNeedsCommit, which greatly simplifies the scheduling logic.

        There is a large amount of unit test coverage for this change, largely in LayerChromiumTest

        * platform/graphics/chromium/GraphicsLayerChromium.cpp:
        * platform/graphics/chromium/GraphicsLayerChromium.h:
        * platform/graphics/chromium/LayerChromium.cpp:
        (WebCore::LayerChromium::setNeedsCommit):
        (WebCore::LayerChromium::insertChild):
        * platform/graphics/chromium/LayerChromium.h:
        * platform/graphics/chromium/cc/CCLayerTreeHost.cpp:
        (WebCore::CCLayerTreeHost::~CCLayerTreeHost):
        (WebCore::CCLayerTreeHost::setRootLayer):
        * platform/graphics/chromium/cc/CCLayerTreeHost.h:
        * platform/graphics/chromium/cc/CCScopedThreadProxy.h:
        (WebCore::CCScopedThreadProxy::runTaskIfNotShutdown):

2011-12-19  Sailesh Agrawal <sail@chromium.org>

        Merge ScrollAnimatorChromiumMac.mm back to ScrollAnimatorMac
        https://bugs.webkit.org/show_bug.cgi?id=61144

        Reviewed by Beth Dakin.

        At a high level the main changes are:
            - replace #ifdefs in ScrollAnimatorMac and ScrollbarThemeMac with run time checks
            - delete duplicate code in ScrollbarThemeChromiumMac. Keep the paint code since it does tickmarks and SKIA stuff.
            - delete ScrollAnimatorChromiumMac since ScrollAnimatorMac does the exact same thing
            - delete ScrollbarOverlayUtilitiesChromiumMac since NSScrollerImpDetails does the same thing

        No new tests. Just refactoring.

        * WebCore.gyp/WebCore.gyp:
        * WebCore.gypi:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/chromium/ScrollAnimatorChromiumMac.h: Removed.
        * platform/chromium/ScrollAnimatorChromiumMac.mm: Removed.
        * platform/chromium/ScrollbarOverlayUtilitiesChromiumMac.h: Removed.
        * platform/chromium/ScrollbarOverlayUtilitiesChromiumMac.mm: Removed.
        * platform/chromium/ScrollbarThemeChromiumMac.h:
        * platform/chromium/ScrollbarThemeChromiumMac.mm:
        (WebCore::ScrollbarThemeChromiumMac::ScrollbarThemeChromiumMac):
        (WebCore::scrollbarPainterPaintTrack):
        (WebCore::ScrollbarThemeChromiumMac::paint):
        * platform/mac/EmptyProtocolDefinitions.h:
        * platform/mac/NSScrollerImpDetails.h:
        (WebCore::isScrollbarOverlayAPIAvailable):
        * platform/mac/NSScrollerImpDetails.mm: Added.
        (WebCore::isScrollbarOverlayAPIAvailable):
        (WebCore::recommendedScrollerStyle):
        * platform/mac/ScrollAnimatorMac.h:
        * platform/mac/ScrollAnimatorMac.mm:
        (scrollbarPainterForScrollbar):
        (WebCore::ScrollAnimatorMac::ScrollAnimatorMac):
        (WebCore::ScrollAnimatorMac::~ScrollAnimatorMac):
        (WebCore::ScrollAnimatorMac::notifyPositionChanged):
        (WebCore::ScrollAnimatorMac::contentAreaWillPaint):
        (WebCore::ScrollAnimatorMac::mouseEnteredContentArea):
        (WebCore::ScrollAnimatorMac::mouseExitedContentArea):
        (WebCore::ScrollAnimatorMac::mouseMovedInContentArea):
        (WebCore::ScrollAnimatorMac::mouseEnteredScrollbar):
        (WebCore::ScrollAnimatorMac::mouseExitedScrollbar):
        (WebCore::ScrollAnimatorMac::willStartLiveResize):
        (WebCore::ScrollAnimatorMac::contentsResized):
        (WebCore::ScrollAnimatorMac::willEndLiveResize):
        (WebCore::ScrollAnimatorMac::contentAreaDidShow):
        (WebCore::ScrollAnimatorMac::contentAreaDidHide):
        (WebCore::ScrollAnimatorMac::didBeginScrollGesture):
        (WebCore::ScrollAnimatorMac::didEndScrollGesture):
        (WebCore::ScrollAnimatorMac::didAddVerticalScrollbar):
        (WebCore::ScrollAnimatorMac::willRemoveVerticalScrollbar):
        (WebCore::ScrollAnimatorMac::didAddHorizontalScrollbar):
        (WebCore::ScrollAnimatorMac::willRemoveHorizontalScrollbar):
        (WebCore::ScrollAnimatorMac::cancelAnimations):
        (WebCore::ScrollAnimatorMac::setIsActive):
        (WebCore::ScrollAnimatorMac::updateScrollerStyle):
        (WebCore::ScrollAnimatorMac::initialScrollbarPaintTimerFired):
        * platform/mac/ScrollElasticityController.h:
        * platform/mac/ScrollbarThemeMac.h:
        * platform/mac/ScrollbarThemeMac.mm:
        (+[WebScrollbarPrefsObserver appearancePrefsChanged:]):
        (+[WebScrollbarPrefsObserver behaviorPrefsChanged:]):
        (WebCore::updateArrowPlacement):
        (WebCore::ScrollbarThemeMac::registerScrollbar):
        (WebCore::ScrollbarThemeMac::setIsCurrentlyDrawingIntoLayer):
        (WebCore::ScrollbarThemeMac::ScrollbarThemeMac):
        (WebCore::ScrollbarThemeMac::scrollbarThickness):
        (WebCore::ScrollbarThemeMac::usesOverlayScrollbars):
        (WebCore::ScrollbarThemeMac::updateScrollbarOverlayStyle):
        (WebCore::ScrollbarThemeMac::hasButtons):
        (WebCore::ScrollbarThemeMac::hasThumb):
        (WebCore::ScrollbarThemeMac::minimumThumbLength):
        (WebCore::ScrollbarThemeMac::scrollbarPartToHIPressedState):
        (WebCore::ScrollbarThemeMac::updateEnabledState):
        (WebCore::scrollbarPainterPaint):
        (WebCore::ScrollbarThemeMac::paint):

2011-12-19  James Robinson  <jamesr@chromium.org>

        [chromium] Set the CCLayerTreeHost pointer on LayerChromium instances eagerly
        https://bugs.webkit.org/show_bug.cgi?id=74477

        Reviewed by Kenneth Russell.

        This enforces that the m_layerTreeHost pointer on LayerChromium instances is always up to date, instead of
        lazily setting it in the paintContents loop. There are two invariants:
        1.) If a LayerChromium is the root layer of a CCLayerTreeHost, or is reachable via the children, mask, or
        replica pointers from the root layer of a CCLayerTreeHost, then that LayerChromium's m_layerTreeHost pointer
        refers to that CCLayerTreeHost
        2.) If a LayerChromium is not a root layer or reachable from a root layer of any CCLayerTreeHost, its
        CCLayerTreeHost pointer is nil.

        Covered by several new layout tests in LayerChromiumTest

        * platform/graphics/chromium/LayerChromium.cpp:
        (WebCore::LayerChromium::setLayerTreeHost):
        (WebCore::LayerChromium::setParent):
        (WebCore::LayerChromium::setMaskLayer):
        (WebCore::LayerChromium::setReplicaLayer):
        * platform/graphics/chromium/LayerChromium.h:
        * platform/graphics/chromium/TiledLayerChromium.cpp:
        (WebCore::TiledLayerChromium::createTile):
        * platform/graphics/chromium/cc/CCLayerTreeHost.cpp:
        (WebCore::CCLayerTreeHost::setRootLayer):
        (WebCore::CCLayerTreeHost::paintMaskAndReplicaForRenderSurface):
        (WebCore::CCLayerTreeHost::paintLayerContents):
        * platform/graphics/chromium/cc/CCLayerTreeHost.h:

2011-12-19  Joshua Bell  <jsbell@chromium.org>

        IndexedDB multiple calls to transaction.objectStore(name) should return the same instance
        https://bugs.webkit.org/show_bug.cgi?id=60208

        Reviewed by Tony Chang.

        Ditto for calls to IDBObjectStore.index(). Calling these methods after the
        enclosing transaction has finished now consistently throws an error, which
        allows us to break reference cycles.

        Test: storage/indexeddb/mozilla/object-identity.html

        * storage/IDBDatabase.cpp:
        (WebCore::IDBDatabase::createObjectStore):
        * storage/IDBObjectStore.cpp:
        (WebCore::IDBObjectStore::createIndex):
        (WebCore::IDBObjectStore::index):
        (WebCore::IDBObjectStore::transactionFinished):
        * storage/IDBObjectStore.h:
        * storage/IDBTransaction.cpp:
        (WebCore::IDBTransaction::objectStore):
        (WebCore::IDBTransaction::objectStoreCreated):
        (WebCore::IDBTransaction::dispatchEvent):
        * storage/IDBTransaction.h:

2011-12-19  Anders Carlsson  <andersca@apple.com>

        Send gesture events through the event dispatcher and scrolling coordinator
        https://bugs.webkit.org/show_bug.cgi?id=74879

        Reviewed by Andreas Kling.

        * WebCore.exp.in:
        Export ScrollingCoordinator::handleGestureEvent.

        * page/ScrollingCoordinator.cpp:
        (WebCore::ScrollingCoordinator::handleGestureEvent):
        * page/ScrollingCoordinator.h:
        Add handleGestureEvent stub.

2011-12-19  Kentaro Hara  <haraken@chromium.org>

        Move WebAudio and WebSocket getters from JSDOMWindowCustom.cpp
        to JSDOMWindow{WebAudio,WebSocket}Custom.cpp
        https://bugs.webkit.org/show_bug.cgi?id=74841

        Reviewed by Adam Barth.

        This is the second step for bug 74599. We are planning to enable the [Supplemental]
        IDL and modularize WebAudio and WebSocket on AppleWebKit. This patch moves
        webkitAudioContext() and webSocket() from JSDOMWindowCustom.cpp to JSDOMWindowWebAudioCustom.cpp
        and JSDOMWindowWebSocketCustom.cpp, for modularization.

        Tests: Confirm that build succeeds.
               http/tests/websocket/tests/*

        * GNUmakefile.list.am: Added JSDOMWindowWebAudioCustom.cpp and JSDOMWindowWebSocketCustom.cpp.
        * Target.pri: Ditto.
        * UseJSC.cmake: Ditto.
        * WebCore.gypi: Ditto.
        * WebCore.vcproj/WebCore.vcproj: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Ditto.
        * bindings/js/JSBindingsAllInOne.cpp: Ditto.

        * bindings/js/JSDOMWindowCustom.cpp: For now we do not remove settingsForWindow(),
        webkitAudioContext() and webSocket(), since other build systems are still using them.
        We will remove them after all build systems implement the [Supplemental] IDL.
        * bindings/js/JSDOMWindowWebAudioCustom.cpp: Added.
        (WebCore::settingsForWindowWebAudio):
        (WebCore::JSDOMWindow::webkitAudioContext):
        * bindings/js/JSDOMWindowWebSocketCustom.cpp: Added.
        (WebCore::settingsForWindowWebSocket):
        (WebCore::JSDOMWindow::webSocket):

        * bindings/scripts/CodeGeneratorJS.pm: Until we implement the [Supplemental] IDL
        on all build systems, we need to temporarily allow two kinds of webkitAudioContext()
        and webSocket().
        (GenerateHeader):

2011-12-16  Zhenyao Mo  <zmo@google.com>

        Postpone deleteRenderbuffer/deleteTexture until all framebuffer attachment points are removed.
        https://bugs.webkit.org/show_bug.cgi?id=74741

        Reviewed by Kenneth Russell.

        Use WebGLObject's attachment count mechanism to track if a renderbuffer/texture
        is still attached to framebuffers, and if its deletion should be delated or not.

        * html/canvas/WebGLFramebuffer.cpp:
        (WebCore::WebGLFramebuffer::setAttachmentForBoundFramebuffer):
        (WebCore::WebGLFramebuffer::getAttachment):
        (WebCore::WebGLFramebuffer::removeAttachmentFromBoundFramebuffer):
        (WebCore::WebGLFramebuffer::deleteObjectImpl):
        (WebCore::WebGLFramebuffer::isBound):
        * html/canvas/WebGLFramebuffer.h:

2011-12-19  Iain Merrick  <husky@google.com>

        [chromium] Accelerated canvas broken in threaded compositing mode
        https://bugs.webkit.org/show_bug.cgi?id=72738

        We were flushing the Skia canvas in updateCompositorResources, which
        is illegal as it runs on the wrong thread. Moved to paintContentsIfDirty
        instead. For correct rendering on the compositor thread, we make a copy
        of the canvas texture in updateCompositorResources.

        Removed m_textureId and pushPropertiesTo from CanvasLayerChromium, as
        it's no longer common between Canvas2DLayerChromium and
        WebGLLayerChromium. WebGL changes do not change functionality.

        Reviewed by James Robinson.

        * platform/graphics/chromium/Canvas2DLayerChromium.cpp:
        (WebCore::Canvas2DLayerChromium::create):
        (WebCore::Canvas2DLayerChromium::Canvas2DLayerChromium):
        (WebCore::Canvas2DLayerChromium::~Canvas2DLayerChromium):
        (WebCore::Canvas2DLayerChromium::setTextureId):
        (WebCore::Canvas2DLayerChromium::contentChanged):
        (WebCore::Canvas2DLayerChromium::drawsContent):
        (WebCore::Canvas2DLayerChromium::paintContentsIfDirty):
        (WebCore::Canvas2DLayerChromium::setLayerTreeHost):
        (WebCore::Canvas2DLayerChromium::setTextureManager):
        (WebCore::Canvas2DLayerChromium::updateCompositorResources):
        (WebCore::Canvas2DLayerChromium::pushPropertiesTo):
        (WebCore::Canvas2DLayerChromium::unreserveContentsTexture):
        (WebCore::Canvas2DLayerChromium::cleanupResources):
        * platform/graphics/chromium/Canvas2DLayerChromium.h:
        * platform/graphics/chromium/CanvasLayerChromium.cpp:
        (WebCore::CanvasLayerChromium::CanvasLayerChromium):
        * platform/graphics/chromium/CanvasLayerChromium.h:
        * platform/graphics/chromium/WebGLLayerChromium.cpp:
        (WebCore::WebGLLayerChromium::WebGLLayerChromium):
        (WebCore::WebGLLayerChromium::pushPropertiesTo):
        * platform/graphics/chromium/WebGLLayerChromium.h:
        (WebCore::WebGLLayerChromium::textureId):
        (WebCore::WebGLLayerChromium::setTextureId):
        * platform/graphics/chromium/cc/CCCanvasLayerImpl.h:
        (WebCore::CCCanvasLayerImpl::textureId):
        * platform/graphics/skia/ImageBufferSkia.cpp:
        (WebCore::createAcceleratedCanvas):

2011-12-19  Mike Reed  <reed@google.com>

        [skia] cache typeface in FontPlatformData
        https://bugs.webkit.org/show_bug.cgi?id=74415

        Reviewed by Stephen White.

        No new tests. optimization only, existing tests in play

        * platform/graphics/chromium/FontChromiumWin.cpp:
        (WebCore::TransparencyAwareFontPainter::TransparencyAwareGlyphPainter::drawGlyphs):
        (WebCore::Font::drawGlyphs):
        * platform/graphics/chromium/FontPlatformDataChromiumWin.cpp:
        (WebCore::CreateTypefaceFromHFont):
        (WebCore::FontPlatformData::FontPlatformData):
        (WebCore::FontPlatformData::operator=):
        (WebCore::FontPlatformData::~FontPlatformData):
        * platform/graphics/chromium/FontPlatformDataChromiumWin.h:
        (WebCore::FontPlatformData::typeface):
        (WebCore::FontPlatformData::lfQuality):
        (WebCore::FontPlatformData::hash):
        * platform/graphics/skia/SkiaFontWin.cpp:
        (WebCore::setupPaintForFont):
        (WebCore::paintSkiaText):
        * platform/graphics/skia/SkiaFontWin.h:

2011-12-04  Robert Hogan  <robert@webkit.org>

        CSS 2.1 failure: border-conflict-element-*
        https://bugs.webkit.org/show_bug.cgi?id=71244

        Reviewed by Darin Adler.

        From http://www.w3.org/TR/CSS21/tables.html#border-conflict-resolution :
         "When two adjacent cells have the same border-width and the same border-style in a 
          'border-collapse: collapse' table, then the color of the border from the leftmost cell wins
          (if the table's 'direction' is 'ltr'; right, if it is 'rtl') and the color of the border
          from the topmost cell wins."

        RenderTable manages collapsed borders by first creating a list of unique border values sorted in ascending
        priority. A unique border value is determined by style, width and color and cell-type precedence. For each 
        entry in this list RenderTableSection paints each cell in its section starting at the top-left. If a cell 
        is using the border RenderTable is currently iterating for, the cell will paint that border. 

        The problems with this approach are:
          1. Painting cells from the top-left to the bottom-right means that borders further to the right and to the bottom
             of the table will paint over those further to the left and the top, breaking the precedence due to cell position.
          2. It creates more unique borders in the list than necessary. Borders that differ only on color do not need to be painted in 
             a separate iteration. Precedence in such cases is determined by cell position.

        So in order to respect cell position when painting collapsed borders:
          1. RenderTableCell now treats borders with the same style, width and precedence as equal. This results in a performance
             improvement on tables where collapsed borders differ only in color, since RenderTable is no longer painting every cell in the table
             for each unique collapsed border color. It also allows color to be a function of cell position rather than border type.
          2. RenderTableSection now paints collapsed borders separately from cells and from the bottom-right to the top-left instead of top-left
             to bottom-right. If a collapsed border has precedence due to style, width or cell-group-type it will still be respected but precedence 
             due to color is enforced by painting cells nearer to the top and left *after* cells nearer to the bottom and right.

        The order in which collapsed borders paint over each other in the same cell has not changed. Unlike Firefox,
        WebKit does not attempt render them as diagonals or attempt to give borders on the edge of the table precedence
        so that grooved and ridged styles have a smooth edge all round the table.

        This fixes the following failing tests from the border-conflict-element-* set
        in the CSS 2.1 test suite:
          border-conflict-element-001d.htm
          border-conflict-element-0037.htm
          border-conflict-element-0038.htm

        One test in the suite is known to be wrong, so a corrected version has been landed outside the 
        css2.1 folder:
          border-conflict-element-002.htm

        This change entails rebaselining quite a few tests, see the LayoutTests ChangeLog for a full
        explanation of the rebaselines.

        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::paint):
        (WebCore::addBorderStyle):
        (WebCore::compareBorderValuesForQSort):
        (WebCore::RenderTableCell::paintCollapsedBorders):
        * rendering/RenderTableCell.h:
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::paintCell):
        (WebCore::RenderTableSection::paintObject):
        * rendering/style/CollapsedBorderValue.h:
        (WebCore::CollapsedBorderValue::isSameIgnoringColor):

2011-12-19  Jer Noble  <jer.noble@apple.com>

        MediaController: cannot scrub while playing.
        https://bugs.webkit.org/show_bug.cgi?id=74870
        rdar://problem/10602037

        Reviewed by Eric Carlson.

        Updated media/media-controller-playback.html test.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::setController): Change order of operations; set the controllers media
            element before passing controller to the controls.
        * html/MediaController.cpp:
        (MediaController::updatePlaybackState): Stop the playback clock when WAITING or ENDED.
        (MediaController::beginScrubbing): Stop the playback clock.
        (MediaController::endScrubbing): Restart (if necessary) the playback clock.
        (MediaController::canPlay): Return true if paused.
        * platform/mac/PlatformClockCA.cpp:
        (PlatformClockCA::setCurrentTime): Stop the CAClock before changing the current time.

2011-12-19  Adam Barth  <abarth@webkit.org>

        We don't pass all of the html5lib unsafe-text.dat tests
        https://bugs.webkit.org/show_bug.cgi?id=74825

        Reviewed by Eric Seidel.

        This patch is actually three (tiny) related patches.  Together these
        changes cause use to pass the plain-text-unsafe.dat tests from html5lib.

        Tests: html5lib/runner.html

        * html/parser/HTMLTokenizer.cpp:
        (WebCore::::shouldSkipNullCharacters):
            - We're not supposed to skip null characters in the PLAINTEXTState.
              This might cause compatibility problems with text/plain documents
              that contains NUL characters because we use the PLAINTEXTState
              to parse them.  If we run into any trouble, it's easy to fix in
              TextDocumentParser.
        * html/parser/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::constructTreeFromToken):
            - Fix typo.
        (WebCore::HTMLTreeBuilder::constructTreeFromAtomicToken):
            - We're supposed to replace NUL characters if the next character
              token if we're in foreign content.  The previous check didn't
              quite get this case correctly.
        (WebCore::HTMLTreeBuilder::processTokenInForeignContent):
            - Now that we replace NUL characters with the replacement
              character, we need to be more careful about the fact that
              replacement characters don't flip m_framesetOk to false.  Note:
              This new check matches the check for non-foreign content.

2011-12-19  Adam Barth  <abarth@webkit.org>

        WebKit should support HTML entities that expand to more than one character
        https://bugs.webkit.org/show_bug.cgi?id=74826

        Reviewed by Darin Adler.

        Tests: html5lib/runner.html

        * html/parser/HTMLEntityNames.in:
            - Add missing HTML entities from HTML5 spec.  I'll sort this file
              in a followup patch.  (It's not quite sorted perfectly and
              sorting in this patch would introduce noise into the patch.)
        * html/parser/HTMLEntityParser.cpp:
        (WebCore::decodeNamedEntity):
            - convertToUTF16 always returns true, so make it return void instead.
            - Teach the entity parse that some entities expand to two characters.
        * html/parser/HTMLEntityParser.h:
            - Add a warning that decodeNamedEntity is really a broken API.
            - This patch doesn't actually change any behavior of this API, but
              it does illustrate that the two callers of this API (the two XML
              parsers) really need to move a more sensible API.
        * html/parser/HTMLEntitySearch.cpp:
        (WebCore::HTMLEntitySearch::HTMLEntitySearch):
        (WebCore::HTMLEntitySearch::advance):
        * html/parser/HTMLEntitySearch.h:
        (WebCore::HTMLEntitySearch::fail):
            - Remove the concept of currentValue.  This isn't really used for
              anything and conflicts with the idea that entities can expand
              to more than one character.
        * html/parser/HTMLEntityTable.h:
            - Add storage for two UChar32 values per entity.
        * html/parser/create-html-entity-table:
        (convert_value_to_int):
            - Teach this script to handle entities that expand to multiple
              Unicode characters.
        * xml/parser/CharacterReferenceParserInlineMethods.h:
        (WebCore::consumeCharacterReference):
            - Update this function now that convertToUTF16 returns void.
        * xml/parser/XMLCharacterReferenceParser.cpp:
            - The XML version of convertToUTF16 also needs to return void to
              match the HTML signature.  (It used to return true all the time
              as well.)
        * xml/parser/XMLTreeBuilder.cpp:
        (WebCore::XMLTreeBuilder::processHTMLEntity):
            - Update this caller use leftValue instead of value.  My sense is
              that this code is moderately broken today because it's using HTML
              entities in parsing XML.  I've added a FIXME.  This code is
              disabled in all builds, so I don't feel a big need to fix this
              issue in this patch.  We should either finish this project or
              delete this complexity from the project.

2011-12-19  Andreas Kling  <kling@webkit.org>

        Avoid instantiating ScrollAnimators when possible.
        <http://webkit.org/b/74830>

        Reviewed by Beth Dakin.

        Have RenderLayer::scrollToOffset() check if we're scrolling to the already
        current offset. In that case, don't call down to scrollToOffsetWithoutAnimation(),
        avoiding the instantiation of a ScrollAnimator.

        This reduces memory consumption by 400 kB (on 32-bit) when viewing the full HTML5
        spec on <http://whatwg.org/c>, since we were creating a ScrollAnimator for every
        single RenderLayer.

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::scrollToOffset):

2011-12-19  Chris Guan  <chris.guan@torchmobile.com.cn>

        [BlackBerry] remove one file related to multipart from the BlackBerry build system
        https://bugs.webkit.org/show_bug.cgi?id=74839

        Reviewed by Daniel Bates.

        After refactored multipart, the code of MultipartResponseDelegate have been moved 
        out of WebCore, we do not need to upstream MultipartResponseDelegate any more. 
        So remove it from PlatformBlackBerry.cmake to update build system. 
        
        * PlatformBlackBerry.cmake:

2011-12-15  Geoffrey Garen  <ggaren@apple.com>

        Placement new does an unnecessary NULL check
        https://bugs.webkit.org/show_bug.cgi?id=74676

        Reviewed by Sam Weinig.

        * bindings/js/JSImageConstructor.h:
        (WebCore::JSImageConstructor::create):
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateHeader):
        (GenerateConstructorDeclaration):
        * bridge/c/CRuntimeObject.h:
        (JSC::Bindings::CRuntimeObject::create):
        * bridge/c/c_instance.cpp:
        (JSC::Bindings::CRuntimeMethod::create):
        * bridge/jni/jsc/JavaInstanceJSC.cpp:
        (JavaRuntimeMethod::create):
        * bridge/jni/jsc/JavaRuntimeObject.h:
        (JSC::Bindings::JavaRuntimeObject::create):
        * bridge/objc/ObjCRuntimeObject.h:
        (JSC::Bindings::ObjCRuntimeObject::create):
        * bridge/objc/objc_instance.mm:
        (ObjCRuntimeMethod::create):
        * bridge/objc/objc_runtime.h:
        (JSC::Bindings::ObjcFallbackObjectImp::create):
        * bridge/runtime_array.h:
        (JSC::RuntimeArray::create):
        * bridge/runtime_method.h:
        (JSC::RuntimeMethod::create):
        * bridge/runtime_object.h:
        (JSC::Bindings::RuntimeObject::create):
        * dom/Document.h:
        (WebCore::FormElementKeyHashTraits::constructDeletedValue): Use NotNull
        placement new, as in JavaScriptCore.

        * platform/PODArena.h:
        (WebCore::PODArena::allocateObject): No need to check for NULL explicitly,
        since that's the built-in behavior of placement new.

        * platform/graphics/FontCache.cpp:
        (WebCore::FontDataCacheKeyTraits::constructDeletedValue):
        * platform/graphics/IntRectHash.h:
        * platform/graphics/IntSizeHash.h: More NotNull.

        * rendering/RenderObject.h: Declaring that we throw is the C++ way to say
        that operator new will not return NULL.

2011-12-19  Eric Carlson  <eric.carlson@apple.com>

        Render text tracks
        https://bugs.webkit.org/show_bug.cgi?id=62886

        Reviewed by Sam Weinig.

        Test: media/track/track-cue-rendering.html

        * css/mediaControls.css:
        (video::-webkit-media-text-track-container):
        (video::-webkit-media-text-track-display):

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::HTMLMediaElement): Initialize m_haveVisibleTextTrack.
        (WebCore::HTMLMediaElement::updateActiveTextTrackCues): Trigger an update of the text
            track display.
        (WebCore::HTMLMediaElement::textTrackModeChanged): call configureTextTrackDisplay() so 
            the text track display is hidden or shown when necessary.
        (WebCore::HTMLMediaElement::userIsInterestedInThisTrack): Minor cleanup.
        (WebCore::HTMLMediaElement::createMediaControls): configureMediaControls() always called
            reset after creating the controls, do it here instead.
        (WebCore::HTMLMediaElement::configureMediaControls): Simplify and cleanup.
        (WebCore::HTMLMediaElement::configureTextTrackDisplay): Show and hide text track display.
        * html/HTMLMediaElement.h:
        (WebCore::HTMLMediaElement::currentlyVisibleCues):

        * html/shadow/MediaControlElements.cpp:
        (WebCore::RenderTextTrackContainerElement::RenderTextTrackContainerElement): New.
        (WebCore::RenderTextTrackContainerElement::layout): New. Call the display element so it can
            update the position and font size.
        (WebCore::MediaControlTextTrackContainerElement::MediaControlTextTrackContainerElement): New.
        (WebCore::MediaControlTextTrackContainerElement::create): Ditto.
        (WebCore::MediaControlTextTrackContainerElement::createRenderer): Ditto.
        (WebCore::MediaControlTextTrackContainerElement::shadowPseudoId): Ditto.
        (WebCore::MediaControlTextTrackContainerElement::updateSizes): Keep the cue display element
            positioned above the bottom of the video box, and size the font according to the video height.
        (WebCore::MediaControlTextTrackDisplayElement::MediaControlTextTrackDisplayElement): New.
        (WebCore::MediaControlTextTrackDisplayElement::create): Ditto.
        (WebCore::MediaControlTextTrackDisplayElement::shadowPseudoId): Ditto.
        * html/shadow/MediaControlElements.h:
        (WebCore::MediaControlTextTrackContainerElement::displayType):
        (WebCore::MediaControlTextTrackDisplayElement::displayType):

        * html/shadow/MediaControlRootElement.cpp:
        (WebCore::MediaControlRootElement::MediaControlRootElement): New.
        (WebCore::MediaControlRootElement::setMediaController): Ditto.
        (WebCore::MediaControlRootElement::createTextTrackDisplay): Ditto.
        (WebCore::MediaControlRootElement::showTextTrackDisplay): Ditto.
        (WebCore::MediaControlRootElement::hideTextTrackDisplay): Ditto.
        (WebCore::MediaControlRootElement::updateTextTrackDisplay): Ditto.
        * html/shadow/MediaControlRootElement.h:

        * html/shadow/MediaControlRootElementChromium.cpp:
        (WebCore::MediaControlRootElementChromium::MediaControlRootElementChromium): New.
        (WebCore::MediaControlRootElement::createTextTrackDisplay): Ditto.
        (WebCore::MediaControlRootElement::showTextTrackDisplay): Ditto.
        (WebCore::MediaControlRootElement::hideTextTrackDisplay): Ditto.
        (WebCore::MediaControlRootElement::updateTextTrackDisplay): Ditto.
        * html/shadow/MediaControlRootElementChromium.h:
        * html/shadow/MediaControls.h:

2011-12-19  Eric Carlson  <eric.carlson@apple.com>

        Enable <track> for Mac build
        https://bugs.webkit.org/show_bug.cgi?id=74838

        Reviewed by Darin Adler.

        * Configurations/FeatureDefines.xcconfig:
        * bindings/generic/RuntimeEnabledFeatures.cpp:

2011-12-19  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Make the Editor::setIgnoreCompositionSelectionChange public as it is needed by Qt

        Reviewed by Simon Hausmann.

        * editing/Editor.h:

2011-12-19  Alexander Pavlov  <apavlov@chromium.org>

        Web Inspector: Implement CSS selector profiler backend
        https://bugs.webkit.org/show_bug.cgi?id=74603

        Reviewed by Pavel Feldman.

        No new tests, as the changed code does not result in visible effects yet.

        * inspector/Inspector.json:
        * inspector/InspectorCSSAgent.cpp:
        (WebCore::RuleMatchingStats::RuleMatchingStats):
        (WebCore::SelectorProfile::SelectorProfile):
        (WebCore::SelectorProfile::~SelectorProfile):
        (WebCore::SelectorProfile::totalMatchingTimeMs):
        (WebCore::SelectorProfile::startSelector):
        (WebCore::SelectorProfile::commitSelector):
        (WebCore::SelectorProfile::commitSelectorTime):
        (WebCore::SelectorProfile::toInspectorObject):
        (WebCore::InspectorCSSAgent::clearFrontend):
        (WebCore::InspectorCSSAgent::restore):
        (WebCore::InspectorCSSAgent::startSelectorProfiler):
        (WebCore::InspectorCSSAgent::stopSelectorProfiler):
        (WebCore::InspectorCSSAgent::willMatchRule):
        (WebCore::InspectorCSSAgent::didMatchRule):
        (WebCore::InspectorCSSAgent::willProcessRule):
        (WebCore::InspectorCSSAgent::didProcessRule):
        * inspector/InspectorCSSAgent.h:

2011-12-19  Alexander Pavlov  <apavlov@chromium.org>

        Web Inspector: Status bar button glyph for the "Record" buttons broken
        https://bugs.webkit.org/show_bug.cgi?id=74861

        Reviewed by Pavel Feldman.

        * inspector/front-end/inspector.css:
        (.record-cpu-profile-status-bar-item .glyph, .record-profile-status-bar-item .glyph):
        (.record-cpu-profile-status-bar-item.toggled-on .glyph, .record-profile-status-bar-item.toggled-on .glyph):

2011-12-19  Pavel Feldman  <pavel.feldman@gmail.com>

        Web Inspector: only the first @rule is highlighted in CSS
        https://bugs.webkit.org/show_bug.cgi?id=74568

        Reviewed by Timothy Hatcher.

        * inspector/front-end/SourceCSSTokenizer.js:
        (WebInspector.SourceCSSTokenizer.prototype.nextToken):
        * inspector/front-end/SourceCSSTokenizer.re2js:

2011-12-19  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: Feature Request: Able to remove all breakpoints.
        https://bugs.webkit.org/show_bug.cgi?id=63055

        Reviewed by Pavel Feldman.

        * English.lproj/localizedStrings.js:
        * inspector/front-end/BreakpointManager.js:
        (WebInspector.BreakpointManager.prototype.removeAllBreakpoints):
        * inspector/front-end/BreakpointsSidebarPane.js:
        (WebInspector.JavaScriptBreakpointsSidebarPane):
        (WebInspector.JavaScriptBreakpointsSidebarPane.prototype._breakpointContextMenu):
        (WebInspector.JavaScriptBreakpointsSidebarPane.prototype._contextMenu):
        * inspector/front-end/DebuggerPresentationModel.js:
        (WebInspector.DebuggerPresentationModel.prototype.removeAllBreakpoints):

2011-12-19  Benjamin Poulain  <benjamin@webkit.org>

        Build fix for ScrollingCoordinatorMac.mm when building on a case sensitive system

        Unreviewed build fix for r103180. StdlibExtras.h->StdLibExtras.h to compile on case sensitive system.

        * page/mac/ScrollingCoordinatorMac.mm:

2011-12-19  Kentaro Hara  <haraken@chromium.org>

        Remove unnecessary [JSCCustomGetter] IDLs from DOMWindow.idl
        https://bugs.webkit.org/show_bug.cgi?id=74829

        Reviewed by Adam Barth.

        Now JSC has implemented the [Constructor] IDL and it generates
        getDOMConstructor() automatically. This patch removes hand-written
        unnecessary getDOMConstructor()s from JSDOMWindowCustom.cpp.

        No new tests. No change in behavior.

        * bindings/js/JSDOMWindowCustom.cpp:
        * page/DOMWindow.idl:

2011-12-19  Adam Barth  <abarth@webkit.org>

        The HTML parser doesn't enforce the "Noah's Ark condition" from the HTML5 spec
        https://bugs.webkit.org/show_bug.cgi?id=74828

        Reviewed by Darin Adler.

        This patch implement the "Noah's Ark condition" from the HTML5
        specification.  This condition limits the number of identitical
        elements that can be in the list of active formatting elements.  I'm not
        entirely sure that enforcing this condition is worth the complexity,
        but given that we've come this far in support of the HTML5 parsing
        algorithm, we might as well finish it.

        After this patch, we pass all but one of the html5lib parsing tests!

        Tests: html5lib/runner.html

        * html/parser/HTMLFormattingElementList.cpp:
        (WebCore::attributeCount):
        (WebCore::HTMLFormattingElementList::append):
        (WebCore::HTMLFormattingElementList::tryToEnsureNoahsArkConditionQuickly):
        (WebCore::HTMLFormattingElementList::ensureNoahsArkCondition):
        * html/parser/HTMLFormattingElementList.h:

2011-12-19  Benjamin Poulain  <bpoulain@apple.com>

        Add support for 8 bits strings to Document::isValidName()
        https://bugs.webkit.org/show_bug.cgi?id=74784

        Reviewed by Darin Adler.

        Avoid the conversion to 16bits when we are in the ASCII fast path,
        otherwise fallback to the Unicode testing in 16bits.

        * dom/Document.cpp:
        (WebCore::isValidNameASCII):
        (WebCore::Document::isValidName):

2011-12-18  Kentaro Hara  <haraken@chromium.org>

        REGRESSION(r101445): [JSC] Generated code for custom getters and setters
        with the [Supplemental] IDL is wrong
        https://bugs.webkit.org/show_bug.cgi?id=74837

        Reviewed by Darin Adler.

        In bug 73162, we implemented the [Supplemental] IDL, but the generated code
        for custom getters and setters was wrong in JSC. This patch fixes CodeGeneratorJS.pm
        so that the result of WebCore/bindings/scripts/test/TestInterface.idl becomes as follows:

        Wrong:
            JSValue jsTestInterfaceStr3(ExecState* exec, JSValue slotBase, const Identifier&)
            {
                JSTestInterface* castedThis = static_cast<JSTestInterface*>(asObject(slotBase));
                return JSTestSupplemental::str3(castedThis, exec);
            }

        Correct:
            JSValue jsTestInterfaceStr3(ExecState* exec, JSValue slotBase, const Identifier&)
            {
                JSTestInterface* castedThis = static_cast<JSTestInterface*>(asObject(slotBase));
                TestInterface* imp = static_cast<TestInterface*>(castedThis->impl());
                return castedThis->str3(imp, exec);
            }

        Tests: bindings/scripts/test/JS/TestInterface.idl

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateHeader):
        (GenerateImplementation):
        * bindings/scripts/test/JS/JSTestInterface.cpp: Updated run-bindings-tests result.
        (WebCore::jsTestInterfaceStr3):
        (WebCore::setJSTestInterfaceStr3):
        * bindings/scripts/test/JS/JSTestInterface.h: Ditto.

2011-12-18  Adam Barth  <abarth@webkit.org>

        Fix typo in comment.

        * html/parser/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::callTheAdoptionAgency):

2011-12-18  Keishi Hattori  <keishi@webkit.org>

        Implement <input type=color> UI WebKit chromium part
        https://bugs.webkit.org/show_bug.cgi?id=65897

        Reviewed by Darin Fisher.

        * GNUmakefile.list.am: Removed ColorChooser.cpp and added ColorChooserClient.h
        * WebCore.gypi: Added ColorChooser.h and ColorChooserClient.h
        * WebCore.xcodeproj/project.pbxproj: Removed ColorChooser.cpp and added ColorChooserClient.h

2011-12-18  David Barton  <dbarton@mathscribe.com>

        <msup>, <munder>, <mover>, and <munderover> baseline positions are wrong
        https://bugs.webkit.org/show_bug.cgi?id=72821

        Reviewed by Darin Adler.

        Tested by rebaselining 8 existing tests. (Pardon the pun.)

        * rendering/mathml/RenderMathMLSubSup.cpp:
        (WebCore::RenderMathMLSubSup::baselinePosition):
        Just using the base's (these puns are not my fault) baseline did not leave room for the exponent.
        * rendering/mathml/RenderMathMLUnderOver.cpp:
        (WebCore::RenderMathMLUnderOver::baselinePosition):
        Added a guard condition, and removed some bad lines apparently mistakenly copied from RenderMathMLSubSup.cpp.

2011-12-18  Luke Macpherson   <macpherson@chromium.org>

        Implement CSS line-height property in CSSStyleApplyProperty.
        https://bugs.webkit.org/show_bug.cgi?id=74561

        Reviewed by Andreas Kling.

        No new tests / refactoring only.

        * css/CSSPrimitiveValue.h:
        (WebCore::CSSPrimitiveValue::isNumber):
        * css/CSSStyleApplyProperty.cpp:
        (WebCore::ApplyPropertyLineHeight::applyValue):
        (WebCore::ApplyPropertyLineHeight::createHandler):
        (WebCore::CSSStyleApplyProperty::CSSStyleApplyProperty):
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):

2011-12-18  Luke Macpherson   <macpherson@chromium.org>

        Implement CSS outline shorthand property in CSSStyleApplyProperty.
        https://bugs.webkit.org/show_bug.cgi?id=74467

        Reviewed by Andreas Kling.

        No new tests / refactoring only.

        RenderStyle::resetOutline was removed in favor of explicity expanding to the
        initial values of the shorthand expansion. This improves consistency because
        the initial values to use are more clearly (and singularly) defined.

        * css/CSSStyleApplyProperty.cpp:
        (WebCore::CSSStyleApplyProperty::CSSStyleApplyProperty):
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):
        * rendering/style/RenderStyle.h:

2011-12-18  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r103205.
        http://trac.webkit.org/changeset/103205
        https://bugs.webkit.org/show_bug.cgi?id=74833

        There are valid characters above 0x80 when the  string is
        8bits (Requested by benjaminp on #webkit).

        * dom/Document.cpp:
        (WebCore::isValidNameASCII):
        (WebCore::Document::isValidName):

2011-12-18  Luke Macpherson   <macpherson@chromium.org>

        Separate box alignment and box pack values into separate enums.
        https://bugs.webkit.org/show_bug.cgi?id=74580

        Reviewed by Andreas Kling.

        No new tests / refactoring only.

        Separating these types cleans up the code by removing several assertions that
        values are in the correct ranges, as this is ensured by the type system.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        (WebCore::CSSPrimitiveValue::operator EBoxPack):
        (WebCore::CSSPrimitiveValue::operator EBoxAlignment):
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):
        * rendering/RenderDeprecatedFlexibleBox.cpp:
        (WebCore::RenderDeprecatedFlexibleBox::layoutHorizontalBox):
        (WebCore::RenderDeprecatedFlexibleBox::layoutVerticalBox):
        * rendering/RenderFullScreen.cpp:
        (createFullScreenStyle):
        * rendering/style/RenderStyle.h:
        (WebCore::InheritedFlags::boxPack):
        (WebCore::InheritedFlags::setBoxAlign):
        (WebCore::InheritedFlags::setBoxPack):
        (WebCore::InheritedFlags::initialBoxPack):
        * rendering/style/RenderStyleConstants.h:
        * rendering/style/StyleDeprecatedFlexibleBoxData.h:

2011-12-18  Luke Macpherson   <macpherson@chromium.org>

        Implement CSS font-size property in CSSStyleApplyProperty.
        https://bugs.webkit.org/show_bug.cgi?id=74368

        Reviewed by Andreas Kling.

        No new tests / refactoring only.

        * css/CSSStyleApplyProperty.cpp:
        (WebCore::ApplyPropertyFontSize::largerFontSize):
        (WebCore::ApplyPropertyFontSize::smallerFontSize):
        (WebCore::ApplyPropertyFontSize::applyInheritValue):
        (WebCore::ApplyPropertyFontSize::applyInitialValue):
        (WebCore::ApplyPropertyFontSize::applyValue):
        (WebCore::ApplyPropertyFontSize::createHandler):
        (WebCore::CSSStyleApplyProperty::CSSStyleApplyProperty):
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):
        * css/CSSStyleSelector.h:
        (WebCore::CSSStyleSelector::hasParentNode):

2011-12-18  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r103199.
        http://trac.webkit.org/changeset/103199
        https://bugs.webkit.org/show_bug.cgi?id=74832

        Caused a bot crashiness extravaganza! (Requested by kling on
        #webkit).

        * platform/KURL.cpp:
        (WebCore::isLetterMatchIgnoringCase):
        (WebCore::protocolIs):

2011-12-18  Dan Bernstein  <mitz@apple.com>

        Positioned Floats: Assertion hit in fast/block/positioning/positioned-float-layout-after-image-load.html
        https://bugs.webkit.org/show_bug.cgi?id=67759

        Reviewed by Darin Adler.

        Test: fast/block/positioning/positioned-float-layout-after-image-load.html

        Positioned floats are both floating and positioned. Made the following functions treat them as
        positioned rather than as floats by reordering code.

        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::LineBreaker::skipTrailingWhitespace):
        (WebCore::RenderBlock::LineBreaker::skipLeadingWhitespace):
        (WebCore::RenderBlock::LineBreaker::nextLineBreak):

2011-12-18  Benjamin Poulain  <bpoulain@apple.com>

        Add support for 8 bits strings to Document::isValidName()
        https://bugs.webkit.org/show_bug.cgi?id=74784

        Reviewed by Andreas Kling.

        The valid name has a fast path for ASCII, and a slow path
        taking Unicode characters into account.

        For 8-bit strings, we don't need to take the non-ASCII path
        as it could never succeed if the ASCII path didn't.

        * dom/Document.cpp:
        (WebCore::isValidNameASCII):
        (WebCore::Document::isValidName):

2011-12-18  Huang Dongsung  <luxtella@company100.net>

        [Qt] Remove redundant m_glWidget->makeCurrent() calls in GraphicsContext3DQt.
        https://bugs.webkit.org/show_bug.cgi?id=73814

        It causes a performance hit.
        Moved the redundant function calls to makeContextCurrent().

        Reviewed by Noam Rosenthal.

        * platform/graphics/qt/GraphicsContext3DQt.cpp:
        (WebCore::GraphicsContext3DPrivate::GraphicsContext3DPrivate):
        (WebCore::GraphicsContext3DPrivate::paintToTextureMapper):
        (WebCore::GraphicsContext3DPrivate::paint):
        (WebCore::GraphicsContext3DPrivate::makeCurrentIfNeeded):
        (WebCore::GraphicsContext3D::~GraphicsContext3D):
        (WebCore::GraphicsContext3D::makeContextCurrent):
        (WebCore::GraphicsContext3D::paintRenderingResultsToCanvas):
        (WebCore::GraphicsContext3D::reshape):
        (WebCore::GraphicsContext3D::activeTexture):
        (WebCore::GraphicsContext3D::attachShader):
        (WebCore::GraphicsContext3D::getAttachedShaders):
        (WebCore::GraphicsContext3D::bindAttribLocation):
        (WebCore::GraphicsContext3D::bindBuffer):
        (WebCore::GraphicsContext3D::bindFramebuffer):
        (WebCore::GraphicsContext3D::bindRenderbuffer):
        (WebCore::GraphicsContext3D::bindTexture):
        (WebCore::GraphicsContext3D::blendColor):
        (WebCore::GraphicsContext3D::blendEquation):
        (WebCore::GraphicsContext3D::blendEquationSeparate):
        (WebCore::GraphicsContext3D::blendFunc):
        (WebCore::GraphicsContext3D::blendFuncSeparate):
        (WebCore::GraphicsContext3D::bufferData):
        (WebCore::GraphicsContext3D::bufferSubData):
        (WebCore::GraphicsContext3D::checkFramebufferStatus):
        (WebCore::GraphicsContext3D::clearColor):
        (WebCore::GraphicsContext3D::clear):
        (WebCore::GraphicsContext3D::clearDepth):
        (WebCore::GraphicsContext3D::clearStencil):
        (WebCore::GraphicsContext3D::colorMask):
        (WebCore::GraphicsContext3D::compileShader):
        (WebCore::GraphicsContext3D::compressedTexImage2D):
        (WebCore::GraphicsContext3D::compressedTexSubImage2D):
        (WebCore::GraphicsContext3D::copyTexImage2D):
        (WebCore::GraphicsContext3D::copyTexSubImage2D):
        (WebCore::GraphicsContext3D::cullFace):
        (WebCore::GraphicsContext3D::depthFunc):
        (WebCore::GraphicsContext3D::depthMask):
        (WebCore::GraphicsContext3D::depthRange):
        (WebCore::GraphicsContext3D::detachShader):
        (WebCore::GraphicsContext3D::disable):
        (WebCore::GraphicsContext3D::disableVertexAttribArray):
        (WebCore::GraphicsContext3D::drawArrays):
        (WebCore::GraphicsContext3D::drawElements):
        (WebCore::GraphicsContext3D::enable):
        (WebCore::GraphicsContext3D::enableVertexAttribArray):
        (WebCore::GraphicsContext3D::finish):
        (WebCore::GraphicsContext3D::flush):
        (WebCore::GraphicsContext3D::framebufferRenderbuffer):
        (WebCore::GraphicsContext3D::framebufferTexture2D):
        (WebCore::GraphicsContext3D::frontFace):
        (WebCore::GraphicsContext3D::generateMipmap):
        (WebCore::GraphicsContext3D::getActiveAttrib):
        (WebCore::GraphicsContext3D::getActiveUniform):
        (WebCore::GraphicsContext3D::getAttribLocation):
        (WebCore::GraphicsContext3D::getError):
        (WebCore::GraphicsContext3D::getString):
        (WebCore::GraphicsContext3D::hint):
        (WebCore::GraphicsContext3D::isBuffer):
        (WebCore::GraphicsContext3D::isEnabled):
        (WebCore::GraphicsContext3D::isFramebuffer):
        (WebCore::GraphicsContext3D::isProgram):
        (WebCore::GraphicsContext3D::isRenderbuffer):
        (WebCore::GraphicsContext3D::isShader):
        (WebCore::GraphicsContext3D::isTexture):
        (WebCore::GraphicsContext3D::lineWidth):
        (WebCore::GraphicsContext3D::linkProgram):
        (WebCore::GraphicsContext3D::pixelStorei):
        (WebCore::GraphicsContext3D::polygonOffset):
        (WebCore::GraphicsContext3D::readPixels):
        (WebCore::GraphicsContext3D::releaseShaderCompiler):
        (WebCore::GraphicsContext3D::renderbufferStorage):
        (WebCore::GraphicsContext3D::sampleCoverage):
        (WebCore::GraphicsContext3D::scissor):
        (WebCore::GraphicsContext3D::shaderSource):
        (WebCore::GraphicsContext3D::stencilFunc):
        (WebCore::GraphicsContext3D::stencilFuncSeparate):
        (WebCore::GraphicsContext3D::stencilMask):
        (WebCore::GraphicsContext3D::stencilMaskSeparate):
        (WebCore::GraphicsContext3D::stencilOp):
        (WebCore::GraphicsContext3D::stencilOpSeparate):
        (WebCore::GraphicsContext3D::texParameterf):
        (WebCore::GraphicsContext3D::texParameteri):
        (WebCore::GraphicsContext3D::uniform1f):
        (WebCore::GraphicsContext3D::uniform1fv):
        (WebCore::GraphicsContext3D::uniform2f):
        (WebCore::GraphicsContext3D::uniform2fv):
        (WebCore::GraphicsContext3D::uniform3f):
        (WebCore::GraphicsContext3D::uniform3fv):
        (WebCore::GraphicsContext3D::uniform4f):
        (WebCore::GraphicsContext3D::uniform4fv):
        (WebCore::GraphicsContext3D::uniform1i):
        (WebCore::GraphicsContext3D::uniform1iv):
        (WebCore::GraphicsContext3D::uniform2i):
        (WebCore::GraphicsContext3D::uniform2iv):
        (WebCore::GraphicsContext3D::uniform3i):
        (WebCore::GraphicsContext3D::uniform3iv):
        (WebCore::GraphicsContext3D::uniform4i):
        (WebCore::GraphicsContext3D::uniform4iv):
        (WebCore::GraphicsContext3D::uniformMatrix2fv):
        (WebCore::GraphicsContext3D::uniformMatrix3fv):
        (WebCore::GraphicsContext3D::uniformMatrix4fv):
        (WebCore::GraphicsContext3D::useProgram):
        (WebCore::GraphicsContext3D::validateProgram):
        (WebCore::GraphicsContext3D::vertexAttrib1f):
        (WebCore::GraphicsContext3D::vertexAttrib1fv):
        (WebCore::GraphicsContext3D::vertexAttrib2f):
        (WebCore::GraphicsContext3D::vertexAttrib2fv):
        (WebCore::GraphicsContext3D::vertexAttrib3f):
        (WebCore::GraphicsContext3D::vertexAttrib3fv):
        (WebCore::GraphicsContext3D::vertexAttrib4f):
        (WebCore::GraphicsContext3D::vertexAttrib4fv):
        (WebCore::GraphicsContext3D::vertexAttribPointer):
        (WebCore::GraphicsContext3D::viewport):
        (WebCore::GraphicsContext3D::getBooleanv):
        (WebCore::GraphicsContext3D::getBufferParameteriv):
        (WebCore::GraphicsContext3D::getFloatv):
        (WebCore::GraphicsContext3D::getFramebufferAttachmentParameteriv):
        (WebCore::GraphicsContext3D::getIntegerv):
        (WebCore::GraphicsContext3D::getProgramiv):
        (WebCore::GraphicsContext3D::getProgramInfoLog):
        (WebCore::GraphicsContext3D::getRenderbufferParameteriv):
        (WebCore::GraphicsContext3D::getShaderiv):
        (WebCore::GraphicsContext3D::getShaderInfoLog):
        (WebCore::GraphicsContext3D::getShaderSource):
        (WebCore::GraphicsContext3D::getTexParameterfv):
        (WebCore::GraphicsContext3D::getTexParameteriv):
        (WebCore::GraphicsContext3D::getUniformfv):
        (WebCore::GraphicsContext3D::getUniformiv):
        (WebCore::GraphicsContext3D::getUniformLocation):
        (WebCore::GraphicsContext3D::getVertexAttribfv):
        (WebCore::GraphicsContext3D::getVertexAttribiv):
        (WebCore::GraphicsContext3D::getVertexAttribOffset):
        (WebCore::GraphicsContext3D::texImage2D):
        (WebCore::GraphicsContext3D::texSubImage2D):
        (WebCore::GraphicsContext3D::createBuffer):
        (WebCore::GraphicsContext3D::createFramebuffer):
        (WebCore::GraphicsContext3D::createProgram):
        (WebCore::GraphicsContext3D::createRenderbuffer):
        (WebCore::GraphicsContext3D::createShader):
        (WebCore::GraphicsContext3D::createTexture):
        (WebCore::GraphicsContext3D::deleteBuffer):
        (WebCore::GraphicsContext3D::deleteFramebuffer):
        (WebCore::GraphicsContext3D::deleteProgram):
        (WebCore::GraphicsContext3D::deleteRenderbuffer):
        (WebCore::GraphicsContext3D::deleteShader):
        (WebCore::GraphicsContext3D::deleteTexture):

2011-12-18  Andreas Kling  <kling@webkit.org>

        Removing unrelated printf() that slipped into my last commit.

        * platform/ScrollableArea.cpp:
        (WebCore::ScrollableArea::scrollToOffsetWithoutAnimation):

2011-12-18  Andreas Kling  <kling@webkit.org>

        KURL::protocolIs() should handle 8-bit strings.
        <http://webkit.org/b/74827>

        Reviewed by Antti Koivisto.

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

            Turned this into a template method so it can be used for both UChar and LChar.

        (WebCore::charactersAreProtocol):
        (WebCore::protocolIs):

            Handle 8/16 bit strings separately to avoid conversion.

2011-12-18  Alice Boxhall  <aboxhall@chromium.org>

        Make AccessibilityObject::lineForPosition return the correct value for cases where the position is not within the current object.
        https://bugs.webkit.org/show_bug.cgi?id=71348

        Reviewed by Chris Fleizach.

        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::lineForPosition):
        * accessibility/mac/WebAccessibilityObjectWrapper.mm:
        (-[WebAccessibilityObjectWrapper accessibilityAttributeValue:]):

2011-12-18  Sam Weinig  <sam@webkit.org>

        Make EventHandler::handleWheelEvent take const PlatformWheelEvent&
        https://bugs.webkit.org/show_bug.cgi?id=74824

        Reviewed by Anders Carlsson.

        * WebCore.exp.in:
        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleWheelEvent):
        * page/EventHandler.h:
        * page/blackberry/EventHandlerBlackBerry.cpp:
        (WebCore::EventHandler::passWheelEventToWidget):
        * page/chromium/EventHandlerChromium.cpp:
        (WebCore::EventHandler::passWheelEventToWidget):
        * page/efl/EventHandlerEfl.cpp:
        (WebCore::EventHandler::passWheelEventToWidget):
        * page/gtk/EventHandlerGtk.cpp:
        (WebCore::EventHandler::passWheelEventToWidget):
        * page/mac/EventHandlerMac.mm:
        (WebCore::EventHandler::passWheelEventToWidget):
        * page/qt/EventHandlerQt.cpp:
        (WebCore::EventHandler::passWheelEventToWidget):
        * page/win/EventHandlerWin.cpp:
        (WebCore::EventHandler::passWheelEventToWidget):
        * page/wx/EventHandlerWx.cpp:
        (WebCore::EventHandler::passWheelEventToWidget):
        * platform/PlatformWheelEvent.h:
        (WebCore::PlatformWheelEvent::copyTurningVerticalTicksIntoHorizontalTicks):

2011-12-18  James Kozianski  <koz@chromium.org>

        [chromium] Add worldId parameter to allowScriptExtension()
        https://bugs.webkit.org/show_bug.cgi?id=74214

        Chromium uses the worldId to determine what extension is running in a
        v8 context and knowing that at the time allowScriptExtension() is
        called allows us to conditionally inject extension APIs.

        Reviewed by Darin Fisher.

        * bindings/v8/V8DOMWindowShell.cpp:
        (WebCore::V8DOMWindowShell::initContextIfNeeded):
        (WebCore::V8DOMWindowShell::createNewContext):
        * bindings/v8/V8DOMWindowShell.h:
        * bindings/v8/V8IsolatedContext.cpp:
        (WebCore::V8IsolatedContext::V8IsolatedContext):
        * loader/EmptyClients.h:
        (WebCore::EmptyFrameLoaderClient::allowScriptExtension):
        * loader/FrameLoaderClient.h:

2011-12-18  Adam Barth  <abarth@webkit.org>

        Adoption agency iteration limits in HTML parser don't match HTML5 spec
        https://bugs.webkit.org/show_bug.cgi?id=74822

        Reviewed by Eric Seidel.

        Previously, we were using the iteration limits from the old tree
        builder.  Now we use the iteration limits from the HTML5 specification.

        Tests: html5lib/runner.html

        * html/parser/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::callTheAdoptionAgency):

2011-12-18  Antti Koivisto  <antti@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=73954
        REGRESSION (r97745): Transitions don't work on links

        Reviewed by Andreas Kling.

        Test: transitions/visited-link-color.html
        
        Since visited link colors are now part of the RenderStyle, they need to be transitioned
        along with the corresponding regular colors.

        * page/animation/AnimationBase.cpp:
        (WebCore::PropertyWrapperVisitedAffectedColor::PropertyWrapperVisitedAffectedColor):
        (WebCore::PropertyWrapperVisitedAffectedColor::equals):
        (WebCore::PropertyWrapperVisitedAffectedColor::blend):
        (WebCore::AnimationBase::ensurePropertyMap):
        
            Add new wrapper class that applies both regular and visited color.
        
        * rendering/style/RenderStyle.h:
        (WebCore::InheritedFlags::visitedLinkColor):
        (WebCore::InheritedFlags::visitedLinkBackgroundColor):
        (WebCore::InheritedFlags::visitedLinkBorderLeftColor):
        (WebCore::InheritedFlags::visitedLinkBorderRightColor):
        (WebCore::InheritedFlags::visitedLinkBorderBottomColor):
        (WebCore::InheritedFlags::visitedLinkBorderTopColor):
        (WebCore::InheritedFlags::visitedLinkOutlineColor):
        (WebCore::InheritedFlags::visitedLinkColumnRuleColor):
        (WebCore::InheritedFlags::visitedLinkTextEmphasisColor):
        (WebCore::InheritedFlags::visitedLinkTextFillColor):
        (WebCore::InheritedFlags::visitedLinkTextStrokeColor):
        
            Add accessors.
        
        * rendering/style/StyleRareNonInheritedData.cpp:
        (WebCore::StyleRareNonInheritedData::StyleRareNonInheritedData):
        
            Opportunistic fix. Don't know how to test.

2011-12-18  Anders Carlsson  <andersca@apple.com>

        Set the main frame view scroll position asynchronously
        https://bugs.webkit.org/show_bug.cgi?id=74823

        Reviewed by Sam Weinig.

        * page/ScrollingCoordinator.cpp:
        (WebCore::ScrollingCoordinator::ScrollingCoordinator):
        Initialize m_didDispatchDidUpdateMainFrameScrollPosition to false.

        (WebCore::ScrollingCoordinator::didUpdateMainFrameScrollPosition):
        Get the scroll position, reset m_didDispatchDidUpdateMainFrameScrollPosition to false and
        then call FrameView::setScrollOffset to update the scroll position.

        * page/ScrollingCoordinator.h:
        * page/mac/ScrollingCoordinatorMac.mm:
        (WebCore::ScrollingCoordinator::scrollByOnScrollingThread):
        Update the scroll position and dispatch ScrollingCoordinator::didUpdateMainFrameScrollPosition on
        the main thread if needed.

2011-12-18  Andreas Kling  <kling@webkit.org>

        JSC/HTMLCollection: Optimize canGetItemsForName().
        <http://webkit.org/b/74806>

        Reviewed by Sam Weinig.

        Add HTMLCollection::hasNamedItem(name) and use that in the JSC bindings'
        canGetItemsForName() instead of fetching the list of named items just to
        check if it's empty or not.

        * bindings/js/JSHTMLAllCollectionCustom.cpp:
        (WebCore::JSHTMLAllCollection::canGetItemsForName):
        * bindings/js/JSHTMLCollectionCustom.cpp:
        (WebCore::JSHTMLCollection::canGetItemsForName):
        * html/HTMLCollection.cpp:
        (WebCore::HTMLCollection::hasNamedItem):
        * html/HTMLCollection.h:

2011-12-18  Sam Weinig  <sam@webkit.org>

        Spruce up PlatformWheelEvent a bit
        https://bugs.webkit.org/show_bug.cgi?id=74821

        Reviewed by Dan Bernstein.

        * dom/WheelEvent.cpp:
        (WebCore::WheelEventDispatchMediator::WheelEventDispatchMediator):
        * platform/PlatformWheelEvent.h:
        (WebCore::PlatformWheelEvent::directionInvertedFromDevice):
        Remove x/y getters in favor of direct access to the IntPoints, and rename 
        webkitDirectionInvertedFromDevice() to directionInvertedFromDevice() since
        it is not an exposed API.

2011-12-18  Anders Carlsson  <andersca@apple.com>

        Scroll the main frame on the scrolling thread
        https://bugs.webkit.org/show_bug.cgi?id=74820

        Reviewed by Andreas Kling.

        * page/ScrollingCoordinator.cpp:
        (WebCore::ScrollingCoordinator::handleWheelEvent):
        Compute a scroll offset from the wheel event and tell the scrolling thread to scroll by the given offset.

        * page/ScrollingCoordinator.h:
        * page/mac/ScrollingCoordinatorMac.mm:
        (WebCore::ScrollingCoordinator::scrollByOnScrollingThread):
        Clamp the updated position to the minimum and maximum scrollable position.

        (WebCore::ScrollingCoordinator::updateMainFrameScrollLayerPositionOnScrollingThread):
        Actually reposition the layer.

2011-12-18  Andreas Kling  <kling@webkit.org>

        HTMLAllCollection: Get rid of stateful namedItem traversal.
        <http://webkit.org/b/74803>

        Reviewed by Sam Weinig.

        Add a namedItemWithIndex() function to HTMLAllCollection to cover the
        document.all(name, index) use-case. This moves the collection traversal
        into WebCore and allows us to remove some complexity.

        This incidentally fixes a bug where the CollectionCache would point to
        the last node returned by document.all(name, index) without the correct
        associated node index (because info()->current was getting set without
        updating info()->position.) Added a layout test for that.

        Test: fast/dom/htmlallcollection-call-with-index-caching-bug.html

        * bindings/js/JSHTMLAllCollectionCustom.cpp:
        (WebCore::callHTMLAllCollection):
        * bindings/v8/custom/V8HTMLAllCollectionCustom.cpp:
        (WebCore::V8HTMLAllCollection::callAsFunctionCallback):

            Replace collection traversal by calls to namedItemWithIndex().

        * html/HTMLCollection.h:

            Promoted updateNameCache() to protected (for HTMLAllCollection.)
            Demoted checkForNameMatch() to private.

        * html/HTMLAllCollection.cpp:
        (WebCore::HTMLAllCollection::namedItemWithIndex):

            Added for document.all(name, index). Uses the name/id cache.

        * html/HTMLAllCollection.cpp:
        * html/HTMLAllCollection.h:
        (WebCore::HTMLAllCollection::HTMLAllCollection):

            Removed m_idsDone, HTMLAllCollection is now stateless.


2011-12-18  Anders Carlsson  <andersca@apple.com>

        The scrolling coordinator should know about the main frame scroll layer
        https://bugs.webkit.org/show_bug.cgi?id=74817

        Reviewed by Andreas Kling.

        * page/ScrollingCoordinator.h:
        * page/mac/ScrollingCoordinatorMac.mm:
        (WebCore::ScrollingThread::threadCallback):
        Move the * to where it belongs.

        (WebCore::ScrollingCoordinator::setFrameScrollLayer):
        Keep track of the underlying CALayer of the frame scroll layer.

        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::ensureRootLayer):
        Call ScrollingCoordinator::setFrameScrollLayer.

2011-12-18  Andreas Kling  <kling@webkit.org>

        Interacting with GMail message lists is sluggish.
        <http://webkit.org/b/74813>

        Reviewed by Dan Bernstein.

        Add an argument to collapsed*Border() to control whether the border
        color is computed or not. This allows us to avoid expensive work when
        we're only interested in the metrics.

        RenderStyle::visitedDependentColor() was very hot (4.5%) when hit-testing
        on GMail and this removes its usage altogether.
        This should be an improvement for table rendering as well, since it was
        all happening below RenderBox::overflowClipRect().

        * rendering/RenderTableCell.h:
        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::collapsedLeftBorder):
        (WebCore::RenderTableCell::collapsedRightBorder):
        (WebCore::RenderTableCell::collapsedTopBorder):
        (WebCore::RenderTableCell::collapsedBottomBorder):

            Add and propagate an IncludeBorderColorOrNot argument that decides
            whether we compute the CollapsedBorderValue's color.

        (WebCore::RenderTableCell::collapsedStartBorder):
        (WebCore::RenderTableCell::collapsedEndBorder):

            Renamed start & end to startColorProperty & endColorProperty
            for clarity. Also same modifications as the above functions.

        (WebCore::RenderTableCell::collapsedBeforeBorder):
        (WebCore::RenderTableCell::collapsedAfterBorder):

            Renamed before & after to beforeColorProperty & afterColorProperty
            for clarity. Also same modifications as the above functions.

        (WebCore::RenderTableCell::borderHalfStart):
        (WebCore::RenderTableCell::borderHalfEnd):
        (WebCore::RenderTableCell::borderHalfBefore):
        (WebCore::RenderTableCell::borderHalfAfter):

            Pass DoNotIncludeBorderColor to collapsed*Border() since we only care
            about the metrics here.

2011-12-18  Anders Carlsson  <andersca@apple.com>

        The scrolling coordinator should keep track of the main frame geometry
        https://bugs.webkit.org/show_bug.cgi?id=74816

        Reviewed by Andreas Kling.

        * page/ScrollingCoordinator.cpp:
        (WebCore::ScrollingCoordinator::syncFrameGeometry):
        Update the frame geometry accordingly when it changes.

        * page/ScrollingCoordinator.h:
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::frameViewDidChangeSize):
        (WebCore::RenderLayerCompositor::updateRootLayerPosition):
        Call ScrollingCoordinator::syncFrameGeometry.

        (WebCore::RenderLayerCompositor::scrollingCoordinator):
        Add new getter.

2011-12-17  Sam Weinig  <sam@webkit.org>

        Move timestamp down from PlatformEvent subclasses to the base class
        https://bugs.webkit.org/show_bug.cgi?id=74805

        Reviewed by Anders Carlsson.

        * platform/PlatformEvent.h:
        (WebCore::PlatformEvent::type):
        (WebCore::PlatformEvent::timestamp):
        (WebCore::PlatformEvent::PlatformEvent):
        * platform/PlatformGestureEvent.h:
        (WebCore::PlatformGestureEvent::PlatformGestureEvent):
        * platform/PlatformMouseEvent.h:
        (WebCore::PlatformMouseEvent::PlatformMouseEvent):
        (WebCore::PlatformMouseEvent::clickCount):
        * platform/PlatformTouchEvent.h:
        (WebCore::PlatformTouchEvent::PlatformTouchEvent):
        * platform/PlatformWheelEvent.h:
        (WebCore::PlatformWheelEvent::PlatformWheelEvent):
        * platform/efl/PlatformKeyboardEventEfl.cpp:
        (WebCore::PlatformKeyboardEvent::PlatformKeyboardEvent):
        * platform/efl/PlatformMouseEventEfl.cpp:
        (WebCore::PlatformMouseEvent::PlatformMouseEvent):
        * platform/efl/PlatformTouchEventEfl.cpp:
        (WebCore::PlatformTouchEvent::PlatformTouchEvent):
        * platform/efl/PlatformWheelEventEfl.cpp:
        (WebCore::PlatformWheelEvent::PlatformWheelEvent):
        * platform/gtk/PlatformKeyboardEventGtk.cpp:
        (WebCore::PlatformKeyboardEvent::PlatformKeyboardEvent):
        * platform/gtk/PlatformWheelEventGtk.cpp:
        (WebCore::PlatformWheelEvent::PlatformWheelEvent):
        * platform/mac/KeyEventMac.mm:
        (WebCore::PlatformKeyboardEvent::PlatformKeyboardEvent):
        * platform/mac/PlatformMouseEventMac.mm:
        (WebCore::PlatformMouseEvent::PlatformMouseEvent):
        * platform/mac/WheelEventMac.mm:
        (WebCore::PlatformWheelEvent::PlatformWheelEvent):
        * platform/qt/PlatformKeyboardEventQt.cpp:
        (WebCore::PlatformKeyboardEvent::PlatformKeyboardEvent):
        * platform/qt/WheelEventQt.cpp:
        (WebCore::PlatformWheelEvent::PlatformWheelEvent):
        * platform/win/KeyEventWin.cpp:
        (WebCore::singleCharacterString):
        (WebCore::PlatformKeyboardEvent::PlatformKeyboardEvent):
        * platform/win/PlatformMouseEventWin.cpp:
        (WebCore::PlatformMouseEvent::PlatformMouseEvent):
        * platform/win/WheelEventWin.cpp:
        (WebCore::PlatformWheelEvent::PlatformWheelEvent):
        * platform/wx/KeyboardEventWx.cpp:
        (WebCore::PlatformKeyboardEvent::PlatformKeyboardEvent):
        * platform/wx/MouseEventWx.cpp:
        (WebCore::PlatformMouseEvent::PlatformMouseEvent):
        * platform/wx/MouseWheelEventWx.cpp:
        (WebCore::PlatformWheelEvent::PlatformWheelEvent):

2011-12-18  Anders Carlsson  <andersca@apple.com>

        Add a scrolling thread to the scrolling coordinator
        https://bugs.webkit.org/show_bug.cgi?id=74814

        Reviewed by Andreas Kling.

        * WebCore.exp.in:
        Export ScrollingCoordinator::handleWheelEvent.

        * WebCore.xcodeproj/project.pbxproj:
        Add ScrollingCoordinatorMac.mm

        * page/ScrollingCoordinator.cpp:
        (WebCore::ScrollingCoordinator::handleWheelEvent):
        Add a stub function.

        * page/ScrollingCoordinator.h:
        * page/mac/ScrollingCoordinatorMac.mm: Added.
        Add a ScrollingThread object which creates a thread and attaches a run loop source
        to it, allowing for functions to be dispatched and run on said thread.

        (WebCore::ScrollingCoordinator::isScrollingThread):
        Call ScrollingThread::isCurrentThread.

        (WebCore::ScrollingCoordinator::dispatchOnScrollingThread):
        Call ScrollingThread::dispatch.

2011-12-18  Anders Carlsson  <andersca@apple.com>

        EventDispatcher should keep track of all scrolling coordinators
        https://bugs.webkit.org/show_bug.cgi?id=74810

        Reviewed by Andreas Kling.

        Export symbols needed by WebKit2.

        * WebCore.exp.in:

2011-12-18  Raul Hudea  <rhudea@adobe.com>

        Add transform function completion to web-inspector

        Web Inspector: Auto-complete transform functions for -webkit-transform
        https://bugs.webkit.org/show_bug.cgi?id=74730

        Reviewed by Pavel Feldman.

        No new test. Trivial change.

        * inspector/front-end/CSSKeywordCompletions.js:

2011-12-18  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: chromium profiler: change default root type for retaining paths from GC Roots to DOMWindow.
        https://bugs.webkit.org/show_bug.cgi?id=74697

        Reviewed by Pavel Feldman.

        * inspector/front-end/DetailedHeapshotView.js:
        (WebInspector.DetailedHeapshotView.prototype.get isTracingToWindowObjects):

2011-12-18  Peter Rybin  <peter.rybin@gmail.com>

        Web Inspector: Switch to type-safe JSON ConsoleMessage.cpp, InspectorDOMAgent.cpp, InspectorDebuggerAgent.cpp, ScriptCallFrame.cpp
        https://bugs.webkit.org/show_bug.cgi?id=74549

        Reviewed by Pavel Feldman.

        Work with InspectorObject is replaced with type-safe generated API
        usage.
        Inspector.json and Inspector-0.1.json are also changed to better
        reflect data types that are actually being transmitted.

        * inspector/ConsoleMessage.cpp:
        (WebCore::ConsoleMessage::addToFrontend):
        * inspector/Inspector-0.1.json:
        * inspector/Inspector.json:
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::buildObjectForNode):
        (WebCore::InspectorDOMAgent::buildObjectForEventListener):
        * inspector/InspectorDebuggerAgent.cpp:
        (WebCore::InspectorDebuggerAgent::resolveBreakpoint):
        * inspector/ScriptCallFrame.cpp:
        (WebCore::ScriptCallFrame::buildInspectorObject):

2011-12-18  Peter Rybin  <peter.rybin@gmail.com>

        Web Inspector: CodeGeneratorInspector.py: use generated types in method parameters
        https://bugs.webkit.org/show_bug.cgi?id=74661

        Reviewed by Pavel Feldman.

        Type binding object is added to raw_type object.

        * inspector/CodeGeneratorInspector.py:
        (TypeBindings.create_for_named_type_declaration.EnumBinding.generate_type_builder):
        (TypeBindings.create_for_named_type_declaration.EnumBinding.get_in_c_type_text):
        (TypeBindings.create_for_named_type_declaration.EnumBinding):
        (TypeBindings.create_for_named_type_declaration.EnumBinding.reduce_to_raw_type):
        (TypeBindings.create_for_named_type_declaration.PlainString.generate_type_builder):
        (TypeBindings.create_for_named_type_declaration.PlainString.reduce_to_raw_type):
        (TypeBindings.create_for_named_type_declaration.PlainString):
        (TypeBindings.create_for_named_type_declaration.PlainString.get_in_c_type_text):
        (TypeBindings):
        (TypeBindings.create_for_named_type_declaration.ClassBinding):
        (get_in_c_type_text):
        (reduce_to_raw_type):
        (PlainObjectBinding.generate_type_builder):
        (PlainObjectBinding.get_in_c_type_text):
        (PlainObjectBinding):
        (PlainObjectBinding.reduce_to_raw_type):
        (RawTypesBinding.generate_type_builder):
        (RawTypesBinding.get_in_c_type_text):
        (RawTypesBinding):
        (RawTypesBinding.reduce_to_raw_type):
        (resolve_param_type.RawTypeBinding.reduce_to_raw_type):
        (resolve_param_type.RawTypeBinding):
        (resolve_param_type.RawTypeBinding.get_in_c_type_text):
        (resolve_param_type):
        (Generator.process_event):

2011-12-18  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r103169.
        http://trac.webkit.org/changeset/103169
        https://bugs.webkit.org/show_bug.cgi?id=74809

        it broke compilation on many platforms (Requested by loislo_
        on #webkit).

        * WebCore.gypi:
        * platform/ColorChooser.cpp: Renamed from Source/WebKit/chromium/src/ColorChooserProxy.h.
        (WebCore::ColorChooserClient::~ColorChooserClient):
        (WebCore::ColorChooserClient::newColorChooser):
        (WebCore::ColorChooserClient::discardChooser):
        (WebCore::ColorChooser::ColorChooser):
        (WebCore::ColorChooser::create):
        (WebCore::ColorChooser::~ColorChooser):
        (WebCore::ColorChooser::didChooseColor):
        (WebCore::ColorChooser::didCleanup):

2011-12-18  Alexandru Chiculita  <achicu@adobe.com>

        [CSS Shaders] Add FECustomFilter that renders custom filters
        https://bugs.webkit.org/show_bug.cgi?id=73317

        Using a GraphicsContext3D to render the shaders in GPU, read the
        result back and use it in the software filters pipeline.

        Reviewed by Chris Marrin.

        Test: css3/filters/effect-custom.html

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * loader/cache/CachedShader.cpp:
        (WebCore::CachedShader::CachedShader):
        (WebCore::CachedShader::shaderString):
        (WebCore::CachedShader::data):
        * loader/cache/CachedShader.h:
        * platform/graphics/filters/CustomFilterMesh.cpp: Added.
        (WebCore::MeshGenerator::MeshGenerator):
        (WebCore::MeshGenerator::vertices):
        (WebCore::MeshGenerator::indices):
        (WebCore::MeshGenerator::points):
        (WebCore::MeshGenerator::pointsCount):
        (WebCore::MeshGenerator::tiles):
        (WebCore::MeshGenerator::tilesCount):
        (WebCore::MeshGenerator::indicesCount):
        (WebCore::MeshGenerator::floatsPerVertex):
        (WebCore::MeshGenerator::vertexCount):
        (WebCore::MeshGenerator::addTile):
        (WebCore::MeshGenerator::addAttachedMeshIndex):
        (WebCore::MeshGenerator::generateAttachedMesh):
        (WebCore::MeshGenerator::addDetachedMeshVertexAndIndex):
        (WebCore::MeshGenerator::generateDetachedMesh):
        (WebCore::MeshGenerator::addPositionAttribute):
        (WebCore::MeshGenerator::addTexCoordAttribute):
        (WebCore::MeshGenerator::addMeshCoordAttribute):
        (WebCore::MeshGenerator::addTriangleCoordAttribute):
        (WebCore::MeshGenerator::addAttachedMeshVertexAttributes):
        (WebCore::MeshGenerator::addDetachedMeshVertexAttributes):
        (WebCore::MeshGenerator::dumpBuffers):
        (WebCore::CustomFilterMesh::CustomFilterMesh):
        (WebCore::CustomFilterMesh::~CustomFilterMesh):
        * platform/graphics/filters/CustomFilterMesh.h: Added.
        (WebCore::CustomFilterMesh::create):
        (WebCore::CustomFilterMesh::verticesBufferObject):
        (WebCore::CustomFilterMesh::bytesPerVertex):
        (WebCore::CustomFilterMesh::elementsBufferObject):
        (WebCore::CustomFilterMesh::indicesCount):
        (WebCore::CustomFilterMesh::meshBox):
        (WebCore::CustomFilterMesh::meshType):
        * platform/graphics/filters/CustomFilterShader.cpp: Added.
        (WebCore::CustomFilterShader::defaultVertexShaderString):
        (WebCore::CustomFilterShader::defaultFragmentShaderString):
        (WebCore::CustomFilterShader::CustomFilterShader):
        (WebCore::CustomFilterShader::~CustomFilterShader):
        * platform/graphics/filters/CustomFilterShader.h: Added.
        * platform/graphics/filters/FECustomFilter.cpp: Added.
        (WebCore::orthoMatrix):
        (WebCore::FECustomFilter::FECustomFilter):
        (WebCore::FECustomFilter::create):
        (WebCore::FECustomFilter::platformApplySoftware):
        (WebCore::FECustomFilter::dump):
        (WebCore::FECustomFilter::externalRepresentation):
        * platform/graphics/filters/FECustomFilter.h: Added.
        * platform/graphics/gpu/Texture.cpp:
        * platform/graphics/transforms/TransformationMatrix.cpp:
        (WebCore::TransformationMatrix::toColumnMajorFloatArray):
        * platform/graphics/transforms/TransformationMatrix.h:
        * rendering/FilterEffectObserver.h: Copied from Source/WebCore/loader/cache/CachedShader.cpp.
        (WebCore::FilterEffectObserver::~FilterEffectObserver):
        * rendering/FilterEffectRenderer.cpp:
        (WebCore::isWebGLEnabled):
        (WebCore::FilterEffectRenderer::FilterEffectRenderer):
        (WebCore::FilterEffectRenderer::build):
        (WebCore::FilterEffectRenderer::notifyFinished):
        * rendering/FilterEffectRenderer.h:
        (WebCore::FilterEffectRenderer::create):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateOrRemoveFilterEffect):
        (WebCore::RenderLayer::filterNeedsRepaint):
        * rendering/RenderLayer.h:
        * rendering/style/StyleCachedShader.h:
        (WebCore::StyleCachedShader::cachedShader):
        * rendering/style/StyleShader.h:
        (WebCore::StyleShader::cachedShader):

2011-12-18  Keishi Hattori  <keishi@webkit.org>

        Implement <input type=color> UI WebKit chromium part
        https://bugs.webkit.org/show_bug.cgi?id=65897

        Reviewed by Darin Fisher.

        * WebCore.gypi: Added ColorChooser.h and ColorChooserClient.h

2011-12-17  Keishi Hattori  <keishi@webkit.org>

        Refactor input type color WebCore part
        https://bugs.webkit.org/show_bug.cgi?id=74591

        Reviewed by Kent Tamura.

        Changing ColorChooser to address issues raised in Bug 65897.
        Chrome::createColorChooser will return a WebCore::ColorChooser instance
        so the WebCore side (ColorInputType) and call the WebKit side. We pass the ColorChooserClient as an argument
        to Chrome::createColorChooser so the WebKit side can call callbacks, didEndChooser and didChooseColor.

        * html/ColorInputType.cpp:
        (WebCore::ColorInputType::~ColorInputType):
        (WebCore::ColorInputType::setValue):
        (WebCore::ColorInputType::handleDOMActivateEvent): Calls createColorChooser to open the color chooser.
        (WebCore::ColorInputType::detach):
        (WebCore::ColorInputType::didEndChooser): Release the ColorChooser object.
        (WebCore::ColorInputType::endColorChooser):
        (WebCore::ColorInputType::updateColorSwatch): Added argument so it will compile again.
        * html/ColorInputType.h:
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::selectColorInColorChooser):
        * loader/EmptyClients.h:
        (WebCore::EmptyChromeClient::createColorChooser):
        * loader/FrameLoader.cpp:
        * page/Chrome.cpp:
        (WebCore::Chrome::createColorChooser): Opens the color chooser. Returns a ColorChooser PassOwnPtr.
        * page/Chrome.h:
        * page/ChromeClient.h:
        * platform/ColorChooser.h:
        (WebCore::ColorChooser::~ColorChooser):
        (WebCore::ColorChooser::setSelectedColor):
        (WebCore::ColorChooser::endChooser):
        * platform/ColorChooserClient.h: Added.

2011-12-17  Sam Weinig  <sam@webkit.org>

        Make PlatformTouchEvent inherit from PlatformEvent
        https://bugs.webkit.org/show_bug.cgi?id=74777

        Reviewed by Andreas Kling.

        * platform/PlatformEvent.h:
        Add TouchEvent types.

        * platform/PlatformTouchEvent.h:
        (WebCore::PlatformTouchEvent::PlatformTouchEvent):
        Make inherit from PlatformEvent.

        * platform/blackberry/PlatformTouchEventBlackBerry.cpp:
        (WebCore::touchEventType):
        (WebCore::PlatformTouchEvent::PlatformTouchEvent):
        * platform/efl/PlatformTouchEventEfl.cpp:
        (WebCore::PlatformTouchEvent::PlatformTouchEvent):
        * platform/qt/PlatformTouchEventQt.cpp:
        (WebCore::PlatformTouchEvent::PlatformTouchEvent):
        Make necessary changes to work with new base class.

2011-12-17  Andreas Kling  <kling@webkit.org>

        Cache and reuse the HTMLAllCollection returned by document.all.
        <http://webkit.org/b/74768>

        Reviewed by Antti Koivisto.

        Let Document cache the document.all collection, just like we do for
        the other collections (.links, .images, etc.)
        This is primarily a memory optimization, as repeated calls to
        document.all will no longer cause collection objects to stack up.

        Tests: fast/dom/document-collection-idempotence.html
               fast/dom/gc-9.html

        * dom/Document.h:
        * dom/Document.cpp:
        (WebCore::Document::all):

            Cache the HTMLAllCollection and reuse it across calls instead of
            creating a new one each time.

        * html/HTMLAllCollection.h:
        * html/HTMLAllCollection.cpp:
        (WebCore::HTMLAllCollection::create):
        (WebCore::HTMLAllCollection::HTMLAllCollection):

            Make the HTMLAllCollection constructor take a Document* to enforce
            the fact that it's the only way it should ever be created.

        * html/HTMLAllCollection.idl:
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateImplementation):

            Custom reachability code for JSC, same as HTMLCollection.

2011-12-17  Andreas Kling  <kling@webkit.org>

        HTMLCollection: Simplify itemAfter().
        <http://webkit.org/b/74795>

        Reviewed by Antti Koivisto.

        Whether to do deep traversal of children depends on m_type which
        doesn't change after construction, so move that decision there
        by caching it in a "m_includeChildren" bit.

        Also factored out the big switch statement in itemAfter() into
        an isAcceptableElement() function.

        Last and least, use fastHasAttribute() to check for itempropAttr
        since it's not SVG animatable.

        * html/HTMLCollection.cpp:
        (WebCore::HTMLCollection::HTMLCollection):
        (WebCore::HTMLCollection::shouldIncludeChildren):
        (WebCore::HTMLCollection::isAcceptableElement):
        (WebCore::HTMLCollection::itemAfter):
        * html/HTMLCollection.h:

2011-12-17  Andreas Kling  <kling@webkit.org>

        TagNodeList: Optimize nodeMatches() for the common case.
        <http://webkit.org/b/74796>

        Reviewed by Antti Koivisto.

        Reject based on tag name mismatch before comparing the namespaces,
        as this case is vastly more common.

        nodeMatches() is very hot on the DOM Query (Dojo) test on Dromaeo.
        This change takes it from 8.3% to 7.7% on my MBP.

        * dom/TagNodeList.cpp:
        (WebCore::TagNodeList::nodeMatches):

2011-12-17  Andreas Kling  <kling@webkit.org>

        NameNodeList: Use fastGetAttribute() in nodeMatches().
        <http://webkit.org/b/74797>

        Reviewed by Darin Adler.

        It's safe and slightly more efficient to use fastGetAttribute()
        for HTMLNames::nameAttr here.

        * dom/NameNodeList.cpp:
        (WebCore::NameNodeList::nodeMatches):

2011-12-17  Andreas Kling  <kling@webkit.org>

        CSSPrimitiveValue: Inline getIdent().
        <http://webkit.org/b/74793>

        Reviewed by Antti Koivisto.

        Inline the trivial getIdent(), the same as its getFoo() siblings.

        * css/CSSPrimitiveValue.cpp:
        * css/CSSPrimitiveValue.h:
        (WebCore::CSSPrimitiveValue::getIdent):

2011-12-17  Andreas Kling  <kling@webkit.org>

        CSSStyleSelector: Clean up matchRules().
        <http://webkit.org/b/74794>

        Reviewed by Antti Koivisto.

        - Early return from the isCollectingRulesOnly() path to reduce nesting.
        - Move the creation of m_ruleList out of the loop that builds the list.
        - Removed some comments from the Captain Obvious department.

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

2011-12-17  Andreas Kling  <kling@webkit.org>

        RuleSet: Remove style sheet null-check in addRulesFromSheet().
        <http://webkit.org/b/74792>

        Reviewed by Antti Koivisto.

        Replace the "sheet" null-check in addRulesFromSheet() by an assertion.
        The only call-site where it could be null was when adding rules from
        an @import'ed sheet, so add a check there instead.

        * css/CSSStyleSelector.cpp:
        (WebCore::RuleSet::addRulesFromSheet):

2011-12-17  Andreas Kling  <kling@webkit.org>

        CSSStyleSelector: Clean up getColorFromPrimitiveValue().
        <http://webkit.org/b/74789>

        Reviewed by Antti Koivisto.

        Rename getColorFromPrimitiveValue() to colorFromPrimitiveValue() and rework
        it to be a bit more readable.

        * css/CSSGradientValue.cpp:
        (WebCore::CSSGradientValue::addStops):
        * css/CSSStyleApplyProperty.cpp:
        (WebCore::ApplyPropertyColor::applyValue):
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):
        (WebCore::CSSStyleSelector::colorFromPrimitiveValue):
        (WebCore::CSSStyleSelector::createFilterOperations):
        * css/CSSStyleSelector.h:
        * css/SVGCSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applySVGProperty):

2011-12-17  Kenichi Ishibashi  <bashi@chromium.org>

        Text dispappear when SVG font has no latin character
        https://bugs.webkit.org/show_bug.cgi?id=71765

        Reviewed by Nikolas Zimmermann.

        Initialize SVG font metrics even if the font doesn't contain latin characters.

        Test: svg/custom/svg-fonts-no-latin-glyph.html

        * svg/SVGFontData.cpp:
        (WebCore::SVGFontData::initializeFontData): Initializes metrics even if the zeroGlyphPage doesn't exist.

2011-12-17  David Barton  <dbarton@mathscribe.com>

        Radical sign drawn incorrectly due to refactoring typo
        https://bugs.webkit.org/show_bug.cgi?id=74780

        Reviewed by Dan Bernstein.

        LayoutTests/mathml/presentation/roots.xhtml shows the bug, but apparently its .png
        checksum is ok so run-webkit-tests can't detect the problem.

        * rendering/mathml/RenderMathMLRoot.cpp:
        (WebCore::RenderMathMLRoot::paint):
        In revision 88250, one paintOffset should have been adjustedPaintOffset.

2011-12-17  Adrienne Walker  <enne@google.com>

        [chromium] Reverting r103011, r103135 due to Aura test failures

        Unreviewed gardening.

        * platform/graphics/chromium/ContentLayerChromium.cpp:
        (WebCore::ContentLayerChromium::~ContentLayerChromium):
        * platform/graphics/chromium/GraphicsLayerChromium.cpp:
        (WebCore::GraphicsLayerChromium::notifySyncRequired):
        * platform/graphics/chromium/GraphicsLayerChromium.h:
        * platform/graphics/chromium/ImageLayerChromium.cpp:
        (WebCore::ImageLayerChromium::paintContentsIfDirty):
        * platform/graphics/chromium/LayerChromium.cpp:
        (WebCore::LayerChromium::setLayerTreeHost):
        (WebCore::LayerChromium::setNeedsCommit):
        (WebCore::LayerChromium::setParent):
        (WebCore::LayerChromium::setMaskLayer):
        * platform/graphics/chromium/LayerChromium.h:
        (WebCore::LayerChromium::setReplicaLayer):
        * platform/graphics/chromium/TiledLayerChromium.cpp:
        (WebCore::TiledLayerChromium::setLayerTreeHost):
        * platform/graphics/chromium/cc/CCLayerTreeHost.cpp:
        (WebCore::CCLayerTreeHost::~CCLayerTreeHost):
        (WebCore::CCLayerTreeHost::didRecreateGraphicsContext):
        (WebCore::CCLayerTreeHost::paintMaskAndReplicaForRenderSurface):
        (WebCore::CCLayerTreeHost::paintLayerContents):
        * platform/graphics/chromium/cc/CCLayerTreeHost.h:
        (WebCore::CCLayerTreeHost::setRootLayer):

2011-12-16  Chris Marrin  <cmarrin@apple.com>

        Hardware acceleration of W3C Filter Effects
        https://bugs.webkit.org/show_bug.cgi?id=68479

        Reviewed by Simon Fraser.

        Tests: css3/filters/effect-blur-hw.html
               css3/filters/effect-combined-hw.html
               css3/filters/effect-drop-shadow-hw.html
               css3/filters/effect-grayscale-hw.html
               css3/filters/effect-hue-rotate-hw.html
               css3/filters/effect-invert-hw.html
               css3/filters/effect-opacity-hw.html
               css3/filters/effect-saturate-hw.html
               css3/filters/effect-sepia-hw.html

        Implement hardware acceleration of filters. If a filter is
        on a RenderLayer and that layer has a GraphicsLayer, a test
        is done to see if the desired filter can be rendered in hardware.
        If so, skip rendering it when painting, and add the filters to the
        CALayer. Currently Mac only, using CoreImage. Animation is done in
        software, with the filters being recreated every frame. There are
        some fidelity issues with the software renderer, but those will
        be dealt with as bugs to be fixed.

        * platform/graphics/GraphicsLayer.h: Pass down FilterOperations
        (WebCore::GraphicsLayer::filter):
        (WebCore::GraphicsLayer::setFilter):
        * platform/graphics/ca/GraphicsLayerCA.cpp: Deferred passdown of FilterOperations to PlatformCALayer
        (WebCore::GraphicsLayerCA::setFilter):
        (WebCore::GraphicsLayerCA::commitLayerChangesBeforeSublayers):
        (WebCore::GraphicsLayerCA::updateFilter):
        (WebCore::GraphicsLayerCA::ensureStructuralLayer):
        (WebCore::GraphicsLayerCA::swapFromOrToTiledLayer):
        * platform/graphics/ca/GraphicsLayerCA.h:
        * platform/graphics/ca/PlatformCALayer.h:
        * platform/graphics/ca/mac/PlatformCALayerMac.mm: Mac implementation using CI
        (PlatformCALayer::setFilter):
        (PlatformCALayer::filterCanBeComposited): Static function to tell GraphicsLayer if this Filter object can be rendered
        * platform/graphics/filters/FilterOperations.cpp:
        (WebCore::FilterOperations::operator=):
        * platform/graphics/filters/FilterOperations.h:
        (WebCore::FilterOperations::FilterOperations):
        * rendering/RenderLayer.cpp: Pass filter object to GraphicsLayer
        (WebCore::RenderLayer::rendersFilter):
        (WebCore::RenderLayer::paintLayer):
        (WebCore::RenderLayer::updateOrRemoveFilterEffect):
        * rendering/RenderLayer.h:
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::RenderLayerBacking):
        (WebCore::RenderLayerBacking::createPrimaryGraphicsLayer):
        (WebCore::RenderLayerBacking::updateLayerFilter):
        (WebCore::RenderLayerBacking::updateGraphicsLayerGeometry):
        * rendering/RenderLayerBacking.h:
        (WebCore::RenderLayerBacking::canCompositeFilter):

2011-12-17  Philippe Normand  <pnormand@igalia.com>

        Unreviewed, GTK build fix after r103131.

        * GNUmakefile.list.am: Fix typo... s/.cop/.cpp

2011-12-16  Benjamin Poulain  <bpoulain@apple.com>

        FEComposite does not build when you disable filters on ARMv7
        https://bugs.webkit.org/show_bug.cgi?id=74772

        Reviewed by David Kilzer.

        Add the missing ENABLE(FILTERS).

        * platform/graphics/filters/arm/FECompositeArithmeticNEON.cpp:
        * platform/graphics/filters/arm/FECompositeArithmeticNEON.h:

2011-12-16  Ryosuke Niwa  <rniwa@webkit.org>

        Mac build fix after r103104.

        * WebCore.xcodeproj/project.pbxproj:

2011-12-16  Adam Klein  <adamk@chromium.org>

        Consolidate before-advice regarding attribute modification into a single method
        https://bugs.webkit.org/show_bug.cgi?id=74752

        Reviewed by Ryosuke Niwa.

        Adds a willModifyAttribute method to Element, meant to be called
        before an attribute on that Element is added/removed/changed.

        Replace most calls to Element::updateId and all calls to
        Element::enqueueAttributesMutationRecordIfRequested with calls to
        willModifyAttribute. Moreover, enqueueAttributesMutation... can now
        be private since its only caller is willModifyAttribute.

        The only remaining direct calls to updateId are in cases the entire
        NamedNodeMap is being replaced. These are implementation details of
        WebCore that shouldn't be exposed via MutationObservers.

        No new tests, no expected change in behavior.

        * dom/Attr.cpp:
        (WebCore::Attr::setValue):
        (WebCore::Attr::childrenChanged): Besides the above change, use a
        StringBuilder to build up value, and only do String -> AtomicString
        conversion once.
        * dom/Element.cpp:
        (WebCore::Element::setAttributeInternal):
        * dom/Element.h:
        (WebCore::Element::willModifyAttribute):
        * dom/NamedNodeMap.cpp:
        (WebCore::NamedNodeMap::setNamedItem):
        (WebCore::NamedNodeMap::removeNamedItem):

2011-12-16  James Robinson  <jamesr@chromium.org>

        [chromium] CCLayerDelegate and WebLayerClient do not need notifySyncRequired
        https://bugs.webkit.org/show_bug.cgi?id=74376

        Reviewed by Kenneth Russell.

        CCLayerDelegate::notifySyncRequired is an odd bit of interface that we originally cargo-culted from the
        CoreAnimation compositor implementation. It is a mechanism by which a LayerChromium instance may request a new
        frame via its CCLayerDelegate, which in WebCore is always a GraphicsLayerClient. In practice, all
        implementations eventually ended up routing to CCLayerTreeHost::setNeedsCommit which then made the proper
        scheduling decision.

        This patch routes all changes that would have gone through CCLayerDelegate::notifySyncRequired directly to
        CCLayerTreeHost::setNeedsCommit, which greatly simplifies the scheduling logic.

        There is a large amount of unit test coverage for this change, largely in LayerChromiumTest

        * platform/graphics/chromium/GraphicsLayerChromium.cpp:
        * platform/graphics/chromium/GraphicsLayerChromium.h:
        * platform/graphics/chromium/LayerChromium.cpp:
        (WebCore::LayerChromium::setNeedsCommit):
        (WebCore::LayerChromium::insertChild):
        * platform/graphics/chromium/LayerChromium.h:
        * platform/graphics/chromium/cc/CCLayerTreeHost.cpp:
        (WebCore::CCLayerTreeHost::~CCLayerTreeHost):
        (WebCore::CCLayerTreeHost::setRootLayer):
        * platform/graphics/chromium/cc/CCLayerTreeHost.h:
        * platform/graphics/chromium/cc/CCScopedThreadProxy.h:
        (WebCore::CCScopedThreadProxy::runTaskIfNotShutdown):

2011-12-16  Adam Klein  <adamk@chromium.org>

        Fix typo in MarkupTokenBase: rename takeAtributes to takeAttributes
        https://bugs.webkit.org/show_bug.cgi?id=74766

        Reviewed by Darin Adler.

        * html/parser/HTMLConstructionSite.cpp:
        (WebCore::HTMLConstructionSite::insertHTMLHtmlStartTagBeforeHTML):
        (WebCore::HTMLConstructionSite::insertScriptElement):
        (WebCore::HTMLConstructionSite::createElement):
        (WebCore::HTMLConstructionSite::createHTMLElement):
        * html/parser/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::attributesForIsindexInput):
        * xml/parser/MarkupTokenBase.h:
        (WebCore::AtomicMarkupTokenBase::takeAttributes):

2011-12-16  Adam Barth  <abarth@webkit.org>

        <option><span><option> doesn't parse correctly
        https://bugs.webkit.org/show_bug.cgi?id=74760

        Reviewed by Eric Seidel.

        The <option> start tag shouldn't be quite as aggressive in closing open
        <option> tags.  I'm not sure whether this was a change in the spec or a
        mistranscription, but this patch causes us to match the spec.  I've
        checked the other optionTag checks, and they all seem to be correct.

        * html/parser/HTMLTreeBuilder.cpp:

2011-12-16  Rafael Weinstein  <rafaelw@chromium.org>

        [MutationObservers] Remove platform-dependent code in Document.cpp resulting from Mutation Event histogram collection
        https://bugs.webkit.org/show_bug.cgi?id=73026

        Reviewed by Ryosuke Niwa.

        This patch adds platform/HistogramSupport which has an empty implementation for all ports
        except Chromium.

        No tests need. This patch is just a refactor.

        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/Document.cpp:
        (WebCore::histogramMutationEventUsage):
        (WebCore::Document::~Document):
        * platform/HistogramSupport.h: Added.
        (WebCore::HistogramSupport::histogramEnumeration):
        * platform/chromium/HistogramSupportChromium.cpp: Added.
        (WebCore::HistogramSupport::histogramEnumeration):

2011-12-16  Brady Eidson  <beidson@apple.com>

        <rdar://problem/10576732> and https://bugs.webkit.org/show_bug.cgi?id=74533
        REGRESSION(r102619): Reproducible crash closing window with video + poster image inside an object element

        Reviewed by Darin Adler.

        Test: media/crash-closing-page-with-media-as-plugin-fallback.html

        At some point documentWillBecomeInactive() was overloaded to not only notify elements they were going in to the page
        cache but also do some other work that was necessary during Document teardown.

        This crash occurs because we're notifying elements they're going in to the page cache at document teardown, so this
        patch breaks that work back out in to a separate function.

        * dom/Document.cpp:
        (WebCore::Document::detach): Remove obsolete comment.
        (WebCore::Document::documentWillBecomeInactive): Handle only accelerated compositing cleanup.
        (WebCore::Document::documentWillSuspendForPageCache): Call documentWillBecomeInactive before notifying elements of suspension.
        (WebCore::Document::documentDidResumeFromPageCache):
        (WebCore::Document::registerForPageCacheSuspensionCallbacks):
        (WebCore::Document::unregisterForPageCacheSuspensionCallbacks):
        * dom/Document.h:

        * history/CachedFrame.cpp:
        (WebCore::CachedFrameBase::restore): Call the renamed documentDidResumeFromPageCache.
        (WebCore::CachedFrame::CachedFrame): Call documentWillSuspendForPageCache instead of documentDidBecomeInactive.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::commitProvisionalLoad): Call the renamed documentDidResumeFromPageCache.

        * dom/Element.h:
        (WebCore::Element::documentWillSuspendForPageCache): Renamed from documentWillBecomeInactive()
        (WebCore::Element::documentDidResumeFromPageCache): Renamed from documentDidBecomeActive()

        Change to the renamed registration and callbacks functions in the handful of classes that use them:
        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::~HTMLFormElement):
        (WebCore::HTMLFormElement::parseMappedAttribute):
        (WebCore::HTMLFormElement::documentDidResumeFromPageCache):
        (WebCore::HTMLFormElement::willMoveToNewOwnerDocument):
        (WebCore::HTMLFormElement::didMoveToNewOwnerDocument):
        * html/HTMLFormElement.h:

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::~HTMLInputElement):
        (WebCore::HTMLInputElement::updateType):
        (WebCore::HTMLInputElement::parseMappedAttribute):
        (WebCore::HTMLInputElement::needsSuspensionCallback):
        (WebCore::HTMLInputElement::registerForSuspensionCallbackIfNeeded):
        (WebCore::HTMLInputElement::unregisterForSuspensionCallbackIfNeeded):
        (WebCore::HTMLInputElement::documentDidResumeFromPageCache):
        (WebCore::HTMLInputElement::willMoveToNewOwnerDocument):
        (WebCore::HTMLInputElement::didMoveToNewOwnerDocument):
        * html/HTMLInputElement.h:

        * html/HTMLPlugInImageElement.cpp:
        (WebCore::HTMLPlugInImageElement::~HTMLPlugInImageElement):
        (WebCore::HTMLPlugInImageElement::createRenderer):
        (WebCore::HTMLPlugInImageElement::willMoveToNewOwnerDocument):
        (WebCore::HTMLPlugInImageElement::didMoveToNewOwnerDocument):
        (WebCore::HTMLPlugInImageElement::documentWillSuspendForPageCache):
        (WebCore::HTMLPlugInImageElement::documentDidResumeFromPageCache):
        * html/HTMLPlugInImageElement.h:

        * svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::SVGSVGElement):
        (WebCore::SVGSVGElement::~SVGSVGElement):
        (WebCore::SVGSVGElement::willMoveToNewOwnerDocument):
        (WebCore::SVGSVGElement::didMoveToNewOwnerDocument):
        (WebCore::SVGSVGElement::documentWillSuspendForPageCache):
        (WebCore::SVGSVGElement::documentDidResumeFromPageCache):
        * svg/SVGSVGElement.h:

2011-12-16  Eric Penner  <epenner@google.com>

        [chromium] Need to prepaint tiles in TiledLayerChromium
        https://bugs.webkit.org/show_bug.cgi?id=72686

        Reviewed by James Robinson.

        Tests: TiledLayerChromiumTest (idlePaintOutOfMemory, pushIdlePaintTiles)

        * platform/graphics/chromium/ContentLayerChromium.cpp:
        (WebCore::ContentLayerChromium::idlePaintContentsIfDirty): added idle paint function
        * platform/graphics/chromium/ContentLayerChromium.h: ditto
        * platform/graphics/chromium/LayerChromium.h: ditto
        (WebCore::LayerChromium::idlePaintContentsIfDirty): ditto
        * platform/graphics/chromium/TextureManager.cpp:
        (WebCore::TextureManager::protectTexture): removed assert for protecting a texture twice
        * platform/graphics/chromium/TiledLayerChromium.cpp:
        (WebCore::TiledLayerChromium::TiledLayerChromium):
        (WebCore::TiledLayerChromium::cleanupResources):
        (WebCore::TiledLayerChromium::updateCompositorResources): refactoring to use tile indices
        (WebCore::TiledLayerChromium::prepareToUpdateTiles): refactored common code and made idle/visible versions
        (WebCore::TiledLayerChromium::prepareToUpdate): ditto
        (WebCore::TiledLayerChromium::prepareToUpdateIdle): ditto
        (WebCore::TiledLayerChromium::needsIdlePaint): 
        (WebCore::TiledLayerChromium::idlePaintRect):
        * platform/graphics/chromium/TiledLayerChromium.h:
        * platform/graphics/chromium/cc/CCLayerTreeHost.cpp:
        (WebCore::CCLayerTreeHost::CCLayerTreeHost):
        (WebCore::CCLayerTreeHost::compositeAndReadback): set flag to avoid idle paint durring composite and readback
        (WebCore::CCLayerTreeHost::updateLayers): added idle flag parameter
        (WebCore::CCLayerTreeHost::paintContentsIfDirty): ditto
        (WebCore::CCLayerTreeHost::paintMaskAndReplicaForRenderSurface): ditto
        (WebCore::CCLayerTreeHost::paintLayerContents): chooses idle or visible paint
        * platform/graphics/chromium/cc/CCLayerTreeHost.h:

2011-12-16  Dean Jackson  <dino@apple.com>

        Miscellaneous Filter updates to align with spec
        https://bugs.webkit.org/show_bug.cgi?id=74736

        Reviewed by Simon Fraser.

        Combine a bunch of small updates to filters where
        we were not compliant with the specification.

        - blur() only takes one value, not two
        - blur() does not accept percentages. This allowed us
          to stop passing the borderBoxSize around while building
          the filter chain or calculating visual overflow.
        - gamma() and sharpen() removed
        - brightness() and contrast() added

        Tests: css3/filters/effect-brightness.html
               css3/filters/effect-contrast.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::valueForFilter): Create new
        variations on component transfer functions for brightness() and
        contrast() effects. Also remove sharpen() and gamma().
        * css/CSSParser.cpp:
        (WebCore::filterInfoForName):
        (WebCore::CSSParser::parseBuiltinFilterArguments): Ditto, and blur
        only takes one argument.
        * css/CSSStyleSelector.cpp:
        (WebCore::filterOperationForType):
        (WebCore::CSSStyleSelector::createFilterOperations): Ditto, and
        use ->isPercentage() to test rather than getting the type.
        * css/WebKitCSSFilterValue.cpp:
        (WebCore::WebKitCSSFilterValue::customCssText):
        * css/WebKitCSSFilterValue.h:
        * css/WebKitCSSFilterValue.idl: Remove sharpen and gamma, add
        brightness and contrast.
        * platform/graphics/filters/FilterOperation.cpp:
        (WebCore::BlurFilterOperation::blend): Blurs only need to blend
        between one standard deviation parameter.
        * platform/graphics/filters/FilterOperation.h: Remove sharpen and
        gamma, add brightness and contrast.
        (WebCore::BlurFilterOperation::create):
        (WebCore::BlurFilterOperation::stdDeviation):
        (WebCore::BlurFilterOperation::operator==):
        (WebCore::BlurFilterOperation::BlurFilterOperation): Blur only takes
        one standard deviation / radius parameter.
        * platform/graphics/filters/FilterOperations.cpp:
        (WebCore::outsetSizeForBlur):
        (WebCore::FilterOperations::getOutsets): No need for borderBox now.
        * platform/graphics/filters/FilterOperations.h:
        * rendering/FilterEffectRenderer.cpp:
        (WebCore::FilterEffectRenderer::build): Build new effect types.
        * rendering/FilterEffectRenderer.h:
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::addVisualEffectOverflow): No need to pass
        borderBox size when calculating overflow on filter.
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateOrRemoveFilterEffect):
        * rendering/style/RenderStyle.h:
        (WebCore::InheritedFlags::getFilterOutsets): Ditto.

2011-12-16  Andreas Kling  <kling@webkit.org>

        Unreviewed debug build fix after r103115.

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

2011-12-16  Mark Hahnenberg  <mhahnenberg@apple.com>

        Windows test fix

        No new tests.

        Unreviewed test fix. All Windows tests were crashing when objects who were pointing to 
        static data members across DLL boundaries were getting garbage in their pointers.

        * WebCore.exp.in:
        * bindings/js/JSDOMWrapper.cpp:
        * bindings/js/JSDOMWrapper.h:

2011-12-16  Ryosuke Niwa  <rniwa@webkit.org>

        Rename registerCommandFor(Undo|Redo) to register(Undo|Redo)Step
        https://bugs.webkit.org/show_bug.cgi?id=74748

        Reviewed by Eric Seidel.

        Renamed registerCommandForUndo and registerCommandForRedo to
        registerUndoStep and registerRedoStep respectively.

        * editing/Editor.cpp:
        (WebCore::Editor::appliedEditing):
        (WebCore::Editor::unappliedEditing):
        (WebCore::Editor::reappliedEditing):
        * loader/EmptyClients.h:
        (WebCore::EmptyEditorClient::registerUndoStep):
        (WebCore::EmptyEditorClient::registerRedoStep):
        * page/EditorClient.h:

2011-12-16  Tim Horton  <timothy_horton@apple.com>

        Canvas should respect backing store scale ratio when used as drawImage() source
        https://bugs.webkit.org/show_bug.cgi?id=74758
        <rdar://problem/10350194>

        Reviewed by Simon Fraser.

        Interpret the source rectangle passed into drawImage() when using a Canvas source in the source Canvas coordinate space,
        instead of in the backing store coordinate space, without changing the behavior of drawImage(canvas, x, y).

        No new tests.

        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::convertDeviceToLogical):
        * html/HTMLCanvasElement.h:
        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::drawImage):

2011-12-16  Anders Carlsson  <andersca@apple.com>

        Subpixel antialiasing not working in tiled mode
        https://bugs.webkit.org/show_bug.cgi?id=74759

        Reviewed by Simon Fraser.

        Call setContentsOpaque(true) on the main frame render view layer so subpixel aa will be used
        when drawing text into that layer.

        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::createPrimaryGraphicsLayer):

2011-12-16  Ryosuke Niwa  <rniwa@webkit.org>

        invalidateNodeListsCacheAfterAttributeChanged has too many callers
        https://bugs.webkit.org/show_bug.cgi?id=74692

        Reviewed by Sam Weinig.

        Call invalidateNodeListsCacheAfterAttributeChanged in Element::updateAfterAttributeChanged instead of
        parsedMappedAttribute of various elements. Also make invalidateNodeListsCacheAfterAttributeChanged take
        the qualified name of the changed attribute so that we can exit early when the changed attribute isn't
        one of attributes we care.

        In addition, added a missing call to invalidateNodeListsCacheAfterAttributeChanged in Attr::setValue.

        Test: fast/dom/Attr/invalidate-nodelist-after-attr-setvalue.html

        * dom/Attr.cpp:
        (WebCore::Attr::childrenChanged):
        * dom/Element.cpp:
        (WebCore::Element::updateAfterAttributeChanged):
        * dom/NamedNodeMap.cpp:
        (WebCore::NamedNodeMap::addAttribute):
        (WebCore::NamedNodeMap::removeAttribute):
        * dom/Node.cpp:
        (WebCore::Node::invalidateNodeListsCacheAfterAttributeChanged):
        * dom/Node.h:
        * dom/StyledElement.cpp:
        (WebCore::StyledElement::classAttributeChanged):
        * html/HTMLAnchorElement.cpp:
        (WebCore::HTMLAnchorElement::parseMappedAttribute):
        * html/HTMLAppletElement.cpp:
        (WebCore::HTMLAppletElement::parseMappedAttribute):
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::parseMappedAttribute):
        * html/HTMLEmbedElement.cpp:
        (WebCore::HTMLEmbedElement::parseMappedAttribute):
        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::parseMappedAttribute):
        * html/HTMLFrameElementBase.cpp:
        (WebCore::HTMLFrameElementBase::parseMappedAttribute):
        * html/HTMLIFrameElement.cpp:
        (WebCore::HTMLIFrameElement::parseMappedAttribute):
        * html/HTMLImageElement.cpp:
        (WebCore::HTMLImageElement::parseMappedAttribute):
        * html/HTMLMapElement.cpp:
        (WebCore::HTMLMapElement::parseMappedAttribute):
        * html/HTMLMetaElement.cpp:
        (WebCore::HTMLMetaElement::parseMappedAttribute):
        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::parseMappedAttribute):
        * html/HTMLParamElement.cpp:
        (WebCore::HTMLParamElement::parseMappedAttribute):

2011-12-16  Andreas Kling  <kling@webkit.org>

        Cache and reuse HTMLCollections exposed by Document.
        <http://webkit.org/b/71956>

        Reviewed by Antti Koivisto.

        Let Document cache the various HTMLCollection objects it exposes.
        This is a behavior change in two ways:

        1) The lifetime of returned collections is now tied to the lifetime
           of the Document. This matches the behavior of Firefox and Opera.

        2) The cached collections returned by document are now exactly equal
           to those returned by subsequent calls to the same getters.

        This reduces memory consumption by ~800 kB (on 64-bit) when loading
        the full HTML5 spec. document.links was called 34001 times, yielding
        34001 separate HTMLCollections, and now we only need 1.

        The document.all collection retains the old behavior, as caching it
        will be a bit more complicated.

        To avoid a reference cycle between Document and HTMLCollection,
        collections that are cached on Document do not retained their base
        node pointer (controlled by a m_baseIsRetained flag.)

        Tests: fast/dom/document-collection-idempotence.html
               fast/dom/gc-9.html

        * dom/Document.cpp:
        (WebCore::Document::detach):
        (WebCore::Document::cachedCollection):
        (WebCore::Document::images):
        (WebCore::Document::applets):
        (WebCore::Document::embeds):
        (WebCore::Document::plugins):
        (WebCore::Document::objects):
        (WebCore::Document::scripts):
        (WebCore::Document::links):
        (WebCore::Document::forms):
        (WebCore::Document::anchors):
        * dom/Document.h:
        * html/HTMLCollection.cpp:
        (WebCore::HTMLCollection::HTMLCollection):
        (WebCore::HTMLCollection::createForCachingOnDocument):
        (WebCore::HTMLCollection::~HTMLCollection):
        (WebCore::HTMLCollection::itemAfter):
        * html/HTMLCollection.h:
        (WebCore::HTMLCollection::base):

2011-12-16  Anders Carlsson  <andersca@apple.com>

        Add a pretty dumb tile cache to WebTileCacheLayer
        https://bugs.webkit.org/show_bug.cgi?id=74753

        Reviewed by Simon Fraser.

        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::requiresTiledLayer):
        If a layer is a tile cache layer, we never want to swap it out for a tiled layer.

        (WebCore::GraphicsLayerCA::swapFromOrToTiledLayer):
        Assert that we don't have a tile cache layer.

        * platform/graphics/ca/mac/PlatformCALayerMac.mm:
        (PlatformCALayer::PlatformCALayer):
        If we have a tile cache layer, add its tile container to the list of custom sublayers.

        * platform/graphics/ca/mac/TileCache.h: Added.
        (WebCore::TileCache::tileContainerLayer):
        Return the tile container layer.

        * platform/graphics/ca/mac/TileCache.mm: Added.
        (WebCore::TileCache::tileCacheLayerBoundsChanged):
        Resize the tile grid if necessary.

        (WebCore::TileCache::setNeedsDisplayInRect):
        Invalidate the necessary tiles.

        (WebCore::TileCache::drawLayer):
        Set up the transform and draw the layer.

        (WebCore::TileCache::getTileRangeForRect):
        Given a rect, return the range of tiles that it covers.

        (WebCore::TileCache::numTilesForGridSize):
        Given a size, return how many tiles are needed to completely cover it.

        (WebCore::TileCache::resizeTileGrid):
        Create new tile layers if needed, or reuse already existing ones.

        (WebCore::TileCache::tileLayerAtPosition):
        Given a position in the grid, return the tile layer.

        (WebCore::TileCache::createTileLayer):
        Create a WebTileLayer and set it up.

        * platform/graphics/ca/mac/WebTileCacheLayer.h:
        * platform/graphics/ca/mac/WebTileCacheLayer.mm:
        (-[WebTileCacheLayer setBounds:]):
        (-[WebTileCacheLayer setNeedsDisplayInRect:]):
        (-[WebTileCacheLayer tileContainerLayer]):
        Call down to the tile cache object.

        * platform/graphics/ca/mac/WebTileLayer.h: Added.
        * platform/graphics/ca/mac/WebTileLayer.mm: Added.

        (-[WebTileLayer drawInContext:]):
        Ask the tile cache to draw the given layer.

        (-[WebTileLayer setTileCache:WebCore::]):

2011-12-16  Sam Weinig  <sam@webkit.org>

        Give PlatformEvents a base class
        https://bugs.webkit.org/show_bug.cgi?id=74685

        Reviewed by Anders Carlsson.

        Add a base class for PlatformMouseEvent, PlatformKeyboardEvent, PlatformWheelEvent
        and PlatformGestureEvent and move Type enumeration and modifiers down to it.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.exp.in:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        Add new files.

        * platform/PlatformEvent.cpp: Added.
        * platform/PlatformEvent.h: Added.
        (WebCore::PlatformEvent::type):
        (WebCore::PlatformEvent::shiftKey):
        (WebCore::PlatformEvent::ctrlKey):
        (WebCore::PlatformEvent::altKey):
        (WebCore::PlatformEvent::metaKey):
        (WebCore::PlatformEvent::modifiers):
        (WebCore::PlatformEvent::PlatformEvent):
        Add new class.

        * accessibility/mac/WebAccessibilityObjectWrapper.mm:
        (-[WebAccessibilityObjectWrapper accessibilityShowContextMenu]):
        * dom/KeyboardEvent.cpp:
        (WebCore::eventTypeForKeyboardEventType):
        * dom/MouseEvent.cpp:
        (WebCore::MouseEvent::create):
        * page/DragController.cpp:
        (WebCore::createMouseEvent):
        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleGestureEvent):
        (WebCore::EventHandler::sendContextMenuEventForKey):
        (WebCore::EventHandler::fakeMouseMoveEventTimerFired):
        (WebCore::EventHandler::handleAccessKey):
        (WebCore::EventHandler::keyEvent):
        (WebCore::EventHandler::handleDrag):
        * page/blackberry/EventHandlerBlackBerry.cpp:
        (WebCore::EventHandler::accessKeyModifiers):
        * page/chromium/EventHandlerChromium.cpp:
        (WebCore::EventHandler::accessKeyModifiers):
        * page/efl/EventHandlerEfl.cpp:
        (WebCore::EventHandler::accessKeyModifiers):
        * page/gtk/EventHandlerGtk.cpp:
        (WebCore::EventHandler::accessKeyModifiers):
        * page/mac/EventHandlerMac.mm:
        (WebCore::EventHandler::accessKeyModifiers):
        * page/qt/EventHandlerQt.cpp:
        (WebCore::EventHandler::accessKeyModifiers):
        * page/win/EventHandlerWin.cpp:
        (WebCore::EventHandler::accessKeyModifiers):
        * page/wx/EventHandlerWx.cpp:
        (WebCore::EventHandler::accessKeyModifiers):
        * platform/PlatformGestureEvent.h:
        (WebCore::PlatformGestureEvent::PlatformGestureEvent):
        * platform/PlatformKeyboardEvent.h:
        (WebCore::PlatformKeyboardEvent::PlatformKeyboardEvent):
        (WebCore::PlatformKeyboardEvent::isKeypad):
        * platform/PlatformMouseEvent.h:
        (WebCore::PlatformMouseEvent::PlatformMouseEvent):
        (WebCore::PlatformMouseEvent::button):
        * platform/PlatformWheelEvent.h:
        (WebCore::PlatformWheelEvent::PlatformWheelEvent):
        * platform/ScrollAnimatorNone.cpp:
        (WebCore::ScrollAnimatorNone::zoom):
        (WebCore::ScrollAnimatorNone::handleGestureEvent):
        * platform/blackberry/PlatformKeyboardEventBlackBerry.cpp:
        (WebCore::toWebCorePlatformKeyboardEventType):
        (WebCore::PlatformKeyboardEvent::PlatformKeyboardEvent):
        (WebCore::PlatformKeyboardEvent::disambiguateKeyDownEvent):
        * platform/chromium/GestureRecognizerChromium.cpp:
        (WebCore::GestureRecognizerChromium::appendTapDownGestureEvent):
        (WebCore::GestureRecognizerChromium::appendClickGestureEvent):
        (WebCore::GestureRecognizerChromium::appendDoubleClickGestureEvent):
        (WebCore::GestureRecognizerChromium::appendScrollGestureBegin):
        (WebCore::GestureRecognizerChromium::appendScrollGestureEnd):
        (WebCore::GestureRecognizerChromium::appendScrollGestureUpdate):
        * platform/chromium/PlatformKeyboardEventChromium.cpp:
        (WebCore::PlatformKeyboardEvent::disambiguateKeyDownEvent):
        * platform/chromium/PopupContainer.cpp:
        (WebCore::PopupContainer::handleGestureEvent):
        * platform/chromium/PopupListBox.cpp:
        (WebCore::isCharacterTypeEvent):
        (WebCore::PopupListBox::handleKeyEvent):
        * platform/chromium/ScrollAnimatorChromiumMac.mm:
        (WebCore::ScrollAnimatorChromiumMac::handleGestureEvent):
        * platform/efl/PlatformKeyboardEventEfl.cpp:
        (WebCore::PlatformKeyboardEvent::PlatformKeyboardEvent):
        (WebCore::PlatformKeyboardEvent::disambiguateKeyDownEvent):
        * platform/efl/PlatformMouseEventEfl.cpp:
        (WebCore::PlatformMouseEvent::PlatformMouseEvent):
        * platform/efl/PlatformWheelEventEfl.cpp:
        (WebCore::PlatformWheelEvent::PlatformWheelEvent):
        * platform/gtk/PlatformKeyboardEventGtk.cpp:
        (WebCore::PlatformKeyboardEvent::PlatformKeyboardEvent):
        (WebCore::PlatformKeyboardEvent::disambiguateKeyDownEvent):
        * platform/gtk/PlatformMouseEventGtk.cpp:
        (WebCore::PlatformMouseEvent::PlatformMouseEvent):
        * platform/gtk/PlatformWheelEventGtk.cpp:
        (WebCore::PlatformWheelEvent::PlatformWheelEvent):
        * platform/ios/KeyEventIOS.mm:
        (WebCore::PlatformKeyboardEvent::PlatformKeyboardEvent):
        (WebCore::PlatformKeyboardEvent::disambiguateKeyDownEvent):
        * platform/mac/KeyEventMac.mm:
        (WebCore::PlatformKeyboardEvent::PlatformKeyboardEvent):
        * platform/mac/PlatformMouseEventMac.mm:
        (WebCore::mouseEventForNSEvent):
        (WebCore::PlatformMouseEvent::PlatformMouseEvent):
        * platform/mac/ScrollAnimatorMac.mm:
        (WebCore::ScrollAnimatorMac::handleGestureEvent):
        * platform/mac/WheelEventMac.mm:
        (WebCore::PlatformWheelEvent::PlatformWheelEvent):
        * platform/qt/PlatformKeyboardEventQt.cpp:
        (WebCore::PlatformKeyboardEvent::PlatformKeyboardEvent):
        (WebCore::PlatformKeyboardEvent::disambiguateKeyDownEvent):
        * platform/qt/PlatformMouseEventQt.cpp:
        (WebCore::mouseEventTypeAndMouseButtonFromQEvent):
        (WebCore::PlatformMouseEvent::PlatformMouseEvent):
        * platform/qt/WheelEventQt.cpp:
        (WebCore::PlatformWheelEvent::PlatformWheelEvent):
        * platform/win/KeyEventWin.cpp:
        (WebCore::isKeypadEvent):
        (WebCore::PlatformKeyboardEvent::PlatformKeyboardEvent):
        * platform/win/PlatformMouseEventWin.cpp:
        (WebCore::messageToEventType):
        (WebCore::PlatformMouseEvent::PlatformMouseEvent):
        * platform/win/WheelEventWin.cpp:
        (WebCore::PlatformWheelEvent::PlatformWheelEvent):
        * platform/wx/KeyboardEventWx.cpp:
        (WebCore::PlatformKeyboardEvent::PlatformKeyboardEvent):
        (WebCore::PlatformKeyboardEvent::disambiguateKeyDownEvent):
        * platform/wx/MouseEventWx.cpp:
        (WebCore::typeFromMouseEvent):
        (WebCore::PlatformMouseEvent::PlatformMouseEvent):
        * platform/wx/MouseWheelEventWx.cpp:
        (WebCore::PlatformWheelEvent::PlatformWheelEvent):
        * plugins/mac/PluginViewMac.mm:
        (WebCore::PluginView::handleKeyboardEvent):
        * testing/Internals.cpp:
        (WebCore::Internals::setZoomAnimatorTransform):
        Switch to using new names/class modifier as necessary.

2011-12-16  Adam Barth  <abarth@webkit.org>

        <!doctype html><div><body><frameset> doesn't parse correctly
        https://bugs.webkit.org/show_bug.cgi?id=74745

        Reviewed by Eric Seidel.

        We were missing one place the spec tells us to set this bool.

        Tests: html5lib/runner.html

        * html/parser/HTMLTreeBuilder.cpp:

2011-12-16  Jarred Nicholls  <jarred@sencha.com>

        Support HTML documents in XHR.responseXML
        https://bugs.webkit.org/show_bug.cgi?id=74626

        Latest W3C XHR spec details for the responseXML attribute:
        http://dvcs.w3.org/hg/xhr/raw-file/tip/Overview.html#the-responsexml-attribute
        http://dvcs.w3.org/hg/xhr/raw-file/tip/Overview.html#document-response-entity-body

        XHR.responseXML was not compliant per the latest editor's draft of the XHR spec.
        The following compliance issue have been corrected:
          - A responseType of "text" should disallow access to responseXML by throwing an InvalidState exception.
          - When the error flag is toggled, responseXML should return "null" immediately and not attempt to create a new Document.
          - responseXML should return a valid HTML document when the MIME type is "text/html", but only when the caller has
            explicitly set responseType to "document".

        Reviewed by Alexey Proskuryakov.

        Tests: fast/xmlhttprequest/xmlhttprequest-responseXML-html-document-responsetype-quirks.html
               fast/xmlhttprequest/xmlhttprequest-responseXML-html-document-responsetype-strict.html
               fast/xmlhttprequest/xmlhttprequest-responseXML-html-no-responsetype.html
               fast/xmlhttprequest/xmlhttprequest-responseXML-invalid-xml.html
               fast/xmlhttprequest/xmlhttprequest-responseXML-xml-document-responsetype.html
               fast/xmlhttprequest/xmlhttprequest-responseXML-xml-text-responsetype.html

        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::responseXML):
        (WebCore::XMLHttpRequest::clearResponseBuffers):
        * xml/XMLHttpRequest.h: Rename m_responseXML to m_responseDocument
        (WebCore::XMLHttpRequest::optionalResponseXML):

2011-12-16  Ryosuke Niwa  <rniwa@webkit.org>

        Only EditCommandComposition should implement unapply and reapply
        https://bugs.webkit.org/show_bug.cgi?id=74490

        Reviewed by Eric Seidel.

        Introduce new abstract class UndoStep to replace EditCommand for EditorClient, and make EditCommand
        private to WebCore.

        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.exp.in:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * editing/CompositeEditCommand.cpp:
        (WebCore::EditCommandComposition::create): Takes EditAction instead of boolean for CreateLinkCommand.
        (WebCore::EditCommandComposition::EditCommandComposition): Ditto.
        (WebCore::EditCommandComposition::unapply): Moved from EditCommand; we don't have to call isTopLevelCommand
        anymore because EditCommandComposition is always top-level. In fact, the only thing unapply/reapply do
        in addition to what doUnapply/doReapply do for sub-level commands is disabling and enabling delete button
        and defining an event queue scope. However, these can be done at top-level command anyway, so we now only call
        doApply for sub-level commands.
        (WebCore::EditCommandComposition::reapply): Ditto.
        (WebCore::EditCommandComposition::setStartingSelection): Added.
        (WebCore::EditCommandComposition::setEndingSelection): Added.
        (WebCore::applyCommand): Moved from EditCommand.
        (WebCore::CompositeEditCommand::apply): Moved from EditCommand; doesn't call isTopLevelCommand for the same reason.
        (WebCore::CompositeEditCommand::ensureComposition):
        (WebCore::CompositeEditCommand::applyCommandToComposite): Call doApply instead of apply for the same reason.
        * editing/CompositeEditCommand.h:
        (WebCore::EditCommandComposition::wasCreateLinkCommand):
        (WebCore::EditCommandComposition::startingSelection): Added.
        (WebCore::EditCommandComposition::endingSelection): Added.
        * editing/EditCommand.cpp:
        (WebCore::EditCommand::setStartingSelection):
        (WebCore::EditCommand::setEndingSelection):
        (WebCore::SimpleEditCommand::doReapply): Moved from EditCommand.
        * editing/EditCommand.h:
        * editing/UndoStep.h: Added.
        (WebCore::UndoStep::~UndoStep):
        * loader/EmptyClients.h:
        (WebCore::EmptyEditorClient::shouldInsertNode):
        (WebCore::EmptyEditorClient::didSetSelectionTypesForPasteboard):
        (WebCore::EmptyEditorClient::registerCommandForUndo): Takes UndoStep instead of EditCommand.
        (WebCore::EmptyEditorClient::registerCommandForRedo): Ditto.
        * page/EditorClient.h:

2011-12-16  Simon Fraser  <simon.fraser@apple.com>

        Allow a PlatformCALayer to own its own sublayers
        https://bugs.webkit.org/show_bug.cgi?id=74744

        Reviewed by Anders Carlsson.

        GraphicsLayerCA rebuilds the sublayer list of CALayers, which would
        blow away any custom layers that a PlatformCALayer wants to maintain
        as children.
        
        Make it possible for a PlatformLayerCA to indicate that it wants
        a specific list of sublayers to be maintained as the first layers
        in the child list.
        
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::updateSublayerList):
        * platform/graphics/ca/PlatformCALayer.h:
        (WebCore::PlatformCALayer::customSublayers):
        * platform/graphics/ca/mac/PlatformCALayerMac.mm:
        (PlatformCALayer::PlatformCALayer):

2011-12-16  Adam Barth  <abarth@webkit.org>

        <!DOCTYPE html><pre>&#x0a;&#x0a;A</pre> doesn't parse correctly
        https://bugs.webkit.org/show_bug.cgi?id=74658

        Reviewed by Darin Adler.

        Previously, we handled skipping newlines after <pre> in the tokenizer,
        which isn't how the spec handles them.  Instead, the spec skips them in
        the tree builder.  This isn't usually observable, except in the case of
        an HTML entity.  In that case, the tokenzier sees '&' (because the
        entity hasn't been decoded yet), but the tree builder sees '\n' (the
        decoded entity).  This patch fixes the bug by more closely aligning our
        implementation with the spec.

        Test: html5lib/runner.html

        * html/parser/HTMLTokenizer.cpp:
        (WebCore::HTMLTokenizer::reset):
        (WebCore::HTMLTokenizer::nextToken):
        * html/parser/HTMLTokenizer.h:
        * html/parser/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::ExternalCharacterTokenBuffer::skipAtMostOneLeadingNewline):
        (WebCore::HTMLTreeBuilder::HTMLTreeBuilder):
        (WebCore::HTMLTreeBuilder::processStartTagForInBody):
        (WebCore::HTMLTreeBuilder::processCharacterBuffer):
        * html/parser/HTMLTreeBuilder.h:
        * xml/parser/MarkupTokenizerBase.h:

2011-12-16  Joshua Bell  <jsbell@chromium.org>

        IndexedDB: Implement IDBObjectStore.count() and IDBIndex.count()
        https://bugs.webkit.org/show_bug.cgi?id=73686

        Reviewed by Tony Chang.

        These new methods open an internal cursor and iterate through the
        results, returning the number of items found. Note that only
        passing an IDBKeyRange is supported, not an IDBKey. Supporting
        that will require some IDL/binding monkeying; several other
        methods also need the same Key-or-KeyRange behavior.

        Tests: storage/indexeddb/index-count.html
               storage/indexeddb/objectstore-count.html

        * bindings/v8/SerializedScriptValue.cpp:
        (WebCore::SerializedScriptValue::numberValue):
        * bindings/v8/SerializedScriptValue.h:
        * storage/IDBIndex.cpp:
        (WebCore::IDBIndex::openCursor):
        (WebCore::IDBIndex::count):
        * storage/IDBIndex.h:
        (WebCore::IDBIndex::count):
        * storage/IDBIndex.idl:
        * storage/IDBIndexBackendImpl.cpp:
        (WebCore::IDBIndexBackendImpl::countInternal):
        (WebCore::IDBIndexBackendImpl::count):
        * storage/IDBIndexBackendImpl.h:
        * storage/IDBIndexBackendInterface.h:
        * storage/IDBObjectStore.cpp:
        (WebCore::IDBObjectStore::count):
        * storage/IDBObjectStore.h:
        (WebCore::IDBObjectStore::count):
        * storage/IDBObjectStore.idl:
        * storage/IDBObjectStoreBackendImpl.cpp:
        (WebCore::IDBObjectStoreBackendImpl::count):
        (WebCore::IDBObjectStoreBackendImpl::countInternal):
        * storage/IDBObjectStoreBackendImpl.h:
        * storage/IDBObjectStoreBackendInterface.h:

2011-12-16  Yael Aharon  <yael.aharon@nokia.com>

        Audio file in video element has a size of 0x0 .
        https://bugs.webkit.org/show_bug.cgi?id=74738

        Reviewed by Kenneth Rohde Christiansen.

        When the source of a video element has audio only, the intrinsic size of the video should
        not be 0x0. Instead, it should be the same as as no media was loaded.

        No new tests. An existing test is covering this case and was modified to reflect this change.

        * rendering/RenderVideo.cpp:
        (WebCore::RenderVideo::calculateIntrinsicSize):

2011-12-16  Alexis Menard  <alexis.menard@openbossa.org>

        getComputedStyle for border-width is not implemented.
        https://bugs.webkit.org/show_bug.cgi?id=74635

        Reviewed by Tony Chang.

        Implement getComputedStyle for border-width.

        Test: fast/css/getComputedStyle/getComputedStyle-border-width.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):

2011-12-16  Branimir Lambov  <blambov@google.com>

        [chromium] svg/clip-path/clip-in-mask.svg fails on Windows and Linux
        https://bugs.webkit.org/show_bug.cgi?id=53378

        Reviewed by Tony Chang.

        Fixes a problem in Skia's clipping layer code's handling of coordinate
        transformations that was causing all complex clipping (including text
        and/or masks) to fail.

        The method beginLayerClippedToImage was taking rectangle coordinates
        in one local coordinate space, but it was applying them in a different  
        one because of the delay between the time it is called and the actual 
        application occurs in applyClipFromImage. The fix translates the 
        coordinates passed to beginLayerClippedToImage to absolute ones, so 
        that they are not affected by any change in the transform matrix, and 
        makes sure that applyClipFromImage clears the matrix before drawing
        the clip layer to correctly apply the absolute coordinates.

        * platform/graphics/skia/PlatformContextSkia.cpp:
        (WebCore::PlatformContextSkia::beginLayerClippedToImage):
        (WebCore::PlatformContextSkia::applyClipFromImage):
        * platform/graphics/skia/PlatformContextSkia.h:

2011-12-16  Mark Hahnenberg  <mhahnenberg@apple.com>

        De-virtualize destructors
        https://bugs.webkit.org/show_bug.cgi?id=74331

        Reviewed by Geoffrey Garen.

        No new tests.

        Doing everything here that was done to the JSCell hierarchy in JavaScriptCore. 
        See the ChangeLog for this commit for a more in-depth description.

        * WebCore.exp.in: Add/remove symbols.
        * bindings/js/JSCanvasRenderingContext2DCustom.cpp: Remove first arg from isJSArray call.
        (WebCore::JSCanvasRenderingContext2D::setWebkitLineDash):
        * bindings/js/JSDOMBinding.cpp: Add trival destructor assert for DOMConstructorObject 
        and DOMConstructorWithDocument.
        * bindings/js/JSDOMGlobalObject.cpp: Add static destroy.  Add implementation for 
        scriptExecutionContext that dispatches to different functions in subclasses 
        depending on our current ClassInfo.  We do this so that we can get rid of the 
        virtual-ness of scriptExecutionContext, because any virtual functions will throw 
        off the layout of the object and we'll crash at runtime.
        (WebCore::JSDOMGlobalObject::destroy):
        (WebCore::JSDOMGlobalObject::scriptExecutionContext):
        * bindings/js/JSDOMGlobalObject.h:
        * bindings/js/JSDOMWindowBase.cpp: Add static destroy.
        (WebCore::JSDOMWindowBase::destroy):
        * bindings/js/JSDOMWindowBase.h: De-virtualize scriptExecutionContext.
        * bindings/js/JSDOMWindowShell.cpp: Add static destroy.
        (WebCore::JSDOMWindowShell::destroy):
        * bindings/js/JSDOMWindowShell.h:
        * bindings/js/JSDOMWrapper.cpp: Add trivial destructor assert.
        * bindings/js/JSDOMWrapper.h: Add a ClassInfo to JSDOMWrapper since it now overrides 
        a MethodTable function. Remove vtableAnchor virtual function.
        * bindings/js/JSImageConstructor.cpp: Add trivial destructor assert.
        * bindings/js/JSNodeCustom.cpp: Change implementation of pushEventHandlerScope so that 
        it dispatches to the correct function depending on the 
        identity of the class as specified by the ClassInfo.  
        See JSDOMGlobalObject::scriptExecutionContext for explanation.
        (WebCore::JSNode::pushEventHandlerScope):
        * bindings/js/JSWebSocketCustom.cpp: Remove first arg to isJSArray call.
        (WebCore::JSWebSocketConstructor::constructJSWebSocket):
        * bindings/js/JSWorkerContextBase.cpp: Add static destroy.
        (WebCore::JSWorkerContextBase::destroy):
        * bindings/js/JSWorkerContextBase.h: 
        * bindings/js/ScriptValue.cpp: Remove first arg to isJSArray call.
        (WebCore::jsToInspectorValue): 
        * bindings/js/SerializedScriptValue.cpp: Ditto.
        (WebCore::CloneSerializer::isArray):
        (WebCore::CloneSerializer::getSparseIndex):
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateHeader): Remove virtual-ness of any custom pushEventHandlerScope (see 
        JSNodeCustom::pushEventHandlerScope for explanation).  Remove virtual toBoolean 
        for anybody who masquerades as undefined, since our JSObject implementation handles 
        this based on the TypeInfo in the Structure. Add trivial destructor assert for any 
        class other than DOMWindow or WorkerContexts.
        (GenerateImplementation): Change ClassInfo definitions to use Base::s_info, since 
        typing the parent class more than once is duplication of information and increases 
        the likelihood of mistakes.  Pass ClassInfo to TypeArrayDescriptors instead of vptr. 
        (GenerateConstructorDefinition): Add trivial destructor assert for all generated constructors.
        * bridge/c/CRuntimeObject.cpp: Remove empty virtual destructor.
        * bridge/c/CRuntimeObject.h: 
        * bridge/jni/jsc/JavaRuntimeObject.cpp: Ditto.
        * bridge/jni/jsc/JavaRuntimeObject.h: 
        * bridge/objc/ObjCRuntimeObject.h: Ditto.
        * bridge/objc/ObjCRuntimeObject.mm:
        * bridge/objc/objc_runtime.h: Add static destroy for ObjcFallbackObjectImp. De-virtualize 
        toBoolean in the short term.  Need longer term fix.
        * bridge/objc/objc_runtime.mm:
        (JSC::Bindings::ObjcFallbackObjectImp::destroy):
        * bridge/qt/qt_runtime.cpp: Add static destroy to QtRuntimeMethod.
        (JSC::Bindings::QtRuntimeMethod::destroy):
        * bridge/qt/qt_runtime.h: De-virtualize ~QtRuntimeMethod.
        * bridge/runtime_array.cpp: De-virtualize destructor. Add static destroy.
        (JSC::RuntimeArray::destroy):
        * bridge/runtime_array.h:
        * bridge/runtime_method.cpp: Remove vtableAnchor. Add static destroy.
        (JSC::RuntimeMethod::destroy):
        * bridge/runtime_method.h:
        * bridge/runtime_object.cpp: Add static destroy.
        (JSC::Bindings::RuntimeObject::destroy):
        * bridge/runtime_object.h:

2011-12-15  Alexey Proskuryakov  <ap@apple.com>

        Poor XPath performance when evaluating an expression that returns a lot of nodes
        https://bugs.webkit.org/show_bug.cgi?id=74665
        <rdar://problem/10517146>

        Reviewed by Darin Adler.

        No change in funcitonality. Well covered by existing tests (ran them with zero cutoff to
        execute the new code path).

        Our sorting function is optimized for small node sets in large documents, and this is the
        opposite of it. Added another one that traverses the whole document, adding nodes from the
        node set to sorted list. That doesn't grow with the number of nodes nearly as fast.

        Cutoff amount chosen for the document referenced in bug - this is roughly where the algorithms
        have the same performance on it.

        * xml/XPathNodeSet.cpp:
        (WebCore::XPath::NodeSet::sort):
        (WebCore::XPath::findRootNode):
        (WebCore::XPath::NodeSet::traversalSort):
        * xml/XPathNodeSet.h:

2011-12-15  Antti Koivisto  <antti@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=74677
        Count ResourceLoadScheduler suspends/resumes

        Reviewed by Andreas Kling.

        Using boolean is not robust when there are multiple clients calling suspendPendingRequests/resumePendingRequests.
        
        Increment and decrement suspend count instead of just setting/unsetting a boolean.

        * loader/ResourceLoadScheduler.cpp:
        (WebCore::ResourceLoadScheduler::ResourceLoadScheduler):
        (WebCore::ResourceLoadScheduler::servePendingRequests):
        (WebCore::ResourceLoadScheduler::suspendPendingRequests):
        (WebCore::ResourceLoadScheduler::resumePendingRequests):
        * loader/ResourceLoadScheduler.h:
        (WebCore::ResourceLoadScheduler::isSuspendingPendingRequests):

2011-12-16  Adam Klein  <adamk@chromium.org>

        Improve performance of ChildListMutationScope when no MutationObservers are present
        https://bugs.webkit.org/show_bug.cgi?id=74671

        Reviewed by Ojan Vafai.

        Inline ChildListMutationScope's methods (including constructor and
        destructor), and provide a fast-fail case when no mutation observers
        are present.

        The code reorganization necessary for the above also removed the
        anonymous namespace in ChildListMutationScope.cpp, making both helper
        classes private inner classes of ChildListMutationScope.

        No new tests, refactoring only.

        * dom/ChildListMutationScope.cpp:
        (WebCore::ChildListMutationScope::MutationAccumulator::MutationAccumulator):
        (WebCore::ChildListMutationScope::MutationAccumulator::~MutationAccumulator):
        (WebCore::ChildListMutationScope::MutationAccumulator::isAddedNodeInOrder):
        (WebCore::ChildListMutationScope::MutationAccumulator::childAdded):
        (WebCore::ChildListMutationScope::MutationAccumulator::isRemovedNodeInOrder):
        (WebCore::ChildListMutationScope::MutationAccumulator::willRemoveChild):
        (WebCore::ChildListMutationScope::MutationAccumulator::enqueueMutationRecord):
        (WebCore::ChildListMutationScope::MutationAccumulator::clear):
        (WebCore::ChildListMutationScope::MutationAccumulator::isEmpty):
        (WebCore::ChildListMutationScope::MutationAccumulationRouter::MutationAccumulationRouter):
        (WebCore::ChildListMutationScope::MutationAccumulationRouter::~MutationAccumulationRouter):
        (WebCore::ChildListMutationScope::MutationAccumulationRouter::initialize):
        (WebCore::ChildListMutationScope::MutationAccumulationRouter::instance):
        (WebCore::ChildListMutationScope::MutationAccumulationRouter::childAdded):
        (WebCore::ChildListMutationScope::MutationAccumulationRouter::willRemoveChild):
        (WebCore::ChildListMutationScope::MutationAccumulationRouter::incrementScopingLevel):
        (WebCore::ChildListMutationScope::MutationAccumulationRouter::decrementScopingLevel):
        * dom/ChildListMutationScope.h:
        (WebCore::ChildListMutationScope::ChildListMutationScope):
        (WebCore::ChildListMutationScope::~ChildListMutationScope):
        (WebCore::ChildListMutationScope::childAdded):
        (WebCore::ChildListMutationScope::willRemoveChild):

2011-12-16  Dean Jackson  <dino@apple.com>

        Filters need to affect visual overflow
        https://bugs.webkit.org/show_bug.cgi?id=71930

        Reviewed by Simon Fraser.

        Make sure filters are included in visual overflow.
        Add a new method to calculate the expansion of overflow
        region given a list of FilterOperations. This is a slight
        duplication of code from the rendering path, but is needed
        because overflow is calculated before the FilterEffect
        chain is built.

        Also, filters were always rendered into their
        input rectangle which was wrong for any effect
        that produced a different sized result - drop-shadow
        and blur. This required two changes. First, FilterEffect
        needed a flag to decide whether or not to clip
        output to primitive regions (as required by SVG but not
        what we want here). Second, the rendering operation
        draws into the rectangle the filter claims is its painting
        rectangle.

        Test: css3/filters/regions-expanding.html

        * platform/graphics/filters/FEDropShadow.cpp:
        (WebCore::FEDropShadow::determineAbsolutePaintRect): Only
        clipToBounds if necessary.
        * platform/graphics/filters/FEGaussianBlur.cpp:
        (WebCore::FEGaussianBlur::calculateUnscaledKernelSize): CSS filters
        ask for the kernel size before the Filter object is created, so
        add a new method to return an unscaled kernel.
        (WebCore::FEGaussianBlur::calculateKernelSize):
        (WebCore::FEGaussianBlur::determineAbsolutePaintRect): Only
        clipToBounds if necessary.
        * platform/graphics/filters/FEGaussianBlur.h:
        * platform/graphics/filters/FEMorphology.cpp:
        (WebCore::FEMorphology::determineAbsolutePaintRect): Only
        clipToBounds if necessary.
        * platform/graphics/filters/FEOffset.cpp:
        (WebCore::FEOffset::determineAbsolutePaintRect): Only
        clipToBounds if necessary.
        * platform/graphics/filters/FilterEffect.cpp:
        (WebCore::FilterEffect::FilterEffect): Initialize clipToBounds
        as false so SVG remains unchanged.
        (WebCore::FilterEffect::determineAbsolutePaintRect): Only
        clipToBounds if necessary.
        * platform/graphics/filters/FilterEffect.h:
        (WebCore::FilterEffect::clipsToBounds):
        (WebCore::FilterEffect::setClipsToBounds):
        * rendering/FilterEffectRenderer.cpp:
        (WebCore::FilterEffectRenderer::build): Make sure we set our
        filters here to NOT clip to bounds.
        * rendering/FilterEffectRenderer.h:
        (WebCore::FilterEffectRenderer::outputRect): Asks the filter
        operation for the size of the result image.
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::computeOverflow):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::addVisualEffectOverflow): Change the name
        from addBoxShadowAndBorderOverflow().
        * rendering/RenderBox.h:
        * rendering/RenderEmbeddedObject.cpp:
        (WebCore::RenderEmbeddedObject::layout):
        * rendering/RenderIFrame.cpp:
        (WebCore::RenderIFrame::layout):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::paintLayer):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::hasBoxDecorations): Change name from
        hasBorderOutlineOrShadow().
        (WebCore::hasBoxDecorationsOrBackground):
        (WebCore::hasBoxDecorationsOrBackgroundImage):
        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::layout):
        * rendering/style/FilterOperations.cpp:
        (WebCore::outsetSizeForBlur): Return an IntSize that is the amount
        of offset.
        (WebCore::FilterOperations::hasOutsets):
        (WebCore::FilterOperations::getOutsets):
        * rendering/style/FilterOperations.h:
        * rendering/style/RenderStyle.h:
        (WebCore::InheritedFlags::getFilterOutsets):
        (WebCore::InheritedFlags::hasFilterOutsets):
        * svg/graphics/filters/SVGFEImage.cpp:
        (WebCore::FEImage::determineAbsolutePaintRect): Only
        clipToBounds if necessary.

2011-12-16  Alexis Menard  <alexis.menard@openbossa.org>, Jakub Wieczorek  <jwieczorek@webkit.org>

        Add support for <ol reversed>.
        https://bugs.webkit.org/show_bug.cgi?id=36724

        The reversed attribute makes an ordered list appear with marker values
        decreasing from n, where n is the number of items.
        See: http://www.whatwg.org/specs/web-apps/current-work/#attr-ol-reversed

        Reviewed by Darin Adler.

        Tests: fast/lists/ol-reversed-dynamic-simple.html
               fast/lists/ol-reversed-dynamic.html
               fast/lists/ol-reversed-nested-items.html
               fast/lists/ol-reversed-nested-list.html
               fast/lists/ol-reversed-simple.html

        * html/HTMLAttributeNames.in:
        * html/HTMLOListElement.cpp:
        (WebCore::HTMLOListElement::HTMLOListElement):
        (WebCore::HTMLOListElement::parseMappedAttribute):
        (WebCore::HTMLOListElement::updateItemValues):
        (WebCore::HTMLOListElement::recalculateItemCount):
        * html/HTMLOListElement.h:
        (WebCore::HTMLOListElement::start):
        (WebCore::HTMLOListElement::isReversed):
        (WebCore::HTMLOListElement::itemCountChanged):
        (WebCore::HTMLOListElement::itemCount):
        * html/HTMLOListElement.idl:
        * rendering/RenderListItem.cpp:
        (WebCore::RenderListItem::nextListItem):
        (WebCore::previousListItem):
        (WebCore::RenderListItem::calcValue):
        (WebCore::RenderListItem::explicitValueChanged):
        (WebCore::previousOrNextItem):
        (WebCore::RenderListItem::updateListMarkerNumbers):
        * rendering/RenderListItem.h:

2011-12-16  Mikhail Naganov  <mnaganov@chromium.org>

        Scroll non-visible edit controls and caret into the center of the view when starting typing.
        https://bugs.webkit.org/show_bug.cgi?id=65027

        Reviewed by Ryosuke Niwa.

        Tests: editing/input/caret-at-the-edge-of-contenteditable.html
               editing/input/caret-at-the-edge-of-input.html
               editing/input/reveal-caret-of-multiline-contenteditable.html
               editing/input/reveal-caret-of-multiline-input.html
               editing/input/reveal-contenteditable-on-input-vertically.html
               editing/input/reveal-contenteditable-on-paste-vertically.html
               editing/input/reveal-edit-on-input-vertically.html
               editing/input/reveal-edit-on-paste-vertically.html

        * editing/Editor.cpp:
        (WebCore::Editor::insertTextWithoutSendingTextEvent):
        (WebCore::Editor::revealSelectionAfterEditingOperation):

2011-12-16  Ryosuke Niwa  <rniwa@webkit.org>

        Touch RenderStyle in an attempt to fix linking errors on Chromium Windows bots.

        * rendering/style/RenderStyle.h:

2011-12-14  Nat Duca  <nduca@chromium.org>

        [chromium] DelayBasedTimeSource should not change its timebase on late ticks
        https://bugs.webkit.org/show_bug.cgi?id=74573

        The original DelayBasedTimeSource was designed to shift its timebase
        to the tick time when a tick came back "late." The rationale was that it is
        better to just "start fresh" after a stutter. After profiling this,
        this time-rebasing just destabilizes frame rate anytime the thread gets
        loaded.  This patch keeps the timebase stationary, leading to vastly
        smoother framerates when the message loop is under load.

        Reviewed by James Robinson.

        * platform/graphics/chromium/cc/CCDelayBasedTimeSource.cpp:
        (WebCore::CCDelayBasedTimeSource::updateState):

2011-12-16  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r103062.
        http://trac.webkit.org/changeset/103062
        https://bugs.webkit.org/show_bug.cgi?id=74715

        It broke many tests (Requested by Ossy on #webkit).

        * html/HTMLAttributeNames.in:
        * html/HTMLOListElement.cpp:
        (WebCore::HTMLOListElement::HTMLOListElement):
        (WebCore::HTMLOListElement::parseMappedAttribute):
        * html/HTMLOListElement.h:
        (WebCore::HTMLOListElement::start):
        * html/HTMLOListElement.idl:
        * rendering/RenderListItem.cpp:
        (WebCore::previousListItem):
        (WebCore::RenderListItem::calcValue):
        (WebCore::RenderListItem::explicitValueChanged):
        (WebCore::RenderListItem::updateListMarkerNumbers):
        * rendering/RenderListItem.h:

2011-12-16  Alexis Menard  <alexis.menard@openbossa.org>, Jakub Wieczorek  <jwieczorek@webkit.org>

        Add support for <ol reversed>.
        https://bugs.webkit.org/show_bug.cgi?id=36724

        The reversed attribute makes an ordered list appear with marker values
        decreasing from n, where n is the number of items.
        See: http://www.whatwg.org/specs/web-apps/current-work/#attr-ol-reversed

        Reviewed by Darin Adler.

        Tests: fast/lists/ol-reversed-dynamic-simple.html
               fast/lists/ol-reversed-dynamic.html
               fast/lists/ol-reversed-nested-items.html
               fast/lists/ol-reversed-nested-list.html
               fast/lists/ol-reversed-simple.html

        * html/HTMLAttributeNames.in:
        * html/HTMLOListElement.cpp:
        (WebCore::HTMLOListElement::HTMLOListElement):
        (WebCore::HTMLOListElement::parseMappedAttribute):
        (WebCore::HTMLOListElement::updateItemValues):
        (WebCore::HTMLOListElement::recalculateItemCount):
        * html/HTMLOListElement.h:
        (WebCore::HTMLOListElement::start):
        (WebCore::HTMLOListElement::isReversed):
        (WebCore::HTMLOListElement::itemCountChanged):
        (WebCore::HTMLOListElement::itemCount):
        * html/HTMLOListElement.idl:
        * rendering/RenderListItem.cpp:
        (WebCore::RenderListItem::nextListItem):
        (WebCore::previousListItem):
        (WebCore::RenderListItem::calcValue):
        (WebCore::RenderListItem::explicitValueChanged):
        (WebCore::previousOrNextItem):
        (WebCore::RenderListItem::updateListMarkerNumbers):
        * rendering/RenderListItem.h:

2011-12-15  Stephen White  <senorblanco@chromium.org>

        Enable CSS_FILTERS in Chromium.
        https://bugs.webkit.org/show_bug.cgi?id=74334

        Reviewed by Chris Marrin.

        Covered by css3/filters (when enabled).

        * platform/graphics/filters/FilterOperation.h:
        (WebCore::PassthroughFilterOperation::PassthroughFilterOperation):
        Since wingdi.h #define's PASSTHROUGH, #undef it after the includes.

2011-12-16  Patrick Gansterer  <paroga@webkit.org>

        Unreviewed WinCE build fix after r102979.

        Make everHadLayout() public accessible as it was before the change.

        * rendering/RenderObject.h:
        (WebCore::RenderObject::everHadLayout):

2011-12-15  Hans Wennborg  <hans@chromium.org>

        IndexedDB: Don't prefetch values from key cursors
        https://bugs.webkit.org/show_bug.cgi?id=74604

        Reviewed by Tony Chang.

        Since index key cursors don't have values, prefetching should not try
        to retrieve them. Doing so trips an ASSERT in debug builds.

        This will be tested Chromium-side.

        * storage/IDBCursorBackendImpl.cpp:
        (WebCore::IDBCursorBackendImpl::prefetchContinueInternal):

2011-12-16  Yosifumi Inoue  <yosin@chromium.org>

        [Forms] The "maxlength" attribute on "textarea" tag miscounts hard newlines
        https://bugs.webkit.org/show_bug.cgi?id=74686

        Reviewed by Kent Tamura.

        This patch counts LF in textarea value as two for LF to CRLF conversion on submission.

        No new tests. Existing tests cover all changes.

        * html/HTMLTextAreaElement.cpp:
        (WebCore::computeLengthForSubmission): Count LF as 2 for CR LF conversion on submission.
        (WebCore::HTMLTextAreaElement::handleBeforeTextInsertedEvent): Use computeLengthForSubmission instead of numGraphemeClusters.
        (WebCore::HTMLTextAreaElement::tooLong): Use computeLengthForSubmission instead of numGraphemeClusters.

2011-12-16  Hajime Morrita  <morrita@chromium.org>

        Unreviewed, rolling out r103045.
        http://trac.webkit.org/changeset/103045
        https://bugs.webkit.org/show_bug.cgi?id=74590

        Breaks select-script-onchange.html on Chromium Windows

        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::typeAheadFind):

2011-12-16  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix make distcheck.

        * GNUmakefile.list.am: Add missing header file.

2011-12-16  Yosifumi Inoue  <yosin@chromium.org>

        [Forms] Selection change by type-ahead doesn't fire 'change' event
        https://bugs.webkit.org/show_bug.cgi?id=74590

        Reviewed by Kent Tamura.

        Fire onchange even for type ahead selection.

        Test: fast/forms/select/menulist-type-ahead-find.html

        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::typeAheadFind): Add DispatchChangeEvent when
        calling selectOption method.

2011-12-16  Andreas Kling  <kling@webkit.org>

        Don't call Document::body() twice in the same function.
        <http://webkit.org/b/74683>

        Reviewed by Dan Bernstein.

        Document::body() is O(n), so we should avoid calling it multiple
        times unnecessarily.

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

2011-12-16  Daniel Sievers  <sievers@chromium.org>

        [Chromium] Add trace events for decoding and drawing images.
        https://bugs.webkit.org/show_bug.cgi?id=74547

        Reviewed by James Robinson.

        * platform/graphics/skia/ImageSkia.cpp:
        (WebCore::drawResampledBitmap):
        (WebCore::paintSkBitmap):
        (WebCore::Image::drawPattern):
        * platform/graphics/skia/NativeImageSkia.cpp:
        (WebCore::NativeImageSkia::resizedBitmap):
        * platform/image-decoders/bmp/BMPImageDecoder.cpp:
        (WebCore::BMPImageDecoder::decode):
        * platform/image-decoders/gif/GIFImageDecoder.cpp:
        (WebCore::GIFImageDecoder::decode):
        * platform/image-decoders/ico/ICOImageDecoder.cpp:
        (WebCore::ICOImageDecoder::decode):
        * platform/image-decoders/jpeg/JPEGImageDecoder.cpp:
        (WebCore::JPEGImageDecoder::decode):
        * platform/image-decoders/png/PNGImageDecoder.cpp:
        (WebCore::PNGImageDecoder::decode):
        * platform/image-decoders/webp/WEBPImageDecoder.cpp:
        (WebCore::WEBPImageDecoder::decode):

2011-12-15  Martin Robinson  <mrobinson@igalia.com>

        Fix 'make dist' in preparation for the GTK+ release.

        * GNUmakefile.list.am: Add missing header.

2011-12-15  Rafael Ávila de Espíndola  <rafael.espindola@gmail.com>

        Don't create empty files on error.
        https://bugs.webkit.org/show_bug.cgi?id=74373

        Reviewed by Ryosuke Niwa.

        * css/makeprop.pl:
        * css/makevalues.pl:
        * make-hash-tools.pl:

2011-12-15  Yongjun Zhang  <yongjun_zhang@apple.com>

        PODIntervalTree takes 1.7MB memory on www.nytimes.com.
        https://bugs.webkit.org/show_bug.cgi?id=73712

        Reviewed by Kenneth Russell.

        For a RenderBlock which has floating objects inside, we will create a PODIntervalTree and a PODArena with
        at least one 16KB chunk.  A page could have a large number of such RenderBlocks and they could take huge
        amount of memory.  To fix that, we can create a shared PODArena in the root RenderView.  Instead of having
        their own PODArena, each RenderBlock with floating objects could share this PODArena to reduce memory consumption.

        The shared PODArena could grow unboundedly if we keep removing and adding floating objects.  We can fix that
        by reusing the freed memory in each chunk.  However, a PODArena could allocate objects of different sizes and
        it would be complex to keep track of the size for each allocation in PODArena.  To address that, this patch
        added class PODFreeListArena<T> which only allocates objects of type T (hence the same size).  We can then use a
        free list to track freed nodes inside the chunk and reuse the free nodes in future allocations.

        Manually tested on nytimes.com and the heap consumption of PODIntervalTree reduced from 1.7MB to 16KB. Performance
        doesn't regress on test PerformanceTests/Layout/floats.html.

        * WebCore.xcodeproj/project.pbxproj: add new header file PODFreeListArena.h.
        * platform/PODArena.h:
        (WebCore::PODArena::~PODArena): change dtor to virtual.
        (WebCore::PODArena::Chunk::~Chunk): ditto.
        * platform/PODFreeListArena.h: Added.
        (WebCore::PODFreeListArena::create): 
        (WebCore::PODFreeListArena::allocateObject): allocate an object.
        (WebCore::PODFreeListArena::freeObject): free an object, find the right chunk and update its free list.
        (WebCore::PODFreeListArena::allocate): allocate memory from the free list or current chunk.
        (WebCore::PODFreeListArena::FreeListChunk::FreeListChunk): add m_freeList to track freed cells.
        (WebCore::PODFreeListArena::FreeListChunk::allocate): reuse a free cell if there is one.
        (WebCore::PODFreeListArena::FreeListChunk::free): make the memory taken by this object is free, and link it to m_freeList.
        (WebCore::PODFreeListArena::FreeListChunk::contains): check if a pointer is inside this chunk.
        (WebCore::PODFreeListArena::FreeListChunk::hasFreeList): check if this chunk has free cells.
        * platform/PODRedBlackTree.h:
        (WebCore::PODRedBlackTree::PODRedBlackTree): take PODFreeListArena instead of PODArena, since nodes of a particular PODRedBlackTree
            is always of the same size.
        (WebCore::PODRedBlackTree::clear): mark all nodes before clearing the tree.
        (WebCore::PODRedBlackTree::initIfNeeded): add initIfNeeded to take an external PODFreeListArena.
        (WebCore::PODRedBlackTree::add):
        (WebCore::PODRedBlackTree::deleteNode): mark the node free in arena after it is removed from the tree.
        (WebCore::PODRedBlackTree::markFree): mark all node free in the tree.
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::insertFloatingObject):
        (WebCore::RenderBlock::addOverhangingFloats):
        (WebCore::RenderBlock::addIntrudingFloats):
        (WebCore::RenderBlock::FloatingObjects::computePlacedFloatsTree):  passing the shared PODFreeListArena to m_placedFloatsTree.
        * rendering/RenderBlock.h:
        (WebCore::RenderBlock::FloatingObjects::FloatingObjects):
        * rendering/RenderView.cpp:
        (WebCore::RenderView::intervalArena): create the shared PODFreeListArena lazily.
        * rendering/RenderView.h:

2011-12-15  Tony Chang  <tony@chromium.org>

        Unreviewed, rollout r102825 because it didn't improve performance.
        https://bugs.webkit.org/show_bug.cgi?id=74622

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::styleForElement):
        (WebCore::CSSStyleSelector::pseudoStyleForElement):

2011-12-15  Ryosuke Niwa  <rniwa@webkit.org>

        sizeof(RenderObject) is 32 instead of 24 on Windows
        https://bugs.webkit.org/show_bug.cgi?id=74646

        Reviewed by Darin Adler.

        Make all bitfields in RenderObject to unsigned and wrap them around by RenderObjectBitfields.
        Also add a compilation time assertion to make sure we won't grow RenderObject's size unintentionally.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::layoutBlock):
        (WebCore::RenderBlock::layoutBlockChild):
        (WebCore::RenderBlock::markAllDescendantsWithFloatsForLayout):
        (WebCore::RenderBlock::layoutColumns):
        * rendering/RenderBlock.h:
        (WebCore::RenderBlock::FloatWithRect::FloatWithRect):
        * rendering/RenderObject.cpp:
        (WebCore::SameSizeAsRenderObject::~SameSizeAsRenderObject):
        (WebCore::RenderObject::RenderObject):
        (WebCore::RenderObject::markContainingBlocksForLayout):
        (WebCore::RenderObject::setPreferredLogicalWidthsDirty):
        (WebCore::RenderObject::invalidateContainerPreferredLogicalWidths):
        (WebCore::RenderObject::styleWillChange):
        (WebCore::RenderObject::styleDidChange):
        (WebCore::RenderObject::willBeDestroyed):
        (WebCore::RenderObject::updateDragState):
        * rendering/RenderObject.h:
        (WebCore::RenderObject::hasCounterNodeMap):
        (WebCore::RenderObject::setHasCounterNodeMap):
        (WebCore::RenderObject::childrenInline):
        (WebCore::RenderObject::setChildrenInline):
        (WebCore::RenderObject::hasColumns):
        (WebCore::RenderObject::setHasColumns):
        (WebCore::RenderObject::inRenderFlowThread):
        (WebCore::RenderObject::setInRenderFlowThread):
        (WebCore::RenderObject::isAnonymous):
        (WebCore::RenderObject::setIsAnonymous):
        (WebCore::RenderObject::isAnonymousBlock):
        (WebCore::RenderObject::isFloating):
        (WebCore::RenderObject::isPositioned):
        (WebCore::RenderObject::isRelPositioned):
        (WebCore::RenderObject::isText):
        (WebCore::RenderObject::isBox):
        (WebCore::RenderObject::isInline):
        (WebCore::RenderObject::isDragging):
        (WebCore::RenderObject::isReplaced):
        (WebCore::RenderObject::isHorizontalWritingMode):
        (WebCore::RenderObject::hasLayer):
        (WebCore::RenderObject::hasBoxDecorations):
        (WebCore::RenderObject::needsLayout):
        (WebCore::RenderObject::selfNeedsLayout):
        (WebCore::RenderObject::needsPositionedMovementLayout):
        (WebCore::RenderObject::needsPositionedMovementLayoutOnly):
        (WebCore::RenderObject::posChildNeedsLayout):
        (WebCore::RenderObject::needsSimplifiedNormalFlowLayout):
        (WebCore::RenderObject::normalChildNeedsLayout):
        (WebCore::RenderObject::preferredLogicalWidthsDirty):
        (WebCore::RenderObject::hasOverflowClip):
        (WebCore::RenderObject::hasTransform):
        (WebCore::RenderObject::node):
        (WebCore::RenderObject::setPositioned):
        (WebCore::RenderObject::setRelPositioned):
        (WebCore::RenderObject::setFloating):
        (WebCore::RenderObject::setInline):
        (WebCore::RenderObject::setHasBoxDecorations):
        (WebCore::RenderObject::setIsText):
        (WebCore::RenderObject::setIsBox):
        (WebCore::RenderObject::setReplaced):
        (WebCore::RenderObject::setHorizontalWritingMode):
        (WebCore::RenderObject::setHasOverflowClip):
        (WebCore::RenderObject::setHasLayer):
        (WebCore::RenderObject::setHasTransform):
        (WebCore::RenderObject::setHasReflection):
        (WebCore::RenderObject::hasReflection):
        (WebCore::RenderObject::setHasMarkupTruncation):
        (WebCore::RenderObject::hasMarkupTruncation):
        (WebCore::RenderObject::selectionState):
        (WebCore::RenderObject::setSelectionState):
        (WebCore::RenderObject::hasSelectedChildren):
        (WebCore::RenderObject::isMarginBeforeQuirk):
        (WebCore::RenderObject::isMarginAfterQuirk):
        (WebCore::RenderObject::setMarginBeforeQuirk):
        (WebCore::RenderObject::setMarginAfterQuirk):
        (WebCore::RenderObject::everHadLayout):
        (WebCore::RenderObject::RenderObjectBitfields::RenderObjectBitfields):
        (WebCore::RenderObject::RenderObjectBitfields::selectionState):
        (WebCore::RenderObject::RenderObjectBitfields::setSelectionState):
        (WebCore::RenderObject::setNeedsPositionedMovementLayout):
        (WebCore::RenderObject::setNormalChildNeedsLayout):
        (WebCore::RenderObject::setPosChildNeedsLayout):
        (WebCore::RenderObject::setNeedsSimplifiedNormalFlowLayout):
        (WebCore::RenderObject::setPaintBackground):
        (WebCore::RenderObject::setIsDragging):
        (WebCore::RenderObject::setEverHadLayout):
        (WebCore::RenderObject::setNeedsLayout):
        (WebCore::RenderObject::setChildNeedsLayout):
        * rendering/RenderObjectChildList.cpp:
        (WebCore::RenderObjectChildList::removeChildNode):
        * rendering/svg/RenderSVGContainer.cpp:
        (WebCore::RenderSVGContainer::layout):

2011-12-15  Wei Charles  <charles.wei@torchmobile.com.cn>

        [BlackBerry] Upstream BlackBerry porting of pluginView
        https://bugs.webkit.org/show_bug.cgi?id=73397

        Reviewed by Daniel Bates.

        No new tests for now.

        * plugins/blackberry/PluginViewBlackBerry.cpp: Added.

2011-12-15  Joshua Bell  <jsbell@chromium.org>

        IndexedDB: Can't pass DOMStringList to IDBDatabase.transaction()
        https://bugs.webkit.org/show_bug.cgi?id=74452

        Reviewed by Adam Barth.

        V8 code generator generated checks for DOMStringList arguments, then
        deferred to a function that only handled array inputs. This previously
        worked for IndexedDB because it would fall into a now-removed default
        handler.

        Modified storage/indexeddb/transaction-basics.html to test this.

        * bindings/v8/V8Binding.cpp:
        (WebCore::v8ValueToWebCoreDOMStringList):

2011-12-15  Adam Klein  <adamk@chromium.org>

        Make Element::setAttributeInternal inline in an attempt to avoid function call overhead
        https://bugs.webkit.org/show_bug.cgi?id=74638

        Reviewed by Andreas Kling.

        In r102695, I factored common code in setAttribute into
        Element::setAttributeInternal. This may have caused a perf regression
        due to the extra function call, which inlining should eliminate.

        Running Dromaeo locally suggests that this will improve performance
        by ~9% on the "dom-attr element.property = value" test (which assigns
        a value to an element's id).

        * dom/Element.cpp:
        (WebCore::Element::setAttributeInternal):

2011-12-15  Mary Wu  <mary.wu@torchmobile.com.cn>

        Upstream FileSystemBlackBerry.cpp into WebCore/platform/blackberry
        https://bugs.webkit.org/show_bug.cgi?id=74491

        Reviewed by Rob Buis.

        We are using POSIX porting of FileSystem, so here only implement other 
        necessary functions.

        Initial upstream, no new tests.

        * platform/blackberry/FileSystemBlackBerry.cpp: Added.
        (WebCore::homeDirectoryPath):
        (WebCore::fileSystemRepresentation):
        (WebCore::unloadModule):
        (WebCore::openTemporaryFile):

2011-12-15  Adrienne Walker  <enne@google.com>

        [chromium] Clean up unnecessary leaf functions in GraphicsLayerChromium
        https://bugs.webkit.org/show_bug.cgi?id=74140

        Reviewed by James Robinson.

        Tested by existing compositor layout tests.

        This is a follow-on cleanup to r102196, which made some of these
        functions less useful than they had been in the past.

        * platform/graphics/chromium/GraphicsLayerChromium.cpp:
        (WebCore::GraphicsLayerChromium::setContentsOpaque):
        (WebCore::GraphicsLayerChromium::setBackfaceVisibility):
        (WebCore::GraphicsLayerChromium::updateLayerPreserves3D):
        * platform/graphics/chromium/GraphicsLayerChromium.h:

2011-12-15  Kenneth Russell  <kbr@google.com>

        Unreviewed, rolling out r103000.
        http://trac.webkit.org/changeset/103000
        https://bugs.webkit.org/show_bug.cgi?id=74658

        Does not handle text/plain documents correctly.

        * html/parser/HTMLTokenizer.cpp:
        * html/parser/HTMLTokenizer.h:
        * html/parser/HTMLTreeBuilder.cpp:
        * html/parser/HTMLTreeBuilder.h:
        * xml/parser/MarkupTokenizerBase.h:

2011-12-15  James Robinson  <jamesr@chromium.org>

        [chromium] Set the CCLayerTreeHost pointer on LayerChromium instances eagerly
        https://bugs.webkit.org/show_bug.cgi?id=74477

        Reviewed by Kenneth Russell.

        This enforces that the m_layerTreeHost pointer on LayerChromium instances is always up to date, instead of
        lazily setting it in the paintContents loop. There are two invariants:
        1.) If a LayerChromium is the root layer of a CCLayerTreeHost, or is reachable via the children, mask, or
        replica pointers from the root layer of a CCLayerTreeHost, then that LayerChromium's m_layerTreeHost pointer
        refers to that CCLayerTreeHost
        2.) If a LayerChromium is not a root layer or reachable from a root layer of any CCLayerTreeHost, its
        CCLayerTreeHost pointer is nil.

        Covered by several new layout tests in LayerChromiumTest

        * platform/graphics/chromium/LayerChromium.cpp:
        (WebCore::LayerChromium::setLayerTreeHost):
        (WebCore::LayerChromium::setParent):
        (WebCore::LayerChromium::setMaskLayer):
        (WebCore::LayerChromium::setReplicaLayer):
        * platform/graphics/chromium/LayerChromium.h:
        * platform/graphics/chromium/TiledLayerChromium.cpp:
        (WebCore::TiledLayerChromium::createTile):
        * platform/graphics/chromium/cc/CCLayerTreeHost.cpp:
        (WebCore::CCLayerTreeHost::setRootLayer):
        (WebCore::CCLayerTreeHost::paintMaskAndReplicaForRenderSurface):
        (WebCore::CCLayerTreeHost::paintLayerContents):
        * platform/graphics/chromium/cc/CCLayerTreeHost.h:

2011-12-15  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r102652 and r102717.
        http://trac.webkit.org/changeset/102652
        http://trac.webkit.org/changeset/102717
        https://bugs.webkit.org/show_bug.cgi?id=74674

        Broke too many webs. (Requested by kling on #webkit).

        * WebCore.exp.in:

2011-12-15  Anders Carlsson  <andersca@apple.com>

        Lazily create the scrolling coordinator and add a setting for enabling it
        https://bugs.webkit.org/show_bug.cgi?id=74667

        Reviewed by Darin Adler.

        * WebCore.xcodeproj/project.pbxproj:
        Make ScrollingCoordinator.h a private header so it can be used in WebKit.
        * page/Page.cpp:
        (WebCore::Page::Page):
        Don't create the scrolling coordinator.

        (WebCore::Page::~Page):
        Check for a null scrolling coordinator.

        (WebCore::Page::scrollingCoordinator):
        Create the scrolling coordinator lazily.

        * page/Settings.cpp:
        (WebCore::Settings::Settings):
        * page/Settings.h:
        (WebCore::Settings::setScrollingCoordinatorEnabled):
        (WebCore::Settings::scrollingCoordinatorEnabled):
        Add a setting for enabling the scrolling coordinator.

        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::RenderLayerBacking):
        Use a tile cache layer for the main frame when the scrolling coordinator is neabled.

2011-12-15  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Unreviewed. Fix build break when data-transfer-items is enabled.

        * platform/efl/ClipboardEfl.cpp:
        (WebCore::ClipboardEfl::items):
        * platform/efl/ClipboardEfl.h:

2011-12-15  Adam Barth  <abarth@webkit.org>

        <ruby><div><p><rp> parses incorrectly
        https://bugs.webkit.org/show_bug.cgi?id=74668

        Reviewed by Darin Adler.

        This patch updates our implementation to match a change to the HTML5
        specification regarding how <ruby> elements parse.  Previously, <rp>
        and similar tags used to pop the stack up to the <ruby> element.  Now
        the popping does not occur.

        Tests: html5lib/runner.html

        * html/parser/HTMLTreeBuilder.cpp:

2011-12-15  Daniel Sievers  <sievers@chromium.org>

        [Chromium] Avoid strdup() for extra argument when tracing is disabled.
        https://bugs.webkit.org/show_bug.cgi?id=74637

        Reviewed by James Robinson.

        * platform/chromium/TraceEvent.h:
        (WebCore::internal::ScopeTracer::ScopeTracer):

2011-12-15  Rafael Weinstein  <rafaelw@chromium.org>

        [MutationObservers] Add a document-level flag that can trivially be checked to avoid doing unnessary work if mutation observers absent
        https://bugs.webkit.org/show_bug.cgi?id=74641

        Reviewed by Ojan Vafai.

        This patch adds a byte of flags to Document, of which three bits are used to signal if any
        node owned by the document has a Mutation Observer of the given type. This is used to
        reduce the cost of discovering there are none to a single (inlined) method call and bit-check.
        Also, a similar byte of flags which was used to optimize a particular case when mutation observers
        are present has been removed, with the reasoning that we should first focus on minimizing impact on
        the null-case before optimizing particular in-use cases.

        Also, MutationObserverInterestGroup is broken out into its own file (which probably should have happened
        earlier, but now avoids a circular header dependency).

        No tests needed. This patch is just a refactor.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSMutableStyleDeclaration.cpp:
        * dom/CharacterData.cpp:
        * dom/ChildListMutationScope.cpp:
        * dom/Document.cpp:
        (WebCore::Document::Document):
        * dom/Document.h:
        (WebCore::Document::hasMutationObserversOfType):
        (WebCore::Document::hasMutationObservers):
        (WebCore::Document::addMutationObserverTypes):
        * dom/Element.cpp:
        * dom/MutationObserverInterestGroup.cpp: Added.
        (WebCore::MutationObserverInterestGroup::createIfNeeded):
        (WebCore::MutationObserverInterestGroup::MutationObserverInterestGroup):
        (WebCore::MutationObserverInterestGroup::isOldValueRequested):
        (WebCore::MutationObserverInterestGroup::enqueueMutationRecord):
        * dom/MutationObserverInterestGroup.h: Copied from Source/WebCore/dom/WebKitMutationObserver.h.
        (WebCore::MutationObserverInterestGroup::createForChildListMutation):
        (WebCore::MutationObserverInterestGroup::createForCharacterDataMutation):
        (WebCore::MutationObserverInterestGroup::createForAttributesMutation):
        (WebCore::MutationObserverInterestGroup::hasOldValue):
        * dom/Node.cpp:
        (WebCore::Node::didMoveToNewOwnerDocument):
        (WebCore::Node::getRegisteredMutationObserversOfType):
        (WebCore::Node::notifyMutationObserversNodeWillDetach):
        * dom/Node.h:
        * dom/WebKitMutationObserver.cpp:
        (WebCore::WebKitMutationObserver::observe):
        * dom/WebKitMutationObserver.h:

2011-12-15  Adam Barth  <abarth@webkit.org>

        <!DOCTYPE html><pre>&#x0a;&#x0a;A</pre> doesn't parse correctly
        https://bugs.webkit.org/show_bug.cgi?id=74658

        Reviewed by Darin Adler.

        Previously, we handled skipping newlines after <pre> in the tokenizer,
        which isn't how the spec handles them.  Instead, the spec skips them in
        the tree builder.  This isn't usually observable, except in the case of
        an HTML entity.  In that case, the tokenzier sees '&' (because the
        entity hasn't been decoded yet), but the tree builder sees '\n' (the
        decoded entity).  This patch fixes the bug by more closely aligning our
        implementation with the spec.

        Test: html5lib/runner.html

        * html/parser/HTMLTokenizer.cpp:
        (WebCore::HTMLTokenizer::reset):
        (WebCore::HTMLTokenizer::nextToken):
        * html/parser/HTMLTokenizer.h:
        * html/parser/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::ExternalCharacterTokenBuffer::skipAtMostOneLeadingNewline):
        (WebCore::HTMLTreeBuilder::HTMLTreeBuilder):
        (WebCore::HTMLTreeBuilder::processStartTagForInBody):
        (WebCore::HTMLTreeBuilder::processCharacterBuffer):
        * html/parser/HTMLTreeBuilder.h:
        * xml/parser/MarkupTokenizerBase.h:

2011-12-15  Kenneth Russell  <kbr@google.com>

        Unreviewed, rolling out r102989.
        http://trac.webkit.org/changeset/102989
        https://bugs.webkit.org/show_bug.cgi?id=74580

        Caused SHOULD NOT BE REACHED assertions in debug builds.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        (WebCore::CSSPrimitiveValue::operator EBoxAlignment):
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):
        * rendering/RenderDeprecatedFlexibleBox.cpp:
        (WebCore::RenderDeprecatedFlexibleBox::layoutHorizontalBox):
        (WebCore::RenderDeprecatedFlexibleBox::layoutVerticalBox):
        * rendering/RenderFullScreen.cpp:
        (createFullScreenStyle):
        * rendering/style/RenderStyle.h:
        (WebCore::InheritedFlags::boxPack):
        (WebCore::InheritedFlags::setBoxAlign):
        (WebCore::InheritedFlags::setBoxPack):
        (WebCore::InheritedFlags::initialBoxPack):
        * rendering/style/RenderStyleConstants.h:
        * rendering/style/StyleDeprecatedFlexibleBoxData.h:

2011-12-15  Ryosuke Niwa  <rniwa@webkit.org>

        Touch make_name.pl in an attempt to make Qt bots happy.

        * dom/make_names.pl:
        (printNamesHeaderFile):

2011-12-15  Kentaro Hara  <haraken@chromium.org>

        Unreviewed. Rebaselined run-bindings-tests results.

        * bindings/scripts/test/JS/JSFloat64Array.cpp:
        * bindings/scripts/test/JS/JSTestMediaQueryListListener.cpp:
        * bindings/scripts/test/JS/JSTestObj.cpp:

2011-12-15  Luke Macpherson   <macpherson@chromium.org>

        Separate box alignment and box pack values into separate enums.
        https://bugs.webkit.org/show_bug.cgi?id=74580

        Reviewed by Darin Adler.

        No new tests / refactoring only.

        Separating these types cleans up the code by removing several assertions that
        values are in the correct ranges, as this is ensured by the type system.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        (WebCore::CSSPrimitiveValue::operator EBoxPack):
        (WebCore::CSSPrimitiveValue::operator EBoxAlignment):
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):
        * rendering/RenderDeprecatedFlexibleBox.cpp:
        (WebCore::RenderDeprecatedFlexibleBox::layoutHorizontalBox):
        (WebCore::RenderDeprecatedFlexibleBox::layoutVerticalBox):
        * rendering/RenderFullScreen.cpp:
        (createFullScreenStyle):
        * rendering/style/RenderStyle.h:
        (WebCore::InheritedFlags::boxPack):
        (WebCore::InheritedFlags::setBoxAlign):
        (WebCore::InheritedFlags::setBoxPack):
        (WebCore::InheritedFlags::initialBoxPack):
        * rendering/style/RenderStyleConstants.h:
        * rendering/style/StyleDeprecatedFlexibleBoxData.h:

2011-12-15  Kentaro Hara  <haraken@chromium.org>

        REGRESSION(r102663): generate-bindings.pl runs every time
        https://bugs.webkit.org/show_bug.cgi?id=74481

        Reviewed by Adam Barth.

        See the comment #1 of bug 74481 for the cause of this bug.

        This patch fixes generate-bindings.pl so that it generates .h and .cpp files
        even for IDL files that do not need .h and .cpp files. This is just to prevent
        build scripts from trying to generate .h and .cpp files at every build.

        No new tests. No change in behavior.

        * bindings/scripts/generate-bindings.pl:
        (generateEmptyHeaderAndCpp): Generates .h and .cpp files for IDL files
        that do not need .h and .cpp files.
        * bindings/scripts/test/CPP/CPPTestSupplemental.cpp: Added.
        * bindings/scripts/test/CPP/CPPTestSupplemental.h: Added.
        * bindings/scripts/test/GObject/GObjectTestSupplemental.cpp: Added.
        * bindings/scripts/test/GObject/GObjectTestSupplemental.h: Added.
        * bindings/scripts/test/JS/JSTestSupplemental.cpp: Added.
        * bindings/scripts/test/JS/JSTestSupplemental.h: Added.
        * bindings/scripts/test/ObjC/ObjCTestSupplemental.cpp: Added.
        * bindings/scripts/test/ObjC/ObjCTestSupplemental.h: Added.
        * bindings/scripts/test/V8/V8TestSupplemental.cpp: Added.
        * bindings/scripts/test/V8/V8TestSupplemental.h: Added.

2011-12-15  Jarred Nicholls  <jarred@sencha.com>

        Unreviewed build fix. Mac build broken when CSS Filters enabled.
        Needed to move Filter headers out as private headers in WebCore.framework.

        * WebCore.xcodeproj/project.pbxproj:

2011-12-15  Eric Seidel  <eric@webkit.org>

        WebCore has two (disconnected) ways to keep track of updated widgets, should be unified
        https://bugs.webkit.org/show_bug.cgi?id=74367

        Reviewed by Adam Barth.

        It seems the FrameView updateWidgets set is needed for now,
        so just making FrameView::addWidgetToUpdate mark the DOM node
        as needing a widget update and later when it goes to call
        updateWidget() checking first if it needs an update.

        No new tests, just adding an assert.

        * html/HTMLEmbedElement.cpp:
        (WebCore::HTMLEmbedElement::updateWidget):
        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::updateWidget):
        * html/HTMLPlugInImageElement.h:
        (WebCore::HTMLPlugInImageElement::needsWidgetUpdate):
        (WebCore::HTMLPlugInImageElement::setNeedsWidgetUpdate):
        * page/FrameView.cpp:
        (WebCore::FrameView::addWidgetToUpdate):
        (WebCore::FrameView::updateWidget):

2011-12-15  Alexandru Chiculita  <achicu@adobe.com>

        Windows project file is broken. It has a missing </File> enclosing tag
        https://bugs.webkit.org/show_bug.cgi?id=74632

        Reviewed by Anders Carlsson.

        No new tests, just fixing the project file.

        * WebCore.vcproj/WebCore.vcproj:

2011-12-15  Adam Barth  <abarth@webkit.org>

        <table><tr><td><svg><desc><td> parses incorrectly
        https://bugs.webkit.org/show_bug.cgi?id=68106

        Reviewed by Eric Seidel.

        This patch updates our implementation of the HTML5 parser to account
        for recent changes in the spec.  The main change in this patch is to
        remove the "in foreign content" state from the tree builder.  Rather
        than maintaining this as a separate state, the parser now introspects
        on the stack of open elements to determine whether the parser is in
        foriegn content.  In the process, I've deleted some now-unused
        machinery in the tree builder.

        Tested by the html5lib LayoutTests.  These tests show the progression
        in our spec compliance.

        * html/parser/HTMLElementStack.cpp:
        * html/parser/HTMLElementStack.h:
        * html/parser/HTMLTreeBuilder.cpp:
        * html/parser/HTMLTreeBuilder.h:
        * mathml/mathattrs.in:

2011-12-15  Ryosuke Niwa  <rniwa@webkit.org>

        m_hasCounterNodeMap and m_everHadLayout should be private to RenderObject
        https://bugs.webkit.org/show_bug.cgi?id=74645

        Reviewed by Eric Seidel.

        Made them private and added getters and setters as needed.

        * rendering/RenderCounter.cpp:
        (WebCore::makeCounterNode):
        (WebCore::RenderCounter::destroyCounterNodes):
        (WebCore::updateCounters):
        (WebCore::RenderCounter::rendererStyleChanged):
        (showCounterRendererTree):
        * rendering/RenderFlowThread.cpp:
        (WebCore::RenderFlowThread::layout):
        * rendering/RenderObject.h:
        (WebCore::RenderObject::hasCounterNodeMap):
        (WebCore::RenderObject::setHasCounterNodeMap):
        (WebCore::RenderObject::everHadLayout):
        * rendering/svg/RenderSVGForeignObject.cpp:
        (WebCore::RenderSVGForeignObject::layout):
        * rendering/svg/RenderSVGImage.cpp:
        (WebCore::RenderSVGImage::layout):
        * rendering/svg/RenderSVGResourceContainer.cpp:
        (WebCore::RenderSVGResourceContainer::layout):
        * rendering/svg/RenderSVGResourceMarker.cpp:
        (WebCore::RenderSVGResourceMarker::layout):
        * rendering/svg/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::layout):
        * rendering/svg/RenderSVGShape.cpp:
        (WebCore::RenderSVGShape::layout):
        * rendering/svg/RenderSVGText.cpp:
        (WebCore::RenderSVGText::layout):

2011-12-15  Vsevolod Vlasov  <vsevik@chromium.org>

        Not able to navigate the Resource tab options properly with arrow keys after adding the sticky-notes.
        https://bugs.webkit.org/show_bug.cgi?id=72013

        Reviewed by Pavel Feldman.

        * inspector/front-end/DatabaseQueryView.js:
        (WebInspector.DatabaseQueryView):
        (WebInspector.DatabaseQueryView.prototype._messagesClicked):
        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.DatabaseTreeElement.prototype.onexpand):

2011-12-15  Anders Carlsson  <andersca@apple.com>

        Add ScrollingCoordinator class and ENABLE_THREADED_SCROLLING define
        https://bugs.webkit.org/show_bug.cgi?id=74639

        Reviewed by Andreas Kling.

        Add a ScrollingCoordinator class and make it a member of Page. Tear it down
        when the page goes away.

        * WebCore.xcodeproj/project.pbxproj:
        * page/Page.cpp:
        (WebCore::Page::Page):
        (WebCore::Page::~Page):
        * page/Page.h:
        (WebCore::Page::scrollingCoordinator):
        * page/ScrollingCoordinator.cpp: Added.
        (WebCore::ScrollingCoordinator::create):
        (WebCore::ScrollingCoordinator::ScrollingCoordinator):
        (WebCore::ScrollingCoordinator::~ScrollingCoordinator):
        (WebCore::ScrollingCoordinator::pageDestroyed):
        * page/ScrollingCoordinator.h: Added.

2011-12-15  Kenneth Russell  <kbr@google.com>

        Rename WEBKIT_lose_context to WEBKIT_WEBGL_lose_context
        https://bugs.webkit.org/show_bug.cgi?id=71870

        Reviewed by James Robinson.

        Re-landing after original commit was rolled out.

        Rename largely done with do-webcore-rename with a couple of
        necessary manual fixups. Ran WebGL layout tests.

        * CMakeLists.txt:
        * DerivedSources.make:
        * DerivedSources.pri:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSWebGLRenderingContextCustom.cpp:
        (WebCore::toJS):
        * bindings/v8/custom/V8WebGLRenderingContextCustom.cpp:
        (WebCore::toV8Object):
        * html/canvas/WebGLExtension.h:
        * html/canvas/WebGLLoseContext.cpp: Copied from Source/WebCore/html/canvas/WebKitLoseContext.cpp.
        (WebCore::WebGLLoseContext::WebGLLoseContext):
        (WebCore::WebGLLoseContext::~WebGLLoseContext):
        (WebCore::WebGLLoseContext::getName):
        (WebCore::WebGLLoseContext::create):
        (WebCore::WebGLLoseContext::loseContext):
        (WebCore::WebGLLoseContext::restoreContext):
        * html/canvas/WebGLLoseContext.h: Copied from Source/WebCore/html/canvas/WebKitLoseContext.h.
        * html/canvas/WebGLLoseContext.idl: Copied from Source/WebCore/html/canvas/WebKitLoseContext.idl.
        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::getExtension):
        (WebCore::WebGLRenderingContext::getSupportedExtensions):
        (WebCore::WebGLRenderingContext::maybeRestoreContext):
        * html/canvas/WebGLRenderingContext.h:
        * html/canvas/WebKitLoseContext.cpp: Removed.
        * html/canvas/WebKitLoseContext.h: Removed.
        * html/canvas/WebKitLoseContext.idl: Removed.

2011-12-15  Brady Eidson  <beidson@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=74631
        HTMLMediaElement should not register for document activation callbacks as it doesn't use them

        Reviewed by Eric Carlson.

        No new tests. (No behavior change, pruning useless code)

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::HTMLMediaElement):
        (WebCore::HTMLMediaElement::~HTMLMediaElement):
        (WebCore::HTMLMediaElement::willMoveToNewOwnerDocument):
        (WebCore::HTMLMediaElement::didMoveToNewOwnerDocument):

2011-12-15  Eric Carlson  <eric.carlson@apple.com>

        Text tracks should be treated differently according to their kind
        https://bugs.webkit.org/show_bug.cgi?id=72547

        Reviewed by Sam Weinig.

        Tests: media/track/track-default-attribute.html
               media/track/track-mode-not-changed-by-new-track.html
               media/track/track-mode-triggers-loading.html

        * html/HTMLAudioElement.cpp:
        (WebCore::HTMLAudioElement::HTMLAudioElement): Add "createdByParser" parameter.
        (WebCore::HTMLAudioElement::create): Ditto.
        (WebCore::HTMLAudioElement::createForJSConstructor): Deal with constructor change.
        * html/HTMLAudioElement.h:

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::HTMLMediaElement): Add "createdByParser" parameter. Initialize m_parsingInProgress.
        (WebCore::HTMLMediaElement::finishParsingChildren): Clear m_parsingInProgress. Schedule track
            loading if necessary.
        (WebCore::HTMLMediaElement::loadTimerFired): Call configureTextTracks not call scheduleLoad, 
            it just schedules the load timer again.
        (WebCore::HTMLMediaElement::prepareForLoad): Add all non-disabled track elements to a vector
            so we can prevent the media element's readyState from reaching HAVE_METADATA until the
            tracks are ready.
        (WebCore::HTMLMediaElement::textTracksAreReady): New. Return false unless all tracks that were
            not disabled when loading started have loaded or failed.
        (WebCore::HTMLMediaElement::textTrackReadyStateChanged): Call setReadyState when a track is
            stops loading.
        (WebCore::HTMLMediaElement::textTrackModeChanged): Trigger <track> loading when the mode
            changes to hidden or showing for the first time.
        (WebCore::HTMLMediaElement::setReadyState): Do not advance to HAVE_METADATA or higher while
            track elements are loading.
        (WebCore::HTMLMediaElement::addTrack): Removed.
        (WebCore::HTMLMediaElement::showingTrackWithSameKind): New.
        (WebCore::HTMLMediaElement::trackWasAdded):
        (WebCore::HTMLMediaElement::trackWillBeRemoved): Flag a track as unconfigured so it will be
            reconfigured if it is added to another element.
        (WebCore::HTMLMediaElement::userIsInterestedInThisLanguage): New.
        (WebCore::HTMLMediaElement::userIsInterestedInThisTrack): New. Consider user preferences.
        (WebCore::HTMLMediaElement::configureTextTrack): New. Configure a track as per the user's preferences.
        (WebCore::HTMLMediaElement::configureTextTracks): New. Configure all track elements.
        * html/HTMLMediaElement.h:
        * html/HTMLMediaElement.h:

        * html/HTMLTagNames.in: Add constructorNeedsCreatedByParser to audio and video.

        * html/HTMLTrackElement.cpp:
        (WebCore::HTMLTrackElement::HTMLTrackElement): Initialize m_hasBeenConfigured.
        * html/HTMLTrackElement.h:
        (WebCore::HTMLTrackElement::hasBeenConfigured):
        (WebCore::HTMLTrackElement::setHasBeenConfigured):

        * html/HTMLVideoElement.cpp:
        (WebCore::HTMLVideoElement::HTMLVideoElement): Add "createdByParser" parameter.
        (WebCore::HTMLVideoElement::create): Ditto.
        * html/HTMLVideoElement.h:

        * html/TextTrack.cpp:
        (WebCore::TextTrack::TextTrack): Initialize m_mode to DISABLED, not HIDDEN. Initialize m_showingByDefault.
        (WebCore::TextTrack::setMode): Clear the "showing by default" flag when a track's mode is
            explicitly set to SHOWING.
        (WebCore::TextTrack::mode): Return SHOWING whenever the "showing by default" flag is set.
        * html/TextTrack.h:
        (WebCore::TextTrack::showingByDefault):
        (WebCore::TextTrack::setShowingByDefault):

        * html/TextTrackCue.cpp:
        (WebCore::TextTrackCue::isActive): Return false if a cue has no track, or if its track is disabled.
        (WebCore::TextTrackCue::setIsActive): Don't enable a cue if it has no track, or if its track
            is disabled.

2011-12-15  Brady Eidson  <beidson@apple.com>

        Unreviewed, rolling out r102829.
        http://trac.webkit.org/changeset/102829
        https://bugs.webkit.org/show_bug.cgi?id=74533

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

        * html/HTMLPlugInImageElement.cpp:
        (WebCore::HTMLPlugInImageElement::HTMLPlugInImageElement):
        (WebCore::HTMLPlugInImageElement::willMoveToNewOwnerDocument):
        (WebCore::HTMLPlugInImageElement::didMoveToNewOwnerDocument):
        (WebCore::HTMLPlugInImageElement::documentWillBecomeInactive):
        (WebCore::HTMLPlugInImageElement::documentDidBecomeActive):
        * html/HTMLPlugInImageElement.h:

2011-12-15  James Simonsen  <simonjam@chromium.org>

        [Navigation Timing] Use monotonicallyIncreasingTime() instead of currentTime()
        https://bugs.webkit.org/show_bug.cgi?id=58354

        Reviewed by Pavel Feldman.

        No new tests. Relies on existing webtiming-* tests.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/Document.cpp: Use monotonic times.
        (WebCore::Document::setReadyState):
        (WebCore::Document::finishedParsing):
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::didFinishLoadingImpl): Convert monotonicFinishTime to wall time if needed.
        * inspector/InspectorResourceAgent.cpp:
        (WebCore::buildObjectForTiming): Convert monotonic requestTime to wall time.
        (WebCore::buildObjectForResourceResponse): Plumbing for above.
        (WebCore::buildObjectForCachedResource): Ditto.
        (WebCore::InspectorResourceAgent::willSendRequest): Ditto.
        (WebCore::InspectorResourceAgent::didReceiveResponse): Ditto.
        (WebCore::InspectorResourceAgent::didLoadResourceFromMemoryCache): Ditto.
        * loader/DocumentLoadTiming.cpp: Added.
        (WebCore::DocumentLoadTiming::DocumentLoadTiming):
        (WebCore::DocumentLoadTiming::setNavigationStart): Determine reference time and root reference time.
        (WebCore::DocumentLoadTiming::addRedirect): Moved logic from MainResourceLoader.
        (WebCore::DocumentLoadTiming::convertMonotonicTimeToDocumentTime): Helper to compute wall time from monotonic time.
        * loader/DocumentLoadTiming.h: Turned into class. Made times monotonic.
        (WebCore::DocumentLoadTiming::setUnloadEventStart):
        (WebCore::DocumentLoadTiming::setUnloadEventEnd):
        (WebCore::DocumentLoadTiming::setRedirectStart):
        (WebCore::DocumentLoadTiming::setRedirectEnd):
        (WebCore::DocumentLoadTiming::setFetchStart):
        (WebCore::DocumentLoadTiming::setResponseEnd):
        (WebCore::DocumentLoadTiming::setLoadEventStart):
        (WebCore::DocumentLoadTiming::setLoadEventEnd):
        (WebCore::DocumentLoadTiming::setHasSameOriginAsPreviousDocument):
        (WebCore::DocumentLoadTiming::navigationStart):
        (WebCore::DocumentLoadTiming::unloadEventStart):
        (WebCore::DocumentLoadTiming::unloadEventEnd):
        (WebCore::DocumentLoadTiming::redirectStart):
        (WebCore::DocumentLoadTiming::redirectEnd):
        (WebCore::DocumentLoadTiming::redirectCount):
        (WebCore::DocumentLoadTiming::fetchStart):
        (WebCore::DocumentLoadTiming::responseEnd):
        (WebCore::DocumentLoadTiming::loadEventStart):
        (WebCore::DocumentLoadTiming::loadEventEnd):
        (WebCore::DocumentLoadTiming::hasCrossOriginRedirect):
        (WebCore::DocumentLoadTiming::hasSameOriginAsPreviousDocument):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::stopLoading):
        (WebCore::FrameLoader::commitProvisionalLoad):
        (WebCore::FrameLoader::continueLoadAfterWillSubmitForm):
        (WebCore::FrameLoader::loadProvisionalItemFromCachedPage):
        * loader/MainResourceLoader.cpp:
        (WebCore::MainResourceLoader::continueAfterNavigationPolicy):
        (WebCore::MainResourceLoader::willSendRequest): Moved logic to DocumentLoadTiming.
        (WebCore::MainResourceLoader::didReceiveData): Use monotonic time.
        (WebCore::MainResourceLoader::didFinishLoading): Ditto.
        (WebCore::MainResourceLoader::load):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::dispatchLoadEvent):
        * page/DOMWindow.h: Removed dispatchTimedEvent. It doesn't really help in the new model.
        * page/PerformanceNavigation.cpp:
        (WebCore::PerformanceNavigation::redirectCount):
        * page/PerformanceTiming.cpp: Removed skew correction code. This should never happen now.
        (WebCore::PerformanceTiming::navigationStart):
        (WebCore::PerformanceTiming::unloadEventStart):
        (WebCore::PerformanceTiming::unloadEventEnd):
        (WebCore::PerformanceTiming::redirectStart):
        (WebCore::PerformanceTiming::redirectEnd):
        (WebCore::PerformanceTiming::fetchStart):
        (WebCore::PerformanceTiming::responseEnd):
        (WebCore::PerformanceTiming::domLoading):
        (WebCore::PerformanceTiming::domInteractive):
        (WebCore::PerformanceTiming::domContentLoadedEventStart):
        (WebCore::PerformanceTiming::domContentLoadedEventEnd):
        (WebCore::PerformanceTiming::domComplete):
        (WebCore::PerformanceTiming::loadEventStart):
        (WebCore::PerformanceTiming::loadEventEnd):
        (WebCore::PerformanceTiming::resourceLoadTimeRelativeToAbsolute): Used for ResourceLoadTiming.
        (WebCore::PerformanceTiming::monotonicTimeToIntegerMilliseconds): Used for DocumentTiming and DocumentLoadTiming.
        * page/PerformanceTiming.h:
        * platform/network/ResourceLoadTiming.cpp:
        (WebCore::ResourceLoadTiming::convertResourceLoadTimeToDocumentTime):
        * platform/network/ResourceLoadTiming.h: Added helper function to convert to wall times. Added instructions for use.

2011-12-15  Martin Robinson  <mrobinson@igalia.com>

        plugin crash

        [GTK] Plugins sometimes crash WebKitGTK+ with Gdk-CRITICAL **: gdk_window_get_toplevel: assertion `GDK_IS_WINDOW (window)' failed
        https://bugs.webkit.org/show_bug.cgi?id=73719

        Reviewed by Philippe Normand.

        No new tests. It's difficult to test or reproduce this exact situation
        as it only occurs when running plugins under nspluginwrapper.

        * plugins/gtk/PluginViewGtk.cpp:
        (WebCore::PluginView::platformGetValue): Properly handle when the plugin tries to
        get the window value when the GtkSocket is no longer realized.

2011-12-15  Martin Kosiba  <mkosiba@google.com>

        Fix find on web pages with -webkit-user-select: none for Chromium
        https://bugs.webkit.org/show_bug.cgi?id=72281

        Reviewed by Ryosuke Niwa.

        Adding findStringAndScrollToVisible to Editor. This new method returns
        the new match as a range rather than modify the active selection.

        Test: editing/text-iterator/findString-selection-disabled.html

        * editing/Editor.cpp:
        (WebCore::Editor::findStringAndScrollToVisible):
        * editing/Editor.h:

2011-12-14  Anders Carlsson  <andersca@apple.com>

        Add WTF::Function to wtf/Forward.h
        https://bugs.webkit.org/show_bug.cgi?id=74576

        Reviewed by Adam Roben.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateImplementation):
        Add a JSC:: qualifier to the Function flags to avoid ambiguities.

2011-12-15  Julien Chaffraix  <jchaffraix@webkit.org>

        Hardware-backed renderLayer could avoid repainting during a positioned movement layout
        https://bugs.webkit.org/show_bug.cgi?id=74370

        Reviewed by Simon Fraser.

        Tests: compositing/absolute-position-changed-in-composited-layer.html
               compositing/absolute-position-changed-with-composited-parent-layer.html
               compositing/fixed-position-changed-in-composited-layer.html
               compositing/fixed-position-changed-within-composited-parent-layer.html

        To be able to properly skip repainting after a positioned movement layout only, we
        needed to add more state to the current |setNeedsFullRepaint| method. As part of that
        we refactored the callers and internal fields to better match the new meaning.

        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::styleDidChange):
        Explicitely gave the RepaintStatus to setRepaintStatus.

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::RenderLayer):
        (WebCore::RenderLayer::removeOnlyThisLayer):
        Updated those function after the renamings.

        (WebCore::RenderLayer::updateLayerPositions):
        Ditto. Also added a sholdRepaintAfterLayout check.

        (WebCore::RenderLayer::shouldRepaintAfterLayout):
        Heart of the optimization, if we just did a positioned movement layout of composited RenderLayer,
        then don't repaint. All the other cases should still trigger a repaint.

        * rendering/RenderLayer.h:
        (WebCore::RenderLayer::setRepaintStatus):
        Renamed setNeedsFullRepaint to setRepaintStatus. Also added a new enum RepaintStatus.

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::setLayerNeedsFullRepaint):
        Updated after the renamings.

        (WebCore::RenderObject::setLayerNeedsFullRepaintForPositionedMovementLayout):
        New method that pass a new value to the RenderLayer.

        * rendering/RenderObject.h:
        (WebCore::RenderObject::setNeedsPositionedMovementLayout):
        Switched the call to the dedicated method.

2011-12-15  Antti Koivisto  <antti@apple.com>

        Don't invoke CSSStyleSelector::pushParent before Text::recalcTextStyle
        https://bugs.webkit.org/show_bug.cgi?id=74575

        Reviewed by Darin Adler.
        
        Text::recalcTextStyle never enters the style selector so pushing the state is not necessary

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

2011-12-15  Chris Marrin  <cmarrin@apple.com>

        Fixed error in Target.pri.

        Unreviewed.

        * Target.pri:

2011-12-15  Alexander Pavlov  <apavlov@chromium.org>

        Web Inspector: #hex colors are not highlighted in CSS files
        https://bugs.webkit.org/show_bug.cgi?id=74570

        Reviewed by Pavel Feldman.

        Drive by: highlight color keywords as colors, not as keywords.

        * inspector/front-end/CSSKeywordCompletions.js:
        (WebInspector.CSSKeywordCompletions.colors):
        * inspector/front-end/SourceCSSTokenizer.js:
        (WebInspector.SourceCSSTokenizer):
        (WebInspector.SourceCSSTokenizer.prototype.nextToken):
        * inspector/front-end/SourceCSSTokenizer.re2js:

2011-12-14  Chris Marrin  <cmarrin@apple.com>

        Hardware acceleration of W3C Filter Effects
        https://bugs.webkit.org/show_bug.cgi?id=68479

        Reviewed by Simon Fraser.

        Move FilterOperation(s) to platform/graphics/filters so it can be used to pass filter information 
        down to GraphicsLayer for hardware acceleration. This leaves the CustomFilterOperation subclass in
        rendering/style since it has dependencies outside platform. Some part of that class will
        eventually need to be down in platform.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/filters/FilterOperation.cpp: Renamed from Source/WebCore/rendering/style/FilterOperation.cpp.
        (WebCore::BasicColorMatrixFilterOperation::blend):
        (WebCore::BasicColorMatrixFilterOperation::passthroughAmount):
        (WebCore::BasicComponentTransferFilterOperation::blend):
        (WebCore::BasicComponentTransferFilterOperation::passthroughAmount):
        (WebCore::GammaFilterOperation::blend):
        (WebCore::BlurFilterOperation::blend):
        (WebCore::DropShadowFilterOperation::blend):
        * platform/graphics/filters/FilterOperation.h: Renamed from Source/WebCore/rendering/style/FilterOperation.h.
        (WebCore::FilterOperation::~FilterOperation):
        (WebCore::FilterOperation::operator!=):
        (WebCore::FilterOperation::blend):
        (WebCore::FilterOperation::getOperationType):
        (WebCore::FilterOperation::isSameType):
        (WebCore::FilterOperation::FilterOperation):
        (WebCore::PassthroughFilterOperation::create):
        (WebCore::PassthroughFilterOperation::operator==):
        (WebCore::PassthroughFilterOperation::PassthroughFilterOperation):
        (WebCore::ReferenceFilterOperation::create):
        (WebCore::ReferenceFilterOperation::reference):
        (WebCore::ReferenceFilterOperation::operator==):
        (WebCore::ReferenceFilterOperation::ReferenceFilterOperation):
        (WebCore::BasicColorMatrixFilterOperation::create):
        (WebCore::BasicColorMatrixFilterOperation::amount):
        (WebCore::BasicColorMatrixFilterOperation::operator==):
        (WebCore::BasicColorMatrixFilterOperation::BasicColorMatrixFilterOperation):
        (WebCore::BasicComponentTransferFilterOperation::create):
        (WebCore::BasicComponentTransferFilterOperation::amount):
        (WebCore::BasicComponentTransferFilterOperation::operator==):
        (WebCore::BasicComponentTransferFilterOperation::BasicComponentTransferFilterOperation):
        (WebCore::GammaFilterOperation::create):
        (WebCore::GammaFilterOperation::amplitude):
        (WebCore::GammaFilterOperation::exponent):
        (WebCore::GammaFilterOperation::offset):
        (WebCore::GammaFilterOperation::operator==):
        (WebCore::GammaFilterOperation::GammaFilterOperation):
        (WebCore::BlurFilterOperation::create):
        (WebCore::BlurFilterOperation::stdDeviationX):
        (WebCore::BlurFilterOperation::stdDeviationY):
        (WebCore::BlurFilterOperation::operator==):
        (WebCore::BlurFilterOperation::BlurFilterOperation):
        (WebCore::SharpenFilterOperation::create):
        (WebCore::SharpenFilterOperation::amount):
        (WebCore::SharpenFilterOperation::radius):
        (WebCore::SharpenFilterOperation::threshold):
        (WebCore::SharpenFilterOperation::operator==):
        (WebCore::SharpenFilterOperation::SharpenFilterOperation):
        (WebCore::DropShadowFilterOperation::create):
        (WebCore::DropShadowFilterOperation::x):
        (WebCore::DropShadowFilterOperation::y):
        (WebCore::DropShadowFilterOperation::stdDeviation):
        (WebCore::DropShadowFilterOperation::color):
        (WebCore::DropShadowFilterOperation::operator==):
        (WebCore::DropShadowFilterOperation::DropShadowFilterOperation):
        * platform/graphics/filters/FilterOperations.cpp: Renamed from Source/WebCore/rendering/style/FilterOperations.cpp.
        (WebCore::FilterOperations::FilterOperations):
        (WebCore::FilterOperations::operator==):
        (WebCore::FilterOperations::operationsMatch):
        * platform/graphics/filters/FilterOperations.h: Renamed from Source/WebCore/rendering/style/FilterOperations.h.
        (WebCore::FilterOperations::operator!=):
        (WebCore::FilterOperations::clear):
        (WebCore::FilterOperations::operations):
        (WebCore::FilterOperations::size):
        (WebCore::FilterOperations::at):

2011-12-15  Igor Oliveira  <igor.oliveira@openbossa.org>

        [Qt] Support requestAnimationFrame API
        https://bugs.webkit.org/show_bug.cgi?id=74528

        Add necessary files to Target.pri when enabling requestAnimationFrame option.

        Reviewed by Kenneth Rohde Christiansen.

        * Target.pri:

2011-12-15  Otto Cheung  <ocheung@rim.com>

        Removing BlackBerryCookieCache from the build system
        https://bugs.webkit.org/show_bug.cgi?id=74318

        Reviewed by Rob Buis.

        Removing any references to BlackBerryCookieCache in files that are upstreamed.

        We are removing the BlackBerryCookieCache because the CookieManager cookie structure has been
        refactored to have a similar structure to the cache. Since the read speeds in both structures
        are similar, we no longer need the cache to speed up read performance.

        No new tests, this patch by itself will not work. This patch is only removing
        the references to BlackBerryCookieCache in files that are upstreamed.

        * PlatformBlackBerry.cmake:
        * platform/network/blackberry/NetworkJob.cpp:
        (WebCore::NetworkJob::handleNotifyHeaderReceived):

2011-12-15  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        [Qt] Mobile theme improvements

        Rubberstamped by Simon Hausmann.

        - Invert the gradient on the checkboxes
        - Make the buttons on the multi select combobox work on floats
        - Mini cleanups

        * platform/qt/RenderThemeQtMobile.cpp:
        (WebCore::StylePainterMobile::drawCheckableBackground):
        (WebCore::StylePainterMobile::drawMultipleComboButton):
        (WebCore::StylePainterMobile::getButtonImageSize):
        (WebCore::StylePainterMobile::drawComboBox):

2011-12-15  Peter Rybin  <peter.rybin@gmail.com>

        Web Inspector: CodeGeneratorInspector.py convert script conditions to precompiler #ifs
        https://bugs.webkit.org/show_bug.cgi?id=74534

        Reviewed by Pavel Feldman.

        Generator is rewritten to add #if's to output.

        * inspector/CodeGeneratorInspector.py:
        (DomainNameFixes.get_fixed_data.Res.get_guard.Guard.generate_open):
        (DomainNameFixes.get_fixed_data.Res.get_guard.Guard):
        (DomainNameFixes.get_fixed_data.Res.get_guard.Guard.generate_close):
        (DomainNameFixes.get_fixed_data.Res):
        (DomainNameFixes.get_fixed_data.Res.get_guard):
        (Generator.go):
        (Generator.process_event):
        (Generator.process_command):
        (Generator.process_types):

2011-12-15  Jesus Sanchez-Palencia  <jesus.palencia@openbossa.org>

        [Qt][WK2] Setting Download as action for navigation request crashes WebProcess
        https://bugs.webkit.org/show_bug.cgi?id=74526

        Reviewed by Simon Hausmann.

        Adding checks for networkcontext and networkAccessManager
        and return true in case they don't exist, following the same
        logic as if the CookieJar doesn't exist.

        * platform/qt/ThirdPartyCookiesQt.cpp:
        (WebCore::thirdPartyCookiePolicyPermits):

2011-12-14  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Get rid of layering violation in PluginViewQt

        PluginViewQt has a layering violation in relying on QWebPagePrivate for
        the check if running under DRT. We remove this and add a specific flag
        in the PluginView for this check, enabled from DRTSupport. This isn't
        pretty, but an improvement over what's currently there.

        Reviewed by Simon Hausmann.

        * plugins/PluginView.h:
        * plugins/qt/PluginViewQt.cpp:
        (WebCore::PluginView::updatePluginWidget):
        (WebCore::setXKeyEventSpecificFields):

2011-12-14  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Console should show network messages origins.
        https://bugs.webkit.org/show_bug.cgi?id=74521

        Reviewed by Pavel Feldman.

        * inspector/front-end/ConsoleMessage.js:
        (WebInspector.ConsoleMessageImpl.prototype._formatMessage):

2011-12-15  Rakesh KN  <rakesh.kn@motorola.com>

        "user-select none" causes selection to incorrectly escape from clicked container
        https://bugs.webkit.org/show_bug.cgi?id=57289

        Reviewed by Ryosuke Niwa.

        Not selecting the nearest word from the target node if target node has -webkit-user-select:none

        Test: fast/events/mouse-double-triple-click-should-not-select-next-node-for-user-select-none.html

        * page/EventHandler.cpp:
        (WebCore::EventHandler::updateSelectionForMouseDownDispatchingSelectStart):
        If target node has webkit-user-select:none style then do not update the selection.

2011-12-13  Andrey Kosyakov  <caseq@chromium.org>

        Web Inspector: Generated HAR is missing pages.startedDateTime
        https://bugs.webkit.org/show_bug.cgi?id=74188

        Reviewed by Pavel Feldman.

        * inspector/front-end/HAREntry.js:
        (WebInspector.HARLog.prototype._buildPages):
        * inspector/front-end/NetworkLog.js:
        (WebInspector.NetworkLog):
        (WebInspector.NetworkLog.prototype.get mainResourceStartTime):
        (WebInspector.NetworkLog.prototype._mainFrameNavigated):
        * inspector/front-end/NetworkPanel.js:
        (WebInspector.NetworkLogView.prototype._updateSummaryBar):

2011-12-15  Kenichi Ishibashi  <bashi@chromium.org>

        Supports Unicode variation selector
        https://bugs.webkit.org/show_bug.cgi?id=50999

        Reviewed by Nikolas Zimmermann.

        Adds SimpleFontData::updateGlyphWithVariationSelector() which substitutes the
        glyph in question based on the selector. WidthIterator::advance() calls it
        when an unicode variation selector follows the character.

        Test: fast/text/unicode-variation-selector.html

        * platform/graphics/SimpleFontData.h: Added updateGlyphWithVariationSelector().
        * platform/graphics/SurrogatePairAwareTextIterator.cpp:
        (WebCore::isUnicodeBMPVariationSelector): Added.
        (WebCore::isUnicodeSupplementaryVariationSelector): Added.
        (WebCore::SurrogatePairAwareTextIterator::hasTrailingVariationSelector): Added.
        * platform/graphics/SurrogatePairAwareTextIterator.h:
        * platform/graphics/WidthIterator.cpp:
        (WebCore::WidthIterator::advance): Changed to detect variation selectors.
        * platform/graphics/chromium/SimpleFontDataChromiumWin.cpp:
        (WebCore::SimpleFontData::updateGlyphWithVariationSelector): Added.
        * platform/graphics/chromium/SimpleFontDataLinux.cpp:
        (WebCore::SimpleFontData::updateGlyphWithVariationSelector): Ditto.
        * platform/graphics/freetype/SimpleFontDataFreeType.cpp:
        (WebCore::SimpleFontData::updateGlyphWithVariationSelector): Ditto.
        * platform/graphics/mac/SimpleFontDataMac.mm:
        (WebCore::decomposeToUTF16): Ditto.
        (WebCore::SimpleFontData::updateGlyphWithVariationSelector): Ditto.
        * platform/graphics/pango/SimpleFontDataPango.cpp:
        (WebCore::SimpleFontData::updateGlyphWithVariationSelector): Ditto.
        * platform/graphics/qt/SimpleFontDataQt.cpp:
        (WebCore::SimpleFontData::updateGlyphWithVariationSelector): Ditto.
        * platform/graphics/win/SimpleFontDataWin.cpp:
        (WebCore::SimpleFontData::updateGlyphWithVariationSelector): Ditto.
        * platform/graphics/wince/SimpleFontDataWinCE.cpp:
        (WebCore::SimpleFontData::updateGlyphWithVariationSelector): Ditto.
        * platform/graphics/wx/SimpleFontDataWx.cpp:
        (WebCore::SimpleFontData::updateGlyphWithVariationSelector): Ditto.

2011-12-15  Alexander Pavlov  <apavlov@chromium.org>

        [v8] Expose the "filter" property in V8CSSStyleDeclaration
        https://bugs.webkit.org/show_bug.cgi?id=73426

        Reviewed by Adam Barth.

        Test: fast/css/style-enumerate-properties.html

        The "filter" CSS property used to be masked to be compliant with JSC, but JSC has supported
        this property for quite a while.

        * bindings/v8/custom/V8CSSStyleDeclarationCustom.cpp:
        (WebCore::hasCSSPropertyNamePrefix): clean up WTF prefixes
        (WebCore::cssPropertyInfo): remove the "wasFilter" flag
        (WebCore::V8CSSStyleDeclaration::namedPropertyEnumerator): remove the "filter" check
        (WebCore::V8CSSStyleDeclaration::namedPropertyGetter): return the "filter" value as v8String

2011-12-15  Hajime Morrita  <morrita@chromium.org>

        Unreviewed build fix attempt for Chromium Mac.

        * page/PerformanceTiming.h:

2011-12-15  Alexander Pavlov  <apavlov@chromium.org>

        Unreviewed, build fix after r102906 (poor merge).

        * inspector/front-end/ProfileView.js:
        (WebInspector.CPUProfileType.prototype.buttonClicked):

2011-12-15  Vsevolod Vlasov  <vsevik@chromium.org>

        Unreviewed revert of r102696 ([Navigation Timing] Use monotonicallyIncreasingTime() instead of currentTime()).
        Breaks inspector's network panel timeline on chromium.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/Document.cpp:
        (WebCore::Document::setReadyState):
        (WebCore::Document::finishedParsing):
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::didFinishLoadingImpl):
        * inspector/InspectorResourceAgent.cpp:
        (WebCore::buildObjectForTiming):
        (WebCore::buildObjectForResourceResponse):
        (WebCore::buildObjectForCachedResource):
        (WebCore::InspectorResourceAgent::willSendRequest):
        (WebCore::InspectorResourceAgent::didReceiveResponse):
        (WebCore::InspectorResourceAgent::didLoadResourceFromMemoryCache):
        * loader/DocumentLoadTiming.cpp: Removed.
        * loader/DocumentLoadTiming.h:
        (WebCore::DocumentLoadTiming::DocumentLoadTiming):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::stopLoading):
        (WebCore::FrameLoader::commitProvisionalLoad):
        (WebCore::FrameLoader::continueLoadAfterWillSubmitForm):
        (WebCore::FrameLoader::loadProvisionalItemFromCachedPage):
        * loader/MainResourceLoader.cpp:
        (WebCore::MainResourceLoader::continueAfterNavigationPolicy):
        (WebCore::MainResourceLoader::willSendRequest):
        (WebCore::MainResourceLoader::didReceiveData):
        (WebCore::MainResourceLoader::didFinishLoading):
        (WebCore::MainResourceLoader::load):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::dispatchLoadEvent):
        (WebCore::DOMWindow::dispatchTimedEvent):
        * page/DOMWindow.h:
        * page/PerformanceNavigation.cpp:
        (WebCore::PerformanceNavigation::redirectCount):
        * page/PerformanceTiming.cpp:
        (WebCore::getPossiblySkewedTimeInKnownRange):
        (WebCore::PerformanceTiming::navigationStart):
        (WebCore::PerformanceTiming::unloadEventStart):
        (WebCore::PerformanceTiming::unloadEventEnd):
        (WebCore::PerformanceTiming::redirectStart):
        (WebCore::PerformanceTiming::redirectEnd):
        (WebCore::PerformanceTiming::fetchStart):
        (WebCore::PerformanceTiming::responseEnd):
        (WebCore::PerformanceTiming::domLoading):
        (WebCore::PerformanceTiming::domInteractive):
        (WebCore::PerformanceTiming::domContentLoadedEventStart):
        (WebCore::PerformanceTiming::domContentLoadedEventEnd):
        (WebCore::PerformanceTiming::domComplete):
        (WebCore::PerformanceTiming::loadEventStart):
        (WebCore::PerformanceTiming::loadEventEnd):
        (WebCore::PerformanceTiming::resourceLoadTimeRelativeToAbsolute):
        * page/PerformanceTiming.h:
        * platform/network/ResourceLoadTiming.cpp: Removed.
        * platform/network/ResourceLoadTiming.h:

2011-12-15  Alexander Pavlov  <apavlov@chromium.org>

        Unreviewed, fix Closure compiler warnings after r102905.

        * inspector/front-end/CSSStyleModel.js: Add JSDoc annotations

2011-12-14  Alexander Pavlov  <apavlov@chromium.org>

        Web Inspector: make ProfilesPanel scale as the number of ProfileTypes grows
        https://bugs.webkit.org/show_bug.cgi?id=74391

        Reviewed by Pavel Feldman.

        Whenever a profile is started, this change disables all profile recording buttons, except the one
        that correponds to the running profile. Once the profiling is finished, all buttons get enabled back again.

        * English.lproj/localizedStrings.js:
        * inspector/front-end/ProfileView.js:
        (WebInspector.CPUProfileView.profileCallback):
        (WebInspector.CPUProfileType.prototype.get buttonTooltip):
        (WebInspector.CPUProfileType.prototype.get buttonStyle):
        (WebInspector.CPUProfileType.prototype.buttonClicked):
        * inspector/front-end/ProfilesPanel.js:
        (WebInspector.ProfilesPanel.prototype.get statusBarItems.clickHandler):
        (WebInspector.ProfilesPanel.prototype.get statusBarItems):
        (WebInspector.ProfilesPanel.prototype._addProfileHeader):
        (WebInspector.ProfilesPanel.prototype.updateProfileTypeButtons):
        (WebInspector.ProfilesPanel.prototype._updateInterface):
        (WebInspector.ProfilesPanel.prototype.setRecordingProfile):
        (WebInspector.ProfilesPanel.prototype.takeHeapSnapshot):
        (WebInspector.ProfilesPanel.prototype._reportHeapSnapshotProgress):
        (WebInspector.ProfilerDispatcher.prototype.setRecordingProfile):
        * inspector/front-end/inspector.css:
        (.record-cpu-profile-status-bar-item .glyph):
        (.record-cpu-profile-status-bar-item.toggled-on .glyph):

2011-12-15  Alexander Pavlov  <apavlov@chromium.org>

        Web Inspector: [Styles] Update selected DOM element styles whenever applicable media queries change
        https://bugs.webkit.org/show_bug.cgi?id=74292

        The change introduces and handles in the frontend a new event type for the CSS domain,
        "mediaQueryResultChanged", which gets fired every time a viewport-dependent media feature
        changes its value. This allows users to see live changes of the (media-dependent) matched
        rules for inspected elements.

        Reviewed by Pavel Feldman.

        * inspector/CodeGeneratorInspector.py:
        (DomainNameFixes):
        * inspector/Inspector.json:
        * inspector/InspectorCSSAgent.cpp:
        (WebCore::InspectorCSSAgent::InspectorCSSAgent):
        (WebCore::InspectorCSSAgent::setFrontend):
        (WebCore::InspectorCSSAgent::clearFrontend):
        (WebCore::InspectorCSSAgent::restore):
        (WebCore::InspectorCSSAgent::enable):
        (WebCore::InspectorCSSAgent::disable):
        (WebCore::InspectorCSSAgent::mediaQueryResultChanged):
        * inspector/InspectorCSSAgent.h:
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::mediaQueryResultChangedImpl):
        * inspector/InspectorInstrumentation.h:
        (WebCore::InspectorInstrumentation::mediaQueryResultChanged):
        * inspector/front-end/CSSStyleModel.js:
        (WebInspector.CSSStyleModel):
        (WebInspector.CSSStyleModel.prototype.mediaQueryResultChanged):
        (WebInspector.CSSDispatcher):
        (WebInspector.CSSDispatcher.prototype.mediaQueryResultChanged):
        * inspector/front-end/MetricsSidebarPane.js:
        (WebInspector.MetricsSidebarPane):
        (WebInspector.MetricsSidebarPane.prototype._styleSheetOrMediaQueryResultChanged):
        * inspector/front-end/StylesSidebarPane.js:
        (WebInspector.StylesSidebarPane):
        (WebInspector.StylesSidebarPane.prototype._styleSheetOrMediaQueryResultChanged):
        * page/FrameView.cpp:
        (WebCore::FrameView::layout):

2011-12-14  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: [Regression] Network manager fails to show resource type and MIME type in incorrect MIME type console message.
        https://bugs.webkit.org/show_bug.cgi?id=74516

        Reviewed by Pavel Feldman.

        Test: http/tests/inspector/network/script-as-text-loading.html

        * inspector/front-end/ConsoleMessage.js:
        (WebInspector.ConsoleMessageImpl.prototype._formatMessage):
        * inspector/front-end/NetworkManager.js:
        (WebInspector.NetworkDispatcher.prototype._updateResourceWithResponse):

2011-11-03  Kent Tamura  <tkent@chromium.org>

        A spin button changes the value incorrectly if it is clicked after touch events.
        https://bugs.webkit.org/show_bug.cgi?id=71181

        Reviewed by Ryosuke Niwa.

        SpinButtonElement assumed setHovered(true) was always called before a
        mousemove event in the element. It is not true for touch events.

        We should not reset m_upDownState to Indetermiante in setHovered(true),
        and should reset it when the mouse pointer moves out.

        This change fixes the flakiness of fast/forms/input-step-as-double.html.

        Test: fast/events/touch/touch-before-pressing-spin-button.html

        * html/shadow/TextControlInnerElements.cpp:
        (WebCore::SpinButtonElement::defaultEventHandler):
        Add an assertion that m_upDownState should not be Indetermiante.
        Reset m_upDownState to Indeterminate when the mouse pointer moves out
        from the element.
        (WebCore::SpinButtonElement::setHovered):
        Reset m_upDownState to Indeterminate when the element becomes unhovered.

2011-12-14  Lucas Forschler  <lforschler@apple.com>
    
        https://bugs.webkit.org/show_bug.cgi?id=74543
        Add CSS*.cpp to a new CSSAllInOne.cpp file with two exceptions:
            CSSProperty.cpp
            CSSPrimitiveValue.cpp
        Adding these two broke things with a templates problem that was not easily fixable.

        Reviewed by Steve Falkenburg.

        * WebCore.vcproj/WebCore.vcproj:
        * css/CSSAllInOne.cpp: Added.

2011-12-14  Tim Horton  <timothy_horton@apple.com>

        Generated images should respect the accelerated state of the context they're going to be drawn into
        https://bugs.webkit.org/show_bug.cgi?id=74577
        <rdar://problem/10584392>

        Reviewed by Simon Fraser.

        The tiled code path for GeneratorGeneratedImage and CrossfadeGeneratedImage blindly creates
        an unaccelerated ImageBuffer. Instead, take into account the accelerated state of the destination context.

        No new tests, as this is a simple performance improvement.

        * platform/graphics/CrossfadeGeneratedImage.cpp:
        (WebCore::CrossfadeGeneratedImage::drawPattern):
        * platform/graphics/GeneratorGeneratedImage.cpp:
        (WebCore::GeneratorGeneratedImage::drawPattern):

2011-12-14  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: cleanup unused variable introduced at r102803

        * inspector/front-end/NetworkManager.js:
        (WebInspector.NetworkManager.prototype.enableResourceTracking):
        (WebInspector.NetworkManager.prototype.disableResourceTracking):

2011-12-14  Wei James  <james.wei@intel.com>

        fast path to accelerate processing in AudioBus::processWithGainFromMonoStereo
        https://bugs.webkit.org/show_bug.cgi?id=74054

        Reviewed by Kenneth Russell.

        Avoid de-zippering when the gain has converged on the targetGain. 
        It can get about 75% performance gain at most when all frames don't need
        de-zippering.

        * platform/audio/AudioBus.cpp:
        (WebCore::AudioBus::processWithGainFromMonoStereo):

2011-12-14  Adam Klein  <adamk@chromium.org>

        Optimize MutationObserverInterestGroup construction
        https://bugs.webkit.org/show_bug.cgi?id=74563

        Reviewed by Ojan Vafai.

        Inline MutationObserverInterestGroup's creation methods and fix an
        accidental pass-by-value in an attempt to further reduce the CPU
        footprint of MutationObservers.

        No new tests, refactor only.

        * dom/WebKitMutationObserver.cpp:
        (WebCore::MutationObserverInterestGroup::MutationObserverInterestGroup): Pass observers HashMap by reference.
        * dom/WebKitMutationObserver.h:
        (WebCore::MutationObserverInterestGroup::createForChildListMutation): Inline.
        (WebCore::MutationObserverInterestGroup::createForCharacterDataMutation): Inline.
        (WebCore::MutationObserverInterestGroup::createForAttributesMutation): Inline.
        (WebCore::MutationObserverInterestGroup::hasOldValue): Remove spurious inline keyword.

2011-12-14  Dominic Mazzoni  <dmazzoni@google.com>

        Seeing crash in DRT after loading-iframe-sends-notification.html land
        https://bugs.webkit.org/show_bug.cgi?id=72624

        When an iframe finishes loading, send an accessibility notification
        on the renderer, rather than on a parent node. The only reason it was
        being posted on a parent before was because there was no way to detect
        that in a test. This is simpler and now covered by the test.

        Reviewed by Chris Fleizach.

        Updates existing test:
        accessibility/loading-iframe-sends-notification.html

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

2011-12-14  Nat Duca  <nduca@chromium.org>

        [chromium] Add inhibitDraw to CCScheduler and drop root impl to prevent background flash on tab restore
        https://bugs.webkit.org/show_bug.cgi?id=74351

        Reviewed by James Robinson.

        * platform/graphics/chromium/cc/CCLayerTreeHost.cpp:
        (WebCore::CCLayerTreeHost::setNeedsCommit):
        (WebCore::CCLayerTreeHost::didBecomeInvisibleOnImplThread):
        * platform/graphics/chromium/cc/CCScheduler.cpp:
        (WebCore::CCScheduler::getNextAction):
        (WebCore::CCScheduler::processScheduledActions):
        * platform/graphics/chromium/cc/CCScheduler.h:
        * platform/graphics/chromium/cc/CCSchedulerStateMachine.cpp:
        (WebCore::CCSchedulerStateMachine::CCSchedulerStateMachine):
        (WebCore::CCSchedulerStateMachine::nextAction):
        * platform/graphics/chromium/cc/CCSchedulerStateMachine.h:
        (WebCore::CCSchedulerStateMachine::setInhibitDraw):
        * platform/graphics/chromium/cc/CCThreadProxy.cpp:
        (WebCore::CCThreadProxy::setVisibleOnImplThread):
        (WebCore::CCThreadProxy::inhibitDraw):
        * platform/graphics/chromium/cc/CCThreadProxy.h:

2011-12-14  Ken Buchanan  <kenrb@chromium.org>

        Crash due to incorrect parsing of isolates
        https://bugs.webkit.org/show_bug.cgi?id=74311
        When <bdi> content is wrapped, all hell breaks loose
        https://bugs.webkit.org/show_bug.cgi?id=74396

        Reviewed by Eric Seidel.

        When an isolate was encountered during run layout, the entire isolate
        would be parsed, even if the run started in the middle of the isolate.
        This would sometimes cause parts of the isolate to be added multiple
        times as runs. This patch marks the starting position within the
        isolate so nothing is parsed twice.

        This patch changes appendRun() so that when a run is added that is
        inside an isolate, it saves the start position of the run rather than
        the root. This allows constructBidiRuns() to resume parsing the
        isolate from the correct position.

        The change to RenderBox partially reverts a previous change I had
        done. It makes sense to screen for the condition, as was previously
        the case.

        This patch does not add the test case from 74396 because a separate
        bug is preventing it from rendering correctly.

        * rendering/InlineIterator.h:
        (WebCore::addPlaceholderRunForIsolatedInline)
        (WebCore::IsolateTracker::addFakeRunIfNecessary)
        (WebCore::InlineBidiResolver::appendRun)
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlockLineLayout::constructBidiRuns)
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::positionLineBox)

2011-12-14  Jing Zhao  <jingzhao@chromium.org>

        Opening two popup menus by dispatchEvent() makes problems.
        https://bugs.webkit.org/show_bug.cgi?id=73304

        Reviewed by Kent Tamura.

        By using element.dispatchEvent(), a user written script can open two
        popup menus, which causes various problems in different platforms.

        Add a hasOpenedPopup() method in ChromeClient and a wrapper in Chrome.
        In RenderMenuList::showPopup(), check if there is an opened popup menu
        before opening a new popup menu.

        Test: fast/forms/select-popup-crash.html

        * loader/EmptyClients.h: Overrides hasOpenedPopup().
        (WebCore::EmptyChromeClient::hasOpenedPopup): Returns false as a default case.
        * page/Chrome.cpp:
        (WebCore::Chrome::hasOpenedPopup): Calls ChromeClient::hasOpenedPopup().
        * page/Chrome.h: Declares hasOpenedPopup().
        * page/ChromeClient.h: Declares hasOpenedPopup() as a pure virtual function.
        * rendering/RenderMenuList.cpp:
        (WebCore::RenderMenuList::showPopup): Calls Chrome::hasOpenedPopup() before opening a new popup menu.

2011-12-14  Tony Chang  <tony@chromium.org>

        Clean up style in CSSStyleSelector.cpp
        https://bugs.webkit.org/show_bug.cgi?id=74548

        Reviewed by Ojan Vafai.

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::styleForElement):
        (WebCore::CSSStyleSelector::pseudoStyleForElement):

2011-12-14  Kenneth Russell  <kbr@google.com>

        Unreviewed, rolling out r102794.
        http://trac.webkit.org/changeset/102794
        https://bugs.webkit.org/show_bug.cgi?id=74220

        Reapplying patch since it is not the cause of the problems
        described in bug 74220.

        * bindings/v8/V8Proxy.cpp:
        (WebCore::V8Proxy::reportUnsafeAccessTo):
        * bindings/v8/V8Proxy.h:
        * bindings/v8/custom/V8CustomXPathNSResolver.cpp:
        (WebCore::V8CustomXPathNSResolver::lookupNamespaceURI):

2011-12-14  Sam Weinig  <weinig@apple.com>

        Remove whitespace from InheritedPropertySheets attributes in
        vsprops files to appease the Visual Studio project migrator.

        Reviewed by Adam Roben.

        * WebCore.vcproj/QTMovieWinDebug.vsprops:
        * WebCore.vcproj/QTMovieWinDebugAll.vsprops:
        * WebCore.vcproj/QTMovieWinDebugCairoCFLite.vsprops:
        * WebCore.vcproj/QTMovieWinProduction.vsprops:
        * WebCore.vcproj/QTMovieWinRelease.vsprops:
        * WebCore.vcproj/QTMovieWinReleaseCairoCFLite.vsprops:
        * WebCore.vcproj/WebCoreDebug.vsprops:
        * WebCore.vcproj/WebCoreDebugAll.vsprops:
        * WebCore.vcproj/WebCoreDebugCairoCFLite.vsprops:
        * WebCore.vcproj/WebCoreProduction.vsprops:
        * WebCore.vcproj/WebCoreRelease.vsprops:
        * WebCore.vcproj/WebCoreReleaseCairoCFLite.vsprops:

2011-12-14  Enrica Casucci  <enrica@apple.com>

        One more attempt to fix the release build (hopefully the last)

        Unreviewed.

        * editing/ReplaceSelectionCommand.cpp: Added NodeRenderStyle.h

2011-12-14  Kenneth Russell  <kbr@google.com>

        Unreviewed, rolling out r102816.
        http://trac.webkit.org/changeset/102816
        https://bugs.webkit.org/show_bug.cgi?id=74415

        Implicated in font-related crashes on Chromium canaries.

        * platform/graphics/chromium/FontChromiumWin.cpp:
        (WebCore::TransparencyAwareFontPainter::TransparencyAwareGlyphPainter::drawGlyphs):
        (WebCore::Font::drawGlyphs):
        * platform/graphics/chromium/FontPlatformDataChromiumWin.cpp:
        (WebCore::FontPlatformData::FontPlatformData):
        (WebCore::FontPlatformData::operator=):
        (WebCore::FontPlatformData::~FontPlatformData):
        * platform/graphics/chromium/FontPlatformDataChromiumWin.h:
        (WebCore::FontPlatformData::size):
        (WebCore::FontPlatformData::hash):
        * platform/graphics/skia/SkiaFontWin.cpp:
        (WebCore::setupPaintForFont):
        (WebCore::paintSkiaText):
        * platform/graphics/skia/SkiaFontWin.h:

2011-12-14  Simon Fraser  <simon.fraser@apple.com>

        Filter amounts should accept percentages
        https://bugs.webkit.org/show_bug.cgi?id=74531

        Reviewed by Chris Marrin.
        
        Support percentage arguments for some filter functions, using the FPercent flag
        to validUnit(). Fix CSSStyleSelector::createFilterOperations() to do the divide by 100
        for percentages.
        
        Replaced isValidFilterArgument(), which just tested arguments one by one for validity, with
        parseBuiltinFilterArguments() which tests and creates the CSSValues at the same time, which
        is a little more efficient. It also allows filter-specific behavior to be more localized in this
        method.

        Covered by existing tests.

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseBuiltinFilterArguments):
        (WebCore::CSSParser::parseFilter):
        * css/CSSParser.h:
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::createFilterOperations):

2011-12-14  Enrica Casucci  <enrica@apple.com>

        Build fix.

        Unreviewed.

        * editing/ReplaceSelectionCommand.cpp: Added include RenderStyle.h

2011-12-14  Hajime Morrita  <morrita@chromium.org>

        JS_INLINE and WTF_INLINE should be visible from WebCore
        https://bugs.webkit.org/show_bug.cgi?id=73191

        Reviewed by Kevin Ollivier.

        - Moved export related definitions from config.h
          to ExportMacros.h, JSExportMacros.h and PlatformExportMacros.h
        - Added forwarding headers which are referred from config.h

        No new tests. Only build related changes.

        * ForwardingHeaders/runtime/JSExportMacros.h: Added.
        * ForwardingHeaders/wtf/ExportMacros.h: Added.
        * WebCore.xcodeproj/project.pbxproj:
        * config.h:
        * platform/PlatformExportMacros.h: Copied from Source/JavaScriptCore/wtf/ExportMacros.h.

2011-12-14  Enrica Casucci  <enrica@apple.com>

        Need a way to produce leaner markup when pasting a fragment containing verbose markup
        https://bugs.webkit.org/show_bug.cgi?id=74514
        <rdar://problem/10208653>

        Reviewed by Ryosuke Niwa.

        This patch is another step in the direction of reducing the verbosity of the markup
        produced with editing operations.
        After the copied fragment is inserted in the document, it is analyzed to remove all
        the elements that don't contribute to the style. The decision is made comparing the
        render styles. As part of the cleanup, unstyled divs with single child element are
        removed. The logic to determine the blocks that can be removed is the same used in
        DeleteSelectionCommand and has been moved in CompositeEditCommand.
        
        Test: editing/pasteboard/paste-and-sanitize.html

        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::isRemovableBlock): Implements logic to determine
        if a block can be removed.
        * editing/CompositeEditCommand.h: Added isRemovableBlock declaration.
        * editing/DeleteSelectionCommand.cpp:
        (WebCore::DeleteSelectionCommand::removeRedundantBlocks): Implemented using
        isRemovableBlock from CompositeEditCommand.
        * editing/Editor.cpp:
        (WebCore::Editor::replaceSelectionWithFragment): Added SanitizeFragment option.
        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::ReplaceSelectionCommand): Added initialization
        of m_sanitizeFragment member.
        (WebCore::ReplaceSelectionCommand::removeRedundantMarkup): New method implementing
        the cleanup logic.
        (WebCore::ReplaceSelectionCommand::doApply): Added call to removeRedundantMarkup
        after the fragment is inserted in the document.
        * editing/ReplaceSelectionCommand.h: Added new value to the enum CommandOption,
        a new member variable and the new method declaration.

2011-12-14  Adrienne Walker  <enne@google.com>

        [chromium] Refactor tile drawing to be more data-driven
        https://bugs.webkit.org/show_bug.cgi?id=73059

        Reviewed by James Robinson.

        Partially tested by compositor layout tests. Debug borders and
        checkerboarding tested manually.

        This is the first part of a move towards rendering quads on screen
        from a bag of data rather than in virtual CCLayerImpl::draw functions.

        CCDrawQuad-derived classes store material-specific pieces of data to
        use when rendering. CCLayerImpl classes now create these CCDrawQuad
        objects rather than issuing direct GL commands. Where this data is
        shared between quads that come from the same layer, that data is
        stored in a CCSharedQuadState object rather than duplicated.

        CCRenderPass is the class that holds the list of quads and the target
        surface that they draw into. Drawing a frame consists of drawing a
        series of render passes onto their respective surfaces.

        CCLayerTreeHostImpl constructs these render passes from the output of
        calculateDrawTransformsAndVisibility by asking each layer to insert
        quads into a list and hands them off to LayerRendererChromium for
        rendering.

        * WebCore.gypi:
        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::clearSurfaceForDebug):
        (WebCore::LayerRendererChromium::beginDrawingFrame):
        (WebCore::LayerRendererChromium::drawRenderPass):
        (WebCore::LayerRendererChromium::drawQuad):
        (WebCore::LayerRendererChromium::drawDebugBorderQuad):
        (WebCore::LayerRendererChromium::drawRenderSurfaceQuad):
        (WebCore::LayerRendererChromium::drawSolidColorQuad):
        (WebCore::tileUniformLocation):
        (WebCore::findTileProgramUniforms):
        (WebCore::LayerRendererChromium::drawTileQuad):
        (WebCore::LayerRendererChromium::drawCustomLayerQuad):
        (WebCore::LayerRendererChromium::finishDrawingFrame):
        (WebCore::LayerRendererChromium::useRenderSurface):
        * platform/graphics/chromium/LayerRendererChromium.h:
        * platform/graphics/chromium/ShaderChromium.h:
        (WebCore::FragmentTexAlphaBinding::edgeLocation):
        (WebCore::FragmentTexAlphaBinding::fragmentTexTransformLocation):
        (WebCore::FragmentTexOpaqueBinding::edgeLocation):
        (WebCore::FragmentTexOpaqueBinding::fragmentTexTransformLocation):
        * platform/graphics/chromium/TiledLayerChromium.cpp:
        (WebCore::TiledLayerChromium::pushPropertiesTo):
        * platform/graphics/chromium/cc/CCCustomLayerDrawQuad.cpp: Added.
        (WebCore::CCCustomLayerDrawQuad::create):
        (WebCore::CCCustomLayerDrawQuad::CCCustomLayerDrawQuad):
        * platform/graphics/chromium/cc/CCCustomLayerDrawQuad.h: Added.
        (WebCore::CCCustomLayerDrawQuad::layer):
        * platform/graphics/chromium/cc/CCDebugBorderDrawQuad.cpp: Added.
        (WebCore::CCDebugBorderDrawQuad::create):
        (WebCore::CCDebugBorderDrawQuad::CCDebugBorderDrawQuad):
        * platform/graphics/chromium/cc/CCDebugBorderDrawQuad.h: Added.
        (WebCore::CCDebugBorderDrawQuad::color):
        (WebCore::CCDebugBorderDrawQuad::width):
        * platform/graphics/chromium/cc/CCDrawQuad.cpp: Added.
        (WebCore::CCDrawQuad::CCDrawQuad):
        (WebCore::CCDrawQuad::toDebugBorderDrawQuad):
        (WebCore::CCDrawQuad::toRenderSurfaceDrawQuad):
        (WebCore::CCDrawQuad::toSolidColorDrawQuad):
        (WebCore::CCDrawQuad::toTileDrawQuad):
        (WebCore::CCDrawQuad::toCustomLayerDrawQuad):
        * platform/graphics/chromium/cc/CCDrawQuad.h: Added.
        (WebCore::CCDrawQuad::quadRect):
        (WebCore::CCDrawQuad::quadTransform):
        (WebCore::CCDrawQuad::layerTransform):
        (WebCore::CCDrawQuad::layerRect):
        (WebCore::CCDrawQuad::clipRect):
        (WebCore::CCDrawQuad::opacity):
        (WebCore::CCDrawQuad::drawsOpaque):
        (WebCore::CCDrawQuad::needsBlending):
        (WebCore::CCDrawQuad::isLayerAxisAlignedIntRect):
        (WebCore::CCDrawQuad::material):
        * platform/graphics/chromium/cc/CCLayerImpl.cpp:
        (WebCore::CCLayerImpl::createSharedQuadState):
        (WebCore::CCLayerImpl::appendQuads):
        (WebCore::CCLayerImpl::appendDebugBorderQuad):
        (WebCore::CCLayerImpl::quadTransform):
        * platform/graphics/chromium/cc/CCLayerImpl.h:
        * platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:
        (WebCore::CCLayerTreeHostImpl::trackDamageForAllSurfaces):
        (WebCore::computeScreenSpaceTransformForSurface):
        (WebCore::damageInSurfaceSpace):
        (WebCore::CCLayerTreeHostImpl::calculateRenderPasses):
        (WebCore::CCLayerTreeHostImpl::drawLayers):
        * platform/graphics/chromium/cc/CCLayerTreeHostImpl.h:
        * platform/graphics/chromium/cc/CCRenderPass.cpp: Added.
        (WebCore::CCRenderPass::create):
        (WebCore::CCRenderPass::CCRenderPass):
        (WebCore::CCRenderPass::appendQuadsForLayer):
        (WebCore::CCRenderPass::appendQuadsForRenderSurfaceLayer):
        * platform/graphics/chromium/cc/CCRenderPass.h: Added.
        (WebCore::CCRenderPass::quadList):
        (WebCore::CCRenderPass::targetSurface):
        (WebCore::CCRenderPass::setSurfaceDamageRect):
        (WebCore::CCRenderPass::surfaceDamageRect):
        * platform/graphics/chromium/cc/CCRenderSurfaceDrawQuad.cpp: Added.
        (WebCore::CCRenderSurfaceDrawQuad::create):
        (WebCore::CCRenderSurfaceDrawQuad::CCRenderSurfaceDrawQuad):
        * platform/graphics/chromium/cc/CCRenderSurfaceDrawQuad.h: Added.
        (WebCore::CCRenderSurfaceDrawQuad::layer):
        (WebCore::CCRenderSurfaceDrawQuad::surfaceDamageRect):
        * platform/graphics/chromium/cc/CCSharedQuadState.cpp: Added.
        (WebCore::CCSharedQuadState::create):
        (WebCore::CCSharedQuadState::CCSharedQuadState):
        (WebCore::CCSharedQuadState::isLayerAxisAlignedIntRect):
        * platform/graphics/chromium/cc/CCSharedQuadState.h: Added.
        (WebCore::CCSharedQuadState::quadTransform):
        (WebCore::CCSharedQuadState::layerTransform):
        (WebCore::CCSharedQuadState::layerRect):
        (WebCore::CCSharedQuadState::clipRect):
        (WebCore::CCSharedQuadState::opacity):
        (WebCore::CCSharedQuadState::isOpaque):
        * platform/graphics/chromium/cc/CCSolidColorDrawQuad.cpp: Added.
        (WebCore::CCSolidColorDrawQuad::create):
        (WebCore::CCSolidColorDrawQuad::CCSolidColorDrawQuad):
        * platform/graphics/chromium/cc/CCSolidColorDrawQuad.h: Added.
        (WebCore::CCSolidColorDrawQuad::color):
        * platform/graphics/chromium/cc/CCTileDrawQuad.cpp: Added.
        (WebCore::CCTileDrawQuad::create):
        (WebCore::CCTileDrawQuad::CCTileDrawQuad):
        * platform/graphics/chromium/cc/CCTileDrawQuad.h: Added.
        (WebCore::CCTileDrawQuad::textureId):
        (WebCore::CCTileDrawQuad::textureOffset):
        (WebCore::CCTileDrawQuad::textureSize):
        (WebCore::CCTileDrawQuad::textureFilter):
        (WebCore::CCTileDrawQuad::swizzleContents):
        (WebCore::CCTileDrawQuad::leftEdgeAA):
        (WebCore::CCTileDrawQuad::topEdgeAA):
        (WebCore::CCTileDrawQuad::rightEdgeAA):
        (WebCore::CCTileDrawQuad::bottomEdgeAA):
        (WebCore::CCTileDrawQuad::isAntialiased):
        * platform/graphics/chromium/cc/CCTiledLayerImpl.cpp:
        (WebCore::CCTiledLayerImpl::CCTiledLayerImpl):
        (WebCore::CCTiledLayerImpl::quadTransform):
        (WebCore::CCTiledLayerImpl::appendQuads):
        * platform/graphics/chromium/cc/CCTiledLayerImpl.h:
        (WebCore::CCTiledLayerImpl::setContentsSwizzled):
        (WebCore::CCTiledLayerImpl::contentsSwizzled):

2011-12-14  Ojan Vafai  <ojan@chromium.org>

        Implement flexDirection and flexWrap and make flexFlow a proper shorthand.
        https://bugs.webkit.org/show_bug.cgi?id=74542

        Reviewed by Tony Chang.

        In a followup patch, I'll cleanup all the *Flow methods in RenderFlexibleBox.

        Existing tests cover all the rendering behaviors, so only need to test
        the css property parsing.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        * css/CSSMutableStyleDeclaration.cpp:
        (WebCore::CSSMutableStyleDeclaration::getPropertyValue):
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):
        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        (WebCore::CSSPrimitiveValue::operator EFlexDirection):
        * css/CSSProperty.cpp:
        (WebCore::CSSProperty::isInheritedProperty):
        * css/CSSPropertyLonghand.cpp:
        (WebCore::initShorthandMap):
        * css/CSSPropertyNames.in:
        * css/CSSStyleApplyProperty.cpp:
        (WebCore::CSSStyleApplyProperty::CSSStyleApplyProperty):
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::sizesToIntrinsicLogicalWidth):
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::isColumnFlow):
        (WebCore::RenderFlexibleBox::isLeftToRightFlow):
        (WebCore::RenderFlexibleBox::layoutAndPlaceChildren):
        (WebCore::RenderFlexibleBox::alignChildren):
        * rendering/style/RenderStyle.h:
        (WebCore::InheritedFlags::flexDirection):
        (WebCore::InheritedFlags::isColumnFlexDirection):
        (WebCore::InheritedFlags::setFlexDirection):
        (WebCore::InheritedFlags::initialFlexDirection):
        * rendering/style/RenderStyleConstants.h:
        * rendering/style/StyleFlexibleBoxData.cpp:
        (WebCore::StyleFlexibleBoxData::StyleFlexibleBoxData):
        (WebCore::StyleFlexibleBoxData::operator==):
        * rendering/style/StyleFlexibleBoxData.h:

2011-12-13  Jon Lee  <jonlee@apple.com>

        Enable notifications on Mac.

        Reviewed by Sam Weinig.

        * Configurations/FeatureDefines.xcconfig:

2011-12-14  Ryosuke Niwa  <rniwa@webkit.org>

        COMPILE_ASSERT in CSSStyleSelector.cpp doesn't compile on Windows
        https://bugs.webkit.org/show_bug.cgi?id=74327

        Reviewed by Darin Adler.

        Always use unsigned instead of bool and unsigned in the bitfields of RuleData to shrink
        its size under MSVC.

        Unlike gcc and clang, MSVC pads each consecutive member variables of the same type
        in bitfields. e.g. if you have:
        sturct AB {
            unsigned m_1 : 31;
            bool m_2 : 1;
        }
        then MSVC pads m_1 and allocates sizeof(unsigned) * 2 for AB whereas gcc and clang
        only allocate sizeof(unsigned) * 1 for AB.

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

2011-12-14  Ryosuke Niwa  <rniwa@webkit.org>

        NodeChildList shouldn't be in NodeListNodeData
        https://bugs.webkit.org/show_bug.cgi?id=73969

        Reviewed by Sam Weinig.

        Move NodeChildList out of NodeListNodeData to separate it from the other node lists in order to
        resolve the bug 73853. Unlike other DynamicNodeList, we don't need to invalidate NodeChildList
        on ancestors when children change. Moving ChildNodeList out of NodeListNodeData makes this difference
        apparent and makes DynamicNodeList::Caches in NodeListNodeData always held by a DynamicSubtreeNodeList,
        eliminating the need for hasOwnCaches() checks in various places.

        Also renamed the existing DynamicNodeList to DynamicSubtreeNodeList and re-introduced DynamicNodeList
        from which DynamicSubtreeNodeList and ChildNodeList both inherit to share the code for itemWithName.

        In addition, renamed registerDynamicNodeList and unregisterDynamicNodeList, which updates a counter for
        TreeScope::hasNodeListCaches, to registerDynamicSubtreeNodeList and unregisterDynamicSubtreeNodeList
        respectively. They are no longer called by ChildNodeList in order to avoid walking up the DOM tree
        inside invalidateNodeListsCacheAfterAttributeChanged and invalidateNodeListsCacheAfterChildrenChanged.

        Test: fast/dom/childnode-item-after-itemname.html

        * bindings/js/JSNodeListCustom.cpp:
        (WebCore::JSNodeListOwner::isReachableFromOpaqueRoots):
        * dom/ChildNodeList.cpp:
        (WebCore::ChildNodeList::ChildNodeList):
        (WebCore::ChildNodeList::length):
        (WebCore::ChildNodeList::item):
        (WebCore::ChildNodeList::nodeMatches):
        * dom/ChildNodeList.h:
        * dom/ClassNodeList.cpp:
        (WebCore::ClassNodeList::ClassNodeList):
        (WebCore::ClassNodeList::~ClassNodeList):
        * dom/ClassNodeList.h:
        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::childrenChanged):
        * dom/DynamicNodeList.cpp:
        (WebCore::DynamicSubtreeNodeList::DynamicSubtreeNodeList):
        (WebCore::DynamicSubtreeNodeList::~DynamicSubtreeNodeList):
        (WebCore::DynamicSubtreeNodeList::length):
        (WebCore::DynamicSubtreeNodeList::itemForwardsFromCurrent):
        (WebCore::DynamicSubtreeNodeList::itemBackwardsFromCurrent):
        (WebCore::DynamicSubtreeNodeList::item):
        (WebCore::DynamicNodeList::itemWithName):
        (WebCore::DynamicSubtreeNodeList::isDynamicNodeList):
        (WebCore::DynamicSubtreeNodeList::invalidateCache):
        (WebCore::DynamicSubtreeNodeList::Caches::Caches):
        (WebCore::DynamicSubtreeNodeList::Caches::create):
        (WebCore::DynamicSubtreeNodeList::Caches::reset):
        * dom/DynamicNodeList.h:
        (WebCore::DynamicNodeList::DynamicNodeList):
        (WebCore::DynamicNodeList::~DynamicNodeList):
        (WebCore::DynamicNodeList::node):
        (WebCore::DynamicSubtreeNodeList::rootNode):
        * dom/NameNodeList.cpp:
        (WebCore::NameNodeList::NameNodeList):
        (WebCore::NameNodeList::~NameNodeList):
        * dom/NameNodeList.h:
        * dom/Node.cpp:
        (WebCore::Node::childNodes):
        (WebCore::Node::registerDynamicSubtreeNodeList):
        (WebCore::Node::unregisterDynamicSubtreeNodeList):
        (WebCore::Node::invalidateNodeListsCacheAfterAttributeChanged):
        (WebCore::Node::invalidateNodeListsCacheAfterChildrenChanged):
        (WebCore::Node::removeCachedClassNodeList):
        (WebCore::Node::removeCachedNameNodeList):
        (WebCore::Node::removeCachedTagNodeList):
        (WebCore::Node::removeCachedLabelsNodeList):
        (WebCore::NodeListsNodeData::invalidateCaches):
        (WebCore::NodeListsNodeData::isEmpty):
        (WebCore::NodeRareData::clearChildNodeListCache):
        * dom/Node.h:
        * dom/NodeRareData.h:
        (WebCore::NodeRareData::nodeLists):
        (WebCore::NodeRareData::ensureChildNodeListCache):
        * dom/TagNodeList.cpp:
        (WebCore::TagNodeList::TagNodeList):
        (WebCore::TagNodeList::~TagNodeList):
        * dom/TagNodeList.h:
        * html/LabelsNodeList.cpp:
        (WebCore::LabelsNodeList::LabelsNodeList):
        * html/LabelsNodeList.h:

2011-12-14  Ryosuke Niwa  <rniwa@webkit.org>

        Push more member functions from EditCommand to CompositeEditCommand
        https://bugs.webkit.org/show_bug.cgi?id=74249

        Reviewed by Enrica Casucci.

        Moved startingRootEditableElement and endingRootEditableElement from EditCommand to EditCommandComposition,
        and isTypingCommand, preservesTypingStyle, shouldRetainAutocorrectionIndicator,
        setShouldRetainAutocorrectionIndicator, and shouldStopCaretBlinking from EditCommand to CompositeEditCommand.
        Also removed EditCommand::updateLayout().

        * editing/ApplyBlockElementCommand.cpp:
        (WebCore::ApplyBlockElementCommand::doApply):
        * editing/ApplyStyleCommand.cpp:
        (WebCore::ApplyStyleCommand::applyBlockStyle):
        (WebCore::ApplyStyleCommand::applyInlineStyle):
        * editing/CompositeEditCommand.cpp:
        (WebCore::EditCommandComposition::EditCommandComposition):
        (WebCore::EditCommandComposition::setStartingSelection):
        (WebCore::EditCommandComposition::setEndingSelection):
        (WebCore::CompositeEditCommand::preservesTypingStyle):
        (WebCore::CompositeEditCommand::isTypingCommand):
        (WebCore::CompositeEditCommand::shouldRetainAutocorrectionIndicator):
        (WebCore::CompositeEditCommand::setShouldRetainAutocorrectionIndicator):
        (WebCore::CompositeEditCommand::addBlockPlaceholderIfNeeded):
        (WebCore::CompositeEditCommand::moveParagraphContentsToNewBlockIfNecessary):
        (WebCore::CompositeEditCommand::moveParagraphs):
        * editing/CompositeEditCommand.h:
        (WebCore::EditCommandComposition::startingRootEditableElement):
        (WebCore::EditCommandComposition::endingRootEditableElement):
        (WebCore::CompositeEditCommand::shouldStopCaretBlinking):
        * editing/DeleteSelectionCommand.cpp:
        (WebCore::DeleteSelectionCommand::removeNode):
        (WebCore::DeleteSelectionCommand::fixupWhitespace):
        * editing/EditCommand.cpp:
        (WebCore::EditCommand::apply):
        (WebCore::EditCommand::unapply):
        (WebCore::EditCommand::reapply):
        (WebCore::EditCommand::setStartingSelection):
        (WebCore::EditCommand::setEndingSelection):
        (WebCore::EditCommand::setParent):
        * editing/EditCommand.h:
        (WebCore::EditCommand::isEditCommandComposition):
        * editing/Editor.cpp:
        (WebCore::dispatchEditableContentChangedEvents):
        (WebCore::Editor::appliedEditing):
        (WebCore::Editor::unappliedEditing):
        (WebCore::Editor::reappliedEditing):
        * editing/Editor.h:
        (WebCore::Editor::lastEditCommand):
        * editing/FrameSelection.cpp:
        (WebCore::FrameSelection::updateAppearance):
        * editing/IndentOutdentCommand.cpp:
        (WebCore::IndentOutdentCommand::outdentParagraph):
        * editing/InsertLineBreakCommand.cpp:
        (WebCore::InsertLineBreakCommand::doApply):
        * editing/InsertParagraphSeparatorCommand.cpp:
        (WebCore::InsertParagraphSeparatorCommand::doApply):
        * editing/TypingCommand.cpp:
        (WebCore::TypingCommand::lastTypingCommandIfStillOpenForTyping):
        * editing/TypingCommand.h:
        (WebCore::TypingCommand::shouldRetainAutocorrectionIndicator):

2011-12-14  Tony Chang  <tony@chromium.org>

        Fix compile on gcc on Mac.

        css/CSSStyleSelector.cpp:1254:166: error: unused parameter 'regionForStyling' [-Werror,-Wunused-parameter,3]
        css/CSSStyleSelector.cpp:1425:134: error: unused parameter 'regionForStyling' [-Werror,-Wunused-parameter,3]

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::styleForElement):
        (WebCore::CSSStyleSelector::pseudoStyleForElement):

2011-12-14  Brady Eidson  <beidson@apple.com>

        <rdar://problem/10576732> and https://bugs.webkit.org/show_bug.cgi?id=74533
        REGRESSION(r102619): Reproducible crash closing window with video + poster image inside an object element

        Reviewed by Darin Adler.

        Test: media/crash-closing-page-with-media-as-plugin-fallback.html

        Switch HTMLPlugInImageElement from using document activation callbacks to using the ActiveDOMObject
        mechanism which will prevent the unnecessary (and crashy) work at Document teardown:
        * html/HTMLPlugInImageElement.cpp:
        (WebCore::HTMLPlugInImageElement::HTMLPlugInImageElement):
        (WebCore::HTMLPlugInImageElement::canSuspend):
        (WebCore::HTMLPlugInImageElement::suspend):
        (WebCore::HTMLPlugInImageElement::resume):
        * html/HTMLPlugInImageElement.h:

2011-12-14  Adrienne Walker  <enne@google.com>

        [chromium] Compositor needs to set texture filtering on canvas layers
        https://bugs.webkit.org/show_bug.cgi?id=74530

        Reviewed by James Robinson.

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

2011-12-14  Tony Chang  <tony@chromium.org>

        Remove added calls to CSSStyleSelector to gain back another 2% in page cyclers
        https://bugs.webkit.org/show_bug.cgi?id=74537

        Reviewed by Ojan Vafai.

        In r102234, calls to initForRegionStyling() were added in CSSStyleSelector.
        There's still a 2% perf regression in chromium page cyclers, so try removing
        these calls.

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::styleForElement):
        (WebCore::CSSStyleSelector::pseudoStyleForElement):

2011-12-14  Jonathan Backer  <backer@chromium.org>

        [chromium] Plumb through flag for enabling partial swap
        https://bugs.webkit.org/show_bug.cgi?id=74513

        Reviewed by James Robinson.

        * page/Settings.h:
        (WebCore::Settings::setPartialSwapEnabled):
        (WebCore::Settings::partialSwapEnabled):
        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::initialize):
        * platform/graphics/chromium/cc/CCLayerTreeHost.h:
        (WebCore::CCSettings::CCSettings):

2011-12-14  Mike Reed  <reed@google.com>

        [skia] cache typeface in FontPlatformData
        https://bugs.webkit.org/show_bug.cgi?id=74415

        Reviewed by Stephen White.

        No new tests. Existing tests apply, this is just an optimization
        to avoid looking up the typeface on each drawText call.

        * platform/graphics/chromium/FontChromiumWin.cpp:
        (WebCore::TransparencyAwareFontPainter::TransparencyAwareGlyphPainter::drawGlyphs):
        (WebCore::Font::drawGlyphs):
        * platform/graphics/chromium/FontPlatformDataChromiumWin.cpp:
        (WebCore::createTypefaceFromHFont):
        (WebCore::FontPlatformData::FontPlatformData):
        (WebCore::FontPlatformData::operator=):
        (WebCore::FontPlatformData::~FontPlatformData):
        * platform/graphics/chromium/FontPlatformDataChromiumWin.h:
        (WebCore::FontPlatformData::typeface):
        (WebCore::FontPlatformData::lfQuality):
        (WebCore::FontPlatformData::hash):
        (WebCore::FontPlatformData::operator==):
        * platform/graphics/skia/SkiaFontWin.cpp:
        (WebCore::setupPaintForFont):
        (WebCore::paintSkiaText):
        * platform/graphics/skia/SkiaFontWin.h:

2011-12-14  Simon Fraser  <simon.fraser@apple.com>

        Make -webkit-filter animatable
        https://bugs.webkit.org/show_bug.cgi?id=68476

        Reviewed by Chris Marrin.
        
        Add -webkit-filter to the list of CSS properties that are animatable. Animate
        it like we do transforms, by looking for matching lists of filter functions.
        Each kind of filter operation has a blend() method that handles blending
        for that filter.

        Test: css3/filters/filter-animation.html

        * GNUmakefile.list.am: Add FilterOperation.cpp to the build.
        * Target.pri: Ditto
        * WebCore.gypi: Ditto
        * WebCore.vcproj/WebCore.vcproj: Ditto
        * WebCore.xcodeproj/project.pbxproj: Ditto
        * page/animation/AnimationBase.cpp:
        (WebCore::blendFunc): New blendFunc() for FilterOperations, which does per-filter blending.
        (WebCore::AnimationBase::ensurePropertyMap): Make PropertyWrapper for filters.
        (WebCore::AnimationBase::AnimationBase): Adjust initialization order.
        * page/animation/AnimationBase.h: Adjusted the member variable order to minimize padding.
        (WebCore::AnimationBase::filterFunctionListsMatch): Accessor for the flag.
        * page/animation/ImplicitAnimation.cpp:
        (WebCore::ImplicitAnimation::reset):
        (WebCore::ImplicitAnimation::validateTransformFunctionList): Adjust comment. The "is valid" terminology is confusing.
        (WebCore::ImplicitAnimation::checkForMatchingFilterFunctionLists): New method to check for matching lists
        of filter functions.
        * page/animation/ImplicitAnimation.h:
        * page/animation/KeyframeAnimation.cpp:
        (WebCore::KeyframeAnimation::KeyframeAnimation):
        (WebCore::KeyframeAnimation::checkForMatchingFilterFunctionLists): New method to check for matching lists
        of filter functions.
        * page/animation/KeyframeAnimation.h:
        * rendering/style/FilterOperation.cpp: Added.
        (WebCore::BasicColorMatrixFilterOperation::blend):
        (WebCore::BasicColorMatrixFilterOperation::passthroughAmount):
        (WebCore::BasicComponentTransferFilterOperation::blend):
        (WebCore::BasicComponentTransferFilterOperation::passthroughAmount): Different filters have
        different values for m_amount for the "passthrough" behavior. This method returns the appropriate value.
        (WebCore::GammaFilterOperation::blend):
        (WebCore::BlurFilterOperation::blend):
        (WebCore::DropShadowFilterOperation::blend):
        * rendering/style/FilterOperation.h:
        (WebCore::FilterOperation::blend):
        (WebCore::PassthroughFilterOperation::create): New "no-op" filter.
        (WebCore::PassthroughFilterOperation::operator==):
        (WebCore::PassthroughFilterOperation::PassthroughFilterOperation):
        * rendering/style/FilterOperations.cpp:
        (WebCore::FilterOperations::operationsMatch):
        * rendering/style/FilterOperations.h:

2011-12-14  Adam Klein  <adamk@chromium.org>

        Broaden support for mutation observation of attributes
        https://bugs.webkit.org/show_bug.cgi?id=74448

        Reviewed by Ryosuke Niwa.

        The previously-landed MutationObserver support for attributes was incomplete:
        it didn't support mutations related to Attr nodes (methods on Attrs,
        setAttributeNode/removeAttributeNode on Element, or methods on NamedNodeMap).

        This patch adds full support of mutation observation for all these cases,
        and adds test cases for all these situations.

        * dom/Attr.cpp:
        (WebCore::Attr::setValue): Enqueue a mutation record when Attr.value is set from JS.
        (WebCore::Attr::childrenChanged): Enqueue a mutation record when an Attr's value
        changes to due additions/removals of Text children.
        * dom/Element.cpp:
        (WebCore::Element::enqueueAttributesMutationRecordIfRequested): Previously a static,
        expose as part of Element's interface to allow it to be re-used by NamedNodeMap and Attr.
        (WebCore::Element::removeAttribute): Remove enqueue call now handled by NamedNodeMap.
        (WebCore::Element::setAttributeInternal): Fixup call of enqueueAttributesMutationRecordIfRequested.
        * dom/Element.h:
        * dom/NamedNodeMap.cpp:
        (WebCore::NamedNodeMap::setNamedItem): Enqueue a mutation record when an attribute
        is changed via Element.attributes.setNamedItem from JS.
        (WebCore::NamedNodeMap::removeNamedItem): Enqueue a mutation record when an
        attribute is removed, either via Element.attributes.removeNamedItem or Element.removeAttribute.

2011-12-14  Raymond Toy  <rtoy@google.com>

        * platform/audio/Distance.h (WebCore): 

        Incorrect calculation for DistanceEffect linearGain
        https://bugs.webkit.org/show_bug.cgi?id=72871

        Reviewed by Kenneth Russell.

        Tests still need to be written for all distance models.  This
        does not add a new API and just corrects an implementation error. 

        * platform/audio/Distance.cpp:
        (WebCore::DistanceEffect::linearGain): Implement correct
        linearGain function.  (Fix proposed by davidgaleano@hotmail.com.)
        * platform/audio/Distance.h: Add link to Open AL specification. 
        

2011-12-14  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: consider disabling network tracking while running the CPU profile.
        https://bugs.webkit.org/show_bug.cgi?id=74221

        The WebCore instrumentation on the backend affects the performance of inspected page.
        As the result the CPU profiler's stats data are far away from the reality.
        Solution: the profiler code will temporary disable the resource tracking on backend.
        Side effect: the resource tree gets out of sinc because it uses Network Agent's notifications for updating the resource tree.
        Solution: NetworkManager will report about the changes of the resource tracking state and ResourcePanel will re-fetch the resources tree.

        Reviewed by Pavel Feldman.

        * inspector/front-end/NetworkManager.js:
        (WebInspector.NetworkManager.prototype.enableResourceTracking.networkAgentEnabled):
        (WebInspector.NetworkManager.prototype.enableResourceTracking):
        (WebInspector.NetworkManager.prototype.disableResourceTracking.networkAgentDisabled):
        (WebInspector.NetworkManager.prototype.disableResourceTracking):
        (WebInspector.NetworkManager.prototype.inflightResourceForURL):
        * inspector/front-end/ProfileView.js:
        (WebInspector.CPUProfileType.prototype.buttonClicked):
        * inspector/front-end/ResourceTreeModel.js:
        (WebInspector.ResourceTreeModel):
        (WebInspector.ResourceTreeModel.prototype._onResourceTrackingEnabled):

2011-12-14  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Fix PlatformScreen::screenAvailableRect when there's no view widget
        https://bugs.webkit.org/show_bug.cgi?id=74520

        Reviewed by Martin Robinson.

        Use the default screen to get the available screen area instead of
        just returning an empty rectangle. This is useful for WebKit2,
        since there's no view widget in the web process.

        * platform/gtk/PlatformScreenGtk.cpp:
        (WebCore::screenAvailableRect):

2011-12-14  Eric Carlson  <eric.carlson@apple.com>

        Media url with fragment may not load
        https://bugs.webkit.org/show_bug.cgi?id=74443

        Reviewed by Darin Adler.

        Test: media/media-extension-with-fragment.html

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::loadResource): Pass the KURL to MediaPlayer, let it extract a
            String when it needs it.

        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::load): Take a KURL, not a String. Look for the file extension in the 
            last path component so we don't examine fragments and/or queries.
        * platform/graphics/MediaPlayer.h:

2011-12-14  Jacky Jiang  <zhajiang@rim.com>

        [BlackBerry] Remove some duplicate entries in Source/WebCore/PlatformBlackBerry.cmake
        https://bugs.webkit.org/show_bug.cgi?id=74484

        Reviewed by Daniel Bates.

        Trivial fix, so no new tests.

        * PlatformBlackBerry.cmake:

2011-12-14  Anders Carlsson  <andersca@apple.com>

        Add back the callOnMainThread overload that takes a WTF::Function
        https://bugs.webkit.org/show_bug.cgi?id=74512

        Reviewed by Darin Adler.

        Explicitly qualify the Function enum flag, since MSVC2005 is too stupid to disambiguate
        the Function class template and the enum flag.

        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::getOwnPropertySlot):
        (WebCore::JSDOMWindow::getOwnPropertyDescriptor):
        * bindings/js/JSHistoryCustom.cpp:
        (WebCore::JSHistory::getOwnPropertySlotDelegate):
        (WebCore::JSHistory::getOwnPropertyDescriptorDelegate):
        * bindings/js/JSLocationCustom.cpp:
        (WebCore::JSLocation::getOwnPropertySlotDelegate):
        (WebCore::JSLocation::getOwnPropertyDescriptorDelegate):

2011-12-14  Kenneth Russell  <kbr@google.com>

        Unreviewed, rolling out r102688.
        http://trac.webkit.org/changeset/102688
        https://bugs.webkit.org/show_bug.cgi?id=74220

        Under the hypothesis that it might be the cause of
        browser_tests and ui_tests crashes on Chromium canaries --
        will reland if not.

        * bindings/v8/V8Proxy.cpp:
        (WebCore::addMessageToConsole):
        (WebCore::logInfo):
        (WebCore::V8Proxy::reportUnsafeAccessTo):
        * bindings/v8/V8Proxy.h:
        * bindings/v8/custom/V8CustomXPathNSResolver.cpp:
        (WebCore::V8CustomXPathNSResolver::lookupNamespaceURI):

2011-12-14  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: DatabaseTableView should escape table name.
        https://bugs.webkit.org/show_bug.cgi?id=74503

        Reviewed by Pavel Feldman.

        Test: inspector/database-table-name-excaping.html

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

2011-12-14  Philippe Normand  <pnormand@igalia.com>

        [GStreamer] padTemplate leak in webkitwebaudiosrc
        https://bugs.webkit.org/show_bug.cgi?id=74495

        Reviewed by Martin Robinson.

        Use a GstPadTemplate smart pointer in webkit_web_audio_src_init to
        avoid a memory leak after the ghost pad creation.

        * platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.cpp:
        (webkit_web_audio_src_init):
        * platform/graphics/gstreamer/GRefPtrGStreamer.cpp:
        (WTF::adoptGRef):
        (WTF::GstPadTemplate):
        * platform/graphics/gstreamer/GRefPtrGStreamer.h:

2011-12-14  Julien Chaffraix  <jchaffraix@webkit.org>

        Crash in RenderBox::paintBoxDecorations when documentElement has no renderer
        https://bugs.webkit.org/show_bug.cgi?id=64284

        Reviewed by Ryosuke Niwa.

        Test: fast/dynamic/crash-paint-no-documentElement-renderer.html

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::paintBackground): Check the documentElement's
        renderer before using it which matches what RenderView does.

2011-12-14  Tom Sepez  <tsepez@chromium.org>

        DocumentLoader should ref its mainResourceLoader.
        https://bugs.webkit.org/show_bug.cgi?id=74424

        Reviewed by Adam Barth.

        Tests: platform/chromium/http/tests/security/mixedContent/insecure-iframe-in-main-frame-allowed.html
               platform/chromium/http/tests/security/mixedContent/insecure-iframe-in-main-frame-blocked.html

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::startLoadingMainResource):
        * loader/MainResourceLoader.cpp:
        (WebCore::MainResourceLoader::loadNow):

2011-12-14  Stephen White  <senorblanco@chromium.org>

        CSS Filters should support GPU acceleration
        https://bugs.webkit.org/show_bug.cgi?id=74441

        Reviewed by Darin Adler.

        Will be covered by existing CSS filters tests, when run in GPU mode.

        * rendering/FilterEffectRenderer.cpp:
        (WebCore::FilterEffectRenderer::prepare):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateOrRemoveFilterEffect):

2011-12-14  Brian Salomon  <bsalomon@google.com>

        [CHROMIUM/SKIA] Handle put[Un/Pre]multipliedImageData conversions in Skia rather than ImageBuffer
        https://bugs.webkit.org/show_bug.cgi?id=73953

        Reviewed by Stephen White.

        Tested by existing canvas2d layout tests.

        * platform/graphics/skia/ImageBufferSkia.cpp:
        (WebCore::putImageData):
        (WebCore::ImageBuffer::putUnmultipliedImageData):
        (WebCore::ImageBuffer::putPremultipliedImageData):

2011-12-14  Mary Wu  <mary.wu@torchmobile.com.cn>

        Remove SharedBufferBlackBerry.cpp from WebCore/platform/blackberry
        https://bugs.webkit.org/show_bug.cgi?id=74488

        Reviewed by Rob Buis.

        Remove dead code, no new tests.

        * platform/blackberry/SharedBufferBlackBerry.cpp: Removed.

2011-12-14  Kentaro Hara  <haraken@chromium.org>

        Use [Supplemental] IDL in WebSocket
        https://bugs.webkit.org/show_bug.cgi?id=74160

        Reviewed by Adam Barth.

        By using the [Supplemental] IDL, this patch moves declarations of WebSocket
        attributes from DOMWindow.idl to websocket/DOMWindowWebSocket.idl,
        which helps make WebSocket a self-contained module.

        No new tests, no change in behavior.
        Confirm that http/tests/websocket/* pass.

        * WebCore.gypi: Added DOMWindowWebSocket.idl.
        * page/DOMWindow.idl: Added the [Supplemented] IDL to WebSocket-related attributes. This [Supplemented] IDL will be removed after all platforms support the [Supplemental] IDL (See bug 73394 for more details).
        * websockets/DOMWindowWebSocket.idl: Added. Used the [Supplemental=DOMWindow] IDL. The attributes in this IDL file are treated as if they are described in DOMWindow.idl.

2011-12-14  Pierre Rossi  <pierre.rossi@gmail.com>

        Unreviewed fix. Broke qt minimal release compilation.

        * platform/qt/RenderThemeQtMobile.cpp:

2011-12-14  Allan Sandfeld Jensen  <allan.jensen@nokia.com>

        Add different salt to different types of selectors. So the CSS fast
        path can tell the different between tags and class attributes with
        otherwise identical values.
        https://bugs.webkit.org/show_bug.cgi?id=74284

        Reviewed by Antti Koivisto.

        * css/SelectorChecker.cpp:
        (WebCore::collectElementIdentifierHashes):
        (WebCore::collectDescendantSelectorIdentifierHashes):
        * css/SelectorChecker.h:

2011-12-14  Pierre Rossi  <pierre.rossi@gmail.com>

        [Qt] Mobile theme could use a little refresh
        https://bugs.webkit.org/show_bug.cgi?id=74293

        The look and feel of the "mobile theme" we're
        using in QtWebKit dates back to the maemo 5 days.
        This is an attempt at making it look less out of
        place, and also support progress and range.

        Reviewed by Kenneth Rohde Christiansen.

        No new tests, this is still not the default theme
        for tests.

        * DerivedSources.pri:
        * css/mobileThemeQt.css: Added.
        (input[type="submit"], select):
        (input[type="submit"]:disabled, input[type="submit"]:disabled:active, select:disabled, input[type="text"]:disabled):
        (input[type="submit"]:active):
        * platform/qt/RenderThemeQt.cpp:
        (WebCore::RenderThemeQt::extraDefaultStyleSheet):
        (WebCore::StylePainter::StylePainter):
        (WebCore::StylePainter::init):
        (WebCore::StylePainter::~StylePainter):
        * platform/qt/RenderThemeQt.h:
        * platform/qt/RenderThemeQtMobile.cpp:
        (WebCore::drawRectangularControlBackground):
        (WebCore::shrinkRectToSquare):
        (WebCore::StylePainterMobile::StylePainterMobile):
        (WebCore::StylePainterMobile::~StylePainterMobile):
        (WebCore::StylePainterMobile::drawCheckableBackground):
        (WebCore::StylePainterMobile::sizeForPainterScale):
        (WebCore::StylePainterMobile::drawChecker):
        (WebCore::StylePainterMobile::findCheckBox):
        (WebCore::StylePainterMobile::drawRadio):
        (WebCore::StylePainterMobile::findRadio):
        (WebCore::StylePainterMobile::drawMultipleComboButton):
        (WebCore::StylePainterMobile::drawSimpleComboButton):
        (WebCore::StylePainterMobile::getButtonImageSize):
        (WebCore::StylePainterMobile::findComboButton):
        (WebCore::StylePainterMobile::drawLineEdit):
        (WebCore::StylePainterMobile::drawCheckBox):
        (WebCore::StylePainterMobile::drawRadioButton):
        (WebCore::StylePainterMobile::drawPushButton):
        (WebCore::StylePainterMobile::drawComboBox):
        (WebCore::StylePainterMobile::drawProgress):
        (WebCore::StylePainterMobile::drawSliderThumb):
        (WebCore::RenderThemeQtMobile::paintButton):
        (WebCore::RenderThemeQtMobile::paintTextField):
        (WebCore::RenderThemeQtMobile::setPopupPadding):
        (WebCore::RenderThemeQtMobile::paintMenuList):
        (WebCore::RenderThemeQtMobile::paintMenuListButton):
        (WebCore::RenderThemeQtMobile::animationDurationForProgressBar):
        (WebCore::RenderThemeQtMobile::paintProgressBar):
        (WebCore::RenderThemeQtMobile::paintSliderTrack):
        (WebCore::RenderThemeQtMobile::paintSliderThumb):
        (WebCore::RenderThemeQtMobile::adjustSliderThumbSize):
        * platform/qt/RenderThemeQtMobile.h:

2011-12-14  Rakesh KN  <rakesh.kn@motorola.com>

        [Non-Mac] Change event should be fired when changing option by using keyboard.
        https://bugs.webkit.org/show_bug.cgi?id=74384

        Reviewed by Kent Tamura.

        Fire onchange event when option is changed using up/down/right/left/pageup/pagedown/home/end keys.

        Test: fast/forms/select/menulist-onchange-fired-with-key-up-down.html

        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::menuListDefaultEventHandler):
        Setting the DispatchChangeEvent selection option flag when the option is selected using
        up/down/right/left/pageup/pagedown/home/end keys.

2011-12-13  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: TreeOutline's is broken when li elements have padding-left different from 14px.
        https://bugs.webkit.org/show_bug.cgi?id=74445

        Reviewed by Pavel Feldman.

        * inspector/front-end/treeoutline.js:
        (TreeElement.prototype.isEventWithinDisclosureTriangle):

2011-12-13  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: [Regression] Scripts panel debug sidebar toolbar should not be scrolled out of the screen.
        https://bugs.webkit.org/show_bug.cgi?id=74447

        Reviewed by Pavel Feldman.

        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype.wasShown):
        * inspector/front-end/scriptsPanel.css:
        (#scripts-debug-toolbar):
        (#scripts-debug-sidebar-contents):

2011-12-14  Alexander Færøy  <alexander.faeroy@nokia.com>

        [Qt] DeviceOrientationClientMockQt should be removed in favor of DeviceOrientationClientMock
        https://bugs.webkit.org/show_bug.cgi?id=74417

        Reviewed by Simon Hausmann.

        Based on original patch by Kenneth Christiansen.

        Already covered by current tests.

        * dom/DeviceOrientationController.h:
        (WebCore::DeviceOrientationController::client):

2011-12-14  Jacky Jiang  <zhajiang@rim.com>

        [BlackBerry] Switch to libjpeg for decoding
        https://bugs.webkit.org/show_bug.cgi?id=74475

        Reviewed by Daniel Bates.

        Switch to cross platform JPEG image decoder for decoding as this keeps
        us inline with other ports and less to maintain.

        * PlatformBlackBerry.cmake:

2011-12-03  Philippe Normand  <pnormand@igalia.com>

        [GTK] Bad text rendering since r101343
        https://bugs.webkit.org/show_bug.cgi?id=73744

        Reviewed by Martin Robinson.

        * platform/graphics/freetype/FontPlatformDataFreeType.cpp:
        (WebCore::setCairoFontOptionsFromFontConfigPattern): Keep Cairo
        hint metrics unchanged for better visual font rendering results.

2011-12-13  Hajime Morrita  <morrita@chromium.org>

        Unreviewed attempt for fixing windows build.

        - Included <wtf/MathExtras.h> which defined portable version of lround().
        - Add some static_cast<> to suppress warnings.

        * platform/animation/AnimationUtilities.h:
        (WebCore::blend):

2011-12-13  Wei Charles  <charles.wei@torchmobile.com.cn>

        [BlackBerry] Add the new plugin files into the build system.
        https://bugs.webkit.org/show_bug.cgi?id=74483

        Reviewed by Daniel Bates.

        No new tests, just add new files to the build system.

        * PlatformBlackBerry.cmake:

2011-12-13  Yosifumi Inoue  <yosin@chromium.org>

        [Forms] Default selection of select(menulist) should not be disabled
        https://bugs.webkit.org/show_bug.cgi?id=74270

        Reviewed by Kent Tamura.

        This patch changes default selection of select(menulist) element to
          1. Selected option element. If there are multiple options which have
             selected state, we pick the largest index option up. (same as current)
          2. Non-disabled option element (new behavior)
          3. The first option if all options are disabled. (new behavior)

        Tests: fast/forms/select/menulist-disabled-option-expected.html
               fast/forms/select/menulist-disabled-option.html

        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::recalcListItems): Implement new logic for selection.

2011-12-13  Simon Fraser  <simon.fraser@apple.com>

        Share blend progress code
        https://bugs.webkit.org/show_bug.cgi?id=74464

        Reviewed by Dean Jackson.
        
        Lots of places in the code had copies of the animation interpolation
        logic "from + (to - from) * progress", in various forms.
        
        Coalesce all these into calls to a few new inline functions in a new
        AnimationUtilities.h header. Color and Length get their own blend fuctions
        in their respective headers.

        Covered by existing tests.

        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSGradientValue.cpp:
        * page/animation/AnimationBase.cpp:
        (WebCore::blendFunc):
        * platform/Length.h:
        (WebCore::Length::blend):
        * platform/animation/AnimationUtilities.h: Added.
        (WebCore::blend):
        * platform/graphics/Color.h:
        (WebCore::blend):
        * platform/graphics/transforms/PerspectiveTransformOperation.cpp:
        (WebCore::PerspectiveTransformOperation::blend):
        * platform/graphics/transforms/RotateTransformOperation.cpp:
        (WebCore::RotateTransformOperation::blend):
        * platform/graphics/transforms/ScaleTransformOperation.cpp:
        (WebCore::ScaleTransformOperation::blend):
        * platform/graphics/transforms/SkewTransformOperation.cpp:
        (WebCore::SkewTransformOperation::blend):
        * platform/graphics/transforms/TranslateTransformOperation.cpp:
        (WebCore::TranslateTransformOperation::blend):
        * svg/SVGLength.h:
        (WebCore::SVGLength::blend):
        * svg/SVGPathBlender.cpp:
        (WebCore::blendFloatPoint):
        (WebCore::SVGPathBlender::blendAnimatedDimensonalFloat):
        (WebCore::SVGPathBlender::blendArcToSegment):

2011-12-13  Mary Wu  <mary.wu@torchmobile.com.cn>

        Upstream 3 files into WebCore/platform/blackberry
        ClipboardBlackBerry.cpp/h, PasteboardBlackBerry.cpp
        https://bugs.webkit.org/show_bug.cgi?id=74381

        Reviewed by Rob Buis.

        Main contributor:
        Mike Fenton <mifenton@rim.com>

        Initial upstream, no new tests.

        * platform/blackberry/ClipboardBlackBerry.cpp: Added.
        * platform/blackberry/ClipboardBlackBerry.h: Added.
        * platform/blackberry/PasteboardBlackBerry.cpp: Added.

2011-12-13  James Robinson  <jamesr@chromium.org>

        Unreviewed, rolling out r102726.
        http://trac.webkit.org/changeset/102726
        https://bugs.webkit.org/show_bug.cgi?id=74154

        Does not compile on clang

        * platform/graphics/chromium/TiledLayerChromium.cpp:
        (WebCore::UpdatableTile::UpdatableTile):
        (WebCore::TiledLayerChromium::createTile):
        * platform/graphics/chromium/cc/CCLayerTilingData.cpp:
        (WebCore::CCLayerTilingData::addTile):
        (WebCore::CCLayerTilingData::takeTile):
        (WebCore::CCLayerTilingData::tileAt):
        * platform/graphics/chromium/cc/CCLayerTilingData.h:
        * platform/graphics/chromium/cc/CCTiledLayerImpl.cpp:
        (WebCore::DrawableTile::DrawableTile):
        (WebCore::CCTiledLayerImpl::createTile):

2011-12-13  Hajime Morrita  <morrita@chromium.org>

        Unreviewed, rolling out r102732.
        http://trac.webkit.org/changeset/102732

        The last fix makes no sense...

        * platform/graphics/chromium/cc/CCLayerTilingData.h:

2011-12-13  Hajime Morrita  <morrita@chromium.org>

        HTML details summary not working with form controls
        https://bugs.webkit.org/show_bug.cgi?id=74398

        Reviewed by Kent Tamura.

        Allowed HTMLSummaryElement to skip the toggle logic if the event
        target is a form control.

        Test: fast/html/details-click-controls.html

        * html/HTMLSummaryElement.cpp:
        (WebCore::isClickableControl):
        (WebCore::HTMLSummaryElement::defaultEventHandler):

2011-12-13  James Wei <james.wei@intel.com> 

        Optimize to not use pow() in the inner loop in AudioParamTimeline
        https://bugs.webkit.org/show_bug.cgi?id=73530

        Reviewed by Kenneth Russell.

        No new tests.

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

2011-12-13  Hajime Morrita  <morrita@chromium.org>

        Unreviewed Chromium-Mac build fix trial.

        * platform/graphics/chromium/cc/CCLayerTilingData.h:

2011-12-13  David Reveman  <reveman@chromium.org>

        [Chromium] Initialize Settings::m_perTileDrawingEnabled properly.
        https://bugs.webkit.org/show_bug.cgi?id=74476

        Reviewed by James Robinson.

        Add m_perTileDrawingEnabled(false) to WebCore::Settings initialize list.

        No new tests.

        * page/Settings.cpp:
        (WebCore::Settings::Settings):

2011-12-13  Anders Carlsson  <andersca@apple.com>

        Add a very bare-bones implementation of bind and Function to WTF
        https://bugs.webkit.org/show_bug.cgi?id=74462

        Reviewed by Sam Weinig.

        Add a forwarding header for Functional.h.

        * ForwardingHeaders/wtf/Functional.h: Added.

2011-12-13  Adrienne Walker  <enne@google.com>

        [chromium] Use HashMap<..., OwnPtr<Tile>> for compositor tilemap
        https://bugs.webkit.org/show_bug.cgi?id=74154

        Reviewed by James Robinson.

        After r102410 landed, it's now possible to properly use an OwnPtr to
        store tiles rather than hackily use a RefPtr.

        Covered by the compositing/ layout tests.

        * platform/graphics/chromium/TiledLayerChromium.cpp:
        (WebCore::UpdatableTile::create):
        (WebCore::UpdatableTile::UpdatableTile):
        (WebCore::TiledLayerChromium::createTile):
        * platform/graphics/chromium/cc/CCLayerTilingData.cpp:
        (WebCore::CCLayerTilingData::addTile):
        (WebCore::CCLayerTilingData::takeTile):
        (WebCore::CCLayerTilingData::tileAt):
        * platform/graphics/chromium/cc/CCLayerTilingData.h:
        * platform/graphics/chromium/cc/CCTiledLayerImpl.cpp:
        (WebCore::DrawableTile::create):
        (WebCore::DrawableTile::DrawableTile):
        (WebCore::CCTiledLayerImpl::createTile):

2011-12-13  Dmitry Lomov  <dslomov@google.com>

        https://bugs.webkit.org/show_bug.cgi?id=73691
        [JSC] Implement correct order of window.postMessage arguments.
        This change supports a new signature of windowPostMessage:
          postMessage(message, targetOrigin[, transferrables])
        as well as the legacy webkit-proprietary:
          postMessage(message, [transferrables,] targetOrigin)
        The latter is only supported for cases when targetOrigin is a String.

        Reviewed by David Levin.

        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::handlePostMessage):
        * page/DOMWindow.idl:

2011-12-13  Rafael Weinstein  <rafaelw@chromium.org>

        [MutationObservers] Avoid allocations if no observers are present
        https://bugs.webkit.org/show_bug.cgi?id=74423

        Reviewed by Ojan Vafai.

        This patch adds Node::mayHaveMutationObserversOfType which can be used to check
        if there are any observers at all which could receive a give type of mutation.
        MutationObserverInterestGroup uses this to possibly exit early (returning
        null) if no observers are present.

        No tests needed. This patch is just a refactor.

        * css/CSSMutableStyleDeclaration.cpp:
        * dom/CharacterData.cpp:
        (WebCore::CharacterData::dispatchModifiedEvent):
        * dom/ChildListMutationScope.cpp:
        (WebCore::ChildListMutationAccumulator::MutationAccumulationRouter::incrementScopingLevel):
        * dom/Element.cpp:
        (WebCore::enqueueAttributesMutationRecord):
        * dom/Node.cpp:
        (WebCore::Node::mayHaveMutationObserversOfType):
        * dom/Node.h:
        * dom/WebKitMutationObserver.cpp:
        (WebCore::MutationObserverInterestGroup::createIfNeeded):
        (WebCore::MutationObserverInterestGroup::createForChildListMutation):
        (WebCore::MutationObserverInterestGroup::createForCharacterDataMutation):
        (WebCore::MutationObserverInterestGroup::createForAttributesMutation):
        (WebCore::MutationObserverInterestGroup::MutationObserverInterestGroup):
        (WebCore::MutationObserverInterestGroup::enqueueMutationRecord):
        * dom/WebKitMutationObserver.h:

2011-12-13  Robin Dunn  <robin@alldunn.com>

        Don't make the bitmap transparent when using theme drawing
        calls that don't support transparent bitmaps.
        https://bugs.webkit.org/show_bug.cgi?id=74319

        Reviewed by Kevin Ollivier.

        * platform/wx/LocalDC.h:
        (WebCore::LocalDC::LocalDC):
        * platform/wx/RenderThemeWx.cpp:
        (WebCore::RenderThemeWx::paintButton):

2011-12-13  Tony Chang  <tony@chromium.org>

        Inline all of initForRegionStyling except for the rarely used part for non-null regions.
        https://bugs.webkit.org/show_bug.cgi?id=74435

        Reviewed by Andreas Kling.

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::initForRegionStyling): Inline setting of m_regionForStyling
        (WebCore::CSSStyleSelector::initRegionRules): Move code that only
        applies to CSSRegions into non-inlined code.
        * css/CSSStyleSelector.h:

2011-12-13  James Simonsen  <simonjam@chromium.org>

        Unreviewed, Chromium Mac build fix.

        * page/PerformanceTiming.h:

2011-12-13  Adam Klein  <adamk@chromium.org>

        Update variable names in NamedNodeMap methods to match WebKit style
        https://bugs.webkit.org/show_bug.cgi?id=74437

        Reviewed by Ojan Vafai.

        While reading these methods in preparation for a refactor, I found
        them hard to understand due to short or confusing variable names.
        I think the new names are much clearer, and match WebKit style.

        * dom/NamedNodeMap.cpp:
        (WebCore::NamedNodeMap::setNamedItem):
        (WebCore::NamedNodeMap::removeNamedItem):

2011-12-13  Xingnan Wang  <xingnan.wang@intel.com>

        Implement a function of vector multiply with SSE2 optimization in VectorMath.cpp.
        https://bugs.webkit.org/show_bug.cgi?id=74048

        Reviewed by Benjamin Poulain.

        The vmul is a function for an element-by-element multiply of two float vectors and we 
        get about 3.4x performance improvement with SSE2 optimization compared with the common 
        multiply.

        Use vmul in AudioBus::copyWithSampleAccurateGainValuesFrom().

        * platform/audio/AudioBus.cpp:
        (WebCore::AudioBus::copyWithSampleAccurateGainValuesFrom):
        * platform/audio/VectorMath.cpp:
        (WebCore::VectorMath::vmul):
        * platform/audio/VectorMath.h:

2011-12-13  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: [Regression] ResourceHeadersView sections should be expanded by default.
        https://bugs.webkit.org/show_bug.cgi?id=74434

        Reviewed by Pavel Feldman.

        * inspector/front-end/treeoutline.js:

2011-12-13  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Network item view does not correctly decode "+" in request parameters.
        https://bugs.webkit.org/show_bug.cgi?id=74422

        Reviewed by Pavel Feldman.

        Test: http/tests/inspector/network/request-parameters-decoding.html

        * inspector/front-end/ResourceHeadersView.js:
        (WebInspector.ResourceHeadersView.prototype._formatParameter):
        (WebInspector.ResourceHeadersView.prototype._refreshParms):

2011-12-13  Alok Priyadarshi  <alokp@chromium.org>

        [chromium] compositing/masks layout tests fail with accelerated drawing
        https://bugs.webkit.org/show_bug.cgi?id=72760

        Reviewed by Stephen White.

        Accelerated drawing path used to render bottom-up upright textures, which was opposite of what the software path rendered.
        The textures produced by the accelerated path was flipped along Y in the shader to make it upside down as expected by the compositor.
        This strategy does not work in case of masks which do not go through a shader and hence do not get flipped,
        which results in a case where texture in the render surface is top-down, while that in the mask is bottom-up.
        This patch makes accelerated drawing path render textures in the same orientation as the software path.
        LayerTextureUpdater::Orientation was added to support the difference in texture orientation between software and accelerated paths.
        Now that both paths produce textures in the same orientation, there is no need for it.

        No new tests needed. Covered by existing compositing tests.

        * platform/graphics/chromium/BitmapCanvasLayerTextureUpdater.h:
        * platform/graphics/chromium/BitmapSkPictureCanvasLayerTextureUpdater.h:
        * platform/graphics/chromium/FrameBufferSkPictureCanvasLayerTextureUpdater.cpp:
        (WebCore::FrameBufferSkPictureCanvasLayerTextureUpdater::updateTextureRect):
        * platform/graphics/chromium/FrameBufferSkPictureCanvasLayerTextureUpdater.h:
        * platform/graphics/chromium/ImageLayerChromium.cpp:
        * platform/graphics/chromium/LayerTextureUpdater.h:
        * platform/graphics/chromium/TiledLayerChromium.cpp:
        (WebCore::TiledLayerChromium::TiledLayerChromium):
        (WebCore::TiledLayerChromium::setLayerTreeHost):
        (WebCore::TiledLayerChromium::pushPropertiesTo):
        * platform/graphics/chromium/TiledLayerChromium.h:
        * platform/graphics/chromium/cc/CCTiledLayerImpl.cpp:
        (WebCore::CCTiledLayerImpl::drawTiles):
        * platform/graphics/chromium/cc/CCTiledLayerImpl.h:
        (WebCore::CCTiledLayerImpl::setSkipsDraw):

2011-12-09  Zhenyao Mo  <zmo@google.com>

        Implement GLES2 CheckFramebufferStatus() behavior
        https://bugs.webkit.org/show_bug.cgi?id=74228

        Reviewed by Kenneth Russell.

        * html/canvas/WebGLFramebuffer.cpp:
        (WebCore::WebGLFramebuffer::getColorBufferWidth): Add ColorBuffer to the function name - this is more accurate.
        (WebCore::WebGLFramebuffer::getColorBufferHeight): Ditto.
        (WebCore::WebGLFramebuffer::checkStatus): Implement full semantics of GLES2 glCheckFramebufferStatus().
        (WebCore::WebGLFramebuffer::onAccess): Call checkStatus().
        * html/canvas/WebGLFramebuffer.h:
        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::checkFramebufferStatus): Call checkStatus().
        (WebCore::WebGLRenderingContext::getFramebufferAttachmentParameter): No longer check framebuffer status.
        (WebCore::WebGLRenderingContext::getBoundFramebufferWidth): Call getColorBufferWidth.
        (WebCore::WebGLRenderingContext::getBoundFramebufferHeight): Call getColorBufferHeight.

2011-12-13  James Simonsen  <simonjam@chromium.org>

        [Navigation Timing] Use monotonicallyIncreasingTime() instead of currentTime()
        https://bugs.webkit.org/show_bug.cgi?id=58354

        Reviewed by Pavel Feldman.

        No new tests. Relies on existing webtiming-* tests.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/Document.cpp: Use monotonic times.
        (WebCore::Document::setReadyState):
        (WebCore::Document::finishedParsing):
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::didFinishLoadingImpl): Convert monotonicFinishTime to wall time if needed.
        * inspector/InspectorResourceAgent.cpp:
        (WebCore::buildObjectForTiming): Convert monotonic requestTime to wall time.
        (WebCore::buildObjectForResourceResponse): Plumbing for above.
        (WebCore::buildObjectForCachedResource): Ditto.
        (WebCore::InspectorResourceAgent::willSendRequest): Ditto.
        (WebCore::InspectorResourceAgent::didReceiveResponse): Ditto.
        (WebCore::InspectorResourceAgent::didLoadResourceFromMemoryCache): Ditto.
        * loader/DocumentLoadTiming.cpp: Added.
        (WebCore::DocumentLoadTiming::DocumentLoadTiming):
        (WebCore::DocumentLoadTiming::setNavigationStart): Determine reference time and root reference time.
        (WebCore::DocumentLoadTiming::addRedirect): Moved logic from MainResourceLoader.
        (WebCore::DocumentLoadTiming::convertMonotonicTimeToDocumentTime): Helper to compute wall time from monotonic time.
        * loader/DocumentLoadTiming.h: Turned into class. Made times monotonic.
        (WebCore::DocumentLoadTiming::setUnloadEventStart):
        (WebCore::DocumentLoadTiming::setUnloadEventEnd):
        (WebCore::DocumentLoadTiming::setRedirectStart):
        (WebCore::DocumentLoadTiming::setRedirectEnd):
        (WebCore::DocumentLoadTiming::setFetchStart):
        (WebCore::DocumentLoadTiming::setResponseEnd):
        (WebCore::DocumentLoadTiming::setLoadEventStart):
        (WebCore::DocumentLoadTiming::setLoadEventEnd):
        (WebCore::DocumentLoadTiming::setHasSameOriginAsPreviousDocument):
        (WebCore::DocumentLoadTiming::navigationStart):
        (WebCore::DocumentLoadTiming::unloadEventStart):
        (WebCore::DocumentLoadTiming::unloadEventEnd):
        (WebCore::DocumentLoadTiming::redirectStart):
        (WebCore::DocumentLoadTiming::redirectEnd):
        (WebCore::DocumentLoadTiming::redirectCount):
        (WebCore::DocumentLoadTiming::fetchStart):
        (WebCore::DocumentLoadTiming::responseEnd):
        (WebCore::DocumentLoadTiming::loadEventStart):
        (WebCore::DocumentLoadTiming::loadEventEnd):
        (WebCore::DocumentLoadTiming::hasCrossOriginRedirect):
        (WebCore::DocumentLoadTiming::hasSameOriginAsPreviousDocument):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::stopLoading):
        (WebCore::FrameLoader::commitProvisionalLoad):
        (WebCore::FrameLoader::continueLoadAfterWillSubmitForm):
        (WebCore::FrameLoader::loadProvisionalItemFromCachedPage):
        * loader/MainResourceLoader.cpp:
        (WebCore::MainResourceLoader::continueAfterNavigationPolicy):
        (WebCore::MainResourceLoader::willSendRequest): Moved logic to DocumentLoadTiming.
        (WebCore::MainResourceLoader::didReceiveData): Use monotonic time.
        (WebCore::MainResourceLoader::didFinishLoading): Ditto.
        (WebCore::MainResourceLoader::load):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::dispatchLoadEvent):
        * page/DOMWindow.h: Removed dispatchTimedEvent. It doesn't really help in the new model.
        * page/PerformanceNavigation.cpp:
        (WebCore::PerformanceNavigation::redirectCount):
        * page/PerformanceTiming.cpp: Removed skew correction code. This should never happen now.
        (WebCore::PerformanceTiming::navigationStart):
        (WebCore::PerformanceTiming::unloadEventStart):
        (WebCore::PerformanceTiming::unloadEventEnd):
        (WebCore::PerformanceTiming::redirectStart):
        (WebCore::PerformanceTiming::redirectEnd):
        (WebCore::PerformanceTiming::fetchStart):
        (WebCore::PerformanceTiming::responseEnd):
        (WebCore::PerformanceTiming::domLoading):
        (WebCore::PerformanceTiming::domInteractive):
        (WebCore::PerformanceTiming::domContentLoadedEventStart):
        (WebCore::PerformanceTiming::domContentLoadedEventEnd):
        (WebCore::PerformanceTiming::domComplete):
        (WebCore::PerformanceTiming::loadEventStart):
        (WebCore::PerformanceTiming::loadEventEnd):
        (WebCore::PerformanceTiming::resourceLoadTimeRelativeToAbsolute): Used for ResourceLoadTiming.
        (WebCore::PerformanceTiming::monotonicTimeToIntegerMilliseconds): Used for DocumentTiming and DocumentLoadTiming.
        * page/PerformanceTiming.h:
        * platform/network/ResourceLoadTiming.cpp:
        (WebCore::ResourceLoadTiming::convertResourceLoadTimeToDocumentTime):
        * platform/network/ResourceLoadTiming.h: Added helper function to convert to wall times. Added instructions for use.

2011-12-13  Adam Klein  <adamk@chromium.org>

        Reduce code duplication in Element::setAttribute methods
        https://bugs.webkit.org/show_bug.cgi?id=74425

        Reviewed by Ryosuke Niwa.

        Two overloads of Element::setAttribute share almost all their code,
        including tricky logic around updating the appropriate Attribute and
        Attr objects and notifying the Inspector and MutationObservers.

        This patch puts the common logic in a new setAttributeInternal method
        which is called by the other two.

        No new tests, refactoring only.

        * dom/Element.cpp:
        (WebCore::Element::setAttribute):
        (WebCore::Element::setAttributeInternal):
        * dom/Element.h:

2011-12-13  Brady Eidson  <beidson@apple.com>

        <http://webkit.org/b/74420> Disable deprecation warnings around more code where we 
        cannot easily switch away from the deprecated APIs.

        Reviewed by Mark Rowe.

        * bindings/objc/DOMInternal.mm:
        * bridge/objc/objc_instance.mm:

2011-12-12  Robert Hogan  <robert@webkit.org>

        CSS 2.1 failure: eof-002.htm fails
        https://bugs.webkit.org/show_bug.cgi?id=74309

        Reviewed by Dean Jackson.

        Test: css2.1/20110323/eof-002-expected.html

        * css/CSSGrammar.y: Treat EOF during a function expression with an open parenthesis as a close parenthesis.

2011-12-13  Adam Klein  <adamk@chromium.org>

        V8Proxy cleanup: replace custom logging methods with standard WebCore calls
        https://bugs.webkit.org/show_bug.cgi?id=74220

        Reviewed by Adam Barth.

        * bindings/v8/V8Proxy.cpp:
        (WebCore::V8Proxy::reportUnsafeAccessTo):
        * bindings/v8/V8Proxy.h:
        * bindings/v8/custom/V8CustomXPathNSResolver.cpp:
        (WebCore::V8CustomXPathNSResolver::lookupNamespaceURI):

2011-12-13  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Get rid of layering violations in includes

        WebKit/qt/API and WebKit/qt/WebCoreSupport should not be included
        in the webcore.prf, but rather in each target that specificly needs
        headers in these location. We used to include them directly in webcore
        since we had layering violations between WebCore and WebKit, but now
        that they are gone there's no reason to do that.

        Reviewed by Simon Hausmann.

        * bridge/qt/qt_instance.cpp:
        * platform/graphics/qt/GraphicsContext3DQt.cpp:
        * platform/graphics/qt/ImageQt.cpp:
        * platform/network/qt/QNetworkReplyHandler.cpp:
        * platform/network/qt/ResourceHandleQt.cpp:
        * platform/qt/CookieJarQt.cpp:
        * platform/qt/RenderThemeQStyle.cpp:
        * platform/qt/RenderThemeQt.cpp:

2011-12-13  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Add scripts navigator sidebar to scripts panel.
        https://bugs.webkit.org/show_bug.cgi?id=73086

        Reviewed by Pavel Feldman.

        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * inspector/compile-front-end.sh:
        * inspector/front-end/Images/domain.png: Added.
        * inspector/front-end/JavaScriptSourceFrame.js:
        (WebInspector.JavaScriptSourceFrame.prototype.suggestedFileName):
        * inspector/front-end/ScriptsNavigator.js: Added.
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype._uiSourceCodeAdded.get if):
        (WebInspector.ScriptsPanel.prototype._uiSourceCodeRemoved):
        (WebInspector.ScriptsPanel.prototype._addOptionToFilesSelect):
        (WebInspector.ScriptsPanel.prototype._reset):
        (WebInspector.ScriptsPanel.prototype._removeSourceFrame):
        (WebInspector.ScriptsPanel.prototype._uiSourceCodeReplaced):
        (WebInspector.ScriptsPanel.prototype._sourceFrameLoaded):
        (WebInspector.ScriptsPanel.prototype._updateExecutionLine):
        (WebInspector.ScriptsPanel.prototype._scriptSelectedInNavigator):
        (WebInspector.ScriptsPanel.prototype._createDebugToolbar):
        * inspector/front-end/Settings.js:
        * inspector/front-end/TabbedPane.js:
        (WebInspector.TabbedPane.prototype.appendTab):
        (WebInspector.TabbedPane.prototype.selectTab):
        (WebInspector.TabbedPane.prototype.highlightLine):
        (WebInspector.TabbedPane.prototype.elementsToRestoreScrollPositionsFor):
        * inspector/front-end/UISourceCode.js:
        (WebInspector.UISourceCode.prototype.get domain):
        (WebInspector.UISourceCode.prototype.get folderName):
        (WebInspector.UISourceCode.prototype.get displayName):
        (WebInspector.UISourceCode.prototype._parseURL):
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/inspector.css:
        (.tabbed-pane):
        (.tabbed-pane-content):
        * inspector/front-end/inspector.html:
        * inspector/front-end/networkPanel.css:
        * inspector/front-end/scriptsPanel.css:
        (#scripts-navigator-resizer-widget):
        (.scripts-navigator-domain-tree-item .icon):
        (.scripts-navigator-folder-tree-item .icon):
        (.scripts-navigator-script-tree-item .icon):
        (.scripts.panel .navigator):
        (#scripts-navigator-tabbed-pane .tabbed-pane-header):
        (#scripts-navigator-tabbed-pane .tabbed-pane-content):
        (.scripts.panel .navigator li):
        (.scripts.panel .navigator :focus li.selected):
        (.scripts.panel .navigator li.selected .selection):
        (.scripts.panel .navigator :focus li.selected .selection):
        (.scripts.panel .navigator .icon):
        (.scripts.panel .base-navigator-tree-element-title):
        * inspector/front-end/treeoutline.js:
        (TreeOutline):
        (TreeOutline.prototype.appendChild):

2011-12-12  Andreas Kling  <kling@webkit.org>

        CollectionCache: Remove unused copy constructor and make it noncopyable.
        <http://webkit.org/b/74378>

        Reviewed by Simon Hausmann.

        * html/CollectionCache.cpp:
        * html/CollectionCache.h:

2011-12-13  Jarred Nicholls  <jarred@sencha.com>

        XHR should use m_responseTypeCode internally to be consistent with WebKit coding style
        https://bugs.webkit.org/show_bug.cgi?id=74330

        Reviewed by Alexey Proskuryakov.

        No new tests needed, no behavioral changes.

        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::responseText):
        (WebCore::XMLHttpRequest::responseXML):
        (WebCore::XMLHttpRequest::responseBlob):
        (WebCore::XMLHttpRequest::didReceiveData):
        * xml/XMLHttpRequest.h:
        (WebCore::XMLHttpRequest::asBlob):

2011-12-13  Kentaro Hara  <haraken@chromium.org>

        Use the [Supplemental] IDL for webaudio attributes in Chromium
        https://bugs.webkit.org/show_bug.cgi?id=73394

        Reviewed by Adam Barth.

        - Overview: Using the [Supplemental] IDL, this patch moves the attribute
        declarations of webaudio from DOMWindow.idl into a new IDL file
        webaudio/DOMWindowWebAudio.idl, which helps make webaudio a self-contained
        feature (aka a module).

        - This patch changes the build flow of WebCore.gyp as follows:

            Previous build flow:
                foreach $idl (all IDL files) {
                    generate-bindings.pl depends on $idl;
                    generate-bindings.pl reads $idl;
                    generate-bindings.pl generates .h and .cpp files for $idl;
                }

            New build flow (See the discussions in bug 72138 for more details):
                resolve-supplemental.pl depends on all IDL files;
                resolve-supplemental.pl reads all IDL files;
                resolve-supplemental.pl resolves the dependency of [Supplemental=XXXX];
                resolve-supplemental.pl outputs supplemental_dependency.tmp;
                foreach $idl (all IDL files) {
                    generate-bindings.pl depends on $idl and supplemental_dependency.tmp;
                    generate-bindings.pl reads $idl;
                    generate-bindings.pl reads supplemental_dependency.tmp;
                    generate-bindings.pl generates .h and .cpp files for $idl, including all attributes in IDL files whilementing $idl;
                }

        - This patch introduces a temporary IDL, [Supplemented]. The [Supplemented] IDL
        will be removed after build scripts for all platforms support the [Supplemental] IDL.
        The motivation for the [Supplemented] IDL is as follows:

        In order to support the [Supplemental] IDL, we need to
        (1) run resolve-supplemental.pl and generate supplemental_dependency.tmp
        (2) and run generate-bindings.pl with the supplemental_dependency.tmp.

        This build flow requires a change on the following build scripts,
        but changing all the build scripts all at once without any regression is too difficult:

            - DerivedSources.make
            - DerivedSources.pri
            - GNUmakefile.am
            - PlatformBlackBerry.cmake
            - UseJSC.cmake
            - UseV8.cmake
            - WebCore.vcproj/MigrateScripts
            - WebCore.vcproj/WebCore.vcproj
            - bindings/gobject/GNUmakefile.am
            - WebCore.gyp/WebCore.gyp

        Thus, we are planning to change the build scripts one by one, which implies that
        we need to allow the temporary state in which some build scripts support [Supplemental] IDL
        but others do not. To accomplish this, we introduce a temporary IDL, [Supplemented].
        The [Supplemented] IDL on an attribute means that the attribute is marked with [Supplemental]
        in another IDL file somewhere, like this:

            DOMWindowWebAudio.idl:
                interface [
                    Supplemental=DOMWindow
                ] DOMWindowWebAudio {
                    attribute attr1;
                    attribute attr2;
                };

            DOMWindow.idl:
                interface [
                ] DOMWindow {
                    attribute [Supplemented] attr1; // This line will be removed after all build scripts support the [Su IDL
                    attribute [Supplemented] attr2; // This line will be removed after all build scripts support the [Su IDL.
                    attribute attr3;
                    attribute attr4;
                };

        Assuming these IDL files, this patch implements the following logic in generate-bindings.pl:

            - If a given build script supports the [Supplemental] IDL,
            generate-bindings.pl ignores all attributes with the [Supplemented] IDL.
            - Otherwise, generate-bindings.pl treats all attributes with the [Supplemented] IDL
            as normal attributes and instead ignores all attributes with the [Supplemental] IDL
            (i.e. generate-bindings.pl generates nothing from the IDL file with the [Supplemental] IDL).

        Tests: webaudio/*

        * WebCore.gyp/WebCore.gyp: Describes the build flow that I described above.
        * WebCore.gyp/scripts/action_derivedsourcesallinone.py:
        (main): Reads the IDL file names from the input file (i.e. supplemental_dependency.tmp),
        which are described at the first column of each line in the input file.
        If the file name is a "/cygdrive/c/..."-style path, it is converted to a "C:\cygwin\..."-style
        path by the cygpath command.
        * WebCore.gypi: Added DOMWindowWebAudio.idl.
        * bindings/scripts/generate-bindings.pl: As a temporary solution, if the platform does not
        support the [Supplemental] IDL, the perl script ignores the [Supplemental] IDL and instead
        uses the [Supplemented] IDL. Otherwise, the perl script ignores the [Supplemented] IDL and
        instead uses the [Supplemental] IDL.
        Added the --additionalIdlFilesList option to specify the IDL files that are not listed in
        supplemental-dependency.tmp but should generate .h and .cpp files.
        * page/DOMWindow.idl: Added the [Supplemented] IDL to webaudio-related attributes.
        As I described above, the [Supplemented] IDL will be removed after all platforms support
        the [Supplemental] IDL.
        * webaudio/DOMWindowWebAudio.idl: Added. Describes the [Supplemental=DOMWindow] IDL.
        The attributes in this IDL file should be treated as if they are written in DOMWindow.idl.

2011-12-13  Yosifumi Inoue  <yosin@chromium.org>

        RenderTheme should have a function for disabled text color adjustment
        https://bugs.webkit.org/show_bug.cgi?id=74143

        Change disabledTextColor to private method.

        Reviewed by Kent Tamura.

        No new tests / existing tests cover this change.

        * rendering/RenderThemeChromiumMac.h: Change disabledTextColor to private.
        * rendering/RenderThemeChromiumSkia.h: Change disabledTextColor to private.

2011-12-12  Daniel Bates  <dbates@webkit.org>

        Unreviewed, rolling out r102656.
        http://trac.webkit.org/changeset/102656
        https://bugs.webkit.org/show_bug.cgi?id=74313

        Broke the Mac, Windows and WinCairo builds. We need to look
        into this patch some more.

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

2011-12-12  Konrad Piascik  <kpiascik@rim.com>

        2011-12-12  Konrad Piascik  <kpiascik@rim.com>

        Implement the JavaScriptCore bindings for eventListenerHandlerLocation
        https://bugs.webkit.org/show_bug.cgi?id=74313

        Reviewed by Geoffrey Garen.

        Open any page in Web Inspector and look at the event listeners. They should now
        link to the script which created them.

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

2011-12-12  Yosifumi Inoue  <yosin@chromium.org>

        RenderTheme should have a function for disabled text color adjustment
        https://bugs.webkit.org/show_bug.cgi?id=74143

        Reviewed by Kent Tamura.

        No new tests / existing tests cover this change.

        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::adjustInnerTextStyle): Use RenderTheme::disabledTextColor instead of PLATFORM wraped static function. 
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::disabledTextColor): Moved from RenderTextControl.cpp. This method implements for non-Chromium color.
        * rendering/RenderTheme.h: Add new virtual method disabledTextColor.
        * rendering/RenderThemeChromiumMac.h: Implementation of RenderTheme::disabledTextColor for Chrimium Mac.
        * rendering/RenderThemeChromiumSkia.h: Implementation of RenderTheme::disabledTextColor for Chrimium.

2011-12-12  Kenneth Russell  <kbr@google.com>

        Unreviewed, rolling out r102648.
        http://trac.webkit.org/changeset/102648
        https://bugs.webkit.org/show_bug.cgi?id=74313

        Broke the Snow Leopard and Windows builds

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

2011-12-12  Andreas Kling  <kling@webkit.org>

        Resizing Cappuccino is very laggy on WebKit since Safari 5.1
        <http://webkit.org/b/71354> and <rdar://problem/10565998>

        Reviewed by Anders Carlsson.

        * WebCore.exp.in: Export FloatPoint(const NSPoint&)

2011-12-12  Jarred Nicholls  <jarred@sencha.com>

        [Qt] QTKIT-based video support must target OS X 10.5 or higher
        https://bugs.webkit.org/show_bug.cgi?id=74294

        WebCore on OS X Lion fails to build when QTKIT video support is enabled, unless a
        deployment target of 10.5+ is specified explicitly.

        Reviewed by Noam Rosenthal.

        No new tests as this is a build issue.

        * Target.pri:

2011-12-12  Luke Macpherson   <macpherson@chromium.org>

        Implement CSS text-decoration property in CSSStyleApplyProperty.
        https://bugs.webkit.org/show_bug.cgi?id=74258

        Reviewed by Andreas Kling.

        No new tests / refactoring only.

        * css/CSSStyleApplyProperty.cpp:
        (WebCore::ApplyPropertyTextDecoration::applyValue):
        (WebCore::ApplyPropertyTextDecoration::createHandler):
        (WebCore::CSSStyleApplyProperty::CSSStyleApplyProperty):
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):

2011-12-12  Adrienne Walker  <enne@google.com>

        iframe fails to scroll in composited page
        https://bugs.webkit.org/show_bug.cgi?id=72682

        Reviewed by Simon Fraser.

        FrameView::scrollContentsSlowPath only was catching the case where a
        child iframe had a composited parent. Now detect if the child iframe
        has any composited ancestor.

        Test: compositing/iframes/scroll-grandchild-iframe.html

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

2011-12-12  Konrad Piascik  <kpiascik@rim.com>

        Implement the JavaScriptCore bindings for eventListenerHandlerLocation
        https://bugs.webkit.org/show_bug.cgi?id=74313

        Reviewed by Geoffrey Garen. 

        Open any page in Web Inspector and look at the event listeners. They should now
        link to the script which created them.

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

2011-12-12  Erik Arvidsson  <arv@chromium.org>

        [V8] CodeGeneratorV8.pm does not correctly work with inherited HasIndexGetter
        https://bugs.webkit.org/show_bug.cgi?id=74027

        Reviewed by Adam Barth.

        Instead of having to write a custom indexer when the interface has an inherited indexer
        we get the signature from the super interface.

        Tested by existing tests.

        * Target.pri: Remove V8DOMSettableTokenListCustom.cpp and V8WebKitCSSFilterValueCustom.cpp.
        * UseV8.cmake: Ditto.
        * WebCore.gypi: Ditto.
        * bindings/scripts/CodeGenerator.pm:
        (FindSuperMethod): Returns the first matching function in one of the ancestor interfaces.
        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateImplementationIndexer): If the current interface has no indexer try to find an
                                         indexer in one of the super interfaces.
        (GenerateImplementationNamedPropertyGetter): Ditto for named property getter.
        * bindings/v8/custom/V8DOMSettableTokenListCustom.cpp: Removed.
        * bindings/v8/custom/V8WebKitCSSFilterValueCustom.cpp: Removed.

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

        Make it possible to substitute a different CALayer implementation for the main root layer
        https://bugs.webkit.org/show_bug.cgi?id=74369

        Reviewed by Anders Carlsson.
        
        Some platforms may wish to have the main root layer (which corresponds with
        the main frame's RenderView's layer) implemented by a custom platform layer,
        for example to contain a cache of tiles.
        
        Make this possible on Mac by adding a new method to GraphicsLayerClient(),
        and implementing it in RenderLayerBacking. This new behavior is not yet enabled.
        
        Also clean up some WebLayer/WebTiledLayer code.

        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/GraphicsLayerClient.h:
        (WebCore::GraphicsLayerClient::shouldUseTileCache): New client method that indicates that the GraphicsLayer
        should host a tile cache layer instead of a normal layer.
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::GraphicsLayerCA): Ask the client, if any, whether to create a tile cache layer.
        * platform/graphics/ca/PlatformCALayer.h:
        * platform/graphics/ca/mac/PlatformCALayerMac.mm: NSClassFromString(@"CATransformLayer") was for Leopard;
        we can just use the classname now. Handle LayerTypeTileCacheLayer.
        (PlatformCALayer::PlatformCALayer):
        * platform/graphics/ca/mac/WebTileCacheLayer.h: Copied from Source/WebCore/platform/graphics/mac/WebLayer.h.
        * platform/graphics/ca/mac/WebTileCacheLayer.mm: Copied from Source/WebCore/platform/graphics/mac/WebLayer.h.
        * platform/graphics/mac/WebLayer.h: Remove the setLayerNeedsDisplayInRect() hackery.
        * platform/graphics/mac/WebLayer.mm: setLayerNeedsDisplayInRect() tried to share code between WebLayer and WebTiledLayer
        by using Obj-C runtime methods to find the superclass. This causes infinite recursion if Web[Tiled]Layer is subclassed,
        so remove it.
        (-[WebLayer setNeedsDisplayInRect:]): Code moved here from setLayerNeedsDisplayInRect.
        * platform/graphics/mac/WebTiledLayer.mm:
        (-[WebTiledLayer setNeedsDisplayInRect:]): Code copied here from setLayerNeedsDisplayInRect.
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::RenderLayerBacking): Find out, and cache if we're the main frame's layer.
        (WebCore::RenderLayerBacking::shouldUseTileCache): Return m_usingTiledCacheLayer, which is always false for now.
        (WebCore::RenderLayerBacking::createPrimaryGraphicsLayer): Use m_isMainFrameRenderViewLayer.
        (WebCore::RenderLayerBacking::paintingGoesToWindow): The tile cache layer needs to paint itself.
        * rendering/RenderLayerBacking.h:
        * rendering/RenderLayerCompositor.h: m_compositeForFixedPosition was unused.

2011-12-12  Ryosuke Niwa  <rniwa@webkit.org>

        REGRESSION(r102357): respondToUnappliedEditing exits early for CreateLinkCommand
        https://bugs.webkit.org/show_bug.cgi?id=74356

        Reviewed by Enrica Casucci.

        The problem was that isCreateLinkCommand was called on EditCommandComposition by respondToUnappliedEditing.
        Fixed the bug by propagating the value of isCreteLinkCommand from CompositeEditCommand to
        EditCommandComposition via wasCreateLinkCommand.

        Also move isCreateLinkCommand from EditCommand to CompositeEditCommand to prevent this mistake in the future.

        * editing/CompositeEditCommand.cpp:
        (WebCore::EditCommandComposition::create):
        (WebCore::EditCommandComposition::EditCommandComposition):
        (WebCore::CompositeEditCommand::ensureComposition):
        (WebCore::CompositeEditCommand::isCreateLinkCommand):
        * editing/CompositeEditCommand.h:
        (WebCore::EditCommandComposition::wasCreateLinkCommand):
        * editing/SpellingCorrectionController.cpp:
        (WebCore::SpellingCorrectionController::respondToUnappliedEditing):
        * editing/SpellingCorrectionController.h:

2011-12-12  Mihnea Ovidenie  <mihnea@adobe.com>

        [CSSRegions]Revert RenderObject::style() to its state before region styling
        https://bugs.webkit.org/show_bug.cgi?id=74315

        Reviewed by Tony Chang.

        * rendering/RenderObject.h:
        (WebCore::RenderObject::style):

2011-12-12  Adam Klein  <adamk@chromium.org>

        Don't crash in StyleAttributeMutationScope if the style declaration's element has been GCed
        https://bugs.webkit.org/show_bug.cgi?id=74321

        Reviewed by Ryosuke Niwa.

        In r101101, Rafael Weinstein added code to CSSMutableStyleDeclaration.cpp
        which depended on isInlineStyleDeclaration returning true iff the
        element it pointed to was non-null (it will be nulled-out if the
        element is garbage collected).

        Then, in r101172, Andreas Kling changed the semantics so that
        isInlineStyleDeclaration only described the type of the declaration,
        not the state of the related element.

        This change updates Rafael's code with an explicit check that the
        element is still alive.

        Test: fast/dom/css-inline-style-declaration-crash.html

        * css/CSSMutableStyleDeclaration.cpp:

2011-12-12  Chris Fleizach  <cfleizach@apple.com>

        AX: aria-hidden inheritance broken when applying to some descendants
        https://bugs.webkit.org/show_bug.cgi?id=73940

        Reviewed by Darin Adler.

        When adding children, we were not updating the children cache for direct AX descendants.
        This meant that toggling aria-hidden could result in a stale cache where elements would not be reachable.

        Making this fix also exposed a problem in AccessibilityTable where the AccessibilityHeaderObject was not
        being managed correctly as a mock element.

        Test: platform/mac/accessibility/aria-hidden-changes-for-non-ignored-elements.html

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::addChildren):
        * accessibility/AccessibilityTable.cpp:
        (WebCore::AccessibilityTable::clearChildren):
        (WebCore::AccessibilityTable::headerContainer):
        * accessibility/AccessibilityTable.h:

2011-12-12  Jeremy Apthorp  <jeremya@chromium.org>

        When the mouse is dragged out of an :active element, it should lose :hover.
        https://bugs.webkit.org/show_bug.cgi?id=57206

        Reviewed by Ryosuke Niwa.

        Test: fast/css/hover-active-drag.html

        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleMouseMoveEvent): Don't mark mouse-drag hit tests read-only, since they no longer are.
        (WebCore::EventHandler::dragSourceEndedAt): Send a hit test request when the mouse goes up after a drag, so
        RenderLayer has a chance to update the hover/active status.
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateHoverActiveState): Only allow the :active state to change on mouse down or mouse up.

2011-12-12  Kenneth Russell  <kbr@google.com>

        Unreviewed Windows build fix after http://trac.webkit.org/changeset/102619 .
        Remove OVERRIDE specifier from virtual destructor.

        * html/HTMLPlugInImageElement.h:

2011-12-12  Ryosuke Niwa  <rniwa@webkit.org>

        WebKit code shouldn't be calling applyCommand directly
        https://bugs.webkit.org/show_bug.cgi?id=74337

        Reviewed by Darin Adler.

        Make WebKit-layer code call Editor::replaceSelectionWithFragment and Editor::replaceSelectionWithText
        instead of manually creating and applying ReplaceSelectionCommand.

        The only behavioral difference is that new code will end up checking for spell checks. However, this
        difference appears to be unintentional since the code predates http://trac.webkit.org/changeset/73886,
        which introduced an invocation of spellcheck code.

        Unfortunately no tests since there doesn't seem to be anyway to test this change.

        * WebCore.exp.in:
        * editing/EditCommand.cpp:
        (WebCore::applyCommand):
        * editing/EditCommand.h:
        * editing/Editor.h:

2011-11-26  Adam Barth  <abarth@webkit.org>

        Remove platform/audio/fftw
        https://bugs.webkit.org/show_bug.cgi?id=73163

        Reviewed by Eric Seidel.

        The FFTW library is GPL, not LGPL, like WebKit.  This patch removes the
        integration with the library so folks who use WebAudio don't
        accidentially violate the GPL by linking in FFTW.

        * GNUmakefile.am:
        * WebCore.gyp/WebCore.gyp:
        * WebCore.gypi:
        * platform/audio/FFTFrame.h:
        * platform/audio/FFTFrameStub.cpp:
        * platform/audio/fftw: Removed.
        * platform/audio/fftw/FFTFrameFFTW.cpp: Removed.

2011-12-12  Kenneth Russell  <kbr@google.com>

        COMPILE_ASSERT in CSSStyleSelector.cpp doesn't compile on Windows
        https://bugs.webkit.org/show_bug.cgi?id=74327

        Unreviewed build fix. True fix should follow under above bug.

        * css/CSSStyleSelector.cpp:

2011-12-12  David Grogan  <dgrogan@chromium.org>

        Fix compilation error when !ENABLE(WORKERS)
        https://bugs.webkit.org/show_bug.cgi?id=74029

        Reviewed by Yury Semikhatsky.

        * storage/IDBFactory.cpp:
        (WebCore::IDBFactory::open): add #if ENABLE(WORKERS) guard

2011-12-12  Brady Eidson  <beidson@apple.com>

        Page cache should support pages with plugins.
        <rdar://problem/5190122> and https://bugs.webkit.org/show_bug.cgi?id=13634

        Reviewed by Anders Carlsson.

        By making plugin elements renderers go display:none when entering the page cache,
        we destroy the plug-in in a cross platform way as well as handle invalidating script
        objects created by that plugin.

        By restoring the original style when leaving the page cache and forcing a style recalc
        on the plugin element, the plugin is gracefully reinstantiated when the user goes back.

        Test: plugins/netscape-plugin-page-cache-works.html

        * dom/Document.cpp:
        (WebCore::Document::documentDidBecomeActive): Copy this collection before iterating over
          it, as the callbacks might result in mutating the set.

        * dom/Node.h:
        (WebCore::Node::setHasCustomStyleForRenderer):
        (WebCore::Node::clearHasCustomStyleForRenderer): Expose the ability to stop using a 
          custom renderer and go back to the default renderer.

        * history/CachedFrame.cpp:
        (WebCore::CachedFrame::CachedFrame): Move the document inactivation call to the same place
          we suspend active DOM objects. It is important this call be *after* the beforeunload event
          is dispatched, and was coincidental non of the elements that using Document activation
          had run in to this problem yet.

        * history/PageCache.cpp:
        (WebCore::logCanCacheFrameDecision):
        (WebCore::PageCache::canCachePageContainingThisFrame): If the page contains plugins but
          the PageCacheSupportsPlugins setting is true, allow this page.

        Kill and recreate the plugin by listening for Document activation callbacks and setting a custom
        display:none render style:
        * html/HTMLPlugInImageElement.cpp:
        (WebCore::HTMLPlugInImageElement::HTMLPlugInImageElement):
        (WebCore::HTMLPlugInImageElement::~HTMLPlugInImageElement): Unregister for document activation
          callbacks.
        (WebCore::HTMLPlugInImageElement::createRenderer): Once a renderer (ie. plugin instance) is
          created, this element needs Document (in)activation callbacks.
        (WebCore::HTMLPlugInImageElement::willMoveToNewOwnerDocument): Manage Document activation 
          callback registration.
        (WebCore::HTMLPlugInImageElement::didMoveToNewOwnerDocument): Ditto.
        (WebCore::HTMLPlugInImageElement::documentWillBecomeInactive): Clone the element's current style
          and set the clone's display value to None. Start using this custom style and force a style
          recall. This destroys the renderer and therefore the plugin instance.
        (WebCore::HTMLPlugInImageElement::documentDidBecomeActive): Stop using the custom style and
          force a style recall to reinstantiate the plugin.
        (WebCore::HTMLPlugInImageElement::customStyleForRenderer): Return the stand-in style that has
          display:none set.
        * html/HTMLPlugInImageElement.h:

        Add a setting that allows runtime configuration of whether or not the page cache supports plugins:
        * page/Settings.cpp:
        (WebCore::Settings::Settings):
        * page/Settings.h:
        (WebCore::Settings::setPageCacheSupportsPlugins):
        (WebCore::Settings::pageCacheSupportsPlugins):

2011-12-12  Ojan Vafai  <ojan@chromium.org>

        r102234 caused RuleData to use 33 bits in its bitmask
        https://bugs.webkit.org/show_bug.cgi?id=74314

        Reviewed by Antti Koivisto.

        Lower m_position to something more reasonable. A million
        should be plenty. Current large sites (e.g. gmail) seem to use
        tens of thousands.

        Added a COMPILE_ASSERT to ensure this doesn't regress.

        No new tests.

        * css/CSSStyleSelector.cpp:

2011-12-12  James Robinson  <jamesr@chromium.org>

        Rename webkitCancelRequestAnimationFrame to webkitCancelAnimationFrame to match spec change
        https://bugs.webkit.org/show_bug.cgi?id=74231

        Reviewed by Simon Fraser.

        The RequestAnimationFrame spec has renamed cancelRequestAnimationFrame to cancelAnimationFrame in response to
        feedback from Mozilla and Microsoft that the old name was too long and didn't parallel setTimeout/clearTimeout
        and setInterval/clearInterval very well. This updates our IDL to match, while preserving the old name as an
        alias to be compatible with current content.

        * dom/Document.cpp:
        (WebCore::Document::webkitCancelAnimationFrame):
        * dom/Document.h:
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::webkitCancelAnimationFrame):
        * page/DOMWindow.h:
        (WebCore::DOMWindow::webkitCancelRequestAnimationFrame):
        * page/DOMWindow.idl:

2011-12-12  Shawn Singh  <shawnsingh@chromium.org>

        [chromium] Remove assumption that empty surface is always at end of list
        https://bugs.webkit.org/show_bug.cgi?id=74037

        Reviewed by James Robinson.

        Test case added to CCLayerTreeHostCommonTest.cpp, which reproduces
        a crash reported in http://code.google.com/p/chromium/issues/detail?id=106734

        This patch fixes the crash in a less risky way to be merged into
        m17, but the root of the issue needs to be addressed in a
        follow-up patch.

        * platform/graphics/chromium/cc/CCLayerTreeHostCommon.cpp:
        (WebCore::calculateDrawTransformsAndVisibilityInternal):

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

        Share code that checks for matching sets of transform operations
        https://bugs.webkit.org/show_bug.cgi?id=74265

        Reviewed by Dan Bernstein.
        
        Add TransformOperations::operationsMatch() and call it from the
        three places that used this same code.
        
        Tested by existing tests.

        * page/animation/ImplicitAnimation.cpp:
        (WebCore::ImplicitAnimation::validateTransformFunctionList):
        * page/animation/KeyframeAnimation.cpp:
        (WebCore::KeyframeAnimation::validateTransformFunctionList):
        * platform/graphics/GraphicsLayer.cpp:
        (WebCore::GraphicsLayer::fetchTransformOperationList):
        * platform/graphics/transforms/TransformOperations.cpp:
        (WebCore::TransformOperations::operationsMatch):
        * platform/graphics/transforms/TransformOperations.h:

2011-12-12  Antti Koivisto  <antti@apple.com>

        Cache visited link hash
        https://bugs.webkit.org/show_bug.cgi?id=74095

        Reviewed by Darin Adler.

        Visited link hash is relatively expensive to compute. We can cache it for anchor elements
        with minimal relative memory cost for faster style resolve.
        
        On my machine this speeds up style matching on full HTML spec by ~100ms or ~1% of the total
        CPU usage. It makes link elements 8 bytes larger, a relatively minor increase to their overall size.
        
        Invalidate the hashes on base URL for completeness sake (lack of style invalidation means
        that this scenario is not properly supported currently).

        Covered by existing tests. No specific test for visited hash invalidation on dynamic base URL 
        change as the effect is not testable due to lack of style invalidation.

        * css/SelectorChecker.cpp:
        (WebCore::SelectorChecker::determineLinkStateSlowCase):
        (WebCore::SelectorChecker::visitedStateChanged):
        * html/Document.cpp:
        * html/HTMLAnchorElement.cpp:
        (WebCore::HTMLAnchorElement::HTMLAnchorElement):
        (WebCore::HTMLAnchorElement::parseMappedAttribute):
        * html/HTMLAnchorElement.h:
        (WebCore::HTMLAnchorElement::visitedLinkHash):

2011-12-12  Martin Robinson  <mrobinson@igalia.com>

        [GTK] gtk_widget_size_allocate for plugin widgets should happen in the WebView size-allocate method
        https://bugs.webkit.org/show_bug.cgi?id=72805

        Reviewed by Gustavo Noronha Silva.

        No new tests. This is only a performance tweak.

        Instead of immediately calling gtk_widget_size during painting, defer
        this until the size-allocate method of the WebView.

        * plugins/gtk/PluginViewGtk.cpp:
        (WebCore::PluginView::updateWidgetAllocationAndClip): Instead of immediately changing
        the widget allocation, just record it in a GObject data attachment.

2011-12-12  Nate Chapin  <japhet@chromium.org>

        A SubresourceLoader in the middle of revalidating
        a resource should be treated as finishing (similar to
        didFinishLoading and didFail) to ensure that willCancel()
        doesn't declare the revalidation as having failed reentrantly.
        https://bugs.webkit.org/show_bug.cgi?id=72762

        Reviewed by Adam Barth.

        Test: http/tests/cache/cancel-during-revalidation-succeeded.html

        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::didReceiveResponse):

2011-12-12  Mary Wu  <mary.wu@torchmobile.com.cn>

        Upstream 3 files into WebCore/platform/blackberry
        https://bugs.webkit.org/show_bug.cgi?id=74275

        Reviewed by Rob Buis.

        Initial upstream, no new tests.

        * platform/blackberry/ContextMenuBlackBerry.cpp: Added.
        * platform/blackberry/ContextMenuItemBlackBerry.cpp: Added.
        * platform/blackberry/TemporaryLinkStubs.cpp: Added.

2011-12-12  Pierre Rossi  <pierre.rossi@gmail.com>

        [Qt] Rendering issues with sliders and QStyle
        https://bugs.webkit.org/show_bug.cgi?id=73921

        With QStyle's origins being deeply rooted with widgets,
        several styles make wrong assumptions, leading to sliders
        not being painted properly in WebKit. We can solve a lot
        of problems by systematically translating the painter to
        the top left corner of the render object.

        Reviewed by Simon Hausmann.

        No new tests. The Qt tests are ran with the Windows
        style, this fixes some quirks affecting other styles.

        * platform/qt/RenderThemeQStyle.cpp:
        (WebCore::RenderThemeQStyle::paintSliderTrack):
        (WebCore::RenderThemeQStyle::paintSliderThumb):

2011-12-12  Mary Wu  <mary.wu@torchmobile.com.cn>

        Upstream 5 files into WebCore/platform/blackberry
        https://bugs.webkit.org/show_bug.cgi?id=73798

        Reviewed by Rob Buis.

        Main contributors:
        Genevieve Mak <gmak@rim.com>
        Mike Lattanzio  <mlattanzio@rim.com>
        George Staikos <gstaikos@rim.com> 

        Initial upstream, no new tests.

        * platform/blackberry/PlatformTouchEventBlackBerry.cpp: Added.
        (WebCore::PlatformTouchEvent::PlatformTouchEvent):
        * platform/blackberry/PlatformTouchPointBlackBerry.cpp: Added.
        (WebCore::PlatformTouchPoint::PlatformTouchPoint):
        * platform/blackberry/SharedBufferBlackBerry.cpp: Added.
        (WebCore::SharedBuffer::createWithContentsOfFile):
        * platform/blackberry/SharedTimerBlackBerry.cpp: Added.
        (WebCore::SharedTimerBlackBerry::SharedTimerBlackBerry):
        (WebCore::SharedTimerBlackBerry::~SharedTimerBlackBerry):
        (WebCore::SharedTimerBlackBerry::instance):
        (WebCore::SharedTimerBlackBerry::start):
        (WebCore::SharedTimerBlackBerry::stop):
        (WebCore::setSharedTimerFiredFunction):
        (WebCore::setSharedTimerFireInterval):
        (WebCore::stopSharedTimer):
        * platform/blackberry/SystemTimeBlackBerry.cpp: Added.
        (WebCore::userIdleTime):

2011-12-12  Alexander Pavlov  <apavlov@chromium.org>

        Implement a cache for CSSStyleRule::selectorText()
        https://bugs.webkit.org/show_bug.cgi?id=74269

        This change is geared towards speeding up the CSS selector profiler,
        its implementation tracked at https://bugs.webkit.org/show_bug.cgi?id=74004.
        Using a proof-of-concept implementation of the profiler, this change reduces
        the profiler temporal overhead on PerformanceTests/Parser/html5-full-render.html
        roughly by 86% (from ~72 seconds down to ~10 seconds). This change also does not
        considerably increase average memory usage, as reading selectorText is a relatively
        rare case during normal web browsing.

        Reviewed by Andreas Kling.

        No new tests, as this functionality is covered by existing tests.

        * css/CSSRule.h:
        * css/CSSStyleRule.cpp:
        (WebCore::CSSStyleRule::~CSSStyleRule):
        (WebCore::selectorTextCache):
        (WebCore::CSSStyleRule::cleanup):
        (WebCore::CSSStyleRule::generateSelectorText):
        (WebCore::CSSStyleRule::selectorText):
        (WebCore::CSSStyleRule::setSelectorText):
        * css/CSSStyleRule.h:

2011-12-12  Alexander Pavlov  <apavlov@chromium.org>

        Web Inspector: [Styles] Modified selector text needs sanitization
        https://bugs.webkit.org/show_bug.cgi?id=74291

        Reviewed by Yury Semikhatsky.

        * inspector/front-end/StylesSidebarPane.js:

2011-12-12  Renata Hodovan  <reni@webkit.org>

        Fulfill FIXME in  HTMLLinkElement.h.
        https://bugs.webkit.org/show_bug.cgi?id=74278

        Rename HTMLLinkElement::isLoading() to isStyleSheetLoading().

        Reviewed by Andreas Kling.

        No new tests because the functionality remains the same.

        * dom/Document.cpp:
        (WebCore::Document::recalcStyleSelector):
        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::setDisabledState):
        (WebCore::HTMLLinkElement::isStyleSheetLoading):
        (WebCore::HTMLLinkElement::sheetLoaded):
        * html/HTMLLinkElement.h:

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

        WebKit does not enumerate over CSS properties in HTMLElement.style
        https://bugs.webkit.org/show_bug.cgi?id=23946

        Reviewed by Darin Adler.

        This change generates a list of JavaScript mirrors of the CSS properties and allows to enumerate them
        using the "in" operator on the CSSStyleDeclaration object.

        Test: fast/css/style-enumerate-properties.html

        * bindings/js/JSCSSStyleDeclarationCustom.cpp:
        (WebCore::JSCSSStyleDeclaration::getOwnPropertyNames): Added.
        * bindings/v8/custom/V8CSSStyleDeclarationCustom.cpp:
        (WebCore::V8CSSStyleDeclaration::namedPropertyEnumerator): Added.
        (WebCore::V8CSSStyleDeclaration::namedPropertyQuery): Added.
        (WebCore::V8CSSStyleDeclaration::namedPropertyGetter): A small drive-by optimization (local initialization moved down).
        * css/CSSStyleDeclaration.idl: Use a custom property enumerator.
        * css/makeprop.pl: Add a function to convert CSS property names into JS ones.

2011-12-12  Alexander Pavlov  <apavlov@chromium.org>

        Unreviewed, build fix.

        Revert r102570 which broke SnowLeopard builders.

        * bindings/js/JSCSSStyleDeclarationCustom.cpp:
        * bindings/v8/custom/V8CSSStyleDeclarationCustom.cpp:
        (WebCore::V8CSSStyleDeclaration::namedPropertyGetter):
        * css/CSSStyleDeclaration.idl:
        * css/makeprop.pl:

2011-12-12  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: chromium: UI: Detailed Heap snapshot shows too many objects' hidden properties.
        https://bugs.webkit.org/show_bug.cgi?id=74289

        WebCore objects have many hidden properties.
        The Detailed Heap shapshot view shows all these props for a selected object.
        The result view looks too heavy and users usually failed to find a useful information about the object.
        Looks like such ability is unnecessary in the most cases.
        I'd like to introduce a configurable property that will show/hide these props from the view.

        Reviewed by Yury Semikhatsky.

        * English.lproj/localizedStrings.js:
        * inspector/front-end/DetailedHeapshotGridNodes.js:
        * inspector/front-end/DetailedHeapshotView.js:
        * inspector/front-end/HeapSnapshotProxy.js:
        (WebInspector.HeapSnapshotProxy.prototype.createPathFinder):
        * inspector/front-end/SettingsScreen.js:
        (WebInspector.SettingsScreen):

2011-12-12  Kentaro Hara  <haraken@chromium.org>

        Unreviewed, rolling out r102556.
        http://trac.webkit.org/changeset/102556
        https://bugs.webkit.org/show_bug.cgi?id=73394

        clobber build failure

        * WebCore.gyp/WebCore.gyp:
        * WebCore.gyp/scripts/action_derivedsourcesallinone.py:
        (main):
        * WebCore.gypi:
        * bindings/scripts/generate-bindings.pl:
        * page/DOMWindow.idl:
        * webaudio/DOMWindowWebAudio.idl: Removed.

2011-12-12  Kentaro Hara  <haraken@chromium.org>

        Unreviewed, rolling out r102558.
        http://trac.webkit.org/changeset/102558
        https://bugs.webkit.org/show_bug.cgi?id=74160

        clobber build failure

        * WebCore.gypi:
        * page/DOMWindow.idl:
        * websockets/DOMWindowWebSocket.idl: Removed.

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

        WebKit does not enumerate over CSS properties in HTMLElement.style
        https://bugs.webkit.org/show_bug.cgi?id=23946

        Reviewed by Darin Adler.

        This change generates a list of JavaScript mirrors of the CSS properties and allows to enumerate them
        using the "in" operator on the CSSStyleDeclaration object.

        Test: fast/css/style-enumerate-properties.html

        * bindings/js/JSCSSStyleDeclarationCustom.cpp:
        (WebCore::JSCSSStyleDeclaration::getOwnPropertyNames): Added.
        * bindings/v8/custom/V8CSSStyleDeclarationCustom.cpp:
        (WebCore::V8CSSStyleDeclaration::namedPropertyEnumerator): Added.
        (WebCore::V8CSSStyleDeclaration::namedPropertyQuery): Added.
        (WebCore::V8CSSStyleDeclaration::namedPropertyGetter): A small drive-by optimization (local initialization moved down).
        * css/CSSStyleDeclaration.idl: Use a custom property enumerator.
        * css/makeprop.pl: Add a function to convert CSS property names into JS ones, and a string comparator.

2011-12-09  Yury Semikhatsky  <yurys@chromium.org>

        Web Inspector: provide per Document Node count statistics
        https://bugs.webkit.org/show_bug.cgi?id=74100

        Memory agent now returns counters for nodes with given names. For each
        object group root user will see total number of its descendtants and per
        tag name counts.

        This patch also moves generic CounterVisitor code out of V8 bindings. It
        may well be used with both JS engines.

        Reviewed by Pavel Feldman.

        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/ScriptProfiler.h:
        (WebCore::ScriptProfiler::visitJSDOMWrappers):
        * bindings/v8/ScriptProfiler.cpp:
        (WebCore::ScriptProfiler::visitJSDOMWrappers):
        * bindings/v8/ScriptProfiler.h:
        * inspector/DOMWrapperVisitor.h: Added.
        (WebCore::DOMWrapperVisitor::~DOMWrapperVisitor):
        * inspector/Inspector.json:
        * inspector/InspectorMemoryAgent.cpp:
        (WebCore::InspectorMemoryAgent::getDOMNodeCount):
        * inspector/InspectorMemoryAgent.h:

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

        WebPImageDecoder: Increase image/webp decoding performance 10-20%
        https://bugs.webkit.org/show_bug.cgi?id=74263

        Reviewed by Adam Barth.

        Avoid copying data from the RGB buffer of decoded image output to the
        backing pixel store. That is slow - costs 10% of the overall decoding
        time at libwebp 0.1.2, and 20% at libwebp 0.1.3.

        Instead, instruct the decoder to write the decoded pixels directly to
        the backing pixel store.

        No new tests. Covered by existing tests. No progressive decoding test
        exists in DRT, see https://bugs.webkit.org/show_bug.cgi?id=74062

        * platform/image-decoders/webp/WEBPImageDecoder.cpp:
        (outputMode):  Define output pixel format. On little-endian machines,
        output BGRA pixels to the backing store, for example.
        (WebCore::WEBPImageDecoder::WEBPImageDecoder):
        (WebCore::WEBPImageDecoder::decode):
        * platform/image-decoders/webp/WEBPImageDecoder.h:

2011-12-11  Zoltan Herczeg  <zherczeg@webkit.org>

        Add new CSS nth-children parsing tests
        https://bugs.webkit.org/show_bug.cgi?id=74178

        Reviewed by Darin Adler.

        Test: fast/css/parsing-css-nth-child.html

        * css/CSSParser.cpp:
        (WebCore::isValidNthToken): Add "-n" to the possible identifiers.

2011-12-11  Kentaro Hara  <haraken@chromium.org>

        Use [Supplemental] IDL in WebSocket
        https://bugs.webkit.org/show_bug.cgi?id=74160

        Reviewed by Adam Barth.

        By using the [Supplemental] IDL, this patch moves declarations of WebSocket
        attributes from DOMWindow.idl to websocket/DOMWindowWebSocket.idl,
        which helps make WebSocket a self-contained module.

        No new tests, no change in behavior.
        Confirm that http/tests/websocket/* pass.

        * WebCore.gypi: Added DOMWindowWebSocket.idl.
        * page/DOMWindow.idl: Added the [Supplemented] IDL to WebSocket-related attributes. This [Supplemented] IDL will be removed after all platforms support the [Supplemental] IDL (See bug 73394 for more details).
        * websockets/DOMWindowWebSocket.idl: Added. Used the [Supplemental=DOMWindow] IDL. The attributes in this IDL file are treated as if they are described in DOMWindow.idl.

2011-12-11  Luke Macpherson   <macpherson@chromium.org>

        Implement webkit-line-grid and webkit-line-grid-snap CSS properties in CSSStyleApplyProperty.
        https://bugs.webkit.org/show_bug.cgi?id=74262

        Reviewed by Andreas Kling.

        No new tests / refactoring only.

        * css/CSSStyleApplyProperty.cpp:
        (WebCore::CSSStyleApplyProperty::CSSStyleApplyProperty):
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):

2011-12-11  Kentaro Hara  <haraken@chromium.org>

        Use the [Supplemental] IDL for webaudio attributes in Chromium
        https://bugs.webkit.org/show_bug.cgi?id=73394

        Reviewed by Adam Barth.

        - Overview: Using the [Supplemental] IDL, this patch moves the attribute
        declarations of webaudio from DOMWindow.idl into a new IDL file
        webaudio/DOMWindowWebAudio.idl, which helps make webaudio a self-contained
        feature (aka a module).

        - This patch changes the build flow of WebCore.gyp as follows:

            Previous build flow:
                foreach $idl (all IDL files) {
                    generate-bindings.pl depends on $idl;
                    generate-bindings.pl reads $idl;
                    generate-bindings.pl generates .h and .cpp files for $idl;
                }

            New build flow (See the discussions in bug 72138 for more details):
                resolve-supplemental.pl depends on all IDL files;
                resolve-supplemental.pl reads all IDL files;
                resolve-supplemental.pl resolves the dependency of [Supplemental=XXXX];
                resolve-supplemental.pl outputs supplemental_dependency.tmp;
                foreach $idl (all IDL files) {
                    generate-bindings.pl depends on $idl and supplemental_dependency.tmp;
                    generate-bindings.pl reads $idl;
                    generate-bindings.pl reads supplemental_dependency.tmp;
                    generate-bindings.pl generates .h and .cpp files for $idl, including all attributes in IDL files whilementing $idl;
                }

        - This patch introduces a temporary IDL, [Supplemented]. The [Supplemented] IDL
        will be removed after build scripts for all platforms support the [Supplemental] IDL.
        The motivation for the [Supplemented] IDL is as follows:

        In order to support the [Supplemental] IDL, we need to
        (1) run resolve-supplemental.pl and generate supplemental_dependency.tmp
        (2) and run generate-bindings.pl with the supplemental_dependency.tmp.

        This build flow requires a change on the following build scripts,
        but changing all the build scripts all at once without any regression is too difficult:

            - DerivedSources.make
            - DerivedSources.pri
            - GNUmakefile.am
            - PlatformBlackBerry.cmake
            - UseJSC.cmake
            - UseV8.cmake
            - WebCore.vcproj/MigrateScripts
            - WebCore.vcproj/WebCore.vcproj
            - bindings/gobject/GNUmakefile.am
            - WebCore.gyp/WebCore.gyp

        Thus, we are planning to change the build scripts one by one, which implies that
        we need to allow the temporary state in which some build scripts support [Supplemental] IDL
        but others do not. To accomplish this, we introduce a temporary IDL, [Supplemented].
        The [Supplemented] IDL on an attribute means that the attribute is marked with [Supplemental]
        in another IDL file somewhere, like this:

            DOMWindowWebAudio.idl:
                interface [
                    Supplemental=DOMWindow
                ] DOMWindowWebAudio {
                    attribute attr1;
                    attribute attr2;
                };

            DOMWindow.idl:
                interface [
                ] DOMWindow {
                    attribute [Supplemented] attr1; // This line will be removed after all build scripts support the [Su IDL
                    attribute [Supplemented] attr2; // This line will be removed after all build scripts support the [Su IDL.
                    attribute attr3;
                    attribute attr4;
                };

        Assuming these IDL files, this patch implements the following logic in generate-bindings.pl:

            - If a given build script supports the [Supplemental] IDL,
            generate-bindings.pl ignores all attributes with the [Supplemented] IDL.
            - Otherwise, generate-bindings.pl treats all attributes with the [Supplemented] IDL
            as normal attributes and instead ignores all attributes with the [Supplemental] IDL
            (i.e. generate-bindings.pl generates nothing from the IDL file with the [Supplemental] IDL).

        Tests: webaudio/*

        * WebCore.gyp/WebCore.gyp: Describes the build flow that I described above.
        * WebCore.gyp/scripts/action_derivedsourcesallinone.py:
        (main): Reads the IDL file names from the input file (i.e. supplemental_dependency.tmp), which are described at the first column of each line in the input file. If the file name is a "/cygdrive/c/..."-style path, it is converted to a "C:\cygwin\..."-style path by the cygpath command.
        * WebCore.gypi: Added DOMWindowWebAudio.idl.
        * bindings/scripts/generate-bindings.pl: As a temporary solution, if the platform does not support the [Supplemental] IDL, the perl script ignores the [Supplemental] IDL and instead uses the [Supplemented] IDL. Otherwise, the perl script ignores the [Supplemented] IDL and instead uses the [Supplemental] IDL.
        * page/DOMWindow.idl: Added the [Supplemented] IDL to webaudio-related attributes. As I described above, the [Supplemented] IDL will be removed after all platforms support the [Supplemental] IDL.
        * webaudio/DOMWindowWebAudio.idl: Added. Describes the [Supplemental=DOMWindow] IDL. The attributes in this IDL file should be treated as if they are written in DOMWindow.idl.

2011-12-11  Andreas Kling  <kling@webkit.org>

        Micro-optimize CSSStyleSelector::findSiblingForStyleSharing().
        <http://webkit.org/b/74261>

        Reviewed by Antti Koivisto.

        Move the isStyledElement() check from canShareStyleWithElement() into the
        loop in findSiblingForStyleSharing(), and tighten up the argument/return
        types to StyledElement* as appropriate.

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::canShareStyleWithElement):
        (WebCore::CSSStyleSelector::findSiblingForStyleSharing):
        (WebCore::CSSStyleSelector::locateSharedStyle):
        * css/CSSStyleSelector.h:

2011-12-11  Shinya Kawanaka  <shinyak@google.com>

        Asynchronous path synchronous path of SpellChecker should share the code to mark misspellings.
        https://bugs.webkit.org/show_bug.cgi?id=73616

        Reviewed by Hajime Morita.

        Asynchronous spellchecking path should call the same method for the synchronous spellchecking path
        to mark misspellings.

        No new tests. Covered by existing tests.

        * editing/Editor.cpp:
        (WebCore::Editor::markAllMisspellingsAndBadGrammarInRanges):
        (WebCore::Editor::markAndReplaceFor):
          Takes SpellCheckRequest object.
        * editing/Editor.h:
        * editing/SpellChecker.cpp:
        (WebCore::SpellChecker::didCheck):
          Calls the same method of synchronous spellchecking path.

2011-12-11  Luke Macpherson   <macpherson@chromium.org>

        Implement CSS display property in CSSStyleApplyProperty.
        https://bugs.webkit.org/show_bug.cgi?id=73500

        Reviewed by Andreas Kling.

        Refactoring only / no functionality changed.

        * css/CSSStyleApplyProperty.cpp:
        (WebCore::ApplyPropertyDisplay::isValidDisplayValue):
        (WebCore::ApplyPropertyDisplay::applyInheritValue):
        (WebCore::ApplyPropertyDisplay::applyInitialValue):
        (WebCore::ApplyPropertyDisplay::applyValue):
        (WebCore::ApplyPropertyDisplay::createHandler):
        (WebCore::CSSStyleApplyProperty::CSSStyleApplyProperty):
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):

2011-12-11  Geoffrey Garen  <ggaren@apple.com>

        Try to fix the Qt build.

        Unreviewed.

        * css/CSSStyleDeclaration.cpp: Maybe an #include will solve our problem?
        Someday, compiler error messages will not suck. Today is not that day.

2011-12-11  Luke Macpherson   <macpherson@chromium.org>

        Implement CSS resize property in CSSStyleApplyProperty.
        https://bugs.webkit.org/show_bug.cgi?id=74162

        Reviewed by Julien Chaffraix.

        No new tests / refactoring only.

        * css/CSSStyleApplyProperty.cpp:
        (WebCore::ApplyPropertyResize::applyValue):
        (WebCore::ApplyPropertyResize::createHandler):
        (WebCore::CSSStyleApplyProperty::CSSStyleApplyProperty):
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):

2011-12-11  Andreas Kling  <kling@webkit.org>

        Move CSSElementStyleDeclaration to its own cpp/h files.
        <http://webkit.org/b/74256>

        Reviewed by Sam Weinig.

        CSSElementStyleDeclaration is old enough to move out of CSSMutableStyleDeclaration's
        attic and into her own apartment. 

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSDOMBinding.h:
        * css/CSSElementStyleDeclaration.cpp: Added.
        (WebCore::CSSElementStyleDeclaration::styleSheet):
        * css/CSSElementStyleDeclaration.h: Added.
        (WebCore::CSSElementStyleDeclaration::element):
        (WebCore::CSSElementStyleDeclaration::setElement):
        (WebCore::CSSElementStyleDeclaration::CSSElementStyleDeclaration):
        (WebCore::CSSElementStyleDeclaration::~CSSElementStyleDeclaration):
        * css/CSSInlineStyleDeclaration.h:
        * css/CSSMutableStyleDeclaration.cpp:
        * css/CSSMutableStyleDeclaration.h:
        * dom/CSSMappedAttributeDeclaration.h:

2011-12-11  Benjamin Poulain  <bpoulain@apple.com>

        Add KillRingNone.cpp to Mac build system
        https://bugs.webkit.org/show_bug.cgi?id=74168

        Reviewed by David Kilzer.

        Add KillRingNone.cpp so it can be used on iOS, but
        blacklist the file from the build in order to avoid
        conflicts with KillRingMac.

        * Configurations/WebCore.xcconfig:
        * WebCore.xcodeproj/project.pbxproj:

2011-12-11  Peter Rybin  <peter.rybin@gmail.com>

        Web Inspector: [protocol] alter some type names generated from Inspector.json
        https://bugs.webkit.org/show_bug.cgi?id=74247

        Reviewed by Pavel Feldman.

        Manually-filled map added that contains problem type names and its replacement.

        * inspector/CodeGeneratorInspector.py:
        (fix_type_name.Result):
        (fix_type_name.Result.output_comment):
        (fix_type_name):
        (TypeBindings.create_for_named_type_declaration.write_doc):
        (TypeBindings.create_for_named_type_declaration.EnumBinding.generate_type_builder):
        (TypeBindings.create_for_named_type_declaration.PlainString.generate_type_builder):
        (TypeBindings):
        (TypeBindings.create_for_named_type_declaration.ClassBinding.generate_type_builder):
        (Generator.process_types):

2011-12-11  Andreas Kling  <kling@webkit.org>

        WK2/NetscapePlugin: Incorrect mouse event coordinates when frameScaleFactor != 1.
        <http://webkit.org/b/74209> and <rdar://problem/10438197>

        Reviewed by Anders Carlsson.

        * WebCore.exp.in: Export AffineTransform::scale(double).

2011-12-10  Andreas Kling  <kling@webkit.org>

        Remove OS(SYMBIAN) block from Settings constructor.
        <http://webkit.org/b/74248>

        Reviewed by Benjamin Poulain.

        Kill the last OS(SYMBIAN) block in WebKit!

        * page/Settings.cpp:
        (WebCore::Settings::Settings):

2011-12-11  Dan Bernstein  <mitz@apple.com>

        <rdar://problem/10561285> REGRESSION (r80438): First word on a line or after collapsed space may not be hyphenated even though it should
        https://bugs.webkit.org/show_bug.cgi?id=74239

        Reviewed by Anders Carlsson.

        Tests: fast/text/hyphenate-first-word-after-skipped-space-expected.html
               fast/text/hyphenate-first-word-after-skipped-space.html

        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::tryHyphenating): Replaced the assumption that the character at lastSpace is a space
        iff lastSpace is non-zero with a test of whether it is a space, in the sense that it should
        not be counted as part of the prefix when comparing it to the value of hyphenate-limit-before.

2011-12-10  Benjamin Poulain  <bpoulain@apple.com>

        #ifdef the parts of the Mac platform which should not be used on iOS
        https://bugs.webkit.org/show_bug.cgi?id=74246

        Reviewed by David Kilzer.

        * Configurations/WebCore.xcconfig:
        * platform/FileSystem.cpp:
        * platform/mac/FileSystemMac.mm:
        * platform/mac/Language.mm:
        (+[WebLanguageChangeObserver _webkit_languagePreferencesDidChange]):
        (WebCore::createHTTPStyleLanguageCode):
        (WebCore::platformDefaultLanguage):
        * platform/mac/LocalizedStringsMac.mm:
        (WebCore::localizedString):
        (+[WebCoreSharedBufferData initialize]):
        * platform/mac/WebCoreNSStringExtras.h:
        * platform/mac/WebCoreNSStringExtras.mm:
        * platform/mac/WebFontCache.mm:
        * platform/mac/WebNSAttributedStringExtras.mm: The value NSAttachmentCharacter is
        not defined in the iOS SDK so we add it here.

2011-12-10  Ryosuke Niwa  <rniwa@webkit.org>

        The previous fix broke Lion release build. Fix that.

        * editing/SpellingCorrectionCommand.cpp:

2011-12-10  Ryosuke Niwa  <rniwa@webkit.org>

        Lion build fix attempt after r102527.

        * editing/SpellingCorrectionCommand.cpp:

2011-12-10  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Unreviewed build fixes. Add missing header for CPP
        DOM bindings and add stubs for new DPI methods.
        
        * bindings/scripts/CodeGeneratorCPP.pm:
        (AddIncludesForType):
        * platform/wx/ScreenWx.cpp:
        (WebCore::screenHorizontalDPI):
        (WebCore::screenVerticalDPI):

2011-12-10  Ryosuke Niwa  <rniwa@webkit.org>

        Mac build fix. Remove an erroneous OVERRIDE.

        * editing/CompositeEditCommand.h:

2011-12-09  Robert Hogan  <robert@webkit.org>

        CSS 2.1 failure: numerous counter-increment-* tests fail
        https://bugs.webkit.org/show_bug.cgi?id=73360

        Reviewed by Julien Chaffraix.

        Allow counter-increment to handle integer underflow and overflow.
        Also allow 'counter' to inherit.

        * css/CSSStyleApplyProperty.cpp:
        (WebCore::ApplyPropertyCounter::applyInheritValue):
        (WebCore::ApplyPropertyCounter::applyValue):
        (WebCore::ApplyPropertyCounter::createHandler):

2011-12-09  Ryosuke Niwa  <rniwa@webkit.org>

        There should be a way to count the number of nodes held by undo stack
        https://bugs.webkit.org/show_bug.cgi?id=74099

        Reviewed by Enrica Casucci.

        Add getNodesInCommand to all SimpleEditCommands and EditCommandComposition in debug builds.
        We can easily aggregate the number of nodes held by the undo stack by calling
        this function on each item in the undo stack.

        * editing/AppendNodeCommand.cpp:
        (WebCore::AppendNodeCommand::getNodesInCommand):
        * editing/AppendNodeCommand.h:
        * editing/CompositeEditCommand.cpp:
        (WebCore::EditCommandComposition::getNodesInCommand):
        * editing/CompositeEditCommand.h:
        * editing/DeleteFromTextNodeCommand.cpp:
        (WebCore::DeleteFromTextNodeCommand::getNodesInCommand):
        * editing/DeleteFromTextNodeCommand.h:
        * editing/EditCommand.cpp:
        (WebCore::SimpleEditCommand::addNodeAndDescedents):
        * editing/EditCommand.h:
        * editing/Editor.cpp:
        (WebCore::Editor::appliedEditing):
        * editing/InsertIntoTextNodeCommand.cpp:
        (WebCore::InsertIntoTextNodeCommand::getNodesInCommand):
        * editing/InsertIntoTextNodeCommand.h:
        * editing/InsertNodeBeforeCommand.cpp:
        (WebCore::InsertNodeBeforeCommand::getNodesInCommand):
        * editing/InsertNodeBeforeCommand.h:
        * editing/MergeIdenticalElementsCommand.cpp:
        (WebCore::MergeIdenticalElementsCommand::getNodesInCommand):
        * editing/MergeIdenticalElementsCommand.h:
        * editing/RemoveCSSPropertyCommand.cpp:
        (WebCore::RemoveCSSPropertyCommand::getNodesInCommand):
        * editing/RemoveCSSPropertyCommand.h:
        * editing/RemoveNodeCommand.cpp:
        (WebCore::RemoveNodeCommand::getNodesInCommand):
        * editing/RemoveNodeCommand.h:
        * editing/ReplaceNodeWithSpanCommand.cpp:
        (WebCore::ReplaceNodeWithSpanCommand::getNodesInCommand):
        * editing/ReplaceNodeWithSpanCommand.h:
        * editing/SetNodeAttributeCommand.cpp:
        (WebCore::SetNodeAttributeCommand::getNodesInCommand):
        * editing/SetNodeAttributeCommand.h:
        * editing/SetSelectionCommand.h:
        * editing/SplitElementCommand.cpp:
        (WebCore::SplitElementCommand::getNodesInCommand):
        * editing/SplitElementCommand.h:
        * editing/SplitTextNodeCommand.cpp:
        (WebCore::SplitTextNodeCommand::getNodesInCommand):
        * editing/SplitTextNodeCommand.h:
        * editing/WrapContentsInDummySpanCommand.cpp:
        (WebCore::WrapContentsInDummySpanCommand::getNodesInCommand):
        * editing/WrapContentsInDummySpanCommand.h:

2011-11-09  Robert Hogan  <robert@webkit.org>

        CSS 2.1 failure: outline-color-* tests fail
        https://bugs.webkit.org/show_bug.cgi?id=71931

        Reviewed by Julien Chaffraix.

        Test: css2.1/20110323/outline-color-001.html

        WebKit didn't paint the top block in this series of tests because it ignored the outline
        of objects with a zero size. Fix this by taking account of both offset and width of the
        outline when deciding whether to paint it. 

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::paintOutline): paint the outline even when the block has zero size

2011-12-10   Arko Saha  <arko@motorola.com>

        Microdata: Fix compilation error in MICRODATA enabled build.
        https://bugs.webkit.org/show_bug.cgi?id=74235

        Reviewed by Andreas Kling.

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

2011-12-10  Jarred Nicholls  <jarred@sencha.com>

        [V8] Remove old ArrayBuffer guards from V8XMLHttpRequestCustom.cpp
        https://bugs.webkit.org/show_bug.cgi?id=74234

        Reviewed by Adam Barth.

        No new tests are necessary.

        * bindings/v8/custom/V8XMLHttpRequestCustom.cpp:
        (WebCore::V8XMLHttpRequest::responseAccessorGetter):

2011-12-10  Noel Gordon  <noel.gordon@gmail.com>

        WebPImageDecoder progressive decodes fail to decode valid images
        https://bugs.webkit.org/show_bug.cgi?id=74062

        Reviewed by Adam Barth.

        The WEBP header is followed by a so-called P0 header, then some data to
        decode.  If a partial P0 header is received during progressive decodes,
        WebPIDecGetRGB() returns false; that makes the decoder enter the failed
        state, no image appears on the page.

        James Zern (webp) recommended the following via e-mail:

        WebPIUpdate() validates input data, and will return an error status for
        malformed data (bit-stream error, invalid data).  Otherwise, it returns
        OK or SUSPENDED.  OK means that decoding is done/complete/no-error, and
        SUSPENDED means more input data is needed to complete decoding.  A NULL
        return from WebPIDecGetRGB() is valid at this time due to a partial P0,
        and should not be interpreted as a decoding failure.

        No new tests. Not something DumpRenderTree can easily test.

        * platform/image-decoders/webp/WEBPImageDecoder.cpp:
        (WebCore::WEBPImageDecoder::decode):  A NULL WebPIDecGetRGB() return is
        acceptable here.  Return false instead of failing the decoder.

2011-12-09  Benjamin Poulain  <bpoulain@apple.com>

        Add the FileSystem functions of iOS
        https://bugs.webkit.org/show_bug.cgi?id=74164

        Reviewed by David Kilzer.

        Two functions are needed on iOS for temporary files and directories.

        * WebCore.exp.in:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/ios/FileSystemIOS.h: Added.
        * platform/ios/FileSystemIOS.mm: Added.
        (WebCore::createTemporaryDirectory):
        (WebCore::createTemporaryFile):

2011-12-09  Jacky Jiang  <zhajiang@rim.com>

        Remove ResourceHandle::bufferedData() from ResourceHandleBlackBerry.cpp
        https://bugs.webkit.org/show_bug.cgi?id=74197

        The bufferedData() was removed in r95120.

        Reviewed by Rob Buis.

        Trivial fix, so no new tests.

        * platform/network/blackberry/ResourceHandleBlackBerry.cpp:

2011-12-09  Eric Penner  <epenner@google.com>

        [chromium] Prevent ASSERT in legitimate out-of-memory case.
        https://bugs.webkit.org/show_bug.cgi?id=74215

        Reviewed by James Robinson.

        * platform/graphics/chromium/TiledLayerChromium.cpp:
        (WebCore::TiledLayerChromium::updateCompositorResources):

2011-12-09   Arko Saha  <arko@motorola.com>

        NameNodeListCache should be invalidated when name attribute changes/modified.
        https://bugs.webkit.org/show_bug.cgi?id=70810

        Reviewed by Ryosuke Niwa.

        Test: fast/dom/getelementsbyname-invalidation-cache.html

        * html/HTMLAnchorElement.cpp:
        (WebCore::HTMLAnchorElement::parseMappedAttribute):
        * html/HTMLAppletElement.cpp:
        (WebCore::HTMLAppletElement::parseMappedAttribute):
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::parseMappedAttribute):
        * html/HTMLEmbedElement.cpp:
        (WebCore::HTMLEmbedElement::parseMappedAttribute):
        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::parseMappedAttribute):
        * html/HTMLFrameElementBase.cpp:
        (WebCore::HTMLFrameElementBase::parseMappedAttribute):
        * html/HTMLIFrameElement.cpp:
        (WebCore::HTMLIFrameElement::parseMappedAttribute):
        * html/HTMLImageElement.cpp:
        (WebCore::HTMLImageElement::parseMappedAttribute):
        * html/HTMLMapElement.cpp:
        (WebCore::HTMLMapElement::parseMappedAttribute):
        * html/HTMLMetaElement.cpp:
        (WebCore::HTMLMetaElement::parseMappedAttribute):
        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::parseMappedAttribute):
        * html/HTMLParamElement.cpp:
        (WebCore::HTMLParamElement::parseMappedAttribute):

2011-12-09  Anders Carlsson  <andersca@apple.com>

        Fix Lion release build.

        * platform/mac/ScrollAnimatorMac.mm:
        (-[WebScrollbarPainterDelegate mouseLocationInScrollerForScrollerImp:]):

2011-12-09  Mark Pilgrim  <pilgrim@chromium.org>

        [FileSystem API] Entry.remove successCallback is required
        https://bugs.webkit.org/show_bug.cgi?id=69639

        Reviewed by Adam Barth.

        Test: fast/filesystem/simple-required-arguments-remove.html

        * fileapi/Entry.idl: remove [Optional] flag from Entry.remove.successCallback parameter

2011-12-09  Tim Horton  <timothy_horton@apple.com>

        background-image transitions trigger between equivalent images
        https://bugs.webkit.org/show_bug.cgi?id=74229
        <rdar://problem/10558627>

        Reviewed by Darin Adler.
        Patch by Simon Fraser.

        For animation property wrappers around StyleImage properties,
        test the equivalence of the image itself, instead of equality of
        the StyleImage pointer.

        Test: transitions/equivalent-background-image-no-transition.html

        * page/animation/AnimationBase.cpp:
        (WebCore::StyleImagePropertyWrapper::StyleImagePropertyWrapper):
        (WebCore::StyleImagePropertyWrapper::equals):
        (WebCore::FillLayerStyleImagePropertyWrapper::FillLayerStyleImagePropertyWrapper):
        (WebCore::FillLayerStyleImagePropertyWrapper::equals):
        (WebCore::FillLayersPropertyWrapper::FillLayersPropertyWrapper):
        (WebCore::AnimationBase::ensurePropertyMap):

2011-12-09  Mary Wu  <mary.wu@torchmobile.com.cn>

        Small style fix on DragDataBlackBerry.cpp
        https://bugs.webkit.org/show_bug.cgi?id=74171

        Reviewed by Rob Buis.

        Style fix, no function impact, no new tests.

        * platform/blackberry/DragDataBlackBerry.cpp:
        (WebCore::DragData::containsURL):
        (WebCore::DragData::asFilenames):
        (WebCore::DragData::asURL):
        (WebCore::DragData::asFragment):

2011-12-09  Tony Chang  <tony@chromium.org>

        add css parsing for flex-flow: wrap and wrap-reverse
        https://bugs.webkit.org/show_bug.cgi?id=74008

        Reviewed by Ojan Vafai.

        Also save 2 bits in StyleFlexibleBoxData by changing the size of m_flexFlow (there are only 4 enum values).

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue): Print the wrap value if it exists.
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue): Parse a second token and put the values into a CSSValueList.
        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        (WebCore::CSSPrimitiveValue::operator EFlexWrap):
        * css/CSSStyleApplyProperty.cpp:
        (WebCore::ApplyPropertyFlexFlow::applyInheritValue): Does not inherit.
        (WebCore::ApplyPropertyFlexFlow::applyInitialValue):
        (WebCore::ApplyPropertyFlexFlow::applyValue): Special handler for setting two render style values from one
        CSS property.
        (WebCore::ApplyPropertyFlexFlow::createHandler):
        (WebCore::CSSStyleApplyProperty::CSSStyleApplyProperty):
        * css/CSSValueKeywords.in:
        * rendering/style/RenderStyle.h:
        (WebCore::InheritedFlags::flexWrap):
        (WebCore::InheritedFlags::setFlexWrap):
        (WebCore::InheritedFlags::initialFlexWrap):
        * rendering/style/RenderStyleConstants.h: EFlexWrap to hold flex wrap values.
        * rendering/style/StyleFlexibleBoxData.cpp:
        (WebCore::StyleFlexibleBoxData::StyleFlexibleBoxData):
        (WebCore::StyleFlexibleBoxData::operator==):
        * rendering/style/StyleFlexibleBoxData.h: 2 bits is enough to hold the 4 flexFlow values.

2011-12-09  KwangHyuk Kim  <hyuki.kim@samsung.com>

        [EFL] Add RefPtrEfl specialization for evas_object.
        https://bugs.webkit.org/show_bug.cgi?id=73790

        Reviewed by Ryosuke Niwa.

        As evas_object is also based on reference count, RefPtr is applied for evas_object.

        * PlatformEfl.cmake:
        * platform/efl/RefPtrEfl.cpp: Added.
        (WTF::refIfNotNull):
        (WTF::derefIfNotNull):
        * platform/efl/RefPtrEfl.h: Added.

2011-12-09  Tony Chang  <tony@chromium.org>

        REGRESSION(102234): 2-3% layout regression
        https://bugs.webkit.org/show_bug.cgi?id=74141

        Reviewed by David Hyatt.

        Don't allocate a RuleSet when there are no regions.

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

2011-12-09  Anders Carlsson  <andersca@apple.com>

        Fix assertion failure in ScrollAnimatorMac
        https://bugs.webkit.org/show_bug.cgi?id=74222

        Reviewed by Andreas Kling.

        * platform/mac/ScrollAnimatorMac.mm:
        (-[WebScrollbarPainterControllerDelegate scrollerImpPair:convertContentPoint:toScrollerImp:]):
        This can be called with a nil scrollerImp, just return NSZeroPoint when that happens.

2011-12-09  Anders Carlsson  <andersca@apple.com>

        Move the "is currently drawing into layer" flag out into ScrollbarThemeMac
        https://bugs.webkit.org/show_bug.cgi?id=74217

        Reviewed by Beth Dakin.

        There's no need to store this flag inside ScrollAnimatorMac, just make it a global and put it in ScrollbarThemeMac instead.

        * platform/mac/ScrollAnimatorMac.h:
        * platform/mac/ScrollAnimatorMac.mm:
        (-[WebScrollbarPainterDelegate layer]):
        (WebCore::ScrollAnimatorMac::ScrollAnimatorMac):
        * platform/mac/ScrollbarThemeMac.h:
        * platform/mac/ScrollbarThemeMac.mm:
        (WebCore::ScrollbarThemeMac::isCurrentlyDrawingIntoLayer):
        (WebCore::ScrollbarThemeMac::paint):

2011-12-09  Anders Carlsson  <andersca@apple.com>

        Minor cleanup in ScrollAnimatorMac.mm
        https://bugs.webkit.org/show_bug.cgi?id=74211

        Reviewed by Andreas Kling.

        * platform/mac/ScrollAnimatorMac.mm:
        (-[WebScrollbarPainterDelegate mouseLocationInScrollerForScrollerImp:]):
        No need to get the scrollbar from the scroll animator anymore.

        (-[WebScrollbarPainterDelegate setUpAlphaAnimation:scrollerPainter:part:WebCore::animateAlphaTo:duration:]):
        (-[WebScrollbarPainterDelegate scrollerImp:animateUIStateTransitionWithDuration:]):
        Try to get data from the scrollbar and/or the scrollable area instead of the scrollbar painter.

2011-12-09  David Levin  <levin@chromium.org>

        Regression(r53595): Sync xhr requests in workers aren't terminated on worker close.
        https://bugs.webkit.org/show_bug.cgi?id=71695

        Reviewed by Zoltan Herczeg.

        Overview: Message loops rely on the message queue being killed in order
        to exit. r53595 stopped this from happening because killing a message loop
        would also stop it from doing database clean up tasks. The database clean up
        tasks needed to be tasks due to ordering issues. (They wanted to run after
        certain order tasks were run.) This was solved by once again terminating
        the message queue but then still runnning clean-up tasks from the killed
        message queue.

        * workers/WorkerRunLoop.cpp:
        (WebCore::WorkerRunLoop::run): Added the call to run clean-up tasks.
        (WebCore::WorkerRunLoop::runInMode):
        (WebCore::WorkerRunLoop::runCleanupTasks): Loop to simply clear out all clean up tasks.
        (WebCore::WorkerRunLoop::Task::performTask): Stop non-clean up tasks
        from running after the loop has been terminated.
        * workers/WorkerRunLoop.h:
        (WebCore::WorkerRunLoop::terminated): Just made it const.
        * workers/WorkerThread.cpp:
        (WebCore::WorkerThreadShutdownFinishTask::performTask): Removed
        the terminate clause since it was put back in stop.
        (WebCore::WorkerThread::stop): Terminate the run loop so
        that all loops will exit and clean up tasks will run. Also removed a comment
        about nested workers because nested workers are no longer imminent and the
        issue mentioned is one of many that should logically be investigated -- behavior correctness
        in the face of different orderings of shutdown between the document and each worker --
        when implementing them.

2011-12-09  Tony Chang  <tony@chromium.org>

        Unreviewed, rolling out r102416.
        http://trac.webkit.org/changeset/102416
        https://bugs.webkit.org/show_bug.cgi?id=73394

        Chromium Win clobber builds are failing.

        * WebCore.gyp/WebCore.gyp:
        * WebCore.gyp/scripts/action_derivedsourcesallinone.py:
        (main):
        * WebCore.gypi:
        * bindings/scripts/generate-bindings.pl:
        * page/DOMWindow.idl:
        * webaudio/DOMWindowWebAudio.idl: Removed.

2011-12-09  Eric Carlson  <eric.carlson@apple.com>

        JSC wrappers for TextTrack and TextTrackCue should not be collected during event dispatch or when owner is reachable
        https://bugs.webkit.org/show_bug.cgi?id=72179

        Reviewed by Geoff Garen.

        Tests: media/track/text-track-cue-is-reachable.html
               media/track/text-track-is-reachable.html

        * GNUmakefile.list.am: Add JSTextTrackCueCustom.cpp and JSTextTrackCustom.cpp.
        * Target.pri: Ditto.
        * WebCore.gypi: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Ditto
        * bindings/js/JSBindingsAllInOne.cpp: Ditto.

        * bindings/js/JSTextTrackCueCustom.cpp: Added.
        (WebCore::JSTextTrackCueOwner::isReachableFromOpaqueRoots): New.
        (WebCore::JSTextTrackCueOwner::visitChildren): New.

        * bindings/js/JSTextTrackCustom.cpp: Added.
        (WebCore::JSTextTrackOwner::isReachableFromOpaqueRoots): New.
        (WebCore::JSTextTrack::visitChildren): New, mark all cues.
        * bindings/js/JSTextTrackCustom.h: Added.
        (WebCore::root): New.

        * bindings/js/JSTextTrackListCustom.cpp:
        (WebCore::JSTextTrackList::visitChildren): New, mark all tracks.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::trackWillBeRemoved): TextTracks::remove now takes a TextTrack*.

        * html/LoadableTextTrack.h:
        (WebCore::LoadableTextTrack::trackElement): New, return the <track>.

        * html/TextTrack.cpp:
        (WebCore::TextTrack::TextTrack): Initialize m_mediaElement.
        * html/TextTrack.h:
        (WebCore::TextTrack::setMediaElement): New.
        (WebCore::TextTrack::mediaElement): Ditto.

        * html/TextTrack.idl: Add CustomIsReachable and CustomMarkFunction.

        * html/TextTrackCue.idl: Add CustomIsReachable.

        * html/track/TextTrackList.cpp:
        (TextTrackList::append): Set track's media element.
        (TextTrackList::remove): Clear track's media element. Take a raw ptr, not a PassRefPtr.
        * html/track/TextTrackList.h:
        * html/track/TextTrackList.idl: Add CustomMarkFunction

2011-12-09  Chris Fleizach  <cfleizach@apple.com>

        WebKit should ignore images with @alt matching only whitespace
        https://bugs.webkit.org/show_bug.cgi?id=74189

        Reviewed by Darin Adler.

        Test: accessibility/img-alt-tag-only-whitespace.html

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::accessibilityIsIgnored):

2011-12-09  Anders Carlsson  <andersca@apple.com>

        Remove NSAnimationContext calls
        https://bugs.webkit.org/show_bug.cgi?id=74207

        Reviewed by Sam Weinig.

        NSAnimationContext is not used for NSAnimation subclasses, so the calls to beginGrouping/endGrouping and setDuration:
        are essentially no-ops. Remove them.

        * platform/mac/ScrollAnimatorMac.mm:
        (-[WebScrollbarPainterDelegate setUpAlphaAnimation:scrollerPainter:part:WebCore::animateAlphaTo:duration:]):
        (-[WebScrollbarPainterDelegate scrollerImp:animateUIStateTransitionWithDuration:]):

2011-12-09  Anders Carlsson  <andersca@apple.com>

        Rename scrollAnimatorDestroyed to invalidate
        https://bugs.webkit.org/show_bug.cgi?id=74206

        Reviewed by Sam Weinig.

        Since these methods can be called when both scrollbars are destroyed and the scroll animator itself is
        destroyed, rename it to something more neutral.

        * platform/mac/ScrollAnimatorMac.mm:
        (-[WebScrollAnimationHelperDelegate invalidate]):
        (-[WebScrollbarPartAnimation invalidate]):
        (-[WebScrollbarPainterDelegate invalidate]):
        (WebCore::ScrollAnimatorMac::~ScrollAnimatorMac):
        (WebCore::ScrollAnimatorMac::willRemoveVerticalScrollbar):
        (WebCore::ScrollAnimatorMac::willRemoveHorizontalScrollbar):

2011-12-09  Anders Carlsson  <andersca@apple.com>

        WebScrollbarPainterControllerDelegate should know about the ScrollableArea, not the ScrollAnimatorMac
        https://bugs.webkit.org/show_bug.cgi?id=74204

        Reviewed by Sam Weinig.

        It makes more logical sense to associate the WebScrollbarPainterControllerDelegate object with its ScrollableArea, since
        painting has nothing to do with animation.

        * platform/mac/ScrollAnimatorMac.mm:
        (-[WebScrollbarPainterControllerDelegate initWithScrollableArea:]):
        (-[WebScrollbarPainterControllerDelegate invalidate]):
        (-[WebScrollbarPainterControllerDelegate contentAreaRectForScrollerImpPair:]):
        (-[WebScrollbarPainterControllerDelegate inLiveResizeForScrollerImpPair:]):
        (-[WebScrollbarPainterControllerDelegate mouseLocationInContentAreaForScrollerImpPair:]):
        (-[WebScrollbarPainterControllerDelegate scrollerImpPair:convertContentPoint:toScrollerImp:]):
        (-[WebScrollbarPainterControllerDelegate scrollerImpPair:updateScrollerStyleForNewRecommendedScrollerStyle:]):
        (WebCore::ScrollAnimatorMac::ScrollAnimatorMac):
        (WebCore::ScrollAnimatorMac::~ScrollAnimatorMac):

2011-12-09  Jarred Nicholls  <jarred@sencha.com>

        [JSC] Allow cached attributes in bindings that declare a custom mark function
        https://bugs.webkit.org/show_bug.cgi?id=74187

        Reviewed by Oliver Hunt.

        No new tests, current binding tests are sufficient.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateImplementation):

2011-12-09  Anders Carlsson  <andersca@apple.com>

        Remove duplicate animation ivars
        https://bugs.webkit.org/show_bug.cgi?id=74194

        Reviewed by Sam Weinig.

        Since we now have one WebScrollbarPainterDelegate for each scrollbar, we no longer need separate
        vertical/horizontal animation objects, so get rid of them.

        * platform/mac/ScrollAnimatorMac.mm:
        (-[WebScrollbarPainterDelegate cancelAnimations]):
        (-[WebScrollbarPainterDelegate scrollerImp:animateKnobAlphaTo:duration:]):
        (-[WebScrollbarPainterDelegate scrollerImp:animateTrackAlphaTo:duration:]):
        (-[WebScrollbarPainterDelegate scrollerImp:animateUIStateTransitionWithDuration:]):
        (-[WebScrollbarPainterDelegate scrollAnimatorDestroyed]):

2011-12-09  Anders Carlsson  <andersca@apple.com>

        WebScrollbarPartAnimation should only know about the scrollbar it's animating
        https://bugs.webkit.org/show_bug.cgi?id=74192

        Reviewed by Sam Weinig.

        * platform/mac/ScrollAnimatorMac.mm:
        (-[WebScrollbarPartAnimation initWithScrollbar:featureToAnimate:animateFrom:animateTo:duration:]):
        Change the designated initializer to just take the scrollbar. Also, make the animation non-blocking here
        so we don't have to do it in all the call sites.

        (-[WebScrollbarPartAnimation startAnimation]):
        Update the scrollbar painter.

        (-[WebScrollbarPartAnimation setCurrentProgress:]):
        Just invalidate the scrollbar we're animating.

        (-[WebScrollbarPainterDelegate setUpAlphaAnimation:scrollerPainter:part:WebCore::animateAlphaTo:duration:]):
        (-[WebScrollbarPainterDelegate scrollerImp:animateUIStateTransitionWithDuration:]):
        Update call sites to use the new designated initializer.

2011-12-08  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        Inspector: Don't translate the context when rendering the highlights on a tiled layer.
        https://bugs.webkit.org/show_bug.cgi?id=74085

        Reviewed by Kenneth Rohde Christiansen.

        When the frame view is using fixed layouting, the page overlay is the size of the whole
        page and the context shouldn't be translated. The visible rect is still used in that
        case to display element titles within the visible rect.

        Also:
        - Rename overlayRect to visibleRect to reduce confusion in this case.
        - Remove the superfluous boundingBox check.

        * inspector/DOMNodeHighlighter.cpp:

2011-12-09  Vsevolod Vlasov  <vsevik@chromium.org>

        Unreviewed inspector utilities syntax fix.

        * inspector/front-end/utilities.js:
        ():

2011-12-09  Joone Hur  <joone.hur@collabora.co.uk>, Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk> 

        [GTK] Initial implementation of Accelerated Compositing using Clutter
        https://bugs.webkit.org/show_bug.cgi?id=73319

        Reviewed by Gustavo Noronha Silva.

        No new tests added as this feature will be able to reuse the existing 
        CSS3 transforms layout tests.

        * GNUmakefile.am: Include WebCore/platform/graphics/clutter path.
        * GNUmakefile.list.am: Add GraphicsLayerClutter.
        * platform/clutter/GRefPtrClutter.cpp: Added.
        (WTF::adoptGRef):
        (WTF::ClutterActor):
        * platform/clutter/GRefPtrClutter.h: Added.
        * platform/graphics/GraphicsLayer.h: Define PlatformLayer type, which represents ClutterActor.
        * platform/graphics/clutter/GraphicsLayerClutter.cpp: Boilerplate implementation.
        (WebCore::GraphicsLayerClutter::GraphicsLayerClutter):
        (WebCore::GraphicsLayerClutter::platformLayer):
        * platform/graphics/clutter/GraphicsLayerClutter.h: Boilerplate implementation.

2011-12-08  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Introduce a Map class allowing to store values indexed by arbitrary objects.
        https://bugs.webkit.org/show_bug.cgi?id=74084

        Reviewed by Pavel Feldman.

        Test: inspector/map.html

        * inspector/front-end/treeoutline.js:
        (TreeOutline):
        ():
        (TreeElement.prototype.collapse):
        (TreeElement.prototype.expand):
        * inspector/front-end/utilities.js:
        ():

2011-12-09  Peter Rybin  <peter.rybin@gmail.com>

        Web Inspector: [protocol] generate C++ classes for protocol JSON named types
        https://bugs.webkit.org/show_bug.cgi?id=72835

        Reviewed by Yury Semikhatsky.

        Extends python generator functionality.
        Makes constructor in InspectorObject public.

        * inspector/CodeGeneratorInspector.py:
        * inspector/InspectorValues.h:

2011-12-08  Viatcheslav Ostapenko  <ostapenko.viatcheslav@nokia.com>

        [Qt] [WK2] Webkit should release TextureMapper GL objects if page paint node is deallocated.
        https://bugs.webkit.org/show_bug.cgi?id=73591

        Reviewed by Noam Rosenthal.

        Implementation of helper function to remove all GL allocated tiles
        when QQuickWebView gets removed from canvas.

        Tested by new API test in WK2 (tst_QQuickWebView::removeFromCanvas).

        * platform/graphics/texmap/TextureMapperNode.cpp:
        (WebCore::TextureMapperNode::purgeNodeTexturesRecursive):
        * platform/graphics/texmap/TextureMapperNode.h:

2011-12-08  Leo Yang  <leo.yang@torchmobile.com.cn>

        Upstream platform/network/blackberry/DeferredData.{h, cpp}, NetworkJob.{h, cpp} and NetworkManager.{h, cpp}
        https://bugs.webkit.org/show_bug.cgi?id=73791

        Reviewed by Rob Buis.

        Other main contributors:
        Joe Mason <jmason@rim.com>
        Lianghui Chen <liachen@rim.com>
        Charles Wei <charles.wei@torchmobile.com.cn>

        Initial upstream, can't be built yet, no new tests.

        * platform/network/blackberry/DeferredData.cpp: Added.
        * platform/network/blackberry/DeferredData.h: Added.
        * platform/network/blackberry/NetworkJob.cpp: Added.
        * platform/network/blackberry/NetworkJob.h: Added.
        * platform/network/blackberry/NetworkManager.cpp: Added.
        * platform/network/blackberry/NetworkManager.h: Added.

2011-12-08  Ryosuke Niwa  <rniwa@webkit.org>

        It's semantically incorrect to call notifyNodeListsAttributeChanged in dispatchSubtreeModifiedEvent
        https://bugs.webkit.org/show_bug.cgi?id=74028

        Reviewed by Darin Adler.

        Remove a call to notifyNodeListsAttributeChanged in dispatchSubtreeModified and add explicit calls
        to notifyNodeListsAttributeChanged at appropriate places.

        Also merge notifyNodeListsChildrenChanged with notifyLocalNodeListsChildrenChanged, and
        notifyNodeListsAttributeChanged with notifyLocalNodeListsAttributeChanged, and rename them to
        invalidateNodeListsCacheAfterAttributeChanges and invalidateNodeListsCacheAfterNodeChanges respectively.

        * dom/Attr.cpp:
        (WebCore::Attr::childrenChanged):
        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::childrenChanged):
        * dom/Document.cpp:
        (WebCore::Document::updateRangesAfterNodeChanges):
        * dom/Document.h:
        * dom/NamedNodeMap.cpp:
        (WebCore::NamedNodeMap::addAttribute):
        (WebCore::NamedNodeMap::removeAttribute):
        * dom/Node.cpp:
        (WebCore::removeNodeListCacheIfPossible):
        (WebCore::Node::unregisterDynamicNodeList):
        (WebCore::Node::invalidateNodeListsCacheAfterAttributeChanges):
        (WebCore::Node::invalidateNodeListsCacheAfterNodeChanges):
        (WebCore::Node::dispatchSubtreeModifiedEvent):
        * dom/Node.h:
        * dom/NodeRareData.h:
        * dom/StyledElement.cpp:
        (WebCore::StyledElement::classAttributeChanged):

2011-12-08  Kenichi Ishibashi  <bashi@chromium.org>

        Unreviewed, rolling out r102418.
        http://trac.webkit.org/changeset/102418
        https://bugs.webkit.org/show_bug.cgi?id=71870

        Caused Chromium build failure.

        * CMakeLists.txt:
        * DerivedSources.make:
        * DerivedSources.pri:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSWebGLRenderingContextCustom.cpp:
        (WebCore::toJS):
        * bindings/v8/custom/V8WebGLRenderingContextCustom.cpp:
        (WebCore::toV8Object):
        * html/canvas/WebGLExtension.h:
        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::getExtension):
        (WebCore::WebGLRenderingContext::getSupportedExtensions):
        (WebCore::WebGLRenderingContext::maybeRestoreContext):
        * html/canvas/WebGLRenderingContext.h:
        * html/canvas/WebKitLoseContext.cpp: Renamed from Source/WebCore/html/canvas/WebGLLoseContext.cpp.
        (WebCore::WebKitLoseContext::WebKitLoseContext):
        (WebCore::WebKitLoseContext::~WebKitLoseContext):
        (WebCore::WebKitLoseContext::getName):
        (WebCore::WebKitLoseContext::create):
        (WebCore::WebKitLoseContext::loseContext):
        (WebCore::WebKitLoseContext::restoreContext):
        * html/canvas/WebKitLoseContext.h: Renamed from Source/WebCore/html/canvas/WebGLLoseContext.h.
        * html/canvas/WebKitLoseContext.idl: Renamed from Source/WebCore/html/canvas/WebGLLoseContext.idl.

2011-12-08  Fady Samuel  <fsamuel@chromium.org>

        [Chromium] Enable viewport metatag
        https://bugs.webkit.org/show_bug.cgi?id=73495

        Reviewed by Darin Fisher.

        Recompute viewpot parameters on frame rect resize.

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

2011-12-08  Kent Tamura  <tkent@chromium.org>

        Build fix for r102419.
        https://bugs.webkit.org/show_bug.cgi?id=73916

        * platform/PopupMenuClient.h:
        (WebCore::PopupMenuClient::listBoxSelectItem):
        Remove unused argument names.

2011-12-08  Kentaro Hara  <haraken@chromium.org>

        Unreviewed. Rebaselined run-bindings-tests results.

        * bindings/scripts/test/JS/JSFloat64Array.cpp:
        * bindings/scripts/test/JS/JSTestEventConstructor.cpp:
        * bindings/scripts/test/JS/JSTestInterface.cpp:
        * bindings/scripts/test/JS/JSTestMediaQueryListListener.cpp:
        * bindings/scripts/test/JS/JSTestNamedConstructor.cpp:
        * bindings/scripts/test/JS/JSTestObj.cpp:
        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp:

2011-12-08  Mary Wu  <mary.wu@torchmobile.com.cn>

        Upstream BlackBerry porting of MIMETypeRegistry/KeyboardEvent
        https://bugs.webkit.org/show_bug.cgi?id=73534

        Reviewed by Rob Buis.

        Other main contributors:
        Mike Fenton <mifenton@rim.com>
        Joe Mason <jmason@rim.com>
        Max Feil <mfeil@qnx.com>
        Lukas Sydorowski <lsydorowski@rim.com>
        Crystal Zhang <haizhang@rim.com> 

        Initial upstream, no new tests.

        * platform/blackberry/MIMETypeRegistryBlackBerry.cpp: Added.
        (WebCore::MIMETypeRegistry::getMIMETypeForExtension):
        (WebCore::MIMETypeRegistry::getPreferredExtensionForMIMEType):
        (WebCore::MIMETypeRegistry::isApplicationPluginMIMEType):
        * platform/blackberry/PlatformKeyboardEventBlackBerry.cpp: Added.
        (WebCore::keyIdentifierForBlackBerryCharacter):
        (WebCore::windowsKeyCodeForBlackBerryCharacter):
        (WebCore::adjustCharacterFromOS):
        (WebCore::toWebCorePlatformKeyboardEventType):
        (WebCore::PlatformKeyboardEvent::PlatformKeyboardEvent):
        (WebCore::PlatformKeyboardEvent::currentCapsLockState):
        (WebCore::PlatformKeyboardEvent::disambiguateKeyDownEvent):
        (WebCore::PlatformKeyboardEvent::getCurrentModifierState):

2011-12-08  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r101619.
        http://trac.webkit.org/changeset/101619
        https://bugs.webkit.org/show_bug.cgi?id=74158

        this patch produces bad behaviour on mac (Requested by
        jeremya_ on #webkit).

        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleMouseMoveEvent):
        (WebCore::EventHandler::dragSourceEndedAt):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateHoverActiveState):

2011-12-08  Adam Klein  <adamk@chromium.org>

        [MutationObservers] V8LazyEventHandler breaks microtask delivery semantics
        https://bugs.webkit.org/show_bug.cgi?id=73492

        Reviewed by Adam Barth.

        Test: fast/mutation/inline-event-listener.html

        * bindings/v8/V8LazyEventListener.cpp:
        (WebCore::V8LazyEventListener::prepareListenerObject): Call v8::Script::Run directly instead of going through V8Proxy.

2011-12-08  Hayato Ito  <hayato@chromium.org>

        Suppress rendering of light children when ShadowRoot is dynamically created.
        https://bugs.webkit.org/show_bug.cgi?id=72441

        Reviewed by Ryosuke Niwa.

        Tests: fast/dom/shadow/dynamically-created-shadow-root-expected.html
               fast/dom/shadow/dynamically-created-shadow-root.html

        * dom/Element.cpp:
        (WebCore::Element::setShadowRoot):

2011-12-08  Pierre Rossi  <pierre.rossi@gmail.com>

        Drop ENABLE_NO_LISTBOX_RENDERING, and make it a runtime decision.
        https://bugs.webkit.org/show_bug.cgi?id=73916

        This was needed for Qt since the mobile theme, which can be picked
        up at runtime, delegates the rendering of list boxes.

        Reviewed by Kent Tamura.

        No new tests, there's no functional change.

        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::usesMenuList):
        * html/HTMLSelectElement.h:
        * platform/PopupMenuClient.h:
        (WebCore::PopupMenuClient::listBoxSelectItem):
        (WebCore::PopupMenuClient::multiple):
        * platform/qt/RenderThemeQtMobile.h:
        (WebCore::RenderThemeQtMobile::delegatesMenuListRendering):
        * rendering/RenderMenuList.cpp:
        (WebCore::RenderMenuList::multiple):
        * rendering/RenderMenuList.h:
        * rendering/RenderTheme.h:
        (WebCore::RenderTheme::delegatesMenuListRendering):

2011-12-08  Kenneth Russell  <kbr@google.com>

        Rename WEBKIT_lose_context to WEBKIT_WEBGL_lose_context
        https://bugs.webkit.org/show_bug.cgi?id=71870

        Reviewed by James Robinson.

        Rename largely done with do-webcore-rename with a couple of
        necessary manual fixups. Ran WebGL layout tests.

        * CMakeLists.txt:
        * DerivedSources.make:
        * DerivedSources.pri:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSWebGLRenderingContextCustom.cpp:
        (WebCore::toJS):
        * bindings/v8/custom/V8WebGLRenderingContextCustom.cpp:
        (WebCore::toV8Object):
        * html/canvas/WebGLExtension.h:
        * html/canvas/WebGLLoseContext.cpp: Copied from Source/WebCore/html/canvas/WebKitLoseContext.cpp.
        (WebCore::WebGLLoseContext::WebGLLoseContext):
        (WebCore::WebGLLoseContext::~WebGLLoseContext):
        (WebCore::WebGLLoseContext::getName):
        (WebCore::WebGLLoseContext::create):
        (WebCore::WebGLLoseContext::loseContext):
        (WebCore::WebGLLoseContext::restoreContext):
        * html/canvas/WebGLLoseContext.h: Copied from Source/WebCore/html/canvas/WebKitLoseContext.h.
        * html/canvas/WebGLLoseContext.idl: Copied from Source/WebCore/html/canvas/WebKitLoseContext.idl.
        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::getExtension):
        (WebCore::WebGLRenderingContext::getSupportedExtensions):
        (WebCore::WebGLRenderingContext::maybeRestoreContext):
        * html/canvas/WebGLRenderingContext.h:
        * html/canvas/WebKitLoseContext.cpp: Removed.
        * html/canvas/WebKitLoseContext.h: Removed.
        * html/canvas/WebKitLoseContext.idl: Removed.

2011-12-08  Kentaro Hara  <haraken@chromium.org>

        Use the [Supplemental] IDL for webaudio attributes in Chromium
        https://bugs.webkit.org/show_bug.cgi?id=73394

        Reviewed by Adam Barth.

        - Overview: Using the [Supplemental] IDL, this patch moves the attribute
        declarations of webaudio from DOMWindow.idl into a new IDL file
        webaudio/DOMWindowWebAudio.idl, which helps make webaudio a self-contained
        feature (aka a module).

        - This patch changes the build flow of WebCore.gyp as follows:

            Previous build flow:
                foreach $idl (all IDL files) {
                    generate-bindings.pl depends on $idl;
                    generate-bindings.pl reads $idl;
                    generate-bindings.pl generates .h and .cpp files for $idl;
                }

            New build flow (See the discussions in bug 72138 for more details):
                resolve-supplemental.pl depends on all IDL files;
                resolve-supplemental.pl reads all IDL files;
                resolve-supplemental.pl resolves the dependency of [Supplemental=XXXX];
                resolve-supplemental.pl outputs supplemental_dependency.tmp;
                foreach $idl (all IDL files) {
                    generate-bindings.pl depends on $idl and supplemental_dependency.tmp;
                    generate-bindings.pl reads $idl;
                    generate-bindings.pl reads supplemental_dependency.tmp;
                    generate-bindings.pl generates .h and .cpp files for $idl, including all attributes in IDL files whilementing $idl;
                }

        - This patch introduces a temporary IDL, [Supplemented]. The [Supplemented] IDL
        will be removed after build scripts for all platforms support the [Supplemental] IDL.
        The motivation for the [Supplemented] IDL is as follows:

        In order to support the [Supplemental] IDL, we need to
        (1) run resolve-supplemental.pl and generate supplemental_dependency.tmp
        (2) and run generate-bindings.pl with the supplemental_dependency.tmp.

        This build flow requires a change on the following build scripts,
        but changing all the build scripts all at once without any regression is too difficult:

            - DerivedSources.make
            - DerivedSources.pri
            - GNUmakefile.am
            - PlatformBlackBerry.cmake
            - UseJSC.cmake
            - UseV8.cmake
            - WebCore.vcproj/MigrateScripts
            - WebCore.vcproj/WebCore.vcproj
            - bindings/gobject/GNUmakefile.am
            - WebCore.gyp/WebCore.gyp

        Thus, we are planning to change the build scripts one by one, which implies that
        we need to allow the temporary state in which some build scripts support [Supplemental] IDL
        but others do not. To accomplish this, we introduce a temporary IDL, [Supplemented].
        The [Supplemented] IDL on an attribute means that the attribute is marked with [Supplemental]
        in another IDL file somewhere, like this:

            DOMWindowWebAudio.idl:
                interface [
                    Supplemental=DOMWindow
                ] DOMWindowWebAudio {
                    attribute attr1;
                    attribute attr2;
                };

            DOMWindow.idl:
                interface [
                ] DOMWindow {
                    attribute [Supplemented] attr1; // This line will be removed after all build scripts support the [Su IDL
                    attribute [Supplemented] attr2; // This line will be removed after all build scripts support the [Su IDL.
                    attribute attr3;
                    attribute attr4;
                };

        Assuming these IDL files, this patch implements the following logic in generate-bindings.pl:

            - If a given build script supports the [Supplemental] IDL,
            generate-bindings.pl ignores all attributes with the [Supplemented] IDL.
            - Otherwise, generate-bindings.pl treats all attributes with the [Supplemented] IDL
            as normal attributes and instead ignores all attributes with the [Supplemental] IDL
            (i.e. generate-bindings.pl generates nothing from the IDL file with the [Supplemental] IDL).

        Tests: webaudio/*

        * WebCore.gyp/WebCore.gyp: Describes the build flow that I described above.
        * WebCore.gyp/scripts/action_derivedsourcesallinone.py:
        (main): Reads the IDL file names from the input file (i.e. supplemental_dependency.tmp), which are described at the first column of each line in the input file. If the file name is a "/cygdrive/c/..."-style path, it is converted to a "C:\cygwin\..."-style path by the cygpath command.
        * WebCore.gypi: Added DOMWindowWebAudio.idl.
        * bindings/scripts/generate-bindings.pl: As a temporary solution, if the platform does not support the [Supplemental] IDL, the perl script ignores the [Supplemental] IDL and instead uses the [Supplemented] IDL. Otherwise, the perl script ignores the [Supplemented] IDL and instead uses the [Supplemental] IDL.
        * page/DOMWindow.idl: Added the [Supplemented] IDL to webaudio-related attributes. As I described above, the [Supplemented] IDL will be removed after all platforms support the [Supplemental] IDL.
        * webaudio/DOMWindowWebAudio.idl: Added. Describes the [Supplemental=DOMWindow] IDL. The attributes in this IDL file should be treated as if they are written in DOMWindow.idl.

2011-12-08  Van Lam  <vanlam@google.com>

        Caret keeps blinking during forward-delete
        https://bugs.webkit.org/show_bug.cgi?id=38564

        Reviewed by Darin Adler.

        Currently updateAppearance determines if the caret should stop blinking
        based on whether or not the editing operation changed the position of
        the caret; so the caret stops blinking in case of typing text and
        backwards delete (which always displace the caret) but does not stop
        blinking in the case of forward delete (which does not displace the
        caret).

        Added a boolean member function shouldStopCaretBlinking in EditCommand
        which will return true if the object is a TypingCommand (my
        understanding here is that all TypingCommands should stop the caret
        from blinking for a cycle, currently 0.5 seconds). Then used this
        function to stop the caret from blinking if the last editing command
        is a TypingCommand.

        * editing/EditCommand.h:
        (WebCore::EditCommand::shouldStopCaretBlinking):
        * editing/FrameSelection.cpp:
        (WebCore::FrameSelection::updateAppearance):
        * editing/TypingCommand.h:
        (WebCore::TypingCommand::shouldStopCaretBlinking):

2011-12-08  Adam Klein  <adamk@chromium.org>

        Use HashMap<Node*, OwnPtr<...>> in ChildListMutationScope
        https://bugs.webkit.org/show_bug.cgi?id=73964

        Reviewed by Darin Adler.

        Re-landing r102267 with a fix for the clang build.

        No new tests, refactoring only.

        * dom/ChildListMutationScope.cpp:
        (WebCore::ChildListMutationAccumulator::MutationAccumulationRouter::childAdded):
        (WebCore::ChildListMutationAccumulator::MutationAccumulationRouter::willRemoveChild):
        (WebCore::ChildListMutationAccumulator::MutationAccumulationRouter::incrementScopingLevel):
        (WebCore::ChildListMutationAccumulator::MutationAccumulationRouter::decrementScopingLevel):

2011-12-08  Anders Carlsson  <andersca@apple.com>

        WebScrollbarPainterDelegate should have a pointer to its Scrollbar
        https://bugs.webkit.org/show_bug.cgi?id=74149

        Reviewed by Darin Adler.

        This is another step towards making the scroll animation code more robust.

        * platform/mac/ScrollAnimatorMac.mm:
        (-[WebScrollbarPainterDelegate initWithScrollbar:WebCore::]):
        (-[WebScrollbarPainterDelegate scrollAnimator]):
        (-[WebScrollbarPainterDelegate layer]):
        (-[WebScrollbarPainterDelegate mouseLocationInScrollerForScrollerImp:]):
        (-[WebScrollbarPainterDelegate scrollerImp:animateKnobAlphaTo:duration:]):
        (-[WebScrollbarPainterDelegate scrollerImp:animateTrackAlphaTo:duration:]):
        (-[WebScrollbarPainterDelegate scrollerImp:animateUIStateTransitionWithDuration:]):
        (-[WebScrollbarPainterDelegate scrollAnimatorDestroyed]):
        (WebCore::ScrollAnimatorMac::didAddVerticalScrollbar):
        (WebCore::ScrollAnimatorMac::didAddHorizontalScrollbar):

2011-12-08  Rakesh KN  <rakesh.kn@motorola.com>

        keyboard event doesn't fire while moving mouse with button pressed
        https://bugs.webkit.org/show_bug.cgi?id=73821

        Reviewed by Alexey Proskuryakov.

        Autoscroll should not stop on key press.

        Test: fast/events/autoscroll-should-not-stop-on-keypress.html

        * page/EventHandler.cpp:
        (WebCore::EventHandler::keyEvent):
        Removed the check for autoscroll so that autoscroll is not stopped on
        key press and key event is processed. 

2011-12-08  Anders Carlsson  <andersca@apple.com>

        Add scrollAnimator getter method to WebScrollbarPainterDelegate
        https://bugs.webkit.org/show_bug.cgi?id=74146

        Reviewed by Beth Dakin.

        * platform/mac/ScrollAnimatorMac.mm:
        (-[WebScrollbarPainterDelegate scrollAnimator]):
        (-[WebScrollbarPainterDelegate layer]):
        (-[WebScrollbarPainterDelegate mouseLocationInScrollerForScrollerImp:]):
        (-[WebScrollbarPainterDelegate setUpAlphaAnimation:scrollerPainter:part:WebCore::animateAlphaTo:duration:]):
        (-[WebScrollbarPainterDelegate scrollerImp:animateKnobAlphaTo:duration:]):
        (-[WebScrollbarPainterDelegate scrollerImp:animateTrackAlphaTo:duration:]):
        (-[WebScrollbarPainterDelegate scrollerImp:animateUIStateTransitionWithDuration:]):

2011-12-08  James Robinson  <jamesr@chromium.org>

        Improve handling of frame removal during requestAnimationFrame callback invocation
        https://bugs.webkit.org/show_bug.cgi?id=74036

        Reviewed by Adam Barth.

        See bug for details.

        Test: fast/animation/request-animation-frame-detach-element.html

        * dom/Document.cpp:
        (WebCore::Document::removedLastRef):
        (WebCore::Document::detach):
        * dom/Document.h:
        * dom/ScriptedAnimationController.cpp:
        (WebCore::ScriptedAnimationController::~ScriptedAnimationController):
        (WebCore::ScriptedAnimationController::serviceScriptedAnimations):
        (WebCore::ScriptedAnimationController::scheduleAnimation):
        * dom/ScriptedAnimationController.h:
        (WebCore::ScriptedAnimationController::create):
        (WebCore::ScriptedAnimationController::clearDocumentPointer):
        * page/FrameView.cpp:
        (WebCore::FrameView::serviceScriptedAnimations):

2011-12-08  Yongjun Zhang  <yongjun_zhang@apple.com>

        Use bitfield for bool data members in BitmapImage.
        https://bugs.webkit.org/show_bug.cgi?id=74102

        Reviewed by Darin Adler.

        Class BitmapImage and FrameData has bool data members, we can use bitfield for those data
        members to reduce the BitmapImage's memory footprint.

        * platform/graphics/BitmapImage.cpp:
        (WebCore::BitmapImage::BitmapImage):
        * platform/graphics/BitmapImage.h:
        (WebCore::FrameData::FrameData):
        * platform/graphics/cairo/ImageCairo.cpp:
        (WebCore::BitmapImage::BitmapImage):
        * platform/graphics/cg/ImageCG.cpp:
        (WebCore::BitmapImage::BitmapImage):
        * platform/graphics/openvg/ImageOpenVG.cpp:
        (WebCore::BitmapImage::BitmapImage):
        * platform/graphics/qt/ImageQt.cpp:
        (WebCore::BitmapImage::BitmapImage):

2011-12-08  Anders Carlsson  <andersca@apple.com>

        Fix a paste-o in ScrollAnimatorMac::updateScrollerStyle
        https://bugs.webkit.org/show_bug.cgi?id=74145

        Reviewed by Sam Weinig.

        Call setHorizontalScrollerImp to set the horizontal scrollbar painter.

        * platform/mac/ScrollAnimatorMac.mm:
        (WebCore::ScrollAnimatorMac::updateScrollerStyle):

2011-12-08  Anders Carlsson  <andersca@apple.com>

        Create one WebScrollbarPainterDelegate for each scrollbar
        https://bugs.webkit.org/show_bug.cgi?id=74142

        Reviewed by Sam Weinig.

        Create and destroy WebScrollbarPainterDelegate objects as scrollbars come and go.
        This is a step towards simplifying the WebScrollbarPainterDelegate object.

        * platform/mac/ScrollAnimatorMac.h:
        * platform/mac/ScrollAnimatorMac.mm:
        (WebCore::ScrollAnimatorMac::ScrollAnimatorMac):
        (WebCore::ScrollAnimatorMac::~ScrollAnimatorMac):
        (WebCore::ScrollAnimatorMac::didAddVerticalScrollbar):
        (WebCore::ScrollAnimatorMac::willRemoveVerticalScrollbar):
        (WebCore::ScrollAnimatorMac::didAddHorizontalScrollbar):
        (WebCore::ScrollAnimatorMac::willRemoveHorizontalScrollbar):
        (WebCore::ScrollAnimatorMac::cancelAnimations):

2011-12-08  David Reveman  <reveman@chromium.org>

        [Chromium] Add per-tile painting flag to DumpRenderTree and rename AcceleratedDrawing to AcceleratedPainting in chromium specific code.
        https://bugs.webkit.org/show_bug.cgi?id=74017

        Reviewed by James Robinson.

        Add per-tile drawing to page settings.

        No new tests.

        * page/Settings.h:
        (WebCore::Settings::setPerTileDrawingEnabled):
        (WebCore::Settings::perTileDrawingEnabled):
        * testing/Internals.cpp:
        (WebCore::Internals::setPerTileDrawingEnabled):
        * testing/Internals.h:

2011-12-08  Anders Carlsson  <andersca@apple.com>

        Add a scrollbarPainterForScrollbar helper function
        https://bugs.webkit.org/show_bug.cgi?id=74139

        Reviewed by Sam Weinig.

        * platform/mac/ScrollAnimatorMac.mm:
        (macScrollbarTheme):
        (scrollbarPainterForScrollbar):
        (WebCore::ScrollAnimatorMac::mouseEnteredScrollbar):
        (WebCore::ScrollAnimatorMac::mouseExitedScrollbar):
        (WebCore::ScrollAnimatorMac::didAddVerticalScrollbar):
        (WebCore::ScrollAnimatorMac::willRemoveVerticalScrollbar):
        (WebCore::ScrollAnimatorMac::didAddHorizontalScrollbar):
        (WebCore::ScrollAnimatorMac::willRemoveHorizontalScrollbar):

2011-12-08  James Robinson  <jamesr@chromium.org>

        [chromium] Move NonCompositedContentHost to WebKit
        https://bugs.webkit.org/show_bug.cgi?id=74047

        Reviewed by Kenneth Russell.

        Updates WebCore.gypi to remove files no longer within WebCore and removes unused forward declaration and include
        from LayerRendererChromium.

        * WebCore.gypi:
        * platform/graphics/chromium/LayerRendererChromium.cpp:
        * platform/graphics/chromium/LayerRendererChromium.h:

2011-12-08  Sami Kyostila  <skyostil@google.com>

        [chromium] Layer contents scale change should trigger invalidation

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

        When the contents scale of a layer is changed, the entire contents of
        the layer should be marked dirty.

        Reviewed by James Robinson.

        * platform/graphics/chromium/LayerChromium.cpp:
        (WebCore::LayerChromium::setContentsScale):

2011-12-08  Stephen White  <senorblanco@chromium.org>

        [chromium] Add CSS_FILTERS custom binding file to WebCore.gypi.
        https://bugs.webkit.org/show_bug.cgi?id=74091

        Reviewed by Adam Barth.

        If it builds, you're happy.

        * WebCore.gypi:

2011-12-08  Ryosuke Niwa  <rniwa@webkit.org>

        Line breaks are lost when pasted into textarea text starting with a blank line set while textarea is hidden
        https://bugs.webkit.org/show_bug.cgi?id=74126

        Reviewed by Tony Chang.

        The bug was caused by the code that generated text out of pre-rendered text was generating div's inside the fragment
        pasted into textarea even though serialization algorithm in textarea doesn't handle block elements.

        Fixed the bug by special-casing this in createFragmentFromText. In the long run, we should really get rid of this
        whole pre-rendering trick.

        * editing/markup.cpp:
        (WebCore::createFragmentFromText):

2011-12-08  Florin Malita  <fmalita@google.com>

        Moving SVG elements on the page doesn't always erase element at the old position
        https://bugs.webkit.org/show_bug.cgi?id=74002

        Reviewed by Darin Adler.

        Test: svg/repaint/container-repaint.svg

        * rendering/svg/RenderSVGContainer.cpp:
        (WebCore::RenderSVGContainer::layout):
        Save the old repaint bounds before updating the viewport.

2011-12-08  Tim Horton  <timothy_horton@apple.com>

        Enable animations of CSS images using -webkit-cross-fade
        https://bugs.webkit.org/show_bug.cgi?id=74049
        <rdar://problem/10209303>

        Reviewed by Simon Fraser.

        Add support for animating CSS images in the following properties:
            - background(-image)
            - border-image(-source)
            - list-style(-image)
            - -webkit-mask-box-image(-source)
            - -webkit-mask-image(-source)
        
        This patch only adds support for transitioning between NinePieceImages
        where all of the properties except the image itself are equal, and the
        size of the images are equal. Other cases will not animate.
        
        Add animation blend functions for StyleImage and NinePieceImage.
        
        Apply the proper compositing operation to -webkit-cross-fade, and
        fix handling of the destination and source areas to support scaling.

        Tests: animations/cross-fade-background-image.html
               animations/cross-fade-border-image-source.html
               animations/cross-fade-list-style-image.html
               animations/cross-fade-webkit-mask-box-image.html
               animations/cross-fade-webkit-mask-image.html

        * css/CSSCrossfadeValue.cpp:
        (WebCore::cachedImageForCSSValue):
        (WebCore::CSSCrossfadeValue::fixedSize):
        (WebCore::CSSCrossfadeValue::image):
        * css/CSSImageValue.cpp:
        (WebCore::CSSImageValue::CSSImageValue):
        * css/CSSImageValue.h:
        (WebCore::CSSImageValue::create):
        * page/animation/AnimationBase.cpp:
        (WebCore::crossfadeBlend):
        (WebCore::blendFunc):
        (WebCore::RefCountedPropertyWrapper::RefCountedPropertyWrapper):
        (WebCore::RefCountedPropertyWrapper::blend):
        (WebCore::FillLayerRefCountedPropertyWrapper::FillLayerRefCountedPropertyWrapper):
        (WebCore::FillLayerRefCountedPropertyWrapper::blend):
        (WebCore::FillLayersPropertyWrapper::FillLayersPropertyWrapper):
        (WebCore::AnimationBase::ensurePropertyMap):
        (WebCore::addShorthandProperties):
        * platform/graphics/CrossfadeGeneratedImage.cpp:
        (WebCore::CrossfadeGeneratedImage::drawCrossfade):
        (WebCore::CrossfadeGeneratedImage::draw):
        (WebCore::CrossfadeGeneratedImage::drawPattern):
        * platform/graphics/CrossfadeGeneratedImage.h:
        * rendering/style/RenderStyle.h:
        (WebCore::InheritedFlags::setMaskImage):

2011-12-08  Stephen White  <senorblanco@chromium.org>

        Use Skia's implementation of Gaussian blur when accelerated filters
        are enabled.
        https://bugs.webkit.org/show_bug.cgi?id=73949

        Reviewed by Zoltan Herczeg.

        In the future, this will be covered by the SVG tests run in GPU mode.

        * WebCore.gypi:
        Add FEGaussianBlurSkia.cpp to the build.
        * platform/graphics/filters/FEGaussianBlur.cpp:
        (WebCore::FEGaussianBlur::platformApplySoftware):
        Call out to platformApplySkia() when USE_SKIA is enabled.
        * platform/graphics/filters/FEGaussianBlur.h:
        platformApplySkia() declaration.
        * platform/graphics/filters/skia: Added.
        * platform/graphics/filters/skia/FEGaussianBlurSkia.cpp: Added.
        (WebCore::FEGaussianBlur::platformApplySkia):
        On the Skia port, use SkBlurImageFilter for drawing
        Gaussian blurs in accelerated mode.
        * platform/graphics/skia/ImageBufferSkia.cpp:
        (WebCore::ImageBuffer::copyImage):
        Implement ImageBuffer::copyImage() with DontCopyBackingStore semantics.

2011-12-08  Erik Arvidsson  <arv@chromium.org>

        CodeGeneratorV8: Fix issue with overloaded static conditional methods
        https://bugs.webkit.org/show_bug.cgi?id=74114

        Reviewed by Adam Barth.

        The code generator was missing checks for Conditional for overloaded methods.

        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateOverloadedFunctionCallback): Generate needed #ifdefs.
        (GenerateFunctionCallback): Ditto.
        * bindings/scripts/test/V8/V8TestObj.cpp: Wrap conditional methods with #ifdefs.
        (WebCore::ConfigureV8TestObjTemplate):

2011-12-08  Dominic Mazzoni  <dmazzoni@google.com>

        AccessibilityController should support listening to notifications on all elements.
        https://bugs.webkit.org/show_bug.cgi?id=72866

        Changes accessibilitySetShouldRepostNotifications from an instance method
        into a class method so that it can be used for global notification listeners,
        not just for listeners on a particular object.

        Reviewed by Chris Fleizach.

        Test: accessibility/notification-listeners.html

        * accessibility/mac/WebAccessibilityObjectWrapper.h:
        * accessibility/mac/WebAccessibilityObjectWrapper.mm:
        (+[WebAccessibilityObjectWrapper accessibilitySetShouldRepostNotifications:]):
        (-[WebAccessibilityObjectWrapper accessibilityPostedNotification:]):

2011-12-08  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Rename createScriptCallStack() without parameters to createScriptCallStackForInspector().
        https://bugs.webkit.org/show_bug.cgi?id=74120

        Reviewed by Pavel Feldman.

        * bindings/js/ScriptCallStackFactory.cpp:
        (WebCore::createScriptCallStackForInspector):
        * bindings/js/ScriptCallStackFactory.h:
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateParametersCheck):
        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateFunctionCallback):
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::jsTestObjPrototypeFunctionCustomArgsAndException):
        * bindings/scripts/test/V8/V8TestObj.cpp:
        (WebCore::TestObjInternal::customArgsAndExceptionCallback):
        * bindings/v8/ScriptCallStackFactory.cpp:
        (WebCore::createScriptCallStackForInspector):
        * bindings/v8/ScriptCallStackFactory.h:

2011-12-08  Adrienne Walker  <enne@google.com>

        [chromium] Remove dead code in compositor
        https://bugs.webkit.org/show_bug.cgi?id=74103

        Reviewed by James Robinson.

        Tested via the compiler.

        * platform/graphics/chromium/LayerChromium.h:
        * platform/graphics/chromium/LayerRendererChromium.cpp:
        * platform/graphics/chromium/LayerRendererChromium.h:

2011-12-08  Eric Penner  <epenner@google.com>

        [chromium] Need to adjust memory limit and viewport multipliers.
        https://bugs.webkit.org/show_bug.cgi?id=74022

        Reviewed by James Robinson.

        * platform/graphics/chromium/TextureManager.cpp:
        (WebCore::TextureManager::highLimitBytes): Changing constants
        (WebCore::TextureManager::reclaimLimitBytes): ditto

2011-12-08  Benjamin Poulain  <bpoulain@apple.com>

        Add a platform EventLoop for iOS
        https://bugs.webkit.org/show_bug.cgi?id=74043

        Reviewed by David Kilzer.

        * WebCore.xcodeproj/project.pbxproj:
        * platform/ios/EventLoopIOS.mm: Added.
        (WebCore::EventLoop::cycle):

2011-12-08  Pavel Feldman  <pfeldman@google.com>

        Web Inspector: return node counts on the document / detached root basis
        https://bugs.webkit.org/show_bug.cgi?id=74104

        Reviewed by Yury Semikhatsky.

        * bindings/js/ScriptProfiler.h:
        * bindings/v8/ScriptProfiler.cpp:
        (WebCore::ScriptProfiler::domNodeCount):
        * bindings/v8/ScriptProfiler.h:
        * inspector/Inspector.json:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        * inspector/InspectorMemoryAgent.cpp:
        (WebCore::InspectorMemoryAgent::getDOMNodeCount):
        (WebCore::InspectorMemoryAgent::InspectorMemoryAgent):
        * inspector/InspectorMemoryAgent.h:
        (WebCore::InspectorMemoryAgent::create):

2011-12-08  Andreas Kling  <kling@webkit.org>

        RenderObject: Rename styleSlowCase() to styleInRegion().

        Rubber-stamped by David Hyatt.

        * WebCore.exp.in:
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::styleInRegion):
        * rendering/RenderObject.h:
        (WebCore::RenderObject::style):

2011-12-08  Andreas Kling  <kling@webkit.org>

        Optimize RenderObject::containingBlock().
        <http://webkit.org/b/74109>

        Reviewed by David Hyatt.

        When climbing the parent chain to locate the containing block-level element,
        use !isRenderBlock() to reject renderers rather than checking against an arbitrary
        list of non-block renderers and then rejecting anything that isn't a block anyway.

        RenderObject::containingBlock() was very hot (2.0%) when scrolling on youtube.com.
        This change takes it down to 1.0% (60% of which is RenderObject::isRenderBlock().)

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::containingBlock):

2011-12-08  Nayan Kumar K  <nayankk@motorola.com>

        Define DEBUG_GL_COMMANDS only in debug builds.
        https://bugs.webkit.org/show_bug.cgi?id=74083

        Reviewed by Noam Rosenthal.

        No tests added as this change does not affect functionality.

        * platform/graphics/opengl/TextureMapperGL.cpp:

2011-12-08  Ryosuke Niwa  <rniwa@webkit.org>

        CompositeEditCommand should not be kept alive for undo and redo
        https://bugs.webkit.org/show_bug.cgi?id=64414

        Reviewed by Enrica Casucci.

        This patch introduces EditCommandComposition that replaces CompositeEditCommand for
        undo and redo purposes. Furthermore, we now keep a list of commands instead of a tree of commands
        to unapply and reapply edit commands that composes an undoable action.

        Each top-level CompositeEditCommand holds a ref-pointer to EditCommandComposition,
        and applyCommandToComposite adds new SimpleEditCommands to the list.

        * editing/CompositeEditCommand.cpp:
        (WebCore::EditCommandComposition::create):
        (WebCore::EditCommandComposition::doApply): Never used.
        (WebCore::EditCommandComposition::doUnapply):
        (WebCore::EditCommandComposition::doReapply):
        (WebCore::EditCommandComposition::append):
        (WebCore::CompositeEditCommand::~CompositeEditCommand): Add an assertion to ensure we didn't create
        a composition for CompositeEditCommands that have parents.
        (WebCore::CompositeEditCommand::doUnapply): Never used.
        (WebCore::CompositeEditCommand::doReapply): Never used.
        (WebCore::CompositeEditCommand::ensureComposition): Creates and attaches a EditCommandComposition.
        (WebCore::CompositeEditCommand::applyCommandToComposite): Append a SimpleEditCommand to the composition.

        * editing/CompositeEditCommand.h:
        (WebCore::EditCommandComposition::EditCommandComposition):
        (WebCore::CompositeEditCommand::composition):
        (WebCore::toEditCommandComposition):
        (WebCore::toCompositeEditCommand):

        * editing/DeleteButtonController.cpp: Wrap RemoveNodeCommand in RemoveTargetCommand since top level
        commands are now required to be a CompositeEditCommand.
        (WebCore::RemoveTargetCommand::create):
        (WebCore::RemoveTargetCommand::RemoveTargetCommand):
        (WebCore::RemoveTargetCommand::doApply):
        (WebCore::DeleteButtonController::deleteTarget):

        * editing/EditCommand.cpp:
        (WebCore::EditCommand::EditCommand): New constructor; used by EditCommandComposition.
        (WebCore::EditCommand::apply): Create a composition for a top-level command.
        (WebCore::EditCommand::unapply): Since we clear m_parent of SimpleEditCommand as soon as they are
        added to EditCommandComposition, we can't use isTopLevelCommand() to differentiate EditCommandComposition
        from SimpleEditCommand. Use isEditCommandComposition() instead.
        (WebCore::EditCommand::reapply): Ditto.
        (WebCore::compositionIfPossible):
        (WebCore::EditCommand::setStartingSelection): Update the starting selection of EditCommandComposition. 
        (WebCore::EditCommand::setEndingSelection): Ditto.
        (WebCore::EditCommand::setParent): Accepts a null pointer in order to avoid keeping a stale pointer in
        m_parent inside SimpleEditCommand when CompositeEditCommand goes away.

        * editing/EditCommand.h:
        (WebCore::EditCommand::isSimpleEditCommand):
        (WebCore::EditCommand::isCompositeEditCommand):
        (WebCore::EditCommand::isEditCommandComposition):
        (WebCore::EditCommand::parent):
        (WebCore::toSimpleEditCommand):

        * editing/Editor.cpp:
        (WebCore::Editor::appliedEditing): Register a EditCommandComposition, instead of a CompositeEditCommand
        to the undo stack.
        (WebCore::Editor::unappliedEditing): Unapplied or reapplied commands are now always EditCommandComposition.
        (WebCore::Editor::reappliedEditing):
        * editing/Editor.h:

2011-12-08  Stephen White  <senorblanco@chromium.org>

        Add missing V8 bindings to get CSS_FILTERS to compile in Chromium.
        https://bugs.webkit.org/show_bug.cgi?id=74091

        Reviewed by Kenneth Russell.

        Will be covered by tests in css3/filters (when enabled).

        * bindings/v8/custom/V8WebKitCSSFilterValueCustom.cpp: Added.
        (WebCore::V8WebKitCSSFilterValue::indexedPropertyGetter):

2011-12-08  Beth Dakin  <bdakin@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=73348
        REGRESSION: Assertion when loading a page with a scrollable RenderLayer 
        -and corresponding-
        <rdar://problem/10518918>

        Reviewed by Darin Adler.

        The main problem here is that certain delegate calls into AppKit for overlay 
        scrollbars can cause AppKit to call back into WebKit looking for more information. 
        The assertion happens when WebKit tells AppKit that the scroll position has 
        changed during a layout, and AppKit immediately asks WebKit to convert some 
        coordinates, and WebKit asserts that you shouldn't do that while a layout is still 
        happening. It's still possible for AppKit to call this delegate method while a 
        layout is happening, and we should guard against that. This patch, however, does 
        not do that.

        This change instead addresses the reason this assertion started happening much 
        more frequently recently, which is that it recently became true that 
        notifyPositionChanged() can be called when the position has not changed. To fix 
        the assertion AND the bug that that change was intended to fix, we can just make 
        sure that either the position OR the scroll origin has changed before calling 
        notifyPositionChanged(). 

        * platform/mac/ScrollAnimatorMac.mm:
        (WebCore::ScrollAnimatorMac::immediateScrollToPoint):

        Call resetScrollOriginChanged() after the scroll instead of before so that we know 
        whether or not to call notifyPositionChanged().
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::updateScrollbars):

2011-12-08  Kaustubh Atrawalkar  <kaustubh@motorola.com>

        Fixing support for static conditional overloaded functions.
        https://bugs.webkit.org/show_bug.cgi?id=74068

        Reviewed by Adam Barth.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateImplementation): Pushing "static" keyword after condition "#if".
        * bindings/scripts/test/CPP/WebDOMTestObj.cpp:
        (WebDOMTestObj::overloadedMethod1): Added newly generated bindings.
        * bindings/scripts/test/CPP/WebDOMTestObj.h: Ditto.
        * bindings/scripts/test/GObject/WebKitDOMTestObj.cpp: Ditto.
        (webkit_dom_test_obj_overloaded_method1):
        * bindings/scripts/test/GObject/WebKitDOMTestObj.h: Ditto.
        * bindings/scripts/test/JS/JSTestObj.cpp: Ditto.
        (WebCore::jsTestObjConstructorFunctionOverloadedMethod11):
        (WebCore::jsTestObjConstructorFunctionOverloadedMethod12):
        (WebCore::jsTestObjConstructorFunctionOverloadedMethod1):
        * bindings/scripts/test/JS/JSTestObj.h: Ditto.
        * bindings/scripts/test/ObjC/DOMTestObj.h: Ditto.
        * bindings/scripts/test/ObjC/DOMTestObj.mm: Ditto.
        (-[DOMTestObj overloadedMethod1:]):
        * bindings/scripts/test/TestObj.idl: Ditto.
        * bindings/scripts/test/V8/V8TestObj.cpp: Ditto.
        (WebCore::TestObjInternal::overloadedMethod11Callback):
        (WebCore::TestObjInternal::overloadedMethod12Callback):
        (WebCore::TestObjInternal::overloadedMethod1Callback):
        (WebCore::ConfigureV8TestObjTemplate):

2011-12-08  Andreas Kling  <kling@webkit.org>

        Remove EventListenerMap destructor.
        <http://webkit.org/b/74096>

        Reviewed by Darin Adler.

        Let the compiler generate ~EventListenerMap(). We only needed it when the hash map
        was managing raw pointers.

        We're losing the no-iterators assertion from clear() by doing this, but that was
        superfluous to begin with - we were just using it to avoid duplicating code.

        * dom/EventListenerMap.cpp:
        * dom/EventListenerMap.h:

2011-12-08  Takashi Toyoshima  <toyoshim@chromium.org>

        Provide more specific error description for SocketStreamError.
        https://bugs.webkit.org/show_bug.cgi?id=74066

        Reviewed by Martin Robinson.

        No new tests because this change just improve error messages for unexpected failures.

        * platform/network/soup/SocketStreamError.h: Add an argument for passing error description.
        (WebCore::SocketStreamError::SocketStreamError):
        * platform/network/soup/SocketStreamHandleSoup.cpp: Add error description for SocketStreamError.
        (WebCore::SocketStreamHandle::connected):
        (WebCore::SocketStreamHandle::readBytes):
        (WebCore::SocketStreamHandle::platformSend):
        (WebCore::SocketStreamHandle::platformClose):

2011-12-08  Mihnea Ovidenie  <mihnea@adobe.com>

        [CSSRegions][CSSOM] Implement NamedFlow interface
        https://bugs.webkit.org/show_bug.cgi?id=66642

        Reviewed by David Hyatt.

        Add WebKitNamedFlow to support the NamedFlow interface. No methods are
        yet implemented on this interface. The NamedFlow object is a live object.
        The first time user asks for it, it gets a valid JS object whose properties
        will reflect the changes to the flow thread.

        Tests: fast/regions/webkit-named-flow-existing-flow.html
               fast/regions/webkit-named-flow-flow-added.html
               fast/regions/webkit-named-flow-modified-flow.html
               fast/regions/webkit-named-flow-non-existing-flow.html
               fast/regions/webkit-named-flow-removed-flow.html
               fast/regions/webkit-named-flow-same-object.html

        * CMakeLists.txt:
        * DerivedSources.cpp:
        * DerivedSources.make:
        * DerivedSources.pri:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/gobject/GNUmakefile.am:
        * dom/DOMAllInOne.cpp:
        * dom/Document.cpp:
        (WebCore::Document::webkitGetFlowByName):
        * dom/Document.h:
        * dom/Document.idl:
        * dom/NodeRenderingContext.cpp:
        (WebCore::NodeRenderingContext::moveToFlowThreadIfNeeded):
        * dom/WebKitNamedFlow.cpp: Added.
        (WebCore::WebKitNamedFlow::WebKitNamedFlow):
        (WebCore::WebKitNamedFlow::~WebKitNamedFlow):
        * dom/WebKitNamedFlow.h: Added.
        (WebCore::WebKitNamedFlow::create):
        * dom/WebKitNamedFlow.idl: Added.
        * rendering/RenderFlowThread.cpp:
        (WebCore::RenderFlowThread::ensureNamedFlow):
        * rendering/RenderFlowThread.h:
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::createObject):
        * rendering/RenderView.cpp:
        (WebCore::RenderView::ensureRenderFlowThreadWithName):
        * rendering/RenderView.h:

2011-12-08  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r102321.
        http://trac.webkit.org/changeset/102321
        https://bugs.webkit.org/show_bug.cgi?id=74072

        "Breaks all Chromium clobbered builds" (Requested by apavlov_
        on #webkit).

        * WebCore.gyp/WebCore.gyp:
        * WebCore.gyp/scripts/action_derivedsourcesallinone.py:
        (main):
        * WebCore.gypi:
        * bindings/scripts/generate-bindings.pl:
        * page/DOMWindow.idl:
        * webaudio/DOMWindowWebAudio.idl: Removed.

2011-12-08  Shinya Kawanaka  <shinyak@google.com>

        Refactoring: Editor::requestCheckingFor should take SpellCheckRequest object.
        https://bugs.webkit.org/show_bug.cgi?id=74033

        Reviewed by Hajime Morita.

        SpellChecker::requestCheckingFor takes SpellCheckRequest object in order to make it easy to
        pass necessary information to requestCheckingFor.

        No new tests. Covered by existing tests.

        * editing/Editor.cpp:
        (WebCore::Editor::replaceSelectionWithFragment):
          Uses the new interface.
        (WebCore::Editor::markAllMisspellingsAndBadGrammarInRanges): ditto.
        * editing/SpellChecker.cpp:
        (WebCore::SpellCheckRequest::SpellCheckRequest):
        (WebCore::SpellCheckRequest::~SpellCheckRequest):
        (WebCore::SpellCheckRequest::create):
          Creates a new SpellCheckRequest object.
        (WebCore::SpellChecker::requestCheckingFor):
          Uses the new interface.
        (WebCore::SpellChecker::didCheck):
        * editing/SpellChecker.h:
        (WebCore::SpellCheckRequest::setSequence):
        (WebCore::SpellCheckRequest::sequence):
        (WebCore::SpellCheckRequest::checkingRange):
        (WebCore::SpellCheckRequest::paragraphRange):
        (WebCore::SpellCheckRequest::text):
        (WebCore::SpellCheckRequest::mask):
        (WebCore::SpellCheckRequest::rootEditableElement):

2011-12-08  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r102323.
        http://trac.webkit.org/changeset/102323
        https://bugs.webkit.org/show_bug.cgi?id=74069

        Caused Chromium and GTK build failure (Requested by bashi on
        #webkit).

        * testing/Internals.cpp:
        (WebCore::Internals::getPageScaleFactor):
        * testing/Internals.h:
        * testing/Internals.idl:

2011-12-08  Fady Samuel  <fsamuel@chromium.org>

        Move scalePageBy from eventSender to window.internals
        https://bugs.webkit.org/show_bug.cgi?id=64512

        Reviewed by Simon Fraser.

        Added setPageScaleFactor to window.internals.
        Renamed window.internals.getPageScaleFactor to window.internals.pageScaleFactor
        to match the webkit style.

        * testing/Internals.cpp:
        (WebCore::Internals::pageScaleFactor):
        (WebCore::Internals::setPageScaleFactor):
        * testing/Internals.h:
        * testing/Internals.idl:

2011-12-08  Kentaro Hara  <haraken@chromium.org>

        Use the [Supplemental] IDL for webaudio attributes in Chromium
        https://bugs.webkit.org/show_bug.cgi?id=73394

        Reviewed by Adam Barth.

        - Overview: Using the [Supplemental] IDL, this patch moves the attribute
        declarations of webaudio from DOMWindow.idl into a new IDL file
        webaudio/DOMWindowWebAudio.idl, which helps make webaudio a self-contained
        feature (aka a module).

        - This patch changes the build flow of WebCore.gyp as follows:

            Previous build flow:
                foreach $idl (all IDL files) {
                    generate-bindings.pl depends on $idl;
                    generate-bindings.pl reads $idl;
                    generate-bindings.pl generates .h and .cpp files for $idl;
                }

            New build flow (See the discussions in bug 72138 for more details):
                resolve-supplemental.pl depends on all IDL files;
                resolve-supplemental.pl reads all IDL files;
                resolve-supplemental.pl resolves the dependency of [Supplemental=XXXX];
                resolve-supplemental.pl outputs supplemental_dependency.tmp;
                foreach $idl (all IDL files) {
                    generate-bindings.pl depends on $idl and supplemental_dependency.tmp;
                    generate-bindings.pl reads $idl;
                    generate-bindings.pl reads supplemental_dependency.tmp;
                    generate-bindings.pl generates .h and .cpp files for $idl, including all attributes in IDL files whilementing $idl;
                }

        - This patch introduces a temporary IDL, [Supplemented]. The [Supplemented] IDL
        will be removed after build scripts for all platforms support the [Supplemental] IDL.
        The motivation for the [Supplemented] IDL is as follows:

        In order to support the [Supplemental] IDL, we need to
        (1) run resolve-supplemental.pl and generate supplemental_dependency.tmp
        (2) and run generate-bindings.pl with the supplemental_dependency.tmp.

        This build flow requires a change on the following build scripts,
        but changing all the build scripts all at once without any regression is too difficult:

            - DerivedSources.make
            - DerivedSources.pri
            - GNUmakefile.am
            - PlatformBlackBerry.cmake
            - UseJSC.cmake
            - UseV8.cmake
            - WebCore.vcproj/MigrateScripts
            - WebCore.vcproj/WebCore.vcproj
            - bindings/gobject/GNUmakefile.am
            - WebCore.gyp/WebCore.gyp

        Thus, we are planning to change the build scripts one by one, which implies that
        we need to allow the temporary state in which some build scripts support [Supplemental] IDL
        but others do not. To accomplish this, we introduce a temporary IDL, [Supplemented].
        The [Supplemented] IDL on an attribute means that the attribute is marked with [Supplemental]
        in another IDL file somewhere, like this:

            DOMWindowWebAudio.idl:
                interface [
                    Supplemental=DOMWindow
                ] DOMWindowWebAudio {
                    attribute attr1;
                    attribute attr2;
                };

            DOMWindow.idl:
                interface [
                ] DOMWindow {
                    attribute [Supplemented] attr1; // This line will be removed after all build scripts support the [Su IDL
                    attribute [Supplemented] attr2; // This line will be removed after all build scripts support the [Su IDL.
                    attribute attr3;
                    attribute attr4;
                };

        Assuming these IDL files, this patch implements the following logic in generate-bindings.pl:

            - If a given build script supports the [Supplemental] IDL,
            generate-bindings.pl ignores all attributes with the [Supplemented] IDL.
            - Otherwise, generate-bindings.pl treats all attributes with the [Supplemented] IDL
            as normal attributes and instead ignores all attributes with the [Supplemental] IDL
            (i.e. generate-bindings.pl generates nothing from the IDL file with the [Supplemental] IDL).

        Tests: webaudio/*

        * WebCore.gyp/WebCore.gyp: Describes the build flow that I described above.
        * WebCore.gyp/scripts/action_derivedsourcesallinone.py:
        (main): Reads the IDL file names from the input file (i.e. supplemental_dependency.tmp), which are described at the first column of each line in the input file. If the file name is a "/cygdrive/c/..."-style path, it is converted to a "C:\cygwin\..."-style path by the cygpath command.
        * WebCore.gypi: Added DOMWindowWebAudio.idl.
        * bindings/scripts/generate-bindings.pl: As a temporary solution, if the platform does not support the [Supplemental] IDL, the perl script ignores the [Supplemental] IDL and instead uses the [Supplemented] IDL. Otherwise, the perl script ignores the [Supplemented] IDL and instead uses the [Supplemental] IDL.
        * page/DOMWindow.idl: Added the [Supplemented] IDL to webaudio-related attributes. As I described above, the [Supplemented] IDL will be removed after all platforms support the [Supplemental] IDL.
        * webaudio/DOMWindowWebAudio.idl: Added. Describes the [Supplemental=DOMWindow] IDL. The attributes in this IDL file should be treated as if they are written in DOMWindow.idl.

2011-12-07  Yosifumi Inoue  <yosin@chromium.org>

        CSS color gets adjusted for disabled input elements
        https://bugs.webkit.org/show_bug.cgi?id=54643

        Reviewed by Kent Tamura.

        No new tests. covered by existing tests. Need rebasing some existing tests for Chromimum.

        Remove automatic color adjustment for disabled text control for Chromimum.

        * css/themeChromium.css: Add CSS entries for default style for disabled input and textarea elements.
        * WebCore/rendering/RenderTextControl.cpp:
        (disabledTextColor): Removed for PLATFORM(CHROMIUM)
        (RenderTextControl::adjustInnerTextStyle): Don't call disabledTextColor for Chromium.

2011-12-07  Dmitry Lomov  <dslomov@google.com>

        https://bugs.webkit.org/show_bug.cgi?id=74038
        [V8][Chromium] Support legacy argument order in window.postMessage/window.webkitPostMessage.

        Reviewed by David Levin.

        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        (WebCore::isLegacyTargetOriginDesignation):
        (WebCore::handlePostMessageCallback):

2011-12-07  Mary Wu  <mary.wu@torchmobile.com.cn>

        Upstream 4 files into WebCore/platform/blackberry
        https://bugs.webkit.org/show_bug.cgi?id=73541

        Reviewed by Antonio Gomes.

        Initial upstream of BlackBerry porting of PlatformScreen/
        SSLKeyGenerator/Sound/Widget, no new tests.

        * PlatformBlackBerry.cmake: Modified to remove empty file "WheelEventBlackBerry.cpp"
        * platform/blackberry/PlatformScreenBlackBerry.cpp: Added.
        (WebCore::screenIsMonochrome):
        (WebCore::screenDepthPerComponent):
        (WebCore::screenDepth):
        (WebCore::screenAvailableRect):
        (WebCore::screenRect):
        * platform/blackberry/SSLKeyGeneratorBlackBerry.cpp: Added.
        (WebCore::getSupportedKeySizes):
        (WebCore::signedPublicKeyAndChallengeString):
        * platform/blackberry/SoundBlackBerry.cpp: Added.
        (WebCore::systemBeep):
        * platform/blackberry/WidgetBlackBerry.cpp: Added.
        (WebCore::Widget::Widget):
        (WebCore::Widget::~Widget):
        (WebCore::Widget::hide):
        (WebCore::Widget::paint):
        (WebCore::Widget::setCursor):
        (WebCore::Widget::setFocus):
        (WebCore::Widget::setFrameRect):
        (WebCore::Widget::setIsSelected):
        (WebCore::Widget::show):
        (WebCore::Widget::frameRect):

2011-12-07  Kenichi Ishibashi  <bashi@chromium.org>

        Refactor CSSParser::parseFontFaceSrc()
        https://bugs.webkit.org/show_bug.cgi?id=73989

        Reviewed by Darin Adler.

        Test: fast/css/font-face-src-parsing.html

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseFontFaceSrcURI): Added.
        (WebCore::CSSParser::parseFontFaceSrcLocal): Added.
        (WebCore::CSSParser::parseFontFaceSrc): Rewrote.
        * css/CSSParser.h:

2011-12-07  Xingnan Wang  <xingnan.wang@intel.com>

        Implement the SSE optimization in SincResampler::process()
        https://bugs.webkit.org/show_bug.cgi?id=73789

        Reviewed by Benjamin Poulain.

        Here is about 70% performance improvement on the hot spot of sample convolving.

        * platform/audio/SincResampler.cpp:

2011-12-07  Luke Macpherson   <macpherson@chromium.org>

        Implement border image source properties in CSSStyleApplyProperty.
        https://bugs.webkit.org/show_bug.cgi?id=73981

        Reviewed by Andreas Kling.

        No new tests / refactoring only.

        * css/CSSStyleApplyProperty.cpp:
        (WebCore::ApplyPropertyBorderImageSource::applyValue):
        (WebCore::ApplyPropertyBorderImageSource::createHandler):
        (WebCore::CSSStyleApplyProperty::CSSStyleApplyProperty):
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):

2011-12-07  Noel Gordon  <noel.gordon@gmail.com>

        WebPImageDecoder should not do a full image decode if progressive decoding is active
        https://bugs.webkit.org/show_bug.cgi?id=74041

        Reviewed by Adam Barth.

        If the decoder input data state reaches allDataReceived during a progressive image
        decode, the decoder performs a full image decode.

        On allDataReceived, check if we already have a decoder, and if so, continue to run
        the progressive decoder.

        No new tests. No change in behavior.

        * platform/image-decoders/webp/WEBPImageDecoder.cpp:
        (WebCore::WEBPImageDecoder::decode):

2011-12-07  Alexandre Elias  <aelias@google.com>

        [chromium] Add page-scale animation support to Impl thread
        https://bugs.webkit.org/show_bug.cgi?id=72996

        Reviewed by James Robinson.

        This adds a new math helper class to compute the progress of the
        animation, and code in the CCLayerTreeHostImpl to apply the animation
        frame by frame.

        No new tests. (https://bugs.webkit.org/show_bug.cgi?id=71529 filed.)

        * WebCore.gypi:
        * platform/graphics/chromium/cc/CCInputHandler.h:
        * platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:
        (WebCore::CCLayerTreeHostImpl::animate):
        (WebCore::CCLayerTreeHostImpl::startPageScaleAnimation):
        (WebCore::CCLayerTreeHostImpl::processScrollDeltas):
        * platform/graphics/chromium/cc/CCLayerTreeHostImpl.h:
        * platform/graphics/chromium/cc/CCPageScaleAnimation.cpp: Added.
        (WebCore::CCPageScaleAnimation::CCPageScaleAnimation):
        (WebCore::CCPageScaleAnimation::initialize):
        (WebCore::CCPageScaleAnimation::zoomTo):
        (WebCore::CCPageScaleAnimation::zoomWithAnchor):
        (WebCore::CCPageScaleAnimation::zoomElsewhere):
        (WebCore::CCPageScaleAnimation::scrollOffsetAtTime):
        (WebCore::CCPageScaleAnimation::pageScaleAtTime):
        (WebCore::CCPageScaleAnimation::isAnimationCompleteAtTime):
        (WebCore::CCPageScaleAnimation::progressRatioForTime):
        (WebCore::CCPageScaleAnimation::scrollOffsetAtRatio):
        (WebCore::CCPageScaleAnimation::pageScaleAtRatio):
        * platform/graphics/chromium/cc/CCPageScaleAnimation.h: Added.
        (WebCore::CCPageScaleAnimation::startTime):
        (WebCore::CCPageScaleAnimation::duration):
        (WebCore::CCPageScaleAnimation::endTime):
        (WebCore::CCPageScaleAnimation::finalScrollOffset):
        (WebCore::CCPageScaleAnimation::finalPageScale):

2011-12-07  Shinya Kawanaka  <shinyak@google.com>

        Editor::markAndReplaceFor should take Range instead of TextCheckingParagraph.
        https://bugs.webkit.org/show_bug.cgi?id=74035

        Reviewed by Hajime Morita.

        Editor::markAndReplaceFor takes chekcing range and paragraph range instead of
        spelling paragraph and grammar paragraph.

        No new tests. Covered by existing tests.

        * editing/Editor.cpp:
        (WebCore::Editor::markAllMisspellingsAndBadGrammarInRanges):
        (WebCore::Editor::markAndReplaceFor):
        * editing/Editor.h:
        * editing/TextCheckingHelper.cpp:
        (WebCore::TextCheckingParagraph::TextCheckingParagraph):
        * editing/TextCheckingHelper.h:

2011-12-07  Ami Fischman  <fischman@chromium.org>

        Force LTR layout for media controls even in RTL documents.
        https://bugs.webkit.org/show_bug.cgi?id=74024

        Reviewed by Darin Adler.

        Test: media/controls-layout-direction.html

        * css/mediaControls.css:
        (::-webkit-media-controls):

2011-12-07  Mark Pilgrim  <pilgrim@chromium.org>

        [FileSystem API] requestFileSystem successCallback is required
        https://bugs.webkit.org/show_bug.cgi?id=69637

        Reviewed by Darin Adler.

        * page/DOMWindow.idl: remove [Optional] flag from successCallback parameter

2011-12-07  Leo Yang  <leo.yang@torchmobile.com.cn>

        Upstream the BlackBerry porting of network Resource
        https://bugs.webkit.org/show_bug.cgi?id=73388

        Reviewed by Rob Buis.

        Other main contributors:
        Joe Mason <jmason@rim.com>
        Yong Li  <yoli@rim.com>
        Gary Simmons  <gsimmons@rim.com>
        Genevieve Mak <gmak@rim.com>
        Chris Guan <chris.guan@torchmobile.com.cn>
        Mike Lattanzio <mlattanzio@rim.com>

        Initial upstream, can't be built yet, no new tests.

        * platform/network/blackberry/ResourceError.h: Added.
        * platform/network/blackberry/ResourceErrorBlackBerry.cpp: Added.
        * platform/network/blackberry/ResourceHandleBlackBerry.cpp: Added.
        * platform/network/blackberry/ResourceRequest.h: Added.
        * platform/network/blackberry/ResourceRequestBlackBerry.cpp: Added.
        * platform/network/blackberry/ResourceResponse.h: Added.
        * platform/network/blackberry/ResourceResponseBlackBerry.cpp: Added.

2011-12-07  Fady Samuel  <fsamuel@chromium.org>

        [Chromium] Plumb DPI info into PlatformScreen
        https://bugs.webkit.org/show_bug.cgi?id=70556

        Reviewed by Darin Fisher.

        Make DPI information accessible from WebKit through
        PlatformScreen. This is useful when making scaling 
        computations on various devices (e.g. Viewport meta tag).

        This patch adds DPI plumbing on Chromium Win/Mac/Linux
        platforms.

        * page/Screen.cpp:
        (WebCore::Screen::horizontalDPI):
        (WebCore::Screen::verticalDPI):
        * page/Screen.h:
        * platform/PlatformScreen.h:
        * platform/chromium/PlatformScreenChromium.cpp:
        (WebCore::screenHorizontalDPI):
        (WebCore::screenVerticalDPI):
        * platform/chromium/PlatformSupport.h:
        * platform/efl/PlatformScreenEfl.cpp:
        (WebCore::screenHorizontalDPI):
        (WebCore::screenVerticalDPI):
        * platform/gtk/PlatformScreenGtk.cpp:
        (WebCore::screenHorizontalDPI):
        (WebCore::screenVerticalDPI):
        * platform/mac/PlatformScreenMac.mm:
        (WebCore::screenHorizontalDPI):
        (WebCore::screenVerticalDPI):
        * platform/qt/PlatformScreenQt.cpp:
        (WebCore::screenHorizontalDPI):
        (WebCore::screenVerticalDPI):
        * platform/win/PlatformScreenWin.cpp:
        (WebCore::screenHorizontalDPI):
        (WebCore::screenVerticalDPI):

2011-12-07  Aaron Colwell  <acolwell@chromium.org>

        Revert mixed content handling for video fix and follow-up test expectations & Skipped changes.
        (r101883, r101918, r101927, r101981, r101986, r101997)
        https://bugs.webkit.org/show_bug.cgi?id=72178

        Reviewed by Adam Barth.

        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::willSendRequest):
        * loader/cache/CachedRawResource.cpp:
        * loader/cache/CachedRawResource.h:
        * loader/cache/CachedResource.cpp:
        (WebCore::defaultPriorityForResourceType):
        (WebCore::cachedResourceTypeToTargetType):
        * loader/cache/CachedResource.h:
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::createResource):
        (WebCore::CachedResourceLoader::checkInsecureContent):
        (WebCore::CachedResourceLoader::canRequest):
        (WebCore::CachedResourceLoader::requestResource):

2011-12-07  Ryuan Choi  <ryuan.choi@samsung.com>

        [EFL] Introduce AssertMatchingEnums.cpp.
        https://bugs.webkit.org/show_bug.cgi?id=65238

        Reviewed by Filip Pizlo.

        Remove switch statement which convert EWK_TOUCH_PointType enum values to
        WebCore::PlatformTouchPoint::State enum values.
        Newly added AssertMatchingEnums.cpp assure that they are equal.

        No new tests, no new functionality.

        * platform/efl/PlatformTouchEventEfl.cpp:
        (WebCore::PlatformTouchEvent::PlatformTouchEvent):

2011-12-07  Shawn Singh  <shawnsingh@chromium.org>

        [chromium] Clearing root surface should happen after damage tracking
        https://bugs.webkit.org/show_bug.cgi?id=73958

        Reviewed by James Robinson.

        No new semantics, covered by existing layout tests.

        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::clearSurfaceForDebug):
        (WebCore::LayerRendererChromium::drawLayersOntoRenderSurfaces):
        (WebCore::LayerRendererChromium::drawLayersInternal):
        * platform/graphics/chromium/LayerRendererChromium.h:

2011-12-07  Florin Malita  <fmalita@google.com>

        <li value="0"> behaves like <li> (the same for negative numbers)
        https://bugs.webkit.org/show_bug.cgi?id=73911

        Reviewed by Alexey Proskuryakov.

        Allow LI values <= 0 and consolidate the value processing logic.

        * html/HTMLLIElement.cpp:
        (WebCore::HTMLLIElement::parseMappedAttribute):
        Delegated value parsing to parseValue().

        (WebCore::HTMLLIElement::attach):
        Ditto. Explicit value null testing is no longer necessary,
        as parseValue's toInt() performs an equivalent check.

        (WebCore::HTMLLIElement::parseValue):
        Consolidated value parsing logic.

        * html/HTMLLIElement.h:

2011-12-07  Joshua Bell  <jsbell@chromium.org>

        IndexedDB: Replace bool args in IDBKeyRange private methods with enum
        https://bugs.webkit.org/show_bug.cgi?id=70743

        Reviewed by Tony Chang.

        No new tests - no functional changes.

        * storage/IDBKeyRange.cpp:
        (WebCore::IDBKeyRange::IDBKeyRange):
        (WebCore::IDBKeyRange::bound):
        * storage/IDBKeyRange.h:
        (WebCore::IDBKeyRange::create):
        (WebCore::IDBKeyRange::lowerOpen):
        (WebCore::IDBKeyRange::upperOpen):

2011-12-07  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r102267.
        http://trac.webkit.org/changeset/102267
        https://bugs.webkit.org/show_bug.cgi?id=74032

        Breaks build on Chromium Mac Debug (Requested by aklein on
        #webkit).

        * dom/ChildListMutationScope.cpp:
        (WebCore::MutationAccumulationRouter::MutationAccumulationRouter::childAdded):
        (WebCore::MutationAccumulationRouter::MutationAccumulationRouter::willRemoveChild):
        (WebCore::MutationAccumulationRouter::MutationAccumulationRouter::incrementScopingLevel):
        (WebCore::MutationAccumulationRouter::MutationAccumulationRouter::decrementScopingLevel):

2011-12-07  Kentaro Hara  <haraken@chromium.org>

        REGRESSION (r95249): Right side can be truncated when printing
        https://bugs.webkit.org/show_bug.cgi?id=73868

        Reviewed by Darin Adler.

        When we print a page with an overflowed width, the right side of the page
        can be truncated. This is due to a wrong rendering calculation.
        Since 'maximumShrinkFactor' is a ratio based on 'pageSize',
        'maximumShrinkFactor' should multiply (not 'originalPageSize') but 'pageSize'.
        This bug happens if all the following conditions are met:
            - pageLogicalWidth < docLogicalWidth
            - originalPageSize.width * maximumShrinkFactor < docLogicalWidth
            - docLogicalWidth < pageLogicalWidth * maximumShrinkFactor

        Test: printing/width-overflow.html

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

2011-12-07  Yong Li  <yoli@rim.com>

        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
 

        Reviewed by Darin Adler.

        Manual test added: ManualTests/database-callback-deferred.html. 

        * dom/Document.cpp:
        (WebCore::Document::Document):
        (WebCore::Document::didReceiveTask):
        (WebCore::Document::postTask):
        (WebCore::Document::pendingTasksTimerFired):
        (WebCore::Document::suspendScheduledTasks):
        (WebCore::Document::resumeScheduledTasks):
        * dom/Document.h:
        * page/PageGroupLoadDeferrer.cpp:
        (WebCore::PageGroupLoadDeferrer::PageGroupLoadDeferrer):
        (WebCore::PageGroupLoadDeferrer::~PageGroupLoadDeferrer):

2011-12-07  Andreas Kling  <kling@webkit.org>

        RenderObject::style(): Inline early-return condition.
        <http://webkit.org/b/74019>

        Reviewed by Anders Carlsson.

        style() was very hot (6.1%) when scrolling around on youtube.com,
        and 100% of the calls were taking the early return path.

        Inlined the !isRenderFlowThread() check and renamed the function to
        styleSlowCase().

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::styleSlowCase):
        * rendering/RenderObject.h:
        (WebCore::RenderObject::style):

2011-12-07  Adam Klein  <adamk@chromium.org>

        Use HashMap<Node*, OwnPtr<...>> in ChildListMutationScope
        https://bugs.webkit.org/show_bug.cgi?id=73964

        Reviewed by Ryosuke Niwa.

        No new tests, refactoring only.

        * dom/ChildListMutationScope.cpp:
        (WebCore::ChildListMutationAccumulator::MutationAccumulationRouter::childAdded):
        (WebCore::ChildListMutationAccumulator::MutationAccumulationRouter::willRemoveChild):
        (WebCore::ChildListMutationAccumulator::MutationAccumulationRouter::incrementScopingLevel):
        (WebCore::ChildListMutationAccumulator::MutationAccumulationRouter::decrementScopingLevel):

2011-12-07  Andreas Kling  <kling@webkit.org>

        RenderLayer::updateZOrderLists(): Inline early-return condition.
        <http://webkit.org/b/74013>

        Reviewed by Anders Carlsson.

        updateZOrderLists() was hot (1.2%) when scrolling around on youtube.com,
        and 85% of the calls were taking the early return path.

        Inlined the two checks for the early return and renamed the function
        to updateZOrderListsSlowCase(). Also reversed their order to avoid the
        virtual call (RenderObject::isRenderView()) if possible.

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateZOrderListsSlowCase):
        * rendering/RenderLayer.h:
        (WebCore::RenderLayer::updateZOrderLists):

2011-12-07  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r102244.
        http://trac.webkit.org/changeset/102244
        https://bugs.webkit.org/show_bug.cgi?id=74016

        caused debug test timeouts (Requested by simonjam on #webkit).

        * platform/graphics/skia/ImageBufferSkia.cpp:
        (WebCore::putImageData):
        (WebCore::ImageBuffer::putUnmultipliedImageData):
        (WebCore::ImageBuffer::putPremultipliedImageData):

2011-12-07  Adam Klein  <adamk@chromium.org>

        Layout Test inspector/debugger/dom-breakpoints.html fails on chromium linux debug with ENABLE(MUTATION_OBSERVERS)
        https://bugs.webkit.org/show_bug.cgi?id=73919

        Reviewed by Ojan Vafai.

        Use StyleAttributeMutationScope to manage DOM breakpoints for style property changes.

        Instead of calling InspectorInstrumentation::didInvalidateStyleAttr()
        directly in setNeedsStyleRecalc, set a bool in the current
        StyleAttributeMutationScope, and delay the call until the scope's
        counter runs down to zero. This keeps the inspector JS from re-entering
        CSSMutableStyleDeclaration until all StyleAttributeMutationScope work is done.

        Also fix a small bug in StyleAttributeMutationScope, where
        s_shouldDeliver wasn't getting reset properly to false.

        * css/CSSMutableStyleDeclaration.cpp:
        (WebCore::CSSMutableStyleDeclaration::setNeedsStyleRecalc):

2011-12-07  Ken Buchanan <kenrb@chromium.org>

        Crash from multicol spans with layers
        https://bugs.webkit.org/show_bug.cgi?id=68030

        Reviewed by David Hyatt.

        The layer tree diverges from the render tree when a span is being split
        between columns. This patch causes the layer tree to be updated when necessary.

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

2011-12-07  Alexey Proskuryakov  <ap@apple.com>

        Handling of !important in inline style sets is broken
        https://bugs.webkit.org/show_bug.cgi?id=73941

        Reviewed by Dave Hyatt.

        This behavior was introduced in bug 8223 to match IE and Firefox. But it doesn't appear that we're matching
        any browser today, and CSSOM spec agrees with them.

        * WebCore.exp.in: Don't export CSSStyleDeclaration::setProperty(), no one is using it.

        * bindings/js/JSCSSStyleDeclarationCustom.cpp: (WebCore::JSCSSStyleDeclaration::putDelegate): Use regular
        setProperty(), not the incorrect version that's being removed. Properties set via IDL attributes are never
        important.

        * bindings/v8/custom/V8CSSStyleDeclarationCustom.cpp: (WebCore::V8CSSStyleDeclaration::namedPropertySetter):
        Made the same fix for v8. Why did v8 bindings authors copy/paste the code?!

        * css/CSSStyleDeclaration.cpp:
        * css/CSSStyleDeclaration.h:
        Removed a version of setProperty() that attempted to parse the value and extract !important from it.

        * html/ImageDocument.cpp:
        (WebCore::ImageDocument::resizeImageToFit):
        (WebCore::ImageDocument::restoreImageSize):
        (WebCore::ImageDocument::windowSizeChanged):
        * page/DragController.cpp:
        (WebCore::DragController::concludeEditDrag):
        We never needed to use this version of setProperty() here, it was just unnecessarily slower.

2011-12-07  Xianzhu Wang  <wangxianzhu@chromium.org>

        In FontCacheAndroid.cpp should keep the pointer valid returned from CString::data()
        https://bugs.webkit.org/show_bug.cgi?id=73849

        The changed code has been covered by many existing layout tests.

        Reviewed by Adam Barth.

        * platform/graphics/chromium/FontCacheAndroid.cpp:
        (WebCore::FontCache::createFontPlatformData):

2011-12-07  Xiaomei Ji  <xji@chromium.org>

        Turn on move caret by word visually for Windows platform.
        https://bugs.webkit.org/show_bug.cgi?id=59652

        Reviewed by Ryosuke Niwa.

        We already support (arrow key) moving cursor by character in visual order.
        This patch implements (ctrl/alt-arrow) moving cursor by word in visual order (in Windows).
        It matches Firefox's default behavior.

        Without this patch, ctrl(alt for mac)-arrow key or
        selection.modify("move", "left"/"right", "word") moves cursor by word in logical order. 

        IE implements moving cursor by logical order for both arrow key and ctrl-arrow key.
        Firefox implements moving cursor by visual order for both operations.
        From Chromium bug report, native speakers would like moving cursor by visual order since it
        is more intuitive.

        The patch is only enabled for Windows (by EditingBehavior) because current implementation
        matches Windows' native behavior.
        For exmaple, if the logical text is "abc def hij", the cursor positions are
        "|abc |def |hij|" no matter pressing ctrl-left-arrow or ctrl-right-arrow.

        Mac and Linux's native behavior is slightly different. In which, when pressing
        ctrl-left-arrow, the cursor positions are "|abc |def |hij|". When pressing ctrl-right-arrow,
        the cursor positions are "|abc| def| hij|". We will implement it next.

        Test: editing/selection/move-left-right-by-word-mac.html

        * editing/EditingBehavior.h:
        (WebCore::EditingBehavior::shouldMoveLeftRightByWordInVisualOrder):
        * editing/FrameSelection.cpp: Remove experimental enum WebKitVisualWordGranularity.
        (WebCore::FrameSelection::modifyExtendingRight):
        (WebCore::FrameSelection::modifyExtendingForward):
        (WebCore::FrameSelection::modifyMovingRight):
        (WebCore::FrameSelection::modifyMovingForward):
        (WebCore::FrameSelection::modifyExtendingLeft):
        (WebCore::FrameSelection::modifyExtendingBackward):
        (WebCore::FrameSelection::modifyMovingLeft):
        (WebCore::FrameSelection::modifyMovingBackward):
        * editing/TextGranularity.h: Remove experimental enum WebKitVisualWordGranularity.
        * editing/VisibleSelection.cpp: Remove experimental enum WebKitVisualWordGranularity.
        (WebCore::VisibleSelection::setStartAndEndFromBaseAndExtentRespectingGranularity):
        * page/DOMSelection.cpp: Remove experimental experimental flag -webkit-visual-word.
        (WebCore::DOMSelection::modify):

2011-12-07  Jonathan Backer  <backer@chromium.org>

        [chromium] Plumb damage from WebExternalTextureLayer and WebPluginContainer to CCDamageTracker
        https://bugs.webkit.org/show_bug.cgi?id=73485

        Reviewed by Darin Fisher.

        * platform/graphics/chromium/PluginLayerChromium.cpp:
        (WebCore::PluginLayerChromium::updateCompositorResources):
        (WebCore::PluginLayerChromium::invalidateRect):
        * platform/graphics/chromium/PluginLayerChromium.h:

2011-12-07  Mary Wu  <mary.wu@torchmobile.com.cn>

        Upstream 5 files into WebCore/platform/blackberry
        https://bugs.webkit.org/show_bug.cgi?id=73632

        Reviewed by Rob Buis.

        Initial upstream, no new tests.

        * PlatformBlackBerry.cmake: Remove two empty files from build list.
        * platform/blackberry/PopupMenuBlackBerry.cpp: Added.
        (WebCore::PopupMenuBlackBerry::PopupMenuBlackBerry):
        (WebCore::PopupMenuBlackBerry::~PopupMenuBlackBerry):
        (WebCore::PopupMenuBlackBerry::show):
        (WebCore::PopupMenuBlackBerry::hide):
        (WebCore::PopupMenuBlackBerry::updateFromElement):
        (WebCore::PopupMenuBlackBerry::disconnectClient):
        * platform/blackberry/PopupMenuBlackBerry.h: Added.
        (WebCore::PopupMenuBlackBerry::client):
        * platform/blackberry/ScrollbarThemeBlackBerry.cpp: Added.
        (WebCore::ScrollbarTheme::nativeTheme):
        * platform/blackberry/SearchPopupMenuBlackBerry.cpp: Added.
        (WebCore::SearchPopupMenuBlackBerry::SearchPopupMenuBlackBerry):
        (WebCore::SearchPopupMenuBlackBerry::popupMenu):
        (WebCore::SearchPopupMenuBlackBerry::enabled):
        (WebCore::SearchPopupMenuBlackBerry::saveRecentSearches):
        (WebCore::SearchPopupMenuBlackBerry::loadRecentSearches):
        * platform/blackberry/SearchPopupMenuBlackBerry.h: Added.

2011-12-07  Dan Bernstein  <mitz@apple.com>

        Fixed the definition of BUTTON_CELL_DRAW_WITH_FRAME_DRAWS_FOCUS_RING from r102246.

        * platform/mac/ThemeMac.mm: Added parentheses.

2011-12-07  Dan Bernstein  <mitz@apple.com>

        <rdar://problem/10542095> Focus rings are not drawn around push buttons, radio buttons and checkboxes

        Reviewed by Darin Adler.

        Instead of relying on -setShowsFirstResponder: to make -drawWithFrame:inView: draw the focus
        ring, use -drawFocusRingMaskWithFrame:inView:.

        * platform/mac/ThemeMac.mm:
        (-[NSCell _web_drawFocusRingWithFrame:inView:]): Added. Sets up the focus ring style and a
        transparency layer, then uses -drawFocusRingMaskWithFrame:inView: to draw the focus ring.
        (WebCore::updateStates): Eliminated calls to get and set showsFirstResponder.
        (WebCore::paintCheckbox): Changed to use -_web_drawFocusRingWithFrame:inView:.
        (WebCore::paintRadio): Ditto.
        (WebCore::paintButton): Ditto.

2011-12-07  Brian Salomon  <bsalomon@google.com>

        [CHROMIUM/SKIA] Handle put[Un/Pre]multipliedImageData conversions in Skia rather than ImageBuffer
        https://bugs.webkit.org/show_bug.cgi?id=73953

        Reviewed by Stephen White.

        Tested by existing canvas2d layout tests.

        * platform/graphics/skia/ImageBufferSkia.cpp:
        (WebCore::putImageData):
        (WebCore::ImageBuffer::putUnmultipliedImageData):
        (WebCore::ImageBuffer::putPremultipliedImageData):

2011-12-07  Andreas Kling  <kling@webkit.org>

        Micro-optimize ScrollView::visibleContentRect().
        <http://webkit.org/b/74001>

        Reviewed by Anders Carlsson.

        Reorder the scrollbar exclusion code to minimize the number of virtual calls
        to ScrollableArea::verticalScrollbar(), ScrollableArea::horizontalScrollbar()
        and Scrollbar::isOverlayScrollbar().

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

2011-12-07  Andreas Kling  <kling@webkit.org>

        ApplyPropertyBorderImage: Remove unneeded template argument for mapNinePieceImage().
        <http://webkit.org/b/73998>

        Reviewed by Antti Koivisto.

        Have ApplyPropertyBorderImage call mapNinePieceImage() directly now that it's
        public (instead of passing it as a template argument.)

        * css/CSSStyleApplyProperty.cpp:
        (WebCore::ApplyPropertyBorderImage::applyValue):
        (WebCore::CSSStyleApplyProperty::CSSStyleApplyProperty):

2011-12-07  Jessie Berlin  <jberlin@apple.com>

        Mac build fix after r102235.

        * WebCore.exp.in:

2011-11-30  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] V8 debug build fixes.

        Reviewed by Tor Arne Vestbø.

        * Target.pri: Add missing files to the build.
        * loader/SubresourceLoader.cpp: Add missing CString.h header file inclusion,
        that is implicitly included with Chromium builds and only needed in ASSERTS
        in debug builds.
        * loader/cache/CachedResource.cpp: Ditto.
        * page/FrameTree.cpp: Ditto.
        * platform/graphics/MediaPlayer.cpp: Ditto.

2011-11-30  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] V8 build fixes.

        Reviewed by Tor Arne Vestbø.

        * Target.pri: Don't load(javascriptcore) if we're building with v8.

2011-12-07  Mary Wu  <mary.wu@torchmobile.com.cn>

        Change function name InitializeLoggingChannelsIfNecessary to follow coding style guideline
        https://bugs.webkit.org/show_bug.cgi?id=73986

        Reviewed by Kenneth Rohde Christiansen.

        Just function name change, no new tests.

        * platform/Logging.h:
        * platform/efl/LoggingEfl.cpp:
        (WebCore::initializeLoggingChannelsIfNecessary):
        * platform/gtk/LoggingGtk.cpp:
        (WebCore::initializeLoggingChannelsIfNecessary):
        * platform/mac/LoggingMac.mm:
        (WebCore::initializeLoggingChannelsIfNecessary):
        * platform/qt/LoggingQt.cpp:
        (WebCore::initializeLoggingChannelsIfNecessary):
        * platform/win/LoggingWin.cpp:
        (WebCore::initializeLoggingChannelsIfNecessary):
        * platform/wx/LoggingWx.cpp:
        (WebCore::initializeLoggingChannelsIfNecessary):

2011-12-07  Mihnea Ovidenie  <mihnea@adobe.com>

        [CSSRegions]Add support for background-color in region styling
        https://bugs.webkit.org/show_bug.cgi?id=71488

        Reviewed by David Hyatt.

        Tests: fast/regions/region-style-block-background-color.html
               fast/regions/region-style-block-background-color2.html
               fast/regions/region-style-image-background-color.html
               fast/regions/region-style-inline-background-color.html

        * WebCore.exp.in:
        * css/CSSStyleSelector.cpp:
        (WebCore::RuleData::regionStyleRule):
        (WebCore::CSSStyleSelector::CSSStyleSelector):
        (WebCore::CSSStyleSelector::addMatchedDeclaration):
        (WebCore::CSSStyleSelector::matchRules):
        (WebCore::CSSStyleSelector::matchAllRules):
        (WebCore::CSSStyleSelector::initForRegionStyling):
        (WebCore::CSSStyleSelector::styleForElement):
        (WebCore::CSSStyleSelector::pseudoStyleForElement):
        (WebCore::RuleData::RuleData):
        (WebCore::RuleSet::RuleSet):
        (WebCore::RuleSet::addToRuleSet):
        (WebCore::CSSStyleSelector::applyDeclarations):
        (WebCore::isValidRegionStyleProperty):
        (WebCore::CSSStyleSelector::applyProperty):
        * css/CSSStyleSelector.h:
        (WebCore::CSSStyleSelector::setRegionForStyling):
        (WebCore::CSSStyleSelector::regionForStyling):
        (WebCore::CSSStyleSelector::applyPropertyToRegionStyle):
        * rendering/RenderFlowThread.cpp:
        (WebCore::RenderFlowThread::clearRenderRegionRangeMap):
        (WebCore::RenderFlowThread::~RenderFlowThread):
        (WebCore::RenderFlowThread::layout):
        (WebCore::RenderFlowThread::clearRenderObjectCustomStyle):
        (WebCore::RenderFlowThread::setRegionRangeForBox):
        * rendering/RenderFlowThread.h:
        * rendering/RenderLayer.cpp:
        (WebCore::CurrentRenderRegionMaintainer::CurrentRenderRegionMaintainer):
        (WebCore::CurrentRenderRegionMaintainer::~CurrentRenderRegionMaintainer):
        (WebCore::RenderLayer::paint):
        (WebCore::RenderLayer::hitTest):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::style):
        * rendering/RenderObject.h:
        (WebCore::RenderObject::canHaveRegionStyle):
        * rendering/RenderObjectChildList.cpp:
        (WebCore::RenderObjectChildList::removeChildNode):
        * rendering/RenderRegion.cpp:
        (WebCore::RenderRegion::layout):
        (WebCore::RenderRegion::renderObjectRegionStyle):
        (WebCore::RenderRegion::computeStyleInRegion):
        (WebCore::RenderRegion::clearObjectStyleInRegion):
        * rendering/RenderRegion.h:
        * rendering/RenderView.cpp:
        (WebCore::RenderView::RenderView):
        * rendering/RenderView.h:
        (WebCore::RenderView::currentRenderRegion):
        (WebCore::RenderView::setCurrentRenderRegion):

2011-12-01  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Extract default call stack creation and check for front-end from console.
        https://bugs.webkit.org/show_bug.cgi?id=73566

        Reviewed by Yury Semikhatsky.

        * bindings/js/ScriptCallStackFactory.cpp:
        (WebCore::createScriptCallStack):
        * bindings/js/ScriptCallStackFactory.h:
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateParametersCheck):
        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateFunctionCallback):
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::jsTestObjPrototypeFunctionCustomArgsAndException):
        * bindings/scripts/test/V8/V8TestObj.cpp:
        (WebCore::TestObjInternal::customArgsAndExceptionCallback):
        * bindings/v8/ScriptCallStackFactory.cpp:
        (WebCore::createScriptCallStack):
        * bindings/v8/ScriptCallStackFactory.h:
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::hasFrontendForScriptContext):
        * inspector/InspectorInstrumentation.h:
        (WebCore::InspectorInstrumentation::hasFrontendForScriptContext):
        * inspector/WorkerInspectorController.h:
        (WebCore::WorkerInspectorController::hasFrontend):
        * page/Console.cpp:
        * page/Console.h:

2011-12-07  Shinya Kawanaka  <shinyak@google.com>

        Internals should have a method to reutrn the max sequence number of spellcheck reqeust.
        https://bugs.webkit.org/show_bug.cgi?id=73511

        Reviewed by Hajime Morita.

        Internal state of SpellChecker should be able to be exposed for testing SpellChecker.
        This patch will enable us to know asynchronous spellcheck has finished or not.

        Test: editing/spelling/spellcheck-sequencenum.html

        * editing/SpellChecker.cpp:
        (WebCore::SpellChecker::SpellChecker):
        (WebCore::SpellChecker::createRequest):
        (WebCore::SpellChecker::didCheck):
        * editing/SpellChecker.h:
        (WebCore::SpellChecker::lastRequestSequence):
          Interface to take SpellCheck sequence numbers.
        (WebCore::SpellChecker::lastProcessedSequence): ditto.
        * testing/Internals.cpp:
        (WebCore::spellchecker):
        (WebCore::Internals::lastSpellCheckRequestSequence):
        (WebCore::Internals::lastSpellCheckProcessedSequence):
        * testing/Internals.h:
        * testing/Internals.idl:

2011-12-07  Ryosuke Niwa  <rniwa@webkit.org>

        TypingCommand duplicates code to obtain the last typing command
        https://bugs.webkit.org/show_bug.cgi?id=73984

        Reviewed by Kent Tamura.

        Extracted lastTypingCommandIfStillOpenForTyping out of isOpenForMoreTypingCommand
        and a bunch of TypingCommand static member functions.

        Also made more member functions of TypingCommand private.

        * editing/Editor.cpp:
        (WebCore::Editor::setComposition):
        * editing/FrameSelection.cpp:
        (WebCore::FrameSelection::setSelection):
        * editing/TypingCommand.cpp:
        (WebCore::TypingCommand::deleteSelection):
        (WebCore::TypingCommand::deleteKeyPressed):
        (WebCore::TypingCommand::forwardDeleteKeyPressed):
        (WebCore::TypingCommand::insertText):
        (WebCore::TypingCommand::insertLineBreak):
        (WebCore::TypingCommand::insertParagraphSeparatorInQuotedContent):
        (WebCore::TypingCommand::insertParagraphSeparator):
        (WebCore::TypingCommand::lastTypingCommandIfStillOpenForTyping):
        (WebCore::TypingCommand::closeTyping):
        * editing/TypingCommand.h:
        (WebCore::TypingCommand::isOpenForMoreTyping):
        (WebCore::TypingCommand::closeTyping):

2011-12-06  Mary Wu  <mary.wu@torchmobile.com.cn>

        upstream BlackBerry porting of KURL/Logging
        https://bugs.webkit.org/show_bug.cgi?id=73524

        Reviewed by Antonio Gomes.

        * platform/blackberry/KURLBlackBerry.cpp: Added.
        (WebCore::KURL::fileSystemPath):
        * platform/blackberry/LoggingBlackBerry.cpp: Added.
        (WebCore::initializeWithUserDefault):
        (WebCore::InitializeLoggingChannelsIfNecessary):

2011-12-06  Leo Yang  <leo.yang@torchmobile.com.cn>

        [BlackBerry] Remove redundant files in PlatformBlackBerry.cmake
        https://bugs.webkit.org/show_bug.cgi?id=73976

        Reviewed by Antonio Gomes.

        The listing of the following files in PlatformBlackBerry.cmake are redundant. They should be removed.
        platform/network/blackberry/MultipartResponseDelegate.cpp
        platform/network/blackberry/NetworkManager.cpp
        platform/network/blackberry/NetworkStateNotifierBlackBerry.cpp
        platform/network/blackberry/ResourceErrorBlackBerry.cpp
        platform/network/blackberry/ResourceRequestBlackBerry.cpp

        * PlatformBlackBerry.cmake:

2011-12-06  Shinya Kawanaka  <shinyak@google.com>

        Refactoring: Editor::markAllMisspellingsAndBadGrammarInRanges should be refactored.
        https://bugs.webkit.org/show_bug.cgi?id=73628

        Reviewed by Hajime Morita.

        Extracted a code for adding markers and replacing misspelled words from WebCore::Editor::markAllMisspellingsAndBadGrammarInRanges.

        No new tests. covered by existing tests.

        * editing/Editor.cpp:
        (WebCore::Editor::markAllMisspellingsAndBadGrammarInRanges):
          Extracted a code for adding markers and replacing missplled words, and moved to markAndReplaceFor.
        (WebCore::Editor::markAndReplaceFor):
        * editing/Editor.h:

2011-12-06  Julien Chaffraix  <jchaffraix@webkit.org>

        Avoid calling calculateRects in RenderLayer::paintLayer when the rectangles are not needed
        https://bugs.webkit.org/show_bug.cgi?id=73754

        Reviewed by Simon Fraser.

        Performance change, no change in behavior.

        RenderLayer::paintLayer can easily be called a million time when scrolling on a big table with
        td { overflow: hidden; }. We would spend a lot of time recomputing the rectangles that we never
        unused for painting as our layer was not self-painting (clipping layer only) and we did not paint
        some overlay scrollbars.

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::paintLayer):
        Simplified and moved the shouldPaint logic earlier in the function. Now the branches
        are checking the same boolean which makes the logic more obvious. A consequence of
        filling shouldPaint earlier is that we call |calculateRects| only if there is a chance
        the rectangles will used. Also cached the result of isSelfPaintingLayer() in a local
        variable (isSelfPaintingLayer() is fairly expensive due to several virtual calls).

        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::paintIntoLayer):
        For coherency, applied the same optimizations here too: added an early return instead
        of conditionaly call |calculateRects| as we don't have to restore any clip.

2011-12-06  Benjamin Poulain  <benjamin@webkit.org>

        Simplify KURL's checkEncodedString()
        https://bugs.webkit.org/show_bug.cgi?id=73890

        Reviewed by Andreas Kling.

        The Macro UNUSED_PARAM is not supposed to be used for this case,
        use ASSERT_UNUSED instead.

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

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

        The code to create a NodeListsNodeData is duplicated everywhere
        https://bugs.webkit.org/show_bug.cgi?id=73961

        Reviewed by Darin Adler.

        Extracted the logic to create NodeListsNodeData as NodeRareData::ensureNodeLists.

        * dom/Document.cpp:
        (WebCore::Document::getItems):
        * dom/Node.cpp:
        (WebCore::Node::childNodes):
        (WebCore::Node::registerDynamicNodeList):
        (WebCore::Node::getElementsByTagName):
        (WebCore::Node::getElementsByTagNameNS):
        (WebCore::Node::getElementsByName):
        (WebCore::Node::getElementsByClassName):
        * dom/NodeRareData.h:
        (WebCore::NodeRareData::ensureNodeLists):
        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLFormControlElement::labels):

2011-12-06  Leo Yang  <leo.yang@torchmobile.com.cn>

        Upstream about: feature in WebKit/blackberry/WebCoreSupport/
        https://bugs.webkit.org/show_bug.cgi?id=73612

        Reviewed by Antonio Gomes.

        * PlatformBlackBerry.cmake: Move platform/network/blackberry/AboutData.{h, cpp}
                                    to WebKit/blackberry/WebCoreSupport

2011-12-06  Benjamin Poulain  <bpoulain@apple.com>

        WebKit Mac does not build without CONTEXT MENU
        https://bugs.webkit.org/show_bug.cgi?id=73962

        Reviewed by Pavel Feldman.

        In the patch r100903, the symbols were exported under ENABLE(CONTEXT_MENUS)
        because the feature is triggered from the menus.

        The implementation has no dependency on the context menu but is necessary to build
        when the inspector is enabled.
        This patch moves the exported symbols from ENABLE(CONTEXT_MENUS) to ENABLE(INSPECTOR).

        * WebCore.exp.in:

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

        [chromium] setNeedsCommit on non-composited host layers should trigger commit
        https://bugs.webkit.org/show_bug.cgi?id=73711

        Reviewed by James Robinson.

        Pipe non-composited content host syncs to setNeedsCommit.

        Since now the NonCompositedContentHost generates setNeedsCommit, don't
        call it unnecessarily, e.g. calling setBackgroundColor to the same
        color each frame should not retrigger more commits.

        * platform/graphics/chromium/GraphicsLayerChromium.cpp:
        (WebCore::GraphicsLayerChromium::setAnchorPoint):
        (WebCore::GraphicsLayerChromium::setTransform):
        (WebCore::GraphicsLayerChromium::setChildrenTransform):
        (WebCore::GraphicsLayerChromium::setMasksToBounds):
        (WebCore::GraphicsLayerChromium::setBackgroundColor):
        (WebCore::GraphicsLayerChromium::clearBackgroundColor):
        (WebCore::GraphicsLayerChromium::setContentsOpaque):
        (WebCore::GraphicsLayerChromium::setBackfaceVisibility):
        (WebCore::GraphicsLayerChromium::setOpacity):
        * platform/graphics/chromium/LayerChromium.cpp:
        (WebCore::LayerChromium::setNeedsCommit):
        (WebCore::LayerChromium::setAnchorPoint):
        (WebCore::LayerChromium::setAnchorPointZ):
        (WebCore::LayerChromium::setBackgroundColor):
        (WebCore::LayerChromium::setMasksToBounds):
        (WebCore::LayerChromium::setMaskLayer):
        (WebCore::LayerChromium::setOpacity):
        (WebCore::LayerChromium::setOpaque):
        (WebCore::LayerChromium::setPosition):
        (WebCore::LayerChromium::setSublayerTransform):
        (WebCore::LayerChromium::setTransform):
        (WebCore::LayerChromium::setScrollPosition):
        (WebCore::LayerChromium::setScrollable):
        (WebCore::LayerChromium::setDoubleSided):
        * platform/graphics/chromium/LayerChromium.h:
        (WebCore::LayerChromium::setReplicaLayer):
        * platform/graphics/chromium/NonCompositedContentHost.cpp:
        (WebCore::NonCompositedContentHost::notifySyncRequired):
        * platform/graphics/chromium/NonCompositedContentHost.h:

2011-12-06  Kenichi Ishibashi  <bashi@chromium.org>

        [Chromium] unknown characters symbol on \n in complex script text (RTL and LTR)
        https://bugs.webkit.org/show_bug.cgi?id=73806

        Reviewed by Tony Chang.

        Sets fMergeNeutralItems to 1 instead of merging script items based on their tags.

        Tests: platform/chromium/fast/text/international/chromium-complex-text-non-printable-expected.html
               platform/chromium/fast/text/international/chromium-complex-text-non-printable.html

        * platform/graphics/chromium/UniscribeHelper.cpp:
        (WebCore::UniscribeHelper::fillRuns): Removed a block which merges script items.

2011-12-06  Luke Macpherson   <macpherson@chromium.org>

        Implement remaining border-image and webkit-maskbox-image properties in CSSStyleApplyProperty.
        https://bugs.webkit.org/show_bug.cgi?id=73391

        Reviewed by Hajime Morita.

        No new tests / refacoring only.

        * css/CSSStyleApplyProperty.cpp:
        (WebCore::ApplyPropertyBorderImageModifier::getValue):
        (WebCore::ApplyPropertyBorderImageModifier::setValue):
        (WebCore::ApplyPropertyBorderImageModifier::applyInheritValue):
        (WebCore::ApplyPropertyBorderImageModifier::applyInitialValue):
        (WebCore::ApplyPropertyBorderImageModifier::applyValue):
        (WebCore::ApplyPropertyBorderImageModifier::createHandler):
        (WebCore::CSSStyleApplyProperty::CSSStyleApplyProperty):
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):
        * css/CSSStyleSelector.h:

2011-12-06  Pavel Feldman  <pfeldman@google.com>

        Web Inspector: introduce a memory agent stub.
        https://bugs.webkit.org/show_bug.cgi?id=73930

        Reviewed by Timothy Hatcher.

        We'd like to experiment with the memory stats and hence need a
        nice home for that. Adding this undocumented agent / domain for now.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/ScriptProfiler.h:
        (WebCore::ScriptProfiler::nodeCount):
        * bindings/v8/ScriptProfiler.cpp:
        (WebCore::ScriptProfiler::nodeCount):
        * bindings/v8/ScriptProfiler.h:
        * inspector/Inspector.json:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        * inspector/InspectorMemoryAgent.cpp: Added.
        (WebCore::InspectorMemoryAgent::~InspectorMemoryAgent):
        (WebCore::InspectorMemoryAgent::getNodeCounter):
        (WebCore::InspectorMemoryAgent::InspectorMemoryAgent):
        * inspector/InspectorMemoryAgent.h: Added.
        (WebCore::InspectorMemoryAgent::create):

2011-12-06  Julien Chaffraix  <jchaffraix@webkit.org>

        Unreviewed build fix after 102183.

        * rendering/style/RenderStyle.h:
        (WebCore::InheritedFlags::initialGridTrackValue):
        Use DEFINE_STATIC_LOCAL to avoid having an exit-time destructor.

2011-12-06  Julien Chaffraix  <jchaffraix@webkit.org>

        Inline RenderObject::view()
        https://bugs.webkit.org/show_bug.cgi?id=73733

        Reviewed by Darin Adler.

        Micro-performance optimization, no change in behavior.

        RenderObject::view() is super hot and is taking ~4-5% of the time in some
        benchmarks as it is called several hundred thousands times. For some reason,
        the compiler did not inline it even though it is very simple in release builds.

        * WebCore.exp.in: Removed RenderObject::view() as it is inlined now.

        * rendering/RenderObject.cpp: Moved the implementation from here ...
        * rendering/RenderView.h:
        (WebCore::RenderObject::view): ... to here to avoid a cyclic
        dependency between RenderObject and RenderView. Also marked the
        function as ALWAYS_INLINE.

        * rendering/RenderObject.h:
        * rendering/svg/RenderSVGResourceContainer.cpp:
        Added #include "RenderView.h" as the code checks for view() during repaint.

2011-12-06  Julien Chaffraix  <jchaffraix@webkit.org>

        CSS Grid Layout: Add support for parsing multiple grid-columns or grid-rows
        https://bugs.webkit.org/show_bug.cgi?id=73272

        Reviewed by Tony Chang.

        Test: fast/css-grid-layout/grid-columns-rows-get-set-multiple.html

        Updated our supported syntax to match the following:
        <track-list> := [ <track-breadth> ]+ | 'none'
        <track-breadth> := <length> | <percentage> | 'auto'
        (the naming loosely matches the specification)

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::valueForGridTrackBreadth): Added function to handle a breadth
        (extended with 'auto' that the spec puts in <track-minmax>).

        (WebCore::valueForGridTrackList): Create a space seperated list of
        track breadth or none.

        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue): Updated
        to use the new functions.

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseGridTrackList): Extended the function to
        match the new syntax.

        * css/CSSStyleApplyProperty.cpp:
        (WebCore::CSSStyleApplyProperty::CSSStyleApplyProperty): Removed our
        simple implementation. Replaced by the CSSStyleSelector functions.

        * css/CSSStyleSelector.cpp:
        (WebCore::createGridTrackBreadth):
        (WebCore::createGridTrackList):
        Added those 2 functions to convert the CSSPrimitiveValue to a Vector
        as expected by RenderStyle.

        (WebCore::CSSStyleSelector::applyProperty): Added our 2 properties
        now that it is not handled by CSSStyleApplyProperty.

        * rendering/style/RenderStyle.h:
        (WebCore::InheritedFlags::gridColumns):
        (WebCore::InheritedFlags::gridRows):
        (WebCore::InheritedFlags::setGridColumns):
        (WebCore::InheritedFlags::setGridRows):
        (WebCore::InheritedFlags::initialGridColumns):
        (WebCore::InheritedFlags::initialGridRows):
        Updated the previous methods to take a Vector of Length.

        (WebCore::InheritedFlags::initialGridTrackValue):
        Needed function to return a Vector with one 'none' Length (the initial
        value per the specification).

        * rendering/style/StyleGridData.h: Updated to use a Vector.

2011-12-06  David Reveman  <reveman@chromium.org>

        [Chromium] Implement tile-sized painting using SkPicture.
        https://bugs.webkit.org/show_bug.cgi?id=71869

        Reviewed by James Robinson.

        Add texture uploader that paints tile-sized chunks using SkPicture
        recording and playback. Expose setting which allows this texture
        updater to be enabled.

        No new tests. Covered by existing tests.

        * WebCore.gypi:
        * platform/graphics/chromium/BitmapSkPictureCanvasLayerTextureUpdater.cpp: Added.
        (WebCore::BitmapSkPictureCanvasLayerTextureUpdater::Texture::Texture):
        (WebCore::BitmapSkPictureCanvasLayerTextureUpdater::Texture::prepareRect):
        (WebCore::BitmapSkPictureCanvasLayerTextureUpdater::Texture::updateRect):
        (WebCore::BitmapSkPictureCanvasLayerTextureUpdater::create):
        (WebCore::BitmapSkPictureCanvasLayerTextureUpdater::BitmapSkPictureCanvasLayerTextureUpdater):
        (WebCore::BitmapSkPictureCanvasLayerTextureUpdater::~BitmapSkPictureCanvasLayerTextureUpdater):
        (WebCore::BitmapSkPictureCanvasLayerTextureUpdater::createTexture):
        (WebCore::BitmapSkPictureCanvasLayerTextureUpdater::sampledTexelFormat):
        (WebCore::BitmapSkPictureCanvasLayerTextureUpdater::prepareToUpdate):
        (WebCore::BitmapSkPictureCanvasLayerTextureUpdater::paintContentsRect):
        (WebCore::BitmapSkPictureCanvasLayerTextureUpdater::updateTextureRect):
        * platform/graphics/chromium/BitmapSkPictureCanvasLayerTextureUpdater.h: Added.
        (WebCore::BitmapSkPictureCanvasLayerTextureUpdater::Texture::textureUpdater):
        (WebCore::BitmapSkPictureCanvasLayerTextureUpdater::orientation):
        * platform/graphics/chromium/ContentLayerChromium.cpp:
        (WebCore::ContentLayerChromium::createTextureUpdater):
        * platform/graphics/chromium/cc/CCLayerTreeHost.h:
        (WebCore::CCSettings::CCSettings):

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

        [chromium] Don't crash if tile upload happens without painting first
        https://bugs.webkit.org/show_bug.cgi?id=73939

        Reviewed by James Robinson.

        Remove at least one place (in ImageLayerChromium) where this could
        happen.

        Although this shouldn't happen, we should be robust to it in the
        chance that other code causes it to.

        * platform/graphics/chromium/ImageLayerChromium.cpp:
        (WebCore::ImageLayerChromium::paintContentsIfDirty):
        * platform/graphics/chromium/TiledLayerChromium.cpp:
        (WebCore::TiledLayerChromium::updateCompositorResources):

2011-12-06  Ruben  <chromium@hybridsource.org>

        Enable web audio by default on non-Mac POSIX platforms
        https://bugs.webkit.org/show_bug.cgi?id=73491

        Reviewed by Tony Chang.

        No new tests, just changing gyp includes.

        * WebCore.gyp/WebCore.gyp:

2011-12-06  Benjamin Poulain  <benjamin@webkit.org>

        Put length in its own variable in KURL copyASCII
        https://bugs.webkit.org/show_bug.cgi?id=73928

        Reviewed by Darin Adler.

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

2011-12-06  Dana Jansens  <danakj@chromium.org>

        [chromium] Set opaque flag for ImageLayerChromium
        https://bugs.webkit.org/show_bug.cgi?id=72964

        Reviewed by James Robinson.

        Unit test in tests/ImageLayerChromiumTest.cpp.

        * platform/graphics/chromium/GraphicsLayerChromium.cpp:
        (WebCore::GraphicsLayerChromium::setContentsToImage):
        * platform/graphics/chromium/GraphicsLayerChromium.h:
        (WebCore::GraphicsLayerChromium::contentsLayer):
        * platform/graphics/chromium/ImageLayerChromium.cpp:
        (WebCore::ImageLayerChromium::setContents):

2011-12-06  Alexandre Elias  <aelias@google.com>

        [chromium] Apply sent deltas on finishCommit
        https://bugs.webkit.org/show_bug.cgi?id=73884

        Reviewed by James Robinson.

        This moves scroll and pageScale "sent" deltas to be applied to
        the layer at the end of the commit, instead of the beginning.

        This has several advantages, especially for page scale:
        - When pageScale changes, no longer any need to change the scroll's
        coordinate space at beginning of commit, which is complex and prone to
        bugs (this fixes a problem where we were forgetting to modify the
        scrollPosition before).
        - No need for non-commit-related code to consider the "sent" values.
        m_pageScale is now always the content scale factor, and
        m_pageScaleDelta is the scale to be on the impl-side matrix.
        - This will make it easy to send arbitrary fake or future delta
        values for example while pinch zooming out.

        The scroll logic is similarly altered for consistency's sake.  Note that
        I also moved the tree synchronize to the beginning of finishCommit
        in order to avoid having to change the pageScale coordinate space of
        sentScrollDelta in adjustScrollsForPageScaleChange().

        No new tests. (Refactoring of existing code.)

        * platform/graphics/chromium/LayerChromium.cpp:
        (WebCore::LayerChromium::pushPropertiesTo):
        * platform/graphics/chromium/cc/CCLayerTreeHost.cpp:
        (WebCore::CCLayerTreeHost::finishCommitOnImplThread):
        * platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:
        (WebCore::CCLayerTreeHostImpl::setPageScaleFactorAndLimits):
        (WebCore::CCLayerTreeHostImpl::applyPageScaleDeltaToScrollLayer):
        (WebCore::CCLayerTreeHostImpl::processScrollDeltas):

2011-12-06  Gavin Barraclough  <barraclough@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=68328
        The generator and intrinsic fields in HashTableValue/HashEntry and associated structures and methods are redundant

        Reviewed by Geoff Garen.

        Intrinsic is no longer in the DFG namespace, is always in the
        hash table. Removed ThunkGenerator.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateHashTable):

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

        Unreviewed, rolling out r102091.
        http://trac.webkit.org/changeset/102091
        https://bugs.webkit.org/show_bug.cgi?id=73711

        Caused Clang Linux compile failure.

        * platform/graphics/chromium/GraphicsLayerChromium.cpp:
        (WebCore::GraphicsLayerChromium::setAnchorPoint):
        (WebCore::GraphicsLayerChromium::setTransform):
        (WebCore::GraphicsLayerChromium::setChildrenTransform):
        (WebCore::GraphicsLayerChromium::setMasksToBounds):
        (WebCore::GraphicsLayerChromium::setBackgroundColor):
        (WebCore::GraphicsLayerChromium::clearBackgroundColor):
        (WebCore::GraphicsLayerChromium::setContentsOpaque):
        (WebCore::GraphicsLayerChromium::setBackfaceVisibility):
        (WebCore::GraphicsLayerChromium::setOpacity):
        * platform/graphics/chromium/LayerChromium.cpp:
        (WebCore::LayerChromium::setNeedsCommit):
        * platform/graphics/chromium/LayerChromium.h:
        (WebCore::LayerChromium::setAnchorPoint):
        (WebCore::LayerChromium::setAnchorPointZ):
        (WebCore::LayerChromium::setBackgroundColor):
        (WebCore::LayerChromium::setMasksToBounds):
        (WebCore::LayerChromium::setMaskLayer):
        (WebCore::LayerChromium::setOpacity):
        (WebCore::LayerChromium::setOpaque):
        (WebCore::LayerChromium::setPosition):
        (WebCore::LayerChromium::setSublayerTransform):
        (WebCore::LayerChromium::setTransform):
        (WebCore::LayerChromium::setScrollPosition):
        (WebCore::LayerChromium::setScrollable):
        (WebCore::LayerChromium::setDoubleSided):
        (WebCore::LayerChromium::setReplicaLayer):
        * platform/graphics/chromium/NonCompositedContentHost.cpp:
        (WebCore::NonCompositedContentHost::notifySyncRequired):
        * platform/graphics/chromium/NonCompositedContentHost.h:

2011-12-06  Dana Jansens  <danakj@chromium.org>

        [Chromium] Make root layer always opaque
        https://bugs.webkit.org/show_bug.cgi?id=70564

        Reviewed by James Robinson.

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

2011-12-06  Noel Gordon  <noel.gordon@gmail.com>

        WebPImageDecoder computes image width and height multiple times
        https://bugs.webkit.org/show_bug.cgi?id=73796

        Reviewed by Adam Barth.

        Once sufficient image data arrives, we can compute the decoded image height
        and width from the WEBP image header data.

        From then on, the decoded image size is known so there's no need to re-read
        it from the WEBP image header again.

        No change in behavior, so no new tests.

        * platform/image-decoders/webp/WEBPImageDecoder.cpp:
        (WebCore::WEBPImageDecoder::decode):

2011-12-06  Mike Reed  <reed@google.com>

        optimize TransformationMatrix::scale by not calling through to generic multiply
        https://bugs.webkit.org/show_bug.cgi?id=73830

        Reviewed by Kenneth Russell.

        No new tests. Optimization only, existing tests exercise the code

        * platform/graphics/transforms/TransformationMatrix.cpp:
        (WebCore::TransformationMatrix::scaleNonUniform):
        (WebCore::TransformationMatrix::scale3d):

2011-12-06  Eric Carlson  <eric.carlson@apple.com>

        Revert WebCore track Settings changes made in r101977
        https://bugs.webkit.org/show_bug.cgi?id=73879

        Reviewed by Sam Weinig.

        No new tests yet, still nothing to test.

        * page/Settings.cpp: Move the preference setters back into the .h file.
        * page/Settings.h:
        (WebCore::Settings::setShouldDisplaySubtitles):
        (WebCore::Settings::setShouldDisplayCaptions):
        (WebCore::Settings::setShouldDisplayTextDescriptions):

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

        MediaList: Remove constructor that takes a CSSImportRule*.
        <http://webkit.org/b/73833>

        Reviewed by Antti Koivisto.

        * css/MediaList.h:
        * css/MediaList.cpp:

            Remove MediaList(CSSImportRule*, ...) constructor.

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

            Have CSSImportRule construct its MediaList by passing the parent
            style sheet, which is exactly what the old constructor accomplished.
            Also assert that we're always created with a non-null parent sheet.

2011-12-06  Jarred Nicholls  <jarred@sencha.com>

        getComputedStyle returns wrong value for margin-*
        https://bugs.webkit.org/show_bug.cgi?id=73334

        margin-* getComputedStyle values should return the "used" absolute value when there is a renderer
        and the specified value is relative (percentage, auto, etc.).
        When there is no renderer, the specified value should be returned.
        See http://dev.w3.org/csswg/cssom/#resolved-values.

        Reviewed by Darin Adler.

        Test: fast/css/getComputedStyle/getComputedStyle-resolved-values.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):

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

        REGRESSION (WebKit2): Kill ring is not cleared when selection changes
        https://bugs.webkit.org/show_bug.cgi?id=73888
        <rdar://problem/10532310>

        Reviewed by Mark Rowe.

        Test: editing/pasteboard/emacs-ctrl-k-with-move.html

        * editing/Editor.cpp: (WebCore::Editor::respondToChangedSelection): Moved the code to clear
        kill ring from Mac WebKit, as it's needed in all Mac ports at least.

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

        Use HashMap<OwnPtr> in CollectionCache
        https://bugs.webkit.org/show_bug.cgi?id=73784

        Reviewed by Andreas Kling.

        * html/CollectionCache.cpp:
        (WebCore::CollectionCache::copyCacheMap): Use adoptPtr.
        (WebCore::CollectionCache::reset): Removed now-unneeded calls to deleteAllValues.
        (WebCore::append): Added. Helper function for appending elements to the maps from
        the collection cache.

        * html/CollectionCache.h: Changed mapped type in NodeCacheMap to OwnPtr.
        Added append function.

        * html/HTMLCollection.cpp:
        (WebCore::nameShouldBeVisibleInDocumentAll): Added, to factor out common code in
        two functions below.
        (WebCore::HTMLCollection::checkForNameMatch): Changed to call nameShouldBeVisibleInDocumentAll.
        (WebCore::HTMLCollection::updateNameCache): Ditto. Also updated cache code to use the append
        function, so it will work with OwnPtr. Also eliminated an unneeded get call before
        each hash table add; we do both at once in the new append function.
        * html/HTMLFormCollection.cpp:
        (WebCore::HTMLFormCollection::updateNameCache): More of the same.

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

        [Chromium] Web Inspector: getFunctionLocation should return scriptId as String not as int
        https://bugs.webkit.org/show_bug.cgi?id=73892

        Reviewed by Pavel Feldman.

        * bindings/v8/custom/V8InjectedScriptHostCustom.cpp:
        (WebCore::V8InjectedScriptHost::functionLocationCallback): scriptId should be a string not a number
        * inspector/Inspector.json: removed unused parameter

2011-11-21  Balazs Kelemen  <kbalazs@webkit.org>

        Enable ParallelJobs by default
        https://bugs.webkit.org/show_bug.cgi?id=70032

        Reviewed by Zoltan Herczeg.

        Covered by existing tests.

        According to measurements on Mac and Linux it is a
        considerable speedup for SVG on multicore.

        Remove the ENABLE(PARALLEL_JOBS) guard. Fix the Windows build
        by qualifying ParallelJobs with the WTF namespace (otherwise
        MSVC believes it belongs to WebCore which is likely a compiler bug).

        * platform/graphics/filters/FEConvolveMatrix.cpp:
        (WebCore::FEConvolveMatrix::setInteriorPixelsWorker):
        (WebCore::FEConvolveMatrix::platformApplySoftware):
        * platform/graphics/filters/FEConvolveMatrix.h:
        * platform/graphics/filters/FEGaussianBlur.cpp:
        (WebCore::FEGaussianBlur::platformApplyWorker):
        (WebCore::FEGaussianBlur::platformApply):
        * platform/graphics/filters/FEGaussianBlur.h:
        * platform/graphics/filters/FELighting.cpp:
        (WebCore::FELighting::platformApplyGenericWorker):
        (WebCore::FELighting::platformApplyGeneric):
        * platform/graphics/filters/FELighting.h:
        * platform/graphics/filters/FEMorphology.cpp:
        (WebCore::FEMorphology::platformApplyWorker):
        (WebCore::FEMorphology::platformApply):
        * platform/graphics/filters/FEMorphology.h:
        * platform/graphics/filters/FETurbulence.cpp:
        (WebCore::FETurbulence::fillRegionWorker):
        (WebCore::FETurbulence::platformApplySoftware):
        * platform/graphics/filters/FETurbulence.h:
        * platform/graphics/filters/arm/FELightingNEON.cpp:
        (WebCore::FELighting::platformApplyNeonWorker):
        * platform/graphics/filters/arm/FELightingNEON.h:
        (WebCore::FELighting::platformApplyNeon):

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

        Unreviewed assertion fix for r102123.

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

2011-12-06  Benjamin Poulain  <benjamin@webkit.org>

        Simplify KURL's checkEncodedString()
        https://bugs.webkit.org/show_bug.cgi?id=73890

        Reviewed by Andreas Kling.

        The method was reimplementing String::containsOnlyASCII().
        Use the method from String and we can remove the #if NDEBUG.

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

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

        Unreviewed, rolling out r102111.
        http://trac.webkit.org/changeset/102111
        https://bugs.webkit.org/show_bug.cgi?id=73902

        Breaks compilation (Requested by vsevik on #webkit).

        * editing/Editor.cpp:
        (WebCore::Editor::markAllMisspellingsAndBadGrammarInRanges):
        * editing/Editor.h:

2011-12-06  Hajime Morrita  <morrita@chromium.org>

        [Refactoring] Accessing Node::m_document should be minimized.
        https://bugs.webkit.org/show_bug.cgi?id=73800

        Reviewed by Kent Tamura.

        No new tests. No behavioral change.

        Replaced m_document reference with the document() accessor
        or temporaril variables. This is a preparation for using
        m_document space to point a shadow root pointer.

        * dom/Document.h:
        (WebCore::Node::Node):
        * dom/Node.cpp:
        (WebCore::Node::~Node):

2011-12-06  Shinya Kawanaka  <shinyak@google.com>

        https://bugs.webkit.org/show_bug.cgi?id=73889
        TextCheckingParagraph::offsetTo should not have a side effect.

        Reviewed by Hajime Morita.

        Since TextCheckingParagraph::offsetTo had a side effect, its cache often became inconsistent.
        This is likely to cause a bug when changing SpellChecker and Editor.

        No new tests. Covered by existing tests.

        * editing/TextCheckingHelper.cpp:
        (WebCore::TextCheckingParagraph::offsetTo):

2011-12-06  Eric Penner  <epenner@google.com>

        [chromium] Set texture limits as multiples of viewport size instead of hardcoded values
        https://bugs.webkit.org/show_bug.cgi?id=72202

        Reviewed by James Robinson.

        * platform/graphics/chromium/LayerRendererChromium.cpp: 
        (WebCore::LayerRendererChromium::drawLayers): added viewport param
        (WebCore::LayerRendererChromium::initializeSharedObjects): ditto 
        * platform/graphics/chromium/TextureManager.cpp: 
        (WebCore::TextureManager::highLimitBytes): calculated based on viewport
        (WebCore::TextureManager::reclaimLimitBytes): ditto
        (WebCore::TextureManager::lowLimitBytes): ditto
        (WebCore::TextureManager::TextureManager): added viewport param
        (WebCore::TextureManager::setMaxMemoryLimitBytes): changed name
        (WebCore::TextureManager::setPreferredMemoryLimitBytes): added function
        (WebCore::TextureManager::requestTexture): added viewport param
        * platform/graphics/chromium/TextureManager.h: ditto
        (WebCore::TextureManager::create): ditto
        * platform/graphics/chromium/cc/CCLayerTreeHost.cpp: ditto
        (WebCore::CCLayerTreeHost::initialize): ditto
        (WebCore::CCLayerTreeHost::beginCommitOnImplThread): ditto
        (WebCore::CCLayerTreeHost::setViewport): ditto
        (WebCore::CCLayerTreeHost::setVisible): ditto
        (WebCore::CCLayerTreeHost::didBecomeInvisibleOnImplThread): ditto

2011-12-06  Huang Dongsung  <luxtella@company100.net>

        [TexMap][QT] Draw the borders of media and webgl elements in TexMap.
        https://bugs.webkit.org/show_bug.cgi?id=73817

        GraphicsContext3D only draws the content of the WebGL canvas, not the additional
        CSS such as the borders. TextureMapper should render the content of a
        media/webgl layer before drawing the actual canvas.
        This makes LayoutTests/compositing/webgl/webgl-reflection.html work.

        Reviewed by Noam Rosenthal.

        * platform/graphics/texmap/GraphicsLayerTextureMapper.cpp:
        (WebCore::GraphicsLayerTextureMapper::setContentsNeedsDisplay):
        * platform/graphics/texmap/GraphicsLayerTextureMapper.h:
        * platform/graphics/texmap/TextureMapperNode.cpp:
        (WebCore::TextureMapperNode::renderContent):
        (WebCore::TextureMapperNode::paintSelf):

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

        Unreviewed, rolling out r102043.
        http://trac.webkit.org/changeset/102043
        https://bugs.webkit.org/show_bug.cgi?id=73898

        Breaks chromium mac-cg compilation. (Requested by vsevik on
        #webkit).

        * platform/graphics/chromium/GraphicsLayerChromium.cpp:
        (WebCore::GraphicsLayerChromium::setContentsToImage):
        * platform/graphics/chromium/GraphicsLayerChromium.h:
        (WebCore::GraphicsLayerChromium::contentsLayer):
        * platform/graphics/chromium/ImageLayerChromium.cpp:
        (WebCore::ImageLayerChromium::setContents):

2011-12-06  Shinya Kawanaka  <shinyak@google.com>

        Refactoring: Editor::markAllMisspellingsAndBadGrammarInRanges should be refactored.
        https://bugs.webkit.org/show_bug.cgi?id=73628

        Reviewed by Hajime Morita.

        Extracted a code for adding markers and replacing misspelled words from WebCore::Editor::markAllMisspellingsAndBadGrammarInRanges.

        No new tests. covered by existing tests.

        * editing/Editor.cpp:
        (WebCore::Editor::markAllMisspellingsAndBadGrammarInRanges):
          Extracted a code for adding markers and replacing missplled words, and moved to markAndReplaceFor.
        (WebCore::Editor::markAndReplaceFor):
        * editing/Editor.h:

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

        Web Inspector: [Audits] Implement "Stop" button and progress bar instead of spinner.
        https://bugs.webkit.org/show_bug.cgi?id=73626

        Reviewed by Yury Semikhatsky.

        * English.lproj/localizedStrings.js:
        * inspector/front-end/AuditLauncherView.js:
        (WebInspector.AuditLauncherView):
        (WebInspector.AuditLauncherView.prototype._setAuditRunning):
        (WebInspector.AuditLauncherView.prototype._launchButtonClicked):
        (WebInspector.AuditLauncherView.prototype._createLauncherUI):
        (WebInspector.AuditLauncherView.prototype._updateResourceProgress):
        (WebInspector.AuditLauncherView.prototype._updateButton):
        * inspector/front-end/AuditRules.js:
        (WebInspector.AuditRules.GzipRule.prototype.doRun):
        (WebInspector.AuditRules.CombineExternalResourcesRule.prototype.doRun):
        (WebInspector.AuditRules.MinimizeDnsLookupsRule.prototype.doRun):
        (WebInspector.AuditRules.UnusedCssRule.prototype.doRun.evalCallback.selectorsCallback):
        (WebInspector.AuditRules.UnusedCssRule.prototype.doRun.evalCallback.documentLoaded):
        (WebInspector.AuditRules.UnusedCssRule.prototype.doRun.evalCallback):
        (WebInspector.AuditRules.UnusedCssRule.prototype.doRun.styleSheetCallback):
        (WebInspector.AuditRules.UnusedCssRule.prototype.doRun.allStylesCallback):
        (WebInspector.AuditRules.UnusedCssRule.prototype.doRun):
        (WebInspector.AuditRules.CacheControlRule.prototype.doRun):
        (WebInspector.AuditRules.ImageDimensionsRule.prototype.doRun):
        (WebInspector.AuditRules.CssInHeadRule.prototype.doRun):
        (WebInspector.AuditRules.CssInHeadRule.prototype.doRun.externalStylesheetsReceived):
        (WebInspector.AuditRules.CssInHeadRule.prototype.doRun.inlineStylesReceived):
        (WebInspector.AuditRules.CssInHeadRule.prototype.doRun.onDocumentAvailable):
        (WebInspector.AuditRules.StylesScriptsOrderRule.prototype.doRun):
        (WebInspector.AuditRules.StylesScriptsOrderRule.prototype.doRun.cssBeforeInlineReceived):
        (WebInspector.AuditRules.StylesScriptsOrderRule.prototype.doRun.lateStylesReceived):
        (WebInspector.AuditRules.StylesScriptsOrderRule.prototype.doRun.onDocumentAvailable):
        (WebInspector.AuditRules.CookieRuleBase.prototype.doRun.resultCallback):
        (WebInspector.AuditRules.CookieRuleBase.prototype.doRun):
        * inspector/front-end/AuditsPanel.js:
        (WebInspector.AuditsPanel):
        (WebInspector.AuditsPanel.prototype._executeAudit.ruleResultReadyCallback):
        (WebInspector.AuditsPanel.prototype._executeAudit):
        (WebInspector.AuditsPanel.prototype._auditFinishedCallback):
        (WebInspector.AuditsPanel.prototype.terminateAudit):
        (WebInspector.AuditCategory.prototype.run):
        (WebInspector.AuditRule.prototype.run):
        (WebInspector.AuditRule.prototype.doRun):
        (WebInspector.AuditProgressMonitor):
        (WebInspector.AuditProgressMonitor.prototype.setTotalWork):
        (WebInspector.AuditProgressMonitor.prototype.worked):
        (WebInspector.AuditProgressMonitor.prototype.get indeterminate):
        (WebInspector.AuditProgressMonitor.prototype.done):
        (WebInspector.AuditProgressMonitor.prototype.get canceled):
        (WebInspector.AuditProgressMonitor.prototype.set canceled):

2011-12-06  Viatcheslav Ostapenko  <ostapenko.viatcheslav@nokia.com>

        [Qt] [WK2] MiniBrowser assert on startup in debug build after r101713
        https://bugs.webkit.org/show_bug.cgi?id=73874

        This change partially reverts r101713 restoring original behaviour for
        KUrl creation from empty string and fixes asserts in debug build.

        Reviewed by Alexey Proskuryakov.

        No new tests. Tests from r101713 pass.

        * platform/KURL.cpp:
        (WebCore::KURL::init):
        (WebCore::KURL::parse):
        * platform/KURL.h:

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

        Use HashMap<OwnPtr> for EventListenerMap's internal map.
        <http://webkit.org/b/73761>

        Reviewed by Benjamin Poulain.

        Changed the value type of EventListenerMap::m_hashMap to OwnPtr<EventListenerVector>.
        This means we no longer need to manually delete the vectors when taking them out of
        the map, which makes the code a little prettier.

        A few tweaks were necessary; release() instead of leakPtr() when switching modes
        and adoptPtr()/get() sprinkled as needed.

        * dom/EventListenerMap.h:
        * dom/EventListenerMap.cpp:
        (WebCore::EventListenerMap::clear):
        (WebCore::EventListenerMap::add):
        (WebCore::EventListenerMap::remove):
        (WebCore::EventListenerMap::find):
        (WebCore::EventListenerMap::removeFirstEventListenerCreatedFromMarkup):
        (WebCore::EventListenerMap::copyEventListenersNotCreatedFromMarkupToTarget):

2011-12-05  Rafael Weinstein  <rafaelw@chromium.org>

        [MutationObservers] Support 'attributes' mutation records for element.removeAttribute
        https://bugs.webkit.org/show_bug.cgi?id=73880

        Reviewed by Ojan Vafai.

        * dom/Element.cpp:
        (WebCore::enqueueAttributesMutationRecord):
        (WebCore::Element::removeAttribute):

2011-12-05  Dana Jansens  <danakj@chromium.org>

        Set opaque flag for WebGLLayerChromium
        https://bugs.webkit.org/show_bug.cgi?id=73876

        Reviewed by James Robinson.

        New unit test in tests/WebGLLayerChromiumTest.cpp

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

2011-12-05  Benjamin Poulain  <bpoulain@apple.com>

        Upstream the Cursor implementation of iOS
        https://bugs.webkit.org/show_bug.cgi?id=73724

        Reviewed by David Kilzer.

        iOS does not need to support the Cursor of WebKit. For compatibility, Cursor
        is implemented as an empty class on the platform.

        * Configurations/WebCore.xcconfig:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/Cursor.h:
        (WebCore::Cursor::Cursor):
        * platform/ios/CursorIOS.cpp: Added.
        (WebCore::cursor):
        (WebCore::pointerCursor):
        (WebCore::crossCursor):
        (WebCore::handCursor):
        (WebCore::moveCursor):
        (WebCore::iBeamCursor):
        (WebCore::waitCursor):
        (WebCore::helpCursor):
        (WebCore::eastResizeCursor):
        (WebCore::northResizeCursor):
        (WebCore::northEastResizeCursor):
        (WebCore::northWestResizeCursor):
        (WebCore::southResizeCursor):
        (WebCore::southEastResizeCursor):
        (WebCore::southWestResizeCursor):
        (WebCore::westResizeCursor):
        (WebCore::northSouthResizeCursor):
        (WebCore::eastWestResizeCursor):
        (WebCore::northEastSouthWestResizeCursor):
        (WebCore::northWestSouthEastResizeCursor):
        (WebCore::columnResizeCursor):
        (WebCore::rowResizeCursor):
        (WebCore::middlePanningCursor):
        (WebCore::eastPanningCursor):
        (WebCore::northPanningCursor):
        (WebCore::northEastPanningCursor):
        (WebCore::northWestPanningCursor):
        (WebCore::southPanningCursor):
        (WebCore::southEastPanningCursor):
        (WebCore::southWestPanningCursor):
        (WebCore::westPanningCursor):
        (WebCore::verticalTextCursor):
        (WebCore::cellCursor):
        (WebCore::contextMenuCursor):
        (WebCore::noDropCursor):
        (WebCore::notAllowedCursor):
        (WebCore::progressCursor):
        (WebCore::aliasCursor):
        (WebCore::zoomInCursor):
        (WebCore::zoomOutCursor):
        (WebCore::copyCursor):
        (WebCore::noneCursor):
        (WebCore::grabCursor):
        (WebCore::grabbingCursor):
        (WebCore::determineHotSpot):

2011-12-05  Noel Gordon  <noel.gordon@gmail.com>

        [GTK] GIF image test crashes on 32- and 64-bit Release
        https://bugs.webkit.org/show_bug.cgi?id=73812

        Reviewed by Adam Barth.

        Call resize() on the image pixel backing store after allocation to see if
        that stops the GIF image decoder animation tests crashes on GTK.

        No new tests, covered by exiting tests ...
          fast/backgrounds/animated-gif-as-background.html
          fast/images/dont-crash-with-null-gif-frames.html
          fast/images/gif-loop-count.html

        * platform/image-decoders/ImageDecoder.cpp:
        (WebCore::ImageFrame::setSize):

2011-12-05  Erik Arvidsson  <arv@chromium.org>

        Could save a lot of memory in CharacterData by not always storing a String
        https://bugs.webkit.org/show_bug.cgi?id=72404

        Reviewed by Ojan Vafai.

        When a Text node is created by the parser we check if the string is all whitespace
        and if so we put it in the AtomicString table so that all future identical whitespace
        strings can share the StringImpl.

        No new tests. Covered by existing tests.

        * html/parser/HTMLConstructionSite.cpp:
        (WebCore::HTMLNames::isAllWhitespace):
        (WebCore::HTMLConstructionSite::insertTextNode):

            If we do not know whether the string is all whitespace this now checks the string
            If the string is all whitespace we create an AtomicString for it.

        * html/parser/HTMLConstructionSite.h:
        * html/parser/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::ExternalCharacterTokenBuffer::skipLeadingNonWhitespace): We never cared about the return value here.
        (WebCore::HTMLTreeBuilder::processCharacterBuffer): Pass WhitespaceMode in the case we know whether the string is all whitespace or not.
        (WebCore::HTMLTreeBuilder::defaultForInTableText): Ditto.

2011-12-05  Benjamin Poulain  <benjamin@webkit.org>

        Update KURL's copy copyASCII to avoid String::characters()
        https://bugs.webkit.org/show_bug.cgi?id=73794

        Reviewed by Andreas Kling.

        When the String is already on 8 bits, we can simply copy the
        data. In the 16 bits case, everything remains the same.

        * platform/KURL.cpp:
        (WebCore::copyASCII):
        (WebCore::appendASCII):
        (WebCore::KURL::init):
        (WebCore::KURL::parse):
        (WebCore::KURL::copyToBuffer):

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

        https://bugs.webkit.org/show_bug.cgi?id=73683
        Implement KeyframeValueList::operator=() and KeyframeValueList::swap().

        Reviewed by Darin Adler.

        No new tests as no functional change.

        * platform/graphics/GraphicsLayer.h: 
        (WebCore::KeyframeValueList::operator=): Added
        (WebCore::KeyframeValueList::swap): Added

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

        [chromium] setNeedsCommit on non-composited host layers should trigger commit
        https://bugs.webkit.org/show_bug.cgi?id=73711

        Reviewed by James Robinson.

        Pipe non-composited content host syncs to setNeedsCommit.

        Since now the NonCompositedContentHost generates setNeedsCommit, don't
        call it unnecessarily, e.g. calling setBackgroundColor to the same
        color each frame should not retrigger more commits.

        * platform/graphics/chromium/GraphicsLayerChromium.cpp:
        (WebCore::GraphicsLayerChromium::setAnchorPoint):
        (WebCore::GraphicsLayerChromium::setTransform):
        (WebCore::GraphicsLayerChromium::setChildrenTransform):
        (WebCore::GraphicsLayerChromium::setMasksToBounds):
        (WebCore::GraphicsLayerChromium::setBackgroundColor):
        (WebCore::GraphicsLayerChromium::clearBackgroundColor):
        (WebCore::GraphicsLayerChromium::setContentsOpaque):
        (WebCore::GraphicsLayerChromium::setBackfaceVisibility):
        (WebCore::GraphicsLayerChromium::setOpacity):
        * platform/graphics/chromium/LayerChromium.cpp:
        (WebCore::LayerChromium::setNeedsCommit):
        (WebCore::LayerChromium::setAnchorPoint):
        (WebCore::LayerChromium::setAnchorPointZ):
        (WebCore::LayerChromium::setBackgroundColor):
        (WebCore::LayerChromium::setMasksToBounds):
        (WebCore::LayerChromium::setMaskLayer):
        (WebCore::LayerChromium::setOpacity):
        (WebCore::LayerChromium::setOpaque):
        (WebCore::LayerChromium::setPosition):
        (WebCore::LayerChromium::setSublayerTransform):
        (WebCore::LayerChromium::setTransform):
        (WebCore::LayerChromium::setScrollPosition):
        (WebCore::LayerChromium::setScrollable):
        (WebCore::LayerChromium::setDoubleSided):
        * platform/graphics/chromium/LayerChromium.h:
        (WebCore::LayerChromium::setReplicaLayer):
        * platform/graphics/chromium/NonCompositedContentHost.cpp:
        (WebCore::NonCompositedContentHost::notifySyncRequired):
        * platform/graphics/chromium/NonCompositedContentHost.h:

2011-12-05  Tony Chang  <tony@chromium.org>

        small refactor of RenderFlexibleBox
        https://bugs.webkit.org/show_bug.cgi?id=73854

        Reviewed by Darin Adler.

        No new tests, just a refactor.

        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::isLeftToRightFlow): Inline isReverseFlow since it's only used in one place.
        (WebCore::RenderFlexibleBox::layoutAndPlaceChildren): Rename startEdge
        to mainAxisOffset.  Rename logicalTop to crossAxisOffset.  Get rid of
        logicalLeft local variable since it's confusing.  Move shouldFlipMainAxis
        out of the for loop to avoid computing it each iteration.
        * rendering/RenderFlexibleBox.h:

2011-12-05  Florin Malita  <fmalita@google.com>

        Heap-buffer-overflow in WebCore::HTMLTreeBuilder::processEndTag
        https://bugs.webkit.org/show_bug.cgi?id=73765

        Reviewed by Adam Barth.

        Test: fast/parser/foreign-content-crash.html

        Use m_tree.currentNode() instead of m_tree.currentElement() as the top node is not always an Element.

        * html/parser/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::processEndTag):

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

        Allow the ImageBuffers used by SVG filters to be accelerated
        https://bugs.webkit.org/show_bug.cgi?id=73842

        Reviewed by Kenneth Russell.

        Regressions covered by existing SVG tests; new functionality to be
        tested by the API exposed on Internals.

        * page/Settings.cpp:
        (WebCore::Settings::Settings):
        * page/Settings.h:
        (WebCore::Settings::setAcceleratedFiltersEnabled):
        (WebCore::Settings::acceleratedFiltersEnabled):
        * platform/graphics/filters/FETile.cpp:
        (WebCore::FETile::platformApplySoftware):
        * platform/graphics/filters/Filter.h:
        (WebCore::Filter::Filter):
        (WebCore::Filter::renderingMode):
        (WebCore::Filter::setRenderingMode):
        * platform/graphics/filters/FilterEffect.cpp:
        (WebCore::FilterEffect::asImageBuffer):
        (WebCore::FilterEffect::createImageBufferResult):
        * platform/graphics/skia/ImageBufferSkia.cpp:
        (WebCore::ImageBuffer::platformTransformColorSpace):
        * rendering/svg/RenderSVGResourceClipper.cpp:
        (WebCore::RenderSVGResourceClipper::applyClippingToContext):
        * rendering/svg/RenderSVGResourceFilter.cpp:
        (WebCore::RenderSVGResourceFilter::applyResource):
        * rendering/svg/RenderSVGResourceMasker.cpp:
        (WebCore::RenderSVGResourceMasker::applyResource):
        * rendering/svg/RenderSVGResourcePattern.cpp:
        (WebCore::RenderSVGResourcePattern::createTileImage):
        * rendering/svg/SVGImageBufferTools.cpp:
        (WebCore::SVGImageBufferTools::createImageBuffer):
        * rendering/svg/SVGImageBufferTools.h:
        * testing/Internals.cpp:
        (WebCore::Internals::setAcceleratedFiltersEnabled):
        * testing/Internals.h:
        * testing/Internals.idl:

2011-12-05  Benjamin Poulain  <bpoulain@apple.com>

        Upstream htmlSelectMultipleItems needed for <select multiple> by iOS
        https://bugs.webkit.org/show_bug.cgi?id=73734

        Reviewed by David Kilzer.

        * platform/DefaultLocalizationStrategy.cpp:
        (WebCore::DefaultLocalizationStrategy::htmlSelectMultipleItems):
        * platform/DefaultLocalizationStrategy.h:

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

        Use HashMap<OwnPtr> in CrossOriginPreflightResultCache
        https://bugs.webkit.org/show_bug.cgi?id=73785

        Reviewed by Andreas Kling.

        * loader/CrossOriginPreflightResultCache.cpp:
        (WebCore::CrossOriginPreflightResultCache::appendEntry): Changed code to use set
        instead of add, since it wants to replace existing entries. Also removed leakPtr
        and removed the FIXME that documented the memory leak now fixed here.
        (WebCore::CrossOriginPreflightResultCache::canSkipPreflight): Removed unneeded
        std:: prefix here and also unneeded explicit delete call.
        (WebCore::CrossOriginPreflightResultCache::empty): Removed unneeded deleteAllValues
        call here.

        * loader/CrossOriginPreflightResultCache.h: Make mapped value of the
        CrossOriginPreflightResultHashMap be OwnPtr instead of raw pointer.

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

        Some small improvements to ContainerNode.h
        https://bugs.webkit.org/show_bug.cgi?id=73786

        Reviewed by Alexey Proskuryakov.

        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::suspendPostAttachCallbacks): Added a FIXME comment about the
        peculiar behavior of this function. Somehow the post-attach suspend state is both
        global and specific to a certain Page object. That can't be right. If it was truly
        global then this would be a static member function. If it was truly per-page, then
        the related functions could not be static.

        * dom/ContainerNode.h: Removed some unneeded argument names. Moved the hasChildNodes
        function up with the other basic getters. Put the other getters, childNodeCount and
        childNode, right after the basic getters. Used ASSERT_NO_EXCEPTION in all the basic
        mutation functions so they can be used in a cleaner fashion in C++ code where we have
        some reason to know an exception won't occur. Grouped all the overrides of functions
        from Node into a single paragraph and used the OVERRIDE macro on all of them. Made the
        queuePostAttachCallback and postAttachCallbacksAreSuspended functions protected.

        * dom/Element.h: Moved the include of ExceptionCodePlaceholder.h into ContainerNode.h.

        * dom/Node.cpp:
        (WebCore::Node::lazyAttach): Use hasChildNodes instead of firstChild for clarity.
        (WebCore::Node::isDescendantOf): Ditto.

2011-12-05  Benjamin Poulain  <benjamin@webkit.org>

        Get rid of KURL::KURL(ParsedURLStringTag, const char*);
        https://bugs.webkit.org/show_bug.cgi?id=73792

        Reviewed by Andreas Kling.

        In all cases where the constructor is used, the constructor
        taking a String is as effective because the string is valid and converted
        to String for m_string.

        This patch remove the constructor KURL::KURL(ParsedURLStringTag, const char*)
        and change the call sites that were using that constructor to build
        empty URLs.

        * dom/Document.cpp:
        (WebCore::Document::initSecurityContext):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::init):
        * loader/archive/cf/LegacyWebArchive.cpp:
        (WebCore::LegacyWebArchive::create):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::createWindow):
        * platform/KURL.cpp:
        * platform/KURL.h:
        * platform/KURLGoogle.cpp:

2011-12-05  Benjamin Poulain  <benjamin@webkit.org>

        Remove methods declared but never implemented with GOOGLEURL
        https://bugs.webkit.org/show_bug.cgi?id=73795

        Reviewed by Adam Barth.

        * platform/KURL.h:

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

        Change CSSFontSelector to use HashMap<OwnPtr>
        https://bugs.webkit.org/show_bug.cgi?id=73781

        Reviewed by Dan Bernstein.

        * css/CSSFontSelector.cpp:
        (WebCore::CSSFontSelector::~CSSFontSelector): Removed calls to deleteAllValues.
        (WebCore::CSSFontSelector::addFontFaceRule): Updated to use OwnPtr instead of raw
        pointer for the entry in m_fontFaces and m_locallyInstalledFontFaces.
        (WebCore::CSSFontSelector::getFontData): Updated to use OwnPtr instead of raw
        pointer for the entry in m_fonts. Also removed an unneeded std:: prefix.

        * css/CSSFontSelector.h: Made m_fontFaces, m_locallyInstalledFontFaces, and m_fonts
        be HashMap<OwnPtr>.

2011-12-05  Adam Klein  <adamk@chromium.org>

        V8RecursionScope should call didLeaveScriptContext when recursionLevel reaches zero
        https://bugs.webkit.org/show_bug.cgi?id=73867

        Reviewed by Adam Barth.

        Moved V8RecursionScope into its own file, and moved
        V8Proxy::didLeaveScriptContext into that file, along with a static
        recursionLevel accessor, hiding the V8BindingPerIsolateData methods
        from V8Proxy.

        This will make it easy and less error-prone to use V8RecursionScope
        properly. I plan to make use of it in V8LazyEventListener to fix
        https://bugs.webkit.org/show_bug.cgi?id=73492.

        No new tests, refactoring only.

        * Target.pri:
        * UseV8.cmake:
        * WebCore.gypi:
        * bindings/v8/V8Binding.h:
        (WebCore::V8BindingPerIsolateData::incrementRecursionLevel): return the new recursion level.
        (WebCore::V8BindingPerIsolateData::decrementRecursionLevel): return the new recursion level.
        * bindings/v8/V8Proxy.cpp: remove didLeaveScriptContext.
        (WebCore::V8Proxy::runScript): remove explicit call to didLeaveScriptContext.
        (WebCore::V8Proxy::instrumentedCallFunction): remove explicit call to didLeaveScriptContext.
        * bindings/v8/V8Proxy.h: remove didLeaveScriptContext.
        * bindings/v8/V8RecursionScope.cpp: Added.
        (WebCore::V8RecursionScope::didLeaveScriptContext): copied from V8Proxy.cpp.
        * bindings/v8/V8RecursionScope.h: Added.
        (WebCore::V8RecursionScope::V8RecursionScope):
        (WebCore::V8RecursionScope::~V8RecursionScope):
        (WebCore::V8RecursionScope::recursionLevel):

2011-12-05  Benjamin Poulain  <bpoulain@apple.com>

        Build fix for SecurityOrigin.cpp when neither BLOB nor FILE_SYSTEM are defined

        Reviewed by David Kilzer.

        When neither BLOB nor FILE_SYSTEM are defined, the parameter is unused.

        * page/SecurityOrigin.cpp:
        (WebCore::shouldUseInnerURL):

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

        Change RuleSet to use HashMap<OwnPtr>
        https://bugs.webkit.org/show_bug.cgi?id=73783

        Reviewed by Andreas Kling.

        * css/CSSStyleSelector.cpp: Make RuleSet::AtomRuleMap use OwnPtr for the mapped values.
        (WebCore::RuleSet::addToRuleSet): Use add instead of get/set to set up a new entry in the
        map or find the old entry in the map.

2011-12-05  Mario Sanchez Prada  <msanchez@igalia.com>

        [GTK] Move emissions of AtkDocument signals down to WebCore
        https://bugs.webkit.org/show_bug.cgi?id=73750

        Reviewed by Chris Fleizach.

        Implement the needed infrastructure to allow notifying
        accessibility, in a cross-platform way, when a event related to
        the load of a document happens. Added a generic method, which will
        be called from the FrameLoader, and platform specific versions of
        it so every port has a chance to decide what to do with those
        notifications.

        This patch doesn't include a new test because the one testing this
        functionality is the GTK-specific unit test added along with patch
        for bug 73746: testWebkitAtkDocumentLoadingEvents.

        * accessibility/AXObjectCache.h:
        (WebCore::AXObjectCache::frameLoadingEventNotification): New, called
        from the FrameLoader to notify accessibility when an event happens.
        (WebCore::AXObjectCache::frameLoadingEventPlatformNotification): New,
        platform specific function to let ports decide what to do.
        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::frameLoadingEventNotification): New.
        * accessibility/chromium/AXObjectCacheChromium.cpp:
        (WebCore::AXObjectCache::frameLoadingEventPlatformNotification): Dummy
        implementation of the platform specific function for chromium.
        * accessibility/gtk/AXObjectCacheAtk.cpp:
        (WebCore::AXObjectCache::frameLoadingEventPlatformNotification):
        * accessibility/mac/AXObjectCacheMac.mm:
        (WebCore::AXObjectCache::frameLoadingEventPlatformNotification): Dummy
        implementation of the platform specific function for the Mac.
        * accessibility/win/AXObjectCacheWin.cpp:
        (WebCore::AXObjectCache::frameLoadingEventPlatformNotification): Dummy
        implementation of the platform specific function for Windows.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::prepareForLoadStart): Notify accessibility
        by calling the new frameLoadingEventNotification() function.
        (WebCore::FrameLoader::checkLoadCompleteForThisFrame): Ditto.

2011-12-05  Benjamin Poulain  <benjamin@webkit.org>

        Update String::containsOnlyASCII() to handle 8 bits strings
        https://bugs.webkit.org/show_bug.cgi?id=73799

        Reviewed by Darin Adler.

        When possible, change the call sites from charactersAreAllASCII()
        to the optimized version String::containsOnlyASCII().

        * platform/KURL.cpp:
        (WebCore::KURL::init):
        * platform/cf/BinaryPropertyList.cpp:
        (WebCore::BinaryPropertyListPlan::writeStringObject):
        * platform/graphics/chromium/FontCacheChromiumWin.cpp:
        (WebCore::FontCodepage::if):

2011-12-01  Vangelis Kokkevis  <vangelis@chromium.org>

        [chromium] Use ANGLE's texture_usage and texture_storage extensions when allocating compositor textures
        https://bugs.webkit.org/show_bug.cgi?id=73621

        When the extensions are available, compositor textures are allocated via
        glTexStorage2DEXT instead of glTexImage2D to eliminate creation of unnecessary
        mip levels on the service side. In addition, the GL_FRAMEBUFFER_ATTACHMENT_ANGLE
        is specified for all textures used by RenderSurfaces to eliminate the need for
        a system memory bitmap allocation.

        Reviewed by Kenneth Russell.

        * platform/graphics/chromium/Extensions3DChromium.h:
        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::initialize):
        (WebCore::LayerRendererChromium::initializeSharedObjects):
        * platform/graphics/chromium/TrackingTextureAllocator.cpp:
        (WebCore::TrackingTextureAllocator::TrackingTextureAllocator):
        (WebCore::textureToStorageFormat):
        (WebCore::isTextureFormatSupportedForStorage):
        (WebCore::TrackingTextureAllocator::createTexture):
        * platform/graphics/chromium/TrackingTextureAllocator.h:
        (WebCore::TrackingTextureAllocator::setTextureUsageHint):
        (WebCore::TrackingTextureAllocator::setUseTextureStorageExt):
        * platform/graphics/chromium/cc/CCLayerTreeHost.h:
        (WebCore::LayerRendererCapabilities::LayerRendererCapabilities):

2011-12-05  Chris Fleizach  <cfleizach@apple.com>

        AX: aria-hidden doesn't work on iframe elements
        https://bugs.webkit.org/show_bug.cgi?id=73857

        Reviewed by Darin Adler.

        Test: platform/mac/accessibility/iframe-aria-hidden.html

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::addAttachmentChildren):
        (WebCore::AccessibilityRenderObject::addChildren):
        * accessibility/AccessibilityRenderObject.h:
        * accessibility/AccessibilityScrollView.cpp:
        (WebCore::AccessibilityScrollView::accessibilityIsIgnored):
        (WebCore::AccessibilityScrollView::addChildren):
        * accessibility/AccessibilityScrollView.h:

2011-12-05  Chris Fleizach  <cfleizach@apple.com>

        AX: web search mechanism does not work with frames
        https://bugs.webkit.org/show_bug.cgi?id=73836

        Reviewed by Beth Dakin.

        This allows searching for, and within, frames for elements using the accessibility
        search mechanism.

        Test: platform/mac/accessibility/search-with-frames.html

        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::isAccessibilityObjectSearchMatch):
        (WebCore::appendAccessibilityObject):
        (WebCore::appendChildrenToArray):

2011-12-05  Anders Carlsson  <andersca@apple.com>

        Make LayerFlushSchedulerClient::flushLayers indicate whether the flush was successful or not
        https://bugs.webkit.org/show_bug.cgi?id=73862

        Reviewed by Andy Estes.

        Change LayerFlushSchedulerClient::flushLayers to return a boolean. If it returns true, the flush was
        successful and the run loop observer will be invalidated.

        * platform/graphics/ca/LayerFlushScheduler.h:
        * platform/graphics/ca/LayerFlushSchedulerClient.h:
        * platform/graphics/ca/mac/LayerFlushSchedulerMac.cpp:
        (WebCore::LayerFlushScheduler::runLoopObserverCallback):

2011-12-05  Dana Jansens  <danakj@chromium.org>

        [chromium] Set opaque flag for ImageLayerChromium
        https://bugs.webkit.org/show_bug.cgi?id=72964

        Reviewed by James Robinson.

        New unit test in tests/ImageLayerChromiumTest.cpp.

        * platform/graphics/chromium/GraphicsLayerChromium.cpp:
        (WebCore::GraphicsLayerChromium::setContentsToImage):
        * platform/graphics/chromium/GraphicsLayerChromium.h:
        (WebCore::GraphicsLayerChromium::contentsLayer):
        * platform/graphics/chromium/ImageLayerChromium.cpp:
        (WebCore::ImageLayerChromium::setContents):

2011-12-05  Julien Chaffraix  <jchaffraix@webkit.org>

        TD width in precentage doesn't work.
        https://bugs.webkit.org/show_bug.cgi?id=34758

        Reviewed by David Hyatt.

        Test: fast/table/colspan-with-all-percent-cells.html

        * rendering/AutoTableLayout.cpp:
        (WebCore::AutoTableLayout::calcEffectiveLogicalWidth):
        In the case where all our columns have percent lengths, split the colspan
        logical width using the percentages from the lengths. This should be properly
        handled by the massive 'else' case but it is not and I did not feel like refactor
        that due to massive compatibility issues that would arise.

2011-12-05  Chris Fleizach  <cfleizach@apple.com>

        platform/mac/accessibility/search-when-element-starts-in-table.html is failing
        https://bugs.webkit.org/show_bug.cgi?id=73751

        When encountering a table, the rows() and not the cells() should be queried (otherwise
        we can end up finding the element we started with).

        When searching in reverse, we also need to account for searching elements within the
        parent hierarchy. because technically it is "behind" the start element.

        Reviewed by Darin Adler.

        * accessibility/AccessibilityObject.cpp:
        (WebCore::appendChildrenToArray):
        (WebCore::AccessibilityObject::objectMatchesSearchCriteriaWithResultLimit):
        (WebCore::AccessibilityObject::findMatchingObjects):
        * accessibility/AccessibilityObject.h:

2011-12-02  Jer Noble  <jer.noble@apple.com>

        <video> elements should disable the system and display sleep when playing on OS X.
        https://bugs.webkit.org/show_bug.cgi?id=73730
        <rdar://problem/9502155>

        Reviewed by Alexey Proskuryakov.

        No new tests; platform specific system behavior only.

        Create a new DisplaySleepDisabler object when the playback rate becomes non-zero, and destroy
        that object when the playback rate drops back to zero.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::mediaPlayerRateChanged):
        * html/HTMLMediaElement.h:

2011-12-05  Peter Beverloo  <peter@chromium.org>

        [Chromium] Add Android keycodes and build Linux clipboard/filesystem files.
        https://bugs.webkit.org/show_bug.cgi?id=73672

        Add the KeyCodeConversionAndroid.cpp file, which is a partial re-land
        of an older file from the Android port:
        http://trac.webkit.org/browser/trunk/WebCore/platform/android/KeyEventAndroid.cpp?rev=56704

        Add IconChromiumAndroid.cpp which nullifies the rendering of icons in
        file upload boxes, which is not something we want to support now. Also
        include ClipboardChromiumLinux.cpp and FileSystemChromiumLinux.cpp
        as their functionality can be re-used for Android.

        Reviewed by Adam Barth.

        * WebCore.gyp/WebCore.gyp:
        * WebCore.gypi:
        * platform/chromium/KeyCodeConversionAndroid.cpp: Added.
        (WebCore::windowsKeyCodeForKeyEvent):
        * platform/graphics/chromium/IconChromiumAndroid.cpp: Added.
        (WebCore::Icon::Icon):
        (WebCore::Icon::~Icon):
        (WebCore::Icon::paint):

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

        Reviewed by Sam Weinig.

        On Windows, filenames not properly preserved when copied into a file list exposed by Event.dataTransfer
        https://bugs.webkit.org/show_bug.cgi?id=73841
        <rdar://problem/10521879>

        No test since repro case involves dropping a file onto the WebView.
        
        Calling characters() explicitly causes a non-terminated string buffer to get passed back
        to the String() constructor that expects a terminated buffer. The characters() call isn't
        necessary at all, since we have a String and the method we're calling expects a String.

        * platform/win/ClipboardWin.cpp:
        (WebCore::ClipboardWin::files): Remove characters() since it doesn't null terminate.

2011-12-05  Timothy Hatcher  <timothy@apple.com>

        Keep both InspectorBackend.js and InspectorBackendStub.js in Release builds after
        they have been combined into inspector.js.

        The InspectorBackend.js file split out of the generated InspectorBackendStub.js
        in r101670, and both files are needed to be useful.

        https://webkit.org/b/73839

        Reviewed by Joseph Pecoraro and Brian Weinstein.

        * WebCore.xcodeproj/project.pbxproj: Pass -not -name "InspectorBackend*.js" to find
        instead of -not -name InspectorBackendStub.js.

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

        Web Inspector: [Chromium] Heap profiler should designate weak references.
        https://bugs.webkit.org/show_bug.cgi?id=69948

        Weak references are now ignored when tracing paths to GC roots.

        Reviewed by Yury Semikhatsky.

        * inspector/front-end/HeapSnapshot.js:
        (WebInspector.HeapSnapshotEdge.prototype.get isWeak):
        (WebInspector.HeapSnapshotEdge.prototype.toString):
        (WebInspector.HeapSnapshotEdge.prototype.get _hasStringName):
        (WebInspector.HeapSnapshotRetainerEdge.prototype.get isWeak):
        (WebInspector.HeapSnapshot.prototype._init):
        (WebInspector.HeapSnapshotPathFinder.prototype._fillRootChildren):
        (WebInspector.HeapSnapshotPathFinder.prototype._skipEdge):

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

        Unreviewed, rolling out r102004.
        http://trac.webkit.org/changeset/102004
        https://bugs.webkit.org/show_bug.cgi?id=73835

        Breaks qt minimal release compilation (Requested by vsevik on
        #webkit).

        * inspector/CodeGeneratorInspector.py:
        (Capitalizer.upper_camel_case_to_lower):
        (RawTypes.get):
        (RawTypes.String.get_c_param_type):
        (RawTypes.Object.get_c_param_type):
        (RawTypes.Object):
        (ParamType):
        (TypeData.__init__):
        (TypeData.get_raw_type):
        (TypeMap.__init__):
        (InspectorFrontend_h):
        (InspectorArray):
        (InspectorObject):
        (String):
        (InspectorBackendDispatcher_h):
        (Generator.process_command):
        * inspector/InspectorValues.h:

2011-12-05  Peter Rybin  <peter.rybin@gmail.com>

        Web Inspector: [protocol] generate C++ classes for protocol JSON named types
        https://bugs.webkit.org/show_bug.cgi?id=72835

        Reviewed by Yury Semikhatsky.

        Extends python generator functionality.
        Makes constructor in InspectorObject public.

        * inspector/CodeGeneratorInspector.py:
        * inspector/InspectorValues.h:

2011-12-05  Pavel Podivilov  <podivilov@chromium.org>

        Web Inspector: fix fronted compilation.
        https://bugs.webkit.org/show_bug.cgi?id=73831

        Reviewed by Yury Semikhatsky.

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

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

        Out-of-band text tracks may only load from same origin as the media element's Document's origin
        https://bugs.webkit.org/show_bug.cgi?id=73184

        Reviewed by Sam Weinig.

        Test: http/tests/security/text-track-crossorigin.html

        * html/HTMLTrackElement.cpp:
        (WebCore::urlForLogging): Debug-only function for logging urls.
        (WebCore::HTMLTrackElement::scheduleLoad): Call canLoadUrl() before passing control off to
            the Track.
        (WebCore::HTMLTrackElement::canLoadUrl): Don't ask HTMLMediaElement to validate the url, the
            requirements for <track> are different from <video>.
        (WebCore::HTMLTrackElement::didCompleteLoad): Change bool param to enum.
        (WebCore::HTMLTrackElement::mediaElementCrossOriginAttribute): New, return parent 'crossorigin' 
            attribute value.
        * html/HTMLTrackElement.h:

        * html/LoadableTextTrack.cpp:
        (WebCore::LoadableTextTrack::scheduleLoad): Add comments from the spec.
        (WebCore::LoadableTextTrack::loadTimerFired): Always cancel pending loads. Let the caller know 
            if the loader refuses the url immediately.
        (WebCore::LoadableTextTrack::cueLoadingStarted): The <track> deals with readyState.
        (WebCore::LoadableTextTrack::cueLoadingCompleted): HTMLTrackElement::didCompleteLoad takes
            an enum, not a bool.

        * loader/TextTrackLoader.cpp:
        (WebCore::TextTrackLoader::corsPolicyPreventedLoad): New, log the error and set m_state.
        (WebCore::TextTrackLoader::notifyFinished): Check for CORS failure.
        (WebCore::TextTrackLoader::load): Take media element cross-origin attribute as a param so we
            can make the correct checks.
        * loader/TextTrackLoader.h:

2011-12-05  Roland Steiner  <rolandsteiner@chromium.org>

        "Raw" pseudo selectors don't match if immediately after a child or descendant combinator
        https://bugs.webkit.org/show_bug.cgi?id=72933

        Remove shortcut that prevents universal selectors from being created before shadow pseudo-elements.

        Reviewed by Antti Koivisto.

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

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

        Unreviewed, rolling out r101983.
        http://trac.webkit.org/changeset/101983
        https://bugs.webkit.org/show_bug.cgi?id=73827

        It broke all tests on GTK and on Qt in debug mode (Requested
        by Ossy on #webkit).

        * dom/Document.h:
        (WebCore::Node::Node):
        * dom/Node.cpp:
        (WebCore::Node::~Node):
        * dom/Node.h:
        (WebCore::Node::inDocument):

2011-12-05  Roland Steiner  <rolandsteiner@chromium.org>

        <style scoped>: Add 'scoped' attribute
        https://bugs.webkit.org/show_bug.cgi?id=67718

        Add 'scoped' attribute to IDL and attribute list,
        implement and test setting/resetting of the attribute.

        Reviewed by Antti Koivisto.

        Test: fast/css/style-scoped/basic-attribute.html

        * html/HTMLAttributeNames.in:
        * html/HTMLStyleElement.cpp:
        (WebCore::HTMLStyleElement::scoped):
        (WebCore::HTMLStyleElement::setScoped):
        (WebCore::HTMLStyleElement::scopingElement):
        * html/HTMLStyleElement.h:
        * html/HTMLStyleElement.idl:

2011-12-05  Hajime Morrita  <morrita@chromium.org>

        [Refactoring] Accessing Node::m_document should be minimized.
        https://bugs.webkit.org/show_bug.cgi?id=73800

        Reviewed by Kent Tamura.

        No new tests. No behavioral change.

        Replaced m_document reference with the document() accessor
        or temporaril variables. This is a preparation for using
        m_document space to point a shadow root pointer.

        * dom/Document.h:
        (WebCore::Node::Node):
        * dom/Node.cpp:
        (WebCore::Node::~Node):
        * dom/Node.h:
        (WebCore::Node::inDocument):

2011-12-05  Shinya Kawanaka  <shinyak@google.com>

        Asynchronous SpellChecker should consider multiple requests.
        https://bugs.webkit.org/show_bug.cgi?id=72939

        Reviewed by Hajime Morita.

        Now SpellChecker saves a request when it is processing the previous spellcheck request.
        If there is a request having the same root editable element, the older request is replaced by newer request

        Test: editing/spelling/spellcheck-queue.html

        * editing/SpellChecker.cpp:
        (WebCore::SpellChecker::SpellCheckRequest::SpellCheckRequest):
          A structure to have spell check request.
        (WebCore::SpellChecker::SpellCheckRequest::sequence):
        (WebCore::SpellChecker::SpellCheckRequest::range):
        (WebCore::SpellChecker::SpellCheckRequest::text):
        (WebCore::SpellChecker::SpellCheckRequest::mask):
        (WebCore::SpellChecker::SpellCheckRequest::rootEditableElement):
        (WebCore::SpellChecker::SpellChecker):
        (WebCore::SpellChecker::createRequest):
        (WebCore::SpellChecker::timerFiredToProcessQueuedRequest):
          When timer is fired, queued request is processed if any.
        (WebCore::SpellChecker::canCheckAsynchronously):
        (WebCore::SpellChecker::requestCheckingFor):
          When the spellchecker is processing another request, the latest request is queued.
        (WebCore::SpellChecker::invokeRequest):
        (WebCore::SpellChecker::enqueueRequest):
          Enqueues a request. If there is an older request whose root editable element is the same as the request,
          it will be replaced.
        (WebCore::SpellChecker::didCheck):
        * editing/SpellChecker.h:

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

        WebCore part of: Add WebKit preferences for text track settings
        https://bugs.webkit.org/show_bug.cgi?id=73721

        Reviewed by John Sullivan.

        No new tests yet, still nothing to test.

        * page/Settings.cpp:
        (WebCore::Settings::setShouldDisplaySubtitles): Move the setters to the .cpp file so they
            aren't inlined.
        (WebCore::Settings::setShouldDisplayCaptions): Ditto.
        (WebCore::Settings::setShouldDisplayTextDescriptions): Ditto.
        * page/Settings.h:

2011-12-05  Noel Gordon  <noel.gordon@gmail.com>

        ImageDecoder setSize() should check for backing store allocation failure
        https://bugs.webkit.org/show_bug.cgi?id=72864

        Reviewed by Adam Barth.

        The backing store of a decoded image is a Vector<PixelData> on the affected
        ports. And Vector<> provides a resize capacity member that returns false if
        memory allocation fails.

        setSize() should be called once only during an image decode - add an ASSERT
        for that. Resize the backing store capacity to the requested image size and
        return false if memory allocation fails.

        ImageDecoder::isOverSize(width, height) is called to check that the decoded
        width and height won't overflow 'width x height x sizeof(PixelData)' before
        calls to setSize(). Refer to http://webkit.org/b/48634

        No new tests. Covered by fast/images/size-failure.html

        * platform/image-decoders/ImageDecoder.cpp:
        (WebCore::ImageFrame::setSize):

2011-12-04  Andreas Kling  <kling@webkit.org>

        CSSStyleSheet can't be reparented, enforce this at compile time.
        <http://webkit.org/b/73793>

        Reviewed by Benjamin Poulain.

        * css/StyleSheet.h:
        (WebCore::StyleSheet::clearOwnerRule):

            Changed setParentRule(CSSImportRule*) to clearOwnerRule() to document and
            enforce the fact that style sheets should never be reparented after creation.

        (WebCore::StyleSheet::ownerRule):

            Renamed parentRule() to ownerRule() to match the CSSOM name.

        (WebCore::StyleSheet::ownerNode):
        (WebCore::StyleSheet::clearOwnerNode):

            Also renamed StyleSheet::m_parentNode to m_ownerNode to match its accessors.

        * css/CSSStyleSheet.h:

            Removed ownerRule() as we now inherit it from StyleSheet.

        * bindings/js/JSDOMBinding.h:
        (WebCore::root):
        * css/CSSImportRule.cpp:
        (WebCore::CSSImportRule::~CSSImportRule):
        (WebCore::CSSImportRule::setCSSStyleSheet):
        * css/StyleSheet.cpp:
        (WebCore::StyleSheet::StyleSheet):
        (WebCore::StyleSheet::parentStyleSheet):
        (WebCore::StyleSheet::baseURL):
        * inspector/InspectorStyleSheet.cpp:
        (WebCore::fillMediaListChain):

            Update call sites to use the new names.

2011-12-04  Andreas Kling  <kling@webkit.org>

        border-width: initial and border-color: initial cannot be removed via CSSOM.
        <http://webkit.org/b/68551>

        Reviewed by Darin Adler.

        Test: fast/css/cssom-remove-shorthand-property.html

        When asked to remove a shorthand property, we should toss out both the
        sub-properties of that shorthand as well as the shorthand itself, should the
        declaration contain it. The latter part was missing in our implementation.

        * css/CSSMutableStyleDeclaration.h:
        * css/CSSMutableStyleDeclaration.cpp:
        (WebCore::CSSMutableStyleDeclaration::removePropertiesInSet):
        (WebCore::CSSMutableStyleDeclaration::removeShorthandProperty):

            Changed to return true only if something was actually removed.

2011-12-04  Ryosuke Niwa  <rniwa@webkit.org>

        HIERARCHY_REQUEST_ERR check in checkAcceptChild should be optimized for newChild without children
        https://bugs.webkit.org/show_bug.cgi?id=73737

        Reviewed by Darin Adler.

        It turned out that 50-70% of nodes inserted by DOM APIs such as insertBefore and appendChild
        don't have any descendent nodes. Optimize isDescendantOf which is used by checkAcceptChild for this case.
        On a test case attached on the bug, we see a 40% improvement.

        Also optimize for cases where either new child or new parent but not both are in document as suggested
        by Erik Arvidsson. This appears to happen about 40-70% of the time, and the symmetric difference between
        the two cases is about 50% so it's worth implementing both optimizations.

        Unfortunately no tests because we still have a O(n) algorithm somewhere.

        * dom/Node.cpp:
        (WebCore::Node::isDescendantOf):
        (WebCore::Node::contains):

2011-12-04  Andreas Kling  <kling@webkit.org>

        CSSValuePool: Inline trivial getters.
        <http://webkit.org/b/73763>

        Reviewed by Anders Carlsson.

        * css/CSSValuePool.cpp:
        * css/CSSValuePool.h:
        (WebCore::CSSValuePool::createInheritedValue): Inlined.
        (WebCore::CSSValuePool::createImplicitInitialValue): Ditto.
        (WebCore::CSSValuePool::createExplicitInitialValue): Ditto.

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

        Fix WebPImageDecoder decoder leak.
        https://bugs.webkit.org/show_bug.cgi?id=73756

        Reviewed by Andreas Kling.

        Delete the m_decoder member in the destructor if needed with WebPIDelete.

        No new tests, it's valgrind territory.

        * platform/image-decoders/webp/WEBPImageDecoder.cpp:
        (WebCore::WEBPImageDecoder::~WEBPImageDecoder):

2011-12-03  Andreas Kling  <kling@webkit.org>

        CSSStyleSheet: Parent rule can only ever be @import, enforce this at compile time.
        <http://webkit.org/b/73725>

        Reviewed by Darin Adler.

        Made StyleSheet::m_parentRule a CSSImportRule* rather than a CSSRule*
        and updated getters, setters and constructors accordingly.

        There is no change in behavior, this simply enforces the status quo.

        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSDOMBinding.h:
        * bindings/scripts/CodeGeneratorV8.pm:
        (AddIncludesForType):
        * css/CSSStyleSheet.cpp:
        (WebCore::CSSStyleSheet::CSSStyleSheet):
        * css/CSSStyleSheet.h:
        (WebCore::CSSStyleSheet::create):
        (WebCore::CSSStyleSheet::ownerRule):
        * css/StyleSheet.cpp:
        (WebCore::StyleSheet::StyleSheet):
        * css/StyleSheet.h:
        (WebCore::StyleSheet::parentRule):
        (WebCore::StyleSheet::setParentRule):

2011-12-03  Andreas Kling  <kling@webkit.org>

        Unreviewed, revert accidental change from r101932.

        * bindings/scripts/CodeGeneratorV8.pm:
        (AddIncludesForType):

2011-12-03  Mary Wu  <mary.wu@torchmobile.com.cn>

        Upstream 4 files into WebCore/platform/blackberry
        https://bugs.webkit.org/show_bug.cgi?id=73614

        Reviewed by Eric Seidel.

        * platform/blackberry/CursorBlackBerry.cpp: Added.
        (WebCore::AllCursors::AllCursors):
        (WebCore::getCursor):
        (WebCore::Cursor::Cursor):
        (WebCore::Cursor::~Cursor):
        (WebCore::Cursor::operator=):
        (WebCore::aliasCursor):
        (WebCore::cellCursor):
        (WebCore::columnResizeCursor):
        (WebCore::contextMenuCursor):
        (WebCore::copyCursor):
        (WebCore::crossCursor):
        (WebCore::eastResizeCursor):
        (WebCore::eastWestResizeCursor):
        (WebCore::grabbingCursor):
        (WebCore::grabCursor):
        (WebCore::handCursor):
        (WebCore::helpCursor):
        (WebCore::iBeamCursor):
        (WebCore::moveCursor):
        (WebCore::noDropCursor):
        (WebCore::noneCursor):
        (WebCore::northEastResizeCursor):
        (WebCore::northEastSouthWestResizeCursor):
        (WebCore::northResizeCursor):
        (WebCore::northSouthResizeCursor):
        (WebCore::northWestResizeCursor):
        (WebCore::northWestSouthEastResizeCursor):
        (WebCore::notAllowedCursor):
        (WebCore::pointerCursor):
        (WebCore::progressCursor):
        (WebCore::rowResizeCursor):
        (WebCore::southEastResizeCursor):
        (WebCore::southResizeCursor):
        (WebCore::southWestResizeCursor):
        (WebCore::verticalTextCursor):
        (WebCore::waitCursor):
        (WebCore::westResizeCursor):
        (WebCore::zoomInCursor):
        (WebCore::zoomOutCursor):
        (WebCore::middlePanningCursor):
        (WebCore::eastPanningCursor):
        (WebCore::northPanningCursor):
        (WebCore::northEastPanningCursor):
        (WebCore::northWestPanningCursor):
        (WebCore::southPanningCursor):
        (WebCore::southEastPanningCursor):
        (WebCore::southWestPanningCursor):
        (WebCore::westPanningCursor):
        * platform/blackberry/DragDataBlackBerry.cpp: Added.
        (WebCore::DragData::canSmartReplace):
        (WebCore::DragData::containsColor):
        (WebCore::DragData::containsCompatibleContent):
        (WebCore::DragData::containsFiles):
        (WebCore::DragData::containsPlainText):
        (WebCore::DragData::containsURL):
        (WebCore::DragData::asFilenames):
        (WebCore::DragData::asColor):
        (WebCore::DragData::asPlainText):
        (WebCore::DragData::asURL):
        (WebCore::DragData::asFragment):
        * platform/blackberry/DragImageBlackBerry.cpp: Added.
        (WebCore::createDragImageFromImage):
        (WebCore::createDragImageIconForCachedImage):
        (WebCore::deleteDragImage):
        (WebCore::dissolveDragImageToFraction):
        (WebCore::scaleDragImage):
        (WebCore::dragImageSize):
        * platform/blackberry/EventLoopBlackBerry.cpp: Added.
        (WebCore::EventLoop::platformInit):
        (WebCore::EventLoop::cycle):

2011-12-03  Andreas Kling  <kling@webkit.org>

        Cache CSSInitialValue instances per-document.
        <http://webkit.org/b/73745>

        Reviewed by Oliver Hunt.

        Test: http/tests/security/cross-origin-css-primitive.html

        Have CSSValuePool manage the caching of CSSInitialValue objects.

        * css/CSSInitialValue.h:
        (WebCore::CSSInitialValue::createExplicit):
        (WebCore::CSSInitialValue::createImplicit):
        (WebCore::CSSInitialValue::CSSInitialValue):
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):
        (WebCore::CSSParser::parseFillShorthand):
        (WebCore::CSSParser::parseAnimationShorthand):
        (WebCore::CSSParser::parseTransitionShorthand):
        (WebCore::CSSParser::parseShorthand):
        * css/CSSValuePool.cpp:
        (WebCore::CSSValuePool::CSSValuePool):
        (WebCore::CSSValuePool::createImplicitInitialValue):
        (WebCore::CSSValuePool::createExplicitInitialValue):
        * css/CSSValuePool.h:

2011-12-03  Andreas Kling  <kling@webkit.org>

        Keep CSSInheritedValue in the CSS value pool.
        <http://webkit.org/b/73747>

        Reviewed by Antti Koivisto.

        We only need one CSSInheritedValue instance per document, so cache it
        in CSSValuePool and have the parser create it through there.

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):
        * css/CSSValuePool.cpp:
        (WebCore::CSSValuePool::CSSValuePool):
        (WebCore::CSSValuePool::createInheritedValue):
        * css/CSSValuePool.h:

2011-12-03  Andreas Kling  <kling@webkit.org>

        Rename CSSPrimitiveValueCache to CSSValuePool.
        <http://webkit.org/b/73742>

        Reviewed by Antti Koivisto.

        CSSPrimitiveValueCache -> CSSValuePool
        Document::primitiveValueCache() -> Document::cssValuePool()

        This is in preparation for sharing more than just primitive values.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/scripts/CodeGeneratorV8.pm:
        (AddIncludesForType):
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::valueForNinePieceImageSlice):
        (WebCore::valueForNinePieceImageQuad):
        (WebCore::valueForNinePieceImageRepeat):
        (WebCore::valueForNinePieceImage):
        (WebCore::zoomAdjustedPixelValue):
        (WebCore::zoomAdjustedNumberValue):
        (WebCore::zoomAdjustedPixelValueForLength):
        (WebCore::valueForReflection):
        (WebCore::getPositionOffsetValue):
        (WebCore::CSSComputedStyleDeclaration::currentColorOrValidColor):
        (WebCore::getBorderRadiusCornerValue):
        (WebCore::computedTransform):
        (WebCore::CSSComputedStyleDeclaration::valueForFilter):
        (WebCore::valueForGridTrackList):
        (WebCore::getDelayValue):
        (WebCore::getDurationValue):
        (WebCore::createLineBoxContainValue):
        (WebCore::CSSComputedStyleDeclaration::getFontSizeCSSValuePreferringKeyword):
        (WebCore::CSSComputedStyleDeclaration::valueForShadow):
        (WebCore::valueForFamily):
        (WebCore::renderTextDecorationFlagsToCSSValue):
        (WebCore::fillRepeatToCSSValue):
        (WebCore::fillSizeToCSSValue):
        (WebCore::contentToCSSValue):
        (WebCore::counterToCSSValue):
        (WebCore::fontFamilyFromStyle):
        (WebCore::lineHeightFromStyle):
        (WebCore::fontSizeFromStyle):
        (WebCore::fontStyleFromStyle):
        (WebCore::fontVariantFromStyle):
        (WebCore::fontWeightFromStyle):
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        * css/CSSParser.cpp:
        (WebCore::parseColorValue):
        (WebCore::parseSimpleLengthValue):
        (WebCore::CSSParser::setStyleSheet):
        (WebCore::CSSParser::createPrimitiveNumericValue):
        (WebCore::CSSParser::createPrimitiveStringValue):
        (WebCore::CSSParser::parseValidPrimitive):
        (WebCore::CSSParser::parseValue):
        (WebCore::parseBackgroundClip):
        (WebCore::CSSParser::parseFillShorthand):
        (WebCore::CSSParser::parsePage):
        (WebCore::CSSParser::parseSizeParameter):
        (WebCore::CSSParser::parseContent):
        (WebCore::CSSParser::parseAttr):
        (WebCore::CSSParser::parseBackgroundColor):
        (WebCore::CSSParser::parseFillPositionX):
        (WebCore::CSSParser::parseFillPositionY):
        (WebCore::CSSParser::parseFillPositionComponent):
        (WebCore::CSSParser::parseFillPosition):
        (WebCore::CSSParser::parseFillRepeat):
        (WebCore::CSSParser::parseFillSize):
        (WebCore::CSSParser::parseFillProperty):
        (WebCore::CSSParser::parseAnimationDirection):
        (WebCore::CSSParser::parseAnimationFillMode):
        (WebCore::CSSParser::parseAnimationIterationCount):
        (WebCore::CSSParser::parseAnimationName):
        (WebCore::CSSParser::parseAnimationPlayState):
        (WebCore::CSSParser::parseAnimationProperty):
        (WebCore::CSSParser::parseAnimationTimingFunction):
        (WebCore::CSSParser::parseGridTrackList):
        (WebCore::CSSParser::parseDashboardRegions):
        (WebCore::CSSParser::parseCounterContent):
        (WebCore::CSSParser::parseShape):
        (WebCore::CSSParser::parseWrapShape):
        (WebCore::CSSParser::parseFont):
        (WebCore::CSSParser::parseFontFamily):
        (WebCore::CSSParser::parseFontStyle):
        (WebCore::CSSParser::parseFontVariant):
        (WebCore::CSSParser::parseFontWeight):
        (WebCore::CSSParser::parseColor):
        (WebCore::ShadowParseContext::ShadowParseContext):
        (WebCore::ShadowParseContext::commitLength):
        (WebCore::ShadowParseContext::commitStyle):
        (WebCore::CSSParser::parseShadow):
        (WebCore::CSSParser::parseReflect):
        (WebCore::CSSParser::parseFlex):
        (WebCore::BorderImageParseContext::BorderImageParseContext):
        (WebCore::CSSParser::parseBorderImage):
        (WebCore::CSSParser::parseBorderImageRepeat):
        (WebCore::BorderImageSliceParseContext::BorderImageSliceParseContext):
        (WebCore::BorderImageSliceParseContext::commitNumber):
        (WebCore::BorderImageSliceParseContext::commitBorderImageSlice):
        (WebCore::CSSParser::parseBorderImageSlice):
        (WebCore::BorderImageQuadParseContext::BorderImageQuadParseContext):
        (WebCore::BorderImageQuadParseContext::commitNumber):
        (WebCore::BorderImageQuadParseContext::commitBorderImageQuad):
        (WebCore::CSSParser::parseBorderImageQuad):
        (WebCore::CSSParser::parseBorderRadius):
        (WebCore::CSSParser::parseAspectRatio):
        (WebCore::CSSParser::parseCounter):
        (WebCore::parseDeprecatedGradientPoint):
        (WebCore::parseDeprecatedGradientColorStop):
        (WebCore::CSSParser::parseDeprecatedGradient):
        (WebCore::valueFromSideKeyword):
        (WebCore::parseGradientColorOrKeyword):
        (WebCore::CSSParser::parseLinearGradient):
        (WebCore::CSSParser::parseRadialGradient):
        (WebCore::CSSParser::parseCrossfade):
        (WebCore::CSSParser::parseCustomFilter):
        (WebCore::CSSParser::parseFilter):
        (WebCore::CSSParser::parseFlowThread):
        (WebCore::CSSParser::parseRegionThread):
        (WebCore::CSSParser::parseTextEmphasisStyle):
        (WebCore::CSSParser::parseFontFeatureSettings):
        * css/CSSParser.h:
        (WebCore::CSSParser::cssValuePool):
        * css/CSSValuePool.cpp: Renamed from Source/WebCore/css/CSSPrimitiveValueCache.cpp.
        (WebCore::CSSValuePool::CSSValuePool):
        (WebCore::CSSValuePool::~CSSValuePool):
        (WebCore::CSSValuePool::createIdentifierValue):
        (WebCore::CSSValuePool::createColorValue):
        (WebCore::CSSValuePool::createValue):
        * css/CSSValuePool.h: Renamed from Source/WebCore/css/CSSPrimitiveValueCache.h.
        (WebCore::CSSValuePool::create):
        (WebCore::CSSValuePool::createValue):
        * css/mediaControlsGtk.css:
        (audio::-webkit-media-controls-volume-slider, video::-webkit-media-controls-volume-slider):
        * dom/Document.cpp:
        (WebCore::Document::cssValuePool):
        * dom/Document.h:

2011-12-03  Andreas Kling  <kling@webkit.org>

        Shrink CSSValueList.
        <http://webkit.org/b/73732>

        Reviewed by Antti Koivisto.

        Packed CSSValueList::m_isSpaceSeparated into the CSSValue bit field
        and renamed it to m_isSpaceSeparatedValue, shrinking CSSValueList
        by one CPU word.

        Also renamed CSSValue::m_isImplicit to m_isImplicitInitialValue
        for good measure.

        * css/CSSInitialValue.h:
        (WebCore::CSSInitialValue::CSSInitialValue):
        * css/CSSValue.h:
        (WebCore::CSSValue::isImplicitInitialValue):
        (WebCore::CSSValue::CSSValue):
        * css/CSSValueList.cpp:
        (WebCore::CSSValueList::CSSValueList):
        (WebCore::CSSValueList::copy):
        (WebCore::CSSValueList::customCssText):
        * css/CSSValueList.h:
        (WebCore::CSSValueList::isSpaceSeparated):

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

        [GStreamer] Fullscreen controller support for the new WebKit Fullscreen API
        https://bugs.webkit.org/show_bug.cgi?id=66968

        Reviewed by Martin Robinson.

        * GNUmakefile.am: Don't use the Quicktime fullscreen CSS anymore,
        it wasn't suited for GTK in the first place anyway.
        * platform/gtk/RenderThemeGtk.cpp:
        (WebCore::RenderThemeGtk::extraFullScreenStyleSheet): Simply reuse
        GTK CSS.

2011-12-03  Alejandro G. Castro  <alex@igalia.com>

        [GTK] TextureMapperNode should not use Qt types and functions
        https://bugs.webkit.org/show_bug.cgi?id=73713

        Replace qreal with double and qMin with std::min.

        Reviewed by Noam Rosenthal.

        * platform/graphics/texmap/TextureMapperNode.cpp:
        (WebCore::solveCubicBezierFunction):
        (WebCore::solveStepsFunction):

2011-12-03  Dan Winship  <danw@gnome.org>

        [GTK] Remove lots of code that is now unnecessary after
        SoupRequestHTTP API changes.
        https://bugs.webkit.org/show_bug.cgi?id=71611

        Reviewed by Martin Robinson.

        No new tests; behavior is unchanged

        * platform/network/ResourceHandleInternal.h:
        (WebCore::ResourceHandleInternal::ResourceHandleInternal): remove
        no-longer-needed fields.
        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::finishedCallback): remove this, and m_finished, which
        we no longer need to explicitly track
        (WebCore::statusWillBeHandledBySoup):
        (WebCore::soupErrorShouldCauseLoadFailure): No longer needed;
        SoupRequestHTTP's logic is now aligned with WebKit's.
        (WebCore::gotChunkCallback): remove gotChunkCallback, which
        is no longer needed
        (WebCore::startHTTPRequest):
        (WebCore::sendRequestCallback):
        (WebCore::gotHeadersCallback):
        (WebCore::contentSniffedCallback): merge the code from
        gotHeadersCallback and contentSniffedCallback into
        sendRequestCallback
        * platform/network/soup/ResourceResponseSoup.cpp:
        (WebCore::ResourceResponse::updateFromSoupMessage): move the
        sniffing override logic here

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

        Unreviewed, rolling out r101904.
        http://trac.webkit.org/changeset/101904
        https://bugs.webkit.org/show_bug.cgi?id=73739

        It broke zillions of tests on all bot (Requested by
        Ossy_weekend on #webkit).

        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::handlePostMessage):

2011-12-02  Kentaro Hara  <haraken@chromium.org>

        [Refactoring] Use join(", ", @arguments) to build a method argument string in CodeGenerator*.pm
        https://bugs.webkit.org/show_bug.cgi?id=73651

        Reviewed by Darin Adler.

        The code in CodeGenerator*.pm to build a method argument string is really dirty
        and error-prone. It is building an argument string incrementally judging whether
        ", " is necessary or not, like this:

            my $method = ... ? "func(" : "func(a";
            if (...) {
                $method .= $method =~ /\($/ ? "b" : ", b";
            }
            $method .= ")";

        Alternatively, we can refactor the code as follows:

            my $funcName = "func";
            my @arguments;
            push(@arguments, "a") if (...);
            push(@arguments, "b") if (...);
            my $method = $funcName . "(" . join(", ", @arguments) . ")";

        This patch just refactors the code, and generated .h and .cpp files should be
        exactly the same as the current .h and .cpp files.

        Tests: bindings/scripts/test/*

        * bindings/scripts/CodeGenerator.pm:
        (GetterExpression):
        (SetterExpression):
        * bindings/scripts/CodeGeneratorCPP.pm:
        (GenerateImplementation):
        * bindings/scripts/CodeGeneratorGObject.pm:
        ():
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateImplementation):
        * bindings/scripts/CodeGeneratorObjC.pm:
        (GenerateImplementation):
        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateNormalAttrGetter):
        (GenerateNormalAttrSetter):

2011-12-02  David Levin  <levin@chromium.org>

        Rename WTF class from TemporarilyChange to TemporaryChange.
        https://bugs.webkit.org/show_bug.cgi?id=73479

        Reviewed by Eric Seidel.

        * ForwardingHeaders/wtf/TemporarilyChange.h: Removed.
        * ForwardingHeaders/wtf/TemporaryChange.h: Added.
        * page/FrameView.cpp:
        (WebCore::FrameView::forceLayoutParentViewIfNeeded):
        (WebCore::FrameView::layout):
        (WebCore::FrameView::setScrollPosition):
        (WebCore::FrameView::autoSizeIfEnabled):

2011-12-02  Armand Navabi  <armand.navabi@gmail.com>

        ASSERT fails in updateState ACTION_DRAW case
        https://bugs.webkit.org/show_bug.cgi?id=73351

        Reviewed by James Robinson.

        Changed ASSERT in CCSchedulerStateMachine to include ( || !m_visible) as discussed in bug 
        report. m_commitState is set to COMMIT_STATE_WAITING_FOR_FIRST_DRAW if m_needsCommit or
        !m_visible, so in ACTION_DRAW the assert should have both conditions.

        * platform/graphics/chromium/cc/CCSchedulerStateMachine.cpp:
        (WebCore::CCSchedulerStateMachine::updateState):

2011-12-02  Shawn Singh  <shawnsingh@chromium.org>

        [chromium] Scissor rect optimization for chromium compositor
        https://bugs.webkit.org/show_bug.cgi?id=67341

        Reviewed by James Robinson.

        Mostly covered by damage tracker tests. Currently this relies on
        manually running layout tests, because this patch requires partial
        swaps that are not supported by DumpRenderTree. The feature
        automatically disables if partial swap is not supported.

        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::initialize):
        (WebCore::LayerRendererChromium::trackDamageForAllSurfaces):
        (WebCore::LayerRendererChromium::drawLayersOntoRenderSurfaces):
        (WebCore::LayerRendererChromium::drawLayersInternal):
        (WebCore::LayerRendererChromium::swapBuffers):
        (WebCore::LayerRendererChromium::drawLayer):
        * platform/graphics/chromium/LayerRendererChromium.h:
        * platform/graphics/chromium/cc/CCLayerTreeHost.h:
        (WebCore::CCSettings::CCSettings):
        (WebCore::LayerRendererCapabilities::LayerRendererCapabilities):
        * platform/graphics/chromium/cc/CCRenderSurface.cpp:
        (WebCore::CCRenderSurface::draw):
        * platform/graphics/chromium/cc/CCRenderSurface.h:

2011-12-02  Dmitry Lomov  <dslomov@google.com>

        https://bugs.webkit.org/show_bug.cgi?id=73691
        [JSC] Implement correct order of window.postMessage arguments.

        Reviewed by Geoffrey Garen.

        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::handlePostMessage):

2011-12-02  Stephen Chenney  <schenney@chromium.org>

        REGRESSION (r91125): Polyline tool in google docs is broken
        https://bugs.webkit.org/show_bug.cgi?id=65796

        Reviewed by Darin Adler.

        Work around a bug in CoreGraphics, that caused incorrect bounds for paths
        consisting only of move-to elements. This causes problems in SVG, when the enormous
        bounds prevented the drawing of things behind.

        Tests: svg/custom/path-moveto-only-rendering.svg
               svg/custom/subpaths-moveto-only-rendering.svg

        * platform/graphics/cg/PathCG.cpp:
        (WebCore::PathIsEmptyOrSingleMoveTester::PathIsEmptyOrSingleMoveTester): Class to
        test for isEmpty accoridng ot the same rules as other platforms.
        (WebCore::PathIsEmptyOrSingleMoveTester::isEmpty): Query the result
        (WebCore::PathIsEmptyOrSingleMoveTester::testPathElement): Path iterator method
        (WebCore::PathHasOnlyMoveToTester::PathHasOnlyMoveToTester): Class to test whether a
        path contains only move-to elements, and hence should have null bounds.
        (WebCore::PathHasOnlyMoveToTester::hasOnlyMoveTo): Query the result
        (WebCore::PathHasOnlyMoveToTester::testPathElement): Path iterator method.
        (WebCore::Path::boundingRect): Modified to check for move-to only paths
        (WebCore::Path::fastBoundingRect): Modified to check for move-to only paths
        (WebCore::Path::isEmpty): Now uses the method that matches other platforms.
        (WebCore::Path::hasCurrentPoint): Now uses CGPathIsEmpty directly
        (WebCore::Path::transform) : Now uses CGPathIsEmpty directly

2011-12-02  Mihnea Ovidenie  <mihnea@adobe.com>

        [CSSRegions]More renaming for region style rules.
        https://bugs.webkit.org/show_bug.cgi?id=73526

        Reviewed by Eric Seidel.

        Rename isRegionStyleRule() -> isRegionRule()
        WEBKIT_REGION_STYLE_RULE -> WEBKIT_REGION_RULE.

        * bindings/objc/DOMCSS.mm:
        (kitClass):
        * bindings/v8/custom/V8CSSRuleCustom.cpp:
        (WebCore::toV8):
        * css/CSSGrammar.y:
        * css/CSSParser.cpp:
        (WebCore::CSSParser::createRegionRule):
        * css/CSSParser.h:
        * css/CSSRule.cpp:
        (WebCore::CSSRule::cssText):
        (WebCore::CSSRule::destroy):
        * css/CSSRule.h:
        (WebCore::CSSRule::isRegionRule):
        * css/CSSRule.idl:
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::addRegionRule):
        (WebCore::RuleSet::addRulesFromSheet):
        * css/CSSStyleSelector.h:
        * css/WebKitCSSRegionRule.cpp:
        (WebCore::WebKitCSSRegionRule::WebKitCSSRegionRule):
        * css/tokenizer.flex:

2011-12-02  Tom Sepez  <tsepez@chromium.org>

        XSSAuditor includes more terminating characters when truncating
        attribute values.
        https://bugs.webkit.org/show_bug.cgi?id=73684

        Reviewed by Daniel Bates.

        * html/parser/XSSAuditor.cpp:
        (WebCore::isTerminatingCharacter):
        (WebCore::XSSAuditor::eraseDangerousAttributesIfInjected):

2011-12-02  Tony Chang  <tony@chromium.org>

        Need to implement flex-flow: column-reverse
        https://bugs.webkit.org/show_bug.cgi?id=73504

        Reviewed by David Hyatt.

        We can't just change the direction of the FlexOrderIterator because we want the overflow to be
        on the top. We can't just position them in the reverse location since we don't know where the
        bottom edge is until we've layed out the flex items. So we do an extra pass, but it should be
        fast since we're not laying out, just moving.

        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::flowAwareBorderEnd):
        (WebCore::RenderFlexibleBox::flowAwarePaddingEnd):
        (WebCore::RenderFlexibleBox::layoutAndPlaceChildren):
        (WebCore::RenderFlexibleBox::layoutColumnReverse): Do an extra pass to reposition flexitems in the reverse order.
        * rendering/RenderFlexibleBox.h:

2011-12-02  Stephen Chenney  <schenney@chromium.org>

        Divide by zero for zero-length arcs
        https://bugs.webkit.org/show_bug.cgi?id=73021

        Reviewed by Nikolas Zimmermann.

        A zero-length path produces divide by zero, resulting in nothing being
        drawn. This change modifies the behavior to produce a zero-length line
        which will generate correct linecaps.

        Test: svg/stroke/zero-length-arc-linecaps-rendering.svg

        * svg/SVGPathParser.cpp:
        (WebCore::SVGPathParser::parseArcToSegment): Catch the case of
        zero-length arcs and convert them to lines (the same as would happen
        for zero arc radii).

2011-12-02  James Wei <james.wei@intel.com> & Xingnan Wang <xingnan.wang@intel.com>

        -Implement the SSE optimization for vsmul and vadd.
        https://bugs.webkit.org/show_bug.cgi?id=73182

        Reviewed by Kenneth Russell.

        * platform/audio/VectorMath.cpp:
        (WebCore:VectorMath):

2011-12-02  David Grogan  <dgrogan@chromium.org>

        Grant workers experimental access to IndexedDB.
        https://bugs.webkit.org/show_bug.cgi?id=73609

        Reviewed by Nate Chapin.

        No new tests - there will be chromium ui tests that depend on
        webkit.org/b/73297.

        * storage/IDBFactory.cpp:
        (WebCore::IDBFactory::open): Call new function,
        IDBFactoryBackendInterface::openFromWorker.
        * storage/IDBFactoryBackendImpl.cpp:
        (WebCore::IDBFactoryBackendImpl::open):
        (WebCore::IDBFactoryBackendImpl::openFromWorker):
        (WebCore::IDBFactoryBackendImpl::openInternal):
        * storage/IDBFactoryBackendImpl.h:
        * storage/IDBFactoryBackendInterface.h:
        * workers/WorkerContext.cpp:
        (WebCore::WorkerContext::webkitIndexedDB): Stores
        IDBFactoryBackendInterface, implemented by IDBFactoryBackendProxy in
        chromium, in the WorkerContext.  For the Document case it is stored in
        the PageGroup.  Storing it in the WorkerContext causes more memory
        churn, but that should be trivial.  I don't know of any better
        alternatives.
        * workers/WorkerContext.h:
        * workers/WorkerContext.idl:

2011-12-02  Aaron Colwell  <acolwell@chromium.org>

        Fix mixed content handling for video in Chromium by having
        CachedResourceLoader & SubresourceLoader use the 
        ResourceRequest::TargetType when determining if a RawResource can
        be requested.
        https://bugs.webkit.org/show_bug.cgi?id=72178

        Reviewed by Adam Barth.

        Tests: http/tests/security/mixedContent/insecure-video-in-iframe.html
               http/tests/security/mixedContent/insecure-video-in-main-frame.html
               http/tests/security/mixedContent/redirect-http-to-https-video-in-main-frame.html
               http/tests/security/mixedContent/redirect-https-to-http-video-in-main-frame.html

        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::willSendRequest):
        * loader/cache/CachedRawResource.cpp:
        (WebCore::CachedRawResource::CachedRawResource):
        * loader/cache/CachedRawResource.h:
        * loader/cache/CachedResource.cpp:
        (WebCore::defaultPriorityForResourceType):
        (WebCore::cachedResourceTypeToTargetType):
        (WebCore::CachedResource::targetTypeToCachedResourceType):
        * loader/cache/CachedResource.h:
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::createResource):
        (WebCore::CachedResourceLoader::checkInsecureContent):
        (WebCore::CachedResourceLoader::canRequest):
        (WebCore::CachedResourceLoader::requestResource):

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

        Unreviewed, rolling out r101731.
        http://trac.webkit.org/changeset/101731
        https://bugs.webkit.org/show_bug.cgi?id=73706

        Broke copy and paste in chromium. (Requested by dcheng on #webkit).

        * editing/SpellChecker.cpp:
        (WebCore::SpellChecker::SpellChecker):
        (WebCore::SpellChecker::initRequest):
        (WebCore::SpellChecker::clearRequest):
        (WebCore::SpellChecker::canCheckAsynchronously):
        (WebCore::SpellChecker::isBusy):
        (WebCore::SpellChecker::isValid):
        (WebCore::SpellChecker::requestCheckingFor):
        (WebCore::SpellChecker::doRequestCheckingFor):
        (WebCore::SpellChecker::didCheck):
        * editing/SpellChecker.h:

2011-12-02  Fady Samuel  <fsamuel@chromium.org>

        When page scaling is in use position:fixed has incorrect results
        https://bugs.webkit.org/show_bug.cgi?id=68617

        Reviewed by Simon Fraser.

        Add the option for position:fixed elements to be fixed to the frame
        instead of the layout rectangle of the document.

        Tests: fast/repaint/fixed-in-page-scale.html
               fast/repaint/fixed-right-bottom-in-page-scale.html
               fast/repaint/fixed-right-in-page-scale.html

        * WebCore.exp.in:
        * page/FrameView.cpp:
        (WebCore::FrameView::reset):
        (WebCore::FrameView::scrollXForFixedPosition):
        (WebCore::FrameView::scrollYForFixedPosition):
          If position:fixed elements are relative to the frame, disregard the
          drag factor.
        (WebCore::FrameView::setShouldLayoutFixedElementsRelativeToFrame):
        * page/FrameView.h:
        (WebCore::FrameView::shouldLayoutFixedElementsRelativeToFrame):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::shouldLayoutFixedElementRelativeToFrame):
        (WebCore::RenderBox::containingBlockLogicalWidthForPositioned):
        (WebCore::RenderBox::containingBlockLogicalHeightForPositioned):
          If position:fixed elements are relative to the frame, their container
          is the frame instead of the layout rect of the document. 
          This allows proper positioning of these elements to the right and
          bottom.
        * rendering/RenderBox.h:
        * testing/Internals.cpp:
        (WebCore::Internals::setShouldLayoutFixedElementsRelativeToFrame):
        * testing/Internals.h:
        * testing/Internals.idl:
          Allow enabling and disabling the new behavior in layout tests.

2011-12-02  Benjamin Poulain  <bpoulain@apple.com>

        Build fix for SubresourceLoader when building with Core Foundation
        https://bugs.webkit.org/show_bug.cgi?id=73709

        Reviewed by David Kilzer.

        The patch r100311 removed SubresourceClient and merged it in SubresourceLoader.
        Consequently, m_client does not exist anymore and there is no need to do the check
        before invoking didReceiveData().

        * loader/cf/SubresourceLoaderCF.cpp:
        (WebCore::SubresourceLoader::didReceiveDataArray):

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

        StyledElement: Simplify addCSSColor().
        <http://webkit.org/b/73703>

        Reviewed by Darin Adler.

        The Color(const String&) constructor handles both named and 3/6-digit
        hex colors, so there's no need to handle those separately here.
        Also tweaked some comments and minor things.

        * dom/StyledElement.cpp:
        (WebCore::StyledElement::addCSSColor):

2011-12-02  Benjamin Poulain  <bpoulain@apple.com>

        Update platform/iphone to platform/ios
        https://bugs.webkit.org/show_bug.cgi?id=73708

        Reviewed by Darin Adler.

        The platform is now best known as iOS, update the platform layer accordingly.

        * Configurations/WebCore.xcconfig:
        * WebCore.gypi:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/cocoa/KeyEventCocoa.mm:
        * platform/ios/KeyEventCodesIOS.h: Renamed from Source/WebCore/platform/iphone/KeyEventCodesIPhone.h.
        * platform/ios/KeyEventIOS.mm: Renamed from Source/WebCore/platform/iphone/KeyEventIPhone.mm.
        (WebCore::keyIdentifierForKeyEvent):
        (WebCore::PlatformKeyboardEvent::PlatformKeyboardEvent):
        (WebCore::PlatformKeyboardEvent::disambiguateKeyDownEvent):
        (WebCore::PlatformKeyboardEvent::currentCapsLockState):
        (WebCore::PlatformKeyboardEvent::getCurrentModifierState):

2011-12-02  Jonathan Backer  <backer@chromium.org>

        [chromium] Eliminate unnecessary state on previous CL
        https://bugs.webkit.org/show_bug.cgi?id=73661

        Reviewed by Kenneth Russell.

        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::initialize):
        * platform/graphics/chromium/cc/CCLayerTreeHost.cpp:
        (WebCore::CCLayerTreeHost::initialize):
        (WebCore::CCLayerTreeHost::didBecomeInvisibleOnImplThread):
        * platform/graphics/chromium/cc/CCLayerTreeHost.h:
        (WebCore::CCSettings::CCSettings):
        (WebCore::LayerRendererCapabilities::LayerRendererCapabilities):

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

        <rdar://problem/10520670> REGRESSION (r91738): didFinishLoad is called before custom fonts have finished loading
        https://bugs.webkit.org/show_bug.cgi?id=73688

        Reviewed by Darin Adler.

        The problem was that after CSSFontFaceSource::getFontData() had scheduled a 0-delay timer to
        begin loading the font, but before that timer fired, the subresource loader appeared to have
        had no resources waiting to be loaded, and therefore didFinishLoad could be called. This change
        reworks the fix for <http://webkit.org/b/65123> so that while the load is still started on a
        0-delay timer, the subresource loader’s request count is incremented immediately, preventing
        it from hitting 0 while the font load is scheduled to begin. The delayed load mechanism is
        moved from CSSFontFaceSource into CSSFontSelector in order to safely handle the possibility of
        the latter being decommissioned while waiting for font loading to begin.

        * css/CSSFontFaceSource.cpp:
        (WebCore::CSSFontFaceSource::CSSFontFaceSource): Removed initializer for m_loadStartTimer.
        (WebCore::CSSFontFaceSource::~CSSFontFaceSource): Removed stopping of m_loadStartTimer.
        (WebCore::CSSFontFaceSource::getFontData): Replaced code to schedule loading on a timer with
        a call to CSSFontSelector::beginLoadingFontSoon.
        * css/CSSFontFaceSource.h: Removed m_loadStartTimer and m_fontSelector member variables.
        * css/CSSFontSelector.cpp:
        (WebCore::CSSFontSelector::CSSFontSelector): Added initialized for m_beginLoadingTimer.
        (WebCore::CSSFontSelector::~CSSFontSelector): Added call to clearDocument(), to deal with
        anything remaining in m_fontsToBeginLoading at this time.
        (WebCore::CSSFontSelector::clearDocument): Now stops m_beginLoadingTimer and balances
        incrementRequestCount() calls for anything remaining in m_fontsToBeginLoading.
        (WebCore::CSSFontSelector::beginLoadingFontSoon): Added. Schedules the actual call to
        CachedFont::beginLoadingIfNeeded on a 0-delay timer, and meanwhile increments the request count
        on the CachedResourceLoader, which ensures that didFinishLoad will not be called while waiting
        for the timer to fire.
        (WebCore::CSSFontSelector::beginLoadTimerFired): Added. Actually calls
        CachedFont::beginLoadIfNeeded and balances the incrementRequestCount() made when the timer was
        scheduled.
        * css/CSSFontSelector.h:

2011-12-02  David Tseng  <dtseng@google.com>

        Send an AXCheckedStateChanged notification when the aria-checked attribute changes.
        https://bugs.webkit.org/show_bug.cgi?id=72754

        Reviewed by Chris Fleizach.

        Test: accessibility/aria-checkbox-sends-notification.html

        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::checkedStateChanged):
        * accessibility/AXObjectCache.h:
        * dom/Element.cpp:
        (WebCore::Element::updateAfterAttributeChanged):
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::setChecked):

2011-12-02  Grace Kloba  <klobag@chromium.org>

        [chromium] Recycle tile-sized textures during commit to prevent reallocations
        https://bugs.webkit.org/show_bug.cgi?id=70645

        Reviewed by James Robinson.

        Currently texture request is capped by the high limit while we reclaim the
        textures in each commit. This triggers new tiles always allocated when scrolling.
        The proposal is to recycle the texture during request if the total used memory
        is about to exceed the reclaim limit.

        * platform/graphics/chromium/ManagedTexture.cpp:
        (WebCore::ManagedTexture::reserve):
        * platform/graphics/chromium/TextureManager.cpp:
        (WebCore::TextureManager::setMemoryLimitBytes):
        (WebCore::TextureManager::replaceTexture):
        (WebCore::TextureManager::requestTexture):
        * platform/graphics/chromium/TextureManager.h:

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

        [Chromium] Show placeholder even if the element is focused
        https://bugs.webkit.org/show_bug.cgi?id=73629

        Reviewed by Hajime Morita.

        No new tests. Need to update some existing placeholder tests.

        * rendering/RenderThemeChromiumMac.h: Add shouldShowPlaceholderWhenFocused().
        * rendering/RenderThemeChromiumMac.mm:
        (WebCore::RenderThemeChromiumMac::shouldShowPlaceholderWhenFocused):
        Returns true.
        * rendering/RenderThemeChromiumSkia.cpp:
        (WebCore::RenderThemeChromiumSkia::shouldShowPlaceholderWhenFocused): ditto.
        * rendering/RenderThemeChromiumSkia.h: Add shouldShowPlaceholderWhenFocused().

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

        [Lion][Windows] Both of placeholder and input text are shown in <input type=number>
        https://bugs.webkit.org/show_bug.cgi?id=73615

        Reviewed by Joseph Pecoraro.

        Placeholder visibility was checked by HTMLInputElement::value
        emptiness. It should be innerTextValue emptiness because it is
        possible that a number field has empty HTMLInputElement::value and
        non-empty innerTextValue.

        Tests: fast/forms/number/number-placeholder-with-unacceptable-value.html

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::updateInnerTextValue):
        We should update placeholder visiblity when the innerTextValue is updated.
        (WebCore::HTMLInputElement::subtreeHasChanged): ditto.
        (WebCore::HTMLInputElement::setSuggestedValue):
        We don't need to call updatePlaceholderVisibility() because updateInnerTextValue() calls it.
        (WebCore::HTMLInputElement::setValueFromRenderer):
        We don't need to call updatePlaceholderVisibility() because subtreeHasChanged() calls it.
        * html/HTMLInputElement.h: Checks innerTextValue emptiness.
        * html/TextFieldInputType.cpp:
        (WebCore::TextFieldInputType::setValue):
        We don't need to call updatePlaceholderVisibility() because updateInnerTextValue() calls it.

2011-12-01  Alok Priyadarshi  <alokp@chromium.org>

        [chromium] CCLayerQuad does not return FloatQuad in correct order
        https://bugs.webkit.org/show_bug.cgi?id=73247

        Reviewed by James Robinson.

        Returned the FloatQuad coordinates in correct order.
        
        Covered by new unit tests in CCLayerQuadTest.cpp.

        * platform/graphics/chromium/cc/CCLayerQuad.cpp:
        (WebCore::CCLayerQuad::floatQuad):

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

        Unreviewed, rolling out r101833.
        http://trac.webkit.org/changeset/101833
        https://bugs.webkit.org/show_bug.cgi?id=73678

        test_expectations file invalid: run Tools/Scripts/new-run-
        webkit-tests --lint-test-files (Requested by scheib on
        #webkit).

        * platform/graphics/chromium/cc/CCLayerQuad.cpp:
        (WebCore::CCLayerQuad::floatQuad):

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

        [chromium] CCLayerQuad does not return FloatQuad in correct orientation
        https://bugs.webkit.org/show_bug.cgi?id=73247

        Reviewed by James Robinson.

        Returned the FloatQuad coordinates in correct order.
        
        Covered by new unit tests in CCLayerQuadTest.cpp.

        * platform/graphics/chromium/cc/CCLayerQuad.cpp:
        (WebCore::CCLayerQuad::floatQuad):

2011-12-01  Dmitry Lomov  <dslomov@google.com>

        https://bugs.webkit.org/show_bug.cgi?id=73589
        [V8][Chromium] Adjust postMessage to the latest "implementation-ready" spec.
        - postMessage should support transfer of MessagePorts
        - the order of arguments to Window::postMessage and Window::webkitPostMessage should be (msg, targetOrigin [, transfer])

        Reviewed by David Levin.

        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        (WebCore::handlePostMessageCallback):
        * bindings/v8/custom/V8DedicatedWorkerContextCustom.cpp:
        (WebCore::handlePostMessageCallback):
        * bindings/v8/custom/V8MessagePortCustom.cpp:
        (WebCore::handlePostMessageCallback):
        * bindings/v8/custom/V8WorkerCustom.cpp:
        (WebCore::handlePostMessageCallback):

2011-12-02  Enrica Casucci  <enrica@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=73497
        This is a followup to the patch submitted for the bug above.
        Tha patch was landed in r101575 and I missed to make one of the changes
        suggested by the reviewer that had pointed out that the code was still
        making use of the deprecatedNode method.

        Unreviewed.

        * editing/DeleteSelectionCommand.cpp:
        (WebCore::DeleteSelectionCommand::removeRedundantBlocks): Changed deprecatedNode to containerNode.

2011-12-02  Tom Sepez  <tsepez@chromium.org>

        Content-security-policy script-src not enforced on workers.
        https://bugs.webkit.org/show_bug.cgi?id=73240

        Reviewed by Adam Barth.

        Add a CSP check in AbstractWorker.cpp as part of resolving URL.
        
        Test: http/tests/security/contentSecurityPolicy/worker-script-src.html

        * workers/AbstractWorker.cpp:
        (WebCore::AbstractWorker::resolveURL):

2011-12-02  Daniel Cheng  <dcheng@chromium.org>

        [chromium] Add plumbing for supporting custom MIME types in DataTransfer.
        https://bugs.webkit.org/show_bug.cgi?id=73594

        Reviewed by David Levin.

        Tests: editing/pasteboard/clipboard-customData.html
               fast/events/drag-customData.html

        * platform/chromium/ChromiumDataObject.cpp:
        (WebCore::ChromiumDataObject::types):
        (WebCore::ChromiumDataObject::getData):
        (WebCore::ChromiumDataObject::setData):
        * platform/chromium/ChromiumDataObject.h:
        (WebCore::ChromiumDataObject::customData):
        * platform/chromium/PlatformSupport.h:

2011-12-02  Darin Adler  <darin@apple.com>

        [Mac] Form stream data structures still not threadsafe
        https://bugs.webkit.org/show_bug.cgi?id=73674

        Reviewed by Anders Carlsson.

        * platform/network/mac/FormDataStreamMac.mm:
        (WebCore::streamFieldsMapMutex): Added. 
        (WebCore::associateStreamWithResourceHandle): Use streamFieldsMapMutex.
        (WebCore::formCreate): Ditto.
        (WebCore::formFinalize): Ditto.
        (WebCore::httpBodyFromStream): Ditto.

2011-12-02  Joshua Bell  <jsbell@chromium.org>

        IndexedDB: Rename "multientry" to "multiEntry" per spec change
        https://bugs.webkit.org/show_bug.cgi?id=73578

        Reviewed by Darin Fisher.

        * storage/IDBIndex.h:
        (WebCore::IDBIndex::multiEntry):
        * storage/IDBIndex.idl:
        * storage/IDBIndexBackendImpl.cpp:
        (WebCore::IDBIndexBackendImpl::IDBIndexBackendImpl):
        * storage/IDBIndexBackendImpl.h:
        (WebCore::IDBIndexBackendImpl::create):
        (WebCore::IDBIndexBackendImpl::multiEntry):
        * storage/IDBIndexBackendInterface.h:
        * storage/IDBLevelDBBackingStore.cpp:
        (WebCore::IDBLevelDBBackingStore::getIndexes):
        (WebCore::IDBLevelDBBackingStore::createIndex):
        * storage/IDBLevelDBCoding.cpp:
        * storage/IDBObjectStore.cpp:
        (WebCore::IDBObjectStore::createIndex):
        * storage/IDBObjectStoreBackendImpl.cpp:
        (WebCore::IDBObjectStoreBackendImpl::putInternal):
        (WebCore::IDBObjectStoreBackendImpl::createIndex):
        (WebCore::IDBObjectStoreBackendImpl::createIndexInternal):
        (WebCore::IDBObjectStoreBackendImpl::loadIndexes):
        * storage/IDBObjectStoreBackendImpl.h:
        * storage/IDBObjectStoreBackendInterface.h:

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

        Unreviewed, rolling out r101805.
        http://trac.webkit.org/changeset/101805
        https://bugs.webkit.org/show_bug.cgi?id=73670

        Many canvas tests started failing due to the isEmpty change
        (Requested by darin on #webkit).

        * platform/graphics/cg/PathCG.cpp:
        (WebCore::Path::boundingRect):
        (WebCore::Path::fastBoundingRect):
        (WebCore::Path::isEmpty):

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

        [Mac] Reference count threading violation in FormDataStreamMac.mm
        https://bugs.webkit.org/show_bug.cgi?id=73627

        Reviewed by Sam Weinig.

        Shows up as a crash during existing layout test runs so no new tests are required.

        * platform/network/mac/FormDataStreamMac.mm:
        (WebCore::streamFieldsMap): Replaced getStreamFormDataMap with this.
        Use an NSMapTable instead of a HashMap because we need to remove items from this
        on a non-main thread.
        (WebCore::associateStreamWithResourceHandle): Use NSMapGet instead of
        HashMap::contains here.
        (WebCore::formCreate): FormStreamFields now stores a RefPtr to the form data.
        Added the code to fill that in. Did it in a more modern way to avoid the leakRef
        and adoptRef that were used before. Replaced the code that set up the stream
        form data map entry with code that sets an entry in the streamFieldsMap.
        (WebCore::formFinishFinalizationOnMainThread): Added. Contains the work of
        finalization that must be done on the main thread, specifically, destroying the
        fields structure that contains objects with RefPtr in them. We can't touch these
        reference counts on non-main threads.
        (WebCore::formFinalize): Changed this to use NSMapRemove on the streamFieldsMap.
        Added a callOnMainThread to finish the finalization.
        (WebCore::setHTTPBody): Removed the leakRef, no longer needed, that used to be
        balanced by an adoptRef in formCreate.
        (WebCore::httpBodyFromStream): Changed to use NSMapGet.

2011-12-02  Antti Koivisto  <antti@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=73520
        REGRESSION(r101524): Article titles invisible until hover on blaze.com

        Reviewed by Darin Adler.
        
        We need to invalidate the matched declaration cache when new web fonts are loaded.
        Fonts in the cached RenderStyles may not be valid anymore.
        
        Also renamed m_matchStyleDeclarationCache -> m_matchedStyleDeclarationCache.
        
        Test reduction by the Reduction Fairy (aka kling).

        Test: fast/css/font-face-cache-bug.html

        * css/CSSFontSelector.cpp:
        (WebCore::CSSFontSelector::dispatchInvalidationCallbacks):
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::findFromMatchedDeclarationCache):
        (WebCore::CSSStyleSelector::addToMatchedDeclarationCache):
        (WebCore::CSSStyleSelector::invalidateMatchedDeclarationCache):
        * css/CSSStyleSelector.h:

2011-11-02  Jer Noble  <jer.noble@apple.com>

        MediaControls should use MediaController if present.
        https://bugs.webkit.org/show_bug.cgi?id=71410

        Reviewed by Eric Carlson.

        No new tests; covered by existing tests.

        Add support for individual media controls to control the MediaController of their associated
        HTMLMediaElement, if present.

        The video spec requires that UA provided media controls be implemented in terms of their 
        HTMLMediaElement's MediaController, if present.  So for each of the media controls, modify 
        their constructor to take a Document* instead of an HTMLMediaElement, and add an setter
        taking a MediaControllerInterface.

        Now that MediaControls have an abstract interface instead of an HTMLMediaElement, use toParentMediaElement
        to find the controllingVideoElement.
        * accessibility/AccessibilityMediaControls.cpp:
        (WebCore::AccessibilityMediaControlsContainer::controllingVideoElement):

        Pass the MediaController or the HTMLMediaElement when setting up the elements controls.
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::createMediaControls):
        (WebCore::HTMLMediaElement::setMediaController):

        The following functions have only constructor changes:
        * html/shadow/MediaControlElements.cpp:
        (WebCore::MediaControlElement::MediaControlElement):
        (WebCore::MediaControlPanelElement::MediaControlPanelElement):
        (WebCore::MediaControlPanelElement::create):
        (WebCore::MediaControlTimelineContainerElement::MediaControlTimelineContainerElement):
        (WebCore::MediaControlTimelineContainerElement::create):
        (WebCore::MediaControlVolumeSliderContainerElement::MediaControlVolumeSliderContainerElement):
        (WebCore::MediaControlVolumeSliderContainerElement::create):
        (WebCore::MediaControlStatusDisplayElement::MediaControlStatusDisplayElement):
        (WebCore::MediaControlStatusDisplayElement::create):
        (WebCore::MediaControlInputElement::MediaControlInputElement):
        (WebCore::MediaControlMuteButtonElement::MediaControlMuteButtonElement):
        (WebCore::MediaControlMuteButtonElement::defaultEventHandler):
        (WebCore::MediaControlPanelMuteButtonElement::MediaControlPanelMuteButtonElement):
        (WebCore::MediaControlPanelMuteButtonElement::create):
        (WebCore::MediaControlVolumeSliderMuteButtonElement::MediaControlVolumeSliderMuteButtonElement):
        (WebCore::MediaControlVolumeSliderMuteButtonElement::create):
        (WebCore::MediaControlPlayButtonElement::MediaControlPlayButtonElement):
        (WebCore::MediaControlPlayButtonElement::create):
        (WebCore::MediaControlSeekButtonElement::MediaControlSeekButtonElement):
        (WebCore::MediaControlSeekForwardButtonElement::MediaControlSeekForwardButtonElement):
        (WebCore::MediaControlSeekForwardButtonElement::create):
        (WebCore::MediaControlSeekBackButtonElement::MediaControlSeekBackButtonElement):
        (WebCore::MediaControlSeekBackButtonElement::create):
        (WebCore::MediaControlRewindButtonElement::MediaControlRewindButtonElement):
        (WebCore::MediaControlRewindButtonElement::create):
        (WebCore::MediaControlReturnToRealtimeButtonElement::MediaControlReturnToRealtimeButtonElement):
        (WebCore::MediaControlReturnToRealtimeButtonElement::create):
        (WebCore::MediaControlToggleClosedCaptionsButtonElement::MediaControlToggleClosedCaptionsButtonElement):
        (WebCore::MediaControlToggleClosedCaptionsButtonElement::create):
        (WebCore::MediaControlTimelineElement::MediaControlTimelineElement):
        (WebCore::MediaControlTimelineElement::create):
        (WebCore::MediaControlVolumeSliderElement::MediaControlVolumeSliderElement):
        (WebCore::MediaControlVolumeSliderElement::create):
        (WebCore::MediaControlVolumeSliderElement::defaultEventHandler):
        (WebCore::MediaControlFullscreenVolumeSliderElement::MediaControlFullscreenVolumeSliderElement):
        (WebCore::MediaControlFullscreenVolumeSliderElement::create):
        (WebCore::MediaControlFullscreenButtonElement::MediaControlFullscreenButtonElement):
        (WebCore::MediaControlFullscreenButtonElement::create):
        (WebCore::MediaControlFullscreenVolumeMinButtonElement::MediaControlFullscreenVolumeMinButtonElement):
        (WebCore::MediaControlFullscreenVolumeMinButtonElement::create):
        (WebCore::MediaControlFullscreenVolumeMaxButtonElement::MediaControlFullscreenVolumeMaxButtonElement):
        (WebCore::MediaControlFullscreenVolumeMaxButtonElement::create):
        (WebCore::MediaControlTimeDisplayElement::MediaControlTimeDisplayElement):
        (WebCore::MediaControlTimeRemainingDisplayElement::create):
        (WebCore::MediaControlTimeRemainingDisplayElement::MediaControlTimeRemainingDisplayElement):
        (WebCore::MediaControlCurrentTimeDisplayElement::create):
        (WebCore::MediaControlCurrentTimeDisplayElement::MediaControlCurrentTimeDisplayElement):
        * html/shadow/MediaControlRootElement.cpp:
        (WebCore::MediaControlRootElement::MediaControlRootElement):
        (WebCore::MediaControls::create):
        (WebCore::MediaControlRootElement::create):
        * html/shadow/MediaControlRootElement.h:
        * html/shadow/MediaControls.cpp:
        (WebCore::MediaControls::MediaControls):
        * html/shadow/MediaControls.h:

        The following functions now call MediaControllerInterface instead of HTMLMediaElement directly:
        * html/shadow/MediaControlElements.h:
        (WebCore::MediaControlStatusDisplayElement::update):
        (WebCore::MediaControlMuteButtonElement::updateDisplayType):
        (WebCore::MediaControlPlayButtonElement::defaultEventHandler):
        (WebCore::MediaControlPlayButtonElement::updateDisplayType):
        (WebCore::MediaControlSeekButtonElement::startTimer):
        (WebCore::MediaControlSeekButtonElement::stopTimer):
        (WebCore::MediaControlSeekButtonElement::nextRate):
        (WebCore::MediaControlSeekButtonElement::seekTimerFired):
        (WebCore::MediaControlRewindButtonElement::defaultEventHandler):
        (WebCore::MediaControlReturnToRealtimeButtonElement::defaultEventHandler):
        (WebCore::MediaControlToggleClosedCaptionsButtonElement::defaultEventHandler):
        (WebCore::MediaControlToggleClosedCaptionsButtonElement::updateDisplayType):
        (WebCore::MediaControlTimelineElement::defaultEventHandler):
        (WebCore::MediaControlFullscreenButtonElement::defaultEventHandler):
        (WebCore::MediaControlFullscreenVolumeMinButtonElement::defaultEventHandler):
        (WebCore::MediaControlFullscreenVolumeMaxButtonElement::defaultEventHandler):
        * html/shadow/MediaControlRootElement.cpp:
        (WebCore::MediaControlRootElement::reset):
        (WebCore::MediaControlRootElement::playbackStarted):
        (WebCore::MediaControlRootElement::playbackProgressed):
        (WebCore::MediaControlRootElement::playbackStopped):
        (WebCore::MediaControlRootElement::updateTimeDisplay):
        (WebCore::MediaControlRootElement::loadedMetadata):
        (WebCore::MediaControlRootElement::changedVolume):
        (WebCore::MediaControlRootElement::enteredFullscreen):
        (WebCore::MediaControlRootElement::showVolumeSlider):
        (WebCore::MediaControlRootElement::defaultEventHandler):
        (WebCore::MediaControlRootElement::startHideFullscreenControlsTimer):
        (WebCore::MediaControlRootElement::hideFullscreenControlsTimerFired):
        * html/shadow/MediaControlRootElementChromium.cpp:
        (WebCore::MediaControlRootElementChromium::MediaControlRootElementChromium):
        (WebCore::MediaControls::create):
        (WebCore::MediaControlRootElementChromium::create):
        (WebCore::MediaControlRootElementChromium::reset):
        (WebCore::MediaControlRootElementChromium::playbackStarted):
        (WebCore::MediaControlRootElementChromium::playbackProgressed):
        (WebCore::MediaControlRootElementChromium::playbackStopped):
        (WebCore::MediaControlRootElementChromium::updateTimeDisplay):
        (WebCore::MediaControlRootElementChromium::defaultEventHandler):
        (WebCore::MediaControlRootElementChromium::changedVolume):
        (WebCore::MediaControlRootElementChromium::showVolumeSlider):
        * html/shadow/MediaControlRootElementChromium.h:

        The following functions set the current MediaControllerInterface.
        * html/shadow/MediaControlRootElement.cpp:
        (WebCore::MediaControlRootElement::setMediaController):
        * html/shadow/MediaControlElements.h:
        (WebCore::MediaControlElement::setMediaController):
        (WebCore::MediaControlElement::mediaController):
        (WebCore::MediaControlInputElement::setMediaController):
        (WebCore::MediaControlInputElement::mediaController):
        * html/shadow/MediaControlRootElementChromium.cpp:
        (WebCore::MediaControlRootElementChromium::setMediaController):

2011-12-02  Stephen Chenney  <schenney@chromium.org>

        REGRESSION (r91125): Polyline tool in google docs is broken
        https://bugs.webkit.org/show_bug.cgi?id=65796

        Reviewed by Darin Adler.

        Work around a bug in CoreGraphics, that caused incorrect bounds for paths
        consisting only of move-to elements. This causes problems in SVG, when the enormous
        bounds prevented the drawing of things behind.

        Tests: svg/custom/path-moveto-only-rendering.svg
               svg/custom/subpaths-moveto-only-rendering.svg

        * platform/graphics/cg/PathCG.cpp:
        (WebCore::PathIsEmptyOrSingleMoveTester::PathIsEmptyOrSingleMoveTester): Class to
        test for isEmpty accoridng ot the same rules as other platforms.
        (WebCore::PathIsEmptyOrSingleMoveTester::isEmpty): Query the result
        (WebCore::PathIsEmptyOrSingleMoveTester::testPathElement): Path iterator method
        (WebCore::PathHasOnlyMoveToTester::PathHasOnlyMoveToTester): Class to test whether a
        path contains only move-to elements, and hence should have null bounds.
        (WebCore::PathHasOnlyMoveToTester::hasOnlyMoveTo): Query the result
        (WebCore::PathHasOnlyMoveToTester::testPathElement): Path iterator method.
        (WebCore::Path::boundingRect): Modified to check for move-to only paths
        (WebCore::Path::fastBoundingRect): Modified to check for move-to only paths
        (WebCore::Path::isEmpty): Now uses the method that matches other platforms.

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

        Unreviewed, rolling out r101794.
        http://trac.webkit.org/changeset/101794
        https://bugs.webkit.org/show_bug.cgi?id=73656

        Broke win build (Requested by vsevik on #webkit).

        * bindings/js/ScriptCallStackFactory.cpp:
        * bindings/js/ScriptCallStackFactory.h:
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateParametersCheck):
        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateFunctionCallback):
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::jsTestObjPrototypeFunctionCustomArgsAndException):
        * bindings/scripts/test/V8/V8TestObj.cpp:
        (WebCore::TestObjInternal::customArgsAndExceptionCallback):
        * bindings/v8/ScriptCallStackFactory.cpp:
        * bindings/v8/ScriptCallStackFactory.h:
        * inspector/InspectorInstrumentation.cpp:
        * inspector/InspectorInstrumentation.h:
        * inspector/WorkerInspectorController.h:
        * page/Console.cpp:
        (WebCore::Console::shouldCaptureFullStackTrace):
        * page/Console.h:

2011-12-02  Raphael Kubo da Costa  <kubo@profusion.mobi>

        Unreviewed, revert r101347.
        https://bugs.webkit.org/show_bug.cgi?id=73580

        It breaks the linking of Tools/ targets due to missing functions.

        * PlatformEfl.cmake:
        * platform/graphics/GraphicsLayer.cpp:
        * platform/graphics/GraphicsLayer.h:
        * platform/graphics/efl/GraphicsLayerEfl.cpp: Added.
        (WebCore::GraphicsLayer::create):
        (WebCore::GraphicsLayerEfl::GraphicsLayerEfl):
        (WebCore::GraphicsLayerEfl::~GraphicsLayerEfl):
        (WebCore::GraphicsLayerEfl::setNeedsDisplay):
        (WebCore::GraphicsLayerEfl::setNeedsDisplayInRect):
        * platform/graphics/efl/GraphicsLayerEfl.h: Added.
        * platform/graphics/texmap/TextureMapperNode.cpp:
        (WebCore::solveCubicBezierFunction):
        (WebCore::solveStepsFunction):

2011-12-01  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Extract default call stack creation and check for front-end from console.
        https://bugs.webkit.org/show_bug.cgi?id=73566

        Reviewed by Yury Semikhatsky.

        * bindings/js/ScriptCallStackFactory.cpp:
        (WebCore::createScriptCallStack):
        * bindings/js/ScriptCallStackFactory.h:
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateParametersCheck):
        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateFunctionCallback):
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::jsTestObjPrototypeFunctionCustomArgsAndException):
        * bindings/scripts/test/V8/V8TestObj.cpp:
        (WebCore::TestObjInternal::customArgsAndExceptionCallback):
        * bindings/v8/ScriptCallStackFactory.cpp:
        (WebCore::createScriptCallStack):
        * bindings/v8/ScriptCallStackFactory.h:
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::hasFrontendForScriptContext):
        * inspector/InspectorInstrumentation.h:
        (WebCore::InspectorInstrumentation::hasFrontendForScriptContext):
        * inspector/WorkerInspectorController.h:
        (WebCore::WorkerInspectorController::hasFrontend):
        * page/Console.cpp:
        * page/Console.h:

2011-12-02  Gavin Peters  <gavinp@chromium.org>

        Remove instrumentation tracking a fixed bug
        https://bugs.webkit.org/show_bug.cgi?id=73471

        The underlying bug is fixed (bug 72068), and this instrumentation was intrusive and using
        memory, plus the conditional compilation made me sad.

        Reviewed by Nate Chapin.

        No new tests.

        * dom/ScriptElement.cpp:
        (WebCore::ScriptElement::ScriptElement):
        (WebCore::ScriptElement::requestScript):
        (WebCore::ScriptElement::stopLoadRequest):
        (WebCore::ScriptElement::notifyFinished):
        * dom/ScriptElement.h:
        * dom/ScriptRunner.cpp:
        (WebCore::ScriptRunner::queueScriptForExecution):

2011-12-02  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Split view works weirdly in network panel when resizing, showing/hiding main element.
        https://bugs.webkit.org/show_bug.cgi?id=73650

        Reviewed by Pavel Feldman.

        * inspector/front-end/SplitView.js:
        (WebInspector.SplitView.prototype._updateResizer):
        (WebInspector.SplitView.prototype.hideMainElement):
        (WebInspector.SplitView.prototype.showMainElement):
        (WebInspector.SplitView.prototype.onResize):
        (WebInspector.SplitView.prototype._restoreSidebarWidth):

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

        Unreviewed, rolling out r101783.
        http://trac.webkit.org/changeset/101783
        https://bugs.webkit.org/show_bug.cgi?id=73652

        Broke chromium win build. (Requested by vsevik on #webkit).

        * WebCore.gyp/WebCore.gyp:
        * WebCore.gyp/scripts/action_derivedsourcesallinone.py:
        (main):
        * WebCore.gypi:
        * bindings/scripts/generate-bindings.pl:
        * page/DOMWindow.idl:
        * webaudio/DOMWindowWebAudio.idl: Removed.

2011-11-28  Alexander Pavlov  <apavlov@chromium.org>

        Inline non-replaced elements are reported to have zero width and height
        https://bugs.webkit.org/show_bug.cgi?id=61117

        Reviewed by Antti Koivisto.

        According to http://www.w3.org/TR/CSS21/visudet.html, the "width" and "height" properties
        do not apply for inline non-replaced elements and should have their initial value of "auto"
        as their computed values.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):

2011-12-02  Sami Kyostila  <skyostil@chromium.org>

        [chromium] Make CCInputHandler scrolling stateful
        https://bugs.webkit.org/show_bug.cgi?id=73345

        This change makes the scrolling part of CCInputHandler stateful by
        replacing scrollRootLayer() with scrollBegin(), scrollBy() and
        scrollEnd(). This is done in preparation for scrollable sublayers.
        Specifically, scrollBegin() will allow CCLayerTreeHostImpl to perform
        input event hit testing to find the layer to be scrolled.

        Reviewed by Steve Block.

        Tested in CCLayerTreeHostImplTest.

        * platform/graphics/chromium/cc/CCInputHandler.h:
        * platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:
        (WebCore::CCLayerTreeHostImpl::CCLayerTreeHostImpl):
        (WebCore::CCLayerTreeHostImpl::currentTimeMs):
        (WebCore::CCLayerTreeHostImpl::setNeedsRedraw):
        (WebCore::findInnermostScrollableLayerAtPoint):
        (WebCore::CCLayerTreeHostImpl::scrollBegin):
        (WebCore::CCLayerTreeHostImpl::scrollBy):
        * platform/graphics/chromium/cc/CCLayerTreeHostImpl.h:

2011-12-02  Kentaro Hara  <haraken@chromium.org>

        Use the [Supplemental] IDL for webaudio attributes in Chromium
        https://bugs.webkit.org/show_bug.cgi?id=73394

        Reviewed by Adam Barth.

        - Overview: Using the [Supplemental] IDL, this patch moves the attribute
        declarations of webaudio from DOMWindow.idl into a new IDL file
        webaudio/DOMWindowWebAudio.idl, which helps make webaudio a self-contained
        feature (aka a module).

        - This patch changes the build flow of WebCore.gyp as follows:

            Previous build flow:
                foreach $idl (all IDL files) {
                    generate-bindings.pl depends on $idl;
                    generate-bindings.pl reads $idl;
                    generate-bindings.pl generates .h and .cpp files for $idl;
                }

            New build flow (See the discussions in bug 72138 for more details):
                resolve-supplemental.pl depends on all IDL files;
                resolve-supplemental.pl reads all IDL files;
                resolve-supplemental.pl resolves the dependency of [Supplemental=XXXX];
                resolve-supplemental.pl outputs supplemental_dependency.tmp;
                foreach $idl (all IDL files) {
                    generate-bindings.pl depends on $idl and supplemental_dependency.tmp;
                    generate-bindings.pl reads $idl;
                    generate-bindings.pl reads supplemental_dependency.tmp;
                    generate-bindings.pl generates .h and .cpp files for $idl, including all attributes in IDL files whilementing $idl;
                }

        - This patch introduces a temporary IDL, [Supplemented]. The [Supplemented] IDL
        will be removed after build scripts for all platforms support the [Supplemental] IDL.
        The motivation for the [Supplemented] IDL is as follows:

        In order to support the [Supplemental] IDL, we need to
        (1) run resolve-supplemental.pl and generate supplemental_dependency.tmp
        (2) and run generate-bindings.pl with the supplemental_dependency.tmp.

        This build flow requires a change on the following build scripts,
        but changing all the build scripts all at once without any regression is too difficult:

            - DerivedSources.make
            - DerivedSources.pri
            - GNUmakefile.am
            - PlatformBlackBerry.cmake
            - UseJSC.cmake
            - UseV8.cmake
            - WebCore.vcproj/MigrateScripts
            - WebCore.vcproj/WebCore.vcproj
            - bindings/gobject/GNUmakefile.am
            - WebCore.gyp/WebCore.gyp

        Thus, we are planning to change the build scripts one by one, which implies that
        we need to allow the temporary state in which some build scripts support [Supplemental] IDL
        but others do not. To accomplish this, we introduce a temporary IDL, [Supplemented].
        The [Supplemented] IDL on an attribute means that the attribute is marked with [Supplemental]
        in another IDL file somewhere, like this:

            DOMWindowWebAudio.idl:
                interface [
                    Supplemental=DOMWindow
                ] DOMWindowWebAudio {
                    attribute attr1;
                    attribute attr2;
                };

            DOMWindow.idl:
                interface [
                ] DOMWindow {
                    attribute [Supplemented] attr1; // This line will be removed after all build scripts support the [Su IDL
                    attribute [Supplemented] attr2; // This line will be removed after all build scripts support the [Su IDL.
                    attribute attr3;
                    attribute attr4;
                };

        Assuming these IDL files, this patch implements the following logic in generate-bindings.pl:

            - If a given build script supports the [Supplemental] IDL,
            generate-bindings.pl ignores all attributes with the [Supplemented] IDL.
            - Otherwise, generate-bindings.pl treats all attributes with the [Supplemented] IDL
            as normal attributes and instead ignores all attributes with the [Supplemental] IDL
            (i.e. generate-bindings.pl generates nothing from the IDL file with the [Supplemental] IDL).

        Tests: webaudio/*

        * WebCore.gyp/WebCore.gyp: Describes the build flow that I described above.
        * WebCore.gyp/scripts/action_derivedsourcesallinone.py:
        (main): Reads the IDL file names from the input file (i.e. supplemental_dependency.tmp), which are described at the first column of each line in the input file.
        * WebCore.gypi: Added DOMWindowWebAudio.idl.
        * bindings/scripts/generate-bindings.pl: As a temporary solution, if the platform does not support the [Supplemental] IDL, the perl script ignores the [Supplemental] IDL and instead uses the [Supplemented] IDL. Otherwise, the perl script ignores the [Supplemented] IDL and instead uses the [Supplemental] IDL.
        * page/DOMWindow.idl: Added the [Supplemented] IDL to webaudio-related attributes. As I described above, the [Supplemented] IDL will be removed after all platforms support the [Supplemental] IDL.
        * webaudio/DOMWindowWebAudio.idl: Added. Describes the [Supplemental=DOMWindow] IDL. The attributes in this IDL file should be treated as if they are written in DOMWindow.idl.

2011-12-02  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Network panel row highlighting does not work.
        https://bugs.webkit.org/show_bug.cgi?id=73644

        Reviewed by Pavel Feldman.

        * inspector/front-end/networkLogView.css:
        (.network-log-grid tr.highlighted-row):
        (from):
        (to):

2011-12-02  Pavel Feldman  <pfeldman@google.com>

        Not reviewed: remove console.timeStamp from the inspector backend dispatcher.

        * inspector/front-end/InspectorBackend.js:
        (InspectorBackendClass.prototype.sendMessageObjectToBackend):

2011-12-02  Hajime Morrita  <morrita@chromium.org>

        Unreviewed, rolling out r101751 and r101775.
        http://trac.webkit.org/changeset/101751
        http://trac.webkit.org/changeset/101775
        https://bugs.webkit.org/show_bug.cgi?id=73191

        breaks Windows build

        * ForwardingHeaders/runtime/JSExportMacros.h: Removed.
        * ForwardingHeaders/wtf/ExportMacros.h: Removed.
        * WebCore.vcproj/QTMovieWinCommon.vsprops:
        * WebCore.xcodeproj/project.pbxproj:
        * config.h:
        * platform/PlatformExportMacros.h: Removed.

2011-12-02  Pavel Feldman  <pfeldman@google.com>

        Web Inspector: introduce backend stub generation from JSON for the standalone development / remote front-ends.
        https://bugs.webkit.org/show_bug.cgi?id=73636

        Reviewed by Yury Semikhatsky.

        * inspector/front-end/DOMStorage.js:
        * inspector/front-end/Database.js:
        * inspector/front-end/InspectorBackend.js:
        (InspectorBackendClass):
        (InspectorBackendClass.prototype.registerCommand):
        (InspectorBackendClass.prototype.registerEvent):
        (InspectorBackendClass.prototype.runAfterPendingDispatches):
        (InspectorBackendClass.prototype.loadFromJSONIfNeeded):
        * inspector/front-end/TimelineManager.js:
        * inspector/front-end/inspector.js:

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

        Unreviewed, another attempt to build fix for r101751:
        Adding an include path to make PlatformExportMacros.h visibile from QTMovieWin.

        * WebCore.vcproj/QTMovieWinCommon.vsprops:

2011-12-02  Hajime Morrita  <morrita@chromium.org>

        Unreviewed, rolling out r101772.
        http://trac.webkit.org/changeset/101772

        It didn't fix the build failure

        * WebCore.vcproj/QTMovieWinCommon.vsprops:

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

        Unreviewed attempt to build fix for r101751:
        Adding an include path to make PlatformExportMacros.h visibile from QTMovieWin.

        * WebCore.vcproj/QTMovieWinCommon.vsprops:

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

        Web Inspector: [Extensions API] pass preferred resource line number to extension's open resource handler
        https://bugs.webkit.org/show_bug.cgi?id=73084

        Reviewed by Pavel Feldman.

        * inspector/front-end/ExtensionAPI.js:
        (injectedExtensionAPI.Panels.prototype.setOpenResourceHandler.else.callbackWrapper):
        (injectedExtensionAPI.Panels.prototype.setOpenResourceHandler):
        * inspector/front-end/ExtensionServer.js:
        (WebInspector.ExtensionServer.prototype._handleOpenURL):
        * inspector/front-end/HandlerRegistry.js:
        (get WebInspector.HandlerRegistry.prototype.set dispatch):
        * inspector/front-end/JavaScriptSourceFrame.js:
        (WebInspector.JavaScriptSourceFrame.prototype.populateTextAreaContextMenu):
        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.FrameResourceTreeElement.prototype._handleContextMenuEvent):
        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame.prototype.populateLineGutterContextMenu):
        (WebInspector.SourceFrame.prototype.populateTextAreaContextMenu):
        (WebInspector.TextViewerDelegateForSourceFrame.prototype.populateLineGutterContextMenu):
        (WebInspector.TextViewerDelegateForSourceFrame.prototype.populateTextAreaContextMenu):
        * inspector/front-end/TextViewer.js:
        (WebInspector.TextViewer.prototype._contextMenu):
        (WebInspector.TextViewerDelegate.prototype.populateLineGutterContextMenu):
        (WebInspector.TextViewerDelegate.prototype.populateTextAreaContextMenu):
        * inspector/front-end/externs.js:
        (WebInspector.populateResourceContextMenu):
        * inspector/front-end/inspector.js:
        (WebInspector.populateResourceContextMenu):
        (WebInspector._showAnchorLocation):

2011-12-01  Nayan Kumar K  <nayankk@motorola.com>

        [GTK] Add compilation options to enable/disable Accelerated Compositing and to choose texture mapper implementation.
        https://bugs.webkit.org/show_bug.cgi?id=73458

        Reviewed by Martin Robinson.

        No new tests added as this patch doesn't affect any functionality.

        * GNUmakefile.am: Guard the include files.
        * GNUmakefile.list.am: Guard the compilation of few files.
        * platform/graphics/GraphicsLayer.h: Guard the typedef of GraphicsLayer.

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

        Web Inspector: use object properties, not element attributes to pass preferred panel/line/request id in linkified anchors
        https://bugs.webkit.org/show_bug.cgi?id=73556

        Reviewed by Pavel Feldman.

        * inspector/front-end/AuditFormatters.js:
        (WebInspector.AuditFormatters.resourceLink):
        * inspector/front-end/ConsoleMessage.js:
        (WebInspector.ConsoleMessageImpl.prototype._formatMessage.else.else.linkifier):
        (WebInspector.ConsoleMessageImpl.prototype._formatMessage):
        * inspector/front-end/DebuggerPresentationModel.js:
        (WebInspector.DebuggerPresentationModel.Linkifier.prototype.linkifyLocation):
        (WebInspector.DebuggerPresentationModel.Linkifier.prototype._updateAnchor):
        * inspector/front-end/NetworkPanel.js:
        (WebInspector.NetworkPanel.prototype._resourceByAnchor):
        (WebInspector.NetworkDataGridNode.prototype._refreshInitiatorCell):
        * inspector/front-end/ResourceUtils.js:
        (WebInspector.linkifyStringAsFragment):
        (WebInspector.linkifyResourceAsNode):
        (WebInspector.linkifyRequestAsNode):
        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.ResourcesPanel.prototype.showAnchorLocation):
        * inspector/front-end/inspector.js:
        (WebInspector._showAnchorLocation):

2011-12-02  Pavel Feldman  <pfeldman@google.com>

        Web Inspector: refactor InspectorBackendDispatcher so that it does not use JSON-serialized command templates.
        https://bugs.webkit.org/show_bug.cgi?id=73569

        Reviewed by Yury Semikhatsky.

        * inspector/CodeGeneratorInspector.py:
        (Generator.process_command):
        * inspector/Inspector.json:
        * inspector/front-end/InspectorBackend.js:
        (InspectorBackendClass.prototype._wrap.callback):
        (InspectorBackendClass.prototype._wrap):
        (InspectorBackendClass.prototype.registerCommand):
        (InspectorBackendClass.prototype._invoke):
        (InspectorBackendClass.prototype._sendMessageToBackend):
        (InspectorBackendClass.prototype._wrapCallbackAndSendMessageObject):

2011-12-02  Yosifumi Inoue  <yosin@chromium.org>

        Range sliders and spin buttons don't work with multi-columns.
        https://bugs.webkit.org/show_bug.cgi?id=70898

        Reviewed by Dan Bernstein.

        This patch makes RenderBlock::hitTestColumns and
        RenderBoxModelObject::mapAbsoluteToLocal to handle point
        in multi-column same logic.

        In multi-column, coordinate of box model rendering object is different
        from absolute coordinate.. Columns in box model rendering object spans
        vertically rather than horizontally.

        When absolute point is represented in (column[i]+dx, column[0]+dy),
        it is (column[0]+dx, column[0] + columnHeight + dy) in box model
        rendering object coordinate.

        Tests: fast/events/document-elementFromPoint.html
               fast/events/offsetX-offsetY.html
               fast/forms/number/spin-in-multi-column.html
               fast/forms/range/slider-in-multi-column.html
               fast/forms/select/listbox-in-multi-column.html

        * rendering/RenderBlock.cpp:
        (WebCore::ColumnRectIterator::ColumnRectIterator): Added
        (WebCore::ColumnRectIterator::advance): Added
        (WebCore::ColumnRectIterator::columnRect): Added
        (WebCore::ColumnRectIterator::hasMore): Added
        (WebCore::ColumnRectIterator::adjust): Added
        (WebCore::ColumnRectIterator::update): Added
        (WebCore::RenderBlock::hitTestColumns): Use ColumnRectIterator.
        (WebCore::RenderBlock::adjustForColumnRect): Added
        * rendering/RenderBlock.h: Add adjustForColumnRect.
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::mapAbsoluteToLocalPoint): Call RenderBoxModelObject::mapAbsoluteToLocalPoint.
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::mapAbsoluteToLocalPoint): Move from RenderInline::mapAbsoluteToLocalPoint and call RenderBlock::adjustForColumnRect.
        * rendering/RenderBoxModelObject.h: add mapAbsoluteToLocalPoint.
        * rendering/RenderInline.cpp: Move mapAbsoluteToLocalPoint to RenderBoxModelObject.
        * rendering/RenderInline.h: remove mapAbsoluteToLocalPoint.

2011-12-02  Pavel Feldman  <pfeldman@google.com>

        InspectorController destruction order leads to use-after-free
        https://bugs.webkit.org/show_bug.cgi?id=73582

        Reviewed by Yury Semikhatsky.

        * inspector/InspectorBaseAgent.h:
        (WebCore::InspectorBaseAgentInterface::discardAgent):
        * inspector/InspectorCSSAgent.cpp:
        (WebCore::InspectorCSSAgent::~InspectorCSSAgent):
        (WebCore::InspectorCSSAgent::discardAgent):
        * inspector/InspectorCSSAgent.h:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::~InspectorController):
        * inspector/InspectorDOMDebuggerAgent.cpp:
        (WebCore::InspectorDOMDebuggerAgent::~InspectorDOMDebuggerAgent):
        (WebCore::InspectorDOMDebuggerAgent::discardAgent):
        * inspector/InspectorDOMDebuggerAgent.h:

2011-12-02  Leo Yang  <leo.yang@torchmobile.com.cn>

        image element with src attribute can't be replaced by content: url() style
        https://bugs.webkit.org/show_bug.cgi?id=42840

        ImageLoader were updating renderer even if the renderer's image is
        style generated content. This was wrong because if an image element
        with src attribute and style="content: url(...)" attribute the
        src image might override content image. The correct behavior should
        be showing content image.

        This patch is differentiating style generated RenderImage from the
        normal RenderImage and keeps the RenderImageSource untouched if the
        renderer is generated content.

        Reviewed by Darin Adler.

        Test: fast/images/image-css3-content-data.html

        * loader/ImageLoader.cpp:
        (WebCore::ImageLoader::renderImageResource):
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::RenderImage):
        * rendering/RenderImage.h:
        (WebCore::RenderImage::setIsGeneratedContent):
        (WebCore::RenderImage::isGeneratedContent):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::createObject):

2011-12-01  David Levin  <levin@chromium.org>

        Add a way to automatically size a single frame to fit its content.
        https://bugs.webkit.org/show_bug.cgi?id=73420

        Reviewed by Dmitry Titov.

        No new functionality exposed so no new tests. (There is a Chromium
        specific test in https://bugs.webkit.org/show_bug.cgi?id=73058.)

        * page/FrameView.cpp:
        (WebCore::FrameView::FrameView): Initialized the new variables.
        (WebCore::FrameView::layout):
        (WebCore::FrameView::autoSizeIfEnabled):
        (WebCore::FrameView::enableAutoSizeMode):
        * page/FrameView.h:

2011-12-01  Hajime Morrita  <morrita@chromium.org>

        JS_INLINE and WTF_INLINE should be visible from WebCore
        https://bugs.webkit.org/show_bug.cgi?id=73191

        Reviewed by Kevin Ollivier.

        - Moved export related definitions from config.h
          to ExportMacros.h, JSExportMacros.h and PlatformExportMacros.h
        - Added forwarding headers which are referred from config.h

        No new tests. Only build related changes.

        * ForwardingHeaders/runtime/JSExportMacros.h: Added.
        * ForwardingHeaders/wtf/ExportMacros.h: Added.
        * WebCore.xcodeproj/project.pbxproj:
        * config.h:
        * platform/PlatformExportMacros.h: Copied from Source/JavaScriptCore/wtf/ExportMacros.h.

2011-12-01  Jon Lee  <jonlee@apple.com>

        [WK2] Add further support for notifications
        https://bugs.webkit.org/show_bug.cgi?id=73572
        <rdar://problem/10472195>

        Reviewed by Darin Adler.

        * WebCore.exp.in: Export constructor and dispatch functions
        * dom/EventNames.h: Add show event.
        * notifications/Notification.cpp:
        (WebCore::Notification::show): For the Mac platform, we just forward the show() call to the
        notification client and update the state, because we cannot get synchronous acknowledgment that the
        notification got delivered.
        (WebCore::Notification::dispatchShowEvent): Create simple events and dispatch to the notification.
        (WebCore::Notification::dispatchClickEvent): Ditto.
        (WebCore::Notification::dispatchCloseEvent): Ditto.
        (WebCore::Notification::dispatchErrorEvent): Ditto.
        * notifications/Notification.h: Add dispatch functions.
        * notifications/Notification.idl: Add onshow event listener. The ondisplay event listener should be
        removed when implementations change the event listener to onshow.

2011-12-01  Max Vujovic  <mvujovic@adobe.com>

        Focus ring of imagemap's area element does not scale when CSS zoom style is applied
        https://bugs.webkit.org/show_bug.cgi?id=73595

        Reviewed by Darin Adler.

        Tests: fast/images/imagemap-focus-ring-zoom-style-expected.html
               fast/images/imagemap-focus-ring-zoom-style.html

        * html/HTMLAreaElement.cpp:
        (WebCore::HTMLAreaElement::computePath):
        The computePath method now uses the RenderObject's effectiveZoom 
        instead of the Frame's page zoom to compute the path for the area
        element's focus ring.

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

        REGRESSION(r90971): Placeholder text of input control is rendered
        over positioned elements with z-index:0.
        https://bugs.webkit.org/show_bug.cgi?id=67408

        Reviewed by Darin Adler.

        The bug was caused by "position:relative" in the default style of
        -webkit-input-placeholder. If there were other positioned elements
        with z-index:0, a placeholder might be rendered over them.

        "position:relative" is not needed because RenderTextControlSingleLine
        and RenderTextControlMultipleLine lay out the placeholder renderer by
        custom layout code.

        Tests: fast/forms/placeholder-with-positioned-element.html

        * css/html.css:
        (::-webkit-input-placeholder): Remove position:relative.

2011-12-01  Andreas Kling  <kling@webkit.org>

        CSSMutableStyleDeclaration: Removed unused multiLength argument in setLengthProperty().
        <http://webkit.org/b/73602>

        Reviewed by Darin Adler.

        * css/CSSMutableStyleDeclaration.cpp:
        (WebCore::CSSMutableStyleDeclaration::setLengthProperty):
        * css/CSSMutableStyleDeclaration.h:

2011-12-01  Kentaro Hara  <haraken@chromium.org>

        Unreviewed, rolling out r101737.
        http://trac.webkit.org/changeset/101737
        https://bugs.webkit.org/show_bug.cgi?id=73394

        Chromium/Mac and Chromium/Win build are broken

        * WebCore.gyp/WebCore.gyp:
        * WebCore.gyp/scripts/action_derivedsourcesallinone.py:
        (main):
        * WebCore.gypi:
        * bindings/scripts/generate-bindings.pl:
        * page/DOMWindow.idl:
        * webaudio/DOMWindowWebAudio.idl: Removed.

2011-12-01  Kentaro Hara  <haraken@chromium.org>

        Use the [Supplemental] IDL for webaudio attributes in Chromium
        https://bugs.webkit.org/show_bug.cgi?id=73394

        Reviewed by Adam Barth.

        - Overview: Using the [Supplemental] IDL, this patch moves the attribute
        declarations of webaudio from DOMWindow.idl into a new IDL file
        webaudio/DOMWindowWebAudio.idl, which helps make webaudio a self-contained
        feature (aka a module).

        - This patch changes the build flow of WebCore.gyp as follows:

            Previous build flow:
                foreach $idl (all IDL files) {
                    generate-bindings.pl depends on $idl;
                    generate-bindings.pl reads $idl;
                    generate-bindings.pl generates .h and .cpp files for $idl;
                }

            New build flow (See the discussions in bug 72138 for more details):
                resolve-supplemental.pl depends on all IDL files;
                resolve-supplemental.pl reads all IDL files;
                resolve-supplemental.pl resolves the dependency of [Supplemental=XXXX];
                resolve-supplemental.pl outputs supplemental_dependency.tmp;
                foreach $idl (all IDL files) {
                    generate-bindings.pl depends on $idl and supplemental_dependency.tmp;
                    generate-bindings.pl reads $idl;
                    generate-bindings.pl reads supplemental_dependency.tmp;
                    generate-bindings.pl generates .h and .cpp files for $idl, including all attributes in IDL files whilementing $idl;
                }

        - This patch introduces a temporary IDL, [Supplemented]. The [Supplemented] IDL
        will be removed after build scripts for all platforms support the [Supplemental] IDL.
        The motivation for the [Supplemented] IDL is as follows:

        In order to support the [Supplemental] IDL, we need to
        (1) run resolve-supplemental.pl and generate supplemental_dependency.tmp
        (2) and run generate-bindings.pl with the supplemental_dependency.tmp.

        This build flow requires a change on the following build scripts,
        but changing all the build scripts all at once without any regression is too difficult:

            - DerivedSources.make
            - DerivedSources.pri
            - GNUmakefile.am
            - PlatformBlackBerry.cmake
            - UseJSC.cmake
            - UseV8.cmake
            - WebCore.vcproj/MigrateScripts
            - WebCore.vcproj/WebCore.vcproj
            - bindings/gobject/GNUmakefile.am
            - WebCore.gyp/WebCore.gyp

        Thus, we are planning to change the build scripts one by one, which implies that
        we need to allow the temporary state in which some build scripts support [Supplemental] IDL
        but others do not. To accomplish this, we introduce a temporary IDL, [Supplemented].
        The [Supplemented] IDL on an attribute means that the attribute is marked with [Supplemental]
        in another IDL file somewhere, like this:

            DOMWindowWebAudio.idl:
                interface [
                    Supplemental=DOMWindow
                ] DOMWindowWebAudio {
                    attribute attr1;
                    attribute attr2;
                };

            DOMWindow.idl:
                interface [
                ] DOMWindow {
                    attribute [Supplemented] attr1; // This line will be removed after all build scripts support the [Su IDL
                    attribute [Supplemented] attr2; // This line will be removed after all build scripts support the [Su IDL.
                    attribute attr3;
                    attribute attr4;
                };

        Assuming these IDL files, this patch implements the following logic in generate-bindings.pl:

            - If a given build script supports the [Supplemental] IDL,
            generate-bindings.pl ignores all attributes with the [Supplemented] IDL.
            - Otherwise, generate-bindings.pl treats all attributes with the [Supplemented] IDL
            as normal attributes and instead ignores all attributes with the [Supplemental] IDL
            (i.e. generate-bindings.pl generates nothing from the IDL file with the [Supplemental] IDL).

        Tests: webaudio/*

        * WebCore.gyp/WebCore.gyp: Describes the build flow that I described above.
        * WebCore.gyp/scripts/action_derivedsourcesallinone.py:
        (main): Reads the IDL file names from the input file (i.e. supplemental_dependency.tmp), which are described at the first column of each line in the input file.
        * WebCore.gypi: Added DOMWindowWebAudio.idl.
        * bindings/scripts/generate-bindings.pl: As a temporary solution, if the platform does not support the [Supplemental] IDL, the perl script ignores the [Supplemental] IDL and instead uses the [Supplemented] IDL. Otherwise, the perl script ignores the [Supplemented] IDL and instead uses the [Supplemental] IDL.
        * page/DOMWindow.idl: Added the [Supplemented] IDL to webaudio-related attributes. As I described above, the [Supplemented] IDL will be removed after all platforms support the [Supplemental] IDL.
        * webaudio/DOMWindowWebAudio.idl: Added. Describes the [Supplemental=DOMWindow] IDL. The attributes in this IDL file should be treated as if they are written in DOMWindow.idl.

2011-12-01  Rafael Weinstein  <rafaelw@chromium.org>

        [MutationObservers] StyleAttributeMutationScope shouldn't be implemented with static classes
        https://bugs.webkit.org/show_bug.cgi?id=73596

        Reviewed by Ojan Vafai.

        No tests needed. This patch is a minor refactor.

        * css/CSSMutableStyleDeclaration.cpp:

2011-12-01  Andreas Kling  <kling@webkit.org>

        CSSMutableStyleDeclaration: Remove unused function setStringProperty().
        <http://webkit.org/b/73597>

        Reviewed by Darin Adler.

        * css/CSSMutableStyleDeclaration.cpp:
        * css/CSSMutableStyleDeclaration.h:

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

        REGRESSION(r101268): Intermittent assertion failure in fast/block/child-not-removed-from-parent-lineboxes-crash.html
        https://bugs.webkit.org/show_bug.cgi?id=73250

        Reviewed by Darin Adler.

        Reset the position when exiting early in layoutRunsAndFloatsInRange.

        No new tests because we don't have a reliable reproduction for this failure.
        However, the failure is caught by the existing fast/block/child-not-removed-from-parent-lineboxes-crash.html
        intermittently with about 30% probability.

        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::layoutRunsAndFloatsInRange):

2011-12-01  Shinya Kawanaka  <shinyak@google.com>

        Asynchronous SpellChecker should consider multiple requests.
        https://bugs.webkit.org/show_bug.cgi?id=72939

        Reviewed by Hajime Morita.

        Now SpellChecker saves a request when it is processing the previous spellcheck request.
        If there is a request having the same root editable element, the older request is replaced by newer request.

        Test: editing/spelling/spellcheck-queue.html

        * editing/SpellChecker.cpp:
        (WebCore::SpellChecker::SpellCheckRequest::SpellCheckRequest):
          A structure to have spell check request.
        (WebCore::SpellChecker::SpellCheckRequest::sequence):
        (WebCore::SpellChecker::SpellCheckRequest::range):
        (WebCore::SpellChecker::SpellCheckRequest::text):
        (WebCore::SpellChecker::SpellCheckRequest::mask):
        (WebCore::SpellChecker::SpellCheckRequest::rootEditableElement):
        (WebCore::SpellChecker::SpellChecker):
        (WebCore::SpellChecker::createRequest):
        (WebCore::SpellChecker::timerFiredToProcessQueuedRequest):
          When timer is fired, queued request is processed if any.
        (WebCore::SpellChecker::canCheckAsynchronously):
        (WebCore::SpellChecker::requestCheckingFor):
          When the spellchecker is processing another request, the latest request is queued.
        (WebCore::SpellChecker::invokeRequest):
        (WebCore::SpellChecker::enqueueRequest):
          Enqueues a request. If there is an older request whose root editable element is the same as the request,
          it will be replaced.
        (WebCore::SpellChecker::didCheck):
        * editing/SpellChecker.h:

2011-12-01  Takashi Toyoshima  <toyoshim@chromium.org>

        bufferedAmount calculation is wrong in CLOSING and CLOSED state.
        https://bugs.webkit.org/show_bug.cgi?id=73404

        Reviewed by Kent Tamura.

        WebSocket::bufferedAmount() must return buffered frame size including
        disposed frames which are passed via send() calls after close().

        Old implementation had a problem at CLOSING state. Buffered frame size
        was added to m_bufferedAmountAfterClose at close(). But the function
        returns the sum of m_bufferedAmountAfterClose and internally buffered
        frame size, or m_channel->bufferedAmount(). So, buffered frames was
        double counted.

        In new implementation, m_bufferedAmount always represents buffered
        frame size and m_bufferedAmountAfterClose does disposed frame size.
        As a result, bufferedAmount() implementation become just to return the
        sum of m_bufferedAmount and m_bufferedAmountAfterClose.

        Test: http/tests/websocket/tests/hybi/bufferedAmount-after-close-in-busy.html

        * websockets/WebSocket.cpp: Implement new bufferedAmount handling.
        (WebCore::saturateAdd):
        (WebCore::WebSocket::WebSocket):
        (WebCore::WebSocket::send):
        (WebCore::WebSocket::close):
        (WebCore::WebSocket::bufferedAmount):
        (WebCore::WebSocket::didUpdateBufferedAmount):
        (WebCore::WebSocket::didClose):
        * websockets/WebSocket.h:

2011-12-01  Kentaro Hara  <haraken@chromium.org>

        Replace a custom constructor of window.Option with the [NamedConstructor] IDL
        https://bugs.webkit.org/show_bug.cgi?id=73498

        Reviewed by Adam Barth.

        Removes JSOptionConstructor.{h,cpp} and generates the constructor of window.Option
        by the [NamedConstructor] IDL.

        Tests: fast/js/custom-constructors.html
               fast/forms/option-index.html
               fast/forms/add-and-remove-option.html
               fast/dom/dom-add-optionelement.html

        * GNUmakefile.list.am: Removed JSOptionConstructor.{h,cpp}.
        * Target.pri: Ditto.
        * UseJSC.cmake: Ditto.
        * WebCore.gypi: Ditto.
        * WebCore.order: Ditto.
        * WebCore.vcproj/WebCore.vcproj: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Ditto.
        * bindings/js/JSBindingsAllInOne.cpp: Ditto.

        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::option): Specifies the NamedConstructor.
        * bindings/js/JSOptionConstructor.cpp: Removed.
        * bindings/js/JSOptionConstructor.h: Removed.
        * page/DOMWindow.idl: Removed the [JSCustomConstructor] IDL.

2011-12-01  Kentaro Hara  <haraken@chromium.org>

        Replace a custom constructor of window.Audio with the [NamedConstructor] IDL
        https://bugs.webkit.org/show_bug.cgi?id=73496

        Reviewed by Adam Barth.

        Removes JSAudioConstructor.{h,cpp} and generates the constructor of window.Audio
        by the [NamedConstructor] IDL.

        Tests: fast/js/custom-constructors.html
               media/audio-constructor.html
               media/audio-constructor-src.html
               media/audio-constructor-preload.html
               media/audio-controls-do-not-fade-out.html
               media/audio-controls-rendering.html

        * GNUmakefile.list.am: Removed JSAudioConstructor.{h,cpp}.
        * Target.pri: Ditto.
        * UseJSC.cmake: Ditto.
        * WebCore.gypi: Ditto.
        * WebCore.order: Ditto.
        * WebCore.vcproj/WebCore.vcproj: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Ditto.
        * bindings/js/JSBindingsAllInOne.cpp: Ditto.

        * bindings/js/JSAudioConstructor.cpp: Removed.
        * bindings/js/JSAudioConstructor.h: Removed.
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::audio): Specifies the NamedConstructor.
        * page/DOMWindow.idl: Removed the [JSCustomConstructor] IDL.

2011-12-01  Mark Pilgrim  <pilgrim@chromium.org>

        [FileSystem API] DirectoryEntry.removeRecursively successCallback is required
        https://bugs.webkit.org/show_bug.cgi?id=69644

        Reviewed by Adam Barth.

        * fileapi/DirectoryEntry.idl: remove [Optional] flag from successCallback

2011-12-01  Mark Pilgrim  <pilgrim@chromium.org>

        [FileSystem API] DirectoryEntry.getDirectory path argument is required
        https://bugs.webkit.org/show_bug.cgi?id=69643

        Reviewed by Adam Barth.

        Test: fast/filesystem/simple-required-arguments-getdirectory.html

        * bindings/js/JSDirectoryEntryCustom.cpp:
        (WebCore::JSDirectoryEntry::getDirectory): throw TypeError if not enough arguments
        * bindings/v8/custom/V8DirectoryEntryCustom.cpp:
        (WebCore::V8DirectoryEntry::getDirectoryCallback): throw TypeError if not enough arguments

2011-12-01  Rafael Weinstein  <rafaelw@chromium.org>

        V8 bindings cleanup: V8WindowErrorHandler shouldn't be directly invoking script
        https://bugs.webkit.org/show_bug.cgi?id=73576

        Reviewed by Adam Barth.

        No tests needed. This patch is just bindings hygiene.

        * bindings/v8/V8WindowErrorHandler.cpp:
        (WebCore::V8WindowErrorHandler::callListenerFunction):

2011-12-01  Benjamin Poulain  <benjamin@webkit.org>

        URLs are encoded in UTF-8, then decoded as if they are Latin1
        https://bugs.webkit.org/show_bug.cgi?id=71758

        Reviewed by Darin Adler.

        Previously, invalid URLs could have a string emanating from a
        partial parsing of the input. The creation of the string was done
        through the Latin1 codec regardless of the encoding of the char* url.

        This caused two types of issues, URLs were evaluated as half-parsed,
        and the coding and decoding of the string was not consistent.

        This patch changes KURL::parse() to fallback on the original string
        whenever the parsing of the URL fails.

        Test: fast/url/invalid-urls-utf8.html

        * platform/KURL.cpp:
        (WebCore::KURL::KURL):
        (WebCore::KURL::init):
        (WebCore::KURL::parse):
        Previously, originalString was only used as an optimization to avoid
        the allocation of a string. Since this optimization depends on the
        comparison of the incoming string and the encoded buffer.
        This patches generalizes originalString to always be the original string
        being parsed by KURL. The optimization is kept by comparing that string
        and the final parsed result.
        * platform/KURL.h:
        (WebCore::KURL::parse):
        * platform/cf/KURLCFNet.cpp:
        (WebCore::KURL::KURL):
        * platform/mac/KURLMac.mm:
        (WebCore::KURL::KURL):

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

        [GTK] Add a helper function to find the current executable's path
        https://bugs.webkit.org/show_bug.cgi?id=73473

        Reviewed by Gustavo Noronha Silva.

        No new tests. This should not change behavior.

        * platform/gtk/FileSystemGtk.cpp:
        (WebCore::applicationDirectoryPath): Now use the new WTF function to get the
        current executable's path.

2011-12-01  Andreas Kling  <kling@webkit.org>

        StyledElement: Clean up inline style accessors.
        <http://webkit.org/b/73568>

        Reviewed by Antti Koivisto.

        Renamed StyledElement's getInlineStyleDecl() to ensureInlineStyleDecl() to
        make it clear that it will always return non-null as opposed to inlineStyleDecl().

        Also updated call sites to store the return value in a CSSInlineStyleDeclaration*
        rather than a CSSMutableStyleDeclaration*, and reduced scoping of temporaries
        in some cases.

        * dom/StyledElement.cpp:
        (WebCore::StyledElement::createInlineStyleDecl):
        (WebCore::StyledElement::destroyInlineStyleDecl):
        (WebCore::StyledElement::parseMappedAttribute):
        (WebCore::StyledElement::ensureInlineStyleDecl):
        (WebCore::StyledElement::style):
        (WebCore::StyledElement::copyNonAttributeProperties):
        (WebCore::StyledElement::addSubresourceAttributeURLs):
        * dom/StyledElement.h:
        (WebCore::StyledElement::inlineStyleDecl):
        * editing/ApplyStyleCommand.cpp:
        (WebCore::ApplyStyleCommand::applyRelativeFontStyleChange):
        (WebCore::ApplyStyleCommand::removeEmbeddingUpToEnclosingBlock):
        (WebCore::ApplyStyleCommand::applyInlineStyleToNodeRange):
        (WebCore::ApplyStyleCommand::addBlockStyle):
        (WebCore::ApplyStyleCommand::addInlineStyleIfNeeded):
        * editing/DeleteButtonController.cpp:
        (WebCore::DeleteButtonController::createDeletionUI):
        (WebCore::DeleteButtonController::show):
        (WebCore::DeleteButtonController::hide):
        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::removeRedundantStylesAndKeepStyleSpanInline):
        (WebCore::ReplaceSelectionCommand::handleStyleSpans):
        * html/HTMLTextFormControlElement.cpp:
        (WebCore::HTMLTextFormControlElement::updatePlaceholderVisibility):
        * html/ValidationMessage.cpp:
        (WebCore::adjustBubblePosition):
        * html/shadow/MediaControlElements.cpp:
        (WebCore::MediaControlElement::show):
        (WebCore::MediaControlElement::hide):
        (WebCore::MediaControlPanelElement::setPosition):
        (WebCore::MediaControlPanelElement::resetPosition):
        (WebCore::MediaControlPanelElement::makeOpaque):
        (WebCore::MediaControlPanelElement::makeTransparent):
        (WebCore::MediaControlInputElement::show):
        (WebCore::MediaControlInputElement::hide):
        * html/shadow/MeterShadowElement.cpp:
        (WebCore::MeterValueElement::setWidthPercentage):
        * html/shadow/ProgressShadowElement.cpp:
        (WebCore::ProgressValueElement::setWidthPercentage):
        * html/shadow/SliderThumbElement.cpp:
        (WebCore::TrackLimiterElement::create):

2011-12-01  Kelly Norton  <knorton@google.com>

        More void functions eager to return values in RenderObject & WebFrameImpl
        https://bugs.webkit.org/show_bug.cgi?id=73571

        Reviewed by Adam Barth.

        * rendering/RenderObject.h:
        (WebCore::RenderObject::computeAbsoluteRepaintRect):

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

        Unreviewed, rolling out r101691.
        http://trac.webkit.org/changeset/101691
        https://bugs.webkit.org/show_bug.cgi?id=73588

        Tests fail on Chromium bots, early warning system warned
        committer, please adjust test_expectations in patch (Requested
        by scheib on #webkit).

        * platform/KURL.cpp:
        (WebCore::KURL::KURL):
        (WebCore::KURL::init):
        (WebCore::KURL::parse):
        * platform/KURL.h:
        * platform/cf/KURLCFNet.cpp:
        (WebCore::KURL::KURL):
        * platform/mac/KURLMac.mm:
        (WebCore::KURL::KURL):

2011-12-01  Peter Beverloo  <peter@chromium.org>

        [Chromium] Add the FontCache implementation for Android
        https://bugs.webkit.org/show_bug.cgi?id=73452

        Add the FontCache implementation specific for the Chromium WebKit
        port on Android, and include various font-related files intended for
        Linux which can be re-used.

        Reviewed by Adam Barth.

        * WebCore.gyp/WebCore.gyp:
        * WebCore.gypi:
        * platform/graphics/chromium/FontCacheAndroid.cpp: Added.
        (WebCore::getFallbackFontName):
        (WebCore::isFallbackFamily):
        (WebCore::FontCache::platformInit):
        (WebCore::FontCache::getFontDataForCharacters):
        (WebCore::FontCache::getSimilarFontPlatformData):
        (WebCore::FontCache::getLastResortFallbackFont):
        (WebCore::FontCache::getTraitsInFamily):
        (WebCore::FontCache::createFontPlatformData):

2011-12-01  Tony Chang  <tony@chromium.org>

        Need to implement flex-flow: row-reverse
        https://bugs.webkit.org/show_bug.cgi?id=70778

        Reviewed by Ojan Vafai.

        We can't just change the direction of the FlexOrderIterator because we want the overflow to be
        on the left side.  Instead, we apply similar logic as when we're laying out RTL content. Putting
        the check in isLeftToRightFlow() lets us flip the flexbox's border and padding and the flexitems'
        margins.  We then layout from right to left in layoutAndPlaceChildren.

        Also remove 2 uncalled functions.

        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::isReverseFlow):
        (WebCore::RenderFlexibleBox::isLeftToRightFlow):
        * rendering/RenderFlexibleBox.h:

2011-12-01  Daniel Sievers  <sievers@chromium.org>

        [Chromium] Early returns in calculateDrawTransformsAndVisibilityInternal() are not respected by parent.
        https://bugs.webkit.org/show_bug.cgi?id=73270

        Non-drawing child trees should not be added to the parent render surface's layer list
        and should neither extend the parent layer's drawable content rect.

        This also fixes assertions from the content texture residency logic, which doesn't like it
        if we try to use a render surface through a parent, while that surface itself was never 'used'
        in the same frame.

        Reviewed by James Robinson.

        Added unit test.

        * platform/graphics/chromium/cc/CCLayerTreeHostCommon.cpp:
        (WebCore::calculateDrawTransformsAndVisibilityInternal):

2011-12-01  David Reveman  <reveman@chromium.org>

        [Chromium] Use contentBounds instead of bounds for invalidation.
        https://bugs.webkit.org/show_bug.cgi?id=73525

        Reviewed by James Robinson.

        Use setNeedsDisplay() instead of setNeedsDisplayRect() when possible.

        No new tests.

        * platform/graphics/chromium/LayerChromium.cpp:
        (WebCore::LayerChromium::setBounds):

2011-12-01  Andreas Kling  <kling@webkit.org>

        CSSStyleSelector: Add missing fields to constructor initializer list.
        <http://webkit.org/b/73565>

        Reviewed by Antti Koivisto.

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

2011-12-01  Benjamin Poulain  <bpoulain@apple.com>

        Get rid of the unused function nameForCursorType()
        https://bugs.webkit.org/show_bug.cgi?id=73529

        Reviewed by Joseph Pecoraro.

        The function nameForCursorType was introduced in r63339 and has not been used anywhere
        since that commit.

        * WebCore.exp.in:
        * platform/Cursor.cpp:
        * platform/Cursor.h:

2011-12-01  Andreas Kling  <kling@webkit.org>

        CSSMutableStyleDeclaration: Unnecessary double hash lookup in construction.
        <http://webkit.org/b/73564>

        Reviewed by Antti Koivisto.

        Use HashMap::find() instead of contains() followed by get() on
        successful lookup.

        * css/CSSMutableStyleDeclaration.cpp:
        (WebCore::CSSMutableStyleDeclaration::CSSMutableStyleDeclaration):

2011-11-30  Benjamin Poulain  <benjamin@webkit.org>

        URLs are encoded in UTF-8, then decoded as if they are Latin1
        https://bugs.webkit.org/show_bug.cgi?id=71758

        Reviewed by Darin Adler.

        Previously, invalid URLs could have a string emanating from a
        partial parsing of the input. The creation of the string was done
        through the Latin1 codec regardless of the encoding of the char* url.

        This caused two types of issues, URLs were evaluated as half-parsed,
        and the coding and decoding of the string was not consistent.

        This patch changes KURL::parse() to fallback on the original string
        whenever the parsing of the URL fails.

        Test: fast/url/invalid-urls-utf8.html

        * platform/KURL.cpp:
        (WebCore::KURL::KURL):
        (WebCore::KURL::init):
        (WebCore::KURL::parse):
        Previously, originalString was only used as an optimization to avoid
        the allocation of a string. Since this optimization depends on the
        comparison of the incoming string and the encoded buffer.
        This patches generalizes originalString to always be the original string
        being parsed by KURL. The optimization is kept by comparing that string
        and the final parsed result.
        * platform/KURL.h:
        (WebCore::KURL::parse):
        * platform/cf/KURLCFNet.cpp:
        (WebCore::KURL::KURL):
        * platform/mac/KURLMac.mm:
        (WebCore::KURL::KURL):

2011-12-01  Wei Charles  <charles.wei@torchmobile.com.cn>

        [Blackberry] Upstream BlackBerry porting of plugin framework -- part 2
        https://bugs.webkit.org/show_bug.cgi?id=73513

        Reviewed by Antonio Gomes.

        No new tests for now.

        * plugins/blackberry/NPCallbacksBlackBerry.cpp: Added.
        * plugins/blackberry/NPCallbacksBlackBerry.h: Added.
        * plugins/blackberry/PluginViewPrivateBlackBerry.cpp: Added.
        * plugins/blackberry/PluginViewPrivateBlackBerry.h: Added.

2011-12-01  Andreas Kling  <kling@webkit.org>

        JSC/CSSOM: root(CSSElementStyleDeclaration) should never need to follow the element.
        <http://webkit.org/b/73561>

        Reviewed by Antti Koivisto.

        A CSSElementStyleDeclaration should always either have a null element pointer,
        or return a valid parentStyleSheet(), since having an element pointer implies
        having an associated element sheet.

        In light of this, replace the opaque-root-from-element path for style declarations
        by an assertion.

        * bindings/js/JSDOMBinding.h:
        (WebCore::root):

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

        [CMake] Make the feature defines for DOM names explicit
        https://bugs.webkit.org/show_bug.cgi?id=72812

        Reviewed by Daniel Bates.

        * CMakeLists.txt:

2011-11-30  Dmitry Lomov  <dslomov@google.com>

        https://bugs.webkit.org/show_bug.cgi?id=73503
        [Chromium][V8] Implement ArrayBuffer transfer in chromium.
        Portions of this patch come from Luke Zarko.

        Reviewed by David Levin.

        Test: fast/canvas/webgl/arraybuffer-transfer-of-control.html

        * bindings/v8/SerializedScriptValue.cpp:
        (WebCore::V8ObjectMap::Writer::writeTransferredArrayBuffer):
        (WebCore::V8ObjectMap::Serializer::Serializer):
        (WebCore::V8ObjectMap::Serializer::writeAndGreyArrayBufferView):
        (WebCore::V8ObjectMap::Serializer::writeArrayBuffer):
        (WebCore::V8ObjectMap::Serializer::writeTransferredArrayBuffer):
        (WebCore::V8ObjectMap::Serializer::doSerialize):
        (WebCore::V8ObjectMap::Reader::read):
        (WebCore::V8ObjectMap::Reader::readArrayBufferView):
        (WebCore::V8ObjectMap::Deserializer::Deserializer):
        (WebCore::V8ObjectMap::Deserializer::tryGetTransferredArrayBuffer):
        (WebCore::SerializedScriptValue::create):
        (WebCore::neuterBinding):
        (WebCore::SerializedScriptValue::transferArrayBuffers):
        (WebCore::SerializedScriptValue::SerializedScriptValue):
        (WebCore::SerializedScriptValue::deserialize):
        * bindings/v8/SerializedScriptValue.h:

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

        Shadow ID pseudo-element selectors serialize incorrectly
        https://bugs.webkit.org/show_bug.cgi?id=73542

        Avoid space for ShadowDescendant combinator.

        Reviewed by Dimitri Glazkov.

        * css/CSSSelector.cpp:
        (WebCore::CSSSelector::selectorText):

2011-12-01  Wajahat Siddiqui  <mdwajahatali.siddiqui@motorola.com>

        Popup menu can get stuck in closed state when GtkMenu can't grab mouse.
        https://bugs.webkit.org/show_bug.cgi?id=56466

        Add a check if popup menu is not visible due to no mouse grab,
        Ensure WebCore is in sync with proper state.

        Reviewed by Martin Robinson.

        * platform/gtk/PopupMenuGtk.cpp:
        (WebCore::PopupMenuGtk::show):

2011-12-01  Eric Carlson  <eric.carlson@apple.com>

        When playing audio in <video>, the poster is hidden on play
        https://bugs.webkit.org/show_bug.cgi?id=73405

        Reviewed by Darin Adler.

        * html/HTMLVideoElement.cpp:
        (WebCore::HTMLVideoElement::hasAvailableVideoFrame): Don't return true if the file
            doesn't have video.

2011-12-01  Eric Carlson  <eric.carlson@apple.com>

        Add Settings for text track types
        https://bugs.webkit.org/show_bug.cgi?id=73383

        Reviewed by Darin Adler.

        No new tests, settings are not used yet.

        * page/Settings.cpp:
        (WebCore::Settings::Settings): Initialize new settings.
        * page/Settings.h:
        (WebCore::Settings::setShouldDisplaySubtitles): New.
        (WebCore::Settings::shouldDisplaySubtitles): Ditto.
        (WebCore::Settings::setShouldDisplayCaptions): Ditto.
        (WebCore::Settings::shouldDisplayCaptions): Ditto.
        (WebCore::Settings::setShouldDisplayTextDescriptions): Ditto.
        (WebCore::Settings::shouldDisplayTextDescriptions): Ditto.

2011-12-01  Eric Carlson  <eric.carlson@apple.com>

        HTMLTrackElement.readyState should return TextTrack "readiness state".
        https://bugs.webkit.org/show_bug.cgi?id=73466

        Reviewed by Darin Adler.

        * html/HTMLTrackElement.cpp:
        (WebCore::HTMLTrackElement::HTMLTrackElement): Don't initialize m_readyState.
        (WebCore::HTMLTrackElement::setReadyState): Return the TextTrack state.
        (WebCore::HTMLTrackElement::readyState): Set the TextTrack state.
        * html/HTMLTrackElement.h: Remove m_readyState.

        * html/TextTrack.cpp:
        (WebCore::TextTrack::TextTrack): Initialize m_readinessState.
        * html/TextTrack.h:
        (WebCore::TextTrack::readinessState): New.
        (WebCore::TextTrack::setReadinessState): New.

2011-12-01  Kentaro Hara  <haraken@chromium.org>

        Unreviewed, rolling out r101669.
        http://trac.webkit.org/changeset/101669
        https://bugs.webkit.org/show_bug.cgi?id=73394

        Win build and Mac build are failing

        * WebCore.gyp/WebCore.gyp:
        * WebCore.gyp/scripts/action_derivedsourcesallinone.py:
        (main):
        * WebCore.gypi:
        * bindings/scripts/generate-bindings.pl:
        * page/DOMWindow.idl:
        * webaudio/DOMWindowWebAudio.idl: Removed.

2011-12-01  Pavel Feldman  <pfeldman@google.com>

        Web Inspector: further align front-end configurations: get rid of saveAsAvailable preference, inline drag glass pane.
        https://bugs.webkit.org/show_bug.cgi?id=73555

        Reviewed by Yury Semikhatsky.

        * inspector/InspectorFrontendClient.h:
        * inspector/InspectorFrontendClientLocal.h:
        (WebCore::InspectorFrontendClientLocal::canSaveAs):
        * inspector/InspectorFrontendHost.cpp:
        (WebCore::InspectorFrontendHost::canSaveAs):
        * inspector/InspectorFrontendHost.h:
        * inspector/InspectorFrontendHost.idl:
        * inspector/front-end/ExtensionServer.js:
        (WebInspector.ExtensionServer.prototype.hasExtensions):
        * inspector/front-end/InspectorFrontendHostStub.js:
        (.WebInspector.InspectorFrontendHostStub.prototype.canSaveAs):
        * inspector/front-end/NetworkPanel.js:
        (WebInspector.NetworkLogView.prototype._contextMenu):
        * inspector/front-end/ResourcesPanel.js:
        * inspector/front-end/Settings.js:
        * inspector/front-end/SettingsScreen.js:
        (WebInspector.SettingsScreen):
        * inspector/front-end/StylesSidebarPane.js:
        * inspector/front-end/UIUtils.js:
        (WebInspector.elementDragStart):
        (WebInspector.elementDragEnd):

2011-12-01  Pavel Feldman  <pfeldman@google.com>

        Web Inspector: extract static part of the InspectorBackend from the generator.
        https://bugs.webkit.org/show_bug.cgi?id=73562

        Reviewed by Timothy Hatcher.

        We should only generate the mapping between the command parameters and slots,
        rest of the backend is static.

        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * inspector/CodeGeneratorInspector.py:
        (Generator.go):
        (Generator.process_event):
        (Generator.process_command):
        * inspector/compile-front-end.sh:
        * inspector/front-end/InspectorBackend.js: Added.
        (InspectorBackendClass):
        (InspectorBackendClass.prototype.registerCommand):
        (InspectorBackendClass.prototype.registerEvent):
        (InspectorBackendClass.prototype._invoke):
        (InspectorBackendClass.prototype._sendMessageToBackend):
        (InspectorBackendClass.prototype._wrapCallbackAndSendMessageObject):
        (InspectorBackendClass.prototype.sendMessageObjectToBackend):
        (InspectorBackendClass.prototype.registerDomainDispatcher):
        (InspectorBackendClass.prototype.dispatch.messageObject.error.__proto__.getDescription):
        (InspectorBackendClass.prototype.dispatch.messageObject.error.__proto__.toString):
        (InspectorBackendClass.prototype.dispatch.messageObject.error.__proto__.getMessage):
        (InspectorBackendClass.prototype.dispatch):
        (InspectorBackendClass.prototype.reportProtocolError):
        (InspectorBackendClass.prototype.runAfterPendingDispatches):
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/inspector.html:

2011-12-01  Kentaro Hara  <haraken@chromium.org>

        Use the [Supplemental] IDL for webaudio attributes in Chromium
        https://bugs.webkit.org/show_bug.cgi?id=73394

        Reviewed by Adam Barth.

        - Overview: Using the [Supplemental] IDL, this patch moves the attribute
        declarations of webaudio from DOMWindow.idl into a new IDL file
        webaudio/DOMWindowWebAudio.idl, which helps make webaudio a self-contained
        feature (aka a module).

        - This patch changes the build flow of WebCore.gyp as follows:

            Previous build flow:
                foreach $idl (all IDL files) {
                    generate-bindings.pl depends on $idl;
                    generate-bindings.pl reads $idl;
                    generate-bindings.pl generates .h and .cpp files for $idl;
                }

            New build flow (See the discussions in bug 72138 for more details):
                resolve-supplemental.pl depends on all IDL files;
                resolve-supplemental.pl reads all IDL files;
                resolve-supplemental.pl resolves the dependency of [Supplemental=XXXX];
                resolve-supplemental.pl outputs supplemental_dependency.tmp;
                foreach $idl (all IDL files) {
                    generate-bindings.pl depends on $idl and supplemental_dependency.tmp;
                    generate-bindings.pl reads $idl;
                    generate-bindings.pl reads supplemental_dependency.tmp;
                    generate-bindings.pl generates .h and .cpp files for $idl, including all attributes in IDL files whilementing $idl;
                }

        - This patch introduces a temporary IDL, [Supplemented]. The [Supplemented] IDL
        will be removed after build scripts for all platforms support the [Supplemental] IDL.
        The motivation for the [Supplemented] IDL is as follows:

        In order to support the [Supplemental] IDL, we need to
        (1) run resolve-supplemental.pl and generate supplemental_dependency.tmp
        (2) and run generate-bindings.pl with the supplemental_dependency.tmp.

        This build flow requires a change on the following build scripts,
        but changing all the build scripts all at once without any regression is too difficult:

            - DerivedSources.make
            - DerivedSources.pri
            - GNUmakefile.am
            - PlatformBlackBerry.cmake
            - UseJSC.cmake
            - UseV8.cmake
            - WebCore.vcproj/MigrateScripts
            - WebCore.vcproj/WebCore.vcproj
            - bindings/gobject/GNUmakefile.am
            - WebCore.gyp/WebCore.gyp

        Thus, we are planning to change the build scripts one by one, which implies that
        we need to allow the temporary state in which some build scripts support [Supplemental] IDL
        but others do not. To accomplish this, we introduce a temporary IDL, [Supplemented].
        The [Supplemented] IDL on an attribute means that the attribute is marked with [Supplemental]
        in another IDL file somewhere, like this:

            DOMWindowWebAudio.idl:
                interface [
                    Supplemental=DOMWindow
                ] DOMWindowWebAudio {
                    attribute attr1;
                    attribute attr2;
                };

            DOMWindow.idl:
                interface [
                ] DOMWindow {
                    attribute [Supplemented] attr1; // This line will be removed after all build scripts support the [Su IDL
                    attribute [Supplemented] attr2; // This line will be removed after all build scripts support the [Su IDL.
                    attribute attr3;
                    attribute attr4;
                };

        Assuming these IDL files, this patch implements the following logic in generate-bindings.pl:

            - If a given build script supports the [Supplemental] IDL,
            generate-bindings.pl ignores all attributes with the [Supplemented] IDL.
            - Otherwise, generate-bindings.pl treats all attributes with the [Supplemented] IDL
            as normal attributes and instead ignores all attributes with the [Supplemental] IDL
            (i.e. generate-bindings.pl generates nothing from the IDL file with the [Supplemental] IDL).

        Tests: webaudio/*

        * WebCore.gyp/WebCore.gyp: Describes the build flow that I described above.
        * WebCore.gyp/scripts/action_derivedsourcesallinone.py:
        (main): Reads the IDL file names from the input file (i.e. supplemental_dependency.tmp), which are described at the first column of each line in the input file.
        * WebCore.gypi: Added DOMWindowWebAudio.idl.
        * bindings/scripts/generate-bindings.pl: As a temporary solution, if the platform does not support the [Supplemental] IDL, the perl script ignores the [Supplemental] IDL and instead uses the [Supplemented] IDL. Otherwise, the perl script ignores the [Supplemented] IDL and instead uses the [Supplemental] IDL.
        * page/DOMWindow.idl: Added the [Supplemented] IDL to webaudio-related attributes. As I described above, the [Supplemented] IDL will be removed after all platforms support the [Supplemental] IDL.
        * webaudio/DOMWindowWebAudio.idl: Added. Describes the [Supplemental=DOMWindow] IDL. The attributes in this IDL file should be treated as if they are written in DOMWindow.idl.

2011-12-01  Jonathan Dong  <jonathan.dong@torchmobile.com.cn>

        Upstream credential storage files of BlackBerry porting
        https://bugs.webkit.org/show_bug.cgi?id=73280

        Reviewed by Rob Buis.

        Added the basic structure of class CredentialBackingStore
        to persist the credential data, and generated
        platform/network/blackberry/CredentialStorageBlackBerry.cpp,
        to implement CredentialStorage::getFromPersistentStorage
        for BlackBerry porting.
        Contributed by Torch Team.

        * platform/network/blackberry/CredentialBackingStore.cpp: Added.
        (WebCore::CredentialBackingStore::instance):
        (WebCore::CredentialBackingStore::CredentialBackingStore):
        (WebCore::CredentialBackingStore::~CredentialBackingStore):
        (WebCore::CredentialBackingStore::open):
        (WebCore::CredentialBackingStore::close):
        (WebCore::CredentialBackingStore::addLogin):
        (WebCore::CredentialBackingStore::updateLogin):
        (WebCore::CredentialBackingStore::hasLogin):
        (WebCore::CredentialBackingStore::getLogin):
        (WebCore::CredentialBackingStore::removeLogin):
        (WebCore::CredentialBackingStore::clear):
        (WebCore::CredentialBackingStore::encryptedString):
        (WebCore::CredentialBackingStore::decryptedString):
        * platform/network/blackberry/CredentialBackingStore.h: Added.
        * platform/network/blackberry/CredentialStorageBlackBerry.cpp: Added.
        (WebCore::CredentialStorage::getFromPersistentStorage):

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

        StyledElement: Tidy up copyNonAttributeProperties().
        <http://webkit.org/b/73501>

        Reviewed by Antti Koivisto.

        * css/CSSStyleDeclaration.h:

            Made CSSStyleDeclaration non-copyable.

        * css/CSSMutableStyleDeclaration.h:
        * css/CSSMutableStyleDeclaration.cpp:
        (WebCore::CSSMutableStyleDeclaration::copyPropertiesFrom):

            copyPropertiesAndStrictnessFrom() redone as copyPropertiesFrom()
            since we can copy the strictness bit using existing accessors.

        * dom/StyledElement.cpp:
        (WebCore::StyledElement::copyNonAttributeProperties):

            Use copyPropertiesFrom() and copy the strictness bit to the new
            inline style using the dedicated accessors. Also added some
            assertions for good measure.

2011-12-01  Kentaro Hara  <haraken@chromium.org>

        run-bindings-tests is failing on Gtk/Qt/SnowLeopard/Lion bots
        https://bugs.webkit.org/show_bug.cgi?id=73558

        Reviewed by Csaba Osztrogonác.

        The cause of the bug:

        foreach my $idlFile (keys %documents) {
            $supplementals{$idlFile} = [];
            foreach my $dataNode (...) {
                if (...) {
                    ...;
                    push(@{$supplementals{$targetIdlFile}}, $idlFile);
                    ...;
                }
            }
        }

        Even if we did push(@{$supplementals{$targetIdlFile}}, $idlFile),
        the $supplementals{$targetIdlFile} can be re-initialized by
        $supplementals{$idlFile} = [] in subsequent loops.
        This patch fixes the bug.

        Tests: bindings/scripts/test/TestInterface.idl

        * bindings/scripts/resolve-supplemental.pl:

2011-12-01  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: restore WebKit2 Safari menu items after capabilities refactoring regression.
        https://bugs.webkit.org/show_bug.cgi?id=73554

        Reviewed by Yury Semikhatsky.

        * inspector/InspectorFrontendClientLocal.cpp:
        (WebCore::InspectorFrontendClientLocal::frontendLoaded):
        (WebCore::InspectorFrontendClientLocal::isDebuggingEnabled):
        (WebCore::InspectorFrontendClientLocal::setDebuggingEnabled):
        (WebCore::InspectorFrontendClientLocal::isTimelineProfilingEnabled):
        (WebCore::InspectorFrontendClientLocal::setTimelineProfilingEnabled):
        (WebCore::InspectorFrontendClientLocal::isProfilingJavaScript):
        (WebCore::InspectorFrontendClientLocal::startProfilingJavaScript):
        (WebCore::InspectorFrontendClientLocal::stopProfilingJavaScript):
        (WebCore::InspectorFrontendClientLocal::showConsole):
        (WebCore::InspectorFrontendClientLocal::evaluateOnLoad):
        * inspector/InspectorFrontendClientLocal.h:
        * inspector/front-end/InspectorFrontendAPI.js:
        (InspectorFrontendAPI._pendingCommands.isDebuggingEnabled):
        (InspectorFrontendAPI.setDebuggingEnabled):
        (InspectorFrontendAPI.isTimelineProfilingEnabled):
        (InspectorFrontendAPI.setTimelineProfilingEnabled):
        (InspectorFrontendAPI.isProfilingJavaScript):
        (InspectorFrontendAPI.startProfilingJavaScript):
        (InspectorFrontendAPI.stopProfilingJavaScript):
        (InspectorFrontendAPI.setAttachedWindow):
        (InspectorFrontendAPI.showConsole):
        (InspectorFrontendAPI.dispatch):
        (InspectorFrontendAPI.loadCompleted):
        * inspector/front-end/inspector.js:

2011-12-01  Pavel Feldman  <pfeldman@google.com>

        Web Inspector: remove capabilities along with the MetaAgent
        https://bugs.webkit.org/show_bug.cgi?id=73550

        Reviewed by Yury Semikhatsky.

        We are now using explicit query commands in order to find out about the capabilities.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * inspector/CodeGeneratorInspector.py:
        (Generator.go):
        * inspector/Inspector.json:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        * inspector/InspectorMetaAgent.cpp: Removed.
        * inspector/InspectorMetaAgent.h: Removed.
        * inspector/generate-protocol-externs:

2011-12-01  Pavel Feldman  <pfeldman@google.com>

        Web Inspector: front-end should open with elements panel selected upon Inspect Element action.
        https://bugs.webkit.org/show_bug.cgi?id=73539

        Reviewed by Yury Semikhatsky.

        * inspector/front-end/inspector.js:
        (WebInspector.doLoadedDone.showInitialPanel):
        (WebInspector.inspect):

2011-11-30  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: totalOffsetLeft and totalOffsetTop should take scroll into account.
        https://bugs.webkit.org/show_bug.cgi?id=73443

        Reviewed by Pavel Feldman.

        * inspector/front-end/TextPrompt.js:
        (WebInspector.TextPrompt.prototype._boxForAnchorAtStart):
        (WebInspector.TextPrompt.SuggestBox):
        * inspector/front-end/utilities.js:
        (Element.prototype.totalOffsetLeft):
        (Element.prototype.totalOffsetTop):
        (Element.prototype.boxInWindow):

2011-12-01  Pavel Feldman  <pfeldman@google.com>

        Web Inspector: query backend for capabilities explicitly.
        https://bugs.webkit.org/show_bug.cgi?id=73442

        Reviewed by Yury Semikhatsky.

        This change removes the hardcoded Capabilities values in favor of
        explicit query commands issued against the backend. I'll remove the
        Meta agent in a subsequent change.

        * bindings/js/ScriptDebugServer.h:
        (WebCore::ScriptDebugServer::causesRecompilation):
        (WebCore::ScriptDebugServer::supportsNativeBreakpoints):
        * bindings/js/ScriptProfiler.h:
        (WebCore::ScriptProfiler::causesRecompilation):
        (WebCore::ScriptProfiler::isSampling):
        (WebCore::ScriptProfiler::hasHeapProfiler):
        * bindings/v8/ScriptDebugServer.h:
        (WebCore::ScriptDebugServer::causesRecompilation):
        (WebCore::ScriptDebugServer::supportsNativeBreakpoints):
        * bindings/v8/ScriptProfiler.h:
        (WebCore::ScriptProfiler::causesRecompilation):
        (WebCore::ScriptProfiler::isSampling):
        (WebCore::ScriptProfiler::hasHeapProfiler):
        * inspector/Inspector.json:
        * inspector/InspectorClient.h:
        (WebCore::InspectorClient::canClearBrowserCache):
        (WebCore::InspectorClient::canClearBrowserCookies):
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        (WebCore::InspectorController::connectFrontend):
        (WebCore::InspectorController::show):
        * inspector/InspectorController.h:
        * inspector/InspectorDebuggerAgent.cpp:
        (WebCore::InspectorDebuggerAgent::causesRecompilation):
        (WebCore::InspectorDebuggerAgent::canSetScriptSource):
        (WebCore::InspectorDebuggerAgent::supportsNativeBreakpoints):
        * inspector/InspectorDebuggerAgent.h:
        * inspector/InspectorFrontendClientLocal.cpp:
        (WebCore::InspectorFrontendClientLocal::frontendLoaded):
        * inspector/InspectorProfilerAgent.cpp:
        (WebCore::InspectorProfilerAgent::causesRecompilation):
        (WebCore::InspectorProfilerAgent::isSampling):
        (WebCore::InspectorProfilerAgent::hasHeapProfiler):
        (WebCore::InspectorProfilerAgent::disable):
        (WebCore::InspectorProfilerAgent::enable):
        (WebCore::InspectorProfilerAgent::setFrontend):
        * inspector/InspectorProfilerAgent.h:
        * inspector/InspectorResourceAgent.cpp:
        (WebCore::InspectorResourceAgent::canClearBrowserCache):
        (WebCore::InspectorResourceAgent::canClearBrowserCookies):
        * inspector/InspectorResourceAgent.h:
        * inspector/front-end/DebuggerModel.js:
        (WebInspector.DebuggerModel):
        (WebInspector.DebuggerModel.prototype.enableDebugger):
        (WebInspector.DebuggerModel.prototype.canSetScriptSource):
        * inspector/front-end/NetworkItemView.js:
        (WebInspector.NetworkItemView):
        * inspector/front-end/NetworkPanel.js:
        (WebInspector.NetworkLogView.onCanClearBrowserCache):
        (WebInspector.NetworkLogView.onCanClearBrowserCookies):
        (WebInspector.NetworkLogView):
        (WebInspector.NetworkLogView.prototype._contextMenu):
        * inspector/front-end/ProfilesPanel.js:
        (WebInspector.ProfilesPanel.prototype._reportHeapSnapshotProgress):
        * inspector/front-end/ScriptsPanel.js:
        * inspector/front-end/Settings.js:
        * inspector/front-end/SettingsScreen.js:
        (WebInspector.SettingsScreen):
        * inspector/front-end/inspector.js:
        (WebInspector.get inspectedPageDomain):
        (WebInspector._initializeCapability):
        (WebInspector.doLoadedDone):

2011-11-28  Hans Wennborg  <hans@chromium.org>

        IndexedDB: Fix reverse cursor with non-existent upper bound
        https://bugs.webkit.org/show_bug.cgi?id=73220

        Reviewed by Tony Chang.

        The code previously did not properly handle the case where the
        specified upper bound for a reverse cursor did not exist.

        Test: storage/indexeddb/cursor-reverse-bug.html

        * storage/IDBLevelDBBackingStore.cpp:
        (WebCore::findGreatestKeyLessThanOrEqual):
        (WebCore::IDBLevelDBBackingStore::openObjectStoreCursor):
        (WebCore::IDBLevelDBBackingStore::openIndexKeyCursor):
        (WebCore::IDBLevelDBBackingStore::openIndexCursor):

2011-11-29  Hans Wennborg  <hans@chromium.org>

        IndexedDB: Cursor pre-fetching
        https://bugs.webkit.org/show_bug.cgi?id=73025

        Reviewed by Darin Fisher.

        No new tests. This doesn't change any semantics.
        Actual pre-fetching will not happen in DumpRenderTree.
        Chromium will request pre-fetching and have tests for it.

        * storage/IDBBackingStore.h:
        * storage/IDBCallbacks.h:
        * storage/IDBCursor.cpp:
        (WebCore::IDBCursor::continueFunction):
        (WebCore::IDBCursor::postSuccessHandlerCallback):
          Adds a callback that is called everytime the onsuccess handler has
          executed on a cursor. This allows the cursor to see if a new call
          to continue() was made in the onsuccess handler.
        * storage/IDBCursor.h:
        * storage/IDBCursorBackendImpl.cpp:
        (WebCore::IDBCursorBackendImpl::continueFunction):
        (WebCore::IDBCursorBackendImpl::prefetchContinue):
        (WebCore::IDBCursorBackendImpl::prefetchContinueInternal):
          This is the function that does actual pre-fetching. When called,
          it will attempt to step the cursor up to n steps and send the
          results back via the new onSuccessWithPrefetch() callback.
        (WebCore::IDBCursorBackendImpl::prefetchReset):
          This resets the cursor to the position it was at before the last
          prefetch call.
        * storage/IDBCursorBackendImpl.h:
        (WebCore::IDBCursorBackendImpl::postSuccessHandlerCallback):
        * storage/IDBCursorBackendInterface.h:
        * storage/IDBKey.h:
        (WebCore::IDBKey::createInvalid):
        (WebCore::IDBKey::createNumber):
        (WebCore::IDBKey::createString):
        (WebCore::IDBKey::createDate):
        (WebCore::IDBKey::createArray):
        (WebCore::IDBKey::sizeEstimate):
        * storage/IDBLevelDBBackingStore.cpp:
        (WebCore::CursorOptions::CursorImplCommon::CursorImplCommon):
        (WebCore::CursorOptions::ObjectStoreCursorImpl::clone):
        (WebCore::CursorOptions::ObjectStoreCursorImpl::ObjectStoreCursorImpl):
        (WebCore::CursorOptions::IndexKeyCursorImpl::clone):
        (WebCore::CursorOptions::IndexKeyCursorImpl::IndexKeyCursorImpl):
        (WebCore::CursorOptions::IndexCursorImpl::clone):
        (WebCore::CursorOptions::IndexCursorImpl::IndexCursorImpl):
        * storage/IDBRequest.cpp:
        (WebCore::IDBRequest::dispatchEvent):
          Update dispatchEvent() to call the postSuccessHandlerCallback()
        * storage/IDBRequest.h:
        (WebCore::IDBRequest::onSuccessWithPrefetch):
        * storage/IDBTransactionBackendImpl.cpp:
        (WebCore::IDBTransactionBackendImpl::addPendingEvents):
          Allow for adding an arbitrary number of extra pending events.
          When a cursor pre-fetches n elements, the transaction should
          expect to see n extra onsuccess calls.
        * storage/IDBTransactionBackendImpl.h:
        * storage/IDBTransactionBackendInterface.h:

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

        [GTK] WebAudio wav resources access and management
        https://bugs.webkit.org/show_bug.cgi?id=73080

        Reviewed by Martin Robinson.

        For the uninstalled case we assume the user will set a
        AUDIO_RESOURCES_PATH environment variable pointing to
        WebCore/platform/audio/resources.

        * GNUmakefile.am: Install WAV resources.
        * platform/audio/gtk/AudioBusGtk.cpp:
        (WebCore::AudioBus::loadPlatformResource): Support for loading
        uninstalled resources.

2011-12-01  Florin Malita  <fmalita@google.com>

        SVG Gaussian blur in 1-dimension is incorrect
        https://bugs.webkit.org/show_bug.cgi?id=73029

        Reviewed by Simon Fraser.

        Ensure that the last blurBox result is stored when applying one-dimensional blurs.

        * platform/graphics/filters/FEGaussianBlur.cpp:
        (WebCore::FEGaussianBlur::platformApplyGeneric):

2011-12-01  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Elements Panel edit as html looks weird with an arrow inside edit box.
        https://bugs.webkit.org/show_bug.cgi?id=73462

        Reviewed by Pavel Feldman.

        * inspector/front-end/elementsPanel.css:
        (#elements-content .editing):
        (.elements-tree-editor):
        * inspector/front-end/inspector.css:

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

        Web Inspector: [Styles] Exclamation mark hint ignores property case
        https://bugs.webkit.org/show_bug.cgi?id=73535

        Reviewed by Pavel Feldman.

        * inspector/front-end/StylesSidebarPane.js:

2011-12-01  Pavel Feldman  <pfeldman@google.com>

        Web Inspector: fix dedicated workers inspection (undefined is not an object).
        https://bugs.webkit.org/show_bug.cgi?id=73537

        Reviewed by Yury Semikhatsky.

        * inspector/front-end/ResourceTreeModel.js:
        (WebInspector.ResourceTreeModel.prototype.resourceForURL):
        * inspector/front-end/WorkerManager.js:
        (WebInspector.WorkerManager.loadCompleted):

2011-12-01  Kentaro Hara  <haraken@chromium.org>

        [JSC] When XXXX has a NamedConstructor, window.XXXX should be XXXXConstructor
        https://bugs.webkit.org/show_bug.cgi?id=73521

        Reviewed by Adam Barth.

        This is a regression caused by a patch of bug 73307.
        If we replaced a custom constructor of window.XXXX (e.g. XXXX is Audio or Option)
        with the [NamedConstructor] IDL, fast/js/global-constructors.html,
        fast/dom/Window/window-properties.html and fast/dom/call-a-constructor-as-a-function.html
        start to fail in JSC.

        Before a patch of bug 73007: (correct behavior)
            window.Audio => AudioConstructor
            window.Option => OptionConstructor
            window.HTMLAudioElement => HTMLAudioElementConstructor
            window.HTMLOptionElement => HTMLOptionElementConstructor

        After a patch of bug 73007: (wrong behavior)
            window.Audio => HTMLAudioElementConstructor
            window.Option => HTMLOptionElementConstructor
            window.HTMLAudioElement => HTMLAudioElementConstructor
            window.HTMLOptionElement => HTMLOptionElementConstructor

        This patch fixes the above behavior.

        Tests: bindings/scripts/test/TestNamedConstructor.idl

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateImplementation):
        * bindings/scripts/IDLParser.pm:
        (parseExtendedAttributes):
        (ParseInterface):
        * bindings/scripts/test/TestNamedConstructor.idl: The test IDL was wrong. NamedConstructor=XXXX(arguments) is a correct format.
        * bindings/scripts/test/JS/JSTestNamedConstructor.cpp: Updated a run-bindings-tests result.

2011-11-30  David Grogan  <dgrogan@chromium.org>

        Move data in IDBPendingTransactionMonitor from static to
        ThreadSpecific.
        https://bugs.webkit.org/show_bug.cgi?id=73389

        IDBPendingTransactionMonitor previously stored transactions in
        a static member variable so that they could be aborted if they were
        had no work queued up when leaving script execution.  That was fine when
        IndexedDB could only be used on the main thread, but is insufficient
        for IndexedDB on workers.  In addition to not being thread-safe, this
        caused pending transactions that were created from a worker thread to
        abort when the main thread left script execution.

        Reviewed by David Levin.

        No new tests - IndexedDB worker tests forthcoming.

        * storage/IDBPendingTransactionMonitor.cpp:
        (WebCore::transactions):  Create the TLS.  The other methods used to
        manage the container's memory lifetime but now we just leak it until
        the thread shuts down in the interest of simpler code.
        (WebCore::IDBPendingTransactionMonitor::addPendingTransaction):
        (WebCore::IDBPendingTransactionMonitor::removePendingTransaction):
        (WebCore::IDBPendingTransactionMonitor::abortPendingTransactions):

        * storage/IDBPendingTransactionMonitor.h:

2011-11-30  Leo Yang  <leo.yang@torchmobile.com.cn>

        Upstream platform/network/blackberry/NetworkStateNotifierBlackBerry.cpp
        https://bugs.webkit.org/show_bug.cgi?id=73522

        Reviewed by Daniel Bates.

        Initial upstream, can't be built yet, no new tests.

        * platform/network/blackberry/NetworkStateNotifierBlackBerry.cpp: Added.
        (WebCore::NetworkStateNotifier::NetworkStateNotifier):
        (WebCore::NetworkStateNotifier::networkStateChange):

2011-11-30  David Reveman  <reveman@chromium.org>

        [Chromium] Improve tile invalidation
        https://bugs.webkit.org/show_bug.cgi?id=71872

        Reviewed by James Robinson.

        Virtualize LayerChromium::setNeedsDisplay so that dirty rectangles can
        be handled directly by the TiledLayerChromium class. Replace
        LayerChromium::dirtyRect() with LayerChromium::needsDisplay() and
        remove unnecessary union of dirty rectangles. By invalidating existing
        tiles using the initial dirty rectangles instead of their union we
        avoid a large amount of unnecessary tile updates.

        Update LayerChromiumTest.

        * platform/graphics/chromium/Canvas2DLayerChromium.cpp:
        (WebCore::Canvas2DLayerChromium::updateCompositorResources):
        * platform/graphics/chromium/ContentLayerChromium.cpp:
        (WebCore::ContentLayerChromium::paintContentsIfDirty):
        * platform/graphics/chromium/GraphicsLayerChromium.cpp:
        (WebCore::GraphicsLayerChromium::setNeedsDisplayInRect):
        * platform/graphics/chromium/ImageLayerChromium.cpp:
        (WebCore::ImageLayerChromium::setContents):
        (WebCore::ImageLayerChromium::paintContentsIfDirty):
        * platform/graphics/chromium/LayerChromium.cpp:
        (WebCore::LayerChromium::LayerChromium):
        (WebCore::LayerChromium::setBounds):
        (WebCore::LayerChromium::setNeedsDisplayRect):
        * platform/graphics/chromium/LayerChromium.h:
        (WebCore::LayerChromium::setNeedsDisplay):
        (WebCore::LayerChromium::needsDisplay):
        * platform/graphics/chromium/TiledLayerChromium.cpp:
        (WebCore::TiledLayerChromium::setNeedsDisplayRect):
        (WebCore::TiledLayerChromium::invalidateRect):
        * platform/graphics/chromium/TiledLayerChromium.h:
        * platform/graphics/chromium/VideoLayerChromium.cpp:
        (WebCore::VideoLayerChromium::updateCompositorResources):
        * platform/graphics/chromium/WebGLLayerChromium.cpp:
        (WebCore::WebGLLayerChromium::updateCompositorResources):

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

        SocketStreamHandleCFNet doesn't check for proxy errors
        https://bugs.webkit.org/show_bug.cgi?id=71965

        Reviewed by Darin Adler.

        * platform/network/cf/SocketStreamHandleCFNet.cpp:
        (WebCore::getStoredCONNECTProxyCredentials): Added a FIXME about retrieving proxy credentials.
        (WebCore::SocketStreamHandle::addCONNECTCredentials): Added human readable messages to errors,
        they go to Web Inspector console.
        (WebCore::SocketStreamHandle::readStreamCallback): Handle proxy response codes other than 200
        and 407 by failing cleanly.

2011-11-30  Jeremy Apthorp  <jeremya@google.com>

        When the mouse is dragged out of an :active element, it should lose :hover.
        https://bugs.webkit.org/show_bug.cgi?id=57206

        Reviewed by Ryosuke Niwa.

        Test: fast/css/hover-active-drag.html

        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleMouseMoveEvent): Don't mark mouse-drag hit tests read-only, since they no longer are.
        (WebCore::EventHandler::dragSourceEndedAt): Send a hit test request when the mouse goes up after a drag, so
        RenderLayer has a chance to update the hover/active status.
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateHoverActiveState): Only allow the :active state to change on mouse down or mouse up.

2011-11-30  Hans Muller  <hmuller@adobe.com>

        XHR 'progress' event code assumes wrongly that expectedLength >= 0
        https://bugs.webkit.org/show_bug.cgi?id=36156

        Reviewed by Alexey Proskuryakov

        Avoid passing a negative value as the dispatchProgressEvent's total parameter and always use 0 when lengthComputable is false.

        Test: http/tests/xmlhttprequest/chunked-progress-event-expectedLength.html

        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::didReceiveData):

2011-11-30  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Unreviewed. Fix build error when NOTIFICATIONS feature is enabled.

        * CMakeLists.txt:

2011-11-30  Noel Gordon  <noel.gordon@gmail.com>

        Remove ImageFrame::setSize() style nits
        https://bugs.webkit.org/show_bug.cgi?id=73490

        Reviewed by Andreas Kling.

        Equality comparisons to 0 should be performed with the not operator, write
        width() == 0 && height() == 0 as !width() && !height().

        No new tests, style refactor.

        * platform/image-decoders/qt/ImageFrameQt.cpp:
        (WebCore::ImageFrame::setSize):
        * platform/image-decoders/skia/ImageDecoderSkia.cpp:
        (WebCore::ImageFrame::setSize):

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

        Remove an unneeded argument from FrameLoaderClient::download
        https://bugs.webkit.org/show_bug.cgi?id=73486

        Reviewed by Andreas Kling.

        No change in functionality.

        * loader/FrameLoaderClient.h: Removed initialRequest argument.

        * loader/MainResourceLoader.cpp: (WebCore::MainResourceLoader::continueAfterContentPolicy):
        We're already passing ResourceHandle, why also pass its data member?

        * loader/EmptyClients.h: (WebCore::EmptyFrameLoaderClient::download): Updated for the change.

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

        Original page URL is not set in quarantine information when downloading using context menu Save Linked File
        https://bugs.webkit.org/show_bug.cgi?id=73475
        <rdar://problem/10500337>

        Reviewed by Dan Bernstein.

        * WebCore.exp.in: Exported FrameLoader::setOriginalURLForDownloadRequest.

2011-11-30  Mark Pilgrim  <pilgrim@chromium.org>

        [FileSystem API] DirectoryEntry.getFile path argument is required
        https://bugs.webkit.org/show_bug.cgi?id=69642

        Reviewed by Adam Barth.

        Test: fast/filesystem/simple-required-arguments-getfile.html

        * bindings/js/JSDirectoryEntryCustom.cpp:
        (WebCore::JSDirectoryEntry::getFile): check args length and throw TypeError if not enough arguments
        * bindings/v8/custom/V8DirectoryEntryCustom.cpp:
        (WebCore::V8DirectoryEntry::getFileCallback): check args length and throw TypeError if not enough arguments

2011-11-30  Joshua Bell  <jsbell@chromium.org>

        IndexedDB: Implement IDBIndex multientry feature
        https://bugs.webkit.org/show_bug.cgi?id=73232

        Reviewed by Tony Chang.

        The multientry flag is used when populating indexes, either when the index
        is created on an existing store or as new values are added to the store.
        Per the spec the semantics are: if the flag is set and the index key is
        calculated to be an array, each member of the array is used as an index key
        instead.

        Test: storage/indexeddb/index-multientry.html

        * storage/IDBBackingStore.h:
        * storage/IDBIndex.h:
        (WebCore::IDBIndex::multientry):
        * storage/IDBIndex.idl:
        * storage/IDBIndexBackendImpl.cpp:
        (WebCore::IDBIndexBackendImpl::IDBIndexBackendImpl):
        * storage/IDBIndexBackendImpl.h:
        (WebCore::IDBIndexBackendImpl::create):
        (WebCore::IDBIndexBackendImpl::multientry):
        * storage/IDBIndexBackendInterface.h:
        * storage/IDBLevelDBBackingStore.cpp:
        (WebCore::checkIndexAndMetaDataKey):
        (WebCore::IDBLevelDBBackingStore::getIndexes):
        (WebCore::IDBLevelDBBackingStore::createIndex):
        * storage/IDBLevelDBBackingStore.h:
        * storage/IDBLevelDBCoding.cpp:
        * storage/IDBObjectStore.cpp:
        (WebCore::IDBObjectStore::createIndex):
        * storage/IDBObjectStoreBackendImpl.cpp:
        (WebCore::IDBObjectStoreBackendImpl::putInternal):
        (WebCore::IDBObjectStoreBackendImpl::populateIndex):
        (WebCore::IDBObjectStoreBackendImpl::createIndex):
        (WebCore::IDBObjectStoreBackendImpl::createIndexInternal):
        (WebCore::IDBObjectStoreBackendImpl::loadIndexes):
        * storage/IDBObjectStoreBackendImpl.h:
        * storage/IDBObjectStoreBackendInterface.h:

2011-11-30  David Reveman  <reveman@chromium.org>

        [Chromium] Add support for painting into an SkPicture and then rasterizing into tile-sized chunks.
        https://bugs.webkit.org/show_bug.cgi?id=71388

        Reviewed by James Robinson.

        Add UpdatableTexture class, which allows texture updater to
        allocate tile specific resources and paint tiles separately.
        Rename texture uploader classes and move them to separate files.

        No new tests. Covered by existing tests.

        * WebCore.gypi:
        * platform/graphics/chromium/BitmapCanvasLayerTextureUpdater.cpp: Added.
        (WebCore::BitmapCanvasLayerTextureUpdater::Texture::Texture):
        (WebCore::BitmapCanvasLayerTextureUpdater::Texture::~Texture):
        (WebCore::BitmapCanvasLayerTextureUpdater::Texture::updateRect):
        (WebCore::BitmapCanvasLayerTextureUpdater::create):
        (WebCore::BitmapCanvasLayerTextureUpdater::BitmapCanvasLayerTextureUpdater):
        (WebCore::BitmapCanvasLayerTextureUpdater::~BitmapCanvasLayerTextureUpdater):
        (WebCore::BitmapCanvasLayerTextureUpdater::createTexture):
        (WebCore::BitmapCanvasLayerTextureUpdater::sampledTexelFormat):
        (WebCore::BitmapCanvasLayerTextureUpdater::prepareToUpdate):
        (WebCore::BitmapCanvasLayerTextureUpdater::updateTextureRect):
        * platform/graphics/chromium/BitmapCanvasLayerTextureUpdater.h: Copied from Source/WebCore/platform/graphics/chromium/LayerTextureUpdater.h.
        (WebCore::BitmapCanvasLayerTextureUpdater::Texture::textureUpdater):
        (WebCore::BitmapCanvasLayerTextureUpdater::orientation):
        * platform/graphics/chromium/CanvasLayerTextureUpdater.cpp: Copied from Source/WebCore/platform/graphics/chromium/cc/CCTextureUpdater.h.
        (WebCore::CanvasLayerTextureUpdater::CanvasLayerTextureUpdater):
        (WebCore::CanvasLayerTextureUpdater::~CanvasLayerTextureUpdater):
        (WebCore::CanvasLayerTextureUpdater::paintContents):
        * platform/graphics/chromium/CanvasLayerTextureUpdater.h: Copied from Source/WebCore/platform/graphics/chromium/cc/CCTextureUpdater.h.
        (WebCore::CanvasLayerTextureUpdater::contentRect):
        * platform/graphics/chromium/ContentLayerChromium.cpp:
        (WebCore::ContentLayerChromium::createTextureUpdater):
        * platform/graphics/chromium/FrameBufferSkPictureCanvasLayerTextureUpdater.cpp: Added.
        (WebCore::FrameBuffer::FrameBuffer::FrameBuffer):
        (WebCore::FrameBuffer::FrameBuffer::~FrameBuffer):
        (WebCore::FrameBuffer::FrameBuffer::initialize):
        (WebCore::FrameBufferSkPictureCanvasLayerTextureUpdater::Texture::Texture):
        (WebCore::FrameBufferSkPictureCanvasLayerTextureUpdater::Texture::~Texture):
        (WebCore::FrameBufferSkPictureCanvasLayerTextureUpdater::Texture::updateRect):
        (WebCore::FrameBufferSkPictureCanvasLayerTextureUpdater::create):
        (WebCore::FrameBufferSkPictureCanvasLayerTextureUpdater::FrameBufferSkPictureCanvasLayerTextureUpdater):
        (WebCore::FrameBufferSkPictureCanvasLayerTextureUpdater::~FrameBufferSkPictureCanvasLayerTextureUpdater):
        (WebCore::FrameBufferSkPictureCanvasLayerTextureUpdater::createTexture):
        (WebCore::FrameBufferSkPictureCanvasLayerTextureUpdater::sampledTexelFormat):
        (WebCore::FrameBufferSkPictureCanvasLayerTextureUpdater::updateTextureRect):
        * platform/graphics/chromium/FrameBufferSkPictureCanvasLayerTextureUpdater.h: Copied from Source/WebCore/platform/graphics/chromium/LayerTextureUpdater.h.
        (WebCore::FrameBufferSkPictureCanvasLayerTextureUpdater::Texture::textureUpdater):
        (WebCore::FrameBufferSkPictureCanvasLayerTextureUpdater::orientation):
        * platform/graphics/chromium/ImageLayerChromium.cpp:
        (WebCore::ImageLayerTextureUpdater::Texture::Texture):
        (WebCore::ImageLayerTextureUpdater::Texture::updateRect):
        (WebCore::ImageLayerTextureUpdater::Texture::textureUpdater):
        (WebCore::ImageLayerTextureUpdater::createTexture):
        * platform/graphics/chromium/LayerRendererChromium.cpp:
        * platform/graphics/chromium/LayerTextureUpdater.h:
        (WebCore::LayerTextureUpdater::Texture::~Texture):
        (WebCore::LayerTextureUpdater::Texture::texture):
        (WebCore::LayerTextureUpdater::Texture::prepareRect):
        (WebCore::LayerTextureUpdater::Texture::Texture):
        (WebCore::LayerTextureUpdater::prepareToUpdate):
        * platform/graphics/chromium/LayerTextureUpdaterCanvas.cpp: Removed.
        * platform/graphics/chromium/LayerTextureUpdaterCanvas.h: Removed.
        * platform/graphics/chromium/SkPictureCanvasLayerTextureUpdater.cpp: Copied from Source/WebCore/platform/graphics/chromium/cc/CCTextureUpdater.h.
        (WebCore::SkPictureCanvasLayerTextureUpdater::SkPictureCanvasLayerTextureUpdater):
        (WebCore::SkPictureCanvasLayerTextureUpdater::~SkPictureCanvasLayerTextureUpdater):
        (WebCore::SkPictureCanvasLayerTextureUpdater::prepareToUpdate):
        (WebCore::SkPictureCanvasLayerTextureUpdater::drawPicture):
        * platform/graphics/chromium/SkPictureCanvasLayerTextureUpdater.h: Copied from Source/WebCore/platform/graphics/chromium/cc/CCTextureUpdater.h.
        * platform/graphics/chromium/TiledLayerChromium.cpp:
        (WebCore::UpdatableTile::UpdatableTile):
        (WebCore::UpdatableTile::texture):
        (WebCore::UpdatableTile::managedTexture):
        (WebCore::TiledLayerChromium::updateCompositorResources):
        (WebCore::TiledLayerChromium::pushPropertiesTo):
        (WebCore::TiledLayerChromium::createTile):
        (WebCore::TiledLayerChromium::protectTileTextures):
        (WebCore::TiledLayerChromium::prepareToUpdate):
        * platform/graphics/chromium/cc/CCTextureUpdater.cpp:
        (WebCore::CCTextureUpdater::append):
        (WebCore::CCTextureUpdater::update):
        * platform/graphics/chromium/cc/CCTextureUpdater.h:

2011-11-30  Rafael Weinstein  <rafaelw@chromium.org>

        [MutationObservers] Make WebKitMutationObserver::deliverAllMutations() tolerant of re-entrant calls
        https://bugs.webkit.org/show_bug.cgi?id=73472

        Reviewed by Ojan Vafai.

        No new tests. This patch just adds a static guard which makes more explicit the current semantics.

        * dom/WebKitMutationObserver.cpp:
        (WebCore::WebKitMutationObserver::deliverAllMutations):

2011-11-30  Takashi Toyoshima  <toyoshim@chromium.org>

        Add OVERRIDE to WebSocket related sources for safe inheritances.
        https://bugs.webkit.org/show_bug.cgi?id=73308

        Reviewed by Kent Tamura.

        No new tests because this change contains no functional change.

        * platform/network/chromium/SocketStreamHandle.h:
        * websockets/CloseEvent.h:
        * websockets/WebSocket.h:
        * websockets/WebSocketChannel.h:
        * websockets/WorkerThreadableWebSocketChannel.h:

2011-11-30  Mihnea Ovidenie  <mihnea@adobe.com>

        [CSSRegions]Rename CSSRegionStyleRule to WebKitCSSRegionRule
        https://bugs.webkit.org/show_bug.cgi?id=73450

        Reviewed by Andreas Kling.

        No functionality changed so no new tests. The new name has the webkit prefix as required for new api.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSParser.cpp:
        (WebCore::CSSParser::createRegionStylingRule):
        * css/CSSRule.cpp:
        (WebCore::CSSRule::cssText):
        (WebCore::CSSRule::destroy):
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::addRegionStyleRule):
        (WebCore::CSSStyleSelector::checkRegionStyle):
        (WebCore::RuleSet::addRulesFromSheet):
        * css/CSSStyleSelector.h:
        * css/WebKitCSSRegionRule.cpp: Renamed from Source/WebCore/css/CSSRegionStyleRule.cpp.
        (WebCore::WebKitCSSRegionRule::WebKitCSSRegionRule):
        (WebCore::WebKitCSSRegionRule::~WebKitCSSRegionRule):
        (WebCore::WebKitCSSRegionRule::cssText):
        * css/WebKitCSSRegionRule.h: Renamed from Source/WebCore/css/CSSRegionStyleRule.h.

2011-11-30  Jeff Timanus  <twiz@chromium.org>

        Alter an early return that was preventing HTMLCanvasElement::didDraw notifications
        from being triggered when accelerated compositing was enabled. The notification is
        necessary to make sure that any cached state is cleared in the HTMLCanvasElement object.
        To prevent performance regressions, the cached state is explicitly cleared, as the didDraw
        machinery is not necessary for accelerated canvases.
        https://bugs.webkit.org/show_bug.cgi?id=73257

        Reviewed by Stephen White.

        Test: fast/canvas/webgl/canvas-2d-webgl-texture.html

        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::didDraw):
        (WebCore::HTMLCanvasElement::setSurfaceSize):
        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::didDraw):

2011-11-30  Kentaro Hara  <haraken@chromium.org>

        Implement the StorageEvent constructor
        https://bugs.webkit.org/show_bug.cgi?id=71685

        Reviewed by Adam Barth.

        This patch makes StorageEvent constractable.
        The spec: http://www.whatwg.org/specs/web-apps/current-work/#storageevent

        Test: fast/events/constructors/storage-event-constructor.html

        * bindings/js/JSDictionary.cpp:
        (WebCore::JSDictionary::tryGetProperty):
        (WebCore::JSDictionary::convertValue): Returns a Storage object corresponding to a given key.
        * bindings/js/JSDictionary.h:
        (WebCore::JSDictionary::tryGetProperty):
        * bindings/v8/OptionsObject.cpp:
        (WebCore::OptionsObject::get): Ditto.
        * bindings/v8/OptionsObject.h:
        * storage/StorageEvent.cpp: Added an implementation of the StorageEvent constructor.
        (WebCore::StorageEventInit::StorageEventInit):
        (WebCore::StorageEvent::create):
        (WebCore::StorageEvent::StorageEvent):
        * storage/StorageEvent.h: Added a definition of StorageEventInit.
        (WebCore::StorageEvent::key):
        (WebCore::StorageEvent::oldValue):
        (WebCore::StorageEvent::newValue):
        (WebCore::StorageEvent::url):
        (WebCore::StorageEvent::storageArea):
        * storage/StorageEvent.idl: Added [ConstructorTemplate=Event] IDL.

2011-11-30  Naveen Bobbili  <qghc36@motorola.com>

        window.getMatchedCSSRules() not supporting pseudo element
        https://bugs.webkit.org/show_bug.cgi?id=72930

        Reviewed by Darin Adler.

        Added functionality to retrieve CSS rules of psuedo elements using
        getMatchedCSSRules.

        Test: fast/dom/Window/getMatchedCSSRules-with-pseudo-elements.html

        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::getMatchedCSSRules):
        Retreiving CSS Rules of the appropriate pseudo element.

2011-11-30  Grace Kloba  <klobag@chromium.org>

        [chromium] TextureManager LRU list is not fully honor the order tiles are used
        https://bugs.webkit.org/show_bug.cgi?id=73344

        Reviewed by James Robinson.

        Reorder the texture in the LRU list only when protectTexture() is called.

        * platform/graphics/chromium/TextureManager.cpp:
        (WebCore::TextureManager::hasTexture):
        (WebCore::TextureManager::protectTexture):

2011-11-30  Ken Buchanan <kenrb@chromium.org>

        Crash from first letter text fragments having flows split
        https://bugs.webkit.org/show_bug.cgi?id=72759

        Reviewed by David Hyatt.

        When an inline flow is split that contains a first letter block
        and its remaining text, it can prevent the remaining text fragment
        from getting updated if the first letter block is replaced. This
        patch enables the text fragment to be found and updated properly.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::updateFirstLetterBlock):

2011-11-30  Takashi Toyoshima  <toyoshim@chromium.org>

        Get rid of AllowCrossThreadAccess throughout ThreadableWebSocketChannelClientWrapper.
        https://bugs.webkit.org/show_bug.cgi?id=73336

        Reviewed by David Levin.

        No new tests because it contains no functional change.

        * websockets/ThreadableWebSocketChannelClientWrapper.cpp:
        (WebCore::ThreadableWebSocketChannelClientWrapper::didConnect):
        (WebCore::ThreadableWebSocketChannelClientWrapper::didReceiveMessage):
        (WebCore::ThreadableWebSocketChannelClientWrapper::didReceiveBinaryData):
        (WebCore::ThreadableWebSocketChannelClientWrapper::didUpdateBufferedAmount):
        (WebCore::ThreadableWebSocketChannelClientWrapper::didStartClosingHandshake):
        (WebCore::ThreadableWebSocketChannelClientWrapper::didClose):
        (WebCore::ThreadableWebSocketChannelClientWrapper::didConnectCallback):
        (WebCore::ThreadableWebSocketChannelClientWrapper::didReceiveMessageCallback):
        (WebCore::ThreadableWebSocketChannelClientWrapper::didReceiveBinaryDataCallback):
        (WebCore::ThreadableWebSocketChannelClientWrapper::didUpdateBufferedAmountCallback):
        (WebCore::ThreadableWebSocketChannelClientWrapper::didStartClosingHandshakeCallback):
        (WebCore::ThreadableWebSocketChannelClientWrapper::didCloseCallback):
        * websockets/ThreadableWebSocketChannelClientWrapper.h:

2011-11-30  Leo Yang  <leo.yang@torchmobile.com.cn>

        [BlackBerry] Add 2 cpp files to the BlackBerry build system
        https://bugs.webkit.org/show_bug.cgi?id=73408

        platform/network/blackberry/DeferredData.cpp and platform/network/blackberry/NetworkJob.cpp
        will be added, change build system first.

        Reviewed by Antonio Gomes.

        * PlatformBlackBerry.cmake:

2011-11-30  Gregg Tavares  <gman@google.com>

        Implement draft WEBGL_compressed_textures WebGL extension
        https://bugs.webkit.org/show_bug.cgi?id=72086

        Reviewed by Kenneth Russell.

        No new tests. Will write final test once on hardware.

        * CMakeLists.txt:
        * DerivedSources.make:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSWebGLRenderingContextCustom.cpp:
        (WebCore::toJS):
        * bindings/v8/custom/V8WebGLRenderingContextCustom.cpp:
        (WebCore::toV8Object):
        * html/canvas/WebGLCompressedTextures.cpp: Added.
        (WebCore::WebGLCompressedTextures::WebGLCompressedTextures):
        (WebCore::WebGLCompressedTextures::~WebGLCompressedTextures):
        (WebCore::WebGLCompressedTextures::getName):
        (WebCore::WebGLCompressedTextures::create):
        (WebCore::WebGLCompressedTextures::supported):
        (WebCore::WebGLCompressedTextures::validateCompressedTexFormat):
        (WebCore::WebGLCompressedTextures::validateCompressedTexFuncData):
        (WebCore::WebGLCompressedTextures::validateCompressedTexSubDimensions):
        (WebCore::WebGLCompressedTextures::compressedTexImage2D):
        (WebCore::WebGLCompressedTextures::compressedTexSubImage2D):
        (WebCore::WebGLCompressedTextures::getCompressedTextureFormats):
        * html/canvas/WebGLCompressedTextures.h: Added.
        * html/canvas/WebGLCompressedTextures.idl: Added.
        * html/canvas/WebGLExtension.h:
        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::getExtension):
        (WebCore::WebGLRenderingContext::getParameter):
        (WebCore::WebGLRenderingContext::getSupportedExtensions):
        * html/canvas/WebGLRenderingContext.h:
        * platform/graphics/Extensions3D.h:
        * platform/graphics/GraphicsContext3D.h:
        * platform/graphics/efl/GraphicsContext3DEfl.cpp:
        (WebCore::GraphicsContext3D::compressedTexImage2D):
        (WebCore::GraphicsContext3D::compressedTexSubImage2D):
        * platform/graphics/opengl/GraphicsContext3DOpenGL.cpp:
        (WebCore::GraphicsContext3D::compressedTexImage2D):
        (WebCore::GraphicsContext3D::compressedTexSubImage2D):
        * platform/graphics/qt/GraphicsContext3DQt.cpp:
        (WebCore::GraphicsContext3D::compressedTexImage2D):
        (WebCore::GraphicsContext3D::compressedTexSubImage2D):

2011-11-18  Nat Duca  <nduca@chromium.org>

        [chromium] Enable threaded compositing via CCThreadProxy::hasThread only
        https://bugs.webkit.org/show_bug.cgi?id=70838

        Reviewed by James Robinson.

        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::initialize):
        * platform/graphics/chromium/WebGLLayerChromium.cpp:
        (WebCore::WebGLLayerChromium::layerRendererContext):
        * platform/graphics/chromium/cc/CCHeadsUpDisplay.cpp:
        (WebCore::CCHeadsUpDisplay::enabled):
        * platform/graphics/chromium/cc/CCLayerTreeHost.cpp:
        (WebCore::CCLayerTreeHost::initialize):
        (WebCore::CCLayerTreeHost::context):
        (WebCore::CCLayerTreeHost::setNeedsAnimate):
        (WebCore::CCLayerTreeHost::setNeedsCommit):
        (WebCore::CCLayerTreeHost::setNeedsRedraw):
        (WebCore::CCLayerTreeHost::composite):
        * platform/graphics/chromium/cc/CCLayerTreeHost.h:
        (WebCore::CCSettings::CCSettings):
        * platform/graphics/chromium/cc/CCProxy.cpp:
        (WebCore::CCProxy::isMainThread):
        (WebCore::CCProxy::isImplThread):
        (WebCore::CCProxy::setMainThreadIsImplThread):
        * platform/graphics/chromium/cc/CCProxy.h:
        * platform/graphics/chromium/cc/CCSingleThreadProxy.h:
        (WebCore::DebugScopedSetImplThread::DebugScopedSetImplThread):
        (WebCore::DebugScopedSetImplThread::~DebugScopedSetImplThread):

2011-11-30  Enrica Casucci  <enrica@apple.com>

        Copy/paste of the same content produces increasingly nested markup
        https://bugs.webkit.org/show_bug.cgi?id=73497
        <rdar://problem/10208605>
        
        When pasting a fragment over a selection, we perfom a DeleteSelection command
        followed by a ReplaceSelection command. Delete selection preserves the style
        of the selection start, leaving all the blocks containing the insertion point.
        This patch eliminates all the nested divs that don't provide additional style,
        avoiding the proliferation of nested divs. 

        Reviewed by Darin Adler.

        Tests: editing/deleting/delete-and-cleanup.html
               editing/pasteboard/paste-without-nesting.html

        * editing/DeleteSelectionCommand.cpp:
        (WebCore::DeleteSelectionCommand::removeRedundantBlocks):
        (WebCore::DeleteSelectionCommand::doApply):
        * editing/DeleteSelectionCommand.h:

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

        WebCore part of: Allow the length of a page along the pagination axis to differ from the length of the view
        https://bugs.webkit.org/show_bug.cgi?id=73476

        Reviewed by Anders Carlsson.

        * page/Page.cpp:
        (WebCore::Page::setPagination): Changed to use Pagination::operator==.
        * page/Page.h:
        (WebCore::Page::Pagination::Pagination): Added initializer for the new pageLength member variable.
        (WebCore::Page::Pagination::operator==): Added.
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::layoutColumns): Narrowed the scope of a local variable.
        * rendering/RenderBlock.h: Promoted setDesiredColumnCountAndWidth() from private to protected,
        allowing its use from RenderView::calcColumnWidth(). Made calcColumnWidth() virtual.
        * rendering/RenderView.cpp:
        (WebCore::RenderView::calcColumnWidth): Added. Uses the page length specified in the pagination
        parameters to set the column width, if pages are to be laid out one next to the other.
        (WebCore::RenderView::viewLogicalHeight): Added. Uses the page length specified in the pagination
        parameters as the height, if pages are to be laid out one after the other.
        * rendering/RenderView.h:

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

        AX: Nodes are reporting that focus can be set when they really can't
        https://bugs.webkit.org/show_bug.cgi?id=72791

        Reviewed by Beth Dakin.

        Whether focus can be set on a node shouldn't rely only on the role.
        It should depend on whether the node supports focus.

        Test: platform/mac/accessibility/supports-focus-setting.html

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::canSetFocusAttribute):

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

        WebKit does not send mouse down/up/click events to ARIA tabs
        https://bugs.webkit.org/show_bug.cgi?id=72573

        Reviewed by Darin Adler.

        There are a number of "control" type elements that should perform a click on the actual element.

        Test: accessibility/press-works-on-control-types.html

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::actionElement):

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

        AX: Searching mechanism is too slow when finding the element.
        https://bugs.webkit.org/show_bug.cgi?id=72523

        Reviewed by Beth Dakin.

        This makes the element searching mechanism much faster. Previously, searching literally went 
        through every element, looking for the start element before "starting" the search.

        Now we only go through the elements that need to be searched. This is done by going up the 
        start object parent chain. At each level, a DFS is done. As we go up the parent chain, 
        only the elements before/after the current element are examined.

        * accessibility/AccessibilityObject.cpp:
        (WebCore::appendChildrenToArray):
        (WebCore::AccessibilityObject::findMatchingObjects):

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

        Cannot select RTL text inside LTR text from right to left by a mouse drag
        https://bugs.webkit.org/show_bug.cgi?id=73056

        Reviewed by Eric Seidel.

        The bug was caused by positionAtRightBoundaryOfBiDiRun using current inline box's offset
        even when creating a position with previous inline box. Fixed the bug by using the correct offset.

        * editing/RenderedPosition.cpp:
        (WebCore::RenderedPosition::positionAtLeftBoundaryOfBiDiRun):
        (WebCore::RenderedPosition::positionAtRightBoundaryOfBiDiRun):

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

        AX: Searching mechanism gets stuck when searching tables
        https://bugs.webkit.org/show_bug.cgi?id=72519

        When searching through the elements within a data table, the children() method should not
        be used, since that contains elements (like a table header column) which have the same children
        as the table itself. Instead the cells() should be searched.

        Reviewed by Beth Dakin.

        Test: platform/mac/accessibility/search-when-element-starts-in-table.html

        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::findMatchingObjects):

2011-11-29  Ryosuke Niwa  <rniwa@webkit.org>

        Assertion failure (m_nestedIsolateCount >= 1) in BidiResolver::exitIsolate()
        https://bugs.webkit.org/show_bug.cgi?id=69267

        Reviewed by Eric Seidel.

        The failure was caused by our updating bidi resolver's current position in layoutRunsAndFloatsInRange
        without updating the number of nested isolated ancestors. Fixed the bug by computing the number of
        isolated ancestors when setting a new position to the bidi resolver.

        Also renamed the existing BidiResolver::setPosition to setPositionIgnoringNestedIsolates because this
        version can be used only when we don't have to update the number of nested isolates.

        Tests: fast/text/bidi-isolate-hang-with-neutral-expected.html
               fast/text/bidi-isolate-hang-with-neutral.html
               fast/text/bidi-isolate-nextlinebreak-failure.html

        * platform/graphics/GraphicsContext.cpp:
        (WebCore::GraphicsContext::drawBidiText):
        * platform/text/BidiResolver.h:
        (WebCore::BidiResolver::setPositionIgnoringNestedIsolates):
        (WebCore::BidiResolver::setPosition):
        * rendering/InlineIterator.h:
        (WebCore::numberOfIsolateAncestors): Takes InlineIterator instead of object and root.
        (WebCore::InlineBidiResolver::appendRun):
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::constructBidiRuns):
        (WebCore::RenderBlock::layoutRunsAndFloatsInRange):
        (WebCore::RenderBlock::determineStartPosition):

2011-11-30  Brent Fulgham  <bfulgham@webkit.org>

        [WinCairo] Correct SimpleFontData implementation to match Apple results.
        https://bugs.webkit.org/show_bug.cgi?id=73474

        Reviewed by Adam Roben.

        Tested by existing dom/xhtml/level3/core/nodegetbaseuri05.xhtml
        and dom/xhtml/level3/core/nodegetbaseuri07.xhtml

        * platform/graphics/SimpleFontData.h: Add declaration for new
          'ascentConsideringMacAscentHack' method.
        * platform/graphics/win/SimpleFontDataCGWin.cpp: Remove implementation
          of 'platformCharWidthInit' (moved to SimpleFontDataWin.cpp). Also
          use new 'ascentConsideringMacAscentHack' method.
        * platform/graphics/win/SimpleFontDataCairoWin.cpp: Remove dummy
          implementation.
        (WebCore::SimpleFontData::platformInit): Add logic to handle the
          'shouldApplyMacAscentHack' case, as well as to identify system font
          using the same criteria as the Apple port.
        (WebCore::SimpleFontData::platformWidthForGlyph): Add check for
          missing font data state.
        * platform/graphics/win/SimpleFontDataWin.cpp:
        (WebCore::SimpleFontData::ascentConsideringMacAscentHack): New
        (WebCore::SimpleFontData::platformCharWidthInit): Moved from the
          CG implementation.

2011-11-30  David Levin  <levin@chromium.org>

        Make FrameView use TemporarilyChange in a few places.
        https://bugs.webkit.org/show_bug.cgi?id=73403

        Reviewed by Dmitry Titov.

        No new functionality exposed so no new tests.

        * page/FrameView.cpp:
        (WebCore::FrameView::forceLayoutParentViewIfNeeded): Since this function isn't
        re-entrant, TemporarilyChange does the same thing but in a more robust manner
        in case there would be a return added in the function.
        (WebCore::FrameView::layout): This place is the key reason for the change.
        layout is re-entrant, but layout will set m_layoutSchedulingEnabled to true when
        leaving though the "layout" function higher in the stack would still have it set
        to false (which works ok but is hit by another change I'm working on).
        The majority of the change is due to indenting the code to make m_layoutSchedulingEnabled
        and TemporarilyChange behave like they did before. A few variables were moved before
        the scoping to allow them to be used after the scope is closed.
        (WebCore::FrameView::setScrollPosition): TemporarilyChange does exactly what
        this code did before (saving the old value and restoring it).

2011-11-30  Alejandro G. Castro  <alex@igalia.com>

        [GTK] Add TextureMapperCairo boilerplate implementation
        https://bugs.webkit.org/show_bug.cgi?id=73440

        Add TextureMapperCairo class and TextureMapper classes compilation
        for GTK+.

        Reviewed by Martin Robinson.

        * GNUmakefile.am:
        * GNUmakefile.list.am:
        * platform/graphics/GraphicsContext3D.h:
        * platform/graphics/GraphicsLayer.cpp:
        * platform/graphics/GraphicsLayer.h:
        * platform/graphics/cairo/GraphicsContext3DCairo.cpp:
        (WebCore::GraphicsContext3D::platformLayer):
        * platform/graphics/cairo/TextureMapperCairo.cpp: Added.
        (WebCore::BitmapTextureCairo::destroy):
        (WebCore::BitmapTextureCairo::size):
        (WebCore::BitmapTextureCairo::reset):
        (WebCore::BitmapTextureCairo::beginPaint):
        (WebCore::BitmapTextureCairo::endPaint):
        (WebCore::BitmapTextureCairo::updateContents):
        (WebCore::BitmapTextureCairo::save):
        (WebCore::BitmapTextureCairo::setContentsToImage):
        (WebCore::TextureMapperCairo::beginClip):
        (WebCore::TextureMapperCairo::endClip):
        (WebCore::TextureMapperCairo::viewportSize):
        (WebCore::TextureMapperCairo::TextureMapperCairo):
        (WebCore::TextureMapperCairo::setGraphicsContext):
        (WebCore::TextureMapperCairo::graphicsContext):
        (WebCore::TextureMapperCairo::bindSurface):
        (WebCore::TextureMapperCairo::drawTexture):
        (WebCore::TextureMapper::create):
        (WebCore::TextureMapperCairo::createTexture):
        (WebCore::BitmapTextureCairo::BitmapTextureCairo):
        (WebCore::TextureMapperCairo::beginPainting):
        (WebCore::TextureMapperCairo::endPainting):
        * platform/graphics/cairo/TextureMapperCairo.h: Added.
        (WebCore::BitmapTextureCairo::~BitmapTextureCairo):
        (WebCore::BitmapTextureCairo::isValid):
        (WebCore::BitmapTextureCairo::sourceRect):
        (WebCore::BitmapTextureCairo::pack):
        (WebCore::BitmapTextureCairo::unpack):
        (WebCore::BitmapTextureCairo::isPacked):
        (WebCore::BitmapTextureCairo::cr):
        (WebCore::TextureMapperCairo::allowSurfaceForRoot):
        (WebCore::TextureMapperCairo::create):

2011-11-30  Tim Horton  <timothy_horton@apple.com>

        Implement CSS3 Images cross-fade() image function
        https://bugs.webkit.org/show_bug.cgi?id=52162
        <rdar://problem/10209254>

        Reviewed by Simon Fraser.

        Fix platform layering violation by moving CachedImage invalidation code into
        CSSCrossfadeValue (instead of CrossfadeGeneratedImage).

        No new tests.

        * css/CSSCrossfadeValue.cpp:
        (WebCore::loadSubimage):
        (WebCore::CSSCrossfadeValue::~CSSCrossfadeValue):
        (WebCore::CSSCrossfadeValue::customCssText):
        (WebCore::CSSCrossfadeValue::fixedSize):
        (WebCore::CSSCrossfadeValue::isPending):
        (WebCore::CSSCrossfadeValue::loadSubimages):
        (WebCore::CSSCrossfadeValue::image):
        (WebCore::CSSCrossfadeValue::CrossfadeSubimageObserverProxy::imageChanged):
        * css/CSSCrossfadeValue.h:
        (WebCore::CSSCrossfadeValue::create):
        (WebCore::CSSCrossfadeValue::setPercentage):
        (WebCore::CSSCrossfadeValue::CSSCrossfadeValue):
        (WebCore::CSSCrossfadeValue::CrossfadeSubimageObserverProxy::CrossfadeSubimageObserverProxy):
        (WebCore::CSSCrossfadeValue::CrossfadeSubimageObserverProxy::~CrossfadeSubimageObserverProxy):
        (WebCore::CSSCrossfadeValue::CrossfadeSubimageObserverProxy::setReady):
        * platform/graphics/CrossfadeGeneratedImage.cpp:
        (WebCore::CrossfadeGeneratedImage::CrossfadeGeneratedImage):
        (WebCore::CrossfadeGeneratedImage::drawCrossfade):
        (WebCore::CrossfadeGeneratedImage::drawPattern):
        * platform/graphics/CrossfadeGeneratedImage.h:
        (WebCore::CrossfadeGeneratedImage::create):

2011-11-30  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: [Regression] Successfully loaded XHRs are shown as canceled.
        https://bugs.webkit.org/show_bug.cgi?id=72873

        Reviewed by Nate Chapin.

        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::cancelIfNotFinishing):
        * loader/SubresourceLoader.h:
        * loader/cache/CachedRawResource.cpp:
        (WebCore::CachedRawResource::allClientsRemoved):

2011-11-30  Simon Hausmann  <simon.hausmann@nokia.com>

        [V8] Make WebCoreTestingSupport::resetInternalsObject more robust
        https://bugs.webkit.org/show_bug.cgi?id=73437

        Reviewed by Adam Barth.

        The Qt DRT may end up calling resetInternalsObject at a time when
        there's no internals object yet. In that case the looking of the internals
        object in the global object fails and returns undefined. V8Internals::toNative
        doesn't handle that and causing failing assertions. This patch adds a simple
        check to handle this case.

        * testing/v8/WebCoreTestSupport.cpp:
        (WebCoreTestSupport::resetInternalsObject):

2011-11-30  James Simonsen  <simonjam@chromium.org>

        Fix valgrind issue in SubresourceLoader::didFinishLoading
        https://bugs.webkit.org/show_bug.cgi?id=72787

        Hang on to CachedResource until finish() is called.

        Reviewed by Nate Chapin.

        Test: fast/loader/subresource-load-failed-crash.html (under asan)

        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::didFinishLoading):
        (WebCore::SubresourceLoader::didFail):

2011-11-30  Tim Horton  <timothy_horton@apple.com>

        feImage referencing a primitive draws incorrectly
        https://bugs.webkit.org/show_bug.cgi?id=71731
        <rdar://problem/10408178>

        Reviewed by Simon Fraser.

        If the target of an <feImage> appears to be a local fragment identifier, but
        it hasn't resolved yet, defer resolution instead of loading a bogus image.

        Invalidate <feImage> if the xlink:href attribute changes.

        Don't attempt to render an <feImage> if the referenced element is of size 0x0.

        Tests: svg/filters/feImage-reference-invalidation.svg
               svg/filters/feImage-reference-svg-primitive.svg
               svg/filters/feImage-zero-size-crash.svg

        * svg/SVGFEImageElement.cpp:
        (WebCore::SVGFEImageElement::parseMappedAttribute):
        (WebCore::SVGFEImageElement::build):

2011-11-30  Robin Dunn  <robin@alldunn.com>

        [wx] Ensure we always notify the popup client that the popup
        was hidden, and fix handling of empty menu items.
        https://bugs.webkit.org/show_bug.cgi?id=73464
        
        Reviewed by Kevin Ollivier.

        * platform/wx/PopupMenuWx.cpp:
        (WebCore::PopupMenuEventHandler::OnMenuItemSelected):
        (WebCore::PopupMenuWx::show):

2011-11-30  Tim Horton  <timothy_horton@apple.com>

        dx causes non-BMP characters to fail to render
        https://bugs.webkit.org/show_bug.cgi?id=18039
        <rdar://problem/10422142>

        Reviewed by Simon Fraser.

        Don't split the surrogate pairs of non-BMP characters across
        elements of <text> positioning lists.

        Test: svg/text/non-bmp-positioning-lists.svg

        * rendering/svg/SVGTextLayoutAttributesBuilder.cpp:
        (WebCore::SVGTextLayoutAttributesBuilder::propagateLayoutAttributes):

2011-11-30  Robin Dunn  <robin@alldunn.com>

        [wx] Add a scope for the raw bitmap access so that wx
        will not make a copy when creating the wxMemoryDC.
        https://bugs.webkit.org/show_bug.cgi?id=73461
        
        Reviewed By Kevin Ollivier.

        * platform/wx/LocalDC.h:
        (WebCore::LocalDC::LocalDC):

2011-11-30  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Inspect element does not highlight element in elements panel when inspector is opened.
        https://bugs.webkit.org/show_bug.cgi?id=73459

        Reviewed by Pavel Feldman.

        This regressed in r101503.

        * inspector/InjectedScriptHost.cpp:
        (WebCore::InjectedScriptHost::InjectedScriptHost):
        (WebCore::InjectedScriptHost::disconnect):
        (WebCore::InjectedScriptHost::inspectImpl):
        * inspector/InjectedScriptHost.h:
        (WebCore::InjectedScriptHost::init):
        * inspector/InspectorAgent.cpp:
        (WebCore::InspectorAgent::enable):
        (WebCore::InspectorAgent::inspect):
        * inspector/InspectorAgent.h:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::connectFrontend):
        (WebCore::InspectorController::disconnectFrontend):
        * inspector/WorkerInspectorController.cpp:
        (WebCore::WorkerInspectorController::connectFrontend):
        (WebCore::WorkerInspectorController::disconnectFrontend):

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

        Remove dead flexible box code
        https://bugs.webkit.org/show_bug.cgi?id=73377

        Reviewed by Darin Adler.

        We used to use these with an earlier version of the spec where margins
        set to auto were treated as flex(1).

        No new tests, just removing some uncalled methods.

        * rendering/RenderFlexibleBox.cpp:
        * rendering/RenderFlexibleBox.h:

2011-11-30  Antti Koivisto  <antti@apple.com>

        Reuse cached style fully if the parent inherited styles are equal 
        https://bugs.webkit.org/show_bug.cgi?id=73421

        Reviewed by Oliver Hunt.

        The matched declaration cache currently restores the non-inherted properties from the cache
        entry but still applies all inherited properties normally. In case the current parent
        inherited style is equivalent to the cache entry's, also the inherited style can be reused
        and no properties need to be applied. This is faster and saves memory (by sharing the
        style substructures better).
        
        The new optimized code path has a pretty good hit rate, >50% of all cases on many pages.
        
        Loading the HTML5 spec this reduces style memory consumption by ~20% (5MB, ~2.5% of total) and 
        speeds up style applying by ~25% for ~0.4s (2-3%) gain in the spec loading benchmark.
        
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyDeclaration):
        (WebCore::CSSStyleSelector::applyDeclarations):
        
            Remove the code that dynamically disables inherited only applying. We now don't allow
            styles with explicitly inherited properties to be cached in the first place.
        
        (WebCore::CSSStyleSelector::findFromMatchedDeclarationCache):
        
            Return the full cache item.
        
        (WebCore::CSSStyleSelector::addToMatchedDeclarationCache):
        
            Also the parent style is now needed for the check for full sharing.
        
        (WebCore::isCacheableInMatchedDeclarationCache):

            Don't allow styles with explicitly inherited properties to be cached at all.
        
        (WebCore::CSSStyleSelector::applyMatchedDeclarations):
        
            If the parent inherited styles are equal reuse the cache entry fully and return without
            doing anything else.
        
        * css/CSSStyleSelector.h:
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::inheritedDataShared):
        * rendering/style/RenderStyle.h:
        
            Add fast check for equal inherited properties.

2011-11-30  Renata Hodovan  <reni@webkit.org>

        CG buildfix after r101517.

        Rubber stamped by Zoltan Herczeg.

        * rendering/svg/RenderSVGRect.cpp:
        (WebCore::RenderSVGRect::fillShape):

2011-11-30  Anna Cavender  <annacc@chromium.org>

        Missing RuntimeEnabled check for <track>
        https://bugs.webkit.org/show_bug.cgi?id=73398

        Reviewed by Eric Carlson.

        No new tests. This fixes a problem when --enable-video-track is not used,
        but the tests use this flag.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::trackWillBeRemoved):

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

        Web Inspector: [refactoring] do not clone nodes that contain linkified URLs
        https://bugs.webkit.org/show_bug.cgi?id=73323

        Reviewed by Pavel Feldman.

        * inspector/front-end/StylesSidebarPane.js:
        (WebInspector.StylePropertiesSection):
        (WebInspector.StylePropertiesSection.prototype._createRuleOriginNode):
        (WebInspector.StylePropertiesSection.prototype.editingSelectorCommitted.successCallback):
        (WebInspector.StylePropertiesSection.prototype.editingSelectorCommitted):
        (WebInspector.ComputedStylePropertiesSection.prototype.rebuildComputedTrace):
        (WebInspector.BlankStylePropertiesSection.prototype.makeNormal):
        * inspector/front-end/elementsPanel.css:
        (.styles-section a[data-uncopyable]):
        (.styles-section a[data-uncopyable]::before):

2011-11-30  Renata Hodovan  <reni@webkit.org>

        Add new renderer for SVGRectElement.
        https://bugs.webkit.org/show_bug.cgi?id=65769

        Reviewed by Nikolas Zimmermann.

        This patch introduces a new common base class called RenderSVGShape which
        replaces the RenderSVGPath. This new base class has the same purpose
        as the replaced class and has specialized descendants for common
        shapes (like Rectangles and Circles), which allows faster painting
        of these shapes when certain conditions are fulfilled. On some
        benchmark programs we have seen 5% speedup.

        The biggest motivation of this refactor is taking advantage
        of faster primitive drawing in the most common and frequent
        cases. However in some rare cases, like painting rounded
        rects, we need to fallback to the original code path, which
        is fully kept in the RenderSVGShape base class. Some other
        cases, like dashed strokes, can be painted but mouse pointer
        events cannot be handled by the descendant classes. A different
        fallback mechanism is used in such cases which redirects
        only the pointer event handling to the base class.

        Tests: svg/custom/pointer-events-on-rounded-rect.xhtml
               svg/custom/pointer-events-with-linecaps-and-miterlimits.xhtml

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * platform/graphics/FloatRect.cpp:
        (WebCore::FloatRect::contains):
        * platform/graphics/FloatRect.h:
        (WebCore::FloatRect::contains):
        * rendering/RenderObject.h:
        (WebCore::RenderObject::isSVGRect):
        (WebCore::RenderObject::isSVGShape):
        * rendering/RenderTreeAsText.cpp:
        (WebCore::write):
        * rendering/svg/RenderSVGAllInOne.cpp:
        * rendering/svg/RenderSVGModelObject.cpp:
        (WebCore::isGraphicsElement):
        * rendering/svg/RenderSVGPath.cpp:
        (WebCore::RenderSVGPath::RenderSVGPath):
        (WebCore::RenderSVGPath::inflateWithStrokeAndMarkerBounds): Unite the markerBounds with strokeBoundingBox.
        * rendering/svg/RenderSVGPath.h:
        * rendering/svg/RenderSVGRect.cpp: Added.
        (WebCore::RenderSVGRect::RenderSVGRect):
        (WebCore::RenderSVGRect::~RenderSVGRect):
        (WebCore::RenderSVGRect::createShape):
        (WebCore::RenderSVGRect::objectBoundingBox):
        (WebCore::RenderSVGRect::strokeBoundingBox):
        (WebCore::RenderSVGRect::fillShape):
        (WebCore::RenderSVGRect::strokeShape):
        (WebCore::RenderSVGRect::shapeDependentStrokeContains):
        (WebCore::RenderSVGRect::shapeDependentFillContains):
        * rendering/svg/RenderSVGRect.h: Added.
        (WebCore::RenderSVGRect::isSVGRect):
        (WebCore::RenderSVGRect::renderName):
        (WebCore::RenderSVGRect::isEmpty):
        * rendering/svg/RenderSVGResource.h:
        (WebCore::RenderSVGResource::postApplyResource): A new shape argument was added to allow shape specific faster painting.
        * rendering/svg/RenderSVGResourceClipper.cpp:
        (WebCore::RenderSVGResourceClipper::drawContentIntoMaskImage):
        (WebCore::RenderSVGResourceClipper::calculateClipContentRepaintRect):
        (WebCore::RenderSVGResourceClipper::hitTestClipContent):
        * rendering/svg/RenderSVGResourceContainer.cpp:
        (WebCore::RenderSVGResourceContainer::transformOnNonScalingStroke):
        * rendering/svg/RenderSVGResourceFilter.cpp:
        (WebCore::RenderSVGResourceFilter::postApplyResource):
        * rendering/svg/RenderSVGResourceFilter.h:
        * rendering/svg/RenderSVGResourceGradient.cpp:
        (WebCore::RenderSVGResourceGradient::applyResource):
        * rendering/svg/RenderSVGResourceGradient.h:
        * rendering/svg/RenderSVGResourcePattern.cpp:
        (WebCore::RenderSVGResourcePattern::postApplyResource):
        * rendering/svg/RenderSVGResourcePattern.h:
        * rendering/svg/RenderSVGResourceSolidColor.cpp:
        (WebCore::RenderSVGResourceSolidColor::postApplyResource):
        * rendering/svg/RenderSVGResourceSolidColor.h:
        * rendering/svg/RenderSVGShape.cpp: Copied from Source/WebCore/rendering/svg/RenderSVGPath.cpp.
        (WebCore::RenderSVGShape::RenderSVGShape):
        (WebCore::RenderSVGShape::~RenderSVGShape):
        (WebCore::RenderSVGShape::createShape):
        (WebCore::RenderSVGShape::isEmpty):
        (WebCore::RenderSVGShape::fillShape):
        (WebCore::RenderSVGShape::objectBoundingBox):
        (WebCore::RenderSVGShape::strokeBoundingBox):
        (WebCore::RenderSVGShape::strokeShape):
        (WebCore::RenderSVGShape::shapeDependentStrokeContains):
        The purpose of this virtual function allows decendants to use their own fast checks.
        (WebCore::RenderSVGShape::shapeDependentFillContains):
        The purpose of this virtual function allows decendants to use their own fast checks.
        (WebCore::RenderSVGShape::fillContains):
        (WebCore::RenderSVGShape::strokeContains):
        (WebCore::RenderSVGShape::layout):
        (WebCore::RenderSVGShape::shouldStrokeZeroLengthSubpath):
        (WebCore::RenderSVGShape::zeroLengthSubpathRect):
        (WebCore::RenderSVGShape::setupSquareCapPath):
        (WebCore::RenderSVGShape::setupNonScalingStrokePath):
        (WebCore::RenderSVGShape::fillAndStrokePath):
        (WebCore::RenderSVGShape::paint):
        (WebCore::RenderSVGShape::addFocusRingRects):
        (WebCore::RenderSVGShape::nodeAtFloatPoint):
        (WebCore::RenderSVGShape::calculateMarkerBoundsIfNeeded):
        (WebCore::RenderSVGShape::updateCachedBoundaries):
        (WebCore::RenderSVGShape::strokeWidth):
        * rendering/svg/RenderSVGShape.h: Copied from Source/WebCore/rendering/svg/RenderSVGPath.h.
        (WebCore::BoundingRectStrokeStyleApplier::BoundingRectStrokeStyleApplier):
        (WebCore::BoundingRectStrokeStyleApplier::strokeStyle):
        (WebCore::RenderSVGShape::setNeedsShapeUpdate):
        (WebCore::RenderSVGShape::setNeedsBoundariesUpdate):
        (WebCore::RenderSVGShape::setNeedsTransformUpdate):
        (WebCore::RenderSVGShape::isPaintingFallback):
        (WebCore::RenderSVGShape::path):
        (WebCore::RenderSVGShape::setIsPaintingFallback):
        (WebCore::RenderSVGShape::setStrokeAndMarkerBoundingBox):
        (WebCore::RenderSVGShape::hasPath):
        (WebCore::RenderSVGShape::repaintRectInLocalCoordinates):
        (WebCore::RenderSVGShape::localToParentTransform):
        (WebCore::RenderSVGShape::localTransform):
        (WebCore::RenderSVGShape::isSVGShape):
        (WebCore::RenderSVGShape::renderName):
        (WebCore::RenderSVGShape::isRoundedRect):
        (WebCore::RenderSVGShape::inflateWithMarkerBounds):
        (WebCore::toRenderSVGShape):
        * rendering/svg/SVGInlineTextBox.cpp:
        (WebCore::SVGInlineTextBox::releasePaintingResource):
        * rendering/svg/SVGRenderSupport.cpp:
        (WebCore::SVGRenderSupport::finishRenderSVGContent):
        (WebCore::SVGRenderSupport::layoutChildren):
        * rendering/svg/SVGRenderTreeAsText.cpp:
        (WebCore::writeStyle):
        (WebCore::operator<<):
        (WebCore::write):
        * rendering/svg/SVGRenderTreeAsText.h:
        * rendering/svg/SVGTextRunRenderingContext.cpp:
        (WebCore::SVGTextRunRenderingContext::drawSVGGlyphs):
        * svg/SVGCircleElement.cpp:
        (WebCore::SVGCircleElement::svgAttributeChanged):
        * svg/SVGEllipseElement.cpp:
        (WebCore::SVGEllipseElement::svgAttributeChanged):
        * svg/SVGLineElement.cpp:
        (WebCore::SVGLineElement::svgAttributeChanged):
        * svg/SVGPathElement.cpp:
        (WebCore::SVGPathElement::svgAttributeChanged):
        (WebCore::SVGPathElement::pathSegListChanged):
        (WebCore::SVGPathElement::createRenderer):
        * svg/SVGPathElement.h:
        * svg/SVGPolyElement.cpp:
        (WebCore::SVGPolyElement::svgAttributeChanged):
        * svg/SVGRectElement.cpp:
        (WebCore::SVGRectElement::svgAttributeChanged):
        (WebCore::SVGRectElement::createRenderer):
        * svg/SVGRectElement.h:

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

        Another Clang build fix after r101507

        * platform/network/SocketStreamHandleClient.h:
        (WebCore::SocketStreamHandleClient::didUpdateBufferedAmount): Removed unused parameter.

2011-11-30  Renata Hodovan  <reni@webkit.org>

        MAC build fix after r101507.

        Rubber stamped by Csaba Osztrogonac.

        * platform/network/SocketStreamHandleClient.h:
        (WebCore::SocketStreamHandleClient::didUpdateBufferedAmount):
        * websockets/WebSocket.cpp:
        (WebCore::WebSocket::didUpdateBufferedAmount):
        * websockets/WebSocket.h:
        * websockets/WebSocketChannel.cpp:
        (WebCore::WebSocketChannel::didUpdateBufferedAmount):
        * websockets/WebSocketChannel.h:

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

        Remove unnecessary asserts in HTMLTextAreaElement.
        https://bugs.webkit.org/show_bug.cgi?id=73135

        http://code.google.com/p/chromium/issues/detail?id=103228 shows
        that sometimes we are hitting the following assert in
        HTMLTextAreaElement::updateFocusAppearance:

        ASSERT(!document()->childNeedsAndNotInStyleRecalc());

        This assert was added by https://bugs.webkit.org/show_bug.cgi?id=27474
        as part of a fix for a crash when the selection is set immediately
        after setting display:none.

        All the methods called by updateFocusAppearance already handle the
        case of the document having the childNeedsStyleRecalc flag set, so
        this assert is unnecessary. The ASSERT(renderer()) is similarly
        redundant.

        Reviewed by Kent Tamura.

        * html/HTMLTextAreaElement.cpp:
        (WebCore::HTMLTextAreaElement::updateFocusAppearance):

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

        Clang build fix after r101507

        * websockets/WebSocketChannelClient.h:
        (WebCore::WebSocketChannelClient::didUpdateBufferedAmount): Removed unused parameter.

2011-11-30  Nikita Vasilyev  <me@elv1s.ru>

        Web Inspector: Preserve an indentation level when inserting a new line
        https://bugs.webkit.org/show_bug.cgi?id=71625

        Indent one level more when a line ends with either "{", "[" or "(".

        Reviewed by Pavel Feldman.

        * inspector/front-end/TextEditorModel.js:
        (WebInspector.TextRange.prototype.collapseToEnd):
        (WebInspector.TextRange.prototype.normalize):
        * inspector/front-end/TextViewer.js:
        (WebInspector.TextViewer.prototype._registerShortcuts):
        (WebInspector.TextViewer.prototype._handleKeyDown):
        (WebInspector.TextEditorMainPanel.prototype.handleEnterKey):
        (WebInspector.TextEditorMainPanel.prototype._getSelection):

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

        Web Inspector: Display of data URIs cumbersome in the Elements panel
        https://bugs.webkit.org/show_bug.cgi?id=73438

        Reviewed by Pavel Feldman.

        * inspector/front-end/ElementsTreeOutline.js:
        (WebInspector.ElementsTreeElement.prototype._buildAttributeDOM):

2011-11-28  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: TreeOutline elements should be formatted using margin-left instead of text-indent.
        https://bugs.webkit.org/show_bug.cgi?id=73234

        Reviewed by Pavel Feldman.

        * inspector/front-end/ResourceHeadersView.js:
        (WebInspector.ResourceHeadersView.prototype._refreshHeadersText):
        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.BaseStorageTreeElement.prototype.get searchMatchesCount):
        * inspector/front-end/auditsPanel.css:
        (.audit-result-tree li):
        (.audit-result-tree li.parent):
        (.audit-result img):
        * inspector/front-end/inspector.css:
        (.outline-disclosure li):
        (.outline-disclosure li.parent):
        * inspector/front-end/networkPanel.css:
        * inspector/front-end/resourcesPanel.css:
        (.resources.panel .sidebar-resizer-vertical):
        (.resources.panel .sidebar li):
        * inspector/front-end/treeoutline.js:
        (TreeElement.prototype.isEventWithinDisclosureTriangle):

2011-11-30  Kentaro Hara  <haraken@chromium.org>

        Implement the [NamedConstructor] IDL in CodeGeneratorJS.pm
        https://bugs.webkit.org/show_bug.cgi?id=73307

        Reviewed by Adam Barth.

        This patch implements the [NamedConstructor] IDL for JSC.
        The spec: http://www.w3.org/TR/WebIDL/#NamedConstructor

        Tests: bindings/scripts/test/JS/JSTestNamedConstructor.idl

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateHeader): Removed unnecessary conditions '$dataNode->extendedAttributes->{"JSCustomConstructor"} || $dataNode->extendedAttributes->{"CustomConstructor"}'.
        (GenerateImplementation): Calls GenerateConstructorDefinition() to generate a NamedConstructor.
        (GenerateConstructorDeclaration): Generates a header for a NamedConstructor.
        (GenerateConstructorDefinition): Generates a NamedConstructor implementation and getConstructData() for the NamedConstructor.
        (IsConstructable): Added a NamedConstructor condition.

        * bindings/scripts/test/JS/JSTestNamedConstructor.cpp: Updated a run-bindings-tests result.
        (WebCore::JSTestNamedConstructorNamedConstructor::JSTestNamedConstructorNamedConstructor):
        (WebCore::JSTestNamedConstructorNamedConstructor::finishCreation):
        (WebCore::JSTestNamedConstructorNamedConstructor::constructJSTestNamedConstructor):
        (WebCore::JSTestNamedConstructorNamedConstructor::getConstructData):
        * bindings/scripts/test/JS/JSTestNamedConstructor.h: Ditto.
        (WebCore::JSTestNamedConstructorNamedConstructor::create):
        (WebCore::JSTestNamedConstructorNamedConstructor::createStructure):

2011-11-30  Takashi Toyoshima  <toyoshim@chromium.org>

        Add didUpdateBufferedAmount() callback to SocketStreamHandleClient
        and WebSocketChannelClient.
        https://bugs.webkit.org/show_bug.cgi?id=73290

        Reviewed by Kent Tamura.

        No new tests because this callback is not used in WebCore.

        * platform/network/SocketStreamHandleBase.cpp: Invoke new callback.
        (WebCore::SocketStreamHandleBase::send):
        (WebCore::SocketStreamHandleBase::sendPendingData):
        * platform/network/SocketStreamHandleBase.h: Change returning value type.
        (WebCore::SocketStreamHandleBase::bufferedAmount):
        * platform/network/SocketStreamHandleClient.h: Add new callback definition.
        (WebCore::SocketStreamHandleClient::didUpdateBufferedAmount):
        * websockets/ThreadableWebSocketChannelClientWrapper.cpp: Add new callback handling.
        (WebCore::ThreadableWebSocketChannelClientWrapper::didUpdateBufferedAmount):
        (WebCore::ThreadableWebSocketChannelClientWrapper::didUpdateBufferedAmountCallback):
        * websockets/ThreadableWebSocketChannelClientWrapper.h: Add new callback inheritance and its helper method.
        * websockets/WebSocket.cpp: Add new callback handling.
        (WebCore::WebSocket::didUpdateBufferedAmount):
        * websockets/WebSocket.h: Add new callback inheritance.
        * websockets/WebSocketChannel.cpp: Add new callback handling.
        (WebCore::WebSocketChannel::didUpdateBufferedAmount):
        * websockets/WebSocketChannel.h: Add new callback inheritacne.
        * websockets/WebSocketChannelClient.h: Add new callback definition.
        (WebCore::WebSocketChannelClient::didUpdateBufferedAmount):
        * websockets/WorkerThreadableWebSocketChannel.cpp: Add new callback handling.
        (WebCore::workerContextDidUpdateBufferedAmount):
        (WebCore::WorkerThreadableWebSocketChannel::Peer::didUpdateBufferedAmount):
        * websockets/WorkerThreadableWebSocketChannel.h: Add new callback inheritance and its helper method.

2011-11-30  Kentaro Hara  <haraken@chromium.org>

        [Refactoring] In preprocessor.pm, remove double quotations from $defines
        https://bugs.webkit.org/show_bug.cgi?id=73160

        Reviewed by Adam Barth.

        In preprocessor.pm, we need to extract gcc macros from $defines.
        $defines can contain unnecessary double quotations.
        For example, if $defines is ' "A=1" "B=1" C=1 ""    D  ',
        then it should be converted into four macros, -DA=1, -DB=1, -DC=1 and -DD.
        This patch refactors the logic in preprocessor.pm.

        No new tests. No change in behavior.

        * bindings/scripts/generate-bindings.pl: Removed a code for $defines conversion, since it is now done in preprocessor.pm.
        * bindings/scripts/preprocessor.pm:
        (applyPreprocessor):

2011-11-30  Kenichi Ishibashi  <bashi@chromium.org>

        @font-face: unquoted local font names containing spaces don't work
        https://bugs.webkit.org/show_bug.cgi?id=64783

        Allows local font names with spaces.
        Rejects the src descriptor if there is invalid identifiers in local(), as the same as Firefox.

        Reviewed by Ryosuke Niwa.

        Tests: fast/css/font-face-unquoted-local-expected.html
               fast/css/font-face-unquoted-local.html

        * css/CSSParser.cpp:
        (WebCore::parseFontFaceSrcFunction): Added. Treats multiple identifiers in local() as a font name separated by spaces.
        (WebCore::CSSParser::parseFontFaceSrc): Moved the code block which parses local() and format() to parseFontFaceSrcFunction().

2011-11-30  Pavel Feldman  <pfeldman@google.com>

        Web Inspector: get rid of deferred backend->front-end commands processing.
        https://bugs.webkit.org/show_bug.cgi?id=73439

        We should issue tests upon InspectorAgent::enable and should not do any deferred command processing.

        Reviewed by Yury Semikhatsky.

        * inspector/InspectorAgent.cpp:
        (WebCore::InspectorAgent::InspectorAgent):
        (WebCore::InspectorAgent::setFrontend):
        (WebCore::InspectorAgent::clearFrontend):
        (WebCore::InspectorAgent::enable):
        (WebCore::InspectorAgent::evaluateForTestInFrontend):
        * inspector/InspectorAgent.h:
        * inspector/front-end/inspector.js:

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

        REGRESSION(r101172): It made fast/dom/clone-node-style.html assert.
        <http://webkit.org/b/73227>

        Reviewed by Antti Koivisto.

        r101172 inadvertently introduced a default assignment operator for CSSElementStyleDeclaration
        which caused StyledElement::copyNonAttributeProperties() to associate the element's inline
        style declaration with the element being cloned.

        Replace CSSMutableStyleDeclaration::operator= by copyPropertiesAndStrictnessFrom()
        that matches the old behavior.

        * css/CSSMutableStyleDeclaration.cpp:
        (WebCore::CSSMutableStyleDeclaration::copyPropertiesAndStrictnessFrom):
        * css/CSSMutableStyleDeclaration.h:
        * dom/StyledElement.cpp:
        (WebCore::StyledElement::copyNonAttributeProperties):

2011-11-30  Mary Wu  <mary.wu@torchmobile.com.cn>

        remove buildinformation from BlackBerry porting build system
        https://bugs.webkit.org/show_bug.cgi?id=73276

        Reviewed by Daniel Bates.

        * PlatformBlackBerry.cmake: remove generated files BuildInformation.cpp/.h

2011-11-30  Luke Macpherson   <macpherson@chromium.org>

        Implement Zoom Property in CSSSStyleApplyProperty.
        https://bugs.webkit.org/show_bug.cgi?id=72840

        Reviewed by Andreas Kling.

        Covered by fast/css/*zoom*.html

        * css/CSSStyleApplyProperty.cpp:
        Add new handler for zoom property (based on existing code from CSSStyleSelector.cpp)
        (WebCore::ApplyPropertyZoom::resetEffectiveZoom):
        (WebCore::ApplyPropertyZoom::applyInheritValue):
        (WebCore::ApplyPropertyZoom::applyInitialValue):
        (WebCore::ApplyPropertyZoom::applyValue):
        (WebCore::ApplyPropertyZoom::createHandler):
        (WebCore::CSSStyleApplyProperty::CSSStyleApplyProperty):
        * css/CSSStyleSelector.cpp:
        Remove existing implementation.
        (WebCore::CSSStyleSelector::applyProperty):
        * css/CSSStyleSelector.h:
        (WebCore::CSSStyleSelector::document):
        Add getter for Document.

2011-11-30  David Reveman  <reveman@chromium.org>

        [Chromium] Re-enable layer anti-aliasing on ChromeOS.
        https://bugs.webkit.org/show_bug.cgi?id=73361

        Reviewed by James Robinson.

        Anti-aliasing should be enabled by default on ChromeOS.

        No new tests.

        * platform/graphics/chromium/cc/CCRenderSurface.cpp:
        (WebCore::CCRenderSurface::drawLayer):
        * platform/graphics/chromium/cc/CCTiledLayerImpl.cpp:
        (WebCore::CCTiledLayerImpl::draw):

2011-11-30  Michael Nordman  <michaeln@google.co>

        [chromium] WebSQLDatabase could use some better error reporting.
        Instruments the database classes to report errors to a DatabaseObserver.
        https://bugs.webkit.org/show_bug.cgi?id=73258

        Reviewed by David Levin.

        No new tests, no content observable artifacts.

        * storage/AbstractDatabase.cpp:
        (WebCore::AbstractDatabase::AbstractDatabase):
        (WebCore::AbstractDatabase::performOpenAndVerify):
        (WebCore::AbstractDatabase::incrementalVacuumIfNeeded):
        (WebCore::AbstractDatabase::reportOpenDatabaseResult):
        (WebCore::AbstractDatabase::reportChangeVersionResult):
        (WebCore::AbstractDatabase::reportStartTransactionResult):
        (WebCore::AbstractDatabase::reportCommitTransactionResult):
        (WebCore::AbstractDatabase::reportExecuteStatementResult):
        (WebCore::AbstractDatabase::reportVacuumDatabaseResult):
        * storage/AbstractDatabase.h:
        (WebCore::AbstractDatabase::isSyncDatabase):
        * storage/ChangeVersionWrapper.cpp:
        (WebCore::ChangeVersionWrapper::performPreflight):
        (WebCore::ChangeVersionWrapper::performPostflight):
        * storage/Database.cpp:
        (WebCore::Database::Database):
        * storage/DatabaseSync.cpp:
        (WebCore::DatabaseSync::DatabaseSync):
        (WebCore::DatabaseSync::changeVersion):
        * storage/SQLStatement.cpp:
        (WebCore::SQLStatement::execute):
        (WebCore::SQLStatement::setDatabaseDeletedError):
        (WebCore::SQLStatement::setVersionMismatchedError):
        (WebCore::SQLStatement::setFailureDueToQuota):
        * storage/SQLStatement.h:
        * storage/SQLTransaction.cpp:
        (WebCore::SQLTransaction::executeSQL):
        (WebCore::SQLTransaction::openTransactionAndPreflight):
        (WebCore::SQLTransaction::deliverTransactionCallback):
        (WebCore::SQLTransaction::runCurrentStatement):
        (WebCore::SQLTransaction::handleCurrentStatementError):
        (WebCore::SQLTransaction::deliverStatementCallback):
        (WebCore::SQLTransaction::postflightAndCommit):
        * storage/SQLTransactionSync.cpp:
        (WebCore::SQLTransactionSync::begin):
        (WebCore::SQLTransactionSync::commit):
        * storage/chromium/DatabaseObserver.h:

2011-11-30  Rafael Weinstein  <rafaelw@chromium.org>

        [MutationObservers] V8 bindings don't properly wrap all calls into JS
        https://bugs.webkit.org/show_bug.cgi?id=72063

        Reviewed by Adam Barth.

        This patch changes cleans up script invocation in V8Proxy. It removes callFunctionWithoutFrame
        and changes callers to simply call instrumentedFunctionCall with a null Page. Also, it implements
        the non-static callFunction to be implemented in terms of instrumentedFunctionCall.

        No new tests.

        * bindings/v8/ScriptFunctionCall.cpp:
        (WebCore::ScriptCallback::call):
        * bindings/v8/V8NodeFilterCondition.cpp:
        (WebCore::V8NodeFilterCondition::acceptNode):
        * bindings/v8/V8Proxy.cpp:
        (WebCore::V8Proxy::callFunction):
        (WebCore::V8Proxy::instrumentedCallFunction):
        * bindings/v8/V8Proxy.h:
        * bindings/v8/custom/V8CustomXPathNSResolver.cpp:
        (WebCore::V8CustomXPathNSResolver::lookupNamespaceURI):

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

        Unreviewed, rolling out r101440 and r101442.
        http://trac.webkit.org/changeset/101440
        http://trac.webkit.org/changeset/101442
        https://bugs.webkit.org/show_bug.cgi?id=73429

        multiple crashes on layout tests (Requested by hayato on
        #webkit).

        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::initialize):
        * platform/graphics/chromium/WebGLLayerChromium.cpp:
        (WebCore::WebGLLayerChromium::layerRendererContext):
        * platform/graphics/chromium/cc/CCHeadsUpDisplay.cpp:
        (WebCore::CCHeadsUpDisplay::enabled):
        * platform/graphics/chromium/cc/CCLayerTreeHost.cpp:
        (WebCore::CCLayerTreeHost::CCLayerTreeHost):
        (WebCore::CCLayerTreeHost::initialize):
        (WebCore::CCLayerTreeHost::~CCLayerTreeHost):
        (WebCore::CCLayerTreeHost::context):
        (WebCore::CCLayerTreeHost::setNeedsAnimate):
        (WebCore::CCLayerTreeHost::setNeedsCommit):
        (WebCore::CCLayerTreeHost::setNeedsRedraw):
        (WebCore::CCLayerTreeHost::composite):
        * platform/graphics/chromium/cc/CCLayerTreeHost.h:
        (WebCore::CCSettings::CCSettings):
        * platform/graphics/chromium/cc/CCProxy.cpp:
        (WebCore::CCProxy::isMainThread):
        (WebCore::CCProxy::isImplThread):
        (WebCore::CCProxy::setImplThread):
        * platform/graphics/chromium/cc/CCProxy.h:
        * platform/graphics/chromium/cc/CCSingleThreadProxy.h:
        (WebCore::DebugScopedSetImplThread::DebugScopedSetImplThread):
        (WebCore::DebugScopedSetImplThread::~DebugScopedSetImplThread):

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

        Download page URL should be set by WebCore
        https://bugs.webkit.org/show_bug.cgi?id=73358

        Reviewed by Darin Adler.

        No change in behavior, just refactoring.

        * loader/FrameLoader.h:
        * loader/FrameLoader.cpp:
        (WebCore::originatingURLFromBackForwardList):
        (WebCore::FrameLoader::setOriginalURLForDownloadRequest):
        Moved implementations from WebKit, added a bunch of FIXMEs.

        * loader/MainResourceLoader.cpp: (WebCore::MainResourceLoader::continueAfterContentPolicy):
        Set main document URL (incorrectly renamed to "first party for cookies" in WebCore), so that
        CFNetwork would automatically use it.

        * loader/PolicyChecker.cpp: (WebCore::PolicyChecker::continueAfterNavigationPolicy): Ditto
        for requests that start as downloads (as opposed to being converted after reading first bits
        of response).

2011-11-30  Rafael Weinstein  <rafaelw@chromium.org>

        Remove unused isInlineCode from V8Proxy
        https://bugs.webkit.org/show_bug.cgi?id=73341

        Reviewed by Adam Barth.

        No tests needed. This patch only removes unnecessary code.

        * bindings/v8/V8LazyEventListener.cpp:
        (WebCore::V8LazyEventListener::prepareListenerObject):
        * bindings/v8/V8Proxy.cpp:
        (WebCore::V8Proxy::V8Proxy):
        (WebCore::V8Proxy::evaluate):
        (WebCore::V8Proxy::runScript):
        * bindings/v8/V8Proxy.h:

2011-11-30  Andrew Wason  <rectalogic@rectalogic.com>

        Replace Qt QThread threading back-end with pthread/Win32 threading back-ends
        https://bugs.webkit.org/show_bug.cgi?id=72155

        Reviewed by Simon Hausmann.

        Need to include qglobal.h since ThreadingPrimitives.h no longer does.

        * platform/network/NetworkingContext.h:

2011-11-30  Jongseok Yang  <js45.yang@samsung.com>

        [SOUP][WK2] Implement the functions to manager cookies in CookieJar for WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=72353

        r79722 inserted the functions to manange cookies from web process.
        (getHostnamesWithCookies,deleteCookiesForHostname,deleteAllCookies)
        Implement the functions for soup network backend.

        Reviewed by Martin Robinson.

        * platform/network/soup/CookieJarSoup.cpp:
        (WebCore::getHostnamesWithCookies):
        (WebCore::deleteCookiesForHostname):
        (WebCore::deleteAllCookies):

2011-11-30  Daniel Sievers  <sievers@chromium.org>

        [Chromium] Avoid ASSERT_NOT_REACHED() from creating FBO with content texture of size 0
        https://bugs.webkit.org/show_bug.cgi?id=73266

        Remove render surface layers with no children after clipping to
        the parent layer.

        Move the check for empty render surfaces after the piece of code
        used to apply the parent's clip, as we might end up calling
        renderSurface->clearLayerList().

        Render surfaces with no children or visible content are unexpected
        especially at draw time where we might try to create a content
        texture and FBO with a size of zero, which will fail. This fixes
        an ASSERT_NOT_REACHED() for checkFramebufferStatus() != COMPLETE

        Reviewed by James Robinson.

        Added unit test.

        * platform/graphics/chromium/cc/CCLayerTreeHostCommon.cpp:
        (WebCore::calculateDrawTransformsAndVisibilityInternal):

2011-11-30  Pavel Feldman  <pfeldman@google.com>

        Web Inspector: do not report worker-related events unless inspector agent is enabled.
        https://bugs.webkit.org/show_bug.cgi?id=73411

        Backend should not generate messages until the client requests that they are sent.

        Reviewed by Yury Semikhatsky.

        * inspector/Inspector.json:
        * inspector/InspectorAgent.cpp:
        (WebCore::InspectorAgent::setFrontend):
        (WebCore::InspectorAgent::clearFrontend):
        (WebCore::InspectorAgent::enable):
        (WebCore::InspectorAgent::disable):
        (WebCore::InspectorAgent::postWorkerNotificationToFrontend):
        (WebCore::InspectorAgent::didCreateWorker):
        (WebCore::InspectorAgent::didDestroyWorker):
        (WebCore::InspectorAgent::developerExtrasEnabled):
        * inspector/InspectorAgent.h:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::enabled):
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::didLoadResourceFromMemoryCacheImpl):
        (WebCore::InspectorInstrumentation::didCommitLoadImpl):
        (WebCore::InspectorInstrumentation::didOpenDatabaseImpl):
        (WebCore::InspectorInstrumentation::didUseDOMStorageImpl):
        (WebCore::InspectorInstrumentation::didCreateWebSocketImpl):
        * inspector/InspectorPageAgent.cpp:
        * inspector/PageConsoleAgent.cpp:
        (WebCore::PageConsoleAgent::developerExtrasEnabled):
        * inspector/front-end/WorkerManager.js:
        (WebInspector.WorkerManager.prototype._workerInspectorClosing):
        (WebInspector.WorkerManager.prototype._disconnectedFromWorker):
        (WebInspector.DedicatedWorkerMessageForwarder.prototype.dispatchMessageFromWorker):
        (WebInspector.DedicatedWorkerMessageForwarder.prototype.disconnectedFromWorker):
        * inspector/front-end/inspector.js:

2011-11-30  Jacky Jiang  <zhajiang@rim.com>

        Upstream BlackBerry porting of WebCore/editing.
        https://bugs.webkit.org/show_bug.cgi?id=73275

        Reviewed by Daniel Bates.

        Initial upstream, no new tests.

        * editing/blackberry/EditorBlackBerry.cpp: Added.
        (WebCore::Editor::newGeneralClipboard):
        * editing/blackberry/SmartReplaceBlackBerry.cpp: Added.
        (WebCore::isCharacterSmartReplaceExempt):

2011-11-30  Noel Gordon  <noel.gordon@gmail.com>

        JPEGImageDecoder: Code input color space case entries in numerical order
        https://bugs.webkit.org/show_bug.cgi?id=73287

        Reviewed by Adam Barth.

        No new tests. Covered by existing tests.

        * platform/image-decoders/jpeg/JPEGImageDecoder.cpp:
        (WebCore::JPEGImageReader::decode): JCS_YCbCr is one greater than JSC_RGB.

2011-11-30  Alexandru Chiculita  <achicu@adobe.com>

        FilterOperation* should stay in rendering/style, because it is directly referenced from RenderStyle
        https://bugs.webkit.org/show_bug.cgi?id=72539

        Reviewed by Dean Jackson.

        No new tests, just moving some files.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * rendering/style/CustomFilterOperation.h: Renamed from Source/WebCore/platform/graphics/filters/CustomFilterOperation.h.
        * rendering/style/FilterOperation.h: Renamed from Source/WebCore/platform/graphics/filters/FilterOperation.h.
        * rendering/style/FilterOperations.cpp: Renamed from Source/WebCore/platform/graphics/filters/FilterOperations.cpp.
        * rendering/style/FilterOperations.h: Renamed from Source/WebCore/platform/graphics/filters/FilterOperations.h.

2011-11-29  Kentaro Hara  <haraken@chromium.org>

        StorageEvent.key should not be nullable
        https://bugs.webkit.org/show_bug.cgi?id=73125

        Reviewed by Adam Barth.

        Currently, document.createEvent('StorageEvent').key is evaluated as null.
        However, the spec (http://www.whatwg.org/specs/web-apps/current-work/#storageevent)
        says that StorageEvent.key is not a nullable type, and thus
        document.createEvent('StorageEvent').key should be '' (an empty string).

        * storage/StorageEvent.idl: Removed a [ConvertNullStringTo=Null] IDL from StorageEvent.key.

2011-11-29  Philip Rogers  <pdr@google.com>

        Fix for fill color not being applied inside visited links
        https://bugs.webkit.org/show_bug.cgi?id=70434

        Reviewed by Antti Koivisto.

        Test: svg/custom/visited-link-color.svg

        * rendering/style/SVGRenderStyle.h:
        (WebCore::SVGRenderStyle::setFillPaint):
        (WebCore::SVGRenderStyle::setStrokePaint):

2011-11-29  David Levin  <levin@chromium.org>

        Add a way to revert a variable to its previous value after leaving a scope.
        https://bugs.webkit.org/show_bug.cgi?id=73371

        Reviewed by Adam Barth.

        * ForwardingHeaders/wtf/TemporarilyChange.h: Added.

2011-11-28  Kentaro Hara  <haraken@chromium.org>

        Implement [Supplemental] IDL and support it in run-bindings-tests
        https://bugs.webkit.org/show_bug.cgi?id=73162

        Reviewed by Adam Barth.

        - Overview:
            - Implement the [Supplemental] IDL in resolve-supplemental.pl and generate-bindings.pl.
            - Support the [Supplemental] IDL in run-bindings-tests.
            - Add TestSupplemental.idl as a binding test and confirm that it works.

        - The spec for the [Supplemental] IDL: http://dev.w3.org/2006/webapi/WebIDL/#dfn-supplemental-interface

        - This patch affects run-bindings-tests results only and does not affect any real builds
        since no [Supplemental] IDL has been written in real WebCore IDL files for now.

        - This patch makes a change on CodeGenerator*.pm to support the [Supplemental] IDL
        for (custom) getters and setters.

        - Added perl scripts implement the [Supplemental] IDL as follows:

            Previous build flow:
                foreach $idl (all IDL files) {
                    generate-bindings.pl depends on $idl;
                    generate-bindings.pl reads $idl;
                    generate-bindings.pl generates .h and .cpp files for $idl;
                }

            New build flow (See the discussions in bug 72138 for more details):
                resolve-supplemental.pl depends on all IDL files;
                resolve-supplemental.pl reads all IDL files;
                resolve-supplemental.pl resolves the dependency of [Supplemental=XXXX];
                resolve-supplemental.pl outputs supplemental_dependency.tmp;
                foreach $idl (all IDL files) {
                    generate-bindings.pl depends on $idl and supplemental_dependency.tmp;
                    generate-bindings.pl reads $idl;
                    generate-bindings.pl reads supplemental_dependency.tmp;
                    generate-bindings.pl generates .h and .cpp files for $idl, including all attributes in IDL files which are implementing $idl;
                }

        Tests: bindings/scripts/test/TestSupplemental.idl

        * bindings/scripts/generate-bindings.pl: The input is an IDL file |x| and the dependency file. generate-bindings.pl generates .h and .cpp files for the IDL file |x|, including all the attributes in the IDL files which are implementing the IDL file |x|. generate-bindings.pl addes the [ImplementedBy] IDL to the attributes with the [Supplemental] IDL in order to indicate what IDL is implementing the attributes.
        * bindings/scripts/resolve-supplemental.pl: Added. resolve-supplemental.pl reads all IDL files, resolves [Supplemental=XXX] dependencies, and then outputs the dependency file. See the comment in resolve-supplemental.pl for the format of the dependency file.

        * bindings/scripts/CodeGenerator.pm:
        (GenerateConditionalStringFromAttributeValue): Avoids duplicated conditions.
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateHeader): If an attribute is [ImplementedBy] another IDL, then we omit the declaration of the custom getter and setter.
        (GenerateImplementation): If an attribute is [ImplementedBy] another IDL, then we call back the (custom) getter and setter of the IDL.
        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateHeader): If an attribute is [ImplementedBy] another IDL, then we omit the declaration of the custom getter and setter.
        (GenerateNormalAttrGetter): If an attribute is [ImplementedBy] another IDL, then we call back the getter of the IDL.
        (GenerateNormalAttrSetter): If an attribute is [ImplementedBy] another IDL, then we call back the setter of the IDL.
        (GenerateSingleBatchedAttribute): If an attribute is [ImplementedBy] another IDL, then we call back the custom getter or setter of the IDL.
        * bindings/scripts/CodeGeneratorCPP.pm:
        (GenerateImplementation): If an attribute is [ImplementedBy] another IDL, then we call back the getter and setter of the IDL. CodeGeneratorCPP.pm does not support a custom getter and setter.
        * bindings/scripts/CodeGeneratorGObject.pm:
        (GenerateProperty): Ditto.
        * bindings/scripts/CodeGeneratorObjC.pm:
        (GenerateImplementation): Ditto.

        * bindings/scripts/test/TestSupplemental.idl: Added. A test case for the [Supplemental] IDL.
        * bindings/scripts/test/CPP/WebDOMTestInterface.cpp: Updated a run-bindings-tests result.
        (WebDOMTestInterface::str1):
        (WebDOMTestInterface::str2):
        (WebDOMTestInterface::setStr2):
        * bindings/scripts/test/CPP/WebDOMTestInterface.h: Ditto.
        * bindings/scripts/test/GObject/WebKitDOMTestInterface.cpp: Ditto.
        (webkit_dom_test_interface_get_str1):
        (webkit_dom_test_interface_get_str2):
        (webkit_dom_test_interface_set_str2):
        (webkit_dom_test_interface_set_property):
        (webkit_dom_test_interface_get_property):
        (webkit_dom_test_interface_class_init):
        * bindings/scripts/test/GObject/WebKitDOMTestInterface.h: Ditto.
        * bindings/scripts/test/JS/JSTestInterface.cpp: Ditto.
        (WebCore::jsTestInterfaceStr1):
        (WebCore::jsTestInterfaceStr2):
        (WebCore::jsTestInterfaceStr3):
        (WebCore::JSTestInterface::put):
        (WebCore::setJSTestInterfaceStr2):
        (WebCore::setJSTestInterfaceStr3):
        * bindings/scripts/test/JS/JSTestInterface.h: Ditto.
        * bindings/scripts/test/ObjC/DOMTestInterface.h: Ditto.
        * bindings/scripts/test/ObjC/DOMTestInterface.mm: Ditto.
        (-[DOMTestInterface str1]):
        (-[DOMTestInterface str2]):
        (-[DOMTestInterface setStr2:]):
        (-[DOMTestInterface str3]):
        (-[DOMTestInterface setStr3:]):
        * bindings/scripts/test/V8/V8TestInterface.cpp: Ditto.
        (WebCore::TestInterfaceInternal::str1AttrGetter):
        (WebCore::TestInterfaceInternal::str2AttrGetter):
        (WebCore::TestInterfaceInternal::str2AttrSetter):
        (WebCore::ConfigureV8TestInterfaceTemplate):

2011-11-29  Leo Yang  <leo.yang@torchmobile.com.cn>

        Upstream platform/network/blackberry/ProxyServerBlackBerry.cpp
        https://bugs.webkit.org/show_bug.cgi?id=73288

        Reviewed by Antonio Gomes.

        Initial upstream, can't be built yet, no new tests.

        * platform/network/blackberry/ProxyServerBlackBerry.cpp: Added.
        (WebCore::proxyServersForURL):

2011-11-29  Jessie Berlin  <jberlin@apple.com>

        WKKeyValueStorageManagerGetKeyValueStorageOrigins may not report the correct list of origins
        the first time it is called.
        https://bugs.webkit.org/show_bug.cgi?id=73374 (<rdar://problem/10196057>)

        Reviewed by Brady Eidson.

        Add a callback for when the Storage Tracker is done loading the list of origins with Local
        Storage.

        * storage/StorageTracker.cpp:
        (WebCore::StorageTracker::StorageTracker):
        Keep track of whether the import from disk has been completed.
        (WebCore::StorageTracker::notifyFinishedImportingOriginIdentifiersOnMainThread):
        (WebCore::StorageTracker::finishedImportingOriginIdentifiers):
        Set m_finishedImportingOriginIdentifiers to true and tell the client.
        (WebCore::StorageTracker::syncImportOriginIdentifiers):
        When finished, notify the shared StorageTracker on the main thread.
        * storage/StorageTracker.h:
        (WebCore::StorageTracker::originsLoaded):

        * storage/StorageTrackerClient.h:
        Add didFinishLoadingOrigins.

2011-11-18  Nat Duca  <nduca@chromium.org>

        [chromium] Enable threaded compositing via CCThreadProxy::hasThread only
        https://bugs.webkit.org/show_bug.cgi?id=70838

        Reviewed by James Robinson.

        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::initialize):
        * platform/graphics/chromium/WebGLLayerChromium.cpp:
        (WebCore::WebGLLayerChromium::layerRendererContext):
        * platform/graphics/chromium/cc/CCHeadsUpDisplay.cpp:
        (WebCore::CCHeadsUpDisplay::enabled):
        * platform/graphics/chromium/cc/CCLayerTreeHost.cpp:
        (WebCore::CCLayerTreeHost::initialize):
        (WebCore::CCLayerTreeHost::context):
        (WebCore::CCLayerTreeHost::setNeedsAnimate):
        (WebCore::CCLayerTreeHost::setNeedsCommit):
        (WebCore::CCLayerTreeHost::setNeedsRedraw):
        (WebCore::CCLayerTreeHost::composite):
        * platform/graphics/chromium/cc/CCLayerTreeHost.h:
        (WebCore::CCSettings::CCSettings):
        * platform/graphics/chromium/cc/CCProxy.cpp:
        (WebCore::CCProxy::isMainThread):
        (WebCore::CCProxy::isImplThread):
        (WebCore::CCProxy::setMainThreadIsImplThread):
        * platform/graphics/chromium/cc/CCProxy.h:
        * platform/graphics/chromium/cc/CCSingleThreadProxy.h:
        (WebCore::DebugScopedSetImplThread::DebugScopedSetImplThread):
        (WebCore::DebugScopedSetImplThread::~DebugScopedSetImplThread):

2011-11-29  Erik Arvidsson  <arv@chromium.org>

        WebIDL: Add support for static for JSC and V8
        https://bugs.webkit.org/show_bug.cgi?id=72998

        Reviewed by Adam Barth.

        WebIDL uses "static" for class methods. We used to use "[ClassMethod]". This change makes us use the WebIDL syntax instead.

        No new tests: Covered by existing tests.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GetFunctionName): Use isStatic instead.
        (GenerateOverloadedFunction): Ditto.
        (GenerateImplementation): Ditto.
        (GenerateParametersCheck): Ditto.
        (GenerateImplementationFunctionCall): Ditto.
        (GenerateConstructorDefinition): Ditto.
        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateFunctionCallback): Ditto.
        (GenerateImplementation): Ditto.
        (GenerateFunctionCallString): Ditto.
        * bindings/scripts/IDLParser.pm:
        (ParseInterface): Set isStatic as needed.
        * bindings/scripts/IDLStructure.pm: Update regular expression to parse "static".
        * bindings/scripts/test/TestObj.idl: Use static instead of [ClassMethod].
        * storage/IDBKeyRange.idl: Ditto.

2011-11-29  Kentaro Hara  <haraken@chromium.org>

        Unreviewed. Rebaselined a run-bindings-tests result.

        * bindings/scripts/test/JS/JSFloat64Array.h:

2011-11-10  Xiaomei Ji  <xji@chromium.org>

        --webkit-visual-word should be able to reach end of text, instead of end of line
        https://bugs.webkit.org/show_bug.cgi?id=72048

        Reviewed by Ryosuke Niwa.

        Revert r92223 -- webkit-visual-word should reach boundary of line.
        When there is no more left or right words in the same editing boundary and
        current position is an editable position, return start or end position in this
        editable content.

        Test: editing/selection/move-by-word-visually-textarea.html

        * editing/visible_units.cpp:
        (WebCore::collectWordBreaksInBoxInsideBlockWithSameDirectionality):
        (WebCore::collectWordBreaksInBoxInsideBlockWithDifferntDirectionality):
        (WebCore::leftWordPosition):
        (WebCore::rightWordPosition):

2011-11-29  Oliver Hunt  <oliver@apple.com>

        Allow WebCore to describe typed arrays to JSC
        https://bugs.webkit.org/show_bug.cgi?id=73355

        Reviewed by Gavin Barraclough.

        Update bindings codegen to report the data layout to JSC.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateHeader):
        (GenerateImplementation):
        * bindings/scripts/test/JS/JSFloat64Array.cpp:
        (WebCore::JSFloat64Array::finishCreation):
        * bindings/scripts/test/JS/JSFloat64Array.h:

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

        Rename some flexbox functions to be less confusing
        https://bugs.webkit.org/show_bug.cgi?id=73363

        Reviewed by Ojan Vafai.

        These methods no longer have anything to do with block/inline direction.

        No new tests, just renaming some functions.

        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::layoutBlock):
        (WebCore::RenderFlexibleBox::layoutFlexItems):
        (WebCore::RenderFlexibleBox::runFreeSpaceAllocationAlgorithm):
        (WebCore::RenderFlexibleBox::layoutAndPlaceChildren):
        (WebCore::RenderFlexibleBox::alignChildren):
        * rendering/RenderFlexibleBox.h:

2011-11-29  Erik Arvidsson  <arv@chromium.org>

        Add support for [ClassMethod] to CodeGeneratorJS.pm
        https://bugs.webkit.org/show_bug.cgi?id=73342

        Reviewed by Adam Barth.

        If a method is annotated with [ClassMethod] it will become a method on the JS constructor object and it will
        call a static function on the C++ class. 

        This was previously only implemented in CodeGeneratorV8.pm so this brings JSC up to par.

        No new tests: Covered by bindings/scripts/test/

        * bindings/scripts/CodeGeneratorJS.pm:
        (GetFunctionName): Refactor to reduce code duplication.
        (GenerateHeader): Ditto.
        (GenerateOverloadedFunction): This now handles both prototype functions and constructor functions.
        (GenerateImplementation): Define class methods too. 
        (GenerateParametersCheck): Generate the right function access string.
        (GenerateImplementationFunctionCall): SVG properties are not static methods.
        (GenerateConstructorDefinition): For classes that have static methods we may now return function properties.
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::JSTestObjConstructor::getOwnPropertySlot): Ditto.
        (WebCore::JSTestObjConstructor::getOwnPropertyDescriptor): Ditto.
        (WebCore::jsTestObjConstructorFunctionClassMethod): Now calls a static function.
        (WebCore::jsTestObjConstructorFunctionClassMethodWithOptional): Ditto.
        * bindings/scripts/test/JS/JSTestObj.h:

2011-11-29  Sam Weinig  <sam@webkit.org>

        Remove unused JSDOMWrapperOwner
        https://bugs.webkit.org/show_bug.cgi?id=73357

        Reviewed by Adam Barth.

        * bindings/js/DOMWrapperWorld.cpp:
        (WebCore::DOMWrapperWorld::DOMWrapperWorld):
        * bindings/js/DOMWrapperWorld.h:
        (WebCore::DOMWrapperWorld::globalData):
        Remove JSDOMWrapperOwner. It is unused.

2011-11-29  Anders Carlsson  <andersca@apple.com>

        Use contentsToRootView when converting the mouse coordinates for the context menu key event
        https://bugs.webkit.org/show_bug.cgi?id=73352

        Reviewed by Adam Roben.

        No new tests: Already covered by existing tests.

        This is another step towards fixing https://bugs.webkit.org/show_bug.cgi?id=71945, by getting
        rid of a call to ScrollView::contentsToWindow.

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

2011-11-15  Anders Carlsson  <andersca@apple.com>

        DragClient::dragSourceActionMaskForPoint should use root view coordinates
        https://bugs.webkit.org/show_bug.cgi?id=72409

        Reviewed by Sam Weinig.

        * page/DragClient.h:
        Rename parameter and remove obsolete comment.

        * page/DragController.cpp:
        (WebCore::DragController::delegateDragSourceAction):
        * page/DragController.h:
        Rename parameter.

        * page/EventHandler.cpp:
        (WebCore::EventHandler::updateDragSourceActionsAllowed):
        Use contentsToRootView instead of contentsToWindow.

2011-11-15  Anders Carlsson  <andersca@apple.com>

        EditorClient::showCorrectionPanel should pass the string bounding box in root view coordinates
        https://bugs.webkit.org/show_bug.cgi?id=72408

        Reviewed by Sam Weinig.

        Rename windowRectForRange to rootViewRectForRange and use contentsToRootView instead of contentsToWindow.

        * editing/SpellingCorrectionController.cpp:
        (WebCore::SpellingCorrectionController::show):
        (WebCore::SpellingCorrectionController::correctionPanelTimerFired):
        (WebCore::SpellingCorrectionController::rootViewRectForRange):
        * editing/SpellingCorrectionController.h:
        
2011-11-29  Ojan Vafai  <ojan@chromium.org>

        invalid cast in WebCore::toRenderBox / WebCore::RenderBox::firstChildBox
        https://bugs.webkit.org/show_bug.cgi?id=72668

        Reviewed by David Hyatt.

        For new flexible boxes, we were setting childrenInline to true when
        merging anonymous blocks, which we should never do. Do the same thing
        we do for the deprecated flexboxes.

        Test: css3/flexbox/anonymous-block-merge-crash.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::removeChild):
        * rendering/RenderObject.h:
        (WebCore::RenderObject::setChildrenInline):
        The default value of true was never used. Better to keep it explicit.

2011-11-28  Ryosuke Niwa  <rniwa@webkit.org>

        Crash in IsolateTracker::addFakeRunIfNecessary(), preceded by assertion failure (m_nestedIsolateCount >= 1)
        in IsolateTracker::exitIsolate()
        https://bugs.webkit.org/show_bug.cgi?id=69275

        Reviewed by Eric Seidel.

        The crash was caused by our false assumption that at most one isolated container exists between the start
        and the root when appending a new run. Fixed the crash by computing the actual number of isolated containers
        between the start and the root.

        Test: fast/text/nested-bidi-isolate-crash.html

        * rendering/InlineIterator.h:
        (WebCore::numberOfIsolateAncestors):
        (WebCore::IsolateTracker::IsolateTracker):
        (WebCore::InlineBidiResolver::appendRun):

2011-11-29  Oliver Hunt  <oliver@apple.com>

        Revert that last change, apparently it destroys everything in the world.

        * 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::setInlineCachedWrapper):
        (WebCore::clearInlineCachedWrapper):
        (WebCore::getCachedWrapper):
        (WebCore::cacheWrapper):
        (WebCore::wrap):
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::history):
        (WebCore::JSDOMWindow::location):
        * 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/JSTrackCustom.cpp:
        (WebCore::toJS):

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

        flex-align:stretch + max-height needs to clamp to max-height and position appropriately
        https://bugs.webkit.org/show_bug.cgi?id=70780

        Reviewed by David Hyatt.

        Test: css3/flexbox/flex-align-max.html

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::sizesToIntrinsicLogicalWidth): When laying out columns, if the flex item is stretching,
        we don't need to shrink wrap.
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::isColumnFlow): Switch to RenderStyle helper method.
        (WebCore::RenderFlexibleBox::alignChildrenBlockDirection): For columns, we don't need to do anything.
        For rows, handle max logical height by setting the height and recomputing (which will take max-height
        into consideration).
        * rendering/style/RenderStyle.h:
        (WebCore::InheritedFlags::isColumnFlexFlow): Helper method.

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

        [chromium] Remove unused variable (gcc 4.6 complains about this)
        https://bugs.webkit.org/show_bug.cgi?id=73335

        ../../third_party/WebKit/Source/WebCore/platform/graphics/chromium/cc/CCDamageTracker.cpp:296:19:
        error: variable 'oldReplicaMaskRect' set but not used [-Werror=unused-but-set-variable]

        * platform/graphics/chromium/cc/CCDamageTracker.cpp:
        (WebCore::CCDamageTracker::extendDamageForRenderSurface):

2011-11-29  Oliver Hunt  <oliver@apple.com>

        DOM wrapper cache doesn't need to use JSDOMWrapper
        https://bugs.webkit.org/show_bug.cgi?id=73333

        Reviewed by Sam Weinig.

        Make JSDOMWrapperCache use JSObject rather than JSDOMWrapper
        and propagate the type change out. 

        * 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::setInlineCachedWrapper):
        (WebCore::clearInlineCachedWrapper):
        (WebCore::getCachedWrapper):
        (WebCore::cacheWrapper):
        (WebCore::wrap):
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::history):
        (WebCore::JSDOMWindow::location):
        * 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/JSTrackCustom.cpp:
        (WebCore::toJS):

2011-11-29  Philippe Normand  <pnormand@igalia.com>

        Unreviewed, GTK build fix after r101392.

        * GNUmakefile.am: USE_WEBAUDIO_FFTW was removed, don't use it anymore.

2011-11-28  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: TextPrompt should show suggest above or under so that it has maximal height.
        https://bugs.webkit.org/show_bug.cgi?id=73239

        Reviewed by Pavel Feldman.

        Fixed suggest box vertical position / height calculation.
        Added round corners when suggest box is positioned under text prompt.

        * inspector/front-end/TextPrompt.js:
        (WebInspector.TextPrompt.SuggestBox.prototype._updateBoxPosition):
        * inspector/front-end/inspector.css:
        (.suggest-box.generic-suggest.under-anchor):

2011-11-29  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix the GTK+ port build after r101307.

        * GNUmakefile.list.am: Add missing files to compilation.

2011-11-29  Pavel Feldman  <pfeldman@google.com>

        Web Inspector: split Preferences into Preferences and Capabilities.
        https://bugs.webkit.org/show_bug.cgi?id=73321

        Part of the Preferences defined in Settings.js are in fact backend capabilities.
        Split them into two separate objects for further capabilities refactoring.

        Reviewed by Yury Semikhatsky.

        * inspector/front-end/DebuggerModel.js:
        * inspector/front-end/ElementsPanel.js:
        (WebInspector.ElementsPanel):
        (WebInspector.ElementsPanel.prototype.wasShown):
        (WebInspector.ElementsPanel.prototype._populateContextMenu):
        * inspector/front-end/NetworkItemView.js:
        (WebInspector.NetworkItemView):
        * inspector/front-end/NetworkPanel.js:
        (WebInspector.NetworkLogView.prototype._createTable):
        (WebInspector.NetworkLogView.prototype.switchToDetailedView):
        (WebInspector.NetworkLogView.prototype.switchToBriefView):
        (WebInspector.NetworkLogView.prototype._contextMenu):
        (WebInspector.NetworkDataGridNode.prototype.createCells):
        (WebInspector.NetworkDataGridNode.prototype.refreshResource):
        * inspector/front-end/ProfileDataGridTree.js:
        (WebInspector.ProfileDataGridNode.prototype.get data.formatMilliseconds):
        * inspector/front-end/ProfileView.js:
        * inspector/front-end/ProfilesPanel.js:
        (WebInspector.ProfilesPanel.prototype._enableDetailedHeapProfiles):
        * inspector/front-end/Resource.js:
        (WebInspector.Resource.prototype.populateImageSource):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype.wasShown):
        (WebInspector.ScriptsPanel.prototype._clearInterface):
        * inspector/front-end/Settings.js:
        * inspector/front-end/SettingsScreen.js:
        (WebInspector.SettingsScreen):
        * inspector/front-end/StylesSidebarPane.js:
        * inspector/front-end/inspector.js:

2011-11-29  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] Make WebCore compile with Qt 5 and V8
        https://bugs.webkit.org/show_bug.cgi?id=73313

        Reviewed by Tor Arne Vestbø.

        * DerivedSources.pri: Add missing V8 specific IDL files to the build.
        * Target.pri: Ditto.
        * bindings/v8/ScriptController.h: V8 NPAPI bindings don't really support
        building with ENABLE_NETSCAPE_PLUGIN_API=0. These functions are always
        defined, so they also need to be declared.
        * platform/qt/PlatformSupportQt.cpp: 
        (WebCore::PlatformSupport::pluginScriptableObject): Don't return a
        scriptable object when compiling without npapi.
        * storage/StorageAreaImpl.cpp: Add missing Document.h include that is
        included implicitly with the Chromium build but not with Qt.
        * xml/XSLTProcessorQt.cpp: Ditto.

2011-11-29  Pavel Feldman  <pfeldman@google.com>

        Not reviewed: fixing clang build.

        * inspector/InspectorBaseAgent.h:
        (WebCore::InspectorBaseAgentInterface::getAgentCapabilities):
        * inspector/InspectorDebuggerAgent.cpp:
        (WebCore::InspectorDebuggerAgent::getAgentCapabilities):
        * inspector/InspectorDebuggerAgent.h:

2011-11-29  Pavel Feldman  <pfeldman@google.com>

        Web Inspector: introduce generic capabilities concept, migrate debugger domain to generic capabilities.
        https://bugs.webkit.org/show_bug.cgi?id=73311

        This step is necessary for getting rid of the 'capability' aspect in the Preferences. As a result,
        single front-end will be applicable to multiple backend configurations.

        Reviewed by Yury Semikhatsky.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * inspector/Inspector.json:
        * inspector/InspectorAgent.cpp:
        (WebCore::InspectorAgent::InspectorAgent):
        * inspector/InspectorApplicationCacheAgent.cpp:
        (WebCore::InspectorApplicationCacheAgent::InspectorApplicationCacheAgent):
        * inspector/InspectorBaseAgent.cpp:
        (WebCore::InspectorBaseAgentInterface::InspectorBaseAgentInterface):
        (WebCore::InspectorBaseAgentInterface::~InspectorBaseAgentInterface):
        * inspector/InspectorBaseAgent.h:
        (WebCore::InspectorBaseAgentInterface::getCapabilities):
        (WebCore::InspectorBaseAgentInterface::name):
        (WebCore::InspectorBaseAgent::InspectorBaseAgent):
        * inspector/InspectorCSSAgent.cpp:
        (WebCore::InspectorCSSAgent::InspectorCSSAgent):
        * inspector/InspectorConsoleAgent.cpp:
        (WebCore::InspectorConsoleAgent::InspectorConsoleAgent):
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        * inspector/InspectorController.h:
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::InspectorDOMAgent):
        * inspector/InspectorDOMDebuggerAgent.cpp:
        (WebCore::InspectorDOMDebuggerAgent::InspectorDOMDebuggerAgent):
        * inspector/InspectorDOMStorageAgent.cpp:
        (WebCore::InspectorDOMStorageAgent::InspectorDOMStorageAgent):
        * inspector/InspectorDatabaseAgent.cpp:
        (WebCore::InspectorDatabaseAgent::InspectorDatabaseAgent):
        * inspector/InspectorDebuggerAgent.cpp:
        (WebCore::InspectorDebuggerAgent::InspectorDebuggerAgent):
        (WebCore::InspectorDebuggerAgent::getCapabilities):
        * inspector/InspectorDebuggerAgent.h:
        * inspector/InspectorFileSystemAgent.cpp:
        (WebCore::InspectorFileSystemAgent::InspectorFileSystemAgent):
        * inspector/InspectorMetaAgent.cpp: Added.
        (WebCore::InspectorMetaAgent::~InspectorMetaAgent):
        (WebCore::InspectorMetaAgent::getCapabilities):
        (WebCore::InspectorMetaAgent::InspectorMetaAgent):
        * inspector/InspectorMetaAgent.h: Added.
        (WebCore::InspectorMetaAgent::create):
        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::InspectorPageAgent):
        * inspector/InspectorProfilerAgent.cpp:
        (WebCore::InspectorProfilerAgent::InspectorProfilerAgent):
        * inspector/InspectorResourceAgent.cpp:
        (WebCore::InspectorResourceAgent::InspectorResourceAgent):
        * inspector/InspectorRuntimeAgent.cpp:
        (WebCore::InspectorRuntimeAgent::InspectorRuntimeAgent):
        * inspector/InspectorTimelineAgent.cpp:
        (WebCore::InspectorTimelineAgent::InspectorTimelineAgent):
        * inspector/InspectorValues.h:
        (WebCore::InspectorArray::begin):
        (WebCore::InspectorArray::end):
        * inspector/InspectorWorkerAgent.cpp:
        (WebCore::InspectorWorkerAgent::InspectorWorkerAgent):
        * inspector/front-end/DebuggerModel.js:
        (WebInspector.DebuggerModel.prototype.enableDebugger):

2011-11-29  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] Make WebKit/qt build with V8 and Qt 5
        https://bugs.webkit.org/show_bug.cgi?id=73315

        Reviewed by Kenneth Rohde Christiansen.

        For the Qt 5 / V8 build we use QJSEngine/QJSValue instead of
        QScriptEngine/QScriptValue.

        * bindings/v8/ScriptController.cpp:
        * bindings/v8/ScriptController.h:
        * bindings/v8/ScriptControllerQt.cpp:
        (WebCore::ScriptController::qtScriptEngine):

2011-11-29  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt][V8] Add missing ExceptionCode.h include for SVG bindings
        https://bugs.webkit.org/show_bug.cgi?id=73314

        Reviewed by Kenneth Rohde Christiansen.

        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateNormalAttrSetter): Similarly to other places where we use DOM
        exceptions, make sure we include ExceptionCode.h here. It appears to be
        an implicit inclusion in the Chromium build, but it should be explicit
        like in the rest of the bindings.
        (GenerateFunctionCallback): Ditto.

2011-11-29  Andrey Kosyakov  <caseq@chromium.org>

        Web Inspector: remove usage of innerHTML from inspector front-end
        https://bugs.webkit.org/show_bug.cgi?id=73305

        Reviewed by Yury Semikhatsky.

        * inspector/front-end/FontView.js:
        (WebInspector.FontView.prototype._createContentIfNeeded):
        * inspector/front-end/ShortcutsScreen.js:
        (WebInspector.ShortcutsSection.prototype.addKey):
        (WebInspector.ShortcutsSection.prototype.addRelatedKeys):
        (WebInspector.ShortcutsSection.prototype.addAlternateKeys):
        (WebInspector.ShortcutsSection.prototype._addLine):
        (WebInspector.ShortcutsSection.prototype.renderSection):
        (WebInspector.ShortcutsSection.prototype._renderSequence):
        (WebInspector.ShortcutsSection.prototype._renderKey):
        (WebInspector.ShortcutsSection.prototype.get _height):
        (WebInspector.ShortcutsSection.prototype._createSpan):
        (WebInspector.ShortcutsSection.prototype._joinNodes):
        * inspector/front-end/WelcomeView.js:
        (WebInspector.WelcomeView.prototype.addMessage):

2011-11-29  Zoltan Herczeg  <zherczeg@webkit.org>

        [Qt] Couple of tests have different results on 64 bit and/or in debug mode compared to 32 bit and/or release mode
        https://bugs.webkit.org/show_bug.cgi?id=52810

        Reviewed by Nikolas Zimmermann.

        This avoids precision loss in getCTM, which is used whenever mapping repaint rects to a parent coordinate system
        - it affects several DRT results on Mac, all of them are progressions.

        * svg/SVGPreserveAspectRatio.cpp:
        (WebCore::SVGPreserveAspectRatio::getCTM): Use double-precision internally.

2011-11-25  Pavel Podivilov  <podivilov@chromium.org>

        Web Inspector: support concatenated source maps.
        https://bugs.webkit.org/show_bug.cgi?id=73138

        Reviewed by Yury Semikhatsky.

        * inspector/front-end/CompilerSourceMapping.js:
        (WebInspector.ClosureCompilerSourceMapping):
        (WebInspector.ClosureCompilerSourceMapping.prototype.loadSourceCode):
        (WebInspector.ClosureCompilerSourceMapping.prototype._parseMappingPayload):
        (WebInspector.ClosureCompilerSourceMapping.prototype._parseSections):
        (WebInspector.ClosureCompilerSourceMapping.prototype._parseMap):
        (WebInspector.ClosureCompilerSourceMapping.prototype._canonicalizeURL):
        * inspector/front-end/inspector.js:
        (WebInspector.installSourceMappingForTest):

2011-11-29  Mario Sanchez Prada  <msanchez@igalia.com>

        [Gtk] Regression: text-inserted events lack text inserted and current line
        https://bugs.webkit.org/show_bug.cgi?id=72830

        Reviewed by Chris Fleizach.

        Replace the emission of the old (and now deprecated) AtkObject's
        'text-changed:insert' and 'text-changed:remove' signals with the
        new 'text-insert' and 'text-remove' ones, which are better and
        less fragile since they emit the modified text too, along with the
        typical 'offset' and 'count' values associated to the change.

        Also, change the signature of the nodeTextChangeNotification() and
        nodeTextChangePlatformNotification() to allow specifying the text
        being modified from the place we better know about it, that is,
        the text editing commands.

        * accessibility/gtk/AXObjectCacheAtk.cpp:
        (WebCore::emitTextChanged): Emit 'text-insert' and 'text-remove',
        instead of the old and now deprecated 'text-changed' signal.
        (WebCore::AXObjectCache::nodeTextChangePlatformNotification):
        Update this function to receive a String with the text being
        modified, instead of just the number of characters.

        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::nodeTextChangeNotification): Update this
        function to receive a String with the text being modified.
        * accessibility/AXObjectCache.h:
        (WebCore::AXObjectCache::nodeTextChangeNotification): Ditto.
        (WebCore::AXObjectCache::nodeTextChangePlatformNotification): Ditto.

        Adapt the text editing commants to pass the whole text string
        being modified, instead of just its number of characters.

        * editing/AppendNodeCommand.cpp:
        (WebCore::sendAXTextChangedIgnoringLineBreaks): Adapt to the new
        signature of nodeTextChangeNotification(), so pass the whole text.
        * editing/DeleteFromTextNodeCommand.cpp:
        (WebCore::DeleteFromTextNodeCommand::doApply): Ditto.
        (WebCore::DeleteFromTextNodeCommand::doUnapply): Ditto.
        * editing/InsertIntoTextNodeCommand.cpp:
        (WebCore::InsertIntoTextNodeCommand::doApply): Ditto.
        (WebCore::InsertIntoTextNodeCommand::doUnapply): Ditto.
        * editing/InsertNodeBeforeCommand.cpp:
        (WebCore::InsertNodeBeforeCommand::doApply): Ditto.
        (WebCore::InsertNodeBeforeCommand::doUnapply): Ditto.

        Update mac, win and chromium's specific parts of AXObjectCache to
        match the new signature for nodeTextChangePlatformNotification(),
        which won't affect their behaviour as they were not implementing
        that method anyway.

        * accessibility/chromium/AXObjectCacheChromium.cpp:
        (WebCore::AXObjectCache::nodeTextChangePlatformNotification):
        * accessibility/mac/AXObjectCacheMac.mm:
        (WebCore::AXObjectCache::nodeTextChangePlatformNotification):
        * accessibility/win/AXObjectCacheWin.cpp:
        (WebCore::AXObjectCache::nodeTextChangePlatformNotification):

2011-11-29  Mario Sanchez Prada  <msanchez@igalia.com>

        [Gtk] Regression: Push buttons no longer expose their displayed text/name
        https://bugs.webkit.org/show_bug.cgi?id=72804

        Reviewed by Chris Fleizach.

        Use AccessibilityObject::title() as the last fallback in
        webkit_accessible_get_name() right before relying on the
        stringValue() method, if no better alternative was found.

        Test: platform/gtk/accessibility/button-accessible-name.html

        * accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:
        (webkit_accessible_get_name): Use title() as the last fallback
        method before using stringValue().

2011-11-29  Hyowon Kim  <hw1008.kim@samsung.com>

        [Texmap][EFL] Accelerated compositing support using TextureMapper on EFL port
        https://bugs.webkit.org/show_bug.cgi?id=73111

        This patch adds Texture Mapper related files to PlatformEfl.cmake
        and removes Qt-specific types in TextureMapperNode.cpp.

        Reviewed by Noam Rosenthal.

        * PlatformEfl.cmake:
        * platform/graphics/GraphicsLayer.cpp:
        * platform/graphics/GraphicsLayer.h:
        * platform/graphics/efl/GraphicsLayerEfl.cpp: Removed.
        * platform/graphics/efl/GraphicsLayerEfl.h: Removed.
        * platform/graphics/texmap/TextureMapperNode.cpp:
        (WebCore::solveCubicBezierFunction):
        (WebCore::solveStepsFunction):

2011-11-28  Pavel Feldman  <pfeldman@google.com>

        Web Inspector: put inspector agents into a vector in the InspectorController.
        https://bugs.webkit.org/show_bug.cgi?id=73225

        Inspector controller should maintain agents in the vector, while accessing
        them using the same base agent interface. We should not manually call
        base agent methods on their concrete instances.

        Reviewed by Yury Semikhatsky.

        * inspector/CodeGeneratorInspector.py:
        (DomainNameFixes.get_fixed_data.Res):
        (DomainNameFixes):
        (Generator.go):
        * inspector/InspectorAgent.cpp:
        (WebCore::InspectorAgent::InspectorAgent):
        (WebCore::PostWorkerNotificationToFrontendTask::performTask):
        * inspector/InspectorAgent.h:
        (WebCore::InspectorAgent::create):
        * inspector/InspectorApplicationCacheAgent.cpp:
        (WebCore::InspectorApplicationCacheAgent::InspectorApplicationCacheAgent):
        * inspector/InspectorApplicationCacheAgent.h:
        (WebCore::InspectorApplicationCacheAgent::create):
        * inspector/InspectorBaseAgent.cpp:
        * inspector/InspectorBaseAgent.h:
        (WebCore::InspectorBaseAgentInterface::InspectorBaseAgentInterface):
        (WebCore::InspectorBaseAgentInterface::~InspectorBaseAgentInterface):
        (WebCore::InspectorBaseAgentInterface::setFrontend):
        (WebCore::InspectorBaseAgentInterface::clearFrontend):
        (WebCore::InspectorBaseAgentInterface::restore):
        (WebCore::InspectorBaseAgentInterface::inspectedPageDestroyed):
        (WebCore::InspectorBaseAgent::~InspectorBaseAgent):
        (WebCore::InspectorBaseAgent::registerDispatcher):
        (WebCore::InspectorBaseAgent::InspectorBaseAgent):
        * inspector/InspectorCSSAgent.cpp:
        (WebCore::InspectorCSSAgent::InspectorCSSAgent):
        * inspector/InspectorCSSAgent.h:
        (WebCore::InspectorCSSAgent::create):
        * inspector/InspectorConsoleAgent.cpp:
        (WebCore::InspectorConsoleAgent::InspectorConsoleAgent):
        * inspector/InspectorConsoleAgent.h:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        (WebCore::InspectorController::inspectedPageDestroyed):
        (WebCore::InspectorController::connectFrontend):
        (WebCore::InspectorController::disconnectFrontend):
        (WebCore::InspectorController::restoreInspectorStateFromCookie):
        * inspector/InspectorController.h:
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::InspectorDOMAgent):
        * inspector/InspectorDOMAgent.h:
        * inspector/InspectorDOMDebuggerAgent.cpp:
        (WebCore::InspectorDOMDebuggerAgent::InspectorDOMDebuggerAgent):
        * inspector/InspectorDOMDebuggerAgent.h:
        (WebCore::InspectorDOMDebuggerAgent::inspectedPageDestroyed):
        * inspector/InspectorDOMStorageAgent.cpp:
        (WebCore::InspectorDOMStorageAgent::InspectorDOMStorageAgent):
        * inspector/InspectorDOMStorageAgent.h:
        * inspector/InspectorDatabaseAgent.cpp:
        (WebCore::InspectorDatabaseAgent::InspectorDatabaseAgent):
        * inspector/InspectorDatabaseAgent.h:
        * inspector/InspectorDebuggerAgent.cpp:
        (WebCore::InspectorDebuggerAgent::InspectorDebuggerAgent):
        * inspector/InspectorDebuggerAgent.h:
        (WebCore::InspectorDebuggerAgent::inspectedPageDestroyed):
        * inspector/InspectorFileSystemAgent.cpp:
        (WebCore::InspectorFileSystemAgent::InspectorFileSystemAgent):
        * inspector/InspectorFileSystemAgent.h:
        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::InspectorPageAgent):
        * inspector/InspectorPageAgent.h:
        * inspector/InspectorProfilerAgent.cpp:
        (WebCore::InspectorProfilerAgent::InspectorProfilerAgent):
        * inspector/InspectorProfilerAgent.h:
        * inspector/InspectorResourceAgent.cpp:
        (WebCore::InspectorResourceAgent::InspectorResourceAgent):
        * inspector/InspectorResourceAgent.h:
        (WebCore::InspectorResourceAgent::create):
        * inspector/InspectorRuntimeAgent.cpp:
        (WebCore::InspectorRuntimeAgent::InspectorRuntimeAgent):
        * inspector/InspectorRuntimeAgent.h:
        * inspector/InspectorTimelineAgent.cpp:
        (WebCore::InspectorTimelineAgent::InspectorTimelineAgent):
        * inspector/InspectorTimelineAgent.h:
        * inspector/InspectorWorkerAgent.cpp:
        (WebCore::InspectorWorkerAgent::InspectorWorkerAgent):
        * inspector/InspectorWorkerAgent.h:
        * inspector/PageConsoleAgent.h:
        (WebCore::PageConsoleAgent::create):
        * inspector/PageRuntimeAgent.h:
        (WebCore::PageRuntimeAgent::create):
        * inspector/WorkerConsoleAgent.h:
        (WebCore::WorkerConsoleAgent::create):
        * inspector/WorkerInspectorController.cpp:
        (WebCore::WorkerInspectorController::WorkerInspectorController):
        (WebCore::WorkerInspectorController::connectFrontend):
        * inspector/WorkerRuntimeAgent.h:
        (WebCore::WorkerRuntimeAgent::create):

2011-11-25  Philippe Normand  <pnormand@igalia.com>

        [GTK] Improve FontMetrics accuracy
        https://bugs.webkit.org/show_bug.cgi?id=72614

        Reviewed by Martin Robinson.
        Patch by Nikolas Zimmermann.

        * platform/graphics/freetype/FontPlatformDataFreeType.cpp:
        (WebCore::setCairoFontOptionsFromFontConfigPattern):
        * platform/graphics/freetype/SimpleFontDataFreeType.cpp:
        (WebCore::SimpleFontData::platformInit):

2011-11-29  Nikolas Zimmermann  <nzimmermann@rim.com>

        SVG <path> DRT dumps have rounding problems across platforms
        https://bugs.webkit.org/show_bug.cgi?id=47467

        Reviewed by Zoltan Herczeg.

        Next step towards fixing rounding differences across 32/64, release/debug builds and various platforms.
        Switch TextStream::operator<<(double) and SVGPathStringBuilder to use the newly introduced String::number(double, ConversionMode, precision)
        instead of using snprintf/String::format() directly. This uses wtf/dtoas rounding facilities and has proven to be faster & more precise!

        In order to make use of these new floating-point dumping facilities following work was done:
        - The InlineBox logicalHeight is still integer based, while logicalWidth switched to float recently, continue that work and switch logicalTop/Bottom
          to floats as well. This allows us to avoid calling enclosingIntRect() when figuring out the bounds of a RenderSVGText.
          Instead DRT can ask for the floating point metrics and round on its own to the desired precision. It's not obviously clear why this makes a difference.
          Consider a rect with width 9.99999999, enclosingIntRect() would yield 10 as width, on this machine, but another may store 10.000000003, yielding 11.
          That's part of the reason why this is more safe and ultimately should eliminate the rounding error induced by this in the DRT results.

        - absoluteClippedOverflowRectForRepaint(): when figuring out the repaint rect we'd retrieve the repaintRectInLocalCoordinates(), and call
          enclosingIntRect on it. Instead of doing that, to avoid the error described above, add a computeFloatRectForRepaint() call to RenderObject that's
          only used in a SVG subtree, just like its done for nodeAtFloatPoint. Do a single final enclosingIntRect() step when crossing the boundary from
          the SVG subtree in RenderSVGRoot to its parent, thus reducing the rounding instabilities.

        - The new String::number() implementation enforces a unique zero eliminating the 0.0 vs -0.0 issue for free.

        This has been tested on Gtk&Mac - and requires lots of new baseline. The hope is to be able to share a lot more with Mac now, except for obvious
        font family differences, that influence RenderSVGInlineText/Text results, and thus all containers that contains such objects.

        * platform/text/TextStream.cpp:
        (WebCore::TextStream::operator<<):
        * rendering/InlineBox.cpp:
        (WebCore::InlineBox::logicalHeight):
        * rendering/InlineBox.h:
        (WebCore::InlineBox::virtualLogicalHeight):
        (WebCore::InlineBox::calculateBoundaries):
        (WebCore::InlineBox::pixelSnappedLogicalTop):
        (WebCore::InlineBox::pixelSnappedLogicalBottom):
        (WebCore::InlineBox::logicalTop):
        (WebCore::InlineBox::logicalBottom):
        (WebCore::InlineBox::setLogicalTop):
        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::placeBoxesInBlockDirection):
        (WebCore::InlineFlowBox::addBoxShadowVisualOverflow):
        (WebCore::InlineFlowBox::addBorderOutsetVisualOverflow):
        (WebCore::InlineFlowBox::addTextBoxVisualOverflow):
        * rendering/InlineTextBox.h:
        (WebCore::InlineTextBox::calculateBoundaries):
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::paintOutline):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::computeFloatRectForRepaint):
        * rendering/RenderObject.h:
        * rendering/RenderText.cpp:
        (WebCore::RenderText::absoluteRectsForRange):
        (WebCore::RenderText::absoluteQuads):
        (WebCore::RenderText::absoluteQuadsForRange):
        * rendering/RenderTreeAsText.cpp:
        (WebCore::hasFractions):
        (WebCore::formatNumberRespectingIntegers):
        (WebCore::operator<<):
        (WebCore::write):
        * rendering/RenderTreeAsText.h:
        * rendering/TrailingFloatsRootInlineBox.h:
        (WebCore::TrailingFloatsRootInlineBox::virtualLogicalHeight):
        * rendering/svg/RenderSVGForeignObject.cpp:
        (WebCore::RenderSVGForeignObject::computeFloatRectForRepaint):
        * rendering/svg/RenderSVGForeignObject.h:
        * rendering/svg/RenderSVGInline.cpp:
        (WebCore::RenderSVGInline::computeFloatRectForRepaint):
        * rendering/svg/RenderSVGInline.h:
        * rendering/svg/RenderSVGInlineText.cpp:
        (WebCore::RenderSVGInlineText::floatLinesBoundingBox):
        (WebCore::RenderSVGInlineText::linesBoundingBox):
        (WebCore::RenderSVGInlineText::computeNewScaledFontForStyle):
        * rendering/svg/RenderSVGInlineText.h:
        (WebCore::RenderSVGInlineText::objectBoundingBox):
        * rendering/svg/RenderSVGModelObject.cpp:
        (WebCore::RenderSVGModelObject::computeFloatRectForRepaint):
        * rendering/svg/RenderSVGModelObject.h:
        * rendering/svg/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::computeFloatRectForRepaint):
        * rendering/svg/RenderSVGRoot.h:
        * rendering/svg/RenderSVGText.cpp:
        (WebCore::RenderSVGText::computeRectForRepaint):
        (WebCore::RenderSVGText::computeFloatRectForRepaint):
        * rendering/svg/RenderSVGText.h:
        * rendering/svg/SVGInlineFlowBox.cpp:
        (WebCore::SVGInlineFlowBox::calculateBoundaries):
        * rendering/svg/SVGInlineFlowBox.h:
        (WebCore::SVGInlineFlowBox::virtualLogicalHeight):
        (WebCore::SVGInlineFlowBox::setLogicalHeight):
        * rendering/svg/SVGInlineTextBox.cpp:
        (WebCore::SVGInlineTextBox::calculateBoundaries):
        * rendering/svg/SVGInlineTextBox.h:
        (WebCore::SVGInlineTextBox::virtualLogicalHeight):
        (WebCore::SVGInlineTextBox::setLogicalHeight):
        (WebCore::SVGInlineTextBox::selectionHeight):
        * rendering/svg/SVGRenderSupport.cpp:
        (WebCore::SVGRenderSupport::clippedOverflowRectForRepaint):
        (WebCore::SVGRenderSupport::computeFloatRectForRepaint):
        * rendering/svg/SVGRenderSupport.h:
        * rendering/svg/SVGRenderTreeAsText.cpp:
        (WebCore::operator<<):
        (WebCore::roundedFloatRect):
        (WebCore::writeRenderSVGTextBox):
        (WebCore::writeSVGText):
        (WebCore::writeSVGInlineText):
        * rendering/svg/SVGRenderTreeAsText.h:
        * rendering/svg/SVGRootInlineBox.cpp:
        (WebCore::SVGRootInlineBox::computePerCharacterLayoutInformation):
        (WebCore::SVGRootInlineBox::layoutChildBoxes):
        (WebCore::SVGRootInlineBox::layoutRootBox):
        * rendering/svg/SVGRootInlineBox.h:
        (WebCore::SVGRootInlineBox::virtualLogicalHeight):
        (WebCore::SVGRootInlineBox::setLogicalHeight):
        * svg/SVGPathStringBuilder.cpp:
        (WebCore::SVGPathStringBuilder::moveTo):
        (WebCore::SVGPathStringBuilder::lineTo):
        (WebCore::SVGPathStringBuilder::lineToHorizontal):
        (WebCore::SVGPathStringBuilder::lineToVertical):
        (WebCore::SVGPathStringBuilder::curveToCubic):
        (WebCore::SVGPathStringBuilder::curveToCubicSmooth):
        (WebCore::SVGPathStringBuilder::curveToQuadratic):
        (WebCore::SVGPathStringBuilder::curveToQuadraticSmooth):
        (WebCore::SVGPathStringBuilder::arcTo):

2011-11-28  Andrey Kosyakov  <caseq@chromium.org>

        Web Inspector: remove WebInspector.linkifyURL and TreeElement.titleHTML
        https://bugs.webkit.org/show_bug.cgi?id=73217

        Reviewed by Pavel Feldman.

        * inspector/front-end/AuditFormatters.js:
        (WebInspector.applyFormatters):
        * inspector/front-end/AuditResultView.js:
        (WebInspector.AuditCategoryResultPane.prototype._appendResult):
        * inspector/front-end/AuditRules.js:
        (WebInspector.AuditRules.GzipRule.prototype.doRun):
        (WebInspector.AuditRules.UnusedCssRule.prototype.doRun.evalCallback.selectorsCallback):
        (WebInspector.AuditRules.ImageDimensionsRule.prototype.doRun):
        (WebInspector.AuditRules.CssInHeadRule.prototype.doRun):
        * inspector/front-end/AuditsPanel.js:
        (WebInspector.AuditRuleResult):
        (WebInspector.AuditRuleResult.linkifyDisplayName):
        (WebInspector.AuditRuleResult.prototype.addSnippet):
        (WebInspector.AuditRuleResult.prototype.addFormatted):
        (WebInspector.AuditRuleResult.prototype._append):
        * inspector/front-end/ElementsTreeOutline.js:
        (WebInspector.ElementsTreeElement.prototype.adjustCollapsedRange):
        * inspector/front-end/ObjectPropertiesSection.js:
        (WebInspector.ObjectPropertiesSection.prototype.updateProperties):
        * inspector/front-end/ResourceHeadersView.js:
        (WebInspector.ResourceHeadersView.prototype._formatHeader):
        (WebInspector.ResourceHeadersView.prototype._formatParameter):
        (WebInspector.ResourceHeadersView.prototype._refreshURL):
        (WebInspector.ResourceHeadersView.prototype._refreshUrlFragment):
        (WebInspector.ResourceHeadersView.prototype._refreshRequestPayload):
        (WebInspector.ResourceHeadersView.prototype._refreshParms):
        (WebInspector.ResourceHeadersView.prototype._refreshHTTPInformation):
        (WebInspector.ResourceHeadersView.prototype._refreshHeaders):
        * inspector/front-end/ResourceUtils.js:
        * inspector/front-end/StylesSidebarPane.js:
        (WebInspector.ComputedStylePropertiesSection.prototype.rebuildComputedTrace):
        * inspector/front-end/WorkersSidebarPane.js:
        (WebInspector.WorkersSidebarPane.prototype.addWorker):
        * inspector/front-end/treeoutline.js:
        (TreeElement.prototype._setListItemNodeContent):

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

        Unreviewed, rolling out r101302.
        http://trac.webkit.org/changeset/101302
        https://bugs.webkit.org/show_bug.cgi?id=73293

        massive crashes on gtk/win bots - m_bytes assertion fires
        (Requested by WildFox on #webkit).

        * platform/image-decoders/ImageDecoder.cpp:
        (WebCore::ImageFrame::setSize):

2011-11-29  Sean Wang  <Xuewen.Wang@torchmobile.com.cn>

        Upstream BlackBerry porting of platform/image-decoders
        https://bugs.webkit.org/show_bug.cgi?id=73118

        Reviewed by Daniel Bates.

        Initial upstream, can't be built yet, no test cases.

        The initial author is David Tapuska <dtapuska@rim.com>.

        * platform/image-decoders/blackberry/JPEGImageDecoder.cpp: Added.
        (WebCore::libInit):
        (WebCore::ImageReader::ImageReader):
        (WebCore::imgDecodeSetup):
        (WebCore::ImageReader::updateData):
        (WebCore::ImageReader::setSize):
        (WebCore::ImageReader::sizeExtract):
        (WebCore::ImageReader::decode):
        (WebCore::JPEGImageDecoder::JPEGImageDecoder):
        (WebCore::JPEGImageDecoder::setData):
        (WebCore::JPEGImageDecoder::isSizeAvailable):
        (WebCore::JPEGImageDecoder::frameBufferAtIndex):
        * platform/image-decoders/blackberry/JPEGImageDecoder.h: Added.
        (WebCore::JPEGImageDecoder::filenameExtension):
        (WebCore::JPEGImageDecoder::supportsAlpha):

2011-11-28  David Grogan  <dgrogan@chromium.org>

        WebWorkerRunLoop wrapper around WorkerRunLoop
        https://bugs.webkit.org/show_bug.cgi?id=71757

        Reviewed by Darin Fisher.

        No new tests - IndexedDB tests forthcoming.

        * platform/chromium/PlatformSupport.h: Add two methods that allow
        WebCore to notify chromium when workers start and stop.
        * workers/WorkerThread.cpp:
        (WebCore::WorkerThread::workerThread): Call into PlatformSupport when
        the worker's runloop is started and stopped.

2011-11-29  Alexandru Chiculita  <achicu@adobe.com>

        [CSS Filters] Filters do not render correctly when the layer has a transform
        https://bugs.webkit.org/show_bug.cgi?id=73077

        Reviewed by Dean Jackson.

        Corrected the root layer that was used when no transform was applied.
        Using PaintLayerAppliedTransform when calling paintLayer again, to avoid
        applying the transform inside the filter's graphics context. Now we apply that
        on the result image.

        Tests: css3/filters/filter-with-transform.html
               css3/filters/nested-filter.html

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::paintLayer):

2011-11-28  Wei Charles  <charles.wei@torchmobile.com.cn>

        [blackberry] Upstream BlackBerry porting of plugin framework
        https://bugs.webkit.org/show_bug.cgi?id=73185

        Reviewed by Daniel Bates.

        No new tests for now.

        * plugins/blackberry: Added.
        * plugins/blackberry/PluginDataBlackBerry.cpp: Added.
        * plugins/blackberry/PluginPackageBlackBerry.cpp: Added.

2011-11-28  Noel Gordon  <noel.gordon@gmail.com>

        [chromium] Remove V8MessagePortCustom.h from the gyp projects
        https://bugs.webkit.org/show_bug.cgi?id=73281

        Reviewed by David Levin.

        V8MessagePortCustom.h was removed in r101118

        * WebCore.gypi: remove bindings\v8\custom\V8MessagePortCustom.h

2011-11-28  Leo Yang  <leo.yang@torchmobile.com.cn>

        Upstream the BlackBerry porting of SocketStream
        https://bugs.webkit.org/show_bug.cgi?id=73283

        Reviewed by Daniel Bates.

        Other main contributors:
        Joe Mason <jmason@rim.com>
        Lyon Chen <liachen@rim.com>

        Initial upstream, can't be built yet, no new tests.

        * platform/network/blackberry/SocketStreamError.h: Added.
        (WebCore::SocketStreamError::SocketStreamError):
        * platform/network/blackberry/SocketStreamHandle.h: Added.
        (WebCore::SocketStreamHandle::create):
        * platform/network/blackberry/SocketStreamHandleBlackBerry.cpp: Added.
        (WebCore::SocketStreamHandle::SocketStreamHandle):
        (WebCore::SocketStreamHandle::~SocketStreamHandle):
        (WebCore::SocketStreamHandle::platformSend):
        (WebCore::SocketStreamHandle::platformClose):
        (WebCore::SocketStreamHandle::didReceiveAuthenticationChallenge):
        (WebCore::SocketStreamHandle::receivedCredential):
        (WebCore::SocketStreamHandle::receivedRequestToContinueWithoutCredential):
        (WebCore::SocketStreamHandle::receivedCancellation):
        (WebCore::SocketStreamHandle::notifyStatusReceived):
        (WebCore::SocketStreamHandle::notifyDataReceived):
        (WebCore::SocketStreamHandle::notifyReadyToSendData):
        (WebCore::SocketStreamHandle::notifyClose):

2011-11-28  Yongjun Zhang  <yongjun_zhang@apple.com>

        Size of ResourceRequestBase could be reduced by using bitfields.
        https://bugs.webkit.org/show_bug.cgi?id=73271

        Reviewed by Alexey Proskuryakov.

        Add bitfield for bool members in ResourceRequestBase to reduce its memory size.

        * platform/network/ResourceRequestBase.h:

2011-11-28  Yuta Kitamura  <yutak@chromium.org>

        WebSocket: Split Hixie76 length-prefixed frames aren't handled correctly
        https://bugs.webkit.org/show_bug.cgi?id=68522

        Reviewed by Kent Tamura.

        Test: http/tests/websocket/tests/hixie76/split-binary-frame-header.html

        * websockets/WebSocketChannel.cpp:
        (WebCore::WebSocketChannel::processFrameHixie76):
        Do not consume the data if the length field is not finished.

2011-11-28  Stephen White  <senorblanco@chromium.org>

        [chromium] Fix SVG filters when running in accelerated drawing mode.
        https://bugs.webkit.org/show_bug.cgi?id=73249

        Reviewed by Kenneth Russell.

        Test: platform/chromium/compositing/accelerated-drawing/svg-filters.html

        * platform/graphics/chromium/LayerTextureUpdaterCanvas.cpp:
        (WebCore::LayerTextureUpdaterSkPicture::prepareToUpdate):
        When doing accelerated drawing, mark the PlatformContextSkia as
        deferred.
        * platform/graphics/skia/ImageBufferSkia.cpp:
        (WebCore::drawNeedsCopy):
        When doing a cross-context draw, if the destination context is 
        deferred, copy the image.  Also refactor conditions under which the
        image is copied into a new function.
        (WebCore::ImageBuffer::draw):
        (WebCore::ImageBuffer::drawPattern):
        Use the refactored function for conditional copies.
        * platform/graphics/skia/PlatformContextSkia.cpp:
        (WebCore::PlatformContextSkia::PlatformContextSkia):
        * platform/graphics/skia/PlatformContextSkia.h:
        (WebCore::PlatformContextSkia::isDeferred):
        (WebCore::PlatformContextSkia::setDeferred):
        Add m_isDeferred flag, initializer and accessors.

2011-11-29  Roland Steiner  <rolandsteiner@chromium.org>

        <style scoped>: add ENABLE(STYLE_SCOPED) flag to WebKit
        https://bugs.webkit.org/show_bug.cgi?id=72848

        Reviewed by Dimitri Glazkov.

        No new tests. (no code)

        * Configurations/FeatureDefines.xcconfig:
        * GNUmakefile.am:

2011-11-28  Vangelis Kokkevis  <vangelis@chromium.org>

        [chromium] Disable compositing for RTL pages even in forceCompositingMode
        https://bugs.webkit.org/show_bug.cgi?id=73195

        Reviewed by James Robinson.

        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::cacheAcceleratedCompositingFlags):

2011-11-29  Roland Steiner  <rolandsteiner@chromium.org>

        From @keyframes rules with the same name, the last rule should be used
        https://bugs.webkit.org/show_bug.cgi?id=73113

        Have later rules override previously stored rules.

        Reviewed by Simon Fraser.

        Test: animations/duplicated-keyframes-name.html

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

2011-11-28  Jacky Jiang  <zhajiang@rim.com>

        Upstream BlackBerry porting of page.
        https://bugs.webkit.org/show_bug.cgi?id=73143

        Reviewed by Daniel Bates.

        Upstream BlackBerry porting of WebCore/page.
        Define DragImageRef for BlackBerry platform.

        Initial upstream, can't be built yet, no test cases.

        * page/blackberry/DragControllerBlackBerry.cpp: Added.
        (WebCore::DragController::isCopyKeyDown):
        (WebCore::DragController::maxDragImageSize):
        (WebCore::DragController::cleanupAfterSystemDrag):
        (WebCore::DragController::dragOperation):
        * page/blackberry/EventHandlerBlackBerry.cpp: Added.
        (WebCore::EventHandler::eventActivatedView):
        (WebCore::EventHandler::passMouseMoveEventToSubframe):
        (WebCore::EventHandler::passMousePressEventToSubframe):
        (WebCore::EventHandler::passMouseReleaseEventToSubframe):
        (WebCore::EventHandler::passWheelEventToWidget):
        (WebCore::EventHandler::passWidgetMouseDownEventToWidget):
        (WebCore::EventHandler::tabsToAllFormControls):
        (WebCore::EventHandler::accessKeyModifiers):
        (WebCore::EventHandler::focusDocumentView):
        (WebCore::EventHandler::createDraggingClipboard):
        * page/blackberry/FrameBlackBerry.cpp: Added.
        (WebCore::Frame::dragImageForSelection):
        * platform/DragImage.h:

2011-11-28  Shawn Singh  <shawnsingh@chromium.org>

        [chromium] Create CCDamageTracker class to determine regions of change for a surface.
        https://bugs.webkit.org/show_bug.cgi?id=72520

        Reviewed by James Robinson.

        Added CCDamageTrackerTest and updated other tests.

        * WebCore.gypi:
        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::drawLayersOntoRenderSurfaces):
        (WebCore::LayerRendererChromium::drawLayer):
        * platform/graphics/chromium/cc/CCDamageTracker.cpp: Added.
        (WebCore::CCDamageTracker::create):
        (WebCore::CCDamageTracker::CCDamageTracker):
        (WebCore::CCDamageTracker::~CCDamageTracker):
        (WebCore::CCDamageTracker::updateDamageRectForNextFrame):
        (WebCore::CCDamageTracker::removeRectFromCurrentFrame):
        (WebCore::CCDamageTracker::saveRectForNextFrame):
        (WebCore::CCDamageTracker::computeDamageFromActiveLayers):
        (WebCore::CCDamageTracker::computeDamageFromSurfaceMask):
        (WebCore::CCDamageTracker::computeDamageFromLeftoverRects):
        (WebCore::CCDamageTracker::extendDamageForLayer):
        (WebCore::CCDamageTracker::extendDamageForRenderSurface):
        * platform/graphics/chromium/cc/CCDamageTracker.h: Added.
        (WebCore::CCDamageTracker::currentDamageRect):
        * platform/graphics/chromium/cc/CCLayerImpl.cpp:
        (WebCore::CCLayerImpl::resetAllChangeTrackingForSubtree):
        * platform/graphics/chromium/cc/CCLayerImpl.h:
        * platform/graphics/chromium/cc/CCLayerTreeHost.cpp:
        (WebCore::CCLayerTreeHost::paintLayerContents):
        (WebCore::CCLayerTreeHost::updateCompositorResources):
        * platform/graphics/chromium/cc/CCLayerTreeHost.h:
        (WebCore::CCSettings::CCSettings):
        * platform/graphics/chromium/cc/CCLayerTreeHostCommon.h:
        (WebCore::CCLayerTreeHostCommon::renderSurfaceContributesToTarget):
        * platform/graphics/chromium/cc/CCRenderSurface.cpp:
        (WebCore::CCRenderSurface::CCRenderSurface):
        (WebCore::CCRenderSurface::dumpSurface):
        (WebCore::CCRenderSurface::surfacePropertyChangedOnlyFromDescendant):
        * platform/graphics/chromium/cc/CCRenderSurface.h:
        (WebCore::CCRenderSurface::damageTracker):

2011-11-28  Luke Macpherson   <macpherson@chromium.org>

        Implement CSSPropertySize in CSSStyleApplyProperty.
        https://bugs.webkit.org/show_bug.cgi?id=73000

        Reviewed by Andreas Kling.

        This refactoring moves the implementation of the page size calculation into CSSStyleApplyProperty
        and removes the existing code from CSSStyleSelector.

        No new tests / refactoring only.

        * css/CSSStyleApplyProperty.cpp:
        (WebCore::ApplyPropertyPageSize::mmLength):
        (WebCore::ApplyPropertyPageSize::inchLength):
        (WebCore::ApplyPropertyPageSize::pageSizeFromName):
        (WebCore::ApplyPropertyPageSize::applyInheritValue):
        (WebCore::ApplyPropertyPageSize::applyInitialValue):
        (WebCore::ApplyPropertyPageSize::applyValue):
        (WebCore::ApplyPropertyPageSize::createHandler):
        (WebCore::CSSStyleApplyProperty::CSSStyleApplyProperty):
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):
        * css/CSSStyleSelector.h:

2011-11-28  Timothy Hatcher  <timothy@apple.com>

        Add support for knowing when a TreeElement is added or changed anywhere in a TreeOutline.

        Reviewed by Brian Weinstein.

        * inspector/front-end/treeoutline.js:
        (TreeOutline.prototype.appendChild): Call onadd if it exists.
        (TreeOutline.prototype.insertChild): Ditto.
        (TreeOutline.prototype._treeElementDidChange): Added. Call onchange if it exists.
        (TreeElement.prototype.set title): Call didChange.
        (TreeElement.prototype.set titleHTML): Ditto.
        (TreeElement.prototype.set tooltip): Ditto.
        (TreeElement.prototype.set hasChildren): Ditto.
        (TreeElement.prototype._fireDidChange): Added. Call TreeOutline._treeElementDidChange.
        (TreeElement.prototype.didChange): Added. Schedule a timeout for _fireDidChange.
        (TreeElement.prototype.expand): Move the code that sets the expanded flag to the beginning
        which is before onpopulate. Since onpopulate can add elements and call onadd, this makes
        sure the expanded flag is true before calling those functions.

2011-11-28  Timothy Hatcher  <timothy@apple.com>

        Skip selecting TreeElements that are hidden when keyboard navigating.

        We already skipped non-selectable tree elements in the common cases, this just makes selectable
        take the hidden flag into account.

        Reviewed by Brian Weinstein.

        * inspector/front-end/treeoutline.js:
        (TreeOutline.prototype._treeKeyDown): Skip non-selectable elements when pressing Left or Right,
        similar to what we already do when pressing Up and Down.
        (TreeElement): Set _selectable to true.
        (TreeElement.prototype.get selectable): Added. Return false when hidden.
        (TreeElement.prototype.set selectable): Added. Set _selectable.
        (TreeElement.prototype.traverseNextTreeElement): Renamed skipHidden to skipUnrevealed to prevent confusion with
        the hidden property of TreeElement.
        (TreeElement.prototype.traversePreviousTreeElement): Ditto.

2011-11-28  Timothy Hatcher  <timothy@apple.com>

        Use classList instead of addStyleClass and removeStyleClass in TreeOutline.

        https://webkit.org/b/72803

        Reviewed by Dan Bernstein.

        * inspector/front-end/treeoutline.js:
        (TreeOutline.prototype.appendChild):
        (TreeOutline.prototype.insertChild):
        (TreeElement.prototype.set hasChildren):
        (TreeElement.prototype.set hidden):
        (TreeElement.prototype._attach):
        (TreeElement.prototype.collapse):
        (TreeElement.prototype.expand):
        (TreeElement.prototype.select):
        (TreeElement.prototype.deselect):

2011-11-28  Leo Yang  <leo.yang@torchmobile.com.cn>

        Upstream platform/network/blackberry/AuthenticationChallenge.h
        https://bugs.webkit.org/show_bug.cgi?id=73196

        Reviewed by Daniel Bates.

        This is the BlackBerry implementation of WebCore::AuthenticationChallenge.
        Contributed by Torch Team.

        Initial upstream, can't be built yet, no new tests.

        * platform/network/blackberry/AuthenticationChallenge.h: Added.
        (WebCore::AuthenticationChallenge::AuthenticationChallenge):
        (WebCore::AuthenticationChallenge::setStored):
        (WebCore::AuthenticationChallenge::isStored):

2011-11-28  Dana Jansens  <danakj@chromium.org>

        Synchronization problem in Canvas/WebGLRenderingContext when listener asks for image
        https://bugs.webkit.org/show_bug.cgi?id=73228

        Reviewed by Kenneth Russell.

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::markContextChanged):

2011-11-28  Rafael Weinstein  <rafaelw@chromium.org>

        [MutationObservers] Fix build breakage after CSSInlineDeclaration refactor
        https://bugs.webkit.org/show_bug.cgi?id=73243

        Reviewed by Ryosuke Niwa.

        No tests needed. This patch only contains compile fixes.

        * css/CSSMutableStyleDeclaration.cpp:

2011-11-28  Jon Lee  <jonlee@apple.com>

        Fix Chromium bot build error related to b73253.

        * WebCore.gypi: Added missing references to NotificationController.

2011-11-28  Jon Lee  <jonlee@apple.com>

        Create skeleton framework for notifications support in WK2
        https://bugs.webkit.org/show_bug.cgi?id=73253
        <rdar://problem/10356943>

        Reviewed by Sam Weinig.

        Some refactoring was done to make notifications follow a similar pattern to our other clients, like
        geolocation and context menu.

        * Configurations/FeatureDefines.xcconfig: Split out ENABLE_NOTIFICATIONS based on platform.
        * WebCore.xcodeproj/project.pbxproj: Adding new NotificationController class, and exposing
        Notification and NotificationController as private headers.
        * Target.pri: Ditto.
        * WebCore.gypi: Ditto.

        * notifications/NotificationContents.h: Converted class to struct. Members need to be accessible
        in order to do WK2 argument encoding.
        (WebCore::NotificationContents::NotificationContents):

        * notifications/Notification.cpp: Update style of entire file.
        (WebCore::Notification::Notification): Added default constructor (for WK2), and minor refactoring
        with NotificationContents.
        * notifications/Notification.h: Added set methods for WK2 serialization. Also, update indenting.
        (WebCore::Notification::setHTML): Added.
        (WebCore::Notification::setURL): Added.
        (WebCore::Notification::contents): Added const version for WK2.
        * notifications/NotificationCenter.h: Update style.

        * notifications/NotificationController.cpp: Added.
        (WebCore::NotificationController::NotificationController):
        (WebCore::NotificationController::~NotificationController):
        * notifications/NotificationController.h: Added.
        (WebCore::NotificationController::client):
        * notifications/NotificationPresenter.h: This acts like a client, and should probably be renamed as such.
        Removed ifdef for exposure to WK2.
        (WebCore::NotificationPresenter::~NotificationPresenter): Moved as protected instead of public.

        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::webkitNotifications):  We move the request for the notification client from the chrome
        to the controller.
        * page/Page.cpp:
        (WebCore::Page::Page): The page now owns a notification controller.
        (WebCore::Page::PageClients::PageClients): Add notification client as a page client.
        * page/Page.h:
        (WebCore::Page::notificationController): Retrieve the notification controller.

        * page/ChromeClient.h: We move the request for the notification client from the chrome to the controller.
        Remove notificationPresenter().
        * page/Chrome.cpp: Remove notificationPresenter().
        * page/Chrome.h: Remove notificationPresenter().
        * loader/EmptyClients.h: Remove notificationPresenter().

2011-11-28  Noel Gordon  <noel.gordon@gmail.com>

        ImageDecoder setSize() should check for backing store allocation failure
        https://bugs.webkit.org/show_bug.cgi?id=72864

        Reviewed by Adam Barth.

        The backing store of a decoded image is a Vector<PixelData> on the affected
        ports. And Vector<> provides a resize capacity member that returns false if
        memory allocation fails.

        setSize() should be called once only during an image decode - add an ASSERT
        for that. Resize the backing store capacity to the requested image size and
        return false if memory allocation fails.

        ImageDecoder::isOverSize(width, height) is called to check that the decoded
        width and height won't overflow 'width x height x sizeof(PixelData)' before
        calls to setSize(). Refer to http://webkit.org/b/48634

        No new tests. Covered by fast/images/size-failure.html

        * platform/image-decoders/ImageDecoder.cpp:
        (WebCore::ImageFrame::setSize):

2011-11-28  Oliver Hunt  <oliver@apple.com>

        Fix V8 bindings codegen and add yet more tests for the typed
        array bindings.

        * bindings/scripts/CodeGeneratorV8.pm:
        (AddIncludesForType):
        * bindings/scripts/test/CPP/WebDOMFloat64Array.cpp:
        (WebDOMFloat64Array::foo):
        * bindings/scripts/test/CPP/WebDOMFloat64Array.h:
        * bindings/scripts/test/GObject/WebKitDOMFloat64Array.cpp:
        (webkit_dom_float64array_foo):
        * bindings/scripts/test/GObject/WebKitDOMFloat64Array.h:
        * bindings/scripts/test/JS/JSFloat64Array.cpp:
        (WebCore::jsFloat64ArrayPrototypeFunctionFoo):
        * bindings/scripts/test/ObjC/DOMFloat64Array.h:
        * bindings/scripts/test/ObjC/DOMFloat64Array.mm:
        (-[DOMFloat64Array foo:]):
        * bindings/scripts/test/TestTypedArray.idl:
        * bindings/scripts/test/V8/V8Float64Array.cpp:
        (WebCore::Float64ArrayInternal::fooCallback):

2011-11-28  Dana Jansens  <danakj@chromium.org>

        FloatQuad::isRectilinear() returns false for 180degree rotations
        https://bugs.webkit.org/show_bug.cgi?id=73040

        Reviewed by James Robinson.

        Added unit test FloatQuadTest.cpp.

        * platform/graphics/FloatQuad.cpp:
        (WebCore::withinEpsilon): Check two values are as close as can be represented by floats.
        (WebCore::FloatQuad::isRectilinear): Use withinEpsilon().

2011-11-28  Beth Dakin  <bdakin@apple.com>

        Speculative Chromium build-fix.

        * platform/chromium/ScrollAnimatorChromiumMac.mm:
        (WebCore::ScrollAnimatorChromiumMac::updateScrollerStyle):

2011-11-28  Oliver Hunt  <oliver@apple.com>

        Move typed array implementations into wtf
        https://bugs.webkit.org/show_bug.cgi?id=73248

        Reviewed by Sam Weinig.

        Removed the typed array implementation files from WebCore and
        added forwarding headers.

        * CMakeLists.txt:
        * ForwardingHeaders/wtf/ArrayBuffer.h: Added.
        * ForwardingHeaders/wtf/ArrayBufferView.h: Added.
        * ForwardingHeaders/wtf/Float32Array.h: Added.
        * ForwardingHeaders/wtf/Float64Array.h: Added.
        * ForwardingHeaders/wtf/Int16Array.h: Added.
        * ForwardingHeaders/wtf/Int32Array.h: Added.
        * ForwardingHeaders/wtf/Int8Array.h: Added.
        * ForwardingHeaders/wtf/Uint16Array.h: Added.
        * ForwardingHeaders/wtf/Uint32Array.h: Added.
        * ForwardingHeaders/wtf/Uint8Array.h: Added.
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSArrayBufferCustom.cpp:
        * bindings/js/JSArrayBufferViewHelper.h:
        * bindings/js/JSAudioContextCustom.cpp:
        * bindings/js/JSFileReaderCustom.cpp:
        * bindings/js/JSFloat32ArrayCustom.cpp:
        * bindings/js/JSFloat64ArrayCustom.cpp:
        * bindings/js/JSInt16ArrayCustom.cpp:
        * bindings/js/JSInt32ArrayCustom.cpp:
        * bindings/js/JSInt8ArrayCustom.cpp:
        * bindings/js/JSUint16ArrayCustom.cpp:
        * bindings/js/JSUint32ArrayCustom.cpp:
        * bindings/js/JSUint8ArrayCustom.cpp:
        * bindings/js/JSWaveShaperNodeCustom.cpp:
        * bindings/js/JSWebGLRenderingContextCustom.cpp:
        * bindings/js/JSXMLHttpRequestCustom.cpp:
        * bindings/scripts/CodeGeneratorJS.pm:
        (AddIncludesForType):
        (GenerateHeader):
        (NativeToJSValue):
        * bindings/scripts/test/JS/JSFloat64Array.cpp:
        * bindings/scripts/test/JS/JSFloat64Array.h:
        * dom/MessageEvent.h:
        * fileapi/FileReader.cpp:
        * fileapi/FileReaderLoader.cpp:
        * fileapi/FileReaderSync.cpp:
        * fileapi/WebKitBlobBuilder.cpp:
        * html/HTMLMediaElement.cpp:
        * html/canvas/ArrayBuffer.h: Removed.
        * html/canvas/ArrayBufferView.cpp: Removed.
        * html/canvas/DataView.h:
        * html/canvas/Float64Array.cpp: Removed.
        * html/canvas/Int16Array.h: Removed.
        * html/canvas/Int32Array.h: Removed.
        * html/canvas/Int8Array.h: Removed.
        * html/canvas/Uint16Array.h: Removed.
        * html/canvas/Uint32Array.h: Removed.
        * html/canvas/Uint8Array.cpp: Removed.
        * html/canvas/WebGLBuffer.cpp:
        * html/canvas/WebGLBuffer.h:
        * html/canvas/WebGLGetInfo.cpp:
        * html/canvas/WebGLGetInfo.h:
        * html/canvas/WebGLRenderingContext.cpp:
        * html/canvas/WebGLRenderingContext.h:
        * page/Crypto.cpp:
        * platform/graphics/GraphicsContext3D.cpp:
        * platform/graphics/mac/GraphicsContext3DMac.mm:
        * platform/graphics/opengl/GraphicsContext3DOpenGL.cpp:
        * webaudio/AsyncAudioDecoder.cpp:
        * webaudio/AudioBuffer.h:
        * webaudio/AudioContext.cpp:
        * webaudio/AudioParam.h:
        * webaudio/AudioParamTimeline.h:
        * webaudio/JavaScriptAudioNode.cpp:
        * webaudio/RealtimeAnalyser.cpp:
        * webaudio/WaveShaperProcessor.h:
        * websockets/WebSocketChannel.cpp:
        * websockets/WorkerThreadableWebSocketChannel.cpp:
        * xml/XMLHttpRequest.cpp:

2011-11-28  Robert Hogan  <robert@webkit.org>

        Unreviewed, rolling out r101202.
        http://trac.webkit.org/changeset/101202
        https://bugs.webkit.org/show_bug.cgi?id=71244

        Caused performance regressions when painting collapsed borders

        * rendering/RenderTableCell.cpp:
        (WebCore::compareBorders):
        (WebCore::RenderTableCell::collapsedStartBorder):
        (WebCore::RenderTableCell::collapsedEndBorder):
        (WebCore::RenderTableCell::collapsedBeforeBorder):
        (WebCore::RenderTableCell::collapsedAfterBorder):
        * rendering/style/CollapsedBorderValue.h:
        (WebCore::CollapsedBorderValue::CollapsedBorderValue):
        (WebCore::CollapsedBorderValue::operator==):
        * rendering/style/RenderStyleConstants.h:

2011-11-28  Beth Dakin  <bdakin@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=72551
        When the recommended scrollbar style changes, WKView's tracking options should 
        adjust accordingly
        -and corresponding-
        <rdar://problem/10409328>

        Reviewed by Darin Adler.

        This new ChromeClient function is called when the recommended scrollbar style 
        changes. This way, WebKit can respond to the change by adjusting its mouse 
        tracking.
        * page/ChromeClient.h:
        (WebCore::ChromeClient::recommendedScrollbarStyleDidChange):

        Existing ScrollableArea function scrollbarStyleChanged() now takes an int 
        indicating the new scrollbar style and a bool indicating whether it is necessary 
        to force an update. It used to be the case that this function was ONLY used to 
        force an update (and only called when an updated was needed), but now that it must 
        also call into the ChromeClient, it is necessary to include a bool tracking 
        whether we need to force an update. New implementation on FrameView is responsible 
        for calling ChromeClient, and then that calls into the pre-existing ScrollView 
        function for the forceUpdate part.
        * page/FrameView.cpp:
        (WebCore::FrameView::scrollbarStyleChanged):
        * page/FrameView.h:
        * platform/ScrollView.cpp:
        (WebCore::ScrollView:: scrollbarStyleChanged):
        * platform/ScrollView.h:
        * platform/ScrollableArea.h:
        (WebCore::ScrollableArea::scrollbarStyleChanged):
        * platform/mac/ScrollAnimatorMac.mm:
        (WebCore::ScrollAnimatorMac::updateScrollerStyle):

2011-11-28  Julien Chaffraix  <jchaffraix@webkit.org>

        Add limited parsing support for grid-columns and grid-rows
        https://bugs.webkit.org/show_bug.cgi?id=72531

        Reviewed by Tony Chang.

        Test: fast/css-grid-layout/grid-columns-rows-get-set.html

        Added support for:
        <track-list> := <length> | <percentage> | 'none' | 'auto'

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * rendering/style/StyleAllInOne.cpp:
        Updated our build systems.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::valueForGridTrackList):
        Helper function to convert our RenderStyle information to a proper CSSValue.
        It doesn't do much now but it will be expanded as we add more support.

        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue): Call the previous
        function.

        * css/CSSParser.h:
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):
        (WebCore::CSSParser::parseGridTrackList):
        CSS parsing part of this change. Pretty simple for now.

        * css/CSSPropertyNames.in:
        Added -webkit-grid-columns and -webkit-grid-rows.

        * css/CSSProperty.cpp:
        (WebCore::CSSProperty::isInheritedProperty):
        * css/CSSStyleApplyProperty.cpp:
        (WebCore::CSSStyleApplyProperty::CSSStyleApplyProperty):
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):
        Style application plumbing.

        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::RenderStyle):
        (WebCore::RenderStyle::diff):
        This change is required for later when we add layout for our grid.

        * rendering/style/RenderStyle.h:
        (WebCore::InheritedFlags::gridColumns):
        (WebCore::InheritedFlags::gridRows):
        (WebCore::InheritedFlags::setGridColumns):
        (WebCore::InheritedFlags::setGridRows):
        (WebCore::InheritedFlags::initialGridColumns):
        (WebCore::InheritedFlags::initialGridRows):
        Getters / Setters and initial values.

        * rendering/style/StyleGridData.cpp: Added.
        (WebCore::StyleGridData::StyleGridData):
        * rendering/style/StyleGridData.h: Added.
        (WebCore::StyleGridData::create):
        (WebCore::StyleGridData::copy):
        (WebCore::StyleGridData::operator==):
        (WebCore::StyleGridData::operator!=):
        This class holds the grid element information. For now pretty simple
        shell that will be used for the rest of the support.

        * rendering/style/StyleRareNonInheritedData.cpp:
        (WebCore::StyleRareNonInheritedData::StyleRareNonInheritedData):
        (WebCore::StyleRareNonInheritedData::operator==):
        * rendering/style/StyleRareNonInheritedData.h:
        Added StyleGridElementData to StyleRareNonInheritedData.

2011-11-28  Noel Gordon  <noel.gordon@gmail.com>

        [chromium] Use data decoding swizzle for turbo JPEG image decoding.
        https://bugs.webkit.org/show_bug.cgi?id=59670

        Reviewed by Kenneth Russell.

        Add a BGRX row decode data swizzle for the little-endian ports that use libjpeg-turbo
        (Chromium win/linux/mac) to reduce JPEG image decoding time by ~2x.

        JPEG images of type JSC_GRAYSCALE are excluded since layout regressions were observed
        for grayscale images produced by older tools (XV 3.10a 12/19/94). libjpeg decodes the
        images without error; libjpeg-turbo caused visible artifacts (see bug for examples).

        This patch is based on the work of Hironori Bono. He provided the original patch, and
        the quantitative results confirming the significant performance improvement.

        No new tests. Covered by many existing tests.

        * platform/image-decoders/jpeg/JPEGImageDecoder.cpp:
        (rgbOutputColorSpace):  If JCS_EXTENSIONS is defined (libjpeg-turbo), and the port is
        little-endian, define a BGRX data swizzle for use when decoding pixel rows.
        (turboSwizzled):
        (WebCore::JPEGImageReader::decode):  Select a possibly swizzled rgbOutputColorSpace()
        for JSC_RGB and JCS_YCbCr input color space images.  Exclude JSC_GRAYSCALE images.
        (WebCore::JPEGImageDecoder::outputScanlines):  Swizzle decode, if applicable.

2011-11-28  Fady Samuel  <fsamuel@chromium.org>

        Fix Aspect Ratio Property Inheritance And Make the Computed Value Equal the Specified Value
        https://bugs.webkit.org/show_bug.cgi?id=73038

        Reviewed by Ojan Vafai.

        hasAspectRatio was not being set if the -webkit-aspect-ratio property was inherited from the parent.

        Additionally, the computed value of -webkit-aspect-ratio was returning a number instead of a ratio.

        Test: fast/css/aspect-ratio-inheritance.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        * css/CSSStyleApplyProperty.cpp:
        (WebCore::ApplyPropertyAspectRatio::applyInheritValue):

2011-11-28  Ken Buchanan  <kenrb@chromium.org>

        Crash due to bidi style in isolated run
        https://bugs.webkit.org/show_bug.cgi?id=72978

        Reviewed by Eric Seidel.

        Prevent the UBA from changing the embedding level when inside an isolated run.

        * rendering/InlineIterator.h:
        (WebCore::notifyObserverEnteredObject):
        (WebCore::notifyObserverWillExitObject):

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

        Fix 'make dist' by adding two missing files to source list.

        * GNUmakefile.list.am: Add missing files.

2011-11-25  Ryosuke Niwa  <rniwa@webkit.org>

        dir=auto should imply unicode-bidi:isolate by default
        https://bugs.webkit.org/show_bug.cgi?id=63903

        Reviewed by Dan Bernstein.

        Fixed WebKit's implementation of bdo, bdi, and output elements to match HTML5 spec section 10.3.5:
        http://dev.w3.org/html5/spec/Overview.html#bidirectional-text

        Any element with dir=auto other than bdo, textarea, and pre should use unicode-bidi: -webkit-isolate by default.

        We still don't use -webkit-isolate for non-phrasing elements by default and unicode-override -webkit-isolate for
        bdo[dir=auto] so these two cases are failing in the added test.

        Test: fast/css/default-bidi-css-rules.html

        * css/html.css:
        (bdi, output): bdi and output should both use -webkit-isolate as the default value for unicode-bidi.
        (bdo): bdo should use bidi-override as the default value for unicode-bidi.
        * dom/MappedAttributeEntry.h: Add eBDI, which is used by bdi and output elements.
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::mapToEntry): Don't share the cache for dir attribute between bdi and other elements
        just like we don't share the cache for dir attribute between bdo and other elements.
        (WebCore::unicodeBidiAttributeForDirAuto): Don't set bidi-override for bdo element since this is done
        in the UA stylesheet now. Set unicode-bidi to -webkit-isolate for elements other than pre and textarea now that
        this function is called only when dir=auto.
        called when dir=auto as the name implies.
        (WebCore::HTMLElement::parseMappedAttribute): Don't call unicodeBidiAttributeForDirAuto when dir is not
        auto. Also set unicode-bidi to embed when dir is not auto and the element is neither bdi, bdo, nor output.
        * html/HTMLOutputElement.cpp:
        (WebCore::HTMLOutputElement::mapToEntry): Don't share the cache for dir between output and other elements.
        * html/HTMLOutputElement.h:
        * html/HTMLTagNames.in:

2011-11-28  Jer Noble  <jer.noble@apple.com>

        WebAudio: AudioContext::uninitialize() can caused AudioContext deletion before deleting marked nodes.
        https://bugs.webkit.org/show_bug.cgi?id=72755

        Reviewed by Eric Carlson.

        No new tests.

        Protect AudioContext from being deleted before uninitialize() returns. Fixes an assertion in ~AudioContext() and 
        a potential source of leaks.

        * webaudio/AudioContext.cpp:
        (WebCore::AudioContext::uninitialize):

2011-11-28  Andreas Kling  <kling@webkit.org>

        InspectorCSSAgent: Remove unused function inlineStyleElement().
        <http://webkit.org/b/73221>

        Reviewed by Pavel Feldman.

        * inspector/InspectorCSSAgent.cpp:
        * inspector/InspectorCSSAgent.h:

2011-11-28  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] Build system fixes against V8.

        Reviewed by Tor Arne Vestbø.

        * DerivedSources.pri: Add missing binding files to the build and also added
        the regexp table generation needed for Yarr, which is compiled statically into
        WebCore to implement WebCore::RegularExpression.
        * Target.pri: Adapt to latest v8 binding files.

2011-11-28  Andrey Kosyakov  <caseq@chromium.org>

        Web Inspector: resource status image is mis-aligned in the network headers view
        https://bugs.webkit.org/show_bug.cgi?id=73211

        Reviewed by Pavel Feldman.

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

2011-11-28  Pavel Feldman  <pfeldman@google.com>

        Web Inspector: console evaluation doesn't work when navigating from a page with several frames to another one
        https://bugs.webkit.org/show_bug.cgi?id=73210

        Reviewed by Yury Semikhatsky.

        Test: http/tests/inspector/resource-tree/resource-tree-events.html

        * inspector/Inspector.json:
        * inspector/front-end/ResourceTreeModel.js:
        (WebInspector.ResourceTreeModel.prototype._frameDetached):
        (WebInspector.ResourceTreeFrame.prototype.navigate):
        (WebInspector.ResourceTreeFrame.prototype.removeChildFrame):
        (WebInspector.ResourceTreeFrame.prototype.removeChildFrames):

2011-11-28  Pavel Feldman  <pfeldman@google.com>

        Web Inspector: introduce InspectorBaseAgent.
        https://bugs.webkit.org/show_bug.cgi?id=73203

        Now that inspector controller does not depend on concrete inspector agent
        classes, we can collect agent instances using abstract type.

        Reviewed by Yury Semikhatsky.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * inspector/InspectorAgent.cpp:
        (WebCore::InspectorAgent::InspectorAgent):
        * inspector/InspectorAgent.h:
        * inspector/InspectorApplicationCacheAgent.cpp:
        (WebCore::InspectorApplicationCacheAgent::InspectorApplicationCacheAgent):
        * inspector/InspectorApplicationCacheAgent.h:
        * inspector/InspectorBaseAgent.cpp: Copied from Source/WebCore/inspector/InspectorFileSystemAgent.h.
        (WebCore::InspectorBaseAgent::InspectorBaseAgent):
        (WebCore::InspectorBaseAgent::~InspectorBaseAgent):
        * inspector/InspectorBaseAgent.h: Copied from Source/WebCore/inspector/InspectorFileSystemAgent.h.
        * inspector/InspectorCSSAgent.cpp:
        (WebCore::InspectorCSSAgent::InspectorCSSAgent):
        * inspector/InspectorCSSAgent.h:
        (WebCore::InspectorCSSAgent::setFrontend):
        (WebCore::InspectorCSSAgent::restore):
        * inspector/InspectorConsoleAgent.cpp:
        (WebCore::InspectorConsoleAgent::InspectorConsoleAgent):
        (WebCore::InspectorConsoleAgent::~InspectorConsoleAgent):
        (WebCore::InspectorConsoleAgent::enable):
        (WebCore::InspectorConsoleAgent::disable):
        (WebCore::InspectorConsoleAgent::clearMessages):
        (WebCore::InspectorConsoleAgent::restore):
        (WebCore::InspectorConsoleAgent::clearFrontend):
        (WebCore::InspectorConsoleAgent::resourceRetrievedByXMLHttpRequest):
        (WebCore::InspectorConsoleAgent::setMonitoringXHREnabled):
        (WebCore::InspectorConsoleAgent::addConsoleMessage):
        * inspector/InspectorConsoleAgent.h:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::InspectorDOMAgent):
        (WebCore::InspectorDOMAgent::clearFrontend):
        (WebCore::InspectorDOMAgent::setDocument):
        (WebCore::InspectorDOMAgent::getDocument):
        (WebCore::InspectorDOMAgent::mainFrameDOMContentLoaded):
        * inspector/InspectorDOMAgent.h:
        * inspector/InspectorDOMStorageAgent.cpp:
        (WebCore::InspectorDOMStorageAgent::InspectorDOMStorageAgent):
        (WebCore::InspectorDOMStorageAgent::restore):
        (WebCore::InspectorDOMStorageAgent::enable):
        (WebCore::InspectorDOMStorageAgent::disable):
        * inspector/InspectorDOMStorageAgent.h:
        * inspector/InspectorDatabaseAgent.cpp:
        (WebCore::InspectorDatabaseAgent::InspectorDatabaseAgent):
        (WebCore::InspectorDatabaseAgent::enable):
        (WebCore::InspectorDatabaseAgent::disable):
        (WebCore::InspectorDatabaseAgent::restore):
        * inspector/InspectorDatabaseAgent.h:
        * inspector/InspectorDebuggerAgent.cpp:
        (WebCore::InspectorDebuggerAgent::InspectorDebuggerAgent):
        (WebCore::InspectorDebuggerAgent::disable):
        (WebCore::InspectorDebuggerAgent::enabled):
        (WebCore::InspectorDebuggerAgent::enable):
        (WebCore::InspectorDebuggerAgent::clearFrontend):
        (WebCore::InspectorDebuggerAgent::setBreakpointByUrl):
        (WebCore::InspectorDebuggerAgent::removeBreakpoint):
        (WebCore::InspectorDebuggerAgent::didParseSource):
        * inspector/InspectorDebuggerAgent.h:
        * inspector/InspectorFileSystemAgent.cpp:
        (WebCore::InspectorFileSystemAgent::InspectorFileSystemAgent):
        * inspector/InspectorFileSystemAgent.h:
        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::InspectorPageAgent):
        * inspector/InspectorPageAgent.h:
        * inspector/InspectorProfilerAgent.cpp:
        (WebCore::InspectorProfilerAgent::InspectorProfilerAgent):
        (WebCore::InspectorProfilerAgent::enable):
        (WebCore::InspectorProfilerAgent::disable):
        (WebCore::InspectorProfilerAgent::restore):
        (WebCore::InspectorProfilerAgent::restoreEnablement):
        (WebCore::InspectorProfilerAgent::start):
        (WebCore::InspectorProfilerAgent::stop):
        * inspector/InspectorProfilerAgent.h:
        * inspector/InspectorResourceAgent.cpp:
        (WebCore::InspectorResourceAgent::InspectorResourceAgent):
        * inspector/InspectorResourceAgent.h:
        * inspector/InspectorTimelineAgent.cpp:
        (WebCore::InspectorTimelineAgent::InspectorTimelineAgent):
        * inspector/InspectorTimelineAgent.h:
        * inspector/InspectorWorkerAgent.cpp:
        (WebCore::InspectorWorkerAgent::InspectorWorkerAgent):
        (WebCore::InspectorWorkerAgent::restore):
        (WebCore::InspectorWorkerAgent::clearFrontend):
        (WebCore::InspectorWorkerAgent::setWorkerInspectionEnabled):
        (WebCore::InspectorWorkerAgent::setAutoconnectToWorkers):
        (WebCore::InspectorWorkerAgent::shouldPauseDedicatedWorkerOnStart):
        (WebCore::InspectorWorkerAgent::didStartWorkerContext):
        (WebCore::InspectorWorkerAgent::createWorkerFrontendChannel):
        * inspector/InspectorWorkerAgent.h:

2011-11-28  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: chromium: Unreviewed one-line fix for Summary view filter.

        * inspector/front-end/HeapSnapshot.js:
        (WebInspector.HeapSnapshot.prototype.createNodesProviderForClass):

2011-11-28  Pavel Feldman  <pfeldman@google.com>

        Not reviewed: disable filesystem instrumentation to unbreak Qt tests.

        * inspector/front-end/inspector.js:

2011-11-28  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r101249.
        http://trac.webkit.org/changeset/101249
        https://bugs.webkit.org/show_bug.cgi?id=73205

        it broke qt-minimal and wince builds (Requested by loislo on
        #webkit).

        * inspector/CodeGeneratorInspector.py:
        (Capitalizer.upper_camel_case_to_lower):
        (RawTypes.get):
        (RawTypes.String.get_c_param_type):
        (RawTypes.Object.get_c_param_type):
        (RawTypes.Object):
        (ParamType):
        (TypeData.__init__):
        (TypeData.get_raw_type):
        (TypeMap.__init__):
        (InspectorFrontend_h):
        (InspectorArray):
        (InspectorObject):
        (String):
        (InspectorBackendDispatcher_h):
        (Generator.process_command):
        * inspector/InspectorValues.h:

2011-11-28  Andreas Kling  <kling@webkit.org>

        CSSStyleDeclaration: Remove ability to have style sheet as parent.
        <http://webkit.org/b/73199>

        Reviewed by Antti Koivisto.

        Refactor so we don't have to support style sheets as parents of style declarations.
        The users of this mechanism were mapped attributes and inline styles, which instead
        now know how to find the relevant style sheet via their document().

        * css/CSSMutableStyleDeclaration.h:
        * css/CSSMutableStyleDeclaration.cpp:
        (WebCore::CSSElementStyleDeclaration::styleSheet):

            Added CSSElementStyleDeclaration::styleSheet(). The default implementation
            returns the associated element's document()->elementSheet(). It is virtual
            because SVGFontFaceElement needs document()->mappedElementSheet() instead.

        * css/CSSStyleDeclaration.h:
        (WebCore::CSSStyleDeclaration::parentRule):
        (WebCore::CSSStyleDeclaration::setParentRule):
        * css/CSSStyleDeclaration.cpp:
        (WebCore::CSSStyleDeclaration::CSSStyleDeclaration):

            Remove m_parentIsRule and m_parentStyleSheet, leaving only m_parentRule.

        * css/CSSStyleDeclaration.cpp:
        (WebCore::CSSStyleDeclaration::parentStyleSheet):

            Out-of-lined so it can return the CSSElementStyleDeclaration::styleSheet() for
            declarations with an associated element.

        * css/WebKitCSSKeyframeRule.cpp:
        (WebCore::WebKitCSSKeyframeRule::~WebKitCSSKeyframeRule):
        (WebCore::WebKitCSSKeyframeRule::setDeclaration):

            Use setParentRule() instead of setParentStyleSheet() on the internal
            CSSMutableStyleDeclaration in keyframe rules.

        * dom/StyledElement.h:

            Removed StyledElement::didMoveToNewOwnerDocument() since we no longer need to
            manually keep the inline style's parent style sheet pointer up-to-date.

        * dom/StyledElement.cpp:
        (WebCore::StyledElement::createInlineStyleDecl):
        (WebCore::StyledElement::destroyInlineStyleDecl):
        (WebCore::StyledElement::attributeChanged):
        (WebCore::StyledElement::createMappedDecl):
        * html/HTMLTableElement.cpp:
        (WebCore::HTMLTableElement::additionalAttributeStyleDecls):
        (WebCore::HTMLTableElement::addSharedCellBordersDecl):
        (WebCore::HTMLTableElement::addSharedCellPaddingDecl):
        (WebCore::HTMLTableElement::addSharedGroupDecls):
        * svg/SVGFontFaceElement.cpp:
        (WebCore::SVGFontFaceElement::SVGFontFaceElement):

            Remove setParentStyleSheet() calls on mapped attributes and inline styles.
            They now find the relevant style sheet by following the associated element ptr.

        * svg/SVGFontFaceElement.cpp:
        (WebCore::FontFaceStyleDeclaration::FontFaceStyleDeclaration):
        (WebCore::FontFaceStyleDeclaration::~FontFaceStyleDeclaration):
        (WebCore::FontFaceStyleDeclaration::styleSheet):

            Subclass CSSElementStyleDeclaration for SVG's font-face elment in order to
            override styleSheet(). This is necessary because they operate on the document's
            mappedElementSheet() rather than the elementSheet().

2011-11-28  Peter Rybin  <peter.rybin@gmail.com>

        Web Inspector: [protocol] generate C++ classes for protocol JSON named types
        https://bugs.webkit.org/show_bug.cgi?id=72835

        Reviewed by Pavel Feldman.

        Extends python generator functionality.
        Makes constructor in InspectorObject public.

        * inspector/CodeGeneratorInspector.py:
        * inspector/InspectorValues.h:

2011-11-28  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] WTF should be built as separate static library
        https://bugs.webkit.org/show_bug.cgi?id=73201

        Reviewed by Tor Arne Vestbø.

        * Target.pri: Require wtf and don't claim to be building it
        with BUILDING_WTF in DEFINES (otherwise we won't link it with
        debug-shlib builds).

2011-11-28  Taiju TSUIKI  <tzik@chromium.org>

        Fix build error on Chromium/Windows.
        https://bugs.webkit.org/show_bug.cgi?id=73200

        Unreviewed build fix.

        * inspector/InspectorFileSystemAgent.cpp:

2011-11-28  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix make distcheck issues.

        * GNUmakefile.list.am: Add missing files.
        * bindings/gobject/GNUmakefile.am: Only build
        WebKitDOMHTMLPropertiesCollection when microdate is enabled.

2011-11-28  Luke Macpherson   <macpherson@chromium.org>

        Implement CSS border image properties in CSSStyleApplyProperty.
        https://bugs.webkit.org/show_bug.cgi?id=72846

        Reviewed by Andreas Kling.

        Refactoring that implements CSS border image properties in CSSStyleApplyProperty.
        Part of the larger refactoring aimed at removing CSSStyleSelector::applyProperty().

        Covered by existing tests in fast/css.

        * css/CSSStyleApplyProperty.cpp:
        Implement property handlers based on existing code.
        (WebCore::ApplyPropertyBorderImage::setValue):
        (WebCore::ApplyPropertyBorderImage::applyValue):
        (WebCore::ApplyPropertyBorderImage::createHandler):
        (WebCore::CSSStyleApplyProperty::CSSStyleApplyProperty):
        * css/CSSStyleSelector.cpp:
        Remove old code.
        (WebCore::CSSStyleSelector::applyProperty):

2011-11-28  Luke Macpherson   <macpherson@chromium.org>

        Implement CSS hyphenate-limit properties in CSSStyleApplyProperty
        https://bugs.webkit.org/show_bug.cgi?id=73107

        Reviewed by Andreas Kling.

        Covered by existing tests under fast/css (parsing-hyphenate-limit-lines.html, parsing-hyphenate-limit.html, text/hyphenate-limit-lines.html)

        * css/CSSStyleApplyProperty.cpp:
        (WebCore::ApplyPropertyNumber::setValue):
        (WebCore::ApplyPropertyNumber::applyValue):
        (WebCore::ApplyPropertyNumber::createHandler):
        (WebCore::CSSStyleApplyProperty::CSSStyleApplyProperty):
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):

2011-11-28  Taiju TSUIKI  <tzik@chromium.org>

        [Inspector][FileSystem]: Capture DOMFileSystem object.
        Adding files for FileSystem support to Inspector.
        Adding hooks into DOMFileSystem creation and destruction.
        https://bugs.webkit.org/show_bug.cgi?id=72456

        Reviewed by Pavel Feldman.

        Tests should be added in later CL.

        * CMakeLists.txt:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * fileapi/DOMFileSystem.cpp:
        (WebCore::DOMFileSystem::create):
        * fileapi/DOMFileSystem.h:
        * inspector/CodeGeneratorInspector.py:
        * inspector/Inspector.json:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        (WebCore::InspectorController::connectFrontend):
        (WebCore::InspectorController::disconnectFrontend):
        (WebCore::InspectorController::restoreInspectorStateFromCookie):
        * inspector/InspectorController.h:
        * inspector/InspectorFileSystemAgent.cpp: Added.
        * inspector/InspectorFileSystemAgent.h: Added.
        * inspector/InspectorFileSystemInstrumentation.h: Added.
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::didOpenFileSystemImpl):
        * inspector/InspectorInstrumentation.h:
        * inspector/InstrumentingAgents.h:
        (WebCore::InstrumentingAgents::InstrumentingAgents):
        (WebCore::InstrumentingAgents::inspectorFileSystemAgent):
        (WebCore::InstrumentingAgents::setInspectorFileSystemAgent):
        * inspector/WorkerInspectorController.cpp:
        (WebCore::WorkerInspectorController::connectFrontend):
        * inspector/front-end/inspector.js:

2011-11-28  Luke Macpherson   <macpherson@chromium.org>

        Implement CSSPropertyWebkitFlowInto and CSSPropertyWebkitFlowFrom in CSSStyleApplyProperty.
        https://bugs.webkit.org/show_bug.cgi?id=73110

        Reviewed by Andreas Kling.

        Covered by existing tests under fast/regions.

        * css/CSSStyleApplyProperty.cpp:
        (WebCore::CSSStyleApplyProperty::CSSStyleApplyProperty):
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):

2011-11-27  Luke Macpherson   <macpherson@chromium.org>

        Implement vertical-align property in CSSStyleApplyProperty.
        https://bugs.webkit.org/show_bug.cgi?id=72926

        Reviewed by Andreas Kling.

        Part of the ongoing refactoring of CSSStyleSelector::applyProperty.

        Covered by several tests under fast/css.

        * css/CSSPrimitiveValue.h:
        (WebCore::CSSPrimitiveValue::isPercent):
        * css/CSSStyleApplyProperty.cpp:
        (WebCore::ApplyPropertyVerticalAlign::applyValue):
        (WebCore::ApplyPropertyVerticalAlign::createHandler):
        (WebCore::CSSStyleApplyProperty::CSSStyleApplyProperty):
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):
        * rendering/style/RenderStyle.h:
        (WebCore::InheritedFlags::setVerticalAlignLength):
        Calling setVerticalAlignLength now automatically sets verticalAlign to LENGTH.

2011-11-27  Luke Macpherson   <macpherson@chromium.org>

        Implement CSSPropertyTextAlign in CSSStyleApplyProperty.
        https://bugs.webkit.org/show_bug.cgi?id=73102

        Reviewed by Andreas Kling.

        Covered by fast/css/text-align*.html

        * css/CSSStyleApplyProperty.cpp:
        (WebCore::ApplyPropertyTextAlign::applyValue):
        (WebCore::ApplyPropertyTextAlign::createHandler):
        (WebCore::CSSStyleApplyProperty::CSSStyleApplyProperty):
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):

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

        CSSStyleRule: Pack m_sourceLine with CSSRule bits.
        <http://webkit.org/b/73168>

        Reviewed by Antti Koivisto.

        Make CSSStyleRule::m_sourceLine a 27-bit integer and pack it with the rest
        of the members in CSSRule. This shrinks CSSStyleRule by one CPU word
        and reduces memory consumption by 81 kB on the GMail inbox (on 64-bit.)

        * css/CSSRule.h:
        (WebCore::CSSRule::CSSRule):
        * css/CSSStyleRule.cpp:
        (WebCore::CSSStyleRule::CSSStyleRule):
        * css/CSSStyleRule.h:

2011-11-27  Mark Rowe  <mrowe@apple.com>

        <http://webkit.org/b/72665> Switch to a more modern approach to retrieving the OS marketing version

        Reviewed by Dan Bernstein.

        * WebCore.exp.in: Expose the necessary symbol.
        * platform/mac/WebCoreSystemInterface.h: Ditto.
        * platform/mac/WebCoreSystemInterface.mm: Ditto.

2011-11-27  Anna Cavender  <annacc@chromium.org>

        Move readyState from TextTrack to HTMLTrackElement
        https://bugs.webkit.org/show_bug.cgi?id=72553

        Fix for r101057 after it was rolled out in r101088

        Reviewed by Eric Carlson.

        * html/HTMLTrackElement.cpp:
        (WebCore::HTMLTrackElement::HTMLTrackElement):
            Set initial readyState to NONE.
        (WebCore::HTMLTrackElement::didCompleteLoad):
            Set readyState based on load completed status.
        (WebCore::HTMLTrackElement::setReadyState):
            This replaces textTrackReadyStateChanged() because only LoadableTextTrack
            needs to notify HTMLTrackElement of readyState changes (i.e.
            textTrackReadyStateChanged() is no longer required of TextTrackClient).
        * html/HTMLTrackElement.h:
            ReadyState enum and m_readyState member variable moved from TextTrack.
        (WebCore::HTMLTrackElement::readyState):
            New: readyState() getter.
        * html/HTMLTrackElement.idl:
            Add readyState attribute and associated constants.

        * html/LoadableTextTrack.cpp:
        (WebCore::LoadableTextTrack::loadTimerFired): Set readyState on HTMLTrackElement.
        (WebCore::LoadableTextTrack::cueLoadingStarted): Ditto.
        (WebCore::LoadableTextTrack::cueLoadingCompleted): Move code to set readyState
            to HTMLTrackElement (it can set it based on loading status).

        * html/TextTrack.cpp: Remove readyState from TextTrack.
        (WebCore::TextTrack::TextTrack): Ditto.
        * html/TextTrack.h: Ditto.
        * html/TextTrack.idl: Ditto.

2011-11-27  Anna Cavender  <annacc@chromium.org>

        Don't allow attribute changes on <track> if feature is not enabled.
        https://bugs.webkit.org/show_bug.cgi?id=73046

        Reviewed by Eric Carlson.

        No new tests. This fixes a problem when --enable-video-track is not used,
        but the tests use this flag.

        * html/HTMLTrackElement.cpp:
        (WebCore::HTMLTrackElement::attributeChanged):

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

        CSSMutableStyleDeclaration: setCssText() mostly duplicates parseDeclaration().
        <http://webkit.org/b/73171>

        Reviewed by Antti Koivisto.

        Let setCssText() call parseDeclaration() instead of duplicating the functionality.

        * css/CSSMutableStyleDeclaration.cpp:
        (WebCore::CSSMutableStyleDeclaration::setCssText):

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

        CSS/XSLStyleSheet: checkLoaded() needn't be virtual.
        <http://webkit.org/b/73169>

        Reviewed by Antti Koivisto.

        Devirtualize checkLoaded() in CSSStyleSheet and XSLStyleSheet as they
        are not overriding anything, nor are they ever overridden.

        * css/CSSStyleSheet.h:
        * xml/XSLStyleSheet.h:

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

        Add assertions that CSSMappedAttributeDeclarations aren't using strict parsing.
        <http://webkit.org/b/73167>

        Reviewed by Antti Koivisto.

        * dom/StyledElement.cpp:
        (WebCore::StyledElement::createMappedDecl):
        * html/HTMLTableElement.cpp:
        (WebCore::HTMLTableElement::additionalAttributeStyleDecls):
        (WebCore::HTMLTableElement::addSharedCellBordersDecl):
        (WebCore::HTMLTableElement::addSharedCellPaddingDecl):
        (WebCore::HTMLTableElement::addSharedGroupDecls):

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

        CSSStyleSheet: Removed unused create() overload.
        <http://webkit.org/b/73170>

        Reviewed by Antonio Gomes.

        Nobody was using CSSStyleSheet::create(ownerNode, originalURL, finalURL)
        so remove it.

        * css/CSSStyleSheet.h:
        (WebCore::CSSStyleSheet::create):

2011-11-27  Robert Hogan  <robert@webkit.org>

        CSS 2.1 failure: border-conflict-element-*
        https://bugs.webkit.org/show_bug.cgi?id=71244

        Reviewed by Julien Chaffraix.
        
        From http://www.w3.org/TR/CSS21/tables.html#border-conflict-resolution :
          "When two adjacent cells have the same border-width and the same border-style in a 
          'border-collapse: collapse' table, then the color of the border from the leftmost cell wins
          (if the table's 'direction' is 'ltr'; right, if it is 'rtl') and the color of the border
          from the topmost cell wins."

        So WebCore::compareBorders needs to account for the position of the cell when 
        deciding which border wins the comparison. This will ensure that the winning border is 
        sorted to the appropriate position in the sorted list of borders for painting.

        When conflicting collapsed borders are in the same cell, the following order of
        precedence is used (where 4 has highest precedence):

                           __3__
                          |     |
                        4 |     | 1
                          |_____|
                             2

        This fixes the following failing tests from the border-conflict-element-* set
        in the CSS 2.1 test suite:
          border-conflict-element-001d.htm
          border-conflict-element-0037.htm

        One test in the suite is known to be wrong, so a corrected version has been landed outside the 
        css2.1 folder:
          border-conflict-element-002.htm

        This change entails rebaselining quite a few tests, see the LayoutTests ChangeLog for a full
        explanation of the rebaselines.

        * rendering/RenderTableCell.cpp:
        (WebCore::compareBorders): Compare the cells' position from the left (in 'ltr') and right (in 'rtl')
                                   of the table and the cells' position from the top of the table when nothing
                                   else in the style, width, or grouping of the borders determines precedence.
                                   If the conflicting borders are in the same cell, apply the same logic to the position of the borders.
        (WebCore::RenderTableCell::collapsedStartBorder): Pass the cell's position and its table's direction to CollapsedBorderValue
        (WebCore::RenderTableCell::collapsedEndBorder): ditto
        (WebCore::RenderTableCell::collapsedBeforeBorder): ditto
        (WebCore::RenderTableCell::collapsedAfterBorder): ditto
        * rendering/style/CollapsedBorderValue.h:
        (WebCore::CollapsedBorderValue::CollapsedBorderValue): Learn the position of the border's cell and the direction of its table
        (WebCore::CollapsedBorderValue::columnOffset): the cell's offset from the top of the table
        (WebCore::CollapsedBorderValue::rowOffset): the cell's offset from the start of the table
        (WebCore::CollapsedBorderValue::edge): which edge of the cell the border is on
        (WebCore::CollapsedBorderValue::operator==): cells with the same position in the table are equal

2011-11-26  Pavel Feldman  <pfeldman@google.com>

        Web Inspector: remove disconnectFromBackend from the protocol.
        https://bugs.webkit.org/show_bug.cgi?id=73127

        Reviewed by Yury Semikhatsky.

        * inspector/Inspector.json:
        * inspector/InspectorAgent.cpp:
        (WebCore::InspectorAgent::inspectedPageDestroyed):
        * inspector/InspectorClient.h:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::close):
        * inspector/InspectorFrontendClient.h:
        * inspector/InspectorFrontendHost.cpp:
        * inspector/InspectorFrontendHost.h:
        * inspector/InspectorFrontendHost.idl:
        * inspector/front-end/InspectorFrontendHostStub.js:
        * inspector/front-end/inspector.js:
        (WebInspector.disconnectFromWorker):
        * loader/EmptyClients.h:
        (WebCore::EmptyInspectorClient::closeInspectorFrontend):

2011-11-26  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Unreviewed build fix. Change the order of wx header includes
        to avoid a windows.h inclusion order issue, and make sure a stub
        method returns a value.

        * platform/wx/FileSystemWx.cpp:
        (WebCore::openFile):

2011-11-26  Alejandro G. Castro  <alex@igalia.com>

        Fix compilation after r101157.

        Reviewed by Martin Robinson.

        * bindings/scripts/preprocessor.pm:
        (applyPreprocessor): In case we have a string with
        double-quotations (") we replace it with the empty string.

2011-11-26  Igor Oliveira  <igor.oliveira@openbossa.org>

        [TexMapper][WK2][Qt] Simple opacity animations are not working
        https://bugs.webkit.org/show_bug.cgi?id=73157

        LayerTreeHostQt needs to know what nodes in the TextureMapper are visible, to associate
        a tile to it. It is done using TextureMapperNode::collectVisibleContentsRects.

        However TextureMapperNode::collectVisibleContentsRects has an optimization to check if
        the current tile has opacity greater than 0.01, otherwise it will not create a tile for
        the current node.

        For opacity animations from 0 to 1, it is a problem because the tile is never created
        and the animation never happens.

        This patch fixes opacity animations.

        Reviewed by Noam Rosenthal.

        * platform/graphics/texmap/TextureMapperNode.cpp:
        (WebCore::TextureMapperNode::countDescendantsWithContent):
        (WebCore::TextureMapperNode::collectVisibleContentsRects):

2011-11-26  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r101193.
        http://trac.webkit.org/changeset/101193
        https://bugs.webkit.org/show_bug.cgi?id=73158

        Breaks Windows and Qt minimal. (Requested by pfeldman on
        #webkit).

        * inspector/Inspector.json:
        * inspector/InspectorAgent.cpp:
        (WebCore::InspectorAgent::inspectedPageDestroyed):
        * inspector/InspectorClient.h:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::close):
        * inspector/InspectorFrontendClient.h:
        * inspector/InspectorFrontendHost.cpp:
        (WebCore::InspectorFrontendHost::disconnectFromBackend):
        * inspector/InspectorFrontendHost.h:
        * inspector/InspectorFrontendHost.idl:
        * inspector/front-end/InspectorFrontendHostStub.js:
        (.WebInspector.InspectorFrontendHostStub.prototype.disconnectFromBackend):
        * inspector/front-end/inspector.js:
        (WebInspector.disconnectFromBackend):
        * loader/EmptyClients.h:

2011-11-26  Pavel Feldman  <pfeldman@google.com>

        Web Inspector: remove disconnectFromBackend from the protocol.
        https://bugs.webkit.org/show_bug.cgi?id=73127

        Reviewed by Yury Semikhatsky.

        * inspector/Inspector.json:
        * inspector/InspectorAgent.cpp:
        (WebCore::InspectorAgent::inspectedPageDestroyed):
        * inspector/InspectorClient.h:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::close):
        * inspector/InspectorFrontendClient.h:
        * inspector/InspectorFrontendHost.cpp:
        * inspector/InspectorFrontendHost.h:
        * inspector/InspectorFrontendHost.idl:
        * inspector/front-end/InspectorFrontendHostStub.js:
        * inspector/front-end/inspector.js:
        (WebInspector.disconnectFromWorker):
        * loader/EmptyClients.h:
        (WebCore::EmptyInspectorClient::closeInspectorFrontend):

2011-11-26  Timothy Hatcher  <timothy@apple.com>

        Fix a bug in TreeOutline which would cause parent elements to show up as expanded and empty
        when removed and added back to the tree.

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

        Reviewed by Pavel Feldman.

        * inspector/front-end/treeoutline.js:
        (TreeElement.prototype.collapse): Set _treeElementsExpandedState to false instead of true.
        Only TreeElement.prototype.expand should set it to true, which it does.

2011-11-26  Martin Robinson  <mrobinson@igalia.com>

        [GTK] Fix some warnings in WebCore GTK+
        https://bugs.webkit.org/show_bug.cgi?id=73137

        Reviewed by Philippe Normand.

        No new tests. This patch just fixes compilation warnings.

        * platform/gtk/CursorGtk.cpp:
        (WebCore::createNamedCursor): Remove unused variable.
        * platform/gtk/RenderThemeGtk3.cpp:
        (WebCore::RenderThemeGtk::paintSliderTrack): ASSERT_UNUSED instead of ASSERT.
        * platform/gtk/SharedTimerGtk.cpp: Ditto.
        (WebCore::stopSharedTimer):

2011-11-25  Eric Carlson  <eric.carlson@apple.com>

        Implement addCue and removeCue in TextTrack
        https://bugs.webkit.org/show_bug.cgi?id=72554

        Reviewed by Darin Adler.

        Test: media/track/track-add-remove-cue.html

        * html/HTMLTrackElement.cpp:
        (WebCore::HTMLTrackElement::ensureTrack): Go ahead and allocate a Track even if the feature 
            is disabled, it just won't load anything.
        (WebCore::HTMLTrackElement::scheduleLoad): Early return if the featue is disabled.
        (WebCore::HTMLTrackElement::canLoadUrl): Ditto.

        * html/LoadableTextTrack.cpp:
        (WebCore::LoadableTextTrack::newCuesAvailable): Add new cues one at a time because 
            cues->add(Vector<TextTrackCue*>&) is gone.

        * html/TextTrack.cpp:
        (WebCore::TextTrack::addCue): Implement.
        (WebCore::TextTrack::removeCue): Ditto.
        * html/TextTrack.h:

        (WebCore::TextTrackCue::TextTrackCue): Initialize every member variable.
        (WebCore::TextTrackCue::track): m_track is now a RefPtr.
        (WebCore::TextTrackCue::setTrack): Ditto.
        * html/TextTrackCue.h:

        * html/TextTrackCueList.cpp:
        (WebCore::TextTrackCueList::add): Don't ignore out of order cues, the spec text is not 
            a conformance requirement. Return bool to indicate success or failure.
        (WebCore::TextTrackCueList::remove): Return bool to indicate success or failure.
        * html/TextTrackCueList.h:

        * loader/TextTrackLoader.cpp:
        (WebCore::TextTrackLoader::notifyFinished): Don't change m_state once it is set to Failed.

2011-11-25  Kentaro Hara  <haraken@chromium.org>

        Refactoring CodeGenerator*.pm for bug 72138
        https://bugs.webkit.org/show_bug.cgi?id=73115

        Reviewed by Adam Barth.

        Tests: bindings/scripts/test/TestObj.idl

        * bindings/scripts/CodeGeneratorGObject.pm: Added "1;" at the end since this perl script is loaded as a package.
        * bindings/scripts/CodeGeneratorV8.pm: Ditto. Removed unnecessary variable names from method declarations in order to supress style check errors when a new run-bindings-tests IDL is added.
        (GenerateHeaderCustomCall):
        * bindings/scripts/test/V8/V8TestObj.h: Updated a run-bindings-tests result.

2011-11-25  Kentaro Hara  <haraken@chromium.org>

        Implement the WebGLContextEvent constructor
        https://bugs.webkit.org/show_bug.cgi?id=72856

        Reviewed by Adam Barth.

        This patch makes WebGLContextEvent constructable.
        The spec: http://www.khronos.org/registry/webgl/specs/latest/#5.14

        Test: fast/events/constructors/webgl-context-event-constructor.html

        * html/canvas/WebGLContextEvent.cpp: Added an implementation of the WebGLContextEvent constructor.
        (WebCore::WebGLContextEventInit::WebGLContextEventInit):
        (WebCore::WebGLContextEvent::WebGLContextEvent):
        * html/canvas/WebGLContextEvent.h: Added a definition of WebGLContextEventInit.
        (WebCore::WebGLContextEvent::create):
        * html/canvas/WebGLContextEvent.idl: Added [ConstructorTemplate=Event] IDL.

2011-11-25  Jeff Timanus  <twiz@chromium.org>

        [Chromium] The DrawingBuffer::bind method was incorrectly resetting the
        GL viewport parameters. This was unnecessary, and resulted in the corruption
        of the WebGL context's state.
        https://bugs.webkit.org/show_bug.cgi?id=73091

        Reviewed by Stephen White.

        Tests: fast/canvas/webgl/webgl-viewport-parameters-preserved.html

        * platform/graphics/gpu/DrawingBuffer.cpp:
        (WebCore::DrawingBuffer::bind):

2011-11-25  Ryosuke Niwa  <rniwa@webkit.org>

        Crash in BidiRunList<Run>::replaceRunWithRuns with an empty bdi element
        https://bugs.webkit.org/show_bug.cgi?id=73116

        Reviewed by Eric Seidel.

        The assertion failure was caused because isolatedResolver is initialized with
        null start object due to the isolated run being empty.

        Fixed the failure by skipping empty isolated runs.

        Test: fast/text/empty-bdi-crash.html

        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::constructBidiRuns):

2011-11-25  Antti Koivisto  <antti@apple.com>

        StyleGeneratedImage should ref CSSImageGeneratorValue
        https://bugs.webkit.org/show_bug.cgi?id=73074

        Reviewed by Andreas Kling and Nikolas Zimmermann.
        
        RenderStyle owns a bunch of StyleImage objects. However StyleGeneratedImage does not ref the
        CSSImageGeneratorValue it holds so we currently rely on the stylesheet to keep the CSSImageGeneratorValues
        alive as long as RenderStyle stays alive. While this works (RenderStyles are thrown away if stylesheets
        change) it is not particularly robust or nice.

        - Use RefPtr<CSSImageGeneratorValue> in StyleGeneratedImage
        - Remove the RefPtr<StyleGeneratedImage> from CSSImageGeneratorValue.
          There is no good reason to cache StyleGeneratedImage as it is a small and
          uncommon object. With that the whole back-reference becomes unnecessary.
        - Switch more places to use (Pass)RefPtr<StyleImage> for consistency.

        * css/CSSImageGeneratorValue.cpp:
        (WebCore::CSSImageGeneratorValue::CSSImageGeneratorValue):
        * css/CSSImageGeneratorValue.h:
        * css/CSSStyleApplyProperty.cpp:
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):
        (WebCore::CSSStyleSelector::styleImage):
        (WebCore::CSSStyleSelector::cachedOrPendingFromValue):
        (WebCore::CSSStyleSelector::generatedOrPendingFromValue):
        (WebCore::CSSStyleSelector::loadPendingImage):
        (WebCore::CSSStyleSelector::loadPendingImages):
        * css/CSSStyleSelector.h:
        * rendering/style/FillLayer.h:
        (WebCore::FillLayer::setImage):
        * rendering/style/NinePieceImage.h:
        (WebCore::NinePieceImage::NinePieceImage):
        * rendering/style/StyleGeneratedImage.cpp:
        (WebCore::StyleGeneratedImage::StyleGeneratedImage):
        (WebCore::StyleGeneratedImage::cssValue):
        (WebCore::StyleGeneratedImage::imageSize):
        (WebCore::StyleGeneratedImage::addClient):
        (WebCore::StyleGeneratedImage::removeClient):
        (WebCore::StyleGeneratedImage::image):
        * rendering/style/StyleGeneratedImage.h:
        (WebCore::StyleGeneratedImage::create):
        (WebCore::StyleGeneratedImage::data):

2011-11-25  Andreas Kling  <kling@webkit.org>

        Remove redundant setStrictParsing(false) calls on CSSMappedAttributeDeclarations.
        <http://webkit.org/b/73134>

        Reviewed by Antti Koivisto.

        CSSMappedAttributeDeclarations always use non-strict parsing since they use
        the argument-less CSSMutableStyleDeclaration constructor.

        * dom/StyledElement.cpp:
        (WebCore::StyledElement::createMappedDecl):
        * html/HTMLTableElement.cpp:
        (WebCore::HTMLTableElement::additionalAttributeStyleDecls):
        (WebCore::HTMLTableElement::addSharedCellBordersDecl):
        (WebCore::HTMLTableElement::addSharedCellPaddingDecl):
        (WebCore::HTMLTableElement::addSharedGroupDecls):

2011-11-25  Andreas Kling  <kling@webkit.org>

        Factor element pointer out of CSSMutableStyleDeclaration.
        <http://webkit.org/b/73121>

        Reviewed by Antti Koivisto.

        Move the StyledElement pointer out of CSSMutableStyleDeclaration and into a subclass
        for the cases where it's needed. This reduces the size of vanilla style declarations
        by one CPU word (4 or 8 bytes, depending on architecture.)

        * css/CSSMutableStyleDeclaration.h:
        (WebCore::CSSElementStyleDeclaration::element):
        (WebCore::CSSElementStyleDeclaration::setElement):
        (WebCore::CSSElementStyleDeclaration::CSSElementStyleDeclaration):
        (WebCore::CSSElementStyleDeclaration::~CSSElementStyleDeclaration):

            Added CSSElementStyleDeclaration, a common parent class for inline styles
            and mapped attributes. It extends CSSMutableStyleDeclaration by adding a backpointer
            to the StyledElement that owns it.

        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSInlineStyleDeclaration.h: Added.
        (WebCore::CSSInlineStyleDeclaration::~CSSInlineStyleDeclaration):
        (WebCore::CSSInlineStyleDeclaration::create):
        (WebCore::CSSInlineStyleDeclaration::CSSInlineStyleDeclaration):

            Added CSSInlineStyleDeclaration.

        * bindings/js/JSDOMBinding.h:
        (WebCore::root):
        * css/CSSMutableStyleDeclaration.cpp:
        (WebCore::CSSMutableStyleDeclaration::setNeedsStyleRecalc):
        * css/CSSStyleRule.cpp:
        (WebCore::CSSStyleRule::setSelectorText):

            Only follow the associated element on CSSElementStyleDeclarations.

        * css/CSSMutableStyleDeclaration.cpp:
        (WebCore::CSSMutableStyleDeclaration::CSSMutableStyleDeclaration):
        (WebCore::CSSMutableStyleDeclaration::operator=):

            Remove comment about m_element since the field was moved to a subclass.

        * css/CSSStyleDeclaration.cpp:
        (WebCore::CSSStyleDeclaration::CSSStyleDeclaration):
        * css/CSSStyleDeclaration.h:
        (WebCore::CSSStyleDeclaration::isElementStyleDeclaration):
        (WebCore::CSSStyleDeclaration::isInlineStyleDeclaration):

            We no longer need to track whether a style declaration is mutable or not,
            so the constructors are slightly simplified.
            Added two bits (isElementStyleDeclaration and isInlineStyleDeclaration) for
            runtime type checking. These are protected and set by the CSSElementStyleDeclaration
            constructor.

        * dom/CSSMappedAttributeDeclaration.h:
        (WebCore::CSSMappedAttributeDeclaration::create):
        (WebCore::CSSMappedAttributeDeclaration::CSSMappedAttributeDeclaration):

            Remove pointless CSSRule* argument to constructor since we always passed 0.

        * dom/StyledElement.h:
        (WebCore::StyledElement::inlineStyleDecl):
        * dom/StyledElement.cpp:
        (WebCore::StyledElement::createInlineStyleDecl):
        (WebCore::StyledElement::getInlineStyleDecl):
        (WebCore::StyledElement::addSubresourceAttributeURLs):

            Make the inline style on StyledElement a CSSInlineStyleDeclaration.

        * inspector/InspectorCSSAgent.cpp:
        (WebCore::InspectorCSSAgent::inlineStyleElement):

            Slightly simplified by having CSSInlineStyleDeclaration.

2011-11-25  Pavel Feldman  <pfeldman@google.com>

        Web Inspector: unflake timeline-network tests
        https://bugs.webkit.org/show_bug.cgi?id=73123

        We should capture stack only when it makes sense. Otherwise loading from cache
        results in different data sets (stacks) than regular load.

        Reviewed by Yury Semikhatsky.

        * inspector/InspectorTimelineAgent.cpp:
        (WebCore::InspectorTimelineAgent::willCallFunction):
        (WebCore::InspectorTimelineAgent::willDispatchEvent):
        (WebCore::InspectorTimelineAgent::willLayout):
        (WebCore::InspectorTimelineAgent::willRecalculateStyle):
        (WebCore::InspectorTimelineAgent::willPaint):
        (WebCore::InspectorTimelineAgent::willWriteHTML):
        (WebCore::InspectorTimelineAgent::didInstallTimer):
        (WebCore::InspectorTimelineAgent::didRemoveTimer):
        (WebCore::InspectorTimelineAgent::willFireTimer):
        (WebCore::InspectorTimelineAgent::willChangeXHRReadyState):
        (WebCore::InspectorTimelineAgent::willLoadXHR):
        (WebCore::InspectorTimelineAgent::willEvaluateScript):
        (WebCore::InspectorTimelineAgent::didScheduleResourceRequest):
        (WebCore::InspectorTimelineAgent::willReceiveResourceData):
        (WebCore::InspectorTimelineAgent::willReceiveResourceResponse):
        (WebCore::InspectorTimelineAgent::didFinishLoadingResource):
        (WebCore::InspectorTimelineAgent::didTimeStamp):
        (WebCore::InspectorTimelineAgent::didMarkDOMContentEvent):
        (WebCore::InspectorTimelineAgent::didMarkLoadEvent):
        (WebCore::InspectorTimelineAgent::didRegisterAnimationFrameCallback):
        (WebCore::InspectorTimelineAgent::didCancelAnimationFrameCallback):
        (WebCore::InspectorTimelineAgent::willFireAnimationFrameEvent):
        (WebCore::InspectorTimelineAgent::appendRecord):
        (WebCore::InspectorTimelineAgent::pushCurrentRecord):
        * inspector/InspectorTimelineAgent.h:
        * inspector/TimelineRecordFactory.cpp:
        (WebCore::TimelineRecordFactory::createGenericRecord):

2011-11-25  Yury Semikhatsky  <yurys@chromium.org>

        [Chromium] Web Inspector: get rid of WebDevToolsFrontendClient::sendFrontendLoaded method
        https://bugs.webkit.org/show_bug.cgi?id=73126

        Notify embedder that front-end is loadded only when all dispatchers, panels and models
        have been created so that it could dispatch messages synchronously in the loaded handler.

        Reviewed by Pavel Feldman.

        * inspector/front-end/inspector.js:

2011-11-25  Yury Semikhatsky  <yurys@chromium.org>

        Web Inspector: don't send Console.messagesCleared on front-end connection if console agent is not enabled
        https://bugs.webkit.org/show_bug.cgi?id=73122

        Console agent should stay silent if it is not enabled.

        Reviewed by Pavel Feldman.

        * inspector/InspectorConsoleAgent.cpp:
        (WebCore::InspectorConsoleAgent::clearMessages):
        (WebCore::InspectorConsoleAgent::addConsoleMessage):

2011-11-25  Wei Charles  <charles.wei@torchmobile.com.cn>

        Upstream the QNX/RIM specific HistoryItemViewState
        https://bugs.webkit.org/show_bug.cgi?id=73114

        Reviewed by Daniel Bates.

        This patch is to upstream RIM/QNX specific HistoryItemViewState extension
        to store some extra view state.

        No new tests. It's not built yet.

        * history/blackberry: Added.
        * history/blackberry/HistoryItemViewState.h: Added.
        (WebCore::HistoryItemViewState::HistoryItemViewState):

2011-11-25  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Split scripts panel top status bar into debug toolbar and editor toolbar.
        https://bugs.webkit.org/show_bug.cgi?id=73087

        Reviewed by Pavel Feldman.

        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype._reset):
        (WebInspector.ScriptsPanel.prototype._createEditorToolbar):
        (WebInspector.ScriptsPanel.prototype._createDebugToolbar):
        (WebInspector.ScriptsPanel.prototype._createButtonAndRegisterShortcuts):
        * inspector/front-end/scriptsPanel.css:
        (#scripts-debug-toolbar):
        (#scripts-editor-toolbar):
        (#scripts-debug-sidebar-resizer-widget):
        (.script-view):

2011-11-25  Leo Yang  <leo.yang@torchmobile.com.cn>

        Upstream BlackBerry porting of platform/text
        https://bugs.webkit.org/show_bug.cgi?id=73117

        Reviewed by Daniel Bates.

        Initial upstream, can't be built yet, no test cases.

        * platform/text/blackberry/StringBlackBerry.cpp: Added.
        (WTF::String::String):
        (WTF::String::operator WebString):
        * platform/text/blackberry/TextBreakIteratorInternalICUBlackBerry.cpp: Added.
        (WebCore::currentSearchLocaleID):
        (WebCore::currentTextBreakLocaleID):

2011-11-25  Kentaro Hara  <haraken@chromium.org>

        Remove WebCore.gyp/scripts/rule_binding.py
        https://bugs.webkit.org/show_bug.cgi?id=73109

        Reviewed by Adam Barth.

        rule_binding.py is used by WebCore.gyp only. rule_binding.py is just a wrapper
        of generate-bindings.pl and thus we can remove it.

        No new tests. No change in behavior.

        * WebCore.gyp/WebCore.gyp: Replaces rule_binding.py with generate-bindings.pl.
        * WebCore.gyp/scripts/rule_binding.py: Removed.
        * bindings/scripts/preprocessor.pm: When '"ENABLE_SOMETHING=1" "ENABLE_OTHERS=0"' is passed as a define macro, the string is passed to our perl scripts without the double-quotations (") omitted. We need to omit the double quatations here.
        (applyPreprocessor):

2011-11-24  Yury Semikhatsky  <yurys@chromium.org>

        [Chromium] Web Inspector: remove legacy debugger support
        https://bugs.webkit.org/show_bug.cgi?id=73081

        Removed classed providing access to V8 debugging protocol. Clients should
        use Web Inspector protocol instead.

        Reviewed by Pavel Feldman.

        * bindings/v8/PageScriptDebugServer.cpp:
        (WebCore::PageScriptDebugServer::PageScriptDebugServer):
        (WebCore::PageScriptDebugServer::addListener):
        * bindings/v8/PageScriptDebugServer.h:

2011-11-24  Pavel Feldman  <pfeldman@google.com>

        Web Inspector: refactor resource tree model and introduce explicit class for ResourceTreeFrame.
        https://bugs.webkit.org/show_bug.cgi?id=73078

        Otherwise we are managing frames and their resources using too many maps.

        Reviewed by Yury Semikhatsky.

        * inspector/Inspector.json:
        * inspector/InspectorAgent.cpp:
        (WebCore::InspectorAgent::restore):
        * inspector/InspectorResourceAgent.cpp:
        (WebCore::InspectorResourceAgent::didReceiveResponse):
        * inspector/front-end/ApplicationCacheModel.js:
        (WebInspector.ApplicationCacheModel.prototype._frameNavigated):
        (WebInspector.ApplicationCacheModel.prototype._frameDetached):
        * inspector/front-end/JavaScriptContextManager.js:
        (WebInspector.JavaScriptContextManager.prototype._frameAdded):
        (WebInspector.JavaScriptContextManager.prototype._frameNavigated):
        (WebInspector.FrameEvaluationContext.prototype.get displayName):
        * inspector/front-end/NetworkManager.js:
        (WebInspector.NetworkDispatcher.prototype.requestWillBeSent):
        (WebInspector.NetworkDispatcher.prototype.responseReceived):
        (WebInspector.NetworkDispatcher.prototype.loadingFinished):
        * inspector/front-end/NetworkPanel.js:
        (WebInspector.NetworkLogView.prototype._mainFrameNavigated):
        * inspector/front-end/ResourceTreeModel.js:
        (WebInspector.ResourceTreeModel):
        (WebInspector.ResourceTreeModel.prototype._fetchResourceTree):
        (WebInspector.ResourceTreeModel.prototype._processCachedResources):
        (WebInspector.ResourceTreeModel.prototype._addFrame):
        (WebInspector.ResourceTreeModel.prototype._frameNavigated):
        (WebInspector.ResourceTreeModel.prototype._frontendReused):
        (WebInspector.ResourceTreeModel.prototype._frameDetached):
        (WebInspector.ResourceTreeModel.prototype._onResourceUpdated):
        (WebInspector.ResourceTreeModel.prototype._onResourceUpdateDropped):
        (WebInspector.ResourceTreeModel.prototype.frameForId):
        (WebInspector.ResourceTreeModel.prototype.forAllResources):
        (WebInspector.ResourceTreeModel.prototype.resourceForURL):
        (WebInspector.ResourceTreeModel.prototype._addFramesRecursively):
        (WebInspector.ResourceTreeModel.prototype._createResourceFromFramePayload):
        (WebInspector.ResourceTreeModel.prototype._createResource):
        (WebInspector.ResourceTreeFrame):
        (WebInspector.ResourceTreeFrame.prototype.get id):
        (WebInspector.ResourceTreeFrame.prototype.get name):
        (WebInspector.ResourceTreeFrame.prototype.get url):
        (WebInspector.ResourceTreeFrame.prototype.get loaderId):
        (WebInspector.ResourceTreeFrame.prototype.get parentFrame):
        (WebInspector.ResourceTreeFrame.prototype.get childFrames):
        (WebInspector.ResourceTreeFrame.prototype.isMainFrame):
        (WebInspector.ResourceTreeFrame.prototype.navigate):
        (WebInspector.ResourceTreeFrame.prototype.get mainResource):
        (WebInspector.ResourceTreeFrame.prototype.addChildFrame):
        (WebInspector.ResourceTreeFrame.prototype.removeChildFrame):
        (WebInspector.ResourceTreeFrame.prototype._addResource):
        (WebInspector.ResourceTreeFrame.prototype.resources):
        (WebInspector.ResourceTreeFrame.prototype.resourceForURL.filter):
        (WebInspector.ResourceTreeFrame.prototype.resourceForURL):
        (WebInspector.ResourceTreeFrame.prototype._callForFrameResources):
        (WebInspector.PageDispatcher.prototype.frameNavigated):
        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.ResourcesPanel):
        (WebInspector.ResourcesPanel.prototype.wasShown):
        (WebInspector.ResourcesPanel.prototype._initialize):
        (WebInspector.ResourcesPanel.prototype._resetWithFrames):
        (WebInspector.ResourcesPanel.prototype._reset):
        (WebInspector.ResourcesPanel.prototype._populateResourceTree.populateFrame):
        (WebInspector.ResourcesPanel.prototype._populateResourceTree):
        (WebInspector.ResourcesPanel.prototype._frameAdded):
        (WebInspector.ResourcesPanel.prototype._frameDetached):
        (WebInspector.ResourcesPanel.prototype._frameNavigated):
        (WebInspector.ResourcesPanel.prototype._cachedResourcesLoaded):
        * inspector/front-end/ScriptFormatter.js:
        (WebInspector.ScriptFormatter.prototype.formatContent):
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::requestResource):

2011-11-24  Kentaro Hara  <haraken@chromium.org>

        Initialize global variables during IDLParser object creation
        https://bugs.webkit.org/show_bug.cgi?id=73108

        Reviewed by Adam Barth.

        Currently, IDLParser.pm initializes global variables in a global scope,
        which means that the global variables are initialized just once at the beginning.
        On the other hand, implementing [Supplemental] IDL (bug 72138) requires a change
        on generate-bindings.pl that initializes the global variables whenever a new IDLParser
        object is created. Thus, this patch initializes the global variables during
        the IDLParser object creation.

        No new tests. No change in behavior.

        * bindings/scripts/IDLParser.pm:
        (InitializeGlobalData):
        (new):

2011-11-24  Patrick Gansterer  <paroga@webkit.org>

        [CMake] Build fix for NOT ENABLE_WEB_SOCKETS.

        * CMakeLists.txt: Move CloseEvent.idl to the unconditional files.

2011-11-24  Patrick Gansterer  <paroga@webkit.org>

        Build fix for C++ bindings.

        * bindings/cpp/WebDOMEventTarget.cpp: Added #if ENABLE() guards.

2011-11-24  Arko Saha  <arko@motorola.com>

        Microdata: Support for properties attribute.
        https://bugs.webkit.org/show_bug.cgi?id=71050

        Reviewed by Adam Barth.

        The properties attribute returns an HTMLPropertiesCollection object with all the element's
        properties. Otherwise, an empty HTMLPropertiesCollection object.

        Tests: fast/dom/MicroData/itemref-refers-first-element-with-given-id.html
               fast/dom/MicroData/names-property-must-be-correct.html
               fast/dom/MicroData/names-property-test.html
               fast/dom/MicroData/properties-collection-add-remove-itemref.html
               fast/dom/MicroData/properties-collection-add-remove-property.html
               fast/dom/MicroData/properties-collection-behavior-add-remove-itemscope-attr.html
               fast/dom/MicroData/properties-collection-must-be-correct.html
               fast/dom/MicroData/properties-collection-must-ignore-properties-of-nested-items.html
               fast/dom/MicroData/properties-collection-must-see-the-properties-added-in-itemref.html
               fast/dom/MicroData/properties-collection-test.html

        * CMakeLists.txt:
        * DerivedSources.cpp:
        * DerivedSources.make:
        * DerivedSources.pri:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/gobject/GNUmakefile.am:
        * bindings/js/JSHTMLCollectionCustom.cpp:
        (WebCore::toJS):
        * dom/MicroDataItemList.cpp:
        * dom/Node.cpp:
        (WebCore::Node::itemProp):
        (WebCore::Node::setItemProp):
        (WebCore::Node::itemRef):
        (WebCore::Node::setItemRef):
        (WebCore::Node::itemType):
        (WebCore::Node::setItemType):
        (WebCore::Node::properties):
        * dom/Node.h:
        * dom/NodeRareData.h:
        (WebCore::NodeRareData::itemProp):
        (WebCore::NodeRareData::setItemProp):
        (WebCore::NodeRareData::itemRef):
        (WebCore::NodeRareData::setItemRef):
        (WebCore::NodeRareData::itemType):
        (WebCore::NodeRareData::setItemType):
        (WebCore::NodeRareData::properties):
        * html/CollectionType.h:
        * html/HTMLCollection.cpp:
        (WebCore::HTMLCollection::itemAfter):
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::setItemValueText):
        * html/HTMLElement.h:
        * html/HTMLElement.idl:
        * html/HTMLPropertiesCollection.cpp: Added.
        (WebCore::compareTreeOrder):
        (WebCore::HTMLPropertiesCollection::create):
        (WebCore::HTMLPropertiesCollection::HTMLPropertiesCollection):
        (WebCore::HTMLPropertiesCollection::~HTMLPropertiesCollection):
        (WebCore::HTMLPropertiesCollection::findPropetiesOfAnItem): Finds the properties of an item.
        (WebCore::HTMLPropertiesCollection::length): Returns the number of elements in the properties collection.
        (WebCore::HTMLPropertiesCollection::item): Returns the element with index 'index' from the collection. The items are sorted in tree order.
        (WebCore::HTMLPropertiesCollection::names): Returns a DOMStringList with the property names of the elements in the collection with the order preserved but with duplicates removed.
        * html/HTMLPropertiesCollection.h: Added.
        * html/HTMLPropertiesCollection.idl: Added.
        * page/DOMWindow.idl:

2011-11-24  Joshua Bell  <jsbell@chromium.org>

        IndexedDB: Indexes should be secondarily sorted on primary key
        https://bugs.webkit.org/show_bug.cgi?id=72567

        Reviewed by Tony Chang.

        Implemented by adding the primary key (i.e. unique key in the
        object store) to the IndexDataKey (i.e. the composite key used
        in the index. Previously, non-unique entries in the index were
        stored with a unique (and hidden) sequenceNumber, so ordering was
        not predictable by scripts (or per spec). The sequenceNumber
        is now deprecated but still present in the LevelDB backing store
        to avoid having to do a data migration.

        Test: storage/indexeddb/cursor-primary-key-order.html

        * storage/IDBLevelDBBackingStore.cpp:
        (WebCore::IDBLevelDBBackingStore::putIndexDataForRecord):
        * storage/IDBLevelDBCoding.cpp:
        (WebCore::IDBLevelDBCoding::compare):
        (WebCore::IDBLevelDBCoding::IndexDataKey::decode):
        (WebCore::IDBLevelDBCoding::IndexDataKey::encode):
        (WebCore::IDBLevelDBCoding::IndexDataKey::compare):
        (WebCore::IDBLevelDBCoding::IndexDataKey::primaryKey):
        * storage/IDBLevelDBCoding.h:

2011-11-24  Pavel Feldman  <pfeldman@google.com>

        Web Inspector: WebInspector.inspectedPageDomain is not calculated for about:blank
        https://bugs.webkit.org/show_bug.cgi?id=73082

        Reviewed by Timothy Hatcher.

        * inspector/front-end/ResourceTreeModel.js:
        (WebInspector.ResourceTreeModel.prototype._processCachedResources):
        (WebInspector.ResourceTreeModel.prototype._frameNavigated):
        (WebInspector.ResourceTreeModel.prototype._addFramesRecursively):
        * inspector/front-end/inspector.js:
        (WebInspector.networkResourceById):
        (WebInspector.get inspectedPageDomain):

2011-11-24  Andrey Kosyakov  <caseq@chromium.org>

        Web Inspector: provide context menu items to open resources using extensions
        https://bugs.webkit.org/show_bug.cgi?id=73076

        Reviewed by Yury Semikhatsky.

        * English.lproj/localizedStrings.js:
        * inspector/front-end/ExtensionServer.js:
        (WebInspector.ExtensionServer.prototype._onSetOpenResourceHandler):
        (WebInspector.ExtensionServer.prototype._handleOpenURL):
        * inspector/front-end/HandlerRegistry.js:
        (get WebInspector.HandlerRegistry.prototype.set dispatch):
        (get WebInspector.HandlerRegistry.prototype.dispatchToHandler):
        * inspector/front-end/JavaScriptSourceFrame.js:
        (WebInspector.JavaScriptSourceFrame.prototype.populateTextAreaContextMenu):
        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.FrameResourceTreeElement.prototype._handleContextMenuEvent):
        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame.prototype.populateTextAreaContextMenu):
        * inspector/front-end/externs.js:
        (WebInspector.populateResourceContextMenu):
        * inspector/front-end/inspector.js:
        (WebInspector.populateResourceContextMenu):
        (WebInspector._showAnchorLocation):

2011-10-27  Philippe Normand  <pnormand@igalia.com>

        [GStreamer] WebAudio AudioDestination
        https://bugs.webkit.org/show_bug.cgi?id=69835

        Reviewed by Martin Robinson.

        New GStreamer source element pulling data from the AudioBus and
        outputing audio interleaved GstBuffers suitable for playback.

        * GNUmakefile.list.am: Added the new GStreamer WebAudio element
        source files to the build.
        * platform/audio/gstreamer/AudioDestinationGStreamer.cpp:
        (WebCore::onGStreamerWavparsePadAddedCallback): Function called
        when the playback pipeline successfully parsed the audio source
        into a WAV stream.
        (WebCore::AudioDestinationGStreamer::AudioDestinationGStreamer):
        Configure the initial playback pipeline up to the WAV parser. The
        audio sink is added only after the WAV parser was configured.
        (WebCore::AudioDestinationGStreamer::~AudioDestinationGStreamer):
        Reset the playback pipeline and delete it.
        (WebCore::AudioDestinationGStreamer::finishBuildingPipelineAfterWavParserPadReady):
        Method to add the audio sink to the pipeline and link it to the
        WAV parser.
        (WebCore::AudioDestinationGStreamer::start): Set pipeline to
        PLAYING, at the first run it will trigger the WAV parser and hence
        the audio-sink plugging.
        (WebCore::AudioDestinationGStreamer::stop): Pause the pipeline.
        * platform/audio/gstreamer/AudioDestinationGStreamer.h:
        * platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.cpp: Added.
        (getGStreamerMonoAudioCaps): Utility function to generate
        GStreamer caps representing a single audio channel for a given
        sample rate.
        (webKitWebAudioGStreamerChannelPosition): Utility function to
        convert AudioBus channel representations to GStreamer positional
        audio channel values.
        (webkit_web_audio_src_class_init): GObject configuration of the
        GStreamer source element.
        (webkit_web_audio_src_init): Initialization of the private data of
        the element.
        (webKitWebAudioSourceConstructed): Configure the GstBin elements
        depending on the AudioBus layout.
        (webKitWebAudioSourceFinalize): Clean up the GstBin and free private
        data of the element.
        (webKitWebAudioSourceSetProperty): GObject property setter.
        (webKitWebAudioSourceGetProperty): GObject property getter.
        (webKitWebAudioSourceLoop): GstTask used to pull data from the
        AudioBus and push it as GstBuffers to the src pad of the element.
        (webKitWebAudioSourceChangeState): Start or stop the above GstTask
        depending on the asked state transition.
        * platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.h: Added.
        * platform/graphics/gstreamer/GRefPtrGStreamer.cpp: GstTask support in GRefPtr.
        (WTF::adoptGRef):
        (WTF::GstTask):
        * platform/graphics/gstreamer/GRefPtrGStreamer.h:

2011-11-24  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Get rid of the buildDirForSource() function in the build system

        At some point the plan was to allow for running qmake on sub-trees
        of the sources, into the top level build directory, but this is no
        longer possible, so no reason to keep the convenience function around.

        Reviewed by Simon Hausmann.

        * DerivedSources.pri:

2011-11-24  Patrick Gansterer  <paroga@webkit.org>

        [CMake] Add missing source files
        https://bugs.webkit.org/show_bug.cgi?id=73052

        Reviewed by Andreas Kling.

        * CMakeLists.txt:

2011-11-24  Philippe Normand  <pnormand@igalia.com>

        Fix ASSERTs added in r101082.

        Rubber-Stamped by Martin Robinson.

        * platform/graphics/gstreamer/GRefPtrGStreamer.cpp:
        (WTF::adoptGRef): Check for valid pointer before
        GST_OBJECT_IS_FLOATING().

2011-11-23  Alexander Pavlov  <apavlov@chromium.org>

        Web Inspector: shift focus to the source view when a resource is selected in the Scripts panel
        https://bugs.webkit.org/show_bug.cgi?id=69738

        Reviewed by Timothy Hatcher.

        The source viewer is focused whenever a file name option is clicked, and is NOT focused when the script list
        is traversed with the Up/Down keys.

        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype._filesSelectChanged):
        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame.prototype.focus):
        * inspector/front-end/TextViewer.js:
        (WebInspector.TextViewer.prototype.focus):

2011-11-23  Pavel Podivilov  <podivilov@chromium.org>

        Web Inspector: add integration test for compiler source maps.
        https://bugs.webkit.org/show_bug.cgi?id=72730

        Reviewed by Pavel Feldman.

        Test: http/tests/inspector/compiler-source-mapping-debug.html

        * inspector/front-end/DebuggerPresentationModel.js:
        (WebInspector.DebuggerPresentationModel.prototype._bindScriptToRawSourceCode):
        (WebInspector.DebuggerPresentationModel.prototype.setCompilerSourceMapping):
        (WebInspector.DebuggerPresentationModel.prototype.evaluateInSelectedCallFrame):
        (WebInspector.DebuggerPresentationModel.prototype.get executionLineLocation):
        (WebInspector.DebuggerPresentationModel.DefaultLinkifierFormatter.prototype.formatRawSourceCodeAnchor):
        (WebInspector.DebuggerPresentationModel.Linkifier.prototype.linkifyLocation):
        (WebInspector.DebuggerPresentationModel.Linkifier.prototype._updateAnchor):

2011-11-23  Pavel Feldman  <pfeldman@google.com>

        Web Inspector: get rid of the WebInspector.mainResource, use WebInspector.inspectedPageURL instead.
        https://bugs.webkit.org/show_bug.cgi?id=73024

        We use it for the URL mostly, no need to create artificial resource for that upon
        attaching to the existing page.

        Reviewed by Yury Semikhatsky.

        * inspector/front-end/AuditsPanel.js:
        * inspector/front-end/HAREntry.js:
        (WebInspector.HARLog.prototype._buildPages):
        (WebInspector.HARLog.prototype._pageEventTime):
        * inspector/front-end/NetworkPanel.js:
        (WebInspector.NetworkLogView.prototype._updateSummaryBar):
        (WebInspector.NetworkLogView.prototype._exportAll):
        * inspector/front-end/Resource.js:
        (WebInspector.Resource.prototype.set url):
        (WebInspector.Resource.prototype.get displayName):
        (WebInspector.Resource.prototype.get displayDomain):
        * inspector/front-end/ResourceTreeModel.js:
        (WebInspector.ResourceTreeModel.prototype._processCachedResources):
        (WebInspector.ResourceTreeModel.prototype._dispatchInspectedURLChanged):
        (WebInspector.ResourceTreeModel.prototype._frameNavigated):
        (WebInspector.ResourceTreeModel.prototype._addFramesRecursively):
        * inspector/front-end/ResourceUtils.js:
        (WebInspector.displayNameForURL):
        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.ResourcesPanel.prototype._initDefaultSelection):
        * inspector/front-end/TimelinePanel.js:
        (WebInspector.TimelinePanel.prototype._addRecordToTimeline):
        * inspector/front-end/utilities.js:
        (String.prototype.asParsedURL):

2011-11-23  Yury Semikhatsky  <yurys@chromium.org>

        Web Inspector: exceptions in shared workers should be logged to web inspector console
        https://bugs.webkit.org/show_bug.cgi?id=73022

        According to section "4.7 Runtime script errors" of Web Workers spec "For shared
        workers, if the error is still not handled afterwards, or if the error occurred
        while handling a previous script error, the error may be reported to the user."

        This change adds uncaugh exceptions to the shared worker web inspector console.

        Reviewed by Pavel Feldman.

        * inspector/InspectorConsoleAgent.cpp:
        (WebCore::InspectorConsoleAgent::restore):
        * inspector/InspectorConsoleInstrumentation.h:
        (WebCore::InspectorInstrumentation::addMessageToConsole):
        * inspector/InspectorDebuggerAgent.cpp:
        (WebCore::InspectorDebuggerAgent::restore):
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::instrumentingAgentsForWorkerContext):
        * inspector/InspectorInstrumentation.h:
        * inspector/WorkerInspectorController.cpp:
        (WebCore::WorkerInspectorController::connectFrontend):
        (WebCore::WorkerInspectorController::disconnectFrontend):
        (WebCore::WorkerInspectorController::restoreInspectorStateFromCookie):
        * inspector/WorkerInspectorController.h:
        * inspector/front-end/WorkerManager.js:
        (WebInspector.WorkerManager.showWorkerTerminatedScreen):
        * inspector/front-end/inspector.js:
        * workers/SharedWorkerContext.cpp:
        (WebCore::SharedWorkerContext::logExceptionToConsole):
        * workers/SharedWorkerContext.h:
        * workers/WorkerContext.cpp:
        (WebCore::WorkerContext::addMessage): console messages are now added to
        the worker console agent.
        (WebCore::WorkerContext::addMessageToWorkerConsole):
        * workers/WorkerContext.h:

2011-11-23  Jeff Timanus  <twiz@chromium.org>

        [Chromium]  Prevent DrawingBuffer instances from corrupting the active
        texture state of the WebGL contexts. The DrawingBuffer now tracks the
        state of texture unit 0, and the active texture unit, so that state can
        be restored.
        https://bugs.webkit.org/show_bug.cgi?id=73033

        Reviewed by Kenneth Russell.

        Test: fast/canvas/webgl/webgl-texture-binding-preserved.html

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::activeTexture):
        (WebCore::WebGLRenderingContext::bindTexture):
        * platform/graphics/chromium/DrawingBufferChromium.cpp:
        (WebCore::DrawingBuffer::DrawingBuffer):
        (WebCore::DrawingBuffer::publishToPlatformLayer):
        * platform/graphics/gpu/DrawingBuffer.h:
        (WebCore::DrawingBuffer::setTexture2DBinding):
        (WebCore::DrawingBuffer::setActiveTextureUnit):
        * 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-11-23  Luke Macpherson   <macpherson@chromium.org>

        CSSValue: reorder ClassType enum to allow faster comparisons, add COMPILE_ASSERT on class size.
        https://bugs.webkit.org/show_bug.cgi?id=72924

        Reviewed by Andreas Kling.

        Note that the change from unsigned to unsigned char is to improve bit packing when using MSVC.

        Covered by existing CSS tests.

        * css/CSSValue.h:
        (WebCore::CSSValue::isPrimitiveValue):
        (WebCore::CSSValue::isValueList):
        (WebCore::CSSValue::isImageGeneratorValue):
        (WebCore::CSSValue::isTimingFunctionValue):
        (WebCore::CSSValue::CSSValue):

2011-11-23  Dmitry Lomov  <dslomov@google.com>

        https://bugs.webkit.org/show_bug.cgi?id=73054
        [V8][Chromium] Add list of transferred ArrayBuffers to SerializedScriptValue::create.

        Reviewed by David Levin.

        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateParametersCheck):
        * bindings/scripts/test/V8/V8TestObj.cpp:
        (WebCore::TestObjInternal::serializedValueCallback):
       * bindings/v8/OptionsObject.cpp:
        * bindings/v8/SerializedScriptValue.cpp:
        (WebCore::SerializedScriptValue::create):
        * bindings/v8/SerializedScriptValue.h:
        * bindings/v8/V8Utilities.cpp:
        (WebCore::extractTransferables):
        (WebCore::getMessagePortArray):
        * bindings/v8/V8Utilities.h:
        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        (WebCore::handlePostMessageCallback):
        * bindings/v8/custom/V8DedicatedWorkerContextCustom.cpp:
        (WebCore::handlePostMessageCallback):
        * bindings/v8/custom/V8HistoryCustom.cpp:
        (WebCore::V8History::pushStateCallback):
        (WebCore::V8History::replaceStateCallback):
        * bindings/v8/custom/V8MessageEventCustom.cpp:
        * bindings/v8/custom/V8MessagePortCustom.cpp:
        (WebCore::handlePostMessageCallback):
        * bindings/v8/custom/V8MessagePortCustom.h: Removed.
        * bindings/v8/custom/V8WorkerCustom.cpp:
        (WebCore::handlePostMessageCallback):

2011-11-23  Rafael Weinstein  <rafaelw@chromium.org>

        Cleanup #if usage in V8GCController
        https://bugs.webkit.org/show_bug.cgi?id=73060

        Reviewed by Ojan Vafai.

        No tests needed. Just code cleanup

        * bindings/v8/V8GCController.cpp:
        (WebCore::V8GCController::checkMemoryUsage):

2011-11-23  Rafael Weinstein  <rafaelw@chromium.org>

        Change CSSMutableStyleDeclaration::m_node to m_element (along with getter/setter)
        https://bugs.webkit.org/show_bug.cgi?id=73050

        Reviewed by Ojan Vafai.

        No tests needed. This is just a refactor.

        * css/CSSMutableStyleDeclaration.cpp:
        (WebCore::CSSMutableStyleDeclaration::CSSMutableStyleDeclaration):
        (WebCore::CSSMutableStyleDeclaration::operator=):
        (WebCore::CSSMutableStyleDeclaration::isInlineStyleDeclaration):
        (WebCore::CSSMutableStyleDeclaration::setNeedsStyleRecalc):
        * css/CSSMutableStyleDeclaration.h:
        (WebCore::CSSMutableStyleDeclaration::setElement):
        (WebCore::CSSMutableStyleDeclaration::element):
        * css/CSSStyleRule.cpp:
        (WebCore::CSSStyleRule::setSelectorText):
        * dom/StyledElement.cpp:
        (WebCore::StyledElement::createInlineStyleDecl):
        (WebCore::StyledElement::destroyInlineStyleDecl):
        (WebCore::StyledElement::attributeChanged):
        (WebCore::StyledElement::createMappedDecl):
        * html/HTMLTableElement.cpp:
        (WebCore::HTMLTableElement::additionalAttributeStyleDecls):
        (WebCore::HTMLTableElement::addSharedCellBordersDecl):
        (WebCore::HTMLTableElement::addSharedCellPaddingDecl):
        (WebCore::HTMLTableElement::addSharedGroupDecls):
        * inspector/InspectorCSSAgent.cpp:
        (WebCore::InspectorCSSAgent::inlineStyleElement):

2011-11-23  Ami Fischman  <fischman@chromium.org>

        Teach VideoLayerChromium how to render native texture (to support HW video decode).
        https://bugs.webkit.org/show_bug.cgi?id=73043

        Reviewed by Kenneth Russell.

        No new tests. (depends on chromium support landing, and supporting HW being available)

        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::drawLayersOntoRenderSurfaces):
        (WebCore::LayerRendererChromium::videoLayerNativeTextureProgram):
        * platform/graphics/chromium/LayerRendererChromium.h:
        * platform/graphics/chromium/VideoFrameChromium.h:
        * platform/graphics/chromium/VideoLayerChromium.cpp:
        (WebCore::VideoLayerChromium::VideoLayerChromium):
        (WebCore::VideoLayerChromium::updateCompositorResources):
        (WebCore::VideoLayerChromium::pushPropertiesTo):
        (WebCore::VideoLayerChromium::determineTextureFormat):
        * platform/graphics/chromium/VideoLayerChromium.h:
        * platform/graphics/chromium/cc/CCVideoLayerImpl.cpp:
        (WebCore::CCVideoLayerImpl::setNativeTexture):
        (WebCore::CCVideoLayerImpl::draw):
        (WebCore::CCVideoLayerImpl::drawNativeTexture):
        * platform/graphics/chromium/cc/CCVideoLayerImpl.h:

2011-11-23  Vincent Scheib  <scheib@chromium.org>

        Pointer Lock: Plumb movement coordinates from PlatformMouseEvent to MouseEvents.
        https://bugs.webkit.org/show_bug.cgi?id=73031

        Reviewed by Dimitri Glazkov.

        No tests for now, but this patch gets us closer to being able to write layout tests for pointer lock.

        * dom/MouseEvent.cpp:
        (WebCore::MouseEvent::create):
        (WebCore::MouseEvent::MouseEvent):
        (WebCore::SimulatedMouseEvent::SimulatedMouseEvent):
        * dom/MouseEvent.h:
        (WebCore::MouseEvent::create):
        * dom/MouseRelatedEvent.cpp:
        (WebCore::MouseRelatedEvent::MouseRelatedEvent):
        * dom/MouseRelatedEvent.h:
        * dom/TouchEvent.cpp:
        (WebCore::TouchEvent::TouchEvent):
        * dom/WheelEvent.cpp:
        (WebCore::WheelEvent::WheelEvent):
        * page/EventHandler.cpp:
        (WebCore::EventHandler::dispatchDragEvent):
        * platform/PlatformMouseEvent.h:
        (WebCore::PlatformMouseEvent::movementX):
        (WebCore::PlatformMouseEvent::movementY):

2011-11-23  Nico Weber  <thakis@chromium.org>

        Remove one static initializer (for kTickTime)
        https://bugs.webkit.org/show_bug.cgi?id=73049

        Reviewed by Adam Barth.

        * platform/ScrollAnimatorNone.cpp:

2011-11-23  Jonathan Backer  <backer@chromium.org>

        [chromium] Drop root layer tiles on platforms that cache the front buffer
        https://bugs.webkit.org/show_bug.cgi?id=72956

        Reviewed by Kenneth Russell.

        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::initialize):
        * platform/graphics/chromium/cc/CCLayerTreeHost.cpp:
        (WebCore::CCLayerTreeHost::initialize):
        (WebCore::CCLayerTreeHost::didBecomeInvisibleOnImplThread):
        * platform/graphics/chromium/cc/CCLayerTreeHost.h:
        (WebCore::CCSettings::CCSettings):
        (WebCore::LayerRendererCapabilities::LayerRendererCapabilities):

2011-11-23  Erik Arvidsson  <arv@chromium.org>

        Binding CodeGenerators don't support Conditional= on constants
        https://bugs.webkit.org/show_bug.cgi?id=67666

        Reviewed by Adam Barth.

        Adds support for [Conditional=LABEL] to const IDL fields.

        * bindings/scripts/CodeGenerator.pm:
        (GenerateConditionalStringFromAttributeValue): Moved out of CodeGenerator{CPP,JS,V8}.pm.
        (GenerateCompileTimeCheckForEnumsIfNeeded): Wrap in conditional #if.
        * bindings/scripts/CodeGeneratorCPP.pm:
        (GenerateConditionalString):
        (GenerateHeader): Ditto.
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateConditionalString):
        (GenerateHeader): Ditto.
        (GenerateImplementation): Ditto.
        (GenerateHashTable):
        (WriteData):
        * bindings/scripts/CodeGeneratorObjC.pm:
        (GenerateHeader): Ditto.
        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateConditionalString): Ditto.
        (GenerateImplementation):
        (WriteData):
        * bindings/scripts/test/CPP/WebDOMTestObj.h: Generated code now wraps conditional const in #if.
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::jsTestObjCONDITIONAL_CONST): Ditto
        * bindings/scripts/test/JS/JSTestObj.h: Ditto
        * bindings/scripts/test/ObjC/DOMTestObj.h: Ditto
        * bindings/scripts/test/TestObj.idl: Added a conditional const.
        * bindings/scripts/test/V8/V8TestObj.cpp: Generated code now wraps conditional const in #if.

2011-11-23  Rafael Weinstein  <rafaelw@chromium.org>

        [MutationObservers] Modifications to the style property don't dispatch "attributes" Mutation Records
        https://bugs.webkit.org/show_bug.cgi?id=70137

        Reviewed by Ryosuke Niwa.

        This patch adds a private AttributesMutationScope mechanism to CSSMutableStyleDeclaration (which uses
        the RAII pattern similar to the public ChildListMutationScope). This manages the (sometimes conditional)
        pre-change serialization of the style attribute (if an observer has requested oldValue), creation of
        the mutation record, and dispatch if the declaration was actual affected.

        * css/CSSMutableStyleDeclaration.cpp:
        (WebCore::CSSMutableStyleDeclaration::removeProperty):
        (WebCore::CSSMutableStyleDeclaration::setProperty):
        (WebCore::CSSMutableStyleDeclaration::setPropertyInternal):
        (WebCore::CSSMutableStyleDeclaration::parseDeclaration):
        (WebCore::CSSMutableStyleDeclaration::addParsedProperties):
        (WebCore::CSSMutableStyleDeclaration::addParsedProperty):
        (WebCore::CSSMutableStyleDeclaration::setCssText):
        (WebCore::CSSMutableStyleDeclaration::merge):
        (WebCore::CSSMutableStyleDeclaration::removePropertiesInSet):
        * dom/Element.cpp:
        (WebCore::Element::setAttribute):

2011-11-23  Dmitry Lomov  <dslomov@google.com>

        Unreviewed, rebaseline binding tests after http://trac.webkit.org/changeset/101064.

        * bindings/scripts/test/JS/JSFloat64Array.cpp:
        (WebCore::toFloat64Array):
        * bindings/scripts/test/V8/V8Float64Array.cpp:
        (WebCore::V8Float64Array::wrapSlow):

2011-11-23  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r101069.
        http://trac.webkit.org/changeset/101069
        https://bugs.webkit.org/show_bug.cgi?id=73032

        New test always times out (Requested by aklein on #webkit).

        * inspector/front-end/DebuggerPresentationModel.js:
        (WebInspector.DebuggerPresentationModel.prototype._bindScriptToRawSourceCode):
        (WebInspector.DebuggerPresentationModel.prototype.evaluateInSelectedCallFrame):
        (WebInspector.DebuggerPresentationModel.prototype.get executionLineLocation):
        (WebInspector.DebuggerPresentationModel.DefaultLinkifierFormatter.prototype.formatRawSourceCodeAnchor):
        (WebInspector.DebuggerPresentationModel.Linkifier.prototype.linkifyLocation):
        (WebInspector.DebuggerPresentationModel.Linkifier.prototype._updateAnchor):

2011-11-23  Antti Koivisto  <antti@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=72354
        Image pointer in FillLayer not cleared correctly

        Reviewed by Dan Bernstein.

        Test: fast/css/fill-layer-crash.html
        
        We should clear the image pointer too, not just the m_imageSet bit.

        * rendering/style/FillLayer.h:
        (WebCore::FillLayer::clearImage):

2011-11-23  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r101057.
        http://trac.webkit.org/changeset/101057
        https://bugs.webkit.org/show_bug.cgi?id=73027

        Broke Chromium Windows build (Requested by aklein on #webkit).

        * html/HTMLTrackElement.cpp:
        (WebCore::HTMLTrackElement::HTMLTrackElement):
        (WebCore::HTMLTrackElement::didCompleteLoad):
        (WebCore::HTMLTrackElement::textTrackReadyStateChanged):
        * html/HTMLTrackElement.h:
        * html/HTMLTrackElement.idl:
        * html/LoadableTextTrack.cpp:
        (WebCore::LoadableTextTrack::loadTimerFired):
        (WebCore::LoadableTextTrack::cueLoadingStarted):
        (WebCore::LoadableTextTrack::cueLoadingCompleted):
        * html/TextTrack.cpp:
        (WebCore::TextTrack::TextTrack):
        (WebCore::TextTrack::setReadyState):
        * html/TextTrack.h:
        (WebCore::TextTrack::readyState):
        * html/TextTrack.idl:

2011-11-23  Yury Semikhatsky  <yurys@chromium.org>

        Unreviewed. Build fix. Added missing ENABLE(WORKERS) guards.

        * inspector/WorkerConsoleAgent.cpp:
        * inspector/WorkerConsoleAgent.h:
        * inspector/WorkerRuntimeAgent.cpp:
        * inspector/WorkerRuntimeAgent.h:

2011-11-23  Philippe Normand  <pnormand@igalia.com>

        [GStreamer] improper usage of gst_object_ref_sink
        https://bugs.webkit.org/show_bug.cgi?id=73014

        Reviewed by Martin Robinson.

        No new tests. Existing tests cover this already.

        * platform/graphics/gstreamer/GRefPtrGStreamer.cpp:
        (WTF::adoptGRef): Ensure this is called with non-floating GstObjects.
        (WTF::GstElement): Replace gst_object_ref_sink with
        gst_object_ref+gst_object_sink like advised in the GstObject documentation.
        (WTF::GstPad): Ditto.
        * platform/graphics/gstreamer/GRefPtrGStreamer.h:

2011-11-23  Yury Semikhatsky  <yurys@chromium.org>

        Web Inspector: split console agent into worker and page console agents
        https://bugs.webkit.org/show_bug.cgi?id=73019

        InspectorConsoleAgent now has two descendants: WorkerConsoleAgent and PageConsoleAgent
        which encapsulate functionality specific for the type of inspected instance.

        Reviewed by Pavel Feldman.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * inspector/InspectorConsoleAgent.cpp:
        (WebCore::InspectorConsoleAgent::InspectorConsoleAgent):
        (WebCore::InspectorConsoleAgent::~InspectorConsoleAgent):
        (WebCore::InspectorConsoleAgent::clearMessages):
        (WebCore::InspectorConsoleAgent::addMessageToConsole):
        (WebCore::InspectorConsoleAgent::resourceRetrievedByXMLHttpRequest):
        (WebCore::InspectorConsoleAgent::didReceiveResponse):
        (WebCore::InspectorConsoleAgent::didFailLoading):
        (WebCore::InspectorConsoleAgent::addConsoleMessage):
        * inspector/InspectorConsoleAgent.h:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        * inspector/InspectorStyleTextEditor.cpp:
        * inspector/InspectorStyleTextEditor.h:
        * inspector/PageConsoleAgent.cpp: Copied from Source/WebCore/inspector/PageDebuggerAgent.cpp.
        (WebCore::PageConsoleAgent::PageConsoleAgent):
        (WebCore::PageConsoleAgent::~PageConsoleAgent):
        (WebCore::PageConsoleAgent::clearMessages):
        (WebCore::PageConsoleAgent::addInspectedNode):
        (WebCore::PageConsoleAgent::developerExtrasEnabled):
        * inspector/PageConsoleAgent.h: Copied from Source/WebCore/inspector/PageDebuggerAgent.h.
        * inspector/PageDebuggerAgent.cpp:
        * inspector/PageDebuggerAgent.h:
        * inspector/PageRuntimeAgent.cpp: Copied from Source/WebCore/inspector/PageDebuggerAgent.h.
        (WebCore::PageRuntimeAgent::PageRuntimeAgent): PageRuntimeAgent was moved into its own file.
        (WebCore::PageRuntimeAgent::~PageRuntimeAgent):
        (WebCore::PageRuntimeAgent::scriptStateForFrameId):
        (WebCore::PageRuntimeAgent::getDefaultInspectedState):
        * inspector/PageRuntimeAgent.h: Copied from Source/WebCore/inspector/PageDebuggerAgent.h.
        * inspector/WorkerConsoleAgent.cpp: Copied from Source/WebCore/inspector/PageDebuggerAgent.h.
        (WebCore::WorkerConsoleAgent::WorkerConsoleAgent):
        (WebCore::WorkerConsoleAgent::~WorkerConsoleAgent):
        (WebCore::WorkerConsoleAgent::addInspectedNode):
        (WebCore::WorkerConsoleAgent::developerExtrasEnabled):
        * inspector/WorkerConsoleAgent.h: Copied from Source/WebCore/inspector/PageDebuggerAgent.h.
        * inspector/WorkerDebuggerAgent.cpp:
        * inspector/WorkerDebuggerAgent.h:
        * inspector/WorkerInspectorController.cpp:
        (WebCore::WorkerInspectorController::WorkerInspectorController):
        * inspector/WorkerInspectorController.h:
        * inspector/WorkerRuntimeAgent.cpp: Copied from Source/WebCore/inspector/PageDebuggerAgent.h.
        (WebCore::WorkerRuntimeAgent::WorkerRuntimeAgent): WorkerRuntimeAgent was moved into its own file.
        (WebCore::WorkerRuntimeAgent::~WorkerRuntimeAgent):
        (WebCore::WorkerRuntimeAgent::scriptStateForFrameId):
        (WebCore::WorkerRuntimeAgent::getDefaultInspectedState):
        * inspector/WorkerRuntimeAgent.h: Copied from Source/WebCore/inspector/PageDebuggerAgent.h.

2011-11-23  Alexander Pavlov  <apavlov@chromium.org>

        Web Inspector: warning icon for unrecognized style rule should have tooltip
        https://bugs.webkit.org/show_bug.cgi?id=50638

        Reviewed by Yury Semikhatsky.

        * English.lproj/localizedStrings.js: Add new tooltip strings.
        * inspector/front-end/CSSCompletions.js:
        (WebInspector.CSSCompletions.prototype.keySet): Added.
        * inspector/front-end/StylesSidebarPane.js: Create a separate IMG element for an exclamation mark.
        * inspector/front-end/elementsPanel.css:
        (.styles-section .properties li.not-parsed-ok img.exclamation-mark):

2011-11-23  Halton Huo  <halton.huo@intel.com>

        [EFL] Add zlib depend when freetype is used.
        https://bugs.webkit.org/show_bug.cgi?id=66365

        Unreviewed build fix.

        When freetype is enabled, uncompress() function is used by
        WOFFFileFormat.cpp. Since zlib is not required by freetype, we need to
        add libz as dependency for fix linking issue.

        No new test because this change is only to fix linking issue.

        * PlatformEfl.cmake: add ZLIB as dependency when using freetype

2011-11-23  Mihnea Ovidenie  <mihnea@adobe.com>

        CSS Exclusions: parse the shorthand "wrap" property
        https://bugs.webkit.org/show_bug.cgi?id=71905

        Reviewed by Dean Jackson.

        Test: fast/exclusions/wrap-parsing.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        * css/CSSMutableStyleDeclaration.cpp:
        (WebCore::CSSMutableStyleDeclaration::getPropertyValue):
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):
        * css/CSSProperty.cpp:
        (WebCore::CSSProperty::isInheritedProperty):
        * css/CSSPropertyLonghand.cpp:
        (WebCore::initShorthandMap):
        * css/CSSPropertyNames.in:
        * css/CSSStyleApplyProperty.cpp:
        (WebCore::CSSStyleApplyProperty::CSSStyleApplyProperty):
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):

2011-11-23  Alexandru Chiculita  <achicu@adobe.com>

        [CSS Filters] WebKit crashes when changing the filter
        https://bugs.webkit.org/show_bug.cgi?id=72723

        Reviewed by Simon Fraser.

        There are three things fixed with this patch:
        1. The list of effects wasn't cleared when the FilterOperations were changed.
        2. The sourceImage was going to be 0, because the m_sourceGraphicBuffer.release()
        was also clearing the reference to m_sourceGraphicBuffer. Next time the build() method
        was called m_graphicsBufferAttached was set to false, but the m_sourceGraphicBuffer was
        not regenerated, because the size was not invalidated.
        3. maxEffectRects were not updated when a new list of effects was built.
         
        Test: css3/filters/crash-filter-change.html

        * rendering/FilterEffectRenderer.cpp:
        (WebCore::FilterEffectRenderer::build):
        (WebCore::FilterEffectRenderer::prepare):
        * rendering/FilterEffectRenderer.h:
        (WebCore::FilterEffectRenderer::setSourceImageRect):

2011-11-23  Elliot Poger  <epoger@google.com>

        [Skia] fix duplicate symbol __ZN7WebCore11BitmapImage16initPlatformDataEv error
        https://bugs.webkit.org/show_bug.cgi?id=72954

        Reviewed by Adam Barth.

        * WebCore.gyp/WebCore.gyp:

2011-11-18  Pavel Podivilov  <podivilov@chromium.org>

        Web Inspector: add integration test for compiler source maps.
        https://bugs.webkit.org/show_bug.cgi?id=72730

        Reviewed by Pavel Feldman.

        Test: http/tests/inspector/compiler-source-mapping-debug.html

        * inspector/front-end/DebuggerPresentationModel.js:
        (WebInspector.DebuggerPresentationModel.prototype._bindScriptToRawSourceCode):
        (WebInspector.DebuggerPresentationModel.prototype.setCompilerSourceMapping):
        (WebInspector.DebuggerPresentationModel.prototype.evaluateInSelectedCallFrame):
        (WebInspector.DebuggerPresentationModel.prototype.get executionLineLocation):
        (WebInspector.DebuggerPresentationModel.DefaultLinkifierFormatter.prototype.formatRawSourceCodeAnchor):
        (WebInspector.DebuggerPresentationModel.Linkifier.prototype.linkifyLocation):
        (WebInspector.DebuggerPresentationModel.Linkifier.prototype._updateAnchor):

2011-11-23  Martin Robinson  <mrobinson@igalia.com>

        Build fix for GTK+.

        * platform/graphics/gtk/DrawingBufferGtk.cpp:
        (WebCore::DrawingBuffer::DrawingBuffer): Update signature and ASSERT
        for the GTK+ port.

2011-11-23  Rafael Weinstein  <rafaelw@chromium.org>

        Remove notifyChange from the public interface of CSSMutableStyleDeclaration
        https://bugs.webkit.org/show_bug.cgi?id=72660

        Reviewed by Ojan Vafai.

        No tests needed. This is only a refactor.

        * css/CSSMutableStyleDeclaration.cpp:
        (WebCore::CSSMutableStyleDeclaration::CSSMutableStyleDeclaration):
        (WebCore::CSSMutableStyleDeclaration::addParsedProperty):
        * css/CSSMutableStyleDeclaration.h:
        (WebCore::CSSMutableStyleDeclaration::setProperty):
        (WebCore::CSSMutableStyleDeclaration::removeProperty):
        (WebCore::CSSMutableStyleDeclaration::removePropertiesInSet):
        * css/CSSStyleSelector.cpp:
        (WebCore::leftToRightDeclaration):
        (WebCore::rightToLeftDeclaration):
        * editing/ApplyStyleCommand.cpp:
        (WebCore::ApplyStyleCommand::applyRelativeFontStyleChange):
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::setContentEditable):

2011-11-23  Scott Graham  <scottmg@chromium.org>

        Adding gamepad support
        https://bugs.webkit.org/show_bug.cgi?id=69451

        Reviewed by Darin Fisher.

        Plumb gamepad data access through platform.

        Test: gamepad/gamepad-polling-access.html

        * WebCore.gypi:
        * page/Navigator.cpp:
        (WebCore::Navigator::webkitGamepads):
        * page/Navigator.h:
        * platform/Gamepads.h: Added.
        * platform/chromium/GamepadsChromium.cpp: Added.
        (WebCore::sampleGamepads):
        * platform/chromium/PlatformSupport.h:

2011-11-23  Dmitry Lomov  <dslomov@google.com>

        Get rid of WebCore dependencies from TypedArray implementation types
        https://bugs.webkit.org/show_bug.cgi?id=72783

        Reviewed by David Levin.

        Remove WebCore specific logic for neutering Typed Array implementations.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateImplementation):
        * bindings/scripts/CodeGeneratorV8.pm:
        * html/canvas/ArrayBuffer.cpp:
        (WTF::ArrayBuffer::transfer):
        * html/canvas/ArrayBuffer.h:
        * html/canvas/ArrayBufferView.cpp:
        (WTF::ArrayBufferView::neuter):
        * html/canvas/ArrayBufferView.h:
        * html/canvas/DataView.cpp:
        (WebCore::DataView::neuter):
        * html/canvas/DataView.h:
        * html/canvas/Float32Array.h:
        * html/canvas/Float64Array.h:
        * html/canvas/Int16Array.h:
        * html/canvas/Int32Array.h:
        * html/canvas/Int8Array.h:
        * html/canvas/Uint16Array.h:
        * html/canvas/Uint32Array.h:
        * html/canvas/Uint8Array.h:

2011-11-23  Raul Hudea  <rhudea@adobe.com>

        First step towards http://webkit.org/b/70025

        Allow -webkit-transform to be have effect to SVG elements.
        Currently, the CSS transform takes precedence over the SVG transform attribute

        Allow SVG elements to be transformed using webkit-transform
        https://bugs.webkit.org/show_bug.cgi?id=71309

        Reviewed by Nikolas Zimmermann.

        Tests: svg/clip-path/clip-path-css-transform-1.svg
               svg/clip-path/clip-path-css-transform-2.svg
               svg/custom/clip-path-with-css-transform-1.svg
               svg/custom/clip-path-with-css-transform-2.svg
               svg/custom/pointer-events-image-css-transform.svg
               svg/custom/pointer-events-text-css-transform.svg
               svg/dom/css-transforms.xhtml
               svg/dynamic-updates/SVG-dynamic-css-transform.html
               svg/dynamic-updates/SVGClipPathElement-css-transform-influences-hitTesting.html
               svg/transforms/svg-css-transforms-clip-path.xhtml
               svg/transforms/svg-css-transforms.xhtml

        * manual-tests/svg-animation-css-transform.html: Added.
        * manual-tests/svg-css-animate-compound.html: Added.
        * manual-tests/svg-css-transition-compound.html: Added.
        * rendering/svg/RenderSVGModelObject.cpp:
        (WebCore::RenderSVGModelObject::styleWillChange):

        Set the updateTransform flag on SVG elements whenever a CSS transform is present on the style

        * svg/SVGStyledTransformableElement.cpp:
        (WebCore::SVGStyledTransformableElement::animatedLocalTransform):

        Use the RenderStyle's transform (if it exists) over the SVG's transform

        * svg/SVGTextElement.cpp:
        (WebCore::SVGTextElement::animatedLocalTransform):

        Use the RenderStyle's transform (if it exists) over the SVG's transform

2011-11-23  Rafael Weinstein  <rafaelw@chromium.org>

        [MutationObservers] Cleanup duplicated code in Element & CharacterData
        https://bugs.webkit.org/show_bug.cgi?id=72986

        Reviewed by Ojan Vafai.

        This patch creates a MutationObserverInterestGroup which represents the set
        of MutationObservers which should receive all mutations of a given type generated
        from a specific node.

        No tests needed. This patch is only a refactor.

        * dom/CharacterData.cpp:
        (WebCore::CharacterData::dispatchModifiedEvent):
        * dom/ChildListMutationScope.cpp:
        (WebCore::MutationAccumulationRouter::ChildListMutationAccumulator::ChildListMutationAccumulator):
        (WebCore::MutationAccumulationRouter::ChildListMutationAccumulator::enqueueMutationRecord):
        (WebCore::MutationAccumulationRouter::MutationAccumulationRouter::incrementScopingLevel):
        * dom/Element.cpp:
        (WebCore::enqueueAttributesMutationRecord):
        * dom/WebKitMutationObserver.cpp:
        (WebCore::MutationObserverInterestGroup::createForChildListMutation):
        (WebCore::MutationObserverInterestGroup::createForCharacterDataMutation):
        (WebCore::MutationObserverInterestGroup::createForAttributesMutation):
        (WebCore::MutationObserverInterestGroup::MutationObserverInterestGroup):
        (WebCore::MutationObserverInterestGroup::isOldValueRequested):
        (WebCore::MutationObserverInterestGroup::enqueueMutationRecord):
        * dom/WebKitMutationObserver.h:
        (WebCore::MutationObserverInterestGroup::isEmpty):
        (WebCore::MutationObserverInterestGroup::hasOldValue):

2011-11-23  Marc-Andre Decoste  <mad@chromium.org>

        [chromium] HDC leak in Uniscribe Helper
        https://bugs.webkit.org/show_bug.cgi?id=68598

        Reviewed by Darin Fisher.

        For some reason the Script functions on Windows sometimes return
        E_PENDING even with a non-NULL DC, so we must handle that case.
        Also, we should not use the screen DC to select font since this
        refreshes the whole desktop, so I added a cached compatible DC.

        Note that this doesn't reproduce with WebKit alone, it only reproduces
        within Chrome, so we can't write a WebKit test for it. A chromium
        browser test will be added once this change gets rolled in the
        chromium DEPS file.

        * platform/graphics/chromium/UniscribeHelper.cpp:
        (WebCore::UniscribeHelper::shape):
        (WebCore::UniscribeHelper::EnsureCachedDCCreated):
        (WebCore::UniscribeHelper::fillShapes):
        * platform/graphics/chromium/UniscribeHelper.h:

2011-11-23  Anna Cavender  <annacc@chromium.org>

        Move readyState from TextTrack to HTMLTrackElement
        https://bugs.webkit.org/show_bug.cgi?id=72553

        Reviewed by Eric Carlson.

        * html/HTMLTrackElement.cpp:
        (WebCore::HTMLTrackElement::HTMLTrackElement):
            Set initial readyState to NONE.
        (WebCore::HTMLTrackElement::didCompleteLoad):
            Set readyState based on load completed status.
        (WebCore::HTMLTrackElement::setReadyState):
            This replaces textTrackReadyStateChanged() because only LoadableTextTrack
            needs to notify HTMLTrackElement of readyState changes (i.e.
            textTrackReadyStateChanged() is no longer required of TextTrackClient).
        * html/HTMLTrackElement.h:
            ReadyState enum and m_readyState member variable moved from TextTrack.
        (WebCore::HTMLTrackElement::readyState):
            New: readyState() getter.
        * html/HTMLTrackElement.idl:
            Add readyState attribute and associated constants.

        * html/LoadableTextTrack.cpp:
        (WebCore::LoadableTextTrack::loadTimerFired): Set readyState on HTMLTrackElement.
        (WebCore::LoadableTextTrack::cueLoadingStarted): Ditto.
        (WebCore::LoadableTextTrack::cueLoadingCompleted): Move code to set readyState
            to HTMLTrackElement (it can set it based on loading status).

        * html/TextTrack.cpp: Remove readyState from TextTrack.
        (WebCore::TextTrack::TextTrack): Ditto.
        * html/TextTrack.h: Ditto.
        * html/TextTrack.idl: Ditto.

2011-11-23  Raphael Kubo da Costa  <kubo@profusion.mobi>

        [CMake] Move the top-level logic to the top-level directory.
        https://bugs.webkit.org/show_bug.cgi?id=72685

        Reviewed by Brent Fulgham.

        No new tests, this is a buildsystem changes.

        * CMakeLists.txt: Adjust the Source/ directory.
        * PlatformBlackBerry.cmake: Ditto.

2011-11-23  Mihnea Ovidenie  <mihnea@adobe.com>

        CSS Exclusions: update the name of the shape CSS properties
        https://bugs.webkit.org/show_bug.cgi?id=71898
        Instead of a single wrap-shape property, we have wrap-shape-inside and wrap-shape-outside.

        Reviewed by Dean Jackson.

        Tests: fast/exclusions/parsing-wrap-shape-inside.html
               fast/exclusions/parsing-wrap-shape-outside.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):
        (WebCore::CSSParser::parseWrapShape):
        * css/CSSParser.h:
        * css/CSSProperty.cpp:
        (WebCore::CSSProperty::isInheritedProperty):
        * css/CSSPropertyNames.in:
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::diff):
        * rendering/style/RenderStyle.h:
        (WebCore::InheritedFlags::setWrapShapeInside):
        (WebCore::InheritedFlags::wrapShapeInside):
        (WebCore::InheritedFlags::setWrapShapeOutside):
        (WebCore::InheritedFlags::wrapShapeOutside):
        (WebCore::InheritedFlags::initialWrapShapeInside):
        (WebCore::InheritedFlags::initialWrapShapeOutside):
        * rendering/style/StyleRareNonInheritedData.cpp:
        (WebCore::StyleRareNonInheritedData::StyleRareNonInheritedData):
        (WebCore::StyleRareNonInheritedData::operator==):
        * rendering/style/StyleRareNonInheritedData.h:

2011-11-23  Andrey Kosyakov  <caseq@chromium.org>

        Web Inspector: [Extensions API] avoid exception in initExtensions() if elements panel is not present
        https://bugs.webkit.org/show_bug.cgi?id=73007

        Reviewed by Yury Semikhatsky.

        * inspector/front-end/ExtensionServer.js:

2011-11-23  Brian Salomon  <bsalomon@google.com>

        Use new name for pixel config field of GrTextureDesc
        https://bugs.webkit.org/show_bug.cgi?id=72543

        Reviewed by Stephen White.

        Tested by every canvas2d layout test.

        * platform/graphics/skia/ImageBufferSkia.cpp:
        (WebCore::createAcceleratedCanvas):

2011-11-23  Emil A Eklund  <eae@chromium.org>

        Change remaining scrollTop/Left/Width/Height methods back to int
        https://bugs.webkit.org/show_bug.cgi?id=72771

        Reviewed by Eric Seidel.

        Change remaining scrollTop/Left/Width/Height, setScrollLeft/Top and
        verticalScrollbarWidth, horizontalScrollbarHeight methods back to int as
        scrolling will remain int based to line up with device pixels.

        No new tests.

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::scrollWidth):
        (WebCore::RenderBox::scrollHeight):
        (WebCore::RenderBox::scrollLeft):
        (WebCore::RenderBox::scrollTop):
        (WebCore::RenderBox::setScrollLeft):
        (WebCore::RenderBox::setScrollTop):
        (WebCore::RenderBox::verticalScrollbarWidth):
        (WebCore::RenderBox::horizontalScrollbarHeight):
        * rendering/RenderBox.h:
        (WebCore::RenderBox::scrollbarLogicalHeight):
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::verticalScrollbarWidth):
        (WebCore::RenderListBox::scrollHeight):
        (WebCore::RenderListBox::scrollLeft):
        (WebCore::RenderListBox::setScrollLeft):
        (WebCore::RenderListBox::scrollTop):
        (WebCore::RenderListBox::setScrollTop):
        * rendering/RenderListBox.h:
        * rendering/RenderTextControlSingleLine.cpp:
        (WebCore::RenderTextControlSingleLine::scrollWidth):
        (WebCore::RenderTextControlSingleLine::scrollHeight):
        (WebCore::RenderTextControlSingleLine::scrollLeft):
        (WebCore::RenderTextControlSingleLine::scrollTop):
        (WebCore::RenderTextControlSingleLine::setScrollLeft):
        (WebCore::RenderTextControlSingleLine::setScrollTop):
        * rendering/RenderTextControlSingleLine.h:

2011-11-22  Kenneth Russell  <kbr@google.com>

        [chromium] Support Core Animation plugins in compositor
        https://bugs.webkit.org/show_bug.cgi?id=72921

        Reviewed by Stephen White.

        Added support to PluginLayerChromium and CCPluginLayerImpl for
        using an IOSurface as the backing store for a plugin. Added minimal
        ARB_texture_rectangle support to Extensions3D.h and a Chromium-
        specific extension for binding an IOSurface to a texture.

        These changes themselves do not have any effect. A follow-on
        Chromium CL will make the switch to this new code path.

        Tested manually both with and without the Chromium side changes;
        Chromium's DumpRenderTree port does not support Core Animation
        plugins. Ran video and Stage3D in Flash, and Unity 3D content, to
        verify.

        * platform/graphics/Extensions3D.h:
        * platform/graphics/chromium/Extensions3DChromium.h:
        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::initialize):
        (WebCore::LayerRendererChromium::pluginLayerTexRectProgram):
        (WebCore::LayerRendererChromium::pluginLayerTexRectProgramFlip):
        * platform/graphics/chromium/LayerRendererChromium.h:
        * platform/graphics/chromium/PluginLayerChromium.cpp:
        (WebCore::PluginLayerChromium::PluginLayerChromium):
        (WebCore::PluginLayerChromium::setIOSurfaceProperties):
        (WebCore::PluginLayerChromium::getIOSurfaceId):
        (WebCore::PluginLayerChromium::pushPropertiesTo):
        * platform/graphics/chromium/PluginLayerChromium.h:
        * platform/graphics/chromium/ShaderChromium.cpp:
        (WebCore::FragmentShaderRGBATexRectFlipAlpha::getShaderString):
        (WebCore::FragmentShaderRGBATexRectAlpha::getShaderString):
        * platform/graphics/chromium/ShaderChromium.h:
        * platform/graphics/chromium/cc/CCPluginLayerImpl.cpp:
        (PluginProgramBinding::TexStretchPluginProgramBinding::set):
        (PluginProgramBinding::TexTransformPluginProgramBinding::set):
        (WebCore::CCPluginLayerImpl::CCPluginLayerImpl):
        (WebCore::CCPluginLayerImpl::~CCPluginLayerImpl):
        (WebCore::CCPluginLayerImpl::draw):
        (WebCore::CCPluginLayerImpl::setIOSurfaceProperties):
        (WebCore::CCPluginLayerImpl::cleanupResources):
        * platform/graphics/chromium/cc/CCPluginLayerImpl.h:

2011-11-22  Daniel Cheng  <dcheng@chromium.org>

        [chromium] Fix plumbing for differentiating between clipboard/selection pastes.
        https://bugs.webkit.org/show_bug.cgi?id=72056

        Reviewed by Tony Chang.

        Add a buffer parameter when retrieving the clipboard sequence number and fix several call
        sites that incorrectly assume use of the standard buffer in pastes.

        * platform/chromium/ChromiumDataObject.cpp:
        (WebCore::ChromiumDataObject::types):
        (WebCore::ChromiumDataObject::getData):
        (WebCore::ChromiumDataObject::containsFilenames):
        * platform/chromium/ChromiumDataObject.h:
        * platform/chromium/ClipboardChromium.cpp:
        (WebCore::ClipboardChromium::ClipboardChromium):
        (WebCore::ClipboardChromium::getData):
        (WebCore::ClipboardChromium::platformClipboardChanged):
        * platform/chromium/ClipboardUtilitiesChromium.cpp:
        (WebCore::currentPasteboardBuffer):
        * platform/chromium/ClipboardUtilitiesChromium.h:
        * platform/chromium/DataTransferItemChromium.cpp:
        (WebCore::DataTransferItemChromium::getAsString):
        * platform/chromium/PlatformSupport.h:

2011-11-22  Andrey Kosyakov  <caseq@chromium.org>

        Layout Test inspector/extensions/extensions-events.html is timing out
        https://bugs.webkit.org/show_bug.cgi?id=72966

        Reviewed by Pavel Feldman.

        - always bind to {add,remove}EventListener() of event target, not WebInspector.Object

        * inspector/front-end/ExtensionServer.js:
        (WebInspector.ExtensionServer.prototype._registerAutosubscriptionHandler):

2011-11-22  Adam Klein  <adamk@chromium.org>

        Move splitView.css (added in r100991) to the correct target.

        * WebCore.gypi:

2011-11-22  Andreas Kling  <kling@webkit.org>

        CSSProperty: Remove unnecessary operator overloads.
        <http://webkit.org/b/72953>

        Reviewed by Antti Koivisto.

        * css/CSSProperty.cpp:
        * css/CSSProperty.h:

            Remove operator= and operator== from CSSProperty. They were neither
            implemented correctly nor used anywhere.

2011-11-22  Andreas Kling  <kling@webkit.org>

        CSSStyleDeclaration: Kill FIXME in setProperty().
        <http://webkit.org/b/72958>

        Reviewed by Antonio Gomes.

        Remove FIXME about possibly throwing an exception when setProperty()
        is called with an invalid property name. CSSOM specifies that the
        method should simply return in this case.

        Spec: http://dev.w3.org/csswg/cssom/#dom-cssstyledeclaration-setproperty

        * css/CSSStyleDeclaration.cpp:
        (WebCore::CSSStyleDeclaration::setProperty):

2011-11-22  Shinya Kawanaka  <shinyak@google.com>

        Spellcheck should be able to run asynchronously.
        https://bugs.webkit.org/show_bug.cgi?id=71991

        Reviewed by Hajime Morita.

        Run asynchronous spell checker if both asynchronous flag and unified text checker flag are ON.

        When multiple asynchronous spellchecking are requested, only the first request will be processed.

        Test: editing/spelling/spellcheck-async.html

        * editing/Editor.cpp:
        (WebCore::Editor::markAllMisspellingsAndBadGrammarInRanges):
          Uses asynchronous spell checker if asynchronous flag is ON.

2011-11-22  Alexander Pavlov  <apavlov@chromium.org>

        Web Inspector: [SuggestBox] Grayed prompt displayed with non-collapsed selection in place
        https://bugs.webkit.org/show_bug.cgi?id=72951

        Reviewed by Pavel Feldman.

        * inspector/front-end/TextPrompt.js:
        (WebInspector.TextPrompt.prototype.complete):

2011-11-22  Pavel Feldman  <pfeldman@google.com>

        Not reviewed: fix inspector front-end compilation.

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

2011-11-22  Adam Bergkvist  <adam.bergkvist@ericsson.com>

        Add WebCore platform interface needed by updated MediaStream API design
        https://bugs.webkit.org/show_bug.cgi?id=70895

        Reviewed by Adam Barth.

        This is one in a series of patches that update the MediaStream feature
        to use WebCore platform interfaces.

        Tests will be provided by http://webkit.org/b/56587

        * GNUmakefile.list.am:
        * WebCore.gypi:
        * mediastream/LocalMediaStream.cpp:
        (WebCore::LocalMediaStream::stopTimerFired):
        * mediastream/MediaStream.h:
        * mediastream/MediaStreamTrack.cpp:
        (WebCore::MediaStreamTrack::setEnabled):
        * mediastream/PeerConnection.cpp:
        (WebCore::PeerConnection::didRemoveRemoteStream):
        * mediastream/UserMediaRequest.cpp:
        (WebCore::UserMediaRequest::start):
        * mediastream/UserMediaRequest.h:
        * platform/mediastream/MediaStreamCenter.cpp: Added.
        (WebCore::MediaStreamCenter::instance):
        (WebCore::MediaStreamCenter::endLocalMediaStream):
        (WebCore::MediaStreamCenter::MediaStreamCenter):
        (WebCore::MediaStreamCenter::~MediaStreamCenter):
        (WebCore::MediaStreamCenter::queryMediaStreamSources):
        (WebCore::MediaStreamCenter::didSetMediaStreamTrackEnabled):
        (WebCore::MediaStreamCenter::didStopLocalMediaStream):
        * platform/mediastream/MediaStreamCenter.h: Added.
        (WebCore::MediaStreamSourcesQueryClient::~MediaStreamSourcesQueryClient):
        * platform/mediastream/MediaStreamDescriptor.h:
        (WebCore::MediaStreamDescriptorOwner::~MediaStreamDescriptorOwner):
        (WebCore::MediaStreamDescriptor::owner):
        (WebCore::MediaStreamDescriptor::setOwner):

2011-11-22  Pavel Feldman  <pfeldman@google.com>

        Web Inspector: remove Inspector::bringToFront from the protocol.
        https://bugs.webkit.org/show_bug.cgi?id=72937

        Inspector::bringToFront protocol method is currently used on the backend
        in order to reveal the front-end window. We should do that by means of
        the inspector client interface instead.

        Reviewed by Yury Semikhatsky.

        * inspector/Inspector.json:
        * inspector/InspectorClient.h:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::show):
        * loader/EmptyClients.h:
        (WebCore::EmptyInspectorClient::bringFrontendToFront):

2011-11-21  Andrey Kosyakov  <caseq@chromium.org>

        Web Inspector: [Extensions API][refactoring] remove dependencies on the ExtensionsServer from most of the insepctor
        https://bugs.webkit.org/show_bug.cgi?id=72899

        Reviewed by Pavel Feldman.

        * inspector/front-end/ElementsPanel.js:
        (WebInspector.ElementsPanel.prototype._selectedNodeChanged):
        * inspector/front-end/ExtensionServer.js:
        (WebInspector.ExtensionServer.prototype._notifyResourceContentCommitted):
        (WebInspector.ExtensionServer.prototype._notifyElementsSelectionChanged):
        * inspector/front-end/Resource.js:
        (WebInspector.Resource.prototype.addRevision):
        * inspector/front-end/externs.js:

2011-11-22  Zoltan Horvath  <zoltan@webkit.org>

        [Qt] Build fix for MHTML support

        * Target.pri: Add missing includepath.

2011-11-22  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Extract SplitView from Panel.createSidebar() method and reuse in Elements and Scripts panels.
        https://bugs.webkit.org/show_bug.cgi?id=72920

        Reviewed by Pavel Feldman.

        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * inspector/compile-front-end.sh:
        * inspector/front-end/ApplicationCacheModel.js:
        * inspector/front-end/AuditsPanel.js:
        (WebInspector.AuditsPanel):
        * inspector/front-end/ElementsPanel.js:
        (WebInspector.ElementsPanel):
        (WebInspector.ElementsPanel.prototype.wasShown):
        (WebInspector.ElementsPanel.prototype.sidebarResized):
        (WebInspector.ElementsPanel.prototype.toggleSearchingForNode):
        * inspector/front-end/NetworkPanel.js:
        (WebInspector.NetworkPanel.prototype.wasShown):
        (WebInspector.NetworkPanel.prototype._showResource):
        (WebInspector.NetworkPanel.prototype._closeVisibleResource):
        (WebInspector.NetworkPanel.prototype._toggleGridMode):
        (WebInspector.NetworkPanel.prototype._toggleViewingResourceMode):
        * inspector/front-end/Panel.js:
        (WebInspector.Panel.prototype.wasShown):
        (WebInspector.Panel.prototype.createSplitView):
        (WebInspector.Panel.prototype.createSplitViewWithSidebarTree):
        (WebInspector.Panel.prototype.sidebarResized):
        * inspector/front-end/ProfilesPanel.js:
        (WebInspector.ProfilesPanel.prototype._reset):
        (WebInspector.ProfilesPanel.prototype.sidebarResized):
        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.ResourcesPanel.prototype.sidebarResized):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype.wasShown):
        (WebInspector.ScriptsPanel.prototype.sidebarResized):
        * inspector/front-end/SplitView.js: Added.
        (WebInspector.SplitView):
        * inspector/front-end/TimelineOverviewPane.js:
        (WebInspector.TimelineOverviewPane.prototype.sidebarResized):
        * inspector/front-end/TimelinePanel.js:
        (WebInspector.TimelinePanel):
        (WebInspector.TimelinePanel.prototype.sidebarResized):
        (WebInspector.TimelinePanel.prototype._refreshRecords):
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/auditsPanel.css:
        * inspector/front-end/elementsPanel.css:
        * inspector/front-end/inspector.css:
        (.sidebar):
        * inspector/front-end/inspector.html:
        * inspector/front-end/networkLogView.css:
        * inspector/front-end/networkPanel.css:
        (#network-views):
        * inspector/front-end/profilesPanel.css:
        (#profile-views):
        * inspector/front-end/resourcesPanel.css:
        * inspector/front-end/scriptsPanel.css:
        (#scripts-split-view):
        * inspector/front-end/splitView.css: Added.
        * inspector/front-end/timelinePanel.css:
        (.timeline .sidebar):
        (.timeline-sidebar-background):
        (#resources-container-content):

2011-11-22  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r100988.
        http://trac.webkit.org/changeset/100988
        https://bugs.webkit.org/show_bug.cgi?id=72941

        "Broke pixel tests on Chromium-Linux" (Requested by kbalazs on
        #webkit).

        * platform/graphics/filters/FEConvolveMatrix.cpp:
        (WebCore::FEConvolveMatrix::platformApplySoftware):
        * platform/graphics/filters/FEConvolveMatrix.h:
        * platform/graphics/filters/FEGaussianBlur.cpp:
        (WebCore::FEGaussianBlur::platformApply):
        * platform/graphics/filters/FEGaussianBlur.h:
        * platform/graphics/filters/FELighting.cpp:
        (WebCore::FELighting::platformApplyGeneric):
        * platform/graphics/filters/FELighting.h:
        * platform/graphics/filters/FEMorphology.cpp:
        (WebCore::FEMorphology::platformApply):
        * platform/graphics/filters/FEMorphology.h:
        * platform/graphics/filters/FETurbulence.cpp:
        (WebCore::FETurbulence::platformApplySoftware):
        * platform/graphics/filters/FETurbulence.h:
        * platform/graphics/filters/arm/FELightingNEON.cpp:
        * platform/graphics/filters/arm/FELightingNEON.h:
        (WebCore::FELighting::platformApplyNeon):

2011-11-21  Balazs Kelemen  <kbalazs@webkit.org>

        Enable ParallelJobs by default
        https://bugs.webkit.org/show_bug.cgi?id=70032

        Reviewed by Zoltan Herczeg.

        Covered by existing tests.

        According to measurements on Mac and Linux it is a
        considerable speedup for SVG on multicore.

        Remove the ENABLE(PARALLEL_JOBS) guard. Fix the Windows build
        by qualifying ParallelJobs with the WTF namespace (otherwise
        MSVC believes it belongs to WebCore which is likely a compiler bug).

        * platform/graphics/filters/FEConvolveMatrix.cpp:
        (WebCore::FEConvolveMatrix::setInteriorPixelsWorker):
        (WebCore::FEConvolveMatrix::platformApplySoftware):
        * platform/graphics/filters/FEConvolveMatrix.h:
        * platform/graphics/filters/FEGaussianBlur.cpp:
        (WebCore::FEGaussianBlur::platformApplyWorker):
        (WebCore::FEGaussianBlur::platformApply):
        * platform/graphics/filters/FEGaussianBlur.h:
        * platform/graphics/filters/FELighting.cpp:
        (WebCore::FELighting::platformApplyGenericWorker):
        (WebCore::FELighting::platformApplyGeneric):
        * platform/graphics/filters/FELighting.h:
        * platform/graphics/filters/FEMorphology.cpp:
        (WebCore::FEMorphology::platformApplyWorker):
        (WebCore::FEMorphology::platformApply):
        * platform/graphics/filters/FEMorphology.h:
        * platform/graphics/filters/FETurbulence.cpp:
        (WebCore::FETurbulence::fillRegionWorker):
        (WebCore::FETurbulence::platformApplySoftware):
        * platform/graphics/filters/FETurbulence.h:
        * platform/graphics/filters/arm/FELightingNEON.cpp:
        (WebCore::FELighting::platformApplyNeonWorker):
        * platform/graphics/filters/arm/FELightingNEON.h:
        (WebCore::FELighting::platformApplyNeon):

2011-11-22  Alexander Pavlov  <apavlov@chromium.org>

        Web Inspector: [protocol] actual JSON messages do not conform to Inspector.json in CSS
        https://bugs.webkit.org/show_bug.cgi?id=72733

        Reviewed by Pavel Feldman.

        * inspector/Inspector.json:
        * inspector/InspectorCSSAgent.cpp:
        (WebCore::InspectorCSSAgent::getComputedStyleForNode):
        * inspector/InspectorCSSAgent.h:
        * inspector/InspectorStyleSheet.cpp:
        (WebCore::InspectorStyle::buildArrayForComputedStyle):
        * inspector/InspectorStyleSheet.h:
        * inspector/front-end/CSSStyleModel.js:
        (WebInspector.CSSStyleModel.prototype.getComputedStyleAsync):
        (WebInspector.CSSStyleDeclaration.parseComputedStylePayload):

2011-11-22  Pavel Feldman  <pfeldman@google.com>

        Web Inspector: strip unused InspectorController methods.
        https://bugs.webkit.org/show_bug.cgi?id=72886

        This is a follow up to the https://bugs.webkit.org/show_bug.cgi?id=63009.
        I am now able to remove following InspectorController methods:
        ::startUserInitiatedProfiling,
        ::isRecordingUserInitiatedProfile,
        ::stopUserInitiatedProfiling,
        ::showAndEnableDebugger,
        ::debuggerEnabled,
        ::disableDebugger,
        ::startTimelineProfiler,
        ::stopTimelineProfiler,
        ::timelineProfilerEnabled,
        ::showConsole.

        Reviewed by Yury Semikhatsky.

        * WebCore.exp.in:
        * WebCore.order:
        * inspector/Inspector.json:
        * inspector/InspectorAgent.cpp:
        (WebCore::InspectorAgent::setFrontend):
        * inspector/InspectorAgent.h:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        (WebCore::InspectorController::connectFrontend):
        * inspector/InspectorController.h:
        * inspector/InspectorDebuggerAgent.cpp:
        (WebCore::InspectorDebuggerAgent::enable):
        (WebCore::InspectorDebuggerAgent::disable):
        * inspector/InspectorDebuggerAgent.h:
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::didCommitLoadImpl):
        * inspector/InspectorProfilerAgent.cpp:
        (WebCore::InspectorProfilerAgent::resetState):
        (WebCore::InspectorProfilerAgent::clearFrontend):
        (WebCore::InspectorProfilerAgent::restore):
        (WebCore::InspectorProfilerAgent::start):
        (WebCore::InspectorProfilerAgent::stop):
        * inspector/InspectorProfilerAgent.h:
        * inspector/InspectorTimelineAgent.cpp:
        (WebCore::InspectorTimelineAgent::start):
        (WebCore::InspectorTimelineAgent::stop):
        * inspector/InspectorTimelineAgent.h:
        * inspector/front-end/DebuggerModel.js:
        (WebInspector.DebuggerModel.prototype.enableDebugger):
        (WebInspector.DebuggerModel.prototype.disableDebugger):
        * inspector/front-end/TimelineManager.js:
        (WebInspector.TimelineManager.prototype.start):
        (WebInspector.TimelineManager.prototype.stop):
        (WebInspector.TimelineManager.prototype._started):
        (WebInspector.TimelineManager.prototype._stopped):
        * inspector/front-end/inspector.js:

2011-11-17  Nat Duca  <nduca@chromium.org>

        [chromium] Route willDraw/setNeedsRedraw to CCInputHandler and fix double-drawing issues that result
        https://bugs.webkit.org/show_bug.cgi?id=72688

        This allows CCInputFilter and CCLayerTreeHostImpl to
        perform requestAnimationFrame-style animations. The bulk of
        work here is to make the scheduler recover gracefully when you
        call setNeedsRedraw inside scheduledActionDraw.

        Reviewed by James Robinson.

        * WebCore.gypi:
        * platform/graphics/chromium/cc/CCInputHandler.h:
        (WebCore::CCInputHandlerTarget::CCInputHandlerTarget):
        (WebCore::CCInputHandlerTarget::~CCInputHandlerTarget):
        * platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:
        (WebCore::CCLayerTreeHostImpl::currentTimeMs):
        (WebCore::CCLayerTreeHostImpl::setNeedsRedraw):
        * platform/graphics/chromium/cc/CCLayerTreeHostImpl.h:
        * platform/graphics/chromium/cc/CCScheduler.cpp:
        (WebCore::CCScheduler::CCScheduler):
        (WebCore::CCScheduler::setVisible):
        (WebCore::CCScheduler::setNeedsRedraw):
        (WebCore::CCScheduler::beginFrame):
        (WebCore::CCScheduler::processScheduledActions):
        * platform/graphics/chromium/cc/CCScheduler.h:
        * platform/graphics/chromium/cc/CCSchedulerStateMachine.cpp:
        (WebCore::CCSchedulerStateMachine::CCSchedulerStateMachine):
        (WebCore::CCSchedulerStateMachine::nextAction):
        (WebCore::CCSchedulerStateMachine::updateState):
        (WebCore::CCSchedulerStateMachine::setInsideVSync):
        (WebCore::CCSchedulerStateMachine::setOutsideVSync):
        * platform/graphics/chromium/cc/CCSchedulerStateMachine.h:
        * platform/graphics/chromium/cc/CCScrollController.h: Removed.
        * platform/graphics/chromium/cc/CCSingleThreadProxy.cpp:
        * platform/graphics/chromium/cc/CCThreadProxy.cpp:
        (WebCore::CCThreadProxy::scheduledActionDrawAndSwap):

2011-11-22  Alexander Pavlov  <apavlov@chromium.org>

        Web Inspector: Design of the autocomplete suggest
        https://bugs.webkit.org/show_bug.cgi?id=72798

        Reviewed by Pavel Feldman.

        Implemented a combination of grayed text for the first/only completion and hid
        the suggest box for a single suggestion (the grayed text is displayed instead.)
        Drive-by fix for the "trailing spaces in the prompt" issue
        (got regressed when the suggest box was introduced for the first time.)

        * inspector/front-end/ConsoleView.js:
        (WebInspector.ConsoleView): Fix the "trailing spaces" issue
        * inspector/front-end/TextPrompt.js:
        (WebInspector.TextPrompt):
        (WebInspector.TextPrompt.prototype.renderAsBlock): Fix the "trailing spaces" issue
        (WebInspector.TextPrompt.prototype._attachInternal):
        (WebInspector.TextPrompt.prototype.acceptAutoComplete):
        (WebInspector.TextPrompt.prototype._completionsReady):
        (WebInspector.TextPrompt.prototype.applySuggestion):
        (WebInspector.TextPrompt.prototype.acceptSuggestion):
        (WebInspector.TextPrompt.SuggestBox.prototype._completionsReady):

2011-11-21  David Barr  <davidbarr@chromium.org>

        REGRESSION(r98542): Chromium: CSS text is rendered on page
        https://bugs.webkit.org/show_bug.cgi?id=71703

        Reviewed by Dimitri Glazkov.

        Matched UA declarations uncacheable when using simpleDefaultStyleSheet.

        Test: fast/css/style-tag-display-none.html

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

2011-11-21  Rob Brackett  <rob@robbrackett.com>
        
        If an event listener is a function, it should be called and not checked for handleEvent.
        This also covers callbacks, which follow the same spec but are implemented separately.
        https://bugs.webkit.org/show_bug.cgi?id=62518

        Reviewed by Sam Weinig.

        Tests: fast/events/dispatch-to-function-with-handle-event.html
               fast/js/callback-function-with-handle-event.html

        * bindings/js/JSCallbackData.cpp:
        (WebCore::JSCallbackData::invokeCallback):
        * bindings/js/JSEventListener.cpp:
        (WebCore::JSEventListener::handleEvent):

2011-11-21  Rakesh KN  <rakesh.kn@motorola.com>

        Need support for dirname attribute
        https://bugs.webkit.org/show_bug.cgi?id=65542

        Reviewed by Eric Seidel.

        Implemented 'dirname' form attribute.

        Tests: fast/forms/form-dirname-attribute.html
               fast/forms/submit-form-with-dirname-attribute-with-ancestor-dir-attribute.html
               fast/forms/submit-form-with-dirname-attribute-with-nonhtml-ancestor.html
               fast/forms/submit-form-with-dirname-attribute.html

        * html/HTMLAttributeNames.in:
        Added "dirname" attribute.
        * html/HTMLInputElement.idl:
        Add "dirName" property to HTMLInputElement interface.
        * html/HTMLTextAreaElement.cpp:
        (WebCore::HTMLTextAreaElement::appendFormData):
        Append dirname form data.
        * html/HTMLTextAreaElement.idl:
        Add "dirName" property to HTMLTextAreaElement interface.
        * html/HTMLTextFormControlElement.cpp:
        (WebCore::parentHTMLElement):
        Helper function which returns only HTML parent element.
        (WebCore::HTMLTextFormControlElement::directionForFormData):
        Helper function for finding directionality of the Element.
        * html/HTMLTextFormControlElement.h:
        Helper function for finding directionality of the Element.
        * html/TextFieldInputType.cpp:
        (WebCore::TextFieldInputType::appendFormData):
        Append dirname form data.
        * html/TextFieldInputType.h:
        Append dirname form data.

2011-11-21  Joshua Bell  <jsbell@chromium.org>

        IndexedDB: Close database connections, abort transactions, and terminate requests on stop()
        https://bugs.webkit.org/show_bug.cgi?id=72066

        Reviewed by Tony Chang.

        No new tests; addresses race conditions on document navigate/script context stop.

        * dom/DocumentEventQueue.cpp:
        (WebCore::DocumentEventQueue::enqueueEvent):
        * dom/DocumentEventQueue.h:
        * dom/EventQueue.h:
        * storage/IDBDatabase.cpp:
        (WebCore::IDBDatabase::IDBDatabase):
        (WebCore::IDBDatabase::~IDBDatabase):
        (WebCore::IDBDatabase::transaction):
        (WebCore::IDBDatabase::close):
        (WebCore::IDBDatabase::onVersionChange):
        (WebCore::IDBDatabase::enqueueEvent):
        (WebCore::IDBDatabase::stop):
        * storage/IDBDatabase.h:
        * storage/IDBFactory.cpp:
        (WebCore::IDBFactory::IDBFactory):
        (WebCore::IDBFactory::getDatabaseNames):
        (WebCore::IDBFactory::open):
        (WebCore::IDBFactory::deleteDatabase):
        * storage/IDBFactory.h:
        * storage/IDBObjectStore.cpp:
        (WebCore::IDBObjectStore::IDBObjectStore):
        (WebCore::IDBObjectStore::name):
        (WebCore::IDBObjectStore::keyPath):
        (WebCore::IDBObjectStore::indexNames):
        (WebCore::IDBObjectStore::get):
        (WebCore::IDBObjectStore::add):
        (WebCore::IDBObjectStore::put):
        (WebCore::IDBObjectStore::deleteFunction):
        (WebCore::IDBObjectStore::clear):
        (WebCore::IDBObjectStore::createIndex):
        (WebCore::IDBObjectStore::index):
        (WebCore::IDBObjectStore::deleteIndex):
        (WebCore::IDBObjectStore::openCursor):
        * storage/IDBObjectStore.h:
        * storage/IDBRequest.cpp:
        (WebCore::IDBRequest::IDBRequest):
        (WebCore::IDBRequest::abort):
        (WebCore::IDBRequest::onSuccess):
        (WebCore::IDBRequest::onSuccessWithContinuation):
        (WebCore::IDBRequest::stop):
        (WebCore::IDBRequest::dispatchEvent):
        (WebCore::IDBRequest::enqueueEvent):
        * storage/IDBRequest.h:
        * storage/IDBTransaction.cpp:
        (WebCore::IDBTransaction::IDBTransaction):
        (WebCore::IDBTransaction::abort):
        (WebCore::IDBTransaction::onAbort):
        (WebCore::IDBTransaction::onComplete):
        (WebCore::IDBTransaction::dispatchEvent):
        (WebCore::IDBTransaction::stop):
        (WebCore::IDBTransaction::enqueueEvent):
        * storage/IDBTransaction.h:
        * storage/IDBTransactionBackendImpl.cpp:
        (WebCore::IDBTransactionBackendImpl::abort):
        (WebCore::IDBTransactionBackendImpl::commit):
        * workers/WorkerEventQueue.cpp:
        (WebCore::WorkerEventQueue::enqueueEvent):
        * workers/WorkerEventQueue.h:

2011-11-21  James Robinson  <jamesr@chromium.org>

        [chromium] Avoid pushing dirty tiles to the impl layer
        https://bugs.webkit.org/show_bug.cgi?id=72765

        Reviewed by Kenneth Russell.

        If a tile has invalidations at pushPropertiesTo, then we know the contents of that tile are no longer valid even
        if they still have valid backing textures. This avoids pushing that texture to the impl side so it is not
        displayed to the user. The texture is still kept around (managed by the TextureManager) so that when we later do
        decide to update the contents for that tile we can use partial results if they are still valid.

        Covered by new unit test in TiledLayerChromiumTest.cpp

        * platform/graphics/chromium/TiledLayerChromium.cpp:
        (WebCore::UpdatableTile::isDirty):
        (WebCore::TiledLayerChromium::updateTileSizeAndTilingOption):
        (WebCore::TiledLayerChromium::setTileSize):
        (WebCore::TiledLayerChromium::setLayerTreeHost):
        (WebCore::TiledLayerChromium::createTiler):
        (WebCore::TiledLayerChromium::updateCompositorResources):
        (WebCore::TiledLayerChromium::pushPropertiesTo):
        * platform/graphics/chromium/TiledLayerChromium.h:
        (WebCore::TiledLayerChromium::setTextureFormat):
        * platform/graphics/chromium/cc/CCTiledLayerImpl.cpp:
        (WebCore::CCTiledLayerImpl::hasTileAt):
        (WebCore::CCTiledLayerImpl::drawTiles):
        * platform/graphics/chromium/cc/CCTiledLayerImpl.h:

2011-11-21  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] Speed up debug builds.
        https://bugs.webkit.org/show_bug.cgi?id=72882

        Reviewed by Tor Arne Vestbø.

        * Target.pri: Make BUILDING_WebCore available earlier, so it can be
        used by the build system.

2011-11-17  Robert Hogan  <robert@webkit.org>

        CSS 2.1 failure: empty-inline-003.htm fails
        https://bugs.webkit.org/show_bug.cgi?id=72638

        Reviewed by Ryosuke Niwa.

        Empty inline elements need to share their inline height with siblings.

        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::inlineFlowRequiresLineBox): In strict mode, add a LineBox for an empty element if it is
        going to affect the line-height.
        (WebCore::requiresLineBox): Pass LineInfo to inlineFlowRequiresLineBox
        (WebCore::RenderBlock::LineBreaker::nextLineBreak): Pass LineInfo to inlineFlowRequiresLineBox

2011-11-21  Adrienne Walker  <enne@google.com>

        [chromium] Remove incorrect render surface layer list asserts from compositor
        https://bugs.webkit.org/show_bug.cgi?id=72744

        Reviewed by James Robinson.

        These asserts are incorrect, because it's valid for the default render
        surface to be created but to have a root layer that doesn't draw. It
        won't get added to the single render surface and it'll have an empty
        layer list.

        Test: compositor_unittests

        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::drawLayersOntoRenderSurfaces):
        * platform/graphics/chromium/cc/CCLayerTreeHost.cpp:
        (WebCore::CCLayerTreeHost::paintLayerContents):
        (WebCore::CCLayerTreeHost::updateCompositorResources):

2011-11-21  Andreas Kling  <kling@webkit.org>

        StyleSheet: Move completeURL() to CSSStyleSheet.
        <http://webkit.org/b/72888>

        Reviewed by Antti Koivisto.

        Since completeURL() is only used on CSSStyleSheets, move it there (and make
        it non-virtual) to make StyleSheet a little leaner.

        * css/CSSStyleSheet.cpp:
        (WebCore::CSSStyleSheet::completeURL):
        * css/CSSStyleSheet.h:
        * css/StyleSheet.cpp:
        * css/StyleSheet.h:

2011-11-21  Robin Dunn  <robin@alldunn.com>

        [wx] Fix image translation calculations.
        https://bugs.webkit.org/show_bug.cgi?id=72892

        Reviewed by Kevin Ollivier.

        * platform/graphics/wx/ImageWx.cpp:
        (WebCore::Image::drawPattern):

2011-11-21  Scott Graham  <scottmg@chromium.org>

        copyright comment style to C from C++ for gamepad module
        https://bugs.webkit.org/show_bug.cgi?id=72894

        Reviewed by Sam Weinig.

        Just changes comment format, no code/test changes.

        * Modules/gamepad/Gamepad.cpp:
        * Modules/gamepad/Gamepad.h:
        * Modules/gamepad/Gamepad.idl:
        * Modules/gamepad/GamepadList.cpp:
        * Modules/gamepad/GamepadList.h:
        * Modules/gamepad/GamepadList.idl:

2011-11-21  Andreas Kling  <kling@webkit.org>

        JSC/CSSOM: Merge root() for style declaration objects.
        <http://webkit.org/b/72881>

        Reviewed by Antti Koivisto.

        Fold root(CSSMutableStyleDeclaration*) into root(CSSStyleDeclaration*),
        removing a duplicated chunk and making it a little easier on the eyes.

        * bindings/js/JSDOMBinding.h:
        (WebCore::root):

2011-11-21  Igor Oliveira  <igor.oliveira@openbossa.org>

        [WK2][Qt] Move Accelerated Composite animations to UIProcess
        https://bugs.webkit.org/show_bug.cgi?id=72753
        
        Add helper method to synchronize animations in TextureMapper.

        Reviewed by Noam Rosenthal.

        * platform/graphics/texmap/TextureMapperNode.cpp:
        (WebCore::TextureMapperNode::syncAnimationsRecursively):
        * platform/graphics/texmap/TextureMapperNode.h:

2011-11-21  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r100913.
        http://trac.webkit.org/changeset/100913
        https://bugs.webkit.org/show_bug.cgi?id=72885

        "Break Windows build" (Requested by kbalazs on #webkit).

        * platform/graphics/filters/FEConvolveMatrix.cpp:
        (WebCore::FEConvolveMatrix::platformApplySoftware):
        * platform/graphics/filters/FEConvolveMatrix.h:
        * platform/graphics/filters/FEGaussianBlur.cpp:
        (WebCore::FEGaussianBlur::platformApply):
        * platform/graphics/filters/FEGaussianBlur.h:
        * platform/graphics/filters/FELighting.cpp:
        (WebCore::FELighting::platformApplyGeneric):
        * platform/graphics/filters/FELighting.h:
        * platform/graphics/filters/FEMorphology.cpp:
        (WebCore::FEMorphology::platformApply):
        * platform/graphics/filters/FEMorphology.h:
        * platform/graphics/filters/FETurbulence.cpp:
        (WebCore::FETurbulence::platformApplySoftware):
        * platform/graphics/filters/FETurbulence.h:
        * platform/graphics/filters/arm/FELightingNEON.cpp:
        * platform/graphics/filters/arm/FELightingNEON.h:
        (WebCore::FELighting::platformApplyNeon):

2011-11-21  Balazs Kelemen  <kbalazs@webkit.org>

        Enable ParallelJobs by default
        https://bugs.webkit.org/show_bug.cgi?id=70032

        Reviewed by Zoltan Herczeg.

        Covered by existing tests.

        According to measurements on Mac and Linux it is a
        considerable speedup for SVG on multicore.

        Remove the ENABLE(PARALLEL_JOBS) guard. Fix the Windows build
        by qualifying ParallelJobs with the WTF namespace (otherwise
        MSVC believes it belongs to WebCore which is likely a compiler bug).

        * platform/graphics/filters/FEConvolveMatrix.cpp:
        (WebCore::FEConvolveMatrix::setInteriorPixelsWorker):
        (WebCore::FEConvolveMatrix::platformApplySoftware):
        * platform/graphics/filters/FEConvolveMatrix.h:
        * platform/graphics/filters/FEGaussianBlur.cpp:
        (WebCore::FEGaussianBlur::platformApplyWorker):
        (WebCore::FEGaussianBlur::platformApply):
        * platform/graphics/filters/FEGaussianBlur.h:
        * platform/graphics/filters/FELighting.cpp:
        (WebCore::FELighting::platformApplyGenericWorker):
        (WebCore::FELighting::platformApplyGeneric):
        * platform/graphics/filters/FELighting.h:
        * platform/graphics/filters/FEMorphology.cpp:
        (WebCore::FEMorphology::platformApplyWorker):
        (WebCore::FEMorphology::platformApply):
        * platform/graphics/filters/FEMorphology.h:
        * platform/graphics/filters/FETurbulence.cpp:
        (WebCore::FETurbulence::fillRegionWorker):
        (WebCore::FETurbulence::platformApplySoftware):
        * platform/graphics/filters/FETurbulence.h:
        * platform/graphics/filters/arm/FELightingNEON.cpp:
        (WebCore::FELighting::platformApplyNeonWorker):
        * platform/graphics/filters/arm/FELightingNEON.h:
        (WebCore::FELighting::platformApplyNeon):

2011-11-21  Antti Koivisto  <antti@apple.com>

        Remove CSSStyleSelector::m_additionalAttributeStyleDecls field
        https://bugs.webkit.org/show_bug.cgi?id=72876

        Reviewed by Andreas Kling.

        There is no reason for this temporary to be a field.

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::matchAllRules):
        * css/CSSStyleSelector.h:

2011-11-21  Pavel Feldman  <pfeldman@google.com>

        Web Inspector: [REGRESSION] Assertion failed in ScriptsPanel.js
        https://bugs.webkit.org/show_bug.cgi?id=72877

        Reviewed by Yury Semikhatsky.

        * inspector/front-end/ScriptsPanel.js:

2011-11-18  Pavel Feldman  <pfeldman@google.com>

        Web Inspector: get rid of Panel::reset in the front-end.
        https://bugs.webkit.org/show_bug.cgi?id=72587

        I'm slowly getting rid of the Inspector protocol domain. It currently
        contains methods that did not find their home in the meaningful domains.
        This change removes reset protocol method.

        Reviewed by Yury Semikhatsky.

        * inspector/Inspector.json:
        * inspector/InspectorAgent.cpp:
        (WebCore::InspectorAgent::didCommitLoad):
        * inspector/InspectorDebuggerAgent.cpp:
        (WebCore::InspectorDebuggerAgent::didClearMainFrameWindowObject):
        * inspector/InspectorDebuggerAgent.h:
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::didClearWindowObjectInWorldImpl):
        (WebCore::InspectorInstrumentation::didCommitLoadImpl):
        * inspector/front-end/ApplicationCacheModel.js:
        (WebInspector.ApplicationCacheModel.prototype._frameNavigated):
        (WebInspector.ApplicationCacheModel.prototype._frameDetached):
        * inspector/front-end/DebuggerModel.js:
        (WebInspector.DebuggerModel.prototype._globalObjectCleared):
        (WebInspector.DebuggerDispatcher.prototype.globalObjectCleared):
        * inspector/front-end/DebuggerPresentationModel.js:
        (WebInspector.DebuggerPresentationModel):
        (WebInspector.DebuggerPresentationModel.prototype._debuggerReset):
        * inspector/front-end/ExtensionServer.js:
        (WebInspector.ExtensionServer):
        (WebInspector.ExtensionServer.prototype._mainFrameNavigated):
        * inspector/front-end/JavaScriptContextManager.js:
        (WebInspector.JavaScriptContextManager.prototype._frameDetached):
        (WebInspector.FrameEvaluationContext.prototype.get frameId):
        * inspector/front-end/NetworkLog.js:
        (WebInspector.NetworkLog):
        (WebInspector.NetworkLog.prototype._mainFrameNavigated):
        * inspector/front-end/NetworkPanel.js:
        (WebInspector.NetworkLogView):
        (WebInspector.NetworkLogView.prototype._mainFrameNavigated):
        * inspector/front-end/ResourceTreeModel.js:
        (WebInspector.ResourceTreeModel.prototype._frameNavigated):
        (WebInspector.ResourceTreeModel.prototype._frameDetached):
        (WebInspector.ResourceTreeModel.prototype._clearChildFramesAndResources):
        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.ResourcesPanel.prototype._reset):
        (WebInspector.ResourcesPanel.prototype._frameDetached):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype._debuggerWasDisabled):
        (WebInspector.ScriptsPanel.prototype._reset):
        * inspector/front-end/WorkerManager.js:
        (WebInspector.WorkerManager):
        (WebInspector.WorkerManager.prototype._mainFrameNavigated):
        * inspector/front-end/inspector.js:

2011-06-20  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: introduce InspectorFrontendAPI for actions initiated from the application menu.
        https://bugs.webkit.org/show_bug.cgi?id=62985

        Both: inspector protocol and WebCore/InspectorController have a number of unnecessary
        methods for plumbing the menu action handlers through the WebKit and WebCore.
        I intend to remove this menu support from the protocol and WebCore/InspectorController API.
        I am starting with exposing the new front-end API in the WebCore and using it in the WebKit/mac port.
        WebKit/win and WebKit2 to follow.

        Reviewed by Yury Semikhatsky.

        * WebCore.exp.in:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * inspector/InspectorFrontendClientLocal.cpp:
        (WebCore::InspectorFrontendClientLocal::InspectorFrontendClientLocal):
        (WebCore::InspectorFrontendClientLocal::frontendLoaded):
        (WebCore::InspectorFrontendClientLocal::setAttachedWindow):
        (WebCore::InspectorFrontendClientLocal::isDebuggingEnabled):
        (WebCore::InspectorFrontendClientLocal::setDebuggingEnabled):
        (WebCore::InspectorFrontendClientLocal::isJavaScriptProfilingEnabled):
        (WebCore::InspectorFrontendClientLocal::setJavaScriptProfilingEnabled):
        (WebCore::InspectorFrontendClientLocal::isTimelineProfilingEnabled):
        (WebCore::InspectorFrontendClientLocal::setTimelineProfilingEnabled):
        (WebCore::InspectorFrontendClientLocal::isProfilingJavaScript):
        (WebCore::InspectorFrontendClientLocal::startProfilingJavaScript):
        (WebCore::InspectorFrontendClientLocal::stopProfilingJavaScript):
        (WebCore::InspectorFrontendClientLocal::evaluateAsBoolean):
        (WebCore::InspectorFrontendClientLocal::evaluateOnLoad):
        * inspector/InspectorFrontendClientLocal.h:
        * inspector/front-end/InspectorFrontendAPI.js: Added.
        (InspectorFrontendAPI.isDebuggingEnabled):
        (InspectorFrontendAPI.setDebuggingEnabled):
        (InspectorFrontendAPI.isJavaScriptProfilingEnabled):
        (InspectorFrontendAPI.setJavaScriptProfilingEnabled):
        (InspectorFrontendAPI.isTimelineProfilingEnabled):
        (InspectorFrontendAPI.setTimelineProfilingEnabled):
        (InspectorFrontendAPI.isProfilingJavaScript):
        (InspectorFrontendAPI.startProfilingJavaScript):
        (InspectorFrontendAPI.stopProfilingJavaScript):
        (InspectorFrontendAPI.setAttachedWindow):
        * inspector/front-end/ProfileView.js:
        (WebInspector.CPUProfileType):
        (WebInspector.CPUProfileType.prototype.isRecordingProfile):
        (WebInspector.CPUProfileType.prototype.startRecordingProfile):
        (WebInspector.CPUProfileType.prototype.stopRecordingProfile):
        * inspector/front-end/ProfilesPanel.js:
        (WebInspector.ProfilesPanel.prototype.get profilerEnabled):
        (WebInspector.ProfilesPanel.prototype.enableProfiler):
        (WebInspector.ProfilesPanel.prototype.disableProfiler):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel):
        (WebInspector.ScriptsPanel.prototype.get debuggingEnabled):
        (WebInspector.ScriptsPanel.prototype.enableDebugging):
        (WebInspector.ScriptsPanel.prototype.disableDebugging):
        (WebInspector.ScriptsPanel.prototype.toggleDebugging):
        * inspector/front-end/TimelinePanel.js:
        (WebInspector.TimelinePanel.prototype._memoryOverviewItemSelected):
        (WebInspector.TimelinePanel.prototype.setTimelineProfilingEnabled):
        (WebInspector.TimelinePanel.prototype.get timelineProfilingEnabled):
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/inspector.html:
        * inspector/front-end/inspector.js:

2011-11-18  Alexander Pavlov  <apavlov@chromium.org>

        Web Inspector: [Protocol] Retain a single universal method for loading a required combination of element styles
        https://bugs.webkit.org/show_bug.cgi?id=72701

        Reviewed by Pavel Feldman.

        * inspector/Inspector.json:
        * inspector/InspectorCSSAgent.cpp:
        (WebCore::InspectorCSSAgent::getMatchedStylesForNode):
        (WebCore::InspectorCSSAgent::getInlineStylesForNode):
        (WebCore::InspectorCSSAgent::getComputedStyleForNode):
        * inspector/InspectorCSSAgent.h:
        * inspector/front-end/AuditRules.js:
        (WebInspector.AuditRules.ImageDimensionsRule.prototype.doRun):
        (WebInspector.AuditRules.ImageDimensionsRule.prototype.doRun.getStyles.inlineCallback):
        (WebInspector.AuditRules.ImageDimensionsRule.prototype.doRun.getStyles.matchedCallback):
        (WebInspector.AuditRules.ImageDimensionsRule.prototype.doRun.getStyles):
        * inspector/front-end/CSSStyleModel.js:
        (WebInspector.CSSStyleModel.prototype.getMatchedStylesAsync):
        (WebInspector.CSSStyleModel.prototype.getComputedStyleAsync):
        (WebInspector.CSSStyleModel.prototype.getInlineStylesAsync):
        * inspector/front-end/MetricsSidebarPane.js:
        (WebInspector.MetricsSidebarPane.prototype._innerUpdate):
        * inspector/front-end/StylesSidebarPane.js:
        (WebInspector.StylesSidebarPane.prototype.get forcedPseudoClasses):
        (WebInspector.StylesSidebarPane.prototype._executeRebuildUpdate):
        (WebInspector.StylesSidebarPane.prototype._executeRebuildUpdate.inlineCallback):
        (WebInspector.StylesSidebarPane.prototype._executeRebuildUpdate.computedCallback):
        (WebInspector.StylesSidebarPane.prototype._innerUpdate):

2011-11-21  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r100856.
        http://trac.webkit.org/changeset/100856
        https://bugs.webkit.org/show_bug.cgi?id=72867

        New test fast/css/style-tag-display-none.html fails on
        Chromium (Requested by steveblock on #webkit).

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

2011-11-21  Jochen Eisinger  <jochen@chromium.org>

        Implement Meta referrer
        https://bugs.webkit.org/show_bug.cgi?id=72674

        Reviewed by Adam Barth.

        http://wiki.whatwg.org/wiki/Meta_referrer

        Tests: http/tests/security/referrer-policy-always.html
               http/tests/security/referrer-policy-default.html
               http/tests/security/referrer-policy-https-always.html
               http/tests/security/referrer-policy-https-default.html
               http/tests/security/referrer-policy-https-never.html
               http/tests/security/referrer-policy-https-origin.html
               http/tests/security/referrer-policy-never.html
               http/tests/security/referrer-policy-origin.html
               http/tests/security/referrer-policy-redirect.html
               http/tests/security/referrer-policy-rel-noreferrer.html

        * WebCore.exp.in: updated
        * dom/Document.cpp:
        (WebCore::Document::Document):
        (WebCore::Document::processReferrerPolicy):
        * dom/Document.h:
        (WebCore::Document::referrerPolicy):
        * html/HTMLAnchorElement.cpp:
        (WebCore::HTMLAnchorElement::handleClick):
        * html/HTMLMetaElement.cpp:
        (WebCore::HTMLMetaElement::process):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadFrameRequest):
        (WebCore::FrameLoader::loadResourceSynchronously):
        * loader/PingLoader.cpp:
        (WebCore::PingLoader::loadImage):
        (WebCore::PingLoader::sendPing):
        (WebCore::PingLoader::reportContentSecurityPolicyViolation):
        * loader/SubframeLoader.cpp:
        (WebCore::SubframeLoader::loadSubframe):
        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::create):
        * page/SecurityPolicy.cpp:
        (WebCore::SecurityPolicy::generateReferrerHeader):
        * page/SecurityPolicy.h:

2011-11-21  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: ApplicationCache view should show navigator.onLine indicator.
        https://bugs.webkit.org/show_bug.cgi?id=72618

        Reviewed by Pavel Feldman.

        * inspector/InspectorApplicationCacheAgent.cpp:
        (WebCore::InspectorApplicationCacheAgent::enable):
        * inspector/front-end/ApplicationCacheItemsView.js:
        (WebInspector.ApplicationCacheItemsView):
        (WebInspector.ApplicationCacheItemsView.prototype.wasShown):
        * inspector/front-end/ApplicationCacheModel.js:
        (WebInspector.ApplicationCacheModel):
        (WebInspector.ApplicationCacheModel.prototype.get onLine):
        (WebInspector.ApplicationCacheModel.prototype._networkStateUpdated):
        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.ResourcesPanel.prototype.showApplicationCache):
        (WebInspector.ResourcesPanel.prototype._applicationCacheNetworkStateChanged):

2011-11-21  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix make distcheck build.

        * GNUmakefile.list.am:

2011-11-21  Dominic Mazzoni  <dmazzoni@google.com>

        Accessibility: Multiselect list boxes need to report the active option in addition to which items are selected.
        https://bugs.webkit.org/show_bug.cgi?id=72479

        Reviewed by Chris Fleizach.

        Test: accessibility/multiselect-list-reports-active-option.html

        * accessibility/AccessibilityListBoxOption.cpp:
        (WebCore::AccessibilityListBoxOption::isSelectedOptionActive):
        * accessibility/AccessibilityListBoxOption.h:
        * accessibility/AccessibilityObject.h:
        (WebCore::AccessibilityObject::isSelectedOptionActive):

2011-11-21  Yuta Kitamura  <yutak@chromium.org>

        [Qt] WebSocket close tests are failing
        https://bugs.webkit.org/show_bug.cgi?id=72865

        Reviewed by Simon Hausmann.

        * platform/network/qt/SocketStreamHandleQt.cpp:
        (WebCore::SocketStreamHandlePrivate::close):
        Emit didCloseSocketStream() callback even before the connection is established.
        Call m_socket->abort() to prevent "connected" signal from firing.

2011-11-21  Shinya Kawanaka  <shinyak@google.com>

        Refactoring: SpellChecker::requestCheckingFor should take Range instead of Node.
        https://bugs.webkit.org/show_bug.cgi?id=72847

        Reviewed by Hajime Morita.

        Covered by existing test.

        * editing/Editor.cpp:
        (WebCore::Editor::replaceSelectionWithFragment):
          Passes Range to requestCheckingFor instead of Node.
        * editing/SpellChecker.cpp:
          Changed argument type from Node to Range.
          The corresponding changes are also done in dependent methods.
        (WebCore::SpellChecker::initRequest):
        (WebCore::SpellChecker::clearRequest):
        (WebCore::SpellChecker::canCheckAsynchronously):
        (WebCore::SpellChecker::isBusy):
        (WebCore::SpellChecker::isValid):
        (WebCore::SpellChecker::isCheckable):
        (WebCore::SpellChecker::requestCheckingFor):
          Changed argument type from Node to Range.
        (WebCore::SpellChecker::doRequestCheckingFor):
        (WebCore::SpellChecker::didCheck):
        * editing/SpellChecker.h:

2011-11-20  Kenichi Ishibashi  <bashi@chromium.org>

        [Chromium] Remove old getFontFamilyForCharacters() and familyForChars() APIs.
        https://bugs.webkit.org/show_bug.cgi?id=72844

        Respects bold and italic properties that is given by fontconfig.

        Reviewed by Darin Fisher.

        * platform/graphics/chromium/FontCacheLinux.cpp:
        (WebCore::FontCache::getFontDataForCharacters): Removed #if and old logic.

2011-11-20  Noel Gordon  <noel.gordon@gmail.com>

        [chromium] Remove qt/QtMobileWebStyle from the gyp projects
        https://bugs.webkit.org/show_bug.cgi?id=72843

        Reviewed by Antonio Gomes.

        platform/qt/QtMobileWebStyle.{h,cpp} were removed in r100123

        * WebCore.gypi: remove platform/qt/QtMobileWebStyle.{h,cpp}

2011-11-20  Kentaro Hara  <haraken@chromium.org>

        Unreviewed. Rebaselined run-bindings-tests results.

        * bindings/scripts/test/CPP/WebDOMFloat64Array.cpp:
        (WebDOMFloat64Array::WebDOMFloat64Array):
        (WebDOMFloat64Array::impl):
        (toWebCore):
        (toWebKit):
        * bindings/scripts/test/CPP/WebDOMFloat64Array.h:

2011-11-20  Adam Barth  <abarth@webkit.org>

        REGRESSION(r100691): Safari error pages and Growl notifications fail to load stylesheets
        https://bugs.webkit.org/show_bug.cgi?id=72836

        Reviewed by Sam Weinig.

        This patch removes a (minor) security mitigation.  Previously, we tried
        sequester "directory listings" into unique origins to make it more
        difficult for an attacker to crawl the user's local file system.
        Unfortunately, this mitigation doesn't really buy us much security
        because if the attacker has access to local files, we've probably lost
        anyway.

        The larger problem, however, is that this condition is overly
        complicated and has broken in sublte ways several times in its
        (relatively short) lifetime.  In the cases reported in this bug, we see
        that this check affects error pages in Safari and Growl notifications,
        even those have nothing to do with directory listings.

        If we have our heart set on this directory listing mitigation, we'll
        need a more robust way of triggering the behavior than examining URLs
        and guess whether they contain directory listings.  For example, if we
        implement Allow-From or Access-Control-Deny-Origin, then the embedder
        can supply those policies along with the directory listings.  Those
        seem like much better solutions than the in-engine hack this patch
        removes.

        * page/SecurityOrigin.cpp:
        (WebCore::shouldTreatAsUniqueOrigin):

2011-10-17  Antonio Gomes  <agomes@rim.com>

        Pass a Frame* parameter in EditorClient::respondToChangedSelection
        https://bugs.webkit.org/show_bug.cgi?id=70248

        Reviewed by Ryosuke Niwa.

        Most of the port specific implementations of EditorClient::respondToChangedSelection
        (like EditorClient{Qt,Gtk,etc}) are wrongly relying on FocusController::focusedOrMainFrame
        method to get the Frame where the selection is happening on.
        It is not right, since a selection can be easily triggered in an inner
        frame that is not focused.

        No new tests since it is a hard thing to test without
        to hook into editor client in layout tests. We could
        change the "Dumped Delegate" messages, but it would
        require a rebasile of +1200 for a minor change.

        * editing/Editor.cpp: Pass the Frame on where the selection is changing to the client.
        (WebCore::Editor::respondToChangedSelection): Ditto.
        (WebCore::Editor::changeSelectionAfterCommand): Ditto.
        (WebCore::EmptyEditorClient::respondToChangedSelection):
        * page/EditorClient.h:  Pass Frame* to indicate where the selection is happening.
        * loader/EmptyClients.h: Changed signature as per base class change.

2011-11-17  Mark Rowe  <mrowe@apple.com>

        <http://webkit.org/b/72646> Disable deprecation warnings around code where we cannot easily
        switch away from the deprecated APIs.

        Reviewed by Sam Weinig.

        * platform/mac/WebCoreNSStringExtras.mm:
        * platform/network/cf/SocketStreamHandleCFNet.cpp:
        (WebCore::SocketStreamHandle::reportErrorToClient):

2011-11-19  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] C++ bindings build fix for move of array classes to WTF.
        
        * bindings/scripts/CodeGeneratorCPP.pm:
        (GetCPPTypeGetter):
        (GetNamespaceForClass):
        (GenerateHeader):
        (GenerateImplementation):

2011-11-19  Scott Graham  <scottmg@chromium.org>

        Move gamepad to Modules/ (+ some cleanup)
        https://bugs.webkit.org/show_bug.cgi?id=72785

        Reviewed by Adam Barth.

        Move main files from page/ to Modules/gamepad/. #include guard the
        gamepad header inclusions in Navigator.cpp to avoid including for
        ports that do not enable GAMEPAD.

        * Modules/gamepad/Gamepad.cpp: Renamed from Source/WebCore/page/Gamepad.cpp.
        (WebCore::Gamepad::Gamepad):
        (WebCore::Gamepad::axes):
        (WebCore::Gamepad::buttons):
        (WebCore::Gamepad::~Gamepad):
        * Modules/gamepad/Gamepad.h: Renamed from Source/WebCore/page/Gamepad.h.
        * Modules/gamepad/Gamepad.idl: Renamed from Source/WebCore/page/Gamepad.idl.
        * Modules/gamepad/GamepadList.cpp: Renamed from Source/WebCore/page/GamepadList.cpp.
        (WebCore::GamepadList::~GamepadList):
        (WebCore::GamepadList::set):
        (WebCore::GamepadList::length):
        (WebCore::GamepadList::item):
        * Modules/gamepad/GamepadList.h: Renamed from Source/WebCore/page/GamepadList.h.
        (WebCore::GamepadList::create):
        (WebCore::GamepadList::GamepadList):
        * Modules/gamepad/GamepadList.idl: Renamed from Source/WebCore/page/GamepadList.idl.
        * WebCore.gyp/WebCore.gyp:
        * WebCore.gypi:
        * page/Navigator.cpp:

2011-11-19  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r100834.
        http://trac.webkit.org/changeset/100834
        https://bugs.webkit.org/show_bug.cgi?id=72806

        this patch makes Qt run-webkit-test exit before finishing
        (Requested by igoroliveira on #webkit).

        * platform/graphics/texmap/TextureMapperNode.cpp:
        * platform/graphics/texmap/TextureMapperNode.h:

2011-11-19  Huang Dongsung  <luxtella@company100.net>

        Remove WebCore/ForwardingHeaders/runtime/JSObjectWithGlobalObject.h because
        JSObjectWithGlobalObject.h has been removed.
        https://bugs.webkit.org/show_bug.cgi?id=72794

        r94701 removed JSObjectWithGlobalObject.h.

        Reviewed by Oliver Hunt.

        * ForwardingHeaders/runtime/JSObjectWithGlobalObject.h: Removed.

2011-11-19  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector:[protocol] actual JSON messages do not conform to Inspector.json in InspectorApplicationCacheAgent.cpp
        https://bugs.webkit.org/show_bug.cgi?id=72734

        Reviewed by Timothy Hatcher.

        * inspector/Inspector.json:

2011-11-19  David Barr  <davidbarr@chromium.org>

        REGRESSION(r98542): Chromium: CSS text is rendered on page
        https://bugs.webkit.org/show_bug.cgi?id=71703

        Reviewed by Antti Koivisto.

        Matched UA declarations uncacheable when using simpleDefaultStyleSheet.

        Test: fast/css/style-tag-display-none.html

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

2011-11-19  Jay Civelli  <jcivelli@chromium.org>

        When loading a MHTML document, make sure we set the base URL before
        we notify the frame was committed (so the document has the right base
        URL when the notification happens). 
        https://bugs.webkit.org/show_bug.cgi?id=72788

        Reviewed by Adam Barth.

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

2011-11-19  Adam Barth  <abarth@webkit.org>

        Integrate Source/WTF with the Chromium build system
        https://bugs.webkit.org/show_bug.cgi?id=72790

        Reviewed by Eric Seidel.

        Add a dependency on the new WTF.

        * WebCore.gyp/WebCore.gyp:

2011-11-18  Takashi Toyoshima  <toyoshim@chromium.org>

        [Chromium] [WebSocket] export WebSocketChannel interface for plugins
        https://bugs.webkit.org/show_bug.cgi?id=72016

        Reviewed by Darin Fisher.

        Add a interface to send raw binary data.
        This interface is used by WebWebSocketChannel implementation
        in WebKit API.

        No new tests because just export a interface.

        * websockets/WebSocketChannel.cpp:
        (WebCore::WebSocketChannel::send):
        * websockets/WebSocketChannel.h:

2011-11-18  Vineet Chaudhary  <vineet.chaudhary@motorola.com>

        https://bugs.webkit.org/show_bug.cgi?id=72591
        Remove document.width / document.height

        Reviewed by Darin Adler.

        Removed document.width/document.height from JS bindings,
        but keeping the same for ObjC bindings. Also it should use
        document.body.clientWidth and document.body.clientHeight instead.

        * html/HTMLDocument.idl:

2011-11-18  Martin Robinson  <mrobinson@igalia.com>

        Fix the GTK+ build.

        * page/Navigator.idl: Properly disable the webkitGamepads API if gamepad
        isn't enabled at compile time.

2011-11-18  Daniel Bates  <dbates@rim.com>

        Add CMake build infrastructure for the BlackBerry port
        https://bugs.webkit.org/show_bug.cgi?id=72768

        Reviewed by Antonio Gomes.

        * CMakeLists.txt: At this time the BlackBerry port doesn't support generating
          DOM bindings from the SVG IDLs. See WebKit bug #72773.
        * PlatformBlackBerry.cmake: Added.

2011-11-18  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r100826.
        http://trac.webkit.org/changeset/100826
        https://bugs.webkit.org/show_bug.cgi?id=72786

        Broke Chromium Mac build (Requested by aklein on #webkit).

        * page/ChromeClient.h:
        * page/FrameView.cpp:
        * page/FrameView.h:
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::wheelEvent):
        * platform/ScrollView.h:
        * platform/ScrollableArea.h:
        (WebCore::ScrollableArea::scrollbarStyleChanged):
        * platform/mac/ScrollAnimatorMac.mm:
        (WebCore::ScrollAnimatorMac::updateScrollerStyle):

2011-11-18  Alpha Lam  <hclam@chromium.org>

        [chromium] composited layers are blurry with a zoom-in page scale factor
        https://bugs.webkit.org/show_bug.cgi?id=71225

        Reviewed by James Robinson.

        Pass contents scale factor to the compositor such that it can:
        1. Adjust contentBounds() of the compositoer layers with content scale.
        2. Apply the content scale in the painter for texture update in better resolution.
        3. Apply the content scale to the dirty rect in CanvasLayerTextureUpdater.

        This change fixed blurry problem for all tiled layer types and is not limited to
        position:fixed layers.

        Tests: compositing/geometry/fixed-position-composited-page-scale-down.html
               compositing/geometry/fixed-position-composited-page-scale.html
               compositing/geometry/fixed-position-iframe-composited-page-scale-down.html
               compositing/geometry/fixed-position-iframe-composited-page-scale.html
               compositing/geometry/fixed-position-transform-composited-page-scale-down.html
               compositing/geometry/fixed-position-transform-composited-page-scale.html

        * platform/graphics/chromium/GraphicsLayerChromium.cpp:
        (WebCore::GraphicsLayerChromium::setTransform):
        (WebCore::GraphicsLayerChromium::updateLayerPreserves3D):
        (WebCore::GraphicsLayerChromium::updateContentsScale):
        (WebCore::GraphicsLayerChromium::contentsScale):
        (WebCore::GraphicsLayerChromium::deviceOrPageScaleFactorChanged):
        * platform/graphics/chromium/GraphicsLayerChromium.h:
        * platform/graphics/chromium/ImageLayerChromium.cpp:
        (WebCore::ImageLayerTextureUpdater::prepareToUpdate):
        (WebCore::ImageLayerChromium::needsContentsScale):
        * platform/graphics/chromium/ImageLayerChromium.h:
        * platform/graphics/chromium/LayerChromium.cpp:
        (WebCore::LayerChromium::LayerChromium):
        (WebCore::LayerChromium::setContentsScale):
        * platform/graphics/chromium/LayerChromium.h:
        (WebCore::LayerChromium::needsContentsScale):
        (WebCore::LayerChromium::contentsScale):
        * platform/graphics/chromium/LayerTextureUpdater.h:
        * platform/graphics/chromium/LayerTextureUpdaterCanvas.cpp:
        (WebCore::LayerTextureUpdaterCanvas::paintContents):
        (WebCore::LayerTextureUpdaterBitmap::prepareToUpdate):
        (WebCore::LayerTextureUpdaterSkPicture::prepareToUpdate):
        * platform/graphics/chromium/LayerTextureUpdaterCanvas.h:
        * platform/graphics/chromium/TiledLayerChromium.cpp:
        (WebCore::TiledLayerChromium::needsContentsScale):
        (WebCore::TiledLayerChromium::contentBounds):
        (WebCore::TiledLayerChromium::prepareToUpdate):
        * platform/graphics/chromium/TiledLayerChromium.h:

2011-11-18  Igor Oliveira  <igor.oliveira@openbossa.org>

        [WK2][Qt] Move Accelerated Composite animations to UIProcess
        https://bugs.webkit.org/show_bug.cgi?id=72753

        Add helper method to synchronize animations in TextureMapper.

        Reviewed by Noam Rosenthal.

        * platform/graphics/texmap/TextureMapperNode.cpp:
        (WebCore::TextureMapperNode::syncAnimationsRecursively):
        * platform/graphics/texmap/TextureMapperNode.h:

2011-11-18  Scott Graham  <scottmg@chromium.org>

        IDL changes for gamepad support
        https://bugs.webkit.org/show_bug.cgi?id=71753

        Reviewed by Adam Barth.

        IDL changes and associated plumbing to expose list of gamepad objects
        on navigator object (per current spec). Full patch is
        https://bugs.webkit.org/show_bug.cgi?id=69451. Only basic existence
        test until more plumbing in future patches.

        Test: gamepad/gamepad-api.html

        * WebCore.gypi:
        * bindings/generic/RuntimeEnabledFeatures.h:
        (WebCore::RuntimeEnabledFeatures::setWebkitGamepadsEnabled):
        (WebCore::RuntimeEnabledFeatures::webkitGamepadsEnabled):
        * page/Gamepad.cpp: Added.
        (WebCore::Gamepad::Gamepad):
        (WebCore::Gamepad::axes):
        (WebCore::Gamepad::buttons):
        (WebCore::Gamepad::~Gamepad):
        * page/Gamepad.h: Added.
        * page/Gamepad.idl: Added.
        * page/GamepadList.cpp: Added.
        (WebCore::GamepadList::~GamepadList):
        (WebCore::GamepadList::set):
        (WebCore::GamepadList::length):
        (WebCore::GamepadList::item):
        * page/GamepadList.h: Added.
        (WebCore::GamepadList::create):
        (WebCore::GamepadList::GamepadList):
        * page/GamepadList.idl: Added.
        * page/Navigator.cpp:
        (WebCore::Navigator::webkitGamepads):
        * page/Navigator.h:
        * page/Navigator.idl:

2011-11-18  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r100693.
        http://trac.webkit.org/changeset/100693
        https://bugs.webkit.org/show_bug.cgi?id=72779

        This patch caused a rendering regression (see bug 72770)
        (Requested by philip__ on #webkit).

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::setStyle):
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::diff):

2011-11-18  Simon Fraser  <simon.fraser@apple.com>

        Reflection on composited element doesn't update if the element changes to show no content
        https://bugs.webkit.org/show_bug.cgi?id=72774

        Reviewed by Chris Marrin.
        
        When a style change results in a reflected element losing its backing store,
        we need to clear the backing stores on the layer clones as well.

        Test: compositing/reflections/become-simple-composited-reflection.html

        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::updateLayerDrawsContent):

2011-11-18  Daniel Cheng  <dcheng@chromium.org>

        [chromium] Use correct backing store for ChromiumDataObject in pasteboard writes.
        https://bugs.webkit.org/show_bug.cgi?id=72767

        Reviewed by Tony Chang.

        Covered by existing tests.

        * editing/chromium/EditorChromium.cpp:
        (WebCore::Editor::newGeneralClipboard):
        * page/chromium/EventHandlerChromium.cpp:
        (WebCore::EventHandler::createDraggingClipboard):
        * platform/chromium/ChromiumDataObject.cpp:
        (WebCore::ChromiumDataObject::types):
        (WebCore::ChromiumDataObject::getData):
        (WebCore::ChromiumDataObject::containsFilenames):
        (WebCore::ChromiumDataObject::ChromiumDataObject):
        * platform/chromium/ChromiumDataObject.h:
        (WebCore::ChromiumDataObject::createFromPasteboard):
        (WebCore::ChromiumDataObject::create):
        (WebCore::ChromiumDataObject::storageMode):
        * platform/chromium/ClipboardChromium.cpp:
        (WebCore::ClipboardChromium::hasData):

2011-11-18  Chris Evans  <cevans@google.com>

        Crash with ranges across a detached, reparented node tree
        https://bugs.webkit.org/show_bug.cgi?id=72757

        Reviewed by Adam Barth.

        Test: fast/dom/move-detached-child-in-range.html

        * dom/RangeBoundaryPoint.h:
        (WebCore::RangeBoundaryPoint::childBefore): protect the raw child node from getting pulled from under us.

2011-11-18  Beth Dakin  <bdakin@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=72551
        When the recommended scrollbar style changes, WKView's tracking options should 
        adjust accordingly
        -and corresponding-
        <rdar://problem/10409328>

        Reviewed by Darin Adler.

        This new ChromeClient function is called when the recommended scrollbar style 
        changes. This way, WebKit can respond to the change by adjusting its mouse 
        tracking.
        * page/ChromeClient.h:
        (WebCore::ChromeClient::recommendedScrollbarStyleDidChange):

        Existing ScrollableArea function scrollbarStyleChanged() now takes an int 
        indicating the new scrollbar style and a bool indicating whether it is necessary 
        to force an update. It used to be the case that this function was ONLY used to 
        force an update (and only called when an updated was needed), but now that it must 
        also call into the ChromeClient, it is necessary to include a bool tracking 
        whether we need to force an update. New implementation on FrameView is responsible 
        for calling ChromeClient, and then that calls into the pre-existing ScrollView 
        function for the forceUpdate part.
        * page/FrameView.cpp:
        (WebCore::FrameView::scrollbarStyleChanged):
        * page/FrameView.h:
        * platform/ScrollView.cpp:
        (WebCore::ScrollView:: scrollbarStyleChanged):
        * platform/ScrollView.h:
        * platform/ScrollableArea.h:
        (WebCore::ScrollableArea::scrollbarStyleChanged):
        * platform/mac/ScrollAnimatorMac.mm:
        (WebCore::ScrollAnimatorMac::updateScrollerStyle):

2011-11-18  Kelly Norton  <knorton@google.com>

        Fixes several more void functions in RenderObject that return values.
        https://bugs.webkit.org/show_bug.cgi?id=72750

        Reviewed by Adam Barth.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::updateBeforeAfterContent):
        (WebCore::RenderBlock::addChildToContinuation):
        (WebCore::RenderBlock::addChildToAnonymousColumnBlocks):
        (WebCore::RenderBlock::addChild):
        (WebCore::RenderBlock::addChildIgnoringContinuation):

2011-11-18  Shawn Singh  <shawnsingh@chromium.org>

        [chromium] Add some useful text to existing debug dump
        https://bugs.webkit.org/show_bug.cgi?id=72576

        Reviewed by James Robinson.

        No new tests needed.

        * platform/graphics/chromium/cc/CCLayerImpl.cpp:
        (WebCore::CCLayerImpl::dumpLayerProperties):
        * platform/graphics/chromium/cc/CCRenderSurface.cpp:
        (WebCore::CCRenderSurface::dumpSurface):

2011-11-18  Xiaomei Ji  <xji@chromium.org>

        REGRESSION: rtl horizontal scrollbar / resize bug - Body shifts on resize when scrolled all the way to the left
        https://bugs.webkit.org/show_bug.cgi?id=70395

        Reviewed by Tony Chang.

        This patch fixes the problem in Mac and Chromium Mac.
   
        The existing test fast/dom/rtl-scroll-to-leftmost-and-resize.html seems does not really work in Mac DRT
        (the browswer window is not resized). It works in Chromium-Mac. And Chromium-Mac's code
        is forked from Mac.

        * platform/chromium/ScrollAnimatorChromiumMac.mm:
        (WebCore::ScrollAnimatorChromiumMac::immediateScrollToPoint):
        * platform/mac/ScrollAnimatorMac.mm:
        (WebCore::ScrollAnimatorMac::immediateScrollToPoint):

2011-11-18  Martin Robinson  <mrobinson@igalia.com>

        REGRESSION (r99924): broke 2 pasteboard tests on GTK
        https://bugs.webkit.org/show_bug.cgi?id=72131

        Reviewed by Tony Chang.

        * platform/gtk/ClipboardGtk.cpp:
        (WebCore::ClipboardGtk::clearData): Call clearAll now.
        (WebCore::ClipboardGtk::clearAllData): Call clearAllExceptFilenames now.
        * platform/gtk/DataObjectGtk.cpp:
        (WebCore::DataObjectGtk::clearAllExceptFilenames): Renamed from clear.
        (WebCore::DataObjectGtk::clearAll): Added this method which also clear filenames.
        * platform/gtk/DataObjectGtk.h:
        * platform/gtk/PasteboardGtk.cpp: Call clear before setting new clipboard data.
        (WebCore::Pasteboard::writeSelection): Ditto.
        (WebCore::Pasteboard::writePlainText): Ditto.
        (WebCore::Pasteboard::writeURL): Ditto.
        (WebCore::Pasteboard::writeImage): Ditto.
        * platform/gtk/PasteboardHelper.cpp:
        (WebCore::clearClipboardContentsCallback): Use the clearAll method now.

2011-11-18  Vineet Chaudhary  <vineet.chaudhary@motorola.com>

        Access key should work on all elements.
        https://bugs.webkit.org/show_bug.cgi?id=71854

        Reviewed by Ryosuke Niwa.

        All HTML elements can have the accesskey content attribute set.
        Specification http://dev.w3.org/html5/spec/Overview.html#the-accesskey-attribute
        Adding "accessKey" attribute to HTMLElement.idl file as [Reflect].

        Test: fast/forms/access-key-for-all-elements.html

        * bindings/objc/PublicDOMInterfaces.h: Moved properties form subclass to base class.
        * html/BaseButtonInputType.cpp: 
        (WebCore::BaseButtonInputType::accessKeyAction): Renamed variable sendToAnyElement to sendMouseEvents.
        * html/BaseButtonInputType.h: Ditto
        * html/BaseCheckableInputType.cpp:
        (WebCore::BaseCheckableInputType::accessKeyAction): Ditto
        * html/BaseCheckableInputType.h: Ditto
        * html/HTMLAnchorElement.cpp:
        (WebCore::HTMLAnchorElement::accessKeyAction): Ditto
        * html/HTMLAnchorElement.h: Ditto
        * html/HTMLAnchorElement.idl: Removed redundant IDL attribute entries.
        * html/HTMLAreaElement.idl: Removed redundant IDL attribute entries.
        * html/HTMLButtonElement.cpp:
        (WebCore::HTMLButtonElement::accessKeyAction): Renamed variable sendToAnyElement to sendMouseEvents.
        * html/HTMLButtonElement.h: Ditto
        * html/HTMLButtonElement.idl: Removed redundant IDL attribute entries.
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::accessKeyAction): Renamed variable sendToAnyElement to sendMouseEvents.
        If the element does not have a defined activation behavior, fire a click event at the element.
        * html/HTMLElement.h: Ditto
        * html/HTMLElement.idl: Added accessKey IDL attribute.
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::accessKeyAction): Renamed variable sendToAnyElement to sendMouseEvents.
        * html/HTMLInputElement.h: Ditto
        * html/HTMLInputElement.idl: Removed redundant IDL attribute entries.
        * html/HTMLLabelElement.cpp:
        (WebCore::HTMLLabelElement::accessKeyAction): Renamed variable sendToAnyElement to sendMouseEvents.
        * html/HTMLLabelElement.h: Ditto
        * html/HTMLLabelElement.idl: Removed redundant IDL attribute entries.
        * html/HTMLLegendElement.cpp:
        (WebCore::HTMLLegendElement::accessKeyAction): Renamed variable sendToAnyElement to sendMouseEvents.
        * html/HTMLLegendElement.h: Ditto
        * html/HTMLLegendElement.idl: Removed redundant IDL attribute entries.
        * html/HTMLOptGroupElement.h: Renamed variable sendToAnyElement to sendMouseEvents.
        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::accessKeyAction): Ditto
        * html/HTMLSelectElement.h: Ditto
        * html/HTMLTextAreaElement.h: Ditto
        * html/HTMLTextAreaElement.idl: Removed redundant IDL attribute entries.
        * html/HiddenInputType.h: Renamed variable sendToAnyElement to sendMouseEvents.
        * html/InputType.h: Ditto
        * html/RangeInputType.cpp:
        (WebCore::RangeInputType::accessKeyAction): Ditto
        * html/RangeInputType.h: Ditto

2011-11-18  Simon Fraser  <simon.fraser@apple.com>

        Appearance of compound transform animations under apps linked on SnowLeopard is incorrect
        https://bugs.webkit.org/show_bug.cgi?id=72641
        and
        <rdar://problem/10314267>

        Reviewed by Dean Jackson.

        GraphicsLayerCA contains a "linked on or after" check to account for a bug in
        Core Animation on SnowLeopard and earlier, which is that CA would apply the list
        of animations in reverse order.
        
        Our previous fix was incorrect, because it only adjusted the 'additive' property
        of the animation list based on ordering, rather than flipping the entire list.
        This change reverses the list of animations before giving them to CA, which fixes
        the bug.
                
        Test: animations/additive-transform-animations.html

        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::appendToUncommittedAnimations):
        (WebCore::GraphicsLayerCA::createTransformAnimationsFromKeyframes):
        * platform/graphics/ca/GraphicsLayerCA.h:

2011-11-18  Tim Horton  <timothy_horton@apple.com>

        -webkit-cross-fade rendered incorrectly in overflow divs
        https://bugs.webkit.org/show_bug.cgi?id=72693
        <rdar://problem/10468564>

        Reviewed by Simon Fraser.

        Respect the desired source rectangle when rendering the cross-fade.

        Test: css3/images/cross-fade-overflow-position.html

        * platform/graphics/CrossfadeGeneratedImage.cpp:
        (WebCore::CrossfadeGeneratedImage::drawCrossfade):
        (WebCore::CrossfadeGeneratedImage::draw):
        (WebCore::CrossfadeGeneratedImage::drawPattern):
        * platform/graphics/CrossfadeGeneratedImage.h:

2011-11-18  Raphael Kubo da Costa  <kubo@profusion.mobi>

        Unreviewed build fix; r100686 broke the EFL build when Geolocation
        support is enabled.

        * platform/efl/GeolocationServiceEfl.cpp: Only declare
        s_factoryFunction if CLIENT_BASED_GEOLOCATION is off, otherwise it is
        also declared in GeolocationService.cpp.

2011-11-18  Igor Oliveira  <igor.oliveira@openbossa.org>

        [TextureMapper] computePerspectiveTransformIfNeeded is called twice in TextureMapperNode::syncCompositingState
        https://bugs.webkit.org/show_bug.cgi?id=72727

        TextureMapperNode::computeAllTransforms already has a call to TextureMapperNode::computePerspectiveTransformIfNeeded,
        so it does not need to be called again after TextureMapperNode::computeAllTransforms.

        Reviewed by Noam Rosenthal.

        * platform/graphics/texmap/TextureMapperNode.cpp:
        (WebCore::TextureMapperNode::syncCompositingState):

2011-11-18  Mihnea Ovidenie  <mihnea@adobe.com>

        Fix compilation warning in ComplexTextControllerCoreText.mm
        https://bugs.webkit.org/show_bug.cgi?id=72702

        Reviewed by Andreas Kling.

        No functionality changed, so no new tests.

        * platform/graphics/mac/ComplexTextControllerCoreText.mm:
        (WebCore::ComplexTextController::collectComplexTextRunsForCharactersCoreText):

2011-11-18  Pavel Feldman  <pfeldman@google.com>

        Not reviewed: restore front-end compilability via updating externs and JS generator.

        * inspector/front-end/ElementsPanel.js:
        (WebInspector.ElementsPanel.prototype.jumpToNextSearchResult):
        (WebInspector.ElementsPanel.prototype.jumpToPreviousSearchResult):
        * inspector/front-end/externs.js:
        (WebInspector.showPanelForAnchorNavigation):
        * inspector/generate-protocol-externs:

2011-11-17  Pavel Feldman  <pfeldman@google.com>

        Web Inspector: dispatch messages from the front-end to the backend asynchronously.
        https://bugs.webkit.org/show_bug.cgi?id=72621

        We should align the way we dispatch messages from the front-end to backend across the environments:
          - WebKit has it synchronoulsly
          - Chromium has it asynchronously
          - Remote debugging has it asynchronously
        Making it asynchronous made a number of flaky Qt tests pass.

        Tests uncovered console agent problem that was also fixed.

        Reviewed by Yury Semikhatsky.

        * inspector/InspectorConsoleAgent.cpp:
        (WebCore::InspectorConsoleAgent::clearFrontend):
        * inspector/InspectorFrontendClient.h:
        * inspector/InspectorFrontendClientLocal.cpp:
        (WebCore::InspectorBackendDispatchTask::InspectorBackendDispatchTask):
        (WebCore::InspectorBackendDispatchTask::dispatch):
        (WebCore::InspectorBackendDispatchTask::reset):
        (WebCore::InspectorBackendDispatchTask::onTimer):
        (WebCore::InspectorFrontendClientLocal::InspectorFrontendClientLocal):
        (WebCore::InspectorFrontendClientLocal::windowObjectCleared):
        (WebCore::InspectorFrontendClientLocal::sendMessageToBackend):
        * inspector/InspectorFrontendClientLocal.h:

2011-11-18  Iain Merrick  <husky@google.com>

        [chromium] Pass screen refresh rate into compositor.
        https://bugs.webkit.org/show_bug.cgi?id=71040

        Reviewed by Tony Gentilcore.

        Covered by CCLayerTreeHostTest.

        * platform/PlatformScreen.h:
        * platform/chromium/PlatformScreenChromium.cpp:
        (WebCore::screenRefreshRate):
        * platform/chromium/PlatformSupport.h:
        * platform/graphics/chromium/cc/CCLayerTreeHost.h:
        (WebCore::CCSettings::CCSettings):
        * platform/graphics/chromium/cc/CCThreadProxy.cpp:
        (WebCore::CCThreadProxy::initializeImplOnImplThread):

2011-11-18  Alexandru Chiculita  <achicu@adobe.com>

        [CSSShaders] Implement the computed style for mesh parameters of the custom() filter
        https://bugs.webkit.org/show_bug.cgi?id=72478

        Reviewed by Dean Jackson.

        Added parsing and computed style for the mesh rows, columns, mesh box type 
        (filter-box, border-box, content-box and padding-box) and the detached mode.
        
        Also fixed a case where "custom(none, 10, 10 filter-box)" was incorrectly
        treated as "custom(none, 10)".

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::valueForFilter):
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseCustomFilter): Fixed a case where invalid syntax was parsed as correct syntax.
        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        (WebCore::CSSPrimitiveValue::operator CustomFilterOperation::MeshBoxType):
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::createCustomFilterOperation):
        * css/CSSValueList.h:
        (WebCore::CSSValueListIterator::isPrimitiveValue):
        * platform/graphics/filters/CustomFilterOperation.h:

2011-11-18  Adam Barth  <abarth@webkit.org>

        Remove unneeded include (and ifdef) from V8DOMWindowCustom.cpp
        https://bugs.webkit.org/show_bug.cgi?id=72705

        Reviewed by Eric Seidel.

        Death to ifdefs!

        * bindings/v8/custom/V8DOMWindowCustom.cpp:

2011-11-18  Adam Barth  <abarth@webkit.org>

        Move some mediastream related files into the mediastream directory
        https://bugs.webkit.org/show_bug.cgi?id=72695

        Reviewed by Eric Seidel.

        Just moving the files to the proper directory.

        * GNUmakefile.list.am:
        * WebCore.gypi:
        * mediastream/NavigatorUserMediaError.h: Renamed from Source/WebCore/page/NavigatorUserMediaError.h.
        (WebCore::NavigatorUserMediaError::create):
        (WebCore::NavigatorUserMediaError::~NavigatorUserMediaError):
        (WebCore::NavigatorUserMediaError::code):
        (WebCore::NavigatorUserMediaError::NavigatorUserMediaError):
        * mediastream/NavigatorUserMediaError.idl: Renamed from Source/WebCore/page/NavigatorUserMediaError.idl.
        * mediastream/NavigatorUserMediaErrorCallback.h: Renamed from Source/WebCore/page/NavigatorUserMediaErrorCallback.h.
        (WebCore::NavigatorUserMediaErrorCallback::~NavigatorUserMediaErrorCallback):
        * mediastream/NavigatorUserMediaErrorCallback.idl: Renamed from Source/WebCore/page/NavigatorUserMediaErrorCallback.idl.
        * mediastream/NavigatorUserMediaSuccessCallback.h: Renamed from Source/WebCore/page/NavigatorUserMediaSuccessCallback.h.
        (WebCore::NavigatorUserMediaSuccessCallback::~NavigatorUserMediaSuccessCallback):
        * mediastream/NavigatorUserMediaSuccessCallback.idl: Renamed from Source/WebCore/page/NavigatorUserMediaSuccessCallback.idl.

2011-11-18  Andrey Kosyakov  <caseq@chromium.org>

        Web Inspector: [Extensions API] Provide a way for extension to create a status bar icon
        https://bugs.webkit.org/show_bug.cgi?id=45955

        Reviewed by Pavel Feldman.

        * inspector/front-end/ExtensionAPI.js:
        (injectedExtensionAPI.ExtensionPanelImpl.prototype.createStatusBarButton):
        (injectedExtensionAPI):
        (injectedExtensionAPI.ButtonImpl.prototype.update):
        * inspector/front-end/ExtensionPanel.js:
        (WebInspector.ExtensionPanel):
        (WebInspector.ExtensionPanel.prototype.get statusBarItems):
        (WebInspector.ExtensionPanel.prototype.addStatusBarItem):
        (WebInspector.ExtensionButton):
        (WebInspector.ExtensionButton.prototype.update):
        (WebInspector.ExtensionButton.prototype._onClicked):
        * inspector/front-end/ExtensionServer.js:
        (WebInspector.ExtensionServer):
        (WebInspector.ExtensionServer.prototype.notifyButtonClicked):
        (WebInspector.ExtensionServer.prototype._onCreateStatusBarButton):
        (WebInspector.ExtensionServer.prototype._onUpdateButton):
        (WebInspector.ExtensionServer.prototype._onCreateSidebarPane):
        * inspector/front-end/inspector.css:
        (button.status-bar-item.extension):

2011-11-18  Tommy Widenflycht  <tommyw@google.com>

        MediaStream API: Merging the PeerConnectionHandler.h files
        https://bugs.webkit.org/show_bug.cgi?id=72611

        Reviewed by Adam Barth.

        No actual code changes.

        * GNUmakefile.am:
        * GNUmakefile.list.am:
        * WebCore.gyp/WebCore.gyp:
        * WebCore.gypi:
        * platform/mediastream/PeerConnectionHandler.h: Renamed from Source/WebCore/platform/mediastream/chromium/PeerConnectionHandler.h.
        * platform/mediastream/gstreamer/PeerConnectionHandler.h: Removed.

2011-11-17  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] Layer violation: ThirdPartyCookiesQt.cpp uses QWebSettings in two places
        https://bugs.webkit.org/show_bug.cgi?id=72597

        Reviewed by Kenneth Rohde Christiansen.

        Moved code that queries the third party cookie policy from QWebSettings
        out of WebCore. Instead NetworkingContext has now the interface that allows
        delegating the functionality into WebKit/qt.

        In order to do that we need to pass the NetworkingContext around, which is used to
        retrieve the cookie jar and the originating frame object pointer.

        * platform/network/NetworkingContext.h: Add interface.
        * platform/network/qt/QNetworkReplyHandler.cpp:
        (WebCore::QNetworkReplyHandler::QNetworkReplyHandler): Pass NetworkingContext to ResourceRequest::toNetworkRequest.
        (WebCore::QNetworkReplyHandler::redirect): Ditto.
        * platform/network/qt/ResourceRequest.h: Replaced originatingObject parameter with NetworkingContext, which can
        also provide the same plus more (cookie jar, policy callback).
        * platform/network/qt/ResourceRequestQt.cpp:
        (WebCore::ResourceRequest::toNetworkRequest): Ditto.
        * platform/qt/CookieJarQt.cpp: Simplify to use NetworkingContext to get cookie jar and
        call new thirdPartyCookiePolicyPermits API that takes the context as parameter.
        (WebCore::networkingContext):
        (WebCore::setCookies):
        (WebCore::cookies):
        (WebCore::cookieRequestHeaderFieldValue):
        (WebCore::cookiesEnabled):
        * platform/qt/ThirdPartyCookiesQt.cpp: Replace up-casting to QWebFrame and use of QWebSettings
        with useage of NetworkingContext.
        (WebCore::thirdPartyCookiePolicyPermits):
        * platform/qt/ThirdPartyCookiesQt.h:

2011-11-17  Kenichi Ishibashi  <bashi@chromium.org>

        crash: WebCore::FontPlatformData::roundsGlyphAdvances on Lion
        https://bugs.webkit.org/show_bug.cgi?id=71997

        Reviewed by Dan Bernstein.

        The cause is a null dereference of a fontData that is stored in
        ComplexTextRun. The fontData is initialized by using the
        fontCache, but it could be null when the font is in fallback
        list. The reason a font from the fallback list might not be in the
        font Cache is that it may be a web font. Before looking up the
        fontCache, try to see whether the font is in the fallback list.

        No new tests. We don't have webfonts that can produce the problem.

        * platform/graphics/mac/ComplexTextControllerCoreText.mm:
        (WebCore::ComplexTextController::collectComplexTextRunsForCharactersCoreText): See fallback list first, then lookup cache.

2011-11-17  Kaustubh Atrawalkar  <kaustubh@motorola.com>

        Remove initProgressEvent method
        https://bugs.webkit.org/show_bug.cgi?id=71340

        Reviewed by Adam Barth.

        This method has been removed from the spec draft.
        http://www.w3.org/TR/progress-events/#interface-progressevent

        No new tests. Removed method.

        * dom/ProgressEvent.cpp:
        * dom/ProgressEvent.h:
        * dom/ProgressEvent.idl:

2011-11-17  Eunmi Lee  <eunmi15.lee@samsung.com>

        [EFL] Move keyIdentifierForEvasKeyName() and windowsKeyCodeForEvasKeyName() to the
        EflKeyboardUtilities.cpp to use in the WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=62451

        Reviewed by Martin Robinson.

        The keyIdentifierForEvasKeyName() and windowsKeyCodeForEvasKeyName() were static functions
        in the PlatformKeyboardEventEfl.cpp. But they are also needed in the WebKit2 EFL port, so I
        moved them to the separated file - EflKeyboardUtilities.cpp.

        * PlatformEfl.cmake:
        * platform/efl/EflKeyboardUtilities.cpp: Copied from Source/WebCore/platform/efl/PlatformKeyboardEventEfl.cpp.
        (WebCore::createKeyMap):
        (WebCore::createWindowsKeyMap):
        (WebCore::keyIdentifierForEvasKeyName):
        (WebCore::windowsKeyCodeForEvasKeyName):
        * platform/efl/EflKeyboardUtilities.h: Added.
        * platform/efl/PlatformKeyboardEventEfl.cpp:

2011-11-17  Martin Robinson  <mrobinson@igalia.com>

        [GTK] The process freezes when you right click on windowless Flash
        https://bugs.webkit.org/show_bug.cgi?id=69123

        Reviewed by Xan Lopez.

        No new tests. I tried to create a layout test that exercised this
        issue, but it appears that EventSender clicks do not trigger
        it. This is covered by the manual tests containing Flash.

        * plugins/PluginPackage.cpp:
        (WebCore::PluginPackage::determineQuirks): Always activate the
        windowless Flash quirk if on x86_64 and X11.
        * plugins/gtk/PluginViewGtk.cpp:
        (WebCore::PluginView::handleMouseEvent): Avoid sending right-click
        events if we have the quirk.

2011-11-17  Peter Rybin  <peter.rybin@gmail.com>

        Web Inspector: clear fixme in generator script
        https://bugs.webkit.org/show_bug.cgi?id=71372

        Remove unnecessary field name map and update license year number.

        Reviewed by Pavel Feldman.

        * inspector/CodeGeneratorInspector.py:

2011-11-17  Raphael Kubo da Costa  <kubo@profusion.mobi>

        [EFL] Clean up the use of DATA_DIR in the buildsystem
        https://bugs.webkit.org/show_bug.cgi?id=72681

        Reviewed by Daniel Bates.

        Add the -DDATA_DIR definition here instead of defining it globally in
        OptionsEfl.cmake, as WebCore is the only place which needs it.

        No new tests, this is a buildsystem change.

        * PlatformEfl.cmake:

2011-11-17  Adam Klein  <adamk@chromium.org>

        Move JS recursion counter from V8Proxy to V8BindingPerIsolateData
        https://bugs.webkit.org/show_bug.cgi?id=72645

        Reviewed by Adam Barth.

        With the JS recursion level stored as a member of V8Proxy, it's tied
        to a frame. But this is incorrect, as there's no reason that a JS call
        stack need be restricted to a single frame (see my new test case for
        an example of code going across frames).

        In order to get the correct accounting of JS recursion level, per-Isolate
        is the right granularity (per dslomov), which is what this patch accomplishes.

        Test: storage/indexeddb/transaction-abort-with-js-recursion-cross-frame.html

        * bindings/v8/V8Binding.cpp:
        (WebCore::V8BindingPerIsolateData::V8BindingPerIsolateData):
        * bindings/v8/V8Binding.h:
        (WebCore::V8BindingPerIsolateData::recursionLevel):
        (WebCore::V8BindingPerIsolateData::incrementRecursionLevel):
        (WebCore::V8BindingPerIsolateData::decrementRecursionLevel):
        (WebCore::V8RecursionScope::V8RecursionScope):
        (WebCore::V8RecursionScope::~V8RecursionScope):
        * bindings/v8/V8Proxy.cpp:
        (WebCore::incrementRecursionLevel):
        (WebCore::decrementRecursionLevel):
        (WebCore::recursionLevel):
        (WebCore::V8Proxy::V8Proxy):
        (WebCore::V8Proxy::runScript):
        (WebCore::V8Proxy::callFunction):
        (WebCore::V8Proxy::didLeaveScriptContext):
        * bindings/v8/V8Proxy.h:

2011-11-17  Robin Cao  <robin.cao@torchmobile.com.cn>

        [chromium] Font::drawComplexText can not draw a segment of text run
        https://bugs.webkit.org/show_bug.cgi?id=72095

        Reviewed by Adam Barth.

        drawComplexText() should respect the 'from' and 'to' arguments.
        Drawing the whole text run may result in text overlapping.

        Test: platform/chromium-linux/fast/text/international/draw-complex-text-from-to.html

        * platform/graphics/chromium/ComplexTextControllerLinux.cpp:
        (WebCore::ComplexTextController::glyphsForRange):
        * platform/graphics/chromium/ComplexTextControllerLinux.h:
        * platform/graphics/chromium/FontLinux.cpp:
        (WebCore::Font::drawComplexText):

2011-11-17  Adam Barth  <abarth@webkit.org>

        Unique SecurityOrigins shouldn't remember their old schemes and hosts
        https://bugs.webkit.org/show_bug.cgi?id=71745

        Reviewed by Darin Adler.

        This is the final step in this series of patches.

        This patch removes the forceUnique flag from SecurityOrigin::create.
        Now, we create unique origins without passing in the document's URL,
        preventing information from the document's URL from leaking into the
        unique origin.

        * WebCore.exp.in:
        * dom/Document.cpp:
        (WebCore::Document::setIsViewSource):
        (WebCore::Document::initSecurityContext):
        * loader/cache/MemoryCache.cpp:
        (WebCore::MemoryCache::getOriginsWithCache):
            - Update this callsite to use createFromString, which does exactly
              what this code is doing manually.
        * page/SecurityOrigin.cpp:
        (WebCore::SecurityOrigin::create):
        * page/SecurityOrigin.h:

2011-11-17  Vincent Scheib  <scheib@chromium.org>

        Pointer Lock: Page Settings unecessary
        https://bugs.webkit.org/show_bug.cgi?id=72662

        Reviewed by Darin Fisher.

        No new tests.

        * page/Settings.cpp:
        (WebCore::Settings::Settings):
        * page/Settings.h:

2011-11-17  James Robinson  <jamesr@chromium.org>

        [chromium] Disable incremental uploading in threaded compositing path
        https://bugs.webkit.org/show_bug.cgi?id=72669

        Reviewed by Kenneth Russell.

        Since we don't currently support atomic incremental uploads, incremental uploads in the threaded path result in
        very strange-looking texture popping as tiles come in on pages that require more than 16 tile uploads per frame.
        This disables that logic (by setting the upload limit per frame to 99999) until we handle the incremental
        updates in an atomic fashion.

        * platform/graphics/chromium/cc/CCThreadProxy.cpp:
        (WebCore::CCThreadProxy::scheduledActionUpdateMoreResources):

2011-11-06  Nat Duca  <nduca@chromium.org>

        [chromium] Fix handling of setNeedsCommit and setNeedsAnimate in threaded mode
        https://bugs.webkit.org/show_bug.cgi?id=71638

        Reviewed by James Robinson.

        * platform/graphics/chromium/cc/CCThreadProxy.cpp:
        (WebCore::CCThreadProxy::CCThreadProxy):
        (WebCore::CCThreadProxy::setNeedsAnimate):
        (WebCore::CCThreadProxy::beginFrameAndCommit):

2011-11-17  Adam Barth  <abarth@webkit.org>

        Remove bogus ASSERT.

        * page/SecurityOrigin.cpp:
        (WebCore::SecurityOrigin::SecurityOrigin):

2011-11-17  Peter Kasting  <pkasting@google.com>

        Unreviewed, rolling out r100698.
        http://trac.webkit.org/changeset/100698
        https://bugs.webkit.org/show_bug.cgi?id=72239

        This change wasn't the problem either.

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

2011-11-17  David Reveman  <reveman@chromium.org>

        [Chromium] Calls to paintContentsIfDirty() and updateCompositorResources() should be balanced.
        https://bugs.webkit.org/show_bug.cgi?id=72630

        Reviewed by James Robinson.

        Layer property changes during paintContent() can leave the layer
        in an invalid state as paintContentsIfDirty() has been called
        without a matching updateCompositorResources() call. Removing
        conditionals around these calls ensure they are balanced.

        This patch is tested by the following unit test:
        - CCLayerTreeHostTestOpacityChange.runMultiThread

        * platform/graphics/chromium/ContentLayerChromium.cpp:
        (WebCore::ContentLayerChromium::paintContentsIfDirty):
        * platform/graphics/chromium/VideoLayerChromium.cpp:
        (WebCore::VideoLayerChromium::updateCompositorResources):
        * platform/graphics/chromium/cc/CCLayerTreeHost.cpp:
        (WebCore::CCLayerTreeHost::paintMaskAndReplicaForRenderSurface):
        (WebCore::CCLayerTreeHost::paintLayerContents):
        (WebCore::CCLayerTreeHost::updateCompositorResources):
        * platform/graphics/chromium/cc/CCLayerTreeHost.h:

2011-11-17  Peter Kasting  <pkasting@google.com>

        Unreviewed, rolling out r100584.
        http://trac.webkit.org/changeset/100584
        https://bugs.webkit.org/show_bug.cgi?id=72239

        See if this change caused Linux dbg crashes.

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

2011-11-17  Adam Barth  <abarth@webkit.org>

        Remove cargo-cult copy/pasting of ScriptExecutionContext namespace
        https://bugs.webkit.org/show_bug.cgi?id=72676

        Reviewed by Eric Seidel.

        It looks like this cargo-cult started with initDNSPrefetch being hacked
        into setSecurityOrigin.  I've removed this hack along with the
        copy/paste code.

        * dom/DOMImplementation.cpp:
        * dom/Document.cpp:
        (WebCore::Document::setIsViewSource):
        (WebCore::Document::open):
        (WebCore::Document::initSecurityContext):
        (WebCore::Document::setSecurityOrigin):
        * dom/Document.h:
        * xml/XSLTProcessor.cpp:

2011-11-17  Peter Kasting  <pkasting@google.com>

        Unreviewed, rolling out r100676.
        http://trac.webkit.org/changeset/100676
        https://bugs.webkit.org/show_bug.cgi?id=72393

        Looks like r100572 was not the source of the crashes.

        * bindings/js/ScriptDebugServer.cpp:
        (WebCore::ScriptDebugServer::canSetScriptSource):
        * bindings/js/ScriptDebugServer.h:
        * bindings/v8/ScriptDebugServer.cpp:
        (WebCore::ScriptDebugServer::stepOutOfFunction):
        (WebCore::ScriptDebugServer::canSetScriptSource):
        * bindings/v8/ScriptDebugServer.h:
        * inspector/CodeGeneratorInspector.py:
        * inspector/Inspector.json:
        * inspector/InspectorDebuggerAgent.cpp:
        (WebCore::InspectorDebuggerAgent::getCapabilities):
        * inspector/InspectorDebuggerAgent.h:
        * inspector/front-end/DebuggerModel.js:
        (WebInspector.DebuggerModel):
        (WebInspector.DebuggerModel.prototype.enableDebugger):
        (WebInspector.DebuggerModel.prototype.disableDebugger):
        (WebInspector.DebuggerModel.prototype.canSetScriptSource):
        * inspector/front-end/DebuggerPresentationModel.js:
        (WebInspector.DebuggerPresentationModel.prototype.canEditScriptSource):
        * inspector/front-end/Settings.js:

2011-11-17  Konstantin Scheglov  <scheglov@google.com>

        Absolute child is not repainted when parent opacity changes
        https://bugs.webkit.org/show_bug.cgi?id=68777

        Reviewed by Simon Fraser.

        First time when we change opacity for parent we don't have layer, so
        diff=StyleDifferenceRepaint is used instead of diff=StyleDifferenceRepaintLayer.
        Layer is created later, in styleDidChange().
        So, when we recalculate later diff, we now check for diff=StyleDifferenceRepaintLayer and
        performs repaintIncludingDescendants().

        Test: fast/layers/layer-absolute-parent-opacity.html

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::setStyle): Call repaintIncludingDescendants() instead of repaint().
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::diff): Add ContextSensitivePropertyOpacity when change opacity.

2011-11-17  Nate Chapin  <japhet@chromium.org>

        r100311 dropped a RefPtr that is very
        helpful. Add it back.
        https://bugs.webkit.org/show_bug.cgi?id=72647

        Reviewed by Adam Barth.

        http/tests/misc/xslt-bad-import.html should
        stop crashing in full chromium builds.

        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::loadDone):

2011-11-17  Adam Barth  <abarth@webkit.org>

        Refactor SecurityOrigin::create to be easier to understand
        https://bugs.webkit.org/show_bug.cgi?id=72342

        Reviewed by Eric Seidel.

        Over time, the SecurityOrigin constructor has grown a bit out of
        control.  This patch attempts to separate the different concerns into
        free functions.  The general approach is to put more logic in the
        "create" function and introduce a simple constructor for unique
        origins.

        This patch shouldn't change any behavior.

        * page/SecurityOrigin.cpp:
        (WebCore::schemeRequiresAuthority):
        (WebCore::shouldUseInnerURL):
        (WebCore::extractInnerURL):
        (WebCore::isDirectory):
        (WebCore::shouldTreatAsUniqueOrigin):
        (WebCore::SecurityOrigin::SecurityOrigin):
        (WebCore::SecurityOrigin::create):
        (WebCore::SecurityOrigin::createUnique):
        (WebCore::SecurityOrigin::databaseIdentifier):
        * page/SecurityOrigin.h:

2011-11-17  Shawn Singh  <shawnsingh@chromium.org>

        [chromium] Fix minor style nit in CCLayerImpl
        https://bugs.webkit.org/show_bug.cgi?id=71070

        Reviewed by James Robinson.

        Fixes if-statements on several settors to follow WebKit
        conventions. Existing CCLayerImplTest unit tests already cover
        this change.

        * platform/graphics/chromium/cc/CCLayerImpl.cpp:
        (WebCore::CCLayerImpl::setBounds):
        (WebCore::CCLayerImpl::setMaskLayer):
        (WebCore::CCLayerImpl::setReplicaLayer):
        (WebCore::CCLayerImpl::setDrawsContent):
        (WebCore::CCLayerImpl::setAnchorPoint):
        (WebCore::CCLayerImpl::setAnchorPointZ):
        (WebCore::CCLayerImpl::setBackgroundColor):
        (WebCore::CCLayerImpl::setMasksToBounds):
        (WebCore::CCLayerImpl::setOpaque):
        (WebCore::CCLayerImpl::setOpacity):
        (WebCore::CCLayerImpl::setPosition):
        (WebCore::CCLayerImpl::setPreserves3D):
        (WebCore::CCLayerImpl::setZoomAnimatorTransform):
        (WebCore::CCLayerImpl::setSublayerTransform):
        (WebCore::CCLayerImpl::setTransform):
        (WebCore::CCLayerImpl::setDebugBorderColor):
        (WebCore::CCLayerImpl::setDebugBorderWidth):
        (WebCore::CCLayerImpl::setContentBounds):
        (WebCore::CCLayerImpl::setScrollPosition):
        (WebCore::CCLayerImpl::setScrollDelta):
        (WebCore::CCLayerImpl::setScaleDelta):
        (WebCore::CCLayerImpl::setDoubleSided):

2011-11-17  Michael Saboff  <msaboff@apple.com>

        Leaks seen in MemoryPressureHandlerMac.mm on Leaks bot
        https://bugs.webkit.org/show_bug.cgi?id=72416

        Added code to release _cache_event_source and _timer_event_source
        after they are canceled.  Also added defensive code to
        clean up the _timer_event_source in uninstall().

        Reviewed by Geoffrey Garen.

        No new tests, fixing leaks caught by leaks bot.

        * platform/mac/MemoryPressureHandlerMac.mm:
        (WebCore::MemoryPressureHandler::uninstall):
        (WebCore::MemoryPressureHandler::holdOff):

2011-11-17  Ken Buchanan <kenrb@chromium.org>

        Crash from positioned generated content under run-in
        https://bugs.webkit.org/show_bug.cgi?id=70456

        Reviewed by David Hyatt.

        Modified handling of run-in children to clear generated children
        before removing the parent from the render tree. This caused problems
        with absolute positioned children being not properly removed from the
        positioned object list of the RenderView.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::handleRunInChild):

2011-11-17  Peter Kasting  <pkasting@google.com>

        Unreviewed, rolling out r100572.
        https://bugs.webkit.org/show_bug.cgi?id=72393
        https://bugs.webkit.org/show_bug.cgi?id=72651

        May have caused seg faults on Chromium Linux dbg bot.

        * bindings/js/ScriptDebugServer.cpp:
        * bindings/js/ScriptDebugServer.h:
        * bindings/v8/ScriptDebugServer.cpp:
        (WebCore::ScriptDebugServer::stepOutOfFunction):
        * bindings/v8/ScriptDebugServer.h:
        * inspector/CodeGeneratorInspector.py:
        * inspector/Inspector.json:
        * inspector/InspectorDebuggerAgent.cpp:
        * inspector/InspectorDebuggerAgent.h:
        * inspector/front-end/DebuggerModel.js:
        (WebInspector.DebuggerModel):
        (WebInspector.DebuggerModel.prototype.enableDebugger):
        (WebInspector.DebuggerModel.prototype.disableDebugger):
        * inspector/front-end/DebuggerPresentationModel.js:
        (WebInspector.DebuggerPresentationModel.prototype.canEditScriptSource):
        * inspector/front-end/Settings.js:

2011-11-17  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r100652.
        http://trac.webkit.org/changeset/100652
        https://bugs.webkit.org/show_bug.cgi?id=72648

        "Caused outline-offset-min-assert.html to assert on debug
        builds" (Requested by mwenge2 on #webkit).

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::paintOutline):

2011-11-17  Mark Rowe  <mrowe@apple.com>

        <http://webkit.org/b/72637> Stop performing runtime version checks on OS versions where the check can never possibly fail.

        Reviewed by Simon Fraser.

        * platform/graphics/cg/ImageBufferDataCG.cpp:
        (WebCore::haveVImageRoundingErrorFix): When not targeting Snow Leopard we always have the fix.

2011-11-17  Chris Fleizach  <cfleizach@apple.com>

        AX: The scrollArea is not correctly returning the scrollbars
        https://bugs.webkit.org/show_bug.cgi?id=70247

        Reviewed by Beth Dakin.

        A few bugs that were preventing this from working.
           1) In accessibilityAttributeValue: when an element did not have a renderer() we were returning earlier than we should have
           2) We were not updating and clearing the scrollbars correctly when children were cleared or when asked for.

        Test: platform/mac/accessibility/scrollbars.html

        * accessibility/AccessibilityScrollView.cpp:
        (WebCore::AccessibilityScrollView::scrollBar):
        (WebCore::AccessibilityScrollView::clearChildren):
        * accessibility/AccessibilityScrollView.h:
        * accessibility/mac/WebAccessibilityObjectWrapper.mm:
        (-[WebAccessibilityObjectWrapper accessibilityAttributeValue:]):

2011-11-14  Adam Barth  <abarth@webkit.org>

        Unique origins shouldn't remember their scheme, host, or port
        https://bugs.webkit.org/show_bug.cgi?id=72308

        Reviewed by Eric Seidel.

        This patch contains the bulk (all?) of the behavior differences in this
        patch series.  Unique origins shouldn't remember their schemes.  Doing
        so causes some privileges (e.g., local access) to leak into unique
        origins.

        * page/SecurityOrigin.cpp:
        (WebCore::SecurityOrigin::SecurityOrigin):
            - Explicitly clear out the protocol, host, and port for unique
              origins.  A future patch will refactor all this code to be more
              elegant.
        * platform/SchemeRegistry.cpp:
        (WebCore::schemesWithUniqueOrigins):
            - Merge "about" and "javascript" in with the general case now that
              we don't have a separate notion of an empty origin.

2011-11-17  Chris Fleizach  <cfleizach@apple.com>

        AX: cleanup style and naming and code in accessibility search mechanism
        https://bugs.webkit.org/show_bug.cgi?id=72570

        Reviewed by Beth Dakin.

        Cleanup the naming and code style within the element searching mechanism.

        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::isAccessibilityObjectSearchMatch):
        (WebCore::AccessibilityObject::isAccessibilityTextSearchMatch):
        (WebCore::AccessibilityObject::firstAccessibleObjectFromNode):
        (WebCore::AccessibilityObject::findMatchingObjects):
        * accessibility/AccessibilityObject.h:
        * accessibility/mac/WebAccessibilityObjectWrapper.mm:
        (-[WebAccessibilityObjectWrapper accessibilityAttributeValue:forParameter:]):

2011-11-17  Julien Chaffraix  <jchaffraix@webkit.org>

        CSS table with 100% width can overflow their containing block
        https://bugs.webkit.org/show_bug.cgi?id=72180

        Reviewed by David Hyatt.

        Tests: fast/table/table-in-table-percent-width-collapsing-border-quirks-mode.html
               fast/table/table-in-table-percent-width-collapsing-border.html
               fast/table/table-in-table-percent-width-quirks-mode.html
               fast/table/table-in-table-percent-width.html

        After r97555, we would include the borders in a CSS table's logical width even if the 'width'
        property was a percent. This does not match what Firefox and IE are doing. Thus don't apply
        this behavior to percent 'width'.

        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::computeLogicalWidth):

2011-11-17  Adrienne Walker  <enne@google.com>

        [chromium] Implicitly skip render surfaces that won't be drawn
        https://bugs.webkit.org/show_bug.cgi?id=71038

        Rather than having redundant checks in three places for how to walk
        through a render surface list, instead don't add render surfaces that
        don't need to get rendered to the render surface list.

        Reviewed by James Robinson.

        Covered by existing layout tests and unit tests.

        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::drawLayersOntoRenderSurfaces):
        * platform/graphics/chromium/cc/CCLayerTreeHost.cpp:
        (WebCore::CCLayerTreeHost::paintLayerContents):
        (WebCore::CCLayerTreeHost::updateCompositorResources):
        * platform/graphics/chromium/cc/CCLayerTreeHostCommon.cpp:
        (WebCore::calculateDrawTransformsAndVisibilityInternal):

2011-11-17  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] Layer violation: qt_runtime.cpp accesses QWebElement and QTDRTNode
        https://bugs.webkit.org/show_bug.cgi?id=72595

        Reviewed by Noam Rosenthal.

        Removed QWebElement and QtDRTNode usage that reached from WebCore into
        WebKit/qt and replaced it with the ability to register custom JSValue
        conversion functions. The old code has been moved to WebKit/qt.

        * bridge/qt/qt_instance.cpp:
        (JSC::Bindings::QtInstance::QtInstance): Remove unnecessary meta type registration
        (now done in QtWebElementRuntime::initialize in WebKit/qt).
        * bridge/qt/qt_runtime.cpp:
        (JSC::Bindings::registerCustomType):
        (JSC::Bindings::convertValueToQVariant):
        (JSC::Bindings::convertQVariantToValue):
        * bridge/qt/qt_runtime.h:

2011-11-17  Fady Samuel  <fsamuel@chromium.org>

        Pass Aspect Ratio to RenderStyle
        https://bugs.webkit.org/show_bug.cgi?id=72350

        Reviewed by Ojan Vafai.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        * css/CSSStyleApplyProperty.cpp:
        (WebCore::ApplyPropertyAspectRatio::applyInheritValue):
        (WebCore::ApplyPropertyAspectRatio::applyInitialValue):
        (WebCore::ApplyPropertyAspectRatio::applyValue):
        (WebCore::ApplyPropertyAspectRatio::createHandler):
        (WebCore::CSSStyleApplyProperty::CSSStyleApplyProperty):
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):
        * css/CSSValue.h:
        (WebCore::CSSValue::isAspectRatioValue):
        * rendering/style/RenderStyle.h:
        (WebCore::InheritedFlags::hasAspectRatio):
        (WebCore::InheritedFlags::aspectRatio):
        (WebCore::InheritedFlags::aspectRatioDenominator):
        (WebCore::InheritedFlags::aspectRatioNumerator):
        (WebCore::InheritedFlags::setHasAspectRatio):
        (WebCore::InheritedFlags::setAspectRatioDenominator):
        (WebCore::InheritedFlags::setAspectRatioNumerator):
        (WebCore::InheritedFlags::initialHasAspectRatio):
        (WebCore::InheritedFlags::initialAspectRatioDenominator):
        (WebCore::InheritedFlags::initialAspectRatioNumerator):
        * rendering/style/StyleRareNonInheritedData.cpp:
        (WebCore::StyleRareNonInheritedData::StyleRareNonInheritedData):
        (WebCore::StyleRareNonInheritedData::operator==):
        * rendering/style/StyleRareNonInheritedData.h:

2011-11-09  Robert Hogan  <robert@webkit.org>

        CSS 2.1 failure: outline-color-* tests fail
        https://bugs.webkit.org/show_bug.cgi?id=71931

        Reviewed by Julien Chaffraix.

        WebKit wasn't displaying the top block in these tests because it did not paint the outline
        of divs with zero size.

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::paintOutline): paint the outline even when the block has zero size

2011-11-17  Sergio Villar Senin  <svillar@igalia.com>

        [GTK] plugins/get-url-notify-with-url-that-fails-to-load.html on bots after r100466
        https://bugs.webkit.org/show_bug.cgi?id=72613

        Reviewed by Martin Robinson.

        Do not assume that a SoupRequest always exists, it is not
        generated for example when the provided URL is
        invalid. ResourceHandle::platformSetDefersLoading was crashing
        because of that.

        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::ResourceHandle::platformSetDefersLoading):

2011-11-17  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Remove onlineDetectionEnabled from Preferences
        https://bugs.webkit.org/show_bug.cgi?id=72617

        Reviewed by Pavel Feldman.

        * inspector/front-end/ApplicationCacheItemsView.js:
        (WebInspector.ApplicationCacheItemsView):
        (WebInspector.ApplicationCacheItemsView.prototype.get statusBarItems):
        * inspector/front-end/Settings.js:

2011-11-17  Ken Buchanan  <kenrb@chromium.org>

        Crash from nested tables with generated content
        https://bugs.webkit.org/show_bug.cgi?id=68811

        Reviewed by David Hyatt.

        When adding a child to a table that has generated content, this change
        ensures that we leave alone any generated content renderers that belong
        to descendants in the tree. They don't need to be touched, and doing so
        can create confusion about who the content belongs to.

        This patch also simplifies some existing code for finding pseudoelement
        renderers. 

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::addChildIgnoringAnonymousColumnBlocks):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::addChild):
        (WebCore::RenderObject::isBeforeAfterContentGeneratedByAncestor): Added
        * rendering/RenderObject.h:
        (WebCore::RenderObject::findAfterContentRenderer): Deleted
        (WebCore::RenderObject::findBeforeContentRenderer): Deleted
        * rendering/RenderObjectChildList.cpp:
        (WebCore::RenderObjectChildList::beforePseudoElementRenderer):
        (WebCore::RenderObjectChildList::afterPseudoElementRenderer):
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::addChild):
        * rendering/RenderTableRow.cpp:
        (WebCore::RenderTableRow::addChild):
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::addChild):

2011-11-17  Patrick Gansterer  <paroga@webkit.org>

        Unreviewed WinCE build fix for r94119.

        MSVC throws multiply defined symbols linker error when using local class in inline function.

        * bindings/js/JSDictionary.h:
        (WebCore::JSDictionary::IdentitySetter::identitySetter):
        (WebCore::JSDictionary::tryGetProperty):

2011-11-17  Eric Carlson  <eric.carlson@apple.com>

        TextTrackList not sorted correctly
        https://bugs.webkit.org/show_bug.cgi?id=72545

        Reviewed by Darin Adler.

        Test: media/track/track-texttracks.html

        * WebCore.xcodeproj/project.pbxproj: Add TextTrack.h to WebCore private headers because 
            it is included by HTMLMediaElement.h.
        * html/LoadableTextTrack.cpp:
        (WebCore::LoadableTextTrack::LoadableTextTrack): Pass track type to base class constructor.
        (WebCore::LoadableTextTrack::trackElementIndex): New, return the <track> element's tree order
            for sorting.
        * html/LoadableTextTrack.h:

        * html/TextTrack.cpp:
        (WebCore::TextTrack::TextTrack): Set track type.
        * html/TextTrack.h:
        (WebCore::TextTrack::create): Ditto.
        (WebCore::TextTrack::trackType): Ditto.

        * html/track/TextTrackList.cpp:
        (TextTrackList::length): Update to deal with two TextTrack vectors.
        (TextTrackList::item): Ditto.
        (TextTrackList::append): Ditto.
        (TextTrackList::remove): Ditto
        * html/track/TextTrackList.h: Store the two types of TextTracks in separate Vectors to make
            it simpler to keep them in the correct order.

2011-11-17  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] Layer violation: WebCore::dnsPrefetch uses QWebSettings::globalSettings()
        https://bugs.webkit.org/show_bug.cgi?id=72596

        Reviewed by Kenneth Rohde Christiansen.

        We don't need to use QWebSettings here, because we now propagate the DNS prefetch
        setting to WebCore::Settings and the rest of WebCore checks the setting before calling
        WebCore::prefetchDNS.

        * platform/network/qt/DnsPrefetchHelper.cpp:
        (WebCore::prefetchDNS): Removed the use of QWebSettings.
        * platform/network/qt/DnsPrefetchHelper.h: Remove offending qwebsettings.h inclusion.

2011-11-17  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] Layer violation: Image::loadPlatformResource uses QWebSettings::webGraphic
        https://bugs.webkit.org/show_bug.cgi?id=72594

        Reviewed by Kenneth Rohde Christiansen.

        Move the cache for the resource pixmaps into ImageQt.cpp.

        * platform/graphics/Image.h: Add Qt specific setter for resource pixmaps.
        * platform/graphics/qt/ImageQt.cpp: Moved resource pixmap hash from qwebsettings.
        (earlyClearGraphics):
        (graphics):
        (loadResourcePixmap):
        (WebCore::Image::setPlatformResource):

2011-11-17  Zeno Albisser  <zeno@webkit.org>

        [Qt][WK2] Touch/Mouse events are delivered with wrong coordinates.
        https://bugs.webkit.org/show_bug.cgi?id=72604

        When using the QtViewportInterationEngine for zooming/panning,
        no additional scroll offset should be applied to input events
        by the ScrollView.

        This patch is based on work by Andreas Kling.

        Reviewed by Kenneth Rohde Christiansen.

        * platform/ScrollView.cpp:
        (WebCore::ScrollView::windowToContents):
        (WebCore::ScrollView::contentsToWindow):

2011-11-17  Ben Murdoch  <benm@google.com>

        Unreviewed build fix.

        Fix the Windows builds by adding WorkerEventQueue.cpp|h to the
        vcproj. Build break was introduced in
        https://bugs.webkit.org/show_bug.cgi?id=72528

        * WebCore.vcproj/WebCore.vcproj: Add missing files.

2011-11-17  Mihnea Ovidenie  <mihnea@adobe.com>

        CSS Exclusions: parse the wrap-margin and wrap-padding properties
        https://bugs.webkit.org/show_bug.cgi?id=71900

        Reviewed by Dean Jackson.

        Tests: fast/exclusions/wrap-margin-parsing.html
               fast/exclusions/wrap-padding-parsing.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        * css/CSSParser.cpp:
        (WebCore::isSimpleLengthPropertyID):
        (WebCore::CSSParser::parseValue):
        * css/CSSProperty.cpp:
        (WebCore::CSSProperty::isInheritedProperty):
        * css/CSSPropertyNames.in:
        * css/CSSStyleApplyProperty.cpp:
        (WebCore::CSSStyleApplyProperty::CSSStyleApplyProperty):
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::diff):
        * rendering/style/RenderStyle.h:
        (WebCore::InheritedFlags::wrapPadding):
        (WebCore::InheritedFlags::setWrapPadding):
        (WebCore::InheritedFlags::initialWrapPadding):
        (WebCore::InheritedFlags::wrapMargin):
        (WebCore::InheritedFlags::setWrapMargin):
        (WebCore::InheritedFlags::initialWrapMargin):
        * rendering/style/StyleRareNonInheritedData.cpp:
        (WebCore::StyleRareNonInheritedData::StyleRareNonInheritedData):
        (WebCore::StyleRareNonInheritedData::operator==):
        * rendering/style/StyleRareNonInheritedData.h:

2011-11-17  Kenichi Ishibashi  <bashi@chromium.org>

        [chromium] don't call fontconfig twice in complex text path
        https://bugs.webkit.org/show_bug.cgi?id=38701

        Adds a new API for getting font family. For now, FontCacheLinux calls the new API, but don't use additional properties for compatibility. The old API will be removed when Chromium is ready to use new API.

        Reviewed by Tony Chang.

        No new tests. No behavior changes for now.

        * platform/chromium/PlatformSupport.h: Added FontFamily struct and changed the declaration of getFontFamilyForCharacters().
        * platform/graphics/chromium/FontCacheLinux.cpp:
        (WebCore::FontCache::getFontDataForCharacters): Uses new PlatformSupport::getFontFamilyForCharacters().
        * platform/graphics/chromium/FontPlatformDataLinux.h:
        (WebCore::FontPlatformData::setFakeBold): Added.
        (WebCore::FontPlatformData::setFakeItalic): Added.

2011-11-17  Mario Sanchez Prada  <msanchez@igalia.com>

        [GTK] Consider parent AtkObject in webkit_accessible_get_parent(), if already set
        https://bugs.webkit.org/show_bug.cgi?id=72525

        Reviewed by Xan Lopez.

        * accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:
        (webkit_accessible_get_parent): Call to the implementation of
        atk_object_get_parent in AtkObject class to check whether a parent
        AtkObject has been previously set, before trying to find one.

2011-11-17  Pavel Feldman  <pfeldman@google.com>

        Not reviewed: fix IE user agents strings in the inspector.

        * inspector/front-end/SettingsScreen.js:
        (WebInspector.SettingsScreen.prototype._createUserAgentSelectRowElement.get const):

2011-11-16  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Make use-fixed-layout work reliable
        https://bugs.webkit.org/show_bug.cgi?id=72511

        Reviewed by Simon Hausmann.

        Always send a viewport update per page load as we depend on that,
        to reset all viewport handling before doing layout.

        * page/Page.cpp:
        (WebCore::Page::updateViewportArguments):

2011-11-16  Alexander Pavlov  <apavlov@chromium.org>

        Web Inspector: inspector follows javascript: hrefs as relative
        https://bugs.webkit.org/show_bug.cgi?id=72373

        javascript: hrefs should never be linkified for security.

        Reviewed by Yury Semikhatsky.

        * inspector/front-end/ElementsTreeOutline.js:
        (WebInspector.ElementsTreeElement.prototype._buildAttributeDOM):
        * inspector/front-end/ResourceUtils.js:
        (WebInspector.completeURL):

2011-11-17  Nikolas Zimmermann  <nzimmermann@rim.com>

        Not reviewed. Fix 32bit builds.

        * platform/ClockGeneric.cpp:
        (ClockGeneric::now): Use narrowPrecisionToFloat.
        * rendering/FilterEffectRenderer.cpp:
        (WebCore::FilterEffectRenderer::build): Use it correctly.

2011-11-17  Dominic Mazzoni  <dmazzoni@google.com>

        Accessibility: Chromium requires an AX notification when an iframe loads.
        https://bugs.webkit.org/show_bug.cgi?id=72239

        When a document finishes loading, we were sending an AXLoadComplete if it
        was the top document. Now, if it's a document in an iframe, send an
        AXLayoutComplete on the iframe.

        Reviewed by Chris Fleizach.

        Test: accessibility/loading-iframe-sends-notification.html

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

2011-11-16  Mark Rowe  <mrowe@apple.com>

        <http://webkit.org/b/72574> Remove unnecessary use of CarbonCore APIs from Audio code

        Reviewed by Andy Estes.

        * platform/audio/mac/AudioDestinationMac.cpp:
        (WebCore::AudioDestinationMac::AudioDestinationMac): Switch from using the Carbon Component Manager
        to using AudioUnit's own component interface.
        (WebCore::AudioDestinationMac::~AudioDestinationMac): Ditto.
        * platform/audio/mac/AudioFileReaderMac.cpp:
        (WebCore::AudioFileReader::AudioFileReader): Remove an unncessary trip through the Carbon File Manager
        when converting a char* path to a CFURLRef representing the same.

2011-11-17  Adam Barth  <abarth@webkit.org>

        CSP report-only mode doesn't work from an HTTP header
        https://bugs.webkit.org/show_bug.cgi?id=71958

        Reviewed by Eric Seidel.

        "It's tested or it's broken." -- Adam Leventhal

        Test: http/tests/security/contentSecurityPolicy/report-only-from-header.php

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

2011-11-15  Pavel Feldman  <pfeldman@google.com>

        Web Inspector: introduce Debugger domain capabilities concept.
        https://bugs.webkit.org/show_bug.cgi?id=72393

        Many of the Preferences that we have in Settings.js and override in DevTools.js
        are really not preferences, but capabilities. Protocol clients should have a way
        of figuring out whether some capability is present before using it.

        Reviewed by Yury Semikhatsky.

        * bindings/js/ScriptDebugServer.cpp:
        (WebCore::ScriptDebugServer::canSetScriptSource):
        * bindings/js/ScriptDebugServer.h:
        * bindings/v8/ScriptDebugServer.cpp:
        (WebCore::ScriptDebugServer::canSetScriptSource):
        * bindings/v8/ScriptDebugServer.h:
        * inspector/CodeGeneratorInspector.py:
        * inspector/Inspector.json:
        * inspector/InspectorDebuggerAgent.cpp:
        (WebCore::InspectorDebuggerAgent::getCapabilities):
        * inspector/InspectorDebuggerAgent.h:
        * inspector/front-end/DebuggerModel.js:
        (WebInspector.DebuggerModel):
        (WebInspector.DebuggerModel.prototype.enableDebugger):
        (WebInspector.DebuggerModel.prototype.canSetScriptSource):
        * inspector/front-end/DebuggerPresentationModel.js:
        (WebInspector.DebuggerPresentationModel.prototype.canEditScriptSource):
        * inspector/front-end/Settings.js:

2011-11-17  Mihnea Ovidenie  <mihnea@adobe.com>

        CSS exclusions: parse the wrap-flow and wrap-through properties
        https://bugs.webkit.org/show_bug.cgi?id=71904

        Reviewed by Dean Jackson.

        Tests: fast/exclusions/wrap-flow-parsing.html
               fast/exclusions/wrap-through-parsing.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):
        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        (WebCore::CSSPrimitiveValue::operator WrapFlow):
        (WebCore::CSSPrimitiveValue::operator WrapThrough):
        * css/CSSProperty.cpp:
        (WebCore::CSSProperty::isInheritedProperty):
        * css/CSSPropertyNames.in:
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):
        * css/CSSValueKeywords.in:
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::diff):
        * rendering/style/RenderStyle.h:
        (WebCore::InheritedFlags::wrapFlow):
        (WebCore::InheritedFlags::wrapThrough):
        (WebCore::InheritedFlags::setWrapFlow):
        (WebCore::InheritedFlags::setWrapThrough):
        (WebCore::InheritedFlags::initialWrapFlow):
        (WebCore::InheritedFlags::initialWrapThrough):
        * rendering/style/RenderStyleConstants.h:
        * rendering/style/StyleRareNonInheritedData.cpp:
        (WebCore::StyleRareNonInheritedData::StyleRareNonInheritedData):
        (WebCore::StyleRareNonInheritedData::operator==):
        * rendering/style/StyleRareNonInheritedData.h:

2011-11-16  Dean Jackson  <dino@apple.com>

        Implement filter function shorthands
        https://bugs.webkit.org/show_bug.cgi?id=68475

        Reviewed by Simon Fraser.

        Implement the shorthand functions for filter effects.
        This includes grayscale, sepia, invert, hue-rotate, saturate,
        opacity, gamma, drop-shadow and blur. At the moment sharpen
        and url are not supported.

        CSSParser needed to be updated because it was mistakenly
        clamping saturation values to [0,1]. Any positive number
        is allowed so you can produce super-saturated images.

        The biggest change was the API to FilterEffectRenderer. It now
        builds a list of effects and applies the filter itself.

        Note that the drop-shadow and blur operations don't yet
        provide accurate results because they produce an output image
        that is larger than the input. See
        https://bugs.webkit.org/show_bug.cgi?id=71929
        https://bugs.webkit.org/show_bug.cgi?id=71930

        While I was there, I fixed a small style issue in
        CustomFilterOperation.

        Tests: css3/filters/effect-blur.html
               css3/filters/effect-combined.html
               css3/filters/effect-drop-shadow.html
               css3/filters/effect-gamma.html
               css3/filters/effect-grayscale.html
               css3/filters/effect-hue-rotate.html
               css3/filters/effect-invert.html
               css3/filters/effect-opacity.html
               css3/filters/effect-saturate.html
               css3/filters/effect-sepia.html

        * WebCore.xcodeproj/project.pbxproj: Add StyleShader.h to
        the project (missing from earlier commit).
        * css/CSSParser.cpp:
        (WebCore::CSSParser::isValidFilterArgument): Don't clamp
        saturate to [0,1]
        * platform/graphics/filters/CustomFilterOperation.h:
        * rendering/FilterEffectRenderer.cpp:
        (WebCore::endMatrixRow):
        (WebCore::lastMatrixRow):
        (WebCore::FilterEffectRenderer::FilterEffectRenderer):
        (WebCore::FilterEffectRenderer::inputContext):
        (WebCore::FilterEffectRenderer::build):
        (WebCore::FilterEffectRenderer::prepare):
        (WebCore::FilterEffectRenderer::apply):
        * rendering/FilterEffectRenderer.h:
        (WebCore::FilterEffectRenderer::setSourceImageRect):
        (WebCore::FilterEffectRenderer::output):
        (WebCore::FilterEffectRenderer::setMaxEffectRects):
        (WebCore::FilterEffectRenderer::lastEffect):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::paintLayer):
        (WebCore::RenderLayer::updateOrRemoveFilterEffect):
        (WebCore::RenderLayer::updateFilterBackingStore):

2011-11-16  Kentaro Hara  <haraken@chromium.org>

        Remove all custom constructors of Events from JSC
        https://bugs.webkit.org/show_bug.cgi?id=72577

        Reviewed by Adam Barth.

        - Makes CodeGeneratorJS.pm generate Event constructors
        if [ConstructorTemplate=Event] IDL is specified.
        - Removes EventConstructors.h and JSEventConstructors.cpp.
        - Replaces all JSC custom constructors of Events
        with the generated code by [ConstructorTemplate=Event] IDL.

        Tests: fast/events/constructors/before-load-event-constructor.html
               fast/events/constructors/close-event-constructor.html
               fast/events/constructors/custom-event-constructor.html
               fast/events/constructors/error-event-constructor.html
               fast/events/constructors/event-constructors.html
               fast/events/constructors/hash-change-event-constructor.html
               fast/events/constructors/message-event-constructor.html
               fast/events/constructors/overflow-event-constructor.html
               fast/events/constructors/page-transition-event-constructor.html
               fast/events/constructors/pop-state-event-constructor.html
               fast/events/constructors/progress-event-constructor.html
               fast/events/constructors/track-event-constructor.html
               fast/events/constructors/webkit-animation-event-constructor.html
               fast/events/constructors/webkit-transition-event-constructor.html

        * bindings/generic/EventConstructors.h: Removed. This is what we wanted to do in this patch.
        * bindings/js/JSEventConstructors.cpp: Ditto.
        * GNUmakefile.list.am: Removed EventConstructors.h and JSEventConstructors.cpp.
        * Target.pri: Ditto.
        * UseJSC.cmake: Ditto.
        * WebCore.gypi: Ditto.
        * WebCore.vcproj/WebCore.vcproj: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Ditto.
        * bindings/js/JSBindingsAllInOne.cpp: Ditto.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateHeader): Added JSDictionary.h.
        (GenerateConstructorDeclaration): Added a header for fillXXXXEventInit(...).
        (GenerateConstructorDefinition): Generates an Event constructor. The generated code is the same as the code that had been written in JSEventConstructors.cpp.
        (IsConstructable): Judges if a given interface is constructable.
        (IsConstructorTemplate): Judges if a given interface has a given template, e.g. judges if an interface has [ConstructorTemplate=Event].

        * bindings/scripts/test/TestEventConstructor.idl: Changed 'CustomConstructor=Event' to 'ConstructorTemplate=Event'. We should have changed this in r100108.
        * bindings/scripts/test/JS/JSTestEventConstructor.cpp: Updated a run-bindings-tests result.
        (WebCore::JSTestEventConstructorConstructor::constructJSTestEventConstructor):
        (WebCore::fillTestEventConstructorInit):
        * bindings/scripts/test/JS/JSTestEventConstructor.h: Ditto.
        * bindings/scripts/test/V8/V8TestEventConstructor.cpp: Ditto.
        (WebCore::V8TestEventConstructor::constructorCallback):
        (WebCore::fillTestEventConstructorInit):
        * bindings/scripts/test/V8/V8TestEventConstructor.h: Ditto.

        * dom/BeforeLoadEvent.idl: In essence, replaced [JSCustomConstructor] IDL with [JSConstructorTemplate=Event] IDL.
        * dom/CustomEvent.idl: Ditto.
        * dom/ErrorEvent.idl: Ditto.
        * dom/Event.idl: Ditto.
        * dom/HashChangeEvent.idl: Ditto.
        * dom/MessageEvent.idl: Ditto.
        * dom/OverflowEvent.idl: Ditto.
        * dom/PageTransitionEvent.idl: Ditto.
        * dom/PopStateEvent.idl: Ditto.
        * dom/ProgressEvent.idl: Ditto.
        * dom/WebKitAnimationEvent.idl: Ditto.
        * dom/WebKitTransitionEvent.idl: Ditto.
        * html/track/TrackEvent.idl: Ditto.
        * websockets/CloseEvent.idl: Ditto.

2011-11-16  Dean Jackson  <dino@apple.com>

        Build fix for Apple WebKit due to r100560.
        When I removed the violating header file it lost the
        reference to Color.

        No review.

        * platform/graphics/filters/FilterOperation.h:

2011-11-16  Dean Jackson  <dino@apple.com>

        DropShadowFilterOperation violates platform isolation
        https://bugs.webkit.org/show_bug.cgi?id=72544

        Reviewed by Simon Fraser.

        Move ShadowData properties into the DropShadowFilterOperation
        to avoid depending on something outside platform.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::valueForFilter):
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::createFilterOperations):
        * platform/graphics/filters/FilterOperation.h:
        (WebCore::DropShadowFilterOperation::create):
        (WebCore::DropShadowFilterOperation::x):
        (WebCore::DropShadowFilterOperation::y):
        (WebCore::DropShadowFilterOperation::stdDeviation):
        (WebCore::DropShadowFilterOperation::color):
        (WebCore::DropShadowFilterOperation::operator==):
        (WebCore::DropShadowFilterOperation::DropShadowFilterOperation):

2011-11-16  Adam Bergkvist  <adam.bergkvist@ericsson.com>

        Use a simple page client for user consent in getUserMedia()
        https://bugs.webkit.org/show_bug.cgi?id=70897

        Reviewed by Adam Barth.

        This is one in a series of patches that update the MediaStream feature
        to use WebCore platform interfaces.

        Covered by existing tests.

        * GNUmakefile.list.am:
        * WebCore.gypi:
        * mediastream/MediaStreamClient.h: Removed.
        * mediastream/MediaStreamController.cpp: Removed.
        * mediastream/MediaStreamController.h: Removed.
        * mediastream/MediaStreamFrameController.cpp: Removed.
        * mediastream/MediaStreamFrameController.h: Removed.
        * mediastream/UserMediaClient.h: Added.
        (WebCore::UserMediaClient::~UserMediaClient):
        * mediastream/UserMediaRequest.cpp: Added.
        (WebCore::UserMediaRequest::create):
        (WebCore::UserMediaRequest::UserMediaRequest):
        (WebCore::UserMediaRequest::~UserMediaRequest):
        (WebCore::UserMediaRequest::start):
        (WebCore::UserMediaRequest::mediaStreamSourcesQueryCompleted):
        (WebCore::UserMediaRequest::succeed):
        (WebCore::UserMediaRequest::fail):
        (WebCore::UserMediaRequest::contextDestroyed):
        (WebCore::UserMediaRequest::parseOptions):
        * mediastream/UserMediaRequest.h: Added.
        (WebCore::UserMediaRequest::audio):
        (WebCore::UserMediaRequest::video):
        (WebCore::UserMediaRequest::cameraPreferenceUser):
        (WebCore::UserMediaRequest::cameraPreferenceEnvironment):
        (WebCore::UserMediaRequest::successCallback):
        (WebCore::UserMediaRequest::errorCallback):
        * page/CallbackTask.h: Removed.
        * page/Frame.cpp:
        (WebCore::Frame::Frame):
        (WebCore::Frame::~Frame):
        (WebCore::Frame::pageDestroyed):
        (WebCore::Frame::transferChildFrameToNewDocument):
        * page/Frame.h:
        * page/Navigator.cpp:
        (WebCore::Navigator::webkitGetUserMedia):
        * page/NavigatorUserMediaErrorCallback.h:
        * page/Page.cpp:
        (WebCore::Page::Page):
        (WebCore::Page::~Page):
        (WebCore::Page::PageClients::PageClients):
        * page/Page.h:
        (WebCore::Page::userMediaClient):

2011-11-16  David Grogan  <dgrogan@chromium.org>

        instantiate WorkerEventQueue in WorkerContext
        https://bugs.webkit.org/show_bug.cgi?id=72528

        Reviewed by David Levin.

        No new tests - nothing uses it yet.

        * workers/WorkerContext.cpp:
        (WebCore::WorkerContext::WorkerContext):
        Instantiate WorkerEventQueue in InitializerList

        * workers/WorkerEventQueue.h:
        Don't inherit from RefCounted, WorkerContext has an OwnPtr to it

2011-11-16  Kentaro Hara  <haraken@chromium.org>

        Unreviewed. Rebaselined run-bindings-tests results.

        * bindings/scripts/test/JS/JSTestEventConstructor.cpp:
        (WebCore::JSTestEventConstructor::JSTestEventConstructor):
        (WebCore::JSTestEventConstructorOwner::finalize):
        * bindings/scripts/test/JS/JSTestEventConstructor.h:
        (WebCore::JSTestEventConstructor::impl):
        (WebCore::JSTestEventConstructor::releaseImpl):
        * bindings/scripts/test/JS/JSTestInterface.cpp:
        (WebCore::JSTestInterface::JSTestInterface):
        (WebCore::JSTestInterfaceOwner::finalize):
        * bindings/scripts/test/JS/JSTestInterface.h:
        (WebCore::JSTestInterface::impl):
        (WebCore::JSTestInterface::releaseImpl):
        * bindings/scripts/test/JS/JSTestMediaQueryListListener.cpp:
        (WebCore::JSTestMediaQueryListListener::JSTestMediaQueryListListener):
        (WebCore::JSTestMediaQueryListListenerOwner::finalize):
        * bindings/scripts/test/JS/JSTestMediaQueryListListener.h:
        (WebCore::JSTestMediaQueryListListener::impl):
        (WebCore::JSTestMediaQueryListListener::releaseImpl):
        * bindings/scripts/test/JS/JSTestNamedConstructor.cpp:
        (WebCore::JSTestNamedConstructor::JSTestNamedConstructor):
        (WebCore::JSTestNamedConstructorOwner::finalize):
        * bindings/scripts/test/JS/JSTestNamedConstructor.h:
        (WebCore::JSTestNamedConstructor::impl):
        (WebCore::JSTestNamedConstructor::releaseImpl):
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::JSTestObj::JSTestObj):
        (WebCore::JSTestObjOwner::finalize):
        * bindings/scripts/test/JS/JSTestObj.h:
        (WebCore::JSTestObj::impl):
        (WebCore::JSTestObj::releaseImpl):
        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp:
        (WebCore::JSTestSerializedScriptValueInterface::JSTestSerializedScriptValueInterface):
        (WebCore::JSTestSerializedScriptValueInterfaceOwner::finalize):
        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.h:
        (WebCore::JSTestSerializedScriptValueInterface::impl):
        (WebCore::JSTestSerializedScriptValueInterface::releaseImpl):

2011-11-16  Jay Civelli  <jcivelli@chromium.org>

        Make sure MHTML documents use the domain of the MHTML file.
        https://bugs.webkit.org/show_bug.cgi?id=72445

        Reviewed by Adam Barth.

        * dom/Document.h:
        (WebCore::Document::setBaseURL):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::receivedFirstData):

2011-11-16  Julien Chaffraix  <jchaffraix@webkit.org>

        Update supported display list after -webkit-grid and -webkit-inline-grid addition
        https://bugs.webkit.org/show_bug.cgi?id=72559

        Reviewed by Tony Chang.

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue): Added the 2 new supported
        values (forgotten in the previous change).

2011-11-11  Adrienne Walker  <enne@google.com>

        [chromium] Expose mock scrollbars to window.internals
        https://bugs.webkit.org/show_bug.cgi?id=72195

        Reviewed by James Robinson.

        * testing/Internals.cpp:
        (WebCore::Internals::setMockScrollbarsEnabled):
        * testing/Internals.h:
        * testing/Internals.idl:

2011-11-16  Michael Nordman  <michaeln@google.com>

        ApplicationCache manifest should work with any MIME type.
        https://bugs.webkit.org/show_bug.cgi?id=72082

        Reviewed by Alexey Proskuryakov.

        * loader/appcache/ApplicationCacheGroup.cpp:
        (WebCore::ApplicationCacheGroup::didReceiveManifestResponse): Remove the test for a particular type.

2011-11-16  Daniel Sievers  <sievers@chromium.org>

        [Chromium] Avoid color mask operations for root layers
        https://bugs.webkit.org/show_bug.cgi?id=72452

        Instead of relying on the combination of clearing the surface and initializing
        the alpha channel to 1.0 followed by disabling alpha in the color mask when
        rendering the root layer tiles, add shaders to support writing out opaque layers
        (alpha channel values written as 1.0).

        Reviewed by James Robinson.

        No functional change made that requires new tests.

        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::drawLayersInternal):
        (WebCore::LayerRendererChromium::initializeSharedObjects):
        (WebCore::LayerRendererChromium::tilerProgramOpaque):
        (WebCore::LayerRendererChromium::tilerProgramOpaqueAA):
        (WebCore::LayerRendererChromium::tilerProgramSwizzleOpaque):
        (WebCore::LayerRendererChromium::tilerProgramSwizzleOpaqueAA):
        (WebCore::LayerRendererChromium::cleanupSharedObjects):
        * platform/graphics/chromium/LayerRendererChromium.h:
        * platform/graphics/chromium/ShaderChromium.cpp:
        (WebCore::FragmentTexOpaqueBinding::FragmentTexOpaqueBinding):
        (WebCore::FragmentTexOpaqueBinding::init):
        (WebCore::FragmentShaderRGBATexOpaque::getShaderString):
        (WebCore::FragmentShaderRGBATexSwizzleOpaque::getShaderString):
        (WebCore::FragmentTexClampOpaqueAABinding::FragmentTexClampOpaqueAABinding):
        (WebCore::FragmentTexClampOpaqueAABinding::init):
        (WebCore::FragmentShaderRGBATexClampOpaqueAA::getShaderString):
        (WebCore::FragmentShaderRGBATexClampSwizzleOpaqueAA::getShaderString):
        * platform/graphics/chromium/ShaderChromium.h:
        (WebCore::FragmentTexOpaqueBinding::alphaLocation):
        (WebCore::FragmentTexOpaqueBinding::samplerLocation):
        (WebCore::FragmentTexClampOpaqueAABinding::alphaLocation):
        (WebCore::FragmentTexClampOpaqueAABinding::samplerLocation):
        (WebCore::FragmentTexClampOpaqueAABinding::fragmentTexTransformLocation):
        (WebCore::FragmentTexClampOpaqueAABinding::edgeLocation):
        * platform/graphics/chromium/cc/CCTiledLayerImpl.cpp:
        (WebCore::CCTiledLayerImpl::draw):
        * platform/graphics/chromium/cc/CCTiledLayerImpl.h:

2011-11-16  Tim Horton  <timothy_horton@apple.com>

        Implement CSS3 Images cross-fade() image function
        https://bugs.webkit.org/show_bug.cgi?id=52162
        <rdar://problem/10209254>

        Reviewed by Simon Fraser.

        Render -webkit-cross-fade. Only cross-fades entirely composed of images will render for now,
        cross-fades involving generated images are not yet implemented.

        Reorganize GeneratedImage to be the base class for GeneratorGeneratedImage and CrossfadeGeneratedImage.

        Add a pending state to CSSImageGeneratorValue, which is used to enable the pending-images loading
        mechanism for -webkit-cross-fade's sub-images. Rework the logic in CSSStyleSelector to support pending
        generated images.
        
        Support parsing fractional values for the cross-fade amount (for example, 0.5 = 50%). Clamp cross-fade
        amount to 0-1 range.

        Tests: css3/images/cross-fade-invalidation.html
               css3/images/cross-fade-simple.html
               css3/images/cross-fade-sizing.html
               css3/images/cross-fade-tiled.html

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSCanvasValue.h:
        (WebCore::CSSCanvasValue::isPending):
        (WebCore::CSSCanvasValue::loadSubimages):
        * css/CSSCrossfadeValue.cpp:
        (WebCore::CSSCrossfadeValue::isPending):
        (WebCore::CSSCrossfadeValue::loadSubimages):
        (WebCore::subimageIsPending):
        (WebCore::loadSubimage):
        (WebCore::cachedImageForCSSValue):
        (WebCore::CSSCrossfadeValue::image):
        (WebCore::CSSCrossfadeValue::crossfadeChanged):
        * css/CSSCrossfadeValue.h:
        (WebCore::CSSCrossfadeValue::create):
        (WebCore::CSSCrossfadeValue::~CSSCrossfadeValue):
        (WebCore::CSSCrossfadeValue::fixedSize):
        (WebCore::CSSCrossfadeValue::CSSCrossfadeValue):
        (WebCore::CSSCrossfadeValue::CrossfadeObserverProxy::CrossfadeObserverProxy):
        * css/CSSGradientValue.cpp:
        (WebCore::CSSGradientValue::image):
        * css/CSSGradientValue.h:
        (WebCore::CSSGradientValue::isPending):
        (WebCore::CSSGradientValue::loadSubimages):
        * css/CSSImageGeneratorValue.cpp:
        (WebCore::CSSImageGeneratorValue::generatedOrPendingImage):
        (WebCore::CSSImageGeneratorValue::generatedImage):
        (WebCore::CSSImageGeneratorValue::isPending):
        (WebCore::CSSImageGeneratorValue::loadSubimages):
        * css/CSSImageGeneratorValue.h:
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseCrossfade):
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::styleImage):
        (WebCore::CSSStyleSelector::generatedOrPendingFromValue):
        (WebCore::CSSStyleSelector::loadPendingImage):
        (WebCore::CSSStyleSelector::loadPendingImages):
        * css/CSSStyleSelector.h:
        * platform/graphics/BitmapImage.h:
        * platform/graphics/CrossfadeGeneratedImage.cpp: Added.
        (WebCore::CrossfadeGeneratedImage::CrossfadeGeneratedImage):
        (WebCore::CrossfadeGeneratedImage::~CrossfadeGeneratedImage):
        (WebCore::CrossfadeGeneratedImage::drawCrossfade):
        (WebCore::CrossfadeGeneratedImage::draw):
        (WebCore::CrossfadeGeneratedImage::drawPattern):
        (WebCore::CrossfadeGeneratedImage::imageChanged):
        * platform/graphics/CrossfadeGeneratedImage.h: Added.
        (WebCore::CrossfadeGeneratedImage::create):
        (WebCore::CrossfadeSubimageObserverProxy::CrossfadeSubimageObserverProxy):
        (WebCore::CrossfadeSubimageObserverProxy::setReady):
        * platform/graphics/GeneratedImage.h:
        (WebCore::GeneratedImage::GeneratedImage):
        * platform/graphics/GeneratorGeneratedImage.cpp: Renamed from Source/WebCore/platform/graphics/GeneratedImage.cpp.
        (WebCore::GeneratorGeneratedImage::draw):
        (WebCore::GeneratorGeneratedImage::drawPattern):
        (WebCore::GeneratedImage::computeIntrinsicDimensions):
        * platform/graphics/GeneratorGeneratedImage.h: Copied from Source/WebCore/platform/graphics/GeneratedImage.h.
        (WebCore::GeneratorGeneratedImage::create):
        (WebCore::GeneratorGeneratedImage::~GeneratorGeneratedImage):
        (WebCore::GeneratorGeneratedImage::GeneratorGeneratedImage):
        * platform/graphics/Image.h:
        * platform/graphics/ImageBuffer.h:
        * rendering/style/StylePendingImage.h:
        (WebCore::StylePendingImage::create):
        (WebCore::StylePendingImage::data):
        (WebCore::StylePendingImage::cssImageValue):
        (WebCore::StylePendingImage::cssImageGeneratorValue):
        (WebCore::StylePendingImage::StylePendingImage):


2011-11-16  Dan Bernstein  <mitz@apple.com>

        WebCore part of <rdar://problem/10262242> Add API for paginated display
        https://bugs.webkit.org/show_bug.cgi?id=72537

        Reviewed by Anders Carlsson.

        * WebCore.exp.in: Exported Page::pageCount().
        * page/Page.cpp:
        (WebCore::Page::pageCount): Added this getter.
        * page/Page.h:

2011-11-16  Shawn Singh  <shawnsingh@chromium.org>

        [chromium] Track property changes for render surfaces.
        https://bugs.webkit.org/show_bug.cgi?id=72521

        Reviewed by James Robinson.

        Created CCRenderSurfaceTest for testing.

        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::drawLayersOntoRenderSurfaces):
        * platform/graphics/chromium/cc/CCLayerImpl.cpp:
        (WebCore::CCLayerImpl::resetPropertyChangedFlagForSubtree):
        * platform/graphics/chromium/cc/CCLayerImpl.h:
        * platform/graphics/chromium/cc/CCRenderSurface.cpp:
        (WebCore::CCRenderSurface::CCRenderSurface):
        (WebCore::CCRenderSurface::setClipRect):
        (WebCore::CCRenderSurface::setContentRect):
        (WebCore::CCRenderSurface::surfacePropertyChanged):
        * platform/graphics/chromium/cc/CCRenderSurface.h:
        (WebCore::CCRenderSurface::resetPropertyChangedFlag):

2011-11-16  Ben Wells  <benwells@chromium.org>

        Seaming on border corners with mixed colour alpha borders
        https://bugs.webkit.org/show_bug.cgi?id=70471

        Reviewed by Simon Fraser.

        Seaming is fixed by antialiasing mitred corners for edges that have alpha and are joining
        a side that is of a different color.

        Test: fast/borders/border-mixed-alpha.html

        * rendering/RenderBoxModelObject.cpp:
        (WebCore::colorNeedsAntiAliasAtCorner):
        (WebCore::RenderBoxModelObject::paintOneBorderSide):

2011-11-16  Sam Weinig  <sam@webkit.org>

        JS wrappers of DOM objects should have no-op constructors
        https://bugs.webkit.org/show_bug.cgi?id=72556

        Reviewed by Geoffrey Garen.

        Stop using a RefPtr to hold DOM objects contained by JavaScript
        wrappers and instead use a raw pointer. We were already releasing
        the underlying object before the destructor ran (via the finalizer)
        so the default behavior of destroying the RefPtr is always unnecessary
        busy work. 

        * bindings/js/JSCSSValueCustom.cpp:
        (WebCore::JSCSSValueOwner::finalize):
        * bindings/js/JSNodeCustom.cpp:
        (WebCore::JSNodeOwner::finalize):
        (WebCore::JSNode::visitChildren):
        Call releaseImpl() instead of clearImpl().

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateHeader):
        Stop storing m_impl in a RefPtr and instead use a raw pointer. Switch
        clearImpl() to releaseImpl(), which explicitly derefs the pointer and
        clear it.

        (GenerateImplementation):
        Use leakPtr() to explicitly adopt the PassRefPtr into the raw pointer.
        Change default finalize to call releaseImpl() instead of clearImpl().

2011-11-16  Michael Saboff  <msaboff@apple.com>

        Enable 8 Bit Strings in JavaScriptCore
        https://bugs.webkit.org/show_bug.cgi?id=71337

        This patch turns on 8 bit strings in StringImpl and enables
        their use in JavaScriptCore. Some of the changes are to
        turn on code that had been staged (Lexer.cpp, Identifier.cpp,
        SmallStrings.cpp and some of StringImpl.{h,cpp}).
        Other changes are minor fixes to make 8 bit strings work
        (UString.h, StringImpl::getData16SlowCase()).
        Changed StringBuffer to be a templated class based on character
        type.  This change riplled into WebCore code as well.

        Reviewed by Geoffrey Garen.

        No new tests - Changes in response to refactoring StringBuffer to
        be a template on character type.

        * css/CSSParser.cpp:
        (WebCore::quoteCSSString):
        * css/CSSPrimitiveValue.cpp:
        (WebCore::formatNumber):
        * dom/Document.cpp:
        (WebCore::canonicalizedTitle):
        * platform/Length.cpp:
        (WebCore::newCoordsArray):
        * platform/sql/SQLiteStatement.cpp:
        (WebCore::SQLiteStatement::prepare):
        * platform/text/TextCodecUTF16.cpp:
        (WebCore::TextCodecUTF16::decode):
        * platform/text/TextCodecUTF8.cpp:
        (WebCore::TextCodecUTF8::decode):
        * rendering/RenderText.cpp:
        (WebCore::makeCapitalized):
        * xml/XSLTProcessorLibxslt.cpp:
        (WebCore::writeToStringBuilder):

2011-11-16  Alexandre Elias  <aelias@google.com>

        [chromium] Improvements for page scale delta during commit
        https://bugs.webkit.org/show_bug.cgi?id=72471

        Reviewed by James Robinson.

        Page scale now follows the same commit flow as scroll position:
        the delta is folded into m_pageScale at BFAC time, and a "sent" value
        is preserved for temporary use until the commit finishes.

        I also merged setPageScaleFactor and setPageScaleFactorLimits into one
        function on the impl side.  The reason is that setPageFactor must
        be applied after the limits are updated, but on the other hand setting
        the limits first may cause an unnecessary clamp of the scale delta.
        Merging the methods avoids this bind.

        No new tests. (planning to add later: https://bugs.webkit.org/show_bug.cgi?id=71529)

        * platform/graphics/chromium/cc/CCLayerTreeHost.cpp:
        (WebCore::CCLayerTreeHost::finishCommitOnImplThread):
        (WebCore::CCLayerTreeHost::applyScrollAndScale):
        * platform/graphics/chromium/cc/CCLayerTreeHostCommon.h:
        * platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:
        (WebCore::CCLayerTreeHostImpl::CCLayerTreeHostImpl):
        (WebCore::CCLayerTreeHostImpl::setPageScaleFactorAndLimits):
        (WebCore::CCLayerTreeHostImpl::adjustScrollsForPageScaleChange):
        (WebCore::CCLayerTreeHostImpl::setScaleDelta):
        (WebCore::CCLayerTreeHostImpl::applyScaleDeltaToScrollLayer):
        (WebCore::CCLayerTreeHostImpl::scrollRootLayer):
        (WebCore::CCLayerTreeHostImpl::processScrollDeltas):
        * platform/graphics/chromium/cc/CCLayerTreeHostImpl.h:

2011-11-16  Joshua Bell  <jsbell@chromium.org>

        IndexedDB: Reduce nested key depth threshold, re-enable flaky test
        https://bugs.webkit.org/show_bug.cgi?id=72529

        Reviewed by Adam Barth.

        Drop maximum array key depth from 20k to 2k.

        * bindings/v8/IDBBindingUtilities.cpp:

2011-11-16  Nate Chapin  <japhet@chromium.org>

        Fix incorrect multipart handling in r100311.
        SubresourceLoader::didReceiveData() is getting called
        twice, which has unintended side effects.
        https://bugs.webkit.org/show_bug.cgi?id=72436

        Reviewed by Adam Barth.

        http/tests/multipart/invalid-image-data.html should stop
        asserting after this.

        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::didReceiveResponse):
        (WebCore::SubresourceLoader::didReceiveData):
        (WebCore::SubresourceLoader::sendDataToResource):
        * loader/SubresourceLoader.h:

2011-11-16  Justin Schuh  <jschuh@chromium.org>

        Clear SVG filter client when its node is detached
        https://bugs.webkit.org/show_bug.cgi?id=71741

        Reviewed by Eric Seidel.

        Test: svg/filters/reparent-animated-filter-target.html

        * rendering/svg/SVGResourcesCache.cpp:
        (WebCore::SVGResourcesCache::clientDestroyed):

2011-11-16  John Bates  <jbates@google.com>

        Page/layer flashes after GPU-accelerated CSS transition
        https://bugs.webkit.org/show_bug.cgi?id=72343

        LayerRendererChromium was resizing the window to 1x1 at initialization.
        In some cases, there is no drawLayers before switching back to
        software rendering. This left the window resized to 1x1 and the
        following software paints would therefore not be visible. This change
        moves the reshape call into drawLayers so that it will only be called
        if rendering will occur.

        Reviewed by James Robinson.

        New test: CCLayerTreeHostImplTest.reshapeNotCalledUntilDraw.

        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::viewportChanged):
        (WebCore::LayerRendererChromium::doViewportChanged):
        (WebCore::LayerRendererChromium::drawLayersInternal):
        * platform/graphics/chromium/LayerRendererChromium.h:

2011-11-16  Alexandre Elias  <aelias@google.com>

        [chromium] Add null pointer check in setDeviceScaleFactor
        https://bugs.webkit.org/show_bug.cgi?id=72464

        Reviewed by James Robinson.

        No new tests. (Tiny fix.)

        * page/Page.cpp:
        (WebCore::Page::setDeviceScaleFactor):

2011-11-16  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r100438.
        http://trac.webkit.org/changeset/100438
        https://bugs.webkit.org/show_bug.cgi?id=72536

        Broke unit tests (Requested by jamesr_ on #webkit).

        * platform/PlatformScreen.h:
        * platform/chromium/PlatformScreenChromium.cpp:
        * platform/chromium/PlatformSupport.h:
        * platform/graphics/chromium/cc/CCLayerTreeHost.h:
        (WebCore::CCSettings::CCSettings):
        * platform/graphics/chromium/cc/CCThreadProxy.cpp:
        (WebCore::CCThreadProxy::initializeImplOnImplThread):

2011-11-16  Andy Estes  <aestes@apple.com>

        Assertion failure in LayerFlushScheduler::resume() when running some layout tests in WebKitTestRunner
        https://bugs.webkit.org/show_bug.cgi?id=72535

        Reviewed by Anders Carlsson.

        LayerFlushScheduler attempted to use a counter strategy for calls to
        suspend() and resume(), which allowed us to assert that these calls
        were balanced. Unfortunately it is hard to guarantee this in WebKit2,
        where we sometimes try to call suspend() before we've entered
        compositing mode (hence before we have a LayerTreeHost and a
        LayerFlushScheduler). When we later call resume(), this call ends up
        being unbalanced and asserts.

        For now, remove the assertions and allow unbalanced calls to suspend()
        and resume().

        * platform/graphics/ca/LayerFlushScheduler.cpp:
        (WebCore::LayerFlushScheduler::suspend):
        (WebCore::LayerFlushScheduler::resume):
        * platform/graphics/ca/LayerFlushScheduler.h:
        * platform/graphics/ca/mac/LayerFlushSchedulerMac.cpp:
        (WebCore::LayerFlushScheduler::LayerFlushScheduler):
        (WebCore::LayerFlushScheduler::runLoopObserverCallback):
        (WebCore::LayerFlushScheduler::schedule):

2011-11-16  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r100473.
        http://trac.webkit.org/changeset/100473
        https://bugs.webkit.org/show_bug.cgi?id=72534

        "Broke the Mac Build" (Requested by mwenge2 on #webkit).

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::addChildIgnoringAnonymousColumnBlocks):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::createObject):
        (WebCore::RenderObject::addChild):
        * rendering/RenderObject.h:
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::addChild):
        * rendering/RenderTable.h:
        * rendering/RenderTableCaption.cpp: Removed.
        * rendering/RenderTableCaption.h: Removed.

2011-11-16  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r100479.
        http://trac.webkit.org/changeset/100479
        https://bugs.webkit.org/show_bug.cgi?id=72533

        "Broke the Mac Build" (Requested by mwenge2 on #webkit).

        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * rendering/RenderingAllInOne.cpp:

2011-11-16  Chris Fleizach  <cfleizach@apple.com>

        WebKitTestRunner needs to support accessibility-related DRT APIs
        https://bugs.webkit.org/show_bug.cgi?id=42131

        Minor changes needed to support AX testing in WKTestRunner.

        Reviewed by Beth Dakin.

        * WebCore.exp.in:
             Expose focusedUIElementForPage so that the WK2 injected bundle can retrieve it.
        * accessibility/mac/WebAccessibilityObjectWrapper.mm:
        (accessibilitySearchKeyForString):
            Remove an unncessary assert that was causing issues with the WK2 test run.

2011-11-16  Sergio Villar Senin  <svillar@igalia.com>

        [Soup] Somet tests fail with FAIL Unexpected response data received: Wrong method: GET
        https://bugs.webkit.org/show_bug.cgi?id=69219

        Reviewed by Martin Robinson.

        Do not stop appending data to the request body if any of the blob
        items to upload is not accesible.

        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::addEncodedBlobToSoupMessageBody):

2011-11-16  Beth Dakin  <bdakin@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=72400
        Scrollbar uiStateTransitionProgress requires tracking the mouse all the time
        -and corresponding-
        <rdar://problem/10409328>

        Reviewed by Darin Adler.

        This patch makes it so we track the mouse all the time when we have legacy 
        scrollbars (rather than only tracking the mouse when the window is key). When 
        we're in that mode, we want to do as little work as possible when handling the 
        mouseMoved event so that this extra tracking has little to no performance impact. 
        Also, we don't want to change basic behaviors by having normal web content hover 
        effects start happening when a window is in the background. So this patch also 
        introduces a way to handle a mouseMoved event that will only affect scrollbars.

        EventHandler::mouseMoved() and EventHandler::handleMouseEvent() both now take a 
        boolean parameter that indicates if we are only updating scrollbars. If that is 
        the case, then we make our HitTestRequest ReadOnly, and we return early once 
        updateLastScrollbarUnderMouse() is called.
        * WebCore.exp.in:
        * page/EventHandler.cpp:
        (WebCore::EventHandler::mouseMoved):
        (WebCore::EventHandler::handleMouseMoveEvent):

        In addition to calling Scrollbar::mouseExited() when appropriate, this function 
        now calls a new function, Scrollbar::mouseEntered() when appropriate. 
        (WebCore::EventHandler::updateLastScrollbarUnderMouse):
        * page/EventHandler.h:

        Scrollbar::mouseMoved() used to be responsible for calling 
        ScrollAnimator::mouseEnteredScrollbar(), but now Scrollbar::mouseEntered() takes 
        care of that instead, much like how Scrollbar::mouseExited() takes care of calling 
        the animator's exit function.
        * platform/Scrollbar.cpp:
        (WebCore::Scrollbar::mouseMoved):
        (WebCore::Scrollbar::mouseEntered):
        * platform/Scrollbar.h:

2011-11-16  Andreas Kling  <kling@webkit.org>

        CSSValue: isInheritedValue() doesn't need a dedicated bit.
        <http://webkit.org/b/72514>

        Reviewed by Antti Koivisto.

        Remove CSSValue::m_isInherited and have isInheritedValue() check the
        class type instead. There's no compelling reason for CSSInheritedValue
        to have a dedicated bit, since nobody subclasses it anyway.

        * css/CSSValue.h:
        (WebCore::CSSValue::isInheritedValue):
        (WebCore::CSSValue::CSSValue):

2011-11-16  Robert Hogan  <robert@webkit.org>

        Fix build on Windows and Mac after r100473

        Unreviewed, fix build.

        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * rendering/RenderingAllInOne.cpp:

2011-11-16  Philip Rogers  <pdr@google.com>

        Remove extra GraphicsContextStateSaver restore() call.
        https://bugs.webkit.org/show_bug.cgi?id=72497

        Reviewed by Andreas Kling.

        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::drawTextInternal):

2011-11-08  Robert Hogan  <robert@webkit.org>

        CSS 2.1 failure: border-collapse-offset-002.htm fails
        https://bugs.webkit.org/show_bug.cgi?id=71705

        Table captions are implemented as children of the table but have a special
        requirement to expand to the full width of the table rather than just the 'available'
        width, i.e. the full width minus padding and borders.

        To accomodate this create a RenderTableCaption object that reimplements containingBlockLogicalWidthForContent()
        to return the full width of the containing block (i.e. the table) rather than the available width.

        Reviewed by Antti Koivisto.

        * CMakeLists.txt: Add RenderTableCaption.[cpp|h]
        * GNUmakefile.list.am: Add RenderTableCaption.[cpp|h]
        * Target.pri: Add RenderTableCaption.[cpp|h]
        * WebCore.gypi: Add RenderTableCaption.[cpp|h]
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::addChildIgnoringAnonymousColumnBlocks): Use RenderTableCaption
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::createObject): Add RenderTableCaption.[cpp|h]
        (WebCore::RenderObject::addChild): ditto
        * rendering/RenderObject.h:
        (WebCore::RenderObject::isTableCaption):
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::addChild):
        * rendering/RenderTable.h:
        * rendering/RenderTableCaption.cpp: Added.
        (WebCore::RenderTableCaption::RenderTableCaption): Implement RenderTableCaption
        (WebCore::RenderTableCaption::~RenderTableCaption):
        (WebCore::RenderTableCaption::containingBlockLogicalWidthForContent): Return the containing block's full width rather than it's available width.
        * rendering/RenderTableCaption.h: Added.
        (WebCore::RenderTableCaption::isTableCaption):
        (WebCore::toRenderTableCaption):

2011-11-16  Antaryami Pandia  <antaryami.pandia@motorola.com>

        [Gtk] display:none has no effect on <option> element.
        https://bugs.webkit.org/show_bug.cgi?id=72370

        Reviewed by Martin Robinson.

        * platform/gtk/GtkPopupMenu.cpp:
        (WebCore::GtkPopupMenu::appendItem):
        * platform/gtk/PopupMenuGtk.cpp:
        (WebCore::PopupMenuGtk::createGtkActionForMenuItem):

2011-11-16  Dan Winship  <danw@gnome.org>

        [GTK] Fix platformDefersLoading to handle non-http requests, and
        to not use broken-ish libsoup APIs.
        https://bugs.webkit.org/show_bug.cgi?id=72227

        Reviewed by Martin Robinson.

        * platform/network/ResourceHandleInternal.h:
        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::sendRequestCallback):
        (WebCore::startHTTPRequest):
        (WebCore::hasBeenSent):
        (WebCore::ResourceHandle::platformSetDefersLoading):
        (WebCore::readCallback): rather than deferring by using
        soup_session_pause_message(), let the read complete, but just don't
        process the result until we're no longer deferred.
        (WebCore::startNonHTTPRequest): Don't start the request if
        it's deferred.

2011-11-16  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Application cache status should be updated after swapCache().
        https://bugs.webkit.org/show_bug.cgi?id=72123

        Reviewed by Pavel Feldman.

        Application cache view resources and status are now updated after swapCache() call.
        Refresh button removed from application cache view.
        Application cache inspector tests are moved to their own folder.

        Tests: http/tests/inspector/appcache/appcache-iframe-manifests.html
               http/tests/inspector/appcache/appcache-manifest-with-non-existing-file.html
               http/tests/inspector/appcache/appcache-swap.html

        * inspector/front-end/ApplicationCacheItemsView.js:
        (WebInspector.ApplicationCacheItemsView):
        (WebInspector.ApplicationCacheItemsView.prototype.get statusBarItems):
        (WebInspector.ApplicationCacheItemsView.prototype.wasShown):
        (WebInspector.ApplicationCacheItemsView.prototype._maybeUpdate):
        (WebInspector.ApplicationCacheItemsView.prototype._markDirty):
        (WebInspector.ApplicationCacheItemsView.prototype.updateStatus):
        (WebInspector.ApplicationCacheItemsView.prototype._updateCallback):
        (WebInspector.ApplicationCacheItemsView.prototype._deleteCallback):
        * loader/appcache/ApplicationCacheGroup.cpp:
        (WebCore::ApplicationCacheGroup::setNewestCache):
        (WebCore::ApplicationCacheGroup::makeObsolete):
        (WebCore::ApplicationCacheGroup::setUpdateStatus):
        * loader/appcache/ApplicationCacheHost.cpp:
        (WebCore::ApplicationCacheHost::notifyDOMApplicationCache):
        (WebCore::ApplicationCacheHost::swapCache):

2011-11-16  Eric Carlson  <eric.carlson@apple.com>

        addTrack() must throw an exception if 'kind' is unknown
        https://bugs.webkit.org/show_bug.cgi?id=71915

        Reviewed by Philippe Normand.

        Tests: media/track/track-addtrack-kind.html
               media/track/track-kind.html

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::textTrackKindChanged): New. Will be implemented for 62885.
        (WebCore::HTMLMediaElement::addTrack): Throw if  'kind' is not a known value.
        (WebCore::HTMLMediaElement::addTextTrack): Call textTracks(), it will allocate the track
            list object if necessary.
        (WebCore::HTMLMediaElement::textTracks): Never return NULL, a TextTrackList with no tracks
            is allowed.
        * html/HTMLMediaElement.h:
        (WebCore::HTMLMediaElement::addTrack): Add variants to deal with optional parameters plus
            a mandatory ExceptionCode parameter.
        * html/HTMLMediaElement.idl: addTrack can generate an exception.

        * html/HTMLTrackElement.cpp:
        (WebCore::HTMLTrackElement::attributeChanged): kind, label, and srclang attribute changes should
            percolate down the the TextTrack.
        (WebCore::HTMLTrackElement::kind): Return the TextTrack kind because it is not necessarily the
            same as the attribute value.
        (WebCore::HTMLTrackElement::ensureTrack): Only pass legal 'kind' keywords to create a TextTrack.
        (WebCore::HTMLTrackElement::textTrackKindChanged): Notify parent element, if any.
        * html/HTMLTrackElement.h:

        * html/TextTrack.cpp:
        (WebCore::TextTrack::subtitlesKeyword): New, return legal kind attribute value.
        (WebCore::TextTrack::captionsKeyword): Ditto.
        (WebCore::TextTrack::descriptionsKeyword): Ditto.
        (WebCore::TextTrack::chaptersKeyword): Ditto.
        (WebCore::TextTrack::metadataKeyword): Ditto.
        (WebCore::TextTrack::TextTrack): Call setKind to make sure m_kind is always set to legal value.
        (WebCore::TextTrack::isValidKindKeyword): New, validate 'kind' value.
        (WebCore::TextTrack::setKind): Only allow legal values.
        * html/TextTrack.h:
        (WebCore::TextTrack::kind):
        (WebCore::TextTrack::label):
        (WebCore::TextTrack::setLabel):
        (WebCore::TextTrack::language):
        (WebCore::TextTrack::setLanguage):
        (WebCore::TextTrack::readyState):
        (WebCore::TextTrack::mode):

2011-11-16  Andreas Kling  <kling@webkit.org>

        CSSValue: Clean up initial value construction.
        <http://webkit.org/b/72502>

        Reviewed by Antti Koivisto.

        Instead of determining whether a given CSSInitialValue is 'implicit' or not by
        querying the CSSValue::ClassType (InitialClass vs. ImplicitInitialClass),
        add a protected CSSValue member and set it from the CSSInitialValue constructor.

        Also get rid of the CSSValue::m_isInitial bit since we can now replace the
        checks by classType() == InitialClass.

        No new tests, this is a cleanup.

        * css/CSSInitialValue.h:
        (WebCore::CSSInitialValue::CSSInitialValue):

            Poke 'implicit' constructor argument into CSSValue::m_isImplicit.

        * css/CSSValue.cpp:
        (WebCore::CSSValue::cssText):
        (WebCore::CSSValue::destroy):

            Remove ImplicitInitialClass cases.

        * css/CSSValue.h:
        (WebCore::CSSValue::isImplicitInitialValue):
        (WebCore::CSSValue::isInitialValue):
        (WebCore::CSSValue::CSSValue):

2011-11-16  Antaryami Pandia  <antaryami.pandia@motorola.com>

        Remove unnecessary if check from RenderListBox::paintItemForeground.
        https://bugs.webkit.org/show_bug.cgi?id=72488

        Reviewed by Andreas Kling.

        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::paintItemForeground):

2011-11-15  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] Centralize hide_symbols and ensure all libs are built with symbol visibility & bsymbolic_functions

        Reviewed by Tor Arne Vestbø.

        * Target.pri: Eliminate duplicated symbol stuff that lives now in default_post.prf.

2011-11-16  Iain Merrick  <husky@google.com>

        [chromium] Pass screen refresh rate into compositor.
        https://bugs.webkit.org/show_bug.cgi?id=71040

        Reviewed by Tony Gentilcore.

        * platform/PlatformScreen.h:
        * platform/chromium/PlatformScreenChromium.cpp:
        (WebCore::screenRefreshRate):
        * platform/chromium/PlatformSupport.h:
        * platform/graphics/chromium/cc/CCLayerTreeHost.h:
        (WebCore::CCSettings::CCSettings):
        * platform/graphics/chromium/cc/CCThreadProxy.cpp:
        (WebCore::CCThreadProxy::initializeImplOnImplThread):

2011-11-15  Andrey Kosyakov  <caseq@chromium.org>

        Web Inspector: [Extensions API] drop ExtensionSidebarPane.onUpdated, use callbacks instead
        https://bugs.webkit.org/show_bug.cgi?id=72388

        Reviewed by Pavel Feldman.

        Tests: inspector/extensions/extensions-panel.html
               inspector/extensions/extensions-sidebar.html

        - fire ExtensionSidebarPane.on{Hidden,Shown} for non-iframe content (experssions/objects);
        - drop ExtensionsSidebarPane.onUpdated, provide callback for setObject()/setExpression() instead;
        - fix an exception when a page is replaced with object/expression.

         inspector/front-end/ExtensionAPI.js:
        (injectedExtensionAPI.ExtensionSidebarPaneImpl):
        (injectedExtensionAPI.ExtensionSidebarPaneImpl.prototype.setExpression):
        (injectedExtensionAPI.ExtensionSidebarPaneImpl.prototype.setObject):
        * inspector/front-end/ExtensionPanel.js:
        (WebInspector.ExtensionNotifierView):
        (WebInspector.ExtensionNotifierView.prototype.wasShown):
        (WebInspector.ExtensionNotifierView.prototype.willHide):
        (WebInspector.ExtensionSidebarPane.prototype.setObject):
        (WebInspector.ExtensionSidebarPane.prototype.setExpression):
        (WebInspector.ExtensionSidebarPane.prototype.setPage):
        (WebInspector.ExtensionSidebarPane.prototype._onEvaluate):
        (WebInspector.ExtensionSidebarPane.prototype._makeObjectPropertiesView):
        (WebInspector.ExtensionSidebarPane.prototype._setObject):
        * inspector/front-end/ExtensionServer.js:
        (WebInspector.ExtensionServer.prototype._onSetSidebarContent.callback):
        (WebInspector.ExtensionServer.prototype._onSetSidebarContent):
        (WebInspector.ExtensionServer.prototype._dispatchCallback):
        * inspector/front-end/View.js:
        (WebInspector.View.prototype.detach):

2011-11-16  Simon Hausmann  <simon.hausmann@nokia.com>

        Unreviewed, rolling out r100266.
        http://trac.webkit.org/changeset/100266

        Broke WTR.

        * Target.pri:

2011-11-16  Per-Erik Brodin  <per-erik.brodin@ericsson.com>

        [GTK] fast/events/event-creation.html fails creating MediaStreamEvent
        https://bugs.webkit.org/show_bug.cgi?id=70720

        Reviewed by Philippe Normand.

        Added missing overriding of Event::interfaceName()

        * mediastream/MediaStreamEvent.cpp:
        (WebCore::MediaStreamEvent::stream): Changed return value to raw pointer.
        (WebCore::MediaStreamEvent::interfaceName): Added back from r98044.
        * mediastream/MediaStreamEvent.h:
        * mediastream/MediaStreamEvent.idl: Changed module name to "events".

2011-11-16  Mario Sanchez Prada  <msanchez@igalia.com>

        [GTK] Use GQuark's in the ATK wrapper to get and set arbitrary data
        https://bugs.webkit.org/show_bug.cgi?id=72394

        Reviewed by Martin Robinson.

        No new functionality, no new tests needed.

        * accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:
        (webkit_accessible_class_init): Initialize GQuarks.
        (getGailTextUtilForAtk): Use gailTextUtilQuark.
        (getPangoLayoutForAtk): Remove unused call to
        g_object_set_data_full, since that data is no used anywhere.
        (webkitAccessibleHyperlinkImplGetHyperlink): Use hyperlinkObjectQuark.

2011-11-15  Alexandru Chiculita  <achicu@adobe.com>

        [CSSShaders] Implement the style cached resources and computed style for the shader urls
        https://bugs.webkit.org/show_bug.cgi?id=72378

        Reviewed by Dean Jackson.

        Test: css3/filters/custom-filter-property-computed-style.html

        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::valueForFilter):
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::CSSStyleSelector):
        (WebCore::CSSStyleSelector::styleForKeyframe):
        (WebCore::CSSStyleSelector::pseudoStyleForElement):
        (WebCore::CSSStyleSelector::styleForPage):
        (WebCore::CSSStyleSelector::applyMatchedDeclarations):
        (WebCore::CSSStyleSelector::styleShader):
        (WebCore::CSSStyleSelector::cachedOrPendingStyleShaderFromValue):
        (WebCore::CSSStyleSelector::loadPendingShaders):
        (WebCore::CSSStyleSelector::createCustomFilterOperation):
        (WebCore::CSSStyleSelector::createFilterOperations):
        * css/CSSStyleSelector.h:
        * css/WebKitCSSShaderValue.cpp:
        (WebCore::WebKitCSSShaderValue::WebKitCSSShaderValue):
        (WebCore::WebKitCSSShaderValue::~WebKitCSSShaderValue):
        (WebCore::WebKitCSSShaderValue::cachedShader):
        (WebCore::WebKitCSSShaderValue::cachedOrPendingShader):
        * css/WebKitCSSShaderValue.h:
        * loader/cache/CachedResource.cpp:
        (WebCore::defaultPriorityForResourceType):
        * loader/cache/CachedResource.h:
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::createResource):
        (WebCore::CachedResourceLoader::requestShader):
        (WebCore::CachedResourceLoader::checkInsecureContent):
        (WebCore::CachedResourceLoader::canRequest):
        * loader/cache/CachedResourceLoader.h:
        * loader/cache/CachedShader.cpp:
        (WebCore::CachedShader::CachedShader):
        (WebCore::CachedShader::~CachedShader):
        * loader/cache/CachedShader.h:
        * platform/graphics/filters/CustomFilterOperation.h:
        * rendering/style/RenderStyle.h:
        (WebCore::InheritedFlags::filter):
        * rendering/style/StyleCachedShader.cpp:
        (WebCore::StyleCachedShader::StyleCachedShader):
        (WebCore::StyleCachedShader::cssValue):
        * rendering/style/StyleCachedShader.h:
        (WebCore::StyleCachedShader::create):
        * rendering/style/StylePendingShader.h:
        (WebCore::StylePendingShader::create):
        (WebCore::StylePendingShader::cssValue):
        (WebCore::StylePendingShader::cssShaderValue):
        (WebCore::StylePendingShader::StylePendingShader):
        * rendering/style/StyleShader.h:
        (WebCore::StyleShader::~StyleShader):
        (WebCore::StyleShader::isCachedShader):
        (WebCore::StyleShader::isPendingShader):
        (WebCore::StyleShader::StyleShader):

2011-11-15  Sergio Villar Senin  <svillar@igalia.com>

        [WK2] [GTK] fast/css/webkit-mask-crash-fieldset-legend.html asserts WebKitWebProcess
        https://bugs.webkit.org/show_bug.cgi?id=69510

        Reviewed by Simon Fraser.

        End the current transparency layer before early returning from
        paintMask() when there is a maskBoxImage which is still being
        loaded. This will balance the previous call to
        beginTransparencyLayer().

        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::paintMask):

2011-11-15  Darin Adler  <darin@apple.com>

        Incorrect type checks in RenderTheme media code
        https://bugs.webkit.org/show_bug.cgi?id=72184

        Reviewed by Eric Carlson.

        No tests added. Ideally this patch should be revised to add tests!

        * accessibility/AccessibilityMediaControls.cpp:
        (WebCore::AccessibilityMediaControl::create): Use mediaControlElementType.
        (WebCore::AccessibilityMediaControl::controlType): Ditto.
        (WebCore::AccessibilityMediaTimeline::valueDescription): Use early return
        rather than an assertion to check type of input element.

        * html/shadow/MediaControlElements.cpp:
        (WebCore::mediaControlElementType): Added. A type-safe way to get the
        media control element type after checking isMediaControlElement but with
        no other assumptions.
        * html/shadow/MediaControlElements.h: Added mediaControlElementType.

        * platform/efl/RenderThemeEfl.cpp:
        (WebCore::RenderThemeEfl::paintMediaPlayButton): Use mediaControlElementType.
        (WebCore::RenderThemeEfl::paintMediaSeekBackButton): Use mediaControlElementType.
        (WebCore::RenderThemeEfl::paintMediaSeekForwardButton): Use mediaControlElementType.
        * platform/gtk/RenderThemeGtk.cpp:
        (WebCore::RenderThemeGtk::paintMediaPlayButton): Check isMediaControlElement and
        use mediaControlElementType.
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::paintMediaMuteButton): Ditto. Also remove uneeded
        redundant null check.
        (WebCore::RenderThemeMac::paintMediaPlayButton): Ditto.
        (WebCore::RenderThemeMac::paintMediaToggleClosedCaptionsButton): Ditto.

2011-11-15  Jeff Timanus  <twiz@chromium.org>

        [chromium] During tear down, prevent the WebGLLayerChromium instance from attempting to stop a timer for a NULL context.
        https://bugs.webkit.org/show_bug.cgi?id=72423

        Reviewed by Kenneth Russell.

        * platform/graphics/chromium/WebGLLayerChromium.cpp:
        (WebCore::WebGLLayerChromium::setDrawingBuffer):

2011-11-15  Mark Hahnenberg  <mhahnenberg@apple.com>

        Rebaseline generated WebCore bindings

        Unreviewed build fix

        No new tests.

        * bindings/scripts/test/JS/JSTestEventConstructor.cpp:
        (WebCore::isObservable):
        (WebCore::JSTestEventConstructorOwner::isReachableFromOpaqueRoots):
        (WebCore::JSTestEventConstructorOwner::finalize):
        * bindings/scripts/test/JS/JSTestEventConstructor.h:
        (WebCore::JSTestEventConstructor::clearImpl):
        (WebCore::wrapperOwner):
        (WebCore::wrapperContext):
        * bindings/scripts/test/JS/JSTestInterface.cpp:
        (WebCore::JSTestInterfaceOwner::finalize):
        * bindings/scripts/test/JS/JSTestInterface.h:
        (WebCore::JSTestInterface::clearImpl):
        * bindings/scripts/test/JS/JSTestMediaQueryListListener.cpp:
        (WebCore::isObservable):
        (WebCore::JSTestMediaQueryListListenerOwner::isReachableFromOpaqueRoots):
        (WebCore::JSTestMediaQueryListListenerOwner::finalize):
        * bindings/scripts/test/JS/JSTestMediaQueryListListener.h:
        (WebCore::JSTestMediaQueryListListener::clearImpl):
        (WebCore::wrapperOwner):
        (WebCore::wrapperContext):
        * bindings/scripts/test/JS/JSTestNamedConstructor.cpp:
        (WebCore::JSTestNamedConstructorOwner::finalize):
        * bindings/scripts/test/JS/JSTestNamedConstructor.h:
        (WebCore::JSTestNamedConstructor::clearImpl):
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::isObservable):
        (WebCore::JSTestObjOwner::isReachableFromOpaqueRoots):
        (WebCore::JSTestObjOwner::finalize):
        * bindings/scripts/test/JS/JSTestObj.h:
        (WebCore::JSTestObj::clearImpl):
        (WebCore::wrapperOwner):
        (WebCore::wrapperContext):
        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp:
        (WebCore::isObservable):
        (WebCore::JSTestSerializedScriptValueInterfaceOwner::isReachableFromOpaqueRoots):
        (WebCore::JSTestSerializedScriptValueInterfaceOwner::finalize):
        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.h:
        (WebCore::JSTestSerializedScriptValueInterface::clearImpl):
        (WebCore::wrapperOwner):
        (WebCore::wrapperContext):

2011-11-15  Jeff Timanus  <twiz@chromium.org>

        Patch removing duplicated code in the setup of the DrawingBuffer used
        to host the back-buffer for WebGL contents.
        https://bugs.webkit.org/show_bug.cgi?id=72327

        Reviewed by Kenneth Russell.

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::copyTexImage2D):
        (WebCore::WebGLRenderingContext::copyTexSubImage2D):
        (WebCore::WebGLRenderingContext::readPixels):

2011-11-15  Mark Hahnenberg  <mhahnenberg@apple.com>

        JS DOM wrappers depend on destructor to deref impl RefPtrs
        https://bugs.webkit.org/show_bug.cgi?id=72341

        Reviewed by Sam Weinig.

        No new tests.

        Added clearing of impl RefPtrs to JS DOM wrapper nodes and removed the default 
        wrapperOwner function in favor of generating all WeakHandleOwners and wrapperOwner functions.

        * bindings/js/JSCSSValueCustom.cpp:
        (WebCore::JSCSSValueOwner::finalize):
        * bindings/js/JSDOMBinding.h:
        * bindings/js/JSNodeCustom.cpp:
        (WebCore::JSNodeOwner::finalize):
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateHeader):
        (GenerateImplementation):

2011-11-15  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Share Highlight Code for Drawing Outlined Quad
        https://bugs.webkit.org/show_bug.cgi?id=72451

        Reviewed by Timothy Hatcher.

        * inspector/DOMNodeHighlighter.cpp:

2011-11-15  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r100308.
        http://trac.webkit.org/changeset/100308
        https://bugs.webkit.org/show_bug.cgi?id=72450

        Introduces WebGL conformance test regressions. (Requested by
        twiz on #webkit).

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::copyTexImage2D):
        (WebCore::WebGLRenderingContext::copyTexSubImage2D):
        (WebCore::WebGLRenderingContext::readPixels):

2011-11-15  James Robinson  <jamesr@chromium.org>

        Rollout http://trac.webkit.org/changeset/99813, caused some crashes in
        TiledLayerChromium::updateCompositorResources()

        * WebCore.gypi:
        * platform/graphics/chromium/BitmapCanvasLayerTextureUpdater.cpp: Removed.
        * platform/graphics/chromium/BitmapCanvasLayerTextureUpdater.h: Removed.
        * platform/graphics/chromium/CanvasLayerTextureUpdater.cpp: Removed.
        * platform/graphics/chromium/CanvasLayerTextureUpdater.h: Removed.
        * platform/graphics/chromium/ContentLayerChromium.cpp:
        (WebCore::ContentLayerChromium::createTextureUpdater):
        * platform/graphics/chromium/FrameBufferSkPictureCanvasLayerTextureUpdater.h: Removed.
        * platform/graphics/chromium/ImageLayerChromium.cpp:
        (WebCore::ImageLayerTextureUpdater::prepareToUpdate):
        * platform/graphics/chromium/LayerRendererChromium.cpp:
        * platform/graphics/chromium/LayerTextureUpdater.h:
        * platform/graphics/chromium/LayerTextureUpdaterCanvas.cpp: Renamed from Source/WebCore/platform/graphics/chromium/FrameBufferSkPictureCanvasLayerTextureUpdater.cpp.
        (WebCore::FrameBuffer::FrameBuffer::FrameBuffer):
        (WebCore::FrameBuffer::FrameBuffer::~FrameBuffer):
        (WebCore::FrameBuffer::FrameBuffer::initialize):
        (WebCore::LayerTextureUpdaterCanvas::LayerTextureUpdaterCanvas):
        (WebCore::LayerTextureUpdaterCanvas::paintContents):
        (WebCore::LayerTextureUpdaterBitmap::create):
        (WebCore::LayerTextureUpdaterBitmap::LayerTextureUpdaterBitmap):
        (WebCore::LayerTextureUpdaterBitmap::sampledTexelFormat):
        (WebCore::LayerTextureUpdaterBitmap::prepareToUpdate):
        (WebCore::LayerTextureUpdaterBitmap::updateTextureRect):
        (WebCore::LayerTextureUpdaterSkPicture::create):
        (WebCore::LayerTextureUpdaterSkPicture::LayerTextureUpdaterSkPicture):
        (WebCore::LayerTextureUpdaterSkPicture::~LayerTextureUpdaterSkPicture):
        (WebCore::LayerTextureUpdaterSkPicture::sampledTexelFormat):
        (WebCore::LayerTextureUpdaterSkPicture::prepareToUpdate):
        (WebCore::LayerTextureUpdaterSkPicture::updateTextureRect):
        * platform/graphics/chromium/LayerTextureUpdaterCanvas.h: Added.
        (WebCore::LayerTextureUpdaterCanvas::contentRect):
        (WebCore::LayerTextureUpdaterBitmap::orientation):
        (WebCore::LayerTextureUpdaterSkPicture::orientation):
        * platform/graphics/chromium/SkPictureCanvasLayerTextureUpdater.cpp: Removed.
        * platform/graphics/chromium/SkPictureCanvasLayerTextureUpdater.h: Removed.
        * platform/graphics/chromium/TiledLayerChromium.cpp:
        (WebCore::UpdatableTile::UpdatableTile):
        (WebCore::UpdatableTile::texture):
        (WebCore::TiledLayerChromium::updateCompositorResources):
        (WebCore::TiledLayerChromium::pushPropertiesTo):
        (WebCore::TiledLayerChromium::createTile):
        (WebCore::TiledLayerChromium::protectTileTextures):
        (WebCore::TiledLayerChromium::prepareToUpdate):
        * platform/graphics/chromium/cc/CCTextureUpdater.cpp:
        (WebCore::CCTextureUpdater::append):
        (WebCore::CCTextureUpdater::update):
        * platform/graphics/chromium/cc/CCTextureUpdater.h:

2011-11-15  Julien Chaffraix  <jchaffraix@webkit.org>

        Add the needed plumbing to parse display: -webkit-inline-grid
        https://bugs.webkit.org/show_bug.cgi?id=72438

        Reviewed by Tony Chang.

        Test: fast/css-grid-layout/display-grid-set-get.html

        Added the needed constants and plugged everything together.
        Again we treat display: -webkit-inline-grid like display: none
        for the moment.

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):
        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        * css/CSSValueKeywords.in:
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::createObject):
        * rendering/style/RenderStyleConstants.h:

2011-11-15  W. James MacLean  <wjmaclean@chromium.org>

        [chromium] Move setVisibleRect() calls into calculateDrawTransformAndVisibility()
        https://bugs.webkit.org/show_bug.cgi?id=72162

        Reviewed by Kenneth Russell.

        Refactoring of existing functionality, so uses existing tests.

        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::drawLayer):
        * platform/graphics/chromium/cc/CCLayerTreeHost.cpp:
        (WebCore::paintContentsIfDirty):
        (WebCore::CCLayerTreeHost::paintMaskAndReplicaForRenderSurface):
        (WebCore::CCLayerTreeHost::paintLayerContents):
        * platform/graphics/chromium/cc/CCLayerTreeHostCommon.cpp:
        (WebCore::walkLayersAndCalculateVisibleLayerRects):
        (WebCore::CCLayerTreeHostCommon::calculateDrawTransformsAndVisibility):

2011-11-15  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r100340.
        http://trac.webkit.org/changeset/100340
        https://bugs.webkit.org/show_bug.cgi?id=72448

        Caused assertion failure in Win dbg canary. (Requested by
        pkasting on #webkit).

        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::LayerRendererChromium):
        (WebCore::LayerRendererChromium::viewportChanged):
        (WebCore::LayerRendererChromium::drawLayersInternal):
        * platform/graphics/chromium/LayerRendererChromium.h:

2011-11-15  Julien Chaffraix  <jchaffraix@webkit.org>

        Switch table indexing to unsigned
        https://bugs.webkit.org/show_bug.cgi?id=72083

        Reviewed by Darin Adler.

        No expected change in behavior.

        All of the code is now using unsigned for indexing!

        * rendering/FixedTableLayout.cpp:
        (WebCore::FixedTableLayout::layout):
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::colElement):
        (WebCore::RenderTable::cellAbove):
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::splitColumn):
        Added some ASSERTs to make sure we don't underflow. Looking at how
        the different variables are populated, they should not be reached.

        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::colSpan):
        (WebCore::RenderTableCell::rowSpan):
        Those 2 functions promotes HTMLTableCellElement's int to unsigned
        which should be fine as we make sure their are positive. Also HTML5
        makes those 2 fields "unsigned long" which goes in the same direction.

        * rendering/AutoTableLayout.cpp:
        (WebCore::AutoTableLayout::layout):
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::nodeAtPoint):
        Rewrote a couple of reverse iterating to be able to use unsigned
        without overflowing.

        * rendering/AutoTableLayout.cpp:
        (WebCore::AutoTableLayout::recalcColumn):
        (WebCore::AutoTableLayout::fullRecalc):
        (WebCore::AutoTableLayout::calcEffectiveLogicalWidth):
        (WebCore::AutoTableLayout::insertSpanCell):
        * rendering/AutoTableLayout.h:
        * rendering/FixedTableLayout.cpp:
        (WebCore::FixedTableLayout::calcWidthArray):
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::splitColumn):
        (WebCore::RenderTable::appendColumn):
        (WebCore::RenderTable::recalcSections):
        * rendering/RenderTable.h:
        (WebCore::RenderTable::getColumnPos):
        (WebCore::RenderTable::spanOfEffCol):
        (WebCore::RenderTable::effColToCol):
        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::styleOrColLogicalWidth):
        (WebCore::CollapsedBorders::nextBorder):
        * rendering/RenderTableCell.h:
        * rendering/RenderTableCol.cpp:
        (WebCore::RenderTableCol::updateFromElement):
        * rendering/RenderTableCol.h:
        (WebCore::RenderTableCol::span):
        (WebCore::RenderTableCol::setSpan):
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::addCell):
        (WebCore::RenderTableSection::setCellLogicalWidths):
        (WebCore::RenderTableSection::layoutRows):
        (WebCore::RenderTableSection::calcOuterBorderBefore):
        (WebCore::RenderTableSection::calcOuterBorderAfter):
        (WebCore::RenderTableSection::calcOuterBorderStart):
        (WebCore::RenderTableSection::calcOuterBorderEnd):
        (WebCore::RenderTableSection::paintObject):
        (WebCore::RenderTableSection::appendColumn):
        * rendering/RenderTableSection.h:
        (WebCore::RenderTableSection::cellAt):
        (WebCore::RenderTableSection::primaryCellAt):
        (WebCore::RenderTableSection::getBaseline):
        Mechanical change int -> unsigned.

2011-11-15  Andy Estes  <aestes@apple.com>

        Consolidate the logic that creates run loop observers for flushing layer tree changes to CoreAnimation
        https://bugs.webkit.org/show_bug.cgi?id=72106

        Reviewed by Anders Carlsson.

        Add a class that encapsulates the logic of scheduling, enabling and
        invalidating a run loop observer that fires before Core Animation's
        commit observer. Clients can subclass LayerFlushSchedulerClient and
        implement flushLayers(), which will be called by the observer.

        * WebCore.exp.in:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/ca/LayerFlushScheduler.cpp: Added.
        (WebCore::LayerFlushScheduler::suspend): Suspend scheduling by
        invalidating the run loop observer. Keep a count of calls to suspend()
        in m_suspendCount.
        (WebCore::LayerFlushScheduler::resume): Decrement m_suspendCount.
        Install the run loop observer when it reaches 0.
        * platform/graphics/ca/LayerFlushSchedulerClient.h: Added.
        (WebCore::LayerFlushSchedulerClient::~LayerFlushSchedulerClient):
        * platform/graphics/ca/LayerFlushScheduler.h: Added.
        * platform/graphics/ca/mac/LayerFlushSchedulerMac.cpp: Added.
        (LayerFlushScheduler::LayerFlushScheduler):
        (LayerFlushScheduler::~LayerFlushScheduler):
        (LayerFlushScheduler::runLoopObserverCallback): Call flushLayers() on
        the LayerFlushSchedulerClient.
        (LayerFlushScheduler::schedule): Install the run loop observer.
        (LayerFlushScheduler::invalidate): Remove the run loop
        observer if it is installed.

2011-11-15  Adam Klein  <adamk@chromium.org>

        [v8] Use throwError instead of compiling and running script in handleMaxRecursionDepthExceeded
        https://bugs.webkit.org/show_bug.cgi?id=72432

        Reviewed by Adam Barth.

        * bindings/v8/V8Proxy.cpp:
        (WebCore::handleMaxRecursionDepthExceeded):

2011-11-15  Vincent Scheib  <scheib@chromium.org>

        Pointer Lock: Refactoring: PointerLock.idl: Dropping webkit prefix
        https://bugs.webkit.org/show_bug.cgi?id=72431

        Reviewed by Adam Barth.

        * page/PointerLock.cpp:
        (WebCore::PointerLock::lock):
        (WebCore::PointerLock::unlock):
        (WebCore::PointerLock::isLocked):
        * page/PointerLock.h:
        * page/PointerLock.idl:

2011-11-15  Nat Duca  <nduca@chromium.org>

        [chromium] Fuse MainThread and CCThread
        https://bugs.webkit.org/show_bug.cgi?id=72426

        Reviewed by James Robinson.

        * WebCore.gypi:
        * platform/graphics/chromium/LayerRendererChromium.cpp:
        * platform/graphics/chromium/cc/CCLayerTreeHost.cpp:
        (WebCore::CCLayerTreeHost::CCLayerTreeHost):
        * platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:
        * platform/graphics/chromium/cc/CCMainThread.cpp: Removed.
        * platform/graphics/chromium/cc/CCMainThread.h: Removed.
        * platform/graphics/chromium/cc/CCMainThreadTask.h: Removed.
        * platform/graphics/chromium/cc/CCProxy.cpp:
        (WebCore::CCProxy::setMainThread):
        (WebCore::CCProxy::mainThread):
        (WebCore::CCProxy::setImplThread):
        (WebCore::CCProxy::implThread):
        (WebCore::CCProxy::isMainThread):
        (WebCore::CCProxy::isImplThread):
        (WebCore::CCProxy::~CCProxy):
        * platform/graphics/chromium/cc/CCProxy.h:
        * platform/graphics/chromium/cc/CCScopedThreadProxy.h: Renamed from Source/WebCore/platform/graphics/chromium/cc/CCScopedMainThreadProxy.h.
        (WebCore::CCScopedThreadProxy::create):
        (WebCore::CCScopedThreadProxy::postTask):
        (WebCore::CCScopedThreadProxy::shutdown):
        (WebCore::CCScopedThreadProxy::CCScopedThreadProxy):
        (WebCore::CCScopedThreadProxy::runTaskIfNotShutdown):
        * platform/graphics/chromium/cc/CCSingleThreadProxy.cpp:
        * platform/graphics/chromium/cc/CCThreadProxy.cpp:
        (WebCore::CCThreadProxy::CCThreadProxy):
        (WebCore::CCThreadProxy::compositeAndReadback):
        (WebCore::CCThreadProxy::finishAllRendering):
        (WebCore::CCThreadProxy::initializeLayerRenderer):
        (WebCore::CCThreadProxy::setNeedsAnimate):
        (WebCore::CCThreadProxy::setNeedsCommit):
        (WebCore::CCThreadProxy::onSwapBuffersCompleteOnImplThread):
        (WebCore::CCThreadProxy::setNeedsRedraw):
        (WebCore::CCThreadProxy::setVisible):
        (WebCore::CCThreadProxy::start):
        (WebCore::CCThreadProxy::stop):
        (WebCore::CCThreadProxy::obtainBeginFrameAndCommitTaskFromCCThread):
        (WebCore::CCThreadProxy::createBeginFrameAndCommitTaskOnImplThread):
        (WebCore::CCThreadProxy::beginFrameAndCommit):
        (WebCore::CCThreadProxy::scheduledActionDrawAndSwap):
        (WebCore::CCThreadProxy::initializeImplOnImplThread):
        * platform/graphics/chromium/cc/CCThreadProxy.h:

2011-11-15  Vincent Scheib  <scheib@chromium.org>

        Pointer Lock: Refactor: MouseEvent.idl movementX/Y
        https://bugs.webkit.org/show_bug.cgi?id=72427

        - [Conditional...] vs #if defined
        - Runtime enabled
        - .movementX/Y prefixed with 'webkit'

        Reviewed by Adam Barth.

        No new tests.

        * bindings/generic/RuntimeEnabledFeatures.h:
        (WebCore::RuntimeEnabledFeatures::webkitMovementXEnabled):
        (WebCore::RuntimeEnabledFeatures::webkitMovementYEnabled):
        * dom/MouseEvent.idl:
        * dom/MouseRelatedEvent.h:
        (WebCore::MouseRelatedEvent::webkitMovementX):
        (WebCore::MouseRelatedEvent::webkitMovementY):

2011-10-28  Ojan Vafai  <ojan@chromium.org>

        implement flex-align for flex-flow: column
        https://bugs.webkit.org/show_bug.cgi?id=70754

        Reviewed by David Hyatt.

        Tests: css3/flexbox/flex-align-column.html
               css3/flexbox/line-wrapping.html

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::sizesToIntrinsicLogicalWidth):
        When flexitems are column, they should size to the intrinsic width unless flex-flow is stretch.

        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::alignChildrenBlockDirection):
        This was just using the wrong, non-flow-aware method.

2011-11-15  Jochen Eisinger  <jochen@chromium.org>

        Rename ReferrerPolicy to clarify its meaning
        https://bugs.webkit.org/show_bug.cgi?id=72420

        Reviewed by Nate Chapin.

        On the one hand, even if the ReferrerPolicy was set to SendReferrer, the
        referrer wasn't necessarily send. On the other hand, I want to use the
        name ReferrerPolicy when implementing the meta referrer tag.

        No change in behavior expected so no test.

        * html/HTMLAnchorElement.cpp:
        (WebCore::HTMLAnchorElement::handleClick):
        (WebCore::handleLinkClick):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::changeLocation):
        (WebCore::FrameLoader::urlSelected):
        (WebCore::FrameLoader::loadFrameRequest):
        * loader/FrameLoader.h:
        * loader/FrameLoaderTypes.h:
        * loader/NavigationScheduler.cpp:
        (WebCore::ScheduledHistoryNavigation::fire):
        (WebCore::ScheduledFormSubmission::fire):
        * page/ContextMenuController.cpp:
        (WebCore::openNewWindow):
        (WebCore::ContextMenuController::contextMenuItemSelected):
        * WebCore.exp.in: updated.

2011-11-15  Adam Klein  <adamk@chromium.org>

        Factor out V8Proxy's max recursion depth handling code
        https://bugs.webkit.org/show_bug.cgi?id=72422

        Reviewed by Nate Chapin.

        Previously, V8Proxy used slightly different code to handle stack limit
        violations depending on whether they occured in runScript or
        callFunction. As described in http://webkit.org/b/72063, I intend to
        expand the usage of m_recursion when calling into script. This patch
        is intended to unify the existing handling code, making it easier to
        move elsewhere without causing unintended side-effects.

        No tests changed, as the only change in behavior is the string passed
        to RangeError in the runScript case, and it's not mentioned anywhere
        in the LayoutTests.

        * bindings/v8/V8Proxy.cpp:
        (WebCore::handleMaxRecursionDepthExceeded):
        (WebCore::V8Proxy::runScript): Use callFunction's factored-out code.
        (WebCore::V8Proxy::callFunction): Simplify and factor out code into handleMaxRecursionDepthExceeded.

2011-11-15  Jessie Berlin  <jberlin@apple.com>

        NSURLRequest leak beneath ResourceRequest::setStorageSession seen on Leaks bot.
        https://bugs.webkit.org/show_bug.cgi?id=72419

        Reviewed by Adam Roben.

        Adopt the copied NSURLRequest.

        * platform/network/mac/ResourceRequestMac.mm:
        (WebCore::ResourceRequest::setStorageSession):

2011-11-15  John Bates  <jbates@google.com>

        Page/layer flashes after GPU-accelerated CSS transition
        https://bugs.webkit.org/show_bug.cgi?id=72343

        LayerRendererChromium was resizing the window to 1x1 at initialization.
        In some cases, there is no drawLayers before switching back to
        software rendering. This left the window resized to 1x1 and the
        following software paints would therefore not be visible. This change
        moves the reshape call into drawLayers so that it will only be called
        if rendering will occur.

        Reviewed by James Robinson.

        New test: CCLayerTreeHostImplTest.reshapeNotCalledUntilDraw.

        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::viewportChanged):
        (WebCore::LayerRendererChromium::doViewportChanged):
        (WebCore::LayerRendererChromium::drawLayersInternal):
        * platform/graphics/chromium/LayerRendererChromium.h:

2011-11-15  Julien Chaffraix  <jchaffraix@webkit.org>

        Add the needed plumbing to parse display: -webkit-grid
        https://bugs.webkit.org/show_bug.cgi?id=72331

        Reviewed by Tony Chang.

        Test: fast/css-grid-layout/display-grid-set-get.html

        Added parsing support for display: -webkit-grid. From a rendering perspective,
        the value is equivalent to display: none until we properly implement it.

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):
        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        * css/CSSValueKeywords.in:
        * rendering/style/RenderStyleConstants.h:
        Added the new CSS value and plumbed the parsing and style application of
        the new value.

        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::operator EDisplay):
        Added an ASSERT here as I bumped into some non-trivial issues due to bug 72296.
        -wap-marquee was offsetting the new value and was wrongly casted by the CSSPrimitiveValueMapping
        logic outside the EDisplay range which would lead to crashes.

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::createObject):
        Fixed the indentation to follow our coding rules.

2011-11-15  Vincent Scheib  <scheib@chromium.org>

        Mouse Lock: Renaming to 'Pointer Lock': MouseLockable to PointerLock
        https://bugs.webkit.org/show_bug.cgi?id=72315

        Reviewed by Dimitri Glazkov.

        * WebCore.gypi:
        * page/Navigator.cpp:
        (WebCore::Navigator::webkitPointer):
        * page/Navigator.h:
        * page/Navigator.idl:
        * page/PointerLock.cpp: Renamed from Source/WebCore/page/MouseLockable.cpp.
        (WebCore::PointerLock::PointerLock):
        (WebCore::PointerLock::~PointerLock):
        (WebCore::PointerLock::webkitLock):
        (WebCore::PointerLock::webkitUnlock):
        (WebCore::PointerLock::webkitIsLocked):
        * page/PointerLock.h: Renamed from Source/WebCore/page/MouseLockable.h.
        (WebCore::PointerLock::create):
        * page/PointerLock.idl: Renamed from Source/WebCore/page/MouseLockable.idl.

2011-10-28  Ojan Vafai  <ojan@chromium.org>

        Overflow and relayout are broken in the new flexboxes
        https://bugs.webkit.org/show_bug.cgi?id=71161

        Reviewed by David Hyatt.

        Tests: css3/flexbox/auto-height-dynamic.html
               css3/flexbox/flex-item-child-overflow-expected.html
               css3/flexbox/flex-item-child-overflow.html

        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::layoutBlock):
        -Always set the logical height to 0 to start with to ensure we don't
        use the height from the previous layout when we are computing the
        intrinsic size of the flexbox.
        -Call computeOverflow after computeLogicalHeight so that flex-item's children's
        overflow is properly rendered.

        (WebCore::RenderFlexibleBox::layoutAndPlaceChildrenInlineDirection):
        -Now that we setLogicalHeight in layoutBlock, we no longer need to do it here.
        -Refactor flipping code. The behavior is the same, but the variable names are just
        more correct.

2011-10-28  Ojan Vafai  <ojan@chromium.org>

        Overflow and relayout are broken in the new flexboxes
        https://bugs.webkit.org/show_bug.cgi?id=71161

        Reviewed by David Hyatt.

        Tests: css3/flexbox/auto-height-dynamic.html
               css3/flexbox/flex-item-child-overflow-expected.html
               css3/flexbox/flex-item-child-overflow.html

        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::layoutBlock):
        -Always set the logical height to 0 to start with to ensure we don't
        use the height from the previous layout when we are computing the
        intrinsic size of the flexbox.
        -Call computeOverflow after computeLogicalHeight so that flex-item's children's
        overflow is properly rendered.

        (WebCore::RenderFlexibleBox::layoutAndPlaceChildrenInlineDirection):
        -Now that we setLogicalHeight in layoutBlock, we no longer need to do it here.
        -Refactor flipping code. The behavior is the same, but the variable names are just
        more correct.

2011-11-15  Nate Chapin  <japhet@chromium.org>

        CachedResourceRequest is now the only SubresourceLoaderClient
        Merge CachedResourceRequest into SubresourceLoader and delete
        the SubresourceLoaderClient interface. A few items were moved
        to CachedResource instead of SubresourceLoader.
        https://bugs.webkit.org/show_bug.cgi?id=71149

        Reviewed by Adam Barth.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * loader/ResourceLoadScheduler.cpp:
        * loader/ResourceLoadScheduler.h:
        * loader/ResourceLoader.cpp:
        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::SubresourceLoader):
        (WebCore::SubresourceLoader::create):
        (WebCore::SubresourceLoader::init): Do work that had previously been
            done in SubresourceLoader::create() after the constructor.
        (WebCore::SubresourceLoader::willSendRequest):
        (WebCore::SubresourceLoader::didSendData):
        (WebCore::SubresourceLoader::didReceiveResponse):
        (WebCore::SubresourceLoader::didReceiveData):
        (WebCore::SubresourceLoader::didReceiveCachedMetadata):
        (WebCore::SubresourceLoader::didFinishLoading):
        (WebCore::SubresourceLoader::didFail):
        (WebCore::SubresourceLoader::willCancel):
        (WebCore::SubresourceLoader::releaseResources): Do the cleanup work that was
            duplicated throughout the various terminal CachedResourceRequest callbacks.
        * loader/SubresourceLoader.h: Fix indentation style issues.
        * loader/SubresourceLoaderClient.h: Removed.
        * loader/cache/CachedImage.cpp:
        * loader/cache/CachedRawResource.cpp:
        * loader/cache/CachedResource.cpp:
        (WebCore::cachedResourceTypeToTargetType):
        (WebCore::CachedResource::load): Do the work that had been done in
            CachedResourceRequest::load().
        (WebCore::CachedResource::finish):
        (WebCore::CachedResource::setResponse):
        (WebCore::CachedResource::stopLoading):
        * loader/cache/CachedResource.h:
        (WebCore::CachedResource::canDelete):
        * loader/cache/CachedResourceLoader.cpp:
        * loader/cache/CachedResourceRequest.cpp: Removed.
        * loader/cache/CachedResourceRequest.h: Removed.
        * loader/cf/SubresourceLoaderCF.cpp:
        * loader/chromium/CachedResourceRequestChromium.cpp: Removed.
        * loader/chromium/SubresourceLoaderChromium.cpp:

2011-11-15  Anders Carlsson  <andersca@apple.com>

        HostWindow screenToWindow/windowToScreen should be screenToRootView/rootViewToScreen
        https://bugs.webkit.org/show_bug.cgi?id=72397

        Reviewed by Dan Bernstein.

        screenToWindow and windowToScreen already use root view coordinates everywhere, with the
        exception of Mac WebKit1 which doesn't even implement the functions.

        * accessibility/mac/WebAccessibilityObjectWrapper.mm:
        (-[WebAccessibilityObjectWrapper position]):
        * loader/EmptyClients.h:
        * page/Chrome.cpp:
        (WebCore::Chrome::screenToRootView):
        (WebCore::Chrome::rootViewToScreen):
        * page/Chrome.h:
        * page/ChromeClient.h:
        * platform/HostWindow.h:
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::contentsToScreen):
        (WebCore::ScrollView::screenToContents):
        * platform/chromium/PopupContainer.cpp:
        (WebCore::PopupContainer::layoutAndCalculateWidgetRect):
        (WebCore::PopupContainer::refresh):

2011-11-15  Jeff Timanus  <twiz@chromium.org>

        Patch removing duplicated code in the setup of the DrawingBuffer used
        to host the back-buffer for WebGL contents.
        https://bugs.webkit.org/show_bug.cgi?id=72327

        Reviewed by Julien Chaffraix.

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::copyTexImage2D):
        (WebCore::WebGLRenderingContext::copyTexSubImage2D):
        (WebCore::WebGLRenderingContext::readPixels):

2011-11-15  Eugene Nalimov  <enal@google.com>

        Event listener for active DOM object that is also DOM node can be garbage collected prematurely.
        https://bugs.webkit.org/show_bug.cgi?id=70421 

        Reviewed by Adam Barth.

        Problem demonstrated itself when HTMLAudioElement was changed to become active DOM object.
        Before that there were no DOM objects that simultaneously were nodes and active objects.
        DOM object could be held in one of 3 maps -- node map, active objects map, and all other
        objects map, and HTMLAudioElement should be in 2 maps simultaneously. When it was in the
        active DOM objects map only, its event listener could be garbage collected, because special
        code that groups listeners with wrappers could handle only wrappers for objects in the node
        map. If we put HTMLAudioElement into nodes map, it would not be active DOM node, and can be
        garbage collected prematurely itself (see https://bugs.webkit.org/show_bug.cgi?id=66878).
        Fix is to introduce 4th map -- active nodes map, and change the code accordingly.

        Test: media/audio-garbage-collect.html

        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateNamedConstructorCallback):
        (GetDomMapFunction):
        * bindings/v8/DOMDataStore.cpp:
        (WebCore::DOMDataStore::DOMDataStore):
        (WebCore::DOMDataStore::getDOMWrapperMap):
        (WebCore::DOMDataStore::weakNodeCallback):
        * bindings/v8/DOMDataStore.h:
        (WebCore::DOMDataStore::activeDomNodeMap):
        * bindings/v8/ScopedDOMDataStore.cpp:
        (WebCore::ScopedDOMDataStore::ScopedDOMDataStore):
        (WebCore::ScopedDOMDataStore::~ScopedDOMDataStore):
        * bindings/v8/StaticDOMDataStore.cpp:
        (WebCore::StaticDOMDataStore::StaticDOMDataStore):
        * bindings/v8/StaticDOMDataStore.h:
        * bindings/v8/V8DOMMap.cpp:
        (WebCore::getActiveDOMNodeMap):
        (WebCore::removeAllDOMObjects):
        (WebCore::visitActiveDOMNodes):
        * bindings/v8/V8DOMMap.h:
        * bindings/v8/V8DOMWrapper.cpp:
        (WebCore::V8DOMWrapper::setJSWrapperForDOMNode):
        (WebCore::V8DOMWrapper::getWrapperSlow):
        * bindings/v8/V8GCController.cpp:
        (WebCore::GCPrologueSpecialCase):
        (WebCore::void):
        (WebCore::Node):
        (WebCore::GCPrologueVisitor::visitDOMWrapper):
        (WebCore::V8GCController::gcPrologue):
        (WebCore::GCEpilogueHelper::GCEpilogueSpecialCase):
        (WebCore::GCEpilogueVisitor::visitDOMWrapper):
        (WebCore::V8GCController::gcEpilogue):
        * dom/Node.h:
        (WebCore::Node::isActiveNode):
        * html/HTMLAudioElement.h:
        (WebCore::HTMLAudioElement::isActiveNode):

2011-11-15  David Kilzer  <ddkilzer@apple.com>

        Remove useless const modifier from KURL::init
        <http://webkit.org/b/72387>

        Reviewed by Darin Adler.

        * platform/KURL.cpp:
        (WebCore::KURL::init): Remove useless const.

2011-11-14  Anders Carlsson  <andersca@apple.com>

        HostWindow invalidation functions should use root view coordinates
        https://bugs.webkit.org/show_bug.cgi?id=72338

        Reviewed by Dan Bernstein.

        Rename invalidateWindow to invalidateRootView, and invalidateContentsAndWindow
        to invalidateContentsAndRootView. Make sure that the rects passed to the renamed functions
        are in root view coordinates by changing contentsToWindow calls to contentsToRootView.
        
        In practice this doesn't matter because for all platforms except Mac WebKit1, root view coordinates
        and window coordinates are equivalent, and Mac WebKit1 doesn't use these invalidation functions.

        * loader/EmptyClients.h:
        * page/Chrome.cpp:
        (WebCore::Chrome::invalidateRootView):
        (WebCore::Chrome::invalidateContentsAndRootView):
        * page/Chrome.h:
        * page/ChromeClient.h:
        * page/Frame.cpp:
        (WebCore::Frame::tiledBackingStorePaintEnd):
        * page/FrameView.cpp:
        (WebCore::FrameView::invalidateRect):
        (WebCore::FrameView::scrollContentsFastPath):
        * platform/HostWindow.h:
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::rectToCopyOnScroll):
        (WebCore::ScrollView::scrollContents):
        (WebCore::ScrollView::wheelEvent):
        * platform/chromium/FramelessScrollView.cpp:
        (WebCore::FramelessScrollView::invalidateRect):
        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImageChromeClient::invalidateContentsAndRootView):

2011-11-15  Philip Rogers  <pdr@google.com>

        Implement maxWidth for fillText and strokeText, fixing the canvas/philip/tests/2d.text.draw.fill.maxWidth.fontface.html test.
        https://bugs.webkit.org/show_bug.cgi?id=61528

        Reviewed by Stephen White.

        Tests: fast/canvas/2d.text.draw.fill.maxWidth.gradient.html
               fast/canvas/2d.text.draw.fill.maxWidth.negative.html
               fast/canvas/2d.text.draw.fill.maxWidth.veryLarge.html
               fast/canvas/2d.text.draw.fill.maxWidth.verySmall.html

        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::drawTextInternal):

2011-11-15  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Implement download support in WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=72258

        Reviewed by Martin Robinson.

        Add common download errors to ErrorsGtk.

        * platform/gtk/ErrorsGtk.cpp:
        (WebCore::downloadNetworkError):
        (WebCore::downloadCancelledByUserError):
        (WebCore::downloadDestinationError):
        * platform/gtk/ErrorsGtk.h:

2011-11-15  Cary Clark  <caryclark@google.com>

        [chromium-mac] Enable vertical text using Skia
        https://bugs.webkit.org/show_bug.cgi?id=72137

        Use Skia to draw vertical text. This is much
        faster and has higher fidelity than the old method
        of drawing text on a path.

        The graphics context passed to Skia has been
        rotated 90 degrees but the character advances
        have not, so it is necessary to unrotate the canvas,
        and re-rotate the positions.

        This generates correct output (or, at least,
        consistent with Chromium CG on Mac) for all vertical
        text tests, one of which is mentioned below.
        
        Reviewed by Stephen White.

        Test: fast/writing-mode/text-orientation-basic.html

        * platform/graphics/skia/FontSkia.cpp:
        (WebCore::setupPaint):
        (WebCore::Font::drawGlyphs):

2011-11-15  Philip Rogers  <pdr@google.com>

        Fix SVG hit testing when padding is present
        https://bugs.webkit.org/show_bug.cgi?id=37325

        Reviewed by Nikolas Zimmermann.

        Test: svg/hittest/svg-padding.xhtml

        * rendering/svg/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::nodeAtPoint):

2011-11-15  Pavel Feldman  <pfeldman@google.com>

        Web Inspector: move generic code from DevTools.js into the WebCore.
        https://bugs.webkit.org/show_bug.cgi?id=72377

        re-landing r100269.

        Reviewed by Yury Semikhatsky.

        * English.lproj/localizedStrings.js:
        * inspector/front-end/InspectorFrontendHostStub.js:
        (.WebInspector.InspectorFrontendHostStub.prototype.inspectedURLChanged):
        * inspector/front-end/ProfilesPanel.js:
        * inspector/front-end/Resource.js:
        * inspector/front-end/Settings.js:
        * inspector/front-end/UIUtils.js:
        (WebInspector.setToolbarColors):
        (WebInspector.resetToolbarColors):
        * inspector/front-end/inspector.js:

2011-11-15  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r100269.
        http://trac.webkit.org/changeset/100269
        https://bugs.webkit.org/show_bug.cgi?id=72383

        "Broke dozens of tests due to exception in loadingFinished"
        (Requested by tonyg-cr on #webkit).

        * English.lproj/localizedStrings.js:
        * inspector/front-end/InspectorFrontendHostStub.js:
        (.WebInspector.InspectorFrontendHostStub.prototype.inspectedURLChanged):
        * inspector/front-end/ProfilesPanel.js:
        * inspector/front-end/Resource.js:
        * inspector/front-end/Settings.js:
        * inspector/front-end/UIUtils.js:
        * inspector/front-end/inspector.js:

2011-11-15  Alexander Pavlov  <apavlov@chromium.org>

        font property does not show up as "shorthand" in inspector
        https://bugs.webkit.org/show_bug.cgi?id=15598

        Reviewed by Nikolas Zimmermann.

        The "font" CSS property is turned into a real shorthand, as its longhands used to float around
        in the resulting style declaration without any reference to their underlying "font" property.

        Test: fast/css/font-shorthand.html

        * css/CSSMutableStyleDeclaration.cpp:
        (WebCore::CSSMutableStyleDeclaration::getPropertyValue): Extracted the "font" value building into fontValue().
        (WebCore::CSSMutableStyleDeclaration::appendFontLonghandValueIfExplicit): Added
        (WebCore::CSSMutableStyleDeclaration::fontValue): Build the "font" value from longhands.
        * css/CSSMutableStyleDeclaration.h:
        * css/CSSParser.cpp:
        (WebCore::CSSParser::addProperty): Added optional "implicit" parameter.
        (WebCore::CSSParser::parseFont): Build respective longhands instead of the shorthand "font" property.
        * css/CSSParser.h: Added optional "implicit" parameter to addProperty().
        * css/CSSPropertyLonghand.cpp:
        (WebCore::initShorthandMap): Added "font" shorthand map entry.
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyPropertyToStyle): Separated the property application from the instance setup.
        (WebCore::CSSStyleSelector::applyPropertyToCurrentStyle): Added.
        * css/CSSStyleSelector.h: Made updateFont() public.
        * css/FontValue.cpp:
        (WebCore::FontValue::customCssText): Made use of StringBuilder.
        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::setFont): Apply "font" longhands rather than the (non-existent) "font" property.
        * inspector/front-end/StylesSidebarPane.js:
        (WebInspector.StylesSidebarPane.prototype._markUsedProperties): Removed a workaround for "font" not being a shorthand.
        * page/animation/AnimationBase.cpp:
        (WebCore::addShorthandProperties): Removed a workaround for "font" not being a shorthand.

2011-11-15  Pierre Rossi  <pierre.rossi@gmail.com>

        [Qt] Clean up the remaining duplicate code after the RenderThemeQt refactoring.
        https://bugs.webkit.org/show_bug.cgi?id=72262

        Reviewed by Antonio Gomes.

        No new tests needed, this is purely cosmetic.

        * platform/qt/RenderThemeQStyle.cpp:
        (WebCore::RenderThemeQStyle::adjustMenuListButtonStyle):
        * platform/qt/RenderThemeQStyle.h:
        * platform/qt/RenderThemeQt.cpp:
        (WebCore::RenderThemeQt::adjustMenuListButtonStyle): remove the call to resetBorderRadius()
        since the mobile theme actually didn't do this.
        * platform/qt/RenderThemeQtMobile.cpp:
        (WebCore::RenderThemeQtMobile::adjustMenuListStyle):

2011-11-15  Pavel Feldman  <pfeldman@google.com>

        Web Inspector: move generic code from DevTools.js into the WebCore.
        https://bugs.webkit.org/show_bug.cgi?id=72377

        This includes support for themed toolbar, remote debugging routines,
        removes a couple of obsolete overrides from the DevTools.js

        Reviewed by Yury Semikhatsky.

        * English.lproj/localizedStrings.js:
        * inspector/front-end/InspectorFrontendHostStub.js:
        (.WebInspector.InspectorFrontendHostStub.prototype.inspectedURLChanged):
        * inspector/front-end/ProfilesPanel.js:
        * inspector/front-end/Resource.js:
        * inspector/front-end/Settings.js:
        * inspector/front-end/UIUtils.js:
        (WebInspector.setToolbarColors):
        (WebInspector.resetToolbarColors):
        * inspector/front-end/inspector.js:

2011-11-15  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] Centralize hide_symbols and ensure all libs are built with symbol visibility & bsymbolic_functions

        Reviewed by Tor Arne Vestbø.

        * Target.pri: Eliminate duplicated symbol stuff that lives now in default_post.prf.

2011-11-15  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r100213.
        http://trac.webkit.org/changeset/100213
        https://bugs.webkit.org/show_bug.cgi?id=72371

        "Breaks test_shell_tests" (Requested by tonyg-cr on #webkit).

        * page/SecurityOrigin.cpp:
        (WebCore::SecurityOrigin::SecurityOrigin):
        * platform/SchemeRegistry.cpp:
        (WebCore::schemesWithUniqueOrigins):

2011-11-15  Alpha Lam  <hclam@chromium.org>

        [chromium] scroll deltas are cleared during commit to the main thread
        https://bugs.webkit.org/show_bug.cgi?id=71916

        Reviewed by James Robinson.

        Patch is covered by unit test.

        Add a member m_sentScrollDelta to CCLayerImpl to keep track of the scroll delta being
        sent to the main thread during commit. This gives a simpler approach to keep tracking of a
        layer's scroll delta in impl thread.

        * platform/graphics/chromium/LayerChromium.h:
        (WebCore::LayerChromium::sentScrollDelta):
        * platform/graphics/chromium/cc/CCLayerImpl.h:
        (WebCore::CCLayerImpl::sentScrollDelta):
        (WebCore::CCLayerImpl::setSentScrollDelta):
        * platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:
        (WebCore::CCLayerTreeHostImpl::processScrollDeltas):
        * platform/graphics/chromium/cc/CCLayerTreeHostImpl.h:

2011-11-15  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] REGRESSION(100123): It made inspector tests crash
        https://bugs.webkit.org/show_bug.cgi?id=72274

        Reviewed by Tor Arne Vestbø.

        * platform/qt/RenderThemeQStyle.h: Remove uninitialized and duplicated
        m_page member that should really come from RenderThemeQt.

2011-11-15  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Unreviewed. Fix build breaks when EFL port is built.

        * CMakeLists.txt:
        * UseJSC.cmake:

2011-11-15  Noel Gordon  <noel.gordon@gmail.com>

        Make ImageFrame member getAddr() public
        https://bugs.webkit.org/show_bug.cgi?id=72321

        Reviewed by Adam Barth.

        Make ImageFrame member getAddr() public to allow ImageFrame users access to the
        underlying frame pixels if needed. Image decoders, for example, could with care
        use this service to write decoded pixels direct to the ImageFrame pixel buffer,
        avoiding intermeadiate data copies from temporary decoded pixel row buffers and
        the decoding performance loss that that entails.

        No new tests, refactoring only.

        * platform/image-decoders/ImageDecoder.h:
        (WebCore::ImageFrame::getAddr):

2011-11-14  Alexander Pavlov  <apavlov@chromium.org>

        Web Inspector: [Crash] Crash when inspecting namespaced SVG styled via element names
        https://bugs.webkit.org/show_bug.cgi?id=72261

        Reviewed by Pavel Feldman.

        Test: inspector/styles/svg-style.xhtml

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

2011-11-15  Kent Tamura  <tkent@chromium.org>

        [V8] Fix incorrect handling of JavaScript properties in DOMStringMap
        https://bugs.webkit.org/show_bug.cgi?id=53578

        Reviewed by Adam Barth.

        Follows a JSC behavior change by r96893.

        * bindings/v8/custom/V8DOMStringMapCustom.cpp:
        (WebCore::V8DOMStringMap::namedPropertyGetter):
        Propagate to the JavaScript object if the DOMStringMap object
        doesn't have the requested item.
        (WebCore::V8DOMStringMap::namedPropertyDeleter): ditto.
        (WebCore::V8DOMStringMap::namedPropertySetter):
        Try to set a property to only a DOMStringMap object.

2011-11-14  Pavel Feldman  <pfeldman@google.com>

        Web Inspector: Command line $x fails for 3 of 4 types of XPath query
        https://bugs.webkit.org/show_bug.cgi?id=72276

        Reviewed by Timothy Hatcher.

        Test: inspector/console/console-xpath.html

        * inspector/InjectedScriptSource.js:
        (.):

2011-11-14  Ryosuke Niwa  <rniwa@webkit.org>

        Fix the change log entry for r59190.

        * ChangeLog-2010-05-24:

2011-11-14  Dmitry Lomov  <dslomov@google.com>
        
        [V8][Chromium]Serialize dense arrays densly
        https://bugs.webkit.org/show_bug.cgi?id=72198
        This patch ensures that:
        - Dense arrays are serialized densly, and not as name-value pairs
        - Sparse arrays are allocated as sparse on deserialization.
        The criteria to choose whether to serialize densly or sparsely is the size
        of a resulting serialized stream.

        Reviewed by David Levin.

        Test: fast/dom/Window/window-postmessage-arrays.html

        * bindings/v8/SerializedScriptValue.cpp:
        (WebCore::V8ObjectMap::Writer::writeDenseArray):
        (WebCore::V8ObjectMap::Writer::writeGenerateFreshSparseArray):
        (WebCore::V8ObjectMap::Writer::writeGenerateFreshDenseArray):
        (WebCore::V8ObjectMap::Serializer::writeDenseArray):
        (WebCore::V8ObjectMap::Serializer::AbstractObjectState::execDepth):
        (WebCore::V8ObjectMap::Serializer::AbstractObjectState::serializeProperties):
        (WebCore::V8ObjectMap::Serializer::ObjectState::advance):
        (WebCore::V8ObjectMap::Serializer::DenseArrayState::DenseArrayState):
        (WebCore::V8ObjectMap::Serializer::DenseArrayState::advance):
        (WebCore::V8ObjectMap::Serializer::DenseArrayState::objectDone):
        (WebCore::V8ObjectMap::Serializer::SparseArrayState::SparseArrayState):
        (WebCore::V8ObjectMap::Serializer::SparseArrayState::advance):
        (WebCore::V8ObjectMap::Serializer::serializeDensely):
        (WebCore::V8ObjectMap::Serializer::startArrayState):
        (WebCore::V8ObjectMap::Serializer::startObjectState):
        (WebCore::V8ObjectMap::Serializer::doSerialize):
        (WebCore::V8ObjectMap::Reader::read):
        (WebCore::V8ObjectMap::Deserializer::newSparseArray):
        (WebCore::V8ObjectMap::Deserializer::completeSparseArray):
        (WebCore::V8ObjectMap::Deserializer::completeDenseArray):

2011-11-14  Alexandre Elias  <aelias@google.com>

        [chromium] Fix scaleDelta zoom-out visibility rect bug
        https://bugs.webkit.org/show_bug.cgi?id=72208

        Since the scroll is no longer applied at the top layer of the layer
        tree, the scaleDelta transformation needs to be moved down to the
        same level.

        Also fix zoomAnimator to be applied the same way.  I removed zoom
        animator layout tests, as they aren't testing the actual impl-side
        codepath, and are hard to continue supporting -- we should cover zoom
        features with unit tests in the future.

        Reviewed by James Robinson.

        No new tests (planning to add later: https://bugs.webkit.org/show_bug.cgi?id=71529)

        * platform/graphics/chromium/LayerChromium.h:
        (WebCore::LayerChromium::scaleDelta):
        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::drawLayersInternal):
        * platform/graphics/chromium/LayerRendererChromium.h:
        * platform/graphics/chromium/cc/CCLayerImpl.cpp:
        (WebCore::CCLayerImpl::CCLayerImpl):
        (WebCore::CCLayerImpl::setScaleDelta):
        * platform/graphics/chromium/cc/CCLayerImpl.h:
        (WebCore::CCLayerImpl::scaleDelta):
        * platform/graphics/chromium/cc/CCLayerTreeHostCommon.cpp:
        (WebCore::calculateDrawTransformsAndVisibilityInternal):
        * platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:
        (WebCore::CCLayerTreeHostImpl::setScaleDelta):
        (WebCore::CCLayerTreeHostImpl::setZoomAnimatorTransform):

2011-11-14  Chris Fleizach  <cfleizach@apple.com>

        WebProcess crashes when trying to display your "uploaded videos" page on Facebook
        https://bugs.webkit.org/show_bug.cgi?id=72334

        Reviewed by Beth Dakin.

        Protect against documents without frames.

        * accessibility/mac/WebAccessibilityObjectWrapper.mm:
        (-[WebAccessibilityObjectWrapper remoteAccessibilityParentObject]):

2011-11-14  Oliver Hunt  <oliver@apple.com>

        More V8 build fixes.

        * bindings/v8/custom/V8ArrayBufferViewCustom.h:
        (WebCore::setWebGLArrayHelper):

2011-11-14  Oliver Hunt  <oliver@apple.com>

        Fix V8 build again.

        * bindings/scripts/CodeGeneratorV8.pm:
        * bindings/scripts/test/V8/V8Float64Array.cpp:
        (WTF::Float64Array::neuterBinding):

2011-11-14  Oliver Hunt  <oliver@apple.com>

        Fix V8 build.

        * bindings/scripts/CodeGeneratorV8.pm:
        * bindings/scripts/test/V8/V8Float64Array.cpp:
        (WTF::Float64Array::neuterBinding):

2011-11-14  Oliver Hunt  <oliver@apple.com>

        Start migrating typed array impl types to WTF
        https://bugs.webkit.org/show_bug.cgi?id=72336

        Reviewed by Geoffrey Garen.

        Move typed arrays from WebCore namespace to WTF, and
        start reducing dependencies on WebCore types.

        * bindings/js/JSArrayBufferViewHelper.h:
        (WebCore::setWebGLArrayHelper):
        * bindings/scripts/CodeGeneratorJS.pm:
        (IsTypedArrayType):
        (AddClassForwardIfNeeded):
        (GenerateImplementation):
        * bindings/scripts/CodeGeneratorV8.pm:
        (IsTypedArrayType):
        * bindings/scripts/test/CPP/WebDOMFloat64Array.cpp: Added.
        (WebDOMFloat64Array::WebDOMFloat64Array):
        (WebDOMFloat64Array::impl):
        (toWebCore):
        (toWebKit):
        * bindings/scripts/test/CPP/WebDOMFloat64Array.h: Added.
        (WebDOMFloat64Array::~WebDOMFloat64Array):
        * bindings/scripts/test/GObject/WebKitDOMFloat64Array.cpp: Added.
        (WebKit::kit):
        (WebKit::core):
        (webkit_dom_float64array_finalize):
        (webkit_dom_float64array_set_property):
        (webkit_dom_float64array_get_property):
        (webkit_dom_float64array_constructed):
        (webkit_dom_float64array_class_init):
        (webkit_dom_float64array_init):
        (WebKit::wrapFloat64Array):
        * bindings/scripts/test/GObject/WebKitDOMFloat64Array.h: Added.
        * bindings/scripts/test/GObject/WebKitDOMFloat64ArrayPrivate.h: Added.
        * bindings/scripts/test/JS/JSFloat64Array.cpp: Added.
        (WebCore::JSFloat64ArrayConstructor::JSFloat64ArrayConstructor):
        (WebCore::JSFloat64ArrayConstructor::finishCreation):
        (WebCore::JSFloat64ArrayConstructor::getOwnPropertySlot):
        (WebCore::JSFloat64ArrayConstructor::getOwnPropertyDescriptor):
        (WebCore::JSFloat64ArrayConstructor::getConstructData):
        (WebCore::getJSFloat64ArrayPrototypeTable):
        (WebCore::JSFloat64ArrayPrototype::self):
        (WebCore::getJSFloat64ArrayTable):
        (WebCore::JSFloat64Array::JSFloat64Array):
        (WebCore::JSFloat64Array::finishCreation):
        (WebCore::JSFloat64Array::createPrototype):
        (WebCore::JSFloat64Array::getOwnPropertySlot):
        (WebCore::JSFloat64Array::getOwnPropertyDescriptor):
        (WebCore::JSFloat64Array::getOwnPropertySlotByIndex):
        (WebCore::jsFloat64ArrayConstructor):
        (WebCore::JSFloat64Array::put):
        (WebCore::JSFloat64Array::putByIndex):
        (WebCore::JSFloat64Array::getOwnPropertyNames):
        (WebCore::JSFloat64Array::getConstructor):
        (WebCore::JSFloat64Array::getByIndex):
        (WebCore::toFloat64Array):
        (WTF::Float64Array::neuterBinding):
        * bindings/scripts/test/JS/JSFloat64Array.h: Added.
        (WebCore::JSFloat64Array::create):
        (WebCore::JSFloat64Array::createStructure):
        (WebCore::JSFloat64Array::impl):
        (WebCore::JSFloat64ArrayPrototype::create):
        (WebCore::JSFloat64ArrayPrototype::createStructure):
        (WebCore::JSFloat64ArrayPrototype::JSFloat64ArrayPrototype):
        (WebCore::JSFloat64ArrayConstructor::create):
        (WebCore::JSFloat64ArrayConstructor::createStructure):
        * bindings/scripts/test/ObjC/DOMFloat64Array.h: Copied from Source/WebCore/html/canvas/Int16Array.cpp.
        * bindings/scripts/test/ObjC/DOMFloat64Array.mm: Copied from Source/WebCore/html/canvas/Float32Array.cpp.
        (core):
        (kit):
        * bindings/scripts/test/ObjC/DOMFloat64ArrayInternal.h: Copied from Source/WebCore/html/canvas/Int16Array.cpp.
        * bindings/scripts/test/TestTypedArray.idl: Copied from Source/WebCore/html/canvas/Float64Array.cpp.
        * bindings/scripts/test/V8/V8Float64Array.cpp: Added.
        (WebCore::Float64ArrayInternal::V8_USE):
        (WebCore::ConfigureV8Float64ArrayTemplate):
        (WebCore::V8Float64Array::GetRawTemplate):
        (WebCore::V8Float64Array::GetTemplate):
        (WebCore::V8Float64Array::HasInstance):
        (WebCore::V8Float64Array::wrapSlow):
        (WTF::Float64Array::neuterBinding):
        (WebCore::V8Float64Array::derefObject):
        * bindings/scripts/test/V8/V8Float64Array.h: Added.
        (WebCore::V8Float64Array::toNative):
        (WebCore::V8Float64Array::existingWrapper):
        (WebCore::V8Float64Array::wrap):
        (WebCore::toV8):
        * fileapi/FileReader.h:
        * fileapi/FileReaderLoader.h:
        * fileapi/FileReaderSync.h:
        * fileapi/WebKitBlobBuilder.h:
        * html/HTMLMediaElement.h:
        * html/canvas/ArrayBuffer.cpp:
        * html/canvas/ArrayBuffer.h:
        * html/canvas/ArrayBufferView.cpp:
        (WTF::ArrayBufferView::setImpl):
        (WTF::ArrayBufferView::setRangeImpl):
        (WTF::ArrayBufferView::zeroRangeImpl):
        (WTF::ArrayBufferView::neuter):
        * html/canvas/ArrayBufferView.h:
        * html/canvas/Float32Array.cpp:
        * html/canvas/Float32Array.h:
        (WTF::Float32Array::set):
        * html/canvas/Float64Array.cpp:
        * html/canvas/Float64Array.h:
        (WTF::Float64Array::set):
        * html/canvas/Int16Array.cpp:
        * html/canvas/Int16Array.h:
        (WTF::Int16Array::set):
        * html/canvas/Int32Array.cpp:
        * html/canvas/Int32Array.h:
        (WTF::Int32Array::set):
        * html/canvas/Int8Array.cpp:
        * html/canvas/Int8Array.h:
        (WTF::Int8Array::set):
        * html/canvas/IntegralTypedArrayBase.h:
        * html/canvas/TypedArrayBase.h:
        (WTF::TypedArrayBase::set):
        (WTF::TypedArrayBase::setRange):
        (WTF::TypedArrayBase::zeroRange):
        * html/canvas/Uint16Array.cpp:
        * html/canvas/Uint16Array.h:
        (WTF::Uint16Array::set):
        * html/canvas/Uint32Array.cpp:
        * html/canvas/Uint32Array.h:
        (WTF::Uint32Array::set):
        * html/canvas/Uint8Array.cpp:
        * html/canvas/Uint8Array.h:
        (WTF::Uint8Array::set):
        * html/canvas/WebGLBuffer.h:
        * page/Crypto.h:
        * webaudio/AsyncAudioDecoder.h:
        * webaudio/AudioBuffer.cpp:
        (WebCore::AudioBuffer::AudioBuffer):
        (WebCore::AudioBuffer::zero):
        * webaudio/AudioContext.h:
        * webaudio/JavaScriptAudioNode.h:
        * webaudio/RealtimeAnalyser.h:
        * webaudio/RealtimeAnalyserNode.h:
        * webaudio/WaveShaperNode.h:
        * websockets/ThreadableWebSocketChannel.h:
        * websockets/WebSocket.h:
        * websockets/WebSocketChannel.h:
        * xml/XMLHttpRequest.h:

2011-11-14  Julien Chaffraix  <jchaffraix@webkit.org>

        Add --css-grid-layout to build-webkit and the build systems
        https://bugs.webkit.org/show_bug.cgi?id=72320

        Reviewed by Ojan Vafai.

        * Configurations/FeatureDefines.xcconfig:

2011-11-14  Daniel Bates  <dbates@rim.com>

        Remove unnecessary #include SVGResourcesCache.h in SVGDocumentExtensions.h; use forward declaration
        https://bugs.webkit.org/show_bug.cgi?id=72335

        Reviewed by Eric Seidel.

        It's sufficient to forward declare SVGResourcesCache in SVGDocumentExtensions.h and #include SVGResourcesCache.h
        in SVGDocumentExtensions.cpp. This will reduce the number of files we need to re-compile after the file
        SVGResourcesCache.h has been modified. Currently we #include SVGResourcesCache.h in SVGDocumentExtensions.h.

        * rendering/svg/RenderSVGBlock.cpp: Include SVGResourcesCache.h.
        * rendering/svg/RenderSVGContainer.cpp: Ditto.
        * rendering/svg/RenderSVGForeignObject.cpp: Ditto.
        * rendering/svg/RenderSVGImage.cpp: Ditto.
        * rendering/svg/RenderSVGInline.cpp: Ditto.
        * rendering/svg/RenderSVGModelObject.cpp: Ditto.
        * rendering/svg/RenderSVGPath.cpp: Ditto.
        * rendering/svg/RenderSVGResource.cpp: Ditto.
        * rendering/svg/RenderSVGResourceClipper.cpp: Ditto.
        * rendering/svg/RenderSVGResourceContainer.cpp: Ditto.
        * rendering/svg/RenderSVGRoot.cpp: Ditto.
        * rendering/svg/RenderSVGText.cpp: Ditto.
        * rendering/svg/SVGInlineTextBox.cpp: Ditto.
        * rendering/svg/SVGRenderSupport.cpp: Ditto.
        * svg/SVGDocumentExtensions.cpp: Ditto.
        * svg/SVGDocumentExtensions.h: Forward declare SVGResourcesCache.

2011-11-14  Rafael Weinstein  <rafaelw@chromium.org>

        [MutationObservers] Add histogram collection for usage of DOM Mutation Events
        https://bugs.webkit.org/show_bug.cgi?id=72316

        Reviewed by Ryosuke Niwa.

        This patch adds six calls in ~Document() which simply pipe-out to the embedder
        the (already-collected) bits of whether varous DOM Mutation Events were registered
        on the document.

        No tests needed. No functional changes.

        * dom/Document.cpp:
        (WebCore::histogramMutationEventUsage):
        (WebCore::Document::~Document):

2011-11-14  Simon Fraser  <simon.fraser@apple.com>

        div with webkit-transform + webkit-box-reflect disappears when switching tabs
        https://bugs.webkit.org/show_bug.cgi?id=53355

        Reviewed by Dean Jackson.

        Tickle Core Animation into updating the layer's content property when
        switching back to a tab which has composited reflections. This hack is
        needed becuase reflections involve sharing layer contents between layers.

        * platform/graphics/mac/WebLayer.mm:
        (-[WebLayer actionForKey:]):

2011-11-14  Adam Barth  <abarth@webkit.org>

        Unique origins shouldn't remember their scheme, host, or port
        https://bugs.webkit.org/show_bug.cgi?id=72308

        Reviewed by Eric Seidel.

        This patch contains the bulk (all?) of the behavior differences in this
        patch series.  Unique origins shouldn't remember their schemes.  Doing
        so causes some privileges (e.g., local access) to leak into unique
        origins.

        * page/SecurityOrigin.cpp:
        (WebCore::SecurityOrigin::SecurityOrigin):
            - Explicitly clear out the protocol, host, and port for unique
              origins.  A future patch will refactor all this code to be more
              elegant.
        * platform/SchemeRegistry.cpp:
        (WebCore::schemesWithUniqueOrigins):
            - Merge "about" and "javascript" in with the general case now that
              we don't have a separate notion of an empty origin.

2011-11-14  Adam Barth  <abarth@webkit.org>

        Don't special-case "data" URLs in drag-and-drop logic
        https://bugs.webkit.org/show_bug.cgi?id=72322

        Reviewed by Eric Seidel.

        See the bug for more details.

        Test: editing/pasteboard/drag-drop-to-data-url.html

        * page/SecurityOrigin.cpp:
        (WebCore::SecurityOrigin::canReceiveDragData):

2011-11-14  Adrienne Walker  <enne@google.com>

        [chromium] Pipe compositor commit/swap up to WebWidgetClient
        https://bugs.webkit.org/show_bug.cgi?id=72041

        Reviewed by Darin Fisher.

        * platform/graphics/chromium/cc/CCLayerTreeHost.h:
        (WebCore::CCLayerTreeHost::didCommitAndDrawFrame):
        (WebCore::CCLayerTreeHost::didCompleteSwapBuffers):
        * platform/graphics/chromium/cc/CCSingleThreadProxy.cpp:
        (WebCore::CCSingleThreadProxy::doComposite):
        * platform/graphics/chromium/cc/CCThreadProxy.cpp:
        (WebCore::CCThreadProxy::onSwapBuffersCompleteOnImplThread):
        (WebCore::CCThreadProxy::scheduledActionDrawAndSwap):
        (WebCore::CCThreadProxy::didCommitAndDrawFrame):
        (WebCore::CCThreadProxy::didCompleteSwapBuffers):
        * platform/graphics/chromium/cc/CCThreadProxy.h:

2011-11-14  Tony Chang  <tony@chromium.org>

        Remove the CSS3_FLEXBOX compile time flag and enable on all ports
        https://bugs.webkit.org/show_bug.cgi?id=72196

        Reviewed by Ojan Vafai.

        * Configurations/FeatureDefines.xcconfig:
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        * css/CSSFlexValue.cpp:
        * css/CSSFlexValue.h:
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):
        (WebCore::CSSParser::parseFlex):
        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        * css/CSSProperty.cpp:
        (WebCore::CSSProperty::isInheritedProperty):
        * css/CSSPropertyNames.in:
        * css/CSSStyleApplyProperty.cpp:
        (WebCore::ApplyPropertyLength::applyValue):
        (WebCore::CSSStyleApplyProperty::CSSStyleApplyProperty):
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):
        * css/CSSValue.cpp:
        (WebCore::CSSValue::cssText):
        (WebCore::CSSValue::destroy):
        * css/CSSValue.h:
        * css/CSSValueKeywords.in:
        * rendering/RenderFlexibleBox.cpp:
        * rendering/RenderFlexibleBox.h:
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::createObject):
        * rendering/RenderObject.h:
        (WebCore::RenderObject::isFlexibleBoxIncludingDeprecated):
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::RenderStyle):
        (WebCore::RenderStyle::diff):
        * rendering/style/RenderStyle.h:
        * rendering/style/RenderStyleConstants.h:
        * rendering/style/StyleFlexibleBoxData.cpp:
        * rendering/style/StyleFlexibleBoxData.h:
        * rendering/style/StyleRareNonInheritedData.cpp:
        (WebCore::StyleRareNonInheritedData::StyleRareNonInheritedData):
        (WebCore::StyleRareNonInheritedData::operator==):
        * rendering/style/StyleRareNonInheritedData.h:

2011-11-14  Vincent Scheib  <scheib@chromium.org>

        Mouse Lock: Renaming to 'Pointer Lock': Runtime Enable Flags
        https://bugs.webkit.org/show_bug.cgi?id=72303

        Reviewed by Darin Fisher.

        * bindings/generic/RuntimeEnabledFeatures.cpp:
        * bindings/generic/RuntimeEnabledFeatures.h:
        (WebCore::RuntimeEnabledFeatures::webkitPointerLockEnabled):
        (WebCore::RuntimeEnabledFeatures::setWebkitPointerLockEnabled):
        (WebCore::RuntimeEnabledFeatures::webkitPointerEnabled):
        * page/Settings.cpp:
        (WebCore::Settings::Settings):
        * page/Settings.h:
        (WebCore::Settings::setPointerLockEnabled):
        (WebCore::Settings::PointerLockEnabled):

2011-11-14  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r100176.
        http://trac.webkit.org/changeset/100176
        https://bugs.webkit.org/show_bug.cgi?id=72309

        it broke the Mac builds (missing symbols) in a non-obvious way
        (Requested by jchaffraix on #webkit).

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * bindings/js/JSWebGLRenderingContextCustom.cpp:
        (WebCore::toJS):
        * bindings/v8/custom/V8WebGLRenderingContextCustom.cpp:
        (WebCore::toV8Object):
        * html/canvas/WebGLExperimentalCompressedTextures.cpp: Removed.
        * html/canvas/WebGLExperimentalCompressedTextures.h: Removed.
        * html/canvas/WebGLExperimentalCompressedTextures.idl: Removed.
        * html/canvas/WebGLExtension.h:
        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::getExtension):
        (WebCore::WebGLRenderingContext::getParameter):
        (WebCore::WebGLRenderingContext::getSupportedExtensions):
        * html/canvas/WebGLRenderingContext.h:
        * platform/graphics/Extensions3D.h:
        * platform/graphics/GraphicsContext3D.h:
        * platform/graphics/efl/GraphicsContext3DEfl.cpp:
        * platform/graphics/opengl/GraphicsContext3DOpenGL.cpp:
        * platform/graphics/qt/GraphicsContext3DQt.cpp:

2011-11-14  Tony Chang  <tony@chromium.org>

        remove -wap-marquee css propery value
        https://bugs.webkit.org/show_bug.cgi?id=72296

        Reviewed by Adam Barth.

        This css value is no longer used.

        * css/CSSValueKeywords.in:

2011-11-14  Julien Chaffraix  <jchaffraix@webkit.org>

        Crash in RenderTableSection::splitColumn
        https://bugs.webkit.org/show_bug.cgi?id=70171

        Reviewed by David Hyatt.

        Tests: fast/table/crash-splitColumn-2.html
               fast/table/crash-splitColumn-3.html
               fast/table/crash-splitColumn.html

        The old code would not take into account the fact that each RenderTableSection
        can set its m_needsCellRecalc flag independently of the rest.

        This means that you cannot assume that you can always split or append columns to
        all the sections. Our approach is to skip sections needing cell recalc in several
        parts of the code as they will be properly reset to the table's representations
        during a cell recalc.

        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::splitColumn):
        (WebCore::RenderTable::appendColumn):
        Skip sections needing cell recalc as they will be properly updated later.

        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::addCell):
        Ignore a section needing cell recalc as addCell will be called after sync'ing
        the internal column representation in recalcCells.

        (WebCore::RenderTableSection::recalcCells):
        Clear the flag at the beginning of the function to activate the previous functions.
        Added a comment as to why this is fine.

        (WebCore::RenderTableSection::appendColumn):
        Added an ASSERT. If we need cell recalc, we should NEVER update m_grid outside
        of recalcCells().

2011-11-14  Adam Barth  <abarth@webkit.org>

        Remove the concept of an empty SecurityOrigin
        https://bugs.webkit.org/show_bug.cgi?id=72287

        Reviewed by Eric Seidel.

        This concept is fragile and doesn't exist in the specs.  Previous
        patches have removed most of the code relying upon this function.  This
        patch removes a couple stragglers.

        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::postMessage):
            - This check should really be about unique origins because it
              doesn't make sense to target postMessages at unique origins, as
              explained in the comment.
        * page/SecurityOrigin.cpp:
        * page/SecurityOrigin.h:

2011-11-14  Adam Barth  <abarth@webkit.org>

        SecurityContext::isSecureTransitionTo should not refer to empty security origins
        https://bugs.webkit.org/show_bug.cgi?id=72277

        Reviewed by Eric Seidel.

        Now that we're tracking the "failed to initialized SecurityOrigin"
        state explicitly, we should use that to determine whether we can make a
        secure transition.

        * dom/SecurityContext.cpp:
        (WebCore::SecurityContext::isSecureTransitionTo):

2011-11-14  Vincent Scheib  <scheib@chromium.org>

        Mouse Lock: Renaming to 'Pointer Lock': ENABLE Flags
        https://bugs.webkit.org/show_bug.cgi?id=72286

        Reviewed by Adam Barth.

        * bindings/generic/RuntimeEnabledFeatures.cpp:
        * bindings/generic/RuntimeEnabledFeatures.h:
        * dom/MouseEvent.idl:
        * dom/MouseRelatedEvent.h:
        * page/MouseLockable.cpp:
        * page/MouseLockable.h:
        * page/MouseLockable.idl:
        * page/Navigator.cpp:
        * page/Navigator.h:
        * page/Navigator.idl:
        * page/Settings.cpp:
        (WebCore::Settings::Settings):
        * page/Settings.h:

2011-11-14  Anna Cavender  <annacc@chromium.org>

        Remove TextTrackCueIndex and TextTrackCueSet.  No longer needed.
        https://bugs.webkit.org/show_bug.cgi?id=72216

        Reviewed by Sam Weinig.

        No new tests. No new functionality.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.xcodeproj/project.pbxproj:
        * html/TextTrackCueIndex.cpp: Removed.
        * html/TextTrackCueIndex.h: Removed.

2011-10-10  Robert Hogan  <robert@webkit.org>

        CSS 2.1 failure: border-spacing-applies-to-015.htm
        https://bugs.webkit.org/show_bug.cgi?id=69773

        Reviewed by David Hyatt.

        The CSS test suite expects UAs to allow multiple captions per table.
        Replace m_caption with a Vector called m_captions.

        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::RenderTable):
        (WebCore::RenderTable::addChild):
        (WebCore::RenderTable::removeChild):
        (WebCore::RenderTable::adjustLogicalHeightForCaption):
        (WebCore::RenderTable::layout):
        (WebCore::RenderTable::addOverflowFromChildren):
        (WebCore::RenderTable::paintObject):
        (WebCore::RenderTable::subtractCaptionRect):
        (WebCore::RenderTable::computePreferredLogicalWidths):
        (WebCore::RenderTable::nextColElement):
        (WebCore::RenderTable::colElement):
        (WebCore::RenderTable::recalcCaption):
        (WebCore::RenderTable::recalcSections):
        (WebCore::RenderTable::overflowClipRect):
        (WebCore::RenderTable::nodeAtPoint):
        * rendering/RenderTable.h:

2011-11-14  Gregg Tavares  <gman@google.com>

        Implement WEBGL_EXPERIMENTAL_compressed_textures WebGL extension
        https://bugs.webkit.org/show_bug.cgi?id=72086

        Reviewed by Kenneth Russell.

        No new tests. Will write final test once on hardware.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * WebCore.gypi:
        * WebCore.pro:
        * bindings/js/JSWebGLRenderingContextCustom.cpp:
        (WebCore::toJS):
        * bindings/v8/custom/V8WebGLRenderingContextCustom.cpp:
        (WebCore::toV8Object):
        * html/canvas/WebGLExperimentalCompressedTextures.cpp: Added.
        (WebCore::WebGLExperimentalCompressedTextures::WebGLExperimentalCompressedTextures):
        (WebCore::WebGLExperimentalCompressedTextures::~WebGLExperimentalCompressedTextures):
        (WebCore::WebGLExperimentalCompressedTextures::getName):
        (WebCore::WebGLExperimentalCompressedTextures::create):
        (WebCore::WebGLExperimentalCompressedTextures::supported):
        (WebCore::WebGLExperimentalCompressedTextures::validateCompressedTexFormat):
        (WebCore::WebGLExperimentalCompressedTextures::validateCompressedTexFuncData):
        (WebCore::WebGLExperimentalCompressedTextures::validateCompressedTexSubDimensions):
        (WebCore::WebGLExperimentalCompressedTextures::compressedTexImage2D):
        (WebCore::WebGLExperimentalCompressedTextures::compressedTexSubImage2D):
        (WebCore::WebGLExperimentalCompressedTextures::getCompressedTextureFormats):
        * html/canvas/WebGLExperimentalCompressedTextures.h: Added.
        * html/canvas/WebGLExperimentalCompressedTextures.idl: Copied from Source/WebCore/html/canvas/WebGLExtension.h.
        * html/canvas/WebGLExtension.h:
        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::getExtension):
        (WebCore::WebGLRenderingContext::getParameter):
        (WebCore::WebGLRenderingContext::getSupportedExtensions):
        * html/canvas/WebGLRenderingContext.h:
        * platform/graphics/Extensions3D.h:
        * platform/graphics/GraphicsContext3D.h:
        * platform/graphics/efl/GraphicsContext3DEfl.cpp:
        (WebCore::GraphicsContext3D::compressedTexImage2D):
        (WebCore::GraphicsContext3D::compressedTexSubImage2D):
        * platform/graphics/opengl/GraphicsContext3DOpenGL.cpp:
        (WebCore::GraphicsContext3D::compressedTexImage2D):
        (WebCore::GraphicsContext3D::compressedTexSubImage2D):
        * platform/graphics/qt/GraphicsContext3DQt.cpp:
        (WebCore::GraphicsContext3D::compressedTexImage2D):
        (WebCore::GraphicsContext3D::compressedTexSubImage2D):

2011-11-14  Michael Nordman  <michaeln@google.com>

        Return more complete error and exception messages when a
        WebSQLDatabase function fails. Produce console logging
        for openDatabase() errors and vacuum errors. Add a lastErrorMessage
        accessor to the DatabaseSync interface.
        https://bugs.webkit.org/show_bug.cgi?id=71575

        Reviewed by David Levin.

        Yes, see LayoutTests/ChangeLog in this patch.

        * platform/sql/SQLiteDatabase.cpp:
        (WebCore::SQLiteDatabase::SQLiteDatabase):
        (WebCore::SQLiteDatabase::open):
        (WebCore::SQLiteDatabase::close):
        (WebCore::SQLiteDatabase::lastError):
        (WebCore::SQLiteDatabase::lastErrorMsg):
        (WebCore::SQLiteDatabase:: runVacuumCommand):
        (WebCore::SQLiteDatabase:: runIncrementalVacuumCommand):
        Reflect errors in the open() method in lastError() and lastErrorMsg().
        Return an error codes for runVacuumCommand() and runIncrementalVacuumCommand().

        * platform/sql/SQLiteDatabase.h:
        * storage/AbstractDatabase.cpp:
        (WebCore::formatErrorMessage):
        (WebCore::AbstractDatabase::performOpenAndVerify):
        (WebCore::AbstractDatabase::logErrorMessage):
        During openAndVerify, produce formatted error messages that include what was being done, the sqlite error code,
        and the sqlite error message. Add a helper to log message to the console.

        * storage/AbstractDatabase.h:
        * storage/ChangeVersionWrapper.cpp:
        (WebCore::ChangeVersionWrapper::performPreflight):
        (WebCore::ChangeVersionWrapper::performPostflight):
        * storage/Database.cpp:
        (WebCore::Database::openDatabase):
        (WebCore::Database::openAndVerifyVersion):
        (WebCore::Database::performOpenAndVerify):
        * storage/Database.h:
        * storage/DatabaseSync.cpp:
        (WebCore::DatabaseSync::openDatabaseSync):
        (WebCore::DatabaseSync::changeVersion):
        (WebCore::DatabaseSync::runTransaction):
        * storage/DatabaseSync.h:
        (WebCore::DatabaseSync::lastErrorMessage):
        (WebCore::DatabaseSync::setLastErrorMessage):
        * storage/DatabaseSync.idl:
        Add a lastErrorMessage attribute so javascript callers can
        retrieve more detailed information about what went wrong.

        * storage/DatabaseTask.cpp:
        (WebCore::Database::DatabaseOpenTask::DatabaseOpenTask):
        (WebCore::Database::DatabaseOpenTask::doPerformTask):
        * storage/DatabaseTask.h:
        (WebCore::Database::DatabaseOpenTask::create):
        Return an errorMessage in addition to the exception code.

        * storage/SQLError.h:
        (WebCore::SQLError::create):
        Add helpers to produced formatted error messages.

        * storage/SQLStatement.cpp:
        (WebCore::SQLStatement::execute):
        * storage/SQLStatementSync.cpp:
        (WebCore::SQLStatementSync::execute):
        * storage/SQLTransaction.cpp:
        (WebCore::SQLTransaction::openTransactionAndPreflight):
        (WebCore::SQLTransaction::postflightAndCommit):
        * storage/SQLTransactionSync.cpp:
        (WebCore::SQLTransactionSync::executeSQL):
        (WebCore::SQLTransactionSync::begin):
        (WebCore::SQLTransactionSync::execute):
        (WebCore::SQLTransactionSync::commit):

2011-11-14  Adam Barth  <abarth@webkit.org>

        SecurityOrigin inheritance should depend on document URL, not on "emptiness" of the SecurityOrigin
        https://bugs.webkit.org/show_bug.cgi?id=72283

        Reviewed by Sam Weinig.

        This change aligns our implementation more closely with the spec.  I
        don't think this change has an observable effects, but it moves us
        closer to removing the concept of an empty security origin.

        * dom/Document.cpp:
        (WebCore::shouldInheritSecurityOriginFromOwner):
        (WebCore::Document::initSecurityContext):

2011-11-14  Erik Arvidsson  <arv@chromium.org>

        Remove getParameter from HTMLAnchorElement and Location
        https://bugs.webkit.org/show_bug.cgi?id=71966

        Reviewed by Adam Barth.

        * html/HTMLAnchorElement.cpp: Removed getParameter.
        * html/HTMLAnchorElement.h: Ditto.
        * html/HTMLAnchorElement.idl: Ditto.
        * page/Location.cpp: Ditto.
        * page/Location.h: Ditto.
        * page/Location.idl: Ditto.

2011-11-14  Erik Arvidsson  <arv@chromium.org>

        Remove RequiresAllArguments
        https://bugs.webkit.org/show_bug.cgi?id=71503

        Reviewed by Adam Barth.

        This removes RequiresAllArguments from the idl files as well as from the code generators.
        For window.move/resize/scroll we now match IE and treat missing arguments as 0.
        For Clipboard we now match Gecko and IE and throw an exception when setData is called with too few arguments.

        Test: fast/events/drag-and-drop-set-drag-data-arguments.html

        * bindings/js/JSSVGLengthCustom.cpp:
        (WebCore::JSSVGLength::convertToSpecifiedUnits):
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateArgumentsCountCheck): Remove RequiresAllArguments.
        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateArgumentsCountCheck): Ditto.
        * bindings/scripts/test/CPP/WebDOMTestObj.cpp:
        * bindings/scripts/test/CPP/WebDOMTestObj.h:
        * bindings/scripts/test/GObject/WebKitDOMTestObj.cpp:
        * bindings/scripts/test/GObject/WebKitDOMTestObj.h:
        * bindings/scripts/test/JS/JSTestObj.cpp:
        * bindings/scripts/test/JS/JSTestObj.h:
        * bindings/scripts/test/ObjC/DOMTestObj.h:
        * bindings/scripts/test/ObjC/DOMTestObj.mm:
        * bindings/scripts/test/TestObj.idl:
        * bindings/scripts/test/V8/V8TestObj.cpp:
        (WebCore::ConfigureV8TestObjTemplate):
        * dom/Clipboard.idl: Remove [RequireAllArguments] from setData which actually means we now require all arguments and throw instead of silently fail.
        * page/DOMWindow.idl: Treat missing arguments as 0 which makes us match IE.
        * websockets/WebSocket.idl: Comment changes only.

2011-11-08  Jer Noble  <jer.noble@apple.com>

        Implement MediaController.
        https://bugs.webkit.org/show_bug.cgi?id=71408

        Reviewed by Eric Carlson.

        Tests: media/media-controller-playback.html
               media/media-controller.html

        Adds support for the MediaController DOM object, and the mediagroup and mediacontroller
        HTMLMediaElement attributes.

        MediaController is an DOM object which synchronizes playback of multiple HTMLMediaElements. It can
        either be created by a page script and assigned to a HTMLMediaElement using the controller property,
        or all HTMLMediaElements with identical mediagroup attributes will have a MediaController assigned 
        automatically.

        Add an abstract interface implemented by both MediaController and HTMLMediaElement.
        * html/MediaControllerInterface.h: Added.
        (WebCore::MediaControllerInterface::~MediaControllerInterface):

        Add the MediaController object and IDL.
        * html/MediaController.cpp: Added.
        (mediaGroupToMediaControllerMap):
        (MediaController::mediaControllerForMediaGroup):
        (MediaController::create):
        (MediaController::MediaController):
        (MediaController::~MediaController):
        (MediaController::addMediaElement):
        (MediaController::removeMediaElement):
        (MediaController::containsMediaElement):
        (MediaController::buffered):
        (MediaController::seekable):
        (MediaController::played):
        (MediaController::duration):
        (MediaController::currentTime):
        (MediaController::setCurrentTime):
        (MediaController::play):
        (MediaController::pause):
        (MediaController::setDefaultPlaybackRate):
        (MediaController::setPlaybackRate):
        (MediaController::setVolume):
        (MediaController::setMuted):
        (MediaController::reportControllerState):
        (MediaController::updateReadyState):
        (MediaController::updatePlaybackState):
        (MediaController::updateMediaElements):
        (MediaController::scheduleEvent):
        (MediaController::asyncEventTimerFired):
        (MediaController::scriptExecutionContext):
        (MediaController::hasAudio):
        (MediaController::hasVideo):
        (MediaController::hasClosedCaptions):
        (MediaController::setClosedCaptionsVisible):
        (MediaController::supportsScanning):
        (MediaController::beginScrubbing):
        (MediaController::endScrubbing):
        (MediaController::canPlay):
        (MediaController::isLiveStream):
        (MediaController::hasSource):
        (MediaController::returnToRealtime):
        (MediaController::isBlocked):
        (MediaController::hasEnded):
        * html/MediaController.h: Added.
        (WebCore::MediaController::mediaGroup):
        (WebCore::MediaController::paused):
        (WebCore::MediaController::defaultPlaybackRate):
        (WebCore::MediaController::playbackRate):
        (WebCore::MediaController::volume):
        (WebCore::MediaController::muted):
        (WebCore::MediaController::readyState):
        (WebCore::MediaController::playbackState):
        (WebCore::MediaController::supportsFullscreen):
        (WebCore::MediaController::isFullscreen):
        (WebCore::MediaController::enterFullscreen):
        (WebCore::MediaController::closedCaptionsVisible):
        (WebCore::MediaController::refEventTarget):
        (WebCore::MediaController::derefEventTarget):
        (WebCore::MediaController::toMediaController):
        (WebCore::MediaController::eventTargetData):
        (WebCore::MediaController::ensureEventTargetData):
        * html/MediaController.idl: Added.

        Add convenience functions to TimeRanges which can calculate intersections and
        unions between TimeRanges objects.
        * html/TimeRanges.cpp:
        (TimeRanges::copy):
        (TimeRanges::invert):
        (TimeRanges::intersectWith):
        (TimeRanges::unionWith):
        * html/TimeRanges.h:

        Add MediaControllerConstructor to the Window object.
        * page/DOMWindow.idl:

        Add the two new attribute names, mediagroup and controller.
        * html/HTMLAttributeNames.in:

        Add support for the new attributes, and add overridden behavior when a media element
        has a current media controller:
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::~HTMLMediaElement):
        (WebCore::HTMLMediaElement::parseMappedAttribute):
        (WebCore::HTMLMediaElement::prepareForLoad):
        (WebCore::HTMLMediaElement::setReadyState):
        (WebCore::HTMLMediaElement::setCurrentTime):
        (WebCore::HTMLMediaElement::setPlaybackRate):
        (WebCore::HTMLMediaElement::playInternal):
        (WebCore::HTMLMediaElement::togglePlayState):
        (WebCore::HTMLMediaElement::mediaPlayerTimeChanged):
        (WebCore::HTMLMediaElement::seekable):
        (WebCore::HTMLMediaElement::potentiallyPlaying):
        (WebCore::HTMLMediaElement::endedPlayback):
        (WebCore::HTMLMediaElement::updateVolume):
        (WebCore::HTMLMediaElement::updatePlayState):
        (WebCore::HTMLMediaElement::userCancelledLoad):
        (WebCore::HTMLMediaElement::mediaGroup):
        (WebCore::HTMLMediaElement::setMediaGroup):
        (WebCore::HTMLMediaElement::controller):
        (WebCore::HTMLMediaElement::setController):
        (WebCore::HTMLMediaElement::updateMediaController):
        (WebCore::HTMLMediaElement::isBlockedOnMediaController):
        * html/HTMLMediaElement.h:
        (WebCore::HTMLMediaElement::hasSource):
        (WebCore::HTMLMediaElement::isLiveStream):
        * html/HTMLMediaElement.idl:
        * bindings/js/JSHTMLMediaElementCustom.cpp: Added.
        (WebCore::JSHTMLMediaElement::setMediaController):

        Add convenience functions to store a mapping of media-elements-per-document to allow
        a quick lookup of media elements with the same media group within a given document:
        * html/HTMLMediaElement.cpp:
        (WebCore::documentToElementSetMap):
        (WebCore::addElementToDocumentMap):
        (WebCore::removeElementFromDocumentMap):
        
        Add a function "seekable" which returns a TimeRanges containing the seekable time ranges
        in a media element.  By default this is a single range of [0, maxTimeSeekable].
        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::seekable):
        * platform/graphics/MediaPlayer.h:
        * platform/graphics/MediaPlayerPrivate.h:
        (WebCore::MediaPlayerPrivateInterface::seekable):

        Support functions to cast between MediaController and EventTarget.
        * bindings/js/JSEventTarget.cpp:
        (WebCore::toJS):
        * dom/EventTarget.cpp:
        (WebCore::EventTarget::toMediaController):
        * dom/EventTarget.h:

        Fixed an infinite-recursion bug due to a collision between WTF::currentTime and
        ClockGeneric::currentTime:
        * platform/ClockGeneric.cpp:
        (ClockGeneric::ClockGeneric):
        (ClockGeneric::setCurrentTime):
        (ClockGeneric::currentTime):
        (ClockGeneric::setPlayRate):
        (ClockGeneric::start):
        (ClockGeneric::stop):
        (ClockGeneric::now):
        * platform/ClockGeneric.h:

        Boilerplate to support creating the derived sources for MediaController and adding new sources
        to the project:
        * CMakeLists.txt:
        * DerivedSources.cpp:
        * DerivedSources.make:
        * GNUmakefile.list.am:
        * WebCore.gypi:
        * WebCore.xcodeproj/project.pbxproj:

2011-11-14  Florin Malita  <fmalita@google.com>

        Multiple foreign objects not rendered
        https://bugs.webkit.org/show_bug.cgi?id=72151

        Reviewed by Adam Barth.

        SVG end tags need to be case-adjusted (just like their start counterparts).

        Test: svg/foreignObject/multiple-foreign-objects.html

        * html/parser/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::processEndTag):

2011-11-14  Mario Sanchez Prada  <msanchez@igalia.com>

        Add support for the caretBrowsingEnabled preference in WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=72266

        Reviewed by Chris Fleizach.

        * WebCore.exp.in: Exported settings for setCaretBrowsingEnabled.

2011-11-14  Jonathan Backer  <backer@chromium.org>

        [chromium] Plumb through partial swap
        https://bugs.webkit.org/show_bug.cgi?id=72028

        Reviewed by Kenneth Russell.

        * platform/graphics/chromium/Extensions3DChromium.h:
        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::initialize):
        * platform/graphics/chromium/cc/CCLayerTreeHost.h:
        (WebCore::LayerRendererCapabilities::LayerRendererCapabilities):

2011-11-14  Andrey Kosyakov  <caseq@chromium.org>

        Web Inspector: expose iframe window to the onShown event handler of panels & sidebars
        https://bugs.webkit.org/show_bug.cgi?id=72268

        Reviewed by Pavel Feldman.

        - replace IFrameView with ExtensionView;
        - inherit both ExtensionPanel and ExtensionSidebarPane from ExtensionView in the API;
        - move Panel.{onShow|onHide} to ExtensionView, effectively disabling show/hide notifications for non-extension panels and enabling it for sidebar panes;
        - expose iframe's window object in the onShow event handler.

        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * inspector/compile-front-end.sh:
        * inspector/front-end/ExtensionAPI.js:
        (injectedExtensionAPI.ExtensionViewImpl.dispatchShowEvent):
        (injectedExtensionAPI):
        (injectedExtensionAPI.PanelWithSidebarImpl):
        (injectedExtensionAPI.ExtensionPanelImpl):
        (injectedExtensionAPI.ExtensionSidebarPaneImpl):
        * inspector/front-end/ExtensionPanel.js:
        (WebInspector.ExtensionView):
        (WebInspector.ExtensionView.prototype.wasShown):
        (WebInspector.ExtensionView.prototype.willHide):
        (WebInspector.ExtensionView.prototype._onLoad):
        (WebInspector.ExtensionPanel):
        (WebInspector.ExtensionSidebarPane.prototype.setPage):
        * inspector/front-end/ExtensionServer.js:
        (WebInspector.ExtensionServer.prototype.notifyViewShown):
        (WebInspector.ExtensionServer.prototype.notifyViewHidden):
        (WebInspector.ExtensionServer.prototype._onCreatePanel):
        * inspector/front-end/IFrameView.js: Removed.
        * inspector/front-end/Panel.js:
        (WebInspector.Panel.prototype.wasShown):
        (WebInspector.Panel.prototype.willHide):
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/inspector.html:

2011-11-14  Yury Semikhatsky  <yurys@chromium.org>

        Web Inspector: add 'Show function definition' context menu item for function values
        https://bugs.webkit.org/show_bug.cgi?id=72265

        Allow navigating to JavaScript function definition using context menu.

        Reviewed by Pavel Feldman.

        * English.lproj/localizedStrings.js:
        * inspector/front-end/DebuggerPresentationModel.js:
        (WebInspector.DebuggerPresentationModel.prototype.rawLocationToUILocation):
        * inspector/front-end/ObjectPropertiesSection.js:
        (WebInspector.ObjectPropertyTreeElement.prototype.update):
        (WebInspector.ObjectPropertyTreeElement.prototype._functionContextMenuEventFired):
        (WebInspector.ObjectPropertyTreeElement.prototype._functionContextMenuEventFired.revealFunction):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype.showFunctionDefinition):
        * inspector/front-end/inspector.js:
        (WebInspector.showPanelForAnchorNavigation):

2011-11-14  Pavel Feldman  <pfeldman@google.com>

        Web Inspector: console's protocol payload does not have url and line properties.
        https://bugs.webkit.org/show_bug.cgi?id=72256

        Reviewed by Yury Semikhatsky.

        Test: inspector/console/console-url-and-line.html

        * inspector/ConsoleMessage.cpp:
        (WebCore::ConsoleMessage::ConsoleMessage):
        * inspector/front-end/ConsoleMessage.js:
        (WebInspector.ConsoleMessageImpl):

2011-11-14  Pavel Feldman  <pfeldman@google.com>

        Web Inspector: [regression r99960] null callback access.
        https://bugs.webkit.org/show_bug.cgi?id=72263

        Reviewed by Yury Semikhatsky.

        * inspector/CodeGeneratorInspector.py:

2011-11-14  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Unbreak the build on Mac OS X

        QMacStyle is guarded by Q_WS_MAC, which is not the case for QPA. Until
        that's been fixed in Qt we have to use the same guards in WebKit, not
        Q_OS_MAC.

        * platform/qt/RenderThemeQStyle.cpp:
        (WebCore::RenderThemeQStyle::RenderThemeQStyle):
        (WebCore::RenderThemeQStyle::adjustButtonStyle):
        (WebCore::RenderThemeQStyle::paintMenuList):
        (WebCore::RenderThemeQStyle::paintInnerSpinButton):
        * platform/qt/ScrollbarThemeQt.cpp:
        (WebCore::ScrollbarThemeQt::paint):

2011-11-14  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] Replace use of QApplication with QGuiApplication.

        Reviewed by Tor Arne Vestbø.

        Replace use of QApplication by QGuiApplication where applicable.

        * platform/qt/RenderThemeQt.cpp:
        (WebCore::RenderThemeQt::RenderThemeQt):
        (WebCore::RenderThemeQt::platformActiveSelectionBackgroundColor):
        (WebCore::RenderThemeQt::platformInactiveSelectionBackgroundColor):
        (WebCore::RenderThemeQt::platformActiveSelectionForegroundColor):
        (WebCore::RenderThemeQt::platformInactiveSelectionForegroundColor):
        (WebCore::RenderThemeQt::platformFocusRingColor):
        (WebCore::RenderThemeQt::systemColor):
        (WebCore::RenderThemeQt::minimumMenuListSize):
        (WebCore::RenderThemeQt::getMediaControlForegroundColor):
        (WebCore::RenderThemeQt::paintMediaVolumeSliderTrack):
        (WebCore::RenderThemeQt::caretBlinkInterval):

2011-11-14  Jaehoon Jeong  <jh4u.jeong@samsung.com>

        [CMAKE] Add the UseV8.cmake to WebCore.
        https://bugs.webkit.org/show_bug.cgi?id=72000

        Reviewed by Daniel Bates.

        Add the UseV8.cmake to WebCore to build bindings of V8 and
        generate JavaScript codes given IDL input.

        * UseV8.cmake: Added.

2011-11-11  Pierre Rossi  <pierre.rossi@gmail.com>

        [Qt] Remove the QStyle dependency in Qt's mobile theme
        https://bugs.webkit.org/show_bug.cgi?id=67773

        This refactoring splits up RenderThemeQt with two
        subclasses, a QStyle-backed one, and a Mobile version
        that uses the old mobile theme for now.

        QStyle availability is detected at compile time, and
        its use is determined by the QT_WEBKIT_USE_MOBILE_THEME
        environment variable.

        Reviewed by Simon Hausmann.

        Covered by the existing tests.

        * Target.pri:
        * platform/qt/QtMobileWebStyle.cpp: Removed. The relevant logic
        now lives within RenderThemeQtMobile.
        * platform/qt/QtMobileWebStyle.h: Removed. Ditto.
        * platform/qt/RenderThemeQStyle.cpp: Added.
        (WebCore::initStyleOption):
        (WebCore::RenderThemeQStyle::getStylePainter):
        (WebCore::StylePainterQStyle::StylePainterQStyle):
        (WebCore::StylePainterQStyle::init):
        (WebCore::RenderThemeQStyle::create):
        (WebCore::RenderThemeQStyle::RenderThemeQStyle):
        (WebCore::RenderThemeQStyle::~RenderThemeQStyle):
        (WebCore::RenderThemeQStyle::fallbackStyle):
        (WebCore::RenderThemeQStyle::qStyle):
        (WebCore::RenderThemeQStyle::findFrameLineWidth):
        (WebCore::RenderThemeQStyle::inflateButtonRect):
        (WebCore::RenderThemeQStyle::computeSizeBasedOnStyle):
        (WebCore::RenderThemeQStyle::adjustButtonStyle):
        (WebCore::RenderThemeQStyle::setButtonPadding):
        (WebCore::RenderThemeQStyle::paintButton):
        (WebCore::RenderThemeQStyle::adjustTextFieldStyle):
        (WebCore::RenderThemeQStyle::paintTextField):
        (WebCore::RenderThemeQStyle::adjustTextAreaStyle):
        (WebCore::RenderThemeQStyle::paintTextArea):
        (WebCore::RenderThemeQStyle::setPopupPadding):
        (WebCore::RenderThemeQStyle::paintMenuList):
        (WebCore::RenderThemeQStyle::adjustMenuListButtonStyle):
        (WebCore::RenderThemeQStyle::paintMenuListButton):
        (WebCore::RenderThemeQStyle::animationDurationForProgressBar):
        (WebCore::RenderThemeQStyle::paintProgressBar):
        (WebCore::RenderThemeQStyle::paintSliderTrack):
        (WebCore::RenderThemeQStyle::adjustSliderTrackStyle):
        (WebCore::RenderThemeQStyle::paintSliderThumb):
        (WebCore::RenderThemeQStyle::adjustSliderThumbStyle):
        (WebCore::RenderThemeQStyle::paintSearchField):
        (WebCore::RenderThemeQStyle::adjustSearchFieldStyle):
        (WebCore::RenderThemeQStyle::adjustSearchFieldDecorationStyle):
        (WebCore::RenderThemeQStyle::paintSearchFieldDecoration):
        (WebCore::RenderThemeQStyle::adjustSearchFieldResultsDecorationStyle):
        (WebCore::RenderThemeQStyle::paintSearchFieldResultsDecoration):
        (WebCore::RenderThemeQStyle::paintInnerSpinButton):
        (WebCore::RenderThemeQStyle::initializeCommonQStyleOptions):
        (WebCore::RenderThemeQStyle::adjustSliderThumbSize):
        * platform/qt/RenderThemeQStyle.h: Added.
        (WebCore::StylePainterQStyle::isValid):
        (WebCore::StylePainterQStyle::drawPrimitive):
        (WebCore::StylePainterQStyle::drawControl):
        (WebCore::StylePainterQStyle::drawComplexControl):
        * platform/qt/RenderThemeQt.cpp:
        (WebCore::RenderThemeQt::RenderThemeQt):
        (WebCore::RenderThemeQt::isControlStyled):
        (WebCore::RenderThemeQt::inflateButtonRect):
        (WebCore::RenderThemeQt::adjustRepaintRect):
        (WebCore::RenderThemeQt::minimumMenuListSize):
        (WebCore::RenderThemeQt::adjustTextFieldStyle):
        (WebCore::RenderThemeQt::adjustMenuListStyle):
        (WebCore::RenderThemeQt::adjustMenuListButtonStyle):
        (WebCore::RenderThemeQt::adjustProgressBarStyle):
        (WebCore::RenderThemeQt::paintSearchFieldCancelButton):
        (WebCore::RenderThemeQt::adjustInnerSpinButtonStyle):
        (WebCore::RenderThemeQt::setPaletteFromPageClientIfExists):
        (WebCore::RenderThemeQt::paintMediaFullscreenButton):
        (WebCore::RenderThemeQt::paintMediaMuteButton):
        (WebCore::RenderThemeQt::paintMediaPlayButton):
        (WebCore::RenderThemeQt::paintMediaCurrentTime):
        (WebCore::RenderThemeQt::paintMediaVolumeSliderTrack):
        (WebCore::RenderThemeQt::paintMediaVolumeSliderThumb):
        (WebCore::RenderThemeQt::paintMediaSliderTrack):
        (WebCore::RenderThemeQt::paintMediaSliderThumb):
        (WebCore::RenderThemeQt::adjustSliderThumbSize):
        (WebCore::RenderThemeQt::caretBlinkInterval):
        (WebCore::RenderThemeQt::fileListNameForWidth):
        (WebCore::StylePainter::StylePainter):
        (WebCore::StylePainter::init):
        (WebCore::StylePainter::~StylePainter):
        * platform/qt/RenderThemeQt.h:
        (WebCore::RenderThemeQt::useMobileTheme):
        (WebCore::StylePainter::isValid):
        * platform/qt/RenderThemeQtMobile.cpp: Added.
        (WebCore::drawRectangularControlBackground):
        (WebCore::RenderThemeQtMobile::getStylePainter):
        (WebCore::StylePainterMobile::StylePainterMobile):
        (WebCore::StylePainterMobile::drawChecker):
        (WebCore::StylePainterMobile::findChecker):
        (WebCore::StylePainterMobile::drawRadio):
        (WebCore::StylePainterMobile::findRadio):
        (WebCore::StylePainterMobile::drawMultipleComboButton):
        (WebCore::StylePainterMobile::drawSimpleComboButton):
        (WebCore::StylePainterMobile::getButtonImageSize):
        (WebCore::StylePainterMobile::findComboButton):
        (WebCore::StylePainterMobile::drawLineEdit):
        (WebCore::StylePainterMobile::drawCheckBox):
        (WebCore::StylePainterMobile::drawRadioButton):
        (WebCore::StylePainterMobile::drawPushButton):
        (WebCore::StylePainterMobile::drawComboBox):
        (WebCore::RenderThemeQtMobile::create):
        (WebCore::RenderTheme::themeForPage):
        (WebCore::RenderThemeQtMobile::RenderThemeQtMobile):
        (WebCore::RenderThemeQtMobile::~RenderThemeQtMobile):
        (WebCore::RenderThemeQtMobile::isControlStyled):
        (WebCore::RenderThemeQtMobile::popupInternalPaddingBottom):
        (WebCore::RenderThemeQtMobile::computeSizeBasedOnStyle):
        (WebCore::RenderThemeQtMobile::adjustButtonStyle):
        (WebCore::RenderThemeQtMobile::setButtonPadding):
        (WebCore::RenderThemeQtMobile::paintButton):
        (WebCore::RenderThemeQtMobile::adjustTextFieldStyle):
        (WebCore::RenderThemeQtMobile::paintTextField):
        (WebCore::RenderThemeQtMobile::adjustMenuListStyle):
        (WebCore::RenderThemeQtMobile::setPopupPadding):
        (WebCore::RenderThemeQtMobile::paintMenuList):
        (WebCore::RenderThemeQtMobile::paintMenuListButton):
        (WebCore::RenderThemeQtMobile::animationDurationForProgressBar):
        (WebCore::RenderThemeQtMobile::paintProgressBar):
        (WebCore::RenderThemeQtMobile::paintSliderTrack):
        (WebCore::RenderThemeQtMobile::paintSliderThumb):
        (WebCore::RenderThemeQtMobile::checkMultiple):
        (WebCore::RenderThemeQtMobile::setPaletteFromPageClientIfExists):
        (WebCore::RenderThemeQtMobile::adjustSliderThumbSize):
        * platform/qt/RenderThemeQtMobile.h: Added.
        * platform/qt/ScrollbarThemeQt.cpp:
        (WebCore::ScrollbarTheme::nativeTheme):
        (WebCore::ScrollbarThemeQt::paint):
        (WebCore::ScrollbarThemeQt::scrollbarThickness):
        (WebCore::ScrollbarThemeQt::paintScrollCorner):

2011-11-14  Adam Barth  <abarth@webkit.org>

        SecurityContext should track whether the SecurityOrigin has been initialized
        https://bugs.webkit.org/show_bug.cgi?id=72250

        Reviewed by Eric Seidel.

        This patch is another step towards https://bugs.webkit.org/show_bug.cgi?id=71745.

        One of the things we use "empty" SecurityOrigins for is detecting
        whether a Document's SecurityOrigin has been initialized.  In this
        patch, we track that state directly on SecurityContext (which is a base
        class of Document), moving us closer to removing the concept of an
        empty SecurityOrigin.

        * dom/Document.cpp:
        (WebCore::Document::initSecurityContext):
        * dom/SecurityContext.cpp:
        (WebCore::SecurityContext::SecurityContext):
        (WebCore::SecurityContext::setSecurityOrigin):
        * dom/SecurityContext.h:
        (WebCore::SecurityContext::didFailToInitializeSecurityOrigin):
        (WebCore::SecurityContext::haveInitializedSecurityOrigin):

2011-11-14  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix make distcheck build.

        * GNUmakefile.list.am: Add missing files.

2011-11-14  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Give HTML ContextMenu a more Native look
        https://bugs.webkit.org/show_bug.cgi?id=72207

        Reviewed by Pavel Feldman.

        * inspector/front-end/SoftContextMenu.js:
        (.WebInspector.SoftContextMenu.prototype._createMenuItem):
        Give the checkmark a class name so that it can be styled more
        with CSS instead of with JavaScript.

        * inspector/front-end/inspector.css:
        (.soft-context-menu): tweak the border and shadow.
        (.soft-context-menu-item): tweak the font size and positioning.
        (.soft-context-menu-separator): tweak the whitespace.
        (.soft-context-menu-item-mouse-over): solid blue for non-mac platforms.
        (body.platform-mac .soft-context-menu-item-mouse-over): gradient for mac platforms.
        (.soft-context-menu-item-checkmark): gray color normally.
        (.soft-context-menu-item-mouse-over .soft-context-menu-item-checkmark): white on hover.

2011-11-10  Yury Semikhatsky  <yurys@chromium.org>

        Web Inspector: function remote objetct should provide access to function position in the script
        https://bugs.webkit.org/show_bug.cgi?id=71808

        Added Debugger.getFunctionLocation command for resolving function location including
        start line, column and script id.

        Reviewed by Pavel Feldman.

        Test: inspector/debugger/function-location.html

        * bindings/js/JSInjectedScriptHostCustom.cpp:
        (WebCore::JSInjectedScriptHost::functionLocation):
        * bindings/v8/custom/V8InjectedScriptHostCustom.cpp:
        (WebCore::V8InjectedScriptHost::functionLocationCallback):
        * inspector/InjectedScript.cpp:
        (WebCore::InjectedScript::getFunctionLocation):
        * inspector/InjectedScript.h:
        * inspector/InjectedScriptHost.idl:
        * inspector/InjectedScriptSource.js:
        (.):
        * inspector/Inspector.json:
        * inspector/InspectorDebuggerAgent.cpp:
        (WebCore::InspectorDebuggerAgent::getFunctionLocation):
        * inspector/InspectorDebuggerAgent.h:

2011-11-14  Rakesh KN  <rakesh.kn@motorola.com>

        Cannot select multiple options by mouse dragging in <select multiple="multiple" size="7"> list
        https://bugs.webkit.org/show_bug.cgi?id=70496

        Reviewed by Kent Tamura.

        Select Multiple options in a select element with a mouse drag when no. of options
        are less than the no. specified in size attribute.
        Other browsers(IE, Opera, Firefox) support this feature

        Test: fast/forms/select-multiple-elements-with-mouse-drag-with-options-less-than-size.html

        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::listBoxDefaultEventHandler):
        Handled mouse move event with Left button pressed. We select the options under mouse
        when mouse drag happens and the select element cannot autoscroll.

2011-11-14  Yury Semikhatsky  <yurys@chromium.org>

        Web Inspector: [chromium] list dedicated workers in case inspector opened post-worker creation.
        https://bugs.webkit.org/show_bug.cgi?id=72020

        Collect information about dedicated workers even when inspector is closed. This
        way we can list all dedicated workers if the front-end opens later.

        Reviewed by Pavel Feldman.

        Test: http/tests/inspector-enabled/dedicated-workers-list.html

        * inspector/InspectorInstrumentation.h:
        (WebCore::InspectorInstrumentation::didStartWorkerContext):
        * inspector/InspectorWorkerAgent.cpp:
        (WebCore::InspectorWorkerAgent::InspectorWorkerAgent):
        (WebCore::InspectorWorkerAgent::~InspectorWorkerAgent):
        (WebCore::InspectorWorkerAgent::setFrontend):
        (WebCore::InspectorWorkerAgent::restore):
        (WebCore::InspectorWorkerAgent::clearFrontend):
        (WebCore::InspectorWorkerAgent::setWorkerInspectionEnabled):
        (WebCore::InspectorWorkerAgent::didStartWorkerContext):
        (WebCore::InspectorWorkerAgent::workerContextTerminated):
        (WebCore::InspectorWorkerAgent::createWorkerFrontendChannelsForExistingWorkers):
        (WebCore::InspectorWorkerAgent::destroyWorkerFrontendChannels):
        (WebCore::InspectorWorkerAgent::createWorkerFrontendChannel):
        * inspector/InspectorWorkerAgent.h:

2011-11-14  Zalan Bujtas  <zbujtas@gmail.com>

        Build breaks with --no-javascript-debugger --no-inspector
        https://bugs.webkit.org/show_bug.cgi?id=72228

        Reviewed by Simon Hausmann.

        * workers/WorkerMessagingProxy.cpp:
        (WebCore::PostMessageToPageInspectorTask::performTask):
        (WebCore::WorkerMessagingProxy::connectToInspector):
        * workers/WorkerThread.cpp:
        (WebCore::WorkerThread::workerThread):

2011-11-14  Kentaro Hara  <haraken@chromium.org>

        Remove all custom constructors of Events in V8
        https://bugs.webkit.org/show_bug.cgi?id=72074

        Reviewed by Adam Barth.

        V8 has [ConstructorTemplate=Event] IDL, which generates
        Event constructors. This patch removes all the custom constructors
        in V8EventConstructors.cpp and generates them using
        [ConstructorTemplate=Event] IDL.

        Tests: fast/events/constructors/before-load-event-constructor.html
               fast/events/constructors/close-event-constructor.html
               fast/events/constructors/custom-event-constructor.html
               fast/events/constructors/error-event-constructor.html
               fast/events/constructors/event-constructors.html
               fast/events/constructors/hash-change-event-constructor.html
               fast/events/constructors/message-event-constructor.html
               fast/events/constructors/overflow-event-constructor.html
               fast/events/constructors/page-transition-event-constructor.html
               fast/events/constructors/pop-state-event-constructor.html
               fast/events/constructors/progress-event-constructor.html
               fast/events/constructors/track-event-constructor.html
               fast/events/constructors/webkit-animation-event-constructor.html
               fast/events/constructors/webkit-transition-event-constructor.html

        * Target.pri: Removed V8EventConstructors.cpp.
        * WebCore.gypi: Ditto.
        * bindings/v8/custom/V8EventConstructors.cpp: Removed.
        * dom/BeforeLoadEvent.idl: Replaced [V8CustomConstructor] with [V8ConstructorTemplate=Event]. Added [InitializedByConstructor] IDL to attributes that can be initialized by the generated constructor.
        * dom/CustomEvent.idl: Ditto.
        * dom/ErrorEvent.idl: Ditto.
        * dom/HashChangeEvent.idl: Ditto.
        * dom/MessageEvent.idl: Ditto.
        * dom/OverflowEvent.idl: Ditto.
        * dom/PageTransitionEvent.idl: Ditto.
        * dom/PopStateEvent.idl: Ditto.
        * dom/ProgressEvent.idl: Ditto.
        * dom/WebKitAnimationEvent.idl: Ditto.
        * dom/WebKitTransitionEvent.idl: Ditto.
        * html/track/TrackEvent.idl: Ditto.
        * websockets/CloseEvent.idl: Ditto.

2011-11-13  Patrick Gansterer  <paroga@webkit.org>

        [WX] Make FontPlatformData::m_size private
        https://bugs.webkit.org/show_bug.cgi?id=72214

        Reviewed by Andreas Kling.

        Also change the order of member variables to match
        the order in the constructor to fix many warnings.

        * platform/graphics/wx/FontPlatformData.h:

2011-11-13  Adam Barth  <abarth@webkit.org>

        Document::initSecurityOrigin should return earlier more often
        https://bugs.webkit.org/show_bug.cgi?id=72244

        Reviewed by Eric Seidel.

        This minor tweak was suggested by Darin to make the subsequent patches
        easier to read.

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

2011-11-13  Adam Barth  <abarth@webkit.org>

        SecurityPolicy should refer to isUnique rather than isEmpty
        https://bugs.webkit.org/show_bug.cgi?id=72242

        Reviewed by Eric Seidel.

        It doesn't make sense to tweak the security policy for unique origins
        because they're different every time.  Previously, this code checked
        for empty origins, which are technically a subset of unique origins.  I
        don't think it's possible to call this code in a way that can detect
        the difference, but we're eventually going to remove the isEmpty
        function.

        * page/SecurityPolicy.cpp:
        (WebCore::SecurityPolicy::addOriginAccessWhitelistEntry):
        (WebCore::SecurityPolicy::removeOriginAccessWhitelistEntry):

2011-11-13  Adam Barth  <abarth@webkit.org>

        Move isSecureTransitionTo from SecurityOrigin to SecurityContext
        https://bugs.webkit.org/show_bug.cgi?id=72241

        Reviewed by Eric Seidel.

        This patch is a step towards breaking the patch for
        https://bugs.webkit.org/show_bug.cgi?id=71745 up into tiny,
        digestible pieces.

        * dom/SecurityContext.cpp:
        (WebCore::SecurityContext::isSecureTransitionTo):
        * dom/SecurityContext.h:
        * loader/DocumentWriter.cpp:
        (WebCore::DocumentWriter::begin):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::stopLoading):
        * page/SecurityOrigin.cpp:
        * page/SecurityOrigin.h:

2011-11-13  Nat Duca  <nduca@chromium.org>

        [chromium] LayerRendererChromium::initialize should fail when GaphicsContext3D::makeCurrent fails
        https://bugs.webkit.org/show_bug.cgi?id=72102

        Reviewed by James Robinson.

        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::initialize):
        (WebCore::LayerRendererChromium::releaseRenderSurfaceTextures):
        (WebCore::LayerRendererChromium::makeContextCurrent):
        * platform/graphics/chromium/cc/CCThreadProxy.cpp:
        (WebCore::CCThreadProxy::initializeLayerRendererOnImplThread):

2011-11-11  Vincent Scheib  <scheib@chromium.org>

        Mouse Lock: MouseEvent IDL
        https://bugs.webkit.org/show_bug.cgi?id=72158

        Reviewed by Dimitri Glazkov.

        Tests for movementX/Y pending mock mouse lock test infrastructure.

        * dom/MouseEvent.idl:
        * dom/MouseRelatedEvent.h:
        (WebCore::MouseRelatedEvent::movementX):
        (WebCore::MouseRelatedEvent::movementY):

2011-11-13  Julien Chaffraix  <jchaffraix@webkit.org>

        REGRESSION(99849): NULL-deref in updateLastMediaLine when parsing some media-queries
        https://bugs.webkit.org/show_bug.cgi?id=72222

        Reviewed by Pavel Feldman.

        Test: fast/media/update-media-query-css-parser.html

        * css/CSSGrammar.y: Added a proper NULL-check.

2011-11-12  Vincent Scheib  <scheib@chromium.org>

        Mouse Lock Navigator IDL
        https://bugs.webkit.org/show_bug.cgi?id=72150

        Reviewed by Dimitri Glazkov.

        Tests require mocking (similar to geolocation) that will be built after this.

        * WebCore.gypi:
        * bindings/generic/RuntimeEnabledFeatures.h:
        (WebCore::RuntimeEnabledFeatures::webkitPointerEnabled):
        * page/MouseLockable.cpp: Added.
        (WebCore::MouseLockable::MouseLockable):
        (WebCore::MouseLockable::~MouseLockable):
        (WebCore::MouseLockable::webkitLock):
        (WebCore::MouseLockable::webkitUnlock):
        (WebCore::MouseLockable::webkitIsLocked):
        * page/MouseLockable.h: Added.
        (WebCore::MouseLockable::create):
        * page/MouseLockable.idl: Added.
        * page/Navigator.cpp:
        (WebCore::Navigator::webkitPointer):
        * page/Navigator.h:
        * page/Navigator.idl:

2011-11-11  Andreas Kling  <kling@webkit.org>

        Only HTMLAllCollection needs stateful named item traversal.
        <http://webkit.org/b/71987>

        Reviewed by Antti Koivisto.

        After the ability to call collections (excluding document.all) was removed
        in <http://webkit.org/b/67579>, chunks of code remained in HTMLCollection
        and HTMLFormCollection that was only used for this purpose.

        Restrict the nextNamedItem() mechanism to HTMLAllCollection, since it's no
        longer used by any of the other collections.

        * html/HTMLCollection.h:

            Moved nextNamedItem() to HTMLAllCollection (and made it non-virtual.)
            Promoted itemAfter() and checkForNameMatch() to protected methods so
            they can be called from HTMLAllCollection.

        * html/HTMLAllCollection.h:
        * html/HTMLAllCollection.cpp:
        (WebCore::HTMLAllCollection::HTMLAllCollection):
        (WebCore::HTMLAllCollection::nextNamedItem):
        * html/HTMLCollection.cpp:
        (WebCore::HTMLCollection::HTMLCollection):
        (WebCore::HTMLCollection::namedItem):
        * html/HTMLFormCollection.cpp:
        (WebCore::HTMLFormCollection::namedItem):
        * html/HTMLFormCollection.h:

2011-11-13  Caio Marcelo de Oliveira Filho  <caio.oliveira@openbossa.org>

        Update binding generator tests to use jsCast
        https://bugs.webkit.org/show_bug.cgi?id=72224

        Reviewed by Geoffrey Garen.

        Update the expected results for JS generator after r100006 added jsCast.

        * bindings/scripts/test/JS/JSTestEventConstructor.cpp:
        (WebCore::JSTestEventConstructor::getOwnPropertySlot):
        (WebCore::JSTestEventConstructor::getOwnPropertyDescriptor):

2011-11-12  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r100038.
        http://trac.webkit.org/changeset/100038
        https://bugs.webkit.org/show_bug.cgi?id=72225

        It broke more than 500 layout tests on the Qt bots (Requested
        by Ossy_night on #webkit).

        * platform/qt/ScrollbarThemeQt.h:

2011-11-12  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        [Qt][Symbian] Remove support for WINSCW compiler
        https://bugs.webkit.org/show_bug.cgi?id=70178

        Reviewed by Chang Shu.

        No new tests as there is no new functionality.

        * config.h: Revert r57076.
        * loader/cache/CachedResourceHandle.h: Revert r49017 and r49556.
        (WebCore::CachedResourceHandle::CachedResourceHandle):
        * rendering/style/RenderStyle.h: Revert r52733.
        (compareEqual):
        * bindings/scripts/CodeGeneratorJS.pm: Revert r45553.
        * bindings/scripts/test/JS/JSTestMediaQueryListListener.cpp: Ditto.
        * bindings/scripts/test/JS/JSTestEventConstructor.cpp: Ditto.
        * bindings/scripts/test/JS/JSTestObj.cpp: Ditto.
        * bindings/scripts/test/JS/JSTestNamedConstructor.cpp: Ditto.
        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp: Ditto.
        * bindings/scripts/test/JS/JSTestInterface.cpp: Ditto.

2011-11-12  Anna Cavender  <annacc@chromium.org>

        Add WebVTT parsing layout tests.  Patch also includes creating a TextTrackCueList
        in TextTrack::cues() and observing WebVTT chronological cue order.
        https://bugs.webkit.org/show_bug.cgi?id=72215

        Reviewed by Eric Carlson.

        Tests: media/track/track-webvtt-tc000-empty.html
               media/track/track-webvtt-tc001-utf8.html
               media/track/track-webvtt-tc002-bom.html
               media/track/track-webvtt-tc003-newlines.html
               media/track/track-webvtt-tc004-magic-header.html
               media/track/track-webvtt-tc005-header-comment.html
               media/track/track-webvtt-tc006-cue-identifiers.html
               media/track/track-webvtt-tc007-cue-no-id.html
               media/track/track-webvtt-tc008-timings-no-hours.html
               media/track/track-webvtt-tc009-timings-hour.html
               media/track/track-webvtt-tc010-no-timings.html
               media/track/track-webvtt-tc011-blank-lines.html
               media/track/track-webvtt-tc012-out-of-order.html
               media/track/track-webvtt-tc013-settings.html
               media/track/track-webvtt-tc014-alignment.html
               media/track/track-webvtt-tc015-positioning.html
               media/track/track-webvtt-tc016-align-positioning.html
               media/track/track-webvtt-tc017-line-position.html
               media/track/track-webvtt-tc018-align-text-line-position.html
               media/track/track-webvtt-tc019-cue-size.html
               media/track/track-webvtt-tc020-cue-size-align.html
               media/track/track-webvtt-tc021-valign.html
               media/track/track-webvtt-tc022-entities.html
               media/track/track-webvtt-tc023-markup.html
               media/track/track-webvtt-tc024-timestamp.html
               media/track/track-webvtt-tc025-class-markup.html
               media/track/track-webvtt-tc026-voice.html
               media/track/track-webvtt-tc027-empty-cue.html
               media/track/track-webvtt-tc028-unsupported-markup.html

        * html/TextTrack.cpp:
        (WebCore::TextTrack::~TextTrack): Only call client if m_cues has been allocated.
        (WebCore::TextTrack::cues): Create a TextTrackCueList if we don't already have one.
        * html/TextTrack.h: The cues() function can no longer be const.
        * html/TextTrackCueList.cpp:
        (WebCore::TextTrackCueList::add): Only add the cue if the startTime comes after
            all other startTimes in the list.

2011-11-12  Nat Duca  <nduca@chromium.org>

        Fixes to GraphicsContext3D::makeCurrent on gtk and mac
        https://bugs.webkit.org/show_bug.cgi?id=72218

        Unreviewed. Forgot to handle corner cases. Thanks Nico!

        * platform/graphics/gtk/GraphicsContext3DGtk.cpp:
        (WebCore::GraphicsContext3D::makeContextCurrent):
        * platform/graphics/gtk/GraphicsContext3DPrivate.cpp:
        (WebCore::GraphicsContext3DPrivate::makeContextCurrent):
        * platform/graphics/mac/GraphicsContext3DMac.mm:
        (WebCore::GraphicsContext3D::makeContextCurrent):

2011-11-12  Patrick Gansterer  <paroga@webkit.org>

        Add stub implementation for SVGResources::filter()
        https://bugs.webkit.org/show_bug.cgi?id=72211

        Reviewed by Dirk Schulze.

        Add an empty implementation, which only returns 0 for !ENABLE(FILTERS)
        to reduce the #if ENABLE(FILTERS) complexity a bit.

        * rendering/svg/RenderSVGContainer.cpp:
        (WebCore::RenderSVGContainer::selfWillPaint):
        * rendering/svg/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::selfWillPaint):
        * rendering/svg/SVGRenderSupport.cpp:
        (WebCore::SVGRenderSupport::filtersForceContainerLayout):
        * rendering/svg/SVGResources.h:
        (WebCore::SVGResources::filter):
        * rendering/svg/SVGResourcesCache.cpp:
        (WebCore::SVGResourcesCache::clientLayoutChanged):
        (WebCore::SVGResourcesCache::clientUpdatedFromElement):

2011-11-12  Antti Koivisto  <antti@apple.com>

        REGRESSION(r98542): Rendering error on Google maps
        https://bugs.webkit.org/show_bug.cgi?id=71996

        Reviewed by Andreas Kling.
        
        r98542 exposed that StyleBoxData copy constructor and operator== are missing a field.
        
        Test reduction by David Barr.

        Test: fast/css/vertical-align-length-copy-bug.html

        * rendering/style/StyleBoxData.cpp:
        (WebCore::StyleBoxData::StyleBoxData):
        (WebCore::StyleBoxData::operator==):

2011-11-12  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r100013.
        http://trac.webkit.org/changeset/100013
        https://bugs.webkit.org/show_bug.cgi?id=72210

        It breaks all mac builds (Requested by WildFox on #webkit).

        * html/HTMLAnchorElement.idl:
        * html/HTMLAreaElement.idl:
        * html/HTMLButtonElement.idl:
        * html/HTMLElement.idl:
        * html/HTMLInputElement.idl:
        * html/HTMLLabelElement.idl:
        * html/HTMLLegendElement.idl:
        * html/HTMLTextAreaElement.idl:

2011-11-12  Nikolas Zimmermann  <nzimmermann@rim.com>

        Finish SVGLengthContext conversion in svg/
        https://bugs.webkit.org/show_bug.cgi?id=72105

        Reviewed by Antti Koivisto.

        Make SVGLengthContext(const SVGElement*) explicit, adapt all remaining call sites.
        Now that this process is finished, SVGLengthContext can be shared across renders,
        so that its possible to override the length context in a single place. This will
        be done in future patches.

        Doesn't affect any tests yet.

        * bindings/js/JSSVGLengthCustom.cpp:
        (WebCore::JSSVGLength::value):
        (WebCore::JSSVGLength::setValue):
        (WebCore::JSSVGLength::convertToSpecifiedUnits):
        * bindings/scripts/CodeGeneratorObjC.pm:
        (GenerateImplementation):
        * bindings/v8/custom/V8SVGLengthCustom.cpp:
        (WebCore::V8SVGLength::valueAccessorGetter):
        (WebCore::V8SVGLength::valueAccessorSetter):
        (WebCore::V8SVGLength::convertToSpecifiedUnitsCallback):
        * css/CSSCursorImageValue.cpp:
        (WebCore::CSSCursorImageValue::updateIfSVGCursorIsUsed):
        * rendering/svg/RenderSVGForeignObject.cpp:
        (WebCore::RenderSVGForeignObject::layout):
        * rendering/svg/RenderSVGImage.cpp:
        (WebCore::RenderSVGImage::updateFromElement):
        * rendering/svg/RenderSVGPath.cpp:
        (WebCore::RenderSVGPath::zeroLengthSubpathRect):
        (WebCore::RenderSVGPath::calculateMarkerBoundsIfNeeded):
        * rendering/svg/RenderSVGResourceMarker.cpp:
        (WebCore::RenderSVGResourceMarker::referencePoint):
        (WebCore::RenderSVGResourceMarker::calcViewport):
        * rendering/svg/RenderSVGText.cpp:
        (WebCore::RenderSVGText::strokeBoundingBox):
        * rendering/svg/RenderSVGViewportContainer.cpp:
        (WebCore::RenderSVGViewportContainer::calcViewport):
        * rendering/svg/SVGRenderSupport.cpp:
        (WebCore::SVGRenderSupport::applyStrokeStyleToContext):
        * rendering/svg/SVGRenderTreeAsText.cpp:
        (WebCore::writeStyle):
        (WebCore::operator<<):
        * rendering/svg/SVGShadowTreeElements.cpp:
        (WebCore::SVGShadowTreeContainerElement::containerTranslation):
        * rendering/svg/SVGTextChunkBuilder.cpp:
        (WebCore::SVGTextChunkBuilder::addTextChunk):
        * rendering/svg/SVGTextLayoutAttributesBuilder.cpp:
        (WebCore::extractFloatValuesFromSVGLengthList):
        * rendering/svg/SVGTextLayoutEngine.cpp:
        (WebCore::SVGTextLayoutEngine::parentDefinesTextLength):
        (WebCore::SVGTextLayoutEngine::beginTextPathLayout):
        * rendering/svg/SVGTextLayoutEngineBaseline.cpp:
        (WebCore::SVGTextLayoutEngineBaseline::calculateBaselineShift):
        * rendering/svg/SVGTextLayoutEngineSpacing.cpp:
        (WebCore::SVGTextLayoutEngineSpacing::calculateCSSKerningAndSpacing):
        * svg/SVGElement.h:
        * svg/SVGLengthContext.cpp:
        (WebCore::SVGLengthContext::determineViewport):
        * svg/SVGLengthContext.h:
        * svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::viewport):
        (WebCore::SVGSVGElement::localCoordinateSpaceTransform):
        (WebCore::SVGSVGElement::currentViewBoxRect):
        * svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::toClipPath):

2011-11-12  Patrick Gansterer  <paroga@webkit.org>

        Unreviewed build fix for !ENABLE(FILTERS) after r100036.

        * rendering/svg/SVGRenderSupport.cpp:
        (WebCore::SVGRenderSupport::filtersForceContainerLayout):

2011-11-11  Patrick Gansterer  <paroga@webkit.org>

        [WIN] Fix build without precompiled header.
        https://bugs.webkit.org/show_bug.cgi?id=72115

        Unreviewed. Add missing includes to fix build without precompiled header.

        * platform/ContextMenu.h:
        * platform/graphics/win/DIBPixelData.h:
        * platform/graphics/win/FontCustomPlatformData.h:
        * platform/network/cf/ResourceError.h:
        * platform/win/LanguageWin.cpp:
        * platform/win/LocalizedStringsWin.cpp:
        * platform/win/LoggingWin.cpp:

2011-11-11  Joseph Pecoraro  <pecoraro@apple.com>

        Remove Duplicate Symbol Exports
        https://bugs.webkit.org/show_bug.cgi?id=72205

        Reviewed by Dan Bernstein.

        * WebCore.exp.in: Remove duplicate symbols listed.
        Each dup in this case was already always exported.

2011-11-11  Nico Weber  <thakis@chromium.org>

        [chromium] Remove 2 static initializers and 3 exit time destructors. Turn on -Wexit-time-destructors.
        https://bugs.webkit.org/show_bug.cgi?id=72146

        Reviewed by Nate Chapin.

        * WebCore.gyp/WebCore.gyp:

2011-11-11  Nat Duca  <nduca@chromium.org>

        Since GraphicsContext3D::makeContextCurrent can fail, return bool.

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

        Reviewed by Kenneth Russell.

        * platform/graphics/GraphicsContext3D.h:
        * platform/graphics/efl/GraphicsContext3DEfl.cpp:
        (WebCore::GraphicsContext3D::makeContextCurrent):
        * platform/graphics/gtk/GraphicsContext3DGtk.cpp:
        (WebCore::GraphicsContext3D::makeContextCurrent):
        * platform/graphics/gtk/GraphicsContext3DPrivate.cpp:
        (WebCore::GraphicsContext3DPrivate::makeContextCurrent):
        * platform/graphics/gtk/GraphicsContext3DPrivate.h:
        * platform/graphics/mac/GraphicsContext3DMac.mm:
        (WebCore::GraphicsContext3D::makeContextCurrent):
        * platform/graphics/qt/GraphicsContext3DQt.cpp:
        (WebCore::GraphicsContext3D::makeContextCurrent):

2011-11-11  Ojan Vafai  <ojan@chromium.org>

        Unreviewed. Rollout http://trac.webkit.org/changeset/99744.
        https://bugs.webkit.org/show_bug.cgi?id=72203
        r99744 causes crash in Chromium's dom_perf test.

        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::splitColumn):
        (WebCore::RenderTable::appendColumn):
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::addCell):
        (WebCore::RenderTableSection::recalcCells):
        (WebCore::RenderTableSection::appendColumn):

2011-11-11  James Robinson  <jamesr@chromium.org>

        [chromium] Removed unused local from CCThreadProxy::scheduledActionCommit
        https://bugs.webkit.org/show_bug.cgi?id=72200

        Reviewed by Kenneth Russell.

        How did I get here I am not good with computers.

        * platform/graphics/chromium/cc/CCThreadProxy.cpp:
        (WebCore::CCThreadProxy::scheduledActionCommit):

2011-11-11  Dominic Mazzoni  <dmazzoni@google.com>

        Fix a crash when an anonymous render block is in a continuation.
        https://bugs.webkit.org/show_bug.cgi?id=70994

        Reviewed by Chris Fleizach.

        Test: accessibility/anonymous-render-block-in-continuation-causes-crash.html

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::renderParentObject):

2011-11-11  Anna Cavender  <annacc@chromium.org>

        Storage and retrieval of TextTrackCues during video playback, including
        cuechange, enter, and exit events.
        https://bugs.webkit.org/show_bug.cgi?id=70452

        Reviewed by Eric Carlson.

        Tests: media/track/track-cues-cuechange.html
               media/track/track-cues-enter-exit.html
               media/track/track-cues-seeking.html

        Add cuechange, enter, and exit events and make TextTrack and
        TextTrackCue EventTargets:
        * dom/EventNames.h:
        * dom/EventTarget.h:
        * dom/EventTargetFactory.in:

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::loadTimerFired):
            Use scheduleLoad() instead of configureTextTracks() to start an async load.
        (WebCore::HTMLMediaElement::updateActiveTextTrackCues):
            Updates the list of currently active cues during playback.
        (WebCore::HTMLMediaElement::textTrackAddCues):
            Adds cues to cueTree.  Called when cues are discovered/loaded.
        (WebCore::HTMLMediaElement::textTrackRemoveCues):
            Removes cues from cueTree.  Called when cues and/or tracks die.
        (WebCore::HTMLMediaElement::textTrackAddCue):
            Adds a cue to cueTree.  Called when cues are discovered/loaded.
        (WebCore::HTMLMediaElement::textTrackRemoveCue):
            Removes a cue from cueTree.  Called when cues and/or tracks die.

        (WebCore::HTMLMediaElement::playbackProgressTimerFired):
            Update the active TextTrackCues when playbackProgressTimerFired.
        (WebCore::HTMLMediaElement::addTrack):
            Pass along a ScriptExecutionContext to TextTrack::create().
        (WebCore::HTMLMediaElement::mediaPlayerTimeChanged):
            Update the active TextTrackCues when the media player time changes.
        * html/HTMLMediaElement.h:
            Use a PodIntervalTree cueTree to store and retrieve TextTrackCues
            during playback.

        * html/HTMLTrackElement.cpp:
        (WebCore::HTMLTrackElement::ensureTrack):
            Pass along a ScriptExecutionContext needed for EventTarget interface.
        * html/LoadableTextTrack.cpp:
        (WebCore::LoadableTextTrack::LoadableTextTrack):
            Pass along a ScriptExecutionContext needed for EventTarget interface.
        (WebCore::LoadableTextTrack::fireCueChangeEvent):
            Fire a cue change event on this TextTrack's <track>
        * html/LoadableTextTrack.h:
        (WebCore::LoadableTextTrack::create):
            Pass along a ScriptExecutionContext needed for EventTarget interface.
        * html/TextTrack.cpp:
        (WebCore::TextTrack::TextTrack):
            Pass along a ScriptExecutionContext needed for EventTarget interface.
        (WebCore::TextTrack::cues):
        (WebCore::TextTrack::activeCues):
            Return a TextTrackCueList that represents the currently active cues.
        (WebCore::TextTrack::fireCueChangeEvent):
            Fires a cue change event.
        * html/TextTrack.h:
        (WebCore::TextTrack::create):
            Pass along a ScriptExecutionContext needed for EventTarget interface.
        * html/TextTrack.idl:
            Makes TextTrack extend EventTarget interface and add oncuechange.
        * html/TextTrackCue.cpp:
        (WebCore::TextTrackCue::TextTrackCue):
            TextTrackCue should extend EventTarget, not ActiveDOMObject.
        (WebCore::TextTrackCue::isActive):
        (WebCore::TextTrackCue::setIsActive):
            Dispatch an enter or exit event depending on active state and notify
            the corresponding track to fire a cuechange event.

        The following are needed for EventTarget interface:
        (WebCore::TextTrackCue::interfaceName):
        (WebCore::TextTrackCue::scriptExecutionContext):
        (WebCore::TextTrackCue::eventTargetData):
        (WebCore::TextTrackCue::ensureEventTargetData):
        * html/TextTrackCue.h:
        (WebCore::TextTrackCue::refEventTarget):
        (WebCore::TextTrackCue::derefEventTarget):

        * html/TextTrackCue.idl:
            Extend EventTarget and add onenter and onexit.
        * html/TextTrackCueList.cpp:
        (WebCore::TextTrackCueList::activeCues):
            Update and return the list of currently active cues.
        (WebCore::TextTrackCueList::clear):
            Clear the cues from list (needed to return same object each time).
        * html/TextTrackCueList.h:

        The following are needed for EventTarget interface:
        * html/track/TrackBase.cpp:
        (WebCore::TrackBase::TrackBase):
        (WebCore::TrackBase::interfaceName):
        (WebCore::TrackBase::scriptExecutionContext):
        (WebCore::TrackBase::eventTargetData):
        (WebCore::TrackBase::ensureEventTargetData):
        * html/track/TrackBase.h:
        (WebCore::TrackBase::refEventTarget):
        (WebCore::TrackBase::derefEventTarget):

2011-11-11  David Reveman  <reveman@chromium.org>

        [Chromium] Remove unused variable added by r99813.
        https://bugs.webkit.org/show_bug.cgi?id=72199

        Reviewed by James Robinson.

        * platform/graphics/chromium/TiledLayerChromium.cpp:
        (WebCore::TiledLayerChromium::prepareToUpdate):

2011-11-11  James Robinson  <jamesr@chromium.org>

        Rollout http://trac.webkit.org/changeset/99844
        Solution is more complicated than the problem it was intended to solve.

        * platform/graphics/chromium/LayerChromium.cpp:
        * platform/graphics/chromium/LayerChromium.h:
        * platform/graphics/chromium/cc/CCLayerImpl.cpp:
        * platform/graphics/chromium/cc/CCLayerImpl.h:
        * platform/graphics/chromium/cc/CCLayerTreeHost.cpp:
        (WebCore::CCLayerTreeHost::applyScrollAndScale):
        * platform/graphics/chromium/cc/CCLayerTreeHost.h:
        * platform/graphics/chromium/cc/CCLayerTreeHostCommon.cpp:
        * platform/graphics/chromium/cc/CCLayerTreeHostCommon.h:
        * platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:
        (WebCore::CCLayerTreeHostImpl::processScrollDeltas):
        * platform/graphics/chromium/cc/CCThreadProxy.cpp:
        (WebCore::CCThreadProxy::beginFrameAndCommit):
        (WebCore::CCThreadProxy::beginFrameCompleteOnImplThread):
        * platform/graphics/chromium/cc/CCThreadProxy.h:

2011-11-11  Levi Weintraub  <leviw@chromium.org>

        Revert Page to operate on integers
        https://bugs.webkit.org/show_bug.cgi?id=72185

        Reviewed by Eric Seidel.

        Reverting the page classes to integers from LayoutUnits. It's not necessary to expose
        LayoutUnits in these classes, so we'll avoid doing so.

        No new tests, no change in behavior.

        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleMousePressEvent):
        (WebCore::EventHandler::sendContextMenuEventForKey):
        (WebCore::EventHandler::dragHysteresisExceeded):
        (WebCore::EventHandler::handleDrag):
        * page/EventHandler.h:
        * page/Frame.cpp:
        (WebCore::Frame::documentAtPoint):
        * page/Frame.h:
        * page/FrameView.cpp:
        (WebCore::FrameView::create):
        (WebCore::FrameView::invalidateRect):
        (WebCore::FrameView::setFrameRect):
        (WebCore::FrameView::setContentsSize):
        (WebCore::FrameView::adjustViewSize):
        (WebCore::FrameView::repaintContentRectangle):
        (WebCore::FrameView::invalidateScrollbarRect):
        (WebCore::FrameView::getTickmarks):
        (WebCore::FrameView::windowResizerRect):
        (WebCore::FrameView::setVisibleScrollerThumbRect):
        (WebCore::FrameView::updateScrollCorner):
        (WebCore::FrameView::paintScrollCorner):
        (WebCore::FrameView::paintContents):
        (WebCore::FrameView::paintOverhangAreas):
        (WebCore::FrameView::convertFromRenderer):
        (WebCore::FrameView::convertToRenderer):
        (WebCore::FrameView::convertToContainingView):
        (WebCore::FrameView::convertFromContainingView):
        * page/FrameView.h:
        * page/Page.cpp:
        (WebCore::Page::setPageScaleFactor):
        * page/Page.h:
        * page/SpatialNavigation.cpp:
        (WebCore::scrollInDirection):

2011-11-11  Dominic Mazzoni  <dmazzoni@google.com>

        New iframe content may not be reflected in the ax tree.
        https://bugs.webkit.org/show_bug.cgi?id=72100

        Reviewed by Chris Fleizach.

        The core issue was that when childrenChanged was called on a
        web area from an iframe that was just detached, it wasn't calling
        childrenChanged on its parent scroll area, or that scroll area's
        parent iframe element. To fix this, now AccessibilityScrollView
        implements setNeedsToUpdateChildren and parentObjectIfExists,
        and childrenChanged calls setNeedsToUpdateChildren on every object
        in the parent chain, not just AccessibilityRenderObjects.

        Test: accessibility/loading-iframe-updates-axtree.html

        * accessibility/AXObjectCache.h:
        * accessibility/AccessibilityObject.h:
        (WebCore::AccessibilityObject::setNeedsToUpdateChildren):
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::parentObjectIfExists):
        (WebCore::AccessibilityRenderObject::childrenChanged):
        * accessibility/AccessibilityRenderObject.h:
        (WebCore::AccessibilityRenderObject::setNeedsToUpdateChildren):
        * accessibility/AccessibilityScrollView.cpp:
        (WebCore::AccessibilityScrollView::AccessibilityScrollView):
        (WebCore::AccessibilityScrollView::updateChildrenIfNecessary):
        (WebCore::AccessibilityScrollView::parentObject):
        (WebCore::AccessibilityScrollView::parentObjectIfExists):
        * accessibility/AccessibilityScrollView.h:
        (WebCore::AccessibilityScrollView::setNeedsToUpdateChildren):

2011-11-11  Iain Merrick  <husky@google.com>

        [chromium] Fix CCThreadProxy::setVisible
        https://bugs.webkit.org/show_bug.cgi?id=71903

        The behavior is different depending on whether we're showing
        or hiding the compositor. This patch fixes both code paths.

        Reviewed by James Robinson.

        * platform/graphics/chromium/cc/CCCompletionEvent.h:
        (WebCore::CCCompletionEvent::CCCompletionEvent):
        (WebCore::CCCompletionEvent::~CCCompletionEvent):
        (WebCore::CCCompletionEvent::wait):
        (WebCore::CCCompletionEvent::signal):
        * platform/graphics/chromium/cc/CCThreadProxy.cpp:
        (WebCore::CCThreadProxy::setVisible):

2011-11-11  Iain Merrick  <husky@google.com>

        [chromium] CCThreadProxy::finishAllRendering hangs if !visible
        https://bugs.webkit.org/show_bug.cgi?id=71920

        Reviewed by James Robinson.

        * platform/graphics/chromium/cc/CCScheduler.cpp:
        (WebCore::CCScheduler::setNeedsForcedRedraw):
        * platform/graphics/chromium/cc/CCScheduler.h:
        * platform/graphics/chromium/cc/CCSchedulerStateMachine.cpp:
        (WebCore::CCSchedulerStateMachine::CCSchedulerStateMachine):
        (WebCore::CCSchedulerStateMachine::nextAction):
        (WebCore::CCSchedulerStateMachine::updateState):
        (WebCore::CCSchedulerStateMachine::setNeedsForcedRedraw):
        * platform/graphics/chromium/cc/CCSchedulerStateMachine.h:
        * platform/graphics/chromium/cc/CCThreadProxy.cpp:
        (WebCore::CCThreadProxy::requestReadbackOnImplThread):
        (WebCore::CCThreadProxy::finishAllRenderingOnImplThread):

2011-11-11  John Knottenbelt  <jknotten@chromium.org>

        [Chromium] Enable building without shared workers.
        https://bugs.webkit.org/show_bug.cgi?id=72122

        Reviewed by Yury Semikhatsky.

        * bindings/v8/WorkerScriptDebugServer.cpp:
        (WebCore::retrieveWorkerContext):

2011-11-11  Julien Chaffraix  <jchaffraix@webkit.org>

        Crash in styleDidChange when changing a table cell's height.
        <http://webkit.org/b/72004>

        Reviewed by Darin Adler.

        Tests: fast/table/crash-table-cell-change-height.html
               fast/table/table-cell-change-height-with-needsCellRecalc-section.html
               fast/table/table-cell-change-last-row-with-needsCellRecalc-section.html
               fast/table/table-row-change-height-with-needsCellRecalc-section.html

        r99212 removed our call to recalcCells when the logical height changed. This
        means that we could end up with a cells without having set its row() properly
        which would crash.

        The change exposes the was-the-row-properly-set information so that we don't
        try to access a bogus index. This should work properly even if the section
        needs a cell recalc as the current section's row structure would still be
        accurate in this case.

        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::styleDidChange): Check that our row index
        was properly set before calling

        * rendering/RenderTableCell.h:
        (WebCore::RenderTableCell::rowWasSet): Helper function to detect
        if we have set up our a row.
        (WebCore::RenderTableCell::row): Use the previous function in the
        ASSERT.

2011-11-11  Shinya Kawanaka  <shinyak@google.com>

        Implement legacy text check emulation in unified text check interface.
        https://bugs.webkit.org/show_bug.cgi?id=70299

        Reviewed by Hajime Morita.

        When UNIFIED_TEXT_CHECKING is off, WebCore::checkTextOfParagraph() emulates
        TextCheckerClient::checkTextOfParagraph() using checkSpellingOfString and checkGrammarOfString.

        This emulation can be used by setting the flag on.
        This can be done by WebCore::Internals::setUnifiedTextCheckingEnabled.

        Test: editing/spelling/spelling-unified-emulation.html

        * editing/TextCheckingHelper.cpp:
        (WebCore::findBadGrammars): Added.
        (WebCore::findMisspellings): Added.
        (WebCore::checkTextOfParagraph):
          Emulates TextCheckerClients::checkTextOfParagraph if UNIFIED_TEXT_CHECKING is off.
        * testing/Internals.cpp:
        (WebCore::Internals::setUnifiedTextCheckingEnabled): flag setter.
        (WebCore::Internals::unifiedTextCheckingEnabled): flag getter.
        * testing/Internals.h:
        * testing/Internals.idl:

2011-11-11  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        [CMAKE] Add a missing file to PlatformEfl.cmake for curl network backend.
        https://bugs.webkit.org/show_bug.cgi?id=72092

        Unreviewed. Fix build break when using curl.

        ProxyServerCurl.cpp file is not included in PlatformEfl.cmake. So, the file is not built
        when EFL port uses curl as network backend.

        * PlatformEfl.cmake: Add missing ProxyServerCurl.cpp.

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

        Switch remaining RenderBlock/Box methods to to new layout types
        https://bugs.webkit.org/show_bug.cgi?id=72075

        Reviewed by Eric Seidel.

        Move margins, floats and line layout block logic to layout abstraction.

        No new tests.

        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::borderPaddingMarginStart):
        (WebCore::borderPaddingMarginEnd):
        (WebCore::inlineLogicalWidth):
        (WebCore::setStaticPositions):
        (WebCore::LineLayoutState::LineLayoutState):
        (WebCore::LineLayoutState::setRepaintRange):
        (WebCore::LineLayoutState::updateRepaintRangeFromBox):
        (WebCore::RenderBlock::layoutRunsAndFloatsInRange):
        (WebCore::RenderBlock::linkToEndLineIfNeeded):
        (WebCore::RenderBlock::layoutInlineChildren):
        (WebCore::RenderBlock::checkFloatsInCleanLine):
        (WebCore::RenderBlock::determineStartPosition):
        (WebCore::RenderBlock::checkPaginationAndFloatsAtEndLine):
        (WebCore::RenderBlock::LineBreaker::nextLineBreak):
        (WebCore::RenderBlock::addOverflowFromInlineChildren):
        (WebCore::RenderBlock::checkLinesForTextOverflow):
        (WebCore::RenderBlock::positionNewFloatOnLine):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::containingBlockLogicalWidthForContentInRegion):
        (WebCore::RenderBox::offsetFromContainer):
        (WebCore::RenderBox::positionLineBox):
        (WebCore::RenderBox::computeInlineDirectionMargins):
        (WebCore::RenderBox::containingBlockLogicalWidthForPositioned):
        (WebCore::RenderBox::containingBlockLogicalHeightForPositioned):
        * rendering/RenderBox.h:
        (WebCore::RenderBox::tryLayoutDoingPositionedMovementOnly):

2011-11-11  Antoine Labour  <piman@chromium.org>

        [chromium] Add translation/scaling to WebExternalTextureLayer
        https://bugs.webkit.org/show_bug.cgi?id=72087

        Reviewed by James Robinson.

        Covered by WebLayerTest.

        * platform/graphics/chromium/PluginLayerChromium.cpp:
        (WebCore::PluginLayerChromium::PluginLayerChromium):
        (WebCore::PluginLayerChromium::setUVRect):
        (WebCore::PluginLayerChromium::pushPropertiesTo):
        * platform/graphics/chromium/PluginLayerChromium.h:
        (WebCore::PluginLayerChromium::uvRect):
        * platform/graphics/chromium/ShaderChromium.cpp:
        (WebCore::VertexShaderPosTexStretch::VertexShaderPosTexStretch):
        (WebCore::VertexShaderPosTexStretch::init):
        (WebCore::VertexShaderPosTexStretch::getShaderString):
        * platform/graphics/chromium/ShaderChromium.h:
        (WebCore::VertexShaderPosTexStretch::matrixLocation):
        (WebCore::VertexShaderPosTexStretch::offsetLocation):
        (WebCore::VertexShaderPosTexStretch::scaleLocation):
        * platform/graphics/chromium/cc/CCPluginLayerImpl.cpp:
        (WebCore::CCPluginLayerImpl::CCPluginLayerImpl):
        (WebCore::CCPluginLayerImpl::draw):
        * platform/graphics/chromium/cc/CCPluginLayerImpl.h:
        (WebCore::CCPluginLayerImpl::setUVRect):

2011-11-11  Stephen Chenney  <schenney@chromium.org>

        Null deref when no use element exists for SVG element instance
        https://bugs.webkit.org/show_bug.cgi?id=59136

        Second attempt, with a fix to handle JS garbage collection.

        Reviewed by Nikolas Zimmermann.

        Test: svg/custom/element-instance-held-by-js-crash.svg

        * svg/SVGElementInstance.cpp:
        (WebCore::SVGElementInstance::~SVGElementInstance): Added call to detach() to clear
          anything not yet cleared.
        (WebCore::SVGElementInstance::detach): New method to replace old clear methods. This one
          clears all the pointers it can, and removes the instance from the corresponding elements
          instance list.
        * svg/SVGElementInstance.h: Removed clear methods and replaced with detach.
        * svg/SVGUseElement.cpp: 
        (WebCore::SVGUseElement::detachInstance): Modified calls to clean up an SVGElementInstance.

2011-11-11  Florin Malita  <fmalita@google.com>

        clipPath does not work on foreignObject
        https://bugs.webkit.org/show_bug.cgi?id=68251

        Reviewed by Dirk Schulze.

        Add ForeignObject clipping, filtering and masking support using the SVGRenderSupport helpers
        (prepareToRenderSVGContent, finishRenderSVGContent) on RenderSVGForeignObject's paint path.
        This also allows us to remove explicit transparency handling, since the helpers already cover it.

        Tests: svg/foreignObject/clip.html
               svg/foreignObject/filter.html
               svg/foreignObject/mask.html

        * rendering/svg/RenderSVGForeignObject.cpp:
        (WebCore::RenderSVGForeignObject::paint):
        * rendering/svg/SVGResources.cpp:
        (WebCore::clipperFilterMaskerTags):

2011-11-11  Adam Klein  <adamk@chromium.org>

        Remove no-op StorageNamespace::unlock method
        https://bugs.webkit.org/show_bug.cgi?id=72181

        Reviewed by Darin Adler.

        The method was meant to support the localStorage mutex,
        but the approach of using a mutex for localStorage has never been
        implemented (and almost certainly won't be). Even if it were implemented,
        it's not being called at the right time, due to bugs in the V8 bindings'
        use of V8Proxy (see http://webkit.org/b/72063 for details).

        If, in the future, some replacement for a mutex is used to synchronize
        localStorage access, it can easily be re-added to the (hopefully
        fixed-by-then) replacement for V8Proxy::didLeaveScriptContext.

        * bindings/v8/V8Proxy.cpp:
        (WebCore::V8Proxy::didLeaveScriptContext): Stop calling unlock().
        * page/Navigator.cpp:
        (WebCore::Navigator::getStorageUpdates): Remove implementation (a call to unlock), but leave code as it's exposed to the platform.
        * page/Navigator.idl: Added a FIXME to remove getStorageUpdates from the platform.
        * storage/StorageNamespace.h:
        * storage/StorageNamespaceImpl.cpp:
        * storage/StorageNamespaceImpl.h:

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

        [Qt][WK2] Make sure Scrollbars are in their own layer.
        https://bugs.webkit.org/show_bug.cgi?id=72064

        Reviewed by Kenneth Rohde Christiansen.

        Make sure we render our scrollbars in a separate layer.

        No new tests : existing ones should cover.

        * platform/qt/ScrollbarThemeQt.h:
        (WebCore::ScrollbarThemeQt::usesOverlayScrollbars):

2011-11-11  Joel Webber  <jgw@google.com>

        Repaint broken when children of filtered SVG elements are updated
        https://bugs.webkit.org/show_bug.cgi?id=71733

        Reviewed by Nikolas Zimmermann.

        Test: svg/repaint/filter-child-repaint.svg

        * rendering/svg/RenderSVGContainer.cpp:
        (WebCore::RenderSVGContainer::layout):
        * rendering/svg/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::layout):
        * rendering/svg/SVGRenderSupport.cpp:
        (WebCore::SVGRenderSupport::setNeedsLayoutForFilteredContainer):

2011-11-11  Timothy Hatcher  <timothy@apple.com>

        Don't remove InspectorBackendStub.js in Release builds after it has been
        combined into inspector.js. Also remove any *.qrc file on Mac.

        https://webkit.org/b/72186

        Reviewed by Joseph Pecoraro.

        * WebCore.xcodeproj/project.pbxproj:

2011-11-11  Jeff Timanus  <twiz@chromium.org>

        [chromium] Patch that implementing the changes required to allow WebGL
        to share its backing store directly with the compositor.
        WebGL rendering contexts create and render to FBOs managed by a
        DrawingBuffer instance. All PlatformLayer lifetime management is
        performed by the DrawingBuffer.
        Changes are only relevant to Chromium ports. Functionality is
        unchanged for other ports.
        https://bugs.webkit.org/show_bug.cgi?id=53201

        Reviewed by Stephen White.

        * html/canvas/WebGLRenderingContext.cpp: Construct a DrawingBuffer
        during initialization, and forward all framebuffer management calls to
        it.
        (WebCore::WebGLRenderingContext::create):
        (WebCore::WebGLRenderingContext::WebGLRenderingContext):
        (WebCore::WebGLRenderingContext::initializeNewContext):
        (WebCore::WebGLRenderingContext::markContextChanged):
        (WebCore::WebGLRenderingContext::clearIfComposited):
        (WebCore::WebGLRenderingContext::paintRenderingResultsToCanvas):
        (WebCore::WebGLRenderingContext::paintRenderingResultsToImageData):
        (WebCore::WebGLRenderingContext::reshape):
        (WebCore::WebGLRenderingContext::drawingBufferWidth):
        (WebCore::WebGLRenderingContext::drawingBufferHeight):
        (WebCore::WebGLRenderingContext::bindFramebuffer):
        (WebCore::WebGLRenderingContext::copyTexImage2D):
        (WebCore::WebGLRenderingContext::copyTexSubImage2D):
        (WebCore::WebGLRenderingContext::deleteFramebuffer):
        (WebCore::WebGLRenderingContext::disable):
        (WebCore::WebGLRenderingContext::enable):
        (WebCore::WebGLRenderingContext::readPixels):
        (WebCore::WebGLRenderingContext::platformLayer):
        (WebCore::WebGLRenderingContext::getBoundFramebufferWidth):
        (WebCore::WebGLRenderingContext::getBoundFramebufferHeight):
        (WebCore::WebGLRenderingContext::maybeRestoreContext):
        * html/canvas/WebGLRenderingContext.h:
        * platform/graphics/GraphicsContext3D.cpp:
        * platform/graphics/GraphicsContext3D.h:  WebGLLayerChromium instances
        are no longer tracked by GraphicsContext3D. Callers can now pass a
        DrawingBuffer instance to provide access to the WebGLLayerChromium data.
        * platform/graphics/chromium/DrawingBufferChromium.cpp:
        (WebCore::generateColorTexture):
        (WebCore::DrawingBuffer::DrawingBuffer):
        (WebCore::DrawingBuffer::initialize):
        (WebCore::DrawingBuffer::publishToPlatformLayer):
        (WebCore::DrawingBuffer::platformLayer):
        (WebCore::DrawingBuffer::platformColorBuffer):
        (WebCore::DrawingBuffer::framebuffer):
        (WebCore::DrawingBuffer::markContextChanged):
        (WebCore::DrawingBuffer::paintCompositedResultsToCanvas):
        * platform/graphics/chromium/WebGLLayerChromium.cpp:
        (WebCore::WebGLLayerChromium::WebGLLayerChromium):
        (WebCore::WebGLLayerChromium::~WebGLLayerChromium):
        (WebCore::WebGLLayerChromium::drawsContent):
        (WebCore::WebGLLayerChromium::updateCompositorResources):
        (WebCore::WebGLLayerChromium::paintRenderedResultsToCanvas):
        (WebCore::WebGLLayerChromium::contentChanged):
        (WebCore::WebGLLayerChromium::setDrawingBuffer):
        (WebCore::WebGLLayerChromium::context):
        * platform/graphics/chromium/WebGLLayerChromium.h: WebGLLayerChromium instances
        have a raw reference to their owning DrawingBuffer.  This reference is set to NULL on
        destruction of the DrawingBuffer.  This follows the old code, which had the WebGLLayerChromium
        refer rawly to a GraphicsContext3D instance, which was also revoked during tear-down of the
        GraphicsContext3D.
        (WebCore::WebGLLayerChromium::drawingBuffer):
        * platform/graphics/efl/GraphicsContext3DEfl.cpp:
        (WebCore::GraphicsContext3D::paintRenderingResultsToCanvas):
        (WebCore::GraphicsContext3D::paintRenderingResultsToImageData):
        * platform/graphics/gpu/DrawingBuffer.cpp: The DrawingBuffer is now the
        central point between the GraphicsContext3D, WebGLRenderingContext, and
        WebGLLayerChromium classes.  GraphicsContext3D, and WebGLLayerChromium only
        depend on the DrawingBuffer interface.
        (WebCore::DrawingBuffer::create):
        (WebCore::DrawingBuffer::clear):
        (WebCore::DrawingBuffer::clearFramebuffer):
        (WebCore::DrawingBuffer::reset):
        (WebCore::DrawingBuffer::commit):
        (WebCore::DrawingBuffer::multisample):
        (WebCore::DrawingBuffer::paintRenderingResultsToImageData):
        (WebCore::DrawingBuffer::discardResources):
        * platform/graphics/gpu/DrawingBuffer.h:
        (WebCore::DrawingBuffer::setScissorEnabled):
        * platform/graphics/gpu/mac/DrawingBufferMac.mm:
        (WebCore::DrawingBuffer::DrawingBuffer):
        * platform/graphics/gpu/qt/DrawingBufferQt.cpp:
        (WebCore::DrawingBuffer::DrawingBuffer):
        * platform/graphics/opengl/GraphicsContext3DOpenGL.cpp:
        (WebCore::GraphicsContext3D::paintRenderingResultsToCanvas):
        (WebCore::GraphicsContext3D::paintRenderingResultsToImageData):
        * platform/graphics/qt/GraphicsContext3DQt.cpp:
        (WebCore::GraphicsContext3D::paintRenderingResultsToCanvas):
        (WebCore::GraphicsContext3D::paintRenderingResultsToImageData):

2011-11-11  Darin Adler  <darin@apple.com>

        Remove all releaseRef implementations except for RetainPtr
        https://bugs.webkit.org/show_bug.cgi?id=71423

        Reviewed by Julien Chaffraix.

        * platform/win/COMPtr.h: Removed releaseRef.

2011-11-11  Darin Adler  <darin@apple.com>

        * WebCore.xcodeproj/project.pbxproj: Let a newer Xcode update this file.
        If an older Xcode downgrades this file and we have a risk of some kind of
        oscillating commit situation, please contact me so I know not to do this again.

2011-11-11  Ojan Vafai  <ojan@chromium.org>

        Unreviewed, rolling out r99953.
        Caused 4 tests to hit an assert.
        https://bugs.webkit.org/show_bug.cgi?id=72163

        * inspector/InspectorInstrumentation.h:
        (WebCore::InspectorInstrumentation::didStartWorkerContext):
        * inspector/InspectorWorkerAgent.cpp:
        (WebCore::InspectorWorkerAgent::InspectorWorkerAgent):
        (WebCore::InspectorWorkerAgent::~InspectorWorkerAgent):
        (WebCore::InspectorWorkerAgent::setFrontend):
        (WebCore::InspectorWorkerAgent::restore):
        (WebCore::InspectorWorkerAgent::clearFrontend):
        (WebCore::InspectorWorkerAgent::setWorkerInspectionEnabled):
        (WebCore::InspectorWorkerAgent::didStartWorkerContext):
        (WebCore::InspectorWorkerAgent::workerContextTerminated):
        * inspector/InspectorWorkerAgent.h:

2011-11-11  Vincent Scheib  <scheib@chromium.org>

        Unreviewed, rolling out r100024.
        http://trac.webkit.org/changeset/100024
        https://bugs.webkit.org/show_bug.cgi?id=72158

        Broke chromium build

        * dom/MouseEvent.cpp:
        (WebCore::MouseEvent::initMouseEvent):
        (WebCore::MouseEventDispatchMediator::dispatchEvent):
        * dom/MouseEvent.h:
        * dom/MouseEvent.idl:
        * dom/MouseRelatedEvent.h:

2011-11-11  Vincent Scheib  <scheib@chromium.org>

        Mouse Lock: MouseEvent IDL
        https://bugs.webkit.org/show_bug.cgi?id=72158

        Reviewed by Dimitri Glazkov.

        Tests for movementX/Y pending mock mouse lock test infrastructure.

        * dom/MouseEvent.cpp:
        (WebCore::MouseEvent::initMouseEvent):
        (WebCore::MouseEventDispatchMediator::dispatchEvent):
        * dom/MouseEvent.h:
        * dom/MouseEvent.idl:
        * dom/MouseRelatedEvent.h:
        (WebCore::MouseRelatedEvent::movementX):
        (WebCore::MouseRelatedEvent::movementY):

2011-11-11  Beth Dakin  <bdakin@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=72167
        REGRESSION: Scroll position not restored on back after scroll 
        -and corresponding-
        <rdar://problem/10410684>

        Reviewed by Simon Fraser.

        We can't just return early if we are not on an active page. 
        notifyPositionChanged() is called when a page is going into the page cache (and 
        therefore when not on an active page). We should not notify AppKit that the page 
        has scrolled in that case, but we still need to call 
        ScrollAnimator::notifyPositionChanged();. So this patch removes the early return, 
        and replaces it with a conditional around the relevant code.
        * platform/mac/ScrollAnimatorMac.mm:
        (WebCore::ScrollAnimatorMac::notifyPositionChanged):

2011-11-11  Julien Chaffraix  <jchaffraix@codeaurora.org>, Zaheer Ahmad  <zahimad@codeaurora.org>, Joone Hur  <joone.hur@collabora.co.uk>, Tomasz Morawski  <t.morawski@samsung.com>

        Added TileCairo and TiledBackingStoreBackendCairo files
        https://bugs.webkit.org/show_bug.cgi?id=71350

        Reviewed by Martin Robinson.

        Added TileCairo and TiledBackingStoreBackend files needed by Tiled Backing Store implementation that uses cairo
        library eg. EFL and Gtk WebKit port.

        This patch contains some parts of rebased and updated code from 45423 bug. Originals authors of the code are:
        - Julien Chaffraix  <jchaffraix@codeaurora.org>
        - Zaheer Ahmad  <zahmad@codeaurora.org>
        - Joone Hur  <joone.hur@collabora.co.uk>

        * platform/graphics/cairo/RefPtrCairo.cpp: Added support of RefPtr for cairo_region object.
        (WTF::refIfNotNull): New refIfNotNull function for cairo_region object.
        (WTF::derefIfNotNull): New derefIfNotNull function for cairo_region object.
        * platform/graphics/cairo/RefPtrCairo.h: Added support of RefPtr for cairo_region object.
        * platform/graphics/cairo/TileCairo.cpp: Added a new file. Implementation of TileCairo class.
        (WebCore::TileCairo::TileCairo):
        (WebCore::TileCairo::~TileCairo):
        (WebCore::TileCairo::isDirty):
        (WebCore::TileCairo::isReadyToPaint):
        (WebCore::TileCairo::invalidate):
        (WebCore::TileCairo::updateBackBuffer):
        (WebCore::TileCairo::swapBackBufferToFront):
        (WebCore::TileCairo::paint):
        (WebCore::TileCairo::resize):
        * platform/graphics/cairo/TileCairo.h: Added a new file. Implementation of TileCairo class.
        (WebCore::TileCairo::create):
        (WebCore::TileCairo::coordinate):
        (WebCore::TileCairo::rect):
        * platform/graphics/cairo/TiledBackingStoreBackendCairo.cpp: Added a new file. Implementation of
        TiledBackingStoreBackend methods.
        (WebCore::TiledBackingStoreBackend::createTile):
        (WebCore::checkeredSurface): Helper function that creates checkered surface (see below function)
        (WebCore::TiledBackingStoreBackend::paintCheckerPattern): Function is used to draw a place holder when tile no
        exist or it is not ready to paint yet. The checkered surface is used here.

2011-11-11  Julien Chaffraix  <jchaffraix@webkit.org>

        Remove unneeded frame check in FrameView::detachCustomScrollbars
        https://bugs.webkit.org/show_bug.cgi?id=71980

        Reviewed by Anders Carlsson.

        Change covered by the existing tests in scrollbars/.

        * page/FrameView.cpp:
        (WebCore::FrameView::detachCustomScrollbars):
        Remove the leftover check that was forgotten by the different refactoring.

2011-11-11  Vineet Chaudhary  <vineet.chaudhary@motorola.com>

        Access key should work on all elements.
        https://bugs.webkit.org/show_bug.cgi?id=71854

        Reviewed by Adam Barth.

        As per specification http://dev.w3.org/html5/spec/Overview.html#elements-in-the-dom
        says All HTML elements can have the accesskey content attribute set. Adding "accessKey"
        attribute idl file as [Reflect].

        Test: fast/forms/access-key-for-all-elements.html

        * html/HTMLAnchorElement.idl: Removed redundant IDL attribute entries.
        * html/HTMLAreaElement.idl: Ditto. 
        * html/HTMLButtonElement.idl: Ditto.
        * html/HTMLElement.idl: Added accessKey IDL attribute.
        * html/HTMLInputElement.idl: Ditto.
        * html/HTMLLabelElement.idl: Ditto.
        * html/HTMLLegendElement.idl: Ditto.
        * html/HTMLTextAreaElement.idl: Ditto.

2011-11-11  Mark Hahnenberg  <mhahnenberg@apple.com>

        Add jsCast to replace static_cast
        https://bugs.webkit.org/show_bug.cgi?id=72071

        Reviewed by Geoffrey Garen.

        No new tests. 

        Added new jsCast and changed all of the static_cast sites in functions that 
        are in the MethodTable to use jsCast instead.

        * 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/JSCanvasRenderingContext2DCustom.cpp:
        (WebCore::toHTMLCanvasStyle):
        * bindings/js/JSCanvasRenderingContextCustom.cpp:
        (WebCore::JSCanvasRenderingContext::visitChildren):
        * bindings/js/JSDOMGlobalObject.cpp:
        (WebCore::JSDOMGlobalObject::visitChildren):
        * bindings/js/JSDOMStringMapCustom.cpp:
        (WebCore::JSDOMStringMap::getOwnPropertyNames):
        (WebCore::JSDOMStringMap::deleteProperty):
        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::JSDOMWindowBase::toThisObject):
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::visitChildren):
        (WebCore::JSDOMWindow::getOwnPropertySlot):
        (WebCore::JSDOMWindow::getOwnPropertyDescriptor):
        (WebCore::JSDOMWindow::put):
        (WebCore::JSDOMWindow::deleteProperty):
        (WebCore::JSDOMWindow::getPropertyNames):
        (WebCore::JSDOMWindow::getOwnPropertyNames):
        (WebCore::JSDOMWindow::defineGetter):
        (WebCore::JSDOMWindow::defineSetter):
        (WebCore::JSDOMWindow::defineOwnProperty):
        * bindings/js/JSDOMWindowShell.cpp:
        (WebCore::JSDOMWindowShell::className):
        (WebCore::JSDOMWindowShell::getOwnPropertySlot):
        (WebCore::JSDOMWindowShell::getOwnPropertyDescriptor):
        (WebCore::JSDOMWindowShell::put):
        (WebCore::JSDOMWindowShell::putWithAttributes):
        (WebCore::JSDOMWindowShell::defineOwnProperty):
        (WebCore::JSDOMWindowShell::deleteProperty):
        (WebCore::JSDOMWindowShell::getPropertyNames):
        (WebCore::JSDOMWindowShell::getOwnPropertyNames):
        (WebCore::JSDOMWindowShell::defineGetter):
        (WebCore::JSDOMWindowShell::defineSetter):
        * bindings/js/JSHTMLAppletElementCustom.cpp:
        (WebCore::JSHTMLAppletElement::getCallData):
        * bindings/js/JSHTMLEmbedElementCustom.cpp:
        (WebCore::JSHTMLEmbedElement::getCallData):
        * bindings/js/JSHTMLObjectElementCustom.cpp:
        (WebCore::JSHTMLObjectElement::getCallData):
        * bindings/js/JSHistoryCustom.cpp:
        (WebCore::JSHistory::deleteProperty):
        (WebCore::JSHistory::getOwnPropertyNames):
        * bindings/js/JSJavaScriptAudioNodeCustom.cpp:
        (WebCore::JSJavaScriptAudioNode::visitChildren):
        * bindings/js/JSLocationCustom.cpp:
        (WebCore::JSLocation::deleteProperty):
        (WebCore::JSLocation::getOwnPropertyNames):
        * 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/JSStorageCustom.cpp:
        (WebCore::JSStorage::deleteProperty):
        (WebCore::JSStorage::getOwnPropertyNames):
        * 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:
        (GenerateHeader):
        (GenerateImplementation):
        * bindings/scripts/test/JS/JSTestInterface.cpp:
        (WebCore::JSTestInterface::getOwnPropertySlot):
        (WebCore::JSTestInterface::getOwnPropertyDescriptor):
        * bindings/scripts/test/JS/JSTestMediaQueryListListener.cpp:
        (WebCore::JSTestMediaQueryListListenerPrototype::getOwnPropertySlot):
        (WebCore::JSTestMediaQueryListListenerPrototype::getOwnPropertyDescriptor):
        (WebCore::JSTestMediaQueryListListener::getOwnPropertySlot):
        (WebCore::JSTestMediaQueryListListener::getOwnPropertyDescriptor):
        * bindings/scripts/test/JS/JSTestNamedConstructor.cpp:
        (WebCore::JSTestNamedConstructor::getOwnPropertySlot):
        (WebCore::JSTestNamedConstructor::getOwnPropertyDescriptor):
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::JSTestObjPrototype::getOwnPropertySlot):
        (WebCore::JSTestObjPrototype::getOwnPropertyDescriptor):
        (WebCore::JSTestObj::getOwnPropertySlot):
        (WebCore::JSTestObj::getOwnPropertyDescriptor):
        (WebCore::JSTestObj::put):
        (WebCore::JSTestObj::visitChildren):
        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp:
        (WebCore::JSTestSerializedScriptValueInterface::getOwnPropertySlot):
        (WebCore::JSTestSerializedScriptValueInterface::getOwnPropertyDescriptor):
        * bridge/objc/objc_runtime.mm:
        (JSC::Bindings::ObjcFallbackObjectImp::getCallData):
        (JSC::Bindings::ObjcFallbackObjectImp::defaultValue):
        * bridge/qt/qt_instance.cpp:
        (JSC::Bindings::QtRuntimeObject::visitChildren):
        * bridge/qt/qt_runtime.cpp:
        (JSC::Bindings::QtRuntimeMetaMethod::visitChildren):
        (JSC::Bindings::QtRuntimeMetaMethod::getOwnPropertySlot):
        (JSC::Bindings::QtRuntimeMetaMethod::getOwnPropertyDescriptor):
        (JSC::Bindings::QtRuntimeConnectionMethod::getOwnPropertySlot):
        (JSC::Bindings::QtRuntimeConnectionMethod::getOwnPropertyDescriptor):
        * bridge/runtime_array.cpp:
        (JSC::RuntimeArray::getOwnPropertyNames):
        (JSC::RuntimeArray::getOwnPropertySlot):
        (JSC::RuntimeArray::getOwnPropertyDescriptor):
        (JSC::RuntimeArray::getOwnPropertySlotByIndex):
        (JSC::RuntimeArray::put):
        (JSC::RuntimeArray::putByIndex):
        * bridge/runtime_method.cpp:
        (JSC::RuntimeMethod::getOwnPropertySlot):
        (JSC::RuntimeMethod::getOwnPropertyDescriptor):
        * bridge/runtime_object.cpp:
        (JSC::Bindings::RuntimeObject::getOwnPropertySlot):
        (JSC::Bindings::RuntimeObject::getOwnPropertyDescriptor):
        (JSC::Bindings::RuntimeObject::put):
        (JSC::Bindings::RuntimeObject::defaultValue):
        (JSC::Bindings::RuntimeObject::getCallData):
        (JSC::Bindings::RuntimeObject::getConstructData):
        (JSC::Bindings::RuntimeObject::getOwnPropertyNames):

2011-11-11  Vincent Scheib  <scheib@chromium.org>

        Unreviewed, rolling out r99994.
        http://trac.webkit.org/changeset/99994
        https://bugs.webkit.org/show_bug.cgi?id=72150

        Broke chromium windows build

        * WebCore.gypi:
        * bindings/generic/RuntimeEnabledFeatures.h:
        (WebCore::RuntimeEnabledFeatures::webkitLockMouseEnabled):
        (WebCore::RuntimeEnabledFeatures::webkitUnlockMouseEnabled):
        (WebCore::RuntimeEnabledFeatures::webkitMouseLockedEnabled):
        * page/MouseLockable.cpp: Removed.
        * page/MouseLockable.h: Removed.
        * page/MouseLockable.idl: Removed.
        * page/Navigator.cpp:
        * page/Navigator.h:
        * page/Navigator.idl:

2011-11-11  Adam Klein  <adamk@chromium.org>

        [v8] Remove unused V8Proxy::executingScript method
        https://bugs.webkit.org/show_bug.cgi?id=72160

        Reviewed by Nate Chapin.

        * bindings/v8/V8Proxy.cpp:
        * bindings/v8/V8Proxy.h:

2011-11-11  Brady Eidson  <beidson@apple.com>

        Rubberstamped by Andy Estes

        100,000!
        Congratulations WebKit, and here's to hundreds of thousands more!
        
        * ChangeLog: Point out revision 100,000.

2011-11-11  David Kilzer  <ddkilzer@apple.com>

        <http://webkit.org/b/71921> Remove use of strcpy in KURL

        Reviewed by Antti Koivisto.

        * platform/KURL.cpp:
        (WebCore::KURL::init): Replace strcpy() with strncpy().

2011-11-11  Mark Hahnenberg  <mhahnenberg@apple.com>

        De-virtualize supportsProfiling, supportsRichSourceInfo, shouldInterruptScript in JSGlobalObject
        https://bugs.webkit.org/show_bug.cgi?id=72035

        Reviewed by Geoffrey Garen.

        No new tests.

        * bindings/js/JSDOMGlobalObject.cpp: Changed constructor to support passing new GlobalObjectMethodTable pointer to parent class.
        (WebCore::JSDOMGlobalObject::JSDOMGlobalObject):
        * bindings/js/JSDOMGlobalObject.h:
        * bindings/js/JSDOMWindowBase.cpp: Added static const GlobalObjectMethodTable and filled it in with the proper function pointers.
        (WebCore::JSDOMWindowBase::JSDOMWindowBase):
        (WebCore::JSDOMWindowBase::supportsProfiling): Changed to static to put in the method table.
        (WebCore::JSDOMWindowBase::supportsRichSourceInfo): Ditto.
        (WebCore::JSDOMWindowBase::shouldInterruptScript): Ditto.
        * bindings/js/JSDOMWindowBase.h:


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

        Unreviewed, rolling out r99869.
        http://trac.webkit.org/changeset/99869
        https://bugs.webkit.org/show_bug.cgi?id=72157

        "Caused a ~400% perf regression on the Chromium intl1 page
        cyclers" (Requested by ojan on #webkit).

        * dom/Document.cpp:
        (WebCore::Document::Document):
        (WebCore::Document::images):
        (WebCore::Document::applets):
        (WebCore::Document::embeds):
        (WebCore::Document::plugins):
        (WebCore::Document::objects):
        (WebCore::Document::scripts):
        (WebCore::Document::links):
        (WebCore::Document::forms):
        (WebCore::Document::anchors):
        * dom/Document.h:
        * html/CollectionType.h:

2011-11-11  Vincent Scheib  <scheib@chromium.org>

        Mouse Lock Navigator IDL
        https://bugs.webkit.org/show_bug.cgi?id=72150

        Reviewed by Dimitri Glazkov.

        Tests require mocking (similar to geolocation) that will be built after this.

        * WebCore.gypi:
        * bindings/generic/RuntimeEnabledFeatures.h:
        (WebCore::RuntimeEnabledFeatures::webkitPointerEnabled):
        * page/MouseLockable.cpp: Added.
        (WebCore::MouseLockable::MouseLockable):
        (WebCore::MouseLockable::~MouseLockable):
        (WebCore::MouseLockable::webkitLock):
        (WebCore::MouseLockable::webkitUnlock):
        (WebCore::MouseLockable::webkitIsLocked):
        * page/MouseLockable.h: Added.
        (WebCore::MouseLockable::create):
        * page/MouseLockable.idl: Added.
        * page/Navigator.cpp:
        (WebCore::Navigator::webkitPointer):
        * page/Navigator.h:
        * page/Navigator.idl:

2011-11-11  Mark Hahnenberg  <mhahnenberg@apple.com>

        De-virtualize JSGlobalObject::allowsAccessFrom
        https://bugs.webkit.org/show_bug.cgi?id=71969

        Reviewed by Darin Adler.

        No new tests.

        Since allowsAccessFrom is only used by WebScriptObject, we know that we'll always have a 
        JSDOMWindowBase, so we can simply have allowsAccessFrom to live in JSDOMWindowBase rather 
        than JSGlobalObject.

        * bindings/js/JSDOMWindowBase.h: De-virtualized allowsAccessFrom.
        * bindings/objc/WebScriptObject.mm:
        (-[WebScriptObject _isSafeScript]): Added a cast from a JSGlobalObject to a JSDOMWindowBase in 
        order to call the allowsAccessFrom method.

2011-11-11  Rafael Weinstein  <rafaelw@chromium.org>

        [MutationObservers] Support attributeFilter for attribute mutations
        https://bugs.webkit.org/show_bug.cgi?id=70860

        Reviewed by Dimitri Glazkov.

        This patch adds an attributeFilter to the MutationObserverRegistration and
        adds support for only observing attributes whose name are in the provided
        filter set (array of strings).

        Test: fast/mutation/observe-attributes.html.

        * bindings/js/JSWebKitMutationObserverCustom.cpp:
        (WebCore::JSWebKitMutationObserver::observe):
        * bindings/v8/OptionsObject.cpp:
        (WebCore::OptionsObject::get):
        * bindings/v8/OptionsObject.h:
        * bindings/v8/custom/V8WebKitMutationObserverCustom.cpp:
        (WebCore::V8WebKitMutationObserver::observeCallback):
        * dom/Element.cpp:
        (WebCore::enqueueAttributesMutationRecord):
        * dom/MutationObserverRegistration.cpp:
        (WebCore::MutationObserverRegistration::resetObservation):
        (WebCore::MutationObserverRegistration::shouldReceiveMutationFrom):
        (WebCore::MutationObserverRegistration::caseInsensitiveAttributeFilter):
        * dom/MutationObserverRegistration.h:
        * dom/Node.cpp:
        (WebCore::Node::collectMatchingObserversForMutation):
        (WebCore::Node::getRegisteredMutationObserversOfType):
        * dom/Node.h:
        * dom/WebKitMutationObserver.cpp:
        (WebCore::WebKitMutationObserver::observe):
        * dom/WebKitMutationObserver.h:

2011-11-11  Vsevolod Vlasov  <vsevik@chromium.org>

        Application cache status indicator gets stuck at DOWNLOADING after a failure
        https://bugs.webkit.org/show_bug.cgi?id=60793

        Reviewed by Pavel Feldman.

        Test: http/tests/inspector/resource-tree/appcache-manifest-with-non-existing-file.html

        * inspector/InspectorApplicationCacheAgent.cpp:
        (WebCore::InspectorApplicationCacheAgent::InspectorApplicationCacheAgent):
        (WebCore::InspectorApplicationCacheAgent::restore):
        (WebCore::InspectorApplicationCacheAgent::enable):
        * inspector/InspectorApplicationCacheAgent.h:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        (WebCore::InspectorController::restoreInspectorStateFromCookie):
        * inspector/front-end/ApplicationCacheItemsView.js:
        (WebInspector.ApplicationCacheItemsView):
        (WebInspector.ApplicationCacheItemsView.prototype.updateStatus):

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

        Implement TextTrackList and the textTracks attribute of HTMLMediaElement
        https://bugs.webkit.org/show_bug.cgi?id=71123

        Reviewed by Sam Weinig.

        Test: media/track/track-add-track.html
              media/track/tracklist-is-reachable.html

        * CMakeLists.txt: Add new files for TextTrackList.
        * DerivedSources.cpp: Ditto.
        * DerivedSources.make: Ditto.
        * DerivedSources.pri: Ditto.
        * GNUmakefile.list.am: Ditto.
        * Target.pri: Ditto.
        * WebCore.gypi: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Ditto.
        * bindings/js/JSBindingsAllInOne.cpp: Ditto.

        * bindings/js/JSTextTrackListCustom.cpp: Added.
        (WebCore::JSTextTrackListOwner::isReachableFromOpaqueRoots):

        * dom/EventTargetFactory.in: Add TextTrackList, conditional on VIDEO_TRACK.

        * html/HTMLAudioElement.cpp:
        (WebCore::HTMLAudioElement::createForJSConstructor): Update for scheduleLoad change.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::~HTMLMediaElement): Update for m_textTracks change from
            generic Vector to TextTrackList.
        (WebCore::HTMLMediaElement::attributeChanged): Ditto.
        (WebCore::HTMLMediaElement::insertedIntoDocument): Update for scheduleLoad change.
        (WebCore::HTMLMediaElement::scheduleLoad): Add a parameter so caller can specify if
            the main resource or a text track should be loaded.
        (WebCore::HTMLMediaElement::loadTimerFired): Update to allow text track loading.
        (WebCore::HTMLMediaElement::loadInternal): Don't call loadTextTracks.
        (WebCore::HTMLMediaElement::isSafeToLoadURL): Log when CSP denies load.
        (WebCore::HTMLMediaElement::playInternal): Update for scheduleLoad change.
        (WebCore::HTMLMediaElement::pauseInternal): Ditto.
        (WebCore::HTMLMediaElement::addTrack): Update for m_textTracks change from
            generic Vector to TextTrackList.
        (WebCore::HTMLMediaElement::addTextTrack): New, add track to m_textTracks and configure.
        (WebCore::HTMLMediaElement::configureTextTracks): New, add comments about what this should
            do eventually.
        (WebCore::HTMLMediaElement::textTracks): New, return TextTrackList.
        (WebCore::HTMLMediaElement::trackWasAdded): Bail if runtime feature is not enabled, schedule
            asynchronous text track load.
        (WebCore::HTMLMediaElement::trackWillBeRemoved): Minor cleanup.
        (WebCore::HTMLMediaElement::selectNextSourceChild): Ditto.
        (WebCore::HTMLMediaElement::sourceWasAdded): Update for scheduleLoad change.
        * html/HTMLMediaElement.h:
        * html/HTMLMediaElement.idl: Add textTracks attribute.

        * html/HTMLTrackElement.cpp: 
        (WebCore::HTMLTrackElement::insertedIntoTree): Use new mediaElement() method.
        (WebCore::HTMLTrackElement::willRemove): Ditto.
        (WebCore::HTMLTrackElement::attributeChanged): When 'src' is changed, call scheduleLoad
            instead of HTMLMediaElement
        (WebCore::HTMLTrackElement::isDefault): hasAttribute -> fastHasAttribute.
        (WebCore::HTMLTrackElement::track): Allocate track if necessary.
        (WebCore::HTMLTrackElement::scheduleLoad): New, tell the track to schedule a load.
        (WebCore::HTMLTrackElement::canLoadUrl): New, check security policy to see if it is OK
            to load a text track. If so, dispatch 'beforeload' event to give it a chance to disallow
            load.
        (WebCore::HTMLTrackElement::loadingCompleted): Renamed from textTrackLoadingCompleted.
        (WebCore::HTMLTrackElement::textTrackReadyStateChanged): New, TextTrackLoadingClient interface
            used to inform parent of TextTrack state changes.
        (WebCore::HTMLTrackElement::textTrackModeChanged): Ditto.
        (WebCore::HTMLTrackElement::textTrackAddCues): Ditto.
        (WebCore::HTMLTrackElement::textTrackRemoveCues): Ditto.
        (WebCore::HTMLTrackElement::textTrackAddCue): Ditto.
        (WebCore::HTMLTrackElement::textTrackRemoveCue): Ditto.
        (WebCore::HTMLTrackElement::mediaElement): New, return parent element.
        * html/HTMLTrackElement.h:

        * html/LoadableTextTrack.cpp:
        (WebCore::LoadableTextTrack::LoadableTextTrack): Initialize new instance variables.
        (WebCore::LoadableTextTrack::scheduleLoad): New, prime a timer to kick off loading.
        (WebCore::LoadableTextTrack::loadTimerFired): Cancel current load, if any, check to see if
            new url is allowed to load, and start new load.
        (WebCore::LoadableTextTrack::cueLoadingCompleted): 
        * html/LoadableTextTrack.h:
        (WebCore::LoadableTextTrackClient::~LoadableTextTrackClient): TextTrackLoadingClient -> LoadableTextTrackClient
        (WebCore::LoadableTextTrackClient::canLoadUrl): 
        (WebCore::LoadableTextTrackClient::loadingCompleted):
        (WebCore::LoadableTextTrack::create):

        * html/TextTrack.cpp:
        (WebCore::TextTrack::TextTrack): setClient(0) -> clearClient().
        * html/TextTrack.h:
        (WebCore::TextTrack::clearClient): Renamed from setClient, because it is only used to clear the client pointer.

        * html/TextTrackCueList.cpp:
        (WebCore::TextTrackCueList::add): Get rid of a compiler warning that breaks the OS X build.

        * html/track/TextTrackList.cpp: Added. Implement the TextTrackList object.
        (TextTrackList::TextTrackList):
        (TextTrackList::~TextTrackList):
        (TextTrackList::length):
        (TextTrackList::item):
        (TextTrackList::append):
        (TextTrackList::remove):
        (TextTrackList::interfaceName):
        (TextTrackList::scheduleAddTrackEvent):
        (TextTrackList::asyncEventTimerFired):
        * html/track/TextTrackList.h: Added.
        (WebCore::TextTrackList::create):
        (WebCore::TextTrackList::scriptExecutionContext):
        (WebCore::TextTrackList::clearOwner):
        (WebCore::TextTrackList::owner):
        (WebCore::TextTrackList::refEventTarget):
        (WebCore::TextTrackList::derefEventTarget):
        (WebCore::TextTrackList::eventTargetData):
        (WebCore::TextTrackList::ensureEventTargetData):
        * html/track/TextTrackList.idl: Added.

        * loader/TextTrackLoader.cpp:
        (WebCore::TextTrackLoader::cancelLoad): New, cancel pending or in progress load and delete loader.
        (WebCore::TextTrackLoader::notifyFinished): Call cancelLoad.
        (WebCore::TextTrackLoader::load): Ditto.
        * loader/TextTrackLoader.h:
        * page/DOMWindow.idl: Add TextTrackList.

2011-11-11  Pavel Feldman  <pfeldman@google.com>

        Web Inspector: reimplement DOM search using no XPath.
        https://bugs.webkit.org/show_bug.cgi?id=72125

        Reviewed by Yury Semikhatsky.

        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::performSearch):
        (WebCore::InspectorDOMAgent::buildObjectForNode):
        * inspector/InspectorDOMAgent.h:

2011-11-11  Gavin Peters  <gavinp@chromium.org>

        Protect Document during error responses
        https://bugs.webkit.org/show_bug.cgi?id=72068

        Add a Document protector to the error response code handler, just
        as exists for other ends of requests.

        Reviewed by Nate Chapin.

        Test: http/tests/misc/xslt-bad-import.html

        * loader/cache/CachedResourceRequest.cpp:
        (WebCore::CachedResourceRequest::didReceiveData):

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

        Unreviewed, rolling out r99979.
        http://trac.webkit.org/changeset/99979
        https://bugs.webkit.org/show_bug.cgi?id=72136

        bad commit message (Requested by gavinp on #webkit).

        * loader/cache/CachedResourceRequest.cpp:
        (WebCore::CachedResourceRequest::didReceiveData):

2011-11-11  Gavin Peters  <gavinp@chromium.org>

        Protect Document during error responses
        https://bugs.webkit.org/show_bug.cgi?id=72068

        Add a Document protector to the error response code handler, just
        as exists for other ends of requests.

        Reviewed by Nate Chapin.

        Test: http/tests/misc/xslt-bad-import.html

        * loader/cache/CachedResourceRequest.cpp:
        (WebCore::CachedResourceRequest::didReceiveData):

2011-11-10  Philippe Normand  <pnormand@igalia.com>

        [GStreamer] GstCaps and GstPad RefPtr implementation
        https://bugs.webkit.org/show_bug.cgi?id=72023

        Reviewed by Martin Robinson.

        Smart pointer implementations for GstCaps and GstPad and them
        in the media player code.

        * platform/graphics/gstreamer/GRefPtrGStreamer.cpp:
        (WTF::GstPad):
        (WTF::GstCaps):
        * platform/graphics/gstreamer/GRefPtrGStreamer.h:
        * platform/graphics/gstreamer/GStreamerGWorld.cpp:
        (WebCore::GStreamerGWorld::enterFullscreen):
        (WebCore::GStreamerGWorld::exitFullscreen):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::naturalSize):
        (WebCore::MediaPlayerPrivateGStreamer::totalBytes):
        (WebCore::MediaPlayerPrivateGStreamer::createGSTPlayBin):
        * platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:
        (webkit_web_src_init):
        (StreamingClient::didReceiveResponse):

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

        Unreviewed, rolling out r99964.
        http://trac.webkit.org/changeset/99964
        https://bugs.webkit.org/show_bug.cgi?id=72124

        Broke too many Qt tests (Requested by tronical_ on #webkit).

        * Target.pri:
        * html/HTMLSelectElement.h:
        (WebCore::HTMLSelectElement::usesMenuList):
        * platform/qt/QtMobileWebStyle.cpp: Added.
        (QtMobileWebStyle::QtMobileWebStyle):
        (drawRectangularControlBackground):
        (QtMobileWebStyle::drawChecker):
        (QtMobileWebStyle::findChecker):
        (QtMobileWebStyle::drawRadio):
        (QtMobileWebStyle::findRadio):
        (QtMobileWebStyle::drawControl):
        (QtMobileWebStyle::drawPrimitive):
        (QtMobileWebStyle::drawMultipleComboButton):
        (QtMobileWebStyle::drawSimpleComboButton):
        (QtMobileWebStyle::getButtonImageSize):
        (QtMobileWebStyle::findComboButton):
        (QtMobileWebStyle::drawComplexControl):
        * platform/qt/QtMobileWebStyle.h: Added.
        * platform/qt/QtStyleOptionWebComboBox.h:
        (WebCore::QtStyleOptionWebComboBox::QtStyleOptionWebComboBox):
        (WebCore::QtStyleOptionWebComboBox::checkMultiple):
        * platform/qt/RenderThemeQStyle.cpp: Removed.
        * platform/qt/RenderThemeQStyle.h: Removed.
        * platform/qt/RenderThemeQt.cpp:
        (WebCore::initStyleOption):
        (WebCore::StylePainter::StylePainter):
        (WebCore::StylePainter::init):
        (WebCore::StylePainter::~StylePainter):
        (WebCore::RenderThemeQt::create):
        (WebCore::RenderTheme::themeForPage):
        (WebCore::RenderThemeQt::RenderThemeQt):
        (WebCore::RenderThemeQt::~RenderThemeQt):
        (WebCore::RenderThemeQt::isControlStyled):
        (WebCore::RenderThemeQt::popupInternalPaddingBottom):
        (WebCore::RenderThemeQt::fallbackStyle):
        (WebCore::RenderThemeQt::qStyle):
        (WebCore::RenderThemeQt::extraDefaultStyleSheet):
        (WebCore::RenderThemeQt::findFrameLineWidth):
        (WebCore::inflateButtonRect):
        (WebCore::RenderThemeQt::adjustRepaintRect):
        (WebCore::RenderThemeQt::minimumMenuListSize):
        (WebCore::RenderThemeQt::computeSizeBasedOnStyle):
        (WebCore::RenderThemeQt::adjustButtonStyle):
        (WebCore::RenderThemeQt::setButtonPadding):
        (WebCore::RenderThemeQt::paintButton):
        (WebCore::RenderThemeQt::adjustTextFieldStyle):
        (WebCore::RenderThemeQt::paintTextField):
        (WebCore::RenderThemeQt::adjustMenuListStyle):
        (WebCore::RenderThemeQt::setPopupPadding):
        (WebCore::RenderThemeQt::paintMenuList):
        (WebCore::RenderThemeQt::adjustMenuListButtonStyle):
        (WebCore::RenderThemeQt::paintMenuListButton):
        (WebCore::RenderThemeQt::animationDurationForProgressBar):
        (WebCore::RenderThemeQt::paintProgressBar):
        (WebCore::RenderThemeQt::paintSliderTrack):
        (WebCore::RenderThemeQt::paintSliderThumb):
        (WebCore::RenderThemeQt::paintSearchFieldCancelButton):
        (WebCore::RenderThemeQt::paintInnerSpinButton):
        (WebCore::RenderThemeQt::setPaletteFromPageClientIfExists):
        (WebCore::RenderThemeQt::initializeCommonQStyleOptions):
        (WebCore::RenderThemeQt::paintMediaFullscreenButton):
        (WebCore::RenderThemeQt::paintMediaMuteButton):
        (WebCore::RenderThemeQt::paintMediaPlayButton):
        (WebCore::RenderThemeQt::paintMediaCurrentTime):
        (WebCore::RenderThemeQt::paintMediaVolumeSliderTrack):
        (WebCore::RenderThemeQt::paintMediaVolumeSliderThumb):
        (WebCore::RenderThemeQt::paintMediaSliderTrack):
        (WebCore::RenderThemeQt::paintMediaSliderThumb):
        (WebCore::RenderThemeQt::adjustSliderThumbSize):
        (WebCore::RenderThemeQt::caretBlinkInterval):
        (WebCore::RenderThemeQt::fileListNameForWidth):
        * platform/qt/RenderThemeQt.h:
        (WebCore::StylePainter::isValid):
        (WebCore::StylePainter::drawPrimitive):
        (WebCore::StylePainter::drawControl):
        (WebCore::StylePainter::drawComplexControl):
        * platform/qt/RenderThemeQtMobile.cpp: Removed.
        * platform/qt/RenderThemeQtMobile.h: Removed.
        * platform/qt/ScrollbarThemeQt.cpp:
        (WebCore::ScrollbarTheme::nativeTheme):
        (WebCore::ScrollbarThemeQt::paint):
        (WebCore::ScrollbarThemeQt::scrollbarThickness):
        (WebCore::ScrollbarThemeQt::paintScrollCorner):

2011-11-11  Pavel Feldman  <pfeldman@google.com>

        Not reviewed: fix Snow Leopard build.

        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::performSearch):

2011-11-11  Pavel Feldman  <pfeldman@google.com>

        Web Inspector: make search in DOM panel scale.
        https://bugs.webkit.org/show_bug.cgi?id=72118

        Reviewed by Yury Semikhatsky.

        * inspector/Inspector.json:
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::InspectorDOMAgent):
        (WebCore::InspectorDOMAgent::reset):
        (WebCore::InspectorDOMAgent::performSearch):
        (WebCore::InspectorDOMAgent::getSearchResults):
        (WebCore::InspectorDOMAgent::discardSearchResults):
        * inspector/InspectorDOMAgent.h:
        * inspector/front-end/DOMAgent.js:
        (WebInspector.DOMAgent.prototype.performSearch.callback):
        (WebInspector.DOMAgent.prototype.performSearch):
        (WebInspector.DOMAgent.prototype.searchResult.mycallback):
        (WebInspector.DOMAgent.prototype.searchResult):
        (WebInspector.DOMAgent.prototype.cancelSearch):
        (WebInspector.DOMDispatcher.prototype.childNodeRemoved):
        * inspector/front-end/ElementsPanel.js:
        (WebInspector.ElementsPanel.prototype.searchCanceled):
        (WebInspector.ElementsPanel.prototype.performSearch.resultCountCallback):
        (WebInspector.ElementsPanel.prototype.performSearch):
        (WebInspector.ElementsPanel.prototype.jumpToNextSearchResult):
        (WebInspector.ElementsPanel.prototype.jumpToPreviousSearchResult):
        (WebInspector.ElementsPanel.prototype._highlightCurrentSearchResult.):
        (WebInspector.ElementsPanel.prototype._highlightCurrentSearchResult):
        (WebInspector.ElementsPanel.prototype._hideSearchHighlights):
        * inspector/front-end/NetworkPanel.js:
        (WebInspector.NetworkLogView.prototype._highlightNthMatchedResource):
        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.ResourcesPanel.prototype._showSearchResult.callback):
        (WebInspector.ResourcesPanel.prototype._showSearchResult):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype.performSearch.finishedCallback):
        (WebInspector.ScriptsPanel.prototype.performSearch):
        (WebInspector.ScriptsPanel.prototype.jumpToNextSearchResult):
        (WebInspector.ScriptsPanel.prototype.jumpToPreviousSearchResult):
        * inspector/front-end/SearchController.js:
        (WebInspector.SearchController.prototype._updateSearchMatchesCountAndCurrentMatchIndex):

2011-11-11  Pierre Rossi  <pierre.rossi@gmail.com>

        [Qt] Remove the QStyle dependency in Qt's mobile theme
        https://bugs.webkit.org/show_bug.cgi?id=67773

        This refactoring splits up RenderThemeQt with two
        subclasses, a QStyle-backed one, and a Mobile version
        that uses the old mobile theme for now.

        QStyle availability is detected at compile time, and
        its use is determined by the QT_WEBKIT_USE_MOBILE_THEME
        environment variable.

        Reviewed by Simon Hausmann.

        Covered by the existing tests.

        * Target.pri:
        * platform/qt/QtMobileWebStyle.cpp: Removed. The relevant logic
        now lives within RenderThemeQtMobile.
        * platform/qt/QtMobileWebStyle.h: Removed. Ditto.
        * platform/qt/RenderThemeQStyle.cpp: Added.
        (WebCore::initStyleOption):
        (WebCore::RenderThemeQStyle::getStylePainter):
        (WebCore::StylePainterQStyle::StylePainterQStyle):
        (WebCore::StylePainterQStyle::init):
        (WebCore::RenderThemeQStyle::create):
        (WebCore::RenderThemeQStyle::RenderThemeQStyle):
        (WebCore::RenderThemeQStyle::~RenderThemeQStyle):
        (WebCore::RenderThemeQStyle::fallbackStyle):
        (WebCore::RenderThemeQStyle::qStyle):
        (WebCore::RenderThemeQStyle::findFrameLineWidth):
        (WebCore::RenderThemeQStyle::inflateButtonRect):
        (WebCore::RenderThemeQStyle::computeSizeBasedOnStyle):
        (WebCore::RenderThemeQStyle::adjustButtonStyle):
        (WebCore::RenderThemeQStyle::setButtonPadding):
        (WebCore::RenderThemeQStyle::paintButton):
        (WebCore::RenderThemeQStyle::adjustTextFieldStyle):
        (WebCore::RenderThemeQStyle::paintTextField):
        (WebCore::RenderThemeQStyle::adjustTextAreaStyle):
        (WebCore::RenderThemeQStyle::paintTextArea):
        (WebCore::RenderThemeQStyle::setPopupPadding):
        (WebCore::RenderThemeQStyle::paintMenuList):
        (WebCore::RenderThemeQStyle::adjustMenuListButtonStyle):
        (WebCore::RenderThemeQStyle::paintMenuListButton):
        (WebCore::RenderThemeQStyle::animationDurationForProgressBar):
        (WebCore::RenderThemeQStyle::paintProgressBar):
        (WebCore::RenderThemeQStyle::paintSliderTrack):
        (WebCore::RenderThemeQStyle::adjustSliderTrackStyle):
        (WebCore::RenderThemeQStyle::paintSliderThumb):
        (WebCore::RenderThemeQStyle::adjustSliderThumbStyle):
        (WebCore::RenderThemeQStyle::paintSearchField):
        (WebCore::RenderThemeQStyle::adjustSearchFieldStyle):
        (WebCore::RenderThemeQStyle::adjustSearchFieldDecorationStyle):
        (WebCore::RenderThemeQStyle::paintSearchFieldDecoration):
        (WebCore::RenderThemeQStyle::adjustSearchFieldResultsDecorationStyle):
        (WebCore::RenderThemeQStyle::paintSearchFieldResultsDecoration):
        (WebCore::RenderThemeQStyle::paintInnerSpinButton):
        (WebCore::RenderThemeQStyle::initializeCommonQStyleOptions):
        (WebCore::RenderThemeQStyle::adjustSliderThumbSize):
        * platform/qt/RenderThemeQStyle.h: Added.
        (WebCore::StylePainterQStyle::isValid):
        (WebCore::StylePainterQStyle::drawPrimitive):
        (WebCore::StylePainterQStyle::drawControl):
        (WebCore::StylePainterQStyle::drawComplexControl):
        * platform/qt/RenderThemeQt.cpp:
        (WebCore::RenderThemeQt::RenderThemeQt):
        (WebCore::RenderThemeQt::isControlStyled):
        (WebCore::RenderThemeQt::inflateButtonRect):
        (WebCore::RenderThemeQt::adjustRepaintRect):
        (WebCore::RenderThemeQt::minimumMenuListSize):
        (WebCore::RenderThemeQt::adjustTextFieldStyle):
        (WebCore::RenderThemeQt::adjustMenuListStyle):
        (WebCore::RenderThemeQt::adjustMenuListButtonStyle):
        (WebCore::RenderThemeQt::adjustProgressBarStyle):
        (WebCore::RenderThemeQt::paintSearchFieldCancelButton):
        (WebCore::RenderThemeQt::adjustInnerSpinButtonStyle):
        (WebCore::RenderThemeQt::setPaletteFromPageClientIfExists):
        (WebCore::RenderThemeQt::paintMediaFullscreenButton):
        (WebCore::RenderThemeQt::paintMediaMuteButton):
        (WebCore::RenderThemeQt::paintMediaPlayButton):
        (WebCore::RenderThemeQt::paintMediaCurrentTime):
        (WebCore::RenderThemeQt::paintMediaVolumeSliderTrack):
        (WebCore::RenderThemeQt::paintMediaVolumeSliderThumb):
        (WebCore::RenderThemeQt::paintMediaSliderTrack):
        (WebCore::RenderThemeQt::paintMediaSliderThumb):
        (WebCore::RenderThemeQt::adjustSliderThumbSize):
        (WebCore::RenderThemeQt::caretBlinkInterval):
        (WebCore::RenderThemeQt::fileListNameForWidth):
        (WebCore::StylePainter::StylePainter):
        (WebCore::StylePainter::init):
        (WebCore::StylePainter::~StylePainter):
        * platform/qt/RenderThemeQt.h:
        (WebCore::RenderThemeQt::useMobileTheme):
        (WebCore::StylePainter::isValid):
        * platform/qt/RenderThemeQtMobile.cpp: Added.
        (WebCore::drawRectangularControlBackground):
        (WebCore::RenderThemeQtMobile::getStylePainter):
        (WebCore::StylePainterMobile::StylePainterMobile):
        (WebCore::StylePainterMobile::drawChecker):
        (WebCore::StylePainterMobile::findChecker):
        (WebCore::StylePainterMobile::drawRadio):
        (WebCore::StylePainterMobile::findRadio):
        (WebCore::StylePainterMobile::drawMultipleComboButton):
        (WebCore::StylePainterMobile::drawSimpleComboButton):
        (WebCore::StylePainterMobile::getButtonImageSize):
        (WebCore::StylePainterMobile::findComboButton):
        (WebCore::StylePainterMobile::drawLineEdit):
        (WebCore::StylePainterMobile::drawCheckBox):
        (WebCore::StylePainterMobile::drawRadioButton):
        (WebCore::StylePainterMobile::drawPushButton):
        (WebCore::StylePainterMobile::drawComboBox):
        (WebCore::RenderThemeQtMobile::create):
        (WebCore::RenderTheme::themeForPage):
        (WebCore::RenderThemeQtMobile::RenderThemeQtMobile):
        (WebCore::RenderThemeQtMobile::~RenderThemeQtMobile):
        (WebCore::RenderThemeQtMobile::isControlStyled):
        (WebCore::RenderThemeQtMobile::popupInternalPaddingBottom):
        (WebCore::RenderThemeQtMobile::computeSizeBasedOnStyle):
        (WebCore::RenderThemeQtMobile::adjustButtonStyle):
        (WebCore::RenderThemeQtMobile::setButtonPadding):
        (WebCore::RenderThemeQtMobile::paintButton):
        (WebCore::RenderThemeQtMobile::adjustTextFieldStyle):
        (WebCore::RenderThemeQtMobile::paintTextField):
        (WebCore::RenderThemeQtMobile::adjustMenuListStyle):
        (WebCore::RenderThemeQtMobile::setPopupPadding):
        (WebCore::RenderThemeQtMobile::paintMenuList):
        (WebCore::RenderThemeQtMobile::paintMenuListButton):
        (WebCore::RenderThemeQtMobile::animationDurationForProgressBar):
        (WebCore::RenderThemeQtMobile::paintProgressBar):
        (WebCore::RenderThemeQtMobile::paintSliderTrack):
        (WebCore::RenderThemeQtMobile::paintSliderThumb):
        (WebCore::RenderThemeQtMobile::checkMultiple):
        (WebCore::RenderThemeQtMobile::setPaletteFromPageClientIfExists):
        (WebCore::RenderThemeQtMobile::adjustSliderThumbSize):
        * platform/qt/RenderThemeQtMobile.h: Added.
        * platform/qt/ScrollbarThemeQt.cpp:
        (WebCore::ScrollbarTheme::nativeTheme):
        (WebCore::ScrollbarThemeQt::paint):
        (WebCore::ScrollbarThemeQt::scrollbarThickness):
        (WebCore::ScrollbarThemeQt::paintScrollCorner):

2011-11-11  Alexander Pavlov  <apavlov@chromium.org>

        Web Inspector: Option to configure indentation of pretty-printed Javascript
        https://bugs.webkit.org/show_bug.cgi?id=72119

        Reviewed by Pavel Feldman.

        Drive-by fix for field names and added indent caching, as suggested by Pavel Podivilov.

        * inspector/front-end/JavaScriptFormatter.js:
        (FormattedContentBuilder):
        (FormattedContentBuilder.prototype.increaseNestingLevel):
        (FormattedContentBuilder.prototype.decreaseNestingLevel):
        (FormattedContentBuilder.prototype._addIndent):
        * inspector/front-end/ScriptFormatter.js:
        * inspector/front-end/ScriptFormatterWorker.js:
        (onmessage):
        (formatScript):
        (HTMLScriptFormatter):
        (HTMLScriptFormatter.prototype.scriptEnded):

2011-11-11  Andreas Kling  <kling@webkit.org>

        Unreviewed Chromium build fix after r99958.

        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateImplementationCustomCall):o

            Remove hack that forced HTMLOptionsCollection to have a custom
            callAsFunctionCallback().

2011-11-11  Mike Lewis <mikelikespie@gmail.com>

        Web Inspector: DevTools InspectorStubs.js incorrectly converting responses to arguments.
        https://bugs.webkit.org/show_bug.cgi?id=72096

        JSON.parse doesn't garantee the order of keys.
        We have to explicitly order the results according to Inspector.json spec.

        Reviewed by Pavel Feldman.

        * inspector/CodeGeneratorInspector.py:

2011-11-10  Andreas Kling  <kling@webkit.org>

        Remove ability to call HTMLCollections in V8 bindings as well.
        <http://webkit.org/b/72045>

        Reviewed by Anders Carlsson.

        Follow the JSC bindings and remove the ability to call HTMLCollections
        in the V8 bindings (excluding HTMLAllCollection.)

        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateHeaderCustomCall):
        (GenerateImplementationCustomCall):
        * dom/NodeList.idl:
        * html/HTMLCollection.idl:

            Remove the V8CustomCall attribute as it's no longer needed.

        * bindings/v8/custom/V8HTMLCollectionCustom.cpp:
        * bindings/v8/custom/V8NodeListCustom.cpp:

2011-11-11  Alexander Pavlov  <apavlov@chromium.org>

        Web Inspector: Interactive color box for gradients in CSS property values
        https://bugs.webkit.org/show_bug.cgi?id=72112

        Reviewed by Yury Semikhatsky.

        Add "background-image" to the list of color-aware properties (may contain gradient definition).

        * inspector/front-end/CSSKeywordCompletions.js:

2011-11-11  Yury Semikhatsky  <yurys@chromium.org>

        Web Inspector: [chromium] list dedicated workers in case inspector opened post-worker creation.
        https://bugs.webkit.org/show_bug.cgi?id=72020

        Collect information about dedicated workers even when inspector is closed. This
        way we can list all dedicated workers if the front-end opens later.

        Reviewed by Pavel Feldman.

        Test: http/tests/inspector-enabled/dedicated-workers-list.html

        * inspector/InspectorInstrumentation.h:
        (WebCore::InspectorInstrumentation::didStartWorkerContext):
        * inspector/InspectorWorkerAgent.cpp:
        (WebCore::InspectorWorkerAgent::InspectorWorkerAgent):
        (WebCore::InspectorWorkerAgent::~InspectorWorkerAgent):
        (WebCore::InspectorWorkerAgent::setFrontend):
        (WebCore::InspectorWorkerAgent::restore):
        (WebCore::InspectorWorkerAgent::clearFrontend):
        (WebCore::InspectorWorkerAgent::setWorkerInspectionEnabled):
        (WebCore::InspectorWorkerAgent::didStartWorkerContext):
        (WebCore::InspectorWorkerAgent::workerContextTerminated):
        (WebCore::InspectorWorkerAgent::createWorkerFrontendChannelsForExistingWorkers):
        (WebCore::InspectorWorkerAgent::destroyWorkerFrontendChannels):
        (WebCore::InspectorWorkerAgent::createWorkerFrontendChannel):
        * inspector/InspectorWorkerAgent.h:

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

        Unreviewed, rolling out r99950.
        http://trac.webkit.org/changeset/99950
        https://bugs.webkit.org/show_bug.cgi?id=72117

        "Landed wrong patch by mistake" (Requested by yurys on
        #webkit).

        * bindings/js/JSInjectedScriptHostCustom.cpp:
        * bindings/v8/custom/V8InjectedScriptHostCustom.cpp:
        * inspector/InjectedScript.cpp:
        * inspector/InjectedScript.h:
        * inspector/InjectedScriptHost.idl:
        * inspector/InjectedScriptSource.js:
        * inspector/Inspector.json:
        * inspector/InspectorDebuggerAgent.cpp:
        * inspector/InspectorDebuggerAgent.h:

2011-11-10  Yury Semikhatsky  <yurys@chromium.org>

        Web Inspector: function remote objetct should provide access to function position in the script
        https://bugs.webkit.org/show_bug.cgi?id=71808

        Added Debugger.getFunctionLocation command for resolving function location including
        start line, column and script id.

        Reviewed by Pavel Feldman.

        Test: inspector/debugger/function-location.html

        * bindings/js/JSInjectedScriptHostCustom.cpp:
        (WebCore::JSInjectedScriptHost::functionLocation):
        * bindings/v8/custom/V8InjectedScriptHostCustom.cpp:
        (WebCore::V8InjectedScriptHost::functionLocationCallback):
        * inspector/InjectedScript.cpp:
        (WebCore::InjectedScript::getFunctionLocation):
        * inspector/InjectedScript.h:
        * inspector/InjectedScriptHost.idl:
        * inspector/InjectedScriptSource.js:
        (.):
        * inspector/Inspector.json:
        * inspector/InspectorDebuggerAgent.cpp:
        (WebCore::InspectorDebuggerAgent::getFunctionLocation):
        * inspector/InspectorDebuggerAgent.h:

2011-11-11  Pavel Feldman  <pfeldman@google.com>

        Not reviewed: roll out changes to InspectorDOMAgent that squeezed into 99933.

        * inspector/InspectorDOMAgent.cpp:
        (WebCore::MatchJob::MatchJob):
        (WebCore::InspectorDOMAgent::onMatchJobsTimer):

2011-11-11  Alexander Pavlov  <apavlov@chromium.org>

        Web Inspector: [Metrics] Editor is committed when scrolling a content box dimension up/down for the first time
        https://bugs.webkit.org/show_bug.cgi?id=72108

        Reviewed by Pavel Feldman.

        * inspector/front-end/MetricsSidebarPane.js:
        (WebInspector.MetricsSidebarPane.prototype._attributesUpdated):

2011-11-11  Alpha Lam  <hclam@chromium.org>

        [chromium] scrolling is broken with compositor thread
        https://bugs.webkit.org/show_bug.cgi?id=72059

        Reviewed by James Robinson.

        No new test. Existing test CCLayerTreeHostImplTest.scrollDeltaRepeatedScrolls checks scroll deltas are applied
        on the right layer.

        * platform/graphics/chromium/cc/CCLayerTreeHostImpl.h:
        (WebCore::CCLayerTreeHostImpl::scrollLayer):
        * platform/graphics/chromium/cc/CCThreadProxy.cpp:
        (WebCore::CCThreadProxy::beginFrameCompleteOnImplThread):
        Instead of calling on the root layer which doesn't have scroll delta applied. Change this to scrollLayer()
        which actually has scroll delta.

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

        Unreviewed, rolling out r99826.
        http://trac.webkit.org/changeset/99826
        https://bugs.webkit.org/show_bug.cgi?id=72109

        "Likely causing test flakiness" (Requested by tonyg-cr on
        #webkit).

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::scheduleArchiveLoad):

2011-11-11  Nikolas Zimmermann  <nzimmermann@rim.com>

        Zooming in SVGs in <object> is flakey
        https://bugs.webkit.org/show_bug.cgi?id=71673

        Reviewed by Zoltan Herczeg.

        It turns out zooming in SVGs in <object> wasn't flakey in Safari at all, only in DRT/Mac. In Safari it failed 100% reproducable.
        Scrollbars would always appear when zooming in a HTML document, containing an embedded SVG by <object>/<embed>/<iframe>, even
        though the content would visually fit perfectly, also it zoomed properly. Reloading would make the scrollbars disappear again.

        If scrollbars should be created for a FrameView or not, is determined by ScrollView::updateScrollbars(), by comparing the 
        visible size of the scroll view against the contents size. The contents size is propagated to the ScrollView, by
        FrameView::adjustViewSize(), which is called during FrameView::layout(). The size thats propagated is RenderView::documentRect().
        RenderView::documentRect() returns a writing-mode aware layoutOverflowRect(), computed by RenderBox::layoutOverflowRectForPropagation.

        If overflow is "visible", layoutOverflowRect() will return a union of the borderBoxRect() and the layoutOverflowRect(), which
        may exceed the visible size of the RenderView. For standalone SVG documents, the default value for the outermost <svg> renderer is
        "visible". When embedding SVGs through <object>s into a host document, the same code path is taken, and RenderView::documentRect()
        of the embedded SVG document will always return a union of the borderBoxREct() and the layoutOverflowRect().

        If that happens while zooming in a HTML document containing a SVG by <object>, scrollbars are created.
        By ensuring that overflow is treated as hidden, which is what Opera does (and makes sense!) this can't happen.

        The fix is to treat embedded SVGs as they would carry overflow="hidden" on the outermost <svg> renderer. That also makes
        sense as the embedded SVG cant paint outside an external "frame rect" thats given by the FrameView, effectively rendering
        as overflow "hidden" already.

        The fix is realized, by altering the overflow x/y values that are used in FrameView::applyOverflowToViewport(). Previously
        we never called that method for SVG, which was fine. Now we always call applyOverflowToViewport(), but only do something
        if the FrameView of the SVG is embedded in another document. If so, we force overflow to hidden.

        That fixes all zooming+<object> related flakiness seen on the chromium bots, most noticeable, without other side effects.
        All svg/overflow tests, still work as expected.

        Test: svg/zoom/page/zoom-svg-as-object.html

        * page/Frame.cpp:
        (WebCore::Frame::setPageAndTextZoomFactors): Remove unnecessary setNeedsLayout() call in SVG builds.
        * page/FrameView.cpp:
        (WebCore::FrameView::applyOverflowToViewport): Always enforce overflow=hidden, when embedding SVGs through object/embed/iframe.
                                                       Otherwise scrollbars will appear, even though the contents would fit without them.
        (WebCore::FrameView::calculateScrollbarModesForLayout): Always call applyOverflowToViewport, even for RenderSVGRoot. It only has
                                                                an effect though, when the FrameView of the SVG is embedded through <object>/etc.
        (WebCore::FrameView::layout): Remove unnecessary setChildNeedsLayout() call.
        * rendering/svg/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::isEmbeddedThroughFrameContainingSVGDocument): Fix this function, its meaning was reversed before!
        (WebCore::RenderSVGRoot::computeReplacedLogicalWidth): Fix logical error, by negating the result of isEmbeddedThroughFrameContainingSVGDocument.
        (WebCore::RenderSVGRoot::computeReplacedLogicalHeight): Ditto.
        * rendering/svg/RenderSVGRoot.h: Expose isEmbeddedThroughFrameContainingSVGDocument.

2011-11-11  Nikolas Zimmermann  <nzimmermann@rim.com>

        Not reviewed. Unbreak my 32bit SL build.

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateOrRemoveFilterEffect): Use narrowPrecisionToFloat() to convert float -> double.

2011-10-28  Philippe Normand  <pnormand@igalia.com>

        HRTF Database consolidation
        https://bugs.webkit.org/show_bug.cgi?id=69703

        Reviewed by Kenneth Russell.

        Access to the consolidated parts of the HRTF database by segmented
        chunks. A concatenated Composite HRTF database is provided in
        Composite.wav. Additionnally a new build step that concatenates
        the platform/audio/resources/ files into one (sox can be used for
        this) can be configured for specific ports.

        * platform/audio/HRTFDatabase.h:
        * platform/audio/HRTFElevation.cpp:
        (WebCore::getConcatenatedImpulseResponsesForSubject):
        (WebCore::HRTFElevation::calculateKernelsForAzimuthElevation):
        * platform/audio/resources/Composite.wav: Added.

2011-11-10  Pavel Feldman  <pfeldman@google.com>

        Web Inspector: provide an id to the root inspector element for third party UA styling.
        https://bugs.webkit.org/show_bug.cgi?id=72094

        Reviewed by Yury Semikhatsky.

        * inspector/front-end/inspector.html:

2011-11-10  Andy Estes  <aestes@apple.com>

        WebKitCSSShaderValue.h is not a member of the WebCore target
        https://bugs.webkit.org/show_bug.cgi?id=72093

        Reviewed by Dan Bernstein.

        * WebCore.xcodeproj/project.pbxproj: Make WebKitCSSShaderValue.h a
        member of the WebCore target, and make it a project header.

2011-11-10  Dan Bernstein  <mitz@apple.com>

        Disabling assertions breaks the debug build
        https://bugs.webkit.org/show_bug.cgi?id=72091

        Reviewed by Geoff Garen.

        * platform/graphics/BitmapImage.cpp:
        (WebCore::BitmapImage::didDecodeProperties): Guarded the definition of local variables that are
        only used in an assertion correctly.
        * platform/graphics/gpu/TilingData.h: Changed ASSERT to ASSERT_UNUSED.
        (WebCore::TilingData::assertTile):
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::willBeDestroyed): Guarded the definition of a local variable that is
        only used in an assertion correctly.
        * rendering/svg/RenderSVGResourceClipper.cpp:
        (WebCore::RenderSVGResourceClipper::applyResource): Changed ASSERT to ASSERT_UNUSED.
        * rendering/svg/RenderSVGResourceFilter.cpp:
        (WebCore::RenderSVGResourceFilter::applyResource): Changed ASSERT to ASSERT_UNUSED.
        (WebCore::RenderSVGResourceFilter::postApplyResource): Changed ASSERT to ASSERT_UNUSED.
        * rendering/svg/RenderSVGResourceMasker.cpp:
        (WebCore::RenderSVGResourceMasker::applyResource): Changed ASSERT to ASSERT_UNUSED.

2011-11-10  Daniel Cheng  <dcheng@chromium.org>

        [chromium] Add plumbing for JS to write to clipboard in copy/cut events.
        https://bugs.webkit.org/show_bug.cgi?id=71414

        Reviewed by Darin Fisher.

        No new tests since no new functionality enabled yet.

        * platform/chromium/PasteboardChromium.cpp:
        (WebCore::Pasteboard::writeClipboard):
        * platform/chromium/PlatformSupport.h:

2011-11-10  Daniel Cheng  <dcheng@chromium.org>

        Atomically update the system clipboard for copy/cut events
        https://bugs.webkit.org/show_bug.cgi?id=40515

        Reviewed by David Levin.

        This change consolidates the system pasteboard mutation logic into dispatchCPPEvent() rather
        than having it scattered throughout tryDHTMLCopy/tryDHTMLCut and the various Clipboard*
        classes. This allows us to ensure that the system pasteboard remains in a consistent state
        even if there's an exception thrown during event handling, and it also lays the ground work
        for allowing pages to prevent copy/cut without causing the system pasteboard to be cleared.

        No new tests, since any layout test would be flaky since it would depend on and affect
        global system state.

        * editing/Editor.cpp:
        (WebCore::Editor::tryDHTMLCopy): Move Pasteboard::clear() call to dispatchCPPEvent().
        (WebCore::Editor::tryDHTMLCut): Ditto.
        (WebCore::Editor::dispatchCPPEvent):
        Only persist Clipboard mutations to the system pasteboard if the event was dispatched
        successfully and default processing was prevented.
        * editing/mac/EditorMac.mm:
        (WebCore::Editor::newGeneralClipboard):
        When creating a Clipboard for copy/cut, back it with a unique instance of NSPasteboard to
        buffer pasteboard mutations.
        * platform/Pasteboard.h:
        * platform/chromium/PasteboardChromium.cpp:
        (WebCore::Pasteboard::writeClipboard):
        * platform/efl/PasteboardEfl.cpp:
        (WebCore::Pasteboard::writeClipboard):
        * platform/gtk/ClipboardGtk.cpp: Moved pasteboard writeback to PasteboardGtk.
        (WebCore::ClipboardGtk::setData):
        * platform/gtk/ClipboardGtk.h:
        (WebCore::ClipboardGtk::clipboard):
        * platform/gtk/PasteboardGtk.cpp:
        (WebCore::Pasteboard::writeClipboard):
        * platform/mac/PasteboardMac.mm:
        (WebCore::Pasteboard::writeClipboard):
        Implement logic to flush data from temporary NSPasteboard to system pasteboard.
        * platform/gtk/ClipboardGtk.cpp: Moved pasteboard writeback to PasteboardQt.
        (WebCore::ClipboardGtk::setData):
        * platform/qt/PasteboardQt.cpp:
        (WebCore::Pasteboard::writeClipboard):
        * platform/win/PasteboardWin.cpp:
        (WebCore::Pasteboard::writeClipboard):
        * platform/wince/PasteboardWinCE.cpp:
        (WebCore::Pasteboard::writeClipboard):
        * platform/wx/PasteboardWx.cpp:
        (WebCore::Pasteboard::writeClipboard):

2011-11-10  Julien Chaffraix  <jchaffraix@webkit.org>

        RenderTableSection's recalcCell logic is doing too much work
        https://bugs.webkit.org/show_bug.cgi?id=71986

        Reviewed by Darin Adler.

        No change in behavior expected so no test.

        r98738 and r98980 missed the point that Vector::clear() does not touch
        the internal buffer. Thus calling clear() would keep the memory and properly
        reset the size().

        Due to how the code worked, after r98980 the code would end up resetting some
        of RowStruct field twice: once when growing and the other one when calling
        fillRowsWithDefaultStartingAtPosition.

        This change make the code use Vector::clear and simplified the recalcCells
        logic knowing that growing the Vector will properly initialize most of the
        RowStruct fields (with RowStruct constructor).

        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::addChild):
        (WebCore::RenderTableSection::addCell):
        Updated after ensureRows signature change.

        (WebCore::RenderTableSection::ensureRows):
        Removed the overflow check as it was making some assumption as to how the
        Vector worked. If we want to implement a limit, we may do it differently.
        Also inlined the part of fillRowsWithDefaultStartingAtPosition that grows
        the columns to match our current representation. The rest of the function's
        initialization is handled by the constructor already.

        (WebCore::RenderTableSection::recalcCells):
        Use clear() as it keeps the buffer and just resets the size. Also shrinkToFit
        at the end as we may have lost some rows.

        * rendering/RenderTableSection.h:
        (WebCore::RenderTableSection::CellStruct::CellStruct):
        Fixed the style of the constructor.

        (WebCore::RenderTableSection::RowStruct::RowStruct):
        Added an explicit constructor (which is equivalent to the default one)
        but underlines what we expect.

2011-11-10  Enrica Casucci  <enrica@apple.com>

        ASSERT when outdenting styled line break.
        https://bugs.webkit.org/show_bug.cgi?id=72069
        <rdar://problem/10429739>

        Reviewed by Ryosuke Niwa.

        When outdenting a line break that has some inline style, we don't consider
        the enclosing elements that provide the style.
        This causes the splitting to occur in the wrong position,
        triggering the assert.
         
        Test: editing/execCommand/outdent-break-with-style.html

        * editing/IndentOutdentCommand.cpp:
        (WebCore::IndentOutdentCommand::outdentParagraph): The fix consists
        in choosing the highest inline ancestor as splitting point.
        * editing/htmlediting.cpp:
        (WebCore::isInline): Added.
        * editing/htmlediting.h: Added isInline.

2011-11-10  Dean Jackson  <dino@apple.com>

        Remove effectBoundingBoxMode from CSS Filters
        https://bugs.webkit.org/show_bug.cgi?id=72058

        Reviewed by Simon Fraser.

        As suggested by Nikolas, we don't need this virtual method any more.

        * rendering/FilterEffectRenderer.h:

2011-11-10  David Hyatt  <hyatt@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=72060
        
        [CSS Line Grid] Add support for the line-grid-snap property to control snapping to the nearest
        enclosing grid.

        Reviewed by Dan Bernstein.

        Added fast/line-grid/line-grid-snap-parsing.html.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):
        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        (WebCore::CSSPrimitiveValue::operator LineGridSnap):
        * css/CSSProperty.cpp:
        (WebCore::CSSProperty::isInheritedProperty):
        * css/CSSPropertyNames.in:
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):
        * css/CSSValueKeywords.in:
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::diff):
        * rendering/style/RenderStyle.h:
        (WebCore::InheritedFlags::lineGridSnap):
        (WebCore::InheritedFlags::setLineGridSnap):
        (WebCore::InheritedFlags::initialLineGridSnap):
        * rendering/style/RenderStyleConstants.h:
        * rendering/style/StyleRareInheritedData.cpp:
        (WebCore::StyleRareInheritedData::StyleRareInheritedData):
        (WebCore::StyleRareInheritedData::operator==):
        * rendering/style/StyleRareInheritedData.h:

2011-11-10  Kentaro Hara  <haraken@chromium.org>

        CodeGeneratorV8.pm can generate Event constructors
        https://bugs.webkit.org/show_bug.cgi?id=72055

        Reviewed by Adam Barth.

        This patch makes CodeGeneratorV8.pm generate Event constructors
        and replaces a custom constructor of Event with the generated one.
        After this patch is landed without regression,
        I will replace custom constructors of all other Events.
        This patch introduces two new IDLs:

        - [ConstructorTemplate=Event] IDL indicates that CodeGenerator should
        generate an Event constructor.
        - [InitializedByConstructor] IDL on an attribute indicates that
        the attribute can be initialized by the constructor.

        Tests: fast/events/constructors/event-constructors.html
               fast/events/constructors/custom-event-constructor.html
               fast/events/constructors/progress-event-constructor.html

        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateHeader): Added a header for fillXXXXEventInit(...).
        (IsConstructable): Judges if a given interface is constructable.
        (IsConstructorTemplate): Judges if a given interface has a given template, e.g. judges if an interface has [ConstructorTemplate=Event].
        (GenerateEventConstructorCallback): Generates an Event constructor. The generated code is the same as the code that had been written in V8EventConstructors.cpp.
        (GenerateImplementation): Generates an Event constructor if [ConstructorTemplate=Event] is specified.
        * dom/Event.idl: Added [ConstructorTemplate=Event] IDL. Added [InitializedByConstructor] IDL to attributes that can be initialized by a constructor.

        * bindings/scripts/test/TestEventConstructor.idl: Added a new run-bindings-test.
        * bindings/scripts/test/CPP/WebDOMTestEventConstructor.cpp: Updated a run-bindings-tests result.
        (WebDOMTestEventConstructor::WebDOMTestEventConstructorPrivate::WebDOMTestEventConstructorPrivate):
        (WebDOMTestEventConstructor::WebDOMTestEventConstructor):
        (WebDOMTestEventConstructor::operator=):
        (WebDOMTestEventConstructor::impl):
        (WebDOMTestEventConstructor::~WebDOMTestEventConstructor):
        (WebDOMTestEventConstructor::attr1):
        (WebDOMTestEventConstructor::attr2):
        (toWebCore):
        (toWebKit):
        * bindings/scripts/test/CPP/WebDOMTestEventConstructor.h: Ditto.
        * bindings/scripts/test/GObject/WebKitDOMTestEventConstructor.cpp: Ditto.
        (WebKit::kit):
        (webkit_dom_test_event_constructor_get_attr1):
        (webkit_dom_test_event_constructor_get_attr2):
        (WebKit::core):
        (webkit_dom_test_event_constructor_finalize):
        (webkit_dom_test_event_constructor_set_property):
        (webkit_dom_test_event_constructor_get_property):
        (webkit_dom_test_event_constructor_constructed):
        (webkit_dom_test_event_constructor_class_init):
        (webkit_dom_test_event_constructor_init):
        (WebKit::wrapTestEventConstructor):
        * bindings/scripts/test/GObject/WebKitDOMTestEventConstructor.h: Ditto.
        * bindings/scripts/test/GObject/WebKitDOMTestEventConstructorPrivate.h: Ditto.
        * bindings/scripts/test/JS/JSTestEventConstructor.cpp: Ditto.
        (WebCore::JSTestEventConstructorConstructor::JSTestEventConstructorConstructor):
        (WebCore::JSTestEventConstructorConstructor::finishCreation):
        (WebCore::JSTestEventConstructorConstructor::getOwnPropertySlot):
        (WebCore::JSTestEventConstructorConstructor::getOwnPropertyDescriptor):
        (WebCore::JSTestEventConstructorConstructor::getConstructData):
        (WebCore::JSTestEventConstructorPrototype::self):
        (WebCore::JSTestEventConstructor::JSTestEventConstructor):
        (WebCore::JSTestEventConstructor::finishCreation):
        (WebCore::JSTestEventConstructor::createPrototype):
        (WebCore::JSTestEventConstructor::getOwnPropertySlot):
        (WebCore::JSTestEventConstructor::getOwnPropertyDescriptor):
        (WebCore::jsTestEventConstructorAttr1):
        (WebCore::jsTestEventConstructorAttr2):
        (WebCore::jsTestEventConstructorConstructor):
        (WebCore::JSTestEventConstructor::getConstructor):
        (WebCore::toJS):
        (WebCore::toTestEventConstructor):
        * bindings/scripts/test/JS/JSTestEventConstructor.h: Ditto.
        (WebCore::JSTestEventConstructor::create):
        (WebCore::JSTestEventConstructor::createStructure):
        (WebCore::JSTestEventConstructor::impl):
        (WebCore::JSTestEventConstructorPrototype::create):
        (WebCore::JSTestEventConstructorPrototype::createStructure):
        (WebCore::JSTestEventConstructorPrototype::JSTestEventConstructorPrototype):
        (WebCore::JSTestEventConstructorConstructor::create):
        (WebCore::JSTestEventConstructorConstructor::createStructure):
        * bindings/scripts/test/ObjC/DOMTestEventConstructor.h: Ditto.
        * bindings/scripts/test/ObjC/DOMTestEventConstructor.mm: Ditto.
        (-[DOMTestEventConstructor dealloc]):
        (-[DOMTestEventConstructor finalize]):
        (-[DOMTestEventConstructor attr1]):
        (-[DOMTestEventConstructor attr2]):
        (core):
        (kit):
        * bindings/scripts/test/ObjC/DOMTestEventConstructorInternal.h: Ditto.
        * bindings/scripts/test/V8/V8TestEventConstructor.cpp: Ditto.
        (WebCore::TestEventConstructorInternal::V8_USE):
        (WebCore::TestEventConstructorInternal::attr1AttrGetter):
        (WebCore::TestEventConstructorInternal::attr2AttrGetter):
        (WebCore::ConfigureV8TestEventConstructorTemplate):
        (WebCore::V8TestEventConstructor::GetRawTemplate):
        (WebCore::V8TestEventConstructor::GetTemplate):
        (WebCore::V8TestEventConstructor::HasInstance):
        (WebCore::V8TestEventConstructor::wrapSlow):
        (WebCore::V8TestEventConstructor::derefObject):
        * bindings/scripts/test/V8/V8TestEventConstructor.h: Ditto.
        (WebCore::V8TestEventConstructor::toNative):
        (WebCore::V8TestEventConstructor::existingWrapper):
        (WebCore::V8TestEventConstructor::wrap):
        (WebCore::toV8):
        * bindings/scripts/test/V8/V8TestInterface.h: Ditto.
        * bindings/scripts/test/V8/V8TestMediaQueryListListener.h: Ditto.
        * bindings/scripts/test/V8/V8TestNamedConstructor.h: Ditto.
        * bindings/scripts/test/V8/V8TestObj.h: Ditto.
        * bindings/scripts/test/V8/V8TestSerializedScriptValueInterface.h: Ditto.
        * bindings/v8/custom/V8EventConstructors.cpp: Removed a custom constructor of Event.

2011-11-10  Benjamin Poulain  <benjamin@webkit.org>

        Do not share CSS style for MediaElement backed by a plugin
        https://bugs.webkit.org/show_bug.cgi?id=72005

        Reviewed by Simon Fraser.

        With PLUGIN_PROXY_FOR_VIDEO, the RenderMedia elements are rendered through RenderBoxModelObject.
        Like the embedded element, the proxied media element can gain a layer outside a change of style.

        This patch prevents style sharing for the Audio and Video elements when PLUGIN_PROXY_FOR_VIDEO
        is enabled.

        This path is covered by exising tests. In particular, http/tests/misc/empty-urls.html
        ASSERT() because of this.

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

2011-11-10  Dean Jackson  <dino@apple.com>

        Move/copy/merge SVG filter rendering code to generic rendering
        https://bugs.webkit.org/show_bug.cgi?id=68472

        Reviewed by Simon Fraser.

        Implement an extremely simple version of the filter
        chain. Only a single hue-rotate filter is supported
        at the moment. The change in this commit was to insert a new
        step in RenderLayer's painting to capture the content to an
        offscreen ImageBuffer, apply a filter operation on that buffer,
        and then draw the result in place of the original element. The full
        implementation will need something like the SVGFilterBuilder
        but this is a good prototype of effects on HTML content.
        It's an open question at the moment as to when the filter
        effect should apply: after masking, after overflow, after outline,
        etc. Currently the filter applies at the end of the paintLayer code.
        This will likely change.
        
        Added a FilterEffectRenderer class that is the root of the filter
        tree. At the moment it holds the offscreen context and
        the existing paint context.
        
        Other than rendering, the rest of this patch adds tests
        to make sure any element with a filter style will become
        a RenderLayer. In order to avoid a lot of duplicated code
        around the more complex logic tests, RenderStyle::hasFilter
        is available outside ENABLE(CSS_FILTERS), but returns false
        in those situations.

        Tests: css3/filters/add-filter-rendering.html
               css3/filters/remove-filter-rendering.html
               css3/filters/simple-filter-rendering.html

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::adjustRenderStyle):
        * rendering/FilterEffectRenderer.cpp: Added.
        (WebCore::FilterEffectRenderer::FilterEffectRenderer):
        (WebCore::FilterEffectRenderer::~FilterEffectRenderer):
        * rendering/FilterEffectRenderer.h: Added.
        (WebCore::FilterEffectRenderer::create):
        (WebCore::FilterEffectRenderer::setSourceImageRect):
        (WebCore::FilterEffectRenderer::sourceImageRect):
        (WebCore::FilterEffectRenderer::setFilterRegion):
        (WebCore::FilterEffectRenderer::filterRegion):
        (WebCore::FilterEffectRenderer::effectBoundingBoxMode):
        (WebCore::FilterEffectRenderer::setEffect):
        (WebCore::FilterEffectRenderer::effect):
        (WebCore::FilterEffectRenderer::setSourceGraphic):
        (WebCore::FilterEffectRenderer::sourceGraphic):
        * rendering/RenderBoxModelObject.h:
        (WebCore::RenderBoxModelObject::requiresLayer):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::paintLayer):
        (WebCore::RenderLayer::shouldBeNormalFlowOnly):
        (WebCore::RenderLayer::styleChanged):
        (WebCore::RenderLayer::updateOrRemoveFilterEffect):
        (WebCore::RenderLayer::updateFilterBackingStore):
        * rendering/RenderLayer.h:
        (WebCore::RenderLayer::hasFilter):
        * rendering/RenderObject.h:
        (WebCore::RenderObject::hasFilter):
        * rendering/RenderTableRow.h:
        (WebCore::RenderTableRow::requiresLayer):
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::diff):
        * rendering/style/RenderStyle.h:
        (WebCore::InheritedFlags::hasFilter):

2011-11-10  Xiaomei Ji  <xji@chromium.org>

        --webkit-visual-word crash when create legacy position for shadowRoot
        https://bugs.webkit.org/show_bug.cgi?id=71600
    
        Reviewed by Ryosuke Niwa.

        Inside textarea, the shadowed text node's previous leaf node could be the
        shadowRoot node, which cause assert exception in creating legacy position based
        on such node. Exit previousRootInlineBox() when reach shadowRoot node.

        It does not cause problem when looking for text node's next leaf node. Adding
        the same checking in nextRootInlineBox just to be safe.

        Test: editing/selection/move-by-word-visually-crash-test-textarea.html

        * editing/visible_units.cpp:
        (WebCore::previousRootInlineBox):
        (WebCore::nextRootInlineBox):

2011-11-10  Dean Jackson  <dino@apple.com>

        Parse drop-shadow() filter syntax
        https://bugs.webkit.org/show_bug.cgi?id=69108

        Reviewed by Simon Fraser.

        Support parsing of the shadow syntax inside drop-shadow
        and returning the correct computed style for a filter that
        has such a function.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::valueForFilter):
            Move this from a static function (computedFilter) to a method on
            CSSComputedStyleDeclaration, which allows us to call the
            existing method for shadow styles.
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        * css/CSSComputedStyleDeclaration.h:
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):
        (WebCore::CSSParser::parseShadow):
            Previously parseShadow expected to be called with the entire
            value of a property, not just to look at a restricted subset.
            Change parseShadow to take a CSSParserValueList as parameter,
            allowing it to be used to parse the arguments to the drop-shadow
            function. Also, return the CSSValueList rather than injecting
            it directly into the property value.
        (WebCore::filterInfoForName):
        (WebCore::CSSParser::parseFilter):
            Support for the drop-shadow() function.
        * css/CSSParser.h:
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::createFilterOperations):
        * css/SVGCSSParser.cpp:
        (WebCore::CSSParser::parseSVGValue):
            Updated to use the new arguments for parseShadow.

2011-11-10  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: ApplicationCache UI is confusing and incorrect.
        https://bugs.webkit.org/show_bug.cgi?id=64581

        Reviewed by Pavel Feldman.

        Fixed resources panel application cache UI.
        Manifest urls are now shown under application cache tree element.
        Under each manifest url tree element frames using relevant application
        cache are listed. Application cache detailed views could be opened for each
        frame.

        Test: http/tests/inspector/resource-tree/appcache-iframe-manifests.html

        * English.lproj/localizedStrings.js:
        * inspector/Inspector.json:
        * inspector/InspectorApplicationCacheAgent.cpp:
        (WebCore::InspectorApplicationCacheAgent::InspectorApplicationCacheAgent):
        (WebCore::InspectorApplicationCacheAgent::setFrontend):
        (WebCore::InspectorApplicationCacheAgent::updateApplicationCacheStatus):
        (WebCore::InspectorApplicationCacheAgent::networkStateChanged):
        (WebCore::InspectorApplicationCacheAgent::enable):
        (WebCore::InspectorApplicationCacheAgent::getFramesWithManifests):
        (WebCore::InspectorApplicationCacheAgent::assertFrameWithDocumentLoader):
        (WebCore::InspectorApplicationCacheAgent::getManifestForFrame):
        (WebCore::InspectorApplicationCacheAgent::getApplicationCacheForFrame):
        (WebCore::InspectorApplicationCacheAgent::buildObjectForApplicationCache):
        (WebCore::InspectorApplicationCacheAgent::buildObjectForApplicationCacheResource):
        * inspector/InspectorApplicationCacheAgent.h:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::resourceContent):
        (WebCore::InspectorPageAgent::getResourceContent):
        (WebCore::InspectorPageAgent::assertFrame):
        (WebCore::InspectorPageAgent::assertDocumentLoader):
        * inspector/InspectorPageAgent.h:
        * inspector/InspectorStyleSheet.cpp:
        (WebCore::InspectorStyleSheet::resourceStyleSheetText):
        * inspector/front-end/ApplicationCacheItemsView.js:
        (WebInspector.ApplicationCacheItemsView):
        (WebInspector.ApplicationCacheItemsView.prototype._update):
        (WebInspector.ApplicationCacheItemsView.prototype._updateCallback):
        (WebInspector.ApplicationCacheItemsView.prototype._populateDataGrid):
        * inspector/front-end/ApplicationCacheModel.js:
        (WebInspector.ApplicationCacheModel):
        (WebInspector.ApplicationCacheModel.prototype._frameNavigated):
        (WebInspector.ApplicationCacheModel.prototype._frameDetached):
        (WebInspector.ApplicationCacheModel.prototype._mainFrameNavigated):
        (WebInspector.ApplicationCacheModel.prototype._manifestForFrameLoaded):
        (WebInspector.ApplicationCacheModel.prototype._framesWithManifestsLoaded):
        (WebInspector.ApplicationCacheModel.prototype._frameManifestUpdated):
        (WebInspector.ApplicationCacheModel.prototype._frameManifestRemoved):
        (WebInspector.ApplicationCacheModel.prototype.frameManifestURL):
        (WebInspector.ApplicationCacheModel.prototype.frameManifestStatus):
        (WebInspector.ApplicationCacheModel.prototype._statusUpdated):
        (WebInspector.ApplicationCacheModel.prototype.requestApplicationCache):
        (WebInspector.ApplicationCacheModel.prototype._networkStateUpdated):
        (WebInspector.ApplicationCacheDispatcher.prototype.applicationCacheStatusUpdated):
        (WebInspector.ApplicationCacheDispatcher.prototype.networkStateUpdated):
        * inspector/front-end/ResourceTreeModel.js:
        (WebInspector.ResourceTreeModel.prototype.frameForId):
        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.ResourcesPanel.prototype.wasShown):
        (WebInspector.ResourcesPanel.prototype.reset):
        (WebInspector.ResourcesPanel.prototype._frameNavigated):
        (WebInspector.ResourcesPanel.prototype.addDocumentURL):
        (WebInspector.ResourcesPanel.prototype.showApplicationCache):
        (WebInspector.ResourcesPanel.prototype._populateApplicationCacheTree):
        (WebInspector.ResourcesPanel.prototype._applicationCacheFrameManifestAdded):
        (WebInspector.ResourcesPanel.prototype._applicationCacheFrameManifestRemoved):
        (WebInspector.ResourcesPanel.prototype._applicationCacheFrameManifestStatusChanged):
        (WebInspector.ResourcesPanel.prototype._applicationCacheNetworkStateChanged):
        (WebInspector.ApplicationCacheManifestTreeElement):
        (WebInspector.ApplicationCacheManifestTreeElement.prototype.get itemURL):
        (WebInspector.ApplicationCacheManifestTreeElement.prototype.get manifestURL):
        (WebInspector.ApplicationCacheManifestTreeElement.prototype.onselect):
        (WebInspector.ApplicationCacheFrameTreeElement):
        (WebInspector.ApplicationCacheFrameTreeElement.prototype.get itemURL):
        (WebInspector.ApplicationCacheFrameTreeElement.prototype.get frameId):
        (WebInspector.ApplicationCacheFrameTreeElement.prototype.get manifestURL):
        (WebInspector.ApplicationCacheFrameTreeElement.prototype._refreshTitles):
        (WebInspector.ApplicationCacheFrameTreeElement.prototype.frameNavigated):
        (WebInspector.ApplicationCacheFrameTreeElement.prototype.onselect):

2011-11-10  Andreas Kling  <kling@webkit.org>

        Shrink CSSMutableStyleDeclaration.
        <http://webkit.org/b/72032>

        Reviewed by Antti Koivisto.

        Move m_strictParsing and m_iteratorCount (debug only) up into
        CSSStyleDeclaration, effectively shaving one CPU word (4/8 bytes)
        off of every CSSMutableStyleDeclaration.

        * css/CSSMutableStyleDeclaration.cpp:
        (WebCore::CSSMutableStyleDeclaration::CSSMutableStyleDeclaration):
        * css/CSSMutableStyleDeclaration.h:
        * css/CSSStyleDeclaration.cpp:
        (WebCore::CSSStyleDeclaration::CSSStyleDeclaration):
        * css/CSSStyleDeclaration.h:

2011-11-10  Balazs Kelemen  <kbalazs@webkit.org>

        [Qt] X11 plugins need to be reworked for Qt5
        https://bugs.webkit.org/show_bug.cgi?id=70023

        Reviewed by Simon Hausmann.

        Rework our basic plugin support in a way that does
        not need a bridge between Qt and X. The solution is
        based on getting the content drawed by the plugin
        from the server as an image and creating a QImage
        from it.

        No new tests. Existing plugin test are sufficient.

        * Target.pri:
        * bridge/npruntime_internal.h: Added yet another undef
        to fix build with Qt5 + X11 headers.
        * plugins/qt/QtX11ImageConversion.cpp: Added.
        (WebCore::qimageFromXImage):
        * plugins/qt/QtX11ImageConversion.h: Added.
        Added a helper function to create a QImage from an XImage.
        Put it in a new file into WebCore to avoid copyright issues - as
        the code has been taken directly from Qt - and to be able to resuse
        it for the WK1 plugin support in the future.

2011-11-10  Andreas Kling  <kling@webkit.org>

        Cache and reuse HTMLCollections exposed by Document.
        <http://webkit.org/b/71956>

        Reviewed by Antti Koivisto.

        Let Document cache the various HTMLCollection objects it exposes.
        They're created on-demand and stored in a tight Vector.
        This is a behavior change, since the lifetime of returned collections
        is now tied to the lifetime of the Document. However, this matches the
        current behavior of Firefox and Opera.

        This reduces memory consumption by ~800 kB (on 64-bit) when loading
        the full HTML5 spec. document.links was called 34001 times, yielding
        34001 separate HTMLCollections, and now we only need 1.

        The document.all collection retains the old behavior, as caching it
        would be a bit more complicated.

        * dom/Document.cpp:
        (WebCore::Document::Document):
        (WebCore::Document::collection):
        (WebCore::Document::images):
        (WebCore::Document::applets):
        (WebCore::Document::embeds):
        (WebCore::Document::plugins):
        (WebCore::Document::objects):
        (WebCore::Document::scripts):
        (WebCore::Document::links):
        (WebCore::Document::forms):
        (WebCore::Document::anchors):
        * dom/Document.h:
        * html/CollectionType.h:

2011-11-10  Alexander Pavlov  <apavlov@chromium.org>

        Web Inspector: [SuggestBox] Correctly position the box under the first character of the suggestion prefix.
        https://bugs.webkit.org/show_bug.cgi?id=72022

        Reviewed by Pavel Feldman.

        On any suggest box position update (updateSuggestions invocation) an anchor is created at the beginning
        of the user-entered word, and its box is ultimately passed into _updateBoxPosition to be used as the
        actual anchor box (instead of the input element box).

        * inspector/front-end/TextPrompt.js:
        (WebInspector.TextPrompt.prototype._boxForAnchorAtStart):
        (WebInspector.TextPrompt.prototype._completionsReady):
        (WebInspector.TextPrompt.SuggestBox):
        (WebInspector.TextPrompt.SuggestBox.prototype._onscrollresize):
        (WebInspector.TextPrompt.SuggestBox.prototype._updateBoxPositionWithExistingAnchor):
        (WebInspector.TextPrompt.SuggestBox.prototype._updateBoxPosition):
        (WebInspector.TextPrompt.SuggestBox.prototype.updateSuggestions):
        (WebInspector.TextPrompt.SuggestBox.prototype._completionsReady):
        * inspector/front-end/utilities.js:
        (AnchorBox):
        (Element.prototype.offsetRelativeToWindow):

2011-11-10  Ryuan Choi  <ryuan.choi@samsung.com>

        [CMAKE] Refactoring CMakeLists${PORT}.txt to Platform${PORT}.cmake
        https://bugs.webkit.org/show_bug.cgi?id=56705

        Reviewed by Adam Roben.

        No new tests, just renaming CMakeLists*.txt to Platform*.cmake.

        * CMakeLists.txt:
        * PlatformEfl.cmake: Renamed from Source/WebCore/CMakeListsEfl.txt.
        * PlatformWinCE.cmake: Renamed from Source/WebCore/CMakeListsWinCE.txt.

2011-11-10  Andrey Kosyakov  <caseq@chromium.org>

        Web Inspector: wrong JSON.stringify used in webInspector.inspectedWindow.eval() backend
        https://bugs.webkit.org/show_bug.cgi?id=63083

        Reviewed by Pavel Feldman.

        * inspector/front-end/ExtensionAPI.js:
        (injectedExtensionAPI.InspectedWindow.prototype.eval):
        * inspector/front-end/ExtensionServer.js:
        (WebInspector.ExtensionServer.prototype._onEvaluateOnInspectedPage):

2011-11-10  Florin Malita  <fmalita@google.com>

        SVG object covers CSS background in HTML foreignObject
        https://bugs.webkit.org/show_bug.cgi?id=58417

        Reviewed by Simon Fraser.

        Test: svg/foreignObject/background-render-phase.html

        * rendering/svg/RenderSVGForeignObject.cpp:
        (WebCore::RenderSVGForeignObject::paint):

            Paint SVG foreign objects atomically, following the same pattern as
            http://trac.webkit.org/browser/trunk/Source/WebCore/rendering/InlineBox.cpp#L209.

2011-11-10  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r99851.
        http://trac.webkit.org/changeset/99851
        https://bugs.webkit.org/show_bug.cgi?id=72029

        Patch breaks Qt tests (Requested by schenney on #webkit).

        * svg/SVGElementInstance.cpp:
        (WebCore::SVGElementInstance::~SVGElementInstance):
        (WebCore::SVGElementInstance::clearChildren):
        * svg/SVGElementInstance.h:
        (WebCore::SVGElementInstance::clearUseElements):
        * svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::detachInstance):

2011-11-10  Nikolas Zimmermann  <nzimmermann@rim.com>

        [GTK] svg/as-image/svg-image-change-content-size.xhtml crashes
        https://bugs.webkit.org/show_bug.cgi?id=71932

        Reviewed by Philippe Normand.

        Null check m_page in drawSVGToImageBuffer(), just like all others methods do.
        As drawSVGToImageBuffer() is fired from a timer, it may get into this state under certain conditions, as seen on the 64bit gtk bot.

        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::drawSVGToImageBuffer):

2011-11-10  Nikolas Zimmermann  <nzimmermann@rim.com>

        Not reviewed. Rolling out part of r99854, which didn't belong there.

        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::drawSVGToImageBuffer):

2011-11-10  Nikolas Zimmermann  <nzimmermann@rim.com>

        Move unit resolving for all resources to rendering/
        https://bugs.webkit.org/show_bug.cgi?id=72011

        Reviewed by Andreas Kling.

        Remove maskBoundingBox()/filterBoundingBox(), to avoid doing length resolution in svg/.
        RenderSVGResource* now uses SVGLengthContext::resolveRectangle, to do this while laying out.

        Move linear gradient start/end point, radial gradient focal/center point, radius calculations into
        their RenderSVGResource classes, cleanup code a bit.

        Convert filters to use SVGLengthContext. Fix DRT dumps for filters, while I'm at it, to give
        meaningful values, when objectBoundingBox is used as primitive units, when applying to <text>/<tspan>s.

        Several tests results need rebaselines on all platforms.

        * platform/graphics/filters/Filter.h:
        * rendering/svg/RenderSVGInlineText.h:
        (WebCore::RenderSVGInlineText::objectBoundingBox):
        * rendering/svg/RenderSVGResourceFilter.cpp:
        (WebCore::RenderSVGResourceFilter::buildPrimitives):
        (WebCore::RenderSVGResourceFilter::applyResource):
        (WebCore::RenderSVGResourceFilter::resourceBoundingBox):
        * rendering/svg/RenderSVGResourceFilter.h:
        * rendering/svg/RenderSVGResourceFilterPrimitive.cpp:
        (WebCore::RenderSVGResourceFilterPrimitive::determineFilterPrimitiveSubregion):
        * rendering/svg/RenderSVGResourceGradient.cpp:
        (WebCore::RenderSVGResourceGradient::applyResource):
        * rendering/svg/RenderSVGResourceGradient.h:
        * rendering/svg/RenderSVGResourceLinearGradient.cpp:
        (WebCore::RenderSVGResourceLinearGradient::startPoint):
        (WebCore::RenderSVGResourceLinearGradient::endPoint):
        (WebCore::RenderSVGResourceLinearGradient::buildGradient):
        * rendering/svg/RenderSVGResourceLinearGradient.h:
        * rendering/svg/RenderSVGResourceMasker.cpp:
        (WebCore::RenderSVGResourceMasker::resourceBoundingBox):
        * rendering/svg/RenderSVGResourceRadialGradient.cpp:
        (WebCore::RenderSVGResourceRadialGradient::centerPoint):
        (WebCore::RenderSVGResourceRadialGradient::focalPoint):
        (WebCore::RenderSVGResourceRadialGradient::radius):
        (WebCore::RenderSVGResourceRadialGradient::adjustFocalPointIfNeeded):
        (WebCore::RenderSVGResourceRadialGradient::buildGradient):
        * rendering/svg/RenderSVGResourceRadialGradient.h:
        * rendering/svg/SVGRenderTreeAsText.cpp:
        (WebCore::writeSVGResourceContainer):
        * svg/SVGFilterElement.cpp:
        * svg/SVGFilterElement.h:
        * svg/SVGFilterPrimitiveStandardAttributes.cpp:
        (WebCore::SVGFilterPrimitiveStandardAttributes::setStandardAttributes):
        * svg/SVGFilterPrimitiveStandardAttributes.h:
        * svg/SVGLinearGradientElement.cpp:
        * svg/SVGLinearGradientElement.h:
        * svg/SVGMaskElement.cpp:
        * svg/SVGMaskElement.h:
        * svg/SVGRadialGradientElement.cpp:
        * svg/SVGRadialGradientElement.h:
        * svg/graphics/filters/SVGFilter.h:
        (WebCore::SVGFilter::filterRegionInUserSpace):

2011-11-10  Stephen Chenney  <schenney@chromium.org>

        Null deref when no use element exists for SVG element instance
        https://bugs.webkit.org/show_bug.cgi?id=59136

        Cleans up the object when it is detached from the shadow DOM tree,
        rather than leaving it in a half-clean state with some nulled
        references but not others.

        Reviewed by Nikolas Zimmermann.

        Test: svg/custom/element-instance-held-by-js-crash.svg

        * svg/SVGElementInstance.cpp:
        (WebCore::SVGElementInstance::~SVGElementInstance): Added a call to
        detach to clean up if deletion happens without a prior detach call (as
        when an entire tree is removed).
        (WebCore::SVGElementInstance::detach): New method that replaces other
        clean-up methods when the instance is removed from the shadow DOM.
        * svg/SVGElementInstance.h: Added new detach method and removed
        unnecessary clear methods.
        * svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::detachInstance): Changed calls to clear to
        instead detach.

2011-11-10  Alexander Pavlov  <apavlov@chromium.org>

        Web Inspector: Show media queries associated with specific CSS rules
        https://bugs.webkit.org/show_bug.cgi?id=65626

        Reviewed by Pavel Feldman.

        Test: inspector/styles/media-queries.html

        * css/CSSGrammar.y:
        * css/CSSParser.cpp:
        (WebCore::CSSParser::updateLastMediaLine):
        * css/CSSParser.h:
        * css/MediaList.cpp:
        (WebCore::MediaList::MediaList):
        * css/MediaList.h:
        (WebCore::MediaList::lastLine):
        (WebCore::MediaList::setLastLine):
        * inspector/Inspector.json:
        * inspector/InspectorCSSAgent.cpp:
        (WebCore::InspectorCSSAgent::bindStyleSheet):
        (WebCore::InspectorCSSAgent::viaInspectorStyleSheet):
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::documentURLString):
        * inspector/InspectorDOMAgent.h:
        * inspector/InspectorStyleSheet.cpp:
        (WebCore::buildMediaObject):
        (WebCore::fillMediaListChain):
        (WebCore::InspectorStyleSheet::buildObjectForRule):
        * inspector/front-end/CSSStyleModel.js:
        (WebInspector.CSSRule):
        (WebInspector.CSSMedia):
        (WebInspector.CSSMedia.parsePayload):
        (WebInspector.CSSMedia.parseMediaArrayPayload):
        * inspector/front-end/ResourceUtils.js:
        (WebInspector.linkifyResourceAsNode):
        * inspector/front-end/StylesSidebarPane.js:
        (WebInspector.StylesSidebarPane.prototype._rebuildUpdate):
        (WebInspector.StylesSidebarPane.prototype._rebuildStyleRules):
        (WebInspector.StylePropertiesSection.prototype._handleEmptySpaceDoubleClick):
        (WebInspector.StylePropertiesSection.prototype.editingSelectorCommitted.successCallback):
        (WebInspector.StylePropertiesSection.prototype.editingSelectorCommitted):
        * inspector/front-end/elementsPanel.css:
        (.styles-section .header .title .media, .styles-section .header .title .media .subtitle):
        (.styles-section .header .subtitle):

2011-11-10  Alexander Pavlov  <apavlov@chromium.org>

        Web Inspector: [SuggestBox] Do not display suggest box if editing in the middle of prompt unless a stop character follows
        https://bugs.webkit.org/show_bug.cgi?id=72018

        Reviewed by Pavel Feldman.

        * inspector/front-end/TextPrompt.js:
        (WebInspector.TextPrompt.prototype.complete):

2011-11-10  Pavel Feldman  <pfeldman@google.com>

        Web Inspector: do not highlight files larger than 10KLOC.
        https://bugs.webkit.org/show_bug.cgi?id=72025

        This is a temporary measure while I am improving the highlighter
        footprint. Otherwise, highlighting pretty printed Gmail takes ~1.3G of RAM.

        Reviewed by Yury Semikhatsky.

        * inspector/front-end/TextEditorHighlighter.js:
        (WebInspector.TextEditorHighlighter.prototype.highlight):
        (WebInspector.TextEditorHighlighter.prototype.updateHighlight):
        * inspector/front-end/UISourceCode.js:
        (WebInspector.UISourceCode.prototype._didRequestContent):

2011-11-10  Alpha Lam  <hclam@chromium.org>

        [chromium] Scroll deltas are cleared during commit to the main thread
        https://bugs.webkit.org/show_bug.cgi?id=71916

        Reviewed by James Robinson.

        The patch keeps the scroll deltas and scroll position unchanged when
        committing to the main thread. After commit has completed on the main
        thread the submitted scroll deltas are then subtracted from the current
        scroll deltas on the impl thread.

        Doing so allow scroll deltas to be available at all time which enables
        proper positioning for layers that are fixed-positioned to the
        container layer.

        This patch is tested by the following unit tests:
        - CCLayerTreeHostImplTest.scrollDeltaRepeatedScrolls
          This test is modified to verify that scroll deltas and scroll position
          are unchanged during commit. And then after commit scroll deltas are
          subtracted correctly.

        - CCLayerTreeHostTestScrollSimple.runMultiThread and
          CCLayerTreeHostTestScrollMultipleRedraw.runMultiThread
          These tests verifies that scroll deltas made on impl thread are
          committed to the main thread. The scroll deltas is eventually delegated
          to CCLayerTreeHostClient. When commit has completed the scroll deltas
          are subtracted correctly. There's no change to these two tests but they
          verify this patch maintains the overall behavior of scrolling.

        * platform/graphics/chromium/LayerChromium.cpp:
        (WebCore::LayerChromium::applyScrollAndScale):
        * platform/graphics/chromium/LayerChromium.h:
        * platform/graphics/chromium/cc/CCLayerImpl.cpp:
        (WebCore::CCLayerImpl::applyScrollAndScale):
        * platform/graphics/chromium/cc/CCLayerImpl.h:
        * platform/graphics/chromium/cc/CCLayerTreeHost.cpp:
        * platform/graphics/chromium/cc/CCLayerTreeHost.h:
        * platform/graphics/chromium/cc/CCLayerTreeHostCommon.cpp:
        (WebCore::applyScrollAndScaleInternal):
        (WebCore::CCLayerTreeHostCommon::applyScrollAndScale):
        * platform/graphics/chromium/cc/CCLayerTreeHostCommon.h:
        * platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:
        (WebCore::CCLayerTreeHostImpl::processScrollDeltas):
        * platform/graphics/chromium/cc/CCThreadProxy.cpp:
        (WebCore::CCThreadProxy::beginFrameAndCommit):
        (WebCore::CCThreadProxy::beginFrameCompleteOnImplThread):
        * platform/graphics/chromium/cc/CCThreadProxy.h:

2011-11-10  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix make distcheck build.

        * GNUmakefile.am: Add missing files.
        * GNUmakefile.list.am: Ditto.

2011-11-10  Nikolas Zimmermann  <nzimmermann@rim.com>

        Deploy SVGLengthContext in more places
        https://bugs.webkit.org/show_bug.cgi?id=72012

        Reviewed by Simon Hausmann.

        Doesn't affect any tests.

        * svg/SVGAnimatedLength.cpp:
        (WebCore::SVGAnimatedLengthAnimator::calculateFromAndByValues):
        (WebCore::SVGAnimatedLengthAnimator::calculateAnimatedValue):
        (WebCore::SVGAnimatedLengthAnimator::calculateDistance):
        * svg/SVGAnimatedLengthList.cpp:
        (WebCore::SVGAnimatedLengthListAnimator::calculateFromAndByValues):
        (WebCore::SVGAnimatedLengthListAnimator::calculateAnimatedValue):

2011-11-10  Nikolas Zimmermann  <nzimmermann@rim.com>

        Not reviewed. Fix build.

        * WebCore.gypi: Need to add rendering/svg/SVGPathData.* in another place as well, cr-bots are not compiling it and thus fail linking.

2011-11-10  Nikolas Zimmermann  <nzimmermann@rim.com>

        Remove virtual toPathData() method from all graphics elements
        https://bugs.webkit.org/show_bug.cgi?id=72009

        Reviewed by Zoltan Herczeg.

        In bug 71780, SVGLengthContext was introduced, to allow to resolve SVGLengths against arbitary viewports.
        SVGLength::value(), which needs a SVGLengthContext, is still used all over svg/ - that should be changed, as rendering/
        should resolve these lengths, as HTML does it using Length & RenderStyles for CSS.

        As first step, move the #1 client of the SVGLength::value() methods - toPathData() out of svg/ into rendering/svg/SVGPathData
        as free-function, replacing the virtual toPathData() function from SVGStyledTransformableElement.

        Doesn't affect any tests.

        * CMakeLists.txt: Add rendering/svg/SVGPathData.* to build.
        * GNUmakefile.list.am: Ditto.
        * Target.pri: Ditto.
        * WebCore.gypi: Ditto.
        * WebCore.vcproj/WebCore.vcproj: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Ditto.
        * rendering/svg/RenderSVGAllInOne.cpp: Ditto.
        * rendering/svg/RenderSVGPath.cpp:
        (WebCore::RenderSVGPath::layout): Use "updatePathFromGraphicsElement(element, m_path)" instead of "element->toPathData(m_path)", avoiding a virtual call.
        * rendering/svg/RenderSVGTextPath.cpp:
        (WebCore::RenderSVGTextPath::layoutPath): Ditto.
        * rendering/svg/SVGPathData.cpp: Added.
        (WebCore::updatePathFromCircleElement):
        (WebCore::updatePathFromEllipseElement):
        (WebCore::updatePathFromLineElement):
        (WebCore::updatePathFromPathElement):
        (WebCore::updatePathFromPolygonElement):
        (WebCore::updatePathFromPolylineElement):
        (WebCore::updatePathFromRectElement):
        (WebCore::updatePathFromGraphicsElement):
        * rendering/svg/SVGPathData.h: Added.
        * svg/SVGAnimateMotionElement.cpp:
        (WebCore::SVGAnimateMotionElement::animationPath): Use updatePathFromGraphicsElement instead of toPathData.
        * svg/SVGCircleElement.cpp: Remove toPathData() virtual method.
        * svg/SVGCircleElement.h: Ditto.
        * svg/SVGEllipseElement.cpp: Ditto.
        * svg/SVGEllipseElement.h: Ditto.
        * svg/SVGLineElement.cpp: Ditto.
        * svg/SVGLineElement.h: Ditto.
        * svg/SVGPathElement.cpp: Ditto.
        * svg/SVGPathElement.h: Ditto.
        * svg/SVGPolygonElement.cpp: Ditto.
        * svg/SVGPolygonElement.h: Ditto.
        * svg/SVGPolylineElement.cpp: Ditto.
        * svg/SVGPolylineElement.h: Ditto.
        * svg/SVGRectElement.cpp: Ditto.
        * svg/SVGRectElement.h: Ditto.
        * svg/SVGStyledTransformableElement.cpp:
        (WebCore::SVGStyledTransformableElement::toClipPath): Use updatePathFromGraphicsElement instead of toPathData.
        * svg/SVGStyledTransformableElement.h: Remove toPathData() virtual method.

2011-11-09  Andrey Kosyakov  <caseq@chromium.org>

        Web Inspector: [refactoring] get rid of JavaScriptSourceFrameDelegate
        https://bugs.webkit.org/show_bug.cgi?id=71922

        Reviewed by Pavel Feldman.

        * inspector/front-end/JavaScriptSourceFrame.js:
        (WebInspector.JavaScriptSourceFrame):
        (WebInspector.JavaScriptSourceFrame.prototype.suggestedFileName):
        (WebInspector.JavaScriptSourceFrame.prototype._onContentChanged):
        (WebInspector.JavaScriptSourceFrame.prototype.setReadOnly):
        (WebInspector.JavaScriptSourceFrame.prototype.populateLineGutterContextMenu.addConditionalBreakpoint.didEditBreakpointCondition):
        (WebInspector.JavaScriptSourceFrame.prototype.populateLineGutterContextMenu.):
        (WebInspector.JavaScriptSourceFrame.prototype.populateTextAreaContextMenu):
        (WebInspector.JavaScriptSourceFrame.prototype.beforeTextChanged):
        (WebInspector.JavaScriptSourceFrame.prototype.didEditContent):
        (WebInspector.JavaScriptSourceFrame.prototype._setBreakpoint):
        (WebInspector.JavaScriptSourceFrame.prototype._onMouseDown):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype.activateBreakpoints):
        (WebInspector.ScriptsPanel.prototype.folderAndDisplayNameForScriptURL):
        (WebInspector.ScriptsPanel.prototype.setScriptSourceIsBeingEdited):
        (WebInspector.ScriptsPanel.prototype._createSourceFrame):
        (WebInspector.ScriptsPanel.prototype._toggleFormatSource):
        (WebInspector.ScriptsPanel.prototype.addToWatch):

2011-11-10  Jay Civelli  <jcivelli@chromium.org>

        Fix progress load reporting for MHTML documents.

        MHTML documents containing references to resources they don't include
        never finish loading.
        https://bugs.webkit.org/show_bug.cgi?id=71859

        Reviewed by Adam Barth.

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::scheduleArchiveLoad):

2011-11-10  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] Fix linking with --whole-archive

        Reviewed by Zoltan Herczeg.

        Compile XMLTreeViewer and related files when XSLT is enabled, not
        when XSLT _and_ USE_LIBXML2. The files do not depend on libxml2, they
        are #ifdeffed with ENABLE(XSLT) only, and they are referenced from for
        example NewXMLDocumentParser.cpp from within XSLT blocks.

        * DerivedSources.pri:
        * Target.pri:

2011-11-01  Pavel Podivilov  <podivilov@chromium.org>

        Web Inspector: load source maps via front-end host.
        https://bugs.webkit.org/show_bug.cgi?id=71301

        Reviewed by Yury Semikhatsky.

        Currently we use an auxiliary iframe hack to load source map files from inspector page. This approach has several drawbacks:
         - in addition to source map url we need to know auxiliary iframe url
         - we need a protocol to communicate with iframe
         - source map provider needs to provide auxiliary document to make our hack work
        Loading source maps from front-end host solves all problems.

        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * inspector/InspectorFrontendHost.cpp:
        (WebCore::InspectorFrontendHost::loadResourceSynchronously):
        * inspector/InspectorFrontendHost.h:
        * inspector/InspectorFrontendHost.idl:
        * inspector/front-end/CompilerSourceMapping.js:
        (WebInspector.ClosureCompilerSourceMapping):
        (WebInspector.ClosureCompilerSourceMapping.prototype.load):
        (WebInspector.ClosureCompilerSourceMapping.prototype.loadSourceCode):
        (WebInspector.ClosureCompilerSourceMapping.prototype._parseMappingPayload):
        * inspector/front-end/CompilerSourceMappingProvider.js: Removed.
        * inspector/front-end/ContentProviders.js:
        (WebInspector.CompilerSourceMappingContentProvider):
        (WebInspector.CompilerSourceMappingContentProvider.prototype.requestContent):
        * inspector/front-end/RawSourceCode.js:
        (WebInspector.RawSourceCode.prototype.setCompilerSourceMapping):
        (WebInspector.RawSourceCode.prototype._resourceFinished):
        (WebInspector.RawSourceCode.prototype._createSourceMapping.didLoadSourceMapping):
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/inspector.html:
        * inspector/front-end/inspector.js:
        (WebInspector.installSourceMappingForTest):

2011-11-10  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r99816.
        http://trac.webkit.org/changeset/99816
        https://bugs.webkit.org/show_bug.cgi?id=72003

        compilation failed on mac (Requested by loislo on #webkit).

        * html/HTMLAttributeNames.in:
        * html/HTMLInputElement.idl:
        * html/HTMLTextAreaElement.cpp:
        (WebCore::HTMLTextAreaElement::appendFormData):
        * html/HTMLTextAreaElement.idl:
        * html/HTMLTextFormControlElement.cpp:
        * html/HTMLTextFormControlElement.h:
        * html/TextFieldInputType.cpp:
        * html/TextFieldInputType.h:

2011-11-09  Pavel Feldman  <pfeldman@google.com>

        Web Inspector: console does not work after switching panel while editing.
        https://bugs.webkit.org/show_bug.cgi?id=71918

        Reviewed by Yury Semikhatsky.

        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame.prototype.wasShown):
        (WebInspector.SourceFrame.prototype.willHide):

2011-11-09  Rakesh KN  <rakesh.kn@motorola.com>

        Need support for dirname attribute
        https://bugs.webkit.org/show_bug.cgi?id=65542

        Reviewed by Eric Seidel.

        Implemented 'dirname' form attribute.

        Tests: fast/forms/form-dirname-attribute.html
               fast/forms/submit-form-with-dirname-attribute-with-ancestor-dir-attribute.html
               fast/forms/submit-form-with-dirname-attribute-with-nonhtml-ancestor.html
               fast/forms/submit-form-with-dirname-attribute.html

        * html/HTMLAttributeNames.in:
        Added "dirname" attribute.
        * html/HTMLInputElement.idl:
        Add "dirName" property to HTMLInputElement interface.
        * html/HTMLTextAreaElement.cpp:
        (WebCore::HTMLTextAreaElement::appendFormData):
        Append dirname form data.
        * html/HTMLTextAreaElement.idl:
        Add "dirName" property to HTMLTextAreaElement interface.
        * html/HTMLTextFormControlElement.cpp:
        (WebCore::parentHTMLElement):
        Helper function which returns only HTML parent element.
        (WebCore::HTMLTextFormControlElement::directionForFormData):
        Helper function for finding directionality of the Element.
        * html/HTMLTextFormControlElement.h:
        Helper function for finding directionality of the Element.
        * html/TextFieldInputType.cpp:
        (WebCore::TextFieldInputType::appendFormData):
        Append dirname form data.
        * html/TextFieldInputType.h:
        Append dirname form data.

2011-11-09  Shinya Kawanaka  <shinyak@google.com>

        Internals.markerRangeForNode should be able to take markers by specifying a marker type.
        https://bugs.webkit.org/show_bug.cgi?id=71792

        Reviewed by Hajime Morita.

        Test: editing/spelling/markers.html

        * WebCore.exp.in:
        * dom/DocumentMarkerController.cpp:
        (WebCore::DocumentMarkerController::markersFor):
          Takes marker types to get only necessary markers.
        * dom/DocumentMarkerController.h:
        * testing/Internals.cpp:
        (WebCore::markerTypesFrom): Added.
        (WebCore::Internals::markerCountForNode):
          Takes marker types to get only necessary markers.
        (WebCore::Internals::markerRangeForNode): ditto.
        * testing/Internals.h:
        * testing/Internals.idl:

2011-11-09  David Reveman  <reveman@chromium.org>

        [Chromium] Add support for painting into an SkPicture and then rasterizing into tile-sized chunks.
        https://bugs.webkit.org/show_bug.cgi?id=71388

        Reviewed by James Robinson.

        Add UpdatableTexture class, which allows texture updater to
        allocate tile specific resources and paint tiles separately.
        Rename texture uploader classes and move them to separate files.

        No new tests. Covered by existing tests.

        * WebCore.gypi:
        * platform/graphics/chromium/BitmapCanvasLayerTextureUpdater.cpp: Added.
        (WebCore::BitmapCanvasLayerTextureUpdater::Texture::Texture):
        (WebCore::BitmapCanvasLayerTextureUpdater::Texture::~Texture):
        (WebCore::BitmapCanvasLayerTextureUpdater::Texture::updateRect):
        (WebCore::BitmapCanvasLayerTextureUpdater::create):
        (WebCore::BitmapCanvasLayerTextureUpdater::BitmapCanvasLayerTextureUpdater):
        (WebCore::BitmapCanvasLayerTextureUpdater::~BitmapCanvasLayerTextureUpdater):
        (WebCore::BitmapCanvasLayerTextureUpdater::createTexture):
        (WebCore::BitmapCanvasLayerTextureUpdater::sampledTexelFormat):
        (WebCore::BitmapCanvasLayerTextureUpdater::prepareToUpdate):
        (WebCore::BitmapCanvasLayerTextureUpdater::updateTextureRect):
        * platform/graphics/chromium/BitmapCanvasLayerTextureUpdater.h: Copied from Source/WebCore/platform/graphics/chromium/LayerTextureUpdater.h.
        (WebCore::BitmapCanvasLayerTextureUpdater::Texture::textureUpdater):
        (WebCore::BitmapCanvasLayerTextureUpdater::orientation):
        * platform/graphics/chromium/ContentLayerChromium.cpp:
        (WebCore::ContentLayerChromium::createTextureUpdater):
        * platform/graphics/chromium/FrameBufferSkPictureCanvasLayerTextureUpdater.cpp: Renamed from Source/WebCore/platform/graphics/chromium/LayerTextureUpdaterCanvas.cpp.
        (WebCore::FrameBuffer::FrameBuffer::FrameBuffer):
        (WebCore::FrameBuffer::FrameBuffer::~FrameBuffer):
        (WebCore::FrameBuffer::FrameBuffer::initialize):
        (WebCore::FrameBufferSkPictureCanvasLayerTextureUpdater::Texture::Texture):
        (WebCore::FrameBufferSkPictureCanvasLayerTextureUpdater::Texture::~Texture):
        (WebCore::FrameBufferSkPictureCanvasLayerTextureUpdater::Texture::updateRect):
        (WebCore::FrameBufferSkPictureCanvasLayerTextureUpdater::create):
        (WebCore::FrameBufferSkPictureCanvasLayerTextureUpdater::FrameBufferSkPictureCanvasLayerTextureUpdater):
        (WebCore::FrameBufferSkPictureCanvasLayerTextureUpdater::~FrameBufferSkPictureCanvasLayerTextureUpdater):
        (WebCore::FrameBufferSkPictureCanvasLayerTextureUpdater::createTexture):
        (WebCore::FrameBufferSkPictureCanvasLayerTextureUpdater::sampledTexelFormat):
        (WebCore::FrameBufferSkPictureCanvasLayerTextureUpdater::updateTextureRect):
        * platform/graphics/chromium/FrameBufferSkPictureCanvasLayerTextureUpdater.h: Copied from Source/WebCore/platform/graphics/chromium/LayerTextureUpdater.h.
        (WebCore::FrameBufferSkPictureCanvasLayerTextureUpdater::Texture::textureUpdater):
        (WebCore::FrameBufferSkPictureCanvasLayerTextureUpdater::orientation):
        * platform/graphics/chromium/ImageLayerChromium.cpp:
        (WebCore::ImageLayerTextureUpdater::Texture::Texture):
        (WebCore::ImageLayerTextureUpdater::Texture::updateRect):
        (WebCore::ImageLayerTextureUpdater::Texture::textureUpdater):
        (WebCore::ImageLayerTextureUpdater::createTexture):
        (WebCore::ImageLayerTextureUpdater::prepareToUpdate):
        * platform/graphics/chromium/LayerRendererChromium.cpp:
        * platform/graphics/chromium/LayerTextureUpdater.h:
        (WebCore::LayerTextureUpdater::Texture::~Texture):
        (WebCore::LayerTextureUpdater::Texture::texture):
        (WebCore::LayerTextureUpdater::Texture::prepareRect):
        (WebCore::LayerTextureUpdater::Texture::Texture):
        (WebCore::LayerTextureUpdater::prepareToUpdate):
        * platform/graphics/chromium/LayerTextureUpdaterCanvas.h: Removed.
        * platform/graphics/chromium/SkPictureCanvasLayerTextureUpdater.cpp: Copied from Source/WebCore/platform/graphics/chromium/cc/CCTextureUpdater.h.
        (WebCore::SkPictureCanvasLayerTextureUpdater::SkPictureCanvasLayerTextureUpdater):
        (WebCore::SkPictureCanvasLayerTextureUpdater::~SkPictureCanvasLayerTextureUpdater):
        (WebCore::SkPictureCanvasLayerTextureUpdater::prepareToUpdate):
        (WebCore::SkPictureCanvasLayerTextureUpdater::drawPicture):
        * platform/graphics/chromium/SkPictureCanvasLayerTextureUpdater.h: Copied from Source/WebCore/platform/graphics/chromium/cc/CCTextureUpdater.h.
        * platform/graphics/chromium/TiledLayerChromium.cpp:
        (WebCore::UpdatableTile::UpdatableTile):
        (WebCore::UpdatableTile::texture):
        (WebCore::UpdatableTile::managedTexture):
        (WebCore::TiledLayerChromium::updateCompositorResources):
        (WebCore::TiledLayerChromium::pushPropertiesTo):
        (WebCore::TiledLayerChromium::createTile):
        (WebCore::TiledLayerChromium::protectTileTextures):
        (WebCore::TiledLayerChromium::prepareToUpdate):
        * platform/graphics/chromium/cc/CCTextureUpdater.cpp:
        (WebCore::CCTextureUpdater::append):
        (WebCore::CCTextureUpdater::update):
        * platform/graphics/chromium/cc/CCTextureUpdater.h:

2011-11-09  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Unreviewed build fix. Add stub for new method.
        
        * platform/wx/FileSystemWx.cpp:
        (WebCore::openFile):

2011-11-09  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Unreviewed build fix. wx should not be excluded
        from building ScopedFramePaintingState code.

        * page/Frame.cpp:

2011-11-09  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Unreviewed build fix. Don't run 
        fontDataForCombiningCharacterSequence on wx as we don't 
        support it yet.

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

2011-11-09  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Unreviewed build fix. Update how we hash the font after
        changes to the StringHasher APIs.

        * platform/graphics/wx/FontPlatformDataWx.cpp:
        (WebCore::FontPlatformData::computeHash):

2011-11-09  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Unreviewed build fix. Remove from WebDOMEventTarget
        bindings methods that have been removed from EventTarget.

        * bindings/cpp/WebDOMEventTarget.cpp:
        (toWebKit):
        * bindings/cpp/WebDOMEventTarget.h:

2011-11-09  Martin Robinson  <mrobinson@igalia.com>

        [Cairo] Avoid clipping when painting more often
        https://bugs.webkit.org/show_bug.cgi?id=71179

        Reviewed by Xan Lopez.

        No new tests. These changes are covered by existing tests.

        * platform/graphics/Gradient.h: Add a Cairo-specific method
        that gets the platform gradient with a particular alpha value.
        * platform/graphics/cairo/GradientCairo.cpp: Now cache the alpha
        value of the last created platform gradient.
        (WebCore::Gradient::platformGradient): If the cached platform gradient
        has a different alpha value than the one requested, destroy it and start
        over.
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::drawPathShadow): Adjust the source to avoid calling
        cairo_clip/cairo_paint_with_alpha and just do a fill.
        (WebCore::shadowAndFillCurrentCairoPath): No need to clip here. Just
        call cairo_fill.
        * platform/graphics/cairo/PlatformContextCairo.cpp:
        (WebCore::drawPatternToCairoContext): If we have a >= 1 alpha value
        we can simply fill and avoid calling cairo_clip here.
        (WebCore::prepareCairoContextSource): Remove TODO about recreating the
        gradient. No longer need to reduce the gradient source.

2011-11-09  Alexey Proskuryakov  <ap@apple.com>

        <rdar://problem/10423024> WebProcess doesn't use AuthBrokerAgent for proxy credentials
        https://bugs.webkit.org/show_bug.cgi?id=71964

        Reviewed by Darin Adler.

        * platform/network/cf/ResourceHandleCFNet.cpp: (WebCore::ResourceHandle::didReceiveAuthenticationChallenge):
        * platform/network/mac/ResourceHandleMac.mm: (WebCore::ResourceHandle::didReceiveAuthenticationChallenge):
        Don't ask the client for proxy credentials. CFNetwork results are authoritative, and proxy
        credentials are system-wide.

2011-11-09  Daniel Sievers  <sievers@chromium.org>

        [chromium] Fix typo in checkerboarding code
        https://bugs.webkit.org/show_bug.cgi?id=71981

        Reviewed by James Robinson.

        No new tests.

        * platform/graphics/chromium/cc/CCTiledLayerImpl.cpp:
        (WebCore::CCTiledLayerImpl::drawTiles):

2011-11-09  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r99782.
        http://trac.webkit.org/changeset/99782
        https://bugs.webkit.org/show_bug.cgi?id=71979

        broke most of the feImage tests (Requested by thorton on
        #webkit).

        * svg/SVGFEImageElement.cpp:
        (WebCore::SVGFEImageElement::parseMappedAttribute):
        (WebCore::SVGFEImageElement::build):

2011-11-09  Kentaro Hara  <haraken@chromium.org>

        Remove [CanBeConstructed] IDL from CodeGenerator{JS,V8}.pm
        https://bugs.webkit.org/show_bug.cgi?id=71938

        Reviewed by Darin Adler.

        Now no IDL files are using [CanBeConstructed] IDL.
        We can safely remove [CanBeConstructed] IDL from CodeGenerator{JS,V8}.pm.

        No tests. No change in behavior.

        * bindings/scripts/CodeGeneratorJS.pm: Removed [CanBeConstructed]-related code.
        (GenerateConstructorDeclaration):
        (GenerateConstructorDefinition):
        * bindings/scripts/CodeGeneratorV8.pm: Ditto.
        (GenerateImplementation):
        * bindings/scripts/test/TestInterface.idl: Removed [CanBeConstructed].
        * bindings/v8/V8Proxy.h: Removed V8Proxy::constructDOMObject and V8Proxy::constructDOMObjectWithScriptExecutionContext, which had been used only by [CanBeConstructed].

2011-11-09  Tim Horton  <timothy_horton@apple.com>

        feImage referencing a primitive draws incorrectly
        https://bugs.webkit.org/show_bug.cgi?id=71731
        <rdar://problem/10408178>

        Reviewed by Simon Fraser.
        
        Don't attempt to resolve an <feImage>'s referenced element until it's used, as it
        may not exist at the time the attribute is set on the <feImage>.
        
        Don't attempt to render an <feImage> if the referenced element is of size 0x0.

        Tests: svg/filters/feImage-reference-svg-primitive.svg
               svg/filters/feImage-zero-size-crash.svg

        * svg/SVGFEImageElement.cpp:
        (WebCore::SVGFEImageElement::parseMappedAttribute):
        (WebCore::SVGFEImageElement::build):

2011-11-09  Dominic Cooney  <dominicc@chromium.org>

        Remove WebGLContextEvent.initEvent method
        https://bugs.webkit.org/show_bug.cgi?id=71720

        Reviewed by Adam Barth.

        The WebGL spec calls this method initWebGLContextEvent, but it may
        adopt a constructor instead. Deleting the initEvent method for now
        since it is definitely wrong and we don't want people to come to
        depend on it.

        No new tests--removing untested code.

        * html/canvas/WebGLContextEvent.cpp:
        * html/canvas/WebGLContextEvent.h:
        * html/canvas/WebGLContextEvent.idl:

2011-11-09  Anders Carlsson  <andersca@apple.com>

        Element::boundsInWindowSpace should be Element::boundsInRootViewSpace
        https://bugs.webkit.org/show_bug.cgi?id=71955

        Reviewed by Sam Weinig.

        Element::boundsInWindowSpace is only used by WebKit2, where the window coordinate space is the
        same as the root view coordinate space. This lets us get rid of another use of contentsToWindow.

        * WebCore.exp.in:
        * dom/Element.cpp:
        (WebCore::Element::boundsInRootViewSpace):
        * dom/Element.h:

2011-11-09  Kentaro Hara  <haraken@chromium.org>

        Unreviewed, rebaseline run-bindings-tests results.

        * bindings/scripts/test/JS/JSTestNamedConstructor.cpp:
        (WebCore::JSTestNamedConstructorConstructor::getOwnPropertyDescriptor):
        (WebCore::JSTestNamedConstructor::getOwnPropertyDescriptor):
        * bindings/scripts/test/JS/JSTestNamedConstructor.h:

2011-11-09  Alexandre Elias  <aelias@google.com>

        [chromium] Add draw-time scale delta to compositor thread
        https://bugs.webkit.org/show_bug.cgi?id=71595

        Reviewed by James Robinson.

        There are two magnify values:
        1. The WebKit-side pageScale value corresponding to the resolution of
           the painted content.
        2. The Impl-side-only scaleDelta value representing the additional
           degree of current magnification, applied as a draw transform.  WebKit
           is never explicitly aware of this value and the only way to change it
           currently is via pinch events (and in the future, double-tap/etc
           events).  At the end of a pinch zoom, we multiply pageScale *
           scaleDelta and tell WebKit to use it as the new pageScale.

        Scroll offsets and max-extents are maintained in pageScale space.
        When the scale changes, we need to take care to convert them to the
        new scale and avoid getting them clamped to the extents at the wrong
        scale.

        I removed maxScrollPosition on the non-impl side because it makes no
        sense to precompute it in the presence of an impl-side zoom.  Replaced
        with a simple 'bool m_scrollable'.

        zoomAnimatorTransform is not used because it currently isn't in the
        branch, and mostly doesn't behave the way we want anyway (it does most
        things in WebKit thread).  We will need to unify these later.

        Also introduce deviceOrPageScaleFactorChanged() call which invalidates
        layers.

        No new tests (filed 71529 to remember to do it later).

        * platform/graphics/chromium/GraphicsLayerChromium.cpp:
        (WebCore::GraphicsLayerChromium::deviceOrPageScaleFactorChanged):
        * platform/graphics/chromium/GraphicsLayerChromium.h:
        * platform/graphics/chromium/LayerChromium.cpp:
        (WebCore::LayerChromium::LayerChromium):
        (WebCore::LayerChromium::setBounds):
        (WebCore::LayerChromium::pushPropertiesTo):
        * platform/graphics/chromium/LayerChromium.h:
        (WebCore::LayerChromium::scrollable):
        (WebCore::LayerChromium::setScrollable):
        (WebCore::LayerChromium::pageScaleChanged):
        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::drawLayersInternal):
        * platform/graphics/chromium/LayerRendererChromium.h:
        (WebCore::LayerRendererChromium::setPageMagnifyTransform):
        * platform/graphics/chromium/NonCompositedContentHost.cpp:
        (WebCore::NonCompositedContentHost::setViewport):
        * platform/graphics/chromium/NonCompositedContentHost.h:
        (WebCore::NonCompositedContentHost::topLevelRootLayer):
        * platform/graphics/chromium/cc/CCLayerImpl.cpp:
        (WebCore::CCLayerImpl::CCLayerImpl):
        * platform/graphics/chromium/cc/CCLayerImpl.h:
        (WebCore::CCLayerImpl::scrollable):
        (WebCore::CCLayerImpl::setScrollable):
        * platform/graphics/chromium/cc/CCLayerTreeHost.cpp:
        (WebCore::CCLayerTreeHost::CCLayerTreeHost):
        (WebCore::CCLayerTreeHost::finishCommitOnImplThread):
        (WebCore::CCLayerTreeHost::setPageScale):
        (WebCore::CCLayerTreeHost::setPageScaleFactorLimits):
        (WebCore::CCLayerTreeHost::applyScrollAndScale):
        * platform/graphics/chromium/cc/CCLayerTreeHost.h:
        (WebCore::CCLayerTreeHost::pageScale):
        * platform/graphics/chromium/cc/CCLayerTreeHostCommon.h:
        * platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:
        (WebCore::CCLayerTreeHostImpl::CCLayerTreeHostImpl):
        (WebCore::CCLayerTreeHostImpl::commitComplete):
        (WebCore::findScrollLayer):
        (WebCore::CCLayerTreeHostImpl::setViewport):
        (WebCore::CCLayerTreeHostImpl::setPageScale):
        (WebCore::CCLayerTreeHostImpl::setScaleDelta):
        (WebCore::CCLayerTreeHostImpl::setPageScaleFactorLimits):
        (WebCore::CCLayerTreeHostImpl::updateMaxScrollPosition):
        (WebCore::CCLayerTreeHostImpl::pinchGestureBegin):
        (WebCore::CCLayerTreeHostImpl::pinchGestureUpdate):
        (WebCore::CCLayerTreeHostImpl::pinchGestureEnd):
        (WebCore::CCLayerTreeHostImpl::processScrollDeltas):
        * platform/graphics/chromium/cc/CCLayerTreeHostImpl.h:
        (WebCore::CCLayerTreeHostImpl::pageScale):
        * platform/graphics/chromium/cc/CCScrollController.h:
        * platform/graphics/chromium/cc/CCSingleThreadProxy.cpp:
        (WebCore::CCSingleThreadProxy::doCommit):
        * platform/graphics/chromium/cc/CCThreadProxy.cpp:
        (WebCore::CCThreadProxy::createBeginFrameAndCommitTaskOnImplThread):
        (WebCore::CCThreadProxy::beginFrameAndCommit):
        * platform/graphics/chromium/cc/CCThreadProxy.h:

2011-11-09  Jay Civelli  <jcivelli@chromium.org>

        Fix MHTML generation to use the QuotedPrintable encoding for text resources.
        This was regressed when we added binary encoding support.
        https://bugs.webkit.org/show_bug.cgi?id=71857

        Reviewed by Adam Barth.

        * loader/archive/mhtml/MHTMLArchive.cpp:
        (WebCore::MHTMLArchive::generateMHTMLData):

2011-11-09  Kentaro Hara  <haraken@chromium.org>

        Replace [CanBeConstructed] IDL with [Constructor] IDL
        https://bugs.webkit.org/show_bug.cgi?id=71927

        Reviewed by Adam Barth.

        With respect to the IDL files that have [CanBeConstructed]
        but do not have [Constructor] nor [CustomConstructor],
        [CanBeConstructed] is now equivalent to [Constructor].
        Thus, this patch replaces [CanBeConstructed] with [Constructor].

        No tests. No change in behavior.

        * fileapi/FileReaderSync.idl: As I described above.
        * fileapi/WebKitBlobBuilder.idl: Ditto.
        * fileapi/WebKitFlags.idl: Ditto.
        * xml/DOMParser.idl: Ditto.
        * xml/XMLSerializer.idl: Ditto.
        * xml/XPathEvaluator.idl: Ditto.

2011-11-09  Noel Gordon  <noel.gordon@gmail.com>

        [chromium] Separate image encoding from dataURL construction
        https://bugs.webkit.org/show_bug.cgi?id=71846

        Reviewed by Adam Barth.

        Remove the implicit assumption that a dataURL is the only desired output format of the
        the image encoding phase.

        No new tests, refactoring only, covered by existing canvas tests.

        * platform/graphics/skia/ImageBufferSkia.cpp:
        (WebCore::encodeImage):  Output the encoded image to a Vector.
        (WebCore::ImageBuffer::toDataURL):  Format the dataURL encoding of the mimeType encoded
        image Vector here.  Move the mimeType encoding debug check here to better align this
        code with the CG (CoreGraphics) ImageBuffer.cpp implementation.
        (WebCore::ImageDataToDataURL): ditto.

2011-11-09  Alexei Svitkine  <asvitkine@chromium.org>

        Chromium: Fix bad rubber-band overhang shadows being drawn in the presence of custom scrollbar css.
        https://bugs.webkit.org/show_bug.cgi?id=71719

        This was caused by the overhang calculation logic not being consistent when subtracting the scrollbar sizes from the overhang areas. This resulted in for e.g. a horizontal overhang that didn't overlap with the scrollbar while the vertical overhang overlapped with it. This fix makes the logic consistent so that the overhang areas do not overlap with the scrollbars (when scrollbars are opaque).

        Reviewed by Beth Dakin.

        Tests: platform/chromium/rubberbanding/custom-scrollbars-ne.html
               platform/chromium/rubberbanding/custom-scrollbars-nw.html
               platform/chromium/rubberbanding/custom-scrollbars-se.html
               platform/chromium/rubberbanding/custom-scrollbars-sw.html

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

2011-11-09  Ken Buchanan  <kenrb@chromium.org>

        Indentation error in RenderObject::container
        https://bugs.webkit.org/show_bug.cgi?id=64780

        Reviewed by Eric Seidel.

        A conditional block was indented too far; correcting.

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::container):

2011-11-09  Anders Carlsson  <andersca@apple.com>

        Use contentsToRootView/rootViewToContents when converting between frame coordinate systems
        https://bugs.webkit.org/show_bug.cgi?id=71947

        Reviewed by Sam Weinig.

        This gets rid of a few calls to contentsToWindow and windowToContents.

        * inspector/DOMNodeHighlighter.cpp:
        * page/DragController.cpp:
        (WebCore::DragController::startDrag):
        (WebCore::DragController::doSystemDrag):
        * page/EventHandler.cpp:
        (WebCore::EventHandler::hitTestResultAtPoint):

2011-11-09  Mark Hahnenberg  <mhahnenberg@apple.com>

        De-virtualize JSObject::getOwnPropertyDescriptor
        https://bugs.webkit.org/show_bug.cgi?id=71523

        Reviewed by Sam Weinig.

        No new tests.

        Added getOwnPropertyDescriptor to the MethodTable, changed all of the 
        virtual versions of getOwnPropertyDescriptor to static ones, and 
        changed all of the call sites to the corresponding lookup in the MethodTable.

        * WebCore.exp.in:
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::getOwnPropertyDescriptor):
        * bindings/js/JSDOMWindowShell.cpp:
        (WebCore::JSDOMWindowShell::getOwnPropertyDescriptor):
        * bindings/js/JSDOMWindowShell.h:
        * bindings/js/JSWorkerContextCustom.cpp:
        (WebCore::JSWorkerContext::getOwnPropertyDescriptorDelegate):
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateGetOwnPropertyDescriptorBody):
        (GenerateHeader):
        (GenerateImplementation):
        (GenerateConstructorDeclaration):
        (GenerateConstructorDefinition):
        * bindings/scripts/test/JS/JSTestInterface.cpp:
        (WebCore::JSTestInterfaceConstructor::getOwnPropertyDescriptor):
        (WebCore::JSTestInterface::getOwnPropertyDescriptor):
        * bindings/scripts/test/JS/JSTestInterface.h:
        * bindings/scripts/test/JS/JSTestMediaQueryListListener.cpp:
        (WebCore::JSTestMediaQueryListListenerConstructor::getOwnPropertyDescriptor):
        (WebCore::JSTestMediaQueryListListenerPrototype::getOwnPropertyDescriptor):
        (WebCore::JSTestMediaQueryListListener::getOwnPropertyDescriptor):
        * bindings/scripts/test/JS/JSTestMediaQueryListListener.h:
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::JSTestObjConstructor::getOwnPropertyDescriptor):
        (WebCore::JSTestObjPrototype::getOwnPropertyDescriptor):
        (WebCore::JSTestObj::getOwnPropertyDescriptor):
        * bindings/scripts/test/JS/JSTestObj.h:
        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp:
        (WebCore::JSTestSerializedScriptValueInterfaceConstructor::getOwnPropertyDescriptor):
        (WebCore::JSTestSerializedScriptValueInterface::getOwnPropertyDescriptor):
        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.h:
        * bridge/objc/objc_runtime.h:
        * bridge/objc/objc_runtime.mm:
        (JSC::Bindings::ObjcFallbackObjectImp::getOwnPropertyDescriptor):
        * bridge/qt/qt_runtime.cpp:
        (JSC::Bindings::QtRuntimeMetaMethod::getOwnPropertyDescriptor):
        (JSC::Bindings::QtRuntimeConnectionMethod::getOwnPropertyDescriptor):
        * bridge/qt/qt_runtime.h:
        * bridge/runtime_array.cpp:
        (JSC::RuntimeArray::getOwnPropertyDescriptor):
        * bridge/runtime_array.h:
        * bridge/runtime_method.cpp:
        (JSC::RuntimeMethod::vtableAnchor): Added to prevent a weak vtable.
        (JSC::RuntimeMethod::getOwnPropertyDescriptor):
        * bridge/runtime_method.h: Changed getOwnPropertyDescriptor from private to protected to allow 
        subclasses to use it in their MethodTables.
        * bridge/runtime_object.cpp:
        (JSC::Bindings::RuntimeObject::getOwnPropertyDescriptor):
        * bridge/runtime_object.h:

2011-11-09  Julien Chaffraix  <jchaffraix@webkit.org>

        REGRESSION (r93614): Content remains despite parent element being scrolled off page using javascript.
        https://bugs.webkit.org/show_bug.cgi?id=71550

        Reviewed by Simon Fraser.

        Tests: fast/repaint/overflow-auto-in-overflow-auto-scrolled.html
               fast/repaint/overflow-hidden-in-overflow-hidden-scrolled.html
               fast/repaint/overflow-scroll-in-overflow-scroll-scrolled.html
               fast/repaint/scroll-inside-table-cell.html
               fast/repaint/scroll-relative-table-inside-table-cell.html
               fast/repaint/table-overflow-auto-in-overflow-auto-scrolled.html
               fast/repaint/table-overflow-hidden-in-overflow-hidden-scrolled.html
               fast/repaint/table-overflow-scroll-in-overflow-scroll-scrolled.html

        The issue was that updateLayerPositionsAfterScroll would not update some layer's
        repaint rectangles. Thus we would not properly repaint (if at all).

        The optimization added in 93614 was short-sighted and missed the fact that tables are a
        special case when it comes to updating the repaint rectangles. When we scroll a layer
        with an overflow clip, most layers *do* need to update their repaint rectangles.

        This changes keeps the optimization for cells as this is the hotest case for tables
        with overflow: hidden on cells but is much more conservative: if we encounter an
        overflow clip, we update the descendant's repaint rectangles.

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::RenderLayer):
        (WebCore::RenderLayer::updateLayerPositionsAfterScroll):
        Refactored the code to use some flags (HasSeenFixedPositionedAncestor and
        HasSeenAncestorWithOverflowClip). Also added an exception if
        m_canSkipRepaintRectsUpdateOnScroll is set.

        * rendering/RenderLayer.h:
        Added a new field when it is fine to not update our repaint rects on scroll.

2011-11-09  Kentaro Hara  <haraken@chromium.org>

        Generate the HTMLAudioElement constructor using [NamedConstructor] IDL
        https://bugs.webkit.org/show_bug.cgi?id=71924

        Reviewed by Adam Barth.

        This patch removes a custom constructor of HTMLAudioElement
        and generates it using [NamedConstructor] IDL.

        Tests:  fast/js/custom-constructors.html
                media/audio-constructor.html
                media/audio-constructor-src.html
                media/audio-constructor-preload.html
                media/audio-controls-do-not-fade-out.html
                media/audio-controls-rendering.html

        * Target.pri: Removed V8HTMLAudioElementConstructor.{h,cpp}
        * WebCore.gypi: Ditto.
        * bindings/v8/custom/V8HTMLAudioElementConstructor.cpp: Removed.
        * bindings/v8/custom/V8HTMLAudioElementConstructor.h: Removed.
        * html/HTMLAudioElement.idl: Added [NamedConstructor] IDL.
        * page/DOMWindow.idl: Removed [V8CustomConstructor] IDL.

2011-11-09  Antti Koivisto  <antti@apple.com>

        Eliminate CSSMutableValue
        https://bugs.webkit.org/show_bug.cgi?id=71811

        Reviewed by Darin Adler, Andreas Kling and Nikolas Zimmerman.

        Remove the implementations of setter functions in SVGColor and SVGPaint. These interfaces are
        deprecated in SVG 1.1 (2nd edition) and are not really used by anybody. This allows
        removal of CSSMutableValue and the associated (rather broken) code.
        
        The setters now throw NO_MODIFICATION_ALLOWED_ERR. 

        * GNUmakefile.list.am:
        * WebCore.gypi:
        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSMutableStyleDeclaration.cpp:
        (WebCore::CSSMutableStyleDeclaration::~CSSMutableStyleDeclaration):
        * css/CSSMutableValue.h: Removed.
        * css/CSSStyleDeclaration.cpp:
        (WebCore::CSSStyleDeclaration::getPropertyCSSValue):
        * css/CSSValue.h:
        (WebCore::CSSValue::CSSValue):
        * svg/SVGColor.cpp:
        (WebCore::SVGColor::SVGColor):
        (WebCore::SVGColor::setRGBColor):
        (WebCore::SVGColor::setRGBColorICCColor):
        (WebCore::SVGColor::setColor):
        * svg/SVGColor.h:
        * svg/SVGPaint.cpp:
        (WebCore::SVGPaint::setUri):
        (WebCore::SVGPaint::setPaint):
        * svg/SVGPaint.h:

2011-11-09  Kentaro Hara  <haraken@chromium.org>

        Generate the HTMLOptionElement constructor using [NamedConstructor] IDL
        https://bugs.webkit.org/show_bug.cgi?id=71925

        Reviewed by Adam Barth.

        This patch removes a custom constructor of HTMLOptionElement,
        and generates it using [NamedConstructor] IDL.

        Tests: fast/js/custom-constructors.html
               fast/forms/option-index.html
               fast/forms/add-and-remove-option.html
               fast/dom/dom-add-optionelement.html

        * Target.pri: Removed V8HTMLOptionElementConstructor.{h,cpp}
        * WebCore.gypi: Ditto.
        * bindings/v8/custom/V8HTMLOptionElementConstructor.cpp: Removed.
        * bindings/v8/custom/V8HTMLOptionElementConstructor.h: Removed.
        * html/HTMLOptionElement.idl: Added [NamedConstructor] IDL.
        * page/DOMWindow.idl: Removed [V8CustomConstructor] IDL.

2011-11-09  Julien Chaffraix  <jchaffraix@webkit.org>

        Crash in RenderTableSection::splitColumn
        https://bugs.webkit.org/show_bug.cgi?id=70171

        Reviewed by David Hyatt.

        Tests: fast/table/crash-splitColumn-2.html
               fast/table/crash-splitColumn-3.html
               fast/table/crash-splitColumn.html

        The old code would not take into account the fact that each RenderTableSection
        can set its m_needsCellRecalc flag independently of the rest.

        This means that you cannot assume that you can always split or append columns to
        all the sections. Our approach is to skip sections needing cell recalc in several
        parts of the code as they will be properly reset to the table's representations
        during a cell recalc.

        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::splitColumn):
        (WebCore::RenderTable::appendColumn):
        Skip sections needing cell recalc as they will be properly updated later.

        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::addCell):
        Ignore a section needing cell recalc as addCell will be called after sync'ing
        the internal column representation in recalcCells.

        (WebCore::RenderTableSection::recalcCells):
        Clear the flag at the beginning of the function to activate the previous functions.
        Added a comment as to why this is fine.

        (WebCore::RenderTableSection::appendColumn):
        Added an ASSERT. If we need cell recalc, we should NEVER update m_grid outside
        of recalcCells().

2011-11-09  Arko Saha  <arko@motorola.com>

        Microdata: fast/dom/MicroData/itemid-attribute-test.html assertion failure in Element::getURLAttribute().
        https://bugs.webkit.org/show_bug.cgi?id=71510

        Reviewed by Darin Adler.

        Override isURLAttribute() for HTMLElement and return true if attribute is itemidAttr.
        All the classes derived from HTMLElement overrides this function should return true if attribute is itemidAttr.
        Removed HTMLIFrameElement::isURLAttribute() method as HTMLFrameElementBase already takes care of it.

        Test: fast/dom/MicroData/itemid-attribute-test-001.html

        * html/HTMLAnchorElement.cpp:
        (WebCore::HTMLAnchorElement::isURLAttribute):
        * html/HTMLBaseElement.cpp:
        (WebCore::HTMLBaseElement::isURLAttribute):
        * html/HTMLBodyElement.cpp:
        (WebCore::HTMLBodyElement::isURLAttribute):
        * html/HTMLButtonElement.cpp:
        (WebCore::HTMLButtonElement::isURLAttribute):
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::isURLAttribute):
        * html/HTMLElement.h:
        * html/HTMLEmbedElement.cpp:
        (WebCore::HTMLEmbedElement::isURLAttribute):
        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::isURLAttribute):
        * html/HTMLFrameElementBase.cpp:
        (WebCore::HTMLFrameElementBase::isURLAttribute):
        * html/HTMLHtmlElement.cpp:
        (WebCore::HTMLHtmlElement::isURLAttribute):
        * html/HTMLIFrameElement.cpp:
        * html/HTMLIFrameElement.h:
        * html/HTMLImageElement.cpp:
        (WebCore::HTMLImageElement::isURLAttribute):
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::isURLAttribute):
        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::isURLAttribute):
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::isURLAttribute):
        * html/HTMLModElement.cpp:
        (WebCore::HTMLModElement::isURLAttribute):
        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::isURLAttribute):
        * html/HTMLParamElement.cpp:
        (WebCore::HTMLParamElement::isURLAttribute):
        * html/HTMLQuoteElement.cpp:
        (WebCore::HTMLQuoteElement::isURLAttribute):
        * html/HTMLScriptElement.cpp:
        (WebCore::HTMLScriptElement::isURLAttribute):
        * html/HTMLSourceElement.cpp:
        (WebCore::HTMLSourceElement::isURLAttribute):
        * html/HTMLTableCellElement.cpp:
        (WebCore::HTMLTableCellElement::isURLAttribute):
        * html/HTMLTableElement.cpp:
        (WebCore::HTMLTableElement::isURLAttribute):
        * html/HTMLTrackElement.cpp:
        (WebCore::HTMLTrackElement::isURLAttribute):

2011-11-09  Chris Fleizach  <cfleizach@apple.com>

        AX: crash when accessing selectedTab in a tab list
        https://bugs.webkit.org/show_bug.cgi?id=70938

        Reviewed by Beth Dakin.

        There were a few methods accessing m_children directly without first validating that those elements
        needed to be updated (because the layout changed). Changing those to call children() ensures
        that they will have the correct children.

        Test: platform/mac/accessibility/selected-tab-crash.html

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::isChecked):
        (WebCore::AccessibilityRenderObject::selectedRadioButton):
        (WebCore::AccessibilityRenderObject::selectedTabItem):
        (WebCore::AccessibilityRenderObject::ariaListboxVisibleChildren):
        (WebCore::AccessibilityRenderObject::tabChildren):

2011-11-09  Andreas Kling  <kling@webkit.org>

        Shrink HTMLCollection.
        <http://webkit.org/b/71928>

        Reviewed by Darin Adler.

        Rearrange the members of HTMLCollection, effectively shrinking
        it by 16 bytes on 64-bit. This reduces memory consumption
        by 531 kB when loading the full HTML5 spec.

        On 32-bit it shrinks by 8 bytes, saving 265 kB.

        * html/HTMLCollection.cpp:
        (WebCore::HTMLCollection::HTMLCollection):
        * html/HTMLCollection.h:
        (WebCore::HTMLCollection::type):

2011-11-09  Kentaro Hara  <haraken@chromium.org>

        Remove redundant [CanBeConstructed] IDLs
        https://bugs.webkit.org/show_bug.cgi?id=71868

        Reviewed by Adam Barth.

        If a class has [Constructor] or [CustomConstructor],
        then [CanBeConstructed] is not necessary.
        This patch just removes [CanBeConstructed] from all the classes
        that already have [Constructor] or [CustomConstructor].

        No tests. No change in behavior.

        * bindings/scripts/CodeGeneratorV8.pm: Corrected typo. This correction is required for this patch.
        * bindings/scripts/test/V8/V8TestObj.cpp: Updated a run-bindings-tests result.
        (WebCore::ConfigureV8TestObjTemplate):
        * css/WebKitCSSMatrix.idl:
        * dom/BeforeLoadEvent.idl:
        * dom/CustomEvent.idl:
        * dom/ErrorEvent.idl:
        * dom/Event.idl:
        * dom/HashChangeEvent.idl:
        * dom/MessageChannel.idl:
        * dom/MessageEvent.idl:
        * dom/OverflowEvent.idl:
        * dom/PageTransitionEvent.idl:
        * dom/PopStateEvent.idl:
        * dom/ProgressEvent.idl:
        * dom/WebKitAnimationEvent.idl:
        * dom/WebKitMutationObserver.idl:
        * dom/WebKitTransitionEvent.idl:
        * fileapi/FileReader.idl:
        * html/DOMFormData.idl:
        * html/TextTrackCue.idl:
        * html/canvas/ArrayBuffer.idl:
        * html/canvas/DataView.idl:
        * html/canvas/Float32Array.idl:
        * html/canvas/Float64Array.idl:
        * html/canvas/Int16Array.idl:
        * html/canvas/Int32Array.idl:
        * html/canvas/Int8Array.idl:
        * html/canvas/Uint16Array.idl:
        * html/canvas/Uint32Array.idl:
        * html/canvas/Uint8Array.idl:
        * html/track/TrackEvent.idl:
        * mediastream/PeerConnection.idl:
        * page/EventSource.idl:
        * page/WebKitPoint.idl:
        * webaudio/AudioContext.idl:
        * websockets/CloseEvent.idl:
        * websockets/WebSocket.idl:
        * workers/SharedWorker.idl:
        * workers/Worker.idl:
        * xml/XMLHttpRequest.idl:
        * xml/XSLTProcessor.idl:

2011-11-09  Ken Buchanan  <kenrb@chromium.org>

        SVG foreignObject wrong container
        https://bugs.webkit.org/show_bug.cgi?id=64780

        Reviewed by Simon Fraser.

        Resubmitting a patch originally by scottmg@chromium.org.
        In determining where to add to m_positionedObjects during a repaint,
        containingBlock is used, which adds the absolute positioned object to
        the containing foreignObject. But, when the contained object is
        dirtied, container() was used to dirty up the tree, which skipped over
        the foreignObject causing the wrong parent to needsLayout(). This fix
        makes container() and containingBlock() handle svg foreignObject's in
        the same way.

        This patch will cause svg/overflow/overflow-on-foreignObject.svg to
        require rebaselined results on qt and gtk ports.

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::container):

2011-11-09  Andreas Kling  <kling@webkit.org>

        Shrink StyleSheet on 64-bit.
        <http://webkit.org/b/71923>

        Reviewed by Darin Adler.

        Move m_disabled to the top so it folds into the padding at
        the end of RefCounted on 64-bit, shrinking StyleSheet by 8 bytes.

        * css/StyleSheet.cpp:
        (WebCore::StyleSheet::StyleSheet):
        * css/StyleSheet.h:

2011-11-09  Andreas Kling  <kling@webkit.org>

        StyleSheet: Devirtualize styleSheetChanged().
        <http://webkit.org/b/71913>

        Reviewed by Antti Koivisto.

        Since this mechanism is only used by CSSStyleSheet, move it there.
        Out-of-lined StyleSheet::setDisabled() so we can do a type check
        before invoking it from there.

        * css/CSSStyleSheet.h:
        * css/StyleSheet.cpp:
        (WebCore::StyleSheet::setDisabled):
        * css/StyleSheet.h:

2011-11-09  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] Unreviewed, adding missing files to the build.

        * Target.pri: Add ContentTypeParser.cpp/h

2011-11-09  Andrey Kosyakov  <caseq@chromium.org>

        Web Inspector: [refactoring] remove a bunch of methods from JavaScriptSourceFrameDelegate
        https://bugs.webkit.org/show_bug.cgi?id=71826

        Reviewed by Pavel Feldman.

        * inspector/front-end/JavaScriptSourceFrame.js:
        (WebInspector.JavaScriptSourceFrame):
        (WebInspector.JavaScriptSourceFrame.prototype.requestContent):
        (WebInspector.JavaScriptSourceFrame.prototype.canEditSource):
        (WebInspector.JavaScriptSourceFrame.prototype.editContent):
        (WebInspector.JavaScriptSourceFrame.prototype.populateLineGutterContextMenu.else.editBreakpointCondition.didEditBreakpointCondition):
        (WebInspector.JavaScriptSourceFrame.prototype.populateLineGutterContextMenu.else):
        (WebInspector.JavaScriptSourceFrame.prototype.populateLineGutterContextMenu):
        (WebInspector.JavaScriptSourceFrame.prototype.didEditContent):
        (WebInspector.JavaScriptSourceFrame.prototype._onMouseDown):
        * inspector/front-end/ScriptsPanel.js:

2011-11-09  Pavel Feldman  <pfeldman@google.com>

        Not reviewed: annotate inspector front-end javascript so that it compiled again.

        * inspector/front-end/ShortcutsScreen.js:
        * inspector/front-end/WorkerManager.js:

2011-11-09  Andreas Kling  <kling@webkit.org>

        Unreviewed build fix after r99711. (Signed/unsigned compare.)

        * css/CSSPrimitiveValue.cpp:
        (WebCore::CSSPrimitiveValue::getDoubleValueInternal):

2011-11-09  Alexander Pavlov  <apavlov@chromium.org>

        Web Inspector: Provisionally change StylesSidebarPane section DOM layout to allow media queries
        https://bugs.webkit.org/show_bug.cgi?id=71902

        Reviewed by Pavel Feldman.

        * inspector/front-end/StylesSidebarPane.js:
        (WebInspector.StylePropertiesSection):
        (WebInspector.StylePropertiesSection.prototype.editingSelectorCommitted.successCallback):
        (WebInspector.StylePropertiesSection.prototype.editingSelectorCommitted):
        (WebInspector.ComputedStylePropertiesSection.prototype.rebuildComputedTrace):
        (WebInspector.BlankStylePropertiesSection.prototype.editingSelectorCommitted.successCallback):
        (WebInspector.BlankStylePropertiesSection.prototype.editingSelectorCommitted):

2011-11-09  Andreas Kling  <kling@webkit.org>

        CSSPrimitiveValue: Fix up bitfield member types.
        <http://webkit.org/b/71751>

        Reviewed by Antti Koivisto.

        The primitive unit type doesn't need to be a signed value,
        and by making it unsigned, we can shave one bit off of it.
        Furthermore, m_hasCachedCSSText and m_isQuirkValue should be
        bool, not unsigned.

        * css/CSSValue.h:

2011-11-09  Pavel Feldman  <pfeldman@google.com>

        Web Inspector: discard injected scripts upon front-end disconnect.
        https://bugs.webkit.org/show_bug.cgi?id=71823

        Reviewed by Yury Semikhatsky.

        Test: http/tests/inspector-enabled/injected-script-discard.html

        * inspector/InspectorAgent.cpp:
        (WebCore::InspectorAgent::clearFrontend):

2011-11-09  Andreas Kling  <kling@webkit.org>

        CSS: Remove empty value and rule destructors.
        <http://webkit.org/b/71901>

        Reviewed by Antti Koivisto.

        * css/CSSAspectRatioValue.h:
        * css/CSSBorderImageSliceValue.h:
        (WebCore::CSSBorderImageSliceValue::create):
        * css/CSSBorderImageValue.h:
        (WebCore::CSSBorderImageValue::create):
        * css/CSSCharsetRule.cpp:
        * css/CSSCharsetRule.h:
        * css/CSSCrossfadeValue.h:
        * css/CSSFlexValue.h:
        * css/CSSFontFaceSrcValue.h:
        * css/CSSFunctionValue.h:
        * css/CSSPageRule.cpp:
        * css/CSSPageRule.h:
        * css/CSSUnicodeRangeValue.h:
        * css/CSSValueList.h:
        * css/WebKitCSSFilterValue.h:
        * css/WebKitCSSTransformValue.h:

2011-11-09  Andreas Kling  <kling@webkit.org>

        CSS: Remove redudant WTF_MAKE_FAST_ALLOCATED macros.
        <http://webkit.org/b/71897>

        Reviewed by Antti Koivisto.

        Everything that inherits from RefCounted<T> is already fast-allocated,
        so we don't need this in subclasses.

        * css/CSSImageValue.h:
        * css/CSSImportRule.h:
        * css/WebKitCSSShaderValue.h:

2011-11-09  Igor Oliveira  <igor.oliveira@openbossa.org>

        [TextureMapper] Clean up TextureMapperAnimation constructor
        https://bugs.webkit.org/show_bug.cgi?id=71892

        Remove copyAnimationValue and copyTimingFunction static functions. KeyframeList has
        a copy constructor and it does not need anymore these copy functions.

        Reviewed by Simon Hausmann.

        * platform/graphics/texmap/TextureMapperNode.cpp:
        (WebCore::TextureMapperAnimation::TextureMapperAnimation):

2011-11-09  Alexandru Chiculita  <achicu@adobe.com>

        [Part 1] Parse the custom() function in -webkit-filter
        https://bugs.webkit.org/show_bug.cgi?id=71441

        Added code that parses the custom() function. There's no code
        for the CSSStyleSelector yet, so the only way to test this was to
        check the "styleSheets" rules.

        Reviewed by Dean Jackson.

        Tests: css3/filters/custom-filter-property-parsing-invalid.html
               css3/filters/custom-filter-property-parsing.html

        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::computedFilter):
        * css/CSSParser.cpp:
        (WebCore::filterInfoForName):
        (WebCore::acceptCommaOperator):
        (WebCore::CSSParser::parseCustomFilter):
        (WebCore::CSSParser::parseFilter):
        * css/CSSParser.h:
        * css/CSSStyleSelector.cpp:
        (WebCore::filterOperationForType):
        (WebCore::CSSStyleSelector::createFilterOperations):
        * css/CSSValue.cpp:
        (WebCore::CSSValue::cssText):
        (WebCore::CSSValue::destroy):
        * css/CSSValue.h:
        (WebCore::CSSValue::isWebKitCSSShaderValue):
        * css/CSSValueKeywords.in:
        * css/WebKitCSSFilterValue.cpp:
        (WebCore::WebKitCSSFilterValue::WebKitCSSFilterValue):
        (WebCore::WebKitCSSFilterValue::typeUsesSpaceSeparator):
        (WebCore::WebKitCSSFilterValue::customCssText):
        * css/WebKitCSSFilterValue.h:
        * css/WebKitCSSFilterValue.idl:
        * css/WebKitCSSShaderValue.h: Added.
        (WebCore::WebKitCSSShaderValue::create):
        (WebCore::WebKitCSSShaderValue::WebKitCSSShaderValue):
        * platform/graphics/filters/FilterOperation.h:

2011-11-09  Yury Semikhatsky  <yurys@chromium.org>

        Web Inspector: exception in remote front-end load handler due to undefined reference to workerManager
        https://bugs.webkit.org/show_bug.cgi?id=71889

        Move calls to WorkerManager load handlers into doLoadedDone method which is
        called in case of remote front-end too.

        Reviewed by Pavel Feldman.

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

2011-11-09  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Extract ApplicationCacheModel from ApplicationCacheItemsView.
        https://bugs.webkit.org/show_bug.cgi?id=71850

        Reviewed by Pavel Feldman.

        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * inspector/compile-front-end.sh:
        * inspector/front-end/ApplicationCacheItemsView.js:
        (WebInspector.ApplicationCacheItemsView):
        (WebInspector.ApplicationCacheItemsView.prototype._update):
        * inspector/front-end/ApplicationCacheModel.js: Added.
        (WebInspector.ApplicationCacheModel):
        (WebInspector.ApplicationCacheModel.prototype.getApplicationCachesAsync):
        (WebInspector.ApplicationCacheDispatcher):
        (WebInspector.ApplicationCacheDispatcher.prototype.updateApplicationCacheStatus):
        (WebInspector.ApplicationCacheDispatcher.prototype.updateNetworkState):
        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.ResourcesPanel.prototype.wasShown):
        (WebInspector.ResourcesPanel.prototype.reset):
        (WebInspector.ResourcesPanel.prototype._populateResourceTree):
        (WebInspector.ResourcesPanel.prototype.showApplicationCache):
        (WebInspector.ResourcesPanel.prototype._initializeApplicationCacheModel):
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/inspector.html:

2011-11-09  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: ResourcesPanel should support adding subtitle to any BaseStorageTreeElement.
        https://bugs.webkit.org/show_bug.cgi?id=71848

        Reviewed by Pavel Feldman.

        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.BaseStorageTreeElement.prototype.onattach):
        (WebInspector.BaseStorageTreeElement.prototype.get displayName):
        (WebInspector.BaseStorageTreeElement.prototype._updateDisplayName):
        (WebInspector.BaseStorageTreeElement.prototype._updateTitle):
        (WebInspector.BaseStorageTreeElement.prototype._updateSubtitle):
        (WebInspector.BaseStorageTreeElement.prototype.set titleText):
        (WebInspector.BaseStorageTreeElement.prototype.get subtitleText):
        (WebInspector.BaseStorageTreeElement.prototype.set subtitleText):
        (WebInspector.FrameTreeElement.prototype.frameNavigated):
        (WebInspector.FrameTreeElement.prototype.get itemURL):
        (WebInspector.FrameTreeElement.prototype.onselect):

2011-11-08  Pavel Feldman  <pfeldman@google.com>

        Web Inspector: crash upon InspectorValue serialization that has 0 value / array entry.
        https://bugs.webkit.org/show_bug.cgi?id=71806

        Reviewed by Yury Semikhatsky.

        Test: inspector/elements/resolve-alien-node.html

        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::resolveNode):
        * inspector/InspectorValues.h:
        (WebCore::InspectorObject::setValue):
        (WebCore::InspectorObject::setObject):
        (WebCore::InspectorObject::setArray):
        (WebCore::InspectorArray::pushValue):
        (WebCore::InspectorArray::pushObject):
        (WebCore::InspectorArray::pushArray):

2011-11-08  Andreas Kling  <kling@webkit.org>

        Move CSSPrimitiveValue bitfields up into CSSValue.
        <http://webkit.org/b/71835>

        Reviewed by Darin Adler.

        Move m_type (and rename it to m_primitiveUnitType),
        m_hasCachedCSSText and m_isQuirkValue from CSSPrimitiveValue
        up into CSSValue to share the space.

        This, together with the devirtualization of CSSValue that
        happened on <http://webkit.org/b/71666>, reduces the size
        of CSSPrimitiveValue by one CPU word.

        More specifically, we go from 16 to 12 bytes on 32-bit,
        and from 24 to 16 bytes on 64-bit.

        * css/CSSPrimitiveValue.cpp:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        (WebCore::CSSPrimitiveValue::init):
        (WebCore::CSSPrimitiveValue::cleanup):
        (WebCore::CSSPrimitiveValue::getDoubleValueInternal):
        (WebCore::CSSPrimitiveValue::getStringValue):
        (WebCore::CSSPrimitiveValue::getCounterValue):
        (WebCore::CSSPrimitiveValue::getRectValue):
        (WebCore::CSSPrimitiveValue::getQuadValue):
        (WebCore::CSSPrimitiveValue::getRGBColorValue):
        (WebCore::CSSPrimitiveValue::getPairValue):
        (WebCore::CSSPrimitiveValue::getIdent):
        (WebCore::CSSPrimitiveValue::customCssText):
        (WebCore::CSSPrimitiveValue::addSubresourceStyleURLs):
        * css/CSSPrimitiveValue.h:
        (WebCore::CSSPrimitiveValue::isLength):
        (WebCore::CSSPrimitiveValue::primitiveType):
        (WebCore::CSSPrimitiveValue::setPrimitiveType):
        (WebCore::CSSPrimitiveValue::getCounterValue):
        (WebCore::CSSPrimitiveValue::getRectValue):
        (WebCore::CSSPrimitiveValue::getQuadValue):
        (WebCore::CSSPrimitiveValue::getRGBA32Value):
        (WebCore::CSSPrimitiveValue::getPairValue):
        (WebCore::CSSPrimitiveValue::getDashboardRegionValue):
        (WebCore::CSSPrimitiveValue::getShapeValue):
        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        (WebCore::CSSPrimitiveValue::operator short):
        (WebCore::CSSPrimitiveValue::operator unsigned short):
        (WebCore::CSSPrimitiveValue::operator int):
        (WebCore::CSSPrimitiveValue::operator unsigned):
        (WebCore::CSSPrimitiveValue::operator float):
        (WebCore::CSSPrimitiveValue::operator ColumnSpan):
        * css/CSSValue.h:
        (WebCore::CSSValue::CSSValue):

2011-11-09  Mark Hahnenberg  <mhahnenberg@apple.com>

        De-virtualize JSObject::defineOwnProperty
        https://bugs.webkit.org/show_bug.cgi?id=71429

        Reviewed by Geoffrey Garen.

        No new tests.

        Added defineOwnProperty to the MethodTable, changed all the virtual 
        implementations of defineOwnProperty to static ones, and replaced 
        all call sites with corresponding lookups in the MethodTable.

        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::defineOwnProperty):
        * bindings/js/JSDOMWindowShell.cpp:
        (WebCore::JSDOMWindowShell::defineOwnProperty):
        * bindings/js/JSDOMWindowShell.h:
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateHeader):

2011-11-09  Kentaro Hara  <haraken@chromium.org>

        Make [CanBeConstructed] IDL redundant
        https://bugs.webkit.org/show_bug.cgi?id=71871

        Reviewed by Adam Barth.

        As the first step to remove [CanBeConstructed] IDL completely,
        we need to make [CanBeConstructed] IDL redundant.
        This patch replaces '[CanBeConstructed]' in CodeGeneratorV8.pm
        with '[CanBeConstructed] or [Constructor] or [CustomConstructor] or [V8CustomConstructor]',
        and replaces '[CanBeConstructed]' in CodeGeneratorJS.pm
        with '[CanBeConstructed] or [Constructor] or [CustomConstructor] or [JSCustomConstructor]'

        An example:
            before: '[CanBeConstructed] and ![V8CustomConstructor]'
            after: '([CanBeConstructed] or [Constructor] or [CustomConstructor] or [V8CustomConstructor]) and ![V8CustomConstructor]' <==> '([CanBeConstructed] or [Constructor] or [CustomConstructor]) and ![V8CustomConstructor]'

        Tests: bindings/scripts/test/TestObj.idl

        * bindings/scripts/CodeGeneratorJS.pm: Modified as I described above.
        (GenerateConstructorDeclaration):
        (GenerateConstructorDefinition):
        * bindings/scripts/CodeGeneratorV8.pm: Ditto.
        * bindings/scripts/test/JS/JSTestObj.cpp: Updated a run-bindings-tests result.
        (WebCore::JSTestObjConstructor::constructJSTestObj):
        (WebCore::JSTestObjConstructor::getConstructData):
        * bindings/scripts/test/JS/JSTestObj.h: Ditto.
        * bindings/scripts/test/V8/V8TestObj.cpp: Ditto.
        (WebCore::V8TestObj::constructorCallback):

2011-11-09  Nikolas Zimmermann  <nzimmermann@rim.com>

        svg failures after r99561
        https://bugs.webkit.org/show_bug.cgi?id=71830

        Reviewed by Antti Koivisto.

        Fix regressions in svg/zoom/page/relative-sized-document-scrollbars.svg and svg/zoom/page/zoom-svg-as-relative-image.html.
        Fix merging problem in r99561, bug 71780. It moved several methods from SVGLength to SVGLengthContext, and unfortunately
        the SVGLength changes part of r98852, bug 47156, got reverted again, making these two tests fail.

        * svg/SVGLengthContext.cpp:
        (WebCore::SVGLengthContext::determineViewport):

2011-11-09  Rakesh KN  <rakesh.kn@motorola.com>

        Select multiple options with mouse drag in Select element.
        https://bugs.webkit.org/show_bug.cgi?id=71128

        Reviewed by Ryosuke Niwa.

        Multiple selection of option elements in select element with an mouse drag.
        Other browsers(IE, Firefox, Opera) support this feature.

        Test: fast/forms/select-multiple-elements-with-mouse-drag.html

        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleMouseDraggedEvent):
        Allow auto scroll to be fired if current node(option) under mouse does not have renderer
        but its container node(select) can autoscroll and has renderer for specific case of ListBox

2011-11-09  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] Build system cleanup
        https://bugs.webkit.org/show_bug.cgi?id=71815

        Reviewed by Kenneth Rohde Christiansen.

        * Target.pri: Removed CodeGenHSL.cpp from the angle build. In the angle build the back-end has to
        be either GLSL or HSL, it can't be both. Make a choice for GLSL as that's what it seems to be used for
        at the moment.

2011-11-09  Mark Rowe  <mrowe@apple.com>

        Fix the build.

        * WebCore.exp.in: Export the right symbol names.
        * WebCore.xcodeproj/project.pbxproj: Make the header file available outside of WebCore.

2011-11-08  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] Replace use of QApplication with QGuiApplication
        https://bugs.webkit.org/show_bug.cgi?id=71794

        Reviewed by Andreas Kling.

        * Target.pri: Add compat include dir when compiling with Qt 4.
        * platform/graphics/gstreamer/PlatformVideoWindowQt.cpp:
        (FullScreenVideoWindow::closeEvent): Replace use of QApplication with QGuiApplication.
        (FullScreenVideoWindow::hideCursor): Ditto.
        (FullScreenVideoWindow::showCursor): Ditto.
        * platform/graphics/qt/TileQt.cpp: Remove unnecessary inclusion of QApplication.
        * platform/qt/ClipboardQt.cpp: Replace use of QApplication with QGuiApplication.
        (WebCore::ClipboardQt::ClipboardQt):
        (WebCore::ClipboardQt::clearData):
        (WebCore::ClipboardQt::clearAllData):
        (WebCore::ClipboardQt::setData):
        (WebCore::ClipboardQt::declareAndWriteDragImage):
        (WebCore::ClipboardQt::writeURL):
        (WebCore::ClipboardQt::writeRange):
        (WebCore::ClipboardQt::writePlainText):
        * platform/qt/PasteboardQt.cpp: Ditto.
        (WebCore::Pasteboard::writeSelection):
        (WebCore::Pasteboard::canSmartReplace):
        (WebCore::Pasteboard::plainText):
        (WebCore::Pasteboard::documentFragment):
        (WebCore::Pasteboard::writePlainText):
        (WebCore::Pasteboard::writeURL):
        (WebCore::Pasteboard::writeImage):

2011-11-09  Simon Hausmann  <simon.hausmann@nokia.com>

        Mac Build fix part 2: Oops, use the correct wtf/ prefix for the WTF include.

        * page/SecurityPolicy.cpp:

2011-11-09  Simon Hausmann  <simon.hausmann@nokia.com>

        Prospective build fix for Windows: Include MainThread.h for ASSERT(isMainThread())
        to compile.

        * page/SecurityPolicy.cpp:

2011-11-07  Adam Barth  <abarth@webkit.org>

        Move static "policy" state from SecurityOrigin.cpp to SecurityPolicy.cpp
        https://bugs.webkit.org/show_bug.cgi?id=71755

        Reviewed by Eric Seidel.

        The SecurityOrigin class should be focused on representing a web
        security origin rather than being a dumping ground for all
        security-related state.  This patch moves a bunch of static "policy"
        state into its own SecurityPolicy class.

        * WebCore.exp.in:
        * WebCore.gypi:
        * dom/Document.cpp:
        (WebCore::Document::initSecurityContext):
        * html/HTMLAnchorElement.cpp:
        (WebCore::HTMLAnchorElement::handleClick):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadFrameRequest):
        (WebCore::FrameLoader::loadResourceSynchronously):
        * loader/PingLoader.cpp:
        (WebCore::PingLoader::loadImage):
        (WebCore::PingLoader::sendPing):
        (WebCore::PingLoader::reportContentSecurityPolicyViolation):
        * loader/SubframeLoader.cpp:
        (WebCore::SubframeLoader::loadSubframe):
        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::create):
        * page/SecurityOrigin.cpp:
        (WebCore::SecurityOrigin::canRequest):
        (WebCore::SecurityOrigin::canDisplay):
        (WebCore::SecurityOrigin::grantLoadLocalResources):
        * page/SecurityOrigin.h:

2011-11-08  Antaryami Pandia  <antaryami.pandia@motorola.com>

        Default <select multiple> expands up to 10 items instead of showing 4.
        https://bugs.webkit.org/show_bug.cgi?id=70765

        Reviewed by Darin Adler.

        Tests: fast/forms/select-clientheight-large-size.html
               fast/forms/select-clientheight-with-multiple-attr.html

        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::size):

2011-11-08  Chris Evans  <cevans@google.com>

        Crash accessing font fact rule parent
        https://bugs.webkit.org/show_bug.cgi?id=71860

        Reviewed by Adam Barth.

        Test: fast/css/css-fontface-rule-crash.html

        * css/CSSFontFaceRule.cpp:
        (WebCore::CSSFontFaceRule::~CSSFontFaceRule): tell our child rule when we are going away.

2011-11-08  Adam Klein  <adamk@chromium.org>

        Use a typedef for ExceptionCode in all header files instead of including ExceptionCode.h
        https://bugs.webkit.org/show_bug.cgi?id=71845

        Reviewed by Adam Barth.

        Some headers in WebCore include ExceptionCode.h to get the ExceptionCode typedef,
        while others provide the typedef themselves. Per Darin, the latter is preferred,
        so this patch updates all references, and fixes up .cpp files that
        need the include in order to access the enum.

        * bindings/js/JSSVGLengthCustom.cpp:
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateImplementation): #include ExceptionCode.h when needed for SVG.
        * bindings/scripts/CodeGeneratorObjC.pm:
        (GenerateImplementation): #include ExceptionCode.h when needed for SVG.
        * bindings/v8/custom/V8NotificationCenterCustom.cpp:
        * bindings/v8/custom/V8SVGLengthCustom.cpp:
        * css/WebKitCSSMatrix.h:
        * fileapi/DirectoryReaderSync.h:
        * fileapi/EntrySync.h:
        * fileapi/FileReader.h:
        * fileapi/FileReaderSync.h:
        * fileapi/SyncCallbackHelper.h:
        * html/ClassList.h:
        * html/DOMSettableTokenList.h:
        * html/DOMTokenList.cpp:
        * html/DOMTokenList.h:
        * html/TextTrack.cpp:
        * html/TextTrack.h:
        * html/TimeRanges.cpp:
        * html/TimeRanges.h:
        * html/canvas/ArrayBuffer.cpp:
        * html/canvas/ArrayBuffer.h:
        * html/canvas/ArrayBufferView.cpp:
        * html/canvas/ArrayBufferView.h:
        * html/canvas/DataView.cpp:
        * html/canvas/DataView.h:
        * html/canvas/OESVertexArrayObject.h:
        * html/canvas/WebGLDebugShaders.h:
        * html/canvas/WebGLRenderingContext.cpp:
        * html/canvas/WebGLRenderingContext.h:
        * mediastream/MediaStreamFrameController.cpp:
        * mediastream/MediaStreamFrameController.h:
        * notifications/Notification.h:
        * notifications/NotificationCenter.h:
        * storage/AbstractDatabase.cpp:
        * storage/AbstractDatabase.h:
        * storage/Database.h:
        * storage/DatabaseSync.h:
        * storage/DatabaseTask.h:
        * storage/IDBCursor.h:
        * storage/IDBCursorBackendInterface.h:
        * storage/IDBDatabase.h:
        * storage/IDBDatabaseBackendInterface.h:
        * storage/IDBFactory.h:
        * storage/IDBFactoryBackendInterface.h:
        * storage/IDBIndexBackendInterface.h:
        * storage/IDBKeyRange.h:
        * storage/IDBObjectStoreBackendInterface.h:
        * storage/IDBRequest.h:
        * storage/IDBTransactionBackendInterface.h:
        * storage/SQLResultSet.cpp:
        * storage/SQLResultSet.h:
        * storage/SQLStatementSync.h:
        * storage/SQLTransaction.cpp:
        * storage/SQLTransaction.h:
        * storage/SQLTransactionSync.h:
        * svg/ElementTimeControl.h:
        * svg/SVGAngle.cpp:
        * svg/SVGAngle.h:
        * svg/SVGLength.cpp:
        * svg/SVGLength.h:
        * svg/SVGLengthContext.cpp:
        * svg/SVGLengthContext.h:
        * svg/SVGLocatable.h:
        * svg/SVGMatrix.h:
        * svg/SVGPreserveAspectRatio.cpp:
        * svg/SVGPreserveAspectRatio.h:
        * testing/Internals.h:
        * webaudio/AudioContext.cpp:
        * workers/DefaultSharedWorkerRepository.cpp:
        * workers/DefaultSharedWorkerRepository.h:
        * workers/SharedWorkerRepository.h:

2011-11-08  Kentaro Hara  <haraken@chromium.org>

        CodeGeneratorV8.pm can generate a NamedConstructor
        https://bugs.webkit.org/show_bug.cgi?id=71756

        Reviewed by Adam Barth.

        - IDLParser.pm can parse [NamedConstructor] IDL.
        - CodeGeneratorV8.pm can generate a NamedConstructor
        and a template getter for the NamedConstructor.
        - Added a new binding test named TestNamedConstructor.idl.

        Tests: WebCore/bindings/scripts/test/TestNamedConstructor.idl

        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateHeader): Generates a header for a NamedConstructor.
        (GenerateNamedConstructorCallback): Generates the NamedConstructor and a template getter for the NamedConstructor.
        (GenerateSingleBatchedAttribute): If an IDL type is "XXXXConstructorConstructor", then we do not add a header file of XXXXConstructor, because the XXXXConstructor declaration is written in the header file of class XXXX.
        * bindings/scripts/IDLParser.pm:
        (parseExtendedAttributes): Parses 'NamedConstructor' '=' name '(' parameters ')' ','?
        (ParseInterface): Creates the signature of a NamedConstructor.
        * bindings/scripts/test/TestNamedConstructor.idl: Added a new test for the [NamedConstructor] IDL.
        * bindings/scripts/test/CPP/WebDOMTestNamedConstructor.cpp: Added a run-binding-test result of TestNamedConstructor.idl.
        (WebDOMTestNamedConstructor::WebDOMTestNamedConstructorPrivate::WebDOMTestNamedConstructorPrivate):
        (WebDOMTestNamedConstructor::WebDOMTestNamedConstructor):
        (WebDOMTestNamedConstructor::operator=):
        (WebDOMTestNamedConstructor::impl):
        (WebDOMTestNamedConstructor::~WebDOMTestNamedConstructor):
        (toWebCore):
        (toWebKit):
        * bindings/scripts/test/CPP/WebDOMTestNamedConstructor.h: Ditto.
        * bindings/scripts/test/GObject/WebKitDOMTestNamedConstructor.cpp: Ditto.
        (WebKit::kit):
        (WebKit::core):
        (webkit_dom_test_named_constructor_finalize):
        (webkit_dom_test_named_constructor_set_property):
        (webkit_dom_test_named_constructor_get_property):
        (webkit_dom_test_named_constructor_constructed):
        (webkit_dom_test_named_constructor_class_init):
        (webkit_dom_test_named_constructor_init):
        (WebKit::wrapTestNamedConstructor):
        * bindings/scripts/test/GObject/WebKitDOMTestNamedConstructor.h: Ditto.
        * bindings/scripts/test/GObject/WebKitDOMTestNamedConstructorPrivate.h: Ditto.
        * bindings/scripts/test/JS/JSTestNamedConstructor.cpp: Ditto.
        (WebCore::JSTestNamedConstructorConstructor::JSTestNamedConstructorConstructor):
        (WebCore::JSTestNamedConstructorConstructor::finishCreation):
        (WebCore::JSTestNamedConstructorConstructor::getOwnPropertySlot):
        (WebCore::JSTestNamedConstructorConstructor::getOwnPropertyDescriptor):
        (WebCore::JSTestNamedConstructorPrototype::self):
        (WebCore::JSTestNamedConstructor::JSTestNamedConstructor):
        (WebCore::JSTestNamedConstructor::finishCreation):
        (WebCore::JSTestNamedConstructor::createPrototype):
        (WebCore::JSTestNamedConstructor::getOwnPropertySlot):
        (WebCore::JSTestNamedConstructor::getOwnPropertyDescriptor):
        (WebCore::jsTestNamedConstructorConstructor):
        (WebCore::JSTestNamedConstructor::getConstructor):
        (WebCore::isObservable):
        (WebCore::JSTestNamedConstructorOwner::isReachableFromOpaqueRoots):
        (WebCore::JSTestNamedConstructorOwner::finalize):
        (WebCore::toJS):
        (WebCore::toTestNamedConstructor):
        * bindings/scripts/test/JS/JSTestNamedConstructor.h: Ditto.
        (WebCore::JSTestNamedConstructor::create):
        (WebCore::JSTestNamedConstructor::createStructure):
        (WebCore::JSTestNamedConstructor::impl):
        (WebCore::wrapperOwner):
        (WebCore::wrapperContext):
        (WebCore::JSTestNamedConstructorPrototype::create):
        (WebCore::JSTestNamedConstructorPrototype::createStructure):
        (WebCore::JSTestNamedConstructorPrototype::JSTestNamedConstructorPrototype):
        (WebCore::JSTestNamedConstructorConstructor::create):
        (WebCore::JSTestNamedConstructorConstructor::createStructure):
        * bindings/scripts/test/ObjC/DOMTestNamedConstructor.h: Ditto.
        * bindings/scripts/test/ObjC/DOMTestNamedConstructor.mm: Ditto.
        (-[DOMTestNamedConstructor dealloc]):
        (-[DOMTestNamedConstructor finalize]):
        (core):
        (kit):
        * bindings/scripts/test/ObjC/DOMTestNamedConstructorInternal.h: Ditto.
        * bindings/scripts/test/V8/V8TestNamedConstructor.cpp: Ditto.
        (WebCore::TestNamedConstructorInternal::V8_USE):
        (WebCore::V8TestNamedConstructorConstructorCallback):
        (WebCore::V8TestNamedConstructorConstructor::GetTemplate):
        (WebCore::ConfigureV8TestNamedConstructorTemplate):
        (WebCore::V8TestNamedConstructor::GetRawTemplate):
        (WebCore::V8TestNamedConstructor::GetTemplate):
        (WebCore::V8TestNamedConstructor::HasInstance):
        (WebCore::V8TestNamedConstructor::toActiveDOMObject):
        (WebCore::V8TestNamedConstructor::wrapSlow):
        (WebCore::V8TestNamedConstructor::derefObject):
        * bindings/scripts/test/V8/V8TestNamedConstructor.h: Ditto.
        (WebCore::V8TestNamedConstructor::toNative):
        (WebCore::V8TestNamedConstructor::existingWrapper):
        (WebCore::V8TestNamedConstructor::wrap):
        (WebCore::toV8):
        * page/DOMWindow.idl: Added [CustomConstructor] IDL to HTMLAudioElement, HTMLImageElement and HTMLOptionElement.

2011-11-08  Philip Rogers  <pdr@google.com>

        fix REGRESSION: SVG feColorMatrix causes crash
        https://bugs.webkit.org/show_bug.cgi?id=71287

        Reviewed by Simon Fraser.

        Test: svg/filters/feColorMatrix-invalid-animation.svg

        * svg/SVGAnimatedNumberList.cpp:
        (WebCore::SVGAnimatedNumberListAnimator::calculateAnimatedValue):

2011-11-08  Scott Graham  <scottmg@chromium.org>

        Add support for arrays of numbers to IDL bindings code generator
        https://bugs.webkit.org/show_bug.cgi?id=71763

        Adds support for float[] and double[] to IDL. Support for other types
        appears to be more complicated (or at least more copy-paste) so not
        doing that for now for lack of need.

        Reviewed by Adam Barth.

        Tests added to TestObj.idl.

        * bindings/scripts/CodeGeneratorV8.pm:
        (IsRefPtrType):
        (GetNativeType):
        (JSValueToNative):
        (NativeToJSValue):
        * bindings/scripts/test/TestObj.idl:
        * bindings/scripts/test/V8/V8TestObj.cpp:
        (WebCore::TestObjInternal::floatArrayAttrGetter):
        (WebCore::TestObjInternal::floatArrayAttrSetter):
        (WebCore::TestObjInternal::doubleArrayAttrGetter):
        (WebCore::TestObjInternal::doubleArrayAttrSetter):
        * bindings/v8/V8Binding.h:
        (WebCore::v8NumberArray):
        (WebCore::v8NumberArrayToVector):

2011-11-08  Dan Bernstein  <mitz@apple.com>

        REGRESSION (r99613): Incomplete painting of the root element background in flipped blocks writing mode
        https://bugs.webkit.org/show_bug.cgi?id=71863

        Reviewed by Anders Carlsson.

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::paintRootBoxFillLayers): Instead of unconditionally flipping the background
        rect here...
        * rendering/RenderView.cpp:
        (WebCore::RenderView::backgroundRect): ...flip it only in column mode here.
        * rendering/RenderView.h:

2011-11-08  Michael Saboff  <msaboff@apple.com>

        Towards 8 Bit Strings: Templatize JSC::Parser class by Lexer type
        https://bugs.webkit.org/show_bug.cgi?id=71761

        Cleaned up SourceCode data() to return StringImpl* and eliminated
        the recently added stringData() virtual method.

        No tests added - refactored base class SourceCode and its subclasses.

        * bindings/js/CachedScriptSourceProvider.h:
        (WebCore::CachedScriptSourceProvider::data):
        * bindings/js/ScriptDebugServer.cpp:
        (WebCore::ScriptDebugServer::dispatchDidParseSource):
        (WebCore::ScriptDebugServer::dispatchFailedToParseSource):
        * bindings/js/StringSourceProvider.h:
        (WebCore::StringSourceProvider::data):

2011-11-08  Xiaomei Ji  <xji@chromium.org>

        REGRESSION: rtl horizontal scrollbar / resize bug - Body shifts on resize when scrolled all the way to the left
        https://bugs.webkit.org/show_bug.cgi?id=70395

        Reviewed by Tony Chang.

        Change the condition to perform immediate scolling inside ScrollView::updateScrollbars()
        to be correct for RTL page as well, which is checking either the scroll position change or
        the m_scrollOrigin changes (such as in window resize in which scroll position might remain the same).

        And remove condition checking inside ScrollableArea::scrollToOffsetWithoutAnimation() since
        the pass-in offset is adjusted within the current scroll range, it could be the same as
        m_currentPos when m_currentPos is (0, 0) and current scroll range is smaller than old 
        scroll range, but scolling is still needed when page resize and scroll range changes.

        Test: fast/dom/rtl-scroll-to-leftmost-and-resize.html

        * platform/ScrollAnimator.cpp:
        (WebCore::ScrollAnimator::scrollToOffsetWithoutAnimation): Remove condition checking.
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::updateScrollbars): Change condition to perform immediate scrolling to be
        correct for RTL pages as well.
        * platform/ScrollableArea.cpp: Update m_scrollOriginChanged.
        (WebCore::ScrollableArea::ScrollableArea):
        (WebCore::ScrollableArea::setScrollOrigin):
        (WebCore::ScrollableArea::setScrollOriginX):
        (WebCore::ScrollableArea::setScrollOriginY):
        * platform/ScrollableArea.h: Add m_scrollOriginChanged.
        (WebCore::ScrollableArea::scrollOriginChanged):
        (WebCore::ScrollableArea::resetScrollOriginChanged):

2011-11-08  Dan Bernstein  <mitz@apple.com>

        <rdar://problem/10262225> Allow RenderView to have columns
        https://bugs.webkit.org/show_bug.cgi?id=71840

        Reviewed by Simon Fraser.

        Tests: fast/multicol/pagination-h-horizontal-bt.html
               fast/multicol/pagination-h-horizontal-tb.html
               fast/multicol/pagination-h-vertical-lr.html
               fast/multicol/pagination-h-vertical-rl.html
               fast/multicol/pagination-v-horizontal-bt.html
               fast/multicol/pagination-v-horizontal-tb.html
               fast/multicol/pagination-v-vertical-lr.html
               fast/multicol/pagination-v-vertical-rl.html

        * WebCore.exp.in: Export Page::setPagination() for WebCoreTestSupport.
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::styleForDocument): Set the column axis and the column gap in the
        document style if the view is paginated.
        * page/Page.cpp:
        (WebCore::Page::setPagination): Added this setter.
        * page/Page.h:
        (WebCore::Page::Pagination::Pagination):
        (WebCore::Page::pagination): Added this getter.
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::requiresColumns): Added and moved some logic to here from...
        (WebCore::RenderBlock::setDesiredColumnCountAndWidth): ...here.
        * rendering/RenderBlock.h:
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::paintRootBoxFillLayers): Changed to use the new RenderView::backgroundRect()
        instead of unscaledDocumentRect().
        * rendering/RenderView.cpp:
        (WebCore::RenderView::requiresColumns): Added this override that always returns true if the view
        is paginated.
        (WebCore::RenderView::backgroundRect): Added. In the paginated case, returns a rectangle stretching
        across all columns.
        * rendering/RenderView.h:
        * testing/Internals.cpp:
        (WebCore::Internals::reset): Also reset pagination.
        (WebCore::Internals::setPagination): Added this setter for testing.
        * testing/Internals.h:
        * testing/Internals.idl:

2011-11-08  Vineet Chaudhary  <vineet.chaudhary@motorola.com>

        Document.importNode's 'deep' argument should default to true.
        https://bugs.webkit.org/show_bug.cgi?id=71190

        Reviewed by Adam Barth.

        As new specification says deep argument of importNode should be default to true.

        Test: fast/dom/document-importNode-arguments.html

        * dom/Document.h: Added supportive method.
        (WebCore::Document::importNode):
        * dom/Document.idl: Modified deep argument as optional.

2011-11-08  Adam Klein  <adamk@chromium.org>

        WebKitMutationObserver.observe should raise a DOMException if passed invalid arguments
        https://bugs.webkit.org/show_bug.cgi?id=71596

        Reviewed by Ryosuke Niwa.

        Adds two cases where WebKitMutationObserver.observe throws an exception:
          - When passed a null Node*.
          - When passed options that don't make sense, e.g.,
            'attributeOldValue' but not 'attributes'.

        * bindings/js/JSWebKitMutationObserverCustom.cpp:
        (WebCore::JSWebKitMutationObserver::observe):
        * bindings/v8/custom/V8WebKitMutationObserverCustom.cpp:
        (WebCore::V8WebKitMutationObserver::observeCallback):
        * dom/WebKitMutationObserver.cpp:
        (WebCore::WebKitMutationObserver::validateOptions):
        (WebCore::WebKitMutationObserver::observe):
        * dom/WebKitMutationObserver.h:
        * dom/WebKitMutationObserver.idl:

2011-11-08  Joshua Bell  <jsbell@chromium.org>

        IndexedDB: implement compound (array) key support
        https://bugs.webkit.org/show_bug.cgi?id=62284

        Reviewed by Tony Chang.

        Add support for Array values as IDBKeys. (Multirow indexes are still
        not yet supported.)

        Tests: storage/indexeddb/cursor-key-order.html
               storage/indexeddb/key-type-array.html

        * bindings/js/JSIDBKeyCustom.cpp:
        (WebCore::toJS):
        * bindings/v8/IDBBindingUtilities.cpp:
        (WebCore::createIDBKeyFromValue):
        * bindings/v8/custom/V8IDBKeyCustom.cpp:
        (WebCore::toV8):
        * storage/IDBKey.cpp:
        (WebCore::IDBKey::compare):
        * storage/IDBKey.h:
        (WebCore::IDBKey::createArray):
        (WebCore::IDBKey::valid):
        (WebCore::IDBKey::array):
        (WebCore::IDBKey::compareTypes):
        * storage/IDBLevelDBCoding.cpp:
        (WebCore::IDBLevelDBCoding::compareEncodedStringsWithLength):
        (WebCore::IDBLevelDBCoding::encodeIDBKey):
        (WebCore::IDBLevelDBCoding::decodeIDBKey):
        (WebCore::IDBLevelDBCoding::extractEncodedIDBKey):
        (WebCore::IDBLevelDBCoding::keyTypeByteToKeyType):
        (WebCore::IDBLevelDBCoding::compareEncodedIDBKeys):
        * storage/IDBLevelDBCoding.h:

2011-11-08  Daniel Bates  <dbates@webkit.org>

        Remove get() defined in CredentialStorageQt.cpp
        https://bugs.webkit.org/show_bug.cgi?id=71829

        Reviewed by Andreas Kling.

        CredentialStorage::get() is implemented in CredentialStorage.cpp. And CredentialStorage.cpp
        provides the base implementation for each platform. We shouldn't re-define
        CredentialStorage::get() in CredentialStorageQt.cpp.

        * Target.pri: Add files CredentialStorage.{cpp, h}.
        * platform/network/qt/CredentialStorageQt.cpp:

2011-11-08  Joshua Bell  <jsbell@chromium.org>

        IndexedDB: reference cycle between IDBDatabase and IDBTransaction
        https://bugs.webkit.org/show_bug.cgi?id=71749

        Reviewed by Tony Chang.

        Break a cyclic reference leak following a setVersion call.

        * storage/IDBDatabase.cpp:
        (WebCore::IDBDatabase::setVersionChangeTransaction):
        (WebCore::IDBDatabase::clearVersionChangeTransaction):
        (WebCore::IDBDatabase::createObjectStore):
        (WebCore::IDBDatabase::deleteObjectStore):
        * storage/IDBDatabase.h:
        * storage/IDBRequest.cpp:
        (WebCore::IDBRequest::onSuccess):
        * storage/IDBTransaction.cpp:
        (WebCore::IDBTransaction::create):
        (WebCore::IDBTransaction::onAbort):
        (WebCore::IDBTransaction::onComplete):

2011-11-08  Daniel Bates  <dbates@webkit.org>

        Remove get() defined in CredentialStorageSoup.cpp
        https://bugs.webkit.org/show_bug.cgi?id=71825

        Reviewed by Martin Robinson.

        CredentialStorage::get() is implemented in CredentialStorage.cpp. And CredentialStorage.cpp
        provides the base implementation for each platform. We shouldn't re-define
        CredentialStorage::get() in CredentialStorageSoup.cpp.

        * GNUmakefile.list.am: Add source file CredentialStorage.cpp.
        * platform/network/soup/CredentialStorageSoup.cpp: Remove re-definition of CredentialStorage::get().
        CredentialStorage::get() is defined in CredentialStorage.cpp.

2011-11-08  Roland Steiner  <rolandsteiner@chromium.org>

        Rename CSS document() -> findDocument(), to indicate tree climbing
        https://bugs.webkit.org/show_bug.cgi?id=71764

        Renamed document() to findDocument(), styleSheetOwnerNode() to findStyleSheetOwnerNode().

        Reviewed by Darin Adler.

        No new tests. (simple refactoring)

        * css/CSSGrammar.y:
        * css/CSSImportRule.cpp:
        (WebCore::CSSImportRule::setCSSStyleSheet):
        (WebCore::CSSImportRule::requestStyleSheet):
        * css/CSSMutableStyleDeclaration.cpp:
        (WebCore::CSSMutableStyleDeclaration::setNeedsStyleRecalc):
        * css/CSSParser.cpp:
        (WebCore::parseColorValue):
        (WebCore::parseSimpleLengthValue):
        (WebCore::CSSParser::setStyleSheet):
        (WebCore::CSSParser::findDocument):
        (WebCore::CSSParser::parseAttr):
        * css/CSSParser.h:
        * css/CSSStyleRule.cpp:
        (WebCore::CSSStyleRule::setSelectorText):
        * css/CSSStyleSheet.cpp:
        (WebCore::CSSStyleSheet::cssRules):
        (WebCore::CSSStyleSheet::findStyleSheetOwnerNode):
        (WebCore::CSSStyleSheet::findDocument):
        (WebCore::CSSStyleSheet::styleSheetChanged):
        * css/CSSStyleSheet.h:
        * inspector/InspectorCSSAgent.cpp:
        (WebCore::InspectorCSSAgent::bindStyleSheet):
        * inspector/InspectorStyleSheet.cpp:
        (WebCore::InspectorStyleSheet::ownerDocument):
        * page/PageSerializer.cpp:
        (WebCore::PageSerializer::serializeCSSStyleSheet):
        (WebCore::PageSerializer::retrieveResourcesForCSSDeclaration):

2011-11-07  Ryosuke Niwa  <rniwa@webkit.org>

        Indent command can insert block quote in non editable content
        https://bugs.webkit.org/show_bug.cgi?id=71754

        Reviewed by Enrica Casucci.

        The bug was caused by IndentOutdentCommand's incorrectly using deprecatedNode to determine the outer block,
        not updating the start after inserting the targetBlockquote, and cloneParagraphUnderNewElement's cloning
        outerNode even if it was body. Fixed those bugs.

        Test: editing/execCommand/indent-images.html
              editing/execCommand/indent-images-2.html
              editing/execCommand/indent-images-3.html

        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::cloneParagraphUnderNewElement):
        * editing/IndentOutdentCommand.cpp:
        (WebCore::IndentOutdentCommand::indentIntoBlockquote):

2011-11-08  Adam Klein  <adamk@chromium.org>

        Only walk up the tree in search of MutationObservers if one has been added
        https://bugs.webkit.org/show_bug.cgi?id=71499

        Reviewed by Ojan Vafai.

        Analogous to m_listenerTypes, added an m_subtreeMutationObserverTypes field
        to Document that keeps track of which observer types have been added.
        This allows us to avoid doing any extra work if MutationObservers are
        not attached to a document.

        This could be improved upon to keep a count of each type, as removing
        an observer currently has no effect on m_subtreeMutationObserverTypes.
        But that would require a more complex implementation: one counter per
        mutation type. And it would be easier to get wrong: if the counter
        gets out of sync with the actual state of the DOM, we could start
        dropping mutation notifications.

        Test: fast/mutation/cross-document.html

        * dom/Document.h:
        (WebCore::Document::hasSubtreeMutationObserverOfType):
        (WebCore::Document::hasSubtreeMutationObserver):
        (WebCore::Document::addSubtreeMutationObserverTypes):
        * dom/MutationObserverRegistration.h:
        (WebCore::MutationObserverRegistration::isSubtree):
        (WebCore::MutationObserverRegistration::deliveryOptions):
        (WebCore::MutationObserverRegistration::mutationTypes):
        * dom/Node.cpp:
        (WebCore::Node::didMoveToNewOwnerDocument): Update mutationObserverTypes when a Node is moved to a new document.
        (WebCore::Node::getRegisteredMutationObserversOfType): Exit early if it's known that no observers of |type| are registered.
        (WebCore::Node::notifyMutationObserversNodeWillDetach): Exit early if it's known no subtree observers of any type are registered.
        * dom/WebKitMutationObserver.cpp:
        (WebCore::WebKitMutationObserver::observe): Update mutationObserverTypes when an observation occurs.
        * dom/WebKitMutationObserver.h: Add WebKitMutationObserver::AllMutationTypes to enum

2011-11-08  Andreas Kling  <kling@webkit.org>

        Devirtualize CSSValue.
        <http://webkit.org/b/71666>

        Reviewed by Antti Koivisto.

        Make the CSSValue destructor non-virtual (along with all the subclasses.)
        This removes the vtables, and the pointers thereto in each value instance,
        shrinking each object by one CPU word (4 or 8 bytes.)

        We use the same trick as CSSRule to implement destruction; providing our
        own deref() instead of RefCounted's, and performing a statically typed
        delete in a destroy() method called when the ref count reaches 0.

        Also made all the empty subclass destructors inline.

        * css/CSSAspectRatioValue.cpp:
        * css/CSSAspectRatioValue.h:
        (WebCore::CSSAspectRatioValue::~CSSAspectRatioValue):
        * css/CSSBorderImageSliceValue.cpp:
        * css/CSSBorderImageSliceValue.h:
        (WebCore::CSSBorderImageSliceValue::~CSSBorderImageSliceValue):
        * css/CSSBorderImageValue.cpp:
        * css/CSSBorderImageValue.h:
        (WebCore::CSSBorderImageValue::~CSSBorderImageValue):
        * css/CSSCanvasValue.h:
        * css/CSSCrossfadeValue.cpp:
        * css/CSSCrossfadeValue.h:
        (WebCore::CSSCrossfadeValue::~CSSCrossfadeValue):
        * css/CSSCursorImageValue.h:
        * css/CSSFlexValue.cpp:
        * css/CSSFlexValue.h:
        (WebCore::CSSFlexValue::~CSSFlexValue):
        * css/CSSFontFaceSrcValue.cpp:
        * css/CSSFontFaceSrcValue.h:
        (WebCore::CSSFontFaceSrcValue::~CSSFontFaceSrcValue):
        * css/CSSFunctionValue.cpp:
        * css/CSSFunctionValue.h:
        (WebCore::CSSFunctionValue::~CSSFunctionValue):
        * css/CSSImageGeneratorValue.h:
        * css/CSSImageValue.h:
        * css/CSSMutableValue.h:
        (WebCore::CSSMutableValue::~CSSMutableValue):
        * css/CSSParserValues.h:
        * css/CSSPrimitiveValue.h:
        * css/CSSUnicodeRangeValue.cpp:
        * css/CSSUnicodeRangeValue.h:
        (WebCore::CSSUnicodeRangeValue::~CSSUnicodeRangeValue):
        * css/CSSValue.cpp:
        (WebCore::CSSValue::destroy):
        * css/CSSValue.h:
        (WebCore::CSSValue::deref):
        (WebCore::CSSValue::~CSSValue):
        * css/CSSValueList.cpp:
        * css/CSSValueList.h:
        (WebCore::CSSValueList::~CSSValueList):
        * css/WebKitCSSFilterValue.cpp:
        * css/WebKitCSSFilterValue.h:
        (WebCore::WebKitCSSFilterValue::~WebKitCSSFilterValue):
        * css/WebKitCSSTransformValue.cpp:
        * css/WebKitCSSTransformValue.h:
        (WebCore::WebKitCSSTransformValue::~WebKitCSSTransformValue):

2011-11-08  Darin Adler  <darin@apple.com>

        Speculative fix for crashes seen in DocumentWriter::deprecatedFrameEncoding
        https://bugs.webkit.org/show_bug.cgi?id=71828

        Reviewed by Nate Chapin.

        No new tests; not sure how to reproduce this, but crash traces indicate it
        is an otherwise-harmless null dereference.

        * loader/DocumentWriter.cpp:
        (WebCore::DocumentWriter::deprecatedFrameEncoding):
        Handle null document the same as a document without a URL.

2011-11-08  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r95720.
        http://trac.webkit.org/changeset/95720
        https://bugs.webkit.org/show_bug.cgi?id=71831

        This has made the menulists on WebKit patch reviews much less
        usable (Requested by mrobinson on #webkit).

        * platform/gtk/GtkPopupMenu.cpp:
        (WebCore::GtkPopupMenu::menuPositionFunction):

2011-11-08  Nico Weber  <thakis@chromium.org>

        [chromium] Remove 6 exit time destructors and 6 static initializers
        https://bugs.webkit.org/show_bug.cgi?id=71760

        Reviewed by Nate Chapin.

        Do this by moving global statics into function-local statics, and using
        DEFINE_LOCAL_STATIC to leak them. Since this code is accessed on a single
        thread, this is a safe change to make.

        No behavior change, so no new tests.

        * bindings/v8/ScriptGCEvent.cpp:
        (WebCore::sEventListeners):
        (WebCore::ScriptGCEvent::addEventListener):
        (WebCore::ScriptGCEvent::removeEventListener):
        (WebCore::ScriptGCEvent::gcEpilogueCallback):
        * bindings/v8/ScriptGCEvent.h:
        * bindings/v8/V8NPObject.cpp:
        (WebCore::staticTemplateMap):
        (WebCore::weakTemplateCallback):
        (WebCore::npObjectGetProperty):
        (WebCore::staticNPObjectMap):
        (WebCore::weakNPObjectCallback):
        (WebCore::createV8ObjectForNPObject):
        (WebCore::forgetV8ObjectForNPObject):
        * bindings/v8/V8Proxy.cpp:
        (WebCore::staticExtensionsList):
        (WebCore::V8Proxy::registeredExtensionWithV8):
        (WebCore::V8Proxy::registerExtension):
        (WebCore::V8Proxy::extensions):
        * bindings/v8/V8Proxy.h:
        * bindings/v8/npruntime.cpp:
        * plugins/chromium/PluginDataChromium.cpp:
        (WebCore::pluginCache):
        (WebCore::PluginData::initPlugins):
        (WebCore::PluginData::refresh):
        (WebCore::getPluginMimeTypeFromExtension):

2011-11-08  Hans Wennborg  <hans@chromium.org>

        IndexedDB: Start using the onSuccessWithContinuation() callback
        https://bugs.webkit.org/show_bug.cgi?id=71565

        Reviewed by Tony Chang.

        This is a follow-up to r99169 where we start using this new
        callback for cursors.

        * storage/IDBCursorBackendImpl.cpp:
        (WebCore::IDBCursorBackendImpl::continueFunctionInternal):
        * storage/IDBRequest.cpp:
        (WebCore::IDBRequest::setCursor):

2011-11-08  Justin Schuh  <jschuh@chromium.org>

        Document::loader should use documentLoader(), not activeDocumentLoader()
        https://bugs.webkit.org/show_bug.cgi?id=65895

        Reviewed by Brady Eidson.

        Test: fast/loader/stateobjects/replacestate-in-onunload.html

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

2011-11-08  Andreas Kling  <kling@webkit.org>

        CSSImageGeneratorValue: Devirtualize image(), isFixedSize() and fixedSize().
        <http://webkit.org/b/71824>

        Reviewed by Darin Adler.

        Redirect the calls to the appropriate subclass in CSSImageGeneratorValue.cpp.

        * css/CSSCanvasValue.h:
        (WebCore::CSSCanvasValue::isFixedSize):
        * css/CSSCrossfadeValue.h:
        (WebCore::CSSCrossfadeValue::isFixedSize):
        * css/CSSGradientValue.h:
        (WebCore::CSSGradientValue::isFixedSize):
        (WebCore::CSSGradientValue::fixedSize):
        * css/CSSImageGeneratorValue.cpp:
        (WebCore::CSSImageGeneratorValue::image):
        (WebCore::CSSImageGeneratorValue::isFixedSize):
        (WebCore::CSSImageGeneratorValue::fixedSize):
        * css/CSSImageGeneratorValue.h:

2011-11-08  Andrey Kosyakov  <caseq@chromium.org>

        Web Inspector: [Extension API][Chromium] injected extension API needs to return an object
        https://bugs.webkit.org/show_bug.cgi?id=71822

        Reviewed by Pavel Feldman.

        * inspector/front-end/ExtensionAPI.js:
        (buildExtensionAPIInjectedScript):

2011-11-08  Andreas Kling  <kling@webkit.org>

        CSSImageValue: Devirtualize cachedImage(CachedResourceLoader*).
        <http://webkit.org/b/71814>

        Reviewed by Antti Koivisto.

        Defer to CSSCursorImageValue (the only CSSImageValue subclass)
        when appropriate in CSSImageValue::cachedImage(CachedResourceLoader*).

        * css/CSSCursorImageValue.h:
        * css/CSSImageValue.cpp:
        (WebCore::CSSImageValue::cachedImage):
        * css/CSSImageValue.h:

2011-11-08  Andrey Kosyakov  <caseq@chromium.org>

        Web Inspector: add "Evaluate in console" as a shortcut and context menu items to scripts panel
        https://bugs.webkit.org/show_bug.cgi?id=71817

        Reviewed by Pavel Feldman.

        * English.lproj/localizedStrings.js:
        * inspector/front-end/ConsoleView.js:
        (WebInspector.ConsoleView.prototype.evaluate):
        (WebInspector.ConsoleView.prototype._enterKeyPressed):
        * inspector/front-end/JavaScriptSourceFrame.js:
        (WebInspector.JavaScriptSourceFrame.prototype.populateTextAreaContextMenu):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype._evaluateSelectionInConsole):
        * inspector/front-end/ShortcutsScreen.js:
        (WebInspector.ShortcutsSection.prototype.addRelatedKeys):
        (WebInspector.ShortcutsSection.prototype.addAlternateKeys):
        * inspector/front-end/externs.js:
        (WebInspector.evaluateInConsole):
        * inspector/front-end/inspector.js:
        (WebInspector.evaluateInConsole):

2011-11-08  Andreas Kling  <kling@webkit.org>

        CSSValue: Devirtualize cssText().
        <http://webkit.org/b/71813>

        Reviewed by Antti Koivisto.

        Rename all subclass implementations to customCssText() and add
        a CSSValue::cssText() that defers to the appropriate subclass
        based on the type info.

        The rename is both for clarity, and to ensure that calling
        cssText() will always end up in the correct method.

        * css/CSSAspectRatioValue.cpp:
        (WebCore::CSSAspectRatioValue::customCssText):
        * css/CSSAspectRatioValue.h:
        * css/CSSBorderImageSliceValue.cpp:
        (WebCore::CSSBorderImageSliceValue::customCssText):
        * css/CSSBorderImageSliceValue.h:
        * css/CSSBorderImageValue.cpp:
        (WebCore::CSSBorderImageValue::customCssText):
        * css/CSSBorderImageValue.h:
        * css/CSSCanvasValue.cpp:
        (WebCore::CSSCanvasValue::customCssText):
        * css/CSSCanvasValue.h:
        * css/CSSCrossfadeValue.cpp:
        (WebCore::CSSCrossfadeValue::customCssText):
        * css/CSSCrossfadeValue.h:
        * css/CSSFlexValue.cpp:
        (WebCore::CSSFlexValue::customCssText):
        * css/CSSFlexValue.h:
        * css/CSSFontFaceSrcValue.cpp:
        (WebCore::CSSFontFaceSrcValue::customCssText):
        * css/CSSFontFaceSrcValue.h:
        * css/CSSFunctionValue.cpp:
        (WebCore::CSSFunctionValue::customCssText):
        * css/CSSFunctionValue.h:
        * css/CSSGradientValue.cpp:
        (WebCore::CSSLinearGradientValue::customCssText):
        (WebCore::CSSRadialGradientValue::customCssText):
        * css/CSSGradientValue.h:
        * css/CSSInheritedValue.cpp:
        (WebCore::CSSInheritedValue::customCssText):
        * css/CSSInheritedValue.h:
        * css/CSSInitialValue.cpp:
        (WebCore::CSSInitialValue::customCssText):
        * css/CSSInitialValue.h:
        * css/CSSLineBoxContainValue.cpp:
        (WebCore::CSSLineBoxContainValue::customCssText):
        * css/CSSLineBoxContainValue.h:
        * css/CSSPrimitiveValue.cpp:
        (WebCore::CSSPrimitiveValue::customCssText):
        * css/CSSPrimitiveValue.h:
        * css/CSSReflectValue.cpp:
        (WebCore::CSSReflectValue::customCssText):
        * css/CSSReflectValue.h:
        * css/CSSTimingFunctionValue.cpp:
        (WebCore::CSSLinearTimingFunctionValue::customCssText):
        (WebCore::CSSCubicBezierTimingFunctionValue::customCssText):
        (WebCore::CSSStepsTimingFunctionValue::customCssText):
        * css/CSSTimingFunctionValue.h:
        (WebCore::CSSLinearTimingFunctionValue::CSSLinearTimingFunctionValue):
        * css/CSSUnicodeRangeValue.cpp:
        (WebCore::CSSUnicodeRangeValue::customCssText):
        * css/CSSUnicodeRangeValue.h:
        * css/CSSValue.cpp:
        (WebCore::CSSValue::cssText):
        * css/CSSValue.h:
        * css/CSSValueList.cpp:
        (WebCore::CSSValueList::customCssText):
        * css/CSSValueList.h:
        * css/FontFamilyValue.cpp:
        (WebCore::FontFamilyValue::customCssText):
        * css/FontFamilyValue.h:
        * css/FontFeatureValue.cpp:
        (WebCore::FontFeatureValue::customCssText):
        * css/FontFeatureValue.h:
        * css/FontValue.cpp:
        (WebCore::FontValue::customCssText):
        * css/FontValue.h:
        * css/ShadowValue.cpp:
        (WebCore::ShadowValue::customCssText):
        * css/ShadowValue.h:
        * css/WebKitCSSFilterValue.cpp:
        (WebCore::WebKitCSSFilterValue::customCssText):
        * css/WebKitCSSFilterValue.h:
        * css/WebKitCSSTransformValue.cpp:
        (WebCore::WebKitCSSTransformValue::customCssText):
        * css/WebKitCSSTransformValue.h:
        * svg/SVGColor.cpp:
        (WebCore::SVGColor::customCssText):
        * svg/SVGColor.h:
        * svg/SVGPaint.cpp:
        (WebCore::SVGPaint::customCssText):
        * svg/SVGPaint.h:

2011-11-08  Gavin Peters  <gavinp@chromium.org>

        Fix width of m_type in CachedResource
        https://bugs.webkit.org/show_bug.cgi?id=71727

        Reviewed by Nate Chapin.

        Test: fast/dom/HTMLLinkElement/cachedresource-types.html

        * loader/cache/CachedResource.cpp:
        (WebCore::CachedResource::CachedResource):
        * loader/cache/CachedResource.h:

2011-11-08  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Don't set OBJECTS_DIR and DEFINES in default_pre

        If a pro file needs to access the OBJECTS_DIR it should use the
        form ${QMAKE_VAR_OBJECTS_DIR} to ensure the value is evaluated
        after defaults_post has been processed.

        Setting DEFINES in defaults_pre is also bad, as any DEFINES=foo on
        the command line will override whatever we set in defaults_pre.

        Reviewed by Simon Hausmann.

        * Target.pri:

2011-11-08  Pavel Feldman  <pfeldman@google.com>

        Web Inspector: add JavaScript keywords to the autocomplete.
        https://bugs.webkit.org/show_bug.cgi?id=71782

        Reviewed by Yury Semikhatsky.

        * inspector/front-end/ConsoleView.js:
        (WebInspector.ConsoleView.prototype._completions.receivedPropertyNames):
        (WebInspector.ConsoleView.prototype._completions):
        (WebInspector.ConsoleView.prototype._reportCompletions):

2011-11-08  Nikolas Zimmermann  <nzimmermann@rim.com>

        Introduce SVGLengthContext, to allow to resolve relative units to arbitary viewports
        https://bugs.webkit.org/show_bug.cgi?id=71780

        Reviewed by Zoltan Herczeg.

        Introduce SVGLengthContext to cleanup SVGLength, by moving all conversion of relative units that depend on style or viewport
        out of SVGLength, into SVGLengthContext. Pass SVGLengthContext& to SVGLength::value/setValue/... functions instead of a pure
        "const SVGElement* context", which was previously used to determine the viewport when resolving percentage units.
        SVGLengthContext carries an additional FloatRect of the custom viewport, to which percentages are resolved, if specified.

        This allows us to kill several duplicates of the same code, which handles objectBoundingBox mode for gradients/patterns/masks/etc..
        A follow-up patch will convert filters to use the new SVGLengthContext::resolveRectangle code as well.

        This is a preparation for bug 10430, to fix feImage + objectBoundingBox support when rendering referenced elements, instead of files.

        Doesn't affect any tests yet.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * rendering/svg/RenderSVGResourceGradient.cpp:
        (WebCore::RenderSVGResourceGradient::applyResource):
        * rendering/svg/RenderSVGResourceGradient.h:
        * rendering/svg/RenderSVGResourceLinearGradient.h:
        (WebCore::RenderSVGResourceLinearGradient::gradientUnits):
        * rendering/svg/RenderSVGResourcePattern.cpp:
        (WebCore::RenderSVGResourcePattern::applyResource):
        (WebCore::calculatePatternBoundaries):
        (WebCore::RenderSVGResourcePattern::buildTileImageTransform):
        (WebCore::RenderSVGResourcePattern::createTileImage):
        * rendering/svg/RenderSVGResourceRadialGradient.h:
        (WebCore::RenderSVGResourceRadialGradient::gradientUnits):
        * rendering/svg/SVGRenderTreeAsText.cpp:
        (WebCore::writeCommonGradientProperties):
        (WebCore::writeSVGResourceContainer):
        * svg/GradientAttributes.h:
        (WebCore::GradientAttributes::GradientAttributes):
        (WebCore::GradientAttributes::gradientUnits):
        (WebCore::GradientAttributes::setGradientUnits):
        (WebCore::GradientAttributes::hasGradientUnits):
        * svg/PatternAttributes.h:
        (WebCore::PatternAttributes::PatternAttributes):
        (WebCore::PatternAttributes::patternUnits):
        (WebCore::PatternAttributes::patternContentUnits):
        (WebCore::PatternAttributes::setPatternUnits):
        (WebCore::PatternAttributes::setPatternContentUnits):
        (WebCore::PatternAttributes::hasPatternUnits):
        (WebCore::PatternAttributes::hasPatternContentUnits):
        * svg/SVGAllInOne.cpp:
        * svg/SVGElement.h:
        (WebCore::SVGElement::operator SVGLengthContext):
        * svg/SVGFilterElement.cpp:
        (WebCore::SVGFilterElement::filterBoundingBox):
        * svg/SVGLength.cpp:
        (WebCore::SVGLength::SVGLength):
        (WebCore::SVGLength::unitMode):
        (WebCore::SVGLength::value):
        (WebCore::SVGLength::setValue):
        (WebCore::SVGLength::convertToSpecifiedUnits):
        * svg/SVGLength.h:
        (WebCore::SVGLength::blend):
        * svg/SVGLengthContext.cpp: Added.
        (WebCore::SVGLengthContext::SVGLengthContext):
        (WebCore::SVGLengthContext::resolveRectangle):
        (WebCore::SVGLengthContext::resolvePoint):
        (WebCore::SVGLengthContext::resolveLength):
        (WebCore::SVGLengthContext::convertValueToUserUnits):
        (WebCore::SVGLengthContext::convertValueFromUserUnits):
        (WebCore::SVGLengthContext::convertValueFromUserUnitsToPercentage):
        (WebCore::SVGLengthContext::convertValueFromPercentageToUserUnits):
        (WebCore::SVGLengthContext::convertValueFromUserUnitsToEMS):
        (WebCore::SVGLengthContext::convertValueFromEMSToUserUnits):
        (WebCore::SVGLengthContext::convertValueFromUserUnitsToEXS):
        (WebCore::SVGLengthContext::convertValueFromEXSToUserUnits):
        (WebCore::SVGLengthContext::determineViewport):
        * svg/SVGLengthContext.h: Added.
        (WebCore::SVGLengthContext::resolveRectangle):
        * svg/SVGLinearGradientElement.cpp:
        (WebCore::SVGLinearGradientElement::collectGradientAttributes):
        (WebCore::SVGLinearGradientElement::calculateStartEndPoints):
        * svg/SVGMaskElement.cpp:
        (WebCore::SVGMaskElement::maskBoundingBox):
        * svg/SVGPatternElement.cpp:
        (WebCore::SVGPatternElement::collectPatternAttributes):
        * svg/SVGRadialGradientElement.cpp:
        (WebCore::SVGRadialGradientElement::collectGradientAttributes):
        (WebCore::SVGRadialGradientElement::calculateFocalCenterPointsAndRadius):

2011-11-08  Andreas Kling  <kling@webkit.org>

        CSSValue: Devirtualize addSubresourceStyleURLs().
        <http://webkit.org/b/71805>

        Reviewed by Antti Koivisto.

        Make addSubresourceStyleURLs() non-virtual and call the appropriate
        subclass implementation based on the subclass type info.

        * css/CSSBorderImageValue.h:
        * css/CSSFontFaceSrcValue.h:
        * css/CSSPrimitiveValue.h:
        * css/CSSReflectValue.h:
        * css/CSSValue.cpp:
        (WebCore::CSSValue::addSubresourceStyleURLs):
        * css/CSSValue.h:
        (WebCore::CSSValue::addSubresourceStyleURLs):
        * css/CSSValueList.h:

2011-11-08  Andrey Kosyakov  <caseq@chromium.org>

        Web Inspector: do not show object popover when selection is active
        https://bugs.webkit.org/show_bug.cgi?id=71804

        Reviewed by Yury Semikhatsky.

        * inspector/front-end/JavaScriptSourceFrame.js:
        (WebInspector.JavaScriptSourceFrame.prototype._shouldShowPopover):

2011-11-08  Alexander Pavlov  <apavlov@chromium.org>

        Web Inspector: Do not hide SuggestBox if typed-in string in the middle of input equals one of suggestions
        https://bugs.webkit.org/show_bug.cgi?id=71797

        Reviewed by Yury Semikhatsky.

        * inspector/front-end/TextPrompt.js:
        (WebInspector.TextPrompt.prototype.onKeyDown):
        (WebInspector.TextPrompt.prototype.complete):

2011-11-08  Andreas Kling  <kling@webkit.org>

        CSSGradientValue: Devirtualize createGradient().
        <http://webkit.org/b/71800>

        Reviewed by Antti Koivisto.

        Make createGradient() non-virtual and call the appropriate subclass
        implementation in image() based on is{Linear,Radial}Gradient().

        * css/CSSGradientValue.cpp:
        (WebCore::CSSGradientValue::image):
        * css/CSSGradientValue.h:

2011-11-08  Andreas Kling  <kling@webkit.org>

        CSSCanvasValue: Remove inheritance from CanvasObserver.
        <http://webkit.org/b/71796>

        Reviewed by Antti Koivisto.

        To completely devirtualize all the CSSValues, we need to remove
        CSSCanvasValue's inheritance from CanvasObserver, as that is forcing
        a vptr into the class.

        Use the same approach as CSSImportRule and make a simple proxying
        CanvasObserver subclass and put that as a member variable of the value.

        * css/CSSCanvasValue.cpp:
        (WebCore::CSSCanvasValue::~CSSCanvasValue):
        (WebCore::CSSCanvasValue::element):
        * css/CSSCanvasValue.h:
        (WebCore::CSSCanvasValue::CSSCanvasValue):
        (WebCore::CSSCanvasValue::CanvasObserverProxy::CanvasObserverProxy):
        (WebCore::CSSCanvasValue::CanvasObserverProxy::~CanvasObserverProxy):
        (WebCore::CSSCanvasValue::CanvasObserverProxy::canvasChanged):
        (WebCore::CSSCanvasValue::CanvasObserverProxy::canvasResized):
        (WebCore::CSSCanvasValue::CanvasObserverProxy::canvasDestroyed):

2011-11-08  Yury Semikhatsky  <yurys@chromium.org>

        Web Inspector: display notification in the front-end when inspected worker terminates
        https://bugs.webkit.org/show_bug.cgi?id=71770

        When inspected worker terminates we will show a notification similar to the help
        screen. The notification disappears when the worker restarts or the user closes it
        manually.

        Reviewed by Pavel Feldman.

        * English.lproj/localizedStrings.js:
        * inspector/front-end/ScriptsPanel.js:
        * inspector/front-end/WorkerManager.js:
        (WebInspector.WorkerManager.loaded):
        (WebInspector.WorkerManager.showWorkerTerminatedScreen):
        (WebInspector.WorkerTerminatedScreen):
        * inspector/front-end/inspector.js:
        (WebInspector.disconnectFromBackend):
        (WebInspector.frontendReused):

2011-11-08  Nikolas Zimmermann  <nzimmermann@rim.com>

        Fold ImageBySizeCache again into CSSImageGeneratorValue
        https://bugs.webkit.org/show_bug.cgi?id=71785

        Reviewed by Zoltan Herczeg.

        Remove ImageBySizeCache, and fold it into CSSImageGeneratorValue, as it used to be.
        CachedImage has switched to SVGImageCache and no longer needs it.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSImageGeneratorValue.cpp:
        (WebCore::CSSImageGeneratorValue::addClient):
        (WebCore::CSSImageGeneratorValue::removeClient):
        (WebCore::CSSImageGeneratorValue::getImage):
        (WebCore::CSSImageGeneratorValue::putImage):
        * css/CSSImageGeneratorValue.h:
        (WebCore::SizeAndCount::SizeAndCount):
        (WebCore::CSSImageGeneratorValue::clients):
        * rendering/ImageBySizeCache.cpp: Removed.
        * rendering/ImageBySizeCache.h: Removed.

2011-11-08  Alexander Pavlov  <apavlov@chromium.org>

        Web Inspector: Avoid automatic Console suggestions with empty expression
        https://bugs.webkit.org/show_bug.cgi?id=71783

        Reviewed by Yury Semikhatsky.

        * inspector/front-end/ConsoleView.js:

2011-11-08  Nikolas Zimmermann  <nzimmermann@rim.com>

        Not reviewed. Fix build, by removing an unused variable.

        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::isOriginClean):
        (WebCore::CanvasRenderingContext2D::createPattern):

2011-11-08  Nikolas Zimmermann  <nzimmermann@rim.com>

        Switch SVGImage cache to store ImageBuffers instead of whole SVGImages, including a DOM/Render tree
        https://bugs.webkit.org/show_bug.cgi?id=71368

        Reviewed by Zoltan Herczeg.

        When determining whether the canvas would be tainted, we need access to the SVGImage, not its cached BitmapImage.
        Otherwhise wrong assumptions are mode, leading to regressions.

        Fixes http/tests/security/canvas-remote-read-svg-image.html and related tests on the bots.

        * html/canvas/CanvasRenderingContext.cpp:
        (WebCore::CanvasRenderingContext::wouldTaintOrigin): Forgot to switch them back to use cachedImage->image().
        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::isOriginClean): Ditto.

2011-11-08  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Console should be scrolled to bottom when shown for the first time.
        https://bugs.webkit.org/show_bug.cgi?id=71781

        Reviewed by Pavel Feldman.

        * inspector/front-end/ConsoleView.js:

2011-11-08  Nikolas Zimmermann  <nzimmermann@rim.com>

        Switch SVGImage cache to store ImageBuffers instead of whole SVGImages, including a DOM/Render tree
        https://bugs.webkit.org/show_bug.cgi?id=71368

        Reviewed by Antti Koivisto.

        Fix regressions/races introduced by r98852. SVGImage repainting didn't work under certain circumstances.
        The problem was hard to reproduce on Mac ports, but easily visible on Chromium, when opening two files
        that shared the same animated SVG image. The problem of sharing a single ImageObserver across multiple
        instances of the same SVGImage, leads to nasty problems, that are timing dependant. changedInRect() calls
        that should only by received in one document, are received in the other as well, due the shared nature
        of CachedImage. To avoid these problems alltogether, a new approach is needed, that was initially suggested
        by Antti.

        Avoid creating multiple SVGImages and caching them for different sizes/zoom levels. Introduce SVGImageCache
        which holds rendered versions of the SVGImage at certain sizes/zoom levels. It holds (ImageBuffer, Image) pairs
        for each renderer, associated with a size and zoom level.

        This is a major change to the cache as introduced some weeks ago. Instead of holding multiple SVGImages, each containing
        a whole DOM/render tree, we now create bitmap images rendered at the requested sizes/zoom levels and cache them.

        Revert ImageBySizeCache changes that were needed to make it usable wih SVGImage. Its now used only in CSSImageGeneratorValue and
        thus the extra information that CSSImageGeneratorValue doesn't need can be removed again (desired/actual size differentations, and the zoom level).

        Tests: svg/as-image/animated-svg-as-image-no-fixed-intrinsic-size.html
               svg/as-image/animated-svg-as-image-same-image.html

        * CMakeLists.txt: Add svg/graphics/SVGImageCache.* to build.
        * GNUmakefile.list.am: Ditto.
        * Target.pri: Ditto.
        * WebCore.gypi: Ditto.
        * WebCore.vcproj/WebCore.vcproj: Ditto.
        * WebCore.vcproj/copyForwardingHeaders.cmd: Copy headers from svg/graphics, as SVGImageCache is needed by CachedImage in SVG enabled builds.
        * WebCore.xcodeproj/project.pbxproj: Add svg/graphics/SVGImageCache.* to build.
        * css/CSSImageGeneratorValue.cpp: Remove zoom parameter from addClient/getImage, no need to pass 1 default values anymore.
        (WebCore::CSSImageGeneratorValue::addClient):
        (WebCore::CSSImageGeneratorValue::getImage):
        * loader/cache/CachedImage.cpp: Stop using ImageBySizeCache, and switch to the new SVGImageCache.
        (WebCore::CachedImage::removeClientForRenderer):
        (WebCore::CachedImage::lookupOrCreateImageForRenderer):
        (WebCore::CachedImage::setContainerSizeForRenderer):
        (WebCore::CachedImage::imageSizeForRenderer):
        (WebCore::CachedImage::clear):
        (WebCore::CachedImage::createImage):
        (WebCore::CachedImage::destroyDecodedData):
        (WebCore::CachedImage::decodedSizeChanged):
        (WebCore::CachedImage::didDraw):
        (WebCore::CachedImage::shouldPauseAnimation):
        (WebCore::CachedImage::animationAdvanced):
        (WebCore::CachedImage::changedInRect):
        * loader/cache/CachedImage.h:
        * page/DragController.cpp: Stop using imageForRenderer(), as it may return cached BitmapImages, that don't carry a filename extension anymore, which is required here.
        (WebCore::getImage):
        * rendering/ImageBySizeCache.cpp: Revert changes to ImageBySizeCache, which were needed to make it usable for SVGImages. CSSImageGenerator doesn't need it.
        (WebCore::ImageBySizeCache::addClient):
        (WebCore::ImageBySizeCache::removeClient):
        (WebCore::ImageBySizeCache::getImage):
        * rendering/ImageBySizeCache.h: Ditto.
        (WebCore::SizeAndCount::SizeAndCount):
        * rendering/RenderImage.cpp: Stop using imageForRenderer(), use cachedImage()->image(), which is guaranteed to be a SVGImage for svg images, and not a cached bitmap copy.
        (WebCore::RenderImage::embeddedContentBox):
        * rendering/RenderReplaced.cpp: Simplify logic to figure out the intrinsic size - the special logic for the old SVGImage cache can go away now.
        (WebCore::RenderReplaced::computeIntrinsicLogicalWidth):
        (WebCore::RenderReplaced::computeIntrinsicLogicalHeight):
        * rendering/style/StyleCachedImage.cpp: Call removeClientForRenderer(), which takes care of clearing SVGImageCache entries as well.
        (WebCore::StyleCachedImage::removeClient): This change is needed, as we don't want to make removeClient() virtual in CachedResource.
        * rendering/svg/RenderSVGRoot.cpp: Rename isEmbeddedThroughImageElement to isEmbeddedThroughSVGImage, as this is what it actually checks.
        (WebCore::RenderSVGRoot::isEmbeddedThroughSVGImage):
        * rendering/svg/RenderSVGRoot.h:
        * svg/SVGSVGElement.cpp: Fix bug that's visible now with the SVGImageCache, which was already there before, but hard to trigger.
        (WebCore::SVGSVGElement::currentViewBoxRect): The viewBox depends on who's asking for it: the host document or the embedded document? Take that into account.
        * svg/SVGSVGElement.h:
        * svg/graphics/SVGImage.cpp: Cleanup some code. Add new logic that draws a SVGImage into an ImageBuffer at a desired size & zoom.
        (WebCore::SVGImage::setContainerSize):
        (WebCore::SVGImage::size):
        (WebCore::SVGImage::drawSVGToImageBuffer):
        * svg/graphics/SVGImage.h:
        * svg/graphics/SVGImageCache.cpp: Added. SVGImageCache caches Image/ImageBuffer pairs for each _renderer_ and size/zoom level. The ImageBySizeCache only cared about size.
        (WebCore::SVGImageCache::SVGImageCache):
        (WebCore::SVGImageCache::~SVGImageCache):
        (WebCore::SVGImageCache::removeRendererFromCache):
        (WebCore::SVGImageCache::setRequestedSizeAndZoom):
        (WebCore::SVGImageCache::getRequestedSizeAndZoom):
        (WebCore::SVGImageCache::imageContentChanged):
        (WebCore::SVGImageCache::redrawTimerFired):
        (WebCore::SVGImageCache::lookupOrCreateBitmapImageForRenderer):
        * svg/graphics/SVGImageCache.h: Added.
        (WebCore::SVGImageCache::create):
        (WebCore::SVGImageCache::CachedSizeAndZoom::CachedSizeAndZoom):
        (WebCore::SVGImageCache::CachedImageData::CachedImageData):

2011-11-07  Yury Semikhatsky  <yurys@chromium.org>

        Web Inspector: refactor shortcuts and settings screens
        https://bugs.webkit.org/show_bug.cgi?id=71773

        Keep pointer to the visible screen and hide it automatically when new one is going
        to be displayed.

        Reviewed by Pavel Feldman.

        * inspector/front-end/HelpScreen.js:
        (WebInspector.HelpScreen.prototype.show):
        (WebInspector.HelpScreen.prototype.hide):
        * inspector/front-end/ShortcutsScreen.js:
        (WebInspector.ShortcutsScreen): ShortcutsScreen is now a descendant of HelpScreen.
        (WebInspector.ShortcutsScreen.prototype.show):
        * inspector/front-end/inspector.js:
        (WebInspector._hideSettingsScreen):
        (WebInspector.documentKeyDown):

2011-11-08  Nikolas Zimmermann  <nzimmermann@rim.com>

        Not reviewed. Fix Snow Leopard 32bit builds.

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseAspectRatio): CSSParserValue::fValue is a double, use narrowPrecisionToFloat() to convert double->float.
        * platform/ClockGeneric.cpp: Remove unneeded variable out of 32bit integer value range.
        * webaudio/BiquadDSPKernel.cpp:
        (WebCore::BiquadDSPKernel::getFrequencyResponse): Use narrowPrecisionTofloat() to convert double->float.

2011-11-07  Daniel Bates  <dbates@rim.com>

        Add CredentialStorage.cpp to WebCore/CMakeLists.txt
        https://bugs.webkit.org/show_bug.cgi?id=71748

        Reviewed by Martin Robinson.

        Adds CredentialStorage.cpp to WebCore/CMakeLists.txt since its provides a
        base implementation of this feature.

        Also adds a stub implementation of CredentialStorage to the WinCE port.

        * CMakeLists.txt: Added source file CredentialStorage.cpp.
        * CMakeListsEfl.txt: Added source file CredentialStorageCurl.cpp when building
          with the Curl networking backend.
        * CMakeListsWinCE.txt: Added source file CredentialStorageWin.cpp.
        * platform/network/win/CredentialStorageWin.cpp: Added.
        (WebCore::Credential::getFromPersistentStorage): Stub implementation.

2011-11-07  Kentaro Hara  <haraken@chromium.org>

        Remove [CustomGetter] IDL for window.Image of V8
        https://bugs.webkit.org/show_bug.cgi?id=71739

        Reviewed by Adam Barth.

        Currently, window.Image uses a custom getter to get the template
        of 'HTMLImageElementConstructor'. However, this getter does not need to
        be custom and can use a default getter
        'DOMWindowInternal::DOMWindowConstructorGetter'.

        Tests: fast/js/custom-constructors.html
               fast/dom/image-object.html
               fast/dom/gc-image-element.html
               fast/dom/Window/custom-constructors.html

        * bindings/v8/custom/V8DOMWindowCustom.cpp: Removed a custom getter.
        * page/DOMWindow.idl: Removed [CustomGetter] IDL from window.Image of V8. Renamed 'HTMLImageElementConstructor' to 'HTMLImageElementConstructorConstructor' in order to make window.Image use the template of (not 'HTMLImageElement' but) 'HTMLImageElementConstructor'. Note that CodeGenerator*.pm strips /Constructor$/ from the IDL type.

2011-11-07  Chris Fleizach  <cfleizach@apple.com>

        REGRESSION(r99025-r99037): platform/mac/accessibility/select-element-selection-with-optgroups.html is asserting
        https://bugs.webkit.org/show_bug.cgi?id=71421

        Reviewed by Ryosuke Niwa.

        Remove an assert that was added by r99035. It was added based on a comment in the code, but not tested.

        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::selectOption):

2011-11-07  Emil A Eklund  <eae@chromium.org>

        Revert platform and scrolling to ints
        https://bugs.webkit.org/show_bug.cgi?id=71585

        Reviewed by Eric Seidel.

        Replace all uses of LayoutUnit and related types with ints in platform
        and scrolling code.

        No new tests.

        * page/FrameView.cpp:
        * page/FrameView.h:
        * platform/PopupMenuClient.h:
        * platform/ScrollAnimatorNone.cpp:
        * platform/ScrollAnimatorNone.h:
        * platform/ScrollView.cpp:
        * platform/ScrollView.h:
        * platform/ScrollableArea.h:
        * rendering/RenderLayer.cpp:
        * rendering/RenderLayer.h:
        * rendering/RenderListBox.cpp:
        * rendering/RenderListBox.h:
        * rendering/RenderMenuList.cpp:
        * rendering/RenderMenuList.h:
        * rendering/RenderTextControlSingleLine.cpp:
        * rendering/RenderTextControlSingleLine.h:

2011-11-07  Kentaro Hara  <haraken@chromium.org>

        Fixed wrong test results of fast/js/custom-constructors.html
        https://bugs.webkit.org/show_bug.cgi?id=71669

        Reviewed by Darin Adler.

        According to the HTMLOptionElement spec
        (http://dev.w3.org/html5/spec/the-button-element.html#the-option-element),
        'text', 'label' and 'value' have neither [TreatUndefinedAs=EmptyString]
        nor [TreatNullAs=EmptyString]. Thus, an undefined value should be
        converted to a string "undefined" and a null value should be
        converted to a string "null", following the step 3 of the IDL
        conversion spec (http://dev.w3.org/2006/webapi/WebIDL/#es-DOMString).

        * bindings/js/JSOptionConstructor.cpp:
        (WebCore::constructHTMLOptionElement): Removed isUndefined() check from 'text' and 'value' since the spec does not have [TreatUndefinedAs=EmptyString].
        * bindings/v8/custom/V8HTMLOptionElementConstructor.cpp:
        (WebCore::v8HTMLOptionElementConstructorCallback): Ditto.
        * html/HTMLOptionElement.idl: Removed [ConvertNullToNullString] from 'text', 'label' and 'value' since the spec does not have [TreatNullAs=EmptyString].

2011-11-07  Adam Barth  <abarth@webkit.org>

        Move DomainRelaxationForbidden scheme registry to SchemeRegistry
        https://bugs.webkit.org/show_bug.cgi?id=71750

        Reviewed by Eric Seidel.

        As stated in the FIXME, scheme registries belong in SchemeRegistry, not
        in SecurityOrigin.

        * WebCore.exp.in:
        * dom/Document.cpp:
        (WebCore::Document::setDomain):
        * page/SecurityOrigin.cpp:
        * page/SecurityOrigin.h:
        * platform/SchemeRegistry.cpp:
        (WebCore::schemesForbiddenFromDomainRelaxation):
        (WebCore::SchemeRegistry::setDomainRelaxationForbiddenForURLScheme):
        (WebCore::SchemeRegistry::isDomainRelaxationForbiddenForURLScheme):
        * platform/SchemeRegistry.h:

2011-11-07  Dan Bernstein  <mitz@apple.com>

        <rdar://problem/10405215> REGRESSION (r98178): World of Warcraft Launcher crashes in FrameView::isOnActivePage()
        https://bugs.webkit.org/show_bug.cgi?id=71743

        Reviewed by Beth Dakin.

        * page/FrameView.cpp:
        (WebCore::FrameView::isOnActivePage): Added a check for a null m_frame.

2011-11-07  Dmitry Lomov  <dslomov@google.com>

        https://bugs.webkit.org/show_bug.cgi?id=71534
        [V8] On neutering TypedArrayViews, V8 should be notified to drain code generation cache.

        Reviewed by David Levin.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateImplementation):
        * bindings/scripts/CodeGeneratorV8.pm:
        * html/canvas/DataView.cpp:
        * html/canvas/DataView.h:
        * html/canvas/Float32Array.h:
        * html/canvas/Float64Array.h:
        * html/canvas/Int16Array.h:
        * html/canvas/Int32Array.h:
        * html/canvas/Int8Array.h:
        * html/canvas/TypedArrayBase.h:
        * html/canvas/Uint16Array.h:
        * html/canvas/Uint32Array.h:
        * html/canvas/Uint8Array.h:

2011-11-07  Adam Barth  <abarth@webkit.org>

        addMessage's last few arguments should be optional
        https://bugs.webkit.org/show_bug.cgi?id=70946

        Reviewed by Darin Adler.

        As requested by Darin Adler.  I wanted to call this method addMessage,
        but the compiler was unhappy locating the overload on
        ScriptExecutionContext when Document had an override too.  Changing the
        name to addConsoleMessage made all the code happier.

        * dom/Document.cpp:
        (WebCore::Document::processHttpEquiv):
        * dom/ScriptExecutionContext.cpp:
        (WebCore::ScriptExecutionContext::addMessage):
        * dom/ScriptExecutionContext.h:
        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::getImageData):
        * html/parser/XSSAuditor.cpp:
        (WebCore::XSSAuditor::filterToken):
        * loader/ImageLoader.cpp:
        (WebCore::ImageLoader::notifyFinished):
        * page/ContentSecurityPolicy.cpp:
        (WebCore::ContentSecurityPolicy::reportViolation):
        (WebCore::ContentSecurityPolicy::logUnrecognizedDirective):
        * page/EventSource.cpp:
        (WebCore::EventSource::didReceiveResponse):
        * webaudio/AudioBufferSourceNode.cpp:
        (WebCore::AudioBufferSourceNode::looping):
        (WebCore::AudioBufferSourceNode::setLooping):
        * webaudio/AudioContext.cpp:
        (WebCore::AudioContext::createLowPass2Filter):
        (WebCore::AudioContext::createHighPass2Filter):
        * xml/XMLHttpRequest.cpp:
        (WebCore::reportUnsafeUsage):

2011-11-07  Adam Barth  <abarth@webkit.org>

        WebWorkers fail with document.domain set when accessing from subdomain
        https://bugs.webkit.org/show_bug.cgi?id=67978

        Reviewed by Sam Weinig.

        Workers should ignore document.domain when deciding which URLs a
        document can request, just like XMLHttpRequest and every other API.

        Test: http/tests/workers/worker-document-domain-security.html

        * workers/AbstractWorker.cpp:
        (WebCore::AbstractWorker::resolveURL):

2011-11-07  Scott Graham  <scottmg@chromium.org>

        Allow gamepad API to be enabled at runtime
        https://bugs.webkit.org/show_bug.cgi?id=71736

        Part of full patch, found at
        https://bugs.webkit.org/show_bug.cgi?id=69451

        Reviewed by Adam Barth.

        No new tests. No new functionality.

        * bindings/generic/RuntimeEnabledFeatures.cpp:
        * bindings/generic/RuntimeEnabledFeatures.h:
        (WebCore::RuntimeEnabledFeatures::setGamepadsEnabled):
        (WebCore::RuntimeEnabledFeatures::gamepadsEnabled):

2011-11-07  Kentaro Hara  <haraken@chromium.org>

        Remove [CustomGetter] IDL for window.Option of V8
        https://bugs.webkit.org/show_bug.cgi?id=71735

        Reviewed by Nate Chapin.

        Currently, window.Option uses a custom getter to get the template
        of 'HTMLOptionElementConstructor'. However, this getter does not need to
        be custom and can use a default getter
        'DOMWindowInternal::DOMWindowConstructorGetter'.

        Tests: fast/js/custom-constructors.html
               fast/forms/option-index.html
               fast/forms/add-and-remove-option.html
               fast/dom/dom-add-optionelement.html

        * bindings/v8/custom/V8DOMWindowCustom.cpp: Removed a custom getter.
        * page/DOMWindow.idl: Removed [CustomGetter] IDL from window.Option of V8. Renamed 'HTMLOptionElementConstructor' to 'HTMLOptionElementConstructorConstructor' in order to make window.Option use the template of (not 'HTMLOptionElement' but) 'HTMLOptionElementConstructor'. Note that CodeGenerator*.pm strips /Constructor$/ from the IDL type.

2011-11-07  Mark Hahnenberg  <mhahnenberg@apple.com>

        De-virtualize JSObject::putWithAttributes
        https://bugs.webkit.org/show_bug.cgi?id=71716

        Reviewed by Darin Adler.

        No new tests.

        Added putWithAttributes to the MethodTable, changed all the virtual 
        implementations of putWithAttributes to static ones, and replaced 
        all call sites with corresponding lookups in the MethodTable.

        * bindings/js/JSDOMWindowShell.cpp:
        (WebCore::JSDOMWindowShell::putWithAttributes):
        * bindings/js/JSDOMWindowShell.h:

2011-11-07  Beth Dakin  <bdakin@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=71490
        Support uiStateTransitionProgress for scrollbars
        -and corresponding-
        <rdar://problem/9849612>

        Reviewed by Sam Weinig.

        Step 1 of supporting uiStateTransitionProgress is knowing when the mouse has 
        entered or exited a scrollbar. These changes to Scrollbar pass that information 
        on to the ScrollAnimator. Also, Scrollbar::mouseUp() now takes a 
        PlatformMouseEvent as a parameter. This is necessary because m_hoveredNode is not 
        always up to date on a mouseUp, so mouseUp must hitTest the scrollbar to see if 
        the mouse has exited the scrollbar.
        * platform/Scrollbar.cpp:
        (WebCore::Scrollbar::mouseMoved):
        (WebCore::Scrollbar::mouseExited):
        (WebCore::Scrollbar::mouseUp):
        * platform/Scrollbar.h:

        These changes are required now that Scrollbar::mouseUp() takes a parameter.
        * WebCore.exp.in:
        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleMouseDoubleClickEvent):
        (WebCore::EventHandler::handleMouseReleaseEvent):
        * platform/chromium/PopupListBox.cpp:
        (WebCore::PopupListBox::handleMouseReleaseEvent):
        * platform/win/PopupMenuWin.cpp:
        (WebCore::PopupMenuWin::wndProc):
        
        ScrollAnimator passes the information on to AppKit.
        * platform/ScrollAnimator.h:
        (WebCore::ScrollAnimator::mouseEnteredScrollbar):
        (WebCore::ScrollAnimator::mouseExitedScrollbar):
        * platform/mac/ScrollAnimatorMac.h:
        (WebCore::ScrollAnimatorMac::mouseEnteredScrollbar):
        (WebCore::ScrollAnimatorMac::mouseExitedScrollbar):

        There are several new pieces of AppKit api we must call into.
        * platform/mac/NSScrollerImpDetails.h:

        This is a temporary function that is needed for the time being since there is new 
        AppKit api required for this to work.
        * platform/mac/ScrollAnimatorMac.mm:
        (supportsUIStateTransitionProgress):

        I refactored WebScrollbarPartAnimation so that it can handle the 
        uiStateTransitionProgress animation as well as the alpha animations it already 
        handled. This mostly involved re-naming things and making use of a new enum called 
        FeatureToAnimate which keeps track of what the instance of 
        WebScrollbarPartAnimation is animating.
        (-[WebScrollbarPartAnimation initWithScrollbarPainter:animate:scrollAnimator:animateFrom:animateTo:duration:]):
        (-[WebScrollbarPartAnimation setScrollbarPainter:]):
        (-[WebScrollbarPartAnimation setStartValue:]):
        (-[WebScrollbarPartAnimation setEndValue:]):
        (-[WebScrollbarPartAnimation setCurrentProgress:]):

        WebScrollbarPainterDelegate has two new animations, 
        _verticalUIStateTransitionAnimation, and _horizontalUIStateTransitionAnimation. It 
        also responds to a few new delegate calls.
        (-[WebScrollbarPainterDelegate cancelAnimations]):

        This is a new delegate call needed for uiStateTransitionProgress.
        (-[WebScrollbarPainterDelegate mouseLocationInScrollerForScrollerImp:]):

        I re-named setUpAnimation to setUpAlphaAnimation since it does a lot of things 
        that are specific to the alpha animation and I chose not to re-use it for 
        uiStateTransition.
        (-[WebScrollbarPainterDelegate setUpAlphaAnimation:scrollerPainter:part:WebCore::animateAlphaTo:duration:]):
        (-[WebScrollbarPainterDelegate scrollerImp:animateKnobAlphaTo:duration:]):
        (-[WebScrollbarPainterDelegate scrollerImp:animateTrackAlphaTo:duration:]):

        New delegate call for the uiStateTransition animation that sets up that animation 
        and kicks it off.
        (-[WebScrollbarPainterDelegate scrollerImp:animateUIStateTransitionWithDuration:]):
        (-[WebScrollbarPainterDelegate scrollAnimatorDestroyed]):

2011-11-07  Alice Boxhall  <aboxhall@chromium.org>

        Remove unnecessary use of function pointer in FrameSelection::modify()
        https://bugs.webkit.org/show_bug.cgi?id=71646

        Reviewed by Ryosuke Niwa.

        * editing/FrameSelection.cpp:
        (WebCore::FrameSelection::modify):

2011-11-07  Andreas Kling  <kling@webkit.org>

        Unreviewed Windows build fix after r99468.

        * css/CSSPrimitiveValue.h: Unmark single-argument constructors
        as explicit, since this conflicts with the template constructors
        in CSSPrimitiveValueMappings.h.

2011-11-07  Jer Noble  <jer.noble@apple.com>

        Build fix due to a erroneous search-and-replace.

        Unreviewed build fix.

        Replace all instances of GenericClock with ClockGeneric.

        * WebCore.xcodeproj/project.pbxproj:
        * platform/ClockGeneric.cpp:
        (ClockGeneric::ClockGeneric):

2011-11-07  Adam Barth  <abarth@webkit.org>

        Move parseSandboxPolicy to SecurityContext
        https://bugs.webkit.org/show_bug.cgi?id=71732

        Reviewed by Eric Seidel.

        As requested by Eric, this patch resolves a layering inversion.  Now
        that we have SecurityContext to hold the sandbox bits and the origin,
        it's a logical place to put the parser for sandbox policies.

        * dom/SecurityContext.cpp:
        (WebCore::SecurityContext::parseSandboxPolicy):
        * dom/SecurityContext.h:
        * html/HTMLIFrameElement.cpp:
        (WebCore::HTMLIFrameElement::parseMappedAttribute):
        * page/ContentSecurityPolicy.cpp:
        (WebCore::ContentSecurityPolicy::applySandboxPolicy):
        * page/SecurityOrigin.cpp:
        * page/SecurityOrigin.h:

2011-11-07  Jer Noble  <jer.noble@apple.com>

        Rename PlatformClockPOSIX -> ClockGeneric, and use WTF::currentTime() for its timing source.
        https://bugs.webkit.org/show_bug.cgi?id=71702

        Reviewed by Sam Weinig.

        No new tests; covered by existing tests.

        * platform/Clock.cpp:
        (Clock::create):
        * platform/ClockGeneric.cpp: Renamed from Source/WebCore/platform/posix/PlatformClockPOSIX.cpp.
        (ClockGeneric::ClockGeneric):
        (ClockGeneric::setCurrentTime):
        (ClockGeneric::currentTime):
        (ClockGeneric::setPlayRate):
        (ClockGeneric::start):
        (ClockGeneric::stop):
        * platform/ClockGeneric.h: Renamed from Source/WebCore/platform/posix/PlatformClockPOSIX.h.
        (WebCore::ClockGeneric::playRate):
        (WebCore::ClockGeneric::isRunning):

        Boilerplate project file changes:
        * CMakeLists.txt:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.xcodeproj/project.pbxproj:

2011-11-07  Vangelis Kokkevis  <vangelis@chromium.org>

        Create a separate setting for compositing of for scrollable [i]frames
        that forceCompositingMode can be used without turning frames into composited layers.
        https://bugs.webkit.org/show_bug.cgi?id=71714

        Reviewed by James Robinson.

        * page/Settings.cpp:
        (WebCore::Settings::Settings):
        * page/Settings.h:
        (WebCore::Settings::setAcceleratedCompositingForScrollableFramesEnabled):
        (WebCore::Settings::acceleratedCompositingForScrollableFramesEnabled):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::cacheAcceleratedCompositingFlags):
        * testing/Internals.cpp:
        (WebCore::Internals::setEnableCompositingForScrollableFrames):
        * testing/Internals.h:
        * testing/Internals.idl:

2011-11-07  Rafael Weinstein  <rafaelw@chromium.org>

        [MutationObservers] Fix mac build (with mutation_observers enabled)
        https://bugs.webkit.org/show_bug.cgi?id=71728

        Reviewed by Tony Chang.

        Errant forward declaration of MutationObserverRegistration removed from
        Node.h this would have broken a port that tried to build with mutation_observers=1.

        * dom/Node.h:

2011-11-07  Kentaro Hara  <haraken@chromium.org>

        Remove [CustomGetter] IDL from 'HTMLAudioElementConstructor' of V8
        https://bugs.webkit.org/show_bug.cgi?id=71660

        Reviewed by Adam Barth.

        Currently, "new Audio()" uses a custom getter to get the template
        of 'HTMLAudioElementConstructor'. However, this getter does not need to
        be custom and can use a default getter 'DOMWindowInternal::DOMWindowConstructorGetter'.

        Tests: fast/js/custom-constructors.html
               media/audio-constructor.html
               media/audio-constructor-src.html
               media/audio-constructor-preload.html
               media/audio-controls-do-not-fade-out.html
               media/audio-controls-rendering.html

        * bindings/v8/custom/V8DOMWindowCustom.cpp: Removed a custom getter.
        * page/DOMWindow.idl: Removed [CustomGetter] IDL from 'HTMLAudioElementConstructor' of V8. Renamed 'HTMLAudioElementConstructor' to 'HTMLAudioElementConstructorConstructor' in order to make 'new Audio()' use the template of (not 'HTMLAudioElement' but) 'HTMLAudioElementConstructor'. Note that CodeGenerator*.pm strips /Constructor$/ from an IDL type.
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateImplementation): If an IDL type is 'XXXXConstructorConstructor', then we do not add a header file 'XXXXConstructor.h' to JSDOMWindow.cpp, because the NamedConstructor declaration is written in the header file of class XXXX 'XXXX.h'. Incidentally, the reason why CodeGeneratorV8.pm does not need a corresponding change is that V8 is still generating the NamedConstructor declaration in its dedicated header file 'XXXXConstructor.h'. This V8 issue will be fixed in the upcoming patch that implements [NamedConstructor] IDL in V8.

2011-11-07  Robert Sesek  <rsesek@chromium.org>

        [chromium] Update WebCore.gyp to not use WebKitLibraries in include_dirs
        https://bugs.webkit.org/show_bug.cgi?id=71694

        Reviewed by Adam Barth.

        * WebCore.gyp/WebCore.gyp:

2011-11-07  Dominic Cooney  <dominicc@chromium.org>

        Remove initPopStateEvent method
        https://bugs.webkit.org/show_bug.cgi?id=71691

        Reviewed by Ojan Vafai.

        * dom/PopStateEvent.cpp:
        * dom/PopStateEvent.h:
        * dom/PopStateEvent.idl:

2011-11-07  Andreas Kling  <kling@webkit.org>

        CSSValue: Devirtualize isFooType().
        <http://webkit.org/b/71668>

        Reviewed by Darin Adler.

        Add a member to CSSValue to determine which subclass a given
        value object is, along with 5 bits to tell us whether the
        value is primitive/mutable/initial/inherited/a list.

        All non-private subclass constructors now take CSSValue::ClassType
        as their first argument. A few constructors were duplicated as
        private members to allow calling them from ::create() methods
        without passing an explicit ClassType.

        Furthermore, since CSSValue::cssValueType() can be inferred from
        the subclass type, we compute it instead of storing it in a member.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:

            Adding CSSValue.cpp.

        * css/CSSValue.cpp: Added.
        (WebCore::CSSValue::cssValueType):

            Out-of-line implementation of this method. Only used by CSSOM.

        * css/CSSValue.h:
        (WebCore::CSSValue::isMutableValue):
        (WebCore::CSSValue::isPrimitiveValue):
        (WebCore::CSSValue::isValueList):
        (WebCore::CSSValue::isInitialValue):
        (WebCore::CSSValue::isInheritedValue):
        (WebCore::CSSValue::isBorderImageValue):
        (WebCore::CSSValue::isBorderImageSliceValue):
        (WebCore::CSSValue::isCursorImageValue):
        (WebCore::CSSValue::isFontFamilyValue):
        (WebCore::CSSValue::isFontFeatureValue):
        (WebCore::CSSValue::isFontValue):
        (WebCore::CSSValue::isImageGeneratorValue):
        (WebCore::CSSValue::isImageValue):
        (WebCore::CSSValue::isImplicitInitialValue):
        (WebCore::CSSValue::isReflectValue):
        (WebCore::CSSValue::isShadowValue):
        (WebCore::CSSValue::isTimingFunctionValue):
        (WebCore::CSSValue::isWebKitCSSTransformValue):
        (WebCore::CSSValue::isCSSLineBoxContainValue):
        (WebCore::CSSValue::isFlexValue):
        (WebCore::CSSValue::isWebKitCSSFilterValue):
        (WebCore::CSSValue::isSVGColor):
        (WebCore::CSSValue::isSVGPaint):
        (WebCore::CSSValue::classType):
        (WebCore::CSSValue::CSSValue):
        (WebCore::CSSValue::isPrimitiveType):
        (WebCore::CSSValue::isListType):
        (WebCore::CSSValue::isMutableType):
        (WebCore::CSSValue::isInheritedType):
        (WebCore::CSSValue::isInitialType):

            Store subclass type information into a member variable and
            made all the isFooValue() functions non-virtual and inline.
            Some subclass type lookups (primitive values, notably) are
            cached in a bool member on construction.

        * css/CSSAspectRatioValue.h:
        (WebCore::CSSAspectRatioValue::CSSAspectRatioValue):
        * css/CSSBorderImageSliceValue.cpp:
        (WebCore::CSSBorderImageSliceValue::CSSBorderImageSliceValue):
        * css/CSSBorderImageSliceValue.h:
        * css/CSSBorderImageValue.cpp:
        (WebCore::CSSBorderImageValue::CSSBorderImageValue):
        * css/CSSBorderImageValue.h:
        * css/CSSCanvasValue.h:
        (WebCore::CSSCanvasValue::CSSCanvasValue):
        * css/CSSCrossfadeValue.h:
        (WebCore::CSSCrossfadeValue::CSSCrossfadeValue):
        * css/CSSCursorImageValue.cpp:
        (WebCore::CSSCursorImageValue::CSSCursorImageValue):
        * css/CSSCursorImageValue.h:
        * css/CSSFlexValue.h:
        (WebCore::CSSFlexValue::CSSFlexValue):
        * css/CSSFontFaceSrcValue.h:
        (WebCore::CSSFontFaceSrcValue::CSSFontFaceSrcValue):
        * css/CSSFunctionValue.cpp:
        (WebCore::CSSFunctionValue::CSSFunctionValue):
        * css/CSSGradientValue.h:
        (WebCore::CSSGradientValue::isLinearGradient):
        (WebCore::CSSGradientValue::isRadialGradient):
        (WebCore::CSSGradientValue::CSSGradientValue):
        (WebCore::CSSLinearGradientValue::CSSLinearGradientValue):
        (WebCore::CSSRadialGradientValue::CSSRadialGradientValue):
        * css/CSSImageGeneratorValue.cpp:
        (WebCore::CSSImageGeneratorValue::CSSImageGeneratorValue):
        * css/CSSImageGeneratorValue.h:
        * css/CSSImageValue.cpp:
        (WebCore::CSSImageValue::CSSImageValue):
        * css/CSSImageValue.h:
        * css/CSSInheritedValue.h:
        (WebCore::CSSInheritedValue::CSSInheritedValue):
        * css/CSSInitialValue.h:
        (WebCore::CSSInitialValue::CSSInitialValue):
        (WebCore::CSSInitialValue::create):
        * css/CSSLineBoxContainValue.cpp:
        (WebCore::CSSLineBoxContainValue::CSSLineBoxContainValue):
        * css/CSSLineBoxContainValue.h:
        * css/CSSMutableValue.h:
        (WebCore::CSSMutableValue::CSSMutableValue):
        * css/CSSPrimitiveValue.cpp:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        * css/CSSPrimitiveValue.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        * css/CSSReflectValue.h:
        (WebCore::CSSReflectValue::CSSReflectValue):
        * css/CSSTimingFunctionValue.h:
        (WebCore::CSSTimingFunctionValue::isLinearTimingFunctionValue):
        (WebCore::CSSTimingFunctionValue::isCubicBezierTimingFunctionValue):
        (WebCore::CSSTimingFunctionValue::isStepsTimingFunctionValue):
        (WebCore::CSSTimingFunctionValue::CSSTimingFunctionValue):
        (WebCore::CSSLinearTimingFunctionValue::CSSLinearTimingFunctionValue):
        (WebCore::CSSCubicBezierTimingFunctionValue::CSSCubicBezierTimingFunctionValue):
        (WebCore::CSSStepsTimingFunctionValue::CSSStepsTimingFunctionValue):
        * css/CSSUnicodeRangeValue.h:
        (WebCore::CSSUnicodeRangeValue::CSSUnicodeRangeValue):
        * css/CSSValueList.cpp:
        (WebCore::CSSValueList::CSSValueList):
        * css/CSSValueList.h:
        * css/FontFamilyValue.cpp:
        (WebCore::FontFamilyValue::FontFamilyValue):
        * css/FontFamilyValue.h:
        * css/FontFeatureValue.cpp:
        (WebCore::FontFeatureValue::FontFeatureValue):
        * css/FontFeatureValue.h:
        * css/FontValue.h:
        (WebCore::FontValue::FontValue):
        * css/ShadowValue.cpp:
        (WebCore::ShadowValue::ShadowValue):
        * css/ShadowValue.h:
        * css/WebKitCSSFilterValue.cpp:
        (WebCore::WebKitCSSFilterValue::WebKitCSSFilterValue):
        * css/WebKitCSSFilterValue.h:
        * css/WebKitCSSTransformValue.cpp:
        (WebCore::WebKitCSSTransformValue::WebKitCSSTransformValue):
        * css/WebKitCSSTransformValue.h:
        * svg/SVGColor.cpp:
        (WebCore::SVGColor::SVGColor):
        * svg/SVGColor.h:
        * svg/SVGPaint.cpp:
        (WebCore::SVGPaint::SVGPaint):
        * svg/SVGPaint.h:

            Propagate subclass type information and kill isFooType() virtuals.

2011-11-07  Mihnea Ovidenie  <mihnea@adobe.com>

        Leaks seen in RenderRegion::setRenderBoxRegionInfo on Leaks bot
        https://bugs.webkit.org/show_bug.cgi?id=71259

        Reviewed by Darin Adler.

        Leak fixes covered by existing tests.

        * rendering/RenderFlowThread.cpp:
        (WebCore::RenderFlowThread::logicalWidthChangedInRegions):
        The RenderBoxRegionInfo taken out of RenderRegion must be deleted on all code paths.
        * rendering/RenderRegion.cpp:
        (WebCore::RenderRegion::removeRenderBoxRegionInfo):
        The RenderBoxRegionInfo map owns the values, therefore, when values are removed from map
        they must also be deleted.

2011-11-07  Adam Barth  <abarth@webkit.org>

        iframe sandbox treats vertical tab as a valid delimiter
        https://bugs.webkit.org/show_bug.cgi?id=71704

        Reviewed by Eric Seidel.

        This patch adjusts our parser slightly to match the HTML5 spec.  The
        only difference is in how we handle vertical tabs.  Previously, we
        treated them as a delimiter, but we're not supposed to do that.

        Test: fast/frames/sandboxed-iframe-parsing-space-characters.html

        * page/SecurityOrigin.cpp:
        (WebCore::SecurityOrigin::parseSandboxPolicy):

2011-11-07  Adam Barth  <abarth@webkit.org>

        Factor SecurityContext out of ScriptExecutionContext
        https://bugs.webkit.org/show_bug.cgi?id=71721

        Reviewed by Eric Seidel.

        The new SecurityContext object lets us tightly scope control of
        the security-critical information in ScriptExecutionContext.
        Originally I had hoped to put all this state on SecurityOrigin, but
        SecurityOrigin gets shared between documents in some corner cases, so
        it's not a good fit for state like the sandbox flags and the CSP policy
        that really needs to be per-document.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/DOMAllInOne.cpp:
        * dom/ScriptExecutionContext.cpp:
        (WebCore::ScriptExecutionContext::ScriptExecutionContext):
        * dom/ScriptExecutionContext.h:
        * loader/FrameLoader.h:
        * loader/FrameLoaderTypes.h:
        * page/SecurityOrigin.h:

2011-11-07  Kentaro Hara  <haraken@chromium.org>

        Refactor CodeGeneratorV8.pm before making a core change for bug 71093.
        https://bugs.webkit.org/show_bug.cgi?id=71659

        Reviewed by Adam Barth.

        Just refactor CodeGeneratorV8.pm without any change in behavior,
        as the first step for fixing bug 71093.

        Tests: WebCore/bindings/scripts/test/TestObj.idl
               WebCore/bindings/scripts/test/TestInterface.idl

        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateHeader): Sort generated headers in alphabetical order. Removed unnecessary variable names from method signatures. These changes are for silencing style check errors when a new TestXXXX.idl is added.
        (GenerateConstructorCallback): Renamed variables to clarify their roles.
        (WriteData): Removed an unused array @implHeaderContent.
        * bindings/scripts/test/V8/V8TestInterface.h: Updated a run-binding-tests result.
        * bindings/scripts/test/V8/V8TestMediaQueryListListener.h: Ditto.
        * bindings/scripts/test/V8/V8TestObj.h: Ditto.
        * bindings/scripts/test/V8/V8TestSerializedScriptValueInterface.h: Ditto.

2011-11-07  Ken Buchanan <kenrb@chromium.org>

        Crash due to mixed direction text runs
        https://bugs.webkit.org/show_bug.cgi?id=66015

        Reviewed by David Hyatt.

        Test for bug fix.

        * fast/text/international/bidi-neutral-in-mixed-direction-run-crash.html: Added
        * fast/text/international/bidi-neutral-in-mixed-direction-run-cras-expected.txt: Added

2011-11-07  Tim Horton  <timothy_horton@apple.com>

        getBBox() on a SVGPathElement with curves incorrectly includes control points
        https://bugs.webkit.org/show_bug.cgi?id=53512
        <rdar://problem/9861154>

        Reviewed by Oliver Hunt.

        Split Path::boundingRect() into two, adding Path::fastBoundingRect()
        for a rough estimate of the bounding rect (always equal to or larger
        than boundingRect()). fastBoundingRect() currently falls back to
        boundingRect() for all ports besides CG, though in most cases
        (on a port-by-port basis) the current implementation of boundingRect()
        will need to become fastBoundingRect(), and a new, more accurate method will
        be implemented for boundingRect().

        All previous callers of boundingRect() are transitioned to using fastBoundingRect()
        except SVGPathElement::getBBox, which wants an accurate bounding box.

        The CoreGraphics implementation of Path::boundingRect() called
        CGPathGetBoundingBox, which includes the path's control points in its
        calculations. Snow Leopard added CGPathGetPathBoundingBox, which
        finds the bounding box of only points within the path, and does not
        include control points. On Snow Leopard and above, we now use the latter.

        Test: svg/custom/getBBox-path.svg

        * html/HTMLAreaElement.cpp:
        * html/canvas/CanvasRenderingContext2D.cpp:
        * platform/graphics/Path.cpp:
        * platform/graphics/Path.h:
        * platform/graphics/cg/GraphicsContextCG.cpp:
        * platform/graphics/cg/PathCG.cpp:
        (WebCore::Path::boundingRect):
        * rendering/RenderObject.h:
        * rendering/svg/RenderSVGPath.cpp:
        * svg/SVGPathElement.cpp:
        * svg/SVGPathElement.h:

2011-11-07  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Suggest box should be open immediately if forced by Ctrl+Space.
        https://bugs.webkit.org/show_bug.cgi?id=71710

        Reviewed by Pavel Feldman.

        * inspector/front-end/TextPrompt.js:
        (WebInspector.TextPrompt.prototype.clearAutoComplete):
        (WebInspector.TextPrompt.prototype.autoCompleteSoon):

2011-11-07  vsevik@chromium.org  <vsevik@chromium.org>

        Web Inspector: Suggest box should consume enter key pressed event.
        https://bugs.webkit.org/show_bug.cgi?id=71700

        Reviewed by Pavel Feldman.

        * inspector/front-end/ConsoleView.js:
        (WebInspector.ConsoleView):
        * inspector/front-end/TextPrompt.js:
        (WebInspector.TextPrompt.prototype._attachInternal):
        (WebInspector.TextPrompt.SuggestBox.prototype.enterKeyPressed):

2011-11-07  David Barr  <davidbarr@chromium.org>

        Optimize outline rendering to avoid transparency layers
        https://bugs.webkit.org/show_bug.cgi?id=60750

        Add fast path for solid block outlines with alpha.
        Improve readability of piecewise path while at it.

        Reviewed by Simon Fraser.

        No intended change in behaviour, no new tests.

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::paintOutline):

2011-11-07  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Suggest box should not accept suggestion on space key pressed.
        https://bugs.webkit.org/show_bug.cgi?id=71706

        Reviewed by Pavel Feldman.

        * inspector/front-end/TextPrompt.js:
        (WebInspector.TextPrompt.prototype.onKeyDown):
        (WebInspector.TextPrompt.SuggestBox.prototype.tabKeyPressed):

2011-11-07  Andreas Kling  <kling@webkit.org>

        Don't use CSSOM's CSSValue.cssValueType internally in WebCore.
        <http://webkit.org/b/71679>

        Reviewed by Darin Adler.

        Swap out cssValueType() usage for isPrimitiveValue(), isInitialValue()
        and isInheritedValue() to increase code clarity.

        The plan is to turn cssValueType() into a computed value based on the
        CSSValue subclass (coming soon to <http://webkit.org/b/71668>.)
        This is a clean-up in preparation for that.

        * bindings/js/JSCSSStyleDeclarationCustom.cpp:
        (WebCore::JSCSSStyleDeclaration::nameGetter):
        * bindings/v8/custom/V8CSSStyleDeclarationCustom.cpp:
        (WebCore::V8CSSStyleDeclaration::namedPropertyGetter):
        * css/CSSInheritedValue.h:
        (WebCore::CSSInheritedValue::isInheritedValue):
        * css/CSSInitialValue.h:
        (WebCore::CSSInitialValue::isInitialValue):
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseColor):
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyDeclaration):
        (WebCore::CSSStyleSelector::applyProperty):
        (WebCore::CSSStyleSelector::mapFillAttachment):
        (WebCore::CSSStyleSelector::mapFillClip):
        (WebCore::CSSStyleSelector::mapFillComposite):
        (WebCore::CSSStyleSelector::mapFillOrigin):
        (WebCore::CSSStyleSelector::mapFillImage):
        (WebCore::CSSStyleSelector::mapFillRepeatX):
        (WebCore::CSSStyleSelector::mapFillRepeatY):
        (WebCore::CSSStyleSelector::mapFillSize):
        (WebCore::CSSStyleSelector::mapFillXPosition):
        (WebCore::CSSStyleSelector::mapFillYPosition):
        (WebCore::CSSStyleSelector::mapAnimationDelay):
        (WebCore::CSSStyleSelector::mapAnimationDirection):
        (WebCore::CSSStyleSelector::mapAnimationDuration):
        (WebCore::CSSStyleSelector::mapAnimationFillMode):
        (WebCore::CSSStyleSelector::mapAnimationIterationCount):
        (WebCore::CSSStyleSelector::mapAnimationName):
        (WebCore::CSSStyleSelector::mapAnimationPlayState):
        (WebCore::CSSStyleSelector::mapAnimationProperty):
        (WebCore::CSSStyleSelector::mapAnimationTimingFunction):
        * css/CSSValue.h:
        (WebCore::CSSValue::isInheritedValue):
        (WebCore::CSSValue::isInitialValue):
        * css/SVGCSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applySVGProperty):
        * editing/EditingStyle.cpp:
        (WebCore::EditingStyle::extractFontSizeDelta):
        (WebCore::EditingStyle::mergeStyleFromRulesForSerialization):

2011-11-07  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r99432.
        http://trac.webkit.org/changeset/99432
        https://bugs.webkit.org/show_bug.cgi?id=71709

        It made layout tests extra slow on all bots (Requested by
        Ossy_night on #webkit).

        * inspector/front-end/ConsoleView.js:
        (WebInspector.ConsoleView):
        * inspector/front-end/TextPrompt.js:
        (WebInspector.TextPrompt.prototype._attachInternal):
        (WebInspector.TextPrompt.SuggestBox.prototype.enterKeyPressed):

2011-11-07  Andreas Kling  <kling@webkit.org>

        REGRESSION(r99409): Broke transitions/clip-transition.html
        <http://webkit.org/b/71692>

        Reviewed by Darin Adler.

        Add missing base class initializers to CSSPrimitiveValue constructors.
        This was causing some CSSPrimitiveValues to masquerade as CSS_CUSTOM values.

        * css/CSSPrimitiveValue.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):

2011-11-07  ChangSeok Oh  <shivamidow@gmail.com>

        [EFL] Support requestAnimationFrame API
        https://bugs.webkit.org/show_bug.cgi?id=67112

        Reviewed by Andreas Kling.

        Add some files to build-target when enabling requestAnimationFrame option.

        fast/animation/request-animation-frame-cancel.html
        fast/animation/request-animation-frame-cancel2.html
        fast/animation/request-animation-frame-display.html
        fast/animation/request-animation-frame-during-modal.html
        fast/animation/request-animation-frame-timestamps.html
        fast/animation/request-animation-frame-within-callback.html
        fast/animation/request-animation-frame.html

        * CMakeLists.txt:
        * UseJSC.cmake:

2011-11-07  Sam Weinig  <sam@webkit.org>

        Add missing .in and .pl files to the Xcode project for easy access.

        Reviewed by Eric Carlson.

        * WebCore.xcodeproj/project.pbxproj:
        Add some missing files to the Xcode project.

2011-11-07  Jessie Berlin  <jberlin@apple.com>

        Need a way to allow a scheme access to Local Storage and Databases while Private Browsing is
        enabled.
        https://bugs.webkit.org/show_bug.cgi?id=71631

        Reviewed by Jon Honeycutt.

        Check the SchemeRegistry before preventing read/write access to Local Storage and Databases
        in Private Browsing.

        * WebCore.exp.in:
        Export the symbols for registering the schemes as allowing Local Storage and Database access
        in Private Browsing.

        * dom/Document.cpp:
        (WebCore::Document::allowDatabaseAccess):
        Check if the scheme allows Database access in Private Browsing.

        * platform/SchemeRegistry.cpp:
        (WebCore::schemesAllowingLocalStorageAccessInPrivateBrowsing):
        (WebCore::schemesAllowingDatabaseAccessInPrivateBrowsing):
        (WebCore::SchemeRegistry::registerURLSchemeAsAllowingLocalStorageAccessInPrivateBrowsing):
        (WebCore::SchemeRegistry::allowsLocalStorageAccessInPrivateBrowsing):
        (WebCore::SchemeRegistry::registerURLSchemeAsAllowingDatabaseAccessInPrivateBrowsing):
        (WebCore::SchemeRegistry::allowsDatabaseAccessInPrivateBrowsing):
        * platform/SchemeRegistry.h:

        * storage/Storage.cpp:
        (WebCore::Storage::length):
        Ask the storage area if it is disabled by Private Browsing in the frame instead of just
        checking if Private Browsing is enabled for that frame because the answer might depend on
        what type of storage that storage area is.
        (WebCore::Storage::key):
        Ditto.
        (WebCore::Storage::getItem):
        Ditto.
        (WebCore::Storage::contains):
        Ditto.

        * storage/StorageArea.h:
        Make it possible to query a StorageArea for whether it is disabled by Private Browsing in a
        Frame.
        * storage/StorageAreaImpl.cpp:
        (WebCore::StorageAreaImpl::disabledByPrivateBrowsingInFrame):
        Renamed from privateBrowsingEnabled.
        Check not only if Private Browsing is enabled for the Frame, but also if the storage type is
        Local Storage and if there is an exception for the scheme of the resource currently loaded
        into the Frame.
        (WebCore::StorageAreaImpl::setItem):
        Renamed privateBrowsingEnabled -> disabledByPrivateBrowsingInFrame.
        (WebCore::StorageAreaImpl::removeItem):
        Ditto.
        (WebCore::StorageAreaImpl::clear):
        Ditto.
        * storage/StorageAreaImpl.h:

2011-11-07  Dominic Cooney  <dominicc@chromium.org>

        Remove initCloseEvent method
        https://bugs.webkit.org/show_bug.cgi?id=71374

        Reviewed by Ojan Vafai.

        Test: fast/dom/Window/window-properties.html

        * websockets/CloseEvent.h:
        (WebCore::CloseEvent::initCloseEvent):
        * websockets/CloseEvent.idl:

2011-11-07  Anders Carlsson  <andersca@apple.com>

        Simplify NetscapePlugin::convertPoint and make it work (in theory) with transformed plug-ins
        https://bugs.webkit.org/show_bug.cgi?id=71699

        Reviewed by Sam Weinig.

        Export AffineTransform symbols used by WebKit2.

        * WebCore.exp.in:

2011-11-07  Michael Saboff  <msaboff@apple.com>

        Towards 8 Bit Strings: Templatize JSC::Lexer class by character type
        https://bugs.webkit.org/show_bug.cgi?id=71331

        Changed the SourceProvider::data() virtual method to return a
        StringImpl* instead of a UChar*.
        Changed Identifier() constructor to use JSGlobalData*.

        Reviewed by Darin Adler.

        No new tests - refactored SourceProvider class and sub-classes.

        * bindings/js/CachedScriptSourceProvider.h:
        (WebCore::CachedScriptSourceProvider::stringData):
        * bindings/js/StringSourceProvider.h:
        (WebCore::StringSourceProvider::stringData):
        * bridge/qt/qt_runtime.cpp:
        (JSC::Bindings::convertQVariantToValue):

2011-11-07  Dominic Cooney  <dominicc@chromium.org>

        Remove initOverflowEvent from JavaScript bindings
        https://bugs.webkit.org/show_bug.cgi?id=71687

        Reviewed by Ojan Vafai.

        Now that OverflowEvent has a constructor, we don't need the
        initOverflowEvent method. It has to remain in the Objective C
        binding because it is part of the Objective C public API.

        * dom/OverflowEvent.idl:

2011-11-07  Noel Gordon  <noel.gordon@gmail.com>

        Refactor canvas encoding mimeType validation
        https://bugs.webkit.org/show_bug.cgi?id=71651

        Reviewed by Andreas Kling.

        No new tests, refactoring only, covered by existing canvas tests.

        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::toEncodingMimeType): move encoder mimeType
        validation logic into a helper routine.
        (WebCore::HTMLCanvasElement::toDataURL):
        * html/HTMLCanvasElement.h:

2011-11-07  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Suggest box should consume enter key pressed event.
        https://bugs.webkit.org/show_bug.cgi?id=71700

        Reviewed by Pavel Feldman.

        * inspector/front-end/ConsoleView.js:
        (WebInspector.ConsoleView):
        * inspector/front-end/TextPrompt.js:
        (WebInspector.TextPrompt.prototype._attachInternal):
        (WebInspector.TextPrompt.SuggestBox.prototype.enterKeyPressed):

2011-11-07  Dominic Cooney  <dominicc@chromium.org>

        Remove initPageTransitionEvent method
        https://bugs.webkit.org/show_bug.cgi?id=71689

        Reviewed by Ojan Vafai.

        initPageTransitionEvent was removed from the HTML spec; it has
        been replaced by new PageTransitionEvent(...).

        Removing a method, so no new tests.

        * dom/PageTransitionEvent.cpp:
        * dom/PageTransitionEvent.h:
        * dom/PageTransitionEvent.idl:

2011-11-07  Alexander Pavlov  <apavlov@chromium.org>

        Web Inspector: TextPrompt+SuggestBox should autocomplete on "Right" keydown and with a single suggestion in place
        https://bugs.webkit.org/show_bug.cgi?id=71676

        Reviewed by Pavel Feldman.

        * inspector/front-end/TextPrompt.js:
        (WebInspector.TextPrompt.prototype.onKeyDown):
        (WebInspector.TextPrompt.SuggestBox.prototype._updateItems):
        * inspector/front-end/inspectorCommon.css:
        (body): Revert inadvertent style change from a preceding commit.

2011-11-07  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Fix the Qt build on Mac OS X when using the QuickTime media backend

        When QtWebKit is built on Mac OS X using the QuickTime media backend
        we build both KURLCFNet.cpp and KURLMac, just like the Mac port, so
        we have to guard the potentially duplicate symbol createCFURL with
        more than just !PLATFORM(MAC).

        Reviewed by Andreas Kling.

        * platform/cf/KURLCFNet.cpp:

2011-11-07  Pavel Feldman  <pfeldman@google.com>

        Not reviewed: follow up to r99407. Style the suggest box.
        https://bugs.webkit.org/show_bug.cgi?id=65511


        * inspector/front-end/TextPrompt.js:
        * inspector/front-end/inspector.css:
        * inspector/front-end/textPrompt.css:

2011-11-07  Roland Steiner  <rolandsteiner@chromium.org>

        https://bugs.webkit.org/show_bug.cgi?id=70223
        CSSStyleSheet: finding the owner node should be in its own method

        Add styleSheetOwnerNode() function that returns the owner Node of the style sheet, or 0.

        Reviewed by Dimitri Glazkov.

        No new tests. (refactoring)

        * css/CSSStyleSheet.cpp:
        (WebCore::CSSStyleSheet::styleSheetOwnerNode):
        (WebCore::CSSStyleSheet::document):
        * css/CSSStyleSheet.h:

2011-11-07  Yury Semikhatsky  <yurys@chromium.org>

        [Chromium] Web Inspector: use native worker inspector instead of fake workers
        https://bugs.webkit.org/show_bug.cgi?id=71670

        Removed context menu option for switching between native and "fake" workers
        debugger. Native debugger is used by default on platforms that support it.

        Reviewed by Pavel Feldman.

        * English.lproj/localizedStrings.js:
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype._toggleFormatSource):
        * inspector/front-end/Settings.js:
        (WebInspector.Settings):
        * inspector/front-end/WorkersSidebarPane.js:
        (WebInspector.WorkerListSidebarPane):
        (WebInspector.WorkerListSidebarPane.prototype._autoattachToWorkersClicked):
        * inspector/front-end/scriptsPanel.css:
        (#shared-workers-list):

2011-11-07  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Add advanced search shortcut to ShortcutsScreen.
        https://bugs.webkit.org/show_bug.cgi?id=71302

        Reviewed by Pavel Feldman.

        * English.lproj/localizedStrings.js:
        * inspector/front-end/AdvancedSearchController.js:
        (WebInspector.AdvancedSearchController.createShortcut):
        * inspector/front-end/inspector.js:
        (WebInspector._registerShortcuts):

2011-11-07  Andreas Kling  <kling@webkit.org>

        CSSImageValue: Remove inheritance from CachedImageClient.
        <http://webkit.org/b/71675>

        Reviewed by Antti Koivisto.

        CSSImageValue doesn't actually use any of the CachedImageClient
        functionality, and holds a reference to the resource via the
        CachedResourceHandle in StyleCachedImage.

        So we can safely remove the multiple inheritance and simplify
        the class.

        * css/CSSImageValue.cpp:
        (WebCore::CSSImageValue::~CSSImageValue):
        (WebCore::CSSImageValue::cachedImage):
        (WebCore::CSSImageValue::clearCachedImage):
        * css/CSSImageValue.h:

2011-11-07  Andreas Kling  <kling@webkit.org>

        CSSPrimitiveValue: Remove unused virtual function parseString().
        <http://webkit.org/b/71671>

        Reviewed by Antti Koivisto.

        * css/CSSPrimitiveValue.cpp:
        * css/CSSPrimitiveValue.h:

2011-11-07  Andrey Kosyakov  <caseq@chromium.org>

        Web Inspector: use toString as the Date object description.
        https://bugs.webkit.org/show_bug.cgi?id=71605

        Reviewed by Yury Semikhatsky.

        Test: inspector/remote-object.html

        * inspector/InjectedScriptSource.js:
        (.):

2011-10-26  Andrey Kosyakov  <caseq@chromium.org>

        Web Inspector: [refactoring] get JS-specific methods out of SourceFrame
        https://bugs.webkit.org/show_bug.cgi?id=70885

        Reviewed by Pavel Feldman.

        No new tests, as there's no new functionality.

        * inspector/front-end/JavaScriptSourceFrame.js:
        (WebInspector.JavaScriptSourceFrame):
        (WebInspector.JavaScriptSourceFrame.prototype.willHide):
        (WebInspector.JavaScriptSourceFrame.prototype.requestContent):
        (WebInspector.JavaScriptSourceFrame.prototype.canEditSource):
        (WebInspector.JavaScriptSourceFrame.prototype.suggestedFileName):
        (WebInspector.JavaScriptSourceFrame.prototype.editContent):
        (WebInspector.JavaScriptSourceFrame.prototype.contentChanged):
        (WebInspector.JavaScriptSourceFrame.prototype.setReadonly):
        (WebInspector.JavaScriptSourceFrame.prototype.populateLineGutterContextMenu.addConditionalBreakpoint.didEditBreakpointCondition):
        (WebInspector.JavaScriptSourceFrame.prototype.populateLineGutterContextMenu.):
        (WebInspector.JavaScriptSourceFrame.prototype.populateLineGutterContextMenu.else.editBreakpointCondition.didEditBreakpointCondition):
        (WebInspector.JavaScriptSourceFrame.prototype.populateLineGutterContextMenu.else):
        (WebInspector.JavaScriptSourceFrame.prototype.populateLineGutterContextMenu):
        (WebInspector.JavaScriptSourceFrame.prototype.populateTextAreaContextMenu):
        (WebInspector.JavaScriptSourceFrame.prototype.afterTextChanged):
        (WebInspector.JavaScriptSourceFrame.prototype.beforeTextChanged):
        (WebInspector.JavaScriptSourceFrame.prototype.cancelEditing):
        (WebInspector.JavaScriptSourceFrame.prototype.didEditContent):
        (WebInspector.JavaScriptSourceFrame.prototype._getPopoverAnchor):
        (WebInspector.JavaScriptSourceFrame.prototype._onShowPopover.showObjectPopover):
        (WebInspector.JavaScriptSourceFrame.prototype._onShowPopover):
        (WebInspector.JavaScriptSourceFrame.prototype._onHidePopover):
        (WebInspector.JavaScriptSourceFrame.prototype.addBreakpoint):
        (WebInspector.JavaScriptSourceFrame.prototype.removeBreakpoint):
        (WebInspector.JavaScriptSourceFrame.prototype._mouseDown):
        (WebInspector.JavaScriptSourceFrame.prototype._editBreakpointCondition.finishEditing):
        (WebInspector.JavaScriptSourceFrame.prototype._editBreakpointCondition):
        (WebInspector.JavaScriptSourceFrame.prototype._createConditionElement):
        (WebInspector.JavaScriptSourceFrame.prototype.setExecutionLine):
        (WebInspector.JavaScriptSourceFrame.prototype.clearExecutionLine):
        (WebInspector.JavaScriptSourceFrame.prototype._lineNumberAfterEditing):
        (WebInspector.JavaScriptSourceFrame.prototype._onTextViewerContentLoaded):
        (WebInspector.JavaScriptSourceFrameDelegate):
        (WebInspector.JavaScriptSourceFrameDelegate.prototype.requestContent):
        (WebInspector.JavaScriptSourceFrameDelegate.prototype.setBreakpoint):
        (WebInspector.JavaScriptSourceFrameDelegate.prototype.removeBreakpoint):
        (WebInspector.JavaScriptSourceFrameDelegate.prototype.updateBreakpoint):
        (WebInspector.JavaScriptSourceFrameDelegate.prototype.findBreakpoint):
        (WebInspector.JavaScriptSourceFrameDelegate.prototype.continueToLine):
        (WebInspector.JavaScriptSourceFrameDelegate.prototype.canEditScriptSource):
        (WebInspector.JavaScriptSourceFrameDelegate.prototype.setScriptSource):
        (WebInspector.JavaScriptSourceFrameDelegate.prototype.setScriptSourceIsBeingEdited):
        (WebInspector.JavaScriptSourceFrameDelegate.prototype.suggestedFileName):
        (WebInspector.JavaScriptSourceFrameDelegate.prototype.addToWatch):
        * inspector/front-end/ResourceView.js:
        (WebInspector.ResourceSourceFrame):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.SourceFrameDelegateForScriptsPanel):
        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame):
        (WebInspector.SourceFrame.prototype.willHide):
        (WebInspector.SourceFrame.prototype.get textViewer):
        (WebInspector.SourceFrame.prototype.requestContent):
        (WebInspector.SourceFrame.prototype._saveViewerState):
        (WebInspector.SourceFrame.prototype._restoreViewerState):
        (WebInspector.SourceFrame.prototype.beforeTextChanged):
        (WebInspector.SourceFrame.prototype.afterTextChanged):
        (WebInspector.SourceFrame.prototype._initializeTextViewer):
        (WebInspector.SourceFrame.prototype.populateLineGutterContextMenu):
        (WebInspector.SourceFrame.prototype.suggestedFileName):
        (WebInspector.SourceFrame.prototype.canEditSource):
        (WebInspector.SourceFrame.prototype.startEditing):
        (WebInspector.SourceFrame.prototype.commitEditing):
        (WebInspector.SourceFrame.prototype.didEditContent):
        (WebInspector.SourceFrame.prototype.editContent):
        (WebInspector.SourceFrame.prototype.cancelEditing):
        (WebInspector.SourceFrame.prototype.setReadOnly):
        * inspector/front-end/inspector.html:

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

        CSSValue: Devirtualize cssValueType().
        <http://webkit.org/b/71667>

        Reviewed by Antti Koivisto.

        Keep the cssValueType in a CSSValue member instead of using
        virtual functions.

        This is part of a project to completely devirtualize CSSValue
        <http://webkit.org/b/71666> and will incur a temporary object
        size regression for CSSValue while the work is ongoing.

        * css/CSSInheritedValue.cpp:
        * css/CSSInheritedValue.h:
        (WebCore::CSSInheritedValue::CSSInheritedValue):
        * css/CSSInitialValue.cpp:
        * css/CSSInitialValue.h:
        (WebCore::CSSInitialValue::CSSInitialValue):
        * css/CSSPrimitiveValue.cpp:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        * css/CSSPrimitiveValue.h:
        * css/CSSValue.h:
        (WebCore::CSSValue::cssValueType):
        (WebCore::CSSValue::CSSValue):
        * css/CSSValueList.cpp:
        (WebCore::CSSValueList::CSSValueList):
        * css/CSSValueList.h:

2011-11-07  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: introduce UserAgent override setting.
        https://bugs.webkit.org/show_bug.cgi?id=71627

        Reviewed by Yury Semikhatsky.

        * English.lproj/localizedStrings.js:
        * inspector/InspectorResourceAgent.cpp:
        (WebCore::InspectorResourceAgent::clearFrontend):
        (WebCore::InspectorResourceAgent::applyUserAgentOverride):
        (WebCore::InspectorResourceAgent::setUserAgentOverride):
        * inspector/front-end/HelpScreen.js:
        (WebInspector.HelpScreen):
        (WebInspector.HelpScreen.prototype.show):
        (WebInspector.HelpScreen.prototype._onBlur):
        * inspector/front-end/NetworkManager.js:
        (WebInspector.NetworkManager.prototype._cacheDisabledSettingChanged):
        (WebInspector.NetworkManager.prototype._userAgentSettingChanged):
        * inspector/front-end/Settings.js:
        (WebInspector.Settings):
        * inspector/front-end/SettingsScreen.js:
        (WebInspector.SettingsScreen):
        (WebInspector.SettingsScreen.prototype._createSelectSetting.get for):
        (WebInspector.SettingsScreen.prototype._createCustomSetting):
        (WebInspector.SettingsScreen.prototype._createUserActionControl.checkboxClicked):
        (WebInspector.SettingsScreen.prototype._createUserAgentSelectRowElement.get const):
        (WebInspector.SettingsScreen.prototype._createUserAgentSelectRowElement.textDoubleClicked):
        (WebInspector.SettingsScreen.prototype._createUserAgentSelectRowElement.textChanged):
        * inspector/front-end/helpScreen.css:
        (.help-table td):
        (.help-content fieldset label):

2011-11-07  Alexander Pavlov  <apavlov@chromium.org>

        Web Inspector: autocomplete combobox for Styles sidebar and Console.
        https://bugs.webkit.org/show_bug.cgi?id=65511

        Reviewed by Pavel Feldman.

        * inspector/front-end/ConsoleView.js:
        (WebInspector.ConsoleView):
        * inspector/front-end/StylesSidebarPane.js:
        (WebInspector.StylePropertyTreeElement.prototype):
        ():
        * inspector/front-end/TextPrompt.js:
        (WebInspector.TextPrompt):
        (WebInspector.TextPrompt.prototype.setSuggestBoxEnabled):
        (WebInspector.TextPrompt.prototype._attachInternal):
        (WebInspector.TextPrompt.prototype.applySuggestion):
        (WebInspector.TextPrompt.prototype.acceptSuggestion):
        (WebInspector.TextPromptWithHistory):
        * inspector/front-end/inspector.css:
        (.suggest-box.generic-suggest):
        (.suggest-box.generic-suggest.above-anchor):
        (.suggest-box.generic-suggest .content):

2011-11-07  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: split script-formatter test into multiple tests.
        https://bugs.webkit.org/show_bug.cgi?id=71607

        Reviewed by Yury Semikhatsky.

        Tests: inspector/debugger/script-formatter-breakpoints.html
               inspector/debugger/script-formatter-console.html

        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype._removeSourceFrame):

2011-11-07  Keishi Hattori  <keishi@webkit.org>

        Change ColorChooser from singleton to ordinary object
        https://bugs.webkit.org/show_bug.cgi?id=71644

        Reviewed by Kent Tamura.

        Changing WebCore::ColorChooser from a singleton to an ordinary object can broaden how browsers implement the color chooser interface.

        * WebCore.exp.in:
        * html/ColorInputType.cpp:
        (WebCore::ColorInputType::~ColorInputType):
        (WebCore::ColorInputType::setValue): If a chooser exists, calls Chrome::setSelectedColorInColorChooser
        (WebCore::ColorInputType::handleDOMActivateEvent):
        (WebCore::ColorInputType::detach):
        (WebCore::ColorInputType::didCleanup): Called after cleanup is complete.
        (WebCore::ColorInputType::cleanupColorChooser): Renamed from cleanupColorChooserIfCurrentClient.
        * html/ColorInputType.h:
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::selectColorInColorChooser):
        * html/HTMLInputElement.h:
        * loader/EmptyClients.h:
        (WebCore::EmptyChromeClient::cleanupColorChooser): Added colorChooser argument because there are many WebCore::ColorChoosers now.
        (WebCore::EmptyChromeClient::setSelectedColorInColorChooser): Ditto.
        * page/Chrome.cpp:
        (WebCore::Chrome::cleanupColorChooser): Added colorChooser argument because there are many WebCore::ColorChoosers now.
        (WebCore::Chrome::setSelectedColorInColorChooser): Ditto.
        * page/Chrome.h:
        * page/ChromeClient.h:
        * platform/ColorChooser.cpp:
        (WebCore::ColorChooserClient::~ColorChooserClient):
        (WebCore::ColorChooserClient::newColorChooser): Creates a new color chooser that is connected to itself.
        (WebCore::ColorChooserClient::discardChooser): Discards the connected color chooser.
        (WebCore::ColorChooser::ColorChooser): ColorChooser is RefCounted.
        (WebCore::ColorChooser::create): Creates a ColorChooser that is connected to the given ColorChooserClient.
        (WebCore::ColorChooser::~ColorChooser):
        (WebCore::ColorChooser::didChooseColor): Called from WebKit side when user chose a color. Calls ColorChooserClient::didChooseColor
        (WebCore::ColorChooser::didCleanup): Called from WebKit side when user color chooser was cleaned up. Calls ColorChooserClient::didCleanup
        * platform/ColorChooser.h:
        (WebCore::ColorChooserClient::chooser): Returns the current ColorChooser.
        (WebCore::ColorChooser::disconnectClient): Disconnects the ColorChooserClient.
        * testing/Internals.cpp:
        (WebCore::Internals::selectColorInColorChooser): Added element argument. This calls didChooseColor on the ColorChooser of that element.
        * testing/Internals.h:
        * testing/Internals.idl: Removed connectColorChooserClient and updated selectColorInColorChooser.

2011-11-07  Alexander Pavlov  <apavlov@chromium.org>

        Web Inspector: Cannot edit elements commented with <!--
        https://bugs.webkit.org/show_bug.cgi?id=71357

        Reviewed by Pavel Feldman.

        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::getOuterHTML):
        (WebCore::InspectorDOMAgent::setOuterHTML):
        * inspector/front-end/ElementsTreeOutline.js:
        (WebInspector.ElementsTreeOutline.prototype.populateContextMenu):
        (WebInspector.ElementsTreeElement.prototype._populateTagContextMenu):
        (WebInspector.ElementsTreeElement.prototype._populateTextContextMenu):
        (WebInspector.ElementsTreeElement.prototype._populateNodeContextMenu):

2011-11-06  Noel Gordon  <noel.gordon@gmail.com>

        Fix some style issues in ImageBuffer.h
        https://bugs.webkit.org/show_bug.cgi?id=71649

        Reviewed by Kent Tamura.

        No new tests. Style change only.

        * platform/graphics/ImageBuffer.h:

2011-11-06  Keishi Hattori  <keishi@webkit.org>

        InputType::fallbackValue and defaultValue should be const
        https://bugs.webkit.org/show_bug.cgi?id=71641

        Reviewed by Kent Tamura.
    
        Changing InputType::fallbackValue and defaultValue to const. Also adding OVERRIDE.

        * html/BaseCheckableInputType.cpp:
        (WebCore::BaseCheckableInputType::fallbackValue):
        * html/BaseCheckableInputType.h:
        * html/ColorInputType.cpp:
        (WebCore::ColorInputType::fallbackValue):
        * html/ColorInputType.h:
        * html/InputType.cpp:
        (WebCore::InputType::fallbackValue):
        (WebCore::InputType::defaultValue):
        * html/InputType.h:
        * html/RangeInputType.cpp:
        (WebCore::RangeInputType::fallbackValue):
        * html/RangeInputType.h:
        * html/ResetInputType.cpp:
        (WebCore::ResetInputType::defaultValue):
        * html/ResetInputType.h:
        * html/SubmitInputType.cpp:
        (WebCore::SubmitInputType::defaultValue):
        * html/SubmitInputType.h:

2011-11-06  Keishi Hattori  <keishi@webkit.org>

        Remove ColorInputType::handleClickEvent
        https://bugs.webkit.org/show_bug.cgi?id=71640

        Reviewed by Kent Tamura.

        When you click the input color element, both ColorInputType::handleClickEvent and
        ColorInputType::handleDOMActivateEvent are called, causing Chrome::openColorChooser
        to be called too many times.

        * html/ColorInputType.cpp: Removed ColorInputType::handleClickEvent
        * html/ColorInputType.h: Removed ColorInputType::handleClickEvent

2011-11-06  Keishi Hattori  <keishi@webkit.org>

        Remove extra semicolon in ColorInputType
        https://bugs.webkit.org/show_bug.cgi?id=71639

        Reviewed by Kent Tamura.

        * html/ColorInputType.cpp:
        (WebCore::ColorInputType::setValue):

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

        Remove initBeforeLoadEvent method
        https://bugs.webkit.org/show_bug.cgi?id=71636

        Reviewed by Adam Barth.

        Test: fast/dom/Window/window-properties.html

        * dom/BeforeLoadEvent.h:
        * dom/BeforeLoadEvent.idl:

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

        Don't crash when a context hasn't been created.  This fixed a
        testing-only crash on the bots in the Chromium port.

        * testing/v8/WebCoreTestSupport.cpp:
        (WebCoreTestSupport::resetInternalsObject):

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

        Leaks seen in RenderFlowThread::setRegionRangeForBox on Leaks bot
        https://bugs.webkit.org/show_bug.cgi?id=71260

        Reviewed by Mark Rowe.

        Memory leak fix covered by existing tests.

        * rendering/RenderFlowThread.cpp:
        (WebCore::RenderFlowThread::removeRenderBoxRegionInfo):
        Instead of calling remove, call take and then delete, since the
        values of the map are owned and need to be deleted when removed.

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

        Implement the sandbox directive for CSP
        https://bugs.webkit.org/show_bug.cgi?id=71604

        Reviewed by Sam Weinig.

        At TPAC, Microsoft was pushing pretty hard to add the sandbox directive
        to CSP.  There's a question about whether it's going to be in CSP 1.0
        or CSP 1.1, but it seems to be clearly headed into the spec.

        This patch implements the sandbox directive for CSP.  It's built on the
        same machinery we use for the sandbox attribute for iframe.  Now that
        I've done the implementation, I'm going to write up some concrete text
        for the spec.

        Tests: http/tests/security/contentSecurityPolicy/sandbox-allow-scripts-subframe.html
               http/tests/security/contentSecurityPolicy/sandbox-allow-scripts.html
               http/tests/security/contentSecurityPolicy/sandbox-empty-subframe.html
               http/tests/security/contentSecurityPolicy/sandbox-empty.html

        * page/ContentSecurityPolicy.cpp:
        (WebCore::ContentSecurityPolicy::ContentSecurityPolicy):
        (WebCore::ContentSecurityPolicy::applySandboxPolicy):
        (WebCore::ContentSecurityPolicy::addDirective):
        * page/ContentSecurityPolicy.h:

2011-11-03  Filip Pizlo  <fpizlo@apple.com>

        JSC should be able to sample itself in a more flexible way than just sampling flags
        https://bugs.webkit.org/show_bug.cgi?id=71522

        Reviewed by Gavin Barraclough.

        No new tests, since no functionality changed.

        * ForwardingHeaders/wtf/Spectrum.h: Added.

2011-11-06  Nikita Vasilyev  <me@elv1s.ru>

        Web Inspector: Unindent edited text by pressing Shift + Tab
        https://bugs.webkit.org/show_bug.cgi?id=70181

        Indent and unindent text in all selected lines.

        Reviewed by Pavel Feldman.

        * inspector/front-end/TextViewer.js:
        (WebInspector.TextEditorMainPanel.prototype.unindentLines.get var):
        (WebInspector.TextEditorMainPanel.prototype.unindentLines):

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

        Remove ContextShadow
        https://bugs.webkit.org/show_bug.cgi?id=71617

        Reviewed by Ariya Hidayat.

        No new tests. This patch does not change behavior.

        Completely remove ContextShadow. It's unused, unmaintained, and
        replaced by ShadowBlur.

        * WebCore.gypi: Remove references to deleted files.
        * WebCore.vcproj/WebCore.vcproj: Remove references to deleted files.
        * platform/graphics/ContextShadow.cpp: Removed.
        * platform/graphics/ContextShadow.h: Removed.
        * platform/gtk/WidgetRenderingContext.cpp: Remove now-inaccurate TODO.

2011-11-04  Jon Lee  <jonlee@apple.com>

        Dragging a file onto <input type="file"> should give distinct visual feedback
        https://bugs.webkit.org/show_bug.cgi?id=13897
        <rdar://problem/5232483>

        Reviewed by Dan Bernstein.

        When hovering over a file input element, we set the button's state to active
        to differentiate dragging one file over the input element (which populates that
        element) versus over the document (which would load the file into the view).

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::HTMLInputElement):
        (WebCore::HTMLInputElement::canReceiveDroppedFiles):
        (WebCore::HTMLInputElement::setCanReceiveDroppedFiles): If set, the element
        is updated, which sets the active state on the button control.
        * html/HTMLInputElement.h: Add a boolean member representing whether the file
        input can receive dropped files.
        * page/DragController.cpp:
        (WebCore::DragController::DragController): Update/set the file input that
        can receive dropped files.
        (WebCore::DragController::dragExited):
        (WebCore::DragController::tryDocumentDrag):
        (WebCore::DragController::concludeEditDrag):
        * page/DragController.h:
        * rendering/RenderFileUploadControl.cpp:
        (WebCore::RenderFileUploadControl::updateFromElement): Sets the button active
        state if the input can receive dropped files.

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

        Improve pending resource hash table code, including fixing a memory leak
        https://bugs.webkit.org/show_bug.cgi?id=71616

        Reviewed by Adam Roben.

        Memory leak fix and refactoring covered by existing tests.

        * svg/SVGDocumentExtensions.cpp:
        (WebCore::SVGDocumentExtensions::addPendingResource): Replace the combination
        of contains, get, and add with just add, removing an extra unneeded hash table
        lookup each time this function is called.
        (WebCore::SVGDocumentExtensions::isElementInPendingResources): Added a comment
        about the performance of this function. Removed unnecessary check for an empty
        map; the code already efficiently exits doing nothing without the check.
        (WebCore::SVGDocumentExtensions::removeElementFromPendingResources): Removed
        unnecessary check for an empty map; the code already efficiently does nothing
        without the check. Use removePendingResource rather than calling remove to
        avoid leaking the SVGPendingElements set.
        (WebCore::SVGDocumentExtensions::removePendingResource): Replace the
        combination of get and remove with a call to take, removing an extra
        unneeded hash table lookup each time this function is called

2011-11-05  Dan Winship  <danw@gnome.org>

        [GTK] Actually use the user_data arguments to gio async functions
        instead of using g_object_set_data() to basically reinvent them.
        https://bugs.webkit.org/show_bug.cgi?id=71614

        Reviewed by Martin Robinson.

        No new tests; behavior is unchanged

        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::ResourceHandleInternal::~ResourceHandleInternal):
        (WebCore::cleanupSoupRequestOperation):
        (WebCore::sendRequestCallback):
        (WebCore::startHTTPRequest):
        (WebCore::ResourceHandle::platformSetDefersLoading):
        (WebCore::closeCallback):
        (WebCore::readCallback):
        (WebCore::startNonHTTPRequest):

2011-11-05  Dan Winship  <danw@gnome.org>

        [GTK] Don't unnecessarily 0-initialize read buffers.
        https://bugs.webkit.org/show_bug.cgi?id=71612

        Reviewed by Martin Robinson.

        No new tests; behavior is unchanged

        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::sendRequestCallback):

2011-11-05  Dan Winship  <danw@gnome.org>

        [GTK] Remove a bit of dead code
        https://bugs.webkit.org/show_bug.cgi?id=71613

        Reviewed by Martin Robinson.

        No new tests; behavior is unchanged

        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::readCallback): the caller that needed the convertToUTF16
        code was removed in r77408, but the code was accidentally left
        behind.

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

        Refactor sandbox flag calculation to make implementing CSP sandbox directive easier
        https://bugs.webkit.org/show_bug.cgi?id=71603

        Reviewed by Sam Weinig.

        This patch changes the way we compute sandbox bits.  Instead of caching
        the result on Frame, we always compute the sandbox bits for a new
        document fresh from the inputs to the process (the sandbox attribute
        and the forced sandbox flags).

        This patch is just refactoring.  It shouldn't have an observable
        effects.  This patch makes it easier to implement CSP's sandbox
        directive in a subsequent patch.

        * dom/Document.cpp:
        (WebCore::Document::initSecurityContext):
        * html/HTMLFrameOwnerElement.cpp:
        (WebCore::HTMLFrameOwnerElement::setSandboxFlags):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::FrameLoader):
        (WebCore::FrameLoader::init):
        (WebCore::FrameLoader::effectiveSandboxFlags):
        (WebCore::createWindow):
        * loader/FrameLoader.h:
        (WebCore::FrameLoader::forceSandboxFlags):

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

        CSSStyleDeclaration: Devirtualize isMutableStyleDeclaration().
        https://bugs.webkit.org/show_bug.cgi?id=71609

        Reviewed by Anders Carlsson.

        Add a bool member to CSSStyleDeclaration that determines whether
        it's a CSSMutableDeclaration.

        * css/CSSMutableStyleDeclaration.cpp:
        (WebCore::CSSMutableStyleDeclaration::CSSMutableStyleDeclaration):
        * css/CSSMutableStyleDeclaration.h:
        * css/CSSStyleDeclaration.cpp:
        (WebCore::CSSStyleDeclaration::CSSStyleDeclaration):
        * css/CSSStyleDeclaration.h:
        (WebCore::CSSStyleDeclaration::isMutableStyleDeclaration):

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

        Web Inspector: Simplify InspectorCSSAgent::inlineStyleElement().
        https://bugs.webkit.org/show_bug.cgi?id=71608

        Reviewed by Pavel Feldman.

        Use CSSMutableStyleDeclaration::isInlineStyleDeclaration() instead
        of doing the same checks manually.

        * inspector/InspectorCSSAgent.cpp:
        (WebCore::InspectorCSSAgent::inlineStyleElement):

2011-11-05  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Andreas Kling.

        Removed duplicated npruntime_internal.h from bindings/v8
        in favour of the one from bridge/, which has a few more
        #undefs.

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

        * bindings/v8/npruntime_internal.h: Removed.
        * Target.pri: Removed strange occurence here.

2011-11-05  Simon Hausmann  <simon.hausmann@nokia.com>

        Remove empty and unused dom/PositionCreationFunctions.h header file
        https://bugs.webkit.org/show_bug.cgi?id=71552

        Reviewed by Kenneth Rohde Christiansen.

        The file is empty (0 bytes) and not used anywhere. It was added in
        2009 in r48234 but hasn't been touched since then.

        * WebCore.gypi:
        * dom/PositionCreationFunctions.h: Removed.

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

        Fix assert after running tests in dumpAsText folders.  See
        https://bugs.webkit.org/show_bug.cgi?id=71599 for discussion.  This
        patch reverts part of a slightly over-agressive refactoring in
        http://trac.webkit.org/changeset/99347.

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

2011-11-04  Ben Wells  <benwells@chromium.org>

        Canvas drawImage(canvas) with SourceIn, DestinationIn, SourceOut, DestinationAtop and Copy have errors
        https://bugs.webkit.org/show_bug.cgi?id=71537

        Reviewed by Stephen White.

        drawImage(canvas) now uses the same approach as drawImage(image) to fix these errors.

        Test: fast/canvas/canvas-composite-canvas.html

        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::drawImage):
        (WebCore::drawImageToContext):
        (WebCore::CanvasRenderingContext2D::fullCanvasCompositedDrawImage):
        * html/canvas/CanvasRenderingContext2D.h:

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

        JavaScript URLs execute in sandboxed iframes
        https://bugs.webkit.org/show_bug.cgi?id=71599

        Reviewed by Eric Seidel.

        This patch fixes the intentional regression I introduced earlier today
        by moving the sandbox bits from SecurityOrigin to Document. In the
        process, I renamed SecurityOrigin::createEmpty to
        SecurityOrigin::createUnique to better align with HTML5 terminology.

        * WebCore.exp.in:
        * bindings/ScriptControllerBase.cpp:
        (WebCore::ScriptController::canExecuteScripts):
        * dom/Document.cpp:
        (WebCore::Document::setIsViewSource):
        (WebCore::Document::initSecurityContext):
        * dom/ScriptExecutionContext.cpp:
        (WebCore::ScriptExecutionContext::ScriptExecutionContext):
        * dom/ScriptExecutionContext.h:
        (WebCore::ScriptExecutionContext::sandboxFlags):
        (WebCore::ScriptExecutionContext::enforceSandboxFlags):
        (WebCore::ScriptExecutionContext::isSandboxed):
        * html/HTMLAppletElement.cpp:
        (WebCore::HTMLAppletElement::canEmbedJava):
        * loader/DocumentWriter.cpp:
        (WebCore::DocumentWriter::begin):
        * loader/FrameLoader.cpp:
        (WebCore::isDocumentSandboxed):
        (WebCore::FrameLoader::addHTTPOriginIfNeeded):
        * loader/PolicyChecker.cpp:
        (WebCore::PolicyChecker::checkNewWindowPolicy):
        * loader/SubframeLoader.cpp:
        (WebCore::SubframeLoader::requestPlugin):
        * page/SecurityOrigin.cpp:
        (WebCore::SecurityOrigin::SecurityOrigin):
        (WebCore::SecurityOrigin::create):
        (WebCore::SecurityOrigin::createUnique):
        * page/SecurityOrigin.h:

2011-11-04  Joseph Pecoraro  <pecoraro@apple.com>

        Potential Unused Param Build Issue
        https://bugs.webkit.org/show_bug.cgi?id=71598

        Reviewed by Kent Tamura.

        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::platformHandleKeydownEvent):

2011-11-04  Stephen Chenney  <schenney@chromium.org>

        Crash in ScrollAnimator.cpp
        https://bugs.webkit.org/show_bug.cgi?id=69865

        The code in ScrollAnimator assumes that horizontal per-page mouse
        wheel events cannot happen, which is not true. This patch adds layout
        tests for all paging wheel event situations and fixes the broken
        horizontal case.

        Reviewed by Anders Carlsson

        Tests: fast/events/platform-wheelevent-paging-x-in-non-scrolling-div.html
               fast/events/platform-wheelevent-paging-x-in-non-scrolling-page.html
               fast/events/platform-wheelevent-paging-x-in-scrolling-div.html
               fast/events/platform-wheelevent-paging-x-in-scrolling-page.html
               fast/events/platform-wheelevent-paging-xy-in-scrolling-div.html
               fast/events/platform-wheelevent-paging-xy-in-scrolling-page.html
               fast/events/platform-wheelevent-paging-y-in-non-scrolling-div.html
               fast/events/platform-wheelevent-paging-y-in-non-scrolling-page.html
               fast/events/platform-wheelevent-paging-y-in-scrolling-div.html
               fast/events/platform-wheelevent-paging-y-in-scrolling-page.html

        * platform/PlatformWheelEvent.h: Modify the comment to reflect the new
        reality.
        * platform/ScrollAnimator.cpp:
        (WebCore::ScrollAnimator::handleWheelEvent): Modified the code to handle the
        horizontal per-page wheel event case.

2011-11-04  Rafael Weinstein  <rafaelw@chromium.org>

        [MutationObservers] Refactor MutationObserverRegistration into its own class that is
        referenced by registration points

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

        Reviewed by Ojan Vafai.

        MutationObserverRegistration is now owned by the node which is observed. If transient
        registrations are created, they hold a reference to this object.

        The ownership relationship between Node, MutationObserverRegistration &
        WebKitMutationObserver now goes like this: WebKitMutationObserver is RefCounted -
        and only script and MutationObserverRegistration take references to it. Exactly
        one MutationObserverRegistration can exist for any given tuple of
        <Node, WebKitMutationObserver>. This represents an observer observing at a given
        Node. Further observation by the same observer has the effect of *resetting*
        the existing observation. The Node owns the MutationObserverRegistration.
        Transient registrations are only pointers to the registration. The registration
        keeps a RefPtr to its registration node and all of its transient registration nodes
        as long as *any* transient registrations exist. This ensures the registration
        and all registration nodes stay alive at least until the end of the microtask.

        No tests required - refactor only.

        * GNUmakefile.list.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/CharacterData.cpp:
        (WebCore::enqueueCharacterDataMutationRecord):
        * dom/ChildListMutationScope.cpp:
        (WebCore::MutationAccumulationRouter::MutationAccumulationRouter::incrementScopingLevel):
        * dom/Element.cpp:
        (WebCore::enqueueAttributesMutationRecord):
        * dom/MutationObserverRegistration.cpp: Added.
        (WebCore::MutationObserverRegistration::create):
        (WebCore::MutationObserverRegistration::MutationObserverRegistration):
        (WebCore::MutationObserverRegistration::~MutationObserverRegistration):
        (WebCore::MutationObserverRegistration::resetObservation):
        (WebCore::MutationObserverRegistration::observedSubtreeNodeWillDetach):
        (WebCore::MutationObserverRegistration::clearTransientRegistrations):
        (WebCore::MutationObserverRegistration::unregister):
        (WebCore::MutationObserverRegistration::shouldReceiveMutationFrom):
        * dom/MutationObserverRegistration.h: Copied from Source/WebCore/dom/WebKitMutationObserver.h.
        (WebCore::MutationObserverRegistration::observer):
        (WebCore::MutationObserverRegistration::deliveryOptions):
        * dom/Node.cpp:
        (WebCore::Node::clearRareData):
        (WebCore::Node::mutationObserverRegistry):
        (WebCore::Node::transientMutationObserverRegistry):
        (WebCore::addObserverToDeliverySet):
        (WebCore::Node::collectMatchingObserversForMutation):
        (WebCore::Node::getRegisteredMutationObserversOfType):
        (WebCore::Node::registerMutationObserver):
        (WebCore::Node::unregisterMutationObserver):
        (WebCore::Node::registerTransientMutationObserver):
        (WebCore::Node::unregisterTransientMutationObserver):
        (WebCore::Node::notifyMutationObserversNodeWillDetach):
        * dom/Node.h:
        * dom/NodeRareData.h:
        (WebCore::NodeRareData::mutationObserverRegistry):
        (WebCore::NodeRareData::ensureMutationObserverRegistry):
        (WebCore::NodeRareData::transientMutationObserverRegistry):
        (WebCore::NodeRareData::ensureTransientMutationObserverRegistry):
        * dom/WebKitMutationObserver.cpp:
        (WebCore::WebKitMutationObserver::~WebKitMutationObserver):
        (WebCore::WebKitMutationObserver::observe):
        (WebCore::WebKitMutationObserver::disconnect):
        (WebCore::WebKitMutationObserver::observationStarted):
        (WebCore::WebKitMutationObserver::observationEnded):
        (WebCore::WebKitMutationObserver::deliver):
        * dom/WebKitMutationObserver.h:

2011-11-04  Raymond Toy  <rtoy@google.com>

       Add methods to compute magnitude and phase response for biquads
       https://bugs.webkit.org/show_bug.cgi?id=71055

       Reviewed by Kenneth Russell.


        * platform/audio/Biquad.cpp:
        (WebCore::Biquad::getFrequencyResponse):
        Computes the magnitude and phase (radians) response for the given
        biquad at the specified set of (normalized) frequencies.
        * platform/audio/Biquad.h:
        Declare getFrequencyResponse.
        * webaudio/BiquadDSPKernel.cpp:
        (WebCore::BiquadDSPKernel::updateCoefficientsIfNecessary):
        Factor out the code that updates filter coefficients.  Allow the
        caller to specify whether the smoothed values are used or not and
        whether we do the update even if the coefficients are not dirty.
        (WebCore::BiquadDSPKernel::process):
        Use updateCoefficientsIfNecessary to update.
        (WebCore::BiquadDSPKernel::getFrequencyResponse):
        Implmentation of getFrequencyResponse.
        * webaudio/BiquadDSPKernel.h:
        Declare getFrequencyResponse.
        * webaudio/BiquadFilterNode.cpp:
        (WebCore::BiquadFilterNode::getFrequencyResponse):
        Implementation of getFrequencyResponse
        * webaudio/BiquadFilterNode.h:
        Declare getFrequencyResponse.
        * webaudio/BiquadFilterNode.idl:
        Define interface to getFrequencyResponse.
        * webaudio/BiquadProcessor.cpp:
        (WebCore::BiquadProcessor::checkForDirtyCoefficients):
        Factor out code for checking for dirty coefficients.
        (WebCore::BiquadProcessor::process):
        Use checkForDirtyCoefficients.
        (WebCore::BiquadProcessor::getFrequencyResponse):
        Implementation of getFrequencyResponse
        * webaudio/BiquadProcessor.h:
        Declare getFrequencyResponse.

2011-11-04  Benjamin Poulain  <bpoulain@apple.com>

        [Mac] ResourceRequest's nsURLRequest() does not differentiate null and empty URLs with CFNetwork
        https://bugs.webkit.org/show_bug.cgi?id=71539

        Reviewed by David Kilzer.

        In order to have CFURL and NSURL to be consistent when both are used on Mac,
        KURL::createCFURL() is changed to support empty URL values.

        * platform/cf/KURLCFNet.cpp:
        (WebCore::createCFURLFromBuffer):
        (WebCore::KURL::createCFURL):
        * platform/mac/KURLMac.mm:
        (WebCore::KURL::operator NSURL *):
        (WebCore::KURL::createCFURL):

2011-11-04  Fady Samuel  <fsamuel@chromium.org>

        CSS Aspect Ratio Property Parsing Stage
        https://bugs.webkit.org/show_bug.cgi?id=70707

        Reviewed by Ojan Vafai.

        Added parsing support for -webkit-aspect-ratio CSS property.
        The spec can be found here: http://www.xanthir.com/blog/b4810

        Test: fast/css/aspect-ratio-parsing-tests.html

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSAspectRatioValue.cpp: Added.
        (WebCore::CSSAspectRatioValue::~CSSAspectRatioValue):
        (WebCore::CSSAspectRatioValue::cssText):
        * css/CSSAspectRatioValue.h: Added.
        (WebCore::CSSAspectRatioValue::create):
        (WebCore::CSSAspectRatioValue::numeratorValue):
        (WebCore::CSSAspectRatioValue::denominatorValue):
        (WebCore::CSSAspectRatioValue::CSSAspectRatioValue):
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        * css/CSSMutableStyleDeclaration.cpp:
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):
        (WebCore::CSSParser::parseAspectRatio):
        * css/CSSParser.h:
        * css/CSSProperty.cpp:
        (WebCore::CSSProperty::isInheritedProperty):
        * css/CSSPropertyNames.in:
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):

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

        Delete FrameLoader::isSandboxed
        https://bugs.webkit.org/show_bug.cgi?id=71591

        Reviewed by Eric Seidel.

        We should always use document->securityOrigin()->isSandboxed because
        that picks up the sandbox bits that are frozen on the document rather
        than the ones that could change on the Frame.

        This patch starts preparing us to implement the CSP sandbox directive,
        which will cause use to have document sandbox bits without any attribute.

        * bindings/ScriptControllerBase.cpp:
        (WebCore::ScriptController::canExecuteScripts):
            - This call site was the only functional site left where these two
              could be different. This patch causes one progression and one
              regression. The progression is that we now correctly freeze the
              allow-scripts bit when a document is created, but the regression
              is we now allow the execution of JavaScript URLs, as noted in 
              fast/frames/sandboxed-iframe-scripting.html. That's even more of
              an edge case, so I think it's a win overall.
        * loader/DocumentWriter.cpp:
        (WebCore::DocumentWriter::begin):
            - I don't think this part of the change is testable. There's no
              time to execute script between when the bits get copied off the
              Frame and when they're checked, so there's no time to change them.
        * loader/FrameLoader.cpp:
            - Update FIXME comment that is now fixed.
        * loader/FrameLoader.h:
            - Remove wrong API.

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

        When CSP blocks mixed content, we shouldn't also warn about mixed content
        https://bugs.webkit.org/show_bug.cgi?id=71588

        Reviewed by Eric Seidel.

        Getting both warnings confused some early adopters.  They thought the
        insecure loads were happening even though they blocked them with CSP.
        This patch restricts the mixed content warnings to show only when the
        load isn't already blocked by CSP or by the embedder.

        Test: http/tests/security/contentSecurityPolicy/block-mixed-content-hides-warning.html

        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::canRequest):

2011-11-04  Michael Nordman  <michaeln@google.coom>

        Allow ScriptExecutionContext::addMessage to be called from background threads.
        https://bugs.webkit.org/show_bug.cgi?id=71575

        Reviewed by Nate Chapin.

        No new tests.

        * dom/Document.cpp:
        (WebCore::Document::addMessage):
        * dom/ScriptExecutionContext.cpp:
        * dom/ScriptExecutionContext.h:
        (WebCore::ScriptExecutionContext::AddConsoleMessageTask::create):
        (WebCore::ScriptExecutionContext::AddConsoleMessageTask::performTask):
        (WebCore::ScriptExecutionContext::AddConsoleMessageTask::AddConsoleMessageTask):
        * workers/WorkerContext.cpp:
        (WebCore::WorkerContext::addMessage):

2011-11-04  Shawn Singh  <shawnsingh@chromium.org>

        [chromium] Re-named the original scissorRect to clipRect
        https://bugs.webkit.org/show_bug.cgi?id=71580

        Reviewed by James Robinson.

        Existing tests are updated appropriately; and no new behavior is
        introduced by this patch.

        * platform/graphics/chromium/LayerChromium.cpp:
        (WebCore::LayerChromium::LayerChromium):
        * platform/graphics/chromium/LayerChromium.h:
        (WebCore::LayerChromium::setUsesLayerClipping):
        (WebCore::LayerChromium::usesLayerClipping):
        (WebCore::LayerChromium::clipRect):
        (WebCore::LayerChromium::setClipRect):
        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::drawLayersInternal):
        (WebCore::LayerRendererChromium::drawLayer):
        * platform/graphics/chromium/RenderSurfaceChromium.h:
        (WebCore::RenderSurfaceChromium::clipRect):
        (WebCore::RenderSurfaceChromium::setClipRect):
        * platform/graphics/chromium/cc/CCLayerImpl.cpp:
        (WebCore::CCLayerImpl::CCLayerImpl):
        * platform/graphics/chromium/cc/CCLayerImpl.h:
        (WebCore::CCLayerImpl::setUsesLayerClipping):
        (WebCore::CCLayerImpl::usesLayerClipping):
        (WebCore::CCLayerImpl::clipRect):
        (WebCore::CCLayerImpl::setClipRect):
        * platform/graphics/chromium/cc/CCLayerTreeHost.cpp:
        (WebCore::CCLayerTreeHost::updateLayers):
        * platform/graphics/chromium/cc/CCLayerTreeHostCommon.cpp:
        (WebCore::layerShouldBeSkipped):
        (WebCore::calculateDrawTransformsAndVisibilityInternal):
        * platform/graphics/chromium/cc/CCLayerTreeHostCommon.h:
        (WebCore::CCLayerTreeHostCommon::calculateVisibleLayerRect):
        * platform/graphics/chromium/cc/CCRenderSurface.cpp:
        (WebCore::CCRenderSurface::draw):
        * platform/graphics/chromium/cc/CCRenderSurface.h:
        (WebCore::CCRenderSurface::setClipRect):
        (WebCore::CCRenderSurface::clipRect):

2011-11-04  Dmitry Lomov  <dslomov@google.com>

        Add the ability to transfer ArrayBuffer and "neuter" it.
        https://bugs.webkit.org/show_bug.cgi?id=71535

        Reviewed by David Levin.

        * html/canvas/ArrayBuffer.cpp:
        (WebCore::ArrayBuffer::create):
        (WebCore::ArrayBuffer::ArrayBuffer):
        (WebCore::ArrayBuffer::data):
        (WebCore::ArrayBuffer::byteLength):
        (WebCore::ArrayBuffer::transfer):
        (WebCore::ArrayBufferContents::~ArrayBufferContents):
        (WebCore::ArrayBufferContents::tryAllocate):
        (WebCore::ArrayBuffer::addView):
        (WebCore::ArrayBuffer::removeView):
        * html/canvas/ArrayBuffer.h:
        (WebCore::ArrayBufferContents::ArrayBufferContents):
        (WebCore::ArrayBufferContents::data):
        (WebCore::ArrayBufferContents::sizeInBytes):
        (WebCore::ArrayBufferContents::release):
        (WebCore::ArrayBuffer::~ArrayBuffer):
        * html/canvas/ArrayBufferView.cpp:
        (WebCore::ArrayBufferView::ArrayBufferView):
        (WebCore::ArrayBufferView::~ArrayBufferView):
        (WebCore::ArrayBufferView::neuter):
        * html/canvas/ArrayBufferView.h:
        * html/canvas/DataView.cpp:
        (WebCore::DataView::neuter):
        (WebCore::DataView::neuterBinding):
        * html/canvas/DataView.h:
        * html/canvas/TypedArrayBase.h:
        (WebCore::TypedArrayBase::neuter):
        (WebCore::TypedArrayBase::neuterBinding):

2011-11-04  Noel Gordon  <noel.gordon@gmail.com>

        [Chromium] Implement canvas.toDataURL("image/webp")
        https://bugs.webkit.org/show_bug.cgi?id=70172

        Reviewed by Adam Barth.

        Add a webp image encoder for the chromium skia ports, add it to the canvas
        element toDataURL() flow with support for an optional quality [0.0-1.0].
        Use a webp compression method (3) that provides good speed and compression
        performance for this image format, and works well for various input image
        types: line-art, screen-shots, and photographic images.

        Test: fast/canvas/canvas-toDataURL-webp.html

        * WebCore.gypi:
        * platform/chromium/MIMETypeRegistryChromium.cpp:
        (WebCore::MIMETypeRegistry::isSupportedImageMIMETypeForEncoding):
        * platform/graphics/skia/ImageBufferSkia.cpp:
        (WebCore::ImageToDataURL):
        * platform/image-encoders/skia/WEBPImageEncoder.cpp: Added.
        (WebCore::writeOutput):
        (WebCore::importPicture):
        (WebCore::importPictureBGRA):
        (WebCore::importPictureRGBA):
        (WebCore::encodePixels):
        (WebCore::WEBPImageEncoder::encode):
        * platform/image-encoders/skia/WEBPImageEncoder.h: Added.

2011-11-04  Patrick Gansterer  <paroga@webkit.org>

        [Qt] Remove ENABLE_SQLITE from qmake files
        https://bugs.webkit.org/show_bug.cgi?id=71546

        Reviewed by Simon Hausmann.

        ENABLE_SQLITE is required to build WebCore, so remove conditions.

        * Target.pri:

2011-11-04  Nate Chapin  <japhet@chromium.org>

        [V8] Null out V8NPObject::rootObject when the owning
        Frame goes away.
        https://bugs.webkit.org/show_bug.cgi?id=71569

        Reviewed by Adam Barth.

        No new tests, this has only been successfully triggered
        using ppapi flash.

        * bindings/v8/V8Helpers.cpp:
        (WebCore::toV8Context):
        * bindings/v8/npruntime.cpp:

2011-11-04  Vineet Chaudhary  <vineet.chaudhary@motorola.com>

        Send the submissions character encoding in hidden _charset_ field.
        https://bugs.webkit.org/show_bug.cgi?id=19079

        Reviewed by Darin Adler.

        Spec reference http://dev.w3.org/html5/spec/Overview.html#attr-fe-name-charset
        If _charset_ used as the name of a hidden control it should send character encoding
        as value while submissions.

        Tests: http/tests/misc/char-encoding-in-hidden-charset-field-default.html
               http/tests/misc/char-encoding-in-hidden-charset-field-with-Big5.html
               http/tests/misc/char-encoding-in-hidden-charset-field-with-EUC-JP.html
               http/tests/misc/char-encoding-in-hidden-charset-field-with-ISO-2022-JP.html
               http/tests/misc/char-encoding-in-hidden-charset-field-with-Shift_JIS.html
               http/tests/misc/char-encoding-in-hidden-charset-field-with-accept-charset.html
               http/tests/misc/char-encoding-in-hidden-charset-field-with-get-method.html
               http/tests/misc/char-encoding-in-hidden-charset-field-with-one-field.html
               http/tests/misc/char-encoding-in-text-charset-field-with-value.html
               http/tests/misc/char-encoding-without-charset-field.html

        * html/HiddenInputType.cpp:
        (WebCore::HiddenInputType::isHiddenType):
        (WebCore::HiddenInputType::appendFormData): For _charset_ send value as respective encodingType.
        * html/HiddenInputType.h: Override appendFormData for hidden control types.

2011-11-04  Robert Sesek  <rsesek@chromium.org>

        [chromium] Use Chromium's copy of libWebKitSystemInterfaceLeopard.a
        https://bugs.webkit.org/show_bug.cgi?id=71563

        Reviewed by Adam Barth.

        Use libWebKitSystemInterfaceLeopard.a that's in the Chromium port,
        rather in WebKitLibraries/.

        * WebCore.gyp/WebCore.gyp:

2011-11-04  Julien Chaffraix  <jchaffraix@webkit.org>

        RenderLayer::styleChanged invalidates the GraphicsLayer needlessly
        https://bugs.webkit.org/show_bug.cgi?id=71517

        Reviewed by Simon Fraser.

        Unused code removal covered by existing tests.

        The current code is invalidating the whole RenderLayerBacking as part of
        a style change. However this is redundant with the repainting logic which
        would invalidate only the necessary bits.

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::styleChanged):
        Remove the invalidation code as it duplicates and defeats the repaint logic.

2011-11-04  Mihnea Ovidenie  <mihnea@adobe.com>

        Correct parsing of incomplete @-webkit-region rules.
        https://bugs.webkit.org/show_bug.cgi?id=71514

        Reviewed by Adam Barth.

        Test: fast/regions/parse-incomplete-region-rule.html

        Make sure to set the region rule to 0 on the fail branch.
        * css/CSSGrammar.y:

2011-11-04  Adam Klein  <adamk@chromium.org>

        Reduce refcount churn in ChildListMutationScope
        https://bugs.webkit.org/show_bug.cgi?id=71527

        Reviewed by Ryosuke Niwa.

        Only the ChildListMutationAccumulator needs to hold a reference to the
        target node, and the added/removed children only need be ref'd if a
        ChildListMutationAccumulator exists (i.e., if there are interested
        observers).

        * dom/ChildListMutationScope.cpp:
        (WebCore::MutationAccumulationRouter::ChildListMutationAccumulator::enqueueMutationRecord):
        (WebCore::MutationAccumulationRouter::MutationAccumulationRouter::childAdded):
        (WebCore::MutationAccumulationRouter::MutationAccumulationRouter::willRemoveChild):
        (WebCore::ChildListMutationScope::ChildListMutationScope):
        (WebCore::ChildListMutationScope::~ChildListMutationScope):
        (WebCore::ChildListMutationScope::childAdded):
        (WebCore::ChildListMutationScope::willRemoveChild):
        * dom/ChildListMutationScope.h:
        * dom/ContainerNode.cpp:
        (WebCore::dispatchChildInsertionEvents):
        (WebCore::dispatchChildRemovalEvents):

2011-11-04  Levi Weintraub  <leviw@chromium.org>

        Correct usage of LayoutUnits in RenderImage and SVGImage
        https://bugs.webkit.org/show_bug.cgi?id=71525

        Reviewed by Darin Adler.

        Correcting incorrect usage of LayoutUnits for image sizes that should be integers and fixing overloaded functions that
        should be using LayoutUnits.

        No new tests -- no change in behavior.

        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::imageDimensionsChanged):
        (WebCore::RenderImage::paintIntoRect):
        (WebCore::RenderImage::nodeAtPoint):
        (WebCore::RenderImage::computeReplacedLogicalWidth):
        * rendering/RenderImage.h:
        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImageChromeClient::invalidateContentsAndWindow):

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

        Implement allow-popups for iframe@sandbox
        https://bugs.webkit.org/show_bug.cgi?id=66505

        Reviewed by Darin Adler.

        Enable allow-popups sandbox bit.  My previous patch attempted to
        forward the sandbox bits during setOpener, but that interacted poorly
        with out (internal) sandboxing of the initial document.  This patch
        forwards the bits during createWindow, which is more targeted to the
        case when a sandbox frame actually creates a new window.

        * loader/FrameLoader.cpp:
        (WebCore::createWindow):
        * loader/PolicyChecker.cpp:
        (WebCore::PolicyChecker::checkNewWindowPolicy):

2011-11-04  Kaustubh Atrawalkar  <kaustubh@motorola.com>

        Remove initMediaStreamEvent method
        https://bugs.webkit.org/show_bug.cgi?id=71344

        This method has been removed from the spec draft.
        http://www.whatwg.org/specs/web-apps/current-work/multipage/video-conferencing-and-peer-to-peer-communication.html#mediastreamevent

        Reviewed by Adam Barth.

        No new tests. Removed method.

        * mediastream/MediaStreamEvent.cpp:
        * mediastream/MediaStreamEvent.h:
        * mediastream/MediaStreamEvent.idl:

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

        Anonymous CORS fetch for WebGL texture fails when there is no appropriate server response even for the same origin requests
        https://bugs.webkit.org/show_bug.cgi?id=71053

        Reviewed by Darin Adler.

        The crossorigin attribute should behave like XMLHttpRequest:
        same-origin images pass without and CORS headers, but CORS checks are
        performed for cross-origin loads.  This patch better aligns our
        behavior with Firefox, as discussed in the bug.

        Test: http/tests/security/img-crossorigin-loads-same-origin.html

        * loader/ImageLoader.cpp:
        (WebCore::ImageLoader::notifyFinished):

2011-11-04  Gaurav Shah  <gauravsh@chromium.org>

        HTMLKeygenElement: Fix "keytype" handling in appendFormData.
        https://bugs.webkit.org/show_bug.cgi?id=70617

        This fixes a bug introduced by http://trac.webkit.org/changeset/97658
        which causes all HTML Keygen elements with a keytype optional attribute
        to be considered as unsupported.

        A regression test is included.

        Reviewed by Darin Adler.

        Test: http/tests/misc/submit-post-keygen.html

        * html/HTMLKeygenElement.cpp:

2011-11-03  Adrienne Walker  <enne@google.com>

        [chromium] Implement checkerboarding for missing layer tiles
        https://bugs.webkit.org/show_bug.cgi?id=69585

        Reviewed by James Robinson.

        For tiles that have no texture or haven't even been created yet,
        draw using the background color of the layer.

        The only background color set is currently the non-composited content,
        and all other layers use transparent black by default.

        * platform/graphics/chromium/LayerChromium.cpp:
        (WebCore::LayerChromium::pushPropertiesTo):
        * platform/graphics/chromium/NonCompositedContentHost.cpp:
        (WebCore::NonCompositedContentHost::setBackgroundColor):
        * platform/graphics/chromium/NonCompositedContentHost.h:
        * platform/graphics/chromium/cc/CCLayerImpl.cpp:
        (WebCore::CCLayerImpl::setBackgroundColor):
        * platform/graphics/chromium/cc/CCLayerImpl.h:
        (WebCore::CCLayerImpl::backgroundColor):
        * platform/graphics/chromium/cc/CCTiledLayerImpl.cpp:
        (WebCore::CCTiledLayerImpl::drawTiles):

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

        [chromium] Remove most exit time destructors
        https://bugs.webkit.org/show_bug.cgi?id=71524

        Do this by using the DEFINE_STATIC_LOCAL macro, which allocates things on the heaps and then leaks them.

        Reviewed by Dimitri Glazkov.

        No behavior change, so no new tests.

        * platform/chromium/CursorChromium.cpp:
        (WebCore::pointerCursor):
        (WebCore::crossCursor):
        (WebCore::handCursor):
        (WebCore::iBeamCursor):
        (WebCore::waitCursor):
        (WebCore::helpCursor):
        (WebCore::eastResizeCursor):
        (WebCore::northResizeCursor):
        (WebCore::northEastResizeCursor):
        (WebCore::northWestResizeCursor):
        (WebCore::southResizeCursor):
        (WebCore::southEastResizeCursor):
        (WebCore::southWestResizeCursor):
        (WebCore::westResizeCursor):
        (WebCore::northSouthResizeCursor):
        (WebCore::eastWestResizeCursor):
        (WebCore::northEastSouthWestResizeCursor):
        (WebCore::northWestSouthEastResizeCursor):
        (WebCore::columnResizeCursor):
        (WebCore::rowResizeCursor):
        (WebCore::middlePanningCursor):
        (WebCore::eastPanningCursor):
        (WebCore::northPanningCursor):
        (WebCore::northEastPanningCursor):
        (WebCore::northWestPanningCursor):
        (WebCore::southPanningCursor):
        (WebCore::southEastPanningCursor):
        (WebCore::southWestPanningCursor):
        (WebCore::westPanningCursor):
        (WebCore::moveCursor):
        (WebCore::verticalTextCursor):
        (WebCore::cellCursor):
        (WebCore::contextMenuCursor):
        (WebCore::aliasCursor):
        (WebCore::progressCursor):
        (WebCore::noDropCursor):
        (WebCore::copyCursor):
        (WebCore::noneCursor):
        (WebCore::notAllowedCursor):
        (WebCore::zoomInCursor):
        (WebCore::zoomOutCursor):
        (WebCore::grabCursor):
        (WebCore::grabbingCursor):
        * platform/chromium/LanguageChromium.cpp:
        (WebCore::platformDefaultLanguage):
        * platform/chromium/MIMETypeRegistryChromium.cpp:
        (WebCore::dummyHashSet):

2011-11-03  Anders Carlsson  <andersca@apple.com>

        Add NetscapePlugin::convertFromRootView
        https://bugs.webkit.org/show_bug.cgi?id=71526

        Reviewed by Sam Weinig.

        Export some symbols that WebKit2 needs.

        * WebCore.exp.in:

2011-11-03  Adrienne Walker  <enne@google.com>

        [chromium] Fix incorrect visibility/scissor rect for threaded compositing
        https://bugs.webkit.org/show_bug.cgi?id=70962

        Reviewed by James Robinson.

        In order to properly scroll independent of layout on the compositor
        thread, we have to apply the scroll to the right layer. Previously,
        the NonCompositedContentHost was the root of the graphics layer tree
        with all other layers underneath it. However, applying a scroll to
        that layer would also scroll the clip layer for the main frame
        underneath it, causing visibility issues.

        This patch moves the NonCompositedHost to be a child of the
        RenderLayerCompositor's scroll layer. This was exposed on
        RenderLayerCompositor, because there's no other way to get to this
        layer in a way that doesn't make assumptions about the structure of
        the layers on a frame.

        This also removes the hacks in calculateVisibleLayerRect and
        tilingTransform for scroll position.

        Partially tested by existing compositor tests. Manually tested
        threaded compositing scrolling.

        * platform/graphics/chromium/NonCompositedContentHost.cpp:
        (WebCore::NonCompositedContentHost::setScrollLayer):
        (WebCore::NonCompositedContentHost::setViewport):
        (WebCore::NonCompositedContentHost::scrollLayer):
        * platform/graphics/chromium/NonCompositedContentHost.h:
        * platform/graphics/chromium/cc/CCLayerTreeHost.cpp:
        (WebCore::CCLayerTreeHost::create):
        (WebCore::CCLayerTreeHost::CCLayerTreeHost):
        (WebCore::CCLayerTreeHost::applyScrollDeltas):
        * platform/graphics/chromium/cc/CCLayerTreeHost.h:
        (WebCore::CCLayerTreeHost::setRootLayer):
        * platform/graphics/chromium/cc/CCLayerTreeHostCommon.h:
        (WebCore::CCLayerTreeHostCommon::calculateVisibleLayerRect):
        * platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:
        (WebCore::findScrollLayer):
        (WebCore::CCLayerTreeHostImpl::setRootLayer):
        (WebCore::CCLayerTreeHostImpl::scrollRootLayer):
        (WebCore::CCLayerTreeHostImpl::processScrollDeltas):
        * platform/graphics/chromium/cc/CCLayerTreeHostImpl.h:
        * platform/graphics/chromium/cc/CCTiledLayerImpl.cpp:
        (WebCore::CCTiledLayerImpl::tilingTransform):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::scrollLayer):
        * rendering/RenderLayerCompositor.h:

2011-11-04  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Refactor and clean up the qmake build system

        The qmake build system has accumulated a bit of cruft and redundancy
        over time. There's also a fairly tight coupling between how to build
        the various targets, and _what_ to build, making it harder to add new
        rules or sources. This patch aims to elevate these issues somewhat.

        This is a short-list of the changes:

          * The rules for how to build targets are now mostly contained as
            prf-files in Tools/qmake/mkspecs/features. Using mkspecs also
            allows us to do pre- and post-processing of each project file,
            which helps to clean up the actual project files.

          * Derived sources are no longer generated as a separate make-step
            but is part of each target's project file as a subdir. Makefile
            rules are used to ensure that we run make on the derived sources
            before running qmake on the actual target makefile. This makes
            it easier to keep a proper dependency between derived sources
            and the target.

          * We use GNU make and the compiler to generate dependencies on
            UNIX-based systems running Qt 5. This allows us to lessen the
            need to run qmake, which should reduce compile time.

          * WebKit2 is now build by default if building with Qt 5. It can
            be disabled by passing --no-webkit2 to build-webkit.

        The result of these changes are hopefully a cleaner and easier
        build system to modify, and faster build times due to no longer
        running qmake on every single build. It's also a first step
        towards possibly generating the list of sources using another
        build system.

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

        Reviewed by Simon Hausmann.

        * DerivedSources.pri: Renamed from Source/WebCore/CodeGenerators.pri.
        * DerivedSources.pro: Removed.
        * Target.pri: Copied from Source/WebCore/WebCore.pro.
        * WebCore.pro:

2011-11-04  Tommy Widenflycht  <tommyw@google.com>

        [chromium] MediaStream API: Fixing wrong path for PeerConnectionHandler.h in WebCore.gyp
        https://bugs.webkit.org/show_bug.cgi?id=71548

        Reviewed by Tony Gentilcore.

        * WebCore.gypi:

2011-11-04  Patrick Gansterer  <paroga@webkit.org>

        Unreviewed CMake build fix for !ENABLE(SQL_DATABASE).

        * CMakeLists.txt: Always compile the SQLite source files, since they are required for build.

2011-11-03  Ryosuke Niwa  <rniwa@webkit.org>

        REGRESSION (r99076): Pasting into password fields is broken
        https://bugs.webkit.org/show_bug.cgi?id=71483

        Reviewed by Darin Adler.

        The bug was caused by plainText serializing secured (instead of original) text.
        Fixed the bug by adding new TextIterator behavior that serializes the original text
        and using it in ReplacementFragment::ReplacementFragment.

        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplacementFragment::ReplacementFragment):
        * editing/TextIterator.cpp:
        (WebCore::TextIterator::TextIterator):
        (WebCore::TextIterator::emitText):
        * editing/TextIterator.h:

2011-11-03  Eric Carlson  <eric.carlson@apple.com>

        Add TrackEvent
        https://bugs.webkit.org/show_bug.cgi?id=71178

        Reviewed by Sam Weinig.

        Test: fast/events/constructors/track-event-constructor.html

        * CMakeLists.txt: Add new files for TrackEvent.
        * CodeGenerators.pri: Ditto.
        * DerivedSources.cpp: Ditto.
        * DerivedSources.make: Ditto.
        * GNUmakefile.am: Ditto.
        * GNUmakefile.list.am: Ditto.
        * WebCore.gypi: Ditto.
        * WebCore.pro: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Ditto.
        * bindings/generic/EventConstructors.h: Ditto.
        * bindings/gobject/GNUmakefile.am: Ditto.
        * bindings/gobject/WebKitHTMLElementWrapperFactory.cpp: Ditto.
        * bindings/js/JSBindingsAllInOne.cpp: Ditto.

        * bindings/js/JSDictionary.cpp:
        (WebCore::JSDictionary::convertValue): Add method to convert to a Track.
        * bindings/js/JSDictionary.h:

        * bindings/js/JSEventConstructors.cpp:  Add new files for TrackEvent.

        * bindings/js/JSTrackCustom.cpp: Added. 
        (WebCore::toTrack): New, convert from a JSValue to a Track.
        (WebCore::toJS): New, return a JS wrapper for a Track.
        * bindings/js/JSTrackCustom.h: Added.

        * bindings/js/JSTrackEventCustom.cpp: Added.
        (WebCore::JSTrackEvent::track): New, returns a TextEvent's 'track' attribute.

        * bindings/v8/OptionsObject.cpp:
        (WebCore::OptionsObject::get): Returns RefPtr<TrackBase>.

        * bindings/v8/custom/V8EventConstructors.cpp: Add Track initializing constructor.

        * bindings/v8/custom/V8TrackEventCustom.cpp: Added.
        (WebCore::V8TrackEvent::trackAccessorGetter): New, returns a TextEvent's 'track' attribute.

        * dom/EventFactory.in: Add TrackEvent.

        * dom/EventNames.h: Add 'addtrack' event.

        * html/TextTrack.cpp:
        (WebCore::TextTrack::TextTrack): Call new base class constructor.
        * html/TextTrack.h: Now derive from BaseTrack for the day we implement VideoTrack and AudioTrack.

        * html/track/TrackBase.cpp: Added.
        (WebCore::TrackBase::TrackBase):
        (WebCore::TrackBase::~TrackBase):
        * html/track/TrackBase.h: Added.
        (WebCore::TrackBase::type): Return the track type.

        * html/track/TrackEvent.cpp: Added.
        (WebCore::TrackEventInit::TrackEventInit):
        (WebCore::TrackEvent::TrackEvent):
        (WebCore::TrackEvent::~TrackEvent):
        (WebCore::TrackEvent::interfaceName):
        * html/track/TrackEvent.h: Added.
        (WebCore::TrackEvent::create):
        (WebCore::TrackEvent::isTrackEvent):
        (WebCore::TrackEvent::track):
        * html/track/TrackEvent.idl: Added.

        * page/DOMWindow.idl: Add TrackEvent.

2011-11-03  Ben Wells  <benwells@chromium.org>

        Optimize canvas fills / drawImage when covering entire canvas
        https://bugs.webkit.org/show_bug.cgi?id=70789

        Reviewed by Stephen White.

        If we're filling a rect or drawing an image, and it covers the entire canvas, we don't
        need to worry about clearing outside the area updated by the operation if we're in
        a composite mode that requires this (such as source-in, copy, etc.). In this case we
        can take the simple path through the code and save a clear (for copy) or a temporary
        image buffer (for the other modes).

        No new tests - optimization, behaviour is unchanged and covered by existing tests.

        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::fillRect):
        (WebCore::CanvasRenderingContext2D::drawImage):
        (WebCore::CanvasRenderingContext2D::rectContainsCanvas):
        * html/canvas/CanvasRenderingContext2D.h:

2011-11-03  Mark Hahnenberg  <mhahnenberg@apple.com>

        De-virtualize JSObject::getPropertyNames
        https://bugs.webkit.org/show_bug.cgi?id=71306

        Reviewed by Darin Adler.

        No new tests.

        Added getPropertyNames to the MethodTable, changed all the virtual 
        implementations of getPropertyNames to static ones, and replaced 
        all call sites with corresponding lookups in the MethodTable.

        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::getPropertyNames):
        * bindings/js/JSDOMWindowShell.cpp:
        (WebCore::JSDOMWindowShell::getPropertyNames):
        * bindings/js/JSDOMWindowShell.h:
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateHeader):
        * bridge/NP_jsobject.cpp:
        (_NPN_Enumerate):
        * bridge/qt/qt_runtime.cpp:
        (JSC::Bindings::convertValueToQVariantMap):

2011-11-02  Xiaomei Ji  <xji@chromium.org>

        Enable ctrl-arrow move cursor by word in visual order in cr-win by command line flag.
        https://bugs.webkit.org/show_bug.cgi?id=71163

        Reviewed by Ryosuke Niwa.

        Add m_visualWordMovementEnabled page setting, trigger visual word movement
        function (instead of logical one) when it is set as true.

        right|leftWordPosition() are tested in editing/selection/move-by-word-visually*
        by using --webkit-visual-word flag.

        * editing/FrameSelection.cpp:
        (WebCore::FrameSelection::modifyMovingRight):
        (WebCore::FrameSelection::modifyMovingLeft):
        (WebCore::FrameSelection::visualWordMovementEnabled):
        * editing/FrameSelection.h:
        * page/Settings.cpp:
        (WebCore::Settings::Settings):
        * page/Settings.h:
        (WebCore::Settings::setVisualWordMovementEnabled):
        (WebCore::Settings::visualWordMovementEnabled):

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

        Correct usage of LayoutUnits and integers in Table rendering classes
        https://bugs.webkit.org/show_bug.cgi?id=71500

        Reviewed by Darin Adler.

        Fixing the Table layout classes to operate on integers -- sub-pixel table layout breaks
        the spec. Meanwhile correcting the Table rendering classes themselves to still use
        LayoutUnits.

        No new tests -- no change in behavior.

        * rendering/AutoTableLayout.cpp: Reverting to operating on integers.
        (WebCore::AutoTableLayout::recalcColumn):
        (WebCore::AutoTableLayout::computePreferredLogicalWidths):
        (WebCore::AutoTableLayout::calcEffectiveLogicalWidth):
        (WebCore::AutoTableLayout::layout):
        * rendering/AutoTableLayout.h: Reverting to operating on integers.
        * rendering/FixedTableLayout.cpp: Ditto.
        (WebCore::FixedTableLayout::computePreferredLogicalWidths):
        (WebCore::FixedTableLayout::layout):
        * rendering/RenderTable.h: Switching to LayoutUnits.
        (WebCore::RenderTable::getColumnPos):
        (WebCore::RenderTable::bordersPaddingAndSpacingInRowDirection):
        * rendering/RenderTableCell.cpp: Switching to LayoutUnits.
        (WebCore::RenderTableCell::updateLogicalWidth):
        (WebCore::RenderTableCell::setOverrideHeightFromRowHeight):
        (WebCore::RenderTableCell::computeRectForRepaint):
        (WebCore::RenderTableCell::cellBaselinePosition):
        (WebCore::RenderTableCell::scrollbarsChanged):
        * rendering/RenderTableCell.h: Switching to LayoutUnits
        * rendering/RenderTableSection.cpp: Ditto.
        (WebCore::RenderTableSection::setCellLogicalWidths):
        (WebCore::RenderTableSection::layoutRows):

2011-11-03  James Robinson  <jamesr@chromium.org>

        [chromium] Notify scheduler on SwapBuffers in threaded compositor mode
        https://bugs.webkit.org/show_bug.cgi?id=71381

        Reviewed by Kenneth Russell.

        * platform/graphics/chromium/cc/CCScheduler.cpp:
        (WebCore::CCScheduler::didSwapBuffers):
        * platform/graphics/chromium/cc/CCScheduler.h:
        * platform/graphics/chromium/cc/CCThreadProxy.cpp:
        (WebCore::CCThreadProxy::drawLayersAndSwapOnImplThread):

2011-11-03  Daniel Bates  <dbates@rim.com>

        CMake: Add missing WebGL IDL file html/canvas/WebGLContextEvent.idl

        Rubber-stamped by Martin Robinson

        * CMakeLists.txt:

2011-11-03  Daniel Bates  <dbates@rim.com>

        CMake: Only generate from WebGL IDLs when building with WebGL
        https://bugs.webkit.org/show_bug.cgi?id=71516

        Reviewed by Martin Robinson.

        * CMakeLists.txt:

2011-11-03  Erik Arvidsson  <arv@chromium.org>

        Remove support for LegacyDefaultOptionalArguments
        https://bugs.webkit.org/show_bug.cgi?id=71489

        Reviewed by Darin Adler.

        This removes support for LegacyDefaultOptionalArguments and [RequiresAllArguments=Raise].
        [RequiresAllArguments=Raise] is now the standard behavior so it would be a no op.

        No new tests. Covered by existing tests.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateArgumentsCountCheck): Check the "RequiresAllArguments" extended attribute and generate code
                                       that returns undefined if there are missing arguments.
        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateArgumentsCountCheck): Ditto.
        * bindings/scripts/test/JS/JSTestMediaQueryListListener.cpp:
        (WebCore::jsTestMediaQueryListListenerPrototypeFunctionMethod): Add generated argument count checks.
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::jsTestObjPrototypeFunctionVoidMethodWithArgs): Ditto.
        (WebCore::jsTestObjPrototypeFunctionIntMethodWithArgs): Ditto.
        (WebCore::jsTestObjPrototypeFunctionObjMethodWithArgs): Ditto.
        (WebCore::jsTestObjPrototypeFunctionSerializedValue): Ditto.
        (WebCore::jsTestObjPrototypeFunctionIdbKey): Ditto.
        (WebCore::jsTestObjPrototypeFunctionOptionsObject): Ditto.
        (WebCore::jsTestObjPrototypeFunctionCustomArgsAndException): Ditto.
        (WebCore::jsTestObjPrototypeFunctionAddEventListener): Ditto.
        (WebCore::jsTestObjPrototypeFunctionRemoveEventListener): Ditto.
        (WebCore::jsTestObjPrototypeFunctionWithDynamicFrameAndArg): Ditto.
        (WebCore::jsTestObjPrototypeFunctionWithDynamicFrameAndOptionalArg): Ditto.
        (WebCore::jsTestObjPrototypeFunctionWithDynamicFrameAndUserGesture): Ditto.
        (WebCore::jsTestObjPrototypeFunctionWithDynamicFrameAndUserGestureASAD): Ditto.
        (WebCore::jsTestObjPrototypeFunctionMethodWithNonOptionalArgAndOptionalArg): Ditto.
        (WebCore::jsTestObjPrototypeFunctionMethodWithNonOptionalArgAndTwoOptionalArgs): Ditto.
        (WebCore::jsTestObjPrototypeFunctionMethodWithCallbackArg): Ditto.
        (WebCore::jsTestObjPrototypeFunctionMethodWithNonCallbackArgAndCallbackArg): Ditto.
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethod1): Ditto.
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethod2): Ditto.
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethod3): Ditto.
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethod4): Ditto.
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethod5): Ditto.
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethod6): Ditto.
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethod7): Ditto.
        * bindings/scripts/test/TestCallback.idl: Remove LegacyDefaultOptionalArguments.
        * bindings/scripts/test/TestMediaQueryListListener.idl: Ditto.
        * bindings/scripts/test/TestObj.idl: Remove LegacyDefaultOptionalArguments and [RequiresAllArguments=Raise]
        * bindings/scripts/test/V8/V8TestMediaQueryListListener.cpp: Remove LegacyDefaultOptionalArguments.
        (WebCore::TestMediaQueryListListenerInternal::methodCallback): Add generated argument count checks.
        * bindings/scripts/test/V8/V8TestObj.cpp:
        (WebCore::TestObjInternal::voidMethodWithArgsCallback): Ditto.
        (WebCore::TestObjInternal::intMethodWithArgsCallback): Ditto.
        (WebCore::TestObjInternal::objMethodWithArgsCallback): Ditto.
        (WebCore::TestObjInternal::serializedValueCallback): Ditto.
        (WebCore::TestObjInternal::idbKeyCallback): Ditto.
        (WebCore::TestObjInternal::optionsObjectCallback): Ditto.
        (WebCore::TestObjInternal::customArgsAndExceptionCallback): Ditto.
        (WebCore::TestObjInternal::withDynamicFrameAndArgCallback): Ditto.
        (WebCore::TestObjInternal::withDynamicFrameAndOptionalArgCallback): Ditto.
        (WebCore::TestObjInternal::withDynamicFrameAndUserGestureCallback): Ditto.
        (WebCore::TestObjInternal::withDynamicFrameAndUserGestureASADCallback): Ditto.
        (WebCore::TestObjInternal::methodWithNonOptionalArgAndOptionalArgCallback): Ditto.
        (WebCore::TestObjInternal::methodWithNonOptionalArgAndTwoOptionalArgsCallback): Ditto.
        (WebCore::TestObjInternal::methodWithCallbackArgCallback): Ditto.
        (WebCore::TestObjInternal::methodWithNonCallbackArgAndCallbackArgCallback): Ditto.
        (WebCore::TestObjInternal::overloadedMethod1Callback): Ditto.
        (WebCore::TestObjInternal::overloadedMethod2Callback): Ditto.
        (WebCore::TestObjInternal::overloadedMethod3Callback): Ditto.
        (WebCore::TestObjInternal::overloadedMethod4Callback): Ditto.
        (WebCore::TestObjInternal::overloadedMethod5Callback): Ditto.
        (WebCore::TestObjInternal::overloadedMethod6Callback): Ditto.
        (WebCore::TestObjInternal::overloadedMethod7Callback): Ditto.
        (WebCore::TestObjInternal::enabledAtRuntimeMethod1Callback): Ditto.
        (WebCore::TestObjInternal::enabledAtRuntimeMethod2Callback): Ditto.

2011-11-03  Darin Adler  <darin@apple.com>

        Change remaining callers of releaseRef to call leakRef
        https://bugs.webkit.org/show_bug.cgi?id=71422

        Reviewed by Darin Fisher.

        * bindings/objc/WebScriptObject.mm:
        (-[WebScriptObject _setImp:originRootObject:rootObject:]):
        (-[WebScriptObject _setOriginRootObject:andRootObject:]):
        * bridge/NP_jsobject.cpp:
        (_NPN_CreateScriptObject):
        * dom/QualifiedName.cpp:
        (WebCore::QNameComponentsTranslator::translate):
        * history/PageCache.cpp:
        (WebCore::PageCache::add):
        * html/HTMLTableElement.cpp:
        (WebCore::HTMLTableElement::additionalAttributeStyleDecls):
        (WebCore::HTMLTableElement::addSharedCellBordersDecl):
        (WebCore::HTMLTableElement::addSharedGroupDecls):
        * platform/graphics/cg/ImageSourceCG.cpp:
        (WebCore::ImageSource::createFrameAtIndex):
        * platform/graphics/mac/FontCustomPlatformData.cpp:
        (WebCore::createFontCustomPlatformData):
        * platform/mac/ContextMenuMac.mm:
        (WebCore::ContextMenu::releasePlatformDescription):
        * platform/mac/SharedBufferMac.mm:
        (WebCore::SharedBuffer::createCFData):
        * rendering/RenderMediaControlsChromium.cpp:
        (WebCore::platformResource):
        Use leakRef.

2011-11-02  Darin Adler  <darin@apple.com>

        Change remaining callers of releaseRef to call leakRef
        https://bugs.webkit.org/show_bug.cgi?id=71422

        Reviewed by Darin Fisher.

        * bindings/objc/WebScriptObject.mm:
        (-[WebScriptObject _setImp:originRootObject:rootObject:]):
        (-[WebScriptObject _setOriginRootObject:andRootObject:]):
        * bridge/NP_jsobject.cpp:
        (_NPN_CreateScriptObject):
        * dom/QualifiedName.cpp:
        (WebCore::QNameComponentsTranslator::translate):
        * history/PageCache.cpp:
        (WebCore::PageCache::add):
        * html/HTMLTableElement.cpp:
        (WebCore::HTMLTableElement::additionalAttributeStyleDecls):
        (WebCore::HTMLTableElement::addSharedCellBordersDecl):
        (WebCore::HTMLTableElement::addSharedGroupDecls):
        * platform/graphics/cg/ImageSourceCG.cpp:
        (WebCore::ImageSource::createFrameAtIndex):
        * platform/graphics/mac/FontCustomPlatformData.cpp:
        (WebCore::createFontCustomPlatformData):
        * platform/mac/ContextMenuMac.mm:
        (WebCore::ContextMenu::releasePlatformDescription):
        * platform/mac/SharedBufferMac.mm:
        (WebCore::SharedBuffer::createCFData):
        * rendering/RenderMediaControlsChromium.cpp:
        (WebCore::platformResource):
        Use leakRef.

2011-11-03  Daniel Cheng  <dcheng@chromium.org>

        [chromium] Remove unused clipboard methods
        https://bugs.webkit.org/show_bug.cgi?id=71512

        Reviewed by Tony Chang.

        * platform/chromium/PlatformSupport.h:

2011-11-03  Anna Cavender  <annacc@chromium.org>

        Implement TextTrackCueList.
        https://bugs.webkit.org/show_bug.cgi?id=70451

        Reviewed by Eric Carlson.

        Test: media/track/track-text-track-cue-list.html

        * html/LoadableTextTrack.cpp:
        (WebCore::LoadableTextTrack::newCuesAvailable):
            Update TextTrack's TextTrackCueList (m_cues) when new cues are discovered.
        * html/TextTrack.cpp:
        (WebCore::TextTrack::TextTrack):
            Create an empty TextTrackCueList upon TextTrack creation.
        (WebCore::TextTrack::cues):
            Return this TextTrack's list of cues.

        Implement TextTrackCueList functionality:
        * html/TextTrackCueList.cpp:
        (WebCore::TextTrackCueList::TextTrackCueList):
        (WebCore::TextTrackCueList::length):
        (WebCore::TextTrackCueList::item):
        (WebCore::TextTrackCueList::getCueById):
        (WebCore::TextTrackCueList::add):
        (WebCore::TextTrackCueList::remove):
        (WebCore::TextTrackCueList::contains):
        * html/TextTrackCueList.h:
        (WebCore::TextTrackCueList::~TextTrackCueList):

2011-11-03  Joshua Bell  <jsbell@chromium.org>

        IndexedDB result of deleting a record should be true or false
        https://bugs.webkit.org/show_bug.cgi?id=60197

        Reviewed by David Levin.

        IDBObjectStore.delete() was incorrectly firing an error if there
        was no record to remove. Match the spec, and return true/false
        as success values instead. Bring JSC binding implementation of
        SerializedScriptValue more in line with V8 version for methods
        called from IDB code.

        Test: storage/indexeddb/mozilla/delete-result.html

        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::SerializedScriptValue::createFromWire):
        (WebCore::SerializedScriptValue::undefinedValue):
        (WebCore::SerializedScriptValue::booleanValue):
        * bindings/js/SerializedScriptValue.h:
        * bindings/v8/SerializedScriptValue.cpp:
        (WebCore::SerializedScriptValue::nullValue):
        (WebCore::SerializedScriptValue::undefinedValue):
        (WebCore::SerializedScriptValue::booleanValue):
        * bindings/v8/SerializedScriptValue.h:
        * storage/IDBObjectStoreBackendImpl.cpp:
        (WebCore::IDBObjectStoreBackendImpl::deleteInternal):

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

        Implement allow-popups for iframe@sandbox
        https://bugs.webkit.org/show_bug.cgi?id=66505

        Reviewed by Eric Seidel.

        There's been some discussion in the HTML working group about adding an
        allow-popups directive to the iframe sandbox.  Microsoft has added it
        to IE10 platform preview and is fairly adamant about this feature
        because it's needed by one or their products that's planning to use
        iframe sandbox.  Hixie says he'll add it to the spec once we implement
        it, so here's our implementation.  (See discussion in the W3C linked in
        the bug for more details.)

        This patch lands most of the infrastructure for this feature, but it
        doesn't actually enable the feature.  I'll enable it in a follow-up
        patch.

        Tests: http/tests/security/popup-allowed-by-sandbox-is-sandboxed-control.html
               http/tests/security/popup-allowed-by-sandbox-is-sandboxed.html
               http/tests/security/popup-allowed-by-sandbox-when-allowed.html

        * html/HTMLIFrameElement.cpp:
        (WebCore::HTMLIFrameElement::parseMappedAttribute):
        * loader/FrameLoader.h:
        (WebCore::FrameLoader::forceSandboxFlags):
        * loader/FrameLoaderTypes.h:
        * page/SecurityOrigin.cpp:
        (WebCore::SecurityOrigin::parseSandboxPolicy):
        * page/SecurityOrigin.h:
        (WebCore::SecurityOrigin::sandboxFlags):
        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::dataChanged):

2011-11-03  Mark Hahnenberg  <mhahnenberg@apple.com>

        De-virtualize JSObject::className
        https://bugs.webkit.org/show_bug.cgi?id=71428

        Reviewed by Sam Weinig.

        No new tests.

        Added className to the MethodTable, changed all the virtual 
        implementations of className to static ones, and replaced 
        all call sites with corresponding lookups in the MethodTable.

        * bindings/js/JSDOMWindowShell.cpp:
        (WebCore::JSDOMWindowShell::className):
        * bindings/js/JSDOMWindowShell.h:
        * bindings/js/JSInjectedScriptHostCustom.cpp:
        (WebCore::JSInjectedScriptHost::internalConstructorName):
        * bridge/testqtbindings.cpp:
        (Global::className):

2011-11-02  Jer Noble  <jer.noble@apple.com>

        Add Clock class and platform-specific implementations.
        https://bugs.webkit.org/show_bug.cgi?id=71341

        Reviewed by Sam Weinig.

        No new tests; these classes will be used and tested by the MediaController feature.

        Adds a abstract Clock class and two concrete, platform-specific subclasses.

        Clock provides a basic interface for starting, stopping, and querying a generic timeline.
        PlatformClockCA implements this interface using a CoreAudio CAClock object, which uses
        the default audio device's hardware clock as a timing source. PlatformClockPOSIX 
        implements this interface using gettimeofday() as its timing source.

        * WebCore.xcodeproj/project.pbxproj:
        * platform/Clock.cpp: Added.
        (Clock::create): Creates a platform-specific clock.
        * platform/Clock.h: Added.
        (WebCore::Clock::~Clock):
        (WebCore::Clock::Clock):
        * platform/mac/PlatformClockCA.cpp: Added.
        (PlatformClockCA::PlatformClockCA):
        (PlatformClockCA::~PlatformClockCA):
        (PlatformClockCA::setCurrentTime):
        (PlatformClockCA::currentTime):
        (PlatformClockCA::setPlayRate):
        (PlatformClockCA::PlatformClockCA::playRate):
        (PlatformClockCA::start):
        (PlatformClockCA::stop):
        * platform/mac/PlatformClockCA.h: Added.
        (WebCore::PlatformClockCA::isRunning):
        * platform/posix/PlatformClockPOSIX.cpp: Added.
        (timevalToFloat):
        (timevalDelta):
        (PlatformClockPOSIX::PlatformClockPOSIX):
        (PlatformClockPOSIX::setCurrentTime):
        (PlatformClockPOSIX::currentTime):
        (PlatformClockPOSIX::setPlayRate):
        (PlatformClockPOSIX::PlatformClockPOSIX::playRate):
        (PlatformClockPOSIX::start):
        (PlatformClockPOSIX::stop):
        (PlatformClockPOSIX::now):
        * platform/posix/PlatformClockPOSIX.h: Added.
        (WebCore::PlatformClockPOSIX::isRunning):

2011-11-03  Joshua Bell  <jsbell@chromium.org>

        IndexedDB: Object stores not persisting between sessions
        https://bugs.webkit.org/show_bug.cgi?id=71313

        Reviewed by Tony Chang.

        Logic flaw introduced with r98806 skipped the loading of object stores
        during subsequent sessions.

        * storage/IDBDatabaseBackendImpl.cpp:
        (WebCore::IDBDatabaseBackendImpl::IDBDatabaseBackendImpl):
        (WebCore::IDBDatabaseBackendImpl::openInternal):

2011-11-03  Pavel Feldman  <pfeldman@google.com>

        Web Inspector: fix heap profiler rendering and resize.
        https://bugs.webkit.org/show_bug.cgi?id=71484

        Reviewed by Yury Semikhatsky.

        * inspector/front-end/DetailedHeapshotView.js:
        (WebInspector.DetailedHeapshotView.prototype.wasShown.profileCallback2):
        (WebInspector.DetailedHeapshotView.prototype.wasShown):
        (WebInspector.DetailedHeapshotView.prototype._changeView):
        (WebInspector.DetailedHeapshotView.prototype._startRetainersHeaderDragging):

2011-11-03  Julien Chaffraix  <jchaffraix@webkit.org>

        Stop abusing RenderTableSection::needsRecalcCells logic
        https://bugs.webkit.org/show_bug.cgi?id=71420

        Reviewed by Darin Adler.

        Change covered by existing tests like fast/repaint/table-extra-bottom-grow.html
        and fast/table/row-height-recalc* (among others).

        Cell recalculation is very expensive and should only be called when the section's structure
        changed in a way that requires a safe update to its structure (like removing a row as our
        column split may not be appropriate anymore).

        The current code would abuse cell recalculation to actually reset the logical height on the
        RowStruct. This change makes it do the right thing.

        * rendering/RenderTableCell.h:
        * rendering/RenderTableRow.h:
        Removed styleWillChange override as it was unneeded.

        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::styleDidChange):
        * rendering/RenderTableRow.cpp:
        (WebCore::RenderTableRow::styleDidChange):
        Move the code from styleWillChange to styleDidChange.

        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::rowLogicalHeightChanged):
        This function just reset the height on the |RowStruct| which is the
        only part of recalcCells that we would need.

        (WebCore::RenderTableSection::rowIndexForRenderer):
        Added this function to find out which index a column has (strangely
        RenderTableRow does not have this information).

        * rendering/RenderTableSection.h: Added the 2 previous functions.

2011-11-03  Andreas Kling  <kling@webkit.org>

        CSSRuleList: Move rule orphaning from deleteRule() out to callers.
        https://bugs.webkit.org/show_bug.cgi?id=71470

        Reviewed by Antti Koivisto.

        Rule parenting is the responsibility of the owner rule (the rule containing
        the rule list), so move parent clearing out of CSSRuleList::deleteRule() and
        into the (two) call sites.

        * css/CSSMediaRule.cpp:
        (WebCore::CSSMediaRule::deleteRule):
        * css/CSSRuleList.cpp:
        (WebCore::CSSRuleList::deleteRule):
        * css/WebKitCSSKeyframesRule.cpp:
        (WebCore::WebKitCSSKeyframesRule::deleteRule):

2011-11-03  Pavel Feldman  <pfeldman@google.com>

        Web Inspector: do not map scripts generated with document.write to the document resources.
        https://bugs.webkit.org/show_bug.cgi?id=71114

        Reviewed by Yury Semikhatsky.

        * inspector/front-end/DebuggerPresentationModel.js:
        (WebInspector.DebuggerPresentationModel):
        (WebInspector.DebuggerPresentationModel.prototype._addScript):
        (WebInspector.DebuggerPresentationModel.prototype._bindScriptToRawSourceCode):
        (WebInspector.DebuggerPresentationModel.prototype.uiSourceCodes):
        (WebInspector.DebuggerPresentationModel.prototype.setFormatSource):
        (WebInspector.DebuggerPresentationModel.prototype._consoleCleared):
        (WebInspector.DebuggerPresentationModel.prototype._rawSourceCodeForScriptWithURL):
        (WebInspector.DebuggerPresentationModel.prototype._rawSourceCodeForScript):
        (WebInspector.DebuggerPresentationModel.prototype._scriptForRawSourceCode):
        (WebInspector.DebuggerPresentationModel.prototype._debuggerReset):
        (WebInspector.DebuggerPresentationModel.Linkifier.prototype.reset):
        * inspector/front-end/RawSourceCode.js:
        (WebInspector.RawSourceCode.prototype._createSourceMapping.didRequestContent.didFormatContent):
        (WebInspector.RawSourceCode.prototype._createSourceMapping.didRequestContent):
        (WebInspector.RawSourceCode.prototype._createSourceMapping):
        * inspector/front-end/Script.js:
        (WebInspector.Script.prototype.editSource):
        (WebInspector.Script.prototype.isInlineScript):

2011-11-03  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] Remove Maemo specific code paths
        https://bugs.webkit.org/show_bug.cgi?id=71476

        Reviewed by Kenneth Rohde Christiansen.

        * WebCore.pri:
        * features.pri:
        * plugins/PluginPackage.cpp:
        (WebCore::PluginPackage::determineQuirks):
        * plugins/PluginView.cpp:
        (WebCore::PluginView::setValue):
        * plugins/PluginView.h:
        * plugins/qt/PluginViewQt.cpp:
        (WebCore::PluginView::updatePluginWidget):
        (WebCore::PluginView::paint):
        (WebCore::PluginView::platformGetValueStatic):

2011-11-03  Fady Samuel  <fsamuel@chromium.org>

        Removing line in computeViewportAttributes that enforces a minimum scale factor to never allow zooming out more than viewport
        https://bugs.webkit.org/show_bug.cgi?id=70609

        Reviewed by Kenneth Rohde Christiansen.

        Operations in computeViewportAttributes that are not a part of the spec: 

        http://www.w3.org/TR/2011/WD-css-device-adapt-20110915/#constraining-viewport-property-values

        were moved into the functions restrictMinimumScaleFactorToViewportSize and
        restrictScaleFactorToInitialScaleIfNotUserScalable.

        * WebCore.exp.in:
        * dom/ViewportArguments.cpp:
        (WebCore::computeViewportAttributes):
        (WebCore::restrictMinimumScaleFactorToViewportSize):
        (WebCore::restrictScaleFactorToInitialScaleIfNotUserScalable):
        * dom/ViewportArguments.h:

2011-11-03  Andreas Kling  <kling@webkit.org>

        CSSRuleList: Move rule orphaning from deleteRule() out to callers.
        https://bugs.webkit.org/show_bug.cgi?id=71470

        Reviewed by Antti Koivisto.

        Rule parenting is the responsibility of the owner rule (the rule containing
        the rule list), so move parent clearing out of CSSRuleList::deleteRule() and
        into the (two) call sites.

        * css/CSSMediaRule.cpp:
        (WebCore::CSSMediaRule::deleteRule):
        * css/CSSRuleList.cpp:
        (WebCore::CSSRuleList::deleteRule):
        * css/WebKitCSSKeyframesRule.cpp:
        (WebCore::WebKitCSSKeyframesRule::deleteRule):

2011-11-03  Andreas Kling  <kling@webkit.org>

        Unreviewed build fix, sigh.

        * css/CSSFontFaceRule.h:
        * css/CSSMutableStyleDeclaration.h:

2011-11-03  Andreas Kling  <kling@webkit.org>

        Unreviewed build fix, out-of-line StyleSheet::parentStyleSheet()
        again since there's a cycle in the includes between CSSRule/StyleSheet.

        * css/StyleSheet.cpp:
        (WebCore::StyleSheet::parentStyleSheet):
        * css/StyleSheet.h:

2011-11-03  Andreas Kling  <kling@webkit.org>

        Unreviewed build fix after r99185, removing forward-declaration
        of CSSRule since CSSRule.h is already included.

        * css/StyleSheet.h:

2011-11-03  Andreas Kling  <kling@webkit.org>

        CSSOM: Inline some trivial methods.
        https://bugs.webkit.org/show_bug.cgi?id=71468

        Reviewed by Antti Koivisto.

        * css/CSSFontFaceRule.cpp:
        * css/CSSFontFaceRule.h:
        (WebCore::CSSFontFaceRule::setDeclaration):
        * css/CSSStyleRule.cpp:
        * css/CSSStyleRule.h:
        (WebCore::CSSStyleRule::setDeclaration):
        * css/CSSStyleSheet.cpp:
        * css/CSSStyleSheet.h:
        (WebCore::CSSStyleSheet::ownerRule):
        * css/StyleSheet.cpp:
        * css/StyleSheet.h:
        (WebCore::StyleSheet::parentStyleSheet):
        * css/WebKitCSSKeyframesRule.cpp:
        * css/WebKitCSSKeyframesRule.h:
        (WebCore::WebKitCSSKeyframesRule::name):
        (WebCore::WebKitCSSKeyframesRule::length):

2011-11-03  Andreas Kling  <kling@webkit.org>

        Devirtualize MediaList.
        https://bugs.webkit.org/show_bug.cgi?id=71464

        Reviewed by Antti Koivisto.

        * css/MediaList.h: Make the destructor non-virtual.

2011-11-03  Zoltan Herczeg  <zherczeg@webkit.org>

        Optimizing arithmetic composite filter to ARM-neon SIMD instruction set
        https://bugs.webkit.org/show_bug.cgi?id=65522

        Reviewed by Dirk Schulze.

        This patch continues the work of Felician Marton.

        The arithmetic operation of feComposite SVG filter can be greatly enhanced
        by the ARM-NEON instruction set since we are able to calculate the pixel data
        for all four RGBA channels at the same time.

        It won't affect the general behavior and existing tests will cover the changes.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * platform/graphics/filters/FEComposite.cpp:
        (WebCore::computeArithmeticPixels):
        (WebCore::arithmeticSoftware):
        (WebCore::FEComposite::platformArithmeticSoftware):
        (WebCore::FEComposite::platformApplySoftware):
        * platform/graphics/filters/FEComposite.h:
        * platform/graphics/filters/arm/FECompositeArithmeticNEON.cpp: Added.
        * platform/graphics/filters/arm/FECompositeArithmeticNEON.h: Added.
        (WebCore::FEComposite::platformArithmeticNeon):

2011-11-03  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] Add pageScaleFactor to the serialized history item
        https://bugs.webkit.org/show_bug.cgi?id=71463

        Reviewed by Tor Arne Vestbø.

        r75758 added the pageScaleFactor member, which we need to
        serialize.

        * history/qt/HistoryItemQt.cpp:
        (WebCore::HistoryItem::restoreState):
        (WebCore::HistoryItem::saveState):

2011-11-03  Mike Lawther  <mikelawther@chromium.org>

        Use createPrimitiveNumericValue function
        https://bugs.webkit.org/show_bug.cgi?id=71432

        Reviewed by Andreas Kling.

        No new tests - no change in functionality.

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseWrapShapeRect):
        (WebCore::CSSParser::parseWrapShapeCircle):
        (WebCore::CSSParser::parseWrapShapeEllipse):
        (WebCore::CSSParser::parseWrapShapePolygon):

2011-11-03  Pavel Feldman  <pfeldman@google.com>

        Not reviewed: win build fix. Assign autoDPI at all cases (breakage introduced in r99173).

        * dom/ViewportArguments.cpp:
        (WebCore::computeViewportAttributes):

2011-11-03  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Differentiate implicit viewport from that of the meta tag
        https://bugs.webkit.org/show_bug.cgi?id=71453

        Reviewed by Simon Hausmann.

        This is needed because of DPI adjustment taking place with the meta
        tag. This is to be avoided when no viewport meta tag is present.

        * dom/Document.cpp:
        (WebCore::Document::processViewport):
        * dom/ViewportArguments.cpp:
        (WebCore::computeViewportAttributes):
        * dom/ViewportArguments.h:
        (WebCore::ViewportArguments::ViewportArguments):
        (WebCore::ViewportArguments::operator==):

2011-11-03  Andreas Kling  <kling@webkit.org>

        Devirtualize CSSRule.
        https://bugs.webkit.org/show_bug.cgi?id=71382

        Reviewed by Antti Koivisto.

        Remove the virtual destructor from CSSRule, and reimplement RefCounted's deref()
        to invoke operator delete on the appropriate subclass type.

        This removes the CSSRule vtable and shrinks each instance by one CPU word.

        * css/CSSCharsetRule.h:
        * css/CSSFontFaceRule.h:
        * css/CSSMediaRule.h:
        * css/CSSPageRule.h:
        * css/CSSRegionStyleRule.h:
        * css/CSSRule.cpp:
        * css/CSSRule.h:
        (WebCore::CSSRule::deref):
        (WebCore::CSSRule::~CSSRule):
        * css/CSSStyleRule.h:
        * css/WebKitCSSKeyframeRule.h:

            Devirtualize!

        * css/CSSRule.cpp:
        (WebCore::CSSRule::destroy):

            Added, invokes operator delete on the right subclass type.

        * css/CSSImportRule.cpp:
        (WebCore::CSSImportRule::CSSImportRule):
        (WebCore::CSSImportRule::~CSSImportRule):
        (WebCore::CSSImportRule::requestStyleSheet):
        * css/CSSImportRule.h:
        (WebCore::CSSImportRule::ImportedStyleSheetClient::ImportedStyleSheetClient):
        (WebCore::CSSImportRule::ImportedStyleSheetClient::~ImportedStyleSheetClient):
        (WebCore::CSSImportRule::ImportedStyleSheetClient::setCSSStyleSheet):

            Break out the inheritance from CachedStyleSheetClient into a member variable
            that simply redirects the setCSSStyleSheet() callback to the CSSImportRule.

2011-10-31  Hans Wennborg  <hans@chromium.org>

        IndexedDB: Recycle cursor objects when calling continue()
        https://bugs.webkit.org/show_bug.cgi?id=71115

        Reviewed by Darin Fisher.

        The IndexedDB spec says that cursors should be recycled when calling
        continue(). Let the IDBRequest keep track of which cursor to return
        upon success, and have the cursor use a new callback:
        onSuccessWithContinuation() to signal that the continue was successful.

        When we start using the new callback, the
        storage/indexeddb/cursor-inconsistency.html layout test will start
        passing.

        * storage/IDBCallbacks.h:
        * storage/IDBCursorBackendImpl.cpp:
        (WebCore::IDBCursorBackendImpl::continueFunctionInternal):
        * storage/IDBRequest.cpp:
        (WebCore::IDBRequest::IDBRequest):
        (WebCore::IDBRequest::setCursor):
        (WebCore::IDBRequest::onSuccess):
        (WebCore::IDBRequest::onSuccessWithContinuation):
        * storage/IDBRequest.h:

2011-11-03  Pavel Feldman  <pfeldman@google.com>

        Web Inspector: preserve script location for inline handlers.
        https://bugs.webkit.org/show_bug.cgi?id=71367

        Makes eventHandler report position, not line number;

        Reviewed by Yury Semikhatsky.

        * bindings/js/CachedScriptSourceProvider.h:
        (WebCore::CachedScriptSourceProvider::CachedScriptSourceProvider):
        * bindings/js/JSLazyEventListener.cpp:
        (WebCore::JSLazyEventListener::JSLazyEventListener):
        (WebCore::JSLazyEventListener::initializeJSFunction):
        * bindings/js/JSLazyEventListener.h:
        (WebCore::JSLazyEventListener::create):
        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::eventHandlerPosition):
        * bindings/js/ScriptController.h:
        * bindings/js/ScriptEventListener.cpp:
        (WebCore::createAttributeEventListener):
        * bindings/js/ScriptSourceProvider.h:
        (WebCore::ScriptSourceProvider::ScriptSourceProvider):
        * bindings/js/StringSourceProvider.h:
        (WebCore::StringSourceProvider::create):
        (WebCore::StringSourceProvider::StringSourceProvider):
        (WebCore::makeSource):

2011-11-03  Alexander Pavlov  <apavlov@chromium.org>

        Web Inspector: [Styles] Do not check isEditingAnyField in StylesSidebarPane._createNewRule
        https://bugs.webkit.org/show_bug.cgi?id=71217

        Reviewed by Yury Semikhatsky.

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

2011-11-03  Balazs Kelemen  <kbalazs@webkit.org>

        [Qt] X11 plugins need to be reworked for Qt5
        https://bugs.webkit.org/show_bug.cgi?id=70023

        Reviewed by Simon Hausmann.

        Disable X11 plugins with Qt5.
        * features.pri:

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

        Unreviewed, rolling out r99138.
        http://trac.webkit.org/changeset/99138
        https://bugs.webkit.org/show_bug.cgi?id=71455

        It made 200+ tests flakey on SL and on Qt (Requested by Ossy
        on #webkit).

        * html/HTMLIFrameElement.cpp:
        (WebCore::parseSandboxAttribute):
        (WebCore::HTMLIFrameElement::parseMappedAttribute):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::setOpener):
        (WebCore::createWindow):
        * loader/FrameLoader.h:
        (WebCore::FrameLoader::setForcedSandboxFlags):
        * loader/FrameLoaderTypes.h:
        * loader/PolicyChecker.cpp:
        (WebCore::PolicyChecker::checkNewWindowPolicy):
        * page/SecurityOrigin.cpp:
        * page/SecurityOrigin.h:
        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::dataChanged):

2011-11-03  Kentaro Hara  <haraken@chromium.org>

        Fixed wrong implementation of doubleValue % 2^{64}.
        https://bugs.webkit.org/show_bug.cgi?id=67980

        Reviewed by Hajime Morita.

        fast/events/constructors/progress-event-constructor.html was failing
        because of the wrong implementation of conversion from an ECMAScript value
        to an IDL unsigned long long value (Spec: http://www.w3.org/TR/WebIDL/#es-unsigned-long-long).
        In particular, the calculation of doubleValue % 2^{64} was wrong.
        This patch implemented it correctly in doubleToInteger() in wtf/MathExtras.h.

        * bindings/js/JSDictionary.cpp:
        (WebCore::JSDictionary::convertValue): Uses doubleToInteger().
        * bindings/v8/OptionsObject.cpp:
        (WebCore::OptionsObject::getKeyValue): Ditto.

2011-11-03  Alexander Pavlov  <apavlov@chromium.org>

        Web Inspector: Introduce SuggestBox for TextPrompt
        https://bugs.webkit.org/show_bug.cgi?id=71288

        Reviewed by Pavel Feldman.

        Drive-by fix for a regression where clicking in the Database query view did not focus the prompt.

        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * inspector/front-end/ConsoleView.js:
        (WebInspector.ConsoleView):
        (WebInspector.ConsoleView.prototype.completions):
        (WebInspector.ConsoleView.prototype._completions.receivedPropertyNames):
        (WebInspector.ConsoleView.prototype._completions):
        (WebInspector.ConsoleView.prototype._reportCompletions):
        * inspector/front-end/DatabaseQueryView.js:
        (WebInspector.DatabaseQueryView):
        (WebInspector.DatabaseQueryView.prototype.afterShow):
        (WebInspector.DatabaseQueryView.prototype.completions):
        (WebInspector.DatabaseQueryView.prototype._selectStart.moveBackIfOutside):
        (WebInspector.DatabaseQueryView.prototype._selectStart):
        (WebInspector.DatabaseQueryView.prototype._appendViewQueryResult):
        (WebInspector.DatabaseQueryView.prototype._appendErrorQueryResult):
        (WebInspector.DatabaseQueryView.prototype._appendQueryResult):
        * inspector/front-end/ElementsPanel.js:
        * inspector/front-end/Popover.js:
        (WebInspector.Popover):
        (WebInspector.Popover.prototype._positionElement):
        * inspector/front-end/StylesSidebarPane.js:
        (WebInspector.StylePropertyTreeElement.prototype):
        ():
        * inspector/front-end/TextPrompt.js:
        (WebInspector.TextPrompt):
        (WebInspector.TextPrompt.prototype.setSuggestForceable):
        (WebInspector.TextPrompt.prototype._attachInternal):
        (WebInspector.TextPrompt.prototype._removeFromElement):
        (WebInspector.TextPrompt.prototype.defaultKeyHandler):
        (WebInspector.TextPrompt.prototype.onKeyDown):
        (WebInspector.TextPrompt.prototype.acceptAutoComplete):
        (WebInspector.TextPrompt.prototype.autoCompleteSoon):
        (WebInspector.TextPrompt.prototype.complete):
        (WebInspector.TextPrompt.prototype._completionsReady):
        (WebInspector.TextPrompt.prototype.applySuggestion):
        (WebInspector.TextPrompt.prototype.acceptSuggestion):
        (WebInspector.TextPrompt.prototype.isSuggestBoxVisible):
        (WebInspector.TextPrompt.prototype.moveCaretToEndOfPrompt):
        (WebInspector.TextPrompt.prototype.tabKeyPressed):
        (WebInspector.TextPrompt.prototype.enterKeyPressed):
        (WebInspector.TextPrompt.prototype.upKeyPressed):
        (WebInspector.TextPrompt.prototype.downKeyPressed):
        (WebInspector.TextPrompt.SuggestBoxConfig):
        (WebInspector.TextPromptWithHistory):
        (WebInspector.TextPromptWithHistory.prototype.pushHistoryItem):
        (WebInspector.TextPromptWithHistory.prototype.defaultKeyHandler):
        (WebInspector.TextPrompt.SuggestBox):
        (WebInspector.TextPrompt.SuggestBox.prototype.get visible):
        (WebInspector.TextPrompt.SuggestBox.prototype.get hasSelection):
        (WebInspector.TextPrompt.SuggestBox.prototype._onscrollresize):
        (WebInspector.TextPrompt.SuggestBox.prototype._updateBoxPosition):
        (WebInspector.TextPrompt.SuggestBox.prototype._onboxmousedown):
        (WebInspector.TextPrompt.SuggestBox.prototype.hide):
        (WebInspector.TextPrompt.SuggestBox.prototype.removeFromElement):
        (WebInspector.TextPrompt.SuggestBox.prototype._applySuggestion):
        (WebInspector.TextPrompt.SuggestBox.prototype.acceptSuggestion):
        (WebInspector.TextPrompt.SuggestBox.prototype._onNextItem):
        (WebInspector.TextPrompt.SuggestBox.prototype._onPreviousItem):
        (WebInspector.TextPrompt.SuggestBox.prototype.updateSuggestionsSoon):
        (WebInspector.TextPrompt.SuggestBox.prototype.updateSuggestions):
        (WebInspector.TextPrompt.SuggestBox.prototype._onItemMouseDown):
        (WebInspector.TextPrompt.SuggestBox.prototype._createItemElement):
        (WebInspector.TextPrompt.SuggestBox.prototype._updateItems):
        (WebInspector.TextPrompt.SuggestBox.prototype._updateSelection):
        (WebInspector.TextPrompt.SuggestBox.prototype._completionsReady):
        (WebInspector.TextPrompt.SuggestBox.prototype.upKeyPressed):
        (WebInspector.TextPrompt.SuggestBox.prototype.downKeyPressed):
        (WebInspector.TextPrompt.SuggestBox.prototype.enterKeyPressed):
        (WebInspector.TextPrompt.SuggestBox.prototype.tabKeyPressed):
        (WebInspector.TextPrompt.SuggestBox.prototype.spaceKeyPressed):
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/inspector.css:
        (.search-view .search-panel):
        (#search-results-pane-file-based .search-match .search-match-content):
        (.custom-popup-horizontal-scroll ::-webkit-scrollbar, .custom-popup-vertical-scroll ::-webkit-scrollbar):
        (.custom-popup-horizontal-scroll ::-webkit-scrollbar-corner, .custom-popup-vertical-scroll ::-webkit-scrollbar-corner):
        (.custom-popup-horizontal-scroll ::-webkit-resizer, .custom-popup-vertical-scroll ::-webkit-resizer):
        (.custom-popup-horizontal-scroll ::-webkit-scrollbar-button, .custom-popup-vertical-scroll ::-webkit-scrollbar-button):
        (.custom-popup-horizontal-scroll ::-webkit-scrollbar:horizontal:corner-present):
        (.custom-popup-horizontal-scroll ::-webkit-scrollbar-thumb:horizontal):
        (.custom-popup-horizontal-scroll ::-webkit-scrollbar-thumb:horizontal:hover):
        (.custom-popup-horizontal-scroll ::-webkit-scrollbar-thumb:horizontal:active):
        (.custom-popup-horizontal-scroll ::-webkit-scrollbar-track-piece:horizontal:start):
        (.custom-popup-horizontal-scroll ::-webkit-scrollbar-track-piece:horizontal:end):
        (.custom-popup-horizontal-scroll ::-webkit-scrollbar-track-piece:horizontal:end:corner-present):
        (.custom-popup-horizontal-scroll ::-webkit-scrollbar-track-piece:horizontal:decrement):
        (.custom-popup-horizontal-scroll ::-webkit-scrollbar-track-piece:horizontal:increment):
        (.custom-popup-vertical-scroll ::-webkit-scrollbar:vertical:corner-present):
        (.custom-popup-vertical-scroll ::-webkit-scrollbar-thumb:vertical):
        (.custom-popup-vertical-scroll ::-webkit-scrollbar-thumb:vertical:hover):
        (.custom-popup-vertical-scroll ::-webkit-scrollbar-thumb:vertical:active):
        (.custom-popup-vertical-scroll ::-webkit-scrollbar-track-piece:vertical:start):
        (.custom-popup-vertical-scroll ::-webkit-scrollbar-track-piece:vertical:end):
        (.custom-popup-vertical-scroll ::-webkit-scrollbar-track-piece:vertical:end:corner-present):
        (.custom-popup-vertical-scroll ::-webkit-scrollbar-track-piece:vertical:decrement):
        (.custom-popup-vertical-scroll ::-webkit-scrollbar-track-piece:vertical:increment):
        * inspector/front-end/popover.css:
        (.popover.right-bottom-arrow .arrow):
        * inspector/front-end/textPrompt.css: Added.
        (.suggest-box):
        (.suggest-box.visible):
        (.suggest-box .container):
        (.suggest-box-content-item):
        (.suggest-box-content-item .prefix):
        (.suggest-box-content-item.selected):
        (.suggest-box-content-item:hover:not(.selected)):
        * inspector/front-end/utilities.js:
        (setupPrototypeUtilities.Element.prototype.boxInWindow):

2011-11-03  Devdatta Deshpande  <webkit.devdatta@gmail.com>

        REGRESSION (r94132): broke fast/loader/location-port.html on GTK
        https://bugs.webkit.org/show_bug.cgi?id=67277

        Reviewed by Adam Barth.

        If port is 0, SoupURI does not have an explicitly specified port. Due
        to this port value is ignored in SoupURI. Hence, an extra check is
        required to restore the port.

        Test: LayoutTests/fast/loader/location-port.html

        * platform/network/soup/ResourceRequestSoup.cpp:
        (WebCore::ResourceRequest::updateFromSoupMessage):

2011-11-03  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Allow the toolbar background to be transparent on mac platforms when remote
        https://bugs.webkit.org/show_bug.cgi?id=71437

        Reviewed by Yury Semikhatsky.

        * inspector/front-end/inspector.css:
        (body.detached.platform-mac-snowleopard #toolbar):

2011-11-02  Adam Barth  <abarth@webkit.org>

        CSP should handle empty URLs as agreed at TPAC
        https://bugs.webkit.org/show_bug.cgi?id=71426

        Reviewed by Eric Seidel.

        It was somewhat unclear how CSP should treat plugins that lacked a URL
        because most of the CSP rules are URL-based.  At TPAC, we decided to
        treat "empty" URLs as if there were the URL of the document.  That
        means you can use plugins with no URL if you've included 'self' in
        object-src, but you can also block them by using 'none' as your
        object-src.

        Tests: http/tests/security/contentSecurityPolicy/object-src-no-url-allowed.html
               http/tests/security/contentSecurityPolicy/object-src-no-url-blocked.html
               http/tests/security/contentSecurityPolicy/object-src-none-allowed.html
               http/tests/security/contentSecurityPolicy/object-src-none-blocked.html

        * page/ContentSecurityPolicy.cpp:
        (WebCore::CSPDirective::CSPDirective):
        (WebCore::CSPDirective::allows):
        (WebCore::ContentSecurityPolicy::createCSPDirective):

2011-11-02  Adam Barth  <abarth@webkit.org>

        Implement allow-popups for iframe@sandbox
        https://bugs.webkit.org/show_bug.cgi?id=66505

        Reviewed by Eric Seidel.

        There's been some discussion in the HTML working group about adding an
        allow-popups directive to the iframe sandbox.  Microsoft has added it
        to IE10 platform preview and is fairly adamant about this feature
        because it's needed by one or their products that's planning to use
        iframe sandbox.  Hixie says he'll add it to the spec once we implement
        it, so here's our implementation.  (See discussion in the W3C linked in
        the bug for more details.)

        Tests: http/tests/security/popup-allowed-by-sandbox-is-sandboxed-control.html
               http/tests/security/popup-allowed-by-sandbox-is-sandboxed.html
               http/tests/security/popup-allowed-by-sandbox-when-allowed.html

        * html/HTMLIFrameElement.cpp:
        (WebCore::HTMLIFrameElement::parseMappedAttribute):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::setOpener):
        (WebCore::createWindow):
        * loader/FrameLoader.h:
        (WebCore::FrameLoader::forceSandboxFlags):
        * loader/FrameLoaderTypes.h:
        * loader/PolicyChecker.cpp:
        (WebCore::PolicyChecker::checkNewWindowPolicy):
        * page/SecurityOrigin.cpp:
        (WebCore::SecurityOrigin::parseSandboxPolicy):
        * page/SecurityOrigin.h:
        (WebCore::SecurityOrigin::sandboxFlags):
        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::dataChanged):

2011-11-02  Sam Weinig  <sam@webkit.org>

        Remove the ability to generate custom lookupGetter/lookupSetter functions,
        now that they can not be overridden 

        Reviewed by Adam Roben.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateHeader):

2011-11-02  Sam Weinig  <sam@webkit.org>

        Fix crashing tests after r99126 (commit for https://bugs.webkit.org/show_bug.cgi?id=71307)

        Reviewed by Adam Roben.

        * bindings/js/JSDOMWindowShell.cpp:
        (WebCore::JSDOMWindowShell::getOwnPropertyNames):
        Since we are proxying to the window, we need to pass it as the this object,
        not the shell.

2011-11-02  Erik Arvidsson  <arv@chromium.org>

        Remove LegacyDefaultOptionalArguments flag from storage IDL files
        https://bugs.webkit.org/show_bug.cgi?id=65744

        Reviewed by Adam Barth.

        Test: storage/domstorage/localstorage/missing-arguments.html

        * storage/DatabaseCallback.idl:
        * storage/IDBRequest.idl:
        * storage/IDBTransaction.idl:
        * storage/SQLResultSetRowList.idl:
        * storage/SQLStatementCallback.idl:
        * storage/SQLStatementErrorCallback.idl:
        * storage/SQLTransaction.idl:
        * storage/SQLTransactionCallback.idl:
        * storage/SQLTransactionErrorCallback.idl:
        * storage/SQLTransactionSync.idl:
        * storage/SQLTransactionSyncCallback.idl:
        * storage/Storage.idl:
        * storage/StorageInfo.idl:
        * storage/StorageInfoErrorCallback.idl:
        * storage/StorageInfoQuotaCallback.idl:
        * storage/StorageInfoUsageCallback.idl:

2011-11-02  Adam Klein  <adamk@chromium.org>

        Replace usage of StringImpl with String where possible in CharacterData and Text
        https://bugs.webkit.org/show_bug.cgi?id=71383

        Reviewed by Darin Adler.

        Ryosuke Niwa, in http://webkit.org/b/70862, asked me to replace usages
        of String with StringImpl. I've done more than what he asked in this
        patch, the biggest change being that CharacterData now holds a String
        instead of a RefPtr<StringImpl>.

        No new tests, as this should have no effect on behavior.

        * dom/CharacterData.cpp:
        (WebCore::CharacterData::setData):
        (WebCore::CharacterData::substringData):
        (WebCore::CharacterData::parserAppendData):
        (WebCore::CharacterData::appendData):
        (WebCore::CharacterData::insertData):
        (WebCore::CharacterData::deleteData):
        (WebCore::CharacterData::replaceData):
        (WebCore::CharacterData::containsOnlyWhitespace):
        (WebCore::CharacterData::setDataAndUpdate):
        (WebCore::CharacterData::updateRenderer):
        (WebCore::CharacterData::dispatchModifiedEvent):
        * dom/CharacterData.h:
        (WebCore::CharacterData::length):
        (WebCore::CharacterData::dataImpl):
        (WebCore::CharacterData::CharacterData):
        (WebCore::CharacterData::setDataWithoutUpdate):
        * dom/Text.cpp:
        (WebCore::Text::splitText):

2011-11-02  Mark Hahnenberg  <mhahnenberg@apple.com>

        De-virtualize JSObject::getOwnPropertyNames
        https://bugs.webkit.org/show_bug.cgi?id=71307

        Reviewed by Darin Adler.

        No new tests.

        Added getOwnPropertyNames to the MethodTable, changed all the virtual 
        implementations of getOwnPropertyNames to static ones, and replaced 
        all call sites with corresponding lookups in the MethodTable.

        * WebCore.exp.in:
        * bindings/js/JSDOMStringMapCustom.cpp:
        (WebCore::JSDOMStringMap::getOwnPropertyNames):
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::getOwnPropertyNames):
        * bindings/js/JSDOMWindowShell.cpp:
        (WebCore::JSDOMWindowShell::getOwnPropertyNames):
        * bindings/js/JSDOMWindowShell.h:
        * bindings/js/JSHistoryCustom.cpp:
        (WebCore::JSHistory::getOwnPropertyNames):
        * bindings/js/JSLocationCustom.cpp:
        (WebCore::JSLocation::getOwnPropertyNames):
        * bindings/js/JSStorageCustom.cpp:
        (WebCore::JSStorage::getOwnPropertyNames):
        * bindings/js/ScriptValue.cpp:
        (WebCore::jsToInspectorValue):
        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::CloneSerializer::serialize):
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateHeader):
        (GenerateImplementation):
        * bridge/qt/qt_runtime.cpp:
        (JSC::Bindings::QtRuntimeMetaMethod::getOwnPropertyNames):
        (JSC::Bindings::QtRuntimeConnectionMethod::getOwnPropertyNames):
        * bridge/qt/qt_runtime.h:
        * bridge/runtime_array.cpp:
        (JSC::RuntimeArray::getOwnPropertyNames):
        * bridge/runtime_array.h:
        * bridge/runtime_object.cpp:
        (JSC::Bindings::RuntimeObject::getOwnPropertyNames):
        * bridge/runtime_object.h:

2011-11-02  Tony Chang  <tony@chromium.org>

        force inline flexitems to be wrapped in anonymous blocks
        https://bugs.webkit.org/show_bug.cgi?id=71314

        Reviewed by Ojan Vafai.

        If there is a mix of inline and block items, all the inline items were already getting wrapped
        (see RenderBlock::addChildIgnoringAnonymousColumnBlocks).  However, if there are only inline items,
        we need to force them into an anonymous block.

        There are still lots of bugs because we're trying to read style values from the anonymous block,
        but this at least causes layout to be called on all the render objects.

        Tests: css3/flexbox/anonymous-block.html

        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::TreeOrderIterator::next):
        (WebCore::RenderFlexibleBox::FlexOrderIterator::next):
        (WebCore::RenderFlexibleBox::RenderFlexibleBox): force children into blocks

2011-11-02  Dean Jackson  <dino@apple.com>

        Add ENABLE_CSS_SHADERS flag
        https://bugs.webkit.org/show_bug.cgi?id=71394

        Reviewed by Sam Weinig.

        * Configurations/FeatureDefines.xcconfig:

2011-11-02  Emil A Eklund  <eae@chromium.org>

        Switch RenderText to new layout types
        https://bugs.webkit.org/show_bug.cgi?id=71389

        Reviewed by Eric Seidel.

        Switch RenderText methods (and overriden methods in related classes) to
        LayoutRect/LayoutUnit.

        No new tests.

        * rendering/RenderText.cpp:
        (WebCore::RenderText::absoluteRectsForRange):
        (WebCore::RenderText::linesBoundingBox):
        (WebCore::RenderText::linesVisualOverflowBoundingBox):
        * rendering/RenderText.h:
        Change RenderText to expose its bounding box, selection and caret rects
        as LayoutRects.
        
        * rendering/svg/RenderSVGInlineText.cpp:
        (WebCore::RenderSVGInlineText::localCaretRect):
        * rendering/svg/RenderSVGInlineText.h:
        Change localCaretRect to return a LayoutRect.

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

        Infinite recursion in RenderSVGResourceContainer::markAllClientsForInvalidation
        https://bugs.webkit.org/show_bug.cgi?id=71384

        Reviewed by Darin Adler.

        Adding a reentrancy guard to RenderSVGResourceContainer to prevent infinite recursion when
        resources reference one another and share ids.

        Test: svg/custom/resource-invalidation-crash.svg

        * rendering/svg/RenderSVGResourceContainer.cpp:
        (WebCore::RenderSVGResourceContainer::RenderSVGResourceContainer):
        (WebCore::RenderSVGResourceContainer::markAllClientsForInvalidation):
        * rendering/svg/RenderSVGResourceContainer.h:

2011-11-02  Jon Lee  <jonlee@apple.com>

        Expand DragController to provide more information about the dragging session
        https://bugs.webkit.org/show_bug.cgi?id=71324
        <rdar://problem/10379175>

        Reviewed by Darin Adler.

        * WebCore.xcodeproj/project.pbxproj:
        * page/DragController.cpp:
        (WebCore::DragController::dragEntered):
        (WebCore::DragController::dragUpdated):
        (WebCore::DragController::dragEnteredOrUpdated):
        (WebCore::DragController::tryDocumentDrag): In addition to determining the
        drag operation, DragSession is updated with data regarding whether the mouse
        is over a file input, and the number of items that would be accepted based on
        the mouse's location.
        * page/DragController.h:
        * page/DragSession.h: Added.
        (WebCore::DragSession::DragSession): Keep track of current operation, whether
        the mouse is over a file input element, and how many files would be accepted if
        dropped.
        * platform/DragData.h: Added numberOfFiles()
        * platform/chromium/DragDataChromium.cpp:
        (WebCore::DragData::numberOfFiles):
        * platform/efl/DragDataEfl.cpp:
        (WebCore::DragData::numberOfFiles):
        * platform/gtk/DragDataGtk.cpp:
        (WebCore::DragData::numberOfFiles):
        * platform/mac/DragDataMac.mm:
        (WebCore::DragData::numberOfFiles):
        * platform/qt/DragDataQt.cpp:
        (WebCore::DragData::numberOfFiles):
        * platform/win/DragDataWin.cpp:
        (WebCore::DragData::numberOfFiles):
        * platform/wince/DragDataWinCE.cpp:
        (WebCore::DragData::numberOfFiles):
        * platform/wx/DragDataWx.cpp:
        (WebCore::DragData::numberOfFiles):

2011-11-02  Alexey Proskuryakov  <ap@apple.com>

        Emedded PDFs cannot be opened from Web archives
        https://bugs.webkit.org/show_bug.cgi?id=70954

        Reviewed by Oliver Hunt.

        BuiltInPDFPlugin doesn't have access to original ResourceResponse and has to re-create it
        It doesn't seem to be possible to create an NSURLResponse with a non-null HTTP status code,
        and NetscapePlugInStreamLoader becomes unhappy.

        * loader/NetscapePlugInStreamLoader.cpp: (WebCore::NetscapePlugInStreamLoader::didReceiveResponse):
        Allow 0 status code, it's not a real error to have one in response.

2011-10-31  Nat Duca  <nduca@chromium.org>

        [chromium] Slow down commit and draw rate based on visibility and draw completion
        https://bugs.webkit.org/show_bug.cgi?id=71267

        Reviewed by James Robinson.

        * platform/graphics/chromium/cc/CCLayerTreeHost.h:
        (WebCore::CCLayerTreeHost::visible):
        * platform/graphics/chromium/cc/CCLayerTreeHostImpl.h:
        (WebCore::CCLayerTreeHostImpl::visible):
        * platform/graphics/chromium/cc/CCScheduler.cpp:
        (WebCore::CCScheduler::beginFrame):
        (WebCore::CCScheduler::processScheduledActions):
        * platform/graphics/chromium/cc/CCScheduler.h:
        * platform/graphics/chromium/cc/CCSchedulerStateMachine.cpp:
        (WebCore::CCSchedulerStateMachine::nextAction):
        (WebCore::CCSchedulerStateMachine::updateState):
        * platform/graphics/chromium/cc/CCSchedulerStateMachine.h:
        * platform/graphics/chromium/cc/CCThreadProxy.cpp:
        (WebCore::CCThreadProxy::visible):
        * platform/graphics/chromium/cc/CCThreadProxy.h:

2011-11-02  Dan Bernstein  <mitz@apple.com>

        <rdar://problem/10336700> Add API to get rendered text image without having to select it
        https://bugs.webkit.org/show_bug.cgi?id=71407

        Reviewed by Simon Fraser.

        Test: TestWebKitAPI/Tests/mac/RenderedImageFromDOMRange.mm

        * bindings/objc/DOM.mm:
        (-[DOMRange renderedImageForcingBlackText:]): Added.
        * bindings/objc/DOMPrivate.h:
        * page/Frame.h:
        * page/mac/FrameMac.mm:
        (WebCore::Frame::rangeImage): Added. Sets the selection in the RenderView (only) based on the
        given range and gets a selection-only rendering of the view, then restores the selection.
        * rendering/RenderView.cpp:
        (WebCore::RenderView::setSelection): Skip all invalidation if the repaint behavior is RepaintNothing.
        (WebCore::RenderView::getSelection): Added this getter.
        * rendering/RenderView.h:

2011-11-02  Tom Sepez  <tsepez@chromium.org>

        XSSAuditor is silent
        https://bugs.webkit.org/show_bug.cgi?id=70973

        Reviewed by Adam Barth.

        Test: http/tests/security/xssAuditor/script-tag-with-callbacks.html

        * html/parser/XSSAuditor.cpp:
        (WebCore::XSSAuditor::XSSAuditor):
        (WebCore::XSSAuditor::filterToken):
        * html/parser/XSSAuditor.h:
        * loader/EmptyClients.h:
        (WebCore::EmptyFrameLoaderClient::didDetectXSS):
        * loader/FrameLoaderClient.h:

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

        Assertion in FontCache::getCachedFontData() when painting into composited layer
        https://bugs.webkit.org/show_bug.cgi?id=71377

        Reviewed by Anders Carlsson.

        Add one of the mysterious FontCachePurgePreventers on the stack when painting
        compositing layers, just as FrameView::paintContents does, to fix an assertion
        seen on the bots with some layout tests.

        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::paintIntoLayer):

2011-11-02  Tommy Widenflycht  <tommyw@google.com>

        MediaStreamRegistry should hold references to MediaStreamDescriptor rather than MediaStream
        https://bugs.webkit.org/show_bug.cgi?id=70896

        Reviewed by Adam Barth.

        Tests for the Media Stream API will be provided by the bug 56587, pending enough landed code.

        * mediastream/MediaStreamRegistry.cpp:
        (WebCore::MediaStreamRegistry::registerMediaStreamURL):
        (WebCore::MediaStreamRegistry::unregisterMediaStreamURL):
        (WebCore::MediaStreamRegistry::lookupMediaStreamDescriptor):
        * mediastream/MediaStreamRegistry.h:

2011-11-02  Zoltan Herczeg  <zherczeg@webkit.org>

        Match allowed CSS string characters to Firefox and Opera browsers
        https://bugs.webkit.org/show_bug.cgi?id=71000

        Reviewed by Darin Adler.

        Firefox and Opera accepts any character inside a string except
        newline and starting quote character. This behaviour matches to
        the CSS 2.1 grammar: http://www.w3.org/TR/CSS2/grammar.html
        WebKit should follow them.

        Test: fast/css/parsing-css-allowed-string-characters.html

        * css/tokenizer.flex:

2011-11-02  Devdatta Deshpande  <pwjd73@motorola.com>

        Assert in MoveSelectionCommand::doApply
        https://bugs.webkit.org/show_bug.cgi?id=70277

        Reviewed by Ryosuke Niwa.

        A MoveSelectionCommand should be fired only if the selection type is
        RangeSelection, since nothing is selected in other cases.

        Test: fast/events/drag-link.html

        * page/DragController.cpp:
        (WebCore::DragController::dragIsMove):

2011-11-02  Jon Lee  <jonlee@apple.com>

        <input=file multiple> default text uses singular instead of plural
        https://bugs.webkit.org/show_bug.cgi?id=71319
        <rdar://problem/10379021>

        Reviewed by Darin Adler.

        Added a new method to return the label text for a file upload control that
        allows multiple files. Needed to extend the RenderTheme function to pass down
        a boolean representing whether multiple files are allowed in the file list.

        * English.lproj/Localizable.strings:
        * html/FileInputType.cpp:
        (WebCore::FileInputType::defaultToolTip):
        * platform/DefaultLocalizationStrategy.cpp:
        (WebCore::DefaultLocalizationStrategy::fileButtonNoFilesSelectedLabel):
        * platform/DefaultLocalizationStrategy.h:
        * platform/LocalizationStrategy.h:
        * platform/LocalizedStrings.cpp:
        (WebCore::fileButtonNoFilesSelectedLabel):
        * platform/LocalizedStrings.h:
        * platform/efl/LocalizedStringsEfl.cpp:
        (WebCore::fileButtonNoFilesSelectedLabel):
        * platform/gtk/LocalizedStringsGtk.cpp:
        (WebCore::fileButtonNoFilesSelectedLabel):
        * platform/gtk/RenderThemeGtk.cpp:
        (WebCore::RenderThemeGtk::fileListNameForWidth):
        * platform/gtk/RenderThemeGtk.h:
        * platform/qt/RenderThemeQt.cpp:
        (WebCore::RenderThemeQt::fileListNameForWidth):
        * platform/qt/RenderThemeQt.h:
        * platform/wx/LocalizedStringsWx.cpp:
        (WebCore::fileButtonNoFilesSelectedLabel):
        * rendering/RenderFileUploadControl.cpp:
        (WebCore::RenderFileUploadControl::fileTextValue):
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::fileListNameForWidth):
        * rendering/RenderTheme.h:
        * rendering/RenderThemeMac.h:
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::fileListNameForWidth):

2011-11-02  Andras Becsi  <andras.becsi@nokia.com>

        [Qt] Fix the build with NO_LISTBOX_RENDERING

        Unreviewed build fix after r99035.

        Patch by Michael Bruning <michael.bruning@nokia.com>

        No new tests needed.

        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::listBoxSelectItem):

2011-10-28  Ryosuke Niwa  <rniwa@webkit.org>

        div { display: none; } makes pasting into text fields impossible
        https://bugs.webkit.org/show_bug.cgi?id=27683

        Reviewed by Enrica Casucci.

        The bug was caused by insertFragmentForTestRendering's always inserting a node for test rendering
        into document's body.

        Fixed the bug by inserting the node for test rendering into the root editable element. In addition,
        remove the node before dispatching beforeTextInserted event to avoid event listeners, in particular
        TextFieldInputType::handleBeforeTextInsertedEvent, from seeing the test node.

        Test: editing/pasteboard/input-with-display-none-div.html

        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplacementFragment::ReplacementFragment):
        (WebCore::ReplacementFragment::insertFragmentForTestRendering):
        (WebCore::ReplacementFragment::restoreAndRemoveTestRenderingNodesToFragment):

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

        REGRESSION(r96870): WebKit generates background: transparent on blogger.com
        https://bugs.webkit.org/show_bug.cgi?id=71203

        Reviewed by Ojan Vafai.

        Remove the transparent background color from inline style declarations in the pasted content.
        Also fixed a bug in removeStyleFromRulesAndContext that it removes properties in inline style
        declarations even if those properties were overridden.

        Tests: editing/deleting/merge-paragraphs-with-transparent-background.html
               editing/deleting/paste-with-transparent-background-color.html

        * editing/EditingStyle.cpp:
        (WebCore::removePropertiesInStyle):
        (WebCore::EditingStyle::removeStyleFromRulesAndContext):
        (WebCore::EditingStyle::removePropertiesInElementDefaultStyle):

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

        CSSStyleRule: Devirtualize selectorText()
        https://bugs.webkit.org/show_bug.cgi?id=71364

        Reviewed by Antti Koivisto.

        Have CSSStyleRule::selectorText() redirect to CSSPageRule::pageSelectorText()
        if type() is PAGE_RULE.

        * css/CSSPageRule.cpp:
        (WebCore::CSSPageRule::pageSelectorText):
        * css/CSSPageRule.h:
        * css/CSSStyleRule.cpp:
        (WebCore::CSSStyleRule::selectorText):
        * css/CSSStyleRule.h:

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

        CSSRule: Devirtualize cssText()
        https://bugs.webkit.org/show_bug.cgi?id=71292

        Reviewed by Antti Koivisto.

        Have CSSRule::cssText() redirect to the appropriate subclass based on type().
        This is one of the last steps of devirtualizing CSSRule completely, which will
        allow us to get rid of its vtable, and each instance's pointer thereto.

        * css/CSSCharsetRule.h:
        * css/CSSFontFaceRule.h:
        * css/CSSImportRule.h:
        * css/CSSMediaRule.h:
        * css/CSSRegionStyleRule.h:
        * css/CSSRule.cpp:
        (WebCore::CSSRule::cssText):
        * css/CSSRule.h:
        * css/CSSStyleRule.h:
        * css/WebKitCSSKeyframeRule.h:
        * css/WebKitCSSKeyframesRule.h:

2011-11-02  Patrick Gansterer  <paroga@webkit.org>

        Unreviewed build fix for !ENABLE(FILTERS) after r98989.

        * rendering/svg/SVGResourcesCache.cpp:
        (WebCore::SVGResourcesCache::clientLayoutChanged):

2011-11-02  Alexander Pavlov  <apavlov@chromium.org>

        Web Inspector: [REGRESSION] Clicking in a CSS property/value being edited commits the editor
        https://bugs.webkit.org/show_bug.cgi?id=71360

        Reviewed by Pavel Feldman.

        Selecting a selected TreeElement should be an idempotent operation.

        * inspector/front-end/treeoutline.js:
        (TreeElement.prototype.select):

2011-11-02  Ben Wells  <benwells@chromium.org>

        Canvas filling paths or rects need to be invalidate larger rects for some compositing modes.
        https://bugs.webkit.org/show_bug.cgi?id=70379

        Reviewed by James Robinson.

        Test: fast/canvas/canvas-composite-fill-repaint.html

        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::fill):
        (WebCore::CanvasRenderingContext2D::fillRect):
        (WebCore::CanvasRenderingContext2D::drawImage):
        (WebCore::CanvasRenderingContext2D::didDrawEntireCanvas):
        * html/canvas/CanvasRenderingContext2D.h:

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

        Fix uses of LayoutUnit in Frame-, Scroll-, and RenderView
        https://bugs.webkit.org/show_bug.cgi?id=71321

        Reviewed by Darin Adler.

        Updating the usage of LayoutUnits in the *View classes to mirror the proper use
        as derived in the subpixellayout branch.

        This entails scrolling only with integers (and rounding once we've made the switch)
        and using integers for window coordinates, with LayoutUnits for content coordinates.

        No new tests -- no change in behavior.

        * page/FrameView.cpp:
        (WebCore::FrameView::invalidateRect):
        (WebCore::FrameView::setFrameRect):
        (WebCore::FrameView::zoomAnimatorTransformChanged):
        (WebCore::FrameView::scrollContentsFastPath):
        (WebCore::FrameView::scrollContentsSlowPath):
        (WebCore::FrameView::scrollElementToRect):
        (WebCore::FrameView::setScrollPosition):
        (WebCore::FrameView::repaintContentRectangle):
        (WebCore::FrameView::scrollTo):
        (WebCore::FrameView::updateScrollCorner):
        * page/FrameView.h:
        (WebCore::FrameView::trackedRepaintRects):
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::visibleContentRect):
        (WebCore::ScrollView::layoutWidth):
        (WebCore::ScrollView::layoutHeight):
        (WebCore::ScrollView::fixedLayoutSize):
        (WebCore::ScrollView::setFixedLayoutSize):
        (WebCore::ScrollView::contentsSize):
        (WebCore::ScrollView::setContentsSize):
        (WebCore::ScrollView::overhangAmount):
        (WebCore::ScrollView::updateScrollbars):
        (WebCore::ScrollView::rectToCopyOnScroll):
        (WebCore::ScrollView::scrollContents):
        (WebCore::ScrollView::windowToContents):
        (WebCore::ScrollView::screenToContents):
        (WebCore::ScrollView::scrollbarAtPoint):
        (WebCore::ScrollView::wheelEvent):
        * platform/ScrollView.h:
        (WebCore::ScrollView::visibleWidth):
        (WebCore::ScrollView::visibleHeight):
        (WebCore::ScrollView::contentsWidth):
        (WebCore::ScrollView::contentsHeight):
        (WebCore::ScrollView::adjustScrollPositionWithinRange):
        * rendering/RenderView.cpp:
        (WebCore::RenderView::paint):
        (WebCore::RenderView::shouldRepaint):
        (WebCore::RenderView::repaintViewRectangle):
        (WebCore::RenderView::repaintRectangleInViewAndCompositedLayers):
        (WebCore::RenderView::computeRectForRepaint):
        (WebCore::RenderView::selectionBounds):
        (WebCore::RenderView::viewRect):
        (WebCore::RenderView::unscaledDocumentRect):
        (WebCore::RenderView::documentRect):
        * rendering/RenderView.h:
        (WebCore::RenderView::printRect):
        (WebCore::RenderView::setPrintRect):

2011-11-01  Anna Cavender  <annacc@chromium.org>

        Small fixes for WebVTTParser.
        https://bugs.webkit.org/show_bug.cgi?id=71334

        Reviewed by Darin Adler.

        No new tests.  This is needed to enable other tests, coming soon.

        * html/track/WebVTTParser.cpp:
        (WebCore::hasLongWebVTTIdentifier): changed to return true when header is
            exactly "WEBVTT"
        (WebCore::WebVTTParser::collectTimingsAndSettings): fix typos, position should
            only progress once when checking the character after a timestamp.

2011-11-01  Darin Adler  <darin@apple.com>

        Change HTMLSelectElement::setSelectedIndex to use enums instead of bools
        https://bugs.webkit.org/show_bug.cgi?id=70184

        Reviewed by Kent Tamura.

        Refactoring that does not require new tests.

        * bindings/objc/DOMHTML.mm:
        (-[DOMHTMLSelectElement _activateItemAtIndex:]): Replaced setSelectedIndexByUser
        call with a call to the renamed optionSelectedByUser, also removed one argument.
        (-[DOMHTMLSelectElement _activateItemAtIndex:allowMultipleSelection:]): Ditto.

        * html/HTMLOptionElement.cpp:
        (WebCore::HTMLOptionElement::setSelected): Replaced setSelectedIndex call with a
        call to the new optionSelectionStateChanged function.
        (WebCore::HTMLOptionElement::insertedIntoTree): Ditto.

        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::HTMLSelectElement): Updated since m_userDrivenChange
        was renamed to m_isProcessingUserDrivenChange.
        (WebCore::HTMLSelectElement::optionSelectedByUser): Removed deselect argument,
        which was always true for all callers. Updated comment.
        (WebCore::HTMLSelectElement::hasPlaceholderLabelOption): Updated comment.
        (WebCore::HTMLSelectElement::setOption): Call the new optionSelectionStateChanged
        function. The code used to explicitly ask the function it calls to deselect base
        on the value of m_multiple, but that is no longer needed because the selectOption
        function itself takes care of that check.
        (WebCore::HTMLSelectElement::dispatchChangeEventForMenuList): Renamed this function.
        Also updated for name change to m_isProcessingUserDrivenChange.
        (WebCore::HTMLSelectElement::setSelectedIndex): Moved the formerly-inlined function
        here from the header and changed it to call the renamed selectOption function.
        (WebCore::HTMLSelectElement::optionSelectionStateChanged): Added this function.
        It is used by callers that were previously using setSelectedIndex and passing
        "false" for the deselect argument. It's better now that setSelectedIndex is now a
        pure DOM setter function without the multiple purposes it had before. This function
        now has the logic that handles the special handling when deselecting an option,
        which used to be at the top of the next function.
        (WebCore::HTMLSelectElement::selectOption): Renamed this from setSelectedIndex.
        Replaced boolean arguments with flags. Removed code to handle the special case
        when we deselect an option; that's now handled in the optionSelectionStateChanged
        function. Added an assertion to replace a comment and updated for other renaming.
        (WebCore::HTMLSelectElement::dispatchBlurEvent): Updated for name change.
        (WebCore::HTMLSelectElement::platformHandleKeydownEvent): Ditto.
        (WebCore::HTMLSelectElement::menuListDefaultEventHandler): Changed to call the
        new selectOption function and also updated for other name changes.
        (WebCore::HTMLSelectElement::typeAheadFind): Ditto.
        (WebCore::HTMLSelectElement::accessKeySetSelectedIndex): Ditto.

        * html/HTMLSelectElement.h: Changed the setSelectedIndex to be a pure setter
        function for the selectedIndex DOM property. Added a optionSelectedByUser function
        for the other use of setSelectedIndex, but removed the always true "deselect"
        argument from it. Added a optionSelectionStateChanged function for use in the
        HTMLOptionElement implementation. Renamed menuListOnChange to
        dispatchChangeEventForMenuList for clarity. Added a SelectOptionFlag and
        SelectOptionFlags type for the arguments to the selectOption function, formerly
        implemented as an overload of setSelectedIndex (and called setSelectedIndexInternal
        before that). Renamed m_userDrivenChange to m_isProcessingUserDrivenChange.

        * rendering/RenderMenuList.cpp:
        (WebCore::RenderMenuList::valueChanged): Replaced setSelectedIndexByUser
        call with a call to the renamed optionSelectedByUser, also removed one argument.

2011-11-01  Sam Weinig  <sam@webkit.org>

        Implement __lookupGetter__/__lookupSetter__ in terms of getPropertyDescriptor
        https://bugs.webkit.org/show_bug.cgi?id=71336

        Reviewed by Darin Adler.

        * bindings/js/JSDOMWindowCustom.cpp:
        * bindings/js/JSDOMWindowShell.cpp:
        * bindings/js/JSDOMWindowShell.h:
        * page/DOMWindow.idl:
        Remove overrides of lookupGetter/lookupSetter, which are no longer needed
        due to implementing getPropertyDescriptor.


2011-11-01  Nat Duca  <nduca@chromium.org>

        [chromium] Move resource-releasing logic into CCProxy and cleanup setNeedsCommit
        https://bugs.webkit.org/show_bug.cgi?id=71269

        Reviewed by James Robinson.

        * platform/graphics/chromium/cc/CCLayerTreeHost.cpp:
        (WebCore::CCLayerTreeHost::finishCommitOnImplThread):
        (WebCore::CCLayerTreeHost::setZoomAnimatorTransform):
        (WebCore::CCLayerTreeHost::setNeedsCommit):
        (WebCore::CCLayerTreeHost::setViewport):
        (WebCore::CCLayerTreeHost::setVisible):
        * platform/graphics/chromium/cc/CCLayerTreeHost.h:
        * platform/graphics/chromium/cc/CCProxy.h:
        * platform/graphics/chromium/cc/CCSingleThreadProxy.cpp:
        (WebCore::CCSingleThreadProxy::doCommit):
        (WebCore::CCSingleThreadProxy::setNeedsRedraw):
        (WebCore::CCSingleThreadProxy::setVisible):
        (WebCore::CCSingleThreadProxy::recreateContextIfNeeded):
        (WebCore::CCSingleThreadProxy::doComposite):
        * platform/graphics/chromium/cc/CCSingleThreadProxy.h:
        (WebCore::CCSingleThreadProxy::setNeedsRedrawOnImplThread):
        (WebCore::CCSingleThreadProxy::setNeedsCommitOnImplThread):
        * platform/graphics/chromium/cc/CCThreadProxy.cpp:
        (WebCore::CCThreadProxy::setNeedsCommit):
        (WebCore::CCThreadProxy::setNeedsAnimateOnImplThread):
        (WebCore::CCThreadProxy::setVisible):
        * platform/graphics/chromium/cc/CCThreadProxy.h:

2011-11-01  Anna Cavender  <annacc@chromium.org>

        Makes [Reflect] work for constants.
        This is needed to avoid platform-specific define conflicts, specifically
        TextTrack::ERROR conflicts with a windows define.
        https://bugs.webkit.org/show_bug.cgi?id=70951

        Reviewed by Darin Adler.

        Test: media/track/track-constants.html

        * bindings/scripts/CodeGenerator.pm:
        (GenerateCompileTimeCheckForEnumsIfNeeded):
            Check for [Reflect] and assign name accordingly.

        * bindings/scripts/test/CPP/WebDOMTestObj.h:  Update test file.
        * bindings/scripts/test/JS/JSTestObj.cpp:  Update test file.
        (WebCore::jsTestObjCONST_JAVASCRIPT):
        * bindings/scripts/test/JS/JSTestObj.h:  Update test file.
        * bindings/scripts/test/ObjC/DOMTestObj.h:  Update test file.
        * bindings/scripts/test/TestObj.idl:  Update test file.
        * bindings/scripts/test/V8/V8TestObj.cpp:  Update test file.

        * html/LoadableTextTrack.cpp: Use new DOM const name.
        (WebCore::LoadableTextTrack::cueLoadingStarted):
        (WebCore::LoadableTextTrack::cueLoadingCompleted):
        * html/TextTrack.cpp:  Use new DOM const name.
        (WebCore::TextTrack::TextTrack):
        (WebCore::TextTrack::setMode):
        * html/TextTrack.h:  Use new DOM const name.
        * html/TextTrack.idl:  Use Reflect for ERROR, but leave other DOM const names.

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

        Amend missing uses of LayoutUnit in RenderBlock
        https://bugs.webkit.org/show_bug.cgi?id=71254

        Reviewed by Darin Adler.

        Switching relevant uses of integers in RenderBlock to LayoutUnits.

        No new tests -- no changes in behavior.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::MarginInfo::MarginInfo):
        (WebCore::RenderBlock::layoutBlock):
        (WebCore::RenderBlock::adjustFloatingBlock):
        (WebCore::RenderBlock::clearFloatsIfNeeded):
        (WebCore::RenderBlock::layoutBlockChild):
        (WebCore::RenderBlock::paintColumnRules):
        (WebCore::RenderBlock::paintContents):
        (WebCore::clipOutPositionedObjects):
        (WebCore::RenderBlock::removeFloatingObject):
        (WebCore::RenderBlock::nextFloatLogicalBottomBelow):
        (WebCore::RenderBlock::getClearDelta):
        (WebCore::positionForPointRespectingEditingBoundaries):
        (WebCore::RenderBlock::calcColumnWidth):
        (WebCore::RenderBlock::layoutColumns):
        (WebCore::RenderBlock::adjustRectForColumns):
        (WebCore::RenderBlock::computeInlinePreferredLogicalWidths):
        (WebCore::RenderBlock::baselinePosition):
        (WebCore::getHeightForLineCount):
        (WebCore::RenderBlock::setPaginationStrut):
        (WebCore::RenderBlock::applyBeforeBreak):
        (WebCore::RenderBlock::applyAfterBreak):
        (WebCore::RenderBlock::adjustForUnsplittableChild):
        * rendering/RenderBlock.h:
        (WebCore::RenderBlock::availableLogicalWidthForLine):
        (WebCore::RenderBlock::paginationStrut):
        (WebCore::RenderBlock::availableLogicalWidthForContent):
        (WebCore::RenderBlock::FloatWithRect::FloatWithRect):
        (WebCore::RenderBlock::MarginInfo::setPositiveMargin):
        (WebCore::RenderBlock::MarginInfo::setNegativeMargin):
        (WebCore::RenderBlock::MarginInfo::setPositiveMarginIfLarger):
        (WebCore::RenderBlock::MarginInfo::setNegativeMarginIfLarger):
        (WebCore::RenderBlock::MarginInfo::setMargin):
        (WebCore::RenderBlock::FloatIntervalSearchAdapter::FloatIntervalSearchAdapter):
        (WebCore::RenderBlock::FloatIntervalSearchAdapter::lowValue):
        (WebCore::RenderBlock::FloatIntervalSearchAdapter::highValue):
        (WebCore::RenderBlock::RenderBlockRareData::positiveMarginBeforeDefault):
        (WebCore::RenderBlock::RenderBlockRareData::negativeMarginBeforeDefault):
        (WebCore::RenderBlock::RenderBlockRareData::positiveMarginAfterDefault):
        (WebCore::RenderBlock::RenderBlockRareData::negativeMarginAfterDefault):

2011-11-01  Luke Macpherson   <macpherson@chromium.org>

        WIP: Add CSS property to control printing of backgrounds for individual elements.
        https://bugs.webkit.org/show_bug.cgi?id=64583

        Reviewed by Eric Seidel.

        Added test LayoutTests/fast/css/webkit-color-adjust.html,
        Updated tests under LayoutTests/fast/css/getComputedStyle
        Updated test under LayoutTests/svg/css

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):
        * css/CSSPropertyNames.in:
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::styleForDocument):
        (WebCore::CSSStyleSelector::applyProperty):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paintFillLayerExtended):
        * rendering/style/RenderStyle.h:
        (WebCore::InheritedFlags::initialForceBackgroundsToWhite):

2011-11-01  Dominic Cooney  <dominicc@chromium.org>

        Remove initErrorEvent method
        https://bugs.webkit.org/show_bug.cgi?id=71338

        Reviewed by Ojan Vafai.

        * dom/ErrorEvent.cpp: Crush.
        * dom/ErrorEvent.h: Kill.
        * dom/ErrorEvent.idl: Destroy.

2011-11-01  Julien Chaffraix  <jchaffraix@webkit.org>

        Pack RenderTableCell bits
        https://bugs.webkit.org/show_bug.cgi?id=71135

        Reviewed by Darin Adler.

        Tested by RenderTableCellTest unit test.
        (unfortunately Chromium specific...)

        This saves another 8 bytes on RenderTableCell on x86-64.

        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::RenderTableCell):
        * rendering/RenderTableCell.h:
        Changed the field order to use more strict packing.

        (WebCore::RenderTableCell::setCol):
        (WebCore::RenderTableCell::setRow):
        Added overflow checks to the 2 previous methods. We
        CRASH even in release to avoid potential badness
        (the limit is currently above 2 billions rows or columns
        which is high enough to prevent it being hit by accident)

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

        Switch background/border image back to Int
        https://bugs.webkit.org/show_bug.cgi?id=71240

        Reviewed by Darin Adler.

        Switch background- and border-image rendering back to int to align with
        device pixels.

        No new tests.

        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::calculateImageIntrinsicDimensions):
        (WebCore::RenderBoxModelObject::calculateFillTileSize):
        (WebCore::RenderBoxModelObject::BackgroundImageGeometry::useFixedAttachment):
        (WebCore::RenderBoxModelObject::BackgroundImageGeometry::clip):
        (WebCore::RenderBoxModelObject::BackgroundImageGeometry::relativePhase):
        (WebCore::RenderBoxModelObject::calculateBackgroundImageGeometry):
        (WebCore::RenderBoxModelObject::paintNinePieceImage):
        (WebCore::calculateAdjustedInnerBorder):
        * rendering/RenderBoxModelObject.h:
        (WebCore::RenderBoxModelObject::BackgroundImageGeometry::destOrigin):
        (WebCore::RenderBoxModelObject::BackgroundImageGeometry::setDestOrigin):
        (WebCore::RenderBoxModelObject::BackgroundImageGeometry::destRect):
        (WebCore::RenderBoxModelObject::BackgroundImageGeometry::setDestRect):
        (WebCore::RenderBoxModelObject::BackgroundImageGeometry::phase):
        (WebCore::RenderBoxModelObject::BackgroundImageGeometry::setPhase):
        (WebCore::RenderBoxModelObject::BackgroundImageGeometry::tileSize):
        (WebCore::RenderBoxModelObject::BackgroundImageGeometry::setTileSize):

2011-11-01  Mark Hahnenberg  <mhahnenberg@apple.com>

        De-virtualize JSObject::defineSetter
        https://bugs.webkit.org/show_bug.cgi?id=71303

        Reviewed by Darin Adler.

        No new tests.

        Added defineSetter to the MethodTable, changed all the virtual 
        implementations of defineSetter to static ones, and replaced 
        all call sites with corresponding lookups in the MethodTable.

        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::defineSetter):
        * bindings/js/JSDOMWindowShell.cpp:
        (WebCore::JSDOMWindowShell::defineSetter):
        * bindings/js/JSDOMWindowShell.h:
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateHeader):

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

        Switch PopupMenuClient to layout abstraction
        https://bugs.webkit.org/show_bug.cgi?id=71308

        Reviewed by Darin Adler.

        Switch PopupMenuClient and rendering classes implementing it to layout
        type abstraction.

        No new tests.

        * platform/PopupMenuClient.h:
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::listIndexAtOffset):
        (WebCore::RenderListBox::panScroll):
        (WebCore::RenderListBox::scrollToward):
        (WebCore::RenderListBox::scrollSize):
        (WebCore::RenderListBox::scrollPosition):
        (WebCore::RenderListBox::setScrollOffset):
        (WebCore::RenderListBox::verticalScrollbarWidth):
        Revert scroll positions and scroll offsets to ints to align with device
        pixels.
        
        * rendering/RenderListBox.h:
        * rendering/RenderMenuList.cpp:
        (WebCore::RenderMenuList::showPopup):
        (WebCore::RenderMenuList::clientPaddingLeft):
        (WebCore::RenderMenuList::clientPaddingRight):
        * rendering/RenderMenuList.h:
        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::hitInnerTextElement):
        * rendering/RenderTextControlSingleLine.cpp:
        (WebCore::RenderTextControlSingleLine::clientPaddingLeft):
        (WebCore::RenderTextControlSingleLine::clientPaddingRight):
        * rendering/RenderTextControlSingleLine.h:

2011-11-01  Nate Chapin  <japhet@chromium.org>

        [chromium] As of r98380, ThreadableLoaderClients are having their
        ResourceRequest::TargetType clobbered. They set their own
        type, but CachedResourceRequest (through which they now flow)
        sets a TargetType without bothering to see if one has already been set.
        https://bugs.webkit.org/show_bug.cgi?id=70972

        Reviewed by Darin Fisher.

        No new tests, this is chromium-specific and only affects
        behavior seen in full builds of chromium.

        * loader/cache/CachedResourceRequest.cpp:
        (WebCore::CachedResourceRequest::load):Don't setTargetType()
            if the value is something other than the default already.
        * platform/network/chromium/ResourceRequest.h: Change default
            TargetType to TargetIsUnspecified.

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

        Use IntPoint for screen coordinates in MouseEvent
        https://bugs.webkit.org/show_bug.cgi?id=71327

        Reviewed by Darin Adler.

        Change mouse events to use int/IntPoint for screen/window coordinates and
        LayoutUnit/LayoutPoint for coordinates adjusted for zooming.

        No new tests.

        * dom/MouseRelatedEvent.cpp:
        (WebCore::MouseRelatedEvent::MouseRelatedEvent):
        (WebCore::MouseRelatedEvent::computeRelativePosition):
        * dom/MouseRelatedEvent.h:
        (WebCore::MouseRelatedEvent::screenLocation):
        Revert screenLocation and windowLocation back to int.

        * page/DragController.cpp:
        (WebCore::elementUnderMouse):
        Change elementUnderMouse to use a LayoutPoint for hit testing.

        * page/EventHandler.cpp:
        (WebCore::EventHandler::clear):
        (WebCore::EventHandler::currentMousePosition):
        (WebCore::documentPointForWindowPoint):
        (WebCore::EventHandler::fakeMouseMoveEventTimerFired):
        * page/EventHandler.h:
        Revert m_currentMousePosition to IntPoint as it represents a
        screen coordinate.

        * platform/PlatformMouseEvent.h:
        (WebCore::PlatformMouseEvent::PlatformMouseEvent):
        (WebCore::PlatformMouseEvent::pos):
        (WebCore::PlatformMouseEvent::x):
        (WebCore::PlatformMouseEvent::y):
        (WebCore::PlatformMouseEvent::globalX):
        (WebCore::PlatformMouseEvent::globalY):
        * platform/mac/PlatformMouseEventMac.mm:
        (WebCore::globalPoint):
        (WebCore::pointForEvent):
        (WebCore::globalPointForEvent):
        Revert PlatformMouseEvent to int/IntPoint as it represents a screen
        coordinate.

2011-11-01  Tony Chang  <tony@chromium.org>

        REGRESSION: -webkit-flex() should be an invalid value
        https://bugs.webkit.org/show_bug.cgi?id=71320

        Reviewed by Ojan Vafai.

        This regressed in http://trac.webkit.org/changeset/98773 .

        No new tests, covered by css3/flexbox/flex-parsing.html.

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

2011-11-01  David Grogan  <dgrogan@chromium.org>

        IndexedDB: get EventQueue from ScriptExecutionContext instead of Document
        https://bugs.webkit.org/show_bug.cgi?id=71147

        When IDB is used from a worker thread ScriptExecutionContext will
        be a WorkerContext, not a Document.  This was the impetus behind
        moving EventQueue into ScriptExecutionContext in r98656.

        Reviewed by Nate Chapin.

        No new tests. No new functionality yet.

        * storage/IDBDatabase.cpp:
        (WebCore::IDBDatabase::close):
        (WebCore::IDBDatabase::enqueueEvent):
        * storage/IDBRequest.cpp:
        (WebCore::IDBRequest::abort):
        (WebCore::IDBRequest::enqueueEvent):
        * storage/IDBTransaction.cpp:
        (WebCore::IDBTransaction::enqueueEvent):

2011-11-01  Andreas Kling  <kling@webkit.org>

        CSS: Remove unused virtual parseString() in style and keyframe rules.
        https://bugs.webkit.org/show_bug.cgi?id=71300

        Reviewed by Darin Adler.

        * css/CSSStyleRule.cpp:
        * css/CSSStyleRule.h:
        * css/WebKitCSSKeyframeRule.cpp:
        * css/WebKitCSSKeyframeRule.h:

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

        Switch RenderObject to layout abstraction
        https://bugs.webkit.org/show_bug.cgi?id=71249

        Switch RenderObject to LayoutRect/Size/Point abstraction.

        Reviewed by Darin Adler.

        No new tests.

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::drawLineForBoxSide):
        (WebCore::RenderObject::addPDFURLRect):
        (WebCore::RenderObject::absoluteBoundingBoxRect):
        (WebCore::RenderObject::absoluteFocusRingQuads):
        (WebCore::RenderObject::addAbsoluteRectForLayer):
        (WebCore::RenderObject::repaintAfterLayoutIfNeeded):
        (WebCore::RenderObject::computeRectForRepaint):
        (WebCore::RenderObject::viewRect):
        (WebCore::RenderObject::mapLocalToContainer):
        (WebCore::RenderObject::localCaretRect):
        (WebCore::RenderObject::addDashboardRegions):
        (WebCore::RenderObject::maximalOutlineSize):
        (WebCore::RenderObject::adjustRectForOutlineAndShadow):
        * rendering/RenderObject.h:
        (WebCore::RenderObject::absoluteBoundingBoxRectIgnoringTransforms):
        (WebCore::RenderObject::absoluteClippedOverflowRect):
        (WebCore::RenderObject::computeAbsoluteRepaintRect):
        (WebCore::RenderObject::absoluteOutlineBounds):
        (WebCore::RenderObject::outlineBoundsForRepaint):
        (WebCore::adjustForAbsoluteZoom):

2011-11-01  Xiaomei Ji  <xji@chromium.org>

        Refactor: change Scrollable::m_scrollOrigin from protected to private.
        https://bugs.webkit.org/show_bug.cgi?id=71236

        Reviewed by Darin Adler.

        Only refactor, no new tests needed.

        * page/FrameView.cpp:
        (WebCore::FrameView::scrollXForFixedPosition):
        (WebCore::FrameView::scrollYForFixedPosition):
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::maximumScrollPosition):
        (WebCore::ScrollView::minimumScrollPosition):
        (WebCore::ScrollView::setScrollOffset):
        (WebCore::ScrollView::scrollPosition):
        (WebCore::ScrollView::overhangAmount):
        (WebCore::ScrollView::updateScrollbars):
        (WebCore::ScrollView::wheelEvent):
        * platform/ScrollView.h:
        * platform/ScrollableArea.h:
        (WebCore::ScrollableArea::setScrollOrigin):
        (WebCore::ScrollableArea::setScrollOriginX):
        (WebCore::ScrollableArea::setScrollOriginY):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::scrollTo):
        (WebCore::RenderLayer::scrollPosition):
        (WebCore::RenderLayer::minimumScrollPosition):
        (WebCore::RenderLayer::maximumScrollPosition):
        (WebCore::RenderLayer::computeScrollDimensions):
        * rendering/RenderLayer.h:
        (WebCore::RenderLayer::scrollXOffset):
        (WebCore::RenderLayer::scrollYOffset):

2011-11-01  Dominic Cooney  <dominicc@chromium.org>

        display: table-cell and box-sizing: border-box calculates content-box height
        https://bugs.webkit.org/show_bug.cgi?id=69425

        Reviewed by Dan Bernstein.

        Test: fast/box-sizing/table-cell.html

        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::calcRowLogicalHeight):

2011-11-01  Alok Priyadarshi  <alokp@chromium.org>

        [chromium] Add testing for --enable-accelerated-drawing
        https://bugs.webkit.org/show_bug.cgi?id=70822

        Reviewed by James Robinson.

        Test: platform/chromium/compositing/accelerated-drawing/alpha.html

        * WebCore.exp.in:
        * page/Settings.cpp:
        * page/Settings.h:
        (WebCore::Settings::setAcceleratedDrawingEnabled):
        * testing/Internals.cpp:
        (WebCore::Internals::setAcceleratedDrawingEnabled):
        * testing/Internals.h:
        * testing/Internals.idl:

2011-11-01  Tim Horton  <timothy_horton@apple.com>

        SVG Filter on a group doesn't invalidate when children are moved
        https://bugs.webkit.org/show_bug.cgi?id=70044
        <rdar://problem/10281530>

        Reviewed by Nikolas Zimmermann.

        Call SVGResourcesCache::clientLayoutChanged whenever the element or its children need layout. Previously,
        invalidation was only performed if the element itself needed layout; now we also invalidate if any child
        needs layout and there is a filter applied, as the cached filter result can depend on the layout of children.

        Test: svg/filters/invalidate-on-child-layout.svg

        * rendering/svg/RenderSVGContainer.cpp:
        (WebCore::RenderSVGContainer::layout):
        * rendering/svg/SVGResourcesCache.cpp:
        (WebCore::SVGResourcesCache::clientLayoutChanged):

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

        Four media tests failing on Lion due to incorrect cached times.
        https://bugs.webkit.org/show_bug.cgi?id=69574

        Reviewed by Eric Carlson.

        Do not invalidate the cached time when receiving a mediaPlayerRateChanged notification
        while paused. AVFoundation in particular can return different results for currentTime()
        when asked after being paused, breaking layout tests.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::mediaPlayerRateChanged):

2011-11-01  Gavin Peters  <gavinp@chromium.org>

        properly end requests when a bad status code return happens
        https://bugs.webkit.org/show_bug.cgi?id=71122

        Calling error without ending the request set up the CachedResourceRequest so that it could
        actually send out two notifyFinished() events.  This probably was the root cause of
        lots of crashing instability; I know from crbug.com/75604 that this bug was causing lots
        of crashes in ScriptRunner/ScriptElement for instance.

        The fix is easy: just properly end the request instead of just calling error, and we won't
        re-notify.

        Reviewed by Nate Chapin.

        No new tests, as the problem wasn't very amenable to layout tests.
        There is a chromium test going through code review at http://codereview.chromium.org/8404001/

        * loader/cache/CachedResourceRequest.cpp:
        (WebCore::CachedResourceRequest::didReceiveData):

2011-11-01  Erik Arvidsson  <arv@chromium.org>

        Remove LegacyDefaultOptionalArguments flag from CanvasRenderingContext2d
        https://bugs.webkit.org/show_bug.cgi?id=64628

        Reviewed by Adam Barth.

        Covered by existing tests.

        * html/canvas/CanvasRenderingContext2D.idl:

2011-11-01  Julien Chaffraix  <jchaffraix@webkit.org>

        REGRESSION(98738): RenderTableSection::recalcCells does not properly shrink the RowStruct grid
        https://bugs.webkit.org/show_bug.cgi?id=71246

        Reviewed by Darin Adler.

        Tests: fast/table/crash-empty-section-calcBorder.html
               fast/table/crash-empty-section-fixed-layout-calcArray.html

        The refactoring in r98738 changed the way we handle the size to avoid throwing off
        the memory. The new logic would end up never shrinking the grid's size (prior to that
        we would grow to the appropriate size and throw the excess capacity with shrinkToFit).
        Not shrinking would mean that we would potentially read RowStruct with the default values
        (for instance no |rowRenderer|).

        addCell will properly grow the grid as needed to accomodate the rows and the protruding
        cells with a rowspan so we introduce a variable to keep track of the size needed. At the
        end, we just shrink it to this size.

        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::recalcCells):
        Introduce a variable to keep the grid size and shrink to that size to match the old code.

2011-11-01  Andrey Kosyakov  <caseq@chromium.org>

        [Chromium] Some media/video-*.html layout tests occasionally crash on WIN GPU
        https://bugs.webkit.org/show_bug.cgi?id=71277

        Reviewed by Simon Fraser.

        Disabled assert() in hasVisibleDescendant() until callers are fixed.

        * rendering/RenderLayer.h:
        (WebCore::RenderLayer::hasVisibleDescendant):

2011-11-01  Mike Reed  <reed@google.com>

        [skia] call readPixels on canvas instead of device (will be private on device soon) and check for error
        https://bugs.webkit.org/show_bug.cgi?id=71284

        Reviewed by Stephen White.

        No new tests. This is preparing for an API change to Skia.

        * platform/graphics/skia/ImageBufferSkia.cpp:
        (WebCore::getImageData):
        (WebCore::ImageBuffer::getUnmultipliedImageData):
        (WebCore::ImageBuffer::getPremultipliedImageData):

2011-11-01  Andreas Kling  <kling@webkit.org>

        CSSStyleSheet: Operate directly on the rule vector internally.

        Rubber-stamped by Antti Koivisto.

        There's no need to go through the public, range-checking item() method
        working on m_children. Also changed length() -> m_children.size().

        * css/CSSStyleSheet.cpp:
        (WebCore::CSSStyleSheet::~CSSStyleSheet):
        (WebCore::CSSStyleSheet::insertRule):
        (WebCore::CSSStyleSheet::addRule):
        (WebCore::CSSStyleSheet::deleteRule):
        (WebCore::CSSStyleSheet::isLoading):
        (WebCore::CSSStyleSheet::addSubresourceStyleURLs):

2011-11-01  Andreas Kling  <kling@webkit.org>

        CSSRule: Devirtualize addSubresourceStyleURLs()
        https://bugs.webkit.org/show_bug.cgi?id=71285

        Reviewed by Antti Koivisto.

        Move addSubresourceStyleURLs() into the rules that actually implement it.
        Add type checks and casts at the (only) call site.

        * css/CSSFontFaceRule.h:
        * css/CSSImportRule.h:
        * css/CSSRule.h:
        * css/CSSStyleRule.h:
        * css/CSSStyleSheet.cpp:
        (WebCore::CSSStyleSheet::addSubresourceStyleURLs):

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

        AX: some popup buttons not announced by VoiceOver
        https://bugs.webkit.org/show_bug.cgi?id=67743

        Reviewed by Darin Adler.

        Test: platform/mac/accessibility/aria-popup-buttons-on-native-elements.html

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::stringValue):
        (WebCore::AccessibilityRenderObject::title):
        (WebCore::AccessibilityRenderObject::determineAccessibilityRole):

2011-11-01  Alexander Pavlov  <apavlov@chromium.org>

        Web Inspector: [Styles] Style-based CSS properties are editable and toggleable
        https://bugs.webkit.org/show_bug.cgi?id=71275

        Reviewed by Pavel Feldman.

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

2011-11-01  Pavel Feldman  <pfeldman@google.com>

        Web Inspector: do not switch panels on Cmd + ->  while in console.
        https://bugs.webkit.org/show_bug.cgi?id=71281

        Reviewed by Yury Semikhatsky.

        * inspector/front-end/InspectorView.js:
        (WebInspector.InspectorView.prototype._keyDown):

2011-11-01  Zeno Albisser  <zeno.albisser@nokia.com>

        [Qt] bad codegen, pointer diff in JSC::JSCallbackConstructor::JSCallbackConstructor
        https://bugs.webkit.org/show_bug.cgi?id=60951

        Adjust symbols visibility for WebCore.

        Reviewed by Simon Hausmann.

        * WebCore.pro:

2011-11-01  Pavel Feldman  <pfeldman@google.com>

        Not reviewed: add InspectorView.js entry into WebKit.qrc

        * inspector/front-end/WebKit.qrc:

2011-11-01  Pavel Feldman  <pfeldman@google.com>


        Web Inspector: introduce PanelContainer class, start moving panel management from inspector.js to the new class.
        https://bugs.webkit.org/show_bug.cgi?id=71272

        Reviewed by Yury Semikhatsky.

        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * inspector/compile-front-end.sh:
        * inspector/front-end/Drawer.js:
        (WebInspector.Drawer.prototype.show.animationFinished):
        (WebInspector.Drawer.prototype.show):
        (WebInspector.Drawer.prototype.hide):
        (WebInspector.Drawer.prototype._statusBarDragging):
        * inspector/front-end/ElementsPanel.js:
        (WebInspector.ElementsPanel.prototype.switchToAndFocus):
        (WebInspector.ElementsPanel.prototype.revealAndSelectNode):
        * inspector/front-end/ElementsTreeOutline.js:
        (WebInspector.ElementsTreeOutline.prototype.setVisible):
        * inspector/front-end/InspectorView.js: Added.
        (WebInspector.InspectorView):
        (WebInspector.InspectorView.prototype.addPanel):
        (WebInspector.InspectorView.prototype.currentPanel):
        (WebInspector.InspectorView.prototype._keyDown):
        (WebInspector.InspectorView.prototype._canGoBackInHistory):
        (WebInspector.InspectorView.prototype._goBackInHistory):
        (WebInspector.InspectorView.prototype._canGoForwardInHistory):
        (WebInspector.InspectorView.prototype._goForwardInHistory):
        (WebInspector.InspectorView.prototype._pushToHistory):
        * inspector/front-end/KeyboardShortcut.js:
        (WebInspector.KeyboardShortcut.eventHasCtrlOrMeta):
        * inspector/front-end/Panel.js:
        (WebInspector.Panel.prototype.show):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype._toggleBreakpointsClicked):
        * inspector/front-end/SearchController.js:
        (WebInspector.SearchController.prototype.updateSearchMatchesCount):
        (WebInspector.SearchController.prototype.updateCurrentMatchIndex):
        (WebInspector.SearchController.prototype.updateSearchLabel):
        (WebInspector.SearchController.prototype.handleShortcut):
        (WebInspector.SearchController.prototype._performSearch):
        * inspector/front-end/Toolbar.js:
        (WebInspector.Toolbar.createPanelToolbarItem.onToolbarItemClicked):
        (WebInspector.Toolbar.createPanelToolbarItem):
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/externs.js:
        * inspector/front-end/inspector.html:
        * inspector/front-end/inspector.js:
        (WebInspector._createPanels):
        (WebInspector._panelSelected):
        (WebInspector.addPanel):
        (WebInspector.windowResize):
        (WebInspector.documentKeyDown):
        (WebInspector.documentCanCopy):
        (WebInspector.documentCopy):
        (WebInspector.showPanel):
        (WebInspector.startUserInitiatedDebugging):
        (WebInspector.inspect):
        (WebInspector._showAnchorLocationInPanel):
        (WebInspector._toolbarItemClicked):
        * inspector/front-end/treeoutline.js:
        (TreeElement.prototype.select):

2011-11-01  Simon Hausmann  <simon.hausmann@nokia.com>

        [WK2] Add WebGestureEvents to the Qt build and enable PlatformGestureEvent::TapType
        https://bugs.webkit.org/show_bug.cgi?id=71274

        Reviewed by Kenneth Christiansen.

        * features.pri: Enable GESTURE_EVENTS.

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

        Unreviewed, rolling out r98847.
        http://trac.webkit.org/changeset/98847
        https://bugs.webkit.org/show_bug.cgi?id=71268

        "Debugger test failures on multiple platforms" (Requested by
        yurys on #webkit).

        * inspector/front-end/DebuggerPresentationModel.js:
        (WebInspector.DebuggerPresentationModel):
        (WebInspector.DebuggerPresentationModel.prototype._addScript):
        (WebInspector.DebuggerPresentationModel.prototype.uiSourceCodes):
        (WebInspector.DebuggerPresentationModel.prototype.setFormatSource):
        (WebInspector.DebuggerPresentationModel.prototype._consoleCleared):
        (WebInspector.DebuggerPresentationModel.prototype._rawSourceCodeForScriptWithURL):
        (WebInspector.DebuggerPresentationModel.prototype._rawSourceCodeForScript):
        (WebInspector.DebuggerPresentationModel.prototype._scriptForRawSourceCode):
        (WebInspector.DebuggerPresentationModel.prototype._createRawSourceCodeId):
        (WebInspector.DebuggerPresentationModel.prototype._debuggerReset):
        (WebInspector.DebuggerPresentationModel.Linkifier.prototype.reset):
        * inspector/front-end/RawSourceCode.js:
        (WebInspector.RawSourceCode.prototype._createSourceMapping.didRequestContent.didFormatContent):
        (WebInspector.RawSourceCode.prototype._createSourceMapping.didRequestContent):
        (WebInspector.RawSourceCode.prototype._createSourceMapping):
        * inspector/front-end/Script.js:
        (WebInspector.Script.prototype.editSource):

2011-10-30  Filip Pizlo  <fpizlo@apple.com>

        The GC should be parallel
        https://bugs.webkit.org/show_bug.cgi?id=70995

        Reviewed by Geoff Garen.
        
        Added parallel tracing to the GC. This required loosening some assertions,
        since some code may now be called from outside the main thread.

        No new tests, since no behavior was changed.

        * platform/TreeShared.h:
        (WebCore::TreeShared::parent):

2011-10-31  Andy Estes  <aestes@apple.com>

        Document pointer not null-checked in FrameView::isOnActivePage()
        https://bugs.webkit.org/show_bug.cgi?id=71265
        <rdar://problem/10374427>

        Reviewed by Dan Bernstein.

        Return false in FrameView::isOnActivePage() if m_frame->document() is
        null. Other calls to m_frame->document() in FrameView also have a null
        check. The frame can have a null document if the FrameLoader is loading
        the initial empty document.

        No test possible without triggering assertions in debug builds. This is
        tracked by <http://webkit.org/b/71264>.

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

2011-10-31  Jeremy Apthorp  <jeremya@google.com>

        Fix a crash relating to anonymous block merging in
        RenderFullScreen::unwrapRenderer.
        https://bugs.webkit.org/show_bug.cgi?id=70705

        Reviewed by Simon Fraser.

        Test: fullscreen/anonymous-block-merge-crash.html

        * rendering/RenderFullScreen.cpp:
        (RenderFullScreen::unwrapRenderer):

2011-10-31  Dave Michael  <dmichael@chromium.org>

        V8MessageEvent::dataAccessorGetter does not return a reference to its caller
        https://bugs.webkit.org/show_bug.cgi?id=71229

        Reviewed by Adam Barth.

        Test: fast/events/dispatch-message-string-data.html

        * bindings/v8/custom/V8MessageEventCustom.cpp:
        (WebCore::V8MessageEvent::dataAccessorGetter):

2011-10-31  Renata Hodovan  <reni@webkit.org>

        [Qt] Build fix after r98853.

        Rubber-stamped by Andreas Kling.

        * xml/XSLImportRule.cpp:
        * xml/XSLImportRule.h:
        (WebCore::XSLImportRule::parentStyleSheet):

2011-10-31  Mark Hahnenberg  <mhahnenberg@apple.com>

        De-virtualize JSObject::defaultValue
        https://bugs.webkit.org/show_bug.cgi?id=71146

        Reviewed by Sam Weinig.

        No new tests.

        Added defaultValue to the MethodTable.  Replaced all virtual versions of 
        defaultValue with static versions.  Replaced all call sites with lookups in the 
        MethodTable.

        * WebCore.exp.in:
        * bridge/objc/objc_runtime.h:
        * bridge/objc/objc_runtime.mm:
        (JSC::Bindings::ObjcFallbackObjectImp::defaultValue):
        * bridge/runtime_object.cpp:
        (JSC::Bindings::RuntimeObject::defaultValue):
        * bridge/runtime_object.h:

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

        Switch RoundedRect back to integers
        https://bugs.webkit.org/show_bug.cgi?id=71238

        Reviewed by Darin Adler.

        Changing RoundedRect back to ints from LayoutUnits. As further testing has shown, this graphics-
        focused class should maintain values aligned to pixel boundaries, and therefor kept as integers.

        No new tests -- no change in behavior.

        * platform/graphics/RoundedRect.cpp:
        (WebCore::RoundedRect::Radii::scale):
        (WebCore::RoundedRect::Radii::expand):
        (WebCore::RoundedRect::inflateWithRadii):
        (WebCore::RoundedRect::Radii::excludeLogicalEdges):
        (WebCore::RoundedRect::RoundedRect):
        * platform/graphics/RoundedRect.h:
        (WebCore::RoundedRect::Radii::Radii):
        (WebCore::RoundedRect::Radii::setTopLeft):
        (WebCore::RoundedRect::Radii::setTopRight):
        (WebCore::RoundedRect::Radii::setBottomLeft):
        (WebCore::RoundedRect::Radii::setBottomRight):
        (WebCore::RoundedRect::Radii::topLeft):
        (WebCore::RoundedRect::Radii::topRight):
        (WebCore::RoundedRect::Radii::bottomLeft):
        (WebCore::RoundedRect::Radii::bottomRight):
        (WebCore::RoundedRect::Radii::expand):
        (WebCore::RoundedRect::Radii::shrink):
        (WebCore::RoundedRect::rect):
        (WebCore::RoundedRect::setRect):
        (WebCore::RoundedRect::move):
        (WebCore::RoundedRect::inflate):
        (WebCore::RoundedRect::expandRadii):
        (WebCore::RoundedRect::shrinkRadii):
        * rendering/svg/SVGRenderSupport.h: Adding missing LayoutTypes.h include

2011-10-31  Peter Kasting  <pkasting@google.com>

        https://bugs.webkit.org/show_bug.cgi?id=70666
        BitmapImage::dataChanged() needs to clear all incomplete frames.

        Reviewed by James Robinson.

        No tests, as I don't know of a way to send an image to the renderer in
        small pieces (with script run between pieces no less).

        * platform/graphics/BitmapImage.cpp:
        (WebCore::BitmapImage::dataChanged):

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

        Amend missing uses of LayoutUnits in RenderApplet, Button, and DeprecatedFlexibleBox
        https://bugs.webkit.org/show_bug.cgi?id=71243

        Reviewed by Eric Seidel.

        Replacing remaining integer uses with LayoutUnits in the aforementioned classes.

        No new tests -- no change in behavior.

        * rendering/RenderApplet.cpp:
        (WebCore::RenderApplet::intrinsicSize):
        (WebCore::RenderApplet::createWidgetIfNecessary):
        * rendering/RenderApplet.h:
        * rendering/RenderButton.cpp:
        (WebCore::RenderButton::controlClipRect):
        * rendering/RenderButton.h:
        * rendering/RenderDeprecatedFlexibleBox.cpp:
        (WebCore::marginWidthForChild):
        (WebCore::RenderDeprecatedFlexibleBox::computePreferredLogicalWidths):
        (WebCore::RenderDeprecatedFlexibleBox::layoutBlock):
        (WebCore::RenderDeprecatedFlexibleBox::layoutHorizontalBox):
        (WebCore::RenderDeprecatedFlexibleBox::applyLineClamp):
        * rendering/RenderDeprecatedFlexibleBox.h:

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

        [Chromium] Media Stream API: add the Chromium WebKit interfaces
        https://bugs.webkit.org/show_bug.cgi?id=58550

        Changes the PeerHandler platform interface so that embedders can more easily use it.

        Reviewed by Darin Fisher.

        * GNUmakefile.am:
        * GNUmakefile.list.am:
        * WebCore.gyp/WebCore.gyp:
        * WebCore.gypi:
        * mediastream/PeerConnection.cpp:
        (WebCore::PeerConnection::PeerConnection):
        (WebCore::PeerConnection::didCompleteICEProcessing):
        (WebCore::PeerConnection::didGenerateSDP):
        (WebCore::PeerConnection::didReceiveDataStreamMessage):
        (WebCore::PeerConnection::didAddRemoteStream):
        (WebCore::PeerConnection::didRemoveRemoteStream):
        * mediastream/PeerConnection.h:
        * platform/mediastream/PeerConnectionHandlerClient.h: Copied from Source/WebCore/platform/mediastream/PeerHandler.cpp.
        (WebCore::PeerConnectionHandlerClient::~PeerConnectionHandlerClient):
        * platform/mediastream/chromium/PeerConnectionHandler.h: Copied from Source/WebCore/platform/mediastream/PeerHandler.h.
        * platform/mediastream/gstreamer/PeerConnectionHandler.cpp: Copied from Source/WebCore/platform/mediastream/PeerHandler.cpp.
        (WebCore::PeerConnectionHandler::create):
        (WebCore::PeerConnectionHandler::PeerConnectionHandler):
        (WebCore::PeerConnectionHandler::~PeerConnectionHandler):
        (WebCore::PeerConnectionHandler::produceInitialOffer):
        (WebCore::PeerConnectionHandler::handleInitialOffer):
        (WebCore::PeerConnectionHandler::processSDP):
        (WebCore::PeerConnectionHandler::processPendingStreams):
        (WebCore::PeerConnectionHandler::sendDataStreamMessage):
        (WebCore::PeerConnectionHandler::stop):
        * platform/mediastream/gstreamer/PeerConnectionHandler.h: Renamed from Source/WebCore/platform/mediastream/PeerHandler.h.

        Tests for the Media Stream API will be provided by the bug 56587, pending enough landed code.

2011-10-31  Adam Roben  <aroben@apple.com>

        Fix linker warnings on Windows

        * WebCore.vcproj/WebCore.vcproj: Exclude SpellingCorrectionCommand.cpp and
        JSRequestAnimationFrameCallback.cpp from all configurations. They are already getting
        compiled via *AllInOne.cpp files.

2011-10-31  Jonathon Jongsma  <jonathon.jongsma@collabora.co.uk>

        [GStreamer] Don't use GOwnPtr for ref-counted objects
        https://bugs.webkit.org/show_bug.cgi?id=71042

        Reviewed by Martin Robinson.

        * CMakeListsEfl.txt:
        * GNUmakefile.list.am:
        * WebCore.gypi:
        * WebCore.pro:
        * platform/graphics/gstreamer/GOwnPtrGStreamer.cpp: Removed.
        * platform/graphics/gstreamer/GOwnPtrGStreamer.h: Removed.
        * platform/graphics/gstreamer/GStreamerGWorld.cpp:
        (WebCore::GStreamerGWorld::enterFullscreen):
        (WebCore::GStreamerGWorld::exitFullscreen):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::updateAudioSink):
        (WebCore::MediaPlayerPrivateGStreamer::sourceChanged):

2011-10-28  Nat Duca  <nduca@chromium.org>

        [chromium] Connect CCThreadProxy to FrameRateController and SchedulerStateMachine via CCScheduler
        https://bugs.webkit.org/show_bug.cgi?id=71100

        Reviewed by James Robinson.

        * platform/graphics/chromium/cc/CCDelayBasedTimeSource.h:
        (WebCore::CCDelayBasedTimeSource::monotonicallyIncreasingTime):
        * platform/graphics/chromium/cc/CCLayerTreeHost.h:
        (WebCore::CCLayerTreeHostClient::didCommitAndDrawFrame):
        (WebCore::CCLayerTreeHost::didCommitAndDrawFrame):
        * platform/graphics/chromium/cc/CCScheduler.cpp:
        (WebCore::CCSchedulerFrameRateControllerClientAdapter::create):
        (WebCore::CCSchedulerFrameRateControllerClientAdapter::~CCSchedulerFrameRateControllerClientAdapter):
        (WebCore::CCSchedulerFrameRateControllerClientAdapter::beginFrame):
        (WebCore::CCSchedulerFrameRateControllerClientAdapter::CCSchedulerFrameRateControllerClientAdapter):
        (WebCore::CCScheduler::CCScheduler):
        (WebCore::CCScheduler::~CCScheduler):
        (WebCore::CCScheduler::setNeedsAnimate):
        (WebCore::CCScheduler::setNeedsCommit):
        (WebCore::CCScheduler::setNeedsRedraw):
        (WebCore::CCScheduler::beginFrameComplete):
        (WebCore::CCScheduler::didSwapBuffersComplete):
        (WebCore::CCScheduler::didSwapBuffersAbort):
        (WebCore::CCScheduler::onBeginFrame):
        (WebCore::CCScheduler::processScheduledActions):
        * platform/graphics/chromium/cc/CCScheduler.h:
        (WebCore::CCScheduler::create):
        (WebCore::CCScheduler::commitPending):
        (WebCore::CCScheduler::redrawPending):
        * platform/graphics/chromium/cc/CCSchedulerStateMachine.cpp:
        (WebCore::CCSchedulerStateMachine::CCSchedulerStateMachine):
        (WebCore::CCSchedulerStateMachine::nextAction):
        (WebCore::CCSchedulerStateMachine::updateState):
        (WebCore::CCSchedulerStateMachine::beginUpdateMoreResourcesComplete):
        * platform/graphics/chromium/cc/CCSchedulerStateMachine.h:
        (WebCore::CCSchedulerStateMachine::redrawPending):
        * platform/graphics/chromium/cc/CCSingleThreadProxy.cpp:
        (WebCore::CCSingleThreadProxy::CCSingleThreadProxy):
        (WebCore::CCSingleThreadProxy::doCommit):
        (WebCore::CCSingleThreadProxy::doComposite):
        * platform/graphics/chromium/cc/CCSingleThreadProxy.h:
        * platform/graphics/chromium/cc/CCTextureUpdater.cpp:
        (WebCore::CCTextureUpdater::hasMoreUpdates):
        * platform/graphics/chromium/cc/CCTextureUpdater.h:
        * platform/graphics/chromium/cc/CCThreadProxy.cpp:
        (WebCore::CCThreadProxy::CCThreadProxy):
        (WebCore::CCThreadProxy::compositeAndReadback):
        (WebCore::CCThreadProxy::requestReadbackOnImplThread):
        (WebCore::CCThreadProxy::setNeedsAnimateOnImplThread):
        (WebCore::CCThreadProxy::setNeedsCommitOnImplThread):
        (WebCore::CCThreadProxy::setNeedsRedrawOnImplThread):
        (WebCore::CCThreadProxy::finishAllRenderingOnImplThread):
        (WebCore::CCThreadProxy::scheduledActionBeginFrame):
        (WebCore::CCThreadProxy::beginFrameAndCommit):
        (WebCore::CCThreadProxy::beginFrameCompleteOnImplThread):
        (WebCore::CCThreadProxy::hasMoreResourceUpdates):
        (WebCore::CCThreadProxy::scheduledActionUpdateMoreResources):
        (WebCore::CCThreadProxy::scheduledActionCommit):
        (WebCore::CCThreadProxy::drawLayersAndSwapOnImplThread):
        (WebCore::CCThreadProxy::didCommitAndDrawFrame):
        (WebCore::CCThreadProxy::initializeImplOnImplThread):
        (WebCore::CCThreadProxy::layerTreeHostClosedOnImplThread):
        (WebCore::CCThreadProxy::scheduledActionDrawAndSwap):
        * platform/graphics/chromium/cc/CCThreadProxy.h:

2011-10-31  Nate Chapin  <japhet@chromium.org>

        Rename the remaining uses of Cue in WebCore/loader/
        to TextTrack.
        https://bugs.webkit.org/show_bug.cgi?id=71231

        Reviewed by Eric Carlson.

        No new tests, strictly a renaming.

        * loader/TextTrackLoader.cpp:
        * loader/cache/CachedResource.cpp:
        * loader/cache/CachedResource.h:
        * loader/cache/CachedResourceLoader.cpp:
        * loader/cache/CachedResourceLoader.h:
        * loader/cache/CachedResourceRequest.cpp:
        * loader/cache/CachedTextTrack.cpp:
        * platform/network/chromium/ResourceRequest.h:

2011-10-27  Adam Klein  <adamk@chromium.org>

        [MutationObservers] Support characterDataOldValue for characterData mutations
        https://bugs.webkit.org/show_bug.cgi?id=70862

        Reviewed by Ojan Vafai.

        * dom/CharacterData.cpp:
        (WebCore::hasOldValue):
        (WebCore::isOldValueRequested):
        (WebCore::CharacterData::dispatchModifiedEvent):
        * dom/MutationRecord.cpp:
        (WebCore::MutationRecord::createCharacterData):
        * dom/MutationRecord.h:

2011-10-31  Sam Weinig  <sam@webkit.org>

        Remove need for virtual JSObject::unwrappedObject
        https://bugs.webkit.org/show_bug.cgi?id=71034

        Reviewed by Geoffrey Garen.

        Move the member containing the global object from the JSDOMWindowShell
        down to the JSGlobalThis class, and update JSDOMWindowShell to go through
        an inline helper (which just casts) to get the window.

        * bindings/js/JSDOMWindowShell.cpp:
        (WebCore::JSDOMWindowShell::setWindow):
        (WebCore::JSDOMWindowShell::className):
        (WebCore::JSDOMWindowShell::getOwnPropertySlot):
        (WebCore::JSDOMWindowShell::getOwnPropertyDescriptor):
        (WebCore::JSDOMWindowShell::put):
        (WebCore::JSDOMWindowShell::putWithAttributes):
        (WebCore::JSDOMWindowShell::defineOwnProperty):
        (WebCore::JSDOMWindowShell::deleteProperty):
        (WebCore::JSDOMWindowShell::getPropertyNames):
        (WebCore::JSDOMWindowShell::getOwnPropertyNames):
        (WebCore::JSDOMWindowShell::defineGetter):
        (WebCore::JSDOMWindowShell::defineSetter):
        (WebCore::JSDOMWindowShell::lookupGetter):
        (WebCore::JSDOMWindowShell::lookupSetter):
        (WebCore::JSDOMWindowShell::impl):
        * bindings/js/JSDOMWindowShell.h:
        (WebCore::JSDOMWindowShell::window):
        (WebCore::JSDOMWindowShell::setWindow):
        (WebCore::JSDOMWindowShell::createStructure):

2011-10-29  Ryosuke Niwa  <rniwa@webkit.org>

        WebKit nests pre on copy and paste when the pre is the root editable element
        https://bugs.webkit.org/show_bug.cgi?id=70800

        Reviewed by Darin Adler.

        Fixed the bug by removing nested block elements in removeRedundantStylesAndKeepStyleSpanInline.

        Tests: editing/pasteboard/contenteditable-pre-2.html
               editing/pasteboard/contenteditable-pre.html

        * editing/ApplyStyleCommand.cpp:
        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::removeRedundantStylesAndKeepStyleSpanInline): Remove block
        elements if it's identical to its parent and there are no contents between the two. Also remove
        contenteditable attribute from an element if the parent is already richly editable.
        (WebCore::ReplaceSelectionCommand::doApply): Remove redundant styles after removing the placeholder
        br so that the above check doesn't get affected by the placeholder.
        * editing/htmlediting.cpp:
        (WebCore::areIdenticalElements): Moved from ApplyStyleCommand.
        (WebCore::isNonTableCellHTMLBlockElement): Moved from markup.cpp.
        * editing/htmlediting.h:
        * editing/markup.cpp:

2011-10-31  Vineet Chaudhary  <vineet.chaudhary@motorola.com>

        text/plain form encoding ignored and incorrectly specified in request header.
        https://bugs.webkit.org/show_bug.cgi?id=20795

        Reviewed by Darin Adler.

        This patch fixes the behaviour of forms where enctype is set to
        text/plain, encoding is also text/plain.

        Tests: fast/forms/form-get-textplain.html
               http/tests/misc/form-post-textplain.html

        * loader/FormSubmission.cpp:
        (WebCore::FormSubmission::create):
        * platform/network/FormData.cpp:
        (WebCore::FormData::create):
        (WebCore::FormData::appendKeyValuePairItems):
        * platform/network/FormData.h:
        (WebCore::FormData::parseEncodingType):
        * platform/network/FormDataBuilder.cpp:
        (WebCore::FormDataBuilder::addKeyValuePairAsFormData): Modified encoding scheme for text/plain.
        * platform/network/FormDataBuilder.h:

2011-10-31  John Gregg  <johnnyg@google.com>

        RenderImage.cpp calls SVGImage even if it's not defined
        https://bugs.webkit.org/show_bug.cgi?id=71247

        This fixes a compile error when ENABLE_SVG=0.

        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::embeddedContentBox):

2011-10-31  Pavel Podivilov  <podivilov@chromium.org>

        Update XMLHttpRequest.send idl declaration to match implementation.
        https://bugs.webkit.org/show_bug.cgi?id=71121

        Reviewed by Adam Barth.

        * xml/XMLHttpRequest.idl:

2011-10-31  Anders Carlsson  <andersca@apple.com>

        More work on making plug-ins work better with transforms
        https://bugs.webkit.org/show_bug.cgi?id=71241

        Reviewed by Darin Adler.

        Export symbols used by WebKit2.

        * WebCore.exp.in:

2011-10-31  Mark Hahnenberg  <mhahnenberg@apple.com>

        De-virtualize JSObject::defineGetter
        https://bugs.webkit.org/show_bug.cgi?id=71134

        Reviewed by Darin Adler.

        No new tests.

        Added defineGetter to the MethodTable.  Replaced all virtual versions of defineGetter
        with static versions.  Replaced all call sites with lookups in the MethodTable.

        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::defineGetter):
        * bindings/js/JSDOMWindowShell.cpp:
        (WebCore::JSDOMWindowShell::defineGetter):
        * bindings/js/JSDOMWindowShell.h:
        * bindings/js/JSLocationCustom.cpp:
        (WebCore::JSLocation::defineGetter):
        (WebCore::JSLocationPrototype::defineGetter):
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateHeader):

2011-10-31  Arko Saha  <arko@motorola.com>

        Microdata: Support for itemid attribute.
        https://bugs.webkit.org/show_bug.cgi?id=71007

        Reviewed by Ryosuke Niwa.

        itemid attribute: To give a global identifier for the Microdata items.
        The itemid attribute, if specified, must have a value that is a valid URL potentially
        surrounded by spaces.
        Spec: http://www.whatwg.org/specs/web-apps/current-work/multipage/microdata.html#attr-itemid

        Tests: fast/dom/MicroData/itemid-attribute-test.html
               fast/dom/MicroData/itemid-must-see-resolved-url.html

        * html/HTMLElement.idl:

2011-10-31  Yury Semikhatsky  <yurys@chromium.org>

        window.onerror doesn't work with inline (attribute) scripts
        https://bugs.webkit.org/show_bug.cgi?id=70991

        Uncaught syntax errors in inline event handlers are now reported to
        window.onerror handler.

        Reviewed by Geoffrey Garen.

        Tests: fast/events/window-onerror-exception-in-attr.html
               fast/events/window-onerror-syntax-error-in-attr.html

        * bindings/js/JSLazyEventListener.cpp:
        (WebCore::JSLazyEventListener::initializeJSFunction): report exception as usual
        if it happens during event handler compilation.

2011-10-31  Emil A Eklund  <eae@chromium.org>

        Overridden LayoutRect method still uses IntRects
        https://bugs.webkit.org/show_bug.cgi?id=71166

        Reviewed by Eric Seidel.

        Change all virtual controlClipRect, windowResizerRect, windowClipRect,
        visibleContentRect, scrollCornerRect, outlineBoundsForRepaint and
        localCaretRect functions to have the same signature.

        * page/FrameView.cpp:
        (WebCore::FrameView::windowClipRect):
        (WebCore::FrameView::windowClipRectForLayer):
        (WebCore::FrameView::windowResizerRect):
        * page/FrameView.h:
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::wheelEvent):
        * platform/ScrollView.h:
        * platform/ScrollableArea.h:
        * rendering/RenderButton.h:
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::visibleContentRect):
        * rendering/RenderLayer.h:
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::localCaretRect):
        * rendering/RenderObject.h:
        (WebCore::RenderObject::outlineBoundsForRepaint):
        * rendering/RenderText.cpp:
        (WebCore::RenderText::localCaretRect):
        (WebCore::RenderText::linesBoundingBox):
        * rendering/RenderText.h:
        * rendering/svg/RenderSVGInlineText.cpp:
        (WebCore::RenderSVGInlineText::localCaretRect):
        * rendering/svg/RenderSVGInlineText.h:

2011-10-31  Dmitry Lomov  <dslomov@google.com>

        https://bugs.webkit.org/show_bug.cgi?id=70658
        [JSC] Implement MessagePort transfer in JSC bindings implementation of webkitPostMessage.
        Transfer of MessagePorts implemented.

        Reviewed by David Levin.

        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::CloneSerializer::serialize):
        (WebCore::CloneSerializer::CloneSerializer):
        (WebCore::CloneSerializer::dumpIfTerminal):
        (WebCore::CloneDeserializer::deserialize):
        (WebCore::CloneDeserializer::CloneDeserializer):
        (WebCore::CloneDeserializer::readTerminal):
        (WebCore::SerializedScriptValue::create):
        (WebCore::SerializedScriptValue::deserialize):

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

        CSSRule: Devirtualize insertedIntoParent()
        https://bugs.webkit.org/show_bug.cgi?id=71223

        Reviewed by Antti Koivisto.

        Moved insertedIntoParent() down into CSSImportRule and renamed it to
        requestStyleSheet(). CSSImportRule is the only user of this function.

        * css/CSSImportRule.cpp:
        (WebCore::CSSImportRule::requestStyleSheet):
        * css/CSSImportRule.h:
        * css/CSSRule.h:
        * css/CSSStyleSheet.cpp:
        (WebCore::CSSStyleSheet::append):
        (WebCore::CSSStyleSheet::insertRule):

2011-10-31  Anna Cavender  <annacc@chromium.org>

        Implement load notification and events for <track>.
        https://bugs.webkit.org/show_bug.cgi?id=71054

        Reviewed by Eric Carlson.

        Tests: media/track/track-load-error-readyState.html
               media/track/track-load-from-element-readyState.html
               media/track/track-load-from-src-readyState.html

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::trackWasAdded):
        (WebCore::HTMLMediaElement::trackWillBeRemoved):
        (WebCore::HTMLMediaElement::trackSourceChanged):
        * html/HTMLMediaElement.h:
        * html/HTMLTrackElement.cpp:
        (WebCore::HTMLTrackElement::insertedIntoTree):
        (WebCore::HTMLTrackElement::willRemove):
        (WebCore::HTMLTrackElement::parseMappedAttribute):
        (WebCore::HTMLTrackElement::attributeChanged):
        * html/HTMLTrackElement.h:
        * html/LoadableTextTrack.cpp:
        (WebCore::LoadableTextTrack::cueLoadingCompleted):

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

        CSSRule: Devirtualize type() and isFooRule()
        https://bugs.webkit.org/show_bug.cgi?id=71221

        Reviewed by Antti Koivisto.

        Store the rule type in a CSSRule member (packed with the parent-is-rule flag)
        and let the isFooRule() functions return type() == FOO_TYPE.

        CSSPageRule will no longer return true for isStyleRule(), tweaked call sites
        accordingly.

        * css/CSSCharsetRule.cpp:
        (WebCore::CSSCharsetRule::CSSCharsetRule):
        * css/CSSCharsetRule.h:
        * css/CSSFontFaceRule.cpp:
        (WebCore::CSSFontFaceRule::CSSFontFaceRule):
        * css/CSSFontFaceRule.h:
        * css/CSSImportRule.cpp:
        (WebCore::CSSImportRule::CSSImportRule):
        * css/CSSImportRule.h:
        * css/CSSMediaRule.cpp:
        (WebCore::CSSMediaRule::CSSMediaRule):
        * css/CSSMediaRule.h:
        * css/CSSPageRule.cpp:
        (WebCore::CSSPageRule::CSSPageRule):
        * css/CSSPageRule.h:
        * css/CSSRegionStyleRule.cpp:
        (WebCore::CSSRegionStyleRule::CSSRegionStyleRule):
        * css/CSSRegionStyleRule.h:
        * css/CSSRule.h:
        (WebCore::CSSRule::type):
        (WebCore::CSSRule::isCharsetRule):
        (WebCore::CSSRule::isFontFaceRule):
        (WebCore::CSSRule::isKeyframeRule):
        (WebCore::CSSRule::isKeyframesRule):
        (WebCore::CSSRule::isMediaRule):
        (WebCore::CSSRule::isPageRule):
        (WebCore::CSSRule::isStyleRule):
        (WebCore::CSSRule::isRegionStyleRule):
        (WebCore::CSSRule::isImportRule):
        (WebCore::CSSRule::CSSRule):
        * css/CSSStyleRule.cpp:
        (WebCore::CSSStyleRule::CSSStyleRule):
        * css/CSSStyleRule.h:
        * css/CSSStyleSelector.cpp:
        (WebCore::RuleSet::addPageRule):
        (WebCore::RuleSet::addRulesFromSheet):
        (WebCore::RuleSet::addStyleRule):
        * css/CSSUnknownRule.h:
        (WebCore::CSSUnknownRule::CSSUnknownRule):
        * css/WebKitCSSKeyframeRule.cpp:
        (WebCore::WebKitCSSKeyframeRule::WebKitCSSKeyframeRule):
        * css/WebKitCSSKeyframeRule.h:
        * css/WebKitCSSKeyframesRule.cpp:
        (WebCore::WebKitCSSKeyframesRule::WebKitCSSKeyframesRule):
        * css/WebKitCSSKeyframesRule.h:
        * inspector/InspectorCSSAgent.cpp:
        (WebCore::InspectorCSSAgent::asCSSStyleRule):

2011-10-31  Pavel Feldman  <pfeldman@google.com>

        Not reviewed: reorder inspector js files to fix remote mode.

        * inspector/front-end/inspector.html:

2011-10-28  Alexander Pavlov  <apavlov@chromium.org>

        Web Inspector: [refactoring] TextPrompt: ensure encapsulation, extract history management
        https://bugs.webkit.org/show_bug.cgi?id=70936

        Reviewed by Pavel Feldman.

        * inspector/front-end/ConsoleView.js:
        (WebInspector.ConsoleView):
        * inspector/front-end/DatabaseQueryView.js:
        (WebInspector.DatabaseQueryView):
        (WebInspector.DatabaseQueryView.prototype._enterKeyPressed):
        * inspector/front-end/StylesSidebarPane.js:
        (WebInspector.StylesSidebarPane.prototype._attributesModified):
        (WebInspector.StylePropertyTreeElement.prototype.selectElement):
        (WebInspector.StylePropertyTreeElement.prototype.selectElement.context):
        (WebInspector.StylePropertyTreeElement.prototype.selectElement.event):
        (WebInspector.StylePropertyTreeElement.prototype):
        (WebInspector.StylePropertyTreeElement.prototype.context.event):
        ():
        * inspector/front-end/TextPrompt.js:
        (WebInspector.TextPrompt):
        (WebInspector.TextPrompt.prototype.get proxyElement):
        (WebInspector.TextPrompt.prototype.attach):
        (WebInspector.TextPrompt.prototype.attachAndStartEditing):
        (WebInspector.TextPrompt.prototype._attachInternal):
        (WebInspector.TextPrompt.prototype.detach):
        (WebInspector.TextPrompt.prototype.get text):
        (WebInspector.TextPrompt.prototype.set text):
        (WebInspector.TextPrompt.prototype._removeFromElement):
        (WebInspector.TextPrompt.prototype._startEditing):
        (WebInspector.TextPrompt.prototype._stopEditing):
        (WebInspector.TextPrompt.prototype._selectStart.moveBackIfOutside):
        (WebInspector.TextPrompt.prototype._selectStart):
        (WebInspector.TextPrompt.prototype.defaultKeyHandler):
        (WebInspector.TextPrompt.prototype._onKeyDown):
        (WebInspector.TextPrompt.prototype.clearAutoComplete):
        (WebInspector.TextPrompt.prototype.complete):
        (WebInspector.TextPrompt.prototype._completionsReady):
        (WebInspector.TextPrompt.prototype.isCaretInsidePrompt):
        (WebInspector.TextPrompt.prototype.isCaretAtEndOfPrompt):
        (WebInspector.TextPrompt.prototype.isCaretOnFirstLine):
        (WebInspector.TextPrompt.prototype.isCaretOnLastLine):
        (WebInspector.TextPrompt.prototype.moveCaretToEndOfPrompt):
        (WebInspector.TextPrompt.prototype.upKeyPressed):
        (WebInspector.TextPrompt.prototype.downKeyPressed):
        (WebInspector.TextPrompt.prototype.tabKeyPressed):
        (WebInspector.TextPromptConfig):
        (WebInspector.TextPromptWithHistory):
        (WebInspector.TextPromptWithHistory.prototype.get historyData):
        (WebInspector.TextPromptWithHistory.prototype.setHistoryData):
        (WebInspector.TextPromptWithHistory.prototype.pushHistoryItem):
        (WebInspector.TextPromptWithHistory.prototype._pushCurrentText):
        (WebInspector.TextPromptWithHistory.prototype._previous):
        (WebInspector.TextPromptWithHistory.prototype._next):
        (WebInspector.TextPromptWithHistory.prototype._currentHistoryItem):
        (WebInspector.TextPromptWithHistory.prototype.defaultKeyHandler):

2011-10-31  Pavel Feldman  <pfeldman@google.com>

        Web Inspector: move localization support into UIUtil.js, reduce externs.
        https://bugs.webkit.org/show_bug.cgi?id=71220

        Reviewed by Yury Semikhatsky.

        * inspector/compile-front-end.sh:
        * inspector/front-end/AdvancedSearchController.js:
        (WebInspector.SearchView.prototype.focus):
        * inspector/front-end/ConsoleView.js:
        (WebInspector.ConsoleView.prototype.afterShow):
        * inspector/front-end/Drawer.js:
        * inspector/front-end/GoToLineDialog.js:
        (WebInspector.GoToLineDialog.prototype._hide):
        * inspector/front-end/HelpScreen.js:
        (WebInspector.HelpScreen.prototype.show):
        (WebInspector.HelpScreen.prototype.hide):
        (WebInspector.HelpScreen.prototype._onBlur):
        * inspector/front-end/InspectorFrontendHostStub.js:
        * inspector/front-end/KeyboardShortcut.js:
        (WebInspector.KeyboardShortcut._keyName):
        * inspector/front-end/Panel.js:
        (WebInspector.Panel.prototype.wasShown):
        * inspector/front-end/SearchController.js:
        (WebInspector.SearchController.prototype._onSearchFieldManualFocus):
        (WebInspector.SearchController.prototype._onKeyDown):
        * inspector/front-end/Settings.js:
        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame):
        * inspector/front-end/Toolbar.js:
        (WebInspector.Toolbar.prototype._toolbarDragStart):
        * inspector/front-end/UIUtils.js:
        (WebInspector.startEditing.cleanUpAfterEditing):
        (WebInspector.startEditing.var):
        (WebInspector.startEditing):
        (WebInspector.UIString):
        (WebInspector.useLowerCaseMenuTitles):
        (WebInspector.platform):
        (WebInspector.isMac):
        (WebInspector.platformFlavor):
        (WebInspector.port):
        (WebInspector.installPortStyles):
        (WebInspector._windowFocused):
        (WebInspector._windowBlurred):
        (WebInspector.previousFocusElement):
        (WebInspector.currentFocusElement):
        (WebInspector._focusChanged):
        (WebInspector.setCurrentFocusElement):
        * inspector/front-end/externs.js:
        (Event.prototype.initWebKitWheelEvent):
        (window.getComputedStyle):
        (InspectorBackend.runAfterPendingDispatches):
        * inspector/front-end/inspector.js:
        (WebInspector.documentKeyDown):
        (WebInspector.addMainEventListeners):

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

        Kill StyleBase.
        https://bugs.webkit.org/show_bug.cgi?id=71218

        Reviewed by Antti Koivisto.

        Remove the StyleBase class and make all subclasses stand alone. CSSRule and StyleSheet
        now inherit from RefCounted<T> instead, and XSLImportRule doesn't even need that,
        so StyleBase is replaced by nothing.

        * css/StyleBase.cpp:
        * css/StyleBase.h:

            Removed.

        * css/CSSRule.cpp:
        * css/CSSRule.h:
        (WebCore::CSSRule::~CSSRule):
        (WebCore::CSSRule::useStrictParsing):
        (WebCore::CSSRule::setParentStyleSheet):
        (WebCore::CSSRule::setParentRule):
        (WebCore::CSSRule::parentStyleSheet):
        (WebCore::CSSRule::parentRule):
        (WebCore::CSSRule::baseURL):
        (WebCore::CSSRule::CSSRule):

            CSSRule now inherits directly from RefCounted, and has either a CSSRule or a
            CSSStyleSheet as its parent. Made these getters/setters inline since they are
            trivial now.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:

            Purge StyleBase.* from the build systems.

        * bindings/js/JSDOMBinding.h:
        (WebCore::root):

            New root() functions for CSSRule and StyleSheet.

        * bindings/js/JSNodeCustom.h:

            Remove StyleBase.h include.

        * css/CSSStyleSheet.h:
        (WebCore::CSSStyleSheet::parentStyleSheet):

            Added CSS-specific parentStyleSheet() so we don't have to cast it to a
            CSSStyleSheet* at the call sites.

        * css/StyleSheet.cpp:
        (WebCore::StyleSheet::StyleSheet):
        (WebCore::StyleSheet::parentStyleSheet):
        (WebCore::StyleSheet::baseURL):
        * css/StyleSheet.h:
        (WebCore::StyleSheet::parentRule):
        (WebCore::StyleSheet::setParentRule):
        (WebCore::StyleSheet::isCSSStyleSheet):
        (WebCore::StyleSheet::isXSLStyleSheet):

            StyleSheet now inherits directly from RefCounted and always has a parent CSSRule
            though it can be null. parentStyleSheet() returns that rule's parent style sheet.
            Moved the relevant guts from StyleBase down here.

        * loader/cache/CachedStyleSheetClient.h:

            Remove unnecessary WTF_MAKE_FAST_ALLOCATED, we get it from CachedResourceClient.

        * xml/XSLImportRule.cpp:
        (WebCore::XSLImportRule::XSLImportRule):
        (WebCore::XSLImportRule::~XSLImportRule):
        (WebCore::XSLImportRule::parentStyleSheet):
        (WebCore::XSLImportRule::setXSLStyleSheet):
        (WebCore::XSLImportRule::loadSheet):
        * xml/XSLImportRule.h:
        (WebCore::XSLImportRule::create):
        (WebCore::XSLImportRule::setParentStyleSheet):

            Remove inheritance from StyleBase, and have create() return a PassOwnPtr instead.
            This is fine, since XSLStyleSheet is the only object that ever manages these rules.

        * svg/SVGFontFaceElement.cpp:
        (WebCore::SVGFontFaceElement::insertedIntoDocument):
        * css/CSSStyleSheet.cpp:
        (WebCore::CSSStyleSheet::~CSSStyleSheet):
        (WebCore::CSSStyleSheet::ownerRule):
        (WebCore::CSSStyleSheet::deleteRule):
        (WebCore::CSSStyleSheet::checkLoaded):
        (WebCore::CSSStyleSheet::document):
        (WebCore::CSSStyleSheet::styleSheetChanged):
        * css/CSSImportRule.cpp:
        (WebCore::CSSImportRule::~CSSImportRule):
        (WebCore::CSSImportRule::setCSSStyleSheet):
        (WebCore::CSSImportRule::insertedIntoParent):
        * css/CSSMediaRule.cpp:
        (WebCore::CSSMediaRule::CSSMediaRule):
        (WebCore::CSSMediaRule::~CSSMediaRule):
        (WebCore::CSSMediaRule::append):
        (WebCore::CSSMediaRule::insertRule):
        (WebCore::CSSMediaRule::deleteRule):
        * css/CSSRegionStyleRule.cpp:
        (WebCore::CSSRegionStyleRule::CSSRegionStyleRule):
        (WebCore::CSSRegionStyleRule::~CSSRegionStyleRule):
        * css/CSSRuleList.cpp:
        (WebCore::CSSRuleList::deleteRule):
        * css/CSSStyleDeclaration.h:
        * css/WebKitCSSKeyframesRule.cpp:
        (WebCore::WebKitCSSKeyframesRule::~WebKitCSSKeyframesRule):
        (WebCore::WebKitCSSKeyframesRule::setName):
        (WebCore::WebKitCSSKeyframesRule::append):
        * dom/ProcessingInstruction.cpp:
        (WebCore::ProcessingInstruction::parseStyleSheet):
        * inspector/InspectorCSSAgent.cpp:
        (WebCore::InspectorCSSAgent::parentStyleSheet):
        * xml/XSLStyleSheet.h:
        * xml/XSLStyleSheetLibxslt.cpp:
        (WebCore::XSLStyleSheet::XSLStyleSheet):
        (WebCore::XSLStyleSheet::~XSLStyleSheet):
        (WebCore::XSLStyleSheet::checkLoaded):
        (WebCore::XSLStyleSheet::loadChildSheet):
        * xml/XSLStyleSheetQt.cpp:
        (WebCore::XSLStyleSheet::~XSLStyleSheet):

            Use the new, more explicit, parenting functions of StyleSheet.

2011-10-31  Nikolas Zimmermann  <nzimmermann@rim.com>

        CSS 2.1 failure: background-intrinsic-*
        https://bugs.webkit.org/show_bug.cgi?id=47156

        SVGs do not work as tiled background images
        https://bugs.webkit.org/show_bug.cgi?id=16281

        Apply preserveAspectRatio and synthesize viewboxes in <img>
        https://bugs.webkit.org/show_bug.cgi?id=34521

        SVG background doesn't resize properly when dimensions are changed
        https://bugs.webkit.org/show_bug.cgi?id=42944

        Images with percent height inside a floated div should use intrinsic height.
        https://bugs.webkit.org/show_bug.cgi?id=45439

        SVG image in HTML changes size as the window is resized
        https://bugs.webkit.org/show_bug.cgi?id=52045

        Reviewed by Antti Koivisto.

        Implement intrinsic sizing support for SVGImage (svg embedded through <html:img>/<svg:image>/background-image/border-image/...).
        This is demanded by CSS 2.1, and covered by new layout tests in LayoutTests/css2.1 and several new custom testcases.

        Tests: css2.1/20110323/background-intrinsic-001.htm
               css2.1/20110323/background-intrinsic-002.htm
               css2.1/20110323/background-intrinsic-003.htm
               css2.1/20110323/background-intrinsic-004.htm
               css2.1/20110323/background-intrinsic-005.htm
               css2.1/20110323/background-intrinsic-006.htm
               css2.1/20110323/background-intrinsic-007.htm
               css2.1/20110323/background-intrinsic-008.htm
               css2.1/20110323/background-intrinsic-009.htm
               svg/as-background-image/background-image-preserveaspectRatio-support.html (adapted from testcase from bug 34521)
               svg/as-background-image/background-image-tiled.html (reduction from bug 16281)
               svg/as-background-image/same-image-two-instances-background-image.html
               svg/as-image/img-preserveAspectRatio-support-1.html (reduction from bug 34521)
               svg/as-image/same-image-two-instances.html
               svg/as-image/svg-as-relative-image-with-explicit-size.html
               svg/as-image/svg-image-change-content-size.xhtml (reduction from bug 42944)
               svg/zoom/page/zoom-img-preserveAspectRatio-support-1.html
               svg/zoom/page/zoom-svg-as-image.html
               svg/zoom/page/zoom-svg-as-relative-image.html

        * css/CSSImageGeneratorValue.cpp:
        (WebCore::CSSImageGeneratorValue::addClient): Pass default zoom factor.
        (WebCore::CSSImageGeneratorValue::getImage): Ditto.
        * loader/cache/CachedImage.cpp: Enable SVGImage <-> IntSize cache.
        (WebCore::CachedImage::lookupImageForSize): Use recently introduced ImageBySizeCache, to lookup an image for a certain size.
        (WebCore::CachedImage::lookupOrCreateImageForRenderer): Use recently introduced ImageBySizeCache, to dynamically create copies of m_image if needed.
        (WebCore::CachedImage::imageForRenderer): Lookup image by renderer, which first looks up a size for a renderer, then uses lookupImageForSize().
        (WebCore::CachedImage::setContainerSizeForRenderer): For SVGImages, pass on container size handling to ImageBySizeCache.
        (WebCore::CachedImage::imageSizeForRenderer): Figure out the image size, respecting per-renderer overrides, for a certain renderer.
        (WebCore::CachedImage::computeIntrinsicDimensions): Remove unnecessary RenderObject parameter.
        * loader/cache/CachedImage.h:
        * page/ChromeClient.h:
        (WebCore::ChromeClient::isSVGImageChromeClient): Used to identify whether a RenderSVGRoot is embedded through a SVGImage. Returns false, by default.
        * platform/graphics/Image.h:
        (WebCore::Image::setImageObserver): Add helper.
        * rendering/ImageBySizeCache.cpp: Cleanup code.
        (WebCore::ImageBySizeCache::addClient): Assert the passed renderer is valid.
        (WebCore::ImageBySizeCache::removeClient): Ditto. Allow removeClient() to be called w/o prio addClient() usage.
        (WebCore::ImageBySizeCache::getImage): Add zoom parameter.
        (WebCore::ImageBySizeCache::getRequestedSizeAndZoom): Add way to get requested size from cache, instead of actual cached sizes.
        (WebCore::ImageBySizeCache::imageForSize): Respect empty sizes, just return 0, instead of asserting.
        (WebCore::ImageBySizeCache::imageForRenderer): Added a helper that retrieves an image for a renderer, by lookup up its size and using imageForSize().
        * rendering/ImageBySizeCache.h: Cleaup code, introduce struct that replaces the std::pair<IntSize, int>.
        (WebCore::SizeZoomAndCount::SizeZoomAndCount):
        * rendering/RenderBoxModelObject.cpp: Implement CSS 2.1 intrinsic size negotiation for images.
        (WebCore::resolveWidthForRatio): New inline helper function used by calculateImageIntrinsicDimensions.
        (WebCore::resolveHeightForRatio): Ditto.
        (WebCore::resolveAgainstIntrinsicWidthOrHeightAndRatio): Ditto.
        (WebCore::resolveAgainstIntrinsicRatio):  Ditto.
        (WebCore::RenderBoxModelObject::calculateImageIntrinsicDimensions): New helper function, containing the main algorithm, which is a pure transcription of the spec.
        (WebCore::RenderBoxModelObject::calculateFillTileSize): Use new calculateImageIntrinsicDimensions() helper to figure out the intrinsic size.
        (WebCore::RenderBoxModelObject::calculateBackgroundImageGeometry): Propagate calculateFillTileSize() result to the image resource, via setContainerSizeForRenderer().
        (WebCore::RenderBoxModelObject::paintNinePieceImage): Use new calculateImageIntrinsicDimensions() helper to figure out the intrinsic size.
        * rendering/RenderBoxModelObject.h: Clarify some variable names, added calculateImageIntrinsicDimensions().
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::RenderImage): Use IntSize(), instead of IntSize(0, 0).
        (WebCore::RenderImage::updateIntrinsicSizeIfNeeded): Refactored from imageDimensionsChanged().
        (WebCore::RenderImage::imageDimensionsChanged): Use updateIntrinsicSizeIfNeeded().
        (WebCore::RenderImage::computeReplacedLogicalWidth): Use RenderReplaced::computeReplacedLogicalWidth() exclusively. For this to work, the intrinsic size must be correct.
        (WebCore::RenderImage::computeIntrinsicRatioInformation): Default implementation for non-SVGImages.
        (WebCore::RenderImage::needsPreferredWidthsRecalculation): Return true, just like RenderPart, if embeddedContentBox is not null.
        (WebCore::RenderImage::embeddedContentBox): Returns the RenderSVGRoot* renderer of the embedded SVG, if possible.
        * rendering/RenderImage.h: Remove isLogicalWidth/HeightSpecified() / computeReplacedLogicalHeight() / calcAspectRatioLogicalWidth/Height().
        * rendering/RenderImageResource.cpp:
        (WebCore::RenderImageResource::setContainerSizeForRenderer): Pass around new "float containerZoomFactor" parameter.
        * rendering/RenderImageResourceStyleImage.cpp:
        (WebCore::RenderImageResourceStyleImage::image): embeddedContentBox() is now calling image() earlier than before. We now have to handle the case that the image is pending.
        (WebCore::RenderImageResourceStyleImage::setContainerSizeForRenderer): Pass zoom factor.
        * rendering/RenderImageResourceStyleImage.h:
        * rendering/RenderListMarker.cpp:
        (WebCore::RenderListMarker::computePreferredLogicalWidths): Pass effective zoom to setContainerSizeForRenderer().
        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::computeIntrinsicLogicalWidth): Generalized this code, as RenderImage is using it as well now. Marginal changes needed.
        (WebCore::RenderReplaced::computeIntrinsicLogicalHeight): Ditto.
        (WebCore::RenderReplaced::computeReplacedLogicalWidth): Ditto.
        * rendering/style/StyleCachedImage.cpp:
        (WebCore::StyleCachedImage::computeIntrinsicDimensions): Stop passing m_renderer to CachedImage, it's no longer needed.
        (WebCore::StyleCachedImage::setContainerSizeForRenderer): Add "float containerZoomFactor" parameter.
        * rendering/style/StyleCachedImage.h: Add "float containerZoomFactor" parameter to setContainerSizeForRenderer.
        * rendering/style/StyleGeneratedImage.h:
        (WebCore::StyleGeneratedImage::setContainerSizeForRenderer): Ditto.
        * rendering/style/StyleImage.h: Ditto.
        * rendering/style/StylePendingImage.h:
        (WebCore::StylePendingImage::setContainerSizeForRenderer): Ditto.
        * rendering/svg/RenderSVGImage.cpp:
        (WebCore::RenderSVGImage::layout): Always supply a container size when embedding SVGs in <svg:image>.
        * rendering/svg/RenderSVGRoot.cpp: Move "override container size" from SVGSVGElement into RenderSVGRoot, where it belongs.
        (WebCore::RenderSVGRoot::isEmbeddedThroughImageElement): Add helper method to determine whether we're loaded through SVGImage.
        (WebCore::RenderSVGRoot::computeReplacedLogicalWidth): If we have a valid container size, it has precendence (only supplied via external SVGImages).
        (WebCore::RenderSVGRoot::computeReplacedLogicalHeight): Ditto.
        (WebCore::RenderSVGRoot::layout): Remove calcViewport() usage, no need to track/override the viewport size anymore, all done in coputeReplacedLogical* now.
        (WebCore::RenderSVGRoot::paint): Use borderBoxRect() which now always matches the previously computed m_viewportSize. 
        (WebCore::RenderSVGRoot::computeRectForRepaint): Ditto.
        * rendering/svg/RenderSVGRoot.h: Move "override container size" from SVGSVGElement into RenderSVGRoot, where it belongs.
        (WebCore::RenderSVGRoot::containerSize):
        (WebCore::RenderSVGRoot::setContainerSize):
        * svg/SVGLength.cpp:
        (WebCore::SVGLength::determineViewport): Resolve lengths against override container size in documents embedded through SVGImage.
        * svg/SVGSVGElement.cpp: Remove "override container size" handling from SVGSVGElement.
        (WebCore::SVGSVGElement::SVGSVGElement): Ditto.
        (WebCore::SVGSVGElement::currentViewBoxRect): Always synthesize a viewBox, if we're embedded through SVGImage, as demanded by SVG 1.1 2nd Edition.
        * svg/SVGSVGElement.h:
        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImageChromeClient::isSVGImageChromeClient): Return true, used to identify whether RenderSVGRoot is embedded through SVGImage.
        (WebCore::SVGImage::createWithDataAndSize): Add new helper function.
        (WebCore::SVGImage::setContainerZoom): Forwarded to Page::setPageZoomFactor.
        (WebCore::SVGImage::setContainerSize): Assert that container size is not empty. We should never receive an empty container size.
        (WebCore::SVGImage::usesContainerSize): Adapt to override container size changes, it now lives in RenderSVGRoot instead of SVGSVGElement.
        (WebCore::SVGImage::size): New algorithm to figure out the size of an embedded SVG, as demanded by the CSS/SVG specs.
        (WebCore::SVGImage::embeddedContentBox): Add helper which returns the RenderSVGRoot of the document.
        (WebCore::SVGImage::computeIntrinsicDimensions): Implement intrinsic ratio calculation. 
        (WebCore::SVGImage::dataChanged): Force calling FrameView::setCanHaveScrollbars(false), as SVG images now always synthesize a viewBox, and thus never receive scrollbars.
        * svg/graphics/SVGImage.h:

2011-10-31  Yury Semikhatsky  <yurys@chromium.org>

        Unreviewed. Add ResourcePreviewView.js to the list of inspector front-end
        files on Qt.

        * inspector/front-end/WebKit.qrc:

2011-10-31  Pavel Feldman  <pfeldman@google.com>

        Web Inspector: do not map scripts generated with document.write to the document resources.
        https://bugs.webkit.org/show_bug.cgi?id=71114

        Reviewed by Yury Semikhatsky.

        Test: inspector/debugger/bind-script-to-resource.html

        * inspector/front-end/DebuggerPresentationModel.js:
        (WebInspector.DebuggerPresentationModel):
        (WebInspector.DebuggerPresentationModel.prototype._addScript):
        (WebInspector.DebuggerPresentationModel.prototype._bindScriptToRawSourceCode):
        (WebInspector.DebuggerPresentationModel.prototype._rawSourceCodeForScriptWithURL):
        (WebInspector.DebuggerPresentationModel.prototype._rawSourceCodeForScript):
        (WebInspector.DebuggerPresentationModel.prototype._scriptForRawSourceCode):
        (WebInspector.DebuggerPresentationModel.prototype._debuggerReset):
        * inspector/front-end/RawSourceCode.js:
        (WebInspector.RawSourceCode.prototype._createSourceMapping.didRequestContent.didFormatContent):
        (WebInspector.RawSourceCode.prototype._createSourceMapping.didRequestContent):
        (WebInspector.RawSourceCode.prototype._createSourceMapping):
        * inspector/front-end/Script.js:

2011-10-31  Antti Koivisto  <antti@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=71012
        Use StringHasher to generate the matched declaration cache hash

        Reviewed by Sam Weinig.

        Make sure the MatchedStyleDeclarations are fully zero-initialized as we calculate a hash over a raw memory array of these.

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::MatchedStyleDeclaration::MatchedStyleDeclaration):
        (WebCore::CSSStyleSelector::addMatchedDeclaration):
        * css/CSSStyleSelector.h:

2011-10-31  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix make distcheck build.

        * GNUmakefile.am: Add InFilesCompiler.pm to SCRIPTS_BINDINGS and
        EXTRA_DIST. Also remove duplicated entries in EXTRA_DIST.

2011-10-31  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: factor out ResourceUtils, clean up externs.
        https://bugs.webkit.org/show_bug.cgi?id=71192

        Reviewed by Yury Semikhatsky.

        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * inspector/compile-front-end.sh:
        * inspector/front-end/ConsoleMessage.js:
        (WebInspector.ConsoleMessageImpl.prototype._linkifyLocation):
        * inspector/front-end/DebuggerPresentationModel.js:
        * inspector/front-end/ProfilesPanel.js:
        * inspector/front-end/Resource.js:
        (WebInspector.Resource.displayName):
        * inspector/front-end/ResourceTreeModel.js:
        (WebInspector.ResourceTreeModel.prototype._createResource):
        * inspector/front-end/ResourceUtils.js: Added.
        (WebInspector.resourceForURL):
        (WebInspector.forAllResources):
        (WebInspector.displayNameForURL):
        (WebInspector.linkifyStringAsFragmentWithCustomLinkifier):
        (WebInspector.registerLinkifierPlugin):
        (WebInspector.linkifyStringAsFragment):
        (WebInspector.linkifyURLAsNode):
        (WebInspector.linkifyURL):
        (WebInspector.formatLinkText):
        (WebInspector.linkifyResourceAsNode):
        (WebInspector.resourceURLForRelatedNode.callback):
        (WebInspector.resourceURLForRelatedNode):
        (WebInspector.populateHrefContextMenu):
        (WebInspector.completeURL):
        * inspector/front-end/StylesSidebarPane.js:
        (WebInspector.StylePropertyTreeElement.prototype.selectElement):
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/externs.js:
        * inspector/front-end/inspector.html:
        * inspector/front-end/inspector.js:
        (WebInspector.networkResourceById):
        * inspector/front-end/utilities.js:
        (setupPrototypeUtilities.Element.prototype.selectionLeftOffset):

2011-10-28  Alexander Pavlov  <apavlov@chromium.org>

        Web Inspector: Using keyboard to increment/decrement units is inconsistent
        https://bugs.webkit.org/show_bug.cgi?id=71119

        Reviewed by Pavel Feldman.

        This change makes the behavior consistent with that described at http://trac.webkit.org/wiki/WebInspector

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

2011-10-29  Martin Robinson  <mrobinson@igalia.com>

        [GTK] Switch to a backing store approach for painting WebKitWebView
        https://bugs.webkit.org/show_bug.cgi?id=70213

        Reviewed by Gustavo Noronha Silva.

        No new tests. The changes to WebCore should not change
        behavior. The changes in WebKit are covered by existing
        tests.

        * platform/cairo/WidgetBackingStore.h:
        (WebCore::WidgetBackingStore::size): Added this getter for the size.
        * platform/cairo/WidgetBackingStoreCairo.cpp:
        (WebCore::WidgetBackingStore::WidgetBackingStore): Initialize size.
        * platform/graphics/cairo/CairoUtilities.cpp:
        (WebCore::copyRectFromCairoSurfaceToContext): Added this new helper.
        (WebCore::copyRectFromOneSurfaceToAnother): Use the new helper.
        * platform/graphics/cairo/CairoUtilities.h:
        * platform/gtk/GtkWidgetBackingStoreX11.cpp:
        (WebCore::WidgetBackingStore::WidgetBackingStore): Initialize the size.

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

        Unreviewed, rolling out r98803.
        http://trac.webkit.org/changeset/98803
        https://bugs.webkit.org/show_bug.cgi?id=71186

        Causing test and assertion failures on some platforms
        (Requested by anttik on #webkit).

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

2011-10-29  Mark Rowe  <mrowe@apple.com>

        Build fix.

        * platform/graphics/mac/WebLayer.mm:
        (drawLayerContents):

2011-10-29  Mark Rowe  <mrowe@apple.com>

        Build fix.

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

2011-10-29  Daniel Cheng  <dcheng@chromium.org>

        Rename DataTransferItems to DataTransferItemList
        https://bugs.webkit.org/show_bug.cgi?id=71151

        Per feedback that Items and Item are hard to distinguish between, the HTML5 spec renamed
        DataTransferItems to DataTransferItemList:
        http://www.whatwg.org/specs/web-apps/current-work/multipage/dnd.html#the-datatransferitemlist-interface

        Reviewed by Tony Chang.

        * CMakeLists.txt:
        * CodeGenerators.pri:
        * DerivedSources.cpp:
        * DerivedSources.make:
        * GNUmakefile.list.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/Clipboard.h:
        * dom/Clipboard.idl:
        * dom/DataTransferItemList.cpp: Renamed from Source/WebCore/dom/DataTransferItems.cpp.
        (WebCore::DataTransferItemList::DataTransferItemList):
        (WebCore::DataTransferItemList::length):
        (WebCore::DataTransferItemList::item):
        (WebCore::DataTransferItemList::deleteItem):
        (WebCore::DataTransferItemList::clear):
        (WebCore::DataTransferItemList::add):
        * dom/DataTransferItemList.h: Renamed from Source/WebCore/dom/DataTransferItems.h.
        (WebCore::DataTransferItemList::~DataTransferItemList):
        * dom/DataTransferItemList.idl: Renamed from Source/WebCore/dom/DataTransferItems.idl.
        * platform/chromium/ClipboardChromium.cpp:
        (WebCore::ClipboardChromium::items):
        * platform/chromium/ClipboardChromium.h:
        * platform/chromium/DataTransferItemListChromium.cpp: Renamed from Source/WebCore/platform/chromium/DataTransferItemsChromium.cpp.
        (WebCore::DataTransferItemListChromium::create):
        (WebCore::DataTransferItemListChromium::DataTransferItemListChromium):
        (WebCore::DataTransferItemListChromium::addPasteboardItem):
        * platform/chromium/DataTransferItemListChromium.h: Renamed from Source/WebCore/platform/chromium/DataTransferItemsChromium.h.
        * platform/qt/ClipboardQt.cpp:
        (WebCore::ClipboardQt::items):
        * platform/qt/ClipboardQt.h:
        * platform/qt/DataTransferItemListQt.cpp: Renamed from Source/WebCore/platform/qt/DataTransferItemsQt.cpp.
        (WebCore::DataTransferItemListQt::create):
        (WebCore::DataTransferItemListQt::DataTransferItemListQt):
        (WebCore::DataTransferItemListQt::addPasteboardItem):
        * platform/qt/DataTransferItemListQt.h: Renamed from Source/WebCore/platform/qt/DataTransferItemsQt.h.

2011-10-03  Robert Hogan  <robert@webkit.org>

        CSS 2.1 failure: block-non-replaced-width-008.htm
        https://bugs.webkit.org/show_bug.cgi?id=69278

        Reviewed by Simon Fraser.

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::computeLogicalWidthUsing):
          Include the margins in the calculation of logical width even when the containing block's
          width is zero. This is required by section '10.3.3 Block-level, non-replaced elements in
          normal flow' in the CSS 2.1 spec. Tested by block-non-replaced-width-008.htm in the CSS
          test suite.

2011-10-29  Anna Cavender  <annacc@chromium.org>

        Make sure TextTracks are destructed if HTMLMediaElement goes away.
        https://bugs.webkit.org/show_bug.cgi?id=71148

        Reviewed by Eric Carlson.

        Test: media/track/track-text-track-destructor-crash.html

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::~HTMLMediaElement):
            Destroy the client (this) on TextTracks.
        (WebCore::HTMLMediaElement::loadTextTracks):
            Move TextTrack creation to loadNextTextTrack.
        (WebCore::HTMLMediaElement::loadNextTextTrack):
            Keep track of new TextTrack in a list.
        (WebCore::HTMLMediaElement::addTrack):
            Keep track of new TextTrack in a list.
        * html/HTMLMediaElement.h:
            Add m_textTracks and loadNextTextTrack().

2011-10-29  Jochen Eisinger  <jochen@chromium.org>

        Implement IDBFactory.deleteDatabase
        https://bugs.webkit.org/show_bug.cgi?id=62622

        Reviewed by Tony Chang.

        Tests: storage/indexeddb/factory-deletedatabase-interactions.html
               storage/indexeddb/factory-deletedatabase.html

        * storage/IDBBackingStore.h:
        * storage/IDBDatabaseBackendImpl.cpp:
        (WebCore::IDBDatabaseBackendImpl::PendingDeleteCall::create):
        (WebCore::IDBDatabaseBackendImpl::PendingDeleteCall::callbacks):
        (WebCore::IDBDatabaseBackendImpl::PendingDeleteCall::PendingDeleteCall):
        (WebCore::IDBDatabaseBackendImpl::IDBDatabaseBackendImpl):
        (WebCore::IDBDatabaseBackendImpl::openInternal):
        (WebCore::IDBDatabaseBackendImpl::processPendingCalls):
        (WebCore::IDBDatabaseBackendImpl::openConnection):
        (WebCore::IDBDatabaseBackendImpl::deleteDatabase):
        * storage/IDBDatabaseBackendImpl.h:
        * storage/IDBFactory.cpp:
        (WebCore::IDBFactory::deleteDatabase):
        * storage/IDBFactory.h:
        * storage/IDBFactory.idl:
        * storage/IDBFactoryBackendImpl.cpp:
        (WebCore::IDBFactoryBackendImpl::deleteDatabase):
        * storage/IDBFactoryBackendImpl.h:
        * storage/IDBFactoryBackendInterface.h:
        * storage/IDBLevelDBBackingStore.cpp:
        (WebCore::deleteRange):
        (WebCore::IDBLevelDBBackingStore::deleteDatabase):
        * storage/IDBLevelDBBackingStore.h:
        * storage/IDBRequest.cpp:
        (WebCore::IDBRequest::dispatchEvent):

2011-10-28  Robert Hogan  <robert@webkit.org>

        CSS 2.1 failure: dynamic-top-change-001 to 004 fail
        https://bugs.webkit.org/show_bug.cgi?id=68149

        Reviewed by David Hyatt.

        In these tests a child inherits its top value from its parent and the parent's top value
        is later updated by an onload event. The updated value is expected to cascade to the child.

        The tests were failing because updating the value did not cascade immediately to the child inheriting it, though
        it could be forced eventually with a full recalculation of the RenderStyle by changing the zoom factor
        or opening the inspector.

        The fix is to let the parent RenderStyle know that a child inherits a property explicitly and
        recalculate children's style if the parent ever changes. This only happens if the property is inherited
        explicitly, it does not apply to cases where the property is inherited by default.

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):
        * dom/Node.cpp:
        (WebCore::Node::diff):
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::RenderStyle):
        * rendering/style/RenderStyle.h:
        (WebCore::InheritedFlags::setHasExplicitlyInheritedProperties):
        (WebCore::InheritedFlags::hasExplicitlyInheritedProperties):

2011-10-29  Antti Koivisto  <antti@apple.com>

        Tighten font change conditions in matched declaration cache
        https://bugs.webkit.org/show_bug.cgi?id=71026

        Reviewed by Darin Adler.

        We currently test if font description has changed to see if all properties need to be applied. However
        only a few size related metrics can actually affect other properties. We can just test those, making 
        the cache somewhat more effective while also making the equality test faster.
        
        * css/CSSStyleSelector.cpp:
        (WebCore::fontDifferenceAffectsNonInherited):
        (WebCore::CSSStyleSelector::applyMatchedDeclarations):
    
            Test for text computedSize, xHeight and orientation only. Other text properties don't affect computed
            values of non-text CSS properties.

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

        DOMURL should keep its own state rather than storing it on ScriptExecutionContext
        https://bugs.webkit.org/show_bug.cgi?id=71169

        Reviewed by Eric Seidel.

        This patch untwists this code.  I think this code was originally
        twisted because these APIs moved onto DOMURL after they were first
        implemented.

        * dom/ScriptExecutionContext.cpp:
        (WebCore::ScriptExecutionContext::~ScriptExecutionContext):
        * dom/ScriptExecutionContext.h:
        * fileapi/FileWriter.h:
        * html/DOMURL.cpp:
        (WebCore::DOMURL::contextDestroyed):
        (WebCore::DOMURL::createObjectURL):
        (WebCore::DOMURL::revokeObjectURL):
        * html/DOMURL.h:

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

        Unreviewed, rolling out r98795.
        http://trac.webkit.org/changeset/98795
        https://bugs.webkit.org/show_bug.cgi?id=71171

        Causes worker tests to crash (Requested by abarth on #webkit).

        * dom/ActiveDOMObject.cpp:
        (WebCore::ContextDestructionObserver::contextDestroyed):
        * dom/MessagePort.cpp:
        (WebCore::MessagePort::MessagePort):
        (WebCore::MessagePort::contextDestroyed):
        * dom/MessagePort.h:
        * dom/ScriptExecutionContext.cpp:
        (WebCore::ScriptExecutionContext::~ScriptExecutionContext):
        (WebCore::ScriptExecutionContext::closeMessagePorts):

2011-10-28  Ryosuke Niwa  <rniwa@webkit.org>

        Potential crash in ReplaceNodeWithSpanCommand
        https://bugs.webkit.org/show_bug.cgi?id=71145

        Reviewed by Ojan Vafai.

        Fix a potential crash without tests because we don't have a reduction.

        * editing/ReplaceNodeWithSpanCommand.cpp:
        (WebCore::swapInNodePreservingAttributesAndChildren):

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

        MessagePort should be a ContextDestructionObserver
        https://bugs.webkit.org/show_bug.cgi?id=71167

        Reviewed by Eric Seidel.

        I couldn't quite get rid of all the uses of the
        ScriptExecutionContext::m_messagePorts in this patch.  I hope to get
        rid of them in the future as the "extra data" design for
        ScriptExecutionContext emerges.

        * dom/ActiveDOMObject.cpp:
        (WebCore::ContextDestructionObserver::contextDestroyed):
        * dom/MessagePort.cpp:
        (WebCore::MessagePort::MessagePort):
        (WebCore::MessagePort::contextDestroyed):
        * dom/MessagePort.h:
        * dom/ScriptExecutionContext.cpp:
        (WebCore::ScriptExecutionContext::~ScriptExecutionContext):
        (WebCore::ScriptExecutionContext::closeMessagePorts):

2011-10-28  Ryosuke Niwa  <rniwa@webkit.org>

        The copy and paste result in nested scrollbars on http://dojotoolkit.org/widgets
        https://bugs.webkit.org/show_bug.cgi?id=70799

        Reviewed by Enrica Casucci.

        The bug was caused by WebKit's treating a fully selected root with background property as a special common ancestor.
        A variant of this bug was caused by treating any element with text-decoration property as a presentational element.

        Fixed the above two bugs by not serializing the said nodes. The effective background color was already serialized
        by wrappingStyleForSerialization, there was nothing to be done besides stop including it in highestAncestorToWrapMarkup.

        For text-decoration property, added the logic to compute the effective value in EditingStyle::init. Also treat it
        as a non-inheritable editing property so that the rest of EditingStyle just works.

        Test: editing/pasteboard/avoid-copying-body-with-background.html

        * editing/EditingStyle.cpp: Added CSSPropertyTextDecoration to the list of editing properties.
        (WebCore::copyEditingProperties):
        (WebCore::EditingStyle::init): Compute the effective text decoration when propertiesToInclude is
        EditingPropertiesInEffect.
        (WebCore::EditingStyle::prepareToApplyAt):
        (WebCore::EditingStyle::mergeInlineStyleOfElement):
        (WebCore::EditingStyle::wrappingStyleForSerialization):
        (WebCore::EditingStyle::removeStyleFromRulesAndContext):
        * editing/EditingStyle.h: Renamed EditingInheritablePropertiesAndBackgroundColorInEffect to
        EditingPropertiesInEffect.
        * editing/markup.cpp:
        (WebCore::StyledMarkupAccumulator::appendStyleNodeOpenTag): Removed an assertion that's no longer valid.
        (WebCore::isElementPresentational): Don't consider an element with text-decoration as a presentational element.
        (WebCore::highestAncestorToWrapMarkup): Don't consider fully selected root as a special common ancestor ever.
        Background color is computed property when we compute the wrapping style.
        (WebCore::createMarkup):

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

        Rename ExceptionCodeDescription.in to DOMExceptions.in
        https://bugs.webkit.org/show_bug.cgi?id=71157

        Reviewed by Eric Seidel.

        This file is now used for more than just the descriptions of the exceptions.

        * CMakeLists.txt:
        * CodeGenerators.pri:
        * DerivedSources.make:
        * GNUmakefile.am:
        * WebCore.gyp/WebCore.gyp:
        * WebCore.gyp/scripts/action_makenames.py:
        * dom/DOMExceptions.in: Copied from Source/WebCore/dom/ExceptionCodeDescription.in.
        * dom/ExceptionCodeDescription.in: Removed.
        * dom/make_dom_exceptions.pl: Copied from Source/WebCore/dom/make_exception_code_description.pl.
        * dom/make_exception_code_description.pl: Removed.

2011-10-28  Chris Rogers  <crogers@google.com>

        SincResampler must be able to resample progressively
        https://bugs.webkit.org/show_bug.cgi?id=71131

        Reviewed by Kenneth Russell.

        No new tests.  There is not yet an implementation using progressive resampling to test.

        * platform/audio/SincResampler.cpp:
        (WebCore::SincResampler::SincResampler):
        (WebCore::SincResampler::consumeSource):
        (WebCore::SincResampler::process):
        * platform/audio/SincResampler.h:

2011-10-28  Adam Klein  <adamk@chromium.org>

        [MutationObservers] Support attributeOldValue for attribute mutations
        https://bugs.webkit.org/show_bug.cgi?id=70861

        Reviewed by Ryosuke Niwa.

        Respect 'attributeOldValue' when passed to WebKitMutationObserver.observe().

        If multiple observers have different attributeOldValue settings in
        their registrations, two different MutationRecords are created (one is
        a wrapper around the other).

        If a single observer has multiple registrations that apply to a single
        mutation, and those registrations have different values for
        attributeOldValue, the observer is passed the oldValue.

        * dom/Element.cpp:
        (WebCore::hasOldValue):
        (WebCore::enqueueAttributesMutationRecord):
        (WebCore::Element::setAttribute):
        * dom/MutationRecord.cpp:
        (WebCore::MutationRecord::createAttributes):
        (WebCore::MutationRecord::createWithNullOldValue):
        * dom/MutationRecord.h:
        (WebCore::MutationRecord::oldValue):

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

        Delete ExceptionCode.cpp, which is empty
        https://bugs.webkit.org/show_bug.cgi?id=71159

        Reviewed by Eric Seidel.

        This file has been stripped down to nothing and can be removed.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/DOMAllInOne.cpp:
        * dom/ExceptionCode.cpp: Removed.

2011-10-28  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r98776.
        http://trac.webkit.org/changeset/98776
        https://bugs.webkit.org/show_bug.cgi?id=71164

        caused lots of test crashes (Requested by smfr on #webkit).

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateVisibilityStatus):
        (WebCore::RenderLayer::dirtyZOrderLists):
        * rendering/RenderLayer.h:
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::enableCompositingMode):

2011-10-28  John Sullivan  <sullivan@apple.com>

        Improvement to the fix for:
        https://bugs.webkit.org/show_bug.cgi?id=71142
        Whether backspace goes Back should be configurable

        Reviewed by Dan Bernstein.

        * page/EventHandler.cpp:
        (WebCore::EventHandler::defaultBackspaceEventHandler):
        Do the frame->settings() check after the !page check, since
        a null page means null settings.

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

        Make DOMURL a ContextDestructionObserver
        https://bugs.webkit.org/show_bug.cgi?id=71162

        Reviewed by Eric Seidel.

        This removes a bunch of hand-rolled ifdefed code.

        * dom/ActiveDOMObject.h:
            - One-argument constructors should be explicit.
        * dom/ScriptExecutionContext.cpp:
        (WebCore::ScriptExecutionContext::~ScriptExecutionContext):
        * dom/ScriptExecutionContext.h:
        * html/DOMURL.cpp:
        (WebCore::DOMURL::DOMURL):
        (WebCore::DOMURL::~DOMURL):
        * html/DOMURL.h:

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

        Factor ContextDestructionObserver out of ActiveDOMObject
        https://bugs.webkit.org/show_bug.cgi?id=71153

        Reviewed by Sam Weinig.

        This patch paves the way to make more objects observe the destruction
        of ScriptExecutioContext without needing to add ifdefs to
        ScriptExecutionContext.h/cpp.  (As an example, see DOMURL.)

        * dom/ActiveDOMObject.cpp:
        (WebCore::ContextDestructionObserver::ContextDestructionObserver):
        (WebCore::ContextDestructionObserver::~ContextDestructionObserver):
        (WebCore::ContextDestructionObserver::contextDestroyed):
        (WebCore::ActiveDOMObject::ActiveDOMObject):
        (WebCore::ActiveDOMObject::~ActiveDOMObject):
        * dom/ActiveDOMObject.h:
        (WebCore::ContextDestructionObserver::scriptExecutionContext):
        * dom/ScriptExecutionContext.cpp:
        (WebCore::ScriptExecutionContext::~ScriptExecutionContext):
        (WebCore::ScriptExecutionContext::didCreateActiveDOMObject):
        (WebCore::ScriptExecutionContext::willDestroyActiveDOMObject):
        (WebCore::didCreateDestructionObserver):
        (WebCore::willDestroyDestructionObserver):
        * dom/ScriptExecutionContext.h:

2011-10-28  Tim Horton  <timothy_horton@apple.com>

        One more unreviewed build fix due to r98775.

        No new tests.

        * WebCore.vcproj/WebCore.vcproj:

2011-10-28  James Robinson  <jamesr@chromium.org>

        [chromium] Track wheel event handler registration and pass to input filter
        https://bugs.webkit.org/show_bug.cgi?id=71078

        Reviewed by Kenneth Russell.

        This propagates mouse wheel registration notifications to the compositor input filter. If there are any handlers
        registered, which includes JS handlers and scrollable areas other than the main view, the input filter will pass
        mouse wheel events to the widget. Otherwise when threaded compositing is enabled the input filter translates
        wheel events into root layer scrolling.

        Only changes behavior with an off-by-default flag enabled, so no tests.

        * platform/graphics/chromium/cc/CCLayerTreeHost.cpp:
        (WebCore::CCLayerTreeHost::CCLayerTreeHost):
        (WebCore::CCLayerTreeHost::finishCommitOnImplThread):
        (WebCore::CCLayerTreeHost::setHaveWheelEventHandlers):
        * platform/graphics/chromium/cc/CCLayerTreeHost.h:
        * platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:
        (WebCore::CCLayerTreeHostImpl::CCLayerTreeHostImpl):
        (WebCore::CCLayerTreeHostImpl::haveWheelEventHandlers):
        * platform/graphics/chromium/cc/CCLayerTreeHostImpl.h:
        (WebCore::CCLayerTreeHostImpl::setHaveWheelEventHandlers):
        * platform/graphics/chromium/cc/CCScrollController.h:

2011-10-28  Tim Horton  <timothy_horton@apple.com>

        Unreviewed build fix due to r98775.

        No new tests.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * WebCore.gypi:
        * WebCore.pro:

2011-10-28  Simon Fraser  <simon.fraser@apple.com>

        If visibility changes while an accelerated animation is running, element jumps around
        https://bugs.webkit.org/show_bug.cgi?id=29984

        Reviewed by Chris Marrin.
        
        Compositing now affects whether RenderLayers for visibility:hidden elements
        are included in z-order lists. So we have to dirty those lists when we enter
        compopsiting mode.

        Test: compositing/visibility/animation-visibility.html

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateVisibilityStatus): Removed trailing whitespace.
        (WebCore::RenderLayer::dirtyZOrderLists): Call dirtyZOrderListsInternal(), which doesn't have
        to ping the compositor.
        (WebCore::RenderLayer::dirtyZOrderListsInternal):
        (WebCore::RenderLayer::dirtyZOrderListsIncludingDescendants): Recursively dirty z-order
        lists.
        * rendering/RenderLayer.h:
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::enableCompositingMode): When going into compositing mode,
        dirty all z-order lists.

2011-10-28  Tim Horton  <timothy_horton@apple.com>

        Implement CSS3 Images cross-fade() image function
        https://bugs.webkit.org/show_bug.cgi?id=52162
        <rdar://problem/10209254>

        Reviewed by Simon Fraser.

        Parse -webkit-cross-fade according to the CSS3 Images Values specification.

        Also, adjust other CSS parsing functions to support nested functions, by using a specific CSS value list
        instead of the global one. This allows - for example - cross-fade to pass each of its arguments back into
        parseFillImage and to successfully parse image functions in this fashion.

        Test: fast/css/getComputedStyle/computed-style-cross-fade.html

        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSCrossfadeValue.cpp: Added.
        (WebCore::CSSCrossfadeValue::~CSSCrossfadeValue):
        (WebCore::CSSCrossfadeValue::cssText):
        (WebCore::CSSCrossfadeValue::fixedSize):
        (WebCore::CSSCrossfadeValue::image):
        * css/CSSCrossfadeValue.h: Added.
        (WebCore::CSSCrossfadeValue::create):
        (WebCore::CSSCrossfadeValue::isFixedSize):
        (WebCore::CSSCrossfadeValue::setFromImage):
        (WebCore::CSSCrossfadeValue::setToImage):
        (WebCore::CSSCrossfadeValue::setPercentage):
        (WebCore::CSSCrossfadeValue::CSSCrossfadeValue):
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):
        (WebCore::CSSParser::parseContent):
        (WebCore::CSSParser::parseFillImage):
        (WebCore::CSSParser::parseFillProperty):
        (WebCore::CSSParser::parseBorderImage):
        (WebCore::CSSParser::parseDeprecatedGradient):
        (WebCore::CSSParser::parseLinearGradient):
        (WebCore::CSSParser::parseRadialGradient):
        (WebCore::CSSParser::isGeneratedImageValue):
        (WebCore::CSSParser::parseGeneratedImage):
        (WebCore::CSSParser::parseCrossfade):
        (WebCore::CSSParser::parseCanvas):
        * css/CSSParser.h:

2011-10-28  Dan Bernstein  <mitz@apple.com>

        Attempted build fix after r98765.

        * platform/graphics/mac/SimpleFontDataMac.mm:
        (WebCore::SimpleFontData::platformWidthForGlyph):

2011-10-28  Chris Marrin  <cmarrin@apple.com>

        CSS grammar doesn't support functions with no parameters
        https://bugs.webkit.org/show_bug.cgi?id=69110

        Reviewed by Dean Jackson.

        Add rule to grammar to accept functions with 0 args and return
        this case with a CSSParserValueList with 0 values. Also fixed
        filter creation function to properly handle filters with 0
        arguments.

        * css/CSSGrammar.y:
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::createFilterOperations):

2011-10-28  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r98757.
        http://trac.webkit.org/changeset/98757
        https://bugs.webkit.org/show_bug.cgi?id=71150

        crashes webkit_unit_tests on chromium windows (Requested by
        johnny_g on #webkit).

        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::drawLayersOntoRenderSurfaces):
        * platform/graphics/chromium/cc/CCLayerTreeHost.cpp:
        (WebCore::CCLayerTreeHost::paintLayerContents):
        (WebCore::CCLayerTreeHost::updateCompositorResources):
        * platform/graphics/chromium/cc/CCLayerTreeHostCommon.cpp:
        (WebCore::calculateDrawTransformsAndVisibilityInternal):

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

        Rubber-stamped by Eric Seidel.

        Fix namespace indent in ScriptExecutionContext.h.

        * dom/ScriptExecutionContext.h:
        (WebCore::ScriptExecutionContext::isDocument):
        (WebCore::ScriptExecutionContext::isWorkerContext):
        (WebCore::ScriptExecutionContext::setHasOpenDatabases):
        (WebCore::ScriptExecutionContext::hasOpenDatabases):
        (WebCore::ScriptExecutionContext::url):
        (WebCore::ScriptExecutionContext::completeURL):
        (WebCore::ScriptExecutionContext::securityOrigin):
        (WebCore::ScriptExecutionContext::contentSecurityPolicy):
        (WebCore::ScriptExecutionContext::activeDOMObjects):
        (WebCore::ScriptExecutionContext::suspendScriptedAnimationControllerCallbacks):
        (WebCore::ScriptExecutionContext::resumeScriptedAnimationControllerCallbacks):
        (WebCore::ScriptExecutionContext::messagePorts):
        (WebCore::ScriptExecutionContext::domUrls):
        (WebCore::ScriptExecutionContext::ref):
        (WebCore::ScriptExecutionContext::deref):
        (WebCore::ScriptExecutionContext::Task::Task):
        (WebCore::ScriptExecutionContext::Task::isCleanupTask):

2011-10-28  John Sullivan  <sullivan@apple.com>

        WebCore part of:
        https://bugs.webkit.org/show_bug.cgi?id=71142
        Whether backspace goes Back should be configurable

        Reviewed by Sam Weinig.

        * page/EventHandler.cpp:
        (WebCore::EventHandler::defaultBackspaceEventHandler):
        Bail out if backspace navigation is not enabled.

        * page/Settings.cpp:
        (WebCore::Settings::Settings):
        Initialize m_backspaceKeyNavigationEnabled to true to match current behavior.

        * page/Settings.h:
        Declared m_backspaceKeyNavigationEnabled.
        (WebCore::Settings::setBackspaceKeyNavigationEnabled):
        New function, simple setter.
        (WebCore::Settings::backspaceKeyNavigationEnabled):
        New function, simple getter.

2011-10-28  Emil A Eklund  <eae@chromium.org>

        Overridden clippedOverflowRectForRepaint() still uses IntRects
        https://bugs.webkit.org/show_bug.cgi?id=71046

        Reviewed by Simon Fraser.

        Change all virtual clippedOverflowRectForRepaint functions to use the
        same signature.

        No new tests.

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::rectWithOutlineForRepaint):
        (WebCore::RenderObject::clippedOverflowRectForRepaint):
        * rendering/RenderObject.h:
        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::clippedOverflowRectForRepaint):
        * rendering/RenderReplaced.h:
        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::clippedOverflowRectForRepaint):
        * rendering/RenderTableCell.h:
        * rendering/RenderTableCol.cpp:
        (WebCore::RenderTableCol::clippedOverflowRectForRepaint):
        * rendering/RenderTableCol.h:
        * rendering/RenderTableRow.cpp:
        (WebCore::RenderTableRow::clippedOverflowRectForRepaint):
        * rendering/RenderTableRow.h:
        * rendering/RenderText.cpp:
        (WebCore::RenderText::clippedOverflowRectForRepaint):
        * rendering/RenderText.h:

2011-10-28  Adam Klein  <adamk@chromium.org>

        Remove unused parsers for 'exception' and 'alias' IDL keywords
        https://bugs.webkit.org/show_bug.cgi?id=71140

        Reviewed by Adam Barth.

        * bindings/scripts/IDLParser.pm:
        (ParseInterface):
        (DetermineParseMode):
        (ProcessSection):
        * bindings/scripts/IDLStructure.pm:

2011-10-28  Dan Bernstein  <mitz@apple.com>

        <rdar://problem/10288006> Emoji characters are too close to each other in small font size

        Reviewed by Sam Weinig.

        * platform/graphics/mac/SimpleFontDataMac.mm:
        (WebCore::SimpleFontData::platformWidthForGlyph): If the font is a color bitmap font, use
        -[NSFont advancementForGlyph:] instead of wkGetGlyphTransformedAdvances().

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

        Remove unused default constructor
        https://bugs.webkit.org/show_bug.cgi?id=71136

        Reviewed by Eric Seidel.

        No one is calling this constructor anymore now that we've fixed the
        callers.

        * dom/make_exception_code_description.pl:
        (generateHeader):

2011-10-28  Ken Buchanan <kenrb@chromium.org>

        Crash when splitting inline flows with generated floats
        https://bugs.webkit.org/show_bug.cgi?id=70458

        Reviewed by David Hyatt.

        When lineBoxes on a RenderBlock are being deleted, we now check the floating object list to
        ensure references to them are being cleared.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::deleteLineBoxTree): Remove references to lineBox when deleting them

2011-10-28  Simon Fraser  <simon.fraser@apple.com>

        Remove Leopard-only code from GraphicsLayerCA
        https://bugs.webkit.org/show_bug.cgi?id=71141

        Reviewed by Chris Marrin.

        Remove !HAVE_MODERN_QUARTZCORE code, which was only
        used on Leopard. updateContentsTransform() became a no-op,
        so could be removed.

        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::getValueFunctionNameForTransformOperation):
        (WebCore::GraphicsLayerCA::GraphicsLayerCA):
        (WebCore::GraphicsLayerCA::addAnimation):
        (WebCore::GraphicsLayerCA::updateGeometry):
        (WebCore::GraphicsLayerCA::setTransformAnimationEndpoints):
        (WebCore::GraphicsLayerCA::setTransformAnimationKeyframes):
        (WebCore::GraphicsLayerCA::swapFromOrToTiledLayer):
        (WebCore::GraphicsLayerCA::defaultContentsOrientation):
        (WebCore::GraphicsLayerCA::updateOpacityOnLayer):
        * platform/graphics/ca/GraphicsLayerCA.h:

2011-10-28  Adrienne Walker  <enne@google.com>

        [chromium] Implicitly skip render surfaces that won't be drawn
        https://bugs.webkit.org/show_bug.cgi?id=71038

        Rather than having redundant checks in three places for how to walk
        through a render surface list, instead don't add render surfaces that
        don't need to get rendered to the render surface list.

        Reviewed by James Robinson.

        Covered by existing layout tests.

        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::drawLayersOntoRenderSurfaces):
        * platform/graphics/chromium/cc/CCLayerTreeHost.cpp:
        (WebCore::CCLayerTreeHost::paintLayerContents):
        (WebCore::CCLayerTreeHost::updateCompositorResources):
        * platform/graphics/chromium/cc/CCLayerTreeHostCommon.cpp:
        (WebCore::calculateDrawTransformsAndVisibilityInternal):

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

        Autogenerate Exception-downcast code in bindings
        https://bugs.webkit.org/show_bug.cgi?id=71108

        Reviewed by Eric Seidel.

        This patch uses the same generated code style as we're using for Events
        to generate the downcasts for the Exception types in the bindings.
        This cause me to refactor more code from make_event_factory.pl into
        InFilesCompiler.pm.

        After this patch, some of these files and scripts are misnamed.  I'll
        rename them in a followup patch.

        * DerivedSources.make:
        * GNUmakefile.am:
        * GNUmakefile.list.am:
        * WebCore.gyp/WebCore.gyp:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSDOMBinding.cpp:
        (WebCore::setDOMException):
        * bindings/objc/ExceptionHandlers.mm:
        (WebCore::raiseDOMException):
        * bindings/scripts/InFilesCompiler.pm:
        (initializeFromCommandLine):
        (compile):
        (interfaceForItem):
        (toMacroStyle):
        (generateInterfacesHeader):
        (generateHeadersHeader):
        * bindings/v8/V8Proxy.cpp:
        (WebCore::V8Proxy::setDOMException):
        * dom/ExceptionCodeDescription.in:
        * dom/make_event_factory.pl:
        (generateCode):
        (generateImplementation):
        * dom/make_exception_code_description.pl:
        (defaultItemFactory):
        (generateCode):

2011-10-28  Simon Fraser  <simon.fraser@apple.com>

        Fix builds which have ACCELERATED_COMPOSITING disabled.

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateZOrderLists):

2011-10-28  Erik Arvidsson  <arv@chromium.org>

        Remove LegacyDefaultOptionalArguments flag from inspector IDLs
        https://bugs.webkit.org/show_bug.cgi?id=65748

        Reviewed by Adam Barth.

        Covered by existing tests.

        * inspector/InjectedScriptHost.idl:
        * inspector/InspectorFrontendHost.idl:
        * inspector/JavaScriptCallFrame.idl:

2011-10-28  Joshua Bell  <jsbell@chromium.org>

        IndexedDB: Database metadata changes should be tied to transaction
        https://bugs.webkit.org/show_bug.cgi?id=70974

        Reviewed by Tony Chang.

        Database metadata (that is, the version string) was rolled back
        on abort by an abort task. If the abort task didn't run e.g.
        due to a crash, the metadata would not be reverted. All of the
        other store/index/data changes were written into the transaction
        itself, so the metadata now is too. Refactored the metadata
        get/create/update methods for clarity as well.

        Note that the new tests don't actually verify that the code handles
        this case; that will need to be done with persistence tests
        that span multiple runs of the browser and induce crashes.
        The new tests do verify that these changes don't cause regressions
        not caught by other tests.

        Tests: storage/indexeddb/open-during-transaction.html
               storage/indexeddb/version-change-abort.html

        * storage/IDBBackingStore.h:
        * storage/IDBDatabaseBackendImpl.cpp:
        (WebCore::IDBDatabaseBackendImpl::IDBDatabaseBackendImpl):
        (WebCore::IDBDatabaseBackendImpl::setVersionInternal):
        * storage/IDBLevelDBBackingStore.cpp:
        (WebCore::IDBLevelDBBackingStore::getIDBDatabaseMetaData):
        (WebCore::IDBLevelDBBackingStore::createIDBDatabaseMetaData):
        (WebCore::IDBLevelDBBackingStore::updateIDBDatabaseMetaData):
        * storage/IDBLevelDBBackingStore.h:

2011-10-28  Luke Macpherson   <macpherson@chromium.org>

        Use enum instead of bool to represent -webkit-column-span property.
        https://bugs.webkit.org/show_bug.cgi?id=70867

        Reviewed by Darin Adler.

        Covered by existing tests.

        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        (WebCore::CSSPrimitiveValue::operator ColumnSpan):
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::createAnonymousColumnSpanBlock):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::propagateStyleToAnonymousChildren):
        * rendering/style/RenderStyle.h:
        (WebCore::InheritedFlags::columnSpan):
        (WebCore::InheritedFlags::setColumnSpan):
        (WebCore::InheritedFlags::initialColumnSpan):
        * rendering/style/RenderStyleConstants.h:
        * rendering/style/StyleMultiColData.h:

2011-10-28  Mark Hahnenberg  <mhahnenberg@apple.com>

        De-virtualize isGlobalObject, isVariableObject, isActivationObject, and isErrorInstance in JSObject
        https://bugs.webkit.org/show_bug.cgi?id=70968

        Reviewed by Geoffrey Garen.

        No new tests.

        * bindings/js/JSDOMGlobalObject.h: Changed JSType provided to TypeInfo in createStructure since this 
        class inherits from JSGlobalObject. 
        (WebCore::JSDOMGlobalObject::createStructure):
        * bindings/js/JSDOMWindowBase.h: Ditto
        (WebCore::JSDOMWindowBase::createStructure):
        * bindings/js/JSWorkerContextBase.h: Ditto
        (WebCore::JSWorkerContextBase::createStructure):
        * bindings/scripts/CodeGeneratorJS.pm: Added extra check to make sure subclasses of JSGlobalObject,
        namely JSDOMWindow and JSWorkerContext, get their special JSType in their createStructure function.
        (GenerateHeader):

2011-10-28  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r98736.
        http://trac.webkit.org/changeset/98736
        https://bugs.webkit.org/show_bug.cgi?id=71125

        This patch broke perf/array-binary-search.html test (Requested
        by annacc on #webkit).

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::loadTextTracks):
        (WebCore::HTMLMediaElement::addTrack):
        * html/HTMLMediaElement.h:
        * html/HTMLTrackElement.cpp:
        (WebCore::HTMLTrackElement::insertedIntoTree):
        (WebCore::HTMLTrackElement::willRemove):
        * html/HTMLTrackElement.h:
        * html/LoadableTextTrack.cpp:
        (WebCore::LoadableTextTrack::cueLoadingCompleted):

2011-10-28  Julien Chaffraix  <jchaffraix@webkit.org>

        RenderTableSection::recalcCells should not free its grid
        https://bugs.webkit.org/show_bug.cgi?id=71056

        Reviewed by Darin Adler.

        Refactoring only, no change in behavior.

        r98614 had the bad side effect of clearing the row vector (m_grid) on
        the RenderTableSection when doing a recalcCells. This change removes the
        unneeded free and inline the |row| field into the RowStruct as it made
        no sense to have it as a pointer.

        * rendering/RenderTableSection.cpp:
        (WebCore::setRowLogicalHeightToRowStyleLogicalHeightIfNotRelative):
        (WebCore::RenderTableSection::addChild):
        (WebCore::RenderTableSection::setCellLogicalWidths):
        (WebCore::RenderTableSection::calcRowLogicalHeight):
        (WebCore::RenderTableSection::firstLineBoxBaseline):
        (WebCore::RenderTableSection::appendColumn):
        (WebCore::RenderTableSection::splitColumn):
        Mechanical changes now that |row| is a member of RowStruct.

        (WebCore::RenderTableSection::~RenderTableSection): Clear our row vector.

        (WebCore::RenderTableSection::ensureRows):
        (WebCore::RenderTableSection::recalcCells):
        Those 2 functions were refactored to use fillRowsWithDefaultStartingAtPosition.

        (WebCore::RenderTableSection::fillRowsWithDefaultStartingAtPosition):
        Factored the code to fill the RowStruct structure with default values.

        * rendering/RenderTableSection.h:
        (WebCore::RenderTableSection::cellAt):
        (WebCore::RenderTableSection::primaryCellAt):
        More mechanical change after the |row| field change.

2011-10-28  Anna Cavender  <annacc@chromium.org>

        Implement load notification and events for <track>.
        https://bugs.webkit.org/show_bug.cgi?id=71054

        Reviewed by Eric Carlson.

        Tests: media/track/track-load-error-readyState.html
               media/track/track-load-from-element-readyState.html
               media/track/track-load-from-src-readyState.html

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::loadTextTracks):
        (WebCore::HTMLMediaElement::loadNextTextTrack):
        (WebCore::HTMLMediaElement::trackWasAdded):
        (WebCore::HTMLMediaElement::trackWillBeRemoved):
        (WebCore::HTMLMediaElement::trackSourceChanged):
        * html/HTMLMediaElement.h:
        * html/HTMLTrackElement.cpp:
        (WebCore::HTMLTrackElement::insertedIntoTree):
        (WebCore::HTMLTrackElement::willRemove):
        (WebCore::HTMLTrackElement::parseMappedAttribute):
        (WebCore::HTMLTrackElement::attributeChanged):
        * html/HTMLTrackElement.h:
        * html/LoadableTextTrack.cpp:
        (WebCore::LoadableTextTrack::cueLoadingCompleted):

2011-10-28  Simon Fraser  <simon.fraser@apple.com>

        The HTML5 video element in Safari does not respect "visibility:hidden" CSS property
        https://bugs.webkit.org/show_bug.cgi?id=38829

        Reviewed by James Robinson.
        
        Make compositing and CSS visibility play nicely together.
        
        The main issue was that an old optimization (see bug 4377) caused
        visibility:hidden layers to not appear in the z-order lists, but those
        layers could still become composited, but would remain detached. In addition,
        composited layers which were visibility:hidden would become visible sometimes.
        
        With this fix, the z-order lists always contain all layers when the page
        is in compositing mode. GraphicsLayer is changed to ensure that visibility:hidden
        layers show no content, and visible descendants of hidden layers work correctly.

        Tests: compositing/visibility/visibility-composited-transforms.html
               compositing/visibility/visibility-composited.html
               compositing/visibility/visibility-image-layers-dynamic.html
               compositing/visibility/visibility-image-layers.html

        * platform/graphics/GraphicsLayer.cpp:
        (WebCore::GraphicsLayer::GraphicsLayer): Init m_contentsVisible to true.
        (WebCore::GraphicsLayer::dumpProperties): Dump m_contentsVisible if not true.
        * platform/graphics/GraphicsLayer.h:
        (WebCore::GraphicsLayer::contentsAreVisible): Getter for m_contentsVisible.
        (WebCore::GraphicsLayer::setContentsVisible): Setter for m_contentsVisible.
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::setContentsVisible): Override setContentsVisible.
        (WebCore::GraphicsLayerCA::commitLayerChangesBeforeSublayers): Handle ContentsVisibilityChanged
        flag
        (WebCore::GraphicsLayerCA::updateSublayerList): Only parent the m_contentsLayer if the layer
        has visible contents.
        (WebCore::GraphicsLayerCA::updateContentsVisibility): For bits painted into the layer itself,
        we hide it by clearing the backing store.
        * platform/graphics/ca/GraphicsLayerCA.h: Removed obsolete comment on the DrawsContentChanged flag,
        added ContentsVisibilityChanged flag.
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateZOrderLists): If we're in compositing mode, include all layers
        in the z-order lists.
        (WebCore::RenderLayer::collectLayers): New param to specify whether we need to collect all layers.
        * rendering/RenderLayer.h:
        (WebCore::RenderLayer::hasVisibleDescendant): Add comment about the need for an assertion in hasVisibleContent()
        , and assertion in hasVisibleDescendant().
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateGraphicsLayerGeometry): Call setContentsVisible() on the GraphicsLayer.
        (WebCore::RenderLayerBacking::isSimpleContainerCompositingLayer): We can use simple container layers in cases
        where visibility:hidden causes layer content to not be drawn.
        (WebCore::RenderLayerBacking::hasVisibleNonCompositingDescendants): Renamed from hasNonCompositingDescendants()
        because it now also looks at visibility to decide when things are visible.
        * rendering/RenderLayerBacking.h: hasNonCompositingDescendants() renamed to hasVisibleNonCompositingDescendants().

2011-10-22  Philippe Normand  <pnormand@igalia.com>

        [GTK] Build fixes for glib 2.31 (current master)
        https://bugs.webkit.org/show_bug.cgi?id=70679

        Reviewed by Martin Robinson.

        g_cond_new and g_mutex_new have been replaced by _init
        functions. Same for _free, replaced by _clear.

        * platform/graphics/gstreamer/VideoSinkGStreamer.cpp:
        (webkit_video_sink_init):
        (webkit_video_sink_dispose):

2011-10-28  Jochen Eisinger  <jochen@chromium.org>

        Rename a number of methods mentioning JavaScript to just Script instead
        https://bugs.webkit.org/show_bug.cgi?id=71105

        Reviewed by Adam Barth.

        * WebCore.exp.in:
        * bindings/ScriptControllerBase.cpp:
        (WebCore::ScriptController::canExecuteScripts):
        * bindings/v8/V8Proxy.cpp:
        (WebCore::V8Proxy::handleOutOfMemory):
        * loader/FrameLoaderClient.h:
        (WebCore::FrameLoaderClient::allowScript):
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::canRequest):
        * page/Settings.cpp:
        (WebCore::Settings::Settings):
        (WebCore::Settings::setScriptEnabled):
        * page/Settings.h:
        (WebCore::Settings::isScriptEnabled):
        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::dataChanged):

2011-10-28  Pavel Feldman  <pfeldman@google.com>

        Reset line numbers for scripts generated with document.write.
        https://bugs.webkit.org/show_bug.cgi?id=71099

        Reviewed by Yury Semikhatsky.

        Test: http/tests/inspector-enabled/document-write.html

        * dom/Document.h:
        (WebCore::Document::isInDocumentWrite):
        * dom/ScriptElement.cpp:
        (WebCore::ScriptElement::prepareScript):

2011-10-28  Adam Roben  <aroben@apple.com>

        Mac build fix after r98711

        * WebCore.xcodeproj/project.pbxproj: Mark ExceptionCodeDescription.h private so WebKit can
        find it.

2011-10-28  Antti Koivisto  <antti@apple.com>

        [Chromium] css3/font-feature-settings-rendering.html has incorrect image result after r98542
        https://bugs.webkit.org/show_bug.cgi?id=71019

        Reviewed by Andreas Kling.
        
        These properties need to be marked inherited too.
        
        Note that the new test case doesn't fail even without the patch. If I understand correctly
        the image test in the title is pretty much the only way to see this. However the
        new test improves code coverage and protects against future regressions.

        Test: fast/css/inherited-properties-rare-text.html

        * css/CSSProperty.cpp:
        (WebCore::CSSProperty::isInheritedProperty):

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

        Remove getExceptionCodeDescription()
        https://bugs.webkit.org/show_bug.cgi?id=71103

        Reviewed by Eric Seidel.

        This function serves no purpose.

        * bindings/js/JSDOMBinding.cpp:
        (WebCore::setDOMException):
        * bindings/objc/ExceptionHandlers.mm:
        (WebCore::raiseDOMException):
        * bindings/scripts/CodeGeneratorGObject.pm:
        ():
        * bindings/scripts/test/GObject/WebKitDOMTestObj.cpp:
        (webkit_dom_test_obj_method_that_requires_all_args_and_throws):
        (webkit_dom_test_obj_method_with_exception):
        (webkit_dom_test_obj_with_script_state_void_exception):
        (webkit_dom_test_obj_with_script_state_obj_exception):
        (webkit_dom_test_obj_get_attr_with_getter_exception):
        (webkit_dom_test_obj_set_attr_with_getter_exception):
        (webkit_dom_test_obj_set_attr_with_setter_exception):
        (webkit_dom_test_obj_set_string_attr_with_getter_exception):
        (webkit_dom_test_obj_set_string_attr_with_setter_exception):
        * bindings/v8/V8Proxy.cpp:
        (WebCore::V8Proxy::setDOMException):
        * dom/ExceptionCode.cpp:
        * dom/ExceptionCode.h:

2011-10-19  Alexander Pavlov  <apavlov@chromium.org>

        Web Inspector: CSS background-image applied inline shows a warning, but still works.
        https://bugs.webkit.org/show_bug.cgi?id=70325

        Reviewed by Antti Koivisto.

        This change eliminates the "non-parsed property" warning displayed next to any
        "background-image" property of an element's inline style.

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseDeclaration):
        * css/CSSParser.h:
        * inspector/InspectorStyleSheet.cpp:
        (WebCore::InspectorStyle::setPropertyText):
        (WebCore::InspectorStyleSheetForInlineStyle::getStyleAttributeRanges):

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

        Attempt to fixenate Qt.

        * CodeGenerators.pri:
        * dom/make_event_factory.pl:
        (toMacroStyle):

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

        ExceptionCode.cpp shouldn't need to know about every feature that throws exceptions
        https://bugs.webkit.org/show_bug.cgi?id=70890

        Reviewed by Eric Seidel.

        Generate the feature-specific parts of ExceptionCode.cpp from a ".in"
        file.  This is an incremental step towards inlining
        getExceptionCodeDescription into its callers and replacing the switch
        statements at those locations with autogenerated code.

        * CMakeLists.txt:
        * CodeGenerators.pri:
        * DerivedSources.make:
        * GNUmakefile.am:
        * GNUmakefile.list.am:
        * WebCore.gyp/WebCore.gyp:
        * WebCore.gyp/scripts/action_makenames.py:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSDOMBinding.cpp:
        (WebCore::setDOMException):
        * bindings/v8/V8Proxy.cpp:
        (WebCore::V8Proxy::setDOMException):
        * dom/DOMCoreException.cpp:
        (WebCore::DOMCoreException::initializeDescription):
        * dom/ExceptionCode.cpp:
        (WebCore::getExceptionCodeDescription):
        * dom/ExceptionCode.h:
        * dom/ExceptionCodeDescription.in: Added.
        * dom/make_exception_code_description.pl: Added.
        (defaultItemFactory):
        (generateCode):
        (generateHeader):
        (generateImplementation):

2011-10-28  Yury Semikhatsky  <yurys@chromium.org>

        Web Inspector: CallStackSidebarPane should remove discarded Placards from RawSourceCode listeners list
        https://bugs.webkit.org/show_bug.cgi?id=70996

        Reviewed by Pavel Feldman.

        Test: inspector/debugger/callstack-placards-discarded.html

        * inspector/front-end/CallStackSidebarPane.js:
        (WebInspector.CallStackSidebarPane.prototype.update):
        * inspector/front-end/DebuggerPresentationModel.js:
        (WebInspector.DebuggerPresentationModel.prototype.createPlacard):
        (WebInspector.DebuggerPresentationModel.CallFramePlacard):
        (WebInspector.DebuggerPresentationModel.CallFramePlacard.prototype.discard):
        (WebInspector.DebuggerPresentationModel.CallFramePlacard.prototype._update):
        * inspector/front-end/Placard.js:
        (WebInspector.Placard.prototype.toggleSelected):
        (WebInspector.Placard.prototype.discard):

2011-10-28  Jochen Eisinger  <jochen@chromium.org>

        Add allowScriptFromSource callback to FrameLoaderClient
        https://bugs.webkit.org/show_bug.cgi?id=71013

        Reviewed by Darin Fisher.

        Test: platform/chromium/permissionclient/script-permissions.html

        * loader/FrameLoaderClient.h:
        (WebCore::FrameLoaderClient::allowScriptFromSource):
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::canRequest):

2011-10-27  Adam Barth  <abarth@webkit.org>

        Refactor make_event_factory.pl to use InFilesCompiler.pm
        https://bugs.webkit.org/show_bug.cgi?id=71094

        Reviewed by Eric Seidel.

        This refactoring helps share code with
        make_exception_code_descriptions.pl, which is coming in a future patch.
        I have a dream of refactoring make_names.pl to use this module as well.

        * CodeGenerators.pri:
        * DerivedSources.make:
        * GNUmakefile.am:
        * WebCore.gyp/scripts/action_makenames.py:
        * bindings/scripts/InFilesCompiler.pm: Added.
        (itemHandler):
        (parameterHandler):
        (new):
        (compile):
        (license):
        * dom/make_event_factory.pl:
        (defaultItemFactory):
        (interfaceForEvent):
        (generateCode):
        (printFactoryFile):
        (printMacroFile):
        (printHeadersFile):

2011-10-26  Nat Duca  <nduca@chromium.org>

        [chromium] Implement frame rate control portions of CCScheduler
        https://bugs.webkit.org/show_bug.cgi?id=70713

        Reviewed by James Robinson.

        * WebCore.gypi:
        * platform/graphics/chromium/cc/CCDelayBasedTimeSource.cpp: Added.
        (WebCore::CCDelayBasedTimeSource::setActive):
        (WebCore::CCDelayBasedTimeSource::postTickTask):
        (WebCore::CCDelayBasedTimeSource::onTick):
        * platform/graphics/chromium/cc/CCDelayBasedTimeSource.h: Added.
        (WebCore::CCDelayBasedTimeSource::CCDelayBasedTimeSource):
        (WebCore::CCDelayBasedTimeSource::~CCDelayBasedTimeSource):
        (WebCore::CCDelayBasedTimeSource::setClient):
        (WebCore::CCDelayBasedTimeSource::monotonicallyIncreasingTime):
        * platform/graphics/chromium/cc/CCFrameRateController.cpp: Added.
        (WebCore::CCFrameRateControllerTimeSourceAdapter::create):
        (WebCore::CCFrameRateControllerTimeSourceAdapter::~CCFrameRateControllerTimeSourceAdapter):
        (WebCore::CCFrameRateControllerTimeSourceAdapter::onTimerTick):
        (WebCore::CCFrameRateControllerTimeSourceAdapter::CCFrameRateControllerTimeSourceAdapter):
        (WebCore::CCFrameRateController::CCFrameRateController):
        (WebCore::CCFrameRateController::~CCFrameRateController):
        (WebCore::CCFrameRateController::onTimerTick):
        (WebCore::CCFrameRateController::didBeginFrame):
        (WebCore::CCFrameRateController::didFinishFrame):
        (WebCore::CCFrameRateController::didAbortAllPendingFrames):
        * platform/graphics/chromium/cc/CCFrameRateController.h: Added.
        (WebCore::CCFrameRateControllerClient::~CCFrameRateControllerClient):
        (WebCore::CCFrameRateController::setClient):
        (WebCore::CCFrameRateController::setActive):
        * platform/graphics/chromium/cc/CCTimeSource.h: Added.
        (WebCore::CCTimeSourceClient::~CCTimeSourceClient):
        (WebCore::CCTimeSource::~CCTimeSource):

2011-10-27  Kentaro Hara  <haraken@chromium.org>

        Deprecate [V8ConstructorSetsActiveDOMWrapper] IDL
        https://bugs.webkit.org/show_bug.cgi?id=71088

        Reviewed by Adam Barth.

        I introduced [V8ConstructorSetsActiveDOMWrapper] IDL in bug 66536,
        but I found that it has the same meaning as [ActiveDOMObject] IDL.
        This patch removes [V8ConstructorSetsActiveDOMWrapper] IDL.

        No change in behavior.

        Tests: fast/dom/global-constructors.html
               fast/eventsource/eventsource-constructor.html
               fast/eventsource/eventsource-attribute-listeners.html
               fast/files/blob-slice-test.html
               fast/files/file-reader-abort.html
               ui_tests:WorkerTest.FLAKY_SharedWorkerFastConstructor
               ui_tests:WorkerTest.FLAKY_SharedWorkerFastName
               ui_tests:WorkerTest.FLAKY_WorkerConstructor
               ui_tests:WorkerTest.FLAKY_WorkerEventListener

        * bindings/scripts/CodeGeneratorV8.pm: Replaced "V8ConstructorSetsActiveDOMWrapper" with "ActiveDOMObject".
        (GenerateConstructorCallback):
        * bindings/scripts/test/TestInterface.idl: Ditto.
        * bindings/scripts/test/JS/JSTestInterface.cpp: Updated a test result.
        (WebCore::isObservable):
        (WebCore::JSTestInterfaceOwner::isReachableFromOpaqueRoots):
        (WebCore::JSTestInterfaceOwner::finalize):
        * bindings/scripts/test/JS/JSTestInterface.h: Ditto.
        (WebCore::wrapperOwner):
        (WebCore::wrapperContext):
        * bindings/scripts/test/JS/JSTestMediaQueryListListener.cpp: Ditto.
        * bindings/scripts/test/JS/JSTestMediaQueryListListener.h: Ditto.
        * bindings/scripts/test/JS/JSTestObj.cpp: Ditto.
        * bindings/scripts/test/JS/JSTestObj.h: Ditto.
        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp: Ditto.
        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.h: Ditto.
        * bindings/scripts/test/V8/V8TestInterface.cpp: Ditto.
        (WebCore::V8TestInterface::toActiveDOMObject):
        (WebCore::V8TestInterface::wrapSlow):
        * bindings/scripts/test/V8/V8TestInterface.h: Ditto.
        (WebCore::V8TestInterface::existingWrapper):
        * fileapi/FileReader.idl: Removed [V8ConstructorSetsActiveDOMWrapper] IDL.
        * mediastream/PeerConnection.idl: Ditto.
        * page/EventSource.idl: Ditto.
        * workers/SharedWorker.idl: Ditto.
        * workers/Worker.idl: Ditto.

2011-10-28  Yuta Kitamura  <yutak@chromium.org>

        Race condition in SocketStreamHandleCFNet when PAC script is used
        https://bugs.webkit.org/show_bug.cgi?id=70894

        Reviewed by Alexey Proskuryakov.

        Pass callback functions that call ref() or deref() as retain/release member
        of CFStreamClientContext.

        No new tests, as it is not possible to write a test with PAC script enabled.

        * platform/network/cf/SocketStreamHandle.h:
        * platform/network/cf/SocketStreamHandleCFNet.cpp:
        (WebCore::SocketStreamHandle::scheduleStreams):
        (WebCore::SocketStreamHandle::retainSocketStreamHandle):
        (WebCore::SocketStreamHandle::releaseSocketStreamHandle):
        (WebCore::SocketStreamHandle::pacExecutionCallbackMainThread):
        This callback may be called after platformClose() is already called. We should
        not create new streams in this case.
        (WebCore::SocketStreamHandle::executePACFileURL):
        (WebCore::SocketStreamHandle::readStreamCallback):
        This manual ref/deref can be safely removed as m_readStream holds the reference.
        (WebCore::SocketStreamHandle::writeStreamCallback):
        Ditto.

2011-10-27  Arthur Hsu  <arthurhsu@chromium.org>

        Reland patch ensure font load before calling Skia during printing
        https://bugs.webkit.org/show_bug.cgi?id=70390

        Reviewed by James Robinson.

        * platform/graphics/chromium/FontChromiumWin.cpp:
        (WebCore::Font::drawGlyphs):
        * platform/graphics/skia/SkiaFontWin.cpp:
        (WebCore::paintSkiaText):

2011-10-27  Adam Barth  <abarth@webkit.org>

        Attempt to fix the Qt build.

        * WebCore.pro:

2011-10-27  Ryosuke Niwa  <rniwa@webkit.org>

        binding test rebaseline after r98679.

        * bindings/scripts/test/JS/JSTestInterface.cpp:
        (WebCore::JSTestInterfaceConstructor::constructJSTestInterface):
        * bindings/scripts/test/JS/JSTestMediaQueryListListener.cpp:
        (WebCore::jsTestMediaQueryListListenerPrototypeFunctionMethod):
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::setJSTestObjStringAttr):
        (WebCore::setJSTestObjStringAttrWithGetterException):
        (WebCore::setJSTestObjStringAttrWithSetterException):
        (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::jsTestObjPrototypeFunctionOverloadedMethod6):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethod7):
        (WebCore::jsTestObjPrototypeFunctionClassMethodWithOptional):

2011-10-27  Adam Barth  <abarth@webkit.org>

        Move type-specific exception descriptions into the implementation files for each type
        https://bugs.webkit.org/show_bug.cgi?id=71081

        Reviewed by Eric Seidel.

        There's no reason to centralize this information.  It belongs with each
        exception type.  This patch is in preparation for autogenerating the central file.

        * WebCore.xcodeproj/project.pbxproj:
        * dom/DOMCoreException.cpp: Added.
        (WebCore::DOMCoreException::initializeDescription):
        * dom/DOMCoreException.h:
        * dom/EventException.cpp: Copied from Source/WebCore/xml/XMLHttpRequestException.h.
        (WebCore::EventException::initializeDescription):
        * dom/EventException.h:
        * dom/ExceptionBase.h:
        (WebCore::ExceptionBase::code):
        (WebCore::ExceptionBase::name):
        (WebCore::ExceptionBase::message):
        (WebCore::ExceptionBase::description):
        * dom/ExceptionCode.cpp:
        (WebCore::getExceptionCodeDescription):
        * dom/RangeException.cpp: Copied from Source/WebCore/xml/XPathException.h.
        (WebCore::RangeException::initializeDescription):
        * dom/RangeException.h:
        * fileapi/FileException.cpp: Added.
        (WebCore::FileException::initializeDescription):
        * fileapi/FileException.h:
        * fileapi/OperationNotAllowedException.cpp: Copied from Source/WebCore/xml/XMLHttpRequestException.h.
        (WebCore::OperationNotAllowedException::initializeDescription):
        * fileapi/OperationNotAllowedException.h:
        * storage/IDBDatabaseException.cpp: Added.
        (WebCore::IDBDatabaseException::initializeDescription):
        * storage/IDBDatabaseException.h:
        * storage/SQLException.cpp: Added.
        (WebCore::SQLException::initializeDescription):
        * storage/SQLException.h:
        * svg/SVGException.cpp: Copied from Source/WebCore/dom/EventException.h.
        (WebCore::SVGException::initializeDescription):
        * svg/SVGException.h:
        * xml/XMLHttpRequestException.cpp: Copied from Source/WebCore/xml/XMLHttpRequestException.h.
        (WebCore::XMLHttpRequestException::initializeDescription):
        * xml/XMLHttpRequestException.h:
        * xml/XPathException.cpp: Copied from Source/WebCore/xml/XPathException.h.
        (WebCore::XPathException::initializeDescription):
        * xml/XPathException.h:

2011-10-27  Kentaro Hara  <haraken@chromium.org>

        Generate WebKitCSSMatrix constructor for JSC by [Constructor] IDL
        https://bugs.webkit.org/show_bug.cgi?id=70215

        Reviewed by Adam Barth.

        This patch implements [Optional=CallWithNullValue] IDL for JSC.
        While a parameter specified as [Optional=CallWithDefaultValue] is
        handled as a string "undefined", a parameter specified as
        [Optional=CallWithNullValue] is handled as a null string.
        (Note: not a string "null", but a null string).

        c.f. [Optional=CallWithNullValue] is implemented in V8 in bug 67458.

        Tests: fast/dom/global-constructors.html
               transforms/svg-vs-css.xhtml
               transforms/cssmatrix-2d-interface.xhtml
               transforms/cssmatrix-3d-interface.xhtml

        * GNUmakefile.list.am: Removed JSWebKitCSSMatrixCustom.cpp.
        * UseJSC.cmake: Ditto.
        * WebCore.gypi: Ditto.
        * WebCore.pro: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Ditto.
        * bindings/js/JSBindingsAllInOne.cpp: Ditto.
        * bindings/js/JSDOMBinding.h: MAYBE_MISSING_PARAMETER(exec, index, policy) returns the index-th parameter, if the parameter exists. It returns an undefined value, if the index-th parameter is missing and the policy is MissingIsUndefined. It returns an empty value, otherwise (i.e. if the index-th parameter is missing and the policy is MissingIsEmpty).
        * bindings/js/JSWebKitCSSMatrixCustom.cpp: Removed.
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateParametersCheck): Supported [Optional=CallWithNullValue].
        (GenerateConstructorDefinition): Supported [Optional=CallWithNullValue].
        * css/WebKitCSSMatrix.idl: Removed [JSCustomConstructor].

2011-10-27  Julien Chaffraix  <jchaffraix@webkit.org>

        RenderTableCell m_row and m_column should not be signed values
        https://bugs.webkit.org/show_bug.cgi?id=70369

        Reviewed by Darin Adler.

        No new tests, refactoring only.

        The gist of the change is to update row / column handling in the table's
        rendering code to use unsigned values. Not all the code is switched over
        to unsigned but this is a good start.

        Using unsigned makes a lot more sense that allowing some negative indexes
        to creep in the algorithms. Also it enables us to "free" the unused signed
        bit on the 2 RenderTableCell fields that can be used to pack 2 bits in a
        follow-up patch.

        * accessibility/AccessibilityTable.cpp:
        (WebCore::AccessibilityTable::cellForColumnAndRow):
        Removed 2 casts to int as the left side now computes to an unsigned too.
        Added some ASSERT to make sure we don't get negative values (colSpan / rowSpan
        are always >= 1 by definition but better to be safe).

        * accessibility/AccessibilityTableColumn.cpp:
        (WebCore::AccessibilityTableColumn::headerObjectForSection):
        * accessibility/AccessibilityTableColumn.h:
        Switched m_columnIndex to unsigned to remove any signed / unsigned comparisons.

        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::splitColumn):
        (WebCore::RenderTable::calcBorderEnd):
        (WebCore::RenderTable::cellAbove):
        (WebCore::RenderTable::cellBelow):
        (WebCore::RenderTable::cellBefore):
        (WebCore::RenderTable::cellAfter):
        Mostly mechanical changes to avoid signed / unsigned comparisons or casts.

        * rendering/RenderTable.h:
        (WebCore::RenderTable::numEffCols):
        (WebCore::RenderTable::colToEffCol):
        Updated a couple of functions to use an unsigned.

        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::RenderTableCell):
        * rendering/RenderTableCell.h:
        (WebCore::RenderTableCell::col):
        (WebCore::RenderTableCell::setCol):
        (WebCore::RenderTableCell::row):
        (WebCore::RenderTableCell::setRow):
        Updated after switching the fields to unsigned. Also added 2 constants
        to cover the not-initialized-yet value for row and column indexes.
        Note: we don't enforce that you can't reach those indexes but neither
        did the previous code!

        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::RenderTableSection):
        (WebCore::RenderTableSection::addChild):
        (WebCore::RenderTableSection::ensureRows):
        (WebCore::RenderTableSection::setCellLogicalWidths):
        (WebCore::RenderTableSection::calcRowLogicalHeight):
        (WebCore::RenderTableSection::layoutRows):
        (WebCore::RenderTableSection::calcOuterBorderStart):
        (WebCore::RenderTableSection::calcOuterBorderEnd):
        (WebCore::RenderTableSection::recalcCells):
        (WebCore::RenderTableSection::clearGrid):
        (WebCore::RenderTableSection::numColumns):
        (WebCore::RenderTableSection::appendColumn):
        (WebCore::RenderTableSection::splitColumn):
        Lots of mechanical: signed -> unsigned changes. However we had
        to change the logic a bit as it assumed that m_cRow started at
        -1 and increased from there. The new meaning of m_cRow is the
        number of rows seen and m_cRow - 1 is where to insert your new
        cells.

        (WebCore::RenderTableSection::addCell):
        Checked the callers and all increase m_cRow before calling the function.
        Added an ASSERT to catch up wrong usage in the future.

        * rendering/RenderTableSection.h:
        (WebCore::RenderTableSection::numRows): Switched to unsigned.

2011-10-27  Dan Bernstein  <mitz@apple.com>

        Assertion failure (m_text) in RenderText::RenderText() at icanhascheezburger.com
        https://bugs.webkit.org/show_bug.cgi?id=71085

        Reviewed by Jon Honeycutt.

        Test: fast/css-generated-content/attr-missing.html

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty): If the element does not have the attribute specified
        in the attr() function in the content property, set the content to the empty string, per
        <http://www.w3.org/TR/CSS21/generate.html#content>.

2011-10-27  Helder Correia  <helder.correia@palm.com>

        [Qt] Failure to build when QT_NO_CURSOR defined
        https://bugs.webkit.org/show_bug.cgi?id=71060

        Reviewed by Noam Rosenthal.

        PlatformVideoWindowQt needs to wrap some code around #ifndef
        QT_NO_CURSOR in order to build QtWebKit when QT_NO_CURSOR is defined.

        Build fix, no new tests.

        * platform/graphics/gstreamer/PlatformVideoWindowQt.cpp:
        (FullScreenVideoWindow::FullScreenVideoWindow):
        (FullScreenVideoWindow::closeEvent):
        (FullScreenVideoWindow::hideCursor):
        (FullScreenVideoWindow::showCursor):

2011-10-27  Shawn Singh  <shawnsingh@chromium.org>

        [chromium] Track when CCLayerImpl properties have changed.
        https://bugs.webkit.org/show_bug.cgi?id=70442

        Reviewed by James Robinson.

        To determine a good scissor rect, we must determine what
        will change on the screen on the next redraw.  This patch
        tracks the necessary information on CCLayerImpl and marks
        a flag indicating whether this layer will "damage" the screen.
        The other portion of "change", the updateRect, was already
        landed in https://bugs.webkit.org/show_bug.cgi?id=69441.

        New unit test added to CCLayerImplTest to test this patch.

        * platform/graphics/chromium/cc/CCLayerImpl.cpp:
        (WebCore::CCLayerImpl::CCLayerImpl):
        (WebCore::CCLayerImpl::scrollBy):
        (WebCore::CCLayerImpl::noteLayerPropertyChangedForSubtree):
        (WebCore::CCLayerImpl::noteLayerPropertyChangedForDescendants):
        (WebCore::CCLayerImpl::setBounds):
        (WebCore::CCLayerImpl::setMaskLayer):
        (WebCore::CCLayerImpl::setReplicaLayer):
        (WebCore::CCLayerImpl::setDrawsContent):
        (WebCore::CCLayerImpl::setAnchorPoint):
        (WebCore::CCLayerImpl::setAnchorPointZ):
        (WebCore::CCLayerImpl::setMasksToBounds):
        (WebCore::CCLayerImpl::setOpaque):
        (WebCore::CCLayerImpl::setOpacity):
        (WebCore::CCLayerImpl::setPosition):
        (WebCore::CCLayerImpl::setPreserves3D):
        (WebCore::CCLayerImpl::setSublayerTransform):
        (WebCore::CCLayerImpl::setTransform):
        (WebCore::CCLayerImpl::setDebugBorderColor):
        (WebCore::CCLayerImpl::setDebugBorderWidth):
        (WebCore::CCLayerImpl::setContentBounds):
        (WebCore::CCLayerImpl::setScrollPosition):
        (WebCore::CCLayerImpl::setScrollDelta):
        (WebCore::CCLayerImpl::setDoubleSided):
        * platform/graphics/chromium/cc/CCLayerImpl.h:
        (WebCore::CCLayerImpl::layerPropertyChanged):
        (WebCore::CCLayerImpl::resetLayerPropertyChanged):

2011-10-27  Anders Carlsson  <andersca@apple.com>

        Add a Plugin::geometryDidChange that will work with transforms
        https://bugs.webkit.org/show_bug.cgi?id=71072

        Reviewed by Simon Fraser.

        Export symbols needed by WebKit2.

        * WebCore.exp.in:

2011-10-27  Adam Barth  <abarth@webkit.org>

        Exception subtypes have incorrect namespace indentation
        https://bugs.webkit.org/show_bug.cgi?id=71075

        Reviewed by Eric Seidel.

        This patch is in preparation for editing these headers.  We decided to
        not indent namespaces in headers and update the headers as we edited
        them.

        * dom/DOMCoreException.h:
        (WebCore::DOMCoreException::create):
        (WebCore::DOMCoreException::DOMCoreException):
        * dom/EventException.h:
        (WebCore::EventException::create):
        (WebCore::EventException::EventException):
        * dom/RangeException.h:
        (WebCore::RangeException::create):
        (WebCore::RangeException::RangeException):
        * xml/XMLHttpRequestException.h:
        (WebCore::XMLHttpRequestException::create):
        (WebCore::XMLHttpRequestException::XMLHttpRequestException):
        * xml/XPathException.h:
        (WebCore::XPathException::create):
        (WebCore::XPathException::XPathException):

2011-10-27  Kenneth Russell  <kbr@google.com>

        Implement new restrictions on uniform and attribute location lengths
        https://bugs.webkit.org/show_bug.cgi?id=70981

        Reviewed by Chris Marrin.

        Tests: fast/canvas/webgl/attrib-location-length-limits.html
               fast/canvas/webgl/uniform-location-length-limits.html

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::bindAttribLocation):
        (WebCore::WebGLRenderingContext::getAttribLocation):
        (WebCore::WebGLRenderingContext::getUniformLocation):
        (WebCore::WebGLRenderingContext::validateLocationLength):
        * html/canvas/WebGLRenderingContext.h:

2011-10-27  Rafael Weinstein  <rafaelw@chromium.org>

        [MutationObservers] Implement subtree observation of transiently disconnected nodes
        https://bugs.webkit.org/show_bug.cgi?id=70788

        Reviewed by Ryosuke Niwa.

        This patch adds support for observing all descendant nodes reachable from a subtree
        observation until delivery of mutations -- even if they become detached. We do this by
        introducing a "transient registration" which can exist for a short time along side
        normal registrations on Node. Transient registrations have a reference to the node
        which "owns" the subtree observation registration (the "registrationNode"). Transient
        registrations are cleared immediately before mutations are delivered to an observer,
        or when the observer re-observes at the registrationNode, in-effect resetting the
        observation.

        New tests added to fast/mutation/observe-subtree.html.

        * dom/CharacterData.cpp:
        (WebCore::CharacterData::dispatchModifiedEvent):
        * dom/ChildListMutationScope.cpp:
        (WebCore::MutationAccumulationRouter::ChildListMutationAccumulator::ChildListMutationAccumulator):
        (WebCore::MutationAccumulationRouter::ChildListMutationAccumulator::enqueueMutationRecord):
        (WebCore::MutationAccumulationRouter::MutationAccumulationRouter::incrementScopingLevel):
        * dom/ContainerNode.cpp:
        (WebCore::dispatchChildRemovalEvents):
        * dom/Element.cpp:
        (WebCore::enqueueAttributesMutationRecord):
        * dom/Node.cpp:
        (WebCore::addMatchingObservers):
        (WebCore::Node::getRegisteredMutationObserversOfType):
        (WebCore::Node::registerMutationObserver):
        (WebCore::Node::unregisterMutationObserver):
        (WebCore::Node::notifySubtreeObserversOfDisconnection):
        * dom/Node.h:
        * dom/NodeRareData.h:
        (WebCore::MutationObserverEntry::MutationObserverEntry):
        (WebCore::MutationObserverEntry::operator==):
        * dom/WebKitMutationObserver.cpp:
        (WebCore::WebKitMutationObserver::observe):
        (WebCore::unregisterTransientEntries):
        (WebCore::WebKitMutationObserver::disconnect):
        (WebCore::WebKitMutationObserver::observedNodeDestructed):
        (WebCore::WebKitMutationObserver::observedSubtreeWillDisconnect):
        (WebCore::WebKitMutationObserver::clearTransientEntries):
        (WebCore::WebKitMutationObserver::deliver):
        * dom/WebKitMutationObserver.h:

2011-10-27  Pratik Solanki  <psolanki@apple.com>

        Ask CG to not parse image metadata
        https://bugs.webkit.org/show_bug.cgi?id=71029

        Reviewed by Simon Fraser.

        We don't need CG to parse the image metadata since WebCore never uses it. Passing this
        option shaves off time spent under CGImageSourceCopyPropertiesAtIndex. Under Instruments I
        saw the time drop from ~75ms to ~25ms when loading http://boston.com/bigpicture and the
        first link on that page.

        No new tests because no change in functionality.

        * platform/graphics/ImageSource.h:
        * platform/graphics/cg/ImageSourceCG.cpp:
        (WebCore::imageSourceOptions):
        (WebCore::ImageSource::isSizeAvailable):
        (WebCore::ImageSource::frameSizeAtIndex):
        (WebCore::ImageSource::getHotSpot):
        (WebCore::ImageSource::repetitionCount):
        (WebCore::ImageSource::createFrameAtIndex):
        (WebCore::ImageSource::frameDurationAtIndex):

2011-10-27  David Grogan  <dgrogan@chromium.org>

        Move eventqueue from Document to ScriptExecutionContext so that it can be accessed from workers
        https://bugs.webkit.org/show_bug.cgi?id=57789

        Extract interface from EventQueue and create two new subclasses:
        DocumentEventQueue and WorkerEventQueue.  DocumentEventQueue is the
        old EventQueue implementation that uses DOMTimer(0) to post async
        events.  WorkerEventQueue posts events to its thread's message loop.

        Reviewed by David Levin.

        No new tests - IndexedDB will use this but isn't ready yet.  I don't
        know of any other API available in workers that I can test this with.

        * GNUmakefile.list.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/DOMAllInOne.cpp:
        * dom/Document.cpp:
        (WebCore::Document::Document):
        * dom/Document.h:
        (WebCore::Document::eventQueue):
        * dom/DocumentEventQueue.cpp: Renamed from Source/WebCore/dom/EventQueue.cpp.
        (WebCore::shouldDispatchScrollEventSynchronously):
        (WebCore::DocumentEventQueueTimer::DocumentEventQueueTimer):
        (WebCore::DocumentEventQueueTimer::fired):
        (WebCore::DocumentEventQueue::create):
        (WebCore::DocumentEventQueue::DocumentEventQueue):
        (WebCore::DocumentEventQueue::~DocumentEventQueue):
        (WebCore::DocumentEventQueue::enqueueEvent):
        (WebCore::DocumentEventQueue::enqueueOrDispatchScrollEvent):
        (WebCore::DocumentEventQueue::cancelEvent):
        (WebCore::DocumentEventQueue::close):
        (WebCore::DocumentEventQueue::pendingEventTimerFired):
        (WebCore::DocumentEventQueue::dispatchEvent):
        * dom/DocumentEventQueue.h: Copied from Source/WebCore/dom/EventQueue.h.
        * dom/EventQueue.h:
        * dom/ScriptExecutionContext.h:
        * page/EventHandler.cpp: Change EventQueue to DocumentEventQueue.
        (WebCore::EventHandler::sendScrollEvent): Change EventQueue to DocumentEventQueue.
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::scrollTo): Change EventQueue to DocumentEventQueue.
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::scrollTo): Change EventQueue to DocumentEventQueue.
        * storage/IDBDatabase.cpp:
        * storage/IDBRequest.cpp:
        * storage/IDBTransaction.cpp:
        * workers/WorkerContext.cpp:
        (WebCore::WorkerContext::eventQueue):
        * workers/WorkerContext.h:
        * workers/WorkerEventQueue.cpp: Added.
        (WebCore::WorkerEventQueue::create):
        (WebCore::WorkerEventQueue::WorkerEventQueue):
        (WebCore::WorkerEventQueue::~WorkerEventQueue):
        (WebCore::WorkerEventQueue::EventDispatcherTask::create):
        (WebCore::WorkerEventQueue::EventDispatcherTask::dispatchEvent):
        (WebCore::WorkerEventQueue::EventDispatcherTask::performTask):
        (WebCore::WorkerEventQueue::EventDispatcherTask::cancel):
        (WebCore::WorkerEventQueue::EventDispatcherTask::EventDispatcherTask):
        (WebCore::WorkerEventQueue::removeEvent):
        (WebCore::WorkerEventQueue::enqueueEvent):
        (WebCore::WorkerEventQueue::cancelEvent):
        (WebCore::WorkerEventQueue::close):
        * workers/WorkerEventQueue.h: Copied from Source/WebCore/dom/EventQueue.h.

2011-10-27  Jonathon Jongsma  <jonathon.jongsma@collabora.co.uk>

        [GStreamer] Prevent memory leak when fullscreening a video
        https://bugs.webkit.org/show_bug.cgi?id=71043

        Reviewed by Gustavo Noronha Silva.

        * platform/graphics/gstreamer/GStreamerGWorld.cpp:
        (WebCore::GStreamerGWorld::GStreamerGWorld):
        (WebCore::GStreamerGWorld::enterFullscreen):
        (WebCore::GStreamerGWorld::exitFullscreen):
        * platform/graphics/gstreamer/GStreamerGWorld.h:

2011-10-27  Joseph Pecoraro  <pecoraro@apple.com>

        Reviewed by David Kilzer.

        Make FeatureDefines Identical Across OS X Projects
        https://bugs.webkit.org/show_bug.cgi?id=71051

        * Configurations/FeatureDefines.xcconfig:

2011-10-27  Joseph Pecoraro  <pecoraro@apple.com>

        Correctly Guard Exported REQUEST_ANIMATION_FRAME Symbols
        https://bugs.webkit.org/show_bug.cgi?id=71047

        Reviewed by David Kilzer.

        * WebCore.exp.in:

2011-10-27  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r98626.
        http://trac.webkit.org/changeset/98626
        https://bugs.webkit.org/show_bug.cgi?id=71066

        Does not compile on cr-win (Requested by jamesr_ on #webkit).

        * platform/graphics/chromium/FontChromiumWin.cpp:
        (WebCore::Font::drawGlyphs):
        * platform/graphics/skia/SkiaFontWin.cpp:
        (WebCore::paintSkiaText):

2011-10-27  Tony Chang  <tony@chromium.org>

        Fix a compiler warning caught by gcc 4.6.1. Need to return something.

        * platform/graphics/chromium/cc/CCSchedulerStateMachine.cpp:
        (WebCore::CCSchedulerStateMachine::nextAction):

2011-10-27  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Advanced search style fixes.
        https://bugs.webkit.org/show_bug.cgi?id=71036

        Reviewed by Pavel Feldman.

        * inspector/front-end/AdvancedSearchController.js:
        (WebInspector.SearchView):
        * inspector/front-end/Images/statusbarButtonGlyphs.png:
        * inspector/front-end/inspector.css:
        (.search-view .search-panel):
        (.search-view .search-panel input[type="search"].search-config-search):
        (.search-view .search-panel input[type="checkbox"].search-config-checkbox):
        (body:not(.platform-mac) .search-view .search-panel input[type="checkbox"].search-config-checkbox):
        (body.platform-mac .search-view .search-panel input[type="checkbox"].search-config-checkbox):
        (#drawer-status-bar .search-status-bar-progress):
        (body:not(.platform-mac) #drawer-status-bar .search-status-bar-progress):
        (body.platform-mac #drawer-status-bar .search-status-bar-progress):

2011-10-27  David Hyatt  <hyatt@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=71061
        
        [CSS Line Grid] Add support for parsing the line-grid property.

        New tests in fast/line-grid.

        Reviewed by Dan Bernstein.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):
        * css/CSSProperty.cpp:
        (WebCore::CSSProperty::isInheritedProperty):
        * css/CSSPropertyNames.in:
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):
        * rendering/style/RenderStyle.h:
        (WebCore::InheritedFlags::lineGrid):
        (WebCore::InheritedFlags::setLineGrid):
        (WebCore::InheritedFlags::initialLineGrid):
        * rendering/style/StyleRareInheritedData.cpp:
        (WebCore::StyleRareInheritedData::StyleRareInheritedData):
        (WebCore::StyleRareInheritedData::operator==):
        * rendering/style/StyleRareInheritedData.h:

2011-10-27  Fady Samuel  <fsamuel@chromium.org>

        iframes seem to occasionally doubly scale or scale incorrectly when pageScaleFactor != 1.0
        https://bugs.webkit.org/show_bug.cgi?id=70552

        Reviewed by Simon Fraser.

        Test: fast/frames/iframe-double-scale-contents.html

        The iframe's document style was using the page's scale factor, rather than the frame's (1.0).
        If the page scale factor was set after layout was complete, then this would have no impact because the iframe's document style and layout is not recomputed, 
        but if the page scale factor is set prior to creating and laying out the iframe, the iframe's content would be doubly scaled.

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

2011-10-27  Nat Duca  <nduca@chromium.org>

        Unreviewed, fix CCSchedulerStateMachine build errors.

        * platform/graphics/chromium/cc/CCSchedulerStateMachine.cpp:
        * platform/graphics/chromium/cc/CCSchedulerStateMachine.h:

2011-10-27  Tony Chang  <tony@chromium.org>

        fix sizing of auto sized flexbox
        https://bugs.webkit.org/show_bug.cgi?id=70839

        Reviewed by David Hyatt.

        Correctly set the height of the flexbox when we have a column flow
        and the height is auto.

        Tests: css3/flexbox/columns-auto-size.html
               css3/flexbox/flex-flow-margins-auto-size.html

        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::layoutBlock): Always computeLogicalHeight() after we're done placing children.
        (WebCore::RenderFlexibleBox::layoutAndPlaceChildrenInlineDirection): Set the height as we place children.

2011-10-25  Vangelis Kokkevis  <vangelis@chromium.org>

        Add support for creating compositing layers for fixed position elements.
        https://bugs.webkit.org/show_bug.cgi?id=69796

        position:fixed elements will get a compositing layer if:
        1. Settings:acceleratedCompositingForFixedPositionEnabled() returns true, 
        2. The element has its own stacking context (e.g. has a z-index), and
        3. The element's container is the RenderView (e.g. not a descendant of a transformed element)

        Reviewed by Simon Fraser.


        Test: compositing/geometry/fixed-position-composited-switch.html

        * page/Settings.cpp:
        (WebCore::Settings::Settings):
        * page/Settings.h:
        (WebCore::Settings::setAcceleratedCompositingForFixedPositionEnabled):
        (WebCore::Settings::acceleratedCompositingForFixedPositionEnabled):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::RenderLayerCompositor):
        (WebCore::RenderLayerCompositor::updateCompositingLayers):
        (WebCore::RenderLayerCompositor::requiresCompositingLayer):
        (WebCore::RenderLayerCompositor::requiresCompositingForPosition):
        * rendering/RenderLayerCompositor.h:
        * testing/Internals.cpp:
        (WebCore::Internals::setEnableCompositingForFixedPosition):
        * testing/Internals.h:
        * testing/Internals.idl:

2011-10-27  Arthur Hsu  <arthurhsu@chromium.org>

        https://bugs.webkit.org/show_bug.cgi?id=70390
        Ensure font load for Skia backend during printing.

        Reviewed by James Robinson.

        * platform/graphics/chromium/FontChromiumWin.cpp:
        (WebCore::Font::drawGlyphs):
        * platform/graphics/skia/SkiaFontWin.cpp:
        (WebCore::paintSkiaText):

2011-10-27  Michael Saboff  <msaboff@apple.com>

        Investigate storing strings in 8-bit buffers when possible
        https://bugs.webkit.org/show_bug.cgi?id=66161

        Changes to support 8 bit StringImpl changes.
        
        Reviewed by Geoffrey Garen.
        
        No new tests, refactored StringImpl for 8 bit strings.

        * platform/text/cf/StringImplCF.cpp:
        (WTF::StringImpl::createCFString):

2011-10-27  Nat Duca  <nduca@chromium.org>

        [chromium] Encapsulate state machine parts of scheduling in CCSchedulerStateMachine
        https://bugs.webkit.org/show_bug.cgi?id=70714

        Reland of ill-fated r98612.

        Reviewed by James Robinson.

        * WebCore.gypi:
        * platform/graphics/chromium/cc/CCSchedulerStateMachine.cpp: Added.
        (WebCore::CCSchedulerStateMachine::nextAction):
        (WebCore::CCSchedulerStateMachine::updateState):
        * platform/graphics/chromium/cc/CCSchedulerStateMachine.h: Added.
        (WebCore::CCSchedulerStateMachine::CCSchedulerStateMachine):
        (WebCore::CCSchedulerStateMachine::operator=):
        (WebCore::CCSchedulerStateMachine::commitPending):
        (WebCore::CCSchedulerStateMachine::setNeedsRedraw):
        (WebCore::CCSchedulerStateMachine::setNeedsCommit):
        (WebCore::CCSchedulerStateMachine::beginFrameComplete):
        (WebCore::CCSchedulerStateMachine::updateResourcesComplete):

2011-10-27  Pavel Podivilov  <podivilov@chromium.org>

        Get rid of optional parameters in the middle in IDLs.
        https://bugs.webkit.org/show_bug.cgi?id=70816

        Reviewed by Adam Barth.

        Optional parameters in the middle are prohibited by WebIDL spec.

        * bindings/js/JSCanvasRenderingContext2DCustom.cpp:
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateHeader):
        (GenerateImplementation):
        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateHeader):
        (GenerateArgumentsCountCheck):
        (GenerateImplementation):
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::jsTestObjPrototypeFunctionMethodWithNonOptionalArgAndTwoOptionalArgs):
        * bindings/scripts/test/TestObj.idl:
        * bindings/scripts/test/V8/V8TestObj.cpp:
        (WebCore::TestObjInternal::methodWithNonOptionalArgAndTwoOptionalArgsCallback):
        * html/canvas/CanvasRenderingContext2D.idl:
        * page/DOMWindow.idl:

2011-10-27  Antti Koivisto  <antti@apple.com>

        REGRESSION(r98542): tables/mozilla_expected_failures/bugs/bug14007-2.html
        https://bugs.webkit.org/show_bug.cgi?id=71032

        Reviewed by Dave Hyatt.

        If we apply an explicitly inherited property, we need to apply any further
        non-inherited properties as the property might get overridden again.

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::styleForKeyframe):
        (WebCore::CSSStyleSelector::styleForPage):
        (WebCore::CSSStyleSelector::applyDeclaration):
        (WebCore::CSSStyleSelector::applyDeclarations):
        * css/CSSStyleSelector.h:

2011-10-27  Julien Chaffraix  <jchaffraix@webkit.org>

        Remove RenderTableSection::m_gridRows
        https://bugs.webkit.org/show_bug.cgi?id=70570

        Reviewed by Darin Adler.

        No new test, refactoring only.

        Just nuke the old field that was duplicating
        m_grid.size().

        * rendering/RenderTableSection.h:
        (WebCore::RenderTableSection::numRows):
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::RenderTableSection):
        (WebCore::RenderTableSection::ensureRows):
        (WebCore::RenderTableSection::setCellLogicalWidths):
        (WebCore::RenderTableSection::calcRowLogicalHeight):
        (WebCore::RenderTableSection::layoutRows):
        (WebCore::RenderTableSection::calcOuterBorderBefore):
        (WebCore::RenderTableSection::calcOuterBorderAfter):
        (WebCore::RenderTableSection::calcOuterBorderStart):
        (WebCore::RenderTableSection::calcOuterBorderEnd):
        (WebCore::RenderTableSection::firstLineBoxBaseline):
        (WebCore::RenderTableSection::paint):
        (WebCore::RenderTableSection::paintObject):
        (WebCore::RenderTableSection::clearGrid):
        (WebCore::RenderTableSection::numColumns):
        (WebCore::RenderTableSection::appendColumn):
        (WebCore::RenderTableSection::splitColumn):
        s/m_gridRows/m_grid.size()/.
        Also updated the code as m_grid.size() is unsigned.

        (WebCore::RenderTableSection::recalcCells):
        The old code would keep the grid's memory but we have to clear it to properly
        count the elements. To avoid lots of small reallocations, we reallocate the
        buffer at the old capacity upfront.

2011-10-27  Nat Duca  <nduca@chromium.org>

        Unreviewed, rolling out r98612.
        http://trac.webkit.org/changeset/98612
        https://bugs.webkit.org/show_bug.cgi?id=70714

        Broke build

        * WebCore.gypi:
        * platform/graphics/chromium/cc/CCSchedulerStateMachine.cpp: Removed.
        * platform/graphics/chromium/cc/CCSchedulerStateMachine.h: Removed.

2011-10-24  Nat Duca  <nduca@chromium.org>

        [chromium] Encapsulate state machine parts of scheduling in CCSchedulerStateMachine
        https://bugs.webkit.org/show_bug.cgi?id=70714

        Reviewed by James Robinson.

        * WebCore.gypi:
        * platform/graphics/chromium/cc/CCSchedulerStateMachine.cpp: Added.
        (WebCore::CCSchedulerStateMachine::nextAction):
        (WebCore::CCSchedulerStateMachine::updateState):
        * platform/graphics/chromium/cc/CCSchedulerStateMachine.h: Added.
        (WebCore::CCSchedulerStateMachine::CCSchedulerStateMachine):
        (WebCore::CCSchedulerStateMachine::operator=):
        (WebCore::CCSchedulerStateMachine::commitPending):
        (WebCore::CCSchedulerStateMachine::setNeedsRedraw):
        (WebCore::CCSchedulerStateMachine::setNeedsCommit):
        (WebCore::CCSchedulerStateMachine::beginFrameComplete):
        (WebCore::CCSchedulerStateMachine::updateResourcesComplete):

2011-10-27  Dan Bernstein  <mitz@apple.com>

        <rdar://problem/10262205> Allow column progression to be independent of writing mode
        https://bugs.webkit.org/show_bug.cgi?id=71028

        Reviewed by Darin Adler.

        Tests: fast/multicol/block-axis-horizontal-bt.html
               fast/multicol/block-axis-horizontal-tb.html
               fast/multicol/block-axis-vertical-lr.html
               fast/multicol/block-axis-vertical-rl.html
               fast/multicol/flipped-blocks-hit-test.html

        Allow “columns” to be stacked along the block axis rather than the inline axis. This can facilitate
        paginated interfaces. A column-axis property is added in order to enable this mode.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue): Handle the column-axis property.
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue): Ditto.
        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue): Map ColumnAxis values to identifiers.
        (WebCore::CSSPrimitiveValue::operator ColumnAxis): Map identifiers to ColumnAxis values.
        * css/CSSProperty.cpp:
        (WebCore::CSSProperty::isInheritedProperty): Updated to return false for the column-axis property.
        * css/CSSPropertyNames.in: Added -webkit-column-axis.
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty): Handle column-axis.
        * rendering/ColumnInfo.h:
        (WebCore::ColumnInfo::ColumnInfo): Added m_progressionAxis to the initialization list.
        (WebCore::ColumnInfo::progressionAxis): Added this getter.
        (WebCore::ColumnInfo::setProgressionAxis): Added this setter.
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::addOverflowFromChildren): Simplified, and thus also made this function work
        with block-axis column progression.
        (WebCore::RenderBlock::paintColumnRules): Added code to paint rules between columns with block-axis
        progression.
        (WebCore::RenderBlock::paintColumnContents): Adjusted the painting offset for the block-axis
        column progression case.
        (WebCore::RenderBlock::nodeAtPoint): Fixed hit-testing in flipped-blocks writing modes. This is
        covered by flipped-blocks-hit-test.html.
        (WebCore::RenderBlock::hitTestColumns): Adjusted the offset for the block-axis column progression
        case.
        (WebCore::RenderBlock::calcColumnWidth): Set the column width to the content logical width in
        the block-axis column progression case. The column-width and column-count properties are ignored.
        (WebCore::RenderBlock::setDesiredColumnCountAndWidth): Set the column progression axis based on
        the style.
        (WebCore::RenderBlock::columnCount): Broke up an assertion into two.
        (WebCore::RenderBlock::columnRectAt): Updated for block-axis column progression.
        (WebCore::RenderBlock::adjustPointToColumnContents): Ditto.
        (WebCore::RenderBlock::adjustRectForColumns): Ditto.
        (WebCore::RenderBlock::adjustForColumns): Ditto.
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::paintChildLayerIntoColumns): Adjusted the offser for the block-axis column
        progression case.
        (WebCore::RenderLayer::hitTestChildLayerColumns): Ditto.
        * rendering/style/RenderStyle.h:
        (WebCore::InheritedFlags::columnAxis): Added this getter.
        (WebCore::InheritedFlags::hasInlineColumnAxis): Added. Checks the column axis against the writing
        mode.
        (WebCore::InheritedFlags::specifiesColumns): Changed to return true if the specified column axis
        is the block axis.
        (WebCore::InheritedFlags::setColumnAxis): Added this setter.
        (WebCore::InheritedFlags::initialColumnAxis): Added. Returns AutoColumnAxis.
        * rendering/style/RenderStyleConstants.h: Added a ColumnAxis enum.
        * rendering/style/StyleMultiColData.cpp:
        (WebCore::StyleMultiColData::StyleMultiColData): Added m_axis to the initialization list.
        (WebCore::StyleMultiColData::operator==): Compare m_axis.
        * rendering/style/StyleMultiColData.h: Added m_axis member variable.

2011-10-27  Mihnea Ovidenie  <mihnea@adobe.com>

        [CSSRegions]Flag regions with custom styling
        https://bugs.webkit.org/show_bug.cgi?id=70733

        Reviewed by David Hyatt.

        Region elements that have custom region styling are now marked accordingly.

        Test: fast/regions/render-region-custom-style-mark.html

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::checkRegionStyle):
        * css/CSSStyleSelector.h:
        * rendering/RenderRegion.cpp:
        (WebCore::RenderRegion::RenderRegion):
        (WebCore::RenderRegion::styleDidChange):
        * rendering/RenderRegion.h:
        (WebCore::RenderRegion::hasCustomRegionStyle):
        (WebCore::RenderRegion::setHasCustomRegionStyle):
        * rendering/RenderTreeAsText.cpp:
        (WebCore::writeRenderFlowThreads):

2011-10-27  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r98556.
        http://trac.webkit.org/changeset/98556
        https://bugs.webkit.org/show_bug.cgi?id=71031

        The test added by the patch doesn't pass on Snow Leopard
        (Requested by rniwa on #webkit).

        * editing/TextCheckingHelper.cpp:
        (WebCore::checkTextOfParagraph):
        * testing/Internals.cpp:
        * testing/Internals.h:
        * testing/Internals.idl:

2011-10-27  Mike Reed  <reed@google.com>

        [skia] replace offscreen technique with native support for antialiased clipping
        https://bugs.webkit.org/show_bug.cgi?id=70748

        Reviewed by Stephen White.

        ~100 layout tests need to be rebaselined, as the native aa-clipping differs sometimes in the low
        bits of the result. Other than that, the results should be the same, except that now the drawing
        can go directly to the canvas, rather than being direct offscreen and then have that result
        "clipped" during the restore. This has the effect of allowing LCD text to be drawing inside a
        antialiased clip area.

        * platform/graphics/skia/PlatformContextSkia.cpp:
        (WebCore::PlatformContextSkia::State::State):
        (WebCore::PlatformContextSkia::State::cloneInheritedProperties):
        (WebCore::PlatformContextSkia::clipPathAntiAliased):
        (WebCore::PlatformContextSkia::restore):
        * platform/graphics/skia/PlatformContextSkia.h:

2011-10-27  Tony Chang  <tony@chromium.org>

        use main/cross instead of logical width/height when talking about flow direction
        https://bugs.webkit.org/show_bug.cgi?id=70977

        Reviewed by Ojan Vafai.

        Flexbox code uses logical in function names to refer to the flow
        direction. This is confusing because writing mode also uses logical,
        but this is a diffent usage. To avoid confusion, be explicit about
        main vs cross axis. Extent is used instead of width/height.

        No new tests, just a refactoring.

        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::mainAxisLengthForChild):
        (WebCore::RenderFlexibleBox::crossAxisLength):
        (WebCore::RenderFlexibleBox::setCrossExtent):
        (WebCore::RenderFlexibleBox::crossExtentForChild):
        (WebCore::RenderFlexibleBox::mainExtentForChild):
        (WebCore::RenderFlexibleBox::crossAxisExtent):
        (WebCore::RenderFlexibleBox::mainAxisExtent):
        (WebCore::RenderFlexibleBox::crossAxisContentExtent):
        (WebCore::RenderFlexibleBox::mainAxisContentExtent):
        (WebCore::RenderFlexibleBox::crossAxisBorderAndPaddingExtent):
        (WebCore::RenderFlexibleBox::crossAxisMarginExtentForChild):
        (WebCore::RenderFlexibleBox::flowAwareLocationForChild):
        (WebCore::RenderFlexibleBox::setFlowAwareLocationForChild):
        (WebCore::RenderFlexibleBox::mainAxisBorderAndPaddingExtentForChild):
        (WebCore::RenderFlexibleBox::mainAxisScrollbarExtentForChild):
        (WebCore::RenderFlexibleBox::preferredMainAxisContentExtentForFlexItem):
        (WebCore::RenderFlexibleBox::layoutInlineDirection):
        (WebCore::RenderFlexibleBox::positiveFlexForChild): Since flex only
            matters in the main axis, there's no reason to deambiguate it here.
        (WebCore::RenderFlexibleBox::negativeFlexForChild): Ditto.
        (WebCore::RenderFlexibleBox::availableAlignmentSpaceForChild): Alignment is always
            in the cross axis direction, so don't include that in the method name.
        (WebCore::RenderFlexibleBox::marginBoxAscent):
        (WebCore::RenderFlexibleBox::computePreferredMainAxisExtent):
        (WebCore::RenderFlexibleBox::runFreeSpaceAllocationAlgorithmInlineDirection):
        (WebCore::RenderFlexibleBox::layoutAndPlaceChildrenInlineDirection):
        (WebCore::RenderFlexibleBox::adjustAlignmentForChild):  Alignment is always
            in the cross axis direction, so don't include that in the method name.
        (WebCore::RenderFlexibleBox::alignChildrenBlockDirection):
        * rendering/RenderFlexibleBox.h:

2011-10-27  Mark Hahnenberg  <mhahnenberg@apple.com>

        De-virtualize JSCell::toThisObject
        https://bugs.webkit.org/show_bug.cgi?id=70958

        Reviewed by Geoffrey Garen.

        No new tests.

        Converted all instances of toThisObject to static functions, 
        added toThisObject to the MethodTable, and replaced all call sites
        with a corresponding lookup in the MethodTable.

        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::JSDOMWindowBase::toThisObject):
        * bindings/js/JSDOMWindowBase.h:
        * bindings/js/JSErrorHandler.cpp:
        (WebCore::JSErrorHandler::handleEvent):
        * bridge/NP_jsobject.cpp:
        (_NPN_Invoke):
        * bridge/qt/qt_runtime.cpp:
        (JSC::Bindings::QtRuntimeConnectionMethod::call):

2011-10-27  Adam Roben  <aroben@apple.com>

        Windows build fix after r98512

        * html/HTMLMediaElement.cpp: Moved a Web Audio-related #include inside an appropriate ENABLE
        guard.

2011-10-27  Adam Roben  <aroben@apple.com>

        Regenerate WebCore's Localizable.strings file

        All I did was run update-webkit-localizable-strings. A few localizer comments changed, and
        some strings (which must have been hand-added) got moved to a different part of the file.

        * English.lproj/Localizable.strings:

2011-10-27  Daniel Cheng  <dcheng@chromium.org>

        Clean up MicroDataItemValue to use const String& instead of String
        https://bugs.webkit.org/show_bug.cgi?id=70978

        Reviewed by Tony Chang.

        * html/MicroDataItemValue.cpp:
        (WebCore::MicroDataItemValue::MicroDataItemValue):
        * html/MicroDataItemValue.h:

2011-10-27  Antti Koivisto  <antti@apple.com>

        Use StringHasher to generate the matched declaration cache hash
        https://bugs.webkit.org/show_bug.cgi?id=71012

        Reviewed by Kenneth Rohde Christiansen and Andreas Kling.

        It is faster and better than the current custom function.

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

2011-10-27  Kentaro Hara  <haraken@chromium.org>

        Refactor OptionsObject.cpp
        https://bugs.webkit.org/show_bug.cgi?id=70572

        Reviewed by Adam Barth.

        For example, OptionsObject::getKeyBool() is an alias of
        OptionsObject::getKeyValue(const String& key, bool& value).
        We should remove OptionsObject::getKeyXXXX() (XXXX is some specific type)
        and unify them into OptionsObject::get(const String& key, XXXX& value).
        c.f. Corresponding JSC methods are unified into
        JSDictionary::convertValue(JSC::ExecState*, JSC::JSValue, XXXX&).

        The result of git diff is weird, but this patch is making just the following changes:
        - Replaced getKeyBool(), getKeyInt32(), getKeyDouble() and getKeyString() with get().
        - Renamed getKeyStringWithUndefinedOrNullCheck() to getWithUndefinedOrNullCheck().
        - Removed getKeyDOMStringList() and getKeyKeyRange(), since these are not used.
        - Move definitions of get() from .h to .cpp.

        No new tests. No change in behavior.

        * bindings/v8/OptionsObject.cpp:
        (WebCore::OptionsObject::get): Renamed from getKeyValue().
        (WebCore::OptionsObject::getKey): No change to this method. git diff seems to misunderstand as if it is modified.
        (WebCore::OptionsObject::getKeyDOMStringList): Removed, since no one is using it.
        (WebCore::OptionsObject::getKeyKeyRange): Ditto.
        (WebCore::OptionsObject::getWithUndefinedOrNullCheck): No change to this method. git diff seems to misunderstand as if it is modified.
        * bindings/v8/OptionsObject.h: Moved definitions of get() to OptionsObject.cpp
        * bindings/v8/custom/V8EventConstructors.cpp:
        * bindings/v8/custom/V8WebKitMutationObserverCustom.cpp:
        (WebCore::V8WebKitMutationObserver::observeCallback): Replaced getKeyXXXX() to get();
        * storage/IDBDatabase.cpp:
        (WebCore::IDBDatabase::createObjectStore): Ditto.
        * storage/IDBObjectStore.cpp:
        (WebCore::IDBObjectStore::createIndex): Ditto.

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

        StyleSheet.parentStyleSheet does not work.
        https://bugs.webkit.org/show_bug.cgi?id=70956

        Reviewed by Antti Koivisto.

        Since StyleSheet is only ever parented by a CSSRule, we need
        to go through that rule when resolving the StyleSheet's parent.

        Test: fast/css/stylesheet-parentStyleSheet.html

        * css/StyleSheet.cpp:
        (WebCore::StyleSheet::parentStyleSheet):

2011-10-27  Antoine Labour  <piman@chromium.org>

        Disable blending when drawing opaque layers
        https://bugs.webkit.org/show_bug.cgi?id=70085

        Reviewed by James Robinson.

        Covered by compositing/ tests, as well as a new unit test:
        CCLayerTreeHostImplTest.blendingOffWhenDrawingOpaqueLayers

        * platform/graphics/chromium/LayerChromium.cpp:
        (WebCore::LayerChromium::LayerChromium):
        (WebCore::LayerChromium::pushPropertiesTo):
        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::drawLayer):
        * platform/graphics/chromium/cc/CCLayerImpl.cpp:
        (WebCore::CCLayerImpl::CCLayerImpl):
        * platform/graphics/chromium/cc/CCLayerImpl.h:
        (WebCore::CCLayerImpl::setOpaque):
        (WebCore::CCLayerImpl::opaque):

2011-10-27  Joshua Bell  <jsbell@chromium.org>

        IndexedDB: Passing empty array to IDBDatabase.transaction should raise exception
        https://bugs.webkit.org/show_bug.cgi?id=70251

        Reviewed by Adam Barth.

        IDBDatabase.transaction() supported being called with an empty array to
        lock all object stores. Support for this was rejected from inclusion in
        the IDB spec due to performance concerns. This patch removes that
        functionality.

        A special case in the spec (passing a string instead of an array) worked
        in WebKit accidentally, by resolving the string to an empty array. This
        needed explicit support. Support for DOMString[] is added to the binding
        code generators (reliant on DOMStringList) to ensure JS arrays are not
        coerced to DOMStrings. This matches the proposed IDL.

        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateParametersCheckExpression):
        (GetNativeType):
        (JSValueToNative):
        (IsArrayType):
        * bindings/scripts/IDLStructure.pm:
        * storage/IDBDatabase.cpp:
        (WebCore::IDBDatabase::transaction):
        * storage/IDBDatabase.h:
        (WebCore::IDBDatabase::transaction):
        * storage/IDBDatabase.idl:
        * storage/IDBTransactionBackendImpl.cpp:
        (WebCore::IDBTransactionBackendImpl::IDBTransactionBackendImpl):
        (WebCore::IDBTransactionBackendImpl::objectStore):

2011-10-27  Ken Buchanan <kenrb@chromium.org>

        Crash due to nested first-letter selectors
        https://bugs.webkit.org/show_bug.cgi?id=70457

        Now only the lowest-level first-letter pseudostyle will be applied to
        a given piece of text. Previously the last renderer to have layout
        done would have its pseudostyle applied, no matter where it was in the
        tree.

        Reviewed by David Hyatt.

        * renderer/RenderBlock.cpp:
        (WebCore::RenderBlock::updateFirstLetter): Use the pseudostyle from
        the lowest level node to have one

2011-10-27  Andras Becsi  <andras.becsi@nokia.com>

        Fix the build if NO_LISTBOX_RENDERING is enabled
        https://bugs.webkit.org/show_bug.cgi?id=71009

        Reviewed by Kenneth Rohde Christiansen.

        If NO_LISTBOX_RENDERING is enabled RenderMenuList::listBoxSelectItem uses the
        HTMLSelectElement::listBoxSelectItem function which was accidentally removed in r97533.
        Reintroduce HTMLSelectElement::listBoxSelectItem with a NO_LISTBOX_RENDERING guard to unbreak this setup.

        This is covered by:
        Source/WebCore/manual-tests/no-listbox-rendering.html

        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::listBoxSelectItem): Reintroduce.
        * html/HTMLSelectElement.h:

2011-10-27  Shinya Kawanaka  <shinyak@google.com>

        Implement legacy text check emulation in unified text check interface.
        https://bugs.webkit.org/show_bug.cgi?id=70299

        Reviewed by Hajime Morita.

        When UNIFIED_TEXT_CHECKING is off, WebCore::checkTextOfParagraph() emulates
        TextCheckerClient::checkTextOfParagraph() using checkSpellingOfString and checkGrammarOfString.

        This emulation can be used by setting the flag on.
        This can be done by WebCore::Internals::setUnifiedTextCheckingEnabled.

        Test: editing/spelling/spelling-unified-emulation.html

        * editing/TextCheckingHelper.cpp:
        (WebCore::findBadGrammars): Added.
        (WebCore::findMisspellings): Added.
        (WebCore::checkTextOfParagraph):
          Emulates TextCheckerClients::checkTextOfParagraph if UNIFIED_TEXT_CHECKING is off.
        * testing/Internals.cpp:
        (WebCore::Internals::setUnifiedTextCheckingEnabled): flag setter.
        (WebCore::Internals::unifiedTextCheckingEnabled): flag getter.
        * testing/Internals.h:
        * testing/Internals.idl:

2011-10-27  Philippe Normand  <pnormand@igalia.com>

        Unreviewed, remove those un-needed files committed by error in
        r98554.

        * platform/audio/gstreamer/#AudioFileReaderGStreamer.h#: Removed.
        * platform/audio/gstreamer/.#AudioFileReaderGStreamer.h: Removed.

2011-10-27  Philippe Normand  <pnormand@igalia.com> and Zan Dobersek  <zandobersek@gmail.com>

        [GStreamer] WebAudio AudioFileReader implementation
        https://bugs.webkit.org/show_bug.cgi?id=69834

        Reviewed by Martin Robinson.

        Basic FileReader implementation, supporting one or 2 audio
        channels. An empty AudioDestination is also provided, its complete
        implementation is handled in bug 69835.

        * GNUmakefile.am:
        * GNUmakefile.list.am:
        * platform/audio/gstreamer/AudioDestinationGStreamer.cpp: Added.
        (WebCore::AudioDestination::create):
        (WebCore::AudioDestination::hardwareSampleRate):
        (WebCore::AudioDestinationGStreamer::AudioDestinationGStreamer):
        (WebCore::AudioDestinationGStreamer::~AudioDestinationGStreamer):
        (WebCore::AudioDestinationGStreamer::start):
        (WebCore::AudioDestinationGStreamer::stop):
        * platform/audio/gstreamer/AudioDestinationGStreamer.h: Added.
        (WebCore::AudioDestinationGStreamer::isPlaying):
        (WebCore::AudioDestinationGStreamer::sampleRate):
        (WebCore::AudioDestinationGStreamer::sourceProvider):
        * platform/audio/gstreamer/AudioFileReaderGStreamer.cpp: Added.
        (WebCore::getGStreamerAudioCaps):
        (WebCore::getFloatFromByteReader):
        (WebCore::copyGstreamerBuffersToAudioChannel):
        (WebCore::onAppsinkNewBufferCallback):
        (WebCore::messageCallback):
        (WebCore::onGStreamerDeinterleavePadAddedCallback):
        (WebCore::onGStreamerDeinterleaveReadyCallback):
        (WebCore::onGStreamerDecodebinPadAddedCallback):
        (WebCore::AudioFileReader::AudioFileReader):
        (WebCore::AudioFileReader::~AudioFileReader):
        (WebCore::AudioFileReader::handleBuffer):
        (WebCore::AudioFileReader::handleMessage):
        (WebCore::AudioFileReader::handleNewDeinterleavePad):
        (WebCore::AudioFileReader::deinterleavePadsConfigured):
        (WebCore::AudioFileReader::plugDeinterleave):
        (WebCore::AudioFileReader::createBus):
        (WebCore::createBusFromAudioFile):
        (WebCore::createBusFromInMemoryAudioFile):
        * platform/audio/gtk/AudioBusGtk.cpp: Added.
        (WebCore::AudioBus::loadPlatformResource):

2011-10-27  Philippe Normand  <pnormand@igalia.com>

        Unreviewed, rebaseline of the bindings tests after r98501 which
        removed getOwnPropertySlotVirtual.

        * bindings/scripts/test/JS/JSTestInterface.cpp:
        * bindings/scripts/test/JS/JSTestInterface.h:
        * bindings/scripts/test/JS/JSTestMediaQueryListListener.cpp:
        * bindings/scripts/test/JS/JSTestMediaQueryListListener.h:
        * bindings/scripts/test/JS/JSTestObj.cpp:
        * bindings/scripts/test/JS/JSTestObj.h:
        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp:
        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.h:

2011-10-27  Ilya Tikhonovsky  <loislo@chromium.org>

        WebInspector: View throughs the exception when a child view are removed by removeChildren call.
        https://bugs.webkit.org/show_bug.cgi?id=71002

        Another followup fix after r98225.

        Reviewed by Pavel Feldman.

        * inspector/front-end/DatabaseTableView.js:
        (WebInspector.DatabaseTableView.prototype._queryFinished):
        (WebInspector.DatabaseTableView.prototype._queryError):

2011-10-27  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Execution line in selected call frame should keep showing after toggling format source.
        https://bugs.webkit.org/show_bug.cgi?id=70906

        Reviewed by Yury Semikhatsky.

        Test: inspector/debugger/selected-call-frame-after-formatting-source.html

        * inspector/front-end/DebuggerPresentationModel.js:
        (WebInspector.DebuggerPresentationModel.prototype.setFormatSource):

2011-10-27  Steve Block  <steveblock@google.com>

        Numerous debug build fixes

        Unreviewed build fix.

        No new tests, buuld fix only.

        * loader/icon/IconDatabase.cpp: urlForLogging() is used by both LOG() and LOG_ERROR()
        * storage/AbstractDatabase.h: databaseDebugName() is used by both LOG() and LOG_ERROR()
        * storage/DatabaseTask.cpp: m_complete is only available when !LOG_DISABLED

2011-10-27  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Refactor ScriptsPanel so that ConsoleView does not depend on it.
        https://bugs.webkit.org/show_bug.cgi?id=70899

        Moved methods used in console view to DebuggerPresentationModel.
        Changed debuggerPaused handler logic so that selectedCallFrame is never null when debugger is paused.

        Reviewed by Pavel Feldman.

        * inspector/front-end/ConsoleView.js:
        * inspector/front-end/DebuggerPresentationModel.js:
        (WebInspector.DebuggerPresentationModel.prototype._debuggerPaused):
        (WebInspector.DebuggerPresentationModel.prototype.set selectedCallFrame):
        (WebInspector.DebuggerPresentationModel.prototype.evaluateInSelectedCallFrame):
        (WebInspector.DebuggerPresentationModel.prototype.getSelectedCallFrameVariables.propertiesCollected):
        (WebInspector.DebuggerPresentationModel.prototype.getSelectedCallFrameVariables):
        (WebInspector.DebuggerPresentationModel.prototype._dispatchExecutionLineChanged):
        (WebInspector.DebuggerPresentationModel.prototype.get executionLineLocation):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype._consoleCommandEvaluatedInSelectedCallFrame):
        (WebInspector.ScriptsPanel.prototype._executionLineChanged):
        (WebInspector.ScriptsPanel.prototype._updateExecutionLine):
        (WebInspector.ScriptsPanel.prototype._callFrameSelected):
        (WebInspector.ScriptsPanel.prototype._updateCallFrame):

2011-10-27  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Add support for advanced search in content scripts.
        https://bugs.webkit.org/show_bug.cgi?id=70923

        Reviewed by Yury Semikhatsky.

        * English.lproj/localizedStrings.js:
        * inspector/front-end/ScriptsSearchScope.js:
        * inspector/front-end/SettingsScreen.js:
        (WebInspector.SettingsScreen):

2011-10-27  Ilya Tikhonovsky  <loislo@chromium.org>

        Unreviewed one line fix for DOMStorageItemsView.
        It have to use this.detachChildViews instead of this.element.removeChildren after r98225.

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

2011-10-27  Antti Koivisto  <antti@apple.com>

        Matched declaration cache
        https://bugs.webkit.org/show_bug.cgi?id=70931

        Reviewed by Darin Adler.

        Sets of style declarations are applied repeatedly for different elements when calculating the document style.
        The same set of applied declarations results in the same non-inherited style, independent of the element and 
        its context. We can use this to build a cache to speed up style applying and to share more style data for
        reduced memory usage.
        
        The patch reduces RenderStyle memory use ~40% and total memory use by ~7% over HTML5 spec load.
        It is also ~10% progression in PerformanceTests/Parser/html5-full-render.html.

        * css/CSSProperty.cpp:
        (WebCore::CSSProperty::isInheritedProperty):
        * css/CSSProperty.h:
        (WebCore::CSSProperty::CSSProperty):
        (WebCore::CSSProperty::isInherited):
        
            We need to know which properties are inherited, something we didn't have available so far.
        
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::matchAllRules):
        
            A set of declarations is only cacheable if it contains no element specific style. This way we
            don't need to worry about cache invalidation. The whole style selector is reconstructed if the
            stylesheets change, invalidating the cache too.
    
        (WebCore::CSSStyleSelector::styleForElement):
        
            Trigger image loads bit earlier so cached style will have them too.
        
        (WebCore::CSSStyleSelector::applyDeclaration):
        (WebCore::CSSStyleSelector::applyDeclarations):
        
            Allow skipping over non-inherited properties.
        
        (WebCore::CSSStyleSelector::computeDeclarationHash):
        
            Hash function for declartion cache lookups.
        
        (WebCore::operator==):
        (WebCore::operator!=):
        (WebCore::CSSStyleSelector::findFromMatchedDeclarationCache):
        
            Lookup from cache.
        
        (WebCore::CSSStyleSelector::addToMatchedDeclarationCache):
        
            Add to cache.
        
        (WebCore::CSSStyleSelector::applyMatchedDeclarations):
        
            If cached style is found, copy the non-inherited properties from the cache and apply the inherited properties (if any) only.
        
            Font and zoom changes force full applying as they can affect values of other properties (this can be relaxed later).
        
        * css/CSSStyleSelector.h:
        (WebCore::CSSStyleSelector::MatchResult::MatchResult):
        
            Cacheability bit.
        
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::copyNonInheritedFrom):
        * rendering/style/RenderStyle.h:
        * rendering/style/SVGRenderStyle.cpp:
        (WebCore::SVGRenderStyle::copyNonInheritedFrom):
        * rendering/style/SVGRenderStyle.h:
        
            Functions for assembling RenderStyle from non-inherited parts of the cached style.

2011-10-27  Andrey Kosyakov  <caseq@chromium.org>

        Web Inspector: [Extensions API] add ignoreCache flag to options of inspectedWindow.reload()
        https://bugs.webkit.org/show_bug.cgi?id=70926

        Reviewed by Pavel Feldman.

        Test: http/tests/inspector/extensions-ignore-cache.html

        * inspector/front-end/ExtensionServer.js:
        (WebInspector.ExtensionServer.prototype._onReload):
        * inspector/front-end/externs.js:
        ():

2011-10-26  Steve Falkenburg  <sfalken@apple.com>

        ResourceError doesn't support custom domains on Windows
        https://bugs.webkit.org/show_bug.cgi?id=70983
        <rdar://problem/10352145>

        Reviewed by Oliver Hunt.

        * platform/network/cf/ResourceErrorCF.cpp:
        (WebCore::ResourceError::platformLazyInit): Add fallback case for unknown error types.

2011-10-26  Dan Bernstein  <mitz@apple.com>

        Fix a slider thumb rendering regression in Chromium on OS X in r98520.

        Reviewed by Anders Carlsson.

        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::paintSliderThumb): Reverted the changes to the Chromium code path.

2011-10-26  Julien Chaffraix  <jchaffraix@webkit.org>

        Unreviewed, rolling out r98486.
        http://trac.webkit.org/changeset/98486
        https://bugs.webkit.org/show_bug.cgi?id=70748

        Broke Chromium's test_expectation.txt

        * platform/graphics/skia/PlatformContextSkia.cpp:
        (WebCore::PlatformContextSkia::State::State):
        (WebCore::PlatformContextSkia::State::cloneInheritedProperties):
        (WebCore::PlatformContextSkia::clipPathAntiAliased):
        (WebCore::PlatformContextSkia::restore):
        (WebCore::PlatformContextSkia::applyAntiAliasedClipPaths):
        * platform/graphics/skia/PlatformContextSkia.h:

2011-10-26  Dan Bernstein  <mitz@apple.com>

        <rdar://problem/10350775> REGRESSION (r97032): Slider thumb is not drawn
        https://bugs.webkit.org/show_bug.cgi?id=70891

        Reviewed by Anders Carlsson.

        * platform/mac/ThemeMac.mm:
        (WebCore::ThemeMac::ensuredView): Set the WebCoreFlippedView’s size, because NSSliderCell
        always shrinks the slider thumb to fit in the control view’s bounds.
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::paintSliderThumb): Removed workaround code no longer needed after
        r97032.

2011-10-26  Chris Rogers  <crogers@google.com>

        Add AudioSourceProviderClient and setFormat() method so we can know audio stream format
        https://bugs.webkit.org/show_bug.cgi?id=70155

        Reviewed by Eric Carlson.

        No new tests.  There isn't yet an implementation to test.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::createMediaPlayer):
        (WebCore::HTMLMediaElement::setAudioSourceNode):
        Let MediaPlayer know about the MediaElementAudioSourceNode so it can callback with audio stream format information.
        * platform/audio/AudioSourceProvider.h:
        (WebCore::AudioSourceProvider::setClient):
        Add abstract setClient() method so a client may know about stream format information when it becomes available.
        * platform/audio/AudioSourceProviderClient.h: Copied from Source/WebCore/webaudio/MediaElementAudioSourceNode.h.
        (WebCore::AudioSourceProviderClient::~AudioSourceProviderClient):
        Add abstract class AudioSourceProviderClient which implements setFormat() to receive audio stream format information.
        * webaudio/MediaElementAudioSourceNode.cpp:
        (WebCore::MediaElementAudioSourceNode::setFormat):
        Concrete implementation of setFormat() so MediaElementAudioSourceNode can create necessary audio converters.
        * webaudio/MediaElementAudioSourceNode.h:
        Make MediaElementAudioSourceNode implement AudioSourceProviderClient so it can get audio stream format information
        when its setFormat() method is called.

2011-10-26  Julien Chaffraix  <jchaffraix@webkit.org>

        Unreviewed, rolling out r98483.
        http://trac.webkit.org/changeset/98483
        https://bugs.webkit.org/show_bug.cgi?id=47156

        Change is causing some crashes and ASSERTs.

        * loader/cache/CachedImage.cpp:
        (WebCore::CachedImage::lookupImageForSize):
        (WebCore::CachedImage::lookupImageForRenderer):
        (WebCore::CachedImage::lookupOrCreateImageForRenderer):
        (WebCore::CachedImage::setContainerSizeForRenderer):
        (WebCore::CachedImage::imageSizeForRenderer):
        (WebCore::CachedImage::computeIntrinsicDimensions):
        (WebCore::CachedImage::createImage):
        * loader/cache/CachedImage.h:
        * page/ChromeClient.h:
        * rendering/ImageBySizeCache.cpp:
        (WebCore::ImageBySizeCache::addClient):
        (WebCore::ImageBySizeCache::removeClient):
        (WebCore::ImageBySizeCache::imageForSize):
        (WebCore::ImageBySizeCache::sizeForClient):
        * rendering/ImageBySizeCache.h:
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::calculateFillTileSize):
        (WebCore::RenderBoxModelObject::calculateBackgroundImageGeometry):
        (WebCore::RenderBoxModelObject::paintNinePieceImage):
        * rendering/RenderBoxModelObject.h:
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::RenderImage):
        (WebCore::RenderImage::imageDimensionsChanged):
        (WebCore::RenderImage::isLogicalWidthSpecified):
        (WebCore::RenderImage::isLogicalHeightSpecified):
        (WebCore::RenderImage::computeReplacedLogicalWidth):
        (WebCore::RenderImage::computeReplacedLogicalHeight):
        (WebCore::RenderImage::calcAspectRatioLogicalWidth):
        (WebCore::RenderImage::calcAspectRatioLogicalHeight):
        * rendering/RenderImage.h:
        * rendering/RenderImageResource.cpp:
        (WebCore::RenderImageResource::setContainerSizeForRenderer):
        * rendering/RenderImageResourceStyleImage.cpp:
        * rendering/RenderImageResourceStyleImage.h:
        (WebCore::RenderImageResourceStyleImage::image):
        (WebCore::RenderImageResourceStyleImage::setContainerSizeForRenderer):
        * rendering/RenderListMarker.cpp:
        (WebCore::RenderListMarker::computePreferredLogicalWidths):
        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::computeIntrinsicLogicalWidth):
        (WebCore::RenderReplaced::computeIntrinsicLogicalHeight):
        (WebCore::RenderReplaced::computeReplacedLogicalWidth):
        * rendering/style/StyleCachedImage.cpp:
        (WebCore::StyleCachedImage::computeIntrinsicDimensions):
        (WebCore::StyleCachedImage::setContainerSizeForRenderer):
        (WebCore::StyleCachedImage::addClient):
        (WebCore::StyleCachedImage::removeClient):
        * rendering/style/StyleCachedImage.h:
        * rendering/style/StyleGeneratedImage.h:
        (WebCore::StyleGeneratedImage::setContainerSizeForRenderer):
        * rendering/style/StyleImage.h:
        * rendering/style/StylePendingImage.h:
        (WebCore::StylePendingImage::setContainerSizeForRenderer):
        * rendering/svg/RenderSVGImage.cpp:
        (WebCore::RenderSVGImage::layout):
        * rendering/svg/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::computeIntrinsicWidth):
        (WebCore::RenderSVGRoot::computeIntrinsicHeight):
        (WebCore::RenderSVGRoot::computeReplacedLogicalWidth):
        (WebCore::RenderSVGRoot::computeReplacedLogicalHeight):
        (WebCore::RenderSVGRoot::layout):
        (WebCore::RenderSVGRoot::paint):
        (WebCore::RenderSVGRoot::calcViewport):
        (WebCore::RenderSVGRoot::computeRectForRepaint):
        * rendering/svg/RenderSVGRoot.h:
        * svg/SVGLength.cpp:
        (WebCore::SVGLength::determineViewport):
        * svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::SVGSVGElement):
        (WebCore::SVGSVGElement::relativeWidthValue):
        (WebCore::SVGSVGElement::relativeHeightValue):
        (WebCore::SVGSVGElement::currentViewBoxRect):
        * svg/SVGSVGElement.h:
        (WebCore::SVGSVGElement::setContainerSize):
        (WebCore::SVGSVGElement::containerSize):
        (WebCore::SVGSVGElement::hasSetContainerSize):
        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::setContainerSize):
        (WebCore::SVGImage::usesContainerSize):
        (WebCore::SVGImage::size):
        (WebCore::SVGImage::hasRelativeWidth):
        (WebCore::SVGImage::hasRelativeHeight):
        (WebCore::SVGImage::draw):
        (WebCore::SVGImage::computeIntrinsicDimensions):
        (WebCore::SVGImage::dataChanged):
        * svg/graphics/SVGImage.h:

2011-10-26  Eric Carlson  <eric.carlson@apple.com>

        Constructors for all TextTrack interfaces should be available on DOMWindow
        https://bugs.webkit.org/show_bug.cgi?id=70734

        Reviewed by Sam Weinig.
        
        window-properties-expected.txt and global-constructors-expected.txt updated for this change.

        * page/DOMWindow.idl: Add HTMLTrackElement, TextTrack, and TextTrackCueList.

2011-10-25  Andy Estes  <aestes@apple.com>

        REGRESSION (r93108): Shadow DOM media controls created for plug-in backed media elements.
        https://bugs.webkit.org/show_bug.cgi?id=70872

        Reviewed by Eric Carlson.

        r93108 added a call to HTMLMediaElement::configureMediaControls() in
        HTMLMediaElement::prepareForLoad(), which creates shadow DOM media
        controls and is only appropriate to call when media elements are not
        backed by plug-in proxies.

        Resolve this by refactoring configureMediaControls() to do the right
        thing for the plug-in proxy case by calling MediaPlayer::setControls().

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::attributeChanged): Call
        configureMediaControls() directly and remove the preprocessor
        conditional.
        (WebCore::HTMLMediaElement::configureMediaControls): Call
        MediaPlayer::setControls() if PLUGIN_PROXY_FOR_VIDEO is enabled.

2011-10-26  Jon Lee  <jonlee@apple.com>

        selectedIndex gets set from -1 to 0 when modifying options
        https://bugs.webkit.org/show_bug.cgi?id=70547
        <rdar://problem/8388856>

        Reviewed by Darin Adler.

        Changing the text causes a recalculation of the list items, which in the menu list case
        forces the first element to be selected. We check the value of the selected option prior,
        and restore it if it differs.

        Test: fast/dom/HTMLSelectElement/selected-index-preserved-when-option-text-changes.html

        * html/HTMLOptionElement.cpp:
        (WebCore::HTMLOptionElement::setText):
        * html/HTMLSelectElement.h: promote usesMenuList() from private to public for use by HTMLOptionElement

2011-10-25  Alexey Proskuryakov  <ap@apple.com>

        Embedded PDFs should be known to DocumentLoader
        https://bugs.webkit.org/show_bug.cgi?id=70864

        Reviewed by Darin Adler.

        * WebCore.exp.in: Added exports.

2011-10-26  Mark Hahnenberg  <mhahnenberg@apple.com>

        Remove getOwnPropertySlotVirtual
        https://bugs.webkit.org/show_bug.cgi?id=70741

        Reviewed by Geoffrey Garen.

        No new tests.

        Removed all declarations and definitions of getOwnPropertySlotVirtual.
        Also replaced all call sites to getOwnPropertyVirtualVirtual with a 
        corresponding lookup in the MethodTable.

        * WebCore.exp.in:
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::DialogHandler::returnValue):
        * bindings/js/JSDOMWindowShell.cpp:
        (WebCore::JSDOMWindowShell::getOwnPropertySlot):
        * bindings/js/JSDOMWindowShell.h:
        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::CloneSerializer::getSparseIndex):
        (WebCore::CloneSerializer::getProperty):
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateHeader):
        (GenerateImplementation):
        (GenerateConstructorDeclaration):
        (GenerateConstructorDefinition):
        * bridge/objc/objc_runtime.h:
        * bridge/objc/objc_runtime.mm:
        * bridge/qt/qt_runtime.cpp:
        * bridge/qt/qt_runtime.h:
        * 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-10-26  Alejandro G. Castro  <alex@igalia.com>

        [GTK] Fix distcheck compilation
        https://bugs.webkit.org/show_bug.cgi?id=70921

        Add EventTargetFactory.in to the dist files, required after
        r98388.

        Reviewed by Martin Robinson.

        * GNUmakefile.am:

2011-10-26  Michael Saboff  <msaboff@apple.com>

        Increase StringImpl Flag Bits for 8 bit Strings
        https://bugs.webkit.org/show_bug.cgi?id=70937

        Increased the number of bits used for flags in StringImpl
        from 6 to 8 bits. This frees up 2 flag bits that will be
        used for 8-bit string support. Updated hash methods accordingly.
        Changed hash value masking from the low bits to the high
        bits.

        Reviewed by Darin Adler.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateHashValue):

2011-10-26  Dimitri Glazkov  <dglazkov@chromium.org>

        REGRESSION (r94887): Scrolling the HTML spec is more jerky now than it was (regression)
        https://bugs.webkit.org/show_bug.cgi?id=70857

        Revert r94887, because it regressed performance.

        Rubber-stamped by Antti Koivisto.

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::canShareStyleWithElement):
        (WebCore::parentStylePreventsSharing):
        * css/SelectorChecker.cpp:
        (WebCore::SelectorChecker::checkSelector):
        * dom/Element.cpp:
        (WebCore::Element::recalcStyle):
        (WebCore::checkForSiblingStyleChanges):
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::RenderStyle):
        * rendering/style/RenderStyle.h:
        (WebCore::InheritedFlags::childrenAffectedByDirectAdjacentRules):
        (WebCore::InheritedFlags::setChildrenAffectedByDirectAdjacentRules):

2011-10-26  Alexander Pavlov  <apavlov@chromium.org>

        Web Inspector: Need workaround for the red crossed circle in the status bar not bringing up the console when clicked
        https://bugs.webkit.org/show_bug.cgi?id=70928

        Reviewed by Pavel Feldman.

        * inspector/front-end/inspector.css:
        (#error-count-img):
        (#error-count + #warning-count-img):
        (#warning-count-img):
        * inspector/front-end/inspector.js:
        (WebInspector._updateErrorAndWarningCounts):

2011-10-26  Mike Reed  <reed@google.com>

        [skia] replace offscreen technique with native support for antialiased clipping
        https://bugs.webkit.org/show_bug.cgi?id=70748

        Reviewed by Stephen White.

        ~100 layout tests need to be rebaselined, as the native aa-clipping differs sometimes in the low
        bits of the result. Other than that, the results should be the same, except that now the drawing
        can go directly to the canvas, rather than being direct offscreen and then have that result
        "clipped" during the restore. This has the effect of allowing LCD text to be drawing inside a
        antialiased clip area.

        * platform/graphics/skia/PlatformContextSkia.cpp:
        (WebCore::PlatformContextSkia::State::State):
        (WebCore::PlatformContextSkia::State::cloneInheritedProperties):
        (WebCore::PlatformContextSkia::clipPathAntiAliased):
        (WebCore::PlatformContextSkia::restore):

2011-10-26  Nikolas Zimmermann  <nzimmermann@rim.com>

        CSS 2.1 failure: background-intrinsic-*
        https://bugs.webkit.org/show_bug.cgi?id=47156

        SVGs do not work as tiled background images
        https://bugs.webkit.org/show_bug.cgi?id=16281

        Apply preserveAspectRatio and synthesize viewboxes in <img>
        https://bugs.webkit.org/show_bug.cgi?id=34521

        SVG background doesn't resize properly when dimensions are changed
        https://bugs.webkit.org/show_bug.cgi?id=42944

        Images with percent height inside a floated div should use intrinsic height.
        https://bugs.webkit.org/show_bug.cgi?id=45439

        SVG image in HTML changes size as the window is resized
        https://bugs.webkit.org/show_bug.cgi?id=52045

        Reviewed by Antti Koivisto.

        Implement intrinsic sizing support for SVGImage (svg embedded through <html:img>/<svg:image>/background-image/border-image/...).
        This is demanded by CSS 2.1, and covered by new layout tests in LayoutTests/css2.1 and several new custom testcases.

        Tests: css2.1/20110323/background-intrinsic-001.htm
               css2.1/20110323/background-intrinsic-002.htm
               css2.1/20110323/background-intrinsic-003.htm
               css2.1/20110323/background-intrinsic-004.htm
               css2.1/20110323/background-intrinsic-005.htm
               css2.1/20110323/background-intrinsic-006.htm
               css2.1/20110323/background-intrinsic-007.htm
               css2.1/20110323/background-intrinsic-008.htm
               css2.1/20110323/background-intrinsic-009.htm
               svg/as-background-image/background-image-preserveaspectRatio-support.html (adapted from testcase from bug 34521)
               svg/as-background-image/background-image-tiled.html (reduction from bug 16281)
               svg/as-background-image/same-image-two-instances-background-image.html
               svg/as-image/img-preserveAspectRatio-support-1.html (reduction from bug 34521)
               svg/as-image/same-image-two-instances.html
               svg/as-image/svg-as-relative-image-with-explicit-size.html
               svg/as-image/svg-image-change-content-size.xhtml (reduction from bug 42944)
               svg/zoom/page/zoom-img-preserveAspectRatio-support-1.html

        * loader/cache/CachedImage.cpp: Enable SVGImage <-> IntSize cache.
        (WebCore::CachedImage::lookupImageForSize): Use recently introduced ImageBySizeCache, to lookup an image for a certain size.
        (WebCore::CachedImage::lookupImageForRenderer): Lookup image by renderer, which first looks up a size for a renderer, then uses lookupImageForSize().
        (WebCore::createSVGImage): Refactored from createImage(), contains the SVGImage creation part only.
        (WebCore::CachedImage::lookupOrCreateImageForRenderer): Use recently introduced ImageBySizeCache, to dynamically create copies of m_image if needed.
        (WebCore::CachedImage::setContainerSizeForRenderer): For SVGImages, pass on container size handling to ImageBySizeCache.
        (WebCore::CachedImage::imageSizeForRenderer): Figure out the image size, respecting per-renderer overrides, for a certain renderer.
        (WebCore::CachedImage::computeIntrinsicDimensions): Remove unnecessary RenderObject parameter.
        (WebCore::CachedImage::addClientForRenderer): Special variant of addClient(), overriding the existing in CachedResource.
        (WebCore::CachedImage::removeClientForRenderer): Special variant of removeClient(), that also clears the image in the ImageBySizeCache.
        (WebCore::CachedImage::createImage): Refactor SVGImage creation into createSVGImage() free function, to be useable from lookupOrCreateImageForRenderer().
        * loader/cache/CachedImage.h: Expose removeClientForRenderer().
        * page/ChromeClient.h:
        (WebCore::ChromeClient::isSVGImageChromeClient): Used to identify whether a RenderSVGRoot is embedded through a SVGImage. Returns false, by default.
        * rendering/ImageBySizeCache.cpp:
        (WebCore::ImageBySizeCache::addClient): Assert the passed renderer is valid.
        (WebCore::ImageBySizeCache::removeClient): Ditto. Allow removeClient() to be called w/o prio addClient() usage.
        (WebCore::ImageBySizeCache::setClient): New helper function, that combines the usage of addClient/removeClient, for the use in CachedImage.
        (WebCore::ImageBySizeCache::imageForSize): Respect empty sizes, just return 0, instead of asserting.
        (WebCore::ImageBySizeCache::imageForRenderer): Added a helper that retrieves an image for a renderer, by lookup up its size and using imageForSize().
        * rendering/ImageBySizeCache.h: Expose setClient() & imageForRenderer().
        * rendering/RenderBoxModelObject.cpp: Implement CSS 2.1 intrinsic size negotiation for images.
        (WebCore::resolveWidthForRatio): New inline helper function used bz calculateImageIntrinsicDimensions.
        (WebCore::resolveHeightForRatio): Ditto.
        (WebCore::resolveAgainstIntrinsicWidthOrHeightAndRatio): Ditto.
        (WebCore::resolveAgainstIntrinsicRatio):  Ditto.
        (WebCore::RenderBoxModelObject::calculateImageIntrinsicDimensions): New helper function, containing the main algorithm, which is a pure transcription of the spec.
        (WebCore::RenderBoxModelObject::calculateFillTileSize): Use new calculateImageIntrinsicDimensions() helper to figure out the intrinsic size.
        (WebCore::RenderBoxModelObject::calculateBackgroundImageGeometry): Propagate calculateFillTileSize() result to the image resource, via setContainerSizeForRenderer().
        (WebCore::RenderBoxModelObject::paintNinePieceImage): Use new calculateImageIntrinsicDimensions() helper to figure out the intrinsic size.
        * rendering/RenderBoxModelObject.h: Clarify some variable names, added calculateImageIntrinsicDimensions().
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::RenderImage): Use IntSize(), instead of IntSize(0, 0).
        (WebCore::RenderImage::updateIntrinsicSizeIfNeeded): Refactored from imageDimensionsChanged().
        (WebCore::RenderImage::imageDimensionsChanged): Use updateIntrinsicSizeIfNeeded().
        (WebCore::RenderImage::computeReplacedLogicalWidth): Use RenderReplaced::computeReplacedLogicalWidth() exclusively. For this to work, the intrinsic size must be correct.
        (WebCore::RenderImage::computeIntrinsicRatioInformation): Default implementation for non-SVGImages.
        (WebCore::RenderImage::needsPreferredWidthsRecalculation): Return true, just like RenderPart, if embeddedContentBox is not null.
        (WebCore::RenderImage::embeddedContentBox): Returns the RenderSVGRoot* renderer of the embedded SVG, if possible.
        * rendering/RenderImage.h: Remove isLogicalWidth/HeightSpecified() / computeReplacedLogicalHeight() / calcAspectRatioLogicalWidth/Height().
        * rendering/RenderImageResource.cpp:
        (WebCore::RenderImageResource::setContainerSizeForRenderer): Pass around new "float containerZoomFactor" parameter.
        * rendering/RenderImageResourceStyleImage.cpp:
        (WebCore::RenderImageResourceStyleImage::image): embeddedContentBox() is now calling image() earlier than before. We now have to handle the case that the image is pending.
        (WebCore::RenderImageResourceStyleImage::setContainerSizeForRenderer): Pass zoom factor.
        * rendering/RenderImageResourceStyleImage.h:
        * rendering/RenderListMarker.cpp:
        (WebCore::RenderListMarker::computePreferredLogicalWidths): Pass effective zoom to setContainerSizeForRenderer().
        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::computeIntrinsicLogicalWidth): Generalized this code, as RenderImage is using it as well now. Marginal changes needed.
        (WebCore::RenderReplaced::computeIntrinsicLogicalHeight): Ditto.
        (WebCore::RenderReplaced::computeReplacedLogicalWidth): Ditto.
        * rendering/style/StyleCachedImage.cpp:
        (WebCore::StyleCachedImage::computeIntrinsicDimensions): Stop passing m_renderer to CachedImage, it's no longer needed.
        (WebCore::StyleCachedImage::setContainerSizeForRenderer): Add "float containerZoomFactor" parameter.
        (WebCore::StyleCachedImage::addClient): Forward to new addClientForRenderer().
        (WebCore::StyleCachedImage::removeClient): Call new removeClientForRenderer() instead of removeClient(), so the ImageBySizeCache is also updated.
        * rendering/style/StyleCachedImage.h: Add "float containerZoomFactor" parameter to setContainerSizeForRenderer.
        * rendering/style/StyleGeneratedImage.h:
        (WebCore::StyleGeneratedImage::setContainerSizeForRenderer): Ditto.
        * rendering/style/StyleImage.h: Ditto.
        * rendering/style/StylePendingImage.h:
        (WebCore::StylePendingImage::setContainerSizeForRenderer): Ditto.
        * rendering/svg/RenderSVGImage.cpp:
        (WebCore::RenderSVGImage::layout): Always supply a container size when embedding SVGs in <svg:image>.
        * rendering/svg/RenderSVGRoot.cpp: Move "override container size" from SVGSVGElement into RenderSVGRoot, where it belongs.
        (WebCore::RenderSVGRoot::isEmbeddedThroughImageElement): Add helper method to determine whether we're loaded through SVGImage.
        (WebCore::RenderSVGRoot::computeReplacedLogicalWidth): If we have a valid container size, it has precendence (only supplied via external SVGImages).
        (WebCore::RenderSVGRoot::computeReplacedLogicalHeight): Ditto.
        (WebCore::RenderSVGRoot::layout): Remove calcViewport() usage, no need to track/override the viewport size anymore, all done in coputeReplacedLogical* now.
        (WebCore::RenderSVGRoot::paint): Use borderBoxRect() which now always matches the previously computed m_viewportSize. 
        (WebCore::RenderSVGRoot::computeRectForRepaint): Ditto.
        * rendering/svg/RenderSVGRoot.h: Move "override container size" from SVGSVGElement into RenderSVGRoot, where it belongs.
        (WebCore::RenderSVGRoot::containerSize):
        (WebCore::RenderSVGRoot::setContainerSize):
        * svg/SVGLength.cpp:
        (WebCore::SVGLength::determineViewport): Resolve lengths against override container size in documents embedded through SVGImage.
        * svg/SVGSVGElement.cpp: Remove "override container size" handling from SVGSVGElement.
        (WebCore::SVGSVGElement::SVGSVGElement): Ditto.
        (WebCore::SVGSVGElement::currentViewBoxRect): Always synthesize a viewBox, if we're embedded through SVGImage, as demanded by SVG 1.1 2nd Edition.
        * svg/SVGSVGElement.h:
        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImageChromeClient::setObserver): Helper function.
        (WebCore::SVGImageChromeClient::isSVGImageChromeClient): Return true, used to identify whether RenderSVGRoot is embedded through SVGImage.
        (WebCore::SVGImage::setContainerZoom): Forwarded to Page::setPageZoomFactor.
        (WebCore::SVGImage::setContainerSize): Assert that container size is not empty. We should never receive an empty container size.
        (WebCore::SVGImage::usesContainerSize): Adapt to override container size changes, it now lives in RenderSVGRoot instead of SVGSVGElement.
        (WebCore::SVGImage::size): New algorithm to figure out the size of an embedded SVG, as demanded by the CSS/SVG specs.
        (WebCore::SVGImage::draw): Stop calling layout() while painting!
        (WebCore::SVGImage::embeddedContentBox): Add helper which returns the RenderSVGRoot of the document.
        (WebCore::SVGImage::computeIntrinsicDimensions): Implement intrinsic ratio calculation. 
        (WebCore::SVGImage::dataChanged): Force calling FrameView::setCanHaveScrollbars(false), as SVG images now always synthesize a viewBox, and thus never receive scrollbars.
        * svg/graphics/SVGImage.h:

2011-10-26  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Properly suspend/resume Geolocation/DeviceMotion/DeviceOrientation objects
        https://bugs.webkit.org/show_bug.cgi?id=70328

        Reviewed by Simon Hausmann.

        Also remove checks for m_client in DeviceMotionController as it can never be null.

        No new tests, as the suspend/resume functionality is not fully working yet.

        * dom/DeviceMotionController.cpp:
        (WebCore::DeviceMotionController::timerFired):
        (WebCore::DeviceMotionController::addListener):
        (WebCore::DeviceMotionController::removeListener):
        (WebCore::DeviceMotionController::removeAllListeners):
        (WebCore::DeviceMotionController::suspend):
        (WebCore::DeviceMotionController::resume):
        * dom/DeviceMotionController.h:
        * dom/DeviceOrientationController.cpp:
        (WebCore::DeviceOrientationController::suspend):
        (WebCore::DeviceOrientationController::resume):
        * dom/DeviceOrientationController.h:
        * dom/Document.cpp:
        (WebCore::Document::suspendActiveDOMObjects):
        (WebCore::Document::resumeActiveDOMObjects):
        (WebCore::Document::stopActiveDOMObjects):
        * dom/Document.h:
        * dom/ScriptExecutionContext.h:
        * page/GeolocationController.cpp:
        (WebCore::GeolocationController::GeolocationController):
        (WebCore::GeolocationController::removeObserver):
        (WebCore::GeolocationController::suspend):
        (WebCore::GeolocationController::resume):
        * page/GeolocationController.h:

2011-10-26  Pavel Feldman  <pfeldman@google.com>

        Not reviewed: follow up to 98236 - moved inspector settings initialization earlier to unbreak settings panel.

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

2011-10-26  Zalan Bujtas  <zbujtas@gmail.com>

        Name viewport change event consistently.
        https://bugs.webkit.org/show_bug.cgi?id=70901

        Reviewed by Kenneth Rohde Christiansen.

        Use ViewportPropertiesDidChange term consistently throughout WebKit.

        No tests needed as the change is only method renaming.

        * page/Chrome.cpp:
        (WebCore::Chrome::dispatchViewportPropertiesDidChange):
        * page/Chrome.h:
        * page/ChromeClient.h:
        (WebCore::ChromeClient::dispatchViewportPropertiesDidChange):
        * page/Page.cpp:
        (WebCore::Page::updateViewportArguments):

2011-10-25  Stephen White  <senorblanco@chromium.org>

        [chromium] Canvas2D should rate-limit drawing to prevent swamping the GPU process.
        https://bugs.webkit.org/show_bug.cgi?id=70367

        Reviewed by James Robinson.

        Sadly, we don't have infrastructure to test this kind of GPU swamping
        yet.

        * WebCore.gypi:
        Add RateLimiter.* to the Chromium build.
        * platform/graphics/chromium/Canvas2DLayerChromium.cpp:
        (WebCore::Canvas2DLayerChromium::contentChanged):
        When the layer is notified that the contents have changed, ping the
        rate limiter.
        * platform/graphics/chromium/Canvas2DLayerChromium.h:
        * platform/graphics/chromium/GraphicsLayerChromium.cpp:
        (WebCore::GraphicsLayerChromium::setContentsNeedsDisplay):
        Call (new) virtual contentChanged() on a layer when its contents have
        been changed (e.g., by a drawing call).
        * platform/graphics/chromium/LayerChromium.h:
        (WebCore::LayerChromium::contentChanged):
        New virtual contentChanged().
        * platform/graphics/chromium/RateLimiter.cpp: Added.
        (WebCore::RateLimiter::create):
        Rate limiter factory function.
        (WebCore::RateLimiter::RateLimiter):
        (WebCore::RateLimiter::start):
        Public API to start rate limiting a context.
        (WebCore::RateLimiter::stop):
        Public API to stop rate limiting a context.
        (WebCore::RateLimiter::rateLimitContext):
        Internal timer callback when a context should be rate limited.
        * platform/graphics/chromium/RateLimiter.h: Added.
        * platform/graphics/chromium/WebGLLayerChromium.cpp:
        (WebCore::WebGLLayerChromium::WebGLLayerChromium):
        Remove rate limiting timer and extension check (moved to RateLimiter).
        (WebCore::WebGLLayerChromium::contentChanged):
        The function formerly known as setTextureUpdated(), now renamed to
        match the base class virtual contentChanged().  Call rate limiter in
        CCLayerTreeHost (local implementation removed).
        (WebCore::WebGLLayerChromium::setContext):
        When the context is changed, stop the pending rate limiter on the old
        context.  Remove extension check (moved to RateLimiter).
        * platform/graphics/chromium/WebGLLayerChromium.h:
        Remove rate limiting timer and extension check (moved to RateLimiter).
        * platform/graphics/chromium/cc/CCLayerTreeHost.cpp:
        (WebCore::CCLayerTreeHost::startRateLimiter):
        Public API for starting per-context rate limiter.
        (WebCore::CCLayerTreeHost::stopRateLimiter):
        Public API for stopping per-context rate limiter.
        * platform/graphics/chromium/cc/CCLayerTreeHost.h:
        Implementation of per-GraphicsContext3D RateLimiter.


2011-10-26  Pavel Feldman  <pfeldman@chromium.org>

        Not reviewed: fixing inspector extensions tests.

        * inspector/front-end/ConsoleMessage.js:
        (WebInspector.ConsoleMessageImpl):
        * inspector/front-end/ExtensionServer.js:
        (WebInspector.ExtensionServer.prototype._onAddConsoleMessage):

2011-10-26  Balazs Kelemen  <kbalazs@webkit.org>

        ParallelJobs path of FEConvolveMatrix is erroneous
        https://bugs.webkit.org/show_bug.cgi?id=70409

        Reviewed by Zoltan Herczeg.

        Covered by existing tests.

        * platform/graphics/filters/FEConvolveMatrix.cpp:
        (WebCore::FEConvolveMatrix::fastSetInteriorPixels):
        Reject the silly idea that bytes per pixel ratio is 3 in preserveAlphaValues mode.
        The bug was hidden so far because that computation has no effect when we are going
        with the full inferior area in one round (in that case clipBottom and yEnd are equals
        and the value of the expression is always 0). With ParallelJobs we process sub-areas
        on each thread which has triggered the issue.

2011-10-26  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r98393.
        http://trac.webkit.org/changeset/98393
        https://bugs.webkit.org/show_bug.cgi?id=70892

        "Compilation is broken on Chromium Webkit Mac Builder (dbg) "
        (Requested by yurys on #webkit).

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

2011-10-26  Pavel Feldman  <pfeldman@google.com>

        Web Inspector: order console message parameters for better optional parameters handling.
        https://bugs.webkit.org/show_bug.cgi?id=70809

        Reviewed by Yury Semikhatsky.

        * inspector/Inspector.json:
        * inspector/front-end/ConsoleMessage.js:
        (WebInspector.ConsoleMessageImpl):
        (WebInspector.ConsoleMessageImpl.prototype._formatMessage):
        * inspector/front-end/ConsoleModel.js:
        (WebInspector.ConsoleModel.prototype._messageRepeatCountUpdated):
        (WebInspector.ConsoleMessage.create):
        (WebInspector.ConsoleDispatcher.prototype.messageAdded):
        * inspector/front-end/ConsoleView.js:
        (WebInspector.ConsoleCommandResult):
        (WebInspector.ConsoleMessage.create):
        * inspector/front-end/ExtensionServer.js:
        (WebInspector.ExtensionServer.prototype._onAddConsoleMessage):
        * inspector/front-end/NetworkManager.js:
        (WebInspector.NetworkDispatcher.prototype._updateResourceWithResponse):
        * inspector/front-end/inspector.js:
        (WebInspector.log.logMessage):
        (WebInspector.log):

2011-10-26  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Debugger fails when there is an invalid watch expression.
        https://bugs.webkit.org/show_bug.cgi?id=70718

        Reviewed by Pavel Feldman.

        Test: inspector/debugger/watch-expressions-panel-switch.html

        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype.evaluateInSelectedCallFrame):

2011-10-26  Fady Samuel  <fsamuel@chromium.org>

        Page Scale Factor broken when navigating history on pages with child frames
        https://bugs.webkit.org/show_bug.cgi?id=70459

        Reviewed by Darin Fisher.

        With frameScaleFactor now always returning 1.0 for subframes and pageScaleFactor for the mainFrame,
        and there being only a single pageScaleFactor, history for scaling is broken. Scaling history is
        saved on a per frame basis but restored, overriding the per-page pageScaleFactor multiple times.
        As a result, sometimes pages that have subframes end up getting a scale factor of 1.0 instead
        of the correct scale factor that was assigned to the main frame.

        No new tests because I don't know how to test this.

        * loader/HistoryController.cpp:
        (WebCore::HistoryController::restoreScrollPositionAndViewState):

2011-10-26  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r98429.
        http://trac.webkit.org/changeset/98429
        https://bugs.webkit.org/show_bug.cgi?id=70881

        "webkit_gpu_tests fail in Chromium" (Requested by yurys on
        #webkit).

        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::initialize):
        * platform/graphics/chromium/WebGLLayerChromium.cpp:
        (WebCore::WebGLLayerChromium::layerRendererContext):
        * platform/graphics/chromium/cc/CCHeadsUpDisplay.cpp:
        (WebCore::CCHeadsUpDisplay::enabled):
        * platform/graphics/chromium/cc/CCLayerTreeHost.cpp:
        (WebCore::CCLayerTreeHost::initialize):
        (WebCore::CCLayerTreeHost::context):
        (WebCore::CCLayerTreeHost::setNeedsAnimate):
        (WebCore::CCLayerTreeHost::setNeedsCommitThenRedraw):
        (WebCore::CCLayerTreeHost::setNeedsRedraw):
        (WebCore::CCLayerTreeHost::composite):
        * platform/graphics/chromium/cc/CCLayerTreeHost.h:
        (WebCore::CCSettings::CCSettings):
        * platform/graphics/chromium/cc/CCThreadProxy.cpp:
        (WebCore::CCThreadProxy::setThread):
        * platform/graphics/chromium/cc/CCThreadProxy.h:

2011-10-26  Ben Wells  <benwells@chromium.org>

        Canvas drawImage with SourceIn, DestinationIn, SourceOut, DestinationAtop and Copy have errors
        https://bugs.webkit.org/show_bug.cgi?id=66920

        Reviewed by James Robinson.

        Test: fast/canvas/canvas-composite-image.html

        Use the same method as fills to handle composited drawImage calls that will affect the whole
        canvas. To do this code used when doing fills has been factored into seperate functions and
        used by drawImage. Some functions used to do these types of operations have also been renamed.

        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::isFullCanvasCompositeMode):
        (WebCore::CanvasRenderingContext2D::fill):
        (WebCore::CanvasRenderingContext2D::fillRect):
        (WebCore::CanvasRenderingContext2D::drawImage):
        (WebCore::CanvasRenderingContext2D::calculateCompositingBufferRect):
        (WebCore::CanvasRenderingContext2D::createCompositingBuffer):
        (WebCore::CanvasRenderingContext2D::compositeBuffer):
        (WebCore::CanvasRenderingContext2D::fullCanvasCompositedDrawImage):
        (WebCore::CanvasRenderingContext2D::fullCanvasCompositedFill):
        * html/canvas/CanvasRenderingContext2D.h:

2011-10-25  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r98379.
        http://trac.webkit.org/changeset/98379
        https://bugs.webkit.org/show_bug.cgi?id=70875

        Did not pass on JSC ports (Requested by abarth on #webkit).

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateHeader):
        (GenerateImplementation):
        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateHeader):
        (GenerateArgumentsCountCheck):
        (GenerateImplementation):
        * html/canvas/CanvasRenderingContext2D.idl:
        * page/DOMWindow.idl:

2011-10-25  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r98346.
        http://trac.webkit.org/changeset/98346
        https://bugs.webkit.org/show_bug.cgi?id=70874

        Breaks JSC-based bots. (Requested by pfeldman on #webkit).

        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype.evaluateInSelectedCallFrame):

2011-10-25  Nat Duca  <nduca@chromium.org>

        [chromium] Enable threaded compositing via CCThreadProxy::hasThread only
        https://bugs.webkit.org/show_bug.cgi?id=70838

        Reviewed by James Robinson.

        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::initialize):
        * platform/graphics/chromium/WebGLLayerChromium.cpp:
        (WebCore::WebGLLayerChromium::layerRendererContext):
        * platform/graphics/chromium/cc/CCHeadsUpDisplay.cpp:
        (WebCore::CCHeadsUpDisplay::enabled):
        * platform/graphics/chromium/cc/CCLayerTreeHost.cpp:
        (WebCore::CCLayerTreeHost::initialize):
        (WebCore::CCLayerTreeHost::context):
        (WebCore::CCLayerTreeHost::setNeedsAnimate):
        (WebCore::CCLayerTreeHost::setNeedsCommitThenRedraw):
        (WebCore::CCLayerTreeHost::setNeedsRedraw):
        (WebCore::CCLayerTreeHost::composite):
        * platform/graphics/chromium/cc/CCLayerTreeHost.h:
        (WebCore::CCSettings::CCSettings):
        * platform/graphics/chromium/cc/CCThreadProxy.cpp:
        (WebCore::CCThreadProxy::hasThread):
        * platform/graphics/chromium/cc/CCThreadProxy.h:

2011-10-25  Xiaomei Ji  <xji@chromium.org>

        --webkit-visual-word does not work in multi-line
        https://bugs.webkit.org/show_bug.cgi?id=61344

        Reviewed by Ryosuke Niwa.

        Get next or previous root inline box (which is not in the same
        render object as the current root inline box) by traversing DOM node.

        Test: editing/selection/move-by-word-visually-inline-block-positioned-element.html

        * editing/visible_units.cpp:
        (WebCore::previousRootInlineBox):
        (WebCore::nextRootInlineBox):
        (WebCore::leftInlineBox):
        (WebCore::rightInlineBox):

2011-10-25  Adam Barth  <abarth@webkit.org>

        JSEventTarget.cpp has a bunch of unnessary includes
        https://bugs.webkit.org/show_bug.cgi?id=70865

        Reviewed by Eric Seidel.

        In the process of removing these includes, I noticed we had a bunch of
        non-autogenerated code in this file, which I've now autogenerated.

        * bindings/js/JSEventTarget.cpp:
        (WebCore::toEventTarget):
            - One subtly here is the outter static_cast, which is caused by an
              inheritance infelicity in JavaScriptAudioNode, which I've noted
              with a FIXME.  In any case, the extra static_cast shouldn't cause
              any trouble.
        * webaudio/JavaScriptAudioNode.h:

2011-10-25  Adam Barth  <abarth@webkit.org>

        V8DOMWrapper.cpp has unneeded header includes
        https://bugs.webkit.org/show_bug.cgi?id=70863

        Reviewed by Eric Seidel.

        * bindings/v8/V8DOMWrapper.cpp:

2011-10-25  Mark Hahnenberg  <mhahnenberg@apple.com>

        Resetting baseline for test bindings

        Unreviewed preemptive build fix

        No new tests.

        * bindings/scripts/test/JS/JSTestObj.cpp:
        * bindings/scripts/test/JS/JSTestObj.h:

2011-10-25  Mark Hahnenberg  <mhahnenberg@apple.com>

        Remove deletePropertyVirtual
        https://bugs.webkit.org/show_bug.cgi?id=70738

        Reviewed by Geoffrey Garen.

        No new tests.

        Removed all declarations and definitions of deletePropertyVirtual.
        Also replaced all call sites to deletePropertyVirtual with a 
        corresponding lookup in the MethodTable.

        * WebCore.exp.in:
        * bindings/js/JSDOMStringMapCustom.cpp:
        (WebCore::JSDOMStringMap::deleteProperty):
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::deleteProperty):
        * bindings/js/JSDOMWindowShell.cpp:
        (WebCore::JSDOMWindowShell::deleteProperty):
        * bindings/js/JSDOMWindowShell.h:
        * bindings/js/JSHistoryCustom.cpp:
        (WebCore::JSHistory::deleteProperty):
        * bindings/js/JSLocationCustom.cpp:
        (WebCore::JSLocation::deleteProperty):
        * bindings/js/JSStorageCustom.cpp:
        (WebCore::JSStorage::deleteProperty):
        * bindings/js/ScriptObject.cpp:
        (WebCore::ScriptGlobalObject::remove):
        * bindings/objc/WebScriptObject.mm:
        (-[WebScriptObject removeWebScriptKey:]):
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateHeader):
        * bridge/NP_jsobject.cpp:
        (_NPN_RemoveProperty):
        * bridge/jni/jni_jsobject.mm:
        (JavaJSObject::removeMember):
        * bridge/objc/objc_runtime.h:
        * bridge/objc/objc_runtime.mm:
        * bridge/runtime_array.cpp:
        * bridge/runtime_array.h:
        * bridge/runtime_object.cpp:
        * bridge/runtime_object.h:

2011-10-25  Chris Fleizach  <cfleizach@apple.com>

        AX: WebKit does not expose HTML label for slider elements
        https://bugs.webkit.org/show_bug.cgi?id=70856

        Reviewed by Darin Adler.

        Test: platform/mac/accessibility/slider-allows-title-ui-element.html

        * accessibility/AccessibilitySlider.h:
        (WebCore::AccessibilitySlider::isControl):
        * accessibility/mac/WebAccessibilityObjectWrapper.mm:
        (-[WebAccessibilityObjectWrapper accessibilityAttributeNames]):

2011-10-25  Mark Hahnenberg  <mhahnenberg@apple.com>

        Remove putVirtual
        https://bugs.webkit.org/show_bug.cgi?id=70740

        Reviewed by Geoffrey Garen.

        No new tests.

        Removed all declarations and definitions of putVirtual.
        Also replaced all call sites to putVirtual with a 
        corresponding lookup in the MethodTable.

        * WebCore.exp.in:
        * bindings/js/JSDOMWindowCustom.cpp:
        * bindings/js/JSDOMWindowShell.cpp:
        (WebCore::JSDOMWindowShell::put):
        * bindings/js/JSDOMWindowShell.h:
        * bindings/js/JSPluginElementFunctions.cpp:
        (WebCore::runtimeObjectCustomPut):
        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::CloneDeserializer::putProperty):
        * bindings/objc/WebScriptObject.mm:
        (-[WebScriptObject setValue:forKey:]):
        (-[WebScriptObject setWebScriptValueAtIndex:value:]):
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateHeader):
        (GenerateImplementation):
        * bridge/NP_jsobject.cpp:
        (_NPN_SetProperty):
        * bridge/jni/jni_jsobject.mm:
        (JavaJSObject::setMember):
        (JavaJSObject::setSlot):
        * bridge/objc/objc_runtime.h:
        * bridge/objc/objc_runtime.mm:
        * bridge/qt/qt_runtime.cpp:
        (JSC::Bindings::convertQVariantToValue):
        * bridge/runtime_array.cpp:
        * bridge/runtime_array.h:
        * bridge/runtime_object.cpp:
        * bridge/runtime_object.h:
        * bridge/testqtbindings.cpp:
        (main):

2011-10-25  Adam Barth  <abarth@webkit.org>

        EventTargetFactory.in is not sorted
        https://bugs.webkit.org/show_bug.cgi?id=70855

        Reviewed by Eric Seidel.

        This patch sorts the file.  I was not able to measure a performance
        difference using the microbenchmark included with this patch.

        * dom/EventTargetFactory.in:

2011-10-25  Adam Barth  <abarth@webkit.org>

        Attempt to fix the Windows build.  Windows mashes all these files into
        one, which doesn't respect the compilation unit rules of C++.

        * bindings/js/JSEventCustom.cpp:
        * bindings/js/JSEventTarget.cpp:

2011-10-25  Ryosuke Niwa  <rniwa@webkit.org>

        Moving to the start of line should not place the caret outside of the table
        https://bugs.webkit.org/show_bug.cgi?id=70757

        Reviewed by Chang Shu.

        The bug was caused by positionAvoidingFirstPositionInTable. Get rid of the function.

        Test: editing/selection/table-lineboundary.html

        * editing/visible_units.cpp:
        (WebCore::startPositionForLine):

2011-10-25  Beth Dakin  <bdakin@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=70852
        Setting up a HiDPI base-level GraphicsContext should be more straightforward for 
        WebKit2

        Reviewed by Dan Bernstein.

        This patch removes the old cg-only GraphicsContext::setBaseCTM() api, and adds 
        platform-independent GraphicsContext::applyDeviceScaleFactor().
        * WebCore.exp.in:
        * platform/graphics/GraphicsContext.cpp:
        (WebCore::GraphicsContext::platformApplyDeviceScaleFactor):
        (WebCore::GraphicsContext::applyDeviceScaleFactor):
        * platform/graphics/GraphicsContext.h:
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::platformApplyDeviceScaleFactor):

        Since this patch removes GraphicsContext::setBaseCTM(), this code has been 
        reverted to do what it used to do before that was added; it just calls into 
        WebCoreSystemInterface directly.
        * platform/graphics/cg/ImageCG.cpp:
        (WebCore::Image::drawPattern):

2011-10-25  Anders Carlsson  <andersca@apple.com>

        Plug-ins have to use JavaScript to find out the current device scale factor
        https://bugs.webkit.org/show_bug.cgi?id=67225

        Reviewed by Darin Adler.

        Test: platform/mac-wk2/plugins/contents-scale-factor.html

        Add NPNVcontentsScaleFactor, as per https://wiki.mozilla.org/NPAPI:ContentsScaleFactor.

        * plugins/npapi.h:

2011-10-25  Adam Klein  <adamk@chromium.org>

        Forward declare MutationObserverEntry as a struct to fix clang build
        https://bugs.webkit.org/show_bug.cgi?id=70853

        Reviewed by Ryosuke Niwa.

        Node.h forward declared MutationObserverEntry as a class, and clang
        complains if the two declarations don't match.

        * dom/Node.h:

2011-10-25  Dan Bernstein  <mitz@apple.com>

        Caret can be positioned or repainted incorrectly in flipped-blocks multi-column blocks
        https://bugs.webkit.org/show_bug.cgi?id=70851

        Reviewed by Dave Hyatt.

        * manual-tests/caret-in-columns-flipped.html: Added.
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::adjustForColumns): Removed flipped-blocks writing mode considerations
        from this function, since not all callers were expecting it to account for flippedness. This makes
        it similar to adjustRectForColumns() in not adjusting for flippedness.
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::offsetFromContainer): In the columns case, account for flipped-blocks modes
        by first mapping the point and the offset to non-flipped, non-columns space, then adjusting for
        columns, then flipping.

2011-10-25  Michal Mocny  <mmocny@google.com>

        LayerRendererChromium::setVisible called needlessly without a visibility change
        https://bugs.webkit.org/show_bug.cgi?id=70766

        Reviewed by Kenneth Russell.

        Check that visibility has actually changed before calling LayerRendererChromium::setVisible

        * platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:
        (WebCore::CCLayerTreeHostImpl::CCLayerTreeHostImpl):
        (WebCore::CCLayerTreeHostImpl::setVisible):
        * platform/graphics/chromium/cc/CCLayerTreeHostImpl.h:

2011-10-25  Anders Carlsson  <andersca@apple.com>

        REGRESSION(97821): HistoryController::itemsAreClones crashes a lot
        https://bugs.webkit.org/show_bug.cgi?id=70827
        <rdar://problem/10342925>

        Reviewed by Adam Barth.

        Check that m_currentItem is non-null before passing it to itemsAreClones. While I wasn't
        able to make a test case that would reproduce this crash, we do check m_currentItem for null
        everywhere else, and the crash log indicates that this would fix the crash.

        * loader/HistoryController.cpp:
        (WebCore::HistoryController::recursiveUpdateForCommit):

2011-10-25  Adam Barth  <abarth@webkit.org>

        EventTarget.h shouldn't need to know about every feature and ifdef
        https://bugs.webkit.org/show_bug.cgi?id=70659

        Reviewed by Darin Adler.

        This patch follows the approach of Event.h and introduces an
        interfaceName virtual function that returns the name of the DOM
        interface for the concrete type of the object.  This function lets us
        remove a large number of fake dynamic casts.

        * CMakeLists.txt:
        * CodeGenerators.pri:
        * DerivedSources.make:
        * GNUmakefile.am:
        * WebCore.gyp/WebCore.gyp:
        * WebCore.gyp/scripts/action_makenames.py:
            - Teach action_makenames how to handle the new "in" file.
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSEventTarget.cpp:
        (WebCore::toJS):
            - Use the new autogenerated macro to remove a large amount of
              feature-specific code.
        * bindings/js/WorkerScriptController.cpp:
        (WebCore::WorkerScriptController::initScript):
        * bindings/objc/DOM.mm:
        (kit):
            - The SVGElementInstance branch was never taken previously because
              SVGElementInstance::toNode returns a non-NULL value. This code
              was introduced in http://trac.webkit.org/changeset/42618 and
              doesn't appear to have ever worked as the author intended.
        * bindings/v8/V8DOMWrapper.cpp:
        (WebCore::V8DOMWrapper::convertEventTargetToV8Object):
            - Use the new autogenerated macro to remove a large amount of
              feature-specific code.
        * dom/EventNames.cpp:
        (WebCore::EventNames::EventNames):
        * dom/EventNames.h:
        * dom/EventTarget.cpp:
        * dom/EventTarget.h:
        * dom/EventTargetFactory.in: Added.
            - Add a new "in" file that lists all the EventTargets.
        * dom/LocalMediaStream.cpp:
        (WebCore::LocalMediaStream::interfaceName):
        * dom/LocalMediaStream.h:
        * dom/MediaStream.cpp:
        (WebCore::MediaStream::interfaceName):
        * dom/MediaStream.h:
        * dom/MessagePort.cpp:
        (WebCore::MessagePort::interfaceName):
        * dom/MessagePort.h:
        * dom/Node.cpp:
        (WebCore::Node::toNode):
        (WebCore::Node::interfaceName):
        * dom/Node.h:
        * dom/make_event_factory.pl:
            - Generalize make_event_factory.pl to be able to generate
              interfaces for different namespaces.
        * fileapi/FileReader.cpp:
        (WebCore::FileReader::interfaceName):
        * fileapi/FileReader.h:
        * fileapi/FileWriter.cpp:
        (WebCore::FileWriter::interfaceName):
        * fileapi/FileWriter.h:
        * loader/appcache/DOMApplicationCache.cpp:
        (WebCore::DOMApplicationCache::interfaceName):
        * loader/appcache/DOMApplicationCache.h:
        * notifications/Notification.cpp:
        (WebCore::Notification::interfaceName):
        * notifications/Notification.h:
        (WebCore::Notification::scriptExecutionContext):
        * p2p/PeerConnection.cpp:
        (WebCore::PeerConnection::interfaceName):
        * p2p/PeerConnection.h:
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::interfaceName):
        (WebCore::DOMWindow::toDOMWindow):
        * page/DOMWindow.h:
        * page/EventSource.cpp:
        (WebCore::EventSource::interfaceName):
        * page/EventSource.h:
        * storage/IDBDatabase.cpp:
        (WebCore::IDBDatabase::interfaceName):
        * storage/IDBDatabase.h:
        * storage/IDBRequest.cpp:
        (WebCore::IDBRequest::interfaceName):
        * storage/IDBRequest.h:
        * storage/IDBTransaction.cpp:
        (WebCore::IDBTransaction::interfaceName):
        * storage/IDBTransaction.h:
        * storage/IDBVersionChangeRequest.cpp:
        (WebCore::IDBVersionChangeRequest::interfaceName):
        * storage/IDBVersionChangeRequest.h:
        * svg/SVGElementInstance.cpp:
        (WebCore::SVGElementInstance::interfaceName):
        * svg/SVGElementInstance.h:
        (WebCore::SVGElementInstance::toNode):
        * webaudio/AudioContext.cpp:
        (WebCore::AudioContext::interfaceName):
        (WebCore::AudioContext::scriptExecutionContext):
        * webaudio/AudioContext.h:
        * webaudio/JavaScriptAudioNode.cpp:
        (WebCore::JavaScriptAudioNode::interfaceName):
        * webaudio/JavaScriptAudioNode.h:
        * websockets/WebSocket.cpp:
        (WebCore::WebSocket::interfaceName):
        * websockets/WebSocket.h:
        * workers/DedicatedWorkerContext.cpp:
        (WebCore::DedicatedWorkerContext::interfaceName):
        * workers/DedicatedWorkerContext.h:
        * workers/DefaultSharedWorkerRepository.cpp:
        (WebCore::SharedWorkerConnectTask::performTask):
        * workers/SharedWorker.cpp:
        (WebCore::SharedWorker::interfaceName):
        * workers/SharedWorker.h:
        * workers/SharedWorkerContext.cpp:
        (WebCore::SharedWorkerContext::interfaceName):
        * workers/SharedWorkerContext.h:
        * workers/Worker.cpp:
        (WebCore::Worker::interfaceName):
        * workers/Worker.h:
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::interfaceName):
        * xml/XMLHttpRequest.h:
        * xml/XMLHttpRequestUpload.cpp:
        (WebCore::XMLHttpRequestUpload::interfaceName):
        * xml/XMLHttpRequestUpload.h:

2011-10-25  Pavel Podivilov  <podivilov@chromium.org>

        Fix several minor problems in idls.
        https://bugs.webkit.org/show_bug.cgi?id=70811

        Reviewed by Adam Barth.

        This patch does not have any effect on generated bindings.

        * dom/DataTransferItems.idl:
        * page/History.idl:
        * storage/IDBIndex.idl:
        * xml/XMLHttpRequest.idl:

2011-10-25  Nate Chapin  <japhet@chromium.org>

        Make DocumentThreadableLoader a CachedResourceClient.
        This will allow us to cache ThreadableLoaderClients as
        appropriate in a later patch.
        https://bugs.webkit.org/show_bug.cgi?id=61225

        Reviewed by Antti Koivisto.

        No new tests, no functionality change intended.

        * WebCore.gypi:
        * loader/DocumentThreadableLoader.cpp:
        (WebCore::DocumentThreadableLoader::notifyFinished): CachedResourceClients don't send separate callbacks
            for didFail() and didFinishLoading(), so we need to differentiate here.
        (WebCore::DocumentThreadableLoader::loadRequest): Call CachedResourceLoader::requestRawResource()
            instead of ResourceLoadScheduler::scheduleSubresourceLoad().
        * loader/DocumentThreadableLoader.h:
        * loader/cache/CachedRawResource.cpp:
        (WebCore::CachedRawResource::data): Handle the complexity of some ThreadableLoaderClients setting
            DoNotBufferData in ResoureLoaderOptions. If the DataBufferingPolicy is BufferData, then the
            'data' input parameter will contain all data received so far, and we need to determine the
            incremental data to forward to the clients. If the policy is DoNotBufferData, 'data' is just
            the incremental data.
        * loader/cache/CachedRawResource.h:
        * loader/cache/CachedResource.cpp:
        * loader/cache/CachedResource.h:
        (WebCore::CachedResource::preloadResult):
        (WebCore::CachedResource::didSendData):
        (WebCore::CachedResource::didDownloadData):
        (WebCore::CachedResource::setLoadFinishTime):
        (WebCore::CachedResource::loadFinishTime):
        * loader/cache/CachedResourceClient.h: Add several new callbacks needed by DocumentThreadableLoader.
        * loader/cache/CachedResourceRequest.cpp:
        (WebCore::CachedResourceRequest::didReceiveResponse): CachedResource::setResponse() can now cancel
            the request, so protect appropriately.
        * loader/cache/CachedResourceRequest.h:
        * loader/chromium/CachedRawResourceChromium.cpp: Added (plumb didDownloadData() to DocumentThreadableLoader).
        * loader/chromium/CachedResourceRequestChromium.cpp: Added (plumb didDownloadData() to DocumentThreadableLoader).
        * loader/chromium/DocumentThreadableLoaderChromium.cpp:
        * platform/network/BlobResourceHandle.cpp:
        (WebCore::BlobResourceHandle::notifyResponse): Protect before setting response, since it might kill us.

2011-10-25  Pavel Podivilov  <podivilov@chromium.org>

        Get rid of optional parameters in the middle in IDLs.
        https://bugs.webkit.org/show_bug.cgi?id=70816

        Reviewed by Adam Barth.

        Optional parameters in the middle are prohibited by WebIDL spec.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateHeader):
        (GenerateImplementation):
        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateHeader):
        (GenerateArgumentsCountCheck):
        (GenerateImplementation):
        * html/canvas/CanvasRenderingContext2D.idl:
        * page/DOMWindow.idl:

2011-10-25  Chris Evans  <cevans@google.com>

        Manage the CSS property array length correctly
        https://bugs.webkit.org/show_bug.cgi?id=70783

        Reviewed by Adam Barth.

        * css/CSSParser.cpp:
        (WebCore::CSSParser::addProperty): don't allow max length to get out of sync with the buffer.

2011-10-25  Tony Chang  <tony@chromium.org>

        avoid unnecessary layouts of flex items during the flex pass
        https://bugs.webkit.org/show_bug.cgi?id=70557

        Reviewed by Ojan Vafai.

        If the preferred size of a flex item is provided, we don't need to
        layout the flex item when computing the preferred size.  This allows
        us to only call layout on each flex item once in the common case.

        No new tests, covered by existing tests.

        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::flowAwareLogicalWidthLengthForChild):
        (WebCore::RenderFlexibleBox::preferredLogicalContentWidthForFlexItem):
        (WebCore::RenderFlexibleBox::computePreferredLogicalWidth):
        (WebCore::RenderFlexibleBox::layoutAndPlaceChildrenInlineDirection):
        * rendering/RenderFlexibleBox.h:

2011-10-25  Fady Samuel  <fsamuel@chromium.org>

        Crash in WebCore::RenderTableSection::addChild due to assert failure
        https://bugs.webkit.org/show_bug.cgi?id=70678

        Reviewed by David Hyatt.

        Tests: fast/table/table-anonymous-cell-bug.html
               fast/table/table-anonymous-row-bug.html
               fast/table/table-anonymous-section-bug.html

        If the child being added is not a Section/Row/Cell, and the previous sibling is not anonymous, 
        we need to create a new anonymous Section/Row/Cell respectively, instead of failing an
        assert.

        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::addChild):
        * rendering/RenderTableRow.cpp:
        (WebCore::RenderTableRow::addChild):
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::addChild):

2011-10-25  Mark Hahnenberg  <mhahnenberg@apple.com>

        Add getOwnPropertySlot to MethodTable
        https://bugs.webkit.org/show_bug.cgi?id=69807

        Reviewed by Oliver Hunt.

        No new tests.

        * bridge/runtime_method.h: Changed getOwnPropertySlot to be protected so 
        subclasses can reference it in their MethodTables.

2011-10-25  Simon Fraser  <simon.fraser@apple.com>

        REGRESSION (r88580): Cursor fails to change to pointer on embedded Google maps popups
        https://bugs.webkit.org/show_bug.cgi?id=62797

        Reviewed by Chris Marrin.
        
        When hit testing through transformed layers, RenderLayer would simply use
        the composited bounds of the layer as the localHitTestRect for hit testing sublayers.
        However, this broke hit testing on pages that have a composited, non-transformed layer
        which falls outside the bounds of its parent, composited-transformed layer, like Google
        Maps.
        
        Fix by mapping the hitTestRect through transforms. However this is tricky, because
        mapping a rect into the coordinate system of a layer can result in invalid rectangles
        when point projection results in a negative w component. Fix TransformationMatrix::projectPoint()
        to detect this case and replace X and Y with large values, and add boundsOfProjectedQuad(), which 
        maps rectangles with possibly-infinite location or bounds into rects which are representable
        in an IntRect.

        Tests: transforms/3d/hit-testing/composited-hit-test.html
               transforms/3d/hit-testing/rotated-hit-test-with-child.html
               transforms/3d/hit-testing/rotated-hit-test2.html

        * platform/graphics/transforms/TransformationMatrix.cpp:
        (WebCore::TransformationMatrix::projectPoint):
        (WebCore::TransformationMatrix::projectQuad):
        (WebCore::clampEdgeValue):
        (WebCore::TransformationMatrix::boundsOfProjectedQuad):
        * platform/graphics/transforms/TransformationMatrix.h:
        * rendering/HitTestingTransformState.cpp:
        (WebCore::HitTestingTransformState::boundsOfMappedQuad):
        * rendering/HitTestingTransformState.h:
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::hitTestLayer):

2011-10-25  Adrienne Walker  <enne@google.com>

        [chromium] Batch up texture uploads so that they can be updated incrementally
        https://bugs.webkit.org/show_bug.cgi?id=70454

        Reviewed by James Robinson.

        Because texture uploads can sometimes take more than a frame to
        complete, collect all the uploads that need to occur in a
        CCTextureUpdater so that we can easily incrementally upload some of
        them, interleaving input and drawing so that the compositor thread
        continues to appear responsive during a commit.

        This change doesn't actually interleave the commits, it just pushes
        the infrastructure for doing so up to the CCProxy level so that a
        future scheduler can make this decision.

        VideoLayerChromium is the only layer type to not use this system. It
        needs to be converted to use a texture updater first and it is less of
        a priority than the tiled layers.

        * WebCore.gypi:
        * platform/graphics/chromium/Canvas2DLayerChromium.cpp:
        (WebCore::Canvas2DLayerChromium::updateCompositorResources):
        * platform/graphics/chromium/Canvas2DLayerChromium.h:
        * platform/graphics/chromium/LayerChromium.h:
        (WebCore::LayerChromium::updateCompositorResources):
        * platform/graphics/chromium/TiledLayerChromium.cpp:
        (WebCore::TiledLayerChromium::updateCompositorResources):
        * platform/graphics/chromium/TiledLayerChromium.h:
        * platform/graphics/chromium/VideoLayerChromium.cpp:
        (WebCore::VideoLayerChromium::updateCompositorResources):
        * platform/graphics/chromium/VideoLayerChromium.h:
        * platform/graphics/chromium/WebGLLayerChromium.cpp:
        (WebCore::WebGLLayerChromium::updateCompositorResources):
        * platform/graphics/chromium/WebGLLayerChromium.h:
        * platform/graphics/chromium/cc/CCLayerTreeHost.cpp:
        (WebCore::CCLayerTreeHost::beginCommitOnImplThread):
        (WebCore::CCLayerTreeHost::finishCommitOnImplThread):
        (WebCore::CCLayerTreeHost::updateCompositorResources):
        * platform/graphics/chromium/cc/CCLayerTreeHost.h:
        * platform/graphics/chromium/cc/CCSingleThreadProxy.cpp:
        (WebCore::CCSingleThreadProxy::setNeedsCommit):
        (WebCore::CCSingleThreadProxy::doCommit):
        (WebCore::CCSingleThreadProxy::commitIfNeeded):
        * platform/graphics/chromium/cc/CCSingleThreadProxy.h:
        * platform/graphics/chromium/cc/CCTextureUpdater.cpp: Added.
        (WebCore::CCTextureUpdater::CCTextureUpdater):
        (WebCore::CCTextureUpdater::~CCTextureUpdater):
        (WebCore::CCTextureUpdater::append):
        (WebCore::CCTextureUpdater::update):
        (WebCore::CCTextureUpdater::clear):
        * platform/graphics/chromium/cc/CCTextureUpdater.h: Added.
        (WebCore::CCTextureUpdater::allocator):
        * platform/graphics/chromium/cc/CCThreadProxy.cpp:
        (WebCore::CCThreadProxy::commitOnImplThread):

2011-10-24  Jer Noble  <jer.noble@apple.com>

        compositing/video tests time out on Lion
        https://bugs.webkit.org/show_bug.cgi?id=70448

        Reviewed by Simon Fraser.

        AVFoundation will not begin loading or decoding media until a consumer for that media is present.
        For video-only media, this means that an AVPlayerLayer must be created and attached to the 
        AVPlayer before the load state will ever reach "canPlayThrough". Once the metadata for a media
        is loaded, create a AVPlayerLayer if the media has a video track.

        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp:
        (WebCore::MediaPlayerPrivateAVFoundation::updateStates):

2011-10-24  Ryosuke Niwa  <rniwa@webkit.org>

        Merge endOfLine with logicalEndOfLine and startOfLine with logicalStartOfLine
        https://bugs.webkit.org/show_bug.cgi?id=70755

        Reviewed by Chang Shu.

        Merged endOfLine with logicalEndOfLine, and startOfLine with logicalStartOfLine
        to reduce the code duplication.

        * editing/visible_units.cpp:
        (WebCore::startPositionForLine):
        (WebCore::startOfLine):
        (WebCore::logicalStartOfLine):
        (WebCore::endPositionForLine):
        (WebCore::inSameLogicalLine):
        (WebCore::endOfLine):
        (WebCore::logicalEndOfLine):
        * editing/visible_units.h:

2011-10-25  Arko Saha  <arko@motorola.com>

        Microdata: itemtype attribute should be space-separated list to allow multiple types.
        https://bugs.webkit.org/show_bug.cgi?id=70501

        Reviewed by Ryosuke Niwa.

        Tests: fast/dom/MicroData/getitems-multiple-itemtypes.html
               fast/dom/MicroData/itemtype-add-remove-tokens.html
               fast/dom/MicroData/itemtype-attribute-test.html

        * dom/MicroDataItemList.cpp:
        (WebCore::MicroDataItemList::nodeMatches):
        * html/DOMSettableTokenList.h:
        (WebCore::DOMSettableTokenList::tokens):
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::parseMappedAttribute):
        (WebCore::HTMLElement::setItemValueText):
        (WebCore::HTMLElement::itemType):
        (WebCore::HTMLElement::setItemType):
        * html/HTMLElement.h:
        * html/HTMLElement.idl:

2011-10-25  Dan Bernstein  <mitz@apple.com>

        <rdar://problem/10337033> DOMRangeOfString:relativeTo:options has problems with -webkit-user-select: none

        Reviewed by Adam Roben.

        Test: added to TestWebKitAPI/Tests/mac/DOMRangeOfString.mm

        * page/Page.cpp:
        (WebCore::Page::rangeOfString): This function was incorrectly adding the StartInSelection option to
        the initial search.

2011-10-25  Yury Semikhatsky  <yurys@chromium.org>

        Web Inspector: redesign workers sidebar pane
        https://bugs.webkit.org/show_bug.cgi?id=70815

        Changed workers sidebar pane design.

        Now there is a link to worker inspector for each dedicated worker created
        by inspected page. The sidebar display a link to a page with list of all
        shared workers if there one is supported by the WebKit port. Also there
        is a checkbox that allows pause all new workers on first statements.

        Reviewed by Pavel Feldman.

        * inspector/front-end/Settings.js:
        * inspector/front-end/StylesSidebarPane.js:
        (WebInspector.StylesSidebarPane.prototype._rebuildSectionsForStyleRules):
        * inspector/front-end/WorkerManager.js:
        (WebInspector.WorkerManager.prototype.openWorkerInspector):
        (WebInspector.WorkerManager.prototype._workerInspectorClosing):
        * inspector/front-end/WorkersSidebarPane.js:
        (WebInspector.WorkerListSidebarPane):
        (WebInspector.WorkerListSidebarPane.prototype._workerRemoved):
        (WebInspector.WorkerListSidebarPane.prototype._workersCleared):
        (WebInspector.WorkerListSidebarPane.prototype._addWorker):
        (WebInspector.WorkerListSidebarPane.prototype._workerItemClicked):
        (WebInspector.WorkerListSidebarPane.prototype._autoattachToWorkersClicked):
        (WebInspector.WorkerListSidebarPane.prototype._createSharedWorkersLink.link.onclick):
        (WebInspector.WorkerListSidebarPane.prototype._createSharedWorkersLink):
        * inspector/front-end/elementsPanel.css:
        * inspector/front-end/inspectorCommon.css:
        (.sidebar-separator):
        (.sidebar-label):
        * inspector/front-end/scriptsPanel.css:
        (.dedicated-worker-item):
        (#shared-workers-list):
        (#pause-workers-checkbox > input):

2011-10-25  Nico Weber  <thakis@chromium.org>

        [chromium/mac] Fix an ODR violation.
        https://bugs.webkit.org/show_bug.cgi?id=70753

        Reviewed by Anders Carlsson.

        Both ScrollAnimatorNone and ScrollAnimatorMac define ScrollAnimator::create() on OS X.
        Remove the unused one.

        * WebCore.gyp/WebCore.gyp:

2011-10-25  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Debugger fails when there is an invalid watch expression.
        https://bugs.webkit.org/show_bug.cgi?id=70718

        Reviewed by Pavel Feldman.

        Test: inspector/debugger/watch-expressions-panel-switch.html

        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype.evaluateInSelectedCallFrame):

2011-10-24  Pavel Podivilov  <podivilov@chromium.org>

        Web Inspector: fix empty line handling in source maps.
        https://bugs.webkit.org/show_bug.cgi?id=70726

        Reviewed by Yury Semikhatsky.

        * inspector/front-end/CompilerSourceMapping.js:
        (WebInspector.ClosureCompilerSourceMapping.prototype._parseMappings):

2011-10-25  Justin Schuh  <jschuh@chromium.org>

        Check for empty string in parseArcFlag
        https://bugs.webkit.org/show_bug.cgi?id=70763

        Reviewed by Dirk Schulze.

        Test: svg/path-invalid.html

        * svg/SVGParserUtilities.cpp:
        (WebCore::parseArcFlag):

2011-10-24  Pavel Podivilov  <podivilov@chromium.org>

        Web Inspector: keep old source mapping when new one could not be loaded.
        https://bugs.webkit.org/show_bug.cgi?id=70729

        Reviewed by Yury Semikhatsky.

        * inspector/front-end/RawSourceCode.js:
        (WebInspector.RawSourceCode.prototype._updateSourceMapping.didCreateSourceMapping):
        (WebInspector.RawSourceCode.prototype._updateSourceMapping):
        (WebInspector.RawSourceCode.prototype._createSourceMapping.didLoadSourceMapping):

2011-10-25  Sachin Puranik  <sachin.puranik@motorola.com>

        Double number step=.5 should be considered valid in <input type="number" step=".5">
        https://bugs.webkit.org/show_bug.cgi?id=70320

        Reviewed by Kent Tamura.

        Test: fast/forms/input-step-as-double.html

        * html/parser/HTMLParserIdioms.cpp:
        (WebCore::parseToDoubleForNumberType): Changed the function to consider
        step as valid even if it starts with "."

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

        Web Inspector: [Chromium] Audits panel context menu for links not working properly
        https://bugs.webkit.org/show_bug.cgi?id=70813

        Reviewed by Pavel Feldman.

        * inspector/front-end/AuditResultView.js:
        (WebInspector.AuditResultView):
        (WebInspector.AuditResultView.prototype._contextMenuEventFired):

2011-10-25  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Resources panel: display the current search match index in the toolbar.
        https://bugs.webkit.org/show_bug.cgi?id=66050

        Reviewed by Pavel Feldman.

        Test: http/tests/inspector/search/resources-search-match-index.html

        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.ResourcesPanel.prototype.performSearch.callback):
        (WebInspector.ResourcesPanel.prototype.performSearch):
        (WebInspector.ResourcesPanel.prototype._showSearchResult.callback):
        (WebInspector.ResourcesPanel.prototype._showSearchResult):
        (WebInspector.BaseStorageTreeElement.prototype.get searchMatchesCount):
        (WebInspector.ResourcesSearchController):
        (WebInspector.ResourcesSearchController.prototype.nextSearchResult):
        (WebInspector.ResourcesSearchController.prototype.previousSearchResult):
        (WebInspector.ResourcesSearchController.prototype._searchResult):
        (WebInspector.SearchResultsTreeElementsTraverser.prototype.next):
        (WebInspector.SearchResultsTreeElementsTraverser.prototype.previous):
        (WebInspector.SearchResultsTreeElementsTraverser.prototype.matchIndex):
        (WebInspector.SearchResultsTreeElementsTraverser.prototype._elementSearchMatchesCount):
        (WebInspector.SearchResultsTreeElementsTraverser.prototype._traverseNext):
        (WebInspector.SearchResultsTreeElementsTraverser.prototype._traversePrevious):
        * inspector/front-end/treeoutline.js:

2011-10-25  Andrey Kosyakov  <caseq@chromium.org>

        Web Inspector: JS exception in JavaScriptSourceFrame.onShowPopover/showObjectPopover()
        https://bugs.webkit.org/show_bug.cgi?id=70812

        Reviewed by Pavel Feldman.

        Check if highlighted element is present while displaying object popover.

        * inspector/front-end/JavaScriptSourceFrame.js:
        (WebInspector.JavaScriptSourceFrame.prototype.onShowPopover.showObjectPopover):
        (WebInspector.JavaScriptSourceFrame.prototype.onShowPopover):

2011-10-21  Nat Duca  <nduca@chromium.org>

        [chromium] Route Console::time and Console::timeEnd to trace_event
        https://bugs.webkit.org/show_bug.cgi?id=70620

        Reviewed by Pavel Feldman.

        * page/Console.cpp:
        (WebCore::Console::time):
        (WebCore::Console::timeEnd):

2011-10-21  Andrey Kosyakov  <caseq@chromium.org>

        Web Inspector: [Extensions API] allow extensions to specify script to be injected on reload
        https://bugs.webkit.org/show_bug.cgi?id=70600

        Reviewed by Pavel Feldman.

        - change webInspector.inspectedPage.reload() to accept multiple options in an object
        - add an ability to inject a script upon a page reload
        - return script id in addScriptToEvaluateOnLoad()
        - provide removeScriptToEvaluateOnLoad()
        - store scripts to evaluate on load in inspector state cookie

        Test: inspector/extensions/extensions-reload.html

        * inspector/Inspector.json:
        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::InspectorPageAgent):
        (WebCore::InspectorPageAgent::restore):
        (WebCore::InspectorPageAgent::addScriptToEvaluateOnLoad):
        (WebCore::InspectorPageAgent::removeScriptToEvaluateOnLoad):
        (WebCore::InspectorPageAgent::removeAllScriptsToEvaluateOnLoad):
        (WebCore::InspectorPageAgent::didClearWindowObjectInWorld):
        (WebCore::InspectorPageAgent::frameNavigated):
        * inspector/InspectorPageAgent.h:
        * inspector/front-end/ExtensionAPI.js:
        (injectedExtensionAPI.InspectedWindow.prototype.reload):
        * inspector/front-end/ExtensionServer.js:
        (WebInspector.ExtensionServer.prototype._onReload):
        * inspector/front-end/WorkersSidebarPane.js:
        (WebInspector.WorkersSidebarPane.prototype.setInstrumentation.callback):
        (WebInspector.WorkersSidebarPane.prototype.setInstrumentation):

2011-10-24  Pavel Feldman  <pfeldman@google.com>

        Web Inspector: print expired message count before remaining messages.
        https://bugs.webkit.org/show_bug.cgi?id=70736

        Reviewed by Yury Semikhatsky.

        * inspector/Inspector-0.1.json:
        * inspector/Inspector.json:
        * inspector/InspectorConsoleAgent.cpp:
        (WebCore::InspectorConsoleAgent::enable):
        (WebCore::InspectorConsoleAgent::restore):
        * inspector/InspectorConsoleAgent.h:
        * inspector/front-end/ConsoleModel.js:

2011-10-25  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r98309.
        http://trac.webkit.org/changeset/98309
        https://bugs.webkit.org/show_bug.cgi?id=70801

        Test fails on mac (Requested by benwells on #webkit).

        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::fill):
        (WebCore::CanvasRenderingContext2D::fillRect):
        (WebCore::CanvasRenderingContext2D::drawImage):
        (WebCore::CanvasRenderingContext2D::shouldDisplayTransparencyElsewhere):
        (WebCore::CanvasRenderingContext2D::fillAndDisplayTransparencyElsewhere):
        * html/canvas/CanvasRenderingContext2D.h:

2011-10-24  Geoffrey Garen  <ggaren@apple.com>

        Chromium build fix: #include window.h for HANDLE.

        * platform/graphics/opentype/OpenTypeUtilities.h:

2011-10-24  Ryosuke Niwa  <rniwa@webkit.org>

        Include ThreadSafeRefCounted.h since the class declared in this header file
        inherits from ThreadSafeRefCounted.

        * storage/IDBIndexBackendInterface.h:

2011-10-24  Ryosuke Niwa  <rniwa@webkit.org>

        Fix a typo.

        * bindings/v8/JavaScriptCallFrame.h:

2011-10-24  Geoffrey Garen  <ggaren@apple.com>

        Removed SharedUChar and tightened language around its previous uses
        https://bugs.webkit.org/show_bug.cgi?id=70698

        Reviewed by David Levin.

        - Renamed "threadSafeCopy" and "crossThreadCopy" to "isolatedCopy" because
        the former names gave the dangerous misimpression that the resulting object
        was thread-safe, which is not true.
        
        - Updated a bunch of files for header dependency changes, now that
        CrossThreadRefCounted is gone.

        * ForwardingHeaders/wtf/CrossThreadRefCounted.h: Removed.
        * WebCore.exp.in:
        * bindings/js/ScriptHeapSnapshot.h:
        * bindings/v8/SerializedScriptValue.cpp:
        (WebCore::SerializedScriptValue::release):
        (WebCore::SerializedScriptValue::SerializedScriptValue):
        * css/CSSPropertySourceData.h:
        * css/CSSValue.h:
        * css/StyleMedia.h:
        * css/WebKitCSSMatrix.h:
        * dom/QualifiedName.h:
        * fileapi/LocalFileSystem.h:
        (WebCore::LocalFileSystem::SystemBasePath::operator String):
        * history/CachedFrame.h:
        * history/CachedPage.h:
        * history/HistoryItem.h:
        * html/canvas/CanvasStyle.h:
        * inspector/InspectorResourceAgent.h:
        * loader/FormState.h:
        * loader/TextResourceDecoder.h:
        * loader/WorkerThreadableLoader.cpp:
        (WebCore::WorkerThreadableLoader::MainThreadBridge::MainThreadBridge):
        * loader/icon/IconDatabase.cpp:
        (WebCore::IconDatabase::open):
        (WebCore::IconDatabase::synchronousIconForPageURL):
        (WebCore::IconDatabase::synchronousIconURLForPageURL):
        (WebCore::IconDatabase::retainIconForPageURL):
        (WebCore::IconDatabase::releaseIconForPageURL):
        (WebCore::IconDatabase::setIconDataForIconURL):
        (WebCore::IconDatabase::setIconURLForPageURL):
        (WebCore::IconDatabase::databasePath):
        (WebCore::IconDatabase::defaultDatabaseFilename):
        (WebCore::ImportedIconURLForPageURLWorkItem::ImportedIconURLForPageURLWorkItem):
        (WebCore::ImportedIconDataForPageURLWorkItem::ImportedIconDataForPageURLWorkItem):
        * page/ContentSecurityPolicy.h:
        * page/Coordinates.h:
        (WebCore::Coordinates::isolatedCopy):
        * page/Geoposition.h:
        (WebCore::Geoposition::isolatedCopy):
        * page/SecurityOrigin.cpp:
        (WebCore::SecurityOrigin::SecurityOrigin):
        (WebCore::SecurityOrigin::isolatedCopy):
        * page/SecurityOrigin.h:
        * page/animation/AnimationBase.h:
        * platform/CrossThreadCopier.cpp:
        (WebCore::::copy):
        * platform/FileChooser.h:
        * platform/KURL.cpp:
        (WebCore::KURL::copy):
        * platform/cf/SchedulePair.h:
        * platform/network/BlobData.cpp:
        (WebCore::BlobDataItem::detachFromCurrentThread):
        (WebCore::BlobData::detachFromCurrentThread):
        * platform/network/HTTPHeaderMap.cpp:
        (WebCore::HTTPHeaderMap::copyData):
        * platform/network/MIMEHeader.h:
        * platform/network/ResourceErrorBase.cpp:
        (WebCore::ResourceErrorBase::copy):
        * platform/network/ResourceLoadInfo.h:
        * platform/network/ResourceRequestBase.cpp:
        (WebCore::ResourceRequestBase::copyData):
        * platform/network/ResourceResponseBase.cpp:
        (WebCore::ResourceResponseBase::copyData):
        * platform/sql/SQLValue.cpp:
        (WebCore::SQLValue::SQLValue):
        (WebCore::SQLValue::string):
        * rendering/style/QuotesData.h:
        * storage/AbstractDatabase.cpp:
        (WebCore::updateGuidVersionMap):
        (WebCore::AbstractDatabase::AbstractDatabase):
        (WebCore::AbstractDatabase::performOpenAndVerify):
        (WebCore::AbstractDatabase::stringIdentifier):
        (WebCore::AbstractDatabase::displayName):
        (WebCore::AbstractDatabase::fileName):
        (WebCore::AbstractDatabase::setExpectedVersion):
        (WebCore::AbstractDatabase::getCachedVersion):
        * storage/ChangeVersionWrapper.cpp:
        (WebCore::ChangeVersionWrapper::ChangeVersionWrapper):
        * storage/Database.cpp:
        (WebCore::Database::Database):
        (WebCore::Database::tableNames):
        * storage/DatabaseDetails.h:
        * storage/DatabaseTracker.cpp:
        (WebCore::DatabaseTracker::setDatabaseDirectoryPath):
        (WebCore::DatabaseTracker::databaseDirectoryPath):
        (WebCore::DatabaseTracker::trackerDatabasePath):
        (WebCore::DatabaseTracker::canEstablishDatabase):
        (WebCore::DatabaseTracker::originPath):
        (WebCore::DatabaseTracker::fullPathForDatabase):
        (WebCore::DatabaseTracker::populateOrigins):
        (WebCore::DatabaseTracker::databaseNamesForOrigin):
        (WebCore::DatabaseTracker::addOpenDatabase):
        (WebCore::DatabaseTracker::setQuota):
        (WebCore::DatabaseTracker::recordCreatingDatabase):
        (WebCore::DatabaseTracker::recordDeletingDatabase):
        (WebCore::DatabaseTracker::recordDeletingOrigin):
        (WebCore::DatabaseTracker::scheduleNotifyDatabaseChanged):
        * storage/OriginQuotaManager.cpp:
        (WebCore::OriginQuotaManager::trackOrigin):
        (WebCore::OriginQuotaManager::addDatabase):
        * storage/SQLError.h:
        (WebCore::SQLError::message):
        (WebCore::SQLError::SQLError):
        * storage/SQLResultSetRowList.h:
        * storage/SQLStatement.cpp:
        (WebCore::SQLStatement::SQLStatement):
        * storage/StorageAreaSync.cpp:
        (WebCore::StorageAreaSync::StorageAreaSync):
        (WebCore::StorageAreaSync::syncTimerFired):
        * storage/StorageAreaSync.h:
        * storage/StorageMap.cpp:
        (WebCore::StorageMap::importItem):
        * storage/StorageNamespaceImpl.cpp:
        (WebCore::StorageNamespaceImpl::StorageNamespaceImpl):
        * storage/StorageSyncManager.cpp:
        (WebCore::StorageSyncManager::StorageSyncManager):
        * storage/StorageTracker.cpp:
        (WebCore::StorageTracker::StorageTracker):
        (WebCore::StorageTracker::syncImportOriginIdentifiers):
        (WebCore::StorageTracker::syncFileSystemAndTrackerDatabase):
        (WebCore::StorageTracker::setOriginDetails):
        (WebCore::StorageTracker::willDeleteAllOrigins):
        * svg/SVGPathSeg.h:
        * workers/DefaultSharedWorkerRepository.cpp:
        (WebCore::SharedWorkerProxy::url):
        (WebCore::SharedWorkerProxy::name):
        (WebCore::SharedWorkerProxy::SharedWorkerProxy):
        (WebCore::DefaultSharedWorkerRepository::getProxy):
        * workers/SharedWorkerThread.cpp:
        (WebCore::SharedWorkerThread::SharedWorkerThread):
        * workers/WorkerMessagingProxy.cpp:
        (WebCore::WorkerExceptionTask::WorkerExceptionTask):
        (WebCore::PostMessageToPageInspectorTask::PostMessageToPageInspectorTask):
        * workers/WorkerRunLoop.cpp:
        (WebCore::WorkerRunLoop::postTaskForMode):
        (WebCore::WorkerRunLoop::Task::Task):
        * workers/WorkerThread.cpp:
        (WebCore::WorkerThreadStartupData::WorkerThreadStartupData):

2011-10-24  Adam Barth  <abarth@webkit.org>

        Remove empty directory.

        * p2p: Removed.

2011-10-24  Shawn Singh  <shawnsingh@chromium.org>

        [chromium] Refactor painting/updating/drawing code.
        https://bugs.webkit.org/show_bug.cgi?id=70057

        Reviewed by James Robinson.

        This refactoring separates the "early exits" from the actual loop
        that draws layers. As part of this, it was also appropriate to
        clean up the way that masks and replicas are dealt with when
        painting and updating. The purpose of all this is to make things
        easier to test, and for a scissoring optimization that needs to
        know exatly what gets drawn. Existing layout tests were able to
        verify the refactoring did not change behavior.

        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::drawLayersOntoRenderSurfaces):
        (WebCore::LayerRendererChromium::drawLayersInternal):
        (WebCore::LayerRendererChromium::drawLayer):
        * platform/graphics/chromium/LayerRendererChromium.h:
        * platform/graphics/chromium/cc/CCLayerTreeHost.cpp:
        (WebCore::CCLayerTreeHost::paintMaskAndReplicaForRenderSurface):
        (WebCore::CCLayerTreeHost::paintLayerContents):
        (WebCore::CCLayerTreeHost::updateCompositorResources):
        * platform/graphics/chromium/cc/CCLayerTreeHost.h:
        * platform/graphics/chromium/cc/CCLayerTreeHostCommon.cpp:
        (WebCore::layerShouldBeAppended):
        (WebCore::calculateDrawTransformsAndVisibilityInternal):
        * platform/graphics/chromium/cc/CCLayerTreeHostCommon.h:
        (WebCore::CCLayerTreeHostCommon::calculateVisibleLayerRect):

2011-10-24  Luke Macpherson   <macpherson@chromium.org>

        REGRESSION(80893): HTML5 spec takes 2s longer to load due to time spent in CSSStyleSelector
        https://bugs.webkit.org/show_bug.cgi?id=68944

        Reviewed by Antti Koivisto.

        No new tests / Covered by existing tests.

        Removes all virtual dispatch from CSSStyleApplyProperty by converting to use static function pointers for dispatch.
        Uses class templates instead of function templates to allow default parameters and also to share parameter declarations across static functions.
        All constructor parameters become template parameters. This improves the level of compiler optimization that can be achieved.
        Overall this achieved a ~2% overall speedup on run-safari PerformanceTests/Parser/html5-full-render.html,
        and profiling showed a reduction in the time spent inside CSSStyleSelector::applyProperty().

        * css/CSSStyleApplyProperty.cpp:
        (WebCore::ApplyPropertyExpanding::applyInheritValue):
        (WebCore::ApplyPropertyExpanding::applyInitialValue):
        (WebCore::ApplyPropertyExpanding::applyValue):
        (WebCore::ApplyPropertyExpanding::createHandler):
        (WebCore::ApplyPropertyDefaultBase::setValue):
        (WebCore::ApplyPropertyDefaultBase::value):
        (WebCore::ApplyPropertyDefaultBase::initial):
        (WebCore::ApplyPropertyDefaultBase::applyInheritValue):
        (WebCore::ApplyPropertyDefaultBase::applyInitialValue):
        (WebCore::ApplyPropertyDefaultBase::applyValue):
        (WebCore::ApplyPropertyDefaultBase::createHandler):
        (WebCore::ApplyPropertyDefault::setValue):
        (WebCore::ApplyPropertyDefault::applyValue):
        (WebCore::ApplyPropertyDefault::createHandler):
        (WebCore::ApplyPropertyStyleImage::applyValue):
        (WebCore::ApplyPropertyStyleImage::createHandler):
        (WebCore::ApplyPropertyAuto::setValue):
        (WebCore::ApplyPropertyAuto::value):
        (WebCore::ApplyPropertyAuto::hasAuto):
        (WebCore::ApplyPropertyAuto::setAuto):
        (WebCore::ApplyPropertyAuto::applyInheritValue):
        (WebCore::ApplyPropertyAuto::applyInitialValue):
        (WebCore::ApplyPropertyAuto::applyValue):
        (WebCore::ApplyPropertyAuto::createHandler):
        (WebCore::defaultInitialColor):
        (WebCore::ApplyPropertyColor::applyInheritValue):
        (WebCore::ApplyPropertyColor::applyInitialValue):
        (WebCore::ApplyPropertyColor::applyValue):
        (WebCore::ApplyPropertyColor::createHandler):
        (WebCore::ApplyPropertyDirection::applyValue):
        (WebCore::ApplyPropertyDirection::createHandler):
        (WebCore::ApplyPropertyLength::setValue):
        (WebCore::ApplyPropertyLength::applyValue):
        (WebCore::ApplyPropertyLength::createHandler):
        (WebCore::ApplyPropertyString::setValue):
        (WebCore::ApplyPropertyString::applyValue):
        (WebCore::ApplyPropertyString::createHandler):
        (WebCore::ApplyPropertyBorderRadius::setValue):
        (WebCore::ApplyPropertyBorderRadius::applyValue):
        (WebCore::ApplyPropertyBorderRadius::createHandler):
        (WebCore::ApplyPropertyFillLayer::applyInheritValue):
        (WebCore::ApplyPropertyFillLayer::applyInitialValue):
        (WebCore::ApplyPropertyFillLayer::applyValue):
        (WebCore::ApplyPropertyFillLayer::createHandler):
        (WebCore::ApplyPropertyComputeLength::setValue):
        (WebCore::ApplyPropertyComputeLength::applyValue):
        (WebCore::ApplyPropertyComputeLength::createHandler):
        (WebCore::ApplyPropertyFont::applyInheritValue):
        (WebCore::ApplyPropertyFont::applyInitialValue):
        (WebCore::ApplyPropertyFont::applyValue):
        (WebCore::ApplyPropertyFont::createHandler):
        (WebCore::ApplyPropertyFontWeight::applyValue):
        (WebCore::ApplyPropertyFontWeight::createHandler):
        (WebCore::ApplyPropertyCounter::emptyFunction):
        (WebCore::ApplyPropertyCounter::applyValue):
        (WebCore::ApplyPropertyCounter::createHandler):
        (WebCore::ApplyPropertyCursor::applyInheritValue):
        (WebCore::ApplyPropertyCursor::applyInitialValue):
        (WebCore::ApplyPropertyCursor::applyValue):
        (WebCore::ApplyPropertyCursor::createHandler):
        (WebCore::ApplyPropertyTextEmphasisStyle::applyInheritValue):
        (WebCore::ApplyPropertyTextEmphasisStyle::applyInitialValue):
        (WebCore::ApplyPropertyTextEmphasisStyle::applyValue):
        (WebCore::ApplyPropertyTextEmphasisStyle::createHandler):
        (WebCore::ApplyPropertyAnimation::setValue):
        (WebCore::ApplyPropertyAnimation::value):
        (WebCore::ApplyPropertyAnimation::test):
        (WebCore::ApplyPropertyAnimation::clear):
        (WebCore::ApplyPropertyAnimation::initial):
        (WebCore::ApplyPropertyAnimation::map):
        (WebCore::ApplyPropertyAnimation::accessAnimations):
        (WebCore::ApplyPropertyAnimation::animations):
        (WebCore::ApplyPropertyAnimation::applyInheritValue):
        (WebCore::ApplyPropertyAnimation::applyInitialValue):
        (WebCore::ApplyPropertyAnimation::applyValue):
        (WebCore::ApplyPropertyAnimation::createHandler):
        (WebCore::ApplyPropertyOutlineStyle::applyInheritValue):
        (WebCore::ApplyPropertyOutlineStyle::applyInitialValue):
        (WebCore::ApplyPropertyOutlineStyle::applyValue):
        (WebCore::ApplyPropertyOutlineStyle::createHandler):
        (WebCore::CSSStyleApplyProperty::CSSStyleApplyProperty):
        * css/CSSStyleApplyProperty.h:
        (WebCore::PropertyHandler::PropertyHandler):
        (WebCore::PropertyHandler::applyInheritValue):
        (WebCore::PropertyHandler::applyInitialValue):
        (WebCore::PropertyHandler::applyValue):
        (WebCore::PropertyHandler::isValid):
        (WebCore::PropertyHandler::inheritFunction):
        (WebCore::PropertyHandler::initialFunction):
        (WebCore::PropertyHandler::applyFunction):
        (WebCore::CSSStyleApplyProperty::propertyHandler):
        (WebCore::CSSStyleApplyProperty::setPropertyHandler):
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):
        * rendering/style/RenderStyle.h:
        (WebCore::InheritedFlags::invalidColor):

2011-10-24  Ben Wells  <benwells@chromium.org>

        Canvas drawImage with SourceIn, DestinationIn, SourceOut, DestinationAtop and Copy have errors
        https://bugs.webkit.org/show_bug.cgi?id=66920

        Reviewed by James Robinson.

        Test: fast/canvas/canvas-composite-image.html

        Use the same method as fills to handle composited drawImage calls that will affect the whole
        canvas. To do this code used when doing fills has been factored into seperate functions and
        used by drawImage. Some functions used to do these types of operations have also been renamed.

        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::isFullCanvasCompositeMode):
        (WebCore::CanvasRenderingContext2D::fill):
        (WebCore::CanvasRenderingContext2D::fillRect):
        (WebCore::CanvasRenderingContext2D::drawImage):
        (WebCore::CanvasRenderingContext2D::calculateCompositingBufferRect):
        (WebCore::CanvasRenderingContext2D::createCompositingBuffer):
        (WebCore::CanvasRenderingContext2D::compositeBuffer):
        (WebCore::CanvasRenderingContext2D::fullCanvasCompositedDrawImage):
        (WebCore::CanvasRenderingContext2D::fullCanvasCompositedFill):
        * html/canvas/CanvasRenderingContext2D.h:

2011-10-24  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r98294 and r98306.
        http://trac.webkit.org/changeset/98294
        http://trac.webkit.org/changeset/98306
        https://bugs.webkit.org/show_bug.cgi?id=70790

        the first patch broke chromium-mac and the second gclient
        (Requested by jchaffraix on #webkit).

        * WebCore.gyp/WebCore.gyp:

2011-10-24  Ryosuke Niwa  <rniwa@webkit.org>

        Build fix after r98300.

        * WebCore.gypi:
        * WebCore.pro:

2011-10-24  Anders Carlsson  <andersca@apple.com>

        It should be possible for Widget subclasses to control whether transforms affect the frame rect
        https://bugs.webkit.org/show_bug.cgi?id=70787

        Reviewed by Sam Weinig.

        Currently RenderWidget sets the frame rect of it's hosted widget to the bounding box of the transformed
        content box rect (unless the Widget is a frame view). It should be possible for Widget subclasses to override
        this behavior and have the frame rect set to the absolute content box without any transforms applied.

        * platform/Widget.h:
        (WebCore::Widget::transformsAffectFrameRect):
        Add new member function.

        * rendering/RenderWidget.cpp:
        (WebCore::RenderWidget::updateWidgetGeometry):
        Move shared code from setWidget and updateWidgetPosition out into a new function. If transformsAffectFrameRect returns 
        false, just set the frame rect to the absolute content box.

        (WebCore::RenderWidget::setWidget):
        (WebCore::RenderWidget::updateWidgetPosition):
        Call updateWidgetGeometry.

        * rendering/RenderWidget.h:

2011-10-24  Arko Saha  <arko@motorola.com>

        Microdata: Add itemprop, itemref, itemvalue attributes.
        https://bugs.webkit.org/show_bug.cgi?id=69839

        Reviewed by Ryosuke Niwa.

        Tests: fast/dom/MicroData/itemprop-add-remove-tokens.html
               fast/dom/MicroData/itemprop-for-an-element-must-be-correct.html
               fast/dom/MicroData/itemprop-must-be-read-only.html
               fast/dom/MicroData/itemprop-reflected-by-itemProp-property.html
               fast/dom/MicroData/itemref-add-remove-tokens.html
               fast/dom/MicroData/itemref-attribute-reflected-by-itemRef-property.html
               fast/dom/MicroData/itemref-for-an-element-must-be-correct.html
               fast/dom/MicroData/itemref-must-be-read-only.html
               fast/dom/MicroData/itemvalue-reflects-data-attr-on-object-element.html
               fast/dom/MicroData/itemvalue-reflects-href-attr.html
               fast/dom/MicroData/itemvalue-reflects-src-attribute-on-img-element.html
               fast/dom/MicroData/itemvalue-reflects-the-content-attr-on-meta-element.html
               fast/dom/MicroData/itemvalue-reflects-the-src-attr.html
               fast/dom/MicroData/itemvalue-returns-element-itself.html
               fast/dom/MicroData/itemvalue-returns-null.html
               fast/dom/MicroData/itemvalue-throws-excpetion-onsetting-001.html
               fast/dom/MicroData/itemvalue-throws-excpetion-onsetting-002.html

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * bindings/js/JSHTMLElementCustom.cpp:
        (WebCore::toJS):
        (WebCore::JSHTMLElement::itemValue):
        (WebCore::JSHTMLElement::setItemValue):
        * bindings/v8/custom/V8HTMLElementCustom.cpp:
        (WebCore::toV8Object):
        (WebCore::V8HTMLElement::itemValueAccessorGetter):
        (WebCore::V8HTMLElement::itemValueAccessorSetter):
        * dom/MicroDataItemList.cpp:
        * html/HTMLAnchorElement.cpp:
        (WebCore::HTMLAnchorElement::itemValueText):
        (WebCore::HTMLAnchorElement::setItemValueText):
        * html/HTMLAnchorElement.h:
        * html/HTMLAreaElement.cpp:
        (WebCore::HTMLAreaElement::itemValueText):
        (WebCore::HTMLAreaElement::setItemValueText):
        * html/HTMLAreaElement.h:
        * html/HTMLAttributeNames.in:
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::parseMappedAttribute):
        (WebCore::HTMLElement::itemProp): Returns element's itemprop content attribute.
        (WebCore::HTMLElement::setItemProp): Sets itemprop value on changing elemet's
        itemprop attribute.
        (WebCore::HTMLElement::itemRef): Returns element's itemref content attribute.
        (WebCore::HTMLElement::setItemRef): Sets itemref value on changing elemet's
        itemref attribute.
        (WebCore::HTMLElement::setItemValue): Sets element's itemvalue. If the element has no
        itemprop attribute or if element has an itemscope attribute, it throws INVALID_ACCESS_ERR
        exception.
        (WebCore::HTMLElement::itemValue): Returns the elements itemvalue.

        If the element has no itemprop attribute it returns null.
        If the element has an itemscope attribute, it returns the element itself.
        If the element is a meta element: It acts as it would if it was reflecting the element's
        content content attribute.
        If the element is an audio, embed, iframe, img, source, track, or video element: It acts
        as it would if it was reflecting the element's src content attribute.
        If the element is an a, area, or link element: It act as it would if it was reflecting the
        href content attribute.
        If the element is an object element: It acts as  it would if it was reflecting the element's
        data content attribute.

        (WebCore::HTMLElement::itemValueText):
        (WebCore::HTMLElement::setItemValueText):
        * html/HTMLElement.h:
        * html/HTMLElement.idl:
        * html/HTMLEmbedElement.cpp:
        (WebCore::HTMLEmbedElement::itemValueText):
        (WebCore::HTMLEmbedElement::setItemValueText):
        * html/HTMLEmbedElement.h:
        * html/HTMLIFrameElement.cpp:
        (WebCore::HTMLIFrameElement::itemValueText):
        (WebCore::HTMLIFrameElement::setItemValueText):
        * html/HTMLIFrameElement.h:
        * html/HTMLImageElement.cpp:
        (WebCore::HTMLImageElement::itemValueText):
        (WebCore::HTMLImageElement::setItemValueText):
        * html/HTMLImageElement.h:
        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::itemValueText):
        (WebCore::HTMLLinkElement::setItemValueText):
        * html/HTMLLinkElement.h:
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::itemValueText):
        (WebCore::HTMLMediaElement::setItemValueText):
        * html/HTMLMediaElement.h:
        * html/HTMLMetaElement.cpp:
        (WebCore::HTMLMetaElement::itemValueText):
        (WebCore::HTMLMetaElement::setItemValueText):
        * html/HTMLMetaElement.h:
        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::itemValueText):
        (WebCore::HTMLObjectElement::setItemValueText):
        * html/HTMLObjectElement.h:
        * html/HTMLSourceElement.cpp:
        (WebCore::HTMLSourceElement::itemValueText):
        (WebCore::HTMLSourceElement::setItemValueText):
        * html/HTMLSourceElement.h:
        * html/HTMLTrackElement.cpp:
        (WebCore::HTMLTrackElement::itemValueText):
        (WebCore::HTMLTrackElement::setItemValueText):
        * html/HTMLTrackElement.h:
        * html/MicroDataItemValue.cpp: Added.
        (WebCore::MicroDataItemValue::MicroDataItemValue):
        (WebCore::MicroDataItemValue::createFromString):
        (WebCore::MicroDataItemValue::createFromNode):
        * html/MicroDataItemValue.h: Added.
        (WebCore::MicroDataItemValue::isNode):
        (WebCore::MicroDataItemValue::getNode):
        (WebCore::MicroDataItemValue::getString):

2011-10-24  Joseph Pecoraro  <joepeck@webkit.org>

        Remove unused instance variable
        https://bugs.webkit.org/show_bug.cgi?id=70750

        Reviewed by Dimitri Glazkov.

        * rendering/RenderTextControl.h:

2011-10-24  Nico Weber  <thakis@chromium.org>

        [chromium/mac] Fix an ODR violation.
        https://bugs.webkit.org/show_bug.cgi?id=70753

        Reviewed by Anders Carlsson.

        Both ScrollAnimatorNone and ScrollAnimatorMac define ScrollAnimator::create() on OS X.
        Remove the unused one.

        * WebCore.gyp/WebCore.gyp:

2011-10-24  Tim Horton  <timothy_horton@apple.com>

        feColorMatrix doesn't use the correct default "matrix" type when no type attribute is specified
        https://bugs.webkit.org/show_bug.cgi?id=70035
        <rdar://problem/10280177>

        Reviewed by Nikolas Zimmermann.

        Make feColorMatrix's type attribute be "matrix" by default.

        Test: svg/filters/feColorMatrix-default-type.svg

        * svg/SVGFEColorMatrixElement.cpp:
        (WebCore::SVGFEColorMatrixElement::SVGFEColorMatrixElement):

2011-10-24  Joshua Bell  <jsbell@chromium.org>

        Unbreak binding generation tests
        https://bugs.webkit.org/show_bug.cgi?id=70768

        Reviewed by Darin Adler.

        Update the expected output of V8 binding tests to match
        results c/o https://bugs.webkit.org/show_bug.cgi?id=70065

        * bindings/scripts/test/V8/V8TestObj.cpp:
        (WebCore::TestObjInternal::idbKeyCallback):

2011-10-21  Nat Duca  <nduca@chromium.org>

        [chromium] Add isTraceEventEnabled to PlatformSupport.
        https://bugs.webkit.org/show_bug.cgi?id=70618

        Reviewed by Darin Fisher.

        * platform/chromium/PlatformSupport.h:

2011-10-24  Mihnea Ovidenie  <mihnea@adobe.com>

        Use StringBuilder in CSSRuleList::rulesText()/CSSSelectorList::selectorsText()
        https://bugs.webkit.org/show_bug.cgi?id=70746

        Reviewed by Tony Chang.

        Covered by existing tests.

        * css/CSSRuleList.cpp:
        (WebCore::CSSRuleList::rulesText):
        * css/CSSSelectorList.cpp:
        (WebCore::CSSSelectorList::selectorsText):
        * css/WebKitCSSKeyframesRule.cpp:
        (WebCore::WebKitCSSKeyframesRule::cssText): Use CSSRuleList::rulesText() method instead of explicit loop.

2011-10-24  Michael Saboff  <msaboff@apple.com>

        WebKit doesn't build with recent changes to libdispatch
        https://bugs.webkit.org/show_bug.cgi?id=70737

        Added initialization for new WebKitSystemInterface function 
        CreateVMPressureDispatchOnMainQueue.  Changed MemoryPressureHandler::install
        to use new function.

        Reviewed by Geoffrey Garen.

        No new tests.  Moved functionality to WebKitSystemInterface.

        * WebCore.exp.in:
        * platform/mac/MemoryPressureHandlerMac.mm:
        (WebCore::MemoryPressureHandler::install):
        * platform/mac/WebCoreSystemInterface.h:
        * platform/mac/WebCoreSystemInterface.mm:

2011-10-24  Joshua Bell  <jsbell@chromium.org>

        IndexedDB: Throw DATA_ERR on invalid keys, remove null key support
        https://bugs.webkit.org/show_bug.cgi?id=70065

        Reviewed by Tony Chang.

        Part 1 of a two-sided commit. Renames IDBKey::NullType to
        IDBKey::InvalidType. JS binding yields this type rather
        than throwing immediately so the correct exception type can
        be raised. Checks for invalid keys added to front-end classes.

        * bindings/js/JSIDBKeyCustom.cpp:
        (WebCore::toJS):
        * bindings/scripts/CodeGeneratorV8.pm:
        (TypeCanFailConversion):
        * bindings/v8/IDBBindingUtilities.cpp:
        (WebCore::createIDBKeyFromValue):
        * bindings/v8/custom/V8IDBKeyCustom.cpp:
        (WebCore::toV8):
        * storage/IDBCursor.cpp:
        (WebCore::IDBCursor::continueFunction):
        * storage/IDBFactory.cpp:
        (WebCore::IDBFactory::cmp):
        * storage/IDBIndex.cpp:
        (WebCore::IDBIndex::get):
        (WebCore::IDBIndex::getKey):
        * storage/IDBKey.cpp:
        (WebCore::IDBKey::IDBKey):
        (WebCore::IDBKey::compare):
        * storage/IDBKey.h:
        (WebCore::IDBKey::createInvalid):
        * storage/IDBKeyRange.cpp:
        (WebCore::IDBKeyRange::only):
        (WebCore::IDBKeyRange::lowerBound):
        (WebCore::IDBKeyRange::upperBound):
        (WebCore::IDBKeyRange::bound):
        * storage/IDBKeyRange.h:
        (WebCore::IDBKeyRange::lowerBound):
        (WebCore::IDBKeyRange::upperBound):
        (WebCore::IDBKeyRange::bound):
        * storage/IDBKeyRange.idl:
        * storage/IDBLevelDBCoding.cpp:
        (WebCore::IDBLevelDBCoding::encodeIDBKey):
        (WebCore::IDBLevelDBCoding::decodeIDBKey):
        * storage/IDBObjectStore.cpp:
        (WebCore::IDBObjectStore::get):
        (WebCore::IDBObjectStore::add):
        (WebCore::IDBObjectStore::put):
        (WebCore::IDBObjectStore::deleteFunction):
        * storage/IDBObjectStoreBackendImpl.cpp:
        (WebCore::IDBObjectStoreBackendImpl::put):
        (WebCore::IDBObjectStoreBackendImpl::putInternal):
        (WebCore::IDBObjectStoreBackendImpl::deleteFunction):
        * storage/IDBSQLiteBackingStore.cpp:
        (WebCore::whereSyntaxForKey):
        (WebCore::bindKeyToQuery):
        (WebCore::lowerCursorWhereFragment):
        (WebCore::upperCursorWhereFragment):
        (WebCore::bindKeyToQueryWithNulls):
        (WebCore::keyFromQuery):

2011-10-24  Alok Priyadarshi  <alokp@chromium.org>

        [chromium] Make accelerated drawing work with threaded compositing
        https://bugs.webkit.org/show_bug.cgi?id=70656

        Reviewed by James Robinson.

        Make sure that the compositor context is not used outside LayerTextureUpdater::updateTextureRect().
        Created a FrameBuffer class that wraps skia gpu canvas and manages GL resources.

        * platform/graphics/chromium/ContentLayerChromium.cpp:
        (WebCore::ContentLayerChromium::createTextureUpdater):
        * platform/graphics/chromium/LayerTextureUpdaterCanvas.cpp:
        (WebCore::FrameBuffer::FrameBuffer::FrameBuffer):
        (WebCore::FrameBuffer::FrameBuffer::~FrameBuffer):
        (WebCore::FrameBuffer::FrameBuffer::initialize):
        (WebCore::LayerTextureUpdaterSkPicture::LayerTextureUpdaterSkPicture):
        (WebCore::LayerTextureUpdaterSkPicture::~LayerTextureUpdaterSkPicture):
        (WebCore::LayerTextureUpdaterSkPicture::prepareToUpdate):
        (WebCore::LayerTextureUpdaterSkPicture::updateTextureRect):
        * platform/graphics/chromium/LayerTextureUpdaterCanvas.h:
        * platform/graphics/chromium/cc/CCLayerTreeHost.cpp:
        (WebCore::CCLayerTreeHost::initialize):

2011-10-24  Adam Klein  <adamk@chromium.org>

        Optimize Node::isInShadowTree to execute in constant-time
        https://bugs.webkit.org/show_bug.cgi?id=67686

        Reviewed by Dimitri Glazkov.

        No expected change in behavior, so no new tests.

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

2011-10-24  Nat Duca  <nduca@chromium.org>

        [chromium] Expose WebThread::postDelayedTask to CCThread
        https://bugs.webkit.org/show_bug.cgi?id=70712

        Reviewed by James Robinson.

        * platform/graphics/chromium/cc/CCThread.h:

2011-10-24  Levi Weintraub  <leviw@chromium.org>

        <svg> fails to use explicit width and height inside <html> inside IFRAME
        https://bugs.webkit.org/show_bug.cgi?id=64823

        Reviewed by Nikolas Zimmermann.

        Checking that embedded SVG is in an SVG document before negotiating size
        with the host document.

        Test: svg/as-object/svg-embedded-in-html-in-iframe.html

        * rendering/svg/RenderSVGRoot.cpp:
        (WebCore::isEmbeddedThroughFrameContainingSVGDocument):
        (WebCore::RenderSVGRoot::computeReplacedLogicalWidth):
        (WebCore::RenderSVGRoot::computeReplacedLogicalHeight):

2011-10-24  Rafael Weinstein  <rafaelw@chromium.org>

        Node::registeredMutationObserversOfType should be prefixed by "get"
        https://bugs.webkit.org/show_bug.cgi?id=70359

        Reviewed by Ojan Vafai.

        This change renames Node::registeredMutationObserversOfType to
        Node::getRegisteredMutationObserversOfType per the WebKit style guide.

        No tests needed as the change is only method renaming.

        * dom/CharacterData.cpp:
        (WebCore::CharacterData::dispatchModifiedEvent):
        * dom/ChildListMutationScope.cpp:
        (WebCore::MutationAccumulationRouter::MutationAccumulationRouter::incrementScopingLevel):
        * dom/Element.cpp:
        (WebCore::enqueueAttributesMutationRecord):
        * dom/Node.cpp:
        (WebCore::Node::getRegisteredMutationObserversOfType):
        * dom/Node.h:

2011-10-24  Mark Hahnenberg  <mhahnenberg@apple.com>

        Rename static getOwnPropertySlot to getOwnPropertySlotByIndex
        https://bugs.webkit.org/show_bug.cgi?id=70271

        Reviewed by Darin Adler.

        No new tests.

        Renaming versions of getOwnPropertySlot that use an unsigned as the property
        name to "getOwnPropertySlotByIndex" in preparation for adding them to the 
        MethodTable, which requires unique names for each method.

        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::CloneSerializer::getSparseIndex):
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateHeader):
        (GenerateImplementation):
        * bridge/runtime_array.cpp:
        (JSC::RuntimeArray::getOwnPropertySlotVirtual):
        (JSC::RuntimeArray::getOwnPropertySlotByIndex):
        * bridge/runtime_array.h:

2011-10-24  Joshua Bell  <jsbell@chromium.org>

        IndexedDB add should fail adding an inline and passed key simultaneously
        https://bugs.webkit.org/show_bug.cgi?id=58598

        Reviewed by Tony Chang.

        Test: storage/indexeddb/mozilla/key-requirements-inline-and-passed.html

        Implement the spec clause: passing a key into add() or put() when
        the object store has a key path ("inline key") is an error.

        * storage/IDBObjectStoreBackendImpl.cpp:
        (WebCore::IDBObjectStoreBackendImpl::put):

2011-10-24  Simon Fraser  <simon.fraser@apple.com>

        Improve debug compositing border colors
        https://bugs.webkit.org/show_bug.cgi?id=70742

        Reviewed by Dean Jackson.

        Improve the appearance of the debug borders used to indicate compositing:
        1. Use green for normal layers, orange for tiled layers
        2. Make the repaint counter translucent
        3. Change the color of the repaint counter to show when accelerated drawing is enabled.

        * platform/graphics/GraphicsLayer.cpp:
        (WebCore::GraphicsLayer::updateDebugIndicators):
        * platform/graphics/mac/WebLayer.mm:
        (drawLayerContents):

2011-10-24  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Fix make distcheck build
        https://bugs.webkit.org/show_bug.cgi?id=69745

        Reviewed by Martin Robinson.

        * GNUmakefile.am:
        * GNUmakefile.list.am:

2011-10-24  Alexander Pavlov  <apavlov@chromium.org>

        Web Inspector: [Styles] Adding a new style rule breaks things
        https://bugs.webkit.org/show_bug.cgi?id=70721

        Reviewed by Pavel Feldman.

        We had used to swap BlankStylePropertiesSection prototype and recently got rid of this hack,
        but still had dependencies on the old behavior.

        * inspector/front-end/StylesSidebarPane.js:
        (WebInspector.StylesSidebarPane.prototype._refreshStyleRules):
        (WebInspector.ComputedStylePropertiesSection.prototype.rebuildComputedTrace):
        (WebInspector.BlankStylePropertiesSection.prototype.get isBlank):
        (WebInspector.BlankStylePropertiesSection.prototype.expand):
        (WebInspector.BlankStylePropertiesSection.prototype.editingSelectorCommitted.successCallback):
        (WebInspector.BlankStylePropertiesSection.prototype.editingSelectorCommitted):
        (WebInspector.BlankStylePropertiesSection.prototype.editingSelectorCancelled):
        (WebInspector.BlankStylePropertiesSection.prototype.makeNormal):

2011-10-24  Pavel Feldman  <pfeldman@google.com>

        Web Inspector: do not force document loading on reload (should happen on demand).
        https://bugs.webkit.org/show_bug.cgi?id=70724

        Reviewed by Yury Semikhatsky.

        * inspector/front-end/ConsoleMessage.js:
        (WebInspector.ConsoleMessageImpl.prototype._formatParameterAsNode):
        * inspector/front-end/DOMAgent.js:
        (WebInspector.DOMAgent.prototype._documentUpdated):
        * inspector/front-end/ElementsPanel.js:
        (WebInspector.ElementsPanel.prototype.wasShown):
        * inspector/front-end/ElementsTreeOutline.js:
        (WebInspector.ElementsTreeOutline.prototype.setVisible):

2011-10-24  Eric Carlson  <eric.carlson@apple.com>

        Drop MutableTextTrack and make TextTrack always mutable
        https://bugs.webkit.org/show_bug.cgi?id=62890

        The MutableTextTrack type was removed from the spec, all text tracks are now mutable.

        Reviewed by Sam Weinig.

        No new tests needed, the changes just refactor existing code.

        * CMakeLists.txt: Remove all traces of MutableTextTrack.
        * CodeGenerators.pri: Ditto.
        * DerivedSources.cpp: Ditto.
        * DerivedSources.make: Ditto.
        * GNUmakefile.list.am: Ditto.
        * WebCore.gypi: Ditto.
        * WebCore.pro: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Ditto.
        * bindings/gobject/GNUmakefile.am: Ditto.
        * bindings/gobject/WebKitHTMLElementWrapperFactory.cpp: Ditto.
        * bindings/js/JSBindingsAllInOne.cpp: Ditto.

        * bindings/js/JSTextTrackCustom.cpp: Removed.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::addTrack): Return a TextTrack instead of a MutableTextTrack.
        * html/HTMLMediaElement.h:
        * html/HTMLMediaElement.idl:

        * html/LoadableTextTrack.cpp:
        (WebCore::LoadableTextTrack::LoadableTextTrack): Return a TextTrack instead of a MutableTextTrack.

        * html/MutableTextTrack.cpp: Removed.
        * html/MutableTextTrack.h: Removed.
        * html/MutableTextTrack.idl: Removed.

        * html/TextTrack.cpp:
        (WebCore::TextTrack::TextTrack): Remove Type parameter.
        (WebCore::TextTrack::addCue): New, moved from MutableTextTrack.
        (WebCore::TextTrack::removeCue): Ditto.
        (WebCore::TextTrack::newCuesLoaded): Ditto.
        (WebCore::TextTrack::fetchNewestCues): Ditto.
        * html/TextTrack.h:
        (WebCore::TextTrack::create): Remove Type parameter
        * html/TextTrack.idl: Add addCue and removeCue.

2011-10-24  Yury Semikhatsky  <yurys@chromium.org>

        Web Inspector: allow debugging dedicated worker initialization
        https://bugs.webkit.org/show_bug.cgi?id=70723

        Now it is possible to pause each new dedicated worker on start. The user
        needs to select a checkbox and then each newly created dedicated worker
        will be paused on the first statement until the user resumes it explicitely.

        Reviewed by Pavel Feldman.

        * inspector/Inspector.json: resume command is added. It is similar to GDB's run
        command, i.e. worker execution will be paused until explicit "resume" command is
        received.
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::shouldPauseDedicatedWorkerOnStartImpl):
        * inspector/InspectorInstrumentation.h:
        (WebCore::InspectorInstrumentation::shouldPauseDedicatedWorkerOnStart):
        * inspector/InspectorRuntimeAgent.cpp:
        (WebCore::InspectorRuntimeAgent::resume):
        (WebCore::InspectorRuntimeAgent::pauseWorkerContext):
        * inspector/InspectorRuntimeAgent.h:
        * inspector/InspectorWorkerAgent.cpp:
        (WebCore::InspectorWorkerAgent::shouldPauseDedicatedWorkerOnStart): returns true
        if the user chose to automatically pause all new workers.
        * inspector/InspectorWorkerAgent.h:
        * inspector/WorkerInspectorController.cpp:
        (WebCore::WorkerInspectorController::resume):
        * inspector/front-end/WorkerManager.js:
        (WebInspector.WorkerManager.loaded):
        (WebInspector.WorkerManager.loadCompleted):
        (WebInspector.WorkerManager.prototype._workerCreated):
        (WebInspector.WorkerManager.prototype.openWorkerInspector):
        (WebInspector.WorkerManager.prototype._openInspectorWindow):
        * inspector/front-end/inspector.js:
        (WebInspector.loaded):
        * workers/Worker.cpp:
        (WebCore::Worker::notifyFinished):
        * workers/WorkerContextProxy.h:
        * workers/WorkerMessagingProxy.cpp:
        (WebCore::WorkerMessagingProxy::startWorkerContext): additional flag specifying
        worker initial state(paused/not paused) is added to the factory method. The flag
        will be carried to the corresponding WorkerThread.
        (WebCore::WorkerMessagingProxy::connectToInspector):
        * workers/WorkerMessagingProxy.h:

2011-10-21  Nikita Vasilyev  <me@elv1s.ru>

        Web Inspector: Make indent configurable
        https://bugs.webkit.org/show_bug.cgi?id=69986

        Add a setting to choose an indent from "8 spaces", "4 spaces" (default), "2 spaces", or "Tab character".

        Reviewed by Pavel Feldman.

        * English.lproj/localizedStrings.js:
        * inspector/front-end/SettingsScreen.js:
        (WebInspector.SettingsScreen):
        (WebInspector.SettingsScreen.prototype._createSelectSetting.get p):
        (WebInspector.SettingsScreen.prototype._createSelectSetting.changeListener):
        * inspector/front-end/TextEditorModel.js:
        (WebInspector.TextEditorModel):
        * inspector/front-end/TextViewer.js:

2011-10-17  Andrey Kosyakov  <caseq@chromium.org>

        Web Inspector: add "Add to Watch" option to context menu on selection in source frame
        https://bugs.webkit.org/show_bug.cgi?id=69924

        Reviewed by Pavel Feldman.

        - added 'Add to Watch' context menu item in scripts panel;
        - include both default and custom items into a context menu if selection is present;

        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.SourceFrameDelegateForScriptsPanel.prototype.suggestedFileName):
        (WebInspector.SourceFrameDelegateForScriptsPanel.prototype.addToWatch):
        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame.prototype.populateSelectionContextMenu):
        (WebInspector.TextViewerDelegateForSourceFrame.prototype.populateSelectionContextMenu):
        (WebInspector.SourceFrameDelegate.prototype.suggestedFileName):
        (WebInspector.SourceFrameDelegate.prototype.addToWatch):
        * inspector/front-end/TextViewer.js:
        (WebInspector.TextViewer.prototype._contextMenu):
        (WebInspector.TextViewerDelegate.prototype.populateSelectionContextMenu):
        * inspector/front-end/WatchExpressionsSidebarPane.js:
        (WebInspector.WatchExpressionsSidebarPane.prototype.addExpression):
        (WebInspector.WatchExpressionsSidebarPane.prototype._addButtonClicked):
        (WebInspector.WatchExpressionsSection.prototype.addExpression):
        (WebInspector.WatchExpressionsSection.prototype.addNewExpressionAndEdit):
        * page/ContextMenuController.cpp:
        (WebCore::ContextMenuController::showContextMenu):

2011-10-21  Alexander Pavlov  <apavlov@chromium.org>

        Web Inspector: Audits hang on pages without img[src] elements
        https://bugs.webkit.org/show_bug.cgi?id=70604

        Reviewed by Pavel Feldman.

        Test: inspector/audits/audits-panel-noimages-functional.html

        * inspector/front-end/AuditRules.js:
        (WebInspector.AuditRules.ImageDimensionsRule.prototype.doRun.getStyles):

2011-10-24  Deepak Sherveghar  <bpwv64@motorola.com>

        [Qt] fast/events/media-focus-in-standalone-media-document.html fails
        https://bugs.webkit.org/show_bug.cgi?id=70110

        Reviewed by Simon Hausmann.

        ExtensionMap should also include media files mapping.

        * platform/qt/MIMETypeRegistryQt.cpp: Added media files mapping.

2011-10-24  Pavel Feldman  <pfeldman@google.com>

        Not reviewed: [chromium] follow up to 98228 - added missing css.

        * WebCore.gypi:

2011-10-24  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: Make CSS files load upon View demand; split inspector.css into views.
        https://bugs.webkit.org/show_bug.cgi?id=70694

        Reviewed by Yury Semikhatsky.

        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * inspector/front-end/AuditsPanel.js:
        (WebInspector.AuditsPanel):
        * inspector/front-end/DataGrid.js:
        (WebInspector.DataGrid):
        * inspector/front-end/ElementsPanel.js:
        * inspector/front-end/NetworkPanel.js:
        (WebInspector.NetworkLogView):
        * inspector/front-end/PanelEnablerView.js:
        * inspector/front-end/ProfilesPanel.js:
        * inspector/front-end/ResourceView.js:
        (WebInspector.ResourceView):
        * inspector/front-end/ResourcesPanel.js:
        * inspector/front-end/ScriptsPanel.js:
        * inspector/front-end/TextViewer.js:
        * inspector/front-end/TimelinePanel.js:
        (WebInspector.TimelinePanel):
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/WelcomeView.js:
        (WebInspector.WelcomeView):
        * inspector/front-end/auditsPanel.css: Renamed from Source/WebCore/inspector/front-end/audits.css.

2011-10-24  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: make view load CSS files upon show.
        https://bugs.webkit.org/show_bug.cgi?id=70696

        Reviewed by Yury Semikhatsky.

        Test: inspector/view-css.html

        * inspector/front-end/View.js:
        (WebInspector.View):
        (WebInspector.View.prototype._callOnVisibleChildren):
        (WebInspector.View.prototype._processWillShow):
        (WebInspector.View.prototype._processWasShown):
        (WebInspector.View.prototype._processWillHide):
        (WebInspector.View.prototype._processWasHidden):
        (WebInspector.View.prototype._processOnResize):
        (WebInspector.View.prototype.show):
        (WebInspector.View.prototype.detach):
        (WebInspector.View.prototype.registerRequiredCSS):
        (WebInspector.View.prototype._loadCSSIfNeeded):
        (WebInspector.View.prototype._doLoadCSS):
        (WebInspector.View.prototype._disableCSSIfNeeded):
        (WebInspector.View.prototype._doUnloadCSS):

2011-10-24  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: make DataGrid a view
        https://bugs.webkit.org/show_bug.cgi?id=70695

        Reviewed by Yury Semikhatsky.

        * inspector/front-end/ApplicationCacheItemsView.js:
        (WebInspector.ApplicationCacheItemsView.prototype._createDataGrid):
        * inspector/front-end/CookieItemsView.js:
        (WebInspector.CookieItemsView.prototype._updateWithCookies):
        (WebInspector.SimpleCookiesTable):
        (WebInspector.SimpleCookiesTable.prototype.setCookies):
        * inspector/front-end/CookiesTable.js:
        (WebInspector.CookiesTable):
        * inspector/front-end/DOMStorageItemsView.js:
        (WebInspector.DOMStorageItemsView.prototype._showDOMStorageEntries):
        * inspector/front-end/DataGrid.js:
        (WebInspector.DataGrid):
        (WebInspector.DataGrid.prototype.onResize):
        * inspector/front-end/DatabaseQueryView.js:
        (WebInspector.DatabaseQueryView.prototype._queryFinished):
        (WebInspector.DatabaseQueryView.prototype._queryError):
        (WebInspector.DatabaseQueryView.prototype._appendViewQueryResult):
        (WebInspector.DatabaseQueryView.prototype._appendErrorQueryResult):
        (WebInspector.DatabaseQueryView.prototype._appendQueryResult):
        * inspector/front-end/DatabaseTableView.js:
        (WebInspector.DatabaseTableView.prototype._queryFinished):
        * inspector/front-end/DetailedHeapshotView.js:
        (WebInspector.DetailedHeapshotView.prototype.wasShown.profileCallback2):
        (WebInspector.DetailedHeapshotView.prototype.wasShown):
        (WebInspector.DetailedHeapshotView.prototype.onResize):
        * inspector/front-end/NetworkPanel.js:
        (WebInspector.NetworkLogView.prototype.onResize):
        (WebInspector.NetworkLogView.prototype._createTable):
        * inspector/front-end/ProfileView.js:
        * inspector/front-end/ResourceCookiesView.js:
        (WebInspector.ResourceCookiesView.prototype._buildCookiesTable):
        * inspector/front-end/ResourceView.js:
        (WebInspector.ResourceView):

2011-10-24  Yosifumi Inoue  <yosin@chromium.org>

        [Forms] Setting defaultValue should hide an input placeholder.
        https://bugs.webkit.org/show_bug.cgi?id=70586

        Reviewed by Kent Tamura.

        Tests: fast/forms/placeholder-and-default-value-expected.html
               fast/forms/placeholder-and-default-value.html

        When input element has default value, we should not display
        placeholder. Changing default value should tell rendering engine about
        changing display of input element.

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::parseMappedAttribute): Calls updatePlaceholderVisibility for valueAttr if it doesn't have dirty value.

2011-10-23  Darin Adler  <darin@apple.com>

        Eliminate OptionElement (second and final part)
        https://bugs.webkit.org/show_bug.cgi?id=70710

        Reviewed by Kent Tamura.

        * CMakeLists.txt: Removed OptionElement.h and OptionElement.cpp.
        * GNUmakefile.list.am: Ditto.
        * WebCore.gypi: Ditto.
        * WebCore.pro: Ditto.
        * WebCore.vcproj/WebCore.vcproj: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Ditto.
        * dom/DOMAllInOne.cpp: Ditto.

        * dom/OptionElement.cpp: Removed.
        * dom/OptionElement.h: Removed.

        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::saveLastSelection): Eliminate use of the
        toOptionElement function. Use hasTagName and toHTMLOptionElement instead.
        (WebCore::HTMLSelectElement::setActiveSelectionAnchorIndex): Ditto.
        (WebCore::HTMLSelectElement::updateListBoxSelection): Ditto.
        (WebCore::HTMLSelectElement::listBoxOnChange): Ditto.
        (WebCore::HTMLSelectElement::recalcListItems): Ditto.
        (WebCore::HTMLSelectElement::selectedIndex): Ditto.
        (WebCore::HTMLSelectElement::setSelectedIndex): Ditto.
        (WebCore::HTMLSelectElement::deselectItemsWithoutValidation): Ditto.
        (WebCore::HTMLSelectElement::saveFormControlState): Ditto.
        (WebCore::HTMLSelectElement::restoreFormControlState): Ditto.
        (WebCore::HTMLSelectElement::appendFormData): Ditto.
        (WebCore::HTMLSelectElement::reset): Ditto.
        (WebCore::HTMLSelectElement::updateSelectedState): Ditto.
        (WebCore::HTMLSelectElement::lastSelectedListIndex): Ditto.
        (WebCore::HTMLSelectElement::typeAheadFind): Ditto.
        (WebCore::HTMLSelectElement::accessKeySetSelectedIndex): Ditto.

        * html/HTMLSelectElement.h: Changed the argument type of the
        deselectItemsWithoutValidation function to HTMLElement* since that's
        the type of an item in our items vector now.

2011-10-23  Yuzo Fujishima  <yuzo@google.com>

        [chromium] Attempt to fix compilation error for Chromium OS.

        Unreviewed.

        * mediastream/MediaStreamTrack.cpp:
        (WebCore::MediaStreamTrack::kind):

2011-10-23  Adam Barth  <abarth@webkit.org>

        <img crossorigin> should fail to load when CORS check fails
        https://bugs.webkit.org/show_bug.cgi?id=69732

        Reviewed by Darin Adler.

        When loading an image with the crossorigin attribute, the spec says
        that we're not supposed to load the image if the CORS check fails.
        This "fails fast" behavior is intended to help developers understand
        whether they've configured CORS correctly (instead of only catching the
        error later when trying to read back the canvas).

        Our new behavior matches the spec and Firefox.

        Test: http/tests/security/img-with-failed-cors-check-fails-to-load.html

        * loader/ImageLoader.cpp:
        (WebCore::ImageLoader::notifyFinished):

2011-10-23  Noel Gordon  <noel.gordon@gmail.com>

        [chromium] Remove GeolocationServiceGtk.{h,cpp} from the gyp projects
        https://bugs.webkit.org/show_bug.cgi?id=70702

        Reviewed by Kent Tamura.

        platform/gtk/GeolocationServiceGtk.{h,cpp} were removed in r97746, so
        remove references to these files from the gyp files.

        * WebCore.gypi:

2011-10-23  Andreas Kling  <kling@webkit.org>

        Move StyleSheet::addSubresourceStyleURLs() to CSSStyleSheet.
        https://bugs.webkit.org/show_bug.cgi?id=70690

        Reviewed by Antti Koivisto.

        This method isn't part of the StyleSheet DOM interface, nor is it used by
        XSLStyleSheet, so move it down to CSSStyleSheet and make it non-virtual.
        Also remove some nearby unneeded casts from CSSStyleSheet* to StyleSheet*.

        * css/CSSStyleSheet.h:
        * css/StyleSheet.h:
        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::isLoading):
        (WebCore::HTMLLinkElement::addSubresourceAttributeURLs):
        * html/HTMLStyleElement.cpp:
        (WebCore::HTMLStyleElement::addSubresourceAttributeURLs):
        (WebCore::HTMLStyleElement::disabled):
        (WebCore::HTMLStyleElement::setDisabled):

2011-10-23  Andreas Kling  <kling@webkit.org>

        Remove style sheet constructors that take a style sheet parent.
        https://bugs.webkit.org/show_bug.cgi?id=70692

        Reviewed by Antti Koivisto.

        Style sheets are never directly parented by other style sheets, they always
        go via a rule (such as @import.)

        * css/CSSStyleSheet.cpp:
        * css/CSSStyleSheet.h:
        (WebCore::CSSStyleSheet::create):
        * css/StyleSheet.cpp:
        * css/StyleSheet.h:

2011-10-23  Mark Hahnenberg  <mhahnenberg@apple.com>

        Add deleteProperty to the MethodTable
        https://bugs.webkit.org/show_bug.cgi?id=70162

        Reviewed by Sam Weinig.

        No new tests.

        * WebCore.exp.in:

2011-10-23  Adam Barth  <abarth@webkit.org>

        Update baselines for run-bindings-tests.

        * bindings/scripts/test/JS/JSTestInterface.cpp:
        * bindings/scripts/test/JS/JSTestInterface.h:
        * bindings/scripts/test/JS/JSTestObj.cpp:

2011-10-23  Mark Hahnenberg  <mhahnenberg@apple.com>

        Remove getConstructDataVirtual
        https://bugs.webkit.org/show_bug.cgi?id=70638

        Reviewed by Darin Adler.

        No new tests.

        Removed all declarations and definitions of getConstructDataVirtual.
        Also replaced all call sites to getConstructDataVirtual with a 
        corresponding lookup in the MethodTable.

        * WebCore.exp.in:
        * bindings/js/JSAudioConstructor.cpp:
        * bindings/js/JSAudioConstructor.h:
        * bindings/js/JSImageConstructor.cpp:
        * bindings/js/JSImageConstructor.h:
        * bindings/js/JSOptionConstructor.cpp:
        * bindings/js/JSOptionConstructor.h:
        * bindings/js/ScriptFunctionCall.cpp:
        (WebCore::ScriptFunctionCall::construct):
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateConstructorDeclaration):
        (GenerateConstructorDefinition):
        * bridge/runtime_object.cpp:
        * bridge/runtime_object.h:

2011-10-22  Geoffrey Garen  <ggaren@apple.com>

        Separated string lifetime bits from character buffer state bits
        https://bugs.webkit.org/show_bug.cgi?id=70673

        Reviewed by Anders Carlsson.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateHashValue): Updated for string hashing changes in JavaScriptCore.

2011-10-22  Pratik Solanki  <psolanki@apple.com>

        HTTPBodyStream in NSURLRequest gets lost when using CFNetwork loader
        https://bugs.webkit.org/show_bug.cgi?id=70583
        <rdar://problem/10281227>

        Reviewed by Darin Adler.

        Call WebCore::setHTTPBody() only if we actually have a FormData. Unconditionally calling it
        results in us passing 0 to wkCFURLRequestSetHTTPRequestBodyParts() which resets any input
        stream specified by the user on the NSURLRequest. This code matches the behavior in the
        Foundation version of doUpdatePlatformRequest().

        * platform/network/cf/ResourceRequestCFNet.cpp:
        (WebCore::ResourceRequest::doUpdatePlatformRequest):

2011-10-22  Adam Bergkvist  <adam.bergkvist@ericsson.com>

        Move all MediaStream and PeerConnection related non-platform files to WebCore/mediastream
        https://bugs.webkit.org/show_bug.cgi?id=70233

        Reviewed by Adam Barth.

        Removed affected files from build systems that don't have a MEDIA_STREAM build flag.

        No new tests since we're just moving files.

        * CMakeLists.txt:
        * CodeGenerators.pri:
        * DerivedSources.cpp:
        * DerivedSources.make:
        * GNUmakefile.am:
        * GNUmakefile.list.am:
        * UseJSC.cmake:
        * WebCore.gyp/WebCore.gyp:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSBindingsAllInOne.cpp:
        * dom/DOMAllInOne.cpp:
        * dom/DispatchTask.h: Removed unused file.
        * dom/ScriptExecutionContext.cpp:
        * mediastream/LocalMediaStream.cpp: Renamed from Source/WebCore/dom/LocalMediaStream.cpp.
        (WebCore::LocalMediaStream::create):
        (WebCore::LocalMediaStream::LocalMediaStream):
        (WebCore::LocalMediaStream::stop):
        (WebCore::LocalMediaStream::stopTimerFired):
        (WebCore::LocalMediaStream::~LocalMediaStream):
        (WebCore::LocalMediaStream::toLocalMediaStream):
        * mediastream/LocalMediaStream.h: Renamed from Source/WebCore/dom/LocalMediaStream.h.
        * mediastream/LocalMediaStream.idl: Renamed from Source/WebCore/dom/LocalMediaStream.idl.
        * mediastream/MediaStream.cpp: Renamed from Source/WebCore/dom/MediaStream.cpp.
        (WebCore::MediaStream::create):
        (WebCore::MediaStream::MediaStream):
        (WebCore::MediaStream::~MediaStream):
        (WebCore::MediaStream::readyState):
        (WebCore::MediaStream::toMediaStream):
        (WebCore::MediaStream::streamEnded):
        (WebCore::MediaStream::scriptExecutionContext):
        (WebCore::MediaStream::eventTargetData):
        (WebCore::MediaStream::ensureEventTargetData):
        * mediastream/MediaStream.h: Renamed from Source/WebCore/dom/MediaStream.h.
        (WebCore::MediaStream::label):
        (WebCore::MediaStream::tracks):
        (WebCore::MediaStream::descriptor):
        (WebCore::MediaStream::refEventTarget):
        (WebCore::MediaStream::derefEventTarget):
        * mediastream/MediaStream.idl: Renamed from Source/WebCore/dom/MediaStream.idl.
        * mediastream/MediaStreamClient.h: Renamed from Source/WebCore/page/MediaStreamClient.h.
        (WebCore::MediaStreamClient::~MediaStreamClient):
        * mediastream/MediaStreamController.cpp: Renamed from Source/WebCore/page/MediaStreamController.cpp.
        (WebCore::MediaStreamController::Request::Request):
        (WebCore::MediaStreamController::Request::localId):
        (WebCore::MediaStreamController::Request::frameController):
        (WebCore::MediaStreamController::MediaStreamController):
        (WebCore::MediaStreamController::~MediaStreamController):
        (WebCore::MediaStreamController::isClientAvailable):
        (WebCore::MediaStreamController::unregisterFrameController):
        (WebCore::MediaStreamController::registerRequest):
        (WebCore::MediaStreamController::generateStream):
        (WebCore::MediaStreamController::streamGenerated):
        (WebCore::MediaStreamController::streamGenerationFailed):
        * mediastream/MediaStreamController.h: Renamed from Source/WebCore/page/MediaStreamController.h.
        * mediastream/MediaStreamEvent.cpp: Renamed from Source/WebCore/p2p/MediaStreamEvent.cpp.
        (WebCore::MediaStreamEvent::create):
        (WebCore::MediaStreamEvent::MediaStreamEvent):
        (WebCore::MediaStreamEvent::~MediaStreamEvent):
        (WebCore::MediaStreamEvent::initMediaStreamEvent):
        (WebCore::MediaStreamEvent::stream):
        * mediastream/MediaStreamEvent.h: Renamed from Source/WebCore/p2p/MediaStreamEvent.h.
        (WebCore::MediaStreamEvent::isMediaStreamEvent):
        * mediastream/MediaStreamEvent.idl: Renamed from Source/WebCore/p2p/MediaStreamEvent.idl.
        * mediastream/MediaStreamFrameController.cpp: Renamed from Source/WebCore/page/MediaStreamFrameController.cpp.
        (WebCore::MediaStreamFrameController::Request::~Request):
        (WebCore::MediaStreamFrameController::Request::scriptExecutionContext):
        (WebCore::MediaStreamFrameController::Request::isGenerateStreamRequest):
        (WebCore::MediaStreamFrameController::Request::Request):
        (WebCore::MediaStreamFrameController::GenerateStreamRequest::create):
        (WebCore::MediaStreamFrameController::GenerateStreamRequest::~GenerateStreamRequest):
        (WebCore::MediaStreamFrameController::GenerateStreamRequest::isGenerateStreamRequest):
        (WebCore::MediaStreamFrameController::GenerateStreamRequest::abort):
        (WebCore::MediaStreamFrameController::GenerateStreamRequest::successCallback):
        (WebCore::MediaStreamFrameController::GenerateStreamRequest::errorCallback):
        (WebCore::MediaStreamFrameController::GenerateStreamRequest::GenerateStreamRequest):
        (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::isClientAvailable):
        (WebCore::MediaStreamFrameController::disconnectPage):
        (WebCore::MediaStreamFrameController::disconnectFrame):
        (WebCore::MediaStreamFrameController::transferToNewPage):
        (WebCore::MediaStreamFrameController::parseGenerateStreamOptions):
        (WebCore::MediaStreamFrameController::generateStream):
        (WebCore::MediaStreamFrameController::streamGenerated):
        (WebCore::MediaStreamFrameController::streamGenerationFailed):
        * mediastream/MediaStreamFrameController.h: Renamed from Source/WebCore/page/MediaStreamFrameController.h.
        (WebCore::MediaStreamFrameController::IdGenerator::IdGenerator):
        (WebCore::MediaStreamFrameController::IdGenerator::getNextId):
        * mediastream/MediaStreamList.cpp: Renamed from Source/WebCore/dom/MediaStreamList.cpp.
        (WebCore::MediaStreamList::create):
        (WebCore::MediaStreamList::MediaStreamList):
        (WebCore::MediaStreamList::~MediaStreamList):
        (WebCore::MediaStreamList::length):
        (WebCore::MediaStreamList::item):
        (WebCore::MediaStreamList::append):
        (WebCore::MediaStreamList::remove):
        (WebCore::MediaStreamList::contains):
        * mediastream/MediaStreamList.h: Renamed from Source/WebCore/dom/MediaStreamList.h.
        * mediastream/MediaStreamList.idl: Renamed from Source/WebCore/dom/MediaStreamList.idl.
        * mediastream/MediaStreamRegistry.cpp: Renamed from Source/WebCore/platform/MediaStreamRegistry.cpp.
        (WebCore::MediaStreamRegistry::registry):
        (WebCore::MediaStreamRegistry::registerMediaStreamURL):
        (WebCore::MediaStreamRegistry::unregisterMediaStreamURL):
        (WebCore::MediaStreamRegistry::mediaStream):
        * mediastream/MediaStreamRegistry.h: Renamed from Source/WebCore/platform/MediaStreamRegistry.h.
        * mediastream/MediaStreamTrack.cpp: Renamed from Source/WebCore/dom/MediaStreamTrack.cpp.
        (WebCore::MediaStreamTrack::create):
        (WebCore::MediaStreamTrack::MediaStreamTrack):
        (WebCore::MediaStreamTrack::~MediaStreamTrack):
        (WebCore::MediaStreamTrack::kind):
        (WebCore::MediaStreamTrack::label):
        (WebCore::MediaStreamTrack::enabled):
        (WebCore::MediaStreamTrack::setEnabled):
        * mediastream/MediaStreamTrack.h: Renamed from Source/WebCore/dom/MediaStreamTrack.h.
        * mediastream/MediaStreamTrack.idl: Renamed from Source/WebCore/dom/MediaStreamTrack.idl.
        * mediastream/MediaStreamTrackList.cpp: Renamed from Source/WebCore/dom/MediaStreamTrackList.cpp.
        (WebCore::MediaStreamTrackList::create):
        (WebCore::MediaStreamTrackList::MediaStreamTrackList):
        (WebCore::MediaStreamTrackList::~MediaStreamTrackList):
        (WebCore::MediaStreamTrackList::length):
        (WebCore::MediaStreamTrackList::item):
        * mediastream/MediaStreamTrackList.h: Renamed from Source/WebCore/dom/MediaStreamTrackList.h.
        * mediastream/MediaStreamTrackList.idl: Renamed from Source/WebCore/dom/MediaStreamTrackList.idl.
        * mediastream/PeerConnection.cpp: Renamed from Source/WebCore/p2p/PeerConnection.cpp.
        (WebCore::PeerConnection::create):
        (WebCore::PeerConnection::PeerConnection):
        (WebCore::PeerConnection::~PeerConnection):
        (WebCore::PeerConnection::processSignalingMessage):
        (WebCore::PeerConnection::readyState):
        (WebCore::PeerConnection::send):
        (WebCore::PeerConnection::addStream):
        (WebCore::PeerConnection::removeStream):
        (WebCore::PeerConnection::localStreams):
        (WebCore::PeerConnection::remoteStreams):
        (WebCore::PeerConnection::close):
        (WebCore::PeerConnection::iceProcessingCompleted):
        (WebCore::PeerConnection::sdpGenerated):
        (WebCore::PeerConnection::dataStreamMessageReceived):
        (WebCore::PeerConnection::remoteStreamAdded):
        (WebCore::PeerConnection::remoteStreamRemoved):
        (WebCore::PeerConnection::toPeerConnection):
        (WebCore::PeerConnection::scriptExecutionContext):
        (WebCore::PeerConnection::stop):
        (WebCore::PeerConnection::eventTargetData):
        (WebCore::PeerConnection::ensureEventTargetData):
        (WebCore::PeerConnection::scheduleInitialNegotiation):
        (WebCore::PeerConnection::initialNegotiationTimerFired):
        (WebCore::PeerConnection::ensureStreamChangeScheduled):
        (WebCore::PeerConnection::streamChangeTimerFired):
        (WebCore::PeerConnection::scheduleReadyStateChange):
        (WebCore::PeerConnection::readyStateChangeTimerFired):
        (WebCore::PeerConnection::changeReadyState):
        * mediastream/PeerConnection.h: Renamed from Source/WebCore/p2p/PeerConnection.h.
        (WebCore::PeerConnection::refEventTarget):
        (WebCore::PeerConnection::derefEventTarget):
        * mediastream/PeerConnection.idl: Renamed from Source/WebCore/p2p/PeerConnection.idl.
        * mediastream/SignalingCallback.h: Renamed from Source/WebCore/p2p/SignalingCallback.h.
        (WebCore::SignalingCallback::~SignalingCallback):
        * mediastream/SignalingCallback.idl: Renamed from Source/WebCore/p2p/SignalingCallback.idl.
        * page/Frame.cpp:
        * page/Navigator.cpp:
        * page/Page.cpp:

2011-10-20  Pavel Feldman  <pfeldman@google.com>

        Web Inspector: get rid of View::hide, View::set visible, View::attach,
        View::set visible.
        https://bugs.webkit.org/show_bug.cgi?id=70523

        This change also introduces assetions that forces view attach / detach operations
        to be performed explicitly.

        Reviewed by Yury Semikhatsky.

        * inspector/front-end/ApplicationCacheItemsView.js:
        (WebInspector.ApplicationCacheItemsView.prototype.wasShown):
        (WebInspector.ApplicationCacheItemsView.prototype.willHide):
        (WebInspector.ApplicationCacheItemsView.prototype._updateCallback):
        * inspector/front-end/AuditsPanel.js:
        (WebInspector.AuditsPanel.prototype.wasShown):
        * inspector/front-end/ConsolePanel.js:
        (WebInspector.ConsolePanel.prototype.wasShown):
        (WebInspector.ConsolePanel.prototype.willHide):
        * inspector/front-end/ConsoleView.js:
        (WebInspector.ConsoleView.prototype.wasShown):
        * inspector/front-end/CookieItemsView.js:
        (WebInspector.CookieItemsView.prototype.wasShown):
        (WebInspector.CookieItemsView.prototype.willHide):
        (WebInspector.CookieItemsView.prototype._updateWithCookies):
        * inspector/front-end/DOMStorageItemsView.js:
        (WebInspector.DOMStorageItemsView.prototype.wasShown):
        (WebInspector.DOMStorageItemsView.prototype.willHide):
        * inspector/front-end/DatabaseQueryView.js:
        * inspector/front-end/DatabaseTableView.js:
        (WebInspector.DatabaseTableView.prototype.wasShown):
        * inspector/front-end/DetailedHeapshotView.js:
        (WebInspector.DetailedHeapshotView.prototype.willHide):
        (WebInspector.DetailedHeapshotView.prototype._changeView):
        * inspector/front-end/Drawer.js:
        (WebInspector.Drawer.prototype.hide):
        * inspector/front-end/ElementsPanel.js:
        (WebInspector.ElementsPanel.prototype.wasShown):
        (WebInspector.ElementsPanel.prototype.willHide):
        * inspector/front-end/EmptyView.js:
        (WebInspector.EmptyView.prototype.wasShown):
        * inspector/front-end/FontView.js:
        (WebInspector.FontView.prototype.wasShown):
        * inspector/front-end/IFrameView.js:
        (WebInspector.IFrameView):
        * inspector/front-end/ImageView.js:
        (WebInspector.ImageView.prototype.wasShown):
        * inspector/front-end/NetworkItemView.js:
        (WebInspector.NetworkItemView.prototype.wasShown):
        (WebInspector.ResourceContentView.prototype.wasShown):
        * inspector/front-end/NetworkPanel.js:
        (WebInspector.NetworkLogView.prototype.wasShown):
        (WebInspector.NetworkLogView.prototype.willHide):
        (WebInspector.NetworkPanel.prototype.wasShown):
        * inspector/front-end/Panel.js:
        (WebInspector.Panel):
        (WebInspector.Panel.prototype.show):
        (WebInspector.Panel.prototype.wasShown):
        (WebInspector.Panel.prototype.willHide):
        * inspector/front-end/PanelEnablerView.js:
        * inspector/front-end/ProfileView.js:
        (WebInspector.CPUProfileView.prototype.willHide):
        * inspector/front-end/ProfilesPanel.js:
        (WebInspector.ProfilesPanel.prototype.wasShown):
        (WebInspector.ProfilesPanel.prototype._addProfileHeader):
        (WebInspector.ProfilesPanel.prototype._updateInterface):
        (WebInspector.ProfilesPanel.prototype._enableDetailedHeapProfiles):
        * inspector/front-end/ResourceCookiesView.js:
        (WebInspector.ResourceCookiesView.prototype.wasShown):
        * inspector/front-end/ResourceHTMLView.js:
        (WebInspector.ResourceHTMLView.prototype.wasShown):
        (WebInspector.ResourceHTMLView.prototype.willHide):
        * inspector/front-end/ResourceJSONView.js:
        (WebInspector.ResourceJSONView.parseJSON.WebInspector.ResourceJSONView.prototype.wasShown):
        * inspector/front-end/ResourceTimingView.js:
        (WebInspector.ResourceTimingView.prototype.wasShown):
        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.ResourcesPanel.prototype.wasShown):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype.wasShown):
        (WebInspector.ScriptsPanel.prototype._updateDebuggerButtons):
        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame.prototype.wasShown):
        * inspector/front-end/TimelinePanel.js:
        (WebInspector.TimelinePanel.prototype.wasShown):
        (WebInspector.TimelinePanel.prototype.willHide):
        * inspector/front-end/View.js:
        (WebInspector.View):
        (WebInspector.View.prototype.get visible):
        (WebInspector.View.prototype.setHideOnDetach):
        (WebInspector.View.prototype._wasShown):
        (WebInspector.View.prototype._willHide):
        (WebInspector.View.prototype._onResize):
        (WebInspector.View.prototype.wasShown):
        (WebInspector.View.prototype.willHide):
        (WebInspector.View.prototype.onResize):
        (WebInspector.View.prototype.show):
        (WebInspector.View.prototype.detach):
        (WebInspector.View.prototype.doResize):
        (WebInspector.View.prototype.dispatchToSelfAndChildren):
        (WebInspector.View.prototype.dispatchToChildren):
        (WebInspector.View.prototype._handleInsertedIntoDocument):

2011-10-22  Kent Tamura  <tkent@chromium.org>

        REGRESSION(r92480): Passing uninitialized variable in HTMLElement::calculateAndAdjustDirectionality()
        https://bugs.webkit.org/show_bug.cgi?id=70582

        Reviewed by Darin Adler.

        No new tests. It's very hard to make a reliable test.

        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::directionality):
        Clear *strongDirectionalityTextNode even if hasStrongDirectionality is false.

2011-10-21  Dan Bernstein  <mitz@apple.com>

        Caret is drawn in the wrong place in multi-column blocks
        https://bugs.webkit.org/show_bug.cgi?id=70662

        Reviewed by Gavin Barraclough.

        * manual-tests/caret-in-columns.html: Added.
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::paintCaret): Removed the call to offsetForContents(). That function takes
        a point in local coordinates, whereas this function was applying it to a point in painting root
        coordinates. The desired effect was only to undo the scroll adjustment done by the caller,
        paintObject().
        (WebCore::RenderBlock::paintObject): Pass the original, rather than scroll-adjusted, paint offset
        to paintCaret().

2011-10-21  Nat Duca  <nduca@chromium.org>

        [chromium] Make setVisibility extension- and thread-correct
        https://bugs.webkit.org/show_bug.cgi?id=70635

        Reviewed by Kenneth Russell.

        * platform/graphics/chromium/Extensions3DChromium.h:
        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::initialize):
        (WebCore::LayerRendererChromium::setVisible):
        * platform/graphics/chromium/LayerRendererChromium.h:
        * platform/graphics/chromium/cc/CCLayerTreeHost.h:
        (WebCore::LayerRendererCapabilities::LayerRendererCapabilities):
        * platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:
        (WebCore::CCLayerTreeHostImpl::setVisible):

2011-10-21  Beth Dakin  <bdakin@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=70647
        Common but unreproducible crash under [ScrollbarPartAnimation setCurrentProgress:]
        -and corresponding-
        <rdar://problem/9542018>

        Reviewed by Sam Weinig.

        This patch implements two speculative fixes for this crash.

        First, block exceptions around all of the code responsible for calling 
        stopAnimation. If that code throws any exceptions, we want to make sure the other 
        animations are still stopped.
        * platform/mac/ScrollAnimatorMac.mm:
        (-[WebScrollbarPartAnimation scrollAnimatorDestroyed]):
        (-[WebScrollbarPainterDelegate scrollAnimatorDestroyed]):
        (WebCore::ScrollAnimatorMac::~ScrollAnimatorMac):

        Only send AppKit these notifications for active pages. I originally made these 
        assertions, and I found that they were hit a surprising number of times. If we 
        only send notifications for active pages, then we should greatly reduce and 
        possibly eliminate our chances of hitting this crash.
        (WebCore::ScrollAnimatorMac::notifyPositionChanged):
        (WebCore::ScrollAnimatorMac::contentAreaWillPaint):
        (WebCore::ScrollAnimatorMac::mouseEnteredContentArea):
        (WebCore::ScrollAnimatorMac::mouseExitedContentArea):
        (WebCore::ScrollAnimatorMac::mouseMovedInContentArea):
        (WebCore::ScrollAnimatorMac::willStartLiveResize):
        (WebCore::ScrollAnimatorMac::contentsResized):
        (WebCore::ScrollAnimatorMac::willEndLiveResize):
        (WebCore::ScrollAnimatorMac::contentAreaDidShow):
        (WebCore::ScrollAnimatorMac::contentAreaDidHide):
        (WebCore::ScrollAnimatorMac::didBeginScrollGesture):
        (WebCore::ScrollAnimatorMac::didEndScrollGesture):

2011-10-21  Mark Hahnenberg  <mhahnenberg@apple.com>

        Add put to the MethodTable
        https://bugs.webkit.org/show_bug.cgi?id=70439

        Reviewed by Oliver Hunt.

        No new tests.

        * WebCore.exp.in:
        * bindings/js/JSDOMWindowCustom.cpp: Added static put since it was overlooked in 
        previous patches.
        (WebCore::JSDOMWindow::putVirtual):
        (WebCore::JSDOMWindow::put):
        * bindings/js/JSDOMWindowShell.cpp: Ditto.
        (WebCore::JSDOMWindowShell::putVirtual):
        (WebCore::JSDOMWindowShell::put):
        * bindings/js/JSDOMWindowShell.h:

2011-10-21  Dmitry Lomov  <dslomov@google.com>

        https://bugs.webkit.org/show_bug.cgi?id=70580
        [Chromium] Implement MessagePort transfer in chromium port of webkit.

        Reviewed by David Levin.

        * bindings/v8/SerializedScriptValue.cpp:
        (WebCore::V8ObjectMap::Writer::writeTransferredMessagePort):
        (WebCore::V8ObjectMap::Serializer::Serializer):
        (WebCore::V8ObjectMap::Serializer::doSerialize):
        (WebCore::V8ObjectMap::Reader::read):
        (WebCore::V8ObjectMap::Deserializer::Deserializer):
        (WebCore::V8ObjectMap::Deserializer::tryGetTransferredMessagePort):
        (WebCore::SerializedScriptValue::SerializedScriptValue):
        (WebCore::SerializedScriptValue::deserialize):

2011-10-21  Ojan Vafai  <ojan@chromium.org>

        r97693 caused 42 failures on the chromium mac bots
        https://bugs.webkit.org/show_bug.cgi?id=70300

        Can't test this until https://bugs.webkit.org/show_bug.cgi?id=70660
        is fixed. The fix for that bug will test this codepath as well though.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::computeBlockPreferredLogicalWidths):

2011-10-21  Vineet Chaudhary  <vineet.chaudhary@motorola.com>

        Setting form.enctype reflected attribute behaves strangely.
        https://bugs.webkit.org/show_bug.cgi?id=44879

        Reviewed by Darin Adler.

        The spec says form.enctype should be application/x-www-form-urlencoded,
        So as "text", "plain", "multipart" or "form-data" these are not a valid value so must be ignored.

        * loader/FormSubmission.cpp:
        (WebCore::FormSubmission::Attributes::parseEncodingType):

2011-10-21  Matthew Delaney  <mdelaney@apple.com>

        Ensure periodic flushing of canvas drawing context
        https://bugs.webkit.org/show_bug.cgi?id=70646

        Reviewed by Simon Fraser.

        No new tests. No current way to track tests that cause hangs or
        non-deterministic drops in performance.

        * platform/graphics/cg/ImageBufferDataCG.h: Adds a timestamp of last tracked flush.
        * platform/graphics/cg/ImageBufferCG.cpp: Ensures periodic flushes on the drawing context.
        (WebCore::ImageBuffer::ImageBuffer):
        (WebCore::ImageBuffer::context): Flushes context if we're beyond flush interval.
        (WebCore::ImageBuffer::copyNativeImage): Updates last flush timestamp.
        (WebCore::ImageBuffer::getUnmultipliedImageData): Updates last flush timestamp.
        (WebCore::ImageBuffer::getPremultipliedImageData): Updates last flush timestamp.
        (WebCore::ImageBuffer::putUnmultipliedImageData): Updates last flush timestamp.
        (WebCore::ImageBuffer::putPremultipliedImageData): Updates last flush timestamp.

2011-10-21  Adam Barth  <abarth@webkit.org>

        Introduce Event::hasInterface to make uses of interfaceName more readable
        https://bugs.webkit.org/show_bug.cgi?id=70652

        Reviewed by Eric Seidel.

        Eric felt that this approach would be more readable because it requires
        less syntax at each callsite.

        * bindings/js/JSErrorHandler.cpp:
        (WebCore::JSErrorHandler::handleEvent):
        * bindings/objc/DOMEvents.mm:
        (kitClass):
        * bindings/v8/V8WindowErrorHandler.cpp:
        (WebCore::V8WindowErrorHandler::callListenerFunction):
        * bindings/v8/V8WorkerContextErrorHandler.cpp:
        (WebCore::V8WorkerContextErrorHandler::callListenerFunction):
        * dom/Event.cpp:
        (WebCore::Event::hasInterface):
        * dom/Event.h:
        * dom/EventDispatcher.cpp:
        (WebCore::EventDispatcher::determineDispatchBehavior):
        * dom/Node.cpp:
        (WebCore::Node::defaultEventHandler):
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::defaultEventHandler):
        * html/HTMLTextAreaElement.cpp:
        (WebCore::HTMLTextAreaElement::defaultEventHandler):
        * html/TextFieldInputType.cpp:
        (WebCore::TextFieldInputType::forwardEvent):
        (WebCore::TextFieldInputType::shouldSubmitImplicitly):
        * inspector/InspectorDOMStorageResource.cpp:
        (WebCore::InspectorDOMStorageResource::handleEvent):

2011-10-21  Adam Klein  <adamk@chromium.org>

        [MutationObservers] Implement basic subtree observation
        https://bugs.webkit.org/show_bug.cgi?id=70436

        Reviewed by Ryosuke Niwa.

        Note that this patch only implements "basic" subtree semantics,
        not the fully robust semantics described in
        http://lists.w3.org/Archives/Public/public-webapps/2011JulSep/1622.html.
        Most importantly, this change does not handle the case where mutations
        occur in a temporarily detached subtree.

        The plan is to implement those semantics in a followup to avoid
        blocking other parts of the MutationObserver spec that rely on
        the existence of subtree observation but not its specific
        implementation.

        Test: fast/mutation/observe-subtree.html

        * dom/Node.cpp:
        (WebCore::addMatchingObservers): Static helper method for registeredMutationObserversOfType().
        (WebCore::Node::registeredMutationObserversOfType): Walk up the tree looking for observers.
        * dom/NodeRareData.h:
        (WebCore::MutationObserverEntry::hasAllOptions): A stricter, renamed from matches().

2011-10-21  Joshua Bell  <jsbell@chromium.org>

        IndexedDB: objectStore.transaction property should be readonly
        https://bugs.webkit.org/show_bug.cgi?id=62395

        Reviewed by Tony Chang.

        Implement the IDBObjectStore.transaction property defined by the spec.

        Test: storage/indexeddb/readonly-properties.html

        * storage/IDBObjectStore.cpp:
        (WebCore::IDBObjectStore::transaction):
        * storage/IDBObjectStore.h:
        * storage/IDBObjectStore.idl:

2011-10-21  Adam Barth  <abarth@webkit.org>

        Event.h has too many virtual isMumbleEvent() functions
        https://bugs.webkit.org/show_bug.cgi?id=70636

        Reviewed by Dimitri Glazkov.

        We should use the new interfaceName() way of doing run-time type inference.

        * bindings/js/JSErrorHandler.cpp:
        (WebCore::JSErrorHandler::handleEvent):
        * bindings/js/JSEventCustom.cpp:
        (WebCore::JSEvent::clipboardData):
        * bindings/objc/DOMEvents.mm:
        (kitClass):
        * bindings/v8/V8WindowErrorHandler.cpp:
        (WebCore::V8WindowErrorHandler::callListenerFunction):
        * bindings/v8/V8WorkerContextErrorHandler.cpp:
        (WebCore::V8WorkerContextErrorHandler::callListenerFunction):
        * bindings/v8/custom/V8EventCustom.cpp:
        (WebCore::V8Event::clipboardDataAccessorGetter):
        * dom/BeforeLoadEvent.h:
        (WebCore::BeforeLoadEvent::interfaceName):
        * dom/BeforeTextInsertedEvent.h:
        * dom/ClipboardEvent.cpp:
        * dom/ClipboardEvent.h:
        * dom/CompositionEvent.cpp:
        * dom/CompositionEvent.h:
        * dom/ErrorEvent.cpp:
        * dom/ErrorEvent.h:
        * dom/Event.cpp:
        (WebCore::Event::storesResultAsString):
        (WebCore::Event::storeResult):
        (WebCore::Event::clipboardData):
        * dom/Event.h:
        * dom/Event.idl:
            - Remove this interface from the CPP bindings because this function
              no longer exists.  It's unclear to me how strong our API
              commitments are in the CPP bindings.
        * dom/EventDispatcher.cpp:
        (WebCore::EventDispatcher::determineDispatchBehavior):
        * dom/MessageEvent.cpp:
        * dom/MessageEvent.h:
        * dom/MutationEvent.cpp:
        * dom/MutationEvent.h:
        * dom/Node.cpp:
        (WebCore::Node::defaultEventHandler):
        * dom/OverflowEvent.cpp:
        * dom/OverflowEvent.h:
        * dom/PageTransitionEvent.h:
        * dom/ProgressEvent.h:
        * dom/TextEvent.cpp:
        * dom/TextEvent.h:
        * dom/WheelEvent.cpp:
        * dom/WheelEvent.h:
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::defaultEventHandler):
        * html/HTMLTextAreaElement.cpp:
        (WebCore::HTMLTextAreaElement::defaultEventHandler):
        * html/TextFieldInputType.cpp:
        (WebCore::TextFieldInputType::forwardEvent):
        (WebCore::TextFieldInputType::shouldSubmitImplicitly):
        * html/shadow/TextControlInnerElements.cpp:
        (WebCore::TextControlInnerTextElement::defaultEventHandler):
        * svg/SVGZoomEvent.cpp:
        * svg/SVGZoomEvent.h:

2011-10-21  Raymond Toy  <rtoy@google.com>

        Flush denormals in Biquad, ZeroPole, and DynamicsCompressor.

        We only flush when saving the state variables instead of in the
        loops so that we don't impact performance too much when there are
        no denormals.  This will at least not propagate the denormals any
        further within the class.
        
        https://bugs.webkit.org/show_bug.cgi?id=70626

        Reviewed by Kenneth Russell.

        * platform/audio/Biquad.cpp:
        (WebCore::Biquad::process):
        Flush denormals when storing the filter state back in to class
        filter state.  
        * platform/audio/DynamicsCompressorKernel.cpp:
        (WebCore::DynamicsCompressorKernel::process):
        Ditto.
        * platform/audio/ZeroPole.cpp:
        (WebCore::ZeroPole::process):
        Ditto.

2011-10-21  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Advanced search results should be cleared on navigation.
        https://bugs.webkit.org/show_bug.cgi?id=70627

        Reviewed by Pavel Feldman.

        * inspector/front-end/AdvancedSearchController.js:
        (WebInspector.AdvancedSearchController):
        (WebInspector.AdvancedSearchController.prototype._frameNavigated):

2011-10-21  Rafael Weinstein  <rafaelw@chromium.org>

        [MutationObservers] Implement WebKitMutationObserver.observe for childList changes
        https://bugs.webkit.org/show_bug.cgi?id=68955

        Reviewed by Ryosuke Niwa.

        This patch adds a ChildListMutationScope object which manages the coalescing of
        multiple child removals and additions within DOM operations into single childList
        mutation records.

        Note that this patch doesn't cover all the cases which can be coalesced (it only
        covers ContainerNode.*, and Node.innerHTML/innerText). A separate bug,
        https://bugs.webkit.org/show_bug.cgi?id=70385, has been opened to track the
        remaining cases.

        Test: fast/mutation/observe-childList.html

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/ChildListMutationScope.cpp: Added.
        (WebCore::ChildListAccumulation::ChildListAccumulation::ChildListAccumulation):
        (WebCore::ChildListAccumulation::ChildListAccumulation::~ChildListAccumulation):
        (WebCore::ChildListAccumulation::ChildListAccumulation::childAdded):
        (WebCore::ChildListAccumulation::ChildListAccumulation::willRemoveChild):
        (WebCore::ChildListAccumulation::ChildListAccumulation::dispatch):
        (WebCore::ChildListAccumulation::ChildListAccumulation::clear):
        (WebCore::ChildListAccumulation::ChildListAccumulation::isEmpty):
        (WebCore::ChildListAccumulation::ChildListAccumulator::ChildListAccumulator):
        (WebCore::ChildListAccumulation::ChildListAccumulator::~ChildListAccumulator):
        (WebCore::ChildListAccumulation::ChildListAccumulator::initialize):
        (WebCore::ChildListAccumulation::ChildListAccumulator::instance):
        (WebCore::ChildListAccumulation::ChildListAccumulator::childAdded):
        (WebCore::ChildListAccumulation::ChildListAccumulator::willRemoveChild):
        (WebCore::ChildListAccumulation::ChildListAccumulator::incrementScopingLevel):
        (WebCore::ChildListAccumulation::ChildListAccumulator::decrementScopingLevel):
        (WebCore::ChildListMutationScope::ChildListMutationScope):
        (WebCore::ChildListMutationScope::~ChildListMutationScope):
        (WebCore::ChildListMutationScope::childAdded):
        (WebCore::ChildListMutationScope::willRemoveChild):
        * dom/ChildListMutationScope.h: Added.
        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::insertBefore):
        (WebCore::ContainerNode::replaceChild):
        (WebCore::willRemoveChildren):
        (WebCore::dispatchChildInsertionEvents):
        (WebCore::dispatchChildRemovalEvents):
        * dom/Element.cpp:
        (WebCore::enqueueAttributesMutationRecord):
        * dom/Node.cpp:
        (WebCore::Node::setTextContent):
        (WebCore::Node::registeredMutationObserversOfType):
        * dom/WebKitMutationObserver.cpp:
        (WebCore::WebKitMutationObserver::disconnect):
        * html/HTMLElement.cpp:
        (WebCore::replaceChildrenWithFragment):
        (WebCore::replaceChildrenWithText):

2011-10-21  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r98079.
        http://trac.webkit.org/changeset/98079
        https://bugs.webkit.org/show_bug.cgi?id=70624

        The extensions tests enabled are failing on the Chromium Win
        Dbg bot (Requested by jchaffraix on #webkit).

        * inspector/front-end/ExtensionAPI.js:
        (buildExtensionAPIInjectedScript):

2011-10-21  Dan Bernstein  <mitz@apple.com>

        Column rules positioned incorrectly in vertical-rl block with horizontal border or padding
        https://bugs.webkit.org/show_bug.cgi?id=70622

        Reviewed by Beth Dakin.

        Tests: fast/multicol/vertical-lr/rules-with-border-before.html
               fast/multicol/vertical-rl/rules-with-border-before.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::paintColumnRules): Changed to use the physical left border and padding for the
        left edge of the horizontal column rule.

2011-10-21  Simon Fraser  <simon.fraser@apple.com>

        Fix Windows build.

        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::hasAnyAdditionalCompositedLayers):

2011-10-21  Devdatta Deshpande  <pwjd73@motorola.com>

        [Gtk] mousemove event always has metaKey == true
        https://bugs.webkit.org/show_bug.cgi?id=35299

        Reviewed by Martin Robinson.

        GDK_MOD2_MASK doesn't always mean meta so we can't use it to identify
        the meta key state. Use GDK_META_MASK instead.

        Test: platform/gtk/fast/events/event-sender-metakey.html

        * platform/gtk/PlatformMouseEventGtk.cpp:
        (WebCore::PlatformMouseEvent::PlatformMouseEvent):

2011-10-21  Andreas Kling  <kling@webkit.org>

        Style and Link elements' sheet() should return CSSStyleSheet.
        https://bugs.webkit.org/show_bug.cgi?id=70608

        Reviewed by Antti Koivisto.

        Return a CSSStyleSheet* instead of a StyleSheet* in these functions
        since we know they are always CSSStyleSheets.
        Also remove some now-unnecessary isCSSStyleSheet() checks.

        * dom/StyleElement.h:
        (WebCore::StyleElement::sheet):
        * html/HTMLLinkElement.cpp:
        * html/HTMLLinkElement.h:
        (WebCore::HTMLLinkElement::sheet):
        * page/PageSerializer.cpp:
        (WebCore::PageSerializer::serializeFrame):

2011-10-21  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Advanced search is working very slowly and does not show searching progress.
        https://bugs.webkit.org/show_bug.cgi?id=70611

        Search implementation changed so that we do not start searching in the next file unless
        the previous one was already searched. This allows to interrupt search.
        Not all search matches are added on UI by default now, only first 20 for each file.
        Search progress information and search stop button were added to drawer status bar.

        Reviewed by Pavel Feldman.

        * English.lproj/localizedStrings.js:
        * inspector/ContentSearchUtils.cpp:
        (WebCore::ContentSearchUtils::getRegularExpressionMatchesByLines):
        (WebCore::ContentSearchUtils::countRegularExpressionMatches):
        * inspector/front-end/AdvancedSearchController.js:
        (WebInspector.AdvancedSearchController.prototype._onSearchResult):
        (WebInspector.AdvancedSearchController.prototype._onSearchFinished):
        (WebInspector.AdvancedSearchController.prototype.startSearch):
        (WebInspector.AdvancedSearchController.prototype.resetSearch):
        (WebInspector.AdvancedSearchController.prototype.stopSearch):
        (WebInspector.SearchView):
        (WebInspector.SearchView.prototype.get statusBarItems):
        (WebInspector.SearchView.prototype.get counterElement):
        (WebInspector.SearchView.prototype.set resultsPane):
        (WebInspector.SearchView.prototype.searchStarted):
        (WebInspector.SearchView.prototype._updateSearchResultsMessage):
        (WebInspector.SearchView.prototype._updateSearchProgress):
        (WebInspector.SearchView.prototype.resetResults):
        (WebInspector.SearchView.prototype._resetCounters):
        (WebInspector.SearchView.prototype.nothingFound):
        (WebInspector.SearchView.prototype.addSearchResult):
        (WebInspector.SearchView.prototype.searchFinished):
        (WebInspector.SearchView.prototype._searchStopButtonPressed):
        (WebInspector.SearchResultsPane):
        (WebInspector.FileBasedSearchResultsPane):
        (WebInspector.FileBasedSearchResultsPane.prototype.addSearchResult):
        (WebInspector.FileBasedSearchResultsPane.prototype._fileTreeElementExpanded):
        (WebInspector.FileBasedSearchResultsPane.prototype._appendSearchMatches):
        (WebInspector.FileBasedSearchResultsPane.prototype._appendShowMoreMatchesElement):
        (WebInspector.FileBasedSearchResultsPane.prototype._showMoreMatchesElementSelected):
        (WebInspector.FileBasedSearchResultsPane.prototype._addFileTreeElement):
        (WebInspector.FileBasedSearchResultsPane.prototype._regexMatchRanges):
        * inspector/front-end/Drawer.js:
        (WebInspector.Drawer.prototype.hide):
        * inspector/front-end/Images/statusbarButtonGlyphs.png:
        * inspector/front-end/ScriptsSearchScope.js:
        (WebInspector.ScriptsSearchScope):
        (WebInspector.ScriptsSearchScope.prototype.performSearch.filterOutContentScripts):
        (WebInspector.ScriptsSearchScope.prototype.performSearch.continueSearch):
        (WebInspector.ScriptsSearchScope.prototype.performSearch.searchCallbackWrapper):
        (WebInspector.ScriptsSearchScope.prototype.performSearch):
        (WebInspector.ScriptsSearchScope.prototype.stopSearch):
        * inspector/front-end/TimelinePanel.js:
        (WebInspector.TimelinePanel.prototype._registerShortcuts):
        * inspector/front-end/inspector.css:
        (#drawer-status-bar .search-status-bar-item):
        (#drawer-status-bar .search-status-bar-message):
        (#drawer-status-bar .search-status-bar-progress):
        (#drawer-status-bar .search-status-bar-stop-button-item):
        (#drawer-status-bar .search-status-bar-stop-button .glyph):
        (#drawer-status-bar .search-results-status-bar-message):
        (.search-view .search-results):
        (#search-results-pane-file-based .search-results-outline-disclosure):
        (#search-results-pane-file-based .search-result):
        (#search-results-pane-file-based .search-result:hover):
        (#search-results-pane-file-based .show-more-matches):
        (#search-results-pane-file-based .show-more-matches:hover):
        (#search-results-pane-file-based .search-match:hover):
        * inspector/front-end/utilities.js:
        ():

2011-10-20  Zhenyao Mo  <zmo@google.com>

        Implement mechanism to enable privileged webgl extensions
        https://bugs.webkit.org/show_bug.cgi?id=70538

        Reviewed by Darin Fisher.

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::allowPrivilegedExtensions): check page/Settings flag.
        * page/Settings.cpp: Add the flag.
        (WebCore::Settings::Settings):
        (WebCore::Settings::setPrivilegedWebGLExtensionsEnabled):
        * page/Settings.h: Ditto.
        (WebCore::Settings::privilegedWebGLExtensionsEnabled):

2011-10-20  Pavel Podivilov  <podivilov@chromium.org>

        Web Inspector: first line in file is not highlighted.
        https://bugs.webkit.org/show_bug.cgi?id=70504

        Reviewed by Pavel Feldman.

        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame.prototype._initializeTextViewer):

2011-10-21  Andreas Kling  <kling@webkit.org>

        Simplify CSSStyleRule::setSelectorText().
        https://bugs.webkit.org/show_bug.cgi?id=70607

        Reviewed by Antti Koivisto.

        Remove unnecessary isCSSStyleSheet() check and redundant Document finding
        logic (CSSStyleSheet::document() will return the owner node's Document just
        like this code would.)

        * css/CSSStyleRule.cpp:
        (WebCore::CSSStyleRule::setSelectorText):

2011-10-21  Alejandro G. Castro  <alex@igalia.com>

        [cairo] Forward declaration of GraphicsContextState uses class instead of struct
        https://bugs.webkit.org/show_bug.cgi?id=70522

        The type is a struct not a class, replace the definition in the
        forward declaration.

        Reviewed by Martin Robinson.

        * platform/graphics/cairo/PlatformContextCairo.h:

2011-10-20  Andrey Kosyakov  <caseq@chromium.org>

        Web Inspector: make extension tests pass on chromium
        https://bugs.webkit.org/show_bug.cgi?id=70334

        Reviewed by Pavel Feldman.

        * inspector/front-end/ExtensionAPI.js:
        (buildExtensionAPIInjectedScript):

2011-10-20  Peter Rybin  <peter.rybin@gmail.com>

        Web Inspector: reimplement protocol backend/frontend source generator
        https://bugs.webkit.org/show_bug.cgi?id=69295

        Reviewed by Pavel Feldman.

        Old 2-stage python+perf generator that uses intermediate IDL output is
        being replaced with a solid python script. This is for simplicity and
        as a base for the future JSON validator.

        * CMakeLists.txt:
        * CodeGenerators.pri:
        * DerivedSources.make:
        * GNUmakefile.am:
        * WebCore.gyp/WebCore.gyp:
        * inspector/CodeGeneratorInspector.pm: Removed.
        * inspector/CodeGeneratorInspector.py: Added.
        * inspector/Inspector.json:
        * inspector/generate-inspector-idl: Removed.

2011-10-20  Adam Barth  <abarth@webkit.org>

        Attemp to fix a bunch of tests PLATFORM(MAC).  We can't use a static
        map because that's shared between threads (and events exist in worker
        threads).  It migh be better to add a thread-specific map, but we can
        do that in another patch.

        * bindings/js/JSEventCustom.cpp:
        (WebCore::toJS):
        * bindings/v8/custom/V8EventCustom.cpp:
        (WebCore::toV8):

2011-10-20  Simon Fraser  <simon.fraser@apple.com>

        Hidden composited iframes cause infinite loop
        https://bugs.webkit.org/show_bug.cgi?id=52655

        Reviewed by Darin Adler.
        
        visibility:hidden is problematic for compositing, because it causes
        RenderLayers to be removed from the z-order layer tree. This confuses
        RenderLayerCompositor in several ways; it never sees these layers
        when traversing the tree as it computes compositing requirements, or
        rebuilds the layer tree.
        
        This is a particular problem with composited iframes. When an iframe
        becomes composited, scheduleSetNeedsStyleRecalc() is called on that
        iframe's ownerElement in the parent document. If this happens inside
        Document::updateStyleForAllDocuments(), we get into an infinite loop
        because notifyIFramesOfCompositingChange() queues up style update as we
        bounce in and out of compositing mode, so documentsThatNeedStyleRecalc
        never empties out.
        
        This is an initial, conservative fix that doesn't attempt to fix all
        the issues with visibility. It changes RenderLayerCompositor to count
        the number of compositing RenderLayers, and to not leave compositing
        mode if there are any (even if they are hidden, so not hit while
        traversing the z-order tree). This avoids the infinite loop.

        Test: compositing/visibility/hidden-iframe.html

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::ensureBacking):
        (WebCore::RenderLayer::clearBacking):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::RenderLayerCompositor):
        (WebCore::RenderLayerCompositor::hasAnyAdditionalCompositedLayers):
        (WebCore::RenderLayerCompositor::updateCompositingLayers):
        (WebCore::RenderLayerCompositor::computeCompositingRequirements):
        * rendering/RenderLayerCompositor.h:
        (WebCore::RenderLayerCompositor::layerBecameComposited):
        (WebCore::RenderLayerCompositor::layerBecameNonComposited):

2011-10-20  Antoine Labour  <piman@chromium.org>

        Make WebCore depend on translator_glsl instead of translator_common
        https://bugs.webkit.org/show_bug.cgi?id=70548

        Reviewed by Kenneth Russell.

        This is a build-only fix. Tested by checking WebKit still compiles and
        link.

        * WebCore.gyp/WebCore.gyp:

2011-10-20  Dana Jansens  <danakj@chromium.org>

        [Chromium] Fix opaque flag default and for ImageLayerChromium
        https://bugs.webkit.org/show_bug.cgi?id=70554

        Reviewed by James Robinson.

        Covered by layout tests.

        * platform/graphics/chromium/ImageLayerChromium.cpp:
        (WebCore::ImageLayerChromium::setContents): Set opaque flag based on if the image claims to have alpha.
        * platform/graphics/chromium/LayerChromium.cpp:
        (WebCore::LayerChromium::LayerChromium): Match the default opaque value in GraphicsLayerChromium.

2011-10-20  Yosifumi Inoue  <yosin@chromium.org>

        [Forms][File] Add tooltip to "No file selected" text
        https://bugs.webkit.org/show_bug.cgi?id=70474

        Reviewed by Kent Tamura.

        No new tests. Existing tests cover all changes.

        This patch provides tooltip for text portion of upload file control
        tell users to know actual text of truncated text of file name and
        "No file selected" text. Tooltip is always displayed even if user
        select only one file for truncated displayed file name.

        * html/FileInputType.cpp:
        (WebCore::FileInputType::defaultToolTip): Implement default tooltip logic.
        * html/FileInputType.h: declaration of new method defaultToolTip.
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::defaultToolTip): Impelement new method defaultToolTip.
        * html/HTMLInputElement.h: declaration of new method defaultToolTip.
        * html/InputType.cpp:
        (WebCore::InputType::defaultToolTip): Implement default method of defaultToolTip method.
        * html/InputType.h: declaration of new method defaultToolTip.
        * page/Chrome.cpp:
        (WebCore::Chrome::setToolTip): Use new method HTMLInputElement::defaultToolTip and move default tooltip logic to FileInputType::defaultToolTip method.

2011-10-20  Darin Adler  <darin@apple.com>

        Remove OptionElement (first half)
        https://bugs.webkit.org/show_bug.cgi?id=70276

        Reviewed by Kent Tamura.

        Refactoring that does not require new tests.

        * css/SelectorChecker.cpp:
        (WebCore::SelectorChecker::checkOneSelector): Use hasTagName
        and toHTMLOptionElement instead of toOptionElement.

        * dom/OptionElement.cpp: Deleted contents. Remove file later.
        * dom/OptionElement.h: Ditto.

        * html/HTMLOptionElement.cpp:
        (WebCore::HTMLOptionElement::HTMLOptionElement): Initialize m_isSelected.
        (WebCore::HTMLOptionElement::createForJSConstructor): Initialize the
        selected attribute rather than calling setDefaultSelected.
        (WebCore::HTMLOptionElement::text): Moved the code here from
        OptionElement::collectOptionLabelOrText.
        (WebCore::HTMLOptionElement::index): Moved the code here from
        OptionElement::optionIndex.
        (WebCore::HTMLOptionElement::parseMappedAttribute): Removed unneeded
        code to call setValue and setLabel. Changed the code that called
        setSelected to instead set m_isSelected and added a FIXME about why
        that's probably wrong, but same behavior as before.
        (WebCore::HTMLOptionElement::value): Moved the code here from
        OptionElement::collectOptionValue. Added a FIXME about incorrect
        whitespace stripping.
        (WebCore::HTMLOptionElement::selected): Use m_isSelected.
        (WebCore::HTMLOptionElement::setSelected): Use m_isSelected and
        call setSelectedState instead of OptionElement::setSelectedState.
        (WebCore::HTMLOptionElement::setSelectedState): Moved the code
        here from OptionElement::setSelectedState.
        (WebCore::HTMLOptionElement::label): Streamlined the code.
        (WebCore::HTMLOptionElement::textIndentedToRespectGroupLabel):
        Moved the code here from OptionElement::collectOptionTextRespectingGroupLabel.
        (WebCore::HTMLOptionElement::insertedIntoTree): Use m_isSelected
        and rewrote comment for clarity.
        (WebCore::HTMLOptionElement::collectOptionInnerText): Moved this
        here from OptionElement, and changed to use StringBuilder.
        (WebCore::toHTMLOptionElement): Added.

        * html/HTMLOptionElement.h: Removed OptionElement.h include.
        Removed OptionElement base class. Removed unneeded friend declarations.
        Made value and selected functions non-virtual. Removed unneeded
        defaultSelected and setDefaultSelected functions. Made the
        textIndentedToRespectGroupLabel and setSelectedState functions
        be non-virtual and public. Added a collectOptionInnerText function.
        Replaced m_data with m_value, m_label, and m_selected.

        * html/HTMLSelectElement.cpp:
        (WebCore::toOptionElement): Added. Helper to keep existing code
        close to the same.
        (WebCore::HTMLSelectElement::nextValidIndex): Use hasTagName
        instead of isOptionElement.
        (WebCore::HTMLSelectElement::saveLastSelection): Use HTMLOptionElement
        type instead of OptionElement.
        (WebCore::HTMLSelectElement::setActiveSelectionAnchorIndex): Ditto.
        (WebCore::HTMLSelectElement::updateListBoxSelection): Ditto.
        (WebCore::HTMLSelectElement::listBoxOnChange): Ditto.
        (WebCore::HTMLSelectElement::recalcListItems): Ditto.
        (WebCore::HTMLSelectElement::selectedIndex): Ditto.
        (WebCore::HTMLSelectElement::setSelectedIndex): Ditto.
        (WebCore::HTMLSelectElement::optionToListIndex): Ditto.
        (WebCore::HTMLSelectElement::listToOptionIndex): Ditto.
        (WebCore::HTMLSelectElement::deselectItemsWithoutValidation): Ditto.
        (WebCore::HTMLSelectElement::saveFormControlState): Ditto.
        (WebCore::HTMLSelectElement::restoreFormControlState): Ditto.
        (WebCore::HTMLSelectElement::appendFormData): Ditto.
        (WebCore::HTMLSelectElement::reset): Ditto.
        (WebCore::HTMLSelectElement::updateSelectedState): Ditto.
        (WebCore::HTMLSelectElement::lastSelectedListIndex): Ditto.
        (WebCore::HTMLSelectElement::typeAheadFind): Ditto.
        (WebCore::HTMLSelectElement::accessKeySetSelectedIndex): Ditto.
        (WebCore::HTMLSelectElement::length): Ditto.

        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::updateFromElement): Use HTMLOptionElement,
        hasTagName, and toHTMLOptionElement.
        (WebCore::RenderListBox::addFocusRingRects): Ditto.
        (WebCore::RenderListBox::paintItemForeground): Ditto.
        (WebCore::RenderListBox::paintItemBackground): Ditto.
        * rendering/RenderMenuList.cpp:
        (WebCore::RenderMenuList::updateOptionsWidth): Ditto.
        (WebCore::RenderMenuList::setTextFromOption): Ditto.
        (WebCore::RenderMenuList::itemText): Ditto.
        (WebCore::RenderMenuList::itemIsSelected): Ditto.

2011-10-20  Adam Barth  <abarth@webkit.org>

        Attempt to fix crash for infinite recursion.

        * bindings/v8/custom/V8EventCustom.cpp:
        (WebCore::toV8):

2011-10-20  Dirk Pranke  <dpranke@chromium.org>

        Still lots of crashes in the chromium debug bots.

        Unreviewed, rolling out r97982.
        http://trac.webkit.org/changeset/97982
        https://bugs.webkit.org/show_bug.cgi?id=70328

        crashing in asserts in chromium debug builds

        * dom/DeviceMotionController.cpp:
        (WebCore::DeviceMotionController::timerFired):
        (WebCore::DeviceMotionController::addListener):
        (WebCore::DeviceMotionController::removeListener):
        (WebCore::DeviceMotionController::removeAllListeners):
        * dom/DeviceMotionController.h:
        * dom/DeviceOrientationController.cpp:
        * dom/DeviceOrientationController.h:
        * dom/Document.cpp:
        * dom/Document.h:
        * dom/ScriptExecutionContext.h:
        * page/GeolocationController.cpp:
        * page/GeolocationController.h:

2011-10-20  Adam Barth  <abarth@webkit.org>

        Attempt to fix the GTK build.

        * GNUmakefile.am:

2011-10-20  Adam Barth  <abarth@webkit.org>

        CloseEvent.idl isn't conditional on WebSockets.

        * dom/EventFactory.in:

2011-10-20  Adam Barth  <abarth@webkit.org>

        Event.h shouldn't need to know about every ifdef and feature that uses events
        https://bugs.webkit.org/show_bug.cgi?id=70483

        Reviewed by Eric Seidel.

        This patch expands make_event_factory.pl to create a
        DOM_EVENT_INTERFACES_FOR_EACH macro that we can use to generate code
        for each Event interface.  We then apply that macro to removing a large
        number of virtual functions on Event.  Instead of having a Boolean
        virtual function for each subclass of Event, we have a single virtual
        interfaceName function, which returns an AtomicString.  We then use the
        AtomicString to jump through a HashMap to find the appropriate
        JavaScript wrapper type.

        This patch does not remove all of the Boolean virtual functions because
        I got exhausted making all of these edits, but I did remove all the
        ones that involve ifdefs.  A future patch will remove more.

        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSEventCustom.cpp:
        (WebCore::toJS):
        * bindings/v8/custom/V8EventCustom.cpp:
        (WebCore::toV8):
        * dom/BeforeLoadEvent.h:
        (WebCore::BeforeLoadEvent::interfaceName):
        (WebCore::BeforeLoadEvent::isBeforeLoadEvent):
        * dom/BeforeTextInsertedEvent.cpp:
        (WebCore::BeforeTextInsertedEvent::interfaceName):
        * dom/BeforeTextInsertedEvent.h:
        * dom/ClipboardEvent.cpp:
        (WebCore::ClipboardEvent::interfaceName):
        * dom/ClipboardEvent.h:
        * dom/CompositionEvent.cpp:
        (WebCore::CompositionEvent::interfaceName):
        * dom/CompositionEvent.h:
        * dom/CustomEvent.cpp:
        (WebCore::CustomEvent::interfaceName):
        * dom/CustomEvent.h:
        * dom/DeviceMotionEvent.cpp:
        (WebCore::DeviceMotionEvent::interfaceName):
        * dom/DeviceMotionEvent.h:
        * dom/DeviceOrientationEvent.cpp:
        (WebCore::DeviceOrientationEvent::interfaceName):
        * dom/DeviceOrientationEvent.h:
        * dom/ErrorEvent.cpp:
        (WebCore::ErrorEvent::interfaceName):
        * dom/ErrorEvent.h:
        * dom/Event.cpp:
        (WebCore::Event::interfaceName):
        * dom/Event.h:
        * dom/EventNames.cpp:
        (WebCore::EventNames::EventNames):
        * dom/EventNames.h:
        * dom/HashChangeEvent.h:
        (WebCore::HashChangeEvent::interfaceName):
        * dom/KeyboardEvent.cpp:
        (WebCore::KeyboardEvent::interfaceName):
        * dom/KeyboardEvent.h:
        * dom/MessageEvent.cpp:
        (WebCore::MessageEvent::interfaceName):
        * dom/MessageEvent.h:
        * dom/MouseEvent.cpp:
        (WebCore::MouseEvent::interfaceName):
        * dom/MouseEvent.h:
        * dom/MutationEvent.cpp:
        (WebCore::MutationEvent::interfaceName):
        * dom/MutationEvent.h:
        * dom/OverflowEvent.cpp:
        (WebCore::OverflowEvent::interfaceName):
        * dom/OverflowEvent.h:
        * dom/PageTransitionEvent.cpp:
        (WebCore::PageTransitionEvent::interfaceName):
        * dom/PageTransitionEvent.h:
        * dom/PopStateEvent.cpp:
        (WebCore::PopStateEvent::interfaceName):
        * dom/PopStateEvent.h:
        * dom/ProgressEvent.cpp:
        (WebCore::ProgressEvent::interfaceName):
        * dom/ProgressEvent.h:
        * dom/TextEvent.cpp:
        (WebCore::TextEvent::interfaceName):
        * dom/TextEvent.h:
        * dom/TouchEvent.cpp:
        (WebCore::TouchEvent::interfaceName):
        * dom/TouchEvent.h:
        * dom/UIEvent.h:
        * dom/WebKitAnimationEvent.cpp:
        (WebCore::WebKitAnimationEvent::interfaceName):
        * dom/WebKitAnimationEvent.h:
        * dom/WebKitTransitionEvent.cpp:
        (WebCore::WebKitTransitionEvent::interfaceName):
        * dom/WebKitTransitionEvent.h:
        * dom/WheelEvent.cpp:
        (WebCore::WheelEvent::interfaceName):
        * dom/WheelEvent.h:
        * dom/make_event_factory.pl:
        (printFactoryFile):
        (printMacroFile):
        (printHeadersFile):
        * html/canvas/WebGLContextEvent.cpp:
        (WebCore::WebGLContextEvent::interfaceName):
        * html/canvas/WebGLContextEvent.h:
        * inspector/InspectorDOMStorageResource.cpp:
        (WebCore::InspectorDOMStorageResource::handleEvent):
        * p2p/MediaStreamEvent.cpp:
        (WebCore::MediaStreamEvent::interfaceName):
        * p2p/MediaStreamEvent.h:
        * page/SpeechInputEvent.cpp:
        (WebCore::SpeechInputEvent::interfaceName):
        * page/SpeechInputEvent.h:
        * storage/IDBVersionChangeEvent.cpp:
        (WebCore::IDBVersionChangeEvent::interfaceName):
        * storage/IDBVersionChangeEvent.h:
        * storage/StorageEvent.cpp:
        (WebCore::StorageEvent::interfaceName):
        * storage/StorageEvent.h:
        * svg/SVGZoomEvent.cpp:
        (WebCore::SVGZoomEvent::interfaceName):
        * svg/SVGZoomEvent.h:
        * webaudio/AudioProcessingEvent.cpp:
        (WebCore::AudioProcessingEvent::interfaceName):
        * webaudio/AudioProcessingEvent.h:
        * webaudio/OfflineAudioCompletionEvent.cpp:
        (WebCore::OfflineAudioCompletionEvent::interfaceName):
        * webaudio/OfflineAudioCompletionEvent.h:
        * websockets/CloseEvent.h:
        (WebCore::CloseEvent::interfaceName):
        * xml/XMLHttpRequestProgressEvent.h:
        (WebCore::XMLHttpRequestProgressEvent::interfaceName):

2011-10-20  Nat Duca  <nduca@chromium.org>

        [chromium] Route onSwapBuffersComplete from LayerRenderer to CCScheduler.

        Reviewed by James Robinson.

        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererSwapBuffersCompleteCallbackAdapter::create):
        (WebCore::LayerRendererSwapBuffersCompleteCallbackAdapter::~LayerRendererSwapBuffersCompleteCallbackAdapter):
        (WebCore::LayerRendererSwapBuffersCompleteCallbackAdapter::onSwapBuffersComplete):
        (WebCore::LayerRendererSwapBuffersCompleteCallbackAdapter::LayerRendererSwapBuffersCompleteCallbackAdapter):
        (WebCore::LayerRendererChromium::initialize):
        (WebCore::LayerRendererChromium::~LayerRendererChromium):
        (WebCore::LayerRendererChromium::swapBuffers):
        (WebCore::LayerRendererChromium::onSwapBuffersComplete):
        * platform/graphics/chromium/LayerRendererChromium.h:
        * platform/graphics/chromium/cc/CCHeadsUpDisplay.cpp:
        (WebCore::CCHeadsUpDisplay::onSwapBuffers):
        * platform/graphics/chromium/cc/CCHeadsUpDisplay.h:
        * platform/graphics/chromium/cc/CCLayerTreeHost.h:
        (WebCore::LayerRendererCapabilities::LayerRendererCapabilities):
        * platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:
        (WebCore::CCLayerTreeHostImpl::swapBuffers):
        (WebCore::CCLayerTreeHostImpl::onSwapBuffersComplete):
        * platform/graphics/chromium/cc/CCLayerTreeHostImpl.h:
        * platform/graphics/chromium/cc/CCScheduler.cpp:
        (WebCore::CCScheduler::requestRedraw):
        (WebCore::CCScheduler::didDrawAndSwap):
        (WebCore::CCScheduler::didSwapBuffersComplete):
        (WebCore::CCScheduler::didSwapBuffersAbort):
        * platform/graphics/chromium/cc/CCScheduler.h:
        * platform/graphics/chromium/cc/CCSingleThreadProxy.cpp:
        (WebCore::CCSingleThreadProxy::compositeImmediately):
        * platform/graphics/chromium/cc/CCSingleThreadProxy.h:
        (WebCore::CCSingleThreadProxy::onSwapBuffersCompleteOnImplThread):
        * platform/graphics/chromium/cc/CCThreadProxy.cpp:
        (WebCore::CCThreadProxySchedulerClient::scheduleDrawAndSwap):
        (WebCore::CCThreadProxy::drawLayersAndReadbackOnImplThread):
        (WebCore::CCThreadProxy::onSwapBuffersCompleteOnImplThread):
        (WebCore::CCThreadProxy::finishAllRenderingOnImplThread):
        (WebCore::CCThreadProxy::drawLayersAndSwapOnImplThread):
        (WebCore::CCThreadProxy::drawLayersOnImplThread):
        * platform/graphics/chromium/cc/CCThreadProxy.h:

2011-10-20  Julien Chaffraix  <jchaffraix@webkit.org>

        RenderDeprecatedFlexibleBox does not call its children's layout method
        https://bugs.webkit.org/show_bug.cgi?id=64842

        Reviewed by David Hyatt.

        Tests: fast/flexbox/021-vertical.html
               fast/flexbox/crash-flexbox-no-layout-child.html

        The FlexBoxIterator would skip any child with visibility: collapsed. However those child
        would need layout but their layout() function would never be called.

        This change refactors the way flexible box handles visibility: collapsed child and mark sure
        their layout() function is called but makes sure that they don't participate in the flex box
        dimensions.

        * rendering/RenderDeprecatedFlexibleBox.cpp:
        (WebCore::FlexBoxIterator::next): Do not skip visibility: collapsed child.
        (WebCore::childDoesNotAffectWidthOrFlexing): Helper function.

        (WebCore::RenderDeprecatedFlexibleBox::calcHorizontalPrefWidths):
        (WebCore::RenderDeprecatedFlexibleBox::calcVerticalPrefWidths):
        (WebCore::gatherFlexChildrenInfo):
        (WebCore::RenderDeprecatedFlexibleBox::layoutHorizontalBox):
        (WebCore::RenderDeprecatedFlexibleBox::layoutVerticalBox):
        (WebCore::RenderDeprecatedFlexibleBox::applyLineClamp):
        (WebCore::RenderDeprecatedFlexibleBox::allowedChildFlex):
        Updated to skip the now seen visibility: collapsed child during the
        iteration.

2011-10-20  Raymond Toy  <rtoy@google.com>

        Implement SSE denormal disabler for windows.

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

        Reviewed by Kenneth Russell.

        * platform/audio/DenormalDisabler.h:
        (WebCore::DenormalDisabler::DenormalDisabler):
        Add implementation for Windows.
        (WebCore::DenormalDisabler::~DenormalDisabler):
        Ditto.
        (WebCore::DenormalDisabler::flushDenormalFloatToZero):
        Unify Windows with mac/linux.
        (WebCore::DenormalDisabler::getCSR):
        Define only if we're not on Windows.
        (WebCore::DenormalDisabler::setCSR):
        Ditto.

2011-10-20  Alexey Proskuryakov  <ap@apple.com>

        REGRESSION (r96823): Contextual menu closes immediately when control-clicking in Flash plug-in
        https://bugs.webkit.org/show_bug.cgi?id=70534
        <rdar://problem/10308827>

        Reviewed by Darin Adler.

        * plugins/PluginView.cpp: (WebCore::PluginView::handleEvent): Return true for contextmenu
        event, so that plug-ins won't get a default WebKit context menu. We can't know if the
        plug-in is handling mousedown (or even mouseup) by displaying a menu.

2011-10-17  Nat Duca  <nduca@chromium.org>

        [chromium] Allow CCLayerTreeHostImpl to call back to proxy via CCLayerTreeHostImplClient
        https://bugs.webkit.org/show_bug.cgi?id=70291

        Reviewed by James Robinson.

        * platform/graphics/chromium/cc/CCLayerTreeHost.cpp:
        (WebCore::CCLayerTreeHost::createLayerTreeHostImpl):
        * platform/graphics/chromium/cc/CCLayerTreeHost.h:
        * platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:
        (WebCore::CCLayerTreeHostImpl::create):
        (WebCore::CCLayerTreeHostImpl::CCLayerTreeHostImpl):
        (WebCore::CCLayerTreeHostImpl::scrollRootLayer):
        * platform/graphics/chromium/cc/CCLayerTreeHostImpl.h:
        * platform/graphics/chromium/cc/CCScrollController.h:
        * platform/graphics/chromium/cc/CCSingleThreadProxy.cpp:
        (WebCore::CCSingleThreadProxy::start):
        * platform/graphics/chromium/cc/CCSingleThreadProxy.h:
        (WebCore::CCSingleThreadProxy::setNeedsRedrawOnImplThread):
        (WebCore::CCSingleThreadProxy::setNeedsCommitOnImplThread):
        * platform/graphics/chromium/cc/CCThreadProxy.cpp:
        (WebCore::CCThreadProxy::scrollRootLayerOnImplThread):
        (WebCore::CCThreadProxy::initializeImplOnCCThread):
        (WebCore::CCThreadProxy::initializeLayerRendererOnCCThread):
        (WebCore::CCThreadProxy::layerTreeHostClosedOnCCThread):
        * platform/graphics/chromium/cc/CCThreadProxy.h:
        (WebCore::CCThreadProxy::setNeedsRedrawOnImplThread):
        (WebCore::CCThreadProxy::setNeedsCommitOnImplThread):

2011-10-20  Tony Chang  <tony@chromium.org>

        fix repaint bugs in new flexbox
        https://bugs.webkit.org/show_bug.cgi?id=70450

        Reviewed by David Hyatt.

        Test: css3/flexbox/repaint.html
              css3/flexbox/repaint-rtl-column.html

        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::layoutBlock): Use LayoutRepainter and LayoutStateMaintainer
            to repaint the flexbox.
        (WebCore::RenderFlexibleBox::layoutAndPlaceChildrenInlineDirection):
        (WebCore::RenderFlexibleBox::adjustLocationLogicalTopForChild): Use repaintDuringLayoutIfMoved
            when changing the alignment of a child to handle the child moving.

2011-10-20  Dan Bernstein  <mitz@apple.com>

        Flipped-blocks writing mode blocks do not hit test their overflow
        https://bugs.webkit.org/show_bug.cgi?id=70546

        Reviewed by Sam Weinig.

        Test: fast/writing-mode/flipped-blocks-hit-test-overflow.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::nodeAtPoint): Flip the overflow rect if necessary.

2011-10-20  David Hyatt  <hyatt@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=70539
        
        Make the 'clip' property work in variable width regions.

        Reviewed by Dan Bernstein.

        Added new test in fast/regions.

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::clipRect):
        * rendering/RenderBox.h:
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::calculateClipRects):
        (WebCore::RenderLayer::calculateRects):
        (WebCore::RenderLayer::repaintBlockSelectionGaps):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::clipBox):

2011-10-20  Simon Fraser  <simon.fraser@apple.com>

        Fix build breakage on some platforms after r98008.

        * page/FrameTree.cpp:

2011-10-20  Vincent Scheib  <scheib@chromium.org>

        MouseLock compile and run time flags.
        https://bugs.webkit.org/show_bug.cgi?id=70530

        Reviewed by Darin Fisher.

        No new tests.

        * bindings/generic/RuntimeEnabledFeatures.cpp:
        * bindings/generic/RuntimeEnabledFeatures.h:
        (WebCore::RuntimeEnabledFeatures::webkitMouseLockAPIEnabled):
        (WebCore::RuntimeEnabledFeatures::setWebkitMouseLockAPIEnabled):
        (WebCore::RuntimeEnabledFeatures::webkitLockMouseEnabled):
        (WebCore::RuntimeEnabledFeatures::webkitUnlockMouseEnabled):
        (WebCore::RuntimeEnabledFeatures::webkitMouseLockedEnabled):
        * page/Settings.cpp:
        (WebCore::Settings::Settings):
        * page/Settings.h:
        (WebCore::Settings::setMouseLockEnabled):
        (WebCore::Settings::mouseLockEnabled):

2011-10-20  Tony Chang  <tony@chromium.org>

        Fix a compiler warning in MediaStreamTrack.cpp:
        ../../third_party/WebKit/Source/WebCore/dom/MediaStreamTrack.cpp: In member function 'WTF::String WebCore::MediaStreamTrack::kind() const':
        ../../third_party/WebKit/Source/WebCore/dom/MediaStreamTrack.cpp:61:1: error: control reaches end of non-void function [-Werror=return-type]

        Unreviewed build fix.

        * dom/MediaStreamTrack.cpp:
        (WebCore::MediaStreamTrack::kind):

2011-10-20  Gustavo Noronha Silva  <gns@gnome.org>

        One more GTK+ build fix. Remove CueLoader files from the build.

        * GNUmakefile.list.am:

2011-10-20  Ken Buchanan <kenrb@chromium.org>

        Crash in updateFirstLetter on :after generated content
        https://bugs.webkit.org/show_bug.cgi?id=70031

        Reviewed by David Hyatt.

        Preventing findBeforeAfterParent() from returning a first-letter block and overwriting its style.
        Instead, it returns the block's parent.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::updateFirstLetter):
        * rendering/RenderObjectChildList.cpp:
        (WebCore::findBeforeAfterParent)
        (WebCore::RenderObjectChildList::updateBeforeAfterContent): First-letter siblings now already have style applied, so this clause is redundant

2011-10-20  Simon Fraser  <simon.fraser@apple.com>

        Add a way to print the Frame tree from the debugger.

        Reviewed by Sam Weinig.
        
        Add a showFrameTree(frame) method, callable from gdb,
        which dumps the Frame tree, including the frame's view,
        document, owner element and URI.

        * page/FrameTree.cpp:
        (printIndent):
        (printFrames):
        (showFrameTree):
        * page/FrameTree.h:
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateClipRects):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::requiresCompositingForFrame):

2011-10-20  Andreas Kling  <kling@webkit.org>

        Remove StyleBase::cssText().
        https://bugs.webkit.org/show_bug.cgi?id=70521

        Reviewed by Antti Koivisto.

        * css/StyleBase.cpp:
        * css/StyleBase.h:

2011-10-20  Eugene Nalimov  <enal@chromium.org>

        Playing HTMLAudioElement can be garbage collected
        https://bugs.webkit.org/show_bug.cgi?id=66878

        Reviewed by Adam Barth.

        Make HTMLAudioElement an 'active' one, meaning that it cannot be
        garbage collected if it has panding activity. Had to make
        HTMLMediaElement::hasPendingActivity() and
        HTMLAudioElement::hasPendingActivity() public, otherwise automatically
        generated code would not compile. 

        Test: no test, as automatic test is blocked by
        https://bugs.webkit.org/show_bug.cgi?id=70421
        You don't want to sit down and listen if audio stream played completely,
        and cannot rely on 'ended' event because events are lost when events
        listener is collected. 

        * html/HTMLAudioElement.idl:
        * html/HTMLAudioElement.h:
        (WebCore::HTMLAudioElement::hasPendingActivity):
        * html/HTMLMediaElement.h:

2011-10-20  Mark Hahnenberg  <mhahnenberg@apple.com>

        Rename static deleteProperty to deletePropertyByIndex
        https://bugs.webkit.org/show_bug.cgi?id=70257

        Reviewed by Geoffrey Garen.

        No new tests.

        Renaming versions of deleteProperty that use an unsigned as the property
        name to "deletePropertyByIndex" in preparation for adding them to the 
        MethodTable, which requires unique names for each method.

        * bridge/runtime_array.cpp:
        (JSC::RuntimeArray::deletePropertyVirtual):
        (JSC::RuntimeArray::deletePropertyByIndex):
        * bridge/runtime_array.h:

2011-10-20  Eric Carlson  <eric.carlson@apple.com>

        Rename some Cue classes to TextTrack
        https://bugs.webkit.org/show_bug.cgi?id=70346

        Rename CueLoader -> TextTrackLoader, CachedCues -> CachedTextTrack, and CueIndex -> TextTrackIndex.

        Reviewed by Darin Adler.

        No new tests, renames only.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.xcodeproj/project.pbxproj:
        * html/CueIndex.cpp: Removed.
        * html/CueIndex.h: Removed.
        * html/LoadableTextTrack.cpp:
        (WebCore::LoadableTextTrack::load):
        (WebCore::LoadableTextTrack::newCuesAvailable):
        (WebCore::LoadableTextTrack::cueLoadingStarted):
        (WebCore::LoadableTextTrack::cueLoadingCompleted):
        * html/LoadableTextTrack.h:
        (WebCore::LoadableTextTrack::shouldLoadCues):
        * html/MutableTextTrack.h:
        * html/TextTrackIndex.cpp: Copied from Source/WebCore/html/CueIndex.cpp.
        (WebCore::TextTrackCueSet::difference):
        (WebCore::TextTrackCueSet::unionSet):
        (WebCore::TextTrackCueSet::add):
        (WebCore::TextTrackCueSet::contains):
        (WebCore::TextTrackCueSet::remove):
        (WebCore::TextTrackCueSet::isEmpty):
        (WebCore::TextTrackCueSet::size):
        (WebCore::TextTrackIndex::fetchNewCuesFromLoader):
        (WebCore::TextTrackIndex::removeCuesFromIndex):
        (WebCore::TextTrackIndex::visibleCuesAtTime):
        (WebCore::TextTrackIndex::add):
        (WebCore::TextTrackIndex::remove):
        * html/TextTrackIndex.h: Copied from Source/WebCore/html/CueIndex.h.
        (WebCore::TextTrackCueSet::TextTrackCueSet):
        (WebCore::TextTrackCueSet::~TextTrackCueSet):
        * loader/CueLoader.cpp: Removed.
        * loader/CueLoader.h: Removed.
        * loader/TextTrackLoader.cpp: Copied from Source/WebCore/loader/CueLoader.cpp.
        (WebCore::TextTrackLoader::TextTrackLoader):
        (WebCore::TextTrackLoader::~TextTrackLoader):
        (WebCore::TextTrackLoader::cueLoadTimerFired):
        (WebCore::TextTrackLoader::processNewCueData):
        (WebCore::TextTrackLoader::didReceiveData):
        (WebCore::TextTrackLoader::notifyFinished):
        (WebCore::TextTrackLoader::load):
        (WebCore::TextTrackLoader::newCuesParsed):
        (WebCore::TextTrackLoader::getNewCues):
        * loader/TextTrackLoader.h: Copied from Source/WebCore/loader/CueLoader.h.
        (WebCore::TextTrackLoaderClient::~TextTrackLoaderClient):
        (WebCore::TextTrackLoader::create):
        * loader/cache/CachedCues.cpp: Removed.
        * loader/cache/CachedCues.h: Removed.
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::createResource):
        (WebCore::CachedResourceLoader::requestCues):
        * loader/cache/CachedResourceLoader.h:
        * loader/cache/CachedTextTrack.cpp: Copied from Source/WebCore/loader/cache/CachedCues.cpp.
        (WebCore::CachedTextTrack::CachedTextTrack):
        (WebCore::CachedTextTrack::~CachedTextTrack):
        (WebCore::CachedTextTrack::data):
        * loader/cache/CachedTextTrack.h: Copied from Source/WebCore/loader/cache/CachedCues.h.

2011-10-20  Joseph Pecoraro  <joepeck@webkit.org>

        Remove Now Unused FileChooserSettings.deprecatedAcceptTypes
        https://bugs.webkit.org/show_bug.cgi?id=70473

        Reviewed by Dan Bernstein.

        * html/FileInputType.cpp:
        (WebCore::FileInputType::handleDOMActivateEvent):
        (WebCore::FileInputType::receiveDropForDirectoryUpload):
        * platform/FileChooser.h:

2011-10-20  Andreas Kling  <kling@webkit.org>

        Simplify CSSParser::document().
        https://bugs.webkit.org/show_bug.cgi?id=70518

        Reviewed by Antti Koivisto.

        We don't need to climb up the entire parent chain here to find the
        Document, just grab it from m_styleSheet (which will do the climbing
        for us if necessary.)

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

2011-10-20  Pierre Rossi  <pierre.rossi@gmail.com>

        [Qt] FontCache::createFontPlatformData() is broken, a default font is returned
        even if the family does not match.
        https://bugs.webkit.org/show_bug.cgi?id=55036

        The problem here was that a FontPlatformData
        object is always created, regardless of whether
        the request for a given font family can be
        satisfied or not.

        Reviewed by Andreas Kling.

        Covered by existing tests.

        * platform/graphics/qt/FontCacheQt.cpp:
        (WebCore::FontCache::createFontPlatformData):

2011-10-20  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        When user is panning with the tiled backing store, the page
        isn't notified about the scroll position change
        https://bugs.webkit.org/show_bug.cgi?id=70495

        Reviewed by Simon Hausmann.

        When using the tiled backing store the UI handles scrolling,
        and sends setFixedVisibleContentRect after panning/scale ends.

        If we actually changed position we need to send the scroll DOM event.

        Covered by existing tests, though we are not testing the tiled backing store yet.

        * page/FrameView.cpp:
        (WebCore::FrameView::setFixedVisibleContentRect):
        * page/FrameView.h:
        * platform/ScrollView.h:
        (WebCore::ScrollView::setFixedVisibleContentRect):

2011-10-20  John Knottenbelt  <jknotten@chromium.org>

        Touch events should take page scale into account
        https://bugs.webkit.org/show_bug.cgi?id=69798

        Reviewed by Adam Barth.

        Test: fast/events/touch/page-scaled-touch-gesture-click.html

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

2011-10-20  Andreas Kling  <kling@webkit.org>

        CSSMutableStyleDeclaration: Simplify setNeedsStyleRecalc().
        https://bugs.webkit.org/show_bug.cgi?id=70509

        Reviewed by Antti Koivisto.

        We don't need to climb up the entire parent chain here to find the
        Document, just grab it from the parentStyleSheet() (which will do
        the climbing for us if necessary.)

        * css/CSSMutableStyleDeclaration.cpp:
        (WebCore::CSSMutableStyleDeclaration::setNeedsStyleRecalc):

2011-10-20  Andreas Kling  <kling@webkit.org>

        CSSStyleDeclaration: Remove inheritance from StyleBase.
        https://bugs.webkit.org/show_bug.cgi?id=70411

        Reviewed by Antti Koivisto.

        * bindings/js/JSDOMBinding.h:
        (WebCore::root):

            Specialized root() for CSSStyleDeclaration and CSSMutableStyleDeclaration.

        * css/CSSMutableStyleDeclaration.cpp:
        (WebCore::CSSMutableStyleDeclaration::setNeedsStyleRecalc):

            Start the parent chain traversal from the parentStyleSheet().

        (WebCore::CSSMutableStyleDeclaration::addSubresourceStyleURLs):
        * css/CSSParser.cpp:
        (WebCore::parseColorValue):
        (WebCore::parseSimpleLengthValue):
        (WebCore::CSSParser::parseValue):
        (WebCore::CSSParser::parseColor):
        (WebCore::CSSParser::parseDeclaration):

            Remove now-unnecessary assertions and casts.

        * css/CSSStyleDeclaration.cpp:
        (WebCore::CSSStyleDeclaration::CSSStyleDeclaration):
        * css/CSSStyleDeclaration.h:
        (WebCore::CSSStyleDeclaration::~CSSStyleDeclaration):
        (WebCore::CSSStyleDeclaration::parentRule):
        (WebCore::CSSStyleDeclaration::setParentRule):
        (WebCore::CSSStyleDeclaration::setParentStyleSheet):
        (WebCore::CSSStyleDeclaration::parentStyleSheet):

            Make CSSStyleDeclaration inherit directly from RefCounted, and have either
            a CSSRule or CSSStyleSheet parent. Eventually it should only need to have
            rules as parents, but CSSParser depends on having style sheet parents for
            URL completion and primitive value cache.

        * css/StyleBase.h:
        * css/CSSStyleDeclaration.h:
        (WebCore::CSSStyleDeclaration::isMutableStyleDeclaration):

            Moved from StyleBase down to CSSStyleDeclaration.

        * css/CSSStyleRule.cpp:
        (WebCore::CSSStyleRule::~CSSStyleRule):
        (WebCore::CSSStyleRule::setSelectorText):
        * css/WebKitCSSKeyframeRule.cpp:
        (WebCore::WebKitCSSKeyframeRule::~WebKitCSSKeyframeRule):
        (WebCore::WebKitCSSKeyframeRule::setDeclaration):
        * css/WebKitCSSKeyframesRule.cpp:
        (WebCore::WebKitCSSKeyframesRule::~WebKitCSSKeyframesRule):
        (WebCore::WebKitCSSKeyframesRule::append):
        (WebCore::WebKitCSSKeyframesRule::deleteRule):
        * dom/StyledElement.cpp:
        (WebCore::StyledElement::createInlineStyleDecl):
        (WebCore::StyledElement::destroyInlineStyleDecl):
        (WebCore::StyledElement::attributeChanged):
        (WebCore::StyledElement::createMappedDecl):
        (WebCore::StyledElement::didMoveToNewOwnerDocument):
        * html/HTMLTableElement.cpp:
        (WebCore::HTMLTableElement::additionalAttributeStyleDecls):
        (WebCore::HTMLTableElement::addSharedCellBordersDecl):
        (WebCore::HTMLTableElement::addSharedCellPaddingDecl):
        (WebCore::HTMLTableElement::addSharedGroupDecls):
        * page/PageSerializer.cpp:
        (WebCore::PageSerializer::retrieveResourcesForCSSDeclaration):
        * svg/SVGFontFaceElement.cpp:
        (WebCore::SVGFontFaceElement::SVGFontFaceElement):

            Use the new parenting methods of CSSStyleDeclaration.

        * css/StyleBase.cpp:
        (WebCore::StyleBase::node):

            Remove the isMutableStyleDeclaration() code path.

2011-10-20  Pavel Feldman  <pfeldman@google.com>

        Web Inspector: detach should call hide so that overrides are processed.
        https://bugs.webkit.org/show_bug.cgi?id=70503

        Reviewed by Yury Semikhatsky.

        * inspector/front-end/ConsolePanel.js:
        (WebInspector.ConsolePanel.prototype.hide):
        * inspector/front-end/View.js:
        (WebInspector.View):
        (WebInspector.View.prototype.hide):
        (WebInspector.View.prototype.detach):

2011-10-20  Csaba Osztrogonác  <ossy@webkit.org>

        [Qt] Roll-back r97964, r97972 and fix in https://bugs.webkit.org/show_bug.cgi?id=70328.

        * dom/DeviceMotionController.cpp:
        (WebCore::DeviceMotionController::timerFired):
        (WebCore::DeviceMotionController::addListener):
        (WebCore::DeviceMotionController::removeListener):
        (WebCore::DeviceMotionController::removeAllListeners):
        (WebCore::DeviceMotionController::suspend):
        (WebCore::DeviceMotionController::resume):
        * dom/DeviceMotionController.h:
        * dom/DeviceOrientationController.cpp:
        (WebCore::DeviceOrientationController::suspend):
        (WebCore::DeviceOrientationController::resume):
        * dom/DeviceOrientationController.h:
        * dom/Document.cpp:
        (WebCore::Document::suspendActiveDOMObjects):
        (WebCore::Document::resumeActiveDOMObjects):
        (WebCore::Document::stopActiveDOMObjects):
        * dom/Document.h:
        * dom/ScriptExecutionContext.h:
        * page/GeolocationController.cpp:
        (WebCore::GeolocationController::suspend):
        (WebCore::GeolocationController::resume):
        * page/GeolocationController.h:

2011-10-20  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r97964 and r97972.
        http://trac.webkit.org/changeset/97964
        http://trac.webkit.org/changeset/97972
        https://bugs.webkit.org/show_bug.cgi?id=70502

        They broke all geolocation tests in debug mode (Requested by
        Ossy on #webkit).

        * dom/DeviceMotionController.cpp:
        (WebCore::DeviceMotionController::timerFired):
        (WebCore::DeviceMotionController::addListener):
        (WebCore::DeviceMotionController::removeListener):
        (WebCore::DeviceMotionController::removeAllListeners):
        * dom/DeviceMotionController.h:
        * dom/DeviceOrientationController.cpp:
        * dom/DeviceOrientationController.h:
        * dom/Document.cpp:
        * dom/Document.h:
        * dom/ScriptExecutionContext.h:
        * page/GeolocationController.cpp:
        * page/GeolocationController.h:

2011-10-20  Ilya Tikhonovsky  <loislo@chromium.org>

        Unreviewed fix for Date.prototype.toISO8601Compact.
        It was generated wrong string for the dates with no leading zeros like 2011.11.11.

        * inspector/front-end/utilities.js:

2011-10-20  Pavel Feldman  <pfeldman@google.com>

        Web Inspector: minor CPU profiling UX improvements
        https://bugs.webkit.org/show_bug.cgi?id=70499

        Store profile type. Store time percentage toggle state.

        Reviewed by Yury Semikhatsky.

        * inspector/front-end/ProfileDataGridTree.js:
        * inspector/front-end/ProfileView.js:
        (WebInspector.CPUProfileView.profileCallback):
        (WebInspector.CPUProfileView.prototype._changeView.set else):

2011-10-20  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Advanced search results should keep working after pretty print toggled.
        https://bugs.webkit.org/show_bug.cgi?id=70347

        Reviewed by Pavel Feldman.

        * inspector/front-end/AdvancedSearchController.js:
        (WebInspector.SearchScope.prototype.createSearchResultsPane):
        (WebInspector.FileBasedSearchResultsPane.prototype.createAnchor):
        (WebInspector.FileBasedSearchResultsPane.prototype.addSearchResult):
        (WebInspector.FileBasedSearchResultsPane.prototype._regexMatchRanges):
        (WebInspector.FileBasedSearchResultsPane.prototype._createContentSpan):
        * inspector/front-end/BreakpointManager.js:
        (WebInspector.BreakpointManager.prototype._materializeBreakpoint):
        * inspector/front-end/CompilerSourceMapping.js:
        (WebInspector.CompilerSourceMapping.prototype.sourceLocationToCompiledLocation):
        * inspector/front-end/DebuggerPresentationModel.js:
        (WebInspector.DebuggerPresentationModel.prototype.createLinkifier):
        (WebInspector.DebuggerPresentationModel.prototype.continueToLine):
        (WebInspector.DebuggerPresentationModel.LinkifierFormatter):
        (WebInspector.DebuggerPresentationModel.LinkifierFormatter.prototype.formatRawSourceCodeAnchor):
        (WebInspector.DebuggerPresentationModel.DefaultLinkifierFormatter):
        (WebInspector.DebuggerPresentationModel.DefaultLinkifierFormatter.prototype.formatRawSourceCodeAnchor):
        (WebInspector.DebuggerPresentationModel.Linkifier):
        (WebInspector.DebuggerPresentationModel.Linkifier.prototype.linkifyLocation):
        (WebInspector.DebuggerPresentationModel.Linkifier.prototype.linkifyResource):
        (WebInspector.DebuggerPresentationModel.Linkifier.prototype.linkifyRawSourceCode):
        (WebInspector.DebuggerPresentationModel.Linkifier.prototype._updateAnchor):
        * inspector/front-end/RawSourceCode.js:
        (WebInspector.RawSourceCode.SourceMapping.prototype.uiLocationToRawLocation):
        (WebInspector.RawSourceCode.PlainSourceMapping.prototype.uiLocationToRawLocation):
        (WebInspector.RawSourceCode.FormattedSourceMapping.prototype.uiLocationToRawLocation):
        (WebInspector.RawSourceCode.CompilerSourceMapping.prototype.uiLocationToRawLocation):
        * inspector/front-end/ScriptsSearchScope.js:
        (WebInspector.ScriptsSearchResultsPane):
        (WebInspector.ScriptsSearchResultsPane.prototype.createAnchor):
        (WebInspector.ScriptsSearchResultsPane.LinkifierFormatter):
        (WebInspector.ScriptsSearchResultsPane.LinkifierFormatter.prototype.formatRawSourceCodeAnchor):
        * inspector/front-end/inspector.html:

2011-10-20  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        m_client in DeviceMotionController can never be 0, so no need to check for it
        https://bugs.webkit.org/show_bug.cgi?id=70490

        Reviewed by Simon Hausmann.

        No behavior change, thus no new tests.

        * dom/DeviceMotionController.cpp:
        (WebCore::DeviceMotionController::timerFired):
        (WebCore::DeviceMotionController::addListener):
        (WebCore::DeviceMotionController::removeListener):
        (WebCore::DeviceMotionController::removeAllListeners):
        (WebCore::DeviceMotionController::suspend):
        (WebCore::DeviceMotionController::resume):

2011-10-20  Cary Clark  <caryclark@google.com>

        [Chromium Skia on Mac] Improve focus ring
        https://bugs.webkit.org/show_bug.cgi?id=70124

        Reviewed by Adam Barth.
        
        The focus ring code formerly outset the bounds of
        the component rectangles by fractional amounts. Because
        the rectangles are SkIRect (integer based), the fractional
        outset had no effect.

        The equivalent code in GraphicsContextMac.mm computes
        the curve radius and rectangle outset with integers, so
        the use of floats in Skia's case, besides not working,
        is unnecessary.

        The Skia code also failed to take the offset into account.
        In LayoutTests, the focus rings either have an offset of
        0 or 2. The CoreGraphics code increases the ring's rectangles
        by the offset, then passes the result to wkDrawFocusRing.

        I did not find any documentation about how wkDrawFocusRing
        further inflates the focus ring, but empirically I determined
        that adding 2 to the offset generated rings with identical
        outer diameters.
 
        With these adjustments, the layout tests generate focus rings
        in the Skia on Mac case that match the coverage of the
        Chromium CG-based platform, in particular, matching:
        
        editing/inserting/editable-inline-element.html
        editing/selection/3690703-2.html

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

2011-10-20  Zoltan Herczeg  <zherczeg@webkit.org>

        Improve NEON based GaussianBlur
        https://bugs.webkit.org/show_bug.cgi?id=70493

        Reviewed by Csaba Osztrogonác.

        vmov instruction is less complex than vtbl.

        * platform/graphics/filters/arm/FEGaussianBlurNEON.cpp:

2011-10-20  Pavel Feldman  <pfeldman@google.com>

        Not reviewed: follow up to 97961 - dispatching of hide on detach was missing.

        * inspector/front-end/AuditsPanel.js:
        (WebInspector.AuditsPanel.prototype.show):
        * inspector/front-end/View.js:
        (WebInspector.View.prototype.detach):
        * inspector/front-end/utilities.js:

2011-10-20  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Properly suspend/resume Geolocation/DeviceMotion/DeviceOrientation objects
        https://bugs.webkit.org/show_bug.cgi?id=70328

        Reviewed by Simon Hausmann.

        Based on code from iOS and the N9.

        No new tests, as the suspend/resume functionality is not fully working yet.

        * dom/DeviceMotionController.cpp:
        (WebCore::DeviceMotionController::suspend):
        (WebCore::DeviceMotionController::resume):
        * dom/DeviceMotionController.h:
        * dom/DeviceOrientationController.cpp:
        (WebCore::DeviceOrientationController::addListener):
        (WebCore::DeviceOrientationController::removeListener):
        (WebCore::DeviceOrientationController::removeAllListeners):
        (WebCore::DeviceOrientationController::suspend):
        (WebCore::DeviceOrientationController::resume):
        * dom/DeviceOrientationController.h:
        * dom/Document.cpp:
        (WebCore::Document::suspendActiveDOMObjects):
        (WebCore::Document::resumeActiveDOMObjects):
        (WebCore::Document::stopActiveDOMObjects):
        * dom/Document.h:
        * dom/ScriptExecutionContext.h:
        * page/GeolocationController.cpp:
        (WebCore::GeolocationController::suspend):
        (WebCore::GeolocationController::resume):
        * page/GeolocationController.h:

2011-10-20  Antti Koivisto  <antti@apple.com>

        Move rule matching and applying to separate functions from CSSStyleSelector::styleForElement
        https://bugs.webkit.org/show_bug.cgi?id=70408

        Reviewed by Andreas Kling.

        - Move matching code to matchAllRules and applying to applyMatchedDeclarations.
        - Encapsulate the matching results into a struct, use everywhere.
        - Move first-line style adjustment to adjustRenderStyle().
        - Remove unnecessary tests for resolveForRootDefault when applying the style
        - Use applyMatchedDeclarations also from pseudoStyleForElement

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::matchAllRules):
        (WebCore::CSSStyleSelector::matchUARules):
        (WebCore::CSSStyleSelector::styleForElement):
        (WebCore::CSSStyleSelector::pseudoStyleForElement):
        (WebCore::CSSStyleSelector::styleForPage):
        (WebCore::CSSStyleSelector::adjustRenderStyle):
        (WebCore::CSSStyleSelector::pseudoStyleRulesForElement):
        (WebCore::CSSStyleSelector::applyMatchedDeclarations):
        * css/CSSStyleSelector.h:
        (WebCore::CSSStyleSelector::MatchResult::MatchResult):

2011-10-19  Pavel Feldman  <pfeldman@google.com>

        Web Inspector: get rid of manual view hierarchy management.
        https://bugs.webkit.org/show_bug.cgi?id=70417

        Reviewed by Yury Semikhatsky.

        * inspector/front-end/AuditsPanel.js:
        (WebInspector.AuditsPanel.prototype.show):
        (WebInspector.AuditsPanel.prototype._clearButtonClicked):
        * inspector/front-end/ConsolePanel.js:
        (WebInspector.ConsolePanel.prototype.show):
        (WebInspector.ConsolePanel.prototype.hide):
        * inspector/front-end/DetailedHeapshotGridNodes.js:
        (WebInspector.HeapSnapshotGenericObjectNode.prototype.queryObjectContent.else.formatResult):
        (WebInspector.HeapSnapshotGenericObjectNode.prototype.queryObjectContent):
        * inspector/front-end/DetailedHeapshotView.js:
        (WebInspector.DetailedHeapshotView.prototype.show.profileCallback2):
        (WebInspector.DetailedHeapshotView.prototype.show):
        (WebInspector.DetailedHeapshotView.prototype._changeView):
        * inspector/front-end/IFrameView.js:
        * inspector/front-end/NetworkPanel.js:
        (WebInspector.NetworkLogView):
        (WebInspector.NetworkLogView.prototype._initializeView):
        (WebInspector.NetworkPanel.prototype.show):
        (WebInspector.NetworkPanel.prototype._showResource):
        (WebInspector.NetworkPanel.prototype._closeVisibleResource):
        * inspector/front-end/Panel.js:
        (WebInspector.Panel.prototype.show):
        (WebInspector.Panel.prototype.detach):
        * inspector/front-end/ProfilesPanel.js:
        (WebInspector.ProfilesPanel.prototype._reset):
        (WebInspector.ProfilesPanel.prototype.closeVisibleView):
        * inspector/front-end/RemoteObject.js:
        * inspector/front-end/ResourcePreviewView.js:
        (WebInspector.ResourcePreviewView.prototype.contentLoaded):
        * inspector/front-end/ResourceResponseView.js:
        (WebInspector.ResourceResponseView.prototype.contentLoaded):
        * inspector/front-end/ResourceTimingView.js:
        (WebInspector.ResourceTimingView.prototype.show):
        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.ResourcesPanel.prototype.reset):
        (WebInspector.ResourcesPanel.prototype._innerShowView):
        (WebInspector.FrameResourceTreeElement.prototype._recreateSourceView):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype._uiSourceCodeRemoved):
        (WebInspector.ScriptsPanel.prototype._createSourceFrame):
        (WebInspector.ScriptsPanel.prototype._removeSourceFrame):
        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame):
        (WebInspector.SourceFrame.prototype.show):
        * inspector/front-end/TabbedPane.js:
        (WebInspector.TabbedPane):
        (WebInspector.TabbedPane.prototype.appendTab):
        (WebInspector.TabbedPane.prototype._hideTab):
        * inspector/front-end/View.js:
        (WebInspector.View):
        (WebInspector.View.prototype.show):
        (WebInspector.View.prototype.hide):
        (WebInspector.View.prototype.attach):
        (WebInspector.View.prototype.detach):
        (WebInspector.View.prototype._addChildView):
        (WebInspector.View.prototype._removeChildView):
        (WebInspector.View.prototype.dispatchToVisibleChildren):
        (WebInspector.View.prototype._handleInsertedIntoDocument):
        (WebInspector.View.prototype._handleRemovedFromDocument):
        (WebInspector.View.prototype.printViewHierarchy):
        (WebInspector.View.prototype._collectViewHierarchy):
        * inspector/front-end/inspector.html:
        * inspector/front-end/inspector.js:

2011-10-20  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Enable support for advanced search in script's static content provider.
        https://bugs.webkit.org/show_bug.cgi?id=70354

        Reviewed by Pavel Feldman.

        Test: http/tests/inspector/search/search-in-static.html

        * inspector/front-end/AdvancedSearchController.js:
        (WebInspector.FileBasedSearchResultsPane.prototype.addSearchResult):
        * inspector/front-end/ConsolePanel.js:
        (WebInspector.ConsolePanel.prototype.performSearch):
        * inspector/front-end/ContentProviders.js:
        (WebInspector.StaticContentProvider.prototype.searchInContent):
        * inspector/front-end/ElementsTreeOutline.js:
        ():
        * inspector/front-end/NetworkPanel.js:
        (WebInspector.NetworkLogView.prototype.performSearch):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype._showSourceLine):
        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame.createSearchRegex):
        * inspector/front-end/utilities.js:
        ():

2011-10-20  Raphael Kubo da Costa  <kubo@profusion.mobi>

        [EFL] Do not manually set the frameRect in different places in ScrollbarEfl.
        https://bugs.webkit.org/show_bug.cgi?id=70427

        Reviewed by Kenneth Rohde Christiansen.

        This commit is related to the effort towards having a different
        scrollbar (with a size > 0) for DumpRenderTree.

        Scrollbar::Scrollbar() already calls setFrameRect() with the size
        obtained from ScrollbarTheme::scrollbarThickness(), which is currently
        always 0 for us, so the call to setFrameRect() in ScrollbarEfl's
        constructor is not needed and would break things if scrollbarThickness
        is changed to return another value.

        The frameRect is also not changed in ScrollbarEfl::setParent() anymore,
        as it also does not take scrollbarThickness() into account and thus
        breaks using other themes such as ScrollbarThemeMock in DumpRenderTree.
        Right now, it is always going to be 0 anyway.

        It is still work in progress, though -- it'd be good to somehow move the
        theming code to ScrollbarThemeEfl, as right now scrollbar EDCs with a
        non-zero min size will not cause the scrollbars to have non-zero size.

        No new tests, this is machinery needed to run the current tests.

        * platform/efl/ScrollbarEfl.cpp:
        (ScrollbarEfl::ScrollbarEfl):
        (ScrollbarEfl::setParent):

2011-10-20  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r97954.
        http://trac.webkit.org/changeset/97954
        https://bugs.webkit.org/show_bug.cgi?id=70486

        clean build failed on chromium.mac: File
        "../inspector/CodeGeneratorInspector.py", line 34, in <module>
        import json (Requested by loislo on #webkit).

        * CMakeLists.txt:
        * CodeGenerators.pri:
        * DerivedSources.make:
        * GNUmakefile.am:
        * WebCore.gyp/WebCore.gyp:
        * inspector/CodeGeneratorInspector.pm: Added.
        (new):
        (GenerateModule):
        (GenerateInterface):
        (generateAgentDeclaration):
        (generateFrontendConstructorImpl):
        (generateFunctions):
        (generateFrontendFunction):
        (camelCase):
        (generateBackendFunction):
        (generateBackendSendResponse):
        (generateBackendReportProtocolError):
        (generateArgumentGetters):
        (generateBackendDispatcher):
        (generateBackendMessageParser):
        (collectBackendJSStubFunctions):
        (collectBackendJSStubEvents):
        (generateBackendStubJS):
        (generateHeader):
        (generateSource):
        (typeTraits):
        (paramTypeTraits):
        (generateBackendAgentFieldsAndConstructor):
        (finish):
        * inspector/CodeGeneratorInspector.py: Removed.
        * inspector/Inspector.json:
        * inspector/generate-inspector-idl: Added.

2011-10-20  Adenilson Cavalcanti  <adenilson.silva@openbossa.org>

        Enable geolocation client based flag for Qt5
        https://bugs.webkit.org/show_bug.cgi?id=70330

        Reviewed by Kenneth Rohde Christiansen.

        This will enable client based geolocation for Qt5.

        No new tests, this enables flags for Qt5.

        * features.pri:

2011-10-20  Kentaro Hara  <haraken@chromium.org>

        Implement a MessageEvent constructor for V8
        https://bugs.webkit.org/show_bug.cgi?id=70296

        Reviewed by Adam Barth.

        Test: fast/events/constructors/message-event-constructor.html

        * bindings/v8/OptionsObject.cpp:
        (WebCore::OptionsObject::getKeyValue): Returns RefPtr<DOMWindow> corresponding to a given key.
        (WebCore::OptionsObject::getKeyValue): Returns MessagePortArray corresponding to a given key.
        * bindings/v8/OptionsObject.h:
        * bindings/v8/custom/V8EventConstructors.cpp: Added a MessageEvent constructor.
        * dom/MessageEvent.idl: Makes MessageEvent constructible for V8.

2011-10-20  Peter Rybin  <peter.rybin@gmail.com>

        Web Inspector: reimplement protocol backend/frontend source generator
        https://bugs.webkit.org/show_bug.cgi?id=69295

        Reviewed by Pavel Feldman.

        Old 2-stage python+perf generator that uses intermediate IDL output is
        being replaced with a solid python script. This is for simplicity and
        as a base for the future JSON validator.

        * CMakeLists.txt:
        * CodeGenerators.pri:
        * DerivedSources.make:
        * GNUmakefile.am:
        * WebCore.gyp/WebCore.gyp:
        * inspector/CodeGeneratorInspector.pm: Removed.
        * inspector/CodeGeneratorInspector.py: Added.
        * inspector/Inspector.json:
        * inspector/generate-inspector-idl: Removed.

2011-10-18  Pavel Podivilov  <podivilov@chromium.org>

        Web Inspector: encode source map url as source map page url query parameter.
        https://bugs.webkit.org/show_bug.cgi?id=70327

        Reviewed by Pavel Feldman.

        * inspector/front-end/CompilerSourceMappingProvider.js:
        (WebInspector.CompilerSourceMappingProvider):
        (WebInspector.CompilerSourceMappingProvider.prototype.loadSourceMapping.frameLoaded):
        (WebInspector.CompilerSourceMappingProvider.prototype.loadSourceMapping):
        (WebInspector.CompilerSourceMappingProvider.prototype.loadSourceCode):
        (WebInspector.CompilerSourceMappingProvider.prototype._sendRequest):
        * inspector/front-end/RawSourceCode.js:
        (WebInspector.RawSourceCode.CompilerSourceMapping.prototype.uiSourceCodeList):

2011-10-19  Alexander Pavlov  <apavlov@chromium.org>

        Web Inspector: The "x" in "980px x 36px" looks weird in the inspector node callout
        https://bugs.webkit.org/show_bug.cgi?id=69857

        Reviewed by Pavel Feldman.

        * inspector/DOMNodeHighlighter.cpp:

2011-10-20  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r97917.
        http://trac.webkit.org/changeset/97917
        https://bugs.webkit.org/show_bug.cgi?id=70475

        number of crashes on Snow Leopard/Lion tests bots
        http://build.webkit.org/results/Lion%20Intel%20Release%20(Tests)/r97917%20(2020)/http/tests/inspector
        /extensions-network-redirect-crash-log.txt (Requested by
        loislo on #webkit).

        * css/SelectorChecker.cpp:
        (WebCore::SelectorChecker::checkOneSelector):
        * dom/OptionElement.cpp:
        (WebCore::OptionElement::setSelectedState):
        (WebCore::OptionElement::optionIndex):
        (WebCore::OptionElement::collectOptionLabelOrText):
        (WebCore::OptionElement::collectOptionInnerText):
        (WebCore::OptionElement::normalizeText):
        (WebCore::OptionElement::collectOptionTextRespectingGroupLabel):
        (WebCore::OptionElementData::OptionElementData):
        (WebCore::OptionElementData::~OptionElementData):
        (WebCore::toOptionElement):
        (WebCore::isOptionElement):
        * dom/OptionElement.h:
        (WebCore::OptionElement::~OptionElement):
        (WebCore::OptionElementData::value):
        (WebCore::OptionElementData::setValue):
        (WebCore::OptionElementData::label):
        (WebCore::OptionElementData::setLabel):
        (WebCore::OptionElementData::selected):
        (WebCore::OptionElementData::setSelected):
        * html/HTMLOptionElement.cpp:
        (WebCore::HTMLOptionElement::HTMLOptionElement):
        (WebCore::HTMLOptionElement::createForJSConstructor):
        (WebCore::HTMLOptionElement::text):
        (WebCore::HTMLOptionElement::index):
        (WebCore::HTMLOptionElement::parseMappedAttribute):
        (WebCore::HTMLOptionElement::value):
        (WebCore::HTMLOptionElement::selected):
        (WebCore::HTMLOptionElement::setSelected):
        (WebCore::HTMLOptionElement::setSelectedState):
        (WebCore::HTMLOptionElement::defaultSelected):
        (WebCore::HTMLOptionElement::setDefaultSelected):
        (WebCore::HTMLOptionElement::label):
        (WebCore::HTMLOptionElement::textIndentedToRespectGroupLabel):
        (WebCore::HTMLOptionElement::insertedIntoTree):
        * html/HTMLOptionElement.h:
        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::nextValidIndex):
        (WebCore::HTMLSelectElement::saveLastSelection):
        (WebCore::HTMLSelectElement::setActiveSelectionAnchorIndex):
        (WebCore::HTMLSelectElement::updateListBoxSelection):
        (WebCore::HTMLSelectElement::listBoxOnChange):
        (WebCore::HTMLSelectElement::recalcListItems):
        (WebCore::HTMLSelectElement::selectedIndex):
        (WebCore::HTMLSelectElement::setSelectedIndex):
        (WebCore::HTMLSelectElement::optionToListIndex):
        (WebCore::HTMLSelectElement::listToOptionIndex):
        (WebCore::HTMLSelectElement::deselectItemsWithoutValidation):
        (WebCore::HTMLSelectElement::saveFormControlState):
        (WebCore::HTMLSelectElement::restoreFormControlState):
        (WebCore::HTMLSelectElement::appendFormData):
        (WebCore::HTMLSelectElement::reset):
        (WebCore::HTMLSelectElement::updateSelectedState):
        (WebCore::HTMLSelectElement::lastSelectedListIndex):
        (WebCore::HTMLSelectElement::typeAheadFind):
        (WebCore::HTMLSelectElement::accessKeySetSelectedIndex):
        (WebCore::HTMLSelectElement::length):
        * platform/graphics/cg/ImageBufferCG.cpp:
        (WebCore::ImageBuffer::copyImage):
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::updateFromElement):
        (WebCore::RenderListBox::addFocusRingRects):
        (WebCore::RenderListBox::paintItemForeground):
        (WebCore::RenderListBox::paintItemBackground):
        * rendering/RenderMenuList.cpp:
        (WebCore::RenderMenuList::updateOptionsWidth):
        (WebCore::RenderMenuList::setTextFromOption):
        (WebCore::RenderMenuList::itemText):
        (WebCore::RenderMenuList::itemIsSelected):

2011-10-20  Carol Szabo  <carol@webkit.org>

        Tiled Backing Store does not regenerate tiles when it should
        https://bugs.webkit.org/show_bug.cgi?id=57798

        Reviewed by Darin Adler.

        Changed TiledBackingStore::adjustVisibleRect to take into account
        contentsSize, the same way as it is done when tiles are generated.

        This is an issue that requires a certain sequence of API calls which
        may not be easily simulated from DumpRenderTree, but which is 
        easily reproduced with QtTest. This is why I have provided only
        a Qt specific test despite this being a generic problem.

        * platform/graphics/TiledBackingStore.cpp:
        (WebCore::TiledBackingStore::adjustVisibleRect):
        Changed to take into account ContentsSize.
        (WebCore::TiledBackingStore::visibleContentsRect):
        Added to return the intersection of the viewport's visible rect with
        the ContentsRect.
        (WebCore::TiledBackingStore::createTiles):
        Changed to take into account the ContentsSize when calculating the
        previously visible rect.
        * platform/graphics/TiledBackingStore.h:

2011-10-19  Jer Noble  <jer.noble@apple.com>

        compositing/video tests time out on Lion
        https://bugs.webkit.org/show_bug.cgi?id=70448

        Reviewed by Eric Carlson.

        Covered by existing tests.

        AVFoundation will occasionally fill it's playback buffers before collecting enough
        statistical information to answer YES to isLikelyToKeepUp.  In this situation, set the
        ready state to HAVE_ENOUGH_DATA, on the presumption that if the playback buffers are
        full, playback will probably not stall.

        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp:
        (WebCore::MediaPlayerPrivateAVFoundation::updateStates):

2011-10-19  Kentaro Hara  <haraken@chromium.org>

        MessageEvent.data can be stored as ScriptValue.
        https://bugs.webkit.org/show_bug.cgi?id=68978

        Reviewed by Hajime Morita.

        Currently, the following test cases fail or crash:

        - shouldBe("new MessageEvent('eventType', { data: test_object }).data", "test_object") -> FAIL
        - new MessageEvent('eventType', { data: document }).data -> CRASH

        This is because MessageEvent.data is implemented just as SerializedScriptValue
        and it cannot keep ScriptValue passed by JavaScript. This patch makes the following changes:

        - If MessageEvent is constructed with ScriptValue, it is stored as ScriptValue internally.
        When MessageEvent.data is called, the ScriptValue is returned.
        - If MessageEvent is constructed with SerializedScriptValue, it is stored as
        SerializedScriptValue internally (since we cannot deserialize it into ScriptValue
        at this point because of lack of ExecState). When MessageEvent.data is called,
        the SerializedScriptValue is deserialized into the corresponding ScriptValue,
        and the ScriptValue is returned.

        This patch does not make a fix for ObjC bindings code, since we need to first fix
        the bug 28774, as commented in dom/MessageEvent.h and dom/MessageEvent.cpp.

        Test: fast/events/constructors/message-event-constructor.html
              fast/dom/message-port-deleted-by-accessor.html
              fast/events/init-events.html
              fast/eventsource/eventsource-attribute-listeners.html

        * bindings/js/JSMessageEventCustom.cpp:
        (WebCore::JSMessageEvent::data): Custom getter for MessageEvent.data. Supported ScriptValue.
        (WebCore::JSMessageEvent::handleInitMessageEvent): Changed SerializedScriptValue to ScriptValue. Removed a 'doTransfer' parameter.
        (WebCore::JSMessageEvent::initMessageEvent): Removed a 'doTransfer' parameter.
        (WebCore::JSMessageEvent::webkitInitMessageEvent): Ditto.
        * bindings/v8/custom/V8MessageEventCustom.cpp:
        (WebCore::V8MessageEvent::dataAccessorGetter): Custom getter for MessageEvent.data. Supported ScriptValue.
        (WebCore::V8MessageEvent::portsAccessorGetter): Removed extra spaces.
        (WebCore::V8MessageEvent::initMessageEventCallback): Changed SerializedScriptValue to ScriptValue.
        * dom/MessageEvent.cpp:
        (WebCore::MessageEvent::MessageEvent): Supported ScriptValue.
        (WebCore::MessageEvent::initMessageEvent): Supported ScriptValue.
        (WebCore::MessageEvent::isMessageEvent): Removed extra spaces.
        * dom/MessageEvent.h: Added DataType::DataTypeScriptValue.
        (WebCore::MessageEvent::create): Supported ScriptValue.
        (WebCore::MessageEvent::dataAsScriptValue): Getter for data. Insert ASSERT() to guarantee that this accessor is not called for unintended type of data.
        (WebCore::MessageEvent::dataAsSerializedScriptValue): Ditto.
        (WebCore::MessageEvent::dataAsString): Ditto.
        (WebCore::MessageEvent::dataAsBlob): Ditto.
        (WebCore::MessageEvent::dataAsArrayBuffer): Ditto.
        * dom/MessageEvent.idl: Changed SerializedScriptValue to DOMObject (i.e. ScriptValue). This patch does not touch an ObjC part. Removed [CachedAttribute] from MessageEvent.data, since it is now a DOMObject and needs not to be cached.

2011-10-19  Adam Barth  <abarth@webkit.org>

        Attempt to fix GTK build.

        * GNUmakefile.am:

== Rolled over to ChangeLog-2011-10-19 ==
